@pyscript/core 0.1.8 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/core.js CHANGED
@@ -1,2 +1,2 @@
1
- Promise.withResolvers||(Promise.withResolvers=function(){var e,t,r=new this((function(r,n){e=r,t=n}));return{resolve:e,reject:t,promise:r}});const e=(e,t=document)=>t.querySelector(e),t=(e,t=document)=>[...t.querySelectorAll(e)],r=(e,t=document)=>{const r=(new XPathEvaluator).createExpression(e).evaluate(t,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE),n=[];for(let e=0,{snapshotLength:t}=r;e<t;e++)n.push(r.snapshotItem(e));return n},n="object"==typeof self?self:globalThis,s=e=>((e,t)=>{const r=(t,r)=>(e.set(r,t),t),s=o=>{if(e.has(o))return e.get(o);const[a,i]=t[o];switch(a){case 0:case-1:return r(i,o);case 1:{const e=r([],o);for(const t of i)e.push(s(t));return e}case 2:{const e=r({},o);for(const[t,r]of i)e[s(t)]=s(r);return e}case 3:return r(new Date(i),o);case 4:{const{source:e,flags:t}=i;return r(new RegExp(e,t),o)}case 5:{const e=r(new Map,o);for(const[t,r]of i)e.set(s(t),s(r));return e}case 6:{const e=r(new Set,o);for(const t of i)e.add(s(t));return e}case 7:{const{name:e,message:t}=i;return r(new n[e](t),o)}case 8:return r(BigInt(i),o);case"BigInt":return r(Object(BigInt(i)),o)}return r(new n[a](i),o)};return s})(new Map,e)(0),o="",{toString:a}={},{keys:i}=Object,c=e=>{const t=typeof e;if("object"!==t||!e)return[0,t];const r=a.call(e).slice(8,-1);switch(r){case"Array":return[1,o];case"Object":return[2,o];case"Date":return[3,o];case"RegExp":return[4,o];case"Map":return[5,o];case"Set":return[6,o]}return r.includes("Array")?[1,r]:r.includes("Error")?[7,r]:[2,r]},l=([e,t])=>0===e&&("function"===t||"symbol"===t),u=(e,{json:t,lossy:r}={})=>{const n=[];return((e,t,r,n)=>{const s=(e,t)=>{const s=n.push(e)-1;return r.set(t,s),s},o=n=>{if(r.has(n))return r.get(n);let[a,u]=c(n);switch(a){case 0:{let t=n;switch(u){case"bigint":a=8,t=n.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+u);t=null;break;case"undefined":return s([-1],n)}return s([a,t],n)}case 1:{if(u)return s([u,[...n]],n);const e=[],t=s([a,e],n);for(const t of n)e.push(o(t));return t}case 2:{if(u)switch(u){case"BigInt":return s([u,n.toString()],n);case"Boolean":case"Number":case"String":return s([u,n.valueOf()],n)}if(t&&"toJSON"in n)return o(n.toJSON());const r=[],p=s([a,r],n);for(const t of i(n))!e&&l(c(n[t]))||r.push([o(t),o(n[t])]);return p}case 3:return s([a,n.toISOString()],n);case 4:{const{source:e,flags:t}=n;return s([a,{source:e,flags:t}],n)}case 5:{const t=[],r=s([a,t],n);for(const[r,s]of n)(e||!l(c(r))&&!l(c(s)))&&t.push([o(r),o(s)]);return r}case 6:{const t=[],r=s([a,t],n);for(const r of n)!e&&l(c(r))||t.push(o(r));return r}}const{message:p}=n;return s([a,{name:u,message:p}],n)};return o})(!(t||r),!!t,new Map,n)(e),n},{parse:p,stringify:f}=JSON,d={json:!0,lossy:!0};var y=Object.freeze({__proto__:null,parse:e=>s(p(e)),stringify:e=>f(u(e,d))});const h="891249cd-eb53-4bc8-ae48-b0a5a277d24a",m="M"+h,g="T"+h;var w=e=>({value:new Promise((t=>{let r=new Worker("data:application/javascript,onmessage%3D(%7Bdata%3Ab%7D)%3D%3E(Atomics.wait(b%2C0)%2CpostMessage(0))");r.onmessage=t,r.postMessage(e)}))})
2
- /*! (c) Andrea Giammarchi - ISC */;const{Int32Array:b,Map:v,SharedArrayBuffer:_,Uint16Array:E}=globalThis,{BYTES_PER_ELEMENT:A}=b,{BYTES_PER_ELEMENT:k}=E,{isArray:S}=Array,{notify:R,wait:x,waitAsync:P}=Atomics,{fromCharCode:j}=String,$=(e,t)=>e?(P||w)(t,0):(x(t,0),{value:{then:e=>e()}}),M=new WeakSet,W=new WeakMap;let T=0;const O=(e,{parse:t,stringify:r,transform:n}=JSON)=>{if(!W.has(e)){const s=(t,...r)=>e.postMessage({[h]:r},{transfer:t});let o=!1;W.set(e,new Proxy(new v,{has:(e,t)=>"string"==typeof t&&!t.startsWith("_"),get:(r,a)=>"then"===a?null:(...r)=>{const i=T++;let c=new b(new _(A)),l=[];M.has(r.at(-1)||l)&&M.delete(l=r.pop()),s(l,i,c,a,n?r.map(n):r);const u=e!==globalThis;let p=0;return o&&u&&(p=setTimeout(console.warn,1e3,`💀🔒 - Possible deadlock if proxy.${a}(...args) is awaited`)),$(u,c).value.then((()=>{clearTimeout(p);const e=c[0];if(!e)return;const r=k*e;return c=new b(new _(r+r%A)),s([],i,c),$(u,c).value.then((()=>t(j(...new E(c.buffer).slice(0,e)))))}))},set(t,n,s){if(!t.size){const n=new v;e.addEventListener("message",(async e=>{const s=e.data?.[h];if(S(s)){e.stopImmediatePropagation();const[a,i,...c]=s;if(c.length){const[e,s]=c;if(!t.has(e))throw new Error(`Unsupported action: ${e}`);o=!0;try{const o=await t.get(e)(...s);if(void 0!==o){const e=r(o);n.set(a,e),i[0]=e.length}}finally{o=!1}}else{const e=n.get(a);n.delete(a);for(let t=new E(i.buffer),r=0;r<e.length;r++)t[r]=e.charCodeAt(r)}R(i,0)}}))}return!!t.set(n,s)}}))}return W.get(e)};O.transfer=(...e)=>(M.add(e),e);const F="object",I="function",B="number",N="string",L="undefined",C="symbol",{defineProperty:J,getOwnPropertyDescriptor:D,getPrototypeOf:H,isExtensible:U,ownKeys:z,preventExtensions:q,set:Q,setPrototypeOf:Y}=Reflect,{assign:K,create:X}=Object,V=H(Int8Array),Z="isArray",G=(e,t)=>{const{get:r,set:n,value:s}=e;return r&&(e.get=t(r)),n&&(e.set=t(n)),s&&(e.value=t(s)),e},ee=(e,t)=>[e,t],te=e=>t=>{const r=typeof t;switch(r){case F:if(null==t)return ee("null",t);if(t===globalThis)return ee(F,null);case I:return e(r,t);case"boolean":case B:case N:case L:case"bigint":return ee(r,t);case C:if(re.has(t))return ee(r,re.get(t))}throw new Error(`Unable to handle this ${r} type`)},re=new Map(z(Symbol).filter((e=>typeof Symbol[e]===C)).map((e=>[Symbol[e],e]))),ne=e=>{for(const[t,r]of re)if(r===e)return t};function se(){return this}const oe="apply",ae="construct",ie="defineProperty",ce="deleteProperty",le="get",ue="getOwnPropertyDescriptor",pe="getPrototypeOf",fe="has",de="isExtensible",ye="ownKeys",he="preventExtensions",me="set",ge="setPrototypeOf",we="delete";var be=((e,t)=>{const r=t&&new WeakMap;if(t){const{addEventListener:e}=EventTarget.prototype;J(EventTarget.prototype,"addEventListener",{value(t,n,...s){return s.at(0)?.invoke&&(r.has(this)||r.set(this,new Map),r.get(this).set(t,[].concat(s[0].invoke)),delete s[0].invoke),e.call(this,t,n,...s)}})}const n=t&&(e=>{const{currentTarget:t,target:n,type:s}=e;for(const o of r.get(t||n)?.get(s)||[])e[o]()});return(r,s,o,...a)=>{let i=0;const c=new Map,l=new Map,{[o]:u}=r,p=a.length?K(X(globalThis),...a):globalThis,f=te(((e,t)=>{if(!c.has(t)){let e;for(;l.has(e=i++););c.set(t,e),l.set(e,t)}return ee(e,c.get(t))})),d=new FinalizationRegistry((e=>{u(we,ee(N,e))})),y=([e,r])=>{switch(e){case F:if(null==r)return p;if(typeof r===B)return l.get(r);if(!(r instanceof V))for(const e in r)r[e]=y(r[e]);return r;case I:if(typeof r===N){if(!l.has(r)){const e=function(...e){return t&&e.at(0)instanceof Event&&n(...e),u(oe,ee(I,r),f(this),e.map(f))},s=new WeakRef(e);l.set(r,s),d.register(e,r,s)}return l.get(r).deref()}return l.get(r);case C:return ne(r)}return r},h={[oe]:(e,t,r)=>f(e.apply(t,r)),[ae]:(e,t)=>f(new e(...t)),[ie]:(e,t,r)=>f(J(e,t,r)),[ce]:(e,t)=>f(delete e[t]),[pe]:e=>f(H(e)),[le]:(e,t)=>f(e[t]),[ue]:(e,t)=>{const r=D(e,t);return r?ee(F,G(r,f)):ee(L,r)},[fe]:(e,t)=>f(t in e),[de]:e=>f(U(e)),[ye]:e=>ee(F,z(e).map(f)),[he]:e=>f(q(e)),[me]:(e,t,r)=>f(Q(e,t,r)),[ge]:(e,t)=>f(Y(e,t)),[we](e){c.delete(l.get(e)),l.delete(e)}};return r[s]=(e,t,...r)=>{switch(e){case oe:r[0]=y(r[0]),r[1]=r[1].map(y);break;case ae:r[0]=r[0].map(y);break;case ie:{const[e,t]=r;r[0]=y(e);const{get:n,set:s,value:o}=t;n&&(t.get=y(n)),s&&(t.set=y(s)),o&&(t.value=y(o));break}default:r=r.map(y)}return h[e](y(t),...r)},{proxy:r,[e.toLowerCase()]:p,[`is${e}Proxy`]:()=>!1}}})("Window",!0),ve=(e=>{let t=0;const r=new Map,n=new Map,s=Symbol(),o=e=>typeof e===I?e():e,a=e=>typeof e===F&&!!e&&s in e,i=Array[Z],c=te(((e,a)=>{if(s in a)return o(a[s]);if(e===I){if(!n.has(a)){let e;for(;n.has(e=String(t++)););r.set(a,e),n.set(e,a)}return ee(e,r.get(a))}if(!(a instanceof V))for(const e in a)a[e]=c(a[e]);return ee(e,a)}));return(t,l,u)=>{const{[l]:p}=t,f=new Map,d=new FinalizationRegistry((e=>{f.delete(e),p(we,c(e))})),y=e=>{const[t,r]=e;if(!f.has(r)){const n=t===I?se.bind(e):e,s=new Proxy(n,g),o=new WeakRef(s);f.set(r,o),d.register(s,r,o)}return f.get(r).deref()},h=e=>{const[t,r]=e;switch(t){case F:return null===r?globalThis:typeof r===B?y(e):r;case I:return typeof r===N?n.get(r):y(e);case C:return ne(r)}return r},m=(e,t,...r)=>h(p(e,o(t),...r)),g={[oe]:(e,t,r)=>m(oe,e,c(t),r.map(c)),[ae]:(e,t)=>m(ae,e,t.map(c)),[ie]:(e,t,r)=>{const{get:n,set:s,value:o}=r;return typeof n===I&&(r.get=c(n)),typeof s===I&&(r.set=c(s)),typeof o===I&&(r.value=c(o)),m(ie,e,c(t),r)},[ce]:(e,t)=>m(ce,e,c(t)),[pe]:e=>m(pe,e),[le]:(e,t)=>t===s?e:m(le,e,c(t)),[ue]:(e,t)=>{const r=m(ue,e,c(t));return r&&G(r,h)},[fe]:(e,t)=>t===s||m(fe,e,c(t)),[de]:e=>m(de,e),[ye]:e=>m(ye,e).map(h),[he]:e=>m(he,e),[me]:(e,t,r)=>m(me,e,c(t),c(r)),[ge]:(e,t)=>m(ge,e,c(t))};t[u]=(e,t,s,o)=>{switch(e){case oe:return h(t).apply(h(s),o.map(h));case we:{const e=h(t);r.delete(n.get(e)),n.delete(e)}}};const w=new Proxy([F,null],g),b=w.Array[Z];return J(Array,Z,{value:e=>a(e)?b(e):i(e)}),{[e.toLowerCase()]:w,[`is${e}Proxy`]:a,proxy:t}}})("Window"),_e="function"==typeof Worker?Worker:class{};const Ee=new WeakMap,Ae=(e,...t)=>{const r=O(e,...t);if(!Ee.has(r)){const t=e instanceof _e?be:ve;Ee.set(r,t(r,m,g))}return Ee.get(r)};Ae.transfer=O.transfer;const{isArray:ke}=Array,{assign:Se,create:Re,defineProperties:xe,defineProperty:Pe,entries:je}=Object,{all:$e,resolve:Me}=new Proxy(Promise,{get:(e,t)=>e[t].bind(e)}),We=(e,t=location.href)=>new URL(e,t).href;let Te=0;const Oe=(e,t)=>({id:e.id||(e.id=`${t}-w${Te++}`),tag:e.tagName}),Fe=e=>e.arrayBuffer(),Ie=e=>e.json(),Be=e=>e.text(),Ne=[["beforeRun","codeBeforeRunWorker"],["beforeRunAsync","codeBeforeRunWorkerAsync"],["afterRun","codeAfterRunWorker"],["afterRunAsync","codeAfterRunWorkerAsync"]];class Le{constructor(e,t){this.interpreter=e,this.onWorkerReady=t.onWorkerReady;for(const[e,r]of Ne)this[e]=t[r]?.()}get stringHooks(){const e={};for(const[t]of Ne)this[t]&&(e[t]=this[t]);return e}}var Ce=(...e)=>function(t,r){const n=new Worker(URL.createObjectURL(new Blob(['const e="object"==typeof self?self:globalThis,t=t=>((t,r)=>{const n=(e,r)=>(t.set(r,e),e),s=o=>{if(t.has(o))return t.get(o);const[a,i]=r[o];switch(a){case 0:case-1:return n(i,o);case 1:{const e=n([],o);for(const t of i)e.push(s(t));return e}case 2:{const e=n({},o);for(const[t,r]of i)e[s(t)]=s(r);return e}case 3:return n(new Date(i),o);case 4:{const{source:e,flags:t}=i;return n(new RegExp(e,t),o)}case 5:{const e=n(new Map,o);for(const[t,r]of i)e.set(s(t),s(r));return e}case 6:{const e=n(new Set,o);for(const t of i)e.add(s(t));return e}case 7:{const{name:t,message:r}=i;return n(new e[t](r),o)}case 8:return n(BigInt(i),o);case"BigInt":return n(Object(BigInt(i)),o)}return n(new e[a](i),o)};return s})(new Map,t)(0),r="",{toString:n}={},{keys:s}=Object,o=e=>{const t=typeof e;if("object"!==t||!e)return[0,t];const s=n.call(e).slice(8,-1);switch(s){case"Array":return[1,r];case"Object":return[2,r];case"Date":return[3,r];case"RegExp":return[4,r];case"Map":return[5,r];case"Set":return[6,r]}return s.includes("Array")?[1,s]:s.includes("Error")?[7,s]:[2,s]},a=([e,t])=>0===e&&("function"===t||"symbol"===t),i=(e,{json:t,lossy:r}={})=>{const n=[];return((e,t,r,n)=>{const i=(e,t)=>{const s=n.push(e)-1;return r.set(t,s),s},c=n=>{if(r.has(n))return r.get(n);let[l,u]=o(n);switch(l){case 0:{let t=n;switch(u){case"bigint":l=8,t=n.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+u);t=null;break;case"undefined":return i([-1],n)}return i([l,t],n)}case 1:{if(u)return i([u,[...n]],n);const e=[],t=i([l,e],n);for(const t of n)e.push(c(t));return t}case 2:{if(u)switch(u){case"BigInt":return i([u,n.toString()],n);case"Boolean":case"Number":case"String":return i([u,n.valueOf()],n)}if(t&&"toJSON"in n)return c(n.toJSON());const r=[],f=i([l,r],n);for(const t of s(n))!e&&a(o(n[t]))||r.push([c(t),c(n[t])]);return f}case 3:return i([l,n.toISOString()],n);case 4:{const{source:e,flags:t}=n;return i([l,{source:e,flags:t}],n)}case 5:{const t=[],r=i([l,t],n);for(const[r,s]of n)(e||!a(o(r))&&!a(o(s)))&&t.push([c(r),c(s)]);return r}case 6:{const t=[],r=i([l,t],n);for(const r of n)!e&&a(o(r))||t.push(c(r));return r}}const{message:f}=n;return i([l,{name:u,message:f}],n)};return c})(!(t||r),!!t,new Map,n)(e),n},{parse:c,stringify:l}=JSON,u={json:!0,lossy:!0};var f=Object.freeze({__proto__:null,parse:e=>t(c(e)),stringify:e=>l(i(e,u))});const p="891249cd-eb53-4bc8-ae48-b0a5a277d24a",d="M"+p,g="T"+p;var y=e=>({value:new Promise((t=>{let r=new Worker("data:application/javascript,onmessage%3D(%7Bdata%3Ab%7D)%3D%3E(Atomics.wait(b%2C0)%2CpostMessage(0))");r.onmessage=t,r.postMessage(e)}))})\n/*! (c) Andrea Giammarchi - ISC */;const{Int32Array:w,Map:h,SharedArrayBuffer:m,Uint16Array:b}=globalThis,{BYTES_PER_ELEMENT:v}=w,{BYTES_PER_ELEMENT:S}=b,{isArray:P}=Array,{notify:A,wait:E,waitAsync:M}=Atomics,{fromCharCode:$}=String,j=(e,t)=>e?(M||y)(t,0):(E(t,0),{value:{then:e=>e()}}),T=new WeakSet,k=new WeakMap;let _=0;const x=(e,{parse:t,stringify:r,transform:n}=JSON)=>{if(!k.has(e)){const s=(t,...r)=>e.postMessage({[p]:r},{transfer:t});let o=!1;k.set(e,new Proxy(new h,{has:(e,t)=>"string"==typeof t&&!t.startsWith("_"),get:(r,a)=>"then"===a?null:(...r)=>{const i=_++;let c=new w(new m(v)),l=[];T.has(r.at(-1)||l)&&T.delete(l=r.pop()),s(l,i,c,a,n?r.map(n):r);const u=e!==globalThis;let f=0;return o&&u&&(f=setTimeout(console.warn,1e3,`💀🔒 - Possible deadlock if proxy.${a}(...args) is awaited`)),j(u,c).value.then((()=>{clearTimeout(f);const e=c[0];if(!e)return;const r=S*e;return c=new w(new m(r+r%v)),s([],i,c),j(u,c).value.then((()=>t($(...new b(c.buffer).slice(0,e)))))}))},set(t,n,s){if(!t.size){const n=new h;e.addEventListener("message",(async e=>{const s=e.data?.[p];if(P(s)){e.stopImmediatePropagation();const[a,i,...c]=s;if(c.length){const[e,s]=c;if(!t.has(e))throw new Error(`Unsupported action: ${e}`);o=!0;try{const o=await t.get(e)(...s);if(void 0!==o){const e=r(o);n.set(a,e),i[0]=e.length}}finally{o=!1}}else{const e=n.get(a);n.delete(a);for(let t=new b(i.buffer),r=0;r<e.length;r++)t[r]=e.charCodeAt(r)}A(i,0)}}))}return!!t.set(n,s)}}))}return k.get(e)};x.transfer=(...e)=>(T.add(e),e);const O="object",F="function",W="number",R="string",B="undefined",J="symbol",{defineProperty:I,getOwnPropertyDescriptor:L,getPrototypeOf:C,isExtensible:H,ownKeys:D,preventExtensions:N,set:U,setPrototypeOf:z}=Reflect,{assign:q,create:K}=Object,Y=C(Int8Array),G="isArray",V=(e,t)=>{const{get:r,set:n,value:s}=e;return r&&(e.get=t(r)),n&&(e.set=t(n)),s&&(e.value=t(s)),e},Q=(e,t)=>[e,t],X=e=>t=>{const r=typeof t;switch(r){case O:if(null==t)return Q("null",t);if(t===globalThis)return Q(O,null);case F:return e(r,t);case"boolean":case W:case R:case B:case"bigint":return Q(r,t);case J:if(Z.has(t))return Q(r,Z.get(t))}throw new Error(`Unable to handle this ${r} type`)},Z=new Map(D(Symbol).filter((e=>typeof Symbol[e]===J)).map((e=>[Symbol[e],e]))),ee=e=>{for(const[t,r]of Z)if(r===e)return t};function te(){return this}const re="apply",ne="construct",se="defineProperty",oe="deleteProperty",ae="get",ie="getOwnPropertyDescriptor",ce="getPrototypeOf",le="has",ue="isExtensible",fe="ownKeys",pe="preventExtensions",de="set",ge="setPrototypeOf",ye="delete";var we=((e,t)=>{const r=t&&new WeakMap;if(t){const{addEventListener:e}=EventTarget.prototype;I(EventTarget.prototype,"addEventListener",{value(t,n,...s){return s.at(0)?.invoke&&(r.has(this)||r.set(this,new Map),r.get(this).set(t,[].concat(s[0].invoke)),delete s[0].invoke),e.call(this,t,n,...s)}})}const n=t&&(e=>{const{currentTarget:t,target:n,type:s}=e;for(const o of r.get(t||n)?.get(s)||[])e[o]()});return(r,s,o,...a)=>{let i=0;const c=new Map,l=new Map,{[o]:u}=r,f=a.length?q(K(globalThis),...a):globalThis,p=X(((e,t)=>{if(!c.has(t)){let e;for(;l.has(e=i++););c.set(t,e),l.set(e,t)}return Q(e,c.get(t))})),d=new FinalizationRegistry((e=>{u(ye,Q(R,e))})),g=([e,r])=>{switch(e){case O:if(null==r)return f;if(typeof r===W)return l.get(r);if(!(r instanceof Y))for(const e in r)r[e]=g(r[e]);return r;case F:if(typeof r===R){if(!l.has(r)){const e=function(...e){return t&&e.at(0)instanceof Event&&n(...e),u(re,Q(F,r),p(this),e.map(p))},s=new WeakRef(e);l.set(r,s),d.register(e,r,s)}return l.get(r).deref()}return l.get(r);case J:return ee(r)}return r},y={[re]:(e,t,r)=>p(e.apply(t,r)),[ne]:(e,t)=>p(new e(...t)),[se]:(e,t,r)=>p(I(e,t,r)),[oe]:(e,t)=>p(delete e[t]),[ce]:e=>p(C(e)),[ae]:(e,t)=>p(e[t]),[ie]:(e,t)=>{const r=L(e,t);return r?Q(O,V(r,p)):Q(B,r)},[le]:(e,t)=>p(t in e),[ue]:e=>p(H(e)),[fe]:e=>Q(O,D(e).map(p)),[pe]:e=>p(N(e)),[de]:(e,t,r)=>p(U(e,t,r)),[ge]:(e,t)=>p(z(e,t)),[ye](e){c.delete(l.get(e)),l.delete(e)}};return r[s]=(e,t,...r)=>{switch(e){case re:r[0]=g(r[0]),r[1]=r[1].map(g);break;case ne:r[0]=r[0].map(g);break;case se:{const[e,t]=r;r[0]=g(e);const{get:n,set:s,value:o}=t;n&&(t.get=g(n)),s&&(t.set=g(s)),o&&(t.value=g(o));break}default:r=r.map(g)}return y[e](g(t),...r)},{proxy:r,[e.toLowerCase()]:f,[`is${e}Proxy`]:()=>!1}}})("Window",!0),he=(e=>{let t=0;const r=new Map,n=new Map,s=Symbol(),o=e=>typeof e===F?e():e,a=e=>typeof e===O&&!!e&&s in e,i=Array[G],c=X(((e,a)=>{if(s in a)return o(a[s]);if(e===F){if(!n.has(a)){let e;for(;n.has(e=String(t++)););r.set(a,e),n.set(e,a)}return Q(e,r.get(a))}if(!(a instanceof Y))for(const e in a)a[e]=c(a[e]);return Q(e,a)}));return(t,l,u)=>{const{[l]:f}=t,p=new Map,d=new FinalizationRegistry((e=>{p.delete(e),f(ye,c(e))})),g=e=>{const[t,r]=e;if(!p.has(r)){const n=t===F?te.bind(e):e,s=new Proxy(n,h),o=new WeakRef(s);p.set(r,o),d.register(s,r,o)}return p.get(r).deref()},y=e=>{const[t,r]=e;switch(t){case O:return null===r?globalThis:typeof r===W?g(e):r;case F:return typeof r===R?n.get(r):g(e);case J:return ee(r)}return r},w=(e,t,...r)=>y(f(e,o(t),...r)),h={[re]:(e,t,r)=>w(re,e,c(t),r.map(c)),[ne]:(e,t)=>w(ne,e,t.map(c)),[se]:(e,t,r)=>{const{get:n,set:s,value:o}=r;return typeof n===F&&(r.get=c(n)),typeof s===F&&(r.set=c(s)),typeof o===F&&(r.value=c(o)),w(se,e,c(t),r)},[oe]:(e,t)=>w(oe,e,c(t)),[ce]:e=>w(ce,e),[ae]:(e,t)=>t===s?e:w(ae,e,c(t)),[ie]:(e,t)=>{const r=w(ie,e,c(t));return r&&V(r,y)},[le]:(e,t)=>t===s||w(le,e,c(t)),[ue]:e=>w(ue,e),[fe]:e=>w(fe,e).map(y),[pe]:e=>w(pe,e),[de]:(e,t,r)=>w(de,e,c(t),c(r)),[ge]:(e,t)=>w(ge,e,c(t))};t[u]=(e,t,s,o)=>{switch(e){case re:return y(t).apply(y(s),o.map(y));case ye:{const e=y(t);r.delete(n.get(e)),n.delete(e)}}};const m=new Proxy([O,null],h),b=m.Array[G];return I(Array,G,{value:e=>a(e)?b(e):i(e)}),{[e.toLowerCase()]:m,[`is${e}Proxy`]:a,proxy:t}}})("Window"),me="function"==typeof Worker?Worker:class{};const be=new WeakMap,ve=(e,...t)=>{const r=x(e,...t);if(!be.has(r)){const t=e instanceof me?we:he;be.set(r,t(r,d,g))}return be.get(r)};ve.transfer=x.transfer;const{isArray:Se}=Array,{assign:Pe,create:Ae,defineProperties:Ee,defineProperty:Me,entries:$e}=Object,{all:je,resolve:Te}=new Proxy(Promise,{get:(e,t)=>e[t].bind(e)}),ke=(e,t=location.href)=>new URL(e,t).href;Promise.withResolvers||(Promise.withResolvers=function(){var e,t,r=new this((function(r,n){e=r,t=n}));return{resolve:e,reject:t,promise:r}});const _e=e=>e.arrayBuffer(),xe=e=>e.json(),Oe=e=>e.text(),Fe=e=>e.replace(/^[^\\r\\n]+$/,(e=>e.trim())),We=new WeakMap,Re=e=>{const t=e||console,r={stderr:(t.stderr||console.error).bind(t),stdout:(t.stdout||console.log).bind(t)};return{stderr:(...e)=>r.stderr(...e),stdout:(...e)=>r.stdout(...e),async get(e){const t=await e;return We.set(t,r),t}}},Be=({FS:e,PATH:t,PATH_FS:r},n,s)=>{const o=r.resolve(n);return e.mkdirTree(t.dirname(o)),e.writeFile(o,new Uint8Array(s),{canOwn:!0})},Je=e=>{const t=e.split("/");return t.pop(),t.join("/")},Ie=(e,t)=>{const r=[];for(const n of t.split("/"))"."!==n&&(r.push(n),n&&e.mkdir(r.join("/")))},Le=(e,t)=>{const r=[];for(const e of t.split("/"))switch(e){case"":case".":break;case"..":r.pop();break;default:r.push(e)}return[e.cwd()].concat(r).join("/").replace(/^\\/+/,"/")},Ce=e=>{const t=e.map((e=>e.trim().replace(/(^[/]*|[/]*$)/g,""))).filter((e=>""!==e&&"."!==e)).join("/");return e[0].startsWith("/")?`/${t}`:t},He=new WeakMap,De=(e,t,r)=>je((e=>{for(const{files:t,to_file:r,from:n=""}of e){if(void 0!==t&&void 0!==r)throw new Error("Cannot use \'to_file\' and \'files\' parameters together!");if(void 0===t&&void 0===r&&n.endsWith("/"))throw new Error(`Couldn\'t determine the filename from the path ${n}, please supply \'to_file\' parameter.`)}return e.flatMap((({from:e="",to_folder:t=".",to_file:r,files:n})=>{if(Se(n))return n.map((r=>({url:Ce([e,r]),path:Ce([t,r])})));const s=r||e.slice(1+e.lastIndexOf("/"));return[{url:e,path:Ce([t,s])}]}))})(r).map((({url:n,path:s})=>((e,t)=>fetch(ke(t,He.get(e))))(r,n).then(_e).then((r=>e.writeFile(t,s,r)))))),Ne=(e,t,r)=>{e.registerJsModule(t,r)},Ue=(e,t,...r)=>{try{return e.runPython(Fe(t),...r)}catch(t){We.get(e).stderr(t)}},ze=async(e,t,...r)=>{try{return await e.runPythonAsync(Fe(t),...r)}catch(t){We.get(e).stderr(t)}},qe=async(e,t,r)=>{const[n,...s]=t.split(".");let o,a=e.globals.get(n);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,r)}catch(t){We.get(e).stderr(t)}};var Ke={type:"micropython",module:(e="1.20.0-297")=>`https://cdn.jsdelivr.net/npm/@micropython/micropython-webassembly-pyscript@${e}/micropython.mjs`,async engine({loadMicroPython:e},t,r){const{stderr:n,stdout:s,get:o}=Re();r=r.replace(/\\.m?js$/,".wasm");const a=await o(e({stderr:n,stdout:s,url:r}));return t.fetch&&await De(this,a,t.fetch),a},registerJSModule:Ne,run:Ue,runAsync:ze,runEvent:qe,transform:(e,t)=>t,writeFile:({FS:e,_module:{PATH:t,PATH_FS:r}},n,s)=>Be({FS:e,PATH:t,PATH_FS:r},n,s)};const Ye={dict_converter:Object.fromEntries};var Ge={type:"pyodide",module:(e="0.23.4")=>`https://cdn.jsdelivr.net/pyodide/v${e}/full/pyodide.mjs`,async engine({loadPyodide:e},t,r){const{stderr:n,stdout:s,get:o}=Re(),a=r.slice(0,r.lastIndexOf("/")),i=await o(e({stderr:n,stdout:s,indexURL:a}));if(t.fetch&&await De(this,i,t.fetch),t.packages){await i.loadPackage("micropip");const e=await i.pyimport("micropip");await e.install(t.packages),e.destroy()}return i},registerJSModule:Ne,run:Ue,runAsync:ze,runEvent:qe,transform:(e,t)=>t instanceof e.ffi.PyProxy?t.toJs(Ye):t,writeFile:({FS:e,PATH:t,_module:{PATH_FS:r}},n,s)=>Be({FS:e,PATH:t,PATH_FS:r},n,s)};const Ve="ruby-wasm-wasi",Qe=Ve.replace(/\\W+/g,"_");var Xe={type:Ve,experimental:!0,module:(e="2.0.0")=>`https://cdn.jsdelivr.net/npm/ruby-3_2-wasm-wasi@${e}/dist/browser.esm.js`,async engine({DefaultRubyVM:e},t,r){const n=await fetch(`${r.slice(0,r.lastIndexOf("/"))}/ruby.wasm`),s=await WebAssembly.compile(await n.arrayBuffer()),{vm:o}=await e(s);return t.fetch&&await De(this,o,t.fetch),o},registerJSModule(e,t,r){const n=`__module_${Qe}_${t}`;globalThis[n]=r,this.run(e,`require "js";$${t}=JS.global[:${n}]`),delete globalThis[n]},run:(e,t,...r)=>e.eval(Fe(t),...r),runAsync:(e,t,...r)=>e.evalAsync(Fe(t),...r),async runEvent(e,t,r){if(/^xworker\\.(on\\w+)$/.test(t)){const{$1:t}=RegExp,n=`__module_${Qe}_event`;globalThis[n]=r,this.run(e,`require "js";$xworker.call("${t}",JS.global[:${n}])`),delete globalThis[n]}else{const n=this.run(e,`method(:${t})`);await n.call(t,e.wrap(r))}},transform:(e,t)=>t,writeFile:()=>{throw new Error(`writeFile is not supported in ${Ve}`)}};var Ze={type:"wasmoon",module:(e="1.15.0")=>`https://cdn.jsdelivr.net/npm/wasmoon@${e}/+esm`,async engine({LuaFactory:e,LuaLibraries:t},r){const{stderr:n,stdout:s,get:o}=Re(),a=await o((new e).createEngine());return a.global.getTable(t.Base,(e=>{a.global.setField(e,"print",s),a.global.setField(e,"printErr",n)})),r.fetch&&await De(this,a,r.fetch),a},registerJSModule:(e,t,r)=>{e.global.set(t,r)},run:(e,t,...r)=>{try{return e.doStringSync(Fe(t),...r)}catch(t){We.get(e).stderr(t)}},runAsync:async(e,t,...r)=>{try{return await e.doString(Fe(t),...r)}catch(t){We.get(e).stderr(t)}},runEvent:async(e,t,r)=>{const[n,...s]=t.split(".");let o,a=e.global.get(n);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,r)}catch(t){We.get(e).stderr(t)}},transform:(e,t)=>t,writeFile:({cmodule:{module:{FS:e}}},t,r)=>((e,t,r)=>(Ie(e,Je(t)),t=Le(e,t),e.writeFile(t,new Uint8Array(r),{canOwn:!0})))(e,t,r)};const et=new Map,tt=new Map,rt=new Proxy(new Map,{get(e,t){if(!e.has(t)){const[r,...n]=t.split("@"),s=et.get(r),o=/^https?:\\/\\//i.test(n)?n.join("@"):s.module(...n);e.set(t,{url:o,module:import(o),engine:s.engine.bind(s)})}const{url:r,module:n,engine:s}=e.get(t);return(e,o)=>n.then((n=>{tt.set(t,e);const a=e?.fetch;return a&&He.set(a,o),s(n,e,r)}))}}),nt=e=>{for(const t of[].concat(e.type))et.set(t,e)};for(const e of[Ke,Ge,Xe,Ze])nt(e);const st=async e=>(await import("https://cdn.jsdelivr.net/npm/basic-toml@0.3.1/es.js")).parse(e);try{new SharedArrayBuffer(4)}catch(e){throw new Error(["Unable to use SharedArrayBuffer due insecure environment.","Please read requirements in MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer#security_requirements"].join("\\n"))}let ot,at,it;const ct=(e,t)=>{addEventListener(e,t||(async t=>{try{await ot,at(`xworker.on${e}`,t)}catch(e){postMessage(e)}}),!!t&&{once:!0})},{parse:lt,stringify:ut}=f,{proxy:ft,window:pt,isWindowProxy:dt}=ve(self,{parse:lt,stringify:ut,transform:e=>it?it(e):e}),gt={sync:ft,window:pt,isWindowProxy:dt,onmessage:console.info,onerror:console.error,onmessageerror:console.warn,postMessage:postMessage.bind(self)};ct("message",(({data:{options:e,config:t,code:r,hooks:n}})=>{ot=(async()=>{try{const{id:s,tag:o,type:a,custom:i,version:c,config:l,async:u}=e,f=await((e,t,r={})=>{if(t)if(t.endsWith(".json"))r=fetch(t).then(xe),t=ke(t);else if(t.endsWith(".toml"))r=fetch(t).then(Oe).then(st),t=ke(t);else if(!t.endsWith(".txt")){try{r=JSON.parse(t)}catch(e){r=st(t)}t=ke("./config.txt")}return Te(r).then((r=>rt[e](r,t)))})(((e,t="")=>`${e}@${t}`.replace(/@$/,""))(a,c),t,l),p=Ae(et.get(a)),d="run"+(u?"Async":"");if(n){const{beforeRun:e,beforeRunAsync:t,afterRun:r,afterRunAsync:s}=n,o=r||s,a=e||t;if(o){const e=p[d].bind(p);p[d]=(t,r,...n)=>e(t,`${r}\\n${o}`,...n)}if(a){const e=p[d].bind(p);p[d]=(t,r,...n)=>e(t,`${a}\\n${r}`,...n)}}let g="";return p.registerJSModule(f,"polyscript",{xworker:gt,get target(){if(!g){const{document:e}=gt.window,t=e.getElementById(s);"SCRIPT"===o?t.after(Pe(e.createElement(`script-${i||a}`),{id:g=`${s}-target`})):(g=s,t.replaceChildren(),t.style.display="block")}return g}}),at=p.runEvent.bind(p,f),it=p.transform.bind(p,f),await p[d](f,r),f}catch(e){postMessage(e)}})(),ct("error"),ct("message"),ct("messageerror")}));\n'],{type:"application/javascript"})),{type:"module"}),{postMessage:s}=n,o=this instanceof Le;if(e.length){const[t,n]=e;(r=Se({},r||{type:t,version:n})).type||(r.type=t)}const{config:a}=r,i=We(a&&"string"==typeof a?a:"./config.txt"),c=fetch(t).then(Be).then((e=>{const t=o?this.stringHooks:void 0;s.call(n,{options:r,config:i,code:e,hooks:t})}));return xe(n,{postMessage:{value:(e,...t)=>c.then((()=>s.call(n,e,...t)))},sync:{value:Ae(n,y).proxy},onerror:{writable:!0,configurable:!0,value:console.error}}),o&&this.onWorkerReady?.(this.interpreter,n),n.addEventListener("message",(e=>{const{data:t}=e;t instanceof Error&&(e.stopImmediatePropagation(),n.onerror(Object.create(e,{type:{value:"error"},error:{value:t}})))})),n},Je=e=>{const{worker:t}=e.attributes;if(t){let{value:r}=t;if(!r){if(e.childElementCount){const{innerHTML:t,localName:n,type:s}=e,o=s||n.replace(/-script$/,"");console.warn(`Deprecated: use <script type="${o}"> for an always safe content parsing:\n`,t),r=t}else r=e.textContent;for(const e of r.split(/[\r\n]+/))if(e.trim().length){if(/^(\s+)/.test(e)){const e=`^${RegExp.$1}`;r=r.replace(new RegExp(e,"gm"),"")}break}return URL.createObjectURL(new Blob([r],{type:"text/plain"}))}return r}};const De=e=>e.replace(/^[^\r\n]+$/,(e=>e.trim())),He=new WeakMap,Ue=e=>{const t=e||console,r={stderr:(t.stderr||console.error).bind(t),stdout:(t.stdout||console.log).bind(t)};return{stderr:(...e)=>r.stderr(...e),stdout:(...e)=>r.stdout(...e),async get(e){const t=await e;return He.set(t,r),t}}},ze=({FS:e,PATH:t,PATH_FS:r},n,s)=>{const o=r.resolve(n);return e.mkdirTree(t.dirname(o)),e.writeFile(o,new Uint8Array(s),{canOwn:!0})},qe=e=>{const t=e.split("/");return t.pop(),t.join("/")},Qe=(e,t)=>{const r=[];for(const n of t.split("/"))"."!==n&&(r.push(n),n&&e.mkdir(r.join("/")))},Ye=(e,t)=>{const r=[];for(const e of t.split("/"))switch(e){case"":case".":break;case"..":r.pop();break;default:r.push(e)}return[e.cwd()].concat(r).join("/").replace(/^\/+/,"/")},Ke=e=>{const t=e.map((e=>e.trim().replace(/(^[/]*|[/]*$)/g,""))).filter((e=>""!==e&&"."!==e)).join("/");return e[0].startsWith("/")?`/${t}`:t},Xe=new WeakMap,Ve=(e,t,r)=>$e((e=>{for(const{files:t,to_file:r,from:n=""}of e){if(void 0!==t&&void 0!==r)throw new Error("Cannot use 'to_file' and 'files' parameters together!");if(void 0===t&&void 0===r&&n.endsWith("/"))throw new Error(`Couldn't determine the filename from the path ${n}, please supply 'to_file' parameter.`)}return e.flatMap((({from:e="",to_folder:t=".",to_file:r,files:n})=>{if(ke(n))return n.map((r=>({url:Ke([e,r]),path:Ke([t,r])})));const s=r||e.slice(1+e.lastIndexOf("/"));return[{url:e,path:Ke([t,s])}]}))})(r).map((({url:n,path:s})=>((e,t)=>fetch(We(t,Xe.get(e))))(r,n).then(Fe).then((r=>e.writeFile(t,s,r)))))),Ze=(e,t,r)=>{e.registerJsModule(t,r)},Ge=(e,t,...r)=>{try{return e.runPython(De(t),...r)}catch(t){He.get(e).stderr(t)}},et=async(e,t,...r)=>{try{return await e.runPythonAsync(De(t),...r)}catch(t){He.get(e).stderr(t)}},tt=async(e,t,r)=>{const[n,...s]=t.split(".");let o,a=e.globals.get(n);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,r)}catch(t){He.get(e).stderr(t)}};var rt={type:"micropython",module:(e="1.20.0-297")=>`https://cdn.jsdelivr.net/npm/@micropython/micropython-webassembly-pyscript@${e}/micropython.mjs`,async engine({loadMicroPython:e},t,r){const{stderr:n,stdout:s,get:o}=Ue();r=r.replace(/\.m?js$/,".wasm");const a=await o(e({stderr:n,stdout:s,url:r}));return t.fetch&&await Ve(this,a,t.fetch),a},registerJSModule:Ze,run:Ge,runAsync:et,runEvent:tt,transform:(e,t)=>t,writeFile:({FS:e,_module:{PATH:t,PATH_FS:r}},n,s)=>ze({FS:e,PATH:t,PATH_FS:r},n,s)};const nt={dict_converter:Object.fromEntries};var st={type:"pyodide",module:(e="0.23.4")=>`https://cdn.jsdelivr.net/pyodide/v${e}/full/pyodide.mjs`,async engine({loadPyodide:e},t,r){const{stderr:n,stdout:s,get:o}=Ue(),a=r.slice(0,r.lastIndexOf("/")),i=await o(e({stderr:n,stdout:s,indexURL:a}));if(t.fetch&&await Ve(this,i,t.fetch),t.packages){await i.loadPackage("micropip");const e=await i.pyimport("micropip");await e.install(t.packages),e.destroy()}return i},registerJSModule:Ze,run:Ge,runAsync:et,runEvent:tt,transform:(e,t)=>t instanceof e.ffi.PyProxy?t.toJs(nt):t,writeFile:({FS:e,PATH:t,_module:{PATH_FS:r}},n,s)=>ze({FS:e,PATH:t,PATH_FS:r},n,s)};const ot="ruby-wasm-wasi",at=ot.replace(/\W+/g,"_");var it={type:ot,experimental:!0,module:(e="2.0.0")=>`https://cdn.jsdelivr.net/npm/ruby-3_2-wasm-wasi@${e}/dist/browser.esm.js`,async engine({DefaultRubyVM:e},t,r){const n=await fetch(`${r.slice(0,r.lastIndexOf("/"))}/ruby.wasm`),s=await WebAssembly.compile(await n.arrayBuffer()),{vm:o}=await e(s);return t.fetch&&await Ve(this,o,t.fetch),o},registerJSModule(e,t,r){const n=`__module_${at}_${t}`;globalThis[n]=r,this.run(e,`require "js";$${t}=JS.global[:${n}]`),delete globalThis[n]},run:(e,t,...r)=>e.eval(De(t),...r),runAsync:(e,t,...r)=>e.evalAsync(De(t),...r),async runEvent(e,t,r){if(/^xworker\.(on\w+)$/.test(t)){const{$1:t}=RegExp,n=`__module_${at}_event`;globalThis[n]=r,this.run(e,`require "js";$xworker.call("${t}",JS.global[:${n}])`),delete globalThis[n]}else{const n=this.run(e,`method(:${t})`);await n.call(t,e.wrap(r))}},transform:(e,t)=>t,writeFile:()=>{throw new Error(`writeFile is not supported in ${ot}`)}};var ct={type:"wasmoon",module:(e="1.15.0")=>`https://cdn.jsdelivr.net/npm/wasmoon@${e}/+esm`,async engine({LuaFactory:e,LuaLibraries:t},r){const{stderr:n,stdout:s,get:o}=Ue(),a=await o((new e).createEngine());return a.global.getTable(t.Base,(e=>{a.global.setField(e,"print",s),a.global.setField(e,"printErr",n)})),r.fetch&&await Ve(this,a,r.fetch),a},registerJSModule:(e,t,r)=>{e.global.set(t,r)},run:(e,t,...r)=>{try{return e.doStringSync(De(t),...r)}catch(t){He.get(e).stderr(t)}},runAsync:async(e,t,...r)=>{try{return await e.doString(De(t),...r)}catch(t){He.get(e).stderr(t)}},runEvent:async(e,t,r)=>{const[n,...s]=t.split(".");let o,a=e.global.get(n);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,r)}catch(t){He.get(e).stderr(t)}},transform:(e,t)=>t,writeFile:({cmodule:{module:{FS:e}}},t,r)=>((e,t,r)=>(Qe(e,qe(t)),t=Ye(e,t),e.writeFile(t,new Uint8Array(r),{canOwn:!0})))(e,t,r)};const lt=new Map,ut=new Map,pt=[],ft=[],dt=new Proxy(new Map,{get(e,t){if(!e.has(t)){const[r,...n]=t.split("@"),s=lt.get(r),o=/^https?:\/\//i.test(n)?n.join("@"):s.module(...n);e.set(t,{url:o,module:import(o),engine:s.engine.bind(s)})}const{url:r,module:n,engine:s}=e.get(t);return(e,o)=>n.then((n=>{ut.set(t,e);const a=e?.fetch;return a&&Xe.set(a,o),s(n,e,r)}))}}),yt=e=>{for(const t of[].concat(e.type))lt.set(t,e),pt.push(`script[type="${t}"]`),ft.push(`${t}-`)};for(const e of[rt,st,it,ct])yt(e);const ht=async e=>(await import("https://cdn.jsdelivr.net/npm/basic-toml@0.3.1/es.js")).parse(e),mt=(e,t,r={})=>{if(t)if(t.endsWith(".json"))r=fetch(t).then(Ie),t=We(t);else if(t.endsWith(".toml"))r=fetch(t).then(Be).then(ht),t=We(t);else if(!t.endsWith(".txt")){try{r=JSON.parse(t)}catch(e){r=ht(t)}t=We("./config.txt")}return Me(r).then((r=>dt[e](r,t)))},gt=(e,t="")=>`${e}@${t}`.replace(/@$/,""),wt=(t,r)=>{const n=(e=>{let t=e;for(;t.parentNode;)t=t.parentNode;return t})(t);return n.getElementById(r)||e(r,n)},bt=new WeakMap,vt={get(){let e=bt.get(this);return e||(e=document.createElement(`${this.type}-script`),bt.set(this,e),St(this)),e},set(e){"string"==typeof e?bt.set(this,wt(this,e)):(bt.set(this,e),St(this))}},_t=new WeakMap,Et=new Map,At=(e,t)=>{const r=e?.value;return r?t+r:""},kt=(e,t,r,n,s,o=e)=>{if(!Et.has(t)){const a={interpreter:mt(r,s),queue:Me(),XWorker:Ce(e,n)};Et.set(t,a),Et.has(e)||Et.set(e,a),Et.has(o)||Et.set(o,a)}return Et.get(t)},St=async e=>{if(_t.has(e)){const{target:t}=e;t&&(e.closest("head")?document.body.append(t):e.after(t))}else{const{attributes:{async:t,config:r,env:n,target:s,version:o},src:a,type:i}=e,c=o?.value,l=gt(i,c);let u=At(r,"|");const p=At(n,"")||`${l}${u}`;u=u.slice(1);const f=Je(e);if(f){const r=new(Ce(i,c))(f,{...Oe(e,i),async:!!t,config:u});return void _t.set(Pe(e,"xworker",{value:r}),{xworker:r})}const d=At(s,""),y=kt(i,p,l,c,u);_t.set(Pe(e,"target",vt),y),d&&bt.set(e,wt(e,d));const h=a?fetch(a).then(Be):e.textContent;y.queue=y.queue.then((()=>(async(e,t,r,n)=>{const s=lt.get(e.type);s.experimental&&console.warn(`The ${e.type} interpreter is experimental`);const[o,a]=await $e([_t.get(e).interpreter,t]);try{return Pe(document,"currentScript",{configurable:!0,get:()=>e}),s.registerJSModule(o,"polyscript",{XWorker:r}),s[n?"runAsync":"run"](o,a)}finally{delete document.currentScript}})(e,h,y.XWorker,!!t)))}};new Proxy(Re(null),{get:(e,t)=>Rt(t)});const Rt=async e=>{if(Et.has(e)){const{interpreter:t,queue:r}=Et.get(e);return(await $e([t,r]))[0]}const t=Et.size?`Available interpreters are: ${[...Et.keys()].map((e=>`"${e}"`)).join(", ")}.`:"There are no interpreters in this page.";throw new Error(`The interpreter "${e}" was not found. ${t}`)},xt=async e=>{const{type:t,currentTarget:n}=e;for(let{name:s,value:o,ownerElement:a}of r(`./@*[${ft.map((e=>`name()="${e}${t}"`)).join(" or ")}]`,n)){s=s.slice(0,-(t.length+1));const r=await Rt(a.getAttribute(`${s}-env`)||s);lt.get(s).runEvent(r,o,e)}},Pt=e=>{for(let{name:t,ownerElement:n}of r(`.//@*[${ft.map((e=>`starts-with(name(),"${e}")`)).join(" or ")}]`,e))t=t.slice(t.lastIndexOf("-")+1),"env"!==t&&n.addEventListener(t,xt)},jt=[],$t=new Map,Mt=new Map,Wt=e=>{for(const t of jt)if(e.matches(t)){const r=$t.get(t),{resolve:n}=Mt.get(r),{options:s,known:o}=Tt.get(r);if(!o.has(e)){o.add(e);const{interpreter:t,config:a,version:i,env:c,onInterpreterReady:l}=s,u=Je(e);if(u){const o=It.call(new Le(null,s),u,{...Oe(e,r),version:i,type:t,custom:r,config:a||{},async:e.hasAttribute("async")});return Pe(e,"xworker",{value:o}),void n({type:r,xworker:o})}const p=gt(t,i),f=c||`${p}${a?`|${a}`:""}`,{interpreter:d,XWorker:y}=kt(r,f,p,i,a,t);d.then((o=>{const a=Re(lt.get(t)),{onBeforeRun:i,onBeforeRunAsync:c,onAfterRun:u,onAfterRunAsync:f}=s,d=new Le(o,s),h=function(...e){return y.apply(d,e)};for(const[t,[r,n]]of[["run",[i,u]]]){const s=a[t];a[t]=function(t,o,...a){r&&r.call(this,m,e);const i=s.call(this,t,o,...a);return n&&n.call(this,m,e),i}}for(const[t,[r,n]]of[["runAsync",[c,f]]]){const s=a[t];a[t]=async function(t,o,...a){r&&await r.call(this,m,e);const i=await s.call(this,t,o,...a);return n&&await n.call(this,m,e),i}}a.registerJSModule(o,"polyscript",{XWorker:h});const m={type:r,interpreter:o,XWorker:h,io:He.get(o),config:structuredClone(ut.get(p)),run:a.run.bind(a,o),runAsync:a.runAsync.bind(a,o),runEvent:a.runEvent.bind(a,o)};n(m),l?.(m,e)}))}}},Tt=new Map;let Ot=0;const Ft=e=>(Mt.has(e)||Mt.set(e,Promise.withResolvers()),Mt.get(e).promise),It=Ce(),Bt=pt.join(","),Nt=new MutationObserver((e=>{for(const{type:r,target:n,attributeName:s,addedNodes:o}of e)if("attributes"!==r){for(const e of o)if(1===e.nodeType)if(Pt(e),e.matches(Bt))St(e);else{if(t(Bt,e).forEach(St),!jt.length)continue;Wt(e),t(jt.join(","),e).forEach(Wt)}}else{const e=s.lastIndexOf("-")+1;if(e){const t=s.slice(0,e);for(const r of ft)if(t===r){const t=s.slice(e);if("env"!==t){const e=n.hasAttribute(s)?"add":"remove";n[`${e}EventListener`](t,xt)}break}}}})),Lt=e=>(Nt.observe(e,{childList:!0,subtree:!0,attributes:!0}),e),{attachShadow:Ct}=Element.prototype;Se(Element.prototype,{attachShadow(e){return Lt(Ct.call(this,e))}}),Pt(Lt(document)),t(Bt,document).forEach(St);const Jt={"<":"&lt;",">":"&gt;"},Dt=e=>{return(new DOMParser).parseFromString((t=e,t.replace(/[<>]/g,(e=>Jt[e]))),"text/html").documentElement.textContent;var t};var Ht={sleep:e=>new Promise((t=>setTimeout(t,1e3*e)))};const{entries:Ut}=Object,zt=["from pathlib import Path as _Path"],qt=(e,t)=>{for(const[r,n]of Ut(t)){const t=`_Path("${e}/${r}")`;if("string"==typeof n){const e=JSON.stringify(n);zt.push(`${t}.write_text(${e})`)}else zt.push(`${t}.mkdir(parents=True, exist_ok=True)`),qt(`${e}/${r}`,n)}};qt(".",{_pyscript:{"__init__.py":'import js as window\n\nIS_WORKER = not hasattr(window, "document")\n\nif IS_WORKER:\n from polyscript import xworker as _xworker\n\n window = _xworker.window\n document = window.document\n sync = _xworker.sync\nelse:\n document = window.document\n',"display.py":'import base64\nimport html\nimport io\nimport re\n\nfrom . import document, window\n\n_MIME_METHODS = {\n "__repr__": "text/plain",\n "_repr_html_": "text/html",\n "_repr_markdown_": "text/markdown",\n "_repr_svg_": "image/svg+xml",\n "_repr_png_": "image/png",\n "_repr_pdf_": "application/pdf",\n "_repr_jpeg_": "image/jpeg",\n "_repr_latex": "text/latex",\n "_repr_json_": "application/json",\n "_repr_javascript_": "application/javascript",\n "savefig": "image/png",\n}\n\n\ndef _render_image(mime, value, meta):\n # If the image value is using bytes we should convert it to base64\n # otherwise it will return raw bytes and the browser will not be able to\n # render it.\n if isinstance(value, bytes):\n value = base64.b64encode(value).decode("utf-8")\n\n # This is the pattern of base64 strings\n base64_pattern = re.compile(\n r"^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$"\n )\n # If value doesn\'t match the base64 pattern we should encode it to base64\n if len(value) > 0 and not base64_pattern.match(value):\n value = base64.b64encode(value.encode("utf-8")).decode("utf-8")\n\n data = f"data:{mime};charset=utf-8;base64,{value}"\n attrs = " ".join([\'{k}="{v}"\' for k, v in meta.items()])\n return f\'<img src="{data}" {attrs}></img>\'\n\n\ndef _identity(value, meta):\n return value\n\n\n_MIME_RENDERERS = {\n "text/plain": html.escape,\n "text/html": _identity,\n "image/png": lambda value, meta: _render_image("image/png", value, meta),\n "image/jpeg": lambda value, meta: _render_image("image/jpeg", value, meta),\n "image/svg+xml": _identity,\n "application/json": _identity,\n "application/javascript": lambda value, meta: f"<script>{value}<\\\\/script>",\n}\n\n\ndef _eval_formatter(obj, print_method):\n """\n Evaluates a formatter method.\n """\n if print_method == "__repr__":\n return repr(obj)\n elif hasattr(obj, print_method):\n if print_method == "savefig":\n buf = io.BytesIO()\n obj.savefig(buf, format="png")\n buf.seek(0)\n return base64.b64encode(buf.read()).decode("utf-8")\n return getattr(obj, print_method)()\n elif print_method == "_repr_mimebundle_":\n return {}, {}\n return None\n\n\ndef _format_mime(obj):\n """\n Formats object using _repr_x_ methods.\n """\n if isinstance(obj, str):\n return html.escape(obj), "text/plain"\n\n mimebundle = _eval_formatter(obj, "_repr_mimebundle_")\n if isinstance(mimebundle, tuple):\n format_dict, _ = mimebundle\n else:\n format_dict = mimebundle\n\n output, not_available = None, []\n for method, mime_type in reversed(_MIME_METHODS.items()):\n if mime_type in format_dict:\n output = format_dict[mime_type]\n else:\n output = _eval_formatter(obj, method)\n\n if output is None:\n continue\n elif mime_type not in _MIME_RENDERERS:\n not_available.append(mime_type)\n continue\n break\n if output is None:\n if not_available:\n window.console.warn(\n f"Rendered object requested unavailable MIME renderers: {not_available}"\n )\n output = repr(output)\n mime_type = "text/plain"\n elif isinstance(output, tuple):\n output, meta = output\n else:\n meta = {}\n return _MIME_RENDERERS[mime_type](output, meta), mime_type\n\n\ndef _write(element, value, append=False):\n html, mime_type = _format_mime(value)\n if html == "\\\\n":\n return\n\n if append:\n out_element = document.createElement("div")\n element.append(out_element)\n else:\n out_element = element.lastElementChild\n if out_element is None:\n out_element = element\n\n if mime_type in ("application/javascript", "text/html"):\n script_element = document.createRange().createContextualFragment(html)\n out_element.append(script_element)\n else:\n out_element.innerHTML = html\n\n\ndef display(*values, target=None, append=True):\n element = document.getElementById(target)\n for v in values:\n _write(element, v, append=append)\n'},"pyscript.py":"# export only what we want to expose as `pyscript` module\n# but not what is WORKER/MAIN dependent\nfrom _pyscript import window, document, IS_WORKER\nfrom _pyscript.display import display as _display\n\n# this part is needed to disambiguate between MAIN and WORKER\nif IS_WORKER:\n # in workers the display does not have a default ID\n # but there is a sync utility from xworker\n import polyscript as _polyscript\n from _pyscript import sync\n\n def current_target():\n return _polyscript.target\n\nelse:\n # in MAIN both PyWorker and current element target exist\n # so these are both exposed and the display will use,\n # if not specified otherwise, such current element target\n import _pyscript_js\n\n PyWorker = _pyscript_js.PyWorker\n\n def current_target():\n return _pyscript_js.target\n\n\n# the display provides a handy default target either in MAIN or WORKER\ndef display(*values, target=None, append=True):\n if target is None:\n target = current_target()\n\n return _display(*values, target=target, append=append)\n"}),zt.push("del _Path"),zt.push("\n");var Qt=zt.join("\n"),Yt={error:()=>import("./error-f33e3b18.js")};const Kt="PY0001",Xt="PY0401",Vt="PY0403",Zt="PY0404",Gt="PY0500",er="PY0503";class tr extends Error{constructor(e,t="",r="text"){super(`(${e}): ${t}`),this.errorCode=e,this.messageType=r,this.name="UserError"}}class rr extends tr{constructor(e,t){super(e,t),this.name="FetchError"}}async function nr(e,t){let r;try{r=await fetch(e,t)}catch(t){const r=t;let n;throw n=e.startsWith("http")?`Fetching from URL ${e} failed with error '${r.message}'. Are your filename and path correct?`:'Polyscript: Access to local files\n (using [[fetch]] configurations in &lt;py-config&gt;)\n is not available when directly opening a HTML file;\n you must use a webserver to serve the additional files.\n See <a style="text-decoration: underline;" href="https://github.com/pyscript/pyscript/issues/257#issuecomment-1119595062">this reference</a>\n on starting a simple webserver with Python.\n ',new rr(Kt,n)}if(!r.ok){const t=`Fetching from URL ${e} failed with error ${r.status} (${r.statusText}). Are your filename and path correct?`;switch(r.status){case 404:throw new rr(Zt,t);case 401:throw new rr(Xt,t);case 403:throw new rr(Vt,t);case 500:throw new rr(Gt,t);case 503:throw new rr(er,t);default:throw new rr(Kt,t)}}return r}const{assign:sr,defineProperty:or,entries:ar}=Object,ir=e=>e.text();let cr,lr=0;const ur=(e="py")=>`${e}-${lr++}`;let pr,fr=e("py-config");fr?pr=fr.getAttribute("src")||fr.textContent:(fr=e('script[type="py"]'),pr=fr?.getAttribute("config")),/^https?:\/\//.test(pr)&&(pr=await nr(pr).then(ir));const dr=({tagName:e})=>"SCRIPT"===e,yr=e=>{or(document,"currentScript",{configurable:!0,get:()=>e})},hr=()=>{delete document.currentScript},mr=async(e,t,r)=>{if(e.hasAttribute("src"))try{return await nr(e.getAttribute("src")).then(ir)}catch(e){t.stderr(e)}return r?e.textContent:(console.warn('Deprecated: use <script type="py"> for an always safe content parsing:\n',e.innerHTML),Dt(e.innerHTML))},gr=(e,t,r,n)=>{dr(t)&&r(t);for(const r of br[n])r(e,t)};let wr=!0;const br={onBeforeRun:new Set,onBeforeRunAync:new Set,onAfterRun:new Set,onAfterRunAsync:new Set,onInterpreterReady:new Set,codeBeforeRunWorker:new Set,codeBeforeRunWorkerAsync:new Set,codeAfterRunWorker:new Set,codeAfterRunWorkerAsync:new Set},vr={codeBeforeRunWorker:()=>[Qt,...br.codeBeforeRunWorker].join("\n"),codeBeforeRunWorkerAsync:()=>[Qt,...br.codeBeforeRunWorkerAsync].join("\n"),codeAfterRunWorker:()=>[...br.codeAfterRunWorker].join("\n"),codeAfterRunWorkerAsync:()=>[...br.codeAfterRunWorkerAsync].join("\n")};((e,r)=>{let n=null==e;if(n)e="_ps"+Ot++;else if(lt.has(e)||Tt.has(e))throw new Error(`<script type="${e}"> already registered`);if(!lt.has(r?.interpreter))throw new Error("Unspecified interpreter");lt.set(e,lt.get(r.interpreter));const s=[`script[type="${e}"]`];if(Ft(e),n){const{onInterpreterReady:t}=r;r={...r,onInterpreterReady(r,n){jt.splice(jt.indexOf(e),1),lt.delete(e),Tt.delete(e),Mt.delete(e),n.remove(),t?.(r)}},document.head.append(Se(document.createElement("script"),{type:e}))}else s.push(`${e}-script`),ft.push(`${e}-`);for(const t of s)$t.set(t,e);jt.push(...s),Tt.set(e,{options:Se({env:e},r),known:new WeakSet}),n||Pt(document),t(s.join(",")).forEach(Wt)})("py",{config:pr,env:"py-script",interpreter:"pyodide",...vr,onWorkerReady(e,t){sr(t.sync,Ht)},onBeforeRun(e,t){cr=t,gr(e,t,yr,"onBeforeRun")},onBeforeRunAync(e,t){cr=t,gr(e,t,yr,"onBeforeRunAync")},onAfterRun(e,t){gr(e,t,hr,"onAfterRun")},onAfterRunAsync(e,t){gr(e,t,hr,"onAfterRunAsync")},async onInterpreterReady(e,t){wr&&(wr=!1,(({XWorker:e,interpreter:t,io:r})=>{t.registerJsModule("_pyscript_js",{PyWorker:function(...t){const n=e(...t);return n.onerror=({error:e})=>r.stderr(e),n},get target(){return dr(cr)?cr.target.id:cr.id}}),t.runPython(Qt,{globals:t.runPython("{}")})})(e));const r=[];for(const[t,n]of ar(Yt))e.config?.plugins?.includes(`!${t}`)||r.push(n());r.length&&await Promise.all(r);for(const r of br.onInterpreterReady)r(e,t);if(dr(t)){const{attributes:{async:r,target:n}}=t,s=!!n?.value,o=s?wt(n.value):document.createElement("script-py");if(!s){const{head:e,body:r}=document;e.contains(t)?r.append(o):t.after(o)}o.id||(o.id=ur()),or(t,"target",{value:o}),e["run"+(r?"Async":"")](await mr(t,e.io,!0))}else t._pyodide.resolve(e);console.debug("[pyscript/main] PyScript Ready")}});class _r extends HTMLElement{constructor(){sr(super(),{_pyodide:Promise.withResolvers(),srcCode:"",executed:!1})}get id(){return super.id||(super.id=ur())}set id(e){super.id=e}async connectedCallback(){if(!this.executed){this.executed=!0;const{io:e,run:t,runAsync:r}=await this._pyodide.promise,n=this.hasAttribute("async")?r:t;this.srcCode=await mr(this,e,!this.childElementCount),this.replaceChildren(),n(this.srcCode),this.style.display="block"}}}function Er(e,t){const r=It.call(new Le(null,vr),e,{...t,type:"pyodide"});return sr(r.sync,Ht),r}customElements.define("py-script",_r);export{Er as PyWorker,br as hooks};
1
+ Promise.withResolvers||(Promise.withResolvers=function(){var e,t,r=new this((function(r,n){e=r,t=n}));return{resolve:e,reject:t,promise:r}});const e=(e,t=document)=>t.querySelector(e),t=(e,t=document)=>[...t.querySelectorAll(e)],r=(e,t=document)=>{const r=(new XPathEvaluator).createExpression(e).evaluate(t,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE),n=[];for(let e=0,{snapshotLength:t}=r;e<t;e++)n.push(r.snapshotItem(e));return n},n="object"==typeof self?self:globalThis,s=e=>((e,t)=>{const r=(t,r)=>(e.set(r,t),t),s=o=>{if(e.has(o))return e.get(o);const[a,i]=t[o];switch(a){case 0:case-1:return r(i,o);case 1:{const e=r([],o);for(const t of i)e.push(s(t));return e}case 2:{const e=r({},o);for(const[t,r]of i)e[s(t)]=s(r);return e}case 3:return r(new Date(i),o);case 4:{const{source:e,flags:t}=i;return r(new RegExp(e,t),o)}case 5:{const e=r(new Map,o);for(const[t,r]of i)e.set(s(t),s(r));return e}case 6:{const e=r(new Set,o);for(const t of i)e.add(s(t));return e}case 7:{const{name:e,message:t}=i;return r(new n[e](t),o)}case 8:return r(BigInt(i),o);case"BigInt":return r(Object(BigInt(i)),o)}return r(new n[a](i),o)};return s})(new Map,e)(0),o="",{toString:a}={},{keys:i}=Object,c=e=>{const t=typeof e;if("object"!==t||!e)return[0,t];const r=a.call(e).slice(8,-1);switch(r){case"Array":return[1,o];case"Object":return[2,o];case"Date":return[3,o];case"RegExp":return[4,o];case"Map":return[5,o];case"Set":return[6,o]}return r.includes("Array")?[1,r]:r.includes("Error")?[7,r]:[2,r]},l=([e,t])=>0===e&&("function"===t||"symbol"===t),u=(e,{json:t,lossy:r}={})=>{const n=[];return((e,t,r,n)=>{const s=(e,t)=>{const s=n.push(e)-1;return r.set(t,s),s},o=n=>{if(r.has(n))return r.get(n);let[a,u]=c(n);switch(a){case 0:{let t=n;switch(u){case"bigint":a=8,t=n.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+u);t=null;break;case"undefined":return s([-1],n)}return s([a,t],n)}case 1:{if(u)return s([u,[...n]],n);const e=[],t=s([a,e],n);for(const t of n)e.push(o(t));return t}case 2:{if(u)switch(u){case"BigInt":return s([u,n.toString()],n);case"Boolean":case"Number":case"String":return s([u,n.valueOf()],n)}if(t&&"toJSON"in n)return o(n.toJSON());const r=[],p=s([a,r],n);for(const t of i(n))!e&&l(c(n[t]))||r.push([o(t),o(n[t])]);return p}case 3:return s([a,n.toISOString()],n);case 4:{const{source:e,flags:t}=n;return s([a,{source:e,flags:t}],n)}case 5:{const t=[],r=s([a,t],n);for(const[r,s]of n)(e||!l(c(r))&&!l(c(s)))&&t.push([o(r),o(s)]);return r}case 6:{const t=[],r=s([a,t],n);for(const r of n)!e&&l(c(r))||t.push(o(r));return r}}const{message:p}=n;return s([a,{name:u,message:p}],n)};return o})(!(t||r),!!t,new Map,n)(e),n},{parse:p,stringify:f}=JSON,d={json:!0,lossy:!0};var y=Object.freeze({__proto__:null,parse:e=>s(p(e)),stringify:e=>f(u(e,d))});const h="891249cd-eb53-4bc8-ae48-b0a5a277d24a",g="M"+h,m="T"+h;var w=e=>({value:new Promise((t=>{let r=new Worker("data:application/javascript,onmessage%3D(%7Bdata%3Ab%7D)%3D%3E(Atomics.wait(b%2C0)%2CpostMessage(0))");r.onmessage=t,r.postMessage(e)}))})
2
+ /*! (c) Andrea Giammarchi - ISC */;const{Int32Array:b,Map:v,SharedArrayBuffer:_,Uint16Array:E}=globalThis,{BYTES_PER_ELEMENT:A}=b,{BYTES_PER_ELEMENT:R}=E,{isArray:k}=Array,{notify:S,wait:P,waitAsync:x}=Atomics,{fromCharCode:j}=String,$=(e,t)=>e?(x||w)(t,0):(P(t,0),{value:{then:e=>e()}}),M=new WeakSet,T=new WeakMap;let W=0;const O=(e,{parse:t,stringify:r,transform:n}=JSON)=>{if(!T.has(e)){const s=(t,...r)=>e.postMessage({[h]:r},{transfer:t});let o=!1;T.set(e,new Proxy(new v,{has:(e,t)=>"string"==typeof t&&!t.startsWith("_"),get:(r,a)=>"then"===a?null:(...r)=>{const i=W++;let c=new b(new _(A)),l=[];M.has(r.at(-1)||l)&&M.delete(l=r.pop()),s(l,i,c,a,n?r.map(n):r);const u=e!==globalThis;let p=0;return o&&u&&(p=setTimeout(console.warn,1e3,`💀🔒 - Possible deadlock if proxy.${a}(...args) is awaited`)),$(u,c).value.then((()=>{clearTimeout(p);const e=c[0];if(!e)return;const r=R*e;return c=new b(new _(r+r%A)),s([],i,c),$(u,c).value.then((()=>t(j(...new E(c.buffer).slice(0,e)))))}))},set(t,n,s){if(!t.size){const n=new v;e.addEventListener("message",(async e=>{const s=e.data?.[h];if(k(s)){e.stopImmediatePropagation();const[a,i,...c]=s;if(c.length){const[e,s]=c;if(!t.has(e))throw new Error(`Unsupported action: ${e}`);o=!0;try{const o=await t.get(e)(...s);if(void 0!==o){const e=r(o);n.set(a,e),i[0]=e.length}}finally{o=!1}}else{const e=n.get(a);n.delete(a);for(let t=new E(i.buffer),r=0;r<e.length;r++)t[r]=e.charCodeAt(r)}S(i,0)}}))}return!!t.set(n,s)}}))}return T.get(e)};O.transfer=(...e)=>(M.add(e),e);const F="object",I="function",B="number",N="string",L="undefined",C="symbol",{defineProperty:J,getOwnPropertyDescriptor:H,getPrototypeOf:D,isExtensible:U,ownKeys:z,preventExtensions:q,set:Q,setPrototypeOf:K}=Reflect,{assign:Y,create:X}=Object,Z=D(Int8Array),G="isArray",V=(e,t)=>{const{get:r,set:n,value:s}=e;return r&&(e.get=t(r)),n&&(e.set=t(n)),s&&(e.value=t(s)),e},ee=(e,t)=>[e,t],te=e=>t=>{const r=typeof t;switch(r){case F:if(null==t)return ee("null",t);if(t===globalThis)return ee(F,null);case I:return e(r,t);case"boolean":case B:case N:case L:case"bigint":return ee(r,t);case C:if(re.has(t))return ee(r,re.get(t))}throw new Error(`Unable to handle this ${r} type`)},re=new Map(z(Symbol).filter((e=>typeof Symbol[e]===C)).map((e=>[Symbol[e],e]))),ne=e=>{for(const[t,r]of re)if(r===e)return t};function se(){return this}const oe="apply",ae="construct",ie="defineProperty",ce="deleteProperty",le="get",ue="getOwnPropertyDescriptor",pe="getPrototypeOf",fe="has",de="isExtensible",ye="ownKeys",he="preventExtensions",ge="set",me="setPrototypeOf",we="delete";var be=((e,t)=>{const r=t&&new WeakMap;if(t){const{addEventListener:e}=EventTarget.prototype;J(EventTarget.prototype,"addEventListener",{value(t,n,...s){return s.at(0)?.invoke&&(r.has(this)||r.set(this,new Map),r.get(this).set(t,[].concat(s[0].invoke)),delete s[0].invoke),e.call(this,t,n,...s)}})}const n=t&&(e=>{const{currentTarget:t,target:n,type:s}=e;for(const o of r.get(t||n)?.get(s)||[])e[o]()});return(r,s,o,...a)=>{let i=0;const c=new Map,l=new Map,{[o]:u}=r,p=a.length?Y(X(globalThis),...a):globalThis,f=te(((e,t)=>{if(!c.has(t)){let e;for(;l.has(e=i++););c.set(t,e),l.set(e,t)}return ee(e,c.get(t))})),d=new FinalizationRegistry((e=>{u(we,ee(N,e))})),y=([e,r])=>{switch(e){case F:if(null==r)return p;if(typeof r===B)return l.get(r);if(!(r instanceof Z))for(const e in r)r[e]=y(r[e]);return r;case I:if(typeof r===N){if(!l.has(r)){const e=function(...e){return t&&e.at(0)instanceof Event&&n(...e),u(oe,ee(I,r),f(this),e.map(f))},s=new WeakRef(e);l.set(r,s),d.register(e,r,s)}return l.get(r).deref()}return l.get(r);case C:return ne(r)}return r},h={[oe]:(e,t,r)=>f(e.apply(t,r)),[ae]:(e,t)=>f(new e(...t)),[ie]:(e,t,r)=>f(J(e,t,r)),[ce]:(e,t)=>f(delete e[t]),[pe]:e=>f(D(e)),[le]:(e,t)=>f(e[t]),[ue]:(e,t)=>{const r=H(e,t);return r?ee(F,V(r,f)):ee(L,r)},[fe]:(e,t)=>f(t in e),[de]:e=>f(U(e)),[ye]:e=>ee(F,z(e).map(f)),[he]:e=>f(q(e)),[ge]:(e,t,r)=>f(Q(e,t,r)),[me]:(e,t)=>f(K(e,t)),[we](e){c.delete(l.get(e)),l.delete(e)}};return r[s]=(e,t,...r)=>{switch(e){case oe:r[0]=y(r[0]),r[1]=r[1].map(y);break;case ae:r[0]=r[0].map(y);break;case ie:{const[e,t]=r;r[0]=y(e);const{get:n,set:s,value:o}=t;n&&(t.get=y(n)),s&&(t.set=y(s)),o&&(t.value=y(o));break}default:r=r.map(y)}return h[e](y(t),...r)},{proxy:r,[e.toLowerCase()]:p,[`is${e}Proxy`]:()=>!1}}})("Window",!0),ve=(e=>{let t=0;const r=new Map,n=new Map,s=Symbol(),o=e=>typeof e===I?e():e,a=e=>typeof e===F&&!!e&&s in e,i=Array[G],c=te(((e,a)=>{if(s in a)return o(a[s]);if(e===I){if(!n.has(a)){let e;for(;n.has(e=String(t++)););r.set(a,e),n.set(e,a)}return ee(e,r.get(a))}if(!(a instanceof Z))for(const e in a)a[e]=c(a[e]);return ee(e,a)}));return(t,l,u)=>{const{[l]:p}=t,f=new Map,d=new FinalizationRegistry((e=>{f.delete(e),p(we,c(e))})),y=e=>{const[t,r]=e;if(!f.has(r)){const n=t===I?se.bind(e):e,s=new Proxy(n,m),o=new WeakRef(s);f.set(r,o),d.register(s,r,o)}return f.get(r).deref()},h=e=>{const[t,r]=e;switch(t){case F:return null===r?globalThis:typeof r===B?y(e):r;case I:return typeof r===N?n.get(r):y(e);case C:return ne(r)}return r},g=(e,t,...r)=>h(p(e,o(t),...r)),m={[oe]:(e,t,r)=>g(oe,e,c(t),r.map(c)),[ae]:(e,t)=>g(ae,e,t.map(c)),[ie]:(e,t,r)=>{const{get:n,set:s,value:o}=r;return typeof n===I&&(r.get=c(n)),typeof s===I&&(r.set=c(s)),typeof o===I&&(r.value=c(o)),g(ie,e,c(t),r)},[ce]:(e,t)=>g(ce,e,c(t)),[pe]:e=>g(pe,e),[le]:(e,t)=>t===s?e:g(le,e,c(t)),[ue]:(e,t)=>{const r=g(ue,e,c(t));return r&&V(r,h)},[fe]:(e,t)=>t===s||g(fe,e,c(t)),[de]:e=>g(de,e),[ye]:e=>g(ye,e).map(h),[he]:e=>g(he,e),[ge]:(e,t,r)=>g(ge,e,c(t),c(r)),[me]:(e,t)=>g(me,e,c(t))};t[u]=(e,t,s,o)=>{switch(e){case oe:return h(t).apply(h(s),o.map(h));case we:{const e=h(t);r.delete(n.get(e)),n.delete(e)}}};const w=new Proxy([F,null],m),b=w.Array[G];return J(Array,G,{value:e=>a(e)?b(e):i(e)}),{[e.toLowerCase()]:w,[`is${e}Proxy`]:a,proxy:t}}})("Window"),_e="function"==typeof Worker?Worker:class{};const Ee=new WeakMap,Ae=(e,...t)=>{const r=O(e,...t);if(!Ee.has(r)){const t=e instanceof _e?be:ve;Ee.set(r,t(r,g,m))}return Ee.get(r)};Ae.transfer=O.transfer;const Re={object(...e){return this.string(function(e){for(var t=e[0],r=1,n=arguments.length;r<n;r++)t+=arguments[r]+e[r];return t}(...e))},string(e){for(const t of e.split(/[\r\n]+/))if(t.trim().length){/^(\s+)/.test(t)&&(e=e.replace(new RegExp("^"+RegExp.$1,"gm"),""));break}return e}},ke=(e,...t)=>Re[typeof e](e,...t),{isArray:Se}=Array,{assign:Pe,create:xe,defineProperties:je,defineProperty:$e,entries:Me}=Object,{all:Te,resolve:We}=new Proxy(Promise,{get:(e,t)=>e[t].bind(e)}),Oe=(e,t=location.href)=>new URL(e,t).href;let Fe=0;const Ie=(e,t)=>({id:e.id||(e.id=`${t}-w${Fe++}`),tag:e.tagName}),Be=e=>e.arrayBuffer(),Ne=e=>e.json(),Le=e=>e.text(),Ce=[["beforeRun","codeBeforeRunWorker"],["beforeRunAsync","codeBeforeRunWorkerAsync"],["afterRun","codeAfterRunWorker"],["afterRunAsync","codeAfterRunWorkerAsync"]];class Je{constructor(e,t){this.interpreter=e,this.onWorkerReady=t.onWorkerReady;for(const[e,r]of Ce)this[e]=t[r]?.()}get stringHooks(){const e={};for(const[t]of Ce)this[t]&&(e[t]=ke(this[t]));return e}}var He=(...e)=>function(t,r){const n=new Worker(URL.createObjectURL(new Blob(['const e="object"==typeof self?self:globalThis,t=t=>((t,r)=>{const n=(e,r)=>(t.set(r,e),e),s=o=>{if(t.has(o))return t.get(o);const[a,i]=r[o];switch(a){case 0:case-1:return n(i,o);case 1:{const e=n([],o);for(const t of i)e.push(s(t));return e}case 2:{const e=n({},o);for(const[t,r]of i)e[s(t)]=s(r);return e}case 3:return n(new Date(i),o);case 4:{const{source:e,flags:t}=i;return n(new RegExp(e,t),o)}case 5:{const e=n(new Map,o);for(const[t,r]of i)e.set(s(t),s(r));return e}case 6:{const e=n(new Set,o);for(const t of i)e.add(s(t));return e}case 7:{const{name:t,message:r}=i;return n(new e[t](r),o)}case 8:return n(BigInt(i),o);case"BigInt":return n(Object(BigInt(i)),o)}return n(new e[a](i),o)};return s})(new Map,t)(0),r="",{toString:n}={},{keys:s}=Object,o=e=>{const t=typeof e;if("object"!==t||!e)return[0,t];const s=n.call(e).slice(8,-1);switch(s){case"Array":return[1,r];case"Object":return[2,r];case"Date":return[3,r];case"RegExp":return[4,r];case"Map":return[5,r];case"Set":return[6,r]}return s.includes("Array")?[1,s]:s.includes("Error")?[7,s]:[2,s]},a=([e,t])=>0===e&&("function"===t||"symbol"===t),i=(e,{json:t,lossy:r}={})=>{const n=[];return((e,t,r,n)=>{const i=(e,t)=>{const s=n.push(e)-1;return r.set(t,s),s},c=n=>{if(r.has(n))return r.get(n);let[l,u]=o(n);switch(l){case 0:{let t=n;switch(u){case"bigint":l=8,t=n.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+u);t=null;break;case"undefined":return i([-1],n)}return i([l,t],n)}case 1:{if(u)return i([u,[...n]],n);const e=[],t=i([l,e],n);for(const t of n)e.push(c(t));return t}case 2:{if(u)switch(u){case"BigInt":return i([u,n.toString()],n);case"Boolean":case"Number":case"String":return i([u,n.valueOf()],n)}if(t&&"toJSON"in n)return c(n.toJSON());const r=[],f=i([l,r],n);for(const t of s(n))!e&&a(o(n[t]))||r.push([c(t),c(n[t])]);return f}case 3:return i([l,n.toISOString()],n);case 4:{const{source:e,flags:t}=n;return i([l,{source:e,flags:t}],n)}case 5:{const t=[],r=i([l,t],n);for(const[r,s]of n)(e||!a(o(r))&&!a(o(s)))&&t.push([c(r),c(s)]);return r}case 6:{const t=[],r=i([l,t],n);for(const r of n)!e&&a(o(r))||t.push(c(r));return r}}const{message:f}=n;return i([l,{name:u,message:f}],n)};return c})(!(t||r),!!t,new Map,n)(e),n},{parse:c,stringify:l}=JSON,u={json:!0,lossy:!0};var f=Object.freeze({__proto__:null,parse:e=>t(c(e)),stringify:e=>l(i(e,u))});const p="891249cd-eb53-4bc8-ae48-b0a5a277d24a",d="M"+p,g="T"+p;var y=e=>({value:new Promise((t=>{let r=new Worker("data:application/javascript,onmessage%3D(%7Bdata%3Ab%7D)%3D%3E(Atomics.wait(b%2C0)%2CpostMessage(0))");r.onmessage=t,r.postMessage(e)}))})\n/*! (c) Andrea Giammarchi - ISC */;const{Int32Array:w,Map:h,SharedArrayBuffer:m,Uint16Array:b}=globalThis,{BYTES_PER_ELEMENT:v}=w,{BYTES_PER_ELEMENT:S}=b,{isArray:P}=Array,{notify:E,wait:A,waitAsync:M}=Atomics,{fromCharCode:$}=String,j=(e,t)=>e?(M||y)(t,0):(A(t,0),{value:{then:e=>e()}}),k=new WeakSet,x=new WeakMap;let T=0;const _=(e,{parse:t,stringify:r,transform:n}=JSON)=>{if(!x.has(e)){const s=(t,...r)=>e.postMessage({[p]:r},{transfer:t});let o=!1;x.set(e,new Proxy(new h,{has:(e,t)=>"string"==typeof t&&!t.startsWith("_"),get:(r,a)=>"then"===a?null:(...r)=>{const i=T++;let c=new w(new m(v)),l=[];k.has(r.at(-1)||l)&&k.delete(l=r.pop()),s(l,i,c,a,n?r.map(n):r);const u=e!==globalThis;let f=0;return o&&u&&(f=setTimeout(console.warn,1e3,`💀🔒 - Possible deadlock if proxy.${a}(...args) is awaited`)),j(u,c).value.then((()=>{clearTimeout(f);const e=c[0];if(!e)return;const r=S*e;return c=new w(new m(r+r%v)),s([],i,c),j(u,c).value.then((()=>t($(...new b(c.buffer).slice(0,e)))))}))},set(t,n,s){if(!t.size){const n=new h;e.addEventListener("message",(async e=>{const s=e.data?.[p];if(P(s)){e.stopImmediatePropagation();const[a,i,...c]=s;if(c.length){const[e,s]=c;if(!t.has(e))throw new Error(`Unsupported action: ${e}`);o=!0;try{const o=await t.get(e)(...s);if(void 0!==o){const e=r(o);n.set(a,e),i[0]=e.length}}finally{o=!1}}else{const e=n.get(a);n.delete(a);for(let t=new b(i.buffer),r=0;r<e.length;r++)t[r]=e.charCodeAt(r)}E(i,0)}}))}return!!t.set(n,s)}}))}return x.get(e)};_.transfer=(...e)=>(k.add(e),e);const O="object",F="function",W="number",R="string",B="undefined",J="symbol",{defineProperty:I,getOwnPropertyDescriptor:L,getPrototypeOf:C,isExtensible:H,ownKeys:D,preventExtensions:N,set:U,setPrototypeOf:z}=Reflect,{assign:q,create:K}=Object,Y=C(Int8Array),G="isArray",V=(e,t)=>{const{get:r,set:n,value:s}=e;return r&&(e.get=t(r)),n&&(e.set=t(n)),s&&(e.value=t(s)),e},Q=(e,t)=>[e,t],X=e=>t=>{const r=typeof t;switch(r){case O:if(null==t)return Q("null",t);if(t===globalThis)return Q(O,null);case F:return e(r,t);case"boolean":case W:case R:case B:case"bigint":return Q(r,t);case J:if(Z.has(t))return Q(r,Z.get(t))}throw new Error(`Unable to handle this ${r} type`)},Z=new Map(D(Symbol).filter((e=>typeof Symbol[e]===J)).map((e=>[Symbol[e],e]))),ee=e=>{for(const[t,r]of Z)if(r===e)return t};function te(){return this}const re="apply",ne="construct",se="defineProperty",oe="deleteProperty",ae="get",ie="getOwnPropertyDescriptor",ce="getPrototypeOf",le="has",ue="isExtensible",fe="ownKeys",pe="preventExtensions",de="set",ge="setPrototypeOf",ye="delete";var we=((e,t)=>{const r=t&&new WeakMap;if(t){const{addEventListener:e}=EventTarget.prototype;I(EventTarget.prototype,"addEventListener",{value(t,n,...s){return s.at(0)?.invoke&&(r.has(this)||r.set(this,new Map),r.get(this).set(t,[].concat(s[0].invoke)),delete s[0].invoke),e.call(this,t,n,...s)}})}const n=t&&(e=>{const{currentTarget:t,target:n,type:s}=e;for(const o of r.get(t||n)?.get(s)||[])e[o]()});return(r,s,o,...a)=>{let i=0;const c=new Map,l=new Map,{[o]:u}=r,f=a.length?q(K(globalThis),...a):globalThis,p=X(((e,t)=>{if(!c.has(t)){let e;for(;l.has(e=i++););c.set(t,e),l.set(e,t)}return Q(e,c.get(t))})),d=new FinalizationRegistry((e=>{u(ye,Q(R,e))})),g=([e,r])=>{switch(e){case O:if(null==r)return f;if(typeof r===W)return l.get(r);if(!(r instanceof Y))for(const e in r)r[e]=g(r[e]);return r;case F:if(typeof r===R){if(!l.has(r)){const e=function(...e){return t&&e.at(0)instanceof Event&&n(...e),u(re,Q(F,r),p(this),e.map(p))},s=new WeakRef(e);l.set(r,s),d.register(e,r,s)}return l.get(r).deref()}return l.get(r);case J:return ee(r)}return r},y={[re]:(e,t,r)=>p(e.apply(t,r)),[ne]:(e,t)=>p(new e(...t)),[se]:(e,t,r)=>p(I(e,t,r)),[oe]:(e,t)=>p(delete e[t]),[ce]:e=>p(C(e)),[ae]:(e,t)=>p(e[t]),[ie]:(e,t)=>{const r=L(e,t);return r?Q(O,V(r,p)):Q(B,r)},[le]:(e,t)=>p(t in e),[ue]:e=>p(H(e)),[fe]:e=>Q(O,D(e).map(p)),[pe]:e=>p(N(e)),[de]:(e,t,r)=>p(U(e,t,r)),[ge]:(e,t)=>p(z(e,t)),[ye](e){c.delete(l.get(e)),l.delete(e)}};return r[s]=(e,t,...r)=>{switch(e){case re:r[0]=g(r[0]),r[1]=r[1].map(g);break;case ne:r[0]=r[0].map(g);break;case se:{const[e,t]=r;r[0]=g(e);const{get:n,set:s,value:o}=t;n&&(t.get=g(n)),s&&(t.set=g(s)),o&&(t.value=g(o));break}default:r=r.map(g)}return y[e](g(t),...r)},{proxy:r,[e.toLowerCase()]:f,[`is${e}Proxy`]:()=>!1}}})("Window",!0),he=(e=>{let t=0;const r=new Map,n=new Map,s=Symbol(),o=e=>typeof e===F?e():e,a=e=>typeof e===O&&!!e&&s in e,i=Array[G],c=X(((e,a)=>{if(s in a)return o(a[s]);if(e===F){if(!n.has(a)){let e;for(;n.has(e=String(t++)););r.set(a,e),n.set(e,a)}return Q(e,r.get(a))}if(!(a instanceof Y))for(const e in a)a[e]=c(a[e]);return Q(e,a)}));return(t,l,u)=>{const{[l]:f}=t,p=new Map,d=new FinalizationRegistry((e=>{p.delete(e),f(ye,c(e))})),g=e=>{const[t,r]=e;if(!p.has(r)){const n=t===F?te.bind(e):e,s=new Proxy(n,h),o=new WeakRef(s);p.set(r,o),d.register(s,r,o)}return p.get(r).deref()},y=e=>{const[t,r]=e;switch(t){case O:return null===r?globalThis:typeof r===W?g(e):r;case F:return typeof r===R?n.get(r):g(e);case J:return ee(r)}return r},w=(e,t,...r)=>y(f(e,o(t),...r)),h={[re]:(e,t,r)=>w(re,e,c(t),r.map(c)),[ne]:(e,t)=>w(ne,e,t.map(c)),[se]:(e,t,r)=>{const{get:n,set:s,value:o}=r;return typeof n===F&&(r.get=c(n)),typeof s===F&&(r.set=c(s)),typeof o===F&&(r.value=c(o)),w(se,e,c(t),r)},[oe]:(e,t)=>w(oe,e,c(t)),[ce]:e=>w(ce,e),[ae]:(e,t)=>t===s?e:w(ae,e,c(t)),[ie]:(e,t)=>{const r=w(ie,e,c(t));return r&&V(r,y)},[le]:(e,t)=>t===s||w(le,e,c(t)),[ue]:e=>w(ue,e),[fe]:e=>w(fe,e).map(y),[pe]:e=>w(pe,e),[de]:(e,t,r)=>w(de,e,c(t),c(r)),[ge]:(e,t)=>w(ge,e,c(t))};t[u]=(e,t,s,o)=>{switch(e){case re:return y(t).apply(y(s),o.map(y));case ye:{const e=y(t);r.delete(n.get(e)),n.delete(e)}}};const m=new Proxy([O,null],h),b=m.Array[G];return I(Array,G,{value:e=>a(e)?b(e):i(e)}),{[e.toLowerCase()]:m,[`is${e}Proxy`]:a,proxy:t}}})("Window"),me="function"==typeof Worker?Worker:class{};const be=new WeakMap,ve=(e,...t)=>{const r=_(e,...t);if(!be.has(r)){const t=e instanceof me?we:he;be.set(r,t(r,d,g))}return be.get(r)};ve.transfer=_.transfer;const Se={object(...e){return this.string(function(e){for(var t=e[0],r=1,n=arguments.length;r<n;r++)t+=arguments[r]+e[r];return t}(...e))},string(e){for(const t of e.split(/[\\r\\n]+/))if(t.trim().length){/^(\\s+)/.test(t)&&(e=e.replace(new RegExp("^"+RegExp.$1,"gm"),""));break}return e}},Pe=(e,...t)=>Se[typeof e](e,...t),{isArray:Ee}=Array,{assign:Ae,create:Me,defineProperties:$e,defineProperty:je,entries:ke}=Object,{all:xe,resolve:Te}=new Proxy(Promise,{get:(e,t)=>e[t].bind(e)}),_e=(e,t=location.href)=>new URL(e,t).href;Promise.withResolvers||(Promise.withResolvers=function(){var e,t,r=new this((function(r,n){e=r,t=n}));return{resolve:e,reject:t,promise:r}});const Oe=e=>e.arrayBuffer(),Fe=e=>e.json(),We=e=>e.text(),Re=new WeakMap,Be=e=>{const t=e||console,r={stderr:(t.stderr||console.error).bind(t),stdout:(t.stdout||console.log).bind(t)};return{stderr:(...e)=>r.stderr(...e),stdout:(...e)=>r.stdout(...e),async get(e){const t=await e;return Re.set(t,r),t}}},Je=({FS:e,PATH:t,PATH_FS:r},n,s)=>{const o=r.resolve(n);return e.mkdirTree(t.dirname(o)),e.writeFile(o,new Uint8Array(s),{canOwn:!0})},Ie=e=>{const t=e.split("/");return t.pop(),t.join("/")},Le=(e,t)=>{const r=[];for(const n of t.split("/"))"."!==n&&(r.push(n),n&&e.mkdir(r.join("/")))},Ce=(e,t)=>{const r=[];for(const e of t.split("/"))switch(e){case"":case".":break;case"..":r.pop();break;default:r.push(e)}return[e.cwd()].concat(r).join("/").replace(/^\\/+/,"/")},He=e=>{const t=e.map((e=>e.trim().replace(/(^[/]*|[/]*$)/g,""))).filter((e=>""!==e&&"."!==e)).join("/");return e[0].startsWith("/")?`/${t}`:t},De=new WeakMap,Ne=(e,t,r)=>xe((e=>{for(const{files:t,to_file:r,from:n=""}of e){if(void 0!==t&&void 0!==r)throw new Error("Cannot use \'to_file\' and \'files\' parameters together!");if(void 0===t&&void 0===r&&n.endsWith("/"))throw new Error(`Couldn\'t determine the filename from the path ${n}, please supply \'to_file\' parameter.`)}return e.flatMap((({from:e="",to_folder:t=".",to_file:r,files:n})=>{if(Ee(n))return n.map((r=>({url:He([e,r]),path:He([t,r])})));const s=r||e.slice(1+e.lastIndexOf("/"));return[{url:e,path:He([t,s])}]}))})(r).map((({url:n,path:s})=>((e,t)=>fetch(_e(t,De.get(e))))(r,n).then(Oe).then((r=>e.writeFile(t,s,r)))))),Ue=(e,t,r)=>{e.registerJsModule(t,r)},ze=(e,t,...r)=>{try{return e.runPython(Pe(t),...r)}catch(t){Re.get(e).stderr(t)}},qe=async(e,t,...r)=>{try{return await e.runPythonAsync(Pe(t),...r)}catch(t){Re.get(e).stderr(t)}},Ke=async(e,t,r)=>{const[n,...s]=t.split(".");let o,a=e.globals.get(n);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,r)}catch(t){Re.get(e).stderr(t)}};var Ye={type:"micropython",module:(e="1.20.0-297")=>`https://cdn.jsdelivr.net/npm/@micropython/micropython-webassembly-pyscript@${e}/micropython.mjs`,async engine({loadMicroPython:e},t,r){const{stderr:n,stdout:s,get:o}=Be();r=r.replace(/\\.m?js$/,".wasm");const a=await o(e({stderr:n,stdout:s,url:r}));return t.fetch&&await Ne(this,a,t.fetch),a},registerJSModule:Ue,run:ze,runAsync:qe,runEvent:Ke,transform:(e,t)=>t,writeFile:({FS:e,_module:{PATH:t,PATH_FS:r}},n,s)=>Je({FS:e,PATH:t,PATH_FS:r},n,s)};const Ge={dict_converter:Object.fromEntries};var Ve={type:"pyodide",module:(e="0.23.4")=>`https://cdn.jsdelivr.net/pyodide/v${e}/full/pyodide.mjs`,async engine({loadPyodide:e},t,r){const{stderr:n,stdout:s,get:o}=Be(),a=r.slice(0,r.lastIndexOf("/")),i=await o(e({stderr:n,stdout:s,indexURL:a}));if(t.fetch&&await Ne(this,i,t.fetch),t.packages){await i.loadPackage("micropip");const e=await i.pyimport("micropip");await e.install(t.packages),e.destroy()}return i},registerJSModule:Ue,run:ze,runAsync:qe,runEvent:Ke,transform:(e,t)=>t instanceof e.ffi.PyProxy?t.toJs(Ge):t,writeFile:({FS:e,PATH:t,_module:{PATH_FS:r}},n,s)=>Je({FS:e,PATH:t,PATH_FS:r},n,s)};const Qe="ruby-wasm-wasi",Xe=Qe.replace(/\\W+/g,"_");var Ze={type:Qe,experimental:!0,module:(e="2.0.0")=>`https://cdn.jsdelivr.net/npm/ruby-3_2-wasm-wasi@${e}/dist/browser.esm.js`,async engine({DefaultRubyVM:e},t,r){const n=await fetch(`${r.slice(0,r.lastIndexOf("/"))}/ruby.wasm`),s=await WebAssembly.compile(await n.arrayBuffer()),{vm:o}=await e(s);return t.fetch&&await Ne(this,o,t.fetch),o},registerJSModule(e,t,r){const n=`__module_${Xe}_${t}`;globalThis[n]=r,this.run(e,`require "js";$${t}=JS.global[:${n}]`),delete globalThis[n]},run:(e,t,...r)=>e.eval(Pe(t),...r),runAsync:(e,t,...r)=>e.evalAsync(Pe(t),...r),async runEvent(e,t,r){if(/^xworker\\.(on\\w+)$/.test(t)){const{$1:t}=RegExp,n=`__module_${Xe}_event`;globalThis[n]=r,this.run(e,`require "js";$xworker.call("${t}",JS.global[:${n}])`),delete globalThis[n]}else{const n=this.run(e,`method(:${t})`);await n.call(t,e.wrap(r))}},transform:(e,t)=>t,writeFile:()=>{throw new Error(`writeFile is not supported in ${Qe}`)}};var et={type:"wasmoon",module:(e="1.15.0")=>`https://cdn.jsdelivr.net/npm/wasmoon@${e}/+esm`,async engine({LuaFactory:e,LuaLibraries:t},r){const{stderr:n,stdout:s,get:o}=Be(),a=await o((new e).createEngine());return a.global.getTable(t.Base,(e=>{a.global.setField(e,"print",s),a.global.setField(e,"printErr",n)})),r.fetch&&await Ne(this,a,r.fetch),a},registerJSModule:(e,t,r)=>{e.global.set(t,r)},run:(e,t,...r)=>{try{return e.doStringSync(Pe(t),...r)}catch(t){Re.get(e).stderr(t)}},runAsync:async(e,t,...r)=>{try{return await e.doString(Pe(t),...r)}catch(t){Re.get(e).stderr(t)}},runEvent:async(e,t,r)=>{const[n,...s]=t.split(".");let o,a=e.global.get(n);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,r)}catch(t){Re.get(e).stderr(t)}},transform:(e,t)=>t,writeFile:({cmodule:{module:{FS:e}}},t,r)=>((e,t,r)=>(Le(e,Ie(t)),t=Ce(e,t),e.writeFile(t,new Uint8Array(r),{canOwn:!0})))(e,t,r)};const tt=new Map,rt=new Map,nt=new Proxy(new Map,{get(e,t){if(!e.has(t)){const[r,...n]=t.split("@"),s=tt.get(r),o=/^https?:\\/\\//i.test(n)?n.join("@"):s.module(...n);e.set(t,{url:o,module:import(o),engine:s.engine.bind(s)})}const{url:r,module:n,engine:s}=e.get(t);return(e,o)=>n.then((n=>{rt.set(t,e);const a=e?.fetch;return a&&De.set(a,o),s(n,e,r)}))}}),st=e=>{for(const t of[].concat(e.type))tt.set(t,e)};for(const e of[Ye,Ve,Ze,et])st(e);const ot=async e=>(await import("https://cdn.jsdelivr.net/npm/basic-toml@0.3.1/es.js")).parse(e);try{new SharedArrayBuffer(4)}catch(e){throw new Error(["Unable to use SharedArrayBuffer due insecure environment.","Please read requirements in MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer#security_requirements"].join("\\n"))}let at,it,ct;const lt=(e,t)=>{addEventListener(e,t||(async t=>{try{await at,it(`xworker.on${e}`,t)}catch(e){postMessage(e)}}),!!t&&{once:!0})},{parse:ut,stringify:ft}=f,{proxy:pt,window:dt,isWindowProxy:gt}=ve(self,{parse:ut,stringify:ft,transform:e=>ct?ct(e):e}),yt={sync:pt,window:dt,isWindowProxy:gt,onmessage:console.info,onerror:console.error,onmessageerror:console.warn,postMessage:postMessage.bind(self)};lt("message",(({data:{options:e,config:t,code:r,hooks:n}})=>{at=(async()=>{try{const{id:s,tag:o,type:a,custom:i,version:c,config:l,async:u}=e,f=await((e,t,r={})=>{if(t)if(t.endsWith(".json"))r=fetch(t).then(Fe),t=_e(t);else if(t.endsWith(".toml"))r=fetch(t).then(We).then(ot),t=_e(t);else if(!t.endsWith(".txt")){try{r=JSON.parse(t)}catch(e){r=ot(t)}t=_e("./config.txt")}return Te(r).then((r=>nt[e](r,t)))})(((e,t="")=>`${e}@${t}`.replace(/@$/,""))(a,c),t,l),p=Me(tt.get(a)),d="run"+(u?"Async":"");if(n){const{beforeRun:e,beforeRunAsync:t,afterRun:r,afterRunAsync:s}=n,o=r||s,a=e||t;if(o){const e=p[d].bind(p);p[d]=(t,r,...n)=>e(t,`${r}\\n${o}`,...n)}if(a){const e=p[d].bind(p);p[d]=(t,r,...n)=>e(t,`${a}\\n${r}`,...n)}}let g="";return p.registerJSModule(f,"polyscript",{xworker:yt,get target(){if(!g){const{document:e}=yt.window,t=e.getElementById(s);"SCRIPT"===o?t.after(Ae(e.createElement(`script-${i||a}`),{id:g=`${s}-target`})):(g=s,t.replaceChildren(),t.style.display="block")}return g}}),it=p.runEvent.bind(p,f),ct=p.transform.bind(p,f),await p[d](f,r),f}catch(e){postMessage(e)}})(),lt("error"),lt("message"),lt("messageerror")}));\n'],{type:"application/javascript"})),{type:"module"}),{postMessage:s}=n,o=this instanceof Je;if(e.length){const[t,n]=e;(r=Pe({},r||{type:t,version:n})).type||(r.type=t)}const{config:a}=r,i=Oe(a&&"string"==typeof a?a:"./config.txt"),c=fetch(t).then(Le).then((e=>{const t=o?this.stringHooks:void 0;s.call(n,{options:r,config:i,code:e,hooks:t})}));return je(n,{postMessage:{value:(e,...t)=>c.then((()=>s.call(n,e,...t)))},sync:{value:Ae(n,y).proxy},onerror:{writable:!0,configurable:!0,value:console.error}}),o&&this.onWorkerReady?.(this.interpreter,n),n.addEventListener("message",(e=>{const{data:t}=e;t instanceof Error&&(e.stopImmediatePropagation(),n.onerror(Object.create(e,{type:{value:"error"},error:{value:t}})))})),n},De=e=>{const{worker:t}=e.attributes;if(t){let{value:r}=t;if(!r){if(e.childElementCount){const{innerHTML:t,localName:n,type:s}=e,o=s||n.replace(/-script$/,"");console.warn(`Deprecated: use <script type="${o}"> for an always safe content parsing:\n`,t),r=t}else r=e.textContent;return URL.createObjectURL(new Blob([ke(r)],{type:"text/plain"}))}return r}};const Ue=new WeakMap,ze=e=>{const t=e||console,r={stderr:(t.stderr||console.error).bind(t),stdout:(t.stdout||console.log).bind(t)};return{stderr:(...e)=>r.stderr(...e),stdout:(...e)=>r.stdout(...e),async get(e){const t=await e;return Ue.set(t,r),t}}},qe=({FS:e,PATH:t,PATH_FS:r},n,s)=>{const o=r.resolve(n);return e.mkdirTree(t.dirname(o)),e.writeFile(o,new Uint8Array(s),{canOwn:!0})},Qe=e=>{const t=e.split("/");return t.pop(),t.join("/")},Ke=(e,t)=>{const r=[];for(const n of t.split("/"))"."!==n&&(r.push(n),n&&e.mkdir(r.join("/")))},Ye=(e,t)=>{const r=[];for(const e of t.split("/"))switch(e){case"":case".":break;case"..":r.pop();break;default:r.push(e)}return[e.cwd()].concat(r).join("/").replace(/^\/+/,"/")},Xe=e=>{const t=e.map((e=>e.trim().replace(/(^[/]*|[/]*$)/g,""))).filter((e=>""!==e&&"."!==e)).join("/");return e[0].startsWith("/")?`/${t}`:t},Ze=new WeakMap,Ge=(e,t,r)=>Te((e=>{for(const{files:t,to_file:r,from:n=""}of e){if(void 0!==t&&void 0!==r)throw new Error("Cannot use 'to_file' and 'files' parameters together!");if(void 0===t&&void 0===r&&n.endsWith("/"))throw new Error(`Couldn't determine the filename from the path ${n}, please supply 'to_file' parameter.`)}return e.flatMap((({from:e="",to_folder:t=".",to_file:r,files:n})=>{if(Se(n))return n.map((r=>({url:Xe([e,r]),path:Xe([t,r])})));const s=r||e.slice(1+e.lastIndexOf("/"));return[{url:e,path:Xe([t,s])}]}))})(r).map((({url:n,path:s})=>((e,t)=>fetch(Oe(t,Ze.get(e))))(r,n).then(Be).then((r=>e.writeFile(t,s,r)))))),Ve=(e,t,r)=>{e.registerJsModule(t,r)},et=(e,t,...r)=>{try{return e.runPython(ke(t),...r)}catch(t){Ue.get(e).stderr(t)}},tt=async(e,t,...r)=>{try{return await e.runPythonAsync(ke(t),...r)}catch(t){Ue.get(e).stderr(t)}},rt=async(e,t,r)=>{const[n,...s]=t.split(".");let o,a=e.globals.get(n);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,r)}catch(t){Ue.get(e).stderr(t)}};var nt={type:"micropython",module:(e="1.20.0-297")=>`https://cdn.jsdelivr.net/npm/@micropython/micropython-webassembly-pyscript@${e}/micropython.mjs`,async engine({loadMicroPython:e},t,r){const{stderr:n,stdout:s,get:o}=ze();r=r.replace(/\.m?js$/,".wasm");const a=await o(e({stderr:n,stdout:s,url:r}));return t.fetch&&await Ge(this,a,t.fetch),a},registerJSModule:Ve,run:et,runAsync:tt,runEvent:rt,transform:(e,t)=>t,writeFile:({FS:e,_module:{PATH:t,PATH_FS:r}},n,s)=>qe({FS:e,PATH:t,PATH_FS:r},n,s)};const st={dict_converter:Object.fromEntries};var ot={type:"pyodide",module:(e="0.23.4")=>`https://cdn.jsdelivr.net/pyodide/v${e}/full/pyodide.mjs`,async engine({loadPyodide:e},t,r){const{stderr:n,stdout:s,get:o}=ze(),a=r.slice(0,r.lastIndexOf("/")),i=await o(e({stderr:n,stdout:s,indexURL:a}));if(t.fetch&&await Ge(this,i,t.fetch),t.packages){await i.loadPackage("micropip");const e=await i.pyimport("micropip");await e.install(t.packages),e.destroy()}return i},registerJSModule:Ve,run:et,runAsync:tt,runEvent:rt,transform:(e,t)=>t instanceof e.ffi.PyProxy?t.toJs(st):t,writeFile:({FS:e,PATH:t,_module:{PATH_FS:r}},n,s)=>qe({FS:e,PATH:t,PATH_FS:r},n,s)};const at="ruby-wasm-wasi",it=at.replace(/\W+/g,"_");var ct={type:at,experimental:!0,module:(e="2.0.0")=>`https://cdn.jsdelivr.net/npm/ruby-3_2-wasm-wasi@${e}/dist/browser.esm.js`,async engine({DefaultRubyVM:e},t,r){const n=await fetch(`${r.slice(0,r.lastIndexOf("/"))}/ruby.wasm`),s=await WebAssembly.compile(await n.arrayBuffer()),{vm:o}=await e(s);return t.fetch&&await Ge(this,o,t.fetch),o},registerJSModule(e,t,r){const n=`__module_${it}_${t}`;globalThis[n]=r,this.run(e,`require "js";$${t}=JS.global[:${n}]`),delete globalThis[n]},run:(e,t,...r)=>e.eval(ke(t),...r),runAsync:(e,t,...r)=>e.evalAsync(ke(t),...r),async runEvent(e,t,r){if(/^xworker\.(on\w+)$/.test(t)){const{$1:t}=RegExp,n=`__module_${it}_event`;globalThis[n]=r,this.run(e,`require "js";$xworker.call("${t}",JS.global[:${n}])`),delete globalThis[n]}else{const n=this.run(e,`method(:${t})`);await n.call(t,e.wrap(r))}},transform:(e,t)=>t,writeFile:()=>{throw new Error(`writeFile is not supported in ${at}`)}};var lt={type:"wasmoon",module:(e="1.15.0")=>`https://cdn.jsdelivr.net/npm/wasmoon@${e}/+esm`,async engine({LuaFactory:e,LuaLibraries:t},r){const{stderr:n,stdout:s,get:o}=ze(),a=await o((new e).createEngine());return a.global.getTable(t.Base,(e=>{a.global.setField(e,"print",s),a.global.setField(e,"printErr",n)})),r.fetch&&await Ge(this,a,r.fetch),a},registerJSModule:(e,t,r)=>{e.global.set(t,r)},run:(e,t,...r)=>{try{return e.doStringSync(ke(t),...r)}catch(t){Ue.get(e).stderr(t)}},runAsync:async(e,t,...r)=>{try{return await e.doString(ke(t),...r)}catch(t){Ue.get(e).stderr(t)}},runEvent:async(e,t,r)=>{const[n,...s]=t.split(".");let o,a=e.global.get(n);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,r)}catch(t){Ue.get(e).stderr(t)}},transform:(e,t)=>t,writeFile:({cmodule:{module:{FS:e}}},t,r)=>((e,t,r)=>(Ke(e,Qe(t)),t=Ye(e,t),e.writeFile(t,new Uint8Array(r),{canOwn:!0})))(e,t,r)};const ut=new Map,pt=new Map,ft=[],dt=[],yt=new Proxy(new Map,{get(e,t){if(!e.has(t)){const[r,...n]=t.split("@"),s=ut.get(r),o=/^https?:\/\//i.test(n)?n.join("@"):s.module(...n);e.set(t,{url:o,module:import(o),engine:s.engine.bind(s)})}const{url:r,module:n,engine:s}=e.get(t);return(e,o)=>n.then((n=>{pt.set(t,e);const a=e?.fetch;return a&&Ze.set(a,o),s(n,e,r)}))}}),ht=e=>{for(const t of[].concat(e.type))ut.set(t,e),ft.push(`script[type="${t}"]`),dt.push(`${t}-`)};for(const e of[nt,ot,ct,lt])ht(e);const gt=async e=>(await import("https://cdn.jsdelivr.net/npm/basic-toml@0.3.1/es.js")).parse(e),mt=(e,t,r={})=>{if(t)if(t.endsWith(".json"))r=fetch(t).then(Ne),t=Oe(t);else if(t.endsWith(".toml"))r=fetch(t).then(Le).then(gt),t=Oe(t);else if(!t.endsWith(".txt")){try{r=JSON.parse(t)}catch(e){r=gt(t)}t=Oe("./config.txt")}return We(r).then((r=>yt[e](r,t)))},wt=(e,t="")=>`${e}@${t}`.replace(/@$/,""),bt=(t,r)=>{const n=(e=>{let t=e;for(;t.parentNode;)t=t.parentNode;return t})(t);return n.getElementById(r)||e(r,n)},vt=new WeakMap,_t={get(){let e=vt.get(this);return e||(e=document.createElement(`${this.type}-script`),vt.set(this,e),St(this)),e},set(e){"string"==typeof e?vt.set(this,bt(this,e)):(vt.set(this,e),St(this))}},Et=new WeakMap,At=new Map,Rt=(e,t)=>{const r=e?.value;return r?t+r:""},kt=(e,t,r,n,s,o=e)=>{if(!At.has(t)){const a={interpreter:mt(r,s),queue:We(),XWorker:He(e,n)};At.set(t,a),At.has(e)||At.set(e,a),At.has(o)||At.set(o,a)}return At.get(t)},St=async e=>{if(Et.has(e)){const{target:t}=e;t&&(e.closest("head")?document.body.append(t):e.after(t))}else{const{attributes:{async:t,config:r,env:n,target:s,version:o},src:a,type:i}=e,c=o?.value,l=wt(i,c);let u=Rt(r,"|");const p=Rt(n,"")||`${l}${u}`;u=u.slice(1);const f=De(e);if(f){const r=new(He(i,c))(f,{...Ie(e,i),async:!!t,config:u});return void Et.set($e(e,"xworker",{value:r}),{xworker:r})}const d=Rt(s,""),y=kt(i,p,l,c,u);Et.set($e(e,"target",_t),y),d&&vt.set(e,bt(e,d));const h=a?fetch(a).then(Le):e.textContent;y.queue=y.queue.then((()=>(async(e,t,r,n)=>{const s=ut.get(e.type);s.experimental&&console.warn(`The ${e.type} interpreter is experimental`);const[o,a]=await Te([Et.get(e).interpreter,t]);try{return $e(document,"currentScript",{configurable:!0,get:()=>e}),s.registerJSModule(o,"polyscript",{XWorker:r}),s[n?"runAsync":"run"](o,a)}finally{delete document.currentScript}})(e,h,y.XWorker,!!t)))}};new Proxy(xe(null),{get:(e,t)=>Pt(t)});const Pt=async e=>{if(At.has(e)){const{interpreter:t,queue:r}=At.get(e);return(await Te([t,r]))[0]}const t=At.size?`Available interpreters are: ${[...At.keys()].map((e=>`"${e}"`)).join(", ")}.`:"There are no interpreters in this page.";throw new Error(`The interpreter "${e}" was not found. ${t}`)},xt=async e=>{const{type:t,currentTarget:n}=e;for(let{name:s,value:o,ownerElement:a}of r(`./@*[${dt.map((e=>`name()="${e}${t}"`)).join(" or ")}]`,n)){s=s.slice(0,-(t.length+1));const r=await Pt(a.getAttribute(`${s}-env`)||s);ut.get(s).runEvent(r,o,e)}},jt=e=>{for(let{name:t,ownerElement:n}of r(`.//@*[${dt.map((e=>`starts-with(name(),"${e}")`)).join(" or ")}]`,e))t=t.slice(t.lastIndexOf("-")+1),"env"!==t&&n.addEventListener(t,xt)},$t=[],Mt=new Map,Tt=new Map,Wt=e=>{for(const t of $t)if(e.matches(t)){const r=Mt.get(t),{resolve:n}=Tt.get(r),{options:s,known:o}=Ot.get(r);if(!o.has(e)){o.add(e);const{interpreter:t,config:a,version:i,env:c,onInterpreterReady:l}=s,u=De(e);if(u){const o=Bt.call(new Je(null,s),u,{...Ie(e,r),version:i,type:t,custom:r,config:a||{},async:e.hasAttribute("async")});return $e(e,"xworker",{value:o}),void n({type:r,xworker:o})}const p=wt(t,i),f=c||`${p}${a?`|${a}`:""}`,{interpreter:d,XWorker:y}=kt(r,f,p,i,a,t);d.then((o=>{const a=xe(ut.get(t)),{onBeforeRun:i,onBeforeRunAsync:c,onAfterRun:u,onAfterRunAsync:f}=s,d=new Je(o,s),h=function(...e){return y.apply(d,e)};for(const[t,[r,n]]of[["run",[i,u]]]){const s=a[t];a[t]=function(t,o,...a){r&&r.call(this,g,e);const i=s.call(this,t,o,...a);return n&&n.call(this,g,e),i}}for(const[t,[r,n]]of[["runAsync",[c,f]]]){const s=a[t];a[t]=async function(t,o,...a){r&&await r.call(this,g,e);const i=await s.call(this,t,o,...a);return n&&await n.call(this,g,e),i}}a.registerJSModule(o,"polyscript",{XWorker:h});const g={type:r,interpreter:o,XWorker:h,io:Ue.get(o),config:structuredClone(pt.get(p)),run:a.run.bind(a,o),runAsync:a.runAsync.bind(a,o),runEvent:a.runEvent.bind(a,o)};n(g),l?.(g,e)}))}}},Ot=new Map;let Ft=0;const It=e=>(Tt.has(e)||Tt.set(e,Promise.withResolvers()),Tt.get(e).promise),Bt=He(),Nt=ft.join(","),Lt=new MutationObserver((e=>{for(const{type:r,target:n,attributeName:s,addedNodes:o}of e)if("attributes"!==r){for(const e of o)if(1===e.nodeType)if(jt(e),e.matches(Nt))St(e);else{if(t(Nt,e).forEach(St),!$t.length)continue;Wt(e),t($t.join(","),e).forEach(Wt)}}else{const e=s.lastIndexOf("-")+1;if(e){const t=s.slice(0,e);for(const r of dt)if(t===r){const t=s.slice(e);if("env"!==t){const e=n.hasAttribute(s)?"add":"remove";n[`${e}EventListener`](t,xt)}break}}}})),Ct=e=>(Lt.observe(e,{childList:!0,subtree:!0,attributes:!0}),e),{attachShadow:Jt}=Element.prototype;Pe(Element.prototype,{attachShadow(e){return Ct(Jt.call(this,e))}}),jt(Ct(document)),t(Nt,document).forEach(St);var Ht={sleep:e=>new Promise((t=>setTimeout(t,1e3*e)))};const{entries:Dt}=Object,Ut=["from pathlib import Path as _Path"],zt=(e,t)=>{for(const[r,n]of Dt(t)){const t=`_Path("${e}/${r}")`;if("string"==typeof n){const e=JSON.stringify(n);Ut.push(`${t}.write_text(${e})`)}else Ut.push(`${t}.mkdir(parents=True, exist_ok=True)`),zt(`${e}/${r}`,n)}};zt(".",{_pyscript:{"__init__.py":'import js as window\n\nIS_WORKER = not hasattr(window, "document")\n\nif IS_WORKER:\n from polyscript import xworker as _xworker\n\n window = _xworker.window\n document = window.document\n sync = _xworker.sync\nelse:\n document = window.document\n',"display.py":'import base64\nimport html\nimport io\nimport re\n\nfrom . import document, window\n\n_MIME_METHODS = {\n "__repr__": "text/plain",\n "_repr_html_": "text/html",\n "_repr_markdown_": "text/markdown",\n "_repr_svg_": "image/svg+xml",\n "_repr_png_": "image/png",\n "_repr_pdf_": "application/pdf",\n "_repr_jpeg_": "image/jpeg",\n "_repr_latex": "text/latex",\n "_repr_json_": "application/json",\n "_repr_javascript_": "application/javascript",\n "savefig": "image/png",\n}\n\n\ndef _render_image(mime, value, meta):\n # If the image value is using bytes we should convert it to base64\n # otherwise it will return raw bytes and the browser will not be able to\n # render it.\n if isinstance(value, bytes):\n value = base64.b64encode(value).decode("utf-8")\n\n # This is the pattern of base64 strings\n base64_pattern = re.compile(\n r"^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$"\n )\n # If value doesn\'t match the base64 pattern we should encode it to base64\n if len(value) > 0 and not base64_pattern.match(value):\n value = base64.b64encode(value.encode("utf-8")).decode("utf-8")\n\n data = f"data:{mime};charset=utf-8;base64,{value}"\n attrs = " ".join([\'{k}="{v}"\' for k, v in meta.items()])\n return f\'<img src="{data}" {attrs}></img>\'\n\n\ndef _identity(value, meta):\n return value\n\n\n_MIME_RENDERERS = {\n "text/plain": html.escape,\n "text/html": _identity,\n "image/png": lambda value, meta: _render_image("image/png", value, meta),\n "image/jpeg": lambda value, meta: _render_image("image/jpeg", value, meta),\n "image/svg+xml": _identity,\n "application/json": _identity,\n "application/javascript": lambda value, meta: f"<script>{value}<\\\\/script>",\n}\n\n\ndef _eval_formatter(obj, print_method):\n """\n Evaluates a formatter method.\n """\n if print_method == "__repr__":\n return repr(obj)\n elif hasattr(obj, print_method):\n if print_method == "savefig":\n buf = io.BytesIO()\n obj.savefig(buf, format="png")\n buf.seek(0)\n return base64.b64encode(buf.read()).decode("utf-8")\n return getattr(obj, print_method)()\n elif print_method == "_repr_mimebundle_":\n return {}, {}\n return None\n\n\ndef _format_mime(obj):\n """\n Formats object using _repr_x_ methods.\n """\n if isinstance(obj, str):\n return html.escape(obj), "text/plain"\n\n mimebundle = _eval_formatter(obj, "_repr_mimebundle_")\n if isinstance(mimebundle, tuple):\n format_dict, _ = mimebundle\n else:\n format_dict = mimebundle\n\n output, not_available = None, []\n for method, mime_type in reversed(_MIME_METHODS.items()):\n if mime_type in format_dict:\n output = format_dict[mime_type]\n else:\n output = _eval_formatter(obj, method)\n\n if output is None:\n continue\n elif mime_type not in _MIME_RENDERERS:\n not_available.append(mime_type)\n continue\n break\n if output is None:\n if not_available:\n window.console.warn(\n f"Rendered object requested unavailable MIME renderers: {not_available}"\n )\n output = repr(output)\n mime_type = "text/plain"\n elif isinstance(output, tuple):\n output, meta = output\n else:\n meta = {}\n return _MIME_RENDERERS[mime_type](output, meta), mime_type\n\n\ndef _write(element, value, append=False):\n html, mime_type = _format_mime(value)\n if html == "\\\\n":\n return\n\n if append:\n out_element = document.createElement("div")\n element.append(out_element)\n else:\n out_element = element.lastElementChild\n if out_element is None:\n out_element = element\n\n if mime_type in ("application/javascript", "text/html"):\n script_element = document.createRange().createContextualFragment(html)\n out_element.append(script_element)\n else:\n out_element.innerHTML = html\n\n\ndef display(*values, target=None, append=True):\n element = document.getElementById(target)\n for v in values:\n _write(element, v, append=append)\n'},"pyscript.py":"# export only what we want to expose as `pyscript` module\n# but not what is WORKER/MAIN dependent\nfrom _pyscript import window, document, IS_WORKER\nfrom _pyscript.display import display as _display\n\n# this part is needed to disambiguate between MAIN and WORKER\nif IS_WORKER:\n # in workers the display does not have a default ID\n # but there is a sync utility from xworker\n import polyscript as _polyscript\n from _pyscript import sync\n\n def current_target():\n return _polyscript.target\n\nelse:\n # in MAIN both PyWorker and current element target exist\n # so these are both exposed and the display will use,\n # if not specified otherwise, such current element target\n import _pyscript_js\n\n PyWorker = _pyscript_js.PyWorker\n\n def current_target():\n return _pyscript_js.target\n\n\n# the display provides a handy default target either in MAIN or WORKER\ndef display(*values, target=None, append=True):\n if target is None:\n target = current_target()\n\n return _display(*values, target=target, append=append)\n"}),Ut.push("del _Path"),Ut.push("\n");var qt=Ut.join("\n"),Qt={error:()=>import("./error-8268a4db.js")};const Kt="PY0001",Yt="PY0401",Xt="PY0403",Zt="PY0404",Gt="PY0500",Vt="PY0503";class er extends Error{constructor(e,t="",r="text"){super(`(${e}): ${t}`),this.errorCode=e,this.messageType=r,this.name="UserError"}}class tr extends er{constructor(e,t){super(e,t),this.name="FetchError"}}async function rr(e,t){let r;try{r=await fetch(e,t)}catch(t){const r=t;let n;throw n=e.startsWith("http")?`Fetching from URL ${e} failed with error '${r.message}'. Are your filename and path correct?`:'Polyscript: Access to local files\n (using [[fetch]] configurations in &lt;py-config&gt;)\n is not available when directly opening a HTML file;\n you must use a webserver to serve the additional files.\n See <a style="text-decoration: underline;" href="https://github.com/pyscript/pyscript/issues/257#issuecomment-1119595062">this reference</a>\n on starting a simple webserver with Python.\n ',new tr(Kt,n)}if(!r.ok){const t=`Fetching from URL ${e} failed with error ${r.status} (${r.statusText}). Are your filename and path correct?`;switch(r.status){case 404:throw new tr(Zt,t);case 401:throw new tr(Yt,t);case 403:throw new tr(Xt,t);case 500:throw new tr(Gt,t);case 503:throw new tr(Vt,t);default:throw new tr(Kt,t)}}return r}const{assign:nr,defineProperty:sr,entries:or}=Object,ar=e=>e.text();let ir,cr=0;const lr=(e="py")=>`${e}-${cr++}`;let ur,pr=e("py-config");pr?ur=pr.getAttribute("src")||pr.textContent:(pr=e('script[type="py"]'),ur=pr?.getAttribute("config")),/^https?:\/\//.test(ur)&&(ur=await rr(ur).then(ar));const fr=({tagName:e})=>"SCRIPT"===e,dr=e=>{sr(document,"currentScript",{configurable:!0,get:()=>e})},yr=()=>{delete document.currentScript},hr=async(e,t,r)=>{if(e.hasAttribute("src"))try{return await rr(e.getAttribute("src")).then(ar)}catch(e){t.stderr(e)}return r?ke(e.textContent):(console.warn('Deprecated: use <script type="py"> for an always safe content parsing:\n',e.innerHTML),ke(e.innerHTML))},gr=(e,t,r,n)=>{fr(t)&&r(t);for(const r of wr[n])r(e,t)};let mr=!0;const wr={onBeforeRun:new Set,onBeforeRunAync:new Set,onAfterRun:new Set,onAfterRunAsync:new Set,onInterpreterReady:new Set,codeBeforeRunWorker:new Set,codeBeforeRunWorkerAsync:new Set,codeAfterRunWorker:new Set,codeAfterRunWorkerAsync:new Set},br={codeBeforeRunWorker:()=>[qt,...wr.codeBeforeRunWorker].map(ke).join("\n"),codeBeforeRunWorkerAsync:()=>[qt,...wr.codeBeforeRunWorkerAsync].map(ke).join("\n"),codeAfterRunWorker:()=>[...wr.codeAfterRunWorker].map(ke).join("\n"),codeAfterRunWorkerAsync:()=>[...wr.codeAfterRunWorkerAsync].map(ke).join("\n")};let vr;((e,r)=>{let n=null==e;if(n)e="_ps"+Ft++;else if(ut.has(e)||Ot.has(e))throw new Error(`<script type="${e}"> already registered`);if(!ut.has(r?.interpreter))throw new Error("Unspecified interpreter");ut.set(e,ut.get(r.interpreter));const s=[`script[type="${e}"]`];if(It(e),n){const{onInterpreterReady:t}=r;r={...r,onInterpreterReady(r,n){$t.splice($t.indexOf(e),1),ut.delete(e),Ot.delete(e),Tt.delete(e),n.remove(),t?.(r)}},document.head.append(Pe(document.createElement("script"),{type:e}))}else s.push(`${e}-script`),dt.push(`${e}-`);for(const t of s)Mt.set(t,e);$t.push(...s),Ot.set(e,{options:Pe({env:e},r),known:new WeakSet}),n||jt(document),t(s.join(",")).forEach(Wt)})("py",{config:ur,env:"py-script",interpreter:"pyodide",...br,onWorkerReady(e,t){nr(t.sync,Ht)},onBeforeRun(e,t){ir=t,gr(e,t,dr,"onBeforeRun")},onBeforeRunAync(e,t){ir=t,gr(e,t,dr,"onBeforeRunAync")},onAfterRun(e,t){gr(e,t,yr,"onAfterRun")},onAfterRunAsync(e,t){gr(e,t,yr,"onAfterRunAsync")},async onInterpreterReady(e,t){mr&&(mr=!1,(({XWorker:e,interpreter:t,io:r})=>{t.registerJsModule("_pyscript_js",{PyWorker:function(...t){const n=e(...t);return n.onerror=({error:e})=>r.stderr(e),n},get target(){return fr(ir)?ir.target.id:ir.id}}),t.runPython(qt,{globals:t.runPython("{}")})})(e));const r=[];for(const[t,n]of or(Qt))e.config?.plugins?.includes(`!${t}`)||r.push(n());if(r.length){const e=Promise.all(r);vr=vr?vr.then((()=>e)):e}vr&&await vr;for(const r of wr.onInterpreterReady)r(e,t);if(fr(t)){const{attributes:{async:r,target:n}}=t,s=!!n?.value,o=s?bt(n.value):document.createElement("script-py");if(!s){const{head:e,body:r}=document;e.contains(t)?r.append(o):t.after(o)}o.id||(o.id=lr()),sr(t,"target",{value:o}),e["run"+(r?"Async":"")](await hr(t,e.io,!0))}else t._pyodide.resolve(e);console.debug("[pyscript/main] PyScript Ready")}});class _r extends HTMLElement{constructor(){nr(super(),{_pyodide:Promise.withResolvers(),srcCode:"",executed:!1})}get id(){return super.id||(super.id=lr())}set id(e){super.id=e}async connectedCallback(){if(!this.executed){this.executed=!0;const{io:e,run:t,runAsync:r}=await this._pyodide.promise,n=this.hasAttribute("async")?r:t;this.srcCode=await hr(this,e,!this.childElementCount),this.replaceChildren(),n(this.srcCode),this.style.display="block"}}}function Er(e,t){const r=Bt.call(new Je(null,br),e,{...t,type:"pyodide"});return nr(r.sync,Ht),r}customElements.define("py-script",_r);export{Er as PyWorker,wr as hooks};
@@ -0,0 +1 @@
1
+ import{hooks as e}from"./core.js";function n(e){const n=document.createElement("div");n.className="py-error",n.textContent=e,n.style.cssText="\n border: 1px solid red;\n background: #ffdddd;\n color: black;\n font-family: courier, monospace;\n white-space: pre;\n overflow-x: auto;\n padding: 8px;\n margin-top: 8px;\n ",document.body.append(n)}e.onBeforeRun.add((function o(r){e.onBeforeRun.delete(o);const{stderr:t}=r.io;r.io.stderr=(...e)=>{const[{message:o}]=e;return n(o),t(...e)},addEventListener("error",(({message:e})=>{e.startsWith("Uncaught PythonError")&&n(e)}))}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pyscript/core",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "type": "module",
5
5
  "description": "PyScript",
6
6
  "module": "./dist/core.js",
@@ -17,7 +17,7 @@
17
17
  },
18
18
  "scripts": {
19
19
  "server": "npx static-handler --cors --coep --coop --corp .",
20
- "build": "node rollup/stdlib.cjs && node rollup/plugins.cjs && rollup --config rollup/core.config.js && npm run ts",
20
+ "build": "node rollup/stdlib.cjs && node rollup/plugins.cjs && rm -rf dist && rollup --config rollup/core.config.js && npm run ts",
21
21
  "ts": "tsc -p ."
22
22
  },
23
23
  "keywords": [
@@ -29,7 +29,7 @@
29
29
  "dependencies": {
30
30
  "@ungap/with-resolvers": "^0.1.0",
31
31
  "basic-devtools": "^0.1.6",
32
- "polyscript": "^0.3.0"
32
+ "polyscript": "^0.3.1"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@rollup/plugin-node-resolve": "^15.2.1",
package/src/core.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import "@ungap/with-resolvers";
2
2
  import { $ } from "basic-devtools";
3
3
  import { define, XWorker } from "polyscript";
4
- import { htmlDecode } from "./utils.js";
5
4
  import sync from "./sync.js";
6
5
 
7
6
  import stdlib from "./stdlib.js";
@@ -10,6 +9,7 @@ import plugins from "./plugins.js";
10
9
  // TODO: this is not strictly polyscript related but handy ... not sure
11
10
  // we should factor this utility out a part but this works anyway.
12
11
  import { queryTarget } from "../node_modules/polyscript/esm/script-handler.js";
12
+ import { dedent } from "../node_modules/polyscript/esm/utils.js";
13
13
  import { Hook } from "../node_modules/polyscript/esm/worker/hooks.js";
14
14
 
15
15
  import { robustFetch as fetch } from "./fetch.js";
@@ -65,14 +65,14 @@ const fetchSource = async (tag, io, asText) => {
65
65
  }
66
66
  }
67
67
 
68
- if (asText) return tag.textContent;
68
+ if (asText) return dedent(tag.textContent);
69
69
 
70
70
  console.warn(
71
71
  'Deprecated: use <script type="py"> for an always safe content parsing:\n',
72
72
  tag.innerHTML,
73
73
  );
74
74
 
75
- return htmlDecode(tag.innerHTML);
75
+ return dedent(tag.innerHTML);
76
76
  };
77
77
 
78
78
  // common life-cycle handlers for any node
@@ -128,14 +128,19 @@ export const hooks = {
128
128
 
129
129
  const workerHooks = {
130
130
  codeBeforeRunWorker: () =>
131
- [stdlib, ...hooks.codeBeforeRunWorker].join("\n"),
131
+ [stdlib, ...hooks.codeBeforeRunWorker].map(dedent).join("\n"),
132
132
  codeBeforeRunWorkerAsync: () =>
133
- [stdlib, ...hooks.codeBeforeRunWorkerAsync].join("\n"),
134
- codeAfterRunWorker: () => [...hooks.codeAfterRunWorker].join("\n"),
133
+ [stdlib, ...hooks.codeBeforeRunWorkerAsync].map(dedent).join("\n"),
134
+ codeAfterRunWorker: () =>
135
+ [...hooks.codeAfterRunWorker].map(dedent).join("\n"),
135
136
  codeAfterRunWorkerAsync: () =>
136
- [...hooks.codeAfterRunWorkerAsync].join("\n"),
137
+ [...hooks.codeAfterRunWorkerAsync].map(dedent).join("\n"),
137
138
  };
138
139
 
140
+ // avoid running further script if the previous one had
141
+ // some import that would inevitably delay its execution
142
+ let queuePlugins;
143
+
139
144
  // define the module as both `<script type="py">` and `<py-script>`
140
145
  define("py", {
141
146
  config,
@@ -172,7 +177,14 @@ define("py", {
172
177
  toBeAwaited.push(value());
173
178
  }
174
179
 
175
- if (toBeAwaited.length) await Promise.all(toBeAwaited);
180
+ // this grants queued results when first script/tag has plugins
181
+ // and the second one *might* rely on first tag execution
182
+ if (toBeAwaited.length) {
183
+ const all = Promise.all(toBeAwaited);
184
+ queuePlugins = queuePlugins ? queuePlugins.then(() => all) : all;
185
+ }
186
+
187
+ if (queuePlugins) await queuePlugins;
176
188
 
177
189
  // allows plugins to do whatever they want with the element
178
190
  // before regular stuff happens in here
@@ -17,6 +17,11 @@ hooks.onBeforeRun.add(function override(pyScript) {
17
17
  // still let other plugins or PyScript itself do the rest
18
18
  return stderr(...args);
19
19
  };
20
+
21
+ // be sure uncaught Python errors are also visible
22
+ addEventListener("error", ({ message }) => {
23
+ if (message.startsWith("Uncaught PythonError")) notify(message);
24
+ });
20
25
  });
21
26
 
22
27
  // Error hook utilities
@@ -1 +0,0 @@
1
- import{hooks as e}from"./core.js";e.onBeforeRun.add((function n(o){e.onBeforeRun.delete(n);const{stderr:r}=o.io;o.io.stderr=(...e)=>{const[{message:n}]=e;return function(e){const n=document.createElement("div");n.className="py-error",n.textContent=e,n.style.cssText="\n border: 1px solid red;\n background: #ffdddd;\n color: black;\n font-family: courier, monospace;\n white-space: pre;\n overflow-x: auto;\n padding: 8px;\n margin-top: 8px;\n ",document.body.append(n)}(n),r(...e)}}));
package/src/utils.js DELETED
@@ -1,6 +0,0 @@
1
- const entity = { "<": "&lt;", ">": "&gt;" };
2
- const escape = (str) => str.replace(/[<>]/g, (key) => entity[key]);
3
-
4
- export const htmlDecode = (html) =>
5
- new DOMParser().parseFromString(escape(html), "text/html").documentElement
6
- .textContent;