67 lines
No EOL
1.8 KiB
Text
67 lines
No EOL
1.8 KiB
Text
// Generated WASM loader
|
|
class WasmLoader {
|
|
constructor() {
|
|
this.modules = new Map();
|
|
}
|
|
|
|
async loadModule(name, wasmPath) {
|
|
if (this.modules.has(name)) {
|
|
return this.modules.get(name);
|
|
}
|
|
|
|
try {
|
|
let wasmModule;
|
|
|
|
if (typeof WebAssembly.instantiateStreaming === "function") {
|
|
const response = await fetch(wasmPath);
|
|
const result = await WebAssembly.instantiateStreaming(response);
|
|
wasmModule = result.instance;
|
|
} else {
|
|
// Fallback for older browsers
|
|
const response = await fetch(wasmPath);
|
|
const bytes = await response.arrayBuffer();
|
|
const result = await WebAssembly.instantiate(bytes);
|
|
wasmModule = result.instance;
|
|
}
|
|
|
|
this.modules.set(name, wasmModule);
|
|
return wasmModule;
|
|
} catch (error) {
|
|
console.error(`Failed to load WASM module ${name}:`, error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
async loadAll() {
|
|
const modulePromises = [
|
|
{{MODULE_PROMISES}}
|
|
];
|
|
|
|
try {
|
|
await Promise.all(modulePromises);
|
|
console.log("All WASM modules loaded successfully");
|
|
} catch (error) {
|
|
console.error("Failed to load some WASM modules:", error);
|
|
}
|
|
}
|
|
|
|
getModule(name) {
|
|
return this.modules.get(name);
|
|
}
|
|
}
|
|
|
|
// Export for use
|
|
window.WasmLoader = WasmLoader;
|
|
|
|
// Auto-load if desired
|
|
if (window.autoLoadWasm !== false) {
|
|
const loader = new WasmLoader();
|
|
loader.loadAll().then(() => {
|
|
window.wasm = loader;
|
|
|
|
// Dispatch event when all modules are ready
|
|
window.dispatchEvent(new CustomEvent("wasmReady", {
|
|
detail: { loader }
|
|
}));
|
|
});
|
|
} |