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.
@@ -1644,6 +1644,2550 @@ class ParseCtxClassSetCollector extends ParseContext {
1644
1644
  }
1645
1645
  }
1646
1646
 
1647
+ // node_modules/entities/dist/decode-codepoint.js
1648
+ var decodeMap = new Map([
1649
+ [0, 65533],
1650
+ [128, 8364],
1651
+ [130, 8218],
1652
+ [131, 402],
1653
+ [132, 8222],
1654
+ [133, 8230],
1655
+ [134, 8224],
1656
+ [135, 8225],
1657
+ [136, 710],
1658
+ [137, 8240],
1659
+ [138, 352],
1660
+ [139, 8249],
1661
+ [140, 338],
1662
+ [142, 381],
1663
+ [145, 8216],
1664
+ [146, 8217],
1665
+ [147, 8220],
1666
+ [148, 8221],
1667
+ [149, 8226],
1668
+ [150, 8211],
1669
+ [151, 8212],
1670
+ [152, 732],
1671
+ [153, 8482],
1672
+ [154, 353],
1673
+ [155, 8250],
1674
+ [156, 339],
1675
+ [158, 382],
1676
+ [159, 376]
1677
+ ]);
1678
+ function replaceCodePoint(codePoint) {
1679
+ if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
1680
+ return 65533;
1681
+ }
1682
+ return decodeMap.get(codePoint) ?? codePoint;
1683
+ }
1684
+
1685
+ // node_modules/entities/dist/internal/decode-shared.js
1686
+ function decodeBase64(input) {
1687
+ const binary = atob(input);
1688
+ const evenLength = binary.length & ~1;
1689
+ const out = new Uint16Array(evenLength / 2);
1690
+ for (let index = 0, outIndex = 0;index < evenLength; index += 2) {
1691
+ const lo = binary.charCodeAt(index);
1692
+ const hi = binary.charCodeAt(index + 1);
1693
+ out[outIndex++] = lo | hi << 8;
1694
+ }
1695
+ return out;
1696
+ }
1697
+
1698
+ // node_modules/entities/dist/generated/decode-data-html.js
1699
+ var 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/BjAAFleR4cIRzkIWlsN2E6ZHIAAOA12CjdciJlZW4AOGFjAHkARWRjAHkAXGRwAGYAAOA12FzdYwByAADgNdjA3IALQUJFSGFiY2RlZmdoamxtbm9wcnN0dXYAXhxtHHEcdRx5HN8cBx0dHTwd3B3tHfEdAR4EHh0eLB5FHrwewx7hHgkfPR9LH4ABYXJ0AGQcZxxpHHIA8gBvB/IAxQLhIWlsAKAbKeEhcnIAoA4pZ6BmIgCgiyphAHIAAKBiKWMJjRwAAJAcAACVHAAAAAAAAAAAAACZHJwcAACmHKgcrRwAANIc9SF0ZTph7SJwdHl2AKC0KXIAYQDuAFoG4iFkYbtjZwAAoegnZGyhHKMcAKCRKeUAiwYAoIUqdQBvADuAqwCrQHIAgKOQIWJmaGxwc3QAuhy/HMIcxBzHHMoczhxmoOQhcwAAoB8pcwAAoB0p6wCyGnAAAKCrIWwAAKA5KWkAbQAAoHMpbAAAoKIhAKGrKmFl1hzaHGkAbAAAoBkpc6CtKgDgrSoA/oABYWJyAOUc6RztHHIAcgAAoAwpcgBrAACgcicAAWFr8Rz4HGMAAAFla/Yc9xx7YFtgAAFlc/wc/hwAoIspbAAAAWR1Ax0FHQCgjykAoI0pAAJhZXV5Dh0RHRodHB3yIW9uPmEAAWRpFR0YHWkAbAA8YewAowbiAPccO2QAAmNxcnMkHScdLB05HWEAAKA2KXUAbwDyoBwgqhEAAWR1MB00HeghYXIAoGcpcyJoYXIAAKBLKWgAAKCyIQCiZCJmZ3FzRB1FB5Qdnh10AIACYWhscnQATh1WHWUdbB2NHXIicm93AHSgkCFhAOkAzxxhI3Jwb29uAAABZHVeHWId7yF3bgCgvSFwAACgvCHlJGZ0YXJyb3dzAKDHIWkiZ2h0AIABYWhzAHUdex2DHXIicm93APOglCGdBmEAcgBwAG8AbwBuAPMAzgtxAHUAaQBnAGEAcgByAG8A9wBlGugkcmVldGltZXMAoMsi8aFkIk0HAACaHWwAYQBuAPQAXgcAon0qY2Rnc6YdqR2xHbcdYwAAoKgqbwB0AG+gfypyoIEqAKCDKmXg2iIA/nMAAKCTKoACYWRlZ3MAwB3GHcod1h3ZHXAAcAByAG8A+ACmHG8AdAAAoNYicQAAAWdxzx3SHXQA8gBGB2cAdADyAHQcdADyAFMHaQDtAGMHgAFpbHIA4h3mHeod8yFodACgfClvAG8A8gDKBgDgNdgp3UWgdiIAoJEqYQH1Hf4dcgAAAWR1YB35HWygvCEAoGopbABrAACghCVjAHkAWWQAomoiYWNodAweDx4VHhkecgDyAGsdbwByAG4AZQDyAGAW4SFyZACgaylyAGkAAKD6JQABaW8hHiQe5CFvdEBh9SFzdGGgsCPjIWhlAKCwIwACRWFlczMeNR48HkEeAKBoInAAcKCJKvIhb3gAoIkqcaCHKvGghyo0HmkAbQAAoOYiAARhYm5vcHR3elIeXB5fHoUelh6mHqsetB4AAW5yVh5ZHmcAAKDsJ3IAAKD9IXIA6wCwBmcAgAFsbXIAZh52Hnse5SFmdAABYXKIB2weaQBnAGgAdABhAHIAcgBvAPcAkwfhInBzdG8AoPwnaQBnAGgAdABhAHIAcgBvAPcAmgdwI2Fycm93AAABbHKNHpEeZQBmAPQAxhxpImdodAAAoKwhgAFhZmwAnB6fHqIecgAAoIUpAOA12F3ddQBzAACgLSppIm1lcwAAoDQqYQGvHrMecwB0AACgFyLhAIoOZaHKJbkeRhLuIWdlAKDKJWEAcgBsoCgAdAAAoJMpgAJhY2htdADMHs8e1R7bHt0ecgDyAJ0GbwByAG4AZQDyANYWYQByAGSgyyEAoG0pAKAOIHIAaQAAoL8iAANhY2hpcXTrHu8e1QfzHv0eBh/xIXVvAKA5IHIAAOA12MHcbQDloXIi+h4AAPweAKCNKgCgjyoAAWJ19xwBH28AcqAYIACgGiDyIW9rQmEAhDwAO2NkaGlscXJCBhcfxh0gHyQfKB8sHzEfAAFjaRsfHR8AoKYqcgAAoHkqcgBlAOUAkx3tIWVzAKDJIuEhcnIAoHYpdSJlc3QAAKB7KgABUGk1HzkfYQByAACglillocMlAgdfEnIAAAFkdUIfRx9zImhhcgAAoEop6CFhcgCgZikAAWVuTx9WH3IjdG5lcXEAAOBoIgD+xQBUHwAHRGFjZGVmaGlsbm9wc3VuH3Ifoh+rH68ftx+7H74f5h/uH/MfBwj/HwsgxCFvdACgOiIAAmNscHJ5H30fiR+eH3IAO4CvAK9AAAFldIEfgx8AoEImZaAgJ3MAZQAAoCAnc6CmIXQAbwCAoaYhZGx1AJQfmB+cH28AdwDuAHkDZQBmAPQA6gbwAOkO6yFlcgCgriUAAW95ph+qH+0hbWEAoCkqPGThIXNoAKAUIOElc3VyZWRhbmdsZQCgISJyAADgNdgq3W8AAKAnIYABY2RuAMQfyR/bH3IAbwA7gLUAtUBhoiMi0B8AANMf1x9zAPQAKxFpAHIAAKDwKm8AdAA7gLcAt0B1AHMA4qESIh4TAADjH3WgOCIAoCoqYwHqH+0fcAAAoNsq8gB+GnAAbAB1APMACAgAAWRw9x/7H+UhbHMAoKciZgAA4DXYXt0AAWN0AyAHIHIAAOA12MLc8CFvcwCgPiJsobwDECAVIPQiaW1hcACguCJhAPAAEyAADEdMUlZhYmNkZWZnaGlqbG1vcHJzdHV2dzwgRyBmIG0geSCqILgg2iDeIBEhFSEyIUMhTSFQIZwhnyHSIQAiIyKLIrEivyIUIwABZ3RAIEMgAODZIjgD9uBrItIgBwmAAWVsdABNIF8gYiBmAHQAAAFhclMgWCByInJvdwAAoM0h6SRnaHRhcnJvdwCgziEA4NgiOAP24Goi0iBfCekkZ2h0YXJyb3cAoM8hAAFEZHEgdSDhIXNoAKCvIuEhc2gAoK4igAJiY25wdACCIIYgiSCNIKIgbABhAACgByL1IXRlRGFnAADgICLSIACiSSJFaW9wlSCYIJwgniAA4HAqOANkAADgSyI4A3MASWFyAG8A+AAyCnUAcgBhoG4mbADzoG4mmwjzAa8gAACzIHAAO4CgAKBAbQBwAOXgTiI4AyoJgAJhZW91eQDBIMogzSDWINkg8AHGIAAAyCAAoEMqbwBuAEhh5CFpbEZhbgBnAGSgRyJvAHQAAOBtKjgDcAAAoEIqPWThIXNoAKATIACjYCJBYWRxc3jpIO0g+SD+IAIhDCFyAHIAAKDXIXIAAAFocvIg9SBrAACgJClvoJch9wAGD28AdAAA4FAiOAN1AGkA9gC7CAABZWkGIQohYQByAACgKCntAN8I6SFzdPOgBCLlCHIAAOA12CvdAAJFZXN0/wgcISshLiHxoXEiIiEAABMJ8aFxIgAJAAAnIWwAYQBuAPQAEwlpAO0AGQlyoG8iAKBvIoABQWFwADghOyE/IXIA8gBeIHIAcgAAoK4hYQByAACg8ipzogsiSiEAAAAAxwtkoPwiAKD6ImMAeQBaZIADQUVhZGVzdABcIV8hYiFmIWkhkyGWIXIA8gBXIADgZiI4A3IAcgAAoJohcgAAoCUggKFwImZxcwBwIYQhjiF0AAABYXJ1IXohcgByAG8A9wBlIWkAZwBoAHQAYQByAHIAbwD3AD4h8aFwImAhAACKIWwAYQBuAPQAZwlz4H0qOAMAoG4iaQDtAG0JcqBuImkA5aDqIkUJaQDkADoKAAFwdKMhpyFmAADgNdhf3YCBrAA7aW4AriGvIcchrEBuAIChCSJFZHYAtyG6Ib8hAOD5IjgDbwB0AADg9SI4A+EB1gjEIcYhAKD3IgCg9iJpAHagDCLhAagJzyHRIQCg/iIAoP0igAFhb3IA2CHsIfEhcgCAoSYiYXN0AOAh5SHpIWwAbABlAOwAywhsAADg/SrlIADgAiI4A2wiaW50AACgFCrjoYAi9yEAAPohdQDlAJsJY+CvKjgDZaCAIvEAkwkAAkFhaXQHIgoiFyIeInIA8gBsIHIAcgAAoZshY3cRIhQiAOAzKTgDAOCdITgDZyRodGFycm93AACgmyFyAGkA5aDrIr4JgANjaGltcHF1AC8iPCJHIpwhTSJQIloigKGBImNlcgA2Iv0JOSJ1AOUABgoA4DXYw9zvIXJ0bQKdIQAAAABEImEAcgDhAOEhbQBloEEi8aBEIiYKYQDyAMsIcwB1AAABYnBWIlgi5QDUCeUA3wmAAWJjcABgInMieCKAoYQiRWVzAGci7glqIgDgxSo4A2UAdABl4IIi0iBxAPGgiCJoImMAZaCBIvEA/gmAoYUiRWVzAH8iFgqCIgDgxio4A2UAdABl4IMi0iBxAPGgiSKAIgACZ2lscpIilCKaIpwi7AAMCWwAZABlADuA8QDxQOcAWwlpI2FuZ2xlAAABbHKkIqoi5SFmdGWg6iLxAEUJaSJnaHQAZaDrIvEAvgltoL0DAKEjAGVzuCK8InIAbwAAoBYhcAAAoAcggARESGFkZ2lscnMAziLSItYi2iLeIugi7SICIw8j4SFzaACgrSLhIXJyAKAEKXAAAOBNItIg4SFzaACgrCIAAWV04iLlIgDgZSLSIADgPgDSIG4iZmluAACg3imAAUFldADzIvci+iJyAHIAAKACKQDgZCLSIHLgPADSIGkAZQAA4LQi0iAAAUF0BiMKI3IAcgAAoAMp8iFpZQDgtSLSIGkAbQAA4Dwi0iCAAUFhbgAaIx4jKiNyAHIAAKDWIXIAAAFociMjJiNrAACgIylvoJYh9wD/DuUhYXIAoCcpUxJqFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVCMAAF4jaSN/I4IjjSOeI8AUAAAAAKYjwCMAANoj3yMAAO8jHiQvJD8kRCQAAWNzVyNsFHUAdABlADuA8wDzQAABaXlhI2cjcgBjoJoiO4D0APRAPmSAAmFiaW9zAHEjdCN3I3EBeiNzAOgAdhTsIWFjUWF2AACgOCrvIWxkAKC8KewhaWdTYQABY3KFI4kjaQByAACgvykA4DXYLN1vA5QjAAAAAJYjAACcI24A22JhAHYAZQA7gPIA8kAAoMEpAAFibaEjjAphAHIAAKC1KQACYWNpdKwjryO6I70jcgDyAFkUAAFpcrMjtiNyAACgvinvIXNzAKC7KW4A5QDZCgCgwCmAAWFlaQDFI8gjyyNjAHIATWFnAGEAyWOAAWNkbgDRI9Qj1iPyIW9uv2MAoLYpdQDzAHgBcABmAADgNdhg3YABYWVsAOQj5yPrI3IAAKC3KXIAcAAAoLkpdQDzAHwBAKMoImFkaW9zdvkj/CMPJBMkFiQbJHIA8gBeFIChXSplZm0AAyQJJAwkcgBvoDQhZgAAoDQhO4CqAKpAO4C6ALpA5yFvZgCgtiJyAACgVipsIm9wZQAAoFcqAKBbKoABY2xvACMkJSQrJPIACCRhAHMAaAA7gPgA+EBsAACgmCJpAGwBMyQ4JGQAZQA7gPUA9UBlAHMAYaCXInMAAKA2Km0AbAA7gPYA9kDiIWFyAKA9I+EKXiQAAHokAAB8JJQkAACYJKkkAAAAALUkEQsAAPAkAAAAAAQleiUAAIMlcgCAoSUiYXN0AGUkbyQBCwCBtgA7bGokayS2QGwAZQDsABgDaQJ1JAAAAAB4JG0AAKDzKgCg/Sp5AD9kcgCAAmNpbXB0AIUkiCSLJJkSjyRuAHQAJWBvAGQALmBpAGwAAKAwIOUhbmsAoDEgcgAA4DXYLd2AAWltbwCdJKAkpCR2oMYD1WNtAGEA9AD+B24AZQAAoA4m9KHAA64kAAC0JGMjaGZvcmsAAKDUItZjAAFhdbgkxCRuAAABY2u9JMIkawBooA8hAKAOIfYAaRpzAACkKwBhYmNkZW1zdNMkIRPXJNsk4STjJOck6yTjIWlyAKAjKmkAcgAAoCIqAAFvdYsW3yQAoCUqAKByKm4AO4CxALFAaQBtAACgJip3AG8AAKAnKoABaXB1APUk+iT+JO4idGludACgFSpmAADgNdhh3W4AZAA7gKMAo0CApHoiRWFjZWlub3N1ABMlFSUYJRslTCVRJVklSSV1JQCgsypwAACgtyp1AOUAPwtjoK8qgKJ6ImFjZW5zACclLSU0JTYlSSVwAHAAcgBvAPgAFyV1AHIAbAB5AGUA8QA/C/EAOAuAAWFlcwA8JUElRSXwInByb3gAoLkqcQBxAACgtSppAG0AAKDoImkA7QBEC20AZQDzoDIgIguAAUVhcwBDJVclRSXwAEAlgAFkZnAATwtfJXElgAFhbHMAZSVpJW0l7CFhcgCgLiPpIW5lAKASI/UhcmYAoBMjdKAdIu8AWQvyIWVsAKCwIgABY2l9JYElcgAA4DXYxdzIY24iY3NwAACgCCAAA2Zpb3BzdZElKxuVJZolnyWkJXIAAOA12C7dcABmAADgNdhi3XIiaW1lAACgVyBjAHIAAOA12MbcgAFhZW8AqiW6JcAldAAAAWVpryW2JXIAbgBpAG8AbgDzABkFbgB0AACgFipzAHQAZaA/APEACRj0AG0LgApBQkhhYmNkZWZoaWxtbm9wcnN0dXgA4yXyJfYl+iVpJpAmpia9JtUm5ib4JlonaCdxJ3UnnietJ7EnyCfiJ+cngAFhcnQA6SXsJe4lcgDyAJkM8gD6AuEhaWwAoBwpYQByAPIA3BVhAHIAAKBkKYADY2RlbnFydAAGJhAmEyYYJiYmKyZaJgABZXUKJg0mAOA9IjEDdABlAFVhaQDjACAN7SJwdHl2AKCzKWcAgKHpJ2RlbAAgJiImJCYAoJIpAKClKeUA9wt1AG8AO4C7ALtAcgAApZIhYWJjZmhscHN0dz0mQCZFJkcmSiZMJk4mUSZVJlgmcAAAoHUpZqDlIXMAAKAgKQCgMylzAACgHinrALka8ACVHmwAAKBFKWkAbQAAoHQpbAAAoKMhAKCdIQABYWleJmImaQBsAACgGilvAG6gNiJhAGwA8wB2C4ABYWJyAG8mciZ2JnIA8gAvEnIAawAAoHMnAAFha3omgSZjAAABZWt/JoAmfWBdYAABZXOFJocmAKCMKWwAAAFkdYwmjiYAoI4pAKCQKQACYWV1eZcmmiajJqUm8iFvbllhAAFkaZ4moSZpAGwAV2HsAA8M4gCAJkBkAAJjbHFzrSawJrUmuiZhAACgNylkImhhcgAAoGkpdQBvAPKgHSCjAWgAAKCzIYABYWNnAMMm0iaUC2wAgKEcIWlwcwDLJs4migxuAOUAoAxhAHIA9ADaC3QAAKCtJYABaWxyANsm3ybjJvMhaHQAoH0pbwBvAPIANgwA4DXYL90AAWFv6ib1JnIAAAFkde8m8SYAoMEhbKDAIQCgbCl2oMED8WOAAWducwD+Jk4nUCdoAHQAAANhaGxyc3QKJxInISc1Jz0nRydyInJvdwB0oJIhYQDpAFYmYSNycG9vbgAAAWR1GiceJ28AdwDuAPAmcAAAoMAh5SFmdAABYWgnJy0ncgByAG8AdwDzAAkMYQByAHAAbwBvAG4A8wATBGklZ2h0YXJyb3dzAACgySFxAHUAaQBnAGEAcgByAG8A9wBZJugkcmVldGltZXMAoMwiZwDaYmkAbgBnAGQAbwB0AHMAZQDxABwYgAFhaG0AYCdjJ2YncgDyAAkMYQDyABMEAKAPIG8idXN0AGGgsSPjIWhlAKCxI+0haWQAoO4qAAJhYnB0fCeGJ4knmScAAW5ygCeDJ2cAAKDtJ3IAAKD+IXIA6wAcDIABYWZsAI8nkieVJ3IAAKCGKQDgNdhj3XUAcwAAoC4qaSJtZXMAAKA1KgABYXCiJ6gncgBnoCkAdAAAoJQp7yJsaW50AKASKmEAcgDyADwnAAJhY2hxuCe8J6EMwCfxIXVvAKA6IHIAAOA12MfcAAFidYAmxCdvAPKgGSCoAYABaGlyAM4n0ifWJ3IAZQDlAE0n7SFlcwCgyiJpAIChuSVlZmwAXAxjEt4n9CFyaQCgzinsInVoYXIAoGgpAKAeIWENBSgJKA0oSyhVKIYoAACLKLAoAAAAAOMo5ygAABApJCkxKW0pcSmHKaYpAACYKgAAAACxKmMidXRlAFthcQB1AO8ABR+ApHsiRWFjZWlucHN5ABwoHignKCooLygyKEEoRihJKACgtCrwASMoAAAlKACguCpvAG4AYWF1AOUAgw1koLAqaQBsAF9hcgBjAF1hgAFFYXMAOCg6KD0oAKC2KnAAAKC6KmkAbQAAoOki7yJsaW50AKATKmkA7QCIDUFkbwB0AGKixSKRFgAAAABTKACgZiqAA0FhY21zdHgAYChkKG8ocyh1KHkogihyAHIAAKDYIXIAAAFocmkoayjrAJAab6CYIfcAzAd0ADuApwCnQGkAO2D3IWFyAKApKW0AAAFpbn4ozQBuAHUA8wDOAHQAAKA2J3IA7+A12DDdIxkAAmFjb3mRKJUonSisKHIAcAAAoG8mAAFoeZkonChjAHkASWRIZHIAdABtAqUoAAAAAKgoaQDkAFsPYQByAGEA7ABsJDuArQCtQAABZ22zKLsobQBhAAChwwNmdroouijCY4CjPCJkZWdsbnByAMgozCjPKNMo1yjaKN4obwB0AACgairxoEMiCw5FoJ4qAKCgKkWgnSoAoJ8qZQAAoEYi7CF1cwCgJCrhIXJyAKByKWEAcgDyAPwMAAJhZWl07Sj8KAEpCCkAAWxz8Sj4KGwAcwBlAHQAbQDpAH8oaABwAACgMyrwImFyc2wAoOQpAAFkbFoPBSllAACgIyNloKoqc6CsKgDgrCoA/oABZmxwABUpGCkfKfQhY3lMZGKgLwBhoMQpcgAAoD8jZgAA4DXYZN1hAAABZHIoKRcDZQBzAHWgYCZpAHQAAKBgJoABY3N1ADYpRilhKQABYXU6KUApcABzoJMiAOCTIgD+cABzoJQiAOCUIgD+dQAAAWJwSylWKQChjyJlcz4NUCllAHQAZaCPIvEAPw0AoZAiZXNIDVspZQB0AGWgkCLxAEkNAKGhJWFmZilbBHIAZQFrKVwEAKChJWEAcgDyAAMNAAJjZW10dyl7KX8pgilyAADgNdjI3HQAbQDuAM4AaQDsAAYpYQByAOYAVw0AAWFyiimOKXIA5qAGJhESAAFhbpIpoylpImdodAAAAWVwmSmgKXAAcwBpAGwAbwDuANkXaADpAKAkcwCvYIACYmNtbnAArin8KY4NJSooKgCkgiJFZGVtbnByc7wpvinCKcgpzCnUKdgp3CkAoMUqbwB0AACgvSpkoIYibwB0AACgwyr1IWx0AKDBKgABRWXQKdIpAKDLKgCgiiLsIXVzAKC/KuEhcnIAoHkpgAFlaXUA4inxKfQpdAAAoYIiZW7oKewpcQDxoIYivSllAHEA8aCKItEpbQAAoMcqAAFicPgp+ikAoNUqAKDTKmMAgKJ7ImFjZW5zAAcqDSoUKhYqRihwAHAAcgBvAPgAIyh1AHIAbAB5AGUA8QCDDfEAfA2AAWFlcwAcKiIqPShwAHAAcgBvAPgAPChxAPEAOShnAACgaiYApoMiMTIzRWRlaGxtbnBzPCo/KkIqRSpHKlIqWCpjKmcqaypzKncqO4C5ALlAO4CyALJAO4CzALNAAKDGKgABb3NLKk4qdAAAoL4qdQBiAACg2CpkoIcibwB0AACgxCpzAAABb3VdKmAqbAAAoMknYgAAoNcq4SFycgCgeyn1IWx0AKDCKgABRWVvKnEqAKDMKgCgiyLsIXVzAKDAKoABZWl1AH0qjCqPKnQAAKGDImVugyqHKnEA8aCHIkYqZQBxAPGgiyJwKm0AAKDIKgABYnCTKpUqAKDUKgCg1iqAAUFhbgCdKqEqrCpyAHIAAKDZIXIAAAFocqYqqCrrAJUab6CZIfcAxQf3IWFyAKAqKWwAaQBnADuA3wDfQOELzyrZKtwq6SrsKvEqAAD1KjQrAAAAAAAAAAAAAEwrbCsAAHErvSsAAAAAAADRK3IC1CoAAAAA2CrnIWV0AKAWI8RjcgDrAOUKgAFhZXkA4SrkKucq8iFvbmVh5CFpbGNhQmRvAPQAIg5sInJlYwAAoBUjcgAA4DXYMd0AAmVpa2/7KhIrKCsuK/IBACsAAAkrZQAAATRm6g0EK28AcgDlAOsNYQBzorgDECsAAAAAEit5AG0A0WMAAWNuFislK2sAAAFhcxsrIStwAHAAcgBvAPgAFw5pAG0AAKA8InMA8AD9DQABYXMsKyEr8AAXDnIAbgA7gP4A/kDsATgrOyswG2QA5QBnAmUAcwCAgdcAO2JkAEMrRCtJK9dAYaCgInIAAKAxKgCgMCqAAWVwcwBRK1MraSvhAAkh4qKkIlsrXysAAAAAYytvAHQAAKA2I2kAcgAAoPEqb+A12GXdcgBrAACg2irhAHgociJpbWUAAKA0IIABYWlwAHYreSu3K2QA5QC+DYADYWRlbXBzdACFK6MrmiunK6wrsCuzK24iZ2xlAACitSVkbHFykCuUK5ornCvvIXduAKC/JeUhZnRloMMl8QACBwCgXCJpImdodABloLkl8QBdDG8AdAAAoOwlaSJudXMAAKA6KuwhdXMAoDkqYgAAoM0p6SFtZQCgOyrlInppdW0AoOIjgAFjaHQAwivKK80rAAFyecYrySsA4DXYydxGZGMAeQBbZPIhb2tnYQABaW/UK9creAD0ANERaCJlYWQAAAFsct4r5ytlAGYAdABhAHIAcgBvAPcAXQbpJGdodGFycm93AKCgIQAJQUhhYmNkZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg");
1700
+
1701
+ // node_modules/entities/dist/generated/decode-data-xml.js
1702
+ var xmlDecodeTree = /* @__PURE__ */ decodeBase64("AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg");
1703
+
1704
+ // node_modules/entities/dist/internal/bin-trie-flags.js
1705
+ var BinTrieFlags;
1706
+ (function(BinTrieFlags2) {
1707
+ BinTrieFlags2[BinTrieFlags2["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
1708
+ BinTrieFlags2[BinTrieFlags2["FLAG13"] = 8192] = "FLAG13";
1709
+ BinTrieFlags2[BinTrieFlags2["BRANCH_LENGTH"] = 8064] = "BRANCH_LENGTH";
1710
+ BinTrieFlags2[BinTrieFlags2["JUMP_TABLE"] = 127] = "JUMP_TABLE";
1711
+ })(BinTrieFlags || (BinTrieFlags = {}));
1712
+
1713
+ // node_modules/entities/dist/decode.js
1714
+ var CharCodes;
1715
+ (function(CharCodes2) {
1716
+ CharCodes2[CharCodes2["NUM"] = 35] = "NUM";
1717
+ CharCodes2[CharCodes2["SEMI"] = 59] = "SEMI";
1718
+ CharCodes2[CharCodes2["EQUALS"] = 61] = "EQUALS";
1719
+ CharCodes2[CharCodes2["ZERO"] = 48] = "ZERO";
1720
+ CharCodes2[CharCodes2["NINE"] = 57] = "NINE";
1721
+ CharCodes2[CharCodes2["LOWER_A"] = 97] = "LOWER_A";
1722
+ CharCodes2[CharCodes2["LOWER_F"] = 102] = "LOWER_F";
1723
+ CharCodes2[CharCodes2["LOWER_X"] = 120] = "LOWER_X";
1724
+ CharCodes2[CharCodes2["LOWER_Z"] = 122] = "LOWER_Z";
1725
+ CharCodes2[CharCodes2["UPPER_A"] = 65] = "UPPER_A";
1726
+ CharCodes2[CharCodes2["UPPER_F"] = 70] = "UPPER_F";
1727
+ CharCodes2[CharCodes2["UPPER_Z"] = 90] = "UPPER_Z";
1728
+ })(CharCodes || (CharCodes = {}));
1729
+ var TO_LOWER_BIT = 32;
1730
+ function isNumber(code) {
1731
+ return code >= CharCodes.ZERO && code <= CharCodes.NINE;
1732
+ }
1733
+ function isHexadecimalCharacter(code) {
1734
+ return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F;
1735
+ }
1736
+ function isAsciiAlphaNumeric(code) {
1737
+ return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z || isNumber(code);
1738
+ }
1739
+ function isEntityInAttributeInvalidEnd(code) {
1740
+ return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
1741
+ }
1742
+ var EntityDecoderState;
1743
+ (function(EntityDecoderState2) {
1744
+ EntityDecoderState2[EntityDecoderState2["EntityStart"] = 0] = "EntityStart";
1745
+ EntityDecoderState2[EntityDecoderState2["NumericStart"] = 1] = "NumericStart";
1746
+ EntityDecoderState2[EntityDecoderState2["NumericDecimal"] = 2] = "NumericDecimal";
1747
+ EntityDecoderState2[EntityDecoderState2["NumericHex"] = 3] = "NumericHex";
1748
+ EntityDecoderState2[EntityDecoderState2["NamedEntity"] = 4] = "NamedEntity";
1749
+ })(EntityDecoderState || (EntityDecoderState = {}));
1750
+ var DecodingMode;
1751
+ (function(DecodingMode2) {
1752
+ DecodingMode2[DecodingMode2["Legacy"] = 0] = "Legacy";
1753
+ DecodingMode2[DecodingMode2["Strict"] = 1] = "Strict";
1754
+ DecodingMode2[DecodingMode2["Attribute"] = 2] = "Attribute";
1755
+ })(DecodingMode || (DecodingMode = {}));
1756
+
1757
+ class EntityDecoder {
1758
+ decodeTree;
1759
+ emitCodePoint;
1760
+ errors;
1761
+ constructor(decodeTree, emitCodePoint, errors) {
1762
+ this.decodeTree = decodeTree;
1763
+ this.emitCodePoint = emitCodePoint;
1764
+ this.errors = errors;
1765
+ }
1766
+ state = EntityDecoderState.EntityStart;
1767
+ consumed = 1;
1768
+ result = 0;
1769
+ treeIndex = 0;
1770
+ excess = 1;
1771
+ decodeMode = DecodingMode.Strict;
1772
+ runConsumed = 0;
1773
+ startEntity(decodeMode) {
1774
+ this.decodeMode = decodeMode;
1775
+ this.state = EntityDecoderState.EntityStart;
1776
+ this.result = 0;
1777
+ this.treeIndex = 0;
1778
+ this.excess = 1;
1779
+ this.consumed = 1;
1780
+ this.runConsumed = 0;
1781
+ }
1782
+ write(input, offset) {
1783
+ switch (this.state) {
1784
+ case EntityDecoderState.EntityStart: {
1785
+ if (input.charCodeAt(offset) === CharCodes.NUM) {
1786
+ this.state = EntityDecoderState.NumericStart;
1787
+ this.consumed += 1;
1788
+ return this.stateNumericStart(input, offset + 1);
1789
+ }
1790
+ this.state = EntityDecoderState.NamedEntity;
1791
+ return this.stateNamedEntity(input, offset);
1792
+ }
1793
+ case EntityDecoderState.NumericStart: {
1794
+ return this.stateNumericStart(input, offset);
1795
+ }
1796
+ case EntityDecoderState.NumericDecimal: {
1797
+ return this.stateNumericDecimal(input, offset);
1798
+ }
1799
+ case EntityDecoderState.NumericHex: {
1800
+ return this.stateNumericHex(input, offset);
1801
+ }
1802
+ case EntityDecoderState.NamedEntity: {
1803
+ return this.stateNamedEntity(input, offset);
1804
+ }
1805
+ }
1806
+ }
1807
+ stateNumericStart(input, offset) {
1808
+ if (offset >= input.length) {
1809
+ return -1;
1810
+ }
1811
+ if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
1812
+ this.state = EntityDecoderState.NumericHex;
1813
+ this.consumed += 1;
1814
+ return this.stateNumericHex(input, offset + 1);
1815
+ }
1816
+ this.state = EntityDecoderState.NumericDecimal;
1817
+ return this.stateNumericDecimal(input, offset);
1818
+ }
1819
+ stateNumericHex(input, offset) {
1820
+ while (offset < input.length) {
1821
+ const char = input.charCodeAt(offset);
1822
+ if (isNumber(char) || isHexadecimalCharacter(char)) {
1823
+ const digit = char <= CharCodes.NINE ? char - CharCodes.ZERO : (char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10;
1824
+ this.result = this.result * 16 + digit;
1825
+ this.consumed++;
1826
+ offset++;
1827
+ } else {
1828
+ return this.emitNumericEntity(char, 3);
1829
+ }
1830
+ }
1831
+ return -1;
1832
+ }
1833
+ stateNumericDecimal(input, offset) {
1834
+ while (offset < input.length) {
1835
+ const char = input.charCodeAt(offset);
1836
+ if (isNumber(char)) {
1837
+ this.result = this.result * 10 + (char - CharCodes.ZERO);
1838
+ this.consumed++;
1839
+ offset++;
1840
+ } else {
1841
+ return this.emitNumericEntity(char, 2);
1842
+ }
1843
+ }
1844
+ return -1;
1845
+ }
1846
+ emitNumericEntity(lastCp, expectedLength) {
1847
+ if (this.consumed <= expectedLength) {
1848
+ this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);
1849
+ return 0;
1850
+ }
1851
+ if (lastCp === CharCodes.SEMI) {
1852
+ this.consumed += 1;
1853
+ } else if (this.decodeMode === DecodingMode.Strict) {
1854
+ return 0;
1855
+ }
1856
+ this.emitCodePoint(replaceCodePoint(this.result), this.consumed);
1857
+ if (this.errors) {
1858
+ if (lastCp !== CharCodes.SEMI) {
1859
+ this.errors.missingSemicolonAfterCharacterReference();
1860
+ }
1861
+ this.errors.validateNumericCharacterReference(this.result);
1862
+ }
1863
+ return this.consumed;
1864
+ }
1865
+ stateNamedEntity(input, offset) {
1866
+ const { decodeTree } = this;
1867
+ let current = decodeTree[this.treeIndex];
1868
+ let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
1869
+ while (offset < input.length) {
1870
+ if (valueLength === 0 && (current & BinTrieFlags.FLAG13) !== 0) {
1871
+ const runLength = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
1872
+ if (this.runConsumed === 0) {
1873
+ const firstChar = current & BinTrieFlags.JUMP_TABLE;
1874
+ if (input.charCodeAt(offset) !== firstChar) {
1875
+ return this.result === 0 ? 0 : this.emitNotTerminatedNamedEntity();
1876
+ }
1877
+ offset++;
1878
+ this.excess++;
1879
+ this.runConsumed++;
1880
+ }
1881
+ while (this.runConsumed < runLength) {
1882
+ if (offset >= input.length) {
1883
+ return -1;
1884
+ }
1885
+ const charIndexInPacked = this.runConsumed - 1;
1886
+ const packedWord = decodeTree[this.treeIndex + 1 + (charIndexInPacked >> 1)];
1887
+ const expectedChar = charIndexInPacked % 2 === 0 ? packedWord & 255 : packedWord >> 8 & 255;
1888
+ if (input.charCodeAt(offset) !== expectedChar) {
1889
+ this.runConsumed = 0;
1890
+ return this.result === 0 ? 0 : this.emitNotTerminatedNamedEntity();
1891
+ }
1892
+ offset++;
1893
+ this.excess++;
1894
+ this.runConsumed++;
1895
+ }
1896
+ this.runConsumed = 0;
1897
+ this.treeIndex += 1 + (runLength >> 1);
1898
+ current = decodeTree[this.treeIndex];
1899
+ valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
1900
+ }
1901
+ if (offset >= input.length)
1902
+ break;
1903
+ const char = input.charCodeAt(offset);
1904
+ if (char === CharCodes.SEMI && valueLength !== 0 && (current & BinTrieFlags.FLAG13) !== 0) {
1905
+ return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
1906
+ }
1907
+ this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
1908
+ if (this.treeIndex < 0) {
1909
+ return this.result === 0 || this.decodeMode === DecodingMode.Attribute && (valueLength === 0 || isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity();
1910
+ }
1911
+ current = decodeTree[this.treeIndex];
1912
+ valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
1913
+ if (valueLength !== 0) {
1914
+ if (char === CharCodes.SEMI) {
1915
+ return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
1916
+ }
1917
+ if (this.decodeMode !== DecodingMode.Strict && (current & BinTrieFlags.FLAG13) === 0) {
1918
+ this.result = this.treeIndex;
1919
+ this.consumed += this.excess;
1920
+ this.excess = 0;
1921
+ }
1922
+ }
1923
+ offset++;
1924
+ this.excess++;
1925
+ }
1926
+ return -1;
1927
+ }
1928
+ emitNotTerminatedNamedEntity() {
1929
+ const { result, decodeTree } = this;
1930
+ const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
1931
+ this.emitNamedEntityData(result, valueLength, this.consumed);
1932
+ this.errors?.missingSemicolonAfterCharacterReference();
1933
+ return this.consumed;
1934
+ }
1935
+ emitNamedEntityData(result, valueLength, consumed) {
1936
+ const { decodeTree } = this;
1937
+ this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~(BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13) : decodeTree[result + 1], consumed);
1938
+ if (valueLength === 3) {
1939
+ this.emitCodePoint(decodeTree[result + 2], consumed);
1940
+ }
1941
+ return consumed;
1942
+ }
1943
+ end() {
1944
+ switch (this.state) {
1945
+ case EntityDecoderState.NamedEntity: {
1946
+ return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
1947
+ }
1948
+ case EntityDecoderState.NumericDecimal: {
1949
+ return this.emitNumericEntity(0, 2);
1950
+ }
1951
+ case EntityDecoderState.NumericHex: {
1952
+ return this.emitNumericEntity(0, 3);
1953
+ }
1954
+ case EntityDecoderState.NumericStart: {
1955
+ this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);
1956
+ return 0;
1957
+ }
1958
+ case EntityDecoderState.EntityStart: {
1959
+ return 0;
1960
+ }
1961
+ }
1962
+ }
1963
+ }
1964
+ function determineBranch(decodeTree, current, nodeIndex, char) {
1965
+ const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
1966
+ const jumpOffset = current & BinTrieFlags.JUMP_TABLE;
1967
+ if (branchCount === 0) {
1968
+ return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;
1969
+ }
1970
+ if (jumpOffset) {
1971
+ const value = char - jumpOffset;
1972
+ return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIndex + value] - 1;
1973
+ }
1974
+ const packedKeySlots = branchCount + 1 >> 1;
1975
+ let lo = 0;
1976
+ let hi = branchCount - 1;
1977
+ while (lo <= hi) {
1978
+ const mid = lo + hi >>> 1;
1979
+ const slot = mid >> 1;
1980
+ const packed = decodeTree[nodeIndex + slot];
1981
+ const midKey = packed >> (mid & 1) * 8 & 255;
1982
+ if (midKey < char) {
1983
+ lo = mid + 1;
1984
+ } else if (midKey > char) {
1985
+ hi = mid - 1;
1986
+ } else {
1987
+ return decodeTree[nodeIndex + packedKeySlots + mid];
1988
+ }
1989
+ }
1990
+ return -1;
1991
+ }
1992
+
1993
+ // node_modules/htmlparser2/dist/Tokenizer.js
1994
+ var CharCodes2;
1995
+ (function(CharCodes3) {
1996
+ CharCodes3[CharCodes3["Tab"] = 9] = "Tab";
1997
+ CharCodes3[CharCodes3["NewLine"] = 10] = "NewLine";
1998
+ CharCodes3[CharCodes3["FormFeed"] = 12] = "FormFeed";
1999
+ CharCodes3[CharCodes3["CarriageReturn"] = 13] = "CarriageReturn";
2000
+ CharCodes3[CharCodes3["Space"] = 32] = "Space";
2001
+ CharCodes3[CharCodes3["ExclamationMark"] = 33] = "ExclamationMark";
2002
+ CharCodes3[CharCodes3["Number"] = 35] = "Number";
2003
+ CharCodes3[CharCodes3["Amp"] = 38] = "Amp";
2004
+ CharCodes3[CharCodes3["SingleQuote"] = 39] = "SingleQuote";
2005
+ CharCodes3[CharCodes3["DoubleQuote"] = 34] = "DoubleQuote";
2006
+ CharCodes3[CharCodes3["Dash"] = 45] = "Dash";
2007
+ CharCodes3[CharCodes3["Slash"] = 47] = "Slash";
2008
+ CharCodes3[CharCodes3["Zero"] = 48] = "Zero";
2009
+ CharCodes3[CharCodes3["Nine"] = 57] = "Nine";
2010
+ CharCodes3[CharCodes3["Semi"] = 59] = "Semi";
2011
+ CharCodes3[CharCodes3["Lt"] = 60] = "Lt";
2012
+ CharCodes3[CharCodes3["Eq"] = 61] = "Eq";
2013
+ CharCodes3[CharCodes3["Gt"] = 62] = "Gt";
2014
+ CharCodes3[CharCodes3["Questionmark"] = 63] = "Questionmark";
2015
+ CharCodes3[CharCodes3["UpperA"] = 65] = "UpperA";
2016
+ CharCodes3[CharCodes3["LowerA"] = 97] = "LowerA";
2017
+ CharCodes3[CharCodes3["UpperF"] = 70] = "UpperF";
2018
+ CharCodes3[CharCodes3["LowerF"] = 102] = "LowerF";
2019
+ CharCodes3[CharCodes3["UpperZ"] = 90] = "UpperZ";
2020
+ CharCodes3[CharCodes3["LowerZ"] = 122] = "LowerZ";
2021
+ CharCodes3[CharCodes3["LowerX"] = 120] = "LowerX";
2022
+ CharCodes3[CharCodes3["OpeningSquareBracket"] = 91] = "OpeningSquareBracket";
2023
+ })(CharCodes2 || (CharCodes2 = {}));
2024
+ var State;
2025
+ (function(State2) {
2026
+ State2[State2["Text"] = 1] = "Text";
2027
+ State2[State2["BeforeTagName"] = 2] = "BeforeTagName";
2028
+ State2[State2["InTagName"] = 3] = "InTagName";
2029
+ State2[State2["InSelfClosingTag"] = 4] = "InSelfClosingTag";
2030
+ State2[State2["BeforeClosingTagName"] = 5] = "BeforeClosingTagName";
2031
+ State2[State2["InClosingTagName"] = 6] = "InClosingTagName";
2032
+ State2[State2["AfterClosingTagName"] = 7] = "AfterClosingTagName";
2033
+ State2[State2["BeforeAttributeName"] = 8] = "BeforeAttributeName";
2034
+ State2[State2["InAttributeName"] = 9] = "InAttributeName";
2035
+ State2[State2["AfterAttributeName"] = 10] = "AfterAttributeName";
2036
+ State2[State2["BeforeAttributeValue"] = 11] = "BeforeAttributeValue";
2037
+ State2[State2["InAttributeValueDq"] = 12] = "InAttributeValueDq";
2038
+ State2[State2["InAttributeValueSq"] = 13] = "InAttributeValueSq";
2039
+ State2[State2["InAttributeValueNq"] = 14] = "InAttributeValueNq";
2040
+ State2[State2["BeforeDeclaration"] = 15] = "BeforeDeclaration";
2041
+ State2[State2["InDeclaration"] = 16] = "InDeclaration";
2042
+ State2[State2["InProcessingInstruction"] = 17] = "InProcessingInstruction";
2043
+ State2[State2["BeforeComment"] = 18] = "BeforeComment";
2044
+ State2[State2["CDATASequence"] = 19] = "CDATASequence";
2045
+ State2[State2["DeclarationSequence"] = 20] = "DeclarationSequence";
2046
+ State2[State2["InSpecialComment"] = 21] = "InSpecialComment";
2047
+ State2[State2["InCommentLike"] = 22] = "InCommentLike";
2048
+ State2[State2["SpecialStartSequence"] = 23] = "SpecialStartSequence";
2049
+ State2[State2["InSpecialTag"] = 24] = "InSpecialTag";
2050
+ State2[State2["InPlainText"] = 25] = "InPlainText";
2051
+ State2[State2["InEntity"] = 26] = "InEntity";
2052
+ })(State || (State = {}));
2053
+ function isWhitespace(c) {
2054
+ return c === CharCodes2.Space || c === CharCodes2.NewLine || c === CharCodes2.Tab || c === CharCodes2.FormFeed || c === CharCodes2.CarriageReturn;
2055
+ }
2056
+ function isEndOfTagSection(c) {
2057
+ return c === CharCodes2.Slash || c === CharCodes2.Gt || isWhitespace(c);
2058
+ }
2059
+ function isASCIIAlpha(c) {
2060
+ return c >= CharCodes2.LowerA && c <= CharCodes2.LowerZ || c >= CharCodes2.UpperA && c <= CharCodes2.UpperZ;
2061
+ }
2062
+ var QuoteType;
2063
+ (function(QuoteType2) {
2064
+ QuoteType2[QuoteType2["NoValue"] = 0] = "NoValue";
2065
+ QuoteType2[QuoteType2["Unquoted"] = 1] = "Unquoted";
2066
+ QuoteType2[QuoteType2["Single"] = 2] = "Single";
2067
+ QuoteType2[QuoteType2["Double"] = 3] = "Double";
2068
+ })(QuoteType || (QuoteType = {}));
2069
+ var Sequences = {
2070
+ Empty: new Uint8Array(0),
2071
+ Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),
2072
+ CdataEnd: new Uint8Array([93, 93, 62]),
2073
+ CommentEnd: new Uint8Array([45, 45, 33, 62]),
2074
+ Doctype: new Uint8Array([100, 111, 99, 116, 121, 112, 101]),
2075
+ IframeEnd: new Uint8Array([60, 47, 105, 102, 114, 97, 109, 101]),
2076
+ NoembedEnd: new Uint8Array([
2077
+ 60,
2078
+ 47,
2079
+ 110,
2080
+ 111,
2081
+ 101,
2082
+ 109,
2083
+ 98,
2084
+ 101,
2085
+ 100
2086
+ ]),
2087
+ NoframesEnd: new Uint8Array([
2088
+ 60,
2089
+ 47,
2090
+ 110,
2091
+ 111,
2092
+ 102,
2093
+ 114,
2094
+ 97,
2095
+ 109,
2096
+ 101,
2097
+ 115
2098
+ ]),
2099
+ Plaintext: new Uint8Array([
2100
+ 60,
2101
+ 47,
2102
+ 112,
2103
+ 108,
2104
+ 97,
2105
+ 105,
2106
+ 110,
2107
+ 116,
2108
+ 101,
2109
+ 120,
2110
+ 116
2111
+ ]),
2112
+ ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),
2113
+ StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),
2114
+ TitleEnd: new Uint8Array([60, 47, 116, 105, 116, 108, 101]),
2115
+ TextareaEnd: new Uint8Array([
2116
+ 60,
2117
+ 47,
2118
+ 116,
2119
+ 101,
2120
+ 120,
2121
+ 116,
2122
+ 97,
2123
+ 114,
2124
+ 101,
2125
+ 97
2126
+ ]),
2127
+ XmpEnd: new Uint8Array([60, 47, 120, 109, 112])
2128
+ };
2129
+ var specialStartSequences = new Map([
2130
+ [Sequences.IframeEnd[2], Sequences.IframeEnd],
2131
+ [Sequences.NoembedEnd[2], Sequences.NoembedEnd],
2132
+ [Sequences.Plaintext[2], Sequences.Plaintext],
2133
+ [Sequences.ScriptEnd[2], Sequences.ScriptEnd],
2134
+ [Sequences.TitleEnd[2], Sequences.TitleEnd],
2135
+ [Sequences.XmpEnd[2], Sequences.XmpEnd]
2136
+ ]);
2137
+
2138
+ class Tokenizer {
2139
+ cbs;
2140
+ state = State.Text;
2141
+ buffer = "";
2142
+ sectionStart = 0;
2143
+ index = 0;
2144
+ entityStart = 0;
2145
+ baseState = State.Text;
2146
+ isSpecial = false;
2147
+ running = true;
2148
+ offset = 0;
2149
+ xmlMode;
2150
+ decodeEntities;
2151
+ recognizeSelfClosing;
2152
+ entityDecoder;
2153
+ constructor({ xmlMode = false, decodeEntities = true, recognizeSelfClosing = xmlMode }, cbs) {
2154
+ this.cbs = cbs;
2155
+ this.xmlMode = xmlMode;
2156
+ this.decodeEntities = decodeEntities;
2157
+ this.recognizeSelfClosing = recognizeSelfClosing;
2158
+ this.entityDecoder = new EntityDecoder(xmlMode ? xmlDecodeTree : htmlDecodeTree, (cp, consumed) => this.emitCodePoint(cp, consumed));
2159
+ }
2160
+ reset() {
2161
+ this.state = State.Text;
2162
+ this.buffer = "";
2163
+ this.sectionStart = 0;
2164
+ this.index = 0;
2165
+ this.baseState = State.Text;
2166
+ this.isSpecial = false;
2167
+ this.currentSequence = Sequences.Empty;
2168
+ this.sequenceIndex = 0;
2169
+ this.running = true;
2170
+ this.offset = 0;
2171
+ }
2172
+ write(chunk) {
2173
+ this.offset += this.buffer.length;
2174
+ this.buffer = chunk;
2175
+ this.parse();
2176
+ }
2177
+ end() {
2178
+ if (this.running)
2179
+ this.finish();
2180
+ }
2181
+ pause() {
2182
+ this.running = false;
2183
+ }
2184
+ resume() {
2185
+ this.running = true;
2186
+ if (this.index < this.buffer.length + this.offset) {
2187
+ this.parse();
2188
+ }
2189
+ }
2190
+ stateText(c) {
2191
+ if (c === CharCodes2.Lt || !this.decodeEntities && this.fastForwardTo(CharCodes2.Lt)) {
2192
+ if (this.index > this.sectionStart) {
2193
+ this.cbs.ontext(this.sectionStart, this.index);
2194
+ }
2195
+ this.state = State.BeforeTagName;
2196
+ this.sectionStart = this.index;
2197
+ } else if (this.decodeEntities && c === CharCodes2.Amp) {
2198
+ this.startEntity();
2199
+ }
2200
+ }
2201
+ currentSequence = Sequences.Empty;
2202
+ sequenceIndex = 0;
2203
+ enterTagBody() {
2204
+ if (this.currentSequence === Sequences.Plaintext) {
2205
+ this.currentSequence = Sequences.Empty;
2206
+ this.state = State.InPlainText;
2207
+ } else if (this.isSpecial) {
2208
+ this.state = State.InSpecialTag;
2209
+ this.sequenceIndex = 0;
2210
+ } else {
2211
+ this.state = State.Text;
2212
+ }
2213
+ }
2214
+ stateSpecialStartSequence(c) {
2215
+ const lower = c | 32;
2216
+ if (this.sequenceIndex < this.currentSequence.length) {
2217
+ if (lower === this.currentSequence[this.sequenceIndex]) {
2218
+ this.sequenceIndex++;
2219
+ return;
2220
+ }
2221
+ if (this.sequenceIndex === 3) {
2222
+ if (this.currentSequence === Sequences.ScriptEnd && lower === Sequences.StyleEnd[3]) {
2223
+ this.currentSequence = Sequences.StyleEnd;
2224
+ this.sequenceIndex = 4;
2225
+ return;
2226
+ }
2227
+ if (this.currentSequence === Sequences.TitleEnd && lower === Sequences.TextareaEnd[3]) {
2228
+ this.currentSequence = Sequences.TextareaEnd;
2229
+ this.sequenceIndex = 4;
2230
+ return;
2231
+ }
2232
+ } else if (this.sequenceIndex === 4 && this.currentSequence === Sequences.NoembedEnd && lower === Sequences.NoframesEnd[4]) {
2233
+ this.currentSequence = Sequences.NoframesEnd;
2234
+ this.sequenceIndex = 5;
2235
+ return;
2236
+ }
2237
+ } else if (isEndOfTagSection(c)) {
2238
+ this.sequenceIndex = 0;
2239
+ this.state = State.InTagName;
2240
+ this.stateInTagName(c);
2241
+ return;
2242
+ }
2243
+ this.isSpecial = false;
2244
+ this.currentSequence = Sequences.Empty;
2245
+ this.sequenceIndex = 0;
2246
+ this.state = State.InTagName;
2247
+ this.stateInTagName(c);
2248
+ }
2249
+ stateCDATASequence(c) {
2250
+ if (c === Sequences.Cdata[this.sequenceIndex]) {
2251
+ if (++this.sequenceIndex === Sequences.Cdata.length) {
2252
+ this.state = State.InCommentLike;
2253
+ this.currentSequence = Sequences.CdataEnd;
2254
+ this.sequenceIndex = 0;
2255
+ this.sectionStart = this.index + 1;
2256
+ }
2257
+ } else {
2258
+ this.sequenceIndex = 0;
2259
+ if (this.xmlMode) {
2260
+ this.state = State.InDeclaration;
2261
+ this.stateInDeclaration(c);
2262
+ } else {
2263
+ this.state = State.InSpecialComment;
2264
+ this.stateInSpecialComment(c);
2265
+ }
2266
+ }
2267
+ }
2268
+ fastForwardTo(c) {
2269
+ while (++this.index < this.buffer.length + this.offset) {
2270
+ if (this.buffer.charCodeAt(this.index - this.offset) === c) {
2271
+ return true;
2272
+ }
2273
+ }
2274
+ this.index = this.buffer.length + this.offset - 1;
2275
+ return false;
2276
+ }
2277
+ emitComment(offset) {
2278
+ this.cbs.oncomment(this.sectionStart, this.index, offset);
2279
+ this.sequenceIndex = 0;
2280
+ this.sectionStart = this.index + 1;
2281
+ this.state = State.Text;
2282
+ }
2283
+ stateInCommentLike(c) {
2284
+ if (!this.xmlMode && this.currentSequence === Sequences.CommentEnd && this.sequenceIndex <= 1 && this.index === this.sectionStart + this.sequenceIndex && c === CharCodes2.Gt) {
2285
+ this.emitComment(this.sequenceIndex);
2286
+ } else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === 2 && c === CharCodes2.Gt) {
2287
+ this.emitComment(2);
2288
+ } else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === this.currentSequence.length - 1 && c !== CharCodes2.Gt) {
2289
+ this.sequenceIndex = Number(c === CharCodes2.Dash);
2290
+ } else if (c === this.currentSequence[this.sequenceIndex]) {
2291
+ if (++this.sequenceIndex === this.currentSequence.length) {
2292
+ if (this.currentSequence === Sequences.CdataEnd) {
2293
+ this.cbs.oncdata(this.sectionStart, this.index, 2);
2294
+ } else {
2295
+ this.cbs.oncomment(this.sectionStart, this.index, 3);
2296
+ }
2297
+ this.sequenceIndex = 0;
2298
+ this.sectionStart = this.index + 1;
2299
+ this.state = State.Text;
2300
+ }
2301
+ } else if (this.sequenceIndex === 0) {
2302
+ if (this.fastForwardTo(this.currentSequence[0])) {
2303
+ this.sequenceIndex = 1;
2304
+ }
2305
+ } else if (c !== this.currentSequence[this.sequenceIndex - 1]) {
2306
+ this.sequenceIndex = 0;
2307
+ }
2308
+ }
2309
+ isTagStartChar(c) {
2310
+ return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);
2311
+ }
2312
+ stateInSpecialTag(c) {
2313
+ if (this.sequenceIndex === this.currentSequence.length) {
2314
+ if (isEndOfTagSection(c)) {
2315
+ const endOfText = this.index - this.currentSequence.length;
2316
+ if (this.sectionStart < endOfText) {
2317
+ const actualIndex = this.index;
2318
+ this.index = endOfText;
2319
+ this.cbs.ontext(this.sectionStart, endOfText);
2320
+ this.index = actualIndex;
2321
+ }
2322
+ this.isSpecial = false;
2323
+ this.sectionStart = endOfText + 2;
2324
+ this.stateInClosingTagName(c);
2325
+ return;
2326
+ }
2327
+ this.sequenceIndex = 0;
2328
+ }
2329
+ if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
2330
+ this.sequenceIndex += 1;
2331
+ } else if (this.sequenceIndex === 0) {
2332
+ if (this.currentSequence === Sequences.TitleEnd || this.currentSequence === Sequences.TextareaEnd) {
2333
+ if (this.decodeEntities && c === CharCodes2.Amp) {
2334
+ this.startEntity();
2335
+ }
2336
+ } else if (this.fastForwardTo(CharCodes2.Lt)) {
2337
+ this.sequenceIndex = 1;
2338
+ }
2339
+ } else {
2340
+ this.sequenceIndex = Number(c === CharCodes2.Lt);
2341
+ }
2342
+ }
2343
+ stateBeforeTagName(c) {
2344
+ if (c === CharCodes2.ExclamationMark) {
2345
+ this.state = State.BeforeDeclaration;
2346
+ this.sectionStart = this.index + 1;
2347
+ } else if (c === CharCodes2.Questionmark) {
2348
+ if (this.xmlMode) {
2349
+ this.state = State.InProcessingInstruction;
2350
+ this.sequenceIndex = 0;
2351
+ this.sectionStart = this.index + 1;
2352
+ } else {
2353
+ this.state = State.InSpecialComment;
2354
+ this.sectionStart = this.index;
2355
+ }
2356
+ } else if (this.isTagStartChar(c)) {
2357
+ this.sectionStart = this.index;
2358
+ const special = this.xmlMode || this.cbs.isInForeignContext?.() ? undefined : specialStartSequences.get(c | 32);
2359
+ if (special === undefined) {
2360
+ this.state = State.InTagName;
2361
+ } else {
2362
+ this.isSpecial = true;
2363
+ this.currentSequence = special;
2364
+ this.sequenceIndex = 3;
2365
+ this.state = State.SpecialStartSequence;
2366
+ }
2367
+ } else if (c === CharCodes2.Slash) {
2368
+ this.state = State.BeforeClosingTagName;
2369
+ } else {
2370
+ this.state = State.Text;
2371
+ this.stateText(c);
2372
+ }
2373
+ }
2374
+ stateInTagName(c) {
2375
+ if (isEndOfTagSection(c)) {
2376
+ this.cbs.onopentagname(this.sectionStart, this.index);
2377
+ this.sectionStart = -1;
2378
+ this.state = State.BeforeAttributeName;
2379
+ this.stateBeforeAttributeName(c);
2380
+ }
2381
+ }
2382
+ stateBeforeClosingTagName(c) {
2383
+ if (isWhitespace(c)) {
2384
+ if (this.xmlMode) {} else {
2385
+ this.state = State.InSpecialComment;
2386
+ this.sectionStart = this.index;
2387
+ }
2388
+ } else if (c === CharCodes2.Gt) {
2389
+ this.state = State.Text;
2390
+ if (!this.xmlMode) {
2391
+ this.sectionStart = this.index + 1;
2392
+ }
2393
+ } else {
2394
+ this.state = this.isTagStartChar(c) ? State.InClosingTagName : State.InSpecialComment;
2395
+ this.sectionStart = this.index;
2396
+ }
2397
+ }
2398
+ stateInClosingTagName(c) {
2399
+ if (isEndOfTagSection(c)) {
2400
+ this.cbs.onclosetag(this.sectionStart, this.index);
2401
+ this.sectionStart = -1;
2402
+ this.state = State.AfterClosingTagName;
2403
+ this.stateAfterClosingTagName(c);
2404
+ }
2405
+ }
2406
+ stateAfterClosingTagName(c) {
2407
+ if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2408
+ this.state = State.Text;
2409
+ this.sectionStart = this.index + 1;
2410
+ }
2411
+ }
2412
+ stateBeforeAttributeName(c) {
2413
+ if (c === CharCodes2.Gt) {
2414
+ this.cbs.onopentagend(this.index);
2415
+ this.enterTagBody();
2416
+ this.sectionStart = this.index + 1;
2417
+ } else if (c === CharCodes2.Slash) {
2418
+ this.state = State.InSelfClosingTag;
2419
+ } else if (!isWhitespace(c)) {
2420
+ this.state = State.InAttributeName;
2421
+ this.sectionStart = this.index;
2422
+ }
2423
+ }
2424
+ stateInSelfClosingTag(c) {
2425
+ if (c === CharCodes2.Gt) {
2426
+ this.cbs.onselfclosingtag(this.index);
2427
+ this.sectionStart = this.index + 1;
2428
+ if (!this.recognizeSelfClosing) {
2429
+ this.enterTagBody();
2430
+ return;
2431
+ }
2432
+ this.state = State.Text;
2433
+ this.isSpecial = false;
2434
+ this.currentSequence = Sequences.Empty;
2435
+ } else if (!isWhitespace(c)) {
2436
+ this.state = State.BeforeAttributeName;
2437
+ this.stateBeforeAttributeName(c);
2438
+ }
2439
+ }
2440
+ stateInAttributeName(c) {
2441
+ if (c === CharCodes2.Eq || isEndOfTagSection(c)) {
2442
+ this.cbs.onattribname(this.sectionStart, this.index);
2443
+ this.sectionStart = this.index;
2444
+ this.state = State.AfterAttributeName;
2445
+ this.stateAfterAttributeName(c);
2446
+ }
2447
+ }
2448
+ stateAfterAttributeName(c) {
2449
+ if (c === CharCodes2.Eq) {
2450
+ this.state = State.BeforeAttributeValue;
2451
+ } else if (c === CharCodes2.Slash || c === CharCodes2.Gt) {
2452
+ this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
2453
+ this.sectionStart = -1;
2454
+ this.state = State.BeforeAttributeName;
2455
+ this.stateBeforeAttributeName(c);
2456
+ } else if (!isWhitespace(c)) {
2457
+ this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
2458
+ this.state = State.InAttributeName;
2459
+ this.sectionStart = this.index;
2460
+ }
2461
+ }
2462
+ stateBeforeAttributeValue(c) {
2463
+ if (c === CharCodes2.DoubleQuote) {
2464
+ this.state = State.InAttributeValueDq;
2465
+ this.sectionStart = this.index + 1;
2466
+ } else if (c === CharCodes2.SingleQuote) {
2467
+ this.state = State.InAttributeValueSq;
2468
+ this.sectionStart = this.index + 1;
2469
+ } else if (!isWhitespace(c)) {
2470
+ this.sectionStart = this.index;
2471
+ this.state = State.InAttributeValueNq;
2472
+ this.stateInAttributeValueNoQuotes(c);
2473
+ }
2474
+ }
2475
+ handleInAttributeValue(c, quote) {
2476
+ if (c === quote || !this.decodeEntities && this.fastForwardTo(quote)) {
2477
+ this.cbs.onattribdata(this.sectionStart, this.index);
2478
+ this.sectionStart = -1;
2479
+ this.cbs.onattribend(quote === CharCodes2.DoubleQuote ? QuoteType.Double : QuoteType.Single, this.index + 1);
2480
+ this.state = State.BeforeAttributeName;
2481
+ } else if (this.decodeEntities && c === CharCodes2.Amp) {
2482
+ this.startEntity();
2483
+ }
2484
+ }
2485
+ stateInAttributeValueDoubleQuotes(c) {
2486
+ this.handleInAttributeValue(c, CharCodes2.DoubleQuote);
2487
+ }
2488
+ stateInAttributeValueSingleQuotes(c) {
2489
+ this.handleInAttributeValue(c, CharCodes2.SingleQuote);
2490
+ }
2491
+ stateInAttributeValueNoQuotes(c) {
2492
+ if (isWhitespace(c) || c === CharCodes2.Gt) {
2493
+ this.cbs.onattribdata(this.sectionStart, this.index);
2494
+ this.sectionStart = -1;
2495
+ this.cbs.onattribend(QuoteType.Unquoted, this.index);
2496
+ this.state = State.BeforeAttributeName;
2497
+ this.stateBeforeAttributeName(c);
2498
+ } else if (this.decodeEntities && c === CharCodes2.Amp) {
2499
+ this.startEntity();
2500
+ }
2501
+ }
2502
+ stateBeforeDeclaration(c) {
2503
+ if (c === CharCodes2.OpeningSquareBracket) {
2504
+ this.state = State.CDATASequence;
2505
+ this.sequenceIndex = 0;
2506
+ } else if (this.xmlMode) {
2507
+ this.state = c === CharCodes2.Dash ? State.BeforeComment : State.InDeclaration;
2508
+ } else if ((c | 32) === Sequences.Doctype[0]) {
2509
+ this.state = State.DeclarationSequence;
2510
+ this.currentSequence = Sequences.Doctype;
2511
+ this.sequenceIndex = 1;
2512
+ } else if (c === CharCodes2.Gt) {
2513
+ this.cbs.oncomment(this.sectionStart, this.index, 0);
2514
+ this.state = State.Text;
2515
+ this.sectionStart = this.index + 1;
2516
+ } else if (c === CharCodes2.Dash) {
2517
+ this.state = State.BeforeComment;
2518
+ } else {
2519
+ this.state = State.InSpecialComment;
2520
+ }
2521
+ }
2522
+ stateDeclarationSequence(c) {
2523
+ if (this.sequenceIndex === this.currentSequence.length) {
2524
+ this.state = State.InDeclaration;
2525
+ this.stateInDeclaration(c);
2526
+ } else if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
2527
+ this.sequenceIndex += 1;
2528
+ } else if (c === CharCodes2.Gt) {
2529
+ this.cbs.oncomment(this.sectionStart, this.index, 0);
2530
+ this.state = State.Text;
2531
+ this.sectionStart = this.index + 1;
2532
+ } else {
2533
+ this.state = State.InSpecialComment;
2534
+ }
2535
+ }
2536
+ stateInDeclaration(c) {
2537
+ if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2538
+ this.cbs.ondeclaration(this.sectionStart, this.index);
2539
+ this.state = State.Text;
2540
+ this.sectionStart = this.index + 1;
2541
+ }
2542
+ }
2543
+ stateInProcessingInstruction(c) {
2544
+ if (c === CharCodes2.Questionmark) {
2545
+ this.sequenceIndex = 1;
2546
+ } else if (c === CharCodes2.Gt && this.sequenceIndex === 1) {
2547
+ this.cbs.onprocessinginstruction(this.sectionStart, this.index - 1);
2548
+ this.sequenceIndex = 0;
2549
+ this.state = State.Text;
2550
+ this.sectionStart = this.index + 1;
2551
+ } else {
2552
+ this.sequenceIndex = Number(this.fastForwardTo(CharCodes2.Questionmark));
2553
+ }
2554
+ }
2555
+ stateBeforeComment(c) {
2556
+ if (c === CharCodes2.Dash) {
2557
+ this.state = State.InCommentLike;
2558
+ this.currentSequence = Sequences.CommentEnd;
2559
+ this.sequenceIndex = 0;
2560
+ this.sectionStart = this.index + 1;
2561
+ } else if (this.xmlMode) {
2562
+ this.state = State.InDeclaration;
2563
+ } else if (c === CharCodes2.Gt) {
2564
+ this.cbs.oncomment(this.sectionStart, this.index, 0);
2565
+ this.state = State.Text;
2566
+ this.sectionStart = this.index + 1;
2567
+ } else {
2568
+ this.state = State.InSpecialComment;
2569
+ }
2570
+ }
2571
+ stateInSpecialComment(c) {
2572
+ if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2573
+ this.cbs.oncomment(this.sectionStart, this.index, 0);
2574
+ this.state = State.Text;
2575
+ this.sectionStart = this.index + 1;
2576
+ }
2577
+ }
2578
+ startEntity() {
2579
+ this.baseState = this.state;
2580
+ this.state = State.InEntity;
2581
+ this.entityStart = this.index;
2582
+ this.entityDecoder.startEntity(this.xmlMode ? DecodingMode.Strict : this.baseState === State.Text || this.baseState === State.InSpecialTag ? DecodingMode.Legacy : DecodingMode.Attribute);
2583
+ }
2584
+ stateInEntity() {
2585
+ const indexInBuffer = this.index - this.offset;
2586
+ const length = this.entityDecoder.write(this.buffer, indexInBuffer);
2587
+ if (length >= 0) {
2588
+ this.state = this.baseState;
2589
+ if (length === 0) {
2590
+ this.index -= 1;
2591
+ }
2592
+ } else {
2593
+ if (indexInBuffer < this.buffer.length && this.buffer.charCodeAt(indexInBuffer) === CharCodes2.Amp) {
2594
+ this.state = this.baseState;
2595
+ this.index -= 1;
2596
+ return;
2597
+ }
2598
+ this.index = this.offset + this.buffer.length - 1;
2599
+ }
2600
+ }
2601
+ cleanup() {
2602
+ if (this.running && this.sectionStart !== this.index) {
2603
+ if (this.state === State.Text || this.state === State.InPlainText || this.state === State.InSpecialTag && this.sequenceIndex === 0) {
2604
+ this.cbs.ontext(this.sectionStart, this.index);
2605
+ this.sectionStart = this.index;
2606
+ } else if (this.state === State.InAttributeValueDq || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueNq) {
2607
+ this.cbs.onattribdata(this.sectionStart, this.index);
2608
+ this.sectionStart = this.index;
2609
+ }
2610
+ }
2611
+ }
2612
+ shouldContinue() {
2613
+ return this.index < this.buffer.length + this.offset && this.running;
2614
+ }
2615
+ parse() {
2616
+ while (this.shouldContinue()) {
2617
+ const c = this.buffer.charCodeAt(this.index - this.offset);
2618
+ switch (this.state) {
2619
+ case State.Text: {
2620
+ this.stateText(c);
2621
+ break;
2622
+ }
2623
+ case State.InPlainText: {
2624
+ this.index = this.buffer.length + this.offset - 1;
2625
+ break;
2626
+ }
2627
+ case State.SpecialStartSequence: {
2628
+ this.stateSpecialStartSequence(c);
2629
+ break;
2630
+ }
2631
+ case State.InSpecialTag: {
2632
+ this.stateInSpecialTag(c);
2633
+ break;
2634
+ }
2635
+ case State.CDATASequence: {
2636
+ this.stateCDATASequence(c);
2637
+ break;
2638
+ }
2639
+ case State.DeclarationSequence: {
2640
+ this.stateDeclarationSequence(c);
2641
+ break;
2642
+ }
2643
+ case State.InAttributeValueDq: {
2644
+ this.stateInAttributeValueDoubleQuotes(c);
2645
+ break;
2646
+ }
2647
+ case State.InAttributeName: {
2648
+ this.stateInAttributeName(c);
2649
+ break;
2650
+ }
2651
+ case State.InCommentLike: {
2652
+ this.stateInCommentLike(c);
2653
+ break;
2654
+ }
2655
+ case State.InSpecialComment: {
2656
+ this.stateInSpecialComment(c);
2657
+ break;
2658
+ }
2659
+ case State.BeforeAttributeName: {
2660
+ this.stateBeforeAttributeName(c);
2661
+ break;
2662
+ }
2663
+ case State.InTagName: {
2664
+ this.stateInTagName(c);
2665
+ break;
2666
+ }
2667
+ case State.InClosingTagName: {
2668
+ this.stateInClosingTagName(c);
2669
+ break;
2670
+ }
2671
+ case State.BeforeTagName: {
2672
+ this.stateBeforeTagName(c);
2673
+ break;
2674
+ }
2675
+ case State.AfterAttributeName: {
2676
+ this.stateAfterAttributeName(c);
2677
+ break;
2678
+ }
2679
+ case State.InAttributeValueSq: {
2680
+ this.stateInAttributeValueSingleQuotes(c);
2681
+ break;
2682
+ }
2683
+ case State.BeforeAttributeValue: {
2684
+ this.stateBeforeAttributeValue(c);
2685
+ break;
2686
+ }
2687
+ case State.BeforeClosingTagName: {
2688
+ this.stateBeforeClosingTagName(c);
2689
+ break;
2690
+ }
2691
+ case State.AfterClosingTagName: {
2692
+ this.stateAfterClosingTagName(c);
2693
+ break;
2694
+ }
2695
+ case State.InAttributeValueNq: {
2696
+ this.stateInAttributeValueNoQuotes(c);
2697
+ break;
2698
+ }
2699
+ case State.InSelfClosingTag: {
2700
+ this.stateInSelfClosingTag(c);
2701
+ break;
2702
+ }
2703
+ case State.InDeclaration: {
2704
+ this.stateInDeclaration(c);
2705
+ break;
2706
+ }
2707
+ case State.BeforeDeclaration: {
2708
+ this.stateBeforeDeclaration(c);
2709
+ break;
2710
+ }
2711
+ case State.BeforeComment: {
2712
+ this.stateBeforeComment(c);
2713
+ break;
2714
+ }
2715
+ case State.InProcessingInstruction: {
2716
+ this.stateInProcessingInstruction(c);
2717
+ break;
2718
+ }
2719
+ case State.InEntity: {
2720
+ this.stateInEntity();
2721
+ break;
2722
+ }
2723
+ }
2724
+ this.index++;
2725
+ }
2726
+ this.cleanup();
2727
+ }
2728
+ finish() {
2729
+ if (this.state === State.InEntity) {
2730
+ this.entityDecoder.end();
2731
+ this.state = this.baseState;
2732
+ }
2733
+ this.handleTrailingData();
2734
+ this.cbs.onend();
2735
+ }
2736
+ handleTrailingCommentLikeData(endIndex) {
2737
+ if (this.state !== State.InCommentLike) {
2738
+ return false;
2739
+ }
2740
+ if (this.currentSequence === Sequences.CdataEnd) {
2741
+ if (this.xmlMode) {
2742
+ if (this.sectionStart < endIndex) {
2743
+ this.cbs.oncdata(this.sectionStart, endIndex, 0);
2744
+ }
2745
+ } else {
2746
+ const cdataStart = this.sectionStart - Sequences.Cdata.length - 1;
2747
+ this.cbs.oncomment(cdataStart, endIndex, 0);
2748
+ }
2749
+ } else {
2750
+ const offset = this.xmlMode ? 0 : Math.min(this.sequenceIndex, Sequences.CommentEnd.length - 1);
2751
+ this.cbs.oncomment(this.sectionStart, endIndex, offset);
2752
+ }
2753
+ return true;
2754
+ }
2755
+ handleTrailingMarkupDeclaration(endIndex) {
2756
+ if (this.xmlMode) {
2757
+ switch (this.state) {
2758
+ case State.InSpecialComment:
2759
+ case State.BeforeComment:
2760
+ case State.CDATASequence:
2761
+ case State.DeclarationSequence:
2762
+ case State.InDeclaration: {
2763
+ this.cbs.ontext(this.sectionStart, endIndex);
2764
+ return true;
2765
+ }
2766
+ default: {
2767
+ return false;
2768
+ }
2769
+ }
2770
+ }
2771
+ switch (this.state) {
2772
+ case State.BeforeDeclaration:
2773
+ case State.InSpecialComment:
2774
+ case State.BeforeComment:
2775
+ case State.CDATASequence: {
2776
+ this.cbs.oncomment(this.sectionStart, endIndex, 0);
2777
+ return true;
2778
+ }
2779
+ case State.DeclarationSequence: {
2780
+ if (this.sequenceIndex !== Sequences.Doctype.length) {
2781
+ this.cbs.oncomment(this.sectionStart, endIndex, 0);
2782
+ }
2783
+ return true;
2784
+ }
2785
+ case State.InDeclaration: {
2786
+ return true;
2787
+ }
2788
+ default: {
2789
+ return false;
2790
+ }
2791
+ }
2792
+ }
2793
+ handleTrailingData() {
2794
+ const endIndex = this.buffer.length + this.offset;
2795
+ if (this.handleTrailingCommentLikeData(endIndex) || this.handleTrailingMarkupDeclaration(endIndex)) {
2796
+ return;
2797
+ }
2798
+ if (this.sectionStart >= endIndex) {
2799
+ return;
2800
+ }
2801
+ switch (this.state) {
2802
+ case State.InTagName:
2803
+ case State.BeforeAttributeName:
2804
+ case State.BeforeAttributeValue:
2805
+ case State.AfterAttributeName:
2806
+ case State.InAttributeName:
2807
+ case State.InAttributeValueSq:
2808
+ case State.InAttributeValueDq:
2809
+ case State.InAttributeValueNq:
2810
+ case State.InClosingTagName: {
2811
+ break;
2812
+ }
2813
+ default: {
2814
+ this.cbs.ontext(this.sectionStart, endIndex);
2815
+ }
2816
+ }
2817
+ }
2818
+ emitCodePoint(cp, consumed) {
2819
+ if (this.baseState !== State.Text && this.baseState !== State.InSpecialTag) {
2820
+ if (this.sectionStart < this.entityStart) {
2821
+ this.cbs.onattribdata(this.sectionStart, this.entityStart);
2822
+ }
2823
+ this.sectionStart = this.entityStart + consumed;
2824
+ this.index = this.sectionStart - 1;
2825
+ this.cbs.onattribentity(cp);
2826
+ } else {
2827
+ if (this.sectionStart < this.entityStart) {
2828
+ this.cbs.ontext(this.sectionStart, this.entityStart);
2829
+ }
2830
+ this.sectionStart = this.entityStart + consumed;
2831
+ this.index = this.sectionStart - 1;
2832
+ this.cbs.ontextentity(cp, this.sectionStart);
2833
+ }
2834
+ }
2835
+ }
2836
+ // tools/core/htmllinter-tables.js
2837
+ var VOID_ELEMENTS = new Set([
2838
+ "area",
2839
+ "base",
2840
+ "br",
2841
+ "col",
2842
+ "embed",
2843
+ "hr",
2844
+ "img",
2845
+ "input",
2846
+ "link",
2847
+ "meta",
2848
+ "source",
2849
+ "track",
2850
+ "wbr"
2851
+ ]);
2852
+ var RAW_TEXT_ELEMENTS = new Set([
2853
+ "script",
2854
+ "style",
2855
+ "iframe",
2856
+ "noembed",
2857
+ "noframes",
2858
+ "noscript",
2859
+ "xmp",
2860
+ "plaintext"
2861
+ ]);
2862
+ var RCDATA_ELEMENTS = new Set(["textarea", "title"]);
2863
+ var SPECIAL_ELEMENTS = new Set([
2864
+ "address",
2865
+ "applet",
2866
+ "area",
2867
+ "article",
2868
+ "aside",
2869
+ "base",
2870
+ "basefont",
2871
+ "bgsound",
2872
+ "blockquote",
2873
+ "br",
2874
+ "button",
2875
+ "caption",
2876
+ "center",
2877
+ "col",
2878
+ "colgroup",
2879
+ "dd",
2880
+ "details",
2881
+ "dir",
2882
+ "div",
2883
+ "dl",
2884
+ "dt",
2885
+ "embed",
2886
+ "fieldset",
2887
+ "figcaption",
2888
+ "figure",
2889
+ "footer",
2890
+ "form",
2891
+ "h1",
2892
+ "h2",
2893
+ "h3",
2894
+ "h4",
2895
+ "h5",
2896
+ "h6",
2897
+ "header",
2898
+ "hgroup",
2899
+ "hr",
2900
+ "iframe",
2901
+ "img",
2902
+ "input",
2903
+ "keygen",
2904
+ "li",
2905
+ "link",
2906
+ "listing",
2907
+ "main",
2908
+ "marquee",
2909
+ "menu",
2910
+ "meta",
2911
+ "nav",
2912
+ "noembed",
2913
+ "noframes",
2914
+ "noscript",
2915
+ "object",
2916
+ "ol",
2917
+ "p",
2918
+ "param",
2919
+ "plaintext",
2920
+ "pre",
2921
+ "script",
2922
+ "search",
2923
+ "section",
2924
+ "select",
2925
+ "source",
2926
+ "style",
2927
+ "summary",
2928
+ "table",
2929
+ "tbody",
2930
+ "td",
2931
+ "template",
2932
+ "textarea",
2933
+ "tfoot",
2934
+ "th",
2935
+ "thead",
2936
+ "title",
2937
+ "tr",
2938
+ "track",
2939
+ "ul",
2940
+ "wbr",
2941
+ "xmp"
2942
+ ]);
2943
+ var FORMATTING_ELEMENTS = new Set([
2944
+ "a",
2945
+ "b",
2946
+ "big",
2947
+ "code",
2948
+ "em",
2949
+ "font",
2950
+ "i",
2951
+ "nobr",
2952
+ "s",
2953
+ "small",
2954
+ "strike",
2955
+ "strong",
2956
+ "tt",
2957
+ "u"
2958
+ ]);
2959
+ var DEFAULT_SCOPE_BOUNDARIES = new Set([
2960
+ "applet",
2961
+ "caption",
2962
+ "html",
2963
+ "table",
2964
+ "td",
2965
+ "th",
2966
+ "marquee",
2967
+ "object",
2968
+ "template"
2969
+ ]);
2970
+ var SCOPE_LIST_ITEM = new Set([...DEFAULT_SCOPE_BOUNDARIES, "ol", "ul"]);
2971
+ var SCOPE_BUTTON = new Set([...DEFAULT_SCOPE_BOUNDARIES, "button"]);
2972
+ var SCOPE_DEFAULT = DEFAULT_SCOPE_BOUNDARIES;
2973
+ var SCOPE_TABLE = new Set(["html", "table", "template"]);
2974
+ var SCOPE_SELECT = new Set;
2975
+ var STANDARD_SVG_CAMEL_ELEMENTS = new Set([
2976
+ "altGlyph",
2977
+ "altGlyphDef",
2978
+ "altGlyphItem",
2979
+ "animateColor",
2980
+ "animateMotion",
2981
+ "animateTransform",
2982
+ "clipPath",
2983
+ "feBlend",
2984
+ "feColorMatrix",
2985
+ "feComponentTransfer",
2986
+ "feComposite",
2987
+ "feConvolveMatrix",
2988
+ "feDiffuseLighting",
2989
+ "feDisplacementMap",
2990
+ "feDistantLight",
2991
+ "feDropShadow",
2992
+ "feFlood",
2993
+ "feFuncA",
2994
+ "feFuncB",
2995
+ "feFuncG",
2996
+ "feFuncR",
2997
+ "feGaussianBlur",
2998
+ "feImage",
2999
+ "feMerge",
3000
+ "feMergeNode",
3001
+ "feMorphology",
3002
+ "feOffset",
3003
+ "fePointLight",
3004
+ "feSpecularLighting",
3005
+ "feSpotLight",
3006
+ "feTile",
3007
+ "feTurbulence",
3008
+ "foreignObject",
3009
+ "glyphRef",
3010
+ "linearGradient",
3011
+ "radialGradient",
3012
+ "textPath"
3013
+ ]);
3014
+ var STANDARD_SVG_CAMEL_ATTRS = new Set([
3015
+ "attributeName",
3016
+ "attributeType",
3017
+ "baseFrequency",
3018
+ "baseProfile",
3019
+ "calcMode",
3020
+ "clipPathUnits",
3021
+ "diffuseConstant",
3022
+ "edgeMode",
3023
+ "filterUnits",
3024
+ "glyphRef",
3025
+ "gradientTransform",
3026
+ "gradientUnits",
3027
+ "kernelMatrix",
3028
+ "kernelUnitLength",
3029
+ "keyPoints",
3030
+ "keySplines",
3031
+ "keyTimes",
3032
+ "lengthAdjust",
3033
+ "limitingConeAngle",
3034
+ "markerHeight",
3035
+ "markerUnits",
3036
+ "markerWidth",
3037
+ "maskContentUnits",
3038
+ "maskUnits",
3039
+ "numOctaves",
3040
+ "pathLength",
3041
+ "patternContentUnits",
3042
+ "patternTransform",
3043
+ "patternUnits",
3044
+ "pointsAtX",
3045
+ "pointsAtY",
3046
+ "pointsAtZ",
3047
+ "preserveAlpha",
3048
+ "preserveAspectRatio",
3049
+ "primitiveUnits",
3050
+ "refX",
3051
+ "refY",
3052
+ "repeatCount",
3053
+ "repeatDur",
3054
+ "requiredExtensions",
3055
+ "requiredFeatures",
3056
+ "specularConstant",
3057
+ "specularExponent",
3058
+ "spreadMethod",
3059
+ "startOffset",
3060
+ "stdDeviation",
3061
+ "stitchTiles",
3062
+ "surfaceScale",
3063
+ "systemLanguage",
3064
+ "tableValues",
3065
+ "targetX",
3066
+ "targetY",
3067
+ "textLength",
3068
+ "viewBox",
3069
+ "xChannelSelector",
3070
+ "yChannelSelector",
3071
+ "zoomAndPan"
3072
+ ]);
3073
+ var MATHML_CAMEL_ATTRS = new Set(["definitionURL"]);
3074
+ var FOREIGN_BREAKOUT_TAGS = new Set([
3075
+ "b",
3076
+ "big",
3077
+ "blockquote",
3078
+ "body",
3079
+ "br",
3080
+ "center",
3081
+ "code",
3082
+ "dd",
3083
+ "div",
3084
+ "dl",
3085
+ "dt",
3086
+ "em",
3087
+ "embed",
3088
+ "h1",
3089
+ "h2",
3090
+ "h3",
3091
+ "h4",
3092
+ "h5",
3093
+ "h6",
3094
+ "head",
3095
+ "hr",
3096
+ "i",
3097
+ "img",
3098
+ "li",
3099
+ "listing",
3100
+ "menu",
3101
+ "meta",
3102
+ "nobr",
3103
+ "ol",
3104
+ "p",
3105
+ "pre",
3106
+ "ruby",
3107
+ "s",
3108
+ "small",
3109
+ "span",
3110
+ "strong",
3111
+ "strike",
3112
+ "sub",
3113
+ "sup",
3114
+ "table",
3115
+ "tt",
3116
+ "u",
3117
+ "ul",
3118
+ "var"
3119
+ ]);
3120
+ var MATHML_TEXT_INTEGRATION_POINTS = new Set(["mi", "mo", "mn", "ms", "mtext"]);
3121
+ var BLOCK_LEVEL_AUTO_CLOSE_P = new Set([
3122
+ "address",
3123
+ "article",
3124
+ "aside",
3125
+ "blockquote",
3126
+ "center",
3127
+ "details",
3128
+ "dialog",
3129
+ "dir",
3130
+ "div",
3131
+ "dl",
3132
+ "fieldset",
3133
+ "figcaption",
3134
+ "figure",
3135
+ "footer",
3136
+ "form",
3137
+ "h1",
3138
+ "h2",
3139
+ "h3",
3140
+ "h4",
3141
+ "h5",
3142
+ "h6",
3143
+ "header",
3144
+ "hgroup",
3145
+ "hr",
3146
+ "main",
3147
+ "menu",
3148
+ "nav",
3149
+ "ol",
3150
+ "p",
3151
+ "plaintext",
3152
+ "pre",
3153
+ "search",
3154
+ "section",
3155
+ "summary",
3156
+ "table",
3157
+ "ul",
3158
+ "xmp",
3159
+ "li",
3160
+ "dd",
3161
+ "dt"
3162
+ ]);
3163
+ var SELECT_VALID_CHILDREN = new Set(["option", "optgroup", "hr", "script", "template"]);
3164
+ var SELECT_BREAKOUT_TAGS = new Set(["input", "keygen", "textarea", "select"]);
3165
+ var MODES = Object.freeze({
3166
+ inBody: "inBody",
3167
+ inTable: "inTable",
3168
+ inTableText: "inTableText",
3169
+ inCaption: "inCaption",
3170
+ inColumnGroup: "inColumnGroup",
3171
+ inTableBody: "inTableBody",
3172
+ inRow: "inRow",
3173
+ inCell: "inCell",
3174
+ inSelect: "inSelect",
3175
+ inSelectInTable: "inSelectInTable",
3176
+ inTemplate: "inTemplate",
3177
+ text: "text"
3178
+ });
3179
+ var NS = Object.freeze({
3180
+ html: "html",
3181
+ svg: "svg",
3182
+ math: "math"
3183
+ });
3184
+ var FRAGMENT_CONTEXT_MODES = Object.freeze({
3185
+ template: { mode: MODES.inTemplate, ns: NS.html },
3186
+ body: { mode: MODES.inBody, ns: NS.html },
3187
+ div: { mode: MODES.inBody, ns: NS.html },
3188
+ table: { mode: MODES.inTable, ns: NS.html },
3189
+ tbody: { mode: MODES.inTableBody, ns: NS.html },
3190
+ thead: { mode: MODES.inTableBody, ns: NS.html },
3191
+ tfoot: { mode: MODES.inTableBody, ns: NS.html },
3192
+ caption: { mode: MODES.inCaption, ns: NS.html },
3193
+ colgroup: { mode: MODES.inColumnGroup, ns: NS.html },
3194
+ tr: { mode: MODES.inRow, ns: NS.html },
3195
+ td: { mode: MODES.inCell, ns: NS.html },
3196
+ th: { mode: MODES.inCell, ns: NS.html },
3197
+ select: { mode: MODES.inSelect, ns: NS.html },
3198
+ svg: { mode: MODES.inBody, ns: NS.svg },
3199
+ math: { mode: MODES.inBody, ns: NS.math }
3200
+ });
3201
+
3202
+ // tools/core/htmllinter.js
3203
+ var HTML_TAG_NAME_HAS_UPPERCASE = "HTML_TAG_NAME_HAS_UPPERCASE";
3204
+ var HTML_SVG_TAG_WILL_LOWERCASE = "HTML_SVG_TAG_WILL_LOWERCASE";
3205
+ var HTML_TAG_NOT_ALLOWED_IN_PARENT = "HTML_TAG_NOT_ALLOWED_IN_PARENT";
3206
+ var HTML_TEXT_NOT_ALLOWED_IN_PARENT = "HTML_TEXT_NOT_ALLOWED_IN_PARENT";
3207
+ var HTML_VOID_ELEMENT_HAS_CLOSE_TAG = "HTML_VOID_ELEMENT_HAS_CLOSE_TAG";
3208
+ var HTML_DUPLICATE_FORM = "HTML_DUPLICATE_FORM";
3209
+ var HTML_NESTED_INTERACTIVE = "HTML_NESTED_INTERACTIVE";
3210
+ var HTML_MISNESTED_FORMATTING = "HTML_MISNESTED_FORMATTING";
3211
+ var HTML_UNEXPECTED_END_TAG = "HTML_UNEXPECTED_END_TAG";
3212
+ var LEVEL_ERROR = "error";
3213
+ var LEVEL_WARN = "warn";
3214
+ var TABLE_SCOPE_TAGS = new Set([
3215
+ "caption",
3216
+ "colgroup",
3217
+ "thead",
3218
+ "tbody",
3219
+ "tfoot",
3220
+ "tr",
3221
+ "td",
3222
+ "th",
3223
+ "table"
3224
+ ]);
3225
+ var TABLE_BODY_CELL_TAGS = new Set(["td", "th"]);
3226
+ function lintHtml(html, onFinding, opts = {}) {
3227
+ const ctx = new LinterCtx(html, onFinding, opts);
3228
+ const tokenizer = new Tokenizer({ xmlMode: false, decodeEntities: false, recognizeSelfClosing: true }, ctx);
3229
+ ctx.tokenizer = tokenizer;
3230
+ tokenizer.write(html);
3231
+ tokenizer.end();
3232
+ return ctx.findingCount;
3233
+ }
3234
+
3235
+ class LinterCtx {
3236
+ constructor(html, onFinding, opts) {
3237
+ this.html = html;
3238
+ this.onFinding = onFinding;
3239
+ this.findingCount = 0;
3240
+ this.lineStarts = computeLineStarts(html);
3241
+ const ctxName = opts.fragmentContext ?? "template";
3242
+ const ctxInfo = FRAGMENT_CONTEXT_MODES[ctxName] ?? FRAGMENT_CONTEXT_MODES.template;
3243
+ this.openElements = [];
3244
+ if (ctxName === "tr") {
3245
+ this.openElements.push({ name: "table", ns: NS.html, start: -1 });
3246
+ this.openElements.push({ name: "tbody", ns: NS.html, start: -1 });
3247
+ } else if (ctxName === "tbody" || ctxName === "thead" || ctxName === "tfoot") {
3248
+ this.openElements.push({ name: "table", ns: NS.html, start: -1 });
3249
+ } else if (ctxName === "td" || ctxName === "th") {
3250
+ this.openElements.push({ name: "table", ns: NS.html, start: -1 });
3251
+ this.openElements.push({ name: "tbody", ns: NS.html, start: -1 });
3252
+ this.openElements.push({ name: "tr", ns: NS.html, start: -1 });
3253
+ } else if (ctxName === "caption") {
3254
+ this.openElements.push({ name: "table", ns: NS.html, start: -1 });
3255
+ } else if (ctxName === "colgroup") {
3256
+ this.openElements.push({ name: "table", ns: NS.html, start: -1 });
3257
+ } else if (ctxName === "svg") {
3258
+ this.openElements.push({ name: "svg", ns: NS.svg, start: -1 });
3259
+ } else if (ctxName === "math") {
3260
+ this.openElements.push({ name: "math", ns: NS.math, start: -1 });
3261
+ } else if (ctxName === "select") {
3262
+ this.openElements.push({ name: "select", ns: NS.html, start: -1 });
3263
+ }
3264
+ this.insertionMode = ctxInfo.mode;
3265
+ this.originalInsertionMode = MODES.inBody;
3266
+ this.templateInsertionModes = ctxName === "template" ? [MODES.inTemplate] : [];
3267
+ this.activeFormatting = [];
3268
+ this.formPointer = null;
3269
+ this.framesetOk = true;
3270
+ this.svgCamelElements = opts.svgCamelElements ?? STANDARD_SVG_CAMEL_ELEMENTS;
3271
+ this.transparentTagPrefixes = opts.transparentTagPrefixes ?? [];
3272
+ this.currentTagName = "";
3273
+ this.currentTagRawName = "";
3274
+ this.currentTagStart = 0;
3275
+ this.tokenizer = null;
3276
+ this.textRestoreMode = null;
3277
+ }
3278
+ onopentagname(start, end) {
3279
+ const raw = this.html.slice(start, end);
3280
+ this.currentTagRawName = raw;
3281
+ this.currentTagName = raw.toLowerCase();
3282
+ this.currentTagStart = start;
3283
+ }
3284
+ onattribname(_start, _end) {}
3285
+ onattribdata(_start, _end) {}
3286
+ onattribentity(_cp) {}
3287
+ onattribend(_quote, _end) {}
3288
+ ontextentity(_cp, _end) {}
3289
+ onopentagend(endIndex) {
3290
+ this.handleStartTag(false, endIndex);
3291
+ }
3292
+ onselfclosingtag(endIndex) {
3293
+ this.handleStartTag(true, endIndex);
3294
+ }
3295
+ onclosetag(start, end) {
3296
+ const raw = this.html.slice(start, end);
3297
+ const name = raw.toLowerCase();
3298
+ this.handleEndTag(name, start);
3299
+ }
3300
+ ontext(start, end) {
3301
+ if (start >= end)
3302
+ return;
3303
+ this.handleText(start, end);
3304
+ }
3305
+ oncomment(_start, _end, _endOffset) {}
3306
+ oncdata(start, _end, _endOffset) {
3307
+ if (this.currentNamespace() === NS.html) {
3308
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_WARN, start, {
3309
+ tag: "[CDATA[",
3310
+ mode: this.insertionMode,
3311
+ action: "ignored"
3312
+ });
3313
+ }
3314
+ }
3315
+ ondeclaration(_start, _end) {}
3316
+ onprocessinginstruction(_start, _end) {}
3317
+ isInForeignContext() {
3318
+ return this.currentNamespace() !== NS.html;
3319
+ }
3320
+ onend() {}
3321
+ report(id, level, offset, info) {
3322
+ this.findingCount++;
3323
+ const { line, column } = offsetToLineCol(this.lineStarts, offset);
3324
+ this.onFinding({
3325
+ id,
3326
+ level,
3327
+ info,
3328
+ location: { start: offset, end: offset + (info.tag?.length ?? 0), line, column }
3329
+ });
3330
+ }
3331
+ currentNode() {
3332
+ return this.openElements[this.openElements.length - 1] ?? null;
3333
+ }
3334
+ currentNamespace() {
3335
+ const top = this.currentNode();
3336
+ return top ? top.ns : NS.html;
3337
+ }
3338
+ push(name, ns, start) {
3339
+ this.openElements.push({ name, ns, start });
3340
+ }
3341
+ pop() {
3342
+ return this.openElements.pop();
3343
+ }
3344
+ hasInScope(target, scopeSet) {
3345
+ for (let i = this.openElements.length - 1;i >= 0; i--) {
3346
+ const f = this.openElements[i];
3347
+ if (f.name === target && f.ns === NS.html)
3348
+ return true;
3349
+ if (f.ns === NS.html && scopeSet.has(f.name))
3350
+ return false;
3351
+ if (f.ns !== NS.html) {
3352
+ return false;
3353
+ }
3354
+ }
3355
+ return false;
3356
+ }
3357
+ hasInDefaultScope(target) {
3358
+ return this.hasInScope(target, SCOPE_DEFAULT);
3359
+ }
3360
+ hasInButtonScope(target) {
3361
+ return this.hasInScope(target, SCOPE_BUTTON);
3362
+ }
3363
+ hasInListItemScope(target) {
3364
+ return this.hasInScope(target, SCOPE_LIST_ITEM);
3365
+ }
3366
+ hasInTableScope(target) {
3367
+ return this.hasInScope(target, SCOPE_TABLE);
3368
+ }
3369
+ hasInSelectScope(target) {
3370
+ for (let i = this.openElements.length - 1;i >= 0; i--) {
3371
+ const f = this.openElements[i];
3372
+ if (f.ns !== NS.html)
3373
+ return false;
3374
+ if (f.name === target)
3375
+ return true;
3376
+ if (f.name !== "optgroup" && f.name !== "option")
3377
+ return false;
3378
+ }
3379
+ return false;
3380
+ }
3381
+ popUntilName(name) {
3382
+ while (this.openElements.length) {
3383
+ const f = this.openElements.pop();
3384
+ if (f.name === name)
3385
+ return f;
3386
+ }
3387
+ return null;
3388
+ }
3389
+ generateImpliedEndTags(except = null) {
3390
+ const implied = new Set(["dd", "dt", "li", "optgroup", "option", "p", "rb", "rp", "rt", "rtc"]);
3391
+ while (this.openElements.length) {
3392
+ const top = this.currentNode();
3393
+ if (top.ns !== NS.html)
3394
+ break;
3395
+ if (!implied.has(top.name) || top.name === except)
3396
+ break;
3397
+ this.openElements.pop();
3398
+ }
3399
+ }
3400
+ isTransparentTag(name) {
3401
+ for (const prefix of this.transparentTagPrefixes) {
3402
+ if (name === prefix || name.startsWith(`${prefix}:`))
3403
+ return true;
3404
+ }
3405
+ return false;
3406
+ }
3407
+ handleStartTag(selfClosing, endIndex) {
3408
+ const name = this.currentTagName;
3409
+ const raw = this.currentTagRawName;
3410
+ const start = this.currentTagStart;
3411
+ const ns = this.currentNamespace();
3412
+ if (ns === NS.html) {
3413
+ if (raw !== name) {
3414
+ this.report(HTML_TAG_NAME_HAS_UPPERCASE, LEVEL_ERROR, start, {
3415
+ raw,
3416
+ lowercased: name
3417
+ });
3418
+ }
3419
+ } else if (ns === NS.svg) {
3420
+ if (raw !== raw.toLowerCase() && !this.svgCamelElements.has(raw)) {
3421
+ this.report(HTML_SVG_TAG_WILL_LOWERCASE, LEVEL_ERROR, start, {
3422
+ raw,
3423
+ lowercased: name
3424
+ });
3425
+ }
3426
+ }
3427
+ if (this.isTransparentTag(name))
3428
+ return;
3429
+ if (ns !== NS.html && !this.shouldBreakoutFromForeign(name)) {
3430
+ this.startTagInForeign(name, raw, selfClosing, start);
3431
+ return;
3432
+ }
3433
+ if (ns !== NS.html && this.shouldBreakoutFromForeign(name)) {
3434
+ while (this.openElements.length && this.currentNode()?.ns !== NS.html) {
3435
+ this.openElements.pop();
3436
+ }
3437
+ }
3438
+ this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
3439
+ }
3440
+ shouldBreakoutFromForeign(name) {
3441
+ if (FOREIGN_BREAKOUT_TAGS.has(name))
3442
+ return true;
3443
+ if (name === "font")
3444
+ return true;
3445
+ return false;
3446
+ }
3447
+ startTagInForeign(name, raw, selfClosing, start) {
3448
+ const ns = name === "svg" ? NS.svg : name === "math" ? NS.math : this.currentNamespace();
3449
+ const top = this.currentNode();
3450
+ if (top && top.ns === NS.math && MATHML_TEXT_INTEGRATION_POINTS.has(top.name) && name !== "mglyph" && name !== "malignmark") {
3451
+ this.dispatchStartTag(name, raw, selfClosing, start, start + raw.length);
3452
+ return;
3453
+ }
3454
+ if (selfClosing)
3455
+ return;
3456
+ this.push(raw, ns, start);
3457
+ }
3458
+ dispatchStartTag(name, raw, selfClosing, start, endIndex) {
3459
+ switch (this.insertionMode) {
3460
+ case MODES.inTemplate:
3461
+ return this.startInTemplate(name, raw, selfClosing, start, endIndex);
3462
+ case MODES.inBody:
3463
+ return this.startInBody(name, raw, selfClosing, start, endIndex);
3464
+ case MODES.inTable:
3465
+ return this.startInTable(name, raw, selfClosing, start, endIndex);
3466
+ case MODES.inTableText:
3467
+ this.flushTableText();
3468
+ this.insertionMode = this.originalInsertionMode;
3469
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
3470
+ case MODES.inCaption:
3471
+ return this.startInCaption(name, raw, selfClosing, start, endIndex);
3472
+ case MODES.inColumnGroup:
3473
+ return this.startInColumnGroup(name, raw, selfClosing, start, endIndex);
3474
+ case MODES.inTableBody:
3475
+ return this.startInTableBody(name, raw, selfClosing, start, endIndex);
3476
+ case MODES.inRow:
3477
+ return this.startInRow(name, raw, selfClosing, start, endIndex);
3478
+ case MODES.inCell:
3479
+ return this.startInCell(name, raw, selfClosing, start, endIndex);
3480
+ case MODES.inSelect:
3481
+ return this.startInSelect(name, raw, selfClosing, start, endIndex);
3482
+ case MODES.inSelectInTable:
3483
+ return this.startInSelectInTable(name, raw, selfClosing, start, endIndex);
3484
+ case MODES.text:
3485
+ return;
3486
+ }
3487
+ }
3488
+ startInBody(name, raw, selfClosing, start, _endIndex) {
3489
+ if (name === "html" || name === "head" || name === "body" || name === "frame" || name === "frameset") {
3490
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_WARN, start, {
3491
+ tag: raw,
3492
+ mode: this.insertionMode,
3493
+ action: "ignored"
3494
+ });
3495
+ return;
3496
+ }
3497
+ 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") {
3498
+ if (this.hasInButtonScope("p"))
3499
+ this.implicitlyClose("p", start, raw);
3500
+ this.push(raw, NS.html, start);
3501
+ return;
3502
+ }
3503
+ if (name === "h1" || name === "h2" || name === "h3" || name === "h4" || name === "h5" || name === "h6") {
3504
+ if (this.hasInButtonScope("p"))
3505
+ this.implicitlyClose("p", start, raw);
3506
+ const top = this.currentNode();
3507
+ if (top && /^h[1-6]$/.test(top.name)) {
3508
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
3509
+ tag: raw,
3510
+ parent: top.name,
3511
+ mode: this.insertionMode,
3512
+ action: "auto-close-implicit"
3513
+ });
3514
+ this.openElements.pop();
3515
+ }
3516
+ this.push(raw, NS.html, start);
3517
+ return;
3518
+ }
3519
+ if (name === "pre" || name === "listing") {
3520
+ if (this.hasInButtonScope("p"))
3521
+ this.implicitlyClose("p", start, raw);
3522
+ this.push(raw, NS.html, start);
3523
+ this.framesetOk = false;
3524
+ return;
3525
+ }
3526
+ if (name === "form") {
3527
+ if (this.formPointer !== null && !this.openElementsHas("template")) {
3528
+ this.report(HTML_DUPLICATE_FORM, LEVEL_ERROR, start, {
3529
+ tag: raw,
3530
+ mode: this.insertionMode
3531
+ });
3532
+ return;
3533
+ }
3534
+ if (this.hasInButtonScope("p"))
3535
+ this.implicitlyClose("p", start, raw);
3536
+ this.push(raw, NS.html, start);
3537
+ this.formPointer = this.currentNode();
3538
+ return;
3539
+ }
3540
+ if (name === "li") {
3541
+ this.framesetOk = false;
3542
+ for (let i = this.openElements.length - 1;i >= 0; i--) {
3543
+ const f = this.openElements[i];
3544
+ if (f.ns !== NS.html)
3545
+ break;
3546
+ if (f.name === "li") {
3547
+ this.generateImpliedEndTags("li");
3548
+ while (this.openElements.length) {
3549
+ const popped = this.openElements.pop();
3550
+ if (popped.name === "li")
3551
+ break;
3552
+ }
3553
+ break;
3554
+ }
3555
+ if (SPECIAL_ELEMENTS.has(f.name) && f.name !== "address" && f.name !== "div" && f.name !== "p") {
3556
+ break;
3557
+ }
3558
+ }
3559
+ if (this.hasInButtonScope("p"))
3560
+ this.implicitlyClose("p", start, raw);
3561
+ this.push(raw, NS.html, start);
3562
+ return;
3563
+ }
3564
+ if (name === "dd" || name === "dt") {
3565
+ this.framesetOk = false;
3566
+ for (let i = this.openElements.length - 1;i >= 0; i--) {
3567
+ const f = this.openElements[i];
3568
+ if (f.ns !== NS.html)
3569
+ break;
3570
+ if (f.name === "dd" || f.name === "dt") {
3571
+ this.generateImpliedEndTags(f.name);
3572
+ while (this.openElements.length) {
3573
+ const popped = this.openElements.pop();
3574
+ if (popped.name === f.name)
3575
+ break;
3576
+ }
3577
+ break;
3578
+ }
3579
+ if (SPECIAL_ELEMENTS.has(f.name) && f.name !== "address" && f.name !== "div" && f.name !== "p") {
3580
+ break;
3581
+ }
3582
+ }
3583
+ if (this.hasInButtonScope("p"))
3584
+ this.implicitlyClose("p", start, raw);
3585
+ this.push(raw, NS.html, start);
3586
+ return;
3587
+ }
3588
+ if (name === "plaintext") {
3589
+ if (this.hasInButtonScope("p"))
3590
+ this.implicitlyClose("p", start, raw);
3591
+ this.push(raw, NS.html, start);
3592
+ return;
3593
+ }
3594
+ if (name === "button") {
3595
+ if (this.hasInDefaultScope("button")) {
3596
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
3597
+ tag: raw,
3598
+ parent: "button",
3599
+ mode: this.insertionMode,
3600
+ action: "auto-close-implicit"
3601
+ });
3602
+ this.generateImpliedEndTags();
3603
+ this.popUntilName("button");
3604
+ }
3605
+ this.push(raw, NS.html, start);
3606
+ this.framesetOk = false;
3607
+ return;
3608
+ }
3609
+ if (name === "a") {
3610
+ if (this.openElementsHas("a") || this.activeFormattingHas("a")) {
3611
+ this.report(HTML_NESTED_INTERACTIVE, LEVEL_WARN, start, {
3612
+ tag: raw,
3613
+ mode: this.insertionMode
3614
+ });
3615
+ this.runAdoptionAgency("a");
3616
+ }
3617
+ this.push(raw, NS.html, start);
3618
+ this.activeFormatting.push(this.currentNode());
3619
+ return;
3620
+ }
3621
+ if (FORMATTING_ELEMENTS.has(name)) {
3622
+ this.push(raw, NS.html, start);
3623
+ this.activeFormatting.push(this.currentNode());
3624
+ return;
3625
+ }
3626
+ if (name === "nobr") {
3627
+ if (this.hasInDefaultScope("nobr")) {
3628
+ this.report(HTML_NESTED_INTERACTIVE, LEVEL_WARN, start, {
3629
+ tag: raw,
3630
+ mode: this.insertionMode
3631
+ });
3632
+ this.runAdoptionAgency("nobr");
3633
+ }
3634
+ this.push(raw, NS.html, start);
3635
+ this.activeFormatting.push(this.currentNode());
3636
+ return;
3637
+ }
3638
+ if (name === "table") {
3639
+ if (this.hasInButtonScope("p"))
3640
+ this.implicitlyClose("p", start, raw);
3641
+ this.push(raw, NS.html, start);
3642
+ this.framesetOk = false;
3643
+ this.insertionMode = MODES.inTable;
3644
+ return;
3645
+ }
3646
+ 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") {
3647
+ this.framesetOk = false;
3648
+ return;
3649
+ }
3650
+ if (name === "select") {
3651
+ if (this.hasInButtonScope("p"))
3652
+ this.implicitlyClose("p", start, raw);
3653
+ this.push(raw, NS.html, start);
3654
+ this.framesetOk = false;
3655
+ this.insertionMode = MODES.inSelect;
3656
+ return;
3657
+ }
3658
+ if (name === "option" || name === "optgroup") {
3659
+ if (this.currentNode()?.name === "option") {
3660
+ this.openElements.pop();
3661
+ }
3662
+ this.push(raw, NS.html, start);
3663
+ return;
3664
+ }
3665
+ if (name === "textarea" || name === "title" || RAW_TEXT_ELEMENTS.has(name)) {
3666
+ this.push(raw, NS.html, start);
3667
+ return;
3668
+ }
3669
+ if (name === "math" || name === "svg") {
3670
+ this.push(raw, name === "svg" ? NS.svg : NS.math, start);
3671
+ this.framesetOk = false;
3672
+ return;
3673
+ }
3674
+ if (name === "caption" || name === "col" || name === "colgroup" || name === "frame" || name === "tbody" || name === "td" || name === "tfoot" || name === "th" || name === "thead" || name === "tr") {
3675
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
3676
+ tag: raw,
3677
+ parent: this.currentNode()?.name ?? "(root)",
3678
+ mode: this.insertionMode,
3679
+ action: "ignored"
3680
+ });
3681
+ return;
3682
+ }
3683
+ if (selfClosing)
3684
+ return;
3685
+ this.push(raw, NS.html, start);
3686
+ }
3687
+ openElementsHas(name) {
3688
+ for (let i = this.openElements.length - 1;i >= 0; i--) {
3689
+ const f = this.openElements[i];
3690
+ if (f.ns === NS.html && f.name === name)
3691
+ return true;
3692
+ }
3693
+ return false;
3694
+ }
3695
+ activeFormattingHas(name) {
3696
+ for (let i = this.activeFormatting.length - 1;i >= 0; i--) {
3697
+ const e = this.activeFormatting[i];
3698
+ if (e === null)
3699
+ return false;
3700
+ if (e.name === name)
3701
+ return true;
3702
+ }
3703
+ return false;
3704
+ }
3705
+ runAdoptionAgency(name) {
3706
+ for (let i = this.activeFormatting.length - 1;i >= 0; i--) {
3707
+ const e = this.activeFormatting[i];
3708
+ if (e === null)
3709
+ break;
3710
+ if (e.name === name) {
3711
+ this.activeFormatting.splice(i, 1);
3712
+ const idx = this.openElements.indexOf(e);
3713
+ if (idx >= 0)
3714
+ this.openElements.splice(idx, 1);
3715
+ return;
3716
+ }
3717
+ }
3718
+ }
3719
+ implicitlyClose(name, _start, _newTagRaw) {
3720
+ while (this.openElements.length) {
3721
+ const popped = this.openElements.pop();
3722
+ if (popped.name === name)
3723
+ break;
3724
+ }
3725
+ }
3726
+ startInTemplate(name, raw, selfClosing, start, endIndex) {
3727
+ let next;
3728
+ if (name === "caption" || name === "colgroup" || name === "tbody" || name === "tfoot" || name === "thead") {
3729
+ next = MODES.inTable;
3730
+ } else if (name === "col") {
3731
+ next = MODES.inColumnGroup;
3732
+ } else if (name === "tr") {
3733
+ next = MODES.inTableBody;
3734
+ } else if (name === "td" || name === "th") {
3735
+ next = MODES.inRow;
3736
+ } else {
3737
+ this.popTemplateMode();
3738
+ this.pushTemplateMode(MODES.inBody);
3739
+ this.insertionMode = MODES.inBody;
3740
+ return this.startInBody(name, raw, selfClosing, start, endIndex);
3741
+ }
3742
+ this.popTemplateMode();
3743
+ this.pushTemplateMode(next);
3744
+ this.insertionMode = next;
3745
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
3746
+ }
3747
+ popTemplateMode() {
3748
+ if (this.templateInsertionModes.length)
3749
+ this.templateInsertionModes.pop();
3750
+ }
3751
+ pushTemplateMode(mode) {
3752
+ this.templateInsertionModes.push(mode);
3753
+ }
3754
+ startInTable(name, raw, selfClosing, start, endIndex) {
3755
+ if (name === "caption") {
3756
+ this.clearStackBackToTable();
3757
+ this.activeFormatting.push(null);
3758
+ this.push(raw, NS.html, start);
3759
+ this.insertionMode = MODES.inCaption;
3760
+ return;
3761
+ }
3762
+ if (name === "colgroup") {
3763
+ this.clearStackBackToTable();
3764
+ this.push(raw, NS.html, start);
3765
+ this.insertionMode = MODES.inColumnGroup;
3766
+ return;
3767
+ }
3768
+ if (name === "col") {
3769
+ this.clearStackBackToTable();
3770
+ this.push("colgroup", NS.html, start);
3771
+ this.insertionMode = MODES.inColumnGroup;
3772
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
3773
+ }
3774
+ if (name === "tbody" || name === "thead" || name === "tfoot") {
3775
+ this.clearStackBackToTable();
3776
+ this.push(raw, NS.html, start);
3777
+ this.insertionMode = MODES.inTableBody;
3778
+ return;
3779
+ }
3780
+ if (name === "td" || name === "th" || name === "tr") {
3781
+ this.clearStackBackToTable();
3782
+ this.push("tbody", NS.html, start);
3783
+ this.insertionMode = MODES.inTableBody;
3784
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
3785
+ }
3786
+ if (name === "table") {
3787
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
3788
+ tag: raw,
3789
+ parent: "table",
3790
+ mode: this.insertionMode,
3791
+ action: "auto-close-implicit"
3792
+ });
3793
+ if (this.hasInTableScope("table")) {
3794
+ this.popUntilName("table");
3795
+ this.resetInsertionModeAppropriately();
3796
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
3797
+ }
3798
+ return;
3799
+ }
3800
+ if (name === "style" || name === "script" || name === "template") {
3801
+ return this.startInBody(name, raw, selfClosing, start, endIndex);
3802
+ }
3803
+ if (name === "input") {
3804
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_WARN, start, {
3805
+ tag: raw,
3806
+ parent: "table",
3807
+ mode: this.insertionMode,
3808
+ action: "foster-parent"
3809
+ });
3810
+ return;
3811
+ }
3812
+ if (name === "form") {
3813
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
3814
+ tag: raw,
3815
+ parent: "table",
3816
+ mode: this.insertionMode,
3817
+ action: "ignored"
3818
+ });
3819
+ return;
3820
+ }
3821
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
3822
+ tag: raw,
3823
+ parent: this.currentNode()?.name ?? "table",
3824
+ mode: this.insertionMode,
3825
+ action: "foster-parent"
3826
+ });
3827
+ return this.startInBody(name, raw, selfClosing, start, endIndex);
3828
+ }
3829
+ clearStackBackToTable() {
3830
+ while (this.openElements.length) {
3831
+ const top = this.currentNode();
3832
+ if (!top)
3833
+ break;
3834
+ if (top.name === "table" || top.name === "template")
3835
+ break;
3836
+ this.openElements.pop();
3837
+ }
3838
+ }
3839
+ flushTableText() {
3840
+ if (!this.pendingTableText)
3841
+ return;
3842
+ const { hasNonWhitespace, start, snippet } = this.pendingTableText;
3843
+ if (hasNonWhitespace) {
3844
+ this.report(HTML_TEXT_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
3845
+ mode: this.originalInsertionMode,
3846
+ snippet
3847
+ });
3848
+ }
3849
+ this.pendingTableText = null;
3850
+ }
3851
+ startInCaption(name, raw, selfClosing, start, endIndex) {
3852
+ if (name === "caption" || name === "col" || name === "colgroup" || name === "tbody" || name === "td" || name === "tfoot" || name === "th" || name === "thead" || name === "tr") {
3853
+ if (this.hasInTableScope("caption")) {
3854
+ this.generateImpliedEndTags();
3855
+ this.popUntilName("caption");
3856
+ this.clearActiveFormattingToMarker();
3857
+ this.insertionMode = MODES.inTable;
3858
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
3859
+ }
3860
+ return;
3861
+ }
3862
+ return this.startInBody(name, raw, selfClosing, start, endIndex);
3863
+ }
3864
+ clearActiveFormattingToMarker() {
3865
+ while (this.activeFormatting.length) {
3866
+ const e = this.activeFormatting.pop();
3867
+ if (e === null)
3868
+ return;
3869
+ }
3870
+ }
3871
+ startInColumnGroup(name, raw, selfClosing, start, endIndex) {
3872
+ if (name === "col") {
3873
+ return;
3874
+ }
3875
+ if (name === "template") {
3876
+ return this.startInBody(name, raw, selfClosing, start, endIndex);
3877
+ }
3878
+ if (this.currentNode()?.name === "colgroup") {
3879
+ this.openElements.pop();
3880
+ this.insertionMode = MODES.inTable;
3881
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
3882
+ }
3883
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
3884
+ tag: raw,
3885
+ parent: "colgroup",
3886
+ mode: this.insertionMode,
3887
+ action: "ignored"
3888
+ });
3889
+ }
3890
+ startInTableBody(name, raw, selfClosing, start, endIndex) {
3891
+ if (name === "tr") {
3892
+ this.clearStackBackToTableBody();
3893
+ this.push(raw, NS.html, start);
3894
+ this.insertionMode = MODES.inRow;
3895
+ return;
3896
+ }
3897
+ if (TABLE_BODY_CELL_TAGS.has(name)) {
3898
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_WARN, start, {
3899
+ tag: raw,
3900
+ parent: this.currentNode()?.name ?? "tbody",
3901
+ mode: this.insertionMode,
3902
+ action: "auto-close-implicit"
3903
+ });
3904
+ this.clearStackBackToTableBody();
3905
+ this.push("tr", NS.html, start);
3906
+ this.insertionMode = MODES.inRow;
3907
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
3908
+ }
3909
+ if (name === "caption" || name === "col" || name === "colgroup" || name === "tbody" || name === "tfoot" || name === "thead") {
3910
+ if (this.hasInTableScope("tbody") || this.hasInTableScope("thead") || this.hasInTableScope("tfoot")) {
3911
+ this.clearStackBackToTableBody();
3912
+ this.openElements.pop();
3913
+ this.insertionMode = MODES.inTable;
3914
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
3915
+ }
3916
+ return;
3917
+ }
3918
+ return this.startInTable(name, raw, selfClosing, start, endIndex);
3919
+ }
3920
+ clearStackBackToTableBody() {
3921
+ while (this.openElements.length) {
3922
+ const top = this.currentNode();
3923
+ if (!top)
3924
+ break;
3925
+ if (top.name === "tbody" || top.name === "thead" || top.name === "tfoot" || top.name === "template" || top.name === "table")
3926
+ break;
3927
+ this.openElements.pop();
3928
+ }
3929
+ }
3930
+ startInRow(name, raw, selfClosing, start, endIndex) {
3931
+ if (TABLE_BODY_CELL_TAGS.has(name)) {
3932
+ this.clearStackBackToTableRow();
3933
+ this.push(raw, NS.html, start);
3934
+ this.insertionMode = MODES.inCell;
3935
+ this.activeFormatting.push(null);
3936
+ return;
3937
+ }
3938
+ if (name === "caption" || name === "col" || name === "colgroup" || name === "tbody" || name === "tfoot" || name === "thead" || name === "tr") {
3939
+ if (this.hasInTableScope("tr")) {
3940
+ this.clearStackBackToTableRow();
3941
+ this.openElements.pop();
3942
+ this.insertionMode = MODES.inTableBody;
3943
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
3944
+ }
3945
+ return;
3946
+ }
3947
+ return this.startInTable(name, raw, selfClosing, start, endIndex);
3948
+ }
3949
+ clearStackBackToTableRow() {
3950
+ while (this.openElements.length) {
3951
+ const top = this.currentNode();
3952
+ if (!top)
3953
+ break;
3954
+ if (top.name === "tr" || top.name === "template" || top.name === "table")
3955
+ break;
3956
+ this.openElements.pop();
3957
+ }
3958
+ }
3959
+ startInCell(name, raw, selfClosing, start, endIndex) {
3960
+ if (name === "caption" || name === "col" || name === "colgroup" || name === "tbody" || name === "td" || name === "tfoot" || name === "th" || name === "thead" || name === "tr") {
3961
+ if (this.hasInTableScope("td") || this.hasInTableScope("th")) {
3962
+ this.closeCell();
3963
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
3964
+ }
3965
+ return;
3966
+ }
3967
+ return this.startInBody(name, raw, selfClosing, start, endIndex);
3968
+ }
3969
+ closeCell() {
3970
+ this.generateImpliedEndTags();
3971
+ while (this.openElements.length) {
3972
+ const popped = this.openElements.pop();
3973
+ if (popped.name === "td" || popped.name === "th")
3974
+ break;
3975
+ }
3976
+ this.clearActiveFormattingToMarker();
3977
+ this.insertionMode = MODES.inRow;
3978
+ }
3979
+ startInSelect(name, raw, _selfClosing, start, _endIndex) {
3980
+ if (name === "option") {
3981
+ if (this.currentNode()?.name === "option")
3982
+ this.openElements.pop();
3983
+ this.push(raw, NS.html, start);
3984
+ return;
3985
+ }
3986
+ if (name === "optgroup") {
3987
+ if (this.currentNode()?.name === "option")
3988
+ this.openElements.pop();
3989
+ if (this.currentNode()?.name === "optgroup")
3990
+ this.openElements.pop();
3991
+ this.push(raw, NS.html, start);
3992
+ return;
3993
+ }
3994
+ if (name === "hr")
3995
+ return;
3996
+ if (SELECT_BREAKOUT_TAGS.has(name)) {
3997
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
3998
+ tag: raw,
3999
+ parent: "select",
4000
+ mode: this.insertionMode,
4001
+ action: "auto-close-implicit"
4002
+ });
4003
+ if (this.hasInSelectScope("select")) {
4004
+ this.popUntilName("select");
4005
+ this.resetInsertionModeAppropriately();
4006
+ }
4007
+ if (name === "select")
4008
+ return;
4009
+ return this.dispatchStartTag(name, raw, false, start, _endIndex);
4010
+ }
4011
+ if (name === "script" || name === "template") {
4012
+ return this.startInBody(name, raw, false, start, _endIndex);
4013
+ }
4014
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
4015
+ tag: raw,
4016
+ parent: "select",
4017
+ mode: this.insertionMode,
4018
+ action: "ignored"
4019
+ });
4020
+ }
4021
+ startInSelectInTable(name, raw, selfClosing, start, endIndex) {
4022
+ if (name === "caption" || name === "table" || name === "tbody" || name === "tfoot" || name === "thead" || name === "tr" || name === "td" || name === "th") {
4023
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
4024
+ tag: raw,
4025
+ parent: "select",
4026
+ mode: this.insertionMode,
4027
+ action: "auto-close-implicit"
4028
+ });
4029
+ this.popUntilName("select");
4030
+ this.resetInsertionModeAppropriately();
4031
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
4032
+ }
4033
+ return this.startInSelect(name, raw, selfClosing, start, endIndex);
4034
+ }
4035
+ resetInsertionModeAppropriately() {
4036
+ for (let i = this.openElements.length - 1;i >= 0; i--) {
4037
+ const f = this.openElements[i];
4038
+ if (f.ns !== NS.html)
4039
+ continue;
4040
+ const last = i === 0;
4041
+ switch (f.name) {
4042
+ case "select":
4043
+ this.insertionMode = MODES.inSelect;
4044
+ return;
4045
+ case "td":
4046
+ case "th":
4047
+ if (!last) {
4048
+ this.insertionMode = MODES.inCell;
4049
+ return;
4050
+ }
4051
+ break;
4052
+ case "tr":
4053
+ this.insertionMode = MODES.inRow;
4054
+ return;
4055
+ case "tbody":
4056
+ case "thead":
4057
+ case "tfoot":
4058
+ this.insertionMode = MODES.inTableBody;
4059
+ return;
4060
+ case "caption":
4061
+ this.insertionMode = MODES.inCaption;
4062
+ return;
4063
+ case "colgroup":
4064
+ this.insertionMode = MODES.inColumnGroup;
4065
+ return;
4066
+ case "table":
4067
+ this.insertionMode = MODES.inTable;
4068
+ return;
4069
+ case "template":
4070
+ this.insertionMode = this.templateInsertionModes[this.templateInsertionModes.length - 1] ?? MODES.inBody;
4071
+ return;
4072
+ default:
4073
+ break;
4074
+ }
4075
+ }
4076
+ this.insertionMode = MODES.inBody;
4077
+ }
4078
+ handleEndTag(name, start) {
4079
+ if (this.isTransparentTag(name))
4080
+ return;
4081
+ const ns = this.currentNamespace();
4082
+ if (ns !== NS.html) {
4083
+ for (let i = this.openElements.length - 1;i >= 0; i--) {
4084
+ const f = this.openElements[i];
4085
+ if (f.ns === NS.html)
4086
+ break;
4087
+ if (f.name.toLowerCase() === name) {
4088
+ this.openElements.length = i;
4089
+ return;
4090
+ }
4091
+ }
4092
+ }
4093
+ if (VOID_ELEMENTS.has(name)) {
4094
+ this.report(HTML_VOID_ELEMENT_HAS_CLOSE_TAG, LEVEL_WARN, start, {
4095
+ tag: name,
4096
+ mode: this.insertionMode
4097
+ });
4098
+ return;
4099
+ }
4100
+ if (FORMATTING_ELEMENTS.has(name)) {
4101
+ const top = this.currentNode();
4102
+ if (top && top.ns === NS.html && top.name === name) {
4103
+ this.openElements.pop();
4104
+ this.removeFromActiveFormattingByRef(top);
4105
+ return;
4106
+ }
4107
+ if (this.activeFormattingHas(name) || this.openElementsHas(name)) {
4108
+ this.report(HTML_MISNESTED_FORMATTING, LEVEL_WARN, start, {
4109
+ tag: name,
4110
+ mode: this.insertionMode
4111
+ });
4112
+ this.runAdoptionAgency(name);
4113
+ return;
4114
+ }
4115
+ this.report(HTML_UNEXPECTED_END_TAG, LEVEL_WARN, start, {
4116
+ tag: name,
4117
+ mode: this.insertionMode
4118
+ });
4119
+ return;
4120
+ }
4121
+ for (let i = this.openElements.length - 1;i >= 0; i--) {
4122
+ const f = this.openElements[i];
4123
+ if (f.ns === NS.html && f.name === name) {
4124
+ this.openElements.length = i;
4125
+ if (name === "form")
4126
+ this.formPointer = null;
4127
+ if (TABLE_SCOPE_TAGS.has(name) || name === "select" || name === "template") {
4128
+ this.resetInsertionModeAppropriately();
4129
+ }
4130
+ return;
4131
+ }
4132
+ if (f.ns === NS.html && SPECIAL_ELEMENTS.has(f.name)) {
4133
+ break;
4134
+ }
4135
+ }
4136
+ }
4137
+ removeFromActiveFormattingByRef(ref) {
4138
+ const idx = this.activeFormatting.indexOf(ref);
4139
+ if (idx >= 0)
4140
+ this.activeFormatting.splice(idx, 1);
4141
+ }
4142
+ handleText(start, end) {
4143
+ if (this.insertionMode === MODES.inTable || this.insertionMode === MODES.inTableBody || this.insertionMode === MODES.inRow) {
4144
+ const slice = this.html.slice(start, end);
4145
+ const hasNonWhitespace = /\S/.test(slice);
4146
+ if (hasNonWhitespace) {
4147
+ this.report(HTML_TEXT_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
4148
+ mode: this.insertionMode,
4149
+ snippet: slice.length > 40 ? `${slice.slice(0, 40)}…` : slice
4150
+ });
4151
+ }
4152
+ return;
4153
+ }
4154
+ if (this.insertionMode === MODES.inColumnGroup) {
4155
+ const slice = this.html.slice(start, end);
4156
+ if (/\S/.test(slice)) {
4157
+ if (this.currentNode()?.name === "colgroup") {
4158
+ this.openElements.pop();
4159
+ this.insertionMode = MODES.inTable;
4160
+ return this.handleText(start, end);
4161
+ }
4162
+ }
4163
+ return;
4164
+ }
4165
+ if (this.insertionMode === MODES.inSelect || this.insertionMode === MODES.inSelectInTable) {
4166
+ return;
4167
+ }
4168
+ }
4169
+ }
4170
+ function computeLineStarts(html) {
4171
+ const arr = [0];
4172
+ for (let i = 0;i < html.length; i++) {
4173
+ if (html.charCodeAt(i) === 10)
4174
+ arr.push(i + 1);
4175
+ }
4176
+ return arr;
4177
+ }
4178
+ function offsetToLineCol(lineStarts, offset) {
4179
+ let lo = 0;
4180
+ let hi = lineStarts.length - 1;
4181
+ while (lo < hi) {
4182
+ const mid = lo + hi + 1 >>> 1;
4183
+ if (lineStarts[mid] <= offset)
4184
+ lo = mid;
4185
+ else
4186
+ hi = mid - 1;
4187
+ }
4188
+ return { line: lo + 1, column: offset - lineStarts[lo] + 1 };
4189
+ }
4190
+
1647
4191
  // tools/core/lint-check.js
