• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1import cfg from '../diplomat.config.mjs';
2import {readString8} from './diplomat-runtime.mjs'
3
4let wasm;
5
6const imports = {
7env: {
8    diplomat_console_debug_js(ptr, len) {
9        console.debug(readString8(wasm, ptr, len));
10    },
11    diplomat_console_error_js(ptr, len) {
12        console.error(readString8(wasm, ptr, len));
13    },
14    diplomat_console_info_js(ptr, len) {
15        console.info(readString8(wasm, ptr, len));
16    },
17    diplomat_console_log_js(ptr, len) {
18        console.log(readString8(wasm, ptr, len));
19    },
20    diplomat_console_warn_js(ptr, len) {
21        console.warn(readString8(wasm, ptr, len));
22    },
23    diplomat_throw_error_js(ptr, len) {
24        throw new Error(readString8(wasm, ptr, len));
25    }
26}
27}
28
29if (globalThis.process?.getBuiltinModule) {
30    // Node (>=22)
31    const fs = globalThis.process.getBuiltinModule('fs');
32    const wasmFile = new Uint8Array(fs.readFileSync(cfg['wasm_path']));
33    const loadedWasm = await WebAssembly.instantiate(wasmFile, imports);
34    wasm = loadedWasm.instance.exports;
35} else if (globalThis.process) {
36    // Node (<22)
37    const fs = await import('fs');
38    const wasmFile = new Uint8Array(fs.readFileSync(cfg['wasm_path']));
39    const loadedWasm = await WebAssembly.instantiate(wasmFile, imports);
40    wasm = loadedWasm.instance.exports;
41} else {
42    // Browser
43    const loadedWasm = await WebAssembly.instantiateStreaming(fetch(cfg['wasm_path']), imports);
44    wasm = loadedWasm.instance.exports;
45}
46
47wasm.diplomat_init();
48if (cfg['init'] !== undefined) {
49    cfg['init'](wasm);
50}
51
52export default wasm;
53