@eclipse-docks/extension-python-runtime 0.7.98 → 0.7.100

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- import "./pyservice-DyVO8QVd.js";
1
+ import "./pyservice-DGwNXWO4.js";
2
2
  import "./package-manager-DcDiJbD3.js";
package/dist/api.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as PyEnv } from "./pyservice-DyVO8QVd.js";
1
+ import { t as PyEnv } from "./pyservice-DGwNXWO4.js";
2
2
  import { t as pythonPackageManagerService } from "./package-manager-DcDiJbD3.js";
3
- import "./api-CpA1OGOM.js";
3
+ import "./api-C6Mnm5y_.js";
4
4
  export { PyEnv, pythonPackageManagerService };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pyworker-CSZ-Rp_9.js","names":[],"sources":["../../../../node_modules/pyodide/package.json","../../__vite-browser-external","../../../../node_modules/pyodide/pyodide.mjs","../../src/pyworker.ts"],"sourcesContent":["{\n \"name\": \"pyodide\",\n \"version\": \"0.29.3\",\n \"description\": \"The Pyodide JavaScript package\",\n \"keywords\": [\n \"python\",\n \"webassembly\"\n ],\n \"homepage\": \"https://github.com/pyodide/pyodide\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/pyodide/pyodide\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/pyodide/pyodide/issues\"\n },\n \"license\": \"MPL-2.0\",\n \"dependencies\": {\n \"@types/emscripten\": \"^1.41.4\",\n \"ws\": \"^8.5.0\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"2.1.1\",\n \"@playwright/test\": \"^1.55.1\",\n \"@types/assert\": \"^1.5.6\",\n \"@types/expect\": \"^24.3.0\",\n \"@types/node\": \"^20.8.4\",\n \"@types/ws\": \"^8.5.3\",\n \"cross-env\": \"^7.0.3\",\n \"dts-bundle-generator\": \"^8.1.1\",\n \"esbuild\": \"^0.25.0\",\n \"express\": \"^4.17.3\",\n \"mocha\": \"^9.0.2\",\n \"npm-run-all\": \"^4.1.5\",\n \"nyc\": \"^15.1.0\",\n \"playwright\": \"^1.55.1\",\n \"prettier\": \"^2.2.1\",\n \"tsd\": \"^0.24.1\",\n \"tsx\": \"^4.20.5\",\n \"typedoc\": \"^0.27.6\",\n \"typescript\": \"5.7\",\n \"wabt\": \"^1.0.32\"\n },\n \"main\": \"pyodide.js\",\n \"exports\": {\n \".\": {\n \"types\": \"./pyodide.d.ts\",\n \"require\": \"./pyodide.js\",\n \"import\": \"./pyodide.mjs\"\n },\n \"./ffi\": {\n \"types\": \"./ffi.d.ts\"\n },\n \"./pyodide.asm.wasm\": \"./pyodide.asm.wasm\",\n \"./pyodide.asm.js\": \"./pyodide.asm.js\",\n \"./python_stdlib.zip\": \"./python_stdlib.zip\",\n \"./pyodide.mjs\": \"./pyodide.mjs\",\n \"./pyodide.js\": \"./pyodide.js\",\n \"./package.json\": \"./package.json\",\n \"./pyodide-lock.json\": \"./pyodide-lock.json\"\n },\n \"files\": [\n \"pyodide.asm.js\",\n \"pyodide.asm.wasm\",\n \"python_stdlib.zip\",\n \"pyodide.mjs\",\n \"pyodide.js.map\",\n \"pyodide.mjs.map\",\n \"pyodide.d.ts\",\n \"ffi.d.ts\",\n \"pyodide-lock.json\",\n \"console.html\",\n \"console-v2.html\"\n ],\n \"browser\": {\n \"child_process\": false,\n \"crypto\": false,\n \"fs\": false,\n \"fs/promises\": false,\n \"path\": false,\n \"url\": false,\n \"vm\": false,\n \"ws\": false\n },\n \"scripts\": {\n \"build-inner\": \"node esbuild.config.inner.mjs\",\n \"build\": \"tsc --noEmit && node esbuild.config.outer.mjs\",\n \"test\": \"npm-run-all test:*\",\n \"test:unit\": \"cross-env TEST_NODE=1 node --import tsx --experimental-wasm-stack-switching --test 'test/unit/**/*.test.*'\",\n \"test:node\": \"cross-env TEST_NODE=1 npx playwright test\",\n \"test:browser\": \"npx playwright test\",\n \"tsc\": \"tsc --noEmit\",\n \"coverage\": \"cross-env TEST_NODE=1 npm-run-all coverage:*\",\n \"coverage:build\": \"nyc npm run test:node\"\n },\n \"nyc\": {\n \"reporter\": [\n \"html\",\n \"text-summary\"\n ],\n \"include\": [\n \"*.ts\"\n ],\n \"all\": true,\n \"clean\": true,\n \"cache\": false,\n \"instrument\": false,\n \"checkCoverage\": true,\n \"statements\": 95,\n \"functions\": 95,\n \"branches\": 80,\n \"lines\": 95\n },\n \"tsd\": {\n \"compilerOptions\": {\n \"lib\": [\n \"ES2017\",\n \"DOM\"\n ]\n }\n },\n \"types\": \"./pyodide.d.ts\",\n \"engines\": {\n \"node\": \">=18.0.0\"\n }\n}\n","module.exports = {}","var Z=Object.defineProperty;var o=(e,t)=>Z(e,\"name\",{value:t,configurable:!0}),A=(e=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(e,{get:(t,n)=>(typeof require<\"u\"?require:t)[n]}):e)(function(e){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+e+'\" is not supported')});var W=(()=>{for(var e=new Uint8Array(128),t=0;t<64;t++)e[t<26?t+65:t<52?t+71:t<62?t-4:t*4-205]=t;return n=>{for(var i=n.length,s=new Uint8Array((i-(n[i-1]==\"=\")-(n[i-2]==\"=\"))*3/4|0),r=0,a=0;r<i;){var l=e[n.charCodeAt(r++)],c=e[n.charCodeAt(r++)],d=e[n.charCodeAt(r++)],u=e[n.charCodeAt(r++)];s[a++]=l<<2|c>>4,s[a++]=c<<4|d>>2,s[a++]=d<<6|u}return s}})();function ee(e){return!isNaN(parseFloat(e))&&isFinite(e)}o(ee,\"_isNumber\");function P(e){return e.charAt(0).toUpperCase()+e.substring(1)}o(P,\"_capitalize\");function x(e){return function(){return this[e]}}o(x,\"_getter\");var N=[\"isConstructor\",\"isEval\",\"isNative\",\"isToplevel\"],S=[\"columnNumber\",\"lineNumber\"],I=[\"fileName\",\"functionName\",\"source\"],te=[\"args\"],ne=[\"evalOrigin\"],F=N.concat(S,I,te,ne);function p(e){if(e)for(var t=0;t<F.length;t++)e[F[t]]!==void 0&&this[\"set\"+P(F[t])](e[F[t]])}o(p,\"StackFrame\");p.prototype={getArgs:o(function(){return this.args},\"getArgs\"),setArgs:o(function(e){if(Object.prototype.toString.call(e)!==\"[object Array]\")throw new TypeError(\"Args must be an Array\");this.args=e},\"setArgs\"),getEvalOrigin:o(function(){return this.evalOrigin},\"getEvalOrigin\"),setEvalOrigin:o(function(e){if(e instanceof p)this.evalOrigin=e;else if(e instanceof Object)this.evalOrigin=new p(e);else throw new TypeError(\"Eval Origin must be an Object or StackFrame\")},\"setEvalOrigin\"),toString:o(function(){var e=this.getFileName()||\"\",t=this.getLineNumber()||\"\",n=this.getColumnNumber()||\"\",i=this.getFunctionName()||\"\";return this.getIsEval()?e?\"[eval] (\"+e+\":\"+t+\":\"+n+\")\":\"[eval]:\"+t+\":\"+n:i?i+\" (\"+e+\":\"+t+\":\"+n+\")\":e+\":\"+t+\":\"+n},\"toString\")};p.fromString=o(function(t){var n=t.indexOf(\"(\"),i=t.lastIndexOf(\")\"),s=t.substring(0,n),r=t.substring(n+1,i).split(\",\"),a=t.substring(i+1);if(a.indexOf(\"@\")===0)var l=/@(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(a,\"\"),c=l[1],d=l[2],u=l[3];return new p({functionName:s,args:r||void 0,fileName:c,lineNumber:d||void 0,columnNumber:u||void 0})},\"StackFrame$$fromString\");for(b=0;b<N.length;b++)p.prototype[\"get\"+P(N[b])]=x(N[b]),p.prototype[\"set\"+P(N[b])]=function(e){return function(t){this[e]=!!t}}(N[b]);var b;for(v=0;v<S.length;v++)p.prototype[\"get\"+P(S[v])]=x(S[v]),p.prototype[\"set\"+P(S[v])]=function(e){return function(t){if(!ee(t))throw new TypeError(e+\" must be a Number\");this[e]=Number(t)}}(S[v]);var v;for(E=0;E<I.length;E++)p.prototype[\"get\"+P(I[E])]=x(I[E]),p.prototype[\"set\"+P(I[E])]=function(e){return function(t){this[e]=String(t)}}(I[E]);var E,O=p;function re(){var e=/^\\s*at .*(\\S+:\\d+|\\(native\\))/m,t=/^(eval@)?(\\[native code])?$/;return{parse:o(function(i){if(i.stack&&i.stack.match(e))return this.parseV8OrIE(i);if(i.stack)return this.parseFFOrSafari(i);throw new Error(\"Cannot parse given Error object\")},\"ErrorStackParser$$parse\"),extractLocation:o(function(i){if(i.indexOf(\":\")===-1)return[i];var s=/(.+?)(?::(\\d+))?(?::(\\d+))?$/,r=s.exec(i.replace(/[()]/g,\"\"));return[r[1],r[2]||void 0,r[3]||void 0]},\"ErrorStackParser$$extractLocation\"),parseV8OrIE:o(function(i){var s=i.stack.split(`\n`).filter(function(r){return!!r.match(e)},this);return s.map(function(r){r.indexOf(\"(eval \")>-1&&(r=r.replace(/eval code/g,\"eval\").replace(/(\\(eval at [^()]*)|(,.*$)/g,\"\"));var a=r.replace(/^\\s+/,\"\").replace(/\\(eval code/g,\"(\").replace(/^.*?\\s+/,\"\"),l=a.match(/ (\\(.+\\)$)/);a=l?a.replace(l[0],\"\"):a;var c=this.extractLocation(l?l[1]:a),d=l&&a||void 0,u=[\"eval\",\"<anonymous>\"].indexOf(c[0])>-1?void 0:c[0];return new O({functionName:d,fileName:u,lineNumber:c[1],columnNumber:c[2],source:r})},this)},\"ErrorStackParser$$parseV8OrIE\"),parseFFOrSafari:o(function(i){var s=i.stack.split(`\n`).filter(function(r){return!r.match(t)},this);return s.map(function(r){if(r.indexOf(\" > eval\")>-1&&(r=r.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g,\":$1\")),r.indexOf(\"@\")===-1&&r.indexOf(\":\")===-1)return new O({functionName:r});var a=/((.*\".+\"[^@]*)?[^@]*)(?:@)/,l=r.match(a),c=l&&l[1]?l[1]:void 0,d=this.extractLocation(r.replace(a,\"\"));return new O({functionName:c,fileName:d[0],lineNumber:d[1],columnNumber:d[2],source:r})},this)},\"ErrorStackParser$$parseFFOrSafari\")}}o(re,\"ErrorStackParser\");var ie=new re;var M=ie;function oe(){if(typeof API<\"u\"&&API!==globalThis.API)return API.runtimeEnv;let e=typeof Bun<\"u\",t=typeof Deno<\"u\",n=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\"&&!process.browser,i=typeof navigator==\"object\"&&typeof navigator.userAgent==\"string\"&&navigator.userAgent.indexOf(\"Chrome\")===-1&&navigator.userAgent.indexOf(\"Safari\")>-1;return ae({IN_BUN:e,IN_DENO:t,IN_NODE:n,IN_SAFARI:i,IN_SHELL:typeof read==\"function\"&&typeof load==\"function\"})}o(oe,\"getGlobalRuntimeEnv\");var f=oe();function ae(e){let t=e.IN_NODE&&typeof module<\"u\"&&module.exports&&typeof A==\"function\"&&typeof __dirname==\"string\",n=e.IN_NODE&&!t,i=!e.IN_NODE&&!e.IN_DENO&&!e.IN_BUN,s=i&&typeof window<\"u\"&&typeof window.document<\"u\"&&typeof document.createElement==\"function\"&&\"sessionStorage\"in window&&typeof globalThis.importScripts!=\"function\",r=i&&typeof globalThis.WorkerGlobalScope<\"u\"&&typeof globalThis.self<\"u\"&&globalThis.self instanceof globalThis.WorkerGlobalScope;return{...e,IN_BROWSER:i,IN_BROWSER_MAIN_THREAD:s,IN_BROWSER_WEB_WORKER:r,IN_NODE_COMMONJS:t,IN_NODE_ESM:n}}o(ae,\"calculateDerivedFlags\");var $,D,H,B,L;async function T(){if(!f.IN_NODE||($=(await import(\"node:url\")).default,B=await import(\"node:fs\"),L=await import(\"node:fs/promises\"),H=(await import(\"node:vm\")).default,D=await import(\"node:path\"),C=D.sep,typeof A<\"u\"))return;let e=B,t=await import(\"node:crypto\"),n=await import(\"ws\"),i=await import(\"node:child_process\"),s={fs:e,crypto:t,ws:n,child_process:i};globalThis.require=function(r){return s[r]}}o(T,\"initNodeModules\");function se(e,t){return D.resolve(t||\".\",e)}o(se,\"node_resolvePath\");function le(e,t){return t===void 0&&(t=location),new URL(e,t).toString()}o(le,\"browser_resolvePath\");var _;f.IN_NODE?_=se:f.IN_SHELL?_=o(e=>e,\"resolvePath\"):_=le;var C;f.IN_NODE||(C=\"/\");function ce(e,t){return e.startsWith(\"file://\")&&(e=e.slice(7)),e.includes(\"://\")?{response:fetch(e)}:{binary:L.readFile(e).then(n=>new Uint8Array(n.buffer,n.byteOffset,n.byteLength))}}o(ce,\"node_getBinaryResponse\");function de(e,t){if(e.startsWith(\"file://\")&&(e=e.slice(7)),e.includes(\"://\"))throw new Error(\"Shell cannot fetch urls\");return{binary:Promise.resolve(new Uint8Array(readbuffer(e)))}}o(de,\"shell_getBinaryResponse\");function ue(e,t){let n=new URL(e,location);return{response:fetch(n,t?{integrity:t}:{})}}o(ue,\"browser_getBinaryResponse\");var R;f.IN_NODE?R=ce:f.IN_SHELL?R=de:R=ue;async function j(e,t){let{response:n,binary:i}=R(e,t);if(i)return i;let s=await n;if(!s.ok)throw new Error(`Failed to load '${e}': request failed.`);return new Uint8Array(await s.arrayBuffer())}o(j,\"loadBinaryFile\");var w;if(f.IN_BROWSER_MAIN_THREAD)w=o(async e=>await import(e),\"loadScript\");else if(f.IN_BROWSER_WEB_WORKER)w=o(async e=>{try{globalThis.importScripts(e)}catch(t){if(t instanceof TypeError)await import(e);else throw t}},\"loadScript\");else if(f.IN_NODE)w=fe;else if(f.IN_SHELL)w=load;else throw new Error(\"Cannot determine runtime environment\");async function fe(e){e.startsWith(\"file://\")&&(e=e.slice(7)),e.includes(\"://\")?H.runInThisContext(await(await fetch(e)).text()):await import($.pathToFileURL(e).href)}o(fe,\"nodeLoadScript\");async function V(e){if(f.IN_NODE){await T();let t=await L.readFile(e,{encoding:\"utf8\"});return JSON.parse(t)}else if(f.IN_SHELL){let t=read(e);return JSON.parse(t)}else return await(await fetch(e)).json()}o(V,\"loadLockFile\");async function z(){if(f.IN_NODE_COMMONJS)return __dirname;let e;try{throw new Error}catch(i){e=i}let t=M.parse(e)[0].fileName;if(f.IN_NODE&&!t.startsWith(\"file://\")&&(t=`file://${t}`),f.IN_NODE_ESM){let i=await import(\"node:path\");return(await import(\"node:url\")).fileURLToPath(i.dirname(t))}let n=t.lastIndexOf(C);if(n===-1)throw new Error(\"Could not extract indexURL path from pyodide module location. Please pass the indexURL explicitly to loadPyodide.\");return t.slice(0,n)}o(z,\"calculateDirname\");function J(e){return e.substring(0,e.lastIndexOf(\"/\")+1)||globalThis.location?.toString()||\".\"}o(J,\"calculateInstallBaseUrl\");function q(e){let t=e.FS,n=e.FS.filesystems.MEMFS,i=e.PATH,s={DIR_MODE:16895,FILE_MODE:33279,mount:o(function(r){if(!r.opts.fileSystemHandle)throw new Error(\"opts.fileSystemHandle is required\");return n.mount.apply(null,arguments)},\"mount\"),syncfs:o(async(r,a,l)=>{try{let c=s.getLocalSet(r),d=await s.getRemoteSet(r),u=a?d:c,y=a?c:d;await s.reconcile(r,u,y),l(null)}catch(c){l(c)}},\"syncfs\"),getLocalSet:o(r=>{let a=Object.create(null);function l(u){return u!==\".\"&&u!==\"..\"}o(l,\"isRealDir\");function c(u){return y=>i.join2(u,y)}o(c,\"toAbsolute\");let d=t.readdir(r.mountpoint).filter(l).map(c(r.mountpoint));for(;d.length;){let u=d.pop(),y=t.stat(u);t.isDir(y.mode)&&d.push.apply(d,t.readdir(u).filter(l).map(c(u))),a[u]={timestamp:y.mtime,mode:y.mode}}return{type:\"local\",entries:a}},\"getLocalSet\"),getRemoteSet:o(async r=>{let a=Object.create(null),l=await me(r.opts.fileSystemHandle);for(let[c,d]of l)c!==\".\"&&(a[i.join2(r.mountpoint,c)]={timestamp:d.kind===\"file\"?new Date((await d.getFile()).lastModified):new Date,mode:d.kind===\"file\"?s.FILE_MODE:s.DIR_MODE});return{type:\"remote\",entries:a,handles:l}},\"getRemoteSet\"),loadLocalEntry:o(r=>{let l=t.lookupPath(r,{}).node,c=t.stat(r);if(t.isDir(c.mode))return{timestamp:c.mtime,mode:c.mode};if(t.isFile(c.mode))return l.contents=n.getFileDataAsTypedArray(l),{timestamp:c.mtime,mode:c.mode,contents:l.contents};throw new Error(\"node type not supported\")},\"loadLocalEntry\"),storeLocalEntry:o((r,a)=>{if(t.isDir(a.mode))t.mkdirTree(r,a.mode);else if(t.isFile(a.mode))t.writeFile(r,a.contents,{canOwn:!0});else throw new Error(\"node type not supported\");t.chmod(r,a.mode),t.utime(r,a.timestamp,a.timestamp)},\"storeLocalEntry\"),removeLocalEntry:o(r=>{var a=t.stat(r);t.isDir(a.mode)?t.rmdir(r):t.isFile(a.mode)&&t.unlink(r)},\"removeLocalEntry\"),loadRemoteEntry:o(async r=>{if(r.kind===\"file\"){let a=await r.getFile();return{contents:new Uint8Array(await a.arrayBuffer()),mode:s.FILE_MODE,timestamp:new Date(a.lastModified)}}else{if(r.kind===\"directory\")return{mode:s.DIR_MODE,timestamp:new Date};throw new Error(\"unknown kind: \"+r.kind)}},\"loadRemoteEntry\"),storeRemoteEntry:o(async(r,a,l)=>{let c=r.get(i.dirname(a)),d=t.isFile(l.mode)?await c.getFileHandle(i.basename(a),{create:!0}):await c.getDirectoryHandle(i.basename(a),{create:!0});if(d.kind===\"file\"){let u=await d.createWritable();await u.write(l.contents),await u.close()}r.set(a,d)},\"storeRemoteEntry\"),removeRemoteEntry:o(async(r,a)=>{await r.get(i.dirname(a)).removeEntry(i.basename(a)),r.delete(a)},\"removeRemoteEntry\"),reconcile:o(async(r,a,l)=>{let c=0,d=[];Object.keys(a.entries).forEach(function(m){let g=a.entries[m],h=l.entries[m];(!h||t.isFile(g.mode)&&g.timestamp.getTime()>h.timestamp.getTime())&&(d.push(m),c++)}),d.sort();let u=[];if(Object.keys(l.entries).forEach(function(m){a.entries[m]||(u.push(m),c++)}),u.sort().reverse(),!c)return;let y=a.type===\"remote\"?a.handles:l.handles;for(let m of d){let g=i.normalize(m.replace(r.mountpoint,\"/\")).substring(1);if(l.type===\"local\"){let h=y.get(g),Q=await s.loadRemoteEntry(h);s.storeLocalEntry(m,Q)}else{let h=s.loadLocalEntry(m);await s.storeRemoteEntry(y,g,h)}}for(let m of u)if(l.type===\"local\")s.removeLocalEntry(m);else{let g=i.normalize(m.replace(r.mountpoint,\"/\")).substring(1);await s.removeRemoteEntry(y,g)}},\"reconcile\")};e.FS.filesystems.NATIVEFS_ASYNC=s}o(q,\"initializeNativeFS\");var me=o(async e=>{let t=[];async function n(s){for await(let r of s.values())t.push(r),r.kind===\"directory\"&&await n(r)}o(n,\"collect\"),await n(e);let i=new Map;i.set(\".\",e);for(let s of t){let r=(await e.resolve(s)).join(\"/\");i.set(r,s)}return i},\"getFsHandles\");var G=W(\"AGFzbQEAAAABDANfAGAAAW9gAW8BfwMDAgECByECD2NyZWF0ZV9zZW50aW5lbAAAC2lzX3NlbnRpbmVsAAEKEwIHAPsBAPsbCwkAIAD7GvsUAAs=\");var ye=async function(){if(!(globalThis.navigator&&(/iPad|iPhone|iPod/.test(navigator.userAgent)||navigator.platform===\"MacIntel\"&&typeof navigator.maxTouchPoints<\"u\"&&navigator.maxTouchPoints>1)))try{let t=await WebAssembly.compile(G);return await WebAssembly.instantiate(t)}catch(t){if(t instanceof WebAssembly.CompileError)return;throw t}}();async function K(){let e=await ye;if(e)return e.exports;let t=Symbol(\"error marker\");return{create_sentinel:o(()=>t,\"create_sentinel\"),is_sentinel:o(n=>n===t,\"is_sentinel\")}}o(K,\"getSentinelImport\");function Y(e){let t={config:e,runtimeEnv:f},n={noImageDecoding:!0,noAudioDecoding:!0,noWasmDecoding:!1,preRun:he(e),print:e.stdout,printErr:e.stderr,onExit(i){n.exitCode=i},thisProgram:e._sysExecutable,arguments:e.args,API:t,locateFile:o(i=>e.indexURL+i,\"locateFile\"),instantiateWasm:Ne(e.indexURL)};return n}o(Y,\"createSettings\");function ge(e){return function(t){let n=\"/\";try{t.FS.mkdirTree(e)}catch(i){console.error(`Error occurred while making a home directory '${e}':`),console.error(i),console.error(`Using '${n}' for a home directory instead`),e=n}t.FS.chdir(e)}}o(ge,\"createHomeDirectory\");function be(e){return function(t){Object.assign(t.ENV,e)}}o(be,\"setEnvironment\");function ve(e){return e?[async t=>{t.addRunDependency(\"fsInitHook\");try{await e(t.FS,{sitePackages:t.API.sitePackages})}finally{t.removeRunDependency(\"fsInitHook\")}}]:[]}o(ve,\"callFsInitHook\");function Ee(e){let t=e.HEAPU32[e._Py_Version>>>2],n=t>>>24&255,i=t>>>16&255,s=t>>>8&255;return[n,i,s]}o(Ee,\"computeVersionTuple\");function Pe(e){let t=j(e);return async n=>{n.API.pyVersionTuple=Ee(n);let[i,s]=n.API.pyVersionTuple;n.FS.mkdirTree(\"/lib\"),n.API.sitePackages=`/lib/python${i}.${s}/site-packages`,n.FS.mkdirTree(n.API.sitePackages),n.addRunDependency(\"install-stdlib\");try{let r=await t;n.FS.writeFile(`/lib/python${i}${s}.zip`,r)}catch(r){console.error(\"Error occurred while installing the standard library:\"),console.error(r)}finally{n.removeRunDependency(\"install-stdlib\")}}}o(Pe,\"installStdlib\");function he(e){let t;return e.stdLibURL!=null?t=e.stdLibURL:t=e.indexURL+\"python_stdlib.zip\",[Pe(t),ge(e.env.HOME),be(e.env),q,...ve(e.fsInit)]}o(he,\"getFileSystemInitializationFuncs\");function Ne(e){if(typeof WasmOffsetConverter<\"u\")return;let{binary:t,response:n}=R(e+\"pyodide.asm.wasm\"),i=K();return function(s,r){return async function(){s.sentinel=await i;try{let a;n?a=await WebAssembly.instantiateStreaming(n,s):a=await WebAssembly.instantiate(await t,s);let{instance:l,module:c}=a;r(l,c)}catch(a){console.warn(\"wasm instantiation failed!\"),console.warn(a)}}(),{}}}o(Ne,\"getInstantiateWasmFunc\");var X=\"0.29.3\";function k(e){return e===void 0||e.endsWith(\"/\")?e:e+\"/\"}o(k,\"withTrailingSlash\");var U=X;async function Se(e={}){if(await T(),e.lockFileContents&&e.lockFileURL)throw new Error(\"Can't pass both lockFileContents and lockFileURL\");let t=e.indexURL||await z();if(t=k(_(t)),e.packageBaseUrl=k(e.packageBaseUrl),e.cdnUrl=k(e.packageBaseUrl??`https://cdn.jsdelivr.net/pyodide/v${U}/full/`),!e.lockFileContents){let s=e.lockFileURL??t+\"pyodide-lock.json\";e.lockFileContents=V(s),e.packageBaseUrl??=J(s)}e.indexURL=t,e.packageCacheDir&&(e.packageCacheDir=k(_(e.packageCacheDir)));let n={fullStdLib:!1,jsglobals:globalThis,stdin:globalThis.prompt?()=>globalThis.prompt():void 0,args:[],env:{},packages:[],packageCacheDir:e.packageBaseUrl,enableRunUntilComplete:!0,checkAPIVersion:!0,BUILD_ID:\"b7b7b0f46eb68e65c029c0dc739270e8a5d35251e9aab6014ee1c2f630e5d1d0\"},i=Object.assign(n,e);return i.env.HOME??=\"/home/pyodide\",i.env.PYTHONINSPECT??=\"1\",i}o(Se,\"initializeConfiguration\");function Ie(e){let t=Y(e),n=t.API;return n.lockFilePromise=Promise.resolve(e.lockFileContents),t}o(Ie,\"createEmscriptenSettings\");async function we(e){if(typeof _createPyodideModule!=\"function\"){let t=`${e.indexURL}pyodide.asm.js`;await w(t)}}o(we,\"loadWasmScript\");async function _e(e,t){if(!e._loadSnapshot)return;let n=await e._loadSnapshot,i=ArrayBuffer.isView(n)?n:new Uint8Array(n);return t.noInitialRun=!0,t.INITIAL_MEMORY=i.length,i}o(_e,\"prepareSnapshot\");async function Re(e){let t=await _createPyodideModule(e);if(e.exitCode!==void 0)throw new t.ExitStatus(e.exitCode);return t}o(Re,\"createPyodideModule\");function ke(e,t){let n=e.API;if(t.pyproxyToStringRepr&&n.setPyProxyToStringMethod(!0),t.convertNullToNone&&n.setCompatNullToNone(!0),t.toJsLiteralMap&&n.setCompatToJsLiteralMap(!0),n.version!==U&&t.checkAPIVersion)throw new Error(`Pyodide version does not match: '${U}' <==> '${n.version}'. If you updated the Pyodide version, make sure you also updated the 'indexURL' parameter passed to loadPyodide.`);e.locateFile=i=>{throw i.endsWith(\".so\")?new Error(`Failed to find dynamic library \"${i}\"`):new Error(`Unexpected call to locateFile(\"${i}\")`)}}o(ke,\"configureAPI\");function Ae(e,t,n){let i=e.API,s;return t&&(s=i.restoreSnapshot(t)),i.finalizeBootstrap(s,n._snapshotDeserializer)}o(Ae,\"bootstrapPyodide\");async function Fe(e,t){let n=e._api;return n.sys.path.insert(0,\"\"),n._pyodide.set_excepthook(),await n.packageIndexReady,n.initializeStreams(t.stdin,t.stdout,t.stderr),e}o(Fe,\"finalizeSetup\");async function ct(e={}){let t=await Se(e),n=Ie(t);await we(t);let i=await _e(t,n),s=await Re(n);ke(s,t);let r=Ae(s,i,t);return await Fe(r,t)}o(ct,\"loadPyodide\");export{ct as loadPyodide,U as version};\n//# sourceMappingURL=pyodide.mjs.map\n","// Python Web Worker - Runs Pyodide in a separate thread\nimport pyoPackageJson from \"pyodide/package.json\";\nimport {loadPyodide, PyodideInterface} from \"pyodide\";\n\nlet pyodide: PyodideInterface | null = null;\nlet interruptBuffer: Uint8Array | null = null;\nlet inputCounter = 0;\nlet workspaceRequestCounter = 0;\nconst pendingInputRequests: Map<string, { resolve: (value: string) => void, reject: (error: any) => void }> = new Map();\nconst pendingWorkspaceRequests: Map<string, { resolve: (value: any) => void, reject: (error: any) => void }> = new Map();\n\n// Store original console methods before interception\nconst originalConsole = {\n log: console.log.bind(console),\n info: console.info.bind(console),\n warn: console.warn.bind(console),\n error: console.error.bind(console),\n debug: console.debug.bind(console)\n};\n\n// Helper to format console arguments\nfunction formatArg(arg: any): string {\n if (arg === null) return 'null';\n if (arg === undefined) return 'undefined';\n if (typeof arg === 'string') return arg;\n if (typeof arg === 'number' || typeof arg === 'boolean') return String(arg);\n if (arg instanceof Error) return `${arg.name}: ${arg.message}`;\n \n try {\n return JSON.stringify(arg);\n } catch {\n return String(arg);\n }\n}\n\n// Intercept worker console and forward to main thread\nconsole.log = function(...args: any[]) {\n originalConsole.log.apply(console, args);\n self.postMessage({\n id: 'console-log',\n type: 'console',\n payload: { level: 'info', message: args.map(a => formatArg(a)).join(' ') }\n });\n};\n\nconsole.info = function(...args: any[]) {\n originalConsole.info.apply(console, args);\n self.postMessage({\n id: 'console-log',\n type: 'console',\n payload: { level: 'info', message: args.map(a => formatArg(a)).join(' ') }\n });\n};\n\nconsole.warn = function(...args: any[]) {\n originalConsole.warn.apply(console, args);\n self.postMessage({\n id: 'console-log',\n type: 'console',\n payload: { level: 'warning', message: args.map(a => formatArg(a)).join(' ') }\n });\n};\n\nconsole.error = function(...args: any[]) {\n originalConsole.error.apply(console, args);\n self.postMessage({\n id: 'console-log',\n type: 'console',\n payload: { level: 'error', message: args.map(a => formatArg(a)).join(' ') }\n });\n};\n\nconsole.debug = function(...args: any[]) {\n originalConsole.debug.apply(console, args);\n self.postMessage({\n id: 'console-log',\n type: 'console',\n payload: { level: 'debug', message: args.map(a => formatArg(a)).join(' ') }\n });\n};\n\n// Message types for worker communication\nexport interface PyWorkerMessage {\n id: string;\n type: 'init' | 'execCode' | 'execModule' | 'runFunction' | 'setGlobal' | 'loadPackages' | 'getVersion' | 'inputResponse' | 'workspaceResponse';\n payload?: any;\n}\n\nexport interface PyWorkerResponse {\n id: string;\n type: 'success' | 'error' | 'stdout' | 'stderr' | 'inputRequest' | 'console' | 'workspaceRequest';\n payload?: any;\n}\n\n// Console output capture\nconst consoleBuffer: string[] = [];\n\nfunction sendMessage(response: PyWorkerResponse) {\n self.postMessage(response);\n}\n\nfunction createWorkspaceRequest(op: string, path?: string, extra?: Record<string, unknown>): Promise<any> {\n const id = `ws-${workspaceRequestCounter++}`;\n return new Promise((resolve, reject) => {\n pendingWorkspaceRequests.set(id, { resolve, reject });\n sendMessage({\n id,\n type: 'workspaceRequest',\n payload: { op, path: path ?? '', ...extra }\n });\n });\n}\n\nfunction createDocksBridge() {\n return {\n read_file: (path: string, binary?: boolean) =>\n createWorkspaceRequest('read', path, { binary: !!binary }),\n write_file: (path: string, content: string | ArrayBuffer | Uint8Array) =>\n createWorkspaceRequest('write', path, { content }),\n list_dir: (path: string) =>\n createWorkspaceRequest('list', path || '.'),\n exists: (path: string) =>\n createWorkspaceRequest('exists', path),\n is_file: (path: string) =>\n createWorkspaceRequest('is_file', path),\n is_dir: (path: string) =>\n createWorkspaceRequest('is_dir', path),\n get_uri: (path: string) =>\n createWorkspaceRequest('get_uri', path),\n revoke_uri: (uri: string) =>\n createWorkspaceRequest('revoke_uri', undefined, { uri }),\n fetch: async (pathOrUri: string) => {\n const isBlobUrl = typeof pathOrUri === 'string' && pathOrUri.startsWith('blob:');\n let url: string;\n if (isBlobUrl) {\n url = pathOrUri;\n } else {\n url = await createWorkspaceRequest('get_uri', pathOrUri);\n }\n const r = await fetch(url);\n if (!isBlobUrl) {\n await createWorkspaceRequest('revoke_uri', undefined, { uri: url });\n }\n return r;\n },\n uri: (path: string) => {\n const state: { _url?: string } = {};\n return {\n async __aenter__() {\n state._url = await createWorkspaceRequest('get_uri', path);\n return state._url;\n },\n async __aexit__(_excType?: unknown, _excVal?: unknown, _excTb?: unknown) {\n if (state._url) {\n await createWorkspaceRequest('revoke_uri', undefined, { uri: state._url });\n state._url = undefined;\n }\n }\n };\n }\n };\n}\n\n// Initialize Pyodide\nasync function initPyodide(payload: { vars?: any }) {\n const poVersion = pyoPackageJson.version;\n pyodide = await loadPyodide({\n indexURL: `https://cdn.jsdelivr.net/pyodide/v${poVersion}/full/`\n });\n \n // Set up interrupt buffer for cancellation support (if available)\n // SharedArrayBuffer requires cross-origin isolation headers:\n // - Cross-Origin-Opener-Policy: same-origin\n // - Cross-Origin-Embedder-Policy: require-corp\n if (typeof SharedArrayBuffer !== 'undefined') {\n try {\n const interruptBufferShared = new SharedArrayBuffer(1);\n interruptBuffer = new Uint8Array(interruptBufferShared);\n pyodide.setInterruptBuffer(interruptBuffer);\n \n // Send the interrupt buffer to main thread\n sendMessage({\n id: 'interrupt-buffer',\n type: 'success',\n payload: interruptBufferShared\n });\n } catch (error) {\n console.warn('Failed to set up interrupt buffer:', error);\n sendMessage({\n id: 'interrupt-buffer',\n type: 'success',\n payload: undefined,\n });\n }\n } else {\n console.warn('SharedArrayBuffer not available - interrupt functionality will be limited');\n sendMessage({\n id: 'interrupt-buffer',\n type: 'success',\n payload: undefined,\n });\n }\n \n // Set up input() function to request input from main thread\n pyodide.globals.set('input', (promptText?: string) => {\n const inputId = `input-${inputCounter++}`;\n \n // Send input request to main thread\n sendMessage({\n id: inputId,\n type: 'inputRequest',\n payload: { prompt: promptText || '' }\n });\n \n // Return a promise that will be resolved when main thread responds\n return new Promise<string>((resolve, reject) => {\n pendingInputRequests.set(inputId, { resolve, reject });\n });\n });\n \n // Set up stdout/stderr capture\n pyodide.setStderr({\n batched: (s: string) => {\n // Store without prefix for cleaner output\n consoleBuffer.push(s);\n sendMessage({\n id: 'stream',\n type: 'stderr',\n payload: s\n });\n }\n });\n \n pyodide.setStdout({\n batched: (s: string) => {\n // Store without prefix for cleaner output\n consoleBuffer.push(s);\n sendMessage({\n id: 'stream',\n type: 'stdout',\n payload: s\n });\n }\n });\n \n const docksBridge = createDocksBridge();\n pyodide.globals.set('__docks_bridge__', docksBridge);\n // make the bridge available to the Python code as a module: > import docks\n pyodide.runPython(`\nimport sys\nimport types\n__bridge__ = __docks_bridge__\n__m__ = types.ModuleType('docks')\nfor __a__ in ('read_file', 'write_file', 'list_dir', 'exists', 'is_file', 'is_dir', 'get_uri', 'revoke_uri', 'fetch', 'uri'):\n setattr(__m__, __a__, getattr(__bridge__, __a__))\nsys.modules['docks'] = __m__\ndel __docks_bridge__, __bridge__, __m__, __a__\n`);\n\n if (payload.vars) {\n for (const [key, value] of Object.entries(payload.vars)) {\n pyodide.globals.set(key, value);\n }\n }\n}\n\n// Load Python packages\nasync function loadPackages(payload: { packages: string[] }) {\n if (!pyodide) throw new Error('Pyodide not initialized');\n \n if (payload.packages.length > 0) {\n await pyodide.loadPackage(payload.packages, {\n checkIntegrity: false\n });\n }\n}\n\n// Convert Python result to JavaScript-cloneable value\nfunction convertResult(result: any): any {\n if (result === undefined || result === null) {\n return result;\n }\n \n // Handle primitives (string, number, boolean)\n const resultType = typeof result;\n if (resultType === 'string' || resultType === 'number' || resultType === 'boolean') {\n return result;\n }\n \n // Check if it's a PyProxy (Python object) by checking for common PyProxy methods\n if (result && typeof result === 'object') {\n // PyProxy objects have toJs() method\n if (typeof result.toJs === 'function') {\n try {\n // Convert to JavaScript object\n const jsValue = result.toJs({ \n dict_converter: Object.fromEntries,\n create_pyproxies: false \n });\n \n // Clean up PyProxy\n if (typeof result.destroy === 'function') {\n result.destroy();\n }\n \n return jsValue;\n } catch (error) {\n // If conversion fails, stringify it\n try {\n const strValue = String(result);\n if (typeof result.destroy === 'function') {\n result.destroy();\n }\n return strValue;\n } catch {\n return '[Python object]';\n }\n }\n }\n \n // Try to clone regular JS objects\n try {\n // This will throw if object is not cloneable\n structuredClone(result);\n return result;\n } catch {\n // If not cloneable, try to stringify\n try {\n return JSON.parse(JSON.stringify(result));\n } catch {\n return String(result);\n }\n }\n }\n \n // Fallback for any other type\n return result;\n}\n\n// Execute Python code\nasync function execCode(payload: { code: string }) {\n if (!pyodide) throw new Error('Pyodide not initialized');\n \n consoleBuffer.length = 0;\n \n // Reset interrupt buffer before execution\n if (interruptBuffer) {\n interruptBuffer[0] = 0;\n }\n \n let result;\n try {\n result = await pyodide.runPythonAsync(payload.code);\n } catch (error) {\n // Reset interrupt buffer after error (including KeyboardInterrupt)\n if (interruptBuffer) {\n interruptBuffer[0] = 0;\n }\n // Error will be caught by outer try-catch, but make sure console is captured\n throw error;\n }\n \n if (interruptBuffer) {\n interruptBuffer[0] = 0;\n }\n \n return {\n result: convertResult(result),\n console: consoleBuffer.slice()\n };\n}\n\n// Execute Python module\nasync function execModule(payload: { moduleName: string; entryName?: string; vars?: any }) {\n if (!pyodide) throw new Error('Pyodide not initialized');\n \n consoleBuffer.length = 0;\n const mod = pyodide.pyimport(payload.moduleName);\n const entryName = payload.entryName ?? 'main';\n \n let result;\n if (entryName in mod) {\n const func = mod[entryName];\n if (!(func instanceof Function)) {\n throw new Error(`Module entry point is not a function: ${entryName}`);\n }\n result = func.callKwargs(payload.vars || {});\n }\n \n return {\n result: convertResult(result),\n console: consoleBuffer.slice()\n };\n}\n\n// Run a Python function\nasync function runFunction(payload: { name: string; args: any }) {\n if (!pyodide) throw new Error('Pyodide not initialized');\n \n consoleBuffer.length = 0;\n const func = pyodide.globals.get(payload.name);\n const result = func.callKwargs(payload.args);\n func.destroy();\n \n return {\n result: convertResult(result),\n console: consoleBuffer.slice()\n };\n}\n\n// Set a global variable\nasync function setGlobal(payload: { key: string; value: any }) {\n if (!pyodide) throw new Error('Pyodide not initialized');\n pyodide.globals.set(payload.key, payload.value);\n}\n\n// Get Python version (e.g. \"3.12.0\")\nasync function getVersion() {\n if (!pyodide) throw new Error('Pyodide not initialized');\n const result = await pyodide.runPythonAsync(\"import sys; sys.version.split()[0]\");\n return result != null ? String(result) : String(pyodide.version);\n}\n\n// Message handler\nself.onmessage = async (event: MessageEvent<PyWorkerMessage>) => {\n const { id, type, payload } = event.data;\n \n if (type === 'inputResponse') {\n const pending = pendingInputRequests.get(id);\n if (pending) {\n pendingInputRequests.delete(id);\n if (payload.cancelled) {\n pending.resolve('');\n } else {\n pending.resolve(payload.value || '');\n }\n }\n return;\n }\n\n if (type === 'workspaceResponse') {\n const pending = pendingWorkspaceRequests.get(id);\n if (pending) {\n pendingWorkspaceRequests.delete(id);\n if (payload?.success === false) {\n pending.reject(new Error(payload.error ?? 'Workspace request failed'));\n } else {\n pending.resolve(payload?.data);\n }\n }\n return;\n }\n\n try {\n let result;\n \n switch (type) {\n case 'init':\n await initPyodide(payload);\n result = { initialized: true };\n break;\n case 'loadPackages':\n await loadPackages(payload);\n result = { loaded: true };\n break;\n case 'execCode':\n result = await execCode(payload);\n break;\n case 'execModule':\n result = await execModule(payload);\n break;\n case 'runFunction':\n result = await runFunction(payload);\n break;\n case 'setGlobal':\n await setGlobal(payload);\n result = { set: true };\n break;\n case 'getVersion':\n result = await getVersion();\n break;\n default:\n throw new Error(`Unknown message type: ${type}`);\n }\n \n sendMessage({\n id,\n type: 'success',\n payload: result\n });\n } catch (error) {\n sendMessage({\n id,\n type: 'error',\n payload: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n });\n }\n};\n"],"x_google_ignoreList":[0,2],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { t as PyEnv } from "./pyservice-DyVO8QVd.js";
