@fairfox/polly 0.91.0 → 0.92.1

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 (110) hide show
  1. package/dist/cli/polly.js +3 -3
  2. package/dist/cli/polly.js.map +3 -3
  3. package/dist/gallery/gallery.css +2 -2
  4. package/dist/gallery/gallery.js +248 -241
  5. package/dist/src/background/index.js +27 -11
  6. package/dist/src/background/index.js.map +2 -2
  7. package/dist/src/background/message-router.js +27 -11
  8. package/dist/src/background/message-router.js.map +2 -2
  9. package/dist/src/client/index.js +56 -56
  10. package/dist/src/client/index.js.map +4 -4
  11. package/dist/src/elysia/index.js +16 -7
  12. package/dist/src/elysia/index.js.map +4 -4
  13. package/dist/src/elysia/plugin.d.ts +4 -4
  14. package/dist/src/index.js +27 -11
  15. package/dist/src/index.js.map +2 -2
  16. package/dist/src/mesh.js +2 -2
  17. package/dist/src/mesh.js.map +3 -3
  18. package/dist/src/peer.js +6 -6
  19. package/dist/src/peer.js.map +3 -3
  20. package/dist/src/polly-ui/index.css +2 -2
  21. package/dist/src/polly-ui/markdown.js +1844 -1010
  22. package/dist/src/polly-ui/markdown.js.map +5 -5
  23. package/dist/src/polly-ui/styles.css +2 -2
  24. package/dist/src/shared/adapters/index.js +27 -11
  25. package/dist/src/shared/adapters/index.js.map +2 -2
  26. package/dist/src/shared/lib/context-helpers.js +27 -11
  27. package/dist/src/shared/lib/context-helpers.js.map +2 -2
  28. package/dist/src/shared/lib/message-bus.js +27 -11
  29. package/dist/src/shared/lib/message-bus.js.map +2 -2
  30. package/dist/src/shared/lib/resource.js +17 -1
  31. package/dist/src/shared/lib/resource.js.map +2 -2
  32. package/dist/src/shared/lib/state.js +17 -1
  33. package/dist/src/shared/lib/state.js.map +2 -2
  34. package/dist/src/shared/state/app-state.js +17 -1
  35. package/dist/src/shared/state/app-state.js.map +2 -2
  36. package/dist/tools/bdd/src/cli.js +20 -2
  37. package/dist/tools/bdd/src/cli.js.map +4 -4
  38. package/dist/tools/bdd/src/index.js +20 -2
  39. package/dist/tools/bdd/src/index.js.map +3 -3
  40. package/dist/tools/init/templates/pwa/package.json.template +2 -3
  41. package/dist/tools/mutate/src/args.d.ts +25 -3
  42. package/dist/tools/mutate/src/cli.js +3238 -312
  43. package/dist/tools/mutate/src/cli.js.map +32 -12
  44. package/dist/tools/mutate/src/config.d.ts +13 -2
  45. package/dist/tools/mutate/src/define.d.ts +76 -0
  46. package/dist/tools/mutate/src/engine/ast.d.ts +13 -0
  47. package/dist/tools/mutate/src/engine/baseline.d.ts +20 -0
  48. package/dist/tools/mutate/src/engine/cache.d.ts +32 -0
  49. package/dist/tools/mutate/src/engine/coverage.d.ts +60 -0
  50. package/dist/tools/mutate/src/engine/generate.d.ts +23 -0
  51. package/dist/tools/mutate/src/engine/graph.d.ts +11 -0
  52. package/dist/tools/mutate/src/engine/index.d.ts +16 -0
  53. package/dist/tools/mutate/src/engine/junit.d.ts +38 -0
  54. package/dist/tools/mutate/src/engine/operators.d.ts +14 -0
  55. package/dist/tools/mutate/src/engine/preload.d.ts +10 -0
  56. package/dist/tools/mutate/src/engine/preload.js +180 -0
  57. package/dist/tools/mutate/src/engine/preload.js.map +10 -0
  58. package/dist/tools/mutate/src/engine/probes.d.ts +12 -0
  59. package/dist/tools/mutate/src/engine/report-writer.d.ts +44 -0
  60. package/dist/tools/mutate/src/engine/runner.d.ts +31 -0
  61. package/dist/tools/mutate/src/engine/stray-writes.d.ts +25 -0
  62. package/dist/tools/mutate/src/engine/typecheck.d.ts +37 -0
  63. package/dist/tools/mutate/src/engine/types.d.ts +191 -0
  64. package/dist/tools/mutate/src/engine/verify-callsites.d.ts +9 -0
  65. package/dist/tools/mutate/src/engine/workdir.d.ts +16 -0
  66. package/dist/tools/mutate/src/engine-config.d.ts +7 -0
  67. package/dist/tools/mutate/src/index.d.ts +7 -3
  68. package/dist/tools/mutate/src/index.js +2821 -193
  69. package/dist/tools/mutate/src/index.js.map +26 -7
  70. package/dist/tools/mutate/src/ingest.d.ts +30 -1
  71. package/dist/tools/mutate/src/init.d.ts +2 -1
  72. package/dist/tools/mutate/src/migrate.d.ts +32 -0
  73. package/dist/tools/mutate/src/report.d.ts +3 -0
  74. package/dist/tools/mutate/src/run.d.ts +17 -8
  75. package/dist/tools/mutate/src/verify-matrix.d.ts +12 -15
  76. package/dist/tools/quality/src/cli.js +9 -9
  77. package/dist/tools/quality/src/cli.js.map +4 -4
  78. package/dist/tools/quality/src/index.js +9 -9
  79. package/dist/tools/quality/src/index.js.map +4 -4
  80. package/dist/tools/quality/src/no-tautology-ensures.d.ts +2 -2
  81. package/dist/tools/quality/src/plugins/import-checks.d.ts +1 -1
  82. package/dist/tools/test/src/adapters/index.js +3 -2
  83. package/dist/tools/test/src/adapters/index.js.map +3 -3
  84. package/dist/tools/test/src/coverage-policy/cli.d.ts +2 -2
  85. package/dist/tools/test/src/coverage-policy/cli.js +217 -17
  86. package/dist/tools/test/src/coverage-policy/cli.js.map +7 -5
  87. package/dist/tools/test/src/coverage-policy/index.d.ts +1 -1
  88. package/dist/tools/test/src/coverage-policy/index.js +213 -12
  89. package/dist/tools/test/src/coverage-policy/index.js.map +7 -5
  90. package/dist/tools/test/src/coverage-policy/mutate-targets.d.ts +29 -12
  91. package/dist/tools/test/src/e2e-mesh/index.js +6 -6
  92. package/dist/tools/test/src/e2e-mesh/index.js.map +4 -4
  93. package/dist/tools/test/src/e2e-relay/index.js +230 -226
  94. package/dist/tools/test/src/e2e-relay/index.js.map +7 -7
  95. package/dist/tools/test/src/index.js +3 -2
  96. package/dist/tools/test/src/index.js.map +3 -3
  97. package/dist/tools/test/src/visual/index.js +684 -511
  98. package/dist/tools/test/src/visual/index.js.map +11 -11
  99. package/dist/tools/verify/src/cli.js +17 -2
  100. package/dist/tools/verify/src/cli.js.map +4 -4
  101. package/dist/tools/verify/src/config.d.ts +1 -1
  102. package/dist/tools/verify/src/config.js +68 -3
  103. package/dist/tools/verify/src/config.js.map +4 -4
  104. package/dist/tools/verify/src/primitives/index.d.ts +34 -0
  105. package/dist/tools/visualize/src/cli.js +16 -1
  106. package/dist/tools/visualize/src/cli.js.map +3 -3
  107. package/package.json +29 -39
  108. package/dist/tools/verify/src/stryker/index.d.ts +0 -32
  109. package/dist/tools/verify/src/stryker/index.js +0 -86
  110. package/dist/tools/verify/src/stryker/index.js.map +0 -10
@@ -1,5 +1,8 @@
1
- // ../../node_modules/.bun/dompurify@3.4.14/node_modules/dompurify/dist/purify.es.mjs
2
- /*! @license DOMPurify 3.4.14 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.14/LICENSE */
1
+ // ../../node_modules/.bun/dompurify@3.4.17/node_modules/dompurify/dist/purify.es.mjs
2
+ /*! @license DOMPurify 3.4.17 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.17/LICENSE */
3
+ function _OverloadYield(e, d) {
4
+ this.v = e, this.k = d;
5
+ }
3
6
  function _arrayLikeToArray(r, a) {
4
7
  (a == null || a > r.length) && (a = r.length);
5
8
  for (var e = 0, n = Array(a);e < a; e++)
@@ -15,9 +18,11 @@ function _iterableToArrayLimit(r, l) {
15
18
  if (t != null) {
16
19
  var e, n, i, u, a = [], f = true, o = false;
17
20
  try {
18
- if (i = (t = t.call(r)).next, l === 0)
19
- ;
20
- else
21
+ if (i = (t = t.call(r)).next, l === 0) {
22
+ if (Object(t) !== t)
23
+ return;
24
+ f = false;
25
+ } else
21
26
  for (;!(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = true)
22
27
  ;
23
28
  } catch (r) {
@@ -38,6 +43,7 @@ function _nonIterableRest() {
38
43
  throw new TypeError(`Invalid attempt to destructure non-iterable instance.
39
44
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`);
40
45
  }
46
+ /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
41
47
  function _slicedToArray(r, e) {
42
48
  return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
43
49
  }
@@ -49,6 +55,54 @@ function _unsupportedIterableToArray(r, a) {
49
55
  return t === "Object" && r.constructor && (t = r.constructor.name), t === "Map" || t === "Set" ? Array.from(r) : t === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : undefined;
50
56
  }
51
57
  }
58
+ function AsyncGenerator(e) {
59
+ var t, n;
60
+ function resume(t, n) {
61
+ try {
62
+ var r = e[t](n), o = r.value, u = o instanceof _OverloadYield;
63
+ Promise.resolve(u ? o.v : o).then(function(n) {
64
+ if (u) {
65
+ var i = t === "return" && o.k ? t : "next";
66
+ if (!o.k || n.done)
67
+ return resume(i, n);
68
+ n = e[i](n).value;
69
+ }
70
+ settle(!!r.done, n);
71
+ }, function(e) {
72
+ resume("throw", e);
73
+ });
74
+ } catch (e) {
75
+ settle(2, e);
76
+ }
77
+ }
78
+ function settle(e, r) {
79
+ e === 2 ? t.reject(r) : t.resolve({
80
+ value: r,
81
+ done: e
82
+ }), (t = t.next) ? resume(t.key, t.arg) : n = null;
83
+ }
84
+ this._invoke = function(e, r) {
85
+ return new Promise(function(o, u) {
86
+ var i = {
87
+ key: e,
88
+ arg: r,
89
+ resolve: o,
90
+ reject: u,
91
+ next: null
92
+ };
93
+ n ? n = n.next = i : (t = n = i, resume(e, r));
94
+ });
95
+ }, typeof e.return != "function" && (this.return = undefined);
96
+ }
97
+ AsyncGenerator.prototype[typeof Symbol == "function" && Symbol.asyncIterator || "@@asyncIterator"] = function() {
98
+ return this;
99
+ }, AsyncGenerator.prototype.next = function(e) {
100
+ return this._invoke("next", e);
101
+ }, AsyncGenerator.prototype.throw = function(e) {
102
+ return this._invoke("throw", e);
103
+ }, AsyncGenerator.prototype.return = function(e) {
104
+ return this._invoke("return", e);
105
+ };
52
106
  var entries = Object.entries;
53
107
  var setPrototypeOf = Object.setPrototypeOf;
54
108
  var isFrozen = Object.isFrozen;
@@ -60,38 +114,37 @@ var create = Object.create;
60
114
  var _ref = typeof Reflect !== "undefined" && Reflect;
61
115
  var apply = _ref.apply;
62
116
  var construct = _ref.construct;
63
- if (!freeze) {
117
+ if (!freeze)
64
118
  freeze = function freeze(x) {
65
119
  return x;
66
120
  };
67
- }
68
- if (!seal) {
121
+ if (!seal)
69
122
  seal = function seal(x) {
70
123
  return x;
71
124
  };
72
- }
73
- if (!apply) {
125
+ if (!apply)
74
126
  apply = function apply(func, thisArg) {
75
- for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2;_key < _len; _key++) {
127
+ for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2;_key < _len; _key++)
76
128
  args[_key - 2] = arguments[_key];
77
- }
78
129
  return func.apply(thisArg, args);
79
130
  };
80
- }
81
- if (!construct) {
131
+ if (!construct)
82
132
  construct = function construct(Func) {
83
- for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1;_key2 < _len2; _key2++) {
133
+ for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1;_key2 < _len2; _key2++)
84
134
  args[_key2 - 1] = arguments[_key2];
85
- }
86
135
  return new Func(...args);
87
136
  };
88
- }
89
137
  var arrayForEach = unapply(Array.prototype.forEach);
138
+ Array.prototype.indexOf;
90
139
  var arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);
91
140
  var arrayPop = unapply(Array.prototype.pop);
92
141
  var arrayPush = unapply(Array.prototype.push);
142
+ var arraySlice = unapply(Array.prototype.slice);
93
143
  var arraySplice = unapply(Array.prototype.splice);
94
144
  var arrayIsArray = Array.isArray;
145
+ var setCreate = unconstruct(Set);
146
+ var setAdd = unapply(Set.prototype.add);
147
+ var setHas = unapply(Set.prototype.has);
95
148
  var stringToLowerCase = unapply(String.prototype.toLowerCase);
96
149
  var stringToString = unapply(String.prototype.toString);
97
150
  var stringMatch = unapply(String.prototype.match);
@@ -108,40 +161,34 @@ var regExpTest = unapply(RegExp.prototype.test);
108
161
  var typeErrorCreate = unconstruct(TypeError);
109
162
  function unapply(func) {
110
163
  return function(thisArg) {
111
- if (thisArg instanceof RegExp) {
164
+ if (thisArg instanceof RegExp)
112
165
  thisArg.lastIndex = 0;
113
- }
114
- for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1;_key3 < _len3; _key3++) {
166
+ for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1;_key3 < _len3; _key3++)
115
167
  args[_key3 - 1] = arguments[_key3];
116
- }
117
168
  return apply(func, thisArg, args);
118
169
  };
119
170
  }
120
171
  function unconstruct(Func) {
121
172
  return function() {
122
- for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0;_key4 < _len4; _key4++) {
173
+ for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0;_key4 < _len4; _key4++)
123
174
  args[_key4] = arguments[_key4];
124
- }
125
175
  return construct(Func, args);
126
176
  };
127
177
  }
