@tailwindcss/oxide-wasm32-wasi 4.3.0 → 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 (46) 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/node_modules/@tybys/wasm-util/dist/wasm-util.esm-bundler.js +164 -2
  35. package/node_modules/@tybys/wasm-util/dist/wasm-util.esm.js +164 -2
  36. package/node_modules/@tybys/wasm-util/dist/wasm-util.esm.min.js +1 -1
  37. package/node_modules/@tybys/wasm-util/dist/wasm-util.js +164 -2
  38. package/node_modules/@tybys/wasm-util/dist/wasm-util.min.js +1 -1
  39. package/node_modules/@tybys/wasm-util/lib/cjs/wasi/path.js +142 -0
  40. package/node_modules/@tybys/wasm-util/lib/cjs/wasi/preview1.js +22 -2
  41. package/node_modules/@tybys/wasm-util/lib/mjs/wasi/path.mjs +142 -0
  42. package/node_modules/@tybys/wasm-util/lib/mjs/wasi/preview1.mjs +22 -2
  43. package/node_modules/@tybys/wasm-util/package.json +1 -1
  44. package/package.json +5 -5
  45. package/tailwindcss-oxide.wasm32-wasi.wasm +0 -0
  46. package/wasi-worker-browser.mjs +0 -2
@@ -127,10 +127,10 @@ function createNapiModule(options) {
127
127
  if (!(instance === null || instance === void 0 ? void 0 : instance.exports))
128
128
  throw new TypeError('Invalid wasm instance');
129
129
  wasmInstance = instance;
130
- var exports$1 = instance.exports;
130
+ var exports = instance.exports;
131
131
  var module = options.module;
132
- var memory = options.memory || exports$1.memory;
133
- var table = options.table || exports$1.__indirect_function_table;
132
+ var memory = options.memory || exports.memory;
133
+ var table = options.table || exports.__indirect_function_table;
134
134
  if (!(module instanceof _WebAssembly.Module))
135
135
  throw new TypeError('Invalid wasm module');
136
136
  if (!(memory instanceof _WebAssembly.Memory))
@@ -139,12 +139,12 @@ function createNapiModule(options) {
139
139
  throw new TypeError('Invalid wasm table');
140
140
  wasmMemory = memory;
141
141
  wasmTable = table;
142
- if (typeof exports$1.malloc !== 'function')
142
+ if (typeof exports.malloc !== 'function')
143
143
  throw new TypeError('malloc is not exported');
144
- if (typeof exports$1.free !== 'function')
144
+ if (typeof exports.free !== 'function')
145
145
  throw new TypeError('free is not exported');
146
- _malloc = exports$1.malloc;
147
- _free = exports$1.free;
146
+ _malloc = exports.malloc;
147
+ _free = exports.free;
148
148
  if (!napiModule.childThread) {
149
149
  // main thread only
150
150
  var moduleApiVersion = 8 /* Version.NODE_API_DEFAULT_MODULE_API_VERSION */;
@@ -157,11 +157,11 @@ function createNapiModule(options) {
157
157
  var scope_1 = emnapiCtx.openScope(envObject);
158
158
  try {
159
159
  envObject.callIntoModule(function (_envObject) {
160
- var exports$1 = napiModule.exports;
161
- var exportsHandle = scope_1.add(exports$1);
160
+ var exports = napiModule.exports;
161
+ var exportsHandle = scope_1.add(exports);
162
162
  var napi_register_wasm_v1 = instance.exports.napi_register_wasm_v1;
163
163
  var napiValue = napi_register_wasm_v1(_envObject.id, exportsHandle.id);
164
- napiModule.exports = (!napiValue) ? exports$1 : emnapiCtx.handleStore.get(napiValue).value;
164
+ napiModule.exports = (!napiValue) ? exports : emnapiCtx.handleStore.get(napiValue).value;
165
165
  });
166
166
  }
167
167
  catch (e) {
@@ -1059,7 +1059,7 @@ function createNapiModule(options) {
1059
1059
  emnapiTSFN.offset.mutex = emnapiTSFN.offset.mutex + 4;
1060
1060
  if (typeof PThread !== 'undefined') {
1061
1061
  PThread.unusedWorkers.forEach(emnapiTSFN.addListener);
1062
- PThread.runningWorkers.forEach(emnapiTSFN.addListener);
1062
+ Object.values(PThread.pthreads).forEach(emnapiTSFN.addListener);
1063
1063
  var __original_getNewWorker_1 = PThread.getNewWorker;
1064
1064
  PThread.getNewWorker = function () {
1065
1065
  var r = __original_getNewWorker_1.apply(this, arguments);
@@ -1081,7 +1081,7 @@ function createNapiModule(options) {
1081
1081
  var payload = __emnapi__.payload;
1082
1082
  if (type === 'tsfn-send') {
1083
1083
  var pendng = payload.tsfn + emnapiTSFN.offset.async_pending;
1084
- if (Atomics.load(new Int32Array(wasmMemory.buffer), pendng >>> 2) !== 0) {
1084
+ if (Atomics.load(new Int32Array(emnapiTSFN.ensureBufferFor(pendng + 4)), pendng >>> 2) !== 0) {
1085
1085
  emnapiTSFN.enqueue(payload.tsfn);
1086
1086
  }
1087
1087
  }
@@ -1105,13 +1105,28 @@ function createNapiModule(options) {
1105
1105
  }
1106
1106
  return true;
1107
1107
  },
1108
+ /**
1109
+ * When another thread grows the shared WebAssembly.Memory, this agent's
1110
+ * cached `wasmMemory.buffer` may still have the old shorter length
1111
+ * (V8 refreshes it lazily). If a pointer derived from shared memory lies
1112
+ * beyond the cached length, `wasmMemory.grow(0)` forces the agent to
1113
+ * observe the current memory size and refreshes the buffer.
1114
+ */
1115
+ ensureBufferFor: function (end) {
1116
+ var buffer = wasmMemory.buffer;
1117
+ if (end > buffer.byteLength) {
1118
+ wasmMemory.grow(0);
1119
+ buffer = wasmMemory.buffer;
1120
+ }
1121
+ return buffer;
1122
+ },
1108
1123
  initQueue: function (func) {
1109
1124
  var size = 2 * 4;
1110
1125
  var queue = _malloc(size);
1111
1126
  if (!queue)
1112
1127
  return false;
1113
1128
  queue >>>= 0;
1114
- new Uint8Array(wasmMemory.buffer, queue, size).fill(0);
1129
+ new Uint8Array(emnapiTSFN.ensureBufferFor(queue + size), queue, size).fill(0);
1115
1130
  emnapiTSFN.storeSizeTypeValue(func + emnapiTSFN.offset.queue, queue, false);
1116
1131
  return true;
1117
1132
  },
@@ -1218,7 +1233,7 @@ function createNapiModule(options) {
1218
1233
  var mutex = {
1219
1234
  lock: function () {
1220
1235
  var isBrowserMain = typeof window !== 'undefined' && typeof document !== 'undefined' && !ENVIRONMENT_IS_NODE;
1221
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
1236
+ var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
1222
1237
  if (isBrowserMain) {
1223
1238
  while (true) {
1224
1239
  var oldValue = Atomics.compareExchange(i32a, 0, 0, 10);
@@ -1241,7 +1256,7 @@ function createNapiModule(options) {
1241
1256
  return new Promise<void>(resolve => {
1242
1257
  const again = (): void => { fn() }
1243
1258
  const fn = (): void => {
1244
- const i32a = new Int32Array(wasmMemory.buffer, index, 1)
1259
+ const i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1)
1245
1260
  const oldValue = Atomics.compareExchange(i32a, 0, 0, 10)
1246
1261
  if (oldValue === 0) {
1247
1262
  resolve()
@@ -1253,7 +1268,7 @@ function createNapiModule(options) {
1253
1268
  })
1254
1269
  }, */
1255
1270
  unlock: function () {
1256
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
1271
+ var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
1257
1272
  var oldValue = Atomics.compareExchange(i32a, 0, 10, 0);
1258
1273
  if (oldValue !== 10) {
1259
1274
  throw new Error('Tried to unlock while not holding the mutex');
@@ -1287,14 +1302,14 @@ function createNapiModule(options) {
1287
1302
  var mutex = emnapiTSFN.getMutex(func);
1288
1303
  var cond = {
1289
1304
  wait: function () {
1290
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
1305
+ var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
1291
1306
  var value = Atomics.load(i32a, 0);
1292
1307
  mutex.unlock();
1293
1308
  Atomics.wait(i32a, 0, value);
1294
1309
  mutex.lock();
1295
1310
  },
1296
1311
  /* waitAsync () {
1297
- const i32a = new Int32Array(wasmMemory.buffer, index, 1)
1312
+ const i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1)
1298
1313
  const value = Atomics.load(i32a, 0)
1299
1314
  mutex.unlock()
1300
1315
  const lock = (): Promise<void> => mutex.lockAsync()
@@ -1305,7 +1320,7 @@ function createNapiModule(options) {
1305
1320
  }
1306
1321
  }, */
1307
1322
  signal: function () {
1308
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
1323
+ var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
1309
1324
  Atomics.add(i32a, 0, 1);
1310
1325
  Atomics.notify(i32a, 0, 1);
1311
1326
  }
@@ -1318,14 +1333,14 @@ function createNapiModule(options) {
1318
1333
  addQueueSize: function (func) {
1319
1334
  var offset = emnapiTSFN.offset.queue_size;
1320
1335
  var arr, index;
1321
- arr = new Uint32Array(wasmMemory.buffer);
1336
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4));
1322
1337
  index = (func + offset) >>> 2;
1323
1338
  Atomics.add(arr, index, 1);
1324
1339
  },
1325
1340
  subQueueSize: function (func) {
1326
1341
  var offset = emnapiTSFN.offset.queue_size;
1327
1342
  var arr, index;
1328
- arr = new Uint32Array(wasmMemory.buffer);
1343
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4));
1329
1344
  index = (func + offset) >>> 2;
1330
1345
  Atomics.sub(arr, index, 1);
1331
1346
  },
@@ -1335,31 +1350,31 @@ function createNapiModule(options) {
1335
1350
  addThreadCount: function (func) {
1336
1351
  var offset = emnapiTSFN.offset.thread_count;
1337
1352
  var arr, index;
1338
- arr = new Uint32Array(wasmMemory.buffer);
1353
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4));
1339
1354
  index = (func + offset) >>> 2;
1340
1355
  Atomics.add(arr, index, 1);
1341
1356
  },
1342
1357
  subThreadCount: function (func) {
1343
1358
  var offset = emnapiTSFN.offset.thread_count;
1344
1359
  var arr, index;
1345
- arr = new Uint32Array(wasmMemory.buffer);
1360
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4));
1346
1361
  index = (func + offset) >>> 2;
1347
1362
  Atomics.sub(arr, index, 1);
1348
1363
  },
1349
1364
  getState: function (func) {
1350
- return Atomics.load(new Int32Array(wasmMemory.buffer), (func + emnapiTSFN.offset.state) >>> 2);
1365
+ return Atomics.load(new Int32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.state + 4)), (func + emnapiTSFN.offset.state) >>> 2);
1351
1366
  },
1352
1367
  setState: function (func, value) {
1353
- Atomics.store(new Int32Array(wasmMemory.buffer), (func + emnapiTSFN.offset.state) >>> 2, value);
1368
+ Atomics.store(new Int32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.state + 4)), (func + emnapiTSFN.offset.state) >>> 2, value);
1354
1369
  },
1355
1370
  getHandlesClosing: function (func) {
1356
- return Atomics.load(new Int8Array(wasmMemory.buffer), (func + emnapiTSFN.offset.handles_closing));
1371
+ return Atomics.load(new Int8Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.handles_closing + 1)), (func + emnapiTSFN.offset.handles_closing));
1357
1372
  },
1358
1373
  setHandlesClosing: function (func, value) {
1359
- Atomics.store(new Int8Array(wasmMemory.buffer), (func + emnapiTSFN.offset.handles_closing), value);
1374
+ Atomics.store(new Int8Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.handles_closing + 1)), (func + emnapiTSFN.offset.handles_closing), value);
1360
1375
  },
1361
1376
  getDispatchState: function (func) {
1362
- return Atomics.load(new Uint32Array(wasmMemory.buffer), (func + emnapiTSFN.offset.dispatch_state) >>> 2);
1377
+ return Atomics.load(new Uint32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.dispatch_state + 4)), (func + emnapiTSFN.offset.dispatch_state) >>> 2);
1363
1378
  },
1364
1379
  getContext: function (func) {
1365
1380
  return emnapiTSFN.loadSizeTypeValue(func + emnapiTSFN.offset.context, false);
@@ -1389,12 +1404,12 @@ function createNapiModule(options) {
1389
1404
  var ret;
1390
1405
  var arr;
1391
1406
  if (unsigned) {
1392
- arr = new Uint32Array(wasmMemory.buffer);
1407
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(offset + 4));
1393
1408
  ret = Atomics.load(arr, offset >>> 2);
1394
1409
  return ret;
1395
1410
  }
1396
1411
  else {
1397
- arr = new Int32Array(wasmMemory.buffer);
1412
+ arr = new Int32Array(emnapiTSFN.ensureBufferFor(offset + 4));
1398
1413
  ret = Atomics.load(arr, offset >>> 2);
1399
1414
  return ret;
1400
1415
  }
@@ -1402,12 +1417,12 @@ function createNapiModule(options) {
1402
1417
  storeSizeTypeValue: function (offset, value, unsigned) {
1403
1418
  var arr;
1404
1419
  if (unsigned) {
1405
- arr = new Uint32Array(wasmMemory.buffer);
1420
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(offset + 4));
1406
1421
  Atomics.store(arr, offset >>> 2, value);
1407
1422
  return undefined;
1408
1423
  }
1409
1424
  else {
1410
- arr = new Int32Array(wasmMemory.buffer);
1425
+ arr = new Int32Array(emnapiTSFN.ensureBufferFor(offset + 4));
1411
1426
  Atomics.store(arr, offset >>> 2, value >>> 0);
1412
1427
  return undefined;
1413
1428
  }
@@ -1423,18 +1438,20 @@ function createNapiModule(options) {
1423
1438
  }
1424
1439
  var resource = emnapiTSFN.getResource(func);
1425
1440
  emnapiCtx.refStore.get(resource).dispose();
1441
+ emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.is_some + 1);
1426
1442
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
1427
1443
  HEAP_DATA_VIEW.setInt8(func + emnapiTSFN.offset.is_some, 0, true);
1428
1444
  emnapiCtx.removeCleanupHook(envObject, emnapiTSFN.cleanup, func);
1429
1445
  envObject.unref();
1430
- var asyncRefOffset = (func + emnapiTSFN.offset.async_ref) >>> 2;
1431
- var arr = new Uint32Array(wasmMemory.buffer);
1446
+ var asyncRefAddress = func + emnapiTSFN.offset.async_ref;
1447
+ var asyncRefOffset = asyncRefAddress >>> 2;
1448
+ var arr = new Uint32Array(emnapiTSFN.ensureBufferFor(asyncRefAddress + 4));
1432
1449
  if (Atomics.load(arr, asyncRefOffset) > 0) {
1433
1450
  Atomics.store(arr, asyncRefOffset, 0);
1434
1451
  emnapiCtx.decreaseWaitingRequestCounter();
1435
1452
  }
1436
1453
  if (emnapiNodeBinding) {
1437
- var view = new DataView(wasmMemory.buffer);
1454
+ var view = new DataView(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.trigger_async_id + 8));
1438
1455
  var asyncId = view.getFloat64(func + emnapiTSFN.offset.async_id, true);
1439
1456
  var triggerAsyncId = view.getFloat64(func + emnapiTSFN.offset.trigger_async_id, true);
1440
1457
  _emnapi_node_emit_async_destroy(asyncId, triggerAsyncId);
@@ -1499,7 +1516,7 @@ function createNapiModule(options) {
1499
1516
  var resource = emnapiTSFN.getResource(func);
1500
1517
  var resource_value = emnapiCtx.refStore.get(resource).get();
1501
1518
  var resourceObject = emnapiCtx.handleStore.get(resource_value).value;
1502
- var view = new DataView(wasmMemory.buffer);
1519
+ var view = new DataView(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.trigger_async_id + 8));
1503
1520
  var asyncId = view.getFloat64(func + emnapiTSFN.offset.async_id, true);
1504
1521
  var triggerAsyncId = view.getFloat64(func + emnapiTSFN.offset.trigger_async_id, true);
1505
1522
  emnapiNodeBinding.node.makeCallback(resourceObject, f, [], {
@@ -1537,7 +1554,7 @@ function createNapiModule(options) {
1537
1554
  return;
1538
1555
  }
1539
1556
  emnapiTSFN.setHandlesClosing(func, 1);
1540
- Atomics.store(new Int32Array(wasmMemory.buffer), (func + emnapiTSFN.offset.async_pending) >>> 2, 1);
1557
+ Atomics.store(new Int32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.async_pending + 4)), (func + emnapiTSFN.offset.async_pending) >>> 2, 1);
1541
1558
  emnapiCtx.feature.setImmediate(function () {
1542
1559
  emnapiTSFN.finalize(func);
1543
1560
  });
@@ -1609,7 +1626,7 @@ function createNapiModule(options) {
1609
1626
  var resource = emnapiTSFN.getResource(func);
1610
1627
  var resource_value = emnapiCtx.refStore.get(resource).get();
1611
1628
  var resourceObject = emnapiCtx.handleStore.get(resource_value).value;
1612
- var view = new DataView(wasmMemory.buffer);
1629
+ var view = new DataView(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.trigger_async_id + 8));
1613
1630
  emnapiNodeBinding.node.makeCallback(resourceObject, f, [], {
1614
1631
  asyncId: view.getFloat64(func + emnapiTSFN.offset.async_id, true),
1615
1632
  triggerAsyncId: view.getFloat64(func + emnapiTSFN.offset.trigger_async_id, true)
@@ -1628,8 +1645,9 @@ function createNapiModule(options) {
1628
1645
  dispatch: function (func) {
1629
1646
  var has_more = true;
1630
1647
  var iterations_left = 1000;
1631
- var ui32a = new Uint32Array(wasmMemory.buffer);
1632
- var index = (func + emnapiTSFN.offset.dispatch_state) >>> 2;
1648
+ var dispatchStateAddress = func + emnapiTSFN.offset.dispatch_state;
1649
+ var ui32a = new Uint32Array(emnapiTSFN.ensureBufferFor(dispatchStateAddress + 4));
1650
+ var index = dispatchStateAddress >>> 2;
1633
1651
  while (has_more && --iterations_left !== 0) {
1634
1652
  Atomics.store(ui32a, index, 1);
1635
1653
  has_more = emnapiTSFN.dispatchOne(func);
@@ -1648,7 +1666,7 @@ function createNapiModule(options) {
1648
1666
  // `scheduled` prevents queueing the same main-thread drain chain more than
1649
1667
  // once while a previous wakeup is still in flight.
1650
1668
  var scheduled = func + emnapiTSFN.offset.async_u_fd;
1651
- var i32a = new Int32Array(wasmMemory.buffer);
1669
+ var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(Math.max(pending, scheduled) + 4));
1652
1670
  if (Atomics.exchange(i32a, scheduled >>> 2, 1) !== 0) {
1653
1671
  return;
1654
1672
  }
@@ -1692,17 +1710,18 @@ function createNapiModule(options) {
1692
1710
  });
1693
1711
  },
1694
1712
  send: function (func) {
1695
- var current_state = Atomics.or(new Uint32Array(wasmMemory.buffer), (func + emnapiTSFN.offset.dispatch_state) >>> 2, 1 << 1);
1713
+ var dispatchStateAddress = func + emnapiTSFN.offset.dispatch_state;
1714
+ var current_state = Atomics.or(new Uint32Array(emnapiTSFN.ensureBufferFor(dispatchStateAddress + 4)), dispatchStateAddress >>> 2, 1 << 1);
1696
1715
  if ((current_state & 1) === 1) {
1697
1716
  return;
1698
1717
  }
1699
1718
  var pendng = func + emnapiTSFN.offset.async_pending;
1700
1719
  // A wakeup is already pending, so this send only needs to leave the queued
1701
1720
  // work in the TSFN queue and let the existing drain pick it up.
1702
- if (Atomics.load(new Int32Array(wasmMemory.buffer), pendng >>> 2) !== 0) {
1721
+ if (Atomics.load(new Int32Array(emnapiTSFN.ensureBufferFor(pendng + 4)), pendng >>> 2) !== 0) {
1703
1722
  return;
1704
1723
  }
1705
- if (Atomics.exchange(new Int32Array(wasmMemory.buffer), pendng >>> 2, 1) === 0) {
1724
+ if (Atomics.exchange(new Int32Array(emnapiTSFN.ensureBufferFor(pendng + 4)), pendng >>> 2, 1) === 0) {
1706
1725
  if ((typeof ENVIRONMENT_IS_PTHREAD !== 'undefined') && ENVIRONMENT_IS_PTHREAD) {
1707
1726
  // Worker threads only post a wakeup token. Main-thread draining is
1708
1727
  // serialized by enqueue() once the message is received.
@@ -1785,7 +1804,7 @@ function createNapiModule(options) {
1785
1804
  if (!tsfn)
1786
1805
  return envObject.setLastError(9 /* napi_status.napi_generic_failure */);
1787
1806
  tsfn >>>= 0;
1788
- new Uint8Array(wasmMemory.buffer).subarray(tsfn, tsfn + sizeofTSFN).fill(0);
1807
+ new Uint8Array(emnapiTSFN.ensureBufferFor(tsfn + sizeofTSFN)).subarray(tsfn, tsfn + sizeofTSFN).fill(0);
1789
1808
  var resourceRef = emnapiCtx.createReference(envObject, resource, 1, 1 /* ReferenceOwnership.kUserland */);
1790
1809
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1791
1810
  var resource_ = resourceRef.id;
@@ -1899,8 +1918,9 @@ function createNapiModule(options) {
1899
1918
  return 1 /* napi_status.napi_invalid_arg */;
1900
1919
  }
1901
1920
  func >>>= 0;
1902
- var asyncRefOffset = (func + emnapiTSFN.offset.async_ref) >>> 2;
1903
- var arr = new Uint32Array(wasmMemory.buffer);
1921
+ var asyncRefAddress = func + emnapiTSFN.offset.async_ref;
1922
+ var asyncRefOffset = asyncRefAddress >>> 2;
1923
+ var arr = new Uint32Array(emnapiTSFN.ensureBufferFor(asyncRefAddress + 4));
1904
1924
  var currentValue = Atomics.load(arr, asyncRefOffset);
1905
1925
  if (currentValue > 0) {
1906
1926
  Atomics.store(arr, asyncRefOffset, currentValue - 1);
@@ -1917,8 +1937,9 @@ function createNapiModule(options) {
1917
1937
  return 1 /* napi_status.napi_invalid_arg */;
1918
1938
  }
1919
1939
  func >>>= 0;
1920
- var asyncRefOffset = (func + emnapiTSFN.offset.async_ref) >>> 2;
1921
- var arr = new Uint32Array(wasmMemory.buffer);
1940
+ var asyncRefAddress = func + emnapiTSFN.offset.async_ref;
1941
+ var asyncRefOffset = asyncRefAddress >>> 2;
1942
+ var arr = new Uint32Array(emnapiTSFN.ensureBufferFor(asyncRefAddress + 4));
1922
1943
  var currentValue = Atomics.load(arr, asyncRefOffset);
1923
1944
  if (!currentValue) {
1924
1945
  emnapiCtx.increaseWaitingRequestCounter();
@@ -1954,12 +1975,27 @@ function createNapiModule(options) {
1954
1975
  /* napi_async_complete_callback */ complete: 6 * 4 + 24,
1955
1976
  end: 7 * 4 + 24
1956
1977
  },
1978
+ /**
1979
+ * When another thread grows the shared WebAssembly.Memory, this agent's
1980
+ * cached `wasmMemory.buffer` may still have the old shorter length
1981
+ * (V8 refreshes it lazily). If a pointer derived from shared memory lies
1982
+ * beyond the cached length, `wasmMemory.grow(0)` forces the agent to
1983
+ * observe the current memory size and refreshes the buffer.
1984
+ */
1985
+ ensureBufferFor: function (end) {
1986
+ var buffer = wasmMemory.buffer;
1987
+ if (end > buffer.byteLength) {
1988
+ wasmMemory.grow(0);
1989
+ buffer = wasmMemory.buffer;
1990
+ }
1991
+ return buffer;
1992
+ },
1957
1993
  init: function () {
1958
1994
  emnapiAWMT.pool = [];
1959
1995
  emnapiAWMT.workerReady = null;
1960
1996
  if (typeof PThread !== 'undefined') {
1961
1997
  PThread.unusedWorkers.forEach(emnapiAWMT.addListener);
1962
- PThread.runningWorkers.forEach(emnapiAWMT.addListener);
1998
+ Object.values(PThread.pthreads).forEach(emnapiAWMT.addListener);
1963
1999
  var __original_getNewWorker_1 = PThread.getNewWorker;
1964
2000
  PThread.getNewWorker = function () {
1965
2001
  var r = __original_getNewWorker_1.apply(this, arguments);
@@ -2008,7 +2044,7 @@ function createNapiModule(options) {
2008
2044
  emnapiAWMT.globalAddress >>>= 0;
2009
2045
  var size = emnapiAWMT.globalOffset.end;
2010
2046
  var addr = emnapiAWMT.globalAddress;
2011
- new Uint8Array(wasmMemory.buffer, addr, size).fill(0);
2047
+ new Uint8Array(emnapiAWMT.ensureBufferFor(addr + size), addr, size).fill(0);
2012
2048
  emnapiAWMT.queueInit(emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.q);
2013
2049
  emnapiAWMT.queueInit(emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.exit_message);
2014
2050
  }
@@ -2049,8 +2085,8 @@ function createNapiModule(options) {
2049
2085
  return worker.whenLoaded;
2050
2086
  }
2051
2087
  index >>>= 0;
2052
- var view = new DataView(wasmMemory.buffer);
2053
2088
  var tidOffset = 20;
2089
+ var view = new DataView(emnapiAWMT.ensureBufferFor(index + tidOffset + 4));
2054
2090
  var tid = view.getInt32(index + tidOffset, true);
2055
2091
  worker = PThread.pthreads[tid];
2056
2092
  return worker.whenLoaded;
@@ -2059,22 +2095,27 @@ function createNapiModule(options) {
2059
2095
  return emnapiAWMT.workerReady;
2060
2096
  },
2061
2097
  getResource: function (work) {
2098
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.resource + 4);
2062
2099
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2063
2100
  return HEAP_DATA_VIEW.getUint32(work + emnapiAWMT.offset.resource, true);
2064
2101
  },
2065
2102
  getExecute: function (work) {
2103
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.execute + 4);
2066
2104
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2067
2105
  return HEAP_DATA_VIEW.getUint32(work + emnapiAWMT.offset.execute, true);
2068
2106
  },
2069
2107
  getComplete: function (work) {
2108
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.complete + 4);
2070
2109
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2071
2110
  return HEAP_DATA_VIEW.getUint32(work + emnapiAWMT.offset.complete, true);
2072
2111
  },
2073
2112
  getEnv: function (work) {
2113
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.env + 4);
2074
2114
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2075
2115
  return HEAP_DATA_VIEW.getUint32(work + emnapiAWMT.offset.env, true);
2076
2116
  },
2077
2117
  getData: function (work) {
2118
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.data + 4);
2078
2119
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2079
2120
  return HEAP_DATA_VIEW.getUint32(work + emnapiAWMT.offset.data, true);
2080
2121
  },
@@ -2083,7 +2124,7 @@ function createNapiModule(options) {
2083
2124
  var mutex = {
2084
2125
  lock: function () {
2085
2126
  var isBrowserMain = typeof window !== 'undefined' && typeof document !== 'undefined' && !ENVIRONMENT_IS_NODE;
2086
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
2127
+ var i32a = new Int32Array(emnapiAWMT.ensureBufferFor(index + 4), index, 1);
2087
2128
  if (isBrowserMain) {
2088
2129
  while (true) {
2089
2130
  var oldValue = Atomics.compareExchange(i32a, 0, 0, 10);
@@ -2103,7 +2144,7 @@ function createNapiModule(options) {
2103
2144
  }
2104
2145
  },
2105
2146
  unlock: function () {
2106
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
2147
+ var i32a = new Int32Array(emnapiAWMT.ensureBufferFor(index + 4), index, 1);
2107
2148
  var oldValue = Atomics.compareExchange(i32a, 0, 10, 0);
2108
2149
  if (oldValue !== 10) {
2109
2150
  throw new Error('Tried to unlock while not holding the mutex');
@@ -2127,14 +2168,14 @@ function createNapiModule(options) {
2127
2168
  var mutex = emnapiAWMT.getMutex();
2128
2169
  var cond = {
2129
2170
  wait: function () {
2130
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
2171
+ var i32a = new Int32Array(emnapiAWMT.ensureBufferFor(index + 4), index, 1);
2131
2172
  var value = Atomics.load(i32a, 0);
2132
2173
  mutex.unlock();
2133
2174
  Atomics.wait(i32a, 0, value);
2134
2175
  mutex.lock();
2135
2176
  },
2136
2177
  signal: function () {
2137
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
2178
+ var i32a = new Int32Array(emnapiAWMT.ensureBufferFor(index + 4), index, 1);
2138
2179
  Atomics.add(i32a, 0, 1);
2139
2180
  Atomics.notify(i32a, 0, 1);
2140
2181
  }
@@ -2142,11 +2183,14 @@ function createNapiModule(options) {
2142
2183
  return cond;
2143
2184
  },
2144
2185
  queueInit: function (q) {
2186
+ emnapiAWMT.ensureBufferFor(q + 4 + 4);
2145
2187
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2146
2188
  HEAP_DATA_VIEW.setUint32(q, q, true);
2147
2189
  HEAP_DATA_VIEW.setUint32(q + 4, q, true);
2148
2190
  },
2149
2191
  queueInsertTail: function (h, q) {
2192
+ emnapiAWMT.ensureBufferFor(h + 4 + 4);
2193
+ emnapiAWMT.ensureBufferFor(q + 4 + 4);
2150
2194
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2151
2195
  HEAP_DATA_VIEW.setUint32(q, h, true);
2152
2196
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -2158,6 +2202,7 @@ function createNapiModule(options) {
2158
2202
  HEAP_DATA_VIEW.setUint32(h + 4, q, true);
2159
2203
  },
2160
2204
  queueRemove: function (q) {
2205
+ emnapiAWMT.ensureBufferFor(q + 4 + 4);
2161
2206
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2162
2207
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
2163
2208
  var qprev = HEAP_DATA_VIEW.getUint32(q + 4, true);
@@ -2167,6 +2212,7 @@ function createNapiModule(options) {
2167
2212
  HEAP_DATA_VIEW.setUint32(qnext + 4, qprev, true);
2168
2213
  },
2169
2214
  queueEmpty: function (q) {
2215
+ emnapiAWMT.ensureBufferFor(q + 4);
2170
2216
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2171
2217
  // eslint-disable-next-line eqeqeq
2172
2218
  return q == HEAP_DATA_VIEW.getUint32(q, true);
@@ -2182,7 +2228,7 @@ function createNapiModule(options) {
2182
2228
  });
2183
2229
  }
2184
2230
  emnapiCtx.increaseWaitingRequestCounter();
2185
- var statusBuffer = new Int32Array(wasmMemory.buffer, work + emnapiAWMT.offset.status, 1);
2231
+ var statusBuffer = new Int32Array(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.status + 4), work + emnapiAWMT.offset.status, 1);
2186
2232
  Atomics.store(statusBuffer, 0, 0 /* AsyncWorkStatus.Pending */);
2187
2233
  var mutex = emnapiAWMT.getMutex();
2188
2234
  var cond = emnapiAWMT.getCond();
@@ -2195,6 +2241,7 @@ function createNapiModule(options) {
2195
2241
  mutex.unlock();
2196
2242
  throw err;
2197
2243
  }
2244
+ emnapiAWMT.ensureBufferFor(emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.idle_threads + 4);
2198
2245
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2199
2246
  if (HEAP_DATA_VIEW.getUint32(emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.idle_threads, true) > 0) {
2200
2247
  cond.signal();
@@ -2204,6 +2251,7 @@ function createNapiModule(options) {
2204
2251
  cancelWork: function (work) {
2205
2252
  var cancelled = false;
2206
2253
  emnapiAWMT.getMutex().execute(function () {
2254
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.status + 4);
2207
2255
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2208
2256
  cancelled = !emnapiAWMT.queueEmpty(work + emnapiAWMT.offset.queue) && HEAP_DATA_VIEW.getInt32(work + emnapiAWMT.offset.status, true) !== 2 /* AsyncWorkStatus.Completed */;
2209
2257
  if (cancelled) {
@@ -2213,7 +2261,7 @@ function createNapiModule(options) {
2213
2261
  if (!cancelled) {
2214
2262
  return 9 /* napi_status.napi_generic_failure */;
2215
2263
  }
2216
- if (Atomics.compareExchange(new Int32Array(wasmMemory.buffer, work + emnapiAWMT.offset.status, 1), 0, 0 /* AsyncWorkStatus.Pending */, 1 /* AsyncWorkStatus.Cancelled */) !== 0 /* AsyncWorkStatus.Pending */) {
2264
+ 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 */) {
2217
2265
  return 9 /* napi_status.napi_generic_failure */;
2218
2266
  }
2219
2267
  emnapiCtx.feature.setImmediate(function () {
@@ -2240,7 +2288,7 @@ function createNapiModule(options) {
2240
2288
  var resource = emnapiAWMT.getResource(work);
2241
2289
  var resource_value = emnapiCtx.refStore.get(resource).get();
2242
2290
  var resourceObject = emnapiCtx.handleStore.get(resource_value).value;
2243
- var view = new DataView(wasmMemory.buffer);
2291
+ var view = new DataView(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.trigger_async_id + 8));
2244
2292
  var asyncId = view.getFloat64(work + emnapiAWMT.offset.async_id, true);
2245
2293
  var triggerAsyncId = view.getFloat64(work + emnapiAWMT.offset.trigger_async_id, true);
2246
2294
  emnapiNodeBinding.node.makeCallback(resourceObject, callback, [], {
@@ -2311,7 +2359,7 @@ function createNapiModule(options) {
2311
2359
  if (!aw)
2312
2360
  return envObject.setLastError(9 /* napi_status.napi_generic_failure */);
2313
2361
  aw >>>= 0;
2314
- new Uint8Array(wasmMemory.buffer).subarray(aw, aw + sizeofAW).fill(0);
2362
+ new Uint8Array(emnapiAWMT.ensureBufferFor(aw + sizeofAW)).subarray(aw, aw + sizeofAW).fill(0);
2315
2363
  var s = envObject.ensureHandleId(resourceObject);
2316
2364
  var resourceRef = emnapiCtx.createReference(envObject, s, 1, 1 /* ReferenceOwnership.kUserland */);
2317
2365
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -2354,7 +2402,7 @@ function createNapiModule(options) {
2354
2402
  var resource = emnapiAWMT.getResource(work);
2355
2403
  emnapiCtx.refStore.get(resource).dispose();
2356
2404
  if (emnapiNodeBinding) {
2357
- var view = new DataView(wasmMemory.buffer);
2405
+ var view = new DataView(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.trigger_async_id + 8));
2358
2406
  var asyncId = view.getFloat64(work + emnapiAWMT.offset.async_id, true);
2359
2407
  var triggerAsyncId = view.getFloat64(work + emnapiAWMT.offset.trigger_async_id, true);
2360
2408
  _emnapi_node_emit_async_destroy(asyncId, triggerAsyncId);
@@ -2422,10 +2470,11 @@ function createNapiModule(options) {
2422
2470
  var workerQueueAddr = globalAddress + emnapiAWMT.globalOffset.q;
2423
2471
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2424
2472
  for (;;) {
2473
+ emnapiAWMT.ensureBufferFor(workerQueueAddr + 4);
2425
2474
  while (emnapiAWMT.queueEmpty(workerQueueAddr)) {
2426
- Atomics.add(new Int32Array(wasmMemory.buffer, idleThreadsAddr, 1), 0, 1);
2475
+ Atomics.add(new Int32Array(emnapiAWMT.ensureBufferFor(idleThreadsAddr + 4), idleThreadsAddr, 1), 0, 1);
2427
2476
  cond.wait();
2428
- Atomics.sub(new Int32Array(wasmMemory.buffer, idleThreadsAddr, 1), 0, 1);
2477
+ Atomics.sub(new Int32Array(emnapiAWMT.ensureBufferFor(idleThreadsAddr + 4), idleThreadsAddr, 1), 0, 1);
2429
2478
  }
2430
2479
  var q = HEAP_DATA_VIEW.getUint32(workerQueueAddr, true);
2431
2480
  if (q === exitMessageAddr) {
@@ -2437,7 +2486,7 @@ function createNapiModule(options) {
2437
2486
  emnapiAWMT.queueRemove(q);
2438
2487
  emnapiAWMT.queueInit(q);
2439
2488
  mutex.unlock();
2440
- var statusBuffer = new Int32Array(wasmMemory.buffer, work + emnapiAWMT.offset.status, 1);
2489
+ var statusBuffer = new Int32Array(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.status + 4), work + emnapiAWMT.offset.status, 1);
2441
2490
  if (Atomics.load(statusBuffer, 0) === 1 /* AsyncWorkStatus.Cancelled */) {
2442
2491
  abort('unreachable');
2443
2492
  }
@@ -2647,6 +2696,75 @@ function createNapiModule(options) {
2647
2696
  return { address: address === 0 ? 0 : (address + view.byteOffset), ownership: ownership, runtimeAllocated: runtimeAllocated, view: view };
2648
2697
  }
2649
2698
  };
2699
+ /**
2700
+ * Metadata layout in wasm shared memory (allocated with _malloc):
2701
+ * offset 0: refcount (int32, 4 bytes - for Atomics)
2702
+ * offset POINTER_SIZE: external_data (pointer)
2703
+ * offset 2*POINTER_SIZE: byte_length (size_t)
2704
+ * offset 3*POINTER_SIZE: finalize_cb (pointer)
2705
+ * offset 4*POINTER_SIZE: finalize_data (pointer)
2706
+ * offset 5*POINTER_SIZE: finalize_hint (pointer)
2707
+ * Total: 6 * POINTER_SIZE bytes
2708
+ */
2709
+ /**
2710
+ * @__postset
2711
+ * ```
2712
+ * emnapiExternalSAB.init();
2713
+ * ```
2714
+ */
2715
+ var emnapiExternalSAB = {
2716
+ registry: undefined,
2717
+ handleTable: new WeakMap(),
2718
+ init: function () {
2719
+ emnapiExternalSAB.handleTable = new WeakMap();
2720
+ emnapiExternalSAB.registry = typeof FinalizationRegistry === 'function'
2721
+ ? new FinalizationRegistry(function (metaPtr) {
2722
+ emnapiExternalSAB.release(metaPtr);
2723
+ })
2724
+ : undefined;
2725
+ },
2726
+ allocMeta: function (external_data, byte_length, finalize_cb, finalize_data, finalize_hint) {
2727
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
2728
+ var size = 4 * 6;
2729
+ // eslint-disable-next-line prefer-const
2730
+ var metaPtr = _malloc(size);
2731
+ if (!metaPtr)
2732
+ throw new Error('Out of memory');
2733
+ metaPtr >>>= 0;
2734
+ // refcount = 1
2735
+ Atomics.store(new Int32Array(wasmMemory.buffer, metaPtr, 1), 0, 1);
2736
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2737
+ HEAP_DATA_VIEW.setUint32(metaPtr + 4, external_data, true);
2738
+ HEAP_DATA_VIEW.setUint32(metaPtr + 8, byte_length, true);
2739
+ HEAP_DATA_VIEW.setUint32(metaPtr + 12, finalize_cb, true);
2740
+ HEAP_DATA_VIEW.setUint32(metaPtr + 16, finalize_data, true);
2741
+ HEAP_DATA_VIEW.setUint32(metaPtr + 20, finalize_hint, true);
2742
+ return metaPtr;
2743
+ },
2744
+ readMeta: function (metaPtr) {
2745
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2746
+ var external_data = HEAP_DATA_VIEW.getUint32(metaPtr + 4, true);
2747
+ var byte_length = HEAP_DATA_VIEW.getUint32(metaPtr + 8, true);
2748
+ var finalize_cb = HEAP_DATA_VIEW.getUint32(metaPtr + 12, true);
2749
+ var finalize_data = HEAP_DATA_VIEW.getUint32(metaPtr + 16, true);
2750
+ var finalize_hint = HEAP_DATA_VIEW.getUint32(metaPtr + 20, true);
2751
+ return { external_data: external_data, byte_length: byte_length, finalize_cb: finalize_cb, finalize_data: finalize_data, finalize_hint: finalize_hint };
2752
+ },
2753
+ release: function (metaPtr) {
2754
+ var oldRefcount = Atomics.sub(new Int32Array(wasmMemory.buffer, metaPtr, 1), 0, 1);
2755
+ if (oldRefcount === 1) {
2756
+ // refcount reached 0, we are the last holder
2757
+ var info = emnapiExternalSAB.readMeta(metaPtr);
2758
+ var finalize_cb = info.finalize_cb;
2759
+ if (finalize_cb) {
2760
+ var finalize_data = info.finalize_data;
2761
+ var finalize_hint = info.finalize_hint;
2762
+ (wasmTable.get(finalize_cb))(finalize_data, finalize_hint);
2763
+ }
2764
+ _free(metaPtr);
2765
+ }
2766
+ }
2767
+ };
2650
2768
  /* eslint-disable @typescript-eslint/indent */
2651
2769
  /**
2652
2770
  * @__postset
@@ -4761,16 +4879,122 @@ function createNapiModule(options) {
4761
4879
  HEAP_DATA_VIEW.setUint32(version + 8, versions[2], true);
4762
4880
  return envObject.clearLastError();
4763
4881
  }
4882
+ /**
4883
+ * Get the handle for an external SharedArrayBuffer.
4884
+ * Must be called on the emnapi main thread.
4885
+ * @__sig ippp
4886
+ */
4887
+ function emnapi_get_external_sharedarraybuffer_handle(env, sharedarraybuffer, handle) {
4888
+ if (!env)
4889
+ return 1 /* napi_status.napi_invalid_arg */;
4890
+ // @ts-expect-error
4891
+ var envObject = emnapiCtx.envStore.get(env);
4892
+ envObject.checkGCAccess();
4893
+ if (!envObject.tryCatch.isEmpty())
4894
+ return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
4895
+ if (!envObject.canCallIntoJs())
4896
+ return envObject.setLastError(envObject.moduleApiVersion >= 10 ? 23 /* napi_status.napi_cannot_run_js */ : 10 /* napi_status.napi_pending_exception */);
4897
+ envObject.clearLastError();
4898
+ try {
4899
+ if (!sharedarraybuffer)
4900
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4901
+ if (!handle)
4902
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4903
+ handle >>>= 0;
4904
+ var jsValue = emnapiCtx.handleStore.get(sharedarraybuffer).value;
4905
+ if (!emnapiExternalMemory.isSharedArrayBuffer(jsValue)) {
4906
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4907
+ }
4908
+ var metaPtr = emnapiExternalSAB.handleTable.get(jsValue);
4909
+ if (metaPtr === undefined) {
4910
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4911
+ }
4912
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4913
+ HEAP_DATA_VIEW.setUint32(handle, metaPtr, true);
4914
+ return envObject.getReturnStatus();
4915
+ }
4916
+ catch (err) {
4917
+ envObject.tryCatch.setError(err);
4918
+ return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
4919
+ }
4920
+ }
4921
+ /**
4922
+ * Acquire a reference to an external SharedArrayBuffer.
4923
+ * Can be called on any thread.
4924
+ * @__sig vp
4925
+ */
4926
+ function emnapi_acquire_external_sharedarraybuffer(handle) {
4927
+ handle >>>= 0;
4928
+ Atomics.add(new Int32Array(wasmMemory.buffer, handle, 1), 0, 1);
4929
+ }
4930
+ /**
4931
+ * Release a reference to an external SharedArrayBuffer.
4932
+ * Can be called on any thread.
4933
+ * @__sig vp
4934
+ */
4935
+ function emnapi_release_external_sharedarraybuffer(handle) {
4936
+ handle >>>= 0;
4937
+ emnapiExternalSAB.release(handle);
4938
+ }
4939
+ /**
4940
+ * Acquire a reference to an external SharedArrayBuffer on the current thread.
4941
+ * Can be called on any thread. Increments refcount and registers in
4942
+ * the current thread's FinalizationRegistry.
4943
+ * Exposed as Module.emnapiAcquireExternalSharedArrayBuffer (emscripten) or
4944
+ * napiModule.emnapi.acquireExternalSharedArrayBuffer (core).
4945
+ */
4946
+ function $emnapiAcquireExternalSharedArrayBuffer(handle, sab) {
4947
+ if (sab != null && !emnapiExternalMemory.isSharedArrayBuffer(sab)) {
4948
+ throw new TypeError('Expected a SharedArrayBuffer');
4949
+ }
4950
+ if (!emnapiExternalSAB.registry) {
4951
+ throw new Error('FinalizationRegistry is not supported in this environment');
4952
+ }
4953
+ handle >>>= 0;
4954
+ var meta = emnapiExternalSAB.readMeta(handle);
4955
+ // eslint-disable-next-line prefer-const
4956
+ var external_data = meta.external_data;
4957
+ external_data >>>= 0;
4958
+ if (sab == null) {
4959
+ sab = new SharedArrayBuffer(meta.byte_length);
4960
+ new Uint8Array(sab).set(new Uint8Array(wasmMemory.buffer, external_data, meta.byte_length));
4961
+ }
4962
+ else {
4963
+ if (emnapiExternalSAB.handleTable.has(sab)) {
4964
+ return sab;
4965
+ }
4966
+ }
4967
+ // Increment refcount atomically
4968
+ Atomics.add(new Int32Array(wasmMemory.buffer, handle, 1), 0, 1);
4969
+ // Register in emnapiExternalMemory.table for emnapi_sync_memory support
4970
+ if (!emnapiExternalMemory.table.has(sab)) {
4971
+ if (external_data) {
4972
+ emnapiExternalMemory.table.set(sab, {
4973
+ address: external_data,
4974
+ ownership: 1 /* ReferenceOwnership.kUserland */,
4975
+ runtimeAllocated: 0
4976
+ });
4977
+ }
4978
+ }
4979
+ // Register in handleTable and FinalizationRegistry for this thread
4980
+ emnapiExternalSAB.handleTable.set(sab, handle);
4981
+ emnapiExternalSAB.registry.register(sab, handle);
4982
+ return sab;
4983
+ }
4764
4984
  var emnapiMod = /*#__PURE__*/ Object.freeze({
4765
4985
  __proto__: null,
4986
+ $emnapiAcquireExternalSharedArrayBuffer: $emnapiAcquireExternalSharedArrayBuffer,
4766
4987
  $emnapiGetMemoryAddress: $emnapiGetMemoryAddress,
4767
4988
  $emnapiSyncMemory: $emnapiSyncMemory,
4989
+ emnapi_acquire_external_sharedarraybuffer: emnapi_acquire_external_sharedarraybuffer,
4768
4990
  emnapi_create_memory_view: emnapi_create_memory_view,
4991
+ emnapi_get_external_sharedarraybuffer_handle: emnapi_get_external_sharedarraybuffer_handle,
4769
4992
  emnapi_get_memory_address: emnapi_get_memory_address,
4770
4993
  emnapi_get_runtime_version: emnapi_get_runtime_version,
4771
4994
  emnapi_is_node_binding_available: emnapi_is_node_binding_available,
4772
4995
  emnapi_is_support_bigint: emnapi_is_support_bigint,
4773
4996
  emnapi_is_support_weakref: emnapi_is_support_weakref,
4997
+ emnapi_release_external_sharedarraybuffer: emnapi_release_external_sharedarraybuffer,
4774
4998
  emnapi_sync_memory: emnapi_sync_memory
4775
4999
  });
4776
5000
  /**
@@ -5026,6 +5250,65 @@ function createNapiModule(options) {
5026
5250
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
5027
5251
  }
5028
5252
  }
5253
+ /**
5254
+ * @__sig ipppppp
5255
+ */
5256
+ function node_api_create_external_sharedarraybuffer(env, external_data, byte_length, finalize_cb, finalize_hint, result) {
5257
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
5258
+ var value;
5259
+ if (!env)
5260
+ return 1 /* napi_status.napi_invalid_arg */;
5261
+ // @ts-expect-error
5262
+ var envObject = emnapiCtx.envStore.get(env);
5263
+ envObject.checkGCAccess();
5264
+ if (!envObject.tryCatch.isEmpty())
5265
+ return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
5266
+ if (!envObject.canCallIntoJs())
5267
+ return envObject.setLastError(envObject.moduleApiVersion >= 10 ? 23 /* napi_status.napi_cannot_run_js */ : 10 /* napi_status.napi_pending_exception */);
5268
+ envObject.clearLastError();
5269
+ try {
5270
+ if (!result)
5271
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5272
+ byte_length >>>= 0;
5273
+ external_data >>>= 0;
5274
+ result >>>= 0;
5275
+ byte_length = byte_length >>> 0;
5276
+ if (!external_data) {
5277
+ byte_length = 0;
5278
+ }
5279
+ if ((external_data + byte_length) > wasmMemory.buffer.byteLength) {
5280
+ throw new RangeError('Memory out of range');
5281
+ }
5282
+ if (!emnapiExternalSAB.registry && finalize_cb) {
5283
+ throw emnapiCtx.createNotSupportWeakRefError('node_api_create_external_sharedarraybuffer', 'Parameter "finalize_cb" must be 0(NULL)');
5284
+ }
5285
+ var sharedArrayBuffer = new SharedArrayBuffer(byte_length);
5286
+ if (byte_length !== 0) {
5287
+ var u8arr = new Uint8Array(sharedArrayBuffer);
5288
+ u8arr.set(new Uint8Array(wasmMemory.buffer).subarray(external_data, external_data + byte_length));
5289
+ emnapiExternalMemory.table.set(sharedArrayBuffer, {
5290
+ address: external_data,
5291
+ ownership: 1 /* ReferenceOwnership.kUserland */,
5292
+ runtimeAllocated: 0
5293
+ });
5294
+ }
5295
+ value = emnapiCtx.addToCurrentScope(sharedArrayBuffer).id;
5296
+ if (finalize_cb) {
5297
+ finalize_cb >>>= 0;
5298
+ finalize_hint >>>= 0;
5299
+ var metaPtr = emnapiExternalSAB.allocMeta(external_data, byte_length, finalize_cb, external_data, finalize_hint);
5300
+ emnapiExternalSAB.handleTable.set(sharedArrayBuffer, metaPtr);
5301
+ emnapiExternalSAB.registry.register(sharedArrayBuffer, metaPtr);
5302
+ }
5303
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5304
+ HEAP_DATA_VIEW.setUint32(result, value, true);
5305
+ return envObject.getReturnStatus();
5306
+ }
5307
+ catch (err) {
5308
+ envObject.tryCatch.setError(err);
5309
+ return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
5310
+ }
5311
+ }
5029
5312
  /**
5030
5313
  * @__sig ipp
5031
5314
  */
@@ -5146,9 +5429,6 @@ function createNapiModule(options) {
5146
5429
  if (!result)
5147
5430
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5148
5431
  var handle = emnapiCtx.handleStore.get(arraybuffer);
5149
- if (!handle.isArrayBuffer()) {
5150
- return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5151
- }
5152
5432
  var buffer = handle.value;
5153
5433
  byte_offset >>>= 0;
5154
5434
  length >>>= 0;
@@ -5189,36 +5469,41 @@ function createNapiModule(options) {
5189
5469
  HEAP_DATA_VIEW.setUint32(result, value, true);
5190
5470
  return envObject.getReturnStatus();
5191
5471
  };
5192
- switch (type) {
5193
- case 0 /* napi_typedarray_type.napi_int8_array */:
5194
- return createTypedArray(envObject, Int8Array, 1, buffer, byte_offset, length);
5195
- case 1 /* napi_typedarray_type.napi_uint8_array */:
5196
- return createTypedArray(envObject, Uint8Array, 1, buffer, byte_offset, length);
5197
- case 2 /* napi_typedarray_type.napi_uint8_clamped_array */:
5198
- return createTypedArray(envObject, Uint8ClampedArray, 1, buffer, byte_offset, length);
5199
- case 3 /* napi_typedarray_type.napi_int16_array */:
5200
- return createTypedArray(envObject, Int16Array, 2, buffer, byte_offset, length);
5201
- case 4 /* napi_typedarray_type.napi_uint16_array */:
5202
- return createTypedArray(envObject, Uint16Array, 2, buffer, byte_offset, length);
5203
- case 5 /* napi_typedarray_type.napi_int32_array */:
5204
- return createTypedArray(envObject, Int32Array, 4, buffer, byte_offset, length);
5205
- case 6 /* napi_typedarray_type.napi_uint32_array */:
5206
- return createTypedArray(envObject, Uint32Array, 4, buffer, byte_offset, length);
5207
- case 7 /* napi_typedarray_type.napi_float32_array */:
5208
- return createTypedArray(envObject, Float32Array, 4, buffer, byte_offset, length);
5209
- case 8 /* napi_typedarray_type.napi_float64_array */:
5210
- return createTypedArray(envObject, Float64Array, 8, buffer, byte_offset, length);
5211
- case 9 /* napi_typedarray_type.napi_bigint64_array */:
5212
- return createTypedArray(envObject, BigInt64Array, 8, buffer, byte_offset, length);
5213
- case 10 /* napi_typedarray_type.napi_biguint64_array */:
5214
- return createTypedArray(envObject, BigUint64Array, 8, buffer, byte_offset, length);
5215
- case 11 /* napi_typedarray_type.napi_float16_array */:
5216
- if (typeof Float16Array !== 'function') {
5472
+ if (buffer instanceof ArrayBuffer || emnapiExternalMemory.isSharedArrayBuffer(buffer)) {
5473
+ switch (type) {
5474
+ case 0 /* napi_typedarray_type.napi_int8_array */:
5475
+ return createTypedArray(envObject, Int8Array, 1, buffer, byte_offset, length);
5476
+ case 1 /* napi_typedarray_type.napi_uint8_array */:
5477
+ return createTypedArray(envObject, Uint8Array, 1, buffer, byte_offset, length);
5478
+ case 2 /* napi_typedarray_type.napi_uint8_clamped_array */:
5479
+ return createTypedArray(envObject, Uint8ClampedArray, 1, buffer, byte_offset, length);
5480
+ case 3 /* napi_typedarray_type.napi_int16_array */:
5481
+ return createTypedArray(envObject, Int16Array, 2, buffer, byte_offset, length);
5482
+ case 4 /* napi_typedarray_type.napi_uint16_array */:
5483
+ return createTypedArray(envObject, Uint16Array, 2, buffer, byte_offset, length);
5484
+ case 5 /* napi_typedarray_type.napi_int32_array */:
5485
+ return createTypedArray(envObject, Int32Array, 4, buffer, byte_offset, length);
5486
+ case 6 /* napi_typedarray_type.napi_uint32_array */:
5487
+ return createTypedArray(envObject, Uint32Array, 4, buffer, byte_offset, length);
5488
+ case 7 /* napi_typedarray_type.napi_float32_array */:
5489
+ return createTypedArray(envObject, Float32Array, 4, buffer, byte_offset, length);
5490
+ case 8 /* napi_typedarray_type.napi_float64_array */:
5491
+ return createTypedArray(envObject, Float64Array, 8, buffer, byte_offset, length);
5492
+ case 9 /* napi_typedarray_type.napi_bigint64_array */:
5493
+ return createTypedArray(envObject, BigInt64Array, 8, buffer, byte_offset, length);
5494
+ case 10 /* napi_typedarray_type.napi_biguint64_array */:
5495
+ return createTypedArray(envObject, BigUint64Array, 8, buffer, byte_offset, length);
5496
+ case 11 /* napi_typedarray_type.napi_float16_array */:
5497
+ if (typeof Float16Array !== 'function') {
5498
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5499
+ }
5500
+ return createTypedArray(envObject, Float16Array, 2, buffer, byte_offset, length);
5501
+ default:
5217
5502
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5218
- }
5219
- return createTypedArray(envObject, Float16Array, 2, buffer, byte_offset, length);
5220
- default:
5221
- return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5503
+ }
5504
+ }
5505
+ else {
5506
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5222
5507
  }
5223
5508
  }
5224
5509
  catch (err) {
@@ -5504,6 +5789,7 @@ function createNapiModule(options) {
5504
5789
  napi_create_symbol: napi_create_symbol,
5505
5790
  napi_create_typedarray: napi_create_typedarray,
5506
5791
  node_api_create_buffer_from_arraybuffer: node_api_create_buffer_from_arraybuffer,
5792
+ node_api_create_external_sharedarraybuffer: node_api_create_external_sharedarraybuffer,
5507
5793
  node_api_create_object_with_properties: node_api_create_object_with_properties,
5508
5794
  node_api_create_sharedarraybuffer: node_api_create_sharedarraybuffer,
5509
5795
  node_api_symbol_for: node_api_symbol_for
@@ -7924,11 +8210,13 @@ function createNapiModule(options) {
7924
8210
  });
7925
8211
  emnapiAWST.init();
7926
8212
  emnapiExternalMemory.init();
8213
+ emnapiExternalSAB.init();
7927
8214
  emnapiString.init();
7928
8215
  emnapiTSFN.init();
7929
8216
  PThread.init();
7930
8217
  napiModule.emnapi.syncMemory = $emnapiSyncMemory;
7931
8218
  napiModule.emnapi.getMemoryAddress = $emnapiGetMemoryAddress;
8219
+ napiModule.emnapi.acquireExternalSharedArrayBuffer = $emnapiAcquireExternalSharedArrayBuffer;
7932
8220
  function addImports(mod) {
7933
8221
  var keys = Object.keys(mod);
7934
8222
  for (var i = 0; i < keys.length; ++i) {
@@ -8223,6 +8511,6 @@ var MessageHandler = /*#__PURE__*/ (function (_super) {
8223
8511
  // }
8224
8512
  // }
8225
8513
 
8226
- var version = "1.10.0";
8514
+ var version = "1.11.1";
8227
8515
 
8228
8516
  export { MessageHandler, createNapiModule, instantiateNapiModule, instantiateNapiModuleSync, loadNapiModule, loadNapiModuleSync, version };