url-sanitizer 2.0.0 → 2.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.
@@ -1,4 +1,4 @@
1
- var{DOMPurify:N}=globalThis;var H=/^[\w+/=-]+$/;var S=/data:[\w#&+./;=-]*,/,D=/data:[\w#&+./;=^]*base64,[\w+/=-]+/i,q=/data:[\w#&+./;=-]*,[^"]+/g,X=/&#(x(?:00)?[\dA-F]{2}|0?\d{1,3});?/gi,Y=/^(?:application\/(?:[\w#&.;-]+\+)?x|image\/svg\+x|text\/(?:ht|x))ml;?/;var Q=/^[a-z][\da-z+.-]*$/,J=/^(?:ext|web)\+[a-z]+$/,j=/(?:java|vb)script/,A=/(?:java|vb)script|blob/,M=/%(?:2[27]|3[CE])|[<>"']/,K=/^%[\dA-F]{2}$/i;var g=t=>Object.prototype.toString.call(t).slice(8,-1),d=t=>typeof t=="string"||t instanceof String;var{FileReader:V}=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 C=["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 W=t=>{if(!d(t))throw new TypeError(`Expected String but got ${g(t)}.`);let e=[];for(let s of t)e.push(`%${s.charCodeAt(0).toString(16).toUpperCase()}`);return e.join("")},Z=t=>{d(t)&&K.test(t)&&(t=t.toUpperCase());let[e,s,r,i,o,a]=["&","#","<",">",'"',"'"].map(W),c;return t===e?c=`${e}amp;`:t===r?c=`${e}lt;`:t===i?c=`${e}gt;`:t===o?c=`${e}quot;`:t===a?c=`${e}${s}39;`:c=t,c},ee=t=>{if(d(t)){if(!H.test(t))throw new Error(`Invalid base64 data: ${t}`)}else throw new TypeError(`Expected String but got ${g(t)}.`);let e=atob(t),s=Uint8Array.from([...e].map(o=>o.charCodeAt(0))),r=new Set(L),i;return s.every(o=>r.has(o))?i=e.replace(/\s/g,W):i=t,i},P=(t,e=0)=>{if(!d(t))throw new TypeError(`Expected String but got ${g(t)}.`);if(Number.isInteger(e)){if(e>16)throw new Error("Character references nested too deeply.")}else throw new TypeError(`Expected Number but got ${g(e)}.`);let s=decodeURIComponent(t);if(/&#/.test(s)){let r=new Set(L),i=[...s.matchAll(X)].reverse();for(let o of i){let[a,c]=o,l;if(/^x[\dA-F]+/i.test(c)?l=parseInt(`0${c}`,16):/^\d+/.test(c)&&(l=parseInt(c)),Number.isInteger(l)){let{index:u}=o,[p,n]=[s.substring(0,u),s.substring(u+a.length)];r.has(l)?(s=`${p}${String.fromCharCode(l)}${n}`,(/#x?$/.test(p)||/^#(?:x(?:00)?[2-7]|\d)/.test(n))&&(s=P(s,++e))):l<16*16&&(s=`${p}${n}`)}}}return s},te=t=>new Promise((e,s)=>{let r=new V;r.addEventListener("error",()=>s(r.error)),r.addEventListener("abort",()=>e(r.result)),r.addEventListener("load",()=>e(r.result)),r.readAsDataURL(t)}),k=class{#e;constructor(){this.#e=new Set(C)}get(){return[...this.#e]}has(e){return this.#e.has(e)}add(e){if(d(e)){if(j.test(e)||!Q.test(e))throw new Error(`Invalid scheme: ${e}`)}else throw new TypeError(`Expected String but got ${g(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=!j.test(i)&&J.test(i)||o.every(a=>this.#e.has(a))}catch{s=!1}return!!s}reset(){this.#e.clear();for(let e of C)this.#e.add(e)}};var O=class extends k{#e;#t;constructor(){super(),this.#e=0,this.#t=new Set}replace(e){if(!d(e))throw new TypeError(`Expected String but got ${g(e)}.`);let s=e;if(S.test(s)){let i=[...s.matchAll(q)].reverse();for(let o of i){let[a]=o;D.test(a)&&([a]=D.exec(a)),this.#e++,this.#t.add(a);let c=this.sanitize(a,{allow:["data"]}),{index:l}=o,[u,p]=[s.substring(0,l),s.substring(l+a.length)];c?s=`${u}${c}${p}`:s=`${u}${p}`}}return s}purify(e){if(!d(e))throw new TypeError(`Expected String but got ${g(e)}.`);let s=N.sanitize(decodeURIComponent(e));return s&&S.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}=s??{},a=new Map([["blob",!1],["data",!1],["file",!1],["javascrpt",!1],["vbscript",!1]]),c=new Set,l=!1;if(Array.isArray(o)&&o.length){let p=super.get();for(let m of p)a.set(m,!1);let n=Object.values(o);for(let m of n)if(d(m)&&(m=m.trim(),!A.test(m))){if(super.has(m))a.set(m,!0);else{try{super.add(m)}catch{}super.has(m)&&(a.set(m,!0),c.add(m))}!l&&a.has(m)&&(l=a.get(m))}}else{if(Array.isArray(r)&&r.length){let p=Object.values(r);for(let n of p)if(d(n)&&(n=n.trim(),!A.test(n)))if(super.has(n))a.set(n,!0);else{try{super.add(n)}catch{}super.has(n)&&(a.set(n,!0),c.add(n))}}if(Array.isArray(i)&&i.length){let p=Object.values(i);for(let n of p)d(n)&&(n=n.trim(),n&&a.set(n,!1))}}let u;if(super.verify(e)){let{hash:p,href:n,pathname:m,protocol:U,search:w}=new URL(e),E=U.replace(/:$/,""),G=E.split("+"),_;if(l)_=G.every(y=>a.get(y));else for(let[y,R]of a.entries())if(_=R||E!==y&&G.every(f=>f!==y),!_)break;if(_){let y=G.includes("data"),R,f=n;if(y){let[v,...z]=m.split(","),$=`${z.join(",")}${w}${p}`,T=v.split(";"),I=T[T.length-1]==="base64",h=$;I&&(h=ee($));try{let F=P(h).trim(),{protocol:se}=new URL(F);se.replace(/:$/,"").split("+").some(re=>A.test(re))&&(f="")}catch{}let B=S.test(h);h!==$||B?B?h=this.replace(h):this.#t.has(e)?this.#t.delete(e):R=!0:this.#t.has(e)?this.#t.delete(e):R=!0,(!v||Y.test(v))&&(h=this.purify(h)),f&&h?(I&&h!==$&&T.pop(),f=`${E}:${T.join(";")},${h}`):f=""}else R=!0;if(!y&&M.test(f)){let v=M.exec(f),{index:z}=v;f=f.substring(0,z).replace(/[?&]$/,"")}f?(u=f.replace(/%26/g,Z),R&&(this.#e=0)):this.#e=0}c.size&&c.forEach(y=>{super.remove(y)})}return u||null}parse(e,s){if(!d(e))throw new TypeError(`Expected String but got ${g(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:a,protocol:c}=o,u=c.replace(/:$/,"").split("+").includes("data");if(r.set("valid",!0),u){let p=new Map,[n,...m]=a.split(","),U=`${m.join(",")}`,w=n.split(";"),E=w[w.length-1]==="base64";E&&w.pop(),p.set("mime",w.join(";")),p.set("base64",E),p.set("data",U),r.set("data",Object.fromEntries(p))}else r.set("data",null);for(let p in o){let n=o[p];d(n)&&r.set(p,n)}}else r.set("valid",!1);return Object.fromEntries(r)}reset(){super.reset(),this.#e=0,this.#t.clear()}},b=new O,ce=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:a}=e;if(Array.isArray(i)&&i.includes("blob")&&!(Array.isArray(o)&&o.includes("blob"))||Array.isArray(a)&&a.includes("blob")){let c;try{c=await fetch(t).then(l=>l.blob()).then(te)}catch{}if(c){if(Array.isArray(a))a.includes("data")||a.push("data");else if(Array.isArray(i)&&(i.includes("data")||i.push("data"),Array.isArray(o)&&o.includes("data"))){let l=o.indexOf("data");o.splice(l,1)}s=b.sanitize(c,e)}}URL.revokeObjectURL(t)}else r&&(s=b.sanitize(t,e))}return s||null},pe=(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=b.sanitize(t,e))}return s||null},le=async t=>b.parse(t),me=t=>b.parse(t),de=async t=>b.verify(t),fe=t=>b.verify(t),he=b;export{he as default,de as isURI,fe as isURISync,le as parseURL,me as parseURLSync,ce as sanitizeURL,pe as sanitizeURLSync};
1
+ var{DOMPurify:N}=globalThis;var H=/^[\w+/=-]+$/;var S=/data:[\w#&+./;=-]*,/,D=/data:[\w#&+./;=^]*base64,[\w+/=-]+/i,q=/data:[\w#&+./;=-]*,[^"]+/g,X=/&#(x(?:00)?[\dA-F]{2}|0?\d{1,3});?/gi,Y=/^(?:application\/(?:[\w#&.;-]+\+)?x|image\/svg\+x|text\/(?:ht|x))ml;?/;var Q=/^[a-z][\da-z+.-]*$/,J=/^(?:ext|web)\+[a-z]+$/,j=/(?:java|vb)script/,A=/(?:java|vb)script|blob/,M=/%(?:2[27]|3[CE])|[<>"']/,K=/^%[\dA-F]{2}$/i;var g=t=>Object.prototype.toString.call(t).slice(8,-1),d=t=>typeof t=="string"||t instanceof String;var{FileReader:V}=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 C=["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","hs20","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-recall","ms-remotedesktop","ms-remotedesktop-launch","ms-restoretabcompanion","ms-screenclip","ms-screensketch","ms-search","ms-search-repair","ms-secondary-screen-controller","ms-secondary-screen-setup","ms-settings","ms-settings-airplanemode","ms-settings-bluetooth","ms-settings-camera","ms-settings-cellular","ms-settings-cloudstorage","ms-settings-connectabledevices","ms-settings-displays-topology","ms-settings-emailandaccounts","ms-settings-language","ms-settings-location","ms-settings-lock","ms-settings-nfctransactions","ms-settings-notifications","ms-settings-power","ms-settings-privacy","ms-settings-proximity","ms-settings-screenrotation","ms-settings-wifi","ms-settings-workplace","ms-spd","ms-stickers","ms-sttoverlay","ms-transit-to","ms-useractivityset","ms-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","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","thzp","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 W=t=>{if(!d(t))throw new TypeError(`Expected String but got ${g(t)}.`);let e=[];for(let s of t)e.push(`%${s.charCodeAt(0).toString(16).toUpperCase()}`);return e.join("")},Z=t=>{d(t)&&K.test(t)&&(t=t.toUpperCase());let[e,s,r,i,o,a]=["&","#","<",">",'"',"'"].map(W),c;return t===e?c=`${e}amp;`:t===r?c=`${e}lt;`:t===i?c=`${e}gt;`:t===o?c=`${e}quot;`:t===a?c=`${e}${s}39;`:c=t,c},ee=t=>{if(d(t)){if(!H.test(t))throw new Error(`Invalid base64 data: ${t}`)}else throw new TypeError(`Expected String but got ${g(t)}.`);let e=atob(t),s=Uint8Array.from([...e].map(o=>o.charCodeAt(0))),r=new Set(L),i;return s.every(o=>r.has(o))?i=e.replace(/\s/g,W):i=t,i},P=(t,e=0)=>{if(!d(t))throw new TypeError(`Expected String but got ${g(t)}.`);if(Number.isInteger(e)){if(e>16)throw new Error("Character references nested too deeply.")}else throw new TypeError(`Expected Number but got ${g(e)}.`);let s=decodeURIComponent(t);if(/&#/.test(s)){let r=new Set(L),i=[...s.matchAll(X)].reverse();for(let o of i){let[a,c]=o,l;if(/^x[\dA-F]+/i.test(c)?l=parseInt(`0${c}`,16):/^\d+/.test(c)&&(l=parseInt(c)),Number.isInteger(l)){let{index:u}=o,[p,n]=[s.substring(0,u),s.substring(u+a.length)];r.has(l)?(s=`${p}${String.fromCharCode(l)}${n}`,(/#x?$/.test(p)||/^#(?:x(?:00)?[2-7]|\d)/.test(n))&&(s=P(s,++e))):l<16*16&&(s=`${p}${n}`)}}}return s},te=t=>new Promise((e,s)=>{let r=new V;r.addEventListener("error",()=>s(r.error)),r.addEventListener("abort",()=>e(r.result)),r.addEventListener("load",()=>e(r.result)),r.readAsDataURL(t)}),k=class{#e;constructor(){this.#e=new Set(C)}get(){return[...this.#e]}has(e){return this.#e.has(e)}add(e){if(d(e)){if(j.test(e)||!Q.test(e))throw new Error(`Invalid scheme: ${e}`)}else throw new TypeError(`Expected String but got ${g(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=!j.test(i)&&J.test(i)||o.every(a=>this.#e.has(a))}catch{s=!1}return!!s}reset(){this.#e.clear();for(let e of C)this.#e.add(e)}};var O=class extends k{#e;#t;constructor(){super(),this.#e=0,this.#t=new Set}replace(e){if(!d(e))throw new TypeError(`Expected String but got ${g(e)}.`);let s=e;if(S.test(s)){let i=[...s.matchAll(q)].reverse();for(let o of i){let[a]=o;D.test(a)&&([a]=D.exec(a)),this.#e++,this.#t.add(a);let c=this.sanitize(a,{allow:["data"]}),{index:l}=o,[u,p]=[s.substring(0,l),s.substring(l+a.length)];c?s=`${u}${c}${p}`:s=`${u}${p}`}}return s}purify(e){if(!d(e))throw new TypeError(`Expected String but got ${g(e)}.`);let s=N.sanitize(decodeURIComponent(e));return s&&S.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}=s??{},a=new Map([["blob",!1],["data",!1],["file",!1],["javascrpt",!1],["vbscript",!1]]),c=new Set,l=!1;if(Array.isArray(o)&&o.length){let p=super.get();for(let m of p)a.set(m,!1);let n=Object.values(o);for(let m of n)if(d(m)&&(m=m.trim(),!A.test(m))){if(super.has(m))a.set(m,!0);else{try{super.add(m)}catch{}super.has(m)&&(a.set(m,!0),c.add(m))}!l&&a.has(m)&&(l=a.get(m))}}else{if(Array.isArray(r)&&r.length){let p=Object.values(r);for(let n of p)if(d(n)&&(n=n.trim(),!A.test(n)))if(super.has(n))a.set(n,!0);else{try{super.add(n)}catch{}super.has(n)&&(a.set(n,!0),c.add(n))}}if(Array.isArray(i)&&i.length){let p=Object.values(i);for(let n of p)d(n)&&(n=n.trim(),n&&a.set(n,!1))}}let u;if(super.verify(e)){let{hash:p,href:n,pathname:m,protocol:U,search:w}=new URL(e),E=U.replace(/:$/,""),G=E.split("+"),_;if(l)_=G.every(y=>a.get(y));else for(let[y,R]of a.entries())if(_=R||E!==y&&G.every(f=>f!==y),!_)break;if(_){let y=G.includes("data"),R,f=n;if(y){let[v,...z]=m.split(","),$=`${z.join(",")}${w}${p}`,T=v.split(";"),I=T[T.length-1]==="base64",h=$;I&&(h=ee($));try{let F=P(h).trim(),{protocol:se}=new URL(F);se.replace(/:$/,"").split("+").some(re=>A.test(re))&&(f="")}catch{}let B=S.test(h);h!==$||B?B?h=this.replace(h):this.#t.has(e)?this.#t.delete(e):R=!0:this.#t.has(e)?this.#t.delete(e):R=!0,(!v||Y.test(v))&&(h=this.purify(h)),f&&h?(I&&h!==$&&T.pop(),f=`${E}:${T.join(";")},${h}`):f=""}else R=!0;if(!y&&M.test(f)){let v=M.exec(f),{index:z}=v;f=f.substring(0,z).replace(/[?&]$/,"")}f?(u=f.replace(/%26/g,Z),R&&(this.#e=0)):this.#e=0}c.size&&c.forEach(y=>{super.remove(y)})}return u||null}parse(e,s){if(!d(e))throw new TypeError(`Expected String but got ${g(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:a,protocol:c}=o,u=c.replace(/:$/,"").split("+").includes("data");if(r.set("valid",!0),u){let p=new Map,[n,...m]=a.split(","),U=`${m.join(",")}`,w=n.split(";"),E=w[w.length-1]==="base64";E&&w.pop(),p.set("mime",w.join(";")),p.set("base64",E),p.set("data",U),r.set("data",Object.fromEntries(p))}else r.set("data",null);for(let p in o){let n=o[p];d(n)&&r.set(p,n)}}else r.set("valid",!1);return Object.fromEntries(r)}reset(){super.reset(),this.#e=0,this.#t.clear()}},b=new O,ce=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:a}=e;if(Array.isArray(i)&&i.includes("blob")&&!(Array.isArray(o)&&o.includes("blob"))||Array.isArray(a)&&a.includes("blob")){let c;try{c=await fetch(t).then(l=>l.blob()).then(te)}catch{}if(c){if(Array.isArray(a))a.includes("data")||a.push("data");else if(Array.isArray(i)&&(i.includes("data")||i.push("data"),Array.isArray(o)&&o.includes("data"))){let l=o.indexOf("data");o.splice(l,1)}s=b.sanitize(c,e)}}URL.revokeObjectURL(t)}else r&&(s=b.sanitize(t,e))}return s||null},pe=(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=b.sanitize(t,e))}return s||null},le=async t=>b.parse(t),me=t=>b.parse(t),de=async t=>b.verify(t),fe=t=>b.verify(t),he=b;export{he as default,de as isURI,fe as isURISync,le as parseURL,me as parseURLSync,ce as sanitizeURL,pe as sanitizeURLSync};
2
2
  /*!
3
3
  * URL Sanitizer
4
4
  *
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../bundle_wo_dompurify/mjs/dompurify.js", "../bundle_wo_dompurify/mjs/constant.js", "../bundle_wo_dompurify/mjs/common.js", "../bundle_wo_dompurify/mjs/file-reader.js", "../bundle_wo_dompurify/lib/file/text-chars.json", "../bundle_wo_dompurify/lib/iana/uri-schemes.json", "../bundle_wo_dompurify/mjs/uri-util.js", "../bundle_wo_dompurify/mjs/sanitizer.js"],
4
- "sourcesContent": ["/**\n * dompurify.js\n */\n\nconst { DOMPurify } = globalThis;\n\nexport {\n DOMPurify as domPurify\n};\n", "/**\n * constant.js\n */\n\n/* numeric */\nexport const HEX = 16;\nexport const TYPE_FROM = 8;\nexport const TYPE_TO = -1;\n\n/* regexp */\nexport const REG_B64 = /^[\\w+/=-]+$/;\nexport const REG_CHARSET = /^charset=([\\w#&.;-]+)$/;\nexport const REG_DATA_URL = /data:[\\w#&+./;=-]*,/;\nexport const REG_DATA_URL_B64 = /data:[\\w#&+./;=^]*base64,[\\w+/=-]+/i;\nexport const REG_DATA_URL_G = /data:[\\w#&+./;=-]*,[^\"]+/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_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, parseBase64,\n parseURLEncodedNumCharRef, URISchemes\n} from './uri-util.js';\nimport {\n HEX, REG_DATA_URL, REG_DATA_URL_B64, REG_DATA_URL_G, REG_MIME_DOM,\n REG_SCRIPT_BLOB, REG_TAG_QUOT\n} from './constant.js';\n\n/* typedef */\n/**\n * @typedef {object} ParsedURL - object with additional props based on URL API\n * @property {string} input - URL input\n * @property {boolean} valid - is valid URI\n * @property {object} [data] - parsed result of data URL, `null`able\n * @property {string} [data.mime] - MIME type\n * @property {boolean} [data.base64] - is base64 encoded\n * @property {string} [data.data] - data part of the data URL\n * @property {string} [href] - sanitized URL input\n * @property {string} [origin] - scheme, domain and port of the sanitized URL\n * @property {string} [protocol] - protocol scheme of the sanitized URL\n * @property {string} [username] - username specified before the domain name\n * @property {string} [password] - password specified before the domain name\n * @property {string} [host] - domain and port of the sanitized URL\n * @property {string} [hostname] - domain of the sanitized URL\n * @property {string} [port] - port number of the sanitized URL\n * @property {string} [pathname] - path of the sanitized URL\n * @property {string} [search] - query string of the sanitized URL\n * @property {string} [hash] - fragment identifier of the sanitized URL\n */\n\n/**\n * URL sanitizer\n */\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 * @returns {?string} - sanitized URL\n */\n sanitize(url, opt) {\n if (this.#nest > HEX) {\n this.#nest = 0;\n throw new Error('Data URLs nested too deeply.');\n }\n const { allow, deny, only } = opt ?? {};\n const schemeMap = new Map([\n ['blob', false],\n ['data', false],\n ['file', false],\n ['javascrpt', false],\n ['vbscript', false]\n ]);\n const tempScheme = new Set();\n let restrictScheme = false;\n if (Array.isArray(only) && only.length) {\n const schemes = super.get();\n for (const item of schemes) {\n schemeMap.set(item, false);\n }\n const items = Object.values(only);\n for (let item of items) {\n if (isString(item)) {\n item = item.trim();\n if (!REG_SCRIPT_BLOB.test(item)) {\n if (super.has(item)) {\n schemeMap.set(item, true);\n } else {\n try {\n super.add(item);\n } catch (e) {\n // fall through\n }\n if (super.has(item)) {\n schemeMap.set(item, true);\n tempScheme.add(item);\n }\n }\n if (!restrictScheme && schemeMap.has(item)) {\n restrictScheme = schemeMap.get(item);\n }\n }\n }\n }\n } else {\n if (Array.isArray(allow) && allow.length) {\n const items = Object.values(allow);\n for (let item of items) {\n if (isString(item)) {\n item = item.trim();\n if (!REG_SCRIPT_BLOB.test(item)) {\n if (super.has(item)) {\n schemeMap.set(item, true);\n } else {\n try {\n super.add(item);\n } catch (e) {\n // fall through\n }\n if (super.has(item)) {\n schemeMap.set(item, true);\n tempScheme.add(item);\n }\n }\n }\n }\n }\n }\n if (Array.isArray(deny) && deny.length) {\n const items = Object.values(deny);\n for (let item of items) {\n if (isString(item)) {\n item = item.trim();\n if (item) {\n schemeMap.set(item, false);\n }\n }\n }\n }\n }\n let sanitizedUrl;\n if (super.verify(url)) {\n const { hash, href, pathname, protocol, search } = new URL(url);\n const scheme = protocol.replace(/:$/, '');\n const schemeParts = scheme.split('+');\n let bool;\n if (restrictScheme) {\n bool = schemeParts.every(s => schemeMap.get(s));\n } else {\n for (const [key, value] of schemeMap.entries()) {\n bool = value || (scheme !== key && schemeParts.every(s => s !== key));\n if (!bool) {\n break;\n }\n }\n }\n if (bool) {\n const isDataUrl = schemeParts.includes('data');\n let finalize;\n let urlToSanitize = href;\n if (isDataUrl) {\n const [mediaType, ...dataParts] = pathname.split(',');\n const data = `${dataParts.join(',')}${search}${hash}`;\n const mediaTypes = mediaType.split(';');\n const isBase64 = mediaTypes[mediaTypes.length - 1] === 'base64';\n let parsedData = data;\n if (isBase64) {\n parsedData = parseBase64(data);\n }\n try {\n const decodedData = parseURLEncodedNumCharRef(parsedData).trim();\n const { protocol: dataScheme } = new URL(decodedData);\n const dataSchemeParts = dataScheme.replace(/:$/, '').split('+');\n if (dataSchemeParts.some(s => REG_SCRIPT_BLOB.test(s))) {\n urlToSanitize = '';\n }\n } catch (e) {\n // fall through\n }\n const containsDataUrl = REG_DATA_URL.test(parsedData);\n if (parsedData !== data || containsDataUrl) {\n if (containsDataUrl) {\n parsedData = this.replace(parsedData);\n } else if (this.#recurse.has(url)) {\n this.#recurse.delete(url);\n } else {\n finalize = true;\n }\n } else if (this.#recurse.has(url)) {\n this.#recurse.delete(url);\n } else {\n finalize = true;\n }\n if (!mediaType || REG_MIME_DOM.test(mediaType)) {\n parsedData = this.purify(parsedData);\n }\n if (urlToSanitize && parsedData) {\n if (isBase64 && parsedData !== data) {\n mediaTypes.pop();\n }\n urlToSanitize = `${scheme}:${mediaTypes.join(';')},${parsedData}`;\n } else {\n urlToSanitize = '';\n }\n } else {\n finalize = true;\n }\n if (!isDataUrl && REG_TAG_QUOT.test(urlToSanitize)) {\n const item = REG_TAG_QUOT.exec(urlToSanitize);\n const { index } = item;\n urlToSanitize =\n urlToSanitize.substring(0, index).replace(/[?&]$/, '');\n }\n if (urlToSanitize) {\n sanitizedUrl =\n urlToSanitize.replace(/%26/g, escapeURLEncodedHTMLChars);\n if (finalize) {\n this.#nest = 0;\n }\n } else {\n this.#nest = 0;\n }\n }\n if (tempScheme.size) {\n tempScheme.forEach(item => {\n super.remove(item);\n });\n }\n }\n return sanitizedUrl || null;\n }\n\n /**\n * parse sanitized URL\n * @param {string} url - URL\n * @param {object} [opt] - options\n * @param {Array.<string>} [opt.allow] - array of allowed schemes\n * @param {Array.<string>} [opt.deny] - array of denied schemes\n * @param {Array.<string>} [opt.only] - array of specific schemes to allow\n * @returns {ParsedURL} - result with additional props based on URL API\n */\n parse(url, opt) {\n if (!isString(url)) {\n throw new TypeError(`Expected String but got ${getType(url)}.`);\n }\n const parsedUrl = new Map([\n ['input', url]\n ]);\n let sanitizedUrl;\n if (this.verify(url)) {\n const { protocol } = new URL(url);\n if (protocol === 'blob:') {\n sanitizedUrl = url;\n } else {\n sanitizedUrl = this.sanitize(url, opt ?? {\n allow: ['data', 'file']\n });\n }\n }\n if (sanitizedUrl) {\n const urlObj = new URL(sanitizedUrl);\n const { pathname, protocol } = urlObj;\n const schemeParts = protocol.replace(/:$/, '').split('+');\n const isDataUrl = schemeParts.includes('data');\n parsedUrl.set('valid', true);\n if (isDataUrl) {\n const dataUrl = new Map();\n const [mediaType, ...dataParts] = pathname.split(',');\n const data = `${dataParts.join(',')}`;\n const mediaTypes = mediaType.split(';');\n const isBase64 = mediaTypes[mediaTypes.length - 1] === 'base64';\n if (isBase64) {\n mediaTypes.pop();\n }\n dataUrl.set('mime', mediaTypes.join(';'));\n dataUrl.set('base64', isBase64);\n dataUrl.set('data', data);\n parsedUrl.set('data', Object.fromEntries(dataUrl));\n } else {\n parsedUrl.set('data', null);\n }\n for (const key in urlObj) {\n const value = urlObj[key];\n if (isString(value)) {\n parsedUrl.set(key, value);\n }\n }\n } else {\n parsedUrl.set('valid', false);\n }\n return Object.fromEntries(parsedUrl);\n }\n\n /**\n * reset sanitizer\n * @returns {void}\n */\n reset() {\n super.reset();\n this.#nest = 0;\n this.#recurse.clear();\n }\n};\n\n/* aliases and async wrappers */\n/* instance */\nconst urlSanitizer = new URLSanitizer();\n\n/**\n * sanitize URL async\n * NOTE: `blob`, `data` and `file` schemes must be explicitly allowed\n * given a `blob` URL, returns a sanitized `data` URL\n * @param {string} url - URL\n * @param {object} [opt] - options\n * @param {Array.<string>} [opt.allow] - array of allowed schemes\n * @param {Array.<string>} [opt.deny] - array of denied schemes\n * @param {Array.<string>} [opt.only] - array of specific schemes to allow\n * @returns {Promise.<?string>} - sanitized URL\n */\nexport const sanitizeURL = async (url, opt = {\n allow: [],\n deny: [],\n only: []\n}) => {\n let res;\n if (url && isString(url)) {\n let scheme;\n try {\n const { protocol } = new URL(url);\n scheme = protocol.replace(/:$/, '');\n } catch (e) {\n // fall through;\n }\n if (scheme === 'blob') {\n const { allow, deny, only } = opt;\n if ((Array.isArray(allow) && allow.includes('blob') &&\n !(Array.isArray(deny) && deny.includes('blob'))) ||\n (Array.isArray(only) && only.includes('blob'))) {\n let data;\n try {\n data =\n await fetch(url).then(r => r.blob()).then(createDataURLFromBlob);\n } catch (e) {\n // fall through\n }\n if (data) {\n if (Array.isArray(only)) {\n if (!only.includes('data')) {\n only.push('data');\n }\n } else if (Array.isArray(allow)) {\n if (!allow.includes('data')) {\n allow.push('data');\n }\n if (Array.isArray(deny) && deny.includes('data')) {\n const i = deny.indexOf('data');\n deny.splice(i, 1);\n }\n }\n res = urlSanitizer.sanitize(data, opt);\n }\n }\n URL.revokeObjectURL(url);\n } else if (scheme) {\n res = urlSanitizer.sanitize(url, opt);\n }\n }\n return res || null;\n};\n\n/**\n * sanitize URL sync\n * NOTE: `data` and `file` schemes must be explicitly allowed\n * `blob` scheme returns `null`\n * @param {string} url - URL\n * @param {object} [opt] - options\n * @param {Array.<string>} [opt.allow] - array of allowed schemes\n * @param {Array.<string>} [opt.deny] - array of denied schemes\n * @param {Array.<string>} [opt.only] - array of specific schemes to allow\n * @returns {?string} - sanitized URL\n */\nexport const sanitizeURLSync = (url, opt) => {\n let res;\n if (url && isString(url)) {\n let scheme;\n try {\n const { protocol } = new URL(url);\n scheme = protocol.replace(/:$/, '');\n } catch (e) {\n // fall through;\n }\n if (scheme === 'blob') {\n URL.revokeObjectURL(url);\n } else if (scheme) {\n res = urlSanitizer.sanitize(url, opt);\n }\n }\n return res || null;\n};\n\n/**\n * parse URL async\n * @param {string} url - URL\n * @returns {Promise.<ParsedURL>} - result\n */\nexport const parseURL = async url => {\n const res = urlSanitizer.parse(url);\n return res;\n};\n\n/**\n * parse URL sync\n * @param {string} url - URL\n * @returns {ParsedURL} - result\n */\nexport const parseURLSync = url => urlSanitizer.parse(url);\n\n/**\n * is URI async\n * @param {string} uri - URI\n * @returns {Promise.<boolean>} - result\n */\nexport const isURI = async uri => {\n const res = urlSanitizer.verify(uri);\n return res;\n};\n\n/**\n * is URI sync\n * @param {string} uri - URI\n * @returns {boolean} - result\n */\nexport const isURISync = uri => urlSanitizer.verify(uri);\n\n/* export instance */\nexport default urlSanitizer;\n"],
5
- "mappings": "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",
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_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\",\"hs20\",\"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-recall\",\"ms-remotedesktop\",\"ms-remotedesktop-launch\",\"ms-restoretabcompanion\",\"ms-screenclip\",\"ms-screensketch\",\"ms-search\",\"ms-search-repair\",\"ms-secondary-screen-controller\",\"ms-secondary-screen-setup\",\"ms-settings\",\"ms-settings-airplanemode\",\"ms-settings-bluetooth\",\"ms-settings-camera\",\"ms-settings-cellular\",\"ms-settings-cloudstorage\",\"ms-settings-connectabledevices\",\"ms-settings-displays-topology\",\"ms-settings-emailandaccounts\",\"ms-settings-language\",\"ms-settings-location\",\"ms-settings-lock\",\"ms-settings-nfctransactions\",\"ms-settings-notifications\",\"ms-settings-power\",\"ms-settings-privacy\",\"ms-settings-proximity\",\"ms-settings-screenrotation\",\"ms-settings-wifi\",\"ms-settings-workplace\",\"ms-spd\",\"ms-stickers\",\"ms-sttoverlay\",\"ms-transit-to\",\"ms-useractivityset\",\"ms-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\",\"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\",\"thzp\",\"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, parseBase64,\n parseURLEncodedNumCharRef, URISchemes\n} from './uri-util.js';\nimport {\n HEX, REG_DATA_URL, REG_DATA_URL_B64, REG_DATA_URL_G, REG_MIME_DOM,\n REG_SCRIPT_BLOB, REG_TAG_QUOT\n} from './constant.js';\n\n/* typedef */\n/**\n * @typedef {object} ParsedURL - object with additional props based on URL API\n * @property {string} input - URL input\n * @property {boolean} valid - is valid URI\n * @property {object} [data] - parsed result of data URL, `null`able\n * @property {string} [data.mime] - MIME type\n * @property {boolean} [data.base64] - is base64 encoded\n * @property {string} [data.data] - data part of the data URL\n * @property {string} [href] - sanitized URL input\n * @property {string} [origin] - scheme, domain and port of the sanitized URL\n * @property {string} [protocol] - protocol scheme of the sanitized URL\n * @property {string} [username] - username specified before the domain name\n * @property {string} [password] - password specified before the domain name\n * @property {string} [host] - domain and port of the sanitized URL\n * @property {string} [hostname] - domain of the sanitized URL\n * @property {string} [port] - port number of the sanitized URL\n * @property {string} [pathname] - path of the sanitized URL\n * @property {string} [search] - query string of the sanitized URL\n * @property {string} [hash] - fragment identifier of the sanitized URL\n */\n\n/**\n * URL sanitizer\n */\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 * @returns {?string} - sanitized URL\n */\n sanitize(url, opt) {\n if (this.#nest > HEX) {\n this.#nest = 0;\n throw new Error('Data URLs nested too deeply.');\n }\n const { allow, deny, only } = opt ?? {};\n const schemeMap = new Map([\n ['blob', false],\n ['data', false],\n ['file', false],\n ['javascrpt', false],\n ['vbscript', false]\n ]);\n const tempScheme = new Set();\n let restrictScheme = false;\n if (Array.isArray(only) && only.length) {\n const schemes = super.get();\n for (const item of schemes) {\n schemeMap.set(item, false);\n }\n const items = Object.values(only);\n for (let item of items) {\n if (isString(item)) {\n item = item.trim();\n if (!REG_SCRIPT_BLOB.test(item)) {\n if (super.has(item)) {\n schemeMap.set(item, true);\n } else {\n try {\n super.add(item);\n } catch (e) {\n // fall through\n }\n if (super.has(item)) {\n schemeMap.set(item, true);\n tempScheme.add(item);\n }\n }\n if (!restrictScheme && schemeMap.has(item)) {\n restrictScheme = schemeMap.get(item);\n }\n }\n }\n }\n } else {\n if (Array.isArray(allow) && allow.length) {\n const items = Object.values(allow);\n for (let item of items) {\n if (isString(item)) {\n item = item.trim();\n if (!REG_SCRIPT_BLOB.test(item)) {\n if (super.has(item)) {\n schemeMap.set(item, true);\n } else {\n try {\n super.add(item);\n } catch (e) {\n // fall through\n }\n if (super.has(item)) {\n schemeMap.set(item, true);\n tempScheme.add(item);\n }\n }\n }\n }\n }\n }\n if (Array.isArray(deny) && deny.length) {\n const items = Object.values(deny);\n for (let item of items) {\n if (isString(item)) {\n item = item.trim();\n if (item) {\n schemeMap.set(item, false);\n }\n }\n }\n }\n }\n let sanitizedUrl;\n if (super.verify(url)) {\n const { hash, href, pathname, protocol, search } = new URL(url);\n const scheme = protocol.replace(/:$/, '');\n const schemeParts = scheme.split('+');\n let bool;\n if (restrictScheme) {\n bool = schemeParts.every(s => schemeMap.get(s));\n } else {\n for (const [key, value] of schemeMap.entries()) {\n bool = value || (scheme !== key && schemeParts.every(s => s !== key));\n if (!bool) {\n break;\n }\n }\n }\n if (bool) {\n const isDataUrl = schemeParts.includes('data');\n let finalize;\n let urlToSanitize = href;\n if (isDataUrl) {\n const [mediaType, ...dataParts] = pathname.split(',');\n const data = `${dataParts.join(',')}${search}${hash}`;\n const mediaTypes = mediaType.split(';');\n const isBase64 = mediaTypes[mediaTypes.length - 1] === 'base64';\n let parsedData = data;\n if (isBase64) {\n parsedData = parseBase64(data);\n }\n try {\n const decodedData = parseURLEncodedNumCharRef(parsedData).trim();\n const { protocol: dataScheme } = new URL(decodedData);\n const dataSchemeParts = dataScheme.replace(/:$/, '').split('+');\n if (dataSchemeParts.some(s => REG_SCRIPT_BLOB.test(s))) {\n urlToSanitize = '';\n }\n } catch (e) {\n // fall through\n }\n const containsDataUrl = REG_DATA_URL.test(parsedData);\n if (parsedData !== data || containsDataUrl) {\n if (containsDataUrl) {\n parsedData = this.replace(parsedData);\n } else if (this.#recurse.has(url)) {\n this.#recurse.delete(url);\n } else {\n finalize = true;\n }\n } else if (this.#recurse.has(url)) {\n this.#recurse.delete(url);\n } else {\n finalize = true;\n }\n if (!mediaType || REG_MIME_DOM.test(mediaType)) {\n parsedData = this.purify(parsedData);\n }\n if (urlToSanitize && parsedData) {\n if (isBase64 && parsedData !== data) {\n mediaTypes.pop();\n }\n urlToSanitize = `${scheme}:${mediaTypes.join(';')},${parsedData}`;\n } else {\n urlToSanitize = '';\n }\n } else {\n finalize = true;\n }\n if (!isDataUrl && REG_TAG_QUOT.test(urlToSanitize)) {\n const item = REG_TAG_QUOT.exec(urlToSanitize);\n const { index } = item;\n urlToSanitize =\n urlToSanitize.substring(0, index).replace(/[?&]$/, '');\n }\n if (urlToSanitize) {\n sanitizedUrl =\n urlToSanitize.replace(/%26/g, escapeURLEncodedHTMLChars);\n if (finalize) {\n this.#nest = 0;\n }\n } else {\n this.#nest = 0;\n }\n }\n if (tempScheme.size) {\n tempScheme.forEach(item => {\n super.remove(item);\n });\n }\n }\n return sanitizedUrl || null;\n }\n\n /**\n * parse sanitized URL\n * @param {string} url - URL\n * @param {object} [opt] - options\n * @param {Array.<string>} [opt.allow] - array of allowed schemes\n * @param {Array.<string>} [opt.deny] - array of denied schemes\n * @param {Array.<string>} [opt.only] - array of specific schemes to allow\n * @returns {ParsedURL} - result with additional props based on URL API\n */\n parse(url, opt) {\n if (!isString(url)) {\n throw new TypeError(`Expected String but got ${getType(url)}.`);\n }\n const parsedUrl = new Map([\n ['input', url]\n ]);\n let sanitizedUrl;\n if (this.verify(url)) {\n const { protocol } = new URL(url);\n if (protocol === 'blob:') {\n sanitizedUrl = url;\n } else {\n sanitizedUrl = this.sanitize(url, opt ?? {\n allow: ['data', 'file']\n });\n }\n }\n if (sanitizedUrl) {\n const urlObj = new URL(sanitizedUrl);\n const { pathname, protocol } = urlObj;\n const schemeParts = protocol.replace(/:$/, '').split('+');\n const isDataUrl = schemeParts.includes('data');\n parsedUrl.set('valid', true);\n if (isDataUrl) {\n const dataUrl = new Map();\n const [mediaType, ...dataParts] = pathname.split(',');\n const data = `${dataParts.join(',')}`;\n const mediaTypes = mediaType.split(';');\n const isBase64 = mediaTypes[mediaTypes.length - 1] === 'base64';\n if (isBase64) {\n mediaTypes.pop();\n }\n dataUrl.set('mime', mediaTypes.join(';'));\n dataUrl.set('base64', isBase64);\n dataUrl.set('data', data);\n parsedUrl.set('data', Object.fromEntries(dataUrl));\n } else {\n parsedUrl.set('data', null);\n }\n for (const key in urlObj) {\n const value = urlObj[key];\n if (isString(value)) {\n parsedUrl.set(key, value);\n }\n }\n } else {\n parsedUrl.set('valid', false);\n }\n return Object.fromEntries(parsedUrl);\n }\n\n /**\n * reset sanitizer\n * @returns {void}\n */\n reset() {\n super.reset();\n this.#nest = 0;\n this.#recurse.clear();\n }\n};\n\n/* aliases and async wrappers */\n/* instance */\nconst urlSanitizer = new URLSanitizer();\n\n/**\n * sanitize URL async\n * NOTE: `blob`, `data` and `file` schemes must be explicitly allowed\n * given a `blob` URL, returns a sanitized `data` URL\n * @param {string} url - URL\n * @param {object} [opt] - options\n * @param {Array.<string>} [opt.allow] - array of allowed schemes\n * @param {Array.<string>} [opt.deny] - array of denied schemes\n * @param {Array.<string>} [opt.only] - array of specific schemes to allow\n * @returns {Promise.<?string>} - sanitized URL\n */\nexport const sanitizeURL = async (url, opt = {\n allow: [],\n deny: [],\n only: []\n}) => {\n let res;\n if (url && isString(url)) {\n let scheme;\n try {\n const { protocol } = new URL(url);\n scheme = protocol.replace(/:$/, '');\n } catch (e) {\n // fall through;\n }\n if (scheme === 'blob') {\n const { allow, deny, only } = opt;\n if ((Array.isArray(allow) && allow.includes('blob') &&\n !(Array.isArray(deny) && deny.includes('blob'))) ||\n (Array.isArray(only) && only.includes('blob'))) {\n let data;\n try {\n data =\n await fetch(url).then(r => r.blob()).then(createDataURLFromBlob);\n } catch (e) {\n // fall through\n }\n if (data) {\n if (Array.isArray(only)) {\n if (!only.includes('data')) {\n only.push('data');\n }\n } else if (Array.isArray(allow)) {\n if (!allow.includes('data')) {\n allow.push('data');\n }\n if (Array.isArray(deny) && deny.includes('data')) {\n const i = deny.indexOf('data');\n deny.splice(i, 1);\n }\n }\n res = urlSanitizer.sanitize(data, opt);\n }\n }\n URL.revokeObjectURL(url);\n } else if (scheme) {\n res = urlSanitizer.sanitize(url, opt);\n }\n }\n return res || null;\n};\n\n/**\n * sanitize URL sync\n * NOTE: `data` and `file` schemes must be explicitly allowed\n * `blob` scheme returns `null`\n * @param {string} url - URL\n * @param {object} [opt] - options\n * @param {Array.<string>} [opt.allow] - array of allowed schemes\n * @param {Array.<string>} [opt.deny] - array of denied schemes\n * @param {Array.<string>} [opt.only] - array of specific schemes to allow\n * @returns {?string} - sanitized URL\n */\nexport const sanitizeURLSync = (url, opt) => {\n let res;\n if (url && isString(url)) {\n let scheme;\n try {\n const { protocol } = new URL(url);\n scheme = protocol.replace(/:$/, '');\n } catch (e) {\n // fall through;\n }\n if (scheme === 'blob') {\n URL.revokeObjectURL(url);\n } else if (scheme) {\n res = urlSanitizer.sanitize(url, opt);\n }\n }\n return res || null;\n};\n\n/**\n * parse URL async\n * @param {string} url - URL\n * @returns {Promise.<ParsedURL>} - result\n */\nexport const parseURL = async url => {\n const res = urlSanitizer.parse(url);\n return res;\n};\n\n/**\n * parse URL sync\n * @param {string} url - URL\n * @returns {ParsedURL} - result\n */\nexport const parseURLSync = url => urlSanitizer.parse(url);\n\n/**\n * is URI async\n * @param {string} uri - URI\n * @returns {Promise.<boolean>} - result\n */\nexport const isURI = async uri => {\n const res = urlSanitizer.verify(uri);\n return res;\n};\n\n/**\n * is URI sync\n * @param {string} uri - URI\n * @returns {boolean} - result\n */\nexport const isURISync = uri => urlSanitizer.verify(uri);\n\n/* export instance */\nexport default urlSanitizer;\n"],
5
+ "mappings": "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",
6
6
  "names": ["DOMPurify", "REG_B64", "REG_DATA_URL", "REG_DATA_URL_B64", "REG_DATA_URL_G", "REG_NUM_REF", "REG_MIME_DOM", "REG_SCHEME", "REG_SCHEME_EXT", "REG_SCRIPT", "REG_SCRIPT_BLOB", "REG_TAG_QUOT", "REG_URL_ENC", "getType", "o", "isString", "FileReader", "text_chars_default", "uri_schemes_default", "getURLEncodedString", "str", "isString", "getType", "chars", "ch", "escapeURLEncodedHTMLChars", "REG_URL_ENC", "amp", "num", "lt", "gt", "quot", "apos", "escapedChar", "parseBase64", "data", "REG_B64", "bin", "uint8arr", "c", "textCharCodes", "text_chars_default", "parsedData", "parseURLEncodedNumCharRef", "nest", "res", "items", "REG_NUM_REF", "item", "numCharRef", "value", "index", "preNum", "postNum", "createDataURLFromBlob", "blob", "resolve", "reject", "reader", "FileReader", "URISchemes", "#schemes", "uri_schemes_default", "scheme", "REG_SCRIPT", "REG_SCHEME", "uri", "protocol", "schemeParts", "REG_SCHEME_EXT", "s", "URLSanitizer", "URISchemes", "#nest", "#recurse", "data", "isString", "getType", "replacedData", "REG_DATA_URL", "items", "REG_DATA_URL_G", "item", "dataUrl", "REG_DATA_URL_B64", "parsedDataUrl", "index", "preDataUrl", "postDataUrl", "dom", "purifiedDom", "DOMPurify", "url", "opt", "allow", "deny", "only", "schemeMap", "tempScheme", "restrictScheme", "schemes", "REG_SCRIPT_BLOB", "sanitizedUrl", "hash", "href", "pathname", "protocol", "search", "scheme", "schemeParts", "bool", "s", "key", "value", "isDataUrl", "finalize", "urlToSanitize", "mediaType", "dataParts", "mediaTypes", "isBase64", "parsedData", "parseBase64", "decodedData", "parseURLEncodedNumCharRef", "dataScheme", "containsDataUrl", "REG_MIME_DOM", "REG_TAG_QUOT", "escapeURLEncodedHTMLChars", "parsedUrl", "urlObj", "urlSanitizer", "sanitizeURL", "res", "r", "createDataURLFromBlob", "i", "sanitizeURLSync", "parseURL", "parseURLSync", "isURI", "uri", "isURISync", "sanitizer_default"]
7
7
  }
@@ -1,5 +1,5 @@
1
- var Pn=Object.create;var Gt=Object.defineProperty;var kn=Object.getOwnPropertyDescriptor;var Fn=Object.getOwnPropertyNames;var zn=Object.getPrototypeOf,Gn=Object.prototype.hasOwnProperty;var Hn=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var $n=(s,t,r,m)=>{if(t&&typeof t=="object"||typeof t=="function")for(let p of Fn(t))!Gn.call(s,p)&&p!==r&&Gt(s,p,{get:()=>t[p],enumerable:!(m=kn(t,p))||m.enumerable});return s};var Bn=(s,t,r)=>(r=s!=null?Pn(zn(s)):{},$n(t||!s||!s.__esModule?Gt(r,"default",{value:s,enumerable:!0}):r,s));var Ht=Hn((Ze,Qe)=>{(function(s,t){typeof Ze=="object"&&typeof Qe<"u"?Qe.exports=t():typeof define=="function"&&define.amd?define(t):(s=typeof globalThis<"u"?globalThis:s||self,s.DOMPurify=t())})(Ze,function(){"use strict";let{entries:s,setPrototypeOf:t,isFrozen:r,getPrototypeOf:m,getOwnPropertyDescriptor:p}=Object,{freeze:l,seal:c,create:E}=Object,{apply:R,construct:U}=typeof Reflect<"u"&&Reflect;l||(l=function(i){return i}),c||(c=function(i){return i}),R||(R=function(i,g,u){return i.apply(g,u)}),U||(U=function(i,g){return new i(...g)});let T=D(Array.prototype.forEach),h=D(Array.prototype.pop),y=D(Array.prototype.push),B=D(String.prototype.toLowerCase),G=D(String.prototype.toString),W=D(String.prototype.match),j=D(String.prototype.replace),te=D(String.prototype.indexOf),F=D(String.prototype.trim),w=D(Object.prototype.hasOwnProperty),_=D(RegExp.prototype.test),z=ne(TypeError);function D(d){return function(i){for(var g=arguments.length,u=new Array(g>1?g-1:0),N=1;N<g;N++)u[N-1]=arguments[N];return R(d,i,u)}}function ne(d){return function(){for(var i=arguments.length,g=new Array(i),u=0;u<i;u++)g[u]=arguments[u];return U(d,g)}}function f(d,i){let g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:B;t&&t(d,null);let u=i.length;for(;u--;){let N=i[u];if(typeof N=="string"){let Y=g(N);Y!==N&&(r(i)||(i[u]=Y),N=Y)}d[N]=!0}return d}function Te(d){for(let i=0;i<d.length;i++)w(d,i)||(d[i]=null);return d}function S(d){let i=E(null);for(let[g,u]of s(d))w(d,g)&&(Array.isArray(u)?i[g]=Te(u):u&&typeof u=="object"&&u.constructor===Object?i[g]=S(u):i[g]=u);return i}function Z(d,i){for(;d!==null;){let u=p(d,i);if(u){if(u.get)return D(u.get);if(typeof u.value=="function")return D(u.value)}d=m(d)}function g(){return null}return g}let pe=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"]),fe=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"]),_e=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"]),ve=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"]),Me=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"]),en=l(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),rt=l(["#text"]),it=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"]),at=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"]),tn=c(/\{\{[\w\W]*|[\w\W]*\}\}/gm),nn=c(/<%[\w\W]*|[\w\W]*%>/gm),sn=c(/\${[\w\W]*}/gm),on=c(/^data-[\-\w.\u00B7-\uFFFF]/),rn=c(/^aria-[\-\w]+$/),lt=c(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),an=c(/^(?:\w+script|data):/i),ln=c(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),ct=c(/^html$/i),cn=c(/^[a-z][.\w]*(-[.\w]+)+$/i);var pt=Object.freeze({__proto__:null,MUSTACHE_EXPR:tn,ERB_EXPR:nn,TMPLIT_EXPR:sn,DATA_ATTR:on,ARIA_ATTR:rn,IS_ALLOWED_URI:lt,IS_SCRIPT_OR_DATA:an,ATTR_WHITESPACE:ln,DOCTYPE_NAME:ct,CUSTOM_ELEMENT:cn});let pn=function(){return typeof window>"u"?null:window},fn=function(i,g){if(typeof i!="object"||typeof i.createPolicy!="function")return null;let u=null,N="data-tt-policy-suffix";g&&g.hasAttribute(N)&&(u=g.getAttribute(N));let Y="dompurify"+(u?"#"+u:"");try{return i.createPolicy(Y,{createHTML(se){return se},createScriptURL(se){return se}})}catch{return console.warn("TrustedTypes policy "+Y+" could not be created."),null}};function ft(){let d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:pn(),i=a=>ft(a);if(i.version="3.0.11",i.removed=[],!d||!d.document||d.document.nodeType!==9)return i.isSupported=!1,i;let{document:g}=d,u=g,N=u.currentScript,{DocumentFragment:Y,HTMLTemplateElement:se,Node:Ue,Element:mt,NodeFilter:me,NamedNodeMap:un=d.NamedNodeMap||d.MozNamedAttrMap,HTMLFormElement:dn,DOMParser:hn,trustedTypes:ye}=d,Re=mt.prototype,gn=Z(Re,"cloneNode"),En=Z(Re,"nextSibling"),Tn=Z(Re,"childNodes"),Pe=Z(Re,"parentNode");if(typeof se=="function"){let a=g.createElement("template");a.content&&a.content.ownerDocument&&(g=a.content.ownerDocument)}let I,ue="",{implementation:ke,createNodeIterator:_n,createDocumentFragment:An,getElementsByTagName:yn}=g,{importNode:Rn}=u,H={};i.isSupported=typeof s=="function"&&typeof Pe=="function"&&ke&&ke.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:Fe,ERB_EXPR:ze,TMPLIT_EXPR:Ge,DATA_ATTR:bn,ARIA_ATTR:Sn,IS_SCRIPT_OR_DATA:wn,ATTR_WHITESPACE:ut,CUSTOM_ELEMENT:xn}=pt,{IS_ALLOWED_URI:dt}=pt,x=null,ht=f({},[...pe,...fe,..._e,...Me,...rt]),L=null,gt=f({},[...it,...Ie,...at,...Ae]),b=Object.seal(E(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,He=null,Et=!0,$e=!0,Tt=!1,_t=!0,oe=!1,Q=!1,Be=!1,We=!1,re=!1,be=!1,Se=!1,At=!0,yt=!1,Ln="user-content-",je=!0,he=!1,ie={},ae=null,Rt=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"]),bt=null,St=f({},["audio","video","img","source","image","track"]),Ye=null,wt=f({},["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",X="http://www.w3.org/1999/xhtml",le=X,Xe=!1,qe=null,On=f({},[we,xe,X],G),ge=null,Dn=["application/xhtml+xml","text/html"],Cn="text/html",O=null,ce=null,Nn=g.createElement("form"),xt=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=S(e),ge=Dn.indexOf(e.PARSER_MEDIA_TYPE)===-1?Cn:e.PARSER_MEDIA_TYPE,O=ge==="application/xhtml+xml"?G:B,x=w(e,"ALLOWED_TAGS")?f({},e.ALLOWED_TAGS,O):ht,L=w(e,"ALLOWED_ATTR")?f({},e.ALLOWED_ATTR,O):gt,qe=w(e,"ALLOWED_NAMESPACES")?f({},e.ALLOWED_NAMESPACES,G):On,Ye=w(e,"ADD_URI_SAFE_ATTR")?f(S(wt),e.ADD_URI_SAFE_ATTR,O):wt,bt=w(e,"ADD_DATA_URI_TAGS")?f(S(St),e.ADD_DATA_URI_TAGS,O):St,ae=w(e,"FORBID_CONTENTS")?f({},e.FORBID_CONTENTS,O):Rt,de=w(e,"FORBID_TAGS")?f({},e.FORBID_TAGS,O):{},He=w(e,"FORBID_ATTR")?f({},e.FORBID_ATTR,O):{},ie=w(e,"USE_PROFILES")?e.USE_PROFILES:!1,Et=e.ALLOW_ARIA_ATTR!==!1,$e=e.ALLOW_DATA_ATTR!==!1,Tt=e.ALLOW_UNKNOWN_PROTOCOLS||!1,_t=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,oe=e.SAFE_FOR_TEMPLATES||!1,Q=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,At=e.SANITIZE_DOM!==!1,yt=e.SANITIZE_NAMED_PROPS||!1,je=e.KEEP_CONTENT!==!1,he=e.IN_PLACE||!1,dt=e.ALLOWED_URI_REGEXP||lt,le=e.NAMESPACE||X,b=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&xt(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(b.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&xt(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&&(x=f({},rt),L=[],ie.html===!0&&(f(x,pe),f(L,it)),ie.svg===!0&&(f(x,fe),f(L,Ie),f(L,Ae)),ie.svgFilters===!0&&(f(x,_e),f(L,Ie),f(L,Ae)),ie.mathMl===!0&&(f(x,Me),f(L,at),f(L,Ae))),e.ADD_TAGS&&(x===ht&&(x=S(x)),f(x,e.ADD_TAGS,O)),e.ADD_ATTR&&(L===gt&&(L=S(L)),f(L,e.ADD_ATTR,O)),e.ADD_URI_SAFE_ATTR&&f(Ye,e.ADD_URI_SAFE_ATTR,O),e.FORBID_CONTENTS&&(ae===Rt&&(ae=S(ae)),f(ae,e.FORBID_CONTENTS,O)),je&&(x["#text"]=!0),Q&&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 z('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw z('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');I=e.TRUSTED_TYPES_POLICY,ue=I.createHTML("")}else I===void 0&&(I=fn(ye,N)),I!==null&&typeof ue=="string"&&(ue=I.createHTML(""));l&&l(e),ce=e}},Lt=f({},["mi","mo","mn","ms","mtext"]),Ot=f({},["foreignobject","desc","title","annotation-xml"]),vn=f({},["title","style","font","a","script"]),Dt=f({},[...fe,..._e,...ve]),Ct=f({},[...Me,...en]),Mn=function(e){let n=Pe(e);(!n||!n.tagName)&&(n={namespaceURI:le,tagName:"template"});let o=B(e.tagName),A=B(n.tagName);return qe[e.namespaceURI]?e.namespaceURI===xe?n.namespaceURI===X?o==="svg":n.namespaceURI===we?o==="svg"&&(A==="annotation-xml"||Lt[A]):!!Dt[o]:e.namespaceURI===we?n.namespaceURI===X?o==="math":n.namespaceURI===xe?o==="math"&&Ot[A]:!!Ct[o]:e.namespaceURI===X?n.namespaceURI===xe&&!Ot[A]||n.namespaceURI===we&&!Lt[A]?!1:!Ct[o]&&(vn[o]||!Dt[o]):!!(ge==="application/xhtml+xml"&&qe[e.namespaceURI]):!1},V=function(e){y(i.removed,{element:e});try{e.parentNode.removeChild(e)}catch{e.remove()}},Ke=function(e,n){try{y(i.removed,{attribute:n.getAttributeNode(e),from:n})}catch{y(i.removed,{attribute:null,from:n})}if(n.removeAttribute(e),e==="is"&&!L[e])if(re||be)try{V(n)}catch{}else try{n.setAttribute(e,"")}catch{}},Nt=function(e){let n=null,o=null;if(We)e="<remove></remove>"+e;else{let M=W(e,/^[\r\n\t ]+/);o=M&&M[0]}ge==="application/xhtml+xml"&&le===X&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");let A=I?I.createHTML(e):e;if(le===X)try{n=new hn().parseFromString(A,ge)}catch{}if(!n||!n.documentElement){n=ke.createDocument(le,"template",null);try{n.documentElement.innerHTML=Xe?ue:A}catch{}}let v=n.body||n.documentElement;return e&&o&&v.insertBefore(g.createTextNode(o),v.childNodes[0]||null),le===X?yn.call(n,Q?"html":"body")[0]:Q?n.documentElement:v},vt=function(e){return _n.call(e.ownerDocument||e,e,me.SHOW_ELEMENT|me.SHOW_COMMENT|me.SHOW_TEXT|me.SHOW_PROCESSING_INSTRUCTION|me.SHOW_CDATA_SECTION,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 Ue=="function"&&e instanceof Ue},q=function(e,n,o){H[e]&&T(H[e],A=>{A.call(i,n,o,ce)})},It=function(e){let n=null;if(q("beforeSanitizeElements",e,null),In(e))return V(e),!0;let o=O(e.nodeName);if(q("uponSanitizeElement",e,{tagName:o,allowedTags:x}),e.hasChildNodes()&&!Mt(e.firstElementChild)&&_(/<[/\w]/g,e.innerHTML)&&_(/<[/\w]/g,e.textContent)||e.nodeType===7)return V(e),!0;if(!x[o]||de[o]){if(!de[o]&&Pt(o)&&(b.tagNameCheck instanceof RegExp&&_(b.tagNameCheck,o)||b.tagNameCheck instanceof Function&&b.tagNameCheck(o)))return!1;if(je&&!ae[o]){let A=Pe(e)||e.parentNode,v=Tn(e)||e.childNodes;if(v&&A){let M=v.length;for(let P=M-1;P>=0;--P)A.insertBefore(gn(v[P],!0),En(e))}}return V(e),!0}return e instanceof mt&&!Mn(e)||(o==="noscript"||o==="noembed"||o==="noframes")&&_(/<\/no(script|embed|frames)/i,e.innerHTML)?(V(e),!0):(oe&&e.nodeType===3&&(n=e.textContent,T([Fe,ze,Ge],A=>{n=j(n,A," ")}),e.textContent!==n&&(y(i.removed,{element:e.cloneNode()}),e.textContent=n)),q("afterSanitizeElements",e,null),!1)},Ut=function(e,n,o){if(At&&(n==="id"||n==="name")&&(o in g||o in Nn))return!1;if(!($e&&!He[n]&&_(bn,n))){if(!(Et&&_(Sn,n))){if(!L[n]||He[n]){if(!(Pt(e)&&(b.tagNameCheck instanceof RegExp&&_(b.tagNameCheck,e)||b.tagNameCheck instanceof Function&&b.tagNameCheck(e))&&(b.attributeNameCheck instanceof RegExp&&_(b.attributeNameCheck,n)||b.attributeNameCheck instanceof Function&&b.attributeNameCheck(n))||n==="is"&&b.allowCustomizedBuiltInElements&&(b.tagNameCheck instanceof RegExp&&_(b.tagNameCheck,o)||b.tagNameCheck instanceof Function&&b.tagNameCheck(o))))return!1}else if(!Ye[n]){if(!_(dt,j(o,ut,""))){if(!((n==="src"||n==="xlink:href"||n==="href")&&e!=="script"&&te(o,"data:")===0&&bt[e])){if(!(Tt&&!_(wn,j(o,ut,"")))){if(o)return!1}}}}}}return!0},Pt=function(e){return e!=="annotation-xml"&&W(e,xn)},kt=function(e){q("beforeSanitizeAttributes",e,null);let{attributes:n}=e;if(!n)return;let o={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:L},A=n.length;for(;A--;){let v=n[A],{name:M,namespaceURI:P,value:J}=v,Ee=O(M),k=M==="value"?J:F(J);if(o.attrName=Ee,o.attrValue=k,o.keepAttr=!0,o.forceKeepAttr=void 0,q("uponSanitizeAttribute",e,o),k=o.attrValue,o.forceKeepAttr||(Ke(M,e),!o.keepAttr))continue;if(!_t&&_(/\/>/i,k)){Ke(M,e);continue}oe&&T([Fe,ze,Ge],zt=>{k=j(k,zt," ")});let Ft=O(e.nodeName);if(Ut(Ft,Ee,k)){if(yt&&(Ee==="id"||Ee==="name")&&(Ke(M,e),k=Ln+k),I&&typeof ye=="object"&&typeof ye.getAttributeType=="function"&&!P)switch(ye.getAttributeType(Ft,Ee)){case"TrustedHTML":{k=I.createHTML(k);break}case"TrustedScriptURL":{k=I.createScriptURL(k);break}}try{P?e.setAttributeNS(P,M,k):e.setAttribute(M,k),h(i.removed)}catch{}}}q("afterSanitizeAttributes",e,null)},Un=function a(e){let n=null,o=vt(e);for(q("beforeSanitizeShadowDOM",e,null);n=o.nextNode();)q("uponSanitizeShadowNode",n,null),!It(n)&&(n.content instanceof Y&&a(n.content),kt(n));q("afterSanitizeShadowDOM",e,null)};return i.sanitize=function(a){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=null,o=null,A=null,v=null;if(Xe=!a,Xe&&(a="<!-->"),typeof a!="string"&&!Mt(a))if(typeof a.toString=="function"){if(a=a.toString(),typeof a!="string")throw z("dirty is not a string, aborting")}else throw z("toString is not a function");if(!i.isSupported)return a;if(Be||Ve(e),i.removed=[],typeof a=="string"&&(he=!1),he){if(a.nodeName){let J=O(a.nodeName);if(!x[J]||de[J])throw z("root node is forbidden and cannot be sanitized in-place")}}else if(a instanceof Ue)n=Nt("<!---->"),o=n.ownerDocument.importNode(a,!0),o.nodeType===1&&o.nodeName==="BODY"||o.nodeName==="HTML"?n=o:n.appendChild(o);else{if(!re&&!oe&&!Q&&a.indexOf("<")===-1)return I&&Se?I.createHTML(a):a;if(n=Nt(a),!n)return re?null:Se?ue:""}n&&We&&V(n.firstChild);let M=vt(he?a:n);for(;A=M.nextNode();)It(A)||(A.content instanceof Y&&Un(A.content),kt(A));if(he)return a;if(re){if(be)for(v=An.call(n.ownerDocument);n.firstChild;)v.appendChild(n.firstChild);else v=n;return(L.shadowroot||L.shadowrootmode)&&(v=Rn.call(u,v,!0)),v}let P=Q?n.outerHTML:n.innerHTML;return Q&&x["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&_(ct,n.ownerDocument.doctype.name)&&(P="<!DOCTYPE "+n.ownerDocument.doctype.name+`>
2
- `+P),oe&&T([Fe,ze,Ge],J=>{P=j(P,J," ")}),I&&Se?I.createHTML(P):P},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=O(a),A=O(e);return Ut(o,A,n)},i.addHook=function(a,e){typeof e=="function"&&(H[a]=H[a]||[],y(H[a],e))},i.removeHook=function(a){if(H[a])return h(H[a])},i.removeHooks=function(a){H[a]&&(H[a]=[])},i.removeAllHooks=function(){H={}},i}var mn=ft();return mn})});var Je=Bn(Ht(),1);var $t=/^[\w+/=-]+$/;var Le=/data:[\w#&+./;=-]*,/,et=/data:[\w#&+./;=^]*base64,[\w+/=-]+/i,Bt=/data:[\w#&+./;=-]*,[^"]+/g,Wt=/&#(x(?:00)?[\dA-F]{2}|0?\d{1,3});?/gi,jt=/^(?:application\/(?:[\w#&.;-]+\+)?x|image\/svg\+x|text\/(?:ht|x))ml;?/;var Yt=/^[a-z][\da-z+.-]*$/,Xt=/^(?:ext|web)\+[a-z]+$/,tt=/(?:java|vb)script/,Oe=/(?:java|vb)script|blob/,nt=/%(?:2[27]|3[CE])|[<>"']/,qt=/^%[\dA-F]{2}$/i;var $=s=>Object.prototype.toString.call(s).slice(8,-1),C=s=>typeof s=="string"||s instanceof String;var{FileReader:Vt}=globalThis;var De=[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 Kt=s=>{if(!C(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("")},Zt=s=>{C(s)&&qt.test(s)&&(s=s.toUpperCase());let[t,r,m,p,l,c]=["&","#","<",">",'"',"'"].map(Kt),E;return s===t?E=`${t}amp;`:s===m?E=`${t}lt;`:s===p?E=`${t}gt;`:s===l?E=`${t}quot;`:s===c?E=`${t}${r}39;`:E=s,E},Qt=s=>{if(C(s)){if(!$t.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))),m=new Set(De),p;return r.every(l=>m.has(l))?p=t.replace(/\s/g,Kt):p=s,p},st=(s,t=0)=>{if(!C(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 m=new Set(De),p=[...r.matchAll(Wt)].reverse();for(let l of p){let[c,E]=l,R;if(/^x[\dA-F]+/i.test(E)?R=parseInt(`0${E}`,16):/^\d+/.test(E)&&(R=parseInt(E)),Number.isInteger(R)){let{index:U}=l,[T,h]=[r.substring(0,U),r.substring(U+c.length)];m.has(R)?(r=`${T}${String.fromCharCode(R)}${h}`,(/#x?$/.test(T)||/^#(?:x(?:00)?[2-7]|\d)/.test(h))&&(r=st(r,++t))):R<16*16&&(r=`${T}${h}`)}}}return r},Jt=s=>new Promise((t,r)=>{let m=new Vt;m.addEventListener("error",()=>r(m.error)),m.addEventListener("abort",()=>t(m.result)),m.addEventListener("load",()=>t(m.result)),m.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(C(t)){if(tt.test(t)||!Yt.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(C(t))try{let{protocol:m}=new URL(t),p=m.replace(/:$/,""),l=p.split("+");r=!tt.test(p)&&Xt.test(p)||l.every(c=>this.#e.has(c))}catch{r=!1}return!!r}reset(){this.#e.clear();for(let t of Ce)this.#e.add(t)}};var ot=class extends Ne{#e;#t;constructor(){super(),this.#e=0,this.#t=new Set}replace(t){if(!C(t))throw new TypeError(`Expected String but got ${$(t)}.`);let r=t;if(Le.test(r)){let p=[...r.matchAll(Bt)].reverse();for(let l of p){let[c]=l;et.test(c)&&([c]=et.exec(c)),this.#e++,this.#t.add(c);let E=this.sanitize(c,{allow:["data"]}),{index:R}=l,[U,T]=[r.substring(0,R),r.substring(R+c.length)];E?r=`${U}${E}${T}`:r=`${U}${T}`}}return r}purify(t){if(!C(t))throw new TypeError(`Expected String but got ${$(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:m,deny:p,only:l}=r??{},c=new Map([["blob",!1],["data",!1],["file",!1],["javascrpt",!1],["vbscript",!1]]),E=new Set,R=!1;if(Array.isArray(l)&&l.length){let T=super.get();for(let y of T)c.set(y,!1);let h=Object.values(l);for(let y of h)if(C(y)&&(y=y.trim(),!Oe.test(y))){if(super.has(y))c.set(y,!0);else{try{super.add(y)}catch{}super.has(y)&&(c.set(y,!0),E.add(y))}!R&&c.has(y)&&(R=c.get(y))}}else{if(Array.isArray(m)&&m.length){let T=Object.values(m);for(let h of T)if(C(h)&&(h=h.trim(),!Oe.test(h)))if(super.has(h))c.set(h,!0);else{try{super.add(h)}catch{}super.has(h)&&(c.set(h,!0),E.add(h))}}if(Array.isArray(p)&&p.length){let T=Object.values(p);for(let h of T)C(h)&&(h=h.trim(),h&&c.set(h,!1))}}let U;if(super.verify(t)){let{hash:T,href:h,pathname:y,protocol:B,search:G}=new URL(t),W=B.replace(/:$/,""),j=W.split("+"),te;if(R)te=j.every(F=>c.get(F));else for(let[F,w]of c.entries())if(te=w||W!==F&&j.every(_=>_!==F),!te)break;if(te){let F=j.includes("data"),w,_=h;if(F){let[z,...D]=y.split(","),ne=`${D.join(",")}${G}${T}`,f=z.split(";"),Te=f[f.length-1]==="base64",S=ne;Te&&(S=Qt(ne));try{let pe=st(S).trim(),{protocol:fe}=new URL(pe);fe.replace(/:$/,"").split("+").some(ve=>Oe.test(ve))&&(_="")}catch{}let Z=Le.test(S);S!==ne||Z?Z?S=this.replace(S):this.#t.has(t)?this.#t.delete(t):w=!0:this.#t.has(t)?this.#t.delete(t):w=!0,(!z||jt.test(z))&&(S=this.purify(S)),_&&S?(Te&&S!==ne&&f.pop(),_=`${W}:${f.join(";")},${S}`):_=""}else w=!0;if(!F&&nt.test(_)){let z=nt.exec(_),{index:D}=z;_=_.substring(0,D).replace(/[?&]$/,"")}_?(U=_.replace(/%26/g,Zt),w&&(this.#e=0)):this.#e=0}E.size&&E.forEach(F=>{super.remove(F)})}return U||null}parse(t,r){if(!C(t))throw new TypeError(`Expected String but got ${$(t)}.`);let m=new Map([["input",t]]),p;if(this.verify(t)){let{protocol:l}=new URL(t);l==="blob:"?p=t:p=this.sanitize(t,r??{allow:["data","file"]})}if(p){let l=new URL(p),{pathname:c,protocol:E}=l,U=E.replace(/:$/,"").split("+").includes("data");if(m.set("valid",!0),U){let T=new Map,[h,...y]=c.split(","),B=`${y.join(",")}`,G=h.split(";"),W=G[G.length-1]==="base64";W&&G.pop(),T.set("mime",G.join(";")),T.set("base64",W),T.set("data",B),m.set("data",Object.fromEntries(T))}else m.set("data",null);for(let T in l){let h=l[T];C(h)&&m.set(T,h)}}else m.set("valid",!1);return Object.fromEntries(m)}reset(){super.reset(),this.#e=0,this.#t.clear()}},K=new ot,qn=async(s,t={allow:[],deny:[],only:[]})=>{let r;if(s&&C(s)){let m;try{let{protocol:p}=new URL(s);m=p.replace(/:$/,"")}catch{}if(m==="blob"){let{allow:p,deny:l,only:c}=t;if(Array.isArray(p)&&p.includes("blob")&&!(Array.isArray(l)&&l.includes("blob"))||Array.isArray(c)&&c.includes("blob")){let E;try{E=await fetch(s).then(R=>R.blob()).then(Jt)}catch{}if(E){if(Array.isArray(c))c.includes("data")||c.push("data");else if(Array.isArray(p)&&(p.includes("data")||p.push("data"),Array.isArray(l)&&l.includes("data"))){let R=l.indexOf("data");l.splice(R,1)}r=K.sanitize(E,t)}}URL.revokeObjectURL(s)}else m&&(r=K.sanitize(s,t))}return r||null},Vn=(s,t)=>{let r;if(s&&C(s)){let m;try{let{protocol:p}=new URL(s);m=p.replace(/:$/,"")}catch{}m==="blob"?URL.revokeObjectURL(s):m&&(r=K.sanitize(s,t))}return r||null},Kn=async s=>K.parse(s),Zn=s=>K.parse(s),Qn=async s=>K.verify(s),Jn=s=>K.verify(s),es=K;export{es as default,Qn as isURI,Jn as isURISync,Kn as parseURL,Zn as parseURLSync,qn as sanitizeURL,Vn as sanitizeURLSync};
1
+ var zn=Object.create;var Bt=Object.defineProperty;var Gn=Object.getOwnPropertyDescriptor;var Hn=Object.getOwnPropertyNames;var $n=Object.getPrototypeOf,Bn=Object.prototype.hasOwnProperty;var Wn=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var jn=(s,t,r,m)=>{if(t&&typeof t=="object"||typeof t=="function")for(let p of Hn(t))!Bn.call(s,p)&&p!==r&&Bt(s,p,{get:()=>t[p],enumerable:!(m=Gn(t,p))||m.enumerable});return s};var Yn=(s,t,r)=>(r=s!=null?zn($n(s)):{},jn(t||!s||!s.__esModule?Bt(r,"default",{value:s,enumerable:!0}):r,s));var Wt=Wn((Je,et)=>{(function(s,t){typeof Je=="object"&&typeof et<"u"?et.exports=t():typeof define=="function"&&define.amd?define(t):(s=typeof globalThis<"u"?globalThis:s||self,s.DOMPurify=t())})(Je,function(){"use strict";let{entries:s,setPrototypeOf:t,isFrozen:r,getPrototypeOf:m,getOwnPropertyDescriptor:p}=Object,{freeze:l,seal:c,create:E}=Object,{apply:R,construct:P}=typeof Reflect<"u"&&Reflect;l||(l=function(i){return i}),c||(c=function(i){return i}),R||(R=function(i,g,u){return i.apply(g,u)}),P||(P=function(i,g){return new i(...g)});let _=D(Array.prototype.forEach),h=D(Array.prototype.pop),y=D(Array.prototype.push),j=D(String.prototype.toLowerCase),G=D(String.prototype.toString),Y=D(String.prototype.match),X=D(String.prototype.replace),te=D(String.prototype.indexOf),F=D(String.prototype.trim),w=D(Object.prototype.hasOwnProperty),T=D(RegExp.prototype.test),z=ne(TypeError);function D(d){return function(i){for(var g=arguments.length,u=new Array(g>1?g-1:0),M=1;M<g;M++)u[M-1]=arguments[M];return R(d,i,u)}}function ne(d){return function(){for(var i=arguments.length,g=new Array(i),u=0;u<i;u++)g[u]=arguments[u];return P(d,g)}}function f(d,i){let g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:j;t&&t(d,null);let u=i.length;for(;u--;){let M=i[u];if(typeof M=="string"){let q=g(M);q!==M&&(r(i)||(i[u]=q),M=q)}d[M]=!0}return d}function Ae(d){for(let i=0;i<d.length;i++)w(d,i)||(d[i]=null);return d}function S(d){let i=E(null);for(let[g,u]of s(d))w(d,g)&&(Array.isArray(u)?i[g]=Ae(u):u&&typeof u=="object"&&u.constructor===Object?i[g]=S(u):i[g]=u);return i}function Z(d,i){for(;d!==null;){let u=p(d,i);if(u){if(u.get)return D(u.get);if(typeof u.value=="function")return D(u.value)}d=m(d)}function g(){return null}return g}let pe=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"]),fe=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"]),ye=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"]),Ue=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"]),Pe=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"]),sn=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","popover","popovertarget","popovertargetaction","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","wrap","xmlns","slot"]),ke=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"]),Re=l(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),on=c(/\{\{[\w\W]*|[\w\W]*\}\}/gm),rn=c(/<%[\w\W]*|[\w\W]*%>/gm),an=c(/\${[\w\W]*}/gm),ln=c(/^data-[\-\w.\u00B7-\uFFFF]/),cn=c(/^aria-[\-\w]+$/),pt=c(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),pn=c(/^(?:\w+script|data):/i),fn=c(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),ft=c(/^html$/i),mn=c(/^[a-z][.\w]*(-[.\w]+)+$/i);var mt=Object.freeze({__proto__:null,MUSTACHE_EXPR:on,ERB_EXPR:rn,TMPLIT_EXPR:an,DATA_ATTR:ln,ARIA_ATTR:cn,IS_ALLOWED_URI:pt,IS_SCRIPT_OR_DATA:pn,ATTR_WHITESPACE:fn,DOCTYPE_NAME:ft,CUSTOM_ELEMENT:mn});let me={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},un=function(){return typeof window>"u"?null:window},dn=function(i,g){if(typeof i!="object"||typeof i.createPolicy!="function")return null;let u=null,M="data-tt-policy-suffix";g&&g.hasAttribute(M)&&(u=g.getAttribute(M));let q="dompurify"+(u?"#"+u:"");try{return i.createPolicy(q,{createHTML(se){return se},createScriptURL(se){return se}})}catch{return console.warn("TrustedTypes policy "+q+" could not be created."),null}};function ut(){let d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:un(),i=a=>ut(a);if(i.version="3.1.6",i.removed=[],!d||!d.document||d.document.nodeType!==me.document)return i.isSupported=!1,i;let{document:g}=d,u=g,M=u.currentScript,{DocumentFragment:q,HTMLTemplateElement:se,Node:Fe,Element:dt,NodeFilter:ue,NamedNodeMap:gn=d.NamedNodeMap||d.MozNamedAttrMap,HTMLFormElement:En,DOMParser:Tn,trustedTypes:be}=d,de=dt.prototype,_n=Z(de,"cloneNode"),An=Z(de,"remove"),yn=Z(de,"nextSibling"),Rn=Z(de,"childNodes"),Se=Z(de,"parentNode");if(typeof se=="function"){let a=g.createElement("template");a.content&&a.content.ownerDocument&&(g=a.content.ownerDocument)}let N,he="",{implementation:ze,createNodeIterator:bn,createDocumentFragment:Sn,getElementsByTagName:wn}=g,{importNode:xn}=u,H={};i.isSupported=typeof s=="function"&&typeof Se=="function"&&ze&&ze.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:Ge,ERB_EXPR:He,TMPLIT_EXPR:$e,DATA_ATTR:Ln,ARIA_ATTR:On,IS_SCRIPT_OR_DATA:Dn,ATTR_WHITESPACE:ht,CUSTOM_ELEMENT:Cn}=mt,{IS_ALLOWED_URI:gt}=mt,x=null,Et=f({},[...pe,...fe,...ye,...Pe,...at]),L=null,Tt=f({},[...lt,...ke,...ct,...Re]),b=Object.seal(E(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,Be=null,_t=!0,We=!0,At=!1,yt=!0,oe=!1,je=!0,J=!1,Ye=!1,Xe=!1,re=!1,we=!1,xe=!1,Rt=!0,bt=!1,vn="user-content-",qe=!0,Ee=!1,ie={},ae=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"]),Ve=null,Lt=f({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Le="http://www.w3.org/1998/Math/MathML",Oe="http://www.w3.org/2000/svg",V="http://www.w3.org/1999/xhtml",le=V,Ke=!1,Ze=null,Mn=f({},[Le,Oe,V],G),Te=null,In=["application/xhtml+xml","text/html"],Nn="text/html",O=null,ce=null,Un=g.createElement("form"),Ot=function(e){return e instanceof RegExp||e instanceof Function},Qe=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(ce&&ce===e)){if((!e||typeof e!="object")&&(e={}),e=S(e),Te=In.indexOf(e.PARSER_MEDIA_TYPE)===-1?Nn:e.PARSER_MEDIA_TYPE,O=Te==="application/xhtml+xml"?G:j,x=w(e,"ALLOWED_TAGS")?f({},e.ALLOWED_TAGS,O):Et,L=w(e,"ALLOWED_ATTR")?f({},e.ALLOWED_ATTR,O):Tt,Ze=w(e,"ALLOWED_NAMESPACES")?f({},e.ALLOWED_NAMESPACES,G):Mn,Ve=w(e,"ADD_URI_SAFE_ATTR")?f(S(Lt),e.ADD_URI_SAFE_ATTR,O):Lt,wt=w(e,"ADD_DATA_URI_TAGS")?f(S(xt),e.ADD_DATA_URI_TAGS,O):xt,ae=w(e,"FORBID_CONTENTS")?f({},e.FORBID_CONTENTS,O):St,ge=w(e,"FORBID_TAGS")?f({},e.FORBID_TAGS,O):{},Be=w(e,"FORBID_ATTR")?f({},e.FORBID_ATTR,O):{},ie=w(e,"USE_PROFILES")?e.USE_PROFILES:!1,_t=e.ALLOW_ARIA_ATTR!==!1,We=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,je=e.SAFE_FOR_XML!==!1,J=e.WHOLE_DOCUMENT||!1,re=e.RETURN_DOM||!1,we=e.RETURN_DOM_FRAGMENT||!1,xe=e.RETURN_TRUSTED_TYPE||!1,Xe=e.FORCE_BODY||!1,Rt=e.SANITIZE_DOM!==!1,bt=e.SANITIZE_NAMED_PROPS||!1,qe=e.KEEP_CONTENT!==!1,Ee=e.IN_PLACE||!1,gt=e.ALLOWED_URI_REGEXP||pt,le=e.NAMESPACE||V,b=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&Ot(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(b.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&Ot(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&&(We=!1),we&&(re=!0),ie&&(x=f({},at),L=[],ie.html===!0&&(f(x,pe),f(L,lt)),ie.svg===!0&&(f(x,fe),f(L,ke),f(L,Re)),ie.svgFilters===!0&&(f(x,ye),f(L,ke),f(L,Re)),ie.mathMl===!0&&(f(x,Pe),f(L,ct),f(L,Re))),e.ADD_TAGS&&(x===Et&&(x=S(x)),f(x,e.ADD_TAGS,O)),e.ADD_ATTR&&(L===Tt&&(L=S(L)),f(L,e.ADD_ATTR,O)),e.ADD_URI_SAFE_ATTR&&f(Ve,e.ADD_URI_SAFE_ATTR,O),e.FORBID_CONTENTS&&(ae===St&&(ae=S(ae)),f(ae,e.FORBID_CONTENTS,O)),qe&&(x["#text"]=!0),J&&f(x,["html","head","body"]),x.table&&(f(x,["tbody"]),delete ge.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!="function")throw z('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw z('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');N=e.TRUSTED_TYPES_POLICY,he=N.createHTML("")}else N===void 0&&(N=dn(be,M)),N!==null&&typeof he=="string"&&(he=N.createHTML(""));l&&l(e),ce=e}},Dt=f({},["mi","mo","mn","ms","mtext"]),Ct=f({},["foreignobject","annotation-xml"]),Pn=f({},["title","style","font","a","script"]),vt=f({},[...fe,...ye,...Ue]),Mt=f({},[...Pe,...sn]),kn=function(e){let n=Se(e);(!n||!n.tagName)&&(n={namespaceURI:le,tagName:"template"});let o=j(e.tagName),A=j(n.tagName);return Ze[e.namespaceURI]?e.namespaceURI===Oe?n.namespaceURI===V?o==="svg":n.namespaceURI===Le?o==="svg"&&(A==="annotation-xml"||Dt[A]):!!vt[o]:e.namespaceURI===Le?n.namespaceURI===V?o==="math":n.namespaceURI===Oe?o==="math"&&Ct[A]:!!Mt[o]:e.namespaceURI===V?n.namespaceURI===Oe&&!Ct[A]||n.namespaceURI===Le&&!Dt[A]?!1:!Mt[o]&&(Pn[o]||!vt[o]):!!(Te==="application/xhtml+xml"&&Ze[e.namespaceURI]):!1},$=function(e){y(i.removed,{element:e});try{Se(e).removeChild(e)}catch{An(e)}},De=function(e,n){try{y(i.removed,{attribute:n.getAttributeNode(e),from:n})}catch{y(i.removed,{attribute:null,from:n})}if(n.removeAttribute(e),e==="is"&&!L[e])if(re||we)try{$(n)}catch{}else try{n.setAttribute(e,"")}catch{}},It=function(e){let n=null,o=null;if(Xe)e="<remove></remove>"+e;else{let C=Y(e,/^[\r\n\t ]+/);o=C&&C[0]}Te==="application/xhtml+xml"&&le===V&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");let A=N?N.createHTML(e):e;if(le===V)try{n=new Tn().parseFromString(A,Te)}catch{}if(!n||!n.documentElement){n=ze.createDocument(le,"template",null);try{n.documentElement.innerHTML=Ke?he:A}catch{}}let I=n.body||n.documentElement;return e&&o&&I.insertBefore(g.createTextNode(o),I.childNodes[0]||null),le===V?wn.call(n,J?"html":"body")[0]:J?n.documentElement:I},Nt=function(e){return bn.call(e.ownerDocument||e,e,ue.SHOW_ELEMENT|ue.SHOW_COMMENT|ue.SHOW_TEXT|ue.SHOW_PROCESSING_INSTRUCTION|ue.SHOW_CDATA_SECTION,null)},Ut=function(e){return e instanceof En&&(typeof e.nodeName!="string"||typeof e.textContent!="string"||typeof e.removeChild!="function"||!(e.attributes instanceof gn)||typeof e.removeAttribute!="function"||typeof e.setAttribute!="function"||typeof e.namespaceURI!="string"||typeof e.insertBefore!="function"||typeof e.hasChildNodes!="function")},Pt=function(e){return typeof Fe=="function"&&e instanceof Fe},K=function(e,n,o){H[e]&&_(H[e],A=>{A.call(i,n,o,ce)})},kt=function(e){let n=null;if(K("beforeSanitizeElements",e,null),Ut(e))return $(e),!0;let o=O(e.nodeName);if(K("uponSanitizeElement",e,{tagName:o,allowedTags:x}),e.hasChildNodes()&&!Pt(e.firstElementChild)&&T(/<[/\w]/g,e.innerHTML)&&T(/<[/\w]/g,e.textContent)||e.nodeType===me.progressingInstruction||je&&e.nodeType===me.comment&&T(/<[/\w]/g,e.data))return $(e),!0;if(!x[o]||ge[o]){if(!ge[o]&&zt(o)&&(b.tagNameCheck instanceof RegExp&&T(b.tagNameCheck,o)||b.tagNameCheck instanceof Function&&b.tagNameCheck(o)))return!1;if(qe&&!ae[o]){let A=Se(e)||e.parentNode,I=Rn(e)||e.childNodes;if(I&&A){let C=I.length;for(let k=C-1;k>=0;--k){let B=_n(I[k],!0);B.__removalCount=(e.__removalCount||0)+1,A.insertBefore(B,yn(e))}}}return $(e),!0}return e instanceof dt&&!kn(e)||(o==="noscript"||o==="noembed"||o==="noframes")&&T(/<\/no(script|embed|frames)/i,e.innerHTML)?($(e),!0):(oe&&e.nodeType===me.text&&(n=e.textContent,_([Ge,He,$e],A=>{n=X(n,A," ")}),e.textContent!==n&&(y(i.removed,{element:e.cloneNode()}),e.textContent=n)),K("afterSanitizeElements",e,null),!1)},Ft=function(e,n,o){if(Rt&&(n==="id"||n==="name")&&(o in g||o in Un))return!1;if(!(We&&!Be[n]&&T(Ln,n))){if(!(_t&&T(On,n))){if(!L[n]||Be[n]){if(!(zt(e)&&(b.tagNameCheck instanceof RegExp&&T(b.tagNameCheck,e)||b.tagNameCheck instanceof Function&&b.tagNameCheck(e))&&(b.attributeNameCheck instanceof RegExp&&T(b.attributeNameCheck,n)||b.attributeNameCheck instanceof Function&&b.attributeNameCheck(n))||n==="is"&&b.allowCustomizedBuiltInElements&&(b.tagNameCheck instanceof RegExp&&T(b.tagNameCheck,o)||b.tagNameCheck instanceof Function&&b.tagNameCheck(o))))return!1}else if(!Ve[n]){if(!T(gt,X(o,ht,""))){if(!((n==="src"||n==="xlink:href"||n==="href")&&e!=="script"&&te(o,"data:")===0&&wt[e])){if(!(At&&!T(Dn,X(o,ht,"")))){if(o)return!1}}}}}}return!0},zt=function(e){return e!=="annotation-xml"&&Y(e,Cn)},Gt=function(e){K("beforeSanitizeAttributes",e,null);let{attributes:n}=e;if(!n)return;let o={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:L},A=n.length;for(;A--;){let I=n[A],{name:C,namespaceURI:k,value:B}=I,_e=O(C),U=C==="value"?B:F(B);if(o.attrName=_e,o.attrValue=U,o.keepAttr=!0,o.forceKeepAttr=void 0,K("uponSanitizeAttribute",e,o),U=o.attrValue,je&&T(/((--!?|])>)|<\/(style|title)/i,U)){De(C,e);continue}if(o.forceKeepAttr||(De(C,e),!o.keepAttr))continue;if(!yt&&T(/\/>/i,U)){De(C,e);continue}oe&&_([Ge,He,$e],$t=>{U=X(U,$t," ")});let Ht=O(e.nodeName);if(Ft(Ht,_e,U)){if(bt&&(_e==="id"||_e==="name")&&(De(C,e),U=vn+U),N&&typeof be=="object"&&typeof be.getAttributeType=="function"&&!k)switch(be.getAttributeType(Ht,_e)){case"TrustedHTML":{U=N.createHTML(U);break}case"TrustedScriptURL":{U=N.createScriptURL(U);break}}try{k?e.setAttributeNS(k,C,U):e.setAttribute(C,U),Ut(e)?$(e):h(i.removed)}catch{}}}K("afterSanitizeAttributes",e,null)},Fn=function a(e){let n=null,o=Nt(e);for(K("beforeSanitizeShadowDOM",e,null);n=o.nextNode();)K("uponSanitizeShadowNode",n,null),!kt(n)&&(n.content instanceof q&&a(n.content),Gt(n));K("afterSanitizeShadowDOM",e,null)};return i.sanitize=function(a){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=null,o=null,A=null,I=null;if(Ke=!a,Ke&&(a="<!-->"),typeof a!="string"&&!Pt(a))if(typeof a.toString=="function"){if(a=a.toString(),typeof a!="string")throw z("dirty is not a string, aborting")}else throw z("toString is not a function");if(!i.isSupported)return a;if(Ye||Qe(e),i.removed=[],typeof a=="string"&&(Ee=!1),Ee){if(a.nodeName){let B=O(a.nodeName);if(!x[B]||ge[B])throw z("root node is forbidden and cannot be sanitized in-place")}}else if(a instanceof Fe)n=It("<!---->"),o=n.ownerDocument.importNode(a,!0),o.nodeType===me.element&&o.nodeName==="BODY"||o.nodeName==="HTML"?n=o:n.appendChild(o);else{if(!re&&!oe&&!J&&a.indexOf("<")===-1)return N&&xe?N.createHTML(a):a;if(n=It(a),!n)return re?null:xe?he:""}n&&Xe&&$(n.firstChild);let C=Nt(Ee?a:n);for(;A=C.nextNode();)kt(A)||(A.content instanceof q&&Fn(A.content),Gt(A));if(Ee)return a;if(re){if(we)for(I=Sn.call(n.ownerDocument);n.firstChild;)I.appendChild(n.firstChild);else I=n;return(L.shadowroot||L.shadowrootmode)&&(I=xn.call(u,I,!0)),I}let k=J?n.outerHTML:n.innerHTML;return J&&x["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&T(ft,n.ownerDocument.doctype.name)&&(k="<!DOCTYPE "+n.ownerDocument.doctype.name+`>
2
+ `+k),oe&&_([Ge,He,$e],B=>{k=X(k,B," ")}),N&&xe?N.createHTML(k):k},i.setConfig=function(){let a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Qe(a),Ye=!0},i.clearConfig=function(){ce=null,Ye=!1},i.isValidAttribute=function(a,e,n){ce||Qe({});let o=O(a),A=O(e);return Ft(o,A,n)},i.addHook=function(a,e){typeof e=="function"&&(H[a]=H[a]||[],y(H[a],e))},i.removeHook=function(a){if(H[a])return h(H[a])},i.removeHooks=function(a){H[a]&&(H[a]=[])},i.removeAllHooks=function(){H={}},i}var hn=ut();return hn})});var tt=Yn(Wt(),1);var jt=/^[\w+/=-]+$/;var Ce=/data:[\w#&+./;=-]*,/,nt=/data:[\w#&+./;=^]*base64,[\w+/=-]+/i,Yt=/data:[\w#&+./;=-]*,[^"]+/g,Xt=/&#(x(?:00)?[\dA-F]{2}|0?\d{1,3});?/gi,qt=/^(?:application\/(?:[\w#&.;-]+\+)?x|image\/svg\+x|text\/(?:ht|x))ml;?/;var Vt=/^[a-z][\da-z+.-]*$/,Kt=/^(?:ext|web)\+[a-z]+$/,st=/(?:java|vb)script/,ve=/(?:java|vb)script|blob/,ot=/%(?:2[27]|3[CE])|[<>"']/,Zt=/^%[\dA-F]{2}$/i;var W=s=>Object.prototype.toString.call(s).slice(8,-1),v=s=>typeof s=="string"||s instanceof String;var{FileReader:Qt}=globalThis;var Me=[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 Ie=["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","hs20","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-recall","ms-remotedesktop","ms-remotedesktop-launch","ms-restoretabcompanion","ms-screenclip","ms-screensketch","ms-search","ms-search-repair","ms-secondary-screen-controller","ms-secondary-screen-setup","ms-settings","ms-settings-airplanemode","ms-settings-bluetooth","ms-settings-camera","ms-settings-cellular","ms-settings-cloudstorage","ms-settings-connectabledevices","ms-settings-displays-topology","ms-settings-emailandaccounts","ms-settings-language","ms-settings-location","ms-settings-lock","ms-settings-nfctransactions","ms-settings-notifications","ms-settings-power","ms-settings-privacy","ms-settings-proximity","ms-settings-screenrotation","ms-settings-wifi","ms-settings-workplace","ms-spd","ms-stickers","ms-sttoverlay","ms-transit-to","ms-useractivityset","ms-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","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","thzp","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 Jt=s=>{if(!v(s))throw new TypeError(`Expected String but got ${W(s)}.`);let t=[];for(let r of s)t.push(`%${r.charCodeAt(0).toString(16).toUpperCase()}`);return t.join("")},en=s=>{v(s)&&Zt.test(s)&&(s=s.toUpperCase());let[t,r,m,p,l,c]=["&","#","<",">",'"',"'"].map(Jt),E;return s===t?E=`${t}amp;`:s===m?E=`${t}lt;`:s===p?E=`${t}gt;`:s===l?E=`${t}quot;`:s===c?E=`${t}${r}39;`:E=s,E},tn=s=>{if(v(s)){if(!jt.test(s))throw new Error(`Invalid base64 data: ${s}`)}else throw new TypeError(`Expected String but got ${W(s)}.`);let t=atob(s),r=Uint8Array.from([...t].map(l=>l.charCodeAt(0))),m=new Set(Me),p;return r.every(l=>m.has(l))?p=t.replace(/\s/g,Jt):p=s,p},rt=(s,t=0)=>{if(!v(s))throw new TypeError(`Expected String but got ${W(s)}.`);if(Number.isInteger(t)){if(t>16)throw new Error("Character references nested too deeply.")}else throw new TypeError(`Expected Number but got ${W(t)}.`);let r=decodeURIComponent(s);if(/&#/.test(r)){let m=new Set(Me),p=[...r.matchAll(Xt)].reverse();for(let l of p){let[c,E]=l,R;if(/^x[\dA-F]+/i.test(E)?R=parseInt(`0${E}`,16):/^\d+/.test(E)&&(R=parseInt(E)),Number.isInteger(R)){let{index:P}=l,[_,h]=[r.substring(0,P),r.substring(P+c.length)];m.has(R)?(r=`${_}${String.fromCharCode(R)}${h}`,(/#x?$/.test(_)||/^#(?:x(?:00)?[2-7]|\d)/.test(h))&&(r=rt(r,++t))):R<16*16&&(r=`${_}${h}`)}}}return r},nn=s=>new Promise((t,r)=>{let m=new Qt;m.addEventListener("error",()=>r(m.error)),m.addEventListener("abort",()=>t(m.result)),m.addEventListener("load",()=>t(m.result)),m.readAsDataURL(s)}),Ne=class{#e;constructor(){this.#e=new Set(Ie)}get(){return[...this.#e]}has(t){return this.#e.has(t)}add(t){if(v(t)){if(st.test(t)||!Vt.test(t))throw new Error(`Invalid scheme: ${t}`)}else throw new TypeError(`Expected String but got ${W(t)}.`);return this.#e.add(t),[...this.#e]}remove(t){return this.#e.delete(t)}verify(t){let r;if(v(t))try{let{protocol:m}=new URL(t),p=m.replace(/:$/,""),l=p.split("+");r=!st.test(p)&&Kt.test(p)||l.every(c=>this.#e.has(c))}catch{r=!1}return!!r}reset(){this.#e.clear();for(let t of Ie)this.#e.add(t)}};var it=class extends Ne{#e;#t;constructor(){super(),this.#e=0,this.#t=new Set}replace(t){if(!v(t))throw new TypeError(`Expected String but got ${W(t)}.`);let r=t;if(Ce.test(r)){let p=[...r.matchAll(Yt)].reverse();for(let l of p){let[c]=l;nt.test(c)&&([c]=nt.exec(c)),this.#e++,this.#t.add(c);let E=this.sanitize(c,{allow:["data"]}),{index:R}=l,[P,_]=[r.substring(0,R),r.substring(R+c.length)];E?r=`${P}${E}${_}`:r=`${P}${_}`}}return r}purify(t){if(!v(t))throw new TypeError(`Expected String but got ${W(t)}.`);let r=tt.default.sanitize(decodeURIComponent(t));return r&&Ce.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:m,deny:p,only:l}=r??{},c=new Map([["blob",!1],["data",!1],["file",!1],["javascrpt",!1],["vbscript",!1]]),E=new Set,R=!1;if(Array.isArray(l)&&l.length){let _=super.get();for(let y of _)c.set(y,!1);let h=Object.values(l);for(let y of h)if(v(y)&&(y=y.trim(),!ve.test(y))){if(super.has(y))c.set(y,!0);else{try{super.add(y)}catch{}super.has(y)&&(c.set(y,!0),E.add(y))}!R&&c.has(y)&&(R=c.get(y))}}else{if(Array.isArray(m)&&m.length){let _=Object.values(m);for(let h of _)if(v(h)&&(h=h.trim(),!ve.test(h)))if(super.has(h))c.set(h,!0);else{try{super.add(h)}catch{}super.has(h)&&(c.set(h,!0),E.add(h))}}if(Array.isArray(p)&&p.length){let _=Object.values(p);for(let h of _)v(h)&&(h=h.trim(),h&&c.set(h,!1))}}let P;if(super.verify(t)){let{hash:_,href:h,pathname:y,protocol:j,search:G}=new URL(t),Y=j.replace(/:$/,""),X=Y.split("+"),te;if(R)te=X.every(F=>c.get(F));else for(let[F,w]of c.entries())if(te=w||Y!==F&&X.every(T=>T!==F),!te)break;if(te){let F=X.includes("data"),w,T=h;if(F){let[z,...D]=y.split(","),ne=`${D.join(",")}${G}${_}`,f=z.split(";"),Ae=f[f.length-1]==="base64",S=ne;Ae&&(S=tn(ne));try{let pe=rt(S).trim(),{protocol:fe}=new URL(pe);fe.replace(/:$/,"").split("+").some(Ue=>ve.test(Ue))&&(T="")}catch{}let Z=Ce.test(S);S!==ne||Z?Z?S=this.replace(S):this.#t.has(t)?this.#t.delete(t):w=!0:this.#t.has(t)?this.#t.delete(t):w=!0,(!z||qt.test(z))&&(S=this.purify(S)),T&&S?(Ae&&S!==ne&&f.pop(),T=`${Y}:${f.join(";")},${S}`):T=""}else w=!0;if(!F&&ot.test(T)){let z=ot.exec(T),{index:D}=z;T=T.substring(0,D).replace(/[?&]$/,"")}T?(P=T.replace(/%26/g,en),w&&(this.#e=0)):this.#e=0}E.size&&E.forEach(F=>{super.remove(F)})}return P||null}parse(t,r){if(!v(t))throw new TypeError(`Expected String but got ${W(t)}.`);let m=new Map([["input",t]]),p;if(this.verify(t)){let{protocol:l}=new URL(t);l==="blob:"?p=t:p=this.sanitize(t,r??{allow:["data","file"]})}if(p){let l=new URL(p),{pathname:c,protocol:E}=l,P=E.replace(/:$/,"").split("+").includes("data");if(m.set("valid",!0),P){let _=new Map,[h,...y]=c.split(","),j=`${y.join(",")}`,G=h.split(";"),Y=G[G.length-1]==="base64";Y&&G.pop(),_.set("mime",G.join(";")),_.set("base64",Y),_.set("data",j),m.set("data",Object.fromEntries(_))}else m.set("data",null);for(let _ in l){let h=l[_];v(h)&&m.set(_,h)}}else m.set("valid",!1);return Object.fromEntries(m)}reset(){super.reset(),this.#e=0,this.#t.clear()}},Q=new it,Zn=async(s,t={allow:[],deny:[],only:[]})=>{let r;if(s&&v(s)){let m;try{let{protocol:p}=new URL(s);m=p.replace(/:$/,"")}catch{}if(m==="blob"){let{allow:p,deny:l,only:c}=t;if(Array.isArray(p)&&p.includes("blob")&&!(Array.isArray(l)&&l.includes("blob"))||Array.isArray(c)&&c.includes("blob")){let E;try{E=await fetch(s).then(R=>R.blob()).then(nn)}catch{}if(E){if(Array.isArray(c))c.includes("data")||c.push("data");else if(Array.isArray(p)&&(p.includes("data")||p.push("data"),Array.isArray(l)&&l.includes("data"))){let R=l.indexOf("data");l.splice(R,1)}r=Q.sanitize(E,t)}}URL.revokeObjectURL(s)}else m&&(r=Q.sanitize(s,t))}return r||null},Qn=(s,t)=>{let r;if(s&&v(s)){let m;try{let{protocol:p}=new URL(s);m=p.replace(/:$/,"")}catch{}m==="blob"?URL.revokeObjectURL(s):m&&(r=Q.sanitize(s,t))}return r||null},Jn=async s=>Q.parse(s),es=s=>Q.parse(s),ts=async s=>Q.verify(s),ns=s=>Q.verify(s),ss=Q;export{ss as default,ts as isURI,ns as isURISync,Jn as parseURL,es as parseURLSync,Zn as sanitizeURL,Qn as sanitizeURLSync};
3
3
  /*!
4
4
  * URL Sanitizer
5
5
  *
@@ -10,6 +10,6 @@ var Pn=Object.create;var Gt=Object.defineProperty;var kn=Object.getOwnPropertyDe
10
10
  /*! Bundled license information:
11
11
 
12
12
  dompurify/dist/purify.js:
13
- (*! @license DOMPurify 3.0.11 | (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.11/LICENSE *)
13
+ (*! @license DOMPurify 3.1.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.1.6/LICENSE *)
14
14
  */
15
15
  //# sourceMappingURL=url-sanitizer.min.js.map