128
178
  function addToSet(set, array) {
129
179
  let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;
130
- if (setPrototypeOf) {
180
+ if (setPrototypeOf)
131
181
  setPrototypeOf(set, null);
132
- }
133
- if (!arrayIsArray(array)) {
182
+ if (!arrayIsArray(array))
134
183
  return set;
135
- }
136
184
  let l = array.length;
137
185
  while (l--) {
138
186
  let element = array[l];
139
187
  if (typeof element === "string") {
140
188
  const lcElement = transformCaseFunc(element);
141
189
  if (lcElement !== element) {
142
- if (!isFrozen(array)) {
190
+ if (!isFrozen(array))
143
191
  array[l] = lcElement;
144
- }
145
192
  element = lcElement;
146
193
  }
147
194
  }
@@ -150,12 +197,9 @@ function addToSet(set, array) {
150
197
  return set;
151
198
  }
152
199
  function cleanArray(array) {
153
- for (let index = 0;index < array.length; index++) {
154
- const isPropertyExist = objectHasOwnProperty(array, index);
155
- if (!isPropertyExist) {
200
+ for (let index = 0;index < array.length; index++)
201
+ if (!objectHasOwnProperty(array, index))
156
202
  array[index] = null;
157
- }
158
- }
159
203
  return array;
160
204
  }
161
205
  function clone(object) {
@@ -164,44 +208,35 @@ function clone(object) {
164
208
  var _ref3 = _slicedToArray(_ref2, 2);
165
209
  const property = _ref3[0];
166
210
  const value = _ref3[1];
167
- const isPropertyExist = objectHasOwnProperty(object, property);
168
- if (isPropertyExist) {
169
- if (arrayIsArray(value)) {
211
+ if (objectHasOwnProperty(object, property)) {
212
+ if (arrayIsArray(value))
170
213
  newObject[property] = cleanArray(value);
171
- } else if (value && typeof value === "object" && value.constructor === Object) {
214
+ else if (value && typeof value === "object" && value.constructor === Object)
172
215
  newObject[property] = clone(value);
173
- } else {
216
+ else
174
217
  newObject[property] = value;
175
- }
176
218
  }
177
219
  }
178
220
  return newObject;
179
221
  }
180
222
  function stringifyValue(value) {
181
223
  switch (typeof value) {
182
- case "string": {
224
+ case "string":
183
225
  return value;
184
- }
185
- case "number": {
226
+ case "number":
186
227
  return numberToString(value);
187
- }
188
- case "boolean": {
228
+ case "boolean":
189
229
  return booleanToString(value);
190
- }
191
- case "bigint": {
230
+ case "bigint":
192
231
  return bigintToString ? bigintToString(value) : "0";
193
- }
194
- case "symbol": {
232
+ case "symbol":
195
233
  return symbolToString ? symbolToString(value) : "Symbol()";
196
- }
197
- case "undefined": {
234
+ case "undefined":
198
235
  return objectToString(value);
199
- }
200
236
  case "function":
201
237
  case "object": {
202
- if (value === null) {
238
+ if (value === null)
203
239
  return objectToString(value);
204
- }
205
240
  const valueAsRecord = value;
206
241
  const valueToString = lookupGetter(valueAsRecord, "toString");
207
242
  if (typeof valueToString === "function") {
@@ -210,21 +245,18 @@ function stringifyValue(value) {
210
245
  }
211
246
  return objectToString(value);
212
247
  }
213
- default: {
248
+ default:
214
249
  return objectToString(value);
215
- }
216
250
  }
217
251
  }
218
252
  function lookupGetter(object, prop) {
219
253
  while (object !== null) {
220
254
  const desc = getOwnPropertyDescriptor(object, prop);
221
255
  if (desc) {
222
- if (desc.get) {
256
+ if (desc.get)
223
257
  return unapply(desc.get);
224
- }
225
- if (typeof desc.value === "function") {
258
+ if (typeof desc.value === "function")
226
259
  return unapply(desc.value);
227
- }
228
260
  }
229
261
  object = getPrototypeOf(object);
230
262
  }
@@ -233,6 +265,15 @@ function lookupGetter(object, prop) {
233
265
  }
234
266
  return fallbackValue;
235
267
  }
268
+ function lookupAccessor(object, prop) {
269
+ while (object !== null) {
270
+ const desc = getOwnPropertyDescriptor(object, prop);
271
+ if (desc)
272
+ return desc.get ? unapply(desc.get) : null;
273
+ object = getPrototypeOf(object);
274
+ }
275
+ return null;
276
+ }
236
277
  function isRegex(value) {
237
278
  try {
238
279
  regExpTest(value, "");
@@ -241,17 +282,654 @@ function isRegex(value) {
241
282
  return false;
242
283
  }
243
284
  }
244
- var html$1 = freeze(["a", "abbr", "acronym", "address", "area", "article", "aside", "audio", "b", "bdi", "bdo", "big", "blink", "blockquote", "body", "br", "button", "canvas", "caption", "center", "cite", "code", "col", "colgroup", "content", "data", "datalist", "dd", "decorator", "del", "details", "dfn", "dialog", "dir", "div", "dl", "dt", "element", "em", "fieldset", "figcaption", "figure", "font", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "img", "input", "ins", "kbd", "label", "legend", "li", "main", "map", "mark", "marquee", "menu", "menuitem", "meter", "nav", "nobr", "ol", "optgroup", "option", "output", "p", "picture", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "search", "section", "select", "shadow", "slot", "small", "source", "spacer", "span", "strike", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "time", "tr", "track", "tt", "u", "ul", "var", "video", "wbr"]);
245
- var svg$1 = freeze(["svg", "a", "altglyph", "altglyphdef", "altglyphitem", "animatecolor", "animatemotion", "animatetransform", "circle", "clippath", "defs", "desc", "ellipse", "enterkeyhint", "exportparts", "filter", "font", "g", "glyph", "glyphref", "hkern", "image", "inputmode", "line", "lineargradient", "marker", "mask", "metadata", "mpath", "part", "path", "pattern", "polygon", "polyline", "radialgradient", "rect", "stop", "style", "switch", "symbol", "text", "textpath", "title", "tref", "tspan", "view", "vkern"]);
246
- var svgFilters = freeze(["feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feDropShadow", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence"]);
247
- var svgDisallowed = freeze(["animate", "color-profile", "cursor", "discard", "font-face", "font-face-format", "font-face-name", "font-face-src", "font-face-uri", "foreignobject", "hatch", "hatchpath", "mesh", "meshgradient", "meshpatch", "meshrow", "missing-glyph", "script", "set", "solidcolor", "unknown", "use"]);
248
- var mathMl$1 = freeze(["math", "menclose", "merror", "mfenced", "mfrac", "mglyph", "mi", "mlabeledtr", "mmultiscripts", "mn", "mo", "mover", "mpadded", "mphantom", "mroot", "mrow", "ms", "mspace", "msqrt", "mstyle", "msub", "msup", "msubsup", "mtable", "mtd", "mtext", "mtr", "munder", "munderover", "mprescripts"]);
249
- var mathMlDisallowed = freeze(["maction", "maligngroup", "malignmark", "mlongdiv", "mscarries", "mscarry", "msgroup", "mstack", "msline", "msrow", "semantics", "annotation", "annotation-xml", "mprescripts", "none"]);
285
+ var html$1 = freeze([
286
+ "a",
287
+ "abbr",
288
+ "acronym",
289
+ "address",
290
+ "area",
291
+ "article",
292
+ "aside",
293
+ "audio",
294
+ "b",
295
+ "bdi",
296
+ "bdo",
297
+ "big",
298
+ "blink",
299
+ "blockquote",
300
+ "body",
301
+ "br",
302
+ "button",
303
+ "canvas",
304
+ "caption",
305
+ "center",
306
+ "cite",
307
+ "code",
308
+ "col",
309
+ "colgroup",
310
+ "content",
311
+ "data",
312
+ "datalist",
313
+ "dd",
314
+ "decorator",
315
+ "del",
316
+ "details",
317
+ "dfn",
318
+ "dialog",
319
+ "dir",
320
+ "div",
321
+ "dl",
322
+ "dt",
323
+ "element",
324
+ "em",
325
+ "fieldset",
326
+ "figcaption",
327
+ "figure",
328
+ "font",
329
+ "footer",
330
+ "form",
331
+ "h1",
332
+ "h2",
333
+ "h3",
334
+ "h4",
335
+ "h5",
336
+ "h6",
337
+ "head",
338
+ "header",
339
+ "hgroup",
340
+ "hr",
341
+ "html",
342
+ "i",
343
+ "img",
344
+ "input",
345
+ "ins",
346
+ "kbd",
347
+ "label",
348
+ "legend",
349
+ "li",
350
+ "main",
351
+ "map",
352
+ "mark",
353
+ "marquee",
354
+ "menu",
355
+ "menuitem",
356
+ "meter",
357
+ "nav",
358
+ "nobr",
359
+ "ol",
360
+ "optgroup",
361
+ "option",
362
+ "output",
363
+ "p",
364
+ "picture",
365
+ "pre",
366
+ "progress",
367
+ "q",
368
+ "rp",
369
+ "rt",
370
+ "ruby",
371
+ "s",
372
+ "samp",
373
+ "search",
374
+ "section",
375
+ "select",
376
+ "shadow",
377
+ "slot",
378
+ "small",
379
+ "source",
380
+ "spacer",
381
+ "span",
382
+ "strike",
383
+ "strong",
384
+ "style",
385
+ "sub",
386
+ "summary",
387
+ "sup",
388
+ "table",
389
+ "tbody",
390
+ "td",
391
+ "template",
392
+ "textarea",
393
+ "tfoot",
394
+ "th",
395
+ "thead",
396
+ "time",
397
+ "tr",
398
+ "track",
399
+ "tt",
400
+ "u",
401
+ "ul",
402
+ "var",
403
+ "video",
404
+ "wbr"
405
+ ]);
406
+ var svg$1 = freeze([
407
+ "svg",
408
+ "a",
409
+ "altglyph",
410
+ "altglyphdef",
411
+ "altglyphitem",
412
+ "animatecolor",
413
+ "animatemotion",
414
+ "animatetransform",
415
+ "circle",
416
+ "clippath",
417
+ "defs",
418
+ "desc",
419
+ "ellipse",
420
+ "enterkeyhint",
421
+ "exportparts",
422
+ "filter",
423
+ "font",
424
+ "g",
425
+ "glyph",
426
+ "glyphref",
427
+ "hkern",
428
+ "image",
429
+ "inputmode",
430
+ "line",
431
+ "lineargradient",
432
+ "marker",
433
+ "mask",
434
+ "metadata",
435
+ "mpath",
436
+ "part",
437
+ "path",
438
+ "pattern",
439
+ "polygon",
440
+ "polyline",
441
+ "radialgradient",
442
+ "rect",
443
+ "stop",
444
+ "style",
445
+ "switch",
446
+ "symbol",
447
+ "text",
448
+ "textpath",
449
+ "title",
450
+ "tref",
451
+ "tspan",
452
+ "view",
453
+ "vkern"
454
+ ]);
455
+ var svgFilters = freeze([
456
+ "feBlend",
457
+ "feColorMatrix",
458
+ "feComponentTransfer",
459
+ "feComposite",
460
+ "feConvolveMatrix",
461
+ "feDiffuseLighting",
462
+ "feDisplacementMap",
463
+ "feDistantLight",
464
+ "feDropShadow",
465
+ "feFlood",
466
+ "feFuncA",
467
+ "feFuncB",
468
+ "feFuncG",
469
+ "feFuncR",
470
+ "feGaussianBlur",
471
+ "feImage",
472
+ "feMerge",
473
+ "feMergeNode",
474
+ "feMorphology",
475
+ "feOffset",
476
+ "fePointLight",
477
+ "feSpecularLighting",
478
+ "feSpotLight",
479
+ "feTile",
480
+ "feTurbulence"
481
+ ]);
482
+ var svgDisallowed = freeze([
483
+ "animate",
484
+ "color-profile",
485
+ "cursor",
486
+ "discard",
487
+ "font-face",
488
+ "font-face-format",
489
+ "font-face-name",
490
+ "font-face-src",
491
+ "font-face-uri",
492
+ "foreignobject",
493
+ "hatch",
494
+ "hatchpath",
495
+ "mesh",
496
+ "meshgradient",
497
+ "meshpatch",
498
+ "meshrow",
499
+ "missing-glyph",
500
+ "script",
501
+ "set",
502
+ "solidcolor",
503
+ "unknown",
504
+ "use"
505
+ ]);
506
+ var mathMl$1 = freeze([
507
+ "math",
508
+ "menclose",
509
+ "merror",
510
+ "mfenced",
511
+ "mfrac",
512
+ "mglyph",
513
+ "mi",
514
+ "mlabeledtr",
515
+ "mmultiscripts",
516
+ "mn",
517
+ "mo",
518
+ "mover",
519
+ "mpadded",
520
+ "mphantom",
521
+ "mroot",
522
+ "mrow",
523
+ "ms",
524
+ "mspace",
525
+ "msqrt",
526
+ "mstyle",
527
+ "msub",
528
+ "msup",
529
+ "msubsup",
530
+ "mtable",
531
+ "mtd",
532
+ "mtext",
533
+ "mtr",
534
+ "munder",
535
+ "munderover",
536
+ "mprescripts"
537
+ ]);
538
+ var mathMlDisallowed = freeze([
539
+ "maction",
540
+ "maligngroup",
541
+ "malignmark",
542
+ "mlongdiv",
543
+ "mscarries",
544
+ "mscarry",
545
+ "msgroup",
546
+ "mstack",
547
+ "msline",
548
+ "msrow",
549
+ "semantics",
550
+ "annotation",
551
+ "annotation-xml",
552
+ "mprescripts",
553
+ "none"
554
+ ]);
250
555
  var text = freeze(["#text"]);
251
- var html = freeze(["accept", "action", "align", "alt", "autocapitalize", "autocomplete", "autopictureinpicture", "autoplay", "background", "bgcolor", "border", "capture", "cellpadding", "cellspacing", "checked", "cite", "class", "clear", "color", "cols", "colspan", "command", "commandfor", "controls", "controlslist", "coords", "crossorigin", "datetime", "decoding", "default", "dir", "disabled", "disablepictureinpicture", "disableremoteplayback", "download", "draggable", "enctype", "enterkeyhint", "exportparts", "face", "for", "headers", "height", "hidden", "high", "href", "hreflang", "id", "inert", "inputmode", "integrity", "ismap", "kind", "label", "lang", "list", "loading", "loop", "low", "max", "maxlength", "media", "method", "min", "minlength", "multiple", "muted", "name", "nonce", "noshade", "novalidate", "nowrap", "open", "optimum", "part", "pattern", "placeholder", "playsinline", "popover", "popovertarget", "popovertargetaction", "poster", "preload", "pubdate", "radiogroup", "readonly", "rel", "required", "rev", "reversed", "role", "rows", "rowspan", "spellcheck", "scope", "selected", "shape", "size", "sizes", "slot", "span", "srclang", "start", "src", "srcset", "step", "style", "summary", "tabindex", "title", "translate", "type", "usemap", "valign", "value", "width", "wrap", "xmlns"]);
252
- var svg = freeze(["accent-height", "accumulate", "additive", "alignment-baseline", "amplitude", "ascent", "attributename", "attributetype", "azimuth", "basefrequency", "baseline-shift", "begin", "bias", "by", "class", "clip", "clippathunits", "clip-path", "clip-rule", "color", "color-interpolation", "color-interpolation-filters", "color-profile", "color-rendering", "cx", "cy", "d", "dx", "dy", "diffuseconstant", "direction", "display", "divisor", "dominant-baseline", "dur", "edgemode", "elevation", "end", "exponent", "fill", "fill-opacity", "fill-rule", "filter", "filterunits", "flood-color", "flood-opacity", "font-family", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-variant", "font-weight", "fx", "fy", "g1", "g2", "glyph-name", "glyphref", "gradientunits", "gradienttransform", "height", "href", "id", "image-rendering", "in", "in2", "intercept", "k", "k1", "k2", "k3", "k4", "kerning", "keypoints", "keysplines", "keytimes", "lang", "lengthadjust", "letter-spacing", "kernelmatrix", "kernelunitlength", "lighting-color", "local", "marker-end", "marker-mid", "marker-start", "markerheight", "markerunits", "markerwidth", "maskcontentunits", "maskunits", "max", "mask", "mask-type", "media", "method", "mode", "min", "name", "numoctaves", "offset", "operator", "opacity", "order", "orient", "orientation", "origin", "overflow", "paint-order", "path", "pathlength", "patterncontentunits", "patterntransform", "patternunits", "pointer-events", "points", "preservealpha", "preserveaspectratio", "primitiveunits", "r", "rx", "ry", "radius", "refx", "refy", "repeatcount", "repeatdur", "restart", "result", "rotate", "scale", "seed", "shape-rendering", "slope", "specularconstant", "specularexponent", "spreadmethod", "startoffset", "stddeviation", "stitchtiles", "stop-color", "stop-opacity", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke", "stroke-width", "style", "surfacescale", "systemlanguage", "tabindex", "tablevalues", "targetx", "targety", "transform", "transform-origin", "text-anchor", "text-decoration", "text-orientation", "text-rendering", "textlength", "type", "u1", "u2", "unicode", "values", "vector-effect", "viewbox", "visibility", "version", "vert-adv-y", "vert-origin-x", "vert-origin-y", "width", "word-spacing", "wrap", "writing-mode", "xchannelselector", "ychannelselector", "x", "x1", "x2", "xmlns", "y", "y1", "y2", "z", "zoomandpan"]);
253
- var mathMl = freeze(["accent", "accentunder", "align", "bevelled", "close", "columnalign", "columnlines", "columnspacing", "columnspan", "denomalign", "depth", "dir", "display", "displaystyle", "encoding", "fence", "frame", "height", "href", "id", "largeop", "length", "linethickness", "lquote", "lspace", "mathbackground", "mathcolor", "mathsize", "mathvariant", "maxsize", "minsize", "movablelimits", "notation", "numalign", "open", "rowalign", "rowlines", "rowspacing", "rowspan", "rspace", "rquote", "scriptlevel", "scriptminsize", "scriptsizemultiplier", "selection", "separator", "separators", "stretchy", "subscriptshift", "supscriptshift", "symmetric", "voffset", "width", "xmlns"]);
254
- var xml = freeze(["xlink:href", "xml:id", "xlink:title", "xml:space", "xmlns:xlink"]);
556
+ var html = freeze([
557
+ "accept",
558
+ "action",
559
+ "align",
560
+ "alt",
561
+ "autocapitalize",
562
+ "autocomplete",
563
+ "autopictureinpicture",
564
+ "autoplay",
565
+ "background",
566
+ "bgcolor",
567
+ "border",
568
+ "capture",
569
+ "cellpadding",
570
+ "cellspacing",
571
+ "checked",
572
+ "cite",
573
+ "class",
574
+ "clear",
575
+ "color",
576
+ "cols",
577
+ "colspan",
578
+ "command",
579
+ "commandfor",
580
+ "controls",
581
+ "controlslist",
582
+ "coords",
583
+ "crossorigin",
584
+ "datetime",
585
+ "decoding",
586
+ "default",
587
+ "dir",
588
+ "disabled",
589
+ "disablepictureinpicture",
590
+ "disableremoteplayback",
591
+ "download",
592
+ "draggable",
593
+ "enctype",
594
+ "enterkeyhint",
595
+ "exportparts",
596
+ "face",
597
+ "for",
598
+ "headers",
599
+ "height",
600
+ "hidden",
601
+ "high",
602
+ "href",
603
+ "hreflang",
604
+ "id",
605
+ "inert",
606
+ "inputmode",
607
+ "integrity",
608
+ "ismap",
609
+ "kind",
610
+ "label",
611
+ "lang",
612
+ "list",
613
+ "loading",
614
+ "loop",
615
+ "low",
616
+ "max",
617
+ "maxlength",
618
+ "media",
619
+ "method",
620
+ "min",
621
+ "minlength",
622
+ "multiple",
623
+ "muted",
624
+ "name",
625
+ "nonce",
626
+ "noshade",
627
+ "novalidate",
628
+ "nowrap",
629
+ "open",
630
+ "optimum",
631
+ "part",
632
+ "pattern",
633
+ "placeholder",
634
+ "playsinline",
635
+ "popover",
636
+ "popovertarget",
637
+ "popovertargetaction",
638
+ "poster",
639
+ "preload",
640
+ "pubdate",
641
+ "radiogroup",
642
+ "readonly",
643
+ "rel",
644
+ "required",
645
+ "rev",
646
+ "reversed",
647
+ "role",
648
+ "rows",
649
+ "rowspan",
650
+ "spellcheck",
651
+ "scope",
652
+ "selected",
653
+ "shape",
654
+ "size",
655
+ "sizes",
656
+ "slot",
657
+ "span",
658
+ "srclang",
659
+ "start",
660
+ "src",
661
+ "srcset",
662
+ "step",
663
+ "style",
664
+ "summary",
665
+ "tabindex",
666
+ "title",
667
+ "translate",
668
+ "type",
669
+ "usemap",
670
+ "valign",
671
+ "value",
672
+ "width",
673
+ "wrap",
674
+ "xmlns"
675
+ ]);
676
+ var svg = freeze([
677
+ "accent-height",
678
+ "accumulate",
679
+ "additive",
680
+ "alignment-baseline",
681
+ "amplitude",
682
+ "ascent",
683
+ "attributename",
684
+ "attributetype",
685
+ "azimuth",
686
+ "basefrequency",
687
+ "baseline-shift",
688
+ "begin",
689
+ "bias",
690
+ "by",
691
+ "class",
692
+ "clip",
693
+ "clippathunits",
694
+ "clip-path",
695
+ "clip-rule",
696
+ "color",
697
+ "color-interpolation",
698
+ "color-interpolation-filters",
699
+ "color-profile",
700
+ "color-rendering",
701
+ "cx",
702
+ "cy",
703
+ "d",
704
+ "dx",
705
+ "dy",
706
+ "diffuseconstant",
707
+ "direction",
708
+ "display",
709
+ "divisor",
710
+ "dominant-baseline",
711
+ "dur",
712
+ "edgemode",
713
+ "elevation",
714
+ "end",
715
+ "exponent",
716
+ "fill",
717
+ "fill-opacity",
718
+ "fill-rule",
719
+ "filter",
720
+ "filterunits",
721
+ "flood-color",
722
+ "flood-opacity",
723
+ "font-family",
724
+ "font-size",
725
+ "font-size-adjust",
726
+ "font-stretch",
727
+ "font-style",
728
+ "font-variant",
729
+ "font-weight",
730
+ "fx",
731
+ "fy",
732
+ "g1",
733
+ "g2",
734
+ "glyph-name",
735
+ "glyphref",
736
+ "gradientunits",
737
+ "gradienttransform",
738
+ "height",
739
+ "href",
740
+ "id",
741
+ "image-rendering",
742
+ "in",
743
+ "in2",
744
+ "intercept",
745
+ "k",
746
+ "k1",
747
+ "k2",
748
+ "k3",
749
+ "k4",
750
+ "kerning",
751
+ "keypoints",
752
+ "keysplines",
753
+ "keytimes",
754
+ "lang",
755
+ "lengthadjust",
756
+ "letter-spacing",
757
+ "kernelmatrix",
758
+ "kernelunitlength",
759
+ "lighting-color",
760
+ "local",
761
+ "marker-end",
762
+ "marker-mid",
763
+ "marker-start",
764
+ "markerheight",
765
+ "markerunits",
766
+ "markerwidth",
767
+ "maskcontentunits",
768
+ "maskunits",
769
+ "max",
770
+ "mask",
771
+ "mask-type",
772
+ "media",
773
+ "method",
774
+ "mode",
775
+ "min",
776
+ "name",
777
+ "numoctaves",
778
+ "offset",
779
+ "operator",
780
+ "opacity",
781
+ "order",
782
+ "orient",
783
+ "orientation",
784
+ "origin",
785
+ "overflow",
786
+ "paint-order",
787
+ "path",
788
+ "pathlength",
789
+ "patterncontentunits",
790
+ "patterntransform",
791
+ "patternunits",
792
+ "pointer-events",
793
+ "points",
794
+ "preservealpha",
795
+ "preserveaspectratio",
796
+ "primitiveunits",
797
+ "r",
798
+ "rx",
799
+ "ry",
800
+ "radius",
801
+ "refx",
802
+ "refy",
803
+ "repeatcount",
804
+ "repeatdur",
805
+ "restart",
806
+ "result",
807
+ "rotate",
808
+ "scale",
809
+ "seed",
810
+ "shape-rendering",
811
+ "slope",
812
+ "specularconstant",
813
+ "specularexponent",
814
+ "spreadmethod",
815
+ "startoffset",
816
+ "stddeviation",
817
+ "stitchtiles",
818
+ "stop-color",
819
+ "stop-opacity",
820
+ "stroke-dasharray",
821
+ "stroke-dashoffset",
822
+ "stroke-linecap",
823
+ "stroke-linejoin",
824
+ "stroke-miterlimit",
825
+ "stroke-opacity",
826
+ "stroke",
827
+ "stroke-width",
828
+ "style",
829
+ "surfacescale",
830
+ "systemlanguage",
831
+ "tabindex",
832
+ "tablevalues",
833
+ "targetx",
834
+ "targety",
835
+ "transform",
836
+ "transform-origin",
837
+ "text-anchor",
838
+ "text-decoration",
839
+ "text-orientation",
840
+ "text-rendering",
841
+ "textlength",
842
+ "type",
843
+ "u1",
844
+ "u2",
845
+ "unicode",
846
+ "values",
847
+ "vector-effect",
848
+ "viewbox",
849
+ "visibility",
850
+ "version",
851
+ "vert-adv-y",
852
+ "vert-origin-x",
853
+ "vert-origin-y",
854
+ "width",
855
+ "word-spacing",
856
+ "wrap",
857
+ "writing-mode",
858
+ "xchannelselector",
859
+ "ychannelselector",
860
+ "x",
861
+ "x1",
862
+ "x2",
863
+ "xmlns",
864
+ "y",
865
+ "y1",
866
+ "y2",
867
+ "z",
868
+ "zoomandpan"
869
+ ]);
870
+ var mathMl = freeze([
871
+ "accent",
872
+ "accentunder",
873
+ "align",
874
+ "bevelled",
875
+ "close",
876
+ "columnalign",
877
+ "columnlines",
878
+ "columnspacing",
879
+ "columnspan",
880
+ "denomalign",
881
+ "depth",
882
+ "dir",
883
+ "display",
884
+ "displaystyle",
885
+ "encoding",
886
+ "fence",
887
+ "frame",
888
+ "height",
889
+ "href",
890
+ "id",
891
+ "largeop",
892
+ "length",
893
+ "linethickness",
894
+ "lquote",
895
+ "lspace",
896
+ "mathbackground",
897
+ "mathcolor",
898
+ "mathsize",
899
+ "mathvariant",
900
+ "maxsize",
901
+ "minsize",
902
+ "movablelimits",
903
+ "notation",
904
+ "numalign",
905
+ "open",
906
+ "rowalign",
907
+ "rowlines",
908
+ "rowspacing",
909
+ "rowspan",
910
+ "rspace",
911
+ "rquote",
912
+ "scriptlevel",
913
+ "scriptminsize",
914
+ "scriptsizemultiplier",
915
+ "selection",
916
+ "separator",
917
+ "separators",
918
+ "stretchy",
919
+ "subscriptshift",
920
+ "supscriptshift",
921
+ "symmetric",
922
+ "voffset",
923
+ "width",
924
+ "xmlns"
925
+ ]);
926
+ var xml = freeze([
927
+ "xlink:href",
928
+ "xml:id",
929
+ "xlink:title",
930
+ "xml:space",
931
+ "xmlns:xlink"
932
+ ]);
255
933
  var MUSTACHE_EXPR = seal(/{{[\w\W]*|^[\w\W]*}}/g);
256
934
  var ERB_EXPR = seal(/<%[\w\W]*|^[\w\W]*%>/g);
257
935
  var TMPLIT_EXPR = seal(/\${[\w\W]*/g);
@@ -280,27 +958,26 @@ var NODE_TYPE = {
280
958
  documentFragment: 11,
281
959
  notation: 12
282
960
  };
283
- var LITERAL_TEXT_ELEMENT_NAMES = ["style", "script", "xmp", "iframe", "noembed", "noframes", "plaintext", "noscript"];
284
- var LITERAL_TEXT_ELEMENTS = freeze(addToSet({}, LITERAL_TEXT_ELEMENT_NAMES));
285
- var LITERAL_TEXT_CLOSE = function() {
286
- const map = {};
287
- arrayForEach(LITERAL_TEXT_ELEMENT_NAMES, (name) => {
288
- map[name] = seal(new RegExp("</" + name + "(?=[\\t\\n\\f\\r />])", "i"));
289
- });
290
- return freeze(map);
291
- }();
961
+ var LITERAL_TEXT_ELEMENTS = freeze(addToSet({}, [
962
+ "style",
963
+ "script",
964
+ "xmp",
965
+ "iframe",
966
+ "noembed",
967
+ "noframes",
968
+ "plaintext",
969
+ "noscript"
970
+ ]));
292
971
  var getGlobal = function getGlobal() {
293
972
  return typeof window === "undefined" ? null : window;
294
973
  };
295
974
  var _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {
296
- if (typeof trustedTypes !== "object" || typeof trustedTypes.createPolicy !== "function") {
975
+ if (typeof trustedTypes !== "object" || typeof trustedTypes.createPolicy !== "function")
297
976
  return null;
298
- }
299
977
  let suffix = null;
300
978
  const ATTR_NAME = "data-tt-policy-suffix";
301
- if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {
979
+ if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME))
302
980
  suffix = purifyHostElement.getAttribute(ATTR_NAME);
303
- }
304
981
  const policyName = "dompurify" + (suffix ? "#" + suffix : "");
305
982
  try {
306
983
  return trustedTypes.createPolicy(policyName, {
@@ -339,7 +1016,7 @@ var _resolveObjectOption = function _resolveObjectOption(cfg, key, makeFallback)
339
1016
  function createDOMPurify() {
340
1017
  let window2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();
341
1018
  const DOMPurify = (root) => createDOMPurify(root);
342
- DOMPurify.version = "3.4.14";
1019
+ DOMPurify.version = "3.4.17";
343
1020
  DOMPurify.removed = [];
344
1021
  if (!window2 || !window2.document || window2.document.nodeType !== NODE_TYPE.document || !window2.Element) {
345
1022
  DOMPurify.isSupported = false;
@@ -349,13 +1026,14 @@ function createDOMPurify() {
349
1026
  const originalDocument = document;
350
1027
  const currentScript = originalDocument.currentScript;
351
1028
  window2.DocumentFragment;
352
- const { HTMLTemplateElement, Node, Element, NodeFilter, NamedNodeMap: _window$NamedNodeMap } = window2;
353
- _window$NamedNodeMap === undefined && (window2.NamedNodeMap || window2.MozNamedAttrMap);
1029
+ const { HTMLTemplateElement, Node, Element, NodeFilter } = window2;
1030
+ window2.NamedNodeMap === undefined && (window2.NamedNodeMap || window2.MozNamedAttrMap);
354
1031
  window2.HTMLFormElement;
355
1032
  const { DOMParser, trustedTypes } = window2;
356
1033
  const ElementPrototype = Element.prototype;
357
1034
  const cloneNode = lookupGetter(ElementPrototype, "cloneNode");
358
1035
  const remove = lookupGetter(ElementPrototype, "remove");
1036
+ const removeAttributeNode = lookupGetter(ElementPrototype, "removeAttributeNode");
359
1037
  const getNextSibling = lookupGetter(ElementPrototype, "nextSibling");
360
1038
  const getChildNodes = lookupGetter(ElementPrototype, "childNodes");
361
1039
  const getParentNode = lookupGetter(ElementPrototype, "parentNode");
@@ -370,11 +1048,14 @@ function createDOMPurify() {
370
1048
  const _readNodeName = function _readNodeName(node) {
371
1049
  return getNodeName ? getNodeName(node) : node.nodeName;
372
1050
  };
1051
+ const getNamespaceURI = lookupAccessor(ElementPrototype, "namespaceURI");
1052
+ const _readNamespaceURI = function _readNamespaceURI(element) {
1053
+ return getNamespaceURI ? getNamespaceURI(element) : element.namespaceURI;
1054
+ };
373
1055
  if (typeof HTMLTemplateElement === "function") {
374
1056
  const template = document.createElement("template");
375
- if (template.content && template.content.ownerDocument) {
1057
+ if (template.content && template.content.ownerDocument)
376
1058
  document = template.content.ownerDocument;
377
- }
378
1059
  }
379
1060
  let trustedTypesPolicy;
380
1061
  let emptyHTML = "";
@@ -382,9 +1063,8 @@ function createDOMPurify() {
382
1063
  let defaultTrustedTypesPolicyResolved = false;
383
1064
  let IN_TRUSTED_TYPES_POLICY = 0;
384
1065
  const _assertNotInTrustedTypesPolicy = function _assertNotInTrustedTypesPolicy() {
385
- if (IN_TRUSTED_TYPES_POLICY > 0) {
386
- throw typeErrorCreate("A configured TRUSTED_TYPES_POLICY callback (createHTML or " + "createScriptURL) must not call DOMPurify.sanitize, as that causes " + "infinite recursion. Do not pass a policy whose callbacks wrap " + 'DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted ' + 'Types" section of the README.');
387
- }
1066
+ if (IN_TRUSTED_TYPES_POLICY > 0)
1067
+ throw typeErrorCreate('A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.');
388
1068
  };
389
1069
  const _createTrustedHTML = function _createTrustedHTML(html) {
390
1070
  _assertNotInTrustedTypesPolicy();
@@ -418,9 +1098,20 @@ function createDOMPurify() {
418
1098
  const MUSTACHE_EXPR$1 = MUSTACHE_EXPR, ERB_EXPR$1 = ERB_EXPR, TMPLIT_EXPR$1 = TMPLIT_EXPR, DATA_ATTR$1 = DATA_ATTR, ARIA_ATTR$1 = ARIA_ATTR, IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA, ATTR_WHITESPACE$1 = ATTR_WHITESPACE, CUSTOM_ELEMENT$1 = CUSTOM_ELEMENT;
419
1099
  let IS_ALLOWED_URI$1 = IS_ALLOWED_URI;
420
1100
  let ALLOWED_TAGS = null;
421
- const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);
1101
+ const DEFAULT_ALLOWED_TAGS = addToSet({}, [
1102
+ ...html$1,
1103
+ ...svg$1,
1104
+ ...svgFilters,
1105
+ ...mathMl$1,
1106
+ ...text
1107
+ ]);
422
1108
  let ALLOWED_ATTR = null;
423
- const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);
1109
+ const DEFAULT_ALLOWED_ATTR = addToSet({}, [
1110
+ ...html,
1111
+ ...svg,
1112
+ ...mathMl,
1113
+ ...xml
1114
+ ]);
424
1115
  let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {
425
1116
  tagNameCheck: {
426
1117
  writable: true,
@@ -476,6 +1167,7 @@ function createDOMPurify() {
476
1167
  const SANITIZE_NAMED_PROPS_PREFIX = "user-content-";
477
1168
  let KEEP_CONTENT = true;
478
1169
  let IN_PLACE = false;
1170
+ let IN_PLACE_VISITED = null;
479
1171
  let USE_PROFILES = {};
480
1172
  let FORBID_CONTENTS = null;
481
1173
  const DEFAULT_FORBID_CONTENTS = addToSet({}, [
@@ -507,21 +1199,59 @@ function createDOMPurify() {
507
1199
  "xmp"
508
1200
  ]);
509
1201
  let DATA_URI_TAGS = null;
510
- const DEFAULT_DATA_URI_TAGS = addToSet({}, ["audio", "video", "img", "source", "image", "track"]);
1202
+ const DEFAULT_DATA_URI_TAGS = addToSet({}, [
1203
+ "audio",
1204
+ "video",
1205
+ "img",
1206
+ "source",
1207
+ "image",
1208
+ "track"
1209
+ ]);
511
1210
  let URI_SAFE_ATTRIBUTES = null;
512
- const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ["alt", "class", "for", "id", "label", "name", "pattern", "placeholder", "role", "summary", "title", "value", "style", "xmlns"]);
1211
+ const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [
1212
+ "alt",
1213
+ "class",
1214
+ "for",
1215
+ "id",
1216
+ "label",
1217
+ "name",
1218
+ "pattern",
1219
+ "placeholder",
1220
+ "role",
1221
+ "summary",
1222
+ "title",
1223
+ "value",
1224
+ "style",
1225
+ "xmlns"
1226
+ ]);
513
1227
  const MATHML_NAMESPACE = "http://www.w3.org/1998/Math/MathML";
514
1228
  const SVG_NAMESPACE = "http://www.w3.org/2000/svg";
515
1229
  const HTML_NAMESPACE = "http://www.w3.org/1999/xhtml";
516
1230
  let NAMESPACE = HTML_NAMESPACE;
517
1231
  let IS_EMPTY_INPUT = false;
518
1232
  let ALLOWED_NAMESPACES = null;
519
- const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);
520
- const DEFAULT_MATHML_TEXT_INTEGRATION_POINTS = freeze(["mi", "mo", "mn", "ms", "mtext"]);
1233
+ const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [
1234
+ MATHML_NAMESPACE,
1235
+ SVG_NAMESPACE,
1236
+ HTML_NAMESPACE
1237
+ ], stringToString);
1238
+ const DEFAULT_MATHML_TEXT_INTEGRATION_POINTS = freeze([
1239
+ "mi",
1240
+ "mo",
1241
+ "mn",
1242
+ "ms",
1243
+ "mtext"
1244
+ ]);
521
1245
  let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, DEFAULT_MATHML_TEXT_INTEGRATION_POINTS);
522
1246
  const DEFAULT_HTML_INTEGRATION_POINTS = freeze(["annotation-xml"]);
523
1247
  let HTML_INTEGRATION_POINTS = addToSet({}, DEFAULT_HTML_INTEGRATION_POINTS);
524
- const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ["title", "style", "font", "a", "script"]);
1248
+ const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [
1249
+ "title",
1250
+ "style",
1251
+ "font",
1252
+ "a",
1253
+ "script"
1254
+ ]);
525
1255
  let PARSER_MEDIA_TYPE = null;
526
1256
  const SUPPORTED_PARSER_MEDIA_TYPES = ["application/xhtml+xml", "text/html"];
527
1257
  const DEFAULT_PARSER_MEDIA_TYPE = "text/html";
@@ -533,24 +1263,16 @@ function createDOMPurify() {
533
1263
  };
534
1264
  const _parseConfig = function _parseConfig() {
535
1265
  let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
536
- if (CONFIG && CONFIG === cfg) {
1266
+ if (CONFIG && CONFIG === cfg)
537
1267
  return;
538
- }
539
- if (!cfg || typeof cfg !== "object") {
1268
+ if (!cfg || typeof cfg !== "object")
540
1269
  cfg = {};
541
- }
542
1270
  cfg = clone(cfg);
543
1271
  PARSER_MEDIA_TYPE = SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;
544
1272
  transformCaseFunc = PARSER_MEDIA_TYPE === "application/xhtml+xml" ? stringToString : stringToLowerCase;
545
- ALLOWED_TAGS = _resolveSetOption(cfg, "ALLOWED_TAGS", DEFAULT_ALLOWED_TAGS, {
546
- transform: transformCaseFunc
547
- });
548
- ALLOWED_ATTR = _resolveSetOption(cfg, "ALLOWED_ATTR", DEFAULT_ALLOWED_ATTR, {
549
- transform: transformCaseFunc
550
- });
551
- ALLOWED_NAMESPACES = _resolveSetOption(cfg, "ALLOWED_NAMESPACES", DEFAULT_ALLOWED_NAMESPACES, {
552
- transform: stringToString
553
- });
1273
+ ALLOWED_TAGS = _resolveSetOption(cfg, "ALLOWED_TAGS", DEFAULT_ALLOWED_TAGS, { transform: transformCaseFunc });
1274
+ ALLOWED_ATTR = _resolveSetOption(cfg, "ALLOWED_ATTR", DEFAULT_ALLOWED_ATTR, { transform: transformCaseFunc });
1275
+ ALLOWED_NAMESPACES = _resolveSetOption(cfg, "ALLOWED_NAMESPACES", DEFAULT_ALLOWED_NAMESPACES, { transform: stringToString });
554
1276
  URI_SAFE_ATTRIBUTES = _resolveSetOption(cfg, "ADD_URI_SAFE_ATTR", DEFAULT_URI_SAFE_ATTRIBUTES, {
555
1277
  transform: transformCaseFunc,
556
1278
  base: DEFAULT_URI_SAFE_ATTRIBUTES
@@ -559,15 +1281,9 @@ function createDOMPurify() {
559
1281
  transform: transformCaseFunc,
560
1282
  base: DEFAULT_DATA_URI_TAGS
561
1283
  });
562
- FORBID_CONTENTS = _resolveSetOption(cfg, "FORBID_CONTENTS", DEFAULT_FORBID_CONTENTS, {
563
- transform: transformCaseFunc
564
- });
565
- FORBID_TAGS = _resolveSetOption(cfg, "FORBID_TAGS", clone({}), {
566
- transform: transformCaseFunc
567
- });
568
- FORBID_ATTR = _resolveSetOption(cfg, "FORBID_ATTR", clone({}), {
569
- transform: transformCaseFunc
570
- });
1284
+ FORBID_CONTENTS = _resolveSetOption(cfg, "FORBID_CONTENTS", DEFAULT_FORBID_CONTENTS, { transform: transformCaseFunc });
1285
+ FORBID_TAGS = _resolveSetOption(cfg, "FORBID_TAGS", clone({}), { transform: transformCaseFunc });
1286
+ FORBID_ATTR = _resolveSetOption(cfg, "FORBID_ATTR", clone({}), { transform: transformCaseFunc });
571
1287
  USE_PROFILES = objectHasOwnProperty(cfg, "USE_PROFILES") ? cfg.USE_PROFILES && typeof cfg.USE_PROFILES === "object" ? clone(cfg.USE_PROFILES) : cfg.USE_PROFILES : false;
572
1288
  ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false;
573
1289
  ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false;
@@ -590,22 +1306,17 @@ function createDOMPurify() {
590
1306
  HTML_INTEGRATION_POINTS = _resolveObjectOption(cfg, "HTML_INTEGRATION_POINTS", () => addToSet({}, DEFAULT_HTML_INTEGRATION_POINTS));
591
1307
  const customElementHandling = _resolveObjectOption(cfg, "CUSTOM_ELEMENT_HANDLING", () => create(null));
592
1308
  CUSTOM_ELEMENT_HANDLING = create(null);
593
- if (objectHasOwnProperty(customElementHandling, "tagNameCheck") && isRegexOrFunction(customElementHandling.tagNameCheck)) {
1309
+ if (objectHasOwnProperty(customElementHandling, "tagNameCheck") && isRegexOrFunction(customElementHandling.tagNameCheck))
594
1310
  CUSTOM_ELEMENT_HANDLING.tagNameCheck = customElementHandling.tagNameCheck;
595
- }
596
- if (objectHasOwnProperty(customElementHandling, "attributeNameCheck") && isRegexOrFunction(customElementHandling.attributeNameCheck)) {
1311
+ if (objectHasOwnProperty(customElementHandling, "attributeNameCheck") && isRegexOrFunction(customElementHandling.attributeNameCheck))
597
1312
  CUSTOM_ELEMENT_HANDLING.attributeNameCheck = customElementHandling.attributeNameCheck;
598
- }
599
- if (objectHasOwnProperty(customElementHandling, "allowCustomizedBuiltInElements") && typeof customElementHandling.allowCustomizedBuiltInElements === "boolean") {
1313
+ if (objectHasOwnProperty(customElementHandling, "allowCustomizedBuiltInElements") && typeof customElementHandling.allowCustomizedBuiltInElements === "boolean")
600
1314
  CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = customElementHandling.allowCustomizedBuiltInElements;
601
- }
602
1315
  seal(CUSTOM_ELEMENT_HANDLING);
603
- if (SAFE_FOR_TEMPLATES) {
1316
+ if (SAFE_FOR_TEMPLATES)
604
1317
  ALLOW_DATA_ATTR = false;
605
- }
606
- if (RETURN_DOM_FRAGMENT) {
1318
+ if (RETURN_DOM_FRAGMENT)
607
1319
  RETURN_DOM = true;
608
- }
609
1320
  if (USE_PROFILES) {
610
1321
  ALLOWED_TAGS = addToSet({}, text);
611
1322
  ALLOWED_ATTR = create(null);
@@ -632,48 +1343,45 @@ function createDOMPurify() {
632
1343
  EXTRA_ELEMENT_HANDLING.tagCheck = null;
633
1344
  EXTRA_ELEMENT_HANDLING.attributeCheck = null;
634
1345
  if (objectHasOwnProperty(cfg, "ADD_TAGS")) {
635
- if (typeof cfg.ADD_TAGS === "function") {
1346
+ if (typeof cfg.ADD_TAGS === "function")
636
1347
  EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;
637
- } else if (arrayIsArray(cfg.ADD_TAGS)) {
638
- if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {
1348
+ else if (arrayIsArray(cfg.ADD_TAGS)) {
1349
+ if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS)
639
1350
  ALLOWED_TAGS = clone(ALLOWED_TAGS);
640
- }
641
1351
  addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);
642
1352
  }
643
1353
  }
644
1354
  if (objectHasOwnProperty(cfg, "ADD_ATTR")) {
645
- if (typeof cfg.ADD_ATTR === "function") {
1355
+ if (typeof cfg.ADD_ATTR === "function")
646
1356
  EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;
647
- } else if (arrayIsArray(cfg.ADD_ATTR)) {
648
- if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {
1357
+ else if (arrayIsArray(cfg.ADD_ATTR)) {
1358
+ if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR)
649
1359
  ALLOWED_ATTR = clone(ALLOWED_ATTR);
650
- }
651
1360
  addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);
652
1361
  }
653
1362
  }
654
1363
  if (objectHasOwnProperty(cfg, "ADD_FORBID_CONTENTS") && arrayIsArray(cfg.ADD_FORBID_CONTENTS)) {
655
- if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {
1364
+ if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS)
656
1365
  FORBID_CONTENTS = clone(FORBID_CONTENTS);
657
- }
658
1366
  addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);
659
1367
  }
660
- if (KEEP_CONTENT) {
1368
+ if (KEEP_CONTENT)
661
1369
  ALLOWED_TAGS["#text"] = true;
662
- }
663
- if (WHOLE_DOCUMENT) {
664
- addToSet(ALLOWED_TAGS, ["html", "head", "body"]);
665
- }
1370
+ if (WHOLE_DOCUMENT)
1371
+ addToSet(ALLOWED_TAGS, [
1372
+ "html",
1373
+ "head",
1374
+ "body"
1375
+ ]);
666
1376
  if (ALLOWED_TAGS.table) {
667
1377
  addToSet(ALLOWED_TAGS, ["tbody"]);
668
1378
  delete FORBID_TAGS.tbody;
669
1379
  }
670
1380
  if (cfg.TRUSTED_TYPES_POLICY) {
671
- if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== "function") {
1381
+ if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== "function")
672
1382
  throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');
673
- }
674
- if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== "function") {
1383
+ if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== "function")
675
1384
  throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');
676
- }
677
1385
  const previousTrustedTypesPolicy = trustedTypesPolicy;
678
1386
  trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;
679
1387
  try {
@@ -686,90 +1394,80 @@ function createDOMPurify() {
686
1394
  trustedTypesPolicy = undefined;
687
1395
  emptyHTML = "";
688
1396
  } else {
689
- if (trustedTypesPolicy === undefined) {
1397
+ if (trustedTypesPolicy === undefined)
690
1398
  trustedTypesPolicy = _getDefaultTrustedTypesPolicy();
691
- }
692
- if (trustedTypesPolicy && typeof emptyHTML === "string") {
1399
+ if (trustedTypesPolicy && typeof emptyHTML === "string")
693
1400
  emptyHTML = _createTrustedHTML("");
694
- }
695
1401
  }
696
- if (freeze) {
1402
+ if (freeze)
697
1403
  freeze(cfg);
698
- }
699
1404
  CONFIG = cfg;
700
1405
  };
701
- const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);
1406
+ const ALL_SVG_TAGS = addToSet({}, [
1407
+ ...svg$1,
1408
+ ...svgFilters,
1409
+ ...svgDisallowed
1410
+ ]);
702
1411
  const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);
703
1412
  const _checkSvgNamespace = function _checkSvgNamespace(tagName, parent, parentTagName) {
704
- if (parent.namespaceURI === HTML_NAMESPACE) {
1413
+ if (parent.namespaceURI === HTML_NAMESPACE)
705
1414
  return tagName === "svg";
706
- }
707
- if (parent.namespaceURI === MATHML_NAMESPACE) {
1415
+ if (parent.namespaceURI === MATHML_NAMESPACE)
708
1416
  return tagName === "svg" && (parentTagName === "annotation-xml" || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);
709
- }
710
1417
  return Boolean(ALL_SVG_TAGS[tagName]);
711
1418
  };
712
1419
  const _checkMathMlNamespace = function _checkMathMlNamespace(tagName, parent, parentTagName) {
713
- if (parent.namespaceURI === HTML_NAMESPACE) {
1420
+ if (parent.namespaceURI === HTML_NAMESPACE)
714
1421
  return tagName === "math";
715
- }
716
- if (parent.namespaceURI === SVG_NAMESPACE) {
1422
+ if (parent.namespaceURI === SVG_NAMESPACE)
717
1423
  return tagName === "math" && HTML_INTEGRATION_POINTS[parentTagName];
718
- }
719
1424
  return Boolean(ALL_MATHML_TAGS[tagName]);
720
1425
  };
721
1426
  const _checkHtmlNamespace = function _checkHtmlNamespace(tagName, parent, parentTagName) {
722
- if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {
1427
+ if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName])
723
1428
  return false;
724
- }
725
- if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {
1429
+ if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName])
726
1430
  return false;
727
- }
728
1431
  return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);
729
1432
  };
730
1433
  const _checkValidNamespace = function _checkValidNamespace(element) {
731
- let parent = getParentNode(element);
732
- if (!parent || !parent.tagName) {
733
- parent = {
734
- namespaceURI: NAMESPACE,
735
- tagName: "template"
736
- };
1434
+ const elementNamespace = _readNamespaceURI(element);
1435
+ const tagName = stringToLowerCase(_readNodeName(element));
1436
+ const parentNode = getParentNode(element);
1437
+ let parent;
1438
+ let parentTagName;
1439
+ if (parentNode && _readNodeType(parentNode) === NODE_TYPE.element) {
1440
+ parent = { namespaceURI: _readNamespaceURI(parentNode) };
1441
+ parentTagName = stringToLowerCase(_readNodeName(parentNode));
1442
+ } else {
1443
+ parent = { namespaceURI: NAMESPACE };
1444
+ parentTagName = "template";
737
1445
  }
738
- const tagName = stringToLowerCase(element.tagName);
739
- const parentTagName = stringToLowerCase(parent.tagName);
740
- if (!ALLOWED_NAMESPACES[element.namespaceURI]) {
1446
+ if (!ALLOWED_NAMESPACES[elementNamespace])
741
1447
  return false;
742
- }
743
- if (element.namespaceURI === SVG_NAMESPACE) {
1448
+ if (elementNamespace === SVG_NAMESPACE)
744
1449
  return _checkSvgNamespace(tagName, parent, parentTagName);
745
- }
746
- if (element.namespaceURI === MATHML_NAMESPACE) {
1450
+ if (elementNamespace === MATHML_NAMESPACE)
747
1451
  return _checkMathMlNamespace(tagName, parent, parentTagName);
748
- }
749
- if (element.namespaceURI === HTML_NAMESPACE) {
1452
+ if (elementNamespace === HTML_NAMESPACE)
750
1453
  return _checkHtmlNamespace(tagName, parent, parentTagName);
751
- }
752
- if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && ALLOWED_NAMESPACES[element.namespaceURI]) {
1454
+ if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && ALLOWED_NAMESPACES[elementNamespace])
753
1455
  return true;
754
- }
755
1456
  return false;
756
1457
  };
757
1458
  const _forceRemove = function _forceRemove(node) {
758
- arrayPush(DOMPurify.removed, {
759
- element: node
760
- });
1459
+ arrayPush(DOMPurify.removed, { element: node });
761
1460
  try {
762
1461
  getParentNode(node).removeChild(node);
763
1462
  } catch (_) {
764
1463
  remove(node);
765
- if (!getParentNode(node)) {
766
- throw typeErrorCreate("a node selected for removal could not be detached from its tree " + "and cannot be safely returned; refusing to sanitize in place");
767
- }
1464
+ if (!getParentNode(node))
1465
+ throw typeErrorCreate("a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place");
768
1466
  }
769
1467
  };
770
1468
  const _stripAttributeNode = function _stripAttributeNode(element, attribute, name) {
771
1469
  try {
772
- element.removeAttributeNode(attribute);
1470
+ removeAttributeNode(element, attribute);
773
1471
  } catch (_) {
774
1472
  try {
775
1473
  element.removeAttribute(name);
@@ -779,154 +1477,215 @@ function createDOMPurify() {
779
1477
  const _neutralizeRoot = function _neutralizeRoot(root) {
780
1478
  _neutralizeSubtree(root);
781
1479
  const childNodes = getChildNodes(root);
782
- if (childNodes) {
783
- const snapshot = [];
784
- arrayForEach(childNodes, (child) => {
785
- arrayPush(snapshot, child);
786
- });
787
- arrayForEach(snapshot, (child) => {
1480
+ if (childNodes)
1481
+ arrayForEach(arraySlice(childNodes), (child) => {
788
1482
  try {
789
1483
  remove(child);
790
1484
  } catch (_) {}
791
1485
  });
792
- }
793
- const attributes = getAttributes(root);
794
- if (attributes) {
1486
+ const attributes = _readNodeType(root) === NODE_TYPE.element ? getAttributes(root) : null;
1487
+ if (attributes)
795
1488
  for (let i = attributes.length - 1;i >= 0; --i) {
796
1489
  const attribute = attributes[i];
797
1490
  const name = attribute && attribute.name;
798
- if (typeof name === "string") {
1491
+ if (typeof name === "string")
799
1492
  _stripAttributeNode(root, attribute, name);
800
- }
801
1493
  }
802
- }
803
1494
  };
804
1495
  const _removeAttribute = function _removeAttribute(name, element, attr) {
805
- if (!attr) {
1496
+ if (!attr)
806
1497
  try {
807
1498
  attr = element.getAttributeNode(name);
808
1499
  } catch (_) {
809
1500
  attr = null;
810
1501
  }
811
- }
812
1502
  arrayPush(DOMPurify.removed, {
813
1503
  attribute: attr || null,
814
1504
  from: element
815
1505
  });
816
1506
  try {
817
- if (attr) {
818
- element.removeAttributeNode(attr);
819
- } else {
1507
+ if (attr)
1508
+ removeAttributeNode(element, attr);
1509
+ else
820
1510
  element.removeAttribute(name);
821
- }
822
1511
  } catch (_) {
823
1512
  try {
824
1513
  element.removeAttribute(name);
825
1514
  } catch (_) {}
826
1515
  }
827
1516
  if (name === "is") {
828
- if (RETURN_DOM || RETURN_DOM_FRAGMENT) {
1517
+ if (RETURN_DOM || RETURN_DOM_FRAGMENT)
829
1518
  try {
830
1519
  _forceRemove(element);
831
1520
  } catch (_) {}
832
- } else {
1521
+ else
833
1522
  try {
834
1523
  element.setAttribute(name, "");
835
1524
  } catch (_) {}
836
- }
837
1525
  }
838
1526
  };
839
1527
  const _stripDisallowedAttributes = function _stripDisallowedAttributes(element) {
840
1528
  const attributes = getAttributes(element);
841
- if (!attributes) {
1529
+ if (!attributes)
842
1530
  return;
843
- }
844
1531
  for (let i = attributes.length - 1;i >= 0; --i) {
845
1532
  const attribute = attributes[i];
846
1533
  const name = attribute && attribute.name;
847
- if (typeof name !== "string" || ALLOWED_ATTR[transformCaseFunc(name)]) {
1534
+ if (typeof name !== "string" || ALLOWED_ATTR[transformCaseFunc(name)])
848
1535
  continue;
849
- }
850
1536
  _stripAttributeNode(element, attribute, name);
851
1537
  }
852
1538
  };
853
- const _neutralizeSubtree = function _neutralizeSubtree(root) {
1539
+ const _walkTree = function _walkTree(root, visit) {
1540
+ let intoShadow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
854
1541
  const stack = [root];
855
1542
  while (stack.length > 0) {
856
1543
  const node = stack.pop();
857
- const nodeType = _readNodeType(node);
858
- if (nodeType === NODE_TYPE.element) {
859
- _stripDisallowedAttributes(node);
1544
+ if (visit(node) === false)
1545
+ continue;
1546
+ if (intoShadow && _readNodeType(node) === NODE_TYPE.element) {
1547
+ const shadowRoot = getShadowRoot(node);
1548
+ if (_isDocumentFragment(shadowRoot))
1549
+ stack.push(shadowRoot);
860
1550
  }
861
1551
  const childNodes = getChildNodes(node);
862
- if (childNodes) {
863
- for (let i = childNodes.length - 1;i >= 0; --i) {
1552
+ if (childNodes)
1553
+ for (let i = childNodes.length - 1;i >= 0; --i)
864
1554
  stack.push(childNodes[i]);
865
- }
1555
+ }
1556
+ };
1557
+ const _neutralizeSubtree = function _neutralizeSubtree(root) {
1558
+ _walkTree(root, (node) => {
1559
+ if (_readNodeType(node) === NODE_TYPE.element)
1560
+ _stripDisallowedAttributes(node);
1561
+ });
1562
+ };
1563
+ const _collectLiveNodes = function _collectLiveNodes(root) {
1564
+ const nodes = [];
1565
+ _walkTree(root, (node) => {
1566
+ nodes.push(node);
1567
+ }, true);
1568
+ return nodes;
1569
+ };
1570
+ const _neutralizeEscapedElements = function _neutralizeEscapedElements(root, before) {
1571
+ const reachable = setCreate();
1572
+ arrayForEach(_collectLiveNodes(root), (node) => {
1573
+ if (_readNodeType(node) === NODE_TYPE.element)
1574
+ setAdd(reachable, node);
1575
+ });
1576
+ arrayForEach(before, (node) => {
1577
+ if (_readNodeType(node) === NODE_TYPE.element && !setHas(reachable, node))
1578
+ _stripDisallowedAttributes(node);
1579
+ });
1580
+ };
1581
+ const _neutralizeDiscarded = function _neutralizeDiscarded(root, before) {
1582
+ let rootRemoved = false;
1583
+ arrayForEach(DOMPurify.removed, (entry) => {
1584
+ if (entry.element) {
1585
+ rootRemoved = rootRemoved || entry.element === root;
1586
+ _neutralizeSubtree(entry.element);
1587
+ }
1588
+ });
1589
+ _neutralizeEscapedElements(root, before);
1590
+ return rootRemoved;
1591
+ };
1592
+ const MAX_UNVISITED_ROUNDS = 8;
1593
+ const _sanitizeUnvisitedNodes = function _sanitizeUnvisitedNodes(root, before) {
1594
+ const visited = IN_PLACE_VISITED;
1595
+ let original = null;
1596
+ const getOriginal = () => {
1597
+ if (!original) {
1598
+ original = setCreate();
1599
+ arrayForEach(before, (beforeNode) => {
1600
+ setAdd(original, beforeNode);
1601
+ });
866
1602
  }
1603
+ return original;
1604
+ };
1605
+ for (let round = 0;; round++) {
1606
+ const live = _collectLiveNodes(root);
1607
+ const containers = [root];
1608
+ let pending = false;
1609
+ arrayForEach(live, (node) => {
1610
+ if (_readNodeType(node) === NODE_TYPE.documentFragment)
1611
+ arrayPush(containers, node);
1612
+ else if (!pending && !setHas(visited, node))
1613
+ pending = setHas(getOriginal(), node);
1614
+ });
1615
+ if (!pending)
1616
+ return;
1617
+ if (round >= MAX_UNVISITED_ROUNDS)
1618
+ throw typeErrorCreate("the tree kept changing during in-place sanitization; refusing to return it");
1619
+ arrayForEach(containers, (container, index) => {
1620
+ _sanitizeUnvisitedIn(container, index > 0, root, getOriginal());
1621
+ });
1622
+ }
1623
+ };
1624
+ const _sanitizeUnvisitedIn = function _sanitizeUnvisitedIn(container, inShadow, root, original) {
1625
+ const iterator = _createNodeIterator(container);
1626
+ let node;
1627
+ while (node = iterator.nextNode()) {
1628
+ if (!setHas(original, node) || setHas(IN_PLACE_VISITED, node))
1629
+ continue;
1630
+ if (inShadow)
1631
+ _executeHooks(hooks.uponSanitizeShadowNode, node, null);
1632
+ _sanitizeElements(node, root);
1633
+ _sanitizeAttributes(node, root);
1634
+ if (_isDocumentFragment(node.content))
1635
+ _sanitizeShadowDOM2(node.content);
867
1636
  }
868
1637
  };
1638
+ const _markVisited = function _markVisited(node) {
1639
+ if (IN_PLACE_VISITED)
1640
+ setAdd(IN_PLACE_VISITED, node);
1641
+ };
869
1642
  const _isPatchLinkageAttribute = function _isPatchLinkageAttribute(lcName, lcTag) {
870
- if (!SAFE_FOR_XML) {
1643
+ if (!SAFE_FOR_XML)
871
1644
  return false;
872
- }
873
- if (lcName === "patchsrc") {
1645
+ if (lcName === "patchsrc")
874
1646
  return true;
875
- }
876
1647
  return lcName === "for" && lcTag !== "label" && lcTag !== "output";
877
1648
  };
878
1649
  const _neutralizePatchLinkage = function _neutralizePatchLinkage(root) {
879
- if (!SAFE_FOR_XML) {
1650
+ if (!SAFE_FOR_XML)
880
1651
  return;
881
- }
882
- const stack = [root];
883
- while (stack.length > 0) {
884
- const node = stack.pop();
1652
+ _walkTree(root, (node) => {
885
1653
  const nodeType = _readNodeType(node);
886
1654
  if (nodeType === NODE_TYPE.processingInstruction || nodeType === NODE_TYPE.comment && regExpTest(COMMENT_MARKUP_PROBE, node.data)) {
887
1655
  try {
888
1656
  remove(node);
889
1657
  } catch (_) {}
890
- continue;
1658
+ return false;
891
1659
  }
892
1660
  if (nodeType === NODE_TYPE.element) {
893
1661
  const element = node;
894
1662
  const lcTag = transformCaseFunc(_readNodeName(node));
895
1663
  try {
896
- if (element.hasAttribute && element.hasAttribute("patchsrc")) {
1664
+ if (element.hasAttribute && element.hasAttribute("patchsrc"))
897
1665
  element.removeAttribute("patchsrc");
898
- }
899
- if (element.hasAttribute && element.hasAttribute("for") && _isPatchLinkageAttribute("for", lcTag)) {
1666
+ if (element.hasAttribute && element.hasAttribute("for") && _isPatchLinkageAttribute("for", lcTag))
900
1667
  element.removeAttribute("for");
901
- }
902
1668
  } catch (_) {}
903
1669
  }
904
- const childNodes = getChildNodes(node);
905
- if (childNodes) {
906
- for (let i = childNodes.length - 1;i >= 0; --i) {
907
- stack.push(childNodes[i]);
908
- }
909
- }
910
- }
1670
+ return true;
1671
+ });
911
1672
  };
912
1673
  const _initDocument = function _initDocument(dirty) {
913
1674
  let doc = null;
914
1675
  let leadingWhitespace = null;
915
- if (FORCE_BODY) {
1676
+ if (FORCE_BODY)
916
1677
  dirty = "<remove></remove>" + dirty;
917
- } else {
1678
+ else {
918
1679
  const matches = stringMatch(dirty, /^[\r\n\t ]+/);
919
1680
  leadingWhitespace = matches && matches[0];
920
1681
  }
921
- if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && NAMESPACE === HTML_NAMESPACE) {
1682
+ if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && NAMESPACE === HTML_NAMESPACE)
922
1683
  dirty = '<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>' + dirty + "</body></html>";
923
- }
924
1684
  const dirtyPayload = trustedTypesPolicy ? _createTrustedHTML(dirty) : dirty;
925
- if (NAMESPACE === HTML_NAMESPACE) {
1685
+ if (NAMESPACE === HTML_NAMESPACE)
926
1686
  try {
927
1687
  doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);
928
1688
  } catch (_) {}
929
- }
930
1689
  if (!doc || !doc.documentElement) {
931
1690
  doc = implementation.createDocument(NAMESPACE, "template", null);
932
1691
  try {
@@ -934,12 +1693,10 @@ function createDOMPurify() {
934
1693
  } catch (_) {}
935
1694
  }
936
1695
  const body = doc.body || doc.documentElement;
937
- if (dirty && leadingWhitespace) {
1696
+ if (dirty && leadingWhitespace)
938
1697
  body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);
939
- }
940
- if (NAMESPACE === HTML_NAMESPACE) {
1698
+ if (NAMESPACE === HTML_NAMESPACE)
941
1699
  return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? "html" : "body")[0];
942
- }
943
1700
  return WHOLE_DOCUMENT ? doc.documentElement : body;
944
1701
  };
945
1702
  const _createNodeIterator = function _createNodeIterator(root) {
@@ -954,6 +1711,15 @@ function createDOMPurify() {
954
1711
  };
955
1712
  const _scrubTemplateExpressions2 = function _scrubTemplateExpressions(node) {
956
1713
  var _node$querySelectorAl;
1714
+ _scrubOwnCharacterData(node);
1715
+ const templates = (_node$querySelectorAl = node.querySelectorAll) === null || _node$querySelectorAl === undefined ? undefined : _node$querySelectorAl.call(node, "template");
1716
+ if (templates)
1717
+ arrayForEach(templates, (tmpl) => {
1718
+ if (_isDocumentFragment(tmpl.content))
1719
+ _scrubTemplateExpressions2(tmpl.content);
1720
+ });
1721
+ };
1722
+ const _scrubOwnCharacterData = function _scrubOwnCharacterData(node) {
957
1723
  node.normalize();
958
1724
  const doc = getOwnerDocument ? getOwnerDocument(node) : node.ownerDocument;
959
1725
  const walker = createNodeIterator.call(doc || node, node, NodeFilter.SHOW_TEXT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_CDATA_SECTION | NodeFilter.SHOW_PROCESSING_INSTRUCTION, null);
@@ -962,29 +1728,18 @@ function createDOMPurify() {
962
1728
  currentNode.data = _stripTemplateExpressions(currentNode.data);
963
1729
  currentNode = walker.nextNode();
964
1730
  }
965
- const templates = (_node$querySelectorAl = node.querySelectorAll) === null || _node$querySelectorAl === undefined ? undefined : _node$querySelectorAl.call(node, "template");
966
- if (templates) {
967
- arrayForEach(templates, (tmpl) => {
968
- if (_isDocumentFragment(tmpl.content)) {
969
- _scrubTemplateExpressions2(tmpl.content);
970
- }
971
- });
972
- }
973
1731
  };
974
1732
  const _isClobbered = function _isClobbered(element) {
975
1733
  const realTagName = getNodeName ? getNodeName(element) : null;
976
- if (typeof realTagName !== "string") {
1734
+ if (typeof realTagName !== "string")
977
1735
  return false;
978
- }
979
- if (transformCaseFunc(realTagName) !== "form") {
1736
+ if (transformCaseFunc(realTagName) !== "form")
980
1737
  return false;
981
- }
982
- return typeof element.nodeName !== "string" || typeof element.textContent !== "string" || typeof element.removeChild !== "function" || element.attributes !== getAttributes(element) || typeof element.removeAttribute !== "function" || typeof element.setAttribute !== "function" || typeof element.namespaceURI !== "string" || typeof element.insertBefore !== "function" || typeof element.hasChildNodes !== "function" || element.nodeType !== getNodeType(element) || element.childNodes !== getChildNodes(element);
1738
+ return typeof element.nodeName !== "string" || typeof element.textContent !== "string" || typeof element.removeChild !== "function" || element.attributes !== getAttributes(element) || typeof element.removeAttribute !== "function" || typeof element.removeAttributeNode !== "function" || typeof element.getAttributeNode !== "function" || typeof element.setAttribute !== "function" || typeof element.namespaceURI !== "string" || typeof element.insertBefore !== "function" || typeof element.hasChildNodes !== "function" || element.nodeType !== getNodeType(element) || element.childNodes !== getChildNodes(element);
983
1739
  };
984
1740
  const _isDocumentFragment = function _isDocumentFragment(value) {
985
- if (!getNodeType || typeof value !== "object" || value === null) {
1741
+ if (!getNodeType || typeof value !== "object" || value === null)
986
1742
  return false;
987
- }
988
1743
  try {
989
1744
  return getNodeType(value) === NODE_TYPE.documentFragment;
990
1745
  } catch (_) {
@@ -992,9 +1747,8 @@ function createDOMPurify() {
992
1747
  }
993
1748
  };
994
1749
  const _isNode = function _isNode(value) {
995
- if (!getNodeType || typeof value !== "object" || value === null) {
1750
+ if (!getNodeType || typeof value !== "object" || value === null)
996
1751
  return false;
997
- }
998
1752
  try {
999
1753
  return typeof getNodeType(value) === "number";
1000
1754
  } catch (_) {
@@ -1002,45 +1756,37 @@ function createDOMPurify() {
1002
1756
  }
1003
1757
  };
1004
1758
  function _executeHooks(hooks, currentNode, data) {
1005
- if (hooks.length === 0) {
1759
+ if (hooks.length === 0)
1006
1760
  return;
1007
- }
1008
1761
  arrayForEach(hooks, (hook) => {
1009
1762
  hook.call(DOMPurify, currentNode, data, CONFIG);
1010
1763
  });
1011
1764
  }
1012
1765
  const _isUnsafeNode = function _isUnsafeNode(currentNode, tagName) {
1013
- if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(ELEMENT_MARKUP_PROBE, currentNode.textContent) && regExpTest(ELEMENT_MARKUP_PROBE, currentNode.innerHTML)) {
1766
+ if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(ELEMENT_MARKUP_PROBE, currentNode.textContent) && regExpTest(ELEMENT_MARKUP_PROBE, currentNode.innerHTML))
1014
1767
  return true;
1015
- }
1016
- if (SAFE_FOR_XML && currentNode.namespaceURI === HTML_NAMESPACE && LITERAL_TEXT_ELEMENTS[tagName] && (_isNode(currentNode.firstElementChild) || typeof currentNode.textContent === "string" && regExpTest(LITERAL_TEXT_CLOSE[tagName], currentNode.textContent))) {
1768
+ if (SAFE_FOR_XML && LITERAL_TEXT_ELEMENTS[tagName] && _readNodeType(currentNode) === NODE_TYPE.element && _readNamespaceURI(currentNode) === HTML_NAMESPACE && (_isNode(currentNode.firstElementChild) || typeof currentNode.textContent === "string" && regExpTest(ELEMENT_MARKUP_PROBE, currentNode.textContent)))
1017
1769
  return true;
1018
- }
1019
- if (currentNode.nodeType === NODE_TYPE.processingInstruction) {
1770
+ if (currentNode.nodeType === NODE_TYPE.processingInstruction)
1020
1771
  return true;
1021
- }
1022
- if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(COMMENT_MARKUP_PROBE, currentNode.data)) {
1772
+ if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(COMMENT_MARKUP_PROBE, currentNode.data))
1023
1773
  return true;
1024
- }
1025
1774
  return false;
1026
1775
  };
1027
1776
  const _matchesNameCheck = function _matchesNameCheck(check, name) {
1028
- if (check instanceof RegExp) {
1777
+ if (check instanceof RegExp)
1029
1778
  return regExpTest(check, name);
1030
- }
1031
1779
  if (check instanceof Function) {
1032
- for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2;_key < _len; _key++) {
1780
+ for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2;_key < _len; _key++)
1033
1781
  args[_key - 2] = arguments[_key];
1034
- }
1035
1782
  return Boolean(check(name, ...args));
1036
1783
  }
1037
1784
  return false;
1038
1785
  };
1039
1786
  const _sanitizeDisallowedNode = function _sanitizeDisallowedNode(currentNode, tagName, root) {
1040
- if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName) && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {
1787
+ if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName) && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName))
1041
1788
  return false;
1042
- }
1043
- if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {
1789
+ if (KEEP_CONTENT && !FORBID_CONTENTS[tagName] && !FORBID_CONTENTS[stringToLowerCase(tagName)]) {
1044
1790
  const parentNode = getParentNode(currentNode);
1045
1791
  const childNodes = getChildNodes(currentNode);
1046
1792
  if (childNodes && parentNode) {
@@ -1055,25 +1801,22 @@ function createDOMPurify() {
1055
1801
  return true;
1056
1802
  };
1057
1803
  const _forkSharedAllowlist = function _forkSharedAllowlist(hookList, set, defaultSet, setConfigSet) {
1058
- if (hookList.length === 0) {
1804
+ if (hookList.length === 0)
1059
1805
  return set;
1060
- }
1061
1806
  return set === defaultSet || set === setConfigSet ? clone(set) : set;
1062
1807
  };
1063
1808
  const _handleHookDetachedNode = function _handleHookDetachedNode(currentNode, root) {
1064
- if (currentNode === root || getParentNode(currentNode) !== null) {
1809
+ if (currentNode === root || getParentNode(currentNode) !== null)
1065
1810
  return false;
1066
- }
1067
- if (IN_PLACE) {
1811
+ if (IN_PLACE)
1068
1812
  _neutralizeSubtree(currentNode);
1069
- }
1070
1813
  return true;
1071
1814
  };
1072
1815
  const _sanitizeElements = function _sanitizeElements(currentNode, root) {
1816
+ _markVisited(currentNode);
1073
1817
  _executeHooks(hooks.beforeSanitizeElements, currentNode, null);
1074
- if (_handleHookDetachedNode(currentNode, root)) {
1818
+ if (_handleHookDetachedNode(currentNode, root))
1075
1819
  return true;
1076
- }
1077
1820
  if (_isClobbered(currentNode)) {
1078
1821
  _forceRemove(currentNode);
1079
1822
  return true;
@@ -1084,9 +1827,8 @@ function createDOMPurify() {
1084
1827
  tagName,
1085
1828
  allowedTags: ALLOWED_TAGS
1086
1829
  });
1087
- if (_handleHookDetachedNode(currentNode, root)) {
1830
+ if (_handleHookDetachedNode(currentNode, root))
1088
1831
  return true;
1089
- }
1090
1832
  if (_isUnsafeNode(currentNode, tagName)) {
1091
1833
  _forceRemove(currentNode);
1092
1834
  return true;
@@ -1095,11 +1837,12 @@ function createDOMPurify() {
1095
1837
  const removed = _sanitizeDisallowedNode(currentNode, tagName, root);
1096
1838
  if (removed === false) {
1097
1839
  _executeHooks(hooks.afterSanitizeElements, currentNode, null);
1840
+ if (_handleHookDetachedNode(currentNode, root))
1841
+ return true;
1098
1842
  }
1099
1843
  return removed;
1100
1844
  }
1101
- const nt = _readNodeType(currentNode);
1102
- if (nt === NODE_TYPE.element && !_checkValidNamespace(currentNode)) {
1845
+ if (_readNodeType(currentNode) === NODE_TYPE.element && !_checkValidNamespace(currentNode)) {
1103
1846
  _forceRemove(currentNode);
1104
1847
  return true;
1105
1848
  }
@@ -1110,88 +1853,88 @@ function createDOMPurify() {
1110
1853
  if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {
1111
1854
  const content = _stripTemplateExpressions(currentNode.textContent);
1112
1855
  if (currentNode.textContent !== content) {
1113
- arrayPush(DOMPurify.removed, {
1114
- element: currentNode.cloneNode()
1115
- });
1856
+ arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });
1116
1857
  currentNode.textContent = content;
1117
1858
  }
1118
1859
  }
1119
1860
  _executeHooks(hooks.afterSanitizeElements, currentNode, null);
1120
- return false;
1861
+ return _handleHookDetachedNode(currentNode, root);
1121
1862
  };
1122
1863
  const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {
1123
- if (FORBID_ATTR[lcName]) {
1864
+ if (FORBID_ATTR[lcName])
1124
1865
  return false;
1125
- }
1126
- if (_isPatchLinkageAttribute(lcName, lcTag)) {
1866
+ if (_isPatchLinkageAttribute(lcName, lcTag))
1127
1867
  return false;
1128
- }
1129
- if (SANITIZE_DOM && (lcName === "id" || lcName === "name") && ((value in document) || (value in formElement))) {
1868
+ if (SANITIZE_DOM && (lcName === "id" || lcName === "name") && ((value in document) || (value in formElement)))
1130
1869
  return false;
1131
- }
1132
1870
  const nameIsPermitted = ALLOWED_ATTR[lcName] || EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag);
1133
- if (ALLOW_DATA_ATTR && regExpTest(DATA_ATTR$1, lcName)) {
1871
+ if (ALLOW_DATA_ATTR && regExpTest(DATA_ATTR$1, lcName))
1134
1872
  return true;
1135
- }
1136
- if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$1, lcName)) {
1873
+ if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$1, lcName))
1137
1874
  return true;
1138
- }
1139
- if (!nameIsPermitted) {
1875
+ if (!nameIsPermitted)
1140
1876
  return _isBasicCustomElement(lcTag) && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName, lcTag) || lcName === "is" && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value);
1141
- }
1142
- if (URI_SAFE_ATTRIBUTES[lcName]) {
1877
+ if (URI_SAFE_ATTRIBUTES[lcName])
1143
1878
  return true;
1144
- }
1145
- if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE$1, ""))) {
1879
+ if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE$1, "")))
1146
1880
  return true;
