@eclipse-lyra/extension-python-runtime 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api.d.ts +3 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +7 -0
- package/dist/api.js.map +1 -0
- package/dist/assets/__vite-browser-external-Dhvy_jtL.js +5 -0
- package/dist/assets/__vite-browser-external-Dhvy_jtL.js.map +1 -0
- package/dist/assets/pyworker-_tLBWDbU.js.map +1 -0
- package/dist/commands-3JccKvcq.js +47 -0
- package/dist/commands-3JccKvcq.js.map +1 -0
- package/dist/commands.d.ts +2 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/editor-python-run.d.ts +4 -0
- package/dist/editor-python-run.d.ts.map +1 -0
- package/dist/i18n.json.d.ts +13 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/package-manager-DTcpwrMr.js +299 -0
- package/dist/package-manager-DTcpwrMr.js.map +1 -0
- package/dist/package-manager.d.ts +33 -0
- package/dist/package-manager.d.ts.map +1 -0
- package/dist/pyservice-B-tT6VHu.js +217 -0
- package/dist/pyservice-B-tT6VHu.js.map +1 -0
- package/dist/pyservice.d.ts +37 -0
- package/dist/pyservice.d.ts.map +1 -0
- package/dist/python-editor-BZ-OYhJ1.js +247 -0
- package/dist/python-editor-BZ-OYhJ1.js.map +1 -0
- package/dist/python-editor.d.ts +42 -0
- package/dist/python-editor.d.ts.map +1 -0
- package/dist/python-runtime-extension-B31nPBS0.js +105 -0
- package/dist/python-runtime-extension-B31nPBS0.js.map +1 -0
- package/dist/python-runtime-extension.d.ts +3 -0
- package/dist/python-runtime-extension.d.ts.map +1 -0
- package/dist/pyworker.d.ts +11 -0
- package/dist/pyworker.d.ts.map +1 -0
- package/package.json +35 -0
package/dist/api.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/api.js
ADDED
package/dist/api.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"__vite-browser-external-Dhvy_jtL.js","sources":["../__vite-browser-external"],"sourcesContent":["export default {}"],"names":[],"mappings":"AAAA,IAAA,wBAAe,CAAA;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pyworker-_tLBWDbU.js","sources":["../../../node_modules/pyodide/pyodide.mjs","../src/pyworker.ts"],"sourcesContent":["var Q=Object.defineProperty;var s=(e,t)=>Q(e,\"name\",{value:t,configurable:!0}),R=(e=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(e,{get:(t,o)=>(typeof require<\"u\"?require:t)[o]}):e)(function(e){if(typeof require<\"u\")return require.apply(this,arguments);throw new Error('Dynamic require of \"'+e+'\" is not supported')});function Z(e){return!isNaN(parseFloat(e))&&isFinite(e)}s(Z,\"_isNumber\");function E(e){return e.charAt(0).toUpperCase()+e.substring(1)}s(E,\"_capitalize\");function O(e){return function(){return this[e]}}s(O,\"_getter\");var w=[\"isConstructor\",\"isEval\",\"isNative\",\"isToplevel\"],N=[\"columnNumber\",\"lineNumber\"],_=[\"fileName\",\"functionName\",\"source\"],ee=[\"args\"],te=[\"evalOrigin\"],P=w.concat(N,_,ee,te);function p(e){if(e)for(var t=0;t<P.length;t++)e[P[t]]!==void 0&&this[\"set\"+E(P[t])](e[P[t]])}s(p,\"StackFrame\");p.prototype={getArgs:function(){return this.args},setArgs:function(e){if(Object.prototype.toString.call(e)!==\"[object Array]\")throw new TypeError(\"Args must be an Array\");this.args=e},getEvalOrigin:function(){return this.evalOrigin},setEvalOrigin: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\")},toString:function(){var e=this.getFileName()||\"\",t=this.getLineNumber()||\"\",o=this.getColumnNumber()||\"\",r=this.getFunctionName()||\"\";return this.getIsEval()?e?\"[eval] (\"+e+\":\"+t+\":\"+o+\")\":\"[eval]:\"+t+\":\"+o:r?r+\" (\"+e+\":\"+t+\":\"+o+\")\":e+\":\"+t+\":\"+o}};p.fromString=s(function(t){var o=t.indexOf(\"(\"),r=t.lastIndexOf(\")\"),a=t.substring(0,o),n=t.substring(o+1,r).split(\",\"),i=t.substring(r+1);if(i.indexOf(\"@\")===0)var c=/@(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(i,\"\"),l=c[1],d=c[2],u=c[3];return new p({functionName:a,args:n||void 0,fileName:l,lineNumber:d||void 0,columnNumber:u||void 0})},\"StackFrame$$fromString\");for(b=0;b<w.length;b++)p.prototype[\"get\"+E(w[b])]=O(w[b]),p.prototype[\"set\"+E(w[b])]=function(e){return function(t){this[e]=!!t}}(w[b]);var b;for(v=0;v<N.length;v++)p.prototype[\"get\"+E(N[v])]=O(N[v]),p.prototype[\"set\"+E(N[v])]=function(e){return function(t){if(!Z(t))throw new TypeError(e+\" must be a Number\");this[e]=Number(t)}}(N[v]);var v;for(h=0;h<_.length;h++)p.prototype[\"get\"+E(_[h])]=O(_[h]),p.prototype[\"set\"+E(_[h])]=function(e){return function(t){this[e]=String(t)}}(_[h]);var h,k=p;function ne(){var e=/^\\s*at .*(\\S+:\\d+|\\(native\\))/m,t=/^(eval@)?(\\[native code])?$/;return{parse:s(function(r){if(r.stack&&r.stack.match(e))return this.parseV8OrIE(r);if(r.stack)return this.parseFFOrSafari(r);throw new Error(\"Cannot parse given Error object\")},\"ErrorStackParser$$parse\"),extractLocation:s(function(r){if(r.indexOf(\":\")===-1)return[r];var a=/(.+?)(?::(\\d+))?(?::(\\d+))?$/,n=a.exec(r.replace(/[()]/g,\"\"));return[n[1],n[2]||void 0,n[3]||void 0]},\"ErrorStackParser$$extractLocation\"),parseV8OrIE:s(function(r){var a=r.stack.split(`\n`).filter(function(n){return!!n.match(e)},this);return a.map(function(n){n.indexOf(\"(eval \")>-1&&(n=n.replace(/eval code/g,\"eval\").replace(/(\\(eval at [^()]*)|(,.*$)/g,\"\"));var i=n.replace(/^\\s+/,\"\").replace(/\\(eval code/g,\"(\").replace(/^.*?\\s+/,\"\"),c=i.match(/ (\\(.+\\)$)/);i=c?i.replace(c[0],\"\"):i;var l=this.extractLocation(c?c[1]:i),d=c&&i||void 0,u=[\"eval\",\"<anonymous>\"].indexOf(l[0])>-1?void 0:l[0];return new k({functionName:d,fileName:u,lineNumber:l[1],columnNumber:l[2],source:n})},this)},\"ErrorStackParser$$parseV8OrIE\"),parseFFOrSafari:s(function(r){var a=r.stack.split(`\n`).filter(function(n){return!n.match(t)},this);return a.map(function(n){if(n.indexOf(\" > eval\")>-1&&(n=n.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g,\":$1\")),n.indexOf(\"@\")===-1&&n.indexOf(\":\")===-1)return new k({functionName:n});var i=/((.*\".+\"[^@]*)?[^@]*)(?:@)/,c=n.match(i),l=c&&c[1]?c[1]:void 0,d=this.extractLocation(n.replace(i,\"\"));return new k({functionName:l,fileName:d[0],lineNumber:d[1],columnNumber:d[2],source:n})},this)},\"ErrorStackParser$$parseFFOrSafari\")}}s(ne,\"ErrorStackParser\");var re=new ne;var M=re;var g=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\"&&!process.browser,A=g&&typeof module<\"u\"&&typeof module.exports<\"u\"&&typeof R<\"u\"&&typeof __dirname<\"u\",W=g&&!A,Ne=typeof globalThis.Bun<\"u\",ie=typeof Deno<\"u\",B=!g&&!ie,$=B&&typeof window==\"object\"&&typeof document==\"object\"&&typeof document.createElement==\"function\"&&\"sessionStorage\"in window&&typeof importScripts!=\"function\",j=B&&typeof importScripts==\"function\"&&typeof self==\"object\",_e=typeof navigator==\"object\"&&typeof navigator.userAgent==\"string\"&&navigator.userAgent.indexOf(\"Chrome\")==-1&&navigator.userAgent.indexOf(\"Safari\")>-1;var z,D,V,H,L;async function T(){if(!g||(z=(await import(\"node:url\")).default,H=await import(\"node:fs\"),L=await import(\"node:fs/promises\"),V=(await import(\"node:vm\")).default,D=await import(\"node:path\"),U=D.sep,typeof R<\"u\"))return;let e=H,t=await import(\"node:crypto\"),o=await import(\"ws\"),r=await import(\"node:child_process\"),a={fs:e,crypto:t,ws:o,child_process:r};globalThis.require=function(n){return a[n]}}s(T,\"initNodeModules\");function oe(e,t){return D.resolve(t||\".\",e)}s(oe,\"node_resolvePath\");function ae(e,t){return t===void 0&&(t=location),new URL(e,t).toString()}s(ae,\"browser_resolvePath\");var x;g?x=oe:x=ae;var U;g||(U=\"/\");function se(e,t){return e.startsWith(\"file://\")&&(e=e.slice(7)),e.includes(\"://\")?{response:fetch(e)}:{binary:L.readFile(e).then(o=>new Uint8Array(o.buffer,o.byteOffset,o.byteLength))}}s(se,\"node_getBinaryResponse\");function ce(e,t){let o=new URL(e,location);return{response:fetch(o,t?{integrity:t}:{})}}s(ce,\"browser_getBinaryResponse\");var F;g?F=se:F=ce;async function q(e,t){let{response:o,binary:r}=F(e,t);if(r)return r;let a=await o;if(!a.ok)throw new Error(`Failed to load '${e}': request failed.`);return new Uint8Array(await a.arrayBuffer())}s(q,\"loadBinaryFile\");var I;if($)I=s(async e=>await import(e),\"loadScript\");else if(j)I=s(async e=>{try{globalThis.importScripts(e)}catch(t){if(t instanceof TypeError)await import(e);else throw t}},\"loadScript\");else if(g)I=le;else throw new Error(\"Cannot determine runtime environment\");async function le(e){e.startsWith(\"file://\")&&(e=e.slice(7)),e.includes(\"://\")?V.runInThisContext(await(await fetch(e)).text()):await import(z.pathToFileURL(e).href)}s(le,\"nodeLoadScript\");async function J(e){if(g){await T();let t=await L.readFile(e,{encoding:\"utf8\"});return JSON.parse(t)}else return await(await fetch(e)).json()}s(J,\"loadLockFile\");async function K(){if(A)return __dirname;let e;try{throw new Error}catch(r){e=r}let t=M.parse(e)[0].fileName;if(g&&!t.startsWith(\"file://\")&&(t=`file://${t}`),W){let r=await import(\"node:path\");return(await import(\"node:url\")).fileURLToPath(r.dirname(t))}let o=t.lastIndexOf(U);if(o===-1)throw new Error(\"Could not extract indexURL path from pyodide module location\");return t.slice(0,o)}s(K,\"calculateDirname\");function Y(e){let t=e.FS,o=e.FS.filesystems.MEMFS,r=e.PATH,a={DIR_MODE:16895,FILE_MODE:33279,mount:function(n){if(!n.opts.fileSystemHandle)throw new Error(\"opts.fileSystemHandle is required\");return o.mount.apply(null,arguments)},syncfs:async(n,i,c)=>{try{let l=a.getLocalSet(n),d=await a.getRemoteSet(n),u=i?d:l,m=i?l:d;await a.reconcile(n,u,m),c(null)}catch(l){c(l)}},getLocalSet:n=>{let i=Object.create(null);function c(u){return u!==\".\"&&u!==\"..\"}s(c,\"isRealDir\");function l(u){return m=>r.join2(u,m)}s(l,\"toAbsolute\");let d=t.readdir(n.mountpoint).filter(c).map(l(n.mountpoint));for(;d.length;){let u=d.pop(),m=t.stat(u);t.isDir(m.mode)&&d.push.apply(d,t.readdir(u).filter(c).map(l(u))),i[u]={timestamp:m.mtime,mode:m.mode}}return{type:\"local\",entries:i}},getRemoteSet:async n=>{let i=Object.create(null),c=await de(n.opts.fileSystemHandle);for(let[l,d]of c)l!==\".\"&&(i[r.join2(n.mountpoint,l)]={timestamp:d.kind===\"file\"?new Date((await d.getFile()).lastModified):new Date,mode:d.kind===\"file\"?a.FILE_MODE:a.DIR_MODE});return{type:\"remote\",entries:i,handles:c}},loadLocalEntry:n=>{let c=t.lookupPath(n).node,l=t.stat(n);if(t.isDir(l.mode))return{timestamp:l.mtime,mode:l.mode};if(t.isFile(l.mode))return c.contents=o.getFileDataAsTypedArray(c),{timestamp:l.mtime,mode:l.mode,contents:c.contents};throw new Error(\"node type not supported\")},storeLocalEntry:(n,i)=>{if(t.isDir(i.mode))t.mkdirTree(n,i.mode);else if(t.isFile(i.mode))t.writeFile(n,i.contents,{canOwn:!0});else throw new Error(\"node type not supported\");t.chmod(n,i.mode),t.utime(n,i.timestamp,i.timestamp)},removeLocalEntry:n=>{var i=t.stat(n);t.isDir(i.mode)?t.rmdir(n):t.isFile(i.mode)&&t.unlink(n)},loadRemoteEntry:async n=>{if(n.kind===\"file\"){let i=await n.getFile();return{contents:new Uint8Array(await i.arrayBuffer()),mode:a.FILE_MODE,timestamp:new Date(i.lastModified)}}else{if(n.kind===\"directory\")return{mode:a.DIR_MODE,timestamp:new Date};throw new Error(\"unknown kind: \"+n.kind)}},storeRemoteEntry:async(n,i,c)=>{let l=n.get(r.dirname(i)),d=t.isFile(c.mode)?await l.getFileHandle(r.basename(i),{create:!0}):await l.getDirectoryHandle(r.basename(i),{create:!0});if(d.kind===\"file\"){let u=await d.createWritable();await u.write(c.contents),await u.close()}n.set(i,d)},removeRemoteEntry:async(n,i)=>{await n.get(r.dirname(i)).removeEntry(r.basename(i)),n.delete(i)},reconcile:async(n,i,c)=>{let l=0,d=[];Object.keys(i.entries).forEach(function(f){let y=i.entries[f],S=c.entries[f];(!S||t.isFile(y.mode)&&y.timestamp.getTime()>S.timestamp.getTime())&&(d.push(f),l++)}),d.sort();let u=[];if(Object.keys(c.entries).forEach(function(f){i.entries[f]||(u.push(f),l++)}),u.sort().reverse(),!l)return;let m=i.type===\"remote\"?i.handles:c.handles;for(let f of d){let y=r.normalize(f.replace(n.mountpoint,\"/\")).substring(1);if(c.type===\"local\"){let S=m.get(y),X=await a.loadRemoteEntry(S);a.storeLocalEntry(f,X)}else{let S=a.loadLocalEntry(f);await a.storeRemoteEntry(m,y,S)}}for(let f of u)if(c.type===\"local\")a.removeLocalEntry(f);else{let y=r.normalize(f.replace(n.mountpoint,\"/\")).substring(1);await a.removeRemoteEntry(m,y)}}};e.FS.filesystems.NATIVEFS_ASYNC=a}s(Y,\"initializeNativeFS\");var de=s(async e=>{let t=[];async function o(a){for await(let n of a.values())t.push(n),n.kind===\"directory\"&&await o(n)}s(o,\"collect\"),await o(e);let r=new Map;r.set(\".\",e);for(let a of t){let n=(await e.resolve(a)).join(\"/\");r.set(n,a)}return r},\"getFsHandles\");function G(e){let t={noImageDecoding:!0,noAudioDecoding:!0,noWasmDecoding:!1,preRun:ge(e),quit(o,r){throw t.exited={status:o,toThrow:r},r},print:e.stdout,printErr:e.stderr,thisProgram:e._sysExecutable,arguments:e.args,API:{config:e},locateFile:o=>e.indexURL+o,instantiateWasm:ye(e.indexURL)};return t}s(G,\"createSettings\");function ue(e){return function(t){let o=\"/\";try{t.FS.mkdirTree(e)}catch(r){console.error(`Error occurred while making a home directory '${e}':`),console.error(r),console.error(`Using '${o}' for a home directory instead`),e=o}t.FS.chdir(e)}}s(ue,\"createHomeDirectory\");function fe(e){return function(t){Object.assign(t.ENV,e)}}s(fe,\"setEnvironment\");function me(e){return e?[async t=>{t.addRunDependency(\"fsInitHook\");try{await e(t.FS,{sitePackages:t.API.sitePackages})}finally{t.removeRunDependency(\"fsInitHook\")}}]:[]}s(me,\"callFsInitHook\");function pe(e){let t=q(e);return async o=>{let r=o._py_version_major(),a=o._py_version_minor();o.FS.mkdirTree(\"/lib\"),o.API.sitePackages=`/lib/python${r}.${a}/site-packages`,o.FS.mkdirTree(o.API.sitePackages),o.addRunDependency(\"install-stdlib\");try{let n=await t;o.FS.writeFile(`/lib/python${r}${a}.zip`,n)}catch(n){console.error(\"Error occurred while installing the standard library:\"),console.error(n)}finally{o.removeRunDependency(\"install-stdlib\")}}}s(pe,\"installStdlib\");function ge(e){let t;return e.stdLibURL!=null?t=e.stdLibURL:t=e.indexURL+\"python_stdlib.zip\",[...me(e.fsInit),pe(t),ue(e.env.HOME),fe(e.env),Y]}s(ge,\"getFileSystemInitializationFuncs\");function ye(e){if(typeof WasmOffsetConverter<\"u\")return;let{binary:t,response:o}=F(e+\"pyodide.asm.wasm\");return function(r,a){return async function(){try{let n;o?n=await WebAssembly.instantiateStreaming(o,r):n=await WebAssembly.instantiate(await t,r);let{instance:i,module:c}=n;a(i,c)}catch(n){console.warn(\"wasm instantiation failed!\"),console.warn(n)}}(),{}}}s(ye,\"getInstantiateWasmFunc\");var C=\"0.27.7\";async function $e(e={}){var u,m;await T();let t=e.indexURL||await K();t=x(t),t.endsWith(\"/\")||(t+=\"/\"),e.indexURL=t;let o={fullStdLib:!1,jsglobals:globalThis,stdin:globalThis.prompt?globalThis.prompt:void 0,lockFileURL:t+\"pyodide-lock.json\",args:[],env:{},packageCacheDir:t,packages:[],enableRunUntilComplete:!0,checkAPIVersion:!0,BUILD_ID:\"e94377f5ce7dcf67e0417b69a0016733c2cfb6b4622ee8c490a6f17eb58e863b\"},r=Object.assign(o,e);(u=r.env).HOME??(u.HOME=\"/home/pyodide\"),(m=r.env).PYTHONINSPECT??(m.PYTHONINSPECT=\"1\");let a=G(r),n=a.API;if(n.lockFilePromise=J(r.lockFileURL),typeof _createPyodideModule!=\"function\"){let f=`${r.indexURL}pyodide.asm.js`;await I(f)}let i;if(e._loadSnapshot){let f=await e._loadSnapshot;ArrayBuffer.isView(f)?i=f:i=new Uint8Array(f),a.noInitialRun=!0,a.INITIAL_MEMORY=i.length}let c=await _createPyodideModule(a);if(a.exited)throw a.exited.toThrow;if(e.pyproxyToStringRepr&&n.setPyProxyToStringMethod(!0),n.version!==C&&r.checkAPIVersion)throw new Error(`Pyodide version does not match: '${C}' <==> '${n.version}'. If you updated the Pyodide version, make sure you also updated the 'indexURL' parameter passed to loadPyodide.`);c.locateFile=f=>{throw new Error(\"Didn't expect to load any more file_packager files!\")};let l;i&&(l=n.restoreSnapshot(i));let d=n.finalizeBootstrap(l,e._snapshotDeserializer);return n.sys.path.insert(0,\"\"),d.version.includes(\"dev\")||n.setCdnUrl(`https://cdn.jsdelivr.net/pyodide/v${d.version}/full/`),n._pyodide.set_excepthook(),await n.packageIndexReady,n.initializeStreams(r.stdin,r.stdout,r.stderr),d}s($e,\"loadPyodide\");export{$e as loadPyodide,C 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 workspaceMountFS: any = null;\nlet interruptBuffer: Uint8Array | null = null;\nlet inputCounter = 0;\nconst pendingInputRequests: Map<string, { resolve: (value: string) => 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' | 'syncWorkspace' | 'getVersion' | 'mountWorkspace' | 'installDependencies' | 'inputResponse';\n payload?: any;\n}\n\nexport interface PyWorkerResponse {\n id: string;\n type: 'success' | 'error' | 'stdout' | 'stderr' | 'inputRequest' | 'console';\n payload?: any;\n}\n\n// Console output capture\nconst consoleBuffer: string[] = [];\n\nfunction sendMessage(response: PyWorkerResponse) {\n self.postMessage(response);\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 // Send notification that interrupt buffer is not available\n sendMessage({\n id: 'interrupt-buffer',\n type: 'error',\n payload: { message: 'SharedArrayBuffer not available' }\n });\n }\n } else {\n console.warn('SharedArrayBuffer not available - interrupt functionality will be limited');\n // Send notification that interrupt buffer is not available\n sendMessage({\n id: 'interrupt-buffer',\n type: 'error',\n payload: { message: 'SharedArrayBuffer not available' }\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 // Set custom variables if provided\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// Mount workspace using FileSystemDirectoryHandle\nasync function mountWorkspace(payload: { handle: FileSystemDirectoryHandle; mountPoint?: string }) {\n if (!pyodide) throw new Error('Pyodide not initialized');\n \n const mountPoint = payload.mountPoint || '/workspace';\n workspaceMountFS = await pyodide.mountNativeFS(mountPoint, payload.handle);\n pyodide.runPython(`import os, sys; sys.path.append('${mountPoint}'); os.chdir(\"${mountPoint}\");`);\n}\n\n// Install dependencies from requirements.txt\nasync function installDependencies(payload: { requirements: string }) {\n if (!pyodide) throw new Error('Pyodide not initialized');\n \n const lines = payload.requirements.split('\\n')\n .map(line => line.trim())\n .filter(line => line && !line.startsWith('#'));\n \n if (lines.length > 0) {\n await pyodide.loadPackage(lines, {\n checkIntegrity: false\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; // Clear buffer\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 // Reset interrupt buffer after successful execution\n if (interruptBuffer) {\n interruptBuffer[0] = 0;\n }\n \n await syncWorkspace();\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 await syncWorkspace();\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 await syncWorkspace();\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// Sync workspace filesystem\nasync function syncWorkspace() {\n if (workspaceMountFS) {\n await workspaceMountFS.syncfs();\n }\n}\n\n// Get Pyodide version\nasync function getVersion() {\n if (!pyodide) throw new Error('Pyodide not initialized');\n // Version is already a string, but ensure it's cloneable\n return String(pyodide.version);\n}\n\n// Message handler\nself.onmessage = async (event: MessageEvent<PyWorkerMessage>) => {\n const { id, type, payload } = event.data;\n \n // Handle input response separately (doesn't follow normal request/response pattern)\n if (type === 'inputResponse') {\n const pending = pendingInputRequests.get(id);\n if (pending) {\n pendingInputRequests.delete(id);\n if (payload.cancelled) {\n pending.resolve(''); // Return empty string if cancelled\n } else {\n pending.resolve(payload.value || '');\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 'mountWorkspace':\n await mountWorkspace(payload);\n result = { mounted: true };\n break;\n case 'installDependencies':\n await installDependencies(payload);\n result = { installed: 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 'syncWorkspace':\n await syncWorkspace();\n result = { synced: 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"],"names":["loadPyodide","s"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { registerAll, toastError, workspaceService } from "@eclipse-lyra/core";
|
|
2
|
+
import { P as PyEnv } from "./pyservice-B-tT6VHu.js";
|
|
3
|
+
registerAll({
|
|
4
|
+
command: {
|
|
5
|
+
id: "python",
|
|
6
|
+
name: "Run Python Cell",
|
|
7
|
+
description: "Runs Python code. Optionally mounts the current workspace when requested.",
|
|
8
|
+
keyBinding: "CTRL+R",
|
|
9
|
+
parameters: [
|
|
10
|
+
{
|
|
11
|
+
name: "code",
|
|
12
|
+
description: "Python code to execute",
|
|
13
|
+
required: true
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
name: "workspace",
|
|
17
|
+
description: "Whether to mount and use the current workspace (default: false)",
|
|
18
|
+
type: "boolean",
|
|
19
|
+
required: false
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
handler: {
|
|
24
|
+
execute: async (context) => {
|
|
25
|
+
const code = context.params?.code;
|
|
26
|
+
if (!code) {
|
|
27
|
+
toastError("No Python code provided.");
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const useWorkspaceParam = context.params?.workspace;
|
|
31
|
+
const useWorkspace = useWorkspaceParam === true || useWorkspaceParam === "true";
|
|
32
|
+
const pyenv = new PyEnv();
|
|
33
|
+
let workspace;
|
|
34
|
+
if (useWorkspace) {
|
|
35
|
+
workspace = await workspaceService.getWorkspace();
|
|
36
|
+
if (!workspace) {
|
|
37
|
+
toastError("No workspace selected.");
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
await pyenv.init(workspace, { params: context.params });
|
|
42
|
+
const result = await pyenv.execCode(code);
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=commands-3JccKvcq.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands-3JccKvcq.js","sources":["../src/commands.ts"],"sourcesContent":["import { registerAll, workspaceService, toastError, Directory } from \"@eclipse-lyra/core\";\nimport { PyEnv } from \"./pyservice\";\n\nregisterAll({\n command: {\n id: \"python\",\n name: \"Run Python Cell\",\n description:\n \"Runs Python code. Optionally mounts the current workspace when requested.\",\n keyBinding: \"CTRL+R\",\n parameters: [\n {\n name: \"code\",\n description: \"Python code to execute\",\n required: true\n },\n {\n name: \"workspace\",\n description:\n \"Whether to mount and use the current workspace (default: false)\",\n type: \"boolean\",\n required: false\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\n const useWorkspaceParam = context.params?.workspace;\n const useWorkspace =\n useWorkspaceParam === true || useWorkspaceParam === \"true\";\n\n const pyenv = new PyEnv();\n\n let workspace: Directory | undefined;\n\n if (useWorkspace) {\n workspace = await workspaceService.getWorkspace();\n if (!workspace) {\n toastError(\"No workspace selected.\");\n return;\n }\n }\n\n // Only pass structured-cloneable data to the worker\n await pyenv.init(workspace, { params: context.params });\n const result = await pyenv.execCode(code);\n return result;\n }\n }\n});\n\n"],"names":[],"mappings":";;AAGA,YAAY;AAAA,EACV,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,IACF,YAAY;AAAA,IACZ,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAAA;AAAA,MAEZ;AAAA,QACE,MAAM;AAAA,QACN,aACE;AAAA,QACF,MAAM;AAAA,QACN,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,EACF;AAAA,EAEF,SAAS;AAAA,IACP,SAAS,OAAO,YAAiB;AAC/B,YAAM,OAA2B,QAAQ,QAAQ;AACjD,UAAI,CAAC,MAAM;AACT,mBAAW,0BAA0B;AACrC;AAAA,MACF;AAEA,YAAM,oBAAoB,QAAQ,QAAQ;AAC1C,YAAM,eACJ,sBAAsB,QAAQ,sBAAsB;AAEtD,YAAM,QAAQ,IAAI,MAAA;AAElB,UAAI;AAEJ,UAAI,cAAc;AAChB,oBAAY,MAAM,iBAAiB,aAAA;AACnC,YAAI,CAAC,WAAW;AACd,qBAAW,wBAAwB;AACnC;AAAA,QACF;AAAA,MACF;AAGA,YAAM,MAAM,KAAK,WAAW,EAAE,QAAQ,QAAQ,QAAQ;AACtD,YAAM,SAAS,MAAM,MAAM,SAAS,IAAI;AACxC,aAAO;AAAA,IACT;AAAA,EAAA;AAEJ,CAAC;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const PACKAGES_COMMENT_PREFIX = "# @py-packages:";
|
|
2
|
+
export declare function parsePackagesFromContent(content: string): string[];
|
|
3
|
+
export declare function contentWithPackagesLine(content: string, packages: string[]): string;
|
|
4
|
+
//# sourceMappingURL=editor-python-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor-python-run.d.ts","sourceRoot":"","sources":["../src/editor-python-run.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,oBAAoB,CAAC;AAGzD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAQlE;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAenF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
"namespace": "extensions",
|
|
3
|
+
"en": {
|
|
4
|
+
"EXT_PYTHONRUNTIME_NAME": "Python Runtime",
|
|
5
|
+
"EXT_PYTHONRUNTIME_DESC": "Pyodide runtime, Python package management, and Run Python Script command"
|
|
6
|
+
},
|
|
7
|
+
"de": {
|
|
8
|
+
"EXT_PYTHONRUNTIME_NAME": "Python-Runtime",
|
|
9
|
+
"EXT_PYTHONRUNTIME_DESC": "Pyodide-Runtime, Python-Paketverwaltung und Befehl Python-Skript ausführen"
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export default _default;
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { contributionRegistry, SYSTEM_LANGUAGE_BUNDLES, i18nLazy, extensionRegistry } from "@eclipse-lyra/core";
|
|
2
|
+
import pkg from "../package.json";
|
|
3
|
+
const namespace = "extensions";
|
|
4
|
+
const en = { "EXT_PYTHONRUNTIME_NAME": "Python Runtime", "EXT_PYTHONRUNTIME_DESC": "Pyodide runtime, Python package management, and Run Python Script command" };
|
|
5
|
+
const de = { "EXT_PYTHONRUNTIME_NAME": "Python-Runtime", "EXT_PYTHONRUNTIME_DESC": "Pyodide-Runtime, Python-Paketverwaltung und Befehl Python-Skript ausführen" };
|
|
6
|
+
const bundle = {
|
|
7
|
+
namespace,
|
|
8
|
+
en,
|
|
9
|
+
de
|
|
10
|
+
};
|
|
11
|
+
contributionRegistry.registerContribution(SYSTEM_LANGUAGE_BUNDLES, bundle);
|
|
12
|
+
const t = i18nLazy("extensions");
|
|
13
|
+
extensionRegistry.registerExtension({
|
|
14
|
+
id: pkg.name,
|
|
15
|
+
name: t("EXT_PYTHONRUNTIME_NAME"),
|
|
16
|
+
description: t("EXT_PYTHONRUNTIME_DESC"),
|
|
17
|
+
loader: () => Promise.all([
|
|
18
|
+
import("./python-runtime-extension-B31nPBS0.js").then((n) => n.a),
|
|
19
|
+
import("./commands-3JccKvcq.js")
|
|
20
|
+
]),
|
|
21
|
+
icon: "lyra python"
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { extensionRegistry, i18nLazy, contributionRegistry, SYSTEM_LANGUAGE_BUNDLES } from '@eclipse-lyra/core';\nimport bundle from './i18n.json';\nimport pkg from '../package.json';\n\ncontributionRegistry.registerContribution(SYSTEM_LANGUAGE_BUNDLES, bundle as any);\n\nconst t = i18nLazy('extensions');\n\nextensionRegistry.registerExtension({\n id: pkg.name,\n name: t('EXT_PYTHONRUNTIME_NAME'),\n description: t('EXT_PYTHONRUNTIME_DESC'),\n loader: () => Promise.all([\n import(\"./python-runtime-extension\"),\n import(\"./commands\"),\n ]),\n icon: \"lyra python\",\n});\n"],"names":[],"mappings":";;;;;;;;;;AAIA,qBAAqB,qBAAqB,yBAAyB,MAAa;AAEhF,MAAM,IAAI,SAAS,YAAY;AAE/B,kBAAkB,kBAAkB;AAAA,EAClC,IAAI,IAAI;AAAA,EACR,MAAM,EAAE,wBAAwB;AAAA,EAChC,aAAa,EAAE,wBAAwB;AAAA,EACvC,QAAQ,MAAM,QAAQ,IAAI;AAAA,IACxB,OAAO,wCAA4B,EAAA,KAAA,OAAA,EAAA,CAAA;AAAA,IACnC,OAAO,wBAAY;AAAA,EAAA,CACpB;AAAA,EACD,MAAM;AACR,CAAC;"}
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import { css, LitElement, html } from "lit";
|
|
2
|
+
import { property, state, customElement } from "lit/decorators.js";
|
|
3
|
+
import { ref } from "lit/directives/ref.js";
|
|
4
|
+
import { repeat } from "lit/directives/repeat.js";
|
|
5
|
+
import { rootContext } from "@eclipse-lyra/core";
|
|
6
|
+
var __defProp = Object.defineProperty;
|
|
7
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
8
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
9
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
10
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
11
|
+
if (decorator = decorators[i])
|
|
12
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
13
|
+
if (kind && result) __defProp(target, key, result);
|
|
14
|
+
return result;
|
|
15
|
+
};
|
|
16
|
+
let LyraPythonPackageManager = class extends LitElement {
|
|
17
|
+
constructor() {
|
|
18
|
+
super(...arguments);
|
|
19
|
+
this.open = false;
|
|
20
|
+
this.packages = [];
|
|
21
|
+
this.loadingPackages = false;
|
|
22
|
+
}
|
|
23
|
+
configure(options) {
|
|
24
|
+
this.packages = options.packages || [];
|
|
25
|
+
this.pyenv = options.pyenv;
|
|
26
|
+
this.onPackageAdded = options.onPackageAdded;
|
|
27
|
+
this.onPackageRemoved = options.onPackageRemoved;
|
|
28
|
+
}
|
|
29
|
+
show() {
|
|
30
|
+
this.open = true;
|
|
31
|
+
}
|
|
32
|
+
hide() {
|
|
33
|
+
this.open = false;
|
|
34
|
+
}
|
|
35
|
+
addPackage(packageName) {
|
|
36
|
+
if (!packageName || packageName.trim() === "") return;
|
|
37
|
+
const trimmedName = packageName.trim();
|
|
38
|
+
if (!this.packages.includes(trimmedName)) {
|
|
39
|
+
this.packages = [...this.packages, trimmedName];
|
|
40
|
+
this.onPackageAdded?.(trimmedName);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
removePackage(packageName) {
|
|
44
|
+
const index = this.packages.indexOf(packageName);
|
|
45
|
+
if (index > -1) {
|
|
46
|
+
this.packages = this.packages.filter((pkg) => pkg !== packageName);
|
|
47
|
+
this.onPackageRemoved?.(packageName);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async reloadPackages() {
|
|
51
|
+
if (!this.pyenv) return;
|
|
52
|
+
this.loadingPackages = true;
|
|
53
|
+
this.packageLoadError = void 0;
|
|
54
|
+
try {
|
|
55
|
+
await this.pyenv.loadPackages(this.packages);
|
|
56
|
+
} catch (error) {
|
|
57
|
+
this.packageLoadError = String(error);
|
|
58
|
+
} finally {
|
|
59
|
+
this.loadingPackages = false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
render() {
|
|
63
|
+
let newPackageInput;
|
|
64
|
+
return html`
|
|
65
|
+
<wa-dialog
|
|
66
|
+
label="Manage Required Packages"
|
|
67
|
+
?open=${this.open}
|
|
68
|
+
@wa-after-hide=${() => {
|
|
69
|
+
this.open = false;
|
|
70
|
+
this.dispatchEvent(new CustomEvent("hide", { bubbles: true, composed: true }));
|
|
71
|
+
}}>
|
|
72
|
+
<div class="package-manager">
|
|
73
|
+
<p class="package-manager-description">
|
|
74
|
+
Specify Python packages that should be automatically loaded when connecting to the kernel.
|
|
75
|
+
</p>
|
|
76
|
+
|
|
77
|
+
${this.loadingPackages ? html`
|
|
78
|
+
<wa-alert variant="primary" open>
|
|
79
|
+
<wa-icon slot="icon" name="circle-notch" library="fa" class="spinning"></wa-icon>
|
|
80
|
+
Loading packages...
|
|
81
|
+
</wa-alert>
|
|
82
|
+
` : ""}
|
|
83
|
+
|
|
84
|
+
${this.packageLoadError ? html`
|
|
85
|
+
<wa-alert variant="danger" open closable @wa-after-hide=${() => this.packageLoadError = void 0}>
|
|
86
|
+
<wa-icon slot="icon" name="exclamation-triangle"></wa-icon>
|
|
87
|
+
<strong>Package Load Error:</strong><br>
|
|
88
|
+
${this.packageLoadError}
|
|
89
|
+
</wa-alert>
|
|
90
|
+
` : ""}
|
|
91
|
+
|
|
92
|
+
<div class="package-input-group">
|
|
93
|
+
<wa-input
|
|
94
|
+
placeholder="Package name (e.g., pandas, numpy)"
|
|
95
|
+
${ref((el) => newPackageInput = el)}
|
|
96
|
+
@keydown=${(e) => {
|
|
97
|
+
if (e.key === "Enter" && newPackageInput) {
|
|
98
|
+
this.addPackage(newPackageInput.value);
|
|
99
|
+
newPackageInput.value = "";
|
|
100
|
+
}
|
|
101
|
+
}}>
|
|
102
|
+
<wa-icon slot="prefix" name="box"></wa-icon>
|
|
103
|
+
</wa-input>
|
|
104
|
+
<wa-button
|
|
105
|
+
@click=${() => {
|
|
106
|
+
if (newPackageInput) {
|
|
107
|
+
this.addPackage(newPackageInput.value);
|
|
108
|
+
newPackageInput.value = "";
|
|
109
|
+
}
|
|
110
|
+
}}
|
|
111
|
+
variant="primary">
|
|
112
|
+
<wa-icon slot="prefix" name="plus"></wa-icon>
|
|
113
|
+
Add
|
|
114
|
+
</wa-button>
|
|
115
|
+
</div>
|
|
116
|
+
|
|
117
|
+
${this.packages.length === 0 ? html`
|
|
118
|
+
<div class="empty-state">
|
|
119
|
+
<wa-icon name="box" style="font-size: 3rem; opacity: 0.3;"></wa-icon>
|
|
120
|
+
<p>No packages configured</p>
|
|
121
|
+
<p style="font-size: 0.9rem; opacity: 0.7;">Add packages above to auto-load them when the kernel connects</p>
|
|
122
|
+
</div>
|
|
123
|
+
` : html`
|
|
124
|
+
<div class="package-list">
|
|
125
|
+
<div class="package-list-header">
|
|
126
|
+
<strong>Required Packages (${this.packages.length})</strong>
|
|
127
|
+
</div>
|
|
128
|
+
${repeat(this.packages, (pkg) => pkg, (pkg) => html`
|
|
129
|
+
<div class="package-item">
|
|
130
|
+
<wa-icon name="box" style="opacity: 0.5;"></wa-icon>
|
|
131
|
+
<span class="package-name">${pkg}</span>
|
|
132
|
+
<wa-button
|
|
133
|
+
size="small"
|
|
134
|
+
variant="text"
|
|
135
|
+
@click=${() => this.removePackage(pkg)}
|
|
136
|
+
title="Remove package">
|
|
137
|
+
<wa-icon name="xmark"></wa-icon>
|
|
138
|
+
</wa-button>
|
|
139
|
+
</div>
|
|
140
|
+
`)}
|
|
141
|
+
</div>
|
|
142
|
+
`}
|
|
143
|
+
</div>
|
|
144
|
+
<div slot="footer" class="package-manager-footer">
|
|
145
|
+
${this.pyenv && this.packages.length > 0 ? html`
|
|
146
|
+
<wa-button
|
|
147
|
+
variant="default"
|
|
148
|
+
@click=${() => this.reloadPackages()}
|
|
149
|
+
?disabled=${this.loadingPackages}>
|
|
150
|
+
<wa-icon slot="prefix" name="arrows-rotate"></wa-icon>
|
|
151
|
+
Reload Packages
|
|
152
|
+
</wa-button>
|
|
153
|
+
` : ""}
|
|
154
|
+
<wa-button
|
|
155
|
+
variant="primary"
|
|
156
|
+
@click=${() => this.hide()}>
|
|
157
|
+
Done
|
|
158
|
+
</wa-button>
|
|
159
|
+
</div>
|
|
160
|
+
</wa-dialog>
|
|
161
|
+
`;
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
LyraPythonPackageManager.styles = css`
|
|
165
|
+
:host {
|
|
166
|
+
display: contents;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.package-manager {
|
|
170
|
+
display: flex;
|
|
171
|
+
flex-direction: column;
|
|
172
|
+
gap: 1rem;
|
|
173
|
+
padding: 1rem;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.package-manager-description {
|
|
177
|
+
margin: 0;
|
|
178
|
+
font-size: 0.95rem;
|
|
179
|
+
opacity: 0.8;
|
|
180
|
+
line-height: 1.5;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.package-input-group {
|
|
184
|
+
display: flex;
|
|
185
|
+
gap: 0.5rem;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.package-input-group wa-input {
|
|
189
|
+
flex: 1;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.package-list {
|
|
193
|
+
display: flex;
|
|
194
|
+
flex-direction: column;
|
|
195
|
+
gap: 0.5rem;
|
|
196
|
+
max-height: 400px;
|
|
197
|
+
overflow-y: auto;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.package-list-header {
|
|
201
|
+
padding: 0.5rem;
|
|
202
|
+
border-bottom: 1px solid var(--wa-color-outline);
|
|
203
|
+
margin-bottom: 0.5rem;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.package-item {
|
|
207
|
+
display: flex;
|
|
208
|
+
align-items: center;
|
|
209
|
+
gap: 0.75rem;
|
|
210
|
+
padding: 0.75rem;
|
|
211
|
+
border-radius: 4px;
|
|
212
|
+
background: var(--wa-color-surface-variant);
|
|
213
|
+
transition: background 0.2s;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.package-item:hover {
|
|
217
|
+
background: var(--wa-color-surface-container-highest);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.package-name {
|
|
221
|
+
flex: 1;
|
|
222
|
+
font-family: monospace;
|
|
223
|
+
font-size: 0.95rem;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.empty-state {
|
|
227
|
+
display: flex;
|
|
228
|
+
flex-direction: column;
|
|
229
|
+
align-items: center;
|
|
230
|
+
justify-content: center;
|
|
231
|
+
gap: 0.75rem;
|
|
232
|
+
padding: 3rem 1rem;
|
|
233
|
+
text-align: center;
|
|
234
|
+
opacity: 0.6;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.empty-state p {
|
|
238
|
+
margin: 0;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.package-manager-footer {
|
|
242
|
+
display: flex;
|
|
243
|
+
gap: 0.5rem;
|
|
244
|
+
justify-content: flex-end;
|
|
245
|
+
padding-top: 1rem;
|
|
246
|
+
border-top: 1px solid var(--wa-color-outline);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.spinning {
|
|
250
|
+
animation: spin 1s linear infinite;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
@keyframes spin {
|
|
254
|
+
from {
|
|
255
|
+
transform: rotate(0deg);
|
|
256
|
+
}
|
|
257
|
+
to {
|
|
258
|
+
transform: rotate(360deg);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
`;
|
|
262
|
+
__decorateClass([
|
|
263
|
+
property({ type: Boolean })
|
|
264
|
+
], LyraPythonPackageManager.prototype, "open", 2);
|
|
265
|
+
__decorateClass([
|
|
266
|
+
property({ type: Array })
|
|
267
|
+
], LyraPythonPackageManager.prototype, "packages", 2);
|
|
268
|
+
__decorateClass([
|
|
269
|
+
property({ attribute: false })
|
|
270
|
+
], LyraPythonPackageManager.prototype, "pyenv", 2);
|
|
271
|
+
__decorateClass([
|
|
272
|
+
state()
|
|
273
|
+
], LyraPythonPackageManager.prototype, "loadingPackages", 2);
|
|
274
|
+
__decorateClass([
|
|
275
|
+
state()
|
|
276
|
+
], LyraPythonPackageManager.prototype, "packageLoadError", 2);
|
|
277
|
+
LyraPythonPackageManager = __decorateClass([
|
|
278
|
+
customElement("lyra-python-package-manager")
|
|
279
|
+
], LyraPythonPackageManager);
|
|
280
|
+
class PythonPackageManagerService {
|
|
281
|
+
showPackageManager(options) {
|
|
282
|
+
if (!this.managerInstance) {
|
|
283
|
+
this.managerInstance = document.createElement("lyra-python-package-manager");
|
|
284
|
+
document.body.appendChild(this.managerInstance);
|
|
285
|
+
}
|
|
286
|
+
this.managerInstance.configure(options);
|
|
287
|
+
this.managerInstance.show();
|
|
288
|
+
return this.managerInstance;
|
|
289
|
+
}
|
|
290
|
+
getManager() {
|
|
291
|
+
return this.managerInstance;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
const pythonPackageManagerService = new PythonPackageManagerService();
|
|
295
|
+
rootContext.put("pythonPackageManagerService", pythonPackageManagerService);
|
|
296
|
+
export {
|
|
297
|
+
pythonPackageManagerService as p
|
|
298
|
+
};
|
|
299
|
+
//# sourceMappingURL=package-manager-DTcpwrMr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager-DTcpwrMr.js","sources":["../src/package-manager.ts"],"sourcesContent":["import { css, html, LitElement } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { ref } from \"lit/directives/ref.js\";\nimport { repeat } from \"lit/directives/repeat.js\";\nimport { PyEnv } from \"./pyservice\";\nimport { rootContext } from \"@eclipse-lyra/core\";\n\nexport interface PackageManagerOptions {\n packages: string[];\n onPackageAdded?: (packageName: string) => void;\n onPackageRemoved?: (packageName: string) => void;\n pyenv?: PyEnv;\n}\n\n@customElement('lyra-python-package-manager')\nexport class LyraPythonPackageManager extends LitElement {\n @property({ type: Boolean })\n open: boolean = false;\n\n @property({ type: Array })\n packages: string[] = [];\n\n @property({ attribute: false })\n pyenv?: PyEnv;\n\n @state()\n private loadingPackages: boolean = false;\n\n @state()\n private packageLoadError?: string;\n\n private onPackageAdded?: (packageName: string) => void;\n private onPackageRemoved?: (packageName: string) => void;\n\n public configure(options: PackageManagerOptions) {\n this.packages = options.packages || [];\n this.pyenv = options.pyenv;\n this.onPackageAdded = options.onPackageAdded;\n this.onPackageRemoved = options.onPackageRemoved;\n }\n\n public show() {\n this.open = true;\n }\n\n public hide() {\n this.open = false;\n }\n\n private addPackage(packageName: string) {\n if (!packageName || packageName.trim() === '') return;\n\n const trimmedName = packageName.trim();\n if (!this.packages.includes(trimmedName)) {\n this.packages = [...this.packages, trimmedName];\n this.onPackageAdded?.(trimmedName);\n }\n }\n\n private removePackage(packageName: string) {\n const index = this.packages.indexOf(packageName);\n if (index > -1) {\n this.packages = this.packages.filter(pkg => pkg !== packageName);\n this.onPackageRemoved?.(packageName);\n }\n }\n\n private async reloadPackages() {\n if (!this.pyenv) return;\n\n this.loadingPackages = true;\n this.packageLoadError = undefined;\n\n try {\n await this.pyenv.loadPackages(this.packages);\n } catch (error) {\n this.packageLoadError = String(error);\n } finally {\n this.loadingPackages = false;\n }\n }\n\n render() {\n let newPackageInput: HTMLInputElement | undefined;\n\n return html`\n <wa-dialog \n label=\"Manage Required Packages\" \n ?open=${this.open}\n @wa-after-hide=${() => {\n this.open = false;\n this.dispatchEvent(new CustomEvent('hide', { bubbles: true, composed: true }));\n }}>\n <div class=\"package-manager\">\n <p class=\"package-manager-description\">\n Specify Python packages that should be automatically loaded when connecting to the kernel.\n </p>\n\n ${this.loadingPackages ? html`\n <wa-alert variant=\"primary\" open>\n <wa-icon slot=\"icon\" name=\"circle-notch\" library=\"fa\" class=\"spinning\"></wa-icon>\n Loading packages...\n </wa-alert>\n ` : ''}\n\n ${this.packageLoadError ? html`\n <wa-alert variant=\"danger\" open closable @wa-after-hide=${() => this.packageLoadError = undefined}>\n <wa-icon slot=\"icon\" name=\"exclamation-triangle\"></wa-icon>\n <strong>Package Load Error:</strong><br>\n ${this.packageLoadError}\n </wa-alert>\n ` : ''}\n\n <div class=\"package-input-group\">\n <wa-input \n placeholder=\"Package name (e.g., pandas, numpy)\" \n ${ref((el: any) => newPackageInput = el)}\n @keydown=${(e: KeyboardEvent) => {\n if (e.key === 'Enter' && newPackageInput) {\n this.addPackage(newPackageInput.value);\n newPackageInput.value = '';\n }\n }}>\n <wa-icon slot=\"prefix\" name=\"box\"></wa-icon>\n </wa-input>\n <wa-button \n @click=${() => {\n if (newPackageInput) {\n this.addPackage(newPackageInput.value);\n newPackageInput.value = '';\n }\n }}\n variant=\"primary\">\n <wa-icon slot=\"prefix\" name=\"plus\"></wa-icon>\n Add\n </wa-button>\n </div>\n\n ${this.packages.length === 0 ? html`\n <div class=\"empty-state\">\n <wa-icon name=\"box\" style=\"font-size: 3rem; opacity: 0.3;\"></wa-icon>\n <p>No packages configured</p>\n <p style=\"font-size: 0.9rem; opacity: 0.7;\">Add packages above to auto-load them when the kernel connects</p>\n </div>\n ` : html`\n <div class=\"package-list\">\n <div class=\"package-list-header\">\n <strong>Required Packages (${this.packages.length})</strong>\n </div>\n ${repeat(this.packages, pkg => pkg, pkg => html`\n <div class=\"package-item\">\n <wa-icon name=\"box\" style=\"opacity: 0.5;\"></wa-icon>\n <span class=\"package-name\">${pkg}</span>\n <wa-button \n size=\"small\" \n variant=\"text\"\n @click=${() => this.removePackage(pkg)}\n title=\"Remove package\">\n <wa-icon name=\"xmark\"></wa-icon>\n </wa-button>\n </div>\n `)}\n </div>\n `}\n </div>\n <div slot=\"footer\" class=\"package-manager-footer\">\n ${this.pyenv && this.packages.length > 0 ? html`\n <wa-button \n variant=\"default\"\n @click=${() => this.reloadPackages()}\n ?disabled=${this.loadingPackages}>\n <wa-icon slot=\"prefix\" name=\"arrows-rotate\"></wa-icon>\n Reload Packages\n </wa-button>\n ` : ''}\n <wa-button \n variant=\"primary\"\n @click=${() => this.hide()}>\n Done\n </wa-button>\n </div>\n </wa-dialog>\n `;\n }\n\n static styles = css`\n :host {\n display: contents;\n }\n\n .package-manager {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n padding: 1rem;\n }\n\n .package-manager-description {\n margin: 0;\n font-size: 0.95rem;\n opacity: 0.8;\n line-height: 1.5;\n }\n\n .package-input-group {\n display: flex;\n gap: 0.5rem;\n }\n\n .package-input-group wa-input {\n flex: 1;\n }\n\n .package-list {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n max-height: 400px;\n overflow-y: auto;\n }\n\n .package-list-header {\n padding: 0.5rem;\n border-bottom: 1px solid var(--wa-color-outline);\n margin-bottom: 0.5rem;\n }\n\n .package-item {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.75rem;\n border-radius: 4px;\n background: var(--wa-color-surface-variant);\n transition: background 0.2s;\n }\n\n .package-item:hover {\n background: var(--wa-color-surface-container-highest);\n }\n\n .package-name {\n flex: 1;\n font-family: monospace;\n font-size: 0.95rem;\n }\n\n .empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.75rem;\n padding: 3rem 1rem;\n text-align: center;\n opacity: 0.6;\n }\n\n .empty-state p {\n margin: 0;\n }\n\n .package-manager-footer {\n display: flex;\n gap: 0.5rem;\n justify-content: flex-end;\n padding-top: 1rem;\n border-top: 1px solid var(--wa-color-outline);\n }\n\n .spinning {\n animation: spin 1s linear infinite;\n }\n\n @keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n `;\n}\n\nclass PythonPackageManagerService {\n private managerInstance?: LyraPythonPackageManager;\n\n public showPackageManager(options: PackageManagerOptions): LyraPythonPackageManager {\n if (!this.managerInstance) {\n this.managerInstance = document.createElement('lyra-python-package-manager') as LyraPythonPackageManager;\n document.body.appendChild(this.managerInstance);\n }\n\n this.managerInstance.configure(options);\n this.managerInstance.show();\n\n return this.managerInstance;\n }\n\n public getManager(): LyraPythonPackageManager | undefined {\n return this.managerInstance;\n }\n}\n\nexport const pythonPackageManagerService = new PythonPackageManagerService();\nrootContext.put(\"pythonPackageManagerService\", pythonPackageManagerService);\n"],"names":[],"mappings":"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"}
|