url-sanitizer 2.0.13 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../bundle_wo_dompurify/mjs/dompurify.js", "../bundle_wo_dompurify/mjs/constant.js", "../bundle_wo_dompurify/mjs/common.js", "../bundle_wo_dompurify/mjs/file-reader.js", "../bundle_wo_dompurify/lib/file/text-chars.json", "../bundle_wo_dompurify/lib/iana/uri-schemes.json", "../bundle_wo_dompurify/mjs/uri-util.js", "../bundle_wo_dompurify/mjs/sanitizer.js"],
4
- "sourcesContent": ["/**\n * dompurify.js\n */\n\nconst { DOMPurify } = globalThis;\n\nexport {\n DOMPurify as domPurify\n};\n", "/**\n * constant.js\n */\n\n/* numeric */\nexport const HEX = 16;\nexport const TYPE_FROM = 8;\nexport const TYPE_TO = -1;\n\n/* regexp */\nexport const REG_B64 = /^[\\w+/=-]+$/;\nexport const REG_CHARSET = /^charset=([\\w#&.;-]+)$/;\nexport const REG_DATA_URL = /data:[\\w#&+./;=-]*,/;\nexport const REG_DATA_URL_B64 = /data:[\\w#&+./;=^]*base64,[\\w+/=-]+/i;\nexport const REG_DATA_URL_G = /data:[\\w#&+./;=-]*,[^\\x22]+/g;\nexport const REG_NUM_REF = /&#(x(?:00)?[\\dA-F]{2}|0?\\d{1,3});?/gi;\nexport const REG_MIME_DOM =\n /^(?:application\\/(?:[\\w#&.;-]+\\+)?x|image\\/svg\\+x|text\\/(?:ht|x))ml;?/;\nexport const REG_MIME_TEXT = /^text\\/[\\w#&.;-]+/;\nexport const REG_SCHEME = /^[a-z][\\da-z+.-]*$/;\nexport const REG_SCHEME_EXT = /^(?:ext|web)\\+[a-z]+$/;\nexport const REG_SCRIPT = /(?:java|vb)script/;\nexport const REG_SCRIPT_BLOB = /(?:java|vb)script|blob/;\nexport const REG_TAG_QUOT = /%(?:22|27|3C|3E)|[\\x22\\x27<>]/;\nexport const REG_URL_ENC = /^%[\\dA-F]{2}$/i;\n", "/**\n * common.js\n */\n\n/* shared */\nimport { TYPE_FROM, TYPE_TO } from './constant.js';\n\n/**\n * get type\n * @param {object} o - object to check\n * @returns {string} - type of object\n */\nexport const getType = o =>\n Object.prototype.toString.call(o).slice(TYPE_FROM, TYPE_TO);\n\n/**\n * is string\n * @param {object} o - object to check\n * @returns {boolean} - result\n */\nexport const isString = o => typeof o === 'string' || o instanceof String;\n", "/**\n * file-reader.js\n */\n\nconst { FileReader } = globalThis;\n\nexport {\n FileReader\n};\n", "[7,8,9,10,11,12,13,27,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255]\n", "[\"aaa\",\"aaas\",\"about\",\"acap\",\"acct\",\"acd\",\"acr\",\"adiumxtra\",\"adt\",\"afp\",\"afs\",\"agtp\",\"aim\",\"amss\",\"android\",\"appdata\",\"apt\",\"ar\",\"ari\",\"ark\",\"at\",\"attachment\",\"aw\",\"barion\",\"beshare\",\"bitcoin\",\"bitcoincash\",\"bl\",\"blob\",\"bluetooth\",\"bolo\",\"brid\",\"browserext\",\"cabal\",\"caip\",\"calculator\",\"callto\",\"cap\",\"cast\",\"casts\",\"chrome\",\"chrome-extension\",\"cid\",\"coap\",\"coaps\",\"com-eventbrite-attendee\",\"content\",\"content-type\",\"crid\",\"cstr\",\"cvs\",\"dab\",\"dat\",\"data\",\"dav\",\"dhttp\",\"diaspora\",\"dict\",\"did\",\"dilithium3\",\"dis\",\"dlna-playcontainer\",\"dlna-playsingle\",\"dnp\",\"dns\",\"dntp\",\"doi\",\"donau\",\"dpp\",\"drm\",\"dtmi\",\"dtn\",\"dvb\",\"dvx\",\"dweb\",\"ed2k\",\"eid\",\"elsi\",\"embedded\",\"ens\",\"esim\",\"ethereum\",\"example\",\"facetime\",\"feed\",\"feedready\",\"fido\",\"file\",\"finger\",\"first-run-pen-experience\",\"fish\",\"fm\",\"ftp\",\"fuchsia-pkg\",\"geo\",\"gg\",\"git\",\"gitoid\",\"gizmoproject\",\"go\",\"gopher\",\"graph\",\"gtalk\",\"h323\",\"ham\",\"hcap\",\"hcp\",\"hs20\",\"http\",\"https\",\"hxxp\",\"hxxps\",\"hydrazone\",\"hyper\",\"i0\",\"iax\",\"ibi\",\"ibi-\",\"icap\",\"icon\",\"ilstring\",\"im\",\"imap\",\"info\",\"iotdisco\",\"ipfs\",\"ipn\",\"ipns\",\"ipp\",\"ipps\",\"irc\",\"irc6\",\"ircs\",\"iris\",\"iris.beep\",\"iris.lwz\",\"iris.xpc\",\"iris.xpcs\",\"isostore\",\"itms\",\"jabber\",\"jar\",\"jms\",\"keyparc\",\"lastfm\",\"lbry\",\"ldap\",\"ldaps\",\"leaptofrogans\",\"lid\",\"linkid\",\"lorawan\",\"lpa\",\"lvlt\",\"machineProvisioningProgressReporter\",\"magnet\",\"mailto\",\"maps\",\"market\",\"matrix\",\"message\",\"microsoft.windows.camera\",\"microsoft.windows.camera.multipicker\",\"microsoft.windows.camera.picker\",\"mid\",\"mms\",\"mongodb\",\"moz\",\"moz-extension\",\"mqtt\",\"mqtts\",\"ms-access\",\"ms-appinstaller\",\"ms-browser-extension\",\"ms-calculator\",\"ms-drive-to\",\"ms-enrollment\",\"ms-excel\",\"ms-eyecontrolspeech\",\"ms-gamebarservices\",\"ms-gamingoverlay\",\"ms-getoffice\",\"ms-help\",\"ms-infopath\",\"ms-inputapp\",\"ms-launchremotedesktop\",\"ms-lockscreencomponent-config\",\"ms-media-stream-id\",\"ms-meetnow\",\"ms-mixedrealitycapture\",\"ms-mobileplans\",\"ms-newsandinterests\",\"ms-officeapp\",\"ms-people\",\"ms-personacard\",\"ms-powerpoint\",\"ms-project\",\"ms-publisher\",\"ms-recall\",\"ms-remotedesktop\",\"ms-remotedesktop-launch\",\"ms-restoretabcompanion\",\"ms-screenclip\",\"ms-screensketch\",\"ms-search\",\"ms-search-repair\",\"ms-secondary-screen-controller\",\"ms-secondary-screen-setup\",\"ms-settings\",\"ms-settings-airplanemode\",\"ms-settings-bluetooth\",\"ms-settings-camera\",\"ms-settings-cellular\",\"ms-settings-cloudstorage\",\"ms-settings-connectabledevices\",\"ms-settings-displays-topology\",\"ms-settings-emailandaccounts\",\"ms-settings-language\",\"ms-settings-location\",\"ms-settings-lock\",\"ms-settings-nfctransactions\",\"ms-settings-notifications\",\"ms-settings-power\",\"ms-settings-privacy\",\"ms-settings-proximity\",\"ms-settings-screenrotation\",\"ms-settings-wifi\",\"ms-settings-workplace\",\"ms-spd\",\"ms-stickers\",\"ms-sttoverlay\",\"ms-transit-to\",\"ms-useractivityset\",\"ms-uup\",\"ms-virtualtouchpad\",\"ms-visio\",\"ms-walk-to\",\"ms-whiteboard\",\"ms-whiteboard-cmd\",\"ms-widgetboard\",\"ms-widgets\",\"ms-word\",\"msnim\",\"msrp\",\"msrps\",\"mss\",\"mt\",\"mtqp\",\"mtrust\",\"mumble\",\"mupdate\",\"mvn\",\"mvrp\",\"mvrps\",\"news\",\"nfs\",\"ni\",\"nih\",\"nntp\",\"notes\",\"num\",\"ocf\",\"oid\",\"onenote\",\"onenote-cmd\",\"opaquelocktoken\",\"openid\",\"openpgp4fpr\",\"otpauth\",\"palm\",\"paparazzi\",\"payto\",\"pkcs11\",\"platform\",\"pop\",\"pres\",\"proxy\",\"psyc\",\"pttp\",\"pwid\",\"qb\",\"query\",\"quic-transport\",\"redis\",\"rediss\",\"reload\",\"res\",\"resource\",\"rmi\",\"rsync\",\"rtmfp\",\"rtmp\",\"rtsp\",\"rtsps\",\"rtspu\",\"sarif\",\"secondlife\",\"secret-token\",\"service\",\"session\",\"sftp\",\"sgn\",\"shc\",\"shelter\",\"sieve\",\"simpleledger\",\"simplex\",\"sip\",\"sips\",\"skype\",\"smb\",\"smp\",\"sms\",\"smtp\",\"snmp\",\"soap.beep\",\"soap.beeps\",\"soldat\",\"spacify\",\"spiffe\",\"spotify\",\"ssb\",\"ssh\",\"starknet\",\"steam\",\"stun\",\"stuns\",\"submit\",\"svn\",\"swh\",\"swid\",\"swidpath\",\"tag\",\"taler\",\"teamspeak\",\"teapot\",\"teapots\",\"tel\",\"teliaeid\",\"telnet\",\"tftp\",\"things\",\"thismessage\",\"tip\",\"tn3270\",\"tool\",\"turn\",\"turns\",\"tv\",\"udp\",\"unreal\",\"upn\",\"urn\",\"ut2004\",\"uuid-in-package\",\"v-event\",\"vemmi\",\"ventrilo\",\"ves\",\"view-source\",\"vnc\",\"vscode\",\"vscode-insiders\",\"vsls\",\"w3\",\"wasm\",\"wasm-js\",\"wcr\",\"web3\",\"webcal\",\"wifi\",\"ws\",\"wss\",\"wtai\",\"wyciwyg\",\"xcompute\",\"xcon\",\"xcon-userid\",\"xfire\",\"xftp\",\"xmlrpc.beep\",\"xmlrpc.beeps\",\"xmpp\",\"xrcp\",\"xri\",\"ymsgr\",\"z39.50r\",\"z39.50s\"]\n", "/**\n * uri-util.js\n */\n\n/* shared */\nimport { getType, isString } from './common.js';\nimport { FileReader } from './file-reader.js';\nimport { textChars, uriSchemes } from './lib-util.js';\n\nimport {\n HEX, REG_B64, REG_NUM_REF, REG_SCHEME, REG_SCHEME_EXT, REG_SCRIPT, REG_URL_ENC\n} from './constant.js';\n\n/**\n * get URL encoded string\n * @param {string} str - string\n * @returns {string} - URL encoded string\n */\nexport const getURLEncodedString = str => {\n if (!isString(str)) {\n throw new TypeError(`Expected String but got ${getType(str)}.`);\n }\n const chars = [];\n for (const ch of str) {\n chars.push(`%${ch.charCodeAt(0).toString(HEX).toUpperCase()}`);\n }\n return chars.join('');\n};\n\n/**\n * escape URL encoded HTML special chars\n * @param {string} ch - URL encoded (percent encoded) char\n * @returns {string} - escaped URL encoded HTML special char / URL encoded char\n */\nexport const escapeURLEncodedHTMLChars = ch => {\n if (isString(ch) && REG_URL_ENC.test(ch)) {\n ch = ch.toUpperCase();\n }\n const [amp, num, lt, gt, quot, apos] =\n ['&', '#', '<', '>', '\"', \"'\"].map(getURLEncodedString);\n let escapedChar;\n if (ch === amp) {\n escapedChar = `${amp}amp;`;\n } else if (ch === lt) {\n escapedChar = `${amp}lt;`;\n } else if (ch === gt) {\n escapedChar = `${amp}gt;`;\n } else if (ch === quot) {\n escapedChar = `${amp}quot;`;\n } else if (ch === apos) {\n escapedChar = `${amp}${num}39;`;\n } else {\n escapedChar = ch;\n }\n return escapedChar;\n};\n\n/**\n * parse base64 encoded data\n * @param {string} data - base64 encoded data\n * @returns {string} - parsed text data / base64 encoded data if binary\n */\nexport const parseBase64 = data => {\n if (!isString(data)) {\n throw new TypeError(`Expected String but got ${getType(data)}.`);\n } else if (!REG_B64.test(data)) {\n throw new Error(`Invalid base64 data: ${data}`);\n }\n const bin = atob(data);\n const uint8arr = Uint8Array.from([...bin].map(c => c.charCodeAt(0)));\n const textCharCodes = new Set(textChars);\n let parsedData;\n if (uint8arr.every(c => textCharCodes.has(c))) {\n parsedData = bin.replace(/\\s/g, getURLEncodedString);\n } else {\n parsedData = data;\n }\n return parsedData;\n};\n\n/**\n * parse URL encoded numeric character references in the range 0x00 to 0xFF\n * @param {string} str - string\n * @param {number} [nest] - nest level\n * @returns {string} - parsed string\n */\nexport const parseURLEncodedNumCharRef = (str, nest = 0) => {\n if (!isString(str)) {\n throw new TypeError(`Expected String but got ${getType(str)}.`);\n }\n if (!Number.isInteger(nest)) {\n throw new TypeError(`Expected Number but got ${getType(nest)}.`);\n } else if (nest > HEX) {\n throw new Error('Character references nested too deeply.');\n }\n let res = decodeURIComponent(str);\n if (/&#/.test(res)) {\n const textCharCodes = new Set(textChars);\n const items = [...res.matchAll(REG_NUM_REF)].reverse();\n for (const item of items) {\n const [numCharRef, value] = item;\n let num;\n if (/^x[\\dA-F]+/i.test(value)) {\n num = parseInt(`0${value}`, HEX);\n } else if (/^\\d+/.test(value)) {\n num = parseInt(value);\n }\n if (Number.isInteger(num)) {\n const { index } = item;\n const [preNum, postNum] = [\n res.substring(0, index),\n res.substring(index + numCharRef.length)\n ];\n if (textCharCodes.has(num)) {\n res = `${preNum}${String.fromCharCode(num)}${postNum}`;\n if (/#x?$/.test(preNum) || /^#(?:x(?:00)?[2-7]|\\d)/.test(postNum)) {\n res = parseURLEncodedNumCharRef(res, ++nest);\n }\n } else if (num < HEX * HEX) {\n res = `${preNum}${postNum}`;\n }\n }\n }\n }\n return res;\n};\n\n/**\n * create data URL from blob\n * @param {object} blob - blob\n * @returns {Promise.<?string>} - data URL\n */\nexport const createDataURLFromBlob = blob => new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.addEventListener('error', () => reject(reader.error));\n reader.addEventListener('abort', () => resolve(reader.result));\n reader.addEventListener('load', () => resolve(reader.result));\n reader.readAsDataURL(blob);\n});\n\n/**\n * URI schemes\n */\nexport class URISchemes {\n /* private fields */\n #schemes;\n\n /**\n * construct\n */\n constructor() {\n this.#schemes = new Set(uriSchemes);\n }\n\n /**\n * get schemes\n * @see {@link https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml}\n * - Historical schemes omitted\n * - 'moz-extension' scheme added\n * @returns {Array.<string>} - array of schemes\n */\n get() {\n return [...this.#schemes];\n }\n\n /**\n * has scheme\n * @param {string} scheme - scheme\n * @returns {boolean} - result\n */\n has(scheme) {\n return this.#schemes.has(scheme);\n }\n\n /**\n * add scheme\n * NOTE: `javascript` and/or `vbscript` schemes can not be registered\n * @param {string} scheme - scheme\n * @returns {Array.<string>} - array of schemes\n */\n add(scheme) {\n if (!isString(scheme)) {\n throw new TypeError(`Expected String but got ${getType(scheme)}.`);\n } else if (REG_SCRIPT.test(scheme) || !REG_SCHEME.test(scheme)) {\n throw new Error(`Invalid scheme: ${scheme}`);\n }\n this.#schemes.add(scheme);\n return [...this.#schemes];\n }\n\n /**\n * remove scheme\n * @param {string} scheme - scheme\n * @returns {boolean} - result\n */\n remove(scheme) {\n return this.#schemes.delete(scheme);\n }\n\n /**\n * verify URI\n * @param {string} uri - URI\n * @returns {boolean} - result\n */\n verify(uri) {\n let res;\n if (isString(uri)) {\n try {\n const { protocol } = new URL(uri);\n const scheme = protocol.replace(/:$/, '');\n const schemeParts = scheme.split('+');\n res = (!REG_SCRIPT.test(scheme) && REG_SCHEME_EXT.test(scheme)) ||\n schemeParts.every(s => this.#schemes.has(s));\n } catch (e) {\n res = false;\n }\n }\n return !!res;\n }\n\n /**\n * reset schemes\n * @returns {void}\n */\n reset() {\n this.#schemes.clear();\n for (const scheme of uriSchemes) {\n this.#schemes.add(scheme);\n }\n }\n}\n", "/**\n * sanitizer.js\n */\n\n/* shared */\nimport { domPurify } from './dompurify.js';\nimport { getType, isString } from './common.js';\nimport {\n createDataURLFromBlob, escapeURLEncodedHTMLChars, parseBase64,\n parseURLEncodedNumCharRef, URISchemes\n} from './uri-util.js';\nimport {\n HEX, REG_DATA_URL, REG_DATA_URL_B64, REG_DATA_URL_G, REG_MIME_DOM,\n REG_SCRIPT_BLOB, REG_TAG_QUOT\n} from './constant.js';\n\n/* typedef */\n/**\n * @typedef {object} ParsedURL - object with additional props based on URL API\n * @property {string} input - URL input\n * @property {boolean} valid - is valid URI\n * @property {object} [data] - parsed result of data URL, `null`able\n * @property {string} [data.mime] - MIME type\n * @property {boolean} [data.base64] - is base64 encoded\n * @property {string} [data.data] - data part of the data URL\n * @property {string} [href] - sanitized URL input\n * @property {string} [origin] - scheme, domain and port of the sanitized URL\n * @property {string} [protocol] - protocol scheme of the sanitized URL\n * @property {string} [username] - username specified before the domain name\n * @property {string} [password] - password specified before the domain name\n * @property {string} [host] - domain and port of the sanitized URL\n * @property {string} [hostname] - domain of the sanitized URL\n * @property {string} [port] - port number of the sanitized URL\n * @property {string} [pathname] - path of the sanitized URL\n * @property {string} [search] - query string of the sanitized URL\n * @property {string} [hash] - fragment identifier of the sanitized URL\n */\n\n/**\n * URL sanitizer\n */\nclass URLSanitizer extends URISchemes {\n /* private fields */\n #nest;\n #recurse = new Set();\n\n /**\n * construct\n */\n constructor() {\n super();\n this.#nest = 0;\n }\n\n /**\n * replace matched data URLs\n * @param {string} data - data URL\n * @returns {string} - replaced data URL\n */\n replace(data) {\n if (!isString(data)) {\n throw new TypeError(`Expected String but got ${getType(data)}.`);\n }\n let replacedData = data;\n if (REG_DATA_URL.test(replacedData)) {\n const matchedDataUrls = replacedData.matchAll(REG_DATA_URL_G);\n const items = [...matchedDataUrls].reverse();\n for (const item of items) {\n let [dataUrl] = item;\n if (REG_DATA_URL_B64.test(dataUrl)) {\n [dataUrl] = REG_DATA_URL_B64.exec(dataUrl);\n }\n this.#nest++;\n this.#recurse.add(dataUrl);\n const parsedDataUrl = this.sanitize(dataUrl, {\n allow: ['data']\n });\n const { index } = item;\n const [preDataUrl, postDataUrl] = [\n replacedData.substring(0, index),\n replacedData.substring(index + dataUrl.length)\n ];\n if (parsedDataUrl) {\n replacedData = `${preDataUrl}${parsedDataUrl}${postDataUrl}`;\n } else {\n replacedData = `${preDataUrl}${postDataUrl}`;\n }\n }\n }\n return replacedData;\n }\n\n /**\n * purify URL encoded DOM\n * @param {string} dom - DOM string\n * @returns {string} - purified DOM string\n */\n purify(dom) {\n if (!isString(dom)) {\n throw new TypeError(`Expected String but got ${getType(dom)}.`);\n }\n let purifiedDom = domPurify.sanitize(decodeURIComponent(dom));\n if (purifiedDom && REG_DATA_URL.test(purifiedDom)) {\n purifiedDom = this.replace(purifiedDom);\n }\n purifiedDom = purifiedDom.replace(/(?:#|%23)$/, '')\n .replace(/(?<!(?:#|%23).*)(?:\\?|%3F)$/, '');\n return encodeURI(purifiedDom);\n }\n\n /**\n * sanitize URL\n * NOTE: `data` and `file` schemes must be explicitly allowed\n * `blob` URLs should be converted to `data` URLs\n * `javascript` and `vbscript` schemes can not be allowed\n * @param {string} url - URL\n * @param {object} [opt] - options\n * @param {Array.<string>} [opt.allow] - array of allowed schemes\n * @param {Array.<string>} [opt.deny] - array of denied schemes\n * @param {Array.<string>} [opt.only] - array of specific schemes to allow\n * @returns {?string} - sanitized URL\n */\n sanitize(url, opt) {\n if (this.#nest > HEX) {\n this.#nest = 0;\n throw new Error('Data URLs nested too deeply.');\n }\n const { allow, deny, only } = opt ?? {};\n const schemeMap = new Map([\n ['blob', false],\n ['data', false],\n ['file', false],\n ['javascrpt', false],\n ['vbscript', false]\n ]);\n const tempScheme = new Set();\n let restrictScheme = false;\n if (Array.isArray(only) && only.length) {\n const schemes = super.get();\n for (const item of schemes) {\n schemeMap.set(item, false);\n }\n const items = Object.values(only);\n for (let item of items) {\n if (isString(item)) {\n item = item.trim();\n if (!REG_SCRIPT_BLOB.test(item)) {\n if (super.has(item)) {\n schemeMap.set(item, true);\n } else {\n try {\n super.add(item);\n } catch (e) {\n // fall through\n }\n if (super.has(item)) {\n schemeMap.set(item, true);\n tempScheme.add(item);\n }\n }\n if (!restrictScheme && schemeMap.has(item)) {\n restrictScheme = schemeMap.get(item);\n }\n }\n }\n }\n } else {\n if (Array.isArray(allow) && allow.length) {\n const items = Object.values(allow);\n for (let item of items) {\n if (isString(item)) {\n item = item.trim();\n if (!REG_SCRIPT_BLOB.test(item)) {\n if (super.has(item)) {\n schemeMap.set(item, true);\n } else {\n try {\n super.add(item);\n } catch (e) {\n // fall through\n }\n if (super.has(item)) {\n schemeMap.set(item, true);\n tempScheme.add(item);\n }\n }\n }\n }\n }\n }\n if (Array.isArray(deny) && deny.length) {\n const items = Object.values(deny);\n for (let item of items) {\n if (isString(item)) {\n item = item.trim();\n if (item) {\n schemeMap.set(item, false);\n }\n }\n }\n }\n }\n let sanitizedUrl;\n if (super.verify(url)) {\n const { hash, href, pathname, protocol, search } = new URL(url);\n const scheme = protocol.replace(/:$/, '');\n const schemeParts = scheme.split('+');\n let bool;\n if (restrictScheme) {\n bool = schemeParts.every(s => schemeMap.get(s));\n } else {\n for (const [key, value] of schemeMap.entries()) {\n bool = value || (scheme !== key && schemeParts.every(s => s !== key));\n if (!bool) {\n break;\n }\n }\n }\n if (bool) {\n const isDataUrl = schemeParts.includes('data');\n let finalize;\n let urlToSanitize = href;\n if (isDataUrl) {\n const [mediaType, ...dataParts] = pathname.split(',');\n const data = `${dataParts.join(',')}${search}${hash}`;\n const mediaTypes = mediaType.split(';');\n const isBase64 = mediaTypes[mediaTypes.length - 1] === 'base64';\n let parsedData = data;\n if (isBase64) {\n parsedData = parseBase64(data);\n }\n try {\n const decodedData = parseURLEncodedNumCharRef(parsedData).trim();\n const { protocol: dataScheme } = new URL(decodedData);\n const dataSchemeParts = dataScheme.replace(/:$/, '').split('+');\n if (dataSchemeParts.some(s => REG_SCRIPT_BLOB.test(s))) {\n urlToSanitize = '';\n }\n } catch (e) {\n // fall through\n }\n const containsDataUrl = REG_DATA_URL.test(parsedData);\n if (parsedData !== data || containsDataUrl) {\n if (containsDataUrl) {\n parsedData = this.replace(parsedData);\n } else if (this.#recurse.has(url)) {\n this.#recurse.delete(url);\n } else {\n finalize = true;\n }\n } else if (this.#recurse.has(url)) {\n this.#recurse.delete(url);\n } else {\n finalize = true;\n }\n if (!mediaType || REG_MIME_DOM.test(mediaType)) {\n parsedData = this.purify(parsedData);\n }\n if (urlToSanitize && parsedData) {\n if (isBase64 && parsedData !== data) {\n mediaTypes.pop();\n }\n urlToSanitize = `${scheme}:${mediaTypes.join(';')},${parsedData}`;\n } else {\n urlToSanitize = '';\n }\n } else {\n finalize = true;\n }\n if (!isDataUrl && REG_TAG_QUOT.test(urlToSanitize)) {\n const item = REG_TAG_QUOT.exec(urlToSanitize);\n const { index } = item;\n urlToSanitize =\n urlToSanitize.substring(0, index).replace(/[?&]$/, '');\n }\n if (urlToSanitize) {\n sanitizedUrl =\n urlToSanitize.replace(/%26/g, escapeURLEncodedHTMLChars);\n if (finalize) {\n this.#nest = 0;\n }\n } else {\n this.#nest = 0;\n }\n }\n if (tempScheme.size) {\n tempScheme.forEach(item => {\n super.remove(item);\n });\n }\n }\n return sanitizedUrl || null;\n }\n\n /**\n * parse sanitized URL\n * @param {string} url - URL\n * @param {object} [opt] - options\n * @param {Array.<string>} [opt.allow] - array of allowed schemes\n * @param {Array.<string>} [opt.deny] - array of denied schemes\n * @param {Array.<string>} [opt.only] - array of specific schemes to allow\n * @returns {ParsedURL} - result with additional props based on URL API\n */\n parse(url, opt) {\n if (!isString(url)) {\n throw new TypeError(`Expected String but got ${getType(url)}.`);\n }\n const parsedUrl = new Map([\n ['input', url]\n ]);\n let sanitizedUrl;\n if (this.verify(url)) {\n const { protocol } = new URL(url);\n if (protocol === 'blob:') {\n sanitizedUrl = url;\n } else {\n sanitizedUrl = this.sanitize(url, opt ?? {\n allow: ['data', 'file']\n });\n }\n }\n if (sanitizedUrl) {\n const urlObj = new URL(sanitizedUrl);\n const { pathname, protocol } = urlObj;\n const schemeParts = protocol.replace(/:$/, '').split('+');\n const isDataUrl = schemeParts.includes('data');\n parsedUrl.set('valid', true);\n if (isDataUrl) {\n const dataUrl = new Map();\n const [mediaType, ...dataParts] = pathname.split(',');\n const data = `${dataParts.join(',')}`;\n const mediaTypes = mediaType.split(';');\n const isBase64 = mediaTypes[mediaTypes.length - 1] === 'base64';\n if (isBase64) {\n mediaTypes.pop();\n }\n dataUrl.set('mime', mediaTypes.join(';'));\n dataUrl.set('base64', isBase64);\n dataUrl.set('data', data);\n parsedUrl.set('data', Object.fromEntries(dataUrl));\n } else {\n parsedUrl.set('data', null);\n }\n for (const key in urlObj) {\n const value = urlObj[key];\n if (isString(value)) {\n parsedUrl.set(key, value);\n }\n }\n } else {\n parsedUrl.set('valid', false);\n }\n return Object.fromEntries(parsedUrl);\n }\n\n /**\n * reset sanitizer\n * @returns {void}\n */\n reset() {\n super.reset();\n this.#nest = 0;\n this.#recurse.clear();\n }\n}\nexport { URLSanitizer };\n\n/* aliases and async wrappers */\n/* instance */\nconst urlSanitizer = new URLSanitizer();\n\n/**\n * sanitize URL async\n * NOTE: `blob`, `data` and `file` schemes must be explicitly allowed\n * given a `blob` URL, returns a sanitized `data` URL\n * @param {string} url - URL\n * @param {object} [opt] - options\n * @param {Array.<string>} [opt.allow] - array of allowed schemes\n * @param {Array.<string>} [opt.deny] - array of denied schemes\n * @param {Array.<string>} [opt.only] - array of specific schemes to allow\n * @returns {Promise.<?string>} - sanitized URL\n */\nexport const sanitizeURL = async (url, opt = {\n allow: [],\n deny: [],\n only: []\n}) => {\n let res;\n if (url && isString(url)) {\n let scheme;\n try {\n const { protocol } = new URL(url);\n scheme = protocol.replace(/:$/, '');\n } catch (e) {\n // fall through;\n }\n if (scheme === 'blob') {\n const { allow, deny, only } = opt;\n if ((Array.isArray(allow) && allow.includes('blob') &&\n !(Array.isArray(deny) && deny.includes('blob'))) ||\n (Array.isArray(only) && only.includes('blob'))) {\n let data;\n try {\n data =\n await fetch(url).then(r => r.blob()).then(createDataURLFromBlob);\n } catch (e) {\n // fall through\n }\n if (data) {\n if (Array.isArray(only)) {\n if (!only.includes('data')) {\n only.push('data');\n }\n } else if (Array.isArray(allow)) {\n if (!allow.includes('data')) {\n allow.push('data');\n }\n if (Array.isArray(deny) && deny.includes('data')) {\n const i = deny.indexOf('data');\n deny.splice(i, 1);\n }\n }\n res = urlSanitizer.sanitize(data, opt);\n }\n }\n URL.revokeObjectURL(url);\n } else if (scheme) {\n res = urlSanitizer.sanitize(url, opt);\n }\n }\n return res || null;\n};\n\n/**\n * sanitize URL sync\n * NOTE: `data` and `file` schemes must be explicitly allowed\n * `blob` scheme returns `null`\n * @param {string} url - URL\n * @param {object} [opt] - options\n * @param {Array.<string>} [opt.allow] - array of allowed schemes\n * @param {Array.<string>} [opt.deny] - array of denied schemes\n * @param {Array.<string>} [opt.only] - array of specific schemes to allow\n * @returns {?string} - sanitized URL\n */\nexport const sanitizeURLSync = (url, opt) => {\n let res;\n if (url && isString(url)) {\n let scheme;\n try {\n const { protocol } = new URL(url);\n scheme = protocol.replace(/:$/, '');\n } catch (e) {\n // fall through;\n }\n if (scheme === 'blob') {\n URL.revokeObjectURL(url);\n } else if (scheme) {\n res = urlSanitizer.sanitize(url, opt);\n }\n }\n return res || null;\n};\n\n/**\n * parse URL async\n * @param {string} url - URL\n * @returns {Promise.<ParsedURL>} - result\n */\nexport const parseURL = async url => {\n const res = urlSanitizer.parse(url);\n return res;\n};\n\n/**\n * parse URL sync\n * @param {string} url - URL\n * @returns {ParsedURL} - result\n */\nexport const parseURLSync = url => urlSanitizer.parse(url);\n\n/**\n * is URI async\n * @param {string} uri - URI\n * @returns {Promise.<boolean>} - result\n */\nexport const isURI = async uri => {\n const res = urlSanitizer.verify(uri);\n return res;\n};\n\n/**\n * is URI sync\n * @param {string} uri - URI\n * @returns {boolean} - result\n */\nexport const isURISync = uri => urlSanitizer.verify(uri);\n\n/* export instance */\nexport default urlSanitizer;\n"],
5
- "mappings": "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",
6
- "names": ["DOMPurify", "REG_B64", "REG_DATA_URL", "REG_DATA_URL_B64", "REG_DATA_URL_G", "REG_NUM_REF", "REG_MIME_DOM", "REG_SCHEME", "REG_SCHEME_EXT", "REG_SCRIPT", "REG_SCRIPT_BLOB", "REG_TAG_QUOT", "REG_URL_ENC", "getType", "o", "isString", "FileReader", "text_chars_default", "uri_schemes_default", "getURLEncodedString", "str", "isString", "getType", "chars", "ch", "escapeURLEncodedHTMLChars", "REG_URL_ENC", "amp", "num", "lt", "gt", "quot", "apos", "escapedChar", "parseBase64", "data", "REG_B64", "bin", "uint8arr", "c", "textCharCodes", "text_chars_default", "parsedData", "parseURLEncodedNumCharRef", "nest", "res", "items", "REG_NUM_REF", "item", "numCharRef", "value", "index", "preNum", "postNum", "createDataURLFromBlob", "blob", "resolve", "reject", "reader", "FileReader", "URISchemes", "#schemes", "uri_schemes_default", "scheme", "REG_SCRIPT", "REG_SCHEME", "uri", "protocol", "schemeParts", "REG_SCHEME_EXT", "s", "URLSanitizer", "URISchemes", "#nest", "#recurse", "data", "isString", "getType", "replacedData", "REG_DATA_URL", "items", "REG_DATA_URL_G", "item", "dataUrl", "REG_DATA_URL_B64", "parsedDataUrl", "index", "preDataUrl", "postDataUrl", "dom", "purifiedDom", "DOMPurify", "url", "opt", "allow", "deny", "only", "schemeMap", "tempScheme", "restrictScheme", "schemes", "REG_SCRIPT_BLOB", "sanitizedUrl", "hash", "href", "pathname", "protocol", "search", "scheme", "schemeParts", "bool", "s", "key", "value", "isDataUrl", "finalize", "urlToSanitize", "mediaType", "dataParts", "mediaTypes", "isBase64", "parsedData", "parseBase64", "decodedData", "parseURLEncodedNumCharRef", "dataScheme", "containsDataUrl", "REG_MIME_DOM", "REG_TAG_QUOT", "escapeURLEncodedHTMLChars", "parsedUrl", "urlObj", "urlSanitizer", "URLSanitizer", "sanitizeURL", "url", "opt", "res", "isString", "scheme", "protocol", "allow", "deny", "only", "data", "r", "createDataURLFromBlob", "i", "sanitizeURLSync", "parseURL", "parseURLSync", "isURI", "uri", "isURISync", "sanitizer_default"]
4
+ "sourcesContent": ["/**\n * dompurify.js\n */\n\nconst domPurify = {\n sanitize: (...args) => {\n if (globalThis?.DOMPurify) {\n return globalThis.DOMPurify.sanitize(...args);\n }\n\n const msg = [\n 'DOMPurify is not available.',\n 'Ensure DOMPurify is exposed globally (e.g., window.DOMPurify).'\n ];\n throw new Error(msg.join(' '));\n }\n};\n\nexport {\n domPurify\n};\n", "/**\n * constant.js\n */\n\n/* numeric */\nexport const CHUNK_SIZE = 8 * 1024;\nexport const HEX = 16;\nexport const MAX_BLOB_SIZE = 32 * 1024 * 1024;\nexport const TYPE_FROM = 8;\nexport const TYPE_TO = -1;\n\n/* regexp */\nexport const REG_B64 = /^[\\w+/=-]+$/;\nexport const REG_CHARSET = /^charset=([\\w#&.;-]+)$/;\nexport const REG_DATA_URL = /data:[\\w#&+./;=-]*,/;\nexport const REG_DATA_URL_B64 = /data:[\\w#&+./;=^]*base64,[\\w+/=-]+/i;\nexport const REG_DATA_URL_G = /data:[\\w#&+./;=-]*,[^\\x22]+/g;\nexport const REG_NUM_REF = /&#(x(?:00)?[\\dA-F]{2}|0?\\d{1,3});?/gi;\nexport const REG_MIME_DOM =\n /^(?:application\\/(?:[\\w#&.;-]+\\+)?x|image\\/svg\\+x|text\\/(?:ht|x))ml;?/;\nexport const REG_MIME_TEXT = /^text\\/[\\w#&.;-]+/;\nexport const REG_SCHEME = /^[a-z][\\da-z+.-]*$/;\nexport const REG_SCHEME_EXT = /^(?:ext|web)\\+[a-z]+$/;\nexport const REG_SCRIPT = /(?:java|vb)script/;\nexport const REG_SCRIPT_BLOB = /(?:java|vb)script|blob/;\nexport const REG_TAG_QUOT = /%(?:22|27|3C|3E)|[\\x22\\x27<>]/;\nexport const REG_URL_ENC = /^%[\\dA-F]{2}$/i;\n", "/**\n * common.js\n */\n\n/* shared */\nimport { TYPE_FROM, TYPE_TO } from './constant.js';\n\n/**\n * get type\n * @param {object} o - object to check\n * @returns {string} - type of object\n */\nexport const getType = o =>\n Object.prototype.toString.call(o).slice(TYPE_FROM, TYPE_TO);\n\n/**\n * is string\n * @param {object} o - object to check\n * @returns {boolean} - result\n */\nexport const isString = o => typeof o === 'string' || o instanceof String;\n", "/**\n * file-reader.js\n */\n\nconst { FileReader } = globalThis;\n\nexport {\n FileReader\n};\n", "[7,8,9,10,11,12,13,27,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255]\n", "[\"aaa\",\"aaas\",\"about\",\"acap\",\"acct\",\"acd\",\"acr\",\"adiumxtra\",\"adt\",\"afp\",\"afs\",\"agtp\",\"aim\",\"amss\",\"android\",\"appdata\",\"apt\",\"ar\",\"ari\",\"ark\",\"at\",\"attachment\",\"aw\",\"barion\",\"beshare\",\"bitcoin\",\"bitcoincash\",\"bl\",\"blob\",\"bluetooth\",\"bolo\",\"brid\",\"browserext\",\"cabal\",\"caip\",\"calculator\",\"callto\",\"cap\",\"cast\",\"casts\",\"chrome\",\"chrome-extension\",\"cid\",\"coap\",\"coaps\",\"com-eventbrite-attendee\",\"content\",\"content-type\",\"crid\",\"cstr\",\"cttps\",\"cvs\",\"dab\",\"dat\",\"data\",\"dav\",\"dhttp\",\"diaspora\",\"dict\",\"did\",\"dilithium3\",\"dis\",\"dlna-playcontainer\",\"dlna-playsingle\",\"dnp\",\"dns\",\"dntp\",\"doi\",\"donau\",\"dpp\",\"drm\",\"dtmi\",\"dtn\",\"dvb\",\"dvx\",\"dweb\",\"ed2k\",\"eid\",\"elsi\",\"embedded\",\"ens\",\"esim\",\"ethereum\",\"example\",\"facetime\",\"feed\",\"feedready\",\"fido\",\"file\",\"finger\",\"first-run-pen-experience\",\"fish\",\"fm\",\"ftp\",\"fuchsia-pkg\",\"geo\",\"gg\",\"git\",\"gitoid\",\"gizmoproject\",\"go\",\"gopher\",\"graph\",\"gtalk\",\"h323\",\"ham\",\"hcap\",\"hcp\",\"hs20\",\"http\",\"https\",\"hxxp\",\"hxxps\",\"hydrazone\",\"hyper\",\"i0\",\"iax\",\"ibi\",\"ibi-\",\"icap\",\"icon\",\"ilstring\",\"im\",\"imap\",\"info\",\"iotdisco\",\"ipfs\",\"ipn\",\"ipns\",\"ipp\",\"ipps\",\"irc\",\"irc6\",\"ircs\",\"iris\",\"iris.beep\",\"iris.lwz\",\"iris.xpc\",\"iris.xpcs\",\"isostore\",\"itms\",\"jabber\",\"jar\",\"jms\",\"keyparc\",\"lastfm\",\"lbry\",\"ldap\",\"ldaps\",\"leaptofrogans\",\"lid\",\"linkid\",\"lorawan\",\"lpa\",\"lvlt\",\"machineProvisioningProgressReporter\",\"magnet\",\"mailto\",\"maps\",\"market\",\"matrix\",\"message\",\"microsoft.windows.camera\",\"microsoft.windows.camera.multipicker\",\"microsoft.windows.camera.picker\",\"mid\",\"mms\",\"mongodb\",\"moz\",\"moz-extension\",\"mqtt\",\"mqtts\",\"ms-access\",\"ms-appinstaller\",\"ms-browser-extension\",\"ms-calculator\",\"ms-drive-to\",\"ms-enrollment\",\"ms-excel\",\"ms-eyecontrolspeech\",\"ms-gamebarservices\",\"ms-gamingoverlay\",\"ms-getoffice\",\"ms-help\",\"ms-infopath\",\"ms-inputapp\",\"ms-launchremotedesktop\",\"ms-lockscreencomponent-config\",\"ms-media-stream-id\",\"ms-meetnow\",\"ms-mixedrealitycapture\",\"ms-mobileplans\",\"ms-newsandinterests\",\"ms-officeapp\",\"ms-people\",\"ms-personacard\",\"ms-powerpoint\",\"ms-project\",\"ms-publisher\",\"ms-recall\",\"ms-remotedesktop\",\"ms-remotedesktop-launch\",\"ms-restoretabcompanion\",\"ms-screenclip\",\"ms-screensketch\",\"ms-search\",\"ms-search-repair\",\"ms-secondary-screen-controller\",\"ms-secondary-screen-setup\",\"ms-settings\",\"ms-settings-airplanemode\",\"ms-settings-bluetooth\",\"ms-settings-camera\",\"ms-settings-cellular\",\"ms-settings-cloudstorage\",\"ms-settings-connectabledevices\",\"ms-settings-displays-topology\",\"ms-settings-emailandaccounts\",\"ms-settings-language\",\"ms-settings-location\",\"ms-settings-lock\",\"ms-settings-nfctransactions\",\"ms-settings-notifications\",\"ms-settings-power\",\"ms-settings-privacy\",\"ms-settings-proximity\",\"ms-settings-screenrotation\",\"ms-settings-wifi\",\"ms-settings-workplace\",\"ms-spd\",\"ms-stickers\",\"ms-sttoverlay\",\"ms-transit-to\",\"ms-useractivityset\",\"ms-uup\",\"ms-virtualtouchpad\",\"ms-visio\",\"ms-walk-to\",\"ms-whiteboard\",\"ms-whiteboard-cmd\",\"ms-widgetboard\",\"ms-widgets\",\"ms-word\",\"msnim\",\"msrp\",\"msrps\",\"mss\",\"mt\",\"mtqp\",\"mtrust\",\"mumble\",\"mupdate\",\"mvn\",\"mvrp\",\"mvrps\",\"news\",\"nfs\",\"ni\",\"nih\",\"nntp\",\"notes\",\"num\",\"ocf\",\"oid\",\"onenote\",\"onenote-cmd\",\"opaquelocktoken\",\"openid\",\"openpgp4fpr\",\"otpauth\",\"palm\",\"paparazzi\",\"payto\",\"pkcs11\",\"platform\",\"pop\",\"pres\",\"proxy\",\"psyc\",\"pttp\",\"pwid\",\"qb\",\"query\",\"quic-transport\",\"redis\",\"rediss\",\"reload\",\"res\",\"resource\",\"rmi\",\"rsync\",\"rtmfp\",\"rtmp\",\"rtsp\",\"rtsps\",\"rtspu\",\"sarif\",\"secondlife\",\"secret-token\",\"service\",\"session\",\"sftp\",\"sgn\",\"shc\",\"shelter\",\"sieve\",\"simpleledger\",\"simplex\",\"sip\",\"sips\",\"skype\",\"smb\",\"smp\",\"sms\",\"smtp\",\"snmp\",\"soap.beep\",\"soap.beeps\",\"soldat\",\"spacify\",\"spiffe\",\"spotify\",\"ssb\",\"ssh\",\"starknet\",\"steam\",\"stun\",\"stuns\",\"submit\",\"svn\",\"swh\",\"swid\",\"swidpath\",\"tag\",\"taler\",\"teamspeak\",\"teapot\",\"teapots\",\"tel\",\"teliaeid\",\"telnet\",\"tftp\",\"things\",\"thismessage\",\"tip\",\"tn3270\",\"tool\",\"turn\",\"turns\",\"tv\",\"udp\",\"unreal\",\"upn\",\"urn\",\"ut2004\",\"uuid-in-package\",\"v-event\",\"vemmi\",\"ventrilo\",\"ves\",\"view-source\",\"vnc\",\"vscode\",\"vscode-insiders\",\"vsls\",\"w3\",\"wasm\",\"wasm-js\",\"wcr\",\"web3\",\"webcal\",\"wifi\",\"ws\",\"wss\",\"wtai\",\"wyciwyg\",\"xcompute\",\"xcon\",\"xcon-userid\",\"xfire\",\"xftp\",\"xmlrpc.beep\",\"xmlrpc.beeps\",\"xmpp\",\"xrcp\",\"xri\",\"ymsgr\",\"z39.50r\",\"z39.50s\",\"ztdnaid\"]\n", "/**\n * uri-util.js\n */\n\n/* shared */\nimport { getType, isString } from './common.js';\nimport { FileReader } from './file-reader.js';\nimport { textChars, uriSchemes } from './lib-util.js';\n\nimport {\n HEX, MAX_BLOB_SIZE, REG_B64, REG_NUM_REF, REG_SCHEME, REG_SCHEME_EXT,\n REG_SCRIPT, REG_URL_ENC\n} from './constant.js';\n\n/**\n * get URL encoded string\n * @param {string} str - string\n * @returns {string} - URL encoded string\n */\nexport const getURLEncodedString = str => {\n if (!isString(str)) {\n throw new TypeError(`Expected String but got ${getType(str)}.`);\n }\n const chars = [];\n for (const ch of str) {\n chars.push(`%${ch.charCodeAt(0).toString(HEX).toUpperCase()}`);\n }\n return chars.join('');\n};\n\n/**\n * escape URL encoded HTML special chars\n * @param {string} ch - URL encoded (percent encoded) char\n * @returns {string} - escaped URL encoded HTML special char / URL encoded char\n */\nexport const escapeURLEncodedHTMLChars = ch => {\n if (isString(ch) && REG_URL_ENC.test(ch)) {\n ch = ch.toUpperCase();\n }\n const [amp, num, lt, gt, quot, apos] =\n ['&', '#', '<', '>', '\"', \"'\"].map(getURLEncodedString);\n let escapedChar;\n if (ch === amp) {\n escapedChar = `${amp}amp;`;\n } else if (ch === lt) {\n escapedChar = `${amp}lt;`;\n } else if (ch === gt) {\n escapedChar = `${amp}gt;`;\n } else if (ch === quot) {\n escapedChar = `${amp}quot;`;\n } else if (ch === apos) {\n escapedChar = `${amp}${num}39;`;\n } else {\n escapedChar = ch;\n }\n return escapedChar;\n};\n\n/**\n * parse base64 encoded data\n * @param {string} data - base64 encoded data\n * @returns {string} - parsed text data / base64 encoded data if binary\n */\nexport const parseBase64 = data => {\n if (!isString(data)) {\n throw new TypeError(`Expected String but got ${getType(data)}.`);\n } else if (!REG_B64.test(data)) {\n throw new Error(`Invalid base64 data: ${data}`);\n }\n const bin = atob(data);\n const uint8arr = Uint8Array.from([...bin].map(c => c.charCodeAt(0)));\n const textCharCodes = new Set(textChars);\n let parsedData;\n if (uint8arr.every(c => textCharCodes.has(c))) {\n parsedData = bin.replace(/\\s/g, getURLEncodedString);\n } else {\n parsedData = data;\n }\n return parsedData;\n};\n\n/**\n * parse URL encoded numeric character references in the range 0x00 to 0xFF\n * @param {string} str - string\n * @param {number} [nest] - nest level\n * @returns {string} - parsed string\n */\nexport const parseURLEncodedNumCharRef = (str, nest = 0) => {\n if (!isString(str)) {\n throw new TypeError(`Expected String but got ${getType(str)}.`);\n }\n if (!Number.isInteger(nest)) {\n throw new TypeError(`Expected Number but got ${getType(nest)}.`);\n } else if (nest > HEX) {\n throw new Error('Character references nested too deeply.');\n }\n let res = decodeURIComponent(str);\n if (/&#/.test(res)) {\n const textCharCodes = new Set(textChars);\n const items = [...res.matchAll(REG_NUM_REF)].reverse();\n for (const item of items) {\n const [numCharRef, value] = item;\n let num;\n if (/^x[\\dA-F]+/i.test(value)) {\n num = parseInt(`0${value}`, HEX);\n } else if (/^\\d+/.test(value)) {\n num = parseInt(value);\n }\n if (Number.isInteger(num)) {\n const { index } = item;\n const [preNum, postNum] = [\n res.substring(0, index),\n res.substring(index + numCharRef.length)\n ];\n if (textCharCodes.has(num)) {\n res = `${preNum}${String.fromCharCode(num)}${postNum}`;\n if (/#x?$/.test(preNum) || /^#(?:x(?:00)?[2-7]|\\d)/.test(postNum)) {\n res = parseURLEncodedNumCharRef(res, ++nest);\n }\n } else if (num < HEX * HEX) {\n res = `${preNum}${postNum}`;\n }\n }\n }\n }\n return res;\n};\n\n/**\n * create data URL from blob\n * @param {object} blob - blob\n * @param {number} maxBlobSize - max blob size\n * @returns {Promise.<?string>} - data URL\n */\nexport const createDataURLFromBlob = (blob, maxBlobSize = MAX_BLOB_SIZE) =>\n new Promise((resolve, reject) => {\n if (!Number.isInteger(blob?.size)) {\n return resolve(null);\n } else if (Number.isInteger(maxBlobSize) && blob.size > maxBlobSize) {\n return reject(new DOMException(\n `Blob size (${blob.size} bytes) exceeds the maximum allowed size of ${maxBlobSize} bytes.`,\n 'NotReadableError'\n ));\n }\n const reader = new FileReader();\n reader.addEventListener('error', () => reject(reader.error));\n reader.addEventListener('abort', () => resolve(reader.result));\n reader.addEventListener('load', () => resolve(reader.result));\n reader.readAsDataURL(blob);\n });\n\n/**\n * URI schemes\n */\nexport class URISchemes {\n /* private fields */\n #schemes;\n\n /**\n * construct\n */\n constructor() {\n this.#schemes = new Set(uriSchemes);\n }\n\n /**\n * get schemes\n * @see {@link https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml}\n * - Historical schemes omitted\n * - 'moz-extension' scheme added\n * @returns {Array.<string>} - array of schemes\n */\n get() {\n return [...this.#schemes];\n }\n\n /**\n * has scheme\n * @param {string} scheme - scheme\n * @returns {boolean} - result\n */\n has(scheme) {\n return this.#schemes.has(scheme);\n }\n\n /**\n * add scheme\n * NOTE: `javascript` and/or `vbscript` schemes can not be registered\n * @param {string} scheme - scheme\n * @returns {Array.<string>} - array of schemes\n */\n add(scheme) {\n if (!isString(scheme)) {\n throw new TypeError(`Expected String but got ${getType(scheme)}.`);\n } else if (REG_SCRIPT.test(scheme) || !REG_SCHEME.test(scheme)) {\n throw new Error(`Invalid scheme: ${scheme}`);\n }\n this.#schemes.add(scheme);\n return [...this.#schemes];\n }\n\n /**\n * remove scheme\n * @param {string} scheme - scheme\n * @returns {boolean} - result\n */\n remove(scheme) {\n return this.#schemes.delete(scheme);\n }\n\n /**\n * verify URI\n * @param {string} uri - URI\n * @returns {boolean} - result\n */\n verify(uri) {\n let res;\n if (isString(uri)) {\n try {\n const { protocol } = new URL(uri);\n const scheme = protocol.replace(/:$/, '');\n const schemeParts = scheme.split('+');\n res = (!REG_SCRIPT.test(scheme) && REG_SCHEME_EXT.test(scheme)) ||\n schemeParts.every(s => this.#schemes.has(s));\n } catch (e) {\n res = false;\n }\n }\n return !!res;\n }\n\n /**\n * reset schemes\n * @returns {void}\n */\n reset() {\n this.#schemes.clear();\n for (const scheme of uriSchemes) {\n this.#schemes.add(scheme);\n }\n }\n}\n", "/**\n * sanitizer.js\n */\n\n/* shared */\nimport { domPurify } from './dompurify.js';\nimport { getType, isString } from './common.js';\nimport {\n createDataURLFromBlob, escapeURLEncodedHTMLChars, parseBase64,\n parseURLEncodedNumCharRef, URISchemes\n} from './uri-util.js';\nimport {\n HEX, MAX_BLOB_SIZE, REG_DATA_URL, REG_DATA_URL_B64, REG_DATA_URL_G,\n REG_MIME_DOM, REG_SCRIPT_BLOB, REG_TAG_QUOT\n} from './constant.js';\n\n/* typedef */\n/**\n * @typedef {object} ParsedURL - object with additional props based on URL API\n * @property {string} input - URL input\n * @property {boolean} valid - is valid URI\n * @property {object} [data] - parsed result of data URL, `null`able\n * @property {string} [data.mime] - MIME type\n * @property {boolean} [data.base64] - is base64 encoded\n * @property {string} [data.data] - data part of the data URL\n * @property {string} [href] - sanitized URL input\n * @property {string} [origin] - scheme, domain and port of the sanitized URL\n * @property {string} [protocol] - protocol scheme of the sanitized URL\n * @property {string} [username] - username specified before the domain name\n * @property {string} [password] - password specified before the domain name\n * @property {string} [host] - domain and port of the sanitized URL\n * @property {string} [hostname] - domain of the sanitized URL\n * @property {string} [port] - port number of the sanitized URL\n * @property {string} [pathname] - path of the sanitized URL\n * @property {string} [search] - query string of the sanitized URL\n * @property {string} [hash] - fragment identifier of the sanitized URL\n */\n\n/**\n * Internal debug logger.\n * @param {boolean} isDebug - Debug flag.\n * @param {string} message - Output message.\n * @param {Error} [error] - Caught error object.\n */\nexport const logDebug = (isDebug, message, error) => {\n if (isDebug) {\n console.warn(`[URLSanitizer Debug] ${message}`, error ? error.message : '');\n }\n};\n\n/**\n * URL sanitizer\n */\nclass URLSanitizer extends URISchemes {\n /* private fields */\n #nest;\n #recurse = new Set();\n\n /**\n * construct\n */\n constructor() {\n super();\n this.#nest = 0;\n }\n\n /**\n * replace matched data URLs\n * @param {string} data - data URL\n * @returns {string} - replaced data URL\n */\n replace(data) {\n if (!isString(data)) {\n throw new TypeError(`Expected String but got ${getType(data)}.`);\n }\n let replacedData = data;\n if (REG_DATA_URL.test(replacedData)) {\n const matchedDataUrls = replacedData.matchAll(REG_DATA_URL_G);\n const items = [...matchedDataUrls].reverse();\n for (const item of items) {\n let [dataUrl] = item;\n if (REG_DATA_URL_B64.test(dataUrl)) {\n [dataUrl] = REG_DATA_URL_B64.exec(dataUrl);\n }\n this.#nest++;\n this.#recurse.add(dataUrl);\n const parsedDataUrl = this.sanitize(dataUrl, {\n allow: ['data']\n });\n const { index } = item;\n const [preDataUrl, postDataUrl] = [\n replacedData.substring(0, index),\n replacedData.substring(index + dataUrl.length)\n ];\n if (parsedDataUrl) {\n replacedData = `${preDataUrl}${parsedDataUrl}${postDataUrl}`;\n } else {\n replacedData = `${preDataUrl}${postDataUrl}`;\n }\n }\n }\n return replacedData;\n }\n\n /**\n * purify URL encoded DOM\n * @param {string} dom - DOM string\n * @returns {string} - purified DOM string\n */\n purify(dom) {\n if (!isString(dom)) {\n throw new TypeError(`Expected String but got ${getType(dom)}.`);\n }\n let purifiedDom = domPurify.sanitize(decodeURIComponent(dom));\n if (purifiedDom && REG_DATA_URL.test(purifiedDom)) {\n purifiedDom = this.replace(purifiedDom);\n }\n purifiedDom = purifiedDom.replace(/(?:#|%23)$/, '')\n .replace(/(?<!(?:#|%23).*)(?:\\?|%3F)$/, '');\n return encodeURI(purifiedDom);\n }\n\n /**\n * sanitize URL\n * NOTE: `data` and `file` schemes must be explicitly allowed\n * `blob` URLs should be converted to `data` URLs\n * `javascript` and `vbscript` schemes can not be allowed\n * @param {string} url - URL\n * @param {object} [opt] - options\n * @param {Array.<string>} [opt.allow] - array of allowed schemes\n * @param {Array.<string>} [opt.deny] - array of denied schemes\n * @param {Array.<string>} [opt.only] - array of specific schemes to allow\n * @returns {?string} - sanitized URL\n */\n sanitize(url, opt) {\n if (this.#nest > HEX) {\n this.#nest = 0;\n throw new Error('Data URLs nested too deeply.');\n }\n const { allow, deny, only, debug = false } = opt ?? {};\n const schemeMap = new Map([\n ['blob', false],\n ['data', false],\n ['file', false],\n ['javascrpt', false],\n ['vbscript', false]\n ]);\n const tempScheme = new Set();\n let restrictScheme = false;\n if (Array.isArray(only) && only.length) {\n const schemes = super.get();\n for (const item of schemes) {\n schemeMap.set(item, false);\n }\n const items = Object.values(only);\n for (let item of items) {\n if (isString(item)) {\n item = item.trim();\n if (!REG_SCRIPT_BLOB.test(item)) {\n if (super.has(item)) {\n schemeMap.set(item, true);\n } else {\n try {\n super.add(item);\n } catch (e) {\n const msg = `Failed to add scheme '${item}' in 'only' list.`;\n logDebug(debug, msg, e);\n }\n if (super.has(item)) {\n schemeMap.set(item, true);\n tempScheme.add(item);\n }\n }\n if (!restrictScheme && schemeMap.has(item)) {\n restrictScheme = schemeMap.get(item);\n }\n }\n }\n }\n } else {\n if (Array.isArray(allow) && allow.length) {\n const items = Object.values(allow);\n for (let item of items) {\n if (isString(item)) {\n item = item.trim();\n if (!REG_SCRIPT_BLOB.test(item)) {\n if (super.has(item)) {\n schemeMap.set(item, true);\n } else {\n try {\n super.add(item);\n } catch (e) {\n const msg = `Failed to add scheme '${item}' in 'allow' list.`;\n logDebug(debug, msg, e);\n }\n if (super.has(item)) {\n schemeMap.set(item, true);\n tempScheme.add(item);\n }\n }\n }\n }\n }\n }\n if (Array.isArray(deny) && deny.length) {\n const items = Object.values(deny);\n for (let item of items) {\n if (isString(item)) {\n item = item.trim();\n if (item) {\n schemeMap.set(item, false);\n }\n }\n }\n }\n }\n let sanitizedUrl;\n if (super.verify(url)) {\n const { hash, href, pathname, protocol, search } = new URL(url);\n const scheme = protocol.replace(/:$/, '');\n const schemeParts = scheme.split('+');\n let bool;\n if (restrictScheme) {\n bool = schemeParts.every(s => schemeMap.get(s));\n } else {\n for (const [key, value] of schemeMap.entries()) {\n bool = value || (scheme !== key && schemeParts.every(s => s !== key));\n if (!bool) {\n break;\n }\n }\n }\n if (bool) {\n const isDataUrl = schemeParts.includes('data');\n let finalize;\n let urlToSanitize = href;\n if (isDataUrl) {\n const [mediaType, ...dataParts] = pathname.split(',');\n const data = `${dataParts.join(',')}${search}${hash}`;\n const mediaTypes = mediaType.split(';');\n const isBase64 = mediaTypes[mediaTypes.length - 1] === 'base64';\n let parsedData = data;\n if (isBase64) {\n parsedData = parseBase64(data);\n }\n try {\n const decodedData = parseURLEncodedNumCharRef(parsedData).trim();\n const { protocol: dataScheme } = new URL(decodedData);\n const dataSchemeParts = dataScheme.replace(/:$/, '').split('+');\n if (dataSchemeParts.some(s => REG_SCRIPT_BLOB.test(s))) {\n urlToSanitize = '';\n }\n } catch (e) {\n const msg = 'Failed to parse inner data URL protocol.';\n logDebug(debug, msg, e);\n }\n const containsDataUrl = REG_DATA_URL.test(parsedData);\n if (parsedData !== data || containsDataUrl) {\n if (containsDataUrl) {\n parsedData = this.replace(parsedData);\n } else if (this.#recurse.has(url)) {\n this.#recurse.delete(url);\n } else {\n finalize = true;\n }\n } else if (this.#recurse.has(url)) {\n this.#recurse.delete(url);\n } else {\n finalize = true;\n }\n if (!mediaType || REG_MIME_DOM.test(mediaType)) {\n parsedData = this.purify(parsedData);\n }\n if (urlToSanitize && parsedData) {\n if (isBase64 && parsedData !== data) {\n mediaTypes.pop();\n }\n urlToSanitize = `${scheme}:${mediaTypes.join(';')},${parsedData}`;\n } else {\n urlToSanitize = '';\n }\n } else {\n finalize = true;\n }\n if (!isDataUrl && REG_TAG_QUOT.test(urlToSanitize)) {\n const item = REG_TAG_QUOT.exec(urlToSanitize);\n const { index } = item;\n urlToSanitize =\n urlToSanitize.substring(0, index).replace(/[?&]$/, '');\n }\n if (urlToSanitize) {\n sanitizedUrl =\n urlToSanitize.replace(/%26/g, escapeURLEncodedHTMLChars);\n if (finalize) {\n this.#nest = 0;\n }\n } else {\n this.#nest = 0;\n }\n }\n if (tempScheme.size) {\n tempScheme.forEach(item => {\n super.remove(item);\n });\n }\n }\n return sanitizedUrl || null;\n }\n\n /**\n * parse sanitized URL\n * @param {string} url - URL\n * @param {object} [opt] - options\n * @param {Array.<string>} [opt.allow] - array of allowed schemes\n * @param {Array.<string>} [opt.deny] - array of denied schemes\n * @param {Array.<string>} [opt.only] - array of specific schemes to allow\n * @returns {ParsedURL} - result with additional props based on URL API\n */\n parse(url, opt) {\n if (!isString(url)) {\n throw new TypeError(`Expected String but got ${getType(url)}.`);\n }\n const parsedUrl = new Map([\n ['input', url]\n ]);\n let sanitizedUrl;\n if (this.verify(url)) {\n const { protocol } = new URL(url);\n if (protocol === 'blob:') {\n sanitizedUrl = url;\n } else {\n sanitizedUrl = this.sanitize(url, opt ?? {\n allow: ['data', 'file']\n });\n }\n }\n if (sanitizedUrl) {\n const urlObj = new URL(sanitizedUrl);\n const { pathname, protocol } = urlObj;\n const schemeParts = protocol.replace(/:$/, '').split('+');\n const isDataUrl = schemeParts.includes('data');\n parsedUrl.set('valid', true);\n if (isDataUrl) {\n const dataUrl = new Map();\n const [mediaType, ...dataParts] = pathname.split(',');\n const data = `${dataParts.join(',')}`;\n const mediaTypes = mediaType.split(';');\n const isBase64 = mediaTypes[mediaTypes.length - 1] === 'base64';\n if (isBase64) {\n mediaTypes.pop();\n }\n dataUrl.set('mime', mediaTypes.join(';'));\n dataUrl.set('base64', isBase64);\n dataUrl.set('data', data);\n parsedUrl.set('data', Object.fromEntries(dataUrl));\n } else {\n parsedUrl.set('data', null);\n }\n for (const key in urlObj) {\n const value = urlObj[key];\n if (isString(value)) {\n parsedUrl.set(key, value);\n }\n }\n } else {\n parsedUrl.set('valid', false);\n }\n return Object.fromEntries(parsedUrl);\n }\n\n /**\n * reset sanitizer\n * @returns {void}\n */\n reset() {\n super.reset();\n this.#nest = 0;\n this.#recurse.clear();\n }\n}\nexport { URLSanitizer };\n\n/* aliases and async wrappers */\n/* instance */\nconst urlSanitizer = new URLSanitizer();\n\n/**\n * sanitize URL async\n * NOTE: `blob`, `data` and `file` schemes must be explicitly allowed\n * given a `blob` URL, returns a sanitized `data` URL\n * @param {string} url - URL\n * @param {object} [opt] - options\n * @param {Array.<string>} [opt.allow] - array of allowed schemes\n * @param {Array.<string>} [opt.deny] - array of denied schemes\n * @param {Array.<string>} [opt.only] - array of specific schemes to allow\n * @returns {Promise.<?string>} - sanitized URL\n */\nexport const sanitizeURL = async (url, opt = {\n allow: [],\n deny: [],\n only: [],\n debug: false,\n maxBlobSize: MAX_BLOB_SIZE\n}) => {\n const isDebug = !!opt?.debug;\n const maxBlobSize = Number.isInteger(opt?.maxBlobSize) && opt.maxBlobSize > 0\n ? opt.maxBlobSize\n : MAX_BLOB_SIZE;\n let res;\n if (url && isString(url)) {\n let scheme;\n try {\n const { protocol } = new URL(url);\n scheme = protocol.replace(/:$/, '');\n } catch (e) {\n logDebug(isDebug, `Invalid URL input format: ${url}`, e);\n }\n if (scheme === 'blob') {\n const { allow, deny, only } = opt;\n if ((Array.isArray(allow) && allow.includes('blob') &&\n !(Array.isArray(deny) && deny.includes('blob'))) ||\n (Array.isArray(only) && only.includes('blob'))) {\n let data;\n try {\n data = await fetch(url)\n .then(r => r.blob())\n .then(b => createDataURLFromBlob(b, maxBlobSize));\n } catch (e) {\n const msg = `Failed to fetch and convert blob URL: ${url}`;\n logDebug(isDebug, msg, e);\n }\n if (data) {\n if (Array.isArray(only)) {\n if (!only.includes('data')) {\n only.push('data');\n }\n } else if (Array.isArray(allow)) {\n if (!allow.includes('data')) {\n allow.push('data');\n }\n if (Array.isArray(deny) && deny.includes('data')) {\n const i = deny.indexOf('data');\n deny.splice(i, 1);\n }\n }\n res = urlSanitizer.sanitize(data, opt);\n }\n }\n URL.revokeObjectURL(url);\n } else if (scheme) {\n res = urlSanitizer.sanitize(url, opt);\n }\n }\n return res || null;\n};\n\n/**\n * sanitize URL sync\n * NOTE: `data` and `file` schemes must be explicitly allowed\n * `blob` scheme returns `null`\n * @param {string} url - URL\n * @param {object} [opt] - options\n * @param {Array.<string>} [opt.allow] - array of allowed schemes\n * @param {Array.<string>} [opt.deny] - array of denied schemes\n * @param {Array.<string>} [opt.only] - array of specific schemes to allow\n * @returns {?string} - sanitized URL\n */\nexport const sanitizeURLSync = (url, opt) => {\n let res;\n if (url && isString(url)) {\n let scheme;\n try {\n const { protocol } = new URL(url);\n scheme = protocol.replace(/:$/, '');\n } catch (e) {\n const msg = `Failed to parse URL: ${url}`;\n logDebug(opt?.debug, msg, e);\n }\n if (scheme === 'blob') {\n URL.revokeObjectURL(url);\n } else if (scheme) {\n res = urlSanitizer.sanitize(url, opt);\n }\n }\n return res || null;\n};\n\n/**\n * parse URL async\n * @param {string} url - URL\n * @returns {Promise.<ParsedURL>} - result\n */\nexport const parseURL = async url => {\n const res = urlSanitizer.parse(url);\n return res;\n};\n\n/**\n * parse URL sync\n * @param {string} url - URL\n * @returns {ParsedURL} - result\n */\nexport const parseURLSync = url => urlSanitizer.parse(url);\n\n/**\n * is URI async\n * @param {string} uri - URI\n * @returns {Promise.<boolean>} - result\n */\nexport const isURI = async uri => {\n const res = urlSanitizer.verify(uri);\n return res;\n};\n\n/**\n * is URI sync\n * @param {string} uri - URI\n * @returns {boolean} - result\n */\nexport const isURISync = uri => urlSanitizer.verify(uri);\n\n/* export instance */\nexport default urlSanitizer;\n"],
5
+ "mappings": "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",
6
+ "names": ["domPurify", "args", "msg", "REG_B64", "REG_DATA_URL", "REG_DATA_URL_B64", "REG_DATA_URL_G", "REG_NUM_REF", "REG_MIME_DOM", "REG_SCHEME", "REG_SCHEME_EXT", "REG_SCRIPT", "REG_SCRIPT_BLOB", "REG_TAG_QUOT", "REG_URL_ENC", "getType", "o", "isString", "FileReader", "text_chars_default", "uri_schemes_default", "getURLEncodedString", "str", "isString", "getType", "chars", "ch", "escapeURLEncodedHTMLChars", "REG_URL_ENC", "amp", "num", "lt", "gt", "quot", "apos", "escapedChar", "parseBase64", "data", "REG_B64", "bin", "uint8arr", "c", "textCharCodes", "text_chars_default", "parsedData", "parseURLEncodedNumCharRef", "nest", "res", "items", "REG_NUM_REF", "item", "numCharRef", "value", "index", "preNum", "postNum", "createDataURLFromBlob", "blob", "maxBlobSize", "resolve", "reject", "reader", "FileReader", "URISchemes", "#schemes", "uri_schemes_default", "scheme", "REG_SCRIPT", "REG_SCHEME", "uri", "protocol", "schemeParts", "REG_SCHEME_EXT", "s", "logDebug", "isDebug", "message", "error", "URLSanitizer", "URISchemes", "#nest", "#recurse", "data", "isString", "getType", "replacedData", "REG_DATA_URL", "items", "REG_DATA_URL_G", "item", "dataUrl", "REG_DATA_URL_B64", "parsedDataUrl", "index", "preDataUrl", "postDataUrl", "dom", "purifiedDom", "domPurify", "url", "opt", "allow", "deny", "only", "debug", "schemeMap", "tempScheme", "restrictScheme", "schemes", "REG_SCRIPT_BLOB", "e", "msg", "sanitizedUrl", "hash", "href", "pathname", "protocol", "search", "scheme", "schemeParts", "bool", "s", "key", "value", "isDataUrl", "finalize", "urlToSanitize", "mediaType", "dataParts", "mediaTypes", "isBase64", "parsedData", "parseBase64", "decodedData", "parseURLEncodedNumCharRef", "dataScheme", "containsDataUrl", "REG_MIME_DOM", "REG_TAG_QUOT", "escapeURLEncodedHTMLChars", "parsedUrl", "urlObj", "urlSanitizer", "URLSanitizer", "sanitizeURL", "url", "opt", "isDebug", "maxBlobSize", "res", "isString", "scheme", "protocol", "e", "logDebug", "allow", "deny", "only", "data", "r", "b", "createDataURLFromBlob", "msg", "i", "sanitizeURLSync", "parseURL", "parseURLSync", "isURI", "uri", "isURISync", "sanitizer_default"]
7
7
  }
