@tailwindcss/oxide-wasm32-wasi 0.0.0-insiders.bd30a71 → 0.0.0-insiders.bdcd708

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.
Files changed (57) hide show
  1. package/node_modules/@emnapi/core/dist/emnapi-core.cjs.js +1142 -373
  2. package/node_modules/@emnapi/core/dist/emnapi-core.cjs.min.d.ts +3 -3
  3. package/node_modules/@emnapi/core/dist/emnapi-core.cjs.min.js +1 -1
  4. package/node_modules/@emnapi/core/dist/emnapi-core.d.mts +3 -3
  5. package/node_modules/@emnapi/core/dist/emnapi-core.d.ts +3 -3
  6. package/node_modules/@emnapi/core/dist/emnapi-core.esm-bundler.js +1245 -378
  7. package/node_modules/@emnapi/core/dist/emnapi-core.js +1271 -416
  8. package/node_modules/@emnapi/core/dist/emnapi-core.min.d.mts +3 -3
  9. package/node_modules/@emnapi/core/dist/emnapi-core.min.js +1 -1
  10. package/node_modules/@emnapi/core/dist/emnapi-core.min.mjs +1 -1
  11. package/node_modules/@emnapi/core/dist/emnapi-core.mjs +1142 -373
  12. package/node_modules/@emnapi/core/package.json +2 -2
  13. package/node_modules/@emnapi/runtime/dist/emnapi.cjs.js +32 -5
  14. package/node_modules/@emnapi/runtime/dist/emnapi.cjs.min.d.ts +8 -2
  15. package/node_modules/@emnapi/runtime/dist/emnapi.cjs.min.js +1 -1
  16. package/node_modules/@emnapi/runtime/dist/emnapi.d.mts +8 -2
  17. package/node_modules/@emnapi/runtime/dist/emnapi.d.ts +8 -2
  18. package/node_modules/@emnapi/runtime/dist/emnapi.esm-bundler.js +33 -5
  19. package/node_modules/@emnapi/runtime/dist/emnapi.iife.d.ts +8 -2
  20. package/node_modules/@emnapi/runtime/dist/emnapi.iife.js +33 -5
  21. package/node_modules/@emnapi/runtime/dist/emnapi.js +33 -5
  22. package/node_modules/@emnapi/runtime/dist/emnapi.min.d.mts +8 -2
  23. package/node_modules/@emnapi/runtime/dist/emnapi.min.js +1 -1
  24. package/node_modules/@emnapi/runtime/dist/emnapi.min.mjs +1 -1
  25. package/node_modules/@emnapi/runtime/dist/emnapi.mjs +32 -5
  26. package/node_modules/@emnapi/runtime/package.json +1 -1
  27. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.cjs.js +21 -33
  28. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.cjs.min.d.ts +2 -1
  29. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.cjs.min.js +1 -1
  30. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.d.mts +2 -1
  31. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.d.ts +2 -1
  32. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.esm-bundler.js +21 -33
  33. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.js +21 -33
  34. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.min.d.mts +2 -1
  35. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.min.js +1 -1
  36. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.min.mjs +1 -1
  37. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.mjs +21 -33
  38. package/node_modules/@emnapi/wasi-threads/package.json +1 -1
  39. package/node_modules/@napi-rs/wasm-runtime/dist/fs-proxy.cjs +47 -12
  40. package/node_modules/@napi-rs/wasm-runtime/dist/fs.js +14310 -10201
  41. package/node_modules/@napi-rs/wasm-runtime/fs-proxy.js +47 -12
  42. package/node_modules/@napi-rs/wasm-runtime/package.json +6 -4
  43. package/node_modules/@tybys/wasm-util/dist/wasm-util.esm-bundler.js +164 -2
  44. package/node_modules/@tybys/wasm-util/dist/wasm-util.esm.js +164 -2
  45. package/node_modules/@tybys/wasm-util/dist/wasm-util.esm.min.js +1 -1
  46. package/node_modules/@tybys/wasm-util/dist/wasm-util.js +164 -2
  47. package/node_modules/@tybys/wasm-util/dist/wasm-util.min.js +1 -1
  48. package/node_modules/@tybys/wasm-util/lib/cjs/wasi/path.js +142 -0
  49. package/node_modules/@tybys/wasm-util/lib/cjs/wasi/preview1.js +22 -2
  50. package/node_modules/@tybys/wasm-util/lib/mjs/wasi/path.mjs +142 -0
  51. package/node_modules/@tybys/wasm-util/lib/mjs/wasi/preview1.mjs +22 -2
  52. package/node_modules/@tybys/wasm-util/package.json +1 -1
  53. package/package.json +6 -6
  54. package/tailwindcss-oxide.wasi-browser.js +1 -0
  55. package/tailwindcss-oxide.wasi.cjs +1 -1
  56. package/tailwindcss-oxide.wasm32-wasi.wasm +0 -0
  57. package/wasi-worker-browser.mjs +2 -0
@@ -216,7 +216,6 @@
216
216
  function ThreadManager(options) {
217
217
  var _a;
218
218
  this.unusedWorkers = [];
219
- this.runningWorkers = [];
220
219
  this.pthreads = Object.create(null);
221
220
  this.wasmModule = null;
222
221
  this.wasmMemory = null;
@@ -241,6 +240,7 @@
241
240
  this._beforeLoad = options.beforeLoad;
242
241
  }
243
242
  this.printErr = (_a = options.printErr) !== null && _a !== void 0 ? _a : console.error.bind(console);
243
+ this.threadSpawn = options.threadSpawn;
244
244
  }
245
245
  Object.defineProperty(ThreadManager.prototype, "nextWorkerID", {
246
246
  get: function () { return nextWorkerID; },
@@ -324,7 +324,6 @@
324
324
  delete this.pthreads[tid];
325
325
  }
326
326
  this.unusedWorkers.push(worker);
327
- this.runningWorkers.splice(this.runningWorkers.indexOf(worker), 1);
328
327
  delete worker.__emnapi_tid;
329
328
  if (ENVIRONMENT_IS_NODE) {
330
329
  worker.unref();
@@ -378,6 +377,12 @@
378
377
  _this_1.cleanThread(worker, payload.tid);
379
378
  }
380
379
  }
380
+ else if (type === 'spawn-thread') {
381
+ _this_1.threadSpawn(payload.startArg, payload.errorOrTid);
382
+ }
383
+ else if (type === 'terminate-all-threads') {
384
+ _this_1.terminateAllThreads();
385
+ }
381
386
  }
382
387
  };
383
388
  worker.onmessage = function (e) {
@@ -452,10 +457,6 @@
452
457
  }
453
458
  else {
454
459
  delete this.pthreads[tid];
455
- var index = this.runningWorkers.indexOf(worker);
456
- if (index !== -1) {
457
- this.runningWorkers.splice(index, 1);
458
- }
459
460
  this.terminateWorker(worker);
460
461
  delete worker.__emnapi_tid;
461
462
  }
@@ -476,14 +477,14 @@
476
477
  };
477
478
  };
478
479
  ThreadManager.prototype.terminateAllThreads = function () {
479
- for (var i = 0; i < this.runningWorkers.length; ++i) {
480
- this.terminateWorker(this.runningWorkers[i]);
480
+ var runningWorkers = Object.values(this.pthreads);
481
+ for (var i = 0; i < runningWorkers.length; ++i) {
482
+ this.terminateWorker(runningWorkers[i]);
481
483
  }
482
484
  for (var i = 0; i < this.unusedWorkers.length; ++i) {
483
485
  this.terminateWorker(this.unusedWorkers[i]);
484
486
  }
485
487
  this.unusedWorkers = [];
486
- this.runningWorkers = [];
487
488
  this.pthreads = Object.create(null);
488
489
  this.preparePool();
489
490
  };
@@ -633,18 +634,6 @@
633
634
  }
634
635
  this.postMessage = postMessage;
635
636
  var wasm64 = Boolean(options.wasm64);
636
- var onMessage = function (e) {
637
- if (e.data.__emnapi__) {
638
- var type = e.data.__emnapi__.type;
639
- var payload = e.data.__emnapi__.payload;
640
- if (type === 'spawn-thread') {
641
- threadSpawn(payload.startArg, payload.errorOrTid);
642
- }
643
- else if (type === 'terminate-all-threads') {
644
- _this_1.terminateAllThreads();
645
- }
646
- }
647
- };
648
637
  var threadSpawn = function (startArg, errorOrTid) {
649
638
  var _a;
650
639
  var EAGAIN = 6;
@@ -667,7 +656,7 @@
667
656
  }