1147
- }
1148
- if ((lcName === "src" || lcName === "xlink:href" || lcName === "href") && lcTag !== "script" && stringIndexOf(value, "data:") === 0 && DATA_URI_TAGS[lcTag]) {
1881
+ if ((lcName === "src" || lcName === "xlink:href" || lcName === "href") && lcTag !== "script" && stringIndexOf(value, "data:") === 0 && DATA_URI_TAGS[lcTag])
1149
1882
  return true;
1150
- }
1151
- if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$1, stringReplace(value, ATTR_WHITESPACE$1, ""))) {
1883
+ if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$1, stringReplace(value, ATTR_WHITESPACE$1, "")))
1152
1884
  return true;
1153
- }
1154
1885
  return !value;
1155
1886
  };
1156
- const RESERVED_CUSTOM_ELEMENT_NAMES = addToSet({}, ["annotation-xml", "color-profile", "font-face", "font-face-format", "font-face-name", "font-face-src", "font-face-uri", "missing-glyph"]);
1887
+ const RESERVED_CUSTOM_ELEMENT_NAMES = addToSet({}, [
1888
+ "annotation-xml",
1889
+ "color-profile",
1890
+ "font-face",
1891
+ "font-face-format",
1892
+ "font-face-name",
1893
+ "font-face-src",
1894
+ "font-face-uri",
1895
+ "missing-glyph"
1896
+ ]);
1157
1897
  const _isBasicCustomElement = function _isBasicCustomElement(tagName) {
1158
1898
  return !RESERVED_CUSTOM_ELEMENT_NAMES[stringToLowerCase(tagName)] && regExpTest(CUSTOM_ELEMENT$1, tagName);
1159
1899
  };
