@wix/editor-react-components 1.2425.0 → 1.2427.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/site/components/BoxContainer/component.js +1 -1
  2. package/dist/site/components/Breadcrumbs/component.js +2 -2
  3. package/dist/site/components/Checkbox/component.js +1 -1
  4. package/dist/site/components/CheckboxGroup/component.js +1 -1
  5. package/dist/site/components/DatePicker/component.js +1 -1
  6. package/dist/site/components/Dropdown/component.js +2 -2
  7. package/dist/site/components/GoogleMap/GoogleMap.types.d.ts +2 -2
  8. package/dist/site/components/GoogleMap/component.js +47 -11
  9. package/dist/site/components/GoogleMap/components/GoogleMapReact.d.ts +1 -1
  10. package/dist/site/components/GoogleMap/components/GoogleMapReactInteractiveMap.d.ts +1 -1
  11. package/dist/site/components/GoogleMap/consts.d.ts +15 -0
  12. package/dist/site/components/GoogleMap/hooks/useGoogleMapProps.d.ts +2 -0
  13. package/dist/site/components/GoogleMap/manifest.js +1 -1
  14. package/dist/site/components/HTMLComponent/component.js +1 -1
  15. package/dist/site/components/HipaaIcon/component.js +2 -2
  16. package/dist/site/components/LegacyAppWidget/component.js +1 -1
  17. package/dist/site/components/LegacyContainer/component.js +1 -1
  18. package/dist/site/components/LegacyMultiStateBox/component.js +1 -1
  19. package/dist/site/components/LinkBar/component.js +1 -1
  20. package/dist/site/components/Lottie/component.js +1 -1
  21. package/dist/site/components/Menu/component.js +3 -3
  22. package/dist/site/components/RadioButtons/component.js +1 -1
  23. package/dist/site/components/ShareButtons/component.js +2 -2
  24. package/dist/site/components/Slideshow/component.js +1 -1
  25. package/dist/site/components/TextBox/component.js +1 -1
  26. package/dist/site/components/TextEffects3d/component.js +1 -1
  27. package/dist/site/components/TextEffectsBauhaus/component.js +1 -1
  28. package/dist/site/components/TextEffectsGlass/component.js +1 -1
  29. package/dist/site/components/TextEffectsGlitch/component.js +1 -1
  30. package/dist/site/components/TextEffectsLetterPress/component.js +1 -1
  31. package/dist/site/components/TextEffectsMatrix/component.js +1 -1
  32. package/dist/site/components/TextEffectsNeonSign/component.js +1 -1
  33. package/dist/site/components/TextEffectsNoisy/component.js +1 -1
  34. package/dist/site/components/TextEffectsOutlineOut/component.js +1 -1
  35. package/dist/site/components/TextEffectsRetro/component.js +1 -1
  36. package/dist/site/components/TextEffectsShook/component.js +1 -1
  37. package/dist/site/components/TextEffectsSticker/component.js +1 -1
  38. package/dist/site/components/TextEffectsStriped/component.js +1 -1
  39. package/dist/site/components/TextInput/component.js +2 -2
  40. package/dist/site/components/TextInput/sdk.js +1 -1
  41. package/dist/site/components/TimePicker/component.js +1 -1
  42. package/dist/site/components/TransparentVideo/component.js +1 -1
  43. package/dist/site/components/chunks/AnimatedIcon.js +1 -1
  44. package/dist/site/components/chunks/consts.js +23 -6
  45. package/dist/site/components/chunks/index10.js +3 -2021
  46. package/dist/site/components/chunks/index3.js +1 -1
  47. package/dist/site/components/chunks/index5.js +3 -2370
  48. package/dist/site/components/chunks/index6.js +3 -3
  49. package/dist/site/components/chunks/index7.js +4 -3
  50. package/dist/site/components/chunks/index8.js +66 -3
  51. package/dist/site/components/chunks/index9.js +31214 -64
  52. package/dist/site/components/chunks/parseHtml.js +2 -4
  53. package/dist/site/components/chunks/parseSvg.js +23 -7
  54. package/dist/site/components/chunks/staticService.js +1 -1
  55. package/dist/site/components/chunks/useConsentPolicyProps.js +1 -1
  56. package/package.json +3 -4
  57. package/dist/site/components/chunks/index11.js +0 -31219
  58. package/dist/site/components/chunks/index12.js +0 -5
