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
7if (process.argv.length < 3) {
8	console.error("usage: go_js_wasm_exec [wasm binary] [arguments]");
9	process.exit(1);
10}
11
12globalThis.require = require;
13globalThis.fs = require("fs");
14globalThis.TextEncoder = require("util").TextEncoder;
15globalThis.TextDecoder = require("util").TextDecoder;
16
17globalThis.performance ??= require("performance");
18
19globalThis.crypto ??= require("crypto");
20
21require("./wasm_exec");
22
23const go = new Go();
24go.argv = process.argv.slice(2);
25go.env = Object.assign({ TMPDIR: require("os").tmpdir() }, process.env);
26go.exit = process.exit;
27WebAssembly.instantiate(fs.readFileSync(process.argv[2]), go.importObject).then((result) => {
28	process.on("exit", (code) => { // Node.js exits if no event handler is pending
29		if (code === 0 && !go.exited) {
30			// deadlock, make Go print error and stack traces
31			go._pendingEvent = { id: 0 };
32			go._resume();
33		}
34	});
35	return go.run(result.instance);
36}).catch((err) => {
37	console.error(err);
38	process.exit(1);
39});
40