668
657
  if (!isNewABI) {
669
658
  var malloc = _this_1.wasmInstance.exports.malloc;
670
- errorOrTid = wasm64 ? Number(malloc(BigInt(8))) : malloc(8);
659
+ errorOrTid = wasm64 ? Number(malloc(BigInt(8))) : (malloc(8) >>> 0);
671
660
  if (!errorOrTid) {
672
661
  return -48; /* ENOMEM */
673
662
  }
@@ -705,10 +694,9 @@
705
694
  if (!worker) {
706
695
  throw new Error('failed to get new worker');
707
696
  }
708
- PThread.addMessageEventListener(worker, onMessage);
709
697
  tid = PThread.markId(worker);
710
698
  if (ENVIRONMENT_IS_NODE) {
711
- worker.ref();
699
+ worker.unref();
712
700
  }
713
701
  worker.postMessage(createMessage('start', {
714
702
  tid: tid,
@@ -719,10 +707,6 @@
719
707
  if (typeof waitThreadStart === 'number') {
720
708
  var waitResult = Atomics.wait(sab, 0, 0, waitThreadStart);
721
709
  if (waitResult === 'timed-out') {
722
- try {
723
- PThread.cleanThread(worker, tid, true);
724
- }
725
- catch (_) { }
726
710
  throw new Error('Spawning thread timed out. Please check if the worker is created successfully and if message is handled properly in the worker.');
727
711
  }
728
712
  }
@@ -731,15 +715,17 @@
731
715
  }
732
716
  var r = Atomics.load(sab, 0);
733
717
  if (r > 1) {
734
- try {
735
- PThread.cleanThread(worker, tid, true);
736
- }
737
- catch (_) { }
738
718
  throw deserizeErrorFromBuffer(sab.buffer);
739
719
  }
740
720
  }
741
721
  }
742
722
  catch (e) {
723
+ if (worker !== undefined && tid !== undefined) {
724
+ try {
725
+ PThread.cleanThread(worker, tid, true);
726
+ }
727
+ catch (_) { }
728
+ }
743
729
  Atomics.store(struct, 0, 1);
744
730
  Atomics.store(struct, 1, EAGAIN);
745
731
  Atomics.notify(struct, 1);
@@ -753,7 +739,6 @@
753
739
  Atomics.store(struct, 0, 0);
754
740
  Atomics.store(struct, 1, tid);
755
741
  Atomics.notify(struct, 1);
756
- PThread.runningWorkers.push(worker);
757
742
  if (!shouldWait) {
758
743
  worker.whenLoaded.catch(function (err) {
759
744
  delete worker.whenLoaded;
@@ -768,6 +753,9 @@
768
753
  return tid;
769
754
  };
770
755
  this.threadSpawn = threadSpawn;
756
+ if (this.PThread) {
757
+ this.PThread.threadSpawn = threadSpawn;
758
+ }
771
759
  }
772
760
  WASIThreads.prototype.getImportObject = function () {
773
761
  return {
@@ -798,14 +786,14 @@
798
786
  * @returns A proxied WebAssembly instance if in child thread, other wise the original instance
799
787
  */
800
788
  WASIThreads.prototype.initialize = function (instance, module, memory) {
801
- var exports$1 = instance.exports;
802
- memory !== null && memory !== void 0 ? memory : (memory = exports$1.memory);
789
+ var exports = instance.exports;
790
+ memory !== null && memory !== void 0 ? memory : (memory = exports.memory);
803
791
  if (this.childThread) {
804
792
  instance = createInstanceProxy(instance, memory);
805
793
  }
806
794
  this.setup(instance, module, memory);
807
795
  var wasi = this.wasi;
808
- if (('_start' in exports$1) && (typeof exports$1._start === 'function')) {
796
+ if (('_start' in exports) && (typeof exports._start === 'function')) {
809
797
  if (this.childThread) {
810
798
  wasi.start(instance);
811
799
  try {
@@ -831,8 +819,8 @@
831
819
  * ```
832
820
  */
833
821
  WASIThreads.prototype.start = function (instance, module, memory) {
834
- var exports$1 = instance.exports;
835
- memory !== null && memory !== void 0 ? memory : (memory = exports$1.memory);
822
+ var exports = instance.exports;
823
+ memory !== null && memory !== void 0 ? memory : (memory = exports.memory);
836
824
  if (this.childThread) {
837
825
  instance = createInstanceProxy(instance, memory);
838
826
  }
@@ -1061,7 +1049,6 @@
1061
1049
  filename: '',
1062
1050
  childThread: ENVIRONMENT_IS_PTHREAD,
1063
1051
  initWorker: undefined,
1064
- executeAsyncWork: undefined,
1065
1052
  waitThreadStart: waitThreadStart,
1066
1053
  PThread: undefined,
1067
1054
  init: function (options) {
@@ -1073,10 +1060,10 @@
1073
1060
  if (!(instance === null || instance === void 0 ? void 0 : instance.exports))
1074
1061
  throw new TypeError('Invalid wasm instance');
1075
1062
  wasmInstance = instance;
1076
- var exports$1 = instance.exports;
1063
+ var exports = instance.exports;
1077
1064
  var module = options.module;
1078
- var memory = options.memory || exports$1.memory;
1079
- var table = options.table || exports$1.__indirect_function_table;
1065
+ var memory = options.memory || exports.memory;
1066
+ var table = options.table || exports.__indirect_function_table;
1080
1067
  if (!(module instanceof _WebAssembly$1.Module))
1081
1068
  throw new TypeError('Invalid wasm module');
1082
1069
  if (!(memory instanceof _WebAssembly$1.Memory))
@@ -1085,12 +1072,12 @@
1085
1072
  throw new TypeError('Invalid wasm table');
1086
1073
  wasmMemory = memory;
1087
1074
  wasmTable = table;
1088
- if (typeof exports$1.malloc !== 'function')
1075
+ if (typeof exports.malloc !== 'function')
1089
1076
  throw new TypeError('malloc is not exported');
1090
- if (typeof exports$1.free !== 'function')
1077
+ if (typeof exports.free !== 'function')
1091
1078
  throw new TypeError('free is not exported');
1092
- _malloc = exports$1.malloc;
1093
- _free = exports$1.free;
1079
+ _malloc = exports.malloc;
1080
+ _free = exports.free;
1094
1081
  if (!napiModule.childThread) {
1095
1082
  // main thread only
1096
1083
  var moduleApiVersion = 8 /* Version.NODE_API_DEFAULT_MODULE_API_VERSION */;
@@ -1103,11 +1090,11 @@
1103
1090
  var scope_1 = emnapiCtx.openScope(envObject);
1104
1091
  try {
1105
1092
  envObject.callIntoModule(function (_envObject) {
1106
- var exports$1 = napiModule.exports;
1107
- var exportsHandle = scope_1.add(exports$1);
1093
+ var exports = napiModule.exports;
1094
+ var exportsHandle = scope_1.add(exports);
1108
1095
  var napi_register_wasm_v1 = instance.exports.napi_register_wasm_v1;
1109
1096
  var napiValue = napi_register_wasm_v1(_envObject.id, exportsHandle.id);
1110
- napiModule.exports = (!napiValue) ? exports$1 : emnapiCtx.handleStore.get(napiValue).value;
1097
+ napiModule.exports = (!napiValue) ? exports : emnapiCtx.handleStore.get(napiValue).value;
1111
1098
  });
1112
1099
  }
1113
1100
  catch (e) {
@@ -1262,6 +1249,9 @@
1262
1249
  * @__sig vppp
1263
1250
  */
1264
1251
  function _emnapi_get_node_version(major, minor, patch) {
1252
+ major >>>= 0;
1253
+ minor >>>= 0;
1254
+ patch >>>= 0;
1265
1255
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1266
1256
  var versions = (typeof process === 'object' && process !== null &&
1267
1257
  typeof process.versions === 'object' && process.versions !== null &&
@@ -1327,6 +1317,7 @@
1327
1317
  */
1328
1318
  function _emnapi_call_finalizer(forceUncaught, env, callback, data, hint) {
1329
1319
  var envObject = emnapiCtx.envStore.get(env);
1320
+ callback >>>= 0;
1330
1321
  envObject.callFinalizerInternal(forceUncaught, callback, data, hint);
1331
1322
  }
1332
1323
  /**
@@ -1432,9 +1423,20 @@
1432
1423
  return worker;
1433
1424
  }
1434
1425
  /** @__sig vp */
1426
+ function _emnapi_worker_ref(pthreadPtr) {
1427
+ if (ENVIRONMENT_IS_PTHREAD)
1428
+ return;
1429
+ pthreadPtr >>>= 0;
1430
+ var worker = emnapiGetWorkerByPthreadPtr(pthreadPtr);
1431
+ if (worker && typeof worker.ref === 'function') {
1432
+ worker.ref();
1433
+ }
1434
+ }
1435
+ /** @__sig vp */
1435
1436
  function _emnapi_worker_unref(pthreadPtr) {
1436
1437
  if (ENVIRONMENT_IS_PTHREAD)
1437
1438
  return;
1439
+ pthreadPtr >>>= 0;
1438
1440
  var worker = emnapiGetWorkerByPthreadPtr(pthreadPtr);
1439
1441
  if (worker && typeof worker.unref === 'function') {
1440
1442
  worker.unref();
@@ -1542,9 +1544,9 @@
1542
1544
  _emnapi_async_send_js: _emnapi_async_send_js,
1543
1545
  _emnapi_emit_async_thread_ready: _emnapi_emit_async_thread_ready,
1544
1546
  _emnapi_tell_js_uvthreadpool: _emnapi_tell_js_uvthreadpool,
1547
+ _emnapi_worker_ref: _emnapi_worker_ref,
1545
1548
  _emnapi_worker_unref: _emnapi_worker_unref
1546
1549
  });
1547
- /* eslint-disable @typescript-eslint/indent */
1548
1550
  /** @__sig ipjp */
1549
1551
  function napi_adjust_external_memory(env, change_in_bytes, adjusted_value) {
1550
1552
  if (!env)
@@ -1552,22 +1554,15 @@
1552
1554
  var envObject = emnapiCtx.envStore.get(env);
1553
1555
  if (!adjusted_value)
1554
1556
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
1555
- var change_in_bytes_number = Number(change_in_bytes);
1556
- if (change_in_bytes_number < 0) {
1557
- return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
1558
- }
1559
- var old_size = wasmMemory.buffer.byteLength;
1560
- var new_size = old_size + change_in_bytes_number;
1561
- new_size = new_size + ((65536 - new_size % 65536) % 65536);
1562
- if (wasmMemory.grow((new_size - old_size + 65535) >> 16) === -1) {
1563
- return envObject.setLastError(9 /* napi_status.napi_generic_failure */);
1564
- }
1557
+ // eslint-disable-next-line prefer-const
1558
+ var adjusted_memory = emnapiCtx.adjustAmountOfExternalAllocatedMemory(change_in_bytes);
1559
+ adjusted_value >>>= 0;
1565
1560
  if (emnapiCtx.feature.supportBigInt) {
1566
1561
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
1567
- HEAP_DATA_VIEW.setBigInt64(adjusted_value, BigInt(wasmMemory.buffer.byteLength), true);
1562
+ HEAP_DATA_VIEW.setBigInt64(adjusted_value, BigInt(adjusted_memory), true);
1568
1563
  }
1569
1564
  else {
1570
- $emnapiSetValueI64(adjusted_value, wasmMemory.buffer.byteLength);
1565
+ $emnapiSetValueI64(adjusted_value, Number(adjusted_memory));
1571
1566
  }
1572
1567
  return envObject.clearLastError();
1573
1568
  }
@@ -1735,6 +1730,7 @@
1735
1730
  var asyncId = asyncContext.asyncId;
1736
1731
  var triggerAsyncId = asyncContext.triggerAsyncId;
1737
1732
  if (result) {
1733
+ result >>>= 0;
1738
1734
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
1739
1735
  HEAP_DATA_VIEW.setFloat64(result, asyncId, true);
1740
1736
  HEAP_DATA_VIEW.setFloat64(result + 8, triggerAsyncId, true);
@@ -1778,6 +1774,8 @@
1778
1774
  return;
1779
1775
  var resource = emnapiCtx.handleStore.get(async_resource).value;
1780
1776
  var callback = emnapiCtx.handleStore.get(cb).value;
1777
+ argv >>>= 0;
1778
+ size >>>= 0;
1781
1779
  size = size >>> 0;
1782
1780
  var arr = Array(size);
1783
1781
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -1790,6 +1788,7 @@
1790
1788
  triggerAsyncId: trigger_async_id
1791
1789
  });
1792
1790
  if (result) {
1791
+ result >>>= 0;
1793
1792
  var envObject = emnapiCtx.envStore.get(env);
1794
1793
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1795
1794
  v = envObject.ensureHandleId(ret);
@@ -1820,6 +1819,7 @@
1820
1819
  var low = Number(numberValue & BigInt(0xffffffff));
1821
1820
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1822
1821
  var high = Number(numberValue >> BigInt(32));
1822
+ result >>>= 0;
1823
1823
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
1824
1824
  HEAP_DATA_VIEW.setInt32(result, low, true);
1825
1825
  HEAP_DATA_VIEW.setInt32(result + 4, high, true);
@@ -1830,6 +1830,7 @@
1830
1830
  if (!emnapiNodeBinding) {
1831
1831
  return 9 /* napi_status.napi_generic_failure */;
1832
1832
  }
1833
+ async_context >>>= 0;
1833
1834
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
1834
1835
  var low = HEAP_DATA_VIEW.getInt32(async_context, true);
1835
1836
  var high = HEAP_DATA_VIEW.getInt32(async_context + 4, true);
@@ -1878,10 +1879,13 @@
1878
1879
  if (typeof v8func !== 'function') {
1879
1880
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
1880
1881
  }
1882
+ async_context >>>= 0;
1881
1883
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
1882
1884
  var low = HEAP_DATA_VIEW.getInt32(async_context, true);
1883
1885
  var high = HEAP_DATA_VIEW.getInt32(async_context + 4, true);
1884
1886
  var ctx = BigInt(low >>> 0) | (BigInt(high) << BigInt(32));
1887
+ argv >>>= 0;
1888
+ argc >>>= 0;
1885
1889
  argc = argc >>> 0;
1886
1890
  var arr = Array(argc);
1887
1891
  for (; i < argc; i++) {
@@ -1895,6 +1899,7 @@
1895
1899
  if (ret.status !== 0 /* napi_status.napi_ok */)
1896
1900
  return envObject.setLastError(ret.status);
1897
1901
  if (result) {
1902
+ result >>>= 0;
1898
1903
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1899
1904
  v = envObject.ensureHandleId(ret.value);
1900
1905
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -1932,32 +1937,62 @@
1932
1937
  * ```
1933
1938
  */
1934
1939
  var emnapiTSFN = {
1940
+ _liveSet: {},
1935
1941
  offset: {
1942
+ __size__: 0,
1936
1943
  /* napi_ref */ resource: 0,
1937
- /* double */ async_id: 8,
1938
- /* double */ trigger_async_id: 16,
1939
- /* size_t */ queue_size: 24,
1940
- /* void* */ queue: 1 * 4 + 24,
1941
- /* size_t */ thread_count: 2 * 4 + 24,
1942
- /* bool */ is_closing: 3 * 4 + 24,
1943
- /* atomic_uchar */ dispatch_state: 3 * 4 + 28,
1944
- /* void* */ context: 3 * 4 + 32,
1945
- /* size_t */ max_queue_size: 4 * 4 + 32,
1946
- /* napi_ref */ ref: 5 * 4 + 32,
1947
- /* napi_env */ env: 6 * 4 + 32,
1948
- /* void* */ finalize_data: 7 * 4 + 32,
1949
- /* napi_finalize */ finalize_cb: 8 * 4 + 32,
1950
- /* napi_threadsafe_function_call_js */ call_js_cb: 9 * 4 + 32,
1951
- /* bool */ handles_closing: 10 * 4 + 32,
1952
- /* bool */ async_ref: 10 * 4 + 36,
1953
- /* int32_t */ mutex: 10 * 4 + 40,
1954
- /* int32_t */ cond: 10 * 4 + 44,
1955
- end: 10 * 4 + 48
1944
+ /* double */ async_id: 0,
1945
+ /* double */ trigger_async_id: 0,
1946
+ /* size_t */ queue_size: 0,
1947
+ /* bool */ is_some: 0,
1948
+ /* void* */ queue: 0,
1949
+ // Reuse uv_async_t storage as JS-side wakeup state: pending event + scheduled drain.
1950
+ async_pending: 0,
1951
+ async_u_fd: 0,
1952
+ /* size_t */ thread_count: 0,
1953
+ /* int32_t */ state: 0,
1954
+ /* atomic_uchar */ dispatch_state: 0,
1955
+ /* void* */ context: 0,
1956
+ /* size_t */ max_queue_size: 0,
1957
+ /* napi_ref */ ref: 0,
1958
+ /* napi_env */ env: 0,
1959
+ /* void* */ finalize_data: 0,
1960
+ /* napi_finalize */ finalize_cb: 0,
1961
+ /* napi_threadsafe_function_call_js */ call_js_cb: 0,
1962
+ /* bool */ handles_closing: 0,
1963
+ /* bool */ async_ref: 0,
1964
+ /* int32_t */ mutex: 0,
1965
+ /* int32_t */ cond: 0
1956
1966
  },
1957
1967
  init: function () {
1968
+ emnapiTSFN._liveSet = new Set();
1969
+ emnapiTSFN.offset.__size__ = 184 /* NapiTSFNOffset32.__size__ */;
1970
+ emnapiTSFN.offset.resource = 0 /* NapiTSFNOffset32.async_resource_resource */;
1971
+ emnapiTSFN.offset.async_id = 8 /* NapiTSFNOffset32.async_resource_async_context_async_id */;
1972
+ emnapiTSFN.offset.trigger_async_id = 16 /* NapiTSFNOffset32.async_resource_async_context_trigger_async_id */;
1973
+ emnapiTSFN.offset.queue_size = 60 /* NapiTSFNOffset32.queue_size */;
1974
+ emnapiTSFN.offset.is_some = 24 /* NapiTSFNOffset32.async_resource_is_some */;
1975
+ emnapiTSFN.offset.queue = 64 /* NapiTSFNOffset32.queue */;
1976
+ emnapiTSFN.offset.async_pending = 132 /* NapiTSFNOffset32.async_pending */;
1977
+ emnapiTSFN.offset.async_u_fd = 96 /* NapiTSFNOffset32.async_u_fd */;
1978
+ emnapiTSFN.offset.thread_count = 136 /* NapiTSFNOffset32.thread_count */;
1979
+ emnapiTSFN.offset.state = 140 /* NapiTSFNOffset32.state */;
1980
+ emnapiTSFN.offset.dispatch_state = 144 /* NapiTSFNOffset32.dispatch_state */;
1981
+ emnapiTSFN.offset.context = 148 /* NapiTSFNOffset32.context */;
1982
+ emnapiTSFN.offset.max_queue_size = 152 /* NapiTSFNOffset32.max_queue_size */;
1983
+ emnapiTSFN.offset.ref = 156 /* NapiTSFNOffset32.ref */;
1984
+ emnapiTSFN.offset.env = 160 /* NapiTSFNOffset32.env */;
1985
+ emnapiTSFN.offset.finalize_data = 164 /* NapiTSFNOffset32.finalize_data */;
1986
+ emnapiTSFN.offset.finalize_cb = 168 /* NapiTSFNOffset32.finalize_cb */;
1987
+ emnapiTSFN.offset.call_js_cb = 172 /* NapiTSFNOffset32.call_js_cb */;
1988
+ emnapiTSFN.offset.handles_closing = 176 /* NapiTSFNOffset32.handles_closing */;
1989
+ emnapiTSFN.offset.async_ref = 180 /* NapiTSFNOffset32.async_ref */;
1990
+ emnapiTSFN.offset.mutex = 32 /* NapiTSFNOffset32.mutex */;
1991
+ emnapiTSFN.offset.cond = 56 /* NapiTSFNOffset32.cond */;
1992
+ emnapiTSFN.offset.mutex = emnapiTSFN.offset.mutex + 4;
1958
1993
  if (typeof PThread !== 'undefined') {
1959
1994
  PThread.unusedWorkers.forEach(emnapiTSFN.addListener);
1960
- PThread.runningWorkers.forEach(emnapiTSFN.addListener);
1995
+ Object.values(PThread.pthreads).forEach(emnapiTSFN.addListener);
1961
1996
  var __original_getNewWorker_1 = PThread.getNewWorker;
1962
1997
  PThread.getNewWorker = function () {
1963
1998
  var r = __original_getNewWorker_1.apply(this, arguments);
@@ -1978,7 +2013,10 @@
1978
2013
  var type = __emnapi__.type;
1979
2014
  var payload = __emnapi__.payload;
1980
2015
  if (type === 'tsfn-send') {
1981
- emnapiTSFN.dispatch(payload.tsfn);
2016
+ var pendng = payload.tsfn + emnapiTSFN.offset.async_pending;
2017
+ if (Atomics.load(new Int32Array(emnapiTSFN.ensureBufferFor(pendng + 4)), pendng >>> 2) !== 0) {
2018
+ emnapiTSFN.enqueue(payload.tsfn);
2019
+ }
1982
2020
  }
1983
2021
  }
1984
2022
  };
@@ -2000,18 +2038,40 @@
2000
2038
  }
2001
2039
  return true;
2002
2040
  },
2041
+ /**
2042
+ * When another thread grows the shared WebAssembly.Memory, this agent's
2043
+ * cached `wasmMemory.buffer` may still have the old shorter length
2044
+ * (V8 refreshes it lazily). If a pointer derived from shared memory lies
2045
+ * beyond the cached length, `wasmMemory.grow(0)` forces the agent to
2046
+ * observe the current memory size and refreshes the buffer.
2047
+ */
2048
+ ensureBufferFor: function (end) {
2049
+ var buffer = wasmMemory.buffer;
2050
+ if (end > buffer.byteLength) {
2051
+ wasmMemory.grow(0);
2052
+ buffer = wasmMemory.buffer;
2053
+ }
2054
+ return buffer;
2055
+ },
2003
2056
  initQueue: function (func) {
2004
2057
  var size = 2 * 4;
2005
2058
  var queue = _malloc(size);
2006
2059
  if (!queue)
2007
2060
  return false;
2008
- new Uint8Array(wasmMemory.buffer, queue, size).fill(0);
2061
+ queue >>>= 0;
2062
+ new Uint8Array(emnapiTSFN.ensureBufferFor(queue + size), queue, size).fill(0);
2009
2063
  emnapiTSFN.storeSizeTypeValue(func + emnapiTSFN.offset.queue, queue, false);
2010
2064
  return true;
2011
2065
  },
2012
2066
  destroyQueue: function (func) {
2013
2067
  var queue = emnapiTSFN.loadSizeTypeValue(func + emnapiTSFN.offset.queue, false);
2014
2068
  if (queue) {
2069
+ var node = emnapiTSFN.loadSizeTypeValue(queue, false);
2070
+ while (node !== 0) {
2071
+ var next = emnapiTSFN.loadSizeTypeValue(node + 4, false);
2072
+ _free(node);
2073
+ node = next;
2074
+ }
2015
2075
  _free(queue);
2016
2076
  }
2017
2077
  },
@@ -2024,6 +2084,7 @@
2024
2084
  var node = _malloc(size);
2025
2085
  if (!node)
2026
2086
  throw new Error('OOM');
2087
+ node >>>= 0;
2027
2088
  emnapiTSFN.storeSizeTypeValue(node, data, false);
2028
2089
  emnapiTSFN.storeSizeTypeValue(node + 4, 0, false);
2029
2090
  if (head === 0 && tail === 0) {
@@ -2059,11 +2120,11 @@
2059
2120
  var waitCondition = function () {
2060
2121
  var queueSize = emnapiTSFN.getQueueSize(func);
2061
2122
  var maxSize = emnapiTSFN.getMaxQueueSize(func);
2062
- var isClosing = emnapiTSFN.getIsClosing(func);
2063
- return queueSize >= maxSize && maxSize > 0 && !isClosing;
2123
+ return queueSize >= maxSize && maxSize > 0 && emnapiTSFN.getState(func) === 0 /* State.kOpen */;
2064
2124
  };
2065
2125
  var isBrowserMain = typeof window !== 'undefined' && typeof document !== 'undefined' && !ENVIRONMENT_IS_NODE;
2066
- return mutex.execute(function () {
2126
+ var shouldDelete = false;
2127
+ var ret = mutex.execute(function () {
2067
2128
  while (waitCondition()) {
2068
2129
  if (mode === 0 /* napi_threadsafe_function_call_mode.napi_tsfn_nonblocking */) {
2069
2130
  return 15 /* napi_status.napi_queue_full */;
@@ -2080,31 +2141,35 @@
2080
2141
  }
2081
2142
  cond.wait();
2082
2143
  }
2083
- if (emnapiTSFN.getIsClosing(func)) {
2084
- if (emnapiTSFN.getThreadCount(func) === 0) {
2085
- return 1 /* napi_status.napi_invalid_arg */;
2086
- }
2087
- else {
2088
- emnapiTSFN.subThreadCount(func);
2089
- return 16 /* napi_status.napi_closing */;
2090
- }
2091
- }
2092
- else {
2144
+ if (emnapiTSFN.getState(func) === 0 /* State.kOpen */) {
2093
2145
  emnapiTSFN.pushQueue(func, data);
2094
2146
  emnapiTSFN.send(func);
2095
2147
  return 0 /* napi_status.napi_ok */;
2096
2148
  }
2149
+ if (emnapiTSFN.getThreadCount(func) === 0) {
2150
+ return 1 /* napi_status.napi_invalid_arg */;
2151
+ }
2152
+ emnapiTSFN.subThreadCount(func);
2153
+ if (!(emnapiTSFN.getState(func) === 2 /* State.kClosed */ && emnapiTSFN.getThreadCount(func) === 0)) {
2154
+ return 16 /* napi_status.napi_closing */;
2155
+ }
2156
+ shouldDelete = true;
2157
+ return 16 /* napi_status.napi_closing */;
2097
2158
  });
2159
+ if (shouldDelete) {
2160
+ emnapiTSFN.destroy(func);
2161
+ }
2162
+ return ret;
2098
2163
  },
2099
2164
  getMutex: function (func) {
2100
2165
  var index = func + emnapiTSFN.offset.mutex;
2101
2166
  var mutex = {
2102
2167
  lock: function () {
2103
2168
  var isBrowserMain = typeof window !== 'undefined' && typeof document !== 'undefined' && !ENVIRONMENT_IS_NODE;
2104
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
2169
+ var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
2105
2170
  if (isBrowserMain) {
2106
2171
  while (true) {
2107
- var oldValue = Atomics.compareExchange(i32a, 0, 0, 1);
2172
+ var oldValue = Atomics.compareExchange(i32a, 0, 0, 10);
2108
2173
  if (oldValue === 0) {
2109
2174
  return;
2110
2175
  }
@@ -2112,11 +2177,11 @@
2112
2177
  }
2113
2178
  else {
2114
2179
  while (true) {
2115
- var oldValue = Atomics.compareExchange(i32a, 0, 0, 1);
2180
+ var oldValue = Atomics.compareExchange(i32a, 0, 0, 10);
2116
2181
  if (oldValue === 0) {
2117
2182
  return;
2118
2183
  }
2119
- Atomics.wait(i32a, 0, 1);
2184
+ Atomics.wait(i32a, 0, 10);
2120
2185
  }
2121
2186
  }
2122
2187
  },
@@ -2124,21 +2189,21 @@
2124
2189
  return new Promise<void>(resolve => {
2125
2190
  const again = (): void => { fn() }
2126
2191
  const fn = (): void => {
2127
- const i32a = new Int32Array(wasmMemory.buffer, index, 1)
2128
- const oldValue = Atomics.compareExchange(i32a, 0, 0, 1)
2192
+ const i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1)
2193
+ const oldValue = Atomics.compareExchange(i32a, 0, 0, 10)
2129
2194
  if (oldValue === 0) {
2130
2195
  resolve()
2131
2196
  return
2132
2197
  }
2133
- (Atomics as any).waitAsync(i32a, 0, 1).value.then(again)
2198
+ (Atomics as any).waitAsync(i32a, 0, 10).value.then(again)
2134
2199
  }
2135
2200
  fn()
2136
2201
  })
2137
2202
  }, */
2138
2203
  unlock: function () {
2139
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
2140
- var oldValue = Atomics.compareExchange(i32a, 0, 1, 0);
2141
- if (oldValue !== 1) {
2204
+ var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
2205
+ var oldValue = Atomics.compareExchange(i32a, 0, 10, 0);
2206
+ if (oldValue !== 10) {
2142
2207
  throw new Error('Tried to unlock while not holding the mutex');
2143
2208
  }
2144
2209
  Atomics.notify(i32a, 0, 1);
@@ -2170,14 +2235,14 @@
2170
2235
  var mutex = emnapiTSFN.getMutex(func);
2171
2236
  var cond = {
2172
2237
  wait: function () {
2173
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
2238
+ var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
2174
2239
  var value = Atomics.load(i32a, 0);
2175
2240
  mutex.unlock();
2176
2241
  Atomics.wait(i32a, 0, value);
2177
2242
  mutex.lock();
2178
2243
  },
2179
2244
  /* waitAsync () {
2180
- const i32a = new Int32Array(wasmMemory.buffer, index, 1)
2245
+ const i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1)
2181
2246
  const value = Atomics.load(i32a, 0)
2182
2247
  mutex.unlock()
2183
2248
  const lock = (): Promise<void> => mutex.lockAsync()
@@ -2188,7 +2253,7 @@
2188
2253
  }
2189
2254
  }, */
2190
2255
  signal: function () {
2191
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
2256
+ var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
2192
2257
  Atomics.add(i32a, 0, 1);
2193
2258
  Atomics.notify(i32a, 0, 1);
2194
2259
  }
@@ -2201,15 +2266,15 @@
2201
2266
  addQueueSize: function (func) {
2202
2267
  var offset = emnapiTSFN.offset.queue_size;
2203
2268
  var arr, index;
2204
- arr = new Uint32Array(wasmMemory.buffer);
2205
- index = (func + offset) >> 2;
2269
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4));
2270
+ index = (func + offset) >>> 2;
2206
2271
  Atomics.add(arr, index, 1);
2207
2272
  },
2208
2273
  subQueueSize: function (func) {
2209
2274
  var offset = emnapiTSFN.offset.queue_size;
2210
2275
  var arr, index;
2211
- arr = new Uint32Array(wasmMemory.buffer);
2212
- index = (func + offset) >> 2;
2276
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4));
2277
+ index = (func + offset) >>> 2;
2213
2278
  Atomics.sub(arr, index, 1);
2214
2279
  },
2215
2280
  getThreadCount: function (func) {
@@ -2218,31 +2283,31 @@
2218
2283
  addThreadCount: function (func) {
2219
2284
  var offset = emnapiTSFN.offset.thread_count;
2220
2285
  var arr, index;
2221
- arr = new Uint32Array(wasmMemory.buffer);
2222
- index = (func + offset) >> 2;
2286
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4));
2287
+ index = (func + offset) >>> 2;
2223
2288
  Atomics.add(arr, index, 1);
2224
2289
  },
2225
2290
  subThreadCount: function (func) {
2226
2291
  var offset = emnapiTSFN.offset.thread_count;
2227
2292
  var arr, index;
2228
- arr = new Uint32Array(wasmMemory.buffer);
2229
- index = (func + offset) >> 2;
2293
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4));
2294
+ index = (func + offset) >>> 2;
2230
2295
  Atomics.sub(arr, index, 1);
2231
2296
  },
2232
- getIsClosing: function (func) {
2233
- return Atomics.load(new Int32Array(wasmMemory.buffer), (func + emnapiTSFN.offset.is_closing) >> 2);
2297
+ getState: function (func) {
2298
+ return Atomics.load(new Int32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.state + 4)), (func + emnapiTSFN.offset.state) >>> 2);
2234
2299
  },
2235
- setIsClosing: function (func, value) {
2236
- Atomics.store(new Int32Array(wasmMemory.buffer), (func + emnapiTSFN.offset.is_closing) >> 2, value);
2300
+ setState: function (func, value) {
2301
+ Atomics.store(new Int32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.state + 4)), (func + emnapiTSFN.offset.state) >>> 2, value);
2237
2302
  },
2238
2303
  getHandlesClosing: function (func) {
2239
- return Atomics.load(new Int32Array(wasmMemory.buffer), (func + emnapiTSFN.offset.handles_closing) >> 2);
2304
+ return Atomics.load(new Int8Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.handles_closing + 1)), (func + emnapiTSFN.offset.handles_closing));
2240
2305
  },
2241
2306
  setHandlesClosing: function (func, value) {
2242
- Atomics.store(new Int32Array(wasmMemory.buffer), (func + emnapiTSFN.offset.handles_closing) >> 2, value);
2307
+ Atomics.store(new Int8Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.handles_closing + 1)), (func + emnapiTSFN.offset.handles_closing), value);
2243
2308
  },
2244
2309
  getDispatchState: function (func) {
2245
- return Atomics.load(new Uint32Array(wasmMemory.buffer), (func + emnapiTSFN.offset.dispatch_state) >> 2);
2310
+ return Atomics.load(new Uint32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.dispatch_state + 4)), (func + emnapiTSFN.offset.dispatch_state) >>> 2);
2246
2311
  },
2247
2312
  getContext: function (func) {
2248
2313
  return emnapiTSFN.loadSizeTypeValue(func + emnapiTSFN.offset.context, false);
@@ -2272,68 +2337,98 @@
2272
2337
  var ret;
2273
2338
  var arr;
2274
2339
  if (unsigned) {
2275
- arr = new Uint32Array(wasmMemory.buffer);
2276
- ret = Atomics.load(arr, offset >> 2);
2340
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(offset + 4));
2341
+ ret = Atomics.load(arr, offset >>> 2);
2277
2342
  return ret;
2278
2343
  }
2279
2344
  else {
2280
- arr = new Int32Array(wasmMemory.buffer);
2281
- ret = Atomics.load(arr, offset >> 2);
2345
+ arr = new Int32Array(emnapiTSFN.ensureBufferFor(offset + 4));
2346
+ ret = Atomics.load(arr, offset >>> 2);
2282
2347
  return ret;
2283
2348
  }
2284
2349
  },
2285
2350
  storeSizeTypeValue: function (offset, value, unsigned) {
2286
2351
  var arr;
2287
2352
  if (unsigned) {
2288
- arr = new Uint32Array(wasmMemory.buffer);
2289
- Atomics.store(arr, offset >> 2, value);
2353
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(offset + 4));
2354
+ Atomics.store(arr, offset >>> 2, value);
2290
2355
  return undefined;
2291
2356
  }
2292
2357
  else {
2293
- arr = new Int32Array(wasmMemory.buffer);
2294
- Atomics.store(arr, offset >> 2, value >>> 0);
2358
+ arr = new Int32Array(emnapiTSFN.ensureBufferFor(offset + 4));
2359
+ Atomics.store(arr, offset >>> 2, value >>> 0);
2295
2360
  return undefined;
2296
2361
  }
2297
2362
  },
2363
+ releaseResources: function (func) {
2364
+ if (emnapiTSFN.getState(func) !== 2 /* State.kClosed */) {
2365
+ emnapiTSFN.setState(func, 2 /* State.kClosed */);
2366
+ var env = emnapiTSFN.getEnv(func);
2367
+ var envObject = emnapiCtx.envStore.get(env);
2368
+ var ref = emnapiTSFN.getRef(func);
2369
+ if (ref) {
2370
+ emnapiCtx.refStore.get(ref).dispose();
2371
+ }
2372
+ var resource = emnapiTSFN.getResource(func);
2373
+ emnapiCtx.refStore.get(resource).dispose();
2374
+ emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.is_some + 1);
2375
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2376
+ HEAP_DATA_VIEW.setInt8(func + emnapiTSFN.offset.is_some, 0, true);
2377
+ emnapiCtx.removeCleanupHook(envObject, emnapiTSFN.cleanup, func);
2378
+ envObject.unref();
2379
+ var asyncRefAddress = func + emnapiTSFN.offset.async_ref;
2380
+ var asyncRefOffset = asyncRefAddress >>> 2;
2381
+ var arr = new Uint32Array(emnapiTSFN.ensureBufferFor(asyncRefAddress + 4));
2382
+ if (Atomics.load(arr, asyncRefOffset) > 0) {
2383
+ Atomics.store(arr, asyncRefOffset, 0);
2384
+ emnapiCtx.decreaseWaitingRequestCounter();
2385
+ }
2386
+ if (emnapiNodeBinding) {
2387
+ var view = new DataView(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.trigger_async_id + 8));
2388
+ var asyncId = view.getFloat64(func + emnapiTSFN.offset.async_id, true);
2389
+ var triggerAsyncId = view.getFloat64(func + emnapiTSFN.offset.trigger_async_id, true);
2390
+ _emnapi_node_emit_async_destroy(asyncId, triggerAsyncId);
2391
+ }
2392
+ }
2393
+ },
2298
2394
  destroy: function (func) {
2395
+ emnapiTSFN._liveSet.delete(func);
2299
2396
  emnapiTSFN.destroyQueue(func);
2300
- var env = emnapiTSFN.getEnv(func);
2301
- var envObject = emnapiCtx.envStore.get(env);
2302
- var ref = emnapiTSFN.getRef(func);
2303
- if (ref) {
2304
- emnapiCtx.refStore.get(ref).dispose();
2305
- }
2306
- emnapiCtx.removeCleanupHook(envObject, emnapiTSFN.cleanup, func);
2307
- envObject.unref();
2308
- var asyncRefOffset = (func + emnapiTSFN.offset.async_ref) >> 2;
2309
- var arr = new Int32Array(wasmMemory.buffer);
2310
- if (Atomics.load(arr, asyncRefOffset)) {
2311
- Atomics.store(arr, asyncRefOffset, 0);
2312
- emnapiCtx.decreaseWaitingRequestCounter();
2313
- }
2314
- var resource = emnapiTSFN.getResource(func);
2315
- emnapiCtx.refStore.get(resource).dispose();
2316
- if (emnapiNodeBinding) {
2317
- var view = new DataView(wasmMemory.buffer);
2318
- var asyncId = view.getFloat64(func + emnapiTSFN.offset.async_id, true);
2319
- var triggerAsyncId = view.getFloat64(func + emnapiTSFN.offset.trigger_async_id, true);
2320
- _emnapi_node_emit_async_destroy(asyncId, triggerAsyncId);
2321
- }
2397
+ emnapiTSFN.releaseResources(func);
2322
2398
  _free(func);
2323
2399
  },
