isomorfeus-asset-manager 0.14.19 → 0.14.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/isomorfeus/asset_manager/browser_asset.rb +5 -0
- data/lib/isomorfeus/asset_manager/config.rb +1 -1
- data/lib/isomorfeus/asset_manager/node_asset.rb +1 -1
- data/lib/isomorfeus/asset_manager/version.rb +1 -1
- data/lib/isomorfeus/asset_manager.rb +6 -15
- data/node_modules/.package-lock.json +18 -18
- data/node_modules/esbuild-wasm/bin/esbuild +37 -5
- data/node_modules/esbuild-wasm/esbuild.wasm +0 -0
- data/node_modules/esbuild-wasm/esm/browser.d.ts +13 -1
- data/node_modules/esbuild-wasm/esm/browser.js +625 -744
- data/node_modules/esbuild-wasm/esm/browser.min.js +14 -7
- data/node_modules/esbuild-wasm/exit0.js +2 -0
- data/node_modules/esbuild-wasm/lib/browser.d.ts +13 -1
- data/node_modules/esbuild-wasm/lib/browser.js +654 -756
- data/node_modules/esbuild-wasm/lib/browser.min.js +13 -6
- data/node_modules/esbuild-wasm/lib/main.d.ts +13 -1
- data/node_modules/esbuild-wasm/lib/main.js +57 -43
- data/node_modules/esbuild-wasm/package.json +1 -1
- data/node_modules/esbuild-wasm/wasm_exec.js +17 -127
- data/node_modules/esbuild-wasm/wasm_exec_node.js +49 -0
- data/package.json +1 -1
- metadata +17 -10
@@ -219,6 +219,7 @@ var mustBeInteger = (value) => typeof value === "number" && value === (value | 0
|
|
219
219
|
var mustBeFunction = (value) => typeof value === "function" ? null : "a function";
|
220
220
|
var mustBeArray = (value) => Array.isArray(value) ? null : "an array";
|
221
221
|
var mustBeObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value) ? null : "an object";
|
222
|
+
var mustBeWebAssemblyModule = (value) => value instanceof WebAssembly.Module ? null : "a WebAssembly.Module";
|
222
223
|
var mustBeArrayOrRecord = (value) => typeof value === "object" && value !== null ? null : "an array or an object";
|
223
224
|
var mustBeObjectOrNull = (value) => typeof value === "object" && !Array.isArray(value) ? null : "an object or null";
|
224
225
|
var mustBeStringOrBoolean = (value) => typeof value === "string" || typeof value === "boolean" ? null : "a string or a boolean";
|
@@ -245,10 +246,12 @@ function checkForInvalidFlags(object, keys, where) {
|
|
245
246
|
function validateInitializeOptions(options) {
|
246
247
|
let keys = /* @__PURE__ */ Object.create(null);
|
247
248
|
let wasmURL = getFlag(options, keys, "wasmURL", mustBeString);
|
249
|
+
let wasmModule = getFlag(options, keys, "wasmModule", mustBeWebAssemblyModule);
|
248
250
|
let worker = getFlag(options, keys, "worker", mustBeBoolean);
|
249
|
-
checkForInvalidFlags(options, keys, "in
|
251
|
+
checkForInvalidFlags(options, keys, "in initialize() call");
|
250
252
|
return {
|
251
253
|
wasmURL,
|
254
|
+
wasmModule,
|
252
255
|
worker
|
253
256
|
};
|
254
257
|
}
|
@@ -287,6 +290,7 @@ function pushCommonFlags(flags, options, keys) {
|
|
287
290
|
let globalName = getFlag(options, keys, "globalName", mustBeString);
|
288
291
|
let mangleProps = getFlag(options, keys, "mangleProps", mustBeRegExp);
|
289
292
|
let reserveProps = getFlag(options, keys, "reserveProps", mustBeRegExp);
|
293
|
+
let mangleQuoted = getFlag(options, keys, "mangleQuoted", mustBeBoolean);
|
290
294
|
let minify = getFlag(options, keys, "minify", mustBeBoolean);
|
291
295
|
let minifySyntax = getFlag(options, keys, "minifySyntax", mustBeBoolean);
|
292
296
|
let minifyWhitespace = getFlag(options, keys, "minifyWhitespace", mustBeBoolean);
|
@@ -338,6 +342,8 @@ function pushCommonFlags(flags, options, keys) {
|
|
338
342
|
flags.push(`--mangle-props=${mangleProps.source}`);
|
339
343
|
if (reserveProps)
|
340
344
|
flags.push(`--reserve-props=${reserveProps.source}`);
|
345
|
+
if (mangleQuoted !== void 0)
|
346
|
+
flags.push(`--mangle-quoted=${mangleQuoted}`);
|
341
347
|
if (jsx)
|
342
348
|
flags.push(`--jsx=${jsx}`);
|
343
349
|
if (jsxFactory)
|
@@ -587,7 +593,7 @@ function createChannel(streamIn) {
|
|
587
593
|
let pluginCallbacks = /* @__PURE__ */ new Map();
|
588
594
|
let watchCallbacks = /* @__PURE__ */ new Map();
|
589
595
|
let serveCallbacks = /* @__PURE__ */ new Map();
|
590
|
-
let
|
596
|
+
let closeData = null;
|
591
597
|
let nextRequestID = 0;
|
592
598
|
let nextBuildKey = 0;
|
593
599
|
let stdout = new Uint8Array(16 * 1024);
|
@@ -616,19 +622,20 @@ function createChannel(streamIn) {
|
|
616
622
|
stdoutUsed -= offset;
|
617
623
|
}
|
618
624
|
};
|
619
|
-
let afterClose = () => {
|
620
|
-
|
625
|
+
let afterClose = (error) => {
|
626
|
+
closeData = { reason: error ? ": " + (error.message || error) : "" };
|
627
|
+
const text = "The service was stopped" + closeData.reason;
|
621
628
|
for (let callback of responseCallbacks.values()) {
|
622
|
-
callback(
|
629
|
+
callback(text, null);
|
623
630
|
}
|
624
631
|
responseCallbacks.clear();
|
625
632
|
for (let callbacks of serveCallbacks.values()) {
|
626
|
-
callbacks.onWait(
|
633
|
+
callbacks.onWait(text);
|
627
634
|
}
|
628
635
|
serveCallbacks.clear();
|
629
636
|
for (let callback of watchCallbacks.values()) {
|
630
637
|
try {
|
631
|
-
callback(new Error(
|
638
|
+
callback(new Error(text), null);
|
632
639
|
} catch (e) {
|
633
640
|
console.error(e);
|
634
641
|
}
|
@@ -636,8 +643,8 @@ function createChannel(streamIn) {
|
|
636
643
|
watchCallbacks.clear();
|
637
644
|
};
|
638
645
|
let sendRequest = (refs, value, callback) => {
|
639
|
-
if (
|
640
|
-
return callback("The service is no longer running", null);
|
646
|
+
if (closeData)
|
647
|
+
return callback("The service is no longer running" + closeData.reason, null);
|
641
648
|
let id = nextRequestID++;
|
642
649
|
responseCallbacks.set(id, (error, response) => {
|
643
650
|
try {
|
@@ -652,8 +659,8 @@ function createChannel(streamIn) {
|
|
652
659
|
streamIn.writeToStdin(encodePacket({ id, isRequest: true, value }));
|
653
660
|
};
|
654
661
|
let sendResponse = (id, value) => {
|
655
|
-
if (
|
656
|
-
throw new Error("The service is no longer running");
|
662
|
+
if (closeData)
|
663
|
+
throw new Error("The service is no longer running" + closeData.reason);
|
657
664
|
streamIn.writeToStdin(encodePacket({ id, isRequest: false, value }));
|
658
665
|
};
|
659
666
|
let handleRequest = async (id, request) => {
|
@@ -724,8 +731,8 @@ function createChannel(streamIn) {
|
|
724
731
|
if (isFirstPacket) {
|
725
732
|
isFirstPacket = false;
|
726
733
|
let binaryVersion = String.fromCharCode(...bytes);
|
727
|
-
if (binaryVersion !== "0.14.
|
728
|
-
throw new Error(`Cannot start service: Host version "${"0.14.
|
734
|
+
if (binaryVersion !== "0.14.36") {
|
735
|
+
throw new Error(`Cannot start service: Host version "${"0.14.36"}" does not match binary version ${JSON.stringify(binaryVersion)}`);
|
729
736
|
}
|
730
737
|
return;
|
731
738
|
}
|
@@ -1230,7 +1237,7 @@ function createChannel(streamIn) {
|
|
1230
1237
|
if (!rebuild) {
|
1231
1238
|
let isDisposed = false;
|
1232
1239
|
rebuild = () => new Promise((resolve, reject) => {
|
1233
|
-
if (isDisposed ||
|
1240
|
+
if (isDisposed || closeData)
|
1234
1241
|
throw new Error("Cannot rebuild");
|
1235
1242
|
sendRequest(refs, { command: "rebuild", key }, (error2, response2) => {
|
1236
1243
|
if (error2) {
|
@@ -1670,7 +1677,7 @@ function convertOutputFiles({ path, contents }) {
|
|
1670
1677
|
}
|
1671
1678
|
|
1672
1679
|
// lib/npm/browser.ts
|
1673
|
-
var version = "0.14.
|
1680
|
+
var version = "0.14.36";
|
1674
1681
|
var build = (options) => ensureServiceIsRunning().build(options);
|
1675
1682
|
var serve = () => {
|
1676
1683
|
throw new Error(`The "serve" API only works in node`);
|
@@ -1702,747 +1709,621 @@ var ensureServiceIsRunning = () => {
|
|
1702
1709
|
var initialize = (options) => {
|
1703
1710
|
options = validateInitializeOptions(options || {});
|
1704
1711
|
let wasmURL = options.wasmURL;
|
1712
|
+
let wasmModule = options.wasmModule;
|
1705
1713
|
let useWorker = options.worker !== false;
|
1706
|
-
if (!wasmURL)
|
1707
|
-
throw new Error('Must provide the "wasmURL" option');
|
1708
|
-
wasmURL += "";
|
1714
|
+
if (!wasmURL && !wasmModule)
|
1715
|
+
throw new Error('Must provide either the "wasmURL" option or the "wasmModule" option');
|
1709
1716
|
if (initializePromise)
|
1710
1717
|
throw new Error('Cannot call "initialize" more than once');
|
1711
|
-
initializePromise = startRunningService(wasmURL, useWorker);
|
1718
|
+
initializePromise = startRunningService(wasmURL || "", wasmModule, useWorker);
|
1712
1719
|
initializePromise.catch(() => {
|
1713
1720
|
initializePromise = void 0;
|
1714
1721
|
});
|
1715
1722
|
return initializePromise;
|
1716
1723
|
};
|
1717
|
-
var startRunningService = async (wasmURL, useWorker) => {
|
1718
|
-
let
|
1719
|
-
if (
|
1720
|
-
|
1721
|
-
|
1722
|
-
|
1723
|
-
|
1724
|
-
|
1725
|
-
|
1726
|
-
|
1727
|
-
|
1728
|
-
|
1729
|
-
//
|
1730
|
-
|
1731
|
-
|
1732
|
-
|
1733
|
-
|
1734
|
-
|
1735
|
-
|
1736
|
-
|
1737
|
-
|
1738
|
-
|
1739
|
-
|
1740
|
-
|
1741
|
-
|
1742
|
-
|
1743
|
-
|
1744
|
-
|
1745
|
-
|
1746
|
-
|
1747
|
-
|
1748
|
-
|
1749
|
-
|
1750
|
-
|
1751
|
-
|
1752
|
-
|
1753
|
-
|
1754
|
-
|
1755
|
-
|
1756
|
-
|
1757
|
-
|
1758
|
-
|
1759
|
-
|
1760
|
-
|
1761
|
-
|
1762
|
-
|
1763
|
-
|
1724
|
+
var startRunningService = async (wasmURL, wasmModule, useWorker) => {
|
1725
|
+
let wasm;
|
1726
|
+
if (wasmModule) {
|
1727
|
+
wasm = wasmModule;
|
1728
|
+
} else {
|
1729
|
+
let res = await fetch(wasmURL);
|
1730
|
+
if (!res.ok)
|
1731
|
+
throw new Error(`Failed to download ${JSON.stringify(wasmURL)}`);
|
1732
|
+
wasm = await res.arrayBuffer();
|
1733
|
+
}
|
1734
|
+
let worker;
|
1735
|
+
if (useWorker) {
|
1736
|
+
let blob = new Blob([`onmessage=${'((postMessage) => {\n // Copyright 2018 The Go Authors. All rights reserved.\n // Use of this source code is governed by a BSD-style\n // license that can be found in the LICENSE file.\n let onmessage;\n let globalThis = {};\n for (let o = self; o; o = Object.getPrototypeOf(o))\n for (let k of Object.getOwnPropertyNames(o))\n if (!(k in globalThis))\n Object.defineProperty(globalThis, k, { get: () => self[k] });\n "use strict";\n (() => {\n const enosys = () => {\n const err = new Error("not implemented");\n err.code = "ENOSYS";\n return err;\n };\n if (!globalThis.fs) {\n let outputBuf = "";\n globalThis.fs = {\n constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1 },\n writeSync(fd, buf) {\n outputBuf += decoder.decode(buf);\n const nl = outputBuf.lastIndexOf("\\n");\n if (nl != -1) {\n console.log(outputBuf.substr(0, nl));\n outputBuf = outputBuf.substr(nl + 1);\n }\n return buf.length;\n },\n write(fd, buf, offset, length, position, callback) {\n if (offset !== 0 || length !== buf.length || position !== null) {\n callback(enosys());\n return;\n }\n const n = this.writeSync(fd, buf);\n callback(null, n);\n },\n chmod(path, mode, callback) {\n callback(enosys());\n },\n chown(path, uid, gid, callback) {\n callback(enosys());\n },\n close(fd, callback) {\n callback(enosys());\n },\n fchmod(fd, mode, callback) {\n callback(enosys());\n },\n fchown(fd, uid, gid, callback) {\n callback(enosys());\n },\n fstat(fd, callback) {\n callback(enosys());\n },\n fsync(fd, callback) {\n callback(null);\n },\n ftruncate(fd, length, callback) {\n callback(enosys());\n },\n lchown(path, uid, gid, callback) {\n callback(enosys());\n },\n link(path, link, callback) {\n callback(enosys());\n },\n lstat(path, callback) {\n callback(enosys());\n },\n mkdir(path, perm, callback) {\n callback(enosys());\n },\n open(path, flags, mode, callback) {\n callback(enosys());\n },\n read(fd, buffer, offset, length, position, callback) {\n callback(enosys());\n },\n readdir(path, callback) {\n callback(enosys());\n },\n readlink(path, callback) {\n callback(enosys());\n },\n rename(from, to, callback) {\n callback(enosys());\n },\n rmdir(path, callback) {\n callback(enosys());\n },\n stat(path, callback) {\n callback(enosys());\n },\n symlink(path, link, callback) {\n callback(enosys());\n },\n truncate(path, length, callback) {\n callback(enosys());\n },\n unlink(path, callback) {\n callback(enosys());\n },\n utimes(path, atime, mtime, callback) {\n callback(enosys());\n }\n };\n }\n if (!globalThis.process) {\n globalThis.process = {\n getuid() {\n return -1;\n },\n getgid() {\n return -1;\n },\n geteuid() {\n return -1;\n },\n getegid() {\n return -1;\n },\n getgroups() {\n throw enosys();\n },\n pid: -1,\n ppid: -1,\n umask() {\n throw enosys();\n },\n cwd() {\n throw enosys();\n },\n chdir() {\n throw enosys();\n }\n };\n }\n if (!globalThis.crypto) {\n throw new Error("globalThis.crypto is not available, polyfill required (crypto.getRandomValues only)");\n }\n if (!globalThis.performance) {\n throw new Error("globalThis.performance is not available, polyfill required (performance.now only)");\n }\n if (!globalThis.TextEncoder) {\n throw new Error("globalThis.TextEncoder is not available, polyfill required");\n }\n if (!globalThis.TextDecoder) {\n throw new Error("globalThis.TextDecoder is not available, polyfill required");\n }\n const encoder = new TextEncoder("utf-8");\n const decoder = new TextDecoder("utf-8");\n globalThis.Go = class {\n constructor() {\n this.argv = ["js"];\n this.env = {};\n this.exit = (code) => {\n if (code !== 0) {\n console.warn("exit code:", code);\n }\n };\n this._exitPromise = new Promise((resolve) => {\n this._resolveExitPromise = resolve;\n });\n this._pendingEvent = null;\n this._scheduledTimeouts = /* @__PURE__ */ new Map();\n this._nextCallbackTimeoutID = 1;\n const setInt64 = (addr, v) => {\n this.mem.setUint32(addr + 0, v, true);\n this.mem.setUint32(addr + 4, Math.floor(v / 4294967296), true);\n };\n const getInt64 = (addr) => {\n const low = this.mem.getUint32(addr + 0, true);\n const high = this.mem.getInt32(addr + 4, true);\n return low + high * 4294967296;\n };\n const loadValue = (addr) => {\n const f = this.mem.getFloat64(addr, true);\n if (f === 0) {\n return void 0;\n }\n if (!isNaN(f)) {\n return f;\n }\n const id = this.mem.getUint32(addr, true);\n return this._values[id];\n };\n const storeValue = (addr, v) => {\n const nanHead = 2146959360;\n if (typeof v === "number" && v !== 0) {\n if (isNaN(v)) {\n this.mem.setUint32(addr + 4, nanHead, true);\n this.mem.setUint32(addr, 0, true);\n return;\n }\n this.mem.setFloat64(addr, v, true);\n return;\n }\n if (v === void 0) {\n this.mem.setFloat64(addr, 0, true);\n return;\n }\n let id = this._ids.get(v);\n if (id === void 0) {\n id = this._idPool.pop();\n if (id === void 0) {\n id = this._values.length;\n }\n this._values[id] = v;\n this._goRefCounts[id] = 0;\n this._ids.set(v, id);\n }\n this._goRefCounts[id]++;\n let typeFlag = 0;\n switch (typeof v) {\n case "object":\n if (v !== null) {\n typeFlag = 1;\n }\n break;\n case "string":\n typeFlag = 2;\n break;\n case "symbol":\n typeFlag = 3;\n break;\n case "function":\n typeFlag = 4;\n break;\n }\n this.mem.setUint32(addr + 4, nanHead | typeFlag, true);\n this.mem.setUint32(addr, id, true);\n };\n const loadSlice = (addr) => {\n const array = getInt64(addr + 0);\n const len = getInt64(addr + 8);\n return new Uint8Array(this._inst.exports.mem.buffer, array, len);\n };\n const loadSliceOfValues = (addr) => {\n const array = getInt64(addr + 0);\n const len = getInt64(addr + 8);\n const a = new Array(len);\n for (let i = 0; i < len; i++) {\n a[i] = loadValue(array + i * 8);\n }\n return a;\n };\n const loadString = (addr) => {\n const saddr = getInt64(addr + 0);\n const len = getInt64(addr + 8);\n return decoder.decode(new DataView(this._inst.exports.mem.buffer, saddr, len));\n };\n const timeOrigin = Date.now() - performance.now();\n this.importObject = {\n go: {\n "runtime.wasmExit": (sp) => {\n sp >>>= 0;\n const code = this.mem.getInt32(sp + 8, true);\n this.exited = true;\n delete this._inst;\n delete this._values;\n delete this._goRefCounts;\n delete this._ids;\n delete this._idPool;\n this.exit(code);\n },\n "runtime.wasmWrite": (sp) => {\n sp >>>= 0;\n const fd = getInt64(sp + 8);\n const p = getInt64(sp + 16);\n const n = this.mem.getInt32(sp + 24, true);\n globalThis.fs.writeSync(fd, new Uint8Array(this._inst.exports.mem.buffer, p, n));\n },\n "runtime.resetMemoryDataView": (sp) => {\n sp >>>= 0;\n this.mem = new DataView(this._inst.exports.mem.buffer);\n },\n "runtime.nanotime1": (sp) => {\n sp >>>= 0;\n setInt64(sp + 8, (timeOrigin + performance.now()) * 1e6);\n },\n "runtime.walltime": (sp) => {\n sp >>>= 0;\n const msec = new Date().getTime();\n setInt64(sp + 8, msec / 1e3);\n this.mem.setInt32(sp + 16, msec % 1e3 * 1e6, true);\n },\n "runtime.scheduleTimeoutEvent": (sp) => {\n sp >>>= 0;\n const id = this._nextCallbackTimeoutID;\n this._nextCallbackTimeoutID++;\n this._scheduledTimeouts.set(id, setTimeout(() => {\n this._resume();\n while (this._scheduledTimeouts.has(id)) {\n console.warn("scheduleTimeoutEvent: missed timeout event");\n this._resume();\n }\n }, getInt64(sp + 8) + 1));\n this.mem.setInt32(sp + 16, id, true);\n },\n "runtime.clearTimeoutEvent": (sp) => {\n sp >>>= 0;\n const id = this.mem.getInt32(sp + 8, true);\n clearTimeout(this._scheduledTimeouts.get(id));\n this._scheduledTimeouts.delete(id);\n },\n "runtime.getRandomData": (sp) => {\n sp >>>= 0;\n crypto.getRandomValues(loadSlice(sp + 8));\n },\n "syscall/js.finalizeRef": (sp) => {\n sp >>>= 0;\n const id = this.mem.getUint32(sp + 8, true);\n this._goRefCounts[id]--;\n if (this._goRefCounts[id] === 0) {\n const v = this._values[id];\n this._values[id] = null;\n this._ids.delete(v);\n this._idPool.push(id);\n }\n },\n "syscall/js.stringVal": (sp) => {\n sp >>>= 0;\n storeValue(sp + 24, loadString(sp + 8));\n },\n "syscall/js.valueGet": (sp) => {\n sp >>>= 0;\n const result = Reflect.get(loadValue(sp + 8), loadString(sp + 16));\n sp = this._inst.exports.getsp() >>> 0;\n storeValue(sp + 32, result);\n },\n "syscall/js.valueSet": (sp) => {\n sp >>>= 0;\n Reflect.set(loadValue(sp + 8), loadString(sp + 16), loadValue(sp + 32));\n },\n "syscall/js.valueDelete": (sp) => {\n sp >>>= 0;\n Reflect.deleteProperty(loadValue(sp + 8), loadString(sp + 16));\n },\n "syscall/js.valueIndex": (sp) => {\n sp >>>= 0;\n storeValue(sp + 24, Reflect.get(loadValue(sp + 8), getInt64(sp + 16)));\n },\n "syscall/js.valueSetIndex": (sp) => {\n sp >>>= 0;\n Reflect.set(loadValue(sp + 8), getInt64(sp + 16), loadValue(sp + 24));\n },\n "syscall/js.valueCall": (sp) => {\n sp >>>= 0;\n try {\n const v = loadValue(sp + 8);\n const m = Reflect.get(v, loadString(sp + 16));\n const args = loadSliceOfValues(sp + 32);\n const result = Reflect.apply(m, v, args);\n sp = this._inst.exports.getsp() >>> 0;\n storeValue(sp + 56, result);\n this.mem.setUint8(sp + 64, 1);\n } catch (err) {\n sp = this._inst.exports.getsp() >>> 0;\n storeValue(sp + 56, err);\n this.mem.setUint8(sp + 64, 0);\n }\n },\n "syscall/js.valueInvoke": (sp) => {\n sp >>>= 0;\n try {\n const v = loadValue(sp + 8);\n const args = loadSliceOfValues(sp + 16);\n const result = Reflect.apply(v, void 0, args);\n sp = this._inst.exports.getsp() >>> 0;\n storeValue(sp + 40, result);\n this.mem.setUint8(sp + 48, 1);\n } catch (err) {\n sp = this._inst.exports.getsp() >>> 0;\n storeValue(sp + 40, err);\n this.mem.setUint8(sp + 48, 0);\n }\n },\n "syscall/js.valueNew": (sp) => {\n sp >>>= 0;\n try {\n const v = loadValue(sp + 8);\n const args = loadSliceOfValues(sp + 16);\n const result = Reflect.construct(v, args);\n sp = this._inst.exports.getsp() >>> 0;\n storeValue(sp + 40, result);\n this.mem.setUint8(sp + 48, 1);\n } catch (err) {\n sp = this._inst.exports.getsp() >>> 0;\n storeValue(sp + 40, err);\n this.mem.setUint8(sp + 48, 0);\n }\n },\n "syscall/js.valueLength": (sp) => {\n sp >>>= 0;\n setInt64(sp + 16, parseInt(loadValue(sp + 8).length));\n },\n "syscall/js.valuePrepareString": (sp) => {\n sp >>>= 0;\n const str = encoder.encode(String(loadValue(sp + 8)));\n storeValue(sp + 16, str);\n setInt64(sp + 24, str.length);\n },\n "syscall/js.valueLoadString": (sp) => {\n sp >>>= 0;\n const str = loadValue(sp + 8);\n loadSlice(sp + 16).set(str);\n },\n "syscall/js.valueInstanceOf": (sp) => {\n sp >>>= 0;\n this.mem.setUint8(sp + 24, loadValue(sp + 8) instanceof loadValue(sp + 16) ? 1 : 0);\n },\n "syscall/js.copyBytesToGo": (sp) => {\n sp >>>= 0;\n const dst = loadSlice(sp + 8);\n const src = loadValue(sp + 32);\n if (!(src instanceof Uint8Array || src instanceof Uint8ClampedArray)) {\n this.mem.setUint8(sp + 48, 0);\n return;\n }\n const toCopy = src.subarray(0, dst.length);\n dst.set(toCopy);\n setInt64(sp + 40, toCopy.length);\n this.mem.setUint8(sp + 48, 1);\n },\n "syscall/js.copyBytesToJS": (sp) => {\n sp >>>= 0;\n const dst = loadValue(sp + 8);\n const src = loadSlice(sp + 16);\n if (!(dst instanceof Uint8Array || dst instanceof Uint8ClampedArray)) {\n this.mem.setUint8(sp + 48, 0);\n return;\n }\n const toCopy = src.subarray(0, dst.length);\n dst.set(toCopy);\n setInt64(sp + 40, toCopy.length);\n this.mem.setUint8(sp + 48, 1);\n },\n "debug": (value) => {\n console.log(value);\n }\n }\n };\n }\n async run(instance) {\n if (!(instance instanceof WebAssembly.Instance)) {\n throw new Error("Go.run: WebAssembly.Instance expected");\n }\n this._inst = instance;\n this.mem = new DataView(this._inst.exports.mem.buffer);\n this._values = [\n NaN,\n 0,\n null,\n true,\n false,\n globalThis,\n this\n ];\n this._goRefCounts = new Array(this._values.length).fill(Infinity);\n this._ids = /* @__PURE__ */ new Map([\n [0, 1],\n [null, 2],\n [true, 3],\n [false, 4],\n [globalThis, 5],\n [this, 6]\n ]);\n this._idPool = [];\n this.exited = false;\n let offset = 4096;\n const strPtr = (str) => {\n const ptr = offset;\n const bytes = encoder.encode(str + "\\0");\n new Uint8Array(this.mem.buffer, offset, bytes.length).set(bytes);\n offset += bytes.length;\n if (offset % 8 !== 0) {\n offset += 8 - offset % 8;\n }\n return ptr;\n };\n const argc = this.argv.length;\n const argvPtrs = [];\n this.argv.forEach((arg) => {\n argvPtrs.push(strPtr(arg));\n });\n argvPtrs.push(0);\n const keys = Object.keys(this.env).sort();\n keys.forEach((key) => {\n argvPtrs.push(strPtr(`${key}=${this.env[key]}`));\n });\n argvPtrs.push(0);\n const argv = offset;\n argvPtrs.forEach((ptr) => {\n this.mem.setUint32(offset, ptr, true);\n this.mem.setUint32(offset + 4, 0, true);\n offset += 8;\n });\n const wasmMinDataAddr = 4096 + 8192;\n if (offset >= wasmMinDataAddr) {\n throw new Error("total length of command line and environment variables exceeds limit");\n }\n this._inst.exports.run(argc, argv);\n if (this.exited) {\n this._resolveExitPromise();\n }\n await this._exitPromise;\n }\n _resume() {\n if (this.exited) {\n throw new Error("Go program has already exited");\n }\n this._inst.exports.resume();\n if (this.exited) {\n this._resolveExitPromise();\n }\n }\n _makeFuncWrapper(id) {\n const go = this;\n return function() {\n const event = { id, this: this, args: arguments };\n go._pendingEvent = event;\n go._resume();\n return event.result;\n };\n }\n };\n })();\n onmessage = ({ data: wasm }) => {\n let decoder = new TextDecoder();\n let fs = globalThis.fs;\n let stderr = "";\n fs.writeSync = (fd, buffer) => {\n if (fd === 1) {\n postMessage(buffer);\n } else if (fd === 2) {\n stderr += decoder.decode(buffer);\n let parts = stderr.split("\\n");\n if (parts.length > 1)\n console.log(parts.slice(0, -1).join("\\n"));\n stderr = parts[parts.length - 1];\n } else {\n throw new Error("Bad write");\n }\n return buffer.length;\n };\n let stdin = [];\n let resumeStdin;\n let stdinPos = 0;\n onmessage = ({ data }) => {\n if (data.length > 0) {\n stdin.push(data);\n if (resumeStdin)\n resumeStdin();\n }\n };\n fs.read = (fd, buffer, offset, length, position, callback) => {\n if (fd !== 0 || offset !== 0 || length !== buffer.length || position !== null) {\n throw new Error("Bad read");\n }\n if (stdin.length === 0) {\n resumeStdin = () => fs.read(fd, buffer, offset, length, position, callback);\n return;\n }\n let first = stdin[0];\n let count = Math.max(0, Math.min(length, first.length - stdinPos));\n buffer.set(first.subarray(stdinPos, stdinPos + count), offset);\n stdinPos += count;\n if (stdinPos === first.length) {\n stdin.shift();\n stdinPos = 0;\n }\n callback(null, count);\n };\n let go = new globalThis.Go();\n go.argv = ["", `--service=${"0.14.36"}`];\n if (wasm instanceof WebAssembly.Module) {\n WebAssembly.instantiate(wasm, go.importObject).then((instance) => go.run(instance));\n } else {\n WebAssembly.instantiate(wasm, go.importObject).then(({ instance }) => go.run(instance));\n }\n };\n return (m) => onmessage(m);\n })'}(postMessage)`], { type: "text/javascript" });
|
1737
|
+
worker = new Worker(URL.createObjectURL(blob));
|
1738
|
+
} else {
|
1739
|
+
let onmessage = ((postMessage) => {
|
1740
|
+
// Copyright 2018 The Go Authors. All rights reserved.
|
1741
|
+
// Use of this source code is governed by a BSD-style
|
1742
|
+
// license that can be found in the LICENSE file.
|
1743
|
+
let onmessage;
|
1744
|
+
let globalThis = {};
|
1745
|
+
for (let o = self; o; o = Object.getPrototypeOf(o))
|
1746
|
+
for (let k of Object.getOwnPropertyNames(o))
|
1747
|
+
if (!(k in globalThis))
|
1748
|
+
Object.defineProperty(globalThis, k, { get: () => self[k] });
|
1749
|
+
"use strict";
|
1750
|
+
(() => {
|
1751
|
+
const enosys = () => {
|
1752
|
+
const err = new Error("not implemented");
|
1753
|
+
err.code = "ENOSYS";
|
1754
|
+
return err;
|
1755
|
+
};
|
1756
|
+
if (!globalThis.fs) {
|
1757
|
+
let outputBuf = "";
|
1758
|
+
globalThis.fs = {
|
1759
|
+
constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1 },
|
1760
|
+
writeSync(fd, buf) {
|
1761
|
+
outputBuf += decoder.decode(buf);
|
1762
|
+
const nl = outputBuf.lastIndexOf("\n");
|
1763
|
+
if (nl != -1) {
|
1764
|
+
console.log(outputBuf.substr(0, nl));
|
1765
|
+
outputBuf = outputBuf.substr(nl + 1);
|
1766
|
+
}
|
1767
|
+
return buf.length;
|
1768
|
+
},
|
1769
|
+
write(fd, buf, offset, length, position, callback) {
|
1770
|
+
if (offset !== 0 || length !== buf.length || position !== null) {
|
1771
|
+
callback(enosys());
|
1772
|
+
return;
|
1773
|
+
}
|
1774
|
+
const n = this.writeSync(fd, buf);
|
1775
|
+
callback(null, n);
|
1776
|
+
},
|
1777
|
+
chmod(path, mode, callback) {
|
1778
|
+
callback(enosys());
|
1779
|
+
},
|
1780
|
+
chown(path, uid, gid, callback) {
|
1781
|
+
callback(enosys());
|
1782
|
+
},
|
1783
|
+
close(fd, callback) {
|
1784
|
+
callback(enosys());
|
1785
|
+
},
|
1786
|
+
fchmod(fd, mode, callback) {
|
1787
|
+
callback(enosys());
|
1788
|
+
},
|
1789
|
+
fchown(fd, uid, gid, callback) {
|
1790
|
+
callback(enosys());
|
1791
|
+
},
|
1792
|
+
fstat(fd, callback) {
|
1793
|
+
callback(enosys());
|
1794
|
+
},
|
1795
|
+
fsync(fd, callback) {
|
1796
|
+
callback(null);
|
1797
|
+
},
|
1798
|
+
ftruncate(fd, length, callback) {
|
1799
|
+
callback(enosys());
|
1800
|
+
},
|
1801
|
+
lchown(path, uid, gid, callback) {
|
1802
|
+
callback(enosys());
|
1803
|
+
},
|
1804
|
+
link(path, link, callback) {
|
1805
|
+
callback(enosys());
|
1806
|
+
},
|
1807
|
+
lstat(path, callback) {
|
1808
|
+
callback(enosys());
|
1809
|
+
},
|
1810
|
+
mkdir(path, perm, callback) {
|
1811
|
+
callback(enosys());
|
1812
|
+
},
|
1813
|
+
open(path, flags, mode, callback) {
|
1814
|
+
callback(enosys());
|
1815
|
+
},
|
1816
|
+
read(fd, buffer, offset, length, position, callback) {
|
1817
|
+
callback(enosys());
|
1818
|
+
},
|
1819
|
+
readdir(path, callback) {
|
1820
|
+
callback(enosys());
|
1821
|
+
},
|
1822
|
+
readlink(path, callback) {
|
1823
|
+
callback(enosys());
|
1824
|
+
},
|
1825
|
+
rename(from, to, callback) {
|
1826
|
+
callback(enosys());
|
1827
|
+
},
|
1828
|
+
rmdir(path, callback) {
|
1829
|
+
callback(enosys());
|
1830
|
+
},
|
1831
|
+
stat(path, callback) {
|
1832
|
+
callback(enosys());
|
1833
|
+
},
|
1834
|
+
symlink(path, link, callback) {
|
1835
|
+
callback(enosys());
|
1836
|
+
},
|
1837
|
+
truncate(path, length, callback) {
|
1838
|
+
callback(enosys());
|
1839
|
+
},
|
1840
|
+
unlink(path, callback) {
|
1841
|
+
callback(enosys());
|
1842
|
+
},
|
1843
|
+
utimes(path, atime, mtime, callback) {
|
1844
|
+
callback(enosys());
|
1764
1845
|
}
|
1765
|
-
|
1846
|
+
};
|
1847
|
+
}
|
1848
|
+
if (!globalThis.process) {
|
1849
|
+
globalThis.process = {
|
1850
|
+
getuid() {
|
1851
|
+
return -1;
|
1852
|
+
},
|
1853
|
+
getgid() {
|
1854
|
+
return -1;
|
1855
|
+
},
|
1856
|
+
geteuid() {
|
1857
|
+
return -1;
|
1858
|
+
},
|
1859
|
+
getegid() {
|
1860
|
+
return -1;
|
1861
|
+
},
|
1862
|
+
getgroups() {
|
1863
|
+
throw enosys();
|
1864
|
+
},
|
1865
|
+
pid: -1,
|
1866
|
+
ppid: -1,
|
1867
|
+
umask() {
|
1868
|
+
throw enosys();
|
1869
|
+
},
|
1870
|
+
cwd() {
|
1871
|
+
throw enosys();
|
1872
|
+
},
|
1873
|
+
chdir() {
|
1874
|
+
throw enosys();
|
1875
|
+
}
|
1876
|
+
};
|
1877
|
+
}
|
1878
|
+
if (!globalThis.crypto) {
|
1879
|
+
throw new Error("globalThis.crypto is not available, polyfill required (crypto.getRandomValues only)");
|
1880
|
+
}
|
1881
|
+
if (!globalThis.performance) {
|
1882
|
+
throw new Error("globalThis.performance is not available, polyfill required (performance.now only)");
|
1883
|
+
}
|
1884
|
+
if (!globalThis.TextEncoder) {
|
1885
|
+
throw new Error("globalThis.TextEncoder is not available, polyfill required");
|
1886
|
+
}
|
1887
|
+
if (!globalThis.TextDecoder) {
|
1888
|
+
throw new Error("globalThis.TextDecoder is not available, polyfill required");
|
1889
|
+
}
|
1890
|
+
const encoder = new TextEncoder("utf-8");
|
1891
|
+
const decoder = new TextDecoder("utf-8");
|
1892
|
+
globalThis.Go = class {
|
1893
|
+
constructor() {
|
1894
|
+
this.argv = ["js"];
|
1895
|
+
this.env = {};
|
1896
|
+
this.exit = (code) => {
|
1897
|
+
if (code !== 0) {
|
1898
|
+
console.warn("exit code:", code);
|
1899
|
+
}
|
1900
|
+
};
|
1901
|
+
this._exitPromise = new Promise((resolve) => {
|
1902
|
+
this._resolveExitPromise = resolve;
|
1903
|
+
});
|
1904
|
+
this._pendingEvent = null;
|
1905
|
+
this._scheduledTimeouts = /* @__PURE__ */ new Map();
|
1906
|
+
this._nextCallbackTimeoutID = 1;
|
1907
|
+
const setInt64 = (addr, v) => {
|
1908
|
+
this.mem.setUint32(addr + 0, v, true);
|
1909
|
+
this.mem.setUint32(addr + 4, Math.floor(v / 4294967296), true);
|
1910
|
+
};
|
1911
|
+
const getInt64 = (addr) => {
|
1912
|
+
const low = this.mem.getUint32(addr + 0, true);
|
1913
|
+
const high = this.mem.getInt32(addr + 4, true);
|
1914
|
+
return low + high * 4294967296;
|
1915
|
+
};
|
1916
|
+
const loadValue = (addr) => {
|
1917
|
+
const f = this.mem.getFloat64(addr, true);
|
1918
|
+
if (f === 0) {
|
1919
|
+
return void 0;
|
1920
|
+
}
|
1921
|
+
if (!isNaN(f)) {
|
1922
|
+
return f;
|
1923
|
+
}
|
1924
|
+
const id = this.mem.getUint32(addr, true);
|
1925
|
+
return this._values[id];
|
1926
|
+
};
|
1927
|
+
const storeValue = (addr, v) => {
|
1928
|
+
const nanHead = 2146959360;
|
1929
|
+
if (typeof v === "number" && v !== 0) {
|
1930
|
+
if (isNaN(v)) {
|
1931
|
+
this.mem.setUint32(addr + 4, nanHead, true);
|
1932
|
+
this.mem.setUint32(addr, 0, true);
|
1933
|
+
return;
|
1934
|
+
}
|
1935
|
+
this.mem.setFloat64(addr, v, true);
|
1936
|
+
return;
|
1937
|
+
}
|
1938
|
+
if (v === void 0) {
|
1939
|
+
this.mem.setFloat64(addr, 0, true);
|
1940
|
+
return;
|
1941
|
+
}
|
1942
|
+
let id = this._ids.get(v);
|
1943
|
+
if (id === void 0) {
|
1944
|
+
id = this._idPool.pop();
|
1945
|
+
if (id === void 0) {
|
1946
|
+
id = this._values.length;
|
1947
|
+
}
|
1948
|
+
this._values[id] = v;
|
1949
|
+
this._goRefCounts[id] = 0;
|
1950
|
+
this._ids.set(v, id);
|
1951
|
+
}
|
1952
|
+
this._goRefCounts[id]++;
|
1953
|
+
let typeFlag = 0;
|
1954
|
+
switch (typeof v) {
|
1955
|
+
case "object":
|
1956
|
+
if (v !== null) {
|
1957
|
+
typeFlag = 1;
|
1958
|
+
}
|
1959
|
+
break;
|
1960
|
+
case "string":
|
1961
|
+
typeFlag = 2;
|
1962
|
+
break;
|
1963
|
+
case "symbol":
|
1964
|
+
typeFlag = 3;
|
1965
|
+
break;
|
1966
|
+
case "function":
|
1967
|
+
typeFlag = 4;
|
1968
|
+
break;
|
1969
|
+
}
|
1970
|
+
this.mem.setUint32(addr + 4, nanHead | typeFlag, true);
|
1971
|
+
this.mem.setUint32(addr, id, true);
|
1972
|
+
};
|
1973
|
+
const loadSlice = (addr) => {
|
1974
|
+
const array = getInt64(addr + 0);
|
1975
|
+
const len = getInt64(addr + 8);
|
1976
|
+
return new Uint8Array(this._inst.exports.mem.buffer, array, len);
|
1977
|
+
};
|
1978
|
+
const loadSliceOfValues = (addr) => {
|
1979
|
+
const array = getInt64(addr + 0);
|
1980
|
+
const len = getInt64(addr + 8);
|
1981
|
+
const a = new Array(len);
|
1982
|
+
for (let i = 0; i < len; i++) {
|
1983
|
+
a[i] = loadValue(array + i * 8);
|
1984
|
+
}
|
1985
|
+
return a;
|
1986
|
+
};
|
1987
|
+
const loadString = (addr) => {
|
1988
|
+
const saddr = getInt64(addr + 0);
|
1989
|
+
const len = getInt64(addr + 8);
|
1990
|
+
return decoder.decode(new DataView(this._inst.exports.mem.buffer, saddr, len));
|
1991
|
+
};
|
1992
|
+
const timeOrigin = Date.now() - performance.now();
|
1993
|
+
this.importObject = {
|
1994
|
+
go: {
|
1995
|
+
"runtime.wasmExit": (sp) => {
|
1996
|
+
sp >>>= 0;
|
1997
|
+
const code = this.mem.getInt32(sp + 8, true);
|
1998
|
+
this.exited = true;
|
1999
|
+
delete this._inst;
|
2000
|
+
delete this._values;
|
2001
|
+
delete this._goRefCounts;
|
2002
|
+
delete this._ids;
|
2003
|
+
delete this._idPool;
|
2004
|
+
this.exit(code);
|
2005
|
+
},
|
2006
|
+
"runtime.wasmWrite": (sp) => {
|
2007
|
+
sp >>>= 0;
|
2008
|
+
const fd = getInt64(sp + 8);
|
2009
|
+
const p = getInt64(sp + 16);
|
2010
|
+
const n = this.mem.getInt32(sp + 24, true);
|
2011
|
+
globalThis.fs.writeSync(fd, new Uint8Array(this._inst.exports.mem.buffer, p, n));
|
2012
|
+
},
|
2013
|
+
"runtime.resetMemoryDataView": (sp) => {
|
2014
|
+
sp >>>= 0;
|
2015
|
+
this.mem = new DataView(this._inst.exports.mem.buffer);
|
2016
|
+
},
|
2017
|
+
"runtime.nanotime1": (sp) => {
|
2018
|
+
sp >>>= 0;
|
2019
|
+
setInt64(sp + 8, (timeOrigin + performance.now()) * 1e6);
|
2020
|
+
},
|
2021
|
+
"runtime.walltime": (sp) => {
|
2022
|
+
sp >>>= 0;
|
2023
|
+
const msec = new Date().getTime();
|
2024
|
+
setInt64(sp + 8, msec / 1e3);
|
2025
|
+
this.mem.setInt32(sp + 16, msec % 1e3 * 1e6, true);
|
2026
|
+
},
|
2027
|
+
"runtime.scheduleTimeoutEvent": (sp) => {
|
2028
|
+
sp >>>= 0;
|
2029
|
+
const id = this._nextCallbackTimeoutID;
|
2030
|
+
this._nextCallbackTimeoutID++;
|
2031
|
+
this._scheduledTimeouts.set(id, setTimeout(() => {
|
2032
|
+
this._resume();
|
2033
|
+
while (this._scheduledTimeouts.has(id)) {
|
2034
|
+
console.warn("scheduleTimeoutEvent: missed timeout event");
|
2035
|
+
this._resume();
|
2036
|
+
}
|
2037
|
+
}, getInt64(sp + 8) + 1));
|
2038
|
+
this.mem.setInt32(sp + 16, id, true);
|
2039
|
+
},
|
2040
|
+
"runtime.clearTimeoutEvent": (sp) => {
|
2041
|
+
sp >>>= 0;
|
2042
|
+
const id = this.mem.getInt32(sp + 8, true);
|
2043
|
+
clearTimeout(this._scheduledTimeouts.get(id));
|
2044
|
+
this._scheduledTimeouts.delete(id);
|
2045
|
+
},
|
2046
|
+
"runtime.getRandomData": (sp) => {
|
2047
|
+
sp >>>= 0;
|
2048
|
+
crypto.getRandomValues(loadSlice(sp + 8));
|
2049
|
+
},
|
2050
|
+
"syscall/js.finalizeRef": (sp) => {
|
2051
|
+
sp >>>= 0;
|
2052
|
+
const id = this.mem.getUint32(sp + 8, true);
|
2053
|
+
this._goRefCounts[id]--;
|
2054
|
+
if (this._goRefCounts[id] === 0) {
|
2055
|
+
const v = this._values[id];
|
2056
|
+
this._values[id] = null;
|
2057
|
+
this._ids.delete(v);
|
2058
|
+
this._idPool.push(id);
|
2059
|
+
}
|
2060
|
+
},
|
2061
|
+
"syscall/js.stringVal": (sp) => {
|
2062
|
+
sp >>>= 0;
|
2063
|
+
storeValue(sp + 24, loadString(sp + 8));
|
2064
|
+
},
|
2065
|
+
"syscall/js.valueGet": (sp) => {
|
2066
|
+
sp >>>= 0;
|
2067
|
+
const result = Reflect.get(loadValue(sp + 8), loadString(sp + 16));
|
2068
|
+
sp = this._inst.exports.getsp() >>> 0;
|
2069
|
+
storeValue(sp + 32, result);
|
2070
|
+
},
|
2071
|
+
"syscall/js.valueSet": (sp) => {
|
2072
|
+
sp >>>= 0;
|
2073
|
+
Reflect.set(loadValue(sp + 8), loadString(sp + 16), loadValue(sp + 32));
|
2074
|
+
},
|
2075
|
+
"syscall/js.valueDelete": (sp) => {
|
2076
|
+
sp >>>= 0;
|
2077
|
+
Reflect.deleteProperty(loadValue(sp + 8), loadString(sp + 16));
|
2078
|
+
},
|
2079
|
+
"syscall/js.valueIndex": (sp) => {
|
2080
|
+
sp >>>= 0;
|
2081
|
+
storeValue(sp + 24, Reflect.get(loadValue(sp + 8), getInt64(sp + 16)));
|
2082
|
+
},
|
2083
|
+
"syscall/js.valueSetIndex": (sp) => {
|
2084
|
+
sp >>>= 0;
|
2085
|
+
Reflect.set(loadValue(sp + 8), getInt64(sp + 16), loadValue(sp + 24));
|
2086
|
+
},
|
2087
|
+
"syscall/js.valueCall": (sp) => {
|
2088
|
+
sp >>>= 0;
|
2089
|
+
try {
|
2090
|
+
const v = loadValue(sp + 8);
|
2091
|
+
const m = Reflect.get(v, loadString(sp + 16));
|
2092
|
+
const args = loadSliceOfValues(sp + 32);
|
2093
|
+
const result = Reflect.apply(m, v, args);
|
2094
|
+
sp = this._inst.exports.getsp() >>> 0;
|
2095
|
+
storeValue(sp + 56, result);
|
2096
|
+
this.mem.setUint8(sp + 64, 1);
|
2097
|
+
} catch (err) {
|
2098
|
+
sp = this._inst.exports.getsp() >>> 0;
|
2099
|
+
storeValue(sp + 56, err);
|
2100
|
+
this.mem.setUint8(sp + 64, 0);
|
2101
|
+
}
|
2102
|
+
},
|
2103
|
+
"syscall/js.valueInvoke": (sp) => {
|
2104
|
+
sp >>>= 0;
|
2105
|
+
try {
|
2106
|
+
const v = loadValue(sp + 8);
|
2107
|
+
const args = loadSliceOfValues(sp + 16);
|
2108
|
+
const result = Reflect.apply(v, void 0, args);
|
2109
|
+
sp = this._inst.exports.getsp() >>> 0;
|
2110
|
+
storeValue(sp + 40, result);
|
2111
|
+
this.mem.setUint8(sp + 48, 1);
|
2112
|
+
} catch (err) {
|
2113
|
+
sp = this._inst.exports.getsp() >>> 0;
|
2114
|
+
storeValue(sp + 40, err);
|
2115
|
+
this.mem.setUint8(sp + 48, 0);
|
2116
|
+
}
|
2117
|
+
},
|
2118
|
+
"syscall/js.valueNew": (sp) => {
|
2119
|
+
sp >>>= 0;
|
2120
|
+
try {
|
2121
|
+
const v = loadValue(sp + 8);
|
2122
|
+
const args = loadSliceOfValues(sp + 16);
|
2123
|
+
const result = Reflect.construct(v, args);
|
2124
|
+
sp = this._inst.exports.getsp() >>> 0;
|
2125
|
+
storeValue(sp + 40, result);
|
2126
|
+
this.mem.setUint8(sp + 48, 1);
|
2127
|
+
} catch (err) {
|
2128
|
+
sp = this._inst.exports.getsp() >>> 0;
|
2129
|
+
storeValue(sp + 40, err);
|
2130
|
+
this.mem.setUint8(sp + 48, 0);
|
2131
|
+
}
|
2132
|
+
},
|
2133
|
+
"syscall/js.valueLength": (sp) => {
|
2134
|
+
sp >>>= 0;
|
2135
|
+
setInt64(sp + 16, parseInt(loadValue(sp + 8).length));
|
2136
|
+
},
|
2137
|
+
"syscall/js.valuePrepareString": (sp) => {
|
2138
|
+
sp >>>= 0;
|
2139
|
+
const str = encoder.encode(String(loadValue(sp + 8)));
|
2140
|
+
storeValue(sp + 16, str);
|
2141
|
+
setInt64(sp + 24, str.length);
|
2142
|
+
},
|
2143
|
+
"syscall/js.valueLoadString": (sp) => {
|
2144
|
+
sp >>>= 0;
|
2145
|
+
const str = loadValue(sp + 8);
|
2146
|
+
loadSlice(sp + 16).set(str);
|
2147
|
+
},
|
2148
|
+
"syscall/js.valueInstanceOf": (sp) => {
|
2149
|
+
sp >>>= 0;
|
2150
|
+
this.mem.setUint8(sp + 24, loadValue(sp + 8) instanceof loadValue(sp + 16) ? 1 : 0);
|
2151
|
+
},
|
2152
|
+
"syscall/js.copyBytesToGo": (sp) => {
|
2153
|
+
sp >>>= 0;
|
2154
|
+
const dst = loadSlice(sp + 8);
|
2155
|
+
const src = loadValue(sp + 32);
|
2156
|
+
if (!(src instanceof Uint8Array || src instanceof Uint8ClampedArray)) {
|
2157
|
+
this.mem.setUint8(sp + 48, 0);
|
2158
|
+
return;
|
2159
|
+
}
|
2160
|
+
const toCopy = src.subarray(0, dst.length);
|
2161
|
+
dst.set(toCopy);
|
2162
|
+
setInt64(sp + 40, toCopy.length);
|
2163
|
+
this.mem.setUint8(sp + 48, 1);
|
2164
|
+
},
|
2165
|
+
"syscall/js.copyBytesToJS": (sp) => {
|
2166
|
+
sp >>>= 0;
|
2167
|
+
const dst = loadValue(sp + 8);
|
2168
|
+
const src = loadSlice(sp + 16);
|
2169
|
+
if (!(dst instanceof Uint8Array || dst instanceof Uint8ClampedArray)) {
|
2170
|
+
this.mem.setUint8(sp + 48, 0);
|
2171
|
+
return;
|
2172
|
+
}
|
2173
|
+
const toCopy = src.subarray(0, dst.length);
|
2174
|
+
dst.set(toCopy);
|
2175
|
+
setInt64(sp + 40, toCopy.length);
|
2176
|
+
this.mem.setUint8(sp + 48, 1);
|
2177
|
+
},
|
2178
|
+
"debug": (value) => {
|
2179
|
+
console.log(value);
|
2180
|
+
}
|
2181
|
+
}
|
2182
|
+
};
|
1766
2183
|
}
|
1767
|
-
|
1768
|
-
|
1769
|
-
|
1770
|
-
} catch (err) {
|
1771
|
-
callback(err, 0, null);
|
2184
|
+
async run(instance) {
|
2185
|
+
if (!(instance instanceof WebAssembly.Instance)) {
|
2186
|
+
throw new Error("Go.run: WebAssembly.Instance expected");
|
1772
2187
|
}
|
2188
|
+
this._inst = instance;
|
2189
|
+
this.mem = new DataView(this._inst.exports.mem.buffer);
|
2190
|
+
this._values = [
|
2191
|
+
NaN,
|
2192
|
+
0,
|
2193
|
+
null,
|
2194
|
+
true,
|
2195
|
+
false,
|
2196
|
+
globalThis,
|
2197
|
+
this
|
2198
|
+
];
|
2199
|
+
this._goRefCounts = new Array(this._values.length).fill(Infinity);
|
2200
|
+
this._ids = /* @__PURE__ */ new Map([
|
2201
|
+
[0, 1],
|
2202
|
+
[null, 2],
|
2203
|
+
[true, 3],
|
2204
|
+
[false, 4],
|
2205
|
+
[globalThis, 5],
|
2206
|
+
[this, 6]
|
2207
|
+
]);
|
2208
|
+
this._idPool = [];
|
2209
|
+
this.exited = false;
|
2210
|
+
let offset = 4096;
|
2211
|
+
const strPtr = (str) => {
|
2212
|
+
const ptr = offset;
|
2213
|
+
const bytes = encoder.encode(str + "\0");
|
2214
|
+
new Uint8Array(this.mem.buffer, offset, bytes.length).set(bytes);
|
2215
|
+
offset += bytes.length;
|
2216
|
+
if (offset % 8 !== 0) {
|
2217
|
+
offset += 8 - offset % 8;
|
2218
|
+
}
|
2219
|
+
return ptr;
|
2220
|
+
};
|
2221
|
+
const argc = this.argv.length;
|
2222
|
+
const argvPtrs = [];
|
2223
|
+
this.argv.forEach((arg) => {
|
2224
|
+
argvPtrs.push(strPtr(arg));
|
2225
|
+
});
|
2226
|
+
argvPtrs.push(0);
|
2227
|
+
const keys = Object.keys(this.env).sort();
|
2228
|
+
keys.forEach((key) => {
|
2229
|
+
argvPtrs.push(strPtr(`${key}=${this.env[key]}`));
|
2230
|
+
});
|
2231
|
+
argvPtrs.push(0);
|
2232
|
+
const argv = offset;
|
2233
|
+
argvPtrs.forEach((ptr) => {
|
2234
|
+
this.mem.setUint32(offset, ptr, true);
|
2235
|
+
this.mem.setUint32(offset + 4, 0, true);
|
2236
|
+
offset += 8;
|
2237
|
+
});
|
2238
|
+
const wasmMinDataAddr = 4096 + 8192;
|
2239
|
+
if (offset >= wasmMinDataAddr) {
|
2240
|
+
throw new Error("total length of command line and environment variables exceeds limit");
|
2241
|
+
}
|
2242
|
+
this._inst.exports.run(argc, argv);
|
2243
|
+
if (this.exited) {
|
2244
|
+
this._resolveExitPromise();
|
2245
|
+
}
|
2246
|
+
await this._exitPromise;
|
2247
|
+
}
|
2248
|
+
_resume() {
|
2249
|
+
if (this.exited) {
|
2250
|
+
throw new Error("Go program has already exited");
|
2251
|
+
}
|
2252
|
+
this._inst.exports.resume();
|
2253
|
+
if (this.exited) {
|
2254
|
+
this._resolveExitPromise();
|
2255
|
+
}
|
2256
|
+
}
|
2257
|
+
_makeFuncWrapper(id) {
|
2258
|
+
const go = this;
|
2259
|
+
return function() {
|
2260
|
+
const event = { id, this: this, args: arguments };
|
2261
|
+
go._pendingEvent = event;
|
2262
|
+
go._resume();
|
2263
|
+
return event.result;
|
2264
|
+
};
|
2265
|
+
}
|
2266
|
+
};
|
2267
|
+
})();
|
2268
|
+
onmessage = ({ data: wasm }) => {
|
2269
|
+
let decoder = new TextDecoder();
|
2270
|
+
let fs = globalThis.fs;
|
2271
|
+
let stderr = "";
|
2272
|
+
fs.writeSync = (fd, buffer) => {
|
2273
|
+
if (fd === 1) {
|
2274
|
+
postMessage(buffer);
|
2275
|
+
} else if (fd === 2) {
|
2276
|
+
stderr += decoder.decode(buffer);
|
2277
|
+
let parts = stderr.split("\n");
|
2278
|
+
if (parts.length > 1)
|
2279
|
+
console.log(parts.slice(0, -1).join("\n"));
|
2280
|
+
stderr = parts[parts.length - 1];
|
2281
|
+
} else {
|
2282
|
+
throw new Error("Bad write");
|
2283
|
+
}
|
2284
|
+
return buffer.length;
|
2285
|
+
};
|
2286
|
+
let stdin = [];
|
2287
|
+
let resumeStdin;
|
2288
|
+
let stdinPos = 0;
|
2289
|
+
onmessage = ({ data }) => {
|
2290
|
+
if (data.length > 0) {
|
2291
|
+
stdin.push(data);
|
2292
|
+
if (resumeStdin)
|
2293
|
+
resumeStdin();
|
2294
|
+
}
|
2295
|
+
};
|
2296
|
+
fs.read = (fd, buffer, offset, length, position, callback) => {
|
2297
|
+
if (fd !== 0 || offset !== 0 || length !== buffer.length || position !== null) {
|
2298
|
+
throw new Error("Bad read");
|
2299
|
+
}
|
2300
|
+
if (stdin.length === 0) {
|
2301
|
+
resumeStdin = () => fs.read(fd, buffer, offset, length, position, callback);
|
1773
2302
|
return;
|
1774
2303
|
}
|
2304
|
+
let first = stdin[0];
|
2305
|
+
let count = Math.max(0, Math.min(length, first.length - stdinPos));
|
2306
|
+
buffer.set(first.subarray(stdinPos, stdinPos + count), offset);
|
2307
|
+
stdinPos += count;
|
2308
|
+
if (stdinPos === first.length) {
|
2309
|
+
stdin.shift();
|
2310
|
+
stdinPos = 0;
|
2311
|
+
}
|
2312
|
+
callback(null, count);
|
2313
|
+
};
|
2314
|
+
let go = new globalThis.Go();
|
2315
|
+
go.argv = ["", `--service=${"0.14.36"}`];
|
2316
|
+
if (wasm instanceof WebAssembly.Module) {
|
2317
|
+
WebAssembly.instantiate(wasm, go.importObject).then((instance) => go.run(instance));
|
2318
|
+
} else {
|
2319
|
+
WebAssembly.instantiate(wasm, go.importObject).then(({ instance }) => go.run(instance));
|
1775
2320
|
}
|
1776
|
-
|
1777
|
-
|
1778
|
-
});
|
1779
|
-
|
1780
|
-
}
|
1781
|
-
}
|
1782
|
-
|
1783
|
-
const enosys = () => {
|
1784
|
-
const err = new Error("not implemented");
|
1785
|
-
err.code = "ENOSYS";
|
1786
|
-
return err;
|
1787
|
-
};
|
1788
|
-
|
1789
|
-
if (!global.fs) {
|
1790
|
-
let outputBuf = "";
|
1791
|
-
global.fs = {
|
1792
|
-
constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1 }, // unused
|
1793
|
-
writeSync(fd, buf) {
|
1794
|
-
outputBuf += decoder.decode(buf);
|
1795
|
-
const nl = outputBuf.lastIndexOf("\\n");
|
1796
|
-
if (nl != -1) {
|
1797
|
-
console.log(outputBuf.substr(0, nl));
|
1798
|
-
outputBuf = outputBuf.substr(nl + 1);
|
1799
|
-
}
|
1800
|
-
return buf.length;
|
1801
|
-
},
|
1802
|
-
write(fd, buf, offset, length, position, callback) {
|
1803
|
-
if (offset !== 0 || length !== buf.length || position !== null) {
|
1804
|
-
callback(enosys());
|
1805
|
-
return;
|
1806
|
-
}
|
1807
|
-
const n = this.writeSync(fd, buf);
|
1808
|
-
callback(null, n);
|
1809
|
-
},
|
1810
|
-
chmod(path, mode, callback) { callback(enosys()); },
|
1811
|
-
chown(path, uid, gid, callback) { callback(enosys()); },
|
1812
|
-
close(fd, callback) { callback(enosys()); },
|
1813
|
-
fchmod(fd, mode, callback) { callback(enosys()); },
|
1814
|
-
fchown(fd, uid, gid, callback) { callback(enosys()); },
|
1815
|
-
fstat(fd, callback) { callback(enosys()); },
|
1816
|
-
fsync(fd, callback) { callback(null); },
|
1817
|
-
ftruncate(fd, length, callback) { callback(enosys()); },
|
1818
|
-
lchown(path, uid, gid, callback) { callback(enosys()); },
|
1819
|
-
link(path, link, callback) { callback(enosys()); },
|
1820
|
-
lstat(path, callback) { callback(enosys()); },
|
1821
|
-
mkdir(path, perm, callback) { callback(enosys()); },
|
1822
|
-
open(path, flags, mode, callback) { callback(enosys()); },
|
1823
|
-
read(fd, buffer, offset, length, position, callback) { callback(enosys()); },
|
1824
|
-
readdir(path, callback) { callback(enosys()); },
|
1825
|
-
readlink(path, callback) { callback(enosys()); },
|
1826
|
-
rename(from, to, callback) { callback(enosys()); },
|
1827
|
-
rmdir(path, callback) { callback(enosys()); },
|
1828
|
-
stat(path, callback) { callback(enosys()); },
|
1829
|
-
symlink(path, link, callback) { callback(enosys()); },
|
1830
|
-
truncate(path, length, callback) { callback(enosys()); },
|
1831
|
-
unlink(path, callback) { callback(enosys()); },
|
1832
|
-
utimes(path, atime, mtime, callback) { callback(enosys()); },
|
1833
|
-
};
|
1834
|
-
}
|
1835
|
-
|
1836
|
-
if (!global.process) {
|
1837
|
-
global.process = {
|
1838
|
-
getuid() { return -1; },
|
1839
|
-
getgid() { return -1; },
|
1840
|
-
geteuid() { return -1; },
|
1841
|
-
getegid() { return -1; },
|
1842
|
-
getgroups() { throw enosys(); },
|
1843
|
-
pid: -1,
|
1844
|
-
ppid: -1,
|
1845
|
-
umask() { throw enosys(); },
|
1846
|
-
cwd() { throw enosys(); },
|
1847
|
-
chdir() { throw enosys(); },
|
1848
|
-
}
|
1849
|
-
}
|
1850
|
-
|
1851
|
-
if (!global.crypto && global.require) {
|
1852
|
-
const nodeCrypto = require("crypto");
|
1853
|
-
global.crypto = {
|
1854
|
-
getRandomValues(b) {
|
1855
|
-
nodeCrypto.randomFillSync(b);
|
1856
|
-
},
|
1857
|
-
};
|
1858
|
-
}
|
1859
|
-
if (!global.crypto) {
|
1860
|
-
throw new Error("global.crypto is not available, polyfill required (getRandomValues only)");
|
1861
|
-
}
|
1862
|
-
|
1863
|
-
if (!global.performance) {
|
1864
|
-
global.performance = {
|
1865
|
-
now() {
|
1866
|
-
const [sec, nsec] = process.hrtime();
|
1867
|
-
return sec * 1000 + nsec / 1000000;
|
1868
|
-
},
|
1869
|
-
};
|
1870
|
-
}
|
1871
|
-
|
1872
|
-
if (!global.TextEncoder && global.require) {
|
1873
|
-
global.TextEncoder = require("util").TextEncoder;
|
1874
|
-
}
|
1875
|
-
if (!global.TextEncoder) {
|
1876
|
-
throw new Error("global.TextEncoder is not available, polyfill required");
|
1877
|
-
}
|
1878
|
-
|
1879
|
-
if (!global.TextDecoder && global.require) {
|
1880
|
-
global.TextDecoder = require("util").TextDecoder;
|
1881
|
-
}
|
1882
|
-
if (!global.TextDecoder) {
|
1883
|
-
throw new Error("global.TextDecoder is not available, polyfill required");
|
1884
|
-
}
|
1885
|
-
|
1886
|
-
|
1887
|
-
// Make sure Go sees the shadowed "fs" global
|
1888
|
-
const { fs } = global;
|
1889
|
-
|
1890
|
-
|
1891
|
-
const encoder = new TextEncoder("utf-8");
|
1892
|
-
const decoder = new TextDecoder("utf-8");
|
1893
|
-
|
1894
|
-
global.Go = class {
|
1895
|
-
constructor() {
|
1896
|
-
this.argv = ["js"];
|
1897
|
-
this.env = {};
|
1898
|
-
this.exit = (code) => {
|
1899
|
-
if (code !== 0) {
|
1900
|
-
console.warn("exit code:", code);
|
1901
|
-
}
|
1902
|
-
};
|
1903
|
-
this._exitPromise = new Promise((resolve) => {
|
1904
|
-
this._resolveExitPromise = resolve;
|
1905
|
-
});
|
1906
|
-
this._pendingEvent = null;
|
1907
|
-
this._scheduledTimeouts = new Map();
|
1908
|
-
this._nextCallbackTimeoutID = 1;
|
1909
|
-
|
1910
|
-
const setInt64 = (addr, v) => {
|
1911
|
-
this.mem.setUint32(addr + 0, v, true);
|
1912
|
-
this.mem.setUint32(addr + 4, Math.floor(v / 4294967296), true);
|
1913
|
-
}
|
1914
|
-
|
1915
|
-
const getInt64 = (addr) => {
|
1916
|
-
const low = this.mem.getUint32(addr + 0, true);
|
1917
|
-
const high = this.mem.getInt32(addr + 4, true);
|
1918
|
-
return low + high * 4294967296;
|
1919
|
-
}
|
1920
|
-
|
1921
|
-
const loadValue = (addr) => {
|
1922
|
-
const f = this.mem.getFloat64(addr, true);
|
1923
|
-
if (f === 0) {
|
1924
|
-
return undefined;
|
1925
|
-
}
|
1926
|
-
if (!isNaN(f)) {
|
1927
|
-
return f;
|
1928
|
-
}
|
1929
|
-
|
1930
|
-
const id = this.mem.getUint32(addr, true);
|
1931
|
-
return this._values[id];
|
1932
|
-
}
|
1933
|
-
|
1934
|
-
const storeValue = (addr, v) => {
|
1935
|
-
const nanHead = 0x7FF80000;
|
1936
|
-
|
1937
|
-
if (typeof v === "number" && v !== 0) {
|
1938
|
-
if (isNaN(v)) {
|
1939
|
-
this.mem.setUint32(addr + 4, nanHead, true);
|
1940
|
-
this.mem.setUint32(addr, 0, true);
|
1941
|
-
return;
|
1942
|
-
}
|
1943
|
-
this.mem.setFloat64(addr, v, true);
|
1944
|
-
return;
|
1945
|
-
}
|
1946
|
-
|
1947
|
-
if (v === undefined) {
|
1948
|
-
this.mem.setFloat64(addr, 0, true);
|
1949
|
-
return;
|
1950
|
-
}
|
1951
|
-
|
1952
|
-
let id = this._ids.get(v);
|
1953
|
-
if (id === undefined) {
|
1954
|
-
id = this._idPool.pop();
|
1955
|
-
if (id === undefined) {
|
1956
|
-
id = this._values.length;
|
1957
|
-
}
|
1958
|
-
this._values[id] = v;
|
1959
|
-
this._goRefCounts[id] = 0;
|
1960
|
-
this._ids.set(v, id);
|
1961
|
-
}
|
1962
|
-
this._goRefCounts[id]++;
|
1963
|
-
let typeFlag = 0;
|
1964
|
-
switch (typeof v) {
|
1965
|
-
case "object":
|
1966
|
-
if (v !== null) {
|
1967
|
-
typeFlag = 1;
|
1968
|
-
}
|
1969
|
-
break;
|
1970
|
-
case "string":
|
1971
|
-
typeFlag = 2;
|
1972
|
-
break;
|
1973
|
-
case "symbol":
|
1974
|
-
typeFlag = 3;
|
1975
|
-
break;
|
1976
|
-
case "function":
|
1977
|
-
typeFlag = 4;
|
1978
|
-
break;
|
1979
|
-
}
|
1980
|
-
this.mem.setUint32(addr + 4, nanHead | typeFlag, true);
|
1981
|
-
this.mem.setUint32(addr, id, true);
|
1982
|
-
}
|
1983
|
-
|
1984
|
-
const loadSlice = (addr) => {
|
1985
|
-
const array = getInt64(addr + 0);
|
1986
|
-
const len = getInt64(addr + 8);
|
1987
|
-
return new Uint8Array(this._inst.exports.mem.buffer, array, len);
|
1988
|
-
}
|
1989
|
-
|
1990
|
-
const loadSliceOfValues = (addr) => {
|
1991
|
-
const array = getInt64(addr + 0);
|
1992
|
-
const len = getInt64(addr + 8);
|
1993
|
-
const a = new Array(len);
|
1994
|
-
for (let i = 0; i < len; i++) {
|
1995
|
-
a[i] = loadValue(array + i * 8);
|
1996
|
-
}
|
1997
|
-
return a;
|
1998
|
-
}
|
1999
|
-
|
2000
|
-
const loadString = (addr) => {
|
2001
|
-
const saddr = getInt64(addr + 0);
|
2002
|
-
const len = getInt64(addr + 8);
|
2003
|
-
return decoder.decode(new DataView(this._inst.exports.mem.buffer, saddr, len));
|
2004
|
-
}
|
2005
|
-
|
2006
|
-
const timeOrigin = Date.now() - performance.now();
|
2007
|
-
this.importObject = {
|
2008
|
-
go: {
|
2009
|
-
// Go's SP does not change as long as no Go code is running. Some operations (e.g. calls, getters and setters)
|
2010
|
-
// may synchronously trigger a Go event handler. This makes Go code get executed in the middle of the imported
|
2011
|
-
// function. A goroutine can switch to a new stack if the current stack is too small (see morestack function).
|
2012
|
-
// This changes the SP, thus we have to update the SP used by the imported function.
|
2013
|
-
|
2014
|
-
// func wasmExit(code int32)
|
2015
|
-
"runtime.wasmExit": (sp) => {
|
2016
|
-
sp >>>= 0;
|
2017
|
-
const code = this.mem.getInt32(sp + 8, true);
|
2018
|
-
this.exited = true;
|
2019
|
-
delete this._inst;
|
2020
|
-
delete this._values;
|
2021
|
-
delete this._goRefCounts;
|
2022
|
-
delete this._ids;
|
2023
|
-
delete this._idPool;
|
2024
|
-
this.exit(code);
|
2025
|
-
},
|
2026
|
-
|
2027
|
-
// func wasmWrite(fd uintptr, p unsafe.Pointer, n int32)
|
2028
|
-
"runtime.wasmWrite": (sp) => {
|
2029
|
-
sp >>>= 0;
|
2030
|
-
const fd = getInt64(sp + 8);
|
2031
|
-
const p = getInt64(sp + 16);
|
2032
|
-
const n = this.mem.getInt32(sp + 24, true);
|
2033
|
-
fs.writeSync(fd, new Uint8Array(this._inst.exports.mem.buffer, p, n));
|
2034
|
-
},
|
2035
|
-
|
2036
|
-
// func resetMemoryDataView()
|
2037
|
-
"runtime.resetMemoryDataView": (sp) => {
|
2038
|
-
sp >>>= 0;
|
2039
|
-
this.mem = new DataView(this._inst.exports.mem.buffer);
|
2040
|
-
},
|
2041
|
-
|
2042
|
-
// func nanotime1() int64
|
2043
|
-
"runtime.nanotime1": (sp) => {
|
2044
|
-
sp >>>= 0;
|
2045
|
-
setInt64(sp + 8, (timeOrigin + performance.now()) * 1000000);
|
2046
|
-
},
|
2047
|
-
|
2048
|
-
// func walltime() (sec int64, nsec int32)
|
2049
|
-
"runtime.walltime": (sp) => {
|
2050
|
-
sp >>>= 0;
|
2051
|
-
const msec = (new Date).getTime();
|
2052
|
-
setInt64(sp + 8, msec / 1000);
|
2053
|
-
this.mem.setInt32(sp + 16, (msec % 1000) * 1000000, true);
|
2054
|
-
},
|
2055
|
-
|
2056
|
-
// func scheduleTimeoutEvent(delay int64) int32
|
2057
|
-
"runtime.scheduleTimeoutEvent": (sp) => {
|
2058
|
-
sp >>>= 0;
|
2059
|
-
const id = this._nextCallbackTimeoutID;
|
2060
|
-
this._nextCallbackTimeoutID++;
|
2061
|
-
this._scheduledTimeouts.set(id, setTimeout(
|
2062
|
-
() => {
|
2063
|
-
this._resume();
|
2064
|
-
while (this._scheduledTimeouts.has(id)) {
|
2065
|
-
// for some reason Go failed to register the timeout event, log and try again
|
2066
|
-
// (temporary workaround for https://github.com/golang/go/issues/28975)
|
2067
|
-
console.warn("scheduleTimeoutEvent: missed timeout event");
|
2068
|
-
this._resume();
|
2069
|
-
}
|
2070
|
-
},
|
2071
|
-
getInt64(sp + 8) + 1, // setTimeout has been seen to fire up to 1 millisecond early
|
2072
|
-
));
|
2073
|
-
this.mem.setInt32(sp + 16, id, true);
|
2074
|
-
},
|
2075
|
-
|
2076
|
-
// func clearTimeoutEvent(id int32)
|
2077
|
-
"runtime.clearTimeoutEvent": (sp) => {
|
2078
|
-
sp >>>= 0;
|
2079
|
-
const id = this.mem.getInt32(sp + 8, true);
|
2080
|
-
clearTimeout(this._scheduledTimeouts.get(id));
|
2081
|
-
this._scheduledTimeouts.delete(id);
|
2082
|
-
},
|
2083
|
-
|
2084
|
-
// func getRandomData(r []byte)
|
2085
|
-
"runtime.getRandomData": (sp) => {
|
2086
|
-
sp >>>= 0;
|
2087
|
-
crypto.getRandomValues(loadSlice(sp + 8));
|
2088
|
-
},
|
2089
|
-
|
2090
|
-
// func finalizeRef(v ref)
|
2091
|
-
"syscall/js.finalizeRef": (sp) => {
|
2092
|
-
sp >>>= 0;
|
2093
|
-
const id = this.mem.getUint32(sp + 8, true);
|
2094
|
-
this._goRefCounts[id]--;
|
2095
|
-
if (this._goRefCounts[id] === 0) {
|
2096
|
-
const v = this._values[id];
|
2097
|
-
this._values[id] = null;
|
2098
|
-
this._ids.delete(v);
|
2099
|
-
this._idPool.push(id);
|
2100
|
-
}
|
2101
|
-
},
|
2102
|
-
|
2103
|
-
// func stringVal(value string) ref
|
2104
|
-
"syscall/js.stringVal": (sp) => {
|
2105
|
-
sp >>>= 0;
|
2106
|
-
storeValue(sp + 24, loadString(sp + 8));
|
2107
|
-
},
|
2108
|
-
|
2109
|
-
// func valueGet(v ref, p string) ref
|
2110
|
-
"syscall/js.valueGet": (sp) => {
|
2111
|
-
sp >>>= 0;
|
2112
|
-
const result = Reflect.get(loadValue(sp + 8), loadString(sp + 16));
|
2113
|
-
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
2114
|
-
storeValue(sp + 32, result);
|
2115
|
-
},
|
2116
|
-
|
2117
|
-
// func valueSet(v ref, p string, x ref)
|
2118
|
-
"syscall/js.valueSet": (sp) => {
|
2119
|
-
sp >>>= 0;
|
2120
|
-
Reflect.set(loadValue(sp + 8), loadString(sp + 16), loadValue(sp + 32));
|
2121
|
-
},
|
2122
|
-
|
2123
|
-
// func valueDelete(v ref, p string)
|
2124
|
-
"syscall/js.valueDelete": (sp) => {
|
2125
|
-
sp >>>= 0;
|
2126
|
-
Reflect.deleteProperty(loadValue(sp + 8), loadString(sp + 16));
|
2127
|
-
},
|
2128
|
-
|
2129
|
-
// func valueIndex(v ref, i int) ref
|
2130
|
-
"syscall/js.valueIndex": (sp) => {
|
2131
|
-
sp >>>= 0;
|
2132
|
-
storeValue(sp + 24, Reflect.get(loadValue(sp + 8), getInt64(sp + 16)));
|
2133
|
-
},
|
2134
|
-
|
2135
|
-
// valueSetIndex(v ref, i int, x ref)
|
2136
|
-
"syscall/js.valueSetIndex": (sp) => {
|
2137
|
-
sp >>>= 0;
|
2138
|
-
Reflect.set(loadValue(sp + 8), getInt64(sp + 16), loadValue(sp + 24));
|
2139
|
-
},
|
2140
|
-
|
2141
|
-
// func valueCall(v ref, m string, args []ref) (ref, bool)
|
2142
|
-
"syscall/js.valueCall": (sp) => {
|
2143
|
-
sp >>>= 0;
|
2144
|
-
try {
|
2145
|
-
const v = loadValue(sp + 8);
|
2146
|
-
const m = Reflect.get(v, loadString(sp + 16));
|
2147
|
-
const args = loadSliceOfValues(sp + 32);
|
2148
|
-
const result = Reflect.apply(m, v, args);
|
2149
|
-
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
2150
|
-
storeValue(sp + 56, result);
|
2151
|
-
this.mem.setUint8(sp + 64, 1);
|
2152
|
-
} catch (err) {
|
2153
|
-
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
2154
|
-
storeValue(sp + 56, err);
|
2155
|
-
this.mem.setUint8(sp + 64, 0);
|
2156
|
-
}
|
2157
|
-
},
|
2158
|
-
|
2159
|
-
// func valueInvoke(v ref, args []ref) (ref, bool)
|
2160
|
-
"syscall/js.valueInvoke": (sp) => {
|
2161
|
-
sp >>>= 0;
|
2162
|
-
try {
|
2163
|
-
const v = loadValue(sp + 8);
|
2164
|
-
const args = loadSliceOfValues(sp + 16);
|
2165
|
-
const result = Reflect.apply(v, undefined, args);
|
2166
|
-
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
2167
|
-
storeValue(sp + 40, result);
|
2168
|
-
this.mem.setUint8(sp + 48, 1);
|
2169
|
-
} catch (err) {
|
2170
|
-
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
2171
|
-
storeValue(sp + 40, err);
|
2172
|
-
this.mem.setUint8(sp + 48, 0);
|
2173
|
-
}
|
2174
|
-
},
|
2175
|
-
|
2176
|
-
// func valueNew(v ref, args []ref) (ref, bool)
|
2177
|
-
"syscall/js.valueNew": (sp) => {
|
2178
|
-
sp >>>= 0;
|
2179
|
-
try {
|
2180
|
-
const v = loadValue(sp + 8);
|
2181
|
-
const args = loadSliceOfValues(sp + 16);
|
2182
|
-
const result = Reflect.construct(v, args);
|
2183
|
-
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
2184
|
-
storeValue(sp + 40, result);
|
2185
|
-
this.mem.setUint8(sp + 48, 1);
|
2186
|
-
} catch (err) {
|
2187
|
-
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
2188
|
-
storeValue(sp + 40, err);
|
2189
|
-
this.mem.setUint8(sp + 48, 0);
|
2190
|
-
}
|
2191
|
-
},
|
2192
|
-
|
2193
|
-
// func valueLength(v ref) int
|
2194
|
-
"syscall/js.valueLength": (sp) => {
|
2195
|
-
sp >>>= 0;
|
2196
|
-
setInt64(sp + 16, parseInt(loadValue(sp + 8).length));
|
2197
|
-
},
|
2198
|
-
|
2199
|
-
// valuePrepareString(v ref) (ref, int)
|
2200
|
-
"syscall/js.valuePrepareString": (sp) => {
|
2201
|
-
sp >>>= 0;
|
2202
|
-
const str = encoder.encode(String(loadValue(sp + 8)));
|
2203
|
-
storeValue(sp + 16, str);
|
2204
|
-
setInt64(sp + 24, str.length);
|
2205
|
-
},
|
2206
|
-
|
2207
|
-
// valueLoadString(v ref, b []byte)
|
2208
|
-
"syscall/js.valueLoadString": (sp) => {
|
2209
|
-
sp >>>= 0;
|
2210
|
-
const str = loadValue(sp + 8);
|
2211
|
-
loadSlice(sp + 16).set(str);
|
2212
|
-
},
|
2213
|
-
|
2214
|
-
// func valueInstanceOf(v ref, t ref) bool
|
2215
|
-
"syscall/js.valueInstanceOf": (sp) => {
|
2216
|
-
sp >>>= 0;
|
2217
|
-
this.mem.setUint8(sp + 24, (loadValue(sp + 8) instanceof loadValue(sp + 16)) ? 1 : 0);
|
2218
|
-
},
|
2219
|
-
|
2220
|
-
// func copyBytesToGo(dst []byte, src ref) (int, bool)
|
2221
|
-
"syscall/js.copyBytesToGo": (sp) => {
|
2222
|
-
sp >>>= 0;
|
2223
|
-
const dst = loadSlice(sp + 8);
|
2224
|
-
const src = loadValue(sp + 32);
|
2225
|
-
if (!(src instanceof Uint8Array || src instanceof Uint8ClampedArray)) {
|
2226
|
-
this.mem.setUint8(sp + 48, 0);
|
2227
|
-
return;
|
2228
|
-
}
|
2229
|
-
const toCopy = src.subarray(0, dst.length);
|
2230
|
-
dst.set(toCopy);
|
2231
|
-
setInt64(sp + 40, toCopy.length);
|
2232
|
-
this.mem.setUint8(sp + 48, 1);
|
2233
|
-
},
|
2234
|
-
|
2235
|
-
// func copyBytesToJS(dst ref, src []byte) (int, bool)
|
2236
|
-
"syscall/js.copyBytesToJS": (sp) => {
|
2237
|
-
sp >>>= 0;
|
2238
|
-
const dst = loadValue(sp + 8);
|
2239
|
-
const src = loadSlice(sp + 16);
|
2240
|
-
if (!(dst instanceof Uint8Array || dst instanceof Uint8ClampedArray)) {
|
2241
|
-
this.mem.setUint8(sp + 48, 0);
|
2242
|
-
return;
|
2243
|
-
}
|
2244
|
-
const toCopy = src.subarray(0, dst.length);
|
2245
|
-
dst.set(toCopy);
|
2246
|
-
setInt64(sp + 40, toCopy.length);
|
2247
|
-
this.mem.setUint8(sp + 48, 1);
|
2248
|
-
},
|
2249
|
-
|
2250
|
-
"debug": (value) => {
|
2251
|
-
console.log(value);
|
2252
|
-
},
|
2253
|
-
}
|
2254
|
-
};
|
2255
|
-
}
|
2256
|
-
|
2257
|
-
async run(instance) {
|
2258
|
-
if (!(instance instanceof WebAssembly.Instance)) {
|
2259
|
-
throw new Error("Go.run: WebAssembly.Instance expected");
|
2260
|
-
}
|
2261
|
-
this._inst = instance;
|
2262
|
-
this.mem = new DataView(this._inst.exports.mem.buffer);
|
2263
|
-
this._values = [ // JS values that Go currently has references to, indexed by reference id
|
2264
|
-
NaN,
|
2265
|
-
0,
|
2266
|
-
null,
|
2267
|
-
true,
|
2268
|
-
false,
|
2269
|
-
global,
|
2270
|
-
this,
|
2271
|
-
];
|
2272
|
-
this._goRefCounts = new Array(this._values.length).fill(Infinity); // number of references that Go has to a JS value, indexed by reference id
|
2273
|
-
this._ids = new Map([ // mapping from JS values to reference ids
|
2274
|
-
[0, 1],
|
2275
|
-
[null, 2],
|
2276
|
-
[true, 3],
|
2277
|
-
[false, 4],
|
2278
|
-
[global, 5],
|
2279
|
-
[this, 6],
|
2280
|
-
]);
|
2281
|
-
this._idPool = []; // unused ids that have been garbage collected
|
2282
|
-
this.exited = false; // whether the Go program has exited
|
2283
|
-
|
2284
|
-
// Pass command line arguments and environment variables to WebAssembly by writing them to the linear memory.
|
2285
|
-
let offset = 4096;
|
2286
|
-
|
2287
|
-
const strPtr = (str) => {
|
2288
|
-
const ptr = offset;
|
2289
|
-
const bytes = encoder.encode(str + "\\0");
|
2290
|
-
new Uint8Array(this.mem.buffer, offset, bytes.length).set(bytes);
|
2291
|
-
offset += bytes.length;
|
2292
|
-
if (offset % 8 !== 0) {
|
2293
|
-
offset += 8 - (offset % 8);
|
2294
|
-
}
|
2295
|
-
return ptr;
|
2296
|
-
};
|
2297
|
-
|
2298
|
-
const argc = this.argv.length;
|
2299
|
-
|
2300
|
-
const argvPtrs = [];
|
2301
|
-
this.argv.forEach((arg) => {
|
2302
|
-
argvPtrs.push(strPtr(arg));
|
2303
|
-
});
|
2304
|
-
argvPtrs.push(0);
|
2305
|
-
|
2306
|
-
const keys = Object.keys(this.env).sort();
|
2307
|
-
keys.forEach((key) => {
|
2308
|
-
argvPtrs.push(strPtr(\`\${key}=\${this.env[key]}\`));
|
2309
|
-
});
|
2310
|
-
argvPtrs.push(0);
|
2311
|
-
|
2312
|
-
const argv = offset;
|
2313
|
-
argvPtrs.forEach((ptr) => {
|
2314
|
-
this.mem.setUint32(offset, ptr, true);
|
2315
|
-
this.mem.setUint32(offset + 4, 0, true);
|
2316
|
-
offset += 8;
|
2317
|
-
});
|
2318
|
-
|
2319
|
-
// The linker guarantees global data starts from at least wasmMinDataAddr.
|
2320
|
-
// Keep in sync with cmd/link/internal/ld/data.go:wasmMinDataAddr.
|
2321
|
-
const wasmMinDataAddr = 4096 + 8192;
|
2322
|
-
if (offset >= wasmMinDataAddr) {
|
2323
|
-
throw new Error("total length of command line and environment variables exceeds limit");
|
2324
|
-
}
|
2325
|
-
|
2326
|
-
this._inst.exports.run(argc, argv);
|
2327
|
-
if (this.exited) {
|
2328
|
-
this._resolveExitPromise();
|
2329
|
-
}
|
2330
|
-
await this._exitPromise;
|
2331
|
-
}
|
2332
|
-
|
2333
|
-
_resume() {
|
2334
|
-
if (this.exited) {
|
2335
|
-
throw new Error("Go program has already exited");
|
2336
|
-
}
|
2337
|
-
this._inst.exports.resume();
|
2338
|
-
if (this.exited) {
|
2339
|
-
this._resolveExitPromise();
|
2340
|
-
}
|
2341
|
-
}
|
2342
|
-
|
2343
|
-
_makeFuncWrapper(id) {
|
2344
|
-
const go = this;
|
2345
|
-
return function () {
|
2346
|
-
const event = { id: id, this: this, args: arguments };
|
2347
|
-
go._pendingEvent = event;
|
2348
|
-
go._resume();
|
2349
|
-
return event.result;
|
2350
|
-
};
|
2351
|
-
}
|
2352
|
-
}
|
2353
|
-
|
2354
|
-
if (
|
2355
|
-
typeof module !== "undefined" &&
|
2356
|
-
global.require &&
|
2357
|
-
global.require.main === module &&
|
2358
|
-
global.process &&
|
2359
|
-
global.process.versions &&
|
2360
|
-
!global.process.versions.electron
|
2361
|
-
) {
|
2362
|
-
if (process.argv.length < 3) {
|
2363
|
-
console.error("usage: go_js_wasm_exec [wasm binary] [arguments]");
|
2364
|
-
process.exit(1);
|
2365
|
-
}
|
2366
|
-
|
2367
|
-
const go = new Go();
|
2368
|
-
go.argv = process.argv.slice(2);
|
2369
|
-
go.env = Object.assign({ TMPDIR: require("os").tmpdir() }, process.env);
|
2370
|
-
go.exit = process.exit;
|
2371
|
-
WebAssembly.instantiate(fs.readFileSync(process.argv[2]), go.importObject).then((result) => {
|
2372
|
-
process.on("exit", (code) => { // Node.js exits if no event handler is pending
|
2373
|
-
if (code === 0 && !go.exited) {
|
2374
|
-
// deadlock, make Go print error and stack traces
|
2375
|
-
go._pendingEvent = { id: 0 };
|
2376
|
-
go._resume();
|
2377
|
-
}
|
2378
|
-
});
|
2379
|
-
return go.run(result.instance);
|
2380
|
-
}).catch((err) => {
|
2381
|
-
console.error(err);
|
2382
|
-
process.exit(1);
|
2383
|
-
});
|
2384
|
-
}
|
2385
|
-
})();
|
2386
|
-
onmessage = ({ data: wasm }) => {
|
2387
|
-
let decoder = new TextDecoder();
|
2388
|
-
let fs = global.fs;
|
2389
|
-
let stderr = "";
|
2390
|
-
fs.writeSync = (fd, buffer) => {
|
2391
|
-
if (fd === 1) {
|
2392
|
-
postMessage(buffer);
|
2393
|
-
} else if (fd === 2) {
|
2394
|
-
stderr += decoder.decode(buffer);
|
2395
|
-
let parts = stderr.split("\\n");
|
2396
|
-
if (parts.length > 1)
|
2397
|
-
console.log(parts.slice(0, -1).join("\\n"));
|
2398
|
-
stderr = parts[parts.length - 1];
|
2399
|
-
} else {
|
2400
|
-
throw new Error("Bad write");
|
2401
|
-
}
|
2402
|
-
return buffer.length;
|
2403
|
-
};
|
2404
|
-
let stdin = [];
|
2405
|
-
let resumeStdin;
|
2406
|
-
let stdinPos = 0;
|
2407
|
-
onmessage = ({ data }) => {
|
2408
|
-
if (data.length > 0) {
|
2409
|
-
stdin.push(data);
|
2410
|
-
if (resumeStdin)
|
2411
|
-
resumeStdin();
|
2412
|
-
}
|
2413
|
-
};
|
2414
|
-
fs.read = (fd, buffer, offset, length, position, callback) => {
|
2415
|
-
if (fd !== 0 || offset !== 0 || length !== buffer.length || position !== null) {
|
2416
|
-
throw new Error("Bad read");
|
2417
|
-
}
|
2418
|
-
if (stdin.length === 0) {
|
2419
|
-
resumeStdin = () => fs.read(fd, buffer, offset, length, position, callback);
|
2420
|
-
return;
|
2421
|
-
}
|
2422
|
-
let first = stdin[0];
|
2423
|
-
let count = Math.max(0, Math.min(length, first.length - stdinPos));
|
2424
|
-
buffer.set(first.subarray(stdinPos, stdinPos + count), offset);
|
2425
|
-
stdinPos += count;
|
2426
|
-
if (stdinPos === first.length) {
|
2427
|
-
stdin.shift();
|
2428
|
-
stdinPos = 0;
|
2429
|
-
}
|
2430
|
-
callback(null, count);
|
2431
|
-
};
|
2432
|
-
let go = new global.Go();
|
2433
|
-
go.argv = ["", \`--service=\${"0.14.23"}\`];
|
2434
|
-
WebAssembly.instantiate(wasm, go.importObject).then(({ instance }) => go.run(instance));
|
2435
|
-
};}`;
|
2436
|
-
let worker;
|
2437
|
-
if (useWorker) {
|
2438
|
-
let blob = new Blob([code], { type: "text/javascript" });
|
2439
|
-
worker = new Worker(URL.createObjectURL(blob));
|
2440
|
-
} else {
|
2441
|
-
let fn = new Function("postMessage", code + `var onmessage; return m => onmessage(m)`);
|
2442
|
-
let onmessage = fn((data) => worker.onmessage({ data }));
|
2321
|
+
};
|
2322
|
+
return (m) => onmessage(m);
|
2323
|
+
})((data) => worker.onmessage({ data }));
|
2443
2324
|
worker = {
|
2444
2325
|
onmessage: null,
|
2445
|
-
postMessage: (data) => onmessage({ data }),
|
2326
|
+
postMessage: (data) => setTimeout(() => onmessage({ data })),
|
2446
2327
|
terminate() {
|
2447
2328
|
}
|
2448
2329
|
};
|
@@ -2465,7 +2346,7 @@ onmessage = ({ data: wasm }) => {
|
|
2465
2346
|
options,
|
2466
2347
|
isTTY: false,
|
2467
2348
|
defaultWD: "/",
|
2468
|
-
callback: (err,
|
2349
|
+
callback: (err, res) => err ? reject(err) : resolve(res)
|
2469
2350
|
})),
|
2470
2351
|
transform: (input, options) => new Promise((resolve, reject) => service.transform({
|
2471
2352
|
callName: "transform",
|
@@ -2481,21 +2362,21 @@ onmessage = ({ data: wasm }) => {
|
|
2481
2362
|
callback(null);
|
2482
2363
|
}
|
2483
2364
|
},
|
2484
|
-
callback: (err,
|
2365
|
+
callback: (err, res) => err ? reject(err) : resolve(res)
|
2485
2366
|
})),
|
2486
2367
|
formatMessages: (messages, options) => new Promise((resolve, reject) => service.formatMessages({
|
2487
2368
|
callName: "formatMessages",
|
2488
2369
|
refs: null,
|
2489
2370
|
messages,
|
2490
2371
|
options,
|
2491
|
-
callback: (err,
|
2372
|
+
callback: (err, res) => err ? reject(err) : resolve(res)
|
2492
2373
|
})),
|
2493
2374
|
analyzeMetafile: (metafile, options) => new Promise((resolve, reject) => service.analyzeMetafile({
|
2494
2375
|
callName: "analyzeMetafile",
|
2495
2376
|
refs: null,
|
2496
2377
|
metafile: typeof metafile === "string" ? metafile : JSON.stringify(metafile),
|
2497
2378
|
options,
|
2498
|
-
callback: (err,
|
2379
|
+
callback: (err, res) => err ? reject(err) : resolve(res)
|
2499
2380
|
}))
|
2500
2381
|
};
|
2501
2382
|
};
|