rdkit-esm 0.1.0

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/index.js ADDED
@@ -0,0 +1,4623 @@
1
+ //#region rolldown:runtime
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
12
+ key = keys[i];
13
+ if (!__hasOwnProp.call(to, key) && key !== except) {
14
+ __defProp(to, key, {
15
+ get: ((k) => from[k]).bind(null, key),
16
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
17
+ });
18
+ }
19
+ }
20
+ }
21
+ return to;
22
+ };
23
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
24
+ value: mod,
25
+ enumerable: true
26
+ }) : target, mod));
27
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { get: (a, b) => (typeof require !== "undefined" ? require : a)[b] }) : x)(function(x) {
28
+ if (typeof require !== "undefined") return require.apply(this, arguments);
29
+ throw Error("Calling `require` for \"" + x + "\" in an environment that doesn't expose the `require` function.");
30
+ });
31
+
32
+ //#endregion
33
+ //#region MinimalLib/dist/RDKit_minimal.js
34
+ var require_RDKit_minimal = /* @__PURE__ */ __commonJSMin(((exports, module) => {
35
+ var initRDKitModule$1 = (() => {
36
+ var _scriptName = globalThis.document?.currentScript?.src;
37
+ return async function(moduleArg = {}) {
38
+ var moduleRtn;
39
+ var Module = moduleArg;
40
+ var ENVIRONMENT_IS_WEB = !!globalThis.window;
41
+ var ENVIRONMENT_IS_WORKER = !!globalThis.WorkerGlobalScope;
42
+ var ENVIRONMENT_IS_NODE = globalThis.process?.versions?.node && globalThis.process?.type != "renderer";
43
+ var thisProgram = "./this.program";
44
+ if (typeof __filename != "undefined") _scriptName = __filename;
45
+ else if (ENVIRONMENT_IS_WORKER) _scriptName = self.location.href;
46
+ var scriptDirectory = "";
47
+ function locateFile(path) {
48
+ if (Module["locateFile"]) return Module["locateFile"](path, scriptDirectory);
49
+ return scriptDirectory + path;
50
+ }
51
+ var readAsync, readBinary;
52
+ if (ENVIRONMENT_IS_NODE) {
53
+ var fs = __require("node:fs");
54
+ scriptDirectory = __dirname + "/";
55
+ readBinary = (filename) => {
56
+ filename = isFileURI(filename) ? new URL(filename) : filename;
57
+ return fs.readFileSync(filename);
58
+ };
59
+ readAsync = async (filename, binary = true) => {
60
+ filename = isFileURI(filename) ? new URL(filename) : filename;
61
+ return fs.readFileSync(filename, binary ? void 0 : "utf8");
62
+ };
63
+ if (process.argv.length > 1) thisProgram = process.argv[1].replace(/\\/g, "/");
64
+ process.argv.slice(2);
65
+ } else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
66
+ try {
67
+ scriptDirectory = new URL(".", _scriptName).href;
68
+ } catch {}
69
+ if (ENVIRONMENT_IS_WORKER) readBinary = (url) => {
70
+ var xhr = new XMLHttpRequest();
71
+ xhr.open("GET", url, false);
72
+ xhr.responseType = "arraybuffer";
73
+ xhr.send(null);
74
+ return new Uint8Array(xhr.response);
75
+ };
76
+ readAsync = async (url) => {
77
+ if (isFileURI(url)) return new Promise((resolve, reject) => {
78
+ var xhr = new XMLHttpRequest();
79
+ xhr.open("GET", url, true);
80
+ xhr.responseType = "arraybuffer";
81
+ xhr.onload = () => {
82
+ if (xhr.status == 200 || xhr.status == 0 && xhr.response) {
83
+ resolve(xhr.response);
84
+ return;
85
+ }
86
+ reject(xhr.status);
87
+ };
88
+ xhr.onerror = reject;
89
+ xhr.send(null);
90
+ });
91
+ var response = await fetch(url, { credentials: "same-origin" });
92
+ if (response.ok) return response.arrayBuffer();
93
+ throw new Error(response.status + " : " + response.url);
94
+ };
95
+ }
96
+ var out = console.log.bind(console);
97
+ var err = console.error.bind(console);
98
+ var wasmBinary;
99
+ var ABORT = false;
100
+ var isFileURI = (filename) => filename.startsWith("file://");
101
+ function writeStackCookie() {
102
+ var max = _emscripten_stack_get_end();
103
+ if (max == 0) max += 4;
104
+ HEAPU32[max >>> 2 >>> 0] = 34821223;
105
+ HEAPU32[max + 4 >>> 2 >>> 0] = 2310721022;
106
+ HEAPU32[0] = 1668509029;
107
+ }
108
+ function checkStackCookie() {
109
+ if (ABORT) return;
110
+ var max = _emscripten_stack_get_end();
111
+ if (max == 0) max += 4;
112
+ var cookie1 = HEAPU32[max >>> 2 >>> 0];
113
+ var cookie2 = HEAPU32[max + 4 >>> 2 >>> 0];
114
+ if (cookie1 != 34821223 || cookie2 != 2310721022) abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`);
115
+ if (HEAPU32[0] != 1668509029) abort("Runtime error: The application has corrupted its heap memory area (address zero)!");
116
+ }
117
+ var readyPromiseResolve, readyPromiseReject;
118
+ var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
119
+ var HEAP64, HEAPU64;
120
+ var runtimeInitialized = false;
121
+ function updateMemoryViews() {
122
+ var b = wasmMemory.buffer;
123
+ HEAP8 = new Int8Array(b);
124
+ HEAP16 = new Int16Array(b);
125
+ HEAPU8 = new Uint8Array(b);
126
+ HEAPU16 = new Uint16Array(b);
127
+ HEAP32 = new Int32Array(b);
128
+ HEAPU32 = new Uint32Array(b);
129
+ HEAPF32 = new Float32Array(b);
130
+ HEAPF64 = new Float64Array(b);
131
+ HEAP64 = new BigInt64Array(b);
132
+ HEAPU64 = new BigUint64Array(b);
133
+ }
134
+ function preRun() {
135
+ if (Module["preRun"]) {
136
+ if (typeof Module["preRun"] == "function") Module["preRun"] = [Module["preRun"]];
137
+ while (Module["preRun"].length) addOnPreRun(Module["preRun"].shift());
138
+ }
139
+ callRuntimeCallbacks(onPreRuns);
140
+ }
141
+ function initRuntime() {
142
+ runtimeInitialized = true;
143
+ checkStackCookie();
144
+ if (!Module["noFSInit"] && !FS.initialized) FS.init();
145
+ TTY.init();
146
+ wasmExports["Y"]();
147
+ FS.ignorePermissions = false;
148
+ }
149
+ function postRun() {
150
+ checkStackCookie();
151
+ if (Module["postRun"]) {
152
+ if (typeof Module["postRun"] == "function") Module["postRun"] = [Module["postRun"]];
153
+ while (Module["postRun"].length) addOnPostRun(Module["postRun"].shift());
154
+ }
155
+ callRuntimeCallbacks(onPostRuns);
156
+ }
157
+ function abort(what) {
158
+ Module["onAbort"]?.(what);
159
+ what = "Aborted(" + what + ")";
160
+ err(what);
161
+ ABORT = true;
162
+ what += ". Build with -sASSERTIONS for more info.";
163
+ if (runtimeInitialized) ___trap();
164
+ var e = new WebAssembly.RuntimeError(what);
165
+ readyPromiseReject?.(e);
166
+ throw e;
167
+ }
168
+ var wasmBinaryFile;
169
+ function findWasmBinary() {
170
+ return locateFile("RDKit_minimal.wasm");
171
+ }
172
+ function getBinarySync(file) {
173
+ if (file == wasmBinaryFile && wasmBinary) return new Uint8Array(wasmBinary);
174
+ if (readBinary) return readBinary(file);
175
+ throw "both async and sync fetching of the wasm failed";
176
+ }
177
+ async function getWasmBinary(binaryFile) {
178
+ if (!wasmBinary) try {
179
+ var response = await readAsync(binaryFile);
180
+ return new Uint8Array(response);
181
+ } catch {}
182
+ return getBinarySync(binaryFile);
183
+ }
184
+ async function instantiateArrayBuffer(binaryFile, imports) {
185
+ try {
186
+ var binary = await getWasmBinary(binaryFile);
187
+ return await WebAssembly.instantiate(binary, imports);
188
+ } catch (reason) {
189
+ err(`failed to asynchronously prepare wasm: ${reason}`);
190
+ abort(reason);
191
+ }
192
+ }
193
+ async function instantiateAsync(binary, binaryFile, imports) {
194
+ if (!binary && !isFileURI(binaryFile) && !ENVIRONMENT_IS_NODE) try {
195
+ var response = fetch(binaryFile, { credentials: "same-origin" });
196
+ return await WebAssembly.instantiateStreaming(response, imports);
197
+ } catch (reason) {
198
+ err(`wasm streaming compile failed: ${reason}`);
199
+ err("falling back to ArrayBuffer instantiation");
200
+ }
201
+ return instantiateArrayBuffer(binaryFile, imports);
202
+ }
203
+ function getWasmImports() {
204
+ return { a: wasmImports };
205
+ }
206
+ async function createWasm() {
207
+ function receiveInstance(instance, module$1) {
208
+ wasmExports = instance.exports;
209
+ wasmExports = applySignatureConversions(wasmExports);
210
+ assignWasmExports(wasmExports);
211
+ updateMemoryViews();
212
+ return wasmExports;
213
+ }
214
+ function receiveInstantiationResult(result) {
215
+ return receiveInstance(result["instance"]);
216
+ }
217
+ var info = getWasmImports();
218
+ if (Module["instantiateWasm"]) return new Promise((resolve, reject) => {
219
+ Module["instantiateWasm"](info, (inst, mod) => {
220
+ resolve(receiveInstance(inst, mod));
221
+ });
222
+ });
223
+ wasmBinaryFile ??= findWasmBinary();
224
+ return receiveInstantiationResult(await instantiateAsync(wasmBinary, wasmBinaryFile, info));
225
+ }
226
+ var callRuntimeCallbacks = (callbacks) => {
227
+ while (callbacks.length > 0) callbacks.shift()(Module);
228
+ };
229
+ var onPostRuns = [];
230
+ var addOnPostRun = (cb) => onPostRuns.push(cb);
231
+ var onPreRuns = [];
232
+ var addOnPreRun = (cb) => onPreRuns.push(cb);
233
+ var ptrToString = (ptr) => {
234
+ ptr >>>= 0;
235
+ return "0x" + ptr.toString(16).padStart(8, "0");
236
+ };
237
+ var syscallGetVarargI = () => {
238
+ var ret = HEAP32[+SYSCALLS.varargs >>> 2 >>> 0];
239
+ SYSCALLS.varargs += 4;
240
+ return ret;
241
+ };
242
+ var syscallGetVarargP = syscallGetVarargI;
243
+ var PATH = {
244
+ isAbs: (path) => path.charAt(0) === "/",
245
+ splitPath: (filename) => {
246
+ return /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(filename).slice(1);
247
+ },
248
+ normalizeArray: (parts, allowAboveRoot) => {
249
+ var up = 0;
250
+ for (var i = parts.length - 1; i >= 0; i--) {
251
+ var last = parts[i];
252
+ if (last === ".") parts.splice(i, 1);
253
+ else if (last === "..") {
254
+ parts.splice(i, 1);
255
+ up++;
256
+ } else if (up) {
257
+ parts.splice(i, 1);
258
+ up--;
259
+ }
260
+ }
261
+ if (allowAboveRoot) for (; up; up--) parts.unshift("..");
262
+ return parts;
263
+ },
264
+ normalize: (path) => {
265
+ var isAbsolute = PATH.isAbs(path), trailingSlash = path.slice(-1) === "/";
266
+ path = PATH.normalizeArray(path.split("/").filter((p) => !!p), !isAbsolute).join("/");
267
+ if (!path && !isAbsolute) path = ".";
268
+ if (path && trailingSlash) path += "/";
269
+ return (isAbsolute ? "/" : "") + path;
270
+ },
271
+ dirname: (path) => {
272
+ var result = PATH.splitPath(path), root = result[0], dir = result[1];
273
+ if (!root && !dir) return ".";
274
+ if (dir) dir = dir.slice(0, -1);
275
+ return root + dir;
276
+ },
277
+ basename: (path) => path && path.match(/([^\/]+|\/)\/*$/)[1],
278
+ join: (...paths) => PATH.normalize(paths.join("/")),
279
+ join2: (l, r) => PATH.normalize(l + "/" + r)
280
+ };
281
+ var initRandomFill = () => {
282
+ if (ENVIRONMENT_IS_NODE) {
283
+ var nodeCrypto = __require("node:crypto");
284
+ return (view) => nodeCrypto.randomFillSync(view);
285
+ }
286
+ return (view) => crypto.getRandomValues(view);
287
+ };
288
+ var randomFill = (view) => {
289
+ (randomFill = initRandomFill())(view);
290
+ };
291
+ var PATH_FS = {
292
+ resolve: (...args) => {
293
+ var resolvedPath = "", resolvedAbsolute = false;
294
+ for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {
295
+ var path = i >= 0 ? args[i] : FS.cwd();
296
+ if (typeof path != "string") throw new TypeError("Arguments to path.resolve must be strings");
297
+ else if (!path) return "";
298
+ resolvedPath = path + "/" + resolvedPath;
299
+ resolvedAbsolute = PATH.isAbs(path);
300
+ }
301
+ resolvedPath = PATH.normalizeArray(resolvedPath.split("/").filter((p) => !!p), !resolvedAbsolute).join("/");
302
+ return (resolvedAbsolute ? "/" : "") + resolvedPath || ".";
303
+ },
304
+ relative: (from, to) => {
305
+ from = PATH_FS.resolve(from).slice(1);
306
+ to = PATH_FS.resolve(to).slice(1);
307
+ function trim(arr) {
308
+ var start = 0;
309
+ for (; start < arr.length; start++) if (arr[start] !== "") break;
310
+ var end = arr.length - 1;
311
+ for (; end >= 0; end--) if (arr[end] !== "") break;
312
+ if (start > end) return [];
313
+ return arr.slice(start, end - start + 1);
314
+ }
315
+ var fromParts = trim(from.split("/"));
316
+ var toParts = trim(to.split("/"));
317
+ var length = Math.min(fromParts.length, toParts.length);
318
+ var samePartsLength = length;
319
+ for (var i = 0; i < length; i++) if (fromParts[i] !== toParts[i]) {
320
+ samePartsLength = i;
321
+ break;
322
+ }
323
+ var outputParts = [];
324
+ for (var i = samePartsLength; i < fromParts.length; i++) outputParts.push("..");
325
+ outputParts = outputParts.concat(toParts.slice(samePartsLength));
326
+ return outputParts.join("/");
327
+ }
328
+ };
329
+ var UTF8Decoder = globalThis.TextDecoder && new TextDecoder();
330
+ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => {
331
+ var maxIdx = idx + maxBytesToRead;
332
+ if (ignoreNul) return maxIdx;
333
+ while (heapOrArray[idx] && !(idx >= maxIdx)) ++idx;
334
+ return idx;
335
+ };
336
+ var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead, ignoreNul) => {
337
+ idx >>>= 0;
338
+ var endPtr = findStringEnd(heapOrArray, idx, maxBytesToRead, ignoreNul);
339
+ if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));
340
+ var str = "";
341
+ while (idx < endPtr) {
342
+ var u0 = heapOrArray[idx++];
343
+ if (!(u0 & 128)) {
344
+ str += String.fromCharCode(u0);
345
+ continue;
346
+ }
347
+ var u1 = heapOrArray[idx++] & 63;
348
+ if ((u0 & 224) == 192) {
349
+ str += String.fromCharCode((u0 & 31) << 6 | u1);
350
+ continue;
351
+ }
352
+ var u2 = heapOrArray[idx++] & 63;
353
+ if ((u0 & 240) == 224) u0 = (u0 & 15) << 12 | u1 << 6 | u2;
354
+ else u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heapOrArray[idx++] & 63;
355
+ if (u0 < 65536) str += String.fromCharCode(u0);
356
+ else {
357
+ var ch = u0 - 65536;
358
+ str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023);
359
+ }
360
+ }
361
+ return str;
362
+ };
363
+ var FS_stdin_getChar_buffer = [];
364
+ var lengthBytesUTF8 = (str) => {
365
+ var len = 0;
366
+ for (var i = 0; i < str.length; ++i) {
367
+ var c = str.charCodeAt(i);
368
+ if (c <= 127) len++;
369
+ else if (c <= 2047) len += 2;
370
+ else if (c >= 55296 && c <= 57343) {
371
+ len += 4;
372
+ ++i;
373
+ } else len += 3;
374
+ }
375
+ return len;
376
+ };
377
+ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
378
+ outIdx >>>= 0;
379
+ if (!(maxBytesToWrite > 0)) return 0;
380
+ var startIdx = outIdx;
381
+ var endIdx = outIdx + maxBytesToWrite - 1;
382
+ for (var i = 0; i < str.length; ++i) {
383
+ var u = str.codePointAt(i);
384
+ if (u <= 127) {
385
+ if (outIdx >= endIdx) break;
386
+ heap[outIdx++ >>> 0] = u;
387
+ } else if (u <= 2047) {
388
+ if (outIdx + 1 >= endIdx) break;
389
+ heap[outIdx++ >>> 0] = 192 | u >> 6;
390
+ heap[outIdx++ >>> 0] = 128 | u & 63;
391
+ } else if (u <= 65535) {
392
+ if (outIdx + 2 >= endIdx) break;
393
+ heap[outIdx++ >>> 0] = 224 | u >> 12;
394
+ heap[outIdx++ >>> 0] = 128 | u >> 6 & 63;
395
+ heap[outIdx++ >>> 0] = 128 | u & 63;
396
+ } else {
397
+ if (outIdx + 3 >= endIdx) break;
398
+ heap[outIdx++ >>> 0] = 240 | u >> 18;
399
+ heap[outIdx++ >>> 0] = 128 | u >> 12 & 63;
400
+ heap[outIdx++ >>> 0] = 128 | u >> 6 & 63;
401
+ heap[outIdx++ >>> 0] = 128 | u & 63;
402
+ i++;
403
+ }
404
+ }
405
+ heap[outIdx >>> 0] = 0;
406
+ return outIdx - startIdx;
407
+ };
408
+ var intArrayFromString = (stringy, dontAddNull, length) => {
409
+ var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1;
410
+ var u8array = new Array(len);
411
+ var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);
412
+ if (dontAddNull) u8array.length = numBytesWritten;
413
+ return u8array;
414
+ };
415
+ var FS_stdin_getChar = () => {
416
+ if (!FS_stdin_getChar_buffer.length) {
417
+ var result = null;
418
+ if (ENVIRONMENT_IS_NODE) {
419
+ var BUFSIZE = 256;
420
+ var buf = Buffer.alloc(BUFSIZE);
421
+ var bytesRead = 0;
422
+ var fd = process.stdin.fd;
423
+ try {
424
+ bytesRead = fs.readSync(fd, buf, 0, BUFSIZE);
425
+ } catch (e) {
426
+ if (e.toString().includes("EOF")) bytesRead = 0;
427
+ else throw e;
428
+ }
429
+ if (bytesRead > 0) result = buf.slice(0, bytesRead).toString("utf-8");
430
+ } else if (globalThis.window?.prompt) {
431
+ result = window.prompt("Input: ");
432
+ if (result !== null) result += "\n";
433
+ }
434
+ if (!result) return null;
435
+ FS_stdin_getChar_buffer = intArrayFromString(result, true);
436
+ }
437
+ return FS_stdin_getChar_buffer.shift();
438
+ };
439
+ var TTY = {
440
+ ttys: [],
441
+ init() {},
442
+ shutdown() {},
443
+ register(dev, ops) {
444
+ TTY.ttys[dev] = {
445
+ input: [],
446
+ output: [],
447
+ ops
448
+ };
449
+ FS.registerDevice(dev, TTY.stream_ops);
450
+ },
451
+ stream_ops: {
452
+ open(stream) {
453
+ var tty = TTY.ttys[stream.node.rdev];
454
+ if (!tty) throw new FS.ErrnoError(43);
455
+ stream.tty = tty;
456
+ stream.seekable = false;
457
+ },
458
+ close(stream) {
459
+ stream.tty.ops.fsync(stream.tty);
460
+ },
461
+ fsync(stream) {
462
+ stream.tty.ops.fsync(stream.tty);
463
+ },
464
+ read(stream, buffer, offset, length, pos) {
465
+ if (!stream.tty || !stream.tty.ops.get_char) throw new FS.ErrnoError(60);
466
+ var bytesRead = 0;
467
+ for (var i = 0; i < length; i++) {
468
+ var result;
469
+ try {
470
+ result = stream.tty.ops.get_char(stream.tty);
471
+ } catch (e) {
472
+ throw new FS.ErrnoError(29);
473
+ }
474
+ if (result === void 0 && bytesRead === 0) throw new FS.ErrnoError(6);
475
+ if (result === null || result === void 0) break;
476
+ bytesRead++;
477
+ buffer[offset + i] = result;
478
+ }
479
+ if (bytesRead) stream.node.atime = Date.now();
480
+ return bytesRead;
481
+ },
482
+ write(stream, buffer, offset, length, pos) {
483
+ if (!stream.tty || !stream.tty.ops.put_char) throw new FS.ErrnoError(60);
484
+ try {
485
+ for (var i = 0; i < length; i++) stream.tty.ops.put_char(stream.tty, buffer[offset + i]);
486
+ } catch (e) {
487
+ throw new FS.ErrnoError(29);
488
+ }
489
+ if (length) stream.node.mtime = stream.node.ctime = Date.now();
490
+ return i;
491
+ }
492
+ },
493
+ default_tty_ops: {
494
+ get_char(tty) {
495
+ return FS_stdin_getChar();
496
+ },
497
+ put_char(tty, val) {
498
+ if (val === null || val === 10) {
499
+ out(UTF8ArrayToString(tty.output));
500
+ tty.output = [];
501
+ } else if (val != 0) tty.output.push(val);
502
+ },
503
+ fsync(tty) {
504
+ if (tty.output?.length > 0) {
505
+ out(UTF8ArrayToString(tty.output));
506
+ tty.output = [];
507
+ }
508
+ },
509
+ ioctl_tcgets(tty) {
510
+ return {
511
+ c_iflag: 25856,
512
+ c_oflag: 5,
513
+ c_cflag: 191,
514
+ c_lflag: 35387,
515
+ c_cc: [
516
+ 3,
517
+ 28,
518
+ 127,
519
+ 21,
520
+ 4,
521
+ 0,
522
+ 1,
523
+ 0,
524
+ 17,
525
+ 19,
526
+ 26,
527
+ 0,
528
+ 18,
529
+ 15,
530
+ 23,
531
+ 22,
532
+ 0,
533
+ 0,
534
+ 0,
535
+ 0,
536
+ 0,
537
+ 0,
538
+ 0,
539
+ 0,
540
+ 0,
541
+ 0,
542
+ 0,
543
+ 0,
544
+ 0,
545
+ 0,
546
+ 0,
547
+ 0
548
+ ]
549
+ };
550
+ },
551
+ ioctl_tcsets(tty, optional_actions, data) {
552
+ return 0;
553
+ },
554
+ ioctl_tiocgwinsz(tty) {
555
+ return [24, 80];
556
+ }
557
+ },
558
+ default_tty1_ops: {
559
+ put_char(tty, val) {
560
+ if (val === null || val === 10) {
561
+ err(UTF8ArrayToString(tty.output));
562
+ tty.output = [];
563
+ } else if (val != 0) tty.output.push(val);
564
+ },
565
+ fsync(tty) {
566
+ if (tty.output?.length > 0) {
567
+ err(UTF8ArrayToString(tty.output));
568
+ tty.output = [];
569
+ }
570
+ }
571
+ }
572
+ };
573
+ var zeroMemory = (ptr, size) => HEAPU8.fill(0, ptr, ptr + size);
574
+ var alignMemory = (size, alignment) => Math.ceil(size / alignment) * alignment;
575
+ var mmapAlloc = (size) => {
576
+ size = alignMemory(size, 65536);
577
+ var ptr = _emscripten_builtin_memalign(65536, size);
578
+ if (ptr) zeroMemory(ptr, size);
579
+ return ptr;
580
+ };
581
+ var MEMFS = {
582
+ ops_table: null,
583
+ mount(mount) {
584
+ return MEMFS.createNode(null, "/", 16895, 0);
585
+ },
586
+ createNode(parent, name, mode, dev) {
587
+ if (FS.isBlkdev(mode) || FS.isFIFO(mode)) throw new FS.ErrnoError(63);
588
+ MEMFS.ops_table ||= {
589
+ dir: {
590
+ node: {
591
+ getattr: MEMFS.node_ops.getattr,
592
+ setattr: MEMFS.node_ops.setattr,
593
+ lookup: MEMFS.node_ops.lookup,
594
+ mknod: MEMFS.node_ops.mknod,
595
+ rename: MEMFS.node_ops.rename,
596
+ unlink: MEMFS.node_ops.unlink,
597
+ rmdir: MEMFS.node_ops.rmdir,
598
+ readdir: MEMFS.node_ops.readdir,
599
+ symlink: MEMFS.node_ops.symlink
600
+ },
601
+ stream: { llseek: MEMFS.stream_ops.llseek }
602
+ },
603
+ file: {
604
+ node: {
605
+ getattr: MEMFS.node_ops.getattr,
606
+ setattr: MEMFS.node_ops.setattr
607
+ },
608
+ stream: {
609
+ llseek: MEMFS.stream_ops.llseek,
610
+ read: MEMFS.stream_ops.read,
611
+ write: MEMFS.stream_ops.write,
612
+ mmap: MEMFS.stream_ops.mmap,
613
+ msync: MEMFS.stream_ops.msync
614
+ }
615
+ },
616
+ link: {
617
+ node: {
618
+ getattr: MEMFS.node_ops.getattr,
619
+ setattr: MEMFS.node_ops.setattr,
620
+ readlink: MEMFS.node_ops.readlink
621
+ },
622
+ stream: {}
623
+ },
624
+ chrdev: {
625
+ node: {
626
+ getattr: MEMFS.node_ops.getattr,
627
+ setattr: MEMFS.node_ops.setattr
628
+ },
629
+ stream: FS.chrdev_stream_ops
630
+ }
631
+ };
632
+ var node = FS.createNode(parent, name, mode, dev);
633
+ if (FS.isDir(node.mode)) {
634
+ node.node_ops = MEMFS.ops_table.dir.node;
635
+ node.stream_ops = MEMFS.ops_table.dir.stream;
636
+ node.contents = {};
637
+ } else if (FS.isFile(node.mode)) {
638
+ node.node_ops = MEMFS.ops_table.file.node;
639
+ node.stream_ops = MEMFS.ops_table.file.stream;
640
+ node.usedBytes = 0;
641
+ node.contents = null;
642
+ } else if (FS.isLink(node.mode)) {
643
+ node.node_ops = MEMFS.ops_table.link.node;
644
+ node.stream_ops = MEMFS.ops_table.link.stream;
645
+ } else if (FS.isChrdev(node.mode)) {
646
+ node.node_ops = MEMFS.ops_table.chrdev.node;
647
+ node.stream_ops = MEMFS.ops_table.chrdev.stream;
648
+ }
649
+ node.atime = node.mtime = node.ctime = Date.now();
650
+ if (parent) {
651
+ parent.contents[name] = node;
652
+ parent.atime = parent.mtime = parent.ctime = node.atime;
653
+ }
654
+ return node;
655
+ },
656
+ getFileDataAsTypedArray(node) {
657
+ if (!node.contents) return new Uint8Array(0);
658
+ if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes);
659
+ return new Uint8Array(node.contents);
660
+ },
661
+ expandFileStorage(node, newCapacity) {
662
+ var prevCapacity = node.contents ? node.contents.length : 0;
663
+ if (prevCapacity >= newCapacity) return;
664
+ newCapacity = Math.max(newCapacity, prevCapacity * (prevCapacity < 1024 * 1024 ? 2 : 1.125) >>> 0);
665
+ if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256);
666
+ var oldContents = node.contents;
667
+ node.contents = new Uint8Array(newCapacity);
668
+ if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0);
669
+ },
670
+ resizeFileStorage(node, newSize) {
671
+ if (node.usedBytes == newSize) return;
672
+ if (newSize == 0) {
673
+ node.contents = null;
674
+ node.usedBytes = 0;
675
+ } else {
676
+ var oldContents = node.contents;
677
+ node.contents = new Uint8Array(newSize);
678
+ if (oldContents) node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes)));
679
+ node.usedBytes = newSize;
680
+ }
681
+ },
682
+ node_ops: {
683
+ getattr(node) {
684
+ var attr = {};
685
+ attr.dev = FS.isChrdev(node.mode) ? node.id : 1;
686
+ attr.ino = node.id;
687
+ attr.mode = node.mode;
688
+ attr.nlink = 1;
689
+ attr.uid = 0;
690
+ attr.gid = 0;
691
+ attr.rdev = node.rdev;
692
+ if (FS.isDir(node.mode)) attr.size = 4096;
693
+ else if (FS.isFile(node.mode)) attr.size = node.usedBytes;
694
+ else if (FS.isLink(node.mode)) attr.size = node.link.length;
695
+ else attr.size = 0;
696
+ attr.atime = new Date(node.atime);
697
+ attr.mtime = new Date(node.mtime);
698
+ attr.ctime = new Date(node.ctime);
699
+ attr.blksize = 4096;
700
+ attr.blocks = Math.ceil(attr.size / attr.blksize);
701
+ return attr;
702
+ },
703
+ setattr(node, attr) {
704
+ for (const key of [
705
+ "mode",
706
+ "atime",
707
+ "mtime",
708
+ "ctime"
709
+ ]) if (attr[key] != null) node[key] = attr[key];
710
+ if (attr.size !== void 0) MEMFS.resizeFileStorage(node, attr.size);
711
+ },
712
+ lookup(parent, name) {
713
+ if (!MEMFS.doesNotExistError) {
714
+ MEMFS.doesNotExistError = new FS.ErrnoError(44);
715
+ MEMFS.doesNotExistError.stack = "<generic error, no stack>";
716
+ }
717
+ throw MEMFS.doesNotExistError;
718
+ },
719
+ mknod(parent, name, mode, dev) {
720
+ return MEMFS.createNode(parent, name, mode, dev);
721
+ },
722
+ rename(old_node, new_dir, new_name) {
723
+ var new_node;
724
+ try {
725
+ new_node = FS.lookupNode(new_dir, new_name);
726
+ } catch (e) {}
727
+ if (new_node) {
728
+ if (FS.isDir(old_node.mode)) for (var i in new_node.contents) throw new FS.ErrnoError(55);
729
+ FS.hashRemoveNode(new_node);
730
+ }
731
+ delete old_node.parent.contents[old_node.name];
732
+ new_dir.contents[new_name] = old_node;
733
+ old_node.name = new_name;
734
+ new_dir.ctime = new_dir.mtime = old_node.parent.ctime = old_node.parent.mtime = Date.now();
735
+ },
736
+ unlink(parent, name) {
737
+ delete parent.contents[name];
738
+ parent.ctime = parent.mtime = Date.now();
739
+ },
740
+ rmdir(parent, name) {
741
+ for (var i in FS.lookupNode(parent, name).contents) throw new FS.ErrnoError(55);
742
+ delete parent.contents[name];
743
+ parent.ctime = parent.mtime = Date.now();
744
+ },
745
+ readdir(node) {
746
+ return [
747
+ ".",
748
+ "..",
749
+ ...Object.keys(node.contents)
750
+ ];
751
+ },
752
+ symlink(parent, newname, oldpath) {
753
+ var node = MEMFS.createNode(parent, newname, 41471, 0);
754
+ node.link = oldpath;
755
+ return node;
756
+ },
757
+ readlink(node) {
758
+ if (!FS.isLink(node.mode)) throw new FS.ErrnoError(28);
759
+ return node.link;
760
+ }
761
+ },
762
+ stream_ops: {
763
+ read(stream, buffer, offset, length, position) {
764
+ var contents = stream.node.contents;
765
+ if (position >= stream.node.usedBytes) return 0;
766
+ var size = Math.min(stream.node.usedBytes - position, length);
767
+ if (size > 8 && contents.subarray) buffer.set(contents.subarray(position, position + size), offset);
768
+ else for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i];
769
+ return size;
770
+ },
771
+ write(stream, buffer, offset, length, position, canOwn) {
772
+ if (buffer.buffer === HEAP8.buffer) canOwn = false;
773
+ if (!length) return 0;
774
+ var node = stream.node;
775
+ node.mtime = node.ctime = Date.now();
776
+ if (buffer.subarray && (!node.contents || node.contents.subarray)) {
777
+ if (canOwn) {
778
+ node.contents = buffer.subarray(offset, offset + length);
779
+ node.usedBytes = length;
780
+ return length;
781
+ } else if (node.usedBytes === 0 && position === 0) {
782
+ node.contents = buffer.slice(offset, offset + length);
783
+ node.usedBytes = length;
784
+ return length;
785
+ } else if (position + length <= node.usedBytes) {
786
+ node.contents.set(buffer.subarray(offset, offset + length), position);
787
+ return length;
788
+ }
789
+ }
790
+ MEMFS.expandFileStorage(node, position + length);
791
+ if (node.contents.subarray && buffer.subarray) node.contents.set(buffer.subarray(offset, offset + length), position);
792
+ else for (var i = 0; i < length; i++) node.contents[position + i] = buffer[offset + i];
793
+ node.usedBytes = Math.max(node.usedBytes, position + length);
794
+ return length;
795
+ },
796
+ llseek(stream, offset, whence) {
797
+ var position = offset;
798
+ if (whence === 1) position += stream.position;
799
+ else if (whence === 2) {
800
+ if (FS.isFile(stream.node.mode)) position += stream.node.usedBytes;
801
+ }
802
+ if (position < 0) throw new FS.ErrnoError(28);
803
+ return position;
804
+ },
805
+ mmap(stream, length, position, prot, flags) {
806
+ if (!FS.isFile(stream.node.mode)) throw new FS.ErrnoError(43);
807
+ var ptr;
808
+ var allocated;
809
+ var contents = stream.node.contents;
810
+ if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) {
811
+ allocated = false;
812
+ ptr = contents.byteOffset;
813
+ } else {
814
+ allocated = true;
815
+ ptr = mmapAlloc(length);
816
+ if (!ptr) throw new FS.ErrnoError(48);
817
+ if (contents) {
818
+ if (position > 0 || position + length < contents.length) if (contents.subarray) contents = contents.subarray(position, position + length);
819
+ else contents = Array.prototype.slice.call(contents, position, position + length);
820
+ HEAP8.set(contents, ptr >>> 0);
821
+ }
822
+ }
823
+ return {
824
+ ptr,
825
+ allocated
826
+ };
827
+ },
828
+ msync(stream, buffer, offset, length, mmapFlags) {
829
+ MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false);
830
+ return 0;
831
+ }
832
+ }
833
+ };
834
+ var FS_modeStringToFlags = (str) => {
835
+ var flags = {
836
+ r: 0,
837
+ "r+": 2,
838
+ w: 577,
839
+ "w+": 578,
840
+ a: 1089,
841
+ "a+": 1090
842
+ }[str];
843
+ if (typeof flags == "undefined") throw new Error(`Unknown file open mode: ${str}`);
844
+ return flags;
845
+ };
846
+ var FS_getMode = (canRead, canWrite) => {
847
+ var mode = 0;
848
+ if (canRead) mode |= 365;
849
+ if (canWrite) mode |= 146;
850
+ return mode;
851
+ };
852
+ var asyncLoad = async (url) => {
853
+ var arrayBuffer = await readAsync(url);
854
+ return new Uint8Array(arrayBuffer);
855
+ };
856
+ var FS_createDataFile = (...args) => FS.createDataFile(...args);
857
+ var getUniqueRunDependency = (id) => id;
858
+ var runDependencies = 0;
859
+ var dependenciesFulfilled = null;
860
+ var removeRunDependency = (id) => {
861
+ runDependencies--;
862
+ Module["monitorRunDependencies"]?.(runDependencies);
863
+ if (runDependencies == 0) {
864
+ if (dependenciesFulfilled) {
865
+ var callback = dependenciesFulfilled;
866
+ dependenciesFulfilled = null;
867
+ callback();
868
+ }
869
+ }
870
+ };
871
+ var addRunDependency = (id) => {
872
+ runDependencies++;
873
+ Module["monitorRunDependencies"]?.(runDependencies);
874
+ };
875
+ var preloadPlugins = [];
876
+ var FS_handledByPreloadPlugin = async (byteArray, fullname) => {
877
+ if (typeof Browser != "undefined") Browser.init();
878
+ for (var plugin of preloadPlugins) if (plugin["canHandle"](fullname)) return plugin["handle"](byteArray, fullname);
879
+ return byteArray;
880
+ };
881
+ var FS_preloadFile = async (parent, name, url, canRead, canWrite, dontCreateFile, canOwn, preFinish) => {
882
+ var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;
883
+ var dep = getUniqueRunDependency(`cp ${fullname}`);
884
+ addRunDependency(dep);
885
+ try {
886
+ var byteArray = url;
887
+ if (typeof url == "string") byteArray = await asyncLoad(url);
888
+ byteArray = await FS_handledByPreloadPlugin(byteArray, fullname);
889
+ preFinish?.();
890
+ if (!dontCreateFile) FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);
891
+ } finally {
892
+ removeRunDependency(dep);
893
+ }
894
+ };
895
+ var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => {
896
+ FS_preloadFile(parent, name, url, canRead, canWrite, dontCreateFile, canOwn, preFinish).then(onload).catch(onerror);
897
+ };
898
+ var FS = {
899
+ root: null,
900
+ mounts: [],
901
+ devices: {},
902
+ streams: [],
903
+ nextInode: 1,
904
+ nameTable: null,
905
+ currentPath: "/",
906
+ initialized: false,
907
+ ignorePermissions: true,
908
+ filesystems: null,
909
+ syncFSRequests: 0,
910
+ ErrnoError: class {
911
+ name = "ErrnoError";
912
+ constructor(errno) {
913
+ this.errno = errno;
914
+ }
915
+ },
916
+ FSStream: class {
917
+ shared = {};
918
+ get object() {
919
+ return this.node;
920
+ }
921
+ set object(val) {
922
+ this.node = val;
923
+ }
924
+ get isRead() {
925
+ return (this.flags & 2097155) !== 1;
926
+ }
927
+ get isWrite() {
928
+ return (this.flags & 2097155) !== 0;
929
+ }
930
+ get isAppend() {
931
+ return this.flags & 1024;
932
+ }
933
+ get flags() {
934
+ return this.shared.flags;
935
+ }
936
+ set flags(val) {
937
+ this.shared.flags = val;
938
+ }
939
+ get position() {
940
+ return this.shared.position;
941
+ }
942
+ set position(val) {
943
+ this.shared.position = val;
944
+ }
945
+ },
946
+ FSNode: class {
947
+ node_ops = {};
948
+ stream_ops = {};
949
+ readMode = 365;
950
+ writeMode = 146;
951
+ mounted = null;
952
+ constructor(parent, name, mode, rdev) {
953
+ if (!parent) parent = this;
954
+ this.parent = parent;
955
+ this.mount = parent.mount;
956
+ this.id = FS.nextInode++;
957
+ this.name = name;
958
+ this.mode = mode;
959
+ this.rdev = rdev;
960
+ this.atime = this.mtime = this.ctime = Date.now();
961
+ }
962
+ get read() {
963
+ return (this.mode & this.readMode) === this.readMode;
964
+ }
965
+ set read(val) {
966
+ val ? this.mode |= this.readMode : this.mode &= ~this.readMode;
967
+ }
968
+ get write() {
969
+ return (this.mode & this.writeMode) === this.writeMode;
970
+ }
971
+ set write(val) {
972
+ val ? this.mode |= this.writeMode : this.mode &= ~this.writeMode;
973
+ }
974
+ get isFolder() {
975
+ return FS.isDir(this.mode);
976
+ }
977
+ get isDevice() {
978
+ return FS.isChrdev(this.mode);
979
+ }
980
+ },
981
+ lookupPath(path, opts = {}) {
982
+ if (!path) throw new FS.ErrnoError(44);
983
+ opts.follow_mount ??= true;
984
+ if (!PATH.isAbs(path)) path = FS.cwd() + "/" + path;
985
+ linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) {
986
+ var parts = path.split("/").filter((p) => !!p);
987
+ var current = FS.root;
988
+ var current_path = "/";
989
+ for (var i = 0; i < parts.length; i++) {
990
+ var islast = i === parts.length - 1;
991
+ if (islast && opts.parent) break;
992
+ if (parts[i] === ".") continue;
993
+ if (parts[i] === "..") {
994
+ current_path = PATH.dirname(current_path);
995
+ if (FS.isRoot(current)) {
996
+ path = current_path + "/" + parts.slice(i + 1).join("/");
997
+ nlinks--;
998
+ continue linkloop;
999
+ } else current = current.parent;
1000
+ continue;
1001
+ }
1002
+ current_path = PATH.join2(current_path, parts[i]);
1003
+ try {
1004
+ current = FS.lookupNode(current, parts[i]);
1005
+ } catch (e) {
1006
+ if (e?.errno === 44 && islast && opts.noent_okay) return { path: current_path };
1007
+ throw e;
1008
+ }
1009
+ if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) current = current.mounted.root;
1010
+ if (FS.isLink(current.mode) && (!islast || opts.follow)) {
1011
+ if (!current.node_ops.readlink) throw new FS.ErrnoError(52);
1012
+ var link = current.node_ops.readlink(current);
1013
+ if (!PATH.isAbs(link)) link = PATH.dirname(current_path) + "/" + link;
1014
+ path = link + "/" + parts.slice(i + 1).join("/");
1015
+ continue linkloop;
1016
+ }
1017
+ }
1018
+ return {
1019
+ path: current_path,
1020
+ node: current
1021
+ };
1022
+ }
1023
+ throw new FS.ErrnoError(32);
1024
+ },
1025
+ getPath(node) {
1026
+ var path;
1027
+ while (true) {
1028
+ if (FS.isRoot(node)) {
1029
+ var mount = node.mount.mountpoint;
1030
+ if (!path) return mount;
1031
+ return mount[mount.length - 1] !== "/" ? `${mount}/${path}` : mount + path;
1032
+ }
1033
+ path = path ? `${node.name}/${path}` : node.name;
1034
+ node = node.parent;
1035
+ }
1036
+ },
1037
+ hashName(parentid, name) {
1038
+ var hash = 0;
1039
+ for (var i = 0; i < name.length; i++) hash = (hash << 5) - hash + name.charCodeAt(i) | 0;
1040
+ return (parentid + hash >>> 0) % FS.nameTable.length;
1041
+ },
1042
+ hashAddNode(node) {
1043
+ var hash = FS.hashName(node.parent.id, node.name);
1044
+ node.name_next = FS.nameTable[hash];
1045
+ FS.nameTable[hash] = node;
1046
+ },
1047
+ hashRemoveNode(node) {
1048
+ var hash = FS.hashName(node.parent.id, node.name);
1049
+ if (FS.nameTable[hash] === node) FS.nameTable[hash] = node.name_next;
1050
+ else {
1051
+ var current = FS.nameTable[hash];
1052
+ while (current) {
1053
+ if (current.name_next === node) {
1054
+ current.name_next = node.name_next;
1055
+ break;
1056
+ }
1057
+ current = current.name_next;
1058
+ }
1059
+ }
1060
+ },
1061
+ lookupNode(parent, name) {
1062
+ var errCode = FS.mayLookup(parent);
1063
+ if (errCode) throw new FS.ErrnoError(errCode);
1064
+ var hash = FS.hashName(parent.id, name);
1065
+ for (var node = FS.nameTable[hash]; node; node = node.name_next) {
1066
+ var nodeName = node.name;
1067
+ if (node.parent.id === parent.id && nodeName === name) return node;
1068
+ }
1069
+ return FS.lookup(parent, name);
1070
+ },
1071
+ createNode(parent, name, mode, rdev) {
1072
+ var node = new FS.FSNode(parent, name, mode, rdev);
1073
+ FS.hashAddNode(node);
1074
+ return node;
1075
+ },
1076
+ destroyNode(node) {
1077
+ FS.hashRemoveNode(node);
1078
+ },
1079
+ isRoot(node) {
1080
+ return node === node.parent;
1081
+ },
1082
+ isMountpoint(node) {
1083
+ return !!node.mounted;
1084
+ },
1085
+ isFile(mode) {
1086
+ return (mode & 61440) === 32768;
1087
+ },
1088
+ isDir(mode) {
1089
+ return (mode & 61440) === 16384;
1090
+ },
1091
+ isLink(mode) {
1092
+ return (mode & 61440) === 40960;
1093
+ },
1094
+ isChrdev(mode) {
1095
+ return (mode & 61440) === 8192;
1096
+ },
1097
+ isBlkdev(mode) {
1098
+ return (mode & 61440) === 24576;
1099
+ },
1100
+ isFIFO(mode) {
1101
+ return (mode & 61440) === 4096;
1102
+ },
1103
+ isSocket(mode) {
1104
+ return (mode & 49152) === 49152;
1105
+ },
1106
+ flagsToPermissionString(flag) {
1107
+ var perms = [
1108
+ "r",
1109
+ "w",
1110
+ "rw"
1111
+ ][flag & 3];
1112
+ if (flag & 512) perms += "w";
1113
+ return perms;
1114
+ },
1115
+ nodePermissions(node, perms) {
1116
+ if (FS.ignorePermissions) return 0;
1117
+ if (perms.includes("r") && !(node.mode & 292)) return 2;
1118
+ if (perms.includes("w") && !(node.mode & 146)) return 2;
1119
+ if (perms.includes("x") && !(node.mode & 73)) return 2;
1120
+ return 0;
1121
+ },
1122
+ mayLookup(dir) {
1123
+ if (!FS.isDir(dir.mode)) return 54;
1124
+ var errCode = FS.nodePermissions(dir, "x");
1125
+ if (errCode) return errCode;
1126
+ if (!dir.node_ops.lookup) return 2;
1127
+ return 0;
1128
+ },
1129
+ mayCreate(dir, name) {
1130
+ if (!FS.isDir(dir.mode)) return 54;
1131
+ try {
1132
+ FS.lookupNode(dir, name);
1133
+ return 20;
1134
+ } catch (e) {}
1135
+ return FS.nodePermissions(dir, "wx");
1136
+ },
1137
+ mayDelete(dir, name, isdir) {
1138
+ var node;
1139
+ try {
1140
+ node = FS.lookupNode(dir, name);
1141
+ } catch (e) {
1142
+ return e.errno;
1143
+ }
1144
+ var errCode = FS.nodePermissions(dir, "wx");
1145
+ if (errCode) return errCode;
1146
+ if (isdir) {
1147
+ if (!FS.isDir(node.mode)) return 54;
1148
+ if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) return 10;
1149
+ } else if (FS.isDir(node.mode)) return 31;
1150
+ return 0;
1151
+ },
1152
+ mayOpen(node, flags) {
1153
+ if (!node) return 44;
1154
+ if (FS.isLink(node.mode)) return 32;
1155
+ var mode = FS.flagsToPermissionString(flags);
1156
+ if (FS.isDir(node.mode)) {
1157
+ if (mode !== "r" || flags & 576) return 31;
1158
+ }
1159
+ return FS.nodePermissions(node, mode);
1160
+ },
1161
+ checkOpExists(op, err$1) {
1162
+ if (!op) throw new FS.ErrnoError(err$1);
1163
+ return op;
1164
+ },
1165
+ MAX_OPEN_FDS: 4096,
1166
+ nextfd() {
1167
+ for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) if (!FS.streams[fd]) return fd;
1168
+ throw new FS.ErrnoError(33);
1169
+ },
1170
+ getStreamChecked(fd) {
1171
+ var stream = FS.getStream(fd);
1172
+ if (!stream) throw new FS.ErrnoError(8);
1173
+ return stream;
1174
+ },
1175
+ getStream: (fd) => FS.streams[fd],
1176
+ createStream(stream, fd = -1) {
1177
+ stream = Object.assign(new FS.FSStream(), stream);
1178
+ if (fd == -1) fd = FS.nextfd();
1179
+ stream.fd = fd;
1180
+ FS.streams[fd] = stream;
1181
+ return stream;
1182
+ },
1183
+ closeStream(fd) {
1184
+ FS.streams[fd] = null;
1185
+ },
1186
+ dupStream(origStream, fd = -1) {
1187
+ var stream = FS.createStream(origStream, fd);
1188
+ stream.stream_ops?.dup?.(stream);
1189
+ return stream;
1190
+ },
1191
+ doSetAttr(stream, node, attr) {
1192
+ var setattr = stream?.stream_ops.setattr;
1193
+ var arg = setattr ? stream : node;
1194
+ setattr ??= node.node_ops.setattr;
1195
+ FS.checkOpExists(setattr, 63);
1196
+ setattr(arg, attr);
1197
+ },
1198
+ chrdev_stream_ops: {
1199
+ open(stream) {
1200
+ stream.stream_ops = FS.getDevice(stream.node.rdev).stream_ops;
1201
+ stream.stream_ops.open?.(stream);
1202
+ },
1203
+ llseek() {
1204
+ throw new FS.ErrnoError(70);
1205
+ }
1206
+ },
1207
+ major: (dev) => dev >> 8,
1208
+ minor: (dev) => dev & 255,
1209
+ makedev: (ma, mi) => ma << 8 | mi,
1210
+ registerDevice(dev, ops) {
1211
+ FS.devices[dev] = { stream_ops: ops };
1212
+ },
1213
+ getDevice: (dev) => FS.devices[dev],
1214
+ getMounts(mount) {
1215
+ var mounts = [];
1216
+ var check = [mount];
1217
+ while (check.length) {
1218
+ var m = check.pop();
1219
+ mounts.push(m);
1220
+ check.push(...m.mounts);
1221
+ }
1222
+ return mounts;
1223
+ },
1224
+ syncfs(populate, callback) {
1225
+ if (typeof populate == "function") {
1226
+ callback = populate;
1227
+ populate = false;
1228
+ }
1229
+ FS.syncFSRequests++;
1230
+ if (FS.syncFSRequests > 1) err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);
1231
+ var mounts = FS.getMounts(FS.root.mount);
1232
+ var completed = 0;
1233
+ function doCallback(errCode) {
1234
+ FS.syncFSRequests--;
1235
+ return callback(errCode);
1236
+ }
1237
+ function done(errCode) {
1238
+ if (errCode) {
1239
+ if (!done.errored) {
1240
+ done.errored = true;
1241
+ return doCallback(errCode);
1242
+ }
1243
+ return;
1244
+ }
1245
+ if (++completed >= mounts.length) doCallback(null);
1246
+ }
1247
+ for (var mount of mounts) if (mount.type.syncfs) mount.type.syncfs(mount, populate, done);
1248
+ else done(null);
1249
+ },
1250
+ mount(type, opts, mountpoint) {
1251
+ var root = mountpoint === "/";
1252
+ var pseudo = !mountpoint;
1253
+ var node;
1254
+ if (root && FS.root) throw new FS.ErrnoError(10);
1255
+ else if (!root && !pseudo) {
1256
+ var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
1257
+ mountpoint = lookup.path;
1258
+ node = lookup.node;
1259
+ if (FS.isMountpoint(node)) throw new FS.ErrnoError(10);
1260
+ if (!FS.isDir(node.mode)) throw new FS.ErrnoError(54);
1261
+ }
1262
+ var mount = {
1263
+ type,
1264
+ opts,
1265
+ mountpoint,
1266
+ mounts: []
1267
+ };
1268
+ var mountRoot = type.mount(mount);
1269
+ mountRoot.mount = mount;
1270
+ mount.root = mountRoot;
1271
+ if (root) FS.root = mountRoot;
1272
+ else if (node) {
1273
+ node.mounted = mount;
1274
+ if (node.mount) node.mount.mounts.push(mount);
1275
+ }
1276
+ return mountRoot;
1277
+ },
1278
+ unmount(mountpoint) {
1279
+ var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
1280
+ if (!FS.isMountpoint(lookup.node)) throw new FS.ErrnoError(28);
1281
+ var node = lookup.node;
1282
+ var mount = node.mounted;
1283
+ var mounts = FS.getMounts(mount);
1284
+ for (var [hash, current] of Object.entries(FS.nameTable)) while (current) {
1285
+ var next = current.name_next;
1286
+ if (mounts.includes(current.mount)) FS.destroyNode(current);
1287
+ current = next;
1288
+ }
1289
+ node.mounted = null;
1290
+ var idx = node.mount.mounts.indexOf(mount);
1291
+ node.mount.mounts.splice(idx, 1);
1292
+ },
1293
+ lookup(parent, name) {
1294
+ return parent.node_ops.lookup(parent, name);
1295
+ },
1296
+ mknod(path, mode, dev) {
1297
+ var parent = FS.lookupPath(path, { parent: true }).node;
1298
+ var name = PATH.basename(path);
1299
+ if (!name) throw new FS.ErrnoError(28);
1300
+ if (name === "." || name === "..") throw new FS.ErrnoError(20);
1301
+ var errCode = FS.mayCreate(parent, name);
1302
+ if (errCode) throw new FS.ErrnoError(errCode);
1303
+ if (!parent.node_ops.mknod) throw new FS.ErrnoError(63);
1304
+ return parent.node_ops.mknod(parent, name, mode, dev);
1305
+ },
1306
+ statfs(path) {
1307
+ return FS.statfsNode(FS.lookupPath(path, { follow: true }).node);
1308
+ },
1309
+ statfsStream(stream) {
1310
+ return FS.statfsNode(stream.node);
1311
+ },
1312
+ statfsNode(node) {
1313
+ var rtn = {
1314
+ bsize: 4096,
1315
+ frsize: 4096,
1316
+ blocks: 1e6,
1317
+ bfree: 5e5,
1318
+ bavail: 5e5,
1319
+ files: FS.nextInode,
1320
+ ffree: FS.nextInode - 1,
1321
+ fsid: 42,
1322
+ flags: 2,
1323
+ namelen: 255
1324
+ };
1325
+ if (node.node_ops.statfs) Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root));
1326
+ return rtn;
1327
+ },
1328
+ create(path, mode = 438) {
1329
+ mode &= 4095;
1330
+ mode |= 32768;
1331
+ return FS.mknod(path, mode, 0);
1332
+ },
1333
+ mkdir(path, mode = 511) {
1334
+ mode &= 1023;
1335
+ mode |= 16384;
1336
+ return FS.mknod(path, mode, 0);
1337
+ },
1338
+ mkdirTree(path, mode) {
1339
+ var dirs = path.split("/");
1340
+ var d = "";
1341
+ for (var dir of dirs) {
1342
+ if (!dir) continue;
1343
+ if (d || PATH.isAbs(path)) d += "/";
1344
+ d += dir;
1345
+ try {
1346
+ FS.mkdir(d, mode);
1347
+ } catch (e) {
1348
+ if (e.errno != 20) throw e;
1349
+ }
1350
+ }
1351
+ },
1352
+ mkdev(path, mode, dev) {
1353
+ if (typeof dev == "undefined") {
1354
+ dev = mode;
1355
+ mode = 438;
1356
+ }
1357
+ mode |= 8192;
1358
+ return FS.mknod(path, mode, dev);
1359
+ },
1360
+ symlink(oldpath, newpath) {
1361
+ if (!PATH_FS.resolve(oldpath)) throw new FS.ErrnoError(44);
1362
+ var parent = FS.lookupPath(newpath, { parent: true }).node;
1363
+ if (!parent) throw new FS.ErrnoError(44);
1364
+ var newname = PATH.basename(newpath);
1365
+ var errCode = FS.mayCreate(parent, newname);
1366
+ if (errCode) throw new FS.ErrnoError(errCode);
1367
+ if (!parent.node_ops.symlink) throw new FS.ErrnoError(63);
1368
+ return parent.node_ops.symlink(parent, newname, oldpath);
1369
+ },
1370
+ rename(old_path, new_path) {
1371
+ var old_dirname = PATH.dirname(old_path);
1372
+ var new_dirname = PATH.dirname(new_path);
1373
+ var old_name = PATH.basename(old_path);
1374
+ var new_name = PATH.basename(new_path);
1375
+ var lookup = FS.lookupPath(old_path, { parent: true }), old_dir = lookup.node, new_dir;
1376
+ lookup = FS.lookupPath(new_path, { parent: true });
1377
+ new_dir = lookup.node;
1378
+ if (!old_dir || !new_dir) throw new FS.ErrnoError(44);
1379
+ if (old_dir.mount !== new_dir.mount) throw new FS.ErrnoError(75);
1380
+ var old_node = FS.lookupNode(old_dir, old_name);
1381
+ var relative = PATH_FS.relative(old_path, new_dirname);
1382
+ if (relative.charAt(0) !== ".") throw new FS.ErrnoError(28);
1383
+ relative = PATH_FS.relative(new_path, old_dirname);
1384
+ if (relative.charAt(0) !== ".") throw new FS.ErrnoError(55);
1385
+ var new_node;
1386
+ try {
1387
+ new_node = FS.lookupNode(new_dir, new_name);
1388
+ } catch (e) {}
1389
+ if (old_node === new_node) return;
1390
+ var isdir = FS.isDir(old_node.mode);
1391
+ var errCode = FS.mayDelete(old_dir, old_name, isdir);
1392
+ if (errCode) throw new FS.ErrnoError(errCode);
1393
+ errCode = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name);
1394
+ if (errCode) throw new FS.ErrnoError(errCode);
1395
+ if (!old_dir.node_ops.rename) throw new FS.ErrnoError(63);
1396
+ if (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node)) throw new FS.ErrnoError(10);
1397
+ if (new_dir !== old_dir) {
1398
+ errCode = FS.nodePermissions(old_dir, "w");
1399
+ if (errCode) throw new FS.ErrnoError(errCode);
1400
+ }
1401
+ FS.hashRemoveNode(old_node);
1402
+ try {
1403
+ old_dir.node_ops.rename(old_node, new_dir, new_name);
1404
+ old_node.parent = new_dir;
1405
+ } catch (e) {
1406
+ throw e;
1407
+ } finally {
1408
+ FS.hashAddNode(old_node);
1409
+ }
1410
+ },
1411
+ rmdir(path) {
1412
+ var parent = FS.lookupPath(path, { parent: true }).node;
1413
+ var name = PATH.basename(path);
1414
+ var node = FS.lookupNode(parent, name);
1415
+ var errCode = FS.mayDelete(parent, name, true);
1416
+ if (errCode) throw new FS.ErrnoError(errCode);
1417
+ if (!parent.node_ops.rmdir) throw new FS.ErrnoError(63);
1418
+ if (FS.isMountpoint(node)) throw new FS.ErrnoError(10);
1419
+ parent.node_ops.rmdir(parent, name);
1420
+ FS.destroyNode(node);
1421
+ },
1422
+ readdir(path) {
1423
+ var node = FS.lookupPath(path, { follow: true }).node;
1424
+ return FS.checkOpExists(node.node_ops.readdir, 54)(node);
1425
+ },
1426
+ unlink(path) {
1427
+ var parent = FS.lookupPath(path, { parent: true }).node;
1428
+ if (!parent) throw new FS.ErrnoError(44);
1429
+ var name = PATH.basename(path);
1430
+ var node = FS.lookupNode(parent, name);
1431
+ var errCode = FS.mayDelete(parent, name, false);
1432
+ if (errCode) throw new FS.ErrnoError(errCode);
1433
+ if (!parent.node_ops.unlink) throw new FS.ErrnoError(63);
1434
+ if (FS.isMountpoint(node)) throw new FS.ErrnoError(10);
1435
+ parent.node_ops.unlink(parent, name);
1436
+ FS.destroyNode(node);
1437
+ },
1438
+ readlink(path) {
1439
+ var link = FS.lookupPath(path).node;
1440
+ if (!link) throw new FS.ErrnoError(44);
1441
+ if (!link.node_ops.readlink) throw new FS.ErrnoError(28);
1442
+ return link.node_ops.readlink(link);
1443
+ },
1444
+ stat(path, dontFollow) {
1445
+ var node = FS.lookupPath(path, { follow: !dontFollow }).node;
1446
+ return FS.checkOpExists(node.node_ops.getattr, 63)(node);
1447
+ },
1448
+ fstat(fd) {
1449
+ var stream = FS.getStreamChecked(fd);
1450
+ var node = stream.node;
1451
+ var getattr = stream.stream_ops.getattr;
1452
+ var arg = getattr ? stream : node;
1453
+ getattr ??= node.node_ops.getattr;
1454
+ FS.checkOpExists(getattr, 63);
1455
+ return getattr(arg);
1456
+ },
1457
+ lstat(path) {
1458
+ return FS.stat(path, true);
1459
+ },
1460
+ doChmod(stream, node, mode, dontFollow) {
1461
+ FS.doSetAttr(stream, node, {
1462
+ mode: mode & 4095 | node.mode & -4096,
1463
+ ctime: Date.now(),
1464
+ dontFollow
1465
+ });
1466
+ },
1467
+ chmod(path, mode, dontFollow) {
1468
+ var node;
1469
+ if (typeof path == "string") node = FS.lookupPath(path, { follow: !dontFollow }).node;
1470
+ else node = path;
1471
+ FS.doChmod(null, node, mode, dontFollow);
1472
+ },
1473
+ lchmod(path, mode) {
1474
+ FS.chmod(path, mode, true);
1475
+ },
1476
+ fchmod(fd, mode) {
1477
+ var stream = FS.getStreamChecked(fd);
1478
+ FS.doChmod(stream, stream.node, mode, false);
1479
+ },
1480
+ doChown(stream, node, dontFollow) {
1481
+ FS.doSetAttr(stream, node, {
1482
+ timestamp: Date.now(),
1483
+ dontFollow
1484
+ });
1485
+ },
1486
+ chown(path, uid, gid, dontFollow) {
1487
+ var node;
1488
+ if (typeof path == "string") node = FS.lookupPath(path, { follow: !dontFollow }).node;
1489
+ else node = path;
1490
+ FS.doChown(null, node, dontFollow);
1491
+ },
1492
+ lchown(path, uid, gid) {
1493
+ FS.chown(path, uid, gid, true);
1494
+ },
1495
+ fchown(fd, uid, gid) {
1496
+ var stream = FS.getStreamChecked(fd);
1497
+ FS.doChown(stream, stream.node, false);
1498
+ },
1499
+ doTruncate(stream, node, len) {
1500
+ if (FS.isDir(node.mode)) throw new FS.ErrnoError(31);
1501
+ if (!FS.isFile(node.mode)) throw new FS.ErrnoError(28);
1502
+ var errCode = FS.nodePermissions(node, "w");
1503
+ if (errCode) throw new FS.ErrnoError(errCode);
1504
+ FS.doSetAttr(stream, node, {
1505
+ size: len,
1506
+ timestamp: Date.now()
1507
+ });
1508
+ },
1509
+ truncate(path, len) {
1510
+ if (len < 0) throw new FS.ErrnoError(28);
1511
+ var node;
1512
+ if (typeof path == "string") node = FS.lookupPath(path, { follow: true }).node;
1513
+ else node = path;
1514
+ FS.doTruncate(null, node, len);
1515
+ },
1516
+ ftruncate(fd, len) {
1517
+ var stream = FS.getStreamChecked(fd);
1518
+ if (len < 0 || (stream.flags & 2097155) === 0) throw new FS.ErrnoError(28);
1519
+ FS.doTruncate(stream, stream.node, len);
1520
+ },
1521
+ utime(path, atime, mtime) {
1522
+ var node = FS.lookupPath(path, { follow: true }).node;
1523
+ FS.checkOpExists(node.node_ops.setattr, 63)(node, {
1524
+ atime,
1525
+ mtime
1526
+ });
1527
+ },
1528
+ open(path, flags, mode = 438) {
1529
+ if (path === "") throw new FS.ErrnoError(44);
1530
+ flags = typeof flags == "string" ? FS_modeStringToFlags(flags) : flags;
1531
+ if (flags & 64) mode = mode & 4095 | 32768;
1532
+ else mode = 0;
1533
+ var node;
1534
+ var isDirPath;
1535
+ if (typeof path == "object") node = path;
1536
+ else {
1537
+ isDirPath = path.endsWith("/");
1538
+ var lookup = FS.lookupPath(path, {
1539
+ follow: !(flags & 131072),
1540
+ noent_okay: true
1541
+ });
1542
+ node = lookup.node;
1543
+ path = lookup.path;
1544
+ }
1545
+ var created = false;
1546
+ if (flags & 64) if (node) {
1547
+ if (flags & 128) throw new FS.ErrnoError(20);
1548
+ } else if (isDirPath) throw new FS.ErrnoError(31);
1549
+ else {
1550
+ node = FS.mknod(path, mode | 511, 0);
1551
+ created = true;
1552
+ }
1553
+ if (!node) throw new FS.ErrnoError(44);
1554
+ if (FS.isChrdev(node.mode)) flags &= -513;
1555
+ if (flags & 65536 && !FS.isDir(node.mode)) throw new FS.ErrnoError(54);
1556
+ if (!created) {
1557
+ var errCode = FS.mayOpen(node, flags);
1558
+ if (errCode) throw new FS.ErrnoError(errCode);
1559
+ }
1560
+ if (flags & 512 && !created) FS.truncate(node, 0);
1561
+ flags &= -131713;
1562
+ var stream = FS.createStream({
1563
+ node,
1564
+ path: FS.getPath(node),
1565
+ flags,
1566
+ seekable: true,
1567
+ position: 0,
1568
+ stream_ops: node.stream_ops,
1569
+ ungotten: [],
1570
+ error: false
1571
+ });
1572
+ if (stream.stream_ops.open) stream.stream_ops.open(stream);
1573
+ if (created) FS.chmod(node, mode & 511);
1574
+ return stream;
1575
+ },
1576
+ close(stream) {
1577
+ if (FS.isClosed(stream)) throw new FS.ErrnoError(8);
1578
+ if (stream.getdents) stream.getdents = null;
1579
+ try {
1580
+ if (stream.stream_ops.close) stream.stream_ops.close(stream);
1581
+ } catch (e) {
1582
+ throw e;
1583
+ } finally {
1584
+ FS.closeStream(stream.fd);
1585
+ }
1586
+ stream.fd = null;
1587
+ },
1588
+ isClosed(stream) {
1589
+ return stream.fd === null;
1590
+ },
1591
+ llseek(stream, offset, whence) {
1592
+ if (FS.isClosed(stream)) throw new FS.ErrnoError(8);
1593
+ if (!stream.seekable || !stream.stream_ops.llseek) throw new FS.ErrnoError(70);
1594
+ if (whence != 0 && whence != 1 && whence != 2) throw new FS.ErrnoError(28);
1595
+ stream.position = stream.stream_ops.llseek(stream, offset, whence);
1596
+ stream.ungotten = [];
1597
+ return stream.position;
1598
+ },
1599
+ read(stream, buffer, offset, length, position) {
1600
+ if (length < 0 || position < 0) throw new FS.ErrnoError(28);
1601
+ if (FS.isClosed(stream)) throw new FS.ErrnoError(8);
1602
+ if ((stream.flags & 2097155) === 1) throw new FS.ErrnoError(8);
1603
+ if (FS.isDir(stream.node.mode)) throw new FS.ErrnoError(31);
1604
+ if (!stream.stream_ops.read) throw new FS.ErrnoError(28);
1605
+ var seeking = typeof position != "undefined";
1606
+ if (!seeking) position = stream.position;
1607
+ else if (!stream.seekable) throw new FS.ErrnoError(70);
1608
+ var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position);
1609
+ if (!seeking) stream.position += bytesRead;
1610
+ return bytesRead;
1611
+ },
1612
+ write(stream, buffer, offset, length, position, canOwn) {
1613
+ if (length < 0 || position < 0) throw new FS.ErrnoError(28);
1614
+ if (FS.isClosed(stream)) throw new FS.ErrnoError(8);
1615
+ if ((stream.flags & 2097155) === 0) throw new FS.ErrnoError(8);
1616
+ if (FS.isDir(stream.node.mode)) throw new FS.ErrnoError(31);
1617
+ if (!stream.stream_ops.write) throw new FS.ErrnoError(28);
1618
+ if (stream.seekable && stream.flags & 1024) FS.llseek(stream, 0, 2);
1619
+ var seeking = typeof position != "undefined";
1620
+ if (!seeking) position = stream.position;
1621
+ else if (!stream.seekable) throw new FS.ErrnoError(70);
1622
+ var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn);
1623
+ if (!seeking) stream.position += bytesWritten;
1624
+ return bytesWritten;
1625
+ },
1626
+ mmap(stream, length, position, prot, flags) {
1627
+ if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) throw new FS.ErrnoError(2);
1628
+ if ((stream.flags & 2097155) === 1) throw new FS.ErrnoError(2);
1629
+ if (!stream.stream_ops.mmap) throw new FS.ErrnoError(43);
1630
+ if (!length) throw new FS.ErrnoError(28);
1631
+ return stream.stream_ops.mmap(stream, length, position, prot, flags);
1632
+ },
1633
+ msync(stream, buffer, offset, length, mmapFlags) {
1634
+ if (!stream.stream_ops.msync) return 0;
1635
+ return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags);
1636
+ },
1637
+ ioctl(stream, cmd, arg) {
1638
+ if (!stream.stream_ops.ioctl) throw new FS.ErrnoError(59);
1639
+ return stream.stream_ops.ioctl(stream, cmd, arg);
1640
+ },
1641
+ readFile(path, opts = {}) {
1642
+ opts.flags = opts.flags || 0;
1643
+ opts.encoding = opts.encoding || "binary";
1644
+ if (opts.encoding !== "utf8" && opts.encoding !== "binary") abort(`Invalid encoding type "${opts.encoding}"`);
1645
+ var stream = FS.open(path, opts.flags);
1646
+ var length = FS.stat(path).size;
1647
+ var buf = new Uint8Array(length);
1648
+ FS.read(stream, buf, 0, length, 0);
1649
+ if (opts.encoding === "utf8") buf = UTF8ArrayToString(buf);
1650
+ FS.close(stream);
1651
+ return buf;
1652
+ },
1653
+ writeFile(path, data, opts = {}) {
1654
+ opts.flags = opts.flags || 577;
1655
+ var stream = FS.open(path, opts.flags, opts.mode);
1656
+ if (typeof data == "string") data = new Uint8Array(intArrayFromString(data, true));
1657
+ if (ArrayBuffer.isView(data)) FS.write(stream, data, 0, data.byteLength, void 0, opts.canOwn);
1658
+ else abort("Unsupported data type");
1659
+ FS.close(stream);
1660
+ },
1661
+ cwd: () => FS.currentPath,
1662
+ chdir(path) {
1663
+ var lookup = FS.lookupPath(path, { follow: true });
1664
+ if (lookup.node === null) throw new FS.ErrnoError(44);
1665
+ if (!FS.isDir(lookup.node.mode)) throw new FS.ErrnoError(54);
1666
+ var errCode = FS.nodePermissions(lookup.node, "x");
1667
+ if (errCode) throw new FS.ErrnoError(errCode);
1668
+ FS.currentPath = lookup.path;
1669
+ },
1670
+ createDefaultDirectories() {
1671
+ FS.mkdir("/tmp");
1672
+ FS.mkdir("/home");
1673
+ FS.mkdir("/home/web_user");
1674
+ },
1675
+ createDefaultDevices() {
1676
+ FS.mkdir("/dev");
1677
+ FS.registerDevice(FS.makedev(1, 3), {
1678
+ read: () => 0,
1679
+ write: (stream, buffer, offset, length, pos) => length,
1680
+ llseek: () => 0
1681
+ });
1682
+ FS.mkdev("/dev/null", FS.makedev(1, 3));
1683
+ TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);
1684
+ TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);
1685
+ FS.mkdev("/dev/tty", FS.makedev(5, 0));
1686
+ FS.mkdev("/dev/tty1", FS.makedev(6, 0));
1687
+ var randomBuffer = new Uint8Array(1024), randomLeft = 0;
1688
+ var randomByte = () => {
1689
+ if (randomLeft === 0) {
1690
+ randomFill(randomBuffer);
1691
+ randomLeft = randomBuffer.byteLength;
1692
+ }
1693
+ return randomBuffer[--randomLeft];
1694
+ };
1695
+ FS.createDevice("/dev", "random", randomByte);
1696
+ FS.createDevice("/dev", "urandom", randomByte);
1697
+ FS.mkdir("/dev/shm");
1698
+ FS.mkdir("/dev/shm/tmp");
1699
+ },
1700
+ createSpecialDirectories() {
1701
+ FS.mkdir("/proc");
1702
+ var proc_self = FS.mkdir("/proc/self");
1703
+ FS.mkdir("/proc/self/fd");
1704
+ FS.mount({ mount() {
1705
+ var node = FS.createNode(proc_self, "fd", 16895, 73);
1706
+ node.stream_ops = { llseek: MEMFS.stream_ops.llseek };
1707
+ node.node_ops = {
1708
+ lookup(parent, name) {
1709
+ var fd = +name;
1710
+ var stream = FS.getStreamChecked(fd);
1711
+ var ret = {
1712
+ parent: null,
1713
+ mount: { mountpoint: "fake" },
1714
+ node_ops: { readlink: () => stream.path },
1715
+ id: fd + 1
1716
+ };
1717
+ ret.parent = ret;
1718
+ return ret;
1719
+ },
1720
+ readdir() {
1721
+ return Array.from(FS.streams.entries()).filter(([k, v]) => v).map(([k, v]) => k.toString());
1722
+ }
1723
+ };
1724
+ return node;
1725
+ } }, {}, "/proc/self/fd");
1726
+ },
1727
+ createStandardStreams(input, output, error) {
1728
+ if (input) FS.createDevice("/dev", "stdin", input);
1729
+ else FS.symlink("/dev/tty", "/dev/stdin");
1730
+ if (output) FS.createDevice("/dev", "stdout", null, output);
1731
+ else FS.symlink("/dev/tty", "/dev/stdout");
1732
+ if (error) FS.createDevice("/dev", "stderr", null, error);
1733
+ else FS.symlink("/dev/tty1", "/dev/stderr");
1734
+ FS.open("/dev/stdin", 0);
1735
+ FS.open("/dev/stdout", 1);
1736
+ FS.open("/dev/stderr", 1);
1737
+ },
1738
+ staticInit() {
1739
+ FS.nameTable = new Array(4096);
1740
+ FS.mount(MEMFS, {}, "/");
1741
+ FS.createDefaultDirectories();
1742
+ FS.createDefaultDevices();
1743
+ FS.createSpecialDirectories();
1744
+ FS.filesystems = { MEMFS };
1745
+ },
1746
+ init(input, output, error) {
1747
+ FS.initialized = true;
1748
+ input ??= Module["stdin"];
1749
+ output ??= Module["stdout"];
1750
+ error ??= Module["stderr"];
1751
+ FS.createStandardStreams(input, output, error);
1752
+ },
1753
+ quit() {
1754
+ FS.initialized = false;
1755
+ for (var stream of FS.streams) if (stream) FS.close(stream);
1756
+ },
1757
+ findObject(path, dontResolveLastLink) {
1758
+ var ret = FS.analyzePath(path, dontResolveLastLink);
1759
+ if (!ret.exists) return null;
1760
+ return ret.object;
1761
+ },
1762
+ analyzePath(path, dontResolveLastLink) {
1763
+ try {
1764
+ var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
1765
+ path = lookup.path;
1766
+ } catch (e) {}
1767
+ var ret = {
1768
+ isRoot: false,
1769
+ exists: false,
1770
+ error: 0,
1771
+ name: null,
1772
+ path: null,
1773
+ object: null,
1774
+ parentExists: false,
1775
+ parentPath: null,
1776
+ parentObject: null
1777
+ };
1778
+ try {
1779
+ var lookup = FS.lookupPath(path, { parent: true });
1780
+ ret.parentExists = true;
1781
+ ret.parentPath = lookup.path;
1782
+ ret.parentObject = lookup.node;
1783
+ ret.name = PATH.basename(path);
1784
+ lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
1785
+ ret.exists = true;
1786
+ ret.path = lookup.path;
1787
+ ret.object = lookup.node;
1788
+ ret.name = lookup.node.name;
1789
+ ret.isRoot = lookup.path === "/";
1790
+ } catch (e) {
1791
+ ret.error = e.errno;
1792
+ }
1793
+ return ret;
1794
+ },
1795
+ createPath(parent, path, canRead, canWrite) {
1796
+ parent = typeof parent == "string" ? parent : FS.getPath(parent);
1797
+ var parts = path.split("/").reverse();
1798
+ while (parts.length) {
1799
+ var part = parts.pop();
1800
+ if (!part) continue;
1801
+ var current = PATH.join2(parent, part);
1802
+ try {
1803
+ FS.mkdir(current);
1804
+ } catch (e) {
1805
+ if (e.errno != 20) throw e;
1806
+ }
1807
+ parent = current;
1808
+ }
1809
+ return current;
1810
+ },
1811
+ createFile(parent, name, properties, canRead, canWrite) {
1812
+ var path = PATH.join2(typeof parent == "string" ? parent : FS.getPath(parent), name);
1813
+ var mode = FS_getMode(canRead, canWrite);
1814
+ return FS.create(path, mode);
1815
+ },
1816
+ createDataFile(parent, name, data, canRead, canWrite, canOwn) {
1817
+ var path = name;
1818
+ if (parent) {
1819
+ parent = typeof parent == "string" ? parent : FS.getPath(parent);
1820
+ path = name ? PATH.join2(parent, name) : parent;
1821
+ }
1822
+ var mode = FS_getMode(canRead, canWrite);
1823
+ var node = FS.create(path, mode);
1824
+ if (data) {
1825
+ if (typeof data == "string") {
1826
+ var arr = new Array(data.length);
1827
+ for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i);
1828
+ data = arr;
1829
+ }
1830
+ FS.chmod(node, mode | 146);
1831
+ var stream = FS.open(node, 577);
1832
+ FS.write(stream, data, 0, data.length, 0, canOwn);
1833
+ FS.close(stream);
1834
+ FS.chmod(node, mode);
1835
+ }
1836
+ },
1837
+ createDevice(parent, name, input, output) {
1838
+ var path = PATH.join2(typeof parent == "string" ? parent : FS.getPath(parent), name);
1839
+ var mode = FS_getMode(!!input, !!output);
1840
+ FS.createDevice.major ??= 64;
1841
+ var dev = FS.makedev(FS.createDevice.major++, 0);
1842
+ FS.registerDevice(dev, {
1843
+ open(stream) {
1844
+ stream.seekable = false;
1845
+ },
1846
+ close(stream) {
1847
+ if (output?.buffer?.length) output(10);
1848
+ },
1849
+ read(stream, buffer, offset, length, pos) {
1850
+ var bytesRead = 0;
1851
+ for (var i = 0; i < length; i++) {
1852
+ var result;
1853
+ try {
1854
+ result = input();
1855
+ } catch (e) {
1856
+ throw new FS.ErrnoError(29);
1857
+ }
1858
+ if (result === void 0 && bytesRead === 0) throw new FS.ErrnoError(6);
1859
+ if (result === null || result === void 0) break;
1860
+ bytesRead++;
1861
+ buffer[offset + i] = result;
1862
+ }
1863
+ if (bytesRead) stream.node.atime = Date.now();
1864
+ return bytesRead;
1865
+ },
1866
+ write(stream, buffer, offset, length, pos) {
1867
+ for (var i = 0; i < length; i++) try {
1868
+ output(buffer[offset + i]);
1869
+ } catch (e) {
1870
+ throw new FS.ErrnoError(29);
1871
+ }
1872
+ if (length) stream.node.mtime = stream.node.ctime = Date.now();
1873
+ return i;
1874
+ }
1875
+ });
1876
+ return FS.mkdev(path, mode, dev);
1877
+ },
1878
+ forceLoadFile(obj) {
1879
+ if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;
1880
+ if (globalThis.XMLHttpRequest) 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.");
1881
+ else try {
1882
+ obj.contents = readBinary(obj.url);
1883
+ } catch (e) {
1884
+ throw new FS.ErrnoError(29);
1885
+ }
1886
+ },
1887
+ createLazyFile(parent, name, url, canRead, canWrite) {
1888
+ class LazyUint8Array {
1889
+ lengthKnown = false;
1890
+ chunks = [];
1891
+ get(idx) {
1892
+ if (idx > this.length - 1 || idx < 0) return;
1893
+ var chunkOffset = idx % this.chunkSize;
1894
+ var chunkNum = idx / this.chunkSize | 0;
1895
+ return this.getter(chunkNum)[chunkOffset];
1896
+ }
1897
+ setDataGetter(getter) {
1898
+ this.getter = getter;
1899
+ }
1900
+ cacheLength() {
1901
+ var xhr = new XMLHttpRequest();
1902
+ xhr.open("HEAD", url, false);
1903
+ xhr.send(null);
1904
+ if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) abort("Couldn't load " + url + ". Status: " + xhr.status);
1905
+ var datalength = Number(xhr.getResponseHeader("Content-length"));
1906
+ var header;
1907
+ var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes";
1908
+ var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip";
1909
+ var chunkSize = 1024 * 1024;
1910
+ if (!hasByteServing) chunkSize = datalength;
1911
+ var doXHR = (from, to) => {
1912
+ if (from > to) abort("invalid range (" + from + ", " + to + ") or no bytes requested!");
1913
+ if (to > datalength - 1) abort("only " + datalength + " bytes available! programmer error!");
1914
+ var xhr$1 = new XMLHttpRequest();
1915
+ xhr$1.open("GET", url, false);
1916
+ if (datalength !== chunkSize) xhr$1.setRequestHeader("Range", "bytes=" + from + "-" + to);
1917
+ xhr$1.responseType = "arraybuffer";
1918
+ if (xhr$1.overrideMimeType) xhr$1.overrideMimeType("text/plain; charset=x-user-defined");
1919
+ xhr$1.send(null);
1920
+ if (!(xhr$1.status >= 200 && xhr$1.status < 300 || xhr$1.status === 304)) abort("Couldn't load " + url + ". Status: " + xhr$1.status);
1921
+ if (xhr$1.response !== void 0) return new Uint8Array(xhr$1.response || []);
1922
+ return intArrayFromString(xhr$1.responseText || "", true);
1923
+ };
1924
+ var lazyArray = this;
1925
+ lazyArray.setDataGetter((chunkNum) => {
1926
+ var start = chunkNum * chunkSize;
1927
+ var end = (chunkNum + 1) * chunkSize - 1;
1928
+ end = Math.min(end, datalength - 1);
1929
+ if (typeof lazyArray.chunks[chunkNum] == "undefined") lazyArray.chunks[chunkNum] = doXHR(start, end);
1930
+ if (typeof lazyArray.chunks[chunkNum] == "undefined") abort("doXHR failed!");
1931
+ return lazyArray.chunks[chunkNum];
1932
+ });
1933
+ if (usesGzip || !datalength) {
1934
+ chunkSize = datalength = 1;
1935
+ datalength = this.getter(0).length;
1936
+ chunkSize = datalength;
1937
+ out("LazyFiles on gzip forces download of the whole file when length is accessed");
1938
+ }
1939
+ this._length = datalength;
1940
+ this._chunkSize = chunkSize;
1941
+ this.lengthKnown = true;
1942
+ }
1943
+ get length() {
1944
+ if (!this.lengthKnown) this.cacheLength();
1945
+ return this._length;
1946
+ }
1947
+ get chunkSize() {
1948
+ if (!this.lengthKnown) this.cacheLength();
1949
+ return this._chunkSize;
1950
+ }
1951
+ }
1952
+ if (globalThis.XMLHttpRequest) {
1953
+ if (!ENVIRONMENT_IS_WORKER) abort("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");
1954
+ var properties = {
1955
+ isDevice: false,
1956
+ contents: new LazyUint8Array()
1957
+ };
1958
+ } else var properties = {
1959
+ isDevice: false,
1960
+ url
1961
+ };
1962
+ var node = FS.createFile(parent, name, properties, canRead, canWrite);
1963
+ if (properties.contents) node.contents = properties.contents;
1964
+ else if (properties.url) {
1965
+ node.contents = null;
1966
+ node.url = properties.url;
1967
+ }
1968
+ Object.defineProperties(node, { usedBytes: { get: function() {
1969
+ return this.contents.length;
1970
+ } } });
1971
+ var stream_ops = {};
1972
+ for (const [key, fn] of Object.entries(node.stream_ops)) stream_ops[key] = (...args) => {
1973
+ FS.forceLoadFile(node);
1974
+ return fn(...args);
1975
+ };
1976
+ function writeChunks(stream, buffer, offset, length, position) {
1977
+ var contents = stream.node.contents;
1978
+ if (position >= contents.length) return 0;
1979
+ var size = Math.min(contents.length - position, length);
1980
+ if (contents.slice) for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i];
1981
+ else for (var i = 0; i < size; i++) buffer[offset + i] = contents.get(position + i);
1982
+ return size;
1983
+ }
1984
+ stream_ops.read = (stream, buffer, offset, length, position) => {
1985
+ FS.forceLoadFile(node);
1986
+ return writeChunks(stream, buffer, offset, length, position);
1987
+ };
1988
+ stream_ops.mmap = (stream, length, position, prot, flags) => {
1989
+ FS.forceLoadFile(node);
1990
+ var ptr = mmapAlloc(length);
1991
+ if (!ptr) throw new FS.ErrnoError(48);
1992
+ writeChunks(stream, HEAP8, ptr, length, position);
1993
+ return {
1994
+ ptr,
1995
+ allocated: true
1996
+ };
1997
+ };
1998
+ node.stream_ops = stream_ops;
1999
+ return node;
2000
+ }
2001
+ };
2002
+ var UTF8ToString = (ptr, maxBytesToRead, ignoreNul) => {
2003
+ ptr >>>= 0;
2004
+ return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead, ignoreNul) : "";
2005
+ };
2006
+ var SYSCALLS = {
2007
+ calculateAt(dirfd, path, allowEmpty) {
2008
+ if (PATH.isAbs(path)) return path;
2009
+ var dir;
2010
+ if (dirfd === -100) dir = FS.cwd();
2011
+ else dir = SYSCALLS.getStreamFromFD(dirfd).path;
2012
+ if (path.length == 0) {
2013
+ if (!allowEmpty) throw new FS.ErrnoError(44);
2014
+ return dir;
2015
+ }
2016
+ return dir + "/" + path;
2017
+ },
2018
+ writeStat(buf, stat) {
2019
+ HEAPU32[buf >>> 2 >>> 0] = stat.dev;
2020
+ HEAPU32[buf + 4 >>> 2 >>> 0] = stat.mode;
2021
+ HEAPU32[buf + 8 >>> 2 >>> 0] = stat.nlink;
2022
+ HEAPU32[buf + 12 >>> 2 >>> 0] = stat.uid;
2023
+ HEAPU32[buf + 16 >>> 2 >>> 0] = stat.gid;
2024
+ HEAPU32[buf + 20 >>> 2 >>> 0] = stat.rdev;
2025
+ HEAP64[buf + 24 >>> 3 >>> 0] = BigInt(stat.size);
2026
+ HEAP32[buf + 32 >>> 2 >>> 0] = 4096;
2027
+ HEAP32[buf + 36 >>> 2 >>> 0] = stat.blocks;
2028
+ var atime = stat.atime.getTime();
2029
+ var mtime = stat.mtime.getTime();
2030
+ var ctime = stat.ctime.getTime();
2031
+ HEAP64[buf + 40 >>> 3 >>> 0] = BigInt(Math.floor(atime / 1e3));
2032
+ HEAPU32[buf + 48 >>> 2 >>> 0] = atime % 1e3 * 1e3 * 1e3;
2033
+ HEAP64[buf + 56 >>> 3 >>> 0] = BigInt(Math.floor(mtime / 1e3));
2034
+ HEAPU32[buf + 64 >>> 2 >>> 0] = mtime % 1e3 * 1e3 * 1e3;
2035
+ HEAP64[buf + 72 >>> 3 >>> 0] = BigInt(Math.floor(ctime / 1e3));
2036
+ HEAPU32[buf + 80 >>> 2 >>> 0] = ctime % 1e3 * 1e3 * 1e3;
2037
+ HEAP64[buf + 88 >>> 3 >>> 0] = BigInt(stat.ino);
2038
+ return 0;
2039
+ },
2040
+ writeStatFs(buf, stats) {
2041
+ HEAPU32[buf + 4 >>> 2 >>> 0] = stats.bsize;
2042
+ HEAPU32[buf + 60 >>> 2 >>> 0] = stats.bsize;
2043
+ HEAP64[buf + 8 >>> 3 >>> 0] = BigInt(stats.blocks);
2044
+ HEAP64[buf + 16 >>> 3 >>> 0] = BigInt(stats.bfree);
2045
+ HEAP64[buf + 24 >>> 3 >>> 0] = BigInt(stats.bavail);
2046
+ HEAP64[buf + 32 >>> 3 >>> 0] = BigInt(stats.files);
2047
+ HEAP64[buf + 40 >>> 3 >>> 0] = BigInt(stats.ffree);
2048
+ HEAPU32[buf + 48 >>> 2 >>> 0] = stats.fsid;
2049
+ HEAPU32[buf + 64 >>> 2 >>> 0] = stats.flags;
2050
+ HEAPU32[buf + 56 >>> 2 >>> 0] = stats.namelen;
2051
+ },
2052
+ doMsync(addr, stream, len, flags, offset) {
2053
+ if (!FS.isFile(stream.node.mode)) throw new FS.ErrnoError(43);
2054
+ if (flags & 2) return 0;
2055
+ var buffer = HEAPU8.slice(addr, addr + len);
2056
+ FS.msync(stream, buffer, offset, len, flags);
2057
+ },
2058
+ getStreamFromFD(fd) {
2059
+ return FS.getStreamChecked(fd);
2060
+ },
2061
+ varargs: void 0,
2062
+ getStr(ptr) {
2063
+ return UTF8ToString(ptr);
2064
+ }
2065
+ };
2066
+ var INT53_MAX = 9007199254740992;
2067
+ var INT53_MIN = -9007199254740992;
2068
+ var bigintToI53Checked = (num) => num < INT53_MIN || num > INT53_MAX ? NaN : Number(num);
2069
+ function ___syscall_fcntl64(fd, cmd, varargs) {
2070
+ varargs >>>= 0;
2071
+ SYSCALLS.varargs = varargs;
2072
+ try {
2073
+ var stream = SYSCALLS.getStreamFromFD(fd);
2074
+ switch (cmd) {
2075
+ case 0:
2076
+ var arg = syscallGetVarargI();
2077
+ if (arg < 0) return -28;
2078
+ while (FS.streams[arg]) arg++;
2079
+ return FS.dupStream(stream, arg).fd;
2080
+ case 1:
2081
+ case 2: return 0;
2082
+ case 3: return stream.flags;
2083
+ case 4:
2084
+ var arg = syscallGetVarargI();
2085
+ stream.flags |= arg;
2086
+ return 0;
2087
+ case 12:
2088
+ var arg = syscallGetVarargP();
2089
+ var offset = 0;
2090
+ HEAP16[arg + offset >>> 1 >>> 0] = 2;
2091
+ return 0;
2092
+ case 13:
2093
+ case 14: return 0;
2094
+ }
2095
+ return -28;
2096
+ } catch (e) {
2097
+ if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e;
2098
+ return -e.errno;
2099
+ }
2100
+ }
2101
+ function ___syscall_fstat64(fd, buf) {
2102
+ buf >>>= 0;
2103
+ try {
2104
+ return SYSCALLS.writeStat(buf, FS.fstat(fd));
2105
+ } catch (e) {
2106
+ if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e;
2107
+ return -e.errno;
2108
+ }
2109
+ }
2110
+ function ___syscall_ioctl(fd, op, varargs) {
2111
+ varargs >>>= 0;
2112
+ SYSCALLS.varargs = varargs;
2113
+ try {
2114
+ var stream = SYSCALLS.getStreamFromFD(fd);
2115
+ switch (op) {
2116
+ case 21509:
2117
+ if (!stream.tty) return -59;
2118
+ return 0;
2119
+ case 21505:
2120
+ if (!stream.tty) return -59;
2121
+ if (stream.tty.ops.ioctl_tcgets) {
2122
+ var termios = stream.tty.ops.ioctl_tcgets(stream);
2123
+ var argp = syscallGetVarargP();
2124
+ HEAP32[argp >>> 2 >>> 0] = termios.c_iflag || 0;
2125
+ HEAP32[argp + 4 >>> 2 >>> 0] = termios.c_oflag || 0;
2126
+ HEAP32[argp + 8 >>> 2 >>> 0] = termios.c_cflag || 0;
2127
+ HEAP32[argp + 12 >>> 2 >>> 0] = termios.c_lflag || 0;
2128
+ for (var i = 0; i < 32; i++) HEAP8[argp + i + 17 >>> 0] = termios.c_cc[i] || 0;
2129
+ return 0;
2130
+ }
2131
+ return 0;
2132
+ case 21510:
2133
+ case 21511:
2134
+ case 21512:
2135
+ if (!stream.tty) return -59;
2136
+ return 0;
2137
+ case 21506:
2138
+ case 21507:
2139
+ case 21508:
2140
+ if (!stream.tty) return -59;
2141
+ if (stream.tty.ops.ioctl_tcsets) {
2142
+ var argp = syscallGetVarargP();
2143
+ var c_iflag = HEAP32[argp >>> 2 >>> 0];
2144
+ var c_oflag = HEAP32[argp + 4 >>> 2 >>> 0];
2145
+ var c_cflag = HEAP32[argp + 8 >>> 2 >>> 0];
2146
+ var c_lflag = HEAP32[argp + 12 >>> 2 >>> 0];
2147
+ var c_cc = [];
2148
+ for (var i = 0; i < 32; i++) c_cc.push(HEAP8[argp + i + 17 >>> 0]);
2149
+ return stream.tty.ops.ioctl_tcsets(stream.tty, op, {
2150
+ c_iflag,
2151
+ c_oflag,
2152
+ c_cflag,
2153
+ c_lflag,
2154
+ c_cc
2155
+ });
2156
+ }
2157
+ return 0;
2158
+ case 21519:
2159
+ if (!stream.tty) return -59;
2160
+ var argp = syscallGetVarargP();
2161
+ HEAP32[argp >>> 2 >>> 0] = 0;
2162
+ return 0;
2163
+ case 21520:
2164
+ if (!stream.tty) return -59;
2165
+ return -28;
2166
+ case 21537:
2167
+ case 21531:
2168
+ var argp = syscallGetVarargP();
2169
+ return FS.ioctl(stream, op, argp);
2170
+ case 21523:
2171
+ if (!stream.tty) return -59;
2172
+ if (stream.tty.ops.ioctl_tiocgwinsz) {
2173
+ var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty);
2174
+ var argp = syscallGetVarargP();
2175
+ HEAP16[argp >>> 1 >>> 0] = winsize[0];
2176
+ HEAP16[argp + 2 >>> 1 >>> 0] = winsize[1];
2177
+ }
2178
+ return 0;
2179
+ case 21524:
2180
+ if (!stream.tty) return -59;
2181
+ return 0;
2182
+ case 21515:
2183
+ if (!stream.tty) return -59;
2184
+ return 0;
2185
+ default: return -28;
2186
+ }
2187
+ } catch (e) {
2188
+ if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e;
2189
+ return -e.errno;
2190
+ }
2191
+ }
2192
+ function ___syscall_newfstatat(dirfd, path, buf, flags) {
2193
+ path >>>= 0;
2194
+ buf >>>= 0;
2195
+ try {
2196
+ path = SYSCALLS.getStr(path);
2197
+ var nofollow = flags & 256;
2198
+ var allowEmpty = flags & 4096;
2199
+ flags = flags & -6401;
2200
+ path = SYSCALLS.calculateAt(dirfd, path, allowEmpty);
2201
+ return SYSCALLS.writeStat(buf, nofollow ? FS.lstat(path) : FS.stat(path));
2202
+ } catch (e) {
2203
+ if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e;
2204
+ return -e.errno;
2205
+ }
2206
+ }
2207
+ function ___syscall_openat(dirfd, path, flags, varargs) {
2208
+ path >>>= 0;
2209
+ varargs >>>= 0;
2210
+ SYSCALLS.varargs = varargs;
2211
+ try {
2212
+ path = SYSCALLS.getStr(path);
2213
+ path = SYSCALLS.calculateAt(dirfd, path);
2214
+ var mode = varargs ? syscallGetVarargI() : 0;
2215
+ return FS.open(path, flags, mode).fd;
2216
+ } catch (e) {
2217
+ if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e;
2218
+ return -e.errno;
2219
+ }
2220
+ }
2221
+ var __abort_js = () => abort("");
2222
+ var AsciiToString = (ptr) => {
2223
+ ptr >>>= 0;
2224
+ var str = "";
2225
+ while (1) {
2226
+ var ch = HEAPU8[ptr++ >>> 0];
2227
+ if (!ch) return str;
2228
+ str += String.fromCharCode(ch);
2229
+ }
2230
+ };
2231
+ var awaitingDependencies = {};
2232
+ var registeredTypes = {};
2233
+ var typeDependencies = {};
2234
+ var BindingError = class BindingError$1 extends Error {
2235
+ constructor(message) {
2236
+ super(message);
2237
+ this.name = "BindingError";
2238
+ }
2239
+ };
2240
+ var throwBindingError = (message) => {
2241
+ throw new BindingError(message);
2242
+ };
2243
+ function sharedRegisterType(rawType, registeredInstance, options = {}) {
2244
+ var name = registeredInstance.name;
2245
+ if (!rawType) throwBindingError(`type "${name}" must have a positive integer typeid pointer`);
2246
+ if (registeredTypes.hasOwnProperty(rawType)) if (options.ignoreDuplicateRegistrations) return;
2247
+ else throwBindingError(`Cannot register type '${name}' twice`);
2248
+ registeredTypes[rawType] = registeredInstance;
2249
+ delete typeDependencies[rawType];
2250
+ if (awaitingDependencies.hasOwnProperty(rawType)) {
2251
+ var callbacks = awaitingDependencies[rawType];
2252
+ delete awaitingDependencies[rawType];
2253
+ callbacks.forEach((cb) => cb());
2254
+ }
2255
+ }
2256
+ function registerType(rawType, registeredInstance, options = {}) {
2257
+ return sharedRegisterType(rawType, registeredInstance, options);
2258
+ }
2259
+ var integerReadValueFromPointer = (name, width, signed) => {
2260
+ switch (width) {
2261
+ case 1: return signed ? (pointer) => HEAP8[pointer >>> 0] : (pointer) => HEAPU8[pointer >>> 0];
2262
+ case 2: return signed ? (pointer) => HEAP16[pointer >>> 1 >>> 0] : (pointer) => HEAPU16[pointer >>> 1 >>> 0];
2263
+ case 4: return signed ? (pointer) => HEAP32[pointer >>> 2 >>> 0] : (pointer) => HEAPU32[pointer >>> 2 >>> 0];
2264
+ case 8: return signed ? (pointer) => HEAP64[pointer >>> 3 >>> 0] : (pointer) => HEAPU64[pointer >>> 3 >>> 0];
2265
+ default: throw new TypeError(`invalid integer width (${width}): ${name}`);
2266
+ }
2267
+ };
2268
+ var __embind_register_bigint = function(primitiveType, name, size, minRange, maxRange) {
2269
+ primitiveType >>>= 0;
2270
+ name >>>= 0;
2271
+ size >>>= 0;
2272
+ name = AsciiToString(name);
2273
+ const isUnsignedType = minRange === 0n;
2274
+ let fromWireType = (value) => value;
2275
+ if (isUnsignedType) {
2276
+ const bitSize = size * 8;
2277
+ fromWireType = (value) => BigInt.asUintN(bitSize, value);
2278
+ maxRange = fromWireType(maxRange);
2279
+ }
2280
+ registerType(primitiveType, {
2281
+ name,
2282
+ fromWireType,
2283
+ toWireType: (destructors, value) => {
2284
+ if (typeof value == "number") value = BigInt(value);
2285
+ return value;
2286
+ },
2287
+ readValueFromPointer: integerReadValueFromPointer(name, size, !isUnsignedType),
2288
+ destructorFunction: null
2289
+ });
2290
+ };
2291
+ function __embind_register_bool(rawType, name, trueValue, falseValue) {
2292
+ rawType >>>= 0;
2293
+ name >>>= 0;
2294
+ name = AsciiToString(name);
2295
+ registerType(rawType, {
2296
+ name,
2297
+ fromWireType: function(wt) {
2298
+ return !!wt;
2299
+ },
2300
+ toWireType: function(destructors, o) {
2301
+ return o ? trueValue : falseValue;
2302
+ },
2303
+ readValueFromPointer: function(pointer) {
2304
+ return this.fromWireType(HEAPU8[pointer >>> 0]);
2305
+ },
2306
+ destructorFunction: null
2307
+ });
2308
+ }
2309
+ var shallowCopyInternalPointer = (o) => ({
2310
+ count: o.count,
2311
+ deleteScheduled: o.deleteScheduled,
2312
+ preservePointerOnDelete: o.preservePointerOnDelete,
2313
+ ptr: o.ptr,
2314
+ ptrType: o.ptrType,
2315
+ smartPtr: o.smartPtr,
2316
+ smartPtrType: o.smartPtrType
2317
+ });
2318
+ var throwInstanceAlreadyDeleted = (obj) => {
2319
+ function getInstanceTypeName(handle) {
2320
+ return handle.$$.ptrType.registeredClass.name;
2321
+ }
2322
+ throwBindingError(getInstanceTypeName(obj) + " instance already deleted");
2323
+ };
2324
+ var finalizationRegistry = false;
2325
+ var detachFinalizer = (handle) => {};
2326
+ var runDestructor = ($$) => {
2327
+ if ($$.smartPtr) $$.smartPtrType.rawDestructor($$.smartPtr);
2328
+ else $$.ptrType.registeredClass.rawDestructor($$.ptr);
2329
+ };
2330
+ var releaseClassHandle = ($$) => {
2331
+ $$.count.value -= 1;
2332
+ if (0 === $$.count.value) runDestructor($$);
2333
+ };
2334
+ var attachFinalizer = (handle) => {
2335
+ if (!globalThis.FinalizationRegistry) {
2336
+ attachFinalizer = (handle$1) => handle$1;
2337
+ return handle;
2338
+ }
2339
+ finalizationRegistry = new FinalizationRegistry((info) => {
2340
+ releaseClassHandle(info.$$);
2341
+ });
2342
+ attachFinalizer = (handle$1) => {
2343
+ var $$ = handle$1.$$;
2344
+ if (!!$$.smartPtr) {
2345
+ var info = { $$ };
2346
+ finalizationRegistry.register(handle$1, info, handle$1);
2347
+ }
2348
+ return handle$1;
2349
+ };
2350
+ detachFinalizer = (handle$1) => finalizationRegistry.unregister(handle$1);
2351
+ return attachFinalizer(handle);
2352
+ };
2353
+ var deletionQueue = [];
2354
+ var flushPendingDeletes = () => {
2355
+ while (deletionQueue.length) {
2356
+ var obj = deletionQueue.pop();
2357
+ obj.$$.deleteScheduled = false;
2358
+ obj["delete"]();
2359
+ }
2360
+ };
2361
+ var delayFunction;
2362
+ var init_ClassHandle = () => {
2363
+ let proto = ClassHandle.prototype;
2364
+ Object.assign(proto, {
2365
+ isAliasOf(other) {
2366
+ if (!(this instanceof ClassHandle)) return false;
2367
+ if (!(other instanceof ClassHandle)) return false;
2368
+ var leftClass = this.$$.ptrType.registeredClass;
2369
+ var left = this.$$.ptr;
2370
+ other.$$ = other.$$;
2371
+ var rightClass = other.$$.ptrType.registeredClass;
2372
+ var right = other.$$.ptr;
2373
+ while (leftClass.baseClass) {
2374
+ left = leftClass.upcast(left);
2375
+ leftClass = leftClass.baseClass;
2376
+ }
2377
+ while (rightClass.baseClass) {
2378
+ right = rightClass.upcast(right);
2379
+ rightClass = rightClass.baseClass;
2380
+ }
2381
+ return leftClass === rightClass && left === right;
2382
+ },
2383
+ clone() {
2384
+ if (!this.$$.ptr) throwInstanceAlreadyDeleted(this);
2385
+ if (this.$$.preservePointerOnDelete) {
2386
+ this.$$.count.value += 1;
2387
+ return this;
2388
+ } else {
2389
+ var clone = attachFinalizer(Object.create(Object.getPrototypeOf(this), { $$: { value: shallowCopyInternalPointer(this.$$) } }));
2390
+ clone.$$.count.value += 1;
2391
+ clone.$$.deleteScheduled = false;
2392
+ return clone;
2393
+ }
2394
+ },
2395
+ delete() {
2396
+ if (!this.$$.ptr) throwInstanceAlreadyDeleted(this);
2397
+ if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) throwBindingError("Object already scheduled for deletion");
2398
+ detachFinalizer(this);
2399
+ releaseClassHandle(this.$$);
2400
+ if (!this.$$.preservePointerOnDelete) {
2401
+ this.$$.smartPtr = void 0;
2402
+ this.$$.ptr = void 0;
2403
+ }
2404
+ },
2405
+ isDeleted() {
2406
+ return !this.$$.ptr;
2407
+ },
2408
+ deleteLater() {
2409
+ if (!this.$$.ptr) throwInstanceAlreadyDeleted(this);
2410
+ if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) throwBindingError("Object already scheduled for deletion");
2411
+ deletionQueue.push(this);
2412
+ if (deletionQueue.length === 1 && delayFunction) delayFunction(flushPendingDeletes);
2413
+ this.$$.deleteScheduled = true;
2414
+ return this;
2415
+ }
2416
+ });
2417
+ const symbolDispose = Symbol.dispose;
2418
+ if (symbolDispose) proto[symbolDispose] = proto["delete"];
2419
+ };
2420
+ function ClassHandle() {}
2421
+ var createNamedFunction = (name, func) => Object.defineProperty(func, "name", { value: name });
2422
+ var registeredPointers = {};
2423
+ var ensureOverloadTable = (proto, methodName, humanName) => {
2424
+ if (void 0 === proto[methodName].overloadTable) {
2425
+ var prevFunc = proto[methodName];
2426
+ proto[methodName] = function(...args) {
2427
+ if (!proto[methodName].overloadTable.hasOwnProperty(args.length)) throwBindingError(`Function '${humanName}' called with an invalid number of arguments (${args.length}) - expects one of (${proto[methodName].overloadTable})!`);
2428
+ return proto[methodName].overloadTable[args.length].apply(this, args);
2429
+ };
2430
+ proto[methodName].overloadTable = [];
2431
+ proto[methodName].overloadTable[prevFunc.argCount] = prevFunc;
2432
+ }
2433
+ };
2434
+ var exposePublicSymbol = (name, value, numArguments) => {
2435
+ if (Module.hasOwnProperty(name)) {
2436
+ if (void 0 === numArguments || void 0 !== Module[name].overloadTable && void 0 !== Module[name].overloadTable[numArguments]) throwBindingError(`Cannot register public name '${name}' twice`);
2437
+ ensureOverloadTable(Module, name, name);
2438
+ if (Module[name].overloadTable.hasOwnProperty(numArguments)) throwBindingError(`Cannot register multiple overloads of a function with the same number of arguments (${numArguments})!`);
2439
+ Module[name].overloadTable[numArguments] = value;
2440
+ } else {
2441
+ Module[name] = value;
2442
+ Module[name].argCount = numArguments;
2443
+ }
2444
+ };
2445
+ var char_0 = 48;
2446
+ var char_9 = 57;
2447
+ var makeLegalFunctionName = (name) => {
2448
+ name = name.replace(/[^a-zA-Z0-9_]/g, "$");
2449
+ var f = name.charCodeAt(0);
2450
+ if (f >= char_0 && f <= char_9) return `_${name}`;
2451
+ return name;
2452
+ };
2453
+ function RegisteredClass(name, constructor, instancePrototype, rawDestructor, baseClass, getActualType, upcast, downcast) {
2454
+ this.name = name;
2455
+ this.constructor = constructor;
2456
+ this.instancePrototype = instancePrototype;
2457
+ this.rawDestructor = rawDestructor;
2458
+ this.baseClass = baseClass;
2459
+ this.getActualType = getActualType;
2460
+ this.upcast = upcast;
2461
+ this.downcast = downcast;
2462
+ this.pureVirtualFunctions = [];
2463
+ }
2464
+ var upcastPointer = (ptr, ptrClass, desiredClass) => {
2465
+ while (ptrClass !== desiredClass) {
2466
+ if (!ptrClass.upcast) throwBindingError(`Expected null or instance of ${desiredClass.name}, got an instance of ${ptrClass.name}`);
2467
+ ptr = ptrClass.upcast(ptr);
2468
+ ptrClass = ptrClass.baseClass;
2469
+ }
2470
+ return ptr;
2471
+ };
2472
+ var embindRepr = (v) => {
2473
+ if (v === null) return "null";
2474
+ var t = typeof v;
2475
+ if (t === "object" || t === "array" || t === "function") return v.toString();
2476
+ else return "" + v;
2477
+ };
2478
+ function constNoSmartPtrRawPointerToWireType(destructors, handle) {
2479
+ if (handle === null) {
2480
+ if (this.isReference) throwBindingError(`null is not a valid ${this.name}`);
2481
+ return 0;
2482
+ }
2483
+ if (!handle.$$) throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`);
2484
+ if (!handle.$$.ptr) throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`);
2485
+ var handleClass = handle.$$.ptrType.registeredClass;
2486
+ return upcastPointer(handle.$$.ptr, handleClass, this.registeredClass);
2487
+ }
2488
+ function genericPointerToWireType(destructors, handle) {
2489
+ var ptr;
2490
+ if (handle === null) {
2491
+ if (this.isReference) throwBindingError(`null is not a valid ${this.name}`);
2492
+ if (this.isSmartPointer) {
2493
+ ptr = this.rawConstructor();
2494
+ if (destructors !== null) destructors.push(this.rawDestructor, ptr);
2495
+ return ptr;
2496
+ } else return 0;
2497
+ }
2498
+ if (!handle || !handle.$$) throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`);
2499
+ if (!handle.$$.ptr) throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`);
2500
+ if (!this.isConst && handle.$$.ptrType.isConst) throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name} to parameter type ${this.name}`);
2501
+ var handleClass = handle.$$.ptrType.registeredClass;
2502
+ ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass);
2503
+ if (this.isSmartPointer) {
2504
+ if (void 0 === handle.$$.smartPtr) throwBindingError("Passing raw pointer to smart pointer is illegal");
2505
+ switch (this.sharingPolicy) {
2506
+ case 0:
2507
+ if (handle.$$.smartPtrType === this) ptr = handle.$$.smartPtr;
2508
+ else throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name} to parameter type ${this.name}`);
2509
+ break;
2510
+ case 1:
2511
+ ptr = handle.$$.smartPtr;
2512
+ break;
2513
+ case 2:
2514
+ if (handle.$$.smartPtrType === this) ptr = handle.$$.smartPtr;
2515
+ else {
2516
+ var clonedHandle = handle["clone"]();
2517
+ ptr = this.rawShare(ptr, Emval.toHandle(() => clonedHandle["delete"]()));
2518
+ if (destructors !== null) destructors.push(this.rawDestructor, ptr);
2519
+ }
2520
+ break;
2521
+ default: throwBindingError("Unsupported sharing policy");
2522
+ }
2523
+ }
2524
+ return ptr;
2525
+ }
2526
+ function nonConstNoSmartPtrRawPointerToWireType(destructors, handle) {
2527
+ if (handle === null) {
2528
+ if (this.isReference) throwBindingError(`null is not a valid ${this.name}`);
2529
+ return 0;
2530
+ }
2531
+ if (!handle.$$) throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`);
2532
+ if (!handle.$$.ptr) throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`);
2533
+ if (handle.$$.ptrType.isConst) throwBindingError(`Cannot convert argument of type ${handle.$$.ptrType.name} to parameter type ${this.name}`);
2534
+ var handleClass = handle.$$.ptrType.registeredClass;
2535
+ return upcastPointer(handle.$$.ptr, handleClass, this.registeredClass);
2536
+ }
2537
+ function readPointer(pointer) {
2538
+ return this.fromWireType(HEAPU32[pointer >>> 2 >>> 0]);
2539
+ }
2540
+ var downcastPointer = (ptr, ptrClass, desiredClass) => {
2541
+ if (ptrClass === desiredClass) return ptr;
2542
+ if (void 0 === desiredClass.baseClass) return null;
2543
+ var rv = downcastPointer(ptr, ptrClass, desiredClass.baseClass);
2544
+ if (rv === null) return null;
2545
+ return desiredClass.downcast(rv);
2546
+ };
2547
+ var registeredInstances = {};
2548
+ var getBasestPointer = (class_, ptr) => {
2549
+ if (ptr === void 0) throwBindingError("ptr should not be undefined");
2550
+ while (class_.baseClass) {
2551
+ ptr = class_.upcast(ptr);
2552
+ class_ = class_.baseClass;
2553
+ }
2554
+ return ptr;
2555
+ };
2556
+ var getInheritedInstance = (class_, ptr) => {
2557
+ ptr = getBasestPointer(class_, ptr);
2558
+ return registeredInstances[ptr];
2559
+ };
2560
+ var InternalError = class InternalError$1 extends Error {
2561
+ constructor(message) {
2562
+ super(message);
2563
+ this.name = "InternalError";
2564
+ }
2565
+ };
2566
+ var throwInternalError = (message) => {
2567
+ throw new InternalError(message);
2568
+ };
2569
+ var makeClassHandle = (prototype, record) => {
2570
+ if (!record.ptrType || !record.ptr) throwInternalError("makeClassHandle requires ptr and ptrType");
2571
+ if (!!record.smartPtrType !== !!record.smartPtr) throwInternalError("Both smartPtrType and smartPtr must be specified");
2572
+ record.count = { value: 1 };
2573
+ return attachFinalizer(Object.create(prototype, { $$: {
2574
+ value: record,
2575
+ writable: true
2576
+ } }));
2577
+ };
2578
+ function RegisteredPointer_fromWireType(ptr) {
2579
+ var rawPointer = this.getPointee(ptr);
2580
+ if (!rawPointer) {
2581
+ this.destructor(ptr);
2582
+ return null;
2583
+ }
2584
+ var registeredInstance = getInheritedInstance(this.registeredClass, rawPointer);
2585
+ if (void 0 !== registeredInstance) if (0 === registeredInstance.$$.count.value) {
2586
+ registeredInstance.$$.ptr = rawPointer;
2587
+ registeredInstance.$$.smartPtr = ptr;
2588
+ return registeredInstance["clone"]();
2589
+ } else {
2590
+ var rv = registeredInstance["clone"]();
2591
+ this.destructor(ptr);
2592
+ return rv;
2593
+ }
2594
+ function makeDefaultHandle() {
2595
+ if (this.isSmartPointer) return makeClassHandle(this.registeredClass.instancePrototype, {
2596
+ ptrType: this.pointeeType,
2597
+ ptr: rawPointer,
2598
+ smartPtrType: this,
2599
+ smartPtr: ptr
2600
+ });
2601
+ else return makeClassHandle(this.registeredClass.instancePrototype, {
2602
+ ptrType: this,
2603
+ ptr
2604
+ });
2605
+ }
2606
+ var registeredPointerRecord = registeredPointers[this.registeredClass.getActualType(rawPointer)];
2607
+ if (!registeredPointerRecord) return makeDefaultHandle.call(this);
2608
+ var toType;
2609
+ if (this.isConst) toType = registeredPointerRecord.constPointerType;
2610
+ else toType = registeredPointerRecord.pointerType;
2611
+ var dp = downcastPointer(rawPointer, this.registeredClass, toType.registeredClass);
2612
+ if (dp === null) return makeDefaultHandle.call(this);
2613
+ if (this.isSmartPointer) return makeClassHandle(toType.registeredClass.instancePrototype, {
2614
+ ptrType: toType,
2615
+ ptr: dp,
2616
+ smartPtrType: this,
2617
+ smartPtr: ptr
2618
+ });
2619
+ else return makeClassHandle(toType.registeredClass.instancePrototype, {
2620
+ ptrType: toType,
2621
+ ptr: dp
2622
+ });
2623
+ }
2624
+ var init_RegisteredPointer = () => {
2625
+ Object.assign(RegisteredPointer.prototype, {
2626
+ getPointee(ptr) {
2627
+ if (this.rawGetPointee) ptr = this.rawGetPointee(ptr);
2628
+ return ptr;
2629
+ },
2630
+ destructor(ptr) {
2631
+ this.rawDestructor?.(ptr);
2632
+ },
2633
+ readValueFromPointer: readPointer,
2634
+ fromWireType: RegisteredPointer_fromWireType
2635
+ });
2636
+ };
2637
+ function RegisteredPointer(name, registeredClass, isReference, isConst, isSmartPointer, pointeeType, sharingPolicy, rawGetPointee, rawConstructor, rawShare, rawDestructor) {
2638
+ this.name = name;
2639
+ this.registeredClass = registeredClass;
2640
+ this.isReference = isReference;
2641
+ this.isConst = isConst;
2642
+ this.isSmartPointer = isSmartPointer;
2643
+ this.pointeeType = pointeeType;
2644
+ this.sharingPolicy = sharingPolicy;
2645
+ this.rawGetPointee = rawGetPointee;
2646
+ this.rawConstructor = rawConstructor;
2647
+ this.rawShare = rawShare;
2648
+ this.rawDestructor = rawDestructor;
2649
+ if (!isSmartPointer && registeredClass.baseClass === void 0) if (isConst) {
2650
+ this.toWireType = constNoSmartPtrRawPointerToWireType;
2651
+ this.destructorFunction = null;
2652
+ } else {
2653
+ this.toWireType = nonConstNoSmartPtrRawPointerToWireType;
2654
+ this.destructorFunction = null;
2655
+ }
2656
+ else this.toWireType = genericPointerToWireType;
2657
+ }
2658
+ var replacePublicSymbol = (name, value, numArguments) => {
2659
+ if (!Module.hasOwnProperty(name)) throwInternalError("Replacing nonexistent public symbol");
2660
+ if (void 0 !== Module[name].overloadTable && void 0 !== numArguments) Module[name].overloadTable[numArguments] = value;
2661
+ else {
2662
+ Module[name] = value;
2663
+ Module[name].argCount = numArguments;
2664
+ }
2665
+ };
2666
+ var wasmTableMirror = [];
2667
+ var getWasmTableEntry = (funcPtr) => {
2668
+ var func = wasmTableMirror[funcPtr];
2669
+ if (!func) wasmTableMirror[funcPtr] = func = wasmTable.get(funcPtr);
2670
+ return func;
2671
+ };
2672
+ var dynCall = (sig, ptr, args = [], promising = false) => {
2673
+ var rtn = getWasmTableEntry(ptr)(...args);
2674
+ function convert(rtn$1) {
2675
+ return sig[0] == "p" ? rtn$1 >>> 0 : rtn$1;
2676
+ }
2677
+ return convert(rtn);
2678
+ };
2679
+ var getDynCaller = (sig, ptr, promising = false) => (...args) => dynCall(sig, ptr, args, promising);
2680
+ var embind__requireFunction = (signature, rawFunction, isAsync = false) => {
2681
+ signature = AsciiToString(signature);
2682
+ function makeDynCaller() {
2683
+ if (signature.includes("p")) return getDynCaller(signature, rawFunction, isAsync);
2684
+ return getWasmTableEntry(rawFunction);
2685
+ }
2686
+ var fp = makeDynCaller();
2687
+ if (typeof fp != "function") throwBindingError(`unknown function pointer with signature ${signature}: ${rawFunction}`);
2688
+ return fp;
2689
+ };
2690
+ class UnboundTypeError extends Error {}
2691
+ var getTypeName = (type) => {
2692
+ var ptr = ___getTypeName(type);
2693
+ var rv = AsciiToString(ptr);
2694
+ _free(ptr);
2695
+ return rv;
2696
+ };
2697
+ var throwUnboundTypeError = (message, types) => {
2698
+ var unboundTypes = [];
2699
+ var seen = {};
2700
+ function visit(type) {
2701
+ if (seen[type]) return;
2702
+ if (registeredTypes[type]) return;
2703
+ if (typeDependencies[type]) {
2704
+ typeDependencies[type].forEach(visit);
2705
+ return;
2706
+ }
2707
+ unboundTypes.push(type);
2708
+ seen[type] = true;
2709
+ }
2710
+ types.forEach(visit);
2711
+ throw new UnboundTypeError(`${message}: ` + unboundTypes.map(getTypeName).join([", "]));
2712
+ };
2713
+ var whenDependentTypesAreResolved = (myTypes, dependentTypes, getTypeConverters) => {
2714
+ myTypes.forEach((type) => typeDependencies[type] = dependentTypes);
2715
+ function onComplete(typeConverters$1) {
2716
+ var myTypeConverters = getTypeConverters(typeConverters$1);
2717
+ if (myTypeConverters.length !== myTypes.length) throwInternalError("Mismatched type converter count");
2718
+ for (var i = 0; i < myTypes.length; ++i) registerType(myTypes[i], myTypeConverters[i]);
2719
+ }
2720
+ var typeConverters = new Array(dependentTypes.length);
2721
+ var unregisteredTypes = [];
2722
+ var registered = 0;
2723
+ for (let [i, dt] of dependentTypes.entries()) if (registeredTypes.hasOwnProperty(dt)) typeConverters[i] = registeredTypes[dt];
2724
+ else {
2725
+ unregisteredTypes.push(dt);
2726
+ if (!awaitingDependencies.hasOwnProperty(dt)) awaitingDependencies[dt] = [];
2727
+ awaitingDependencies[dt].push(() => {
2728
+ typeConverters[i] = registeredTypes[dt];
2729
+ ++registered;
2730
+ if (registered === unregisteredTypes.length) onComplete(typeConverters);
2731
+ });
2732
+ }
2733
+ if (0 === unregisteredTypes.length) onComplete(typeConverters);
2734
+ };
2735
+ function __embind_register_class(rawType, rawPointerType, rawConstPointerType, baseClassRawType, getActualTypeSignature, getActualType, upcastSignature, upcast, downcastSignature, downcast, name, destructorSignature, rawDestructor) {
2736
+ rawType >>>= 0;
2737
+ rawPointerType >>>= 0;
2738
+ rawConstPointerType >>>= 0;
2739
+ baseClassRawType >>>= 0;
2740
+ getActualTypeSignature >>>= 0;
2741
+ getActualType >>>= 0;
2742
+ upcastSignature >>>= 0;
2743
+ upcast >>>= 0;
2744
+ downcastSignature >>>= 0;
2745
+ downcast >>>= 0;
2746
+ name >>>= 0;
2747
+ destructorSignature >>>= 0;
2748
+ rawDestructor >>>= 0;
2749
+ name = AsciiToString(name);
2750
+ getActualType = embind__requireFunction(getActualTypeSignature, getActualType);
2751
+ upcast &&= embind__requireFunction(upcastSignature, upcast);
2752
+ downcast &&= embind__requireFunction(downcastSignature, downcast);
2753
+ rawDestructor = embind__requireFunction(destructorSignature, rawDestructor);
2754
+ var legalFunctionName = makeLegalFunctionName(name);
2755
+ exposePublicSymbol(legalFunctionName, function() {
2756
+ throwUnboundTypeError(`Cannot construct ${name} due to unbound types`, [baseClassRawType]);
2757
+ });
2758
+ whenDependentTypesAreResolved([
2759
+ rawType,
2760
+ rawPointerType,
2761
+ rawConstPointerType
2762
+ ], baseClassRawType ? [baseClassRawType] : [], (base) => {
2763
+ base = base[0];
2764
+ var baseClass;
2765
+ var basePrototype;
2766
+ if (baseClassRawType) {
2767
+ baseClass = base.registeredClass;
2768
+ basePrototype = baseClass.instancePrototype;
2769
+ } else basePrototype = ClassHandle.prototype;
2770
+ var constructor = createNamedFunction(name, function(...args) {
2771
+ if (Object.getPrototypeOf(this) !== instancePrototype) throw new BindingError(`Use 'new' to construct ${name}`);
2772
+ if (void 0 === registeredClass.constructor_body) throw new BindingError(`${name} has no accessible constructor`);
2773
+ var body = registeredClass.constructor_body[args.length];
2774
+ if (void 0 === body) throw new BindingError(`Tried to invoke ctor of ${name} with invalid number of parameters (${args.length}) - expected (${Object.keys(registeredClass.constructor_body).toString()}) parameters instead!`);
2775
+ return body.apply(this, args);
2776
+ });
2777
+ var instancePrototype = Object.create(basePrototype, { constructor: { value: constructor } });
2778
+ constructor.prototype = instancePrototype;
2779
+ var registeredClass = new RegisteredClass(name, constructor, instancePrototype, rawDestructor, baseClass, getActualType, upcast, downcast);
2780
+ if (registeredClass.baseClass) {
2781
+ registeredClass.baseClass.__derivedClasses ??= [];
2782
+ registeredClass.baseClass.__derivedClasses.push(registeredClass);
2783
+ }
2784
+ var referenceConverter = new RegisteredPointer(name, registeredClass, true, false, false);
2785
+ var pointerConverter = new RegisteredPointer(name + "*", registeredClass, false, false, false);
2786
+ var constPointerConverter = new RegisteredPointer(name + " const*", registeredClass, false, true, false);
2787
+ registeredPointers[rawType] = {
2788
+ pointerType: pointerConverter,
2789
+ constPointerType: constPointerConverter
2790
+ };
2791
+ replacePublicSymbol(legalFunctionName, constructor);
2792
+ return [
2793
+ referenceConverter,
2794
+ pointerConverter,
2795
+ constPointerConverter
2796
+ ];
2797
+ });
2798
+ }
2799
+ var heap32VectorToArray = (count, firstElement) => {
2800
+ var array = [];
2801
+ for (var i = 0; i < count; i++) array.push(HEAPU32[firstElement + i * 4 >>> 2 >>> 0]);
2802
+ return array;
2803
+ };
2804
+ var runDestructors = (destructors) => {
2805
+ while (destructors.length) {
2806
+ var ptr = destructors.pop();
2807
+ destructors.pop()(ptr);
2808
+ }
2809
+ };
2810
+ function usesDestructorStack(argTypes) {
2811
+ for (var i = 1; i < argTypes.length; ++i) if (argTypes[i] !== null && argTypes[i].destructorFunction === void 0) return true;
2812
+ return false;
2813
+ }
2814
+ function createJsInvoker(argTypes, isClassMethodFunc, returns, isAsync) {
2815
+ var needsDestructorStack = usesDestructorStack(argTypes);
2816
+ var argCount = argTypes.length - 2;
2817
+ var argsList = [];
2818
+ var argsListWired = ["fn"];
2819
+ if (isClassMethodFunc) argsListWired.push("thisWired");
2820
+ for (var i = 0; i < argCount; ++i) {
2821
+ argsList.push(`arg${i}`);
2822
+ argsListWired.push(`arg${i}Wired`);
2823
+ }
2824
+ argsList = argsList.join(",");
2825
+ argsListWired = argsListWired.join(",");
2826
+ var invokerFnBody = `return function (${argsList}) {\n`;
2827
+ if (needsDestructorStack) invokerFnBody += "var destructors = [];\n";
2828
+ var dtorStack = needsDestructorStack ? "destructors" : "null";
2829
+ var args1 = [
2830
+ "humanName",
2831
+ "throwBindingError",
2832
+ "invoker",
2833
+ "fn",
2834
+ "runDestructors",
2835
+ "fromRetWire",
2836
+ "toClassParamWire"
2837
+ ];
2838
+ if (isClassMethodFunc) invokerFnBody += `var thisWired = toClassParamWire(${dtorStack}, this);\n`;
2839
+ for (var i = 0; i < argCount; ++i) {
2840
+ var argName = `toArg${i}Wire`;
2841
+ invokerFnBody += `var arg${i}Wired = ${argName}(${dtorStack}, arg${i});\n`;
2842
+ args1.push(argName);
2843
+ }
2844
+ invokerFnBody += (returns || isAsync ? "var rv = " : "") + `invoker(${argsListWired});\n`;
2845
+ if (needsDestructorStack) invokerFnBody += "runDestructors(destructors);\n";
2846
+ else for (var i = isClassMethodFunc ? 1 : 2; i < argTypes.length; ++i) {
2847
+ var paramName = i === 1 ? "thisWired" : "arg" + (i - 2) + "Wired";
2848
+ if (argTypes[i].destructorFunction !== null) {
2849
+ invokerFnBody += `${paramName}_dtor(${paramName});\n`;
2850
+ args1.push(`${paramName}_dtor`);
2851
+ }
2852
+ }
2853
+ if (returns) invokerFnBody += "var ret = fromRetWire(rv);\nreturn ret;\n";
2854
+ invokerFnBody += "}\n";
2855
+ return new Function(args1, invokerFnBody);
2856
+ }
2857
+ function craftInvokerFunction(humanName, argTypes, classType, cppInvokerFunc, cppTargetFunc, isAsync) {
2858
+ var argCount = argTypes.length;
2859
+ if (argCount < 2) throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!");
2860
+ var isClassMethodFunc = argTypes[1] !== null && classType !== null;
2861
+ var needsDestructorStack = usesDestructorStack(argTypes);
2862
+ var returns = !argTypes[0].isVoid;
2863
+ var retType = argTypes[0];
2864
+ var instType = argTypes[1];
2865
+ var closureArgs = [
2866
+ humanName,
2867
+ throwBindingError,
2868
+ cppInvokerFunc,
2869
+ cppTargetFunc,
2870
+ runDestructors,
2871
+ retType.fromWireType.bind(retType),
2872
+ instType?.toWireType.bind(instType)
2873
+ ];
2874
+ for (var i = 2; i < argCount; ++i) {
2875
+ var argType = argTypes[i];
2876
+ closureArgs.push(argType.toWireType.bind(argType));
2877
+ }
2878
+ if (!needsDestructorStack) {
2879
+ for (var i = isClassMethodFunc ? 1 : 2; i < argTypes.length; ++i) if (argTypes[i].destructorFunction !== null) closureArgs.push(argTypes[i].destructorFunction);
2880
+ }
2881
+ return createNamedFunction(humanName, createJsInvoker(argTypes, isClassMethodFunc, returns, isAsync)(...closureArgs));
2882
+ }
2883
+ var __embind_register_class_constructor = function(rawClassType, argCount, rawArgTypesAddr, invokerSignature, invoker, rawConstructor) {
2884
+ rawClassType >>>= 0;
2885
+ rawArgTypesAddr >>>= 0;
2886
+ invokerSignature >>>= 0;
2887
+ invoker >>>= 0;
2888
+ rawConstructor >>>= 0;
2889
+ var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr);
2890
+ invoker = embind__requireFunction(invokerSignature, invoker);
2891
+ whenDependentTypesAreResolved([], [rawClassType], (classType) => {
2892
+ classType = classType[0];
2893
+ var humanName = `constructor ${classType.name}`;
2894
+ if (void 0 === classType.registeredClass.constructor_body) classType.registeredClass.constructor_body = [];
2895
+ if (void 0 !== classType.registeredClass.constructor_body[argCount - 1]) throw new BindingError(`Cannot register multiple constructors with identical number of parameters (${argCount - 1}) for class '${classType.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);
2896
+ classType.registeredClass.constructor_body[argCount - 1] = () => {
2897
+ throwUnboundTypeError(`Cannot construct ${classType.name} due to unbound types`, rawArgTypes);
2898
+ };
2899
+ whenDependentTypesAreResolved([], rawArgTypes, (argTypes) => {
2900
+ argTypes.splice(1, 0, null);
2901
+ classType.registeredClass.constructor_body[argCount - 1] = craftInvokerFunction(humanName, argTypes, null, invoker, rawConstructor);
2902
+ return [];
2903
+ });
2904
+ return [];
2905
+ });
2906
+ };
2907
+ var getFunctionName = (signature) => {
2908
+ signature = signature.trim();
2909
+ const argsIndex = signature.indexOf("(");
2910
+ if (argsIndex === -1) return signature;
2911
+ return signature.slice(0, argsIndex);
2912
+ };
2913
+ var __embind_register_class_function = function(rawClassType, methodName, argCount, rawArgTypesAddr, invokerSignature, rawInvoker, context, isPureVirtual, isAsync, isNonnullReturn) {
2914
+ rawClassType >>>= 0;
2915
+ methodName >>>= 0;
2916
+ rawArgTypesAddr >>>= 0;
2917
+ invokerSignature >>>= 0;
2918
+ rawInvoker >>>= 0;
2919
+ context >>>= 0;
2920
+ var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr);
2921
+ methodName = AsciiToString(methodName);
2922
+ methodName = getFunctionName(methodName);
2923
+ rawInvoker = embind__requireFunction(invokerSignature, rawInvoker, isAsync);
2924
+ whenDependentTypesAreResolved([], [rawClassType], (classType) => {
2925
+ classType = classType[0];
2926
+ var humanName = `${classType.name}.${methodName}`;
2927
+ if (methodName.startsWith("@@")) methodName = Symbol[methodName.substring(2)];
2928
+ if (isPureVirtual) classType.registeredClass.pureVirtualFunctions.push(methodName);
2929
+ function unboundTypesHandler() {
2930
+ throwUnboundTypeError(`Cannot call ${humanName} due to unbound types`, rawArgTypes);
2931
+ }
2932
+ var proto = classType.registeredClass.instancePrototype;
2933
+ var method = proto[methodName];
2934
+ if (void 0 === method || void 0 === method.overloadTable && method.className !== classType.name && method.argCount === argCount - 2) {
2935
+ unboundTypesHandler.argCount = argCount - 2;
2936
+ unboundTypesHandler.className = classType.name;
2937
+ proto[methodName] = unboundTypesHandler;
2938
+ } else {
2939
+ ensureOverloadTable(proto, methodName, humanName);
2940
+ proto[methodName].overloadTable[argCount - 2] = unboundTypesHandler;
2941
+ }
2942
+ whenDependentTypesAreResolved([], rawArgTypes, (argTypes) => {
2943
+ var memberFunction = craftInvokerFunction(humanName, argTypes, classType, rawInvoker, context, isAsync);
2944
+ if (void 0 === proto[methodName].overloadTable) {
2945
+ memberFunction.argCount = argCount - 2;
2946
+ proto[methodName] = memberFunction;
2947
+ } else proto[methodName].overloadTable[argCount - 2] = memberFunction;
2948
+ return [];
2949
+ });
2950
+ return [];
2951
+ });
2952
+ };
2953
+ var emval_freelist = [];
2954
+ var emval_handles = [
2955
+ 0,
2956
+ 1,
2957
+ ,
2958
+ 1,
2959
+ null,
2960
+ 1,
2961
+ true,
2962
+ 1,
2963
+ false,
2964
+ 1
2965
+ ];
2966
+ function __emval_decref(handle) {
2967
+ handle >>>= 0;
2968
+ if (handle > 9 && 0 === --emval_handles[handle + 1]) {
2969
+ emval_handles[handle] = void 0;
2970
+ emval_freelist.push(handle);
2971
+ }
2972
+ }
2973
+ var Emval = {
2974
+ toValue: (handle) => {
2975
+ if (!handle) throwBindingError(`Cannot use deleted val. handle = ${handle}`);
2976
+ return emval_handles[handle];
2977
+ },
2978
+ toHandle: (value) => {
2979
+ switch (value) {
2980
+ case void 0: return 2;
2981
+ case null: return 4;
2982
+ case true: return 6;
2983
+ case false: return 8;
2984
+ default: {
2985
+ const handle = emval_freelist.pop() || emval_handles.length;
2986
+ emval_handles[handle] = value;
2987
+ emval_handles[handle + 1] = 1;
2988
+ return handle;
2989
+ }
2990
+ }
2991
+ }
2992
+ };
2993
+ var EmValType = {
2994
+ name: "emscripten::val",
2995
+ fromWireType: (handle) => {
2996
+ var rv = Emval.toValue(handle);
2997
+ __emval_decref(handle);
2998
+ return rv;
2999
+ },
3000
+ toWireType: (destructors, value) => Emval.toHandle(value),
3001
+ readValueFromPointer: readPointer,
3002
+ destructorFunction: null
3003
+ };
3004
+ function __embind_register_emval(rawType) {
3005
+ rawType >>>= 0;
3006
+ return registerType(rawType, EmValType);
3007
+ }
3008
+ var floatReadValueFromPointer = (name, width) => {
3009
+ switch (width) {
3010
+ case 4: return function(pointer) {
3011
+ return this.fromWireType(HEAPF32[pointer >>> 2 >>> 0]);
3012
+ };
3013
+ case 8: return function(pointer) {
3014
+ return this.fromWireType(HEAPF64[pointer >>> 3 >>> 0]);
3015
+ };
3016
+ default: throw new TypeError(`invalid float width (${width}): ${name}`);
3017
+ }
3018
+ };
3019
+ var __embind_register_float = function(rawType, name, size) {
3020
+ rawType >>>= 0;
3021
+ name >>>= 0;
3022
+ size >>>= 0;
3023
+ name = AsciiToString(name);
3024
+ registerType(rawType, {
3025
+ name,
3026
+ fromWireType: (value) => value,
3027
+ toWireType: (destructors, value) => value,
3028
+ readValueFromPointer: floatReadValueFromPointer(name, size),
3029
+ destructorFunction: null
3030
+ });
3031
+ };
3032
+ function __embind_register_function(name, argCount, rawArgTypesAddr, signature, rawInvoker, fn, isAsync, isNonnullReturn) {
3033
+ name >>>= 0;
3034
+ rawArgTypesAddr >>>= 0;
3035
+ signature >>>= 0;
3036
+ rawInvoker >>>= 0;
3037
+ fn >>>= 0;
3038
+ var argTypes = heap32VectorToArray(argCount, rawArgTypesAddr);
3039
+ name = AsciiToString(name);
3040
+ name = getFunctionName(name);
3041
+ rawInvoker = embind__requireFunction(signature, rawInvoker, isAsync);
3042
+ exposePublicSymbol(name, function() {
3043
+ throwUnboundTypeError(`Cannot call ${name} due to unbound types`, argTypes);
3044
+ }, argCount - 1);
3045
+ whenDependentTypesAreResolved([], argTypes, (argTypes$1) => {
3046
+ var invokerArgsArray = [argTypes$1[0], null].concat(argTypes$1.slice(1));
3047
+ replacePublicSymbol(name, craftInvokerFunction(name, invokerArgsArray, null, rawInvoker, fn, isAsync), argCount - 1);
3048
+ return [];
3049
+ });
3050
+ }
3051
+ var __embind_register_integer = function(primitiveType, name, size, minRange, maxRange) {
3052
+ primitiveType >>>= 0;
3053
+ name >>>= 0;
3054
+ size >>>= 0;
3055
+ name = AsciiToString(name);
3056
+ const isUnsignedType = minRange === 0;
3057
+ let fromWireType = (value) => value;
3058
+ if (isUnsignedType) {
3059
+ var bitshift = 32 - 8 * size;
3060
+ fromWireType = (value) => value << bitshift >>> bitshift;
3061
+ maxRange = fromWireType(maxRange);
3062
+ }
3063
+ registerType(primitiveType, {
3064
+ name,
3065
+ fromWireType,
3066
+ toWireType: (destructors, value) => value,
3067
+ readValueFromPointer: integerReadValueFromPointer(name, size, minRange !== 0),
3068
+ destructorFunction: null
3069
+ });
3070
+ };
3071
+ var installIndexedIterator = (proto, sizeMethodName, getMethodName) => {
3072
+ const makeIterator = (size, getValue) => {
3073
+ let index = 0;
3074
+ return {
3075
+ next() {
3076
+ if (index >= size) return { done: true };
3077
+ const current = index;
3078
+ index++;
3079
+ return {
3080
+ value: getValue(current),
3081
+ done: false
3082
+ };
3083
+ },
3084
+ [Symbol.iterator]() {
3085
+ return this;
3086
+ }
3087
+ };
3088
+ };
3089
+ if (!proto[Symbol.iterator]) proto[Symbol.iterator] = function() {
3090
+ return makeIterator(this[sizeMethodName](), (i) => this[getMethodName](i));
3091
+ };
3092
+ };
3093
+ var __embind_register_iterable = function(rawClassType, rawElementType, sizeMethodName, getMethodName) {
3094
+ rawClassType >>>= 0;
3095
+ rawElementType >>>= 0;
3096
+ sizeMethodName >>>= 0;
3097
+ getMethodName >>>= 0;
3098
+ sizeMethodName = AsciiToString(sizeMethodName);
3099
+ getMethodName = AsciiToString(getMethodName);
3100
+ whenDependentTypesAreResolved([], [rawClassType, rawElementType], (types) => {
3101
+ const classType = types[0];
3102
+ installIndexedIterator(classType.registeredClass.instancePrototype, sizeMethodName, getMethodName);
3103
+ return [];
3104
+ });
3105
+ };
3106
+ function __embind_register_memory_view(rawType, dataTypeIndex, name) {
3107
+ rawType >>>= 0;
3108
+ name >>>= 0;
3109
+ var TA = [
3110
+ Int8Array,
3111
+ Uint8Array,
3112
+ Int16Array,
3113
+ Uint16Array,
3114
+ Int32Array,
3115
+ Uint32Array,
3116
+ Float32Array,
3117
+ Float64Array,
3118
+ BigInt64Array,
3119
+ BigUint64Array
3120
+ ][dataTypeIndex];
3121
+ function decodeMemoryView(handle) {
3122
+ var size = HEAPU32[handle >>> 2 >>> 0];
3123
+ var data = HEAPU32[handle + 4 >>> 2 >>> 0];
3124
+ return new TA(HEAP8.buffer, data, size);
3125
+ }
3126
+ name = AsciiToString(name);
3127
+ registerType(rawType, {
3128
+ name,
3129
+ fromWireType: decodeMemoryView,
3130
+ readValueFromPointer: decodeMemoryView
3131
+ }, { ignoreDuplicateRegistrations: true });
3132
+ }
3133
+ var EmValOptionalType = Object.assign({ optional: true }, EmValType);
3134
+ function __embind_register_optional(rawOptionalType, rawType) {
3135
+ rawOptionalType >>>= 0;
3136
+ rawType >>>= 0;
3137
+ registerType(rawOptionalType, EmValOptionalType);
3138
+ }
3139
+ var stringToUTF8 = (str, outPtr, maxBytesToWrite) => stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);
3140
+ function __embind_register_std_string(rawType, name) {
3141
+ rawType >>>= 0;
3142
+ name >>>= 0;
3143
+ name = AsciiToString(name);
3144
+ var stdStringIsUTF8 = true;
3145
+ registerType(rawType, {
3146
+ name,
3147
+ fromWireType(value) {
3148
+ var length = HEAPU32[value >>> 2 >>> 0];
3149
+ var payload = value + 4;
3150
+ var str;
3151
+ if (stdStringIsUTF8) str = UTF8ToString(payload, length, true);
3152
+ else {
3153
+ str = "";
3154
+ for (var i = 0; i < length; ++i) str += String.fromCharCode(HEAPU8[payload + i >>> 0]);
3155
+ }
3156
+ _free(value);
3157
+ return str;
3158
+ },
3159
+ toWireType(destructors, value) {
3160
+ if (value instanceof ArrayBuffer) value = new Uint8Array(value);
3161
+ var length;
3162
+ var valueIsOfTypeString = typeof value == "string";
3163
+ if (!(valueIsOfTypeString || ArrayBuffer.isView(value) && value.BYTES_PER_ELEMENT == 1)) throwBindingError("Cannot pass non-string to std::string");
3164
+ if (stdStringIsUTF8 && valueIsOfTypeString) length = lengthBytesUTF8(value);
3165
+ else length = value.length;
3166
+ var base = _malloc(4 + length + 1);
3167
+ var ptr = base + 4;
3168
+ HEAPU32[base >>> 2 >>> 0] = length;
3169
+ if (valueIsOfTypeString) if (stdStringIsUTF8) stringToUTF8(value, ptr, length + 1);
3170
+ else for (var i = 0; i < length; ++i) {
3171
+ var charCode = value.charCodeAt(i);
3172
+ if (charCode > 255) {
3173
+ _free(base);
3174
+ throwBindingError("String has UTF-16 code units that do not fit in 8 bits");
3175
+ }
3176
+ HEAPU8[ptr + i >>> 0] = charCode;
3177
+ }
3178
+ else HEAPU8.set(value, ptr >>> 0);
3179
+ if (destructors !== null) destructors.push(_free, base);
3180
+ return base;
3181
+ },
3182
+ readValueFromPointer: readPointer,
3183
+ destructorFunction(ptr) {
3184
+ _free(ptr);
3185
+ }
3186
+ });
3187
+ }
3188
+ var UTF16Decoder = globalThis.TextDecoder ? new TextDecoder("utf-16le") : void 0;
3189
+ var UTF16ToString = (ptr, maxBytesToRead, ignoreNul) => {
3190
+ var idx = ptr >>> 1;
3191
+ var endIdx = findStringEnd(HEAPU16, idx, maxBytesToRead / 2, ignoreNul);
3192
+ if (endIdx - idx > 16 && UTF16Decoder) return UTF16Decoder.decode(HEAPU16.subarray(idx >>> 0, endIdx >>> 0));
3193
+ var str = "";
3194
+ for (var i = idx; i < endIdx; ++i) {
3195
+ var codeUnit = HEAPU16[i >>> 0];
3196
+ str += String.fromCharCode(codeUnit);
3197
+ }
3198
+ return str;
3199
+ };
3200
+ var stringToUTF16 = (str, outPtr, maxBytesToWrite) => {
3201
+ maxBytesToWrite ??= 2147483647;
3202
+ if (maxBytesToWrite < 2) return 0;
3203
+ maxBytesToWrite -= 2;
3204
+ var startPtr = outPtr;
3205
+ var numCharsToWrite = maxBytesToWrite < str.length * 2 ? maxBytesToWrite / 2 : str.length;
3206
+ for (var i = 0; i < numCharsToWrite; ++i) {
3207
+ var codeUnit = str.charCodeAt(i);
3208
+ HEAP16[outPtr >>> 1 >>> 0] = codeUnit;
3209
+ outPtr += 2;
3210
+ }
3211
+ HEAP16[outPtr >>> 1 >>> 0] = 0;
3212
+ return outPtr - startPtr;
3213
+ };
3214
+ var lengthBytesUTF16 = (str) => str.length * 2;
3215
+ var UTF32ToString = (ptr, maxBytesToRead, ignoreNul) => {
3216
+ var str = "";
3217
+ var startIdx = ptr >>> 2;
3218
+ for (var i = 0; !(i >= maxBytesToRead / 4); i++) {
3219
+ var utf32 = HEAPU32[startIdx + i >>> 0];
3220
+ if (!utf32 && !ignoreNul) break;
3221
+ str += String.fromCodePoint(utf32);
3222
+ }
3223
+ return str;
3224
+ };
3225
+ var stringToUTF32 = (str, outPtr, maxBytesToWrite) => {
3226
+ outPtr >>>= 0;
3227
+ maxBytesToWrite ??= 2147483647;
3228
+ if (maxBytesToWrite < 4) return 0;
3229
+ var startPtr = outPtr;
3230
+ var endPtr = startPtr + maxBytesToWrite - 4;
3231
+ for (var i = 0; i < str.length; ++i) {
3232
+ var codePoint = str.codePointAt(i);
3233
+ if (codePoint > 65535) i++;
3234
+ HEAP32[outPtr >>> 2 >>> 0] = codePoint;
3235
+ outPtr += 4;
3236
+ if (outPtr + 4 > endPtr) break;
3237
+ }
3238
+ HEAP32[outPtr >>> 2 >>> 0] = 0;
3239
+ return outPtr - startPtr;
3240
+ };
3241
+ var lengthBytesUTF32 = (str) => {
3242
+ var len = 0;
3243
+ for (var i = 0; i < str.length; ++i) {
3244
+ if (str.codePointAt(i) > 65535) i++;
3245
+ len += 4;
3246
+ }
3247
+ return len;
3248
+ };
3249
+ function __embind_register_std_wstring(rawType, charSize, name) {
3250
+ rawType >>>= 0;
3251
+ charSize >>>= 0;
3252
+ name >>>= 0;
3253
+ name = AsciiToString(name);
3254
+ var decodeString, encodeString, lengthBytesUTF;
3255
+ if (charSize === 2) {
3256
+ decodeString = UTF16ToString;
3257
+ encodeString = stringToUTF16;
3258
+ lengthBytesUTF = lengthBytesUTF16;
3259
+ } else {
3260
+ decodeString = UTF32ToString;
3261
+ encodeString = stringToUTF32;
3262
+ lengthBytesUTF = lengthBytesUTF32;
3263
+ }
3264
+ registerType(rawType, {
3265
+ name,
3266
+ fromWireType: (value) => {
3267
+ var length = HEAPU32[value >>> 2 >>> 0];
3268
+ var str = decodeString(value + 4, length * charSize, true);
3269
+ _free(value);
3270
+ return str;
3271
+ },
3272
+ toWireType: (destructors, value) => {
3273
+ if (!(typeof value == "string")) throwBindingError(`Cannot pass non-string to C++ string type ${name}`);
3274
+ var length = lengthBytesUTF(value);
3275
+ var ptr = _malloc(4 + length + charSize);
3276
+ HEAPU32[ptr >>> 2 >>> 0] = length / charSize;
3277
+ encodeString(value, ptr + 4, length + charSize);
3278
+ if (destructors !== null) destructors.push(_free, ptr);
3279
+ return ptr;
3280
+ },
3281
+ readValueFromPointer: readPointer,
3282
+ destructorFunction(ptr) {
3283
+ _free(ptr);
3284
+ }
3285
+ });
3286
+ }
3287
+ var __embind_register_void = function(rawType, name) {
3288
+ rawType >>>= 0;
3289
+ name >>>= 0;
3290
+ name = AsciiToString(name);
3291
+ registerType(rawType, {
3292
+ isVoid: true,
3293
+ name,
3294
+ fromWireType: () => void 0,
3295
+ toWireType: (destructors, o) => void 0
3296
+ });
3297
+ };
3298
+ var emval_methodCallers = [];
3299
+ var emval_addMethodCaller = (caller) => {
3300
+ var id = emval_methodCallers.length;
3301
+ emval_methodCallers.push(caller);
3302
+ return id;
3303
+ };
3304
+ var requireRegisteredType = (rawType, humanName) => {
3305
+ var impl = registeredTypes[rawType];
3306
+ if (void 0 === impl) throwBindingError(`${humanName} has unknown type ${getTypeName(rawType)}`);
3307
+ return impl;
3308
+ };
3309
+ var emval_lookupTypes = (argCount, argTypes) => {
3310
+ var a = new Array(argCount);
3311
+ for (var i = 0; i < argCount; ++i) a[i] = requireRegisteredType(HEAPU32[argTypes + i * 4 >>> 2 >>> 0], `parameter ${i}`);
3312
+ return a;
3313
+ };
3314
+ var emval_returnValue = (toReturnWire, destructorsRef, handle) => {
3315
+ var destructors = [];
3316
+ var result = toReturnWire(destructors, handle);
3317
+ if (destructors.length) HEAPU32[destructorsRef >>> 2 >>> 0] = Emval.toHandle(destructors);
3318
+ return result;
3319
+ };
3320
+ var emval_symbols = {};
3321
+ var getStringOrSymbol = (address) => {
3322
+ var symbol = emval_symbols[address];
3323
+ if (symbol === void 0) return AsciiToString(address);
3324
+ return symbol;
3325
+ };
3326
+ var __emval_create_invoker = function(argCount, argTypesPtr, kind) {
3327
+ argTypesPtr >>>= 0;
3328
+ var GenericWireTypeSize = 8;
3329
+ var [retType, ...argTypes] = emval_lookupTypes(argCount, argTypesPtr);
3330
+ var toReturnWire = retType.toWireType.bind(retType);
3331
+ var argFromPtr = argTypes.map((type) => type.readValueFromPointer.bind(type));
3332
+ argCount--;
3333
+ var captures = { toValue: Emval.toValue };
3334
+ var args = argFromPtr.map((argFromPtr$1, i) => {
3335
+ var captureName = `argFromPtr${i}`;
3336
+ captures[captureName] = argFromPtr$1;
3337
+ return `${captureName}(args${i ? "+" + i * GenericWireTypeSize : ""})`;
3338
+ });
3339
+ var functionBody;
3340
+ switch (kind) {
3341
+ case 0:
3342
+ functionBody = "toValue(handle)";
3343
+ break;
3344
+ case 2:
3345
+ functionBody = "new (toValue(handle))";
3346
+ break;
3347
+ case 3:
3348
+ functionBody = "";
3349
+ break;
3350
+ case 1:
3351
+ captures["getStringOrSymbol"] = getStringOrSymbol;
3352
+ functionBody = "toValue(handle)[getStringOrSymbol(methodName)]";
3353
+ break;
3354
+ }
3355
+ functionBody += `(${args})`;
3356
+ if (!retType.isVoid) {
3357
+ captures["toReturnWire"] = toReturnWire;
3358
+ captures["emval_returnValue"] = emval_returnValue;
3359
+ functionBody = `return emval_returnValue(toReturnWire, destructorsRef, ${functionBody})`;
3360
+ }
3361
+ functionBody = `return function (handle, methodName, destructorsRef, args) {\n${functionBody}\n}`;
3362
+ var invokerFunction = new Function(Object.keys(captures), functionBody)(...Object.values(captures));
3363
+ return emval_addMethodCaller(createNamedFunction(`methodCaller<(${argTypes.map((t) => t.name)}) => ${retType.name}>`, invokerFunction));
3364
+ };
3365
+ function __emval_get_global(name) {
3366
+ name >>>= 0;
3367
+ if (!name) return Emval.toHandle(globalThis);
3368
+ name = getStringOrSymbol(name);
3369
+ return Emval.toHandle(globalThis[name]);
3370
+ }
3371
+ function __emval_get_module_property(name) {
3372
+ name >>>= 0;
3373
+ name = getStringOrSymbol(name);
3374
+ return Emval.toHandle(Module[name]);
3375
+ }
3376
+ function __emval_get_property(handle, key) {
3377
+ handle >>>= 0;
3378
+ key >>>= 0;
3379
+ handle = Emval.toValue(handle);
3380
+ key = Emval.toValue(key);
3381
+ return Emval.toHandle(handle[key]);
3382
+ }
3383
+ function __emval_incref(handle) {
3384
+ handle >>>= 0;
3385
+ if (handle > 9) emval_handles[handle + 1] += 1;
3386
+ }
3387
+ function __emval_instanceof(object, constructor) {
3388
+ object >>>= 0;
3389
+ constructor >>>= 0;
3390
+ object = Emval.toValue(object);
3391
+ constructor = Emval.toValue(constructor);
3392
+ return object instanceof constructor;
3393
+ }
3394
+ function __emval_invoke(caller, handle, methodName, destructorsRef, args) {
3395
+ caller >>>= 0;
3396
+ handle >>>= 0;
3397
+ methodName >>>= 0;
3398
+ destructorsRef >>>= 0;
3399
+ args >>>= 0;
3400
+ return emval_methodCallers[caller](handle, methodName, destructorsRef, args);
3401
+ }
3402
+ function __emval_new_array() {
3403
+ return Emval.toHandle([]);
3404
+ }
3405
+ function __emval_new_cstring(v) {
3406
+ v >>>= 0;
3407
+ return Emval.toHandle(getStringOrSymbol(v));
3408
+ }
3409
+ function __emval_new_object() {
3410
+ return Emval.toHandle({});
3411
+ }
3412
+ function __emval_run_destructors(handle) {
3413
+ handle >>>= 0;
3414
+ runDestructors(Emval.toValue(handle));
3415
+ __emval_decref(handle);
3416
+ }
3417
+ function __emval_set_property(handle, key, value) {
3418
+ handle >>>= 0;
3419
+ key >>>= 0;
3420
+ value >>>= 0;
3421
+ handle = Emval.toValue(handle);
3422
+ key = Emval.toValue(key);
3423
+ value = Emval.toValue(value);
3424
+ handle[key] = value;
3425
+ }
3426
+ function __emval_typeof(handle) {
3427
+ handle >>>= 0;
3428
+ handle = Emval.toValue(handle);
3429
+ return Emval.toHandle(typeof handle);
3430
+ }
3431
+ var isLeapYear = (year) => year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
3432
+ var MONTH_DAYS_LEAP_CUMULATIVE = [
3433
+ 0,
3434
+ 31,
3435
+ 60,
3436
+ 91,
3437
+ 121,
3438
+ 152,
3439
+ 182,
3440
+ 213,
3441
+ 244,
3442
+ 274,
3443
+ 305,
3444
+ 335
3445
+ ];
3446
+ var MONTH_DAYS_REGULAR_CUMULATIVE = [
3447
+ 0,
3448
+ 31,
3449
+ 59,
3450
+ 90,
3451
+ 120,
3452
+ 151,
3453
+ 181,
3454
+ 212,
3455
+ 243,
3456
+ 273,
3457
+ 304,
3458
+ 334
3459
+ ];
3460
+ var ydayFromDate = (date) => {
3461
+ return (isLeapYear(date.getFullYear()) ? MONTH_DAYS_LEAP_CUMULATIVE : MONTH_DAYS_REGULAR_CUMULATIVE)[date.getMonth()] + date.getDate() - 1;
3462
+ };
3463
+ function __localtime_js(time, tmPtr) {
3464
+ time = bigintToI53Checked(time);
3465
+ tmPtr >>>= 0;
3466
+ var date = /* @__PURE__ */ new Date(time * 1e3);
3467
+ HEAP32[tmPtr >>> 2 >>> 0] = date.getSeconds();
3468
+ HEAP32[tmPtr + 4 >>> 2 >>> 0] = date.getMinutes();
3469
+ HEAP32[tmPtr + 8 >>> 2 >>> 0] = date.getHours();
3470
+ HEAP32[tmPtr + 12 >>> 2 >>> 0] = date.getDate();
3471
+ HEAP32[tmPtr + 16 >>> 2 >>> 0] = date.getMonth();
3472
+ HEAP32[tmPtr + 20 >>> 2 >>> 0] = date.getFullYear() - 1900;
3473
+ HEAP32[tmPtr + 24 >>> 2 >>> 0] = date.getDay();
3474
+ var yday = ydayFromDate(date) | 0;
3475
+ HEAP32[tmPtr + 28 >>> 2 >>> 0] = yday;
3476
+ HEAP32[tmPtr + 36 >>> 2 >>> 0] = -(date.getTimezoneOffset() * 60);
3477
+ var start = new Date(date.getFullYear(), 0, 1);
3478
+ var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset();
3479
+ var winterOffset = start.getTimezoneOffset();
3480
+ var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset)) | 0;
3481
+ HEAP32[tmPtr + 32 >>> 2 >>> 0] = dst;
3482
+ }
3483
+ function __mmap_js(len, prot, flags, fd, offset, allocated, addr) {
3484
+ len >>>= 0;
3485
+ offset = bigintToI53Checked(offset);
3486
+ allocated >>>= 0;
3487
+ addr >>>= 0;
3488
+ try {
3489
+ var stream = SYSCALLS.getStreamFromFD(fd);
3490
+ var res = FS.mmap(stream, len, offset, prot, flags);
3491
+ var ptr = res.ptr;
3492
+ HEAP32[allocated >>> 2 >>> 0] = res.allocated;
3493
+ HEAPU32[addr >>> 2 >>> 0] = ptr;
3494
+ return 0;
3495
+ } catch (e) {
3496
+ if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e;
3497
+ return -e.errno;
3498
+ }
3499
+ }
3500
+ function __munmap_js(addr, len, prot, flags, fd, offset) {
3501
+ addr >>>= 0;
3502
+ len >>>= 0;
3503
+ offset = bigintToI53Checked(offset);
3504
+ try {
3505
+ var stream = SYSCALLS.getStreamFromFD(fd);
3506
+ if (prot & 2) SYSCALLS.doMsync(addr, stream, len, flags, offset);
3507
+ } catch (e) {
3508
+ if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e;
3509
+ return -e.errno;
3510
+ }
3511
+ }
3512
+ var __tzset_js = function(timezone, daylight, std_name, dst_name) {
3513
+ timezone >>>= 0;
3514
+ daylight >>>= 0;
3515
+ std_name >>>= 0;
3516
+ dst_name >>>= 0;
3517
+ var currentYear = (/* @__PURE__ */ new Date()).getFullYear();
3518
+ var winter = new Date(currentYear, 0, 1);
3519
+ var summer = new Date(currentYear, 6, 1);
3520
+ var winterOffset = winter.getTimezoneOffset();
3521
+ var summerOffset = summer.getTimezoneOffset();
3522
+ var stdTimezoneOffset = Math.max(winterOffset, summerOffset);
3523
+ HEAPU32[timezone >>> 2 >>> 0] = stdTimezoneOffset * 60;
3524
+ HEAP32[daylight >>> 2 >>> 0] = Number(winterOffset != summerOffset);
3525
+ var extractZone = (timezoneOffset) => {
3526
+ var sign = timezoneOffset >= 0 ? "-" : "+";
3527
+ var absOffset = Math.abs(timezoneOffset);
3528
+ return `UTC${sign}${String(Math.floor(absOffset / 60)).padStart(2, "0")}${String(absOffset % 60).padStart(2, "0")}`;
3529
+ };
3530
+ var winterName = extractZone(winterOffset);
3531
+ var summerName = extractZone(summerOffset);
3532
+ if (summerOffset < winterOffset) {
3533
+ stringToUTF8(winterName, std_name, 17);
3534
+ stringToUTF8(summerName, dst_name, 17);
3535
+ } else {
3536
+ stringToUTF8(winterName, dst_name, 17);
3537
+ stringToUTF8(summerName, std_name, 17);
3538
+ }
3539
+ };
3540
+ var _emscripten_get_now = () => performance.now();
3541
+ var _emscripten_date_now = () => Date.now();
3542
+ var nowIsMonotonic = 1;
3543
+ var checkWasiClock = (clock_id) => clock_id >= 0 && clock_id <= 3;
3544
+ function _clock_time_get(clk_id, ignored_precision, ptime) {
3545
+ ignored_precision = bigintToI53Checked(ignored_precision);
3546
+ ptime >>>= 0;
3547
+ if (!checkWasiClock(clk_id)) return 28;
3548
+ var now;
3549
+ if (clk_id === 0) now = _emscripten_date_now();
3550
+ else if (nowIsMonotonic) now = _emscripten_get_now();
3551
+ else return 52;
3552
+ var nsec = Math.round(now * 1e3 * 1e3);
3553
+ HEAP64[ptime >>> 3 >>> 0] = BigInt(nsec);
3554
+ return 0;
3555
+ }
3556
+ var getHeapMax = () => 4294901760;
3557
+ var growMemory = (size) => {
3558
+ var pages = (size - wasmMemory.buffer.byteLength + 65535) / 65536 | 0;
3559
+ try {
3560
+ wasmMemory.grow(pages);
3561
+ updateMemoryViews();
3562
+ return 1;
3563
+ } catch (e) {}
3564
+ };
3565
+ function _emscripten_resize_heap(requestedSize) {
3566
+ requestedSize >>>= 0;
3567
+ var oldSize = HEAPU8.length;
3568
+ var maxHeapSize = getHeapMax();
3569
+ if (requestedSize > maxHeapSize) return false;
3570
+ for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {
3571
+ var overGrownHeapSize = oldSize * (1 + .2 / cutDown);
3572
+ overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);
3573
+ if (growMemory(Math.min(maxHeapSize, alignMemory(Math.max(requestedSize, overGrownHeapSize), 65536)))) return true;
3574
+ }
3575
+ return false;
3576
+ }
3577
+ var ENV = {};
3578
+ var getExecutableName = () => thisProgram || "./this.program";
3579
+ var getEnvStrings = () => {
3580
+ if (!getEnvStrings.strings) {
3581
+ var env = {
3582
+ USER: "web_user",
3583
+ LOGNAME: "web_user",
3584
+ PATH: "/",
3585
+ PWD: "/",
3586
+ HOME: "/home/web_user",
3587
+ LANG: (globalThis.navigator?.language ?? "C").replace("-", "_") + ".UTF-8",
3588
+ _: getExecutableName()
3589
+ };
3590
+ for (var x in ENV) if (ENV[x] === void 0) delete env[x];
3591
+ else env[x] = ENV[x];
3592
+ var strings = [];
3593
+ for (var x in env) strings.push(`${x}=${env[x]}`);
3594
+ getEnvStrings.strings = strings;
3595
+ }
3596
+ return getEnvStrings.strings;
3597
+ };
3598
+ function _environ_get(__environ, environ_buf) {
3599
+ __environ >>>= 0;
3600
+ environ_buf >>>= 0;
3601
+ var bufSize = 0;
3602
+ var envp = 0;
3603
+ for (var string of getEnvStrings()) {
3604
+ var ptr = environ_buf + bufSize;
3605
+ HEAPU32[__environ + envp >>> 2 >>> 0] = ptr;
3606
+ bufSize += stringToUTF8(string, ptr, Infinity) + 1;
3607
+ envp += 4;
3608
+ }
3609
+ return 0;
3610
+ }
3611
+ function _environ_sizes_get(penviron_count, penviron_buf_size) {
3612
+ penviron_count >>>= 0;
3613
+ penviron_buf_size >>>= 0;
3614
+ var strings = getEnvStrings();
3615
+ HEAPU32[penviron_count >>> 2 >>> 0] = strings.length;
3616
+ var bufSize = 0;
3617
+ for (var string of strings) bufSize += lengthBytesUTF8(string) + 1;
3618
+ HEAPU32[penviron_buf_size >>> 2 >>> 0] = bufSize;
3619
+ return 0;
3620
+ }
3621
+ function _fd_close(fd) {
3622
+ try {
3623
+ var stream = SYSCALLS.getStreamFromFD(fd);
3624
+ FS.close(stream);
3625
+ return 0;
3626
+ } catch (e) {
3627
+ if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e;
3628
+ return e.errno;
3629
+ }
3630
+ }
3631
+ var doReadv = (stream, iov, iovcnt, offset) => {
3632
+ var ret = 0;
3633
+ for (var i = 0; i < iovcnt; i++) {
3634
+ var ptr = HEAPU32[iov >>> 2 >>> 0];
3635
+ var len = HEAPU32[iov + 4 >>> 2 >>> 0];
3636
+ iov += 8;
3637
+ var curr = FS.read(stream, HEAP8, ptr, len, offset);
3638
+ if (curr < 0) return -1;
3639
+ ret += curr;
3640
+ if (curr < len) break;
3641
+ if (typeof offset != "undefined") offset += curr;
3642
+ }
3643
+ return ret;
3644
+ };
3645
+ function _fd_read(fd, iov, iovcnt, pnum) {
3646
+ iov >>>= 0;
3647
+ iovcnt >>>= 0;
3648
+ pnum >>>= 0;
3649
+ try {
3650
+ var num = doReadv(SYSCALLS.getStreamFromFD(fd), iov, iovcnt);
3651
+ HEAPU32[pnum >>> 2 >>> 0] = num;
3652
+ return 0;
3653
+ } catch (e) {
3654
+ if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e;
3655
+ return e.errno;
3656
+ }
3657
+ }
3658
+ function _fd_seek(fd, offset, whence, newOffset) {
3659
+ offset = bigintToI53Checked(offset);
3660
+ newOffset >>>= 0;
3661
+ try {
3662
+ if (isNaN(offset)) return 61;
3663
+ var stream = SYSCALLS.getStreamFromFD(fd);
3664
+ FS.llseek(stream, offset, whence);
3665
+ HEAP64[newOffset >>> 3 >>> 0] = BigInt(stream.position);
3666
+ if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null;
3667
+ return 0;
3668
+ } catch (e) {
3669
+ if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e;
3670
+ return e.errno;
3671
+ }
3672
+ }
3673
+ var doWritev = (stream, iov, iovcnt, offset) => {
3674
+ var ret = 0;
3675
+ for (var i = 0; i < iovcnt; i++) {
3676
+ var ptr = HEAPU32[iov >>> 2 >>> 0];
3677
+ var len = HEAPU32[iov + 4 >>> 2 >>> 0];
3678
+ iov += 8;
3679
+ var curr = FS.write(stream, HEAP8, ptr, len, offset);
3680
+ if (curr < 0) return -1;
3681
+ ret += curr;
3682
+ if (curr < len) break;
3683
+ if (typeof offset != "undefined") offset += curr;
3684
+ }
3685
+ return ret;
3686
+ };
3687
+ function _fd_write(fd, iov, iovcnt, pnum) {
3688
+ iov >>>= 0;
3689
+ iovcnt >>>= 0;
3690
+ pnum >>>= 0;
3691
+ try {
3692
+ var num = doWritev(SYSCALLS.getStreamFromFD(fd), iov, iovcnt);
3693
+ HEAPU32[pnum >>> 2 >>> 0] = num;
3694
+ return 0;
3695
+ } catch (e) {
3696
+ if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e;
3697
+ return e.errno;
3698
+ }
3699
+ }
3700
+ function _random_get(buffer, size) {
3701
+ buffer >>>= 0;
3702
+ size >>>= 0;
3703
+ try {
3704
+ randomFill(HEAPU8.subarray(buffer >>> 0, buffer + size >>> 0));
3705
+ return 0;
3706
+ } catch (e) {
3707
+ if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e;
3708
+ return e.errno;
3709
+ }
3710
+ }
3711
+ FS.createPreloadedFile = FS_createPreloadedFile;
3712
+ FS.preloadFile = FS_preloadFile;
3713
+ FS.staticInit();
3714
+ init_ClassHandle();
3715
+ init_RegisteredPointer();
3716
+ if (Module["noExitRuntime"]) Module["noExitRuntime"];
3717
+ if (Module["preloadPlugins"]) preloadPlugins = Module["preloadPlugins"];
3718
+ if (Module["print"]) out = Module["print"];
3719
+ if (Module["printErr"]) err = Module["printErr"];
3720
+ if (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"];
3721
+ if (Module["arguments"]) Module["arguments"];
3722
+ if (Module["thisProgram"]) thisProgram = Module["thisProgram"];
3723
+ if (Module["preInit"]) {
3724
+ if (typeof Module["preInit"] == "function") Module["preInit"] = [Module["preInit"]];
3725
+ while (Module["preInit"].length > 0) Module["preInit"].shift()();
3726
+ }
3727
+ var ___getTypeName, _malloc, _free, _emscripten_builtin_memalign, _emscripten_stack_get_end, ___trap, _emscripten_stack_init, wasmMemory, wasmTable;
3728
+ function assignWasmExports(wasmExports$1) {
3729
+ ___getTypeName = wasmExports$1["Z"];
3730
+ _malloc = wasmExports$1["$"];
3731
+ _free = wasmExports$1["aa"];
3732
+ _emscripten_builtin_memalign = wasmExports$1["ba"];
3733
+ _emscripten_stack_get_end = wasmExports$1["ca"];
3734
+ ___trap = wasmExports$1["da"];
3735
+ _emscripten_stack_init = wasmExports$1["ea"];
3736
+ wasmMemory = wasmExports$1["X"];
3737
+ wasmTable = wasmExports$1["_"];
3738
+ }
3739
+ var wasmImports = {
3740
+ r: ___syscall_fcntl64,
3741
+ Q: ___syscall_fstat64,
3742
+ R: ___syscall_ioctl,
3743
+ P: ___syscall_newfstatat,
3744
+ B: ___syscall_openat,
3745
+ F: __abort_js,
3746
+ E: __embind_register_bigint,
3747
+ V: __embind_register_bool,
3748
+ l: __embind_register_class,
3749
+ p: __embind_register_class_constructor,
3750
+ a: __embind_register_class_function,
3751
+ T: __embind_register_emval,
3752
+ D: __embind_register_float,
3753
+ f: __embind_register_function,
3754
+ k: __embind_register_integer,
3755
+ x: __embind_register_iterable,
3756
+ h: __embind_register_memory_view,
3757
+ y: __embind_register_optional,
3758
+ U: __embind_register_std_string,
3759
+ t: __embind_register_std_wstring,
3760
+ W: __embind_register_void,
3761
+ d: __emval_create_invoker,
3762
+ b: __emval_decref,
3763
+ u: __emval_get_global,
3764
+ m: __emval_get_module_property,
3765
+ j: __emval_get_property,
3766
+ g: __emval_incref,
3767
+ o: __emval_instanceof,
3768
+ e: __emval_invoke,
3769
+ v: __emval_new_array,
3770
+ i: __emval_new_cstring,
3771
+ q: __emval_new_object,
3772
+ c: __emval_run_destructors,
3773
+ n: __emval_set_property,
3774
+ w: __emval_typeof,
3775
+ K: __localtime_js,
3776
+ I: __mmap_js,
3777
+ J: __munmap_js,
3778
+ L: __tzset_js,
3779
+ S: _clock_time_get,
3780
+ C: _emscripten_date_now,
3781
+ H: _emscripten_resize_heap,
3782
+ N: _environ_get,
3783
+ O: _environ_sizes_get,
3784
+ s: _fd_close,
3785
+ z: _fd_read,
3786
+ M: _fd_seek,
3787
+ A: _fd_write,
3788
+ G: _random_get
3789
+ };
3790
+ function applySignatureConversions(wasmExports$1) {
3791
+ wasmExports$1 = Object.assign({}, wasmExports$1);
3792
+ var makeWrapper_pp = (f) => (a0) => f(a0) >>> 0;
3793
+ var makeWrapper_ppp = (f) => (a0, a1) => f(a0, a1) >>> 0;
3794
+ var makeWrapper_p = (f) => () => f() >>> 0;
3795
+ wasmExports$1["Z"] = makeWrapper_pp(wasmExports$1["Z"]);
3796
+ wasmExports$1["$"] = makeWrapper_pp(wasmExports$1["$"]);
3797
+ wasmExports$1["ba"] = makeWrapper_ppp(wasmExports$1["ba"]);
3798
+ wasmExports$1["ca"] = makeWrapper_p(wasmExports$1["ca"]);
3799
+ wasmExports$1["emscripten_stack_get_base"] = makeWrapper_p(wasmExports$1["emscripten_stack_get_base"]);
3800
+ wasmExports$1["_emscripten_stack_alloc"] = makeWrapper_pp(wasmExports$1["_emscripten_stack_alloc"]);
3801
+ wasmExports$1["emscripten_stack_get_current"] = makeWrapper_p(wasmExports$1["emscripten_stack_get_current"]);
3802
+ return wasmExports$1;
3803
+ }
3804
+ function stackCheckInit() {
3805
+ _emscripten_stack_init();
3806
+ writeStackCookie();
3807
+ }
3808
+ function run() {
3809
+ if (runDependencies > 0) {
3810
+ dependenciesFulfilled = run;
3811
+ return;
3812
+ }
3813
+ stackCheckInit();
3814
+ preRun();
3815
+ if (runDependencies > 0) {
3816
+ dependenciesFulfilled = run;
3817
+ return;
3818
+ }
3819
+ function doRun() {
3820
+ Module["calledRun"] = true;
3821
+ if (ABORT) return;
3822
+ initRuntime();
3823
+ readyPromiseResolve?.(Module);
3824
+ Module["onRuntimeInitialized"]?.();
3825
+ postRun();
3826
+ }
3827
+ if (Module["setStatus"]) {
3828
+ Module["setStatus"]("Running...");
3829
+ setTimeout(() => {
3830
+ setTimeout(() => Module["setStatus"](""), 1);
3831
+ doRun();
3832
+ }, 1);
3833
+ } else doRun();
3834
+ checkStackCookie();
3835
+ }
3836
+ var wasmExports = await createWasm();
3837
+ run();
3838
+ if (runtimeInitialized) moduleRtn = Module;
3839
+ else moduleRtn = new Promise((resolve, reject) => {
3840
+ readyPromiseResolve = resolve;
3841
+ readyPromiseReject = reject;
3842
+ });
3843
+ return moduleRtn;
3844
+ };
3845
+ })();
3846
+ if (typeof exports === "object" && typeof module === "object") {
3847
+ module.exports = initRDKitModule$1;
3848
+ module.exports.default = initRDKitModule$1;
3849
+ } else if (typeof define === "function" && define["amd"]) define([], () => initRDKitModule$1);
3850
+ }));
3851
+
3852
+ //#endregion
3853
+ //#region MinimalLib/dist/RDKit_minimal.wasm?url
3854
+ var import_RDKit_minimal = /* @__PURE__ */ __toESM(require_RDKit_minimal(), 1);
3855
+ var RDKit_minimal_default = "daf0220ca047b78d.wasm";
3856
+
3857
+ //#endregion
3858
+ //#region src/mol-array.ts
3859
+ /**
3860
+ * An array of {@link Mol} instances with batch lifecycle management.
3861
+ *
3862
+ * Extends the native `Array` so all standard array methods (indexing,
3863
+ * iteration, `map`, `filter`, …) work out of the box.
3864
+ *
3865
+ * Call {@link delete} (or use the `using` keyword) to delete every `Mol`
3866
+ * in the array at once.
3867
+ */
3868
+ var MolArray = class extends Array {
3869
+ /** Deletes every Mol in this array */
3870
+ delete() {
3871
+ for (const mol of this) mol.delete();
3872
+ }
3873
+ /** Disposable support — allows use with the `using` keyword */
3874
+ [Symbol.dispose]() {
3875
+ this.delete();
3876
+ }
3877
+ };
3878
+ /**
3879
+ * Builds a temporary WASM MolList from an array of Mol instances.
3880
+ * The caller is responsible for deleting the returned MolList.
3881
+ *
3882
+ * @internal
3883
+ */
3884
+ function fromMolArraytoMolList(mols, module$1) {
3885
+ const list = new module$1.MolList();
3886
+ for (const mol of mols) list.append(mol.jsMol);
3887
+ return list;
3888
+ }
3889
+ /**
3890
+ * Builds a temporary WASM MolList from an array of Mol instances.
3891
+ * The caller is responsible for deleting the returned MolList.
3892
+ *
3893
+ * @internal
3894
+ */
3895
+ function fromStringArraytoMolList(mols, module$1, isQuery = false) {
3896
+ const list = new module$1.MolList();
3897
+ for (const s of mols) {
3898
+ const mol = isQuery ? module$1.get_qmol(s) : module$1.get_mol(s);
3899
+ if (!mol) continue;
3900
+ list.append(mol);
3901
+ mol.delete();
3902
+ }
3903
+ return list;
3904
+ }
3905
+ const isMolArray = (arr) => arr.length > 0 && arr[0] instanceof Mol;
3906
+
3907
+ //#endregion
3908
+ //#region src/formats/cxsmiles.ts
3909
+ /**
3910
+ * Converts wrapper-level CX SMILES options to the raw JSON format expected
3911
+ * by the RDKit MinimalLib API.
3912
+ */
3913
+ const buildCxSmilesRawOptions = (options) => {
3914
+ const { fields: cxSmilesFields, restoreBondDirOption, ...smilesOpts } = options;
3915
+ const raw = { ...smilesOpts };
3916
+ if (cxSmilesFields !== void 0) if (cxSmilesFields.length === 0) raw.CX_NONE = true;
3917
+ else for (const field of cxSmilesFields) raw[`CX_${field}`] = true;
3918
+ if (restoreBondDirOption !== void 0) raw.restoreBondDirOption = restoreBondDirOption === "clear" ? "RestoreBondDirOptionClear" : "RestoreBondDirOptionTrue";
3919
+ return raw;
3920
+ };
3921
+
3922
+ //#endregion
3923
+ //#region src/mol.ts
3924
+ /**
3925
+ * A wrapper around RDKit's JSMol object providing a typed, camelCase API.
3926
+ *
3927
+ * @remarks
3928
+ * Mol instances are created via RDKit.getMol or RDKit.getQMol,
3929
+ * not directly by consumers. The underlying `jsMol` is accessible for advanced use cases.
3930
+ *
3931
+ * Implements `Disposable` for use with the `using` keyword:
3932
+ * ```ts
3933
+ * using mol = rdkit.getMol('c1ccccc1')!;
3934
+ * const svg = mol.getSvg();
3935
+ * // mol is automatically deleted when the scope exits
3936
+ * ```
3937
+ */
3938
+ var Mol = class Mol {
3939
+ #jsMol;
3940
+ #module;
3941
+ constructor(jsMol, module$1) {
3942
+ this.#jsMol = jsMol;
3943
+ this.#module = module$1;
3944
+ }
3945
+ /**
3946
+ * The underlying JSMol object for direct access to the raw API.
3947
+ * @throws If the molecule has been deleted.
3948
+ */
3949
+ get jsMol() {
3950
+ if (!this.#jsMol) throw new Error("Mol has been deleted");
3951
+ return this.#jsMol;
3952
+ }
3953
+ /**
3954
+ * Resolves a substructure query argument to a JSMol.
3955
+ * If the query is a string, creates a temporary query molecule.
3956
+ * @returns A tuple of [jsMol, shouldDelete] where shouldDelete indicates
3957
+ * whether the caller is responsible for deleting the JSMol.
3958
+ */
3959
+ resolveQuery(query) {
3960
+ if (query instanceof Mol) return [query.jsMol, false];
3961
+ const qmol = this.#module.get_qmol(query);
3962
+ if (!qmol) throw new Error(`Invalid SMARTS query: ${query}`);
3963
+ return [qmol, true];
3964
+ }
3965
+ /** Returns the canonical SMILES string */
3966
+ getSmiles(options) {
3967
+ return options ? this.jsMol.get_smiles(JSON.stringify(options)) : this.jsMol.get_smiles();
3968
+ }
3969
+ /** Returns the Chemaxon Extended SMILES string */
3970
+ getCxSmiles(options) {
3971
+ if (!options) return this.jsMol.get_cxsmiles();
3972
+ return this.jsMol.get_cxsmiles(JSON.stringify(buildCxSmilesRawOptions(options)));
3973
+ }
3974
+ /** Returns the SMARTS string */
3975
+ getSmarts(options) {
3976
+ return options ? this.jsMol.get_smarts(JSON.stringify(options)) : this.jsMol.get_smarts();
3977
+ }
3978
+ /** Returns the Chemaxon Extended SMARTS string */
3979
+ getCxSmarts(options) {
3980
+ if (!options) return this.jsMol.get_cxsmarts();
3981
+ return this.jsMol.get_cxsmarts(JSON.stringify(buildCxSmilesRawOptions(options)));
3982
+ }
3983
+ /**
3984
+ * Returns the V2000 Molfile string
3985
+ * @param options - Molblock generation options
3986
+ */
3987
+ getMolblock(options) {
3988
+ const mol = this.jsMol;
3989
+ return options ? mol.get_molblock(JSON.stringify(options)) : mol.get_molblock();
3990
+ }
3991
+ /**
3992
+ * Returns the V3000 Molfile string
3993
+ * @param options - Molblock generation options
3994
+ */
3995
+ getV2KMolblock(options) {
3996
+ const mol = this.jsMol;
3997
+ return options ? mol.get_v2Kmolblock(JSON.stringify(options)) : mol.get_v2Kmolblock();
3998
+ }
3999
+ /**
4000
+ * Returns the V3000 Molfile string
4001
+ * @param options - Molblock generation options
4002
+ */
4003
+ getV3KMolblock(options) {
4004
+ const mol = this.jsMol;
4005
+ return options ? mol.get_v3Kmolblock(JSON.stringify(options)) : mol.get_v3Kmolblock();
4006
+ }
4007
+ /**
4008
+ * Returns the InChI string
4009
+ * @param args - Optional InChI CLI arguments
4010
+ * @example mol.getInchi(["FixedH", "RecMet", "SaveOpt", "SUU", "SLUUD"])
4011
+ */
4012
+ getInchi(args) {
4013
+ const mol = this.jsMol;
4014
+ return args ? mol.get_inchi(`-${args.join(" -")}`) : mol.get_inchi();
4015
+ }
4016
+ /**
4017
+ * Returns the InChIKey string
4018
+ * @param args - Optional InChI CLI arguments
4019
+ * @example mol.getInchi(["FixedH", "RecMet", "SaveOpt", "SUU", "SLUUD"])
4020
+ */
4021
+ getInchikey(args) {
4022
+ const inchi = this.getInchi(args);
4023
+ return this.#module.get_inchikey_for_inchi(inchi);
4024
+ }
4025
+ /** Returns the parsed JSON representation of the molecule */
4026
+ getJson() {
4027
+ return JSON.parse(this.jsMol.get_json());
4028
+ }
4029
+ /** Returns an unsigned integer array representation of the molecule */
4030
+ getAsUint8Array() {
4031
+ return this.jsMol.get_as_uint8array();
4032
+ }
4033
+ /**
4034
+ * Returns an SVG depiction of the molecule
4035
+ *
4036
+ * @param options - Drawing options including dimensions and highlighting.
4037
+ * When omitted, uses RDKit defaults (250×200).
4038
+ *
4039
+ * @example
4040
+ * // Default SVG
4041
+ * const svg = mol.getSvg();
4042
+ *
4043
+ * // Custom size with atom indices
4044
+ * const svg = mol.getSvg({ width: 400, height: 300, addAtomIndices: true });
4045
+ *
4046
+ * // With atom highlighting
4047
+ * const svg = mol.getSvg({ atoms: [0, 1, 2], highlightColour: [1, 0, 0, 1] });
4048
+ */
4049
+ getSvg(options) {
4050
+ const mol = this.jsMol;
4051
+ if (!options) return mol.get_svg();
4052
+ return mol.get_svg_with_highlights(JSON.stringify(options));
4053
+ }
4054
+ /**
4055
+ * Returns the first substructure match
4056
+ *
4057
+ * @param query - A Mol instance or a SMARTS string to use as query
4058
+ * @returns The matched atom and bond indices
4059
+ */
4060
+ getSubstructMatch(query) {
4061
+ const mol = this.jsMol;
4062
+ const [qmol, shouldDelete] = this.resolveQuery(query);
4063
+ try {
4064
+ const matchJson = mol.get_substruct_match(qmol);
4065
+ if (matchJson === "{}") return {
4066
+ atoms: [],
4067
+ bonds: []
4068
+ };
4069
+ return JSON.parse(matchJson);
4070
+ } finally {
4071
+ if (shouldDelete) qmol.delete();
4072
+ }
4073
+ }
4074
+ /**
4075
+ * Returns all substructure matches
4076
+ *
4077
+ * @param query - A Mol instance or a SMARTS string to use as query
4078
+ * @returns An array of matched atom and bond indices
4079
+ */
4080
+ getSubstructMatches(query) {
4081
+ const mol = this.jsMol;
4082
+ const [qmol, shouldDelete] = this.resolveQuery(query);
4083
+ try {
4084
+ const matchesJson = mol.get_substruct_matches(qmol);
4085
+ if (!matchesJson.startsWith("[")) return [];
4086
+ return JSON.parse(matchesJson);
4087
+ } finally {
4088
+ if (shouldDelete) qmol.delete();
4089
+ }
4090
+ }
4091
+ /** Returns molecular descriptors as a typed object */
4092
+ getDescriptors() {
4093
+ try {
4094
+ return JSON.parse(this.jsMol.get_descriptors());
4095
+ } catch {
4096
+ return null;
4097
+ }
4098
+ }
4099
+ /**
4100
+ * Returns the Morgan fingerprint as a bit string
4101
+ * @param options - Fingerprint options
4102
+ */
4103
+ getMorganFp(options) {
4104
+ const mol = this.jsMol;
4105
+ return options ? mol.get_morgan_fp(JSON.stringify(options)) : mol.get_morgan_fp();
4106
+ }
4107
+ /** Returns the pattern fingerprint as a bit string */
4108
+ getPatternFp(options) {
4109
+ const mol = this.jsMol;
4110
+ return options ? mol.get_pattern_fp(JSON.stringify(options)) : mol.get_pattern_fp();
4111
+ }
4112
+ /** Returns the topological torsion fingerprint as a bit string */
4113
+ getTopologicalTorsionFp(options) {
4114
+ const mol = this.jsMol;
4115
+ return options ? mol.get_topological_torsion_fp(JSON.stringify(options)) : mol.get_topological_torsion_fp();
4116
+ }
4117
+ /** Returns the RDKit fingerprint as a bit string */
4118
+ getRdkitFp(options) {
4119
+ const mol = this.jsMol;
4120
+ return options ? mol.get_rdkit_fp(JSON.stringify(options)) : mol.get_rdkit_fp();
4121
+ }
4122
+ /** Returns the atom pair fingerprint as a bit string */
4123
+ getAtomPairFp(options) {
4124
+ const mol = this.jsMol;
4125
+ return options ? mol.get_atom_pair_fp(JSON.stringify(options)) : mol.get_atom_pair_fp();
4126
+ }
4127
+ /** Returns the MACCS fingerprint as a bit string (fixed 167-bit) */
4128
+ getMaccsFp() {
4129
+ return this.jsMol.get_maccs_fp();
4130
+ }
4131
+ /** Returns the Morgan fingerprint as a Uint8Array */
4132
+ getMorganFpAsUint8Array(options) {
4133
+ const mol = this.jsMol;
4134
+ return options ? mol.get_morgan_fp_as_uint8array(JSON.stringify(options)) : mol.get_morgan_fp_as_uint8array();
4135
+ }
4136
+ /** Returns the pattern fingerprint as a Uint8Array */
4137
+ getPatternFpAsUint8Array(options) {
4138
+ const mol = this.jsMol;
4139
+ return options ? mol.get_pattern_fp_as_uint8array(JSON.stringify(options)) : mol.get_pattern_fp_as_uint8array();
4140
+ }
4141
+ /** Returns the topological torsion fingerprint as a Uint8Array */
4142
+ getTopologicalTorsionFpAsUint8Array(options) {
4143
+ const mol = this.jsMol;
4144
+ return options ? mol.get_topological_torsion_fp_as_uint8array(JSON.stringify(options)) : mol.get_topological_torsion_fp_as_uint8array();
4145
+ }
4146
+ /** Returns the RDKit fingerprint as a Uint8Array */
4147
+ getRdkitFpAsUint8Array(options) {
4148
+ const mol = this.jsMol;
4149
+ return options ? mol.get_rdkit_fp_as_uint8array(JSON.stringify(options)) : mol.get_rdkit_fp_as_uint8array();
4150
+ }
4151
+ /** Returns the atom pair fingerprint as a Uint8Array */
4152
+ getAtomPairFpAsUint8Array(options) {
4153
+ const mol = this.jsMol;
4154
+ return options ? mol.get_atom_pair_fp_as_uint8array(JSON.stringify(options)) : mol.get_atom_pair_fp_as_uint8array();
4155
+ }
4156
+ /** Returns the MACCS fingerprint as a Uint8Array */
4157
+ getMaccsFpAsUint8Array() {
4158
+ return this.jsMol.get_maccs_fp_as_uint8array();
4159
+ }
4160
+ /**
4161
+ * Checks whether the molecule has a given property
4162
+ * @param key - Property name
4163
+ */
4164
+ hasProp(key) {
4165
+ return this.jsMol.has_prop(key);
4166
+ }
4167
+ /**
4168
+ * Gets a property value from the molecule
4169
+ * @param key - Property name
4170
+ */
4171
+ getProp(key) {
4172
+ return this.jsMol.get_prop(key);
4173
+ }
4174
+ /**
4175
+ * Sets a property on the molecule
4176
+ * @param key - Property name
4177
+ * @param val - Property value
4178
+ */
4179
+ setProp(key, val) {
4180
+ return this.jsMol.set_prop(key, val);
4181
+ }
4182
+ /**
4183
+ * Clears a property from the molecule
4184
+ * @param key - Property name
4185
+ */
4186
+ clearProp(key) {
4187
+ return this.jsMol.clear_prop(key);
4188
+ }
4189
+ /**
4190
+ * Returns the list of property names
4191
+ * @param options - Filter options
4192
+ */
4193
+ getPropList(options) {
4194
+ const mol = this.jsMol;
4195
+ const sl = options ? mol.get_prop_list(options.includePrivate ?? false, options.includeComputed ?? false) : mol.get_prop_list();
4196
+ const result = [];
4197
+ for (let i = 0; i < sl.size(); i++) result.push(sl.get(i));
4198
+ sl.delete();
4199
+ return result;
4200
+ }
4201
+ /** Returns true if the molecule's structure is valid */
4202
+ isValid() {
4203
+ return this.jsMol.is_valid();
4204
+ }
4205
+ /** Returns the number of atoms in the molecule */
4206
+ getNumAtoms() {
4207
+ return this.jsMol.get_num_atoms();
4208
+ }
4209
+ /** Returns the number of bonds in the molecule */
4210
+ getNumBonds() {
4211
+ return this.jsMol.get_num_bonds();
4212
+ }
4213
+ /** Returns 0 if no coords, 2 for 2D, 3 for 3D */
4214
+ hasCoords() {
4215
+ return this.jsMol.has_coords();
4216
+ }
4217
+ /** Returns stereo tags (CIP codes) for the molecule */
4218
+ getStereoTags() {
4219
+ return JSON.parse(this.jsMol.get_stereo_tags());
4220
+ }
4221
+ /** Returns the V2000 Molfile representation of the aromatic form */
4222
+ getAromaticForm() {
4223
+ return this.jsMol.get_aromatic_form();
4224
+ }
4225
+ /** Returns the V2000 Molfile representation of the Kekule form */
4226
+ getKekuleForm() {
4227
+ return this.jsMol.get_kekule_form();
4228
+ }
4229
+ /** Converts the molecule to aromatic form in place */
4230
+ convertToAromaticForm() {
4231
+ this.jsMol.convert_to_aromatic_form();
4232
+ }
4233
+ /** Converts the molecule to Kekule form in place */
4234
+ convertToKekuleForm() {
4235
+ this.jsMol.convert_to_kekule_form();
4236
+ }
4237
+ /**
4238
+ * Returns a V2000 Molfile string with explicit hydrogens removed
4239
+ * @param options - Options controlling which hydrogens to remove
4240
+ */
4241
+ removeHs(options) {
4242
+ const mol = this.jsMol;
4243
+ return options ? mol.remove_hs(JSON.stringify(options)) : mol.remove_hs();
4244
+ }
4245
+ /**
4246
+ * Removes explicit hydrogens from the molecule in place
4247
+ * @param options - Options controlling which hydrogens to remove
4248
+ */
4249
+ removeHsInPlace(options) {
4250
+ const mol = this.jsMol;
4251
+ return options ? mol.remove_hs_in_place(JSON.stringify(options)) : mol.remove_hs_in_place();
4252
+ }
4253
+ /** Returns a V2000 Molfile string with explicit hydrogens added */
4254
+ addHs() {
4255
+ return this.jsMol.add_hs();
4256
+ }
4257
+ /** Adds explicit hydrogens to the molecule in place */
4258
+ addHsInPlace() {
4259
+ return this.jsMol.add_hs_in_place();
4260
+ }
4261
+ combineWith(other, options) {
4262
+ const mol = this.jsMol;
4263
+ if (options) mol.combine_with(other.jsMol, JSON.stringify(options));
4264
+ else this.jsMol.combine_with(other.jsMol);
4265
+ }
4266
+ zipWith(other, options) {
4267
+ const mol = this.jsMol;
4268
+ const newMol = options ? this.#module.molzip(mol, other.jsMol, JSON.stringify(options)) : this.#module.molzip(mol, other.jsMol);
4269
+ if (!newMol || !newMol.is_valid()) return;
4270
+ mol.delete();
4271
+ this.#jsMol = newMol;
4272
+ }
4273
+ /**
4274
+ * Generates new 2D coordinates for the molecule
4275
+ * @param useCoordGen - Use the CoordGen algorithm
4276
+ */
4277
+ setNewCoords(useCoordGen) {
4278
+ const mol = this.jsMol;
4279
+ return useCoordGen !== void 0 ? mol.set_new_coords(useCoordGen) : mol.set_new_coords();
4280
+ }
4281
+ /**
4282
+ * Returns a V2000 Molfile string with newly generated coordinates
4283
+ * @param useCoordGen - Use the CoordGen algorithm
4284
+ */
4285
+ getNewCoords(useCoordGen) {
4286
+ const mol = this.jsMol;
4287
+ return useCoordGen !== void 0 ? mol.get_new_coords(useCoordGen) : mol.get_new_coords();
4288
+ }
4289
+ /**
4290
+ * Aligns molecule coordinates with a template molecule
4291
+ * @param template - Template molecule to align to
4292
+ * @param options - Alignment options
4293
+ */
4294
+ generateAlignedCoords(template, options) {
4295
+ return this.jsMol.generate_aligned_coords(template.jsMol, JSON.stringify(options ?? {}));
4296
+ }
4297
+ /**
4298
+ * Normalizes the depiction of the molecule
4299
+ * @param options - Normalization options
4300
+ */
4301
+ normalizeDepiction(options) {
4302
+ const mol = this.jsMol;
4303
+ if (!options) return mol.normalize_depiction();
4304
+ const { canonicalize, scaleFactor } = options;
4305
+ if (scaleFactor !== void 0 && canonicalize !== void 0) return mol.normalize_depiction(canonicalize, scaleFactor);
4306
+ if (canonicalize !== void 0) return mol.normalize_depiction(canonicalize);
4307
+ return mol.normalize_depiction();
4308
+ }
4309
+ /**
4310
+ * Straightens the depiction of the molecule
4311
+ * @param smallRotation - Only apply small rotations
4312
+ */
4313
+ straightenDepiction(smallRotation) {
4314
+ this.jsMol.straighten_depiction(smallRotation);
4315
+ }
4316
+ /**
4317
+ * Condenses functional group abbreviations in the molecule
4318
+ * @param options - Abbreviation options
4319
+ */
4320
+ condenseAbbreviations(options) {
4321
+ const mol = this.jsMol;
4322
+ if (!options) return mol.condense_abbreviations();
4323
+ const { maxCoverage, useLinkers } = options;
4324
+ if (maxCoverage !== void 0 && useLinkers !== void 0) return mol.condense_abbreviations(maxCoverage, useLinkers);
4325
+ return mol.condense_abbreviations();
4326
+ }
4327
+ drawToCanvas(canvas, options) {
4328
+ const mol = this.jsMol;
4329
+ if (options) mol.draw_to_canvas_with_highlights(canvas, JSON.stringify(options));
4330
+ else mol.draw_to_canvas(canvas, -1, -1);
4331
+ }
4332
+ /**
4333
+ * Returns the disconnected fragments of the molecule
4334
+ * @warning The `mols` array contains new `Mol` instances that must be
4335
+ * manually deleted by the caller to avoid memory leaks.
4336
+ * @returns An object with atom/fragment mappings and a `MolArray` of fragments
4337
+ */
4338
+ getFrags() {
4339
+ const { mappings, molList } = this.jsMol.get_frags();
4340
+ const parsed = JSON.parse(mappings);
4341
+ const mols = new MolArray();
4342
+ for (let i = 0; i < molList.size(); i++) {
4343
+ const jsMol = molList.at(i);
4344
+ if (jsMol) mols.push(new Mol(jsMol, this.#module));
4345
+ }
4346
+ molList.delete();
4347
+ return {
4348
+ mappings: {
4349
+ atomToFrag: parsed.frags,
4350
+ fragToAtoms: parsed.fragsMolAtomMapping
4351
+ },
4352
+ mols
4353
+ };
4354
+ }
4355
+ /** Returns a copy of the molecule */
4356
+ copy() {
4357
+ return new Mol(this.jsMol.copy(), this.#module);
4358
+ }
4359
+ /**
4360
+ * Deletes the underlying C++ molecule object from memory.
4361
+ *
4362
+ * @see {@link https://emscripten.org/docs/porting/connecting_cpp_and_javascript/embind.html#memory-management | Emscripten docs}
4363
+ */
4364
+ delete() {
4365
+ this.#jsMol?.delete();
4366
+ this.#jsMol = null;
4367
+ }
4368
+ /** Disposable support — allows use with the `using` keyword */
4369
+ [Symbol.dispose]() {
4370
+ this.delete();
4371
+ }
4372
+ };
4373
+
4374
+ //#endregion
4375
+ //#region src/reaction.ts
4376
+ /**
4377
+ * A wrapper around RDKit's JSReaction object providing a typed, camelCase API.
4378
+ *
4379
+ * @remarks
4380
+ * Reaction instances are created via {@link RDKit.getRxn}, not directly by consumers.
4381
+ *
4382
+ * Implements `Disposable` for use with the `using` keyword:
4383
+ * ```ts
4384
+ * using rxn = rdkit.getRxn('[CH3:1][OH:2]>>[CH2:1]=[OH0:2]')!;
4385
+ * const products = rxn.runReactants(['CO']);
4386
+ * ```
4387
+ */
4388
+ var Reaction = class {
4389
+ #jsReaction;
4390
+ #module;
4391
+ constructor(jsReaction, module$1) {
4392
+ this.#jsReaction = jsReaction;
4393
+ this.#module = module$1;
4394
+ }
4395
+ /**
4396
+ * The underlying JSReaction object for direct access to the raw API.
4397
+ * @throws If the reaction has been deleted.
4398
+ */
4399
+ get jsReaction() {
4400
+ if (!this.#jsReaction) throw new Error("Reaction has been deleted");
4401
+ return this.#jsReaction;
4402
+ }
4403
+ /**
4404
+ * Runs the reaction on a set of reactants.
4405
+ *
4406
+ * Returns an array of product sets. Each product set is an array of `Mol`
4407
+ * instances corresponding to one match between the reactants and the
4408
+ * reaction definition.
4409
+ *
4410
+ * **WARNING:** The caller is responsible for deleting each returned `Mol`
4411
+ * (via `.delete()` or `using`) to avoid memory leaks.
4412
+ *
4413
+ * @param reactants - An array of Mol instances or molecule strings
4414
+ * (SMILES, MolBlocks, etc.)
4415
+ * @param maxProducts - Maximum number of product sets to return (default: 1000)
4416
+ * @returns An array of product sets, where each set is an array of Mol instances
4417
+ */
4418
+ runReactants(reactants, maxProducts = 1e3) {
4419
+ let molList;
4420
+ if (isMolArray(reactants)) molList = fromMolArraytoMolList(reactants, this.#module);
4421
+ else molList = fromStringArraytoMolList(reactants, this.#module);
4422
+ const products = this.jsReaction.run_reactants(molList, maxProducts);
4423
+ molList.delete();
4424
+ const result = [];
4425
+ for (let i = 0; i < products.size(); i++) {
4426
+ const productSet = products.get(i);
4427
+ if (!productSet) continue;
4428
+ const mols = new MolArray();
4429
+ productSet.reset();
4430
+ while (!productSet.at_end()) {
4431
+ const jsMol = productSet.next();
4432
+ if (!jsMol) break;
4433
+ mols.push(new Mol(jsMol, this.#module));
4434
+ }
4435
+ productSet.delete();
4436
+ result.push(mols);
4437
+ }
4438
+ products.delete();
4439
+ return result;
4440
+ }
4441
+ /**
4442
+ * Returns an SVG depiction of the reaction
4443
+ *
4444
+ * @param options - Drawing options including highlighting.
4445
+ * When omitted, uses RDKit defaults.
4446
+ */
4447
+ getSvg(options) {
4448
+ const rxn = this.jsReaction;
4449
+ if (!options) return rxn.get_svg();
4450
+ return rxn.get_svg_with_highlights(JSON.stringify(options));
4451
+ }
4452
+ /**
4453
+ * Draws the reaction to an HTML5 canvas with highlighting options
4454
+ * @param canvas - Target canvas element
4455
+ * @param options - Drawing options including dimensions and highlighting
4456
+ */
4457
+ drawToCanvas(canvas, options) {
4458
+ const rxn = this.jsReaction;
4459
+ if (!options) rxn.draw_to_canvas(canvas, -1, -1);
4460
+ else rxn.draw_to_canvas_with_highlights(canvas, JSON.stringify(options));
4461
+ }
4462
+ /**
4463
+ * Deletes the underlying C++ reaction object from memory.
4464
+ *
4465
+ * @see {@link https://emscripten.org/docs/porting/connecting_cpp_and_javascript/embind.html#memory-management | Emscripten docs}
4466
+ */
4467
+ delete() {
4468
+ this.#jsReaction?.delete();
4469
+ this.#jsReaction = null;
4470
+ }
4471
+ /** Disposable support — allows use with the `using` keyword */
4472
+ [Symbol.dispose]() {
4473
+ this.delete();
4474
+ }
4475
+ };
4476
+
4477
+ //#endregion
4478
+ //#region src/rgd.ts
4479
+ /**
4480
+ * Performs R-Group Decomposition on a set of molecules against one or more cores.
4481
+ *
4482
+ * This is a one-shot helper that handles all the boilerplate of the raw RDKit
4483
+ * RGD API: creating the decomposition object, adding molecules, processing,
4484
+ * extracting rows, and cleaning up intermediate objects.
4485
+ *
4486
+ * **WARNING:** The caller is responsible for deleting each `Mol` in the
4487
+ * returned rows (via `.delete()` or `using`) to avoid memory leaks.
4488
+ *
4489
+ * @param core - Core structure(s): a SMARTS string, an array of SMARTS strings,
4490
+ * a Mol instance, or an array of Mol instances
4491
+ * @param molecules - Molecules to decompose: an array of SMILES strings or Mol instances
4492
+ * @param options - R-Group decomposition options
4493
+ * @param module - The RDKit WASM module
4494
+ * @returns An array of rows, one per molecule. Each row maps R-group labels
4495
+ * (`Core`, `R1`, `R2`, …) to Mol instances.
4496
+ */
4497
+ function decomposeRGroups(core, molecules, options, module$1) {
4498
+ let resolvedCore;
4499
+ let deleteCore = false;
4500
+ if (typeof core === "string") {
4501
+ const qmol = module$1.get_qmol(core);
4502
+ if (!qmol || !qmol.is_valid()) return null;
4503
+ resolvedCore = qmol;
4504
+ deleteCore = true;
4505
+ } else if (core instanceof Mol) resolvedCore = core.jsMol;
4506
+ else if (isMolArray(core)) {
4507
+ resolvedCore = fromMolArraytoMolList(core, module$1);
4508
+ deleteCore = true;
4509
+ } else {
4510
+ resolvedCore = fromStringArraytoMolList(core, module$1, true);
4511
+ deleteCore = true;
4512
+ }
4513
+ const rgd = module$1.get_rgd(resolvedCore, JSON.stringify(options ?? {}));
4514
+ if (isMolArray(molecules)) for (const mol of molecules) rgd.add(mol.jsMol);
4515
+ else for (const s of molecules) {
4516
+ const jsMol = module$1.get_mol(s);
4517
+ if (jsMol && jsMol.is_valid()) rgd.add(jsMol);
4518
+ jsMol?.delete();
4519
+ }
4520
+ rgd.process();
4521
+ const result = rgd.get_rgroups_as_rows().map((row) => {
4522
+ const wrappedRow = {};
4523
+ for (const [label, jsMol] of Object.entries(row)) wrappedRow[label] = new Mol(jsMol, module$1);
4524
+ return wrappedRow;
4525
+ });
4526
+ rgd.delete();
4527
+ if (deleteCore) resolvedCore.delete();
4528
+ return result;
4529
+ }
4530
+
4531
+ //#endregion
4532
+ //#region src/init.ts
4533
+ /**
4534
+ * Resolves the WASM URL for the current environment.
4535
+ * In browsers, uses `import.meta.url` to resolve the WASM filename relative
4536
+ * to the JS bundle's location — works regardless of where the page is served.
4537
+ * In Node.js (e.g. vitest), the `?url` import returns a root-relative path
4538
+ * like `/src/minimalib/RDKit_minimal.wasm` which needs to be joined with cwd.
4539
+ */
4540
+ function resolveWasmUrl() {
4541
+ const url = RDKit_minimal_default;
4542
+ if (typeof process !== "undefined" && process.versions != null && process.versions.node != null && url.startsWith("/") && !url.startsWith("//")) return process.cwd() + url;
4543
+ return new URL(url, import.meta.url).href;
4544
+ }
4545
+ /**
4546
+ * Initializes the RDKit WASM module and returns a typed wrapper.
4547
+ *
4548
+ * @param options - Initialization options
4549
+ * @returns A promise that resolves to the RDKit wrapper
4550
+ *
4551
+ * @example
4552
+ * ```ts
4553
+ * const rdkit = await initRDKit();
4554
+ * const mol = rdkit.getMol('c1ccccc1');
4555
+ * ```
4556
+ */
4557
+ async function initRDKit(options) {
4558
+ const mod = await (0, import_RDKit_minimal.default)({ locateFile: options?.locateFile ?? (() => resolveWasmUrl()) });
4559
+ return {
4560
+ getMol(input, opts) {
4561
+ const jsMol = opts ? mod.get_mol(input, JSON.stringify(opts)) : mod.get_mol(input);
4562
+ if (!jsMol || !jsMol.is_valid()) {
4563
+ jsMol?.delete();
4564
+ return null;
4565
+ }
4566
+ return new Mol(jsMol, mod);
4567
+ },
4568
+ getQMol(input) {
4569
+ const jsMol = mod.get_qmol(input);
4570
+ if (!jsMol) return null;
4571
+ return new Mol(jsMol, mod);
4572
+ },
4573
+ getMCS(mols, options$1) {
4574
+ let molList;
4575
+ if (isMolArray(mols)) molList = fromMolArraytoMolList(mols, mod);
4576
+ else molList = fromStringArraytoMolList(mols, mod);
4577
+ const json = options$1 ? mod.get_mcs_as_json(molList, JSON.stringify(options$1)) : mod.get_mcs_as_json(molList);
4578
+ molList.delete();
4579
+ const parsed = JSON.parse(json);
4580
+ let cachedQmol;
4581
+ return {
4582
+ ...parsed,
4583
+ get qmol() {
4584
+ if (cachedQmol !== void 0) return cachedQmol;
4585
+ const s = Array.isArray(parsed.smarts) ? parsed.smarts[0] : parsed.smarts;
4586
+ if (!s) {
4587
+ cachedQmol = null;
4588
+ return null;
4589
+ }
4590
+ const jsMol = mod.get_qmol(s);
4591
+ cachedQmol = jsMol ? new Mol(jsMol, mod) : null;
4592
+ return cachedQmol;
4593
+ }
4594
+ };
4595
+ },
4596
+ getRxn(input, options$1) {
4597
+ try {
4598
+ const jsRxn = options$1 ? mod.get_rxn(input, JSON.stringify(options$1)) : mod.get_rxn(input);
4599
+ if (!jsRxn) return null;
4600
+ return new Reaction(jsRxn, mod);
4601
+ } catch {
4602
+ return null;
4603
+ }
4604
+ },
4605
+ getRGD(core, molecules, options$1) {
4606
+ return decomposeRGroups(core, molecules, options$1, mod);
4607
+ },
4608
+ molzip(mol1, mol2) {
4609
+ const jsMol = mod.molzip(mol1.jsMol, mol2.jsMol);
4610
+ if (!jsMol) return null;
4611
+ return new Mol(jsMol, mod);
4612
+ },
4613
+ get version() {
4614
+ return mod.version();
4615
+ },
4616
+ get module() {
4617
+ return mod;
4618
+ }
4619
+ };
4620
+ }
4621
+
4622
+ //#endregion
4623
+ export { Mol, MolArray, Reaction, initRDKit };