2324
- emptyQueueAndDelete: function (func) {
2400
+ emptyQueue: function (func) {
2401
+ var drainQueue = [];
2402
+ emnapiTSFN.getMutex(func).execute(function () {
2403
+ while (emnapiTSFN.getQueueSize(func) > 0) {
2404
+ drainQueue.push(emnapiTSFN.shiftQueue(func));
2405
+ }
2406
+ });
2325
2407
  var callJsCb = emnapiTSFN.getCallJSCb(func);
2326
2408
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
2327
2409
  var context = emnapiTSFN.getContext(func);
2328
2410
  var data;
2329
- while (emnapiTSFN.getQueueSize(func) > 0) {
2411
+ for (var i = 0; i < drainQueue.length; i++) {
2330
2412
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
2331
- data = emnapiTSFN.shiftQueue(func);
2413
+ data = drainQueue[i];
2332
2414
  if (callJsCb) {
2333
2415
  (wasmTable.get(callJsCb))(0, 0, context, data);
2334
2416
  }
2335
2417
  }
2336
- emnapiTSFN.destroy(func);
2418
+ },
2419
+ maybeDelete: function (func) {
2420
+ var shouldDelete = false;
2421
+ emnapiTSFN.getMutex(func).execute(function () {
2422
+ if (emnapiTSFN.getThreadCount(func) > 0) {
2423
+ emnapiTSFN.releaseResources(func);
2424
+ }
2425
+ else {
2426
+ shouldDelete = true;
2427
+ }
2428
+ });
2429
+ if (shouldDelete) {
2430
+ emnapiTSFN.destroy(func);
2431
+ }
2337
2432
  },
2338
2433
  finalize: function (func) {
2339
2434
  var env = emnapiTSFN.getEnv(func);
@@ -2348,12 +2443,13 @@
2348
2443
  envObject.callFinalizerInternal(0, finalize, data, context);
2349
2444
  };
2350
2445
  try {
2446
+ emnapiTSFN.emptyQueue(func);
2351
2447
  if (finalize) {
2352
2448
  if (emnapiNodeBinding) {
2353
2449
  var resource = emnapiTSFN.getResource(func);
2354
2450
  var resource_value = emnapiCtx.refStore.get(resource).get();
2355
2451
  var resourceObject = emnapiCtx.handleStore.get(resource_value).value;
2356
- var view = new DataView(wasmMemory.buffer);
2452
+ var view = new DataView(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.trigger_async_id + 8));
2357
2453
  var asyncId = view.getFloat64(func + emnapiTSFN.offset.async_id, true);
2358
2454
  var triggerAsyncId = view.getFloat64(func + emnapiTSFN.offset.trigger_async_id, true);
2359
2455
  emnapiNodeBinding.node.makeCallback(resourceObject, f, [], {
@@ -2365,7 +2461,7 @@
2365
2461
  f();
2366
2462
  }
2367
2463
  }
2368
- emnapiTSFN.emptyQueueAndDelete(func);
2464
+ emnapiTSFN.maybeDelete(func);
2369
2465
  }
2370
2466
  finally {
2371
2467
  emnapiCtx.closeScope(envObject);
@@ -2381,7 +2477,7 @@
2381
2477
  try {
2382
2478
  if (set_closing) {
2383
2479
  emnapiTSFN.getMutex(func).execute(function () {
2384
- emnapiTSFN.setIsClosing(func, 1);
2480
+ emnapiTSFN.setState(func, 1 /* State.kClosing */);
2385
2481
  if (emnapiTSFN.getMaxQueueSize(func) > 0) {
2386
2482
  emnapiTSFN.getCond(func).signal();
2387
2483
  }
@@ -2391,6 +2487,7 @@
2391
2487
  return;
2392
2488
  }
2393
2489
  emnapiTSFN.setHandlesClosing(func, 1);
2490
+ Atomics.store(new Int32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.async_pending + 4)), (func + emnapiTSFN.offset.async_pending) >>> 2, 1);
2394
2491
  emnapiCtx.feature.setImmediate(function () {
2395
2492
  emnapiTSFN.finalize(func);
2396
2493
  });
@@ -2407,10 +2504,7 @@
2407
2504
  var mutex = emnapiTSFN.getMutex(func);
2408
2505
  var cond = emnapiTSFN.getCond(func);
2409
2506
  mutex.execute(function () {
2410
- if (emnapiTSFN.getIsClosing(func)) {
2411
- emnapiTSFN.closeHandlesAndMaybeDelete(func, 0);
2412
- }
2413
- else {
2507
+ if (emnapiTSFN.getState(func) === 0 /* State.kOpen */) {
2414
2508
  var size = emnapiTSFN.getQueueSize(func);
2415
2509
  if (size > 0) {
2416
2510
  data = emnapiTSFN.shiftQueue(func);
@@ -2423,7 +2517,7 @@
2423
2517
  }
2424
2518
  if (size === 0) {
2425
2519
  if (emnapiTSFN.getThreadCount(func) === 0) {
2426
- emnapiTSFN.setIsClosing(func, 1);
2520
+ emnapiTSFN.setState(func, 1 /* State.kClosing */);
2427
2521
  if (emnapiTSFN.getMaxQueueSize(func) > 0) {
2428
2522
  cond.signal();
2429
2523
  }
@@ -2434,6 +2528,9 @@
2434
2528
  has_more = true;
2435
2529
  }
2436
2530
  }
2531
+ else {
2532
+ emnapiTSFN.closeHandlesAndMaybeDelete(func, 0);
2533
+ }
2437
2534
  });
2438
2535
  if (popped_value) {
2439
2536
  var env = emnapiTSFN.getEnv(func);
@@ -2462,7 +2559,7 @@
2462
2559
  var resource = emnapiTSFN.getResource(func);
2463
2560
  var resource_value = emnapiCtx.refStore.get(resource).get();
2464
2561
  var resourceObject = emnapiCtx.handleStore.get(resource_value).value;
2465
- var view = new DataView(wasmMemory.buffer);
2562
+ var view = new DataView(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.trigger_async_id + 8));
2466
2563
  emnapiNodeBinding.node.makeCallback(resourceObject, f, [], {
2467
2564
  asyncId: view.getFloat64(func + emnapiTSFN.offset.async_id, true),
2468
2565
  triggerAsyncId: view.getFloat64(func + emnapiTSFN.offset.trigger_async_id, true)
@@ -2481,8 +2578,9 @@
2481
2578
  dispatch: function (func) {
2482
2579
  var has_more = true;
2483
2580
  var iterations_left = 1000;
2484
- var ui32a = new Uint32Array(wasmMemory.buffer);
2485
- var index = (func + emnapiTSFN.offset.dispatch_state) >> 2;
2581
+ var dispatchStateAddress = func + emnapiTSFN.offset.dispatch_state;
2582
+ var ui32a = new Uint32Array(emnapiTSFN.ensureBufferFor(dispatchStateAddress + 4));
2583
+ var index = dispatchStateAddress >>> 2;
2486
2584
  while (has_more && --iterations_left !== 0) {
2487
2585
  Atomics.store(ui32a, index, 1);
2488
2586
  has_more = emnapiTSFN.dispatchOne(func);
@@ -2494,25 +2592,86 @@
2494
2592
  emnapiTSFN.send(func);
2495
2593
  }
2496
2594
  },
2497
- send: function (func) {
2498
- var current_state = Atomics.or(new Uint32Array(wasmMemory.buffer), (func + emnapiTSFN.offset.dispatch_state) >> 2, 1 << 1);
2499
- if ((current_state & 1) === 1) {
2595
+ enqueue: function (func) {
2596
+ // `pending` means a worker thread has requested a wakeup that has not
2597
+ // been drained on the main thread yet.
2598
+ var pending = func + emnapiTSFN.offset.async_pending;
2599
+ // `scheduled` prevents queueing the same main-thread drain chain more than
2600
+ // once while a previous wakeup is still in flight.
2601
+ var scheduled = func + emnapiTSFN.offset.async_u_fd;
2602
+ var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(Math.max(pending, scheduled) + 4));
2603
+ if (Atomics.exchange(i32a, scheduled >>> 2, 1) !== 0) {
2500
2604
  return;
2501
2605
  }
2502
- if ((typeof ENVIRONMENT_IS_PTHREAD !== 'undefined') && ENVIRONMENT_IS_PTHREAD) {
2503
- postMessage({
2504
- __emnapi__: {
2505
- type: 'tsfn-send',
2506
- payload: {
2507
- tsfn: func
2606
+ // Match uv_async_send-style coalescing in JS: the first turn represents
2607
+ // the wakeup reaching the main thread, and the second turn performs the
2608
+ // actual TSFN drain after nearby Send/Signal calls have had a chance to
2609
+ // collapse into the shared AsyncProgressWorker state.
2610
+ emnapiCtx.feature.setImmediate(function () {
2611
+ if (!emnapiTSFN._liveSet.has(func)) {
2612
+ return;
2613
+ }
2614
+ if (Atomics.load(i32a, pending >>> 2) === 0) {
2615
+ Atomics.store(i32a, scheduled >>> 2, 0);
2616
+ return;
2617
+ }
2618
+ emnapiCtx.feature.setImmediate(function () {
2619
+ try {
2620
+ // Consume the coalesced wakeup once, then let dispatch() observe any
2621
+ // queue mutations through dispatch_state like the C implementation.
2622
+ if (Atomics.exchange(i32a, pending >>> 2, 0) === 0) {
2623
+ return;
2624
+ }
2625
+ // After destroy(), the func address is freed. Skip dispatch
2626
+ // to avoid use-after-free (JS-side lifecycle check).
2627
+ if (!emnapiTSFN._liveSet.has(func)) {
2628
+ return;
2629
+ }
2630
+ emnapiTSFN.dispatch(func);
2631
+ }
2632
+ finally {
2633
+ // Allow a later wakeup to schedule a new drain chain. If another
2634
+ // worker-thread send raced with this drain, enqueue one more turn.
2635
+ if (emnapiTSFN._liveSet.has(func)) {
2636
+ Atomics.store(i32a, scheduled >>> 2, 0);
2637
+ if (Atomics.load(i32a, pending >>> 2) !== 0) {
2638
+ emnapiTSFN.enqueue(func);
2639
+ }
2508
2640
  }
2509
2641
  }
2510
2642
  });
2643
+ });
2644
+ },
2645
+ send: function (func) {
2646
+ var dispatchStateAddress = func + emnapiTSFN.offset.dispatch_state;
2647
+ var current_state = Atomics.or(new Uint32Array(emnapiTSFN.ensureBufferFor(dispatchStateAddress + 4)), dispatchStateAddress >>> 2, 1 << 1);
2648
+ if ((current_state & 1) === 1) {
2649
+ return;
2511
2650
  }
2512
- else {
2513
- emnapiCtx.feature.setImmediate(function () {
2514
- emnapiTSFN.dispatch(func);
2515
- });
2651
+ var pendng = func + emnapiTSFN.offset.async_pending;
2652
+ // A wakeup is already pending, so this send only needs to leave the queued
2653
+ // work in the TSFN queue and let the existing drain pick it up.
2654
+ if (Atomics.load(new Int32Array(emnapiTSFN.ensureBufferFor(pendng + 4)), pendng >>> 2) !== 0) {
2655
+ return;
2656
+ }
2657
+ if (Atomics.exchange(new Int32Array(emnapiTSFN.ensureBufferFor(pendng + 4)), pendng >>> 2, 1) === 0) {
2658
+ if ((typeof ENVIRONMENT_IS_PTHREAD !== 'undefined') && ENVIRONMENT_IS_PTHREAD) {
2659
+ // Worker threads only post a wakeup token. Main-thread draining is
2660
+ // serialized by enqueue() once the message is received.
2661
+ postMessage({
2662
+ __emnapi__: {
2663
+ type: 'tsfn-send',
2664
+ payload: {
2665
+ tsfn: func
2666
+ }
2667
+ }
2668
+ });
2669
+ }
2670
+ else {
2671
+ // On the main thread we can skip the cross-thread hop and schedule the
2672
+ // coalesced drain chain directly.
2673
+ emnapiTSFN.enqueue(func);
2674
+ }
2516
2675
  }
2517
2676
  }
2518
2677
  };
@@ -2525,6 +2684,13 @@
2525
2684
  envObject.checkGCAccess();
2526
2685
  if (!async_resource_name)
2527
2686
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
2687
+ max_queue_size >>>= 0;
2688
+ initial_thread_count >>>= 0;
2689
+ env >>>= 0;
2690
+ thread_finalize_data >>>= 0;
2691
+ thread_finalize_cb >>>= 0;
2692
+ context >>>= 0;
2693
+ call_js_cb >>>= 0;
2528
2694
  max_queue_size = max_queue_size >>> 0;
2529
2695
  initial_thread_count = initial_thread_count >>> 0;
2530
2696
  if (initial_thread_count === 0) {
@@ -2533,6 +2699,7 @@
2533
2699
  if (!result)
2534
2700
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
2535
2701
  var ref = 0;
2702
+ func >>>= 0;
2536
2703
  if (!func) {
2537
2704
  if (!call_js_cb)
2538
2705
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
@@ -2564,22 +2731,25 @@
2564
2731
  asyncResourceName = String(asyncResourceName);
2565
2732
  var resource_name = envObject.ensureHandleId(asyncResourceName);
2566
2733
  // tsfn create
2567
- var sizeofTSFN = emnapiTSFN.offset.end;
2734
+ var sizeofTSFN = emnapiTSFN.offset.__size__;
2735
+ // eslint-disable-next-line prefer-const
2568
2736
  var tsfn = _malloc(sizeofTSFN);
2569
2737
  if (!tsfn)
2570
2738
  return envObject.setLastError(9 /* napi_status.napi_generic_failure */);
2571
- new Uint8Array(wasmMemory.buffer).subarray(tsfn, tsfn + sizeofTSFN).fill(0);
2739
+ tsfn >>>= 0;
2740
+ new Uint8Array(emnapiTSFN.ensureBufferFor(tsfn + sizeofTSFN)).subarray(tsfn, tsfn + sizeofTSFN).fill(0);
2572
2741
  var resourceRef = emnapiCtx.createReference(envObject, resource, 1, 1 /* ReferenceOwnership.kUserland */);
2573
2742
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
2574
2743
  var resource_ = resourceRef.id;
2575
2744
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2576
- HEAP_DATA_VIEW.setUint32(tsfn, resource_, true);
2745
+ HEAP_DATA_VIEW.setUint32(tsfn + emnapiTSFN.offset.resource, resource_, true);
2577
2746
  if (!emnapiTSFN.initQueue(tsfn)) {
2578
2747
  _free(tsfn);
2579
2748
  resourceRef.dispose();
2580
2749
  return envObject.setLastError(9 /* napi_status.napi_generic_failure */);
2581
2750
  }
2582
2751
  _emnapi_node_emit_async_init(resource, resource_name, -1, tsfn + emnapiTSFN.offset.async_id);
2752
+ HEAP_DATA_VIEW.setInt8(tsfn + emnapiTSFN.offset.is_some, 1, true);
2583
2753
  HEAP_DATA_VIEW.setUint32(tsfn + emnapiTSFN.offset.thread_count, initial_thread_count, true);
2584
2754
  HEAP_DATA_VIEW.setUint32(tsfn + emnapiTSFN.offset.context, context, true);
2585
2755
  HEAP_DATA_VIEW.setUint32(tsfn + emnapiTSFN.offset.max_queue_size, max_queue_size, true);
@@ -2589,9 +2759,11 @@
2589
2759
  HEAP_DATA_VIEW.setUint32(tsfn + emnapiTSFN.offset.finalize_cb, thread_finalize_cb, true);
2590
2760
  HEAP_DATA_VIEW.setUint32(tsfn + emnapiTSFN.offset.call_js_cb, call_js_cb, true);
2591
2761
  emnapiCtx.addCleanupHook(envObject, emnapiTSFN.cleanup, tsfn);
2762
+ emnapiTSFN._liveSet.add(tsfn);
2592
2763
  envObject.ref();
2593
2764
  emnapiCtx.increaseWaitingRequestCounter();
2594
- HEAP_DATA_VIEW.setInt32(tsfn + emnapiTSFN.offset.async_ref, 1, true);
2765
+ HEAP_DATA_VIEW.setUint32(tsfn + emnapiTSFN.offset.async_ref, 1, true);
2766
+ result >>>= 0;
2595
2767
  HEAP_DATA_VIEW.setUint32(result, tsfn, true);
2596
2768
  return envObject.clearLastError();
2597
2769
  }
@@ -2601,6 +2773,8 @@
2601
2773
  abort();
2602
2774
  return 1 /* napi_status.napi_invalid_arg */;
2603
2775
  }
2776
+ func >>>= 0;
2777
+ result >>>= 0;
2604
2778
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
2605
2779
  var context = emnapiTSFN.getContext(func);
2606
2780
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -2613,6 +2787,8 @@
2613
2787
  abort();
2614
2788
  return 1 /* napi_status.napi_invalid_arg */;
2615
2789
  }
2790
+ func >>>= 0;
2791
+ data >>>= 0;
2616
2792
  return emnapiTSFN.push(func, data, mode);
2617
2793
  }
2618
2794
  /** @__sig ip */
@@ -2621,13 +2797,14 @@
2621
2797
  abort();
2622
2798
  return 1 /* napi_status.napi_invalid_arg */;
2623
2799
  }
2800
+ func >>>= 0;
2624
2801
  var mutex = emnapiTSFN.getMutex(func);
2625
2802
  return mutex.execute(function () {
2626
- if (emnapiTSFN.getIsClosing(func)) {
2627
- return 16 /* napi_status.napi_closing */;
2803
+ if (emnapiTSFN.getState(func) === 0 /* State.kOpen */) {
2804
+ emnapiTSFN.addThreadCount(func);
2805
+ return 0 /* napi_status.napi_ok */;
2628
2806
  }
2629
- emnapiTSFN.addThreadCount(func);
2630
- return 0 /* napi_status.napi_ok */;
2807
+ return 16 /* napi_status.napi_closing */;
2631
2808
  });
2632
2809
  }
2633
2810
  /** @__sig ipi */
@@ -2636,26 +2813,36 @@
2636
2813
  abort();
2637
2814
  return 1 /* napi_status.napi_invalid_arg */;
2638
2815
  }
2816
+ func >>>= 0;
2639
2817
  var mutex = emnapiTSFN.getMutex(func);
2640
2818
  var cond = emnapiTSFN.getCond(func);
2641
- return mutex.execute(function () {
2819
+ var shouldDelete = false;
2820
+ var ret = mutex.execute(function () {
2642
2821
  if (emnapiTSFN.getThreadCount(func) === 0) {
2643
2822
  return 1 /* napi_status.napi_invalid_arg */;
2644
2823
  }
2645
2824
  emnapiTSFN.subThreadCount(func);
2646
2825
  if (emnapiTSFN.getThreadCount(func) === 0 || mode === 1 /* napi_threadsafe_function_release_mode.napi_tsfn_abort */) {
2647
- var isClosing = emnapiTSFN.getIsClosing(func);
2648
- if (!isClosing) {
2649
- var isClosingValue = (mode === 1 /* napi_threadsafe_function_release_mode.napi_tsfn_abort */) ? 1 : 0;
2650
- emnapiTSFN.setIsClosing(func, isClosingValue);
2651
- if (isClosingValue && emnapiTSFN.getMaxQueueSize(func) > 0) {
2826
+ if (emnapiTSFN.getState(func) === 0 /* State.kOpen */) {
2827
+ if (mode === 1 /* napi_threadsafe_function_release_mode.napi_tsfn_abort */) {
2828
+ emnapiTSFN.setState(func, 1 /* State.kClosing */);
2829
+ }
2830
+ if (emnapiTSFN.getState(func) === 1 /* State.kClosing */ && emnapiTSFN.getMaxQueueSize(func) > 0) {
2652
2831
  cond.signal();
2653
2832
  }
2654
2833
  emnapiTSFN.send(func);
2655
2834
  }
2656
2835
  }
2836
+ if (!(emnapiTSFN.getState(func) === 2 /* State.kClosed */ && emnapiTSFN.getThreadCount(func) === 0)) {
2837
+ return 0 /* napi_status.napi_ok */;
2838
+ }
2839
+ shouldDelete = true;
2657
2840
  return 0 /* napi_status.napi_ok */;
2658
2841
  });
2842
+ if (shouldDelete) {
2843
+ emnapiTSFN.destroy(func);
2844
+ }
2845
+ return ret;
2659
2846
  }
2660
2847
  /** @__sig ipp */
2661
2848
  function napi_unref_threadsafe_function(env, func) {
@@ -2663,11 +2850,16 @@
2663
2850
  abort();
2664
2851
  return 1 /* napi_status.napi_invalid_arg */;
2665
2852
  }
2666
- var asyncRefOffset = (func + emnapiTSFN.offset.async_ref) >> 2;
2667
- var arr = new Int32Array(wasmMemory.buffer);
2668
- if (Atomics.load(arr, asyncRefOffset)) {
2669
- Atomics.store(arr, asyncRefOffset, 0);
2670
- emnapiCtx.decreaseWaitingRequestCounter();
2853
+ func >>>= 0;
2854
+ var asyncRefAddress = func + emnapiTSFN.offset.async_ref;
2855
+ var asyncRefOffset = asyncRefAddress >>> 2;
2856
+ var arr = new Uint32Array(emnapiTSFN.ensureBufferFor(asyncRefAddress + 4));
2857
+ var currentValue = Atomics.load(arr, asyncRefOffset);
2858
+ if (currentValue > 0) {
2859
+ Atomics.store(arr, asyncRefOffset, currentValue - 1);
2860
+ if (currentValue === 1) {
2861
+ emnapiCtx.decreaseWaitingRequestCounter();
2862
+ }
2671
2863
  }
2672
2864
  return 0 /* napi_status.napi_ok */;
2673
2865
  }
@@ -2677,34 +2869,73 @@
2677
2869
  abort();
2678
2870
  return 1 /* napi_status.napi_invalid_arg */;
2679
2871
  }
2680
- var asyncRefOffset = (func + emnapiTSFN.offset.async_ref) >> 2;
2681
- var arr = new Int32Array(wasmMemory.buffer);
2682
- if (!Atomics.load(arr, asyncRefOffset)) {
2683
- Atomics.store(arr, asyncRefOffset, 1);
2872
+ func >>>= 0;
2873
+ var asyncRefAddress = func + emnapiTSFN.offset.async_ref;
2874
+ var asyncRefOffset = asyncRefAddress >>> 2;
2875
+ var arr = new Uint32Array(emnapiTSFN.ensureBufferFor(asyncRefAddress + 4));
2876
+ var currentValue = Atomics.load(arr, asyncRefOffset);
2877
+ if (!currentValue) {
2684
2878
  emnapiCtx.increaseWaitingRequestCounter();
2685
2879
  }
2880
+ Atomics.store(arr, asyncRefOffset, currentValue + 1);
2686
2881
  return 0 /* napi_status.napi_ok */;
2687
2882
  }
2688
2883
  var emnapiAWMT = {
2689
- unusedWorkers: [],
2690
- runningWorkers: [],
2691
- workQueue: [],
2884
+ pool: [],
2692
2885
  workerReady: null,
2886
+ globalAddress: 0,
2887
+ globalOffset: {
2888
+ idle_threads: 0,
2889
+ q: 1 * 4,
2890
+ next: 1 * 4,
2891
+ prev: 2 * 4,
2892
+ mutex: 3 * 4,
2893
+ cond: 4 * 4,
2894
+ exit_message: 5 * 4,
2895
+ end: 7 * 4
2896
+ },
2693
2897
  offset: {
2694
2898
  /* napi_ref */ resource: 0,
2695
2899
  /* double */ async_id: 8,
2696
2900
  /* double */ trigger_async_id: 16,
2697
2901
  /* napi_env */ env: 24,
2698
- /* void* */ data: 1 * 4 + 24,
2699
- /* napi_async_execute_callback */ execute: 2 * 4 + 24,
2700
- /* napi_async_complete_callback */ complete: 3 * 4 + 24,
2701
- end: 4 * 4 + 24
2902
+ /* int32_t */ status: 1 * 4 + 24, // 0 for pending, 1 for cancelled, 2 for completed
2903
+ queue: 2 * 4 + 24,
2904
+ queue_next: 2 * 4 + 24,
2905
+ queue_prev: 3 * 4 + 24,
2906
+ /* void* */ data: 4 * 4 + 24,
2907
+ /* napi_async_execute_callback */ execute: 5 * 4 + 24,
2908
+ /* napi_async_complete_callback */ complete: 6 * 4 + 24,
2909
+ end: 7 * 4 + 24
2910
+ },
2911
+ /**
2912
+ * When another thread grows the shared WebAssembly.Memory, this agent's
2913
+ * cached `wasmMemory.buffer` may still have the old shorter length
2914
+ * (V8 refreshes it lazily). If a pointer derived from shared memory lies
2915
+ * beyond the cached length, `wasmMemory.grow(0)` forces the agent to
2916
+ * observe the current memory size and refreshes the buffer.
2917
+ */
2918
+ ensureBufferFor: function (end) {
2919
+ var buffer = wasmMemory.buffer;
2920
+ if (end > buffer.byteLength) {
2921
+ wasmMemory.grow(0);
2922
+ buffer = wasmMemory.buffer;
2923
+ }
2924
+ return buffer;
2702
2925
  },
2703
2926
  init: function () {
2704
- emnapiAWMT.unusedWorkers = [];
2705
- emnapiAWMT.runningWorkers = [];
2706
- emnapiAWMT.workQueue = [];
2927
+ emnapiAWMT.pool = [];
2707
2928
  emnapiAWMT.workerReady = null;
2929
+ if (typeof PThread !== 'undefined') {
2930
+ PThread.unusedWorkers.forEach(emnapiAWMT.addListener);
2931
+ Object.values(PThread.pthreads).forEach(emnapiAWMT.addListener);
2932
+ var __original_getNewWorker_1 = PThread.getNewWorker;
2933
+ PThread.getNewWorker = function () {
2934
+ var r = __original_getNewWorker_1.apply(this, arguments);
2935
+ emnapiAWMT.addListener(r);
2936
+ return r;
2937
+ };
2938
+ }
2708
2939
  },
2709
2940
  addListener: function (worker) {
2710
2941
  if (!worker)
@@ -2718,18 +2949,8 @@
2718
2949
  var type = __emnapi__.type;
2719
2950
  var payload = __emnapi__.payload;
2720
2951
  if (type === 'async-work-complete') {
2721
- emnapiCtx.decreaseWaitingRequestCounter();
2722
- emnapiAWMT.runningWorkers.splice(emnapiAWMT.runningWorkers.indexOf(worker), 1);
2723
- emnapiAWMT.unusedWorkers.push(worker);
2724
- emnapiAWMT.checkIdleWorker();
2725
2952
  emnapiAWMT.callComplete(payload.work, 0 /* napi_status.napi_ok */);
2726
2953
  }
2727
- else if (type === 'async-work-queue') {
2728
- emnapiAWMT.scheduleWork(payload.work);
2729
- }
2730
- else if (type === 'async-work-cancel') {
2731
- emnapiAWMT.cancelWork(payload.work);
2732
- }
2733
2954
  }
2734
2955
  };
2735
2956
  var dispose = function () {
@@ -2750,6 +2971,26 @@
2750
2971
  }
2751
2972
  return true;
2752
2973
  },
2974
+ initGlobal: function () {
2975
+ if (!emnapiAWMT.globalAddress) {
2976
+ emnapiAWMT.globalAddress = _malloc(emnapiAWMT.globalOffset.end);
2977
+ emnapiAWMT.globalAddress >>>= 0;
2978
+ var size = emnapiAWMT.globalOffset.end;
2979
+ var addr = emnapiAWMT.globalAddress;
2980
+ new Uint8Array(emnapiAWMT.ensureBufferFor(addr + size), addr, size).fill(0);
2981
+ emnapiAWMT.queueInit(emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.q);
2982
+ emnapiAWMT.queueInit(emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.exit_message);
2983
+ }
2984
+ },
2985
+ terminateWorkers: function () {
2986
+ emnapiAWMT.pool.forEach(function (w) {
2987
+ var _a, _b;
2988
+ (_a = w._emnapiAWMTListener) === null || _a === void 0 ? void 0 : _a.dispose();
2989
+ (_b = w._emnapiTSFNListener) === null || _b === void 0 ? void 0 : _b.dispose();
2990
+ w.terminate();
2991
+ });
2992
+ emnapiAWMT.pool.length = 0;
2993
+ },
2753
2994
  initWorkers: function (n) {
2754
2995
  if (ENVIRONMENT_IS_PTHREAD) {
2755
2996
  // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
@@ -2757,137 +2998,212 @@
2757
2998
  }
2758
2999
  if (emnapiAWMT.workerReady)
2759
3000
  return emnapiAWMT.workerReady;
2760
- if (typeof onCreateWorker !== 'function') {
2761
- throw new TypeError('`options.onCreateWorker` is not a function');
2762
- }
2763
- var promises = [];
2764
- var args = [];
2765
3001
  if (!('emnapi_async_worker_create' in wasmInstance.exports)) {
2766
3002
  throw new TypeError('`emnapi_async_worker_create` is not exported, please try to add `--export=emnapi_async_worker_create` to linker flags');
2767
3003
  }
3004
+ var emnapi_async_worker_create = wasmInstance.exports.emnapi_async_worker_create;
3005
+ var args = [];
3006
+ emnapiAWMT.initGlobal();
2768
3007
  for (var i = 0; i < n; ++i) {
2769
- args.push(wasmInstance.exports.emnapi_async_worker_create());
3008
+ args.push(emnapi_async_worker_create(1, emnapiAWMT.globalAddress));
2770
3009
  }
2771
- try {
2772
- var _loop_1 = function (i) {
2773
- var worker = onCreateWorker({ type: 'async-work', name: 'emnapi-async-worker' });
2774
- var p = PThread.loadWasmModuleToWorker(worker);
2775
- emnapiAWMT.addListener(worker);
2776
- promises.push(p.then(function () {
2777
- if (typeof worker.unref === 'function') {
2778
- worker.unref();
2779
- }
2780
- }));
2781
- emnapiAWMT.unusedWorkers.push(worker);
2782
- var arg = args[i];
2783
- worker.threadBlockBase = arg;
2784
- worker.postMessage({
2785
- __emnapi__: {
2786
- type: 'async-worker-init',
2787
- payload: { arg: arg }
2788
- }
2789
- });
2790
- };
2791
- for (var i = 0; i < n; ++i) {
2792
- _loop_1(i);
3010
+ var promises = args.map(function (index) {
3011
+ if (index === 0) {
3012
+ return Promise.reject(new Error('Failed to create async worker'));
2793
3013
  }
2794
- }
2795
- catch (err) {
2796
- for (var i = 0; i < n; ++i) {
2797
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
2798
- var arg = args[i];
2799
- _free(arg);
3014
+ var worker;
3015
+ if (index < 0) {
3016
+ worker = emnapiAWMT.pool[-index - 1];
3017
+ if (worker)
3018
+ return worker.whenLoaded;
2800
3019
  }
2801
- throw err;
2802
- }
3020
+ index >>>= 0;
3021
+ var tidOffset = 20;
3022
+ var view = new DataView(emnapiAWMT.ensureBufferFor(index + tidOffset + 4));
3023
+ var tid = view.getInt32(index + tidOffset, true);
3024
+ worker = PThread.pthreads[tid];
3025
+ return worker.whenLoaded;
3026
+ });
2803
3027
  emnapiAWMT.workerReady = Promise.all(promises);
2804
3028
  return emnapiAWMT.workerReady;
2805
3029
  },
2806
- checkIdleWorker: function () {
2807
- if (emnapiAWMT.unusedWorkers.length > 0 && emnapiAWMT.workQueue.length > 0) {
2808
- var worker = emnapiAWMT.unusedWorkers.shift();
2809
- var work = emnapiAWMT.workQueue.shift();
2810
- emnapiAWMT.runningWorkers.push(worker);
2811
- worker.postMessage({
2812
- __emnapi__: {
2813
- type: 'async-work-execute',
2814
- payload: { work: work }
2815
- }
2816
- });
2817
- }
2818
- },
2819
3030
  getResource: function (work) {
2820
- return emnapiTSFN.loadSizeTypeValue(work + emnapiAWMT.offset.resource, false);
3031
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.resource + 4);
3032
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3033
+ return HEAP_DATA_VIEW.getUint32(work + emnapiAWMT.offset.resource, true);
2821
3034
  },
2822
3035
  getExecute: function (work) {
2823
- return emnapiTSFN.loadSizeTypeValue(work + emnapiAWMT.offset.execute, false);
3036
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.execute + 4);
3037
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3038
+ return HEAP_DATA_VIEW.getUint32(work + emnapiAWMT.offset.execute, true);
2824
3039
  },
2825
3040
  getComplete: function (work) {
2826
- return emnapiTSFN.loadSizeTypeValue(work + emnapiAWMT.offset.complete, false);
3041
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.complete + 4);
3042
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3043
+ return HEAP_DATA_VIEW.getUint32(work + emnapiAWMT.offset.complete, true);
2827
3044
  },
2828
3045
  getEnv: function (work) {
2829
- return emnapiTSFN.loadSizeTypeValue(work + emnapiAWMT.offset.env, false);
3046
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.env + 4);
3047
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3048
+ return HEAP_DATA_VIEW.getUint32(work + emnapiAWMT.offset.env, true);
2830
3049
  },
2831
3050
  getData: function (work) {
2832
- return emnapiTSFN.loadSizeTypeValue(work + emnapiAWMT.offset.data, false);
3051
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.data + 4);
3052
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3053
+ return HEAP_DATA_VIEW.getUint32(work + emnapiAWMT.offset.data, true);
3054
+ },
3055
+ getMutex: function () {
3056
+ var index = emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.mutex;
3057
+ var mutex = {
3058
+ lock: function () {
3059
+ var isBrowserMain = typeof window !== 'undefined' && typeof document !== 'undefined' && !ENVIRONMENT_IS_NODE;
3060
+ var i32a = new Int32Array(emnapiAWMT.ensureBufferFor(index + 4), index, 1);
3061
+ if (isBrowserMain) {
3062
+ while (true) {
3063
+ var oldValue = Atomics.compareExchange(i32a, 0, 0, 10);
3064
+ if (oldValue === 0) {
3065
+ return;
3066
+ }
3067
+ }
3068
+ }
3069
+ else {
3070
+ while (true) {
3071
+ var oldValue = Atomics.compareExchange(i32a, 0, 0, 10);
3072
+ if (oldValue === 0) {
3073
+ return;
3074
+ }
3075
+ Atomics.wait(i32a, 0, 10);
3076
+ }
3077
+ }
3078
+ },
3079
+ unlock: function () {
3080
+ var i32a = new Int32Array(emnapiAWMT.ensureBufferFor(index + 4), index, 1);
3081
+ var oldValue = Atomics.compareExchange(i32a, 0, 10, 0);
3082
+ if (oldValue !== 10) {
3083
+ throw new Error('Tried to unlock while not holding the mutex');
3084
+ }
3085
+ Atomics.notify(i32a, 0, 1);
3086
+ },
3087
+ execute: function (fn) {
3088
+ mutex.lock();
3089
+ try {
3090
+ return fn();
3091
+ }
3092
+ finally {
3093
+ mutex.unlock();
3094
+ }
3095
+ }
3096
+ };
3097
+ return mutex;
3098
+ },
3099
+ getCond: function () {
3100
+ var index = emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.cond;
3101
+ var mutex = emnapiAWMT.getMutex();
3102
+ var cond = {
3103
+ wait: function () {
3104
+ var i32a = new Int32Array(emnapiAWMT.ensureBufferFor(index + 4), index, 1);
3105
+ var value = Atomics.load(i32a, 0);
3106
+ mutex.unlock();
3107
+ Atomics.wait(i32a, 0, value);
3108
+ mutex.lock();
3109
+ },
3110
+ signal: function () {
3111
+ var i32a = new Int32Array(emnapiAWMT.ensureBufferFor(index + 4), index, 1);
3112
+ Atomics.add(i32a, 0, 1);
3113
+ Atomics.notify(i32a, 0, 1);
3114
+ }
3115
+ };
3116
+ return cond;
3117
+ },
3118
+ queueInit: function (q) {
3119
+ emnapiAWMT.ensureBufferFor(q + 4 + 4);
3120
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3121
+ HEAP_DATA_VIEW.setUint32(q, q, true);
3122
+ HEAP_DATA_VIEW.setUint32(q + 4, q, true);
3123
+ },
3124
+ queueInsertTail: function (h, q) {
3125
+ emnapiAWMT.ensureBufferFor(h + 4 + 4);
3126
+ emnapiAWMT.ensureBufferFor(q + 4 + 4);
3127
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3128
+ HEAP_DATA_VIEW.setUint32(q, h, true);
3129
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
3130
+ var tempValue = HEAP_DATA_VIEW.getUint32(h + 4, true);
3131
+ HEAP_DATA_VIEW.setUint32(q + 4, tempValue, true);
3132
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
3133
+ var qprev = HEAP_DATA_VIEW.getUint32(q + 4, true);
3134
+ HEAP_DATA_VIEW.setUint32(qprev, q, true);
3135
+ HEAP_DATA_VIEW.setUint32(h + 4, q, true);
3136
+ },
3137
+ queueRemove: function (q) {
3138
+ emnapiAWMT.ensureBufferFor(q + 4 + 4);
3139
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3140
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
3141
+ var qprev = HEAP_DATA_VIEW.getUint32(q + 4, true);
3142
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
3143
+ var qnext = HEAP_DATA_VIEW.getUint32(q, true);
3144
+ HEAP_DATA_VIEW.setUint32(qprev, qnext, true);
3145
+ HEAP_DATA_VIEW.setUint32(qnext + 4, qprev, true);
3146
+ },
3147
+ queueEmpty: function (q) {
3148
+ emnapiAWMT.ensureBufferFor(q + 4);
3149
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3150
+ // eslint-disable-next-line eqeqeq
3151
+ return q == HEAP_DATA_VIEW.getUint32(q, true);
2833
3152
  },
2834
3153
  scheduleWork: function (work) {
2835
3154
  var _a;
2836
- if (ENVIRONMENT_IS_PTHREAD) {
2837
- var postMessage_1 = napiModule.postMessage;
2838
- postMessage_1({
2839
- __emnapi__: {
2840
- type: 'async-work-queue',
2841
- payload: { work: work }
2842
- }
3155
+ if (!((_a = emnapiAWMT.workerReady) === null || _a === void 0 ? void 0 : _a.ready)) {
3156
+ emnapiAWMT.initWorkers(_emnapi_async_work_pool_size()).then(function () {
3157
+ emnapiAWMT.workerReady.ready = true;
3158
+ }).catch(function (err) {
3159
+ emnapiAWMT.workerReady = null;
3160
+ throw err;
2843
3161
  });
2844
- return;
2845
3162
  }
2846
3163
  emnapiCtx.increaseWaitingRequestCounter();
2847
- emnapiAWMT.workQueue.push(work);
2848
- if ((_a = emnapiAWMT.workerReady) === null || _a === void 0 ? void 0 : _a.ready) {
2849
- emnapiAWMT.checkIdleWorker();
3164
+ var statusBuffer = new Int32Array(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.status + 4), work + emnapiAWMT.offset.status, 1);
3165
+ Atomics.store(statusBuffer, 0, 0 /* AsyncWorkStatus.Pending */);
3166
+ var mutex = emnapiAWMT.getMutex();
3167
+ var cond = emnapiAWMT.getCond();
3168
+ mutex.lock();
3169
+ try {
3170
+ emnapiAWMT.queueInsertTail(emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.q, work + emnapiAWMT.offset.queue);
2850
3171
  }
2851
- else {
2852
- var fail = function (err) {
2853
- emnapiCtx.decreaseWaitingRequestCounter();
2854
- throw err;
2855
- };
2856
- try {
2857
- emnapiAWMT.initWorkers(_emnapi_async_work_pool_size()).then(function () {
2858
- emnapiAWMT.workerReady.ready = true;
2859
- emnapiAWMT.checkIdleWorker();
2860
- }, fail);
2861
- }
2862
- catch (err) {
2863
- fail(err);
2864
- }
3172
+ catch (err) {
3173
+ emnapiCtx.decreaseWaitingRequestCounter();
3174
+ mutex.unlock();
3175
+ throw err;
3176
+ }
3177
+ emnapiAWMT.ensureBufferFor(emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.idle_threads + 4);
3178
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3179
+ if (HEAP_DATA_VIEW.getUint32(emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.idle_threads, true) > 0) {
3180
+ cond.signal();
2865
3181
  }
3182
+ mutex.unlock();
2866
3183
  },
2867
3184
  cancelWork: function (work) {
2868
- if (ENVIRONMENT_IS_PTHREAD) {
2869
- var postMessage_2 = napiModule.postMessage;
2870
- postMessage_2({
2871
- __emnapi__: {
2872
- type: 'async-work-cancel',
2873
- payload: { work: work }
2874
- }
2875
- });
2876
- return 0 /* napi_status.napi_ok */;
3185
+ var cancelled = false;
3186
+ emnapiAWMT.getMutex().execute(function () {
3187
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.status + 4);
3188
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3189
+ cancelled = !emnapiAWMT.queueEmpty(work + emnapiAWMT.offset.queue) && HEAP_DATA_VIEW.getInt32(work + emnapiAWMT.offset.status, true) !== 2 /* AsyncWorkStatus.Completed */;
3190
+ if (cancelled) {
3191
+ emnapiAWMT.queueRemove(work + emnapiAWMT.offset.queue);
3192
+ }
3193
+ });
3194
+ if (!cancelled) {
3195
+ return 9 /* napi_status.napi_generic_failure */;
2877
3196
  }
2878
- var index = emnapiAWMT.workQueue.indexOf(work);
2879
- if (index !== -1) {
2880
- emnapiAWMT.workQueue.splice(index, 1);
2881
- emnapiCtx.feature.setImmediate(function () {
2882
- emnapiCtx.decreaseWaitingRequestCounter();
2883
- emnapiAWMT.checkIdleWorker();
2884
- emnapiAWMT.callComplete(work, 11 /* napi_status.napi_cancelled */);
2885
- });
2886
- return 0 /* napi_status.napi_ok */;
3197
+ if (Atomics.compareExchange(new Int32Array(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.status + 4), work + emnapiAWMT.offset.status, 1), 0, 0 /* AsyncWorkStatus.Pending */, 1 /* AsyncWorkStatus.Cancelled */) !== 0 /* AsyncWorkStatus.Pending */) {
3198
+ return 9 /* napi_status.napi_generic_failure */;
2887
3199
  }
2888
- return 9 /* napi_status.napi_generic_failure */;
3200
+ emnapiCtx.feature.setImmediate(function () {
3201
+ emnapiAWMT.callComplete(work, 11 /* napi_status.napi_cancelled */);
3202
+ });
3203
+ return 0 /* napi_status.napi_ok */;
2889
3204
  },
2890
3205
  callComplete: function (work, status) {
3206
+ emnapiCtx.decreaseWaitingRequestCounter();
2891
3207
  var complete = emnapiAWMT.getComplete(work);
2892
3208
  var env = emnapiAWMT.getEnv(work);
2893
3209
  var data = emnapiAWMT.getData(work);
@@ -2905,7 +3221,7 @@
2905
3221
  var resource = emnapiAWMT.getResource(work);
2906
3222
  var resource_value = emnapiCtx.refStore.get(resource).get();
2907
3223
  var resourceObject = emnapiCtx.handleStore.get(resource_value).value;
2908
- var view = new DataView(wasmMemory.buffer);
3224
+ var view = new DataView(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.trigger_async_id + 8));
2909
3225
  var asyncId = view.getFloat64(work + emnapiAWMT.offset.async_id, true);
2910
3226
  var triggerAsyncId = view.getFloat64(work + emnapiAWMT.offset.trigger_async_id, true);
2911
3227
  emnapiNodeBinding.node.makeCallback(resourceObject, callback, [], {
@@ -2922,6 +3238,7 @@
2922
3238
  }
2923
3239
  }
2924
3240
  };
3241
+ emnapiAWMT.init();
2925
3242
  /** @__sig ippppppp */
2926
3243
  var napi_create_async_work = singleThreadAsyncWork
2927
3244
  ? function (env, resource, resource_name, execute, complete, data, result) {
@@ -2946,6 +3263,7 @@
2946
3263
  var resourceName = String(emnapiCtx.handleStore.get(resource_name).value);
2947
3264
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
2948
3265
  var id = emnapiAWST.create(env, resourceObject, resourceName, execute, complete, data);
3266
+ result >>>= 0;
2949
3267
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2950
3268
  HEAP_DATA_VIEW.setUint32(result, id, true);
2951
3269
  return envObject.clearLastError();
@@ -2973,7 +3291,8 @@
2973
3291
  var aw = _malloc(sizeofAW);
2974
3292
  if (!aw)
2975
3293
  return envObject.setLastError(9 /* napi_status.napi_generic_failure */);
2976
- new Uint8Array(wasmMemory.buffer).subarray(aw, aw + sizeofAW).fill(0);
3294
+ aw >>>= 0;
3295
+ new Uint8Array(emnapiAWMT.ensureBufferFor(aw + sizeofAW)).subarray(aw, aw + sizeofAW).fill(0);
2977
3296
  var s = envObject.ensureHandleId(resourceObject);
2978
3297
  var resourceRef = emnapiCtx.createReference(envObject, s, 1, 1 /* ReferenceOwnership.kUserland */);
2979
3298
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -2985,6 +3304,8 @@
2985
3304
  HEAP_DATA_VIEW.setUint32(aw + emnapiAWMT.offset.execute, execute, true);
2986
3305
  HEAP_DATA_VIEW.setUint32(aw + emnapiAWMT.offset.complete, complete, true);
2987
3306
  HEAP_DATA_VIEW.setUint32(aw + emnapiAWMT.offset.data, data, true);
3307
+ emnapiAWMT.queueInit(aw + emnapiAWMT.offset.queue);
3308
+ result >>>= 0;
2988
3309
  HEAP_DATA_VIEW.setUint32(result, aw, true);
2989
3310
  return envObject.clearLastError();
2990
3311
  };
@@ -2998,6 +3319,7 @@
2998
3319
  envObject.checkGCAccess();
2999
3320
  if (!work)
3000
3321
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
3322
+ work >>>= 0;
3001
3323
  emnapiAWST.remove(work);
3002
3324
  return envObject.clearLastError();
3003
3325
  }
@@ -3009,10 +3331,11 @@
3009
3331
  envObject.checkGCAccess();
3010
3332
  if (!work)
3011
3333
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
3334
+ work >>>= 0;
3012
3335
  var resource = emnapiAWMT.getResource(work);
3013
3336
  emnapiCtx.refStore.get(resource).dispose();
3014
3337
  if (emnapiNodeBinding) {
3015
- var view = new DataView(wasmMemory.buffer);
3338
+ var view = new DataView(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.trigger_async_id + 8));
3016
3339
  var asyncId = view.getFloat64(work + emnapiAWMT.offset.async_id, true);
3017
3340
  var triggerAsyncId = view.getFloat64(work + emnapiAWMT.offset.trigger_async_id, true);
3018
3341
  _emnapi_node_emit_async_destroy(asyncId, triggerAsyncId);
@@ -3028,6 +3351,7 @@
3028
3351
  var envObject = emnapiCtx.envStore.get(env);
3029
3352
  if (!work)
3030
3353
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
3354
+ work >>>= 0;
3031
3355
  emnapiAWST.queue(work);
3032
3356
  return envObject.clearLastError();
3033
3357
  }
@@ -3037,6 +3361,7 @@
3037
3361
  var envObject = emnapiCtx.envStore.get(env);
3038
3362
  if (!work)
3039
3363
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
3364
+ work >>>= 0;
3040
3365
  emnapiAWMT.scheduleWork(work);
3041
3366
  return envObject.clearLastError();
3042
3367
  };
@@ -3048,6 +3373,7 @@
3048
3373
  var envObject = emnapiCtx.envStore.get(env);
3049
3374
  if (!work)
3050
3375
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
3376
+ work >>>= 0;
3051
3377
  var status = emnapiAWST.cancel(work);
3052
3378
  if (status === 0 /* napi_status.napi_ok */)
3053
3379
  return envObject.clearLastError();
@@ -3059,42 +3385,129 @@
3059
3385
  var envObject = emnapiCtx.envStore.get(env);
3060
3386
  if (!work)
3061
3387
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
3388
+ work >>>= 0;
3062
3389
  var status = emnapiAWMT.cancelWork(work);
3063
3390
  if (status === 0 /* napi_status.napi_ok */)
3064
3391
  return envObject.clearLastError();
3065
3392
  return envObject.setLastError(status);
3066
3393
  };
3067
- function initWorker(startArg) {
3394
+ /** @__sig pp */
3395
+ function _emnapi_async_worker(globalAddress) {
3396
+ globalAddress >>>= 0;
3397
+ emnapiAWMT.globalAddress = globalAddress;
3398
+ var mutex = emnapiAWMT.getMutex();
3399
+ var cond = emnapiAWMT.getCond();
3400
+ mutex.lock();
3401
+ var exitMessageAddr = globalAddress + emnapiAWMT.globalOffset.exit_message;
3402
+ var idleThreadsAddr = globalAddress + emnapiAWMT.globalOffset.idle_threads;
3403
+ var workerQueueAddr = globalAddress + emnapiAWMT.globalOffset.q;
3404
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3405
+ for (;;) {
3406
+ emnapiAWMT.ensureBufferFor(workerQueueAddr + 4);
3407
+ while (emnapiAWMT.queueEmpty(workerQueueAddr)) {
3408
+ Atomics.add(new Int32Array(emnapiAWMT.ensureBufferFor(idleThreadsAddr + 4), idleThreadsAddr, 1), 0, 1);
3409
+ cond.wait();
3410
+ Atomics.sub(new Int32Array(emnapiAWMT.ensureBufferFor(idleThreadsAddr + 4), idleThreadsAddr, 1), 0, 1);
3411
+ }
3412
+ var q = HEAP_DATA_VIEW.getUint32(workerQueueAddr, true);
3413
+ if (q === exitMessageAddr) {
3414
+ cond.signal();
3415
+ mutex.unlock();
3416
+ break;
3417
+ }
3418
+ var work = q - emnapiAWMT.offset.queue;
3419
+ emnapiAWMT.queueRemove(q);
3420
+ emnapiAWMT.queueInit(q);
3421
+ mutex.unlock();
3422
+ var statusBuffer = new Int32Array(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.status + 4), work + emnapiAWMT.offset.status, 1);
3423
+ if (Atomics.load(statusBuffer, 0) === 1 /* AsyncWorkStatus.Cancelled */) {
3424
+ abort('unreachable');
3425
+ }
3426
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
3427
+ var execute = emnapiAWMT.getExecute(work);
3428
+ var env = emnapiAWMT.getEnv(work);
3429
+ var data = emnapiAWMT.getData(work);
3430
+ (wasmTable.get(execute))(env, data);
3431
+ Atomics.store(statusBuffer, 0, 2 /* AsyncWorkStatus.Completed */);
3432
+ var postMessage_1 = napiModule.postMessage;
3433
+ postMessage_1({
3434
+ __emnapi__: {
3435
+ type: 'async-work-complete',
3436
+ payload: { work: work }
3437
+ }
3438
+ });
3439
+ mutex.lock();
3440
+ }
3441
+ return 0;
3442
+ }
3443
+ /** @__sig ipp */
3444
+ function _emnapi_spawn_worker(f, globalAddress) {
3445
+ if (typeof onCreateWorker !== 'function') {
3446
+ throw new TypeError('`options.onCreateWorker` is not a function');
3447
+ }
3448
+ var promises = [];
3449
+ var args = [];
3450
+ if (!('emnapi_async_worker_create' in wasmInstance.exports)) {
3451
+ throw new TypeError('`emnapi_async_worker_create` is not exported, please try to add `--export=emnapi_async_worker_create` to linker flags');
3452
+ }
3453
+ args.push(wasmInstance.exports.emnapi_async_worker_create(0, 0));
3454
+ var handleError = function (e) {
3455
+ if ('message' in e && (e.message.indexOf('RuntimeError') !== -1 || e.message.indexOf('unreachable') !== -1)) {
3456
+ emnapiAWMT.terminateWorkers();
3457
+ }
3458
+ };
3459
+ var ret;
3460
+ try {
3461
+ var worker_1 = onCreateWorker({ type: 'async-work', name: 'emnapi-async-worker' });
3462
+ var p = PThread.loadWasmModuleToWorker(worker_1);
3463
+ if (ENVIRONMENT_IS_NODE) {
3464
+ worker_1.on('error', handleError);
3465
+ }
3466
+ else {
3467
+ worker_1.addEventListener('error', handleError, false);
3468
+ }
3469
+ emnapiAWMT.addListener(worker_1);
3470
+ emnapiTSFN.addListener(worker_1);
3471
+ promises.push(p.then(function () {
3472
+ if (typeof worker_1.unref === 'function') {
3473
+ worker_1.unref();
3474
+ }
3475
+ }));
3476
+ ret = emnapiAWMT.pool.push(worker_1) - 1;
3477
+ var arg = args[0];
3478
+ worker_1.threadBlockBase = arg;
3479
+ worker_1.postMessage({
3480
+ __emnapi__: {
3481
+ type: 'async-worker-init',
3482
+ payload: { arg: arg, func: [f, globalAddress] }
3483
+ }
3484
+ });
3485
+ }
3486
+ catch (err) {
3487
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
3488
+ var arg = args[0];
3489
+ _free(arg);
3490
+ throw err;
3491
+ }
3492
+ return ret;
3493
+ }
3494
+ function initWorker(startArg, func) {
3068
3495
  if (napiModule.childThread) {
3069
3496
  if (typeof wasmInstance.exports.emnapi_async_worker_init !== 'function') {
3070
3497
  throw new TypeError('`emnapi_async_worker_init` is not exported, please try to add `--export=emnapi_async_worker_init` to linker flags');
3071
3498
  }
3072
3499
  wasmInstance.exports.emnapi_async_worker_init(startArg);
3500
+ (wasmTable.get(func[0]))(func[1]);
3073
3501
  }
3074
3502
  else {
3075
3503
  throw new Error('startThread is only available in child threads');
3076
3504
  }
3077
3505
  }
3078
- function executeAsyncWork(work) {
3079
- if (!ENVIRONMENT_IS_PTHREAD)
3080
- return;
3081
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
3082
- var execute = emnapiAWMT.getExecute(work);
3083
- var env = emnapiAWMT.getEnv(work);
3084
- var data = emnapiAWMT.getData(work);
3085
- (wasmTable.get(execute))(env, data);
3086
- var postMessage = napiModule.postMessage;
3087
- postMessage({
3088
- __emnapi__: {
3089
- type: 'async-work-complete',
3090
- payload: { work: work }
3091
- }
3092
- });
3093
- }
3094
3506
  napiModule.initWorker = initWorker;
3095
- napiModule.executeAsyncWork = executeAsyncWork;
3096
3507
  var asyncWorkMod = /*#__PURE__*/ Object.freeze({
3097
3508
  __proto__: null,
3509
+ _emnapi_async_worker: _emnapi_async_worker,
3510
+ _emnapi_spawn_worker: _emnapi_spawn_worker,
3098
3511
  napi_cancel_async_work: napi_cancel_async_work,
3099
3512
  napi_create_async_work: napi_create_async_work,
3100
3513
  napi_delete_async_work: napi_delete_async_work,
@@ -3164,6 +3577,7 @@
3164
3577
  var pointer = _malloc(arrayBuffer.byteLength);
3165
3578
  if (!pointer)
3166
3579
  throw new Error('Out of memory');
3580
+ pointer >>>= 0;
3167
3581
  new Uint8Array(wasmMemory.buffer).set(new Uint8Array(arrayBuffer), pointer);
3168
3582
  info.address = pointer;
3169
3583
  info.ownership = emnapiExternalMemory.registry ? 0 /* ReferenceOwnership.kRuntime */ : 1 /* ReferenceOwnership.kUserland */;
@@ -3185,8 +3599,7 @@
3185
3599
  }
3186
3600
  return view;
3187
3601
  }
3188
- var maybeOldWasmMemory = emnapiExternalMemory.isDetachedArrayBuffer(view.buffer) ||
3189
- ((typeof SharedArrayBuffer === 'function') && (view.buffer instanceof SharedArrayBuffer));
3602
+ var maybeOldWasmMemory = emnapiExternalMemory.isDetachedArrayBuffer(view.buffer) || emnapiExternalMemory.isSharedArrayBuffer(view.buffer);
3190
3603
  if (maybeOldWasmMemory && emnapiExternalMemory.wasmMemoryViewTable.has(view)) {
3191
3604
  var info = emnapiExternalMemory.wasmMemoryViewTable.get(view);
3192
3605
  var Ctor = info.Ctor;
@@ -3216,6 +3629,75 @@
3216
3629
  return { address: address === 0 ? 0 : (address + view.byteOffset), ownership: ownership, runtimeAllocated: runtimeAllocated, view: view };
3217
3630
  }
3218
3631
  };
3632
+ /**
3633
+ * Metadata layout in wasm shared memory (allocated with _malloc):
3634
+ * offset 0: refcount (int32, 4 bytes - for Atomics)
3635
+ * offset POINTER_SIZE: external_data (pointer)
3636
+ * offset 2*POINTER_SIZE: byte_length (size_t)
3637
+ * offset 3*POINTER_SIZE: finalize_cb (pointer)
3638
+ * offset 4*POINTER_SIZE: finalize_data (pointer)
3639
+ * offset 5*POINTER_SIZE: finalize_hint (pointer)
3640
+ * Total: 6 * POINTER_SIZE bytes
3641
+ */
3642
+ /**
3643
+ * @__postset
3644
+ * ```
3645
+ * emnapiExternalSAB.init();
3646
+ * ```
3647
+ */
3648
+ var emnapiExternalSAB = {
3649
+ registry: undefined,
3650
+ handleTable: new WeakMap(),
3651
+ init: function () {
3652
+ emnapiExternalSAB.handleTable = new WeakMap();
3653
+ emnapiExternalSAB.registry = typeof FinalizationRegistry === 'function'
3654
+ ? new FinalizationRegistry(function (metaPtr) {
3655
+ emnapiExternalSAB.release(metaPtr);
3656
+ })
3657
+ : undefined;
3658
+ },
3659
+ allocMeta: function (external_data, byte_length, finalize_cb, finalize_data, finalize_hint) {
3660
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
3661
+ var size = 4 * 6;
3662
+ // eslint-disable-next-line prefer-const
3663
+ var metaPtr = _malloc(size);
3664
+ if (!metaPtr)
3665
+ throw new Error('Out of memory');
3666
+ metaPtr >>>= 0;
3667
+ // refcount = 1
3668
+ Atomics.store(new Int32Array(wasmMemory.buffer, metaPtr, 1), 0, 1);
3669
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3670
+ HEAP_DATA_VIEW.setUint32(metaPtr + 4, external_data, true);
3671
+ HEAP_DATA_VIEW.setUint32(metaPtr + 8, byte_length, true);
3672
+ HEAP_DATA_VIEW.setUint32(metaPtr + 12, finalize_cb, true);
3673
+ HEAP_DATA_VIEW.setUint32(metaPtr + 16, finalize_data, true);
3674
+ HEAP_DATA_VIEW.setUint32(metaPtr + 20, finalize_hint, true);
3675
+ return metaPtr;
3676
+ },
3677
+ readMeta: function (metaPtr) {
3678
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3679
+ var external_data = HEAP_DATA_VIEW.getUint32(metaPtr + 4, true);
3680
+ var byte_length = HEAP_DATA_VIEW.getUint32(metaPtr + 8, true);
3681
+ var finalize_cb = HEAP_DATA_VIEW.getUint32(metaPtr + 12, true);
3682
+ var finalize_data = HEAP_DATA_VIEW.getUint32(metaPtr + 16, true);
3683
+ var finalize_hint = HEAP_DATA_VIEW.getUint32(metaPtr + 20, true);
3684
+ return { external_data: external_data, byte_length: byte_length, finalize_cb: finalize_cb, finalize_data: finalize_data, finalize_hint: finalize_hint };
3685
+ },
3686
+ release: function (metaPtr) {
3687
+ var oldRefcount = Atomics.sub(new Int32Array(wasmMemory.buffer, metaPtr, 1), 0, 1);
3688
+ if (oldRefcount === 1) {
3689
+ // refcount reached 0, we are the last holder
3690
+ var info = emnapiExternalSAB.readMeta(metaPtr);
3691
+ var finalize_cb = info.finalize_cb;
3692
+ if (finalize_cb) {
3693
+ var finalize_data = info.finalize_data;
3694
+ var finalize_hint = info.finalize_hint;
3695
+ (wasmTable.get(finalize_cb))(finalize_data, finalize_hint);
3696
+ }
3697
+ _free(metaPtr);
3698
+ }
3699
+ }
3700
+ };
3219
3701
  /* eslint-disable @typescript-eslint/indent */
3220
3702
  /**
3221
3703
  * @__postset
@@ -3326,7 +3808,7 @@
3326
3808
  ptr >>>= 0;
3327
3809
  var HEAPU8 = new Uint8Array(wasmMemory.buffer);
3328
3810
  var end = ptr;
3329
- if (length === -1) {
3811
+ if (length === -1 || length === 4294967295) {
3330
3812
  for (; HEAPU8[end];)
3331
3813
  ++end;
3332
3814
  }
@@ -3417,12 +3899,12 @@
3417
3899
  return '';
3418
3900
  ptr >>>= 0;
3419
3901
  var end = ptr;
3420
- if (length === -1) {
3421
- var idx = end >> 1;
3902
+ if (length === -1 || length === 4294967295) {
3903
+ var idx = end >>> 1;
3422
3904
  var HEAPU16 = new Uint16Array(wasmMemory.buffer);
3423
3905
  while (HEAPU16[idx])
3424
3906
  ++idx;
3425
- end = idx << 1;
3907
+ end = (idx << 1) >>> 0;
3426
3908
  }
3427
3909
  else {
3428
3910
  end = ptr + (length >>> 0) * 2;
@@ -3455,12 +3937,13 @@
3455
3937
  return outPtr - startPtr;
3456
3938
  },
3457
3939
  newString: function (env, str, length, result, stringMaker) {
3940
+ length >>>= 0;
3458
3941
  if (!env)
3459
3942
  return 1 /* napi_status.napi_invalid_arg */;
3460
3943
  // @ts-expect-error
3461
3944
  var envObject = emnapiCtx.envStore.get(env);
3462
3945
  envObject.checkGCAccess();
3463
- var autoLength = length === -1;
3946
+ var autoLength = length === -1 || length === 4294967295;
3464
3947
  var sizelength = length >>> 0;
3465
3948
  if (length !== 0) {
3466
3949
  if (!str)
@@ -3470,7 +3953,9 @@
3470
3953
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
3471
3954
  if (!(autoLength || (sizelength <= 2147483647)))
3472
3955
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
3956
+ str >>>= 0;
3473
3957
  var strValue = stringMaker(str, autoLength, sizelength);
3958
+ result >>>= 0;
3474
3959
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
3475
3960
  var value = emnapiCtx.addToCurrentScope(strValue).id;
3476
3961
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -3478,12 +3963,13 @@
3478
3963
  return envObject.clearLastError();
3479
3964
  },
3480
3965
  newExternalString: function (env, str, length, finalize_callback, finalize_hint, result, copied, createApi, stringMaker) {
3966
+ length >>>= 0;
3481
3967
  if (!env)
3482
3968
  return 1 /* napi_status.napi_invalid_arg */;
3483
3969
  // @ts-expect-error
3484
3970
  var envObject = emnapiCtx.envStore.get(env);
3485
3971
  envObject.checkGCAccess();
3486
- var autoLength = length === -1;
3972
+ var autoLength = length === -1 || length === 4294967295;
3487
3973
  var sizelength = length >>> 0;
3488
3974
  if (length !== 0) {
3489
3975
  if (!str)
@@ -3529,6 +4015,7 @@
3529
4015
  if (!handle.isArray()) {
3530
4016
  return envObject.setLastError(8 /* napi_status.napi_array_expected */);
3531
4017
  }
4018
+ result >>>= 0;
3532
4019
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
3533
4020
  var v = handle.value.length >>> 0;
3534
4021
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -3557,11 +4044,13 @@
3557
4044
  }
3558
4045
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3559
4046
  if (data) {
4047
+ data >>>= 0;
3560
4048
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
3561
4049
  var p = emnapiExternalMemory.getArrayBufferPointer(handle.value, true).address;
3562
4050
  HEAP_DATA_VIEW.setUint32(data, p, true);
3563
4051
  }
3564
4052
  if (byte_length) {
4053
+ byte_length >>>= 0;
3565
4054
  HEAP_DATA_VIEW.setUint32(byte_length, handle.value.byteLength, true);
3566
4055
  }
3567
4056
  return envObject.clearLastError();
@@ -3634,6 +4123,7 @@
3634
4123
  catch (_) {
3635
4124
  return envObject.setLastError(2 /* napi_status.napi_object_expected */);
3636
4125
  }
4126
+ result >>>= 0;
3637
4127
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
3638
4128
  var p = envObject.ensureHandleId(Object.getPrototypeOf(v));
3639
4129
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -3663,6 +4153,7 @@
3663
4153
  var v = handle.value;
3664
4154
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3665
4155
  if (type) {
4156
+ type >>>= 0;
3666
4157
  var t = void 0;
3667
4158
  if (v instanceof Int8Array) {
3668
4159
  t = 0 /* napi_typedarray_type.napi_int8_array */;
@@ -3706,24 +4197,27 @@
3706
4197
  }
3707
4198
  HEAP_DATA_VIEW.setInt32(type, t, true);
3708
4199
  }
4200
+ v = emnapiExternalMemory.getOrUpdateMemoryView(v);
3709
4201
  if (length) {
4202
+ length >>>= 0;
3710
4203
  HEAP_DATA_VIEW.setUint32(length, v.length, true);
3711
4204
  }
3712
- var buffer;
3713
4205
  if (data || arraybuffer) {
3714
- buffer = v.buffer;
3715
4206
  if (data) {
4207
+ data >>>= 0;
3716
4208
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
3717
4209
  var p = emnapiExternalMemory.getViewPointer(v, true).address;
3718
4210
  HEAP_DATA_VIEW.setUint32(data, p, true);
3719
4211
  }
3720
4212
  if (arraybuffer) {
4213
+ arraybuffer >>>= 0;
3721
4214
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
3722
- var ab = envObject.ensureHandleId(buffer);
4215
+ var ab = envObject.ensureHandleId(v.buffer);
3723
4216
  HEAP_DATA_VIEW.setUint32(arraybuffer, ab, true);
3724
4217
  }
3725
4218
  }
3726
4219
  if (byte_offset) {
4220
+ byte_offset >>>= 0;
3727
4221
  HEAP_DATA_VIEW.setUint32(byte_offset, v.byteOffset, true);
3728
4222
  }
3729
4223
  return envObject.clearLastError();
@@ -3762,26 +4256,28 @@
3762
4256
  if (!handle.isDataView()) {
3763
4257
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
3764
4258
  }
3765
- var v = handle.value;
4259
+ var v = emnapiExternalMemory.getOrUpdateMemoryView(handle.value);
3766
4260
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3767
4261
  if (byte_length) {
4262
+ byte_length >>>= 0;
3768
4263
  HEAP_DATA_VIEW.setUint32(byte_length, v.byteLength, true);
3769
4264
  }
3770
- var buffer;
3771
4265
  if (data || arraybuffer) {
3772
- buffer = v.buffer;
3773
4266
  if (data) {
4267
+ data >>>= 0;
3774
4268
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
3775
4269
  var p = emnapiExternalMemory.getViewPointer(v, true).address;
3776
4270
  HEAP_DATA_VIEW.setUint32(data, p, true);
3777
4271
  }
3778
4272
  if (arraybuffer) {
4273
+ arraybuffer >>>= 0;
3779
4274
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
3780
- var ab = envObject.ensureHandleId(buffer);
4275
+ var ab = envObject.ensureHandleId(v.buffer);
3781
4276
  HEAP_DATA_VIEW.setUint32(arraybuffer, ab, true);
3782
4277
  }
3783
4278
  }
3784
4279
  if (byte_offset) {
4280
+ byte_offset >>>= 0;
3785
4281
  HEAP_DATA_VIEW.setUint32(byte_offset, v.byteOffset, true);
3786
4282
  }
3787
4283
  return envObject.clearLastError();
@@ -3811,6 +4307,7 @@
3811
4307
  if (!handle.isDate()) {
3812
4308
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
3813
4309
  }
4310
+ result >>>= 0;
3814
4311
  v = handle.value.valueOf();
3815
4312
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3816
4313
  HEAP_DATA_VIEW.setFloat64(result, v, true);
@@ -3838,6 +4335,7 @@
3838
4335
  if (typeof handle.value !== 'boolean') {
3839
4336
  return envObject.setLastError(7 /* napi_status.napi_boolean_expected */);
3840
4337
  }
4338
+ result >>>= 0;
3841
4339
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
3842
4340
  var r = handle.value ? 1 : 0;
3843
4341
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -3861,6 +4359,7 @@
3861
4359
  if (typeof handle.value !== 'number') {
3862
4360
  return envObject.setLastError(6 /* napi_status.napi_number_expected */);
3863
4361
  }
4362
+ result >>>= 0;
3864
4363
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
3865
4364
  var r = handle.value;
3866
4365
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -3890,6 +4389,8 @@
3890
4389
  if (typeof numberValue !== 'bigint') {
3891
4390
  return envObject.setLastError(6 /* napi_status.napi_number_expected */);
3892
4391
  }
4392
+ lossless >>>= 0;
4393
+ result >>>= 0;
3893
4394
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3894
4395
  if ((numberValue >= (BigInt(-1) * (BigInt(1) << BigInt(63)))) && (numberValue < (BigInt(1) << BigInt(63)))) {
3895
4396
  HEAP_DATA_VIEW.setInt8(lossless, 1, true);
@@ -3932,6 +4433,8 @@
3932
4433
  if (typeof numberValue !== 'bigint') {
3933
4434
  return envObject.setLastError(6 /* napi_status.napi_number_expected */);
3934
4435
  }
4436
+ lossless >>>= 0;
4437
+ result >>>= 0;
3935
4438
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3936
4439
  if ((numberValue >= BigInt(0)) && (numberValue < (BigInt(1) << BigInt(64)))) {
3937
4440
  HEAP_DATA_VIEW.setInt8(lossless, 1, true);
@@ -3969,8 +4472,12 @@
3969
4472
  return envObject.setLastError(17 /* napi_status.napi_bigint_expected */);
3970
4473
  }
3971
4474
  var isMinus = handle.value < BigInt(0);
4475
+ sign_bit >>>= 0;
4476
+ words >>>= 0;
4477
+ word_count >>>= 0;
3972
4478
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3973
4479
  var word_count_int = HEAP_DATA_VIEW.getUint32(word_count, true);
4480
+ word_count_int >>>= 0;
3974
4481
  var wordCount = 0;
3975
4482
  var bigintValue = isMinus ? (handle.value * BigInt(-1)) : handle.value;
3976
4483
  while (bigintValue !== BigInt(0)) {
@@ -4024,6 +4531,7 @@
4024
4531
  if (!handle.isExternal()) {
4025
4532
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4026
4533
  }
4534
+ result >>>= 0;
4027
4535
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
4028
4536
  var p = handle.data();
4029
4537
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -4047,6 +4555,7 @@
4047
4555
  if (typeof handle.value !== 'number') {
4048
4556
  return envObject.setLastError(6 /* napi_status.napi_number_expected */);
4049
4557
  }
4558
+ result >>>= 0;
4050
4559
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
4051
4560
  var v = new Int32Array([handle.value])[0];
4052
4561
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -4071,6 +4580,7 @@
4071
4580
  return envObject.setLastError(6 /* napi_status.napi_number_expected */);
4072
4581
  }
4073
4582
  var numberValue = handle.value;
4583
+ result >>>= 0;
4074
4584
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4075
4585
  if (numberValue === Number.POSITIVE_INFINITY || numberValue === Number.NEGATIVE_INFINITY || isNaN(numberValue)) {
4076
4586
  HEAP_DATA_VIEW.setInt32(result, 0, true);
@@ -4100,6 +4610,9 @@
4100
4610
  envObject.checkGCAccess();
4101
4611
  if (!value)
4102
4612
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4613
+ result >>>= 0;
4614
+ buf >>>= 0;
4615
+ buf_size >>>= 0;
4103
4616
  buf_size = buf_size >>> 0;
4104
4617
  var handle = emnapiCtx.handleStore.get(value);
4105
4618
  if (typeof handle.value !== 'string') {
@@ -4142,6 +4655,9 @@
4142
4655
  envObject.checkGCAccess();
4143
4656
  if (!value)
4144
4657
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4658
+ result >>>= 0;
4659
+ buf >>>= 0;
4660
+ buf_size >>>= 0;
4145
4661
  buf_size = buf_size >>> 0;
4146
4662
  var handle = emnapiCtx.handleStore.get(value);
4147
4663
  if (typeof handle.value !== 'string') {
@@ -4178,6 +4694,9 @@
4178
4694
  envObject.checkGCAccess();
4179
4695
  if (!value)
4180
4696
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4697
+ result >>>= 0;
4698
+ buf >>>= 0;
4699
+ buf_size >>>= 0;
4181
4700
  buf_size = buf_size >>> 0;
4182
4701
  var handle = emnapiCtx.handleStore.get(value);
4183
4702
  if (typeof handle.value !== 'string') {
@@ -4218,6 +4737,7 @@
4218
4737
  if (typeof handle.value !== 'number') {
4219
4738
  return envObject.setLastError(6 /* napi_status.napi_number_expected */);
4220
4739
  }
4740
+ result >>>= 0;
4221
4741
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
4222
4742
  var v = new Uint32Array([handle.value])[0];
4223
4743
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -4258,6 +4778,7 @@
4258
4778
  envObject.checkGCAccess();
4259
4779
  if (!result)
4260
4780
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4781
+ result >>>= 0;
4261
4782
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
4262
4783
  var v = emnapiCtx.addToCurrentScope(value).id;
4263
4784
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -4275,6 +4796,7 @@
4275
4796
  envObject.checkGCAccess();
4276
4797
  if (!result)
4277
4798
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4799
+ result >>>= 0;
4278
4800
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
4279
4801
  var v = emnapiCtx.addToCurrentScope(value >>> 0).id;
4280
4802
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -4296,6 +4818,7 @@
4296
4818
  value = Number(low);
4297
4819
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
4298
4820
  var v1 = emnapiCtx.addToCurrentScope(value).id;
4821
+ high >>>= 0;
4299
4822
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4300
4823
  HEAP_DATA_VIEW.setUint32(high, v1, true);
4301
4824
  return envObject.clearLastError();
@@ -4311,6 +4834,7 @@
4311
4834
  envObject.checkGCAccess();
4312
4835
  if (!result)
4313
4836
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4837
+ result >>>= 0;
4314
4838
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
4315
4839
  var v = emnapiCtx.addToCurrentScope(value).id;
4316
4840
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -4411,6 +4935,7 @@
4411
4935
  value = low;
4412
4936
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
4413
4937
  var v1 = emnapiCtx.addToCurrentScope(value).id;
4938
+ high >>>= 0;
4414
4939
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4415
4940
  HEAP_DATA_VIEW.setUint32(high, v1, true);
4416
4941
  return envObject.clearLastError();
@@ -4433,6 +4958,7 @@
4433
4958
  value = low & ((BigInt(1) << BigInt(64)) - BigInt(1));
4434
4959
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
4435
4960
  var v1 = emnapiCtx.addToCurrentScope(value).id;
4961
+ high >>>= 0;
4436
4962
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4437
4963
  HEAP_DATA_VIEW.setUint32(high, v1, true);
4438
4964
  return envObject.clearLastError();
@@ -4459,6 +4985,8 @@
4459
4985
  }
4460
4986
  if (!result)
4461
4987
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4988
+ words >>>= 0;
4989
+ word_count >>>= 0;
4462
4990
  word_count = word_count >>> 0;
4463
4991
  if (word_count > 2147483647) {
4464
4992
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
@@ -4475,6 +5003,7 @@
4475
5003
  value += wordi << BigInt(64 * i);
4476
5004
  }
4477
5005
  value *= ((BigInt(sign_bit) % BigInt(2) === BigInt(0)) ? BigInt(1) : BigInt(-1));
5006
+ result >>>= 0;
4478
5007
  v = emnapiCtx.addToCurrentScope(value).id;
4479
5008
  HEAP_DATA_VIEW.setUint32(result, v, true);
4480
5009
  return envObject.getReturnStatus();
@@ -4503,6 +5032,7 @@
4503
5032
  node_api_create_property_key_utf8: node_api_create_property_key_utf8
4504
5033
  });
4505
5034
  function emnapiCreateFunction(envObject, utf8name, length, cb, data) {
5035
+ utf8name >>>= 0;
4506
5036
  var functionName = (!utf8name || !length) ? '' : (emnapiString.UTF8ToString(utf8name, length));
4507
5037
  var f;
4508
5038
  var napiCallback = (wasmTable.get(cb));
@@ -4645,6 +5175,7 @@
4645
5175
  if (!finalize_cb)
4646
5176
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4647
5177
  reference = emnapiCtx.createReferenceWithFinalizer(envObject, handle.id, 0, 1 /* ReferenceOwnership.kUserland */, finalize_cb, native_object, finalize_hint);
5178
+ result >>>= 0;
4648
5179
  referenceId = reference.id;
4649
5180
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4650
5181
  HEAP_DATA_VIEW.setUint32(result, referenceId, true);
@@ -4695,6 +5226,7 @@
4695
5226
  if (!ref)
4696
5227
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4697
5228
  if (result) {
5229
+ result >>>= 0;
4698
5230
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
4699
5231
  data = ref.data();
4700
5232
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -4738,12 +5270,15 @@
4738
5270
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4739
5271
  if (!constructor)
4740
5272
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5273
+ length >>>= 0;
5274
+ properties >>>= 0;
5275
+ property_count >>>= 0;
4741
5276
  property_count = property_count >>> 0;
4742
5277
  if (property_count > 0) {
4743
5278
  if (!properties)
4744
5279
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4745
5280
  }
4746
- if ((length < -1) || (length > 2147483647) || (!utf8name)) {
5281
+ if (!((length >= -1 && length <= 2147483647) || length === 4294967295) || (!utf8name)) {
4747
5282
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4748
5283
  }
4749
5284
  var fresult = emnapiCreateFunction(envObject, utf8name, length, constructor, callback_data);
@@ -4762,6 +5297,7 @@
4762
5297
  var setter = HEAP_DATA_VIEW.getUint32(propPtr + 16, true);
4763
5298
  var value = HEAP_DATA_VIEW.getUint32(propPtr + 20, true);
4764
5299
  attributes = HEAP_DATA_VIEW.getInt32(propPtr + 24, true);
5300
+ attributes >>>= 0;
4765
5301
  var data = HEAP_DATA_VIEW.getUint32(propPtr + 28, true);
4766
5302
  if (utf8Name) {
4767
5303
  propertyName = emnapiString.UTF8ToString(utf8Name, -1);
@@ -4784,6 +5320,7 @@
4784
5320
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
4785
5321
  var valueHandle = emnapiCtx.addToCurrentScope(F);
4786
5322
  valueHandleId = valueHandle.id;
5323
+ result >>>= 0;
4787
5324
  HEAP_DATA_VIEW.setUint32(result, valueHandleId, true);
4788
5325
  return envObject.getReturnStatus();
4789
5326
  }
@@ -4832,6 +5369,7 @@
4832
5369
  if (!(value.isObject() || value.isFunction())) {
4833
5370
  return envObject.setLastError(envObject.tryCatch.hasCaught() ? 10 /* napi_status.napi_pending_exception */ : 2 /* napi_status.napi_object_expected */);
4834
5371
  }
5372
+ type_tag >>>= 0;
4835
5373
  if (!type_tag) {
4836
5374
  return envObject.setLastError(envObject.tryCatch.hasCaught() ? 10 /* napi_status.napi_pending_exception */ : 1 /* napi_status.napi_invalid_arg */);
4837
5375
  }
@@ -4881,6 +5419,7 @@
4881
5419
  }
4882
5420
  var binding = envObject.getObjectBinding(value.value);
4883
5421
  if (binding.tag !== null) {
5422
+ type_tag >>>= 0;
4884
5423
  var tag = binding.tag;
4885
5424
  var typeTag = new Uint32Array(wasmMemory.buffer, type_tag, 4);
4886
5425
  ret = (tag[0] === typeTag[0] &&
@@ -4891,6 +5430,7 @@
4891
5430
  else {
4892
5431
  ret = false;
4893
5432
  }
5433
+ result >>>= 0;
4894
5434
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4895
5435
  HEAP_DATA_VIEW.setInt8(result, ret ? 1 : 0, true);
4896
5436
  return envObject.getReturnStatus();
@@ -4922,8 +5462,12 @@
4922
5462
  }
4923
5463
  var handle = handleResult.handle;
4924
5464
  var ownership = !result ? 0 /* ReferenceOwnership.kRuntime */ : 1 /* ReferenceOwnership.kUserland */;
5465
+ finalize_data >>>= 0;
5466
+ finalize_cb >>>= 0;
5467
+ finalize_hint >>>= 0;
4925
5468
  var reference = emnapiCtx.createReferenceWithFinalizer(envObject, handle.id, 0, ownership, finalize_cb, finalize_data, finalize_hint);
4926
5469
  if (result) {
5470
+ result >>>= 0;
4927
5471
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
4928
5472
  var referenceId = reference.id;
4929
5473
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -4971,6 +5515,9 @@
4971
5515
  try {
4972
5516
  if (!result)
4973
5517
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5518
+ byte_length >>>= 0;
5519
+ external_data >>>= 0;
5520
+ result >>>= 0;
4974
5521
  byte_length = byte_length >>> 0;
4975
5522
  if (!external_data) {
4976
5523
  byte_length = 0;
@@ -5090,7 +5637,7 @@
5090
5637
  var pointer = emnapiExternalMemory.getArrayBufferPointer(arrayBufferOrView, false).address;
5091
5638
  if (!pointer)
5092
5639
  throw new Error('Unknown ArrayBuffer address');
5093
- if (typeof len !== 'number' || len === -1) {
5640
+ if (typeof len !== 'number' || len === -1 || len === 4294967295) {
5094
5641
  len = arrayBufferOrView.byteLength - offset;
5095
5642
  }
5096
5643
  len = len >>> 0;
@@ -5112,7 +5659,7 @@
5112
5659
  var pointer = viewPointerInfo.address;
5113
5660
  if (!pointer)
5114
5661
  throw new Error('Unknown ArrayBuffer address');
5115
- if (typeof len !== 'number' || len === -1) {
5662
+ if (typeof len !== 'number' || len === -1 || len === 4294967295) {
5116
5663
  len = latestView.byteLength - offset;
5117
5664
  }
5118
5665
  len = len >>> 0;
@@ -5149,6 +5696,9 @@
5149
5696
  try {
5150
5697
  if (!arraybuffer_or_view)
5151
5698
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5699
+ arraybuffer_or_view >>>= 0;
5700
+ offset >>>= 0;
5701
+ len >>>= 0;
5152
5702
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5153
5703
  var handleId = HEAP_DATA_VIEW.getUint32(arraybuffer_or_view, true);
5154
5704
  var handle = envObject.ctx.handleStore.get(handleId);
@@ -5157,6 +5707,7 @@
5157
5707
  }
5158
5708
  var ret = $emnapiSyncMemory(Boolean(js_to_wasm), handle.value, offset, len);
5159
5709
  if (handle.value !== ret) {
5710
+ arraybuffer_or_view >>>= 0;
5160
5711
  v = envObject.ensureHandleId(ret);
5161
5712
  HEAP_DATA_VIEW.setUint32(arraybuffer_or_view, v, true);
5162
5713
  }
@@ -5215,13 +5766,16 @@
5215
5766
  p = info.address;
5216
5767
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5217
5768
  if (address) {
5769
+ address >>>= 0;
5218
5770
  HEAP_DATA_VIEW.setUint32(address, p, true);
5219
5771
  }
5220
5772
  if (ownership) {
5773
+ ownership >>>= 0;
5221
5774
  ownershipOut = info.ownership;
5222
5775
  HEAP_DATA_VIEW.setInt32(ownership, ownershipOut, true);
5223
5776
  }
5224
5777
  if (runtime_allocated) {
5778
+ runtime_allocated >>>= 0;
5225
5779
  runtimeAllocated = info.runtimeAllocated;
5226
5780
  HEAP_DATA_VIEW.setInt8(runtime_allocated, runtimeAllocated, true);
5227
5781
  }
@@ -5251,22 +5805,129 @@
5251
5805
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
5252
5806
  var versions = runtimeVersion.split('.')
5253
5807
  .map(function (n) { return Number(n); });
5808
+ version >>>= 0;
5254
5809
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5255
5810
  HEAP_DATA_VIEW.setUint32(version, versions[0], true);
5256
5811
  HEAP_DATA_VIEW.setUint32(version + 4, versions[1], true);
5257
5812
  HEAP_DATA_VIEW.setUint32(version + 8, versions[2], true);
5258
5813
  return envObject.clearLastError();
5259
5814
  }
5815
+ /**
5816
+ * Get the handle for an external SharedArrayBuffer.
5817
+ * Must be called on the emnapi main thread.
5818
+ * @__sig ippp
5819
+ */
5820
+ function emnapi_get_external_sharedarraybuffer_handle(env, sharedarraybuffer, handle) {
5821
+ if (!env)
5822
+ return 1 /* napi_status.napi_invalid_arg */;
5823
+ // @ts-expect-error
5824
+ var envObject = emnapiCtx.envStore.get(env);
5825
+ envObject.checkGCAccess();
5826
+ if (!envObject.tryCatch.isEmpty())
5827
+ return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
5828
+ if (!envObject.canCallIntoJs())
5829
+ return envObject.setLastError(envObject.moduleApiVersion >= 10 ? 23 /* napi_status.napi_cannot_run_js */ : 10 /* napi_status.napi_pending_exception */);
5830
+ envObject.clearLastError();
5831
+ try {
5832
+ if (!sharedarraybuffer)
5833
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5834
+ if (!handle)
5835
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5836
+ handle >>>= 0;
5837
+ var jsValue = emnapiCtx.handleStore.get(sharedarraybuffer).value;
5838
+ if (!emnapiExternalMemory.isSharedArrayBuffer(jsValue)) {
5839
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5840
+ }
5841
+ var metaPtr = emnapiExternalSAB.handleTable.get(jsValue);
5842
+ if (metaPtr === undefined) {
5843
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5844
+ }
5845
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5846
+ HEAP_DATA_VIEW.setUint32(handle, metaPtr, true);
5847
+ return envObject.getReturnStatus();
5848
+ }
5849
+ catch (err) {
5850
+ envObject.tryCatch.setError(err);
5851
+ return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
5852
+ }
5853
+ }
5854
+ /**
5855
+ * Acquire a reference to an external SharedArrayBuffer.
5856
+ * Can be called on any thread.
5857
+ * @__sig vp
5858
+ */
5859
+ function emnapi_acquire_external_sharedarraybuffer(handle) {
5860
+ handle >>>= 0;
5861
+ Atomics.add(new Int32Array(wasmMemory.buffer, handle, 1), 0, 1);
5862
+ }
5863
+ /**
5864
+ * Release a reference to an external SharedArrayBuffer.
5865
+ * Can be called on any thread.
5866
+ * @__sig vp
5867
+ */
5868
+ function emnapi_release_external_sharedarraybuffer(handle) {
5869
+ handle >>>= 0;
5870
+ emnapiExternalSAB.release(handle);
5871
+ }
5872
+ /**
5873
+ * Acquire a reference to an external SharedArrayBuffer on the current thread.
5874
+ * Can be called on any thread. Increments refcount and registers in
5875
+ * the current thread's FinalizationRegistry.
5876
+ * Exposed as Module.emnapiAcquireExternalSharedArrayBuffer (emscripten) or
5877
+ * napiModule.emnapi.acquireExternalSharedArrayBuffer (core).
5878
+ */
5879
+ function $emnapiAcquireExternalSharedArrayBuffer(handle, sab) {
5880
+ if (sab != null && !emnapiExternalMemory.isSharedArrayBuffer(sab)) {
5881
+ throw new TypeError('Expected a SharedArrayBuffer');
5882
+ }
5883
+ if (!emnapiExternalSAB.registry) {
5884
+ throw new Error('FinalizationRegistry is not supported in this environment');
5885
+ }
5886
+ handle >>>= 0;
5887
+ var meta = emnapiExternalSAB.readMeta(handle);
5888
+ // eslint-disable-next-line prefer-const
5889
+ var external_data = meta.external_data;
5890
+ external_data >>>= 0;
5891
+ if (sab == null) {
5892
+ sab = new SharedArrayBuffer(meta.byte_length);
5893
+ new Uint8Array(sab).set(new Uint8Array(wasmMemory.buffer, external_data, meta.byte_length));
5894
+ }
5895
+ else {
5896
+ if (emnapiExternalSAB.handleTable.has(sab)) {
5897
+ return sab;
5898
+ }
5899
+ }
5900
+ // Increment refcount atomically
5901
+ Atomics.add(new Int32Array(wasmMemory.buffer, handle, 1), 0, 1);
5902
+ // Register in emnapiExternalMemory.table for emnapi_sync_memory support
5903
+ if (!emnapiExternalMemory.table.has(sab)) {
5904
+ if (external_data) {
5905
+ emnapiExternalMemory.table.set(sab, {
5906
+ address: external_data,
5907
+ ownership: 1 /* ReferenceOwnership.kUserland */,
5908
+ runtimeAllocated: 0
5909
+ });
5910
+ }
5911
+ }
5912
+ // Register in handleTable and FinalizationRegistry for this thread
5913
+ emnapiExternalSAB.handleTable.set(sab, handle);
5914
+ emnapiExternalSAB.registry.register(sab, handle);
5915
+ return sab;
5916
+ }
5260
5917
  var emnapiMod = /*#__PURE__*/ Object.freeze({
5261
5918
  __proto__: null,
5919
+ $emnapiAcquireExternalSharedArrayBuffer: $emnapiAcquireExternalSharedArrayBuffer,
5262
5920
  $emnapiGetMemoryAddress: $emnapiGetMemoryAddress,
5263
5921
  $emnapiSyncMemory: $emnapiSyncMemory,
5922
+ emnapi_acquire_external_sharedarraybuffer: emnapi_acquire_external_sharedarraybuffer,
5264
5923
  emnapi_create_memory_view: emnapi_create_memory_view,
5924
+ emnapi_get_external_sharedarraybuffer_handle: emnapi_get_external_sharedarraybuffer_handle,
5265
5925
  emnapi_get_memory_address: emnapi_get_memory_address,
5266
5926
  emnapi_get_runtime_version: emnapi_get_runtime_version,
5267
5927
  emnapi_is_node_binding_available: emnapi_is_node_binding_available,
5268
5928
  emnapi_is_support_bigint: emnapi_is_support_bigint,
5269
5929
  emnapi_is_support_weakref: emnapi_is_support_weakref,
5930
+ emnapi_release_external_sharedarraybuffer: emnapi_release_external_sharedarraybuffer,
5270
5931
  emnapi_sync_memory: emnapi_sync_memory
5271
5932
  });
5272
5933
  /**
@@ -5280,6 +5941,7 @@
5280
5941
  envObject.checkGCAccess();
5281
5942
  if (!result)
5282
5943
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5944
+ result >>>= 0;
5283
5945
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
5284
5946
  var value = emnapiCtx.addToCurrentScope([]).id;
5285
5947
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -5297,6 +5959,8 @@
5297
5959
  envObject.checkGCAccess();
5298
5960
  if (!result)
5299
5961
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5962
+ length >>>= 0;
5963
+ result >>>= 0;
5300
5964
  length = length >>> 0;
5301
5965
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
5302
5966
  var value = emnapiCtx.addToCurrentScope(new Array(length)).id;
@@ -5305,9 +5969,11 @@
5305
5969
  return envObject.clearLastError();
5306
5970
  }
5307
5971
  function emnapiCreateArrayBuffer(byte_length, data, shared) {
5972
+ byte_length >>>= 0;
5308
5973
  byte_length = byte_length >>> 0;
5309
5974
  var arrayBuffer = shared ? new SharedArrayBuffer(byte_length) : new ArrayBuffer(byte_length);
5310
5975
  if (data) {
5976
+ data >>>= 0;
5311
5977
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
5312
5978
  var p = emnapiExternalMemory.getArrayBufferPointer(arrayBuffer, true).address;
5313
5979
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -5334,6 +6000,7 @@
5334
6000
  try {
5335
6001
  if (!result)
5336
6002
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6003
+ result >>>= 0;
5337
6004
  var arrayBuffer = emnapiCreateArrayBuffer(byte_length, data, false);
5338
6005
  value = emnapiCtx.addToCurrentScope(arrayBuffer).id;
5339
6006
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -5364,6 +6031,7 @@
5364
6031
  try {
5365
6032
  if (!result)
5366
6033
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6034
+ result >>>= 0;
5367
6035
  var arrayBuffer = emnapiCreateArrayBuffer(byte_length, data, true);
5368
6036
  value = emnapiCtx.addToCurrentScope(arrayBuffer).id;
5369
6037
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -5394,6 +6062,7 @@
5394
6062
  try {
5395
6063
  if (!result)
5396
6064
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6065
+ result >>>= 0;
5397
6066
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
5398
6067
  value = emnapiCtx.addToCurrentScope(new Date(time)).id;
5399
6068
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -5431,6 +6100,7 @@
5431
6100
  if (finalize_cb) {
5432
6101
  emnapiCtx.createReferenceWithFinalizer(envObject, externalHandle.id, 0, 0 /* ReferenceOwnership.kRuntime */, finalize_cb, data, finalize_hint);
5433
6102
  }
6103
+ result >>>= 0;
5434
6104
  value = externalHandle.id;
5435
6105
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5436
6106
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -5460,6 +6130,9 @@
5460
6130
  try {
5461
6131
  if (!result)
5462
6132
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6133
+ byte_length >>>= 0;
6134
+ external_data >>>= 0;
6135
+ result >>>= 0;
5463
6136
  byte_length = byte_length >>> 0;
5464
6137
  if (!external_data) {
5465
6138
  byte_length = 0;
@@ -5510,6 +6183,65 @@
5510
6183
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
5511
6184
  }
5512
6185
  }
6186
+ /**
6187
+ * @__sig ipppppp
6188
+ */
6189
+ function node_api_create_external_sharedarraybuffer(env, external_data, byte_length, finalize_cb, finalize_hint, result) {
6190
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
6191
+ var value;
6192
+ if (!env)
6193
+ return 1 /* napi_status.napi_invalid_arg */;
6194
+ // @ts-expect-error
6195
+ var envObject = emnapiCtx.envStore.get(env);
6196
+ envObject.checkGCAccess();
6197
+ if (!envObject.tryCatch.isEmpty())
6198
+ return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
6199
+ if (!envObject.canCallIntoJs())
6200
+ return envObject.setLastError(envObject.moduleApiVersion >= 10 ? 23 /* napi_status.napi_cannot_run_js */ : 10 /* napi_status.napi_pending_exception */);
6201
+ envObject.clearLastError();
6202
+ try {
6203
+ if (!result)
6204
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6205
+ byte_length >>>= 0;
6206
+ external_data >>>= 0;
6207
+ result >>>= 0;
6208
+ byte_length = byte_length >>> 0;
6209
+ if (!external_data) {
6210
+ byte_length = 0;
6211
+ }
6212
+ if ((external_data + byte_length) > wasmMemory.buffer.byteLength) {
6213
+ throw new RangeError('Memory out of range');
6214
+ }
6215
+ if (!emnapiExternalSAB.registry && finalize_cb) {
6216
+ throw emnapiCtx.createNotSupportWeakRefError('node_api_create_external_sharedarraybuffer', 'Parameter "finalize_cb" must be 0(NULL)');
6217
+ }
6218
+ var sharedArrayBuffer = new SharedArrayBuffer(byte_length);
6219
+ if (byte_length !== 0) {
6220
+ var u8arr = new Uint8Array(sharedArrayBuffer);
6221
+ u8arr.set(new Uint8Array(wasmMemory.buffer).subarray(external_data, external_data + byte_length));
6222
+ emnapiExternalMemory.table.set(sharedArrayBuffer, {
6223
+ address: external_data,
6224
+ ownership: 1 /* ReferenceOwnership.kUserland */,
6225
+ runtimeAllocated: 0
6226
+ });
6227
+ }
6228
+ value = emnapiCtx.addToCurrentScope(sharedArrayBuffer).id;
6229
+ if (finalize_cb) {
6230
+ finalize_cb >>>= 0;
6231
+ finalize_hint >>>= 0;
6232
+ var metaPtr = emnapiExternalSAB.allocMeta(external_data, byte_length, finalize_cb, external_data, finalize_hint);
6233
+ emnapiExternalSAB.handleTable.set(sharedArrayBuffer, metaPtr);
6234
+ emnapiExternalSAB.registry.register(sharedArrayBuffer, metaPtr);
6235
+ }
6236
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6237
+ HEAP_DATA_VIEW.setUint32(result, value, true);
6238
+ return envObject.getReturnStatus();
6239
+ }
6240
+ catch (err) {
6241
+ envObject.tryCatch.setError(err);
6242
+ return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
6243
+ }
6244
+ }
5513
6245
  /**
5514
6246
  * @__sig ipp
5515
6247
  */
@@ -5521,6 +6253,7 @@
5521
6253
  envObject.checkGCAccess();
5522
6254
  if (!result)
5523
6255
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6256
+ result >>>= 0;
5524
6257
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
5525
6258
  var value = emnapiCtx.addToCurrentScope({}).id;
5526
6259
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -5530,7 +6263,7 @@
5530
6263
  /**
5531
6264
  * @__sig ipppppp
5532
6265
  */
5533
- function napi_create_object_with_properties(env, prototype_or_null, property_names, property_values, property_count, result) {
6266
+ function node_api_create_object_with_properties(env, prototype_or_null, property_names, property_values, property_count, result) {
5534
6267
  if (!env)
5535
6268
  return 1 /* napi_status.napi_invalid_arg */;
5536
6269
  // @ts-expect-error
@@ -5538,6 +6271,7 @@
5538
6271
  envObject.checkGCAccess();
5539
6272
  if (!result)
5540
6273
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6274
+ property_count >>>= 0;
5541
6275
  property_count = property_count >>> 0;
5542
6276
  if (property_count > 0) {
5543
6277
  if (!property_names)
@@ -5549,6 +6283,8 @@
5549
6283
  ? emnapiCtx.handleStore.get(prototype_or_null).value
5550
6284
  : null;
5551
6285
  var properties = {};
6286
+ property_names >>>= 0;
6287
+ property_values >>>= 0;
5552
6288
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5553
6289
  for (var i = 0; i < property_count; i++) {
5554
6290
  var name_value = emnapiCtx.handleStore.get(HEAP_DATA_VIEW.getUint32(property_names + i * 4, true)).value;
@@ -5570,6 +6306,7 @@
5570
6306
  }
5571
6307
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
5572
6308
  var value = emnapiCtx.addToCurrentScope(obj).id;
6309
+ result >>>= 0;
5573
6310
  HEAP_DATA_VIEW.setUint32(result, value, true);
5574
6311
  return envObject.clearLastError();
5575
6312
  }
@@ -5584,6 +6321,7 @@
5584
6321
  envObject.checkGCAccess();
5585
6322
  if (!result)
5586
6323
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6324
+ result >>>= 0;
5587
6325
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5588
6326
  if (!description) {
5589
6327
  // eslint-disable-next-line symbol-description, @typescript-eslint/no-unused-vars
@@ -5624,10 +6362,9 @@
5624
6362
  if (!result)
5625
6363
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5626
6364
  var handle = emnapiCtx.handleStore.get(arraybuffer);
5627
- if (!handle.isArrayBuffer()) {
5628
- return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5629
- }
5630
6365
  var buffer = handle.value;
6366
+ byte_offset >>>= 0;
6367
+ length >>>= 0;
5631
6368
  var createTypedArray = function (envObject, Type, size_of_element, buffer, byte_offset, length) {
5632
6369
  var _a;
5633
6370
  byte_offset = byte_offset >>> 0;
@@ -5658,42 +6395,48 @@
5658
6395
  });
5659
6396
  }
5660
6397
  }
6398
+ result >>>= 0;
5661
6399
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
5662
6400
  value = emnapiCtx.addToCurrentScope(out).id;
5663
6401
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5664
6402
  HEAP_DATA_VIEW.setUint32(result, value, true);
5665
6403
  return envObject.getReturnStatus();
5666
6404
  };
5667
- switch (type) {
5668
- case 0 /* napi_typedarray_type.napi_int8_array */:
5669
- return createTypedArray(envObject, Int8Array, 1, buffer, byte_offset, length);
5670
- case 1 /* napi_typedarray_type.napi_uint8_array */:
5671
- return createTypedArray(envObject, Uint8Array, 1, buffer, byte_offset, length);
5672
- case 2 /* napi_typedarray_type.napi_uint8_clamped_array */:
5673
- return createTypedArray(envObject, Uint8ClampedArray, 1, buffer, byte_offset, length);
5674
- case 3 /* napi_typedarray_type.napi_int16_array */:
5675
- return createTypedArray(envObject, Int16Array, 2, buffer, byte_offset, length);
5676
- case 4 /* napi_typedarray_type.napi_uint16_array */:
5677
- return createTypedArray(envObject, Uint16Array, 2, buffer, byte_offset, length);
5678
- case 5 /* napi_typedarray_type.napi_int32_array */:
5679
- return createTypedArray(envObject, Int32Array, 4, buffer, byte_offset, length);
5680
- case 6 /* napi_typedarray_type.napi_uint32_array */:
5681
- return createTypedArray(envObject, Uint32Array, 4, buffer, byte_offset, length);
5682
- case 7 /* napi_typedarray_type.napi_float32_array */:
5683
- return createTypedArray(envObject, Float32Array, 4, buffer, byte_offset, length);
5684
- case 8 /* napi_typedarray_type.napi_float64_array */:
5685
- return createTypedArray(envObject, Float64Array, 8, buffer, byte_offset, length);
5686
- case 9 /* napi_typedarray_type.napi_bigint64_array */:
5687
- return createTypedArray(envObject, BigInt64Array, 8, buffer, byte_offset, length);
5688
- case 10 /* napi_typedarray_type.napi_biguint64_array */:
5689
- return createTypedArray(envObject, BigUint64Array, 8, buffer, byte_offset, length);
5690
- case 11 /* napi_typedarray_type.napi_float16_array */:
5691
- if (typeof Float16Array !== 'function') {
6405
+ if (buffer instanceof ArrayBuffer || emnapiExternalMemory.isSharedArrayBuffer(buffer)) {
6406
+ switch (type) {
6407
+ case 0 /* napi_typedarray_type.napi_int8_array */:
6408
+ return createTypedArray(envObject, Int8Array, 1, buffer, byte_offset, length);
6409
+ case 1 /* napi_typedarray_type.napi_uint8_array */:
6410
+ return createTypedArray(envObject, Uint8Array, 1, buffer, byte_offset, length);
6411
+ case 2 /* napi_typedarray_type.napi_uint8_clamped_array */:
6412
+ return createTypedArray(envObject, Uint8ClampedArray, 1, buffer, byte_offset, length);
6413
+ case 3 /* napi_typedarray_type.napi_int16_array */:
6414
+ return createTypedArray(envObject, Int16Array, 2, buffer, byte_offset, length);
6415
+ case 4 /* napi_typedarray_type.napi_uint16_array */:
6416
+ return createTypedArray(envObject, Uint16Array, 2, buffer, byte_offset, length);
6417
+ case 5 /* napi_typedarray_type.napi_int32_array */:
6418
+ return createTypedArray(envObject, Int32Array, 4, buffer, byte_offset, length);
6419
+ case 6 /* napi_typedarray_type.napi_uint32_array */:
6420
+ return createTypedArray(envObject, Uint32Array, 4, buffer, byte_offset, length);
6421
+ case 7 /* napi_typedarray_type.napi_float32_array */:
6422
+ return createTypedArray(envObject, Float32Array, 4, buffer, byte_offset, length);
6423
+ case 8 /* napi_typedarray_type.napi_float64_array */:
6424
+ return createTypedArray(envObject, Float64Array, 8, buffer, byte_offset, length);
6425
+ case 9 /* napi_typedarray_type.napi_bigint64_array */:
6426
+ return createTypedArray(envObject, BigInt64Array, 8, buffer, byte_offset, length);
6427
+ case 10 /* napi_typedarray_type.napi_biguint64_array */:
6428
+ return createTypedArray(envObject, BigUint64Array, 8, buffer, byte_offset, length);
6429
+ case 11 /* napi_typedarray_type.napi_float16_array */:
6430
+ if (typeof Float16Array !== 'function') {
6431
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6432
+ }
6433
+ return createTypedArray(envObject, Float16Array, 2, buffer, byte_offset, length);
6434
+ default:
5692
6435
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5693
- }
5694
- return createTypedArray(envObject, Float16Array, 2, buffer, byte_offset, length);
5695
- default:
5696
- return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6436
+ }
6437
+ }
6438
+ else {
6439
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5697
6440
  }
5698
6441
  }
5699
6442
  catch (err) {
@@ -5726,7 +6469,9 @@
5726
6469
  if (!Buffer) {
5727
6470
  throw emnapiCtx.createNotSupportBufferError('napi_create_buffer', '');
5728
6471
  }
6472
+ result >>>= 0;
5729
6473
  var buffer = void 0;
6474
+ size >>>= 0;
5730
6475
  size = size >>> 0;
5731
6476
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5732
6477
  if (!data || (size === 0)) {
@@ -5738,6 +6483,7 @@
5738
6483
  pointer = _malloc(size);
5739
6484
  if (!pointer)
5740
6485
  throw new Error('Out of memory');
6486
+ pointer >>>= 0;
5741
6487
  new Uint8Array(wasmMemory.buffer).subarray(pointer, pointer + size).fill(0);
5742
6488
  var buffer_1 = Buffer.from(wasmMemory.buffer, pointer, size);
5743
6489
  var viewDescriptor = {
@@ -5751,6 +6497,7 @@
5751
6497
  (_a = emnapiExternalMemory.registry) === null || _a === void 0 ? void 0 : _a.register(viewDescriptor, pointer);
5752
6498
  value = emnapiCtx.addToCurrentScope(buffer_1).id;
5753
6499
  HEAP_DATA_VIEW.setUint32(result, value, true);
6500
+ data >>>= 0;
5754
6501
  HEAP_DATA_VIEW.setUint32(data, pointer, true);
5755
6502
  }
5756
6503
  return envObject.getReturnStatus();
@@ -5785,8 +6532,11 @@
5785
6532
  }
5786
6533
  var arrayBuffer = emnapiCreateArrayBuffer(length, result_data, false);
5787
6534
  var buffer = Buffer.from(arrayBuffer);
6535
+ data >>>= 0;
6536
+ length >>>= 0;
5788
6537
  buffer.set(new Uint8Array(wasmMemory.buffer).subarray(data, data + length));
5789
6538
  value = emnapiCtx.addToCurrentScope(buffer).id;
6539
+ result >>>= 0;
5790
6540
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5791
6541
  HEAP_DATA_VIEW.setUint32(result, value, true);
5792
6542
  return envObject.getReturnStatus();
@@ -5823,6 +6573,8 @@
5823
6573
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5824
6574
  if (!result)
5825
6575
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6576
+ byte_offset >>>= 0;
6577
+ byte_length >>>= 0;
5826
6578
  byte_offset = byte_offset >>> 0;
5827
6579
  byte_length = byte_length >>> 0;
5828
6580
  var handle = emnapiCtx.handleStore.get(arraybuffer);
@@ -5851,6 +6603,7 @@
5851
6603
  });
5852
6604
  }
5853
6605
  }
6606
+ result >>>= 0;
5854
6607
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
5855
6608
  value = emnapiCtx.addToCurrentScope(out).id;
5856
6609
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -5881,6 +6634,8 @@
5881
6634
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5882
6635
  if (!result)
5883
6636
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6637
+ byte_length >>>= 0;
6638
+ byte_offset >>>= 0;
5884
6639
  byte_length = byte_length >>> 0;
5885
6640
  byte_offset = byte_offset >>> 0;
5886
6641
  var value = emnapiCtx.handleStore.get(arraybuffer).value;
@@ -5902,6 +6657,7 @@
5902
6657
  });
5903
6658
  }
5904
6659
  }
6660
+ result >>>= 0;
5905
6661
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
5906
6662
  var v = emnapiCtx.addToCurrentScope(dataview).id;
5907
6663
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -5931,7 +6687,10 @@
5931
6687
  envObject.checkGCAccess();
5932
6688
  if (!result)
5933
6689
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5934
- var autoLength = length === -1;
6690
+ length >>>= 0;
6691
+ utf8description >>>= 0;
6692
+ result >>>= 0;
6693
+ var autoLength = length === -1 || length === 4294967295;
5935
6694
  var sizelength = length >>> 0;
5936
6695
  if (length !== 0) {
5937
6696
  if (!utf8description)
@@ -5960,10 +6719,11 @@
5960
6719
  napi_create_external_arraybuffer: napi_create_external_arraybuffer,
5961
6720
  napi_create_external_buffer: napi_create_external_buffer,
5962
6721
  napi_create_object: napi_create_object,
5963
- napi_create_object_with_properties: napi_create_object_with_properties,
5964
6722
  napi_create_symbol: napi_create_symbol,
5965
6723
  napi_create_typedarray: napi_create_typedarray,
5966
6724
  node_api_create_buffer_from_arraybuffer: node_api_create_buffer_from_arraybuffer,
6725
+ node_api_create_external_sharedarraybuffer: node_api_create_external_sharedarraybuffer,
6726
+ node_api_create_object_with_properties: node_api_create_object_with_properties,
5967
6727
  node_api_create_sharedarraybuffer: node_api_create_sharedarraybuffer,
5968
6728
  node_api_symbol_for: node_api_symbol_for
5969
6729
  });
@@ -5976,6 +6736,7 @@
5976
6736
  envObject.checkGCAccess();
5977
6737
  if (!result)
5978
6738
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6739
+ result >>>= 0;
5979
6740
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
5980
6741
  var v = value === 0 ? 3 /* GlobalHandle.FALSE */ : 4 /* GlobalHandle.TRUE */;
5981
6742
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -5991,6 +6752,7 @@
5991
6752
  envObject.checkGCAccess();
5992
6753
  if (!result)
5993
6754
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6755
+ result >>>= 0;
5994
6756
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
5995
6757
  var value = 5 /* GlobalHandle.GLOBAL */;
5996
6758
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -6006,6 +6768,7 @@
6006
6768
  envObject.checkGCAccess();
6007
6769
  if (!result)
6008
6770
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6771
+ result >>>= 0;
6009
6772
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
6010
6773
  var value = 2 /* GlobalHandle.NULL */;
6011
6774
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -6021,6 +6784,7 @@
6021
6784
  envObject.checkGCAccess();
6022
6785
  if (!result)
6023
6786
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6787
+ result >>>= 0;
6024
6788
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
6025
6789
  var value = 1 /* GlobalHandle.UNDEFINED */;
6026
6790
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -6039,6 +6803,9 @@
6039
6803
  if (!env)
6040
6804
  return 1 /* napi_status.napi_invalid_arg */;
6041
6805
  var envObject = emnapiCtx.envStore.get(env);
6806
+ data >>>= 0;
6807
+ finalize_cb >>>= 0;
6808
+ finalize_hint >>>= 0;
6042
6809
  envObject.setInstanceData(data, finalize_cb, finalize_hint);
6043
6810
  return envObject.clearLastError();
6044
6811
  }
@@ -6049,6 +6816,7 @@
6049
6816
  var envObject = emnapiCtx.envStore.get(env);
6050
6817
  if (!data)
6051
6818
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6819
+ data >>>= 0;
6052
6820
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
6053
6821
  var value = envObject.getInstanceData();
6054
6822
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -6062,6 +6830,9 @@
6062
6830
  });
6063
6831
  /** @__sig vpppp */
6064
6832
  function _emnapi_get_last_error_info(env, error_code, engine_error_code, engine_reserved) {
6833
+ error_code >>>= 0;
6834
+ engine_error_code >>>= 0;
6835
+ engine_reserved >>>= 0;
6065
6836
  var envObject = emnapiCtx.envStore.get(env);
6066
6837
  var lastError = envObject.lastError;
6067
6838
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -6070,6 +6841,7 @@
6070
6841
  var engineErrorCode = lastError.engineErrorCode >>> 0;
6071
6842
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
6072
6843
  var engineReserved = lastError.engineReserved;
6844
+ engineReserved >>>= 0;
6073
6845
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6074
6846
  HEAP_DATA_VIEW.setInt32(error_code, errorCode, true);
6075
6847
  HEAP_DATA_VIEW.setUint32(engine_error_code, engineErrorCode, true);
@@ -6113,6 +6885,8 @@
6113
6885
  try {
6114
6886
  if (!msg)
6115
6887
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6888
+ code >>>= 0;
6889
+ msg >>>= 0;
6116
6890
  var error = new Error(emnapiString.UTF8ToString(msg, -1));
6117
6891
  if (code)
6118
6892
  error.code = emnapiString.UTF8ToString(code, -1);
@@ -6139,6 +6913,8 @@
6139
6913
  try {
6140
6914
  if (!msg)
6141
6915
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6916
+ code >>>= 0;
6917
+ msg >>>= 0;
6142
6918
  var error = new TypeError(emnapiString.UTF8ToString(msg, -1));
6143
6919
  if (code)
6144
6920
  error.code = emnapiString.UTF8ToString(code, -1);
@@ -6165,6 +6941,8 @@
6165
6941
  try {
6166
6942
  if (!msg)
6167
6943
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6944
+ code >>>= 0;
6945
+ msg >>>= 0;
6168
6946
  var error = new RangeError(emnapiString.UTF8ToString(msg, -1));
6169
6947
  if (code)
6170
6948
  error.code = emnapiString.UTF8ToString(code, -1);
@@ -6191,6 +6969,8 @@
6191
6969
  try {
6192
6970
  if (!msg)
6193
6971
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6972
+ code >>>= 0;
6973
+ msg >>>= 0;
6194
6974
  var error = new SyntaxError(emnapiString.UTF8ToString(msg, -1));
6195
6975
  if (code)
6196
6976
  error.code = emnapiString.UTF8ToString(code, -1);
@@ -6213,6 +6993,7 @@
6213
6993
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6214
6994
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
6215
6995
  var r = envObject.tryCatch.hasCaught();
6996
+ result >>>= 0;
6216
6997
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6217
6998
  HEAP_DATA_VIEW.setInt8(result, r ? 1 : 0, true);
6218
6999
  return envObject.clearLastError();
@@ -6240,6 +7021,7 @@
6240
7021
  }
6241
7022
  error.code = codeValue;
6242
7023
  }
7024
+ result >>>= 0;
6243
7025
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
6244
7026
  var value = emnapiCtx.addToCurrentScope(error).id;
6245
7027
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -6269,6 +7051,7 @@
6269
7051
  }
6270
7052
  error.code = codeValue;
6271
7053
  }
7054
+ result >>>= 0;
6272
7055
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
6273
7056
  var value = emnapiCtx.addToCurrentScope(error).id;
6274
7057
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -6298,6 +7081,7 @@
6298
7081
  }
6299
7082
  error.code = codeValue;
6300
7083
  }
7084
+ result >>>= 0;
6301
7085
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
6302
7086
  var value = emnapiCtx.addToCurrentScope(error).id;
6303
7087
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -6327,6 +7111,7 @@
6327
7111
  }
6328
7112
  error.code = codeValue;
6329
7113
  }
