@locuschain/lib 0.1.38 → 0.1.40
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.
- package/dist/accounts/index.amd.js +306 -0
- package/dist/accounts/index.cjs.cjs +2 -2
- package/dist/accounts/index.esm.js +2 -2
- package/dist/autogen/index.amd.js +151 -0
- package/dist/autogen/index.cjs.cjs +2 -2
- package/dist/autogen/index.esm.js +2 -2
- package/dist/chunks/account-BSrvZ7S8.js +77 -0
- package/dist/chunks/address-class-Dp7aNQb2.js +18 -0
- package/dist/chunks/base-B_kRRfsf.js +27 -0
- package/dist/chunks/debugWalletActions-BDz-h2tl.js +993 -0
- package/dist/chunks/{keystore-BFVSylSw.js → keystore-B86UzV8A.js} +1 -1
- package/dist/chunks/{keystore-BbK5pVrh.cjs → keystore-BUskzeOs.cjs} +1 -1
- package/dist/chunks/keystore-y1JlFTKh.js +143 -0
- package/dist/chunks/lclib-Bv86gksL.js +3861 -0
- package/dist/chunks/{lclib-C2eG5HzD.js → lclib-j2x9RvDY.js} +55 -32
- package/dist/chunks/{lclib-DuoOR0-Q.cjs → lclib-rGyKpClJ.cjs} +64 -41
- package/dist/chunks/rpc-C4n7t9y0.js +25 -0
- package/dist/chunks/transport-BBAz1kmP.js +30 -0
- package/dist/chunks/tslib.es6-D29rxPkW.js +37 -0
- package/dist/chunks/tx-type-CS4wIUJ8.js +68 -0
- package/dist/chunks/{wasm-DTyHBxcY.cjs → wasm-BYOKRR31.cjs} +1 -1
- package/dist/chunks/{wasm-BtPcXTR4.js → wasm-CLXJDrJA.js} +1 -1
- package/dist/chunks/wasm-CkFW222S.js +213 -0
- package/dist/clients/index.amd.js +97 -0
- package/dist/clients/index.cjs.cjs +1 -1
- package/dist/clients/index.esm.js +1 -1
- package/dist/constant/index.amd.js +458 -0
- package/dist/contracts/index.amd.js +19640 -0
- package/dist/contracts/index.cjs.cjs +2 -2
- package/dist/contracts/index.esm.js +2 -2
- package/dist/errors/index.amd.js +17 -0
- package/dist/index.amd.js +43 -0
- package/dist/index.cjs.cjs +3 -3
- package/dist/index.esm.js +3 -3
- package/dist/transports/index.amd.js +98 -0
- package/dist/utils/index.amd.js +353 -0
- package/dist/utils/index.cjs.cjs +3 -3
- package/dist/utils/index.esm.js +4 -4
- package/dist/vite-plugin/index.amd.js +186 -0
- package/dist/vite-plugin/index.cjs.cjs +189 -0
- package/dist/vite-plugin/index.d.cts +46 -0
- package/dist/vite-plugin/index.d.mts +46 -0
- package/dist/vite-plugin/index.esm.js +183 -0
- package/dist/webpack-plugin/index.amd.js +101 -0
- package/dist/webpack-plugin/index.cjs.cjs +104 -0
- package/dist/webpack-plugin/index.d.cts +46 -0
- package/dist/webpack-plugin/index.d.mts +46 -0
- package/dist/webpack-plugin/index.esm.js +98 -0
- package/package.json +36 -6
- package/dist/index.umd.d.mts +0 -15
- package/dist/umd/index.umd.js +0 -26296
|
@@ -0,0 +1,3861 @@
|
|
|
1
|
+
define(['module', 'require', 'exports', './tslib.es6-D29rxPkW'], (function (module, require, exports, tslib_es6) { 'use strict';
|
|
2
|
+
|
|
3
|
+
function _interopNamespaceDefault(e) {
|
|
4
|
+
var n = Object.create(null);
|
|
5
|
+
if (e) {
|
|
6
|
+
Object.keys(e).forEach(function (k) {
|
|
7
|
+
if (k !== 'default') {
|
|
8
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
9
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function () { return e[k]; }
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
n.default = e;
|
|
17
|
+
return Object.freeze(n);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function AimerModule() {
|
|
21
|
+
return tslib_es6.__awaiter(this, arguments, void 0, function* (moduleArg = {}) {
|
|
22
|
+
var _a, _b, _c;
|
|
23
|
+
var moduleRtn;
|
|
24
|
+
var Module = moduleArg;
|
|
25
|
+
var ENVIRONMENT_IS_WEB = !!globalThis.window;
|
|
26
|
+
var ENVIRONMENT_IS_WORKER = !!globalThis.WorkerGlobalScope;
|
|
27
|
+
var ENVIRONMENT_IS_NODE = ((_b = (_a = globalThis.process) === null || _a === void 0 ? void 0 : _a.versions) === null || _b === void 0 ? void 0 : _b.node) && ((_c = globalThis.process) === null || _c === void 0 ? void 0 : _c.type) != "renderer";
|
|
28
|
+
if (ENVIRONMENT_IS_NODE) {
|
|
29
|
+
const { createRequire } = yield ((m)=>(function (t) { return new Promise(function (resolve, reject) { require([t], function (m) { resolve(/*#__PURE__*/_interopNamespaceDefault(m)); }, reject); }); })(/* @vite-ignore */ /* webpackIgnore: true */ m))("node:module");
|
|
30
|
+
var require$1 = createRequire(new URL(module.uri, document.baseURI).href);
|
|
31
|
+
}
|
|
32
|
+
var quit_ = (status, toThrow) => { throw toThrow; };
|
|
33
|
+
var _scriptName = new URL(module.uri, document.baseURI).href;
|
|
34
|
+
var scriptDirectory = "";
|
|
35
|
+
function locateFile(path) { if (Module["locateFile"]) {
|
|
36
|
+
return Module["locateFile"](path, scriptDirectory);
|
|
37
|
+
} return scriptDirectory + path; }
|
|
38
|
+
var readAsync, readBinary;
|
|
39
|
+
if (ENVIRONMENT_IS_NODE) {
|
|
40
|
+
var fs = require$1("node:fs");
|
|
41
|
+
if (_scriptName.startsWith("file:")) {
|
|
42
|
+
scriptDirectory = require$1("node:path").dirname(require$1("node:url").fileURLToPath(_scriptName)) + "/";
|
|
43
|
+
}
|
|
44
|
+
readBinary = filename => { filename = isFileURI(filename) ? new URL(filename) : filename; var ret = fs.readFileSync(filename); return ret; };
|
|
45
|
+
readAsync = (filename_1, ...args_1) => tslib_es6.__awaiter(this, [filename_1, ...args_1], void 0, function* (filename, binary = true) { filename = isFileURI(filename) ? new URL(filename) : filename; var ret = fs.readFileSync(filename, binary ? undefined : "utf8"); return ret; });
|
|
46
|
+
if (process.argv.length > 1) {
|
|
47
|
+
process.argv[1].replace(/\\/g, "/");
|
|
48
|
+
}
|
|
49
|
+
process.argv.slice(2);
|
|
50
|
+
quit_ = (status, toThrow) => { process.exitCode = status; throw toThrow; };
|
|
51
|
+
}
|
|
52
|
+
else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
|
|
53
|
+
try {
|
|
54
|
+
scriptDirectory = new URL(".", _scriptName).href;
|
|
55
|
+
}
|
|
56
|
+
catch (_d) { }
|
|
57
|
+
{
|
|
58
|
+
if (ENVIRONMENT_IS_WORKER) {
|
|
59
|
+
readBinary = url => { var xhr = new XMLHttpRequest; xhr.open("GET", url, false); xhr.responseType = "arraybuffer"; xhr.send(null); return new Uint8Array(xhr.response); };
|
|
60
|
+
}
|
|
61
|
+
readAsync = (url) => tslib_es6.__awaiter(this, void 0, void 0, function* () { if (isFileURI(url)) {
|
|
62
|
+
return new Promise((resolve, reject) => { var xhr = new XMLHttpRequest; xhr.open("GET", url, true); xhr.responseType = "arraybuffer"; xhr.onload = () => { if (xhr.status == 200 || xhr.status == 0 && xhr.response) {
|
|
63
|
+
resolve(xhr.response);
|
|
64
|
+
return;
|
|
65
|
+
} reject(xhr.status); }; xhr.onerror = reject; xhr.send(null); });
|
|
66
|
+
} var response = yield fetch(url, { credentials: "same-origin" }); if (response.ok) {
|
|
67
|
+
return response.arrayBuffer();
|
|
68
|
+
} throw new Error(response.status + " : " + response.url); });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else ;
|
|
72
|
+
console.log.bind(console);
|
|
73
|
+
var err = console.error.bind(console);
|
|
74
|
+
var wasmBinary;
|
|
75
|
+
var ABORT = false;
|
|
76
|
+
var isFileURI = filename => filename.startsWith("file://");
|
|
77
|
+
var readyPromiseResolve, readyPromiseReject;
|
|
78
|
+
var HEAP8, HEAPU8;
|
|
79
|
+
var runtimeInitialized = false;
|
|
80
|
+
function updateMemoryViews() { var b = wasmMemory.buffer; HEAP8 = new Int8Array(b); Module["HEAPU8"] = HEAPU8 = new Uint8Array(b); Module["HEAPU32"] = new Uint32Array(b); new BigInt64Array(b); new BigUint64Array(b); }
|
|
81
|
+
function preRun() { if (Module["preRun"]) {
|
|
82
|
+
if (typeof Module["preRun"] == "function")
|
|
83
|
+
Module["preRun"] = [Module["preRun"]];
|
|
84
|
+
while (Module["preRun"].length) {
|
|
85
|
+
addOnPreRun(Module["preRun"].shift());
|
|
86
|
+
}
|
|
87
|
+
} callRuntimeCallbacks(onPreRuns); }
|
|
88
|
+
function initRuntime() { runtimeInitialized = true; wasmExports["d"](); }
|
|
89
|
+
function postRun() { if (Module["postRun"]) {
|
|
90
|
+
if (typeof Module["postRun"] == "function")
|
|
91
|
+
Module["postRun"] = [Module["postRun"]];
|
|
92
|
+
while (Module["postRun"].length) {
|
|
93
|
+
addOnPostRun(Module["postRun"].shift());
|
|
94
|
+
}
|
|
95
|
+
} callRuntimeCallbacks(onPostRuns); }
|
|
96
|
+
function abort(what) { var _a; (_a = Module["onAbort"]) === null || _a === void 0 ? void 0 : _a.call(Module, what); what = "Aborted(" + what + ")"; err(what); ABORT = true; what += ". Build with -sASSERTIONS for more info."; var e = new WebAssembly.RuntimeError(what); readyPromiseReject === null || readyPromiseReject === void 0 ? void 0 : readyPromiseReject(e); throw e; }
|
|
97
|
+
var wasmBinaryFile;
|
|
98
|
+
function findWasmBinary() { if (Module["locateFile"]) {
|
|
99
|
+
return locateFile("crypto_aimer.wasm");
|
|
100
|
+
} return new URL("crypto_aimer.wasm", new URL(module.uri, document.baseURI).href).href; }
|
|
101
|
+
function getBinarySync(file) { if (file == wasmBinaryFile && wasmBinary) {
|
|
102
|
+
return new Uint8Array(wasmBinary);
|
|
103
|
+
} if (readBinary) {
|
|
104
|
+
return readBinary(file);
|
|
105
|
+
} throw "both async and sync fetching of the wasm failed"; }
|
|
106
|
+
function getWasmBinary(binaryFile) {
|
|
107
|
+
return tslib_es6.__awaiter(this, void 0, void 0, function* () { if (!wasmBinary) {
|
|
108
|
+
try {
|
|
109
|
+
var response = yield readAsync(binaryFile);
|
|
110
|
+
return new Uint8Array(response);
|
|
111
|
+
}
|
|
112
|
+
catch (_a) { }
|
|
113
|
+
} return getBinarySync(binaryFile); });
|
|
114
|
+
}
|
|
115
|
+
function instantiateArrayBuffer(binaryFile, imports) {
|
|
116
|
+
return tslib_es6.__awaiter(this, void 0, void 0, function* () { try {
|
|
117
|
+
var binary = yield getWasmBinary(binaryFile);
|
|
118
|
+
var instance = yield WebAssembly.instantiate(binary, imports);
|
|
119
|
+
return instance;
|
|
120
|
+
}
|
|
121
|
+
catch (reason) {
|
|
122
|
+
err(`failed to asynchronously prepare wasm: ${reason}`);
|
|
123
|
+
abort(reason);
|
|
124
|
+
} });
|
|
125
|
+
}
|
|
126
|
+
function instantiateAsync(binary, binaryFile, imports) {
|
|
127
|
+
return tslib_es6.__awaiter(this, void 0, void 0, function* () { if (!binary && !isFileURI(binaryFile) && !ENVIRONMENT_IS_NODE) {
|
|
128
|
+
try {
|
|
129
|
+
var response = fetch(binaryFile, { credentials: "same-origin" });
|
|
130
|
+
var instantiationResult = yield WebAssembly.instantiateStreaming(response, imports);
|
|
131
|
+
return instantiationResult;
|
|
132
|
+
}
|
|
133
|
+
catch (reason) {
|
|
134
|
+
err(`wasm streaming compile failed: ${reason}`);
|
|
135
|
+
err("falling back to ArrayBuffer instantiation");
|
|
136
|
+
}
|
|
137
|
+
} return instantiateArrayBuffer(binaryFile, imports); });
|
|
138
|
+
}
|
|
139
|
+
function getWasmImports() { var imports = { a: wasmImports }; return imports; }
|
|
140
|
+
function createWasm() {
|
|
141
|
+
return tslib_es6.__awaiter(this, void 0, void 0, function* () { function receiveInstance(instance, module) { wasmExports = instance.exports; assignWasmExports(wasmExports); updateMemoryViews(); return wasmExports; } function receiveInstantiationResult(result) { return receiveInstance(result["instance"]); } var info = getWasmImports(); if (Module["instantiateWasm"]) {
|
|
142
|
+
return new Promise((resolve, reject) => { Module["instantiateWasm"](info, (inst, mod) => { resolve(receiveInstance(inst)); }); });
|
|
143
|
+
} wasmBinaryFile !== null && wasmBinaryFile !== void 0 ? wasmBinaryFile : (wasmBinaryFile = findWasmBinary()); var result = yield instantiateAsync(wasmBinary, wasmBinaryFile, info); var exports$1 = receiveInstantiationResult(result); return exports$1; });
|
|
144
|
+
}
|
|
145
|
+
class ExitStatus {
|
|
146
|
+
constructor(status) {
|
|
147
|
+
this.name = "ExitStatus";
|
|
148
|
+
this.message = `Program terminated with exit(${status})`;
|
|
149
|
+
this.status = status;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
var callRuntimeCallbacks = callbacks => { while (callbacks.length > 0) {
|
|
153
|
+
callbacks.shift()(Module);
|
|
154
|
+
} };
|
|
155
|
+
var onPostRuns = [];
|
|
156
|
+
var addOnPostRun = cb => onPostRuns.push(cb);
|
|
157
|
+
var onPreRuns = [];
|
|
158
|
+
var addOnPreRun = cb => onPreRuns.push(cb);
|
|
159
|
+
var noExitRuntime = true;
|
|
160
|
+
var stackRestore = val => __emscripten_stack_restore(val);
|
|
161
|
+
var stackSave = () => _emscripten_stack_get_current();
|
|
162
|
+
var getHeapMax = () => 2147483648;
|
|
163
|
+
var alignMemory = (size, alignment) => Math.ceil(size / alignment) * alignment;
|
|
164
|
+
var growMemory = size => { var oldHeapSize = wasmMemory.buffer.byteLength; var pages = (size - oldHeapSize + 65535) / 65536 | 0; try {
|
|
165
|
+
wasmMemory.grow(pages);
|
|
166
|
+
updateMemoryViews();
|
|
167
|
+
return 1;
|
|
168
|
+
}
|
|
169
|
+
catch (e) { } };
|
|
170
|
+
var _emscripten_resize_heap = requestedSize => { var oldSize = HEAPU8.length; requestedSize >>>= 0; var maxHeapSize = getHeapMax(); if (requestedSize > maxHeapSize) {
|
|
171
|
+
return false;
|
|
172
|
+
} for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {
|
|
173
|
+
var overGrownHeapSize = oldSize * (1 + .2 / cutDown);
|
|
174
|
+
overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);
|
|
175
|
+
var newSize = Math.min(maxHeapSize, alignMemory(Math.max(requestedSize, overGrownHeapSize), 65536));
|
|
176
|
+
var replacement = growMemory(newSize);
|
|
177
|
+
if (replacement) {
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
} return false; };
|
|
181
|
+
var runtimeKeepaliveCounter = 0;
|
|
182
|
+
var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0;
|
|
183
|
+
var _proc_exit = code => { var _a; if (!keepRuntimeAlive()) {
|
|
184
|
+
(_a = Module["onExit"]) === null || _a === void 0 ? void 0 : _a.call(Module, code);
|
|
185
|
+
ABORT = true;
|
|
186
|
+
} quit_(code, new ExitStatus(code)); };
|
|
187
|
+
var exitJS = (status, implicit) => { _proc_exit(status); };
|
|
188
|
+
var _exit = exitJS;
|
|
189
|
+
var getCFunc = ident => { var func = Module["_" + ident]; return func; };
|
|
190
|
+
var writeArrayToMemory = (array, buffer) => { HEAP8.set(array, buffer); };
|
|
191
|
+
var lengthBytesUTF8 = str => { var len = 0; for (var i = 0; i < str.length; ++i) {
|
|
192
|
+
var c = str.charCodeAt(i);
|
|
193
|
+
if (c <= 127) {
|
|
194
|
+
len++;
|
|
195
|
+
}
|
|
196
|
+
else if (c <= 2047) {
|
|
197
|
+
len += 2;
|
|
198
|
+
}
|
|
199
|
+
else if (c >= 55296 && c <= 57343) {
|
|
200
|
+
len += 4;
|
|
201
|
+
++i;
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
len += 3;
|
|
205
|
+
}
|
|
206
|
+
} return len; };
|
|
207
|
+
var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { if (!(maxBytesToWrite > 0))
|
|
208
|
+
return 0; var startIdx = outIdx; var endIdx = outIdx + maxBytesToWrite - 1; for (var i = 0; i < str.length; ++i) {
|
|
209
|
+
var u = str.codePointAt(i);
|
|
210
|
+
if (u <= 127) {
|
|
211
|
+
if (outIdx >= endIdx)
|
|
212
|
+
break;
|
|
213
|
+
heap[outIdx++] = u;
|
|
214
|
+
}
|
|
215
|
+
else if (u <= 2047) {
|
|
216
|
+
if (outIdx + 1 >= endIdx)
|
|
217
|
+
break;
|
|
218
|
+
heap[outIdx++] = 192 | u >> 6;
|
|
219
|
+
heap[outIdx++] = 128 | u & 63;
|
|
220
|
+
}
|
|
221
|
+
else if (u <= 65535) {
|
|
222
|
+
if (outIdx + 2 >= endIdx)
|
|
223
|
+
break;
|
|
224
|
+
heap[outIdx++] = 224 | u >> 12;
|
|
225
|
+
heap[outIdx++] = 128 | u >> 6 & 63;
|
|
226
|
+
heap[outIdx++] = 128 | u & 63;
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
if (outIdx + 3 >= endIdx)
|
|
230
|
+
break;
|
|
231
|
+
heap[outIdx++] = 240 | u >> 18;
|
|
232
|
+
heap[outIdx++] = 128 | u >> 12 & 63;
|
|
233
|
+
heap[outIdx++] = 128 | u >> 6 & 63;
|
|
234
|
+
heap[outIdx++] = 128 | u & 63;
|
|
235
|
+
i++;
|
|
236
|
+
}
|
|
237
|
+
} heap[outIdx] = 0; return outIdx - startIdx; };
|
|
238
|
+
var stringToUTF8 = (str, outPtr, maxBytesToWrite) => stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);
|
|
239
|
+
var stackAlloc = sz => __emscripten_stack_alloc(sz);
|
|
240
|
+
var stringToUTF8OnStack = str => { var size = lengthBytesUTF8(str) + 1; var ret = stackAlloc(size); stringToUTF8(str, ret, size); return ret; };
|
|
241
|
+
var UTF8Decoder = globalThis.TextDecoder && new TextDecoder;
|
|
242
|
+
var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var maxIdx = idx + maxBytesToRead; while (heapOrArray[idx] && !(idx >= maxIdx))
|
|
243
|
+
++idx; return idx; };
|
|
244
|
+
var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead, ignoreNul) => { var endPtr = findStringEnd(heapOrArray, idx, maxBytesToRead); if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {
|
|
245
|
+
return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));
|
|
246
|
+
} var str = ""; while (idx < endPtr) {
|
|
247
|
+
var u0 = heapOrArray[idx++];
|
|
248
|
+
if (!(u0 & 128)) {
|
|
249
|
+
str += String.fromCharCode(u0);
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
var u1 = heapOrArray[idx++] & 63;
|
|
253
|
+
if ((u0 & 224) == 192) {
|
|
254
|
+
str += String.fromCharCode((u0 & 31) << 6 | u1);
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
var u2 = heapOrArray[idx++] & 63;
|
|
258
|
+
if ((u0 & 240) == 224) {
|
|
259
|
+
u0 = (u0 & 15) << 12 | u1 << 6 | u2;
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heapOrArray[idx++] & 63;
|
|
263
|
+
}
|
|
264
|
+
if (u0 < 65536) {
|
|
265
|
+
str += String.fromCharCode(u0);
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
var ch = u0 - 65536;
|
|
269
|
+
str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023);
|
|
270
|
+
}
|
|
271
|
+
} return str; };
|
|
272
|
+
var UTF8ToString = (ptr, maxBytesToRead, ignoreNul) => ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "";
|
|
273
|
+
var ccall = (ident, returnType, argTypes, args, opts) => { var toC = { string: str => { var ret = 0; if (str !== null && str !== undefined && str !== 0) {
|
|
274
|
+
ret = stringToUTF8OnStack(str);
|
|
275
|
+
} return ret; }, array: arr => { var ret = stackAlloc(arr.length); writeArrayToMemory(arr, ret); return ret; } }; function convertReturnValue(ret) { if (returnType === "string") {
|
|
276
|
+
return UTF8ToString(ret);
|
|
277
|
+
} if (returnType === "boolean")
|
|
278
|
+
return Boolean(ret); return ret; } var func = getCFunc(ident); var cArgs = []; var stack = 0; if (args) {
|
|
279
|
+
for (var i = 0; i < args.length; i++) {
|
|
280
|
+
var converter = toC[argTypes[i]];
|
|
281
|
+
if (converter) {
|
|
282
|
+
if (stack === 0)
|
|
283
|
+
stack = stackSave();
|
|
284
|
+
cArgs[i] = converter(args[i]);
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
cArgs[i] = args[i];
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
} var ret = func(...cArgs); function onDone(ret) { if (stack !== 0)
|
|
291
|
+
stackRestore(stack); return convertReturnValue(ret); } ret = onDone(ret); return ret; };
|
|
292
|
+
var cwrap = (ident, returnType, argTypes, opts) => { var numericArgs = !argTypes || argTypes.every(type => type === "number" || type === "boolean"); var numericRet = returnType !== "string"; if (numericRet && numericArgs && !opts) {
|
|
293
|
+
return getCFunc(ident);
|
|
294
|
+
} return (...args) => ccall(ident, returnType, argTypes, args); };
|
|
295
|
+
{
|
|
296
|
+
if (Module["noExitRuntime"])
|
|
297
|
+
noExitRuntime = Module["noExitRuntime"];
|
|
298
|
+
if (Module["print"])
|
|
299
|
+
Module["print"];
|
|
300
|
+
if (Module["printErr"])
|
|
301
|
+
err = Module["printErr"];
|
|
302
|
+
if (Module["wasmBinary"])
|
|
303
|
+
wasmBinary = Module["wasmBinary"];
|
|
304
|
+
if (Module["arguments"])
|
|
305
|
+
Module["arguments"];
|
|
306
|
+
if (Module["thisProgram"])
|
|
307
|
+
Module["thisProgram"];
|
|
308
|
+
if (Module["preInit"]) {
|
|
309
|
+
if (typeof Module["preInit"] == "function")
|
|
310
|
+
Module["preInit"] = [Module["preInit"]];
|
|
311
|
+
while (Module["preInit"].length > 0) {
|
|
312
|
+
Module["preInit"].shift()();
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
Module["ccall"] = ccall;
|
|
317
|
+
Module["cwrap"] = cwrap;
|
|
318
|
+
var __emscripten_stack_restore, __emscripten_stack_alloc, _emscripten_stack_get_current, wasmMemory;
|
|
319
|
+
function assignWasmExports(wasmExports) { Module["_malloc"] = wasmExports["e"]; Module["_free"] = wasmExports["f"]; Module["_wasm_aimer_keypair"] = wasmExports["g"]; Module["_wasm_aimer_sign"] = wasmExports["h"]; Module["_wasm_aimer_verify"] = wasmExports["i"]; __emscripten_stack_restore = wasmExports["j"]; __emscripten_stack_alloc = wasmExports["k"]; _emscripten_stack_get_current = wasmExports["l"]; wasmMemory = wasmExports["c"]; wasmExports["__indirect_function_table"]; }
|
|
320
|
+
var wasmImports = { a: _emscripten_resize_heap, b: _exit };
|
|
321
|
+
function run() { preRun(); function doRun() { var _a; Module["calledRun"] = true; if (ABORT)
|
|
322
|
+
return; initRuntime(); readyPromiseResolve === null || readyPromiseResolve === void 0 ? void 0 : readyPromiseResolve(Module); (_a = Module["onRuntimeInitialized"]) === null || _a === void 0 ? void 0 : _a.call(Module); postRun(); } if (Module["setStatus"]) {
|
|
323
|
+
Module["setStatus"]("Running...");
|
|
324
|
+
setTimeout(() => { setTimeout(() => Module["setStatus"](""), 1); doRun(); }, 1);
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
doRun();
|
|
328
|
+
} }
|
|
329
|
+
var wasmExports;
|
|
330
|
+
wasmExports = yield (createWasm());
|
|
331
|
+
run();
|
|
332
|
+
if (runtimeInitialized) {
|
|
333
|
+
moduleRtn = Module;
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
moduleRtn = new Promise((resolve, reject) => { readyPromiseResolve = resolve; readyPromiseReject = reject; });
|
|
337
|
+
}
|
|
338
|
+
return moduleRtn;
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
function HaetaeModule() {
|
|
343
|
+
return tslib_es6.__awaiter(this, arguments, void 0, function* (moduleArg = {}) {
|
|
344
|
+
var _a, _b, _c;
|
|
345
|
+
var moduleRtn;
|
|
346
|
+
var Module = moduleArg;
|
|
347
|
+
var ENVIRONMENT_IS_WEB = !!globalThis.window;
|
|
348
|
+
var ENVIRONMENT_IS_WORKER = !!globalThis.WorkerGlobalScope;
|
|
349
|
+
var ENVIRONMENT_IS_NODE = ((_b = (_a = globalThis.process) === null || _a === void 0 ? void 0 : _a.versions) === null || _b === void 0 ? void 0 : _b.node) && ((_c = globalThis.process) === null || _c === void 0 ? void 0 : _c.type) != "renderer";
|
|
350
|
+
if (ENVIRONMENT_IS_NODE) {
|
|
351
|
+
const { createRequire } = yield ((m)=>(function (t) { return new Promise(function (resolve, reject) { require([t], function (m) { resolve(/*#__PURE__*/_interopNamespaceDefault(m)); }, reject); }); })(/* @vite-ignore */ /* webpackIgnore: true */ m))("node:module");
|
|
352
|
+
var require$1 = createRequire(new URL(module.uri, document.baseURI).href);
|
|
353
|
+
}
|
|
354
|
+
var _scriptName = new URL(module.uri, document.baseURI).href;
|
|
355
|
+
var scriptDirectory = "";
|
|
356
|
+
function locateFile(path) { if (Module["locateFile"]) {
|
|
357
|
+
return Module["locateFile"](path, scriptDirectory);
|
|
358
|
+
} return scriptDirectory + path; }
|
|
359
|
+
var readAsync, readBinary;
|
|
360
|
+
if (ENVIRONMENT_IS_NODE) {
|
|
361
|
+
var fs = require$1("node:fs");
|
|
362
|
+
if (_scriptName.startsWith("file:")) {
|
|
363
|
+
scriptDirectory = require$1("node:path").dirname(require$1("node:url").fileURLToPath(_scriptName)) + "/";
|
|
364
|
+
}
|
|
365
|
+
readBinary = filename => { filename = isFileURI(filename) ? new URL(filename) : filename; var ret = fs.readFileSync(filename); return ret; };
|
|
366
|
+
readAsync = (filename_1, ...args_1) => tslib_es6.__awaiter(this, [filename_1, ...args_1], void 0, function* (filename, binary = true) { filename = isFileURI(filename) ? new URL(filename) : filename; var ret = fs.readFileSync(filename, binary ? undefined : "utf8"); return ret; });
|
|
367
|
+
if (process.argv.length > 1) {
|
|
368
|
+
process.argv[1].replace(/\\/g, "/");
|
|
369
|
+
}
|
|
370
|
+
process.argv.slice(2);
|
|
371
|
+
}
|
|
372
|
+
else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
|
|
373
|
+
try {
|
|
374
|
+
scriptDirectory = new URL(".", _scriptName).href;
|
|
375
|
+
}
|
|
376
|
+
catch (_d) { }
|
|
377
|
+
{
|
|
378
|
+
if (ENVIRONMENT_IS_WORKER) {
|
|
379
|
+
readBinary = url => { var xhr = new XMLHttpRequest; xhr.open("GET", url, false); xhr.responseType = "arraybuffer"; xhr.send(null); return new Uint8Array(xhr.response); };
|
|
380
|
+
}
|
|
381
|
+
readAsync = (url) => tslib_es6.__awaiter(this, void 0, void 0, function* () { if (isFileURI(url)) {
|
|
382
|
+
return new Promise((resolve, reject) => { var xhr = new XMLHttpRequest; xhr.open("GET", url, true); xhr.responseType = "arraybuffer"; xhr.onload = () => { if (xhr.status == 200 || xhr.status == 0 && xhr.response) {
|
|
383
|
+
resolve(xhr.response);
|
|
384
|
+
return;
|
|
385
|
+
} reject(xhr.status); }; xhr.onerror = reject; xhr.send(null); });
|
|
386
|
+
} var response = yield fetch(url, { credentials: "same-origin" }); if (response.ok) {
|
|
387
|
+
return response.arrayBuffer();
|
|
388
|
+
} throw new Error(response.status + " : " + response.url); });
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
else ;
|
|
392
|
+
var out = console.log.bind(console);
|
|
393
|
+
var err = console.error.bind(console);
|
|
394
|
+
var wasmBinary;
|
|
395
|
+
var ABORT = false;
|
|
396
|
+
var isFileURI = filename => filename.startsWith("file://");
|
|
397
|
+
var readyPromiseResolve, readyPromiseReject;
|
|
398
|
+
var HEAP8, HEAPU8, HEAP32, HEAPU32;
|
|
399
|
+
var HEAP64;
|
|
400
|
+
var runtimeInitialized = false;
|
|
401
|
+
function updateMemoryViews() { var b = wasmMemory.buffer; HEAP8 = new Int8Array(b); Module["HEAPU8"] = HEAPU8 = new Uint8Array(b); HEAP32 = new Int32Array(b); Module["HEAPU32"] = HEAPU32 = new Uint32Array(b); HEAP64 = new BigInt64Array(b); new BigUint64Array(b); }
|
|
402
|
+
function preRun() { if (Module["preRun"]) {
|
|
403
|
+
if (typeof Module["preRun"] == "function")
|
|
404
|
+
Module["preRun"] = [Module["preRun"]];
|
|
405
|
+
while (Module["preRun"].length) {
|
|
406
|
+
addOnPreRun(Module["preRun"].shift());
|
|
407
|
+
}
|
|
408
|
+
} callRuntimeCallbacks(onPreRuns); }
|
|
409
|
+
function initRuntime() { runtimeInitialized = true; if (!Module["noFSInit"] && !FS.initialized)
|
|
410
|
+
FS.init(); wasmExports["f"](); FS.ignorePermissions = false; }
|
|
411
|
+
function postRun() { if (Module["postRun"]) {
|
|
412
|
+
if (typeof Module["postRun"] == "function")
|
|
413
|
+
Module["postRun"] = [Module["postRun"]];
|
|
414
|
+
while (Module["postRun"].length) {
|
|
415
|
+
addOnPostRun(Module["postRun"].shift());
|
|
416
|
+
}
|
|
417
|
+
} callRuntimeCallbacks(onPostRuns); }
|
|
418
|
+
function abort(what) { var _a; (_a = Module["onAbort"]) === null || _a === void 0 ? void 0 : _a.call(Module, what); what = "Aborted(" + what + ")"; err(what); ABORT = true; what += ". Build with -sASSERTIONS for more info."; var e = new WebAssembly.RuntimeError(what); readyPromiseReject === null || readyPromiseReject === void 0 ? void 0 : readyPromiseReject(e); throw e; }
|
|
419
|
+
var wasmBinaryFile;
|
|
420
|
+
function findWasmBinary() { if (Module["locateFile"]) {
|
|
421
|
+
return locateFile("crypto_haetae.wasm");
|
|
422
|
+
} return new URL("crypto_haetae.wasm", new URL(module.uri, document.baseURI).href).href; }
|
|
423
|
+
function getBinarySync(file) { if (file == wasmBinaryFile && wasmBinary) {
|
|
424
|
+
return new Uint8Array(wasmBinary);
|
|
425
|
+
} if (readBinary) {
|
|
426
|
+
return readBinary(file);
|
|
427
|
+
} throw "both async and sync fetching of the wasm failed"; }
|
|
428
|
+
function getWasmBinary(binaryFile) {
|
|
429
|
+
return tslib_es6.__awaiter(this, void 0, void 0, function* () { if (!wasmBinary) {
|
|
430
|
+
try {
|
|
431
|
+
var response = yield readAsync(binaryFile);
|
|
432
|
+
return new Uint8Array(response);
|
|
433
|
+
}
|
|
434
|
+
catch (_a) { }
|
|
435
|
+
} return getBinarySync(binaryFile); });
|
|
436
|
+
}
|
|
437
|
+
function instantiateArrayBuffer(binaryFile, imports) {
|
|
438
|
+
return tslib_es6.__awaiter(this, void 0, void 0, function* () { try {
|
|
439
|
+
var binary = yield getWasmBinary(binaryFile);
|
|
440
|
+
var instance = yield WebAssembly.instantiate(binary, imports);
|
|
441
|
+
return instance;
|
|
442
|
+
}
|
|
443
|
+
catch (reason) {
|
|
444
|
+
err(`failed to asynchronously prepare wasm: ${reason}`);
|
|
445
|
+
abort(reason);
|
|
446
|
+
} });
|
|
447
|
+
}
|
|
448
|
+
function instantiateAsync(binary, binaryFile, imports) {
|
|
449
|
+
return tslib_es6.__awaiter(this, void 0, void 0, function* () { if (!binary && !isFileURI(binaryFile) && !ENVIRONMENT_IS_NODE) {
|
|
450
|
+
try {
|
|
451
|
+
var response = fetch(binaryFile, { credentials: "same-origin" });
|
|
452
|
+
var instantiationResult = yield WebAssembly.instantiateStreaming(response, imports);
|
|
453
|
+
return instantiationResult;
|
|
454
|
+
}
|
|
455
|
+
catch (reason) {
|
|
456
|
+
err(`wasm streaming compile failed: ${reason}`);
|
|
457
|
+
err("falling back to ArrayBuffer instantiation");
|
|
458
|
+
}
|
|
459
|
+
} return instantiateArrayBuffer(binaryFile, imports); });
|
|
460
|
+
}
|
|
461
|
+
function getWasmImports() { var imports = { a: wasmImports }; return imports; }
|
|
462
|
+
function createWasm() {
|
|
463
|
+
return tslib_es6.__awaiter(this, void 0, void 0, function* () { function receiveInstance(instance, module) { wasmExports = instance.exports; assignWasmExports(wasmExports); updateMemoryViews(); return wasmExports; } function receiveInstantiationResult(result) { return receiveInstance(result["instance"]); } var info = getWasmImports(); if (Module["instantiateWasm"]) {
|
|
464
|
+
return new Promise((resolve, reject) => { Module["instantiateWasm"](info, (inst, mod) => { resolve(receiveInstance(inst)); }); });
|
|
465
|
+
} wasmBinaryFile !== null && wasmBinaryFile !== void 0 ? wasmBinaryFile : (wasmBinaryFile = findWasmBinary()); var result = yield instantiateAsync(wasmBinary, wasmBinaryFile, info); var exports$1 = receiveInstantiationResult(result); return exports$1; });
|
|
466
|
+
}
|
|
467
|
+
var callRuntimeCallbacks = callbacks => { while (callbacks.length > 0) {
|
|
468
|
+
callbacks.shift()(Module);
|
|
469
|
+
} };
|
|
470
|
+
var onPostRuns = [];
|
|
471
|
+
var addOnPostRun = cb => onPostRuns.push(cb);
|
|
472
|
+
var onPreRuns = [];
|
|
473
|
+
var addOnPreRun = cb => onPreRuns.push(cb);
|
|
474
|
+
var stackRestore = val => __emscripten_stack_restore(val);
|
|
475
|
+
var stackSave = () => _emscripten_stack_get_current();
|
|
476
|
+
var syscallGetVarargI = () => { var ret = HEAP32[+SYSCALLS.varargs >> 2]; SYSCALLS.varargs += 4; return ret; };
|
|
477
|
+
var PATH = { isAbs: path => path.charAt(0) === "/", splitPath: filename => { var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; return splitPathRe.exec(filename).slice(1); }, normalizeArray: (parts, allowAboveRoot) => { var up = 0; for (var i = parts.length - 1; i >= 0; i--) {
|
|
478
|
+
var last = parts[i];
|
|
479
|
+
if (last === ".") {
|
|
480
|
+
parts.splice(i, 1);
|
|
481
|
+
}
|
|
482
|
+
else if (last === "..") {
|
|
483
|
+
parts.splice(i, 1);
|
|
484
|
+
up++;
|
|
485
|
+
}
|
|
486
|
+
else if (up) {
|
|
487
|
+
parts.splice(i, 1);
|
|
488
|
+
up--;
|
|
489
|
+
}
|
|
490
|
+
} if (allowAboveRoot) {
|
|
491
|
+
for (; up; up--) {
|
|
492
|
+
parts.unshift("..");
|
|
493
|
+
}
|
|
494
|
+
} return parts; }, normalize: path => { var isAbsolute = PATH.isAbs(path), trailingSlash = path.slice(-1) === "/"; path = PATH.normalizeArray(path.split("/").filter(p => !!p), !isAbsolute).join("/"); if (!path && !isAbsolute) {
|
|
495
|
+
path = ".";
|
|
496
|
+
} if (path && trailingSlash) {
|
|
497
|
+
path += "/";
|
|
498
|
+
} return (isAbsolute ? "/" : "") + path; }, dirname: path => { var result = PATH.splitPath(path), root = result[0], dir = result[1]; if (!root && !dir) {
|
|
499
|
+
return ".";
|
|
500
|
+
} if (dir) {
|
|
501
|
+
dir = dir.slice(0, -1);
|
|
502
|
+
} return root + dir; }, basename: path => path && path.match(/([^\/]+|\/)\/*$/)[1], join: (...paths) => PATH.normalize(paths.join("/")), join2: (l, r) => PATH.normalize(l + "/" + r) };
|
|
503
|
+
var initRandomFill = () => { if (ENVIRONMENT_IS_NODE) {
|
|
504
|
+
var nodeCrypto = require$1("node:crypto");
|
|
505
|
+
return view => nodeCrypto.randomFillSync(view);
|
|
506
|
+
} return view => crypto.getRandomValues(view); };
|
|
507
|
+
var randomFill = view => { (randomFill = initRandomFill())(view); };
|
|
508
|
+
var PATH_FS = { resolve: (...args) => { var resolvedPath = "", resolvedAbsolute = false; for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {
|
|
509
|
+
var path = i >= 0 ? args[i] : FS.cwd();
|
|
510
|
+
if (typeof path != "string") {
|
|
511
|
+
throw new TypeError("Arguments to path.resolve must be strings");
|
|
512
|
+
}
|
|
513
|
+
else if (!path) {
|
|
514
|
+
return "";
|
|
515
|
+
}
|
|
516
|
+
resolvedPath = path + "/" + resolvedPath;
|
|
517
|
+
resolvedAbsolute = PATH.isAbs(path);
|
|
518
|
+
} resolvedPath = PATH.normalizeArray(resolvedPath.split("/").filter(p => !!p), !resolvedAbsolute).join("/"); return (resolvedAbsolute ? "/" : "") + resolvedPath || "."; }, relative: (from, to) => { from = PATH_FS.resolve(from).slice(1); to = PATH_FS.resolve(to).slice(1); function trim(arr) { var start = 0; for (; start < arr.length; start++) {
|
|
519
|
+
if (arr[start] !== "")
|
|
520
|
+
break;
|
|
521
|
+
} var end = arr.length - 1; for (; end >= 0; end--) {
|
|
522
|
+
if (arr[end] !== "")
|
|
523
|
+
break;
|
|
524
|
+
} if (start > end)
|
|
525
|
+
return []; return arr.slice(start, end - start + 1); } var fromParts = trim(from.split("/")); var toParts = trim(to.split("/")); var length = Math.min(fromParts.length, toParts.length); var samePartsLength = length; for (var i = 0; i < length; i++) {
|
|
526
|
+
if (fromParts[i] !== toParts[i]) {
|
|
527
|
+
samePartsLength = i;
|
|
528
|
+
break;
|
|
529
|
+
}
|
|
530
|
+
} var outputParts = []; for (var i = samePartsLength; i < fromParts.length; i++) {
|
|
531
|
+
outputParts.push("..");
|
|
532
|
+
} outputParts = outputParts.concat(toParts.slice(samePartsLength)); return outputParts.join("/"); } };
|
|
533
|
+
var UTF8Decoder = globalThis.TextDecoder && new TextDecoder;
|
|
534
|
+
var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var maxIdx = idx + maxBytesToRead; while (heapOrArray[idx] && !(idx >= maxIdx))
|
|
535
|
+
++idx; return idx; };
|
|
536
|
+
var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead, ignoreNul) => { var endPtr = findStringEnd(heapOrArray, idx, maxBytesToRead); if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {
|
|
537
|
+
return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));
|
|
538
|
+
} var str = ""; while (idx < endPtr) {
|
|
539
|
+
var u0 = heapOrArray[idx++];
|
|
540
|
+
if (!(u0 & 128)) {
|
|
541
|
+
str += String.fromCharCode(u0);
|
|
542
|
+
continue;
|
|
543
|
+
}
|
|
544
|
+
var u1 = heapOrArray[idx++] & 63;
|
|
545
|
+
if ((u0 & 224) == 192) {
|
|
546
|
+
str += String.fromCharCode((u0 & 31) << 6 | u1);
|
|
547
|
+
continue;
|
|
548
|
+
}
|
|
549
|
+
var u2 = heapOrArray[idx++] & 63;
|
|
550
|
+
if ((u0 & 240) == 224) {
|
|
551
|
+
u0 = (u0 & 15) << 12 | u1 << 6 | u2;
|
|
552
|
+
}
|
|
553
|
+
else {
|
|
554
|
+
u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heapOrArray[idx++] & 63;
|
|
555
|
+
}
|
|
556
|
+
if (u0 < 65536) {
|
|
557
|
+
str += String.fromCharCode(u0);
|
|
558
|
+
}
|
|
559
|
+
else {
|
|
560
|
+
var ch = u0 - 65536;
|
|
561
|
+
str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023);
|
|
562
|
+
}
|
|
563
|
+
} return str; };
|
|
564
|
+
var FS_stdin_getChar_buffer = [];
|
|
565
|
+
var lengthBytesUTF8 = str => { var len = 0; for (var i = 0; i < str.length; ++i) {
|
|
566
|
+
var c = str.charCodeAt(i);
|
|
567
|
+
if (c <= 127) {
|
|
568
|
+
len++;
|
|
569
|
+
}
|
|
570
|
+
else if (c <= 2047) {
|
|
571
|
+
len += 2;
|
|
572
|
+
}
|
|
573
|
+
else if (c >= 55296 && c <= 57343) {
|
|
574
|
+
len += 4;
|
|
575
|
+
++i;
|
|
576
|
+
}
|
|
577
|
+
else {
|
|
578
|
+
len += 3;
|
|
579
|
+
}
|
|
580
|
+
} return len; };
|
|
581
|
+
var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { if (!(maxBytesToWrite > 0))
|
|
582
|
+
return 0; var startIdx = outIdx; var endIdx = outIdx + maxBytesToWrite - 1; for (var i = 0; i < str.length; ++i) {
|
|
583
|
+
var u = str.codePointAt(i);
|
|
584
|
+
if (u <= 127) {
|
|
585
|
+
if (outIdx >= endIdx)
|
|
586
|
+
break;
|
|
587
|
+
heap[outIdx++] = u;
|
|
588
|
+
}
|
|
589
|
+
else if (u <= 2047) {
|
|
590
|
+
if (outIdx + 1 >= endIdx)
|
|
591
|
+
break;
|
|
592
|
+
heap[outIdx++] = 192 | u >> 6;
|
|
593
|
+
heap[outIdx++] = 128 | u & 63;
|
|
594
|
+
}
|
|
595
|
+
else if (u <= 65535) {
|
|
596
|
+
if (outIdx + 2 >= endIdx)
|
|
597
|
+
break;
|
|
598
|
+
heap[outIdx++] = 224 | u >> 12;
|
|
599
|
+
heap[outIdx++] = 128 | u >> 6 & 63;
|
|
600
|
+
heap[outIdx++] = 128 | u & 63;
|
|
601
|
+
}
|
|
602
|
+
else {
|
|
603
|
+
if (outIdx + 3 >= endIdx)
|
|
604
|
+
break;
|
|
605
|
+
heap[outIdx++] = 240 | u >> 18;
|
|
606
|
+
heap[outIdx++] = 128 | u >> 12 & 63;
|
|
607
|
+
heap[outIdx++] = 128 | u >> 6 & 63;
|
|
608
|
+
heap[outIdx++] = 128 | u & 63;
|
|
609
|
+
i++;
|
|
610
|
+
}
|
|
611
|
+
} heap[outIdx] = 0; return outIdx - startIdx; };
|
|
612
|
+
var intArrayFromString = (stringy, dontAddNull, length) => { var len = lengthBytesUTF8(stringy) + 1; var u8array = new Array(len); var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); u8array.length = numBytesWritten; return u8array; };
|
|
613
|
+
var FS_stdin_getChar = () => { var _a; if (!FS_stdin_getChar_buffer.length) {
|
|
614
|
+
var result = null;
|
|
615
|
+
if (ENVIRONMENT_IS_NODE) {
|
|
616
|
+
var BUFSIZE = 256;
|
|
617
|
+
var buf = Buffer.alloc(BUFSIZE);
|
|
618
|
+
var bytesRead = 0;
|
|
619
|
+
var fd = process.stdin.fd;
|
|
620
|
+
try {
|
|
621
|
+
bytesRead = fs.readSync(fd, buf, 0, BUFSIZE);
|
|
622
|
+
}
|
|
623
|
+
catch (e) {
|
|
624
|
+
if (e.toString().includes("EOF"))
|
|
625
|
+
bytesRead = 0;
|
|
626
|
+
else
|
|
627
|
+
throw e;
|
|
628
|
+
}
|
|
629
|
+
if (bytesRead > 0) {
|
|
630
|
+
result = buf.slice(0, bytesRead).toString("utf-8");
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
else if ((_a = globalThis.window) === null || _a === void 0 ? void 0 : _a.prompt) {
|
|
634
|
+
result = window.prompt("Input: ");
|
|
635
|
+
if (result !== null) {
|
|
636
|
+
result += "\n";
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
else ;
|
|
640
|
+
if (!result) {
|
|
641
|
+
return null;
|
|
642
|
+
}
|
|
643
|
+
FS_stdin_getChar_buffer = intArrayFromString(result);
|
|
644
|
+
} return FS_stdin_getChar_buffer.shift(); };
|
|
645
|
+
var TTY = { ttys: [], init() { }, shutdown() { }, register(dev, ops) { TTY.ttys[dev] = { input: [], output: [], ops }; FS.registerDevice(dev, TTY.stream_ops); }, stream_ops: { open(stream) { var tty = TTY.ttys[stream.node.rdev]; if (!tty) {
|
|
646
|
+
throw new FS.ErrnoError(43);
|
|
647
|
+
} stream.tty = tty; stream.seekable = false; }, close(stream) { stream.tty.ops.fsync(stream.tty); }, fsync(stream) { stream.tty.ops.fsync(stream.tty); }, read(stream, buffer, offset, length, pos) { if (!stream.tty || !stream.tty.ops.get_char) {
|
|
648
|
+
throw new FS.ErrnoError(60);
|
|
649
|
+
} var bytesRead = 0; for (var i = 0; i < length; i++) {
|
|
650
|
+
var result;
|
|
651
|
+
try {
|
|
652
|
+
result = stream.tty.ops.get_char(stream.tty);
|
|
653
|
+
}
|
|
654
|
+
catch (e) {
|
|
655
|
+
throw new FS.ErrnoError(29);
|
|
656
|
+
}
|
|
657
|
+
if (result === undefined && bytesRead === 0) {
|
|
658
|
+
throw new FS.ErrnoError(6);
|
|
659
|
+
}
|
|
660
|
+
if (result === null || result === undefined)
|
|
661
|
+
break;
|
|
662
|
+
bytesRead++;
|
|
663
|
+
buffer[offset + i] = result;
|
|
664
|
+
} if (bytesRead) {
|
|
665
|
+
stream.node.atime = Date.now();
|
|
666
|
+
} return bytesRead; }, write(stream, buffer, offset, length, pos) { if (!stream.tty || !stream.tty.ops.put_char) {
|
|
667
|
+
throw new FS.ErrnoError(60);
|
|
668
|
+
} try {
|
|
669
|
+
for (var i = 0; i < length; i++) {
|
|
670
|
+
stream.tty.ops.put_char(stream.tty, buffer[offset + i]);
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
catch (e) {
|
|
674
|
+
throw new FS.ErrnoError(29);
|
|
675
|
+
} if (length) {
|
|
676
|
+
stream.node.mtime = stream.node.ctime = Date.now();
|
|
677
|
+
} return i; } }, default_tty_ops: { get_char(tty) { return FS_stdin_getChar(); }, put_char(tty, val) { if (val === null || val === 10) {
|
|
678
|
+
out(UTF8ArrayToString(tty.output));
|
|
679
|
+
tty.output = [];
|
|
680
|
+
}
|
|
681
|
+
else {
|
|
682
|
+
if (val != 0)
|
|
683
|
+
tty.output.push(val);
|
|
684
|
+
} }, fsync(tty) { var _a; if (((_a = tty.output) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
685
|
+
out(UTF8ArrayToString(tty.output));
|
|
686
|
+
tty.output = [];
|
|
687
|
+
} }, ioctl_tcgets(tty) { return { c_iflag: 25856, c_oflag: 5, c_cflag: 191, c_lflag: 35387, c_cc: [3, 28, 127, 21, 4, 0, 1, 0, 17, 19, 26, 0, 18, 15, 23, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }; }, ioctl_tcsets(tty, optional_actions, data) { return 0; }, ioctl_tiocgwinsz(tty) { return [24, 80]; } }, default_tty1_ops: { put_char(tty, val) { if (val === null || val === 10) {
|
|
688
|
+
err(UTF8ArrayToString(tty.output));
|
|
689
|
+
tty.output = [];
|
|
690
|
+
}
|
|
691
|
+
else {
|
|
692
|
+
if (val != 0)
|
|
693
|
+
tty.output.push(val);
|
|
694
|
+
} }, fsync(tty) { var _a; if (((_a = tty.output) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
695
|
+
err(UTF8ArrayToString(tty.output));
|
|
696
|
+
tty.output = [];
|
|
697
|
+
} } } };
|
|
698
|
+
var mmapAlloc = size => { abort(); };
|
|
699
|
+
var MEMFS = { ops_table: null, mount(mount) { return MEMFS.createNode(null, "/", 16895, 0); }, createNode(parent, name, mode, dev) { var _a; if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {
|
|
700
|
+
throw new FS.ErrnoError(63);
|
|
701
|
+
} MEMFS.ops_table || (MEMFS.ops_table = { dir: { node: { getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr, lookup: MEMFS.node_ops.lookup, mknod: MEMFS.node_ops.mknod, rename: MEMFS.node_ops.rename, unlink: MEMFS.node_ops.unlink, rmdir: MEMFS.node_ops.rmdir, readdir: MEMFS.node_ops.readdir, symlink: MEMFS.node_ops.symlink }, stream: { llseek: MEMFS.stream_ops.llseek } }, file: { node: { getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr }, stream: { llseek: MEMFS.stream_ops.llseek, read: MEMFS.stream_ops.read, write: MEMFS.stream_ops.write, mmap: MEMFS.stream_ops.mmap, msync: MEMFS.stream_ops.msync } }, link: { node: { getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr, readlink: MEMFS.node_ops.readlink }, stream: {} }, chrdev: { node: { getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr }, stream: FS.chrdev_stream_ops } }); var node = FS.createNode(parent, name, mode, dev); if (FS.isDir(node.mode)) {
|
|
702
|
+
node.node_ops = MEMFS.ops_table.dir.node;
|
|
703
|
+
node.stream_ops = MEMFS.ops_table.dir.stream;
|
|
704
|
+
node.contents = {};
|
|
705
|
+
}
|
|
706
|
+
else if (FS.isFile(node.mode)) {
|
|
707
|
+
node.node_ops = MEMFS.ops_table.file.node;
|
|
708
|
+
node.stream_ops = MEMFS.ops_table.file.stream;
|
|
709
|
+
node.usedBytes = 0;
|
|
710
|
+
node.contents = (_a = MEMFS.emptyFileContents) !== null && _a !== void 0 ? _a : (MEMFS.emptyFileContents = new Uint8Array(0));
|
|
711
|
+
}
|
|
712
|
+
else if (FS.isLink(node.mode)) {
|
|
713
|
+
node.node_ops = MEMFS.ops_table.link.node;
|
|
714
|
+
node.stream_ops = MEMFS.ops_table.link.stream;
|
|
715
|
+
}
|
|
716
|
+
else if (FS.isChrdev(node.mode)) {
|
|
717
|
+
node.node_ops = MEMFS.ops_table.chrdev.node;
|
|
718
|
+
node.stream_ops = MEMFS.ops_table.chrdev.stream;
|
|
719
|
+
} node.atime = node.mtime = node.ctime = Date.now(); if (parent) {
|
|
720
|
+
parent.contents[name] = node;
|
|
721
|
+
parent.atime = parent.mtime = parent.ctime = node.atime;
|
|
722
|
+
} return node; }, getFileDataAsTypedArray(node) { return node.contents.subarray(0, node.usedBytes); }, expandFileStorage(node, newCapacity) { var prevCapacity = node.contents.length; if (prevCapacity >= newCapacity)
|
|
723
|
+
return; var CAPACITY_DOUBLING_MAX = 1024 * 1024; newCapacity = Math.max(newCapacity, prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125) >>> 0); if (prevCapacity)
|
|
724
|
+
newCapacity = Math.max(newCapacity, 256); var oldContents = MEMFS.getFileDataAsTypedArray(node); node.contents = new Uint8Array(newCapacity); node.contents.set(oldContents); }, resizeFileStorage(node, newSize) { if (node.usedBytes == newSize)
|
|
725
|
+
return; var oldContents = node.contents; node.contents = new Uint8Array(newSize); node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); node.usedBytes = newSize; }, node_ops: { getattr(node) { var attr = {}; attr.dev = FS.isChrdev(node.mode) ? node.id : 1; attr.ino = node.id; attr.mode = node.mode; attr.nlink = 1; attr.uid = 0; attr.gid = 0; attr.rdev = node.rdev; if (FS.isDir(node.mode)) {
|
|
726
|
+
attr.size = 4096;
|
|
727
|
+
}
|
|
728
|
+
else if (FS.isFile(node.mode)) {
|
|
729
|
+
attr.size = node.usedBytes;
|
|
730
|
+
}
|
|
731
|
+
else if (FS.isLink(node.mode)) {
|
|
732
|
+
attr.size = node.link.length;
|
|
733
|
+
}
|
|
734
|
+
else {
|
|
735
|
+
attr.size = 0;
|
|
736
|
+
} attr.atime = new Date(node.atime); attr.mtime = new Date(node.mtime); attr.ctime = new Date(node.ctime); attr.blksize = 4096; attr.blocks = Math.ceil(attr.size / attr.blksize); return attr; }, setattr(node, attr) { for (const key of ["mode", "atime", "mtime", "ctime"]) {
|
|
737
|
+
if (attr[key] != null) {
|
|
738
|
+
node[key] = attr[key];
|
|
739
|
+
}
|
|
740
|
+
} if (attr.size !== undefined) {
|
|
741
|
+
MEMFS.resizeFileStorage(node, attr.size);
|
|
742
|
+
} }, lookup(parent, name) { if (!MEMFS.doesNotExistError) {
|
|
743
|
+
MEMFS.doesNotExistError = new FS.ErrnoError(44);
|
|
744
|
+
MEMFS.doesNotExistError.stack = "<generic error, no stack>";
|
|
745
|
+
} throw MEMFS.doesNotExistError; }, mknod(parent, name, mode, dev) { return MEMFS.createNode(parent, name, mode, dev); }, rename(old_node, new_dir, new_name) { var new_node; try {
|
|
746
|
+
new_node = FS.lookupNode(new_dir, new_name);
|
|
747
|
+
}
|
|
748
|
+
catch (e) { } if (new_node) {
|
|
749
|
+
if (FS.isDir(old_node.mode)) {
|
|
750
|
+
for (var i in new_node.contents) {
|
|
751
|
+
throw new FS.ErrnoError(55);
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
FS.hashRemoveNode(new_node);
|
|
755
|
+
} delete old_node.parent.contents[old_node.name]; new_dir.contents[new_name] = old_node; old_node.name = new_name; new_dir.ctime = new_dir.mtime = old_node.parent.ctime = old_node.parent.mtime = Date.now(); }, unlink(parent, name) { delete parent.contents[name]; parent.ctime = parent.mtime = Date.now(); }, rmdir(parent, name) { var node = FS.lookupNode(parent, name); for (var i in node.contents) {
|
|
756
|
+
throw new FS.ErrnoError(55);
|
|
757
|
+
} delete parent.contents[name]; parent.ctime = parent.mtime = Date.now(); }, readdir(node) { return [".", "..", ...Object.keys(node.contents)]; }, symlink(parent, newname, oldpath) { var node = MEMFS.createNode(parent, newname, 511 | 40960, 0); node.link = oldpath; return node; }, readlink(node) { if (!FS.isLink(node.mode)) {
|
|
758
|
+
throw new FS.ErrnoError(28);
|
|
759
|
+
} return node.link; } }, stream_ops: { read(stream, buffer, offset, length, position) { var contents = stream.node.contents; if (position >= stream.node.usedBytes)
|
|
760
|
+
return 0; var size = Math.min(stream.node.usedBytes - position, length); buffer.set(contents.subarray(position, position + size), offset); return size; }, write(stream, buffer, offset, length, position, canOwn) { if (buffer.buffer === HEAP8.buffer) {
|
|
761
|
+
canOwn = false;
|
|
762
|
+
} if (!length)
|
|
763
|
+
return 0; var node = stream.node; node.mtime = node.ctime = Date.now(); if (canOwn) {
|
|
764
|
+
node.contents = buffer.subarray(offset, offset + length);
|
|
765
|
+
node.usedBytes = length;
|
|
766
|
+
}
|
|
767
|
+
else if (node.usedBytes === 0 && position === 0) {
|
|
768
|
+
node.contents = buffer.slice(offset, offset + length);
|
|
769
|
+
node.usedBytes = length;
|
|
770
|
+
}
|
|
771
|
+
else {
|
|
772
|
+
MEMFS.expandFileStorage(node, position + length);
|
|
773
|
+
node.contents.set(buffer.subarray(offset, offset + length), position);
|
|
774
|
+
node.usedBytes = Math.max(node.usedBytes, position + length);
|
|
775
|
+
} return length; }, llseek(stream, offset, whence) { var position = offset; if (whence === 1) {
|
|
776
|
+
position += stream.position;
|
|
777
|
+
}
|
|
778
|
+
else if (whence === 2) {
|
|
779
|
+
if (FS.isFile(stream.node.mode)) {
|
|
780
|
+
position += stream.node.usedBytes;
|
|
781
|
+
}
|
|
782
|
+
} if (position < 0) {
|
|
783
|
+
throw new FS.ErrnoError(28);
|
|
784
|
+
} return position; }, mmap(stream, length, position, prot, flags) { if (!FS.isFile(stream.node.mode)) {
|
|
785
|
+
throw new FS.ErrnoError(43);
|
|
786
|
+
} var ptr; var allocated; var contents = stream.node.contents; if (!(flags & 2) && contents.buffer === HEAP8.buffer) {
|
|
787
|
+
allocated = false;
|
|
788
|
+
ptr = contents.byteOffset;
|
|
789
|
+
}
|
|
790
|
+
else {
|
|
791
|
+
allocated = true;
|
|
792
|
+
ptr = mmapAlloc();
|
|
793
|
+
if (!ptr) {
|
|
794
|
+
throw new FS.ErrnoError(48);
|
|
795
|
+
}
|
|
796
|
+
if (contents) {
|
|
797
|
+
if (position > 0 || position + length < contents.length) {
|
|
798
|
+
if (contents.subarray) {
|
|
799
|
+
contents = contents.subarray(position, position + length);
|
|
800
|
+
}
|
|
801
|
+
else {
|
|
802
|
+
contents = Array.prototype.slice.call(contents, position, position + length);
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
HEAP8.set(contents, ptr);
|
|
806
|
+
}
|
|
807
|
+
} return { ptr, allocated }; }, msync(stream, buffer, offset, length, mmapFlags) { MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); return 0; } } };
|
|
808
|
+
var FS_modeStringToFlags = str => { if (typeof str != "string")
|
|
809
|
+
return str; var flagModes = { r: 0, "r+": 2, w: 512 | 64 | 1, "w+": 512 | 64 | 2, a: 1024 | 64 | 1, "a+": 1024 | 64 | 2 }; var flags = flagModes[str]; if (typeof flags == "undefined") {
|
|
810
|
+
throw new Error(`Unknown file open mode: ${str}`);
|
|
811
|
+
} return flags; };
|
|
812
|
+
var FS_fileDataToTypedArray = data => { if (typeof data == "string") {
|
|
813
|
+
data = intArrayFromString(data);
|
|
814
|
+
} if (!data.subarray) {
|
|
815
|
+
data = new Uint8Array(data);
|
|
816
|
+
} return data; };
|
|
817
|
+
var FS_getMode = (canRead, canWrite) => { var mode = 0; if (canRead)
|
|
818
|
+
mode |= 292 | 73; if (canWrite)
|
|
819
|
+
mode |= 146; return mode; };
|
|
820
|
+
var asyncLoad = (url) => tslib_es6.__awaiter(this, void 0, void 0, function* () { var arrayBuffer = yield readAsync(url); return new Uint8Array(arrayBuffer); });
|
|
821
|
+
var FS_createDataFile = (...args) => FS.createDataFile(...args);
|
|
822
|
+
var runDependencies = 0;
|
|
823
|
+
var dependenciesFulfilled = null;
|
|
824
|
+
var removeRunDependency = id => { var _a; runDependencies--; (_a = Module["monitorRunDependencies"]) === null || _a === void 0 ? void 0 : _a.call(Module, runDependencies); if (runDependencies == 0) {
|
|
825
|
+
if (dependenciesFulfilled) {
|
|
826
|
+
var callback = dependenciesFulfilled;
|
|
827
|
+
dependenciesFulfilled = null;
|
|
828
|
+
callback();
|
|
829
|
+
}
|
|
830
|
+
} };
|
|
831
|
+
var addRunDependency = id => { var _a; runDependencies++; (_a = Module["monitorRunDependencies"]) === null || _a === void 0 ? void 0 : _a.call(Module, runDependencies); };
|
|
832
|
+
var preloadPlugins = [];
|
|
833
|
+
var FS_handledByPreloadPlugin = (byteArray, fullname) => tslib_es6.__awaiter(this, void 0, void 0, function* () { if (typeof Browser != "undefined")
|
|
834
|
+
Browser.init(); for (var plugin of preloadPlugins) {
|
|
835
|
+
if (plugin["canHandle"](fullname)) {
|
|
836
|
+
return plugin["handle"](byteArray, fullname);
|
|
837
|
+
}
|
|
838
|
+
} return byteArray; });
|
|
839
|
+
var FS_preloadFile = (parent, name, url, canRead, canWrite, dontCreateFile, canOwn, preFinish) => tslib_es6.__awaiter(this, void 0, void 0, function* () { var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; addRunDependency(); try {
|
|
840
|
+
var byteArray = url;
|
|
841
|
+
if (typeof url == "string") {
|
|
842
|
+
byteArray = yield asyncLoad(url);
|
|
843
|
+
}
|
|
844
|
+
byteArray = yield FS_handledByPreloadPlugin(byteArray, fullname);
|
|
845
|
+
preFinish === null || preFinish === void 0 ? void 0 : preFinish();
|
|
846
|
+
if (!dontCreateFile) {
|
|
847
|
+
FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
finally {
|
|
851
|
+
removeRunDependency();
|
|
852
|
+
} });
|
|
853
|
+
var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { FS_preloadFile(parent, name, url, canRead, canWrite, dontCreateFile, canOwn, preFinish).then(onload).catch(onerror); };
|
|
854
|
+
var FS = { root: null, mounts: [], devices: {}, streams: [], nextInode: 1, nameTable: null, currentPath: "/", initialized: false, ignorePermissions: true, filesystems: null, syncFSRequests: 0, ErrnoError: class {
|
|
855
|
+
constructor(errno) {
|
|
856
|
+
this.name = "ErrnoError";
|
|
857
|
+
this.errno = errno;
|
|
858
|
+
}
|
|
859
|
+
}, FSStream: class {
|
|
860
|
+
constructor() {
|
|
861
|
+
this.shared = {};
|
|
862
|
+
}
|
|
863
|
+
get object() { return this.node; }
|
|
864
|
+
set object(val) { this.node = val; }
|
|
865
|
+
get isRead() { return (this.flags & 2097155) !== 1; }
|
|
866
|
+
get isWrite() { return (this.flags & 2097155) !== 0; }
|
|
867
|
+
get isAppend() { return this.flags & 1024; }
|
|
868
|
+
get flags() { return this.shared.flags; }
|
|
869
|
+
set flags(val) { this.shared.flags = val; }
|
|
870
|
+
get position() { return this.shared.position; }
|
|
871
|
+
set position(val) { this.shared.position = val; }
|
|
872
|
+
}, FSNode: class {
|
|
873
|
+
constructor(parent, name, mode, rdev) {
|
|
874
|
+
this.node_ops = {};
|
|
875
|
+
this.stream_ops = {};
|
|
876
|
+
this.readMode = 292 | 73;
|
|
877
|
+
this.writeMode = 146;
|
|
878
|
+
this.mounted = null;
|
|
879
|
+
if (!parent) {
|
|
880
|
+
parent = this;
|
|
881
|
+
}
|
|
882
|
+
this.parent = parent;
|
|
883
|
+
this.mount = parent.mount;
|
|
884
|
+
this.id = FS.nextInode++;
|
|
885
|
+
this.name = name;
|
|
886
|
+
this.mode = mode;
|
|
887
|
+
this.rdev = rdev;
|
|
888
|
+
this.atime = this.mtime = this.ctime = Date.now();
|
|
889
|
+
}
|
|
890
|
+
get read() { return (this.mode & this.readMode) === this.readMode; }
|
|
891
|
+
set read(val) { val ? this.mode |= this.readMode : this.mode &= ~this.readMode; }
|
|
892
|
+
get write() { return (this.mode & this.writeMode) === this.writeMode; }
|
|
893
|
+
set write(val) { val ? this.mode |= this.writeMode : this.mode &= ~this.writeMode; }
|
|
894
|
+
get isFolder() { return FS.isDir(this.mode); }
|
|
895
|
+
get isDevice() { return FS.isChrdev(this.mode); }
|
|
896
|
+
}, lookupPath(path, opts = {}) { var _a; if (!path) {
|
|
897
|
+
throw new FS.ErrnoError(44);
|
|
898
|
+
} (_a = opts.follow_mount) !== null && _a !== void 0 ? _a : (opts.follow_mount = true); if (!PATH.isAbs(path)) {
|
|
899
|
+
path = FS.cwd() + "/" + path;
|
|
900
|
+
} linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) {
|
|
901
|
+
var parts = path.split("/").filter(p => !!p);
|
|
902
|
+
var current = FS.root;
|
|
903
|
+
var current_path = "/";
|
|
904
|
+
for (var i = 0; i < parts.length; i++) {
|
|
905
|
+
var islast = i === parts.length - 1;
|
|
906
|
+
if (islast && opts.parent) {
|
|
907
|
+
break;
|
|
908
|
+
}
|
|
909
|
+
if (parts[i] === ".") {
|
|
910
|
+
continue;
|
|
911
|
+
}
|
|
912
|
+
if (parts[i] === "..") {
|
|
913
|
+
current_path = PATH.dirname(current_path);
|
|
914
|
+
if (FS.isRoot(current)) {
|
|
915
|
+
path = current_path + "/" + parts.slice(i + 1).join("/");
|
|
916
|
+
nlinks--;
|
|
917
|
+
continue linkloop;
|
|
918
|
+
}
|
|
919
|
+
else {
|
|
920
|
+
current = current.parent;
|
|
921
|
+
}
|
|
922
|
+
continue;
|
|
923
|
+
}
|
|
924
|
+
current_path = PATH.join2(current_path, parts[i]);
|
|
925
|
+
try {
|
|
926
|
+
current = FS.lookupNode(current, parts[i]);
|
|
927
|
+
}
|
|
928
|
+
catch (e) {
|
|
929
|
+
if ((e === null || e === void 0 ? void 0 : e.errno) === 44 && islast && opts.noent_okay) {
|
|
930
|
+
return { path: current_path };
|
|
931
|
+
}
|
|
932
|
+
throw e;
|
|
933
|
+
}
|
|
934
|
+
if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) {
|
|
935
|
+
current = current.mounted.root;
|
|
936
|
+
}
|
|
937
|
+
if (FS.isLink(current.mode) && (!islast || opts.follow)) {
|
|
938
|
+
if (!current.node_ops.readlink) {
|
|
939
|
+
throw new FS.ErrnoError(52);
|
|
940
|
+
}
|
|
941
|
+
var link = current.node_ops.readlink(current);
|
|
942
|
+
if (!PATH.isAbs(link)) {
|
|
943
|
+
link = PATH.dirname(current_path) + "/" + link;
|
|
944
|
+
}
|
|
945
|
+
path = link + "/" + parts.slice(i + 1).join("/");
|
|
946
|
+
continue linkloop;
|
|
947
|
+
}
|
|
948
|
+
}
|
|
949
|
+
return { path: current_path, node: current };
|
|
950
|
+
} throw new FS.ErrnoError(32); }, getPath(node) { var path; while (true) {
|
|
951
|
+
if (FS.isRoot(node)) {
|
|
952
|
+
var mount = node.mount.mountpoint;
|
|
953
|
+
if (!path)
|
|
954
|
+
return mount;
|
|
955
|
+
return mount[mount.length - 1] !== "/" ? `${mount}/${path}` : mount + path;
|
|
956
|
+
}
|
|
957
|
+
path = path ? `${node.name}/${path}` : node.name;
|
|
958
|
+
node = node.parent;
|
|
959
|
+
} }, hashName(parentid, name) { var hash = 0; for (var i = 0; i < name.length; i++) {
|
|
960
|
+
hash = (hash << 5) - hash + name.charCodeAt(i) | 0;
|
|
961
|
+
} return (parentid + hash >>> 0) % FS.nameTable.length; }, hashAddNode(node) { var hash = FS.hashName(node.parent.id, node.name); node.name_next = FS.nameTable[hash]; FS.nameTable[hash] = node; }, hashRemoveNode(node) { var hash = FS.hashName(node.parent.id, node.name); if (FS.nameTable[hash] === node) {
|
|
962
|
+
FS.nameTable[hash] = node.name_next;
|
|
963
|
+
}
|
|
964
|
+
else {
|
|
965
|
+
var current = FS.nameTable[hash];
|
|
966
|
+
while (current) {
|
|
967
|
+
if (current.name_next === node) {
|
|
968
|
+
current.name_next = node.name_next;
|
|
969
|
+
break;
|
|
970
|
+
}
|
|
971
|
+
current = current.name_next;
|
|
972
|
+
}
|
|
973
|
+
} }, lookupNode(parent, name) { var errCode = FS.mayLookup(parent); if (errCode) {
|
|
974
|
+
throw new FS.ErrnoError(errCode);
|
|
975
|
+
} var hash = FS.hashName(parent.id, name); for (var node = FS.nameTable[hash]; node; node = node.name_next) {
|
|
976
|
+
var nodeName = node.name;
|
|
977
|
+
if (node.parent.id === parent.id && nodeName === name) {
|
|
978
|
+
return node;
|
|
979
|
+
}
|
|
980
|
+
} return FS.lookup(parent, name); }, createNode(parent, name, mode, rdev) { var node = new FS.FSNode(parent, name, mode, rdev); FS.hashAddNode(node); return node; }, destroyNode(node) { FS.hashRemoveNode(node); }, isRoot(node) { return node === node.parent; }, isMountpoint(node) { return !!node.mounted; }, isFile(mode) { return (mode & 61440) === 32768; }, isDir(mode) { return (mode & 61440) === 16384; }, isLink(mode) { return (mode & 61440) === 40960; }, isChrdev(mode) { return (mode & 61440) === 8192; }, isBlkdev(mode) { return (mode & 61440) === 24576; }, isFIFO(mode) { return (mode & 61440) === 4096; }, isSocket(mode) { return (mode & 49152) === 49152; }, flagsToPermissionString(flag) { var perms = ["r", "w", "rw"][flag & 3]; if (flag & 512) {
|
|
981
|
+
perms += "w";
|
|
982
|
+
} return perms; }, nodePermissions(node, perms) { if (FS.ignorePermissions) {
|
|
983
|
+
return 0;
|
|
984
|
+
} if (perms.includes("r") && !(node.mode & 292)) {
|
|
985
|
+
return 2;
|
|
986
|
+
} if (perms.includes("w") && !(node.mode & 146)) {
|
|
987
|
+
return 2;
|
|
988
|
+
} if (perms.includes("x") && !(node.mode & 73)) {
|
|
989
|
+
return 2;
|
|
990
|
+
} return 0; }, mayLookup(dir) { if (!FS.isDir(dir.mode))
|
|
991
|
+
return 54; var errCode = FS.nodePermissions(dir, "x"); if (errCode)
|
|
992
|
+
return errCode; if (!dir.node_ops.lookup)
|
|
993
|
+
return 2; return 0; }, mayCreate(dir, name) { if (!FS.isDir(dir.mode)) {
|
|
994
|
+
return 54;
|
|
995
|
+
} try {
|
|
996
|
+
var node = FS.lookupNode(dir, name);
|
|
997
|
+
return 20;
|
|
998
|
+
}
|
|
999
|
+
catch (e) { } return FS.nodePermissions(dir, "wx"); }, mayDelete(dir, name, isdir) { var node; try {
|
|
1000
|
+
node = FS.lookupNode(dir, name);
|
|
1001
|
+
}
|
|
1002
|
+
catch (e) {
|
|
1003
|
+
return e.errno;
|
|
1004
|
+
} var errCode = FS.nodePermissions(dir, "wx"); if (errCode) {
|
|
1005
|
+
return errCode;
|
|
1006
|
+
} if (isdir) {
|
|
1007
|
+
if (!FS.isDir(node.mode)) {
|
|
1008
|
+
return 54;
|
|
1009
|
+
}
|
|
1010
|
+
if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {
|
|
1011
|
+
return 10;
|
|
1012
|
+
}
|
|
1013
|
+
}
|
|
1014
|
+
else if (FS.isDir(node.mode)) {
|
|
1015
|
+
return 31;
|
|
1016
|
+
} return 0; }, mayOpen(node, flags) { if (!node) {
|
|
1017
|
+
return 44;
|
|
1018
|
+
} if (FS.isLink(node.mode)) {
|
|
1019
|
+
return 32;
|
|
1020
|
+
} var mode = FS.flagsToPermissionString(flags); if (FS.isDir(node.mode)) {
|
|
1021
|
+
if (mode !== "r" || flags & (512 | 64)) {
|
|
1022
|
+
return 31;
|
|
1023
|
+
}
|
|
1024
|
+
} return FS.nodePermissions(node, mode); }, checkOpExists(op, err) { if (!op) {
|
|
1025
|
+
throw new FS.ErrnoError(err);
|
|
1026
|
+
} return op; }, MAX_OPEN_FDS: 4096, nextfd() { for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) {
|
|
1027
|
+
if (!FS.streams[fd]) {
|
|
1028
|
+
return fd;
|
|
1029
|
+
}
|
|
1030
|
+
} throw new FS.ErrnoError(33); }, getStreamChecked(fd) { var stream = FS.getStream(fd); if (!stream) {
|
|
1031
|
+
throw new FS.ErrnoError(8);
|
|
1032
|
+
} return stream; }, getStream: fd => FS.streams[fd], createStream(stream, fd = -1) { stream = Object.assign(new FS.FSStream, stream); if (fd == -1) {
|
|
1033
|
+
fd = FS.nextfd();
|
|
1034
|
+
} stream.fd = fd; FS.streams[fd] = stream; return stream; }, closeStream(fd) { FS.streams[fd] = null; }, dupStream(origStream, fd = -1) { var _a, _b; var stream = FS.createStream(origStream, fd); (_b = (_a = stream.stream_ops) === null || _a === void 0 ? void 0 : _a.dup) === null || _b === void 0 ? void 0 : _b.call(_a, stream); return stream; }, doSetAttr(stream, node, attr) { var setattr = stream === null || stream === void 0 ? void 0 : stream.stream_ops.setattr; var arg = setattr ? stream : node; setattr !== null && setattr !== void 0 ? setattr : (setattr = node.node_ops.setattr); FS.checkOpExists(setattr, 63); setattr(arg, attr); }, chrdev_stream_ops: { open(stream) { var _a, _b; var device = FS.getDevice(stream.node.rdev); stream.stream_ops = device.stream_ops; (_b = (_a = stream.stream_ops).open) === null || _b === void 0 ? void 0 : _b.call(_a, stream); }, llseek() { throw new FS.ErrnoError(70); } }, major: dev => dev >> 8, minor: dev => dev & 255, makedev: (ma, mi) => ma << 8 | mi, registerDevice(dev, ops) { FS.devices[dev] = { stream_ops: ops }; }, getDevice: dev => FS.devices[dev], getMounts(mount) { var mounts = []; var check = [mount]; while (check.length) {
|
|
1035
|
+
var m = check.pop();
|
|
1036
|
+
mounts.push(m);
|
|
1037
|
+
check.push(...m.mounts);
|
|
1038
|
+
} return mounts; }, syncfs(populate, callback) { if (typeof populate == "function") {
|
|
1039
|
+
callback = populate;
|
|
1040
|
+
populate = false;
|
|
1041
|
+
} FS.syncFSRequests++; if (FS.syncFSRequests > 1) {
|
|
1042
|
+
err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);
|
|
1043
|
+
} var mounts = FS.getMounts(FS.root.mount); var completed = 0; function doCallback(errCode) { FS.syncFSRequests--; return callback(errCode); } function done(errCode) { if (errCode) {
|
|
1044
|
+
if (!done.errored) {
|
|
1045
|
+
done.errored = true;
|
|
1046
|
+
return doCallback(errCode);
|
|
1047
|
+
}
|
|
1048
|
+
return;
|
|
1049
|
+
} if (++completed >= mounts.length) {
|
|
1050
|
+
doCallback(null);
|
|
1051
|
+
} } for (var mount of mounts) {
|
|
1052
|
+
if (mount.type.syncfs) {
|
|
1053
|
+
mount.type.syncfs(mount, populate, done);
|
|
1054
|
+
}
|
|
1055
|
+
else {
|
|
1056
|
+
done(null);
|
|
1057
|
+
}
|
|
1058
|
+
} }, mount(type, opts, mountpoint) { var root = mountpoint === "/"; var pseudo = !mountpoint; var node; if (root && FS.root) {
|
|
1059
|
+
throw new FS.ErrnoError(10);
|
|
1060
|
+
}
|
|
1061
|
+
else if (!root && !pseudo) {
|
|
1062
|
+
var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
|
|
1063
|
+
mountpoint = lookup.path;
|
|
1064
|
+
node = lookup.node;
|
|
1065
|
+
if (FS.isMountpoint(node)) {
|
|
1066
|
+
throw new FS.ErrnoError(10);
|
|
1067
|
+
}
|
|
1068
|
+
if (!FS.isDir(node.mode)) {
|
|
1069
|
+
throw new FS.ErrnoError(54);
|
|
1070
|
+
}
|
|
1071
|
+
} var mount = { type, opts, mountpoint, mounts: [] }; var mountRoot = type.mount(mount); mountRoot.mount = mount; mount.root = mountRoot; if (root) {
|
|
1072
|
+
FS.root = mountRoot;
|
|
1073
|
+
}
|
|
1074
|
+
else if (node) {
|
|
1075
|
+
node.mounted = mount;
|
|
1076
|
+
if (node.mount) {
|
|
1077
|
+
node.mount.mounts.push(mount);
|
|
1078
|
+
}
|
|
1079
|
+
} return mountRoot; }, unmount(mountpoint) { var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); if (!FS.isMountpoint(lookup.node)) {
|
|
1080
|
+
throw new FS.ErrnoError(28);
|
|
1081
|
+
} var node = lookup.node; var mount = node.mounted; var mounts = FS.getMounts(mount); for (var [hash, current] of Object.entries(FS.nameTable)) {
|
|
1082
|
+
while (current) {
|
|
1083
|
+
var next = current.name_next;
|
|
1084
|
+
if (mounts.includes(current.mount)) {
|
|
1085
|
+
FS.destroyNode(current);
|
|
1086
|
+
}
|
|
1087
|
+
current = next;
|
|
1088
|
+
}
|
|
1089
|
+
} node.mounted = null; var idx = node.mount.mounts.indexOf(mount); node.mount.mounts.splice(idx, 1); }, lookup(parent, name) { return parent.node_ops.lookup(parent, name); }, mknod(path, mode, dev) { var lookup = FS.lookupPath(path, { parent: true }); var parent = lookup.node; var name = PATH.basename(path); if (!name) {
|
|
1090
|
+
throw new FS.ErrnoError(28);
|
|
1091
|
+
} if (name === "." || name === "..") {
|
|
1092
|
+
throw new FS.ErrnoError(20);
|
|
1093
|
+
} var errCode = FS.mayCreate(parent, name); if (errCode) {
|
|
1094
|
+
throw new FS.ErrnoError(errCode);
|
|
1095
|
+
} if (!parent.node_ops.mknod) {
|
|
1096
|
+
throw new FS.ErrnoError(63);
|
|
1097
|
+
} return parent.node_ops.mknod(parent, name, mode, dev); }, statfs(path) { return FS.statfsNode(FS.lookupPath(path, { follow: true }).node); }, statfsStream(stream) { return FS.statfsNode(stream.node); }, statfsNode(node) { var rtn = { bsize: 4096, frsize: 4096, blocks: 1e6, bfree: 5e5, bavail: 5e5, files: FS.nextInode, ffree: FS.nextInode - 1, fsid: 42, flags: 2, namelen: 255 }; if (node.node_ops.statfs) {
|
|
1098
|
+
Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root));
|
|
1099
|
+
} return rtn; }, create(path, mode = 438) { mode &= 4095; mode |= 32768; return FS.mknod(path, mode, 0); }, mkdir(path, mode = 511) { mode &= 511 | 512; mode |= 16384; return FS.mknod(path, mode, 0); }, mkdirTree(path, mode) { var dirs = path.split("/"); var d = ""; for (var dir of dirs) {
|
|
1100
|
+
if (!dir)
|
|
1101
|
+
continue;
|
|
1102
|
+
if (d || PATH.isAbs(path))
|
|
1103
|
+
d += "/";
|
|
1104
|
+
d += dir;
|
|
1105
|
+
try {
|
|
1106
|
+
FS.mkdir(d, mode);
|
|
1107
|
+
}
|
|
1108
|
+
catch (e) {
|
|
1109
|
+
if (e.errno != 20)
|
|
1110
|
+
throw e;
|
|
1111
|
+
}
|
|
1112
|
+
} }, mkdev(path, mode, dev) { if (typeof dev == "undefined") {
|
|
1113
|
+
dev = mode;
|
|
1114
|
+
mode = 438;
|
|
1115
|
+
} mode |= 8192; return FS.mknod(path, mode, dev); }, symlink(oldpath, newpath) { if (!PATH_FS.resolve(oldpath)) {
|
|
1116
|
+
throw new FS.ErrnoError(44);
|
|
1117
|
+
} var lookup = FS.lookupPath(newpath, { parent: true }); var parent = lookup.node; if (!parent) {
|
|
1118
|
+
throw new FS.ErrnoError(44);
|
|
1119
|
+
} var newname = PATH.basename(newpath); var errCode = FS.mayCreate(parent, newname); if (errCode) {
|
|
1120
|
+
throw new FS.ErrnoError(errCode);
|
|
1121
|
+
} if (!parent.node_ops.symlink) {
|
|
1122
|
+
throw new FS.ErrnoError(63);
|
|
1123
|
+
} return parent.node_ops.symlink(parent, newname, oldpath); }, rename(old_path, new_path) { var old_dirname = PATH.dirname(old_path); var new_dirname = PATH.dirname(new_path); var old_name = PATH.basename(old_path); var new_name = PATH.basename(new_path); var lookup, old_dir, new_dir; lookup = FS.lookupPath(old_path, { parent: true }); old_dir = lookup.node; lookup = FS.lookupPath(new_path, { parent: true }); new_dir = lookup.node; if (!old_dir || !new_dir)
|
|
1124
|
+
throw new FS.ErrnoError(44); if (old_dir.mount !== new_dir.mount) {
|
|
1125
|
+
throw new FS.ErrnoError(75);
|
|
1126
|
+
} var old_node = FS.lookupNode(old_dir, old_name); var relative = PATH_FS.relative(old_path, new_dirname); if (relative.charAt(0) !== ".") {
|
|
1127
|
+
throw new FS.ErrnoError(28);
|
|
1128
|
+
} relative = PATH_FS.relative(new_path, old_dirname); if (relative.charAt(0) !== ".") {
|
|
1129
|
+
throw new FS.ErrnoError(55);
|
|
1130
|
+
} var new_node; try {
|
|
1131
|
+
new_node = FS.lookupNode(new_dir, new_name);
|
|
1132
|
+
}
|
|
1133
|
+
catch (e) { } if (old_node === new_node) {
|
|
1134
|
+
return;
|
|
1135
|
+
} var isdir = FS.isDir(old_node.mode); var errCode = FS.mayDelete(old_dir, old_name, isdir); if (errCode) {
|
|
1136
|
+
throw new FS.ErrnoError(errCode);
|
|
1137
|
+
} errCode = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name); if (errCode) {
|
|
1138
|
+
throw new FS.ErrnoError(errCode);
|
|
1139
|
+
} if (!old_dir.node_ops.rename) {
|
|
1140
|
+
throw new FS.ErrnoError(63);
|
|
1141
|
+
} if (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node)) {
|
|
1142
|
+
throw new FS.ErrnoError(10);
|
|
1143
|
+
} if (new_dir !== old_dir) {
|
|
1144
|
+
errCode = FS.nodePermissions(old_dir, "w");
|
|
1145
|
+
if (errCode) {
|
|
1146
|
+
throw new FS.ErrnoError(errCode);
|
|
1147
|
+
}
|
|
1148
|
+
} FS.hashRemoveNode(old_node); try {
|
|
1149
|
+
old_dir.node_ops.rename(old_node, new_dir, new_name);
|
|
1150
|
+
old_node.parent = new_dir;
|
|
1151
|
+
}
|
|
1152
|
+
catch (e) {
|
|
1153
|
+
throw e;
|
|
1154
|
+
}
|
|
1155
|
+
finally {
|
|
1156
|
+
FS.hashAddNode(old_node);
|
|
1157
|
+
} }, rmdir(path) { var lookup = FS.lookupPath(path, { parent: true }); var parent = lookup.node; var name = PATH.basename(path); var node = FS.lookupNode(parent, name); var errCode = FS.mayDelete(parent, name, true); if (errCode) {
|
|
1158
|
+
throw new FS.ErrnoError(errCode);
|
|
1159
|
+
} if (!parent.node_ops.rmdir) {
|
|
1160
|
+
throw new FS.ErrnoError(63);
|
|
1161
|
+
} if (FS.isMountpoint(node)) {
|
|
1162
|
+
throw new FS.ErrnoError(10);
|
|
1163
|
+
} parent.node_ops.rmdir(parent, name); FS.destroyNode(node); }, readdir(path) { var lookup = FS.lookupPath(path, { follow: true }); var node = lookup.node; var readdir = FS.checkOpExists(node.node_ops.readdir, 54); return readdir(node); }, unlink(path) { var lookup = FS.lookupPath(path, { parent: true }); var parent = lookup.node; if (!parent) {
|
|
1164
|
+
throw new FS.ErrnoError(44);
|
|
1165
|
+
} var name = PATH.basename(path); var node = FS.lookupNode(parent, name); var errCode = FS.mayDelete(parent, name, false); if (errCode) {
|
|
1166
|
+
throw new FS.ErrnoError(errCode);
|
|
1167
|
+
} if (!parent.node_ops.unlink) {
|
|
1168
|
+
throw new FS.ErrnoError(63);
|
|
1169
|
+
} if (FS.isMountpoint(node)) {
|
|
1170
|
+
throw new FS.ErrnoError(10);
|
|
1171
|
+
} parent.node_ops.unlink(parent, name); FS.destroyNode(node); }, readlink(path) { var lookup = FS.lookupPath(path); var link = lookup.node; if (!link) {
|
|
1172
|
+
throw new FS.ErrnoError(44);
|
|
1173
|
+
} if (!link.node_ops.readlink) {
|
|
1174
|
+
throw new FS.ErrnoError(28);
|
|
1175
|
+
} return link.node_ops.readlink(link); }, stat(path, dontFollow) { var lookup = FS.lookupPath(path, { follow: !dontFollow }); var node = lookup.node; var getattr = FS.checkOpExists(node.node_ops.getattr, 63); return getattr(node); }, fstat(fd) { var stream = FS.getStreamChecked(fd); var node = stream.node; var getattr = stream.stream_ops.getattr; var arg = getattr ? stream : node; getattr !== null && getattr !== void 0 ? getattr : (getattr = node.node_ops.getattr); FS.checkOpExists(getattr, 63); return getattr(arg); }, lstat(path) { return FS.stat(path, true); }, doChmod(stream, node, mode, dontFollow) { FS.doSetAttr(stream, node, { mode: mode & 4095 | node.mode & -4096, ctime: Date.now(), dontFollow }); }, chmod(path, mode, dontFollow) { var node; if (typeof path == "string") {
|
|
1176
|
+
var lookup = FS.lookupPath(path, { follow: !dontFollow });
|
|
1177
|
+
node = lookup.node;
|
|
1178
|
+
}
|
|
1179
|
+
else {
|
|
1180
|
+
node = path;
|
|
1181
|
+
} FS.doChmod(null, node, mode, dontFollow); }, lchmod(path, mode) { FS.chmod(path, mode, true); }, fchmod(fd, mode) { var stream = FS.getStreamChecked(fd); FS.doChmod(stream, stream.node, mode, false); }, doChown(stream, node, dontFollow) { FS.doSetAttr(stream, node, { timestamp: Date.now(), dontFollow }); }, chown(path, uid, gid, dontFollow) { var node; if (typeof path == "string") {
|
|
1182
|
+
var lookup = FS.lookupPath(path, { follow: !dontFollow });
|
|
1183
|
+
node = lookup.node;
|
|
1184
|
+
}
|
|
1185
|
+
else {
|
|
1186
|
+
node = path;
|
|
1187
|
+
} FS.doChown(null, node, dontFollow); }, lchown(path, uid, gid) { FS.chown(path, uid, gid, true); }, fchown(fd, uid, gid) { var stream = FS.getStreamChecked(fd); FS.doChown(stream, stream.node, false); }, doTruncate(stream, node, len) { if (FS.isDir(node.mode)) {
|
|
1188
|
+
throw new FS.ErrnoError(31);
|
|
1189
|
+
} if (!FS.isFile(node.mode)) {
|
|
1190
|
+
throw new FS.ErrnoError(28);
|
|
1191
|
+
} var errCode = FS.nodePermissions(node, "w"); if (errCode) {
|
|
1192
|
+
throw new FS.ErrnoError(errCode);
|
|
1193
|
+
} FS.doSetAttr(stream, node, { size: len, timestamp: Date.now() }); }, truncate(path, len) { if (len < 0) {
|
|
1194
|
+
throw new FS.ErrnoError(28);
|
|
1195
|
+
} var node; if (typeof path == "string") {
|
|
1196
|
+
var lookup = FS.lookupPath(path, { follow: true });
|
|
1197
|
+
node = lookup.node;
|
|
1198
|
+
}
|
|
1199
|
+
else {
|
|
1200
|
+
node = path;
|
|
1201
|
+
} FS.doTruncate(null, node, len); }, ftruncate(fd, len) { var stream = FS.getStreamChecked(fd); if (len < 0 || (stream.flags & 2097155) === 0) {
|
|
1202
|
+
throw new FS.ErrnoError(28);
|
|
1203
|
+
} FS.doTruncate(stream, stream.node, len); }, utime(path, atime, mtime) { var lookup = FS.lookupPath(path, { follow: true }); var node = lookup.node; var setattr = FS.checkOpExists(node.node_ops.setattr, 63); setattr(node, { atime, mtime }); }, open(path, flags, mode = 438) { if (path === "") {
|
|
1204
|
+
throw new FS.ErrnoError(44);
|
|
1205
|
+
} flags = FS_modeStringToFlags(flags); if (flags & 64) {
|
|
1206
|
+
mode = mode & 4095 | 32768;
|
|
1207
|
+
}
|
|
1208
|
+
else {
|
|
1209
|
+
mode = 0;
|
|
1210
|
+
} var node; var isDirPath; if (typeof path == "object") {
|
|
1211
|
+
node = path;
|
|
1212
|
+
}
|
|
1213
|
+
else {
|
|
1214
|
+
isDirPath = path.endsWith("/");
|
|
1215
|
+
var lookup = FS.lookupPath(path, { follow: !(flags & 131072), noent_okay: true });
|
|
1216
|
+
node = lookup.node;
|
|
1217
|
+
path = lookup.path;
|
|
1218
|
+
} var created = false; if (flags & 64) {
|
|
1219
|
+
if (node) {
|
|
1220
|
+
if (flags & 128) {
|
|
1221
|
+
throw new FS.ErrnoError(20);
|
|
1222
|
+
}
|
|
1223
|
+
}
|
|
1224
|
+
else if (isDirPath) {
|
|
1225
|
+
throw new FS.ErrnoError(31);
|
|
1226
|
+
}
|
|
1227
|
+
else {
|
|
1228
|
+
node = FS.mknod(path, mode | 511, 0);
|
|
1229
|
+
created = true;
|
|
1230
|
+
}
|
|
1231
|
+
} if (!node) {
|
|
1232
|
+
throw new FS.ErrnoError(44);
|
|
1233
|
+
} if (FS.isChrdev(node.mode)) {
|
|
1234
|
+
flags &= -513;
|
|
1235
|
+
} if (flags & 65536 && !FS.isDir(node.mode)) {
|
|
1236
|
+
throw new FS.ErrnoError(54);
|
|
1237
|
+
} if (!created) {
|
|
1238
|
+
var errCode = FS.mayOpen(node, flags);
|
|
1239
|
+
if (errCode) {
|
|
1240
|
+
throw new FS.ErrnoError(errCode);
|
|
1241
|
+
}
|
|
1242
|
+
} if (flags & 512 && !created) {
|
|
1243
|
+
FS.truncate(node, 0);
|
|
1244
|
+
} flags &= -131713; var stream = FS.createStream({ node, path: FS.getPath(node), flags, seekable: true, position: 0, stream_ops: node.stream_ops, ungotten: [], error: false }); if (stream.stream_ops.open) {
|
|
1245
|
+
stream.stream_ops.open(stream);
|
|
1246
|
+
} if (created) {
|
|
1247
|
+
FS.chmod(node, mode & 511);
|
|
1248
|
+
} return stream; }, close(stream) { if (FS.isClosed(stream)) {
|
|
1249
|
+
throw new FS.ErrnoError(8);
|
|
1250
|
+
} if (stream.getdents)
|
|
1251
|
+
stream.getdents = null; try {
|
|
1252
|
+
if (stream.stream_ops.close) {
|
|
1253
|
+
stream.stream_ops.close(stream);
|
|
1254
|
+
}
|
|
1255
|
+
}
|
|
1256
|
+
catch (e) {
|
|
1257
|
+
throw e;
|
|
1258
|
+
}
|
|
1259
|
+
finally {
|
|
1260
|
+
FS.closeStream(stream.fd);
|
|
1261
|
+
} stream.fd = null; }, isClosed(stream) { return stream.fd === null; }, llseek(stream, offset, whence) { if (FS.isClosed(stream)) {
|
|
1262
|
+
throw new FS.ErrnoError(8);
|
|
1263
|
+
} if (!stream.seekable || !stream.stream_ops.llseek) {
|
|
1264
|
+
throw new FS.ErrnoError(70);
|
|
1265
|
+
} if (whence != 0 && whence != 1 && whence != 2) {
|
|
1266
|
+
throw new FS.ErrnoError(28);
|
|
1267
|
+
} stream.position = stream.stream_ops.llseek(stream, offset, whence); stream.ungotten = []; return stream.position; }, read(stream, buffer, offset, length, position) { if (length < 0 || position < 0) {
|
|
1268
|
+
throw new FS.ErrnoError(28);
|
|
1269
|
+
} if (FS.isClosed(stream)) {
|
|
1270
|
+
throw new FS.ErrnoError(8);
|
|
1271
|
+
} if ((stream.flags & 2097155) === 1) {
|
|
1272
|
+
throw new FS.ErrnoError(8);
|
|
1273
|
+
} if (FS.isDir(stream.node.mode)) {
|
|
1274
|
+
throw new FS.ErrnoError(31);
|
|
1275
|
+
} if (!stream.stream_ops.read) {
|
|
1276
|
+
throw new FS.ErrnoError(28);
|
|
1277
|
+
} var seeking = typeof position != "undefined"; if (!seeking) {
|
|
1278
|
+
position = stream.position;
|
|
1279
|
+
}
|
|
1280
|
+
else if (!stream.seekable) {
|
|
1281
|
+
throw new FS.ErrnoError(70);
|
|
1282
|
+
} var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); if (!seeking)
|
|
1283
|
+
stream.position += bytesRead; return bytesRead; }, write(stream, buffer, offset, length, position, canOwn) { if (length < 0 || position < 0) {
|
|
1284
|
+
throw new FS.ErrnoError(28);
|
|
1285
|
+
} if (FS.isClosed(stream)) {
|
|
1286
|
+
throw new FS.ErrnoError(8);
|
|
1287
|
+
} if ((stream.flags & 2097155) === 0) {
|
|
1288
|
+
throw new FS.ErrnoError(8);
|
|
1289
|
+
} if (FS.isDir(stream.node.mode)) {
|
|
1290
|
+
throw new FS.ErrnoError(31);
|
|
1291
|
+
} if (!stream.stream_ops.write) {
|
|
1292
|
+
throw new FS.ErrnoError(28);
|
|
1293
|
+
} if (stream.seekable && stream.flags & 1024) {
|
|
1294
|
+
FS.llseek(stream, 0, 2);
|
|
1295
|
+
} var seeking = typeof position != "undefined"; if (!seeking) {
|
|
1296
|
+
position = stream.position;
|
|
1297
|
+
}
|
|
1298
|
+
else if (!stream.seekable) {
|
|
1299
|
+
throw new FS.ErrnoError(70);
|
|
1300
|
+
} var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); if (!seeking)
|
|
1301
|
+
stream.position += bytesWritten; return bytesWritten; }, mmap(stream, length, position, prot, flags) { if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) {
|
|
1302
|
+
throw new FS.ErrnoError(2);
|
|
1303
|
+
} if ((stream.flags & 2097155) === 1) {
|
|
1304
|
+
throw new FS.ErrnoError(2);
|
|
1305
|
+
} if (!stream.stream_ops.mmap) {
|
|
1306
|
+
throw new FS.ErrnoError(43);
|
|
1307
|
+
} if (!length) {
|
|
1308
|
+
throw new FS.ErrnoError(28);
|
|
1309
|
+
} return stream.stream_ops.mmap(stream, length, position, prot, flags); }, msync(stream, buffer, offset, length, mmapFlags) { if (!stream.stream_ops.msync) {
|
|
1310
|
+
return 0;
|
|
1311
|
+
} return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); }, ioctl(stream, cmd, arg) { if (!stream.stream_ops.ioctl) {
|
|
1312
|
+
throw new FS.ErrnoError(59);
|
|
1313
|
+
} return stream.stream_ops.ioctl(stream, cmd, arg); }, readFile(path, opts = {}) { opts.flags = opts.flags || 0; opts.encoding = opts.encoding || "binary"; if (opts.encoding !== "utf8" && opts.encoding !== "binary") {
|
|
1314
|
+
abort(`Invalid encoding type "${opts.encoding}"`);
|
|
1315
|
+
} var stream = FS.open(path, opts.flags); var stat = FS.stat(path); var length = stat.size; var buf = new Uint8Array(length); FS.read(stream, buf, 0, length, 0); if (opts.encoding === "utf8") {
|
|
1316
|
+
buf = UTF8ArrayToString(buf);
|
|
1317
|
+
} FS.close(stream); return buf; }, writeFile(path, data, opts = {}) { opts.flags = opts.flags || 577; var stream = FS.open(path, opts.flags, opts.mode); data = FS_fileDataToTypedArray(data); FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); FS.close(stream); }, cwd: () => FS.currentPath, chdir(path) { var lookup = FS.lookupPath(path, { follow: true }); if (lookup.node === null) {
|
|
1318
|
+
throw new FS.ErrnoError(44);
|
|
1319
|
+
} if (!FS.isDir(lookup.node.mode)) {
|
|
1320
|
+
throw new FS.ErrnoError(54);
|
|
1321
|
+
} var errCode = FS.nodePermissions(lookup.node, "x"); if (errCode) {
|
|
1322
|
+
throw new FS.ErrnoError(errCode);
|
|
1323
|
+
} FS.currentPath = lookup.path; }, createDefaultDirectories() { FS.mkdir("/tmp"); FS.mkdir("/home"); FS.mkdir("/home/web_user"); }, createDefaultDevices() { FS.mkdir("/dev"); FS.registerDevice(FS.makedev(1, 3), { read: () => 0, write: (stream, buffer, offset, length, pos) => length, llseek: () => 0 }); FS.mkdev("/dev/null", FS.makedev(1, 3)); TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); FS.mkdev("/dev/tty", FS.makedev(5, 0)); FS.mkdev("/dev/tty1", FS.makedev(6, 0)); var randomBuffer = new Uint8Array(1024), randomLeft = 0; var randomByte = () => { if (randomLeft === 0) {
|
|
1324
|
+
randomFill(randomBuffer);
|
|
1325
|
+
randomLeft = randomBuffer.byteLength;
|
|
1326
|
+
} return randomBuffer[--randomLeft]; }; FS.createDevice("/dev", "random", randomByte); FS.createDevice("/dev", "urandom", randomByte); FS.mkdir("/dev/shm"); FS.mkdir("/dev/shm/tmp"); }, createSpecialDirectories() { FS.mkdir("/proc"); var proc_self = FS.mkdir("/proc/self"); FS.mkdir("/proc/self/fd"); FS.mount({ mount() { var node = FS.createNode(proc_self, "fd", 16895, 73); node.stream_ops = { llseek: MEMFS.stream_ops.llseek }; node.node_ops = { lookup(parent, name) { var fd = +name; var stream = FS.getStreamChecked(fd); var ret = { parent: null, mount: { mountpoint: "fake" }, node_ops: { readlink: () => stream.path }, id: fd + 1 }; ret.parent = ret; return ret; }, readdir() { return Array.from(FS.streams.entries()).filter(([k, v]) => v).map(([k, v]) => k.toString()); } }; return node; } }, {}, "/proc/self/fd"); }, createStandardStreams(input, output, error) { if (input) {
|
|
1327
|
+
FS.createDevice("/dev", "stdin", input);
|
|
1328
|
+
}
|
|
1329
|
+
else {
|
|
1330
|
+
FS.symlink("/dev/tty", "/dev/stdin");
|
|
1331
|
+
} if (output) {
|
|
1332
|
+
FS.createDevice("/dev", "stdout", null, output);
|
|
1333
|
+
}
|
|
1334
|
+
else {
|
|
1335
|
+
FS.symlink("/dev/tty", "/dev/stdout");
|
|
1336
|
+
} if (error) {
|
|
1337
|
+
FS.createDevice("/dev", "stderr", null, error);
|
|
1338
|
+
}
|
|
1339
|
+
else {
|
|
1340
|
+
FS.symlink("/dev/tty1", "/dev/stderr");
|
|
1341
|
+
} FS.open("/dev/stdin", 0); FS.open("/dev/stdout", 1); FS.open("/dev/stderr", 1); }, staticInit() { FS.nameTable = new Array(4096); FS.mount(MEMFS, {}, "/"); FS.createDefaultDirectories(); FS.createDefaultDevices(); FS.createSpecialDirectories(); FS.filesystems = { MEMFS }; }, init(input, output, error) { FS.initialized = true; input !== null && input !== void 0 ? input : (input = Module["stdin"]); output !== null && output !== void 0 ? output : (output = Module["stdout"]); error !== null && error !== void 0 ? error : (error = Module["stderr"]); FS.createStandardStreams(input, output, error); }, quit() { FS.initialized = false; for (var stream of FS.streams) {
|
|
1342
|
+
if (stream) {
|
|
1343
|
+
FS.close(stream);
|
|
1344
|
+
}
|
|
1345
|
+
} }, findObject(path, dontResolveLastLink) { var ret = FS.analyzePath(path, dontResolveLastLink); if (!ret.exists) {
|
|
1346
|
+
return null;
|
|
1347
|
+
} return ret.object; }, analyzePath(path, dontResolveLastLink) { try {
|
|
1348
|
+
var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
|
|
1349
|
+
path = lookup.path;
|
|
1350
|
+
}
|
|
1351
|
+
catch (e) { } var ret = { isRoot: false, exists: false, error: 0, name: null, path: null, object: null, parentExists: false, parentPath: null, parentObject: null }; try {
|
|
1352
|
+
var lookup = FS.lookupPath(path, { parent: true });
|
|
1353
|
+
ret.parentExists = true;
|
|
1354
|
+
ret.parentPath = lookup.path;
|
|
1355
|
+
ret.parentObject = lookup.node;
|
|
1356
|
+
ret.name = PATH.basename(path);
|
|
1357
|
+
lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
|
|
1358
|
+
ret.exists = true;
|
|
1359
|
+
ret.path = lookup.path;
|
|
1360
|
+
ret.object = lookup.node;
|
|
1361
|
+
ret.name = lookup.node.name;
|
|
1362
|
+
ret.isRoot = lookup.path === "/";
|
|
1363
|
+
}
|
|
1364
|
+
catch (e) {
|
|
1365
|
+
ret.error = e.errno;
|
|
1366
|
+
} return ret; }, createPath(parent, path, canRead, canWrite) { parent = typeof parent == "string" ? parent : FS.getPath(parent); var parts = path.split("/").reverse(); while (parts.length) {
|
|
1367
|
+
var part = parts.pop();
|
|
1368
|
+
if (!part)
|
|
1369
|
+
continue;
|
|
1370
|
+
var current = PATH.join2(parent, part);
|
|
1371
|
+
try {
|
|
1372
|
+
FS.mkdir(current);
|
|
1373
|
+
}
|
|
1374
|
+
catch (e) {
|
|
1375
|
+
if (e.errno != 20)
|
|
1376
|
+
throw e;
|
|
1377
|
+
}
|
|
1378
|
+
parent = current;
|
|
1379
|
+
} return current; }, createFile(parent, name, properties, canRead, canWrite) { var path = PATH.join2(typeof parent == "string" ? parent : FS.getPath(parent), name); var mode = FS_getMode(canRead, canWrite); return FS.create(path, mode); }, createDataFile(parent, name, data, canRead, canWrite, canOwn) { var path = name; if (parent) {
|
|
1380
|
+
parent = typeof parent == "string" ? parent : FS.getPath(parent);
|
|
1381
|
+
path = name ? PATH.join2(parent, name) : parent;
|
|
1382
|
+
} var mode = FS_getMode(canRead, canWrite); var node = FS.create(path, mode); if (data) {
|
|
1383
|
+
data = FS_fileDataToTypedArray(data);
|
|
1384
|
+
FS.chmod(node, mode | 146);
|
|
1385
|
+
var stream = FS.open(node, 577);
|
|
1386
|
+
FS.write(stream, data, 0, data.length, 0, canOwn);
|
|
1387
|
+
FS.close(stream);
|
|
1388
|
+
FS.chmod(node, mode);
|
|
1389
|
+
} }, createDevice(parent, name, input, output) { var _a; var _b; var path = PATH.join2(typeof parent == "string" ? parent : FS.getPath(parent), name); var mode = FS_getMode(!!input, !!output); (_a = (_b = FS.createDevice).major) !== null && _a !== void 0 ? _a : (_b.major = 64); var dev = FS.makedev(FS.createDevice.major++, 0); FS.registerDevice(dev, { open(stream) { stream.seekable = false; }, close(stream) { var _a; if ((_a = output === null || output === void 0 ? void 0 : output.buffer) === null || _a === void 0 ? void 0 : _a.length) {
|
|
1390
|
+
output(10);
|
|
1391
|
+
} }, read(stream, buffer, offset, length, pos) { var bytesRead = 0; for (var i = 0; i < length; i++) {
|
|
1392
|
+
var result;
|
|
1393
|
+
try {
|
|
1394
|
+
result = input();
|
|
1395
|
+
}
|
|
1396
|
+
catch (e) {
|
|
1397
|
+
throw new FS.ErrnoError(29);
|
|
1398
|
+
}
|
|
1399
|
+
if (result === undefined && bytesRead === 0) {
|
|
1400
|
+
throw new FS.ErrnoError(6);
|
|
1401
|
+
}
|
|
1402
|
+
if (result === null || result === undefined)
|
|
1403
|
+
break;
|
|
1404
|
+
bytesRead++;
|
|
1405
|
+
buffer[offset + i] = result;
|
|
1406
|
+
} if (bytesRead) {
|
|
1407
|
+
stream.node.atime = Date.now();
|
|
1408
|
+
} return bytesRead; }, write(stream, buffer, offset, length, pos) { for (var i = 0; i < length; i++) {
|
|
1409
|
+
try {
|
|
1410
|
+
output(buffer[offset + i]);
|
|
1411
|
+
}
|
|
1412
|
+
catch (e) {
|
|
1413
|
+
throw new FS.ErrnoError(29);
|
|
1414
|
+
}
|
|
1415
|
+
} if (length) {
|
|
1416
|
+
stream.node.mtime = stream.node.ctime = Date.now();
|
|
1417
|
+
} return i; } }); return FS.mkdev(path, mode, dev); }, forceLoadFile(obj) { if (obj.isDevice || obj.isFolder || obj.link || obj.contents)
|
|
1418
|
+
return true; if (globalThis.XMLHttpRequest) {
|
|
1419
|
+
abort("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");
|
|
1420
|
+
}
|
|
1421
|
+
else {
|
|
1422
|
+
try {
|
|
1423
|
+
obj.contents = readBinary(obj.url);
|
|
1424
|
+
}
|
|
1425
|
+
catch (e) {
|
|
1426
|
+
throw new FS.ErrnoError(29);
|
|
1427
|
+
}
|
|
1428
|
+
} }, createLazyFile(parent, name, url, canRead, canWrite) { class LazyUint8Array {
|
|
1429
|
+
constructor() {
|
|
1430
|
+
this.lengthKnown = false;
|
|
1431
|
+
this.chunks = [];
|
|
1432
|
+
}
|
|
1433
|
+
get(idx) { if (idx > this.length - 1 || idx < 0) {
|
|
1434
|
+
return undefined;
|
|
1435
|
+
} var chunkOffset = idx % this.chunkSize; var chunkNum = idx / this.chunkSize | 0; return this.getter(chunkNum)[chunkOffset]; }
|
|
1436
|
+
setDataGetter(getter) { this.getter = getter; }
|
|
1437
|
+
cacheLength() { var xhr = new XMLHttpRequest; xhr.open("HEAD", url, false); xhr.send(null); if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304))
|
|
1438
|
+
abort("Couldn't load " + url + ". Status: " + xhr.status); var datalength = Number(xhr.getResponseHeader("Content-length")); var header; var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; var chunkSize = 1024 * 1024; if (!hasByteServing)
|
|
1439
|
+
chunkSize = datalength; var doXHR = (from, to) => { if (from > to)
|
|
1440
|
+
abort("invalid range (" + from + ", " + to + ") or no bytes requested!"); if (to > datalength - 1)
|
|
1441
|
+
abort("only " + datalength + " bytes available! programmer error!"); var xhr = new XMLHttpRequest; xhr.open("GET", url, false); if (datalength !== chunkSize)
|
|
1442
|
+
xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); xhr.responseType = "arraybuffer"; if (xhr.overrideMimeType) {
|
|
1443
|
+
xhr.overrideMimeType("text/plain; charset=x-user-defined");
|
|
1444
|
+
} xhr.send(null); if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304))
|
|
1445
|
+
abort("Couldn't load " + url + ". Status: " + xhr.status); if (xhr.response !== undefined) {
|
|
1446
|
+
return new Uint8Array(xhr.response || []);
|
|
1447
|
+
} return intArrayFromString(xhr.responseText || ""); }; var lazyArray = this; lazyArray.setDataGetter(chunkNum => { var start = chunkNum * chunkSize; var end = (chunkNum + 1) * chunkSize - 1; end = Math.min(end, datalength - 1); if (typeof lazyArray.chunks[chunkNum] == "undefined") {
|
|
1448
|
+
lazyArray.chunks[chunkNum] = doXHR(start, end);
|
|
1449
|
+
} if (typeof lazyArray.chunks[chunkNum] == "undefined")
|
|
1450
|
+
abort("doXHR failed!"); return lazyArray.chunks[chunkNum]; }); if (usesGzip || !datalength) {
|
|
1451
|
+
chunkSize = datalength = 1;
|
|
1452
|
+
datalength = this.getter(0).length;
|
|
1453
|
+
chunkSize = datalength;
|
|
1454
|
+
out("LazyFiles on gzip forces download of the whole file when length is accessed");
|
|
1455
|
+
} this._length = datalength; this._chunkSize = chunkSize; this.lengthKnown = true; }
|
|
1456
|
+
get length() { if (!this.lengthKnown) {
|
|
1457
|
+
this.cacheLength();
|
|
1458
|
+
} return this._length; }
|
|
1459
|
+
get chunkSize() { if (!this.lengthKnown) {
|
|
1460
|
+
this.cacheLength();
|
|
1461
|
+
} return this._chunkSize; }
|
|
1462
|
+
} if (globalThis.XMLHttpRequest) {
|
|
1463
|
+
if (!ENVIRONMENT_IS_WORKER)
|
|
1464
|
+
abort("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");
|
|
1465
|
+
var lazyArray = new LazyUint8Array;
|
|
1466
|
+
var properties = { isDevice: false, contents: lazyArray };
|
|
1467
|
+
}
|
|
1468
|
+
else {
|
|
1469
|
+
var properties = { isDevice: false, url };
|
|
1470
|
+
} var node = FS.createFile(parent, name, properties, canRead, canWrite); if (properties.contents) {
|
|
1471
|
+
node.contents = properties.contents;
|
|
1472
|
+
}
|
|
1473
|
+
else if (properties.url) {
|
|
1474
|
+
node.contents = null;
|
|
1475
|
+
node.url = properties.url;
|
|
1476
|
+
} Object.defineProperties(node, { usedBytes: { get: function () { return this.contents.length; } } }); var stream_ops = {}; for (const [key, fn] of Object.entries(node.stream_ops)) {
|
|
1477
|
+
stream_ops[key] = (...args) => { FS.forceLoadFile(node); return fn(...args); };
|
|
1478
|
+
} function writeChunks(stream, buffer, offset, length, position) { var contents = stream.node.contents; if (position >= contents.length)
|
|
1479
|
+
return 0; var size = Math.min(contents.length - position, length); if (contents.slice) {
|
|
1480
|
+
for (var i = 0; i < size; i++) {
|
|
1481
|
+
buffer[offset + i] = contents[position + i];
|
|
1482
|
+
}
|
|
1483
|
+
}
|
|
1484
|
+
else {
|
|
1485
|
+
for (var i = 0; i < size; i++) {
|
|
1486
|
+
buffer[offset + i] = contents.get(position + i);
|
|
1487
|
+
}
|
|
1488
|
+
} return size; } stream_ops.read = (stream, buffer, offset, length, position) => { FS.forceLoadFile(node); return writeChunks(stream, buffer, offset, length, position); }; stream_ops.mmap = (stream, length, position, prot, flags) => { FS.forceLoadFile(node); var ptr = mmapAlloc(); if (!ptr) {
|
|
1489
|
+
throw new FS.ErrnoError(48);
|
|
1490
|
+
} writeChunks(stream, HEAP8, ptr, length, position); return { ptr, allocated: true }; }; node.stream_ops = stream_ops; return node; } };
|
|
1491
|
+
var UTF8ToString = (ptr, maxBytesToRead, ignoreNul) => ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "";
|
|
1492
|
+
var SYSCALLS = { calculateAt(dirfd, path, allowEmpty) { if (PATH.isAbs(path)) {
|
|
1493
|
+
return path;
|
|
1494
|
+
} var dir; if (dirfd === -100) {
|
|
1495
|
+
dir = FS.cwd();
|
|
1496
|
+
}
|
|
1497
|
+
else {
|
|
1498
|
+
var dirstream = SYSCALLS.getStreamFromFD(dirfd);
|
|
1499
|
+
dir = dirstream.path;
|
|
1500
|
+
} if (path.length == 0) {
|
|
1501
|
+
if (!allowEmpty) {
|
|
1502
|
+
throw new FS.ErrnoError(44);
|
|
1503
|
+
}
|
|
1504
|
+
return dir;
|
|
1505
|
+
} return dir + "/" + path; }, writeStat(buf, stat) { HEAPU32[buf >> 2] = stat.dev; HEAPU32[buf + 4 >> 2] = stat.mode; HEAPU32[buf + 8 >> 2] = stat.nlink; HEAPU32[buf + 12 >> 2] = stat.uid; HEAPU32[buf + 16 >> 2] = stat.gid; HEAPU32[buf + 20 >> 2] = stat.rdev; HEAP64[buf + 24 >> 3] = BigInt(stat.size); HEAP32[buf + 32 >> 2] = 4096; HEAP32[buf + 36 >> 2] = stat.blocks; var atime = stat.atime.getTime(); var mtime = stat.mtime.getTime(); var ctime = stat.ctime.getTime(); HEAP64[buf + 40 >> 3] = BigInt(Math.floor(atime / 1e3)); HEAPU32[buf + 48 >> 2] = atime % 1e3 * 1e3 * 1e3; HEAP64[buf + 56 >> 3] = BigInt(Math.floor(mtime / 1e3)); HEAPU32[buf + 64 >> 2] = mtime % 1e3 * 1e3 * 1e3; HEAP64[buf + 72 >> 3] = BigInt(Math.floor(ctime / 1e3)); HEAPU32[buf + 80 >> 2] = ctime % 1e3 * 1e3 * 1e3; HEAP64[buf + 88 >> 3] = BigInt(stat.ino); return 0; }, writeStatFs(buf, stats) { HEAPU32[buf + 4 >> 2] = stats.bsize; HEAPU32[buf + 60 >> 2] = stats.bsize; HEAP64[buf + 8 >> 3] = BigInt(stats.blocks); HEAP64[buf + 16 >> 3] = BigInt(stats.bfree); HEAP64[buf + 24 >> 3] = BigInt(stats.bavail); HEAP64[buf + 32 >> 3] = BigInt(stats.files); HEAP64[buf + 40 >> 3] = BigInt(stats.ffree); HEAPU32[buf + 48 >> 2] = stats.fsid; HEAPU32[buf + 64 >> 2] = stats.flags; HEAPU32[buf + 56 >> 2] = stats.namelen; }, doMsync(addr, stream, len, flags, offset) { if (!FS.isFile(stream.node.mode)) {
|
|
1506
|
+
throw new FS.ErrnoError(43);
|
|
1507
|
+
} if (flags & 2) {
|
|
1508
|
+
return 0;
|
|
1509
|
+
} var buffer = HEAPU8.slice(addr, addr + len); FS.msync(stream, buffer, offset, len, flags); }, getStreamFromFD(fd) { var stream = FS.getStreamChecked(fd); return stream; }, varargs: undefined, getStr(ptr) { var ret = UTF8ToString(ptr); return ret; } };
|
|
1510
|
+
function ___syscall_openat(dirfd, path, flags, varargs) { SYSCALLS.varargs = varargs; try {
|
|
1511
|
+
path = SYSCALLS.getStr(path);
|
|
1512
|
+
path = SYSCALLS.calculateAt(dirfd, path);
|
|
1513
|
+
var mode = varargs ? syscallGetVarargI() : 0;
|
|
1514
|
+
return FS.open(path, flags, mode).fd;
|
|
1515
|
+
}
|
|
1516
|
+
catch (e) {
|
|
1517
|
+
if (typeof FS == "undefined" || !(e.name === "ErrnoError"))
|
|
1518
|
+
throw e;
|
|
1519
|
+
return -e.errno;
|
|
1520
|
+
} }
|
|
1521
|
+
var __abort_js = () => abort("");
|
|
1522
|
+
var getHeapMax = () => 2147483648;
|
|
1523
|
+
var alignMemory = (size, alignment) => Math.ceil(size / alignment) * alignment;
|
|
1524
|
+
var growMemory = size => { var oldHeapSize = wasmMemory.buffer.byteLength; var pages = (size - oldHeapSize + 65535) / 65536 | 0; try {
|
|
1525
|
+
wasmMemory.grow(pages);
|
|
1526
|
+
updateMemoryViews();
|
|
1527
|
+
return 1;
|
|
1528
|
+
}
|
|
1529
|
+
catch (e) { } };
|
|
1530
|
+
var _emscripten_resize_heap = requestedSize => { var oldSize = HEAPU8.length; requestedSize >>>= 0; var maxHeapSize = getHeapMax(); if (requestedSize > maxHeapSize) {
|
|
1531
|
+
return false;
|
|
1532
|
+
} for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {
|
|
1533
|
+
var overGrownHeapSize = oldSize * (1 + .2 / cutDown);
|
|
1534
|
+
overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);
|
|
1535
|
+
var newSize = Math.min(maxHeapSize, alignMemory(Math.max(requestedSize, overGrownHeapSize), 65536));
|
|
1536
|
+
var replacement = growMemory(newSize);
|
|
1537
|
+
if (replacement) {
|
|
1538
|
+
return true;
|
|
1539
|
+
}
|
|
1540
|
+
} return false; };
|
|
1541
|
+
var doReadv = (stream, iov, iovcnt, offset) => { var ret = 0; for (var i = 0; i < iovcnt; i++) {
|
|
1542
|
+
var ptr = HEAPU32[iov >> 2];
|
|
1543
|
+
var len = HEAPU32[iov + 4 >> 2];
|
|
1544
|
+
iov += 8;
|
|
1545
|
+
var curr = FS.read(stream, HEAP8, ptr, len, offset);
|
|
1546
|
+
if (curr < 0)
|
|
1547
|
+
return -1;
|
|
1548
|
+
ret += curr;
|
|
1549
|
+
if (curr < len)
|
|
1550
|
+
break;
|
|
1551
|
+
} return ret; };
|
|
1552
|
+
function _fd_read(fd, iov, iovcnt, pnum) { try {
|
|
1553
|
+
var stream = SYSCALLS.getStreamFromFD(fd);
|
|
1554
|
+
var num = doReadv(stream, iov, iovcnt);
|
|
1555
|
+
HEAPU32[pnum >> 2] = num;
|
|
1556
|
+
return 0;
|
|
1557
|
+
}
|
|
1558
|
+
catch (e) {
|
|
1559
|
+
if (typeof FS == "undefined" || !(e.name === "ErrnoError"))
|
|
1560
|
+
throw e;
|
|
1561
|
+
return e.errno;
|
|
1562
|
+
} }
|
|
1563
|
+
var getCFunc = ident => { var func = Module["_" + ident]; return func; };
|
|
1564
|
+
var writeArrayToMemory = (array, buffer) => { HEAP8.set(array, buffer); };
|
|
1565
|
+
var stringToUTF8 = (str, outPtr, maxBytesToWrite) => stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);
|
|
1566
|
+
var stackAlloc = sz => __emscripten_stack_alloc(sz);
|
|
1567
|
+
var stringToUTF8OnStack = str => { var size = lengthBytesUTF8(str) + 1; var ret = stackAlloc(size); stringToUTF8(str, ret, size); return ret; };
|
|
1568
|
+
var ccall = (ident, returnType, argTypes, args, opts) => { var toC = { string: str => { var ret = 0; if (str !== null && str !== undefined && str !== 0) {
|
|
1569
|
+
ret = stringToUTF8OnStack(str);
|
|
1570
|
+
} return ret; }, array: arr => { var ret = stackAlloc(arr.length); writeArrayToMemory(arr, ret); return ret; } }; function convertReturnValue(ret) { if (returnType === "string") {
|
|
1571
|
+
return UTF8ToString(ret);
|
|
1572
|
+
} if (returnType === "boolean")
|
|
1573
|
+
return Boolean(ret); return ret; } var func = getCFunc(ident); var cArgs = []; var stack = 0; if (args) {
|
|
1574
|
+
for (var i = 0; i < args.length; i++) {
|
|
1575
|
+
var converter = toC[argTypes[i]];
|
|
1576
|
+
if (converter) {
|
|
1577
|
+
if (stack === 0)
|
|
1578
|
+
stack = stackSave();
|
|
1579
|
+
cArgs[i] = converter(args[i]);
|
|
1580
|
+
}
|
|
1581
|
+
else {
|
|
1582
|
+
cArgs[i] = args[i];
|
|
1583
|
+
}
|
|
1584
|
+
}
|
|
1585
|
+
} var ret = func(...cArgs); function onDone(ret) { if (stack !== 0)
|
|
1586
|
+
stackRestore(stack); return convertReturnValue(ret); } ret = onDone(ret); return ret; };
|
|
1587
|
+
var cwrap = (ident, returnType, argTypes, opts) => { var numericArgs = !argTypes || argTypes.every(type => type === "number" || type === "boolean"); var numericRet = returnType !== "string"; if (numericRet && numericArgs && !opts) {
|
|
1588
|
+
return getCFunc(ident);
|
|
1589
|
+
} return (...args) => ccall(ident, returnType, argTypes, args); };
|
|
1590
|
+
FS.createPreloadedFile = FS_createPreloadedFile;
|
|
1591
|
+
FS.preloadFile = FS_preloadFile;
|
|
1592
|
+
FS.staticInit();
|
|
1593
|
+
{
|
|
1594
|
+
if (Module["noExitRuntime"])
|
|
1595
|
+
Module["noExitRuntime"];
|
|
1596
|
+
if (Module["preloadPlugins"])
|
|
1597
|
+
preloadPlugins = Module["preloadPlugins"];
|
|
1598
|
+
if (Module["print"])
|
|
1599
|
+
out = Module["print"];
|
|
1600
|
+
if (Module["printErr"])
|
|
1601
|
+
err = Module["printErr"];
|
|
1602
|
+
if (Module["wasmBinary"])
|
|
1603
|
+
wasmBinary = Module["wasmBinary"];
|
|
1604
|
+
if (Module["arguments"])
|
|
1605
|
+
Module["arguments"];
|
|
1606
|
+
if (Module["thisProgram"])
|
|
1607
|
+
Module["thisProgram"];
|
|
1608
|
+
if (Module["preInit"]) {
|
|
1609
|
+
if (typeof Module["preInit"] == "function")
|
|
1610
|
+
Module["preInit"] = [Module["preInit"]];
|
|
1611
|
+
while (Module["preInit"].length > 0) {
|
|
1612
|
+
Module["preInit"].shift()();
|
|
1613
|
+
}
|
|
1614
|
+
}
|
|
1615
|
+
}
|
|
1616
|
+
Module["ccall"] = ccall;
|
|
1617
|
+
Module["cwrap"] = cwrap;
|
|
1618
|
+
var __emscripten_stack_restore, __emscripten_stack_alloc, _emscripten_stack_get_current, wasmMemory;
|
|
1619
|
+
function assignWasmExports(wasmExports) { Module["_wasm_haetae_keypair"] = wasmExports["g"]; Module["_wasm_haetae_sign"] = wasmExports["h"]; Module["_wasm_haetae_verify"] = wasmExports["i"]; Module["_malloc"] = wasmExports["j"]; Module["_free"] = wasmExports["k"]; __emscripten_stack_restore = wasmExports["l"]; __emscripten_stack_alloc = wasmExports["m"]; _emscripten_stack_get_current = wasmExports["n"]; wasmMemory = wasmExports["e"]; wasmExports["__indirect_function_table"]; }
|
|
1620
|
+
var wasmImports = { c: ___syscall_openat, d: __abort_js, a: _emscripten_resize_heap, b: _fd_read };
|
|
1621
|
+
function run() { if (runDependencies > 0) {
|
|
1622
|
+
dependenciesFulfilled = run;
|
|
1623
|
+
return;
|
|
1624
|
+
} preRun(); if (runDependencies > 0) {
|
|
1625
|
+
dependenciesFulfilled = run;
|
|
1626
|
+
return;
|
|
1627
|
+
} function doRun() { var _a; Module["calledRun"] = true; if (ABORT)
|
|
1628
|
+
return; initRuntime(); readyPromiseResolve === null || readyPromiseResolve === void 0 ? void 0 : readyPromiseResolve(Module); (_a = Module["onRuntimeInitialized"]) === null || _a === void 0 ? void 0 : _a.call(Module); postRun(); } if (Module["setStatus"]) {
|
|
1629
|
+
Module["setStatus"]("Running...");
|
|
1630
|
+
setTimeout(() => { setTimeout(() => Module["setStatus"](""), 1); doRun(); }, 1);
|
|
1631
|
+
}
|
|
1632
|
+
else {
|
|
1633
|
+
doRun();
|
|
1634
|
+
} }
|
|
1635
|
+
var wasmExports;
|
|
1636
|
+
wasmExports = yield (createWasm());
|
|
1637
|
+
run();
|
|
1638
|
+
if (runtimeInitialized) {
|
|
1639
|
+
moduleRtn = Module;
|
|
1640
|
+
}
|
|
1641
|
+
else {
|
|
1642
|
+
moduleRtn = new Promise((resolve, reject) => { readyPromiseResolve = resolve; readyPromiseReject = reject; });
|
|
1643
|
+
}
|
|
1644
|
+
return moduleRtn;
|
|
1645
|
+
});
|
|
1646
|
+
}
|
|
1647
|
+
|
|
1648
|
+
function SmaugtModule() {
|
|
1649
|
+
return tslib_es6.__awaiter(this, arguments, void 0, function* (moduleArg = {}) {
|
|
1650
|
+
var _a, _b, _c;
|
|
1651
|
+
var moduleRtn;
|
|
1652
|
+
var Module = moduleArg;
|
|
1653
|
+
var ENVIRONMENT_IS_WEB = !!globalThis.window;
|
|
1654
|
+
var ENVIRONMENT_IS_WORKER = !!globalThis.WorkerGlobalScope;
|
|
1655
|
+
var ENVIRONMENT_IS_NODE = ((_b = (_a = globalThis.process) === null || _a === void 0 ? void 0 : _a.versions) === null || _b === void 0 ? void 0 : _b.node) && ((_c = globalThis.process) === null || _c === void 0 ? void 0 : _c.type) != "renderer";
|
|
1656
|
+
if (ENVIRONMENT_IS_NODE) {
|
|
1657
|
+
const { createRequire } = yield ((m)=>(function (t) { return new Promise(function (resolve, reject) { require([t], function (m) { resolve(/*#__PURE__*/_interopNamespaceDefault(m)); }, reject); }); })(/* @vite-ignore */ /* webpackIgnore: true */ m))("node:module");
|
|
1658
|
+
var require$1 = createRequire(new URL(module.uri, document.baseURI).href);
|
|
1659
|
+
}
|
|
1660
|
+
var _scriptName = new URL(module.uri, document.baseURI).href;
|
|
1661
|
+
var scriptDirectory = "";
|
|
1662
|
+
function locateFile(path) { if (Module["locateFile"]) {
|
|
1663
|
+
return Module["locateFile"](path, scriptDirectory);
|
|
1664
|
+
} return scriptDirectory + path; }
|
|
1665
|
+
var readAsync, readBinary;
|
|
1666
|
+
if (ENVIRONMENT_IS_NODE) {
|
|
1667
|
+
var fs = require$1("node:fs");
|
|
1668
|
+
if (_scriptName.startsWith("file:")) {
|
|
1669
|
+
scriptDirectory = require$1("node:path").dirname(require$1("node:url").fileURLToPath(_scriptName)) + "/";
|
|
1670
|
+
}
|
|
1671
|
+
readBinary = filename => { filename = isFileURI(filename) ? new URL(filename) : filename; var ret = fs.readFileSync(filename); return ret; };
|
|
1672
|
+
readAsync = (filename_1, ...args_1) => tslib_es6.__awaiter(this, [filename_1, ...args_1], void 0, function* (filename, binary = true) { filename = isFileURI(filename) ? new URL(filename) : filename; var ret = fs.readFileSync(filename, binary ? undefined : "utf8"); return ret; });
|
|
1673
|
+
if (process.argv.length > 1) {
|
|
1674
|
+
process.argv[1].replace(/\\/g, "/");
|
|
1675
|
+
}
|
|
1676
|
+
process.argv.slice(2);
|
|
1677
|
+
}
|
|
1678
|
+
else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
|
|
1679
|
+
try {
|
|
1680
|
+
scriptDirectory = new URL(".", _scriptName).href;
|
|
1681
|
+
}
|
|
1682
|
+
catch (_d) { }
|
|
1683
|
+
{
|
|
1684
|
+
if (ENVIRONMENT_IS_WORKER) {
|
|
1685
|
+
readBinary = url => { var xhr = new XMLHttpRequest; xhr.open("GET", url, false); xhr.responseType = "arraybuffer"; xhr.send(null); return new Uint8Array(xhr.response); };
|
|
1686
|
+
}
|
|
1687
|
+
readAsync = (url) => tslib_es6.__awaiter(this, void 0, void 0, function* () { if (isFileURI(url)) {
|
|
1688
|
+
return new Promise((resolve, reject) => { var xhr = new XMLHttpRequest; xhr.open("GET", url, true); xhr.responseType = "arraybuffer"; xhr.onload = () => { if (xhr.status == 200 || xhr.status == 0 && xhr.response) {
|
|
1689
|
+
resolve(xhr.response);
|
|
1690
|
+
return;
|
|
1691
|
+
} reject(xhr.status); }; xhr.onerror = reject; xhr.send(null); });
|
|
1692
|
+
} var response = yield fetch(url, { credentials: "same-origin" }); if (response.ok) {
|
|
1693
|
+
return response.arrayBuffer();
|
|
1694
|
+
} throw new Error(response.status + " : " + response.url); });
|
|
1695
|
+
}
|
|
1696
|
+
}
|
|
1697
|
+
else ;
|
|
1698
|
+
var out = console.log.bind(console);
|
|
1699
|
+
var err = console.error.bind(console);
|
|
1700
|
+
var wasmBinary;
|
|
1701
|
+
var ABORT = false;
|
|
1702
|
+
var isFileURI = filename => filename.startsWith("file://");
|
|
1703
|
+
var readyPromiseResolve, readyPromiseReject;
|
|
1704
|
+
var HEAP8, HEAPU8, HEAP32, HEAPU32;
|
|
1705
|
+
var HEAP64;
|
|
1706
|
+
var runtimeInitialized = false;
|
|
1707
|
+
function updateMemoryViews() { var b = wasmMemory.buffer; HEAP8 = new Int8Array(b); Module["HEAPU8"] = HEAPU8 = new Uint8Array(b); HEAP32 = new Int32Array(b); Module["HEAPU32"] = HEAPU32 = new Uint32Array(b); HEAP64 = new BigInt64Array(b); new BigUint64Array(b); }
|
|
1708
|
+
function preRun() { if (Module["preRun"]) {
|
|
1709
|
+
if (typeof Module["preRun"] == "function")
|
|
1710
|
+
Module["preRun"] = [Module["preRun"]];
|
|
1711
|
+
while (Module["preRun"].length) {
|
|
1712
|
+
addOnPreRun(Module["preRun"].shift());
|
|
1713
|
+
}
|
|
1714
|
+
} callRuntimeCallbacks(onPreRuns); }
|
|
1715
|
+
function initRuntime() { runtimeInitialized = true; if (!Module["noFSInit"] && !FS.initialized)
|
|
1716
|
+
FS.init(); wasmExports["f"](); FS.ignorePermissions = false; }
|
|
1717
|
+
function postRun() { if (Module["postRun"]) {
|
|
1718
|
+
if (typeof Module["postRun"] == "function")
|
|
1719
|
+
Module["postRun"] = [Module["postRun"]];
|
|
1720
|
+
while (Module["postRun"].length) {
|
|
1721
|
+
addOnPostRun(Module["postRun"].shift());
|
|
1722
|
+
}
|
|
1723
|
+
} callRuntimeCallbacks(onPostRuns); }
|
|
1724
|
+
function abort(what) { var _a; (_a = Module["onAbort"]) === null || _a === void 0 ? void 0 : _a.call(Module, what); what = "Aborted(" + what + ")"; err(what); ABORT = true; what += ". Build with -sASSERTIONS for more info."; var e = new WebAssembly.RuntimeError(what); readyPromiseReject === null || readyPromiseReject === void 0 ? void 0 : readyPromiseReject(e); throw e; }
|
|
1725
|
+
var wasmBinaryFile;
|
|
1726
|
+
function findWasmBinary() { if (Module["locateFile"]) {
|
|
1727
|
+
return locateFile("crypto_smaugt.wasm");
|
|
1728
|
+
} return new URL("crypto_smaugt.wasm", new URL(module.uri, document.baseURI).href).href; }
|
|
1729
|
+
function getBinarySync(file) { if (file == wasmBinaryFile && wasmBinary) {
|
|
1730
|
+
return new Uint8Array(wasmBinary);
|
|
1731
|
+
} if (readBinary) {
|
|
1732
|
+
return readBinary(file);
|
|
1733
|
+
} throw "both async and sync fetching of the wasm failed"; }
|
|
1734
|
+
function getWasmBinary(binaryFile) {
|
|
1735
|
+
return tslib_es6.__awaiter(this, void 0, void 0, function* () { if (!wasmBinary) {
|
|
1736
|
+
try {
|
|
1737
|
+
var response = yield readAsync(binaryFile);
|
|
1738
|
+
return new Uint8Array(response);
|
|
1739
|
+
}
|
|
1740
|
+
catch (_a) { }
|
|
1741
|
+
} return getBinarySync(binaryFile); });
|
|
1742
|
+
}
|
|
1743
|
+
function instantiateArrayBuffer(binaryFile, imports) {
|
|
1744
|
+
return tslib_es6.__awaiter(this, void 0, void 0, function* () { try {
|
|
1745
|
+
var binary = yield getWasmBinary(binaryFile);
|
|
1746
|
+
var instance = yield WebAssembly.instantiate(binary, imports);
|
|
1747
|
+
return instance;
|
|
1748
|
+
}
|
|
1749
|
+
catch (reason) {
|
|
1750
|
+
err(`failed to asynchronously prepare wasm: ${reason}`);
|
|
1751
|
+
abort(reason);
|
|
1752
|
+
} });
|
|
1753
|
+
}
|
|
1754
|
+
function instantiateAsync(binary, binaryFile, imports) {
|
|
1755
|
+
return tslib_es6.__awaiter(this, void 0, void 0, function* () { if (!binary && !isFileURI(binaryFile) && !ENVIRONMENT_IS_NODE) {
|
|
1756
|
+
try {
|
|
1757
|
+
var response = fetch(binaryFile, { credentials: "same-origin" });
|
|
1758
|
+
var instantiationResult = yield WebAssembly.instantiateStreaming(response, imports);
|
|
1759
|
+
return instantiationResult;
|
|
1760
|
+
}
|
|
1761
|
+
catch (reason) {
|
|
1762
|
+
err(`wasm streaming compile failed: ${reason}`);
|
|
1763
|
+
err("falling back to ArrayBuffer instantiation");
|
|
1764
|
+
}
|
|
1765
|
+
} return instantiateArrayBuffer(binaryFile, imports); });
|
|
1766
|
+
}
|
|
1767
|
+
function getWasmImports() { var imports = { a: wasmImports }; return imports; }
|
|
1768
|
+
function createWasm() {
|
|
1769
|
+
return tslib_es6.__awaiter(this, void 0, void 0, function* () { function receiveInstance(instance, module) { wasmExports = instance.exports; assignWasmExports(wasmExports); updateMemoryViews(); return wasmExports; } function receiveInstantiationResult(result) { return receiveInstance(result["instance"]); } var info = getWasmImports(); if (Module["instantiateWasm"]) {
|
|
1770
|
+
return new Promise((resolve, reject) => { Module["instantiateWasm"](info, (inst, mod) => { resolve(receiveInstance(inst)); }); });
|
|
1771
|
+
} wasmBinaryFile !== null && wasmBinaryFile !== void 0 ? wasmBinaryFile : (wasmBinaryFile = findWasmBinary()); var result = yield instantiateAsync(wasmBinary, wasmBinaryFile, info); var exports$1 = receiveInstantiationResult(result); return exports$1; });
|
|
1772
|
+
}
|
|
1773
|
+
var callRuntimeCallbacks = callbacks => { while (callbacks.length > 0) {
|
|
1774
|
+
callbacks.shift()(Module);
|
|
1775
|
+
} };
|
|
1776
|
+
var onPostRuns = [];
|
|
1777
|
+
var addOnPostRun = cb => onPostRuns.push(cb);
|
|
1778
|
+
var onPreRuns = [];
|
|
1779
|
+
var addOnPreRun = cb => onPreRuns.push(cb);
|
|
1780
|
+
var stackRestore = val => __emscripten_stack_restore(val);
|
|
1781
|
+
var stackSave = () => _emscripten_stack_get_current();
|
|
1782
|
+
var syscallGetVarargI = () => { var ret = HEAP32[+SYSCALLS.varargs >> 2]; SYSCALLS.varargs += 4; return ret; };
|
|
1783
|
+
var PATH = { isAbs: path => path.charAt(0) === "/", splitPath: filename => { var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; return splitPathRe.exec(filename).slice(1); }, normalizeArray: (parts, allowAboveRoot) => { var up = 0; for (var i = parts.length - 1; i >= 0; i--) {
|
|
1784
|
+
var last = parts[i];
|
|
1785
|
+
if (last === ".") {
|
|
1786
|
+
parts.splice(i, 1);
|
|
1787
|
+
}
|
|
1788
|
+
else if (last === "..") {
|
|
1789
|
+
parts.splice(i, 1);
|
|
1790
|
+
up++;
|
|
1791
|
+
}
|
|
1792
|
+
else if (up) {
|
|
1793
|
+
parts.splice(i, 1);
|
|
1794
|
+
up--;
|
|
1795
|
+
}
|
|
1796
|
+
} if (allowAboveRoot) {
|
|
1797
|
+
for (; up; up--) {
|
|
1798
|
+
parts.unshift("..");
|
|
1799
|
+
}
|
|
1800
|
+
} return parts; }, normalize: path => { var isAbsolute = PATH.isAbs(path), trailingSlash = path.slice(-1) === "/"; path = PATH.normalizeArray(path.split("/").filter(p => !!p), !isAbsolute).join("/"); if (!path && !isAbsolute) {
|
|
1801
|
+
path = ".";
|
|
1802
|
+
} if (path && trailingSlash) {
|
|
1803
|
+
path += "/";
|
|
1804
|
+
} return (isAbsolute ? "/" : "") + path; }, dirname: path => { var result = PATH.splitPath(path), root = result[0], dir = result[1]; if (!root && !dir) {
|
|
1805
|
+
return ".";
|
|
1806
|
+
} if (dir) {
|
|
1807
|
+
dir = dir.slice(0, -1);
|
|
1808
|
+
} return root + dir; }, basename: path => path && path.match(/([^\/]+|\/)\/*$/)[1], join: (...paths) => PATH.normalize(paths.join("/")), join2: (l, r) => PATH.normalize(l + "/" + r) };
|
|
1809
|
+
var initRandomFill = () => { if (ENVIRONMENT_IS_NODE) {
|
|
1810
|
+
var nodeCrypto = require$1("node:crypto");
|
|
1811
|
+
return view => nodeCrypto.randomFillSync(view);
|
|
1812
|
+
} return view => crypto.getRandomValues(view); };
|
|
1813
|
+
var randomFill = view => { (randomFill = initRandomFill())(view); };
|
|
1814
|
+
var PATH_FS = { resolve: (...args) => { var resolvedPath = "", resolvedAbsolute = false; for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {
|
|
1815
|
+
var path = i >= 0 ? args[i] : FS.cwd();
|
|
1816
|
+
if (typeof path != "string") {
|
|
1817
|
+
throw new TypeError("Arguments to path.resolve must be strings");
|
|
1818
|
+
}
|
|
1819
|
+
else if (!path) {
|
|
1820
|
+
return "";
|
|
1821
|
+
}
|
|
1822
|
+
resolvedPath = path + "/" + resolvedPath;
|
|
1823
|
+
resolvedAbsolute = PATH.isAbs(path);
|
|
1824
|
+
} resolvedPath = PATH.normalizeArray(resolvedPath.split("/").filter(p => !!p), !resolvedAbsolute).join("/"); return (resolvedAbsolute ? "/" : "") + resolvedPath || "."; }, relative: (from, to) => { from = PATH_FS.resolve(from).slice(1); to = PATH_FS.resolve(to).slice(1); function trim(arr) { var start = 0; for (; start < arr.length; start++) {
|
|
1825
|
+
if (arr[start] !== "")
|
|
1826
|
+
break;
|
|
1827
|
+
} var end = arr.length - 1; for (; end >= 0; end--) {
|
|
1828
|
+
if (arr[end] !== "")
|
|
1829
|
+
break;
|
|
1830
|
+
} if (start > end)
|
|
1831
|
+
return []; return arr.slice(start, end - start + 1); } var fromParts = trim(from.split("/")); var toParts = trim(to.split("/")); var length = Math.min(fromParts.length, toParts.length); var samePartsLength = length; for (var i = 0; i < length; i++) {
|
|
1832
|
+
if (fromParts[i] !== toParts[i]) {
|
|
1833
|
+
samePartsLength = i;
|
|
1834
|
+
break;
|
|
1835
|
+
}
|
|
1836
|
+
} var outputParts = []; for (var i = samePartsLength; i < fromParts.length; i++) {
|
|
1837
|
+
outputParts.push("..");
|
|
1838
|
+
} outputParts = outputParts.concat(toParts.slice(samePartsLength)); return outputParts.join("/"); } };
|
|
1839
|
+
var UTF8Decoder = globalThis.TextDecoder && new TextDecoder;
|
|
1840
|
+
var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var maxIdx = idx + maxBytesToRead; while (heapOrArray[idx] && !(idx >= maxIdx))
|
|
1841
|
+
++idx; return idx; };
|
|
1842
|
+
var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead, ignoreNul) => { var endPtr = findStringEnd(heapOrArray, idx, maxBytesToRead); if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {
|
|
1843
|
+
return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));
|
|
1844
|
+
} var str = ""; while (idx < endPtr) {
|
|
1845
|
+
var u0 = heapOrArray[idx++];
|
|
1846
|
+
if (!(u0 & 128)) {
|
|
1847
|
+
str += String.fromCharCode(u0);
|
|
1848
|
+
continue;
|
|
1849
|
+
}
|
|
1850
|
+
var u1 = heapOrArray[idx++] & 63;
|
|
1851
|
+
if ((u0 & 224) == 192) {
|
|
1852
|
+
str += String.fromCharCode((u0 & 31) << 6 | u1);
|
|
1853
|
+
continue;
|
|
1854
|
+
}
|
|
1855
|
+
var u2 = heapOrArray[idx++] & 63;
|
|
1856
|
+
if ((u0 & 240) == 224) {
|
|
1857
|
+
u0 = (u0 & 15) << 12 | u1 << 6 | u2;
|
|
1858
|
+
}
|
|
1859
|
+
else {
|
|
1860
|
+
u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heapOrArray[idx++] & 63;
|
|
1861
|
+
}
|
|
1862
|
+
if (u0 < 65536) {
|
|
1863
|
+
str += String.fromCharCode(u0);
|
|
1864
|
+
}
|
|
1865
|
+
else {
|
|
1866
|
+
var ch = u0 - 65536;
|
|
1867
|
+
str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023);
|
|
1868
|
+
}
|
|
1869
|
+
} return str; };
|
|
1870
|
+
var FS_stdin_getChar_buffer = [];
|
|
1871
|
+
var lengthBytesUTF8 = str => { var len = 0; for (var i = 0; i < str.length; ++i) {
|
|
1872
|
+
var c = str.charCodeAt(i);
|
|
1873
|
+
if (c <= 127) {
|
|
1874
|
+
len++;
|
|
1875
|
+
}
|
|
1876
|
+
else if (c <= 2047) {
|
|
1877
|
+
len += 2;
|
|
1878
|
+
}
|
|
1879
|
+
else if (c >= 55296 && c <= 57343) {
|
|
1880
|
+
len += 4;
|
|
1881
|
+
++i;
|
|
1882
|
+
}
|
|
1883
|
+
else {
|
|
1884
|
+
len += 3;
|
|
1885
|
+
}
|
|
1886
|
+
} return len; };
|
|
1887
|
+
var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { if (!(maxBytesToWrite > 0))
|
|
1888
|
+
return 0; var startIdx = outIdx; var endIdx = outIdx + maxBytesToWrite - 1; for (var i = 0; i < str.length; ++i) {
|
|
1889
|
+
var u = str.codePointAt(i);
|
|
1890
|
+
if (u <= 127) {
|
|
1891
|
+
if (outIdx >= endIdx)
|
|
1892
|
+
break;
|
|
1893
|
+
heap[outIdx++] = u;
|
|
1894
|
+
}
|
|
1895
|
+
else if (u <= 2047) {
|
|
1896
|
+
if (outIdx + 1 >= endIdx)
|
|
1897
|
+
break;
|
|
1898
|
+
heap[outIdx++] = 192 | u >> 6;
|
|
1899
|
+
heap[outIdx++] = 128 | u & 63;
|
|
1900
|
+
}
|
|
1901
|
+
else if (u <= 65535) {
|
|
1902
|
+
if (outIdx + 2 >= endIdx)
|
|
1903
|
+
break;
|
|
1904
|
+
heap[outIdx++] = 224 | u >> 12;
|
|
1905
|
+
heap[outIdx++] = 128 | u >> 6 & 63;
|
|
1906
|
+
heap[outIdx++] = 128 | u & 63;
|
|
1907
|
+
}
|
|
1908
|
+
else {
|
|
1909
|
+
if (outIdx + 3 >= endIdx)
|
|
1910
|
+
break;
|
|
1911
|
+
heap[outIdx++] = 240 | u >> 18;
|
|
1912
|
+
heap[outIdx++] = 128 | u >> 12 & 63;
|
|
1913
|
+
heap[outIdx++] = 128 | u >> 6 & 63;
|
|
1914
|
+
heap[outIdx++] = 128 | u & 63;
|
|
1915
|
+
i++;
|
|
1916
|
+
}
|
|
1917
|
+
} heap[outIdx] = 0; return outIdx - startIdx; };
|
|
1918
|
+
var intArrayFromString = (stringy, dontAddNull, length) => { var len = lengthBytesUTF8(stringy) + 1; var u8array = new Array(len); var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); u8array.length = numBytesWritten; return u8array; };
|
|
1919
|
+
var FS_stdin_getChar = () => { var _a; if (!FS_stdin_getChar_buffer.length) {
|
|
1920
|
+
var result = null;
|
|
1921
|
+
if (ENVIRONMENT_IS_NODE) {
|
|
1922
|
+
var BUFSIZE = 256;
|
|
1923
|
+
var buf = Buffer.alloc(BUFSIZE);
|
|
1924
|
+
var bytesRead = 0;
|
|
1925
|
+
var fd = process.stdin.fd;
|
|
1926
|
+
try {
|
|
1927
|
+
bytesRead = fs.readSync(fd, buf, 0, BUFSIZE);
|
|
1928
|
+
}
|
|
1929
|
+
catch (e) {
|
|
1930
|
+
if (e.toString().includes("EOF"))
|
|
1931
|
+
bytesRead = 0;
|
|
1932
|
+
else
|
|
1933
|
+
throw e;
|
|
1934
|
+
}
|
|
1935
|
+
if (bytesRead > 0) {
|
|
1936
|
+
result = buf.slice(0, bytesRead).toString("utf-8");
|
|
1937
|
+
}
|
|
1938
|
+
}
|
|
1939
|
+
else if ((_a = globalThis.window) === null || _a === void 0 ? void 0 : _a.prompt) {
|
|
1940
|
+
result = window.prompt("Input: ");
|
|
1941
|
+
if (result !== null) {
|
|
1942
|
+
result += "\n";
|
|
1943
|
+
}
|
|
1944
|
+
}
|
|
1945
|
+
else ;
|
|
1946
|
+
if (!result) {
|
|
1947
|
+
return null;
|
|
1948
|
+
}
|
|
1949
|
+
FS_stdin_getChar_buffer = intArrayFromString(result);
|
|
1950
|
+
} return FS_stdin_getChar_buffer.shift(); };
|
|
1951
|
+
var TTY = { ttys: [], init() { }, shutdown() { }, register(dev, ops) { TTY.ttys[dev] = { input: [], output: [], ops }; FS.registerDevice(dev, TTY.stream_ops); }, stream_ops: { open(stream) { var tty = TTY.ttys[stream.node.rdev]; if (!tty) {
|
|
1952
|
+
throw new FS.ErrnoError(43);
|
|
1953
|
+
} stream.tty = tty; stream.seekable = false; }, close(stream) { stream.tty.ops.fsync(stream.tty); }, fsync(stream) { stream.tty.ops.fsync(stream.tty); }, read(stream, buffer, offset, length, pos) { if (!stream.tty || !stream.tty.ops.get_char) {
|
|
1954
|
+
throw new FS.ErrnoError(60);
|
|
1955
|
+
} var bytesRead = 0; for (var i = 0; i < length; i++) {
|
|
1956
|
+
var result;
|
|
1957
|
+
try {
|
|
1958
|
+
result = stream.tty.ops.get_char(stream.tty);
|
|
1959
|
+
}
|
|
1960
|
+
catch (e) {
|
|
1961
|
+
throw new FS.ErrnoError(29);
|
|
1962
|
+
}
|
|
1963
|
+
if (result === undefined && bytesRead === 0) {
|
|
1964
|
+
throw new FS.ErrnoError(6);
|
|
1965
|
+
}
|
|
1966
|
+
if (result === null || result === undefined)
|
|
1967
|
+
break;
|
|
1968
|
+
bytesRead++;
|
|
1969
|
+
buffer[offset + i] = result;
|
|
1970
|
+
} if (bytesRead) {
|
|
1971
|
+
stream.node.atime = Date.now();
|
|
1972
|
+
} return bytesRead; }, write(stream, buffer, offset, length, pos) { if (!stream.tty || !stream.tty.ops.put_char) {
|
|
1973
|
+
throw new FS.ErrnoError(60);
|
|
1974
|
+
} try {
|
|
1975
|
+
for (var i = 0; i < length; i++) {
|
|
1976
|
+
stream.tty.ops.put_char(stream.tty, buffer[offset + i]);
|
|
1977
|
+
}
|
|
1978
|
+
}
|
|
1979
|
+
catch (e) {
|
|
1980
|
+
throw new FS.ErrnoError(29);
|
|
1981
|
+
} if (length) {
|
|
1982
|
+
stream.node.mtime = stream.node.ctime = Date.now();
|
|
1983
|
+
} return i; } }, default_tty_ops: { get_char(tty) { return FS_stdin_getChar(); }, put_char(tty, val) { if (val === null || val === 10) {
|
|
1984
|
+
out(UTF8ArrayToString(tty.output));
|
|
1985
|
+
tty.output = [];
|
|
1986
|
+
}
|
|
1987
|
+
else {
|
|
1988
|
+
if (val != 0)
|
|
1989
|
+
tty.output.push(val);
|
|
1990
|
+
} }, fsync(tty) { var _a; if (((_a = tty.output) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
1991
|
+
out(UTF8ArrayToString(tty.output));
|
|
1992
|
+
tty.output = [];
|
|
1993
|
+
} }, ioctl_tcgets(tty) { return { c_iflag: 25856, c_oflag: 5, c_cflag: 191, c_lflag: 35387, c_cc: [3, 28, 127, 21, 4, 0, 1, 0, 17, 19, 26, 0, 18, 15, 23, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }; }, ioctl_tcsets(tty, optional_actions, data) { return 0; }, ioctl_tiocgwinsz(tty) { return [24, 80]; } }, default_tty1_ops: { put_char(tty, val) { if (val === null || val === 10) {
|
|
1994
|
+
err(UTF8ArrayToString(tty.output));
|
|
1995
|
+
tty.output = [];
|
|
1996
|
+
}
|
|
1997
|
+
else {
|
|
1998
|
+
if (val != 0)
|
|
1999
|
+
tty.output.push(val);
|
|
2000
|
+
} }, fsync(tty) { var _a; if (((_a = tty.output) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
2001
|
+
err(UTF8ArrayToString(tty.output));
|
|
2002
|
+
tty.output = [];
|
|
2003
|
+
} } } };
|
|
2004
|
+
var mmapAlloc = size => { abort(); };
|
|
2005
|
+
var MEMFS = { ops_table: null, mount(mount) { return MEMFS.createNode(null, "/", 16895, 0); }, createNode(parent, name, mode, dev) { var _a; if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {
|
|
2006
|
+
throw new FS.ErrnoError(63);
|
|
2007
|
+
} MEMFS.ops_table || (MEMFS.ops_table = { dir: { node: { getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr, lookup: MEMFS.node_ops.lookup, mknod: MEMFS.node_ops.mknod, rename: MEMFS.node_ops.rename, unlink: MEMFS.node_ops.unlink, rmdir: MEMFS.node_ops.rmdir, readdir: MEMFS.node_ops.readdir, symlink: MEMFS.node_ops.symlink }, stream: { llseek: MEMFS.stream_ops.llseek } }, file: { node: { getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr }, stream: { llseek: MEMFS.stream_ops.llseek, read: MEMFS.stream_ops.read, write: MEMFS.stream_ops.write, mmap: MEMFS.stream_ops.mmap, msync: MEMFS.stream_ops.msync } }, link: { node: { getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr, readlink: MEMFS.node_ops.readlink }, stream: {} }, chrdev: { node: { getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr }, stream: FS.chrdev_stream_ops } }); var node = FS.createNode(parent, name, mode, dev); if (FS.isDir(node.mode)) {
|
|
2008
|
+
node.node_ops = MEMFS.ops_table.dir.node;
|
|
2009
|
+
node.stream_ops = MEMFS.ops_table.dir.stream;
|
|
2010
|
+
node.contents = {};
|
|
2011
|
+
}
|
|
2012
|
+
else if (FS.isFile(node.mode)) {
|
|
2013
|
+
node.node_ops = MEMFS.ops_table.file.node;
|
|
2014
|
+
node.stream_ops = MEMFS.ops_table.file.stream;
|
|
2015
|
+
node.usedBytes = 0;
|
|
2016
|
+
node.contents = (_a = MEMFS.emptyFileContents) !== null && _a !== void 0 ? _a : (MEMFS.emptyFileContents = new Uint8Array(0));
|
|
2017
|
+
}
|
|
2018
|
+
else if (FS.isLink(node.mode)) {
|
|
2019
|
+
node.node_ops = MEMFS.ops_table.link.node;
|
|
2020
|
+
node.stream_ops = MEMFS.ops_table.link.stream;
|
|
2021
|
+
}
|
|
2022
|
+
else if (FS.isChrdev(node.mode)) {
|
|
2023
|
+
node.node_ops = MEMFS.ops_table.chrdev.node;
|
|
2024
|
+
node.stream_ops = MEMFS.ops_table.chrdev.stream;
|
|
2025
|
+
} node.atime = node.mtime = node.ctime = Date.now(); if (parent) {
|
|
2026
|
+
parent.contents[name] = node;
|
|
2027
|
+
parent.atime = parent.mtime = parent.ctime = node.atime;
|
|
2028
|
+
} return node; }, getFileDataAsTypedArray(node) { return node.contents.subarray(0, node.usedBytes); }, expandFileStorage(node, newCapacity) { var prevCapacity = node.contents.length; if (prevCapacity >= newCapacity)
|
|
2029
|
+
return; var CAPACITY_DOUBLING_MAX = 1024 * 1024; newCapacity = Math.max(newCapacity, prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125) >>> 0); if (prevCapacity)
|
|
2030
|
+
newCapacity = Math.max(newCapacity, 256); var oldContents = MEMFS.getFileDataAsTypedArray(node); node.contents = new Uint8Array(newCapacity); node.contents.set(oldContents); }, resizeFileStorage(node, newSize) { if (node.usedBytes == newSize)
|
|
2031
|
+
return; var oldContents = node.contents; node.contents = new Uint8Array(newSize); node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); node.usedBytes = newSize; }, node_ops: { getattr(node) { var attr = {}; attr.dev = FS.isChrdev(node.mode) ? node.id : 1; attr.ino = node.id; attr.mode = node.mode; attr.nlink = 1; attr.uid = 0; attr.gid = 0; attr.rdev = node.rdev; if (FS.isDir(node.mode)) {
|
|
2032
|
+
attr.size = 4096;
|
|
2033
|
+
}
|
|
2034
|
+
else if (FS.isFile(node.mode)) {
|
|
2035
|
+
attr.size = node.usedBytes;
|
|
2036
|
+
}
|
|
2037
|
+
else if (FS.isLink(node.mode)) {
|
|
2038
|
+
attr.size = node.link.length;
|
|
2039
|
+
}
|
|
2040
|
+
else {
|
|
2041
|
+
attr.size = 0;
|
|
2042
|
+
} attr.atime = new Date(node.atime); attr.mtime = new Date(node.mtime); attr.ctime = new Date(node.ctime); attr.blksize = 4096; attr.blocks = Math.ceil(attr.size / attr.blksize); return attr; }, setattr(node, attr) { for (const key of ["mode", "atime", "mtime", "ctime"]) {
|
|
2043
|
+
if (attr[key] != null) {
|
|
2044
|
+
node[key] = attr[key];
|
|
2045
|
+
}
|
|
2046
|
+
} if (attr.size !== undefined) {
|
|
2047
|
+
MEMFS.resizeFileStorage(node, attr.size);
|
|
2048
|
+
} }, lookup(parent, name) { if (!MEMFS.doesNotExistError) {
|
|
2049
|
+
MEMFS.doesNotExistError = new FS.ErrnoError(44);
|
|
2050
|
+
MEMFS.doesNotExistError.stack = "<generic error, no stack>";
|
|
2051
|
+
} throw MEMFS.doesNotExistError; }, mknod(parent, name, mode, dev) { return MEMFS.createNode(parent, name, mode, dev); }, rename(old_node, new_dir, new_name) { var new_node; try {
|
|
2052
|
+
new_node = FS.lookupNode(new_dir, new_name);
|
|
2053
|
+
}
|
|
2054
|
+
catch (e) { } if (new_node) {
|
|
2055
|
+
if (FS.isDir(old_node.mode)) {
|
|
2056
|
+
for (var i in new_node.contents) {
|
|
2057
|
+
throw new FS.ErrnoError(55);
|
|
2058
|
+
}
|
|
2059
|
+
}
|
|
2060
|
+
FS.hashRemoveNode(new_node);
|
|
2061
|
+
} delete old_node.parent.contents[old_node.name]; new_dir.contents[new_name] = old_node; old_node.name = new_name; new_dir.ctime = new_dir.mtime = old_node.parent.ctime = old_node.parent.mtime = Date.now(); }, unlink(parent, name) { delete parent.contents[name]; parent.ctime = parent.mtime = Date.now(); }, rmdir(parent, name) { var node = FS.lookupNode(parent, name); for (var i in node.contents) {
|
|
2062
|
+
throw new FS.ErrnoError(55);
|
|
2063
|
+
} delete parent.contents[name]; parent.ctime = parent.mtime = Date.now(); }, readdir(node) { return [".", "..", ...Object.keys(node.contents)]; }, symlink(parent, newname, oldpath) { var node = MEMFS.createNode(parent, newname, 511 | 40960, 0); node.link = oldpath; return node; }, readlink(node) { if (!FS.isLink(node.mode)) {
|
|
2064
|
+
throw new FS.ErrnoError(28);
|
|
2065
|
+
} return node.link; } }, stream_ops: { read(stream, buffer, offset, length, position) { var contents = stream.node.contents; if (position >= stream.node.usedBytes)
|
|
2066
|
+
return 0; var size = Math.min(stream.node.usedBytes - position, length); buffer.set(contents.subarray(position, position + size), offset); return size; }, write(stream, buffer, offset, length, position, canOwn) { if (buffer.buffer === HEAP8.buffer) {
|
|
2067
|
+
canOwn = false;
|
|
2068
|
+
} if (!length)
|
|
2069
|
+
return 0; var node = stream.node; node.mtime = node.ctime = Date.now(); if (canOwn) {
|
|
2070
|
+
node.contents = buffer.subarray(offset, offset + length);
|
|
2071
|
+
node.usedBytes = length;
|
|
2072
|
+
}
|
|
2073
|
+
else if (node.usedBytes === 0 && position === 0) {
|
|
2074
|
+
node.contents = buffer.slice(offset, offset + length);
|
|
2075
|
+
node.usedBytes = length;
|
|
2076
|
+
}
|
|
2077
|
+
else {
|
|
2078
|
+
MEMFS.expandFileStorage(node, position + length);
|
|
2079
|
+
node.contents.set(buffer.subarray(offset, offset + length), position);
|
|
2080
|
+
node.usedBytes = Math.max(node.usedBytes, position + length);
|
|
2081
|
+
} return length; }, llseek(stream, offset, whence) { var position = offset; if (whence === 1) {
|
|
2082
|
+
position += stream.position;
|
|
2083
|
+
}
|
|
2084
|
+
else if (whence === 2) {
|
|
2085
|
+
if (FS.isFile(stream.node.mode)) {
|
|
2086
|
+
position += stream.node.usedBytes;
|
|
2087
|
+
}
|
|
2088
|
+
} if (position < 0) {
|
|
2089
|
+
throw new FS.ErrnoError(28);
|
|
2090
|
+
} return position; }, mmap(stream, length, position, prot, flags) { if (!FS.isFile(stream.node.mode)) {
|
|
2091
|
+
throw new FS.ErrnoError(43);
|
|
2092
|
+
} var ptr; var allocated; var contents = stream.node.contents; if (!(flags & 2) && contents.buffer === HEAP8.buffer) {
|
|
2093
|
+
allocated = false;
|
|
2094
|
+
ptr = contents.byteOffset;
|
|
2095
|
+
}
|
|
2096
|
+
else {
|
|
2097
|
+
allocated = true;
|
|
2098
|
+
ptr = mmapAlloc();
|
|
2099
|
+
if (!ptr) {
|
|
2100
|
+
throw new FS.ErrnoError(48);
|
|
2101
|
+
}
|
|
2102
|
+
if (contents) {
|
|
2103
|
+
if (position > 0 || position + length < contents.length) {
|
|
2104
|
+
if (contents.subarray) {
|
|
2105
|
+
contents = contents.subarray(position, position + length);
|
|
2106
|
+
}
|
|
2107
|
+
else {
|
|
2108
|
+
contents = Array.prototype.slice.call(contents, position, position + length);
|
|
2109
|
+
}
|
|
2110
|
+
}
|
|
2111
|
+
HEAP8.set(contents, ptr);
|
|
2112
|
+
}
|
|
2113
|
+
} return { ptr, allocated }; }, msync(stream, buffer, offset, length, mmapFlags) { MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); return 0; } } };
|
|
2114
|
+
var FS_modeStringToFlags = str => { if (typeof str != "string")
|
|
2115
|
+
return str; var flagModes = { r: 0, "r+": 2, w: 512 | 64 | 1, "w+": 512 | 64 | 2, a: 1024 | 64 | 1, "a+": 1024 | 64 | 2 }; var flags = flagModes[str]; if (typeof flags == "undefined") {
|
|
2116
|
+
throw new Error(`Unknown file open mode: ${str}`);
|
|
2117
|
+
} return flags; };
|
|
2118
|
+
var FS_fileDataToTypedArray = data => { if (typeof data == "string") {
|
|
2119
|
+
data = intArrayFromString(data);
|
|
2120
|
+
} if (!data.subarray) {
|
|
2121
|
+
data = new Uint8Array(data);
|
|
2122
|
+
} return data; };
|
|
2123
|
+
var FS_getMode = (canRead, canWrite) => { var mode = 0; if (canRead)
|
|
2124
|
+
mode |= 292 | 73; if (canWrite)
|
|
2125
|
+
mode |= 146; return mode; };
|
|
2126
|
+
var asyncLoad = (url) => tslib_es6.__awaiter(this, void 0, void 0, function* () { var arrayBuffer = yield readAsync(url); return new Uint8Array(arrayBuffer); });
|
|
2127
|
+
var FS_createDataFile = (...args) => FS.createDataFile(...args);
|
|
2128
|
+
var runDependencies = 0;
|
|
2129
|
+
var dependenciesFulfilled = null;
|
|
2130
|
+
var removeRunDependency = id => { var _a; runDependencies--; (_a = Module["monitorRunDependencies"]) === null || _a === void 0 ? void 0 : _a.call(Module, runDependencies); if (runDependencies == 0) {
|
|
2131
|
+
if (dependenciesFulfilled) {
|
|
2132
|
+
var callback = dependenciesFulfilled;
|
|
2133
|
+
dependenciesFulfilled = null;
|
|
2134
|
+
callback();
|
|
2135
|
+
}
|
|
2136
|
+
} };
|
|
2137
|
+
var addRunDependency = id => { var _a; runDependencies++; (_a = Module["monitorRunDependencies"]) === null || _a === void 0 ? void 0 : _a.call(Module, runDependencies); };
|
|
2138
|
+
var preloadPlugins = [];
|
|
2139
|
+
var FS_handledByPreloadPlugin = (byteArray, fullname) => tslib_es6.__awaiter(this, void 0, void 0, function* () { if (typeof Browser != "undefined")
|
|
2140
|
+
Browser.init(); for (var plugin of preloadPlugins) {
|
|
2141
|
+
if (plugin["canHandle"](fullname)) {
|
|
2142
|
+
return plugin["handle"](byteArray, fullname);
|
|
2143
|
+
}
|
|
2144
|
+
} return byteArray; });
|
|
2145
|
+
var FS_preloadFile = (parent, name, url, canRead, canWrite, dontCreateFile, canOwn, preFinish) => tslib_es6.__awaiter(this, void 0, void 0, function* () { var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; addRunDependency(); try {
|
|
2146
|
+
var byteArray = url;
|
|
2147
|
+
if (typeof url == "string") {
|
|
2148
|
+
byteArray = yield asyncLoad(url);
|
|
2149
|
+
}
|
|
2150
|
+
byteArray = yield FS_handledByPreloadPlugin(byteArray, fullname);
|
|
2151
|
+
preFinish === null || preFinish === void 0 ? void 0 : preFinish();
|
|
2152
|
+
if (!dontCreateFile) {
|
|
2153
|
+
FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);
|
|
2154
|
+
}
|
|
2155
|
+
}
|
|
2156
|
+
finally {
|
|
2157
|
+
removeRunDependency();
|
|
2158
|
+
} });
|
|
2159
|
+
var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { FS_preloadFile(parent, name, url, canRead, canWrite, dontCreateFile, canOwn, preFinish).then(onload).catch(onerror); };
|
|
2160
|
+
var FS = { root: null, mounts: [], devices: {}, streams: [], nextInode: 1, nameTable: null, currentPath: "/", initialized: false, ignorePermissions: true, filesystems: null, syncFSRequests: 0, ErrnoError: class {
|
|
2161
|
+
constructor(errno) {
|
|
2162
|
+
this.name = "ErrnoError";
|
|
2163
|
+
this.errno = errno;
|
|
2164
|
+
}
|
|
2165
|
+
}, FSStream: class {
|
|
2166
|
+
constructor() {
|
|
2167
|
+
this.shared = {};
|
|
2168
|
+
}
|
|
2169
|
+
get object() { return this.node; }
|
|
2170
|
+
set object(val) { this.node = val; }
|
|
2171
|
+
get isRead() { return (this.flags & 2097155) !== 1; }
|
|
2172
|
+
get isWrite() { return (this.flags & 2097155) !== 0; }
|
|
2173
|
+
get isAppend() { return this.flags & 1024; }
|
|
2174
|
+
get flags() { return this.shared.flags; }
|
|
2175
|
+
set flags(val) { this.shared.flags = val; }
|
|
2176
|
+
get position() { return this.shared.position; }
|
|
2177
|
+
set position(val) { this.shared.position = val; }
|
|
2178
|
+
}, FSNode: class {
|
|
2179
|
+
constructor(parent, name, mode, rdev) {
|
|
2180
|
+
this.node_ops = {};
|
|
2181
|
+
this.stream_ops = {};
|
|
2182
|
+
this.readMode = 292 | 73;
|
|
2183
|
+
this.writeMode = 146;
|
|
2184
|
+
this.mounted = null;
|
|
2185
|
+
if (!parent) {
|
|
2186
|
+
parent = this;
|
|
2187
|
+
}
|
|
2188
|
+
this.parent = parent;
|
|
2189
|
+
this.mount = parent.mount;
|
|
2190
|
+
this.id = FS.nextInode++;
|
|
2191
|
+
this.name = name;
|
|
2192
|
+
this.mode = mode;
|
|
2193
|
+
this.rdev = rdev;
|
|
2194
|
+
this.atime = this.mtime = this.ctime = Date.now();
|
|
2195
|
+
}
|
|
2196
|
+
get read() { return (this.mode & this.readMode) === this.readMode; }
|
|
2197
|
+
set read(val) { val ? this.mode |= this.readMode : this.mode &= ~this.readMode; }
|
|
2198
|
+
get write() { return (this.mode & this.writeMode) === this.writeMode; }
|
|
2199
|
+
set write(val) { val ? this.mode |= this.writeMode : this.mode &= ~this.writeMode; }
|
|
2200
|
+
get isFolder() { return FS.isDir(this.mode); }
|
|
2201
|
+
get isDevice() { return FS.isChrdev(this.mode); }
|
|
2202
|
+
}, lookupPath(path, opts = {}) { var _a; if (!path) {
|
|
2203
|
+
throw new FS.ErrnoError(44);
|
|
2204
|
+
} (_a = opts.follow_mount) !== null && _a !== void 0 ? _a : (opts.follow_mount = true); if (!PATH.isAbs(path)) {
|
|
2205
|
+
path = FS.cwd() + "/" + path;
|
|
2206
|
+
} linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) {
|
|
2207
|
+
var parts = path.split("/").filter(p => !!p);
|
|
2208
|
+
var current = FS.root;
|
|
2209
|
+
var current_path = "/";
|
|
2210
|
+
for (var i = 0; i < parts.length; i++) {
|
|
2211
|
+
var islast = i === parts.length - 1;
|
|
2212
|
+
if (islast && opts.parent) {
|
|
2213
|
+
break;
|
|
2214
|
+
}
|
|
2215
|
+
if (parts[i] === ".") {
|
|
2216
|
+
continue;
|
|
2217
|
+
}
|
|
2218
|
+
if (parts[i] === "..") {
|
|
2219
|
+
current_path = PATH.dirname(current_path);
|
|
2220
|
+
if (FS.isRoot(current)) {
|
|
2221
|
+
path = current_path + "/" + parts.slice(i + 1).join("/");
|
|
2222
|
+
nlinks--;
|
|
2223
|
+
continue linkloop;
|
|
2224
|
+
}
|
|
2225
|
+
else {
|
|
2226
|
+
current = current.parent;
|
|
2227
|
+
}
|
|
2228
|
+
continue;
|
|
2229
|
+
}
|
|
2230
|
+
current_path = PATH.join2(current_path, parts[i]);
|
|
2231
|
+
try {
|
|
2232
|
+
current = FS.lookupNode(current, parts[i]);
|
|
2233
|
+
}
|
|
2234
|
+
catch (e) {
|
|
2235
|
+
if ((e === null || e === void 0 ? void 0 : e.errno) === 44 && islast && opts.noent_okay) {
|
|
2236
|
+
return { path: current_path };
|
|
2237
|
+
}
|
|
2238
|
+
throw e;
|
|
2239
|
+
}
|
|
2240
|
+
if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) {
|
|
2241
|
+
current = current.mounted.root;
|
|
2242
|
+
}
|
|
2243
|
+
if (FS.isLink(current.mode) && (!islast || opts.follow)) {
|
|
2244
|
+
if (!current.node_ops.readlink) {
|
|
2245
|
+
throw new FS.ErrnoError(52);
|
|
2246
|
+
}
|
|
2247
|
+
var link = current.node_ops.readlink(current);
|
|
2248
|
+
if (!PATH.isAbs(link)) {
|
|
2249
|
+
link = PATH.dirname(current_path) + "/" + link;
|
|
2250
|
+
}
|
|
2251
|
+
path = link + "/" + parts.slice(i + 1).join("/");
|
|
2252
|
+
continue linkloop;
|
|
2253
|
+
}
|
|
2254
|
+
}
|
|
2255
|
+
return { path: current_path, node: current };
|
|
2256
|
+
} throw new FS.ErrnoError(32); }, getPath(node) { var path; while (true) {
|
|
2257
|
+
if (FS.isRoot(node)) {
|
|
2258
|
+
var mount = node.mount.mountpoint;
|
|
2259
|
+
if (!path)
|
|
2260
|
+
return mount;
|
|
2261
|
+
return mount[mount.length - 1] !== "/" ? `${mount}/${path}` : mount + path;
|
|
2262
|
+
}
|
|
2263
|
+
path = path ? `${node.name}/${path}` : node.name;
|
|
2264
|
+
node = node.parent;
|
|
2265
|
+
} }, hashName(parentid, name) { var hash = 0; for (var i = 0; i < name.length; i++) {
|
|
2266
|
+
hash = (hash << 5) - hash + name.charCodeAt(i) | 0;
|
|
2267
|
+
} return (parentid + hash >>> 0) % FS.nameTable.length; }, hashAddNode(node) { var hash = FS.hashName(node.parent.id, node.name); node.name_next = FS.nameTable[hash]; FS.nameTable[hash] = node; }, hashRemoveNode(node) { var hash = FS.hashName(node.parent.id, node.name); if (FS.nameTable[hash] === node) {
|
|
2268
|
+
FS.nameTable[hash] = node.name_next;
|
|
2269
|
+
}
|
|
2270
|
+
else {
|
|
2271
|
+
var current = FS.nameTable[hash];
|
|
2272
|
+
while (current) {
|
|
2273
|
+
if (current.name_next === node) {
|
|
2274
|
+
current.name_next = node.name_next;
|
|
2275
|
+
break;
|
|
2276
|
+
}
|
|
2277
|
+
current = current.name_next;
|
|
2278
|
+
}
|
|
2279
|
+
} }, lookupNode(parent, name) { var errCode = FS.mayLookup(parent); if (errCode) {
|
|
2280
|
+
throw new FS.ErrnoError(errCode);
|
|
2281
|
+
} var hash = FS.hashName(parent.id, name); for (var node = FS.nameTable[hash]; node; node = node.name_next) {
|
|
2282
|
+
var nodeName = node.name;
|
|
2283
|
+
if (node.parent.id === parent.id && nodeName === name) {
|
|
2284
|
+
return node;
|
|
2285
|
+
}
|
|
2286
|
+
} return FS.lookup(parent, name); }, createNode(parent, name, mode, rdev) { var node = new FS.FSNode(parent, name, mode, rdev); FS.hashAddNode(node); return node; }, destroyNode(node) { FS.hashRemoveNode(node); }, isRoot(node) { return node === node.parent; }, isMountpoint(node) { return !!node.mounted; }, isFile(mode) { return (mode & 61440) === 32768; }, isDir(mode) { return (mode & 61440) === 16384; }, isLink(mode) { return (mode & 61440) === 40960; }, isChrdev(mode) { return (mode & 61440) === 8192; }, isBlkdev(mode) { return (mode & 61440) === 24576; }, isFIFO(mode) { return (mode & 61440) === 4096; }, isSocket(mode) { return (mode & 49152) === 49152; }, flagsToPermissionString(flag) { var perms = ["r", "w", "rw"][flag & 3]; if (flag & 512) {
|
|
2287
|
+
perms += "w";
|
|
2288
|
+
} return perms; }, nodePermissions(node, perms) { if (FS.ignorePermissions) {
|
|
2289
|
+
return 0;
|
|
2290
|
+
} if (perms.includes("r") && !(node.mode & 292)) {
|
|
2291
|
+
return 2;
|
|
2292
|
+
} if (perms.includes("w") && !(node.mode & 146)) {
|
|
2293
|
+
return 2;
|
|
2294
|
+
} if (perms.includes("x") && !(node.mode & 73)) {
|
|
2295
|
+
return 2;
|
|
2296
|
+
} return 0; }, mayLookup(dir) { if (!FS.isDir(dir.mode))
|
|
2297
|
+
return 54; var errCode = FS.nodePermissions(dir, "x"); if (errCode)
|
|
2298
|
+
return errCode; if (!dir.node_ops.lookup)
|
|
2299
|
+
return 2; return 0; }, mayCreate(dir, name) { if (!FS.isDir(dir.mode)) {
|
|
2300
|
+
return 54;
|
|
2301
|
+
} try {
|
|
2302
|
+
var node = FS.lookupNode(dir, name);
|
|
2303
|
+
return 20;
|
|
2304
|
+
}
|
|
2305
|
+
catch (e) { } return FS.nodePermissions(dir, "wx"); }, mayDelete(dir, name, isdir) { var node; try {
|
|
2306
|
+
node = FS.lookupNode(dir, name);
|
|
2307
|
+
}
|
|
2308
|
+
catch (e) {
|
|
2309
|
+
return e.errno;
|
|
2310
|
+
} var errCode = FS.nodePermissions(dir, "wx"); if (errCode) {
|
|
2311
|
+
return errCode;
|
|
2312
|
+
} if (isdir) {
|
|
2313
|
+
if (!FS.isDir(node.mode)) {
|
|
2314
|
+
return 54;
|
|
2315
|
+
}
|
|
2316
|
+
if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {
|
|
2317
|
+
return 10;
|
|
2318
|
+
}
|
|
2319
|
+
}
|
|
2320
|
+
else if (FS.isDir(node.mode)) {
|
|
2321
|
+
return 31;
|
|
2322
|
+
} return 0; }, mayOpen(node, flags) { if (!node) {
|
|
2323
|
+
return 44;
|
|
2324
|
+
} if (FS.isLink(node.mode)) {
|
|
2325
|
+
return 32;
|
|
2326
|
+
} var mode = FS.flagsToPermissionString(flags); if (FS.isDir(node.mode)) {
|
|
2327
|
+
if (mode !== "r" || flags & (512 | 64)) {
|
|
2328
|
+
return 31;
|
|
2329
|
+
}
|
|
2330
|
+
} return FS.nodePermissions(node, mode); }, checkOpExists(op, err) { if (!op) {
|
|
2331
|
+
throw new FS.ErrnoError(err);
|
|
2332
|
+
} return op; }, MAX_OPEN_FDS: 4096, nextfd() { for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) {
|
|
2333
|
+
if (!FS.streams[fd]) {
|
|
2334
|
+
return fd;
|
|
2335
|
+
}
|
|
2336
|
+
} throw new FS.ErrnoError(33); }, getStreamChecked(fd) { var stream = FS.getStream(fd); if (!stream) {
|
|
2337
|
+
throw new FS.ErrnoError(8);
|
|
2338
|
+
} return stream; }, getStream: fd => FS.streams[fd], createStream(stream, fd = -1) { stream = Object.assign(new FS.FSStream, stream); if (fd == -1) {
|
|
2339
|
+
fd = FS.nextfd();
|
|
2340
|
+
} stream.fd = fd; FS.streams[fd] = stream; return stream; }, closeStream(fd) { FS.streams[fd] = null; }, dupStream(origStream, fd = -1) { var _a, _b; var stream = FS.createStream(origStream, fd); (_b = (_a = stream.stream_ops) === null || _a === void 0 ? void 0 : _a.dup) === null || _b === void 0 ? void 0 : _b.call(_a, stream); return stream; }, doSetAttr(stream, node, attr) { var setattr = stream === null || stream === void 0 ? void 0 : stream.stream_ops.setattr; var arg = setattr ? stream : node; setattr !== null && setattr !== void 0 ? setattr : (setattr = node.node_ops.setattr); FS.checkOpExists(setattr, 63); setattr(arg, attr); }, chrdev_stream_ops: { open(stream) { var _a, _b; var device = FS.getDevice(stream.node.rdev); stream.stream_ops = device.stream_ops; (_b = (_a = stream.stream_ops).open) === null || _b === void 0 ? void 0 : _b.call(_a, stream); }, llseek() { throw new FS.ErrnoError(70); } }, major: dev => dev >> 8, minor: dev => dev & 255, makedev: (ma, mi) => ma << 8 | mi, registerDevice(dev, ops) { FS.devices[dev] = { stream_ops: ops }; }, getDevice: dev => FS.devices[dev], getMounts(mount) { var mounts = []; var check = [mount]; while (check.length) {
|
|
2341
|
+
var m = check.pop();
|
|
2342
|
+
mounts.push(m);
|
|
2343
|
+
check.push(...m.mounts);
|
|
2344
|
+
} return mounts; }, syncfs(populate, callback) { if (typeof populate == "function") {
|
|
2345
|
+
callback = populate;
|
|
2346
|
+
populate = false;
|
|
2347
|
+
} FS.syncFSRequests++; if (FS.syncFSRequests > 1) {
|
|
2348
|
+
err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);
|
|
2349
|
+
} var mounts = FS.getMounts(FS.root.mount); var completed = 0; function doCallback(errCode) { FS.syncFSRequests--; return callback(errCode); } function done(errCode) { if (errCode) {
|
|
2350
|
+
if (!done.errored) {
|
|
2351
|
+
done.errored = true;
|
|
2352
|
+
return doCallback(errCode);
|
|
2353
|
+
}
|
|
2354
|
+
return;
|
|
2355
|
+
} if (++completed >= mounts.length) {
|
|
2356
|
+
doCallback(null);
|
|
2357
|
+
} } for (var mount of mounts) {
|
|
2358
|
+
if (mount.type.syncfs) {
|
|
2359
|
+
mount.type.syncfs(mount, populate, done);
|
|
2360
|
+
}
|
|
2361
|
+
else {
|
|
2362
|
+
done(null);
|
|
2363
|
+
}
|
|
2364
|
+
} }, mount(type, opts, mountpoint) { var root = mountpoint === "/"; var pseudo = !mountpoint; var node; if (root && FS.root) {
|
|
2365
|
+
throw new FS.ErrnoError(10);
|
|
2366
|
+
}
|
|
2367
|
+
else if (!root && !pseudo) {
|
|
2368
|
+
var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
|
|
2369
|
+
mountpoint = lookup.path;
|
|
2370
|
+
node = lookup.node;
|
|
2371
|
+
if (FS.isMountpoint(node)) {
|
|
2372
|
+
throw new FS.ErrnoError(10);
|
|
2373
|
+
}
|
|
2374
|
+
if (!FS.isDir(node.mode)) {
|
|
2375
|
+
throw new FS.ErrnoError(54);
|
|
2376
|
+
}
|
|
2377
|
+
} var mount = { type, opts, mountpoint, mounts: [] }; var mountRoot = type.mount(mount); mountRoot.mount = mount; mount.root = mountRoot; if (root) {
|
|
2378
|
+
FS.root = mountRoot;
|
|
2379
|
+
}
|
|
2380
|
+
else if (node) {
|
|
2381
|
+
node.mounted = mount;
|
|
2382
|
+
if (node.mount) {
|
|
2383
|
+
node.mount.mounts.push(mount);
|
|
2384
|
+
}
|
|
2385
|
+
} return mountRoot; }, unmount(mountpoint) { var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); if (!FS.isMountpoint(lookup.node)) {
|
|
2386
|
+
throw new FS.ErrnoError(28);
|
|
2387
|
+
} var node = lookup.node; var mount = node.mounted; var mounts = FS.getMounts(mount); for (var [hash, current] of Object.entries(FS.nameTable)) {
|
|
2388
|
+
while (current) {
|
|
2389
|
+
var next = current.name_next;
|
|
2390
|
+
if (mounts.includes(current.mount)) {
|
|
2391
|
+
FS.destroyNode(current);
|
|
2392
|
+
}
|
|
2393
|
+
current = next;
|
|
2394
|
+
}
|
|
2395
|
+
} node.mounted = null; var idx = node.mount.mounts.indexOf(mount); node.mount.mounts.splice(idx, 1); }, lookup(parent, name) { return parent.node_ops.lookup(parent, name); }, mknod(path, mode, dev) { var lookup = FS.lookupPath(path, { parent: true }); var parent = lookup.node; var name = PATH.basename(path); if (!name) {
|
|
2396
|
+
throw new FS.ErrnoError(28);
|
|
2397
|
+
} if (name === "." || name === "..") {
|
|
2398
|
+
throw new FS.ErrnoError(20);
|
|
2399
|
+
} var errCode = FS.mayCreate(parent, name); if (errCode) {
|
|
2400
|
+
throw new FS.ErrnoError(errCode);
|
|
2401
|
+
} if (!parent.node_ops.mknod) {
|
|
2402
|
+
throw new FS.ErrnoError(63);
|
|
2403
|
+
} return parent.node_ops.mknod(parent, name, mode, dev); }, statfs(path) { return FS.statfsNode(FS.lookupPath(path, { follow: true }).node); }, statfsStream(stream) { return FS.statfsNode(stream.node); }, statfsNode(node) { var rtn = { bsize: 4096, frsize: 4096, blocks: 1e6, bfree: 5e5, bavail: 5e5, files: FS.nextInode, ffree: FS.nextInode - 1, fsid: 42, flags: 2, namelen: 255 }; if (node.node_ops.statfs) {
|
|
2404
|
+
Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root));
|
|
2405
|
+
} return rtn; }, create(path, mode = 438) { mode &= 4095; mode |= 32768; return FS.mknod(path, mode, 0); }, mkdir(path, mode = 511) { mode &= 511 | 512; mode |= 16384; return FS.mknod(path, mode, 0); }, mkdirTree(path, mode) { var dirs = path.split("/"); var d = ""; for (var dir of dirs) {
|
|
2406
|
+
if (!dir)
|
|
2407
|
+
continue;
|
|
2408
|
+
if (d || PATH.isAbs(path))
|
|
2409
|
+
d += "/";
|
|
2410
|
+
d += dir;
|
|
2411
|
+
try {
|
|
2412
|
+
FS.mkdir(d, mode);
|
|
2413
|
+
}
|
|
2414
|
+
catch (e) {
|
|
2415
|
+
if (e.errno != 20)
|
|
2416
|
+
throw e;
|
|
2417
|
+
}
|
|
2418
|
+
} }, mkdev(path, mode, dev) { if (typeof dev == "undefined") {
|
|
2419
|
+
dev = mode;
|
|
2420
|
+
mode = 438;
|
|
2421
|
+
} mode |= 8192; return FS.mknod(path, mode, dev); }, symlink(oldpath, newpath) { if (!PATH_FS.resolve(oldpath)) {
|
|
2422
|
+
throw new FS.ErrnoError(44);
|
|
2423
|
+
} var lookup = FS.lookupPath(newpath, { parent: true }); var parent = lookup.node; if (!parent) {
|
|
2424
|
+
throw new FS.ErrnoError(44);
|
|
2425
|
+
} var newname = PATH.basename(newpath); var errCode = FS.mayCreate(parent, newname); if (errCode) {
|
|
2426
|
+
throw new FS.ErrnoError(errCode);
|
|
2427
|
+
} if (!parent.node_ops.symlink) {
|
|
2428
|
+
throw new FS.ErrnoError(63);
|
|
2429
|
+
} return parent.node_ops.symlink(parent, newname, oldpath); }, rename(old_path, new_path) { var old_dirname = PATH.dirname(old_path); var new_dirname = PATH.dirname(new_path); var old_name = PATH.basename(old_path); var new_name = PATH.basename(new_path); var lookup, old_dir, new_dir; lookup = FS.lookupPath(old_path, { parent: true }); old_dir = lookup.node; lookup = FS.lookupPath(new_path, { parent: true }); new_dir = lookup.node; if (!old_dir || !new_dir)
|
|
2430
|
+
throw new FS.ErrnoError(44); if (old_dir.mount !== new_dir.mount) {
|
|
2431
|
+
throw new FS.ErrnoError(75);
|
|
2432
|
+
} var old_node = FS.lookupNode(old_dir, old_name); var relative = PATH_FS.relative(old_path, new_dirname); if (relative.charAt(0) !== ".") {
|
|
2433
|
+
throw new FS.ErrnoError(28);
|
|
2434
|
+
} relative = PATH_FS.relative(new_path, old_dirname); if (relative.charAt(0) !== ".") {
|
|
2435
|
+
throw new FS.ErrnoError(55);
|
|
2436
|
+
} var new_node; try {
|
|
2437
|
+
new_node = FS.lookupNode(new_dir, new_name);
|
|
2438
|
+
}
|
|
2439
|
+
catch (e) { } if (old_node === new_node) {
|
|
2440
|
+
return;
|
|
2441
|
+
} var isdir = FS.isDir(old_node.mode); var errCode = FS.mayDelete(old_dir, old_name, isdir); if (errCode) {
|
|
2442
|
+
throw new FS.ErrnoError(errCode);
|
|
2443
|
+
} errCode = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name); if (errCode) {
|
|
2444
|
+
throw new FS.ErrnoError(errCode);
|
|
2445
|
+
} if (!old_dir.node_ops.rename) {
|
|
2446
|
+
throw new FS.ErrnoError(63);
|
|
2447
|
+
} if (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node)) {
|
|
2448
|
+
throw new FS.ErrnoError(10);
|
|
2449
|
+
} if (new_dir !== old_dir) {
|
|
2450
|
+
errCode = FS.nodePermissions(old_dir, "w");
|
|
2451
|
+
if (errCode) {
|
|
2452
|
+
throw new FS.ErrnoError(errCode);
|
|
2453
|
+
}
|
|
2454
|
+
} FS.hashRemoveNode(old_node); try {
|
|
2455
|
+
old_dir.node_ops.rename(old_node, new_dir, new_name);
|
|
2456
|
+
old_node.parent = new_dir;
|
|
2457
|
+
}
|
|
2458
|
+
catch (e) {
|
|
2459
|
+
throw e;
|
|
2460
|
+
}
|
|
2461
|
+
finally {
|
|
2462
|
+
FS.hashAddNode(old_node);
|
|
2463
|
+
} }, rmdir(path) { var lookup = FS.lookupPath(path, { parent: true }); var parent = lookup.node; var name = PATH.basename(path); var node = FS.lookupNode(parent, name); var errCode = FS.mayDelete(parent, name, true); if (errCode) {
|
|
2464
|
+
throw new FS.ErrnoError(errCode);
|
|
2465
|
+
} if (!parent.node_ops.rmdir) {
|
|
2466
|
+
throw new FS.ErrnoError(63);
|
|
2467
|
+
} if (FS.isMountpoint(node)) {
|
|
2468
|
+
throw new FS.ErrnoError(10);
|
|
2469
|
+
} parent.node_ops.rmdir(parent, name); FS.destroyNode(node); }, readdir(path) { var lookup = FS.lookupPath(path, { follow: true }); var node = lookup.node; var readdir = FS.checkOpExists(node.node_ops.readdir, 54); return readdir(node); }, unlink(path) { var lookup = FS.lookupPath(path, { parent: true }); var parent = lookup.node; if (!parent) {
|
|
2470
|
+
throw new FS.ErrnoError(44);
|
|
2471
|
+
} var name = PATH.basename(path); var node = FS.lookupNode(parent, name); var errCode = FS.mayDelete(parent, name, false); if (errCode) {
|
|
2472
|
+
throw new FS.ErrnoError(errCode);
|
|
2473
|
+
} if (!parent.node_ops.unlink) {
|
|
2474
|
+
throw new FS.ErrnoError(63);
|
|
2475
|
+
} if (FS.isMountpoint(node)) {
|
|
2476
|
+
throw new FS.ErrnoError(10);
|
|
2477
|
+
} parent.node_ops.unlink(parent, name); FS.destroyNode(node); }, readlink(path) { var lookup = FS.lookupPath(path); var link = lookup.node; if (!link) {
|
|
2478
|
+
throw new FS.ErrnoError(44);
|
|
2479
|
+
} if (!link.node_ops.readlink) {
|
|
2480
|
+
throw new FS.ErrnoError(28);
|
|
2481
|
+
} return link.node_ops.readlink(link); }, stat(path, dontFollow) { var lookup = FS.lookupPath(path, { follow: !dontFollow }); var node = lookup.node; var getattr = FS.checkOpExists(node.node_ops.getattr, 63); return getattr(node); }, fstat(fd) { var stream = FS.getStreamChecked(fd); var node = stream.node; var getattr = stream.stream_ops.getattr; var arg = getattr ? stream : node; getattr !== null && getattr !== void 0 ? getattr : (getattr = node.node_ops.getattr); FS.checkOpExists(getattr, 63); return getattr(arg); }, lstat(path) { return FS.stat(path, true); }, doChmod(stream, node, mode, dontFollow) { FS.doSetAttr(stream, node, { mode: mode & 4095 | node.mode & -4096, ctime: Date.now(), dontFollow }); }, chmod(path, mode, dontFollow) { var node; if (typeof path == "string") {
|
|
2482
|
+
var lookup = FS.lookupPath(path, { follow: !dontFollow });
|
|
2483
|
+
node = lookup.node;
|
|
2484
|
+
}
|
|
2485
|
+
else {
|
|
2486
|
+
node = path;
|
|
2487
|
+
} FS.doChmod(null, node, mode, dontFollow); }, lchmod(path, mode) { FS.chmod(path, mode, true); }, fchmod(fd, mode) { var stream = FS.getStreamChecked(fd); FS.doChmod(stream, stream.node, mode, false); }, doChown(stream, node, dontFollow) { FS.doSetAttr(stream, node, { timestamp: Date.now(), dontFollow }); }, chown(path, uid, gid, dontFollow) { var node; if (typeof path == "string") {
|
|
2488
|
+
var lookup = FS.lookupPath(path, { follow: !dontFollow });
|
|
2489
|
+
node = lookup.node;
|
|
2490
|
+
}
|
|
2491
|
+
else {
|
|
2492
|
+
node = path;
|
|
2493
|
+
} FS.doChown(null, node, dontFollow); }, lchown(path, uid, gid) { FS.chown(path, uid, gid, true); }, fchown(fd, uid, gid) { var stream = FS.getStreamChecked(fd); FS.doChown(stream, stream.node, false); }, doTruncate(stream, node, len) { if (FS.isDir(node.mode)) {
|
|
2494
|
+
throw new FS.ErrnoError(31);
|
|
2495
|
+
} if (!FS.isFile(node.mode)) {
|
|
2496
|
+
throw new FS.ErrnoError(28);
|
|
2497
|
+
} var errCode = FS.nodePermissions(node, "w"); if (errCode) {
|
|
2498
|
+
throw new FS.ErrnoError(errCode);
|
|
2499
|
+
} FS.doSetAttr(stream, node, { size: len, timestamp: Date.now() }); }, truncate(path, len) { if (len < 0) {
|
|
2500
|
+
throw new FS.ErrnoError(28);
|
|
2501
|
+
} var node; if (typeof path == "string") {
|
|
2502
|
+
var lookup = FS.lookupPath(path, { follow: true });
|
|
2503
|
+
node = lookup.node;
|
|
2504
|
+
}
|
|
2505
|
+
else {
|
|
2506
|
+
node = path;
|
|
2507
|
+
} FS.doTruncate(null, node, len); }, ftruncate(fd, len) { var stream = FS.getStreamChecked(fd); if (len < 0 || (stream.flags & 2097155) === 0) {
|
|
2508
|
+
throw new FS.ErrnoError(28);
|
|
2509
|
+
} FS.doTruncate(stream, stream.node, len); }, utime(path, atime, mtime) { var lookup = FS.lookupPath(path, { follow: true }); var node = lookup.node; var setattr = FS.checkOpExists(node.node_ops.setattr, 63); setattr(node, { atime, mtime }); }, open(path, flags, mode = 438) { if (path === "") {
|
|
2510
|
+
throw new FS.ErrnoError(44);
|
|
2511
|
+
} flags = FS_modeStringToFlags(flags); if (flags & 64) {
|
|
2512
|
+
mode = mode & 4095 | 32768;
|
|
2513
|
+
}
|
|
2514
|
+
else {
|
|
2515
|
+
mode = 0;
|
|
2516
|
+
} var node; var isDirPath; if (typeof path == "object") {
|
|
2517
|
+
node = path;
|
|
2518
|
+
}
|
|
2519
|
+
else {
|
|
2520
|
+
isDirPath = path.endsWith("/");
|
|
2521
|
+
var lookup = FS.lookupPath(path, { follow: !(flags & 131072), noent_okay: true });
|
|
2522
|
+
node = lookup.node;
|
|
2523
|
+
path = lookup.path;
|
|
2524
|
+
} var created = false; if (flags & 64) {
|
|
2525
|
+
if (node) {
|
|
2526
|
+
if (flags & 128) {
|
|
2527
|
+
throw new FS.ErrnoError(20);
|
|
2528
|
+
}
|
|
2529
|
+
}
|
|
2530
|
+
else if (isDirPath) {
|
|
2531
|
+
throw new FS.ErrnoError(31);
|
|
2532
|
+
}
|
|
2533
|
+
else {
|
|
2534
|
+
node = FS.mknod(path, mode | 511, 0);
|
|
2535
|
+
created = true;
|
|
2536
|
+
}
|
|
2537
|
+
} if (!node) {
|
|
2538
|
+
throw new FS.ErrnoError(44);
|
|
2539
|
+
} if (FS.isChrdev(node.mode)) {
|
|
2540
|
+
flags &= -513;
|
|
2541
|
+
} if (flags & 65536 && !FS.isDir(node.mode)) {
|
|
2542
|
+
throw new FS.ErrnoError(54);
|
|
2543
|
+
} if (!created) {
|
|
2544
|
+
var errCode = FS.mayOpen(node, flags);
|
|
2545
|
+
if (errCode) {
|
|
2546
|
+
throw new FS.ErrnoError(errCode);
|
|
2547
|
+
}
|
|
2548
|
+
} if (flags & 512 && !created) {
|
|
2549
|
+
FS.truncate(node, 0);
|
|
2550
|
+
} flags &= -131713; var stream = FS.createStream({ node, path: FS.getPath(node), flags, seekable: true, position: 0, stream_ops: node.stream_ops, ungotten: [], error: false }); if (stream.stream_ops.open) {
|
|
2551
|
+
stream.stream_ops.open(stream);
|
|
2552
|
+
} if (created) {
|
|
2553
|
+
FS.chmod(node, mode & 511);
|
|
2554
|
+
} return stream; }, close(stream) { if (FS.isClosed(stream)) {
|
|
2555
|
+
throw new FS.ErrnoError(8);
|
|
2556
|
+
} if (stream.getdents)
|
|
2557
|
+
stream.getdents = null; try {
|
|
2558
|
+
if (stream.stream_ops.close) {
|
|
2559
|
+
stream.stream_ops.close(stream);
|
|
2560
|
+
}
|
|
2561
|
+
}
|
|
2562
|
+
catch (e) {
|
|
2563
|
+
throw e;
|
|
2564
|
+
}
|
|
2565
|
+
finally {
|
|
2566
|
+
FS.closeStream(stream.fd);
|
|
2567
|
+
} stream.fd = null; }, isClosed(stream) { return stream.fd === null; }, llseek(stream, offset, whence) { if (FS.isClosed(stream)) {
|
|
2568
|
+
throw new FS.ErrnoError(8);
|
|
2569
|
+
} if (!stream.seekable || !stream.stream_ops.llseek) {
|
|
2570
|
+
throw new FS.ErrnoError(70);
|
|
2571
|
+
} if (whence != 0 && whence != 1 && whence != 2) {
|
|
2572
|
+
throw new FS.ErrnoError(28);
|
|
2573
|
+
} stream.position = stream.stream_ops.llseek(stream, offset, whence); stream.ungotten = []; return stream.position; }, read(stream, buffer, offset, length, position) { if (length < 0 || position < 0) {
|
|
2574
|
+
throw new FS.ErrnoError(28);
|
|
2575
|
+
} if (FS.isClosed(stream)) {
|
|
2576
|
+
throw new FS.ErrnoError(8);
|
|
2577
|
+
} if ((stream.flags & 2097155) === 1) {
|
|
2578
|
+
throw new FS.ErrnoError(8);
|
|
2579
|
+
} if (FS.isDir(stream.node.mode)) {
|
|
2580
|
+
throw new FS.ErrnoError(31);
|
|
2581
|
+
} if (!stream.stream_ops.read) {
|
|
2582
|
+
throw new FS.ErrnoError(28);
|
|
2583
|
+
} var seeking = typeof position != "undefined"; if (!seeking) {
|
|
2584
|
+
position = stream.position;
|
|
2585
|
+
}
|
|
2586
|
+
else if (!stream.seekable) {
|
|
2587
|
+
throw new FS.ErrnoError(70);
|
|
2588
|
+
} var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); if (!seeking)
|
|
2589
|
+
stream.position += bytesRead; return bytesRead; }, write(stream, buffer, offset, length, position, canOwn) { if (length < 0 || position < 0) {
|
|
2590
|
+
throw new FS.ErrnoError(28);
|
|
2591
|
+
} if (FS.isClosed(stream)) {
|
|
2592
|
+
throw new FS.ErrnoError(8);
|
|
2593
|
+
} if ((stream.flags & 2097155) === 0) {
|
|
2594
|
+
throw new FS.ErrnoError(8);
|
|
2595
|
+
} if (FS.isDir(stream.node.mode)) {
|
|
2596
|
+
throw new FS.ErrnoError(31);
|
|
2597
|
+
} if (!stream.stream_ops.write) {
|
|
2598
|
+
throw new FS.ErrnoError(28);
|
|
2599
|
+
} if (stream.seekable && stream.flags & 1024) {
|
|
2600
|
+
FS.llseek(stream, 0, 2);
|
|
2601
|
+
} var seeking = typeof position != "undefined"; if (!seeking) {
|
|
2602
|
+
position = stream.position;
|
|
2603
|
+
}
|
|
2604
|
+
else if (!stream.seekable) {
|
|
2605
|
+
throw new FS.ErrnoError(70);
|
|
2606
|
+
} var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); if (!seeking)
|
|
2607
|
+
stream.position += bytesWritten; return bytesWritten; }, mmap(stream, length, position, prot, flags) { if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) {
|
|
2608
|
+
throw new FS.ErrnoError(2);
|
|
2609
|
+
} if ((stream.flags & 2097155) === 1) {
|
|
2610
|
+
throw new FS.ErrnoError(2);
|
|
2611
|
+
} if (!stream.stream_ops.mmap) {
|
|
2612
|
+
throw new FS.ErrnoError(43);
|
|
2613
|
+
} if (!length) {
|
|
2614
|
+
throw new FS.ErrnoError(28);
|
|
2615
|
+
} return stream.stream_ops.mmap(stream, length, position, prot, flags); }, msync(stream, buffer, offset, length, mmapFlags) { if (!stream.stream_ops.msync) {
|
|
2616
|
+
return 0;
|
|
2617
|
+
} return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); }, ioctl(stream, cmd, arg) { if (!stream.stream_ops.ioctl) {
|
|
2618
|
+
throw new FS.ErrnoError(59);
|
|
2619
|
+
} return stream.stream_ops.ioctl(stream, cmd, arg); }, readFile(path, opts = {}) { opts.flags = opts.flags || 0; opts.encoding = opts.encoding || "binary"; if (opts.encoding !== "utf8" && opts.encoding !== "binary") {
|
|
2620
|
+
abort(`Invalid encoding type "${opts.encoding}"`);
|
|
2621
|
+
} var stream = FS.open(path, opts.flags); var stat = FS.stat(path); var length = stat.size; var buf = new Uint8Array(length); FS.read(stream, buf, 0, length, 0); if (opts.encoding === "utf8") {
|
|
2622
|
+
buf = UTF8ArrayToString(buf);
|
|
2623
|
+
} FS.close(stream); return buf; }, writeFile(path, data, opts = {}) { opts.flags = opts.flags || 577; var stream = FS.open(path, opts.flags, opts.mode); data = FS_fileDataToTypedArray(data); FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); FS.close(stream); }, cwd: () => FS.currentPath, chdir(path) { var lookup = FS.lookupPath(path, { follow: true }); if (lookup.node === null) {
|
|
2624
|
+
throw new FS.ErrnoError(44);
|
|
2625
|
+
} if (!FS.isDir(lookup.node.mode)) {
|
|
2626
|
+
throw new FS.ErrnoError(54);
|
|
2627
|
+
} var errCode = FS.nodePermissions(lookup.node, "x"); if (errCode) {
|
|
2628
|
+
throw new FS.ErrnoError(errCode);
|
|
2629
|
+
} FS.currentPath = lookup.path; }, createDefaultDirectories() { FS.mkdir("/tmp"); FS.mkdir("/home"); FS.mkdir("/home/web_user"); }, createDefaultDevices() { FS.mkdir("/dev"); FS.registerDevice(FS.makedev(1, 3), { read: () => 0, write: (stream, buffer, offset, length, pos) => length, llseek: () => 0 }); FS.mkdev("/dev/null", FS.makedev(1, 3)); TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); FS.mkdev("/dev/tty", FS.makedev(5, 0)); FS.mkdev("/dev/tty1", FS.makedev(6, 0)); var randomBuffer = new Uint8Array(1024), randomLeft = 0; var randomByte = () => { if (randomLeft === 0) {
|
|
2630
|
+
randomFill(randomBuffer);
|
|
2631
|
+
randomLeft = randomBuffer.byteLength;
|
|
2632
|
+
} return randomBuffer[--randomLeft]; }; FS.createDevice("/dev", "random", randomByte); FS.createDevice("/dev", "urandom", randomByte); FS.mkdir("/dev/shm"); FS.mkdir("/dev/shm/tmp"); }, createSpecialDirectories() { FS.mkdir("/proc"); var proc_self = FS.mkdir("/proc/self"); FS.mkdir("/proc/self/fd"); FS.mount({ mount() { var node = FS.createNode(proc_self, "fd", 16895, 73); node.stream_ops = { llseek: MEMFS.stream_ops.llseek }; node.node_ops = { lookup(parent, name) { var fd = +name; var stream = FS.getStreamChecked(fd); var ret = { parent: null, mount: { mountpoint: "fake" }, node_ops: { readlink: () => stream.path }, id: fd + 1 }; ret.parent = ret; return ret; }, readdir() { return Array.from(FS.streams.entries()).filter(([k, v]) => v).map(([k, v]) => k.toString()); } }; return node; } }, {}, "/proc/self/fd"); }, createStandardStreams(input, output, error) { if (input) {
|
|
2633
|
+
FS.createDevice("/dev", "stdin", input);
|
|
2634
|
+
}
|
|
2635
|
+
else {
|
|
2636
|
+
FS.symlink("/dev/tty", "/dev/stdin");
|
|
2637
|
+
} if (output) {
|
|
2638
|
+
FS.createDevice("/dev", "stdout", null, output);
|
|
2639
|
+
}
|
|
2640
|
+
else {
|
|
2641
|
+
FS.symlink("/dev/tty", "/dev/stdout");
|
|
2642
|
+
} if (error) {
|
|
2643
|
+
FS.createDevice("/dev", "stderr", null, error);
|
|
2644
|
+
}
|
|
2645
|
+
else {
|
|
2646
|
+
FS.symlink("/dev/tty1", "/dev/stderr");
|
|
2647
|
+
} FS.open("/dev/stdin", 0); FS.open("/dev/stdout", 1); FS.open("/dev/stderr", 1); }, staticInit() { FS.nameTable = new Array(4096); FS.mount(MEMFS, {}, "/"); FS.createDefaultDirectories(); FS.createDefaultDevices(); FS.createSpecialDirectories(); FS.filesystems = { MEMFS }; }, init(input, output, error) { FS.initialized = true; input !== null && input !== void 0 ? input : (input = Module["stdin"]); output !== null && output !== void 0 ? output : (output = Module["stdout"]); error !== null && error !== void 0 ? error : (error = Module["stderr"]); FS.createStandardStreams(input, output, error); }, quit() { FS.initialized = false; for (var stream of FS.streams) {
|
|
2648
|
+
if (stream) {
|
|
2649
|
+
FS.close(stream);
|
|
2650
|
+
}
|
|
2651
|
+
} }, findObject(path, dontResolveLastLink) { var ret = FS.analyzePath(path, dontResolveLastLink); if (!ret.exists) {
|
|
2652
|
+
return null;
|
|
2653
|
+
} return ret.object; }, analyzePath(path, dontResolveLastLink) { try {
|
|
2654
|
+
var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
|
|
2655
|
+
path = lookup.path;
|
|
2656
|
+
}
|
|
2657
|
+
catch (e) { } var ret = { isRoot: false, exists: false, error: 0, name: null, path: null, object: null, parentExists: false, parentPath: null, parentObject: null }; try {
|
|
2658
|
+
var lookup = FS.lookupPath(path, { parent: true });
|
|
2659
|
+
ret.parentExists = true;
|
|
2660
|
+
ret.parentPath = lookup.path;
|
|
2661
|
+
ret.parentObject = lookup.node;
|
|
2662
|
+
ret.name = PATH.basename(path);
|
|
2663
|
+
lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
|
|
2664
|
+
ret.exists = true;
|
|
2665
|
+
ret.path = lookup.path;
|
|
2666
|
+
ret.object = lookup.node;
|
|
2667
|
+
ret.name = lookup.node.name;
|
|
2668
|
+
ret.isRoot = lookup.path === "/";
|
|
2669
|
+
}
|
|
2670
|
+
catch (e) {
|
|
2671
|
+
ret.error = e.errno;
|
|
2672
|
+
} return ret; }, createPath(parent, path, canRead, canWrite) { parent = typeof parent == "string" ? parent : FS.getPath(parent); var parts = path.split("/").reverse(); while (parts.length) {
|
|
2673
|
+
var part = parts.pop();
|
|
2674
|
+
if (!part)
|
|
2675
|
+
continue;
|
|
2676
|
+
var current = PATH.join2(parent, part);
|
|
2677
|
+
try {
|
|
2678
|
+
FS.mkdir(current);
|
|
2679
|
+
}
|
|
2680
|
+
catch (e) {
|
|
2681
|
+
if (e.errno != 20)
|
|
2682
|
+
throw e;
|
|
2683
|
+
}
|
|
2684
|
+
parent = current;
|
|
2685
|
+
} return current; }, createFile(parent, name, properties, canRead, canWrite) { var path = PATH.join2(typeof parent == "string" ? parent : FS.getPath(parent), name); var mode = FS_getMode(canRead, canWrite); return FS.create(path, mode); }, createDataFile(parent, name, data, canRead, canWrite, canOwn) { var path = name; if (parent) {
|
|
2686
|
+
parent = typeof parent == "string" ? parent : FS.getPath(parent);
|
|
2687
|
+
path = name ? PATH.join2(parent, name) : parent;
|
|
2688
|
+
} var mode = FS_getMode(canRead, canWrite); var node = FS.create(path, mode); if (data) {
|
|
2689
|
+
data = FS_fileDataToTypedArray(data);
|
|
2690
|
+
FS.chmod(node, mode | 146);
|
|
2691
|
+
var stream = FS.open(node, 577);
|
|
2692
|
+
FS.write(stream, data, 0, data.length, 0, canOwn);
|
|
2693
|
+
FS.close(stream);
|
|
2694
|
+
FS.chmod(node, mode);
|
|
2695
|
+
} }, createDevice(parent, name, input, output) { var _a; var _b; var path = PATH.join2(typeof parent == "string" ? parent : FS.getPath(parent), name); var mode = FS_getMode(!!input, !!output); (_a = (_b = FS.createDevice).major) !== null && _a !== void 0 ? _a : (_b.major = 64); var dev = FS.makedev(FS.createDevice.major++, 0); FS.registerDevice(dev, { open(stream) { stream.seekable = false; }, close(stream) { var _a; if ((_a = output === null || output === void 0 ? void 0 : output.buffer) === null || _a === void 0 ? void 0 : _a.length) {
|
|
2696
|
+
output(10);
|
|
2697
|
+
} }, read(stream, buffer, offset, length, pos) { var bytesRead = 0; for (var i = 0; i < length; i++) {
|
|
2698
|
+
var result;
|
|
2699
|
+
try {
|
|
2700
|
+
result = input();
|
|
2701
|
+
}
|
|
2702
|
+
catch (e) {
|
|
2703
|
+
throw new FS.ErrnoError(29);
|
|
2704
|
+
}
|
|
2705
|
+
if (result === undefined && bytesRead === 0) {
|
|
2706
|
+
throw new FS.ErrnoError(6);
|
|
2707
|
+
}
|
|
2708
|
+
if (result === null || result === undefined)
|
|
2709
|
+
break;
|
|
2710
|
+
bytesRead++;
|
|
2711
|
+
buffer[offset + i] = result;
|
|
2712
|
+
} if (bytesRead) {
|
|
2713
|
+
stream.node.atime = Date.now();
|
|
2714
|
+
} return bytesRead; }, write(stream, buffer, offset, length, pos) { for (var i = 0; i < length; i++) {
|
|
2715
|
+
try {
|
|
2716
|
+
output(buffer[offset + i]);
|
|
2717
|
+
}
|
|
2718
|
+
catch (e) {
|
|
2719
|
+
throw new FS.ErrnoError(29);
|
|
2720
|
+
}
|
|
2721
|
+
} if (length) {
|
|
2722
|
+
stream.node.mtime = stream.node.ctime = Date.now();
|
|
2723
|
+
} return i; } }); return FS.mkdev(path, mode, dev); }, forceLoadFile(obj) { if (obj.isDevice || obj.isFolder || obj.link || obj.contents)
|
|
2724
|
+
return true; if (globalThis.XMLHttpRequest) {
|
|
2725
|
+
abort("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");
|
|
2726
|
+
}
|
|
2727
|
+
else {
|
|
2728
|
+
try {
|
|
2729
|
+
obj.contents = readBinary(obj.url);
|
|
2730
|
+
}
|
|
2731
|
+
catch (e) {
|
|
2732
|
+
throw new FS.ErrnoError(29);
|
|
2733
|
+
}
|
|
2734
|
+
} }, createLazyFile(parent, name, url, canRead, canWrite) { class LazyUint8Array {
|
|
2735
|
+
constructor() {
|
|
2736
|
+
this.lengthKnown = false;
|
|
2737
|
+
this.chunks = [];
|
|
2738
|
+
}
|
|
2739
|
+
get(idx) { if (idx > this.length - 1 || idx < 0) {
|
|
2740
|
+
return undefined;
|
|
2741
|
+
} var chunkOffset = idx % this.chunkSize; var chunkNum = idx / this.chunkSize | 0; return this.getter(chunkNum)[chunkOffset]; }
|
|
2742
|
+
setDataGetter(getter) { this.getter = getter; }
|
|
2743
|
+
cacheLength() { var xhr = new XMLHttpRequest; xhr.open("HEAD", url, false); xhr.send(null); if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304))
|
|
2744
|
+
abort("Couldn't load " + url + ". Status: " + xhr.status); var datalength = Number(xhr.getResponseHeader("Content-length")); var header; var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; var chunkSize = 1024 * 1024; if (!hasByteServing)
|
|
2745
|
+
chunkSize = datalength; var doXHR = (from, to) => { if (from > to)
|
|
2746
|
+
abort("invalid range (" + from + ", " + to + ") or no bytes requested!"); if (to > datalength - 1)
|
|
2747
|
+
abort("only " + datalength + " bytes available! programmer error!"); var xhr = new XMLHttpRequest; xhr.open("GET", url, false); if (datalength !== chunkSize)
|
|
2748
|
+
xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); xhr.responseType = "arraybuffer"; if (xhr.overrideMimeType) {
|
|
2749
|
+
xhr.overrideMimeType("text/plain; charset=x-user-defined");
|
|
2750
|
+
} xhr.send(null); if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304))
|
|
2751
|
+
abort("Couldn't load " + url + ". Status: " + xhr.status); if (xhr.response !== undefined) {
|
|
2752
|
+
return new Uint8Array(xhr.response || []);
|
|
2753
|
+
} return intArrayFromString(xhr.responseText || ""); }; var lazyArray = this; lazyArray.setDataGetter(chunkNum => { var start = chunkNum * chunkSize; var end = (chunkNum + 1) * chunkSize - 1; end = Math.min(end, datalength - 1); if (typeof lazyArray.chunks[chunkNum] == "undefined") {
|
|
2754
|
+
lazyArray.chunks[chunkNum] = doXHR(start, end);
|
|
2755
|
+
} if (typeof lazyArray.chunks[chunkNum] == "undefined")
|
|
2756
|
+
abort("doXHR failed!"); return lazyArray.chunks[chunkNum]; }); if (usesGzip || !datalength) {
|
|
2757
|
+
chunkSize = datalength = 1;
|
|
2758
|
+
datalength = this.getter(0).length;
|
|
2759
|
+
chunkSize = datalength;
|
|
2760
|
+
out("LazyFiles on gzip forces download of the whole file when length is accessed");
|
|
2761
|
+
} this._length = datalength; this._chunkSize = chunkSize; this.lengthKnown = true; }
|
|
2762
|
+
get length() { if (!this.lengthKnown) {
|
|
2763
|
+
this.cacheLength();
|
|
2764
|
+
} return this._length; }
|
|
2765
|
+
get chunkSize() { if (!this.lengthKnown) {
|
|
2766
|
+
this.cacheLength();
|
|
2767
|
+
} return this._chunkSize; }
|
|
2768
|
+
} if (globalThis.XMLHttpRequest) {
|
|
2769
|
+
if (!ENVIRONMENT_IS_WORKER)
|
|
2770
|
+
abort("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");
|
|
2771
|
+
var lazyArray = new LazyUint8Array;
|
|
2772
|
+
var properties = { isDevice: false, contents: lazyArray };
|
|
2773
|
+
}
|
|
2774
|
+
else {
|
|
2775
|
+
var properties = { isDevice: false, url };
|
|
2776
|
+
} var node = FS.createFile(parent, name, properties, canRead, canWrite); if (properties.contents) {
|
|
2777
|
+
node.contents = properties.contents;
|
|
2778
|
+
}
|
|
2779
|
+
else if (properties.url) {
|
|
2780
|
+
node.contents = null;
|
|
2781
|
+
node.url = properties.url;
|
|
2782
|
+
} Object.defineProperties(node, { usedBytes: { get: function () { return this.contents.length; } } }); var stream_ops = {}; for (const [key, fn] of Object.entries(node.stream_ops)) {
|
|
2783
|
+
stream_ops[key] = (...args) => { FS.forceLoadFile(node); return fn(...args); };
|
|
2784
|
+
} function writeChunks(stream, buffer, offset, length, position) { var contents = stream.node.contents; if (position >= contents.length)
|
|
2785
|
+
return 0; var size = Math.min(contents.length - position, length); if (contents.slice) {
|
|
2786
|
+
for (var i = 0; i < size; i++) {
|
|
2787
|
+
buffer[offset + i] = contents[position + i];
|
|
2788
|
+
}
|
|
2789
|
+
}
|
|
2790
|
+
else {
|
|
2791
|
+
for (var i = 0; i < size; i++) {
|
|
2792
|
+
buffer[offset + i] = contents.get(position + i);
|
|
2793
|
+
}
|
|
2794
|
+
} return size; } stream_ops.read = (stream, buffer, offset, length, position) => { FS.forceLoadFile(node); return writeChunks(stream, buffer, offset, length, position); }; stream_ops.mmap = (stream, length, position, prot, flags) => { FS.forceLoadFile(node); var ptr = mmapAlloc(); if (!ptr) {
|
|
2795
|
+
throw new FS.ErrnoError(48);
|
|
2796
|
+
} writeChunks(stream, HEAP8, ptr, length, position); return { ptr, allocated: true }; }; node.stream_ops = stream_ops; return node; } };
|
|
2797
|
+
var UTF8ToString = (ptr, maxBytesToRead, ignoreNul) => ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "";
|
|
2798
|
+
var SYSCALLS = { calculateAt(dirfd, path, allowEmpty) { if (PATH.isAbs(path)) {
|
|
2799
|
+
return path;
|
|
2800
|
+
} var dir; if (dirfd === -100) {
|
|
2801
|
+
dir = FS.cwd();
|
|
2802
|
+
}
|
|
2803
|
+
else {
|
|
2804
|
+
var dirstream = SYSCALLS.getStreamFromFD(dirfd);
|
|
2805
|
+
dir = dirstream.path;
|
|
2806
|
+
} if (path.length == 0) {
|
|
2807
|
+
if (!allowEmpty) {
|
|
2808
|
+
throw new FS.ErrnoError(44);
|
|
2809
|
+
}
|
|
2810
|
+
return dir;
|
|
2811
|
+
} return dir + "/" + path; }, writeStat(buf, stat) { HEAPU32[buf >> 2] = stat.dev; HEAPU32[buf + 4 >> 2] = stat.mode; HEAPU32[buf + 8 >> 2] = stat.nlink; HEAPU32[buf + 12 >> 2] = stat.uid; HEAPU32[buf + 16 >> 2] = stat.gid; HEAPU32[buf + 20 >> 2] = stat.rdev; HEAP64[buf + 24 >> 3] = BigInt(stat.size); HEAP32[buf + 32 >> 2] = 4096; HEAP32[buf + 36 >> 2] = stat.blocks; var atime = stat.atime.getTime(); var mtime = stat.mtime.getTime(); var ctime = stat.ctime.getTime(); HEAP64[buf + 40 >> 3] = BigInt(Math.floor(atime / 1e3)); HEAPU32[buf + 48 >> 2] = atime % 1e3 * 1e3 * 1e3; HEAP64[buf + 56 >> 3] = BigInt(Math.floor(mtime / 1e3)); HEAPU32[buf + 64 >> 2] = mtime % 1e3 * 1e3 * 1e3; HEAP64[buf + 72 >> 3] = BigInt(Math.floor(ctime / 1e3)); HEAPU32[buf + 80 >> 2] = ctime % 1e3 * 1e3 * 1e3; HEAP64[buf + 88 >> 3] = BigInt(stat.ino); return 0; }, writeStatFs(buf, stats) { HEAPU32[buf + 4 >> 2] = stats.bsize; HEAPU32[buf + 60 >> 2] = stats.bsize; HEAP64[buf + 8 >> 3] = BigInt(stats.blocks); HEAP64[buf + 16 >> 3] = BigInt(stats.bfree); HEAP64[buf + 24 >> 3] = BigInt(stats.bavail); HEAP64[buf + 32 >> 3] = BigInt(stats.files); HEAP64[buf + 40 >> 3] = BigInt(stats.ffree); HEAPU32[buf + 48 >> 2] = stats.fsid; HEAPU32[buf + 64 >> 2] = stats.flags; HEAPU32[buf + 56 >> 2] = stats.namelen; }, doMsync(addr, stream, len, flags, offset) { if (!FS.isFile(stream.node.mode)) {
|
|
2812
|
+
throw new FS.ErrnoError(43);
|
|
2813
|
+
} if (flags & 2) {
|
|
2814
|
+
return 0;
|
|
2815
|
+
} var buffer = HEAPU8.slice(addr, addr + len); FS.msync(stream, buffer, offset, len, flags); }, getStreamFromFD(fd) { var stream = FS.getStreamChecked(fd); return stream; }, varargs: undefined, getStr(ptr) { var ret = UTF8ToString(ptr); return ret; } };
|
|
2816
|
+
function ___syscall_openat(dirfd, path, flags, varargs) { SYSCALLS.varargs = varargs; try {
|
|
2817
|
+
path = SYSCALLS.getStr(path);
|
|
2818
|
+
path = SYSCALLS.calculateAt(dirfd, path);
|
|
2819
|
+
var mode = varargs ? syscallGetVarargI() : 0;
|
|
2820
|
+
return FS.open(path, flags, mode).fd;
|
|
2821
|
+
}
|
|
2822
|
+
catch (e) {
|
|
2823
|
+
if (typeof FS == "undefined" || !(e.name === "ErrnoError"))
|
|
2824
|
+
throw e;
|
|
2825
|
+
return -e.errno;
|
|
2826
|
+
} }
|
|
2827
|
+
var __abort_js = () => abort("");
|
|
2828
|
+
var getHeapMax = () => 2147483648;
|
|
2829
|
+
var alignMemory = (size, alignment) => Math.ceil(size / alignment) * alignment;
|
|
2830
|
+
var growMemory = size => { var oldHeapSize = wasmMemory.buffer.byteLength; var pages = (size - oldHeapSize + 65535) / 65536 | 0; try {
|
|
2831
|
+
wasmMemory.grow(pages);
|
|
2832
|
+
updateMemoryViews();
|
|
2833
|
+
return 1;
|
|
2834
|
+
}
|
|
2835
|
+
catch (e) { } };
|
|
2836
|
+
var _emscripten_resize_heap = requestedSize => { var oldSize = HEAPU8.length; requestedSize >>>= 0; var maxHeapSize = getHeapMax(); if (requestedSize > maxHeapSize) {
|
|
2837
|
+
return false;
|
|
2838
|
+
} for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {
|
|
2839
|
+
var overGrownHeapSize = oldSize * (1 + .2 / cutDown);
|
|
2840
|
+
overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);
|
|
2841
|
+
var newSize = Math.min(maxHeapSize, alignMemory(Math.max(requestedSize, overGrownHeapSize), 65536));
|
|
2842
|
+
var replacement = growMemory(newSize);
|
|
2843
|
+
if (replacement) {
|
|
2844
|
+
return true;
|
|
2845
|
+
}
|
|
2846
|
+
} return false; };
|
|
2847
|
+
var doReadv = (stream, iov, iovcnt, offset) => { var ret = 0; for (var i = 0; i < iovcnt; i++) {
|
|
2848
|
+
var ptr = HEAPU32[iov >> 2];
|
|
2849
|
+
var len = HEAPU32[iov + 4 >> 2];
|
|
2850
|
+
iov += 8;
|
|
2851
|
+
var curr = FS.read(stream, HEAP8, ptr, len, offset);
|
|
2852
|
+
if (curr < 0)
|
|
2853
|
+
return -1;
|
|
2854
|
+
ret += curr;
|
|
2855
|
+
if (curr < len)
|
|
2856
|
+
break;
|
|
2857
|
+
} return ret; };
|
|
2858
|
+
function _fd_read(fd, iov, iovcnt, pnum) { try {
|
|
2859
|
+
var stream = SYSCALLS.getStreamFromFD(fd);
|
|
2860
|
+
var num = doReadv(stream, iov, iovcnt);
|
|
2861
|
+
HEAPU32[pnum >> 2] = num;
|
|
2862
|
+
return 0;
|
|
2863
|
+
}
|
|
2864
|
+
catch (e) {
|
|
2865
|
+
if (typeof FS == "undefined" || !(e.name === "ErrnoError"))
|
|
2866
|
+
throw e;
|
|
2867
|
+
return e.errno;
|
|
2868
|
+
} }
|
|
2869
|
+
var getCFunc = ident => { var func = Module["_" + ident]; return func; };
|
|
2870
|
+
var writeArrayToMemory = (array, buffer) => { HEAP8.set(array, buffer); };
|
|
2871
|
+
var stringToUTF8 = (str, outPtr, maxBytesToWrite) => stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);
|
|
2872
|
+
var stackAlloc = sz => __emscripten_stack_alloc(sz);
|
|
2873
|
+
var stringToUTF8OnStack = str => { var size = lengthBytesUTF8(str) + 1; var ret = stackAlloc(size); stringToUTF8(str, ret, size); return ret; };
|
|
2874
|
+
var ccall = (ident, returnType, argTypes, args, opts) => { var toC = { string: str => { var ret = 0; if (str !== null && str !== undefined && str !== 0) {
|
|
2875
|
+
ret = stringToUTF8OnStack(str);
|
|
2876
|
+
} return ret; }, array: arr => { var ret = stackAlloc(arr.length); writeArrayToMemory(arr, ret); return ret; } }; function convertReturnValue(ret) { if (returnType === "string") {
|
|
2877
|
+
return UTF8ToString(ret);
|
|
2878
|
+
} if (returnType === "boolean")
|
|
2879
|
+
return Boolean(ret); return ret; } var func = getCFunc(ident); var cArgs = []; var stack = 0; if (args) {
|
|
2880
|
+
for (var i = 0; i < args.length; i++) {
|
|
2881
|
+
var converter = toC[argTypes[i]];
|
|
2882
|
+
if (converter) {
|
|
2883
|
+
if (stack === 0)
|
|
2884
|
+
stack = stackSave();
|
|
2885
|
+
cArgs[i] = converter(args[i]);
|
|
2886
|
+
}
|
|
2887
|
+
else {
|
|
2888
|
+
cArgs[i] = args[i];
|
|
2889
|
+
}
|
|
2890
|
+
}
|
|
2891
|
+
} var ret = func(...cArgs); function onDone(ret) { if (stack !== 0)
|
|
2892
|
+
stackRestore(stack); return convertReturnValue(ret); } ret = onDone(ret); return ret; };
|
|
2893
|
+
var cwrap = (ident, returnType, argTypes, opts) => { var numericArgs = !argTypes || argTypes.every(type => type === "number" || type === "boolean"); var numericRet = returnType !== "string"; if (numericRet && numericArgs && !opts) {
|
|
2894
|
+
return getCFunc(ident);
|
|
2895
|
+
} return (...args) => ccall(ident, returnType, argTypes, args); };
|
|
2896
|
+
FS.createPreloadedFile = FS_createPreloadedFile;
|
|
2897
|
+
FS.preloadFile = FS_preloadFile;
|
|
2898
|
+
FS.staticInit();
|
|
2899
|
+
{
|
|
2900
|
+
if (Module["noExitRuntime"])
|
|
2901
|
+
Module["noExitRuntime"];
|
|
2902
|
+
if (Module["preloadPlugins"])
|
|
2903
|
+
preloadPlugins = Module["preloadPlugins"];
|
|
2904
|
+
if (Module["print"])
|
|
2905
|
+
out = Module["print"];
|
|
2906
|
+
if (Module["printErr"])
|
|
2907
|
+
err = Module["printErr"];
|
|
2908
|
+
if (Module["wasmBinary"])
|
|
2909
|
+
wasmBinary = Module["wasmBinary"];
|
|
2910
|
+
if (Module["arguments"])
|
|
2911
|
+
Module["arguments"];
|
|
2912
|
+
if (Module["thisProgram"])
|
|
2913
|
+
Module["thisProgram"];
|
|
2914
|
+
if (Module["preInit"]) {
|
|
2915
|
+
if (typeof Module["preInit"] == "function")
|
|
2916
|
+
Module["preInit"] = [Module["preInit"]];
|
|
2917
|
+
while (Module["preInit"].length > 0) {
|
|
2918
|
+
Module["preInit"].shift()();
|
|
2919
|
+
}
|
|
2920
|
+
}
|
|
2921
|
+
}
|
|
2922
|
+
Module["ccall"] = ccall;
|
|
2923
|
+
Module["cwrap"] = cwrap;
|
|
2924
|
+
var __emscripten_stack_restore, __emscripten_stack_alloc, _emscripten_stack_get_current, wasmMemory;
|
|
2925
|
+
function assignWasmExports(wasmExports) { Module["_wasm_smaugt_keypair"] = wasmExports["g"]; Module["_wasm_smaugt_encapsulate"] = wasmExports["h"]; Module["_wasm_smaugt_decapsulate"] = wasmExports["i"]; Module["_malloc"] = wasmExports["j"]; Module["_free"] = wasmExports["k"]; __emscripten_stack_restore = wasmExports["l"]; __emscripten_stack_alloc = wasmExports["m"]; _emscripten_stack_get_current = wasmExports["n"]; wasmMemory = wasmExports["e"]; wasmExports["__indirect_function_table"]; }
|
|
2926
|
+
var wasmImports = { c: ___syscall_openat, d: __abort_js, a: _emscripten_resize_heap, b: _fd_read };
|
|
2927
|
+
function run() { if (runDependencies > 0) {
|
|
2928
|
+
dependenciesFulfilled = run;
|
|
2929
|
+
return;
|
|
2930
|
+
} preRun(); if (runDependencies > 0) {
|
|
2931
|
+
dependenciesFulfilled = run;
|
|
2932
|
+
return;
|
|
2933
|
+
} function doRun() { var _a; Module["calledRun"] = true; if (ABORT)
|
|
2934
|
+
return; initRuntime(); readyPromiseResolve === null || readyPromiseResolve === void 0 ? void 0 : readyPromiseResolve(Module); (_a = Module["onRuntimeInitialized"]) === null || _a === void 0 ? void 0 : _a.call(Module); postRun(); } if (Module["setStatus"]) {
|
|
2935
|
+
Module["setStatus"]("Running...");
|
|
2936
|
+
setTimeout(() => { setTimeout(() => Module["setStatus"](""), 1); doRun(); }, 1);
|
|
2937
|
+
}
|
|
2938
|
+
else {
|
|
2939
|
+
doRun();
|
|
2940
|
+
} }
|
|
2941
|
+
var wasmExports;
|
|
2942
|
+
wasmExports = yield (createWasm());
|
|
2943
|
+
run();
|
|
2944
|
+
if (runtimeInitialized) {
|
|
2945
|
+
moduleRtn = Module;
|
|
2946
|
+
}
|
|
2947
|
+
else {
|
|
2948
|
+
moduleRtn = new Promise((resolve, reject) => { readyPromiseResolve = resolve; readyPromiseReject = reject; });
|
|
2949
|
+
}
|
|
2950
|
+
return moduleRtn;
|
|
2951
|
+
});
|
|
2952
|
+
}
|
|
2953
|
+
|
|
2954
|
+
// 환경(브라우저/Node)에 따라 .wasm 바이너리를 가져오는 헬퍼.
|
|
2955
|
+
//
|
|
2956
|
+
// - 브라우저/Worker: fetch() 사용. http(s):/blob:/data: URL 모두 처리.
|
|
2957
|
+
// - Node.js: file:// URL 이면 fs 로 직접 읽고, 그 외엔 글로벌 fetch (Node 18+ 내장) 사용.
|
|
2958
|
+
//
|
|
2959
|
+
// 사용자는 보통 직접 호출할 일이 없고, loadLocusWasm 에 fetcher 옵션을 주입할 때만
|
|
2960
|
+
// 이 함수의 시그니처 (url: URL) => Promise<Uint8Array> 와 동일하면 된다.
|
|
2961
|
+
var _a, _b;
|
|
2962
|
+
const isNode = !!((_b = (_a = globalThis.process) === null || _a === void 0 ? void 0 : _a.versions) === null || _b === void 0 ? void 0 : _b.node);
|
|
2963
|
+
// node:* 모듈을 동적으로 로드할 때 import 인자를 변수로 우회한다.
|
|
2964
|
+
// 리터럴 dynamic import (`import('node:fs/promises')`) 는 Vite/Rollup 의
|
|
2965
|
+
// 정적 분석에 잡혀 browser 빌드에서 "Module 'node:*' has been externalized
|
|
2966
|
+
// for browser compatibility" 경고를 띄운다. 변수로 인자를 감싸면 정적
|
|
2967
|
+
// 분석을 회피하고, Node 런타임에서는 그대로 동적 import 가 된다.
|
|
2968
|
+
// 이 함수의 isNode 가드 안에서만 호출되므로 browser 런타임에서는 도달하지 않는다.
|
|
2969
|
+
const _dynImport = (m) => (function (t) { return new Promise(function (resolve, reject) { require([t], function (m) { resolve(/*#__PURE__*/_interopNamespaceDefault(m)); }, reject); }); })(/* @vite-ignore */ /* webpackIgnore: true */ m);
|
|
2970
|
+
/**
|
|
2971
|
+
* .wasm 바이너리를 Uint8Array 로 가져온다.
|
|
2972
|
+
* @param {URL | string} input
|
|
2973
|
+
* @returns {Promise<Uint8Array>}
|
|
2974
|
+
*/
|
|
2975
|
+
function fetchWasmBytes(input) {
|
|
2976
|
+
return tslib_es6.__awaiter(this, void 0, void 0, function* () {
|
|
2977
|
+
const url = input instanceof URL ? input : new URL(input);
|
|
2978
|
+
// Node 에서 패키지 동봉 파일 (file://) 은 fs 로 직접 읽는 게 가장 빠르고 의존성도 없다.
|
|
2979
|
+
if (isNode && url.protocol === 'file:') {
|
|
2980
|
+
const [{ readFile }, { fileURLToPath }] = yield Promise.all([
|
|
2981
|
+
_dynImport('node:fs/promises'),
|
|
2982
|
+
_dynImport('node:url'),
|
|
2983
|
+
]);
|
|
2984
|
+
const buf = yield readFile(fileURLToPath(url));
|
|
2985
|
+
return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
2986
|
+
}
|
|
2987
|
+
if (typeof fetch !== 'function') {
|
|
2988
|
+
throw new Error('fetchWasmBytes: globalThis.fetch is not available in this environment');
|
|
2989
|
+
}
|
|
2990
|
+
const res = yield fetch(url);
|
|
2991
|
+
if (!res.ok) {
|
|
2992
|
+
throw new Error(`fetchWasmBytes: failed to fetch ${url} — ${res.status} ${res.statusText}`);
|
|
2993
|
+
}
|
|
2994
|
+
const ab = yield res.arrayBuffer();
|
|
2995
|
+
return new Uint8Array(ab);
|
|
2996
|
+
});
|
|
2997
|
+
}
|
|
2998
|
+
|
|
2999
|
+
let aimerC;
|
|
3000
|
+
let smaugtC;
|
|
3001
|
+
let haetaeC;
|
|
3002
|
+
// 2. 키 생성 브릿지
|
|
3003
|
+
// Go 측 aimer_wasm.go 는 (pkSize, skSize, jsSeed) 로 호출한다. seedBuf 를
|
|
3004
|
+
// C 메모리로 복사해서 _wasm_aimer_keypair(pkPtr, skPtr, seedPtr) 에 넘겨야
|
|
3005
|
+
// AIMER 의 NIST AES-CTR-DRBG (rng.c) 가 시드되어 결정적이지 않은 키를 생성한다.
|
|
3006
|
+
globalThis.js_aimer_generate_keypair = function (pkSize, skSize, seedBuf) {
|
|
3007
|
+
const pkPtr = aimerC._malloc(pkSize);
|
|
3008
|
+
const skPtr = aimerC._malloc(skSize);
|
|
3009
|
+
const seedPtr = aimerC._malloc(seedBuf.length);
|
|
3010
|
+
aimerC.HEAPU8.set(seedBuf, seedPtr);
|
|
3011
|
+
const ret = aimerC._wasm_aimer_keypair(pkPtr, skPtr, seedPtr);
|
|
3012
|
+
let pkBytes = null, skBytes = null;
|
|
3013
|
+
if (ret === 0) {
|
|
3014
|
+
pkBytes = new Uint8Array(aimerC.HEAPU8.buffer, pkPtr, pkSize).slice();
|
|
3015
|
+
skBytes = new Uint8Array(aimerC.HEAPU8.buffer, skPtr, skSize).slice();
|
|
3016
|
+
}
|
|
3017
|
+
aimerC._free(pkPtr);
|
|
3018
|
+
aimerC._free(skPtr);
|
|
3019
|
+
aimerC._free(seedPtr);
|
|
3020
|
+
return { ret: ret, pk: pkBytes, sk: skBytes };
|
|
3021
|
+
};
|
|
3022
|
+
// 3. 서명 브릿지
|
|
3023
|
+
globalThis.js_aimer_sign = function (msgBuf, skBuf, maxSigLen) {
|
|
3024
|
+
const msgPtr = aimerC._malloc(msgBuf.length);
|
|
3025
|
+
const skPtr = aimerC._malloc(skBuf.length);
|
|
3026
|
+
const sigPtr = aimerC._malloc(maxSigLen);
|
|
3027
|
+
const sigLenPtr = aimerC._malloc(4);
|
|
3028
|
+
aimerC.HEAPU8.set(msgBuf, msgPtr);
|
|
3029
|
+
aimerC.HEAPU8.set(skBuf, skPtr);
|
|
3030
|
+
// 💡 [핵심 해결] 중간에 0, 0 (ctx, ctxlen) 파라미터를 추가해서 총 7개를 넘깁니다!
|
|
3031
|
+
const ret = aimerC._wasm_aimer_sign(sigPtr, sigLenPtr, msgPtr, msgBuf.length, 0, 0, skPtr);
|
|
3032
|
+
const actualLen = aimerC.HEAPU32[sigLenPtr / 4];
|
|
3033
|
+
const exactSigBuf = new Uint8Array(aimerC.HEAPU8.buffer, sigPtr, actualLen).slice();
|
|
3034
|
+
aimerC._free(msgPtr);
|
|
3035
|
+
aimerC._free(skPtr);
|
|
3036
|
+
aimerC._free(sigPtr);
|
|
3037
|
+
aimerC._free(sigLenPtr);
|
|
3038
|
+
return { ret: ret, signature: exactSigBuf };
|
|
3039
|
+
};
|
|
3040
|
+
// 4. 검증 브릿지
|
|
3041
|
+
globalThis.js_aimer_verify = function (sigBuf, msgBuf, pkBuf) {
|
|
3042
|
+
// 💡 [완벽 해결 1] AIMer 128s의 정확한 서명 길이는 5904 바이트입니다.
|
|
3043
|
+
// Go 언어(LocusChain)가 6000 바이트로 0을 채워서 보내더라도, 정확히 5904 바이트만 잘라냅니다.
|
|
3044
|
+
let exactSigLen = 4160;
|
|
3045
|
+
if (sigBuf.length < exactSigLen) {
|
|
3046
|
+
exactSigLen = sigBuf.length;
|
|
3047
|
+
}
|
|
3048
|
+
const sigPtr = aimerC._malloc(exactSigLen);
|
|
3049
|
+
const msgPtr = aimerC._malloc(msgBuf.length);
|
|
3050
|
+
const pkPtr = aimerC._malloc(pkBuf.length);
|
|
3051
|
+
// 딱 5904 바이트만 C 메모리에 복사합니다.
|
|
3052
|
+
aimerC.HEAPU8.set(sigBuf.subarray(0, exactSigLen), sigPtr);
|
|
3053
|
+
aimerC.HEAPU8.set(msgBuf, msgPtr);
|
|
3054
|
+
aimerC.HEAPU8.set(pkBuf, pkPtr);
|
|
3055
|
+
// 💡 [완벽 해결 2] 파라미터 7개 (0, 0 포함)와 정확한 길이(exactSigLen)를 넘깁니다!
|
|
3056
|
+
const ret = aimerC._wasm_aimer_verify(sigPtr, exactSigLen, msgPtr, msgBuf.length, 0, 0, pkPtr);
|
|
3057
|
+
aimerC._free(sigPtr);
|
|
3058
|
+
aimerC._free(msgPtr);
|
|
3059
|
+
aimerC._free(pkPtr);
|
|
3060
|
+
return { ret: ret };
|
|
3061
|
+
};
|
|
3062
|
+
// ==========================================
|
|
3063
|
+
// [SMAUGT JS Bridge (KEM)]
|
|
3064
|
+
// ==========================================
|
|
3065
|
+
// 2. 키 쌍 생성 브릿지
|
|
3066
|
+
globalThis.js_smaugt_generate_keypair = function (pkSize, skSize) {
|
|
3067
|
+
const pkPtr = smaugtC._malloc(pkSize);
|
|
3068
|
+
const skPtr = smaugtC._malloc(skSize);
|
|
3069
|
+
const ret = smaugtC._wasm_smaugt_keypair(pkPtr, skPtr);
|
|
3070
|
+
let pkBytes = null, skBytes = null;
|
|
3071
|
+
if (ret === 0) {
|
|
3072
|
+
pkBytes = new Uint8Array(smaugtC.HEAPU8.buffer, pkPtr, pkSize).slice();
|
|
3073
|
+
skBytes = new Uint8Array(smaugtC.HEAPU8.buffer, skPtr, skSize).slice();
|
|
3074
|
+
}
|
|
3075
|
+
smaugtC._free(pkPtr);
|
|
3076
|
+
smaugtC._free(skPtr);
|
|
3077
|
+
return { ret: ret, pk: pkBytes, sk: skBytes };
|
|
3078
|
+
};
|
|
3079
|
+
// 3. 캡슐화 (Encapsulate) 브릿지
|
|
3080
|
+
globalThis.js_smaugt_encapsulate = function (pkBuf, ctSize, ssSize) {
|
|
3081
|
+
const pkPtr = smaugtC._malloc(pkBuf.length);
|
|
3082
|
+
const ctPtr = smaugtC._malloc(ctSize);
|
|
3083
|
+
const ssPtr = smaugtC._malloc(ssSize);
|
|
3084
|
+
// Go에서 받은 공개키(pk)를 C 메모리에 복사
|
|
3085
|
+
smaugtC.HEAPU8.set(pkBuf, pkPtr);
|
|
3086
|
+
const ret = smaugtC._wasm_smaugt_encapsulate(ctPtr, ssPtr, pkPtr);
|
|
3087
|
+
let ctBytes = null, ssBytes = null;
|
|
3088
|
+
if (ret === 0) {
|
|
3089
|
+
// 암호문과 공유 비밀키를 C 메모리에서 빼옴
|
|
3090
|
+
ctBytes = new Uint8Array(smaugtC.HEAPU8.buffer, ctPtr, ctSize).slice();
|
|
3091
|
+
ssBytes = new Uint8Array(smaugtC.HEAPU8.buffer, ssPtr, ssSize).slice();
|
|
3092
|
+
}
|
|
3093
|
+
smaugtC._free(pkPtr);
|
|
3094
|
+
smaugtC._free(ctPtr);
|
|
3095
|
+
smaugtC._free(ssPtr);
|
|
3096
|
+
return { ret: ret, ciphertext: ctBytes, sharedSecret: ssBytes };
|
|
3097
|
+
};
|
|
3098
|
+
// 4. 디캡슐화 (Decapsulate) 브릿지
|
|
3099
|
+
globalThis.js_smaugt_decapsulate = function (ctBuf, skBuf, ssSize) {
|
|
3100
|
+
const ctPtr = smaugtC._malloc(ctBuf.length);
|
|
3101
|
+
const skPtr = smaugtC._malloc(skBuf.length);
|
|
3102
|
+
const ssPtr = smaugtC._malloc(ssSize);
|
|
3103
|
+
// Go에서 받은 암호문(ct)과 비밀키(sk)를 C 메모리에 복사
|
|
3104
|
+
smaugtC.HEAPU8.set(ctBuf, ctPtr);
|
|
3105
|
+
smaugtC.HEAPU8.set(skBuf, skPtr);
|
|
3106
|
+
const ret = smaugtC._wasm_smaugt_decapsulate(ssPtr, ctPtr, skPtr);
|
|
3107
|
+
let ssBytes = null;
|
|
3108
|
+
if (ret === 0) {
|
|
3109
|
+
ssBytes = new Uint8Array(smaugtC.HEAPU8.buffer, ssPtr, ssSize).slice();
|
|
3110
|
+
}
|
|
3111
|
+
smaugtC._free(ctPtr);
|
|
3112
|
+
smaugtC._free(skPtr);
|
|
3113
|
+
smaugtC._free(ssPtr);
|
|
3114
|
+
return { ret: ret, sharedSecret: ssBytes };
|
|
3115
|
+
};
|
|
3116
|
+
// ==========================================
|
|
3117
|
+
// [HAETAE JS Bridge (Signature)]
|
|
3118
|
+
// ==========================================
|
|
3119
|
+
// 2. 키 쌍 생성 브릿지
|
|
3120
|
+
// Go 측 haetae_wasm.go 도 (pkSize, skSize, jsSeed) 로 호출한다. AIMER 와
|
|
3121
|
+
// 동일하게 seedBuf 를 C 메모리로 복사해서 _wasm_haetae_keypair 의 3번째
|
|
3122
|
+
// 인자로 전달해야 HAETAE 의 randombytes 가 시드된다.
|
|
3123
|
+
globalThis.js_haetae_generate_keypair = function (pkSize, skSize, seedBuf) {
|
|
3124
|
+
const pkPtr = haetaeC._malloc(pkSize);
|
|
3125
|
+
const skPtr = haetaeC._malloc(skSize);
|
|
3126
|
+
const seedPtr = haetaeC._malloc(seedBuf.length);
|
|
3127
|
+
haetaeC.HEAPU8.set(seedBuf, seedPtr);
|
|
3128
|
+
const ret = haetaeC._wasm_haetae_keypair(pkPtr, skPtr, seedPtr);
|
|
3129
|
+
let pkBytes = null, skBytes = null;
|
|
3130
|
+
if (ret === 0) {
|
|
3131
|
+
pkBytes = new Uint8Array(haetaeC.HEAPU8.buffer, pkPtr, pkSize).slice();
|
|
3132
|
+
skBytes = new Uint8Array(haetaeC.HEAPU8.buffer, skPtr, skSize).slice();
|
|
3133
|
+
}
|
|
3134
|
+
haetaeC._free(pkPtr);
|
|
3135
|
+
haetaeC._free(skPtr);
|
|
3136
|
+
haetaeC._free(seedPtr);
|
|
3137
|
+
return { ret: ret, pk: pkBytes, sk: skBytes };
|
|
3138
|
+
};
|
|
3139
|
+
// 3. 서명 생성 브릿지
|
|
3140
|
+
globalThis.js_haetae_sign = function (msgBuf, skBuf, maxSigSize) {
|
|
3141
|
+
const sigPtr = haetaeC._malloc(maxSigSize);
|
|
3142
|
+
const sigLenPtr = haetaeC._malloc(4); // size_t
|
|
3143
|
+
const msgPtr = haetaeC._malloc(msgBuf.length);
|
|
3144
|
+
const skPtr = haetaeC._malloc(skBuf.length);
|
|
3145
|
+
haetaeC.HEAPU8.set(msgBuf, msgPtr);
|
|
3146
|
+
haetaeC.HEAPU8.set(skBuf, skPtr);
|
|
3147
|
+
// C 래퍼에서 ctx 인자를 제거했으므로 5개의 인자만 넘깁니다.
|
|
3148
|
+
const ret = haetaeC._wasm_haetae_sign(sigPtr, sigLenPtr, msgPtr, msgBuf.length, skPtr);
|
|
3149
|
+
let sigBytes = null;
|
|
3150
|
+
if (ret === 0) {
|
|
3151
|
+
const actualSigLen = haetaeC.HEAPU32[sigLenPtr / 4];
|
|
3152
|
+
sigBytes = new Uint8Array(haetaeC.HEAPU8.buffer, sigPtr, actualSigLen).slice();
|
|
3153
|
+
}
|
|
3154
|
+
haetaeC._free(sigPtr);
|
|
3155
|
+
haetaeC._free(sigLenPtr);
|
|
3156
|
+
haetaeC._free(msgPtr);
|
|
3157
|
+
haetaeC._free(skPtr);
|
|
3158
|
+
return { ret: ret, signature: sigBytes };
|
|
3159
|
+
};
|
|
3160
|
+
// 4. 서명 검증 브릿지
|
|
3161
|
+
globalThis.js_haetae_verify = function (sigBuf, msgBuf, pkBuf) {
|
|
3162
|
+
const sigPtr = haetaeC._malloc(sigBuf.length);
|
|
3163
|
+
const msgPtr = haetaeC._malloc(msgBuf.length);
|
|
3164
|
+
const pkPtr = haetaeC._malloc(pkBuf.length);
|
|
3165
|
+
haetaeC.HEAPU8.set(sigBuf, sigPtr);
|
|
3166
|
+
haetaeC.HEAPU8.set(msgBuf, msgPtr);
|
|
3167
|
+
haetaeC.HEAPU8.set(pkBuf, pkPtr);
|
|
3168
|
+
const ret = haetaeC._wasm_haetae_verify(sigPtr, sigBuf.length, msgPtr, msgBuf.length, pkPtr);
|
|
3169
|
+
haetaeC._free(sigPtr);
|
|
3170
|
+
haetaeC._free(msgPtr);
|
|
3171
|
+
haetaeC._free(pkPtr);
|
|
3172
|
+
return { ret: ret };
|
|
3173
|
+
};
|
|
3174
|
+
// 정적 리터럴 URL — Vite/Rollup/Webpack5 가 `new URL(<리터럴>, import.meta.url)` 패턴을
|
|
3175
|
+
// 정적 분석해서 사용자 빌드의 자산 그래프에 wasm 을 자동 등록할 수 있도록 모듈 최상위에서 선언.
|
|
3176
|
+
// override (baseUrl/urls) 가 없을 때만 사용된다.
|
|
3177
|
+
const DEFAULT_AIMER_URL = new URL('../autogen/wasm/crypto_aimer.wasm', new URL(module.uri, document.baseURI).href);
|
|
3178
|
+
const DEFAULT_SMAUGT_URL = new URL('../autogen/wasm/crypto_smaugt.wasm', new URL(module.uri, document.baseURI).href);
|
|
3179
|
+
const DEFAULT_HAETAE_URL = new URL('../autogen/wasm/crypto_haetae.wasm', new URL(module.uri, document.baseURI).href);
|
|
3180
|
+
// AIMER / SMAUGT / HAETAE 의 .wasm 바이너리를 외부에서 받아와 Emscripten 모듈에 주입한다.
|
|
3181
|
+
// Module({ wasmBinary }) 가 주어지면 글루는 자체 fetch 를 건너뛰고 그 바이트를 사용한다.
|
|
3182
|
+
//
|
|
3183
|
+
// opts:
|
|
3184
|
+
// baseUrl?: URL | string — 기본은 이 파일이 위치한 디렉토리(=dist/utils/...) 기준 ./autogen/wasm/.
|
|
3185
|
+
// urls?: { aimer, smaugt, haetae } — 개별 파일 override
|
|
3186
|
+
// fetcher?: (url: URL) => Promise<Uint8Array> — 완전 커스텀 (CDN/캐시/모킹)
|
|
3187
|
+
function loadCryptoWasm() {
|
|
3188
|
+
return tslib_es6.__awaiter(this, arguments, void 0, function* (opts = {}) {
|
|
3189
|
+
var _a, _b, _c, _d;
|
|
3190
|
+
const get = (_a = opts.fetcher) !== null && _a !== void 0 ? _a : fetchWasmBytes;
|
|
3191
|
+
// 우선순위: opts.urls.* > opts.baseUrl > 정적 리터럴
|
|
3192
|
+
const pick = (override, defaultUrl, name) => {
|
|
3193
|
+
if (override) {
|
|
3194
|
+
const base = opts.baseUrl
|
|
3195
|
+
? (opts.baseUrl instanceof URL ? opts.baseUrl : new URL(opts.baseUrl))
|
|
3196
|
+
: new URL('../autogen/wasm/', new URL(module.uri, document.baseURI).href);
|
|
3197
|
+
return override instanceof URL ? override : new URL(override, base);
|
|
3198
|
+
}
|
|
3199
|
+
if (opts.baseUrl) {
|
|
3200
|
+
const base = opts.baseUrl instanceof URL ? opts.baseUrl : new URL(opts.baseUrl);
|
|
3201
|
+
return new URL(name, base);
|
|
3202
|
+
}
|
|
3203
|
+
return defaultUrl;
|
|
3204
|
+
};
|
|
3205
|
+
const [aimerBin, smaugtBin, haetaeBin] = yield Promise.all([
|
|
3206
|
+
get(pick((_b = opts.urls) === null || _b === void 0 ? void 0 : _b.aimer, DEFAULT_AIMER_URL, 'crypto_aimer.wasm')),
|
|
3207
|
+
get(pick((_c = opts.urls) === null || _c === void 0 ? void 0 : _c.smaugt, DEFAULT_SMAUGT_URL, 'crypto_smaugt.wasm')),
|
|
3208
|
+
get(pick((_d = opts.urls) === null || _d === void 0 ? void 0 : _d.haetae, DEFAULT_HAETAE_URL, 'crypto_haetae.wasm')),
|
|
3209
|
+
]);
|
|
3210
|
+
aimerC = yield AimerModule({ wasmBinary: aimerBin });
|
|
3211
|
+
smaugtC = yield SmaugtModule({ wasmBinary: smaugtBin });
|
|
3212
|
+
haetaeC = yield HaetaeModule({ wasmBinary: haetaeBin });
|
|
3213
|
+
});
|
|
3214
|
+
}
|
|
3215
|
+
|
|
3216
|
+
/* eslint-disable */
|
|
3217
|
+
(() => {
|
|
3218
|
+
const enosys = () => {
|
|
3219
|
+
const err = new Error('not implemented');
|
|
3220
|
+
err.code = 'ENOSYS';
|
|
3221
|
+
return err;
|
|
3222
|
+
};
|
|
3223
|
+
if (!globalThis.fs) {
|
|
3224
|
+
let outputBuf = '';
|
|
3225
|
+
globalThis.fs = {
|
|
3226
|
+
constants: {
|
|
3227
|
+
O_WRONLY: -1,
|
|
3228
|
+
O_RDWR: -1,
|
|
3229
|
+
O_CREAT: -1,
|
|
3230
|
+
O_TRUNC: -1,
|
|
3231
|
+
O_APPEND: -1,
|
|
3232
|
+
O_EXCL: -1
|
|
3233
|
+
}, // unused
|
|
3234
|
+
writeSync(fd, buf) {
|
|
3235
|
+
outputBuf += decoder.decode(buf);
|
|
3236
|
+
const nl = outputBuf.lastIndexOf('\n');
|
|
3237
|
+
if (nl != -1) {
|
|
3238
|
+
console.log(outputBuf.substring(0, nl));
|
|
3239
|
+
outputBuf = outputBuf.substring(nl + 1);
|
|
3240
|
+
}
|
|
3241
|
+
return buf.length;
|
|
3242
|
+
},
|
|
3243
|
+
write(fd, buf, offset, length, position, callback) {
|
|
3244
|
+
if (offset !== 0 || length !== buf.length || position !== null) {
|
|
3245
|
+
callback(enosys());
|
|
3246
|
+
return;
|
|
3247
|
+
}
|
|
3248
|
+
const n = this.writeSync(fd, buf);
|
|
3249
|
+
callback(null, n);
|
|
3250
|
+
},
|
|
3251
|
+
chmod(path, mode, callback) {
|
|
3252
|
+
callback(enosys());
|
|
3253
|
+
},
|
|
3254
|
+
chown(path, uid, gid, callback) {
|
|
3255
|
+
callback(enosys());
|
|
3256
|
+
},
|
|
3257
|
+
close(fd, callback) {
|
|
3258
|
+
callback(enosys());
|
|
3259
|
+
},
|
|
3260
|
+
fchmod(fd, mode, callback) {
|
|
3261
|
+
callback(enosys());
|
|
3262
|
+
},
|
|
3263
|
+
fchown(fd, uid, gid, callback) {
|
|
3264
|
+
callback(enosys());
|
|
3265
|
+
},
|
|
3266
|
+
fstat(fd, callback) {
|
|
3267
|
+
callback(enosys());
|
|
3268
|
+
},
|
|
3269
|
+
fsync(fd, callback) {
|
|
3270
|
+
callback(null);
|
|
3271
|
+
},
|
|
3272
|
+
ftruncate(fd, length, callback) {
|
|
3273
|
+
callback(enosys());
|
|
3274
|
+
},
|
|
3275
|
+
lchown(path, uid, gid, callback) {
|
|
3276
|
+
callback(enosys());
|
|
3277
|
+
},
|
|
3278
|
+
link(path, link, callback) {
|
|
3279
|
+
callback(enosys());
|
|
3280
|
+
},
|
|
3281
|
+
lstat(path, callback) {
|
|
3282
|
+
callback(enosys());
|
|
3283
|
+
},
|
|
3284
|
+
mkdir(path, perm, callback) {
|
|
3285
|
+
callback(enosys());
|
|
3286
|
+
},
|
|
3287
|
+
open(path, flags, mode, callback) {
|
|
3288
|
+
callback(enosys());
|
|
3289
|
+
},
|
|
3290
|
+
read(fd, buffer, offset, length, position, callback) {
|
|
3291
|
+
callback(enosys());
|
|
3292
|
+
},
|
|
3293
|
+
readdir(path, callback) {
|
|
3294
|
+
callback(enosys());
|
|
3295
|
+
},
|
|
3296
|
+
readlink(path, callback) {
|
|
3297
|
+
callback(enosys());
|
|
3298
|
+
},
|
|
3299
|
+
rename(from, to, callback) {
|
|
3300
|
+
callback(enosys());
|
|
3301
|
+
},
|
|
3302
|
+
rmdir(path, callback) {
|
|
3303
|
+
callback(enosys());
|
|
3304
|
+
},
|
|
3305
|
+
stat(path, callback) {
|
|
3306
|
+
callback(enosys());
|
|
3307
|
+
},
|
|
3308
|
+
symlink(path, link, callback) {
|
|
3309
|
+
callback(enosys());
|
|
3310
|
+
},
|
|
3311
|
+
truncate(path, length, callback) {
|
|
3312
|
+
callback(enosys());
|
|
3313
|
+
},
|
|
3314
|
+
unlink(path, callback) {
|
|
3315
|
+
callback(enosys());
|
|
3316
|
+
},
|
|
3317
|
+
utimes(path, atime, mtime, callback) {
|
|
3318
|
+
callback(enosys());
|
|
3319
|
+
}
|
|
3320
|
+
};
|
|
3321
|
+
}
|
|
3322
|
+
// if (!globalThis.process) {
|
|
3323
|
+
// globalThis.process = {
|
|
3324
|
+
// getuid() {
|
|
3325
|
+
// return -1;
|
|
3326
|
+
// },
|
|
3327
|
+
// getgid() {
|
|
3328
|
+
// return -1;
|
|
3329
|
+
// },
|
|
3330
|
+
// geteuid() {
|
|
3331
|
+
// return -1;
|
|
3332
|
+
// },
|
|
3333
|
+
// getegid() {
|
|
3334
|
+
// return -1;
|
|
3335
|
+
// },
|
|
3336
|
+
// getgroups() {
|
|
3337
|
+
// throw enosys();
|
|
3338
|
+
// },
|
|
3339
|
+
// pid: -1,
|
|
3340
|
+
// ppid: -1,
|
|
3341
|
+
// umask() {
|
|
3342
|
+
// throw enosys();
|
|
3343
|
+
// },
|
|
3344
|
+
// cwd() {
|
|
3345
|
+
// throw enosys();
|
|
3346
|
+
// },
|
|
3347
|
+
// chdir() {
|
|
3348
|
+
// throw enosys();
|
|
3349
|
+
// }
|
|
3350
|
+
// };
|
|
3351
|
+
// }
|
|
3352
|
+
if (!globalThis.crypto) {
|
|
3353
|
+
throw new Error('globalThis.crypto is not available, polyfill required (crypto.getRandomValues only)');
|
|
3354
|
+
}
|
|
3355
|
+
if (!globalThis.performance) {
|
|
3356
|
+
throw new Error('globalThis.performance is not available, polyfill required (performance.now only)');
|
|
3357
|
+
}
|
|
3358
|
+
if (!globalThis.TextEncoder) {
|
|
3359
|
+
throw new Error('globalThis.TextEncoder is not available, polyfill required');
|
|
3360
|
+
}
|
|
3361
|
+
if (!globalThis.TextDecoder) {
|
|
3362
|
+
throw new Error('globalThis.TextDecoder is not available, polyfill required');
|
|
3363
|
+
}
|
|
3364
|
+
const encoder = new TextEncoder('utf-8');
|
|
3365
|
+
const decoder = new TextDecoder('utf-8');
|
|
3366
|
+
globalThis.Go = class {
|
|
3367
|
+
constructor() {
|
|
3368
|
+
this.argv = ['js'];
|
|
3369
|
+
this.env = {};
|
|
3370
|
+
this.exit = code => {
|
|
3371
|
+
if (code !== 0) {
|
|
3372
|
+
console.warn('exit code:', code);
|
|
3373
|
+
}
|
|
3374
|
+
};
|
|
3375
|
+
this._exitPromise = new Promise(resolve => {
|
|
3376
|
+
this._resolveExitPromise = resolve;
|
|
3377
|
+
});
|
|
3378
|
+
this._pendingEvent = null;
|
|
3379
|
+
this._scheduledTimeouts = new Map();
|
|
3380
|
+
this._nextCallbackTimeoutID = 1;
|
|
3381
|
+
const setInt64 = (addr, v) => {
|
|
3382
|
+
this.mem.setUint32(addr + 0, v, true);
|
|
3383
|
+
this.mem.setUint32(addr + 4, Math.floor(v / 4294967296), true);
|
|
3384
|
+
};
|
|
3385
|
+
const getInt64 = addr => {
|
|
3386
|
+
const low = this.mem.getUint32(addr + 0, true);
|
|
3387
|
+
const high = this.mem.getInt32(addr + 4, true);
|
|
3388
|
+
return low + high * 4294967296;
|
|
3389
|
+
};
|
|
3390
|
+
const loadValue = addr => {
|
|
3391
|
+
const f = this.mem.getFloat64(addr, true);
|
|
3392
|
+
if (f === 0) {
|
|
3393
|
+
return undefined;
|
|
3394
|
+
}
|
|
3395
|
+
if (!isNaN(f)) {
|
|
3396
|
+
return f;
|
|
3397
|
+
}
|
|
3398
|
+
const id = this.mem.getUint32(addr, true);
|
|
3399
|
+
return this._values[id];
|
|
3400
|
+
};
|
|
3401
|
+
const storeValue = (addr, v) => {
|
|
3402
|
+
const nanHead = 0x7ff80000;
|
|
3403
|
+
if (typeof v === 'number' && v !== 0) {
|
|
3404
|
+
if (isNaN(v)) {
|
|
3405
|
+
this.mem.setUint32(addr + 4, nanHead, true);
|
|
3406
|
+
this.mem.setUint32(addr, 0, true);
|
|
3407
|
+
return;
|
|
3408
|
+
}
|
|
3409
|
+
this.mem.setFloat64(addr, v, true);
|
|
3410
|
+
return;
|
|
3411
|
+
}
|
|
3412
|
+
if (v === undefined) {
|
|
3413
|
+
this.mem.setFloat64(addr, 0, true);
|
|
3414
|
+
return;
|
|
3415
|
+
}
|
|
3416
|
+
let id = this._ids.get(v);
|
|
3417
|
+
if (id === undefined) {
|
|
3418
|
+
id = this._idPool.pop();
|
|
3419
|
+
if (id === undefined) {
|
|
3420
|
+
id = this._values.length;
|
|
3421
|
+
}
|
|
3422
|
+
this._values[id] = v;
|
|
3423
|
+
this._goRefCounts[id] = 0;
|
|
3424
|
+
this._ids.set(v, id);
|
|
3425
|
+
}
|
|
3426
|
+
this._goRefCounts[id]++;
|
|
3427
|
+
let typeFlag = 0;
|
|
3428
|
+
switch (typeof v) {
|
|
3429
|
+
case 'object':
|
|
3430
|
+
if (v !== null) {
|
|
3431
|
+
typeFlag = 1;
|
|
3432
|
+
}
|
|
3433
|
+
break;
|
|
3434
|
+
case 'string':
|
|
3435
|
+
typeFlag = 2;
|
|
3436
|
+
break;
|
|
3437
|
+
case 'symbol':
|
|
3438
|
+
typeFlag = 3;
|
|
3439
|
+
break;
|
|
3440
|
+
case 'function':
|
|
3441
|
+
typeFlag = 4;
|
|
3442
|
+
break;
|
|
3443
|
+
}
|
|
3444
|
+
this.mem.setUint32(addr + 4, nanHead | typeFlag, true);
|
|
3445
|
+
this.mem.setUint32(addr, id, true);
|
|
3446
|
+
};
|
|
3447
|
+
const loadSlice = addr => {
|
|
3448
|
+
const array = getInt64(addr + 0);
|
|
3449
|
+
const len = getInt64(addr + 8);
|
|
3450
|
+
return new Uint8Array(this._inst.exports.mem.buffer, array, len);
|
|
3451
|
+
};
|
|
3452
|
+
const loadSliceOfValues = addr => {
|
|
3453
|
+
const array = getInt64(addr + 0);
|
|
3454
|
+
const len = getInt64(addr + 8);
|
|
3455
|
+
const a = new Array(len);
|
|
3456
|
+
for (let i = 0; i < len; i++) {
|
|
3457
|
+
a[i] = loadValue(array + i * 8);
|
|
3458
|
+
}
|
|
3459
|
+
return a;
|
|
3460
|
+
};
|
|
3461
|
+
const loadString = addr => {
|
|
3462
|
+
const saddr = getInt64(addr + 0);
|
|
3463
|
+
const len = getInt64(addr + 8);
|
|
3464
|
+
return decoder.decode(new DataView(this._inst.exports.mem.buffer, saddr, len));
|
|
3465
|
+
};
|
|
3466
|
+
const timeOrigin = Date.now() - performance.now();
|
|
3467
|
+
this.importObject = {
|
|
3468
|
+
_gotest: {
|
|
3469
|
+
add: (a, b) => a + b
|
|
3470
|
+
},
|
|
3471
|
+
gojs: {
|
|
3472
|
+
// Go's SP does not change as long as no Go code is running. Some operations (e.g. calls, getters and setters)
|
|
3473
|
+
// may synchronously trigger a Go event handler. This makes Go code get executed in the middle of the imported
|
|
3474
|
+
// function. A goroutine can switch to a new stack if the current stack is too small (see morestack function).
|
|
3475
|
+
// This changes the SP, thus we have to update the SP used by the imported function.
|
|
3476
|
+
// func wasmExit(code int32)
|
|
3477
|
+
'runtime.wasmExit': sp => {
|
|
3478
|
+
sp >>>= 0;
|
|
3479
|
+
const code = this.mem.getInt32(sp + 8, true);
|
|
3480
|
+
this.exited = true;
|
|
3481
|
+
delete this._inst;
|
|
3482
|
+
delete this._values;
|
|
3483
|
+
delete this._goRefCounts;
|
|
3484
|
+
delete this._ids;
|
|
3485
|
+
delete this._idPool;
|
|
3486
|
+
this.exit(code);
|
|
3487
|
+
},
|
|
3488
|
+
// func wasmWrite(fd uintptr, p unsafe.Pointer, n int32)
|
|
3489
|
+
'runtime.wasmWrite': sp => {
|
|
3490
|
+
sp >>>= 0;
|
|
3491
|
+
const fd = getInt64(sp + 8);
|
|
3492
|
+
const p = getInt64(sp + 16);
|
|
3493
|
+
const n = this.mem.getInt32(sp + 24, true);
|
|
3494
|
+
fs.writeSync(fd, new Uint8Array(this._inst.exports.mem.buffer, p, n));
|
|
3495
|
+
},
|
|
3496
|
+
// func resetMemoryDataView()
|
|
3497
|
+
'runtime.resetMemoryDataView': sp => {
|
|
3498
|
+
this.mem = new DataView(this._inst.exports.mem.buffer);
|
|
3499
|
+
},
|
|
3500
|
+
// func nanotime1() int64
|
|
3501
|
+
'runtime.nanotime1': sp => {
|
|
3502
|
+
sp >>>= 0;
|
|
3503
|
+
setInt64(sp + 8, (timeOrigin + performance.now()) * 1000000);
|
|
3504
|
+
},
|
|
3505
|
+
// func walltime() (sec int64, nsec int32)
|
|
3506
|
+
'runtime.walltime': sp => {
|
|
3507
|
+
sp >>>= 0;
|
|
3508
|
+
const msec = new Date().getTime();
|
|
3509
|
+
setInt64(sp + 8, msec / 1000);
|
|
3510
|
+
this.mem.setInt32(sp + 16, (msec % 1000) * 1000000, true);
|
|
3511
|
+
},
|
|
3512
|
+
// func scheduleTimeoutEvent(delay int64) int32
|
|
3513
|
+
'runtime.scheduleTimeoutEvent': sp => {
|
|
3514
|
+
sp >>>= 0;
|
|
3515
|
+
const id = this._nextCallbackTimeoutID;
|
|
3516
|
+
this._nextCallbackTimeoutID++;
|
|
3517
|
+
this._scheduledTimeouts.set(id, setTimeout(() => {
|
|
3518
|
+
this._resume();
|
|
3519
|
+
while (this._scheduledTimeouts.has(id)) {
|
|
3520
|
+
// for some reason Go failed to register the timeout event, log and try again
|
|
3521
|
+
// (temporary workaround for https://github.com/golang/go/issues/28975)
|
|
3522
|
+
console.warn('scheduleTimeoutEvent: missed timeout event');
|
|
3523
|
+
this._resume();
|
|
3524
|
+
}
|
|
3525
|
+
}, getInt64(sp + 8)));
|
|
3526
|
+
this.mem.setInt32(sp + 16, id, true);
|
|
3527
|
+
},
|
|
3528
|
+
// func clearTimeoutEvent(id int32)
|
|
3529
|
+
'runtime.clearTimeoutEvent': sp => {
|
|
3530
|
+
sp >>>= 0;
|
|
3531
|
+
const id = this.mem.getInt32(sp + 8, true);
|
|
3532
|
+
clearTimeout(this._scheduledTimeouts.get(id));
|
|
3533
|
+
this._scheduledTimeouts.delete(id);
|
|
3534
|
+
},
|
|
3535
|
+
// func getRandomData(r []byte)
|
|
3536
|
+
'runtime.getRandomData': sp => {
|
|
3537
|
+
sp >>>= 0;
|
|
3538
|
+
crypto.getRandomValues(loadSlice(sp + 8));
|
|
3539
|
+
},
|
|
3540
|
+
// func finalizeRef(v ref)
|
|
3541
|
+
'syscall/js.finalizeRef': sp => {
|
|
3542
|
+
sp >>>= 0;
|
|
3543
|
+
const id = this.mem.getUint32(sp + 8, true);
|
|
3544
|
+
this._goRefCounts[id]--;
|
|
3545
|
+
if (this._goRefCounts[id] === 0) {
|
|
3546
|
+
const v = this._values[id];
|
|
3547
|
+
this._values[id] = null;
|
|
3548
|
+
this._ids.delete(v);
|
|
3549
|
+
this._idPool.push(id);
|
|
3550
|
+
}
|
|
3551
|
+
},
|
|
3552
|
+
// func stringVal(value string) ref
|
|
3553
|
+
'syscall/js.stringVal': sp => {
|
|
3554
|
+
sp >>>= 0;
|
|
3555
|
+
storeValue(sp + 24, loadString(sp + 8));
|
|
3556
|
+
},
|
|
3557
|
+
// func valueGet(v ref, p string) ref
|
|
3558
|
+
'syscall/js.valueGet': sp => {
|
|
3559
|
+
sp >>>= 0;
|
|
3560
|
+
const result = Reflect.get(loadValue(sp + 8), loadString(sp + 16));
|
|
3561
|
+
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
|
3562
|
+
storeValue(sp + 32, result);
|
|
3563
|
+
},
|
|
3564
|
+
// func valueSet(v ref, p string, x ref)
|
|
3565
|
+
'syscall/js.valueSet': sp => {
|
|
3566
|
+
sp >>>= 0;
|
|
3567
|
+
Reflect.set(loadValue(sp + 8), loadString(sp + 16), loadValue(sp + 32));
|
|
3568
|
+
},
|
|
3569
|
+
// func valueDelete(v ref, p string)
|
|
3570
|
+
'syscall/js.valueDelete': sp => {
|
|
3571
|
+
sp >>>= 0;
|
|
3572
|
+
Reflect.deleteProperty(loadValue(sp + 8), loadString(sp + 16));
|
|
3573
|
+
},
|
|
3574
|
+
// func valueIndex(v ref, i int) ref
|
|
3575
|
+
'syscall/js.valueIndex': sp => {
|
|
3576
|
+
sp >>>= 0;
|
|
3577
|
+
storeValue(sp + 24, Reflect.get(loadValue(sp + 8), getInt64(sp + 16)));
|
|
3578
|
+
},
|
|
3579
|
+
// valueSetIndex(v ref, i int, x ref)
|
|
3580
|
+
'syscall/js.valueSetIndex': sp => {
|
|
3581
|
+
sp >>>= 0;
|
|
3582
|
+
Reflect.set(loadValue(sp + 8), getInt64(sp + 16), loadValue(sp + 24));
|
|
3583
|
+
},
|
|
3584
|
+
// func valueCall(v ref, m string, args []ref) (ref, bool)
|
|
3585
|
+
'syscall/js.valueCall': sp => {
|
|
3586
|
+
sp >>>= 0;
|
|
3587
|
+
try {
|
|
3588
|
+
const v = loadValue(sp + 8);
|
|
3589
|
+
const m = Reflect.get(v, loadString(sp + 16));
|
|
3590
|
+
const args = loadSliceOfValues(sp + 32);
|
|
3591
|
+
const result = Reflect.apply(m, v, args);
|
|
3592
|
+
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
|
3593
|
+
storeValue(sp + 56, result);
|
|
3594
|
+
this.mem.setUint8(sp + 64, 1);
|
|
3595
|
+
}
|
|
3596
|
+
catch (err) {
|
|
3597
|
+
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
|
3598
|
+
storeValue(sp + 56, err);
|
|
3599
|
+
this.mem.setUint8(sp + 64, 0);
|
|
3600
|
+
}
|
|
3601
|
+
},
|
|
3602
|
+
// func valueInvoke(v ref, args []ref) (ref, bool)
|
|
3603
|
+
'syscall/js.valueInvoke': sp => {
|
|
3604
|
+
sp >>>= 0;
|
|
3605
|
+
try {
|
|
3606
|
+
const v = loadValue(sp + 8);
|
|
3607
|
+
const args = loadSliceOfValues(sp + 16);
|
|
3608
|
+
const result = Reflect.apply(v, undefined, args);
|
|
3609
|
+
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
|
3610
|
+
storeValue(sp + 40, result);
|
|
3611
|
+
this.mem.setUint8(sp + 48, 1);
|
|
3612
|
+
}
|
|
3613
|
+
catch (err) {
|
|
3614
|
+
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
|
3615
|
+
storeValue(sp + 40, err);
|
|
3616
|
+
this.mem.setUint8(sp + 48, 0);
|
|
3617
|
+
}
|
|
3618
|
+
},
|
|
3619
|
+
// func valueNew(v ref, args []ref) (ref, bool)
|
|
3620
|
+
'syscall/js.valueNew': sp => {
|
|
3621
|
+
sp >>>= 0;
|
|
3622
|
+
try {
|
|
3623
|
+
const v = loadValue(sp + 8);
|
|
3624
|
+
const args = loadSliceOfValues(sp + 16);
|
|
3625
|
+
const result = Reflect.construct(v, args);
|
|
3626
|
+
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
|
3627
|
+
storeValue(sp + 40, result);
|
|
3628
|
+
this.mem.setUint8(sp + 48, 1);
|
|
3629
|
+
}
|
|
3630
|
+
catch (err) {
|
|
3631
|
+
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
|
3632
|
+
storeValue(sp + 40, err);
|
|
3633
|
+
this.mem.setUint8(sp + 48, 0);
|
|
3634
|
+
}
|
|
3635
|
+
},
|
|
3636
|
+
// func valueLength(v ref) int
|
|
3637
|
+
'syscall/js.valueLength': sp => {
|
|
3638
|
+
sp >>>= 0;
|
|
3639
|
+
setInt64(sp + 16, parseInt(loadValue(sp + 8).length));
|
|
3640
|
+
},
|
|
3641
|
+
// valuePrepareString(v ref) (ref, int)
|
|
3642
|
+
'syscall/js.valuePrepareString': sp => {
|
|
3643
|
+
sp >>>= 0;
|
|
3644
|
+
const str = encoder.encode(String(loadValue(sp + 8)));
|
|
3645
|
+
storeValue(sp + 16, str);
|
|
3646
|
+
setInt64(sp + 24, str.length);
|
|
3647
|
+
},
|
|
3648
|
+
// valueLoadString(v ref, b []byte)
|
|
3649
|
+
'syscall/js.valueLoadString': sp => {
|
|
3650
|
+
sp >>>= 0;
|
|
3651
|
+
const str = loadValue(sp + 8);
|
|
3652
|
+
loadSlice(sp + 16).set(str);
|
|
3653
|
+
},
|
|
3654
|
+
// func valueInstanceOf(v ref, t ref) bool
|
|
3655
|
+
'syscall/js.valueInstanceOf': sp => {
|
|
3656
|
+
sp >>>= 0;
|
|
3657
|
+
this.mem.setUint8(sp + 24, loadValue(sp + 8) instanceof loadValue(sp + 16) ? 1 : 0);
|
|
3658
|
+
},
|
|
3659
|
+
// func copyBytesToGo(dst []byte, src ref) (int, bool)
|
|
3660
|
+
'syscall/js.copyBytesToGo': sp => {
|
|
3661
|
+
sp >>>= 0;
|
|
3662
|
+
const dst = loadSlice(sp + 8);
|
|
3663
|
+
const src = loadValue(sp + 32);
|
|
3664
|
+
if (!(src instanceof Uint8Array || src instanceof Uint8ClampedArray)) {
|
|
3665
|
+
this.mem.setUint8(sp + 48, 0);
|
|
3666
|
+
return;
|
|
3667
|
+
}
|
|
3668
|
+
const toCopy = src.subarray(0, dst.length);
|
|
3669
|
+
dst.set(toCopy);
|
|
3670
|
+
setInt64(sp + 40, toCopy.length);
|
|
3671
|
+
this.mem.setUint8(sp + 48, 1);
|
|
3672
|
+
},
|
|
3673
|
+
// func copyBytesToJS(dst ref, src []byte) (int, bool)
|
|
3674
|
+
'syscall/js.copyBytesToJS': sp => {
|
|
3675
|
+
sp >>>= 0;
|
|
3676
|
+
const dst = loadValue(sp + 8);
|
|
3677
|
+
const src = loadSlice(sp + 16);
|
|
3678
|
+
if (!(dst instanceof Uint8Array || dst instanceof Uint8ClampedArray)) {
|
|
3679
|
+
this.mem.setUint8(sp + 48, 0);
|
|
3680
|
+
return;
|
|
3681
|
+
}
|
|
3682
|
+
const toCopy = src.subarray(0, dst.length);
|
|
3683
|
+
dst.set(toCopy);
|
|
3684
|
+
setInt64(sp + 40, toCopy.length);
|
|
3685
|
+
this.mem.setUint8(sp + 48, 1);
|
|
3686
|
+
},
|
|
3687
|
+
debug: value => {
|
|
3688
|
+
console.log(value);
|
|
3689
|
+
}
|
|
3690
|
+
}
|
|
3691
|
+
};
|
|
3692
|
+
}
|
|
3693
|
+
run(instance) {
|
|
3694
|
+
return tslib_es6.__awaiter(this, void 0, void 0, function* () {
|
|
3695
|
+
if (!(instance instanceof WebAssembly.Instance)) {
|
|
3696
|
+
throw new Error('Go.run: WebAssembly.Instance expected');
|
|
3697
|
+
}
|
|
3698
|
+
this._inst = instance;
|
|
3699
|
+
this.mem = new DataView(this._inst.exports.mem.buffer);
|
|
3700
|
+
this._values = [
|
|
3701
|
+
// JS values that Go currently has references to, indexed by reference id
|
|
3702
|
+
NaN,
|
|
3703
|
+
0,
|
|
3704
|
+
null,
|
|
3705
|
+
true,
|
|
3706
|
+
false,
|
|
3707
|
+
globalThis,
|
|
3708
|
+
this
|
|
3709
|
+
];
|
|
3710
|
+
this._goRefCounts = new Array(this._values.length).fill(Infinity); // number of references that Go has to a JS value, indexed by reference id
|
|
3711
|
+
this._ids = new Map([
|
|
3712
|
+
// mapping from JS values to reference ids
|
|
3713
|
+
[0, 1],
|
|
3714
|
+
[null, 2],
|
|
3715
|
+
[true, 3],
|
|
3716
|
+
[false, 4],
|
|
3717
|
+
[globalThis, 5],
|
|
3718
|
+
[this, 6]
|
|
3719
|
+
]);
|
|
3720
|
+
this._idPool = []; // unused ids that have been garbage collected
|
|
3721
|
+
this.exited = false; // whether the Go program has exited
|
|
3722
|
+
// Pass command line arguments and environment variables to WebAssembly by writing them to the linear memory.
|
|
3723
|
+
let offset = 4096;
|
|
3724
|
+
const strPtr = str => {
|
|
3725
|
+
const ptr = offset;
|
|
3726
|
+
const bytes = encoder.encode(str + '\0');
|
|
3727
|
+
new Uint8Array(this.mem.buffer, offset, bytes.length).set(bytes);
|
|
3728
|
+
offset += bytes.length;
|
|
3729
|
+
if (offset % 8 !== 0) {
|
|
3730
|
+
offset += 8 - (offset % 8);
|
|
3731
|
+
}
|
|
3732
|
+
return ptr;
|
|
3733
|
+
};
|
|
3734
|
+
const argc = this.argv.length;
|
|
3735
|
+
const argvPtrs = [];
|
|
3736
|
+
this.argv.forEach(arg => {
|
|
3737
|
+
argvPtrs.push(strPtr(arg));
|
|
3738
|
+
});
|
|
3739
|
+
argvPtrs.push(0);
|
|
3740
|
+
const keys = Object.keys(this.env).sort();
|
|
3741
|
+
keys.forEach(key => {
|
|
3742
|
+
argvPtrs.push(strPtr(`${key}=${this.env[key]}`));
|
|
3743
|
+
});
|
|
3744
|
+
argvPtrs.push(0);
|
|
3745
|
+
const argv = offset;
|
|
3746
|
+
argvPtrs.forEach(ptr => {
|
|
3747
|
+
this.mem.setUint32(offset, ptr, true);
|
|
3748
|
+
this.mem.setUint32(offset + 4, 0, true);
|
|
3749
|
+
offset += 8;
|
|
3750
|
+
});
|
|
3751
|
+
// The linker guarantees global data starts from at least wasmMinDataAddr.
|
|
3752
|
+
// Keep in sync with cmd/link/internal/ld/data.go:wasmMinDataAddr.
|
|
3753
|
+
const wasmMinDataAddr = 4096 + 8192;
|
|
3754
|
+
if (offset >= wasmMinDataAddr) {
|
|
3755
|
+
throw new Error('total length of command line and environment variables exceeds limit');
|
|
3756
|
+
}
|
|
3757
|
+
this._inst.exports.run(argc, argv);
|
|
3758
|
+
if (this.exited) {
|
|
3759
|
+
this._resolveExitPromise();
|
|
3760
|
+
}
|
|
3761
|
+
yield this._exitPromise;
|
|
3762
|
+
});
|
|
3763
|
+
}
|
|
3764
|
+
_resume() {
|
|
3765
|
+
if (this.exited) {
|
|
3766
|
+
throw new Error('Go program has already exited');
|
|
3767
|
+
}
|
|
3768
|
+
this._inst.exports.resume();
|
|
3769
|
+
if (this.exited) {
|
|
3770
|
+
this._resolveExitPromise();
|
|
3771
|
+
}
|
|
3772
|
+
}
|
|
3773
|
+
_makeFuncWrapper(id) {
|
|
3774
|
+
const go = this;
|
|
3775
|
+
return function () {
|
|
3776
|
+
const event = { id: id, this: this, args: arguments };
|
|
3777
|
+
go._pendingEvent = event;
|
|
3778
|
+
go._resume();
|
|
3779
|
+
return event.result;
|
|
3780
|
+
};
|
|
3781
|
+
}
|
|
3782
|
+
};
|
|
3783
|
+
})();
|
|
3784
|
+
((function () {
|
|
3785
|
+
try {
|
|
3786
|
+
if (typeof WebAssembly === 'object' && typeof WebAssembly.instantiate === 'function') {
|
|
3787
|
+
const module = new WebAssembly.Module(Uint8Array.of(0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00));
|
|
3788
|
+
if (module instanceof WebAssembly.Module) {
|
|
3789
|
+
return new WebAssembly.Instance(module) instanceof WebAssembly.Instance;
|
|
3790
|
+
}
|
|
3791
|
+
}
|
|
3792
|
+
}
|
|
3793
|
+
catch (e) { }
|
|
3794
|
+
return false;
|
|
3795
|
+
}))();
|
|
3796
|
+
const go = new globalThis.Go();
|
|
3797
|
+
const LCLIB_SEQ_KEY = '__LCLIB_WASM_SEQ__';
|
|
3798
|
+
if (globalThis[LCLIB_SEQ_KEY] === undefined) {
|
|
3799
|
+
globalThis[LCLIB_SEQ_KEY] = 0;
|
|
3800
|
+
}
|
|
3801
|
+
globalThis[LCLIB_SEQ_KEY] += 1;
|
|
3802
|
+
const namespace = `wallet_${globalThis[LCLIB_SEQ_KEY]}`;
|
|
3803
|
+
const lclibWasmConfig = { namespace };
|
|
3804
|
+
// 정적 리터럴 URL — Vite/Rollup/Webpack5 가 `new URL(<리터럴>, import.meta.url)` 패턴을
|
|
3805
|
+
// 정적 분석해서 사용자 빌드의 자산 그래프에 wasm 을 자동 등록할 수 있도록 모듈 최상위에서 선언.
|
|
3806
|
+
// override (baseUrl/urls) 가 없을 때만 사용된다.
|
|
3807
|
+
const DEFAULT_LCLIB_URL = new URL('../autogen/wasm/lclib.wasm', new URL(module.uri, document.baseURI).href);
|
|
3808
|
+
// .wasm 바이너리 4 개(lclib + AIMER/SMAUGT/HAETAE) 를 외부 파일에서 fetch 해서 로드한다.
|
|
3809
|
+
//
|
|
3810
|
+
// opts:
|
|
3811
|
+
// baseUrl?: URL | string — wasm 파일들이 놓인 베이스. 기본은 이 모듈 기준 ../autogen/wasm/.
|
|
3812
|
+
// urls?: { lclib, aimer, smaugt, haetae } — 개별 파일 override (URL | string)
|
|
3813
|
+
// fetcher?: (url: URL) => Promise<Uint8Array> — 완전 커스텀 (CDN/캐시/모킹/Node 정적 경로)
|
|
3814
|
+
function load() {
|
|
3815
|
+
return tslib_es6.__awaiter(this, arguments, void 0, function* (opts = {}) {
|
|
3816
|
+
var _a, _b;
|
|
3817
|
+
try {
|
|
3818
|
+
const get = (_a = opts.fetcher) !== null && _a !== void 0 ? _a : fetchWasmBytes;
|
|
3819
|
+
// 우선순위: opts.urls.lclib > opts.baseUrl > 정적 리터럴
|
|
3820
|
+
let lclibUrl;
|
|
3821
|
+
if ((_b = opts.urls) === null || _b === void 0 ? void 0 : _b.lclib) {
|
|
3822
|
+
const base = opts.baseUrl
|
|
3823
|
+
? (opts.baseUrl instanceof URL ? opts.baseUrl : new URL(opts.baseUrl))
|
|
3824
|
+
: new URL('../autogen/wasm/', new URL(module.uri, document.baseURI).href);
|
|
3825
|
+
lclibUrl = opts.urls.lclib instanceof URL ? opts.urls.lclib : new URL(opts.urls.lclib, base);
|
|
3826
|
+
}
|
|
3827
|
+
else if (opts.baseUrl) {
|
|
3828
|
+
const base = opts.baseUrl instanceof URL ? opts.baseUrl : new URL(opts.baseUrl);
|
|
3829
|
+
lclibUrl = new URL('lclib.wasm', base);
|
|
3830
|
+
}
|
|
3831
|
+
else {
|
|
3832
|
+
lclibUrl = DEFAULT_LCLIB_URL;
|
|
3833
|
+
}
|
|
3834
|
+
// crypto WASM 3 종과 Go lclib WASM 을 병렬로 다운로드.
|
|
3835
|
+
const cryptoPromise = loadCryptoWasm(opts);
|
|
3836
|
+
const lclibBytesPromise = get(lclibUrl);
|
|
3837
|
+
let lclibBytes;
|
|
3838
|
+
try {
|
|
3839
|
+
[, lclibBytes] = yield Promise.all([cryptoPromise, lclibBytesPromise]);
|
|
3840
|
+
}
|
|
3841
|
+
catch (err) {
|
|
3842
|
+
// 어느 단계에서 실패했는지 컨텍스트를 남긴다.
|
|
3843
|
+
console.error('Locus Chain WASM failed to load.', err);
|
|
3844
|
+
throw err;
|
|
3845
|
+
}
|
|
3846
|
+
globalThis.__LCLIB_WASM_CONFIG__ = lclibWasmConfig;
|
|
3847
|
+
const result = yield WebAssembly.instantiate(lclibBytes, go.importObject);
|
|
3848
|
+
go.run(result.instance);
|
|
3849
|
+
delete globalThis.__LCLIB_WASM_CONFIG__;
|
|
3850
|
+
}
|
|
3851
|
+
catch (err) {
|
|
3852
|
+
console.error('Locus Chain LCLIB WASM failed to load.', err);
|
|
3853
|
+
throw err;
|
|
3854
|
+
}
|
|
3855
|
+
});
|
|
3856
|
+
}
|
|
3857
|
+
|
|
3858
|
+
exports.load = load;
|
|
3859
|
+
exports.namespace = namespace;
|
|
3860
|
+
|
|
3861
|
+
}));
|