@wix/editor-react-components 1.2764.0 → 1.2766.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 (122) hide show
  1. package/dist/site/components/AccordionComponent/component.js +80 -3
  2. package/dist/site/components/AccordionComponent/manifest.js +1 -1
  3. package/dist/site/components/AudioPlayer/component.js +4 -3
  4. package/dist/site/components/AudioPlayer/manifest.js +1 -1
  5. package/dist/site/components/BoxContainer/component.js +2 -2
  6. package/dist/site/components/Breadcrumbs/component.js +3 -3
  7. package/dist/site/components/Breadcrumbs/manifest.js +1 -1
  8. package/dist/site/components/Button/component.js +1 -1
  9. package/dist/site/components/Button/manifest.js +1 -1
  10. package/dist/site/components/Checkbox/component.js +3 -4
  11. package/dist/site/components/CheckboxGroup/component.js +3 -4
  12. package/dist/site/components/CollapsibleText/component.js +2 -2
  13. package/dist/site/components/CollapsibleText/manifest.js +1 -1
  14. package/dist/site/components/DatePicker/component.js +7 -7
  15. package/dist/site/components/Dropdown/Dropdown.d.ts +1 -1
  16. package/dist/site/components/Dropdown/Dropdown.types.d.ts +22 -89
  17. package/dist/site/components/Dropdown/component.js +205 -873
  18. package/dist/site/components/Dropdown/constants.d.ts +26 -168
  19. package/dist/site/components/Dropdown/css.css +52 -462
  20. package/dist/site/components/Dropdown/manifest.js +338 -441
  21. package/dist/site/components/GoogleMap/manifest.js +1 -1
  22. package/dist/site/components/HTMLComponent/manifest.js +1 -1
  23. package/dist/site/components/HeadingTextBlock/component.js +2 -2
  24. package/dist/site/components/HipaaIcon/component.js +1 -1
  25. package/dist/site/components/Image3/component.js +1 -1
  26. package/dist/site/components/ImageReveal/component.js +2 -2
  27. package/dist/site/components/LegacyAppWidget/component.js +1 -1
  28. package/dist/site/components/LegacyContainer/component.js +1 -1
  29. package/dist/site/components/LegacyMultiStateBox/component.js +2 -2
  30. package/dist/site/components/Line/component.js +1 -1
  31. package/dist/site/components/Line/manifest.js +39 -3
  32. package/dist/site/components/LinkBar/manifest.js +1 -1
  33. package/dist/site/components/Lottie/component.js +1 -1
  34. package/dist/site/components/Lottie/manifest.js +1 -1
  35. package/dist/site/components/MarkdownBlock/component.js +1 -1
  36. package/dist/site/components/Menu/component.js +3 -3
  37. package/dist/site/components/Menu/manifest.js +1 -1
  38. package/dist/site/components/MultiStateBox/manifest.js +1 -1
  39. package/dist/site/components/RadioButtons/component.js +3 -4
  40. package/dist/site/components/ShareButtons/component.js +1 -1
  41. package/dist/site/components/ShareButtons/manifest.js +1 -1
  42. package/dist/site/components/Slideshow/component.js +1 -1
  43. package/dist/site/components/Slideshow/manifest.js +1 -1
  44. package/dist/site/components/Tabs/manifest.js +1 -1
  45. package/dist/site/components/TestComp/manifest.js +1 -1
  46. package/dist/site/components/TextBox/component.js +2 -3
  47. package/dist/site/components/TextEffects3d/component.js +1 -1
  48. package/dist/site/components/TextEffectsBauhaus/component.js +1 -1
  49. package/dist/site/components/TextEffectsGlass/component.js +1 -1
  50. package/dist/site/components/TextEffectsGlitch/component.js +1 -1
  51. package/dist/site/components/TextEffectsLetterPress/component.js +1 -1
  52. package/dist/site/components/TextEffectsMatrix/component.js +1 -1
  53. package/dist/site/components/TextEffectsNeonSign/component.js +1 -1
  54. package/dist/site/components/TextEffectsNoisy/component.js +1 -1
  55. package/dist/site/components/TextEffectsOutlineOut/component.js +1 -1
  56. package/dist/site/components/TextEffectsRetro/component.js +1 -1
  57. package/dist/site/components/TextEffectsShook/component.js +1 -1
  58. package/dist/site/components/TextEffectsSticker/component.js +1 -1
  59. package/dist/site/components/TextEffectsStriped/component.js +1 -1
  60. package/dist/site/components/TextInput/TextInput.d.ts +3 -7
  61. package/dist/site/components/TextInput/TextInput.types.d.ts +38 -105
  62. package/dist/site/components/TextInput/component.js +104 -780
  63. package/dist/site/components/TextInput/component.preview.d.ts +1 -4
  64. package/dist/site/components/TextInput/constants.d.ts +17 -65
  65. package/dist/site/components/TextInput/css.css +25 -223
  66. package/dist/site/components/TextInput/manifest.js +181 -367
  67. package/dist/site/components/TimePicker/component.js +7 -8
  68. package/dist/site/components/chunks/AnimatedIcon.js +1 -1
  69. package/dist/site/components/chunks/Button.js +1055 -466
  70. package/dist/site/components/chunks/Button2.js +486 -0
  71. package/dist/site/components/chunks/DismissSmall.js +7727 -1
  72. package/dist/site/components/chunks/Group.js +46 -970
  73. package/dist/site/components/chunks/I18nProvider.js +125 -0
  74. package/dist/site/components/chunks/Input.js +369 -0
  75. package/dist/site/components/chunks/Link.js +1 -1
  76. package/dist/site/components/chunks/RequiredIndicator.js +4 -0
  77. package/dist/site/components/chunks/ResponsiveBox.js +1 -1
  78. package/dist/site/components/chunks/ResponsiveContainer.js +1 -1
  79. package/dist/site/components/chunks/TextEffectsShared.js +1 -1
  80. package/dist/site/components/chunks/VisuallyHidden.js +1 -1
  81. package/dist/site/components/chunks/a11y.js +4 -5
  82. package/dist/site/components/chunks/constants3.js +23 -63
  83. package/dist/site/components/chunks/constants36.js +31 -148
  84. package/dist/site/components/chunks/filterDOMProps.js +18 -139
  85. package/dist/site/components/chunks/index10.js +3 -2020
  86. package/dist/site/components/chunks/index11.js +31118 -232
  87. package/dist/site/components/chunks/index12.js +3 -31191
  88. package/dist/site/components/chunks/index13.js +44 -3
  89. package/dist/site/components/chunks/index3.js +1 -1
  90. package/dist/site/components/chunks/index4.js +1 -1
  91. package/dist/site/components/chunks/index5.js +1 -1
  92. package/dist/site/components/chunks/index7.js +67 -3
  93. package/dist/site/components/chunks/index8.js +2020 -3
  94. package/dist/site/components/chunks/index9.js +232 -60
  95. package/dist/site/components/chunks/isObjectLike.js +15 -5
  96. package/dist/site/components/chunks/manifestSdkMixins.js +4 -17
  97. package/dist/site/components/chunks/parseHtml.js +1 -1
  98. package/dist/site/components/chunks/parseSvg.js +1 -1
  99. package/dist/site/components/chunks/staticService.js +1 -1
  100. package/dist/site/components/chunks/useConsentPolicyProps.js +1 -1
  101. package/dist/site/components/chunks/useLocalizedStringFormatter.js +1 -1
  102. package/package.json +2 -2
  103. package/dist/site/components/Dropdown/component.preview.d.ts +0 -9
  104. package/dist/site/components/Dropdown/components/DropdownChips.d.ts +0 -8
  105. package/dist/site/components/Dropdown/components/DropdownList.d.ts +0 -20
  106. package/dist/site/components/Dropdown/components/DropdownTrigger.d.ts +0 -22
  107. package/dist/site/components/Dropdown/dropdownUtils.d.ts +0 -22
  108. package/dist/site/components/Dropdown/hooks/useChipOverflow.d.ts +0 -9
  109. package/dist/site/components/Dropdown/hooks/useDropdownQuery.d.ts +0 -15
  110. package/dist/site/components/Dropdown/hooks/useDropdownSelection.d.ts +0 -16
  111. package/dist/site/components/TextInput/TextInput.viewer.constants.d.ts +0 -24
  112. package/dist/site/components/TextInput/sdk.d.ts +0 -4
  113. package/dist/site/components/TextInput/sdk.js +0 -91
  114. package/dist/site/components/TextInput/utils.d.ts +0 -9
  115. package/dist/site/components/chunks/DateField.js +0 -6762
  116. package/dist/site/components/chunks/InfoCircleSmall.js +0 -7
  117. package/dist/site/components/chunks/NumberFormatter.js +0 -140
  118. package/dist/site/components/chunks/Tooltip.js +0 -1334
  119. package/dist/site/components/chunks/_baseSlice.js +0 -43
  120. package/dist/site/components/chunks/index14.js +0 -46
  121. package/dist/site/components/chunks/isArray.js +0 -12
  122. package/dist/site/components/chunks/isArrayLike.js +0 -88
@@ -1,2023 +1,6 @@
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;
1
+ function defineService(id) {
2
+ return id;
2020
3
  }
2021
4
  export {
2022
- parseDocument as p
5
+ defineService as d
2023
6
  };