7114
+ result >>>= 0;
6330
7115
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
6331
7116
  var value = emnapiCtx.addToCurrentScope(error).id;
6332
7117
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -6342,6 +7127,7 @@
6342
7127
  envObject.checkGCAccess();
6343
7128
  if (!result)
6344
7129
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
7130
+ result >>>= 0;
6345
7131
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6346
7132
  if (!envObject.tryCatch.hasCaught()) {
6347
7133
  HEAP_DATA_VIEW.setUint32(result, 1, true); // ID_UNDEFINED
@@ -6358,6 +7144,10 @@
6358
7144
  }
6359
7145
  /** @__sig vpppp */
6360
7146
  function napi_fatal_error(location, location_len, message, message_len) {
7147
+ location >>>= 0;
7148
+ location_len >>>= 0;
7149
+ message >>>= 0;
7150
+ message_len >>>= 0;
6361
7151
  var locationStr = emnapiString.UTF8ToString(location, location_len);
6362
7152
  var messageStr = emnapiString.UTF8ToString(message, message_len);
6363
7153
  if (emnapiNodeBinding) {
@@ -6414,9 +7204,23 @@
6414
7204
  node_api_throw_syntax_error: node_api_throw_syntax_error
6415
7205
  });
6416
7206
  /** @__sig ipppppp */
