@oxc-parser/binding-wasm32-wasi 0.135.0 → 0.137.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/browser-bundle.js +431 -97
- package/package.json +4 -4
- package/parser.wasm32-wasi.wasm +0 -0
package/browser-bundle.js
CHANGED
|
@@ -4,7 +4,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
4
4
|
throw Error("Calling `require` for \"" + x + "\" in an environment that doesn't expose the `require` function. See https://rolldown.rs/in-depth/bundling-cjs#require-external-modules for more details.");
|
|
5
5
|
});
|
|
6
6
|
//#endregion
|
|
7
|
-
//#region ../../node_modules/.pnpm/@emnapi+wasi-threads@1.2.
|
|
7
|
+
//#region ../../node_modules/.pnpm/@emnapi+wasi-threads@1.2.2/node_modules/@emnapi/wasi-threads/dist/wasi-threads.esm-bundler.js
|
|
8
8
|
var _WebAssembly$2 = typeof WebAssembly !== "undefined" ? WebAssembly : typeof WXWebAssembly !== "undefined" ? WXWebAssembly : void 0;
|
|
9
9
|
var ENVIRONMENT_IS_NODE = typeof process === "object" && process !== null && typeof process.versions === "object" && process.versions !== null && typeof process.versions.node === "string";
|
|
10
10
|
function getPostMessage(options) {
|
|
@@ -85,7 +85,6 @@ var ThreadManager = /* @__PURE__ */ function() {
|
|
|
85
85
|
function ThreadManager(options) {
|
|
86
86
|
var _a;
|
|
87
87
|
this.unusedWorkers = [];
|
|
88
|
-
this.runningWorkers = [];
|
|
89
88
|
this.pthreads = Object.create(null);
|
|
90
89
|
this.wasmModule = null;
|
|
91
90
|
this.wasmMemory = null;
|
|
@@ -176,7 +175,6 @@ var ThreadManager = /* @__PURE__ */ function() {
|
|
|
176
175
|
var tid = worker.__emnapi_tid;
|
|
177
176
|
if (tid !== void 0) delete this.pthreads[tid];
|
|
178
177
|
this.unusedWorkers.push(worker);
|
|
179
|
-
this.runningWorkers.splice(this.runningWorkers.indexOf(worker), 1);
|
|
180
178
|
delete worker.__emnapi_tid;
|
|
181
179
|
if (ENVIRONMENT_IS_NODE) worker.unref();
|
|
182
180
|
};
|
|
@@ -276,8 +274,6 @@ var ThreadManager = /* @__PURE__ */ function() {
|
|
|
276
274
|
if (!force && this._reuseWorker) this.returnWorkerToPool(worker);
|
|
277
275
|
else {
|
|
278
276
|
delete this.pthreads[tid];
|
|
279
|
-
var index = this.runningWorkers.indexOf(worker);
|
|
280
|
-
if (index !== -1) this.runningWorkers.splice(index, 1);
|
|
281
277
|
this.terminateWorker(worker);
|
|
282
278
|
delete worker.__emnapi_tid;
|
|
283
279
|
}
|
|
@@ -297,10 +293,10 @@ var ThreadManager = /* @__PURE__ */ function() {
|
|
|
297
293
|
};
|
|
298
294
|
};
|
|
299
295
|
ThreadManager.prototype.terminateAllThreads = function() {
|
|
300
|
-
|
|
296
|
+
var runningWorkers = Object.values(this.pthreads);
|
|
297
|
+
for (var i = 0; i < runningWorkers.length; ++i) this.terminateWorker(runningWorkers[i]);
|
|
301
298
|
for (var i = 0; i < this.unusedWorkers.length; ++i) this.terminateWorker(this.unusedWorkers[i]);
|
|
302
299
|
this.unusedWorkers = [];
|
|
303
|
-
this.runningWorkers = [];
|
|
304
300
|
this.pthreads = Object.create(null);
|
|
305
301
|
this.preparePool();
|
|
306
302
|
};
|
|
@@ -472,21 +468,14 @@ var WASIThreads = /* @__PURE__ */ function() {
|
|
|
472
468
|
}));
|
|
473
469
|
if (shouldWait) {
|
|
474
470
|
if (typeof waitThreadStart === "number") {
|
|
475
|
-
if (Atomics.wait(sab, 0, 0, waitThreadStart) === "timed-out")
|
|
476
|
-
try {
|
|
477
|
-
PThread.cleanThread(worker, tid, true);
|
|
478
|
-
} catch (_) {}
|
|
479
|
-
throw new Error("Spawning thread timed out. Please check if the worker is created successfully and if message is handled properly in the worker.");
|
|
480
|
-
}
|
|
471
|
+
if (Atomics.wait(sab, 0, 0, waitThreadStart) === "timed-out") throw new Error("Spawning thread timed out. Please check if the worker is created successfully and if message is handled properly in the worker.");
|
|
481
472
|
} else Atomics.wait(sab, 0, 0);
|
|
482
|
-
if (Atomics.load(sab, 0) > 1)
|
|
483
|
-
try {
|
|
484
|
-
PThread.cleanThread(worker, tid, true);
|
|
485
|
-
} catch (_) {}
|
|
486
|
-
throw deserizeErrorFromBuffer(sab.buffer);
|
|
487
|
-
}
|
|
473
|
+
if (Atomics.load(sab, 0) > 1) throw deserizeErrorFromBuffer(sab.buffer);
|
|
488
474
|
}
|
|
489
475
|
} catch (e) {
|
|
476
|
+
if (worker !== void 0 && tid !== void 0) try {
|
|
477
|
+
PThread.cleanThread(worker, tid, true);
|
|
478
|
+
} catch (_) {}
|
|
490
479
|
Atomics.store(struct, 0, 1);
|
|
491
480
|
Atomics.store(struct, 1, EAGAIN);
|
|
492
481
|
Atomics.notify(struct, 1);
|
|
@@ -498,7 +487,6 @@ var WASIThreads = /* @__PURE__ */ function() {
|
|
|
498
487
|
Atomics.store(struct, 0, 0);
|
|
499
488
|
Atomics.store(struct, 1, tid);
|
|
500
489
|
Atomics.notify(struct, 1);
|
|
501
|
-
PThread.runningWorkers.push(worker);
|
|
502
490
|
if (!shouldWait) worker.whenLoaded.catch(function(err) {
|
|
503
491
|
delete worker.whenLoaded;
|
|
504
492
|
PThread.cleanThread(worker, tid, true);
|
|
@@ -532,12 +520,12 @@ var WASIThreads = /* @__PURE__ */ function() {
|
|
|
532
520
|
* @returns A proxied WebAssembly instance if in child thread, other wise the original instance
|
|
533
521
|
*/
|
|
534
522
|
WASIThreads.prototype.initialize = function(instance, module, memory) {
|
|
535
|
-
var exports
|
|
536
|
-
memory !== null && memory !== void 0 || (memory = exports
|
|
523
|
+
var exports = instance.exports;
|
|
524
|
+
memory !== null && memory !== void 0 || (memory = exports.memory);
|
|
537
525
|
if (this.childThread) instance = createInstanceProxy(instance, memory);
|
|
538
526
|
this.setup(instance, module, memory);
|
|
539
527
|
var wasi = this.wasi;
|
|
540
|
-
if ("_start" in exports
|
|
528
|
+
if ("_start" in exports && typeof exports._start === "function") if (this.childThread) {
|
|
541
529
|
wasi.start(instance);
|
|
542
530
|
try {
|
|
543
531
|
var kStarted = getWasiSymbol(wasi, "kStarted");
|
|
@@ -555,8 +543,8 @@ var WASIThreads = /* @__PURE__ */ function() {
|
|
|
555
543
|
* ```
|
|
556
544
|
*/
|
|
557
545
|
WASIThreads.prototype.start = function(instance, module, memory) {
|
|
558
|
-
var exports
|
|
559
|
-
memory !== null && memory !== void 0 || (memory = exports
|
|
546
|
+
var exports = instance.exports;
|
|
547
|
+
memory !== null && memory !== void 0 || (memory = exports.memory);
|
|
560
548
|
if (this.childThread) instance = createInstanceProxy(instance, memory);
|
|
561
549
|
this.setup(instance, module, memory);
|
|
562
550
|
return {
|
|
@@ -647,7 +635,7 @@ function __extends(d, b) {
|
|
|
647
635
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
648
636
|
}
|
|
649
637
|
//#endregion
|
|
650
|
-
//#region ../../node_modules/.pnpm/@emnapi+core@1.
|
|
638
|
+
//#region ../../node_modules/.pnpm/@emnapi+core@1.11.1/node_modules/@emnapi/core/dist/emnapi-core.esm-bundler.js
|
|
651
639
|
var _WebAssembly$1 = typeof WebAssembly !== "undefined" ? WebAssembly : typeof WXWebAssembly !== "undefined" ? WXWebAssembly : void 0;
|
|
652
640
|
function validateImports(imports) {
|
|
653
641
|
if (imports && typeof imports !== "object") throw new TypeError("imports must be an object or undefined");
|
|
@@ -735,19 +723,19 @@ function createNapiModule(options) {
|
|
|
735
723
|
var instance = options.instance;
|
|
736
724
|
if (!(instance === null || instance === void 0 ? void 0 : instance.exports)) throw new TypeError("Invalid wasm instance");
|
|
737
725
|
wasmInstance = instance;
|
|
738
|
-
var exports
|
|
726
|
+
var exports = instance.exports;
|
|
739
727
|
var module = options.module;
|
|
740
|
-
var memory = options.memory || exports
|
|
741
|
-
var table = options.table || exports
|
|
728
|
+
var memory = options.memory || exports.memory;
|
|
729
|
+
var table = options.table || exports.__indirect_function_table;
|
|
742
730
|
if (!(module instanceof _WebAssembly$1.Module)) throw new TypeError("Invalid wasm module");
|
|
743
731
|
if (!(memory instanceof _WebAssembly$1.Memory)) throw new TypeError("Invalid wasm memory");
|
|
744
732
|
if (!(table instanceof _WebAssembly$1.Table)) throw new TypeError("Invalid wasm table");
|
|
745
733
|
wasmMemory = memory;
|
|
746
734
|
wasmTable = table;
|
|
747
|
-
if (typeof exports
|
|
748
|
-
if (typeof exports
|
|
749
|
-
_malloc = exports
|
|
750
|
-
_free = exports
|
|
735
|
+
if (typeof exports.malloc !== "function") throw new TypeError("malloc is not exported");
|
|
736
|
+
if (typeof exports.free !== "function") throw new TypeError("free is not exported");
|
|
737
|
+
_malloc = exports.malloc;
|
|
738
|
+
_free = exports.free;
|
|
751
739
|
if (!napiModule.childThread) {
|
|
752
740
|
var moduleApiVersion = 8;
|
|
753
741
|
var node_api_module_get_api_version_v1 = instance.exports.node_api_module_get_api_version_v1;
|
|
@@ -760,11 +748,11 @@ function createNapiModule(options) {
|
|
|
760
748
|
var scope_1 = emnapiCtx.openScope(envObject);
|
|
761
749
|
try {
|
|
762
750
|
envObject.callIntoModule(function(_envObject) {
|
|
763
|
-
var exports
|
|
764
|
-
var exportsHandle = scope_1.add(exports
|
|
751
|
+
var exports = napiModule.exports;
|
|
752
|
+
var exportsHandle = scope_1.add(exports);
|
|
765
753
|
var napi_register_wasm_v1 = instance.exports.napi_register_wasm_v1;
|
|
766
754
|
var napiValue = napi_register_wasm_v1(_envObject.id, exportsHandle.id);
|
|
767
|
-
napiModule.exports = !napiValue ? exports
|
|
755
|
+
napiModule.exports = !napiValue ? exports : emnapiCtx.handleStore.get(napiValue).value;
|
|
768
756
|
});
|
|
769
757
|
} catch (e) {
|
|
770
758
|
if (e !== "unwind") throw e;
|
|
@@ -1469,7 +1457,7 @@ function createNapiModule(options) {
|
|
|
1469
1457
|
emnapiTSFN.offset.mutex = emnapiTSFN.offset.mutex + 4;
|
|
1470
1458
|
if (typeof PThread !== "undefined") {
|
|
1471
1459
|
PThread.unusedWorkers.forEach(emnapiTSFN.addListener);
|
|
1472
|
-
PThread.
|
|
1460
|
+
Object.values(PThread.pthreads).forEach(emnapiTSFN.addListener);
|
|
1473
1461
|
var __original_getNewWorker_1 = PThread.getNewWorker;
|
|
1474
1462
|
PThread.getNewWorker = function() {
|
|
1475
1463
|
var r = __original_getNewWorker_1.apply(this, arguments);
|
|
@@ -1488,7 +1476,7 @@ function createNapiModule(options) {
|
|
|
1488
1476
|
var payload = __emnapi__.payload;
|
|
1489
1477
|
if (type === "tsfn-send") {
|
|
1490
1478
|
var pendng = payload.tsfn + emnapiTSFN.offset.async_pending;
|
|
1491
|
-
if (Atomics.load(new Int32Array(
|
|
1479
|
+
if (Atomics.load(new Int32Array(emnapiTSFN.ensureBufferFor(pendng + 4)), pendng >>> 2) !== 0) emnapiTSFN.enqueue(payload.tsfn);
|
|
1492
1480
|
}
|
|
1493
1481
|
}
|
|
1494
1482
|
};
|
|
@@ -1505,12 +1493,27 @@ function createNapiModule(options) {
|
|
|
1505
1493
|
else worker.addEventListener("message", handler, false);
|
|
1506
1494
|
return true;
|
|
1507
1495
|
},
|
|
1496
|
+
/**
|
|
1497
|
+
* When another thread grows the shared WebAssembly.Memory, this agent's
|
|
1498
|
+
* cached `wasmMemory.buffer` may still have the old shorter length
|
|
1499
|
+
* (V8 refreshes it lazily). If a pointer derived from shared memory lies
|
|
1500
|
+
* beyond the cached length, `wasmMemory.grow(0)` forces the agent to
|
|
1501
|
+
* observe the current memory size and refreshes the buffer.
|
|
1502
|
+
*/
|
|
1503
|
+
ensureBufferFor: function(end) {
|
|
1504
|
+
var buffer = wasmMemory.buffer;
|
|
1505
|
+
if (end > buffer.byteLength) {
|
|
1506
|
+
wasmMemory.grow(0);
|
|
1507
|
+
buffer = wasmMemory.buffer;
|
|
1508
|
+
}
|
|
1509
|
+
return buffer;
|
|
1510
|
+
},
|
|
1508
1511
|
initQueue: function(func) {
|
|
1509
1512
|
var size = 8;
|
|
1510
1513
|
var queue = _malloc(size);
|
|
1511
1514
|
if (!queue) return false;
|
|
1512
1515
|
queue >>>= 0;
|
|
1513
|
-
new Uint8Array(
|
|
1516
|
+
new Uint8Array(emnapiTSFN.ensureBufferFor(queue + size), queue, size).fill(0);
|
|
1514
1517
|
emnapiTSFN.storeSizeTypeValue(func + emnapiTSFN.offset.queue, queue, false);
|
|
1515
1518
|
return true;
|
|
1516
1519
|
},
|
|
@@ -1600,7 +1603,7 @@ function createNapiModule(options) {
|
|
|
1600
1603
|
var mutex = {
|
|
1601
1604
|
lock: function() {
|
|
1602
1605
|
var isBrowserMain = typeof window !== "undefined" && typeof document !== "undefined" && !ENVIRONMENT_IS_NODE;
|
|
1603
|
-
var i32a = new Int32Array(
|
|
1606
|
+
var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
|
|
1604
1607
|
if (isBrowserMain) while (true) {
|
|
1605
1608
|
var oldValue = Atomics.compareExchange(i32a, 0, 0, 10);
|
|
1606
1609
|
if (oldValue === 0) return;
|
|
@@ -1612,7 +1615,7 @@ function createNapiModule(options) {
|
|
|
1612
1615
|
}
|
|
1613
1616
|
},
|
|
1614
1617
|
unlock: function() {
|
|
1615
|
-
var i32a = new Int32Array(
|
|
1618
|
+
var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
|
|
1616
1619
|
if (Atomics.compareExchange(i32a, 0, 10, 0) !== 10) throw new Error("Tried to unlock while not holding the mutex");
|
|
1617
1620
|
Atomics.notify(i32a, 0, 1);
|
|
1618
1621
|
},
|
|
@@ -1632,14 +1635,14 @@ function createNapiModule(options) {
|
|
|
1632
1635
|
var mutex = emnapiTSFN.getMutex(func);
|
|
1633
1636
|
return {
|
|
1634
1637
|
wait: function() {
|
|
1635
|
-
var i32a = new Int32Array(
|
|
1638
|
+
var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
|
|
1636
1639
|
var value = Atomics.load(i32a, 0);
|
|
1637
1640
|
mutex.unlock();
|
|
1638
1641
|
Atomics.wait(i32a, 0, value);
|
|
1639
1642
|
mutex.lock();
|
|
1640
1643
|
},
|
|
1641
1644
|
signal: function() {
|
|
1642
|
-
var i32a = new Int32Array(
|
|
1645
|
+
var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
|
|
1643
1646
|
Atomics.add(i32a, 0, 1);
|
|
1644
1647
|
Atomics.notify(i32a, 0, 1);
|
|
1645
1648
|
}
|
|
@@ -1650,12 +1653,12 @@ function createNapiModule(options) {
|
|
|
1650
1653
|
},
|
|
1651
1654
|
addQueueSize: function(func) {
|
|
1652
1655
|
var offset = emnapiTSFN.offset.queue_size;
|
|
1653
|
-
var arr = new Uint32Array(
|
|
1656
|
+
var arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4)), index = func + offset >>> 2;
|
|
1654
1657
|
Atomics.add(arr, index, 1);
|
|
1655
1658
|
},
|
|
1656
1659
|
subQueueSize: function(func) {
|
|
1657
1660
|
var offset = emnapiTSFN.offset.queue_size;
|
|
1658
|
-
var arr = new Uint32Array(
|
|
1661
|
+
var arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4)), index = func + offset >>> 2;
|
|
1659
1662
|
Atomics.sub(arr, index, 1);
|
|
1660
1663
|
},
|
|
1661
1664
|
getThreadCount: function(func) {
|
|
@@ -1663,28 +1666,28 @@ function createNapiModule(options) {
|
|
|
1663
1666
|
},
|
|
1664
1667
|
addThreadCount: function(func) {
|
|
1665
1668
|
var offset = emnapiTSFN.offset.thread_count;
|
|
1666
|
-
var arr = new Uint32Array(
|
|
1669
|
+
var arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4)), index = func + offset >>> 2;
|
|
1667
1670
|
Atomics.add(arr, index, 1);
|
|
1668
1671
|
},
|
|
1669
1672
|
subThreadCount: function(func) {
|
|
1670
1673
|
var offset = emnapiTSFN.offset.thread_count;
|
|
1671
|
-
var arr = new Uint32Array(
|
|
1674
|
+
var arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4)), index = func + offset >>> 2;
|
|
1672
1675
|
Atomics.sub(arr, index, 1);
|
|
1673
1676
|
},
|
|
1674
1677
|
getState: function(func) {
|
|
1675
|
-
return Atomics.load(new Int32Array(
|
|
1678
|
+
return Atomics.load(new Int32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.state + 4)), func + emnapiTSFN.offset.state >>> 2);
|
|
1676
1679
|
},
|
|
1677
1680
|
setState: function(func, value) {
|
|
1678
|
-
Atomics.store(new Int32Array(
|
|
1681
|
+
Atomics.store(new Int32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.state + 4)), func + emnapiTSFN.offset.state >>> 2, value);
|
|
1679
1682
|
},
|
|
1680
1683
|
getHandlesClosing: function(func) {
|
|
1681
|
-
return Atomics.load(new Int8Array(
|
|
1684
|
+
return Atomics.load(new Int8Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.handles_closing + 1)), func + emnapiTSFN.offset.handles_closing);
|
|
1682
1685
|
},
|
|
1683
1686
|
setHandlesClosing: function(func, value) {
|
|
1684
|
-
Atomics.store(new Int8Array(
|
|
1687
|
+
Atomics.store(new Int8Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.handles_closing + 1)), func + emnapiTSFN.offset.handles_closing, value);
|
|
1685
1688
|
},
|
|
1686
1689
|
getDispatchState: function(func) {
|
|
1687
|
-
return Atomics.load(new Uint32Array(
|
|
1690
|
+
return Atomics.load(new Uint32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.dispatch_state + 4)), func + emnapiTSFN.offset.dispatch_state >>> 2);
|
|
1688
1691
|
},
|
|
1689
1692
|
getContext: function(func) {
|
|
1690
1693
|
return emnapiTSFN.loadSizeTypeValue(func + emnapiTSFN.offset.context, false);
|
|
@@ -1714,11 +1717,11 @@ function createNapiModule(options) {
|
|
|
1714
1717
|
var ret;
|
|
1715
1718
|
var arr;
|
|
1716
1719
|
if (unsigned) {
|
|
1717
|
-
arr = new Uint32Array(
|
|
1720
|
+
arr = new Uint32Array(emnapiTSFN.ensureBufferFor(offset + 4));
|
|
1718
1721
|
ret = Atomics.load(arr, offset >>> 2);
|
|
1719
1722
|
return ret;
|
|
1720
1723
|
} else {
|
|
1721
|
-
arr = new Int32Array(
|
|
1724
|
+
arr = new Int32Array(emnapiTSFN.ensureBufferFor(offset + 4));
|
|
1722
1725
|
ret = Atomics.load(arr, offset >>> 2);
|
|
1723
1726
|
return ret;
|
|
1724
1727
|
}
|
|
@@ -1726,11 +1729,11 @@ function createNapiModule(options) {
|
|
|
1726
1729
|
storeSizeTypeValue: function(offset, value, unsigned) {
|
|
1727
1730
|
var arr;
|
|
1728
1731
|
if (unsigned) {
|
|
1729
|
-
arr = new Uint32Array(
|
|
1732
|
+
arr = new Uint32Array(emnapiTSFN.ensureBufferFor(offset + 4));
|
|
1730
1733
|
Atomics.store(arr, offset >>> 2, value);
|
|
1731
1734
|
return;
|
|
1732
1735
|
} else {
|
|
1733
|
-
arr = new Int32Array(
|
|
1736
|
+
arr = new Int32Array(emnapiTSFN.ensureBufferFor(offset + 4));
|
|
1734
1737
|
Atomics.store(arr, offset >>> 2, value >>> 0);
|
|
1735
1738
|
return;
|
|
1736
1739
|
}
|
|
@@ -1744,17 +1747,19 @@ function createNapiModule(options) {
|
|
|
1744
1747
|
if (ref) emnapiCtx.refStore.get(ref).dispose();
|
|
1745
1748
|
var resource = emnapiTSFN.getResource(func);
|
|
1746
1749
|
emnapiCtx.refStore.get(resource).dispose();
|
|
1750
|
+
emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.is_some + 1);
|
|
1747
1751
|
new DataView(wasmMemory.buffer).setInt8(func + emnapiTSFN.offset.is_some, 0, true);
|
|
1748
1752
|
emnapiCtx.removeCleanupHook(envObject, emnapiTSFN.cleanup, func);
|
|
1749
1753
|
envObject.unref();
|
|
1750
|
-
var
|
|
1751
|
-
var
|
|
1754
|
+
var asyncRefAddress = func + emnapiTSFN.offset.async_ref;
|
|
1755
|
+
var asyncRefOffset = asyncRefAddress >>> 2;
|
|
1756
|
+
var arr = new Uint32Array(emnapiTSFN.ensureBufferFor(asyncRefAddress + 4));
|
|
1752
1757
|
if (Atomics.load(arr, asyncRefOffset) > 0) {
|
|
1753
1758
|
Atomics.store(arr, asyncRefOffset, 0);
|
|
1754
1759
|
emnapiCtx.decreaseWaitingRequestCounter();
|
|
1755
1760
|
}
|
|
1756
1761
|
if (emnapiNodeBinding) {
|
|
1757
|
-
var view = new DataView(
|
|
1762
|
+
var view = new DataView(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.trigger_async_id + 8));
|
|
1758
1763
|
_emnapi_node_emit_async_destroy(view.getFloat64(func + emnapiTSFN.offset.async_id, true), view.getFloat64(func + emnapiTSFN.offset.trigger_async_id, true));
|
|
1759
1764
|
}
|
|
1760
1765
|
}
|
|
@@ -1802,7 +1807,7 @@ function createNapiModule(options) {
|
|
|
1802
1807
|
var resource = emnapiTSFN.getResource(func);
|
|
1803
1808
|
var resource_value = emnapiCtx.refStore.get(resource).get();
|
|
1804
1809
|
var resourceObject = emnapiCtx.handleStore.get(resource_value).value;
|
|
1805
|
-
var view = new DataView(
|
|
1810
|
+
var view = new DataView(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.trigger_async_id + 8));
|
|
1806
1811
|
var asyncId = view.getFloat64(func + emnapiTSFN.offset.async_id, true);
|
|
1807
1812
|
var triggerAsyncId = view.getFloat64(func + emnapiTSFN.offset.trigger_async_id, true);
|
|
1808
1813
|
emnapiNodeBinding.node.makeCallback(resourceObject, f, [], {
|
|
@@ -1829,7 +1834,7 @@ function createNapiModule(options) {
|
|
|
1829
1834
|
});
|
|
1830
1835
|
if (emnapiTSFN.getHandlesClosing(func)) return;
|
|
1831
1836
|
emnapiTSFN.setHandlesClosing(func, 1);
|
|
1832
|
-
Atomics.store(new Int32Array(
|
|
1837
|
+
Atomics.store(new Int32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.async_pending + 4)), func + emnapiTSFN.offset.async_pending >>> 2, 1);
|
|
1833
1838
|
emnapiCtx.feature.setImmediate(function() {
|
|
1834
1839
|
emnapiTSFN.finalize(func);
|
|
1835
1840
|
});
|
|
@@ -1885,7 +1890,7 @@ function createNapiModule(options) {
|
|
|
1885
1890
|
var resource = emnapiTSFN.getResource(func);
|
|
1886
1891
|
var resource_value = emnapiCtx.refStore.get(resource).get();
|
|
1887
1892
|
var resourceObject = emnapiCtx.handleStore.get(resource_value).value;
|
|
1888
|
-
var view = new DataView(
|
|
1893
|
+
var view = new DataView(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.trigger_async_id + 8));
|
|
1889
1894
|
emnapiNodeBinding.node.makeCallback(resourceObject, f, [], {
|
|
1890
1895
|
asyncId: view.getFloat64(func + emnapiTSFN.offset.async_id, true),
|
|
1891
1896
|
triggerAsyncId: view.getFloat64(func + emnapiTSFN.offset.trigger_async_id, true)
|
|
@@ -1900,8 +1905,9 @@ function createNapiModule(options) {
|
|
|
1900
1905
|
dispatch: function(func) {
|
|
1901
1906
|
var has_more = true;
|
|
1902
1907
|
var iterations_left = 1e3;
|
|
1903
|
-
var
|
|
1904
|
-
var
|
|
1908
|
+
var dispatchStateAddress = func + emnapiTSFN.offset.dispatch_state;
|
|
1909
|
+
var ui32a = new Uint32Array(emnapiTSFN.ensureBufferFor(dispatchStateAddress + 4));
|
|
1910
|
+
var index = dispatchStateAddress >>> 2;
|
|
1905
1911
|
while (has_more && --iterations_left !== 0) {
|
|
1906
1912
|
Atomics.store(ui32a, index, 1);
|
|
1907
1913
|
has_more = emnapiTSFN.dispatchOne(func);
|
|
@@ -1912,7 +1918,7 @@ function createNapiModule(options) {
|
|
|
1912
1918
|
enqueue: function(func) {
|
|
1913
1919
|
var pending = func + emnapiTSFN.offset.async_pending;
|
|
1914
1920
|
var scheduled = func + emnapiTSFN.offset.async_u_fd;
|
|
1915
|
-
var i32a = new Int32Array(
|
|
1921
|
+
var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(Math.max(pending, scheduled) + 4));
|
|
1916
1922
|
if (Atomics.exchange(i32a, scheduled >>> 2, 1) !== 0) return;
|
|
1917
1923
|
emnapiCtx.feature.setImmediate(function() {
|
|
1918
1924
|
if (!emnapiTSFN._liveSet.has(func)) return;
|
|
@@ -1935,10 +1941,11 @@ function createNapiModule(options) {
|
|
|
1935
1941
|
});
|
|
1936
1942
|
},
|
|
1937
1943
|
send: function(func) {
|
|
1938
|
-
|
|
1944
|
+
var dispatchStateAddress = func + emnapiTSFN.offset.dispatch_state;
|
|
1945
|
+
if ((Atomics.or(new Uint32Array(emnapiTSFN.ensureBufferFor(dispatchStateAddress + 4)), dispatchStateAddress >>> 2, 2) & 1) === 1) return;
|
|
1939
1946
|
var pendng = func + emnapiTSFN.offset.async_pending;
|
|
1940
|
-
if (Atomics.load(new Int32Array(
|
|
1941
|
-
if (Atomics.exchange(new Int32Array(
|
|
1947
|
+
if (Atomics.load(new Int32Array(emnapiTSFN.ensureBufferFor(pendng + 4)), pendng >>> 2) !== 0) return;
|
|
1948
|
+
if (Atomics.exchange(new Int32Array(emnapiTSFN.ensureBufferFor(pendng + 4)), pendng >>> 2, 1) === 0) if (typeof ENVIRONMENT_IS_PTHREAD !== "undefined" && ENVIRONMENT_IS_PTHREAD) postMessage({ __emnapi__: {
|
|
1942
1949
|
type: "tsfn-send",
|
|
1943
1950
|
payload: { tsfn: func }
|
|
1944
1951
|
} });
|
|
@@ -1985,7 +1992,7 @@ function createNapiModule(options) {
|
|
|
1985
1992
|
var tsfn = _malloc(sizeofTSFN);
|
|
1986
1993
|
if (!tsfn) return envObject.setLastError(9);
|
|
1987
1994
|
tsfn >>>= 0;
|
|
1988
|
-
new Uint8Array(
|
|
1995
|
+
new Uint8Array(emnapiTSFN.ensureBufferFor(tsfn + sizeofTSFN)).subarray(tsfn, tsfn + sizeofTSFN).fill(0);
|
|
1989
1996
|
var resourceRef = emnapiCtx.createReference(envObject, resource, 1, 1);
|
|
1990
1997
|
var resource_ = resourceRef.id;
|
|
1991
1998
|
var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
|
|
@@ -2085,8 +2092,9 @@ function createNapiModule(options) {
|
|
|
2085
2092
|
return 1;
|
|
2086
2093
|
}
|
|
2087
2094
|
func >>>= 0;
|
|
2088
|
-
var
|
|
2089
|
-
var
|
|
2095
|
+
var asyncRefAddress = func + emnapiTSFN.offset.async_ref;
|
|
2096
|
+
var asyncRefOffset = asyncRefAddress >>> 2;
|
|
2097
|
+
var arr = new Uint32Array(emnapiTSFN.ensureBufferFor(asyncRefAddress + 4));
|
|
2090
2098
|
var currentValue = Atomics.load(arr, asyncRefOffset);
|
|
2091
2099
|
if (currentValue > 0) {
|
|
2092
2100
|
Atomics.store(arr, asyncRefOffset, currentValue - 1);
|
|
@@ -2101,8 +2109,9 @@ function createNapiModule(options) {
|
|
|
2101
2109
|
return 1;
|
|
2102
2110
|
}
|
|
2103
2111
|
func >>>= 0;
|
|
2104
|
-
var
|
|
2105
|
-
var
|
|
2112
|
+
var asyncRefAddress = func + emnapiTSFN.offset.async_ref;
|
|
2113
|
+
var asyncRefOffset = asyncRefAddress >>> 2;
|
|
2114
|
+
var arr = new Uint32Array(emnapiTSFN.ensureBufferFor(asyncRefAddress + 4));
|
|
2106
2115
|
var currentValue = Atomics.load(arr, asyncRefOffset);
|
|
2107
2116
|
if (!currentValue) emnapiCtx.increaseWaitingRequestCounter();
|
|
2108
2117
|
Atomics.store(arr, asyncRefOffset, currentValue + 1);
|
|
@@ -2136,12 +2145,27 @@ function createNapiModule(options) {
|
|
|
2136
2145
|
complete: 48,
|
|
2137
2146
|
end: 52
|
|
2138
2147
|
},
|
|
2148
|
+
/**
|
|
2149
|
+
* When another thread grows the shared WebAssembly.Memory, this agent's
|
|
2150
|
+
* cached `wasmMemory.buffer` may still have the old shorter length
|
|
2151
|
+
* (V8 refreshes it lazily). If a pointer derived from shared memory lies
|
|
2152
|
+
* beyond the cached length, `wasmMemory.grow(0)` forces the agent to
|
|
2153
|
+
* observe the current memory size and refreshes the buffer.
|
|
2154
|
+
*/
|
|
2155
|
+
ensureBufferFor: function(end) {
|
|
2156
|
+
var buffer = wasmMemory.buffer;
|
|
2157
|
+
if (end > buffer.byteLength) {
|
|
2158
|
+
wasmMemory.grow(0);
|
|
2159
|
+
buffer = wasmMemory.buffer;
|
|
2160
|
+
}
|
|
2161
|
+
return buffer;
|
|
2162
|
+
},
|
|
2139
2163
|
init: function() {
|
|
2140
2164
|
emnapiAWMT.pool = [];
|
|
2141
2165
|
emnapiAWMT.workerReady = null;
|
|
2142
2166
|
if (typeof PThread !== "undefined") {
|
|
2143
2167
|
PThread.unusedWorkers.forEach(emnapiAWMT.addListener);
|
|
2144
|
-
PThread.
|
|
2168
|
+
Object.values(PThread.pthreads).forEach(emnapiAWMT.addListener);
|
|
2145
2169
|
var __original_getNewWorker_1 = PThread.getNewWorker;
|
|
2146
2170
|
PThread.getNewWorker = function() {
|
|
2147
2171
|
var r = __original_getNewWorker_1.apply(this, arguments);
|
|
@@ -2180,7 +2204,7 @@ function createNapiModule(options) {
|
|
|
2180
2204
|
emnapiAWMT.globalAddress >>>= 0;
|
|
2181
2205
|
var size = emnapiAWMT.globalOffset.end;
|
|
2182
2206
|
var addr = emnapiAWMT.globalAddress;
|
|
2183
|
-
new Uint8Array(
|
|
2207
|
+
new Uint8Array(emnapiAWMT.ensureBufferFor(addr + size), addr, size).fill(0);
|
|
2184
2208
|
emnapiAWMT.queueInit(emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.q);
|
|
2185
2209
|
emnapiAWMT.queueInit(emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.exit_message);
|
|
2186
2210
|
}
|
|
@@ -2210,7 +2234,8 @@ function createNapiModule(options) {
|
|
|
2210
2234
|
if (worker) return worker.whenLoaded;
|
|
2211
2235
|
}
|
|
2212
2236
|
index >>>= 0;
|
|
2213
|
-
var
|
|
2237
|
+
var tidOffset = 20;
|
|
2238
|
+
var tid = new DataView(emnapiAWMT.ensureBufferFor(index + tidOffset + 4)).getInt32(index + tidOffset, true);
|
|
2214
2239
|
worker = PThread.pthreads[tid];
|
|
2215
2240
|
return worker.whenLoaded;
|
|
2216
2241
|
});
|
|
@@ -2218,18 +2243,23 @@ function createNapiModule(options) {
|
|
|
2218
2243
|
return emnapiAWMT.workerReady;
|
|
2219
2244
|
},
|
|
2220
2245
|
getResource: function(work) {
|
|
2246
|
+
emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.resource + 4);
|
|
2221
2247
|
return new DataView(wasmMemory.buffer).getUint32(work + emnapiAWMT.offset.resource, true);
|
|
2222
2248
|
},
|
|
2223
2249
|
getExecute: function(work) {
|
|
2250
|
+
emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.execute + 4);
|
|
2224
2251
|
return new DataView(wasmMemory.buffer).getUint32(work + emnapiAWMT.offset.execute, true);
|
|
2225
2252
|
},
|
|
2226
2253
|
getComplete: function(work) {
|
|
2254
|
+
emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.complete + 4);
|
|
2227
2255
|
return new DataView(wasmMemory.buffer).getUint32(work + emnapiAWMT.offset.complete, true);
|
|
2228
2256
|
},
|
|
2229
2257
|
getEnv: function(work) {
|
|
2258
|
+
emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.env + 4);
|
|
2230
2259
|
return new DataView(wasmMemory.buffer).getUint32(work + emnapiAWMT.offset.env, true);
|
|
2231
2260
|
},
|
|
2232
2261
|
getData: function(work) {
|
|
2262
|
+
emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.data + 4);
|
|
2233
2263
|
return new DataView(wasmMemory.buffer).getUint32(work + emnapiAWMT.offset.data, true);
|
|
2234
2264
|
},
|
|
2235
2265
|
getMutex: function() {
|
|
@@ -2237,7 +2267,7 @@ function createNapiModule(options) {
|
|
|
2237
2267
|
var mutex = {
|
|
2238
2268
|
lock: function() {
|
|
2239
2269
|
var isBrowserMain = typeof window !== "undefined" && typeof document !== "undefined" && !ENVIRONMENT_IS_NODE;
|
|
2240
|
-
var i32a = new Int32Array(
|
|
2270
|
+
var i32a = new Int32Array(emnapiAWMT.ensureBufferFor(index + 4), index, 1);
|
|
2241
2271
|
if (isBrowserMain) while (true) {
|
|
2242
2272
|
var oldValue = Atomics.compareExchange(i32a, 0, 0, 10);
|
|
2243
2273
|
if (oldValue === 0) return;
|
|
@@ -2249,7 +2279,7 @@ function createNapiModule(options) {
|
|
|
2249
2279
|
}
|
|
2250
2280
|
},
|
|
2251
2281
|
unlock: function() {
|
|
2252
|
-
var i32a = new Int32Array(
|
|
2282
|
+
var i32a = new Int32Array(emnapiAWMT.ensureBufferFor(index + 4), index, 1);
|
|
2253
2283
|
if (Atomics.compareExchange(i32a, 0, 10, 0) !== 10) throw new Error("Tried to unlock while not holding the mutex");
|
|
2254
2284
|
Atomics.notify(i32a, 0, 1);
|
|
2255
2285
|
},
|
|
@@ -2269,25 +2299,28 @@ function createNapiModule(options) {
|
|
|
2269
2299
|
var mutex = emnapiAWMT.getMutex();
|
|
2270
2300
|
return {
|
|
2271
2301
|
wait: function() {
|
|
2272
|
-
var i32a = new Int32Array(
|
|
2302
|
+
var i32a = new Int32Array(emnapiAWMT.ensureBufferFor(index + 4), index, 1);
|
|
2273
2303
|
var value = Atomics.load(i32a, 0);
|
|
2274
2304
|
mutex.unlock();
|
|
2275
2305
|
Atomics.wait(i32a, 0, value);
|
|
2276
2306
|
mutex.lock();
|
|
2277
2307
|
},
|
|
2278
2308
|
signal: function() {
|
|
2279
|
-
var i32a = new Int32Array(
|
|
2309
|
+
var i32a = new Int32Array(emnapiAWMT.ensureBufferFor(index + 4), index, 1);
|
|
2280
2310
|
Atomics.add(i32a, 0, 1);
|
|
2281
2311
|
Atomics.notify(i32a, 0, 1);
|
|
2282
2312
|
}
|
|
2283
2313
|
};
|
|
2284
2314
|
},
|
|
2285
2315
|
queueInit: function(q) {
|
|
2316
|
+
emnapiAWMT.ensureBufferFor(q + 4 + 4);
|
|
2286
2317
|
var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
|
|
2287
2318
|
HEAP_DATA_VIEW.setUint32(q, q, true);
|
|
2288
2319
|
HEAP_DATA_VIEW.setUint32(q + 4, q, true);
|
|
2289
2320
|
},
|
|
2290
2321
|
queueInsertTail: function(h, q) {
|
|
2322
|
+
emnapiAWMT.ensureBufferFor(h + 4 + 4);
|
|
2323
|
+
emnapiAWMT.ensureBufferFor(q + 4 + 4);
|
|
2291
2324
|
var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
|
|
2292
2325
|
HEAP_DATA_VIEW.setUint32(q, h, true);
|
|
2293
2326
|
var tempValue = HEAP_DATA_VIEW.getUint32(h + 4, true);
|
|
@@ -2297,6 +2330,7 @@ function createNapiModule(options) {
|
|
|
2297
2330
|
HEAP_DATA_VIEW.setUint32(h + 4, q, true);
|
|
2298
2331
|
},
|
|
2299
2332
|
queueRemove: function(q) {
|
|
2333
|
+
emnapiAWMT.ensureBufferFor(q + 4 + 4);
|
|
2300
2334
|
var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
|
|
2301
2335
|
var qprev = HEAP_DATA_VIEW.getUint32(q + 4, true);
|
|
2302
2336
|
var qnext = HEAP_DATA_VIEW.getUint32(q, true);
|
|
@@ -2304,6 +2338,7 @@ function createNapiModule(options) {
|
|
|
2304
2338
|
HEAP_DATA_VIEW.setUint32(qnext + 4, qprev, true);
|
|
2305
2339
|
},
|
|
2306
2340
|
queueEmpty: function(q) {
|
|
2341
|
+
emnapiAWMT.ensureBufferFor(q + 4);
|
|
2307
2342
|
return q == new DataView(wasmMemory.buffer).getUint32(q, true);
|
|
2308
2343
|
},
|
|
2309
2344
|
scheduleWork: function(work) {
|
|
@@ -2315,7 +2350,7 @@ function createNapiModule(options) {
|
|
|
2315
2350
|
throw err;
|
|
2316
2351
|
});
|
|
2317
2352
|
emnapiCtx.increaseWaitingRequestCounter();
|
|
2318
|
-
var statusBuffer = new Int32Array(
|
|
2353
|
+
var statusBuffer = new Int32Array(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.status + 4), work + emnapiAWMT.offset.status, 1);
|
|
2319
2354
|
Atomics.store(statusBuffer, 0, 0);
|
|
2320
2355
|
var mutex = emnapiAWMT.getMutex();
|
|
2321
2356
|
var cond = emnapiAWMT.getCond();
|
|
@@ -2327,18 +2362,20 @@ function createNapiModule(options) {
|
|
|
2327
2362
|
mutex.unlock();
|
|
2328
2363
|
throw err;
|
|
2329
2364
|
}
|
|
2365
|
+
emnapiAWMT.ensureBufferFor(emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.idle_threads + 4);
|
|
2330
2366
|
if (new DataView(wasmMemory.buffer).getUint32(emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.idle_threads, true) > 0) cond.signal();
|
|
2331
2367
|
mutex.unlock();
|
|
2332
2368
|
},
|
|
2333
2369
|
cancelWork: function(work) {
|
|
2334
2370
|
var cancelled = false;
|
|
2335
2371
|
emnapiAWMT.getMutex().execute(function() {
|
|
2372
|
+
emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.status + 4);
|
|
2336
2373
|
var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
|
|
2337
2374
|
cancelled = !emnapiAWMT.queueEmpty(work + emnapiAWMT.offset.queue) && HEAP_DATA_VIEW.getInt32(work + emnapiAWMT.offset.status, true) !== 2;
|
|
2338
2375
|
if (cancelled) emnapiAWMT.queueRemove(work + emnapiAWMT.offset.queue);
|
|
2339
2376
|
});
|
|
2340
2377
|
if (!cancelled) return 9;
|
|
2341
|
-
if (Atomics.compareExchange(new Int32Array(
|
|
2378
|
+
if (Atomics.compareExchange(new Int32Array(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.status + 4), work + emnapiAWMT.offset.status, 1), 0, 0, 1) !== 0) return 9;
|
|
2342
2379
|
emnapiCtx.feature.setImmediate(function() {
|
|
2343
2380
|
emnapiAWMT.callComplete(work, 11);
|
|
2344
2381
|
});
|
|
@@ -2362,7 +2399,7 @@ function createNapiModule(options) {
|
|
|
2362
2399
|
var resource = emnapiAWMT.getResource(work);
|
|
2363
2400
|
var resource_value = emnapiCtx.refStore.get(resource).get();
|
|
2364
2401
|
var resourceObject = emnapiCtx.handleStore.get(resource_value).value;
|
|
2365
|
-
var view = new DataView(
|
|
2402
|
+
var view = new DataView(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.trigger_async_id + 8));
|
|
2366
2403
|
var asyncId = view.getFloat64(work + emnapiAWMT.offset.async_id, true);
|
|
2367
2404
|
var triggerAsyncId = view.getFloat64(work + emnapiAWMT.offset.trigger_async_id, true);
|
|
2368
2405
|
emnapiNodeBinding.node.makeCallback(resourceObject, callback, [], {
|
|
@@ -2406,7 +2443,7 @@ function createNapiModule(options) {
|
|
|
2406
2443
|
var aw = _malloc(sizeofAW);
|
|
2407
2444
|
if (!aw) return envObject.setLastError(9);
|
|
2408
2445
|
aw >>>= 0;
|
|
2409
|
-
new Uint8Array(
|
|
2446
|
+
new Uint8Array(emnapiAWMT.ensureBufferFor(aw + sizeofAW)).subarray(aw, aw + sizeofAW).fill(0);
|
|
2410
2447
|
var s = envObject.ensureHandleId(resourceObject);
|
|
2411
2448
|
var resource_ = emnapiCtx.createReference(envObject, s, 1, 1).id;
|
|
2412
2449
|
var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
|
|
@@ -2439,7 +2476,7 @@ function createNapiModule(options) {
|
|
|
2439
2476
|
var resource = emnapiAWMT.getResource(work);
|
|
2440
2477
|
emnapiCtx.refStore.get(resource).dispose();
|
|
2441
2478
|
if (emnapiNodeBinding) {
|
|
2442
|
-
var view = new DataView(
|
|
2479
|
+
var view = new DataView(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.trigger_async_id + 8));
|
|
2443
2480
|
_emnapi_node_emit_async_destroy(view.getFloat64(work + emnapiAWMT.offset.async_id, true), view.getFloat64(work + emnapiAWMT.offset.trigger_async_id, true));
|
|
2444
2481
|
}
|
|
2445
2482
|
_free(work);
|
|
@@ -2491,10 +2528,11 @@ function createNapiModule(options) {
|
|
|
2491
2528
|
var workerQueueAddr = globalAddress + emnapiAWMT.globalOffset.q;
|
|
2492
2529
|
var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
|
|
2493
2530
|
for (;;) {
|
|
2531
|
+
emnapiAWMT.ensureBufferFor(workerQueueAddr + 4);
|
|
2494
2532
|
while (emnapiAWMT.queueEmpty(workerQueueAddr)) {
|
|
2495
|
-
Atomics.add(new Int32Array(
|
|
2533
|
+
Atomics.add(new Int32Array(emnapiAWMT.ensureBufferFor(idleThreadsAddr + 4), idleThreadsAddr, 1), 0, 1);
|
|
2496
2534
|
cond.wait();
|
|
2497
|
-
Atomics.sub(new Int32Array(
|
|
2535
|
+
Atomics.sub(new Int32Array(emnapiAWMT.ensureBufferFor(idleThreadsAddr + 4), idleThreadsAddr, 1), 0, 1);
|
|
2498
2536
|
}
|
|
2499
2537
|
var q = HEAP_DATA_VIEW.getUint32(workerQueueAddr, true);
|
|
2500
2538
|
if (q === exitMessageAddr) {
|
|
@@ -2506,7 +2544,7 @@ function createNapiModule(options) {
|
|
|
2506
2544
|
emnapiAWMT.queueRemove(q);
|
|
2507
2545
|
emnapiAWMT.queueInit(q);
|
|
2508
2546
|
mutex.unlock();
|
|
2509
|
-
var statusBuffer = new Int32Array(
|
|
2547
|
+
var statusBuffer = new Int32Array(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.status + 4), work + emnapiAWMT.offset.status, 1);
|
|
2510
2548
|
if (Atomics.load(statusBuffer, 0) === 1) abort("unreachable");
|
|
2511
2549
|
var execute = emnapiAWMT.getExecute(work);
|
|
2512
2550
|
var env = emnapiAWMT.getEnv(work);
|
|
@@ -2695,6 +2733,67 @@ function createNapiModule(options) {
|
|
|
2695
2733
|
}
|
|
2696
2734
|
};
|
|
2697
2735
|
/**
|
|
2736
|
+
* Metadata layout in wasm shared memory (allocated with _malloc):
|
|
2737
|
+
* offset 0: refcount (int32, 4 bytes - for Atomics)
|
|
2738
|
+
* offset POINTER_SIZE: external_data (pointer)
|
|
2739
|
+
* offset 2*POINTER_SIZE: byte_length (size_t)
|
|
2740
|
+
* offset 3*POINTER_SIZE: finalize_cb (pointer)
|
|
2741
|
+
* offset 4*POINTER_SIZE: finalize_data (pointer)
|
|
2742
|
+
* offset 5*POINTER_SIZE: finalize_hint (pointer)
|
|
2743
|
+
* Total: 6 * POINTER_SIZE bytes
|
|
2744
|
+
*/
|
|
2745
|
+
/**
|
|
2746
|
+
* @__postset
|
|
2747
|
+
* ```
|
|
2748
|
+
* emnapiExternalSAB.init();
|
|
2749
|
+
* ```
|
|
2750
|
+
*/
|
|
2751
|
+
var emnapiExternalSAB = {
|
|
2752
|
+
registry: void 0,
|
|
2753
|
+
handleTable: /* @__PURE__ */ new WeakMap(),
|
|
2754
|
+
init: function() {
|
|
2755
|
+
emnapiExternalSAB.handleTable = /* @__PURE__ */ new WeakMap();
|
|
2756
|
+
emnapiExternalSAB.registry = typeof FinalizationRegistry === "function" ? new FinalizationRegistry(function(metaPtr) {
|
|
2757
|
+
emnapiExternalSAB.release(metaPtr);
|
|
2758
|
+
}) : void 0;
|
|
2759
|
+
},
|
|
2760
|
+
allocMeta: function(external_data, byte_length, finalize_cb, finalize_data, finalize_hint) {
|
|
2761
|
+
var metaPtr = _malloc(24);
|
|
2762
|
+
if (!metaPtr) throw new Error("Out of memory");
|
|
2763
|
+
metaPtr >>>= 0;
|
|
2764
|
+
Atomics.store(new Int32Array(wasmMemory.buffer, metaPtr, 1), 0, 1);
|
|
2765
|
+
var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
|
|
2766
|
+
HEAP_DATA_VIEW.setUint32(metaPtr + 4, external_data, true);
|
|
2767
|
+
HEAP_DATA_VIEW.setUint32(metaPtr + 8, byte_length, true);
|
|
2768
|
+
HEAP_DATA_VIEW.setUint32(metaPtr + 12, finalize_cb, true);
|
|
2769
|
+
HEAP_DATA_VIEW.setUint32(metaPtr + 16, finalize_data, true);
|
|
2770
|
+
HEAP_DATA_VIEW.setUint32(metaPtr + 20, finalize_hint, true);
|
|
2771
|
+
return metaPtr;
|
|
2772
|
+
},
|
|
2773
|
+
readMeta: function(metaPtr) {
|
|
2774
|
+
var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
|
|
2775
|
+
return {
|
|
2776
|
+
external_data: HEAP_DATA_VIEW.getUint32(metaPtr + 4, true),
|
|
2777
|
+
byte_length: HEAP_DATA_VIEW.getUint32(metaPtr + 8, true),
|
|
2778
|
+
finalize_cb: HEAP_DATA_VIEW.getUint32(metaPtr + 12, true),
|
|
2779
|
+
finalize_data: HEAP_DATA_VIEW.getUint32(metaPtr + 16, true),
|
|
2780
|
+
finalize_hint: HEAP_DATA_VIEW.getUint32(metaPtr + 20, true)
|
|
2781
|
+
};
|
|
2782
|
+
},
|
|
2783
|
+
release: function(metaPtr) {
|
|
2784
|
+
if (Atomics.sub(new Int32Array(wasmMemory.buffer, metaPtr, 1), 0, 1) === 1) {
|
|
2785
|
+
var info = emnapiExternalSAB.readMeta(metaPtr);
|
|
2786
|
+
var finalize_cb = info.finalize_cb;
|
|
2787
|
+
if (finalize_cb) {
|
|
2788
|
+
var finalize_data = info.finalize_data;
|
|
2789
|
+
var finalize_hint = info.finalize_hint;
|
|
2790
|
+
wasmTable.get(finalize_cb)(finalize_data, finalize_hint);
|
|
2791
|
+
}
|
|
2792
|
+
_free(metaPtr);
|
|
2793
|
+
}
|
|
2794
|
+
}
|
|
2795
|
+
};
|
|
2796
|
+
/**
|
|
2698
2797
|
* @__postset
|
|
2699
2798
|
* ```
|
|
2700
2799
|
* emnapiString.init();
|
|
@@ -4343,16 +4442,95 @@ function createNapiModule(options) {
|
|
|
4343
4442
|
HEAP_DATA_VIEW.setUint32(version + 8, versions[2], true);
|
|
4344
4443
|
return envObject.clearLastError();
|
|
4345
4444
|
}
|
|
4445
|
+
/**
|
|
4446
|
+
* Get the handle for an external SharedArrayBuffer.
|
|
4447
|
+
* Must be called on the emnapi main thread.
|
|
4448
|
+
* @__sig ippp
|
|
4449
|
+
*/
|
|
4450
|
+
function emnapi_get_external_sharedarraybuffer_handle(env, sharedarraybuffer, handle) {
|
|
4451
|
+
if (!env) return 1;
|
|
4452
|
+
var envObject = emnapiCtx.envStore.get(env);
|
|
4453
|
+
envObject.checkGCAccess();
|
|
4454
|
+
if (!envObject.tryCatch.isEmpty()) return envObject.setLastError(10);
|
|
4455
|
+
if (!envObject.canCallIntoJs()) return envObject.setLastError(envObject.moduleApiVersion >= 10 ? 23 : 10);
|
|
4456
|
+
envObject.clearLastError();
|
|
4457
|
+
try {
|
|
4458
|
+
if (!sharedarraybuffer) return envObject.setLastError(1);
|
|
4459
|
+
if (!handle) return envObject.setLastError(1);
|
|
4460
|
+
handle >>>= 0;
|
|
4461
|
+
var jsValue = emnapiCtx.handleStore.get(sharedarraybuffer).value;
|
|
4462
|
+
if (!emnapiExternalMemory.isSharedArrayBuffer(jsValue)) return envObject.setLastError(1);
|
|
4463
|
+
var metaPtr = emnapiExternalSAB.handleTable.get(jsValue);
|
|
4464
|
+
if (metaPtr === void 0) return envObject.setLastError(1);
|
|
4465
|
+
new DataView(wasmMemory.buffer).setUint32(handle, metaPtr, true);
|
|
4466
|
+
return envObject.getReturnStatus();
|
|
4467
|
+
} catch (err) {
|
|
4468
|
+
envObject.tryCatch.setError(err);
|
|
4469
|
+
return envObject.setLastError(10);
|
|
4470
|
+
}
|
|
4471
|
+
}
|
|
4472
|
+
/**
|
|
4473
|
+
* Acquire a reference to an external SharedArrayBuffer.
|
|
4474
|
+
* Can be called on any thread.
|
|
4475
|
+
* @__sig vp
|
|
4476
|
+
*/
|
|
4477
|
+
function emnapi_acquire_external_sharedarraybuffer(handle) {
|
|
4478
|
+
handle >>>= 0;
|
|
4479
|
+
Atomics.add(new Int32Array(wasmMemory.buffer, handle, 1), 0, 1);
|
|
4480
|
+
}
|
|
4481
|
+
/**
|
|
4482
|
+
* Release a reference to an external SharedArrayBuffer.
|
|
4483
|
+
* Can be called on any thread.
|
|
4484
|
+
* @__sig vp
|
|
4485
|
+
*/
|
|
4486
|
+
function emnapi_release_external_sharedarraybuffer(handle) {
|
|
4487
|
+
handle >>>= 0;
|
|
4488
|
+
emnapiExternalSAB.release(handle);
|
|
4489
|
+
}
|
|
4490
|
+
/**
|
|
4491
|
+
* Acquire a reference to an external SharedArrayBuffer on the current thread.
|
|
4492
|
+
* Can be called on any thread. Increments refcount and registers in
|
|
4493
|
+
* the current thread's FinalizationRegistry.
|
|
4494
|
+
* Exposed as Module.emnapiAcquireExternalSharedArrayBuffer (emscripten) or
|
|
4495
|
+
* napiModule.emnapi.acquireExternalSharedArrayBuffer (core).
|
|
4496
|
+
*/
|
|
4497
|
+
function $emnapiAcquireExternalSharedArrayBuffer(handle, sab) {
|
|
4498
|
+
if (sab != null && !emnapiExternalMemory.isSharedArrayBuffer(sab)) throw new TypeError("Expected a SharedArrayBuffer");
|
|
4499
|
+
if (!emnapiExternalSAB.registry) throw new Error("FinalizationRegistry is not supported in this environment");
|
|
4500
|
+
handle >>>= 0;
|
|
4501
|
+
var meta = emnapiExternalSAB.readMeta(handle);
|
|
4502
|
+
var external_data = meta.external_data;
|
|
4503
|
+
external_data >>>= 0;
|
|
4504
|
+
if (sab == null) {
|
|
4505
|
+
sab = new SharedArrayBuffer(meta.byte_length);
|
|
4506
|
+
new Uint8Array(sab).set(new Uint8Array(wasmMemory.buffer, external_data, meta.byte_length));
|
|
4507
|
+
} else if (emnapiExternalSAB.handleTable.has(sab)) return sab;
|
|
4508
|
+
Atomics.add(new Int32Array(wasmMemory.buffer, handle, 1), 0, 1);
|
|
4509
|
+
if (!emnapiExternalMemory.table.has(sab)) {
|
|
4510
|
+
if (external_data) emnapiExternalMemory.table.set(sab, {
|
|
4511
|
+
address: external_data,
|
|
4512
|
+
ownership: 1,
|
|
4513
|
+
runtimeAllocated: 0
|
|
4514
|
+
});
|
|
4515
|
+
}
|
|
4516
|
+
emnapiExternalSAB.handleTable.set(sab, handle);
|
|
4517
|
+
emnapiExternalSAB.registry.register(sab, handle);
|
|
4518
|
+
return sab;
|
|
4519
|
+
}
|
|
4346
4520
|
var emnapiMod = /*#__PURE__*/ Object.freeze({
|
|
4347
4521
|
__proto__: null,
|
|
4522
|
+
$emnapiAcquireExternalSharedArrayBuffer,
|
|
4348
4523
|
$emnapiGetMemoryAddress,
|
|
4349
4524
|
$emnapiSyncMemory,
|
|
4525
|
+
emnapi_acquire_external_sharedarraybuffer,
|
|
4350
4526
|
emnapi_create_memory_view,
|
|
4527
|
+
emnapi_get_external_sharedarraybuffer_handle,
|
|
4351
4528
|
emnapi_get_memory_address,
|
|
4352
4529
|
emnapi_get_runtime_version,
|
|
4353
4530
|
emnapi_is_node_binding_available,
|
|
4354
4531
|
emnapi_is_support_bigint,
|
|
4355
4532
|
emnapi_is_support_weakref,
|
|
4533
|
+
emnapi_release_external_sharedarraybuffer,
|
|
4356
4534
|
emnapi_sync_memory
|
|
4357
4535
|
});
|
|
4358
4536
|
/**
|
|
@@ -4538,6 +4716,50 @@ function createNapiModule(options) {
|
|
|
4538
4716
|
}
|
|
4539
4717
|
}
|
|
4540
4718
|
/**
|
|
4719
|
+
* @__sig ipppppp
|
|
4720
|
+
*/
|
|
4721
|
+
function node_api_create_external_sharedarraybuffer(env, external_data, byte_length, finalize_cb, finalize_hint, result) {
|
|
4722
|
+
var value;
|
|
4723
|
+
if (!env) return 1;
|
|
4724
|
+
var envObject = emnapiCtx.envStore.get(env);
|
|
4725
|
+
envObject.checkGCAccess();
|
|
4726
|
+
if (!envObject.tryCatch.isEmpty()) return envObject.setLastError(10);
|
|
4727
|
+
if (!envObject.canCallIntoJs()) return envObject.setLastError(envObject.moduleApiVersion >= 10 ? 23 : 10);
|
|
4728
|
+
envObject.clearLastError();
|
|
4729
|
+
try {
|
|
4730
|
+
if (!result) return envObject.setLastError(1);
|
|
4731
|
+
byte_length >>>= 0;
|
|
4732
|
+
external_data >>>= 0;
|
|
4733
|
+
result >>>= 0;
|
|
4734
|
+
byte_length = byte_length >>> 0;
|
|
4735
|
+
if (!external_data) byte_length = 0;
|
|
4736
|
+
if (external_data + byte_length > wasmMemory.buffer.byteLength) throw new RangeError("Memory out of range");
|
|
4737
|
+
if (!emnapiExternalSAB.registry && finalize_cb) throw emnapiCtx.createNotSupportWeakRefError("node_api_create_external_sharedarraybuffer", "Parameter \"finalize_cb\" must be 0(NULL)");
|
|
4738
|
+
var sharedArrayBuffer = new SharedArrayBuffer(byte_length);
|
|
4739
|
+
if (byte_length !== 0) {
|
|
4740
|
+
new Uint8Array(sharedArrayBuffer).set(new Uint8Array(wasmMemory.buffer).subarray(external_data, external_data + byte_length));
|
|
4741
|
+
emnapiExternalMemory.table.set(sharedArrayBuffer, {
|
|
4742
|
+
address: external_data,
|
|
4743
|
+
ownership: 1,
|
|
4744
|
+
runtimeAllocated: 0
|
|
4745
|
+
});
|
|
4746
|
+
}
|
|
4747
|
+
value = emnapiCtx.addToCurrentScope(sharedArrayBuffer).id;
|
|
4748
|
+
if (finalize_cb) {
|
|
4749
|
+
finalize_cb >>>= 0;
|
|
4750
|
+
finalize_hint >>>= 0;
|
|
4751
|
+
var metaPtr = emnapiExternalSAB.allocMeta(external_data, byte_length, finalize_cb, external_data, finalize_hint);
|
|
4752
|
+
emnapiExternalSAB.handleTable.set(sharedArrayBuffer, metaPtr);
|
|
4753
|
+
emnapiExternalSAB.registry.register(sharedArrayBuffer, metaPtr);
|
|
4754
|
+
}
|
|
4755
|
+
new DataView(wasmMemory.buffer).setUint32(result, value, true);
|
|
4756
|
+
return envObject.getReturnStatus();
|
|
4757
|
+
} catch (err) {
|
|
4758
|
+
envObject.tryCatch.setError(err);
|
|
4759
|
+
return envObject.setLastError(10);
|
|
4760
|
+
}
|
|
4761
|
+
}
|
|
4762
|
+
/**
|
|
4541
4763
|
* @__sig ipp
|
|
4542
4764
|
*/
|
|
4543
4765
|
function napi_create_object(env, result) {
|
|
@@ -4625,9 +4847,7 @@ function createNapiModule(options) {
|
|
|
4625
4847
|
try {
|
|
4626
4848
|
if (!arraybuffer) return envObject.setLastError(1);
|
|
4627
4849
|
if (!result) return envObject.setLastError(1);
|
|
4628
|
-
var
|
|
4629
|
-
if (!handle.isArrayBuffer()) return envObject.setLastError(1);
|
|
4630
|
-
var buffer = handle.value;
|
|
4850
|
+
var buffer = emnapiCtx.handleStore.get(arraybuffer).value;
|
|
4631
4851
|
byte_offset >>>= 0;
|
|
4632
4852
|
length >>>= 0;
|
|
4633
4853
|
var createTypedArray = function(envObject, Type, size_of_element, buffer, byte_offset, length) {
|
|
@@ -4663,7 +4883,7 @@ function createNapiModule(options) {
|
|
|
4663
4883
|
new DataView(wasmMemory.buffer).setUint32(result, value, true);
|
|
4664
4884
|
return envObject.getReturnStatus();
|
|
4665
4885
|
};
|
|
4666
|
-
switch (type) {
|
|
4886
|
+
if (buffer instanceof ArrayBuffer || emnapiExternalMemory.isSharedArrayBuffer(buffer)) switch (type) {
|
|
4667
4887
|
case 0: return createTypedArray(envObject, Int8Array, 1, buffer, byte_offset, length);
|
|
4668
4888
|
case 1: return createTypedArray(envObject, Uint8Array, 1, buffer, byte_offset, length);
|
|
4669
4889
|
case 2: return createTypedArray(envObject, Uint8ClampedArray, 1, buffer, byte_offset, length);
|
|
@@ -4680,6 +4900,7 @@ function createNapiModule(options) {
|
|
|
4680
4900
|
return createTypedArray(envObject, Float16Array, 2, buffer, byte_offset, length);
|
|
4681
4901
|
default: return envObject.setLastError(1);
|
|
4682
4902
|
}
|
|
4903
|
+
else return envObject.setLastError(1);
|
|
4683
4904
|
} catch (err) {
|
|
4684
4905
|
envObject.tryCatch.setError(err);
|
|
4685
4906
|
return envObject.setLastError(10);
|
|
@@ -4903,6 +5124,7 @@ function createNapiModule(options) {
|
|
|
4903
5124
|
napi_create_symbol,
|
|
4904
5125
|
napi_create_typedarray,
|
|
4905
5126
|
node_api_create_buffer_from_arraybuffer,
|
|
5127
|
+
node_api_create_external_sharedarraybuffer,
|
|
4906
5128
|
node_api_create_object_with_properties,
|
|
4907
5129
|
node_api_create_sharedarraybuffer,
|
|
4908
5130
|
node_api_symbol_for
|
|
@@ -6624,11 +6846,13 @@ function createNapiModule(options) {
|
|
|
6624
6846
|
});
|
|
6625
6847
|
emnapiAWST.init();
|
|
6626
6848
|
emnapiExternalMemory.init();
|
|
6849
|
+
emnapiExternalSAB.init();
|
|
6627
6850
|
emnapiString.init();
|
|
6628
6851
|
emnapiTSFN.init();
|
|
6629
6852
|
PThread.init();
|
|
6630
6853
|
napiModule.emnapi.syncMemory = $emnapiSyncMemory;
|
|
6631
6854
|
napiModule.emnapi.getMemoryAddress = $emnapiGetMemoryAddress;
|
|
6855
|
+
napiModule.emnapi.acquireExternalSharedArrayBuffer = $emnapiAcquireExternalSharedArrayBuffer;
|
|
6632
6856
|
function addImports(mod) {
|
|
6633
6857
|
var keys = Object.keys(mod);
|
|
6634
6858
|
for (var i = 0; i < keys.length; ++i) {
|
|
@@ -6775,7 +6999,7 @@ function instantiateNapiModuleSync(wasmInput, options) {
|
|
|
6775
6999
|
return loadNapiModuleImpl(loadSyncCallback, void 0, wasmInput, options);
|
|
6776
7000
|
}
|
|
6777
7001
|
//#endregion
|
|
6778
|
-
//#region ../../node_modules/.pnpm/@emnapi+runtime@1.
|
|
7002
|
+
//#region ../../node_modules/.pnpm/@emnapi+runtime@1.11.1/node_modules/@emnapi/runtime/dist/emnapi.esm-bundler.js
|
|
6779
7003
|
var externalValue = /* @__PURE__ */ new WeakMap();
|
|
6780
7004
|
/** @public */
|
|
6781
7005
|
function isExternal(object) {
|
|
@@ -6902,7 +7126,7 @@ var _Buffer = typeof Buffer === "function" ? Buffer : /*#__PURE__*/ (function()
|
|
|
6902
7126
|
return _require("buffer").Buffer;
|
|
6903
7127
|
} catch (_) {}
|
|
6904
7128
|
})();
|
|
6905
|
-
var version = "1.
|
|
7129
|
+
var version = "1.11.1";
|
|
6906
7130
|
var NAPI_VERSION_EXPERIMENTAL = 2147483647;
|
|
6907
7131
|
var Handle = /* @__PURE__ */ function() {
|
|
6908
7132
|
function Handle(id, value) {
|
|
@@ -8015,7 +8239,7 @@ function getDefaultContext() {
|
|
|
8015
8239
|
return defaultContext;
|
|
8016
8240
|
}
|
|
8017
8241
|
//#endregion
|
|
8018
|
-
//#region ../../node_modules/.pnpm/@tybys+wasm-util@0.10.
|
|
8242
|
+
//#region ../../node_modules/.pnpm/@tybys+wasm-util@0.10.2/node_modules/@tybys/wasm-util/dist/wasm-util.esm-bundler.js
|
|
8019
8243
|
const _WebAssembly = typeof WebAssembly !== "undefined" ? WebAssembly : typeof WXWebAssembly !== "undefined" ? WXWebAssembly : void 0;
|
|
8020
8244
|
if (!_WebAssembly) throw new Error("WebAssembly is not supported in this environment");
|
|
8021
8245
|
function validateObject(value, name) {
|
|
@@ -8053,6 +8277,106 @@ function unsharedSlice(view, start, end) {
|
|
|
8053
8277
|
}
|
|
8054
8278
|
const CHAR_DOT = 46;
|
|
8055
8279
|
const CHAR_FORWARD_SLASH = 47;
|
|
8280
|
+
const CHAR_BACKWARD_SLASH = 92;
|
|
8281
|
+
const CHAR_COLON = 58;
|
|
8282
|
+
const CHAR_UPPERCASE_A = 65;
|
|
8283
|
+
const CHAR_UPPERCASE_Z = 90;
|
|
8284
|
+
const CHAR_LOWERCASE_A = 97;
|
|
8285
|
+
const CHAR_LOWERCASE_Z = 122;
|
|
8286
|
+
function isPathSeparatorWin(code) {
|
|
8287
|
+
return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
|
|
8288
|
+
}
|
|
8289
|
+
function isWindowsDeviceRoot(code) {
|
|
8290
|
+
return code >= CHAR_UPPERCASE_A && code <= CHAR_UPPERCASE_Z || code >= CHAR_LOWERCASE_A && code <= CHAR_LOWERCASE_Z;
|
|
8291
|
+
}
|
|
8292
|
+
const _isWin32 = typeof process !== "undefined" && process.platform === "win32";
|
|
8293
|
+
/**
|
|
8294
|
+
* Windows variant of `resolve()`. Mirrors Node's `path.win32.resolve`
|
|
8295
|
+
* semantics enough for the WASI shim's needs (drive-letter absolutes
|
|
8296
|
+
* + UNC paths + per-drive cwd lookups via `process.env`/`process.cwd`).
|
|
8297
|
+
*
|
|
8298
|
+
* Why this is needed: on Windows, `FileDescriptor.realPath` is the
|
|
8299
|
+
* host realpath returned by `fs.realpathSync(realPath, 'utf8')` — the
|
|
8300
|
+
* backslash form `D:\…`. The POSIX-only `resolveImpl` below only
|
|
8301
|
+
* treats `/` as a separator, reads `D` as non-`/`, decides realPath
|
|
8302
|
+
* is "relative", and produces a garbage joined path. Downstream
|
|
8303
|
+
* `fs.openSync(garbage)` then returns `EINVAL` and the WASI caller
|
|
8304
|
+
* sees a permanent failure. This function gives us the correct
|
|
8305
|
+
* Windows-style resolution without taking a Node-only `path` import
|
|
8306
|
+
* (which would break browser bundles of this package).
|
|
8307
|
+
*
|
|
8308
|
+
* Cribbed from Node's `lib/path.js` `win32.resolve()` (MIT-licensed),
|
|
8309
|
+
* trimmed to what WASI realpath resolution actually exercises.
|
|
8310
|
+
*/
|
|
8311
|
+
function resolveWin32(args) {
|
|
8312
|
+
let resolvedDevice = "";
|
|
8313
|
+
let resolvedTail = "";
|
|
8314
|
+
let resolvedAbsolute = false;
|
|
8315
|
+
for (let i = args.length - 1; i >= -1; i--) {
|
|
8316
|
+
let path;
|
|
8317
|
+
if (i >= 0) {
|
|
8318
|
+
path = args[i];
|
|
8319
|
+
validateString(path, "path");
|
|
8320
|
+
if (path.length === 0) continue;
|
|
8321
|
+
} else if (resolvedDevice.length === 0) path = typeof process !== "undefined" && typeof process.cwd === "function" ? process.cwd() : "";
|
|
8322
|
+
else {
|
|
8323
|
+
const envKey = `=${resolvedDevice}`;
|
|
8324
|
+
const env = typeof process !== "undefined" ? process.env : void 0;
|
|
8325
|
+
path = env && typeof env[envKey] === "string" ? env[envKey] : typeof process !== "undefined" && typeof process.cwd === "function" ? process.cwd() : "";
|
|
8326
|
+
if (path === void 0 || path.slice(0, 2).toLowerCase() !== resolvedDevice.toLowerCase() && path.charCodeAt(2) === CHAR_BACKWARD_SLASH) path = `${resolvedDevice}\\`;
|
|
8327
|
+
}
|
|
8328
|
+
const len = path.length;
|
|
8329
|
+
let rootEnd = 0;
|
|
8330
|
+
let device = "";
|
|
8331
|
+
let isAbsolute = false;
|
|
8332
|
+
const code = path.charCodeAt(0);
|
|
8333
|
+
if (len === 1) {
|
|
8334
|
+
if (isPathSeparatorWin(code)) {
|
|
8335
|
+
rootEnd = 1;
|
|
8336
|
+
isAbsolute = true;
|
|
8337
|
+
}
|
|
8338
|
+
} else if (isPathSeparatorWin(code)) {
|
|
8339
|
+
isAbsolute = true;
|
|
8340
|
+
if (isPathSeparatorWin(path.charCodeAt(1))) {
|
|
8341
|
+
let j = 2;
|
|
8342
|
+
let last = j;
|
|
8343
|
+
while (j < len && !isPathSeparatorWin(path.charCodeAt(j))) j++;
|
|
8344
|
+
if (j < len && j !== last) {
|
|
8345
|
+
const firstPart = path.slice(last, j);
|
|
8346
|
+
last = j;
|
|
8347
|
+
while (j < len && isPathSeparatorWin(path.charCodeAt(j))) j++;
|
|
8348
|
+
if (j < len && j !== last) {
|
|
8349
|
+
last = j;
|
|
8350
|
+
while (j < len && !isPathSeparatorWin(path.charCodeAt(j))) j++;
|
|
8351
|
+
if (j === len || j !== last) {
|
|
8352
|
+
device = `\\\\${firstPart}\\${path.slice(last, j)}`;
|
|
8353
|
+
rootEnd = j;
|
|
8354
|
+
}
|
|
8355
|
+
}
|
|
8356
|
+
}
|
|
8357
|
+
} else rootEnd = 1;
|
|
8358
|
+
} else if (isWindowsDeviceRoot(code) && path.charCodeAt(1) === CHAR_COLON) {
|
|
8359
|
+
device = path.slice(0, 2);
|
|
8360
|
+
rootEnd = 2;
|
|
8361
|
+
if (len > 2 && isPathSeparatorWin(path.charCodeAt(2))) {
|
|
8362
|
+
isAbsolute = true;
|
|
8363
|
+
rootEnd = 3;
|
|
8364
|
+
}
|
|
8365
|
+
}
|
|
8366
|
+
if (device.length > 0) if (resolvedDevice.length > 0) {
|
|
8367
|
+
if (device.toLowerCase() !== resolvedDevice.toLowerCase()) continue;
|
|
8368
|
+
} else resolvedDevice = device;
|
|
8369
|
+
if (resolvedAbsolute) {
|
|
8370
|
+
if (resolvedDevice.length > 0) break;
|
|
8371
|
+
} else {
|
|
8372
|
+
resolvedTail = `${path.slice(rootEnd)}\\${resolvedTail}`;
|
|
8373
|
+
resolvedAbsolute = isAbsolute;
|
|
8374
|
+
if (isAbsolute && resolvedDevice.length > 0) break;
|
|
8375
|
+
}
|
|
8376
|
+
}
|
|
8377
|
+
resolvedTail = normalizeString(resolvedTail, !resolvedAbsolute, "\\", isPathSeparatorWin);
|
|
8378
|
+
return resolvedDevice + (resolvedAbsolute ? "\\" : "") + resolvedTail || ".";
|
|
8379
|
+
}
|
|
8056
8380
|
function isPosixPathSeparator(code) {
|
|
8057
8381
|
return code === CHAR_FORWARD_SLASH;
|
|
8058
8382
|
}
|
|
@@ -8107,6 +8431,7 @@ function normalizeString(path, allowAboveRoot, separator, isPathSeparator) {
|
|
|
8107
8431
|
return res;
|
|
8108
8432
|
}
|
|
8109
8433
|
function resolve(...args) {
|
|
8434
|
+
if (_isWin32) return resolveWin32(args);
|
|
8110
8435
|
let resolvedPath = "";
|
|
8111
8436
|
let resolvedAbsolute = false;
|
|
8112
8437
|
for (let i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {
|
|
@@ -8563,6 +8888,15 @@ function wrapAsyncImport(f, parameterType, returnType) {
|
|
|
8563
8888
|
results: returnType
|
|
8564
8889
|
}, f, { suspending: "first" });
|
|
8565
8890
|
}
|
|
8891
|
+
const _isWin32Flags = typeof process !== "undefined" && process.platform === "win32";
|
|
8892
|
+
function _toWinOpenFlags(f) {
|
|
8893
|
+
let r = f & 3;
|
|
8894
|
+
if ((f & 64) !== 0) r |= 256;
|
|
8895
|
+
if ((f & 128) !== 0) r |= 1024;
|
|
8896
|
+
if ((f & 512) !== 0) r |= 512;
|
|
8897
|
+
if ((f & 1024) !== 0) r |= 8;
|
|
8898
|
+
return r;
|
|
8899
|
+
}
|
|
8566
8900
|
function copyMemory(targets, src) {
|
|
8567
8901
|
if (targets.length === 0 || src.length === 0) return 0;
|
|
8568
8902
|
let copied = 0;
|
|
@@ -9584,7 +9918,7 @@ var WASI$1 = class WASI$1 {
|
|
|
9584
9918
|
const pathString = decoder.decode(unsharedSlice(HEAPU8, path, path + path_len));
|
|
9585
9919
|
const fs = getFs(this);
|
|
9586
9920
|
const resolved_path = resolvePathSync(fs, fileDescriptor, pathString, dirflags);
|
|
9587
|
-
const r = fs.openSync(resolved_path, flagsRes, 438);
|
|
9921
|
+
const r = fs.openSync(resolved_path, _isWin32Flags ? _toWinOpenFlags(flagsRes) : flagsRes, 438);
|
|
9588
9922
|
const filetype = wasi.fds.getFileTypeByFd(r);
|
|
9589
9923
|
if (filetype !== 3 && ((o_flags & 2) !== 0 || resolved_path.endsWith("/"))) return 54;
|
|
9590
9924
|
const { base: max_base, inheriting: max_inheriting } = getRights(wasi.fds.stdio, r, flagsRes, filetype);
|
|
@@ -9611,7 +9945,7 @@ var WASI$1 = class WASI$1 {
|
|
|
9611
9945
|
const pathString = decoder.decode(unsharedSlice(HEAPU8, path, path + path_len));
|
|
9612
9946
|
const fs = getFs(this);
|
|
9613
9947
|
const resolved_path = await resolvePathAsync(fs, fileDescriptor, pathString, dirflags);
|
|
9614
|
-
const r = await fs.promises.open(resolved_path, flagsRes, 438);
|
|
9948
|
+
const r = await fs.promises.open(resolved_path, _isWin32Flags ? _toWinOpenFlags(flagsRes) : flagsRes, 438);
|
|
9615
9949
|
const filetype = await wasi.fds.getFileTypeByFd(r);
|
|
9616
9950
|
if ((o_flags & 2) !== 0 && filetype !== 3) return 54;
|
|
9617
9951
|
const { base: max_base, inheriting: max_inheriting } = getRights(wasi.fds.stdio, r.fd, flagsRes, filetype);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oxc-parser/binding-wasm32-wasi",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.137.0",
|
|
4
4
|
"cpu": [
|
|
5
5
|
"wasm32"
|
|
6
6
|
],
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
},
|
|
41
41
|
"browser": "parser.wasi-browser.js",
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@napi-rs/wasm-runtime": "^1.1.
|
|
44
|
-
"@emnapi/core": "1.
|
|
45
|
-
"@emnapi/runtime": "1.
|
|
43
|
+
"@napi-rs/wasm-runtime": "^1.1.5",
|
|
44
|
+
"@emnapi/core": "1.11.1",
|
|
45
|
+
"@emnapi/runtime": "1.11.1"
|
|
46
46
|
}
|
|
47
47
|
}
|
package/parser.wasm32-wasi.wasm
CHANGED
|
Binary file
|