1160
1900
  const _applyTrustedTypesToAttribute = function _applyTrustedTypesToAttribute(lcTag, lcName, namespaceURI, value) {
1161
- if (trustedTypesPolicy && typeof trustedTypes === "object" && typeof trustedTypes.getAttributeType === "function" && !namespaceURI) {
1901
+ if (trustedTypesPolicy && typeof trustedTypes === "object" && typeof trustedTypes.getAttributeType === "function" && !namespaceURI)
1162
1902
  switch (trustedTypes.getAttributeType(lcTag, lcName)) {
1163
- case "TrustedHTML": {
1903
+ case "TrustedHTML":
1164
1904
  return _createTrustedHTML(value);
1165
- }
1166
- case "TrustedScriptURL": {
1905
+ case "TrustedScriptURL":
1167
1906
  return _createTrustedScriptURL(value);
1168
- }
1169
1907
  }
1170
- }
1171
1908
  return value;
1172
1909
  };
1173
1910
  const _setAttributeValue = function _setAttributeValue(currentNode, name, namespaceURI, value) {
1174
1911
  try {
1175
- if (namespaceURI) {
1912
+ if (namespaceURI)
1176
1913
  currentNode.setAttributeNS(namespaceURI, name, value);
1177
- } else {
1914
+ else
1178
1915
  currentNode.setAttribute(name, value);
1179
- }
1180
1916
  if (_isClobbered(currentNode)) {
1181
1917
  _forceRemove(currentNode);
1182
- } else {
1183
- arrayPop(DOMPurify.removed);
1918
+ return false;
1184
1919
  }
1920
+ return true;
1185
1921
  } catch (_) {
1186
1922
  _removeAttribute(name, currentNode);
1923
+ return false;
1187
1924
  }
1188
1925
  };
1189
- const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {
1926
+ const _isUnsafeAttributeValue = function _isUnsafeAttributeValue(name, value) {
1927
+ if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i, value))
1928
+ return true;
1929
+ return stringToLowerCase(name) === "attributename" && stringMatch(value, "href") !== null;
1930
+ };
1931
+ const _sanitizeAttributes = function _sanitizeAttributes(currentNode, root) {
1190
1932
  _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);
1933
+ if (_handleHookDetachedNode(currentNode, root))
1934
+ return;
1191
1935
  const attributes = currentNode.attributes;
1192
- if (!attributes || _isClobbered(currentNode)) {
1936
+ if (!attributes || _isClobbered(currentNode))
1193
1937
  return;
1194
- }
1195
1938
  ALLOWED_ATTR = _forkSharedAllowlist(hooks.uponSanitizeAttribute, ALLOWED_ATTR, DEFAULT_ALLOWED_ATTR, SET_CONFIG_ALLOWED_ATTR);
1196
1939
  const hookEvent = {
1197
1940
  attrName: "",
@@ -1208,6 +1951,7 @@ function createDOMPurify() {
1208
1951
  const lcName = transformCaseFunc(name);
1209
1952
  const initValue = attrValue;
1210
1953
  let value = name === "value" ? initValue : stringTrim(initValue);
1954
+ let recreatedNamedProp = false;
1211
1955
  hookEvent.attrName = lcName;
1212
1956
  hookEvent.attrValue = value;
1213
1957
  hookEvent.keepAttr = true;
@@ -1217,18 +1961,14 @@ function createDOMPurify() {
1217
1961
  if (SANITIZE_NAMED_PROPS && (lcName === "id" || lcName === "name") && stringIndexOf(value, SANITIZE_NAMED_PROPS_PREFIX) !== 0) {
1218
1962
  _removeAttribute(name, currentNode, attr);
1219
1963
  value = SANITIZE_NAMED_PROPS_PREFIX + value;
1964
+ recreatedNamedProp = true;
1220
1965
  }
1221
- if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i, value)) {
1222
- _removeAttribute(name, currentNode, attr);
1223
- continue;
1224
- }
1225
- if (lcName === "attributename" && stringMatch(value, "href")) {
1966
+ if (_isUnsafeAttributeValue(name, value)) {
1226
1967
  _removeAttribute(name, currentNode, attr);
1227
1968
  continue;
1228
1969
  }
1229
- if (hookEvent.forceKeepAttr) {
1970
+ if (hookEvent.forceKeepAttr)
1230
1971
  continue;
1231
- }
1232
1972
  if (!hookEvent.keepAttr) {
1233
1973
  _removeAttribute(name, currentNode, attr);
1234
1974
  continue;
@@ -1237,19 +1977,20 @@ function createDOMPurify() {
1237
1977
  _removeAttribute(name, currentNode, attr);
1238
1978
  continue;
1239
1979
  }
1240
- if (SAFE_FOR_TEMPLATES) {
1980
+ if (SAFE_FOR_TEMPLATES)
1241
1981
  value = _stripTemplateExpressions(value);
1242
- }
1243
1982
  if (!_isValidAttribute(lcTag, lcName, value)) {
1244
1983
  _removeAttribute(name, currentNode, attr);
1245
1984
  continue;
1246
1985
  }
1247
1986
  value = _applyTrustedTypesToAttribute(lcTag, lcName, namespaceURI, value);
1248
1987
  if (value !== initValue) {
1249
- _setAttributeValue(currentNode, name, namespaceURI, value);
1988
+ if (_setAttributeValue(currentNode, name, namespaceURI, value) && recreatedNamedProp)
1989
+ arrayPop(DOMPurify.removed);
1250
1990
  }
1251
1991
  }
1252
1992
  _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);
1993
+ _handleHookDetachedNode(currentNode, root);
1253
1994
  };
1254
1995
  const _sanitizeShadowDOM2 = function _sanitizeShadowDOM(fragment) {
1255
1996
  let shadowNode = null;
@@ -1258,10 +1999,9 @@ function createDOMPurify() {
1258
1999
  while (shadowNode = shadowIterator.nextNode()) {
1259
2000
  _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);
1260
2001
  _sanitizeElements(shadowNode, fragment);
1261
- _sanitizeAttributes(shadowNode);
1262
- if (_isDocumentFragment(shadowNode.content)) {
2002
+ _sanitizeAttributes(shadowNode, fragment);
2003
+ if (_isDocumentFragment(shadowNode.content))
1263
2004
  _sanitizeShadowDOM2(shadowNode.content);
1264
- }
1265
2005
  if (_readNodeType(shadowNode) === NODE_TYPE.element) {
1266
2006
  const innerSr = getShadowRoot(shadowNode);
1267
2007
  if (_isDocumentFragment(innerSr)) {
@@ -1270,6 +2010,8 @@ function createDOMPurify() {
1270
2010
  }
1271
2011
  }
1272
2012
  }
2013
+ if (SAFE_FOR_TEMPLATES)
2014
+ _scrubOwnCharacterData(fragment);
1273
2015
  _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);
1274
2016
  };
1275
2017
  const _sanitizeAttachedShadowRoots = function _sanitizeAttachedShadowRoots(root) {
@@ -1284,32 +2026,28 @@ function createDOMPurify() {
1284
2026
  continue;
1285
2027
  }
1286
2028
  const node = item.node;
1287
- const nodeType = _readNodeType(node);
1288
- const isElement = nodeType === NODE_TYPE.element;
2029
+ const isElement = _readNodeType(node) === NODE_TYPE.element;
1289
2030
  const childNodes = getChildNodes(node);
1290
- if (childNodes) {
1291
- for (let i = childNodes.length - 1;i >= 0; --i) {
2031
+ if (childNodes)
2032
+ for (let i = childNodes.length - 1;i >= 0; --i)
1292
2033
  stack.push({
1293
2034
  node: childNodes[i],
1294
2035
  shadow: null
1295
2036
  });
1296
- }
1297
- }
1298
2037
  if (isElement) {
1299
2038
  const rootName = getNodeName ? getNodeName(node) : null;
1300
2039
  if (typeof rootName === "string" && transformCaseFunc(rootName) === "template") {
1301
2040
  const content = node.content;
1302
- if (_isDocumentFragment(content)) {
2041
+ if (_isDocumentFragment(content))
1303
2042
  stack.push({
1304
2043
  node: content,
1305
2044
  shadow: null
1306
2045
  });
1307
- }
1308
2046
  }
1309
2047
  }
1310
2048
  if (isElement) {
1311
2049
  const sr = getShadowRoot(node);
1312
- if (_isDocumentFragment(sr)) {
2050
+ if (_isDocumentFragment(sr))
1313
2051
  stack.push({
1314
2052
  node: null,
1315
2053
  shadow: sr
@@ -1317,7 +2055,6 @@ function createDOMPurify() {
1317
2055
  node: sr,
1318
2056
  shadow: null
1319
2057
  });
1320
- }
1321
2058
  }
1322
2059
  }
1323
2060
  };
@@ -1328,32 +2065,28 @@ function createDOMPurify() {
1328
2065
  let currentNode = null;
1329
2066
  let returnNode = null;
1330
2067
  IS_EMPTY_INPUT = !dirty;
1331
- if (IS_EMPTY_INPUT) {
2068
+ if (IS_EMPTY_INPUT)
1332
2069
  dirty = "<!-->";
1333
- }
1334
2070
  if (typeof dirty !== "string" && !_isNode(dirty)) {
1335
2071
  dirty = stringifyValue(dirty);
1336
- if (typeof dirty !== "string") {
2072
+ if (typeof dirty !== "string")
1337
2073
  throw typeErrorCreate("dirty is not a string, aborting");
1338
- }
1339
2074
  }
1340
- if (!DOMPurify.isSupported) {
2075
+ if (!DOMPurify.isSupported)
1341
2076
  return dirty;
1342
- }
1343
2077
  if (SET_CONFIG) {
1344
2078
  ALLOWED_TAGS = SET_CONFIG_ALLOWED_TAGS;
1345
2079
  ALLOWED_ATTR = SET_CONFIG_ALLOWED_ATTR;
1346
- } else {
2080
+ } else
1347
2081
  _parseConfig(cfg);
1348
- }
1349
- if (hooks.uponSanitizeElement.length > 0 || hooks.uponSanitizeAttribute.length > 0) {
2082
+ if (hooks.uponSanitizeElement.length > 0 || hooks.uponSanitizeAttribute.length > 0)
1350
2083
  ALLOWED_TAGS = clone(ALLOWED_TAGS);
1351
- }
1352
- if (hooks.uponSanitizeAttribute.length > 0) {
2084
+ if (hooks.uponSanitizeAttribute.length > 0)
1353
2085
  ALLOWED_ATTR = clone(ALLOWED_ATTR);
1354
- }
1355
2086
  DOMPurify.removed = [];
1356
2087
  const inPlace = IN_PLACE && typeof dirty !== "string" && _isNode(dirty);
2088
+ let inPlaceNodes = [];
2089
+ const outerVisited = IN_PLACE_VISITED;
1357
2090
  if (inPlace) {
1358
2091
  _neutralizePatchLinkage(dirty);
1359
2092
  const nn = _readNodeName(dirty);
@@ -1368,92 +2101,75 @@ function createDOMPurify() {
1368
2101
  _neutralizeRoot(dirty);
1369
2102
  throw typeErrorCreate("root node is clobbered and cannot be sanitized in-place");
1370
2103
  }
1371
- try {
1372
- _sanitizeAttachedShadowRoots(dirty);
1373
- } catch (error) {
1374
- _neutralizeRoot(dirty);
1375
- throw error;
1376
- }
2104
+ inPlaceNodes = _collectLiveNodes(dirty);
2105
+ IN_PLACE_VISITED = setCreate();
1377
2106
  } else if (_isNode(dirty)) {
1378
2107
  body = _initDocument("<!---->");
1379
2108
  importedNode = body.ownerDocument.importNode(dirty, true);
1380
- if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === "BODY") {
2109
+ if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === "BODY")
1381
2110
  body = importedNode;
1382
- } else if (importedNode.nodeName === "HTML") {
2111
+ else if (importedNode.nodeName === "HTML")
1383
2112
  body = importedNode;
1384
- } else {
2113
+ else
1385
2114
  body.appendChild(importedNode);
1386
- }
1387
- _sanitizeAttachedShadowRoots(importedNode);
2115
+ _sanitizeAttachedShadowRoots(body);
1388
2116
  } else {
1389
- if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && dirty.indexOf("<") === -1) {
2117
+ if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && dirty.indexOf("<") === -1)
1390
2118
  return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? _createTrustedHTML(dirty) : dirty;
1391
- }
1392
2119
  body = _initDocument(dirty);
1393
- if (!body) {
2120
+ if (!body)
1394
2121
  return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : "";
1395
- }
1396
2122
  }
1397
- if (body && FORCE_BODY) {
2123
+ if (body && FORCE_BODY)
1398
2124
  _forceRemove(body.firstChild);
1399
- }
1400
2125
  const walkRoot = inPlace ? dirty : body;
1401
2126
  try {
2127
+ if (inPlace)
2128
+ _sanitizeAttachedShadowRoots(dirty);
1402
2129
  const nodeIterator = _createNodeIterator(walkRoot);
1403
2130
  while (currentNode = nodeIterator.nextNode()) {
1404
2131
  _sanitizeElements(currentNode, walkRoot);
1405
- _sanitizeAttributes(currentNode);
1406
- if (_isDocumentFragment(currentNode.content)) {
2132
+ _sanitizeAttributes(currentNode, walkRoot);
2133
+ if (_isDocumentFragment(currentNode.content))
1407
2134
  _sanitizeShadowDOM2(currentNode.content);
1408
- }
1409
2135
  }
2136
+ if (inPlace)
2137
+ _sanitizeUnvisitedNodes(dirty, inPlaceNodes);
1410
2138
  } catch (error) {
1411
2139
  if (inPlace) {
1412
2140
  _neutralizeRoot(dirty);
1413
- arrayForEach(DOMPurify.removed, (entry) => {
1414
- if (entry.element) {
1415
- _neutralizeSubtree(entry.element);
1416
- }
1417
- });
2141
+ _neutralizeDiscarded(dirty, inPlaceNodes);
1418
2142
  }
1419
2143
  throw error;
2144
+ } finally {
2145
+ IN_PLACE_VISITED = outerVisited;
1420
2146
  }
1421
2147
  if (inPlace) {
1422
- arrayForEach(DOMPurify.removed, (entry) => {
1423
- if (entry.element) {
1424
- _neutralizeSubtree(entry.element);
1425
- }
1426
- });
1427
- if (SAFE_FOR_TEMPLATES) {
2148
+ if (_neutralizeDiscarded(dirty, inPlaceNodes))
2149
+ throw typeErrorCreate("a node selected for removal could not be safely returned; refusing to sanitize in place");
2150
+ if (SAFE_FOR_TEMPLATES)
1428
2151
  _scrubTemplateExpressions2(dirty);
1429
- }
1430
2152
  return dirty;
1431
2153
  }
1432
2154
  if (RETURN_DOM) {
1433
- if (SAFE_FOR_TEMPLATES) {
2155
+ if (SAFE_FOR_TEMPLATES)
1434
2156
  _scrubTemplateExpressions2(body);
1435
- }
1436
2157
  if (RETURN_DOM_FRAGMENT) {
1437
2158
  returnNode = createDocumentFragment.call(body.ownerDocument);
1438
- while (body.firstChild) {
2159
+ while (body.firstChild)
1439
2160
  returnNode.appendChild(body.firstChild);
1440
- }
1441
- } else {
2161
+ } else
1442
2162
  returnNode = body;
1443
- }
1444
- if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {
2163
+ if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode)
1445
2164
  returnNode = importNode.call(originalDocument, returnNode, true);
1446
- }
1447
2165
  return returnNode;
1448
2166
  }
1449
2167
  let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;
1450
- if (WHOLE_DOCUMENT && ALLOWED_TAGS["!doctype"] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {
2168
+ if (WHOLE_DOCUMENT && ALLOWED_TAGS["!doctype"] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name))
1451
2169
  serializedHTML = "<!DOCTYPE " + body.ownerDocument.doctype.name + `>
1452
2170
  ` + serializedHTML;
1453
- }
1454
- if (SAFE_FOR_TEMPLATES) {
2171
+ if (SAFE_FOR_TEMPLATES)
1455
2172
  serializedHTML = _stripTemplateExpressions(serializedHTML);
1456
- }
1457
2173
  return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? _createTrustedHTML(serializedHTML) : serializedHTML;
1458
2174
  };