6417
- function napi_create_function(env, utf8name, length, cb, data, result) {
7207
+ function _emnapi_create_function(env, utf8name, length, cb, data, result) {
7208
+ length >>>= 0;
7209
+ var envObject = emnapiCtx.envStore.get(env);
7210
+ var fresult = emnapiCreateFunction(envObject, utf8name, length, cb, data);
7211
+ if (fresult.status !== 0 /* napi_status.napi_ok */)
7212
+ return envObject.setLastError(fresult.status);
7213
+ var f = fresult.f;
7214
+ var valueHandle = emnapiCtx.addToCurrentScope(f);
7215
+ result >>>= 0;
6418
7216
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
6419
- var value;
7217
+ var value = valueHandle.id;
7218
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
7219
+ HEAP_DATA_VIEW.setUint32(result, value, true);
7220
+ return envObject.getReturnStatus();
7221
+ }
7222
+ /** @__sig ipppppp */
7223
+ function napi_create_function(env, utf8name, length, cb, data, result) {
6420
7224
  if (!env)
6421
7225
  return 1 /* napi_status.napi_invalid_arg */;
6422
7226
  // @ts-expect-error
@@ -6432,15 +7236,7 @@
6432
7236
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6433
7237
  if (!cb)
6434
7238
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6435
- var fresult = emnapiCreateFunction(envObject, utf8name, length, cb, data);
6436
- if (fresult.status !== 0 /* napi_status.napi_ok */)
6437
- return envObject.setLastError(fresult.status);
6438
- var f = fresult.f;
6439
- var valueHandle = emnapiCtx.addToCurrentScope(f);
6440
- value = valueHandle.id;
6441
- var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6442
- HEAP_DATA_VIEW.setUint32(result, value, true);
6443
- return envObject.getReturnStatus();
7239
+ return _emnapi_create_function(env, utf8name, length, cb, data, result);
6444
7240
  }
6445
7241
  catch (err) {
6446
7242
  envObject.tryCatch.setError(err);
@@ -6455,11 +7251,14 @@
6455
7251
  if (!cbinfo)
6456
7252
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6457
7253
  var cbinfoValue = emnapiCtx.scopeStore.get(cbinfo).callbackInfo;
7254
+ argc >>>= 0;
7255
+ argv >>>= 0;
6458
7256
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6459
7257
  if (argv) {
6460
7258
  if (!argc)
6461
7259
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6462
7260
  var argcValue = HEAP_DATA_VIEW.getUint32(argc, true);
7261
+ argcValue >>>= 0;
6463
7262
  var len = cbinfoValue.args.length;
6464
7263
  var arrlen = argcValue < len ? argcValue : len;
6465
7264
  var i = 0;
@@ -6478,11 +7277,13 @@
6478
7277
  HEAP_DATA_VIEW.setUint32(argc, cbinfoValue.args.length, true);
6479
7278
  }
6480
7279
  if (this_arg) {
7280
+ this_arg >>>= 0;
6481
7281
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
6482
7282
  var v = envObject.ensureHandleId(cbinfoValue.thiz);
6483
7283
  HEAP_DATA_VIEW.setUint32(this_arg, v, true);
6484
7284
  }
6485
7285
  if (data) {
7286
+ data >>>= 0;
6486
7287
  HEAP_DATA_VIEW.setUint32(data, cbinfoValue.data, true);
6487
7288
  }
6488
7289
  return envObject.clearLastError();
@@ -6505,6 +7306,9 @@
6505
7306
  try {
6506
7307
  if (!recv)
6507
7308
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
7309
+ argc >>>= 0;
7310
+ argv >>>= 0;
7311
+ result >>>= 0;
6508
7312
  argc = argc >>> 0;
6509
7313
  if (argc > 0) {
6510
7314
  if (!argv)
@@ -6552,6 +7356,9 @@
6552
7356
  try {
6553
7357
  if (!constructor)
6554
7358
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
7359
+ argc >>>= 0;
7360
+ argv >>>= 0;
7361
+ result >>>= 0;
6555
7362
  argc = argc >>> 0;
6556
7363
  if (argc > 0) {
6557
7364
  if (!argv)
@@ -6604,8 +7411,10 @@
6604
7411
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6605
7412
  if (!result)
6606
7413
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
7414
+ result >>>= 0;
6607
7415
  var cbinfoValue = emnapiCtx.scopeStore.get(cbinfo).callbackInfo;
6608
7416
  var thiz = cbinfoValue.thiz, fn = cbinfoValue.fn;
7417
+ // eslint-disable-next-line @typescript-eslint/prefer-optional-chain, @typescript-eslint/no-unused-vars
6609
7418
  var value = thiz == null || thiz.constructor == null
6610
7419
  ? 0
6611
7420
  : thiz instanceof fn
@@ -6617,6 +7426,7 @@
6617
7426
  }
6618
7427
  var functionMod = /*#__PURE__*/ Object.freeze({
6619
7428
  __proto__: null,
7429
+ _emnapi_create_function: _emnapi_create_function,
6620
7430
  napi_call_function: napi_call_function,
6621
7431
  napi_create_function: napi_create_function,
6622
7432
  napi_get_cb_info: napi_get_cb_info,
@@ -6634,6 +7444,7 @@
6634
7444
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6635
7445
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
6636
7446
  var scope = emnapiCtx.openScope(envObject);
7447
+ result >>>= 0;
6637
7448
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6638
7449
  HEAP_DATA_VIEW.setUint32(result, scope.id, true);
6639
7450
  return envObject.clearLastError();
@@ -6664,6 +7475,7 @@
6664
7475
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6665
7476
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
6666
7477
  var scope = emnapiCtx.openScope(envObject);
7478
+ result >>>= 0;
6667
7479
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6668
7480
  HEAP_DATA_VIEW.setUint32(result, scope.id, true);
6669
7481
  return envObject.clearLastError();
@@ -6698,6 +7510,8 @@
6698
7510
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6699
7511
  var scopeObject = emnapiCtx.scopeStore.get(scope);
6700
7512
  if (!scopeObject.escapeCalled()) {
7513
+ escapee >>>= 0;
7514
+ result >>>= 0;
6701
7515
  var newHandle = scopeObject.escape(escapee);
6702
7516
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
6703
7517
  var value = newHandle ? newHandle.id : 0;
@@ -6726,6 +7540,7 @@
6726
7540
  }
6727
7541
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
6728
7542
  var ref = emnapiCtx.createReference(envObject, handle.id, initial_refcount >>> 0, 1 /* ReferenceOwnership.kUserland */);
7543
+ result >>>= 0;
6729
7544
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6730
7545
  HEAP_DATA_VIEW.setUint32(result, ref.id, true);
6731
7546
  return envObject.clearLastError();
@@ -6752,6 +7567,7 @@
6752
7567
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
6753
7568
  var count = emnapiCtx.refStore.get(ref).ref();
6754
7569
  if (result) {
7570
+ result >>>= 0;
6755
7571
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6756
7572
  HEAP_DATA_VIEW.setUint32(result, count, true);
6757
7573
  }
@@ -6774,6 +7590,7 @@
6774
7590
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
6775
7591
  var count = reference.unref();
6776
7592
  if (result) {
7593
+ result >>>= 0;
6777
7594
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6778
7595
  HEAP_DATA_VIEW.setUint32(result, count, true);
6779
7596
  }
@@ -6793,6 +7610,7 @@
6793
7610
  var reference = emnapiCtx.refStore.get(ref);
6794
7611
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
6795
7612
  var handleId = reference.get(envObject);
7613
+ result >>>= 0;
6796
7614
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6797
7615
  HEAP_DATA_VIEW.setUint32(result, handleId, true);
6798
7616
  return envObject.clearLastError();
@@ -6804,6 +7622,8 @@
6804
7622
  var envObject = emnapiCtx.envStore.get(env);
6805
7623
  if (!fun)
6806
7624
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
7625
+ fun >>>= 0;
7626
+ arg >>>= 0;
6807
7627
  emnapiCtx.addCleanupHook(envObject, fun, arg);
6808
7628
  return 0 /* napi_status.napi_ok */;
6809
7629
  }
@@ -6814,6 +7634,8 @@
6814
7634
  var envObject = emnapiCtx.envStore.get(env);
6815
7635
  if (!fun)
6816
7636
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
7637
+ fun >>>= 0;
7638
+ arg >>>= 0;
6817
7639
  emnapiCtx.removeCleanupHook(envObject, fun, arg);
6818
7640
  return 0 /* napi_status.napi_ok */;
6819
7641
  }
@@ -6880,8 +7702,10 @@
6880
7702
  var p = new Promise(function (resolve, reject) {
6881
7703
  var deferredObject = emnapiCtx.createDeferred({ resolve: resolve, reject: reject });
6882
7704
  deferredObjectId = deferredObject.id;
7705
+ deferred >>>= 0;
6883
7706
  HEAP_DATA_VIEW.setUint32(deferred, deferredObjectId, true);
6884
7707
  });
7708
+ promise >>>= 0;
6885
7709
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
6886
7710
  value = emnapiCtx.addToCurrentScope(p).id;
6887
7711
  HEAP_DATA_VIEW.setUint32(promise, value, true);
@@ -6956,6 +7780,7 @@
6956
7780
  if (!is_promise)
6957
7781
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6958
7782
  var h = emnapiCtx.handleStore.get(value);
7783
+ is_promise >>>= 0;
6959
7784
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
6960
7785
  var r = h.isPromise() ? 1 : 0;
6961
7786
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -7103,6 +7928,7 @@
7103
7928
  }
7104
7929
  }
7105
7930
  }
7931
+ result >>>= 0;
7106
7932
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
7107
7933
  value = emnapiCtx.addToCurrentScope(ret).id;
7108
7934
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -7181,6 +8007,7 @@
7181
8007
  catch (_) {
7182
8008
  return envObject.setLastError(2 /* napi_status.napi_object_expected */);
7183
8009
  }
8010
+ result >>>= 0;
7184
8011
  r = (emnapiCtx.handleStore.get(key).value in v) ? 1 : 0;
7185
8012
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
7186
8013
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -7223,6 +8050,7 @@
7223
8050
  catch (_) {
7224
8051
  return envObject.setLastError(2 /* napi_status.napi_object_expected */);
7225
8052
  }
8053
+ result >>>= 0;
7226
8054
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
7227
8055
  value = envObject.ensureHandleId(v[emnapiCtx.handleStore.get(key).value]);
7228
8056
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -7270,6 +8098,7 @@
7270
8098
  }
7271
8099
  }
