diff --git a/packages/harper.js/src/BinaryModule.ts b/packages/harper.js/src/BinaryModule.ts index 71d59a74b5..0cbe4edefd 100644 --- a/packages/harper.js/src/BinaryModule.ts +++ b/packages/harper.js/src/BinaryModule.ts @@ -66,29 +66,32 @@ function getInitInput(binary: string): InitInput { return binary; } -const loadBinaryWithKey = pMemoize( - async (_cacheKey: string, binary: string, glueFlavor: WasmGlueFlavor) => { - const exports = loadGlue(glueFlavor); - - const defaultGlueBinary = getDefaultGlueBinary(binary, glueFlavor); - if (defaultGlueBinary != null) { - try { - await defaultGlue.default({ module_or_path: getInitInput(defaultGlueBinary) }); - } catch (err) { - if (glueFlavor === 'slim') { - throw err; - } +async function loadBinaryUncached(binary: string, glueFlavor: WasmGlueFlavor): Promise { + const exports = loadGlue(glueFlavor); + + const defaultGlueBinary = getDefaultGlueBinary(binary, glueFlavor); + if (defaultGlueBinary != null) { + try { + await defaultGlue.default({ module_or_path: getInitInput(defaultGlueBinary) }); + } catch (err) { + if (glueFlavor === 'slim') { + throw err; } } + } + + await exports.default({ module_or_path: getInitInput(binary) }); - await exports.default({ module_or_path: getInitInput(binary) }); + return exports; +} - return exports; - }, -); +const loadBinaryByFlavor: Record Promise> = { + full: pMemoize((binary: string) => loadBinaryUncached(binary, 'full')), + slim: pMemoize((binary: string) => loadBinaryUncached(binary, 'slim')), +}; function loadBinary(binary: string, glueFlavor: WasmGlueFlavor) { - return loadBinaryWithKey(`${glueFlavor}:${binary}`, binary, glueFlavor); + return loadBinaryByFlavor[glueFlavor](binary); } export interface BinaryModule {