Fix async lifecycle ordering, add _spa_init boot phase, update to jqhtml _load_only/_load_render_only flags
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
12
node_modules/dompurify/README.md
generated
vendored
12
node_modules/dompurify/README.md
generated
vendored
@@ -1,16 +1,16 @@
|
||||
# DOMPurify
|
||||
|
||||
[](http://badge.fury.io/js/dompurify)  [](https://www.npmjs.com/package/dompurify)  [](https://github.com/cure53/DOMPurify/network/dependents) [](https://cloudback.it)
|
||||
[](http://badge.fury.io/js/dompurify)  [](https://www.npmjs.com/package/dompurify)  [](https://github.com/cure53/DOMPurify/network/dependents) [](https://cloudback.it)
|
||||
|
||||
DOMPurify is a DOM-only, super-fast, uber-tolerant XSS sanitizer for HTML, MathML and SVG.
|
||||
|
||||
It's also very simple to use and get started with. DOMPurify was [started in February 2014](https://github.com/cure53/DOMPurify/commit/a630922616927373485e0e787ab19e73e3691b2b) and, meanwhile, has reached version **v3.3.1**.
|
||||
It's also very simple to use and get started with. DOMPurify was [started in February 2014](https://github.com/cure53/DOMPurify/commit/a630922616927373485e0e787ab19e73e3691b2b) and, meanwhile, has reached version **v3.3.2**.
|
||||
|
||||
DOMPurify is written in JavaScript and works in all modern browsers (Safari (10+), Opera (15+), Edge, Firefox and Chrome - as well as almost anything else using Blink, Gecko or WebKit). It doesn't break on MSIE or other legacy browsers. It simply does nothing.
|
||||
DOMPurify runs as JavaScript and works in all modern browsers (Safari (10+), Opera (15+), Edge, Firefox and Chrome - as well as almost anything else using Blink, Gecko or WebKit). It doesn't break on MSIE or other legacy browsers. It simply does nothing.
|
||||
|
||||
**Note that [DOMPurify v2.5.8](https://github.com/cure53/DOMPurify/releases/tag/2.5.8) is the latest version supporting MSIE. For important security updates compatible with MSIE, please use the [2.x branch](https://github.com/cure53/DOMPurify/tree/2.x).**
|
||||
|
||||
Our automated tests cover [28 different browsers](https://github.com/cure53/DOMPurify/blob/main/test/karma.custom-launchers.config.js#L5) right now, more to come. We also cover Node.js v18.x, v19.x, v20.x, v21.x, v22.x and v23.x, running DOMPurify on [jsdom](https://github.com/jsdom/jsdom). Older Node versions are known to work as well, but hey... no guarantees.
|
||||
Our automated tests cover [28 different browsers](https://github.com/cure53/DOMPurify/blob/main/test/karma.custom-launchers.config.js#L5) right now, more to come. We also cover Node.js v20.x, v22.x, 24.x and v25.x, running DOMPurify on [jsdom](https://github.com/jsdom/jsdom). Older Node versions are known to work as well, but hey... no guarantees.
|
||||
|
||||
DOMPurify is written by security people who have vast background in web attacks and XSS. Fear not. For more details please also read about our [Security Goals & Threat Model](https://github.com/cure53/DOMPurify/wiki/Security-Goals-&-Threat-Model). Please, read it. Like, really.
|
||||
|
||||
@@ -65,7 +65,7 @@ After sanitizing your markup, you can also have a look at the property `DOMPurif
|
||||
|
||||
### Running DOMPurify on the server
|
||||
|
||||
DOMPurify technically also works server-side with Node.js. Our support strives to follow the [Node.js release cycle](https://nodejs.org/en/about/releases/).
|
||||
DOMPurify technically also works server-side with Node.js. Our support strives to follow the [Node.js release cycle](https://nodejs.org/en/about/previous-releases).
|
||||
|
||||
Running DOMPurify on the server requires a DOM to be present, which is probably no surprise. Usually, [jsdom](https://github.com/jsdom/jsdom) is the tool of choice and we **strongly recommend** to use the latest version of _jsdom_.
|
||||
|
||||
@@ -440,7 +440,7 @@ We support `npm` officially. GitHub Actions workflow is configured to install de
|
||||
|
||||
#### Scripts
|
||||
|
||||
We rely on npm run-scripts for integrating with our tooling infrastructure. We use ESLint as a pre-commit hook to ensure code consistency. Moreover, to ease formatting we use [prettier](https://github.com/prettier/prettier) while building the `/dist` assets happens through `rollup`.
|
||||
We use ESLint as a pre-commit hook to ensure code consistency. Moreover, to ease formatting we use [prettier](https://github.com/prettier/prettier) while building the `/dist` assets happens through `rollup`.
|
||||
|
||||
These are our npm scripts:
|
||||
|
||||
|
||||
2
node_modules/dompurify/dist/purify.cjs.d.ts
generated
vendored
2
node_modules/dompurify/dist/purify.cjs.d.ts
generated
vendored
@@ -1,4 +1,4 @@
|
||||
/*! @license DOMPurify 3.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.1/LICENSE */
|
||||
/*! @license DOMPurify 3.3.2 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.2/LICENSE */
|
||||
|
||||
import { TrustedTypePolicy, TrustedHTML, TrustedTypesWindow } from 'trusted-types/lib/index.js';
|
||||
|
||||
|
||||
19
node_modules/dompurify/dist/purify.cjs.js
generated
vendored
19
node_modules/dompurify/dist/purify.cjs.js
generated
vendored
@@ -1,4 +1,4 @@
|
||||
/*! @license DOMPurify 3.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.1/LICENSE */
|
||||
/*! @license DOMPurify 3.3.2 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.2/LICENSE */
|
||||
|
||||
'use strict';
|
||||
|
||||
@@ -307,7 +307,7 @@ const _createHooksMap = function _createHooksMap() {
|
||||
function createDOMPurify() {
|
||||
let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();
|
||||
const DOMPurify = root => createDOMPurify(root);
|
||||
DOMPurify.version = '3.3.1';
|
||||
DOMPurify.version = '3.3.2';
|
||||
DOMPurify.removed = [];
|
||||
if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {
|
||||
// Not running in a browser, provide a factory function
|
||||
@@ -602,7 +602,7 @@ function createDOMPurify() {
|
||||
/* Parse profile info */
|
||||
if (USE_PROFILES) {
|
||||
ALLOWED_TAGS = addToSet({}, text);
|
||||
ALLOWED_ATTR = [];
|
||||
ALLOWED_ATTR = create(null);
|
||||
if (USE_PROFILES.html === true) {
|
||||
addToSet(ALLOWED_TAGS, html$1);
|
||||
addToSet(ALLOWED_ATTR, html);
|
||||
@@ -623,6 +623,13 @@ function createDOMPurify() {
|
||||
addToSet(ALLOWED_ATTR, xml);
|
||||
}
|
||||
}
|
||||
/* Prevent function-based ADD_ATTR / ADD_TAGS from leaking across calls */
|
||||
if (!objectHasOwnProperty(cfg, 'ADD_TAGS')) {
|
||||
EXTRA_ELEMENT_HANDLING.tagCheck = null;
|
||||
}
|
||||
if (!objectHasOwnProperty(cfg, 'ADD_ATTR')) {
|
||||
EXTRA_ELEMENT_HANDLING.attributeCheck = null;
|
||||
}
|
||||
/* Merge configuration parameters */
|
||||
if (cfg.ADD_TAGS) {
|
||||
if (typeof cfg.ADD_TAGS === 'function') {
|
||||
@@ -1020,6 +1027,10 @@ function createDOMPurify() {
|
||||
*/
|
||||
// eslint-disable-next-line complexity
|
||||
const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {
|
||||
/* FORBID_ATTR must always win, even if ADD_ATTR predicate would allow it */
|
||||
if (FORBID_ATTR[lcName]) {
|
||||
return false;
|
||||
}
|
||||
/* Make sure attribute cannot clobber */
|
||||
if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {
|
||||
return false;
|
||||
@@ -1112,7 +1123,7 @@ function createDOMPurify() {
|
||||
value = SANITIZE_NAMED_PROPS_PREFIX + value;
|
||||
}
|
||||
/* Work around a security issue with comments inside attributes */
|
||||
if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|title|textarea)/i, value)) {
|
||||
if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i, value)) {
|
||||
_removeAttribute(name, currentNode);
|
||||
continue;
|
||||
}
|
||||
|
||||
2
node_modules/dompurify/dist/purify.cjs.js.map
generated
vendored
2
node_modules/dompurify/dist/purify.cjs.js.map
generated
vendored
File diff suppressed because one or more lines are too long
2
node_modules/dompurify/dist/purify.es.d.mts
generated
vendored
2
node_modules/dompurify/dist/purify.es.d.mts
generated
vendored
@@ -1,4 +1,4 @@
|
||||
/*! @license DOMPurify 3.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.1/LICENSE */
|
||||
/*! @license DOMPurify 3.3.2 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.2/LICENSE */
|
||||
|
||||
import { TrustedTypePolicy, TrustedHTML, TrustedTypesWindow } from 'trusted-types/lib/index.js';
|
||||
|
||||
|
||||
19
node_modules/dompurify/dist/purify.es.mjs
generated
vendored
19
node_modules/dompurify/dist/purify.es.mjs
generated
vendored
@@ -1,4 +1,4 @@
|
||||
/*! @license DOMPurify 3.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.1/LICENSE */
|
||||
/*! @license DOMPurify 3.3.2 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.2/LICENSE */
|
||||
|
||||
const {
|
||||
entries,
|
||||
@@ -305,7 +305,7 @@ const _createHooksMap = function _createHooksMap() {
|
||||
function createDOMPurify() {
|
||||
let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();
|
||||
const DOMPurify = root => createDOMPurify(root);
|
||||
DOMPurify.version = '3.3.1';
|
||||
DOMPurify.version = '3.3.2';
|
||||
DOMPurify.removed = [];
|
||||
if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {
|
||||
// Not running in a browser, provide a factory function
|
||||
@@ -600,7 +600,7 @@ function createDOMPurify() {
|
||||
/* Parse profile info */
|
||||
if (USE_PROFILES) {
|
||||
ALLOWED_TAGS = addToSet({}, text);
|
||||
ALLOWED_ATTR = [];
|
||||
ALLOWED_ATTR = create(null);
|
||||
if (USE_PROFILES.html === true) {
|
||||
addToSet(ALLOWED_TAGS, html$1);
|
||||
addToSet(ALLOWED_ATTR, html);
|
||||
@@ -621,6 +621,13 @@ function createDOMPurify() {
|
||||
addToSet(ALLOWED_ATTR, xml);
|
||||
}
|
||||
}
|
||||
/* Prevent function-based ADD_ATTR / ADD_TAGS from leaking across calls */
|
||||
if (!objectHasOwnProperty(cfg, 'ADD_TAGS')) {
|
||||
EXTRA_ELEMENT_HANDLING.tagCheck = null;
|
||||
}
|
||||
if (!objectHasOwnProperty(cfg, 'ADD_ATTR')) {
|
||||
EXTRA_ELEMENT_HANDLING.attributeCheck = null;
|
||||
}
|
||||
/* Merge configuration parameters */
|
||||
if (cfg.ADD_TAGS) {
|
||||
if (typeof cfg.ADD_TAGS === 'function') {
|
||||
@@ -1018,6 +1025,10 @@ function createDOMPurify() {
|
||||
*/
|
||||
// eslint-disable-next-line complexity
|
||||
const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {
|
||||
/* FORBID_ATTR must always win, even if ADD_ATTR predicate would allow it */
|
||||
if (FORBID_ATTR[lcName]) {
|
||||
return false;
|
||||
}
|
||||
/* Make sure attribute cannot clobber */
|
||||
if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {
|
||||
return false;
|
||||
@@ -1110,7 +1121,7 @@ function createDOMPurify() {
|
||||
value = SANITIZE_NAMED_PROPS_PREFIX + value;
|
||||
}
|
||||
/* Work around a security issue with comments inside attributes */
|
||||
if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|title|textarea)/i, value)) {
|
||||
if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i, value)) {
|
||||
_removeAttribute(name, currentNode);
|
||||
continue;
|
||||
}
|
||||
|
||||
2
node_modules/dompurify/dist/purify.es.mjs.map
generated
vendored
2
node_modules/dompurify/dist/purify.es.mjs.map
generated
vendored
File diff suppressed because one or more lines are too long
19
node_modules/dompurify/dist/purify.js
generated
vendored
19
node_modules/dompurify/dist/purify.js
generated
vendored
@@ -1,4 +1,4 @@
|
||||
/*! @license DOMPurify 3.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.1/LICENSE */
|
||||
/*! @license DOMPurify 3.3.2 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.2/LICENSE */
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
@@ -311,7 +311,7 @@
|
||||
function createDOMPurify() {
|
||||
let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();
|
||||
const DOMPurify = root => createDOMPurify(root);
|
||||
DOMPurify.version = '3.3.1';
|
||||
DOMPurify.version = '3.3.2';
|
||||
DOMPurify.removed = [];
|
||||
if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {
|
||||
// Not running in a browser, provide a factory function
|
||||
@@ -606,7 +606,7 @@
|
||||
/* Parse profile info */
|
||||
if (USE_PROFILES) {
|
||||
ALLOWED_TAGS = addToSet({}, text);
|
||||
ALLOWED_ATTR = [];
|
||||
ALLOWED_ATTR = create(null);
|
||||
if (USE_PROFILES.html === true) {
|
||||
addToSet(ALLOWED_TAGS, html$1);
|
||||
addToSet(ALLOWED_ATTR, html);
|
||||
@@ -627,6 +627,13 @@
|
||||
addToSet(ALLOWED_ATTR, xml);
|
||||
}
|
||||
}
|
||||
/* Prevent function-based ADD_ATTR / ADD_TAGS from leaking across calls */
|
||||
if (!objectHasOwnProperty(cfg, 'ADD_TAGS')) {
|
||||
EXTRA_ELEMENT_HANDLING.tagCheck = null;
|
||||
}
|
||||
if (!objectHasOwnProperty(cfg, 'ADD_ATTR')) {
|
||||
EXTRA_ELEMENT_HANDLING.attributeCheck = null;
|
||||
}
|
||||
/* Merge configuration parameters */
|
||||
if (cfg.ADD_TAGS) {
|
||||
if (typeof cfg.ADD_TAGS === 'function') {
|
||||
@@ -1024,6 +1031,10 @@
|
||||
*/
|
||||
// eslint-disable-next-line complexity
|
||||
const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {
|
||||
/* FORBID_ATTR must always win, even if ADD_ATTR predicate would allow it */
|
||||
if (FORBID_ATTR[lcName]) {
|
||||
return false;
|
||||
}
|
||||
/* Make sure attribute cannot clobber */
|
||||
if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {
|
||||
return false;
|
||||
@@ -1116,7 +1127,7 @@
|
||||
value = SANITIZE_NAMED_PROPS_PREFIX + value;
|
||||
}
|
||||
/* Work around a security issue with comments inside attributes */
|
||||
if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|title|textarea)/i, value)) {
|
||||
if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i, value)) {
|
||||
_removeAttribute(name, currentNode);
|
||||
continue;
|
||||
}
|
||||
|
||||
2
node_modules/dompurify/dist/purify.js.map
generated
vendored
2
node_modules/dompurify/dist/purify.js.map
generated
vendored
File diff suppressed because one or more lines are too long
4
node_modules/dompurify/dist/purify.min.js
generated
vendored
4
node_modules/dompurify/dist/purify.min.js
generated
vendored
File diff suppressed because one or more lines are too long
2
node_modules/dompurify/dist/purify.min.js.map
generated
vendored
2
node_modules/dompurify/dist/purify.min.js.map
generated
vendored
File diff suppressed because one or more lines are too long
11
node_modules/dompurify/package.json
generated
vendored
11
node_modules/dompurify/package.json
generated
vendored
@@ -7,7 +7,7 @@
|
||||
"commit-amend-build": "scripts/commit-amend-build.sh",
|
||||
"prebuild": "rimraf dist/**",
|
||||
"dev": "cross-env NODE_ENV=development BABEL_ENV=rollup rollup -w -c -o dist/purify.js",
|
||||
"build": "run-s build:types build:rollup build:fix-types build:cleanup",
|
||||
"build": "npm run build:types && npm run build:rollup && npm run build:fix-types && npm run build:cleanup",
|
||||
"build:types": "tsc --outDir dist/types --declaration --emitDeclarationOnly",
|
||||
"build:rollup": "rollup -c",
|
||||
"build:fix-types": "node ./scripts/fix-types.js",
|
||||
@@ -97,6 +97,9 @@
|
||||
"VERSION"
|
||||
]
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@types/trusted-types": "^2.0.7"
|
||||
},
|
||||
@@ -120,15 +123,13 @@
|
||||
"karma-firefox-launcher": "^2.1.2",
|
||||
"karma-qunit": "^4.1.2",
|
||||
"karma-rollup-preprocessor": "^7.0.8",
|
||||
"lodash.sample": "^4.2.1",
|
||||
"minimist": "^1.2.6",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"pre-commit": "^1.2.2",
|
||||
"prettier": "^2.5.1",
|
||||
"qunit": "^2.4.1",
|
||||
"qunit-tap": "^1.5.0",
|
||||
"rimraf": "^3.0.2",
|
||||
"rollup": "^3.29.5",
|
||||
"rollup": "^3.30.0",
|
||||
"rollup-plugin-dts": "^6.1.1",
|
||||
"rollup-plugin-includepaths": "^0.2.4",
|
||||
"rollup-plugin-typescript2": "^0.36.0",
|
||||
@@ -141,7 +142,7 @@
|
||||
},
|
||||
"name": "dompurify",
|
||||
"description": "DOMPurify is a DOM-only, super-fast, uber-tolerant XSS sanitizer for HTML, MathML and SVG. It's written in JavaScript and works in all modern browsers (Safari, Opera (15+), Internet Explorer (10+), Firefox and Chrome - as well as almost anything else using Blink or WebKit). DOMPurify is written by security people who have vast background in web attacks and XSS. Fear not.",
|
||||
"version": "3.3.1",
|
||||
"version": "3.3.2",
|
||||
"directories": {
|
||||
"test": "test"
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user