@nsshunt/stsuxvue 1.0.123 → 1.0.124

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.
package/dist/stsuxvue.cjs CHANGED
@@ -6036,7 +6036,7 @@ var import_ansi_to_html = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin
6036
6036
  return Filter;
6037
6037
  }();
6038
6038
  })))(), 1);
6039
- /*! @license DOMPurify 3.4.3 | (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.3/LICENSE */
6039
+ /*! @license DOMPurify 3.4.5 | (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.5/LICENSE */
6040
6040
  function _arrayLikeToArray(r, a) {
6041
6041
  (null == a || a > r.length) && (a = r.length);
6042
6042
  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
@@ -6543,6 +6543,8 @@ var html = freeze([
6543
6543
  "color",
6544
6544
  "cols",
6545
6545
  "colspan",
6546
+ "command",
6547
+ "commandfor",
6546
6548
  "controls",
6547
6549
  "controlslist",
6548
6550
  "coords",
@@ -6956,7 +6958,7 @@ var _createHooksMap = function _createHooksMap() {
6956
6958
  function createDOMPurify() {
6957
6959
  let window = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : getGlobal$1();
6958
6960
  const DOMPurify = (root) => createDOMPurify(root);
6959
- DOMPurify.version = "3.4.3";
6961
+ DOMPurify.version = "3.4.5";
6960
6962
  DOMPurify.removed = [];
6961
6963
  if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {
6962
6964
  DOMPurify.isSupported = false;
@@ -6972,6 +6974,7 @@ function createDOMPurify() {
6972
6974
  const getNextSibling = lookupGetter(ElementPrototype, "nextSibling");
6973
6975
  const getChildNodes = lookupGetter(ElementPrototype, "childNodes");
6974
6976
  const getParentNode = lookupGetter(ElementPrototype, "parentNode");
6977
+ const getNodeType = Node && Node.prototype ? lookupGetter(Node.prototype, "nodeType") : null;
6975
6978
  if (typeof HTMLTemplateElement === "function") {
6976
6979
  const template = document.createElement("template");
6977
6980
  if (template.content && template.content.ownerDocument) document = template.content.ownerDocument;
@@ -7390,6 +7393,42 @@ function createDOMPurify() {
7390
7393
  return createNodeIterator.call(root.ownerDocument || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);
7391
7394
  };
7392
7395
  /**
7396
+ * Strip template-engine expressions ({{...}}, ${...}, <%...%>) from the
7397
+ * character data of an element subtree. Used as the final safety net for
7398
+ * SAFE_FOR_TEMPLATES on every DOM-returning code path so that expressions
7399
+ * which only form after text-node normalization (e.g. fragments split across
7400
+ * stripped elements) cannot survive into a template-evaluating framework.
7401
+ *
7402
+ * Walks text/comment/CDATA/processing-instruction nodes and mutates `.data`
7403
+ * in place rather than round-tripping through innerHTML. This preserves
7404
+ * descendant node references (important for IN_PLACE callers), avoids a
7405
+ * serialize/reparse cycle, and reads literal character data — which means
7406
+ * `<%...%>` in text content matches the ERB regex against its real bytes
7407
+ * instead of the HTML-entity-escaped form innerHTML would produce.
7408
+ *
7409
+ * Attribute values are not visited here; SAFE_FOR_TEMPLATES handling for
7410
+ * attributes is performed during the per-node `_sanitizeAttributes` pass.
7411
+ *
7412
+ * @param node The root element whose character data should be scrubbed.
7413
+ */
7414
+ const _scrubTemplateExpressions = function _scrubTemplateExpressions(node) {
7415
+ node.normalize();
7416
+ const walker = createNodeIterator.call(node.ownerDocument || node, node, NodeFilter.SHOW_TEXT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_CDATA_SECTION | NodeFilter.SHOW_PROCESSING_INSTRUCTION, null);
7417
+ let currentNode = walker.nextNode();
7418
+ while (currentNode) {
7419
+ let data = currentNode.data;
7420
+ arrayForEach([
7421
+ MUSTACHE_EXPR$1,
7422
+ ERB_EXPR$1,
7423
+ TMPLIT_EXPR$1
7424
+ ], (expr) => {
7425
+ data = stringReplace(data, expr, " ");
7426
+ });
7427
+ currentNode.data = data;
7428
+ currentNode = walker.nextNode();
7429
+ }
7430
+ };
7431
+ /**
7393
7432
  * _isClobbered
7394
7433
  *
7395
7434
  * @param element element to check for clobbering attacks
@@ -7399,13 +7438,29 @@ function createDOMPurify() {
7399
7438
  return element instanceof HTMLFormElement && (typeof element.nodeName !== "string" || typeof element.textContent !== "string" || typeof element.removeChild !== "function" || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== "function" || typeof element.setAttribute !== "function" || typeof element.namespaceURI !== "string" || typeof element.insertBefore !== "function" || typeof element.hasChildNodes !== "function");
7400
7439
  };
7401
7440
  /**
7402
- * Checks whether the given object is a DOM node.
7441
+ * Checks whether the given object is a DOM node, including nodes that
7442
+ * originate from a different window/realm (e.g. an iframe's
7443
+ * contentDocument). The previous `value instanceof Node` check was
7444
+ * realm-bound: nodes from a different window failed it, causing
7445
+ * sanitize() to silently stringify them and reset IN_PLACE to false,
7446
+ * returning the original node unsanitized. See GHSA-4w3q-35jp-p934.
7447
+ *
7448
+ * Implementation: call the cached `nodeType` getter from Node.prototype
7449
+ * directly on the value. This bypasses any clobbered instance property
7450
+ * (e.g. a child element named "nodeType") and works across realms
7451
+ * because the WebIDL `nodeType` getter reads an internal slot that
7452
+ * every real Node has, regardless of which window minted it.
7403
7453
  *
7404
7454
  * @param value object to check whether it's a DOM node
7405
- * @return true is object is a DOM node
7455
+ * @return true if value is a DOM node from any realm
7406
7456
  */
7407
7457
  const _isNode = function _isNode(value) {
7408
- return typeof Node === "function" && value instanceof Node;
7458
+ if (!getNodeType || typeof value !== "object" || value === null) return false;
7459
+ try {
7460
+ return typeof getNodeType(value) === "number";
7461
+ } catch (_) {
7462
+ return false;
7463
+ }
7409
7464
  };
7410
7465
  function _executeHooks(hooks, currentNode, data) {
7411
7466
  arrayForEach(hooks, (hook) => {
@@ -7697,7 +7752,7 @@ function createDOMPurify() {
7697
7752
  if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) throw typeErrorCreate("root node is forbidden and cannot be sanitized in-place");
7698
7753
  }
7699
7754
  _sanitizeAttachedShadowRoots2(dirty);
7700
- } else if (dirty instanceof Node) {
7755
+ } else if (_isNode(dirty)) {
7701
7756
  body = _initDocument("<!---->");
7702
7757
  importedNode = body.ownerDocument.importNode(dirty, true);
7703
7758
  if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === "BODY") body = importedNode;
@@ -7716,20 +7771,12 @@ function createDOMPurify() {
7716
7771
  _sanitizeAttributes(currentNode);
7717
7772
  if (currentNode.content instanceof DocumentFragment) _sanitizeShadowDOM2(currentNode.content);
7718
7773
  }
7719
- if (IN_PLACE) return dirty;
7774
+ if (IN_PLACE) {
7775
+ if (SAFE_FOR_TEMPLATES) _scrubTemplateExpressions(dirty);
7776
+ return dirty;
7777
+ }
7720
7778
  if (RETURN_DOM) {
7721
- if (SAFE_FOR_TEMPLATES) {
7722
- body.normalize();
7723
- let html = body.innerHTML;
7724
- arrayForEach([
7725
- MUSTACHE_EXPR$1,
7726
- ERB_EXPR$1,
7727
- TMPLIT_EXPR$1
7728
- ], (expr) => {
7729
- html = stringReplace(html, expr, " ");
7730
- });
7731
- body.innerHTML = html;
7732
- }
7779
+ if (SAFE_FOR_TEMPLATES) _scrubTemplateExpressions(body);
7733
7780
  if (RETURN_DOM_FRAGMENT) {
7734
7781
  returnNode = createDocumentFragment.call(body.ownerDocument);
7735
7782
  while (body.firstChild) returnNode.appendChild(body.firstChild);