@tailwindcss/oxide-wasm32-wasi 4.3.1 → 4.3.2

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 (35) hide show
  1. package/node_modules/@emnapi/core/dist/emnapi-core.cjs.js +320 -98
  2. package/node_modules/@emnapi/core/dist/emnapi-core.cjs.min.d.ts +0 -1
  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 +0 -1
  5. package/node_modules/@emnapi/core/dist/emnapi-core.d.ts +0 -1
  6. package/node_modules/@emnapi/core/dist/emnapi-core.esm-bundler.js +385 -97
  7. package/node_modules/@emnapi/core/dist/emnapi-core.js +399 -120
  8. package/node_modules/@emnapi/core/dist/emnapi-core.min.d.mts +0 -1
  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 +320 -98
  12. package/node_modules/@emnapi/core/package.json +2 -2
  13. package/node_modules/@emnapi/runtime/dist/emnapi.cjs.js +1 -1
  14. package/node_modules/@emnapi/runtime/dist/emnapi.cjs.min.js +1 -1
  15. package/node_modules/@emnapi/runtime/dist/emnapi.esm-bundler.js +1 -1
  16. package/node_modules/@emnapi/runtime/dist/emnapi.iife.js +1 -1
  17. package/node_modules/@emnapi/runtime/dist/emnapi.js +1 -1
  18. package/node_modules/@emnapi/runtime/dist/emnapi.min.js +1 -1
  19. package/node_modules/@emnapi/runtime/dist/emnapi.min.mjs +1 -1
  20. package/node_modules/@emnapi/runtime/dist/emnapi.mjs +1 -1
  21. package/node_modules/@emnapi/runtime/package.json +1 -1
  22. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.cjs.js +14 -23
  23. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.cjs.min.d.ts +0 -1
  24. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.cjs.min.js +1 -1
  25. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.d.mts +0 -1
  26. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.d.ts +0 -1
  27. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.esm-bundler.js +14 -23
  28. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.js +14 -23
  29. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.min.d.mts +0 -1
  30. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.min.js +1 -1
  31. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.min.mjs +1 -1
  32. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.mjs +14 -23
  33. package/node_modules/@emnapi/wasi-threads/package.json +1 -1
  34. package/package.json +4 -4
  35. package/tailwindcss-oxide.wasm32-wasi.wasm +0 -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;
@@ -325,7 +324,6 @@
325
324
  delete this.pthreads[tid];
326
325
  }
327
326
  this.unusedWorkers.push(worker);
328
- this.runningWorkers.splice(this.runningWorkers.indexOf(worker), 1);
329
327
  delete worker.__emnapi_tid;
330
328
  if (ENVIRONMENT_IS_NODE) {
331
329
  worker.unref();
@@ -459,10 +457,6 @@
459
457
  }
460
458
  else {
461
459
  delete this.pthreads[tid];
462
- var index = this.runningWorkers.indexOf(worker);
463
- if (index !== -1) {
464
- this.runningWorkers.splice(index, 1);
465
- }
466
460
  this.terminateWorker(worker);
467
461
  delete worker.__emnapi_tid;
468
462
  }
@@ -483,14 +477,14 @@
483
477
  };
484
478
  };
485
479
  ThreadManager.prototype.terminateAllThreads = function () {
486
- for (var i = 0; i < this.runningWorkers.length; ++i) {
487
- 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]);
488
483
  }
489
484
  for (var i = 0; i < this.unusedWorkers.length; ++i) {
490
485
  this.terminateWorker(this.unusedWorkers[i]);
491
486
  }
492
487
  this.unusedWorkers = [];
493
- this.runningWorkers = [];
494
488
  this.pthreads = Object.create(null);
495
489
  this.preparePool();
496
490
  };
@@ -713,10 +707,6 @@
713
707
  if (typeof waitThreadStart === 'number') {
714
708
  var waitResult = Atomics.wait(sab, 0, 0, waitThreadStart);
715
709
  if (waitResult === 'timed-out') {
716
- try {
717
- PThread.cleanThread(worker, tid, true);
718
- }
719
- catch (_) { }
720
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.');
721
711
  }
722
712
  }
@@ -725,15 +715,17 @@
725
715
  }
726
716
  var r = Atomics.load(sab, 0);
727
717
  if (r > 1) {
728
- try {
729
- PThread.cleanThread(worker, tid, true);
730
- }
731
- catch (_) { }
732
718
  throw deserizeErrorFromBuffer(sab.buffer);
733
719
  }
734
720
  }
735
721
  }
