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

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,6 +1,6 @@
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
  import { n as parsePackagesFromContent, t as contentWithPackagesLine } from "./editor-python-run-Cs68X5JL.js";
5
5
  import { DocksPart, toastError } from "@eclipse-docks/core";
6
6
  import { css, html } from "lit";
@@ -212,4 +212,4 @@ _decorate([state()], DocksPythonEditor.prototype, "pyVersion", void 0);
212
212
  DocksPythonEditor = _decorate([customElement("docks-python-editor")], DocksPythonEditor);
213
213
  //#endregion
214
214
 
215
- //# sourceMappingURL=python-editor-Ctze4gva.js.map
215
+ //# sourceMappingURL=python-editor-BpEUhgXs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"python-editor-Ctze4gva.js","names":[],"sources":["../src/python-editor.ts"],"sourcesContent":["import { customElement, property, state } from \"lit/decorators.js\";\nimport { DocksPart } from \"@eclipse-docks/core\";\nimport { css, html } from \"lit\";\nimport { createRef, ref } from \"lit/directives/ref.js\";\nimport { styleMap } from \"lit/directives/style-map.js\";\nimport { EditorInput, EditorContentProvider } from \"@eclipse-docks/core\";\nimport { DocksMonacoWidget } from '@eclipse-docks/extension-monaco-editor/widget';\nimport { PyEnv, pythonPackageManagerService } from \"./api\";\nimport { parsePackagesFromContent, contentWithPackagesLine } from \"./editor-python-run\";\nimport { toastError } from \"@eclipse-docks/core\";\n\n@customElement(\"docks-python-editor\")\nexport class DocksPythonEditor extends DocksPart implements EditorContentProvider {\n @property({ attribute: false })\n public input?: EditorInput;\n @property({ type: Boolean })\n public readOnly = false;\n\n @state()\n private initialContent: string | undefined = undefined;\n @state()\n private initialUri: string | undefined = undefined;\n\n @state()\n private pyenv?: PyEnv;\n @state()\n private pyConnected = false;\n @state()\n private pyConnecting = false;\n @state()\n private pyVersion?: string;\n\n private widgetRef = createRef<DocksMonacoWidget>();\n\n protected async doInitUI() {\n const file = this.input!.data;\n const textContents = await file.getContents();\n this.initialContent = textContents;\n this.initialUri = file.getName();\n this.requestUpdate();\n }\n\n private _onContentChange = () => {\n this.markDirty(true);\n };\n\n save(): void {\n const value = this.widgetRef.value?.getContent() ?? \"\";\n this.input?.data.saveContents(value);\n this.markDirty(false);\n }\n\n protected doClose() {\n this.widgetRef.value?.dispose();\n if (this.pyenv) {\n this.pyenv.close();\n this.pyenv = undefined;\n }\n this.pyConnected = false;\n this.pyVersion = undefined;\n }\n\n public getLanguage(): string | null {\n return \"python\";\n }\n\n public isLanguage(lang: string): boolean {\n return lang.toLowerCase() === \"python\";\n }\n\n public getContent(): string | null {\n return this.widgetRef.value?.getContent() ?? null;\n }\n\n public getSelection(): string | null {\n return this.widgetRef.value?.getSelection() ?? null;\n }\n\n public getSnippet(lines: number = 5): { snippet: string; cursorLine: number } | null {\n return this.widgetRef.value?.getSnippet(lines) ?? null;\n }\n\n public getFilePath(): string | null {\n return this.input?.data?.getWorkspacePath() ?? null;\n }\n\n public getPyEnv(): PyEnv | undefined {\n return this.pyenv;\n }\n\n private async initPyEnv(): Promise<void> {\n if (this.pyenv) return;\n this.pyenv = new PyEnv();\n await this.pyenv.init();\n this.pyConnected = true;\n try {\n const response = await this.pyenv.execCode(\"import sys; sys.version.split()[0]\");\n this.pyVersion = response?.result || \"Unknown\";\n } catch {\n this.pyVersion = \"Unknown\";\n }\n }\n\n async connectPython(): Promise<void> {\n if (this.pyConnecting || this.pyConnected) return;\n try {\n this.pyConnecting = true;\n await this.initPyEnv();\n } catch (err) {\n toastError(err instanceof Error ? err.message : String(err));\n } finally {\n this.pyConnecting = false;\n }\n }\n\n private async runScript(): Promise<void> {\n if (!this.pyConnected || !this.pyenv) {\n await this.connectPython();\n if (!this.pyenv) return;\n }\n const content = this.getContent()?.trim();\n if (!content) {\n toastError(\"No content to run\");\n return;\n }\n try {\n const packages = parsePackagesFromContent(content);\n if (packages.length > 0) await this.pyenv.loadPackages(packages);\n await this.pyenv.execCode(content);\n } catch (err) {\n toastError(err instanceof Error ? err.message : String(err));\n }\n }\n\n private updateEditorPackagesLine(packages: string[]): void {\n const content = this.getContent() ?? \"\";\n const newContent = contentWithPackagesLine(content, packages);\n if (newContent === content) return;\n this.widgetRef.value?.getModel()?.setValue(newContent);\n this.markDirty(true);\n }\n\n private openPackageManager(): void {\n if (!this.pyConnected || !this.pyenv) return;\n const content = this.getContent() ?? \"\";\n const packages = parsePackagesFromContent(content);\n pythonPackageManagerService.showPackageManager({\n packages,\n pyenv: this.pyenv,\n onPackageAdded: (name) => {\n const next = [...parsePackagesFromContent(this.getContent() ?? \"\"), name];\n this.updateEditorPackagesLine(next);\n },\n onPackageRemoved: (name) => {\n const next = parsePackagesFromContent(this.getContent() ?? \"\").filter((p) => p !== name);\n this.updateEditorPackagesLine(next);\n },\n });\n }\n\n protected renderToolbar() {\n const connectionTitle = this.pyConnecting\n ? \"Connecting to Python...\"\n : this.pyConnected\n ? \"Python Connected\"\n : \"Python Disconnected - Click to connect\";\n const connectionText = this.pyConnecting\n ? \"Connecting...\"\n : this.pyConnected && this.pyVersion\n ? `Python ${this.pyVersion}`\n : \"Not connected\";\n const iconColor = this.pyConnected\n ? \"var(--wa-color-green-40)\"\n : this.pyConnecting\n ? \"var(--wa-color-warning-500)\"\n : \"var(--wa-color-red-40)\";\n\n return html`\n <wa-button\n appearance=\"plain\"\n size=\"small\"\n style=${styleMap({ display: \"flex\", alignItems: \"center\", gap: \"0.5rem\" })}\n ?disabled=${this.pyConnecting}\n @click=${() => this.connectPython()}\n title=${connectionTitle}\n >\n <wa-icon name=\"circle\" label=\"Python status\" style=${styleMap({ color: iconColor })}></wa-icon>\n ${connectionText}\n </wa-button>\n <wa-button\n size=\"small\"\n appearance=\"plain\"\n ?disabled=${!this.pyConnected}\n @click=${() => this.runScript()}\n title=\"Run Python script\"\n >\n <wa-icon name=\"play\" label=\"Run\"></wa-icon>\n Run\n </wa-button>\n <wa-button\n size=\"small\"\n appearance=\"plain\"\n ?disabled=${!this.pyConnected}\n @click=${() => this.openPackageManager()}\n title=\"Manage packages\"\n >\n <wa-icon name=\"box\" label=\"Packages\"></wa-icon>\n Packages\n </wa-button>\n `;\n }\n\n protected updated(changedProperties: Map<string, unknown>) {\n super.updated(changedProperties);\n if (\n changedProperties.has(\"pyConnected\") ||\n changedProperties.has(\"pyConnecting\") ||\n changedProperties.has(\"pyVersion\")\n ) {\n }\n }\n\n protected renderContent() {\n if (this.initialContent === undefined) {\n return html`<div class=\"monaco-editor-placeholder\"></div>`;\n }\n return html`\n <docks-monaco-widget\n .value=${this.initialContent}\n .uri=${this.initialUri}\n .language=${\"python\"}\n .readOnly=${this.readOnly}\n @content-change=${this._onContentChange}\n ${ref(this.widgetRef)}\n ></docks-monaco-widget>\n `;\n }\n\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n position: relative;\n width: 100%;\n height: 100%;\n }\n .monaco-editor-placeholder {\n flex: 1;\n min-height: 0;\n }\n `;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"docks-python-editor\": DocksPythonEditor;\n }\n}\n"],"mappings":";;;;;;;;;;;AAYO,IAAA,oBAAA,MAAM,0BAA0B,UAA2C;;;kBAI5D;wBAG2B,KAAA;oBAEJ,KAAA;qBAKnB;sBAEC;mBAIH,WAA8B;gCAUjB;AAC7B,QAAK,UAAU,KAAK;;;CATxB,MAAgB,WAAW;EACvB,MAAM,OAAO,KAAK,MAAO;AAEzB,OAAK,iBADgB,MAAM,KAAK,aAAa;AAE7C,OAAK,aAAa,KAAK,SAAS;AAChC,OAAK,eAAe;;CAOxB,OAAa;EACT,MAAM,QAAQ,KAAK,UAAU,OAAO,YAAY,IAAI;AACpD,OAAK,OAAO,KAAK,aAAa,MAAM;AACpC,OAAK,UAAU,MAAM;;CAGzB,UAAoB;AAChB,OAAK,UAAU,OAAO,SAAS;AAC/B,MAAI,KAAK,OAAO;AACZ,QAAK,MAAM,OAAO;AAClB,QAAK,QAAQ,KAAA;;AAEjB,OAAK,cAAc;AACnB,OAAK,YAAY,KAAA;;CAGrB,cAAoC;AAChC,SAAO;;CAGX,WAAkB,MAAuB;AACrC,SAAO,KAAK,aAAa,KAAK;;CAGlC,aAAmC;AAC/B,SAAO,KAAK,UAAU,OAAO,YAAY,IAAI;;CAGjD,eAAqC;AACjC,SAAO,KAAK,UAAU,OAAO,cAAc,IAAI;;CAGnD,WAAkB,QAAgB,GAAmD;AACjF,SAAO,KAAK,UAAU,OAAO,WAAW,MAAM,IAAI;;CAGtD,cAAoC;AAChC,SAAO,KAAK,OAAO,MAAM,kBAAkB,IAAI;;CAGnD,WAAqC;AACjC,SAAO,KAAK;;CAGhB,MAAc,YAA2B;AACrC,MAAI,KAAK,MAAO;AAChB,OAAK,QAAQ,IAAI,OAAO;AACxB,QAAM,KAAK,MAAM,MAAM;AACvB,OAAK,cAAc;AACnB,MAAI;AAEA,QAAK,aADY,MAAM,KAAK,MAAM,SAAS,qCAAqC,GACrD,UAAU;UACjC;AACJ,QAAK,YAAY;;;CAIzB,MAAM,gBAA+B;AACjC,MAAI,KAAK,gBAAgB,KAAK,YAAa;AAC3C,MAAI;AACA,QAAK,eAAe;AACpB,SAAM,KAAK,WAAW;WACjB,KAAK;AACV,cAAW,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI,CAAC;YACtD;AACN,QAAK,eAAe;;;CAI5B,MAAc,YAA2B;AACrC,MAAI,CAAC,KAAK,eAAe,CAAC,KAAK,OAAO;AAClC,SAAM,KAAK,eAAe;AAC1B,OAAI,CAAC,KAAK,MAAO;;EAErB,MAAM,UAAU,KAAK,YAAY,EAAE,MAAM;AACzC,MAAI,CAAC,SAAS;AACV,cAAW,oBAAoB;AAC/B;;AAEJ,MAAI;GACA,MAAM,WAAW,yBAAyB,QAAQ;AAClD,OAAI,SAAS,SAAS,EAAG,OAAM,KAAK,MAAM,aAAa,SAAS;AAChE,SAAM,KAAK,MAAM,SAAS,QAAQ;WAC7B,KAAK;AACV,cAAW,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI,CAAC;;;CAIpE,yBAAiC,UAA0B;EACvD,MAAM,UAAU,KAAK,YAAY,IAAI;EACrC,MAAM,aAAa,wBAAwB,SAAS,SAAS;AAC7D,MAAI,eAAe,QAAS;AAC5B,OAAK,UAAU,OAAO,UAAU,EAAE,SAAS,WAAW;AACtD,OAAK,UAAU,KAAK;;CAGxB,qBAAmC;AAC/B,MAAI,CAAC,KAAK,eAAe,CAAC,KAAK,MAAO;EAEtC,MAAM,WAAW,yBADD,KAAK,YAAY,IAAI,GACa;AAClD,8BAA4B,mBAAmB;GAC3C;GACA,OAAO,KAAK;GACZ,iBAAiB,SAAS;IACtB,MAAM,OAAO,CAAC,GAAG,yBAAyB,KAAK,YAAY,IAAI,GAAG,EAAE,KAAK;AACzE,SAAK,yBAAyB,KAAK;;GAEvC,mBAAmB,SAAS;IACxB,MAAM,OAAO,yBAAyB,KAAK,YAAY,IAAI,GAAG,CAAC,QAAQ,MAAM,MAAM,KAAK;AACxF,SAAK,yBAAyB,KAAK;;GAE1C,CAAC;;CAGN,gBAA0B;EACtB,MAAM,kBAAkB,KAAK,eACvB,4BACA,KAAK,cACH,qBACA;EACR,MAAM,iBAAiB,KAAK,eACtB,kBACA,KAAK,eAAe,KAAK,YACvB,UAAU,KAAK,cACf;EACR,MAAM,YAAY,KAAK,cACjB,6BACA,KAAK,eACH,gCACA;AAER,SAAO,IAAI;;;;wBAIK,SAAS;GAAE,SAAS;GAAQ,YAAY;GAAU,KAAK;GAAU,CAAC,CAAC;4BAC/D,KAAK,aAAa;+BACf,KAAK,eAAe,CAAC;wBAC5B,gBAAgB;;qEAE6B,SAAS,EAAE,OAAO,WAAW,CAAC,CAAC;kBAClF,eAAe;;;;;4BAKL,CAAC,KAAK,YAAY;+BACf,KAAK,WAAW,CAAC;;;;;;;;;4BASpB,CAAC,KAAK,YAAY;+BACf,KAAK,oBAAoB,CAAC;;;;;;;;CASrD,QAAkB,mBAAyC;AACvD,QAAM,QAAQ,kBAAkB;AAChC,MACI,kBAAkB,IAAI,cAAc,IACpC,kBAAkB,IAAI,eAAe,IACrC,kBAAkB,IAAI,YAAY,EACpC;;CAIN,gBAA0B;AACtB,MAAI,KAAK,mBAAmB,KAAA,EACxB,QAAO,IAAI;AAEf,SAAO,IAAI;;yBAEM,KAAK,eAAe;uBACtB,KAAK,WAAW;4BACX,SAAS;4BACT,KAAK,SAAS;kCACR,KAAK,iBAAiB;kBACtC,IAAI,KAAK,UAAU,CAAC;;;;;gBAKlB,GAAG;;;;;;;;;;;;;;;WAjOlB,SAAS,EAAE,WAAW,OAAO,CAAC,CAAA,EAAA,kBAAA,WAAA,SAAA,KAAA,EAAA;WAE9B,SAAS,EAAE,MAAM,SAAS,CAAC,CAAA,EAAA,kBAAA,WAAA,YAAA,KAAA,EAAA;WAG3B,OAAO,CAAA,EAAA,kBAAA,WAAA,kBAAA,KAAA,EAAA;WAEP,OAAO,CAAA,EAAA,kBAAA,WAAA,cAAA,KAAA,EAAA;WAGP,OAAO,CAAA,EAAA,kBAAA,WAAA,SAAA,KAAA,EAAA;WAEP,OAAO,CAAA,EAAA,kBAAA,WAAA,eAAA,KAAA,EAAA;WAEP,OAAO,CAAA,EAAA,kBAAA,WAAA,gBAAA,KAAA,EAAA;WAEP,OAAO,CAAA,EAAA,kBAAA,WAAA,aAAA,KAAA,EAAA;+BAlBX,cAAc,sBAAsB,CAAA,EAAA,kBAAA"}
1
+ {"version":3,"file":"python-editor-BpEUhgXs.js","names":[],"sources":["../src/python-editor.ts"],"sourcesContent":["import { customElement, property, state } from \"lit/decorators.js\";\nimport { DocksPart } from \"@eclipse-docks/core\";\nimport { css, html } from \"lit\";\nimport { createRef, ref } from \"lit/directives/ref.js\";\nimport { styleMap } from \"lit/directives/style-map.js\";\nimport { EditorInput, EditorContentProvider } from \"@eclipse-docks/core\";\nimport { DocksMonacoWidget } from '@eclipse-docks/extension-monaco-editor/widget';\nimport { PyEnv, pythonPackageManagerService } from \"./api\";\nimport { parsePackagesFromContent, contentWithPackagesLine } from \"./editor-python-run\";\nimport { toastError } from \"@eclipse-docks/core\";\n\n@customElement(\"docks-python-editor\")\nexport class DocksPythonEditor extends DocksPart implements EditorContentProvider {\n @property({ attribute: false })\n public input?: EditorInput;\n @property({ type: Boolean })\n public readOnly = false;\n\n @state()\n private initialContent: string | undefined = undefined;\n @state()\n private initialUri: string | undefined = undefined;\n\n @state()\n private pyenv?: PyEnv;\n @state()\n private pyConnected = false;\n @state()\n private pyConnecting = false;\n @state()\n private pyVersion?: string;\n\n private widgetRef = createRef<DocksMonacoWidget>();\n\n protected async doInitUI() {\n const file = this.input!.data;\n const textContents = await file.getContents();\n this.initialContent = textContents;\n this.initialUri = file.getName();\n this.requestUpdate();\n }\n\n private _onContentChange = () => {\n this.markDirty(true);\n };\n\n save(): void {\n const value = this.widgetRef.value?.getContent() ?? \"\";\n this.input?.data.saveContents(value);\n this.markDirty(false);\n }\n\n protected doClose() {\n this.widgetRef.value?.dispose();\n if (this.pyenv) {\n this.pyenv.close();\n this.pyenv = undefined;\n }\n this.pyConnected = false;\n this.pyVersion = undefined;\n }\n\n public getLanguage(): string | null {\n return \"python\";\n }\n\n public isLanguage(lang: string): boolean {\n return lang.toLowerCase() === \"python\";\n }\n\n public getContent(): string | null {\n return this.widgetRef.value?.getContent() ?? null;\n }\n\n public getSelection(): string | null {\n return this.widgetRef.value?.getSelection() ?? null;\n }\n\n public getSnippet(lines: number = 5): { snippet: string; cursorLine: number } | null {\n return this.widgetRef.value?.getSnippet(lines) ?? null;\n }\n\n public getFilePath(): string | null {\n return this.input?.data?.getWorkspacePath() ?? null;\n }\n\n public getPyEnv(): PyEnv | undefined {\n return this.pyenv;\n }\n\n private async initPyEnv(): Promise<void> {\n if (this.pyenv) return;\n this.pyenv = new PyEnv();\n await this.pyenv.init();\n this.pyConnected = true;\n try {\n const response = await this.pyenv.execCode(\"import sys; sys.version.split()[0]\");\n this.pyVersion = response?.result || \"Unknown\";\n } catch {\n this.pyVersion = \"Unknown\";\n }\n }\n\n async connectPython(): Promise<void> {\n if (this.pyConnecting || this.pyConnected) return;\n try {\n this.pyConnecting = true;\n await this.initPyEnv();\n } catch (err) {\n toastError(err instanceof Error ? err.message : String(err));\n } finally {\n this.pyConnecting = false;\n }\n }\n\n private async runScript(): Promise<void> {\n if (!this.pyConnected || !this.pyenv) {\n await this.connectPython();\n if (!this.pyenv) return;\n }\n const content = this.getContent()?.trim();\n if (!content) {\n toastError(\"No content to run\");\n return;\n }\n try {\n const packages = parsePackagesFromContent(content);\n if (packages.length > 0) await this.pyenv.loadPackages(packages);\n await this.pyenv.execCode(content);\n } catch (err) {\n toastError(err instanceof Error ? err.message : String(err));\n }\n }\n\n private updateEditorPackagesLine(packages: string[]): void {\n const content = this.getContent() ?? \"\";\n const newContent = contentWithPackagesLine(content, packages);\n if (newContent === content) return;\n this.widgetRef.value?.getModel()?.setValue(newContent);\n this.markDirty(true);\n }\n\n private openPackageManager(): void {\n if (!this.pyConnected || !this.pyenv) return;\n const content = this.getContent() ?? \"\";\n const packages = parsePackagesFromContent(content);\n pythonPackageManagerService.showPackageManager({\n packages,\n pyenv: this.pyenv,\n onPackageAdded: (name) => {\n const next = [...parsePackagesFromContent(this.getContent() ?? \"\"), name];\n this.updateEditorPackagesLine(next);\n },\n onPackageRemoved: (name) => {\n const next = parsePackagesFromContent(this.getContent() ?? \"\").filter((p) => p !== name);\n this.updateEditorPackagesLine(next);\n },\n });\n }\n\n protected renderToolbar() {\n const connectionTitle = this.pyConnecting\n ? \"Connecting to Python...\"\n : this.pyConnected\n ? \"Python Connected\"\n : \"Python Disconnected - Click to connect\";\n const connectionText = this.pyConnecting\n ? \"Connecting...\"\n : this.pyConnected && this.pyVersion\n ? `Python ${this.pyVersion}`\n : \"Not connected\";\n const iconColor = this.pyConnected\n ? \"var(--wa-color-green-40)\"\n : this.pyConnecting\n ? \"var(--wa-color-warning-500)\"\n : \"var(--wa-color-red-40)\";\n\n return html`\n <wa-button\n appearance=\"plain\"\n size=\"small\"\n style=${styleMap({ display: \"flex\", alignItems: \"center\", gap: \"0.5rem\" })}\n ?disabled=${this.pyConnecting}\n @click=${() => this.connectPython()}\n title=${connectionTitle}\n >\n <wa-icon name=\"circle\" label=\"Python status\" style=${styleMap({ color: iconColor })}></wa-icon>\n ${connectionText}\n </wa-button>\n <wa-button\n size=\"small\"\n appearance=\"plain\"\n ?disabled=${!this.pyConnected}\n @click=${() => this.runScript()}\n title=\"Run Python script\"\n >\n <wa-icon name=\"play\" label=\"Run\"></wa-icon>\n Run\n </wa-button>\n <wa-button\n size=\"small\"\n appearance=\"plain\"\n ?disabled=${!this.pyConnected}\n @click=${() => this.openPackageManager()}\n title=\"Manage packages\"\n >\n <wa-icon name=\"box\" label=\"Packages\"></wa-icon>\n Packages\n </wa-button>\n `;\n }\n\n protected updated(changedProperties: Map<string, unknown>) {\n super.updated(changedProperties);\n if (\n changedProperties.has(\"pyConnected\") ||\n changedProperties.has(\"pyConnecting\") ||\n changedProperties.has(\"pyVersion\")\n ) {\n }\n }\n\n protected renderContent() {\n if (this.initialContent === undefined) {\n return html`<div class=\"monaco-editor-placeholder\"></div>`;\n }\n return html`\n <docks-monaco-widget\n .value=${this.initialContent}\n .uri=${this.initialUri}\n .language=${\"python\"}\n .readOnly=${this.readOnly}\n @content-change=${this._onContentChange}\n ${ref(this.widgetRef)}\n ></docks-monaco-widget>\n `;\n }\n\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n position: relative;\n width: 100%;\n height: 100%;\n }\n .monaco-editor-placeholder {\n flex: 1;\n min-height: 0;\n }\n `;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"docks-python-editor\": DocksPythonEditor;\n }\n}\n"],"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 { t as pythonPackageManagerService } from "./package-manager-DcDiJbD3.js";
3
3
  import { n as parsePackagesFromContent } from "./editor-python-run-Cs68X5JL.js";
4
4
  import { File, contributionRegistry, editorRegistry, registerAll, toastError } from "@eclipse-docks/core";
@@ -198,7 +198,7 @@ editorRegistry.registerEditorInputHandler({
198
198
  label: "Python",
199
199
  icon: "docks python",
200
200
  lazyInit: async () => {
201
- await import("./python-editor-Ctze4gva.js");
201
+ await import("./python-editor-BpEUhgXs.js");
202
202
  },
203
203
  canHandle: (input) => input instanceof File && input.getName().toLowerCase().endsWith(".py"),
204
204
  ranking: 1e3,
@@ -218,4 +218,4 @@ editorRegistry.registerEditorInputHandler({
218
218
  //#endregion
219
219
  export { PyEnv, pythonPackageManagerService };
220
220
 
221
- //# sourceMappingURL=python-runtime-extension-Cq6sUjv7.js.map
221
+ //# sourceMappingURL=python-runtime-extension-qSvGLwAk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"python-runtime-extension-Cq6sUjv7.js","names":[],"sources":["../src/python-notebook-kernel.ts","../src/python-runtime-extension.ts"],"sourcesContent":["import type {\n NotebookExecutionResult,\n NotebookKernel,\n NotebookKernelContribution,\n} from '@eclipse-docks/extension-notebook';\nimport { TARGET_NOTEBOOK_KERNELS } from '@eclipse-docks/extension-notebook';\nimport { PyEnv } from './pyservice';\nimport { pythonPackageManagerService } from './package-manager';\n\nclass PythonNotebookKernel implements NotebookKernel {\n readonly id = 'python';\n readonly label = 'Python';\n readonly language = 'python';\n\n private pyenv: PyEnv | null = null;\n private requiredPackages: string[] = [];\n private loadedPackages = new Set<string>();\n private connectPromise: Promise<void> | null = null;\n\n async connect(options?: { requiredPackages?: string[] }): Promise<void> {\n if (this.connectPromise) {\n await this.connectPromise;\n if (options?.requiredPackages) {\n this.requiredPackages = options.requiredPackages;\n }\n const packagesToLoadAfterWait = this.requiredPackages.filter((pkg) => !this.loadedPackages.has(pkg));\n if (packagesToLoadAfterWait.length === 0 || !this.pyenv) return;\n await this.pyenv.loadPackages(packagesToLoadAfterWait);\n packagesToLoadAfterWait.forEach((pkg) => this.loadedPackages.add(pkg));\n return;\n }\n\n this.connectPromise = this.doConnect(options);\n try {\n await this.connectPromise;\n } finally {\n this.connectPromise = null;\n }\n }\n\n private async doConnect(options?: { requiredPackages?: string[] }): Promise<void> {\n if (options?.requiredPackages) {\n this.requiredPackages = options.requiredPackages;\n }\n\n if (!this.pyenv) {\n this.pyenv = new PyEnv();\n await this.pyenv.init();\n }\n\n const packagesToLoad = this.requiredPackages.filter((pkg) => !this.loadedPackages.has(pkg));\n if (packagesToLoad.length > 0) {\n await this.pyenv.loadPackages(packagesToLoad);\n packagesToLoad.forEach((pkg) => this.loadedPackages.add(pkg));\n }\n\n try {\n await this.pyenv.execCode(`\ntry:\n import matplotlib\n matplotlib.use('agg')\n import matplotlib.pyplot as plt\n import io\n import base64\n _original_show = plt.show\n _display_data = None\n def _patched_show(*args, **kwargs):\n global _display_data\n if plt.get_fignums():\n fig = plt.gcf()\n buffer = io.BytesIO()\n fig.savefig(buffer, format='png', bbox_inches='tight', dpi=100)\n buffer.seek(0)\n _display_data = base64.b64encode(buffer.read()).decode('utf-8')\n plt.close(fig)\n pass\n plt.show = _patched_show\nexcept ImportError:\n pass\n`);\n } catch {\n // matplotlib not installed\n }\n }\n\n async execute(code: string): Promise<NotebookExecutionResult> {\n if (!this.pyenv) {\n await this.connect();\n }\n if (!this.pyenv) {\n return { error: 'Python kernel not initialized' };\n }\n try {\n const response = await this.pyenv.execCode(code);\n const outputParts: string[] = [];\n\n if (response && typeof response === 'object' && 'console' in response) {\n const consoleOutput = response.console;\n if (Array.isArray(consoleOutput) && consoleOutput.length > 0) {\n const filtered = consoleOutput.filter((s: unknown) => s && String(s).trim());\n if (filtered.length > 0) {\n outputParts.push(...filtered.map(String));\n }\n }\n }\n\n let imageData: string | undefined;\n try {\n const checkDisplayData = await this.pyenv.execCode(\n '_display_data if \"_display_data\" in dir() else None'\n );\n const displayResult =\n checkDisplayData && typeof checkDisplayData === 'object' && checkDisplayData !== null && 'result' in checkDisplayData\n ? (checkDisplayData as { result: unknown }).result\n : checkDisplayData;\n if (\n displayResult != null &&\n String(displayResult) !== 'None' &&\n String(displayResult) !== 'undefined'\n ) {\n imageData = String(displayResult);\n await this.pyenv.execCode('_display_data = None');\n }\n } catch {\n // ignore\n }\n\n if (!imageData) {\n const result =\n response && typeof response === 'object' && response !== null && 'result' in response\n ? (response as { result: unknown }).result\n : response;\n if (result !== undefined && result !== null && String(result) !== 'undefined') {\n const s = String(result);\n if (s && s !== 'undefined') outputParts.push(s);\n }\n }\n\n return {\n data: outputParts.length > 0 ? outputParts.join('\\n') : undefined,\n imageData,\n };\n } catch (err) {\n return {\n error: err instanceof Error ? err.message : String(err),\n };\n }\n }\n\n async getVersion(): Promise<string | undefined> {\n if (!this.pyenv) return undefined;\n try {\n const response = await this.pyenv.getVersion();\n return response ?? undefined;\n } catch {\n return undefined;\n }\n }\n\n interrupt(): void {\n this.pyenv?.interrupt?.();\n }\n\n async restart(): Promise<void> {\n if (this.pyenv) {\n this.pyenv.close();\n this.pyenv = null;\n }\n this.loadedPackages.clear();\n await this.connect({ requiredPackages: this.requiredPackages });\n }\n\n openPackageManager(\n context?: {\n requiredPackages: string[];\n onPackageAdded: (name: string) => void;\n onPackageRemoved: (name: string) => void;\n }\n ): void {\n if (!this.pyenv) return;\n pythonPackageManagerService.showPackageManager({\n packages: context?.requiredPackages ?? [],\n pyenv: this.pyenv,\n onPackageAdded: context?.onPackageAdded,\n onPackageRemoved: context?.onPackageRemoved,\n });\n }\n\n close(): void {\n if (this.pyenv) {\n this.pyenv.close();\n this.pyenv = null;\n }\n this.loadedPackages.clear();\n }\n}\n\nexport const pythonNotebookKernelContribution: NotebookKernelContribution = {\n id: 'python',\n label: 'Python',\n language: 'python',\n loadKernel: async (): Promise<NotebookKernel> => new PythonNotebookKernel(),\n};\n","import {\n registerAll,\n toastInfo,\n toastError,\n editorRegistry,\n File,\n type EditorInput,\n contributionRegistry,\n} from \"@eclipse-docks/core\";\nimport { TARGET_NOTEBOOK_KERNELS } from \"@eclipse-docks/extension-notebook\";\nimport { html } from \"lit\";\n\ntype EditorWithLanguage = { isLanguage?(lang: string): boolean };\nimport { PyEnv } from \"./pyservice\";\nimport { pythonNotebookKernelContribution } from \"./python-notebook-kernel\";\n\ncontributionRegistry.registerContribution(TARGET_NOTEBOOK_KERNELS, pythonNotebookKernelContribution);\n\nimport { parsePackagesFromContent } from \"./editor-python-run\";\nimport { pythonPackageManagerService } from \"./package-manager\";\n\nexport { PyEnv } from \"./pyservice\";\nexport { pythonPackageManagerService } from \"./package-manager\";\n\nregisterAll({\n command: {\n id: \"python\",\n name: \"Run Python Script\",\n description: \"Executes a Python script given its file path\",\n parameters: [\n { name: \"script\", description: \"the path to a Python script to run\", required: false },\n ],\n },\n handler: {\n execute: async (context: any) => {\n const script: string = context.params?.[\"script\"];\n if (!script) return;\n const pyenv = new PyEnv();\n await pyenv.init({ params: context.params });\n await pyenv.execScript(script);\n },\n },\n});\n\nregisterAll({\n command: {\n id: \"python.openEditorPackageManager\",\n name: \"Manage packages\",\n description: \"Manage Python packages for the editor environment\",\n parameters: [],\n },\n handler: {\n canExecute: (ctx) => !!(ctx.activeEditor as EditorWithLanguage)?.isLanguage?.(\"python\"),\n execute: async (ctx) => {\n const ed = ctx.activeEditor as { getContent?: () => string; getPyEnv?: () => PyEnv | undefined } | undefined;\n if (!ed) {\n toastError(\"No active editor\");\n return;\n }\n const content = ed?.getContent?.() ?? \"\";\n const packages = parsePackagesFromContent(content);\n const pyenv = ed.getPyEnv?.();\n pythonPackageManagerService.showPackageManager({\n packages,\n pyenv,\n });\n },\n },\n});\n\neditorRegistry.registerEditorInputHandler({\n editorId: \"system.python-editor\",\n label: \"Python\",\n icon: \"docks python\",\n lazyInit: async () => {\n await import(\"./python-editor\");\n },\n canHandle: (input: unknown) =>\n input instanceof File && input.getName().toLowerCase().endsWith(\".py\"),\n ranking: 1000,\n handle: async (input: File) => {\n const editorInput: EditorInput = {\n title: input.getWorkspacePath(),\n data: input,\n key: input.getWorkspacePath(),\n icon: editorRegistry.getFileIcon(input.getName()),\n state: {},\n component: () => null as any,\n };\n\n editorInput.component = (id: string) =>\n html`<docks-python-editor id=\"${id}\" .input=${editorInput}></docks-python-editor>`;\n\n return editorInput;\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"python-runtime-extension-qSvGLwAk.js","names":[],"sources":["../src/python-notebook-kernel.ts","../src/python-runtime-extension.ts"],"sourcesContent":["import type {\n NotebookExecutionResult,\n NotebookKernel,\n NotebookKernelContribution,\n} from '@eclipse-docks/extension-notebook';\nimport { TARGET_NOTEBOOK_KERNELS } from '@eclipse-docks/extension-notebook';\nimport { PyEnv } from './pyservice';\nimport { pythonPackageManagerService } from './package-manager';\n\nclass PythonNotebookKernel implements NotebookKernel {\n readonly id = 'python';\n readonly label = 'Python';\n readonly language = 'python';\n\n private pyenv: PyEnv | null = null;\n private requiredPackages: string[] = [];\n private loadedPackages = new Set<string>();\n private connectPromise: Promise<void> | null = null;\n\n async connect(options?: { requiredPackages?: string[] }): Promise<void> {\n if (this.connectPromise) {\n await this.connectPromise;\n if (options?.requiredPackages) {\n this.requiredPackages = options.requiredPackages;\n }\n const packagesToLoadAfterWait = this.requiredPackages.filter((pkg) => !this.loadedPackages.has(pkg));\n if (packagesToLoadAfterWait.length === 0 || !this.pyenv) return;\n await this.pyenv.loadPackages(packagesToLoadAfterWait);\n packagesToLoadAfterWait.forEach((pkg) => this.loadedPackages.add(pkg));\n return;\n }\n\n this.connectPromise = this.doConnect(options);\n try {\n await this.connectPromise;\n } finally {\n this.connectPromise = null;\n }\n }\n\n private async doConnect(options?: { requiredPackages?: string[] }): Promise<void> {\n if (options?.requiredPackages) {\n this.requiredPackages = options.requiredPackages;\n }\n\n if (!this.pyenv) {\n this.pyenv = new PyEnv();\n await this.pyenv.init();\n }\n\n const packagesToLoad = this.requiredPackages.filter((pkg) => !this.loadedPackages.has(pkg));\n if (packagesToLoad.length > 0) {\n await this.pyenv.loadPackages(packagesToLoad);\n packagesToLoad.forEach((pkg) => this.loadedPackages.add(pkg));\n }\n\n try {\n await this.pyenv.execCode(`\ntry:\n import matplotlib\n matplotlib.use('agg')\n import matplotlib.pyplot as plt\n import io\n import base64\n _original_show = plt.show\n _display_data = None\n def _patched_show(*args, **kwargs):\n global _display_data\n if plt.get_fignums():\n fig = plt.gcf()\n buffer = io.BytesIO()\n fig.savefig(buffer, format='png', bbox_inches='tight', dpi=100)\n buffer.seek(0)\n _display_data = base64.b64encode(buffer.read()).decode('utf-8')\n plt.close(fig)\n pass\n plt.show = _patched_show\nexcept ImportError:\n pass\n`);\n } catch {\n // matplotlib not installed\n }\n }\n\n async execute(code: string): Promise<NotebookExecutionResult> {\n if (!this.pyenv) {\n await this.connect();\n }\n if (!this.pyenv) {\n return { error: 'Python kernel not initialized' };\n }\n try {\n const response = await this.pyenv.execCode(code);\n const outputParts: string[] = [];\n\n if (response && typeof response === 'object' && 'console' in response) {\n const consoleOutput = response.console;\n if (Array.isArray(consoleOutput) && consoleOutput.length > 0) {\n const filtered = consoleOutput.filter((s: unknown) => s && String(s).trim());\n if (filtered.length > 0) {\n outputParts.push(...filtered.map(String));\n }\n }\n }\n\n let imageData: string | undefined;\n try {\n const checkDisplayData = await this.pyenv.execCode(\n '_display_data if \"_display_data\" in dir() else None'\n );\n const displayResult =\n checkDisplayData && typeof checkDisplayData === 'object' && checkDisplayData !== null && 'result' in checkDisplayData\n ? (checkDisplayData as { result: unknown }).result\n : checkDisplayData;\n if (\n displayResult != null &&\n String(displayResult) !== 'None' &&\n String(displayResult) !== 'undefined'\n ) {\n imageData = String(displayResult);\n await this.pyenv.execCode('_display_data = None');\n }\n } catch {\n // ignore\n }\n\n if (!imageData) {\n const result =\n response && typeof response === 'object' && response !== null && 'result' in response\n ? (response as { result: unknown }).result\n : response;\n if (result !== undefined && result !== null && String(result) !== 'undefined') {\n const s = String(result);\n if (s && s !== 'undefined') outputParts.push(s);\n }\n }\n\n return {\n data: outputParts.length > 0 ? outputParts.join('\\n') : undefined,\n imageData,\n };\n } catch (err) {\n return {\n error: err instanceof Error ? err.message : String(err),\n };\n }\n }\n\n async getVersion(): Promise<string | undefined> {\n if (!this.pyenv) return undefined;\n try {\n const response = await this.pyenv.getVersion();\n return response ?? undefined;\n } catch {\n return undefined;\n }\n }\n\n interrupt(): void {\n this.pyenv?.interrupt?.();\n }\n\n async restart(): Promise<void> {\n if (this.pyenv) {\n this.pyenv.close();\n this.pyenv = null;\n }\n this.loadedPackages.clear();\n await this.connect({ requiredPackages: this.requiredPackages });\n }\n\n openPackageManager(\n context?: {\n requiredPackages: string[];\n onPackageAdded: (name: string) => void;\n onPackageRemoved: (name: string) => void;\n }\n ): void {\n if (!this.pyenv) return;\n pythonPackageManagerService.showPackageManager({\n packages: context?.requiredPackages ?? [],\n pyenv: this.pyenv,\n onPackageAdded: context?.onPackageAdded,\n onPackageRemoved: context?.onPackageRemoved,\n });\n }\n\n close(): void {\n if (this.pyenv) {\n this.pyenv.close();\n this.pyenv = null;\n }\n this.loadedPackages.clear();\n }\n}\n\nexport const pythonNotebookKernelContribution: NotebookKernelContribution = {\n id: 'python',\n label: 'Python',\n language: 'python',\n loadKernel: async (): Promise<NotebookKernel> => new PythonNotebookKernel(),\n};\n","import {\n registerAll,\n toastInfo,\n toastError,\n editorRegistry,\n File,\n type EditorInput,\n contributionRegistry,\n} from \"@eclipse-docks/core\";\nimport { TARGET_NOTEBOOK_KERNELS } from \"@eclipse-docks/extension-notebook\";\nimport { html } from \"lit\";\n\ntype EditorWithLanguage = { isLanguage?(lang: string): boolean };\nimport { PyEnv } from \"./pyservice\";\nimport { pythonNotebookKernelContribution } from \"./python-notebook-kernel\";\n\ncontributionRegistry.registerContribution(TARGET_NOTEBOOK_KERNELS, pythonNotebookKernelContribution);\n\nimport { parsePackagesFromContent } from \"./editor-python-run\";\nimport { pythonPackageManagerService } from \"./package-manager\";\n\nexport { PyEnv } from \"./pyservice\";\nexport { pythonPackageManagerService } from \"./package-manager\";\n\nregisterAll({\n command: {\n id: \"python\",\n name: \"Run Python Script\",\n description: \"Executes a Python script given its file path\",\n parameters: [\n { name: \"script\", description: \"the path to a Python script to run\", required: false },\n ],\n },\n handler: {\n execute: async (context: any) => {\n const script: string = context.params?.[\"script\"];\n if (!script) return;\n const pyenv = new PyEnv();\n await pyenv.init({ params: context.params });\n await pyenv.execScript(script);\n },\n },\n});\n\nregisterAll({\n command: {\n id: \"python.openEditorPackageManager\",\n name: \"Manage packages\",\n description: \"Manage Python packages for the editor environment\",\n parameters: [],\n },\n handler: {\n canExecute: (ctx) => !!(ctx.activeEditor as EditorWithLanguage)?.isLanguage?.(\"python\"),\n execute: async (ctx) => {\n const ed = ctx.activeEditor as { getContent?: () => string; getPyEnv?: () => PyEnv | undefined } | undefined;\n if (!ed) {\n toastError(\"No active editor\");\n return;\n }\n const content = ed?.getContent?.() ?? \"\";\n const packages = parsePackagesFromContent(content);\n const pyenv = ed.getPyEnv?.();\n pythonPackageManagerService.showPackageManager({\n packages,\n pyenv,\n });\n },\n },\n});\n\neditorRegistry.registerEditorInputHandler({\n editorId: \"system.python-editor\",\n label: \"Python\",\n icon: \"docks python\",\n lazyInit: async () => {\n await import(\"./python-editor\");\n },\n canHandle: (input: unknown) =>\n input instanceof File && input.getName().toLowerCase().endsWith(\".py\"),\n ranking: 1000,\n handle: async (input: File) => {\n const editorInput: EditorInput = {\n title: input.getWorkspacePath(),\n data: input,\n key: input.getWorkspacePath(),\n icon: editorRegistry.getFileIcon(input.getName()),\n state: {},\n component: () => null as any,\n };\n\n editorInput.component = (id: string) =>\n html`<docks-python-editor id=\"${id}\" .input=${editorInput}></docks-python-editor>`;\n\n return editorInput;\n },\n});\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eclipse-docks/extension-python-runtime",
3
- "version": "0.7.98",
3
+ "version": "0.7.99",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -1,9 +0,0 @@
1
- import { t as __commonJSMin } from "./chunk-Bv4aU9fc.js";
2
- //#region __vite-browser-external
3
- var require___vite_browser_external = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4
- module.exports = {};
5
- }));
6
- //#endregion
7
- export default require___vite_browser_external();
8
-
9
- //# sourceMappingURL=__vite-browser-external-CeeQihCx.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"__vite-browser-external-CeeQihCx.js","names":[],"sources":["../../__vite-browser-external"],"sourcesContent":["module.exports = {}"],"mappings":";;;AAAA,QAAO,UAAU,EAAA"}
@@ -1,28 +0,0 @@
1
- //#region \0rolldown/runtime.js
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
11
- key = keys[i];
12
- if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
13
- get: ((k) => from[k]).bind(null, key),
14
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
- });
16
- }
17
- return to;
18
- };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
20
- value: mod,
21
- enumerable: true
22
- }) : target, mod));
23
- var __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) {
24
- if (typeof require !== "undefined") return require.apply(this, arguments);
25
- 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.");
26
- });
27
- //#endregion
28
- export { __require as n, __toESM as r, __commonJSMin as t };
@@ -1 +0,0 @@
1
- {"version":3,"file":"pyworker-BXXy_GIK.js","names":[],"sources":["../../../../node_modules/pyodide/package.json","../../../../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","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,1],"mappings":"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"}