7272
8100
  if (result) {
8101
+ result >>>= 0;
7273
8102
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
7274
8103
  HEAP_DATA_VIEW.setInt8(result, r ? 1 : 0, true);
7275
8104
  }
@@ -7317,6 +8146,7 @@
7317
8146
  return envObject.setLastError(4 /* napi_status.napi_name_expected */);
7318
8147
  }
7319
8148
  r = Object.prototype.hasOwnProperty.call(v, emnapiCtx.handleStore.get(key).value);
8149
+ result >>>= 0;
7320
8150
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
7321
8151
  HEAP_DATA_VIEW.setInt8(result, r ? 1 : 0, true);
7322
8152
  return envObject.getReturnStatus();
@@ -7350,6 +8180,7 @@
7350
8180
  if (!cname) {
7351
8181
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
7352
8182
  }
8183
+ cname >>>= 0;
7353
8184
  emnapiCtx.handleStore.get(object).value[emnapiString.UTF8ToString(cname, -1)] = emnapiCtx.handleStore.get(value).value;
7354
8185
  return envObject.getReturnStatus();
7355
8186
  }
@@ -7391,6 +8222,8 @@
7391
8222
  catch (_) {
7392
8223
  return envObject.setLastError(2 /* napi_status.napi_object_expected */);
7393
8224
  }
