url-sanitizer 0.10.17 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -8,7 +8,6 @@
8
8
  URL sanitizer for Node.js, browsers and web sites.
9
9
  Sanitize not only regular URLs, but also data URLs and blob URLs.
10
10
  It also has the ability to parse URLs and verify URIs.
11
- **Experimental**
12
11
 
13
12
 
14
13
  ## Install
@@ -18,15 +17,14 @@ npm i url-sanitizer
18
17
  ```
19
18
 
20
19
  For browsers and web sites, standalone ESM builds are available in `dist/` directory.
21
- * node_modules/url-sanitizer/dist/url-sanitizer.js
22
20
  * node_modules/url-sanitizer/dist/url-sanitizer.min.js
23
- * node_modules/url-sanitizer/dist/url-sanitizer-wo-dompurify.js
24
21
  * node_modules/url-sanitizer/dist/url-sanitizer-wo-dompurify.min.js
25
22
 
26
23
  Or, download them from [Releases](https://github.com/asamuzaK/urlSanitizer/releases).
27
24
 
28
- NOTE: `url-sanitizer-wo-dompurify.js` and `url-sanitizer-wo-dompurify.min.js` are built without [DOMPurify](https://www.npmjs.com/package/dompurify).
29
- If you use them, make sure DOMPurify is exposed globally, e.g. `window.DOMPurify`.
25
+ NOTE: `url-sanitizer-wo-dompurify.min.js` is built without [DOMPurify](https://www.npmjs.com/package/dompurify).
26
+ If you use it, make sure DOMPurify is exposed globally, e.g. `window.DOMPurify`.
27
+
30
28
 
31
29
  ## Usage
32
30
 
@@ -1,4 +1,4 @@
1
- var{DOMPurify:ne}=globalThis,Q=ne;var X=/^[\w+/=-]+$/;var A=/data:[\w#&+./;=-]*,/,D=/data:[\w#&+./;=^]*base64,[\w+/=-]+/i,Y=/data:[\w#&+./;=-]*,[^"]+/g,J=/&#(x(?:00)?[\dA-F]{2}|0?\d{1,3});?/gi,K=/^(?:application\/(?:[\w#&.;-]+\+)?x|image\/svg\+x|text\/(?:ht|x))ml;?/;var V=/^[a-z][\da-z+.-]*$/,W=/^(?:ext|web)\+[a-z]+$/,O=/(?:java|vb)script/,S=/(?:java|vb)script|blob/,j=/%(?:2[27]|3[CE])|[<>"']/,Z=/%(?:2[27]|3[CE])/g,ee=/[<>"'\s]/g,te=/^%[\dA-F]{2}$/i;var b=t=>Object.prototype.toString.call(t).slice(8,-1),d=t=>typeof t=="string"||t instanceof String;var M=[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 P=["aaa","aaas","about","acap","acct","acd","acr","adiumxtra","adt","afp","afs","aim","amss","android","appdata","apt","ar","ark","at","attachment","aw","barion","beshare","bitcoin","bitcoincash","blob","bolo","brid","browserext","cabal","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","dis","dlna-playcontainer","dlna-playsingle","dns","dntp","doi","dpp","drm","dtmi","dtn","dvb","dvx","dweb","ed2k","eid","elsi","embedded","ens","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","http","https","hxxp","hxxps","hydrazone","hyper","iax","icap","icon","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","lorawan","lpa","lvlt","magnet","mailto","maps","market","matrix","message","microsoft.windows.camera","microsoft.windows.camera.multipicker","microsoft.windows.camera.picker","mid","mms","mongodb","moz","moz-extension","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-powerpoint","ms-project","ms-publisher","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-virtualtouchpad","ms-visio","ms-walk-to","ms-whiteboard","ms-whiteboard-cmd","ms-word","msnim","msrp","msrps","mss","mt","mtqp","mumble","mupdate","mvn","mvrp","mvrps","news","nfs","ni","nih","nntp","notes","num","ocf","oid","onenote","onenote-cmd","opaquelocktoken","openid","openpgp4fpr","otpauth","palm","paparazzi","payment","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","sieve","simpleledger","simplex","sip","sips","skype","smb","smp","sms","smtp","snmp","soap.beep","soap.beeps","soldat","spiffe","spotify","ssb","ssh","starknet","steam","stun","stuns","submit","svn","swh","swid","swidpath","tag","taler","teamspeak","tel","teliaeid","telnet","tftp","things","thismessage","tip","tn3270","tool","turn","turns","tv","udp","unreal","urn","ut2004","uuid-in-package","v-event","vemmi","ventrilo","ves","view-source","vnc","vscode","vscode-insiders","vsls","w3","wcr","web3","webcal","wifi","ws","wss","wtai","wyciwyg","xcon","xcon-userid","xfire","xftp","xmlrpc.beep","xmlrpc.beeps","xmpp","xrcp","xri","ymsgr","z39.50r","z39.50s"];var{FileReader:se}=globalThis;var G=t=>{if(!d(t))throw new TypeError(`Expected String but got ${b(t)}.`);let e=[];for(let s of t)e.push(`%${s.charCodeAt(0).toString(16).toUpperCase()}`);return e.join("")},I=t=>{d(t)&&te.test(t)&&(t=t.toUpperCase());let[e,s,r,i,o,n]=["&","#","<",">",'"',"'"].map(G),a;return t===e?a=`${e}amp;`:t===r?a=`${e}lt;`:t===i?a=`${e}gt;`:t===o?a=`${e}quot;`:t===n?a=`${e}${s}39;`:a=t,a},re=t=>{if(d(t)){if(!X.test(t))throw new Error(`Invalid base64 data: ${t}`)}else throw new TypeError(`Expected String but got ${b(t)}.`);let e=atob(t),s=Uint8Array.from([...e].map(o=>o.charCodeAt(0))),r=new Set(M),i;return s.every(o=>r.has(o))?i=e.replace(/\s/g,G):i=t,i},B=(t,e=0)=>{if(!d(t))throw new TypeError(`Expected String but got ${b(t)}.`);if(Number.isInteger(e)){if(e>16)throw new Error("Character references nested too deeply.")}else throw new TypeError(`Expected Number but got ${b(e)}.`);let s=decodeURIComponent(t);if(/&#/.test(s)){let r=new Set(M),i=[...s.matchAll(J)].reverse();for(let o of i){let[n,a]=o,p;if(/^x[\dA-F]+/i.test(a)?p=parseInt(`0${a}`,16):/^\d+/.test(a)&&(p=parseInt(a)),Number.isInteger(p)){let{index:u}=o,[l,f]=[s.substring(0,u),s.substring(u+n.length)];r.has(p)?(s=`${l}${String.fromCharCode(p)}${f}`,(/#x?$/.test(l)||/^#(?:x(?:00)?[2-7]|\d)/.test(f))&&(s=B(s,++e))):p<16*16&&(s=`${l}${f}`)}}}return s},ie=t=>new Promise((e,s)=>{let r=new se;r.addEventListener("error",()=>s(r.error)),r.addEventListener("abort",()=>e(r.result)),r.addEventListener("load",()=>e(r.result)),r.readAsDataURL(t)}),L=class{#e;constructor(){this.#e=new Set(P)}get(){return[...this.#e]}has(e){return this.#e.has(e)}add(e){if(d(e)){if(O.test(e)||!V.test(e))throw new Error(`Invalid scheme: ${e}`)}else throw new TypeError(`Expected String but got ${b(e)}.`);return this.#e.add(e),[...this.#e]}remove(e){return this.#e.delete(e)}verify(e){let s;if(d(e))try{let{protocol:r}=new URL(e),i=r.replace(/:$/,""),o=i.split("+");s=!O.test(i)&&W.test(i)||o.every(n=>this.#e.has(n))}catch{s=!1}return!!s}reset(){this.#e.clear();for(let e of P)this.#e.add(e)}};var N=class extends L{#e;#t;constructor(){super(),this.#e=0,this.#t=new Set}replace(e){if(!d(e))throw new TypeError(`Expected String but got ${b(e)}.`);let s=e;if(A.test(s)){let i=[...s.matchAll(Y)].reverse();for(let o of i){let[n]=o;D.test(n)&&([n]=D.exec(n)),this.#e++,this.#t.add(n);let a=this.sanitize(n,{allow:["data"]}),{index:p}=o,[u,l]=[s.substring(0,p),s.substring(p+n.length)];a?s=`${u}${a}${l}`:s=`${u}${l}`}}return s}purify(e){if(!d(e))throw new TypeError(`Expected String but got ${b(e)}.`);let s=Q.sanitize(decodeURIComponent(e));return s&&A.test(s)&&(s=this.replace(s)),s=s.replace(/(?:#|%23)$/,"").replace(/(?<!(?:#|%23).*)(?:\?|%3F)$/,""),encodeURI(s)}sanitize(e,s){if(this.#e>16)throw this.#e=0,new Error("Data URLs nested too deeply.");let{allow:r,deny:i,only:o,remove:n}=s??{},a=new Map([["blob",!1],["data",!1],["file",!1],["javascrpt",!1],["vbscript",!1]]),p=new Set,u=!1;if(Array.isArray(o)&&o.length){let f=super.get();for(let m of f)a.set(m,!1);let c=Object.values(o);for(let m of c)if(d(m)&&(m=m.trim(),!S.test(m))){if(super.has(m))a.set(m,!0);else{try{super.add(m)}catch{}super.has(m)&&(a.set(m,!0),p.add(m))}!u&&a.has(m)&&(u=a.get(m))}}else{if(Array.isArray(r)&&r.length){let f=Object.values(r);for(let c of f)if(d(c)&&(c=c.trim(),!S.test(c)))if(super.has(c))a.set(c,!0);else{try{super.add(c)}catch{}super.has(c)&&(a.set(c,!0),p.add(c))}}if(Array.isArray(i)&&i.length){let f=Object.values(i);for(let c of f)d(c)&&(c=c.trim(),c&&a.set(c,!1))}}let l;if(super.verify(e)){let{hash:f,href:c,pathname:m,protocol:w,search:v}=new URL(e),C=w.replace(/:$/,""),k=C.split("+"),U;if(u)U=k.every(y=>a.get(y));else for(let[y,R]of a.entries())if(U=R||C!==y&&k.every(h=>h!==y),!U)break;if(U){let y=k.includes("data"),R,h=c;if(y){let[_,...z]=m.split(","),T=`${z.join(",")}${v}${f}`,$=_.split(";"),F=$[$.length-1]==="base64",g=T;F&&(g=re(T));try{let q=B(g).trim(),{protocol:ae}=new URL(q);ae.replace(/:$/,"").split("+").some(oe=>S.test(oe))&&(h="")}catch{}let H=A.test(g);g!==T||H?H?g=this.replace(g):this.#t.has(e)?this.#t.delete(e):R=!0:this.#t.has(e)?this.#t.delete(e):R=!0,(!_||K.test(_))&&(g=this.purify(g)),h&&g?(F&&g!==T&&$.pop(),h=`${C}:${$.join(";")},${g}`):h=""}else R=!0;if(!y&&n&&j.test(h)){let _=j.exec(h),{index:z}=_;h=h.substring(0,z)}h?(l=h.replace(ee,G).replace(/%26/g,I),R&&(y||(l=l.replace(Z,I)),this.#e=0)):this.#e=0}p.size&&p.forEach(y=>{super.remove(y)})}return l||null}parse(e,s){if(!d(e))throw new TypeError(`Expected String but got ${b(e)}.`);let r=new Map([["input",e]]),i;if(this.verify(e)){let{protocol:o}=new URL(e);o==="blob:"?i=e:i=this.sanitize(e,s??{allow:["data","file"]})}if(i){let o=new URL(i),{pathname:n,protocol:a}=o,u=a.replace(/:$/,"").split("+").includes("data");if(r.set("valid",!0),u){let l=new Map,[f,...c]=n.split(","),m=`${c.join(",")}`,w=f.split(";"),v=w[w.length-1]==="base64";v&&w.pop(),l.set("mime",w.join(";")),l.set("base64",v),l.set("data",m),r.set("data",Object.fromEntries(l))}else r.set("data",null);for(let l in o){let f=o[l];d(f)&&r.set(l,f)}}else r.set("valid",!1);return Object.fromEntries(r)}reset(){super.reset(),this.#e=0,this.#t.clear()}},x=new N,de=async(t,e={allow:[],deny:[],only:[]})=>{let s;if(t&&d(t)){let r;try{let{protocol:i}=new URL(t);r=i.replace(/:$/,"")}catch{}if(r==="blob"){let{allow:i,deny:o,only:n}=e;if(Array.isArray(i)&&i.includes("blob")&&!(Array.isArray(o)&&o.includes("blob"))||Array.isArray(n)&&n.includes("blob")){let a;try{a=await fetch(t).then(p=>p.blob()).then(ie)}catch{}if(a){if(Array.isArray(n))n.includes("data")||n.push("data");else if(Array.isArray(i)&&(i.includes("data")||i.push("data"),Array.isArray(o)&&o.includes("data"))){let p=o.indexOf("data");o.splice(p,1)}s=x.sanitize(a,e)}}URL.revokeObjectURL(t)}else r&&(s=x.sanitize(t,e))}return s||null},fe=(t,e)=>{let s;if(t&&d(t)){let r;try{let{protocol:i}=new URL(t);r=i.replace(/:$/,"")}catch{}r==="blob"?URL.revokeObjectURL(t):r&&(s=x.sanitize(t,e))}return s||null},he=async t=>x.parse(t),ue=t=>x.parse(t),ge=async t=>x.verify(t),ye=t=>x.verify(t),be=x;export{be as default,ge as isURI,ye as isURISync,he as parseURL,ue as parseURLSync,de as sanitizeURL,fe as sanitizeURLSync};
1
+ var{DOMPurify:Q}=globalThis;var X=/^[\w+/=-]+$/;var A=/data:[\w#&+./;=-]*,/,j=/data:[\w#&+./;=^]*base64,[\w+/=-]+/i,Y=/data:[\w#&+./;=-]*,[^"]+/g,J=/&#(x(?:00)?[\dA-F]{2}|0?\d{1,3});?/gi,K=/^(?:application\/(?:[\w#&.;-]+\+)?x|image\/svg\+x|text\/(?:ht|x))ml;?/;var V=/^[a-z][\da-z+.-]*$/,W=/^(?:ext|web)\+[a-z]+$/,P=/(?:java|vb)script/,S=/(?:java|vb)script|blob/,M=/%(?:2[27]|3[CE])|[<>"']/,Z=/%(?:2[27]|3[CE])/g,ee=/[<>"'\s]/g,te=/^%[\dA-F]{2}$/i;var b=t=>Object.prototype.toString.call(t).slice(8,-1),d=t=>typeof t=="string"||t instanceof String;var{FileReader:se}=globalThis;var L=[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 G=["aaa","aaas","about","acap","acct","acd","acr","adiumxtra","adt","afp","afs","aim","amss","android","appdata","apt","ar","ark","at","attachment","aw","barion","beshare","bitcoin","bitcoincash","blob","bolo","brid","browserext","cabal","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","dis","dlna-playcontainer","dlna-playsingle","dns","dntp","doi","dpp","drm","dtmi","dtn","dvb","dvx","dweb","ed2k","eid","elsi","embedded","ens","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","http","https","hxxp","hxxps","hydrazone","hyper","iax","icap","icon","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","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","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-powerpoint","ms-project","ms-publisher","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-virtualtouchpad","ms-visio","ms-walk-to","ms-whiteboard","ms-whiteboard-cmd","ms-word","msnim","msrp","msrps","mss","mt","mtqp","mumble","mupdate","mvn","mvrp","mvrps","news","nfs","ni","nih","nntp","notes","num","ocf","oid","onenote","onenote-cmd","opaquelocktoken","openid","openpgp4fpr","otpauth","palm","paparazzi","payment","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","sieve","simpleledger","simplex","sip","sips","skype","smb","smp","sms","smtp","snmp","soap.beep","soap.beeps","soldat","spiffe","spotify","ssb","ssh","starknet","steam","stun","stuns","submit","svn","swh","swid","swidpath","tag","taler","teamspeak","tel","teliaeid","telnet","tftp","things","thismessage","tip","tn3270","tool","turn","turns","tv","udp","unreal","urn","ut2004","uuid-in-package","v-event","vemmi","ventrilo","ves","view-source","vnc","vscode","vscode-insiders","vsls","w3","wcr","web3","webcal","wifi","ws","wss","wtai","wyciwyg","xcon","xcon-userid","xfire","xftp","xmlrpc.beep","xmlrpc.beeps","xmpp","xrcp","xri","ymsgr","z39.50r","z39.50s"];var k=t=>{if(!d(t))throw new TypeError(`Expected String but got ${b(t)}.`);let e=[];for(let s of t)e.push(`%${s.charCodeAt(0).toString(16).toUpperCase()}`);return e.join("")},I=t=>{d(t)&&te.test(t)&&(t=t.toUpperCase());let[e,s,r,i,a,n]=["&","#","<",">",'"',"'"].map(k),o;return t===e?o=`${e}amp;`:t===r?o=`${e}lt;`:t===i?o=`${e}gt;`:t===a?o=`${e}quot;`:t===n?o=`${e}${s}39;`:o=t,o},re=t=>{if(d(t)){if(!X.test(t))throw new Error(`Invalid base64 data: ${t}`)}else throw new TypeError(`Expected String but got ${b(t)}.`);let e=atob(t),s=Uint8Array.from([...e].map(a=>a.charCodeAt(0))),r=new Set(L),i;return s.every(a=>r.has(a))?i=e.replace(/\s/g,k):i=t,i},B=(t,e=0)=>{if(!d(t))throw new TypeError(`Expected String but got ${b(t)}.`);if(Number.isInteger(e)){if(e>16)throw new Error("Character references nested too deeply.")}else throw new TypeError(`Expected Number but got ${b(e)}.`);let s=decodeURIComponent(t);if(/&#/.test(s)){let r=new Set(L),i=[...s.matchAll(J)].reverse();for(let a of i){let[n,o]=a,p;if(/^x[\dA-F]+/i.test(o)?p=parseInt(`0${o}`,16):/^\d+/.test(o)&&(p=parseInt(o)),Number.isInteger(p)){let{index:u}=a,[l,f]=[s.substring(0,u),s.substring(u+n.length)];r.has(p)?(s=`${l}${String.fromCharCode(p)}${f}`,(/#x?$/.test(l)||/^#(?:x(?:00)?[2-7]|\d)/.test(f))&&(s=B(s,++e))):p<16*16&&(s=`${l}${f}`)}}}return s},ie=t=>new Promise((e,s)=>{let r=new se;r.addEventListener("error",()=>s(r.error)),r.addEventListener("abort",()=>e(r.result)),r.addEventListener("load",()=>e(r.result)),r.readAsDataURL(t)}),C=class{#e;constructor(){this.#e=new Set(G)}get(){return[...this.#e]}has(e){return this.#e.has(e)}add(e){if(d(e)){if(P.test(e)||!V.test(e))throw new Error(`Invalid scheme: ${e}`)}else throw new TypeError(`Expected String but got ${b(e)}.`);return this.#e.add(e),[...this.#e]}remove(e){return this.#e.delete(e)}verify(e){let s;if(d(e))try{let{protocol:r}=new URL(e),i=r.replace(/:$/,""),a=i.split("+");s=!P.test(i)&&W.test(i)||a.every(n=>this.#e.has(n))}catch{s=!1}return!!s}reset(){this.#e.clear();for(let e of G)this.#e.add(e)}};var N=class extends C{#e;#t;constructor(){super(),this.#e=0,this.#t=new Set}replace(e){if(!d(e))throw new TypeError(`Expected String but got ${b(e)}.`);let s=e;if(A.test(s)){let i=[...s.matchAll(Y)].reverse();for(let a of i){let[n]=a;j.test(n)&&([n]=j.exec(n)),this.#e++,this.#t.add(n);let o=this.sanitize(n,{allow:["data"]}),{index:p}=a,[u,l]=[s.substring(0,p),s.substring(p+n.length)];o?s=`${u}${o}${l}`:s=`${u}${l}`}}return s}purify(e){if(!d(e))throw new TypeError(`Expected String but got ${b(e)}.`);let s=Q.sanitize(decodeURIComponent(e));return s&&A.test(s)&&(s=this.replace(s)),s=s.replace(/(?:#|%23)$/,"").replace(/(?<!(?:#|%23).*)(?:\?|%3F)$/,""),encodeURI(s)}sanitize(e,s){if(this.#e>16)throw this.#e=0,new Error("Data URLs nested too deeply.");let{allow:r,deny:i,only:a,remove:n}=s??{},o=new Map([["blob",!1],["data",!1],["file",!1],["javascrpt",!1],["vbscript",!1]]),p=new Set,u=!1;if(Array.isArray(a)&&a.length){let f=super.get();for(let m of f)o.set(m,!1);let c=Object.values(a);for(let m of c)if(d(m)&&(m=m.trim(),!S.test(m))){if(super.has(m))o.set(m,!0);else{try{super.add(m)}catch{}super.has(m)&&(o.set(m,!0),p.add(m))}!u&&o.has(m)&&(u=o.get(m))}}else{if(Array.isArray(r)&&r.length){let f=Object.values(r);for(let c of f)if(d(c)&&(c=c.trim(),!S.test(c)))if(super.has(c))o.set(c,!0);else{try{super.add(c)}catch{}super.has(c)&&(o.set(c,!0),p.add(c))}}if(Array.isArray(i)&&i.length){let f=Object.values(i);for(let c of f)d(c)&&(c=c.trim(),c&&o.set(c,!1))}}let l;if(super.verify(e)){let{hash:f,href:c,pathname:m,protocol:w,search:v}=new URL(e),z=w.replace(/:$/,""),D=z.split("+"),U;if(u)U=D.every(y=>o.get(y));else for(let[y,R]of o.entries())if(U=R||z!==y&&D.every(h=>h!==y),!U)break;if(U){let y=D.includes("data"),R,h=c;if(y){let[_,...O]=m.split(","),T=`${O.join(",")}${v}${f}`,$=_.split(";"),F=$[$.length-1]==="base64",g=T;F&&(g=re(T));try{let q=B(g).trim(),{protocol:oe}=new URL(q);oe.replace(/:$/,"").split("+").some(ae=>S.test(ae))&&(h="")}catch{}let H=A.test(g);g!==T||H?H?g=this.replace(g):this.#t.has(e)?this.#t.delete(e):R=!0:this.#t.has(e)?this.#t.delete(e):R=!0,(!_||K.test(_))&&(g=this.purify(g)),h&&g?(F&&g!==T&&$.pop(),h=`${z}:${$.join(";")},${g}`):h=""}else R=!0;if(!y&&n&&M.test(h)){let _=M.exec(h),{index:O}=_;h=h.substring(0,O)}h?(l=h.replace(ee,k).replace(/%26/g,I),R&&(y||(l=l.replace(Z,I)),this.#e=0)):this.#e=0}p.size&&p.forEach(y=>{super.remove(y)})}return l||null}parse(e,s){if(!d(e))throw new TypeError(`Expected String but got ${b(e)}.`);let r=new Map([["input",e]]),i;if(this.verify(e)){let{protocol:a}=new URL(e);a==="blob:"?i=e:i=this.sanitize(e,s??{allow:["data","file"]})}if(i){let a=new URL(i),{pathname:n,protocol:o}=a,u=o.replace(/:$/,"").split("+").includes("data");if(r.set("valid",!0),u){let l=new Map,[f,...c]=n.split(","),m=`${c.join(",")}`,w=f.split(";"),v=w[w.length-1]==="base64";v&&w.pop(),l.set("mime",w.join(";")),l.set("base64",v),l.set("data",m),r.set("data",Object.fromEntries(l))}else r.set("data",null);for(let l in a){let f=a[l];d(f)&&r.set(l,f)}}else r.set("valid",!1);return Object.fromEntries(r)}reset(){super.reset(),this.#e=0,this.#t.clear()}},x=new N,me=async(t,e={allow:[],deny:[],only:[]})=>{let s;if(t&&d(t)){let r;try{let{protocol:i}=new URL(t);r=i.replace(/:$/,"")}catch{}if(r==="blob"){let{allow:i,deny:a,only:n}=e;if(Array.isArray(i)&&i.includes("blob")&&!(Array.isArray(a)&&a.includes("blob"))||Array.isArray(n)&&n.includes("blob")){let o;try{o=await fetch(t).then(p=>p.blob()).then(ie)}catch{}if(o){if(Array.isArray(n))n.includes("data")||n.push("data");else if(Array.isArray(i)&&(i.includes("data")||i.push("data"),Array.isArray(a)&&a.includes("data"))){let p=a.indexOf("data");a.splice(p,1)}s=x.sanitize(o,e)}}URL.revokeObjectURL(t)}else r&&(s=x.sanitize(t,e))}return s||null},de=(t,e)=>{let s;if(t&&d(t)){let r;try{let{protocol:i}=new URL(t);r=i.replace(/:$/,"")}catch{}r==="blob"?URL.revokeObjectURL(t):r&&(s=x.sanitize(t,e))}return s||null},fe=async t=>x.parse(t),he=t=>x.parse(t),ue=async t=>x.verify(t),ge=t=>x.verify(t),ye=x;export{ye as default,ue as isURI,ge as isURISync,fe as parseURL,he as parseURLSync,me as sanitizeURL,de as sanitizeURLSync};
2
2
  /*!
3
3
  * URL Sanitizer
4
4
  *
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../bundle_wo_dompurify/mjs/dompurify.js", "../bundle_wo_dompurify/mjs/constant.js", "../bundle_wo_dompurify/mjs/common.js", "../bundle_wo_dompurify/lib/file/text-chars.json", "../bundle_wo_dompurify/lib/iana/uri-schemes.json", "../bundle_wo_dompurify/mjs/file-reader.js", "../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 default DOMPurify;\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#&+./;=-]*,[^\"]+/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 = /%(?:2[27]|3[CE])|[<>\"']/;\nexport const REG_TAG_QUOT_ENC_G = /%(?:2[27]|3[CE])/g;\nexport const REG_TAG_QUOT_SPACE_G = /[<>\"'\\s]/g;\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 {*} 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 {*} o - object to check\n * @returns {boolean} - result\n */\nexport const isString = o => typeof o === 'string' || o instanceof String;\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\",\"aim\",\"amss\",\"android\",\"appdata\",\"apt\",\"ar\",\"ark\",\"at\",\"attachment\",\"aw\",\"barion\",\"beshare\",\"bitcoin\",\"bitcoincash\",\"blob\",\"bolo\",\"brid\",\"browserext\",\"cabal\",\"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\",\"dis\",\"dlna-playcontainer\",\"dlna-playsingle\",\"dns\",\"dntp\",\"doi\",\"dpp\",\"drm\",\"dtmi\",\"dtn\",\"dvb\",\"dvx\",\"dweb\",\"ed2k\",\"eid\",\"elsi\",\"embedded\",\"ens\",\"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\",\"http\",\"https\",\"hxxp\",\"hxxps\",\"hydrazone\",\"hyper\",\"iax\",\"icap\",\"icon\",\"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\",\"lorawan\",\"lpa\",\"lvlt\",\"magnet\",\"mailto\",\"maps\",\"market\",\"matrix\",\"message\",\"microsoft.windows.camera\",\"microsoft.windows.camera.multipicker\",\"microsoft.windows.camera.picker\",\"mid\",\"mms\",\"mongodb\",\"moz\",\"moz-extension\",\"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-powerpoint\",\"ms-project\",\"ms-publisher\",\"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-virtualtouchpad\",\"ms-visio\",\"ms-walk-to\",\"ms-whiteboard\",\"ms-whiteboard-cmd\",\"ms-word\",\"msnim\",\"msrp\",\"msrps\",\"mss\",\"mt\",\"mtqp\",\"mumble\",\"mupdate\",\"mvn\",\"mvrp\",\"mvrps\",\"news\",\"nfs\",\"ni\",\"nih\",\"nntp\",\"notes\",\"num\",\"ocf\",\"oid\",\"onenote\",\"onenote-cmd\",\"opaquelocktoken\",\"openid\",\"openpgp4fpr\",\"otpauth\",\"palm\",\"paparazzi\",\"payment\",\"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\",\"sieve\",\"simpleledger\",\"simplex\",\"sip\",\"sips\",\"skype\",\"smb\",\"smp\",\"sms\",\"smtp\",\"snmp\",\"soap.beep\",\"soap.beeps\",\"soldat\",\"spiffe\",\"spotify\",\"ssb\",\"ssh\",\"starknet\",\"steam\",\"stun\",\"stuns\",\"submit\",\"svn\",\"swh\",\"swid\",\"swidpath\",\"tag\",\"taler\",\"teamspeak\",\"tel\",\"teliaeid\",\"telnet\",\"tftp\",\"things\",\"thismessage\",\"tip\",\"tn3270\",\"tool\",\"turn\",\"turns\",\"tv\",\"udp\",\"unreal\",\"urn\",\"ut2004\",\"uuid-in-package\",\"v-event\",\"vemmi\",\"ventrilo\",\"ves\",\"view-source\",\"vnc\",\"vscode\",\"vscode-insiders\",\"vsls\",\"w3\",\"wcr\",\"web3\",\"webcal\",\"wifi\",\"ws\",\"wss\",\"wtai\",\"wyciwyg\",\"xcon\",\"xcon-userid\",\"xfire\",\"xftp\",\"xmlrpc.beep\",\"xmlrpc.beeps\",\"xmpp\",\"xrcp\",\"xri\",\"ymsgr\",\"z39.50r\",\"z39.50s\"]\n", "/**\n * file-reader.js\n */\n\nconst { FileReader } = globalThis;\n\nexport {\n FileReader\n};\n", "/**\n * uri-util.js\n */\n\n/* shared */\nimport textChars from '../lib/file/text-chars.json' assert { type: 'json' };\nimport uriSchemes from '../lib/iana/uri-schemes.json' assert { type: 'json' };\nimport { getType, isString } from './common.js';\nimport { FileReader } from './file-reader.js';\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, getURLEncodedString,\n parseBase64, 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, REG_TAG_QUOT_ENC_G, REG_TAG_QUOT_SPACE_G\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 */\nexport class URLSanitizer extends URISchemes {\n /* private fields */\n #nest;\n #recurse;\n\n /**\n * construct\n */\n constructor() {\n super();\n this.#nest = 0;\n this.#recurse = new Set();\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 * @param {boolean} [opt.remove] - remove tag and/or quote and the rest\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, remove } = 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 && remove && REG_TAG_QUOT.test(urlToSanitize)) {\n const item = REG_TAG_QUOT.exec(urlToSanitize);\n const { index } = item;\n urlToSanitize = urlToSanitize.substring(0, index);\n }\n if (urlToSanitize) {\n sanitizedUrl = urlToSanitize\n .replace(REG_TAG_QUOT_SPACE_G, getURLEncodedString)\n .replace(/%26/g, escapeURLEncodedHTMLChars);\n if (finalize) {\n if (!isDataUrl) {\n sanitizedUrl = sanitizedUrl\n .replace(REG_TAG_QUOT_ENC_G, escapeURLEncodedHTMLChars);\n }\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 * @param {boolean} [opt.remove] - remove tag and/or quote and the rest\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};\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 * @param {boolean} [opt.remove] - remove tag and/or quote and the rest\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 * @param {boolean} [opt.remove] - remove tag and/or quote and the rest\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", "dompurify_default", "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_TAG_QUOT_ENC_G", "REG_TAG_QUOT_SPACE_G", "REG_URL_ENC", "getType", "o", "isString", "text_chars_default", "uri_schemes_default", "FileReader", "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_default", "url", "opt", "allow", "deny", "only", "remove", "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", "REG_TAG_QUOT_SPACE_G", "getURLEncodedString", "escapeURLEncodedHTMLChars", "REG_TAG_QUOT_ENC_G", "parsedUrl", "urlObj", "urlSanitizer", "sanitizeURL", "res", "r", "createDataURLFromBlob", "i", "sanitizeURLSync", "parseURL", "parseURLSync", "isURI", "uri", "isURISync", "sanitizer_default"]
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#&+./;=-]*,[^\"]+/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 = /%(?:2[27]|3[CE])|[<>\"']/;\nexport const REG_TAG_QUOT_ENC_G = /%(?:2[27]|3[CE])/g;\nexport const REG_TAG_QUOT_SPACE_G = /[<>\"'\\s]/g;\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 {*} 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 {*} 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\",\"aim\",\"amss\",\"android\",\"appdata\",\"apt\",\"ar\",\"ark\",\"at\",\"attachment\",\"aw\",\"barion\",\"beshare\",\"bitcoin\",\"bitcoincash\",\"blob\",\"bolo\",\"brid\",\"browserext\",\"cabal\",\"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\",\"dis\",\"dlna-playcontainer\",\"dlna-playsingle\",\"dns\",\"dntp\",\"doi\",\"dpp\",\"drm\",\"dtmi\",\"dtn\",\"dvb\",\"dvx\",\"dweb\",\"ed2k\",\"eid\",\"elsi\",\"embedded\",\"ens\",\"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\",\"http\",\"https\",\"hxxp\",\"hxxps\",\"hydrazone\",\"hyper\",\"iax\",\"icap\",\"icon\",\"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\",\"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\",\"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-powerpoint\",\"ms-project\",\"ms-publisher\",\"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-virtualtouchpad\",\"ms-visio\",\"ms-walk-to\",\"ms-whiteboard\",\"ms-whiteboard-cmd\",\"ms-word\",\"msnim\",\"msrp\",\"msrps\",\"mss\",\"mt\",\"mtqp\",\"mumble\",\"mupdate\",\"mvn\",\"mvrp\",\"mvrps\",\"news\",\"nfs\",\"ni\",\"nih\",\"nntp\",\"notes\",\"num\",\"ocf\",\"oid\",\"onenote\",\"onenote-cmd\",\"opaquelocktoken\",\"openid\",\"openpgp4fpr\",\"otpauth\",\"palm\",\"paparazzi\",\"payment\",\"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\",\"sieve\",\"simpleledger\",\"simplex\",\"sip\",\"sips\",\"skype\",\"smb\",\"smp\",\"sms\",\"smtp\",\"snmp\",\"soap.beep\",\"soap.beeps\",\"soldat\",\"spiffe\",\"spotify\",\"ssb\",\"ssh\",\"starknet\",\"steam\",\"stun\",\"stuns\",\"submit\",\"svn\",\"swh\",\"swid\",\"swidpath\",\"tag\",\"taler\",\"teamspeak\",\"tel\",\"teliaeid\",\"telnet\",\"tftp\",\"things\",\"thismessage\",\"tip\",\"tn3270\",\"tool\",\"turn\",\"turns\",\"tv\",\"udp\",\"unreal\",\"urn\",\"ut2004\",\"uuid-in-package\",\"v-event\",\"vemmi\",\"ventrilo\",\"ves\",\"view-source\",\"vnc\",\"vscode\",\"vscode-insiders\",\"vsls\",\"w3\",\"wcr\",\"web3\",\"webcal\",\"wifi\",\"ws\",\"wss\",\"wtai\",\"wyciwyg\",\"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, getURLEncodedString,\n parseBase64, 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, REG_TAG_QUOT_ENC_G, REG_TAG_QUOT_SPACE_G\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 */\nexport class URLSanitizer extends URISchemes {\n /* private fields */\n #nest;\n #recurse;\n\n /**\n * construct\n */\n constructor() {\n super();\n this.#nest = 0;\n this.#recurse = new Set();\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 * @param {boolean} [opt.remove] - remove tag and/or quote and the rest\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, remove } = 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 && remove && REG_TAG_QUOT.test(urlToSanitize)) {\n const item = REG_TAG_QUOT.exec(urlToSanitize);\n const { index } = item;\n urlToSanitize = urlToSanitize.substring(0, index);\n }\n if (urlToSanitize) {\n sanitizedUrl = urlToSanitize\n .replace(REG_TAG_QUOT_SPACE_G, getURLEncodedString)\n .replace(/%26/g, escapeURLEncodedHTMLChars);\n if (finalize) {\n if (!isDataUrl) {\n sanitizedUrl = sanitizedUrl\n .replace(REG_TAG_QUOT_ENC_G, escapeURLEncodedHTMLChars);\n }\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 * @param {boolean} [opt.remove] - remove tag and/or quote and the rest\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};\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 * @param {boolean} [opt.remove] - remove tag and/or quote and the rest\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 * @param {boolean} [opt.remove] - remove tag and/or quote and the rest\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_TAG_QUOT_ENC_G", "REG_TAG_QUOT_SPACE_G", "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", "remove", "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", "REG_TAG_QUOT_SPACE_G", "getURLEncodedString", "escapeURLEncodedHTMLChars", "REG_TAG_QUOT_ENC_G", "parsedUrl", "urlObj", "urlSanitizer", "sanitizeURL", "res", "r", "createDataURLFromBlob", "i", "sanitizeURLSync", "parseURL", "parseURLSync", "isURI", "uri", "isURISync", "sanitizer_default"]
7
7
  }
@@ -1,5 +1,5 @@
1
- var Mn=Object.create;var $t=Object.defineProperty;var kn=Object.getOwnPropertyDescriptor;var Pn=Object.getOwnPropertyNames;var Gn=Object.getPrototypeOf,Fn=Object.prototype.hasOwnProperty;var zn=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var Hn=(s,t,r,p)=>{if(t&&typeof t=="object"||typeof t=="function")for(let c of Pn(t))!Fn.call(s,c)&&c!==r&&$t(s,c,{get:()=>t[c],enumerable:!(p=kn(t,c))||p.enumerable});return s};var $n=(s,t,r)=>(r=s!=null?Mn(Gn(s)):{},Hn(t||!s||!s.__esModule?$t(r,"default",{value:s,enumerable:!0}):r,s));var Bt=zn((Ke,Qe)=>{(function(s,t){typeof Ke=="object"&&typeof Qe<"u"?Qe.exports=t():typeof define=="function"&&define.amd?define(t):(s=typeof globalThis<"u"?globalThis:s||self,s.DOMPurify=t())})(Ke,function(){"use strict";let{entries:s,setPrototypeOf:t,isFrozen:r,getPrototypeOf:p,getOwnPropertyDescriptor:c}=Object,{freeze:l,seal:d,create:u}=Object,{apply:A,construct:v}=typeof Reflect<"u"&&Reflect;l||(l=function(i){return i}),d||(d=function(i){return i}),A||(A=function(i,g,m){return i.apply(g,m)}),v||(v=function(i,g){return new i(...g)});let R=_(Array.prototype.forEach),w=_(Array.prototype.pop),E=_(Array.prototype.push),y=_(String.prototype.toLowerCase),z=_(String.prototype.toString),ee=_(String.prototype.match),B=_(String.prototype.replace),me=_(String.prototype.indexOf),te=_(String.prototype.trim),b=_(RegExp.prototype.test),G=q(TypeError);function _(h){return function(i){for(var g=arguments.length,m=new Array(g>1?g-1:0),I=1;I<g;I++)m[I-1]=arguments[I];return A(h,i,m)}}function q(h){return function(){for(var i=arguments.length,g=new Array(i),m=0;m<i;m++)g[m]=arguments[m];return v(h,g)}}function f(h,i){let g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:y;t&&t(h,null);let m=i.length;for(;m--;){let I=i[m];if(typeof I=="string"){let W=g(I);W!==I&&(r(i)||(i[m]=W),I=W)}h[I]=!0}return h}function ne(h){for(let i=0;i<h.length;i++)c(h,i)===void 0&&(h[i]=null);return h}function F(h){let i=u(null);for(let[g,m]of s(h))c(h,g)!==void 0&&(Array.isArray(m)?i[g]=ne(m):m&&typeof m=="object"&&m.constructor===Object?i[g]=F(m):i[g]=m);return i}function V(h,i){for(;h!==null;){let m=c(h,i);if(m){if(m.get)return _(m.get);if(typeof m.value=="function")return _(m.value)}h=p(h)}function g(m){return console.warn("fallback value for",m),null}return g}let M=l(["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","section","select","shadow","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"]),se=l(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),oe=l(["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"]),Ce=l(["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"]),Te=l(["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"]),Ne=l(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),at=l(["#text"]),lt=l(["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","face","for","headers","height","hidden","high","href","hreflang","id","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","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),ve=l(["accent-height","accumulate","additive","alignment-baseline","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","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","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","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","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","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"]),ct=l(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","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"]),_e=l(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),nn=d(/\{\{[\w\W]*|[\w\W]*\}\}/gm),sn=d(/<%[\w\W]*|[\w\W]*%>/gm),on=d(/\${[\w\W]*}/gm),rn=d(/^data-[\-\w.\u00B7-\uFFFF]/),an=d(/^aria-[\-\w]+$/),pt=d(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),ln=d(/^(?:\w+script|data):/i),cn=d(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),ft=d(/^html$/i);var mt=Object.freeze({__proto__:null,MUSTACHE_EXPR:nn,ERB_EXPR:sn,TMPLIT_EXPR:on,DATA_ATTR:rn,ARIA_ATTR:an,IS_ALLOWED_URI:pt,IS_SCRIPT_OR_DATA:ln,ATTR_WHITESPACE:cn,DOCTYPE_NAME:ft});let pn=function(){return typeof window>"u"?null:window},fn=function(i,g){if(typeof i!="object"||typeof i.createPolicy!="function")return null;let m=null,I="data-tt-policy-suffix";g&&g.hasAttribute(I)&&(m=g.getAttribute(I));let W="dompurify"+(m?"#"+m:"");try{return i.createPolicy(W,{createHTML(re){return re},createScriptURL(re){return re}})}catch{return console.warn("TrustedTypes policy "+W+" could not be created."),null}};function ut(){let h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:pn(),i=a=>ut(a);if(i.version="3.0.8",i.removed=[],!h||!h.document||h.document.nodeType!==9)return i.isSupported=!1,i;let{document:g}=h,m=g,I=m.currentScript,{DocumentFragment:W,HTMLTemplateElement:re,Node:Ie,Element:dt,NodeFilter:Ue,NamedNodeMap:un=h.NamedNodeMap||h.MozNamedAttrMap,HTMLFormElement:dn,DOMParser:hn,trustedTypes:Ae}=h,Re=dt.prototype,gn=V(Re,"cloneNode"),En=V(Re,"nextSibling"),Tn=V(Re,"childNodes"),Me=V(Re,"parentNode");if(typeof re=="function"){let a=g.createElement("template");a.content&&a.content.ownerDocument&&(g=a.content.ownerDocument)}let U,ue="",{implementation:ke,createNodeIterator:_n,createDocumentFragment:An,getElementsByTagName:Rn}=g,{importNode:yn}=m,H={};i.isSupported=typeof s=="function"&&typeof Me=="function"&&ke&&ke.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:Pe,ERB_EXPR:Ge,TMPLIT_EXPR:Fe,DATA_ATTR:bn,ARIA_ATTR:Sn,IS_SCRIPT_OR_DATA:wn,ATTR_WHITESPACE:ht}=mt,{IS_ALLOWED_URI:gt}=mt,x=null,Et=f({},[...M,...se,...oe,...Te,...at]),L=null,Tt=f({},[...lt,...ve,...ct,..._e]),S=Object.seal(u(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}})),de=null,ze=null,_t=!0,He=!0,At=!1,Rt=!0,ie=!1,K=!1,$e=!1,Be=!1,ae=!1,ye=!1,be=!1,yt=!0,bt=!1,xn="user-content-",We=!0,he=!1,le={},ce=null,St=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"]),wt=null,xt=f({},["audio","video","img","source","image","track"]),je=null,Lt=f({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Se="http://www.w3.org/1998/Math/MathML",we="http://www.w3.org/2000/svg",j="http://www.w3.org/1999/xhtml",pe=j,Ye=!1,Xe=null,Ln=f({},[Se,we,j],z),ge=null,Dn=["application/xhtml+xml","text/html"],On="text/html",D=null,fe=null,Cn=g.createElement("form"),Dt=function(e){return e instanceof RegExp||e instanceof Function},qe=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(fe&&fe===e)){if((!e||typeof e!="object")&&(e={}),e=F(e),ge=Dn.indexOf(e.PARSER_MEDIA_TYPE)===-1?On:e.PARSER_MEDIA_TYPE,D=ge==="application/xhtml+xml"?z:y,x="ALLOWED_TAGS"in e?f({},e.ALLOWED_TAGS,D):Et,L="ALLOWED_ATTR"in e?f({},e.ALLOWED_ATTR,D):Tt,Xe="ALLOWED_NAMESPACES"in e?f({},e.ALLOWED_NAMESPACES,z):Ln,je="ADD_URI_SAFE_ATTR"in e?f(F(Lt),e.ADD_URI_SAFE_ATTR,D):Lt,wt="ADD_DATA_URI_TAGS"in e?f(F(xt),e.ADD_DATA_URI_TAGS,D):xt,ce="FORBID_CONTENTS"in e?f({},e.FORBID_CONTENTS,D):St,de="FORBID_TAGS"in e?f({},e.FORBID_TAGS,D):{},ze="FORBID_ATTR"in e?f({},e.FORBID_ATTR,D):{},le="USE_PROFILES"in e?e.USE_PROFILES:!1,_t=e.ALLOW_ARIA_ATTR!==!1,He=e.ALLOW_DATA_ATTR!==!1,At=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Rt=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,ie=e.SAFE_FOR_TEMPLATES||!1,K=e.WHOLE_DOCUMENT||!1,ae=e.RETURN_DOM||!1,ye=e.RETURN_DOM_FRAGMENT||!1,be=e.RETURN_TRUSTED_TYPE||!1,Be=e.FORCE_BODY||!1,yt=e.SANITIZE_DOM!==!1,bt=e.SANITIZE_NAMED_PROPS||!1,We=e.KEEP_CONTENT!==!1,he=e.IN_PLACE||!1,gt=e.ALLOWED_URI_REGEXP||pt,pe=e.NAMESPACE||j,S=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&Dt(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(S.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&Dt(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(S.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(S.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),ie&&(He=!1),ye&&(ae=!0),le&&(x=f({},at),L=[],le.html===!0&&(f(x,M),f(L,lt)),le.svg===!0&&(f(x,se),f(L,ve),f(L,_e)),le.svgFilters===!0&&(f(x,oe),f(L,ve),f(L,_e)),le.mathMl===!0&&(f(x,Te),f(L,ct),f(L,_e))),e.ADD_TAGS&&(x===Et&&(x=F(x)),f(x,e.ADD_TAGS,D)),e.ADD_ATTR&&(L===Tt&&(L=F(L)),f(L,e.ADD_ATTR,D)),e.ADD_URI_SAFE_ATTR&&f(je,e.ADD_URI_SAFE_ATTR,D),e.FORBID_CONTENTS&&(ce===St&&(ce=F(ce)),f(ce,e.FORBID_CONTENTS,D)),We&&(x["#text"]=!0),K&&f(x,["html","head","body"]),x.table&&(f(x,["tbody"]),delete de.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!="function")throw G('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw G('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');U=e.TRUSTED_TYPES_POLICY,ue=U.createHTML("")}else U===void 0&&(U=fn(Ae,I)),U!==null&&typeof ue=="string"&&(ue=U.createHTML(""));l&&l(e),fe=e}},Ot=f({},["mi","mo","mn","ms","mtext"]),Ct=f({},["foreignobject","desc","title","annotation-xml"]),Nn=f({},["title","style","font","a","script"]),Nt=f({},[...se,...oe,...Ce]),vt=f({},[...Te,...Ne]),vn=function(e){let n=Me(e);(!n||!n.tagName)&&(n={namespaceURI:pe,tagName:"template"});let o=y(e.tagName),T=y(n.tagName);return Xe[e.namespaceURI]?e.namespaceURI===we?n.namespaceURI===j?o==="svg":n.namespaceURI===Se?o==="svg"&&(T==="annotation-xml"||Ot[T]):!!Nt[o]:e.namespaceURI===Se?n.namespaceURI===j?o==="math":n.namespaceURI===we?o==="math"&&Ct[T]:!!vt[o]:e.namespaceURI===j?n.namespaceURI===we&&!Ct[T]||n.namespaceURI===Se&&!Ot[T]?!1:!vt[o]&&(Nn[o]||!Nt[o]):!!(ge==="application/xhtml+xml"&&Xe[e.namespaceURI]):!1},Q=function(e){E(i.removed,{element:e});try{e.parentNode.removeChild(e)}catch{e.remove()}},Ve=function(e,n){try{E(i.removed,{attribute:n.getAttributeNode(e),from:n})}catch{E(i.removed,{attribute:null,from:n})}if(n.removeAttribute(e),e==="is"&&!L[e])if(ae||ye)try{Q(n)}catch{}else try{n.setAttribute(e,"")}catch{}},It=function(e){let n=null,o=null;if(Be)e="<remove></remove>"+e;else{let N=ee(e,/^[\r\n\t ]+/);o=N&&N[0]}ge==="application/xhtml+xml"&&pe===j&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");let T=U?U.createHTML(e):e;if(pe===j)try{n=new hn().parseFromString(T,ge)}catch{}if(!n||!n.documentElement){n=ke.createDocument(pe,"template",null);try{n.documentElement.innerHTML=Ye?ue:T}catch{}}let C=n.body||n.documentElement;return e&&o&&C.insertBefore(g.createTextNode(o),C.childNodes[0]||null),pe===j?Rn.call(n,K?"html":"body")[0]:K?n.documentElement:C},Ut=function(e){return _n.call(e.ownerDocument||e,e,Ue.SHOW_ELEMENT|Ue.SHOW_COMMENT|Ue.SHOW_TEXT,null)},In=function(e){return e instanceof dn&&(typeof e.nodeName!="string"||typeof e.textContent!="string"||typeof e.removeChild!="function"||!(e.attributes instanceof un)||typeof e.removeAttribute!="function"||typeof e.setAttribute!="function"||typeof e.namespaceURI!="string"||typeof e.insertBefore!="function"||typeof e.hasChildNodes!="function")},Mt=function(e){return typeof Ie=="function"&&e instanceof Ie},Y=function(e,n,o){H[e]&&R(H[e],T=>{T.call(i,n,o,fe)})},kt=function(e){let n=null;if(Y("beforeSanitizeElements",e,null),In(e))return Q(e),!0;let o=D(e.nodeName);if(Y("uponSanitizeElement",e,{tagName:o,allowedTags:x}),e.hasChildNodes()&&!Mt(e.firstElementChild)&&b(/<[/\w]/g,e.innerHTML)&&b(/<[/\w]/g,e.textContent))return Q(e),!0;if(!x[o]||de[o]){if(!de[o]&&Gt(o)&&(S.tagNameCheck instanceof RegExp&&b(S.tagNameCheck,o)||S.tagNameCheck instanceof Function&&S.tagNameCheck(o)))return!1;if(We&&!ce[o]){let T=Me(e)||e.parentNode,C=Tn(e)||e.childNodes;if(C&&T){let N=C.length;for(let k=N-1;k>=0;--k)T.insertBefore(gn(C[k],!0),En(e))}}return Q(e),!0}return e instanceof dt&&!vn(e)||(o==="noscript"||o==="noembed"||o==="noframes")&&b(/<\/no(script|embed|frames)/i,e.innerHTML)?(Q(e),!0):(ie&&e.nodeType===3&&(n=e.textContent,R([Pe,Ge,Fe],T=>{n=B(n,T," ")}),e.textContent!==n&&(E(i.removed,{element:e.cloneNode()}),e.textContent=n)),Y("afterSanitizeElements",e,null),!1)},Pt=function(e,n,o){if(yt&&(n==="id"||n==="name")&&(o in g||o in Cn))return!1;if(!(He&&!ze[n]&&b(bn,n))){if(!(_t&&b(Sn,n))){if(!L[n]||ze[n]){if(!(Gt(e)&&(S.tagNameCheck instanceof RegExp&&b(S.tagNameCheck,e)||S.tagNameCheck instanceof Function&&S.tagNameCheck(e))&&(S.attributeNameCheck instanceof RegExp&&b(S.attributeNameCheck,n)||S.attributeNameCheck instanceof Function&&S.attributeNameCheck(n))||n==="is"&&S.allowCustomizedBuiltInElements&&(S.tagNameCheck instanceof RegExp&&b(S.tagNameCheck,o)||S.tagNameCheck instanceof Function&&S.tagNameCheck(o))))return!1}else if(!je[n]){if(!b(gt,B(o,ht,""))){if(!((n==="src"||n==="xlink:href"||n==="href")&&e!=="script"&&me(o,"data:")===0&&wt[e])){if(!(At&&!b(wn,B(o,ht,"")))){if(o)return!1}}}}}}return!0},Gt=function(e){return e.indexOf("-")>0},Ft=function(e){Y("beforeSanitizeAttributes",e,null);let{attributes:n}=e;if(!n)return;let o={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:L},T=n.length;for(;T--;){let C=n[T],{name:N,namespaceURI:k,value:Z}=C,Ee=D(N),P=N==="value"?Z:te(Z);if(o.attrName=Ee,o.attrValue=P,o.keepAttr=!0,o.forceKeepAttr=void 0,Y("uponSanitizeAttribute",e,o),P=o.attrValue,o.forceKeepAttr||(Ve(N,e),!o.keepAttr))continue;if(!Rt&&b(/\/>/i,P)){Ve(N,e);continue}ie&&R([Pe,Ge,Fe],Ht=>{P=B(P,Ht," ")});let zt=D(e.nodeName);if(Pt(zt,Ee,P)){if(bt&&(Ee==="id"||Ee==="name")&&(Ve(N,e),P=xn+P),U&&typeof Ae=="object"&&typeof Ae.getAttributeType=="function"&&!k)switch(Ae.getAttributeType(zt,Ee)){case"TrustedHTML":{P=U.createHTML(P);break}case"TrustedScriptURL":{P=U.createScriptURL(P);break}}try{k?e.setAttributeNS(k,N,P):e.setAttribute(N,P),w(i.removed)}catch{}}}Y("afterSanitizeAttributes",e,null)},Un=function a(e){let n=null,o=Ut(e);for(Y("beforeSanitizeShadowDOM",e,null);n=o.nextNode();)Y("uponSanitizeShadowNode",n,null),!kt(n)&&(n.content instanceof W&&a(n.content),Ft(n));Y("afterSanitizeShadowDOM",e,null)};return i.sanitize=function(a){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=null,o=null,T=null,C=null;if(Ye=!a,Ye&&(a="<!-->"),typeof a!="string"&&!Mt(a))if(typeof a.toString=="function"){if(a=a.toString(),typeof a!="string")throw G("dirty is not a string, aborting")}else throw G("toString is not a function");if(!i.isSupported)return a;if($e||qe(e),i.removed=[],typeof a=="string"&&(he=!1),he){if(a.nodeName){let Z=D(a.nodeName);if(!x[Z]||de[Z])throw G("root node is forbidden and cannot be sanitized in-place")}}else if(a instanceof Ie)n=It("<!---->"),o=n.ownerDocument.importNode(a,!0),o.nodeType===1&&o.nodeName==="BODY"||o.nodeName==="HTML"?n=o:n.appendChild(o);else{if(!ae&&!ie&&!K&&a.indexOf("<")===-1)return U&&be?U.createHTML(a):a;if(n=It(a),!n)return ae?null:be?ue:""}n&&Be&&Q(n.firstChild);let N=Ut(he?a:n);for(;T=N.nextNode();)kt(T)||(T.content instanceof W&&Un(T.content),Ft(T));if(he)return a;if(ae){if(ye)for(C=An.call(n.ownerDocument);n.firstChild;)C.appendChild(n.firstChild);else C=n;return(L.shadowroot||L.shadowrootmode)&&(C=yn.call(m,C,!0)),C}let k=K?n.outerHTML:n.innerHTML;return K&&x["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&b(ft,n.ownerDocument.doctype.name)&&(k="<!DOCTYPE "+n.ownerDocument.doctype.name+`>
2
- `+k),ie&&R([Pe,Ge,Fe],Z=>{k=B(k,Z," ")}),U&&be?U.createHTML(k):k},i.setConfig=function(){let a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};qe(a),$e=!0},i.clearConfig=function(){fe=null,$e=!1},i.isValidAttribute=function(a,e,n){fe||qe({});let o=D(a),T=D(e);return Pt(o,T,n)},i.addHook=function(a,e){typeof e=="function"&&(H[a]=H[a]||[],E(H[a],e))},i.removeHook=function(a){if(H[a])return w(H[a])},i.removeHooks=function(a){H[a]&&(H[a]=[])},i.removeAllHooks=function(){H={}},i}var mn=ut();return mn})});var Ze=$n(Bt(),1);var Wt=/^[\w+/=-]+$/;var xe=/data:[\w#&+./;=-]*,/,Je=/data:[\w#&+./;=^]*base64,[\w+/=-]+/i,jt=/data:[\w#&+./;=-]*,[^"]+/g,Yt=/&#(x(?:00)?[\dA-F]{2}|0?\d{1,3});?/gi,Xt=/^(?:application\/(?:[\w#&.;-]+\+)?x|image\/svg\+x|text\/(?:ht|x))ml;?/;var qt=/^[a-z][\da-z+.-]*$/,Vt=/^(?:ext|web)\+[a-z]+$/,et=/(?:java|vb)script/,Le=/(?:java|vb)script|blob/,tt=/%(?:2[27]|3[CE])|[<>"']/,Kt=/%(?:2[27]|3[CE])/g,Qt=/[<>"'\s]/g,Zt=/^%[\dA-F]{2}$/i;var $=s=>Object.prototype.toString.call(s).slice(8,-1),O=s=>typeof s=="string"||s instanceof String;var nt=[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 st=["aaa","aaas","about","acap","acct","acd","acr","adiumxtra","adt","afp","afs","aim","amss","android","appdata","apt","ar","ark","at","attachment","aw","barion","beshare","bitcoin","bitcoincash","blob","bolo","brid","browserext","cabal","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","dis","dlna-playcontainer","dlna-playsingle","dns","dntp","doi","dpp","drm","dtmi","dtn","dvb","dvx","dweb","ed2k","eid","elsi","embedded","ens","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","http","https","hxxp","hxxps","hydrazone","hyper","iax","icap","icon","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","lorawan","lpa","lvlt","magnet","mailto","maps","market","matrix","message","microsoft.windows.camera","microsoft.windows.camera.multipicker","microsoft.windows.camera.picker","mid","mms","mongodb","moz","moz-extension","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-powerpoint","ms-project","ms-publisher","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-virtualtouchpad","ms-visio","ms-walk-to","ms-whiteboard","ms-whiteboard-cmd","ms-word","msnim","msrp","msrps","mss","mt","mtqp","mumble","mupdate","mvn","mvrp","mvrps","news","nfs","ni","nih","nntp","notes","num","ocf","oid","onenote","onenote-cmd","opaquelocktoken","openid","openpgp4fpr","otpauth","palm","paparazzi","payment","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","sieve","simpleledger","simplex","sip","sips","skype","smb","smp","sms","smtp","snmp","soap.beep","soap.beeps","soldat","spiffe","spotify","ssb","ssh","starknet","steam","stun","stuns","submit","svn","swh","swid","swidpath","tag","taler","teamspeak","tel","teliaeid","telnet","tftp","things","thismessage","tip","tn3270","tool","turn","turns","tv","udp","unreal","urn","ut2004","uuid-in-package","v-event","vemmi","ventrilo","ves","view-source","vnc","vscode","vscode-insiders","vsls","w3","wcr","web3","webcal","wifi","ws","wss","wtai","wyciwyg","xcon","xcon-userid","xfire","xftp","xmlrpc.beep","xmlrpc.beeps","xmpp","xrcp","xri","ymsgr","z39.50r","z39.50s"];var{FileReader:Jt}=globalThis;var Oe=s=>{if(!O(s))throw new TypeError(`Expected String but got ${$(s)}.`);let t=[];for(let r of s)t.push(`%${r.charCodeAt(0).toString(16).toUpperCase()}`);return t.join("")},ot=s=>{O(s)&&Zt.test(s)&&(s=s.toUpperCase());let[t,r,p,c,l,d]=["&","#","<",">",'"',"'"].map(Oe),u;return s===t?u=`${t}amp;`:s===p?u=`${t}lt;`:s===c?u=`${t}gt;`:s===l?u=`${t}quot;`:s===d?u=`${t}${r}39;`:u=s,u},en=s=>{if(O(s)){if(!Wt.test(s))throw new Error(`Invalid base64 data: ${s}`)}else throw new TypeError(`Expected String but got ${$(s)}.`);let t=atob(s),r=Uint8Array.from([...t].map(l=>l.charCodeAt(0))),p=new Set(nt),c;return r.every(l=>p.has(l))?c=t.replace(/\s/g,Oe):c=s,c},rt=(s,t=0)=>{if(!O(s))throw new TypeError(`Expected String but got ${$(s)}.`);if(Number.isInteger(t)){if(t>16)throw new Error("Character references nested too deeply.")}else throw new TypeError(`Expected Number but got ${$(t)}.`);let r=decodeURIComponent(s);if(/&#/.test(r)){let p=new Set(nt),c=[...r.matchAll(Yt)].reverse();for(let l of c){let[d,u]=l,A;if(/^x[\dA-F]+/i.test(u)?A=parseInt(`0${u}`,16):/^\d+/.test(u)&&(A=parseInt(u)),Number.isInteger(A)){let{index:v}=l,[R,w]=[r.substring(0,v),r.substring(v+d.length)];p.has(A)?(r=`${R}${String.fromCharCode(A)}${w}`,(/#x?$/.test(R)||/^#(?:x(?:00)?[2-7]|\d)/.test(w))&&(r=rt(r,++t))):A<16*16&&(r=`${R}${w}`)}}}return r},tn=s=>new Promise((t,r)=>{let p=new Jt;p.addEventListener("error",()=>r(p.error)),p.addEventListener("abort",()=>t(p.result)),p.addEventListener("load",()=>t(p.result)),p.readAsDataURL(s)}),De=class{#e;constructor(){this.#e=new Set(st)}get(){return[...this.#e]}has(t){return this.#e.has(t)}add(t){if(O(t)){if(et.test(t)||!qt.test(t))throw new Error(`Invalid scheme: ${t}`)}else throw new TypeError(`Expected String but got ${$(t)}.`);return this.#e.add(t),[...this.#e]}remove(t){return this.#e.delete(t)}verify(t){let r;if(O(t))try{let{protocol:p}=new URL(t),c=p.replace(/:$/,""),l=c.split("+");r=!et.test(c)&&Vt.test(c)||l.every(d=>this.#e.has(d))}catch{r=!1}return!!r}reset(){this.#e.clear();for(let t of st)this.#e.add(t)}};var it=class extends De{#e;#t;constructor(){super(),this.#e=0,this.#t=new Set}replace(t){if(!O(t))throw new TypeError(`Expected String but got ${$(t)}.`);let r=t;if(xe.test(r)){let c=[...r.matchAll(jt)].reverse();for(let l of c){let[d]=l;Je.test(d)&&([d]=Je.exec(d)),this.#e++,this.#t.add(d);let u=this.sanitize(d,{allow:["data"]}),{index:A}=l,[v,R]=[r.substring(0,A),r.substring(A+d.length)];u?r=`${v}${u}${R}`:r=`${v}${R}`}}return r}purify(t){if(!O(t))throw new TypeError(`Expected String but got ${$(t)}.`);let r=Ze.default.sanitize(decodeURIComponent(t));return r&&xe.test(r)&&(r=this.replace(r)),r=r.replace(/(?:#|%23)$/,"").replace(/(?<!(?:#|%23).*)(?:\?|%3F)$/,""),encodeURI(r)}sanitize(t,r){if(this.#e>16)throw this.#e=0,new Error("Data URLs nested too deeply.");let{allow:p,deny:c,only:l,remove:d}=r??{},u=new Map([["blob",!1],["data",!1],["file",!1],["javascrpt",!1],["vbscript",!1]]),A=new Set,v=!1;if(Array.isArray(l)&&l.length){let w=super.get();for(let y of w)u.set(y,!1);let E=Object.values(l);for(let y of E)if(O(y)&&(y=y.trim(),!Le.test(y))){if(super.has(y))u.set(y,!0);else{try{super.add(y)}catch{}super.has(y)&&(u.set(y,!0),A.add(y))}!v&&u.has(y)&&(v=u.get(y))}}else{if(Array.isArray(p)&&p.length){let w=Object.values(p);for(let E of w)if(O(E)&&(E=E.trim(),!Le.test(E)))if(super.has(E))u.set(E,!0);else{try{super.add(E)}catch{}super.has(E)&&(u.set(E,!0),A.add(E))}}if(Array.isArray(c)&&c.length){let w=Object.values(c);for(let E of w)O(E)&&(E=E.trim(),E&&u.set(E,!1))}}let R;if(super.verify(t)){let{hash:w,href:E,pathname:y,protocol:z,search:ee}=new URL(t),B=z.replace(/:$/,""),me=B.split("+"),te;if(v)te=me.every(b=>u.get(b));else for(let[b,G]of u.entries())if(te=G||B!==b&&me.every(_=>_!==b),!te)break;if(te){let b=me.includes("data"),G,_=E;if(b){let[q,...f]=y.split(","),ne=`${f.join(",")}${ee}${w}`,F=q.split(";"),V=F[F.length-1]==="base64",M=ne;V&&(M=en(ne));try{let oe=rt(M).trim(),{protocol:Ce}=new URL(oe);Ce.replace(/:$/,"").split("+").some(Ne=>Le.test(Ne))&&(_="")}catch{}let se=xe.test(M);M!==ne||se?se?M=this.replace(M):this.#t.has(t)?this.#t.delete(t):G=!0:this.#t.has(t)?this.#t.delete(t):G=!0,(!q||Xt.test(q))&&(M=this.purify(M)),_&&M?(V&&M!==ne&&F.pop(),_=`${B}:${F.join(";")},${M}`):_=""}else G=!0;if(!b&&d&&tt.test(_)){let q=tt.exec(_),{index:f}=q;_=_.substring(0,f)}_?(R=_.replace(Qt,Oe).replace(/%26/g,ot),G&&(b||(R=R.replace(Kt,ot)),this.#e=0)):this.#e=0}A.size&&A.forEach(b=>{super.remove(b)})}return R||null}parse(t,r){if(!O(t))throw new TypeError(`Expected String but got ${$(t)}.`);let p=new Map([["input",t]]),c;if(this.verify(t)){let{protocol:l}=new URL(t);l==="blob:"?c=t:c=this.sanitize(t,r??{allow:["data","file"]})}if(c){let l=new URL(c),{pathname:d,protocol:u}=l,v=u.replace(/:$/,"").split("+").includes("data");if(p.set("valid",!0),v){let R=new Map,[w,...E]=d.split(","),y=`${E.join(",")}`,z=w.split(";"),ee=z[z.length-1]==="base64";ee&&z.pop(),R.set("mime",z.join(";")),R.set("base64",ee),R.set("data",y),p.set("data",Object.fromEntries(R))}else p.set("data",null);for(let R in l){let w=l[R];O(w)&&p.set(R,w)}}else p.set("valid",!1);return Object.fromEntries(p)}reset(){super.reset(),this.#e=0,this.#t.clear()}},X=new it,Xn=async(s,t={allow:[],deny:[],only:[]})=>{let r;if(s&&O(s)){let p;try{let{protocol:c}=new URL(s);p=c.replace(/:$/,"")}catch{}if(p==="blob"){let{allow:c,deny:l,only:d}=t;if(Array.isArray(c)&&c.includes("blob")&&!(Array.isArray(l)&&l.includes("blob"))||Array.isArray(d)&&d.includes("blob")){let u;try{u=await fetch(s).then(A=>A.blob()).then(tn)}catch{}if(u){if(Array.isArray(d))d.includes("data")||d.push("data");else if(Array.isArray(c)&&(c.includes("data")||c.push("data"),Array.isArray(l)&&l.includes("data"))){let A=l.indexOf("data");l.splice(A,1)}r=X.sanitize(u,t)}}URL.revokeObjectURL(s)}else p&&(r=X.sanitize(s,t))}return r||null},qn=(s,t)=>{let r;if(s&&O(s)){let p;try{let{protocol:c}=new URL(s);p=c.replace(/:$/,"")}catch{}p==="blob"?URL.revokeObjectURL(s):p&&(r=X.sanitize(s,t))}return r||null},Vn=async s=>X.parse(s),Kn=s=>X.parse(s),Qn=async s=>X.verify(s),Zn=s=>X.verify(s),Jn=X;export{Jn as default,Qn as isURI,Zn as isURISync,Vn as parseURL,Kn as parseURLSync,Xn as sanitizeURL,qn as sanitizeURLSync};
1
+ var Pn=Object.create;var $t=Object.defineProperty;var kn=Object.getOwnPropertyDescriptor;var Gn=Object.getOwnPropertyNames;var Fn=Object.getPrototypeOf,zn=Object.prototype.hasOwnProperty;var Hn=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var $n=(s,t,r,f)=>{if(t&&typeof t=="object"||typeof t=="function")for(let c of Gn(t))!zn.call(s,c)&&c!==r&&$t(s,c,{get:()=>t[c],enumerable:!(f=kn(t,c))||f.enumerable});return s};var Bn=(s,t,r)=>(r=s!=null?Pn(Fn(s)):{},$n(t||!s||!s.__esModule?$t(r,"default",{value:s,enumerable:!0}):r,s));var Bt=Hn((Qe,Ze)=>{(function(s,t){typeof Qe=="object"&&typeof Ze<"u"?Ze.exports=t():typeof define=="function"&&define.amd?define(t):(s=typeof globalThis<"u"?globalThis:s||self,s.DOMPurify=t())})(Qe,function(){"use strict";let{entries:s,setPrototypeOf:t,isFrozen:r,getPrototypeOf:f,getOwnPropertyDescriptor:c}=Object,{freeze:l,seal:d,create:m}=Object,{apply:_,construct:P}=typeof Reflect<"u"&&Reflect;l||(l=function(i){return i}),d||(d=function(i){return i}),_||(_=function(i,g,u){return i.apply(g,u)}),P||(P=function(i,g){return new i(...g)});let A=x(Array.prototype.forEach),w=x(Array.prototype.pop),E=x(Array.prototype.push),y=x(String.prototype.toLowerCase),z=x(String.prototype.toString),J=x(String.prototype.match),W=x(String.prototype.replace),pe=x(String.prototype.indexOf),ee=x(String.prototype.trim),R=x(Object.prototype.hasOwnProperty),S=x(RegExp.prototype.test),L=fe(TypeError);function x(h){return function(i){for(var g=arguments.length,u=new Array(g>1?g-1:0),I=1;I<g;I++)u[I-1]=arguments[I];return _(h,i,u)}}function fe(h){return function(){for(var i=arguments.length,g=new Array(i),u=0;u<i;u++)g[u]=arguments[u];return P(h,g)}}function p(h,i){let g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:y;t&&t(h,null);let u=i.length;for(;u--;){let I=i[u];if(typeof I=="string"){let j=g(I);j!==I&&(r(i)||(i[u]=j),I=j)}h[I]=!0}return h}function te(h){for(let i=0;i<h.length;i++)R(h,i)||(h[i]=null);return h}function H(h){let i=m(null);for(let[g,u]of s(h))R(h,g)&&(Array.isArray(u)?i[g]=te(u):u&&typeof u=="object"&&u.constructor===Object?i[g]=H(u):i[g]=u);return i}function v(h,i){for(;h!==null;){let u=c(h,i);if(u){if(u.get)return x(u.get);if(typeof u.value=="function")return x(u.value)}h=f(h)}function g(){return null}return g}let me=l(["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","section","select","shadow","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"]),ne=l(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),ue=l(["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"]),it=l(["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"]),de=l(["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"]),nn=l(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),at=l(["#text"]),lt=l(["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","face","for","headers","height","hidden","high","href","hreflang","id","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","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),Ie=l(["accent-height","accumulate","additive","alignment-baseline","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","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","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","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","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","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"]),ct=l(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","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"]),Ae=l(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),sn=d(/\{\{[\w\W]*|[\w\W]*\}\}/gm),on=d(/<%[\w\W]*|[\w\W]*%>/gm),rn=d(/\${[\w\W]*}/gm),an=d(/^data-[\-\w.\u00B7-\uFFFF]/),ln=d(/^aria-[\-\w]+$/),pt=d(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),cn=d(/^(?:\w+script|data):/i),pn=d(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),ft=d(/^html$/i);var mt=Object.freeze({__proto__:null,MUSTACHE_EXPR:sn,ERB_EXPR:on,TMPLIT_EXPR:rn,DATA_ATTR:an,ARIA_ATTR:ln,IS_ALLOWED_URI:pt,IS_SCRIPT_OR_DATA:cn,ATTR_WHITESPACE:pn,DOCTYPE_NAME:ft});let fn=function(){return typeof window>"u"?null:window},mn=function(i,g){if(typeof i!="object"||typeof i.createPolicy!="function")return null;let u=null,I="data-tt-policy-suffix";g&&g.hasAttribute(I)&&(u=g.getAttribute(I));let j="dompurify"+(u?"#"+u:"");try{return i.createPolicy(j,{createHTML(se){return se},createScriptURL(se){return se}})}catch{return console.warn("TrustedTypes policy "+j+" could not be created."),null}};function ut(){let h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:fn(),i=a=>ut(a);if(i.version="3.0.9",i.removed=[],!h||!h.document||h.document.nodeType!==9)return i.isSupported=!1,i;let{document:g}=h,u=g,I=u.currentScript,{DocumentFragment:j,HTMLTemplateElement:se,Node:Ue,Element:dt,NodeFilter:Me,NamedNodeMap:dn=h.NamedNodeMap||h.MozNamedAttrMap,HTMLFormElement:hn,DOMParser:gn,trustedTypes:ye}=h,Re=dt.prototype,En=v(Re,"cloneNode"),Tn=v(Re,"nextSibling"),_n=v(Re,"childNodes"),Pe=v(Re,"parentNode");if(typeof se=="function"){let a=g.createElement("template");a.content&&a.content.ownerDocument&&(g=a.content.ownerDocument)}let k,he="",{implementation:ke,createNodeIterator:An,createDocumentFragment:yn,getElementsByTagName:Rn}=g,{importNode:bn}=u,$={};i.isSupported=typeof s=="function"&&typeof Pe=="function"&&ke&&ke.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:Ge,ERB_EXPR:Fe,TMPLIT_EXPR:ze,DATA_ATTR:Sn,ARIA_ATTR:wn,IS_SCRIPT_OR_DATA:xn,ATTR_WHITESPACE:ht}=mt,{IS_ALLOWED_URI:gt}=mt,D=null,Et=p({},[...me,...ne,...ue,...de,...at]),O=null,Tt=p({},[...lt,...Ie,...ct,...Ae]),b=Object.seal(m(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}})),ge=null,He=null,_t=!0,$e=!0,At=!1,yt=!0,oe=!1,V=!1,Be=!1,We=!1,re=!1,be=!1,Se=!1,Rt=!0,bt=!1,Ln="user-content-",je=!0,Ee=!1,ie={},ae=null,St=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"]),wt=null,xt=p({},["audio","video","img","source","image","track"]),Ye=null,Lt=p({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),we="http://www.w3.org/1998/Math/MathML",xe="http://www.w3.org/2000/svg",Y="http://www.w3.org/1999/xhtml",le=Y,Xe=!1,qe=null,Dn=p({},[we,xe,Y],z),Te=null,On=["application/xhtml+xml","text/html"],Cn="text/html",C=null,ce=null,Nn=g.createElement("form"),Dt=function(e){return e instanceof RegExp||e instanceof Function},Ve=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(ce&&ce===e)){if((!e||typeof e!="object")&&(e={}),e=H(e),Te=On.indexOf(e.PARSER_MEDIA_TYPE)===-1?Cn:e.PARSER_MEDIA_TYPE,C=Te==="application/xhtml+xml"?z:y,D=R(e,"ALLOWED_TAGS")?p({},e.ALLOWED_TAGS,C):Et,O=R(e,"ALLOWED_ATTR")?p({},e.ALLOWED_ATTR,C):Tt,qe=R(e,"ALLOWED_NAMESPACES")?p({},e.ALLOWED_NAMESPACES,z):Dn,Ye=R(e,"ADD_URI_SAFE_ATTR")?p(H(Lt),e.ADD_URI_SAFE_ATTR,C):Lt,wt=R(e,"ADD_DATA_URI_TAGS")?p(H(xt),e.ADD_DATA_URI_TAGS,C):xt,ae=R(e,"FORBID_CONTENTS")?p({},e.FORBID_CONTENTS,C):St,ge=R(e,"FORBID_TAGS")?p({},e.FORBID_TAGS,C):{},He=R(e,"FORBID_ATTR")?p({},e.FORBID_ATTR,C):{},ie=R(e,"USE_PROFILES")?e.USE_PROFILES:!1,_t=e.ALLOW_ARIA_ATTR!==!1,$e=e.ALLOW_DATA_ATTR!==!1,At=e.ALLOW_UNKNOWN_PROTOCOLS||!1,yt=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,oe=e.SAFE_FOR_TEMPLATES||!1,V=e.WHOLE_DOCUMENT||!1,re=e.RETURN_DOM||!1,be=e.RETURN_DOM_FRAGMENT||!1,Se=e.RETURN_TRUSTED_TYPE||!1,We=e.FORCE_BODY||!1,Rt=e.SANITIZE_DOM!==!1,bt=e.SANITIZE_NAMED_PROPS||!1,je=e.KEEP_CONTENT!==!1,Ee=e.IN_PLACE||!1,gt=e.ALLOWED_URI_REGEXP||pt,le=e.NAMESPACE||Y,b=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&Dt(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(b.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&Dt(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(b.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(b.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),oe&&($e=!1),be&&(re=!0),ie&&(D=p({},at),O=[],ie.html===!0&&(p(D,me),p(O,lt)),ie.svg===!0&&(p(D,ne),p(O,Ie),p(O,Ae)),ie.svgFilters===!0&&(p(D,ue),p(O,Ie),p(O,Ae)),ie.mathMl===!0&&(p(D,de),p(O,ct),p(O,Ae))),e.ADD_TAGS&&(D===Et&&(D=H(D)),p(D,e.ADD_TAGS,C)),e.ADD_ATTR&&(O===Tt&&(O=H(O)),p(O,e.ADD_ATTR,C)),e.ADD_URI_SAFE_ATTR&&p(Ye,e.ADD_URI_SAFE_ATTR,C),e.FORBID_CONTENTS&&(ae===St&&(ae=H(ae)),p(ae,e.FORBID_CONTENTS,C)),je&&(D["#text"]=!0),V&&p(D,["html","head","body"]),D.table&&(p(D,["tbody"]),delete ge.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!="function")throw L('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw L('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');k=e.TRUSTED_TYPES_POLICY,he=k.createHTML("")}else k===void 0&&(k=mn(ye,I)),k!==null&&typeof he=="string"&&(he=k.createHTML(""));l&&l(e),ce=e}},Ot=p({},["mi","mo","mn","ms","mtext"]),Ct=p({},["foreignobject","desc","title","annotation-xml"]),vn=p({},["title","style","font","a","script"]),Nt=p({},[...ne,...ue,...it]),vt=p({},[...de,...nn]),In=function(e){let n=Pe(e);(!n||!n.tagName)&&(n={namespaceURI:le,tagName:"template"});let o=y(e.tagName),T=y(n.tagName);return qe[e.namespaceURI]?e.namespaceURI===xe?n.namespaceURI===Y?o==="svg":n.namespaceURI===we?o==="svg"&&(T==="annotation-xml"||Ot[T]):!!Nt[o]:e.namespaceURI===we?n.namespaceURI===Y?o==="math":n.namespaceURI===xe?o==="math"&&Ct[T]:!!vt[o]:e.namespaceURI===Y?n.namespaceURI===xe&&!Ct[T]||n.namespaceURI===we&&!Ot[T]?!1:!vt[o]&&(vn[o]||!Nt[o]):!!(Te==="application/xhtml+xml"&&qe[e.namespaceURI]):!1},K=function(e){E(i.removed,{element:e});try{e.parentNode.removeChild(e)}catch{e.remove()}},Ke=function(e,n){try{E(i.removed,{attribute:n.getAttributeNode(e),from:n})}catch{E(i.removed,{attribute:null,from:n})}if(n.removeAttribute(e),e==="is"&&!O[e])if(re||be)try{K(n)}catch{}else try{n.setAttribute(e,"")}catch{}},It=function(e){let n=null,o=null;if(We)e="<remove></remove>"+e;else{let M=J(e,/^[\r\n\t ]+/);o=M&&M[0]}Te==="application/xhtml+xml"&&le===Y&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");let T=k?k.createHTML(e):e;if(le===Y)try{n=new gn().parseFromString(T,Te)}catch{}if(!n||!n.documentElement){n=ke.createDocument(le,"template",null);try{n.documentElement.innerHTML=Xe?he:T}catch{}}let U=n.body||n.documentElement;return e&&o&&U.insertBefore(g.createTextNode(o),U.childNodes[0]||null),le===Y?Rn.call(n,V?"html":"body")[0]:V?n.documentElement:U},Ut=function(e){return An.call(e.ownerDocument||e,e,Me.SHOW_ELEMENT|Me.SHOW_COMMENT|Me.SHOW_TEXT,null)},Un=function(e){return e instanceof hn&&(typeof e.nodeName!="string"||typeof e.textContent!="string"||typeof e.removeChild!="function"||!(e.attributes instanceof dn)||typeof e.removeAttribute!="function"||typeof e.setAttribute!="function"||typeof e.namespaceURI!="string"||typeof e.insertBefore!="function"||typeof e.hasChildNodes!="function")},Mt=function(e){return typeof Ue=="function"&&e instanceof Ue},X=function(e,n,o){$[e]&&A($[e],T=>{T.call(i,n,o,ce)})},Pt=function(e){let n=null;if(X("beforeSanitizeElements",e,null),Un(e))return K(e),!0;let o=C(e.nodeName);if(X("uponSanitizeElement",e,{tagName:o,allowedTags:D}),e.hasChildNodes()&&!Mt(e.firstElementChild)&&S(/<[/\w]/g,e.innerHTML)&&S(/<[/\w]/g,e.textContent))return K(e),!0;if(!D[o]||ge[o]){if(!ge[o]&&Gt(o)&&(b.tagNameCheck instanceof RegExp&&S(b.tagNameCheck,o)||b.tagNameCheck instanceof Function&&b.tagNameCheck(o)))return!1;if(je&&!ae[o]){let T=Pe(e)||e.parentNode,U=_n(e)||e.childNodes;if(U&&T){let M=U.length;for(let G=M-1;G>=0;--G)T.insertBefore(En(U[G],!0),Tn(e))}}return K(e),!0}return e instanceof dt&&!In(e)||(o==="noscript"||o==="noembed"||o==="noframes")&&S(/<\/no(script|embed|frames)/i,e.innerHTML)?(K(e),!0):(oe&&e.nodeType===3&&(n=e.textContent,A([Ge,Fe,ze],T=>{n=W(n,T," ")}),e.textContent!==n&&(E(i.removed,{element:e.cloneNode()}),e.textContent=n)),X("afterSanitizeElements",e,null),!1)},kt=function(e,n,o){if(Rt&&(n==="id"||n==="name")&&(o in g||o in Nn))return!1;if(!($e&&!He[n]&&S(Sn,n))){if(!(_t&&S(wn,n))){if(!O[n]||He[n]){if(!(Gt(e)&&(b.tagNameCheck instanceof RegExp&&S(b.tagNameCheck,e)||b.tagNameCheck instanceof Function&&b.tagNameCheck(e))&&(b.attributeNameCheck instanceof RegExp&&S(b.attributeNameCheck,n)||b.attributeNameCheck instanceof Function&&b.attributeNameCheck(n))||n==="is"&&b.allowCustomizedBuiltInElements&&(b.tagNameCheck instanceof RegExp&&S(b.tagNameCheck,o)||b.tagNameCheck instanceof Function&&b.tagNameCheck(o))))return!1}else if(!Ye[n]){if(!S(gt,W(o,ht,""))){if(!((n==="src"||n==="xlink:href"||n==="href")&&e!=="script"&&pe(o,"data:")===0&&wt[e])){if(!(At&&!S(xn,W(o,ht,"")))){if(o)return!1}}}}}}return!0},Gt=function(e){return e!=="annotation-xml"&&e.indexOf("-")>0},Ft=function(e){X("beforeSanitizeAttributes",e,null);let{attributes:n}=e;if(!n)return;let o={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:O},T=n.length;for(;T--;){let U=n[T],{name:M,namespaceURI:G,value:Q}=U,_e=C(M),F=M==="value"?Q:ee(Q);if(o.attrName=_e,o.attrValue=F,o.keepAttr=!0,o.forceKeepAttr=void 0,X("uponSanitizeAttribute",e,o),F=o.attrValue,o.forceKeepAttr||(Ke(M,e),!o.keepAttr))continue;if(!yt&&S(/\/>/i,F)){Ke(M,e);continue}oe&&A([Ge,Fe,ze],Ht=>{F=W(F,Ht," ")});let zt=C(e.nodeName);if(kt(zt,_e,F)){if(bt&&(_e==="id"||_e==="name")&&(Ke(M,e),F=Ln+F),k&&typeof ye=="object"&&typeof ye.getAttributeType=="function"&&!G)switch(ye.getAttributeType(zt,_e)){case"TrustedHTML":{F=k.createHTML(F);break}case"TrustedScriptURL":{F=k.createScriptURL(F);break}}try{G?e.setAttributeNS(G,M,F):e.setAttribute(M,F),w(i.removed)}catch{}}}X("afterSanitizeAttributes",e,null)},Mn=function a(e){let n=null,o=Ut(e);for(X("beforeSanitizeShadowDOM",e,null);n=o.nextNode();)X("uponSanitizeShadowNode",n,null),!Pt(n)&&(n.content instanceof j&&a(n.content),Ft(n));X("afterSanitizeShadowDOM",e,null)};return i.sanitize=function(a){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=null,o=null,T=null,U=null;if(Xe=!a,Xe&&(a="<!-->"),typeof a!="string"&&!Mt(a))if(typeof a.toString=="function"){if(a=a.toString(),typeof a!="string")throw L("dirty is not a string, aborting")}else throw L("toString is not a function");if(!i.isSupported)return a;if(Be||Ve(e),i.removed=[],typeof a=="string"&&(Ee=!1),Ee){if(a.nodeName){let Q=C(a.nodeName);if(!D[Q]||ge[Q])throw L("root node is forbidden and cannot be sanitized in-place")}}else if(a instanceof Ue)n=It("<!---->"),o=n.ownerDocument.importNode(a,!0),o.nodeType===1&&o.nodeName==="BODY"||o.nodeName==="HTML"?n=o:n.appendChild(o);else{if(!re&&!oe&&!V&&a.indexOf("<")===-1)return k&&Se?k.createHTML(a):a;if(n=It(a),!n)return re?null:Se?he:""}n&&We&&K(n.firstChild);let M=Ut(Ee?a:n);for(;T=M.nextNode();)Pt(T)||(T.content instanceof j&&Mn(T.content),Ft(T));if(Ee)return a;if(re){if(be)for(U=yn.call(n.ownerDocument);n.firstChild;)U.appendChild(n.firstChild);else U=n;return(O.shadowroot||O.shadowrootmode)&&(U=bn.call(u,U,!0)),U}let G=V?n.outerHTML:n.innerHTML;return V&&D["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&S(ft,n.ownerDocument.doctype.name)&&(G="<!DOCTYPE "+n.ownerDocument.doctype.name+`>
2
+ `+G),oe&&A([Ge,Fe,ze],Q=>{G=W(G,Q," ")}),k&&Se?k.createHTML(G):G},i.setConfig=function(){let a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Ve(a),Be=!0},i.clearConfig=function(){ce=null,Be=!1},i.isValidAttribute=function(a,e,n){ce||Ve({});let o=C(a),T=C(e);return kt(o,T,n)},i.addHook=function(a,e){typeof e=="function"&&($[a]=$[a]||[],E($[a],e))},i.removeHook=function(a){if($[a])return w($[a])},i.removeHooks=function(a){$[a]&&($[a]=[])},i.removeAllHooks=function(){$={}},i}var un=ut();return un})});var Je=Bn(Bt(),1);var Wt=/^[\w+/=-]+$/;var Le=/data:[\w#&+./;=-]*,/,et=/data:[\w#&+./;=^]*base64,[\w+/=-]+/i,jt=/data:[\w#&+./;=-]*,[^"]+/g,Yt=/&#(x(?:00)?[\dA-F]{2}|0?\d{1,3});?/gi,Xt=/^(?:application\/(?:[\w#&.;-]+\+)?x|image\/svg\+x|text\/(?:ht|x))ml;?/;var qt=/^[a-z][\da-z+.-]*$/,Vt=/^(?:ext|web)\+[a-z]+$/,tt=/(?:java|vb)script/,De=/(?:java|vb)script|blob/,nt=/%(?:2[27]|3[CE])|[<>"']/,Kt=/%(?:2[27]|3[CE])/g,Qt=/[<>"'\s]/g,Zt=/^%[\dA-F]{2}$/i;var B=s=>Object.prototype.toString.call(s).slice(8,-1),N=s=>typeof s=="string"||s instanceof String;var{FileReader:Jt}=globalThis;var Oe=[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 Ce=["aaa","aaas","about","acap","acct","acd","acr","adiumxtra","adt","afp","afs","aim","amss","android","appdata","apt","ar","ark","at","attachment","aw","barion","beshare","bitcoin","bitcoincash","blob","bolo","brid","browserext","cabal","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","dis","dlna-playcontainer","dlna-playsingle","dns","dntp","doi","dpp","drm","dtmi","dtn","dvb","dvx","dweb","ed2k","eid","elsi","embedded","ens","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","http","https","hxxp","hxxps","hydrazone","hyper","iax","icap","icon","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","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","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-powerpoint","ms-project","ms-publisher","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-virtualtouchpad","ms-visio","ms-walk-to","ms-whiteboard","ms-whiteboard-cmd","ms-word","msnim","msrp","msrps","mss","mt","mtqp","mumble","mupdate","mvn","mvrp","mvrps","news","nfs","ni","nih","nntp","notes","num","ocf","oid","onenote","onenote-cmd","opaquelocktoken","openid","openpgp4fpr","otpauth","palm","paparazzi","payment","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","sieve","simpleledger","simplex","sip","sips","skype","smb","smp","sms","smtp","snmp","soap.beep","soap.beeps","soldat","spiffe","spotify","ssb","ssh","starknet","steam","stun","stuns","submit","svn","swh","swid","swidpath","tag","taler","teamspeak","tel","teliaeid","telnet","tftp","things","thismessage","tip","tn3270","tool","turn","turns","tv","udp","unreal","urn","ut2004","uuid-in-package","v-event","vemmi","ventrilo","ves","view-source","vnc","vscode","vscode-insiders","vsls","w3","wcr","web3","webcal","wifi","ws","wss","wtai","wyciwyg","xcon","xcon-userid","xfire","xftp","xmlrpc.beep","xmlrpc.beeps","xmpp","xrcp","xri","ymsgr","z39.50r","z39.50s"];var ve=s=>{if(!N(s))throw new TypeError(`Expected String but got ${B(s)}.`);let t=[];for(let r of s)t.push(`%${r.charCodeAt(0).toString(16).toUpperCase()}`);return t.join("")},st=s=>{N(s)&&Zt.test(s)&&(s=s.toUpperCase());let[t,r,f,c,l,d]=["&","#","<",">",'"',"'"].map(ve),m;return s===t?m=`${t}amp;`:s===f?m=`${t}lt;`:s===c?m=`${t}gt;`:s===l?m=`${t}quot;`:s===d?m=`${t}${r}39;`:m=s,m},en=s=>{if(N(s)){if(!Wt.test(s))throw new Error(`Invalid base64 data: ${s}`)}else throw new TypeError(`Expected String but got ${B(s)}.`);let t=atob(s),r=Uint8Array.from([...t].map(l=>l.charCodeAt(0))),f=new Set(Oe),c;return r.every(l=>f.has(l))?c=t.replace(/\s/g,ve):c=s,c},ot=(s,t=0)=>{if(!N(s))throw new TypeError(`Expected String but got ${B(s)}.`);if(Number.isInteger(t)){if(t>16)throw new Error("Character references nested too deeply.")}else throw new TypeError(`Expected Number but got ${B(t)}.`);let r=decodeURIComponent(s);if(/&#/.test(r)){let f=new Set(Oe),c=[...r.matchAll(Yt)].reverse();for(let l of c){let[d,m]=l,_;if(/^x[\dA-F]+/i.test(m)?_=parseInt(`0${m}`,16):/^\d+/.test(m)&&(_=parseInt(m)),Number.isInteger(_)){let{index:P}=l,[A,w]=[r.substring(0,P),r.substring(P+d.length)];f.has(_)?(r=`${A}${String.fromCharCode(_)}${w}`,(/#x?$/.test(A)||/^#(?:x(?:00)?[2-7]|\d)/.test(w))&&(r=ot(r,++t))):_<16*16&&(r=`${A}${w}`)}}}return r},tn=s=>new Promise((t,r)=>{let f=new Jt;f.addEventListener("error",()=>r(f.error)),f.addEventListener("abort",()=>t(f.result)),f.addEventListener("load",()=>t(f.result)),f.readAsDataURL(s)}),Ne=class{#e;constructor(){this.#e=new Set(Ce)}get(){return[...this.#e]}has(t){return this.#e.has(t)}add(t){if(N(t)){if(tt.test(t)||!qt.test(t))throw new Error(`Invalid scheme: ${t}`)}else throw new TypeError(`Expected String but got ${B(t)}.`);return this.#e.add(t),[...this.#e]}remove(t){return this.#e.delete(t)}verify(t){let r;if(N(t))try{let{protocol:f}=new URL(t),c=f.replace(/:$/,""),l=c.split("+");r=!tt.test(c)&&Vt.test(c)||l.every(d=>this.#e.has(d))}catch{r=!1}return!!r}reset(){this.#e.clear();for(let t of Ce)this.#e.add(t)}};var rt=class extends Ne{#e;#t;constructor(){super(),this.#e=0,this.#t=new Set}replace(t){if(!N(t))throw new TypeError(`Expected String but got ${B(t)}.`);let r=t;if(Le.test(r)){let c=[...r.matchAll(jt)].reverse();for(let l of c){let[d]=l;et.test(d)&&([d]=et.exec(d)),this.#e++,this.#t.add(d);let m=this.sanitize(d,{allow:["data"]}),{index:_}=l,[P,A]=[r.substring(0,_),r.substring(_+d.length)];m?r=`${P}${m}${A}`:r=`${P}${A}`}}return r}purify(t){if(!N(t))throw new TypeError(`Expected String but got ${B(t)}.`);let r=Je.default.sanitize(decodeURIComponent(t));return r&&Le.test(r)&&(r=this.replace(r)),r=r.replace(/(?:#|%23)$/,"").replace(/(?<!(?:#|%23).*)(?:\?|%3F)$/,""),encodeURI(r)}sanitize(t,r){if(this.#e>16)throw this.#e=0,new Error("Data URLs nested too deeply.");let{allow:f,deny:c,only:l,remove:d}=r??{},m=new Map([["blob",!1],["data",!1],["file",!1],["javascrpt",!1],["vbscript",!1]]),_=new Set,P=!1;if(Array.isArray(l)&&l.length){let w=super.get();for(let y of w)m.set(y,!1);let E=Object.values(l);for(let y of E)if(N(y)&&(y=y.trim(),!De.test(y))){if(super.has(y))m.set(y,!0);else{try{super.add(y)}catch{}super.has(y)&&(m.set(y,!0),_.add(y))}!P&&m.has(y)&&(P=m.get(y))}}else{if(Array.isArray(f)&&f.length){let w=Object.values(f);for(let E of w)if(N(E)&&(E=E.trim(),!De.test(E)))if(super.has(E))m.set(E,!0);else{try{super.add(E)}catch{}super.has(E)&&(m.set(E,!0),_.add(E))}}if(Array.isArray(c)&&c.length){let w=Object.values(c);for(let E of w)N(E)&&(E=E.trim(),E&&m.set(E,!1))}}let A;if(super.verify(t)){let{hash:w,href:E,pathname:y,protocol:z,search:J}=new URL(t),W=z.replace(/:$/,""),pe=W.split("+"),ee;if(P)ee=pe.every(R=>m.get(R));else for(let[R,S]of m.entries())if(ee=S||W!==R&&pe.every(L=>L!==R),!ee)break;if(ee){let R=pe.includes("data"),S,L=E;if(R){let[x,...fe]=y.split(","),p=`${fe.join(",")}${J}${w}`,te=x.split(";"),H=te[te.length-1]==="base64",v=p;H&&(v=en(p));try{let ne=ot(v).trim(),{protocol:ue}=new URL(ne);ue.replace(/:$/,"").split("+").some(de=>De.test(de))&&(L="")}catch{}let me=Le.test(v);v!==p||me?me?v=this.replace(v):this.#t.has(t)?this.#t.delete(t):S=!0:this.#t.has(t)?this.#t.delete(t):S=!0,(!x||Xt.test(x))&&(v=this.purify(v)),L&&v?(H&&v!==p&&te.pop(),L=`${W}:${te.join(";")},${v}`):L=""}else S=!0;if(!R&&d&&nt.test(L)){let x=nt.exec(L),{index:fe}=x;L=L.substring(0,fe)}L?(A=L.replace(Qt,ve).replace(/%26/g,st),S&&(R||(A=A.replace(Kt,st)),this.#e=0)):this.#e=0}_.size&&_.forEach(R=>{super.remove(R)})}return A||null}parse(t,r){if(!N(t))throw new TypeError(`Expected String but got ${B(t)}.`);let f=new Map([["input",t]]),c;if(this.verify(t)){let{protocol:l}=new URL(t);l==="blob:"?c=t:c=this.sanitize(t,r??{allow:["data","file"]})}if(c){let l=new URL(c),{pathname:d,protocol:m}=l,P=m.replace(/:$/,"").split("+").includes("data");if(f.set("valid",!0),P){let A=new Map,[w,...E]=d.split(","),y=`${E.join(",")}`,z=w.split(";"),J=z[z.length-1]==="base64";J&&z.pop(),A.set("mime",z.join(";")),A.set("base64",J),A.set("data",y),f.set("data",Object.fromEntries(A))}else f.set("data",null);for(let A in l){let w=l[A];N(w)&&f.set(A,w)}}else f.set("valid",!1);return Object.fromEntries(f)}reset(){super.reset(),this.#e=0,this.#t.clear()}},q=new rt,qn=async(s,t={allow:[],deny:[],only:[]})=>{let r;if(s&&N(s)){let f;try{let{protocol:c}=new URL(s);f=c.replace(/:$/,"")}catch{}if(f==="blob"){let{allow:c,deny:l,only:d}=t;if(Array.isArray(c)&&c.includes("blob")&&!(Array.isArray(l)&&l.includes("blob"))||Array.isArray(d)&&d.includes("blob")){let m;try{m=await fetch(s).then(_=>_.blob()).then(tn)}catch{}if(m){if(Array.isArray(d))d.includes("data")||d.push("data");else if(Array.isArray(c)&&(c.includes("data")||c.push("data"),Array.isArray(l)&&l.includes("data"))){let _=l.indexOf("data");l.splice(_,1)}r=q.sanitize(m,t)}}URL.revokeObjectURL(s)}else f&&(r=q.sanitize(s,t))}return r||null},Vn=(s,t)=>{let r;if(s&&N(s)){let f;try{let{protocol:c}=new URL(s);f=c.replace(/:$/,"")}catch{}f==="blob"?URL.revokeObjectURL(s):f&&(r=q.sanitize(s,t))}return r||null},Kn=async s=>q.parse(s),Qn=s=>q.parse(s),Zn=async s=>q.verify(s),Jn=s=>q.verify(s),es=q;export{es as default,Zn as isURI,Jn as isURISync,Kn as parseURL,Qn as parseURLSync,qn as sanitizeURL,Vn as sanitizeURLSync};
3
3
  /*!
4
4
  * URL Sanitizer
5
5
  *
@@ -10,6 +10,6 @@ var Mn=Object.create;var $t=Object.defineProperty;var kn=Object.getOwnPropertyDe
10
10
  /*! Bundled license information:
11
11
 
12
12
  dompurify/dist/purify.js:
13
- (*! @license DOMPurify 3.0.8 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.8/LICENSE *)
13
+ (*! @license DOMPurify 3.0.9 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.9/LICENSE *)
14
14
  */
15
15
  //# sourceMappingURL=url-sanitizer.min.js.map