@linkdlab/funcnodes_pyodide_react_flow 0.1.8 → 0.1.10
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/index.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const U=require("@linkdlab/funcnodes_react_flow"),s=[];for(let e=0;e<256;++e)s.push((e+256).toString(16).slice(1));function P(e,r=0){return(s[e[r+0]]+s[e[r+1]]+s[e[r+2]]+s[e[r+3]]+"-"+s[e[r+4]]+s[e[r+5]]+"-"+s[e[r+6]]+s[e[r+7]]+"-"+s[e[r+8]]+s[e[r+9]]+"-"+s[e[r+10]]+s[e[r+11]]+s[e[r+12]]+s[e[r+13]]+s[e[r+14]]+s[e[r+15]]).toLowerCase()}let k;const S=new Uint8Array(16);function x(){if(!k){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");k=crypto.getRandomValues.bind(crypto)}return k(S)}const E=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),y={randomUUID:E};function I(e,r,t){var i;if(y.randomUUID&&!e)return y.randomUUID();e=e||{};const o=e.random??((i=e.rng)==null?void 0:i.call(e))??x();if(o.length<16)throw new Error("Random bytes length must be >= 16");return o[6]=o[6]&15|64,o[8]=o[8]&63|128,P(o)}function M(e){return new Worker("/assets/pyodideDedicatedWorker-XEcNtM2X.js",{name:e==null?void 0:e.name})}function R(e){return new Worker("/assets/pyodideSharedWorker-BIPs7KQu.js",{name:e==null?void 0:e.name})}const D=e=>(e.worker||(e.shared_worker?e.worker_url===void 0?e.worker=new R({name:e.uuid}):e.worker=new SharedWorker(e.worker_url,{name:e.uuid,type:"module"}):e.worker_url===void 0?e.worker=new M({name:e.uuid}):e.worker=new Worker(e.worker_url,{name:e.uuid,type:"module"})),e.worker);class j extends U.FuncNodesWorker{constructor(r){const t={uuid:I(),...r};if(super(t),this._message_hooks=[],this._worker=D(t),this._worker instanceof SharedWorker)t.shared_worker=!0,this._port=this._worker.port,this._port.start(),this._port.addEventListener("message",this.onmessage.bind(this));else if(this._worker instanceof Worker)t.shared_worker=!1,this._worker.addEventListener("message",this.onmessage.bind(this));else throw new Error("worker must be an instance of Worker or SharedWorker");this.postMessage({cmd:"init",data:{debug:t.debug,pyodide_url:t.pyodide_url,packages:t.packages}});const o=setInterval(()=>{this.postMessage({cmd:"state"})},400);this._workerstate={loaded:!1,msg:"loading",progress:0},this.initPromise=new Promise(async i=>{var c;for(;!this._workerstate.loaded;)await new Promise(h=>setTimeout(h,100));clearInterval(o),this.is_open=!0,(c=this._zustand)==null||c.auto_progress(),i()}),this.initPromise.then(()=>{this.stepwise_fullsync()})}async send(r){await this.initPromise,this.postMessage({cmd:"worker:send",msg:JSON.stringify(r),worker_id:this.uuid})}postMessage(r){r.worker_id=this.uuid,this._port?this._port.postMessage(r):this._worker.postMessage(r)}registerMessageHook(r){return this._message_hooks.push(r),()=>{this._message_hooks=this._message_hooks.filter(t=>t!==r)}}onmessage(r){var t;for(const o of this._message_hooks)o(r.data);if(r.data.result)r.data.result.state&&(this._workerstate={...this._workerstate,...r.data.result.state},r.data.result.state.msg&&r.data.result.state.msg!=="ready"&&((t=this._zustand)==null||t.set_progress({message:this._workerstate.msg,status:"info",progress:this._workerstate.progress,blocking:!0})));else if(r.data.cmd){if(r.data.cmd==="receive"){if(r.data.worker_id===void 0)throw new Error("worker_id is undefined");r.data.worker_id===this.uuid&&this.receive(JSON.parse(r.data.msg))}else if(r.data.cmd==="receive_bytes"){if(r.data.worker_id===void 0)throw new Error("worker_id is undefined");r.data.worker_id===this.uuid&&this.onbytes(r.data.msg)}}}async upload_file({files:r,onProgressCallback:t,root:o}){const i=[],c=r.length;let h=0;if(r.length===0)return"";for(let d=0;d<r.length;d++){const u=r[d],a=new FileReader,m=new Promise((l,n)=>{a.onload=async f=>{var g;try{const w=(g=f.target.result)==null?void 0:g.replace(/^data:.+;base64,/,""),p=u.webkitRelativePath||u.name,b=o?`${o}/${p}`:p,W=await this._send_cmd({cmd:"upload",kwargs:{data:w,filename:b},wait_for_response:!0});h++,t&&t(h,c),l(W)}catch(w){n(w)}},a.readAsDataURL(u)});i.push(m)}const _=await Promise.all(i);return _.reduce((d,u)=>{const a=u.split("/"),m=d.split("/"),l=[];for(let n=0;n<a.length&&a[n]===m[n];n++)l.push(a[n]);return l.join("/")},_[0])}}module.exports=j;
|
|
1
|
+
"use strict";const W=require("@linkdlab/funcnodes_react_flow"),o=[];for(let r=0;r<256;++r)o.push((r+256).toString(16).slice(1));function U(r,e=0){return(o[r[e+0]]+o[r[e+1]]+o[r[e+2]]+o[r[e+3]]+"-"+o[r[e+4]]+o[r[e+5]]+"-"+o[r[e+6]]+o[r[e+7]]+"-"+o[r[e+8]]+o[r[e+9]]+"-"+o[r[e+10]]+o[r[e+11]]+o[r[e+12]]+o[r[e+13]]+o[r[e+14]]+o[r[e+15]]).toLowerCase()}let u;const L=new Uint8Array(16);function j(){if(!u){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");u=crypto.getRandomValues.bind(crypto)}return u(L)}const I=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),f={randomUUID:I};function z(r,e,t){var a;if(f.randomUUID&&!r)return f.randomUUID();r=r||{};const i=r.random??((a=r.rng)==null?void 0:a.call(r))??j();if(i.length<16)throw new Error("Random bytes length must be >= 16");return i[6]=i[6]&15|64,i[8]=i[8]&63|128,U(i)}const v='(function(){"use strict";const d="https://cdn.jsdelivr.net/pyodide/v0.27.2/full/pyodide.mjs",e=self;e.workerState={pyodide:null,pyodide_url:d,packages:[],state:{msg:"loading",loaded:!1,progress:0},micropip:null,worker:{},pyodideReady:!1,pyodideReadyPromise:null,debug:!1,interruptBuffer:null,receivepy:(r,t)=>{},receivepy_bytes:(r,t)=>{},handel_register:{},post_pyodide_ready:void 0},e.reset=async()=>{var r;for(const t in e.list_workers())try{const o=await e.get_worker(t);o.worker&&o.worker.stop(),(r=o.reject_promise)==null||r.call(o,"Worker reset")}catch{}e.workerState.pyodide&&e.interrupt(),e.workerState.pyodide=null,e.workerState.micropip=null,e.workerState.worker={},e.workerState.pyodideReady=!1;try{e.workerState.interruptBuffer=new Uint8Array(new SharedArrayBuffer(1)),e.workerState.interruptBuffer[0]=0}catch{}},e.initializePyodide=async()=>{var r,t;if(!e.workerState.pyodide){console.log("initializePyodide with: Debug:",e.workerState.debug,"Pyodide URL:",e.workerState.pyodide_url,"Packages:",e.workerState.packages),console.debug("Loading Pyodide..."),e.workerState.state.msg="Loading Pyodide...",e.workerState.state.progress=0,await e.reset(),console.debug("Loading Pyodide module..."),e.workerState.state.msg="Loading Pyodide module...",e.workerState.state.progress=.1;const o=await import(e.workerState.pyodide_url);console.debug("Loading Pyodide instance..."),e.workerState.state.msg="Loading Pyodide instance...",e.workerState.state.progress=.2;const i=o.loadPyodide,a=e.workerState.pyodide_url.split("/").slice(0,-1).join("/");console.log(a),e.workerState.pyodide=await i({packages:["micropip"],indexURL:a}),e.workerState.interruptBuffer&&e.workerState.pyodide.setInterruptBuffer(e.workerState.interruptBuffer)}e.workerState.micropip||(console.debug("Importing micropip..."),e.workerState.state.msg="Importing micropip...",e.workerState.state.progress=.3,e.workerState.micropip=e.workerState.pyodide.pyimport("micropip")),console.debug("Pyodide ready. Installing funcnodes...");for(const o of e.workerState.packages)console.log("Installing package:",o),e.workerState.state.msg=`Installing package: ${o}`,await e.workerState.micropip.install(o);return e.workerState.state.msg="Installing funcnodes",e.workerState.state.progress=.8,await e.workerState.micropip.install("funcnodes"),e.workerState.state.msg="Installing funcnodes-worker",await e.workerState.micropip.install("funcnodes-worker"),e.workerState.state.msg="Installing funcnodes-pyodide",await e.workerState.micropip.install("funcnodes-pyodide"),e.workerState.state.msg="Importing funcnodes",console.debug("Importing funcnodes..."),await e.workerState.pyodide.runPythonAsync("import funcnodes_pyodide"),console.debug("Running post_pyodide_ready..."),await((t=(r=e.workerState).post_pyodide_ready)==null?void 0:t.call(r,e.workerState)),console.debug("Pyodide ready"),e.workerState.state.msg="ready",e.workerState.state.progress=.1,e.workerState.pyodideReady=!0,{pyodide:e.workerState.pyodide,micropip:e.workerState.micropip}},e.interrupt=()=>{e.workerState.interruptBuffer&&(e.workerState.interruptBuffer[0]=1)},e.list_workers=()=>Object.keys(e.workerState.worker),e.get_worker=async r=>{if(!r)throw new Error("Worker id is required");if(!e.workerState.worker[r])throw new Error(`Worker with id ${r} not found`);return await e.workerState.worker[r].make_promise,e.workerState.worker[r]},e.has_worker=r=>{if(!r)throw new Error("Worker id is required");return!!e.workerState.worker[r]},e.get_or_create_worker=async r=>{if(!r)throw new Error("Worker id is required");return e.workerState.worker[r]||(console.log("Creating worker with id",r),await e.initializeFuncNodesWorker(r)),e.get_worker(r)},e.initializeFuncNodesWorker=async r=>{try{if(!e.workerState.pyodideReadyPromise)throw new Error("Pyodide newer initialized");const{pyodide:t}=await e.workerState.pyodideReadyPromise;if(!e.has_worker(r)){e.workerState.worker[r]={worker:null,make_promise:void 0};const o=new Promise(async(i,a)=>{e.workerState.worker[r].reject_promise=a,console.debug(`Creating worker (${r})...`);const s=await t.runPythonAsync(`funcnodes_pyodide.new_worker(debug=${e.workerState.debug?1:0}, uuid="${r}")`);if(console.debug("Worker created:",s),typeof s.set_receiver=="function")s.set_receiver(self);else throw new Error("Worker does not expose a \'set_receiver\' method.");e.workerState.worker[r].worker=s,console.debug("Worker ready"),i(s)});e.workerState.worker[r].make_promise=o}return e.get_worker(r)}catch(t){throw console.error("Error during worker initialization:",t),t}},e.receivepy=(r,t)=>{try{let o={};if(typeof r=="string"?o.msg=r:o=r,o.msg===void 0)return;typeof o.msg!="string"&&(o.msg=JSON.stringify(o.msg)),t!==void 0&&(typeof t=="string"?o.worker_id||(o.worker_id=t):o={...t,...o});const i=o.worker_id;if(!i)throw new Error(`Worker id not provided in receivepy(${JSON.stringify(o)})`);if(!e.workerState.worker[i])throw new Error(`Worker with id ${i} not found in receivepy(${JSON.stringify(o)})`);e.workerState.receivepy(r,i)}catch(o){console.error("Error during receivepy:",o);return}},e.receivepy_bytes=(r,t)=>{r=r.toJs();try{let o={};if(r instanceof Uint8Array?o.msg=r:o=r,o.msg===void 0)return;t!==void 0&&(typeof t=="string"?o.worker_id||(o.worker_id=t):o={...t,...o});const i=o.worker_id;if(!i)throw new Error("Worker id not provided in receivepy_bytes");if(!e.workerState.worker[i])throw new Error(`Worker with id ${i} not found in receivepy_bytes`);e.workerState.receivepy_bytes(r,i)}catch(o){console.error("Error during receivepy_bytes:",o);return}},e.startInitialization=({debug:r=!1,receivepy:t,receivepy_bytes:o,pyodide_url:i,post_pyodide_ready:a,packages:s})=>(e.workerState.debug=r,e.workerState.pyodide_url=i||d,e.workerState.packages=s,e.workerState.receivepy=t,e.workerState.receivepy_bytes=o,e.workerState.pyodideReadyPromise=null,e.workerState.post_pyodide_ready=a,e.workerState),e.register_cmd_message=(r,t)=>{if(e.workerState.handel_register[r])throw new Error(`Command ${r} already registered`);e.workerState.handel_register[r]=t},e.register_cmd_message("ping",async r=>"pong"),e.register_cmd_message("init",async r=>{if(e.workerState.pyodideReadyPromise)throw new Error("Pyodide is already initialized");r.data&&(r.data.pyodide_url&&(e.workerState.pyodide_url=r.data.pyodide_url),r.data.packages&&(e.workerState.packages=r.data.packages),r.data.debug&&(e.workerState.debug=r.data.debug)),e.workerState.pyodideReadyPromise=e.initializePyodide()}),e.register_cmd_message("_eval",async r=>{var t;try{const o=await((t=e.workerState.pyodide)==null?void 0:t.runPythonAsync(r.msg||"print(\'No code provided\')"));return console.log("Eval result:",o),o}catch(o){console.error("Error during _eval:",o)}}),e.register_cmd_message("state",async r=>({state:{...e.workerState.state,loaded:e.workerState.pyodideReady}})),e.register_cmd_message("worker:state",async r=>({state:{loaded:!!(await e.get_or_create_worker(r.worker_id)).worker}})),e.register_cmd_message("worker:stop",async r=>{var o;if(!e.has_worker(r.worker_id))return;const t=await e.get_or_create_worker(r.worker_id);return t.worker&&(t.worker.stop(),t.worker=null,(o=t.reject_promise)==null||o.call(t,"Worker stopped")),delete e.workerState.worker[r.worker_id],{state:{loaded:!1}}}),e.register_cmd_message("worker:send",async r=>{const t=await e.get_or_create_worker(r.worker_id);if(!t.worker)throw new Error("Worker is not initialized");if(typeof t.worker.receivejs!="function")throw new Error(`Worker does not support receivejs: ${typeof t.worker.receivejs}`);t.worker.receivejs(r.msg)}),e.handleMessage=async r=>{const t={original:r};r.id&&(t.id=r.id),r.toJs===void 0&&(r.toJs=!0);try{if(r.cmd){const o=r;if(e.workerState.handel_register[o.cmd])t.result=await e.workerState.handel_register[o.cmd](o);else throw new Error("Unknown command: "+o.cmd)}else throw new Error("Unknown message format: "+JSON.stringify(r))}catch(o){t.error=o.message}return t},e.read_url_params=()=>{var a,s;const r=new URLSearchParams(self.location.search),t=((a=r.get("debug"))==null?void 0:a.toLowerCase())==="true",o=r.get("pyodide_url")||void 0,i=((s=r.get("packages"))==null?void 0:s.split(","))||[];return{debug:t,pyodide_url:o,packages:i}};const n=e;n.general_initalization=r=>{const t=n.read_url_params();n.startInitialization({...r,...t})};const w=n,c=n;c.init_dedicated_worker=r=>{const t=e;t.onmessage=async i=>{const a=i.data,s=await t.handleMessage(a);t.postMessage(s)};const o={...r,receivepy:(i,a)=>{t.postMessage({cmd:"receive",msg:i,worker_id:a})},receivepy_bytes(i,a){t.postMessage({cmd:"receive_bytes",msg:i,worker_id:a})}};t.general_initalization(o)},w.init_shared_worker=r=>{const t=e;t.connectedPorts=[],t.onconnect=i=>{const a=i.ports[0];t.connectedPorts.push(a),a.start(),console.debug("Port connected in shared worker"),a.onmessage=async s=>{const k=s.data,p=await t.handleMessage(k);a.postMessage(p)}};const o={...r,receivepy:(i,a)=>{t.connectedPorts.forEach(s=>{s.postMessage({cmd:"receive",msg:i,worker_id:a})})},receivepy_bytes(i,a){t.connectedPorts.forEach(s=>{s.postMessage({cmd:"receive_bytes",msg:i,worker_id:a})})}};t.general_initalization(o)},n.init_dedicated_worker({})})();\n',S=typeof self<"u"&&self.Blob&&new Blob([v],{type:"text/javascript;charset=utf-8"});function $(r){let e;try{if(e=S&&(self.URL||self.webkitURL).createObjectURL(S),!e)throw"";const t=new Worker(e,{name:r==null?void 0:r.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(v),{name:r==null?void 0:r.name})}finally{e&&(self.URL||self.webkitURL).revokeObjectURL(e)}}const b='(function(){"use strict";const d="https://cdn.jsdelivr.net/pyodide/v0.27.2/full/pyodide.mjs",e=self;e.workerState={pyodide:null,pyodide_url:d,packages:[],state:{msg:"loading",loaded:!1,progress:0},micropip:null,worker:{},pyodideReady:!1,pyodideReadyPromise:null,debug:!1,interruptBuffer:null,receivepy:(r,t)=>{},receivepy_bytes:(r,t)=>{},handel_register:{},post_pyodide_ready:void 0},e.reset=async()=>{var r;for(const t in e.list_workers())try{const o=await e.get_worker(t);o.worker&&o.worker.stop(),(r=o.reject_promise)==null||r.call(o,"Worker reset")}catch{}e.workerState.pyodide&&e.interrupt(),e.workerState.pyodide=null,e.workerState.micropip=null,e.workerState.worker={},e.workerState.pyodideReady=!1;try{e.workerState.interruptBuffer=new Uint8Array(new SharedArrayBuffer(1)),e.workerState.interruptBuffer[0]=0}catch{}},e.initializePyodide=async()=>{var r,t;if(!e.workerState.pyodide){console.log("initializePyodide with: Debug:",e.workerState.debug,"Pyodide URL:",e.workerState.pyodide_url,"Packages:",e.workerState.packages),console.debug("Loading Pyodide..."),e.workerState.state.msg="Loading Pyodide...",e.workerState.state.progress=0,await e.reset(),console.debug("Loading Pyodide module..."),e.workerState.state.msg="Loading Pyodide module...",e.workerState.state.progress=.1;const o=await import(e.workerState.pyodide_url);console.debug("Loading Pyodide instance..."),e.workerState.state.msg="Loading Pyodide instance...",e.workerState.state.progress=.2;const i=o.loadPyodide,a=e.workerState.pyodide_url.split("/").slice(0,-1).join("/");console.log(a),e.workerState.pyodide=await i({packages:["micropip"],indexURL:a}),e.workerState.interruptBuffer&&e.workerState.pyodide.setInterruptBuffer(e.workerState.interruptBuffer)}e.workerState.micropip||(console.debug("Importing micropip..."),e.workerState.state.msg="Importing micropip...",e.workerState.state.progress=.3,e.workerState.micropip=e.workerState.pyodide.pyimport("micropip")),console.debug("Pyodide ready. Installing funcnodes...");for(const o of e.workerState.packages)console.log("Installing package:",o),e.workerState.state.msg=`Installing package: ${o}`,await e.workerState.micropip.install(o);return e.workerState.state.msg="Installing funcnodes",e.workerState.state.progress=.8,await e.workerState.micropip.install("funcnodes"),e.workerState.state.msg="Installing funcnodes-worker",await e.workerState.micropip.install("funcnodes-worker"),e.workerState.state.msg="Installing funcnodes-pyodide",await e.workerState.micropip.install("funcnodes-pyodide"),e.workerState.state.msg="Importing funcnodes",console.debug("Importing funcnodes..."),await e.workerState.pyodide.runPythonAsync("import funcnodes_pyodide"),console.debug("Running post_pyodide_ready..."),await((t=(r=e.workerState).post_pyodide_ready)==null?void 0:t.call(r,e.workerState)),console.debug("Pyodide ready"),e.workerState.state.msg="ready",e.workerState.state.progress=.1,e.workerState.pyodideReady=!0,{pyodide:e.workerState.pyodide,micropip:e.workerState.micropip}},e.interrupt=()=>{e.workerState.interruptBuffer&&(e.workerState.interruptBuffer[0]=1)},e.list_workers=()=>Object.keys(e.workerState.worker),e.get_worker=async r=>{if(!r)throw new Error("Worker id is required");if(!e.workerState.worker[r])throw new Error(`Worker with id ${r} not found`);return await e.workerState.worker[r].make_promise,e.workerState.worker[r]},e.has_worker=r=>{if(!r)throw new Error("Worker id is required");return!!e.workerState.worker[r]},e.get_or_create_worker=async r=>{if(!r)throw new Error("Worker id is required");return e.workerState.worker[r]||(console.log("Creating worker with id",r),await e.initializeFuncNodesWorker(r)),e.get_worker(r)},e.initializeFuncNodesWorker=async r=>{try{if(!e.workerState.pyodideReadyPromise)throw new Error("Pyodide newer initialized");const{pyodide:t}=await e.workerState.pyodideReadyPromise;if(!e.has_worker(r)){e.workerState.worker[r]={worker:null,make_promise:void 0};const o=new Promise(async(i,a)=>{e.workerState.worker[r].reject_promise=a,console.debug(`Creating worker (${r})...`);const s=await t.runPythonAsync(`funcnodes_pyodide.new_worker(debug=${e.workerState.debug?1:0}, uuid="${r}")`);if(console.debug("Worker created:",s),typeof s.set_receiver=="function")s.set_receiver(self);else throw new Error("Worker does not expose a \'set_receiver\' method.");e.workerState.worker[r].worker=s,console.debug("Worker ready"),i(s)});e.workerState.worker[r].make_promise=o}return e.get_worker(r)}catch(t){throw console.error("Error during worker initialization:",t),t}},e.receivepy=(r,t)=>{try{let o={};if(typeof r=="string"?o.msg=r:o=r,o.msg===void 0)return;typeof o.msg!="string"&&(o.msg=JSON.stringify(o.msg)),t!==void 0&&(typeof t=="string"?o.worker_id||(o.worker_id=t):o={...t,...o});const i=o.worker_id;if(!i)throw new Error(`Worker id not provided in receivepy(${JSON.stringify(o)})`);if(!e.workerState.worker[i])throw new Error(`Worker with id ${i} not found in receivepy(${JSON.stringify(o)})`);e.workerState.receivepy(r,i)}catch(o){console.error("Error during receivepy:",o);return}},e.receivepy_bytes=(r,t)=>{r=r.toJs();try{let o={};if(r instanceof Uint8Array?o.msg=r:o=r,o.msg===void 0)return;t!==void 0&&(typeof t=="string"?o.worker_id||(o.worker_id=t):o={...t,...o});const i=o.worker_id;if(!i)throw new Error("Worker id not provided in receivepy_bytes");if(!e.workerState.worker[i])throw new Error(`Worker with id ${i} not found in receivepy_bytes`);e.workerState.receivepy_bytes(r,i)}catch(o){console.error("Error during receivepy_bytes:",o);return}},e.startInitialization=({debug:r=!1,receivepy:t,receivepy_bytes:o,pyodide_url:i,post_pyodide_ready:a,packages:s})=>(e.workerState.debug=r,e.workerState.pyodide_url=i||d,e.workerState.packages=s,e.workerState.receivepy=t,e.workerState.receivepy_bytes=o,e.workerState.pyodideReadyPromise=null,e.workerState.post_pyodide_ready=a,e.workerState),e.register_cmd_message=(r,t)=>{if(e.workerState.handel_register[r])throw new Error(`Command ${r} already registered`);e.workerState.handel_register[r]=t},e.register_cmd_message("ping",async r=>"pong"),e.register_cmd_message("init",async r=>{if(e.workerState.pyodideReadyPromise)throw new Error("Pyodide is already initialized");r.data&&(r.data.pyodide_url&&(e.workerState.pyodide_url=r.data.pyodide_url),r.data.packages&&(e.workerState.packages=r.data.packages),r.data.debug&&(e.workerState.debug=r.data.debug)),e.workerState.pyodideReadyPromise=e.initializePyodide()}),e.register_cmd_message("_eval",async r=>{var t;try{const o=await((t=e.workerState.pyodide)==null?void 0:t.runPythonAsync(r.msg||"print(\'No code provided\')"));return console.log("Eval result:",o),o}catch(o){console.error("Error during _eval:",o)}}),e.register_cmd_message("state",async r=>({state:{...e.workerState.state,loaded:e.workerState.pyodideReady}})),e.register_cmd_message("worker:state",async r=>({state:{loaded:!!(await e.get_or_create_worker(r.worker_id)).worker}})),e.register_cmd_message("worker:stop",async r=>{var o;if(!e.has_worker(r.worker_id))return;const t=await e.get_or_create_worker(r.worker_id);return t.worker&&(t.worker.stop(),t.worker=null,(o=t.reject_promise)==null||o.call(t,"Worker stopped")),delete e.workerState.worker[r.worker_id],{state:{loaded:!1}}}),e.register_cmd_message("worker:send",async r=>{const t=await e.get_or_create_worker(r.worker_id);if(!t.worker)throw new Error("Worker is not initialized");if(typeof t.worker.receivejs!="function")throw new Error(`Worker does not support receivejs: ${typeof t.worker.receivejs}`);t.worker.receivejs(r.msg)}),e.handleMessage=async r=>{const t={original:r};r.id&&(t.id=r.id),r.toJs===void 0&&(r.toJs=!0);try{if(r.cmd){const o=r;if(e.workerState.handel_register[o.cmd])t.result=await e.workerState.handel_register[o.cmd](o);else throw new Error("Unknown command: "+o.cmd)}else throw new Error("Unknown message format: "+JSON.stringify(r))}catch(o){t.error=o.message}return t},e.read_url_params=()=>{var a,s;const r=new URLSearchParams(self.location.search),t=((a=r.get("debug"))==null?void 0:a.toLowerCase())==="true",o=r.get("pyodide_url")||void 0,i=((s=r.get("packages"))==null?void 0:s.split(","))||[];return{debug:t,pyodide_url:o,packages:i}};const n=e;n.general_initalization=r=>{const t=n.read_url_params();n.startInitialization({...r,...t})};const w=n,c=n;c.init_dedicated_worker=r=>{const t=e;t.onmessage=async i=>{const a=i.data,s=await t.handleMessage(a);t.postMessage(s)};const o={...r,receivepy:(i,a)=>{t.postMessage({cmd:"receive",msg:i,worker_id:a})},receivepy_bytes(i,a){t.postMessage({cmd:"receive_bytes",msg:i,worker_id:a})}};t.general_initalization(o)},w.init_shared_worker=r=>{const t=e;t.connectedPorts=[],t.onconnect=i=>{const a=i.ports[0];t.connectedPorts.push(a),a.start(),console.debug("Port connected in shared worker"),a.onmessage=async s=>{const k=s.data,p=await t.handleMessage(k);a.postMessage(p)}};const o={...r,receivepy:(i,a)=>{t.connectedPorts.forEach(s=>{s.postMessage({cmd:"receive",msg:i,worker_id:a})})},receivepy_bytes(i,a){t.connectedPorts.forEach(s=>{s.postMessage({cmd:"receive_bytes",msg:i,worker_id:a})})}};t.general_initalization(o)},n.init_shared_worker({})})();\n',h=typeof self<"u"&&self.Blob&&new Blob([b],{type:"text/javascript;charset=utf-8"});function M(r){let e;try{if(e=h&&(self.URL||self.webkitURL).createObjectURL(h),!e)throw"";const t=new Worker(e,{name:r==null?void 0:r.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(b),{name:r==null?void 0:r.name})}finally{e&&(self.URL||self.webkitURL).revokeObjectURL(e)}}const B=r=>(r.worker||(r.shared_worker?r.worker_url===void 0?r.worker=new M({name:r.uuid}):r.worker=new SharedWorker(r.worker_url,{name:r.uuid,type:"module"}):r.worker_url===void 0?r.worker=new $({name:r.uuid}):r.worker=new Worker(r.worker_url,{name:r.uuid,type:"module"})),r.worker);class O extends W.FuncNodesWorker{constructor(e){const t={uuid:z(),...e};if(super(t),this._message_hooks=[],this._worker=B(t),this._worker instanceof SharedWorker)t.shared_worker=!0,this._port=this._worker.port,this._port.start(),this._port.addEventListener("message",this.onmessage.bind(this));else if(this._worker instanceof Worker)t.shared_worker=!1,this._worker.addEventListener("message",this.onmessage.bind(this));else throw new Error("worker must be an instance of Worker or SharedWorker");this.postMessage({cmd:"init",data:{debug:t.debug,pyodide_url:t.pyodide_url,packages:t.packages}});const i=setInterval(()=>{this.postMessage({cmd:"state"})},400);this._workerstate={loaded:!1,msg:"loading",progress:0},this.initPromise=new Promise(async a=>{var c;for(;!this._workerstate.loaded;)await new Promise(k=>setTimeout(k,100));clearInterval(i),this.is_open=!0,(c=this._zustand)==null||c.auto_progress(),a()}),this.initPromise.then(()=>{this.stepwise_fullsync()})}async send(e){await this.initPromise,this.postMessage({cmd:"worker:send",msg:JSON.stringify(e),worker_id:this.uuid})}postMessage(e){e.worker_id=this.uuid,this._port?this._port.postMessage(e):this._worker.postMessage(e)}registerMessageHook(e){return this._message_hooks.push(e),()=>{this._message_hooks=this._message_hooks.filter(t=>t!==e)}}onmessage(e){var t;for(const i of this._message_hooks)i(e.data);if(e.data.result)e.data.result.state&&(this._workerstate={...this._workerstate,...e.data.result.state},e.data.result.state.msg&&e.data.result.state.msg!=="ready"&&((t=this._zustand)==null||t.set_progress({message:this._workerstate.msg,status:"info",progress:this._workerstate.progress,blocking:!0})));else if(e.data.cmd){if(e.data.cmd==="receive"){if(e.data.worker_id===void 0)throw new Error("worker_id is undefined");e.data.worker_id===this.uuid&&this.receive(JSON.parse(e.data.msg))}else if(e.data.cmd==="receive_bytes"){if(e.data.worker_id===void 0)throw new Error("worker_id is undefined");e.data.worker_id===this.uuid&&this.onbytes(e.data.msg)}}}async upload_file({files:e,onProgressCallback:t,root:i}){const a=[],c=e.length;let k=0;if(e.length===0)return"";for(let d=0;d<e.length;d++){const w=e[d],n=new FileReader,p=new Promise((l,s)=>{n.onload=async P=>{var _;try{const g=(_=P.target.result)==null?void 0:_.replace(/^data:.+;base64,/,""),m=w.webkitRelativePath||w.name,R=i?`${i}/${m}`:m,E=await this._send_cmd({cmd:"upload",kwargs:{data:g,filename:R},wait_for_response:!0});k++,t&&t(k,c),l(E)}catch(g){s(g)}},n.readAsDataURL(w)});a.push(p)}const y=await Promise.all(a);return y.reduce((d,w)=>{const n=w.split("/"),p=d.split("/"),l=[];for(let s=0;s<n.length&&n[s]===p[s];s++)l.push(n[s]);return l.join("/")},y[0])}}module.exports=O;
|
package/dist/index.es.js
CHANGED
|
@@ -1,65 +1,93 @@
|
|
|
1
|
-
import { FuncNodesWorker as
|
|
2
|
-
const
|
|
3
|
-
for (let
|
|
4
|
-
|
|
5
|
-
function
|
|
6
|
-
return (
|
|
1
|
+
import { FuncNodesWorker as W } from "@linkdlab/funcnodes_react_flow";
|
|
2
|
+
const o = [];
|
|
3
|
+
for (let r = 0; r < 256; ++r)
|
|
4
|
+
o.push((r + 256).toString(16).slice(1));
|
|
5
|
+
function U(r, e = 0) {
|
|
6
|
+
return (o[r[e + 0]] + o[r[e + 1]] + o[r[e + 2]] + o[r[e + 3]] + "-" + o[r[e + 4]] + o[r[e + 5]] + "-" + o[r[e + 6]] + o[r[e + 7]] + "-" + o[r[e + 8]] + o[r[e + 9]] + "-" + o[r[e + 10]] + o[r[e + 11]] + o[r[e + 12]] + o[r[e + 13]] + o[r[e + 14]] + o[r[e + 15]]).toLowerCase();
|
|
7
7
|
}
|
|
8
|
-
let
|
|
9
|
-
const
|
|
10
|
-
function
|
|
11
|
-
if (!
|
|
8
|
+
let u;
|
|
9
|
+
const L = new Uint8Array(16);
|
|
10
|
+
function j() {
|
|
11
|
+
if (!u) {
|
|
12
12
|
if (typeof crypto > "u" || !crypto.getRandomValues)
|
|
13
13
|
throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
|
|
14
|
-
|
|
14
|
+
u = crypto.getRandomValues.bind(crypto);
|
|
15
15
|
}
|
|
16
|
-
return
|
|
16
|
+
return u(L);
|
|
17
17
|
}
|
|
18
|
-
const
|
|
19
|
-
function
|
|
20
|
-
var
|
|
21
|
-
if (
|
|
22
|
-
return
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
if (
|
|
18
|
+
const I = typeof crypto < "u" && crypto.randomUUID && crypto.randomUUID.bind(crypto), f = { randomUUID: I };
|
|
19
|
+
function z(r, e, t) {
|
|
20
|
+
var a;
|
|
21
|
+
if (f.randomUUID && !r)
|
|
22
|
+
return f.randomUUID();
|
|
23
|
+
r = r || {};
|
|
24
|
+
const i = r.random ?? ((a = r.rng) == null ? void 0 : a.call(r)) ?? j();
|
|
25
|
+
if (i.length < 16)
|
|
26
26
|
throw new Error("Random bytes length must be >= 16");
|
|
27
|
-
return
|
|
27
|
+
return i[6] = i[6] & 15 | 64, i[8] = i[8] & 63 | 128, U(i);
|
|
28
28
|
}
|
|
29
|
-
function
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
29
|
+
const v = '(function(){"use strict";const d="https://cdn.jsdelivr.net/pyodide/v0.27.2/full/pyodide.mjs",e=self;e.workerState={pyodide:null,pyodide_url:d,packages:[],state:{msg:"loading",loaded:!1,progress:0},micropip:null,worker:{},pyodideReady:!1,pyodideReadyPromise:null,debug:!1,interruptBuffer:null,receivepy:(r,t)=>{},receivepy_bytes:(r,t)=>{},handel_register:{},post_pyodide_ready:void 0},e.reset=async()=>{var r;for(const t in e.list_workers())try{const o=await e.get_worker(t);o.worker&&o.worker.stop(),(r=o.reject_promise)==null||r.call(o,"Worker reset")}catch{}e.workerState.pyodide&&e.interrupt(),e.workerState.pyodide=null,e.workerState.micropip=null,e.workerState.worker={},e.workerState.pyodideReady=!1;try{e.workerState.interruptBuffer=new Uint8Array(new SharedArrayBuffer(1)),e.workerState.interruptBuffer[0]=0}catch{}},e.initializePyodide=async()=>{var r,t;if(!e.workerState.pyodide){console.log("initializePyodide with: Debug:",e.workerState.debug,"Pyodide URL:",e.workerState.pyodide_url,"Packages:",e.workerState.packages),console.debug("Loading Pyodide..."),e.workerState.state.msg="Loading Pyodide...",e.workerState.state.progress=0,await e.reset(),console.debug("Loading Pyodide module..."),e.workerState.state.msg="Loading Pyodide module...",e.workerState.state.progress=.1;const o=await import(e.workerState.pyodide_url);console.debug("Loading Pyodide instance..."),e.workerState.state.msg="Loading Pyodide instance...",e.workerState.state.progress=.2;const i=o.loadPyodide,a=e.workerState.pyodide_url.split("/").slice(0,-1).join("/");console.log(a),e.workerState.pyodide=await i({packages:["micropip"],indexURL:a}),e.workerState.interruptBuffer&&e.workerState.pyodide.setInterruptBuffer(e.workerState.interruptBuffer)}e.workerState.micropip||(console.debug("Importing micropip..."),e.workerState.state.msg="Importing micropip...",e.workerState.state.progress=.3,e.workerState.micropip=e.workerState.pyodide.pyimport("micropip")),console.debug("Pyodide ready. Installing funcnodes...");for(const o of e.workerState.packages)console.log("Installing package:",o),e.workerState.state.msg=`Installing package: ${o}`,await e.workerState.micropip.install(o);return e.workerState.state.msg="Installing funcnodes",e.workerState.state.progress=.8,await e.workerState.micropip.install("funcnodes"),e.workerState.state.msg="Installing funcnodes-worker",await e.workerState.micropip.install("funcnodes-worker"),e.workerState.state.msg="Installing funcnodes-pyodide",await e.workerState.micropip.install("funcnodes-pyodide"),e.workerState.state.msg="Importing funcnodes",console.debug("Importing funcnodes..."),await e.workerState.pyodide.runPythonAsync("import funcnodes_pyodide"),console.debug("Running post_pyodide_ready..."),await((t=(r=e.workerState).post_pyodide_ready)==null?void 0:t.call(r,e.workerState)),console.debug("Pyodide ready"),e.workerState.state.msg="ready",e.workerState.state.progress=.1,e.workerState.pyodideReady=!0,{pyodide:e.workerState.pyodide,micropip:e.workerState.micropip}},e.interrupt=()=>{e.workerState.interruptBuffer&&(e.workerState.interruptBuffer[0]=1)},e.list_workers=()=>Object.keys(e.workerState.worker),e.get_worker=async r=>{if(!r)throw new Error("Worker id is required");if(!e.workerState.worker[r])throw new Error(`Worker with id ${r} not found`);return await e.workerState.worker[r].make_promise,e.workerState.worker[r]},e.has_worker=r=>{if(!r)throw new Error("Worker id is required");return!!e.workerState.worker[r]},e.get_or_create_worker=async r=>{if(!r)throw new Error("Worker id is required");return e.workerState.worker[r]||(console.log("Creating worker with id",r),await e.initializeFuncNodesWorker(r)),e.get_worker(r)},e.initializeFuncNodesWorker=async r=>{try{if(!e.workerState.pyodideReadyPromise)throw new Error("Pyodide newer initialized");const{pyodide:t}=await e.workerState.pyodideReadyPromise;if(!e.has_worker(r)){e.workerState.worker[r]={worker:null,make_promise:void 0};const o=new Promise(async(i,a)=>{e.workerState.worker[r].reject_promise=a,console.debug(`Creating worker (${r})...`);const s=await t.runPythonAsync(`funcnodes_pyodide.new_worker(debug=${e.workerState.debug?1:0}, uuid="${r}")`);if(console.debug("Worker created:",s),typeof s.set_receiver=="function")s.set_receiver(self);else throw new Error("Worker does not expose a \'set_receiver\' method.");e.workerState.worker[r].worker=s,console.debug("Worker ready"),i(s)});e.workerState.worker[r].make_promise=o}return e.get_worker(r)}catch(t){throw console.error("Error during worker initialization:",t),t}},e.receivepy=(r,t)=>{try{let o={};if(typeof r=="string"?o.msg=r:o=r,o.msg===void 0)return;typeof o.msg!="string"&&(o.msg=JSON.stringify(o.msg)),t!==void 0&&(typeof t=="string"?o.worker_id||(o.worker_id=t):o={...t,...o});const i=o.worker_id;if(!i)throw new Error(`Worker id not provided in receivepy(${JSON.stringify(o)})`);if(!e.workerState.worker[i])throw new Error(`Worker with id ${i} not found in receivepy(${JSON.stringify(o)})`);e.workerState.receivepy(r,i)}catch(o){console.error("Error during receivepy:",o);return}},e.receivepy_bytes=(r,t)=>{r=r.toJs();try{let o={};if(r instanceof Uint8Array?o.msg=r:o=r,o.msg===void 0)return;t!==void 0&&(typeof t=="string"?o.worker_id||(o.worker_id=t):o={...t,...o});const i=o.worker_id;if(!i)throw new Error("Worker id not provided in receivepy_bytes");if(!e.workerState.worker[i])throw new Error(`Worker with id ${i} not found in receivepy_bytes`);e.workerState.receivepy_bytes(r,i)}catch(o){console.error("Error during receivepy_bytes:",o);return}},e.startInitialization=({debug:r=!1,receivepy:t,receivepy_bytes:o,pyodide_url:i,post_pyodide_ready:a,packages:s})=>(e.workerState.debug=r,e.workerState.pyodide_url=i||d,e.workerState.packages=s,e.workerState.receivepy=t,e.workerState.receivepy_bytes=o,e.workerState.pyodideReadyPromise=null,e.workerState.post_pyodide_ready=a,e.workerState),e.register_cmd_message=(r,t)=>{if(e.workerState.handel_register[r])throw new Error(`Command ${r} already registered`);e.workerState.handel_register[r]=t},e.register_cmd_message("ping",async r=>"pong"),e.register_cmd_message("init",async r=>{if(e.workerState.pyodideReadyPromise)throw new Error("Pyodide is already initialized");r.data&&(r.data.pyodide_url&&(e.workerState.pyodide_url=r.data.pyodide_url),r.data.packages&&(e.workerState.packages=r.data.packages),r.data.debug&&(e.workerState.debug=r.data.debug)),e.workerState.pyodideReadyPromise=e.initializePyodide()}),e.register_cmd_message("_eval",async r=>{var t;try{const o=await((t=e.workerState.pyodide)==null?void 0:t.runPythonAsync(r.msg||"print(\'No code provided\')"));return console.log("Eval result:",o),o}catch(o){console.error("Error during _eval:",o)}}),e.register_cmd_message("state",async r=>({state:{...e.workerState.state,loaded:e.workerState.pyodideReady}})),e.register_cmd_message("worker:state",async r=>({state:{loaded:!!(await e.get_or_create_worker(r.worker_id)).worker}})),e.register_cmd_message("worker:stop",async r=>{var o;if(!e.has_worker(r.worker_id))return;const t=await e.get_or_create_worker(r.worker_id);return t.worker&&(t.worker.stop(),t.worker=null,(o=t.reject_promise)==null||o.call(t,"Worker stopped")),delete e.workerState.worker[r.worker_id],{state:{loaded:!1}}}),e.register_cmd_message("worker:send",async r=>{const t=await e.get_or_create_worker(r.worker_id);if(!t.worker)throw new Error("Worker is not initialized");if(typeof t.worker.receivejs!="function")throw new Error(`Worker does not support receivejs: ${typeof t.worker.receivejs}`);t.worker.receivejs(r.msg)}),e.handleMessage=async r=>{const t={original:r};r.id&&(t.id=r.id),r.toJs===void 0&&(r.toJs=!0);try{if(r.cmd){const o=r;if(e.workerState.handel_register[o.cmd])t.result=await e.workerState.handel_register[o.cmd](o);else throw new Error("Unknown command: "+o.cmd)}else throw new Error("Unknown message format: "+JSON.stringify(r))}catch(o){t.error=o.message}return t},e.read_url_params=()=>{var a,s;const r=new URLSearchParams(self.location.search),t=((a=r.get("debug"))==null?void 0:a.toLowerCase())==="true",o=r.get("pyodide_url")||void 0,i=((s=r.get("packages"))==null?void 0:s.split(","))||[];return{debug:t,pyodide_url:o,packages:i}};const n=e;n.general_initalization=r=>{const t=n.read_url_params();n.startInitialization({...r,...t})};const w=n,c=n;c.init_dedicated_worker=r=>{const t=e;t.onmessage=async i=>{const a=i.data,s=await t.handleMessage(a);t.postMessage(s)};const o={...r,receivepy:(i,a)=>{t.postMessage({cmd:"receive",msg:i,worker_id:a})},receivepy_bytes(i,a){t.postMessage({cmd:"receive_bytes",msg:i,worker_id:a})}};t.general_initalization(o)},w.init_shared_worker=r=>{const t=e;t.connectedPorts=[],t.onconnect=i=>{const a=i.ports[0];t.connectedPorts.push(a),a.start(),console.debug("Port connected in shared worker"),a.onmessage=async s=>{const k=s.data,p=await t.handleMessage(k);a.postMessage(p)}};const o={...r,receivepy:(i,a)=>{t.connectedPorts.forEach(s=>{s.postMessage({cmd:"receive",msg:i,worker_id:a})})},receivepy_bytes(i,a){t.connectedPorts.forEach(s=>{s.postMessage({cmd:"receive_bytes",msg:i,worker_id:a})})}};t.general_initalization(o)},n.init_dedicated_worker({})})();\n', S = typeof self < "u" && self.Blob && new Blob([v], { type: "text/javascript;charset=utf-8" });
|
|
30
|
+
function $(r) {
|
|
31
|
+
let e;
|
|
32
|
+
try {
|
|
33
|
+
if (e = S && (self.URL || self.webkitURL).createObjectURL(S), !e) throw "";
|
|
34
|
+
const t = new Worker(e, {
|
|
35
|
+
name: r == null ? void 0 : r.name
|
|
36
|
+
});
|
|
37
|
+
return t.addEventListener("error", () => {
|
|
38
|
+
(self.URL || self.webkitURL).revokeObjectURL(e);
|
|
39
|
+
}), t;
|
|
40
|
+
} catch {
|
|
41
|
+
return new Worker(
|
|
42
|
+
"data:text/javascript;charset=utf-8," + encodeURIComponent(v),
|
|
43
|
+
{
|
|
44
|
+
name: r == null ? void 0 : r.name
|
|
45
|
+
}
|
|
46
|
+
);
|
|
47
|
+
} finally {
|
|
48
|
+
e && (self.URL || self.webkitURL).revokeObjectURL(e);
|
|
49
|
+
}
|
|
36
50
|
}
|
|
37
|
-
function
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
51
|
+
const b = '(function(){"use strict";const d="https://cdn.jsdelivr.net/pyodide/v0.27.2/full/pyodide.mjs",e=self;e.workerState={pyodide:null,pyodide_url:d,packages:[],state:{msg:"loading",loaded:!1,progress:0},micropip:null,worker:{},pyodideReady:!1,pyodideReadyPromise:null,debug:!1,interruptBuffer:null,receivepy:(r,t)=>{},receivepy_bytes:(r,t)=>{},handel_register:{},post_pyodide_ready:void 0},e.reset=async()=>{var r;for(const t in e.list_workers())try{const o=await e.get_worker(t);o.worker&&o.worker.stop(),(r=o.reject_promise)==null||r.call(o,"Worker reset")}catch{}e.workerState.pyodide&&e.interrupt(),e.workerState.pyodide=null,e.workerState.micropip=null,e.workerState.worker={},e.workerState.pyodideReady=!1;try{e.workerState.interruptBuffer=new Uint8Array(new SharedArrayBuffer(1)),e.workerState.interruptBuffer[0]=0}catch{}},e.initializePyodide=async()=>{var r,t;if(!e.workerState.pyodide){console.log("initializePyodide with: Debug:",e.workerState.debug,"Pyodide URL:",e.workerState.pyodide_url,"Packages:",e.workerState.packages),console.debug("Loading Pyodide..."),e.workerState.state.msg="Loading Pyodide...",e.workerState.state.progress=0,await e.reset(),console.debug("Loading Pyodide module..."),e.workerState.state.msg="Loading Pyodide module...",e.workerState.state.progress=.1;const o=await import(e.workerState.pyodide_url);console.debug("Loading Pyodide instance..."),e.workerState.state.msg="Loading Pyodide instance...",e.workerState.state.progress=.2;const i=o.loadPyodide,a=e.workerState.pyodide_url.split("/").slice(0,-1).join("/");console.log(a),e.workerState.pyodide=await i({packages:["micropip"],indexURL:a}),e.workerState.interruptBuffer&&e.workerState.pyodide.setInterruptBuffer(e.workerState.interruptBuffer)}e.workerState.micropip||(console.debug("Importing micropip..."),e.workerState.state.msg="Importing micropip...",e.workerState.state.progress=.3,e.workerState.micropip=e.workerState.pyodide.pyimport("micropip")),console.debug("Pyodide ready. Installing funcnodes...");for(const o of e.workerState.packages)console.log("Installing package:",o),e.workerState.state.msg=`Installing package: ${o}`,await e.workerState.micropip.install(o);return e.workerState.state.msg="Installing funcnodes",e.workerState.state.progress=.8,await e.workerState.micropip.install("funcnodes"),e.workerState.state.msg="Installing funcnodes-worker",await e.workerState.micropip.install("funcnodes-worker"),e.workerState.state.msg="Installing funcnodes-pyodide",await e.workerState.micropip.install("funcnodes-pyodide"),e.workerState.state.msg="Importing funcnodes",console.debug("Importing funcnodes..."),await e.workerState.pyodide.runPythonAsync("import funcnodes_pyodide"),console.debug("Running post_pyodide_ready..."),await((t=(r=e.workerState).post_pyodide_ready)==null?void 0:t.call(r,e.workerState)),console.debug("Pyodide ready"),e.workerState.state.msg="ready",e.workerState.state.progress=.1,e.workerState.pyodideReady=!0,{pyodide:e.workerState.pyodide,micropip:e.workerState.micropip}},e.interrupt=()=>{e.workerState.interruptBuffer&&(e.workerState.interruptBuffer[0]=1)},e.list_workers=()=>Object.keys(e.workerState.worker),e.get_worker=async r=>{if(!r)throw new Error("Worker id is required");if(!e.workerState.worker[r])throw new Error(`Worker with id ${r} not found`);return await e.workerState.worker[r].make_promise,e.workerState.worker[r]},e.has_worker=r=>{if(!r)throw new Error("Worker id is required");return!!e.workerState.worker[r]},e.get_or_create_worker=async r=>{if(!r)throw new Error("Worker id is required");return e.workerState.worker[r]||(console.log("Creating worker with id",r),await e.initializeFuncNodesWorker(r)),e.get_worker(r)},e.initializeFuncNodesWorker=async r=>{try{if(!e.workerState.pyodideReadyPromise)throw new Error("Pyodide newer initialized");const{pyodide:t}=await e.workerState.pyodideReadyPromise;if(!e.has_worker(r)){e.workerState.worker[r]={worker:null,make_promise:void 0};const o=new Promise(async(i,a)=>{e.workerState.worker[r].reject_promise=a,console.debug(`Creating worker (${r})...`);const s=await t.runPythonAsync(`funcnodes_pyodide.new_worker(debug=${e.workerState.debug?1:0}, uuid="${r}")`);if(console.debug("Worker created:",s),typeof s.set_receiver=="function")s.set_receiver(self);else throw new Error("Worker does not expose a \'set_receiver\' method.");e.workerState.worker[r].worker=s,console.debug("Worker ready"),i(s)});e.workerState.worker[r].make_promise=o}return e.get_worker(r)}catch(t){throw console.error("Error during worker initialization:",t),t}},e.receivepy=(r,t)=>{try{let o={};if(typeof r=="string"?o.msg=r:o=r,o.msg===void 0)return;typeof o.msg!="string"&&(o.msg=JSON.stringify(o.msg)),t!==void 0&&(typeof t=="string"?o.worker_id||(o.worker_id=t):o={...t,...o});const i=o.worker_id;if(!i)throw new Error(`Worker id not provided in receivepy(${JSON.stringify(o)})`);if(!e.workerState.worker[i])throw new Error(`Worker with id ${i} not found in receivepy(${JSON.stringify(o)})`);e.workerState.receivepy(r,i)}catch(o){console.error("Error during receivepy:",o);return}},e.receivepy_bytes=(r,t)=>{r=r.toJs();try{let o={};if(r instanceof Uint8Array?o.msg=r:o=r,o.msg===void 0)return;t!==void 0&&(typeof t=="string"?o.worker_id||(o.worker_id=t):o={...t,...o});const i=o.worker_id;if(!i)throw new Error("Worker id not provided in receivepy_bytes");if(!e.workerState.worker[i])throw new Error(`Worker with id ${i} not found in receivepy_bytes`);e.workerState.receivepy_bytes(r,i)}catch(o){console.error("Error during receivepy_bytes:",o);return}},e.startInitialization=({debug:r=!1,receivepy:t,receivepy_bytes:o,pyodide_url:i,post_pyodide_ready:a,packages:s})=>(e.workerState.debug=r,e.workerState.pyodide_url=i||d,e.workerState.packages=s,e.workerState.receivepy=t,e.workerState.receivepy_bytes=o,e.workerState.pyodideReadyPromise=null,e.workerState.post_pyodide_ready=a,e.workerState),e.register_cmd_message=(r,t)=>{if(e.workerState.handel_register[r])throw new Error(`Command ${r} already registered`);e.workerState.handel_register[r]=t},e.register_cmd_message("ping",async r=>"pong"),e.register_cmd_message("init",async r=>{if(e.workerState.pyodideReadyPromise)throw new Error("Pyodide is already initialized");r.data&&(r.data.pyodide_url&&(e.workerState.pyodide_url=r.data.pyodide_url),r.data.packages&&(e.workerState.packages=r.data.packages),r.data.debug&&(e.workerState.debug=r.data.debug)),e.workerState.pyodideReadyPromise=e.initializePyodide()}),e.register_cmd_message("_eval",async r=>{var t;try{const o=await((t=e.workerState.pyodide)==null?void 0:t.runPythonAsync(r.msg||"print(\'No code provided\')"));return console.log("Eval result:",o),o}catch(o){console.error("Error during _eval:",o)}}),e.register_cmd_message("state",async r=>({state:{...e.workerState.state,loaded:e.workerState.pyodideReady}})),e.register_cmd_message("worker:state",async r=>({state:{loaded:!!(await e.get_or_create_worker(r.worker_id)).worker}})),e.register_cmd_message("worker:stop",async r=>{var o;if(!e.has_worker(r.worker_id))return;const t=await e.get_or_create_worker(r.worker_id);return t.worker&&(t.worker.stop(),t.worker=null,(o=t.reject_promise)==null||o.call(t,"Worker stopped")),delete e.workerState.worker[r.worker_id],{state:{loaded:!1}}}),e.register_cmd_message("worker:send",async r=>{const t=await e.get_or_create_worker(r.worker_id);if(!t.worker)throw new Error("Worker is not initialized");if(typeof t.worker.receivejs!="function")throw new Error(`Worker does not support receivejs: ${typeof t.worker.receivejs}`);t.worker.receivejs(r.msg)}),e.handleMessage=async r=>{const t={original:r};r.id&&(t.id=r.id),r.toJs===void 0&&(r.toJs=!0);try{if(r.cmd){const o=r;if(e.workerState.handel_register[o.cmd])t.result=await e.workerState.handel_register[o.cmd](o);else throw new Error("Unknown command: "+o.cmd)}else throw new Error("Unknown message format: "+JSON.stringify(r))}catch(o){t.error=o.message}return t},e.read_url_params=()=>{var a,s;const r=new URLSearchParams(self.location.search),t=((a=r.get("debug"))==null?void 0:a.toLowerCase())==="true",o=r.get("pyodide_url")||void 0,i=((s=r.get("packages"))==null?void 0:s.split(","))||[];return{debug:t,pyodide_url:o,packages:i}};const n=e;n.general_initalization=r=>{const t=n.read_url_params();n.startInitialization({...r,...t})};const w=n,c=n;c.init_dedicated_worker=r=>{const t=e;t.onmessage=async i=>{const a=i.data,s=await t.handleMessage(a);t.postMessage(s)};const o={...r,receivepy:(i,a)=>{t.postMessage({cmd:"receive",msg:i,worker_id:a})},receivepy_bytes(i,a){t.postMessage({cmd:"receive_bytes",msg:i,worker_id:a})}};t.general_initalization(o)},w.init_shared_worker=r=>{const t=e;t.connectedPorts=[],t.onconnect=i=>{const a=i.ports[0];t.connectedPorts.push(a),a.start(),console.debug("Port connected in shared worker"),a.onmessage=async s=>{const k=s.data,p=await t.handleMessage(k);a.postMessage(p)}};const o={...r,receivepy:(i,a)=>{t.connectedPorts.forEach(s=>{s.postMessage({cmd:"receive",msg:i,worker_id:a})})},receivepy_bytes(i,a){t.connectedPorts.forEach(s=>{s.postMessage({cmd:"receive_bytes",msg:i,worker_id:a})})}};t.general_initalization(o)},n.init_shared_worker({})})();\n', h = typeof self < "u" && self.Blob && new Blob([b], { type: "text/javascript;charset=utf-8" });
|
|
52
|
+
function M(r) {
|
|
53
|
+
let e;
|
|
54
|
+
try {
|
|
55
|
+
if (e = h && (self.URL || self.webkitURL).createObjectURL(h), !e) throw "";
|
|
56
|
+
const t = new Worker(e, {
|
|
57
|
+
name: r == null ? void 0 : r.name
|
|
58
|
+
});
|
|
59
|
+
return t.addEventListener("error", () => {
|
|
60
|
+
(self.URL || self.webkitURL).revokeObjectURL(e);
|
|
61
|
+
}), t;
|
|
62
|
+
} catch {
|
|
63
|
+
return new Worker(
|
|
64
|
+
"data:text/javascript;charset=utf-8," + encodeURIComponent(b),
|
|
65
|
+
{
|
|
66
|
+
name: r == null ? void 0 : r.name
|
|
67
|
+
}
|
|
68
|
+
);
|
|
69
|
+
} finally {
|
|
70
|
+
e && (self.URL || self.webkitURL).revokeObjectURL(e);
|
|
71
|
+
}
|
|
44
72
|
}
|
|
45
|
-
const
|
|
46
|
-
name:
|
|
47
|
-
}) :
|
|
48
|
-
name:
|
|
73
|
+
const B = (r) => (r.worker || (r.shared_worker ? r.worker_url === void 0 ? r.worker = new M({
|
|
74
|
+
name: r.uuid
|
|
75
|
+
}) : r.worker = new SharedWorker(r.worker_url, {
|
|
76
|
+
name: r.uuid,
|
|
49
77
|
type: "module"
|
|
50
|
-
}) :
|
|
51
|
-
name:
|
|
52
|
-
}) :
|
|
53
|
-
name:
|
|
78
|
+
}) : r.worker_url === void 0 ? r.worker = new $({
|
|
79
|
+
name: r.uuid
|
|
80
|
+
}) : r.worker = new Worker(r.worker_url, {
|
|
81
|
+
name: r.uuid,
|
|
54
82
|
type: "module"
|
|
55
|
-
})),
|
|
56
|
-
class
|
|
57
|
-
constructor(
|
|
83
|
+
})), r.worker);
|
|
84
|
+
class x extends W {
|
|
85
|
+
constructor(e) {
|
|
58
86
|
const t = {
|
|
59
|
-
uuid:
|
|
60
|
-
...
|
|
87
|
+
uuid: z(),
|
|
88
|
+
...e
|
|
61
89
|
};
|
|
62
|
-
if (super(t), this._message_hooks = [], this._worker =
|
|
90
|
+
if (super(t), this._message_hooks = [], this._worker = B(t), this._worker instanceof SharedWorker)
|
|
63
91
|
t.shared_worker = !0, this._port = this._worker.port, this._port.start(), this._port.addEventListener("message", this.onmessage.bind(this));
|
|
64
92
|
else if (this._worker instanceof Worker)
|
|
65
93
|
t.shared_worker = !1, this._worker.addEventListener("message", this.onmessage.bind(this));
|
|
@@ -73,95 +101,95 @@ class N extends U {
|
|
|
73
101
|
packages: t.packages
|
|
74
102
|
}
|
|
75
103
|
});
|
|
76
|
-
const
|
|
104
|
+
const i = setInterval(() => {
|
|
77
105
|
this.postMessage({ cmd: "state" });
|
|
78
106
|
}, 400);
|
|
79
|
-
this._workerstate = { loaded: !1, msg: "loading", progress: 0 }, this.initPromise = new Promise(async (
|
|
107
|
+
this._workerstate = { loaded: !1, msg: "loading", progress: 0 }, this.initPromise = new Promise(async (a) => {
|
|
80
108
|
var c;
|
|
81
109
|
for (; !this._workerstate.loaded; )
|
|
82
|
-
await new Promise((
|
|
83
|
-
clearInterval(
|
|
110
|
+
await new Promise((k) => setTimeout(k, 100));
|
|
111
|
+
clearInterval(i), this.is_open = !0, (c = this._zustand) == null || c.auto_progress(), a();
|
|
84
112
|
}), this.initPromise.then(() => {
|
|
85
113
|
this.stepwise_fullsync();
|
|
86
114
|
});
|
|
87
115
|
}
|
|
88
|
-
async send(
|
|
116
|
+
async send(e) {
|
|
89
117
|
await this.initPromise, this.postMessage({
|
|
90
118
|
cmd: "worker:send",
|
|
91
|
-
msg: JSON.stringify(
|
|
119
|
+
msg: JSON.stringify(e),
|
|
92
120
|
worker_id: this.uuid
|
|
93
121
|
});
|
|
94
122
|
}
|
|
95
|
-
postMessage(
|
|
96
|
-
|
|
123
|
+
postMessage(e) {
|
|
124
|
+
e.worker_id = this.uuid, this._port ? this._port.postMessage(e) : this._worker.postMessage(e);
|
|
97
125
|
}
|
|
98
|
-
registerMessageHook(
|
|
99
|
-
return this._message_hooks.push(
|
|
100
|
-
this._message_hooks = this._message_hooks.filter((t) => t !==
|
|
126
|
+
registerMessageHook(e) {
|
|
127
|
+
return this._message_hooks.push(e), () => {
|
|
128
|
+
this._message_hooks = this._message_hooks.filter((t) => t !== e);
|
|
101
129
|
};
|
|
102
130
|
}
|
|
103
|
-
onmessage(
|
|
131
|
+
onmessage(e) {
|
|
104
132
|
var t;
|
|
105
|
-
for (const
|
|
106
|
-
|
|
107
|
-
if (
|
|
108
|
-
|
|
133
|
+
for (const i of this._message_hooks)
|
|
134
|
+
i(e.data);
|
|
135
|
+
if (e.data.result)
|
|
136
|
+
e.data.result.state && (this._workerstate = {
|
|
109
137
|
...this._workerstate,
|
|
110
|
-
...
|
|
111
|
-
},
|
|
138
|
+
...e.data.result.state
|
|
139
|
+
}, e.data.result.state.msg && e.data.result.state.msg !== "ready" && ((t = this._zustand) == null || t.set_progress({
|
|
112
140
|
message: this._workerstate.msg,
|
|
113
141
|
status: "info",
|
|
114
142
|
progress: this._workerstate.progress,
|
|
115
143
|
blocking: !0
|
|
116
144
|
})));
|
|
117
|
-
else if (
|
|
118
|
-
if (
|
|
119
|
-
if (
|
|
145
|
+
else if (e.data.cmd) {
|
|
146
|
+
if (e.data.cmd === "receive") {
|
|
147
|
+
if (e.data.worker_id === void 0)
|
|
120
148
|
throw new Error("worker_id is undefined");
|
|
121
|
-
|
|
122
|
-
} else if (
|
|
123
|
-
if (
|
|
149
|
+
e.data.worker_id === this.uuid && this.receive(JSON.parse(e.data.msg));
|
|
150
|
+
} else if (e.data.cmd === "receive_bytes") {
|
|
151
|
+
if (e.data.worker_id === void 0)
|
|
124
152
|
throw new Error("worker_id is undefined");
|
|
125
|
-
|
|
153
|
+
e.data.worker_id === this.uuid && this.onbytes(e.data.msg);
|
|
126
154
|
}
|
|
127
155
|
}
|
|
128
156
|
}
|
|
129
157
|
async upload_file({
|
|
130
|
-
files:
|
|
158
|
+
files: e,
|
|
131
159
|
onProgressCallback: t,
|
|
132
|
-
root:
|
|
160
|
+
root: i
|
|
133
161
|
}) {
|
|
134
|
-
const
|
|
135
|
-
let
|
|
136
|
-
if (
|
|
162
|
+
const a = [], c = e.length;
|
|
163
|
+
let k = 0;
|
|
164
|
+
if (e.length === 0)
|
|
137
165
|
return "";
|
|
138
|
-
for (let d = 0; d <
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
var
|
|
166
|
+
for (let d = 0; d < e.length; d++) {
|
|
167
|
+
const w = e[d], n = new FileReader(), p = new Promise((l, s) => {
|
|
168
|
+
n.onload = async (P) => {
|
|
169
|
+
var _;
|
|
142
170
|
try {
|
|
143
|
-
const
|
|
171
|
+
const g = (_ = P.target.result) == null ? void 0 : _.replace(/^data:.+;base64,/, ""), m = w.webkitRelativePath || w.name, R = i ? `${i}/${m}` : m, E = await this._send_cmd({
|
|
144
172
|
cmd: "upload",
|
|
145
|
-
kwargs: { data:
|
|
173
|
+
kwargs: { data: g, filename: R },
|
|
146
174
|
wait_for_response: !0
|
|
147
175
|
});
|
|
148
|
-
|
|
149
|
-
} catch (
|
|
150
|
-
|
|
176
|
+
k++, t && t(k, c), l(E);
|
|
177
|
+
} catch (g) {
|
|
178
|
+
s(g);
|
|
151
179
|
}
|
|
152
|
-
},
|
|
180
|
+
}, n.readAsDataURL(w);
|
|
153
181
|
});
|
|
154
|
-
|
|
182
|
+
a.push(p);
|
|
155
183
|
}
|
|
156
|
-
const
|
|
157
|
-
return
|
|
158
|
-
const
|
|
159
|
-
for (let
|
|
160
|
-
l.push(
|
|
184
|
+
const y = await Promise.all(a);
|
|
185
|
+
return y.reduce((d, w) => {
|
|
186
|
+
const n = w.split("/"), p = d.split("/"), l = [];
|
|
187
|
+
for (let s = 0; s < n.length && n[s] === p[s]; s++)
|
|
188
|
+
l.push(n[s]);
|
|
161
189
|
return l.join("/");
|
|
162
|
-
},
|
|
190
|
+
}, y[0]);
|
|
163
191
|
}
|
|
164
192
|
}
|
|
165
193
|
export {
|
|
166
|
-
|
|
194
|
+
x as default
|
|
167
195
|
};
|
package/dist/index.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(a,s){typeof exports=="object"&&typeof module<"u"?module.exports=s(require("@linkdlab/funcnodes_react_flow")):typeof define=="function"&&define.amd?define(["@linkdlab/funcnodes_react_flow"],s):(a=typeof globalThis<"u"?globalThis:a||self,a.funcnodes_pyodide_react_flow=s(a.funcnodes_react_flow))})(this,function(a){"use strict";const s=[];for(let e=0;e<256;++e)s.push((e+256).toString(16).slice(1));function b(e,r=0){return(s[e[r+0]]+s[e[r+1]]+s[e[r+2]]+s[e[r+3]]+"-"+s[e[r+4]]+s[e[r+5]]+"-"+s[e[r+6]]+s[e[r+7]]+"-"+s[e[r+8]]+s[e[r+9]]+"-"+s[e[r+10]]+s[e[r+11]]+s[e[r+12]]+s[e[r+13]]+s[e[r+14]]+s[e[r+15]]).toLowerCase()}let w;const W=new Uint8Array(16);function U(){if(!w){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");w=crypto.getRandomValues.bind(crypto)}return w(W)}const g={randomUUID:typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function P(e,r,t){var i;if(g.randomUUID&&!e)return g.randomUUID();e=e||{};const o=e.random??((i=e.rng)==null?void 0:i.call(e))??U();if(o.length<16)throw new Error("Random bytes length must be >= 16");return o[6]=o[6]&15|64,o[8]=o[8]&63|128,b(o)}function x(e){return new Worker("/assets/pyodideDedicatedWorker-XEcNtM2X.js",{name:e==null?void 0:e.name})}function I(e){return new Worker("/assets/pyodideSharedWorker-BIPs7KQu.js",{name:e==null?void 0:e.name})}const S=e=>(e.worker||(e.shared_worker?e.worker_url===void 0?e.worker=new I({name:e.uuid}):e.worker=new SharedWorker(e.worker_url,{name:e.uuid,type:"module"}):e.worker_url===void 0?e.worker=new x({name:e.uuid}):e.worker=new Worker(e.worker_url,{name:e.uuid,type:"module"})),e.worker);class D extends a.FuncNodesWorker{constructor(r){const t={uuid:P(),...r};if(super(t),this._message_hooks=[],this._worker=S(t),this._worker instanceof SharedWorker)t.shared_worker=!0,this._port=this._worker.port,this._port.start(),this._port.addEventListener("message",this.onmessage.bind(this));else if(this._worker instanceof Worker)t.shared_worker=!1,this._worker.addEventListener("message",this.onmessage.bind(this));else throw new Error("worker must be an instance of Worker or SharedWorker");this.postMessage({cmd:"init",data:{debug:t.debug,pyodide_url:t.pyodide_url,packages:t.packages}});const o=setInterval(()=>{this.postMessage({cmd:"state"})},400);this._workerstate={loaded:!1,msg:"loading",progress:0},this.initPromise=new Promise(async i=>{var l;for(;!this._workerstate.loaded;)await new Promise(h=>setTimeout(h,100));clearInterval(o),this.is_open=!0,(l=this._zustand)==null||l.auto_progress(),i()}),this.initPromise.then(()=>{this.stepwise_fullsync()})}async send(r){await this.initPromise,this.postMessage({cmd:"worker:send",msg:JSON.stringify(r),worker_id:this.uuid})}postMessage(r){r.worker_id=this.uuid,this._port?this._port.postMessage(r):this._worker.postMessage(r)}registerMessageHook(r){return this._message_hooks.push(r),()=>{this._message_hooks=this._message_hooks.filter(t=>t!==r)}}onmessage(r){var t;for(const o of this._message_hooks)o(r.data);if(r.data.result)r.data.result.state&&(this._workerstate={...this._workerstate,...r.data.result.state},r.data.result.state.msg&&r.data.result.state.msg!=="ready"&&((t=this._zustand)==null||t.set_progress({message:this._workerstate.msg,status:"info",progress:this._workerstate.progress,blocking:!0})));else if(r.data.cmd){if(r.data.cmd==="receive"){if(r.data.worker_id===void 0)throw new Error("worker_id is undefined");r.data.worker_id===this.uuid&&this.receive(JSON.parse(r.data.msg))}else if(r.data.cmd==="receive_bytes"){if(r.data.worker_id===void 0)throw new Error("worker_id is undefined");r.data.worker_id===this.uuid&&this.onbytes(r.data.msg)}}}async upload_file({files:r,onProgressCallback:t,root:o}){const i=[],l=r.length;let h=0;if(r.length===0)return"";for(let u=0;u<r.length;u++){const c=r[u],d=new FileReader,_=new Promise((m,n)=>{d.onload=async E=>{var f;try{const k=(f=E.target.result)==null?void 0:f.replace(/^data:.+;base64,/,""),y=c.webkitRelativePath||c.name,M=o?`${o}/${y}`:y,R=await this._send_cmd({cmd:"upload",kwargs:{data:k,filename:M},wait_for_response:!0});h++,t&&t(h,l),m(R)}catch(k){n(k)}},d.readAsDataURL(c)});i.push(_)}const p=await Promise.all(i);return p.reduce((u,c)=>{const d=c.split("/"),_=u.split("/"),m=[];for(let n=0;n<d.length&&d[n]===_[n];n++)m.push(d[n]);return m.join("/")},p[0])}}return D});
|
|
1
|
+
(function(n,o){typeof exports=="object"&&typeof module<"u"?module.exports=o(require("@linkdlab/funcnodes_react_flow")):typeof define=="function"&&define.amd?define(["@linkdlab/funcnodes_react_flow"],o):(n=typeof globalThis<"u"?globalThis:n||self,n.funcnodes_pyodide_react_flow=o(n.funcnodes_react_flow))})(this,function(n){"use strict";const o=[];for(let r=0;r<256;++r)o.push((r+256).toString(16).slice(1));function R(r,e=0){return(o[r[e+0]]+o[r[e+1]]+o[r[e+2]]+o[r[e+3]]+"-"+o[r[e+4]]+o[r[e+5]]+"-"+o[r[e+6]]+o[r[e+7]]+"-"+o[r[e+8]]+o[r[e+9]]+"-"+o[r[e+10]]+o[r[e+11]]+o[r[e+12]]+o[r[e+13]]+o[r[e+14]]+o[r[e+15]]).toLowerCase()}let g;const E=new Uint8Array(16);function U(){if(!g){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");g=crypto.getRandomValues.bind(crypto)}return g(E)}const _={randomUUID:typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function W(r,e,t){var a;if(_.randomUUID&&!r)return _.randomUUID();r=r||{};const i=r.random??((a=r.rng)==null?void 0:a.call(r))??U();if(i.length<16)throw new Error("Random bytes length must be >= 16");return i[6]=i[6]&15|64,i[8]=i[8]&63|128,R(i)}const m='(function(){"use strict";const d="https://cdn.jsdelivr.net/pyodide/v0.27.2/full/pyodide.mjs",e=self;e.workerState={pyodide:null,pyodide_url:d,packages:[],state:{msg:"loading",loaded:!1,progress:0},micropip:null,worker:{},pyodideReady:!1,pyodideReadyPromise:null,debug:!1,interruptBuffer:null,receivepy:(r,t)=>{},receivepy_bytes:(r,t)=>{},handel_register:{},post_pyodide_ready:void 0},e.reset=async()=>{var r;for(const t in e.list_workers())try{const o=await e.get_worker(t);o.worker&&o.worker.stop(),(r=o.reject_promise)==null||r.call(o,"Worker reset")}catch{}e.workerState.pyodide&&e.interrupt(),e.workerState.pyodide=null,e.workerState.micropip=null,e.workerState.worker={},e.workerState.pyodideReady=!1;try{e.workerState.interruptBuffer=new Uint8Array(new SharedArrayBuffer(1)),e.workerState.interruptBuffer[0]=0}catch{}},e.initializePyodide=async()=>{var r,t;if(!e.workerState.pyodide){console.log("initializePyodide with: Debug:",e.workerState.debug,"Pyodide URL:",e.workerState.pyodide_url,"Packages:",e.workerState.packages),console.debug("Loading Pyodide..."),e.workerState.state.msg="Loading Pyodide...",e.workerState.state.progress=0,await e.reset(),console.debug("Loading Pyodide module..."),e.workerState.state.msg="Loading Pyodide module...",e.workerState.state.progress=.1;const o=await import(e.workerState.pyodide_url);console.debug("Loading Pyodide instance..."),e.workerState.state.msg="Loading Pyodide instance...",e.workerState.state.progress=.2;const i=o.loadPyodide,a=e.workerState.pyodide_url.split("/").slice(0,-1).join("/");console.log(a),e.workerState.pyodide=await i({packages:["micropip"],indexURL:a}),e.workerState.interruptBuffer&&e.workerState.pyodide.setInterruptBuffer(e.workerState.interruptBuffer)}e.workerState.micropip||(console.debug("Importing micropip..."),e.workerState.state.msg="Importing micropip...",e.workerState.state.progress=.3,e.workerState.micropip=e.workerState.pyodide.pyimport("micropip")),console.debug("Pyodide ready. Installing funcnodes...");for(const o of e.workerState.packages)console.log("Installing package:",o),e.workerState.state.msg=`Installing package: ${o}`,await e.workerState.micropip.install(o);return e.workerState.state.msg="Installing funcnodes",e.workerState.state.progress=.8,await e.workerState.micropip.install("funcnodes"),e.workerState.state.msg="Installing funcnodes-worker",await e.workerState.micropip.install("funcnodes-worker"),e.workerState.state.msg="Installing funcnodes-pyodide",await e.workerState.micropip.install("funcnodes-pyodide"),e.workerState.state.msg="Importing funcnodes",console.debug("Importing funcnodes..."),await e.workerState.pyodide.runPythonAsync("import funcnodes_pyodide"),console.debug("Running post_pyodide_ready..."),await((t=(r=e.workerState).post_pyodide_ready)==null?void 0:t.call(r,e.workerState)),console.debug("Pyodide ready"),e.workerState.state.msg="ready",e.workerState.state.progress=.1,e.workerState.pyodideReady=!0,{pyodide:e.workerState.pyodide,micropip:e.workerState.micropip}},e.interrupt=()=>{e.workerState.interruptBuffer&&(e.workerState.interruptBuffer[0]=1)},e.list_workers=()=>Object.keys(e.workerState.worker),e.get_worker=async r=>{if(!r)throw new Error("Worker id is required");if(!e.workerState.worker[r])throw new Error(`Worker with id ${r} not found`);return await e.workerState.worker[r].make_promise,e.workerState.worker[r]},e.has_worker=r=>{if(!r)throw new Error("Worker id is required");return!!e.workerState.worker[r]},e.get_or_create_worker=async r=>{if(!r)throw new Error("Worker id is required");return e.workerState.worker[r]||(console.log("Creating worker with id",r),await e.initializeFuncNodesWorker(r)),e.get_worker(r)},e.initializeFuncNodesWorker=async r=>{try{if(!e.workerState.pyodideReadyPromise)throw new Error("Pyodide newer initialized");const{pyodide:t}=await e.workerState.pyodideReadyPromise;if(!e.has_worker(r)){e.workerState.worker[r]={worker:null,make_promise:void 0};const o=new Promise(async(i,a)=>{e.workerState.worker[r].reject_promise=a,console.debug(`Creating worker (${r})...`);const s=await t.runPythonAsync(`funcnodes_pyodide.new_worker(debug=${e.workerState.debug?1:0}, uuid="${r}")`);if(console.debug("Worker created:",s),typeof s.set_receiver=="function")s.set_receiver(self);else throw new Error("Worker does not expose a \'set_receiver\' method.");e.workerState.worker[r].worker=s,console.debug("Worker ready"),i(s)});e.workerState.worker[r].make_promise=o}return e.get_worker(r)}catch(t){throw console.error("Error during worker initialization:",t),t}},e.receivepy=(r,t)=>{try{let o={};if(typeof r=="string"?o.msg=r:o=r,o.msg===void 0)return;typeof o.msg!="string"&&(o.msg=JSON.stringify(o.msg)),t!==void 0&&(typeof t=="string"?o.worker_id||(o.worker_id=t):o={...t,...o});const i=o.worker_id;if(!i)throw new Error(`Worker id not provided in receivepy(${JSON.stringify(o)})`);if(!e.workerState.worker[i])throw new Error(`Worker with id ${i} not found in receivepy(${JSON.stringify(o)})`);e.workerState.receivepy(r,i)}catch(o){console.error("Error during receivepy:",o);return}},e.receivepy_bytes=(r,t)=>{r=r.toJs();try{let o={};if(r instanceof Uint8Array?o.msg=r:o=r,o.msg===void 0)return;t!==void 0&&(typeof t=="string"?o.worker_id||(o.worker_id=t):o={...t,...o});const i=o.worker_id;if(!i)throw new Error("Worker id not provided in receivepy_bytes");if(!e.workerState.worker[i])throw new Error(`Worker with id ${i} not found in receivepy_bytes`);e.workerState.receivepy_bytes(r,i)}catch(o){console.error("Error during receivepy_bytes:",o);return}},e.startInitialization=({debug:r=!1,receivepy:t,receivepy_bytes:o,pyodide_url:i,post_pyodide_ready:a,packages:s})=>(e.workerState.debug=r,e.workerState.pyodide_url=i||d,e.workerState.packages=s,e.workerState.receivepy=t,e.workerState.receivepy_bytes=o,e.workerState.pyodideReadyPromise=null,e.workerState.post_pyodide_ready=a,e.workerState),e.register_cmd_message=(r,t)=>{if(e.workerState.handel_register[r])throw new Error(`Command ${r} already registered`);e.workerState.handel_register[r]=t},e.register_cmd_message("ping",async r=>"pong"),e.register_cmd_message("init",async r=>{if(e.workerState.pyodideReadyPromise)throw new Error("Pyodide is already initialized");r.data&&(r.data.pyodide_url&&(e.workerState.pyodide_url=r.data.pyodide_url),r.data.packages&&(e.workerState.packages=r.data.packages),r.data.debug&&(e.workerState.debug=r.data.debug)),e.workerState.pyodideReadyPromise=e.initializePyodide()}),e.register_cmd_message("_eval",async r=>{var t;try{const o=await((t=e.workerState.pyodide)==null?void 0:t.runPythonAsync(r.msg||"print(\'No code provided\')"));return console.log("Eval result:",o),o}catch(o){console.error("Error during _eval:",o)}}),e.register_cmd_message("state",async r=>({state:{...e.workerState.state,loaded:e.workerState.pyodideReady}})),e.register_cmd_message("worker:state",async r=>({state:{loaded:!!(await e.get_or_create_worker(r.worker_id)).worker}})),e.register_cmd_message("worker:stop",async r=>{var o;if(!e.has_worker(r.worker_id))return;const t=await e.get_or_create_worker(r.worker_id);return t.worker&&(t.worker.stop(),t.worker=null,(o=t.reject_promise)==null||o.call(t,"Worker stopped")),delete e.workerState.worker[r.worker_id],{state:{loaded:!1}}}),e.register_cmd_message("worker:send",async r=>{const t=await e.get_or_create_worker(r.worker_id);if(!t.worker)throw new Error("Worker is not initialized");if(typeof t.worker.receivejs!="function")throw new Error(`Worker does not support receivejs: ${typeof t.worker.receivejs}`);t.worker.receivejs(r.msg)}),e.handleMessage=async r=>{const t={original:r};r.id&&(t.id=r.id),r.toJs===void 0&&(r.toJs=!0);try{if(r.cmd){const o=r;if(e.workerState.handel_register[o.cmd])t.result=await e.workerState.handel_register[o.cmd](o);else throw new Error("Unknown command: "+o.cmd)}else throw new Error("Unknown message format: "+JSON.stringify(r))}catch(o){t.error=o.message}return t},e.read_url_params=()=>{var a,s;const r=new URLSearchParams(self.location.search),t=((a=r.get("debug"))==null?void 0:a.toLowerCase())==="true",o=r.get("pyodide_url")||void 0,i=((s=r.get("packages"))==null?void 0:s.split(","))||[];return{debug:t,pyodide_url:o,packages:i}};const n=e;n.general_initalization=r=>{const t=n.read_url_params();n.startInitialization({...r,...t})};const w=n,c=n;c.init_dedicated_worker=r=>{const t=e;t.onmessage=async i=>{const a=i.data,s=await t.handleMessage(a);t.postMessage(s)};const o={...r,receivepy:(i,a)=>{t.postMessage({cmd:"receive",msg:i,worker_id:a})},receivepy_bytes(i,a){t.postMessage({cmd:"receive_bytes",msg:i,worker_id:a})}};t.general_initalization(o)},w.init_shared_worker=r=>{const t=e;t.connectedPorts=[],t.onconnect=i=>{const a=i.ports[0];t.connectedPorts.push(a),a.start(),console.debug("Port connected in shared worker"),a.onmessage=async s=>{const k=s.data,p=await t.handleMessage(k);a.postMessage(p)}};const o={...r,receivepy:(i,a)=>{t.connectedPorts.forEach(s=>{s.postMessage({cmd:"receive",msg:i,worker_id:a})})},receivepy_bytes(i,a){t.connectedPorts.forEach(s=>{s.postMessage({cmd:"receive_bytes",msg:i,worker_id:a})})}};t.general_initalization(o)},n.init_dedicated_worker({})})();\n',f=typeof self<"u"&&self.Blob&&new Blob([m],{type:"text/javascript;charset=utf-8"});function L(r){let e;try{if(e=f&&(self.URL||self.webkitURL).createObjectURL(f),!e)throw"";const t=new Worker(e,{name:r==null?void 0:r.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(m),{name:r==null?void 0:r.name})}finally{e&&(self.URL||self.webkitURL).revokeObjectURL(e)}}const S='(function(){"use strict";const d="https://cdn.jsdelivr.net/pyodide/v0.27.2/full/pyodide.mjs",e=self;e.workerState={pyodide:null,pyodide_url:d,packages:[],state:{msg:"loading",loaded:!1,progress:0},micropip:null,worker:{},pyodideReady:!1,pyodideReadyPromise:null,debug:!1,interruptBuffer:null,receivepy:(r,t)=>{},receivepy_bytes:(r,t)=>{},handel_register:{},post_pyodide_ready:void 0},e.reset=async()=>{var r;for(const t in e.list_workers())try{const o=await e.get_worker(t);o.worker&&o.worker.stop(),(r=o.reject_promise)==null||r.call(o,"Worker reset")}catch{}e.workerState.pyodide&&e.interrupt(),e.workerState.pyodide=null,e.workerState.micropip=null,e.workerState.worker={},e.workerState.pyodideReady=!1;try{e.workerState.interruptBuffer=new Uint8Array(new SharedArrayBuffer(1)),e.workerState.interruptBuffer[0]=0}catch{}},e.initializePyodide=async()=>{var r,t;if(!e.workerState.pyodide){console.log("initializePyodide with: Debug:",e.workerState.debug,"Pyodide URL:",e.workerState.pyodide_url,"Packages:",e.workerState.packages),console.debug("Loading Pyodide..."),e.workerState.state.msg="Loading Pyodide...",e.workerState.state.progress=0,await e.reset(),console.debug("Loading Pyodide module..."),e.workerState.state.msg="Loading Pyodide module...",e.workerState.state.progress=.1;const o=await import(e.workerState.pyodide_url);console.debug("Loading Pyodide instance..."),e.workerState.state.msg="Loading Pyodide instance...",e.workerState.state.progress=.2;const i=o.loadPyodide,a=e.workerState.pyodide_url.split("/").slice(0,-1).join("/");console.log(a),e.workerState.pyodide=await i({packages:["micropip"],indexURL:a}),e.workerState.interruptBuffer&&e.workerState.pyodide.setInterruptBuffer(e.workerState.interruptBuffer)}e.workerState.micropip||(console.debug("Importing micropip..."),e.workerState.state.msg="Importing micropip...",e.workerState.state.progress=.3,e.workerState.micropip=e.workerState.pyodide.pyimport("micropip")),console.debug("Pyodide ready. Installing funcnodes...");for(const o of e.workerState.packages)console.log("Installing package:",o),e.workerState.state.msg=`Installing package: ${o}`,await e.workerState.micropip.install(o);return e.workerState.state.msg="Installing funcnodes",e.workerState.state.progress=.8,await e.workerState.micropip.install("funcnodes"),e.workerState.state.msg="Installing funcnodes-worker",await e.workerState.micropip.install("funcnodes-worker"),e.workerState.state.msg="Installing funcnodes-pyodide",await e.workerState.micropip.install("funcnodes-pyodide"),e.workerState.state.msg="Importing funcnodes",console.debug("Importing funcnodes..."),await e.workerState.pyodide.runPythonAsync("import funcnodes_pyodide"),console.debug("Running post_pyodide_ready..."),await((t=(r=e.workerState).post_pyodide_ready)==null?void 0:t.call(r,e.workerState)),console.debug("Pyodide ready"),e.workerState.state.msg="ready",e.workerState.state.progress=.1,e.workerState.pyodideReady=!0,{pyodide:e.workerState.pyodide,micropip:e.workerState.micropip}},e.interrupt=()=>{e.workerState.interruptBuffer&&(e.workerState.interruptBuffer[0]=1)},e.list_workers=()=>Object.keys(e.workerState.worker),e.get_worker=async r=>{if(!r)throw new Error("Worker id is required");if(!e.workerState.worker[r])throw new Error(`Worker with id ${r} not found`);return await e.workerState.worker[r].make_promise,e.workerState.worker[r]},e.has_worker=r=>{if(!r)throw new Error("Worker id is required");return!!e.workerState.worker[r]},e.get_or_create_worker=async r=>{if(!r)throw new Error("Worker id is required");return e.workerState.worker[r]||(console.log("Creating worker with id",r),await e.initializeFuncNodesWorker(r)),e.get_worker(r)},e.initializeFuncNodesWorker=async r=>{try{if(!e.workerState.pyodideReadyPromise)throw new Error("Pyodide newer initialized");const{pyodide:t}=await e.workerState.pyodideReadyPromise;if(!e.has_worker(r)){e.workerState.worker[r]={worker:null,make_promise:void 0};const o=new Promise(async(i,a)=>{e.workerState.worker[r].reject_promise=a,console.debug(`Creating worker (${r})...`);const s=await t.runPythonAsync(`funcnodes_pyodide.new_worker(debug=${e.workerState.debug?1:0}, uuid="${r}")`);if(console.debug("Worker created:",s),typeof s.set_receiver=="function")s.set_receiver(self);else throw new Error("Worker does not expose a \'set_receiver\' method.");e.workerState.worker[r].worker=s,console.debug("Worker ready"),i(s)});e.workerState.worker[r].make_promise=o}return e.get_worker(r)}catch(t){throw console.error("Error during worker initialization:",t),t}},e.receivepy=(r,t)=>{try{let o={};if(typeof r=="string"?o.msg=r:o=r,o.msg===void 0)return;typeof o.msg!="string"&&(o.msg=JSON.stringify(o.msg)),t!==void 0&&(typeof t=="string"?o.worker_id||(o.worker_id=t):o={...t,...o});const i=o.worker_id;if(!i)throw new Error(`Worker id not provided in receivepy(${JSON.stringify(o)})`);if(!e.workerState.worker[i])throw new Error(`Worker with id ${i} not found in receivepy(${JSON.stringify(o)})`);e.workerState.receivepy(r,i)}catch(o){console.error("Error during receivepy:",o);return}},e.receivepy_bytes=(r,t)=>{r=r.toJs();try{let o={};if(r instanceof Uint8Array?o.msg=r:o=r,o.msg===void 0)return;t!==void 0&&(typeof t=="string"?o.worker_id||(o.worker_id=t):o={...t,...o});const i=o.worker_id;if(!i)throw new Error("Worker id not provided in receivepy_bytes");if(!e.workerState.worker[i])throw new Error(`Worker with id ${i} not found in receivepy_bytes`);e.workerState.receivepy_bytes(r,i)}catch(o){console.error("Error during receivepy_bytes:",o);return}},e.startInitialization=({debug:r=!1,receivepy:t,receivepy_bytes:o,pyodide_url:i,post_pyodide_ready:a,packages:s})=>(e.workerState.debug=r,e.workerState.pyodide_url=i||d,e.workerState.packages=s,e.workerState.receivepy=t,e.workerState.receivepy_bytes=o,e.workerState.pyodideReadyPromise=null,e.workerState.post_pyodide_ready=a,e.workerState),e.register_cmd_message=(r,t)=>{if(e.workerState.handel_register[r])throw new Error(`Command ${r} already registered`);e.workerState.handel_register[r]=t},e.register_cmd_message("ping",async r=>"pong"),e.register_cmd_message("init",async r=>{if(e.workerState.pyodideReadyPromise)throw new Error("Pyodide is already initialized");r.data&&(r.data.pyodide_url&&(e.workerState.pyodide_url=r.data.pyodide_url),r.data.packages&&(e.workerState.packages=r.data.packages),r.data.debug&&(e.workerState.debug=r.data.debug)),e.workerState.pyodideReadyPromise=e.initializePyodide()}),e.register_cmd_message("_eval",async r=>{var t;try{const o=await((t=e.workerState.pyodide)==null?void 0:t.runPythonAsync(r.msg||"print(\'No code provided\')"));return console.log("Eval result:",o),o}catch(o){console.error("Error during _eval:",o)}}),e.register_cmd_message("state",async r=>({state:{...e.workerState.state,loaded:e.workerState.pyodideReady}})),e.register_cmd_message("worker:state",async r=>({state:{loaded:!!(await e.get_or_create_worker(r.worker_id)).worker}})),e.register_cmd_message("worker:stop",async r=>{var o;if(!e.has_worker(r.worker_id))return;const t=await e.get_or_create_worker(r.worker_id);return t.worker&&(t.worker.stop(),t.worker=null,(o=t.reject_promise)==null||o.call(t,"Worker stopped")),delete e.workerState.worker[r.worker_id],{state:{loaded:!1}}}),e.register_cmd_message("worker:send",async r=>{const t=await e.get_or_create_worker(r.worker_id);if(!t.worker)throw new Error("Worker is not initialized");if(typeof t.worker.receivejs!="function")throw new Error(`Worker does not support receivejs: ${typeof t.worker.receivejs}`);t.worker.receivejs(r.msg)}),e.handleMessage=async r=>{const t={original:r};r.id&&(t.id=r.id),r.toJs===void 0&&(r.toJs=!0);try{if(r.cmd){const o=r;if(e.workerState.handel_register[o.cmd])t.result=await e.workerState.handel_register[o.cmd](o);else throw new Error("Unknown command: "+o.cmd)}else throw new Error("Unknown message format: "+JSON.stringify(r))}catch(o){t.error=o.message}return t},e.read_url_params=()=>{var a,s;const r=new URLSearchParams(self.location.search),t=((a=r.get("debug"))==null?void 0:a.toLowerCase())==="true",o=r.get("pyodide_url")||void 0,i=((s=r.get("packages"))==null?void 0:s.split(","))||[];return{debug:t,pyodide_url:o,packages:i}};const n=e;n.general_initalization=r=>{const t=n.read_url_params();n.startInitialization({...r,...t})};const w=n,c=n;c.init_dedicated_worker=r=>{const t=e;t.onmessage=async i=>{const a=i.data,s=await t.handleMessage(a);t.postMessage(s)};const o={...r,receivepy:(i,a)=>{t.postMessage({cmd:"receive",msg:i,worker_id:a})},receivepy_bytes(i,a){t.postMessage({cmd:"receive_bytes",msg:i,worker_id:a})}};t.general_initalization(o)},w.init_shared_worker=r=>{const t=e;t.connectedPorts=[],t.onconnect=i=>{const a=i.ports[0];t.connectedPorts.push(a),a.start(),console.debug("Port connected in shared worker"),a.onmessage=async s=>{const k=s.data,p=await t.handleMessage(k);a.postMessage(p)}};const o={...r,receivepy:(i,a)=>{t.connectedPorts.forEach(s=>{s.postMessage({cmd:"receive",msg:i,worker_id:a})})},receivepy_bytes(i,a){t.connectedPorts.forEach(s=>{s.postMessage({cmd:"receive_bytes",msg:i,worker_id:a})})}};t.general_initalization(o)},n.init_shared_worker({})})();\n',h=typeof self<"u"&&self.Blob&&new Blob([S],{type:"text/javascript;charset=utf-8"});function j(r){let e;try{if(e=h&&(self.URL||self.webkitURL).createObjectURL(h),!e)throw"";const t=new Worker(e,{name:r==null?void 0:r.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(S),{name:r==null?void 0:r.name})}finally{e&&(self.URL||self.webkitURL).revokeObjectURL(e)}}const I=r=>(r.worker||(r.shared_worker?r.worker_url===void 0?r.worker=new j({name:r.uuid}):r.worker=new SharedWorker(r.worker_url,{name:r.uuid,type:"module"}):r.worker_url===void 0?r.worker=new L({name:r.uuid}):r.worker=new Worker(r.worker_url,{name:r.uuid,type:"module"})),r.worker);class z extends n.FuncNodesWorker{constructor(e){const t={uuid:W(),...e};if(super(t),this._message_hooks=[],this._worker=I(t),this._worker instanceof SharedWorker)t.shared_worker=!0,this._port=this._worker.port,this._port.start(),this._port.addEventListener("message",this.onmessage.bind(this));else if(this._worker instanceof Worker)t.shared_worker=!1,this._worker.addEventListener("message",this.onmessage.bind(this));else throw new Error("worker must be an instance of Worker or SharedWorker");this.postMessage({cmd:"init",data:{debug:t.debug,pyodide_url:t.pyodide_url,packages:t.packages}});const i=setInterval(()=>{this.postMessage({cmd:"state"})},400);this._workerstate={loaded:!1,msg:"loading",progress:0},this.initPromise=new Promise(async a=>{var k;for(;!this._workerstate.loaded;)await new Promise(l=>setTimeout(l,100));clearInterval(i),this.is_open=!0,(k=this._zustand)==null||k.auto_progress(),a()}),this.initPromise.then(()=>{this.stepwise_fullsync()})}async send(e){await this.initPromise,this.postMessage({cmd:"worker:send",msg:JSON.stringify(e),worker_id:this.uuid})}postMessage(e){e.worker_id=this.uuid,this._port?this._port.postMessage(e):this._worker.postMessage(e)}registerMessageHook(e){return this._message_hooks.push(e),()=>{this._message_hooks=this._message_hooks.filter(t=>t!==e)}}onmessage(e){var t;for(const i of this._message_hooks)i(e.data);if(e.data.result)e.data.result.state&&(this._workerstate={...this._workerstate,...e.data.result.state},e.data.result.state.msg&&e.data.result.state.msg!=="ready"&&((t=this._zustand)==null||t.set_progress({message:this._workerstate.msg,status:"info",progress:this._workerstate.progress,blocking:!0})));else if(e.data.cmd){if(e.data.cmd==="receive"){if(e.data.worker_id===void 0)throw new Error("worker_id is undefined");e.data.worker_id===this.uuid&&this.receive(JSON.parse(e.data.msg))}else if(e.data.cmd==="receive_bytes"){if(e.data.worker_id===void 0)throw new Error("worker_id is undefined");e.data.worker_id===this.uuid&&this.onbytes(e.data.msg)}}}async upload_file({files:e,onProgressCallback:t,root:i}){const a=[],k=e.length;let l=0;if(e.length===0)return"";for(let c=0;c<e.length;c++){const w=e[c],d=new FileReader,u=new Promise((p,s)=>{d.onload=async $=>{var b;try{const y=(b=$.target.result)==null?void 0:b.replace(/^data:.+;base64,/,""),P=w.webkitRelativePath||w.name,M=i?`${i}/${P}`:P,B=await this._send_cmd({cmd:"upload",kwargs:{data:y,filename:M},wait_for_response:!0});l++,t&&t(l,k),p(B)}catch(y){s(y)}},d.readAsDataURL(w)});a.push(u)}const v=await Promise.all(a);return v.reduce((c,w)=>{const d=w.split("/"),u=c.split("/"),p=[];for(let s=0;s<d.length&&d[s]===u[s];s++)p.push(d[s]);return p.join("/")},v[0])}}return z});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@linkdlab/funcnodes_pyodide_react_flow",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.10",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Frontend with React Flow for FuncNodes",
|
|
6
6
|
"repository": {
|
|
@@ -24,12 +24,12 @@
|
|
|
24
24
|
],
|
|
25
25
|
"scripts": {
|
|
26
26
|
"typecheck": "tsc --noEmit --watch",
|
|
27
|
-
"build": "
|
|
27
|
+
"build": "vite build --config vite.browser.config.js && vite build ",
|
|
28
28
|
"watch": "vite --config vite.browser.config.js",
|
|
29
29
|
"preview": "vite build --config vite.browser.config.js && vite preview --config vite.browser.config.js"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@linkdlab/funcnodes_react_flow": "^0.4.
|
|
32
|
+
"@linkdlab/funcnodes_react_flow": "^0.4.6",
|
|
33
33
|
"@types/react": "^19.1.0",
|
|
34
34
|
"@types/react-dom": "^19.1.2",
|
|
35
35
|
"@types/uuid": "^10.0.0",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"vite-plugin-dts": "^4.5.3"
|
|
44
44
|
},
|
|
45
45
|
"peerDependencies": {
|
|
46
|
-
"@linkdlab/funcnodes_react_flow": "^0.4.
|
|
46
|
+
"@linkdlab/funcnodes_react_flow": "^0.4.6",
|
|
47
47
|
"pyodide": "^0.27.2",
|
|
48
48
|
"react": "^19.0.0",
|
|
49
49
|
"react-dom": "^19.0.0"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(function(){"use strict";const d="https://cdn.jsdelivr.net/pyodide/v0.27.2/full/pyodide.mjs",e=self;e.workerState={pyodide:null,pyodide_url:d,packages:[],state:{msg:"loading",loaded:!1,progress:0},micropip:null,worker:{},pyodideReady:!1,pyodideReadyPromise:null,debug:!1,interruptBuffer:null,receivepy:(r,t)=>{},receivepy_bytes:(r,t)=>{},handel_register:{},post_pyodide_ready:void 0},e.reset=async()=>{var r;for(const t in e.list_workers())try{const o=await e.get_worker(t);o.worker&&o.worker.stop(),(r=o.reject_promise)==null||r.call(o,"Worker reset")}catch{}e.workerState.pyodide&&e.interrupt(),e.workerState.pyodide=null,e.workerState.micropip=null,e.workerState.worker={},e.workerState.pyodideReady=!1;try{e.workerState.interruptBuffer=new Uint8Array(new SharedArrayBuffer(1)),e.workerState.interruptBuffer[0]=0}catch{}},e.initializePyodide=async()=>{var r,t;if(!e.workerState.pyodide){console.log("initializePyodide with: Debug:",e.workerState.debug,"Pyodide URL:",e.workerState.pyodide_url,"Packages:",e.workerState.packages),console.debug("Loading Pyodide..."),e.workerState.state.msg="Loading Pyodide...",e.workerState.state.progress=0,await e.reset(),console.debug("Loading Pyodide module..."),e.workerState.state.msg="Loading Pyodide module...",e.workerState.state.progress=.1;const o=await import(e.workerState.pyodide_url);console.debug("Loading Pyodide instance..."),e.workerState.state.msg="Loading Pyodide instance...",e.workerState.state.progress=.2;const i=o.loadPyodide,a=e.workerState.pyodide_url.split("/").slice(0,-1).join("/");console.log(a),e.workerState.pyodide=await i({packages:["micropip"],indexURL:a}),e.workerState.interruptBuffer&&e.workerState.pyodide.setInterruptBuffer(e.workerState.interruptBuffer)}e.workerState.micropip||(console.debug("Importing micropip..."),e.workerState.state.msg="Importing micropip...",e.workerState.state.progress=.3,e.workerState.micropip=e.workerState.pyodide.pyimport("micropip")),console.debug("Pyodide ready. Installing funcnodes...");for(const o of e.workerState.packages)console.log("Installing package:",o),e.workerState.state.msg=`Installing package: ${o}`,await e.workerState.micropip.install(o);return e.workerState.state.msg="Installing funcnodes",e.workerState.state.progress=.8,await e.workerState.micropip.install("funcnodes"),e.workerState.state.msg="Installing funcnodes-worker",await e.workerState.micropip.install("funcnodes-worker"),e.workerState.state.msg="Installing funcnodes-pyodide",await e.workerState.micropip.install("funcnodes-pyodide"),e.workerState.state.msg="Importing funcnodes",console.debug("Importing funcnodes..."),await e.workerState.pyodide.runPythonAsync("import funcnodes_pyodide"),console.debug("Running post_pyodide_ready..."),await((t=(r=e.workerState).post_pyodide_ready)==null?void 0:t.call(r,e.workerState)),console.debug("Pyodide ready"),e.workerState.state.msg="ready",e.workerState.state.progress=.1,e.workerState.pyodideReady=!0,{pyodide:e.workerState.pyodide,micropip:e.workerState.micropip}},e.interrupt=()=>{e.workerState.interruptBuffer&&(e.workerState.interruptBuffer[0]=1)},e.list_workers=()=>Object.keys(e.workerState.worker),e.get_worker=async r=>{if(!r)throw new Error("Worker id is required");if(!e.workerState.worker[r])throw new Error(`Worker with id ${r} not found`);return await e.workerState.worker[r].make_promise,e.workerState.worker[r]},e.has_worker=r=>{if(!r)throw new Error("Worker id is required");return!!e.workerState.worker[r]},e.get_or_create_worker=async r=>{if(!r)throw new Error("Worker id is required");return e.workerState.worker[r]||(console.log("Creating worker with id",r),await e.initializeFuncNodesWorker(r)),e.get_worker(r)},e.initializeFuncNodesWorker=async r=>{try{if(!e.workerState.pyodideReadyPromise)throw new Error("Pyodide newer initialized");const{pyodide:t}=await e.workerState.pyodideReadyPromise;if(!e.has_worker(r)){e.workerState.worker[r]={worker:null,make_promise:void 0};const o=new Promise(async(i,a)=>{e.workerState.worker[r].reject_promise=a,console.debug(`Creating worker (${r})...`);const s=await t.runPythonAsync(`funcnodes_pyodide.new_worker(debug=${e.workerState.debug?1:0}, uuid="${r}")`);if(console.debug("Worker created:",s),typeof s.set_receiver=="function")s.set_receiver(self);else throw new Error("Worker does not expose a 'set_receiver' method.");e.workerState.worker[r].worker=s,console.debug("Worker ready"),i(s)});e.workerState.worker[r].make_promise=o}return e.get_worker(r)}catch(t){throw console.error("Error during worker initialization:",t),t}},e.receivepy=(r,t)=>{try{let o={};if(typeof r=="string"?o.msg=r:o=r,o.msg===void 0)return;typeof o.msg!="string"&&(o.msg=JSON.stringify(o.msg)),t!==void 0&&(typeof t=="string"?o.worker_id||(o.worker_id=t):o={...t,...o});const i=o.worker_id;if(!i)throw new Error(`Worker id not provided in receivepy(${JSON.stringify(o)})`);if(!e.workerState.worker[i])throw new Error(`Worker with id ${i} not found in receivepy(${JSON.stringify(o)})`);e.workerState.receivepy(r,i)}catch(o){console.error("Error during receivepy:",o);return}},e.receivepy_bytes=(r,t)=>{r=r.toJs();try{let o={};if(r instanceof Uint8Array?o.msg=r:o=r,o.msg===void 0)return;t!==void 0&&(typeof t=="string"?o.worker_id||(o.worker_id=t):o={...t,...o});const i=o.worker_id;if(!i)throw new Error("Worker id not provided in receivepy_bytes");if(!e.workerState.worker[i])throw new Error(`Worker with id ${i} not found in receivepy_bytes`);e.workerState.receivepy_bytes(r,i)}catch(o){console.error("Error during receivepy_bytes:",o);return}},e.startInitialization=({debug:r=!1,receivepy:t,receivepy_bytes:o,pyodide_url:i,post_pyodide_ready:a,packages:s})=>(e.workerState.debug=r,e.workerState.pyodide_url=i||d,e.workerState.packages=s,e.workerState.receivepy=t,e.workerState.receivepy_bytes=o,e.workerState.pyodideReadyPromise=null,e.workerState.post_pyodide_ready=a,e.workerState),e.register_cmd_message=(r,t)=>{if(e.workerState.handel_register[r])throw new Error(`Command ${r} already registered`);e.workerState.handel_register[r]=t},e.register_cmd_message("ping",async r=>"pong"),e.register_cmd_message("init",async r=>{if(e.workerState.pyodideReadyPromise)throw new Error("Pyodide is already initialized");r.data&&(r.data.pyodide_url&&(e.workerState.pyodide_url=r.data.pyodide_url),r.data.packages&&(e.workerState.packages=r.data.packages),r.data.debug&&(e.workerState.debug=r.data.debug)),e.workerState.pyodideReadyPromise=e.initializePyodide()}),e.register_cmd_message("_eval",async r=>{var t;try{const o=await((t=e.workerState.pyodide)==null?void 0:t.runPythonAsync(r.msg||"print('No code provided')"));return console.log("Eval result:",o),o}catch(o){console.error("Error during _eval:",o)}}),e.register_cmd_message("state",async r=>({state:{...e.workerState.state,loaded:e.workerState.pyodideReady}})),e.register_cmd_message("worker:state",async r=>({state:{loaded:!!(await e.get_or_create_worker(r.worker_id)).worker}})),e.register_cmd_message("worker:stop",async r=>{var o;if(!e.has_worker(r.worker_id))return;const t=await e.get_or_create_worker(r.worker_id);return t.worker&&(t.worker.stop(),t.worker=null,(o=t.reject_promise)==null||o.call(t,"Worker stopped")),delete e.workerState.worker[r.worker_id],{state:{loaded:!1}}}),e.register_cmd_message("worker:send",async r=>{const t=await e.get_or_create_worker(r.worker_id);if(!t.worker)throw new Error("Worker is not initialized");if(typeof t.worker.receivejs!="function")throw new Error(`Worker does not support receivejs: ${typeof t.worker.receivejs}`);t.worker.receivejs(r.msg)}),e.handleMessage=async r=>{const t={original:r};r.id&&(t.id=r.id),r.toJs===void 0&&(r.toJs=!0);try{if(r.cmd){const o=r;if(e.workerState.handel_register[o.cmd])t.result=await e.workerState.handel_register[o.cmd](o);else throw new Error("Unknown command: "+o.cmd)}else throw new Error("Unknown message format: "+JSON.stringify(r))}catch(o){t.error=o.message}return t},e.read_url_params=()=>{var a,s;const r=new URLSearchParams(self.location.search),t=((a=r.get("debug"))==null?void 0:a.toLowerCase())==="true",o=r.get("pyodide_url")||void 0,i=((s=r.get("packages"))==null?void 0:s.split(","))||[];return{debug:t,pyodide_url:o,packages:i}};const n=e;n.general_initalization=r=>{const t=n.read_url_params();n.startInitialization({...r,...t})};const w=n,c=n;c.init_dedicated_worker=r=>{const t=e;t.onmessage=async i=>{const a=i.data,s=await t.handleMessage(a);t.postMessage(s)};const o={...r,receivepy:(i,a)=>{t.postMessage({cmd:"receive",msg:i,worker_id:a})},receivepy_bytes(i,a){t.postMessage({cmd:"receive_bytes",msg:i,worker_id:a})}};t.general_initalization(o)},w.init_shared_worker=r=>{const t=e;t.connectedPorts=[],t.onconnect=i=>{const a=i.ports[0];t.connectedPorts.push(a),a.start(),console.debug("Port connected in shared worker"),a.onmessage=async s=>{const k=s.data,p=await t.handleMessage(k);a.postMessage(p)}};const o={...r,receivepy:(i,a)=>{t.connectedPorts.forEach(s=>{s.postMessage({cmd:"receive",msg:i,worker_id:a})})},receivepy_bytes(i,a){t.connectedPorts.forEach(s=>{s.postMessage({cmd:"receive_bytes",msg:i,worker_id:a})})}};t.general_initalization(o)},n.init_dedicated_worker({})})();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(function(){"use strict";const d="https://cdn.jsdelivr.net/pyodide/v0.27.2/full/pyodide.mjs",e=self;e.workerState={pyodide:null,pyodide_url:d,packages:[],state:{msg:"loading",loaded:!1,progress:0},micropip:null,worker:{},pyodideReady:!1,pyodideReadyPromise:null,debug:!1,interruptBuffer:null,receivepy:(r,t)=>{},receivepy_bytes:(r,t)=>{},handel_register:{},post_pyodide_ready:void 0},e.reset=async()=>{var r;for(const t in e.list_workers())try{const o=await e.get_worker(t);o.worker&&o.worker.stop(),(r=o.reject_promise)==null||r.call(o,"Worker reset")}catch{}e.workerState.pyodide&&e.interrupt(),e.workerState.pyodide=null,e.workerState.micropip=null,e.workerState.worker={},e.workerState.pyodideReady=!1;try{e.workerState.interruptBuffer=new Uint8Array(new SharedArrayBuffer(1)),e.workerState.interruptBuffer[0]=0}catch{}},e.initializePyodide=async()=>{var r,t;if(!e.workerState.pyodide){console.log("initializePyodide with: Debug:",e.workerState.debug,"Pyodide URL:",e.workerState.pyodide_url,"Packages:",e.workerState.packages),console.debug("Loading Pyodide..."),e.workerState.state.msg="Loading Pyodide...",e.workerState.state.progress=0,await e.reset(),console.debug("Loading Pyodide module..."),e.workerState.state.msg="Loading Pyodide module...",e.workerState.state.progress=.1;const o=await import(e.workerState.pyodide_url);console.debug("Loading Pyodide instance..."),e.workerState.state.msg="Loading Pyodide instance...",e.workerState.state.progress=.2;const i=o.loadPyodide,a=e.workerState.pyodide_url.split("/").slice(0,-1).join("/");console.log(a),e.workerState.pyodide=await i({packages:["micropip"],indexURL:a}),e.workerState.interruptBuffer&&e.workerState.pyodide.setInterruptBuffer(e.workerState.interruptBuffer)}e.workerState.micropip||(console.debug("Importing micropip..."),e.workerState.state.msg="Importing micropip...",e.workerState.state.progress=.3,e.workerState.micropip=e.workerState.pyodide.pyimport("micropip")),console.debug("Pyodide ready. Installing funcnodes...");for(const o of e.workerState.packages)console.log("Installing package:",o),e.workerState.state.msg=`Installing package: ${o}`,await e.workerState.micropip.install(o);return e.workerState.state.msg="Installing funcnodes",e.workerState.state.progress=.8,await e.workerState.micropip.install("funcnodes"),e.workerState.state.msg="Installing funcnodes-worker",await e.workerState.micropip.install("funcnodes-worker"),e.workerState.state.msg="Installing funcnodes-pyodide",await e.workerState.micropip.install("funcnodes-pyodide"),e.workerState.state.msg="Importing funcnodes",console.debug("Importing funcnodes..."),await e.workerState.pyodide.runPythonAsync("import funcnodes_pyodide"),console.debug("Running post_pyodide_ready..."),await((t=(r=e.workerState).post_pyodide_ready)==null?void 0:t.call(r,e.workerState)),console.debug("Pyodide ready"),e.workerState.state.msg="ready",e.workerState.state.progress=.1,e.workerState.pyodideReady=!0,{pyodide:e.workerState.pyodide,micropip:e.workerState.micropip}},e.interrupt=()=>{e.workerState.interruptBuffer&&(e.workerState.interruptBuffer[0]=1)},e.list_workers=()=>Object.keys(e.workerState.worker),e.get_worker=async r=>{if(!r)throw new Error("Worker id is required");if(!e.workerState.worker[r])throw new Error(`Worker with id ${r} not found`);return await e.workerState.worker[r].make_promise,e.workerState.worker[r]},e.has_worker=r=>{if(!r)throw new Error("Worker id is required");return!!e.workerState.worker[r]},e.get_or_create_worker=async r=>{if(!r)throw new Error("Worker id is required");return e.workerState.worker[r]||(console.log("Creating worker with id",r),await e.initializeFuncNodesWorker(r)),e.get_worker(r)},e.initializeFuncNodesWorker=async r=>{try{if(!e.workerState.pyodideReadyPromise)throw new Error("Pyodide newer initialized");const{pyodide:t}=await e.workerState.pyodideReadyPromise;if(!e.has_worker(r)){e.workerState.worker[r]={worker:null,make_promise:void 0};const o=new Promise(async(i,a)=>{e.workerState.worker[r].reject_promise=a,console.debug(`Creating worker (${r})...`);const s=await t.runPythonAsync(`funcnodes_pyodide.new_worker(debug=${e.workerState.debug?1:0}, uuid="${r}")`);if(console.debug("Worker created:",s),typeof s.set_receiver=="function")s.set_receiver(self);else throw new Error("Worker does not expose a 'set_receiver' method.");e.workerState.worker[r].worker=s,console.debug("Worker ready"),i(s)});e.workerState.worker[r].make_promise=o}return e.get_worker(r)}catch(t){throw console.error("Error during worker initialization:",t),t}},e.receivepy=(r,t)=>{try{let o={};if(typeof r=="string"?o.msg=r:o=r,o.msg===void 0)return;typeof o.msg!="string"&&(o.msg=JSON.stringify(o.msg)),t!==void 0&&(typeof t=="string"?o.worker_id||(o.worker_id=t):o={...t,...o});const i=o.worker_id;if(!i)throw new Error(`Worker id not provided in receivepy(${JSON.stringify(o)})`);if(!e.workerState.worker[i])throw new Error(`Worker with id ${i} not found in receivepy(${JSON.stringify(o)})`);e.workerState.receivepy(r,i)}catch(o){console.error("Error during receivepy:",o);return}},e.receivepy_bytes=(r,t)=>{r=r.toJs();try{let o={};if(r instanceof Uint8Array?o.msg=r:o=r,o.msg===void 0)return;t!==void 0&&(typeof t=="string"?o.worker_id||(o.worker_id=t):o={...t,...o});const i=o.worker_id;if(!i)throw new Error("Worker id not provided in receivepy_bytes");if(!e.workerState.worker[i])throw new Error(`Worker with id ${i} not found in receivepy_bytes`);e.workerState.receivepy_bytes(r,i)}catch(o){console.error("Error during receivepy_bytes:",o);return}},e.startInitialization=({debug:r=!1,receivepy:t,receivepy_bytes:o,pyodide_url:i,post_pyodide_ready:a,packages:s})=>(e.workerState.debug=r,e.workerState.pyodide_url=i||d,e.workerState.packages=s,e.workerState.receivepy=t,e.workerState.receivepy_bytes=o,e.workerState.pyodideReadyPromise=null,e.workerState.post_pyodide_ready=a,e.workerState),e.register_cmd_message=(r,t)=>{if(e.workerState.handel_register[r])throw new Error(`Command ${r} already registered`);e.workerState.handel_register[r]=t},e.register_cmd_message("ping",async r=>"pong"),e.register_cmd_message("init",async r=>{if(e.workerState.pyodideReadyPromise)throw new Error("Pyodide is already initialized");r.data&&(r.data.pyodide_url&&(e.workerState.pyodide_url=r.data.pyodide_url),r.data.packages&&(e.workerState.packages=r.data.packages),r.data.debug&&(e.workerState.debug=r.data.debug)),e.workerState.pyodideReadyPromise=e.initializePyodide()}),e.register_cmd_message("_eval",async r=>{var t;try{const o=await((t=e.workerState.pyodide)==null?void 0:t.runPythonAsync(r.msg||"print('No code provided')"));return console.log("Eval result:",o),o}catch(o){console.error("Error during _eval:",o)}}),e.register_cmd_message("state",async r=>({state:{...e.workerState.state,loaded:e.workerState.pyodideReady}})),e.register_cmd_message("worker:state",async r=>({state:{loaded:!!(await e.get_or_create_worker(r.worker_id)).worker}})),e.register_cmd_message("worker:stop",async r=>{var o;if(!e.has_worker(r.worker_id))return;const t=await e.get_or_create_worker(r.worker_id);return t.worker&&(t.worker.stop(),t.worker=null,(o=t.reject_promise)==null||o.call(t,"Worker stopped")),delete e.workerState.worker[r.worker_id],{state:{loaded:!1}}}),e.register_cmd_message("worker:send",async r=>{const t=await e.get_or_create_worker(r.worker_id);if(!t.worker)throw new Error("Worker is not initialized");if(typeof t.worker.receivejs!="function")throw new Error(`Worker does not support receivejs: ${typeof t.worker.receivejs}`);t.worker.receivejs(r.msg)}),e.handleMessage=async r=>{const t={original:r};r.id&&(t.id=r.id),r.toJs===void 0&&(r.toJs=!0);try{if(r.cmd){const o=r;if(e.workerState.handel_register[o.cmd])t.result=await e.workerState.handel_register[o.cmd](o);else throw new Error("Unknown command: "+o.cmd)}else throw new Error("Unknown message format: "+JSON.stringify(r))}catch(o){t.error=o.message}return t},e.read_url_params=()=>{var a,s;const r=new URLSearchParams(self.location.search),t=((a=r.get("debug"))==null?void 0:a.toLowerCase())==="true",o=r.get("pyodide_url")||void 0,i=((s=r.get("packages"))==null?void 0:s.split(","))||[];return{debug:t,pyodide_url:o,packages:i}};const n=e;n.general_initalization=r=>{const t=n.read_url_params();n.startInitialization({...r,...t})};const w=n,c=n;c.init_dedicated_worker=r=>{const t=e;t.onmessage=async i=>{const a=i.data,s=await t.handleMessage(a);t.postMessage(s)};const o={...r,receivepy:(i,a)=>{t.postMessage({cmd:"receive",msg:i,worker_id:a})},receivepy_bytes(i,a){t.postMessage({cmd:"receive_bytes",msg:i,worker_id:a})}};t.general_initalization(o)},w.init_shared_worker=r=>{const t=e;t.connectedPorts=[],t.onconnect=i=>{const a=i.ports[0];t.connectedPorts.push(a),a.start(),console.debug("Port connected in shared worker"),a.onmessage=async s=>{const k=s.data,p=await t.handleMessage(k);a.postMessage(p)}};const o={...r,receivepy:(i,a)=>{t.connectedPorts.forEach(s=>{s.postMessage({cmd:"receive",msg:i,worker_id:a})})},receivepy_bytes(i,a){t.connectedPorts.forEach(s=>{s.postMessage({cmd:"receive_bytes",msg:i,worker_id:a})})}};t.general_initalization(o)},n.init_shared_worker({})})();
|