1648
4192
  var ALT_HANDLER_NOT_DEFINED = "ALT_HANDLER_NOT_DEFINED";
1649
4193
  var ALT_HANDLER_NOT_REFERENCED = "ALT_HANDLER_NOT_REFERENCED";
@@ -1686,8 +4230,8 @@ var AT_PREFIX_HINT_KNOWN_BY_KIND = {
1686
4230
  "unknown-x-op": X_KNOWN_OP_NAMES,
1687
4231
  "unknown-x-attr": X_KNOWN_ATTR_NAMES
1688
4232
  };
1689
- var LEVEL_WARN = "warn";
1690
- var LEVEL_ERROR = "error";
4233
+ var LEVEL_WARN2 = "warn";
4234
+ var LEVEL_ERROR2 = "error";
1691
4235
  var LEVEL_HINT = "hint";
1692
4236
  function checkComponent(Comp, lx = new LintContext) {
1693
4237
  return lx.push({ componentName: Comp.name }, () => {
@@ -1709,6 +4253,16 @@ function checkView(lx, view, Comp, referencedAlters) {
1709
4253
  checkEventModifiers(lx, view);
1710
4254
  checkKnownHandlerNames(lx, view, Comp, referencedAlters);
1711
4255
  checkMacroCallArgs(lx, view, Comp);
4256
+ checkHtmlStructure(lx, view);
4257
+ }
4258
+ var HTML_LINT_OPTS = {
4259
+ fragmentContext: "template",
4260
+ transparentTagPrefixes: ["x"]
4261
+ };
4262
+ function checkHtmlStructure(lx, view) {
4263
+ if (typeof view.rawView !== "string" || !view.rawView)
4264
+ return;
4265
+ lintHtml(view.rawView, (f) => lx.report(f.id, { ...f.info, location: f.location }, f.level), HTML_LINT_OPTS);
1712
4266
  }
1713
4267
  function checkParseIssues(lx, view) {
1714
4268
  const issues = view.ctx.parseIssues;
@@ -2086,15 +4640,15 @@ class LintContext {
2086
4640
  }
2087
4641
  }
2088
4642
  error(id, info) {
2089
- this.report(id, info, LEVEL_ERROR);
4643
+ this.report(id, info, LEVEL_ERROR2);
2090
4644
  }
2091
4645
  warn(id, info) {
2092
- this.report(id, info, LEVEL_WARN);
4646
+ this.report(id, info, LEVEL_WARN2);
2093
4647
  }
2094
4648
  hint(id, info) {
2095
4649
  this.report(id, info, LEVEL_HINT);
2096
4650
  }
2097
- report(id, info = {}, level = LEVEL_ERROR) {
4651
+ report(id, info = {}, level = LEVEL_ERROR2) {
2098
4652
  this.reports.push({ id, info, level, context: { ...this.frame } });
2099
4653
  }
2100
4654
  }
@@ -2218,12 +4772,36 @@ function lintIdToMessage(id, info) {
2218
4772
  }
2219
4773
  case "BAD_VALUE":
2220
4774
  return `${badValueMessage(info)}${fmtTagSuffix(info)}`;
4775
+ case "HTML_TAG_NAME_HAS_UPPERCASE":
4776
+ return `Tag <${info.raw}> will be lowercased to <${info.lowercased}>${fmtLocationSuffix(info)}`;
4777
+ case "HTML_SVG_TAG_WILL_LOWERCASE":
4778
+ return `SVG tag <${info.raw}> is not in the WHATWG case-correction list — will be lowercased to <${info.lowercased}>${fmtLocationSuffix(info)}`;
4779
+ case "HTML_TAG_NOT_ALLOWED_IN_PARENT":
4780
+ return `<${info.tag}> not allowed under <${info.parent ?? "?"}> in ${info.mode} (action: ${info.action})${fmtLocationSuffix(info)}`;
4781
+ case "HTML_TEXT_NOT_ALLOWED_IN_PARENT":
4782
+ return `Non-whitespace text not allowed in ${info.mode}: ${JSON.stringify(info.snippet)}${fmtLocationSuffix(info)}`;
4783
+ case "HTML_VOID_ELEMENT_HAS_CLOSE_TAG":
4784
+ return `Void element <${info.tag}> has an explicit close tag${fmtLocationSuffix(info)}`;
4785
+ case "HTML_DUPLICATE_FORM":
4786
+ return `Nested <form> — the inner form will be dropped by the parser${fmtLocationSuffix(info)}`;
4787
+ case "HTML_NESTED_INTERACTIVE":
4788
+ return `<${info.tag}> nested inside another <${info.tag}> — adoption agency will reorder${fmtLocationSuffix(info)}`;
4789
+ case "HTML_MISNESTED_FORMATTING":
4790
+ return `Misnested formatting tag </${info.tag}> — adoption agency will reorder nodes${fmtLocationSuffix(info)}`;
4791
+ case "HTML_UNEXPECTED_END_TAG":
4792
+ return `Unexpected end tag </${info.tag}>${fmtLocationSuffix(info)}`;
2221
4793
  case "LINT_ERROR":
2222
4794
  return info.message;
2223
4795
  default:
2224
4796
  return id;
2225
4797
  }
2226
4798
  }
4799
+ function fmtLocationSuffix(info) {
4800
+ const loc = info?.location;
4801
+ if (!loc)
4802
+ return "";
4803
+ return ` at L${loc.line}:C${loc.column}`;
4804
+ }
2227
4805
 
2228
4806
  // src/components.js
2229
4807
  class Components {
@@ -2553,7 +5131,7 @@ class Stack {
2553
5131
  }
2554
5132
 
2555
5133
  // src/transactor.js
2556
- class State {
5134
+ class State2 {
2557
5135
  constructor(val) {
2558
5136
  this.val = val;
2559
5137
  this.changeSubs = [];
@@ -2576,7 +5154,7 @@ class Transactor {
2576
5154
  constructor(comps, rootValue) {
2577
5155
  this.comps = comps;
2578
5156
  this.transactions = [];
2579
- this.state = new State(rootValue);
5157
+ this.state = new State2(rootValue);
2580
5158
  this.onTransactionPushed = () => {};
2581
5159
  }
2582
5160
  pushTransaction(t) {