8225
+ utf8name >>>= 0;
8226
+ result >>>= 0;
7394
8227
  r = emnapiString.UTF8ToString(utf8name, -1) in v;
7395
8228
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
7396
8229
  HEAP_DATA_VIEW.setInt8(result, r ? 1 : 0, true);
@@ -7434,6 +8267,8 @@
7434
8267
  catch (_) {
7435
8268
  return envObject.setLastError(2 /* napi_status.napi_object_expected */);
7436
8269
  }
8270
+ utf8name >>>= 0;
8271
+ result >>>= 0;
7437
8272
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
7438
8273
  value = envObject.ensureHandleId(v[emnapiString.UTF8ToString(utf8name, -1)]);
7439
8274
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -7504,6 +8339,7 @@
7504
8339
  catch (_) {
7505
8340
  return envObject.setLastError(2 /* napi_status.napi_object_expected */);
7506
8341
  }
8342
+ result >>>= 0;
7507
8343
  r = ((index >>> 0) in v) ? 1 : 0;
7508
8344
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
7509
8345
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -7544,6 +8380,7 @@
7544
8380
  catch (_) {
7545
8381
  return envObject.setLastError(2 /* napi_status.napi_object_expected */);
7546
8382
  }
8383
+ result >>>= 0;
7547
8384
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
7548
8385
  value = envObject.ensureHandleId(v[index >>> 0]);
