Skip to content

Commit 7418fe9

Browse files
authored
Emscripten bootstrap: Propagate errors in _createPyodideModule correctly (#4603)
This should make debugging the bootstrap much easier.
1 parent 2a09040 commit 7418fe9

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

src/pyodide/internal/pool/emscriptenSetup.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,9 +145,11 @@ function getEmscriptenSettings(
145145
}
146146
const API = { config, lockFilePromise };
147147
let resolveReadyPromise: (mod: Module) => void;
148-
const readyPromise: Promise<Module> = new Promise(
149-
(res) => (resolveReadyPromise = res)
150-
);
148+
let rejectReadyPromise: (e: any) => void = () => {};
149+
const readyPromise: Promise<Module> = new Promise((res, rej) => {
150+
resolveReadyPromise = res;
151+
rejectReadyPromise = rej;
152+
});
151153
const waitForDynlibs = getWaitForDynlibs(resolveReadyPromise!);
152154
const prepareFileSystem = getPrepareFileSystem(pythonStdlib);
153155
const instantiateWasm = getInstantiateWasm(pyodideWasmModule);
@@ -161,6 +163,7 @@ function getEmscriptenSettings(
161163
instantiateWasm,
162164
reportUndefinedSymbolsNoOp(): void {},
163165
readyPromise,
166+
rejectReadyPromise,
164167
API, // Pyodide requires we pass this in.
165168
};
166169
}
@@ -210,7 +213,9 @@ export async function instantiateEmscriptenModule(
210213
for (const _ of featureDetectionMonkeyPatchesContextManager()) {
211214
// Ignore the returned promise, it won't resolve until we're done preloading dynamic
212215
// libraries.
213-
const _promise = _createPyodideModule(emscriptenSettings);
216+
const _promise = _createPyodideModule(emscriptenSettings).catch((e) =>
217+
emscriptenSettings.rejectReadyPromise(e)
218+
);
214219
}
215220

216221
// Wait until we've executed all the preRun hooks before proceeding

src/pyodide/types/emscripten.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ interface EmscriptenSettings {
7171
config: API['config'];
7272
};
7373
readyPromise: Promise<Module>;
74+
rejectReadyPromise: (e: any) => void;
7475
}
7576

7677
interface Module {

0 commit comments

Comments
 (0)