44 lines
1.2 KiB
JavaScript
44 lines
1.2 KiB
JavaScript
import cfg from '../diplomat.config.mjs';
|
|
import {readString8} from './diplomat-runtime.mjs'
|
|
|
|
let wasm;
|
|
|
|
const imports = {
|
|
env: {
|
|
diplomat_console_debug_js(ptr, len) {
|
|
console.debug(readString8(wasm, ptr, len));
|
|
},
|
|
diplomat_console_error_js(ptr, len) {
|
|
console.error(readString8(wasm, ptr, len));
|
|
},
|
|
diplomat_console_info_js(ptr, len) {
|
|
console.info(readString8(wasm, ptr, len));
|
|
},
|
|
diplomat_console_log_js(ptr, len) {
|
|
console.log(readString8(wasm, ptr, len));
|
|
},
|
|
diplomat_console_warn_js(ptr, len) {
|
|
console.warn(readString8(wasm, ptr, len));
|
|
},
|
|
diplomat_throw_error_js(ptr, len) {
|
|
throw new Error(readString8(wasm, ptr, len));
|
|
}
|
|
}
|
|
}
|
|
|
|
if (typeof fetch === 'undefined') { // Node
|
|
const fs = await import("fs");
|
|
const wasmFile = new Uint8Array(fs.readFileSync(cfg['wasm_path']));
|
|
const loadedWasm = await WebAssembly.instantiate(wasmFile, imports);
|
|
wasm = loadedWasm.instance.exports;
|
|
} else { // Browser
|
|
const loadedWasm = await WebAssembly.instantiateStreaming(fetch(cfg['wasm_path']), imports);
|
|
wasm = loadedWasm.instance.exports;
|
|
}
|
|
|
|
wasm.diplomat_init();
|
|
if (cfg['init'] !== undefined) {
|
|
cfg['init'](wasm);
|
|
}
|
|
|
|
export default wasm;
|