736
722
  catch (e) {
723
+ if (worker !== undefined && tid !== undefined) {
724
+ try {
725
+ PThread.cleanThread(worker, tid, true);
726
+ }
727
+ catch (_) { }
728
+ }
737
729
  Atomics.store(struct, 0, 1);
738
730
  Atomics.store(struct, 1, EAGAIN);
739
731
  Atomics.notify(struct, 1);
@@ -747,7 +739,6 @@
747
739
  Atomics.store(struct, 0, 0);
748
740
  Atomics.store(struct, 1, tid);
749
741
  Atomics.notify(struct, 1);
750
- PThread.runningWorkers.push(worker);
751
742
  if (!shouldWait) {
752
743
  worker.whenLoaded.catch(function (err) {
753
744
  delete worker.whenLoaded;
@@ -795,14 +786,14 @@
795
786
  * @returns A proxied WebAssembly instance if in child thread, other wise the original instance
796
787
  */
797
788
  WASIThreads.prototype.initialize = function (instance, module, memory) {
798
- var exports$1 = instance.exports;
799
- 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);
800
791
  if (this.childThread) {
801
792
  instance = createInstanceProxy(instance, memory);
802
793
  }
803
794
  this.setup(instance, module, memory);
804
795
  var wasi = this.wasi;
805
- if (('_start' in exports$1) && (typeof exports$1._start === 'function')) {
796
+ if (('_start' in exports) && (typeof exports._start === 'function')) {
806
797
  if (this.childThread) {
807
798
  wasi.start(instance);
808
799
  try {
@@ -828,8 +819,8 @@
828
819
  * ```
829
820
  */
830
821
  WASIThreads.prototype.start = function (instance, module, memory) {
831
- var exports$1 = instance.exports;
832
- 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);
833
824
  if (this.childThread) {
834
825
  instance = createInstanceProxy(instance, memory);
835
826
  }
@@ -1069,10 +1060,10 @@
1069
1060
  if (!(instance === null || instance === void 0 ? void 0 : instance.exports))
1070
1061
  throw new TypeError('Invalid wasm instance');
1071
1062
  wasmInstance = instance;
1072
- var exports$1 = instance.exports;
1063
+ var exports = instance.exports;
1073
1064
  var module = options.module;
1074
- var memory = options.memory || exports$1.memory;
1075
- 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;
1076
1067
  if (!(module instanceof _WebAssembly$1.Module))
1077
1068
  throw new TypeError('Invalid wasm module');
1078
1069
  if (!(memory instanceof _WebAssembly$1.Memory))
@@ -1081,12 +1072,12 @@
1081
1072
  throw new TypeError('Invalid wasm table');
1082
1073
  wasmMemory = memory;
1083
1074
  wasmTable = table;
1084
- if (typeof exports$1.malloc !== 'function')
1075
+ if (typeof exports.malloc !== 'function')
1085
1076
  throw new TypeError('malloc is not exported');
1086
- if (typeof exports$1.free !== 'function')
1077
+ if (typeof exports.free !== 'function')
1087
1078
  throw new TypeError('free is not exported');
1088
- _malloc = exports$1.malloc;
1089
- _free = exports$1.free;
1079
+ _malloc = exports.malloc;
1080
+ _free = exports.free;
1090
1081
  if (!napiModule.childThread) {
1091
1082
  // main thread only
1092
1083
  var moduleApiVersion = 8 /* Version.NODE_API_DEFAULT_MODULE_API_VERSION */;
@@ -1099,11 +1090,11 @@
1099
1090
  var scope_1 = emnapiCtx.openScope(envObject);
1100
1091
  try {
1101
1092
  envObject.callIntoModule(function (_envObject) {
1102
- var exports$1 = napiModule.exports;
1103
- var exportsHandle = scope_1.add(exports$1);
1093
+ var exports = napiModule.exports;
1094
+ var exportsHandle = scope_1.add(exports);
1104
1095
  var napi_register_wasm_v1 = instance.exports.napi_register_wasm_v1;
1105
1096
  var napiValue = napi_register_wasm_v1(_envObject.id, exportsHandle.id);
1106
- napiModule.exports = (!napiValue) ? exports$1 : emnapiCtx.handleStore.get(napiValue).value;
1097
+ napiModule.exports = (!napiValue) ? exports : emnapiCtx.handleStore.get(napiValue).value;
1107
1098
  });
1108
1099
  }
1109
1100
  catch (e) {
@@ -2001,7 +1992,7 @@
2001
1992
  emnapiTSFN.offset.mutex = emnapiTSFN.offset.mutex + 4;
2002
1993
  if (typeof PThread !== 'undefined') {
2003
1994
  PThread.unusedWorkers.forEach(emnapiTSFN.addListener);
2004
- PThread.runningWorkers.forEach(emnapiTSFN.addListener);
1995
+ Object.values(PThread.pthreads).forEach(emnapiTSFN.addListener);
2005
1996
  var __original_getNewWorker_1 = PThread.getNewWorker;
2006
1997
  PThread.getNewWorker = function () {
2007
1998
  var r = __original_getNewWorker_1.apply(this, arguments);
@@ -2023,7 +2014,7 @@
2023
2014
  var payload = __emnapi__.payload;
2024
2015
  if (type === 'tsfn-send') {
2025
2016
  var pendng = payload.tsfn + emnapiTSFN.offset.async_pending;
2026
- if (Atomics.load(new Int32Array(wasmMemory.buffer), pendng >>> 2) !== 0) {
2017
+ if (Atomics.load(new Int32Array(emnapiTSFN.ensureBufferFor(pendng + 4)), pendng >>> 2) !== 0) {
2027
2018
  emnapiTSFN.enqueue(payload.tsfn);
2028
2019
  }
2029
2020
  }
@@ -2047,13 +2038,28 @@
2047
2038
  }
2048
2039
  return true;
2049
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
+ },
2050
2056
  initQueue: function (func) {
2051
2057
  var size = 2 * 4;
2052
2058
  var queue = _malloc(size);
2053
2059
  if (!queue)
2054
2060
  return false;
2055
2061
  queue >>>= 0;
2056
- new Uint8Array(wasmMemory.buffer, queue, size).fill(0);
2062
+ new Uint8Array(emnapiTSFN.ensureBufferFor(queue + size), queue, size).fill(0);
2057
2063
  emnapiTSFN.storeSizeTypeValue(func + emnapiTSFN.offset.queue, queue, false);
2058
2064
  return true;
2059
2065
  },
@@ -2160,7 +2166,7 @@
2160
2166
  var mutex = {
2161
2167
  lock: function () {
2162
2168
  var isBrowserMain = typeof window !== 'undefined' && typeof document !== 'undefined' && !ENVIRONMENT_IS_NODE;
2163
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
2169
+ var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
2164
2170
  if (isBrowserMain) {
2165
2171
  while (true) {
2166
2172
  var oldValue = Atomics.compareExchange(i32a, 0, 0, 10);
@@ -2183,7 +2189,7 @@
2183
2189
  return new Promise<void>(resolve => {
2184
2190
  const again = (): void => { fn() }
2185
2191
  const fn = (): void => {
2186
- const i32a = new Int32Array(wasmMemory.buffer, index, 1)
2192
+ const i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1)
2187
2193
  const oldValue = Atomics.compareExchange(i32a, 0, 0, 10)
2188
2194
  if (oldValue === 0) {
2189
2195
  resolve()
@@ -2195,7 +2201,7 @@
2195
2201
  })
2196
2202
  }, */
2197
2203
  unlock: function () {
2198
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
2204
+ var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
2199
2205
  var oldValue = Atomics.compareExchange(i32a, 0, 10, 0);
2200
2206
  if (oldValue !== 10) {
2201
2207
  throw new Error('Tried to unlock while not holding the mutex');
@@ -2229,14 +2235,14 @@
2229
2235
  var mutex = emnapiTSFN.getMutex(func);
2230
2236
  var cond = {
2231
2237
  wait: function () {
2232
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
2238
+ var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
2233
2239
  var value = Atomics.load(i32a, 0);
2234
2240
  mutex.unlock();
2235
2241
  Atomics.wait(i32a, 0, value);
2236
2242
  mutex.lock();
2237
2243
  },
2238
2244
  /* waitAsync () {
2239
- const i32a = new Int32Array(wasmMemory.buffer, index, 1)
2245
+ const i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1)
2240
2246
  const value = Atomics.load(i32a, 0)
2241
2247
  mutex.unlock()
2242
2248
  const lock = (): Promise<void> => mutex.lockAsync()
@@ -2247,7 +2253,7 @@
2247
2253
  }
2248
2254
  }, */
2249
2255
  signal: function () {
2250
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
2256
+ var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
2251
2257
  Atomics.add(i32a, 0, 1);
2252
2258
  Atomics.notify(i32a, 0, 1);
2253
2259
  }
@@ -2260,14 +2266,14 @@
2260
2266
  addQueueSize: function (func) {
2261
2267
  var offset = emnapiTSFN.offset.queue_size;
2262
2268
  var arr, index;
2263
- arr = new Uint32Array(wasmMemory.buffer);
2269
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4));
2264
2270
  index = (func + offset) >>> 2;
2265
2271
  Atomics.add(arr, index, 1);
2266
2272
  },
2267
2273
  subQueueSize: function (func) {
2268
2274
  var offset = emnapiTSFN.offset.queue_size;
2269
2275
  var arr, index;
2270
- arr = new Uint32Array(wasmMemory.buffer);
2276
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4));
2271
2277
  index = (func + offset) >>> 2;
2272
2278
  Atomics.sub(arr, index, 1);
2273
2279
  },
@@ -2277,31 +2283,31 @@
2277
2283
  addThreadCount: function (func) {
2278
2284
  var offset = emnapiTSFN.offset.thread_count;
2279
2285
  var arr, index;
2280
- arr = new Uint32Array(wasmMemory.buffer);
2286
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4));
2281
2287
  index = (func + offset) >>> 2;
2282
2288
  Atomics.add(arr, index, 1);
2283
2289
  },
2284
2290
  subThreadCount: function (func) {
2285
2291
  var offset = emnapiTSFN.offset.thread_count;
2286
2292
  var arr, index;
2287
- arr = new Uint32Array(wasmMemory.buffer);
2293
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4));
2288
2294
  index = (func + offset) >>> 2;
2289
2295
  Atomics.sub(arr, index, 1);
2290
2296
  },
2291
2297
  getState: function (func) {
2292
- return Atomics.load(new Int32Array(wasmMemory.buffer), (func + emnapiTSFN.offset.state) >>> 2);
2298
+ return Atomics.load(new Int32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.state + 4)), (func + emnapiTSFN.offset.state) >>> 2);
2293
2299
  },
2294
2300
  setState: function (func, value) {
2295
- Atomics.store(new Int32Array(wasmMemory.buffer), (func + emnapiTSFN.offset.state) >>> 2, value);
2301
+ Atomics.store(new Int32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.state + 4)), (func + emnapiTSFN.offset.state) >>> 2, value);
2296
2302
  },
2297
2303
  getHandlesClosing: function (func) {
2298
- return Atomics.load(new Int8Array(wasmMemory.buffer), (func + emnapiTSFN.offset.handles_closing));
2304
+ return Atomics.load(new Int8Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.handles_closing + 1)), (func + emnapiTSFN.offset.handles_closing));
2299
2305
  },
2300
2306
  setHandlesClosing: function (func, value) {
2301
- Atomics.store(new Int8Array(wasmMemory.buffer), (func + emnapiTSFN.offset.handles_closing), value);
2307
+ Atomics.store(new Int8Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.handles_closing + 1)), (func + emnapiTSFN.offset.handles_closing), value);
2302
2308
  },
2303
2309
  getDispatchState: function (func) {
2304
- 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);
2305
2311
  },
2306
2312
  getContext: function (func) {
2307
2313
  return emnapiTSFN.loadSizeTypeValue(func + emnapiTSFN.offset.context, false);
@@ -2331,12 +2337,12 @@
2331
2337
  var ret;
2332
2338
  var arr;
2333
2339
  if (unsigned) {
2334
- arr = new Uint32Array(wasmMemory.buffer);
2340
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(offset + 4));
2335
2341
  ret = Atomics.load(arr, offset >>> 2);
2336
2342
  return ret;
2337
2343
  }
2338
2344
  else {
2339
- arr = new Int32Array(wasmMemory.buffer);
2345
+ arr = new Int32Array(emnapiTSFN.ensureBufferFor(offset + 4));
2340
2346
  ret = Atomics.load(arr, offset >>> 2);
2341
2347
  return ret;
2342
2348
  }
@@ -2344,12 +2350,12 @@
2344
2350
  storeSizeTypeValue: function (offset, value, unsigned) {
2345
2351
  var arr;
2346
2352
  if (unsigned) {
2347
- arr = new Uint32Array(wasmMemory.buffer);
2353
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(offset + 4));
2348
2354
  Atomics.store(arr, offset >>> 2, value);
2349
2355
  return undefined;
2350
2356
  }
2351
2357
  else {
2352
- arr = new Int32Array(wasmMemory.buffer);
2358
+ arr = new Int32Array(emnapiTSFN.ensureBufferFor(offset + 4));
2353
2359
  Atomics.store(arr, offset >>> 2, value >>> 0);
2354
2360
  return undefined;
2355
2361
  }
@@ -2365,18 +2371,20 @@
2365
2371
  }
2366
2372
  var resource = emnapiTSFN.getResource(func);
2367
2373
  emnapiCtx.refStore.get(resource).dispose();
2374
+ emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.is_some + 1);
2368
2375
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2369
2376
  HEAP_DATA_VIEW.setInt8(func + emnapiTSFN.offset.is_some, 0, true);
2370
2377
  emnapiCtx.removeCleanupHook(envObject, emnapiTSFN.cleanup, func);
2371
2378
  envObject.unref();
2372
- var asyncRefOffset = (func + emnapiTSFN.offset.async_ref) >>> 2;
2373
- var arr = new Uint32Array(wasmMemory.buffer);
2379
+ var asyncRefAddress = func + emnapiTSFN.offset.async_ref;
2380
+ var asyncRefOffset = asyncRefAddress >>> 2;
2381
+ var arr = new Uint32Array(emnapiTSFN.ensureBufferFor(asyncRefAddress + 4));
2374
2382
  if (Atomics.load(arr, asyncRefOffset) > 0) {
2375
2383
  Atomics.store(arr, asyncRefOffset, 0);
2376
2384
  emnapiCtx.decreaseWaitingRequestCounter();
2377
2385
  }
2378
2386
  if (emnapiNodeBinding) {
2379
- var view = new DataView(wasmMemory.buffer);
2387
+ var view = new DataView(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.trigger_async_id + 8));
2380
2388
  var asyncId = view.getFloat64(func + emnapiTSFN.offset.async_id, true);
2381
2389
  var triggerAsyncId = view.getFloat64(func + emnapiTSFN.offset.trigger_async_id, true);
2382
2390
  _emnapi_node_emit_async_destroy(asyncId, triggerAsyncId);
@@ -2441,7 +2449,7 @@
2441
2449
  var resource = emnapiTSFN.getResource(func);
2442
2450
  var resource_value = emnapiCtx.refStore.get(resource).get();
2443
2451
  var resourceObject = emnapiCtx.handleStore.get(resource_value).value;
2444
- var view = new DataView(wasmMemory.buffer);
2452
+ var view = new DataView(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.trigger_async_id + 8));
2445
2453
  var asyncId = view.getFloat64(func + emnapiTSFN.offset.async_id, true);
2446
2454
  var triggerAsyncId = view.getFloat64(func + emnapiTSFN.offset.trigger_async_id, true);
2447
2455
  emnapiNodeBinding.node.makeCallback(resourceObject, f, [], {
@@ -2479,7 +2487,7 @@
2479
2487
  return;
2480
2488
  }
2481
2489
  emnapiTSFN.setHandlesClosing(func, 1);
2482
- Atomics.store(new Int32Array(wasmMemory.buffer), (func + emnapiTSFN.offset.async_pending) >>> 2, 1);
2490
+ Atomics.store(new Int32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.async_pending + 4)), (func + emnapiTSFN.offset.async_pending) >>> 2, 1);
2483
2491
  emnapiCtx.feature.setImmediate(function () {
2484
2492
  emnapiTSFN.finalize(func);
2485
2493
  });
@@ -2551,7 +2559,7 @@
2551
2559
  var resource = emnapiTSFN.getResource(func);
2552
2560
  var resource_value = emnapiCtx.refStore.get(resource).get();
2553
2561
  var resourceObject = emnapiCtx.handleStore.get(resource_value).value;
2554
- var view = new DataView(wasmMemory.buffer);
2562
+ var view = new DataView(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.trigger_async_id + 8));
2555
2563
  emnapiNodeBinding.node.makeCallback(resourceObject, f, [], {
2556
2564
  asyncId: view.getFloat64(func + emnapiTSFN.offset.async_id, true),
2557
2565
  triggerAsyncId: view.getFloat64(func + emnapiTSFN.offset.trigger_async_id, true)
@@ -2570,8 +2578,9 @@
2570
2578
  dispatch: function (func) {
2571
2579
  var has_more = true;
2572
2580
  var iterations_left = 1000;
2573
- var ui32a = new Uint32Array(wasmMemory.buffer);
2574
- 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;
2575
2584
  while (has_more && --iterations_left !== 0) {
2576
2585
  Atomics.store(ui32a, index, 1);
2577
2586
  has_more = emnapiTSFN.dispatchOne(func);
@@ -2590,7 +2599,7 @@
2590
2599
  // `scheduled` prevents queueing the same main-thread drain chain more than
2591
2600
  // once while a previous wakeup is still in flight.
2592
2601
  var scheduled = func + emnapiTSFN.offset.async_u_fd;
2593
- var i32a = new Int32Array(wasmMemory.buffer);
2602
+ var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(Math.max(pending, scheduled) + 4));
2594
2603
  if (Atomics.exchange(i32a, scheduled >>> 2, 1) !== 0) {
2595
2604
  return;
2596
2605
  }
@@ -2634,17 +2643,18 @@
2634
2643
  });
2635
2644
  },
2636
2645
  send: function (func) {
2637
- var current_state = Atomics.or(new Uint32Array(wasmMemory.buffer), (func + emnapiTSFN.offset.dispatch_state) >>> 2, 1 << 1);
2646
+ var dispatchStateAddress = func + emnapiTSFN.offset.dispatch_state;
2647
+ var current_state = Atomics.or(new Uint32Array(emnapiTSFN.ensureBufferFor(dispatchStateAddress + 4)), dispatchStateAddress >>> 2, 1 << 1);
2638
2648
  if ((current_state & 1) === 1) {
2639
2649
  return;
2640
2650
  }
2641
2651
  var pendng = func + emnapiTSFN.offset.async_pending;
2642
2652
  // A wakeup is already pending, so this send only needs to leave the queued
2643
2653
  // work in the TSFN queue and let the existing drain pick it up.
2644
- if (Atomics.load(new Int32Array(wasmMemory.buffer), pendng >>> 2) !== 0) {
2654
+ if (Atomics.load(new Int32Array(emnapiTSFN.ensureBufferFor(pendng + 4)), pendng >>> 2) !== 0) {
2645
2655
  return;
2646
2656
  }
2647
- if (Atomics.exchange(new Int32Array(wasmMemory.buffer), pendng >>> 2, 1) === 0) {
2657
+ if (Atomics.exchange(new Int32Array(emnapiTSFN.ensureBufferFor(pendng + 4)), pendng >>> 2, 1) === 0) {
2648
2658
  if ((typeof ENVIRONMENT_IS_PTHREAD !== 'undefined') && ENVIRONMENT_IS_PTHREAD) {
2649
2659
  // Worker threads only post a wakeup token. Main-thread draining is
2650
2660
  // serialized by enqueue() once the message is received.
@@ -2727,7 +2737,7 @@
2727
2737
  if (!tsfn)
2728
2738
  return envObject.setLastError(9 /* napi_status.napi_generic_failure */);
2729
2739
  tsfn >>>= 0;
2730
- new Uint8Array(wasmMemory.buffer).subarray(tsfn, tsfn + sizeofTSFN).fill(0);
2740
+ new Uint8Array(emnapiTSFN.ensureBufferFor(tsfn + sizeofTSFN)).subarray(tsfn, tsfn + sizeofTSFN).fill(0);
2731
2741
  var resourceRef = emnapiCtx.createReference(envObject, resource, 1, 1 /* ReferenceOwnership.kUserland */);
2732
2742
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
2733
2743
  var resource_ = resourceRef.id;
@@ -2841,8 +2851,9 @@
2841
2851
  return 1 /* napi_status.napi_invalid_arg */;
2842
2852
  }
2843
2853
  func >>>= 0;
2844
- var asyncRefOffset = (func + emnapiTSFN.offset.async_ref) >>> 2;
2845
- var arr = new Uint32Array(wasmMemory.buffer);
2854
+ var asyncRefAddress = func + emnapiTSFN.offset.async_ref;
2855
+ var asyncRefOffset = asyncRefAddress >>> 2;
2856
+ var arr = new Uint32Array(emnapiTSFN.ensureBufferFor(asyncRefAddress + 4));
2846
2857
  var currentValue = Atomics.load(arr, asyncRefOffset);
2847
2858
  if (currentValue > 0) {
2848
2859
  Atomics.store(arr, asyncRefOffset, currentValue - 1);
@@ -2859,8 +2870,9 @@
2859
2870
  return 1 /* napi_status.napi_invalid_arg */;
2860
2871
  }
2861
2872
  func >>>= 0;
2862
- var asyncRefOffset = (func + emnapiTSFN.offset.async_ref) >>> 2;
2863
- var arr = new Uint32Array(wasmMemory.buffer);
2873
+ var asyncRefAddress = func + emnapiTSFN.offset.async_ref;
2874
+ var asyncRefOffset = asyncRefAddress >>> 2;
2875
+ var arr = new Uint32Array(emnapiTSFN.ensureBufferFor(asyncRefAddress + 4));
2864
2876
  var currentValue = Atomics.load(arr, asyncRefOffset);
2865
2877
  if (!currentValue) {
2866
2878
  emnapiCtx.increaseWaitingRequestCounter();
@@ -2896,12 +2908,27 @@
2896
2908
  /* napi_async_complete_callback */ complete: 6 * 4 + 24,
2897
2909
  end: 7 * 4 + 24
2898
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;
2925
+ },
2899
2926
  init: function () {
2900
2927
  emnapiAWMT.pool = [];
2901
2928
  emnapiAWMT.workerReady = null;
2902
2929
  if (typeof PThread !== 'undefined') {
2903
2930
  PThread.unusedWorkers.forEach(emnapiAWMT.addListener);
2904
- PThread.runningWorkers.forEach(emnapiAWMT.addListener);
2931
+ Object.values(PThread.pthreads).forEach(emnapiAWMT.addListener);
2905
2932
  var __original_getNewWorker_1 = PThread.getNewWorker;
2906
2933
  PThread.getNewWorker = function () {
2907
2934
  var r = __original_getNewWorker_1.apply(this, arguments);
@@ -2950,7 +2977,7 @@
2950
2977
  emnapiAWMT.globalAddress >>>= 0;
2951
2978
  var size = emnapiAWMT.globalOffset.end;
2952
2979
  var addr = emnapiAWMT.globalAddress;
2953
- new Uint8Array(wasmMemory.buffer, addr, size).fill(0);
2980
+ new Uint8Array(emnapiAWMT.ensureBufferFor(addr + size), addr, size).fill(0);
2954
2981
  emnapiAWMT.queueInit(emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.q);
2955
2982
  emnapiAWMT.queueInit(emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.exit_message);
2956
2983
  }
@@ -2991,8 +3018,8 @@
2991
3018
  return worker.whenLoaded;
2992
3019
  }
2993
3020
  index >>>= 0;
2994
- var view = new DataView(wasmMemory.buffer);
2995
3021
  var tidOffset = 20;
3022
+ var view = new DataView(emnapiAWMT.ensureBufferFor(index + tidOffset + 4));
2996
3023
  var tid = view.getInt32(index + tidOffset, true);
2997
3024
  worker = PThread.pthreads[tid];
2998
3025
  return worker.whenLoaded;
@@ -3001,22 +3028,27 @@
3001
3028
  return emnapiAWMT.workerReady;
3002
3029
  },
3003
3030
  getResource: function (work) {
3031
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.resource + 4);
3004
3032
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3005
3033
  return HEAP_DATA_VIEW.getUint32(work + emnapiAWMT.offset.resource, true);
3006
3034
  },
3007
3035
  getExecute: function (work) {
3036
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.execute + 4);
3008
3037
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3009
3038
  return HEAP_DATA_VIEW.getUint32(work + emnapiAWMT.offset.execute, true);
3010
3039
  },
3011
3040
  getComplete: function (work) {
3041
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.complete + 4);
3012
3042
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3013
3043
  return HEAP_DATA_VIEW.getUint32(work + emnapiAWMT.offset.complete, true);
3014
3044
  },
3015
3045
  getEnv: function (work) {
3046
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.env + 4);
3016
3047
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3017
3048
  return HEAP_DATA_VIEW.getUint32(work + emnapiAWMT.offset.env, true);
3018
3049
  },
3019
3050
  getData: function (work) {
3051
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.data + 4);
3020
3052
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3021
3053
  return HEAP_DATA_VIEW.getUint32(work + emnapiAWMT.offset.data, true);
3022
3054
  },
@@ -3025,7 +3057,7 @@
3025
3057
  var mutex = {
3026
3058
  lock: function () {
3027
3059
  var isBrowserMain = typeof window !== 'undefined' && typeof document !== 'undefined' && !ENVIRONMENT_IS_NODE;
3028
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
3060
+ var i32a = new Int32Array(emnapiAWMT.ensureBufferFor(index + 4), index, 1);
3029
3061
  if (isBrowserMain) {
3030
3062
  while (true) {
3031
3063
  var oldValue = Atomics.compareExchange(i32a, 0, 0, 10);
@@ -3045,7 +3077,7 @@
3045
3077
  }
3046
3078
  },
3047
3079
  unlock: function () {
3048
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
3080
+ var i32a = new Int32Array(emnapiAWMT.ensureBufferFor(index + 4), index, 1);
3049
3081
  var oldValue = Atomics.compareExchange(i32a, 0, 10, 0);
3050
3082
  if (oldValue !== 10) {
3051
3083
  throw new Error('Tried to unlock while not holding the mutex');
@@ -3069,14 +3101,14 @@
3069
3101
  var mutex = emnapiAWMT.getMutex();
3070
3102
  var cond = {
3071
3103
  wait: function () {
3072
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
3104
+ var i32a = new Int32Array(emnapiAWMT.ensureBufferFor(index + 4), index, 1);
3073
3105
  var value = Atomics.load(i32a, 0);
3074
3106
  mutex.unlock();
3075
3107
  Atomics.wait(i32a, 0, value);
3076
3108
  mutex.lock();
3077
3109
  },
3078
3110
  signal: function () {
3079
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
3111
+ var i32a = new Int32Array(emnapiAWMT.ensureBufferFor(index + 4), index, 1);
3080
3112
  Atomics.add(i32a, 0, 1);
3081
3113
  Atomics.notify(i32a, 0, 1);
3082
3114
  }
@@ -3084,11 +3116,14 @@
3084
3116
  return cond;
3085
3117
  },
3086
3118
  queueInit: function (q) {
3119
+ emnapiAWMT.ensureBufferFor(q + 4 + 4);
3087
3120
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3088
3121
  HEAP_DATA_VIEW.setUint32(q, q, true);
3089
3122
  HEAP_DATA_VIEW.setUint32(q + 4, q, true);
3090
3123
  },
3091
3124
  queueInsertTail: function (h, q) {
3125
+ emnapiAWMT.ensureBufferFor(h + 4 + 4);
3126
+ emnapiAWMT.ensureBufferFor(q + 4 + 4);
3092
3127
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3093
3128
  HEAP_DATA_VIEW.setUint32(q, h, true);
3094
3129
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -3100,6 +3135,7 @@
3100
3135
  HEAP_DATA_VIEW.setUint32(h + 4, q, true);
3101
3136
  },
3102
3137
  queueRemove: function (q) {
3138
+ emnapiAWMT.ensureBufferFor(q + 4 + 4);
3103
3139
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3104
3140
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
3105
3141
  var qprev = HEAP_DATA_VIEW.getUint32(q + 4, true);
@@ -3109,6 +3145,7 @@
3109
3145
  HEAP_DATA_VIEW.setUint32(qnext + 4, qprev, true);
3110
3146
  },
3111
3147
  queueEmpty: function (q) {
3148
+ emnapiAWMT.ensureBufferFor(q + 4);
3112
3149
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3113
3150
  // eslint-disable-next-line eqeqeq
3114
3151
  return q == HEAP_DATA_VIEW.getUint32(q, true);
@@ -3124,7 +3161,7 @@
3124
3161
  });
3125
3162
  }
3126
3163
  emnapiCtx.increaseWaitingRequestCounter();
3127
- var statusBuffer = new Int32Array(wasmMemory.buffer, work + emnapiAWMT.offset.status, 1);
3164
+ var statusBuffer = new Int32Array(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.status + 4), work + emnapiAWMT.offset.status, 1);
3128
3165
  Atomics.store(statusBuffer, 0, 0 /* AsyncWorkStatus.Pending */);
3129
3166
  var mutex = emnapiAWMT.getMutex();
3130
3167
  var cond = emnapiAWMT.getCond();
@@ -3137,6 +3174,7 @@
3137
3174
  mutex.unlock();
3138
3175
  throw err;
3139
3176
  }
3177
+ emnapiAWMT.ensureBufferFor(emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.idle_threads + 4);
3140
3178
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3141
3179
  if (HEAP_DATA_VIEW.getUint32(emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.idle_threads, true) > 0) {
3142
3180
  cond.signal();
@@ -3146,6 +3184,7 @@
3146
3184
  cancelWork: function (work) {
3147
3185
  var cancelled = false;
3148
3186
  emnapiAWMT.getMutex().execute(function () {
3187
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.status + 4);
3149
3188
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3150
3189
  cancelled = !emnapiAWMT.queueEmpty(work + emnapiAWMT.offset.queue) && HEAP_DATA_VIEW.getInt32(work + emnapiAWMT.offset.status, true) !== 2 /* AsyncWorkStatus.Completed */;
3151
3190
  if (cancelled) {
@@ -3155,7 +3194,7 @@
3155
3194
  if (!cancelled) {
3156
3195
  return 9 /* napi_status.napi_generic_failure */;
3157
3196
  }
3158
- if (Atomics.compareExchange(new Int32Array(wasmMemory.buffer, work + emnapiAWMT.offset.status, 1), 0, 0 /* AsyncWorkStatus.Pending */, 1 /* AsyncWorkStatus.Cancelled */) !== 0 /* AsyncWorkStatus.Pending */) {
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 */) {
3159
3198
  return 9 /* napi_status.napi_generic_failure */;
3160
3199
  }
3161
3200
  emnapiCtx.feature.setImmediate(function () {
@@ -3182,7 +3221,7 @@
3182
3221
  var resource = emnapiAWMT.getResource(work);
3183
3222
  var resource_value = emnapiCtx.refStore.get(resource).get();
3184
3223
  var resourceObject = emnapiCtx.handleStore.get(resource_value).value;
3185
- var view = new DataView(wasmMemory.buffer);
3224
+ var view = new DataView(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.trigger_async_id + 8));
3186
3225
  var asyncId = view.getFloat64(work + emnapiAWMT.offset.async_id, true);
3187
3226
  var triggerAsyncId = view.getFloat64(work + emnapiAWMT.offset.trigger_async_id, true);
3188
3227
  emnapiNodeBinding.node.makeCallback(resourceObject, callback, [], {
@@ -3253,7 +3292,7 @@
3253
3292
  if (!aw)
3254
3293
  return envObject.setLastError(9 /* napi_status.napi_generic_failure */);
3255
3294
  aw >>>= 0;
3256
- new Uint8Array(wasmMemory.buffer).subarray(aw, aw + sizeofAW).fill(0);
3295
+ new Uint8Array(emnapiAWMT.ensureBufferFor(aw + sizeofAW)).subarray(aw, aw + sizeofAW).fill(0);
3257
3296
  var s = envObject.ensureHandleId(resourceObject);
3258
3297
  var resourceRef = emnapiCtx.createReference(envObject, s, 1, 1 /* ReferenceOwnership.kUserland */);
3259
3298
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -3296,7 +3335,7 @@
3296
3335
  var resource = emnapiAWMT.getResource(work);
3297
3336
  emnapiCtx.refStore.get(resource).dispose();
3298
3337
  if (emnapiNodeBinding) {
3299
- var view = new DataView(wasmMemory.buffer);
3338
+ var view = new DataView(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.trigger_async_id + 8));
3300
3339
  var asyncId = view.getFloat64(work + emnapiAWMT.offset.async_id, true);
3301
3340
  var triggerAsyncId = view.getFloat64(work + emnapiAWMT.offset.trigger_async_id, true);
3302
3341
  _emnapi_node_emit_async_destroy(asyncId, triggerAsyncId);
@@ -3364,10 +3403,11 @@
3364
3403
  var workerQueueAddr = globalAddress + emnapiAWMT.globalOffset.q;
3365
3404
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3366
3405
  for (;;) {
3406
+ emnapiAWMT.ensureBufferFor(workerQueueAddr + 4);
3367
3407
  while (emnapiAWMT.queueEmpty(workerQueueAddr)) {
3368
- Atomics.add(new Int32Array(wasmMemory.buffer, idleThreadsAddr, 1), 0, 1);
3408
+ Atomics.add(new Int32Array(emnapiAWMT.ensureBufferFor(idleThreadsAddr + 4), idleThreadsAddr, 1), 0, 1);
3369
3409
  cond.wait();
3370
- Atomics.sub(new Int32Array(wasmMemory.buffer, idleThreadsAddr, 1), 0, 1);
3410
+ Atomics.sub(new Int32Array(emnapiAWMT.ensureBufferFor(idleThreadsAddr + 4), idleThreadsAddr, 1), 0, 1);
3371
3411
  }
3372
3412
  var q = HEAP_DATA_VIEW.getUint32(workerQueueAddr, true);
3373
3413
  if (q === exitMessageAddr) {
@@ -3379,7 +3419,7 @@
3379
3419
  emnapiAWMT.queueRemove(q);
3380
3420
  emnapiAWMT.queueInit(q);
3381
3421
  mutex.unlock();
3382
- var statusBuffer = new Int32Array(wasmMemory.buffer, work + emnapiAWMT.offset.status, 1);
3422
+ var statusBuffer = new Int32Array(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.status + 4), work + emnapiAWMT.offset.status, 1);
3383
3423
  if (Atomics.load(statusBuffer, 0) === 1 /* AsyncWorkStatus.Cancelled */) {
3384
3424
  abort('unreachable');
3385
3425
  }
@@ -3589,6 +3629,75 @@
3589
3629
  return { address: address === 0 ? 0 : (address + view.byteOffset), ownership: ownership, runtimeAllocated: runtimeAllocated, view: view };
3590
3630
  }
3591
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
+ };
3592
3701
  /* eslint-disable @typescript-eslint/indent */
3593
3702
  /**
3594
3703
  * @__postset
@@ -5703,16 +5812,122 @@
5703
5812
  HEAP_DATA_VIEW.setUint32(version + 8, versions[2], true);
5704
5813
  return envObject.clearLastError();
5705
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
+ }
5706
5917
  var emnapiMod = /*#__PURE__*/ Object.freeze({
5707
5918
  __proto__: null,
5919
+ $emnapiAcquireExternalSharedArrayBuffer: $emnapiAcquireExternalSharedArrayBuffer,
5708
5920
  $emnapiGetMemoryAddress: $emnapiGetMemoryAddress,
5709
5921
  $emnapiSyncMemory: $emnapiSyncMemory,
5922
+ emnapi_acquire_external_sharedarraybuffer: emnapi_acquire_external_sharedarraybuffer,
5710
5923
  emnapi_create_memory_view: emnapi_create_memory_view,
5924
+ emnapi_get_external_sharedarraybuffer_handle: emnapi_get_external_sharedarraybuffer_handle,
5711
5925
  emnapi_get_memory_address: emnapi_get_memory_address,
5712
5926
  emnapi_get_runtime_version: emnapi_get_runtime_version,
5713
5927
  emnapi_is_node_binding_available: emnapi_is_node_binding_available,
5714
5928
  emnapi_is_support_bigint: emnapi_is_support_bigint,
5715
5929
  emnapi_is_support_weakref: emnapi_is_support_weakref,
5930
+ emnapi_release_external_sharedarraybuffer: emnapi_release_external_sharedarraybuffer,
5716
5931
  emnapi_sync_memory: emnapi_sync_memory
5717
5932
  });
5718
5933
  /**
@@ -5968,6 +6183,65 @@
5968
6183
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
5969
6184
  }
5970
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
+ }
5971
6245
  /**
5972
6246
  * @__sig ipp
5973
6247
  */
@@ -6088,9 +6362,6 @@
6088
6362
  if (!result)
6089
6363
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6090
6364
  var handle = emnapiCtx.handleStore.get(arraybuffer);
6091
- if (!handle.isArrayBuffer()) {
6092
- return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6093
- }
6094
6365
  var buffer = handle.value;
6095
6366
  byte_offset >>>= 0;
6096
6367
  length >>>= 0;
@@ -6131,36 +6402,41 @@
6131
6402
  HEAP_DATA_VIEW.setUint32(result, value, true);
6132
6403
  return envObject.getReturnStatus();
6133
6404
  };
6134
- switch (type) {
6135
- case 0 /* napi_typedarray_type.napi_int8_array */:
6136
- return createTypedArray(envObject, Int8Array, 1, buffer, byte_offset, length);
6137
- case 1 /* napi_typedarray_type.napi_uint8_array */:
6138
- return createTypedArray(envObject, Uint8Array, 1, buffer, byte_offset, length);
6139
- case 2 /* napi_typedarray_type.napi_uint8_clamped_array */:
6140
- return createTypedArray(envObject, Uint8ClampedArray, 1, buffer, byte_offset, length);
6141
- case 3 /* napi_typedarray_type.napi_int16_array */:
6142
- return createTypedArray(envObject, Int16Array, 2, buffer, byte_offset, length);
6143
- case 4 /* napi_typedarray_type.napi_uint16_array */:
6144
- return createTypedArray(envObject, Uint16Array, 2, buffer, byte_offset, length);
6145
- case 5 /* napi_typedarray_type.napi_int32_array */:
6146
- return createTypedArray(envObject, Int32Array, 4, buffer, byte_offset, length);
6147
- case 6 /* napi_typedarray_type.napi_uint32_array */:
6148
- return createTypedArray(envObject, Uint32Array, 4, buffer, byte_offset, length);
6149
- case 7 /* napi_typedarray_type.napi_float32_array */:
6150
- return createTypedArray(envObject, Float32Array, 4, buffer, byte_offset, length);
6151
- case 8 /* napi_typedarray_type.napi_float64_array */:
6152
- return createTypedArray(envObject, Float64Array, 8, buffer, byte_offset, length);
6153
- case 9 /* napi_typedarray_type.napi_bigint64_array */:
6154
- return createTypedArray(envObject, BigInt64Array, 8, buffer, byte_offset, length);
6155
- case 10 /* napi_typedarray_type.napi_biguint64_array */:
6156
- return createTypedArray(envObject, BigUint64Array, 8, buffer, byte_offset, length);
6157
- case 11 /* napi_typedarray_type.napi_float16_array */:
6158
- 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:
6159
6435
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6160
- }
6161
- return createTypedArray(envObject, Float16Array, 2, buffer, byte_offset, length);
6162
- default:
6163
- return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6436
+ }
6437
+ }
6438
+ else {
6439
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
6164
6440
  }
6165
6441
  }
6166
6442
  catch (err) {
@@ -6446,6 +6722,7 @@
6446
6722
  napi_create_symbol: napi_create_symbol,
6447
6723
  napi_create_typedarray: napi_create_typedarray,
6448
6724
  node_api_create_buffer_from_arraybuffer: node_api_create_buffer_from_arraybuffer,
6725
+ node_api_create_external_sharedarraybuffer: node_api_create_external_sharedarraybuffer,
6449
6726
  node_api_create_object_with_properties: node_api_create_object_with_properties,
6450
6727
  node_api_create_sharedarraybuffer: node_api_create_sharedarraybuffer,
6451
6728
  node_api_symbol_for: node_api_symbol_for
@@ -8866,11 +9143,13 @@
8866
9143
  });
8867
9144
  emnapiAWST.init();
8868
9145
  emnapiExternalMemory.init();
9146
+ emnapiExternalSAB.init();
8869
9147
  emnapiString.init();
8870
9148
  emnapiTSFN.init();
8871
9149
  PThread.init();
8872
9150
  napiModule.emnapi.syncMemory = $emnapiSyncMemory;
8873
9151
  napiModule.emnapi.getMemoryAddress = $emnapiGetMemoryAddress;
9152
+ napiModule.emnapi.acquireExternalSharedArrayBuffer = $emnapiAcquireExternalSharedArrayBuffer;
8874
9153
  function addImports(mod) {
8875
9154
  var keys = Object.keys(mod);
8876
9155
  for (var i = 0; i < keys.length; ++i) {
@@ -9212,7 +9491,7 @@
9212
9491
  // }
9213
9492
  // }
9214
9493
 
9215
- var version = "1.10.0";
9494
+ var version = "1.11.1";
9216
9495
 
9217
9496
  exports.MessageHandler = MessageHandler;
9218
9497
  exports.ThreadManager = ThreadManager;