1
+ import { t as PyEnv } from "./pyservice-DGwNXWO4.js";
2
2
  import { registerAll, toastError } from "@eclipse-docks/core";
3
3
  //#region src/commands.ts
4
4
  registerAll({
@@ -26,4 +26,4 @@ registerAll({
26
26
  });
27
27
  //#endregion
28
28
 
29
- //# sourceMappingURL=commands-BOpt2gSk.js.map
29
+ //# sourceMappingURL=commands-D0y3XxCw.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands-BOpt2gSk.js","names":[],"sources":["../src/commands.ts"],"sourcesContent":["import { registerAll, toastError } from \"@eclipse-docks/core\";\nimport { PyEnv } from \"./pyservice\";\n\nregisterAll({\n command: {\n id: \"python\",\n name: \"Run Python Cell\",\n description: \"Runs Python code.\",\n keyBinding: \"CTRL+R\",\n parameters: [\n {\n name: \"code\",\n description: \"Python code to execute\",\n required: true\n }\n ]\n },\n handler: {\n execute: async (context: any) => {\n const code: string | undefined = context.params?.code;\n if (!code) {\n toastError(\"No Python code provided.\");\n return;\n }\n const pyenv = new PyEnv();\n await pyenv.init({ params: context.params });\n return await pyenv.execCode(code);\n }\n }\n});\n\n"],"mappings":";;;AAGA,YAAY;CACV,SAAS;EACP,IAAI;EACJ,MAAM;EACN,aAAa;EACb,YAAY;EACZ,YAAY,CACV;GACE,MAAM;GACN,aAAa;GACb,UAAU;GACX,CACF;EACF;CACD,SAAS,EACP,SAAS,OAAO,YAAiB;EAC/B,MAAM,OAA2B,QAAQ,QAAQ;AACjD,MAAI,CAAC,MAAM;AACT,cAAW,2BAA2B;AACtC;;EAEF,MAAM,QAAQ,IAAI,OAAO;AACzB,QAAM,MAAM,KAAK,EAAE,QAAQ,QAAQ,QAAQ,CAAC;AAC5C,SAAO,MAAM,MAAM,SAAS,KAAK;IAEpC;CACF,CAAC"}
1
+ {"version":3,"file":"commands-D0y3XxCw.js","names":[],"sources":["../src/commands.ts"],"sourcesContent":["import { registerAll, toastError } from \"@eclipse-docks/core\";\nimport { PyEnv } from \"./pyservice\";\n\nregisterAll({\n command: {\n id: \"python\",\n name: \"Run Python Cell\",\n description: \"Runs Python code.\",\n keyBinding: \"CTRL+R\",\n parameters: [\n {\n name: \"code\",\n description: \"Python code to execute\",\n required: true\n }\n ]\n },\n handler: {\n execute: async (context: any) => {\n const code: string | undefined = context.params?.code;\n if (!code) {\n toastError(\"No Python code provided.\");\n return;\n }\n const pyenv = new PyEnv();\n await pyenv.init({ params: context.params });\n return await pyenv.execCode(code);\n }\n }\n});\n\n"],"mappings":";;;AAGA,YAAY;CACV,SAAS;EACP,IAAI;EACJ,MAAM;EACN,aAAa;EACb,YAAY;EACZ,YAAY,CACV;GACE,MAAM;GACN,aAAa;GACb,UAAU;GACX,CACF;EACF;CACD,SAAS,EACP,SAAS,OAAO,YAAiB;EAC/B,MAAM,OAA2B,QAAQ,QAAQ;AACjD,MAAI,CAAC,MAAM;AACT,cAAW,2BAA2B;AACtC;;EAEF,MAAM,QAAQ,IAAI,OAAO;AACzB,QAAM,MAAM,KAAK,EAAE,QAAQ,QAAQ,QAAQ,CAAC;AAC5C,SAAO,MAAM,MAAM,SAAS,KAAK;IAEpC;CACF,CAAC"}
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ extensionRegistry.registerExtension({
9
9
  id: pkg.name,
10
10
  name: t.EXT_PYTHONRUNTIME_NAME,
11
11
  description: t.EXT_PYTHONRUNTIME_DESC,
12
- loader: () => Promise.all([import("./python-runtime-extension-Cq6sUjv7.js"), import("./commands-BOpt2gSk.js")]),
12
+ loader: () => Promise.all([import("./python-runtime-extension-qSvGLwAk.js"), import("./commands-D0y3XxCw.js")]),
13
13
  icon: "docks python"
14
14
  });
15
15
  //#endregion
@@ -0,0 +1,267 @@
1
+ import { Directory, File, createLogger, workspaceService } from "@eclipse-docks/core";
2
+ //#region src/pyworker.ts?worker&inline
3
+ var jsContent = "//#region \\0rolldown/runtime.js\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {\n key = keys[i];\n if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {\n get: ((k) => from[k]).bind(null, key),\n enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable\n });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", {\n value: mod,\n enumerable: true\n}) : target, mod));\nvar __require = /* @__PURE__ */ ((x) => typeof require !== \"undefined\" ? require : typeof Proxy !== \"undefined\" ? new Proxy(x, { get: (a, b) => (typeof require !== \"undefined\" ? require : a)[b] }) : x)(function(x) {\n if (typeof require !== \"undefined\") return require.apply(this, arguments);\n throw Error(\"Calling `require` for \\\"\" + x + \"\\\" in an environment that doesn't expose the `require` function. See https://rolldown.rs/in-depth/bundling-cjs#require-external-modules for more details.\");\n});\nvar package_default = {\n name: \"pyodide\",\n version: \"0.29.3\",\n description: \"The Pyodide JavaScript package\",\n keywords: [\"python\", \"webassembly\"],\n homepage: \"https://github.com/pyodide/pyodide\",\n repository: {\n \"type\": \"git\",\n \"url\": \"https://github.com/pyodide/pyodide\"\n },\n bugs: { \"url\": \"https://github.com/pyodide/pyodide/issues\" },\n license: \"MPL-2.0\",\n dependencies: {\n \"@types/emscripten\": \"^1.41.4\",\n \"ws\": \"^8.5.0\"\n },\n devDependencies: {\n \"@biomejs/biome\": \"2.1.1\",\n \"@playwright/test\": \"^1.55.1\",\n \"@types/assert\": \"^1.5.6\",\n \"@types/expect\": \"^24.3.0\",\n \"@types/node\": \"^20.8.4\",\n \"@types/ws\": \"^8.5.3\",\n \"cross-env\": \"^7.0.3\",\n \"dts-bundle-generator\": \"^8.1.1\",\n \"esbuild\": \"^0.25.0\",\n \"express\": \"^4.17.3\",\n \"mocha\": \"^9.0.2\",\n \"npm-run-all\": \"^4.1.5\",\n \"nyc\": \"^15.1.0\",\n \"playwright\": \"^1.55.1\",\n \"prettier\": \"^2.2.1\",\n \"tsd\": \"^0.24.1\",\n \"tsx\": \"^4.20.5\",\n \"typedoc\": \"^0.27.6\",\n \"typescript\": \"5.7\",\n \"wabt\": \"^1.0.32\"\n },\n main: \"pyodide.js\",\n exports: {\n \".\": {\n \"types\": \"./pyodide.d.ts\",\n \"require\": \"./pyodide.js\",\n \"import\": \"./pyodide.mjs\"\n },\n \"./ffi\": { \"types\": \"./ffi.d.ts\" },\n \"./pyodide.asm.wasm\": \"./pyodide.asm.wasm\",\n \"./pyodide.asm.js\": \"./pyodide.asm.js\",\n \"./python_stdlib.zip\": \"./python_stdlib.zip\",\n \"./pyodide.mjs\": \"./pyodide.mjs\",\n \"./pyodide.js\": \"./pyodide.js\",\n \"./package.json\": \"./package.json\",\n \"./pyodide-lock.json\": \"./pyodide-lock.json\"\n },\n files: [\n \"pyodide.asm.js\",\n \"pyodide.asm.wasm\",\n \"python_stdlib.zip\",\n \"pyodide.mjs\",\n \"pyodide.js.map\",\n \"pyodide.mjs.map\",\n \"pyodide.d.ts\",\n \"ffi.d.ts\",\n \"pyodide-lock.json\",\n \"console.html\",\n \"console-v2.html\"\n ],\n browser: {\n \"child_process\": false,\n \"crypto\": false,\n \"fs\": false,\n \"fs/promises\": false,\n \"path\": false,\n \"url\": false,\n \"vm\": false,\n \"ws\": false\n },\n scripts: {\n \"build-inner\": \"node esbuild.config.inner.mjs\",\n \"build\": \"tsc --noEmit && node esbuild.config.outer.mjs\",\n \"test\": \"npm-run-all test:*\",\n \"test:unit\": \"cross-env TEST_NODE=1 node --import tsx --experimental-wasm-stack-switching --test 'test/unit/**/*.test.*'\",\n \"test:node\": \"cross-env TEST_NODE=1 npx playwright test\",\n \"test:browser\": \"npx playwright test\",\n \"tsc\": \"tsc --noEmit\",\n \"coverage\": \"cross-env TEST_NODE=1 npm-run-all coverage:*\",\n \"coverage:build\": \"nyc npm run test:node\"\n },\n nyc: {\n \"reporter\": [\"html\", \"text-summary\"],\n \"include\": [\"*.ts\"],\n \"all\": true,\n \"clean\": true,\n \"cache\": false,\n \"instrument\": false,\n \"checkCoverage\": true,\n \"statements\": 95,\n \"functions\": 95,\n \"branches\": 80,\n \"lines\": 95\n },\n tsd: { \"compilerOptions\": { \"lib\": [\"ES2017\", \"DOM\"] } },\n types: \"./pyodide.d.ts\",\n engines: { \"node\": \">=18.0.0\" }\n};\n//#endregion\n//#region __vite-browser-external\nvar require___vite_browser_external = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n module.exports = {};\n}));\n//#endregion\n//#region ../../node_modules/pyodide/pyodide.mjs\nvar Z = Object.defineProperty;\nvar o = (e, t) => Z(e, \"name\", {\n value: t,\n configurable: !0\n}), A = ((e) => typeof __require < \"u\" ? __require : typeof Proxy < \"u\" ? new Proxy(e, { get: (t, n) => (typeof __require < \"u\" ? __require : t)[n] }) : e)(function(e) {\n if (typeof __require < \"u\") return __require.apply(this, arguments);\n throw Error(\"Dynamic require of \\\"\" + e + \"\\\" is not supported\");\n});\nvar W = (() => {\n for (var e = new Uint8Array(128), t = 0; t < 64; t++) e[t < 26 ? t + 65 : t < 52 ? t + 71 : t < 62 ? t - 4 : t * 4 - 205] = t;\n return (n) => {\n for (var i = n.length, s = new Uint8Array((i - (n[i - 1] == \"=\") - (n[i - 2] == \"=\")) * 3 / 4 | 0), r = 0, a = 0; r < i;) {\n var l = e[n.charCodeAt(r++)], c = e[n.charCodeAt(r++)], d = e[n.charCodeAt(r++)], u = e[n.charCodeAt(r++)];\n s[a++] = l << 2 | c >> 4, s[a++] = c << 4 | d >> 2, s[a++] = d << 6 | u;\n }\n return s;\n };\n})();\nfunction ee(e) {\n return !isNaN(parseFloat(e)) && isFinite(e);\n}\no(ee, \"_isNumber\");\nfunction P(e) {\n return e.charAt(0).toUpperCase() + e.substring(1);\n}\no(P, \"_capitalize\");\nfunction x(e) {\n return function() {\n return this[e];\n };\n}\no(x, \"_getter\");\nvar N = [\n \"isConstructor\",\n \"isEval\",\n \"isNative\",\n \"isToplevel\"\n], S = [\"columnNumber\", \"lineNumber\"], I = [\n \"fileName\",\n \"functionName\",\n \"source\"\n], F = N.concat(S, I, [\"args\"], [\"evalOrigin\"]);\nfunction p(e) {\n if (e) for (var t = 0; t < F.length; t++) e[F[t]] !== void 0 && this[\"set\" + P(F[t])](e[F[t]]);\n}\no(p, \"StackFrame\");\np.prototype = {\n getArgs: o(function() {\n return this.args;\n }, \"getArgs\"),\n setArgs: o(function(e) {\n if (Object.prototype.toString.call(e) !== \"[object Array]\") throw new TypeError(\"Args must be an Array\");\n this.args = e;\n }, \"setArgs\"),\n getEvalOrigin: o(function() {\n return this.evalOrigin;\n }, \"getEvalOrigin\"),\n setEvalOrigin: o(function(e) {\n if (e instanceof p) this.evalOrigin = e;\n else if (e instanceof Object) this.evalOrigin = new p(e);\n else throw new TypeError(\"Eval Origin must be an Object or StackFrame\");\n }, \"setEvalOrigin\"),\n toString: o(function() {\n var e = this.getFileName() || \"\", t = this.getLineNumber() || \"\", n = this.getColumnNumber() || \"\", i = this.getFunctionName() || \"\";\n return this.getIsEval() ? e ? \"[eval] (\" + e + \":\" + t + \":\" + n + \")\" : \"[eval]:\" + t + \":\" + n : i ? i + \" (\" + e + \":\" + t + \":\" + n + \")\" : e + \":\" + t + \":\" + n;\n }, \"toString\")\n};\np.fromString = o(function(t) {\n var n = t.indexOf(\"(\"), i = t.lastIndexOf(\")\"), s = t.substring(0, n), r = t.substring(n + 1, i).split(\",\"), a = t.substring(i + 1);\n if (a.indexOf(\"@\") === 0) var l = /@(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(a, \"\"), c = l[1], d = l[2], u = l[3];\n return new p({\n functionName: s,\n args: r || void 0,\n fileName: c,\n lineNumber: d || void 0,\n columnNumber: u || void 0\n });\n}, \"StackFrame$$fromString\");\nfor (b = 0; b < N.length; b++) p.prototype[\"get\" + P(N[b])] = x(N[b]), p.prototype[\"set\" + P(N[b])] = function(e) {\n return function(t) {\n this[e] = !!t;\n };\n}(N[b]);\nvar b;\nfor (v = 0; v < S.length; v++) p.prototype[\"get\" + P(S[v])] = x(S[v]), p.prototype[\"set\" + P(S[v])] = function(e) {\n return function(t) {\n if (!ee(t)) throw new TypeError(e + \" must be a Number\");\n this[e] = Number(t);\n };\n}(S[v]);\nvar v;\nfor (E = 0; E < I.length; E++) p.prototype[\"get\" + P(I[E])] = x(I[E]), p.prototype[\"set\" + P(I[E])] = function(e) {\n return function(t) {\n this[e] = String(t);\n };\n}(I[E]);\nvar E, O = p;\nfunction re() {\n var e = /^\\s*at .*(\\S+:\\d+|\\(native\\))/m, t = /^(eval@)?(\\[native code])?$/;\n return {\n parse: o(function(i) {\n if (i.stack && i.stack.match(e)) return this.parseV8OrIE(i);\n if (i.stack) return this.parseFFOrSafari(i);\n throw new Error(\"Cannot parse given Error object\");\n }, \"ErrorStackParser$$parse\"),\n extractLocation: o(function(i) {\n if (i.indexOf(\":\") === -1) return [i];\n var r = /(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(i.replace(/[()]/g, \"\"));\n return [\n r[1],\n r[2] || void 0,\n r[3] || void 0\n ];\n }, \"ErrorStackParser$$extractLocation\"),\n parseV8OrIE: o(function(i) {\n return i.stack.split(`\n`).filter(function(r) {\n return !!r.match(e);\n }, this).map(function(r) {\n r.indexOf(\"(eval \") > -1 && (r = r.replace(/eval code/g, \"eval\").replace(/(\\(eval at [^()]*)|(,.*$)/g, \"\"));\n var a = r.replace(/^\\s+/, \"\").replace(/\\(eval code/g, \"(\").replace(/^.*?\\s+/, \"\"), l = a.match(/ (\\(.+\\)$)/);\n a = l ? a.replace(l[0], \"\") : a;\n var c = this.extractLocation(l ? l[1] : a);\n return new O({\n functionName: l && a || void 0,\n fileName: [\"eval\", \"<anonymous>\"].indexOf(c[0]) > -1 ? void 0 : c[0],\n lineNumber: c[1],\n columnNumber: c[2],\n source: r\n });\n }, this);\n }, \"ErrorStackParser$$parseV8OrIE\"),\n parseFFOrSafari: o(function(i) {\n return i.stack.split(`\n`).filter(function(r) {\n return !r.match(t);\n }, this).map(function(r) {\n if (r.indexOf(\" > eval\") > -1 && (r = r.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, \":$1\")), r.indexOf(\"@\") === -1 && r.indexOf(\":\") === -1) return new O({ functionName: r });\n var a = /((.*\".+\"[^@]*)?[^@]*)(?:@)/, l = r.match(a), c = l && l[1] ? l[1] : void 0, d = this.extractLocation(r.replace(a, \"\"));\n return new O({\n functionName: c,\n fileName: d[0],\n lineNumber: d[1],\n columnNumber: d[2],\n source: r\n });\n }, this);\n }, \"ErrorStackParser$$parseFFOrSafari\")\n };\n}\no(re, \"ErrorStackParser\");\nvar M = new re();\nfunction oe() {\n if (typeof API < \"u\" && API !== globalThis.API) return API.runtimeEnv;\n return ae({\n IN_BUN: typeof Bun < \"u\",\n IN_DENO: typeof Deno < \"u\",\n IN_NODE: typeof process == \"object\" && typeof process.versions == \"object\" && typeof process.versions.node == \"string\" && !process.browser,\n IN_SAFARI: typeof navigator == \"object\" && typeof navigator.userAgent == \"string\" && navigator.userAgent.indexOf(\"Chrome\") === -1 && navigator.userAgent.indexOf(\"Safari\") > -1,\n IN_SHELL: typeof read == \"function\" && typeof load == \"function\"\n });\n}\no(oe, \"getGlobalRuntimeEnv\");\nvar f = oe();\nfunction ae(e) {\n let t = e.IN_NODE && typeof module < \"u\" && module.exports && typeof A == \"function\" && typeof __dirname == \"string\", n = e.IN_NODE && !t, i = !e.IN_NODE && !e.IN_DENO && !e.IN_BUN, s = i && typeof window < \"u\" && typeof window.document < \"u\" && typeof document.createElement == \"function\" && \"sessionStorage\" in window && typeof globalThis.importScripts != \"function\", r = i && typeof globalThis.WorkerGlobalScope < \"u\" && typeof globalThis.self < \"u\" && globalThis.self instanceof globalThis.WorkerGlobalScope;\n return {\n ...e,\n IN_BROWSER: i,\n IN_BROWSER_MAIN_THREAD: s,\n IN_BROWSER_WEB_WORKER: r,\n IN_NODE_COMMONJS: t,\n IN_NODE_ESM: n\n };\n}\no(ae, \"calculateDerivedFlags\");\nvar $, D, H, B, L;\nasync function T() {\n if (!f.IN_NODE || ($ = (await Promise.resolve().then(() => /* @__PURE__ */ __toESM(require___vite_browser_external(), 1))).default, B = await Promise.resolve().then(() => /* @__PURE__ */ __toESM(require___vite_browser_external(), 1)), L = await Promise.resolve().then(() => /* @__PURE__ */ __toESM(require___vite_browser_external(), 1)), H = (await Promise.resolve().then(() => /* @__PURE__ */ __toESM(require___vite_browser_external(), 1))).default, D = await Promise.resolve().then(() => /* @__PURE__ */ __toESM(require___vite_browser_external(), 1)), C = D.sep, typeof A < \"u\")) return;\n let s = {\n fs: B,\n crypto: await Promise.resolve().then(() => /* @__PURE__ */ __toESM(require___vite_browser_external(), 1)),\n ws: await Promise.resolve().then(() => /* @__PURE__ */ __toESM(require___vite_browser_external(), 1)),\n child_process: await Promise.resolve().then(() => /* @__PURE__ */ __toESM(require___vite_browser_external(), 1))\n };\n globalThis.require = function(r) {\n return s[r];\n };\n}\no(T, \"initNodeModules\");\nfunction se(e, t) {\n return D.resolve(t || \".\", e);\n}\no(se, \"node_resolvePath\");\nfunction le(e, t) {\n return t === void 0 && (t = location), new URL(e, t).toString();\n}\no(le, \"browser_resolvePath\");\nvar _;\nf.IN_NODE ? _ = se : f.IN_SHELL ? _ = o((e) => e, \"resolvePath\") : _ = le;\nvar C;\nf.IN_NODE || (C = \"/\");\nfunction ce(e, t) {\n return e.startsWith(\"file://\") && (e = e.slice(7)), e.includes(\"://\") ? { response: fetch(e) } : { binary: L.readFile(e).then((n) => new Uint8Array(n.buffer, n.byteOffset, n.byteLength)) };\n}\no(ce, \"node_getBinaryResponse\");\nfunction de(e, t) {\n if (e.startsWith(\"file://\") && (e = e.slice(7)), e.includes(\"://\")) throw new Error(\"Shell cannot fetch urls\");\n return { binary: Promise.resolve(new Uint8Array(readbuffer(e))) };\n}\no(de, \"shell_getBinaryResponse\");\nfunction ue(e, t) {\n let n = new URL(e, location);\n return { response: fetch(n, t ? { integrity: t } : {}) };\n}\no(ue, \"browser_getBinaryResponse\");\nvar R;\nf.IN_NODE ? R = ce : f.IN_SHELL ? R = de : R = ue;\nasync function j(e, t) {\n let { response: n, binary: i } = R(e, t);\n if (i) return i;\n let s = await n;\n if (!s.ok) throw new Error(`Failed to load '${e}': request failed.`);\n return new Uint8Array(await s.arrayBuffer());\n}\no(j, \"loadBinaryFile\");\nvar w;\nif (f.IN_BROWSER_MAIN_THREAD) w = o(async (e) => await import(e), \"loadScript\");\nelse if (f.IN_BROWSER_WEB_WORKER) w = o(async (e) => {\n try {\n globalThis.importScripts(e);\n } catch (t) {\n if (t instanceof TypeError) await import(e);\n else throw t;\n }\n}, \"loadScript\");\nelse if (f.IN_NODE) w = fe;\nelse if (f.IN_SHELL) w = load;\nelse throw new Error(\"Cannot determine runtime environment\");\nasync function fe(e) {\n e.startsWith(\"file://\") && (e = e.slice(7)), e.includes(\"://\") ? H.runInThisContext(await (await fetch(e)).text()) : await import($.pathToFileURL(e).href);\n}\no(fe, \"nodeLoadScript\");\nasync function V(e) {\n if (f.IN_NODE) {\n await T();\n let t = await L.readFile(e, { encoding: \"utf8\" });\n return JSON.parse(t);\n } else if (f.IN_SHELL) {\n let t = read(e);\n return JSON.parse(t);\n } else return await (await fetch(e)).json();\n}\no(V, \"loadLockFile\");\nasync function z() {\n if (f.IN_NODE_COMMONJS) return __dirname;\n let e;\n try {\n throw new Error();\n } catch (i) {\n e = i;\n }\n let t = M.parse(e)[0].fileName;\n if (f.IN_NODE && !t.startsWith(\"file://\") && (t = `file://${t}`), f.IN_NODE_ESM) {\n let i = await Promise.resolve().then(() => /* @__PURE__ */ __toESM(require___vite_browser_external(), 1));\n return (await Promise.resolve().then(() => /* @__PURE__ */ __toESM(require___vite_browser_external(), 1))).fileURLToPath(i.dirname(t));\n }\n let n = t.lastIndexOf(C);\n if (n === -1) throw new Error(\"Could not extract indexURL path from pyodide module location. Please pass the indexURL explicitly to loadPyodide.\");\n return t.slice(0, n);\n}\no(z, \"calculateDirname\");\nfunction J(e) {\n return e.substring(0, e.lastIndexOf(\"/\") + 1) || globalThis.location?.toString() || \".\";\n}\no(J, \"calculateInstallBaseUrl\");\nfunction q(e) {\n let t = e.FS, n = e.FS.filesystems.MEMFS, i = e.PATH, s = {\n DIR_MODE: 16895,\n FILE_MODE: 33279,\n mount: o(function(r) {\n if (!r.opts.fileSystemHandle) throw new Error(\"opts.fileSystemHandle is required\");\n return n.mount.apply(null, arguments);\n }, \"mount\"),\n syncfs: o(async (r, a, l) => {\n try {\n let c = s.getLocalSet(r), d = await s.getRemoteSet(r), u = a ? d : c, y = a ? c : d;\n await s.reconcile(r, u, y), l(null);\n } catch (c) {\n l(c);\n }\n }, \"syncfs\"),\n getLocalSet: o((r) => {\n let a = Object.create(null);\n function l(u) {\n return u !== \".\" && u !== \"..\";\n }\n o(l, \"isRealDir\");\n function c(u) {\n return (y) => i.join2(u, y);\n }\n o(c, \"toAbsolute\");\n let d = t.readdir(r.mountpoint).filter(l).map(c(r.mountpoint));\n for (; d.length;) {\n let u = d.pop(), y = t.stat(u);\n t.isDir(y.mode) && d.push.apply(d, t.readdir(u).filter(l).map(c(u))), a[u] = {\n timestamp: y.mtime,\n mode: y.mode\n };\n }\n return {\n type: \"local\",\n entries: a\n };\n }, \"getLocalSet\"),\n getRemoteSet: o(async (r) => {\n let a = Object.create(null), l = await me(r.opts.fileSystemHandle);\n for (let [c, d] of l) c !== \".\" && (a[i.join2(r.mountpoint, c)] = {\n timestamp: d.kind === \"file\" ? new Date((await d.getFile()).lastModified) : /* @__PURE__ */ new Date(),\n mode: d.kind === \"file\" ? s.FILE_MODE : s.DIR_MODE\n });\n return {\n type: \"remote\",\n entries: a,\n handles: l\n };\n }, \"getRemoteSet\"),\n loadLocalEntry: o((r) => {\n let l = t.lookupPath(r, {}).node, c = t.stat(r);\n if (t.isDir(c.mode)) return {\n timestamp: c.mtime,\n mode: c.mode\n };\n if (t.isFile(c.mode)) return l.contents = n.getFileDataAsTypedArray(l), {\n timestamp: c.mtime,\n mode: c.mode,\n contents: l.contents\n };\n throw new Error(\"node type not supported\");\n }, \"loadLocalEntry\"),\n storeLocalEntry: o((r, a) => {\n if (t.isDir(a.mode)) t.mkdirTree(r, a.mode);\n else if (t.isFile(a.mode)) t.writeFile(r, a.contents, { canOwn: !0 });\n else throw new Error(\"node type not supported\");\n t.chmod(r, a.mode), t.utime(r, a.timestamp, a.timestamp);\n }, \"storeLocalEntry\"),\n removeLocalEntry: o((r) => {\n var a = t.stat(r);\n t.isDir(a.mode) ? t.rmdir(r) : t.isFile(a.mode) && t.unlink(r);\n }, \"removeLocalEntry\"),\n loadRemoteEntry: o(async (r) => {\n if (r.kind === \"file\") {\n let a = await r.getFile();\n return {\n contents: new Uint8Array(await a.arrayBuffer()),\n mode: s.FILE_MODE,\n timestamp: new Date(a.lastModified)\n };\n } else {\n if (r.kind === \"directory\") return {\n mode: s.DIR_MODE,\n timestamp: /* @__PURE__ */ new Date()\n };\n throw new Error(\"unknown kind: \" + r.kind);\n }\n }, \"loadRemoteEntry\"),\n storeRemoteEntry: o(async (r, a, l) => {\n let c = r.get(i.dirname(a)), d = t.isFile(l.mode) ? await c.getFileHandle(i.basename(a), { create: !0 }) : await c.getDirectoryHandle(i.basename(a), { create: !0 });\n if (d.kind === \"file\") {\n let u = await d.createWritable();\n await u.write(l.contents), await u.close();\n }\n r.set(a, d);\n }, \"storeRemoteEntry\"),\n removeRemoteEntry: o(async (r, a) => {\n await r.get(i.dirname(a)).removeEntry(i.basename(a)), r.delete(a);\n }, \"removeRemoteEntry\"),\n reconcile: o(async (r, a, l) => {\n let c = 0, d = [];\n Object.keys(a.entries).forEach(function(m) {\n let g = a.entries[m], h = l.entries[m];\n (!h || t.isFile(g.mode) && g.timestamp.getTime() > h.timestamp.getTime()) && (d.push(m), c++);\n }), d.sort();\n let u = [];\n if (Object.keys(l.entries).forEach(function(m) {\n a.entries[m] || (u.push(m), c++);\n }), u.sort().reverse(), !c) return;\n let y = a.type === \"remote\" ? a.handles : l.handles;\n for (let m of d) {\n let g = i.normalize(m.replace(r.mountpoint, \"/\")).substring(1);\n if (l.type === \"local\") {\n let h = y.get(g), Q = await s.loadRemoteEntry(h);\n s.storeLocalEntry(m, Q);\n } else {\n let h = s.loadLocalEntry(m);\n await s.storeRemoteEntry(y, g, h);\n }\n }\n for (let m of u) if (l.type === \"local\") s.removeLocalEntry(m);\n else {\n let g = i.normalize(m.replace(r.mountpoint, \"/\")).substring(1);\n await s.removeRemoteEntry(y, g);\n }\n }, \"reconcile\")\n };\n e.FS.filesystems.NATIVEFS_ASYNC = s;\n}\no(q, \"initializeNativeFS\");\nvar me = o(async (e) => {\n let t = [];\n async function n(s) {\n for await (let r of s.values()) t.push(r), r.kind === \"directory\" && await n(r);\n }\n o(n, \"collect\"), await n(e);\n let i = /* @__PURE__ */ new Map();\n i.set(\".\", e);\n for (let s of t) {\n let r = (await e.resolve(s)).join(\"/\");\n i.set(r, s);\n }\n return i;\n}, \"getFsHandles\");\nvar G = W(\"AGFzbQEAAAABDANfAGAAAW9gAW8BfwMDAgECByECD2NyZWF0ZV9zZW50aW5lbAAAC2lzX3NlbnRpbmVsAAEKEwIHAPsBAPsbCwkAIAD7GvsUAAs=\");\nvar ye = async function() {\n if (!(globalThis.navigator && (/iPad|iPhone|iPod/.test(navigator.userAgent) || navigator.platform === \"MacIntel\" && typeof navigator.maxTouchPoints < \"u\" && navigator.maxTouchPoints > 1))) try {\n let t = await WebAssembly.compile(G);\n return await WebAssembly.instantiate(t);\n } catch (t) {\n if (t instanceof WebAssembly.CompileError) return;\n throw t;\n }\n}();\nasync function K() {\n let e = await ye;\n if (e) return e.exports;\n let t = Symbol(\"error marker\");\n return {\n create_sentinel: o(() => t, \"create_sentinel\"),\n is_sentinel: o((n) => n === t, \"is_sentinel\")\n };\n}\no(K, \"getSentinelImport\");\nfunction Y(e) {\n let t = {\n config: e,\n runtimeEnv: f\n }, n = {\n noImageDecoding: !0,\n noAudioDecoding: !0,\n noWasmDecoding: !1,\n preRun: he(e),\n print: e.stdout,\n printErr: e.stderr,\n onExit(i) {\n n.exitCode = i;\n },\n thisProgram: e._sysExecutable,\n arguments: e.args,\n API: t,\n locateFile: o((i) => e.indexURL + i, \"locateFile\"),\n instantiateWasm: Ne(e.indexURL)\n };\n return n;\n}\no(Y, \"createSettings\");\nfunction ge(e) {\n return function(t) {\n let n = \"/\";\n try {\n t.FS.mkdirTree(e);\n } catch (i) {\n console.error(`Error occurred while making a home directory '${e}':`), console.error(i), console.error(`Using '${n}' for a home directory instead`), e = n;\n }\n t.FS.chdir(e);\n };\n}\no(ge, \"createHomeDirectory\");\nfunction be(e) {\n return function(t) {\n Object.assign(t.ENV, e);\n };\n}\no(be, \"setEnvironment\");\nfunction ve(e) {\n return e ? [async (t) => {\n t.addRunDependency(\"fsInitHook\");\n try {\n await e(t.FS, { sitePackages: t.API.sitePackages });\n } finally {\n t.removeRunDependency(\"fsInitHook\");\n }\n }] : [];\n}\no(ve, \"callFsInitHook\");\nfunction Ee(e) {\n let t = e.HEAPU32[e._Py_Version >>> 2];\n return [\n t >>> 24 & 255,\n t >>> 16 & 255,\n t >>> 8 & 255\n ];\n}\no(Ee, \"computeVersionTuple\");\nfunction Pe(e) {\n let t = j(e);\n return async (n) => {\n n.API.pyVersionTuple = Ee(n);\n let [i, s] = n.API.pyVersionTuple;\n n.FS.mkdirTree(\"/lib\"), n.API.sitePackages = `/lib/python${i}.${s}/site-packages`, n.FS.mkdirTree(n.API.sitePackages), n.addRunDependency(\"install-stdlib\");\n try {\n let r = await t;\n n.FS.writeFile(`/lib/python${i}${s}.zip`, r);\n } catch (r) {\n console.error(\"Error occurred while installing the standard library:\"), console.error(r);\n } finally {\n n.removeRunDependency(\"install-stdlib\");\n }\n };\n}\no(Pe, \"installStdlib\");\nfunction he(e) {\n let t;\n return e.stdLibURL != null ? t = e.stdLibURL : t = e.indexURL + \"python_stdlib.zip\", [\n Pe(t),\n ge(e.env.HOME),\n be(e.env),\n q,\n ...ve(e.fsInit)\n ];\n}\no(he, \"getFileSystemInitializationFuncs\");\nfunction Ne(e) {\n if (typeof WasmOffsetConverter < \"u\") return;\n let { binary: t, response: n } = R(e + \"pyodide.asm.wasm\"), i = K();\n return function(s, r) {\n return async function() {\n s.sentinel = await i;\n try {\n let a;\n n ? a = await WebAssembly.instantiateStreaming(n, s) : a = await WebAssembly.instantiate(await t, s);\n let { instance: l, module: c } = a;\n r(l, c);\n } catch (a) {\n console.warn(\"wasm instantiation failed!\"), console.warn(a);\n }\n }(), {};\n };\n}\no(Ne, \"getInstantiateWasmFunc\");\nvar X = \"0.29.3\";\nfunction k(e) {\n return e === void 0 || e.endsWith(\"/\") ? e : e + \"/\";\n}\no(k, \"withTrailingSlash\");\nvar U = X;\nasync function Se(e = {}) {\n if (await T(), e.lockFileContents && e.lockFileURL) throw new Error(\"Can't pass both lockFileContents and lockFileURL\");\n let t = e.indexURL || await z();\n if (t = k(_(t)), e.packageBaseUrl = k(e.packageBaseUrl), e.cdnUrl = k(e.packageBaseUrl ?? `https://cdn.jsdelivr.net/pyodide/v0.29.3/full/`), !e.lockFileContents) {\n let s = e.lockFileURL ?? t + \"pyodide-lock.json\";\n e.lockFileContents = V(s), e.packageBaseUrl ??= J(s);\n }\n e.indexURL = t, e.packageCacheDir && (e.packageCacheDir = k(_(e.packageCacheDir)));\n let n = {\n fullStdLib: !1,\n jsglobals: globalThis,\n stdin: globalThis.prompt ? () => globalThis.prompt() : void 0,\n args: [],\n env: {},\n packages: [],\n packageCacheDir: e.packageBaseUrl,\n enableRunUntilComplete: !0,\n checkAPIVersion: !0,\n BUILD_ID: \"b7b7b0f46eb68e65c029c0dc739270e8a5d35251e9aab6014ee1c2f630e5d1d0\"\n }, i = Object.assign(n, e);\n return i.env.HOME ??= \"/home/pyodide\", i.env.PYTHONINSPECT ??= \"1\", i;\n}\no(Se, \"initializeConfiguration\");\nfunction Ie(e) {\n let t = Y(e), n = t.API;\n return n.lockFilePromise = Promise.resolve(e.lockFileContents), t;\n}\no(Ie, \"createEmscriptenSettings\");\nasync function we(e) {\n if (typeof _createPyodideModule != \"function\") {\n let t = `${e.indexURL}pyodide.asm.js`;\n await w(t);\n }\n}\no(we, \"loadWasmScript\");\nasync function _e(e, t) {\n if (!e._loadSnapshot) return;\n let n = await e._loadSnapshot, i = ArrayBuffer.isView(n) ? n : new Uint8Array(n);\n return t.noInitialRun = !0, t.INITIAL_MEMORY = i.length, i;\n}\no(_e, \"prepareSnapshot\");\nasync function Re(e) {\n let t = await _createPyodideModule(e);\n if (e.exitCode !== void 0) throw new t.ExitStatus(e.exitCode);\n return t;\n}\no(Re, \"createPyodideModule\");\nfunction ke(e, t) {\n let n = e.API;\n if (t.pyproxyToStringRepr && n.setPyProxyToStringMethod(!0), t.convertNullToNone && n.setCompatNullToNone(!0), t.toJsLiteralMap && n.setCompatToJsLiteralMap(!0), n.version !== \"0.29.3\" && t.checkAPIVersion) throw new Error(`Pyodide version does not match: '${U}' <==> '${n.version}'. If you updated the Pyodide version, make sure you also updated the 'indexURL' parameter passed to loadPyodide.`);\n e.locateFile = (i) => {\n throw i.endsWith(\".so\") ? /* @__PURE__ */ new Error(`Failed to find dynamic library \"${i}\"`) : /* @__PURE__ */ new Error(`Unexpected call to locateFile(\"${i}\")`);\n };\n}\no(ke, \"configureAPI\");\nfunction Ae(e, t, n) {\n let i = e.API, s;\n return t && (s = i.restoreSnapshot(t)), i.finalizeBootstrap(s, n._snapshotDeserializer);\n}\no(Ae, \"bootstrapPyodide\");\nasync function Fe(e, t) {\n let n = e._api;\n return n.sys.path.insert(0, \"\"), n._pyodide.set_excepthook(), await n.packageIndexReady, n.initializeStreams(t.stdin, t.stdout, t.stderr), e;\n}\no(Fe, \"finalizeSetup\");\nasync function ct(e = {}) {\n let t = await Se(e), n = Ie(t);\n await we(t);\n let i = await _e(t, n), s = await Re(n);\n ke(s, t);\n return await Fe(Ae(s, i, t), t);\n}\no(ct, \"loadPyodide\");\n//#endregion\n//#region src/pyworker.ts\nlet pyodide = null;\nlet interruptBuffer = null;\nlet inputCounter = 0;\nlet workspaceRequestCounter = 0;\nconst pendingInputRequests = /* @__PURE__ */ new Map();\nconst pendingWorkspaceRequests = /* @__PURE__ */ new Map();\nconst originalConsole = {\n log: console.log.bind(console),\n info: console.info.bind(console),\n warn: console.warn.bind(console),\n error: console.error.bind(console),\n debug: console.debug.bind(console)\n};\nfunction formatArg(arg) {\n if (arg === null) return \"null\";\n if (arg === void 0) return \"undefined\";\n if (typeof arg === \"string\") return arg;\n if (typeof arg === \"number\" || typeof arg === \"boolean\") return String(arg);\n if (arg instanceof Error) return `${arg.name}: ${arg.message}`;\n try {\n return JSON.stringify(arg);\n } catch {\n return String(arg);\n }\n}\nconsole.log = function(...args) {\n originalConsole.log.apply(console, args);\n self.postMessage({\n id: \"console-log\",\n type: \"console\",\n payload: {\n level: \"info\",\n message: args.map((a) => formatArg(a)).join(\" \")\n }\n });\n};\nconsole.info = function(...args) {\n originalConsole.info.apply(console, args);\n self.postMessage({\n id: \"console-log\",\n type: \"console\",\n payload: {\n level: \"info\",\n message: args.map((a) => formatArg(a)).join(\" \")\n }\n });\n};\nconsole.warn = function(...args) {\n originalConsole.warn.apply(console, args);\n self.postMessage({\n id: \"console-log\",\n type: \"console\",\n payload: {\n level: \"warning\",\n message: args.map((a) => formatArg(a)).join(\" \")\n }\n });\n};\nconsole.error = function(...args) {\n originalConsole.error.apply(console, args);\n self.postMessage({\n id: \"console-log\",\n type: \"console\",\n payload: {\n level: \"error\",\n message: args.map((a) => formatArg(a)).join(\" \")\n }\n });\n};\nconsole.debug = function(...args) {\n originalConsole.debug.apply(console, args);\n self.postMessage({\n id: \"console-log\",\n type: \"console\",\n payload: {\n level: \"debug\",\n message: args.map((a) => formatArg(a)).join(\" \")\n }\n });\n};\nconst consoleBuffer = [];\nfunction sendMessage(response) {\n self.postMessage(response);\n}\nfunction createWorkspaceRequest(op, path, extra) {\n const id = `ws-${workspaceRequestCounter++}`;\n return new Promise((resolve, reject) => {\n pendingWorkspaceRequests.set(id, {\n resolve,\n reject\n });\n sendMessage({\n id,\n type: \"workspaceRequest\",\n payload: {\n op,\n path: path ?? \"\",\n ...extra\n }\n });\n });\n}\nfunction createDocksBridge() {\n return {\n read_file: (path, binary) => createWorkspaceRequest(\"read\", path, { binary: !!binary }),\n write_file: (path, content) => createWorkspaceRequest(\"write\", path, { content }),\n list_dir: (path) => createWorkspaceRequest(\"list\", path || \".\"),\n exists: (path) => createWorkspaceRequest(\"exists\", path),\n is_file: (path) => createWorkspaceRequest(\"is_file\", path),\n is_dir: (path) => createWorkspaceRequest(\"is_dir\", path),\n get_uri: (path) => createWorkspaceRequest(\"get_uri\", path),\n revoke_uri: (uri) => createWorkspaceRequest(\"revoke_uri\", void 0, { uri }),\n fetch: async (pathOrUri) => {\n const isBlobUrl = typeof pathOrUri === \"string\" && pathOrUri.startsWith(\"blob:\");\n let url;\n if (isBlobUrl) url = pathOrUri;\n else url = await createWorkspaceRequest(\"get_uri\", pathOrUri);\n const r = await fetch(url);\n if (!isBlobUrl) await createWorkspaceRequest(\"revoke_uri\", void 0, { uri: url });\n return r;\n },\n uri: (path) => {\n const state = {};\n return {\n async __aenter__() {\n state._url = await createWorkspaceRequest(\"get_uri\", path);\n return state._url;\n },\n async __aexit__(_excType, _excVal, _excTb) {\n if (state._url) {\n await createWorkspaceRequest(\"revoke_uri\", void 0, { uri: state._url });\n state._url = void 0;\n }\n }\n };\n }\n };\n}\nasync function initPyodide(payload) {\n const poVersion = package_default.version;\n pyodide = await ct({ indexURL: `https://cdn.jsdelivr.net/pyodide/v${poVersion}/full/` });\n if (typeof SharedArrayBuffer !== \"undefined\") try {\n const interruptBufferShared = new SharedArrayBuffer(1);\n interruptBuffer = new Uint8Array(interruptBufferShared);\n pyodide.setInterruptBuffer(interruptBuffer);\n sendMessage({\n id: \"interrupt-buffer\",\n type: \"success\",\n payload: interruptBufferShared\n });\n } catch (error) {\n console.warn(\"Failed to set up interrupt buffer:\", error);\n sendMessage({\n id: \"interrupt-buffer\",\n type: \"success\",\n payload: void 0\n });\n }\n else {\n console.warn(\"SharedArrayBuffer not available - interrupt functionality will be limited\");\n sendMessage({\n id: \"interrupt-buffer\",\n type: \"success\",\n payload: void 0\n });\n }\n pyodide.globals.set(\"input\", (promptText) => {\n const inputId = `input-${inputCounter++}`;\n sendMessage({\n id: inputId,\n type: \"inputRequest\",\n payload: { prompt: promptText || \"\" }\n });\n return new Promise((resolve, reject) => {\n pendingInputRequests.set(inputId, {\n resolve,\n reject\n });\n });\n });\n pyodide.setStderr({ batched: (s) => {\n consoleBuffer.push(s);\n sendMessage({\n id: \"stream\",\n type: \"stderr\",\n payload: s\n });\n } });\n pyodide.setStdout({ batched: (s) => {\n consoleBuffer.push(s);\n sendMessage({\n id: \"stream\",\n type: \"stdout\",\n payload: s\n });\n } });\n const docksBridge = createDocksBridge();\n pyodide.globals.set(\"__docks_bridge__\", docksBridge);\n pyodide.runPython(`\nimport sys\nimport types\n__bridge__ = __docks_bridge__\n__m__ = types.ModuleType('docks')\nfor __a__ in ('read_file', 'write_file', 'list_dir', 'exists', 'is_file', 'is_dir', 'get_uri', 'revoke_uri', 'fetch', 'uri'):\n setattr(__m__, __a__, getattr(__bridge__, __a__))\nsys.modules['docks'] = __m__\ndel __docks_bridge__, __bridge__, __m__, __a__\n`);\n if (payload.vars) for (const [key, value] of Object.entries(payload.vars)) pyodide.globals.set(key, value);\n}\nasync function loadPackages(payload) {\n if (!pyodide) throw new Error(\"Pyodide not initialized\");\n if (payload.packages.length > 0) await pyodide.loadPackage(payload.packages, { checkIntegrity: false });\n}\nfunction convertResult(result) {\n if (result === void 0 || result === null) return result;\n const resultType = typeof result;\n if (resultType === \"string\" || resultType === \"number\" || resultType === \"boolean\") return result;\n if (result && typeof result === \"object\") {\n if (typeof result.toJs === \"function\") try {\n const jsValue = result.toJs({\n dict_converter: Object.fromEntries,\n create_pyproxies: false\n });\n if (typeof result.destroy === \"function\") result.destroy();\n return jsValue;\n } catch (error) {\n try {\n const strValue = String(result);\n if (typeof result.destroy === \"function\") result.destroy();\n return strValue;\n } catch {\n return \"[Python object]\";\n }\n }\n try {\n structuredClone(result);\n return result;\n } catch {\n try {\n return JSON.parse(JSON.stringify(result));\n } catch {\n return String(result);\n }\n }\n }\n return result;\n}\nasync function execCode(payload) {\n if (!pyodide) throw new Error(\"Pyodide not initialized\");\n consoleBuffer.length = 0;\n if (interruptBuffer) interruptBuffer[0] = 0;\n let result;\n try {\n result = await pyodide.runPythonAsync(payload.code);\n } catch (error) {\n if (interruptBuffer) interruptBuffer[0] = 0;\n throw error;\n }\n if (interruptBuffer) interruptBuffer[0] = 0;\n return {\n result: convertResult(result),\n console: consoleBuffer.slice()\n };\n}\nasync function execModule(payload) {\n if (!pyodide) throw new Error(\"Pyodide not initialized\");\n consoleBuffer.length = 0;\n const mod = pyodide.pyimport(payload.moduleName);\n const entryName = payload.entryName ?? \"main\";\n let result;\n if (entryName in mod) {\n const func = mod[entryName];\n if (!(func instanceof Function)) throw new Error(`Module entry point is not a function: ${entryName}`);\n result = func.callKwargs(payload.vars || {});\n }\n return {\n result: convertResult(result),\n console: consoleBuffer.slice()\n };\n}\nasync function runFunction(payload) {\n if (!pyodide) throw new Error(\"Pyodide not initialized\");\n consoleBuffer.length = 0;\n const func = pyodide.globals.get(payload.name);\n const result = func.callKwargs(payload.args);\n func.destroy();\n return {\n result: convertResult(result),\n console: consoleBuffer.slice()\n };\n}\nasync function setGlobal(payload) {\n if (!pyodide) throw new Error(\"Pyodide not initialized\");\n pyodide.globals.set(payload.key, payload.value);\n}\nasync function getVersion() {\n if (!pyodide) throw new Error(\"Pyodide not initialized\");\n const result = await pyodide.runPythonAsync(\"import sys; sys.version.split()[0]\");\n return result != null ? String(result) : String(pyodide.version);\n}\nself.onmessage = async (event) => {\n const { id, type, payload } = event.data;\n if (type === \"inputResponse\") {\n const pending = pendingInputRequests.get(id);\n if (pending) {\n pendingInputRequests.delete(id);\n if (payload.cancelled) pending.resolve(\"\");\n else pending.resolve(payload.value || \"\");\n }\n return;\n }\n if (type === \"workspaceResponse\") {\n const pending = pendingWorkspaceRequests.get(id);\n if (pending) {\n pendingWorkspaceRequests.delete(id);\n if (payload?.success === false) pending.reject(new Error(payload.error ?? \"Workspace request failed\"));\n else pending.resolve(payload?.data);\n }\n return;\n }\n try {\n let result;\n switch (type) {\n case \"init\":\n await initPyodide(payload);\n result = { initialized: true };\n break;\n case \"loadPackages\":\n await loadPackages(payload);\n result = { loaded: true };\n break;\n case \"execCode\":\n result = await execCode(payload);\n break;\n case \"execModule\":\n result = await execModule(payload);\n break;\n case \"runFunction\":\n result = await runFunction(payload);\n break;\n case \"setGlobal\":\n await setGlobal(payload);\n result = { set: true };\n break;\n case \"getVersion\":\n result = await getVersion();\n break;\n default: throw new Error(`Unknown message type: ${type}`);\n }\n sendMessage({\n id,\n type: \"success\",\n payload: result\n });\n } catch (error) {\n sendMessage({\n id,\n type: \"error\",\n payload: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : void 0\n }\n });\n }\n};\n//#endregion\n\n//# sourceMappingURL=pyworker-CSZ-Rp_9.js.map";
4
+ var blob = typeof self !== "undefined" && self.Blob && new Blob(["URL.revokeObjectURL(import.meta.url);", jsContent], { type: "text/javascript;charset=utf-8" });
5
+ function WorkerWrapper(options) {
6
+ let objURL;
7
+ try {
8
+ objURL = blob && (self.URL || self.webkitURL).createObjectURL(blob);
9
+ if (!objURL) throw "";
10
+ const worker = new Worker(objURL, {
11
+ type: "module",
12
+ name: options?.name
13
+ });
14
+ worker.addEventListener("error", () => {
15
+ (self.URL || self.webkitURL).revokeObjectURL(objURL);
16
+ });
17
+ return worker;
18
+ } catch (e) {
19
+ return new Worker("data:text/javascript;charset=utf-8," + encodeURIComponent(jsContent), {
20
+ type: "module",
21
+ name: options?.name
22
+ });
23
+ }
24
+ }
25
+ //#endregion
26
+ //#region src/pyservice.ts
27
+ var logger = createLogger("PyService");
28
+ var messageId = 0;
29
+ var PyEnv = class {
30
+ constructor() {
31
+ this.pendingMessages = /* @__PURE__ */ new Map();
32
+ }
33
+ async init(vars) {
34
+ this.vars = vars ?? {};
35
+ const worker = new WorkerWrapper();
36
+ this.worker = worker;
37
+ worker.onmessage = (event) => {
38
+ this.handleWorkerMessage(event.data);
39
+ };
40
+ worker.onerror = (ev) => {
41
+ const where = [
42
+ ev.message,
43
+ ev.filename,
44
+ ev.lineno,
45
+ ev.colno
46
+ ].filter(Boolean).join(" ");
47
+ const head = `Python worker failed (script load or uncaught exception)${where ? `: ${where}` : ""}`;
48
+ if (ev.error instanceof Error) logger.error(head, ev.error);
49
+ else logger.error(head);
50
+ };
51
+ await this.sendMessage("init", { vars: this.vars });
52
+ }
53
+ async handleWorkspaceRequest(response) {
54
+ const { id, payload } = response;
55
+ const { op, path, ...extra } = payload ?? {};
56
+ const send = (success, data, error) => {
57
+ this.worker.postMessage({
58
+ id,
59
+ type: "workspaceResponse",
60
+ payload: {
61
+ success,
62
+ data,
63
+ error
64
+ }
65
+ });
66
+ };
67
+ try {
68
+ const workspace = await workspaceService.getWorkspace();
69
+ if (!workspace) {
70
+ send(false, void 0, "No workspace selected");
71
+ return;
72
+ }
73
+ const resolvePath = (p) => p === "" || p === "." ? "" : p;
74
+ switch (op) {
75
+ case "read": {
76
+ const resource = await workspace.getResource(resolvePath(path));
77
+ if (!resource || !(resource instanceof File)) {
78
+ send(false, void 0, `File not found: ${path}`);
79
+ return;
80
+ }
81
+ if (!!extra.binary) {
82
+ const blob = await resource.getContents({ blob: true });
83
+ send(true, blob instanceof Blob ? await blob.arrayBuffer() : /* @__PURE__ */ new ArrayBuffer(0));
84
+ } else {
85
+ const content = await resource.getContents();
86
+ send(true, typeof content === "string" ? content : String(content ?? ""));
87
+ }
88
+ return;
89
+ }
90
+ case "write": {
91
+ let content = extra.content;
92
+ if (content instanceof ArrayBuffer || ArrayBuffer.isView(content)) content = new Blob([content]);
93
+ const target = await workspace.getResource(resolvePath(path), { create: true });
94
+ if (!target || !(target instanceof File)) {
95
+ send(false, void 0, `Failed to create file: ${path}`);
96
+ return;
97
+ }
98
+ await target.saveContents(content);
99
+ send(true);
100
+ return;
101
+ }
102
+ case "list": {
103
+ const resource = await workspace.getResource(resolvePath(path));
104
+ if (!resource || !(resource instanceof Directory)) {
105
+ send(false, void 0, `Directory not found: ${path}`);
106
+ return;
107
+ }
108
+ send(true, (await resource.listChildren(false)).map((r) => r.getName()));
109
+ return;
110
+ }
111
+ case "exists":
112
+ send(true, await workspace.getResource(resolvePath(path)) != null);
113
+ return;
114
+ case "is_file":
115
+ send(true, await workspace.getResource(resolvePath(path)) instanceof File);
116
+ return;
117
+ case "is_dir":
118
+ send(true, await workspace.getResource(resolvePath(path)) instanceof Directory);
119
+ return;
120
+ case "get_uri": {
121
+ const resource = await workspace.getResource(resolvePath(path));
122
+ if (!resource || !(resource instanceof File)) {
123
+ send(false, void 0, `File not found: ${path}`);
124
+ return;
125
+ }
126
+ const uri = await resource.getContents({ uri: true });
127
+ send(true, typeof uri === "string" ? uri : void 0);
128
+ return;
129
+ }
130
+ case "revoke_uri": {
131
+ const uri = extra.uri;
132
+ if (typeof uri === "string") URL.revokeObjectURL(uri);
133
+ send(true);
134
+ return;
135
+ }
136
+ default: send(false, void 0, `Unknown workspace op: ${op}`);
137
+ }
138
+ } catch (err) {
139
+ send(false, void 0, err instanceof Error ? err.message : String(err));
140
+ }
141
+ }
142
+ handleWorkerMessage(response) {
143
+ if (response.id === "interrupt-buffer") {
144
+ const buf = response.type === "success" ? response.payload : void 0;
145
+ this.interruptBuffer = buf instanceof SharedArrayBuffer ? new Uint8Array(buf) : void 0;
146
+ return;
147
+ }
148
+ if (response.type === "workspaceRequest") {
149
+ this.handleWorkspaceRequest(response);
150
+ return;
151
+ }
152
+ if (response.type === "inputRequest") {
153
+ const promptText = response.payload.prompt || "Input:";
154
+ const userInput = window.prompt(promptText);
155
+ this.worker.postMessage({
156
+ id: response.id,
157
+ type: "inputResponse",
158
+ payload: {
159
+ value: userInput,
160
+ cancelled: userInput === null
161
+ }
162
+ });
163
+ return;
164
+ }
165
+ if (response.type === "stdout") {
166
+ if (this.stdoutCallback) this.stdoutCallback(response.payload);
167
+ else logger.debug(response.payload);
168
+ return;
169
+ }
170
+ if (response.type === "stderr") {
171
+ if (this.stderrCallback) this.stderrCallback(response.payload);
172
+ else logger.error(response.payload);
173
+ return;
174
+ }
175
+ if (response.type === "console") {
176
+ const { level, message } = response.payload;
177
+ if (typeof window !== "undefined" && window.logToTerminal) window.logToTerminal("Python Worker", message, level);
178
+ return;
179
+ }
180
+ const pending = this.pendingMessages.get(response.id);
181
+ if (pending) {
182
+ this.pendingMessages.delete(response.id);
183
+ if (response.type === "success") pending.resolve(response.payload);
184
+ else if (response.type === "error") pending.reject(new Error(response.payload.message));
185
+ }
186
+ }
187
+ async sendMessage(type, payload) {
188
+ if (!this.worker) throw new Error("PyEnv not initialized yet: see init()");
189
+ const id = `msg-${messageId++}`;
190
+ const message = {
191
+ id,
192
+ type,
193
+ payload
194
+ };
195
+ return new Promise((resolve, reject) => {
196
+ this.pendingMessages.set(id, {
197
+ resolve,
198
+ reject
199
+ });
200
+ this.worker.postMessage(message);
201
+ });
202
+ }
203
+ setStdoutCallback(callback) {
204
+ this.stdoutCallback = callback;
205
+ }
206
+ setStderrCallback(callback) {
207
+ this.stderrCallback = callback;
208
+ }
209
+ async runFunction(name, args) {
210
+ return await this.sendMessage("runFunction", {
211
+ name,
212
+ args
213
+ });
214
+ }
215
+ async setGlobal(key, value) {
216
+ await this.sendMessage("setGlobal", {
217
+ key,
218
+ value
219
+ });
220
+ }
221
+ async loadPackages(packages) {
222
+ if (packages.length > 0) await this.sendMessage("loadPackages", { packages });
223
+ }
224
+ async execCode(code) {
225
+ return await this.sendMessage("execCode", { code });
226
+ }
227
+ async execScript(path, _installDependencies = false) {
228
+ const moduleName = path.split(".")[0];
229
+ const entryName = path.includes(":") ? path.split(":").reverse()[0] : void 0;
230
+ return await this.execModule(moduleName, entryName);
231
+ }
232
+ async execModule(moduleName, entryName) {
233
+ return await this.sendMessage("execModule", {
234
+ moduleName,
235
+ entryName,
236
+ vars: this.vars
237
+ });
238
+ }
239
+ async getVersion() {
240
+ return await this.sendMessage("getVersion");
241
+ }
242
+ /**
243
+ * Check if interrupt functionality is available (requires SharedArrayBuffer).
244
+ */
245
+ canInterrupt() {
246
+ return this.interruptBuffer !== void 0;
247
+ }
248
+ /**
249
+ * Interrupts any currently running Python code.
250
+ * This will cause a KeyboardInterrupt to be raised in the Python code.
251
+ * Only works if SharedArrayBuffer is available (check with canInterrupt()).
252
+ */
253
+ interrupt() {
254
+ if (this.interruptBuffer) this.interruptBuffer[0] = 2;
255
+ }
256
+ close() {
257
+ if (this.worker) {
258
+ this.worker.terminate();
259
+ this.worker = void 0;
260
+ }
261
+ this.pendingMessages.clear();
262
+ }
263
+ };
264
+ //#endregion
265
+ export { PyEnv as t };
266
+
267
+ //# sourceMappingURL=pyservice-DGwNXWO4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pyservice-DGwNXWO4.js","names":[],"sources":["../src/pyservice.ts"],"sourcesContent":["import { createLogger, workspaceService, File, Directory } from \"@eclipse-docks/core\";\n\nconst logger = createLogger('PyService');\nimport type { PyWorkerMessage, PyWorkerResponse } from \"./pyworker\";\nimport PyWorker from \"./pyworker?worker&inline\";\n\nlet messageId = 0;\n\nexport class PyEnv {\n private worker?: Worker;\n private vars: any;\n private pendingMessages: Map<string, { resolve: (value: any) => void, reject: (error: any) => void }> = new Map();\n private stdoutCallback?: (text: string) => void;\n private stderrCallback?: (text: string) => void;\n private interruptBuffer?: Uint8Array;\n\n public async init(vars?: any) {\n this.vars = vars ?? {};\n\n const worker = new PyWorker();\n this.worker = worker;\n\n worker.onmessage = (event: MessageEvent<PyWorkerResponse>) => {\n this.handleWorkerMessage(event.data);\n };\n\n worker.onerror = (ev: ErrorEvent) => {\n const where = [ev.message, ev.filename, ev.lineno, ev.colno].filter(Boolean).join(' ');\n const head = `Python worker failed (script load or uncaught exception)${where ? `: ${where}` : ''}`;\n if (ev.error instanceof Error) {\n logger.error(head, ev.error);\n } else {\n logger.error(head);\n }\n };\n\n await this.sendMessage('init', { vars: this.vars });\n }\n\n private async handleWorkspaceRequest(response: PyWorkerResponse) {\n const { id, payload } = response;\n const { op, path, ...extra } = payload ?? {};\n const send = (success: boolean, data?: unknown, error?: string) => {\n this.worker!.postMessage({\n id,\n type: 'workspaceResponse',\n payload: { success, data, error }\n } as PyWorkerMessage);\n };\n\n try {\n const workspace = await workspaceService.getWorkspace();\n if (!workspace) {\n send(false, undefined, 'No workspace selected');\n return;\n }\n\n const resolvePath = (p: string) => (p === '' || p === '.') ? '' : p;\n\n switch (op) {\n case 'read': {\n const resource = await workspace.getResource(resolvePath(path));\n if (!resource || !(resource instanceof File)) {\n send(false, undefined, `File not found: ${path}`);\n return;\n }\n const binary = !!extra.binary;\n if (binary) {\n const blob = await (resource as File).getContents({ blob: true });\n const buf = blob instanceof Blob ? await blob.arrayBuffer() : new ArrayBuffer(0);\n send(true, buf);\n } else {\n const content = await (resource as File).getContents();\n send(true, typeof content === 'string' ? content : String(content ?? ''));\n }\n return;\n }\n case 'write': {\n let content = extra.content;\n if (content instanceof ArrayBuffer || ArrayBuffer.isView(content)) {\n content = new Blob([content as unknown as BlobPart]);\n }\n const target = await workspace.getResource(resolvePath(path), { create: true });\n if (!target || !(target instanceof File)) {\n send(false, undefined, `Failed to create file: ${path}`);\n return;\n }\n await (target as File).saveContents(content);\n send(true);\n return;\n }\n case 'list': {\n const resource = await workspace.getResource(resolvePath(path));\n if (!resource || !(resource instanceof Directory)) {\n send(false, undefined, `Directory not found: ${path}`);\n return;\n }\n const children = await (resource as Directory).listChildren(false);\n send(true, children.map((r) => r.getName()));\n return;\n }\n case 'exists': {\n const resource = await workspace.getResource(resolvePath(path));\n send(true, resource != null);\n return;\n }\n case 'is_file': {\n const resource = await workspace.getResource(resolvePath(path));\n send(true, resource instanceof File);\n return;\n }\n case 'is_dir': {\n const resource = await workspace.getResource(resolvePath(path));\n send(true, resource instanceof Directory);\n return;\n }\n case 'get_uri': {\n const resource = await workspace.getResource(resolvePath(path));\n if (!resource || !(resource instanceof File)) {\n send(false, undefined, `File not found: ${path}`);\n return;\n }\n const uri = await (resource as File).getContents({ uri: true });\n send(true, typeof uri === 'string' ? uri : undefined);\n return;\n }\n case 'revoke_uri': {\n const uri = extra.uri;\n if (typeof uri === 'string') {\n URL.revokeObjectURL(uri);\n }\n send(true);\n return;\n }\n default:\n send(false, undefined, `Unknown workspace op: ${op}`);\n }\n } catch (err) {\n send(false, undefined, err instanceof Error ? err.message : String(err));\n }\n }\n\n private handleWorkerMessage(response: PyWorkerResponse) {\n // Handle interrupt buffer initialization\n if (response.id === 'interrupt-buffer') {\n const buf = response.type === 'success' ? response.payload : undefined;\n this.interruptBuffer =\n buf instanceof SharedArrayBuffer ? new Uint8Array(buf) : undefined;\n return;\n }\n \n if (response.type === 'workspaceRequest') {\n this.handleWorkspaceRequest(response);\n return;\n }\n\n // Handle input requests\n if (response.type === 'inputRequest') {\n const promptText = response.payload.prompt || 'Input:';\n const userInput = window.prompt(promptText);\n \n // Send response back to worker\n this.worker!.postMessage({\n id: response.id,\n type: 'inputResponse',\n payload: {\n value: userInput,\n cancelled: userInput === null\n }\n } as PyWorkerMessage);\n return;\n }\n \n // Handle stdout/stderr streams\n if (response.type === 'stdout') {\n if (this.stdoutCallback) {\n this.stdoutCallback(response.payload);\n } else {\n logger.debug(response.payload);\n }\n return;\n }\n \n if (response.type === 'stderr') {\n if (this.stderrCallback) {\n this.stderrCallback(response.payload);\n } else {\n logger.error(response.payload);\n }\n return;\n }\n \n // Handle console messages from worker\n if (response.type === 'console') {\n const { level, message } = response.payload;\n // Forward to log terminal\n if (typeof window !== 'undefined' && (window as any).logToTerminal) {\n (window as any).logToTerminal('Python Worker', message, level);\n }\n return;\n }\n\n // Handle regular responses\n const pending = this.pendingMessages.get(response.id);\n if (pending) {\n this.pendingMessages.delete(response.id);\n \n if (response.type === 'success') {\n pending.resolve(response.payload);\n } else if (response.type === 'error') {\n pending.reject(new Error(response.payload.message));\n }\n }\n }\n\n private async sendMessage(type: PyWorkerMessage['type'], payload?: any): Promise<any> {\n if (!this.worker) {\n throw new Error('PyEnv not initialized yet: see init()');\n }\n\n const id = `msg-${messageId++}`;\n const message: PyWorkerMessage = { id, type, payload };\n\n return new Promise((resolve, reject) => {\n this.pendingMessages.set(id, { resolve, reject });\n this.worker!.postMessage(message);\n });\n }\n\n public setStdoutCallback(callback: (text: string) => void) {\n this.stdoutCallback = callback;\n }\n\n public setStderrCallback(callback: (text: string) => void) {\n this.stderrCallback = callback;\n }\n\n public async runFunction(name: string, args: any) {\n return await this.sendMessage('runFunction', { name, args });\n }\n\n public async setGlobal(key: string, value: any) {\n await this.sendMessage('setGlobal', { key, value });\n }\n\n public async loadPackages(packages: string[]) {\n if (packages.length > 0) {\n await this.sendMessage('loadPackages', { packages });\n }\n }\n\n public async execCode(code: string) {\n return await this.sendMessage('execCode', { code });\n }\n\n public async execScript(path: string, _installDependencies: boolean = false) {\n const moduleName = path.split(\".\")[0];\n const entryName = path.includes(\":\") ? path.split(\":\").reverse()[0] : undefined;\n return await this.execModule(moduleName, entryName);\n }\n\n public async execModule(moduleName: string, entryName?: string) {\n return await this.sendMessage('execModule', {\n moduleName,\n entryName,\n vars: this.vars\n });\n }\n\n public async getVersion() {\n return await this.sendMessage('getVersion');\n }\n\n /**\n * Check if interrupt functionality is available (requires SharedArrayBuffer).\n */\n public canInterrupt(): boolean {\n return this.interruptBuffer !== undefined;\n }\n\n /**\n * Interrupts any currently running Python code.\n * This will cause a KeyboardInterrupt to be raised in the Python code.\n * Only works if SharedArrayBuffer is available (check with canInterrupt()).\n */\n public interrupt() {\n if (this.interruptBuffer) {\n // Set the interrupt flag (2 = SIGINT)\n this.interruptBuffer[0] = 2;\n }\n }\n\n close() {\n if (this.worker) {\n this.worker.terminate();\n this.worker = undefined;\n }\n this.pendingMessages.clear();\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pyservice.d.ts","sourceRoot":"","sources":["../src/pyservice.ts"],"names":[],"mappings":"AAQA,qBAAa,KAAK;IACd,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,eAAe,CAA2F;IAClH,OAAO,CAAC,cAAc,CAAC,CAAyB;IAChD,OAAO,CAAC,cAAc,CAAC,CAAyB;IAChD,OAAO,CAAC,eAAe,CAAC,CAAa;IAExB,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG;YAqBd,sBAAsB;IAuGpC,OAAO,CAAC,mBAAmB;YAyEb,WAAW;IAclB,iBAAiB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;IAIlD,iBAAiB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;IAI5C,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG;IAInC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAIjC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE;IAM/B,QAAQ,CAAC,IAAI,EAAE,MAAM;IAIrB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,oBAAoB,GAAE,OAAe;IAM9D,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAQjD,UAAU;IAIvB;;OAEG;IACI,YAAY,IAAI,OAAO;IAI9B;;;;OAIG;IACI,SAAS;IAOhB,KAAK;CAOR"}
1
+ {"version":3,"file":"pyservice.d.ts","sourceRoot":"","sources":["../src/pyservice.ts"],"names":[],"mappings":"AAQA,qBAAa,KAAK;IACd,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,eAAe,CAA2F;IAClH,OAAO,CAAC,cAAc,CAAC,CAAyB;IAChD,OAAO,CAAC,cAAc,CAAC,CAAyB;IAChD,OAAO,CAAC,eAAe,CAAC,CAAa;IAExB,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG;YAuBd,sBAAsB;IAuGpC,OAAO,CAAC,mBAAmB;YAyEb,WAAW;IAclB,iBAAiB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;IAIlD,iBAAiB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;IAI5C,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG;IAInC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAIjC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE;IAM/B,QAAQ,CAAC,IAAI,EAAE,MAAM;IAIrB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,oBAAoB,GAAE,OAAe;IAM9D,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAQjD,UAAU;IAIvB;;OAEG;IACI,YAAY,IAAI,OAAO;IAI9B;;;;OAIG;IACI,SAAS;IAOhB,KAAK;CAOR"}