@@ -1,2023 +1,5 @@
1
- var _a;
2
- const decodeMap = /* @__PURE__ */ new Map([
3
- [0, 65533],
4
- // C1 Unicode control character reference replacements
5
- [128, 8364],
6
- [130, 8218],
7
- [131, 402],
8
- [132, 8222],
9
- [133, 8230],
10
- [134, 8224],
11
- [135, 8225],
12
- [136, 710],
13
- [137, 8240],
14
- [138, 352],
15
- [139, 8249],
16
- [140, 338],
17
- [142, 381],
18
- [145, 8216],
19
- [146, 8217],
20
- [147, 8220],
21
- [148, 8221],
22
- [149, 8226],
23
- [150, 8211],
24
- [151, 8212],
25
- [152, 732],
26
- [153, 8482],
27
- [154, 353],
28
- [155, 8250],
29
- [156, 339],
30
- [158, 382],
31
- [159, 376]
32
- ]);
33
- const fromCodePoint = (
34
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins
35
- (_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : ((codePoint) => {
36
- let output = "";
37
- if (codePoint > 65535) {
38
- codePoint -= 65536;
39
- output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
40
- codePoint = 56320 | codePoint & 1023;
41
- }
42
- output += String.fromCharCode(codePoint);
43
- return output;
44
- })
45
- );
46
- function replaceCodePoint(codePoint) {
47
- var _a2;
48
- if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
49
- return 65533;
50
- }
51
- return (_a2 = decodeMap.get(codePoint)) !== null && _a2 !== void 0 ? _a2 : codePoint;
52
- }
53
- function decodeBase64(input) {
54
- const binary = (
55
- // eslint-disable-next-line n/no-unsupported-features/node-builtins
56
- typeof atob === "function" ? (
57
- // Browser (and Node >=16)
58
- // eslint-disable-next-line n/no-unsupported-features/node-builtins
59
- atob(input)
60
- ) : (
61
- // Older Node versions (<16)
62
- // eslint-disable-next-line n/no-unsupported-features/node-builtins
63
- typeof Buffer.from === "function" ? (
64
- // eslint-disable-next-line n/no-unsupported-features/node-builtins
65
- Buffer.from(input, "base64").toString("binary")
66
- ) : (
67
- // eslint-disable-next-line unicorn/no-new-buffer, n/no-deprecated-api
68
- new Buffer(input, "base64").toString("binary")
69
- )
70
- )
71
- );
72
- const evenLength = binary.length & -2;
73
- const out = new Uint16Array(evenLength / 2);
74
- for (let index = 0, outIndex = 0; index < evenLength; index += 2) {
75
- const lo = binary.charCodeAt(index);
76
- const hi = binary.charCodeAt(index + 1);
77
- out[outIndex++] = lo | hi << 8;
78
- }
79
- return out;
80
- }
81
- const htmlDecodeTree = /* @__PURE__ */ decodeBase64("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg");
82
- const xmlDecodeTree = /* @__PURE__ */ decodeBase64("AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg");
83
- var BinTrieFlags;
84
- (function(BinTrieFlags2) {
85
- BinTrieFlags2[BinTrieFlags2["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
86
- BinTrieFlags2[BinTrieFlags2["FLAG13"] = 8192] = "FLAG13";
87
- BinTrieFlags2[BinTrieFlags2["BRANCH_LENGTH"] = 8064] = "BRANCH_LENGTH";
88
- BinTrieFlags2[BinTrieFlags2["JUMP_TABLE"] = 127] = "JUMP_TABLE";
89
- })(BinTrieFlags || (BinTrieFlags = {}));
90
- var CharCodes$1;
91
- (function(CharCodes2) {
92
- CharCodes2[CharCodes2["NUM"] = 35] = "NUM";
93
- CharCodes2[CharCodes2["SEMI"] = 59] = "SEMI";
94
- CharCodes2[CharCodes2["EQUALS"] = 61] = "EQUALS";
95
- CharCodes2[CharCodes2["ZERO"] = 48] = "ZERO";
96
- CharCodes2[CharCodes2["NINE"] = 57] = "NINE";
97
- CharCodes2[CharCodes2["LOWER_A"] = 97] = "LOWER_A";
98
- CharCodes2[CharCodes2["LOWER_F"] = 102] = "LOWER_F";
99
- CharCodes2[CharCodes2["LOWER_X"] = 120] = "LOWER_X";
100
- CharCodes2[CharCodes2["LOWER_Z"] = 122] = "LOWER_Z";
101
- CharCodes2[CharCodes2["UPPER_A"] = 65] = "UPPER_A";
102
- CharCodes2[CharCodes2["UPPER_F"] = 70] = "UPPER_F";
103
- CharCodes2[CharCodes2["UPPER_Z"] = 90] = "UPPER_Z";
104
- })(CharCodes$1 || (CharCodes$1 = {}));
105
- const TO_LOWER_BIT = 32;
106
- function isNumber(code) {
107
- return code >= CharCodes$1.ZERO && code <= CharCodes$1.NINE;
108
- }
109
- function isHexadecimalCharacter(code) {
110
- return code >= CharCodes$1.UPPER_A && code <= CharCodes$1.UPPER_F || code >= CharCodes$1.LOWER_A && code <= CharCodes$1.LOWER_F;
111
- }
112
- function isAsciiAlphaNumeric(code) {
113
- return code >= CharCodes$1.UPPER_A && code <= CharCodes$1.UPPER_Z || code >= CharCodes$1.LOWER_A && code <= CharCodes$1.LOWER_Z || isNumber(code);
114
- }
115
- function isEntityInAttributeInvalidEnd(code) {
116
- return code === CharCodes$1.EQUALS || isAsciiAlphaNumeric(code);
117
- }
118
- var EntityDecoderState;
119
- (function(EntityDecoderState2) {
120
- EntityDecoderState2[EntityDecoderState2["EntityStart"] = 0] = "EntityStart";
121
- EntityDecoderState2[EntityDecoderState2["NumericStart"] = 1] = "NumericStart";
122
- EntityDecoderState2[EntityDecoderState2["NumericDecimal"] = 2] = "NumericDecimal";
123
- EntityDecoderState2[EntityDecoderState2["NumericHex"] = 3] = "NumericHex";
124
- EntityDecoderState2[EntityDecoderState2["NamedEntity"] = 4] = "NamedEntity";
125
- })(EntityDecoderState || (EntityDecoderState = {}));
126
- var DecodingMode;
127
- (function(DecodingMode2) {
128
- DecodingMode2[DecodingMode2["Legacy"] = 0] = "Legacy";
129
- DecodingMode2[DecodingMode2["Strict"] = 1] = "Strict";
130
- DecodingMode2[DecodingMode2["Attribute"] = 2] = "Attribute";
131
- })(DecodingMode || (DecodingMode = {}));
132
- class EntityDecoder {
133
- constructor(decodeTree, emitCodePoint, errors) {
134
- this.decodeTree = decodeTree;
135
- this.emitCodePoint = emitCodePoint;
136
- this.errors = errors;
137
- this.state = EntityDecoderState.EntityStart;
138
- this.consumed = 1;
139
- this.result = 0;
140
- this.treeIndex = 0;
141
- this.excess = 1;
142
- this.decodeMode = DecodingMode.Strict;
143
- this.runConsumed = 0;
144
- }
145
- /** Resets the instance to make it reusable. */
146
- startEntity(decodeMode) {
147
- this.decodeMode = decodeMode;
148
- this.state = EntityDecoderState.EntityStart;
149
- this.result = 0;
150
- this.treeIndex = 0;
151
- this.excess = 1;
152
- this.consumed = 1;
153
- this.runConsumed = 0;
154
- }
155
- /**
156
- * Write an entity to the decoder. This can be called multiple times with partial entities.
157
- * If the entity is incomplete, the decoder will return -1.
158
- *
159
- * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
160
- * entity is incomplete, and resume when the next string is written.
161
- *
162
- * @param input The string containing the entity (or a continuation of the entity).
163
- * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
164
- * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
165
- */
166
- write(input, offset) {
167
- switch (this.state) {
168
- case EntityDecoderState.EntityStart: {
169
- if (input.charCodeAt(offset) === CharCodes$1.NUM) {
170
- this.state = EntityDecoderState.NumericStart;
171
- this.consumed += 1;
172
- return this.stateNumericStart(input, offset + 1);
173
- }
174
- this.state = EntityDecoderState.NamedEntity;
175
- return this.stateNamedEntity(input, offset);
176
- }
177
- case EntityDecoderState.NumericStart: {
178
- return this.stateNumericStart(input, offset);
179
- }
180
- case EntityDecoderState.NumericDecimal: {
181
- return this.stateNumericDecimal(input, offset);
182
- }
183
- case EntityDecoderState.NumericHex: {
184
- return this.stateNumericHex(input, offset);
185
- }
186
- case EntityDecoderState.NamedEntity: {
187
- return this.stateNamedEntity(input, offset);
188
- }
189
- }
190
- }
191
- /**
192
- * Switches between the numeric decimal and hexadecimal states.
193
- *
194
- * Equivalent to the `Numeric character reference state` in the HTML spec.
195
- *
196
- * @param input The string containing the entity (or a continuation of the entity).
197
- * @param offset The current offset.
198
- * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
199
- */
200
- stateNumericStart(input, offset) {
201
- if (offset >= input.length) {
202
- return -1;
203
- }
204
- if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes$1.LOWER_X) {
205
- this.state = EntityDecoderState.NumericHex;
206
- this.consumed += 1;
207
- return this.stateNumericHex(input, offset + 1);
208
- }
209
- this.state = EntityDecoderState.NumericDecimal;
210
- return this.stateNumericDecimal(input, offset);
211
- }
212
- /**
213
- * Parses a hexadecimal numeric entity.
214
- *
215
- * Equivalent to the `Hexademical character reference state` in the HTML spec.
216
- *
217
- * @param input The string containing the entity (or a continuation of the entity).
218
- * @param offset The current offset.
219
- * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
220
- */
221
- stateNumericHex(input, offset) {
222
- while (offset < input.length) {
223
- const char = input.charCodeAt(offset);
224
- if (isNumber(char) || isHexadecimalCharacter(char)) {
225
- const digit = char <= CharCodes$1.NINE ? char - CharCodes$1.ZERO : (char | TO_LOWER_BIT) - CharCodes$1.LOWER_A + 10;
226
- this.result = this.result * 16 + digit;
227
- this.consumed++;
228
- offset++;
229
- } else {
230
- return this.emitNumericEntity(char, 3);
231
- }
232
- }
233
- return -1;
234
- }
235
- /**
236
- * Parses a decimal numeric entity.
237
- *
238
- * Equivalent to the `Decimal character reference state` in the HTML spec.
239
- *
240
- * @param input The string containing the entity (or a continuation of the entity).
241
- * @param offset The current offset.
242
- * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
243
- */
244
- stateNumericDecimal(input, offset) {
245
- while (offset < input.length) {
246
- const char = input.charCodeAt(offset);
247
- if (isNumber(char)) {
248
- this.result = this.result * 10 + (char - CharCodes$1.ZERO);
249
- this.consumed++;
250
- offset++;
251
- } else {
252
- return this.emitNumericEntity(char, 2);
253
- }
254
- }
255
- return -1;
256
- }
257
- /**
258
- * Validate and emit a numeric entity.
259
- *
260
- * Implements the logic from the `Hexademical character reference start
261
- * state` and `Numeric character reference end state` in the HTML spec.
262
- *
263
- * @param lastCp The last code point of the entity. Used to see if the
264
- * entity was terminated with a semicolon.
265
- * @param expectedLength The minimum number of characters that should be
266
- * consumed. Used to validate that at least one digit
267
- * was consumed.
268
- * @returns The number of characters that were consumed.
269
- */
270
- emitNumericEntity(lastCp, expectedLength) {
271
- var _a2;
272
- if (this.consumed <= expectedLength) {
273
- (_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.absenceOfDigitsInNumericCharacterReference(this.consumed);
274
- return 0;
275
- }
276
- if (lastCp === CharCodes$1.SEMI) {
277
- this.consumed += 1;
278
- } else if (this.decodeMode === DecodingMode.Strict) {
279
- return 0;
280
- }
281
- this.emitCodePoint(replaceCodePoint(this.result), this.consumed);
282
- if (this.errors) {
283
- if (lastCp !== CharCodes$1.SEMI) {
284
- this.errors.missingSemicolonAfterCharacterReference();
285
- }
286
- this.errors.validateNumericCharacterReference(this.result);
287
- }
288
- return this.consumed;
289
- }
290
- /**
291
- * Parses a named entity.
292
- *
293
- * Equivalent to the `Named character reference state` in the HTML spec.
294
- *
295
- * @param input The string containing the entity (or a continuation of the entity).
296
- * @param offset The current offset.
297
- * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
298
- */
299
- stateNamedEntity(input, offset) {
300
- const { decodeTree } = this;
301
- let current = decodeTree[this.treeIndex];
302
- let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
303
- while (offset < input.length) {
304
- if (valueLength === 0 && (current & BinTrieFlags.FLAG13) !== 0) {
305
- const runLength = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
306
- if (this.runConsumed === 0) {
307
- const firstChar = current & BinTrieFlags.JUMP_TABLE;
308
- if (input.charCodeAt(offset) !== firstChar) {
309
- return this.result === 0 ? 0 : this.emitNotTerminatedNamedEntity();
310
- }
311
- offset++;
312
- this.excess++;
313
- this.runConsumed++;
314
- }
315
- while (this.runConsumed < runLength) {
316
- if (offset >= input.length) {
317
- return -1;
318
- }
319
- const charIndexInPacked = this.runConsumed - 1;
320
- const packedWord = decodeTree[this.treeIndex + 1 + (charIndexInPacked >> 1)];
321
- const expectedChar = charIndexInPacked % 2 === 0 ? packedWord & 255 : packedWord >> 8 & 255;
322
- if (input.charCodeAt(offset) !== expectedChar) {
323
- this.runConsumed = 0;
324
- return this.result === 0 ? 0 : this.emitNotTerminatedNamedEntity();
325
- }
326
- offset++;
327
- this.excess++;
328
- this.runConsumed++;
329
- }
330
- this.runConsumed = 0;
331
- this.treeIndex += 1 + (runLength >> 1);
332
- current = decodeTree[this.treeIndex];
333
- valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
334
- }
335
- if (offset >= input.length)
336
- break;
337
- const char = input.charCodeAt(offset);
338
- if (char === CharCodes$1.SEMI && valueLength !== 0 && (current & BinTrieFlags.FLAG13) !== 0) {
339
- return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
340
- }
341
- this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
342
- if (this.treeIndex < 0) {
343
- return this.result === 0 || // If we are parsing an attribute
344
- this.decodeMode === DecodingMode.Attribute && // We shouldn't have consumed any characters after the entity,
345
- (valueLength === 0 || // And there should be no invalid characters.
346
- isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity();
347
- }
348
- current = decodeTree[this.treeIndex];
349
- valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
350
- if (valueLength !== 0) {
351
- if (char === CharCodes$1.SEMI) {
352
- return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
353
- }
354
- if (this.decodeMode !== DecodingMode.Strict && (current & BinTrieFlags.FLAG13) === 0) {
355
- this.result = this.treeIndex;
356
- this.consumed += this.excess;
357
- this.excess = 0;
358
- }
359
- }
360
- offset++;
361
- this.excess++;
362
- }
363
- return -1;
364
- }
365
- /**
366
- * Emit a named entity that was not terminated with a semicolon.
367
- *
368
- * @returns The number of characters consumed.
369
- */
370
- emitNotTerminatedNamedEntity() {
371
- var _a2;
372
- const { result, decodeTree } = this;
373
- const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
374
- this.emitNamedEntityData(result, valueLength, this.consumed);
375
- (_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.missingSemicolonAfterCharacterReference();
376
- return this.consumed;
377
- }
378
- /**
379
- * Emit a named entity.
380
- *
381
- * @param result The index of the entity in the decode tree.
382
- * @param valueLength The number of bytes in the entity.
383
- * @param consumed The number of characters consumed.
384
- *
385
- * @returns The number of characters consumed.
386
- */
387
- emitNamedEntityData(result, valueLength, consumed) {
388
- const { decodeTree } = this;
389
- this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~(BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13) : decodeTree[result + 1], consumed);
390
- if (valueLength === 3) {
391
- this.emitCodePoint(decodeTree[result + 2], consumed);
392
- }
393
- return consumed;
394
- }
395
- /**
396
- * Signal to the parser that the end of the input was reached.
397
- *
398
- * Remaining data will be emitted and relevant errors will be produced.
399
- *
400
- * @returns The number of characters consumed.
401
- */
402
- end() {
403
- var _a2;
404
- switch (this.state) {
405
- case EntityDecoderState.NamedEntity: {
406
- return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
407
- }
408
- // Otherwise, emit a numeric entity if we have one.
409
- case EntityDecoderState.NumericDecimal: {
410
- return this.emitNumericEntity(0, 2);
411
- }
412
- case EntityDecoderState.NumericHex: {
413
- return this.emitNumericEntity(0, 3);
414
- }
415
- case EntityDecoderState.NumericStart: {
416
- (_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.absenceOfDigitsInNumericCharacterReference(this.consumed);
417
- return 0;
418
- }
419
- case EntityDecoderState.EntityStart: {
420
- return 0;
421
- }
422
- }
423
- }
424
- }
425
- function determineBranch(decodeTree, current, nodeIndex, char) {
426
- const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
427
- const jumpOffset = current & BinTrieFlags.JUMP_TABLE;
428
- if (branchCount === 0) {
429
- return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;
430
- }
431
- if (jumpOffset) {
432
- const value = char - jumpOffset;
433
- return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIndex + value] - 1;
434
- }
435
- const packedKeySlots = branchCount + 1 >> 1;
436
- let lo = 0;
437
- let hi = branchCount - 1;
438
- while (lo <= hi) {
439
- const mid = lo + hi >>> 1;
440
- const slot = mid >> 1;
441
- const packed = decodeTree[nodeIndex + slot];
442
- const midKey = packed >> (mid & 1) * 8 & 255;
443
- if (midKey < char) {
444
- lo = mid + 1;
445
- } else if (midKey > char) {
446
- hi = mid - 1;
447
- } else {
448
- return decodeTree[nodeIndex + packedKeySlots + mid];
449
- }
450
- }
451
- return -1;
452
- }
453
- var CharCodes;
454
- (function(CharCodes2) {
455
- CharCodes2[CharCodes2["Tab"] = 9] = "Tab";
456
- CharCodes2[CharCodes2["NewLine"] = 10] = "NewLine";
457
- CharCodes2[CharCodes2["FormFeed"] = 12] = "FormFeed";
458
- CharCodes2[CharCodes2["CarriageReturn"] = 13] = "CarriageReturn";
459
- CharCodes2[CharCodes2["Space"] = 32] = "Space";
460
- CharCodes2[CharCodes2["ExclamationMark"] = 33] = "ExclamationMark";
461
- CharCodes2[CharCodes2["Number"] = 35] = "Number";
462
- CharCodes2[CharCodes2["Amp"] = 38] = "Amp";
463
- CharCodes2[CharCodes2["SingleQuote"] = 39] = "SingleQuote";
464
- CharCodes2[CharCodes2["DoubleQuote"] = 34] = "DoubleQuote";
465
- CharCodes2[CharCodes2["Dash"] = 45] = "Dash";
466
- CharCodes2[CharCodes2["Slash"] = 47] = "Slash";
467
- CharCodes2[CharCodes2["Zero"] = 48] = "Zero";
468
- CharCodes2[CharCodes2["Nine"] = 57] = "Nine";
469
- CharCodes2[CharCodes2["Semi"] = 59] = "Semi";
470
- CharCodes2[CharCodes2["Lt"] = 60] = "Lt";
471
- CharCodes2[CharCodes2["Eq"] = 61] = "Eq";
472
- CharCodes2[CharCodes2["Gt"] = 62] = "Gt";
473
- CharCodes2[CharCodes2["Questionmark"] = 63] = "Questionmark";
474
- CharCodes2[CharCodes2["UpperA"] = 65] = "UpperA";
475
- CharCodes2[CharCodes2["LowerA"] = 97] = "LowerA";
476
- CharCodes2[CharCodes2["UpperF"] = 70] = "UpperF";
477
- CharCodes2[CharCodes2["LowerF"] = 102] = "LowerF";
478
- CharCodes2[CharCodes2["UpperZ"] = 90] = "UpperZ";
479
- CharCodes2[CharCodes2["LowerZ"] = 122] = "LowerZ";
480
- CharCodes2[CharCodes2["LowerX"] = 120] = "LowerX";
481
- CharCodes2[CharCodes2["OpeningSquareBracket"] = 91] = "OpeningSquareBracket";
482
- })(CharCodes || (CharCodes = {}));
483
- var State;
484
- (function(State2) {
485
- State2[State2["Text"] = 1] = "Text";
486
- State2[State2["BeforeTagName"] = 2] = "BeforeTagName";
487
- State2[State2["InTagName"] = 3] = "InTagName";
488
- State2[State2["InSelfClosingTag"] = 4] = "InSelfClosingTag";
489
- State2[State2["BeforeClosingTagName"] = 5] = "BeforeClosingTagName";
490
- State2[State2["InClosingTagName"] = 6] = "InClosingTagName";
491
- State2[State2["AfterClosingTagName"] = 7] = "AfterClosingTagName";
492
- State2[State2["BeforeAttributeName"] = 8] = "BeforeAttributeName";
493
- State2[State2["InAttributeName"] = 9] = "InAttributeName";
494
- State2[State2["AfterAttributeName"] = 10] = "AfterAttributeName";
495
- State2[State2["BeforeAttributeValue"] = 11] = "BeforeAttributeValue";
496
- State2[State2["InAttributeValueDq"] = 12] = "InAttributeValueDq";
497
- State2[State2["InAttributeValueSq"] = 13] = "InAttributeValueSq";
498
- State2[State2["InAttributeValueNq"] = 14] = "InAttributeValueNq";
499
- State2[State2["BeforeDeclaration"] = 15] = "BeforeDeclaration";
500
- State2[State2["InDeclaration"] = 16] = "InDeclaration";
501
- State2[State2["InProcessingInstruction"] = 17] = "InProcessingInstruction";
502
- State2[State2["BeforeComment"] = 18] = "BeforeComment";
503
- State2[State2["CDATASequence"] = 19] = "CDATASequence";
504
- State2[State2["InSpecialComment"] = 20] = "InSpecialComment";
505
- State2[State2["InCommentLike"] = 21] = "InCommentLike";
506
- State2[State2["BeforeSpecialS"] = 22] = "BeforeSpecialS";
507
- State2[State2["BeforeSpecialT"] = 23] = "BeforeSpecialT";
508
- State2[State2["SpecialStartSequence"] = 24] = "SpecialStartSequence";
509
- State2[State2["InSpecialTag"] = 25] = "InSpecialTag";
510
- State2[State2["InEntity"] = 26] = "InEntity";
511
- })(State || (State = {}));
512
- function isWhitespace(c) {
513
- return c === CharCodes.Space || c === CharCodes.NewLine || c === CharCodes.Tab || c === CharCodes.FormFeed || c === CharCodes.CarriageReturn;
514
- }
515
- function isEndOfTagSection(c) {
516
- return c === CharCodes.Slash || c === CharCodes.Gt || isWhitespace(c);
517
- }
518
- function isASCIIAlpha(c) {
519
- return c >= CharCodes.LowerA && c <= CharCodes.LowerZ || c >= CharCodes.UpperA && c <= CharCodes.UpperZ;
520
- }
521
- var QuoteType;
522
- (function(QuoteType2) {
523
- QuoteType2[QuoteType2["NoValue"] = 0] = "NoValue";
524
- QuoteType2[QuoteType2["Unquoted"] = 1] = "Unquoted";
525
- QuoteType2[QuoteType2["Single"] = 2] = "Single";
526
- QuoteType2[QuoteType2["Double"] = 3] = "Double";
527
- })(QuoteType || (QuoteType = {}));
528
- const Sequences = {
529
- Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),
530
- // CDATA[
531
- CdataEnd: new Uint8Array([93, 93, 62]),
532
- // ]]>
533
- CommentEnd: new Uint8Array([45, 45, 62]),
534
- // `-->`
535
- ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),
536
- // `<\/script`
537
- StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),
538
- // `</style`
539
- TitleEnd: new Uint8Array([60, 47, 116, 105, 116, 108, 101]),
540
- // `</title`
541
- TextareaEnd: new Uint8Array([
542
- 60,
543
- 47,
544
- 116,
545
- 101,
546
- 120,
547
- 116,
548
- 97,
549
- 114,
550
- 101,
551
- 97
552
- ]),
553
- // `</textarea`
554
- XmpEnd: new Uint8Array([60, 47, 120, 109, 112])
555
- // `</xmp`
556
- };
557
- class Tokenizer {
558
- constructor({ xmlMode = false, decodeEntities = true }, cbs) {
559
- this.cbs = cbs;
560
- this.state = State.Text;
561
- this.buffer = "";
562
- this.sectionStart = 0;
563
- this.index = 0;
564
- this.entityStart = 0;
565
- this.baseState = State.Text;
566
- this.isSpecial = false;
567
- this.running = true;
568
- this.offset = 0;
569
- this.currentSequence = void 0;
570
- this.sequenceIndex = 0;
571
- this.xmlMode = xmlMode;
572
- this.decodeEntities = decodeEntities;
573
- this.entityDecoder = new EntityDecoder(xmlMode ? xmlDecodeTree : htmlDecodeTree, (cp, consumed) => this.emitCodePoint(cp, consumed));
574
- }
575
- reset() {
576
- this.state = State.Text;
577
- this.buffer = "";
578
- this.sectionStart = 0;
579
- this.index = 0;
580
- this.baseState = State.Text;
581
- this.currentSequence = void 0;
582
- this.running = true;
583
- this.offset = 0;
584
- }
585
- write(chunk) {
586
- this.offset += this.buffer.length;
587
- this.buffer = chunk;
588
- this.parse();
589
- }
590
- end() {
591
- if (this.running)
592
- this.finish();
593
- }
594
- pause() {
595
- this.running = false;
596
- }
597
- resume() {
598
- this.running = true;
599
- if (this.index < this.buffer.length + this.offset) {
600
- this.parse();
601
- }
602
- }
603
- stateText(c) {
604
- if (c === CharCodes.Lt || !this.decodeEntities && this.fastForwardTo(CharCodes.Lt)) {
605
- if (this.index > this.sectionStart) {
606
- this.cbs.ontext(this.sectionStart, this.index);
607
- }
608
- this.state = State.BeforeTagName;
609
- this.sectionStart = this.index;
610
- } else if (this.decodeEntities && c === CharCodes.Amp) {
611
- this.startEntity();
612
- }
613
- }
614
- stateSpecialStartSequence(c) {
615
- const isEnd = this.sequenceIndex === this.currentSequence.length;
616
- const isMatch = isEnd ? (
617
- // If we are at the end of the sequence, make sure the tag name has ended
618
- isEndOfTagSection(c)
619
- ) : (
620
- // Otherwise, do a case-insensitive comparison
621
- (c | 32) === this.currentSequence[this.sequenceIndex]
622
- );
623
- if (!isMatch) {
624
- this.isSpecial = false;
625
- } else if (!isEnd) {
626
- this.sequenceIndex++;
627
- return;
628
- }
629
- this.sequenceIndex = 0;
630
- this.state = State.InTagName;
631
- this.stateInTagName(c);
632
- }
633
- /** Look for an end tag. For <title> tags, also decode entities. */
634
- stateInSpecialTag(c) {
635
- if (this.sequenceIndex === this.currentSequence.length) {
636
- if (c === CharCodes.Gt || isWhitespace(c)) {
637
- const endOfText = this.index - this.currentSequence.length;
638
- if (this.sectionStart < endOfText) {
639
- const actualIndex = this.index;
640
- this.index = endOfText;
641
- this.cbs.ontext(this.sectionStart, endOfText);
642
- this.index = actualIndex;
643
- }
644
- this.isSpecial = false;
645
- this.sectionStart = endOfText + 2;
646
- this.stateInClosingTagName(c);
647
- return;
648
- }
649
- this.sequenceIndex = 0;
650
- }
651
- if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
652
- this.sequenceIndex += 1;
653
- } else if (this.sequenceIndex === 0) {
654
- if (this.currentSequence === Sequences.TitleEnd) {
655
- if (this.decodeEntities && c === CharCodes.Amp) {
656
- this.startEntity();
657
- }
658
- } else if (this.fastForwardTo(CharCodes.Lt)) {
659
- this.sequenceIndex = 1;
660
- }
661
- } else {
662
- this.sequenceIndex = Number(c === CharCodes.Lt);
663
- }
664
- }
665
- stateCDATASequence(c) {
666
- if (c === Sequences.Cdata[this.sequenceIndex]) {
667
- if (++this.sequenceIndex === Sequences.Cdata.length) {
668
- this.state = State.InCommentLike;
669
- this.currentSequence = Sequences.CdataEnd;
670
- this.sequenceIndex = 0;
671
- this.sectionStart = this.index + 1;
672
- }
673
- } else {
674
- this.sequenceIndex = 0;
675
- this.state = State.InDeclaration;
676
- this.stateInDeclaration(c);
677
- }
678
- }
679
- /**
680
- * When we wait for one specific character, we can speed things up
681
- * by skipping through the buffer until we find it.
682
- *
683
- * @returns Whether the character was found.
684
- */
685
- fastForwardTo(c) {
686
- while (++this.index < this.buffer.length + this.offset) {
687
- if (this.buffer.charCodeAt(this.index - this.offset) === c) {
688
- return true;
689
- }
690
- }
691
- this.index = this.buffer.length + this.offset - 1;
692
- return false;
693
- }
694
- /**
695
- * Comments and CDATA end with `-->` and `]]>`.
696
- *
697
- * Their common qualities are:
698
- * - Their end sequences have a distinct character they start with.
699
- * - That character is then repeated, so we have to check multiple repeats.
700
- * - All characters but the start character of the sequence can be skipped.
701
- */
702
- stateInCommentLike(c) {
703
- if (c === this.currentSequence[this.sequenceIndex]) {
704
- if (++this.sequenceIndex === this.currentSequence.length) {
705
- if (this.currentSequence === Sequences.CdataEnd) {
706
- this.cbs.oncdata(this.sectionStart, this.index, 2);
707
- } else {
708
- this.cbs.oncomment(this.sectionStart, this.index, 2);
709
- }
710
- this.sequenceIndex = 0;
711
- this.sectionStart = this.index + 1;
712
- this.state = State.Text;
713
- }
714
- } else if (this.sequenceIndex === 0) {
715
- if (this.fastForwardTo(this.currentSequence[0])) {
716
- this.sequenceIndex = 1;
717
- }
718
- } else if (c !== this.currentSequence[this.sequenceIndex - 1]) {
719
- this.sequenceIndex = 0;
720
- }
721
- }
722
- /**
723
- * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name.
724
- *
725
- * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).
726
- * We allow anything that wouldn't end the tag.
727
- */
728
- isTagStartChar(c) {
729
- return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);
730
- }
731
- startSpecial(sequence, offset) {
732
- this.isSpecial = true;
733
- this.currentSequence = sequence;
734
- this.sequenceIndex = offset;
735
- this.state = State.SpecialStartSequence;
736
- }
737
- stateBeforeTagName(c) {
738
- if (c === CharCodes.ExclamationMark) {
739
- this.state = State.BeforeDeclaration;
740
- this.sectionStart = this.index + 1;
741
- } else if (c === CharCodes.Questionmark) {
742
- this.state = State.InProcessingInstruction;
743
- this.sectionStart = this.index + 1;
744
- } else if (this.isTagStartChar(c)) {
745
- const lower = c | 32;
746
- this.sectionStart = this.index;
747
- if (this.xmlMode) {
748
- this.state = State.InTagName;
749
- } else if (lower === Sequences.ScriptEnd[2]) {
750
- this.state = State.BeforeSpecialS;
751
- } else if (lower === Sequences.TitleEnd[2] || lower === Sequences.XmpEnd[2]) {
752
- this.state = State.BeforeSpecialT;
753
- } else {
754
- this.state = State.InTagName;
755
- }
756
- } else if (c === CharCodes.Slash) {
757
- this.state = State.BeforeClosingTagName;
758
- } else {
759
- this.state = State.Text;
760
- this.stateText(c);
761
- }
762
- }
763
- stateInTagName(c) {
764
- if (isEndOfTagSection(c)) {
765
- this.cbs.onopentagname(this.sectionStart, this.index);
766
- this.sectionStart = -1;
767
- this.state = State.BeforeAttributeName;
768
- this.stateBeforeAttributeName(c);
769
- }
770
- }
771
- stateBeforeClosingTagName(c) {
772
- if (isWhitespace(c)) ;
773
- else if (c === CharCodes.Gt) {
774
- this.state = State.Text;
775
- } else {
776
- this.state = this.isTagStartChar(c) ? State.InClosingTagName : State.InSpecialComment;
777
- this.sectionStart = this.index;
778
- }
779
- }
780
- stateInClosingTagName(c) {
781
- if (c === CharCodes.Gt || isWhitespace(c)) {
782
- this.cbs.onclosetag(this.sectionStart, this.index);
783
- this.sectionStart = -1;
784
- this.state = State.AfterClosingTagName;
785
- this.stateAfterClosingTagName(c);
786
- }
787
- }
788
- stateAfterClosingTagName(c) {
789
- if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
790
- this.state = State.Text;
791
- this.sectionStart = this.index + 1;
792
- }
793
- }
794
- stateBeforeAttributeName(c) {
795
- if (c === CharCodes.Gt) {
796
- this.cbs.onopentagend(this.index);
797
- if (this.isSpecial) {
798
- this.state = State.InSpecialTag;
799
- this.sequenceIndex = 0;
800
- } else {
801
- this.state = State.Text;
802
- }
803
- this.sectionStart = this.index + 1;
804
- } else if (c === CharCodes.Slash) {
805
- this.state = State.InSelfClosingTag;
806
- } else if (!isWhitespace(c)) {
807
- this.state = State.InAttributeName;
808
- this.sectionStart = this.index;
809
- }
810
- }
811
- stateInSelfClosingTag(c) {
812
- if (c === CharCodes.Gt) {
813
- this.cbs.onselfclosingtag(this.index);
814
- this.state = State.Text;
815
- this.sectionStart = this.index + 1;
816
- this.isSpecial = false;
817
- } else if (!isWhitespace(c)) {
818
- this.state = State.BeforeAttributeName;
819
- this.stateBeforeAttributeName(c);
820
- }
821
- }
822
- stateInAttributeName(c) {
823
- if (c === CharCodes.Eq || isEndOfTagSection(c)) {
824
- this.cbs.onattribname(this.sectionStart, this.index);
825
- this.sectionStart = this.index;
826
- this.state = State.AfterAttributeName;
827
- this.stateAfterAttributeName(c);
828
- }
829
- }
830
- stateAfterAttributeName(c) {
831
- if (c === CharCodes.Eq) {
832
- this.state = State.BeforeAttributeValue;
833
- } else if (c === CharCodes.Slash || c === CharCodes.Gt) {
834
- this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
835
- this.sectionStart = -1;
836
- this.state = State.BeforeAttributeName;
837
- this.stateBeforeAttributeName(c);
838
- } else if (!isWhitespace(c)) {
839
- this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
840
- this.state = State.InAttributeName;
841
- this.sectionStart = this.index;
842
- }
843
- }
844
- stateBeforeAttributeValue(c) {
845
- if (c === CharCodes.DoubleQuote) {
846
- this.state = State.InAttributeValueDq;
847
- this.sectionStart = this.index + 1;
848
- } else if (c === CharCodes.SingleQuote) {
849
- this.state = State.InAttributeValueSq;
850
- this.sectionStart = this.index + 1;
851
- } else if (!isWhitespace(c)) {
852
- this.sectionStart = this.index;
853
- this.state = State.InAttributeValueNq;
854
- this.stateInAttributeValueNoQuotes(c);
855
- }
856
- }
857
- handleInAttributeValue(c, quote) {
858
- if (c === quote || !this.decodeEntities && this.fastForwardTo(quote)) {
859
- this.cbs.onattribdata(this.sectionStart, this.index);
860
- this.sectionStart = -1;
861
- this.cbs.onattribend(quote === CharCodes.DoubleQuote ? QuoteType.Double : QuoteType.Single, this.index + 1);
862
- this.state = State.BeforeAttributeName;
863
- } else if (this.decodeEntities && c === CharCodes.Amp) {
864
- this.startEntity();
865
- }
866
- }
867
- stateInAttributeValueDoubleQuotes(c) {
868
- this.handleInAttributeValue(c, CharCodes.DoubleQuote);
869
- }
870
- stateInAttributeValueSingleQuotes(c) {
871
- this.handleInAttributeValue(c, CharCodes.SingleQuote);
872
- }
873
- stateInAttributeValueNoQuotes(c) {
874
- if (isWhitespace(c) || c === CharCodes.Gt) {
875
- this.cbs.onattribdata(this.sectionStart, this.index);
876
- this.sectionStart = -1;
877
- this.cbs.onattribend(QuoteType.Unquoted, this.index);
878
- this.state = State.BeforeAttributeName;
879
- this.stateBeforeAttributeName(c);
880
- } else if (this.decodeEntities && c === CharCodes.Amp) {
881
- this.startEntity();
882
- }
883
- }
884
- stateBeforeDeclaration(c) {
885
- if (c === CharCodes.OpeningSquareBracket) {
886
- this.state = State.CDATASequence;
887
- this.sequenceIndex = 0;
888
- } else {
889
- this.state = c === CharCodes.Dash ? State.BeforeComment : State.InDeclaration;
890
- }
891
- }
892
- stateInDeclaration(c) {
893
- if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
894
- this.cbs.ondeclaration(this.sectionStart, this.index);
895
- this.state = State.Text;
896
- this.sectionStart = this.index + 1;
897
- }
898
- }
899
- stateInProcessingInstruction(c) {
900
- if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
901
- this.cbs.onprocessinginstruction(this.sectionStart, this.index);
902
- this.state = State.Text;
903
- this.sectionStart = this.index + 1;
904
- }
905
- }
906
- stateBeforeComment(c) {
907
- if (c === CharCodes.Dash) {
908
- this.state = State.InCommentLike;
909
- this.currentSequence = Sequences.CommentEnd;
910
- this.sequenceIndex = 2;
911
- this.sectionStart = this.index + 1;
912
- } else {
913
- this.state = State.InDeclaration;
914
- }
915
- }
916
- stateInSpecialComment(c) {
917
- if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
918
- this.cbs.oncomment(this.sectionStart, this.index, 0);
919
- this.state = State.Text;
920
- this.sectionStart = this.index + 1;
921
- }
922
- }
923
- stateBeforeSpecialS(c) {
924
- const lower = c | 32;
925
- if (lower === Sequences.ScriptEnd[3]) {
926
- this.startSpecial(Sequences.ScriptEnd, 4);
927
- } else if (lower === Sequences.StyleEnd[3]) {
928
- this.startSpecial(Sequences.StyleEnd, 4);
929
- } else {
930
- this.state = State.InTagName;
931
- this.stateInTagName(c);
932
- }
933
- }
934
- stateBeforeSpecialT(c) {
935
- const lower = c | 32;
936
- switch (lower) {
937
- case Sequences.TitleEnd[3]: {
938
- this.startSpecial(Sequences.TitleEnd, 4);
939
- break;
940
- }
941
- case Sequences.TextareaEnd[3]: {
942
- this.startSpecial(Sequences.TextareaEnd, 4);
943
- break;
944
- }
945
- case Sequences.XmpEnd[3]: {
946
- this.startSpecial(Sequences.XmpEnd, 4);
947
- break;
948
- }
949
- default: {
950
- this.state = State.InTagName;
951
- this.stateInTagName(c);
952
- }
953
- }
954
- }
955
- startEntity() {
956
- this.baseState = this.state;
957
- this.state = State.InEntity;
958
- this.entityStart = this.index;
959
- this.entityDecoder.startEntity(this.xmlMode ? DecodingMode.Strict : this.baseState === State.Text || this.baseState === State.InSpecialTag ? DecodingMode.Legacy : DecodingMode.Attribute);
960
- }
961
- stateInEntity() {
962
- const indexInBuffer = this.index - this.offset;
963
- const length = this.entityDecoder.write(this.buffer, indexInBuffer);
964
- if (length >= 0) {
965
- this.state = this.baseState;
966
- if (length === 0) {
967
- this.index -= 1;
968
- }
969
- } else {
970
- if (indexInBuffer < this.buffer.length && this.buffer.charCodeAt(indexInBuffer) === CharCodes.Amp) {
971
- this.state = this.baseState;
972
- this.index -= 1;
973
- return;
974
- }
975
- this.index = this.offset + this.buffer.length - 1;
976
- }
977
- }
978
- /**
979
- * Remove data that has already been consumed from the buffer.
980
- */
981
- cleanup() {
982
- if (this.running && this.sectionStart !== this.index) {
983
- if (this.state === State.Text || this.state === State.InSpecialTag && this.sequenceIndex === 0) {
984
- this.cbs.ontext(this.sectionStart, this.index);
985
- this.sectionStart = this.index;
986
- } else if (this.state === State.InAttributeValueDq || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueNq) {
987
- this.cbs.onattribdata(this.sectionStart, this.index);
988
- this.sectionStart = this.index;
989
- }
990
- }
991
- }
992
- shouldContinue() {
993
- return this.index < this.buffer.length + this.offset && this.running;
994
- }
995
- /**
996
- * Iterates through the buffer, calling the function corresponding to the current state.
997
- *
998
- * States that are more likely to be hit are higher up, as a performance improvement.
999
- */
1000
- parse() {
1001
- while (this.shouldContinue()) {
1002
- const c = this.buffer.charCodeAt(this.index - this.offset);
1003
- switch (this.state) {
1004
- case State.Text: {
1005
- this.stateText(c);
1006
- break;
1007
- }
1008
- case State.SpecialStartSequence: {
1009
- this.stateSpecialStartSequence(c);
1010
- break;
1011
- }
1012
- case State.InSpecialTag: {
1013
- this.stateInSpecialTag(c);
1014
- break;
1015
- }
1016
- case State.CDATASequence: {
1017
- this.stateCDATASequence(c);
1018
- break;
1019
- }
1020
- case State.InAttributeValueDq: {
1021
- this.stateInAttributeValueDoubleQuotes(c);
1022
- break;
1023
- }
1024
- case State.InAttributeName: {
1025
- this.stateInAttributeName(c);
1026
- break;
1027
- }
1028
- case State.InCommentLike: {
1029
- this.stateInCommentLike(c);
1030
- break;
1031
- }
1032
- case State.InSpecialComment: {
1033
- this.stateInSpecialComment(c);
1034
- break;
1035
- }
1036
- case State.BeforeAttributeName: {
1037
- this.stateBeforeAttributeName(c);
1038
- break;
1039
- }
1040
- case State.InTagName: {
1041
- this.stateInTagName(c);
1042
- break;
1043
- }
1044
- case State.InClosingTagName: {
1045
- this.stateInClosingTagName(c);
1046
- break;
1047
- }
1048
- case State.BeforeTagName: {
1049
- this.stateBeforeTagName(c);
1050
- break;
1051
- }
1052
- case State.AfterAttributeName: {
1053
- this.stateAfterAttributeName(c);
1054
- break;
1055
- }
1056
- case State.InAttributeValueSq: {
1057
- this.stateInAttributeValueSingleQuotes(c);
1058
- break;
1059
- }
1060
- case State.BeforeAttributeValue: {
1061
- this.stateBeforeAttributeValue(c);
1062
- break;
1063
- }
1064
- case State.BeforeClosingTagName: {
1065
- this.stateBeforeClosingTagName(c);
1066
- break;
1067
- }
1068
- case State.AfterClosingTagName: {
1069
- this.stateAfterClosingTagName(c);
1070
- break;
1071
- }
1072
- case State.BeforeSpecialS: {
1073
- this.stateBeforeSpecialS(c);
1074
- break;
1075
- }
1076
- case State.BeforeSpecialT: {
1077
- this.stateBeforeSpecialT(c);
1078
- break;
1079
- }
1080
- case State.InAttributeValueNq: {
1081
- this.stateInAttributeValueNoQuotes(c);
1082
- break;
1083
- }
1084
- case State.InSelfClosingTag: {
1085
- this.stateInSelfClosingTag(c);
1086
- break;
1087
- }
1088
- case State.InDeclaration: {
1089
- this.stateInDeclaration(c);
1090
- break;
1091
- }
1092
- case State.BeforeDeclaration: {
1093
- this.stateBeforeDeclaration(c);
1094
- break;
1095
- }
1096
- case State.BeforeComment: {
1097
- this.stateBeforeComment(c);
1098
- break;
1099
- }
1100
- case State.InProcessingInstruction: {
1101
- this.stateInProcessingInstruction(c);
1102
- break;
1103
- }
1104
- case State.InEntity: {
1105
- this.stateInEntity();
1106
- break;
1107
- }
1108
- }
1109
- this.index++;
1110
- }
1111
- this.cleanup();
1112
- }
1113
- finish() {
1114
- if (this.state === State.InEntity) {
1115
- this.entityDecoder.end();
1116
- this.state = this.baseState;
1117
- }
1118
- this.handleTrailingData();
1119
- this.cbs.onend();
1120
- }
1121
- /** Handle any trailing data. */
1122
- handleTrailingData() {
1123
- const endIndex = this.buffer.length + this.offset;
1124
- if (this.sectionStart >= endIndex) {
1125
- return;
1126
- }
1127
- if (this.state === State.InCommentLike) {
1128
- if (this.currentSequence === Sequences.CdataEnd) {
1129
- this.cbs.oncdata(this.sectionStart, endIndex, 0);
1130
- } else {
1131
- this.cbs.oncomment(this.sectionStart, endIndex, 0);
1132
- }
1133
- } else if (this.state === State.InTagName || this.state === State.BeforeAttributeName || this.state === State.BeforeAttributeValue || this.state === State.AfterAttributeName || this.state === State.InAttributeName || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueDq || this.state === State.InAttributeValueNq || this.state === State.InClosingTagName) ;
1134
- else {
1135
- this.cbs.ontext(this.sectionStart, endIndex);
1136
- }
1137
- }
1138
- emitCodePoint(cp, consumed) {
1139
- if (this.baseState !== State.Text && this.baseState !== State.InSpecialTag) {
1140
- if (this.sectionStart < this.entityStart) {
1141
- this.cbs.onattribdata(this.sectionStart, this.entityStart);
1142
- }
1143
- this.sectionStart = this.entityStart + consumed;
1144
- this.index = this.sectionStart - 1;
1145
- this.cbs.onattribentity(cp);
1146
- } else {
1147
- if (this.sectionStart < this.entityStart) {
1148
- this.cbs.ontext(this.sectionStart, this.entityStart);
1149
- }
1150
- this.sectionStart = this.entityStart + consumed;
1151
- this.index = this.sectionStart - 1;
1152
- this.cbs.ontextentity(cp, this.sectionStart);
1153
- }
1154
- }
1155
- }
1156
- const formTags = /* @__PURE__ */ new Set([
1157
- "input",
1158
- "option",
1159
- "optgroup",
1160
- "select",
1161
- "button",
1162
- "datalist",
1163
- "textarea"
1164
- ]);
1165
- const pTag = /* @__PURE__ */ new Set(["p"]);
1166
- const tableSectionTags = /* @__PURE__ */ new Set(["thead", "tbody"]);
1167
- const ddtTags = /* @__PURE__ */ new Set(["dd", "dt"]);
1168
- const rtpTags = /* @__PURE__ */ new Set(["rt", "rp"]);
1169
- const openImpliesClose = /* @__PURE__ */ new Map([
1170
- ["tr", /* @__PURE__ */ new Set(["tr", "th", "td"])],
1171
- ["th", /* @__PURE__ */ new Set(["th"])],
1172
- ["td", /* @__PURE__ */ new Set(["thead", "th", "td"])],
1173
- ["body", /* @__PURE__ */ new Set(["head", "link", "script"])],
1174
- ["li", /* @__PURE__ */ new Set(["li"])],
1175
- ["p", pTag],
1176
- ["h1", pTag],
1177
- ["h2", pTag],
1178
- ["h3", pTag],
1179
- ["h4", pTag],
1180
- ["h5", pTag],
1181
- ["h6", pTag],
1182
- ["select", formTags],
1183
- ["input", formTags],
1184
- ["output", formTags],
1185
- ["button", formTags],
1186
- ["datalist", formTags],
1187
- ["textarea", formTags],
1188
- ["option", /* @__PURE__ */ new Set(["option"])],
1189
- ["optgroup", /* @__PURE__ */ new Set(["optgroup", "option"])],
1190
- ["dd", ddtTags],
1191
- ["dt", ddtTags],
1192
- ["address", pTag],
1193
- ["article", pTag],
1194
- ["aside", pTag],
1195
- ["blockquote", pTag],
1196
- ["details", pTag],
1197
- ["div", pTag],
1198
- ["dl", pTag],
1199
- ["fieldset", pTag],
1200
- ["figcaption", pTag],
1201
- ["figure", pTag],
1202
- ["footer", pTag],
1203
- ["form", pTag],
1204
- ["header", pTag],
1205
- ["hr", pTag],
1206
- ["main", pTag],
1207
- ["nav", pTag],
1208
- ["ol", pTag],
1209
- ["pre", pTag],
1210
- ["section", pTag],
1211
- ["table", pTag],
1212
- ["ul", pTag],
1213
- ["rt", rtpTags],
1214
- ["rp", rtpTags],
1215
- ["tbody", tableSectionTags],
1216
- ["tfoot", tableSectionTags]
1217
- ]);
1218
- const voidElements = /* @__PURE__ */ new Set([
1219
- "area",
1220
- "base",
1221
- "basefont",
1222
- "br",
1223
- "col",
1224
- "command",
1225
- "embed",
1226
- "frame",
1227
- "hr",
1228
- "img",
1229
- "input",
1230
- "isindex",
1231
- "keygen",
1232
- "link",
1233
- "meta",
1234
- "param",
1235
- "source",
1236
- "track",
1237
- "wbr"
1238
- ]);
1239
- const foreignContextElements = /* @__PURE__ */ new Set(["math", "svg"]);
1240
- const htmlIntegrationElements = /* @__PURE__ */ new Set([
1241
- "mi",
1242
- "mo",
1243
- "mn",
1244
- "ms",
1245
- "mtext",
1246
- "annotation-xml",
1247
- "foreignobject",
1248
- "desc",
1249
- "title"
1250
- ]);
1251
- const reNameEnd = /\s|\//;
1252
- class Parser {
1253
- constructor(cbs, options = {}) {
1254
- var _a2, _b, _c, _d, _e, _f;
1255
- this.options = options;
1256
- this.startIndex = 0;
1257
- this.endIndex = 0;
1258
- this.openTagStart = 0;
1259
- this.tagname = "";
1260
- this.attribname = "";
1261
- this.attribvalue = "";
1262
- this.attribs = null;
1263
- this.stack = [];
1264
- this.buffers = [];
1265
- this.bufferOffset = 0;
1266
- this.writeIndex = 0;
1267
- this.ended = false;
1268
- this.cbs = cbs !== null && cbs !== void 0 ? cbs : {};
1269
- this.htmlMode = !this.options.xmlMode;
1270
- this.lowerCaseTagNames = (_a2 = options.lowerCaseTags) !== null && _a2 !== void 0 ? _a2 : this.htmlMode;
1271
- this.lowerCaseAttributeNames = (_b = options.lowerCaseAttributeNames) !== null && _b !== void 0 ? _b : this.htmlMode;
1272
- this.recognizeSelfClosing = (_c = options.recognizeSelfClosing) !== null && _c !== void 0 ? _c : !this.htmlMode;
1273
- this.tokenizer = new ((_d = options.Tokenizer) !== null && _d !== void 0 ? _d : Tokenizer)(this.options, this);
1274
- this.foreignContext = [!this.htmlMode];
1275
- (_f = (_e = this.cbs).onparserinit) === null || _f === void 0 ? void 0 : _f.call(_e, this);
1276
- }
1277
- // Tokenizer event handlers
1278
- /** @internal */
1279
- ontext(start, endIndex) {
1280
- var _a2, _b;
1281
- const data = this.getSlice(start, endIndex);
1282
- this.endIndex = endIndex - 1;
1283
- (_b = (_a2 = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a2, data);
1284
- this.startIndex = endIndex;
1285
- }
1286
- /** @internal */
1287
- ontextentity(cp, endIndex) {
1288
- var _a2, _b;
1289
- this.endIndex = endIndex - 1;
1290
- (_b = (_a2 = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a2, fromCodePoint(cp));
1291
- this.startIndex = endIndex;
1292
- }
1293
- /**
1294
- * Checks if the current tag is a void element. Override this if you want
1295
- * to specify your own additional void elements.
1296
- */
1297
- isVoidElement(name) {
1298
- return this.htmlMode && voidElements.has(name);
1299
- }
1300
- /** @internal */
1301
- onopentagname(start, endIndex) {
1302
- this.endIndex = endIndex;
1303
- let name = this.getSlice(start, endIndex);
1304
- if (this.lowerCaseTagNames) {
1305
- name = name.toLowerCase();
1306
- }
1307
- this.emitOpenTag(name);
1308
- }
1309
- emitOpenTag(name) {
1310
- var _a2, _b, _c, _d;
1311
- this.openTagStart = this.startIndex;
1312
- this.tagname = name;
1313
- const impliesClose = this.htmlMode && openImpliesClose.get(name);
1314
- if (impliesClose) {
1315
- while (this.stack.length > 0 && impliesClose.has(this.stack[0])) {
1316
- const element = this.stack.shift();
1317
- (_b = (_a2 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a2, element, true);
1318
- }
1319
- }
1320
- if (!this.isVoidElement(name)) {
1321
- this.stack.unshift(name);
1322
- if (this.htmlMode) {
1323
- if (foreignContextElements.has(name)) {
1324
- this.foreignContext.unshift(true);
1325
- } else if (htmlIntegrationElements.has(name)) {
1326
- this.foreignContext.unshift(false);
1327
- }
1328
- }
1329
- }
1330
- (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, name);
1331
- if (this.cbs.onopentag)
1332
- this.attribs = {};
1333
- }
1334
- endOpenTag(isImplied) {
1335
- var _a2, _b;
1336
- this.startIndex = this.openTagStart;
1337
- if (this.attribs) {
1338
- (_b = (_a2 = this.cbs).onopentag) === null || _b === void 0 ? void 0 : _b.call(_a2, this.tagname, this.attribs, isImplied);
1339
- this.attribs = null;
1340
- }
1341
- if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {
1342
- this.cbs.onclosetag(this.tagname, true);
1343
- }
1344
- this.tagname = "";
1345
- }
1346
- /** @internal */
1347
- onopentagend(endIndex) {
1348
- this.endIndex = endIndex;
1349
- this.endOpenTag(false);
1350
- this.startIndex = endIndex + 1;
1351
- }
1352
- /** @internal */
1353
- onclosetag(start, endIndex) {
1354
- var _a2, _b, _c, _d, _e, _f, _g, _h;
1355
- this.endIndex = endIndex;
1356
- let name = this.getSlice(start, endIndex);
1357
- if (this.lowerCaseTagNames) {
1358
- name = name.toLowerCase();
1359
- }
1360
- if (this.htmlMode && (foreignContextElements.has(name) || htmlIntegrationElements.has(name))) {
1361
- this.foreignContext.shift();
1362
- }
1363
- if (!this.isVoidElement(name)) {
1364
- const pos = this.stack.indexOf(name);
1365
- if (pos !== -1) {
1366
- for (let index = 0; index <= pos; index++) {
1367
- const element = this.stack.shift();
1368
- (_b = (_a2 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a2, element, index !== pos);
1369
- }
1370
- } else if (this.htmlMode && name === "p") {
1371
- this.emitOpenTag("p");
1372
- this.closeCurrentTag(true);
1373
- }
1374
- } else if (this.htmlMode && name === "br") {
1375
- (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, "br");
1376
- (_f = (_e = this.cbs).onopentag) === null || _f === void 0 ? void 0 : _f.call(_e, "br", {}, true);
1377
- (_h = (_g = this.cbs).onclosetag) === null || _h === void 0 ? void 0 : _h.call(_g, "br", false);
1378
- }
1379
- this.startIndex = endIndex + 1;
1380
- }
1381
- /** @internal */
1382
- onselfclosingtag(endIndex) {
1383
- this.endIndex = endIndex;
1384
- if (this.recognizeSelfClosing || this.foreignContext[0]) {
1385
- this.closeCurrentTag(false);
1386
- this.startIndex = endIndex + 1;
1387
- } else {
1388
- this.onopentagend(endIndex);
1389
- }
1390
- }
1391
- closeCurrentTag(isOpenImplied) {
1392
- var _a2, _b;
1393
- const name = this.tagname;
1394
- this.endOpenTag(isOpenImplied);
1395
- if (this.stack[0] === name) {
1396
- (_b = (_a2 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a2, name, !isOpenImplied);
1397
- this.stack.shift();
1398
- }
1399
- }
1400
- /** @internal */
1401
- onattribname(start, endIndex) {
1402
- this.startIndex = start;
1403
- const name = this.getSlice(start, endIndex);
1404
- this.attribname = this.lowerCaseAttributeNames ? name.toLowerCase() : name;
1405
- }
1406
- /** @internal */
1407
- onattribdata(start, endIndex) {
1408
- this.attribvalue += this.getSlice(start, endIndex);
1409
- }
1410
- /** @internal */
1411
- onattribentity(cp) {
1412
- this.attribvalue += fromCodePoint(cp);
1413
- }
1414
- /** @internal */
1415
- onattribend(quote, endIndex) {
1416
- var _a2, _b;
1417
- this.endIndex = endIndex;
1418
- (_b = (_a2 = this.cbs).onattribute) === null || _b === void 0 ? void 0 : _b.call(_a2, this.attribname, this.attribvalue, quote === QuoteType.Double ? '"' : quote === QuoteType.Single ? "'" : quote === QuoteType.NoValue ? void 0 : null);
1419
- if (this.attribs && !Object.prototype.hasOwnProperty.call(this.attribs, this.attribname)) {
1420
- this.attribs[this.attribname] = this.attribvalue;
1421
- }
1422
- this.attribvalue = "";
1423
- }
1424
- getInstructionName(value) {
1425
- const index = value.search(reNameEnd);
1426
- let name = index < 0 ? value : value.substr(0, index);
1427
- if (this.lowerCaseTagNames) {
1428
- name = name.toLowerCase();
1429
- }
1430
- return name;
1431
- }
1432
- /** @internal */
1433
- ondeclaration(start, endIndex) {
1434
- this.endIndex = endIndex;
1435
- const value = this.getSlice(start, endIndex);
1436
- if (this.cbs.onprocessinginstruction) {
1437
- const name = this.getInstructionName(value);
1438
- this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);
1439
- }
1440
- this.startIndex = endIndex + 1;
1441
- }
1442
- /** @internal */
1443
- onprocessinginstruction(start, endIndex) {
1444
- this.endIndex = endIndex;
1445
- const value = this.getSlice(start, endIndex);
1446
- if (this.cbs.onprocessinginstruction) {
1447
- const name = this.getInstructionName(value);
1448
- this.cbs.onprocessinginstruction(`?${name}`, `?${value}`);
1449
- }
1450
- this.startIndex = endIndex + 1;
1451
- }
1452
- /** @internal */
1453
- oncomment(start, endIndex, offset) {
1454
- var _a2, _b, _c, _d;
1455
- this.endIndex = endIndex;
1456
- (_b = (_a2 = this.cbs).oncomment) === null || _b === void 0 ? void 0 : _b.call(_a2, this.getSlice(start, endIndex - offset));
1457
- (_d = (_c = this.cbs).oncommentend) === null || _d === void 0 ? void 0 : _d.call(_c);
1458
- this.startIndex = endIndex + 1;
1459
- }
1460
- /** @internal */
1461
- oncdata(start, endIndex, offset) {
1462
- var _a2, _b, _c, _d, _e, _f, _g, _h, _j, _k;
1463
- this.endIndex = endIndex;
1464
- const value = this.getSlice(start, endIndex - offset);
1465
- if (!this.htmlMode || this.options.recognizeCDATA) {
1466
- (_b = (_a2 = this.cbs).oncdatastart) === null || _b === void 0 ? void 0 : _b.call(_a2);
1467
- (_d = (_c = this.cbs).ontext) === null || _d === void 0 ? void 0 : _d.call(_c, value);
1468
- (_f = (_e = this.cbs).oncdataend) === null || _f === void 0 ? void 0 : _f.call(_e);
1469
- } else {
1470
- (_h = (_g = this.cbs).oncomment) === null || _h === void 0 ? void 0 : _h.call(_g, `[CDATA[${value}]]`);
1471
- (_k = (_j = this.cbs).oncommentend) === null || _k === void 0 ? void 0 : _k.call(_j);
1472
- }
1473
- this.startIndex = endIndex + 1;
1474
- }
1475
- /** @internal */
1476
- onend() {
1477
- var _a2, _b;
1478
- if (this.cbs.onclosetag) {
1479
- this.endIndex = this.startIndex;
1480
- for (let index = 0; index < this.stack.length; index++) {
1481
- this.cbs.onclosetag(this.stack[index], true);
1482
- }
1483
- }
1484
- (_b = (_a2 = this.cbs).onend) === null || _b === void 0 ? void 0 : _b.call(_a2);
1485
- }
1486
- /**
1487
- * Resets the parser to a blank state, ready to parse a new HTML document
1488
- */
1489
- reset() {
1490
- var _a2, _b, _c, _d;
1491
- (_b = (_a2 = this.cbs).onreset) === null || _b === void 0 ? void 0 : _b.call(_a2);
1492
- this.tokenizer.reset();
1493
- this.tagname = "";
1494
- this.attribname = "";
1495
- this.attribs = null;
1496
- this.stack.length = 0;
1497
- this.startIndex = 0;
1498
- this.endIndex = 0;
1499
- (_d = (_c = this.cbs).onparserinit) === null || _d === void 0 ? void 0 : _d.call(_c, this);
1500
- this.buffers.length = 0;
1501
- this.foreignContext.length = 0;
1502
- this.foreignContext.unshift(!this.htmlMode);
1503
- this.bufferOffset = 0;
1504
- this.writeIndex = 0;
1505
- this.ended = false;
1506
- }
1507
- /**
1508
- * Resets the parser, then parses a complete document and
1509
- * pushes it to the handler.
1510
- *
1511
- * @param data Document to parse.
1512
- */
1513
- parseComplete(data) {
1514
- this.reset();
1515
- this.end(data);
1516
- }
1517
- getSlice(start, end) {
1518
- while (start - this.bufferOffset >= this.buffers[0].length) {
1519
- this.shiftBuffer();
1520
- }
1521
- let slice = this.buffers[0].slice(start - this.bufferOffset, end - this.bufferOffset);
1522
- while (end - this.bufferOffset > this.buffers[0].length) {
1523
- this.shiftBuffer();
1524
- slice += this.buffers[0].slice(0, end - this.bufferOffset);
1525
- }
1526
- return slice;
1527
- }
1528
- shiftBuffer() {
1529
- this.bufferOffset += this.buffers[0].length;
1530
- this.writeIndex--;
1531
- this.buffers.shift();
1532
- }
1533
- /**
1534
- * Parses a chunk of data and calls the corresponding callbacks.
1535
- *
1536
- * @param chunk Chunk to parse.
1537
- */
1538
- write(chunk) {
1539
- var _a2, _b;
1540
- if (this.ended) {
1541
- (_b = (_a2 = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a2, new Error(".write() after done!"));
1542
- return;
1543
- }
1544
- this.buffers.push(chunk);
1545
- if (this.tokenizer.running) {
1546
- this.tokenizer.write(chunk);
1547
- this.writeIndex++;
1548
- }
1549
- }
1550
- /**
1551
- * Parses the end of the buffer and clears the stack, calls onend.
1552
- *
1553
- * @param chunk Optional final chunk to parse.
1554
- */
1555
- end(chunk) {
1556
- var _a2, _b;
1557
- if (this.ended) {
1558
- (_b = (_a2 = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a2, new Error(".end() after done!"));
1559
- return;
1560
- }
1561
- if (chunk)
1562
- this.write(chunk);
1563
- this.ended = true;
1564
- this.tokenizer.end();
1565
- }
1566
- /**
1567
- * Pauses parsing. The parser won't emit events until `resume` is called.
1568
- */
1569
- pause() {
1570
- this.tokenizer.pause();
1571
- }
1572
- /**
1573
- * Resumes parsing after `pause` was called.
1574
- */
1575
- resume() {
1576
- this.tokenizer.resume();
1577
- while (this.tokenizer.running && this.writeIndex < this.buffers.length) {
1578
- this.tokenizer.write(this.buffers[this.writeIndex++]);
1579
- }
1580
- if (this.ended)
1581
- this.tokenizer.end();
1582
- }
1583
- /**
1584
- * Alias of `write`, for backwards compatibility.
1585
- *
1586
- * @param chunk Chunk to parse.
1587
- * @deprecated
1588
- */
1589
- parseChunk(chunk) {
1590
- this.write(chunk);
1591
- }
1592
- /**
1593
- * Alias of `end`, for backwards compatibility.
1594
- *
1595
- * @param chunk Optional final chunk to parse.
1596
- * @deprecated
1597
- */
1598
- done(chunk) {
1599
- this.end(chunk);
1600
- }
1601
- }
1602
- var ElementType;
1603
- (function(ElementType2) {
1604
- ElementType2["Root"] = "root";
1605
- ElementType2["Text"] = "text";
1606
- ElementType2["Directive"] = "directive";
1607
- ElementType2["Comment"] = "comment";
1608
- ElementType2["Script"] = "script";
1609
- ElementType2["Style"] = "style";
1610
- ElementType2["Tag"] = "tag";
1611
- ElementType2["CDATA"] = "cdata";
1612
- ElementType2["Doctype"] = "doctype";
1613
- })(ElementType || (ElementType = {}));
1614
- function isTag$1(elem) {
1615
- return elem.type === ElementType.Tag || elem.type === ElementType.Script || elem.type === ElementType.Style;
1616
- }
1617
- ElementType.Root;
1618
- ElementType.Text;
1619
- ElementType.Directive;
1620
- ElementType.Comment;
1621
- ElementType.Script;
1622
- ElementType.Style;
1623
- ElementType.Tag;
1624
- ElementType.CDATA;
1625
- ElementType.Doctype;
1626
- class Node {
1627
- constructor() {
1628
- this.parent = null;
1629
- this.prev = null;
1630
- this.next = null;
1631
- this.startIndex = null;
1632
- this.endIndex = null;
1633
- }
1634
- // Read-write aliases for properties
1635
- /**
1636
- * Same as {@link parent}.
1637
- * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
1638
- */
1639
- get parentNode() {
1640
- return this.parent;
1641
- }
1642
- set parentNode(parent) {
1643
- this.parent = parent;
1644
- }
1645
- /**
1646
- * Same as {@link prev}.
1647
- * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
1648
- */
1649
- get previousSibling() {
1650
- return this.prev;
1651
- }
1652
- set previousSibling(prev) {
1653
- this.prev = prev;
1654
- }
1655
- /**
1656
- * Same as {@link next}.
1657
- * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
1658
- */
1659
- get nextSibling() {
1660
- return this.next;
1661
- }
1662
- set nextSibling(next) {
1663
- this.next = next;
1664
- }
1665
- /**
1666
- * Clone this node, and optionally its children.
1667
- *
1668
- * @param recursive Clone child nodes as well.
1669
- * @returns A clone of the node.
1670
- */
1671
- cloneNode(recursive = false) {
1672
- return cloneNode(this, recursive);
1673
- }
1674
- }
1675
- class DataNode extends Node {
1676
- /**
1677
- * @param data The content of the data node
1678
- */
1679
- constructor(data) {
1680
- super();
1681
- this.data = data;
1682
- }
1683
- /**
1684
- * Same as {@link data}.
1685
- * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
1686
- */
1687
- get nodeValue() {
1688
- return this.data;
1689
- }
1690
- set nodeValue(data) {
1691
- this.data = data;
1692
- }
1693
- }
1694
- class Text extends DataNode {
1695
- constructor() {
1696
- super(...arguments);
1697
- this.type = ElementType.Text;
1698
- }
1699
- get nodeType() {
1700
- return 3;
1701
- }
1702
- }
1703
- class Comment extends DataNode {
1704
- constructor() {
1705
- super(...arguments);
1706
- this.type = ElementType.Comment;
1707
- }
1708
- get nodeType() {
1709
- return 8;
1710
- }
1711
- }
1712
- class ProcessingInstruction extends DataNode {
1713
- constructor(name, data) {
1714
- super(data);
1715
- this.name = name;
1716
- this.type = ElementType.Directive;
1717
- }
1718
- get nodeType() {
1719
- return 1;
1720
- }
1721
- }
1722
- class NodeWithChildren extends Node {
1723
- /**
1724
- * @param children Children of the node. Only certain node types can have children.
1725
- */
1726
- constructor(children) {
1727
- super();
1728
- this.children = children;
1729
- }
1730
- // Aliases
1731
- /** First child of the node. */
1732
- get firstChild() {
1733
- var _a2;
1734
- return (_a2 = this.children[0]) !== null && _a2 !== void 0 ? _a2 : null;
1735
- }
1736
- /** Last child of the node. */
1737
- get lastChild() {
1738
- return this.children.length > 0 ? this.children[this.children.length - 1] : null;
1739
- }
1740
- /**
1741
- * Same as {@link children}.
1742
- * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
1743
- */
1744
- get childNodes() {
1745
- return this.children;
1746
- }
1747
- set childNodes(children) {
1748
- this.children = children;
1749
- }
1750
- }
1751
- class CDATA extends NodeWithChildren {
1752
- constructor() {
1753
- super(...arguments);
1754
- this.type = ElementType.CDATA;
1755
- }
1756
- get nodeType() {
1757
- return 4;
1758
- }
1759
- }
1760
- class Document extends NodeWithChildren {
1761
- constructor() {
1762
- super(...arguments);
1763
- this.type = ElementType.Root;
1764
- }
1765
- get nodeType() {
1766
- return 9;
1767
- }
1768
- }
1769
- class Element extends NodeWithChildren {
1770
- /**
1771
- * @param name Name of the tag, eg. `div`, `span`.
1772
- * @param attribs Object mapping attribute names to attribute values.
1773
- * @param children Children of the node.
1774
- */
1775
- constructor(name, attribs, children = [], type = name === "script" ? ElementType.Script : name === "style" ? ElementType.Style : ElementType.Tag) {
1776
- super(children);
1777
- this.name = name;
1778
- this.attribs = attribs;
1779
- this.type = type;
1780
- }
1781
- get nodeType() {
1782
- return 1;
1783
- }
1784
- // DOM Level 1 aliases
1785
- /**
1786
- * Same as {@link name}.
1787
- * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
1788
- */
1789
- get tagName() {
1790
- return this.name;
1791
- }
1792
- set tagName(name) {
1793
- this.name = name;
1794
- }
1795
- get attributes() {
1796
- return Object.keys(this.attribs).map((name) => {
1797
- var _a2, _b;
1798
- return {
1799
- name,
1800
- value: this.attribs[name],
1801
- namespace: (_a2 = this["x-attribsNamespace"]) === null || _a2 === void 0 ? void 0 : _a2[name],
1802
- prefix: (_b = this["x-attribsPrefix"]) === null || _b === void 0 ? void 0 : _b[name]
1803
- };
1804
- });
1805
- }
1806
- }
1807
- function isTag(node) {
1808
- return isTag$1(node);
1809
- }
1810
- function isCDATA(node) {
1811
- return node.type === ElementType.CDATA;
1812
- }
1813
- function isText(node) {
1814
- return node.type === ElementType.Text;
1815
- }
1816
- function isComment(node) {
1817
- return node.type === ElementType.Comment;
1818
- }
1819
- function isDirective(node) {
1820
- return node.type === ElementType.Directive;
1821
- }
1822
- function isDocument(node) {
1823
- return node.type === ElementType.Root;
1824
- }
1825
- function cloneNode(node, recursive = false) {
1826
- let result;
1827
- if (isText(node)) {
1828
- result = new Text(node.data);
1829
- } else if (isComment(node)) {
1830
- result = new Comment(node.data);
1831
- } else if (isTag(node)) {
1832
- const children = recursive ? cloneChildren(node.children) : [];
1833
- const clone = new Element(node.name, { ...node.attribs }, children);
1834
- children.forEach((child) => child.parent = clone);
1835
- if (node.namespace != null) {
1836
- clone.namespace = node.namespace;
1837
- }
1838
- if (node["x-attribsNamespace"]) {
1839
- clone["x-attribsNamespace"] = { ...node["x-attribsNamespace"] };
1840
- }
1841
- if (node["x-attribsPrefix"]) {
1842
- clone["x-attribsPrefix"] = { ...node["x-attribsPrefix"] };
1843
- }
1844
- result = clone;
1845
- } else if (isCDATA(node)) {
1846
- const children = recursive ? cloneChildren(node.children) : [];
1847
- const clone = new CDATA(children);
1848
- children.forEach((child) => child.parent = clone);
1849
- result = clone;
1850
- } else if (isDocument(node)) {
1851
- const children = recursive ? cloneChildren(node.children) : [];
1852
- const clone = new Document(children);
1853
- children.forEach((child) => child.parent = clone);
1854
- if (node["x-mode"]) {
1855
- clone["x-mode"] = node["x-mode"];
1856
- }
1857
- result = clone;
1858
- } else if (isDirective(node)) {
1859
- const instruction = new ProcessingInstruction(node.name, node.data);
1860
- if (node["x-name"] != null) {
1861
- instruction["x-name"] = node["x-name"];
1862
- instruction["x-publicId"] = node["x-publicId"];
1863
- instruction["x-systemId"] = node["x-systemId"];
1864
- }
1865
- result = instruction;
1866
- } else {
1867
- throw new Error(`Not implemented yet: ${node.type}`);
1868
- }
1869
- result.startIndex = node.startIndex;
1870
- result.endIndex = node.endIndex;
1871
- if (node.sourceCodeLocation != null) {
1872
- result.sourceCodeLocation = node.sourceCodeLocation;
1873
- }
1874
- return result;
1875
- }
1876
- function cloneChildren(childs) {
1877
- const children = childs.map((child) => cloneNode(child, true));
1878
- for (let i = 1; i < children.length; i++) {
1879
- children[i].prev = children[i - 1];
1880
- children[i - 1].next = children[i];
1881
- }
1882
- return children;
1883
- }
1884
- const defaultOpts = {
1885
- withStartIndices: false,
1886
- withEndIndices: false,
1887
- xmlMode: false
1888
- };
1889
- class DomHandler {
1890
- /**
1891
- * @param callback Called once parsing has completed.
1892
- * @param options Settings for the handler.
1893
- * @param elementCB Callback whenever a tag is closed.
1894
- */
1895
- constructor(callback, options, elementCB) {
1896
- this.dom = [];
1897
- this.root = new Document(this.dom);
1898
- this.done = false;
1899
- this.tagStack = [this.root];
1900
- this.lastNode = null;
1901
- this.parser = null;
1902
- if (typeof options === "function") {
1903
- elementCB = options;
1904
- options = defaultOpts;
1905
- }
1906
- if (typeof callback === "object") {
1907
- options = callback;
1908
- callback = void 0;
1909
- }
1910
- this.callback = callback !== null && callback !== void 0 ? callback : null;
1911
- this.options = options !== null && options !== void 0 ? options : defaultOpts;
1912
- this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;
1913
- }
1914
- onparserinit(parser) {
1915
- this.parser = parser;
1916
- }
1917
- // Resets the handler back to starting state
1918
- onreset() {
1919
- this.dom = [];
1920
- this.root = new Document(this.dom);
1921
- this.done = false;
1922
- this.tagStack = [this.root];
1923
- this.lastNode = null;
1924
- this.parser = null;
1925
- }
1926
- // Signals the handler that parsing is done
1927
- onend() {
1928
- if (this.done)
1929
- return;
1930
- this.done = true;
1931
- this.parser = null;
1932
- this.handleCallback(null);
1933
- }
1934
- onerror(error) {
1935
- this.handleCallback(error);
1936
- }
1937
- onclosetag() {
1938
- this.lastNode = null;
1939
- const elem = this.tagStack.pop();
1940
- if (this.options.withEndIndices) {
1941
- elem.endIndex = this.parser.endIndex;
1942
- }
1943
- if (this.elementCB)
1944
- this.elementCB(elem);
1945
- }
1946
- onopentag(name, attribs) {
1947
- const type = this.options.xmlMode ? ElementType.Tag : void 0;
1948
- const element = new Element(name, attribs, void 0, type);
1949
- this.addNode(element);
1950
- this.tagStack.push(element);
1951
- }
1952
- ontext(data) {
1953
- const { lastNode } = this;
1954
- if (lastNode && lastNode.type === ElementType.Text) {
1955
- lastNode.data += data;
1956
- if (this.options.withEndIndices) {
1957
- lastNode.endIndex = this.parser.endIndex;
1958
- }
1959
- } else {
1960
- const node = new Text(data);
1961
- this.addNode(node);
1962
- this.lastNode = node;
1963
- }
1964
- }
1965
- oncomment(data) {
1966
- if (this.lastNode && this.lastNode.type === ElementType.Comment) {
1967
- this.lastNode.data += data;
1968
- return;
1969
- }
1970
- const node = new Comment(data);
1971
- this.addNode(node);
1972
- this.lastNode = node;
1973
- }
1974
- oncommentend() {
1975
- this.lastNode = null;
1976
- }
1977
- oncdatastart() {
1978
- const text = new Text("");
1979
- const node = new CDATA([text]);
1980
- this.addNode(node);
1981
- text.parent = node;
1982
- this.lastNode = text;
1983
- }
1984
- oncdataend() {
1985
- this.lastNode = null;
1986
- }
1987
- onprocessinginstruction(name, data) {
1988
- const node = new ProcessingInstruction(name, data);
1989
- this.addNode(node);
1990
- }
1991
- handleCallback(error) {
1992
- if (typeof this.callback === "function") {
1993
- this.callback(error, this.dom);
1994
- } else if (error) {
1995
- throw error;
1996
- }
1997
- }
1998
- addNode(node) {
1999
- const parent = this.tagStack[this.tagStack.length - 1];
2000
- const previousSibling = parent.children[parent.children.length - 1];
2001
- if (this.options.withStartIndices) {
2002
- node.startIndex = this.parser.startIndex;
2003
- }
2004
- if (this.options.withEndIndices) {
2005
- node.endIndex = this.parser.endIndex;
2006
- }
2007
- parent.children.push(node);
2008
- if (previousSibling) {
2009
- node.prev = previousSibling;
2010
- previousSibling.next = node;
2011
- }
2012
- node.parent = parent;
2013
- this.lastNode = null;
2014
- }
2015
- }
2016
- function parseDocument(data, options) {
2017
- const handler = new DomHandler(void 0, options);
2018
- new Parser(handler, options).end(data);
2019
- return handler.root;
2020
- }
1
+ import { d as defineService } from "./index7.js";
2
+ const UrlDefinition = defineService("@wix/viewer-service-url");
2021
3
  export {
2022
- parseDocument as p
4
+ UrlDefinition as U
2023
5
  };