tutuca 0.9.37 → 0.9.38

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,428 +1644,77 @@ 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 = {}));
1647
+ // tools/core/html-tokenizer.js
1648
+ var CharCodes = {
1649
+ Tab: 9,
1650
+ NewLine: 10,
1651
+ FormFeed: 12,
1652
+ CarriageReturn: 13,
1653
+ Space: 32,
1654
+ ExclamationMark: 33,
1655
+ Number: 35,
1656
+ SingleQuote: 39,
1657
+ DoubleQuote: 34,
1658
+ Dash: 45,
1659
+ Slash: 47,
1660
+ Zero: 48,
1661
+ Nine: 57,
1662
+ Semi: 59,
1663
+ Lt: 60,
1664
+ Eq: 61,
1665
+ Gt: 62,
1666
+ Questionmark: 63,
1667
+ UpperA: 65,
1668
+ LowerA: 97,
1669
+ UpperF: 70,
1670
+ LowerF: 102,
1671
+ UpperZ: 90,
1672
+ LowerZ: 122,
1673
+ LowerX: 120,
1674
+ OpeningSquareBracket: 91
1675
+ };
1676
+ var State = {
1677
+ Text: 1,
1678
+ BeforeTagName: 2,
1679
+ InTagName: 3,
1680
+ InSelfClosingTag: 4,
1681
+ BeforeClosingTagName: 5,
1682
+ InClosingTagName: 6,
1683
+ AfterClosingTagName: 7,
1684
+ BeforeAttributeName: 8,
1685
+ InAttributeName: 9,
1686
+ AfterAttributeName: 10,
1687
+ BeforeAttributeValue: 11,
1688
+ InAttributeValueDq: 12,
1689
+ InAttributeValueSq: 13,
1690
+ InAttributeValueNq: 14,
1691
+ BeforeDeclaration: 15,
1692
+ InDeclaration: 16,
1693
+ InProcessingInstruction: 17,
1694
+ BeforeComment: 18,
1695
+ CDATASequence: 19,
1696
+ DeclarationSequence: 20,
1697
+ InSpecialComment: 21,
1698
+ InCommentLike: 22,
1699
+ SpecialStartSequence: 23,
1700
+ InSpecialTag: 24,
1701
+ InPlainText: 25
1702
+ };
2053
1703
  function isWhitespace(c) {
2054
- return c === CharCodes2.Space || c === CharCodes2.NewLine || c === CharCodes2.Tab || c === CharCodes2.FormFeed || c === CharCodes2.CarriageReturn;
1704
+ return c === CharCodes.Space || c === CharCodes.NewLine || c === CharCodes.Tab || c === CharCodes.FormFeed || c === CharCodes.CarriageReturn;
2055
1705
  }
2056
1706
  function isEndOfTagSection(c) {
2057
- return c === CharCodes2.Slash || c === CharCodes2.Gt || isWhitespace(c);
1707
+ return c === CharCodes.Slash || c === CharCodes.Gt || isWhitespace(c);
2058
1708
  }
2059
1709
  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 = {}));
1710
+ return c >= CharCodes.LowerA && c <= CharCodes.LowerZ || c >= CharCodes.UpperA && c <= CharCodes.UpperZ;
1711
+ }
1712
+ var QuoteType = {
1713
+ NoValue: 0,
1714
+ Unquoted: 1,
1715
+ Single: 2,
1716
+ Double: 3
1717
+ };
2069
1718
  var Sequences = {
2070
1719
  Empty: new Uint8Array(0),
2071
1720
  Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),
@@ -2073,57 +1722,13 @@ var Sequences = {
2073
1722
  CommentEnd: new Uint8Array([45, 45, 33, 62]),
2074
1723
  Doctype: new Uint8Array([100, 111, 99, 116, 121, 112, 101]),
2075
1724
  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
- ]),
1725
+ NoembedEnd: new Uint8Array([60, 47, 110, 111, 101, 109, 98, 101, 100]),
1726
+ NoframesEnd: new Uint8Array([60, 47, 110, 111, 102, 114, 97, 109, 101, 115]),
1727
+ Plaintext: new Uint8Array([60, 47, 112, 108, 97, 105, 110, 116, 101, 120, 116]),
2112
1728
  ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),
