]> Cypherpunks.ru repositories - gostls13.git/blob - misc/wasm/wasm_exec_node.js
misc/wasm: use NodeJS performance library
[gostls13.git] / misc / wasm / wasm_exec_node.js
1 // Copyright 2021 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 "use strict";
6
7 if (process.argv.length < 3) {
8         console.error("usage: go_js_wasm_exec [wasm binary] [arguments]");
9         process.exit(1);
10 }
11
12 globalThis.require = require;
13 globalThis.fs = require("fs");
14 globalThis.TextEncoder = require("util").TextEncoder;
15 globalThis.TextDecoder = require("util").TextDecoder;
16
17 globalThis.performance ??= require("performance");
18
19 const crypto = require("crypto");
20 globalThis.crypto = {
21         getRandomValues(b) {
22                 crypto.randomFillSync(b);
23         },
24 };
25
26 require("./wasm_exec");
27
28 const go = new Go();
29 go.argv = process.argv.slice(2);
30 go.env = Object.assign({ TMPDIR: require("os").tmpdir() }, process.env);
31 go.exit = process.exit;
32 WebAssembly.instantiate(fs.readFileSync(process.argv[2]), go.importObject).then((result) => {
33         process.on("exit", (code) => { // Node.js exits if no event handler is pending
34                 if (code === 0 && !go.exited) {
35                         // deadlock, make Go print error and stack traces
36                         go._pendingEvent = { id: 0 };
37                         go._resume();
38                 }
39         });
40         return go.run(result.instance);
41 }).catch((err) => {
42         console.error(err);
43         process.exit(1);
44 });