1459
2175
  DOMPurify.setConfig = function() {
@@ -1472,26 +2188,24 @@ function createDOMPurify() {
1472
2188
  emptyHTML = "";
1473
2189
  };
1474
2190
  DOMPurify.isValidAttribute = function(tag, attr, value) {
1475
- if (!CONFIG) {
2191
+ if (!CONFIG)
1476
2192
  _parseConfig({});
1477
- }
1478
2193
  const lcTag = transformCaseFunc(tag);
1479
2194
  const lcName = transformCaseFunc(attr);
2195
+ if (typeof value === "string" && (_isUnsafeAttributeValue(attr, value) || !ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(SELF_CLOSING_TAG, value)))
2196
+ return false;
1480
2197
  return _isValidAttribute(lcTag, lcName, value);
1481
2198
  };
1482
2199
  DOMPurify.addHook = function(entryPoint, hookFunction) {
1483
- if (typeof hookFunction !== "function") {
2200
+ if (typeof hookFunction !== "function")
1484
2201
  return;
1485
- }
1486
- if (!objectHasOwnProperty(hooks, entryPoint)) {
2202
+ if (!objectHasOwnProperty(hooks, entryPoint))
1487
2203
  return;
1488
- }
1489
2204
  arrayPush(hooks[entryPoint], hookFunction);
1490
2205
  };
1491
2206
  DOMPurify.removeHook = function(entryPoint, hookFunction) {
1492
- if (!objectHasOwnProperty(hooks, entryPoint)) {
2207
+ if (!objectHasOwnProperty(hooks, entryPoint))
1493
2208
  return;
1494
- }
1495
2209
  if (hookFunction !== undefined) {
1496
2210
  const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);
1497
2211
  return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];
@@ -1499,9 +2213,8 @@ function createDOMPurify() {
1499
2213
  return arrayPop(hooks[entryPoint]);
1500
2214
  };
1501
2215
  DOMPurify.removeHooks = function(entryPoint) {
1502
- if (!objectHasOwnProperty(hooks, entryPoint)) {
2216
+ if (!objectHasOwnProperty(hooks, entryPoint))
1503
2217
  return;
1504
- }
1505
2218
  hooks[entryPoint] = [];
1506
2219
  };
1507
2220
  DOMPurify.removeAllHooks = function() {
@@ -1509,203 +2222,269 @@ function createDOMPurify() {
1509
2222
  };
1510
2223
  return DOMPurify;
1511
2224
  }
1512
- var purify = createDOMPurify();
2225
+ var purify_default = createDOMPurify();
1513
2226
 
1514
- // ../../node_modules/.bun/marked@18.0.3/node_modules/marked/lib/marked.esm.js
1515
- function z() {
2227
+ // ../../node_modules/.bun/marked@18.1.1/node_modules/marked/lib/marked.esm.js
2228
+ function B() {
1516
2229
  return { async: false, breaks: false, extensions: null, gfm: true, hooks: null, pedantic: false, renderer: null, silent: false, tokenizer: null, walkTokens: null };
1517
2230
  }
1518
- var T = z();
1519
- function G(l) {
1520
- T = l;
2231
+ var y = B();
2232
+ function V(a) {
2233
+ y = a;
2234
+ }
2235
+ var M = { exec: () => null };
2236
+ function D(a) {
2237
+ let e = [];
2238
+ return (t) => {
2239
+ let n = Math.max(0, Math.min(3, t - 1)), i = e[n];
2240
+ return i || (i = a(n), e[n] = i), i;
2241
+ };
1521
2242
  }
1522
- var _ = { exec: () => null };
1523
- function d(l, e = "") {
1524
- let t = typeof l == "string" ? l : l.source, n = { replace: (s, r) => {
1525
- let i = typeof r == "string" ? r : r.source;
1526
- return i = i.replace(m.caret, "$1"), t = t.replace(s, i), n;
2243
+ function h(a, e = "") {
2244
+ let t = typeof a == "string" ? a : a.source, n = { replace: (i, r) => {
2245
+ let o = typeof r == "string" ? r : r.source;
2246
+ return o = o.replace(x.caret, "$1"), t = t.replace(i, o), n;
1527
2247
  }, getRegex: () => new RegExp(t, e) };
1528
2248
  return n;
1529
2249
  }
1530
- var Re = ((l = "") => {
2250
+ var ze = ((a = "") => {
1531
2251
  try {
1532
- return !!new RegExp("(?<=1)(?<!1)" + l);
2252
+ return !!new RegExp("(?<=1)(?<!1)" + a);
1533
2253
  } catch {
1534
2254
  return false;
1535
2255
  }
1536
2256
  })();
1537
- var m = { codeRemoveIndent: /^(?: {1,4}| {0,3}\t)/gm, outputLinkReplace: /\\([\[\]])/g, indentCodeCompensation: /^(\s+)(?:```)/, beginningSpace: /^\s+/, endingHash: /#$/, startingSpaceChar: /^ /, endingSpaceChar: / $/, nonSpaceChar: /[^ ]/, newLineCharGlobal: /\n/g, tabCharGlobal: /\t/g, multipleSpaceGlobal: /\s+/g, blankLine: /^[ \t]*$/, doubleBlankLine: /\n[ \t]*\n[ \t]*$/, blockquoteStart: /^ {0,3}>/, blockquoteSetextReplace: /\n {0,3}((?:=+|-+) *)(?=\n|$)/g, blockquoteSetextReplace2: /^ {0,3}>[ \t]?/gm, listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g, listIsTask: /^\[[ xX]\] +\S/, listReplaceTask: /^\[[ xX]\] +/, listTaskCheckbox: /\[[ xX]\]/, anyLine: /\n.*\n/, hrefBrackets: /^<(.*)>$/, tableDelimiter: /[:|]/, tableAlignChars: /^\||\| *$/g, tableRowBlankLine: /\n[ \t]*$/, tableAlignRight: /^ *-+: *$/, tableAlignCenter: /^ *:-+: *$/, tableAlignLeft: /^ *:-+ *$/, startATag: /^<a /i, endATag: /^<\/a>/i, startPreScriptTag: /^<(pre|code|kbd|script)(\s|>)/i, endPreScriptTag: /^<\/(pre|code|kbd|script)(\s|>)/i, startAngleBracket: /^</, endAngleBracket: />$/, pedanticHrefTitle: /^([^'"]*[^\s])\s+(['"])(.*)\2/, unicodeAlphaNumeric: /[\p{L}\p{N}]/u, escapeTest: /[&<>"']/, escapeReplace: /[&<>"']/g, escapeTestNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/, escapeReplaceNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g, caret: /(^|[^\[])\^/g, percentDecode: /%25/g, findPipe: /\|/g, splitPipe: / \|/, slashPipe: /\\\|/g, carriageReturn: /\r\n|\r/g, spaceLine: /^ +$/gm, notSpaceStart: /^\S*/, endingNewline: /\n$/, listItemRegex: (l) => new RegExp(`^( {0,3}${l})((?:[ ][^\\n]*)?(?:\\n|$))`), nextBulletRegex: (l) => new RegExp(`^ {0,${Math.min(3, l - 1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`), hrRegex: (l) => new RegExp(`^ {0,${Math.min(3, l - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`), fencesBeginRegex: (l) => new RegExp(`^ {0,${Math.min(3, l - 1)}}(?:\`\`\`|~~~)`), headingBeginRegex: (l) => new RegExp(`^ {0,${Math.min(3, l - 1)}}#`), htmlBeginRegex: (l) => new RegExp(`^ {0,${Math.min(3, l - 1)}}<(?:[a-z].*>|!--)`, "i"), blockquoteBeginRegex: (l) => new RegExp(`^ {0,${Math.min(3, l - 1)}}>`) };
1538
- var Te = /^(?:[ \t]*(?:\n|$))+/;
1539
- var Oe = /^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/;
1540
- var we = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/;
1541
- var I = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/;
1542
- var ye = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/;
1543
- var Q = / {0,3}(?:[*+-]|\d{1,9}[.)])/;
1544
- var ie = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/;
1545
- var oe = d(ie).replace(/bull/g, Q).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/\|table/g, "").getRegex();
1546
- var Pe = d(ie).replace(/bull/g, Q).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/table/g, / {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex();
1547
- var j = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/;
1548
- var Se = /^[^\n]+/;
1549
- var F = /(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/;
1550
- var $e = d(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label", F).replace("title", /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex();
1551
- var Le = d(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g, Q).getRegex();
1552
- var v = "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul";
1553
- var U = /<!--(?:-?>|[\s\S]*?(?:-->|$))/;
1554
- var _e = d("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$))", "i").replace("comment", U).replace("tag", v).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex();
1555
- var ae = d(j).replace("hr", I).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("|table", "").replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", v).getRegex();
1556
- var Me = d(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph", ae).getRegex();
1557
- var K = { blockquote: Me, code: Oe, def: $e, fences: we, heading: ye, hr: I, html: _e, lheading: oe, list: Le, newline: Te, paragraph: ae, table: _, text: Se };
1558
- var re = d("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr", I).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("blockquote", " {0,3}>").replace("code", "(?: {4}| {0,3}\t)[^\\n]").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", v).getRegex();
1559
- var ze = { ...K, lheading: Pe, table: re, paragraph: d(j).replace("hr", I).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("table", re).replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", v).getRegex() };
1560
- var Ee = { ...K, html: d(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment", U).replace(/tag/g, "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(), def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, heading: /^(#{1,6})(.*)(?:\n+|$)/, fences: _, lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/, paragraph: d(j).replace("hr", I).replace("heading", ` *#{1,6} *[^
1561
- ]`).replace("lheading", oe).replace("|table", "").replace("blockquote", " {0,3}>").replace("|fences", "").replace("|list", "").replace("|html", "").replace("|tag", "").getRegex() };
1562
- var Ae = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/;
1563
- var Ce = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/;
1564
- var le = /^( {2,}|\\)\n(?!\s*$)/;
1565
- var Ie = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/;
1566
- var E = /[\p{P}\p{S}]/u;
1567
- var H = /[\s\p{P}\p{S}]/u;
1568
- var W = /[^\s\p{P}\p{S}]/u;
1569
- var Be = d(/^((?![*_])punctSpace)/, "u").replace(/punctSpace/g, H).getRegex();
1570
- var ue = /(?!~)[\p{P}\p{S}]/u;
1571
- var De = /(?!~)[\s\p{P}\p{S}]/u;
1572
- var qe = /(?:[^\s\p{P}\p{S}]|~)/u;
1573
- var ve = d(/link|precode-code|html/, "g").replace("link", /\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-", Re ? "(?<!`)()" : "(^^|[^`])").replace("code", /(?<b>`+)[^`]+\k<b>(?!`)/).replace("html", /<(?! )[^<>]*?>/).getRegex();
1574
- var pe = /^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/;
1575
- var He = d(pe, "u").replace(/punct/g, E).getRegex();
1576
- var Ze = d(pe, "u").replace(/punct/g, ue).getRegex();
1577
- var ce = "^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)";
1578
- var Ge = d(ce, "gu").replace(/notPunctSpace/g, W).replace(/punctSpace/g, H).replace(/punct/g, E).getRegex();
1579
- var Ne = d(ce, "gu").replace(/notPunctSpace/g, qe).replace(/punctSpace/g, De).replace(/punct/g, ue).getRegex();
1580
- var Qe = d("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)", "gu").replace(/notPunctSpace/g, W).replace(/punctSpace/g, H).replace(/punct/g, E).getRegex();
1581
- var je = d(/^~~?(?:((?!~)punct)|[^\s~])/, "u").replace(/punct/g, E).getRegex();
1582
- var Fe = "^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)";
1583
- var Ue = d(Fe, "gu").replace(/notPunctSpace/g, W).replace(/punctSpace/g, H).replace(/punct/g, E).getRegex();
1584
- var Ke = d(/\\(punct)/, "gu").replace(/punct/g, E).getRegex();
1585
- var We = d(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex();
1586
- var Xe = d(U).replace("(?:-->|$)", "-->").getRegex();
1587
- var Je = d("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment", Xe).replace("attribute", /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex();
1588
- var q = /(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/;
1589
- var Ve = d(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label", q).replace("href", /<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title", /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex();
1590
- var he = d(/^!?\[(label)\]\[(ref)\]/).replace("label", q).replace("ref", F).getRegex();
1591
- var ke = d(/^!?\[(ref)\](?:\[\])?/).replace("ref", F).getRegex();
1592
- var Ye = d("reflink|nolink(?!\\()", "g").replace("reflink", he).replace("nolink", ke).getRegex();
1593
- var se = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/;
1594
- var X = { _backpedal: _, anyPunctuation: Ke, autolink: We, blockSkip: ve, br: le, code: Ce, del: _, delLDelim: _, delRDelim: _, emStrongLDelim: He, emStrongRDelimAst: Ge, emStrongRDelimUnd: Qe, escape: Ae, link: Ve, nolink: ke, punctuation: Be, reflink: he, reflinkSearch: Ye, tag: Je, text: Ie, url: _ };
1595
- var et = { ...X, link: d(/^!?\[(label)\]\((.*?)\)/).replace("label", q).getRegex(), reflink: d(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label", q).getRegex() };
1596
- var N = { ...X, emStrongRDelimAst: Ne, emStrongLDelim: Ze, delLDelim: je, delRDelim: Ue, url: d(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol", se).replace("email", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(), _backpedal: /(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/, del: /^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/, text: d(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol", se).getRegex() };
1597
- var tt = { ...N, br: d(le).replace("{2,}", "*").getRegex(), text: d(N.text).replace("\\b_", "\\b_| {2,}\\n").replace(/\{2,\}/g, "*").getRegex() };
1598
- var B = { normal: K, gfm: ze, pedantic: Ee };
1599
- var A = { normal: X, gfm: N, breaks: tt, pedantic: et };
1600
- var nt = { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" };
1601
- var de = (l) => nt[l];
1602
- function O(l, e) {
2257
+ var x = { codeRemoveIndent: /^(?: {0,3}\t| {1,4})/gm, outputLinkReplace: /\\([\[\]])/g, indentCodeCompensation: /^(\s+)(?:```)/, beginningSpace: /^\s+/, endingHash: /#$/, startingSpaceChar: /^ /, endingSpaceChar: / $/, endingSpaceTabChar: /[ \t]$/, nonSpaceChar: /[^ ]/, newLineCharGlobal: /\n/g, tabCharGlobal: /\t/g, leadingSpaceTab: /^[ \t]+/, multipleSpaceGlobal: /\s+/g, blankLine: /^[ \t]*$/, doubleBlankLine: /\n[ \t]*\n[ \t]*$/, blockquoteStart: /^ {0,3}>/, blockquoteSetextReplace: /\n {0,3}((?:=+|-+) *)(?=\n|$)/g, blockquoteSetextReplace2: /^ {0,3}>[ \t]?/gm, listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g, listIsTask: /^\[[ xX]\] +\S/, listReplaceTask: /^\[[ xX]\] +/, listTaskCheckbox: /\[[ xX]\]/, anyLine: /\n.*\n/, hrefBrackets: /^<(.*)>$/, tableDelimiter: /[:|]/, tableAlignChars: /^\||\| *$/g, tableRowBlankLine: /\n[ \t]*$/, tableAlignRight: /^ *-+: *$/, tableAlignCenter: /^ *:-+: *$/, tableAlignLeft: /^ *:-+ *$/, startATag: /^<a /i, endATag: /^<\/a>/i, startPreScriptTag: /^<(pre|code|kbd|script)(\s|>)/i, endPreScriptTag: /^<\/(pre|code|kbd|script)(\s|>)/i, startAngleBracket: /^</, endAngleBracket: />$/, pedanticHrefTitle: /^([^'"]*[^\s])\s+(['"])(.*)\2/, unicodeAlphaNumeric: /[\p{L}\p{N}]/u, numericCharacterReference: /&#(?:(\d{1,7})|[Xx]([A-Fa-f0-9]{1,6}));/, numericCharacterReferenceOrAmpersand: /&#(?:(\d{1,7})|[Xx]([A-Fa-f0-9]{1,6}));|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g, escapeTest: /[&<>"']/, escapeReplace: /[&<>"']/g, escapeTestNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/, escapeReplaceNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g, caret: /(^|[^\[])\^/g, percentDecode: /%25/g, findPipe: /\|/g, splitPipe: / \|/, slashPipe: /\\\|/g, carriageReturn: /\r\n|\r/g, spaceLine: /^ +$/gm, notSpaceStart: /^\S*/, endingNewline: /\n$/, listItemRegex: (a) => new RegExp(`^( {0,3}${a})((?:[ ][^\\n]*)?(?:\\n|$))`), nextBulletRegex: D((a) => new RegExp(`^ {0,${a}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)), hrRegex: D((a) => new RegExp(`^ {0,${a}}((?:-[ ]*){3,}|(?:_[ ]*){3,}|(?:\\*[ ]*){3,})(?:\\n+|$)`)), fencesBeginRegex: D((a) => new RegExp(`^ {0,${a}}(?:\`\`\`|~~~)`)), headingBeginRegex: D((a) => new RegExp(`^ {0,${a}}#`)), htmlBeginRegex: D((a) => new RegExp(`^ {0,${a}}(?:</?(?:${Q})(?: +|$|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\s>]|$)|!--)|<\\?|<![A-Za-z]|<!\\[CDATA\\[)`, "i")), blockquoteBeginRegex: D((a) => new RegExp(`^ {0,${a}}>`)) };
2258
+ var Ee = /^(?:[ \t]*(?:\n|$))+/;
2259
+ var Me = /^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/;
2260
+ var Ce = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/;
2261
+ var N = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/;
2262
+ var Ie = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/;
2263
+ var Y = / {0,3}(?:[*+-]|\d{1,9}[.)])/;
2264
+ var fe = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |fences|blockquote|heading|hr|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/;
2265
+ var me = h(fe).replace(/bull/g, Y).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}(?:\s|$)/).replace(/hr/g, / {0,3}(?:(?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/\|table/g, "").getRegex();
2266
+ var Be = h(fe).replace(/bull/g, Y).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}(?:\s|$)/).replace(/hr/g, / {0,3}(?:(?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/table/g, / {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex();
2267
+ var ee = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table|[ \t]+\n)[^\n]+)*)/;
2268
+ var De = /^[^\n]+/;
2269
+ var te = /(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/;
2270
+ var qe = h(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label", te).replace("title", /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex();
2271
+ var Ze = h(/^(bull)([ \t][^\n]*?)?(?:\n|$)/).replace(/bull/g, Y).getRegex();
2272
+ var Q = "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul";
2273
+ var ne = /<!--(?:-?>|[\s\S]*?(?:-->|$))/;
2274
+ var ve = h("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n*|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>[^\\n]*\\n*|$)|<![A-Z][\\s\\S]*?(?:>[^\\n]*\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>[^\\n]*\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|<(?!(?:script|pre|style|textarea)(?![a-z0-9-]))([a-z][a-z0-9-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|</[a-z][a-z0-9-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$))", "i").replace("comment", ne).replace("tag", Q).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex();
2275
+ var xe = (a) => h(ee).replace("hr", N).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("|table", "").replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace("list", a).replace("html", " {0,3}(?:</?(?:tag)(?: +|\\n|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\s>]|$)|!--)|<\\?|<![A-Za-z]|<!\\[CDATA\\[)").replace("tag", Q).getRegex();
2276
+ var He = xe(/ {0,3}(?:[*+-]|1[.)])[ \t]+[^ \t\n]/);
2277
+ var Ge = xe(/ {0,3}(?:[*+-]|\d{1,9}[.)])(?:[ \t]|\n|$)/);
2278
+ var Ne = h(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph", Ge).getRegex();
2279
+ var re = { blockquote: Ne, code: Me, def: qe, fences: Ce, heading: Ie, hr: N, html: ve, lheading: me, list: Ze, newline: Ee, paragraph: He, table: M, text: De };
2280
+ var de = h("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr", N).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("blockquote", " {0,3}>").replace("code", "(?: {4}| {0,3}\t)[^\\n]").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace("list", " {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html", " {0,3}(?:</?(?:tag)(?: +|\\n|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\s>]|$)|!--)|<\\?|<![A-Za-z]|<!\\[CDATA\\[)").replace("tag", Q).getRegex();
2281
+ var Qe = { ...re, lheading: Be, table: de, paragraph: h(ee).replace("hr", N).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("table", de).replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace("list", " {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]").replace("html", " {0,3}(?:</?(?:tag)(?: +|\\n|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\s>]|$)|!--)|<\\?|<![A-Za-z]|<!\\[CDATA\\[)").replace("tag", Q).getRegex() };
2282
+ var je = { ...re, html: h(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment", ne).replace(/tag/g, "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(), def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, heading: /^(#{1,6})(.*)(?:\n+|$)/, fences: M, lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/, paragraph: h(ee).replace("hr", N).replace("heading", ` *#{1,6} *[^
2283
+ ]`).replace("lheading", me).replace("|table", "").replace("blockquote", " {0,3}>").replace("|fences", "").replace("|list", "").replace("|html", "").replace("|tag", "").getRegex() };
2284
+ var Fe = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/;
2285
+ var Ue = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/;
2286
+ var be = /^( {2,}|\\)\n(?!\s*$)[ \t]*/;
2287
+ var Ke = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/;
2288
+ var S = /[\p{P}\p{S}]/u;
2289
+ var q = /[\s\p{P}\p{S}]/u;
2290
+ var j = /[^\s\p{P}\p{S}]/u;
2291
+ var Xe = h(/^((?![*_])punctSpace)/, "u").replace(/punctSpace/g, q).getRegex();
2292
+ var We = /[\p{Pi}\p{Ps}"']/u;
2293
+ var Re = /(?!~)[\p{P}\p{S}]/u;
2294
+ var Ve = /(?!~)[\s\p{P}\p{S}]/u;
2295
+ var Je = /(?:[^\s\p{P}\p{S}]|~)/u;
2296
+ var Ye = h(/link|precode-code|html/, "g").replace("link", /\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-", ze ? "(?<!`)()" : "(^^|[^`])").replace("code", /(?<b>`+)[^`]+\k<b>(?!`)/).replace("html", /<(?! )[^<>]*?>/).getRegex();
2297
+ var Te = /^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/;
2298
+ var et = h(Te, "u").replace(/punct/g, S).getRegex();
2299
+ var tt = h(Te, "u").replace(/punct/g, Re).getRegex();
2300
+ var nt = /^(?:\*+(?:((?!\*)(?!openQuote)punct)|([^\s*]))?)|^_+(?:((?!_)(?!openQuote)punct)|([^\s_]))?/;
2301
+ var rt = h(nt, "u").replace(/openQuote/g, We).replace(/punct/g, S).getRegex();
2302
+ var Oe = "^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)";
2303
+ var st = h(Oe, "gu").replace(/notPunctSpace/g, j).replace(/punctSpace/g, q).replace(/punct/g, S).getRegex();
2304
+ var it = h(Oe, "gu").replace(/notPunctSpace/g, Je).replace(/punctSpace/g, Ve).replace(/punct/g, Re).getRegex();
2305
+ var ot = "^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)[\\s](\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|(?:(?!\\*)punct|notPunctSpace)(\\*+)(?!\\*)(?=notPunctSpace)";
2306
+ var at = h(ot, "gu").replace(/notPunctSpace/g, j).replace(/punctSpace/g, q).replace(/punct/g, S).getRegex();
2307
+ var lt = h("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)", "gu").replace(/notPunctSpace/g, j).replace(/punctSpace/g, q).replace(/punct/g, S).getRegex();
2308
+ var ut = "^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)[\\s](_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)|(?:(?!_)punct|notPunctSpace)(_+)(?!_)(?=notPunctSpace)";
2309
+ var pt = h(ut, "gu").replace(/notPunctSpace/g, j).replace(/punctSpace/g, q).replace(/punct/g, S).getRegex();
2310
+ var ct = h(/^~~?(?:((?!~)punct)|[^\s~])/, "u").replace(/punct/g, S).getRegex();
2311
+ var ht = "^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)";
2312
+ var dt = h(ht, "gu").replace(/notPunctSpace/g, j).replace(/punctSpace/g, q).replace(/punct/g, S).getRegex();
2313
+ var kt = h(/\\(punct)/, "gu").replace(/punct/g, S).getRegex();
2314
+ var gt = h(/(`+)(?:[^`]|[^`][\s\S]*?[^`])\1(?!`)|`+|\\(punct)/, "gu").replace(/punct/g, S).getRegex();
2315
+ var ft = h(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex();
2316
+ var mt = h(ne).replace("(?:-->|$)", "-->").getRegex();
2317
+ var xt = h("^comment|^</[a-zA-Z][a-zA-Z0-9-]*\\s*>|^<[a-zA-Z][a-zA-Z0-9-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment", mt).replace("attribute", /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex();
2318
+ var we = /\[(?:\\[\s\S]|[^\[\]\\])*\]/;
2319
+ var K = h(/(?:\[(?:brackets|\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/).replace("brackets", we).getRegex();
2320
+ var bt = h(/^!?\[(label)\]\([ \t\n]*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?[ \t\n]*\)/).replace("label", K).replace("href", /<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]+|(?=\))/).replace("title", /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex();
2321
+ var Rt = h(/^!?\[(label)\]\[(ref)\]/).replace("label", K).replace("ref", te).getRegex();
2322
+ var Tt = h(/^!?\[(ref)\](?:\[\])?/).replace("ref", te).getRegex();
2323
+ var ke = /(?!\s*\])(?:\\[\s\S]|[^\[\]\\]){1,999}/;
2324
+ var Ot = h(/(?:[^\[\]\\`]*(?:\[(?:brackets|\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\]))){0,999}?[^\[\]\\`]*?/).replace("brackets", we).getRegex();
2325
+ var wt = h("reflink|nolink(?!\\()", "g").replace("reflink", h(/^!?\[(label)\]\[(ref)\]/).replace("label", Ot).replace("ref", ke).getRegex()).replace("nolink", h(/^!?\[(ref)\](?:\[\])?/).replace("ref", ke).getRegex()).getRegex();
2326
+ var ge = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/;
2327
+ var Pt = /[A-Za-z0-9._+-]+@[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![\w-])/;
2328
+ var yt = h(/(?:mailto:email|xmpp:email(?:\/[A-Za-z0-9@.]+)?)/).replace(/email/g, Pt).getRegex();
2329
+ var se = { _backpedal: M, anyPunctuation: kt, anyPunctuationOutsideCode: gt, autolink: ft, blockSkip: Ye, br: be, code: Ue, del: M, delLDelim: M, delRDelim: M, emStrongLDelim: et, emStrongRDelimAst: st, emStrongRDelimUnd: lt, escape: Fe, link: bt, nolink: Tt, punctuation: Xe, reflink: Rt, reflinkSearch: wt, tag: xt, text: Ke, url: M };
2330
+ var St = { ...se, emStrongLDelim: rt, emStrongRDelimAst: at, emStrongRDelimUnd: pt, link: h(/^!?\[(label)\]\((.*?)\)/).replace("label", K).getRegex(), reflink: h(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label", K).getRegex() };
2331
+ var J = { ...se, emStrongRDelimAst: it, emStrongLDelim: tt, delLDelim: ct, delRDelim: dt, url: h(/^emailProtocol|^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("emailProtocol", yt).replace("protocol", ge).replace("email", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![\w-])/).getRegex(), _backpedal: /(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/, del: /^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/, text: h(/^(?:[^a-zA-Z0-9](?=emailProtocol)|(`+|~+|[^`~])(?:(?=[`~])|(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9](?=emailProtocol)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))))/).replace("protocol", ge).replace(/emailProtocol/g, /(?:mailto|xmpp):/).getRegex() };
2332
+ var _t = { ...J, br: h(be).replace("{2,}", "*").getRegex(), text: h(J.text).replace("\\b_", "\\b_| {2,}\\n").replace(/\{2,\}/g, "*").getRegex() };
2333
+ var F = { normal: re, gfm: Qe, pedantic: je };
2334
+ var Z = { normal: se, gfm: J, breaks: _t, pedantic: St };
2335
+ var $t = { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" };
2336
+ var Pe = (a) => $t[a];
2337
+ function w(a, e) {
1603
2338
  if (e) {
1604
- if (m.escapeTest.test(l))
1605
- return l.replace(m.escapeReplace, de);
1606
- } else if (m.escapeTestNoEncode.test(l))
1607
- return l.replace(m.escapeReplaceNoEncode, de);
1608
- return l;
2339
+ if (x.escapeTest.test(a))
2340
+ return a.replace(x.escapeReplace, Pe);
2341
+ } else if (x.escapeTestNoEncode.test(a))
2342
+ return a.replace(x.escapeReplaceNoEncode, Pe);
2343
+ return a;
2344
+ }
2345
+ function ye(a) {
2346
+ return x.numericCharacterReference.test(a) ? a.replace(x.numericCharacterReferenceOrAmpersand, (e, t, n) => {
2347
+ if (t === undefined && n === undefined)
2348
+ return "&amp;";
2349
+ let i = t === undefined ? Number.parseInt(n, 16) : Number.parseInt(t, 10);
2350
+ return i === 0 || i > 1114111 || i >= 55296 && i <= 57343 ? "�" : i === 38 ? "&amp;" : String.fromCodePoint(i);
2351
+ }) : a;
1609
2352
  }
1610
- function J(l) {
2353
+ function ie(a) {
1611
2354
  try {
1612
- l = encodeURI(l).replace(m.percentDecode, "%");
2355
+ a = encodeURI(a).replace(x.percentDecode, "%");
1613
2356
  } catch {
1614
2357
  return null;
1615
2358
  }
1616
- return l;
2359
+ return a;
1617
2360
  }
1618
- function V(l, e) {
1619
- let t = l.replace(m.findPipe, (r, i, o) => {
1620
- let u = false, a = i;
1621
- for (;--a >= 0 && o[a] === "\\"; )
1622
- u = !u;
1623
- return u ? "|" : " |";
1624
- }), n = t.split(m.splitPipe), s = 0;
2361
+ function oe(a, e) {
2362
+ let t = a.replace(x.findPipe, (r, o, s) => {
2363
+ let l = false, u = o;
2364
+ for (;--u >= 0 && s[u] === "\\"; )
2365
+ l = !l;
2366
+ return l ? "|" : " |";
2367
+ }), n = t.split(x.splitPipe), i = 0;
1625
2368
  if (n[0].trim() || n.shift(), n.length > 0 && !n.at(-1)?.trim() && n.pop(), e)
1626
2369
  if (n.length > e)
1627
2370
  n.splice(e);
1628
2371
  else
1629
2372
  for (;n.length < e; )
1630
2373
  n.push("");
1631
- for (;s < n.length; s++)
1632
- n[s] = n[s].trim().replace(m.slashPipe, "|");
2374
+ for (;i < n.length; i++)
2375
+ n[i] = n[i].trim().replace(x.slashPipe, "|");
1633
2376
  return n;
1634
2377
  }
1635
- function $(l, e, t) {
1636
- let n = l.length;
2378
+ function A(a, e, t) {
2379
+ let n = a.length;
1637
2380
  if (n === 0)
1638
2381
  return "";
1639
- let s = 0;
1640
- for (;s < n; ) {
1641
- let r = l.charAt(n - s - 1);
2382
+ let i = 0;
2383
+ for (;i < n; ) {
2384
+ let r = a.charAt(n - i - 1);
1642
2385
  if (r === e && !t)
1643
- s++;
2386
+ i++;
1644
2387
  else if (r !== e && t)
1645
- s++;
2388
+ i++;
1646
2389
  else
1647
2390
  break;
1648
2391
  }
1649
- return l.slice(0, n - s);
2392
+ return a.slice(0, n - i);
1650
2393
  }
1651
- function Y(l) {
1652
- let e = l.split(`
2394
+ function ae(a) {
2395
+ let e = a.split(`
1653
2396
  `), t = e.length - 1;
1654
- for (;t >= 0 && m.blankLine.test(e[t]); )
2397
+ for (;t >= 0 && x.blankLine.test(e[t]); )
1655
2398
  t--;
1656
- return e.length - t <= 2 ? l : e.slice(0, t + 1).join(`
2399
+ return e.length - t <= 2 ? a : e.slice(0, t + 1).join(`
1657
2400
  `);
1658
2401
  }
1659
- function ge(l, e) {
1660
- if (l.indexOf(e[1]) === -1)
2402
+ function v(a) {
2403
+ return a.trim().toLowerCase().toUpperCase().toLowerCase();
2404
+ }
2405
+ function le(a, e) {
2406
+ if (a.indexOf(e[0]) === -1 && a.indexOf(e[1]) === -1)
1661
2407
  return -1;
1662
2408
  let t = 0;
1663
- for (let n = 0;n < l.length; n++)
1664
- if (l[n] === "\\")
2409
+ for (let n = 0;n < a.length; n++)
2410
+ if (a[n] === "\\")
1665
2411
  n++;
1666
- else if (l[n] === e[0])
2412
+ else if (a[n] === e[0])
1667
2413
  t++;
1668
- else if (l[n] === e[1] && (t--, t < 0))
2414
+ else if (a[n] === e[1] && (t--, t < 0))
1669
2415
  return n;
1670
2416
  return t > 0 ? -2 : -1;
1671
2417
  }
1672
- function fe(l, e = 0) {
2418
+ function X(a, e = 0) {
1673
2419
  let t = e, n = "";
1674
- for (let s of l)
1675
- if (s === "\t") {
2420
+ for (let i of a)
2421
+ if (i === "\t") {
1676
2422
  let r = 4 - t % 4;
1677
2423
  n += " ".repeat(r), t += r;
1678
2424
  } else
1679
- n += s, t++;
2425
+ n += i, t++;
1680
2426
  return n;
1681
2427
  }
1682
- function me(l, e, t, n, s) {
1683
- let r = e.href, i = e.title || null, o = l[1].replace(s.other.outputLinkReplace, "$1");
1684
- n.state.inLink = true;
1685
- let u = { type: l[0].charAt(0) === "!" ? "image" : "link", raw: t, href: r, title: i, text: o, tokens: n.inlineTokens(o) };
1686
- return n.state.inLink = false, u;
2428
+ function Se(a, e, t, n, i) {
2429
+ let r = e.href, o = e.title || null, s = a[1].replace(i.other.outputLinkReplace, "$1"), l = a[0].charAt(0) === "!", u = n.state.inLink, c = n.state.linkEmitted, p = n.state.inRawBlock;
2430
+ n.state.inLink = true, n.state.linkEmitted = false;
2431
+ let d = n.inlineTokens(s), g = n.state.linkEmitted;
2432
+ if (n.state.linkEmitted = c, n.state.inLink = u, !l) {
2433
+ if (g) {
2434
+ n.state.inRawBlock = p;
2435
+ return;
2436
+ }
2437
+ n.state.linkEmitted = true;
2438
+ }
2439
+ return { type: l ? "image" : "link", raw: t, href: r, title: o, text: s, tokens: d };
1687
2440
  }
1688
- function rt(l, e, t) {
1689
- let n = l.match(t.other.indentCodeCompensation);
2441
+ function Lt(a, e, t) {
2442
+ let n = a.match(t.other.indentCodeCompensation);
1690
2443
  if (n === null)
1691
2444
  return e;
1692
- let s = n[1];
2445
+ let i = n[1];
1693
2446
  return e.split(`
1694
2447
  `).map((r) => {
1695
- let i = r.match(t.other.beginningSpace);
1696
- if (i === null)
2448
+ let o = r.match(t.other.beginningSpace);
2449
+ if (o === null)
1697
2450
  return r;
1698
- let [o] = i;
1699
- return o.length >= s.length ? r.slice(s.length) : r;
2451
+ let [s] = o;
2452
+ return r.slice(Math.min(s.length, i.length));
1700
2453
  }).join(`
1701
2454
  `);
1702
2455
  }
1703
- var w = class {
2456
+ function _e(a, e, t, n) {
2457
+ if (!e.includes("<"))
2458
+ return false;
2459
+ for (let i = 0;i < e.length; i++) {
2460
+ if (e[i] === "\\") {
2461
+ i++;
2462
+ continue;
2463
+ }
2464
+ if (e[i] === "`") {
2465
+ let s = n.inline.code.exec(e.slice(i));
2466
+ if (s) {
2467
+ i += s[0].length - 1;
2468
+ continue;
2469
+ }
2470
+ }
2471
+ if (e[i] !== "<")
2472
+ continue;
2473
+ let r = a.slice(t + i), o = n.inline.tag.exec(r) || n.inline.autolink.exec(r);
2474
+ if (o) {
2475
+ if (o[0].length > e.length - i)
2476
+ return true;
2477
+ i += o[0].length - 1;
2478
+ }
2479
+ }
2480
+ return false;
2481
+ }
2482
+ var _ = class {
1704
2483
  options;
1705
2484
  rules;
1706
2485
  lexer;
1707
2486
  constructor(e) {
1708
- this.options = e || T;
2487
+ this.options = e || y;
1709
2488
  }
1710
2489
  space(e) {
1711
2490
  let t = this.rules.block.newline.exec(e);
@@ -1715,15 +2494,15 @@ var w = class {
1715
2494
  code(e) {
1716
2495
  let t = this.rules.block.code.exec(e);
1717
2496
  if (t) {
1718
- let n = this.options.pedantic ? t[0] : Y(t[0]), s = n.replace(this.rules.other.codeRemoveIndent, "");
1719
- return { type: "code", raw: n, codeBlockStyle: "indented", text: s };
2497
+ let n = this.options.pedantic ? t[0] : ae(t[0]), i = n.replace(this.rules.other.codeRemoveIndent, "");
2498
+ return { type: "code", raw: n, codeBlockStyle: "indented", text: i };
1720
2499
  }
1721
2500
  }
1722
2501
  fences(e) {
1723
2502
  let t = this.rules.block.fences.exec(e);
1724
2503
  if (t) {
1725
- let n = t[0], s = rt(n, t[3] || "", this.rules);
1726
- return { type: "code", raw: n, lang: t[2] ? t[2].trim().replace(this.rules.inline.anyPunctuation, "$1") : t[2], text: s };
2504
+ let n = t[0], i = Lt(n, t[3] || "", this.rules);
2505
+ return { type: "code", raw: n, lang: t[2] ? t[2].trim().replace(this.rules.inline.anyPunctuation, "$1") : t[2], text: i };
1727
2506
  }
1728
2507
  }
1729
2508
  heading(e) {
@@ -1731,176 +2510,183 @@ var w = class {
1731
2510
  if (t) {
1732
2511
  let n = t[2].trim();
1733
2512
  if (this.rules.other.endingHash.test(n)) {
1734
- let s = $(n, "#");
1735
- (this.options.pedantic || !s || this.rules.other.endingSpaceChar.test(s)) && (n = s.trim());
2513
+ let i = A(n, "#");
2514
+ (this.options.pedantic || !i || this.rules.other.endingSpaceTabChar.test(i)) && (n = i.trim());
1736
2515
  }
1737
- return { type: "heading", raw: $(t[0], `
2516
+ return { type: "heading", raw: A(t[0], `
1738
2517
  `), depth: t[1].length, text: n, tokens: this.lexer.inline(n) };
1739
2518
  }
1740
2519
  }
1741
2520
  hr(e) {
1742
2521
  let t = this.rules.block.hr.exec(e);
1743
2522
  if (t)
1744
- return { type: "hr", raw: $(t[0], `
2523
+ return { type: "hr", raw: A(t[0], `
1745
2524
  `) };
1746
2525
  }
1747
2526
  blockquote(e) {
1748
2527
  let t = this.rules.block.blockquote.exec(e);
1749
2528
  if (t) {
1750
- let n = $(t[0], `
2529
+ let n = A(t[0], `
1751
2530
  `).split(`
1752
- `), s = "", r = "", i = [];
2531
+ `), i = "", r = "", o = [];
1753
2532
  for (;n.length > 0; ) {
1754
- let o = false, u = [], a;
1755
- for (a = 0;a < n.length; a++)
1756
- if (this.rules.other.blockquoteStart.test(n[a]))
1757
- u.push(n[a]), o = true;
1758
- else if (!o)
1759
- u.push(n[a]);
2533
+ let s = false, l = [], u;
2534
+ for (u = 0;u < n.length; u++)
2535
+ if (this.rules.other.blockquoteStart.test(n[u]))
2536
+ l.push(n[u]), s = true;
2537
+ else if (!s)
2538
+ l.push(n[u]);
1760
2539
  else
1761
2540
  break;
1762
- n = n.slice(a);
1763
- let c = u.join(`
2541
+ n = n.slice(u);
2542
+ let c = l.join(`
1764
2543
  `), p = c.replace(this.rules.other.blockquoteSetextReplace, `
1765
2544
  $1`).replace(this.rules.other.blockquoteSetextReplace2, "");
1766
- s = s ? `${s}
2545
+ i = i ? `${i}
1767
2546
  ${c}` : c, r = r ? `${r}
1768
2547
  ${p}` : p;
1769
- let k = this.lexer.state.top;
1770
- if (this.lexer.state.top = true, this.lexer.blockTokens(p, i, true), this.lexer.state.top = k, n.length === 0)
2548
+ let d = this.lexer.state.top;
2549
+ if (this.lexer.state.top = true, this.lexer.blockTokens(p, o, true), this.lexer.state.top = d, n.length === 0)
1771
2550
  break;
1772
- let h = i.at(-1);
1773
- if (h?.type === "code")
2551
+ let g = o.at(-1);
2552
+ if (g?.type === "code" || g?.type === "heading" || g?.type === "hr" || g?.type === "html")
1774
2553
  break;
1775
- if (h?.type === "blockquote") {
1776
- let R = h, f = R.raw + `
1777
- ` + n.join(`
1778
- `), S = this.blockquote(f);
1779
- i[i.length - 1] = S, s = s.substring(0, s.length - R.raw.length) + S.raw, r = r.substring(0, r.length - R.text.length) + S.text;
2554
+ if (g?.type === "blockquote") {
2555
+ let k = g, P = n.join(`
2556
+ `), R = k.raw + `
2557
+ ` + P.replace(this.rules.other.blockquoteSetextReplace2, ""), m = this.blockquote(R);
2558
+ o[o.length - 1] = m;
2559
+ let E = R.substring(m.raw.length).replace(/^\n/, ""), b = E ? E.split(`
2560
+ `).length : 0, H = b ? n.slice(0, -b) : n;
2561
+ H.length > 0 && (i = `${i}
2562
+ ${H.join(`
2563
+ `)}`), r = r.substring(0, r.length - k.text.length) + m.text;
1780
2564
  break;
1781
- } else if (h?.type === "list") {
1782
- let R = h, f = R.raw + `
2565
+ } else if (g?.type === "list") {
2566
+ let k = g, P = k.raw + `
1783
2567
  ` + n.join(`
1784
- `), S = this.list(f);
1785
- i[i.length - 1] = S, s = s.substring(0, s.length - h.raw.length) + S.raw, r = r.substring(0, r.length - R.raw.length) + S.raw, n = f.substring(i.at(-1).raw.length).split(`
2568
+ `), R = this.list(P);
2569
+ o[o.length - 1] = R, i = i.substring(0, i.length - g.raw.length) + R.raw, r = r.substring(0, r.length - k.raw.length) + R.raw, n = P.substring(o.at(-1).raw.length).split(`
1786
2570
  `);
1787
2571
  continue;
1788
2572
  }
1789
2573
  }
1790
- return { type: "blockquote", raw: s, tokens: i, text: r };
2574
+ return { type: "blockquote", raw: i, tokens: o, text: r };
1791
2575
  }
1792
2576
  }
1793
2577
  list(e) {
1794
2578
  let t = this.rules.block.list.exec(e);
1795
2579
  if (t) {
1796
- let n = t[1].trim(), s = n.length > 1, r = { type: "list", raw: "", ordered: s, start: s ? +n.slice(0, -1) : "", loose: false, items: [] };
1797
- n = s ? `\\d{1,9}\\${n.slice(-1)}` : `\\${n}`, this.options.pedantic && (n = s ? n : "[*+-]");
1798
- let i = this.rules.other.listItemRegex(n), o = false;
2580
+ let n = e, i = () => n.length - e.length, r = t[1].trim(), o = r.length > 1, s = { type: "list", raw: "", ordered: o, start: o ? +r.slice(0, -1) : "", loose: false, items: [] };
2581
+ r = o ? `\\d{1,9}\\${r.slice(-1)}` : `\\${r}`, this.options.pedantic && (r = o ? r : "[*+-]");
2582
+ let l = this.rules.other.listItemRegex(r), u = false;
1799
2583
  for (;e; ) {
1800
- let a = false, c = "", p = "";
1801
- if (!(t = i.exec(e)) || this.rules.block.hr.test(e))
2584
+ let p = false, d = "";
2585
+ if (!(t = l.exec(e)) || this.rules.block.hr.test(e))
1802
2586
  break;
1803
- c = t[0], e = e.substring(c.length);
1804
- let k = fe(t[2].split(`
1805
- `, 1)[0], t[1].length), h = e.split(`
1806
- `, 1)[0], R = !k.trim(), f = 0;
1807
- if (this.options.pedantic ? (f = 2, p = k.trimStart()) : R ? f = t[1].length + 1 : (f = k.search(this.rules.other.nonSpaceChar), f = f > 4 ? 1 : f, p = k.slice(f), f += t[1].length), R && this.rules.other.blankLine.test(h) && (c += h + `
1808
- `, e = e.substring(h.length + 1), a = true), !a) {
1809
- let S = this.rules.other.nextBulletRegex(f), ee = this.rules.other.hrRegex(f), te = this.rules.other.fencesBeginRegex(f), ne = this.rules.other.headingBeginRegex(f), xe = this.rules.other.htmlBeginRegex(f), be = this.rules.other.blockquoteBeginRegex(f);
2587
+ let g = i();
2588
+ e = e.substring(t[0].length);
2589
+ let k = t[2].split(`
2590
+ `, 1)[0], P = t[1].length, R = this.options.pedantic ? X(k, P) : k.replace(this.rules.other.leadingSpaceTab, (W) => X(W, P)), m = e.split(`
2591
+ `, 1)[0], E = !R.trim(), b = 0;
2592
+ if (this.options.pedantic ? (b = 2, d = R.trimStart()) : E ? b = P + 1 : (b = R.search(this.rules.other.nonSpaceChar), b = b > 4 ? 1 : b, d = R.slice(b), b += P), E && this.rules.other.blankLine.test(m) && (e = e.substring(m.length + 1), p = true), !p) {
2593
+ let W = this.rules.other.nextBulletRegex(b), ue = this.rules.other.hrRegex(b), pe = this.rules.other.fencesBeginRegex(b), ce = this.rules.other.headingBeginRegex(b), $e = this.rules.other.htmlBeginRegex(b), Le = this.rules.other.blockquoteBeginRegex(b);
1810
2594
  for (;e; ) {
1811
- let Z = e.split(`
1812
- `, 1)[0], C;
1813
- if (h = Z, this.options.pedantic ? (h = h.replace(this.rules.other.listReplaceNesting, " "), C = h) : C = h.replace(this.rules.other.tabCharGlobal, " "), te.test(h) || ne.test(h) || xe.test(h) || be.test(h) || S.test(h) || ee.test(h))
2595
+ let he = e.split(`
2596
+ `, 1)[0], G;
2597
+ if (m = he, this.options.pedantic ? (m = m.replace(this.rules.other.listReplaceNesting, " "), G = m) : G = m.replace(this.rules.other.leadingSpaceTab, (Ae) => X(Ae)), pe.test(m) || ce.test(m) || $e.test(m) || Le.test(m) || W.test(m) || ue.test(m))
1814
2598
  break;
1815
- if (C.search(this.rules.other.nonSpaceChar) >= f || !h.trim())
1816
- p += `
1817
- ` + C.slice(f);
2599
+ if (G.search(this.rules.other.nonSpaceChar) >= b || !m.trim())
2600
+ d += `
2601
+ ` + G.slice(b);
1818
2602
  else {
1819
- if (R || k.replace(this.rules.other.tabCharGlobal, " ").search(this.rules.other.nonSpaceChar) >= 4 || te.test(k) || ne.test(k) || ee.test(k))
2603
+ if (E || R.replace(this.rules.other.tabCharGlobal, " ").search(this.rules.other.nonSpaceChar) >= 4 || pe.test(R) || ce.test(R) || ue.test(R))
1820
2604
  break;
1821
- p += `
1822
- ` + h;
2605
+ d += `
2606
+ ` + m;
1823
2607
  }
1824
- R = !h.trim(), c += Z + `
1825
- `, e = e.substring(Z.length + 1), k = C.slice(f);
2608
+ E = !m.trim(), e = e.substring(he.length + 1), R = G.slice(b);
1826
2609
  }
1827
2610
  }
1828
- r.loose || (o ? r.loose = true : this.rules.other.doubleBlankLine.test(c) && (o = true)), r.items.push({ type: "list_item", raw: c, task: !!this.options.gfm && this.rules.other.listIsTask.test(p), loose: false, text: p, tokens: [] }), r.raw += c;
2611
+ let H = n.slice(g, i());
2612
+ s.loose || (u ? s.loose = true : this.rules.other.doubleBlankLine.test(H) && (u = true)), s.items.push({ type: "list_item", raw: H, task: !!this.options.gfm && this.rules.other.listIsTask.test(d), loose: false, text: d, tokens: [] });
1829
2613
  }
1830
- let u = r.items.at(-1);
1831
- if (u)
1832
- u.raw = u.raw.trimEnd(), u.text = u.text.trimEnd();
2614
+ let c = s.items.at(-1);
2615
+ if (c)
2616
+ c.raw = c.raw.trimEnd(), c.text = c.text.trimEnd();
1833
2617
  else
1834
2618
  return;
1835
- r.raw = r.raw.trimEnd();
1836
- for (let a of r.items) {
1837
- this.lexer.state.top = false, a.tokens = this.lexer.blockTokens(a.text, []);
1838
- let c = a.tokens[0];
1839
- if (a.task && (c?.type === "text" || c?.type === "paragraph")) {
1840
- a.text = a.text.replace(this.rules.other.listReplaceTask, ""), c.raw = c.raw.replace(this.rules.other.listReplaceTask, ""), c.text = c.text.replace(this.rules.other.listReplaceTask, "");
2619
+ s.raw = n.slice(0, i()).trimEnd();
2620
+ for (let p of s.items)
2621
+ if (this.lexer.state.top = false, p.tokens = this.lexer.blockTokens(p.text, []), !s.loose) {
2622
+ let d = p.tokens.filter((k) => k.type === "space"), g = d.length > 0 && d.some((k) => this.rules.other.anyLine.test(k.raw));
2623
+ s.loose = g;
2624
+ }
2625
+ for (let p of s.items) {
2626
+ let d = p.tokens[0];
2627
+ if (p.task && (d?.type === "text" || d?.type === "paragraph")) {
2628
+ p.text = p.text.replace(this.rules.other.listReplaceTask, ""), d.raw = d.raw.replace(this.rules.other.listReplaceTask, ""), d.text = d.text.replace(this.rules.other.listReplaceTask, "");
1841
2629
  for (let k = this.lexer.inlineQueue.length - 1;k >= 0; k--)
1842
2630
  if (this.rules.other.listIsTask.test(this.lexer.inlineQueue[k].src)) {
1843
2631
  this.lexer.inlineQueue[k].src = this.lexer.inlineQueue[k].src.replace(this.rules.other.listReplaceTask, "");
1844
2632
  break;
1845
2633
  }
1846
- let p = this.rules.other.listTaskCheckbox.exec(a.raw);
1847
- if (p) {
1848
- let k = { type: "checkbox", raw: p[0] + " ", checked: p[0] !== "[ ]" };
1849
- a.checked = k.checked, r.loose ? a.tokens[0] && ["paragraph", "text"].includes(a.tokens[0].type) && "tokens" in a.tokens[0] && a.tokens[0].tokens ? (a.tokens[0].raw = k.raw + a.tokens[0].raw, a.tokens[0].text = k.raw + a.tokens[0].text, a.tokens[0].tokens.unshift(k)) : a.tokens.unshift({ type: "paragraph", raw: k.raw, text: k.raw, tokens: [k] }) : a.tokens.unshift(k);
2634
+ let g = this.rules.other.listTaskCheckbox.exec(p.raw);
2635
+ if (g) {
2636
+ let k = { type: "checkbox", raw: g[0] + " ", checked: g[0] !== "[ ]" };
2637
+ p.checked = k.checked, s.loose ? p.tokens[0] && ["paragraph", "text"].includes(p.tokens[0].type) && "tokens" in p.tokens[0] && p.tokens[0].tokens ? (p.tokens[0].raw = k.raw + p.tokens[0].raw, p.tokens[0].text = k.raw + p.tokens[0].text, p.tokens[0].tokens.unshift(k)) : p.tokens.unshift({ type: "paragraph", raw: k.raw, text: k.raw, tokens: [k] }) : p.tokens.unshift(k);
1850
2638
  }
1851
2639
  } else
1852
- a.task && (a.task = false);
1853
- if (!r.loose) {
1854
- let p = a.tokens.filter((h) => h.type === "space"), k = p.length > 0 && p.some((h) => this.rules.other.anyLine.test(h.raw));
1855
- r.loose = k;
1856
- }
2640
+ p.task && (p.task = false);
1857
2641
  }
1858
- if (r.loose)
1859
- for (let a of r.items) {
1860
- a.loose = true;
1861
- for (let c of a.tokens)
1862
- c.type === "text" && (c.type = "paragraph");
2642
+ if (s.loose)
2643
+ for (let p of s.items) {
2644
+ p.loose = true;
2645
+ for (let d of p.tokens)
2646
+ d.type === "text" && (d.type = "paragraph");
1863
2647
  }
1864
- return r;
2648
+ return s;
1865
2649
  }
1866
2650
  }
1867
2651
  html(e) {
1868
2652
  let t = this.rules.block.html.exec(e);
1869
2653
  if (t) {
1870
- let n = Y(t[0]);
2654
+ let n = ae(t[0]);
1871
2655
  return { type: "html", block: true, raw: n, pre: t[1] === "pre" || t[1] === "script" || t[1] === "style", text: n };
1872
2656
  }
1873
2657
  }
1874
2658
  def(e) {
1875
2659
  let t = this.rules.block.def.exec(e);
1876
2660
  if (t) {
1877
- let n = t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, " "), s = t[2] ? t[2].replace(this.rules.other.hrefBrackets, "$1").replace(this.rules.inline.anyPunctuation, "$1") : "", r = t[3] ? t[3].substring(1, t[3].length - 1).replace(this.rules.inline.anyPunctuation, "$1") : t[3];
1878
- return { type: "def", tag: n, raw: $(t[0], `
1879
- `), href: s, title: r };
2661
+ if (!this.rules.other.startAngleBracket.test(t[2]) && le(t[2], "()") !== -1)
2662
+ return;
2663
+ let n = v(t[1]).replace(this.rules.other.multipleSpaceGlobal, " "), i = t[2] ? t[2].replace(this.rules.other.hrefBrackets, "$1").replace(this.rules.inline.anyPunctuation, "$1") : "", r = t[3] ? t[3].substring(1, t[3].length - 1).replace(this.rules.inline.anyPunctuation, "$1") : t[3];
2664
+ return { type: "def", tag: n, raw: A(t[0], `
2665
+ `), href: i, title: r };
1880
2666
  }
1881
2667
  }
1882
2668
  table(e) {
1883
2669
  let t = this.rules.block.table.exec(e);
1884
2670
  if (!t || !this.rules.other.tableDelimiter.test(t[2]))
1885
2671
  return;
1886
- let n = V(t[1]), s = t[2].replace(this.rules.other.tableAlignChars, "").split("|"), r = t[3]?.trim() ? t[3].replace(this.rules.other.tableRowBlankLine, "").split(`
1887
- `) : [], i = { type: "table", raw: $(t[0], `
2672
+ let n = oe(t[1]), i = t[2].replace(this.rules.other.tableAlignChars, "").split("|"), r = t[3]?.trim() ? t[3].replace(this.rules.other.tableRowBlankLine, "").split(`
2673
+ `) : [], o = { type: "table", raw: A(t[0], `
1888
2674
  `), header: [], align: [], rows: [] };
1889
- if (n.length === s.length) {
1890
- for (let o of s)
1891
- this.rules.other.tableAlignRight.test(o) ? i.align.push("right") : this.rules.other.tableAlignCenter.test(o) ? i.align.push("center") : this.rules.other.tableAlignLeft.test(o) ? i.align.push("left") : i.align.push(null);
1892
- for (let o = 0;o < n.length; o++)
1893
- i.header.push({ text: n[o], tokens: this.lexer.inline(n[o]), header: true, align: i.align[o] });
1894
- for (let o of r)
1895
- i.rows.push(V(o, i.header.length).map((u, a) => ({ text: u, tokens: this.lexer.inline(u), header: false, align: i.align[a] })));
1896
- return i;
2675
+ if (n.length === i.length) {
2676
+ for (let s of i)
2677
+ this.rules.other.tableAlignRight.test(s) ? o.align.push("right") : this.rules.other.tableAlignCenter.test(s) ? o.align.push("center") : this.rules.other.tableAlignLeft.test(s) ? o.align.push("left") : o.align.push(null);
2678
+ for (let s = 0;s < n.length; s++)
2679
+ o.header.push({ text: n[s], tokens: this.lexer.inline(n[s]), header: true, align: o.align[s] });
2680
+ for (let s of r)
2681
+ o.rows.push(oe(s, o.header.length).map((l, u) => ({ text: l, tokens: this.lexer.inline(l), header: false, align: o.align[u] })));
2682
+ return o;
1897
2683
  }
1898
2684
  }
1899
2685
  lheading(e) {
1900
2686
  let t = this.rules.block.lheading.exec(e);
1901
2687
  if (t) {
1902
2688
  let n = t[1].trim();
1903
- return { type: "heading", raw: $(t[0], `
2689
+ return { type: "heading", raw: A(t[0], `
1904
2690
  `), depth: t[2].charAt(0) === "=" ? 1 : 2, text: n, tokens: this.lexer.inline(n) };
1905
2691
  }
1906
2692
  }
@@ -1928,78 +2714,90 @@ ${p}` : p;
1928
2714
  return !this.lexer.state.inLink && this.rules.other.startATag.test(t[0]) ? this.lexer.state.inLink = true : this.lexer.state.inLink && this.rules.other.endATag.test(t[0]) && (this.lexer.state.inLink = false), !this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(t[0]) ? this.lexer.state.inRawBlock = true : this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(t[0]) && (this.lexer.state.inRawBlock = false), { type: "html", raw: t[0], inLink: this.lexer.state.inLink, inRawBlock: this.lexer.state.inRawBlock, block: false, text: t[0] };
1929
2715
  }
1930
2716
  link(e) {
2717
+ if (this.lexer.state.linkParenPossible === false)
2718
+ return;
1931
2719
  let t = this.rules.inline.link.exec(e);
1932
2720
  if (t) {
1933
- let n = t[2].trim();
1934
- if (!this.options.pedantic && this.rules.other.startAngleBracket.test(n)) {
1935
- if (!this.rules.other.endAngleBracket.test(n))
2721
+ let n = t[0].charAt(0) === "!" ? 2 : 1;
2722
+ if (!this.options.pedantic && _e(e, t[1], n, this.rules))
2723
+ return;
2724
+ let i = t[2].trim();
2725
+ if (!this.options.pedantic && this.rules.other.startAngleBracket.test(i)) {
2726
+ if (!this.rules.other.endAngleBracket.test(i))
1936
2727
  return;
1937
- let i = $(n.slice(0, -1), "\\");
1938
- if ((n.length - i.length) % 2 === 0)
2728
+ let s = A(i.slice(0, -1), "\\");
2729
+ if ((i.length - s.length) % 2 === 0)
1939
2730
  return;
1940
2731
  } else {
1941
- let i = ge(t[2], "()");
1942
- if (i === -2)
2732
+ let s = le(t[2], "()");
2733
+ if (s === -2)
1943
2734
  return;
1944
- if (i > -1) {
1945
- let u = (t[0].indexOf("!") === 0 ? 5 : 4) + t[1].length + i;
1946
- t[2] = t[2].substring(0, i), t[0] = t[0].substring(0, u).trim(), t[3] = "";
2735
+ if (s > -1) {
2736
+ let u = (t[0].indexOf("!") === 0 ? 5 : 4) + t[1].length + s;
2737
+ t[2] = t[2].substring(0, s), t[0] = t[0].substring(0, u).trim(), t[3] = "";
1947
2738
  }
1948
2739
  }
1949
- let s = t[2], r = "";
2740
+ let r = t[2], o = "";
1950
2741
  if (this.options.pedantic) {
1951
- let i = this.rules.other.pedanticHrefTitle.exec(s);
1952
- i && (s = i[1], r = i[3]);
2742
+ let s = this.rules.other.pedanticHrefTitle.exec(r);
2743
+ s && (r = s[1], o = s[3]);
1953
2744
  } else
1954
- r = t[3] ? t[3].slice(1, -1) : "";
1955
- return s = s.trim(), this.rules.other.startAngleBracket.test(s) && (this.options.pedantic && !this.rules.other.endAngleBracket.test(n) ? s = s.slice(1) : s = s.slice(1, -1)), me(t, { href: s && s.replace(this.rules.inline.anyPunctuation, "$1"), title: r && r.replace(this.rules.inline.anyPunctuation, "$1") }, t[0], this.lexer, this.rules);
2745
+ o = t[3] ? t[3].slice(1, -1) : "";
2746
+ return r = r.trim(), this.rules.other.startAngleBracket.test(r) && (this.options.pedantic && !this.rules.other.endAngleBracket.test(i) ? r = r.slice(1) : r = r.slice(1, -1)), Se(t, { href: r && r.replace(this.rules.inline.anyPunctuation, "$1"), title: o && o.replace(this.rules.inline.anyPunctuation, "$1") }, t[0], this.lexer, this.rules);
1956
2747
  }
1957
2748
  }
1958
2749
  reflink(e, t) {
1959
2750
  let n;
1960
2751
  if ((n = this.rules.inline.reflink.exec(e)) || (n = this.rules.inline.nolink.exec(e))) {
1961
- let s = (n[2] || n[1]).replace(this.rules.other.multipleSpaceGlobal, " "), r = t[s.toLowerCase()];
1962
- if (!r) {
1963
- let i = n[0].charAt(0);
1964
- return { type: "text", raw: i, text: i };
2752
+ let i = n[0].charAt(0) === "!" ? 2 : 1;
2753
+ if (!this.options.pedantic && _e(e, n[1], i, this.rules))
2754
+ return;
2755
+ let r = (n[2] || n[1]).replace(this.rules.other.multipleSpaceGlobal, " "), o = t[v(r)];
2756
+ if (!o) {
2757
+ let s = n[0].charAt(0);
2758
+ return { type: "text", raw: s, text: s };
1965
2759
  }
1966
- return me(n, r, n[0], this.lexer, this.rules);
2760
+ return Se(n, o, n[0], this.lexer, this.rules);
1967
2761
  }
1968
2762
  }
1969
2763
  emStrong(e, t, n = "") {
1970
- let s = this.rules.inline.emStrongLDelim.exec(e);
1971
- if (!s || !s[1] && !s[2] && !s[3] && !s[4] || s[4] && n.match(this.rules.other.unicodeAlphaNumeric))
2764
+ let i = this.rules.inline.emStrongLDelim.exec(e);
2765
+ if (!i || !i[1] && !i[2] && !i[3] && !i[4] || i[4] && n.match(this.rules.other.unicodeAlphaNumeric))
1972
2766
  return;
1973
- if (!(s[1] || s[3] || "") || !n || this.rules.inline.punctuation.exec(n)) {
1974
- let i = [...s[0]].length - 1, o, u, a = i, c = 0, p = s[0][0] === "*" ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;
1975
- for (p.lastIndex = 0, t = t.slice(-1 * e.length + i);(s = p.exec(t)) !== null; ) {
1976
- if (o = s[1] || s[2] || s[3] || s[4] || s[5] || s[6], !o)
2767
+ if (!(i[1] || i[3] || "") || !n || this.rules.inline.punctuation.exec(n)) {
2768
+ let o = [...i[0]].length - 1, s, l, u = o, c = 0, p = i[0][0], d = n === p, g = p === "*" ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;
2769
+ for (g.lastIndex = 0, t = t.slice(-1 * e.length + o);(i = g.exec(t)) !== null; ) {
2770
+ if (s = i[1] || i[2] || i[3] || i[4] || i[5] || i[6], !s)
1977
2771
  continue;
1978
- if (u = [...o].length, s[3] || s[4]) {
1979
- a += u;
1980
- continue;
1981
- } else if ((s[5] || s[6]) && i % 3 && !((i + u) % 3)) {
1982
- c += u;
2772
+ if (l = [...s].length, i[3] || i[4]) {
2773
+ u += l;
1983
2774
  continue;
2775
+ } else if (i[5] || i[6]) {
2776
+ if (o % 3 && !((o + l) % 3)) {
2777
+ c += l;
2778
+ continue;
2779
+ }
2780
+ if (d)
2781
+ break;
1984
2782
  }
1985
- if (a -= u, a > 0)
2783
+ if (u -= l, u > 0)
1986
2784
  continue;
1987
- u = Math.min(u, u + a + c);
1988
- let k = [...s[0]][0].length, h = e.slice(0, i + s.index + k + u);
1989
- if (Math.min(i, u) % 2) {
1990
- let f = h.slice(1, -1);
1991
- return { type: "em", raw: h, text: f, tokens: this.lexer.inlineTokens(f) };
2785
+ l = Math.min(l, l + u + c);
2786
+ let k = [...i[0]][0].length, P = e.slice(0, o + i.index + k + l);
2787
+ if (Math.min(o, l) % 2) {
2788
+ let m = P.slice(1, -1);
2789
+ return { type: "em", raw: P, text: m, tokens: this.lexer.inlineTokens(m) };
1992
2790
  }
1993
- let R = h.slice(2, -2);
1994
- return { type: "strong", raw: h, text: R, tokens: this.lexer.inlineTokens(R) };
2791
+ let R = P.slice(2, -2);
2792
+ return { type: "strong", raw: P, text: R, tokens: this.lexer.inlineTokens(R) };
1995
2793
  }
1996
2794
  }
1997
2795
  }
1998
2796
  codespan(e) {
1999
2797
  let t = this.rules.inline.code.exec(e);
2000
2798
  if (t) {
2001
- let n = t[2].replace(this.rules.other.newLineCharGlobal, " "), s = this.rules.other.nonSpaceChar.test(n), r = this.rules.other.startingSpaceChar.test(n) && this.rules.other.endingSpaceChar.test(n);
2002
- return s && r && (n = n.substring(1, n.length - 1)), { type: "codespan", raw: t[0], text: n };
2799
+ let n = t[2].replace(this.rules.other.newLineCharGlobal, " "), i = this.rules.other.nonSpaceChar.test(n), r = this.rules.other.startingSpaceChar.test(n) && this.rules.other.endingSpaceChar.test(n);
2800
+ return i && r && (n = n.substring(1, n.length - 1)), { type: "codespan", raw: t[0], text: n };
2003
2801
  }
2004
2802
  }
2005
2803
  br(e) {
@@ -2008,79 +2806,79 @@ ${p}` : p;
2008
2806
  return { type: "br", raw: t[0] };
2009
2807
  }
2010
2808
  del(e, t, n = "") {
2011
- let s = this.rules.inline.delLDelim.exec(e);
2012
- if (!s)
2809
+ let i = this.rules.inline.delLDelim.exec(e);
2810
+ if (!i)
2013
2811
  return;
2014
- if (!(s[1] || "") || !n || this.rules.inline.punctuation.exec(n)) {
2015
- let i = [...s[0]].length - 1, o, u, a = i, c = this.rules.inline.delRDelim;
2016
- for (c.lastIndex = 0, t = t.slice(-1 * e.length + i);(s = c.exec(t)) !== null; ) {
2017
- if (o = s[1] || s[2] || s[3] || s[4] || s[5] || s[6], !o || (u = [...o].length, u !== i))
2812
+ if (!(i[1] || "") || !n || this.rules.inline.punctuation.exec(n)) {
2813
+ let o = [...i[0]].length - 1, s, l, u = o, c = this.rules.inline.delRDelim;
2814
+ for (c.lastIndex = 0, t = t.slice(-1 * e.length + o);(i = c.exec(t)) !== null; ) {
2815
+ if (s = i[1] || i[2] || i[3] || i[4] || i[5] || i[6], !s || (l = [...s].length, l !== o))
2018
2816
  continue;
2019
- if (s[3] || s[4]) {
2020
- a += u;
2817
+ if (i[3] || i[4]) {
2818
+ u += l;
2021
2819
  continue;
2022
2820
  }
2023
- if (a -= u, a > 0)
2821
+ if (u -= l, u > 0)
2024
2822
  continue;
2025
- u = Math.min(u, u + a);
2026
- let p = [...s[0]][0].length, k = e.slice(0, i + s.index + p + u), h = k.slice(i, -i);
2027
- return { type: "del", raw: k, text: h, tokens: this.lexer.inlineTokens(h) };
2823
+ l = Math.min(l, l + u);
2824
+ let p = [...i[0]][0].length, d = e.slice(0, o + i.index + p + l), g = d.slice(o, -o);
2825
+ return { type: "del", raw: d, text: g, tokens: this.lexer.inlineTokens(g) };
2028
2826
  }
2029
2827
  }
2030
2828
  }
2031
2829
  autolink(e) {
2032
2830
  let t = this.rules.inline.autolink.exec(e);
2033
2831
  if (t) {
2034
- let n, s;
2035
- return t[2] === "@" ? (n = t[1], s = "mailto:" + n) : (n = t[1], s = n), { type: "link", raw: t[0], text: n, href: s, tokens: [{ type: "text", raw: n, text: n }] };
2832
+ let n, i;
2833
+ return t[2] === "@" ? (n = t[1], i = "mailto:" + n) : (n = t[1], i = n), { type: "link", raw: t[0], text: n, href: i, autolink: true, tokens: [{ type: "text", raw: n, text: n }] };
2036
2834
  }
2037
2835
  }
2038
2836
  url(e) {
2039
2837
  let t;
2040
2838
  if (t = this.rules.inline.url.exec(e)) {
2041
- let n, s;
2839
+ let n, i;
2042
2840
  if (t[2] === "@")
2043
- n = t[0], s = "mailto:" + n;
2841
+ n = t[0], i = "mailto:" + n;
2044
2842
  else {
2045
2843
  let r;
2046
2844
  do
2047
2845
  r = t[0], t[0] = this.rules.inline._backpedal.exec(t[0])?.[0] ?? "";
2048
2846
  while (r !== t[0]);
2049
- n = t[0], t[1] === "www." ? s = "http://" + t[0] : s = t[0];
2847
+ n = t[0], t[1] === "www." ? i = "http://" + t[0] : i = t[0];
2050
2848
  }
2051
- return { type: "link", raw: t[0], text: n, href: s, tokens: [{ type: "text", raw: n, text: n }] };
2849
+ return { type: "link", raw: t[0], text: n, href: i, autolink: true, tokens: [{ type: "text", raw: n, text: n }] };
2052
2850
  }
2053
2851
  }
2054
2852
  inlineText(e) {
2055
2853
  let t = this.rules.inline.text.exec(e);
2056
2854
  if (t) {
2057
2855
  let n = this.lexer.state.inRawBlock;
2058
- return { type: "text", raw: t[0], text: t[0], escaped: n };
2856
+ return { type: "text", raw: t[0], text: n ? t[0] : ye(t[0]), escaped: n };
2059
2857
  }
2060
2858
  }
2061
2859
  };
2062
- var x = class l {
2860
+ var T = class a {
2063
2861
  tokens;
2064
2862
  options;
2065
2863
  state;
2066
2864
  inlineQueue;
2067
2865
  tokenizer;
2068
2866
  constructor(e) {
2069
- this.tokens = [], this.tokens.links = Object.create(null), this.options = e || T, this.options.tokenizer = this.options.tokenizer || new w, this.tokenizer = this.options.tokenizer, this.tokenizer.options = this.options, this.tokenizer.lexer = this, this.inlineQueue = [], this.state = { inLink: false, inRawBlock: false, top: true };
2070
- let t = { other: m, block: B.normal, inline: A.normal };
2071
- this.options.pedantic ? (t.block = B.pedantic, t.inline = A.pedantic) : this.options.gfm && (t.block = B.gfm, this.options.breaks ? t.inline = A.breaks : t.inline = A.gfm), this.tokenizer.rules = t;
2867
+ this.tokens = [], this.tokens.links = Object.create(null), this.options = e || y, this.options.tokenizer = this.options.tokenizer || new _, this.tokenizer = this.options.tokenizer, this.tokenizer.options = this.options, this.tokenizer.lexer = this, this.inlineQueue = [], this.state = { inLink: false, inRawBlock: false, linkEmitted: false, linkParenPossible: true, top: true };
2868
+ let t = { other: x, block: F.normal, inline: Z.normal };
2869
+ this.options.pedantic ? (t.block = F.pedantic, t.inline = Z.pedantic) : this.options.gfm && (t.block = F.gfm, this.options.breaks ? t.inline = Z.breaks : t.inline = Z.gfm), this.tokenizer.rules = t;
2072
2870
  }
2073
2871
  static get rules() {
2074
- return { block: B, inline: A };
2872
+ return { block: F, inline: Z };
2075
2873
  }
2076
2874
  static lex(e, t) {
2077
- return new l(t).lex(e);
2875
+ return new a(t).lex(e);
2078
2876
  }
2079
2877
  static lexInline(e, t) {
2080
- return new l(t).inlineTokens(e);
2878
+ return new a(t).inlineTokens(e);
2081
2879
  }
2082
2880
  lex(e) {
2083
- e = e.replace(m.carriageReturn, `
2881
+ e = e.replace(x.carriageReturn, `
2084
2882
  `), this.blockTokens(e, this.tokens);
2085
2883
  for (let t = 0;t < this.inlineQueue.length; t++) {
2086
2884
  let n = this.inlineQueue[t];
@@ -2089,32 +2887,32 @@ var x = class l {
2089
2887
  return this.inlineQueue = [], this.tokens;
2090
2888
  }
2091
2889
  blockTokens(e, t = [], n = false) {
2092
- this.tokenizer.lexer = this, this.options.pedantic && (e = e.replace(m.tabCharGlobal, " ").replace(m.spaceLine, ""));
2093
- let s = 1 / 0;
2890
+ this.tokenizer.lexer = this, this.options.pedantic && (e = e.replace(x.tabCharGlobal, " ").replace(x.spaceLine, ""));
2891
+ let i = 1 / 0;
2094
2892
  for (;e; ) {
2095
- if (e.length < s)
2096
- s = e.length;
2893
+ if (e.length < i)
2894
+ i = e.length;
2097
2895
  else {
2098
2896
  this.infiniteLoopError(e.charCodeAt(0));
2099
2897
  break;
2100
2898
  }
2101
2899
  let r;
2102
- if (this.options.extensions?.block?.some((o) => (r = o.call({ lexer: this }, e, t)) ? (e = e.substring(r.raw.length), t.push(r), true) : false))
2900
+ if (this.options.extensions?.block?.some((s) => (r = s.call({ lexer: this }, e, t)) ? (e = e.substring(r.raw.length), t.push(r), true) : false))
2103
2901
  continue;
2104
2902
  if (r = this.tokenizer.space(e)) {
2105
2903
  e = e.substring(r.raw.length);
2106
- let o = t.at(-1);
2107
- r.raw.length === 1 && o !== undefined ? o.raw += `
2904
+ let s = t.at(-1);
2905
+ r.raw.length === 1 && s !== undefined ? s.raw += `
2108
2906
  ` : t.push(r);
2109
2907
  continue;
2110
2908
  }
2111
2909
  if (r = this.tokenizer.code(e)) {
2112
2910
  e = e.substring(r.raw.length);
2113
- let o = t.at(-1);
2114
- o?.type === "paragraph" || o?.type === "text" ? (o.raw += (o.raw.endsWith(`
2911
+ let s = t.at(-1);
2912
+ s?.type === "paragraph" || s?.type === "text" ? (s.raw += (s.raw.endsWith(`
2115
2913
  `) ? "" : `
2116
- `) + r.raw, o.text += `
2117
- ` + r.text, this.inlineQueue.at(-1).src = o.text) : t.push(r);
2914
+ `) + r.raw, s.text += `
2915
+ ` + r.text, this.inlineQueue.at(-1).src = s.text) : t.push(r);
2118
2916
  continue;
2119
2917
  }
2120
2918
  if (r = this.tokenizer.fences(e)) {
@@ -2143,11 +2941,11 @@ var x = class l {
2143
2941
  }
2144
2942
  if (r = this.tokenizer.def(e)) {
2145
2943
  e = e.substring(r.raw.length);
2146
- let o = t.at(-1);
2147
- o?.type === "paragraph" || o?.type === "text" ? (o.raw += (o.raw.endsWith(`
2944
+ let s = t.at(-1);
2945
+ s?.type === "paragraph" || s?.type === "text" ? (s.raw += (s.raw.endsWith(`
2148
2946
  `) ? "" : `
2149
- `) + r.raw, o.text += `
2150
- ` + r.raw, this.inlineQueue.at(-1).src = o.text) : this.tokens.links[r.tag] || (this.tokens.links[r.tag] = { href: r.href, title: r.title }, t.push(r));
2947
+ `) + r.raw, s.text += `
2948
+ ` + r.raw, this.inlineQueue.at(-1).src = s.text) : this.tokens.links[r.tag] || (this.tokens.links[r.tag] = { href: r.href, title: r.title }, t.push(r));
2151
2949
  continue;
2152
2950
  }
2153
2951
  if (r = this.tokenizer.table(e)) {
@@ -2158,28 +2956,28 @@ var x = class l {
2158
2956
  e = e.substring(r.raw.length), t.push(r);
2159
2957
  continue;
2160
2958
  }
2161
- let i = e;
2959
+ let o = e;
2162
2960
  if (this.options.extensions?.startBlock) {
2163
- let o = 1 / 0, u = e.slice(1), a;
2961
+ let s = 1 / 0, l = e.slice(1), u;
2164
2962
  this.options.extensions.startBlock.forEach((c) => {
2165
- a = c.call({ lexer: this }, u), typeof a == "number" && a >= 0 && (o = Math.min(o, a));
2166
- }), o < 1 / 0 && o >= 0 && (i = e.substring(0, o + 1));
2963
+ u = c.call({ lexer: this }, l), typeof u == "number" && u >= 0 && (s = Math.min(s, u));
2964
+ }), s < 1 / 0 && s >= 0 && (o = e.substring(0, s + 1));
2167
2965
  }
2168
- if (this.state.top && (r = this.tokenizer.paragraph(i))) {
2169
- let o = t.at(-1);
2170
- n && o?.type === "paragraph" ? (o.raw += (o.raw.endsWith(`
2966
+ if (this.state.top && (r = this.tokenizer.paragraph(o))) {
2967
+ let s = t.at(-1);
2968
+ n && s?.type === "paragraph" ? (s.raw += (s.raw.endsWith(`
2171
2969
  `) ? "" : `
2172
- `) + r.raw, o.text += `
2173
- ` + r.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = o.text) : t.push(r), n = i.length !== e.length, e = e.substring(r.raw.length);
2970
+ `) + r.raw, s.text += `
2971
+ ` + r.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = s.text) : t.push(r), n = o.length !== e.length, e = e.substring(r.raw.length);
2174
2972
  continue;
2175
2973
  }
2176
2974
  if (r = this.tokenizer.text(e)) {
2177
2975
  e = e.substring(r.raw.length);
2178
- let o = t.at(-1);
2179
- o?.type === "text" ? (o.raw += (o.raw.endsWith(`
2976
+ let s = t.at(-1);
2977
+ s?.type === "text" ? (s.raw += (s.raw.endsWith(`
2180
2978
  `) ? "" : `
2181
- `) + r.raw, o.text += `
2182
- ` + r.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = o.text) : t.push(r);
2979
+ `) + r.raw, s.text += `
2980
+ ` + r.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = s.text) : t.push(r);
2183
2981
  continue;
2184
2982
  }
2185
2983
  if (e) {
@@ -2192,86 +2990,115 @@ var x = class l {
2192
2990
  inline(e, t = []) {
2193
2991
  return this.inlineQueue.push({ src: e, tokens: t }), t;
2194
2992
  }
2993
+ linkInText(e) {
2994
+ if (!e.includes("["))
2995
+ return false;
2996
+ let t = this.tokenizer.rules.inline.link;
2997
+ for (let n of e.matchAll(this.tokenizer.rules.inline.blockSkip))
2998
+ if (t.test(n[0]) && e.charAt(n.index - 1) !== "!")
2999
+ return true;
3000
+ for (let n of e.matchAll(this.tokenizer.rules.inline.reflinkSearch)) {
3001
+ let i = n[0], r = i.lastIndexOf("[");
3002
+ if (!(i.charAt(0) === "!" || !Object.hasOwn(this.tokens.links, v(i.slice(r + 1, -1)))) && !(r > 1 && this.linkInText(i.slice(1, r - 1))))
3003
+ return true;
3004
+ }
3005
+ return false;
3006
+ }
2195
3007
  inlineTokens(e, t = []) {
2196
3008
  this.tokenizer.lexer = this;
2197
- let n = e, s = null;
2198
- if (this.tokens.links) {
2199
- let a = Object.keys(this.tokens.links);
2200
- if (a.length > 0)
2201
- for (;(s = this.tokenizer.rules.inline.reflinkSearch.exec(n)) !== null; )
2202
- a.includes(s[0].slice(s[0].lastIndexOf("[") + 1, -1)) && (n = n.slice(0, s.index) + "[" + "a".repeat(s[0].length - 2) + "]" + n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex));
2203
- }
2204
- for (;(s = this.tokenizer.rules.inline.anyPunctuation.exec(n)) !== null; )
2205
- n = n.slice(0, s.index) + "++" + n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);
2206
- let r;
2207
- for (;(s = this.tokenizer.rules.inline.blockSkip.exec(n)) !== null; )
2208
- r = s[2] ? s[2].length : 0, n = n.slice(0, s.index + r) + "[" + "a".repeat(s[0].length - r - 2) + "]" + n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);
2209
- n = this.options.hooks?.emStrongMask?.call({ lexer: this }, n) ?? n;
2210
- let i = false, o = "", u = 1 / 0;
3009
+ let n = this.state.linkParenPossible;
3010
+ this.state.linkParenPossible = n && e.includes(")");
3011
+ try {
3012
+ return this.#e(e, t);
3013
+ } finally {
3014
+ this.state.linkParenPossible = n;
3015
+ }
3016
+ }
3017
+ #e(e, t) {
3018
+ let n = e;
3019
+ if (this.tokens.links && e.includes("[")) {
3020
+ let s = this.tokenizer.rules.inline.reflinkSearch, l = (u) => {
3021
+ let c = u.lastIndexOf("[");
3022
+ if (!Object.hasOwn(this.tokens.links, v(u.slice(c + 1, -1))))
3023
+ return u;
3024
+ if (c > 1 && u.charAt(0) !== "!") {
3025
+ let p = u.slice(1, c - 1);
3026
+ if (this.linkInText(p))
3027
+ return "[" + p.replace(s, l) + "][" + "a".repeat(u.length - c - 2) + "]";
3028
+ }
3029
+ return "[" + "a".repeat(u.length - 2) + "]";
3030
+ };
3031
+ n = n.replace(s, l);
3032
+ }
3033
+ n = n.replace(this.tokenizer.rules.inline.anyPunctuationOutsideCode, (s, l, u) => u ? "+".repeat(s.length) : l ? l + s.slice(l.length, -l.length).replace(/`/g, "+") + l : s), n = n.replace(this.tokenizer.rules.inline.blockSkip, (s, l, u) => {
3034
+ let c = u ? u.length : 0;
3035
+ return s.slice(0, c) + "[" + "a".repeat(s.length - c - 2) + "]";
3036
+ }), n = this.options.hooks?.emStrongMask?.call({ lexer: this }, n) ?? n;
3037
+ let i = false, r = "", o = 1 / 0;
2211
3038
  for (;e; ) {
2212
- if (e.length < u)
2213
- u = e.length;
3039
+ if (e.length < o)
3040
+ o = e.length;
2214
3041
  else {
2215
3042
  this.infiniteLoopError(e.charCodeAt(0));
2216
3043
  break;
2217
3044
  }
2218
- i || (o = ""), i = false;
2219
- let a;
2220
- if (this.options.extensions?.inline?.some((p) => (a = p.call({ lexer: this }, e, t)) ? (e = e.substring(a.raw.length), t.push(a), true) : false))
3045
+ i || (r = ""), i = false;
3046
+ let s;
3047
+ if (this.options.extensions?.inline?.some((u) => (s = u.call({ lexer: this }, e, t)) ? (e = e.substring(s.raw.length), t.push(s), true) : false))
2221
3048
  continue;
2222
- if (a = this.tokenizer.escape(e)) {
2223
- e = e.substring(a.raw.length), t.push(a);
3049
+ if (s = this.tokenizer.escape(e)) {
3050
+ e = e.substring(s.raw.length), t.push(s);
2224
3051
  continue;
2225
3052
  }
2226
- if (a = this.tokenizer.tag(e)) {
2227
- e = e.substring(a.raw.length), t.push(a);
3053
+ if (s = this.tokenizer.tag(e)) {
3054
+ e = e.substring(s.raw.length), t.push(s);
2228
3055
  continue;
2229
3056
  }
2230
- if (a = this.tokenizer.link(e)) {
2231
- e = e.substring(a.raw.length), t.push(a);
3057
+ if (s = this.tokenizer.link(e)) {
3058
+ e = e.substring(s.raw.length), t.push(s);
2232
3059
  continue;
2233
3060
  }
2234
- if (a = this.tokenizer.reflink(e, this.tokens.links)) {
2235
- e = e.substring(a.raw.length);
2236
- let p = t.at(-1);
2237
- a.type === "text" && p?.type === "text" ? (p.raw += a.raw, p.text += a.text) : t.push(a);
3061
+ if (s = this.tokenizer.reflink(e, this.tokens.links)) {
3062
+ e = e.substring(s.raw.length);
3063
+ let u = t.at(-1);
3064
+ s.type === "text" && u?.type === "text" ? (u.raw += s.raw, u.text += s.text) : t.push(s);
2238
3065
  continue;
2239
3066
  }
2240
- if (a = this.tokenizer.emStrong(e, n, o)) {
2241
- e = e.substring(a.raw.length), t.push(a);
3067
+ if (s = this.tokenizer.emStrong(e, n, r)) {
3068
+ e = e.substring(s.raw.length), t.push(s);
2242
3069
  continue;
2243
3070
  }
2244
- if (a = this.tokenizer.codespan(e)) {
2245
- e = e.substring(a.raw.length), t.push(a);
3071
+ if (s = this.tokenizer.codespan(e)) {
3072
+ e = e.substring(s.raw.length), t.push(s);
2246
3073
  continue;
2247
3074
  }
2248
- if (a = this.tokenizer.br(e)) {
2249
- e = e.substring(a.raw.length), t.push(a);
3075
+ if (s = this.tokenizer.br(e)) {
3076
+ e = e.substring(s.raw.length), t.push(s);
2250
3077
  continue;
2251
3078
  }
2252
- if (a = this.tokenizer.del(e, n, o)) {
2253
- e = e.substring(a.raw.length), t.push(a);
3079
+ if (s = this.tokenizer.del(e, n, r)) {
3080
+ e = e.substring(s.raw.length), t.push(s);
2254
3081
  continue;
2255
3082
  }
2256
- if (a = this.tokenizer.autolink(e)) {
2257
- e = e.substring(a.raw.length), t.push(a);
3083
+ if (s = this.tokenizer.autolink(e)) {
3084
+ e = e.substring(s.raw.length), t.push(s);
2258
3085
  continue;
2259
3086
  }
2260
- if (!this.state.inLink && (a = this.tokenizer.url(e))) {
2261
- e = e.substring(a.raw.length), t.push(a);
3087
+ if (!this.state.inLink && (s = this.tokenizer.url(e))) {
3088
+ e = e.substring(s.raw.length), t.push(s);
2262
3089
  continue;
2263
3090
  }
2264
- let c = e;
3091
+ let l = e;
2265
3092
  if (this.options.extensions?.startInline) {
2266
- let p = 1 / 0, k = e.slice(1), h;
2267
- this.options.extensions.startInline.forEach((R) => {
2268
- h = R.call({ lexer: this }, k), typeof h == "number" && h >= 0 && (p = Math.min(p, h));
2269
- }), p < 1 / 0 && p >= 0 && (c = e.substring(0, p + 1));
2270
- }
2271
- if (a = this.tokenizer.inlineText(c)) {
2272
- e = e.substring(a.raw.length), a.raw.slice(-1) !== "_" && (o = a.raw.slice(-1)), i = true;
2273
- let p = t.at(-1);
2274
- p?.type === "text" ? (p.raw += a.raw, p.text += a.text) : t.push(a);
3093
+ let u = 1 / 0, c = e.slice(1), p;
3094
+ this.options.extensions.startInline.forEach((d) => {
3095
+ p = d.call({ lexer: this }, c), typeof p == "number" && p >= 0 && (u = Math.min(u, p));
3096
+ }), u < 1 / 0 && u >= 0 && (l = e.substring(0, u + 1));
3097
+ }
3098
+ if (s = this.tokenizer.inlineText(l)) {
3099
+ e = e.substring(s.raw.length), s.raw.slice(-1) !== "_" && (r = s.raw.slice(-1)), i = true;
3100
+ let u = t.at(-1);
3101
+ u?.type === "text" ? (u.raw += s.raw, u.text += s.text) : t.push(s);
2275
3102
  continue;
2276
3103
  }
2277
3104
  if (e) {
@@ -2289,20 +3116,20 @@ var x = class l {
2289
3116
  throw new Error(t);
2290
3117
  }
2291
3118
  };
2292
- var y = class {
3119
+ var $ = class {
2293
3120
  options;
2294
3121
  parser;
2295
3122
  constructor(e) {
2296
- this.options = e || T;
3123
+ this.options = e || y;
2297
3124
  }
2298
3125
  space(e) {
2299
3126
  return "";
2300
3127
  }
2301
3128
  code({ text: e, lang: t, escaped: n }) {
2302
- let s = (t || "").match(m.notSpaceStart)?.[0], r = e.replace(m.endingNewline, "") + `
2303
- `;
2304
- return s ? '<pre><code class="language-' + O(s) + '">' + (n ? r : O(r, true)) + `</code></pre>
2305
- ` : "<pre><code>" + (n ? r : O(r, true)) + `</code></pre>
3129
+ let i = (t || "").match(x.notSpaceStart)?.[0], r = e ? e.replace(x.endingNewline, "") + `
3130
+ ` : "";
3131
+ return i ? '<pre><code class="language-' + w(i) + '">' + (n ? r : w(r, true)) + `</code></pre>
3132
+ ` : "<pre><code>" + (n ? r : w(r, true)) + `</code></pre>
2306
3133
  `;
2307
3134
  }
2308
3135
  blockquote({ tokens: e }) {
@@ -2325,14 +3152,14 @@ ${this.parser.parse(e)}</blockquote>
2325
3152
  `;
2326
3153
  }
2327
3154
  list(e) {
2328
- let { ordered: t, start: n } = e, s = "";
2329
- for (let o = 0;o < e.items.length; o++) {
2330
- let u = e.items[o];
2331
- s += this.listitem(u);
2332
- }
2333
- let r = t ? "ol" : "ul", i = t && n !== 1 ? ' start="' + n + '"' : "";
2334
- return "<" + r + i + `>
2335
- ` + s + "</" + r + `>
3155
+ let { ordered: t, start: n } = e, i = "";
3156
+ for (let s = 0;s < e.items.length; s++) {
3157
+ let l = e.items[s];
3158
+ i += this.listitem(l);
3159
+ }
3160
+ let r = t ? "ol" : "ul", o = t && n !== 1 ? ' start="' + n + '"' : "";
3161
+ return "<" + r + o + `>
3162
+ ` + i + "</" + r + `>
2336
3163
  `;
2337
3164
  }
2338
3165
  listitem(e) {
@@ -2351,18 +3178,18 @@ ${this.parser.parse(e)}</blockquote>
2351
3178
  for (let r = 0;r < e.header.length; r++)
2352
3179
  n += this.tablecell(e.header[r]);
2353
3180
  t += this.tablerow({ text: n });
2354
- let s = "";
3181
+ let i = "";
2355
3182
  for (let r = 0;r < e.rows.length; r++) {
2356
- let i = e.rows[r];
3183
+ let o = e.rows[r];
2357
3184
  n = "";
2358
- for (let o = 0;o < i.length; o++)
2359
- n += this.tablecell(i[o]);
2360
- s += this.tablerow({ text: n });
3185
+ for (let s = 0;s < o.length; s++)
3186
+ n += this.tablecell(o[s]);
3187
+ i += this.tablerow({ text: n });
2361
3188
  }
2362
- return s && (s = `<tbody>${s}</tbody>`), `<table>
3189
+ return i && (i = `<tbody>${i}</tbody>`), `<table>
2363
3190
  <thead>
2364
3191
  ` + t + `</thead>
2365
- ` + s + `</table>
3192
+ ` + i + `</table>
2366
3193
  `;
2367
3194
  }
2368
3195
  tablerow({ text: e }) {
@@ -2382,7 +3209,7 @@ ${e}</tr>
2382
3209
  return `<em>${this.parser.parseInline(e)}</em>`;
2383
3210
  }
2384
3211
  codespan({ text: e }) {
2385
- return `<code>${O(e, true)}</code>`;
3212
+ return `<code>${w(e, true)}</code>`;
2386
3213
  }
2387
3214
  br(e) {
2388
3215
  return "<br>";
@@ -2390,28 +3217,28 @@ ${e}</tr>
2390
3217
  del({ tokens: e }) {
2391
3218
  return `<del>${this.parser.parseInline(e)}</del>`;
2392
3219
  }
2393
- link({ href: e, title: t, tokens: n }) {
2394
- let s = this.parser.parseInline(n), r = J(e);
2395
- if (r === null)
2396
- return s;
2397
- e = r;
2398
- let i = '<a href="' + e + '"';
2399
- return t && (i += ' title="' + O(t) + '"'), i += ">" + s + "</a>", i;
2400
- }
2401
- image({ href: e, title: t, text: n, tokens: s }) {
2402
- s && (n = this.parser.parseInline(s, this.parser.textRenderer));
2403
- let r = J(e);
3220
+ link({ href: e, title: t, text: n, tokens: i, autolink: r }) {
3221
+ let o = r ? w(n, true) : this.parser.parseInline(i), s = ie(e);
3222
+ if (s === null)
3223
+ return o;
3224
+ e = w(s, r);
3225
+ let l = '<a href="' + e + '"';
3226
+ return t && (l += ' title="' + w(t) + '"'), l += ">" + o + "</a>", l;
3227
+ }
3228
+ image({ href: e, title: t, text: n, tokens: i }) {
3229
+ i && (n = this.parser.parseInline(i, this.parser.textRenderer));
3230
+ let r = ie(e);
2404
3231
  if (r === null)
2405
- return O(n);
3232
+ return w(n);
2406
3233
  e = r;
2407
- let i = `<img src="${e}" alt="${O(n)}"`;
2408
- return t && (i += ` title="${O(t)}"`), i += ">", i;
3234
+ let o = `<img src="${w(e)}" alt="${w(n)}"`;
3235
+ return t && (o += ` title="${w(t)}"`), o += ">", o;
2409
3236
  }
2410
3237
  text(e) {
2411
- return "tokens" in e && e.tokens ? this.parser.parseInline(e.tokens) : ("escaped" in e) && e.escaped ? e.text : O(e.text);
3238
+ return "tokens" in e && e.tokens ? this.parser.parseInline(e.tokens) : ("escaped" in e) && e.escaped ? e.text : w(e.text);
2412
3239
  }
2413
3240
  };
2414
- var L = class {
3241
+ var z = class {
2415
3242
  strong({ text: e }) {
2416
3243
  return e;
2417
3244
  }
@@ -2443,32 +3270,32 @@ var L = class {
2443
3270
  return e;
2444
3271
  }
2445
3272
  };
2446
- var b = class l {
3273
+ var O = class a {
2447
3274
  options;
2448
3275
  renderer;
2449
3276
  textRenderer;
2450
3277
  constructor(e) {
2451
- this.options = e || T, this.options.renderer = this.options.renderer || new y, this.renderer = this.options.renderer, this.renderer.options = this.options, this.renderer.parser = this, this.textRenderer = new L;
3278
+ this.options = e || y, this.options.renderer = this.options.renderer || new $, this.renderer = this.options.renderer, this.renderer.options = this.options, this.renderer.parser = this, this.textRenderer = new z;
2452
3279
  }
2453
3280
  static parse(e, t) {
2454
- return new l(t).parse(e);
3281
+ return new a(t).parse(e);
2455
3282
  }
2456
3283
  static parseInline(e, t) {
2457
- return new l(t).parseInline(e);
3284
+ return new a(t).parseInline(e);
2458
3285
  }
2459
3286
  parse(e) {
2460
3287
  this.renderer.parser = this;
2461
3288
  let t = "";
2462
3289
  for (let n = 0;n < e.length; n++) {
2463
- let s = e[n];
2464
- if (this.options.extensions?.renderers?.[s.type]) {
2465
- let i = s, o = this.options.extensions.renderers[i.type].call({ parser: this }, i);
2466
- if (o !== false || !["space", "hr", "heading", "code", "table", "blockquote", "list", "html", "def", "paragraph", "text"].includes(i.type)) {
2467
- t += o || "";
3290
+ let i = e[n];
3291
+ if (this.options.extensions?.renderers?.[i.type]) {
3292
+ let o = i, s = this.options.extensions.renderers[o.type].call({ parser: this }, o);
3293
+ if (s !== false || !["space", "hr", "heading", "code", "table", "blockquote", "list", "checkbox", "html", "def", "paragraph", "text"].includes(o.type)) {
3294
+ t += s || "";
2468
3295
  continue;
2469
3296
  }
2470
3297
  }
2471
- let r = s;
3298
+ let r = i;
2472
3299
  switch (r.type) {
2473
3300
  case "space": {
2474
3301
  t += this.renderer.space(r);
@@ -2519,10 +3346,10 @@ var b = class l {
2519
3346
  break;
2520
3347
  }
2521
3348
  default: {
2522
- let i = 'Token with "' + r.type + '" type was not found.';
3349
+ let o = 'Token with "' + r.type + '" type was not found.';
2523
3350
  if (this.options.silent)
2524
- return console.error(i), "";
2525
- throw new Error(i);
3351
+ return console.error(o), "";
3352
+ throw new Error(o);
2526
3353
  }
2527
3354
  }
2528
3355
  }
@@ -2531,77 +3358,77 @@ var b = class l {
2531
3358
  parseInline(e, t = this.renderer) {
2532
3359
  this.renderer.parser = this;
2533
3360
  let n = "";
2534
- for (let s = 0;s < e.length; s++) {
2535
- let r = e[s];
3361
+ for (let i = 0;i < e.length; i++) {
3362
+ let r = e[i];
2536
3363
  if (this.options.extensions?.renderers?.[r.type]) {
2537
- let o = this.options.extensions.renderers[r.type].call({ parser: this }, r);
2538
- if (o !== false || !["escape", "html", "link", "image", "strong", "em", "codespan", "br", "del", "text"].includes(r.type)) {
2539
- n += o || "";
3364
+ let s = this.options.extensions.renderers[r.type].call({ parser: this }, r);
3365
+ if (s !== false || !["escape", "html", "link", "image", "checkbox", "strong", "em", "codespan", "br", "del", "text"].includes(r.type)) {
3366
+ n += s || "";
2540
3367
  continue;
2541
3368
  }
2542
3369
  }
2543
- let i = r;
2544
- switch (i.type) {
3370
+ let o = r;
3371
+ switch (o.type) {
2545
3372
  case "escape": {
2546
- n += t.text(i);
3373
+ n += t.text(o);
2547
3374
  break;
2548
3375
  }
2549
3376
  case "html": {
2550
- n += t.html(i);
3377
+ n += t.html(o);
2551
3378
  break;
2552
3379
  }
2553
3380
  case "link": {
2554
- n += t.link(i);
3381
+ n += t.link(o);
2555
3382
  break;
2556
3383
  }
2557
3384
  case "image": {
2558
- n += t.image(i);
3385
+ n += t.image(o);
2559
3386
  break;
2560
3387
  }
2561
3388
  case "checkbox": {
2562
- n += t.checkbox(i);
3389
+ n += t.checkbox(o);
2563
3390
  break;
2564
3391
  }
2565
3392
  case "strong": {
2566
- n += t.strong(i);
3393
+ n += t.strong(o);
2567
3394
  break;
2568
3395
  }
2569
3396
  case "em": {
2570
- n += t.em(i);
3397
+ n += t.em(o);
2571
3398
  break;
2572
3399
  }
2573
3400
  case "codespan": {
2574
- n += t.codespan(i);
3401
+ n += t.codespan(o);
2575
3402
  break;
2576
3403
  }
2577
3404
  case "br": {
2578
- n += t.br(i);
3405
+ n += t.br(o);
2579
3406
  break;
2580
3407
  }
2581
3408
  case "del": {
2582
- n += t.del(i);
3409
+ n += t.del(o);
2583
3410
  break;
2584
3411
  }
2585
3412
  case "text": {
2586
- n += t.text(i);
3413
+ n += t.text(o);
2587
3414
  break;
2588
3415
  }
2589
3416
  default: {
2590
- let o = 'Token with "' + i.type + '" type was not found.';
3417
+ let s = 'Token with "' + o.type + '" type was not found.';
2591
3418
  if (this.options.silent)
2592
- return console.error(o), "";
2593
- throw new Error(o);
3419
+ return console.error(s), "";
3420
+ throw new Error(s);
2594
3421
  }
2595
3422
  }
2596
3423
  }
2597
3424
  return n;
2598
3425
  }
2599
3426
  };
2600
- var P = class {
3427
+ var L = class {
2601
3428
  options;
2602
3429
  block;
2603
3430
  constructor(e) {
2604
- this.options = e || T;
3431
+ this.options = e || y;
2605
3432
  }
2606
3433
  static passThroughHooks = new Set(["preprocess", "postprocess", "processAllTokens", "emStrongMask"]);
2607
3434
  static passThroughHooksRespectAsync = new Set(["preprocess", "postprocess", "processAllTokens"]);
@@ -2618,50 +3445,57 @@ var P = class {
2618
3445
  return e;
2619
3446
  }
2620
3447
  provideLexer(e = this.block) {
2621
- return e ? x.lex : x.lexInline;
3448
+ return e ? T.lex : T.lexInline;
2622
3449
  }
2623
3450
  provideParser(e = this.block) {
2624
- return e ? b.parse : b.parseInline;
3451
+ return e ? O.parse : O.parseInline;
2625
3452
  }
2626
3453
  };
2627
- var D = class {
2628
- defaults = z();
3454
+ function C(a, e) {
3455
+ if (Array.isArray(e))
3456
+ for (let t = 0;t < e.length; t++)
3457
+ a.push(e[t]);
3458
+ else
3459
+ a.push(e);
3460
+ }
3461
+ var U = class {
3462
+ defaults = B();
2629
3463
  options = this.setOptions;
2630
3464
  parse = this.parseMarkdown(true);
2631
3465
  parseInline = this.parseMarkdown(false);
2632
- Parser = b;
2633
- Renderer = y;
2634
- TextRenderer = L;
2635
- Lexer = x;
2636
- Tokenizer = w;
2637
- Hooks = P;
3466
+ Parser = O;
3467
+ Renderer = $;
3468
+ TextRenderer = z;
3469
+ Lexer = T;
3470
+ Tokenizer = _;
3471
+ Hooks = L;
2638
3472
  constructor(...e) {
2639
3473
  this.use(...e);
2640
3474
  }
2641
3475
  walkTokens(e, t) {
2642
3476
  let n = [];
2643
- for (let s of e)
2644
- switch (n = n.concat(t.call(this, s)), s.type) {
3477
+ for (let i of e)
3478
+ switch (C(n, t.call(this, i)), i.type) {
2645
3479
  case "table": {
2646
- let r = s;
2647
- for (let i of r.header)
2648
- n = n.concat(this.walkTokens(i.tokens, t));
2649
- for (let i of r.rows)
2650
- for (let o of i)
2651
- n = n.concat(this.walkTokens(o.tokens, t));
3480
+ let r = i;
3481
+ for (let o of r.header)
3482
+ C(n, this.walkTokens(o.tokens, t));
3483
+ for (let o of r.rows)
3484
+ for (let s of o)
3485
+ C(n, this.walkTokens(s.tokens, t));
2652
3486
  break;
2653
3487
  }
2654
3488
  case "list": {
2655
- let r = s;
2656
- n = n.concat(this.walkTokens(r.items, t));
3489
+ let r = i;
3490
+ C(n, this.walkTokens(r.items, t));
2657
3491
  break;
2658
3492
  }
2659
3493
  default: {
2660
- let r = s;
2661
- this.defaults.extensions?.childTokens?.[r.type] ? this.defaults.extensions.childTokens[r.type].forEach((i) => {
2662
- let o = r[i].flat(1 / 0);
2663
- n = n.concat(this.walkTokens(o, t));
2664
- }) : r.tokens && (n = n.concat(this.walkTokens(r.tokens, t)));
3494
+ let r = i;
3495
+ this.defaults.extensions?.childTokens?.[r.type] ? this.defaults.extensions.childTokens[r.type].forEach((o) => {
3496
+ let s = r[o].flat(1 / 0);
3497
+ C(n, this.walkTokens(s, t));
3498
+ }) : r.tokens && C(n, this.walkTokens(r.tokens, t));
2665
3499
  }
2666
3500
  }
2667
3501
  return n;
@@ -2669,125 +3503,125 @@ var D = class {
2669
3503
  use(...e) {
2670
3504
  let t = this.defaults.extensions || { renderers: {}, childTokens: {} };
2671
3505
  return e.forEach((n) => {
2672
- let s = { ...n };
2673
- if (s.async = this.defaults.async || s.async || false, n.extensions && (n.extensions.forEach((r) => {
3506
+ let i = { ...n };
3507
+ if (i.async = this.defaults.async || i.async || false, n.extensions && (n.extensions.forEach((r) => {
2674
3508
  if (!r.name)
2675
3509
  throw new Error("extension name required");
2676
3510
  if ("renderer" in r) {
2677
- let i = t.renderers[r.name];
2678
- i ? t.renderers[r.name] = function(...o) {
2679
- let u = r.renderer.apply(this, o);
2680
- return u === false && (u = i.apply(this, o)), u;
3511
+ let o = t.renderers[r.name];
3512
+ o ? t.renderers[r.name] = function(...s) {
3513
+ let l = r.renderer.apply(this, s);
3514
+ return l === false && (l = o.apply(this, s)), l;
2681
3515
  } : t.renderers[r.name] = r.renderer;
2682
3516
  }
2683
3517
  if ("tokenizer" in r) {
2684
3518
  if (!r.level || r.level !== "block" && r.level !== "inline")
2685
3519
  throw new Error("extension level must be 'block' or 'inline'");
2686
- let i = t[r.level];
2687
- i ? i.unshift(r.tokenizer) : t[r.level] = [r.tokenizer], r.start && (r.level === "block" ? t.startBlock ? t.startBlock.push(r.start) : t.startBlock = [r.start] : r.level === "inline" && (t.startInline ? t.startInline.push(r.start) : t.startInline = [r.start]));
3520
+ let o = t[r.level];
3521
+ o ? o.unshift(r.tokenizer) : t[r.level] = [r.tokenizer], r.start && (r.level === "block" ? t.startBlock ? t.startBlock.push(r.start) : t.startBlock = [r.start] : r.level === "inline" && (t.startInline ? t.startInline.push(r.start) : t.startInline = [r.start]));
2688
3522
  }
2689
3523
  "childTokens" in r && r.childTokens && (t.childTokens[r.name] = r.childTokens);
2690
- }), s.extensions = t), n.renderer) {
2691
- let r = this.defaults.renderer || new y(this.defaults);
2692
- for (let i in n.renderer) {
2693
- if (!(i in r))
2694
- throw new Error(`renderer '${i}' does not exist`);
2695
- if (["options", "parser"].includes(i))
3524
+ }), i.extensions = t), n.renderer) {
3525
+ let r = this.defaults.renderer || new $(this.defaults);
3526
+ for (let o in n.renderer) {
3527
+ if (!(o in r))
3528
+ throw new Error(`renderer '${o}' does not exist`);
3529
+ if (["options", "parser"].includes(o))
2696
3530
  continue;
2697
- let o = i, u = n.renderer[o], a = r[o];
2698
- r[o] = (...c) => {
2699
- let p = u.apply(r, c);
2700
- return p === false && (p = a.apply(r, c)), p || "";
3531
+ let s = o, l = n.renderer[s], u = r[s];
3532
+ r[s] = (...c) => {
3533
+ let p = l.apply(r, c);
3534
+ return p === false && (p = u.apply(r, c)), p || "";
2701
3535
  };
2702
3536
  }
2703
- s.renderer = r;
3537
+ i.renderer = r;
2704
3538
  }
2705
3539
  if (n.tokenizer) {
2706
- let r = this.defaults.tokenizer || new w(this.defaults);
2707
- for (let i in n.tokenizer) {
2708
- if (!(i in r))
2709
- throw new Error(`tokenizer '${i}' does not exist`);
2710
- if (["options", "rules", "lexer"].includes(i))
3540
+ let r = this.defaults.tokenizer || new _(this.defaults);
3541
+ for (let o in n.tokenizer) {
3542
+ if (!(o in r))
3543
+ throw new Error(`tokenizer '${o}' does not exist`);
3544
+ if (["options", "rules", "lexer"].includes(o))
2711
3545
  continue;
2712
- let o = i, u = n.tokenizer[o], a = r[o];
2713
- r[o] = (...c) => {
2714
- let p = u.apply(r, c);
2715
- return p === false && (p = a.apply(r, c)), p;
3546
+ let s = o, l = n.tokenizer[s], u = r[s];
3547
+ r[s] = (...c) => {
3548
+ let p = l.apply(r, c);
3549
+ return p === false && (p = u.apply(r, c)), p;
2716
3550
  };
2717
3551
  }
2718
- s.tokenizer = r;
3552
+ i.tokenizer = r;
2719
3553
  }
2720
3554
  if (n.hooks) {
2721
- let r = this.defaults.hooks || new P;
2722
- for (let i in n.hooks) {
2723
- if (!(i in r))
2724
- throw new Error(`hook '${i}' does not exist`);
2725
- if (["options", "block"].includes(i))
3555
+ let r = this.defaults.hooks || new L;
3556
+ for (let o in n.hooks) {
3557
+ if (!(o in r))
3558
+ throw new Error(`hook '${o}' does not exist`);
3559
+ if (["options", "block"].includes(o))
2726
3560
  continue;
2727
- let o = i, u = n.hooks[o], a = r[o];
2728
- P.passThroughHooks.has(i) ? r[o] = (c) => {
2729
- if (this.defaults.async && P.passThroughHooksRespectAsync.has(i))
3561
+ let s = o, l = n.hooks[s], u = r[s];
3562
+ L.passThroughHooks.has(o) ? r[s] = (c) => {
3563
+ if (this.defaults.async && L.passThroughHooksRespectAsync.has(o))
2730
3564
  return (async () => {
2731
- let k = await u.call(r, c);
2732
- return a.call(r, k);
3565
+ let d = await l.call(r, c);
3566
+ return u.call(r, d);
2733
3567
  })();
2734
- let p = u.call(r, c);
2735
- return a.call(r, p);
2736
- } : r[o] = (...c) => {
3568
+ let p = l.call(r, c);
3569
+ return u.call(r, p);
3570
+ } : r[s] = (...c) => {
2737
3571
  if (this.defaults.async)
2738
3572
  return (async () => {
2739
- let k = await u.apply(r, c);
2740
- return k === false && (k = await a.apply(r, c)), k;
3573
+ let d = await l.apply(r, c);
3574
+ return d === false && (d = await u.apply(r, c)), d;
2741
3575
  })();
2742
- let p = u.apply(r, c);
2743
- return p === false && (p = a.apply(r, c)), p;
3576
+ let p = l.apply(r, c);
3577
+ return p === false && (p = u.apply(r, c)), p;
2744
3578
  };
2745
3579
  }
2746
- s.hooks = r;
3580
+ i.hooks = r;
2747
3581
  }
2748
3582
  if (n.walkTokens) {
2749
- let r = this.defaults.walkTokens, i = n.walkTokens;
2750
- s.walkTokens = function(o) {
2751
- let u = [];
2752
- return u.push(i.call(this, o)), r && (u = u.concat(r.call(this, o))), u;
3583
+ let r = this.defaults.walkTokens, o = n.walkTokens;
3584
+ i.walkTokens = function(s) {
3585
+ let l = [];
3586
+ return l.push(o.call(this, s)), r && C(l, r.call(this, s)), l;
2753
3587
  };
2754
3588
  }
2755
- this.defaults = { ...this.defaults, ...s };
3589
+ this.defaults = { ...this.defaults, ...i };
2756
3590
  }), this;
2757
3591
  }
2758
3592
  setOptions(e) {
2759
3593
  return this.defaults = { ...this.defaults, ...e }, this;
2760
3594
  }
2761
3595
  lexer(e, t) {
2762
- return x.lex(e, t ?? this.defaults);
3596
+ return T.lex(e, t ?? this.defaults);
2763
3597
  }
2764
3598
  parser(e, t) {
2765
- return b.parse(e, t ?? this.defaults);
3599
+ return O.parse(e, t ?? this.defaults);
2766
3600
  }
2767
3601
  parseMarkdown(e) {
2768
- return (n, s) => {
2769
- let r = { ...s }, i = { ...this.defaults, ...r }, o = this.onError(!!i.silent, !!i.async);
3602
+ return (n, i) => {
3603
+ let r = { ...i }, o = { ...this.defaults, ...r }, s = this.onError(!!o.silent, !!o.async);
2770
3604
  if (this.defaults.async === true && r.async === false)
2771
- return o(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));
3605
+ return s(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));
2772
3606
  if (typeof n > "u" || n === null)
2773
- return o(new Error("marked(): input parameter is undefined or null"));
3607
+ return s(new Error("marked(): input parameter is undefined or null"));
2774
3608
  if (typeof n != "string")
2775
- return o(new Error("marked(): input parameter is of type " + Object.prototype.toString.call(n) + ", string expected"));
2776
- if (i.hooks && (i.hooks.options = i, i.hooks.block = e), i.async)
3609
+ return s(new Error("marked(): input parameter is of type " + Object.prototype.toString.call(n) + ", string expected"));
3610
+ if (o.hooks && (o.hooks.options = o, o.hooks.block = e), o.async)
2777
3611
  return (async () => {
2778
- let u = i.hooks ? await i.hooks.preprocess(n) : n, c = await (i.hooks ? await i.hooks.provideLexer(e) : e ? x.lex : x.lexInline)(u, i), p = i.hooks ? await i.hooks.processAllTokens(c) : c;
2779
- i.walkTokens && await Promise.all(this.walkTokens(p, i.walkTokens));
2780
- let h = await (i.hooks ? await i.hooks.provideParser(e) : e ? b.parse : b.parseInline)(p, i);
2781
- return i.hooks ? await i.hooks.postprocess(h) : h;
2782
- })().catch(o);
3612
+ let l = o.hooks ? await o.hooks.preprocess(n) : n, c = await (o.hooks ? await o.hooks.provideLexer(e) : e ? T.lex : T.lexInline)(l, o), p = o.hooks ? await o.hooks.processAllTokens(c) : c;
3613
+ o.walkTokens && await Promise.all(this.walkTokens(p, o.walkTokens));
3614
+ let g = await (o.hooks ? await o.hooks.provideParser(e) : e ? O.parse : O.parseInline)(p, o);
3615
+ return o.hooks ? await o.hooks.postprocess(g) : g;
3616
+ })().catch(s);
2783
3617
  try {
2784
- i.hooks && (n = i.hooks.preprocess(n));
2785
- let a = (i.hooks ? i.hooks.provideLexer(e) : e ? x.lex : x.lexInline)(n, i);
2786
- i.hooks && (a = i.hooks.processAllTokens(a)), i.walkTokens && this.walkTokens(a, i.walkTokens);
2787
- let p = (i.hooks ? i.hooks.provideParser(e) : e ? b.parse : b.parseInline)(a, i);
2788
- return i.hooks && (p = i.hooks.postprocess(p)), p;
2789
- } catch (u) {
2790
- return o(u);
3618
+ o.hooks && (n = o.hooks.preprocess(n));
3619
+ let u = (o.hooks ? o.hooks.provideLexer(e) : e ? T.lex : T.lexInline)(n, o);
3620
+ o.hooks && (u = o.hooks.processAllTokens(u)), o.walkTokens && this.walkTokens(u, o.walkTokens);
3621
+ let p = (o.hooks ? o.hooks.provideParser(e) : e ? O.parse : O.parseInline)(u, o);
3622
+ return o.hooks && (p = o.hooks.postprocess(p)), p;
3623
+ } catch (l) {
3624
+ return s(l);
2791
3625
  }
2792
3626
  };
2793
3627
  }
@@ -2795,8 +3629,8 @@ var D = class {
2795
3629
  return (n) => {
2796
3630
  if (n.message += `
2797
3631
  Please report this to https://github.com/markedjs/marked.`, e) {
2798
- let s = "<p>An error occurred:</p><pre>" + O(n.message + "", true) + "</pre>";
2799
- return t ? Promise.resolve(s) : s;
3632
+ let i = "<p>An error occurred:</p><pre>" + w(n.message + "", true) + "</pre>";
3633
+ return t ? Promise.resolve(i) : i;
2800
3634
  }
2801
3635
  if (t)
2802
3636
  return Promise.reject(n);
@@ -2804,44 +3638,44 @@ Please report this to https://github.com/markedjs/marked.`, e) {
2804
3638
  };
2805
3639
  }
2806
3640
  };
2807
- var M = new D;
2808
- function g(l, e) {
2809
- return M.parse(l, e);
3641
+ var I = new U;
3642
+ function f(a, e) {
3643
+ return I.parse(a, e);
2810
3644
  }
2811
- g.options = g.setOptions = function(l) {
2812
- return M.setOptions(l), g.defaults = M.defaults, G(g.defaults), g;
3645
+ f.options = f.setOptions = function(a) {
3646
+ return I.setOptions(a), f.defaults = I.defaults, V(f.defaults), f;
2813
3647
  };
2814
- g.getDefaults = z;
2815
- g.defaults = T;
2816
- g.use = function(...l) {
2817
- return M.use(...l), g.defaults = M.defaults, G(g.defaults), g;
2818
- };
2819
- g.walkTokens = function(l, e) {
2820
- return M.walkTokens(l, e);
3648
+ f.getDefaults = B;
3649
+ f.defaults = y;
3650
+ function At(...a) {
3651
+ return I.use(...a), f.defaults = I.defaults, V(f.defaults), f;
3652
+ }
3653
+ f.use = At;
3654
+ f.walkTokens = function(a, e) {
3655
+ return I.walkTokens(a, e);
2821
3656
  };
2822
- g.parseInline = M.parseInline;
2823
- g.Parser = b;
2824
- g.parser = b.parse;
2825
- g.Renderer = y;
2826
- g.TextRenderer = L;
2827
- g.Lexer = x;
2828
- g.lexer = x.lex;
2829
- g.Tokenizer = w;
2830
- g.Hooks = P;
2831
- g.parse = g;
2832
- var jt = g.options;
2833
- var Ft = g.setOptions;
2834
- var Ut = g.use;
2835
- var Kt = g.walkTokens;
2836
- var Wt = g.parseInline;
2837
- var Jt = b.parse;
2838
- var Vt = x.lex;
3657
+ f.parseInline = I.parseInline;
3658
+ f.Parser = O;
3659
+ f.parser = O.parse;
3660
+ f.Renderer = $;
3661
+ f.TextRenderer = z;
3662
+ f.Lexer = T;
3663
+ f.lexer = T.lex;
3664
+ f.Tokenizer = _;
3665
+ f.Hooks = L;
3666
+ f.parse = f;
3667
+ var Rn = f.options;
3668
+ var Tn = f.setOptions;
3669
+ var On = f.walkTokens;
3670
+ var wn = f.parseInline;
3671
+ var yn = O.parse;
3672
+ var Sn = T.lex;
2839
3673
 
2840
3674
  // src/polly-ui/markdown.tsx
2841
3675
  import { jsxDEV } from "preact/jsx-dev-runtime";
2842
3676
  function renderMarkdown(value) {
2843
- const html = g.parse(value, { async: false });
2844
- const clean = purify.sanitize(html);
3677
+ const html = f.parse(value, { async: false });
3678
+ const clean = purify_default.sanitize(html);
2845
3679
  return /* @__PURE__ */ jsxDEV("div", {
2846
3680
  "data-polly-ui": true,
2847
3681
  "data-polly-markdown": true,
@@ -2852,4 +3686,4 @@ export {
2852
3686
  renderMarkdown
2853
3687
  };
2854
3688
 
2855
- //# debugId=D02D5618C03860D364756E2164756E21
3689
+ //# debugId=8045B131AC5E319A64756E2164756E21