2113
1729
  StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),
2114
1730
  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
- ]),
1731
+ TextareaEnd: new Uint8Array([60, 47, 116, 101, 120, 116, 97, 114, 101, 97]),
2127
1732
  XmpEnd: new Uint8Array([60, 47, 120, 109, 112])
2128
1733
  };
2129
1734
  var specialStartSequences = new Map([
@@ -2135,34 +1740,26 @@ var specialStartSequences = new Map([
2135
1740
  [Sequences.XmpEnd[2], Sequences.XmpEnd]
2136
1741
  ]);
2137
1742
 
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) {
1743
+ class HtmlTokenizer {
1744
+ constructor({ xmlMode = false, recognizeSelfClosing = xmlMode } = {}, cbs) {
2154
1745
  this.cbs = cbs;
2155
1746
  this.xmlMode = xmlMode;
2156
- this.decodeEntities = decodeEntities;
2157
1747
  this.recognizeSelfClosing = recognizeSelfClosing;
2158
- this.entityDecoder = new EntityDecoder(xmlMode ? xmlDecodeTree : htmlDecodeTree, (cp, consumed) => this.emitCodePoint(cp, consumed));
1748
+ this.state = State.Text;
1749
+ this.buffer = "";
1750
+ this.sectionStart = 0;
1751
+ this.index = 0;
1752
+ this.isSpecial = false;
1753
+ this.running = true;
1754
+ this.offset = 0;
1755
+ this.currentSequence = Sequences.Empty;
1756
+ this.sequenceIndex = 0;
2159
1757
  }
2160
1758
  reset() {
2161
1759
  this.state = State.Text;
2162
1760
  this.buffer = "";
2163
1761
  this.sectionStart = 0;
2164
1762
  this.index = 0;
2165
- this.baseState = State.Text;
2166
1763
  this.isSpecial = false;
2167
1764
  this.currentSequence = Sequences.Empty;
2168
1765
  this.sequenceIndex = 0;
@@ -2188,18 +1785,14 @@ class Tokenizer {
2188
1785
  }
2189
1786
  }
2190
1787
  stateText(c) {
2191
- if (c === CharCodes2.Lt || !this.decodeEntities && this.fastForwardTo(CharCodes2.Lt)) {
1788
+ if (c === CharCodes.Lt || this.fastForwardTo(CharCodes.Lt)) {
2192
1789
  if (this.index > this.sectionStart) {
2193
1790
  this.cbs.ontext(this.sectionStart, this.index);
2194
1791
  }
2195
1792
  this.state = State.BeforeTagName;
2196
1793
  this.sectionStart = this.index;
2197
- } else if (this.decodeEntities && c === CharCodes2.Amp) {
2198
- this.startEntity();
2199
1794
  }
2200
1795
  }
2201
- currentSequence = Sequences.Empty;
2202
- sequenceIndex = 0;
2203
1796
  enterTagBody() {
2204
1797
  if (this.currentSequence === Sequences.Plaintext) {
2205
1798
  this.currentSequence = Sequences.Empty;
@@ -2281,12 +1874,12 @@ class Tokenizer {
2281
1874
  this.state = State.Text;
2282
1875
  }
2283
1876
  stateInCommentLike(c) {
2284
- if (!this.xmlMode && this.currentSequence === Sequences.CommentEnd && this.sequenceIndex <= 1 && this.index === this.sectionStart + this.sequenceIndex && c === CharCodes2.Gt) {
1877
+ if (!this.xmlMode && this.currentSequence === Sequences.CommentEnd && this.sequenceIndex <= 1 && this.index === this.sectionStart + this.sequenceIndex && c === CharCodes.Gt) {
2285
1878
  this.emitComment(this.sequenceIndex);
2286
- } else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === 2 && c === CharCodes2.Gt) {
1879
+ } else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === 2 && c === CharCodes.Gt) {
2287
1880
  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);
1881
+ } else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === this.currentSequence.length - 1 && c !== CharCodes.Gt) {
1882
+ this.sequenceIndex = Number(c === CharCodes.Dash);
2290
1883
  } else if (c === this.currentSequence[this.sequenceIndex]) {
2291
1884
  if (++this.sequenceIndex === this.currentSequence.length) {
2292
1885
  if (this.currentSequence === Sequences.CdataEnd) {
@@ -2329,22 +1922,18 @@ class Tokenizer {
2329
1922
  if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
2330
1923
  this.sequenceIndex += 1;
2331
1924
  } 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)) {
1925
+ if (this.fastForwardTo(CharCodes.Lt)) {
2337
1926
  this.sequenceIndex = 1;
2338
1927
  }
2339
1928
  } else {
2340
- this.sequenceIndex = Number(c === CharCodes2.Lt);
1929
+ this.sequenceIndex = Number(c === CharCodes.Lt);
2341
1930
  }
2342
1931
  }
2343
1932
  stateBeforeTagName(c) {
2344
- if (c === CharCodes2.ExclamationMark) {
1933
+ if (c === CharCodes.ExclamationMark) {
2345
1934
  this.state = State.BeforeDeclaration;
2346
1935
  this.sectionStart = this.index + 1;
2347
- } else if (c === CharCodes2.Questionmark) {
1936
+ } else if (c === CharCodes.Questionmark) {
2348
1937
  if (this.xmlMode) {
2349
1938
  this.state = State.InProcessingInstruction;
2350
1939
  this.sequenceIndex = 0;
@@ -2364,7 +1953,7 @@ class Tokenizer {
2364
1953
  this.sequenceIndex = 3;
2365
1954
  this.state = State.SpecialStartSequence;
2366
1955
  }
2367
- } else if (c === CharCodes2.Slash) {
1956
+ } else if (c === CharCodes.Slash) {
2368
1957
  this.state = State.BeforeClosingTagName;
2369
1958
  } else {
2370
1959
  this.state = State.Text;
@@ -2381,11 +1970,11 @@ class Tokenizer {
2381
1970
  }
2382
1971
  stateBeforeClosingTagName(c) {
2383
1972
  if (isWhitespace(c)) {
2384
- if (this.xmlMode) {} else {
1973
+ if (!this.xmlMode) {
2385
1974
  this.state = State.InSpecialComment;
2386
1975
  this.sectionStart = this.index;
2387
1976
  }
2388
- } else if (c === CharCodes2.Gt) {
1977
+ } else if (c === CharCodes.Gt) {
2389
1978
  this.state = State.Text;
2390
1979
  if (!this.xmlMode) {
2391
1980
  this.sectionStart = this.index + 1;
@@ -2404,17 +1993,17 @@ class Tokenizer {
2404
1993
  }
2405
1994
  }
2406
1995
  stateAfterClosingTagName(c) {
2407
- if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
1996
+ if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
2408
1997
  this.state = State.Text;
2409
1998
  this.sectionStart = this.index + 1;
2410
1999
  }
2411
2000
  }
2412
2001
  stateBeforeAttributeName(c) {
2413
- if (c === CharCodes2.Gt) {
2002
+ if (c === CharCodes.Gt) {
2414
2003
  this.cbs.onopentagend(this.index);
2415
2004
  this.enterTagBody();
2416
2005
  this.sectionStart = this.index + 1;
2417
- } else if (c === CharCodes2.Slash) {
2006
+ } else if (c === CharCodes.Slash) {
2418
2007
  this.state = State.InSelfClosingTag;
2419
2008
  } else if (!isWhitespace(c)) {
2420
2009
  this.state = State.InAttributeName;
@@ -2422,7 +2011,7 @@ class Tokenizer {
2422
2011
  }
2423
2012
  }
2424
2013
  stateInSelfClosingTag(c) {
2425
- if (c === CharCodes2.Gt) {
2014
+ if (c === CharCodes.Gt) {
2426
2015
  this.cbs.onselfclosingtag(this.index);
2427
2016
  this.sectionStart = this.index + 1;
2428
2017
  if (!this.recognizeSelfClosing) {
@@ -2438,7 +2027,7 @@ class Tokenizer {
2438
2027
  }
2439
2028
  }
2440
2029
  stateInAttributeName(c) {
2441
- if (c === CharCodes2.Eq || isEndOfTagSection(c)) {
2030
+ if (c === CharCodes.Eq || isEndOfTagSection(c)) {
2442
2031
  this.cbs.onattribname(this.sectionStart, this.index);
2443
2032
  this.sectionStart = this.index;
2444
2033
  this.state = State.AfterAttributeName;
@@ -2446,9 +2035,9 @@ class Tokenizer {
2446
2035
  }
2447
2036
  }
2448
2037
  stateAfterAttributeName(c) {
2449
- if (c === CharCodes2.Eq) {
2038
+ if (c === CharCodes.Eq) {
2450
2039
  this.state = State.BeforeAttributeValue;
2451
- } else if (c === CharCodes2.Slash || c === CharCodes2.Gt) {
2040
+ } else if (c === CharCodes.Slash || c === CharCodes.Gt) {
2452
2041
  this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
2453
2042
  this.sectionStart = -1;
2454
2043
  this.state = State.BeforeAttributeName;
@@ -2460,10 +2049,10 @@ class Tokenizer {
2460
2049
  }
2461
2050
  }
2462
2051
  stateBeforeAttributeValue(c) {
2463
- if (c === CharCodes2.DoubleQuote) {
2052
+ if (c === CharCodes.DoubleQuote) {
2464
2053
  this.state = State.InAttributeValueDq;
2465
2054
  this.sectionStart = this.index + 1;
2466
- } else if (c === CharCodes2.SingleQuote) {
2055
+ } else if (c === CharCodes.SingleQuote) {
2467
2056
  this.state = State.InAttributeValueSq;
2468
2057
  this.sectionStart = this.index + 1;
2469
2058
  } else if (!isWhitespace(c)) {
@@ -2473,47 +2062,43 @@ class Tokenizer {
2473
2062
  }
2474
2063
  }
2475
2064
  handleInAttributeValue(c, quote) {
2476
- if (c === quote || !this.decodeEntities && this.fastForwardTo(quote)) {
2065
+ if (c === quote || this.fastForwardTo(quote)) {
2477
2066
  this.cbs.onattribdata(this.sectionStart, this.index);
2478
2067
  this.sectionStart = -1;
2479
- this.cbs.onattribend(quote === CharCodes2.DoubleQuote ? QuoteType.Double : QuoteType.Single, this.index + 1);
2068
+ this.cbs.onattribend(quote === CharCodes.DoubleQuote ? QuoteType.Double : QuoteType.Single, this.index + 1);
2480
2069
  this.state = State.BeforeAttributeName;
2481
- } else if (this.decodeEntities && c === CharCodes2.Amp) {
2482
- this.startEntity();
2483
2070
  }
2484
2071
  }
2485
2072
  stateInAttributeValueDoubleQuotes(c) {
2486
- this.handleInAttributeValue(c, CharCodes2.DoubleQuote);
2073
+ this.handleInAttributeValue(c, CharCodes.DoubleQuote);
2487
2074
  }
2488
2075
  stateInAttributeValueSingleQuotes(c) {
2489
- this.handleInAttributeValue(c, CharCodes2.SingleQuote);
2076
+ this.handleInAttributeValue(c, CharCodes.SingleQuote);
2490
2077
  }
2491
2078
  stateInAttributeValueNoQuotes(c) {
2492
- if (isWhitespace(c) || c === CharCodes2.Gt) {
2079
+ if (isWhitespace(c) || c === CharCodes.Gt) {
2493
2080
  this.cbs.onattribdata(this.sectionStart, this.index);
2494
2081
  this.sectionStart = -1;
2495
2082
  this.cbs.onattribend(QuoteType.Unquoted, this.index);
2496
2083
  this.state = State.BeforeAttributeName;
2497
2084
  this.stateBeforeAttributeName(c);
2498
- } else if (this.decodeEntities && c === CharCodes2.Amp) {
2499
- this.startEntity();
2500
2085
  }
2501
2086
  }
2502
2087
  stateBeforeDeclaration(c) {
2503
- if (c === CharCodes2.OpeningSquareBracket) {
2088
+ if (c === CharCodes.OpeningSquareBracket) {
2504
2089
  this.state = State.CDATASequence;
2505
2090
  this.sequenceIndex = 0;
2506
2091
  } else if (this.xmlMode) {
2507
- this.state = c === CharCodes2.Dash ? State.BeforeComment : State.InDeclaration;
2092
+ this.state = c === CharCodes.Dash ? State.BeforeComment : State.InDeclaration;
2508
2093
  } else if ((c | 32) === Sequences.Doctype[0]) {
2509
2094
  this.state = State.DeclarationSequence;
2510
2095
  this.currentSequence = Sequences.Doctype;
2511
2096
  this.sequenceIndex = 1;
2512
- } else if (c === CharCodes2.Gt) {
2097
+ } else if (c === CharCodes.Gt) {
2513
2098
  this.cbs.oncomment(this.sectionStart, this.index, 0);
2514
2099
  this.state = State.Text;
2515
2100
  this.sectionStart = this.index + 1;
2516
- } else if (c === CharCodes2.Dash) {
2101
+ } else if (c === CharCodes.Dash) {
2517
2102
  this.state = State.BeforeComment;
2518
2103
  } else {
2519
2104
  this.state = State.InSpecialComment;
@@ -2525,7 +2110,7 @@ class Tokenizer {
2525
2110
  this.stateInDeclaration(c);
2526
2111
  } else if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
2527
2112
  this.sequenceIndex += 1;
2528
- } else if (c === CharCodes2.Gt) {
2113
+ } else if (c === CharCodes.Gt) {
2529
2114
  this.cbs.oncomment(this.sectionStart, this.index, 0);
2530
2115
  this.state = State.Text;
2531
2116
  this.sectionStart = this.index + 1;
@@ -2534,33 +2119,33 @@ class Tokenizer {
2534
2119
  }
2535
2120
  }
2536
2121
  stateInDeclaration(c) {
2537
- if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2122
+ if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
2538
2123
  this.cbs.ondeclaration(this.sectionStart, this.index);
2539
2124
  this.state = State.Text;
2540
2125
  this.sectionStart = this.index + 1;
2541
2126
  }
2542
2127
  }
2543
2128
  stateInProcessingInstruction(c) {
2544
- if (c === CharCodes2.Questionmark) {
2129
+ if (c === CharCodes.Questionmark) {
2545
2130
  this.sequenceIndex = 1;
2546
- } else if (c === CharCodes2.Gt && this.sequenceIndex === 1) {
2131
+ } else if (c === CharCodes.Gt && this.sequenceIndex === 1) {
2547
2132
  this.cbs.onprocessinginstruction(this.sectionStart, this.index - 1);
2548
2133
  this.sequenceIndex = 0;
2549
2134
  this.state = State.Text;
2550
2135
  this.sectionStart = this.index + 1;
2551
2136
  } else {
2552
- this.sequenceIndex = Number(this.fastForwardTo(CharCodes2.Questionmark));
2137
+ this.sequenceIndex = Number(this.fastForwardTo(CharCodes.Questionmark));
2553
2138
  }
2554
2139
  }
2555
2140
  stateBeforeComment(c) {
2556
- if (c === CharCodes2.Dash) {
2141
+ if (c === CharCodes.Dash) {
2557
2142
  this.state = State.InCommentLike;
2558
2143
  this.currentSequence = Sequences.CommentEnd;
2559
2144
  this.sequenceIndex = 0;
2560
2145
  this.sectionStart = this.index + 1;
2561
2146
  } else if (this.xmlMode) {
2562
2147
  this.state = State.InDeclaration;
2563
- } else if (c === CharCodes2.Gt) {
2148
+ } else if (c === CharCodes.Gt) {
2564
2149
  this.cbs.oncomment(this.sectionStart, this.index, 0);
2565
2150
  this.state = State.Text;
2566
2151
  this.sectionStart = this.index + 1;
@@ -2569,35 +2154,12 @@ class Tokenizer {
2569
2154
  }
2570
2155
  }
2571
2156
  stateInSpecialComment(c) {
2572
- if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2157
+ if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
2573
2158
  this.cbs.oncomment(this.sectionStart, this.index, 0);
2574
2159
  this.state = State.Text;
2575
2160
  this.sectionStart = this.index + 1;
2576
2161
  }
2577
2162
  }
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
2163
  cleanup() {
2602
2164
  if (this.running && this.sectionStart !== this.index) {
2603
2165
  if (this.state === State.Text || this.state === State.InPlainText || this.state === State.InSpecialTag && this.sequenceIndex === 0) {
@@ -2616,127 +2178,93 @@ class Tokenizer {
2616
2178
  while (this.shouldContinue()) {
2617
2179
  const c = this.buffer.charCodeAt(this.index - this.offset);
2618
2180
  switch (this.state) {
2619
- case State.Text: {
2181
+ case State.Text:
2620
2182
  this.stateText(c);
2621
2183
  break;
2622
- }
2623
- case State.InPlainText: {
2184
+ case State.InPlainText:
2624
2185
  this.index = this.buffer.length + this.offset - 1;
2625
2186
  break;
2626
- }
2627
- case State.SpecialStartSequence: {
2187
+ case State.SpecialStartSequence:
2628
2188
  this.stateSpecialStartSequence(c);
2629
2189
  break;
2630
- }
2631
- case State.InSpecialTag: {
2190
+ case State.InSpecialTag:
2632
2191
  this.stateInSpecialTag(c);
2633
2192
  break;
2634
- }
2635
- case State.CDATASequence: {
2193
+ case State.CDATASequence:
2636
2194
  this.stateCDATASequence(c);
2637
2195
  break;
2638
- }
2639
- case State.DeclarationSequence: {
2196
+ case State.DeclarationSequence:
2640
2197
  this.stateDeclarationSequence(c);
2641
2198
  break;
2642
- }
2643
- case State.InAttributeValueDq: {
2199
+ case State.InAttributeValueDq:
2644
2200
  this.stateInAttributeValueDoubleQuotes(c);
2645
2201
  break;
2646
- }
2647
- case State.InAttributeName: {
2202
+ case State.InAttributeName:
2648
2203
  this.stateInAttributeName(c);
2649
2204
  break;
2650
- }
2651
- case State.InCommentLike: {
2205
+ case State.InCommentLike:
2652
2206
  this.stateInCommentLike(c);
2653
2207
  break;
2654
- }
2655
- case State.InSpecialComment: {
2208
+ case State.InSpecialComment:
2656
2209
  this.stateInSpecialComment(c);
2657
2210
  break;
2658
- }
2659
- case State.BeforeAttributeName: {
2211
+ case State.BeforeAttributeName:
2660
2212
  this.stateBeforeAttributeName(c);
2661
2213
  break;
2662
- }
2663
- case State.InTagName: {
2214
+ case State.InTagName:
2664
2215
  this.stateInTagName(c);
2665
2216
  break;
2666
- }
2667
- case State.InClosingTagName: {
2217
+ case State.InClosingTagName:
2668
2218
  this.stateInClosingTagName(c);
2669
2219
  break;
2670
- }
2671
- case State.BeforeTagName: {
2220
+ case State.BeforeTagName:
2672
2221
  this.stateBeforeTagName(c);
2673
2222
  break;
2674
- }
2675
- case State.AfterAttributeName: {
2223
+ case State.AfterAttributeName:
2676
2224
  this.stateAfterAttributeName(c);
2677
2225
  break;
2678
- }
2679
- case State.InAttributeValueSq: {
2226
+ case State.InAttributeValueSq:
2680
2227
  this.stateInAttributeValueSingleQuotes(c);
2681
2228
  break;
2682
- }
2683
- case State.BeforeAttributeValue: {
2229
+ case State.BeforeAttributeValue:
2684
2230
  this.stateBeforeAttributeValue(c);
2685
2231
  break;
2686
- }
2687
- case State.BeforeClosingTagName: {
2232
+ case State.BeforeClosingTagName:
2688
2233
  this.stateBeforeClosingTagName(c);
2689
2234
  break;
2690
- }
2691
- case State.AfterClosingTagName: {
2235
+ case State.AfterClosingTagName:
2692
2236
  this.stateAfterClosingTagName(c);
2693
2237
  break;
2694
- }
2695
- case State.InAttributeValueNq: {
2238
+ case State.InAttributeValueNq:
2696
2239
  this.stateInAttributeValueNoQuotes(c);
2697
2240
  break;
2698
- }
2699
- case State.InSelfClosingTag: {
2241
+ case State.InSelfClosingTag:
2700
2242
  this.stateInSelfClosingTag(c);
2701
2243
  break;
2702
- }
2703
- case State.InDeclaration: {
2244
+ case State.InDeclaration:
2704
2245
  this.stateInDeclaration(c);
2705
2246
  break;
2706
- }
2707
- case State.BeforeDeclaration: {
2247
+ case State.BeforeDeclaration:
2708
2248
  this.stateBeforeDeclaration(c);
2709
2249
  break;
2710
- }
2711
- case State.BeforeComment: {
2250
+ case State.BeforeComment:
2712
2251
  this.stateBeforeComment(c);
2713
2252
  break;
2714
- }
2715
- case State.InProcessingInstruction: {
2253
+ case State.InProcessingInstruction:
2716
2254
  this.stateInProcessingInstruction(c);
2717
2255
  break;
2718
- }
2719
- case State.InEntity: {
2720
- this.stateInEntity();
2721
- break;
2722
- }
2723
2256
  }
2724
2257
  this.index++;
2725
2258
  }
2726
2259
  this.cleanup();
2727
2260
  }
2728
2261
  finish() {
2729
- if (this.state === State.InEntity) {
2730
- this.entityDecoder.end();
2731
- this.state = this.baseState;
2732
- }
2733
2262
  this.handleTrailingData();
2734
2263
  this.cbs.onend();
2735
2264
  }
2736
2265
  handleTrailingCommentLikeData(endIndex) {
2737
- if (this.state !== State.InCommentLike) {
2266
+ if (this.state !== State.InCommentLike)
2738
2267
  return false;
2739
- }
2740
2268
  if (this.currentSequence === Sequences.CdataEnd) {
2741
2269
  if (this.xmlMode) {
2742
2270
  if (this.sectionStart < endIndex) {
@@ -2759,35 +2287,29 @@ class Tokenizer {
2759
2287
  case State.BeforeComment:
2760
2288
  case State.CDATASequence:
2761
2289
  case State.DeclarationSequence:
2762
- case State.InDeclaration: {
2290
+ case State.InDeclaration:
2763
2291
  this.cbs.ontext(this.sectionStart, endIndex);
2764
2292
  return true;
2765
- }
2766
- default: {
2293
+ default:
2767
2294
  return false;
2768
- }
2769
2295
  }
2770
2296
  }
2771
2297
  switch (this.state) {
2772
2298
  case State.BeforeDeclaration:
2773
2299
  case State.InSpecialComment:
2774
2300
  case State.BeforeComment:
2775
- case State.CDATASequence: {
2301
+ case State.CDATASequence:
2776
2302
  this.cbs.oncomment(this.sectionStart, endIndex, 0);
2777
2303
  return true;
2778
- }
2779
- case State.DeclarationSequence: {
2304
+ case State.DeclarationSequence:
2780
2305
  if (this.sequenceIndex !== Sequences.Doctype.length) {
2781
2306
  this.cbs.oncomment(this.sectionStart, endIndex, 0);
2782
2307
  }
2783
2308
  return true;
2784
- }
2785
- case State.InDeclaration: {
2309
+ case State.InDeclaration:
2786
2310
  return true;
2787
- }
2788
- default: {
2311
+ default:
2789
2312
  return false;
2790
- }
2791
2313
  }
2792
2314
  }
2793
2315
  handleTrailingData() {
@@ -2795,9 +2317,8 @@ class Tokenizer {
2795
2317
  if (this.handleTrailingCommentLikeData(endIndex) || this.handleTrailingMarkupDeclaration(endIndex)) {
2796
2318
  return;
2797
2319
  }
2798
- if (this.sectionStart >= endIndex) {
2320
+ if (this.sectionStart >= endIndex)
2799
2321
  return;
2800
- }
2801
2322
  switch (this.state) {
2802
2323
  case State.InTagName:
2803
2324
  case State.BeforeAttributeName:
@@ -2807,32 +2328,14 @@ class Tokenizer {
2807
2328
  case State.InAttributeValueSq:
2808
2329
  case State.InAttributeValueDq:
2809
2330
  case State.InAttributeValueNq:
2810
- case State.InClosingTagName: {
2331
+ case State.InClosingTagName:
2811
2332
  break;
2812
- }
2813
- default: {
2333
+ default:
2814
2334
  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
2335
  }
2834
2336
  }
2835
2337
  }
2338
+
2836
2339
  // tools/core/htmllinter-tables.js
2837
2340
  var VOID_ELEMENTS = new Set([
2838
2341
  "area",
@@ -3224,8 +2727,9 @@ var TABLE_SCOPE_TAGS = new Set([
3224
2727
  ]);
3225
2728
  var TABLE_BODY_CELL_TAGS = new Set(["td", "th"]);
3226
2729
  function lintHtml(html, onFinding, opts = {}) {
2730
+ const TokenizerClass = opts.TokenizerClass ?? HtmlTokenizer;
3227
2731
  const ctx = new LinterCtx(html, onFinding, opts);
3228
- const tokenizer = new Tokenizer({ xmlMode: false, decodeEntities: false, recognizeSelfClosing: true }, ctx);
2732
+ const tokenizer = new TokenizerClass({ xmlMode: false, decodeEntities: false, recognizeSelfClosing: true }, ctx);
3229
2733
  ctx.tokenizer = tokenizer;
3230
2734
  tokenizer.write(html);
3231
2735
  tokenizer.end();
@@ -11358,10 +10862,11 @@ function check(app) {
11358
10862
  for (const Comp of app.comps.byId.values()) {
11359
10863
  const shadowViews = {};
11360
10864
  for (const name in Comp.views) {
10865
+ const rawView = Comp.views[name].rawView;
11361
10866
  const ctx = new LintParseContext;
11362
- ANode.parse(Comp.views[name].rawView, ctx);
10867
+ ANode.parse(rawView, ctx);
11363
10868
  ctx.compile(Comp.scope);
11364
- shadowViews[name] = { name, ctx };
10869
+ shadowViews[name] = { name, ctx, rawView };
11365
10870
  }
11366
10871
  const shadowComp = Object.create(Comp);
11367
10872
  shadowComp.views = shadowViews;