7549
8386
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -7588,6 +8425,7 @@
7588
8425
  }
7589
8426
  }
7590
8427
  if (result) {
8428
+ result >>>= 0;
7591
8429
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
7592
8430
  HEAP_DATA_VIEW.setInt8(result, r ? 1 : 0, true);
7593
8431
  }
@@ -7613,6 +8451,8 @@
7613
8451
  return envObject.setLastError(envObject.moduleApiVersion >= 10 ? 23 /* napi_status.napi_cannot_run_js */ : 10 /* napi_status.napi_pending_exception */);
7614
8452
  envObject.clearLastError();
7615
8453
  try {
8454
+ properties >>>= 0;
8455
+ property_count >>>= 0;
7616
8456
  property_count = property_count >>> 0;
7617
8457
  if (property_count > 0) {
7618
8458
  if (!properties)
@@ -7637,6 +8477,7 @@
7637
8477
  var setter = HEAP_DATA_VIEW.getUint32(propPtr + 16, true);
7638
8478
  var value = HEAP_DATA_VIEW.getUint32(propPtr + 20, true);
7639
8479
  attributes = HEAP_DATA_VIEW.getInt32(propPtr + 24, true);
8480
+ attributes >>>= 0;
7640
8481
  var data = HEAP_DATA_VIEW.getUint32(propPtr + 28, true);
7641
8482
  if (utf8Name) {
7642
8483
  propertyName = emnapiString.UTF8ToString(utf8Name, -1);
@@ -7761,6 +8602,7 @@
7761
8602
  }
7762
8603
  var g = emnapiCtx.handleStore.get(5 /* GlobalHandle.GLOBAL */).value;
7763
8604
  var ret = g.eval(v8Script.value);
8605
+ result >>>= 0;
7764
8606
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
7765
8607
  value = envObject.ensureHandleId(ret);
7766
8608
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -7789,6 +8631,7 @@
7789
8631
  if (!result)
7790
8632
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
7791
8633
  var v = emnapiCtx.handleStore.get(value);
8634
+ result >>>= 0;
7792
8635
  var r;
7793
8636
  if (v.isNumber()) {
7794
8637
  r = 3 /* napi_valuetype.napi_number */;
@@ -7853,6 +8696,7 @@
7853
8696
  if (!result)
7854
8697
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
7855
8698
  var handle = emnapiCtx.handleStore.get(value);
8699
+ result >>>= 0;
7856
8700
  v = handle.value ? 4 /* GlobalHandle.TRUE */ : 3 /* GlobalHandle.FALSE */;
7857
8701
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
7858
8702
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -7886,6 +8730,7 @@
7886
8730
  if (handle.isBigInt()) {
7887
8731
  throw new TypeError('Cannot convert a BigInt value to a number');
7888
8732
  }
8733
+ result >>>= 0;
7889
8734
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
7890
8735
  v = emnapiCtx.addToCurrentScope(Number(handle.value)).id;
7891
8736
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -7920,6 +8765,7 @@
7920
8765
  if (handle.value == null) {
7921
8766
  throw new TypeError('Cannot convert undefined or null to object');
7922
8767
  }
8768
+ result >>>= 0;
7923
8769
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
7924
8770
  v = envObject.ensureHandleId(Object(handle.value));
7925
8771
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -7954,6 +8800,7 @@
7954
8800
  if (handle.isSymbol()) {
7955
8801
  throw new TypeError('Cannot convert a Symbol value to a string');
7956
8802
  }
8803
+ result >>>= 0;
7957
8804
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
7958
8805
  v = emnapiCtx.addToCurrentScope(String(handle.value)).id;
7959
8806
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -7986,6 +8833,7 @@
7986
8833
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
7987
8834
  if (!constructor)
7988
8835
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
8836
+ result >>>= 0;
7989
8837
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
7990
8838
  HEAP_DATA_VIEW.setInt8(result, 0, true);
7991
8839
  var ctor = emnapiCtx.handleStore.get(constructor);
@@ -8015,6 +8863,7 @@
8015
8863
  if (!result)
8016
8864
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
8017
8865
  var h = emnapiCtx.handleStore.get(value);
8866
+ result >>>= 0;
8018
8867
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
8019
8868
  var r = h.isArray() ? 1 : 0;
8020
8869
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -8033,6 +8882,7 @@
8033
8882
  if (!result)
8034
8883
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
8035
8884
  var h = emnapiCtx.handleStore.get(value);
8885
+ result >>>= 0;
8036
8886
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
8037
8887
  var r = h.isArrayBuffer() ? 1 : 0;
8038
8888
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -8051,6 +8901,7 @@
8051
8901
  if (!result)
8052
8902
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
8053
8903
  var h = emnapiCtx.handleStore.get(value);
8904
+ result >>>= 0;
8054
8905
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
8055
8906
  var r = ((typeof SharedArrayBuffer === 'function' && h.value instanceof SharedArrayBuffer) ||
8056
8907
  (Object.prototype.toString.call(h.value) === '[object SharedArrayBuffer]'))
@@ -8072,6 +8923,7 @@
8072
8923
  if (!result)
8073
8924
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
8074
8925
  var h = emnapiCtx.handleStore.get(value);
8926
+ result >>>= 0;
8075
8927
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
8076
8928
  var r = h.isDate() ? 1 : 0;
8077
8929
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -8090,6 +8942,7 @@
8090
8942
  if (!result)
8091
8943
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
8092
8944
  var val = emnapiCtx.handleStore.get(value).value;
8945
+ result >>>= 0;
8093
8946
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
8094
8947
  var r = (val instanceof Error) ? 1 : 0;
8095
8948
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -8108,6 +8961,7 @@
8108
8961
  if (!result)
8109
8962
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
8110
8963
  var h = emnapiCtx.handleStore.get(value);
8964
+ result >>>= 0;
8111
8965
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
8112
8966
  var r = h.isTypedArray() ? 1 : 0;
8113
8967
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -8126,6 +8980,7 @@
8126
8980
  if (!result)
8127
8981
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
8128
8982
  var h = emnapiCtx.handleStore.get(value);
8983
+ result >>>= 0;
8129
8984
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
8130
8985
  var r = h.isBuffer(emnapiCtx.feature.Buffer) ? 1 : 0;
8131
8986
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -8144,6 +8999,7 @@
8144
8999
  if (!result)
8145
9000
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
8146
9001
  var h = emnapiCtx.handleStore.get(value);
9002
+ result >>>= 0;
8147
9003
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
8148
9004
  var r = h.isDataView() ? 1 : 0;
8149
9005
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -8173,6 +9029,7 @@
8173
9029
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
8174
9030
  var lv = emnapiCtx.handleStore.get(lhs).value;
8175
9031
  var rv = emnapiCtx.handleStore.get(rhs).value;
9032
+ result >>>= 0;
8176
9033
  r = (lv === rv) ? 1 : 0;
8177
9034
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
8178
9035
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -8227,6 +9084,7 @@
8227
9084
  if (!result)
8228
9085
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
8229
9086
  var h = emnapiCtx.handleStore.get(arraybuffer);
9087
+ result >>>= 0;
8230
9088
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
8231
9089
  if (h.isArrayBuffer() && h.value.byteLength === 0) {
8232
9090
  try {
@@ -8285,11 +9143,13 @@
8285
9143
  });
8286
9144
  emnapiAWST.init();
8287
9145
  emnapiExternalMemory.init();
9146
+ emnapiExternalSAB.init();
8288
9147
  emnapiString.init();
8289
9148
  emnapiTSFN.init();
8290
9149
  PThread.init();
8291
9150
  napiModule.emnapi.syncMemory = $emnapiSyncMemory;
8292
9151
  napiModule.emnapi.getMemoryAddress = $emnapiGetMemoryAddress;
9152
+ napiModule.emnapi.acquireExternalSharedArrayBuffer = $emnapiAcquireExternalSharedArrayBuffer;
8293
9153
  function addImports(mod) {
8294
9154
  var keys = Object.keys(mod);
8295
9155
  for (var i = 0; i < keys.length; ++i) {
@@ -8605,12 +9465,7 @@
8605
9465
  try {
8606
9466
  if (type === 'async-worker-init') {
8607
9467
  this.handleAfterLoad(e, function () {
8608
- _this.napiModule.initWorker(payload_1.arg);
8609
- });
8610
- }
8611
- else if (type === 'async-work-execute') {
8612
- this.handleAfterLoad(e, function () {
8613
- _this.napiModule.executeAsyncWork(payload_1.work);
9468
+ _this.napiModule.initWorker(payload_1.arg, payload_1.func);
8614
9469
  });
8615
9470
  }
8616
9471
  }
@@ -8636,7 +9491,7 @@
8636
9491
  // }
8637
9492
  // }
8638
9493
 
8639
- var version = "1.8.1";
9494
+ var version = "1.11.1";
8640
9495
 
8641
9496
  exports.MessageHandler = MessageHandler;
8642
9497
  exports.ThreadManager = ThreadManager;