diff --git a/src/renderer/python/pyodideAssetUrl.ts b/src/renderer/python/pyodideAssetUrl.ts index 5b243e5..f6de9a6 100644 --- a/src/renderer/python/pyodideAssetUrl.ts +++ b/src/renderer/python/pyodideAssetUrl.ts @@ -1,3 +1,9 @@ -export function resolvePyodideIndexURL(workerModuleUrl: string): string { +export function resolvePyodideIndexURL(workerModuleUrl: string): string | undefined { + const parsed = new URL(workerModuleUrl); + + if (parsed.protocol !== 'file:') { + return undefined; + } + return new URL('../../../node_modules/pyodide/', workerModuleUrl).toString(); } diff --git a/src/renderer/python/pythonRuntime.worker.ts b/src/renderer/python/pythonRuntime.worker.ts index 6ff43e6..d27bf54 100644 --- a/src/renderer/python/pythonRuntime.worker.ts +++ b/src/renderer/python/pythonRuntime.worker.ts @@ -183,8 +183,9 @@ json.dumps(__bds_entrypoints) async function bootstrapRuntime(): Promise { try { + const indexURL = resolvePyodideIndexURL(import.meta.url); runtime = await loadPyodide({ - indexURL: resolvePyodideIndexURL(import.meta.url), + ...(indexURL ? { indexURL } : {}), stdout: (chunk) => { if (!activeRequestId) { return; diff --git a/tests/renderer/python/pyodideAssetUrl.test.ts b/tests/renderer/python/pyodideAssetUrl.test.ts index 3fc99f1..d175dca 100644 --- a/tests/renderer/python/pyodideAssetUrl.test.ts +++ b/tests/renderer/python/pyodideAssetUrl.test.ts @@ -9,8 +9,13 @@ describe('resolvePyodideIndexURL', () => { ); }); - it('resolves to vite node_modules path for dev worker urls', () => { + it('returns undefined for dev worker urls to let pyodide use module-relative defaults', () => { const workerUrl = 'http://localhost:5173/src/renderer/python/pythonRuntime.worker.ts'; - expect(resolvePyodideIndexURL(workerUrl)).toBe('http://localhost:5173/node_modules/pyodide/'); + expect(resolvePyodideIndexURL(workerUrl)).toBeUndefined(); + }); + + it('returns undefined for vite worker_file urls with query parameters', () => { + const workerUrl = 'http://localhost:5173/python/pythonRuntime.worker.ts?worker_file&type=module'; + expect(resolvePyodideIndexURL(workerUrl)).toBeUndefined(); }); });