@@ -1,5 +1,6 @@
1
- var{entries:Zt,setPrototypeOf:zt,isFrozen:Sn,getPrototypeOf:wn,getOwnPropertyDescriptor:xn}=Object,{freeze:M,seal:z,create:de}=Object,{apply:it,construct:at}=typeof Reflect<"u"&&Reflect;M||(M=function(t){return t});z||(z=function(t){return t});it||(it=function(t,o){for(var r=arguments.length,a=new Array(r>2?r-2:0),c=2;c<r;c++)a[c-2]=arguments[c];return t.apply(o,a)});at||(at=function(t){for(var o=arguments.length,r=new Array(o>1?o-1:0),a=1;a<o;a++)r[a-1]=arguments[a];return new t(...r)});var Re=R(Array.prototype.forEach),Ln=R(Array.prototype.lastIndexOf),Gt=R(Array.prototype.pop),be=R(Array.prototype.push),On=R(Array.prototype.splice),N=Array.isArray,xe=R(String.prototype.toLowerCase),tt=R(String.prototype.toString),Ht=R(String.prototype.match),ue=R(String.prototype.replace),Bt=R(String.prototype.indexOf),Dn=R(String.prototype.trim),In=R(Number.prototype.toString),Cn=R(Boolean.prototype.toString),$t=typeof BigInt>"u"?null:R(BigInt.prototype.toString),Wt=typeof Symbol>"u"?null:R(Symbol.prototype.toString),E=R(Object.prototype.hasOwnProperty),Se=R(Object.prototype.toString),O=R(RegExp.prototype.test),Me=Nn(TypeError);function R(n){return function(t){t instanceof RegExp&&(t.lastIndex=0);for(var o=arguments.length,r=new Array(o>1?o-1:0),a=1;a<o;a++)r[a-1]=arguments[a];return it(n,t,r)}}function Nn(n){return function(){for(var t=arguments.length,o=new Array(t),r=0;r<t;r++)o[r]=arguments[r];return at(n,o)}}function p(n,t){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:xe;if(zt&&zt(n,null),!N(t))return n;let r=t.length;for(;r--;){let a=t[r];if(typeof a=="string"){let c=o(a);c!==a&&(Sn(t)||(t[r]=c),a=c)}n[a]=!0}return n}function Mn(n){for(let t=0;t<n.length;t++)E(n,t)||(n[t]=null);return n}function U(n){let t=de(null);for(let[o,r]of Zt(n))E(n,o)&&(N(r)?t[o]=Mn(r):r&&typeof r=="object"&&r.constructor===Object?t[o]=U(r):t[o]=r);return t}function vn(n){switch(typeof n){case"string":return n;case"number":return In(n);case"boolean":return Cn(n);case"bigint":return $t?$t(n):"0";case"symbol":return Wt?Wt(n):"Symbol()";case"undefined":return Se(n);case"function":case"object":{if(n===null)return Se(n);let t=n,o=he(t,"toString");if(typeof o=="function"){let r=o(t);return typeof r=="string"?r:Se(r)}return Se(n)}default:return Se(n)}}function he(n,t){for(;n!==null;){let r=xn(n,t);if(r){if(r.get)return R(r.get);if(typeof r.value=="function")return R(r.value)}n=wn(n)}function o(){return null}return o}function Un(n){try{return O(n,""),!0}catch{return!1}}var jt=M(["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"]),nt=M(["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"]),st=M(["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"]),Pn=M(["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"]),ot=M(["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"]),kn=M(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Yt=M(["#text"]),Xt=M(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","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"]),rt=M(["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","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","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-rendering","textlength","type","u1","u2","unicode","values","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"]),qt=M(["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"]),ve=M(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Fn=z(/\{\{[\w\W]*|[\w\W]*\}\}/gm),zn=z(/<%[\w\W]*|[\w\W]*%>/gm),Gn=z(/\$\{[\w\W]*/gm),Hn=z(/^data-[\-\w.\u00B7-\uFFFF]+$/),Bn=z(/^aria-[\-\w]+$/),Qt=z(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),$n=z(/^(?:\w+script|data):/i),Wn=z(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Jt=z(/^html$/i),jn=z(/^[a-z][.\w]*(-[.\w]+)+$/i),Vt=Object.freeze({__proto__:null,ARIA_ATTR:Bn,ATTR_WHITESPACE:Wn,CUSTOM_ELEMENT:jn,DATA_ATTR:Hn,DOCTYPE_NAME:Jt,ERB_EXPR:zn,IS_ALLOWED_URI:Qt,IS_SCRIPT_OR_DATA:$n,MUSTACHE_EXPR:Fn,TMPLIT_EXPR:Gn}),we={element:1,text:3,progressingInstruction:7,comment:8,document:9},Yn=function(){return typeof window>"u"?null:window},Xn=function(t,o){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let r=null,a="data-tt-policy-suffix";o&&o.hasAttribute(a)&&(r=o.getAttribute(a));let c="dompurify"+(r?"#"+r:"");try{return t.createPolicy(c,{createHTML(f){return f},createScriptURL(f){return f}})}catch{return console.warn("TrustedTypes policy "+c+" could not be created."),null}},Kt=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function en(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Yn(),t=l=>en(l);if(t.version="3.4.2",t.removed=[],!n||!n.document||n.document.nodeType!==we.document||!n.Element)return t.isSupported=!1,t;let{document:o}=n,r=o,a=r.currentScript,{DocumentFragment:c,HTMLTemplateElement:f,Node:u,Element:T,NodeFilter:I,NamedNodeMap:g=n.NamedNodeMap||n.MozNamedAttrMap,HTMLFormElement:m,DOMParser:_,trustedTypes:q}=n,k=T.prototype,K=he(k,"cloneNode"),ge=he(k,"remove"),re=he(k,"nextSibling"),G=he(k,"childNodes"),H=he(k,"parentNode");if(typeof f=="function"){let l=o.createElement("template");l.content&&l.content.ownerDocument&&(o=l.content.ownerDocument)}let d,B="",{implementation:J,createNodeIterator:ie,createDocumentFragment:ae,getElementsByTagName:Le}=o,{importNode:P}=r,S=Kt();t.isSupported=typeof Zt=="function"&&typeof H=="function"&&J&&J.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:ee,ERB_EXPR:le,TMPLIT_EXPR:Te,DATA_ATTR:Ge,ARIA_ATTR:dn,IS_SCRIPT_OR_DATA:hn,ATTR_WHITESPACE:dt,CUSTOM_ELEMENT:gn}=Vt,{IS_ALLOWED_URI:ht}=Vt,w=null,gt=p({},[...jt,...nt,...st,...ot,...Yt]),L=null,Tt=p({},[...Xt,...rt,...qt,...ve]),A=Object.seal(de(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Ee=null,Oe=null,Z=Object.seal(de(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),Et=!0,He=!0,_t=!1,At=!0,te=!1,_e=!0,ne=!1,Be=!1,$e=!1,ce=!1,De=!1,Ie=!1,yt=!0,Rt=!1,bt="user-content-",We=!0,Ae=!1,pe={},j=null,je=p({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),St=null,wt=p({},["audio","video","img","source","image","track"]),Ye=null,xt=p({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Ce="http://www.w3.org/1998/Math/MathML",Ne="http://www.w3.org/2000/svg",Y="http://www.w3.org/1999/xhtml",fe=Y,Xe=!1,qe=null,Tn=p({},[Ce,Ne,Y],tt),Ve=p({},["mi","mo","mn","ms","mtext"]),Ke=p({},["annotation-xml"]),En=p({},["title","style","font","a","script"]),ye=null,_n=["application/xhtml+xml","text/html"],An="text/html",b=null,me=null,yn=o.createElement("form"),Lt=function(e){return e instanceof RegExp||e instanceof Function},Ze=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(me&&me===e)return;(!e||typeof e!="object")&&(e={}),e=U(e),ye=_n.indexOf(e.PARSER_MEDIA_TYPE)===-1?An:e.PARSER_MEDIA_TYPE,b=ye==="application/xhtml+xml"?tt:xe,w=E(e,"ALLOWED_TAGS")&&N(e.ALLOWED_TAGS)?p({},e.ALLOWED_TAGS,b):gt,L=E(e,"ALLOWED_ATTR")&&N(e.ALLOWED_ATTR)?p({},e.ALLOWED_ATTR,b):Tt,qe=E(e,"ALLOWED_NAMESPACES")&&N(e.ALLOWED_NAMESPACES)?p({},e.ALLOWED_NAMESPACES,tt):Tn,Ye=E(e,"ADD_URI_SAFE_ATTR")&&N(e.ADD_URI_SAFE_ATTR)?p(U(xt),e.ADD_URI_SAFE_ATTR,b):xt,St=E(e,"ADD_DATA_URI_TAGS")&&N(e.ADD_DATA_URI_TAGS)?p(U(wt),e.ADD_DATA_URI_TAGS,b):wt,j=E(e,"FORBID_CONTENTS")&&N(e.FORBID_CONTENTS)?p({},e.FORBID_CONTENTS,b):je,Ee=E(e,"FORBID_TAGS")&&N(e.FORBID_TAGS)?p({},e.FORBID_TAGS,b):U({}),Oe=E(e,"FORBID_ATTR")&&N(e.FORBID_ATTR)?p({},e.FORBID_ATTR,b):U({}),pe=E(e,"USE_PROFILES")?e.USE_PROFILES&&typeof e.USE_PROFILES=="object"?U(e.USE_PROFILES):e.USE_PROFILES:!1,Et=e.ALLOW_ARIA_ATTR!==!1,He=e.ALLOW_DATA_ATTR!==!1,_t=e.ALLOW_UNKNOWN_PROTOCOLS||!1,At=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,te=e.SAFE_FOR_TEMPLATES||!1,_e=e.SAFE_FOR_XML!==!1,ne=e.WHOLE_DOCUMENT||!1,ce=e.RETURN_DOM||!1,De=e.RETURN_DOM_FRAGMENT||!1,Ie=e.RETURN_TRUSTED_TYPE||!1,$e=e.FORCE_BODY||!1,yt=e.SANITIZE_DOM!==!1,Rt=e.SANITIZE_NAMED_PROPS||!1,We=e.KEEP_CONTENT!==!1,Ae=e.IN_PLACE||!1,ht=Un(e.ALLOWED_URI_REGEXP)?e.ALLOWED_URI_REGEXP:Qt,fe=typeof e.NAMESPACE=="string"?e.NAMESPACE:Y,Ve=E(e,"MATHML_TEXT_INTEGRATION_POINTS")&&e.MATHML_TEXT_INTEGRATION_POINTS&&typeof e.MATHML_TEXT_INTEGRATION_POINTS=="object"?U(e.MATHML_TEXT_INTEGRATION_POINTS):p({},["mi","mo","mn","ms","mtext"]),Ke=E(e,"HTML_INTEGRATION_POINTS")&&e.HTML_INTEGRATION_POINTS&&typeof e.HTML_INTEGRATION_POINTS=="object"?U(e.HTML_INTEGRATION_POINTS):p({},["annotation-xml"]);let s=E(e,"CUSTOM_ELEMENT_HANDLING")&&e.CUSTOM_ELEMENT_HANDLING&&typeof e.CUSTOM_ELEMENT_HANDLING=="object"?U(e.CUSTOM_ELEMENT_HANDLING):de(null);if(A=de(null),E(s,"tagNameCheck")&&Lt(s.tagNameCheck)&&(A.tagNameCheck=s.tagNameCheck),E(s,"attributeNameCheck")&&Lt(s.attributeNameCheck)&&(A.attributeNameCheck=s.attributeNameCheck),E(s,"allowCustomizedBuiltInElements")&&typeof s.allowCustomizedBuiltInElements=="boolean"&&(A.allowCustomizedBuiltInElements=s.allowCustomizedBuiltInElements),te&&(He=!1),De&&(ce=!0),pe&&(w=p({},Yt),L=de(null),pe.html===!0&&(p(w,jt),p(L,Xt)),pe.svg===!0&&(p(w,nt),p(L,rt),p(L,ve)),pe.svgFilters===!0&&(p(w,st),p(L,rt),p(L,ve)),pe.mathMl===!0&&(p(w,ot),p(L,qt),p(L,ve))),Z.tagCheck=null,Z.attributeCheck=null,E(e,"ADD_TAGS")&&(typeof e.ADD_TAGS=="function"?Z.tagCheck=e.ADD_TAGS:N(e.ADD_TAGS)&&(w===gt&&(w=U(w)),p(w,e.ADD_TAGS,b))),E(e,"ADD_ATTR")&&(typeof e.ADD_ATTR=="function"?Z.attributeCheck=e.ADD_ATTR:N(e.ADD_ATTR)&&(L===Tt&&(L=U(L)),p(L,e.ADD_ATTR,b))),E(e,"ADD_URI_SAFE_ATTR")&&N(e.ADD_URI_SAFE_ATTR)&&p(Ye,e.ADD_URI_SAFE_ATTR,b),E(e,"FORBID_CONTENTS")&&N(e.FORBID_CONTENTS)&&(j===je&&(j=U(j)),p(j,e.FORBID_CONTENTS,b)),E(e,"ADD_FORBID_CONTENTS")&&N(e.ADD_FORBID_CONTENTS)&&(j===je&&(j=U(j)),p(j,e.ADD_FORBID_CONTENTS,b)),We&&(w["#text"]=!0),ne&&p(w,["html","head","body"]),w.table&&(p(w,["tbody"]),delete Ee.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!="function")throw Me('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Me('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');d=e.TRUSTED_TYPES_POLICY,B=d.createHTML("")}else d===void 0&&(d=Xn(q,a)),d!==null&&typeof B=="string"&&(B=d.createHTML(""));M&&M(e),me=e},Ot=p({},[...nt,...st,...Pn]),Dt=p({},[...ot,...kn]),Rn=function(e){let s=H(e);(!s||!s.tagName)&&(s={namespaceURI:fe,tagName:"template"});let i=xe(e.tagName),h=xe(s.tagName);return qe[e.namespaceURI]?e.namespaceURI===Ne?s.namespaceURI===Y?i==="svg":s.namespaceURI===Ce?i==="svg"&&(h==="annotation-xml"||Ve[h]):!!Ot[i]:e.namespaceURI===Ce?s.namespaceURI===Y?i==="math":s.namespaceURI===Ne?i==="math"&&Ke[h]:!!Dt[i]:e.namespaceURI===Y?s.namespaceURI===Ne&&!Ke[h]||s.namespaceURI===Ce&&!Ve[h]?!1:!Dt[i]&&(En[i]||!Ot[i]):!!(ye==="application/xhtml+xml"&&qe[e.namespaceURI]):!1},$=function(e){be(t.removed,{element:e});try{H(e).removeChild(e)}catch{ge(e)}},se=function(e,s){try{be(t.removed,{attribute:s.getAttributeNode(e),from:s})}catch{be(t.removed,{attribute:null,from:s})}if(s.removeAttribute(e),e==="is")if(ce||De)try{$(s)}catch{}else try{s.setAttribute(e,"")}catch{}},It=function(e){let s=null,i=null;if($e)e="<remove></remove>"+e;else{let y=Ht(e,/^[\r\n\t ]+/);i=y&&y[0]}ye==="application/xhtml+xml"&&fe===Y&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");let h=d?d.createHTML(e):e;if(fe===Y)try{s=new _().parseFromString(h,ye)}catch{}if(!s||!s.documentElement){s=J.createDocument(fe,"template",null);try{s.documentElement.innerHTML=Xe?B:h}catch{}}let C=s.body||s.documentElement;return e&&i&&C.insertBefore(o.createTextNode(i),C.childNodes[0]||null),fe===Y?Le.call(s,ne?"html":"body")[0]:ne?s.documentElement:C},Ct=function(e){return ie.call(e.ownerDocument||e,e,I.SHOW_ELEMENT|I.SHOW_COMMENT|I.SHOW_TEXT|I.SHOW_PROCESSING_INSTRUCTION|I.SHOW_CDATA_SECTION,null)},Qe=function(e){return e instanceof m&&(typeof e.nodeName!="string"||typeof e.textContent!="string"||typeof e.removeChild!="function"||!(e.attributes instanceof g)||typeof e.removeAttribute!="function"||typeof e.setAttribute!="function"||typeof e.namespaceURI!="string"||typeof e.insertBefore!="function"||typeof e.hasChildNodes!="function")},Je=function(e){return typeof u=="function"&&e instanceof u};function V(l,e,s){Re(l,i=>{i.call(t,e,s,me)})}let Nt=function(e){let s=null;if(V(S.beforeSanitizeElements,e,null),Qe(e))return $(e),!0;let i=b(e.nodeName);if(V(S.uponSanitizeElement,e,{tagName:i,allowedTags:w}),_e&&e.hasChildNodes()&&!Je(e.firstElementChild)&&O(/<[/\w!]/g,e.innerHTML)&&O(/<[/\w!]/g,e.textContent)||_e&&e.namespaceURI===Y&&i==="style"&&Je(e.firstElementChild)||e.nodeType===we.progressingInstruction||_e&&e.nodeType===we.comment&&O(/<[/\w]/g,e.data))return $(e),!0;if(Ee[i]||!(Z.tagCheck instanceof Function&&Z.tagCheck(i))&&!w[i]){if(!Ee[i]&&vt(i)&&(A.tagNameCheck instanceof RegExp&&O(A.tagNameCheck,i)||A.tagNameCheck instanceof Function&&A.tagNameCheck(i)))return!1;if(We&&!j[i]){let h=H(e)||e.parentNode,C=G(e)||e.childNodes;if(C&&h){let y=C.length;for(let v=y-1;v>=0;--v){let F=K(C[v],!0);h.insertBefore(F,re(e))}}}return $(e),!0}return e instanceof T&&!Rn(e)||(i==="noscript"||i==="noembed"||i==="noframes")&&O(/<\/no(script|embed|frames)/i,e.innerHTML)?($(e),!0):(te&&e.nodeType===we.text&&(s=e.textContent,Re([ee,le,Te],h=>{s=ue(s,h," ")}),e.textContent!==s&&(be(t.removed,{element:e.cloneNode()}),e.textContent=s)),V(S.afterSanitizeElements,e,null),!1)},Mt=function(e,s,i){if(Oe[s]||yt&&(s==="id"||s==="name")&&(i in o||i in yn))return!1;let h=L[s]||Z.attributeCheck instanceof Function&&Z.attributeCheck(s,e);if(!(He&&!Oe[s]&&O(Ge,s))){if(!(Et&&O(dn,s))){if(!h||Oe[s]){if(!(vt(e)&&(A.tagNameCheck instanceof RegExp&&O(A.tagNameCheck,e)||A.tagNameCheck instanceof Function&&A.tagNameCheck(e))&&(A.attributeNameCheck instanceof RegExp&&O(A.attributeNameCheck,s)||A.attributeNameCheck instanceof Function&&A.attributeNameCheck(s,e))||s==="is"&&A.allowCustomizedBuiltInElements&&(A.tagNameCheck instanceof RegExp&&O(A.tagNameCheck,i)||A.tagNameCheck instanceof Function&&A.tagNameCheck(i))))return!1}else if(!Ye[s]){if(!O(ht,ue(i,dt,""))){if(!((s==="src"||s==="xlink:href"||s==="href")&&e!=="script"&&Bt(i,"data:")===0&&St[e])){if(!(_t&&!O(hn,ue(i,dt,"")))){if(i)return!1}}}}}}return!0},bn=p({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),vt=function(e){return!bn[xe(e)]&&O(gn,e)},Ut=function(e){V(S.beforeSanitizeAttributes,e,null);let{attributes:s}=e;if(!s||Qe(e))return;let i={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:L,forceKeepAttr:void 0},h=s.length;for(;h--;){let C=s[h],{name:y,namespaceURI:v,value:F}=C,W=b(y),et=F,x=y==="value"?et:Dn(et);if(i.attrName=W,i.attrValue=x,i.keepAttr=!0,i.forceKeepAttr=void 0,V(S.uponSanitizeAttribute,e,i),x=i.attrValue,Rt&&(W==="id"||W==="name")&&Bt(x,bt)!==0&&(se(y,e),x=bt+x),_e&&O(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,x)){se(y,e);continue}if(W==="attributename"&&Ht(x,"href")){se(y,e);continue}if(i.forceKeepAttr)continue;if(!i.keepAttr){se(y,e);continue}if(!At&&O(/\/>/i,x)){se(y,e);continue}te&&Re([ee,le,Te],Ft=>{x=ue(x,Ft," ")});let kt=b(e.nodeName);if(!Mt(kt,W,x)){se(y,e);continue}if(d&&typeof q=="object"&&typeof q.getAttributeType=="function"&&!v)switch(q.getAttributeType(kt,W)){case"TrustedHTML":{x=d.createHTML(x);break}case"TrustedScriptURL":{x=d.createScriptURL(x);break}}if(x!==et)try{v?e.setAttributeNS(v,y,x):e.setAttribute(y,x),Qe(e)?$(e):Gt(t.removed)}catch{se(y,e)}}V(S.afterSanitizeAttributes,e,null)},Pt=function(e){let s=null,i=Ct(e);for(V(S.beforeSanitizeShadowDOM,e,null);s=i.nextNode();)V(S.uponSanitizeShadowNode,s,null),Nt(s),Ut(s),s.content instanceof c&&Pt(s.content);V(S.afterSanitizeShadowDOM,e,null)};return t.sanitize=function(l){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},s=null,i=null,h=null,C=null;if(Xe=!l,Xe&&(l="<!-->"),typeof l!="string"&&!Je(l)&&(l=vn(l),typeof l!="string"))throw Me("dirty is not a string, aborting");if(!t.isSupported)return l;if(Be||Ze(e),t.removed=[],typeof l=="string"&&(Ae=!1),Ae){let F=l.nodeName;if(typeof F=="string"){let W=b(F);if(!w[W]||Ee[W])throw Me("root node is forbidden and cannot be sanitized in-place")}}else if(l instanceof u)s=It("<!---->"),i=s.ownerDocument.importNode(l,!0),i.nodeType===we.element&&i.nodeName==="BODY"||i.nodeName==="HTML"?s=i:s.appendChild(i);else{if(!ce&&!te&&!ne&&l.indexOf("<")===-1)return d&&Ie?d.createHTML(l):l;if(s=It(l),!s)return ce?null:Ie?B:""}s&&$e&&$(s.firstChild);let y=Ct(Ae?l:s);for(;h=y.nextNode();)Nt(h),Ut(h),h.content instanceof c&&Pt(h.content);if(Ae)return l;if(ce){if(te){s.normalize();let F=s.innerHTML;Re([ee,le,Te],W=>{F=ue(F,W," ")}),s.innerHTML=F}if(De)for(C=ae.call(s.ownerDocument);s.firstChild;)C.appendChild(s.firstChild);else C=s;return(L.shadowroot||L.shadowrootmode)&&(C=P.call(r,C,!0)),C}let v=ne?s.outerHTML:s.innerHTML;return ne&&w["!doctype"]&&s.ownerDocument&&s.ownerDocument.doctype&&s.ownerDocument.doctype.name&&O(Jt,s.ownerDocument.doctype.name)&&(v="<!DOCTYPE "+s.ownerDocument.doctype.name+`>
2
- `+v),te&&Re([ee,le,Te],F=>{v=ue(v,F," ")}),d&&Ie?d.createHTML(v):v},t.setConfig=function(){let l=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Ze(l),Be=!0},t.clearConfig=function(){me=null,Be=!1},t.isValidAttribute=function(l,e,s){me||Ze({});let i=b(l),h=b(e);return Mt(i,h,s)},t.addHook=function(l,e){typeof e=="function"&&be(S[l],e)},t.removeHook=function(l,e){if(e!==void 0){let s=Ln(S[l],e);return s===-1?void 0:On(S[l],s,1)[0]}return Gt(S[l])},t.removeHooks=function(l){S[l]=[]},t.removeAllHooks=function(){S=Kt()},t}var lt=en();var tn=/^[\w+/=-]+$/;var Ue=/data:[\w#&+./;=-]*,/,ct=/data:[\w#&+./;=^]*base64,[\w+/=-]+/i,nn=/data:[\w#&+./;=-]*,[^\x22]+/g,sn=/&#(x(?:00)?[\dA-F]{2}|0?\d{1,3});?/gi,on=/^(?:application\/(?:[\w#&.;-]+\+)?x|image\/svg\+x|text\/(?:ht|x))ml;?/;var rn=/^[a-z][\da-z+.-]*$/,an=/^(?:ext|web)\+[a-z]+$/,pt=/(?:java|vb)script/,Pe=/(?:java|vb)script|blob/,ft=/%(?:22|27|3C|3E)|[\x22\x27<>]/,ln=/^%[\dA-F]{2}$/i;var X=n=>Object.prototype.toString.call(n).slice(8,-1),D=n=>typeof n=="string"||n instanceof String;var{FileReader:cn}=globalThis;var ke=[7,8,9,10,11,12,13,27,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255];var Fe=["aaa","aaas","about","acap","acct","acd","acr","adiumxtra","adt","afp","afs","agtp","aim","amss","android","appdata","apt","ar","ari","ark","at","attachment","aw","barion","beshare","bitcoin","bitcoincash","bl","blob","bluetooth","bolo","brid","browserext","cabal","caip","calculator","callto","cap","cast","casts","chrome","chrome-extension","cid","coap","coaps","com-eventbrite-attendee","content","content-type","crid","cstr","cvs","dab","dat","data","dav","dhttp","diaspora","dict","did","dilithium3","dis","dlna-playcontainer","dlna-playsingle","dnp","dns","dntp","doi","donau","dpp","drm","dtmi","dtn","dvb","dvx","dweb","ed2k","eid","elsi","embedded","ens","esim","ethereum","example","facetime","feed","feedready","fido","file","finger","first-run-pen-experience","fish","fm","ftp","fuchsia-pkg","geo","gg","git","gitoid","gizmoproject","go","gopher","graph","gtalk","h323","ham","hcap","hcp","hs20","http","https","hxxp","hxxps","hydrazone","hyper","i0","iax","ibi","ibi-","icap","icon","ilstring","im","imap","info","iotdisco","ipfs","ipn","ipns","ipp","ipps","irc","irc6","ircs","iris","iris.beep","iris.lwz","iris.xpc","iris.xpcs","isostore","itms","jabber","jar","jms","keyparc","lastfm","lbry","ldap","ldaps","leaptofrogans","lid","linkid","lorawan","lpa","lvlt","machineProvisioningProgressReporter","magnet","mailto","maps","market","matrix","message","microsoft.windows.camera","microsoft.windows.camera.multipicker","microsoft.windows.camera.picker","mid","mms","mongodb","moz","moz-extension","mqtt","mqtts","ms-access","ms-appinstaller","ms-browser-extension","ms-calculator","ms-drive-to","ms-enrollment","ms-excel","ms-eyecontrolspeech","ms-gamebarservices","ms-gamingoverlay","ms-getoffice","ms-help","ms-infopath","ms-inputapp","ms-launchremotedesktop","ms-lockscreencomponent-config","ms-media-stream-id","ms-meetnow","ms-mixedrealitycapture","ms-mobileplans","ms-newsandinterests","ms-officeapp","ms-people","ms-personacard","ms-powerpoint","ms-project","ms-publisher","ms-recall","ms-remotedesktop","ms-remotedesktop-launch","ms-restoretabcompanion","ms-screenclip","ms-screensketch","ms-search","ms-search-repair","ms-secondary-screen-controller","ms-secondary-screen-setup","ms-settings","ms-settings-airplanemode","ms-settings-bluetooth","ms-settings-camera","ms-settings-cellular","ms-settings-cloudstorage","ms-settings-connectabledevices","ms-settings-displays-topology","ms-settings-emailandaccounts","ms-settings-language","ms-settings-location","ms-settings-lock","ms-settings-nfctransactions","ms-settings-notifications","ms-settings-power","ms-settings-privacy","ms-settings-proximity","ms-settings-screenrotation","ms-settings-wifi","ms-settings-workplace","ms-spd","ms-stickers","ms-sttoverlay","ms-transit-to","ms-useractivityset","ms-uup","ms-virtualtouchpad","ms-visio","ms-walk-to","ms-whiteboard","ms-whiteboard-cmd","ms-widgetboard","ms-widgets","ms-word","msnim","msrp","msrps","mss","mt","mtqp","mtrust","mumble","mupdate","mvn","mvrp","mvrps","news","nfs","ni","nih","nntp","notes","num","ocf","oid","onenote","onenote-cmd","opaquelocktoken","openid","openpgp4fpr","otpauth","palm","paparazzi","payto","pkcs11","platform","pop","pres","proxy","psyc","pttp","pwid","qb","query","quic-transport","redis","rediss","reload","res","resource","rmi","rsync","rtmfp","rtmp","rtsp","rtsps","rtspu","sarif","secondlife","secret-token","service","session","sftp","sgn","shc","shelter","sieve","simpleledger","simplex","sip","sips","skype","smb","smp","sms","smtp","snmp","soap.beep","soap.beeps","soldat","spacify","spiffe","spotify","ssb","ssh","starknet","steam","stun","stuns","submit","svn","swh","swid","swidpath","tag","taler","teamspeak","teapot","teapots","tel","teliaeid","telnet","tftp","things","thismessage","tip","tn3270","tool","turn","turns","tv","udp","unreal","upn","urn","ut2004","uuid-in-package","v-event","vemmi","ventrilo","ves","view-source","vnc","vscode","vscode-insiders","vsls","w3","wasm","wasm-js","wcr","web3","webcal","wifi","ws","wss","wtai","wyciwyg","xcompute","xcon","xcon-userid","xfire","xftp","xmlrpc.beep","xmlrpc.beeps","xmpp","xrcp","xri","ymsgr","z39.50r","z39.50s"];var pn=n=>{if(!D(n))throw new TypeError(`Expected String but got ${X(n)}.`);let t=[];for(let o of n)t.push(`%${o.charCodeAt(0).toString(16).toUpperCase()}`);return t.join("")},fn=n=>{D(n)&&ln.test(n)&&(n=n.toUpperCase());let[t,o,r,a,c,f]=["&","#","<",">",'"',"'"].map(pn),u;return n===t?u=`${t}amp;`:n===r?u=`${t}lt;`:n===a?u=`${t}gt;`:n===c?u=`${t}quot;`:n===f?u=`${t}${o}39;`:u=n,u},mn=n=>{if(D(n)){if(!tn.test(n))throw new Error(`Invalid base64 data: ${n}`)}else throw new TypeError(`Expected String but got ${X(n)}.`);let t=atob(n),o=Uint8Array.from([...t].map(c=>c.charCodeAt(0))),r=new Set(ke),a;return o.every(c=>r.has(c))?a=t.replace(/\s/g,pn):a=n,a},mt=(n,t=0)=>{if(!D(n))throw new TypeError(`Expected String but got ${X(n)}.`);if(Number.isInteger(t)){if(t>16)throw new Error("Character references nested too deeply.")}else throw new TypeError(`Expected Number but got ${X(t)}.`);let o=decodeURIComponent(n);if(/&#/.test(o)){let r=new Set(ke),a=[...o.matchAll(sn)].reverse();for(let c of a){let[f,u]=c,T;if(/^x[\dA-F]+/i.test(u)?T=parseInt(`0${u}`,16):/^\d+/.test(u)&&(T=parseInt(u)),Number.isInteger(T)){let{index:I}=c,[g,m]=[o.substring(0,I),o.substring(I+f.length)];r.has(T)?(o=`${g}${String.fromCharCode(T)}${m}`,(/#x?$/.test(g)||/^#(?:x(?:00)?[2-7]|\d)/.test(m))&&(o=mt(o,++t))):T<256&&(o=`${g}${m}`)}}}return o},un=n=>new Promise((t,o)=>{let r=new cn;r.addEventListener("error",()=>o(r.error)),r.addEventListener("abort",()=>t(r.result)),r.addEventListener("load",()=>t(r.result)),r.readAsDataURL(n)}),ze=class{#e;constructor(){this.#e=new Set(Fe)}get(){return[...this.#e]}has(t){return this.#e.has(t)}add(t){if(D(t)){if(pt.test(t)||!rn.test(t))throw new Error(`Invalid scheme: ${t}`)}else throw new TypeError(`Expected String but got ${X(t)}.`);return this.#e.add(t),[...this.#e]}remove(t){return this.#e.delete(t)}verify(t){let o;if(D(t))try{let{protocol:r}=new URL(t),a=r.replace(/:$/,""),c=a.split("+");o=!pt.test(a)&&an.test(a)||c.every(f=>this.#e.has(f))}catch{o=!1}return!!o}reset(){this.#e.clear();for(let t of Fe)this.#e.add(t)}};var ut=class extends ze{#e;#t=new Set;constructor(){super(),this.#e=0}replace(t){if(!D(t))throw new TypeError(`Expected String but got ${X(t)}.`);let o=t;if(Ue.test(o)){let a=[...o.matchAll(nn)].reverse();for(let c of a){let[f]=c;ct.test(f)&&([f]=ct.exec(f)),this.#e++,this.#t.add(f);let u=this.sanitize(f,{allow:["data"]}),{index:T}=c,[I,g]=[o.substring(0,T),o.substring(T+f.length)];u?o=`${I}${u}${g}`:o=`${I}${g}`}}return o}purify(t){if(!D(t))throw new TypeError(`Expected String but got ${X(t)}.`);let o=lt.sanitize(decodeURIComponent(t));return o&&Ue.test(o)&&(o=this.replace(o)),o=o.replace(/(?:#|%23)$/,"").replace(/(?<!(?:#|%23).*)(?:\?|%3F)$/,""),encodeURI(o)}sanitize(t,o){if(this.#e>16)throw this.#e=0,new Error("Data URLs nested too deeply.");let{allow:r,deny:a,only:c}=o??{},f=new Map([["blob",!1],["data",!1],["file",!1],["javascrpt",!1],["vbscript",!1]]),u=new Set,T=!1;if(Array.isArray(c)&&c.length){let g=super.get();for(let _ of g)f.set(_,!1);let m=Object.values(c);for(let _ of m)if(D(_)&&(_=_.trim(),!Pe.test(_))){if(super.has(_))f.set(_,!0);else{try{super.add(_)}catch{}super.has(_)&&(f.set(_,!0),u.add(_))}!T&&f.has(_)&&(T=f.get(_))}}else{if(Array.isArray(r)&&r.length){let g=Object.values(r);for(let m of g)if(D(m)&&(m=m.trim(),!Pe.test(m)))if(super.has(m))f.set(m,!0);else{try{super.add(m)}catch{}super.has(m)&&(f.set(m,!0),u.add(m))}}if(Array.isArray(a)&&a.length){let g=Object.values(a);for(let m of g)D(m)&&(m=m.trim(),m&&f.set(m,!1))}}let I;if(super.verify(t)){let{hash:g,href:m,pathname:_,protocol:q,search:k}=new URL(t),K=q.replace(/:$/,""),ge=K.split("+"),re;if(T)re=ge.every(G=>f.get(G));else for(let[G,H]of f.entries())if(re=H||K!==G&&ge.every(d=>d!==G),!re)break;if(re){let G=ge.includes("data"),H,d=m;if(G){let[B,...J]=_.split(","),ie=`${J.join(",")}${k}${g}`,ae=B.split(";"),Le=ae[ae.length-1]==="base64",P=ie;Le&&(P=mn(ie));try{let ee=mt(P).trim(),{protocol:le}=new URL(ee);le.replace(/:$/,"").split("+").some(Ge=>Pe.test(Ge))&&(d="")}catch{}let S=Ue.test(P);P!==ie||S?S?P=this.replace(P):this.#t.has(t)?this.#t.delete(t):H=!0:this.#t.has(t)?this.#t.delete(t):H=!0,(!B||on.test(B))&&(P=this.purify(P)),d&&P?(Le&&P!==ie&&ae.pop(),d=`${K}:${ae.join(";")},${P}`):d=""}else H=!0;if(!G&&ft.test(d)){let B=ft.exec(d),{index:J}=B;d=d.substring(0,J).replace(/[?&]$/,"")}d?(I=d.replace(/%26/g,fn),H&&(this.#e=0)):this.#e=0}u.size&&u.forEach(G=>{super.remove(G)})}return I||null}parse(t,o){if(!D(t))throw new TypeError(`Expected String but got ${X(t)}.`);let r=new Map([["input",t]]),a;if(this.verify(t)){let{protocol:c}=new URL(t);c==="blob:"?a=t:a=this.sanitize(t,o??{allow:["data","file"]})}if(a){let c=new URL(a),{pathname:f,protocol:u}=c,I=u.replace(/:$/,"").split("+").includes("data");if(r.set("valid",!0),I){let g=new Map,[m,..._]=f.split(","),q=`${_.join(",")}`,k=m.split(";"),K=k[k.length-1]==="base64";K&&k.pop(),g.set("mime",k.join(";")),g.set("base64",K),g.set("data",q),r.set("data",Object.fromEntries(g))}else r.set("data",null);for(let g in c){let m=c[g];D(m)&&r.set(g,m)}}else r.set("valid",!1);return Object.fromEntries(r)}reset(){super.reset(),this.#e=0,this.#t.clear()}};var Q=new ut,Qn=async(n,t={allow:[],deny:[],only:[]})=>{let o;if(n&&D(n)){let r;try{let{protocol:a}=new URL(n);r=a.replace(/:$/,"")}catch{}if(r==="blob"){let{allow:a,deny:c,only:f}=t;if(Array.isArray(a)&&a.includes("blob")&&!(Array.isArray(c)&&c.includes("blob"))||Array.isArray(f)&&f.includes("blob")){let u;try{u=await fetch(n).then(T=>T.blob()).then(un)}catch{}if(u){if(Array.isArray(f))f.includes("data")||f.push("data");else if(Array.isArray(a)&&(a.includes("data")||a.push("data"),Array.isArray(c)&&c.includes("data"))){let T=c.indexOf("data");c.splice(T,1)}o=Q.sanitize(u,t)}}URL.revokeObjectURL(n)}else r&&(o=Q.sanitize(n,t))}return o||null},Jn=(n,t)=>{let o;if(n&&D(n)){let r;try{let{protocol:a}=new URL(n);r=a.replace(/:$/,"")}catch{}r==="blob"?URL.revokeObjectURL(n):r&&(o=Q.sanitize(n,t))}return o||null},es=async n=>Q.parse(n),ts=n=>Q.parse(n),ns=async n=>Q.verify(n),ss=n=>Q.verify(n),os=Q;export{os as default,ns as isURI,ss as isURISync,es as parseURL,ts as parseURLSync,Qn as sanitizeURL,Jn as sanitizeURLSync};
1
+ function Bt(n,t){(t==null||t>n.length)&&(t=n.length);for(var s=0,r=Array(t);s<t;s++)r[s]=n[s];return r}function Dn(n){if(Array.isArray(n))return n}function In(n,t){var s=n==null?null:typeof Symbol<"u"&&n[Symbol.iterator]||n["@@iterator"];if(s!=null){var r,i,l,m,p=[],h=!0,E=!1;try{if(l=(s=s.call(n)).next,t!==0)for(;!(h=(r=l.call(s)).done)&&(p.push(r.value),p.length!==t);h=!0);}catch(d){E=!0,i=d}finally{try{if(!h&&s.return!=null&&(m=s.return(),Object(m)!==m))return}finally{if(E)throw i}}return p}}function Nn(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
2
+ In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Cn(n,t){return Dn(n)||In(n,t)||Mn(n,t)||Nn()}function Mn(n,t){if(n){if(typeof n=="string")return Bt(n,t);var s={}.toString.call(n).slice(8,-1);return s==="Object"&&n.constructor&&(s=n.constructor.name),s==="Map"||s==="Set"?Array.from(n):s==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(s)?Bt(n,t):void 0}}var nn=Object.entries,jt=Object.setPrototypeOf,vn=Object.isFrozen,Un=Object.getPrototypeOf,Pn=Object.getOwnPropertyDescriptor,U=Object.freeze,$=Object.seal,Te=Object.create,sn=typeof Reflect<"u"&&Reflect,ft=sn.apply,mt=sn.construct;U||(U=function(t){return t});$||($=function(t){return t});ft||(ft=function(t,s){for(var r=arguments.length,i=new Array(r>2?r-2:0),l=2;l<r;l++)i[l-2]=arguments[l];return t.apply(s,i)});mt||(mt=function(t){for(var s=arguments.length,r=new Array(s>1?s-1:0),i=1;i<s;i++)r[i-1]=arguments[i];return new t(...r)});var ue=S(Array.prototype.forEach),kn=S(Array.prototype.lastIndexOf),Wt=S(Array.prototype.pop),de=S(Array.prototype.push),Fn=S(Array.prototype.splice),v=Array.isArray,Le=S(String.prototype.toLowerCase),it=S(String.prototype.toString),Yt=S(String.prototype.match),he=S(String.prototype.replace),Xt=S(String.prototype.indexOf),zn=S(String.prototype.trim),Gn=S(Number.prototype.toString),$n=S(Boolean.prototype.toString),qt=typeof BigInt>"u"?null:S(BigInt.prototype.toString),Vt=typeof Symbol>"u"?null:S(Symbol.prototype.toString),A=S(Object.prototype.hasOwnProperty),Oe=S(Object.prototype.toString),N=S(RegExp.prototype.test),ke=Hn(TypeError);function S(n){return function(t){t instanceof RegExp&&(t.lastIndex=0);for(var s=arguments.length,r=new Array(s>1?s-1:0),i=1;i<s;i++)r[i-1]=arguments[i];return ft(n,t,r)}}function Hn(n){return function(){for(var t=arguments.length,s=new Array(t),r=0;r<t;r++)s[r]=arguments[r];return mt(n,s)}}function f(n,t){let s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Le;if(jt&&jt(n,null),!v(t))return n;let r=t.length;for(;r--;){let i=t[r];if(typeof i=="string"){let l=s(i);l!==i&&(vn(t)||(t[r]=l),i=l)}n[i]=!0}return n}function Bn(n){for(let t=0;t<n.length;t++)A(n,t)||(n[t]=null);return n}function k(n){let t=Te(null);for(let r of nn(n)){var s=Cn(r,2);let i=s[0],l=s[1];A(n,i)&&(v(l)?t[i]=Bn(l):l&&typeof l=="object"&&l.constructor===Object?t[i]=k(l):t[i]=l)}return t}function jn(n){switch(typeof n){case"string":return n;case"number":return Gn(n);case"boolean":return $n(n);case"bigint":return qt?qt(n):"0";case"symbol":return Vt?Vt(n):"Symbol()";case"undefined":return Oe(n);case"function":case"object":{if(n===null)return Oe(n);let t=n,s=Ee(t,"toString");if(typeof s=="function"){let r=s(t);return typeof r=="string"?r:Oe(r)}return Oe(n)}default:return Oe(n)}}function Ee(n,t){for(;n!==null;){let r=Pn(n,t);if(r){if(r.get)return S(r.get);if(typeof r.value=="function")return S(r.value)}n=Un(n)}function s(){return null}return s}function Wn(n){try{return N(n,""),!0}catch{return!1}}var Zt=U(["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"]),at=U(["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"]),lt=U(["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"]),Yn=U(["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"]),ct=U(["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"]),Xn=U(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Kt=U(["#text"]),Qt=U(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","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"]),pt=U(["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","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","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-rendering","textlength","type","u1","u2","unicode","values","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"]),Jt=U(["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"]),Fe=U(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),qn=$(/{{[\w\W]*|^[\w\W]*}}/g),Vn=$(/<%[\w\W]*|^[\w\W]*%>/g),Zn=$(/\${[\w\W]*/g),Kn=$(/^data-[\-\w.\u00B7-\uFFFF]+$/),Qn=$(/^aria-[\-\w]+$/),en=$(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Jn=$(/^(?:\w+script|data):/i),es=$(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),ts=$(/^html$/i),ns=$(/^[a-z][.\w]*(-[.\w]+)+$/i),ge={element:1,text:3,progressingInstruction:7,comment:8,document:9},ss=function(){return typeof window>"u"?null:window},os=function(t,s){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let r=null,i="data-tt-policy-suffix";s&&s.hasAttribute(i)&&(r=s.getAttribute(i));let l="dompurify"+(r?"#"+r:"");try{return t.createPolicy(l,{createHTML(m){return m},createScriptURL(m){return m}})}catch{return console.warn("TrustedTypes policy "+l+" could not be created."),null}},tn=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function on(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ss(),t=c=>on(c);if(t.version="3.4.3",t.removed=[],!n||!n.document||n.document.nodeType!==ge.document||!n.Element)return t.isSupported=!1,t;let s=n.document,r=s,i=r.currentScript,l=n.DocumentFragment,m=n.HTMLTemplateElement,p=n.Node,h=n.Element,E=n.NodeFilter,d=n.NamedNodeMap,b=d===void 0?n.NamedNodeMap||n.MozNamedAttrMap:d,T=n.HTMLFormElement,_=n.DOMParser,M=n.trustedTypes,z=h.prototype,Ae=Ee(z,"cloneNode"),ye=Ee(z,"remove"),ie=Ee(z,"nextSibling"),H=Ee(z,"childNodes"),B=Ee(z,"parentNode");if(typeof m=="function"){let c=s.createElement("template");c.content&&c.content.ownerDocument&&(s=c.content.ownerDocument)}let g,j="",K=s,Q=K.implementation,ae=K.createNodeIterator,De=K.createDocumentFragment,F=K.getElementsByTagName,Ie=r.importNode,w=tn();t.isSupported=typeof nn=="function"&&typeof B=="function"&&Q&&Q.createHTMLDocument!==void 0;let te=qn,be=Vn,le=Zn,En=Kn,_n=Qn,An=Jn,_t=es,yn=ns,At=en,O=null,yt=f({},[...Zt,...at,...lt,...ct,...Kt]),I=null,bt=f({},[...Qt,...pt,...Jt,...Fe]),y=Object.seal(Te(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Re=null,Ne=null,J=Object.seal(Te(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),Rt=!0,We=!0,St=!1,wt=!0,ne=!1,Se=!0,se=!1,Ye=!1,Xe=!1,ce=!1,Ce=!1,Me=!1,xt=!0,Ot=!1,Lt="user-content-",qe=!0,we=!1,pe={},X=null,Ve=f({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Dt=null,It=f({},["audio","video","img","source","image","track"]),Ze=null,Nt=f({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),ve="http://www.w3.org/1998/Math/MathML",Ue="http://www.w3.org/2000/svg",q="http://www.w3.org/1999/xhtml",fe=q,Ke=!1,Qe=null,bn=f({},[ve,Ue,q],it),Je=f({},["mi","mo","mn","ms","mtext"]),et=f({},["annotation-xml"]),Rn=f({},["title","style","font","a","script"]),xe=null,Sn=["application/xhtml+xml","text/html"],wn="text/html",x=null,me=null,xn=s.createElement("form"),Ct=function(e){return e instanceof RegExp||e instanceof Function},tt=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(me&&me===e)return;(!e||typeof e!="object")&&(e={}),e=k(e),xe=Sn.indexOf(e.PARSER_MEDIA_TYPE)===-1?wn:e.PARSER_MEDIA_TYPE,x=xe==="application/xhtml+xml"?it:Le,O=A(e,"ALLOWED_TAGS")&&v(e.ALLOWED_TAGS)?f({},e.ALLOWED_TAGS,x):yt,I=A(e,"ALLOWED_ATTR")&&v(e.ALLOWED_ATTR)?f({},e.ALLOWED_ATTR,x):bt,Qe=A(e,"ALLOWED_NAMESPACES")&&v(e.ALLOWED_NAMESPACES)?f({},e.ALLOWED_NAMESPACES,it):bn,Ze=A(e,"ADD_URI_SAFE_ATTR")&&v(e.ADD_URI_SAFE_ATTR)?f(k(Nt),e.ADD_URI_SAFE_ATTR,x):Nt,Dt=A(e,"ADD_DATA_URI_TAGS")&&v(e.ADD_DATA_URI_TAGS)?f(k(It),e.ADD_DATA_URI_TAGS,x):It,X=A(e,"FORBID_CONTENTS")&&v(e.FORBID_CONTENTS)?f({},e.FORBID_CONTENTS,x):Ve,Re=A(e,"FORBID_TAGS")&&v(e.FORBID_TAGS)?f({},e.FORBID_TAGS,x):k({}),Ne=A(e,"FORBID_ATTR")&&v(e.FORBID_ATTR)?f({},e.FORBID_ATTR,x):k({}),pe=A(e,"USE_PROFILES")?e.USE_PROFILES&&typeof e.USE_PROFILES=="object"?k(e.USE_PROFILES):e.USE_PROFILES:!1,Rt=e.ALLOW_ARIA_ATTR!==!1,We=e.ALLOW_DATA_ATTR!==!1,St=e.ALLOW_UNKNOWN_PROTOCOLS||!1,wt=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,ne=e.SAFE_FOR_TEMPLATES||!1,Se=e.SAFE_FOR_XML!==!1,se=e.WHOLE_DOCUMENT||!1,ce=e.RETURN_DOM||!1,Ce=e.RETURN_DOM_FRAGMENT||!1,Me=e.RETURN_TRUSTED_TYPE||!1,Xe=e.FORCE_BODY||!1,xt=e.SANITIZE_DOM!==!1,Ot=e.SANITIZE_NAMED_PROPS||!1,qe=e.KEEP_CONTENT!==!1,we=e.IN_PLACE||!1,At=Wn(e.ALLOWED_URI_REGEXP)?e.ALLOWED_URI_REGEXP:en,fe=typeof e.NAMESPACE=="string"?e.NAMESPACE:q,Je=A(e,"MATHML_TEXT_INTEGRATION_POINTS")&&e.MATHML_TEXT_INTEGRATION_POINTS&&typeof e.MATHML_TEXT_INTEGRATION_POINTS=="object"?k(e.MATHML_TEXT_INTEGRATION_POINTS):f({},["mi","mo","mn","ms","mtext"]),et=A(e,"HTML_INTEGRATION_POINTS")&&e.HTML_INTEGRATION_POINTS&&typeof e.HTML_INTEGRATION_POINTS=="object"?k(e.HTML_INTEGRATION_POINTS):f({},["annotation-xml"]);let o=A(e,"CUSTOM_ELEMENT_HANDLING")&&e.CUSTOM_ELEMENT_HANDLING&&typeof e.CUSTOM_ELEMENT_HANDLING=="object"?k(e.CUSTOM_ELEMENT_HANDLING):Te(null);if(y=Te(null),A(o,"tagNameCheck")&&Ct(o.tagNameCheck)&&(y.tagNameCheck=o.tagNameCheck),A(o,"attributeNameCheck")&&Ct(o.attributeNameCheck)&&(y.attributeNameCheck=o.attributeNameCheck),A(o,"allowCustomizedBuiltInElements")&&typeof o.allowCustomizedBuiltInElements=="boolean"&&(y.allowCustomizedBuiltInElements=o.allowCustomizedBuiltInElements),ne&&(We=!1),Ce&&(ce=!0),pe&&(O=f({},Kt),I=Te(null),pe.html===!0&&(f(O,Zt),f(I,Qt)),pe.svg===!0&&(f(O,at),f(I,pt),f(I,Fe)),pe.svgFilters===!0&&(f(O,lt),f(I,pt),f(I,Fe)),pe.mathMl===!0&&(f(O,ct),f(I,Jt),f(I,Fe))),J.tagCheck=null,J.attributeCheck=null,A(e,"ADD_TAGS")&&(typeof e.ADD_TAGS=="function"?J.tagCheck=e.ADD_TAGS:v(e.ADD_TAGS)&&(O===yt&&(O=k(O)),f(O,e.ADD_TAGS,x))),A(e,"ADD_ATTR")&&(typeof e.ADD_ATTR=="function"?J.attributeCheck=e.ADD_ATTR:v(e.ADD_ATTR)&&(I===bt&&(I=k(I)),f(I,e.ADD_ATTR,x))),A(e,"ADD_URI_SAFE_ATTR")&&v(e.ADD_URI_SAFE_ATTR)&&f(Ze,e.ADD_URI_SAFE_ATTR,x),A(e,"FORBID_CONTENTS")&&v(e.FORBID_CONTENTS)&&(X===Ve&&(X=k(X)),f(X,e.FORBID_CONTENTS,x)),A(e,"ADD_FORBID_CONTENTS")&&v(e.ADD_FORBID_CONTENTS)&&(X===Ve&&(X=k(X)),f(X,e.ADD_FORBID_CONTENTS,x)),qe&&(O["#text"]=!0),se&&f(O,["html","head","body"]),O.table&&(f(O,["tbody"]),delete Re.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!="function")throw ke('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw ke('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');g=e.TRUSTED_TYPES_POLICY,j=g.createHTML("")}else g===void 0&&(g=os(M,i)),g!==null&&typeof j=="string"&&(j=g.createHTML(""));U&&U(e),me=e},Mt=f({},[...at,...lt,...Yn]),vt=f({},[...ct,...Xn]),On=function(e){let o=B(e);(!o||!o.tagName)&&(o={namespaceURI:fe,tagName:"template"});let a=Le(e.tagName),u=Le(o.tagName);return Qe[e.namespaceURI]?e.namespaceURI===Ue?o.namespaceURI===q?a==="svg":o.namespaceURI===ve?a==="svg"&&(u==="annotation-xml"||Je[u]):!!Mt[a]:e.namespaceURI===ve?o.namespaceURI===q?a==="math":o.namespaceURI===Ue?a==="math"&&et[u]:!!vt[a]:e.namespaceURI===q?o.namespaceURI===Ue&&!et[u]||o.namespaceURI===ve&&!Je[u]?!1:!vt[a]&&(Rn[a]||!Mt[a]):!!(xe==="application/xhtml+xml"&&Qe[e.namespaceURI]):!1},W=function(e){de(t.removed,{element:e});try{B(e).removeChild(e)}catch{ye(e)}},oe=function(e,o){try{de(t.removed,{attribute:o.getAttributeNode(e),from:o})}catch{de(t.removed,{attribute:null,from:o})}if(o.removeAttribute(e),e==="is")if(ce||Ce)try{W(o)}catch{}else try{o.setAttribute(e,"")}catch{}},Ut=function(e){let o=null,a=null;if(Xe)e="<remove></remove>"+e;else{let R=Yt(e,/^[\r\n\t ]+/);a=R&&R[0]}xe==="application/xhtml+xml"&&fe===q&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");let u=g?g.createHTML(e):e;if(fe===q)try{o=new _().parseFromString(u,xe)}catch{}if(!o||!o.documentElement){o=Q.createDocument(fe,"template",null);try{o.documentElement.innerHTML=Ke?j:u}catch{}}let L=o.body||o.documentElement;return e&&a&&L.insertBefore(s.createTextNode(a),L.childNodes[0]||null),fe===q?F.call(o,se?"html":"body")[0]:se?o.documentElement:L},Pt=function(e){return ae.call(e.ownerDocument||e,e,E.SHOW_ELEMENT|E.SHOW_COMMENT|E.SHOW_TEXT|E.SHOW_PROCESSING_INSTRUCTION|E.SHOW_CDATA_SECTION,null)},nt=function(e){return e instanceof T&&(typeof e.nodeName!="string"||typeof e.textContent!="string"||typeof e.removeChild!="function"||!(e.attributes instanceof b)||typeof e.removeAttribute!="function"||typeof e.setAttribute!="function"||typeof e.namespaceURI!="string"||typeof e.insertBefore!="function"||typeof e.hasChildNodes!="function")},st=function(e){return typeof p=="function"&&e instanceof p};function Z(c,e,o){ue(c,a=>{a.call(t,e,o,me)})}let kt=function(e){let o=null;if(Z(w.beforeSanitizeElements,e,null),nt(e))return W(e),!0;let a=x(e.nodeName);if(Z(w.uponSanitizeElement,e,{tagName:a,allowedTags:O}),Se&&e.hasChildNodes()&&!st(e.firstElementChild)&&N(/<[/\w!]/g,e.innerHTML)&&N(/<[/\w!]/g,e.textContent)||Se&&e.namespaceURI===q&&a==="style"&&st(e.firstElementChild)||e.nodeType===ge.progressingInstruction||Se&&e.nodeType===ge.comment&&N(/<[/\w]/g,e.data))return W(e),!0;if(Re[a]||!(J.tagCheck instanceof Function&&J.tagCheck(a))&&!O[a]){if(!Re[a]&&zt(a)&&(y.tagNameCheck instanceof RegExp&&N(y.tagNameCheck,a)||y.tagNameCheck instanceof Function&&y.tagNameCheck(a)))return!1;if(qe&&!X[a]){let u=B(e)||e.parentNode,L=H(e)||e.childNodes;if(L&&u){let R=L.length;for(let P=R-1;P>=0;--P){let G=Ae(L[P],!0);u.insertBefore(G,ie(e))}}}return W(e),!0}return e instanceof h&&!On(e)||(a==="noscript"||a==="noembed"||a==="noframes")&&N(/<\/no(script|embed|frames)/i,e.innerHTML)?(W(e),!0):(ne&&e.nodeType===ge.text&&(o=e.textContent,ue([te,be,le],u=>{o=he(o,u," ")}),e.textContent!==o&&(de(t.removed,{element:e.cloneNode()}),e.textContent=o)),Z(w.afterSanitizeElements,e,null),!1)},Ft=function(e,o,a){if(Ne[o]||xt&&(o==="id"||o==="name")&&(a in s||a in xn))return!1;let u=I[o]||J.attributeCheck instanceof Function&&J.attributeCheck(o,e);if(!(We&&!Ne[o]&&N(En,o))){if(!(Rt&&N(_n,o))){if(!u||Ne[o]){if(!(zt(e)&&(y.tagNameCheck instanceof RegExp&&N(y.tagNameCheck,e)||y.tagNameCheck instanceof Function&&y.tagNameCheck(e))&&(y.attributeNameCheck instanceof RegExp&&N(y.attributeNameCheck,o)||y.attributeNameCheck instanceof Function&&y.attributeNameCheck(o,e))||o==="is"&&y.allowCustomizedBuiltInElements&&(y.tagNameCheck instanceof RegExp&&N(y.tagNameCheck,a)||y.tagNameCheck instanceof Function&&y.tagNameCheck(a))))return!1}else if(!Ze[o]){if(!N(At,he(a,_t,""))){if(!((o==="src"||o==="xlink:href"||o==="href")&&e!=="script"&&Xt(a,"data:")===0&&Dt[e])){if(!(St&&!N(An,he(a,_t,"")))){if(a)return!1}}}}}}return!0},Ln=f({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),zt=function(e){return!Ln[Le(e)]&&N(yn,e)},Gt=function(e){Z(w.beforeSanitizeAttributes,e,null);let o=e.attributes;if(!o||nt(e))return;let a={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:I,forceKeepAttr:void 0},u=o.length;for(;u--;){let L=o[u],R=L.name,P=L.namespaceURI,G=L.value,Y=x(R),rt=G,D=R==="value"?rt:zn(rt);if(a.attrName=Y,a.attrValue=D,a.keepAttr=!0,a.forceKeepAttr=void 0,Z(w.uponSanitizeAttribute,e,a),D=a.attrValue,Ot&&(Y==="id"||Y==="name")&&Xt(D,Lt)!==0&&(oe(R,e),D=Lt+D),Se&&N(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,D)){oe(R,e);continue}if(Y==="attributename"&&Yt(D,"href")){oe(R,e);continue}if(a.forceKeepAttr)continue;if(!a.keepAttr){oe(R,e);continue}if(!wt&&N(/\/>/i,D)){oe(R,e);continue}ne&&ue([te,be,le],Ht=>{D=he(D,Ht," ")});let $t=x(e.nodeName);if(!Ft($t,Y,D)){oe(R,e);continue}if(g&&typeof M=="object"&&typeof M.getAttributeType=="function"&&!P)switch(M.getAttributeType($t,Y)){case"TrustedHTML":{D=g.createHTML(D);break}case"TrustedScriptURL":{D=g.createScriptURL(D);break}}if(D!==rt)try{P?e.setAttributeNS(P,R,D):e.setAttribute(R,D),nt(e)?W(e):Wt(t.removed)}catch{oe(R,e)}}Z(w.afterSanitizeAttributes,e,null)},ot=function(e){let o=null,a=Pt(e);for(Z(w.beforeSanitizeShadowDOM,e,null);o=a.nextNode();)Z(w.uponSanitizeShadowNode,o,null),kt(o),Gt(o),o.content instanceof l&&ot(o.content);Z(w.afterSanitizeShadowDOM,e,null)},Pe=function(e){if(e.nodeType===ge.element&&e.shadowRoot instanceof l){let u=e.shadowRoot;Pe(u),ot(u)}let o=e.childNodes;if(!o)return;let a=[];ue(o,u=>{de(a,u)});for(let u of a)Pe(u)};return t.sanitize=function(c){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=null,a=null,u=null,L=null;if(Ke=!c,Ke&&(c="<!-->"),typeof c!="string"&&!st(c)&&(c=jn(c),typeof c!="string"))throw ke("dirty is not a string, aborting");if(!t.isSupported)return c;if(Ye||tt(e),t.removed=[],typeof c=="string"&&(we=!1),we){let G=c.nodeName;if(typeof G=="string"){let Y=x(G);if(!O[Y]||Re[Y])throw ke("root node is forbidden and cannot be sanitized in-place")}Pe(c)}else if(c instanceof p)o=Ut("<!---->"),a=o.ownerDocument.importNode(c,!0),a.nodeType===ge.element&&a.nodeName==="BODY"||a.nodeName==="HTML"?o=a:o.appendChild(a),Pe(a);else{if(!ce&&!ne&&!se&&c.indexOf("<")===-1)return g&&Me?g.createHTML(c):c;if(o=Ut(c),!o)return ce?null:Me?j:""}o&&Xe&&W(o.firstChild);let R=Pt(we?c:o);for(;u=R.nextNode();)kt(u),Gt(u),u.content instanceof l&&ot(u.content);if(we)return c;if(ce){if(ne){o.normalize();let G=o.innerHTML;ue([te,be,le],Y=>{G=he(G,Y," ")}),o.innerHTML=G}if(Ce)for(L=De.call(o.ownerDocument);o.firstChild;)L.appendChild(o.firstChild);else L=o;return(I.shadowroot||I.shadowrootmode)&&(L=Ie.call(r,L,!0)),L}let P=se?o.outerHTML:o.innerHTML;return se&&O["!doctype"]&&o.ownerDocument&&o.ownerDocument.doctype&&o.ownerDocument.doctype.name&&N(ts,o.ownerDocument.doctype.name)&&(P="<!DOCTYPE "+o.ownerDocument.doctype.name+`>
3
+ `+P),ne&&ue([te,be,le],G=>{P=he(P,G," ")}),g&&Me?g.createHTML(P):P},t.setConfig=function(){let c=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};tt(c),Ye=!0},t.clearConfig=function(){me=null,Ye=!1},t.isValidAttribute=function(c,e,o){me||tt({});let a=x(c),u=x(e);return Ft(a,u,o)},t.addHook=function(c,e){typeof e=="function"&&de(w[c],e)},t.removeHook=function(c,e){if(e!==void 0){let o=kn(w[c],e);return o===-1?void 0:Fn(w[c],o,1)[0]}return Wt(w[c])},t.removeHooks=function(c){w[c]=[]},t.removeAllHooks=function(){w=tn()},t}var ut=on();var rn=/^[\w+/=-]+$/;var ze=/data:[\w#&+./;=-]*,/,dt=/data:[\w#&+./;=^]*base64,[\w+/=-]+/i,an=/data:[\w#&+./;=-]*,[^\x22]+/g,ln=/&#(x(?:00)?[\dA-F]{2}|0?\d{1,3});?/gi,cn=/^(?:application\/(?:[\w#&.;-]+\+)?x|image\/svg\+x|text\/(?:ht|x))ml;?/;var pn=/^[a-z][\da-z+.-]*$/,fn=/^(?:ext|web)\+[a-z]+$/,ht=/(?:java|vb)script/,Ge=/(?:java|vb)script|blob/,gt=/%(?:22|27|3C|3E)|[\x22\x27<>]/,mn=/^%[\dA-F]{2}$/i;var V=n=>Object.prototype.toString.call(n).slice(8,-1),C=n=>typeof n=="string"||n instanceof String;var{FileReader:un}=globalThis;var $e=[7,8,9,10,11,12,13,27,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255];var He=["aaa","aaas","about","acap","acct","acd","acr","adiumxtra","adt","afp","afs","agtp","aim","amss","android","appdata","apt","ar","ari","ark","at","attachment","aw","barion","beshare","bitcoin","bitcoincash","bl","blob","bluetooth","bolo","brid","browserext","cabal","caip","calculator","callto","cap","cast","casts","chrome","chrome-extension","cid","coap","coaps","com-eventbrite-attendee","content","content-type","crid","cstr","cttps","cvs","dab","dat","data","dav","dhttp","diaspora","dict","did","dilithium3","dis","dlna-playcontainer","dlna-playsingle","dnp","dns","dntp","doi","donau","dpp","drm","dtmi","dtn","dvb","dvx","dweb","ed2k","eid","elsi","embedded","ens","esim","ethereum","example","facetime","feed","feedready","fido","file","finger","first-run-pen-experience","fish","fm","ftp","fuchsia-pkg","geo","gg","git","gitoid","gizmoproject","go","gopher","graph","gtalk","h323","ham","hcap","hcp","hs20","http","https","hxxp","hxxps","hydrazone","hyper","i0","iax","ibi","ibi-","icap","icon","ilstring","im","imap","info","iotdisco","ipfs","ipn","ipns","ipp","ipps","irc","irc6","ircs","iris","iris.beep","iris.lwz","iris.xpc","iris.xpcs","isostore","itms","jabber","jar","jms","keyparc","lastfm","lbry","ldap","ldaps","leaptofrogans","lid","linkid","lorawan","lpa","lvlt","machineProvisioningProgressReporter","magnet","mailto","maps","market","matrix","message","microsoft.windows.camera","microsoft.windows.camera.multipicker","microsoft.windows.camera.picker","mid","mms","mongodb","moz","moz-extension","mqtt","mqtts","ms-access","ms-appinstaller","ms-browser-extension","ms-calculator","ms-drive-to","ms-enrollment","ms-excel","ms-eyecontrolspeech","ms-gamebarservices","ms-gamingoverlay","ms-getoffice","ms-help","ms-infopath","ms-inputapp","ms-launchremotedesktop","ms-lockscreencomponent-config","ms-media-stream-id","ms-meetnow","ms-mixedrealitycapture","ms-mobileplans","ms-newsandinterests","ms-officeapp","ms-people","ms-personacard","ms-powerpoint","ms-project","ms-publisher","ms-recall","ms-remotedesktop","ms-remotedesktop-launch","ms-restoretabcompanion","ms-screenclip","ms-screensketch","ms-search","ms-search-repair","ms-secondary-screen-controller","ms-secondary-screen-setup","ms-settings","ms-settings-airplanemode","ms-settings-bluetooth","ms-settings-camera","ms-settings-cellular","ms-settings-cloudstorage","ms-settings-connectabledevices","ms-settings-displays-topology","ms-settings-emailandaccounts","ms-settings-language","ms-settings-location","ms-settings-lock","ms-settings-nfctransactions","ms-settings-notifications","ms-settings-power","ms-settings-privacy","ms-settings-proximity","ms-settings-screenrotation","ms-settings-wifi","ms-settings-workplace","ms-spd","ms-stickers","ms-sttoverlay","ms-transit-to","ms-useractivityset","ms-uup","ms-virtualtouchpad","ms-visio","ms-walk-to","ms-whiteboard","ms-whiteboard-cmd","ms-widgetboard","ms-widgets","ms-word","msnim","msrp","msrps","mss","mt","mtqp","mtrust","mumble","mupdate","mvn","mvrp","mvrps","news","nfs","ni","nih","nntp","notes","num","ocf","oid","onenote","onenote-cmd","opaquelocktoken","openid","openpgp4fpr","otpauth","palm","paparazzi","payto","pkcs11","platform","pop","pres","proxy","psyc","pttp","pwid","qb","query","quic-transport","redis","rediss","reload","res","resource","rmi","rsync","rtmfp","rtmp","rtsp","rtsps","rtspu","sarif","secondlife","secret-token","service","session","sftp","sgn","shc","shelter","sieve","simpleledger","simplex","sip","sips","skype","smb","smp","sms","smtp","snmp","soap.beep","soap.beeps","soldat","spacify","spiffe","spotify","ssb","ssh","starknet","steam","stun","stuns","submit","svn","swh","swid","swidpath","tag","taler","teamspeak","teapot","teapots","tel","teliaeid","telnet","tftp","things","thismessage","tip","tn3270","tool","turn","turns","tv","udp","unreal","upn","urn","ut2004","uuid-in-package","v-event","vemmi","ventrilo","ves","view-source","vnc","vscode","vscode-insiders","vsls","w3","wasm","wasm-js","wcr","web3","webcal","wifi","ws","wss","wtai","wyciwyg","xcompute","xcon","xcon-userid","xfire","xftp","xmlrpc.beep","xmlrpc.beeps","xmpp","xrcp","xri","ymsgr","z39.50r","z39.50s","ztdnaid"];var dn=n=>{if(!C(n))throw new TypeError(`Expected String but got ${V(n)}.`);let t=[];for(let s of n)t.push(`%${s.charCodeAt(0).toString(16).toUpperCase()}`);return t.join("")},hn=n=>{C(n)&&mn.test(n)&&(n=n.toUpperCase());let[t,s,r,i,l,m]=["&","#","<",">",'"',"'"].map(dn),p;return n===t?p=`${t}amp;`:n===r?p=`${t}lt;`:n===i?p=`${t}gt;`:n===l?p=`${t}quot;`:n===m?p=`${t}${s}39;`:p=n,p},gn=n=>{if(C(n)){if(!rn.test(n))throw new Error(`Invalid base64 data: ${n}`)}else throw new TypeError(`Expected String but got ${V(n)}.`);let t=atob(n),s=Uint8Array.from([...t].map(l=>l.charCodeAt(0))),r=new Set($e),i;return s.every(l=>r.has(l))?i=t.replace(/\s/g,dn):i=n,i},Tt=(n,t=0)=>{if(!C(n))throw new TypeError(`Expected String but got ${V(n)}.`);if(Number.isInteger(t)){if(t>16)throw new Error("Character references nested too deeply.")}else throw new TypeError(`Expected Number but got ${V(t)}.`);let s=decodeURIComponent(n);if(/&#/.test(s)){let r=new Set($e),i=[...s.matchAll(ln)].reverse();for(let l of i){let[m,p]=l,h;if(/^x[\dA-F]+/i.test(p)?h=parseInt(`0${p}`,16):/^\d+/.test(p)&&(h=parseInt(p)),Number.isInteger(h)){let{index:E}=l,[d,b]=[s.substring(0,E),s.substring(E+m.length)];r.has(h)?(s=`${d}${String.fromCharCode(h)}${b}`,(/#x?$/.test(d)||/^#(?:x(?:00)?[2-7]|\d)/.test(b))&&(s=Tt(s,++t))):h<256&&(s=`${d}${b}`)}}}return s},Tn=(n,t=33554432)=>new Promise((s,r)=>{if(Number.isInteger(n?.size)){if(Number.isInteger(t)&&n.size>t)return r(new DOMException(`Blob size (${n.size} bytes) exceeds the maximum allowed size of ${t} bytes.`,"NotReadableError"))}else return s(null);let i=new un;i.addEventListener("error",()=>r(i.error)),i.addEventListener("abort",()=>s(i.result)),i.addEventListener("load",()=>s(i.result)),i.readAsDataURL(n)}),Be=class{#e;constructor(){this.#e=new Set(He)}get(){return[...this.#e]}has(t){return this.#e.has(t)}add(t){if(C(t)){if(ht.test(t)||!pn.test(t))throw new Error(`Invalid scheme: ${t}`)}else throw new TypeError(`Expected String but got ${V(t)}.`);return this.#e.add(t),[...this.#e]}remove(t){return this.#e.delete(t)}verify(t){let s;if(C(t))try{let{protocol:r}=new URL(t),i=r.replace(/:$/,""),l=i.split("+");s=!ht.test(i)&&fn.test(i)||l.every(m=>this.#e.has(m))}catch{s=!1}return!!s}reset(){this.#e.clear();for(let t of He)this.#e.add(t)}};var _e=(n,t,s)=>{n&&console.warn(`[URLSanitizer Debug] ${t}`,s?s.message:"")},Et=class extends Be{#e;#t=new Set;constructor(){super(),this.#e=0}replace(t){if(!C(t))throw new TypeError(`Expected String but got ${V(t)}.`);let s=t;if(ze.test(s)){let i=[...s.matchAll(an)].reverse();for(let l of i){let[m]=l;dt.test(m)&&([m]=dt.exec(m)),this.#e++,this.#t.add(m);let p=this.sanitize(m,{allow:["data"]}),{index:h}=l,[E,d]=[s.substring(0,h),s.substring(h+m.length)];p?s=`${E}${p}${d}`:s=`${E}${d}`}}return s}purify(t){if(!C(t))throw new TypeError(`Expected String but got ${V(t)}.`);let s=ut.sanitize(decodeURIComponent(t));return s&&ze.test(s)&&(s=this.replace(s)),s=s.replace(/(?:#|%23)$/,"").replace(/(?<!(?:#|%23).*)(?:\?|%3F)$/,""),encodeURI(s)}sanitize(t,s){if(this.#e>16)throw this.#e=0,new Error("Data URLs nested too deeply.");let{allow:r,deny:i,only:l,debug:m=!1}=s??{},p=new Map([["blob",!1],["data",!1],["file",!1],["javascrpt",!1],["vbscript",!1]]),h=new Set,E=!1;if(Array.isArray(l)&&l.length){let b=super.get();for(let _ of b)p.set(_,!1);let T=Object.values(l);for(let _ of T)if(C(_)&&(_=_.trim(),!Ge.test(_))){if(super.has(_))p.set(_,!0);else{try{super.add(_)}catch(M){let z=`Failed to add scheme '${_}' in 'only' list.`;_e(m,z,M)}super.has(_)&&(p.set(_,!0),h.add(_))}!E&&p.has(_)&&(E=p.get(_))}}else{if(Array.isArray(r)&&r.length){let b=Object.values(r);for(let T of b)if(C(T)&&(T=T.trim(),!Ge.test(T)))if(super.has(T))p.set(T,!0);else{try{super.add(T)}catch(_){let M=`Failed to add scheme '${T}' in 'allow' list.`;_e(m,M,_)}super.has(T)&&(p.set(T,!0),h.add(T))}}if(Array.isArray(i)&&i.length){let b=Object.values(i);for(let T of b)C(T)&&(T=T.trim(),T&&p.set(T,!1))}}let d;if(super.verify(t)){let{hash:b,href:T,pathname:_,protocol:M,search:z}=new URL(t),Ae=M.replace(/:$/,""),ye=Ae.split("+"),ie;if(E)ie=ye.every(H=>p.get(H));else for(let[H,B]of p.entries())if(ie=B||Ae!==H&&ye.every(g=>g!==H),!ie)break;if(ie){let H=ye.includes("data"),B,g=T;if(H){let[j,...K]=_.split(","),Q=`${K.join(",")}${z}${b}`,ae=j.split(";"),De=ae[ae.length-1]==="base64",F=Q;De&&(F=gn(Q));try{let w=Tt(F).trim(),{protocol:te}=new URL(w);te.replace(/:$/,"").split("+").some(le=>Ge.test(le))&&(g="")}catch(w){_e(m,"Failed to parse inner data URL protocol.",w)}let Ie=ze.test(F);F!==Q||Ie?Ie?F=this.replace(F):this.#t.has(t)?this.#t.delete(t):B=!0:this.#t.has(t)?this.#t.delete(t):B=!0,(!j||cn.test(j))&&(F=this.purify(F)),g&&F?(De&&F!==Q&&ae.pop(),g=`${Ae}:${ae.join(";")},${F}`):g=""}else B=!0;if(!H&&gt.test(g)){let j=gt.exec(g),{index:K}=j;g=g.substring(0,K).replace(/[?&]$/,"")}g?(d=g.replace(/%26/g,hn),B&&(this.#e=0)):this.#e=0}h.size&&h.forEach(H=>{super.remove(H)})}return d||null}parse(t,s){if(!C(t))throw new TypeError(`Expected String but got ${V(t)}.`);let r=new Map([["input",t]]),i;if(this.verify(t)){let{protocol:l}=new URL(t);l==="blob:"?i=t:i=this.sanitize(t,s??{allow:["data","file"]})}if(i){let l=new URL(i),{pathname:m,protocol:p}=l,E=p.replace(/:$/,"").split("+").includes("data");if(r.set("valid",!0),E){let d=new Map,[b,...T]=m.split(","),_=`${T.join(",")}`,M=b.split(";"),z=M[M.length-1]==="base64";z&&M.pop(),d.set("mime",M.join(";")),d.set("base64",z),d.set("data",_),r.set("data",Object.fromEntries(d))}else r.set("data",null);for(let d in l){let b=l[d];C(b)&&r.set(d,b)}}else r.set("valid",!1);return Object.fromEntries(r)}reset(){super.reset(),this.#e=0,this.#t.clear()}};var ee=new Et,cs=async(n,t={allow:[],deny:[],only:[],debug:!1,maxBlobSize:33554432})=>{let s=!!t?.debug,r=Number.isInteger(t?.maxBlobSize)&&t.maxBlobSize>0?t.maxBlobSize:33554432,i;if(n&&C(n)){let l;try{let{protocol:m}=new URL(n);l=m.replace(/:$/,"")}catch(m){_e(s,`Invalid URL input format: ${n}`,m)}if(l==="blob"){let{allow:m,deny:p,only:h}=t;if(Array.isArray(m)&&m.includes("blob")&&!(Array.isArray(p)&&p.includes("blob"))||Array.isArray(h)&&h.includes("blob")){let E;try{E=await fetch(n).then(d=>d.blob()).then(d=>Tn(d,r))}catch(d){let b=`Failed to fetch and convert blob URL: ${n}`;_e(s,b,d)}if(E){if(Array.isArray(h))h.includes("data")||h.push("data");else if(Array.isArray(m)&&(m.includes("data")||m.push("data"),Array.isArray(p)&&p.includes("data"))){let d=p.indexOf("data");p.splice(d,1)}i=ee.sanitize(E,t)}}URL.revokeObjectURL(n)}else l&&(i=ee.sanitize(n,t))}return i||null},ps=(n,t)=>{let s;if(n&&C(n)){let r;try{let{protocol:i}=new URL(n);r=i.replace(/:$/,"")}catch(i){let l=`Failed to parse URL: ${n}`;_e(t?.debug,l,i)}r==="blob"?URL.revokeObjectURL(n):r&&(s=ee.sanitize(n,t))}return s||null},fs=async n=>ee.parse(n),ms=n=>ee.parse(n),us=async n=>ee.verify(n),ds=n=>ee.verify(n),hs=ee;export{hs as default,us as isURI,ds as isURISync,fs as parseURL,ms as parseURLSync,cs as sanitizeURL,ps as sanitizeURLSync};
3
4
  /*!
4
5
  * URL Sanitizer
5
6
  *
@@ -10,6 +11,6 @@ var{entries:Zt,setPrototypeOf:zt,isFrozen:Sn,getPrototypeOf:wn,getOwnPropertyDes
10
11
  /*! Bundled license information:
11
12
 
12
13
  dompurify/dist/purify.es.mjs:
13
- (*! @license DOMPurify 3.4.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.4.2/LICENSE *)
14
+ (*! @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 *)
14
15
  */
15
16
  //# sourceMappingURL=url-sanitizer.min.js.map