@oxc-parser/binding-wasm32-wasi 0.134.0 → 0.136.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 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.1/node_modules/@emnapi/wasi-threads/dist/wasi-threads.esm-bundler.js
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
- for (var i = 0; i < this.runningWorkers.length; ++i) this.terminateWorker(this.runningWorkers[i]);
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$1 = instance.exports;
536
- memory !== null && memory !== void 0 || (memory = exports$1.memory);
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$1 && typeof exports$1._start === "function") if (this.childThread) {
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$1 = instance.exports;
559
- memory !== null && memory !== void 0 || (memory = exports$1.memory);
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.10.0/node_modules/@emnapi/core/dist/emnapi-core.esm-bundler.js
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$1 = instance.exports;
726
+ var exports = instance.exports;
739
727
  var module = options.module;
740
- var memory = options.memory || exports$1.memory;
741
- var table = options.table || exports$1.__indirect_function_table;
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$1.malloc !== "function") throw new TypeError("malloc is not exported");
748
- if (typeof exports$1.free !== "function") throw new TypeError("free is not exported");
749
- _malloc = exports$1.malloc;
750
- _free = exports$1.free;
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$1 = napiModule.exports;
764
- var exportsHandle = scope_1.add(exports$1);
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$1 : emnapiCtx.handleStore.get(napiValue).value;
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.runningWorkers.forEach(emnapiTSFN.addListener);
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(wasmMemory.buffer), pendng >>> 2) !== 0) emnapiTSFN.enqueue(payload.tsfn);
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(wasmMemory.buffer, queue, size).fill(0);
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(wasmMemory.buffer, index, 1);
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(wasmMemory.buffer, index, 1);
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(wasmMemory.buffer, index, 1);
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(wasmMemory.buffer, index, 1);
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(wasmMemory.buffer), index = func + offset >>> 2;
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(wasmMemory.buffer), index = func + offset >>> 2;
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(wasmMemory.buffer), index = func + offset >>> 2;
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(wasmMemory.buffer), index = func + offset >>> 2;
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(wasmMemory.buffer), func + emnapiTSFN.offset.state >>> 2);
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(wasmMemory.buffer), func + emnapiTSFN.offset.state >>> 2, value);
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(wasmMemory.buffer), func + emnapiTSFN.offset.handles_closing);
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(wasmMemory.buffer), func + emnapiTSFN.offset.handles_closing, value);
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(wasmMemory.buffer), func + emnapiTSFN.offset.dispatch_state >>> 2);
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(wasmMemory.buffer);
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(wasmMemory.buffer);
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(wasmMemory.buffer);
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(wasmMemory.buffer);
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 asyncRefOffset = func + emnapiTSFN.offset.async_ref >>> 2;
1751
- var arr = new Uint32Array(wasmMemory.buffer);
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(wasmMemory.buffer);
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(wasmMemory.buffer);
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(wasmMemory.buffer), func + emnapiTSFN.offset.async_pending >>> 2, 1);
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(wasmMemory.buffer);
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 ui32a = new Uint32Array(wasmMemory.buffer);
1904
- var index = func + emnapiTSFN.offset.dispatch_state >>> 2;
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(wasmMemory.buffer);
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
- if ((Atomics.or(new Uint32Array(wasmMemory.buffer), func + emnapiTSFN.offset.dispatch_state >>> 2, 2) & 1) === 1) return;
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(wasmMemory.buffer), pendng >>> 2) !== 0) return;
1941
- if (Atomics.exchange(new Int32Array(wasmMemory.buffer), pendng >>> 2, 1) === 0) if (typeof ENVIRONMENT_IS_PTHREAD !== "undefined" && ENVIRONMENT_IS_PTHREAD) postMessage({ __emnapi__: {
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(wasmMemory.buffer).subarray(tsfn, tsfn + sizeofTSFN).fill(0);
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 asyncRefOffset = func + emnapiTSFN.offset.async_ref >>> 2;
2089
- var arr = new Uint32Array(wasmMemory.buffer);
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 asyncRefOffset = func + emnapiTSFN.offset.async_ref >>> 2;
2105
- var arr = new Uint32Array(wasmMemory.buffer);
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.runningWorkers.forEach(emnapiAWMT.addListener);
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(wasmMemory.buffer, addr, size).fill(0);
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 tid = new DataView(wasmMemory.buffer).getInt32(index + 20, true);
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(wasmMemory.buffer, index, 1);
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(wasmMemory.buffer, index, 1);
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(wasmMemory.buffer, index, 1);
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(wasmMemory.buffer, index, 1);
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(wasmMemory.buffer, work + emnapiAWMT.offset.status, 1);
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(wasmMemory.buffer, work + emnapiAWMT.offset.status, 1), 0, 0, 1) !== 0) return 9;
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(wasmMemory.buffer);
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(wasmMemory.buffer).subarray(aw, aw + sizeofAW).fill(0);
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(wasmMemory.buffer);
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(wasmMemory.buffer, idleThreadsAddr, 1), 0, 1);
2533
+ Atomics.add(new Int32Array(emnapiAWMT.ensureBufferFor(idleThreadsAddr + 4), idleThreadsAddr, 1), 0, 1);
2496
2534
  cond.wait();
2497
- Atomics.sub(new Int32Array(wasmMemory.buffer, idleThreadsAddr, 1), 0, 1);
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(wasmMemory.buffer, work + emnapiAWMT.offset.status, 1);
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 handle = emnapiCtx.handleStore.get(arraybuffer);
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.10.0/node_modules/@emnapi/runtime/dist/emnapi.esm-bundler.js
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.10.0";
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.1/node_modules/@tybys/wasm-util/dist/wasm-util.esm-bundler.js
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.134.0",
3
+ "version": "0.136.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.4",
44
- "@emnapi/core": "1.10.0",
45
- "@emnapi/runtime": "1.10.0"
43
+ "@napi-rs/wasm-runtime": "^1.1.5",
44
+ "@emnapi/core": "1.11.1",
45
+ "@emnapi/runtime": "1.11.1"
46
46
  }
47
47
  }
Binary file