@tailwindcss/oxide-wasm32-wasi 0.0.0-insiders.b4f3d17 → 0.0.0-insiders.b53fa09

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/node_modules/@emnapi/core/dist/emnapi-core.cjs.js +1188 -370
  2. package/node_modules/@emnapi/core/dist/emnapi-core.cjs.min.d.ts +3 -3
  3. package/node_modules/@emnapi/core/dist/emnapi-core.cjs.min.js +1 -1
  4. package/node_modules/@emnapi/core/dist/emnapi-core.d.mts +3 -3
  5. package/node_modules/@emnapi/core/dist/emnapi-core.d.ts +3 -3
  6. package/node_modules/@emnapi/core/dist/emnapi-core.esm-bundler.js +1295 -375
  7. package/node_modules/@emnapi/core/dist/emnapi-core.js +1321 -413
  8. package/node_modules/@emnapi/core/dist/emnapi-core.min.d.mts +3 -3
  9. package/node_modules/@emnapi/core/dist/emnapi-core.min.js +1 -1
  10. package/node_modules/@emnapi/core/dist/emnapi-core.min.mjs +1 -1
  11. package/node_modules/@emnapi/core/dist/emnapi-core.mjs +1188 -370
  12. package/node_modules/@emnapi/core/package.json +2 -2
  13. package/node_modules/@emnapi/runtime/dist/emnapi.cjs.js +32 -5
  14. package/node_modules/@emnapi/runtime/dist/emnapi.cjs.min.d.ts +11 -3
  15. package/node_modules/@emnapi/runtime/dist/emnapi.cjs.min.js +1 -1
  16. package/node_modules/@emnapi/runtime/dist/emnapi.d.mts +11 -3
  17. package/node_modules/@emnapi/runtime/dist/emnapi.d.ts +11 -3
  18. package/node_modules/@emnapi/runtime/dist/emnapi.esm-bundler.js +33 -5
  19. package/node_modules/@emnapi/runtime/dist/emnapi.iife.d.ts +8 -2
  20. package/node_modules/@emnapi/runtime/dist/emnapi.iife.js +33 -5
  21. package/node_modules/@emnapi/runtime/dist/emnapi.js +33 -5
  22. package/node_modules/@emnapi/runtime/dist/emnapi.min.d.mts +11 -3
  23. package/node_modules/@emnapi/runtime/dist/emnapi.min.js +1 -1
  24. package/node_modules/@emnapi/runtime/dist/emnapi.min.mjs +1 -1
  25. package/node_modules/@emnapi/runtime/dist/emnapi.mjs +32 -5
  26. package/node_modules/@emnapi/runtime/package.json +1 -1
  27. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.cjs.js +21 -33
  28. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.cjs.min.d.ts +2 -1
  29. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.cjs.min.js +1 -1
  30. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.d.mts +2 -1
  31. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.d.ts +2 -1
  32. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.esm-bundler.js +21 -33
  33. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.js +21 -33
  34. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.min.d.mts +2 -1
  35. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.min.js +1 -1
  36. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.min.mjs +1 -1
  37. package/node_modules/@emnapi/wasi-threads/dist/wasi-threads.mjs +21 -33
  38. package/node_modules/@emnapi/wasi-threads/package.json +1 -1
  39. package/node_modules/@napi-rs/wasm-runtime/dist/fs-proxy.cjs +47 -12
  40. package/node_modules/@napi-rs/wasm-runtime/dist/fs.js +9665 -5416
  41. package/node_modules/@napi-rs/wasm-runtime/fs-proxy.js +47 -12
  42. package/node_modules/@napi-rs/wasm-runtime/package.json +18 -11
  43. package/node_modules/@tybys/wasm-util/dist/wasm-util.esm-bundler.js +164 -2
  44. package/node_modules/@tybys/wasm-util/dist/wasm-util.esm.js +164 -2
  45. package/node_modules/@tybys/wasm-util/dist/wasm-util.esm.min.js +1 -1
  46. package/node_modules/@tybys/wasm-util/dist/wasm-util.js +164 -2
  47. package/node_modules/@tybys/wasm-util/dist/wasm-util.min.js +1 -1
  48. package/node_modules/@tybys/wasm-util/lib/cjs/wasi/path.js +142 -0
  49. package/node_modules/@tybys/wasm-util/lib/cjs/wasi/preview1.js +22 -2
  50. package/node_modules/@tybys/wasm-util/lib/mjs/wasi/path.mjs +142 -0
  51. package/node_modules/@tybys/wasm-util/lib/mjs/wasi/preview1.mjs +22 -2
  52. package/node_modules/@tybys/wasm-util/package.json +1 -1
  53. package/package.json +7 -7
  54. package/tailwindcss-oxide.wasi-browser.js +1 -0
  55. package/tailwindcss-oxide.wasi.cjs +1 -1
  56. package/tailwindcss-oxide.wasm32-wasi.wasm +0 -0
  57. package/wasi-worker-browser.mjs +2 -0
@@ -108,7 +108,6 @@ function createNapiModule(options) {
108
108
  filename: '',
109
109
  childThread: ENVIRONMENT_IS_PTHREAD,
110
110
  initWorker: undefined,
111
- executeAsyncWork: undefined,
112
111
  waitThreadStart: waitThreadStart,
113
112
  PThread: undefined,
114
113
  init: function (options) {
@@ -120,10 +119,10 @@ function createNapiModule(options) {
120
119
  if (!(instance === null || instance === void 0 ? void 0 : instance.exports))
121
120
  throw new TypeError('Invalid wasm instance');
122
121
  wasmInstance = instance;
123
- var exports$1 = instance.exports;
122
+ var exports = instance.exports;
124
123
  var module = options.module;
125
- var memory = options.memory || exports$1.memory;
126
- var table = options.table || exports$1.__indirect_function_table;
124
+ var memory = options.memory || exports.memory;
125
+ var table = options.table || exports.__indirect_function_table;
127
126
  if (!(module instanceof _WebAssembly.Module))
128
127
  throw new TypeError('Invalid wasm module');
129
128
  if (!(memory instanceof _WebAssembly.Memory))
@@ -132,12 +131,12 @@ function createNapiModule(options) {
132
131
  throw new TypeError('Invalid wasm table');
133
132
  wasmMemory = memory;
134
133
  wasmTable = table;
135
- if (typeof exports$1.malloc !== 'function')
134
+ if (typeof exports.malloc !== 'function')
136
135
  throw new TypeError('malloc is not exported');
137
- if (typeof exports$1.free !== 'function')
136
+ if (typeof exports.free !== 'function')
138
137
  throw new TypeError('free is not exported');
139
- _malloc = exports$1.malloc;
140
- _free = exports$1.free;
138
+ _malloc = exports.malloc;
139
+ _free = exports.free;
141
140
  if (!napiModule.childThread) {
142
141
  var moduleApiVersion = 8;
143
142
  var node_api_module_get_api_version_v1 = instance.exports.node_api_module_get_api_version_v1;
@@ -148,11 +147,11 @@ function createNapiModule(options) {
148
147
  var scope_1 = emnapiCtx.openScope(envObject);
149
148
  try {
150
149
  envObject.callIntoModule(function (_envObject) {
151
- var exports$1 = napiModule.exports;
152
- var exportsHandle = scope_1.add(exports$1);
150
+ var exports = napiModule.exports;
151
+ var exportsHandle = scope_1.add(exports);
153
152
  var napi_register_wasm_v1 = instance.exports.napi_register_wasm_v1;
154
153
  var napiValue = napi_register_wasm_v1(_envObject.id, exportsHandle.id);
155
- napiModule.exports = (!napiValue) ? exports$1 : emnapiCtx.handleStore.get(napiValue).value;
154
+ napiModule.exports = (!napiValue) ? exports : emnapiCtx.handleStore.get(napiValue).value;
156
155
  });
157
156
  }
158
157
  catch (e) {
@@ -296,6 +295,9 @@ function createNapiModule(options) {
296
295
  return envObject.clearLastError();
297
296
  }
298
297
  function _emnapi_get_node_version(major, minor, patch) {
298
+ major >>>= 0;
299
+ minor >>>= 0;
300
+ patch >>>= 0;
299
301
  var versions = (typeof process === 'object' && process !== null &&
300
302
  typeof process.versions === 'object' && process.versions !== null &&
301
303
  typeof process.versions.node === 'string')
@@ -339,6 +341,7 @@ function createNapiModule(options) {
339
341
  }
340
342
  function _emnapi_call_finalizer(forceUncaught, env, callback, data, hint) {
341
343
  var envObject = emnapiCtx.envStore.get(env);
344
+ callback >>>= 0;
342
345
  envObject.callFinalizerInternal(forceUncaught, callback, data, hint);
343
346
  }
344
347
  function _emnapi_ctx_increase_waiting_request_counter() {
@@ -403,9 +406,19 @@ function createNapiModule(options) {
403
406
  var worker = PThread.pthreads[tid];
404
407
  return worker;
405
408
  }
409
+ function _emnapi_worker_ref(pthreadPtr) {
410
+ if (ENVIRONMENT_IS_PTHREAD)
411
+ return;
412
+ pthreadPtr >>>= 0;
413
+ var worker = emnapiGetWorkerByPthreadPtr(pthreadPtr);
414
+ if (worker && typeof worker.ref === 'function') {
415
+ worker.ref();
416
+ }
417
+ }
406
418
  function _emnapi_worker_unref(pthreadPtr) {
407
419
  if (ENVIRONMENT_IS_PTHREAD)
408
420
  return;
421
+ pthreadPtr >>>= 0;
409
422
  var worker = emnapiGetWorkerByPthreadPtr(pthreadPtr);
410
423
  if (worker && typeof worker.unref === 'function') {
411
424
  worker.unref();
@@ -506,6 +519,7 @@ function createNapiModule(options) {
506
519
  _emnapi_async_send_js: _emnapi_async_send_js,
507
520
  _emnapi_emit_async_thread_ready: _emnapi_emit_async_thread_ready,
508
521
  _emnapi_tell_js_uvthreadpool: _emnapi_tell_js_uvthreadpool,
522
+ _emnapi_worker_ref: _emnapi_worker_ref,
509
523
  _emnapi_worker_unref: _emnapi_worker_unref
510
524
  });
511
525
  function napi_adjust_external_memory(env, change_in_bytes, adjusted_value) {
@@ -514,22 +528,14 @@ function createNapiModule(options) {
514
528
  var envObject = emnapiCtx.envStore.get(env);
515
529
  if (!adjusted_value)
516
530
  return envObject.setLastError(1);
517
- var change_in_bytes_number = Number(change_in_bytes);
518
- if (change_in_bytes_number < 0) {
519
- return envObject.setLastError(1);
520
- }
521
- var old_size = wasmMemory.buffer.byteLength;
522
- var new_size = old_size + change_in_bytes_number;
523
- new_size = new_size + ((65536 - new_size % 65536) % 65536);
524
- if (wasmMemory.grow((new_size - old_size + 65535) >> 16) === -1) {
525
- return envObject.setLastError(9);
526
- }
531
+ var adjusted_memory = emnapiCtx.adjustAmountOfExternalAllocatedMemory(change_in_bytes);
532
+ adjusted_value >>>= 0;
527
533
  if (emnapiCtx.feature.supportBigInt) {
528
534
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
529
- HEAP_DATA_VIEW.setBigInt64(adjusted_value, BigInt(wasmMemory.buffer.byteLength), true);
535
+ HEAP_DATA_VIEW.setBigInt64(adjusted_value, BigInt(adjusted_memory), true);
530
536
  }
531
537
  else {
532
- $emnapiSetValueI64(adjusted_value, wasmMemory.buffer.byteLength);
538
+ $emnapiSetValueI64(adjusted_value, Number(adjusted_memory));
533
539
  }
534
540
  return envObject.clearLastError();
535
541
  }
@@ -687,6 +693,7 @@ function createNapiModule(options) {
687
693
  var asyncId = asyncContext.asyncId;
688
694
  var triggerAsyncId = asyncContext.triggerAsyncId;
689
695
  if (result) {
696
+ result >>>= 0;
690
697
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
691
698
  HEAP_DATA_VIEW.setFloat64(result, asyncId, true);
692
699
  HEAP_DATA_VIEW.setFloat64(result + 8, triggerAsyncId, true);
@@ -707,6 +714,8 @@ function createNapiModule(options) {
707
714
  return;
708
715
  var resource = emnapiCtx.handleStore.get(async_resource).value;
709
716
  var callback = emnapiCtx.handleStore.get(cb).value;
717
+ argv >>>= 0;
718
+ size >>>= 0;
710
719
  size = size >>> 0;
711
720
  var arr = Array(size);
712
721
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -719,6 +728,7 @@ function createNapiModule(options) {
719
728
  triggerAsyncId: trigger_async_id
720
729
  });
721
730
  if (result) {
731
+ result >>>= 0;
722
732
  var envObject = emnapiCtx.envStore.get(env);
723
733
  v = envObject.ensureHandleId(ret);
724
734
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -745,6 +755,7 @@ function createNapiModule(options) {
745
755
  }
746
756
  var low = Number(numberValue & BigInt(0xffffffff));
747
757
  var high = Number(numberValue >> BigInt(32));
758
+ result >>>= 0;
748
759
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
749
760
  HEAP_DATA_VIEW.setInt32(result, low, true);
750
761
  HEAP_DATA_VIEW.setInt32(result + 4, high, true);
@@ -754,6 +765,7 @@ function createNapiModule(options) {
754
765
  if (!emnapiNodeBinding) {
755
766
  return 9;
756
767
  }
768
+ async_context >>>= 0;
757
769
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
758
770
  var low = HEAP_DATA_VIEW.getInt32(async_context, true);
759
771
  var high = HEAP_DATA_VIEW.getInt32(async_context + 4, true);
@@ -796,10 +808,13 @@ function createNapiModule(options) {
796
808
  if (typeof v8func !== 'function') {
797
809
  return envObject.setLastError(1);
798
810
  }
811
+ async_context >>>= 0;
799
812
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
800
813
  var low = HEAP_DATA_VIEW.getInt32(async_context, true);
801
814
  var high = HEAP_DATA_VIEW.getInt32(async_context + 4, true);
802
815
  var ctx = BigInt(low >>> 0) | (BigInt(high) << BigInt(32));
816
+ argv >>>= 0;
817
+ argc >>>= 0;
803
818
  argc = argc >>> 0;
804
819
  var arr = Array(argc);
805
820
  for (; i < argc; i++) {
@@ -813,6 +828,7 @@ function createNapiModule(options) {
813
828
  if (ret.status !== 0)
814
829
  return envObject.setLastError(ret.status);
815
830
  if (result) {
831
+ result >>>= 0;
816
832
  v = envObject.ensureHandleId(ret.value);
817
833
  HEAP_DATA_VIEW.setUint32(result, v, true);
818
834
  }
@@ -840,32 +856,61 @@ function createNapiModule(options) {
840
856
  napi_open_callback_scope: napi_open_callback_scope
841
857
  });
842
858
  var emnapiTSFN = {
859
+ _liveSet: {},
843
860
  offset: {
861
+ __size__: 0,
844
862
  resource: 0,
845
- async_id: 8,
846
- trigger_async_id: 16,
847
- queue_size: 24,
848
- queue: 1 * 4 + 24,
849
- thread_count: 2 * 4 + 24,
850
- is_closing: 3 * 4 + 24,
851
- dispatch_state: 3 * 4 + 28,
852
- context: 3 * 4 + 32,
853
- max_queue_size: 4 * 4 + 32,
854
- ref: 5 * 4 + 32,
855
- env: 6 * 4 + 32,
856
- finalize_data: 7 * 4 + 32,
857
- finalize_cb: 8 * 4 + 32,
858
- call_js_cb: 9 * 4 + 32,
859
- handles_closing: 10 * 4 + 32,
860
- async_ref: 10 * 4 + 36,
861
- mutex: 10 * 4 + 40,
862
- cond: 10 * 4 + 44,
863
- end: 10 * 4 + 48
863
+ async_id: 0,
864
+ trigger_async_id: 0,
865
+ queue_size: 0,
866
+ is_some: 0,
867
+ queue: 0,
868
+ async_pending: 0,
869
+ async_u_fd: 0,
870
+ thread_count: 0,
871
+ state: 0,
872
+ dispatch_state: 0,
873
+ context: 0,
874
+ max_queue_size: 0,
875
+ ref: 0,
876
+ env: 0,
877
+ finalize_data: 0,
878
+ finalize_cb: 0,
879
+ call_js_cb: 0,
880
+ handles_closing: 0,
881
+ async_ref: 0,
882
+ mutex: 0,
883
+ cond: 0
864
884
  },
865
885
  init: function () {
886
+ emnapiTSFN._liveSet = new Set();
887
+ emnapiTSFN.offset.__size__ = 184;
888
+ emnapiTSFN.offset.resource = 0;
889
+ emnapiTSFN.offset.async_id = 8;
890
+ emnapiTSFN.offset.trigger_async_id = 16;
891
+ emnapiTSFN.offset.queue_size = 60;
892
+ emnapiTSFN.offset.is_some = 24;
893
+ emnapiTSFN.offset.queue = 64;
894
+ emnapiTSFN.offset.async_pending = 132;
895
+ emnapiTSFN.offset.async_u_fd = 96;
896
+ emnapiTSFN.offset.thread_count = 136;
897
+ emnapiTSFN.offset.state = 140;
898
+ emnapiTSFN.offset.dispatch_state = 144;
899
+ emnapiTSFN.offset.context = 148;
900
+ emnapiTSFN.offset.max_queue_size = 152;
901
+ emnapiTSFN.offset.ref = 156;
902
+ emnapiTSFN.offset.env = 160;
903
+ emnapiTSFN.offset.finalize_data = 164;
904
+ emnapiTSFN.offset.finalize_cb = 168;
905
+ emnapiTSFN.offset.call_js_cb = 172;
906
+ emnapiTSFN.offset.handles_closing = 176;
907
+ emnapiTSFN.offset.async_ref = 180;
908
+ emnapiTSFN.offset.mutex = 32;
909
+ emnapiTSFN.offset.cond = 56;
910
+ emnapiTSFN.offset.mutex = emnapiTSFN.offset.mutex + 4;
866
911
  if (typeof PThread !== 'undefined') {
867
912
  PThread.unusedWorkers.forEach(emnapiTSFN.addListener);
868
- PThread.runningWorkers.forEach(emnapiTSFN.addListener);
913
+ Object.values(PThread.pthreads).forEach(emnapiTSFN.addListener);
869
914
  var __original_getNewWorker_1 = PThread.getNewWorker;
870
915
  PThread.getNewWorker = function () {
871
916
  var r = __original_getNewWorker_1.apply(this, arguments);
@@ -886,7 +931,10 @@ function createNapiModule(options) {
886
931
  var type = __emnapi__.type;
887
932
  var payload = __emnapi__.payload;
888
933
  if (type === 'tsfn-send') {
889
- emnapiTSFN.dispatch(payload.tsfn);
934
+ var pendng = payload.tsfn + emnapiTSFN.offset.async_pending;
935
+ if (Atomics.load(new Int32Array(emnapiTSFN.ensureBufferFor(pendng + 4)), pendng >>> 2) !== 0) {
936
+ emnapiTSFN.enqueue(payload.tsfn);
937
+ }
890
938
  }
891
939
  }
892
940
  };
@@ -908,18 +956,33 @@ function createNapiModule(options) {
908
956
  }
909
957
  return true;
910
958
  },
959
+ ensureBufferFor: function (end) {
960
+ var buffer = wasmMemory.buffer;
961
+ if (end > buffer.byteLength) {
962
+ wasmMemory.grow(0);
963
+ buffer = wasmMemory.buffer;
964
+ }
965
+ return buffer;
966
+ },
911
967
  initQueue: function (func) {
912
968
  var size = 2 * 4;
913
969
  var queue = _malloc(size);
914
970
  if (!queue)
915
971
  return false;
916
- new Uint8Array(wasmMemory.buffer, queue, size).fill(0);
972
+ queue >>>= 0;
973
+ new Uint8Array(emnapiTSFN.ensureBufferFor(queue + size), queue, size).fill(0);
917
974
  emnapiTSFN.storeSizeTypeValue(func + emnapiTSFN.offset.queue, queue, false);
918
975
  return true;
919
976
  },
920
977
  destroyQueue: function (func) {
921
978
  var queue = emnapiTSFN.loadSizeTypeValue(func + emnapiTSFN.offset.queue, false);
922
979
  if (queue) {
980
+ var node = emnapiTSFN.loadSizeTypeValue(queue, false);
981
+ while (node !== 0) {
982
+ var next = emnapiTSFN.loadSizeTypeValue(node + 4, false);
983
+ _free(node);
984
+ node = next;
985
+ }
923
986
  _free(queue);
924
987
  }
925
988
  },
@@ -931,6 +994,7 @@ function createNapiModule(options) {
931
994
  var node = _malloc(size);
932
995
  if (!node)
933
996
  throw new Error('OOM');
997
+ node >>>= 0;
934
998
  emnapiTSFN.storeSizeTypeValue(node, data, false);
935
999
  emnapiTSFN.storeSizeTypeValue(node + 4, 0, false);
936
1000
  if (head === 0 && tail === 0) {
@@ -966,11 +1030,11 @@ function createNapiModule(options) {
966
1030
  var waitCondition = function () {
967
1031
  var queueSize = emnapiTSFN.getQueueSize(func);
968
1032
  var maxSize = emnapiTSFN.getMaxQueueSize(func);
969
- var isClosing = emnapiTSFN.getIsClosing(func);
970
- return queueSize >= maxSize && maxSize > 0 && !isClosing;
1033
+ return queueSize >= maxSize && maxSize > 0 && emnapiTSFN.getState(func) === 0;
971
1034
  };
972
1035
  var isBrowserMain = typeof window !== 'undefined' && typeof document !== 'undefined' && !ENVIRONMENT_IS_NODE;
973
- return mutex.execute(function () {
1036
+ var shouldDelete = false;
1037
+ var ret = mutex.execute(function () {
974
1038
  while (waitCondition()) {
975
1039
  if (mode === 0) {
976
1040
  return 15;
@@ -980,31 +1044,35 @@ function createNapiModule(options) {
980
1044
  }
981
1045
  cond.wait();
982
1046
  }
983
- if (emnapiTSFN.getIsClosing(func)) {
984
- if (emnapiTSFN.getThreadCount(func) === 0) {
985
- return 1;
986
- }
987
- else {
988
- emnapiTSFN.subThreadCount(func);
989
- return 16;
990
- }
991
- }
992
- else {
1047
+ if (emnapiTSFN.getState(func) === 0) {
993
1048
  emnapiTSFN.pushQueue(func, data);
994
1049
  emnapiTSFN.send(func);
995
1050
  return 0;
996
1051
  }
1052
+ if (emnapiTSFN.getThreadCount(func) === 0) {
1053
+ return 1;
1054
+ }
1055
+ emnapiTSFN.subThreadCount(func);
1056
+ if (!(emnapiTSFN.getState(func) === 2 && emnapiTSFN.getThreadCount(func) === 0)) {
1057
+ return 16;
1058
+ }
1059
+ shouldDelete = true;
1060
+ return 16;
997
1061
  });
1062
+ if (shouldDelete) {
1063
+ emnapiTSFN.destroy(func);
1064
+ }
1065
+ return ret;
998
1066
  },
999
1067
  getMutex: function (func) {
1000
1068
  var index = func + emnapiTSFN.offset.mutex;
1001
1069
  var mutex = {
1002
1070
  lock: function () {
1003
1071
  var isBrowserMain = typeof window !== 'undefined' && typeof document !== 'undefined' && !ENVIRONMENT_IS_NODE;
1004
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
1072
+ var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
1005
1073
  if (isBrowserMain) {
1006
1074
  while (true) {
1007
- var oldValue = Atomics.compareExchange(i32a, 0, 0, 1);
1075
+ var oldValue = Atomics.compareExchange(i32a, 0, 0, 10);
1008
1076
  if (oldValue === 0) {
1009
1077
  return;
1010
1078
  }
@@ -1012,18 +1080,18 @@ function createNapiModule(options) {
1012
1080
  }
1013
1081
  else {
1014
1082
  while (true) {
1015
- var oldValue = Atomics.compareExchange(i32a, 0, 0, 1);
1083
+ var oldValue = Atomics.compareExchange(i32a, 0, 0, 10);
1016
1084
  if (oldValue === 0) {
1017
1085
  return;
1018
1086
  }
1019
- Atomics.wait(i32a, 0, 1);
1087
+ Atomics.wait(i32a, 0, 10);
1020
1088
  }
1021
1089
  }
1022
1090
  },
1023
1091
  unlock: function () {
1024
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
1025
- var oldValue = Atomics.compareExchange(i32a, 0, 1, 0);
1026
- if (oldValue !== 1) {
1092
+ var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
1093
+ var oldValue = Atomics.compareExchange(i32a, 0, 10, 0);
1094
+ if (oldValue !== 10) {
1027
1095
  throw new Error('Tried to unlock while not holding the mutex');
1028
1096
  }
1029
1097
  Atomics.notify(i32a, 0, 1);
@@ -1045,14 +1113,14 @@ function createNapiModule(options) {
1045
1113
  var mutex = emnapiTSFN.getMutex(func);
1046
1114
  var cond = {
1047
1115
  wait: function () {
1048
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
1116
+ var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
1049
1117
  var value = Atomics.load(i32a, 0);
1050
1118
  mutex.unlock();
1051
1119
  Atomics.wait(i32a, 0, value);
1052
1120
  mutex.lock();
1053
1121
  },
1054
1122
  signal: function () {
1055
- var i32a = new Int32Array(wasmMemory.buffer, index, 1);
1123
+ var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
1056
1124
  Atomics.add(i32a, 0, 1);
1057
1125
  Atomics.notify(i32a, 0, 1);
1058
1126
  }
@@ -1065,15 +1133,15 @@ function createNapiModule(options) {
1065
1133
  addQueueSize: function (func) {
1066
1134
  var offset = emnapiTSFN.offset.queue_size;
1067
1135
  var arr, index;
1068
- arr = new Uint32Array(wasmMemory.buffer);
1069
- index = (func + offset) >> 2;
1136
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4));
1137
+ index = (func + offset) >>> 2;
1070
1138
  Atomics.add(arr, index, 1);
1071
1139
  },
1072
1140
  subQueueSize: function (func) {
1073
1141
  var offset = emnapiTSFN.offset.queue_size;
1074
1142
  var arr, index;
1075
- arr = new Uint32Array(wasmMemory.buffer);
1076
- index = (func + offset) >> 2;
1143
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4));
1144
+ index = (func + offset) >>> 2;
1077
1145
  Atomics.sub(arr, index, 1);
1078
1146
  },
1079
1147
  getThreadCount: function (func) {
@@ -1082,31 +1150,31 @@ function createNapiModule(options) {
1082
1150
  addThreadCount: function (func) {
1083
1151
  var offset = emnapiTSFN.offset.thread_count;
1084
1152
  var arr, index;
1085
- arr = new Uint32Array(wasmMemory.buffer);
1086
- index = (func + offset) >> 2;
1153
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4));
1154
+ index = (func + offset) >>> 2;
1087
1155
  Atomics.add(arr, index, 1);
1088
1156
  },
1089
1157
  subThreadCount: function (func) {
1090
1158
  var offset = emnapiTSFN.offset.thread_count;
1091
1159
  var arr, index;
1092
- arr = new Uint32Array(wasmMemory.buffer);
1093
- index = (func + offset) >> 2;
1160
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4));
1161
+ index = (func + offset) >>> 2;
1094
1162
  Atomics.sub(arr, index, 1);
1095
1163
  },
1096
- getIsClosing: function (func) {
1097
- return Atomics.load(new Int32Array(wasmMemory.buffer), (func + emnapiTSFN.offset.is_closing) >> 2);
1164
+ getState: function (func) {
1165
+ return Atomics.load(new Int32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.state + 4)), (func + emnapiTSFN.offset.state) >>> 2);
1098
1166
  },
1099
- setIsClosing: function (func, value) {
1100
- Atomics.store(new Int32Array(wasmMemory.buffer), (func + emnapiTSFN.offset.is_closing) >> 2, value);
1167
+ setState: function (func, value) {
1168
+ Atomics.store(new Int32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.state + 4)), (func + emnapiTSFN.offset.state) >>> 2, value);
1101
1169
  },
1102
1170
  getHandlesClosing: function (func) {
1103
- return Atomics.load(new Int32Array(wasmMemory.buffer), (func + emnapiTSFN.offset.handles_closing) >> 2);
1171
+ return Atomics.load(new Int8Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.handles_closing + 1)), (func + emnapiTSFN.offset.handles_closing));
1104
1172
  },
1105
1173
  setHandlesClosing: function (func, value) {
1106
- Atomics.store(new Int32Array(wasmMemory.buffer), (func + emnapiTSFN.offset.handles_closing) >> 2, value);
1174
+ Atomics.store(new Int8Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.handles_closing + 1)), (func + emnapiTSFN.offset.handles_closing), value);
1107
1175
  },
1108
1176
  getDispatchState: function (func) {
1109
- return Atomics.load(new Uint32Array(wasmMemory.buffer), (func + emnapiTSFN.offset.dispatch_state) >> 2);
1177
+ return Atomics.load(new Uint32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.dispatch_state + 4)), (func + emnapiTSFN.offset.dispatch_state) >>> 2);
1110
1178
  },
1111
1179
  getContext: function (func) {
1112
1180
  return emnapiTSFN.loadSizeTypeValue(func + emnapiTSFN.offset.context, false);
@@ -1136,66 +1204,96 @@ function createNapiModule(options) {
1136
1204
  var ret;
1137
1205
  var arr;
1138
1206
  if (unsigned) {
1139
- arr = new Uint32Array(wasmMemory.buffer);
1140
- ret = Atomics.load(arr, offset >> 2);
1207
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(offset + 4));
1208
+ ret = Atomics.load(arr, offset >>> 2);
1141
1209
  return ret;
1142
1210
  }
1143
1211
  else {
1144
- arr = new Int32Array(wasmMemory.buffer);
1145
- ret = Atomics.load(arr, offset >> 2);
1212
+ arr = new Int32Array(emnapiTSFN.ensureBufferFor(offset + 4));
1213
+ ret = Atomics.load(arr, offset >>> 2);
1146
1214
  return ret;
1147
1215
  }
1148
1216
  },
1149
1217
  storeSizeTypeValue: function (offset, value, unsigned) {
1150
1218
  var arr;
1151
1219
  if (unsigned) {
1152
- arr = new Uint32Array(wasmMemory.buffer);
1153
- Atomics.store(arr, offset >> 2, value);
1220
+ arr = new Uint32Array(emnapiTSFN.ensureBufferFor(offset + 4));
1221
+ Atomics.store(arr, offset >>> 2, value);
1154
1222
  return undefined;
1155
1223
  }
1156
1224
  else {
1157
- arr = new Int32Array(wasmMemory.buffer);
1158
- Atomics.store(arr, offset >> 2, value >>> 0);
1225
+ arr = new Int32Array(emnapiTSFN.ensureBufferFor(offset + 4));
1226
+ Atomics.store(arr, offset >>> 2, value >>> 0);
1159
1227
  return undefined;
1160
1228
  }
1161
1229
  },
1230
+ releaseResources: function (func) {
1231
+ if (emnapiTSFN.getState(func) !== 2) {
1232
+ emnapiTSFN.setState(func, 2);
1233
+ var env = emnapiTSFN.getEnv(func);
1234
+ var envObject = emnapiCtx.envStore.get(env);
1235
+ var ref = emnapiTSFN.getRef(func);
1236
+ if (ref) {
1237
+ emnapiCtx.refStore.get(ref).dispose();
1238
+ }
1239
+ var resource = emnapiTSFN.getResource(func);
1240
+ emnapiCtx.refStore.get(resource).dispose();
1241
+ emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.is_some + 1);
1242
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
1243
+ HEAP_DATA_VIEW.setInt8(func + emnapiTSFN.offset.is_some, 0, true);
1244
+ emnapiCtx.removeCleanupHook(envObject, emnapiTSFN.cleanup, func);
1245
+ envObject.unref();
1246
+ var asyncRefAddress = func + emnapiTSFN.offset.async_ref;
1247
+ var asyncRefOffset = asyncRefAddress >>> 2;
1248
+ var arr = new Uint32Array(emnapiTSFN.ensureBufferFor(asyncRefAddress + 4));
1249
+ if (Atomics.load(arr, asyncRefOffset) > 0) {
1250
+ Atomics.store(arr, asyncRefOffset, 0);
1251
+ emnapiCtx.decreaseWaitingRequestCounter();
1252
+ }
1253
+ if (emnapiNodeBinding) {
1254
+ var view = new DataView(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.trigger_async_id + 8));
1255
+ var asyncId = view.getFloat64(func + emnapiTSFN.offset.async_id, true);
1256
+ var triggerAsyncId = view.getFloat64(func + emnapiTSFN.offset.trigger_async_id, true);
1257
+ _emnapi_node_emit_async_destroy(asyncId, triggerAsyncId);
1258
+ }
1259
+ }
1260
+ },
1162
1261
  destroy: function (func) {
1262
+ emnapiTSFN._liveSet.delete(func);
1163
1263
  emnapiTSFN.destroyQueue(func);
1164
- var env = emnapiTSFN.getEnv(func);
1165
- var envObject = emnapiCtx.envStore.get(env);
1166
- var ref = emnapiTSFN.getRef(func);
1167
- if (ref) {
1168
- emnapiCtx.refStore.get(ref).dispose();
1169
- }
1170
- emnapiCtx.removeCleanupHook(envObject, emnapiTSFN.cleanup, func);
1171
- envObject.unref();
1172
- var asyncRefOffset = (func + emnapiTSFN.offset.async_ref) >> 2;
1173
- var arr = new Int32Array(wasmMemory.buffer);
1174
- if (Atomics.load(arr, asyncRefOffset)) {
1175
- Atomics.store(arr, asyncRefOffset, 0);
1176
- emnapiCtx.decreaseWaitingRequestCounter();
1177
- }
1178
- var resource = emnapiTSFN.getResource(func);
1179
- emnapiCtx.refStore.get(resource).dispose();
1180
- if (emnapiNodeBinding) {
1181
- var view = new DataView(wasmMemory.buffer);
1182
- var asyncId = view.getFloat64(func + emnapiTSFN.offset.async_id, true);
1183
- var triggerAsyncId = view.getFloat64(func + emnapiTSFN.offset.trigger_async_id, true);
1184
- _emnapi_node_emit_async_destroy(asyncId, triggerAsyncId);
1185
- }
1264
+ emnapiTSFN.releaseResources(func);
1186
1265
  _free(func);
1187
1266
  },
1188
- emptyQueueAndDelete: function (func) {
1267
+ emptyQueue: function (func) {
1268
+ var drainQueue = [];
1269
+ emnapiTSFN.getMutex(func).execute(function () {
1270
+ while (emnapiTSFN.getQueueSize(func) > 0) {
1271
+ drainQueue.push(emnapiTSFN.shiftQueue(func));
1272
+ }
1273
+ });
1189
1274
  var callJsCb = emnapiTSFN.getCallJSCb(func);
1190
1275
  var context = emnapiTSFN.getContext(func);
1191
1276
  var data;
1192
- while (emnapiTSFN.getQueueSize(func) > 0) {
1193
- data = emnapiTSFN.shiftQueue(func);
1277
+ for (var i = 0; i < drainQueue.length; i++) {
1278
+ data = drainQueue[i];
1194
1279
  if (callJsCb) {
1195
1280
  (wasmTable.get(callJsCb))(0, 0, context, data);
1196
1281
  }
1197
1282
  }
1198
- emnapiTSFN.destroy(func);
1283
+ },
1284
+ maybeDelete: function (func) {
1285
+ var shouldDelete = false;
1286
+ emnapiTSFN.getMutex(func).execute(function () {
1287
+ if (emnapiTSFN.getThreadCount(func) > 0) {
1288
+ emnapiTSFN.releaseResources(func);
1289
+ }
1290
+ else {
1291
+ shouldDelete = true;
1292
+ }
1293
+ });
1294
+ if (shouldDelete) {
1295
+ emnapiTSFN.destroy(func);
1296
+ }
1199
1297
  },
1200
1298
  finalize: function (func) {
1201
1299
  var env = emnapiTSFN.getEnv(func);
@@ -1208,12 +1306,13 @@ function createNapiModule(options) {
1208
1306
  envObject.callFinalizerInternal(0, finalize, data, context);
1209
1307
  };
1210
1308
  try {
1309
+ emnapiTSFN.emptyQueue(func);
1211
1310
  if (finalize) {
1212
1311
  if (emnapiNodeBinding) {
1213
1312
  var resource = emnapiTSFN.getResource(func);
1214
1313
  var resource_value = emnapiCtx.refStore.get(resource).get();
1215
1314
  var resourceObject = emnapiCtx.handleStore.get(resource_value).value;
1216
- var view = new DataView(wasmMemory.buffer);
1315
+ var view = new DataView(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.trigger_async_id + 8));
1217
1316
  var asyncId = view.getFloat64(func + emnapiTSFN.offset.async_id, true);
1218
1317
  var triggerAsyncId = view.getFloat64(func + emnapiTSFN.offset.trigger_async_id, true);
1219
1318
  emnapiNodeBinding.node.makeCallback(resourceObject, f, [], {
@@ -1225,7 +1324,7 @@ function createNapiModule(options) {
1225
1324
  f();
1226
1325
  }
1227
1326
  }
1228
- emnapiTSFN.emptyQueueAndDelete(func);
1327
+ emnapiTSFN.maybeDelete(func);
1229
1328
  }
1230
1329
  finally {
1231
1330
  emnapiCtx.closeScope(envObject);
@@ -1241,7 +1340,7 @@ function createNapiModule(options) {
1241
1340
  try {
1242
1341
  if (set_closing) {
1243
1342
  emnapiTSFN.getMutex(func).execute(function () {
1244
- emnapiTSFN.setIsClosing(func, 1);
1343
+ emnapiTSFN.setState(func, 1);
1245
1344
  if (emnapiTSFN.getMaxQueueSize(func) > 0) {
1246
1345
  emnapiTSFN.getCond(func).signal();
1247
1346
  }
@@ -1251,6 +1350,7 @@ function createNapiModule(options) {
1251
1350
  return;
1252
1351
  }
1253
1352
  emnapiTSFN.setHandlesClosing(func, 1);
1353
+ Atomics.store(new Int32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.async_pending + 4)), (func + emnapiTSFN.offset.async_pending) >>> 2, 1);
1254
1354
  emnapiCtx.feature.setImmediate(function () {
1255
1355
  emnapiTSFN.finalize(func);
1256
1356
  });
@@ -1266,10 +1366,7 @@ function createNapiModule(options) {
1266
1366
  var mutex = emnapiTSFN.getMutex(func);
1267
1367
  var cond = emnapiTSFN.getCond(func);
1268
1368
  mutex.execute(function () {
1269
- if (emnapiTSFN.getIsClosing(func)) {
1270
- emnapiTSFN.closeHandlesAndMaybeDelete(func, 0);
1271
- }
1272
- else {
1369
+ if (emnapiTSFN.getState(func) === 0) {
1273
1370
  var size = emnapiTSFN.getQueueSize(func);
1274
1371
  if (size > 0) {
1275
1372
  data = emnapiTSFN.shiftQueue(func);
@@ -1282,7 +1379,7 @@ function createNapiModule(options) {
1282
1379
  }
1283
1380
  if (size === 0) {
1284
1381
  if (emnapiTSFN.getThreadCount(func) === 0) {
1285
- emnapiTSFN.setIsClosing(func, 1);
1382
+ emnapiTSFN.setState(func, 1);
1286
1383
  if (emnapiTSFN.getMaxQueueSize(func) > 0) {
1287
1384
  cond.signal();
1288
1385
  }
@@ -1293,6 +1390,9 @@ function createNapiModule(options) {
1293
1390
  has_more = true;
1294
1391
  }
1295
1392
  }
1393
+ else {
1394
+ emnapiTSFN.closeHandlesAndMaybeDelete(func, 0);
1395
+ }
1296
1396
  });
1297
1397
  if (popped_value) {
1298
1398
  var env = emnapiTSFN.getEnv(func);
@@ -1320,7 +1420,7 @@ function createNapiModule(options) {
1320
1420
  var resource = emnapiTSFN.getResource(func);
1321
1421
  var resource_value = emnapiCtx.refStore.get(resource).get();
1322
1422
  var resourceObject = emnapiCtx.handleStore.get(resource_value).value;
1323
- var view = new DataView(wasmMemory.buffer);
1423
+ var view = new DataView(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.trigger_async_id + 8));
1324
1424
  emnapiNodeBinding.node.makeCallback(resourceObject, f, [], {
1325
1425
  asyncId: view.getFloat64(func + emnapiTSFN.offset.async_id, true),
1326
1426
  triggerAsyncId: view.getFloat64(func + emnapiTSFN.offset.trigger_async_id, true)
@@ -1339,8 +1439,9 @@ function createNapiModule(options) {
1339
1439
  dispatch: function (func) {
1340
1440
  var has_more = true;
1341
1441
  var iterations_left = 1000;
1342
- var ui32a = new Uint32Array(wasmMemory.buffer);
1343
- var index = (func + emnapiTSFN.offset.dispatch_state) >> 2;
1442
+ var dispatchStateAddress = func + emnapiTSFN.offset.dispatch_state;
1443
+ var ui32a = new Uint32Array(emnapiTSFN.ensureBufferFor(dispatchStateAddress + 4));
1444
+ var index = dispatchStateAddress >>> 2;
1344
1445
  while (has_more && --iterations_left !== 0) {
1345
1446
  Atomics.store(ui32a, index, 1);
1346
1447
  has_more = emnapiTSFN.dispatchOne(func);
@@ -1352,25 +1453,66 @@ function createNapiModule(options) {
1352
1453
  emnapiTSFN.send(func);
1353
1454
  }
1354
1455
  },
1355
- send: function (func) {
1356
- var current_state = Atomics.or(new Uint32Array(wasmMemory.buffer), (func + emnapiTSFN.offset.dispatch_state) >> 2, 1 << 1);
1357
- if ((current_state & 1) === 1) {
1456
+ enqueue: function (func) {
1457
+ var pending = func + emnapiTSFN.offset.async_pending;
1458
+ var scheduled = func + emnapiTSFN.offset.async_u_fd;
1459
+ var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(Math.max(pending, scheduled) + 4));
1460
+ if (Atomics.exchange(i32a, scheduled >>> 2, 1) !== 0) {
1358
1461
  return;
1359
1462
  }
1360
- if ((typeof ENVIRONMENT_IS_PTHREAD !== 'undefined') && ENVIRONMENT_IS_PTHREAD) {
1361
- postMessage({
1362
- __emnapi__: {
1363
- type: 'tsfn-send',
1364
- payload: {
1365
- tsfn: func
1463
+ emnapiCtx.feature.setImmediate(function () {
1464
+ if (!emnapiTSFN._liveSet.has(func)) {
1465
+ return;
1466
+ }
1467
+ if (Atomics.load(i32a, pending >>> 2) === 0) {
1468
+ Atomics.store(i32a, scheduled >>> 2, 0);
1469
+ return;
1470
+ }
1471
+ emnapiCtx.feature.setImmediate(function () {
1472
+ try {
1473
+ if (Atomics.exchange(i32a, pending >>> 2, 0) === 0) {
1474
+ return;
1475
+ }
1476
+ if (!emnapiTSFN._liveSet.has(func)) {
1477
+ return;
1478
+ }
1479
+ emnapiTSFN.dispatch(func);
1480
+ }
1481
+ finally {
1482
+ if (emnapiTSFN._liveSet.has(func)) {
1483
+ Atomics.store(i32a, scheduled >>> 2, 0);
1484
+ if (Atomics.load(i32a, pending >>> 2) !== 0) {
1485
+ emnapiTSFN.enqueue(func);
1486
+ }
1366
1487
  }
1367
1488
  }
1368
1489
  });
1490
+ });
1491
+ },
1492
+ send: function (func) {
1493
+ var dispatchStateAddress = func + emnapiTSFN.offset.dispatch_state;
1494
+ var current_state = Atomics.or(new Uint32Array(emnapiTSFN.ensureBufferFor(dispatchStateAddress + 4)), dispatchStateAddress >>> 2, 1 << 1);
1495
+ if ((current_state & 1) === 1) {
1496
+ return;
1369
1497
  }
1370
- else {
1371
- emnapiCtx.feature.setImmediate(function () {
1372
- emnapiTSFN.dispatch(func);
1373
- });
1498
+ var pendng = func + emnapiTSFN.offset.async_pending;
1499
+ if (Atomics.load(new Int32Array(emnapiTSFN.ensureBufferFor(pendng + 4)), pendng >>> 2) !== 0) {
1500
+ return;
1501
+ }
1502
+ if (Atomics.exchange(new Int32Array(emnapiTSFN.ensureBufferFor(pendng + 4)), pendng >>> 2, 1) === 0) {
1503
+ if ((typeof ENVIRONMENT_IS_PTHREAD !== 'undefined') && ENVIRONMENT_IS_PTHREAD) {
1504
+ postMessage({
1505
+ __emnapi__: {
1506
+ type: 'tsfn-send',
1507
+ payload: {
1508
+ tsfn: func
1509
+ }
1510
+ }
1511
+ });
1512
+ }
1513
+ else {
1514
+ emnapiTSFN.enqueue(func);
1515
+ }
1374
1516
  }
1375
1517
  }
1376
1518
  };
@@ -1381,6 +1523,13 @@ function createNapiModule(options) {
1381
1523
  envObject.checkGCAccess();
1382
1524
  if (!async_resource_name)
1383
1525
  return envObject.setLastError(1);
1526
+ max_queue_size >>>= 0;
1527
+ initial_thread_count >>>= 0;
1528
+ env >>>= 0;
1529
+ thread_finalize_data >>>= 0;
1530
+ thread_finalize_cb >>>= 0;
1531
+ context >>>= 0;
1532
+ call_js_cb >>>= 0;
1384
1533
  max_queue_size = max_queue_size >>> 0;
1385
1534
  initial_thread_count = initial_thread_count >>> 0;
1386
1535
  if (initial_thread_count === 0) {
@@ -1389,6 +1538,7 @@ function createNapiModule(options) {
1389
1538
  if (!result)
1390
1539
  return envObject.setLastError(1);
1391
1540
  var ref = 0;
1541
+ func >>>= 0;
1392
1542
  if (!func) {
1393
1543
  if (!call_js_cb)
1394
1544
  return envObject.setLastError(1);
@@ -1418,21 +1568,23 @@ function createNapiModule(options) {
1418
1568
  }
1419
1569
  asyncResourceName = String(asyncResourceName);
1420
1570
  var resource_name = envObject.ensureHandleId(asyncResourceName);
1421
- var sizeofTSFN = emnapiTSFN.offset.end;
1571
+ var sizeofTSFN = emnapiTSFN.offset.__size__;
1422
1572
  var tsfn = _malloc(sizeofTSFN);
1423
1573
  if (!tsfn)
1424
1574
  return envObject.setLastError(9);
1425
- new Uint8Array(wasmMemory.buffer).subarray(tsfn, tsfn + sizeofTSFN).fill(0);
1575
+ tsfn >>>= 0;
1576
+ new Uint8Array(emnapiTSFN.ensureBufferFor(tsfn + sizeofTSFN)).subarray(tsfn, tsfn + sizeofTSFN).fill(0);
1426
1577
  var resourceRef = emnapiCtx.createReference(envObject, resource, 1, 1);
1427
1578
  var resource_ = resourceRef.id;
1428
1579
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
1429
- HEAP_DATA_VIEW.setUint32(tsfn, resource_, true);
1580
+ HEAP_DATA_VIEW.setUint32(tsfn + emnapiTSFN.offset.resource, resource_, true);
1430
1581
  if (!emnapiTSFN.initQueue(tsfn)) {
1431
1582
  _free(tsfn);
1432
1583
  resourceRef.dispose();
1433
1584
  return envObject.setLastError(9);
1434
1585
  }
1435
1586
  _emnapi_node_emit_async_init(resource, resource_name, -1, tsfn + emnapiTSFN.offset.async_id);
1587
+ HEAP_DATA_VIEW.setInt8(tsfn + emnapiTSFN.offset.is_some, 1, true);
1436
1588
  HEAP_DATA_VIEW.setUint32(tsfn + emnapiTSFN.offset.thread_count, initial_thread_count, true);
1437
1589
  HEAP_DATA_VIEW.setUint32(tsfn + emnapiTSFN.offset.context, context, true);
1438
1590
  HEAP_DATA_VIEW.setUint32(tsfn + emnapiTSFN.offset.max_queue_size, max_queue_size, true);
@@ -1442,9 +1594,11 @@ function createNapiModule(options) {
1442
1594
  HEAP_DATA_VIEW.setUint32(tsfn + emnapiTSFN.offset.finalize_cb, thread_finalize_cb, true);
1443
1595
  HEAP_DATA_VIEW.setUint32(tsfn + emnapiTSFN.offset.call_js_cb, call_js_cb, true);
1444
1596
  emnapiCtx.addCleanupHook(envObject, emnapiTSFN.cleanup, tsfn);
1597
+ emnapiTSFN._liveSet.add(tsfn);
1445
1598
  envObject.ref();
1446
1599
  emnapiCtx.increaseWaitingRequestCounter();
1447
- HEAP_DATA_VIEW.setInt32(tsfn + emnapiTSFN.offset.async_ref, 1, true);
1600
+ HEAP_DATA_VIEW.setUint32(tsfn + emnapiTSFN.offset.async_ref, 1, true);
1601
+ result >>>= 0;
1448
1602
  HEAP_DATA_VIEW.setUint32(result, tsfn, true);
1449
1603
  return envObject.clearLastError();
1450
1604
  }
@@ -1453,6 +1607,8 @@ function createNapiModule(options) {
1453
1607
  abort();
1454
1608
  return 1;
1455
1609
  }
1610
+ func >>>= 0;
1611
+ result >>>= 0;
1456
1612
  var context = emnapiTSFN.getContext(func);
1457
1613
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
1458
1614
  HEAP_DATA_VIEW.setUint32(result, context, true);
@@ -1463,6 +1619,8 @@ function createNapiModule(options) {
1463
1619
  abort();
1464
1620
  return 1;
1465
1621
  }
1622
+ func >>>= 0;
1623
+ data >>>= 0;
1466
1624
  return emnapiTSFN.push(func, data, mode);
1467
1625
  }
1468
1626
  function napi_acquire_threadsafe_function(func) {
@@ -1470,13 +1628,14 @@ function createNapiModule(options) {
1470
1628
  abort();
1471
1629
  return 1;
1472
1630
  }
1631
+ func >>>= 0;
1473
1632
  var mutex = emnapiTSFN.getMutex(func);
1474
1633
  return mutex.execute(function () {
1475
- if (emnapiTSFN.getIsClosing(func)) {
1476
- return 16;
1634
+ if (emnapiTSFN.getState(func) === 0) {
1635
+ emnapiTSFN.addThreadCount(func);
1636
+ return 0;
1477
1637
  }
1478
- emnapiTSFN.addThreadCount(func);
1479
- return 0;
1638
+ return 16;
1480
1639
  });
1481
1640
  }
1482
1641
  function napi_release_threadsafe_function(func, mode) {
@@ -1484,37 +1643,52 @@ function createNapiModule(options) {
1484
1643
  abort();
1485
1644
  return 1;
1486
1645
  }
1646
+ func >>>= 0;
1487
1647
  var mutex = emnapiTSFN.getMutex(func);
1488
1648
  var cond = emnapiTSFN.getCond(func);
1489
- return mutex.execute(function () {
1649
+ var shouldDelete = false;
1650
+ var ret = mutex.execute(function () {
1490
1651
  if (emnapiTSFN.getThreadCount(func) === 0) {
1491
1652
  return 1;
1492
1653
  }
1493
1654
  emnapiTSFN.subThreadCount(func);
1494
1655
  if (emnapiTSFN.getThreadCount(func) === 0 || mode === 1) {
1495
- var isClosing = emnapiTSFN.getIsClosing(func);
1496
- if (!isClosing) {
1497
- var isClosingValue = (mode === 1) ? 1 : 0;
1498
- emnapiTSFN.setIsClosing(func, isClosingValue);
1499
- if (isClosingValue && emnapiTSFN.getMaxQueueSize(func) > 0) {
1656
+ if (emnapiTSFN.getState(func) === 0) {
1657
+ if (mode === 1) {
1658
+ emnapiTSFN.setState(func, 1);
1659
+ }
1660
+ if (emnapiTSFN.getState(func) === 1 && emnapiTSFN.getMaxQueueSize(func) > 0) {
1500
1661
  cond.signal();
1501
1662
  }
1502
1663
  emnapiTSFN.send(func);
1503
1664
  }
1504
1665
  }
1666
+ if (!(emnapiTSFN.getState(func) === 2 && emnapiTSFN.getThreadCount(func) === 0)) {
1667
+ return 0;
1668
+ }
1669
+ shouldDelete = true;
1505
1670
  return 0;
1506
1671
  });
1672
+ if (shouldDelete) {
1673
+ emnapiTSFN.destroy(func);
1674
+ }
1675
+ return ret;
1507
1676
  }
1508
1677
  function napi_unref_threadsafe_function(env, func) {
1509
1678
  if (!func) {
1510
1679
  abort();
1511
1680
  return 1;
1512
1681
  }
1513
- var asyncRefOffset = (func + emnapiTSFN.offset.async_ref) >> 2;
1514
- var arr = new Int32Array(wasmMemory.buffer);
1515
- if (Atomics.load(arr, asyncRefOffset)) {
1516
- Atomics.store(arr, asyncRefOffset, 0);
1517
- emnapiCtx.decreaseWaitingRequestCounter();
1682
+ func >>>= 0;
1683
+ var asyncRefAddress = func + emnapiTSFN.offset.async_ref;
1684
+ var asyncRefOffset = asyncRefAddress >>> 2;
1685
+ var arr = new Uint32Array(emnapiTSFN.ensureBufferFor(asyncRefAddress + 4));
1686
+ var currentValue = Atomics.load(arr, asyncRefOffset);
1687
+ if (currentValue > 0) {
1688
+ Atomics.store(arr, asyncRefOffset, currentValue - 1);
1689
+ if (currentValue === 1) {
1690
+ emnapiCtx.decreaseWaitingRequestCounter();
1691
+ }
1518
1692
  }
1519
1693
  return 0;
1520
1694
  }
@@ -1523,34 +1697,66 @@ function createNapiModule(options) {
1523
1697
  abort();
1524
1698
  return 1;
1525
1699
  }
1526
- var asyncRefOffset = (func + emnapiTSFN.offset.async_ref) >> 2;
1527
- var arr = new Int32Array(wasmMemory.buffer);
1528
- if (!Atomics.load(arr, asyncRefOffset)) {
1529
- Atomics.store(arr, asyncRefOffset, 1);
1700
+ func >>>= 0;
1701
+ var asyncRefAddress = func + emnapiTSFN.offset.async_ref;
1702
+ var asyncRefOffset = asyncRefAddress >>> 2;
1703
+ var arr = new Uint32Array(emnapiTSFN.ensureBufferFor(asyncRefAddress + 4));
1704
+ var currentValue = Atomics.load(arr, asyncRefOffset);
1705
+ if (!currentValue) {
1530
1706
  emnapiCtx.increaseWaitingRequestCounter();
1531
1707
  }
1708
+ Atomics.store(arr, asyncRefOffset, currentValue + 1);
1532
1709
  return 0;
1533
1710
  }
1534
1711
  var emnapiAWMT = {
1535
- unusedWorkers: [],
1536
- runningWorkers: [],
1537
- workQueue: [],
1712
+ pool: [],
1538
1713
  workerReady: null,
1714
+ globalAddress: 0,
1715
+ globalOffset: {
1716
+ idle_threads: 0,
1717
+ q: 1 * 4,
1718
+ next: 1 * 4,
1719
+ prev: 2 * 4,
1720
+ mutex: 3 * 4,
1721
+ cond: 4 * 4,
1722
+ exit_message: 5 * 4,
1723
+ end: 7 * 4
1724
+ },
1539
1725
  offset: {
1540
1726
  resource: 0,
1541
1727
  async_id: 8,
1542
1728
  trigger_async_id: 16,
1543
1729
  env: 24,
1544
- data: 1 * 4 + 24,
1545
- execute: 2 * 4 + 24,
1546
- complete: 3 * 4 + 24,
1547
- end: 4 * 4 + 24
1730
+ status: 1 * 4 + 24,
1731
+ queue: 2 * 4 + 24,
1732
+ queue_next: 2 * 4 + 24,
1733
+ queue_prev: 3 * 4 + 24,
1734
+ data: 4 * 4 + 24,
1735
+ execute: 5 * 4 + 24,
1736
+ complete: 6 * 4 + 24,
1737
+ end: 7 * 4 + 24
1738
+ },
1739
+ ensureBufferFor: function (end) {
1740
+ var buffer = wasmMemory.buffer;
1741
+ if (end > buffer.byteLength) {
1742
+ wasmMemory.grow(0);
1743
+ buffer = wasmMemory.buffer;
1744
+ }
1745
+ return buffer;
1548
1746
  },
1549
1747
  init: function () {
1550
- emnapiAWMT.unusedWorkers = [];
1551
- emnapiAWMT.runningWorkers = [];
1552
- emnapiAWMT.workQueue = [];
1748
+ emnapiAWMT.pool = [];
1553
1749
  emnapiAWMT.workerReady = null;
1750
+ if (typeof PThread !== 'undefined') {
1751
+ PThread.unusedWorkers.forEach(emnapiAWMT.addListener);
1752
+ Object.values(PThread.pthreads).forEach(emnapiAWMT.addListener);
1753
+ var __original_getNewWorker_1 = PThread.getNewWorker;
1754
+ PThread.getNewWorker = function () {
1755
+ var r = __original_getNewWorker_1.apply(this, arguments);
1756
+ emnapiAWMT.addListener(r);
1757
+ return r;
1758
+ };
1759
+ }
1554
1760
  },
1555
1761
  addListener: function (worker) {
1556
1762
  if (!worker)
@@ -1564,18 +1770,8 @@ function createNapiModule(options) {
1564
1770
  var type = __emnapi__.type;
1565
1771
  var payload = __emnapi__.payload;
1566
1772
  if (type === 'async-work-complete') {
1567
- emnapiCtx.decreaseWaitingRequestCounter();
1568
- emnapiAWMT.runningWorkers.splice(emnapiAWMT.runningWorkers.indexOf(worker), 1);
1569
- emnapiAWMT.unusedWorkers.push(worker);
1570
- emnapiAWMT.checkIdleWorker();
1571
1773
  emnapiAWMT.callComplete(payload.work, 0);
1572
1774
  }
1573
- else if (type === 'async-work-queue') {
1574
- emnapiAWMT.scheduleWork(payload.work);
1575
- }
1576
- else if (type === 'async-work-cancel') {
1577
- emnapiAWMT.cancelWork(payload.work);
1578
- }
1579
1775
  }
1580
1776
  };
1581
1777
  var dispose = function () {
@@ -1596,142 +1792,233 @@ function createNapiModule(options) {
1596
1792
  }
1597
1793
  return true;
1598
1794
  },
1795
+ initGlobal: function () {
1796
+ if (!emnapiAWMT.globalAddress) {
1797
+ emnapiAWMT.globalAddress = _malloc(emnapiAWMT.globalOffset.end);
1798
+ emnapiAWMT.globalAddress >>>= 0;
1799
+ var size = emnapiAWMT.globalOffset.end;
1800
+ var addr = emnapiAWMT.globalAddress;
1801
+ new Uint8Array(emnapiAWMT.ensureBufferFor(addr + size), addr, size).fill(0);
1802
+ emnapiAWMT.queueInit(emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.q);
1803
+ emnapiAWMT.queueInit(emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.exit_message);
1804
+ }
1805
+ },
1806
+ terminateWorkers: function () {
1807
+ emnapiAWMT.pool.forEach(function (w) {
1808
+ var _a, _b;
1809
+ (_a = w._emnapiAWMTListener) === null || _a === void 0 ? void 0 : _a.dispose();
1810
+ (_b = w._emnapiTSFNListener) === null || _b === void 0 ? void 0 : _b.dispose();
1811
+ w.terminate();
1812
+ });
1813
+ emnapiAWMT.pool.length = 0;
1814
+ },
1599
1815
  initWorkers: function (n) {
1600
1816
  if (ENVIRONMENT_IS_PTHREAD) {
1601
1817
  return emnapiAWMT.workerReady || (emnapiAWMT.workerReady = Promise.resolve());
1602
1818
  }
1603
1819
  if (emnapiAWMT.workerReady)
1604
1820
  return emnapiAWMT.workerReady;
1605
- if (typeof onCreateWorker !== 'function') {
1606
- throw new TypeError('`options.onCreateWorker` is not a function');
1607
- }
1608
- var promises = [];
1609
- var args = [];
1610
1821
  if (!('emnapi_async_worker_create' in wasmInstance.exports)) {
1611
1822
  throw new TypeError('`emnapi_async_worker_create` is not exported, please try to add `--export=emnapi_async_worker_create` to linker flags');
1612
1823
  }
1824
+ var emnapi_async_worker_create = wasmInstance.exports.emnapi_async_worker_create;
1825
+ var args = [];
1826
+ emnapiAWMT.initGlobal();
1613
1827
  for (var i = 0; i < n; ++i) {
1614
- args.push(wasmInstance.exports.emnapi_async_worker_create());
1828
+ args.push(emnapi_async_worker_create(1, emnapiAWMT.globalAddress));
1615
1829
  }
1616
- try {
1617
- var _loop_1 = function (i) {
1618
- var worker = onCreateWorker({ type: 'async-work', name: 'emnapi-async-worker' });
1619
- var p = PThread.loadWasmModuleToWorker(worker);
1620
- emnapiAWMT.addListener(worker);
1621
- promises.push(p.then(function () {
1622
- if (typeof worker.unref === 'function') {
1623
- worker.unref();
1624
- }
1625
- }));
1626
- emnapiAWMT.unusedWorkers.push(worker);
1627
- var arg = args[i];
1628
- worker.threadBlockBase = arg;
1629
- worker.postMessage({
1630
- __emnapi__: {
1631
- type: 'async-worker-init',
1632
- payload: { arg: arg }
1633
- }
1634
- });
1635
- };
1636
- for (var i = 0; i < n; ++i) {
1637
- _loop_1(i);
1830
+ var promises = args.map(function (index) {
1831
+ if (index === 0) {
1832
+ return Promise.reject(new Error('Failed to create async worker'));
1638
1833
  }
1639
- }
1640
- catch (err) {
1641
- for (var i = 0; i < n; ++i) {
1642
- var arg = args[i];
1643
- _free(arg);
1834
+ var worker;
1835
+ if (index < 0) {
1836
+ worker = emnapiAWMT.pool[-index - 1];
1837
+ if (worker)
1838
+ return worker.whenLoaded;
1644
1839
  }
1645
- throw err;
1646
- }
1840
+ index >>>= 0;
1841
+ var tidOffset = 20;
1842
+ var view = new DataView(emnapiAWMT.ensureBufferFor(index + tidOffset + 4));
1843
+ var tid = view.getInt32(index + tidOffset, true);
1844
+ worker = PThread.pthreads[tid];
1845
+ return worker.whenLoaded;
1846
+ });
1647
1847
  emnapiAWMT.workerReady = Promise.all(promises);
1648
1848
  return emnapiAWMT.workerReady;
1649
1849
  },
1650
- checkIdleWorker: function () {
1651
- if (emnapiAWMT.unusedWorkers.length > 0 && emnapiAWMT.workQueue.length > 0) {
1652
- var worker = emnapiAWMT.unusedWorkers.shift();
1653
- var work = emnapiAWMT.workQueue.shift();
1654
- emnapiAWMT.runningWorkers.push(worker);
1655
- worker.postMessage({
1656
- __emnapi__: {
1657
- type: 'async-work-execute',
1658
- payload: { work: work }
1659
- }
1660
- });
1661
- }
1662
- },
1663
1850
  getResource: function (work) {
1664
- return emnapiTSFN.loadSizeTypeValue(work + emnapiAWMT.offset.resource, false);
1851
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.resource + 4);
1852
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
1853
+ return HEAP_DATA_VIEW.getUint32(work + emnapiAWMT.offset.resource, true);
1665
1854
  },
1666
1855
  getExecute: function (work) {
1667
- return emnapiTSFN.loadSizeTypeValue(work + emnapiAWMT.offset.execute, false);
1856
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.execute + 4);
1857
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
1858
+ return HEAP_DATA_VIEW.getUint32(work + emnapiAWMT.offset.execute, true);
1668
1859
  },
1669
1860
  getComplete: function (work) {
1670
- return emnapiTSFN.loadSizeTypeValue(work + emnapiAWMT.offset.complete, false);
1861
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.complete + 4);
1862
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
1863
+ return HEAP_DATA_VIEW.getUint32(work + emnapiAWMT.offset.complete, true);
1671
1864
  },
1672
1865
  getEnv: function (work) {
1673
- return emnapiTSFN.loadSizeTypeValue(work + emnapiAWMT.offset.env, false);
1866
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.env + 4);
1867
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
1868
+ return HEAP_DATA_VIEW.getUint32(work + emnapiAWMT.offset.env, true);
1674
1869
  },
1675
1870
  getData: function (work) {
1676
- return emnapiTSFN.loadSizeTypeValue(work + emnapiAWMT.offset.data, false);
1871
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.data + 4);
1872
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
1873
+ return HEAP_DATA_VIEW.getUint32(work + emnapiAWMT.offset.data, true);
1874
+ },
1875
+ getMutex: function () {
1876
+ var index = emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.mutex;
1877
+ var mutex = {
1878
+ lock: function () {
1879
+ var isBrowserMain = typeof window !== 'undefined' && typeof document !== 'undefined' && !ENVIRONMENT_IS_NODE;
1880
+ var i32a = new Int32Array(emnapiAWMT.ensureBufferFor(index + 4), index, 1);
1881
+ if (isBrowserMain) {
1882
+ while (true) {
1883
+ var oldValue = Atomics.compareExchange(i32a, 0, 0, 10);
1884
+ if (oldValue === 0) {
1885
+ return;
1886
+ }
1887
+ }
1888
+ }
1889
+ else {
1890
+ while (true) {
1891
+ var oldValue = Atomics.compareExchange(i32a, 0, 0, 10);
1892
+ if (oldValue === 0) {
1893
+ return;
1894
+ }
1895
+ Atomics.wait(i32a, 0, 10);
1896
+ }
1897
+ }
1898
+ },
1899
+ unlock: function () {
1900
+ var i32a = new Int32Array(emnapiAWMT.ensureBufferFor(index + 4), index, 1);
1901
+ var oldValue = Atomics.compareExchange(i32a, 0, 10, 0);
1902
+ if (oldValue !== 10) {
1903
+ throw new Error('Tried to unlock while not holding the mutex');
1904
+ }
1905
+ Atomics.notify(i32a, 0, 1);
1906
+ },
1907
+ execute: function (fn) {
1908
+ mutex.lock();
1909
+ try {
1910
+ return fn();
1911
+ }
1912
+ finally {
1913
+ mutex.unlock();
1914
+ }
1915
+ }
1916
+ };
1917
+ return mutex;
1918
+ },
1919
+ getCond: function () {
1920
+ var index = emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.cond;
1921
+ var mutex = emnapiAWMT.getMutex();
1922
+ var cond = {
1923
+ wait: function () {
1924
+ var i32a = new Int32Array(emnapiAWMT.ensureBufferFor(index + 4), index, 1);
1925
+ var value = Atomics.load(i32a, 0);
1926
+ mutex.unlock();
1927
+ Atomics.wait(i32a, 0, value);
1928
+ mutex.lock();
1929
+ },
1930
+ signal: function () {
1931
+ var i32a = new Int32Array(emnapiAWMT.ensureBufferFor(index + 4), index, 1);
1932
+ Atomics.add(i32a, 0, 1);
1933
+ Atomics.notify(i32a, 0, 1);
1934
+ }
1935
+ };
1936
+ return cond;
1937
+ },
1938
+ queueInit: function (q) {
1939
+ emnapiAWMT.ensureBufferFor(q + 4 + 4);
1940
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
1941
+ HEAP_DATA_VIEW.setUint32(q, q, true);
1942
+ HEAP_DATA_VIEW.setUint32(q + 4, q, true);
1943
+ },
1944
+ queueInsertTail: function (h, q) {
1945
+ emnapiAWMT.ensureBufferFor(h + 4 + 4);
1946
+ emnapiAWMT.ensureBufferFor(q + 4 + 4);
1947
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
1948
+ HEAP_DATA_VIEW.setUint32(q, h, true);
1949
+ var tempValue = HEAP_DATA_VIEW.getUint32(h + 4, true);
1950
+ HEAP_DATA_VIEW.setUint32(q + 4, tempValue, true);
1951
+ var qprev = HEAP_DATA_VIEW.getUint32(q + 4, true);
1952
+ HEAP_DATA_VIEW.setUint32(qprev, q, true);
1953
+ HEAP_DATA_VIEW.setUint32(h + 4, q, true);
1954
+ },
1955
+ queueRemove: function (q) {
1956
+ emnapiAWMT.ensureBufferFor(q + 4 + 4);
1957
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
1958
+ var qprev = HEAP_DATA_VIEW.getUint32(q + 4, true);
1959
+ var qnext = HEAP_DATA_VIEW.getUint32(q, true);
1960
+ HEAP_DATA_VIEW.setUint32(qprev, qnext, true);
1961
+ HEAP_DATA_VIEW.setUint32(qnext + 4, qprev, true);
1962
+ },
1963
+ queueEmpty: function (q) {
1964
+ emnapiAWMT.ensureBufferFor(q + 4);
1965
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
1966
+ return q == HEAP_DATA_VIEW.getUint32(q, true);
1677
1967
  },
1678
1968
  scheduleWork: function (work) {
1679
1969
  var _a;
1680
- if (ENVIRONMENT_IS_PTHREAD) {
1681
- var postMessage_1 = napiModule.postMessage;
1682
- postMessage_1({
1683
- __emnapi__: {
1684
- type: 'async-work-queue',
1685
- payload: { work: work }
1686
- }
1970
+ if (!((_a = emnapiAWMT.workerReady) === null || _a === void 0 ? void 0 : _a.ready)) {
1971
+ emnapiAWMT.initWorkers(_emnapi_async_work_pool_size()).then(function () {
1972
+ emnapiAWMT.workerReady.ready = true;
1973
+ }).catch(function (err) {
1974
+ emnapiAWMT.workerReady = null;
1975
+ throw err;
1687
1976
  });
1688
- return;
1689
1977
  }
1690
1978
  emnapiCtx.increaseWaitingRequestCounter();
1691
- emnapiAWMT.workQueue.push(work);
1692
- if ((_a = emnapiAWMT.workerReady) === null || _a === void 0 ? void 0 : _a.ready) {
1693
- emnapiAWMT.checkIdleWorker();
1979
+ var statusBuffer = new Int32Array(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.status + 4), work + emnapiAWMT.offset.status, 1);
1980
+ Atomics.store(statusBuffer, 0, 0);
1981
+ var mutex = emnapiAWMT.getMutex();
1982
+ var cond = emnapiAWMT.getCond();
1983
+ mutex.lock();
1984
+ try {
1985
+ emnapiAWMT.queueInsertTail(emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.q, work + emnapiAWMT.offset.queue);
1694
1986
  }
1695
- else {
1696
- var fail = function (err) {
1697
- emnapiCtx.decreaseWaitingRequestCounter();
1698
- throw err;
1699
- };
1700
- try {
1701
- emnapiAWMT.initWorkers(_emnapi_async_work_pool_size()).then(function () {
1702
- emnapiAWMT.workerReady.ready = true;
1703
- emnapiAWMT.checkIdleWorker();
1704
- }, fail);
1705
- }
1706
- catch (err) {
1707
- fail(err);
1708
- }
1987
+ catch (err) {
1988
+ emnapiCtx.decreaseWaitingRequestCounter();
1989
+ mutex.unlock();
1990
+ throw err;
1709
1991
  }
1992
+ emnapiAWMT.ensureBufferFor(emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.idle_threads + 4);
1993
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
1994
+ if (HEAP_DATA_VIEW.getUint32(emnapiAWMT.globalAddress + emnapiAWMT.globalOffset.idle_threads, true) > 0) {
1995
+ cond.signal();
1996
+ }
1997
+ mutex.unlock();
1710
1998
  },
1711
1999
  cancelWork: function (work) {
1712
- if (ENVIRONMENT_IS_PTHREAD) {
1713
- var postMessage_2 = napiModule.postMessage;
1714
- postMessage_2({
1715
- __emnapi__: {
1716
- type: 'async-work-cancel',
1717
- payload: { work: work }
1718
- }
1719
- });
1720
- return 0;
2000
+ var cancelled = false;
2001
+ emnapiAWMT.getMutex().execute(function () {
2002
+ emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.status + 4);
2003
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2004
+ cancelled = !emnapiAWMT.queueEmpty(work + emnapiAWMT.offset.queue) && HEAP_DATA_VIEW.getInt32(work + emnapiAWMT.offset.status, true) !== 2;
2005
+ if (cancelled) {
2006
+ emnapiAWMT.queueRemove(work + emnapiAWMT.offset.queue);
2007
+ }
2008
+ });
2009
+ if (!cancelled) {
2010
+ return 9;
1721
2011
  }
1722
- var index = emnapiAWMT.workQueue.indexOf(work);
1723
- if (index !== -1) {
1724
- emnapiAWMT.workQueue.splice(index, 1);
1725
- emnapiCtx.feature.setImmediate(function () {
1726
- emnapiCtx.decreaseWaitingRequestCounter();
1727
- emnapiAWMT.checkIdleWorker();
1728
- emnapiAWMT.callComplete(work, 11);
1729
- });
1730
- return 0;
2012
+ if (Atomics.compareExchange(new Int32Array(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.status + 4), work + emnapiAWMT.offset.status, 1), 0, 0, 1) !== 0) {
2013
+ return 9;
1731
2014
  }
1732
- return 9;
2015
+ emnapiCtx.feature.setImmediate(function () {
2016
+ emnapiAWMT.callComplete(work, 11);
2017
+ });
2018
+ return 0;
1733
2019
  },
1734
2020
  callComplete: function (work, status) {
2021
+ emnapiCtx.decreaseWaitingRequestCounter();
1735
2022
  var complete = emnapiAWMT.getComplete(work);
1736
2023
  var env = emnapiAWMT.getEnv(work);
1737
2024
  var data = emnapiAWMT.getData(work);
@@ -1749,7 +2036,7 @@ function createNapiModule(options) {
1749
2036
  var resource = emnapiAWMT.getResource(work);
1750
2037
  var resource_value = emnapiCtx.refStore.get(resource).get();
1751
2038
  var resourceObject = emnapiCtx.handleStore.get(resource_value).value;
1752
- var view = new DataView(wasmMemory.buffer);
2039
+ var view = new DataView(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.trigger_async_id + 8));
1753
2040
  var asyncId = view.getFloat64(work + emnapiAWMT.offset.async_id, true);
1754
2041
  var triggerAsyncId = view.getFloat64(work + emnapiAWMT.offset.trigger_async_id, true);
1755
2042
  emnapiNodeBinding.node.makeCallback(resourceObject, callback, [], {
@@ -1766,6 +2053,7 @@ function createNapiModule(options) {
1766
2053
  }
1767
2054
  }
1768
2055
  };
2056
+ emnapiAWMT.init();
1769
2057
  var napi_create_async_work = singleThreadAsyncWork
1770
2058
  ? function (env, resource, resource_name, execute, complete, data, result) {
1771
2059
  if (!env)
@@ -1787,6 +2075,7 @@ function createNapiModule(options) {
1787
2075
  return envObject.setLastError(1);
1788
2076
  var resourceName = String(emnapiCtx.handleStore.get(resource_name).value);
1789
2077
  var id = emnapiAWST.create(env, resourceObject, resourceName, execute, complete, data);
2078
+ result >>>= 0;
1790
2079
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
1791
2080
  HEAP_DATA_VIEW.setUint32(result, id, true);
1792
2081
  return envObject.clearLastError();
@@ -1813,7 +2102,8 @@ function createNapiModule(options) {
1813
2102
  var aw = _malloc(sizeofAW);
1814
2103
  if (!aw)
1815
2104
  return envObject.setLastError(9);
1816
- new Uint8Array(wasmMemory.buffer).subarray(aw, aw + sizeofAW).fill(0);
2105
+ aw >>>= 0;
2106
+ new Uint8Array(emnapiAWMT.ensureBufferFor(aw + sizeofAW)).subarray(aw, aw + sizeofAW).fill(0);
1817
2107
  var s = envObject.ensureHandleId(resourceObject);
1818
2108
  var resourceRef = emnapiCtx.createReference(envObject, s, 1, 1);
1819
2109
  var resource_ = resourceRef.id;
@@ -1824,6 +2114,8 @@ function createNapiModule(options) {
1824
2114
  HEAP_DATA_VIEW.setUint32(aw + emnapiAWMT.offset.execute, execute, true);
1825
2115
  HEAP_DATA_VIEW.setUint32(aw + emnapiAWMT.offset.complete, complete, true);
1826
2116
  HEAP_DATA_VIEW.setUint32(aw + emnapiAWMT.offset.data, data, true);
2117
+ emnapiAWMT.queueInit(aw + emnapiAWMT.offset.queue);
2118
+ result >>>= 0;
1827
2119
  HEAP_DATA_VIEW.setUint32(result, aw, true);
1828
2120
  return envObject.clearLastError();
1829
2121
  };
@@ -1835,6 +2127,7 @@ function createNapiModule(options) {
1835
2127
  envObject.checkGCAccess();
1836
2128
  if (!work)
1837
2129
  return envObject.setLastError(1);
2130
+ work >>>= 0;
1838
2131
  emnapiAWST.remove(work);
1839
2132
  return envObject.clearLastError();
1840
2133
  }
@@ -1845,10 +2138,11 @@ function createNapiModule(options) {
1845
2138
  envObject.checkGCAccess();
1846
2139
  if (!work)
1847
2140
  return envObject.setLastError(1);
2141
+ work >>>= 0;
1848
2142
  var resource = emnapiAWMT.getResource(work);
1849
2143
  emnapiCtx.refStore.get(resource).dispose();
1850
2144
  if (emnapiNodeBinding) {
1851
- var view = new DataView(wasmMemory.buffer);
2145
+ var view = new DataView(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.trigger_async_id + 8));
1852
2146
  var asyncId = view.getFloat64(work + emnapiAWMT.offset.async_id, true);
1853
2147
  var triggerAsyncId = view.getFloat64(work + emnapiAWMT.offset.trigger_async_id, true);
1854
2148
  _emnapi_node_emit_async_destroy(asyncId, triggerAsyncId);
@@ -1863,6 +2157,7 @@ function createNapiModule(options) {
1863
2157
  var envObject = emnapiCtx.envStore.get(env);
1864
2158
  if (!work)
1865
2159
  return envObject.setLastError(1);
2160
+ work >>>= 0;
1866
2161
  emnapiAWST.queue(work);
1867
2162
  return envObject.clearLastError();
1868
2163
  }
@@ -1872,6 +2167,7 @@ function createNapiModule(options) {
1872
2167
  var envObject = emnapiCtx.envStore.get(env);
1873
2168
  if (!work)
1874
2169
  return envObject.setLastError(1);
2170
+ work >>>= 0;
1875
2171
  emnapiAWMT.scheduleWork(work);
1876
2172
  return envObject.clearLastError();
1877
2173
  };
@@ -1882,6 +2178,7 @@ function createNapiModule(options) {
1882
2178
  var envObject = emnapiCtx.envStore.get(env);
1883
2179
  if (!work)
1884
2180
  return envObject.setLastError(1);
2181
+ work >>>= 0;
1885
2182
  var status = emnapiAWST.cancel(work);
1886
2183
  if (status === 0)
1887
2184
  return envObject.clearLastError();
@@ -1893,41 +2190,125 @@ function createNapiModule(options) {
1893
2190
  var envObject = emnapiCtx.envStore.get(env);
1894
2191
  if (!work)
1895
2192
  return envObject.setLastError(1);
2193
+ work >>>= 0;
1896
2194
  var status = emnapiAWMT.cancelWork(work);
1897
2195
  if (status === 0)
1898
2196
  return envObject.clearLastError();
1899
2197
  return envObject.setLastError(status);
1900
2198
  };
1901
- function initWorker(startArg) {
2199
+ function _emnapi_async_worker(globalAddress) {
2200
+ globalAddress >>>= 0;
2201
+ emnapiAWMT.globalAddress = globalAddress;
2202
+ var mutex = emnapiAWMT.getMutex();
2203
+ var cond = emnapiAWMT.getCond();
2204
+ mutex.lock();
2205
+ var exitMessageAddr = globalAddress + emnapiAWMT.globalOffset.exit_message;
2206
+ var idleThreadsAddr = globalAddress + emnapiAWMT.globalOffset.idle_threads;
2207
+ var workerQueueAddr = globalAddress + emnapiAWMT.globalOffset.q;
2208
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2209
+ for (;;) {
2210
+ emnapiAWMT.ensureBufferFor(workerQueueAddr + 4);
2211
+ while (emnapiAWMT.queueEmpty(workerQueueAddr)) {
2212
+ Atomics.add(new Int32Array(emnapiAWMT.ensureBufferFor(idleThreadsAddr + 4), idleThreadsAddr, 1), 0, 1);
2213
+ cond.wait();
2214
+ Atomics.sub(new Int32Array(emnapiAWMT.ensureBufferFor(idleThreadsAddr + 4), idleThreadsAddr, 1), 0, 1);
2215
+ }
2216
+ var q = HEAP_DATA_VIEW.getUint32(workerQueueAddr, true);
2217
+ if (q === exitMessageAddr) {
2218
+ cond.signal();
2219
+ mutex.unlock();
2220
+ break;
2221
+ }
2222
+ var work = q - emnapiAWMT.offset.queue;
2223
+ emnapiAWMT.queueRemove(q);
2224
+ emnapiAWMT.queueInit(q);
2225
+ mutex.unlock();
2226
+ var statusBuffer = new Int32Array(emnapiAWMT.ensureBufferFor(work + emnapiAWMT.offset.status + 4), work + emnapiAWMT.offset.status, 1);
2227
+ if (Atomics.load(statusBuffer, 0) === 1) {
2228
+ abort('unreachable');
2229
+ }
2230
+ var execute = emnapiAWMT.getExecute(work);
2231
+ var env = emnapiAWMT.getEnv(work);
2232
+ var data = emnapiAWMT.getData(work);
2233
+ (wasmTable.get(execute))(env, data);
2234
+ Atomics.store(statusBuffer, 0, 2);
2235
+ var postMessage_1 = napiModule.postMessage;
2236
+ postMessage_1({
2237
+ __emnapi__: {
2238
+ type: 'async-work-complete',
2239
+ payload: { work: work }
2240
+ }
2241
+ });
2242
+ mutex.lock();
2243
+ }
2244
+ return 0;
2245
+ }
2246
+ function _emnapi_spawn_worker(f, globalAddress) {
2247
+ if (typeof onCreateWorker !== 'function') {
2248
+ throw new TypeError('`options.onCreateWorker` is not a function');
2249
+ }
2250
+ var promises = [];
2251
+ var args = [];
2252
+ if (!('emnapi_async_worker_create' in wasmInstance.exports)) {
2253
+ throw new TypeError('`emnapi_async_worker_create` is not exported, please try to add `--export=emnapi_async_worker_create` to linker flags');
2254
+ }
2255
+ args.push(wasmInstance.exports.emnapi_async_worker_create(0, 0));
2256
+ var handleError = function (e) {
2257
+ if ('message' in e && (e.message.indexOf('RuntimeError') !== -1 || e.message.indexOf('unreachable') !== -1)) {
2258
+ emnapiAWMT.terminateWorkers();
2259
+ }
2260
+ };
2261
+ var ret;
2262
+ try {
2263
+ var worker_1 = onCreateWorker({ type: 'async-work', name: 'emnapi-async-worker' });
2264
+ var p = PThread.loadWasmModuleToWorker(worker_1);
2265
+ if (ENVIRONMENT_IS_NODE) {
2266
+ worker_1.on('error', handleError);
2267
+ }
2268
+ else {
2269
+ worker_1.addEventListener('error', handleError, false);
2270
+ }
2271
+ emnapiAWMT.addListener(worker_1);
2272
+ emnapiTSFN.addListener(worker_1);
2273
+ promises.push(p.then(function () {
2274
+ if (typeof worker_1.unref === 'function') {
2275
+ worker_1.unref();
2276
+ }
2277
+ }));
2278
+ ret = emnapiAWMT.pool.push(worker_1) - 1;
2279
+ var arg = args[0];
2280
+ worker_1.threadBlockBase = arg;
2281
+ worker_1.postMessage({
2282
+ __emnapi__: {
2283
+ type: 'async-worker-init',
2284
+ payload: { arg: arg, func: [f, globalAddress] }
2285
+ }
2286
+ });
2287
+ }
2288
+ catch (err) {
2289
+ var arg = args[0];
2290
+ _free(arg);
2291
+ throw err;
2292
+ }
2293
+ return ret;
2294
+ }
2295
+ function initWorker(startArg, func) {
1902
2296
  if (napiModule.childThread) {
1903
2297
  if (typeof wasmInstance.exports.emnapi_async_worker_init !== 'function') {
1904
2298
  throw new TypeError('`emnapi_async_worker_init` is not exported, please try to add `--export=emnapi_async_worker_init` to linker flags');
1905
2299
  }
1906
2300
  wasmInstance.exports.emnapi_async_worker_init(startArg);
2301
+ (wasmTable.get(func[0]))(func[1]);
1907
2302
  }
1908
2303
  else {
1909
2304
  throw new Error('startThread is only available in child threads');
1910
2305
  }
1911
2306
  }
1912
- function executeAsyncWork(work) {
1913
- if (!ENVIRONMENT_IS_PTHREAD)
1914
- return;
1915
- var execute = emnapiAWMT.getExecute(work);
1916
- var env = emnapiAWMT.getEnv(work);
1917
- var data = emnapiAWMT.getData(work);
1918
- (wasmTable.get(execute))(env, data);
1919
- var postMessage = napiModule.postMessage;
1920
- postMessage({
1921
- __emnapi__: {
1922
- type: 'async-work-complete',
1923
- payload: { work: work }
1924
- }
1925
- });
1926
- }
1927
2307
  napiModule.initWorker = initWorker;
1928
- napiModule.executeAsyncWork = executeAsyncWork;
1929
2308
  var asyncWorkMod = Object.freeze({
1930
2309
  __proto__: null,
2310
+ _emnapi_async_worker: _emnapi_async_worker,
2311
+ _emnapi_spawn_worker: _emnapi_spawn_worker,
1931
2312
  napi_cancel_async_work: napi_cancel_async_work,
1932
2313
  napi_create_async_work: napi_create_async_work,
1933
2314
  napi_delete_async_work: napi_delete_async_work,
@@ -1988,6 +2369,7 @@ function createNapiModule(options) {
1988
2369
  var pointer = _malloc(arrayBuffer.byteLength);
1989
2370
  if (!pointer)
1990
2371
  throw new Error('Out of memory');
2372
+ pointer >>>= 0;
1991
2373
  new Uint8Array(wasmMemory.buffer).set(new Uint8Array(arrayBuffer), pointer);
1992
2374
  info.address = pointer;
1993
2375
  info.ownership = emnapiExternalMemory.registry ? 0 : 1;
@@ -2009,8 +2391,7 @@ function createNapiModule(options) {
2009
2391
  }
2010
2392
  return view;
2011
2393
  }
2012
- var maybeOldWasmMemory = emnapiExternalMemory.isDetachedArrayBuffer(view.buffer) ||
2013
- ((typeof SharedArrayBuffer === 'function') && (view.buffer instanceof SharedArrayBuffer));
2394
+ var maybeOldWasmMemory = emnapiExternalMemory.isDetachedArrayBuffer(view.buffer) || emnapiExternalMemory.isSharedArrayBuffer(view.buffer);
2014
2395
  if (maybeOldWasmMemory && emnapiExternalMemory.wasmMemoryViewTable.has(view)) {
2015
2396
  var info = emnapiExternalMemory.wasmMemoryViewTable.get(view);
2016
2397
  var Ctor = info.Ctor;
@@ -2040,6 +2421,55 @@ function createNapiModule(options) {
2040
2421
  return { address: address === 0 ? 0 : (address + view.byteOffset), ownership: ownership, runtimeAllocated: runtimeAllocated, view: view };
2041
2422
  }
2042
2423
  };
2424
+ var emnapiExternalSAB = {
2425
+ registry: undefined,
2426
+ handleTable: new WeakMap(),
2427
+ init: function () {
2428
+ emnapiExternalSAB.handleTable = new WeakMap();
2429
+ emnapiExternalSAB.registry = typeof FinalizationRegistry === 'function'
2430
+ ? new FinalizationRegistry(function (metaPtr) {
2431
+ emnapiExternalSAB.release(metaPtr);
2432
+ })
2433
+ : undefined;
2434
+ },
2435
+ allocMeta: function (external_data, byte_length, finalize_cb, finalize_data, finalize_hint) {
2436
+ var size = 4 * 6;
2437
+ var metaPtr = _malloc(size);
2438
+ if (!metaPtr)
2439
+ throw new Error('Out of memory');
2440
+ metaPtr >>>= 0;
2441
+ Atomics.store(new Int32Array(wasmMemory.buffer, metaPtr, 1), 0, 1);
2442
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2443
+ HEAP_DATA_VIEW.setUint32(metaPtr + 4, external_data, true);
2444
+ HEAP_DATA_VIEW.setUint32(metaPtr + 8, byte_length, true);
2445
+ HEAP_DATA_VIEW.setUint32(metaPtr + 12, finalize_cb, true);
2446
+ HEAP_DATA_VIEW.setUint32(metaPtr + 16, finalize_data, true);
2447
+ HEAP_DATA_VIEW.setUint32(metaPtr + 20, finalize_hint, true);
2448
+ return metaPtr;
2449
+ },
2450
+ readMeta: function (metaPtr) {
2451
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2452
+ var external_data = HEAP_DATA_VIEW.getUint32(metaPtr + 4, true);
2453
+ var byte_length = HEAP_DATA_VIEW.getUint32(metaPtr + 8, true);
2454
+ var finalize_cb = HEAP_DATA_VIEW.getUint32(metaPtr + 12, true);
2455
+ var finalize_data = HEAP_DATA_VIEW.getUint32(metaPtr + 16, true);
2456
+ var finalize_hint = HEAP_DATA_VIEW.getUint32(metaPtr + 20, true);
2457
+ return { external_data: external_data, byte_length: byte_length, finalize_cb: finalize_cb, finalize_data: finalize_data, finalize_hint: finalize_hint };
2458
+ },
2459
+ release: function (metaPtr) {
2460
+ var oldRefcount = Atomics.sub(new Int32Array(wasmMemory.buffer, metaPtr, 1), 0, 1);
2461
+ if (oldRefcount === 1) {
2462
+ var info = emnapiExternalSAB.readMeta(metaPtr);
2463
+ var finalize_cb = info.finalize_cb;
2464
+ if (finalize_cb) {
2465
+ var finalize_data = info.finalize_data;
2466
+ var finalize_hint = info.finalize_hint;
2467
+ (wasmTable.get(finalize_cb))(finalize_data, finalize_hint);
2468
+ }
2469
+ _free(metaPtr);
2470
+ }
2471
+ }
2472
+ };
2043
2473
  var emnapiString = {
2044
2474
  utf8Decoder: undefined,
2045
2475
  utf16Decoder: undefined,
@@ -2143,7 +2573,7 @@ function createNapiModule(options) {
2143
2573
  ptr >>>= 0;
2144
2574
  var HEAPU8 = new Uint8Array(wasmMemory.buffer);
2145
2575
  var end = ptr;
2146
- if (length === -1) {
2576
+ if (length === -1 || length === 4294967295) {
2147
2577
  for (; HEAPU8[end];)
2148
2578
  ++end;
2149
2579
  }
@@ -2234,12 +2664,12 @@ function createNapiModule(options) {
2234
2664
  return '';
2235
2665
  ptr >>>= 0;
2236
2666
  var end = ptr;
2237
- if (length === -1) {
2238
- var idx = end >> 1;
2667
+ if (length === -1 || length === 4294967295) {
2668
+ var idx = end >>> 1;
2239
2669
  var HEAPU16 = new Uint16Array(wasmMemory.buffer);
2240
2670
  while (HEAPU16[idx])
2241
2671
  ++idx;
2242
- end = idx << 1;
2672
+ end = (idx << 1) >>> 0;
2243
2673
  }
2244
2674
  else {
2245
2675
  end = ptr + (length >>> 0) * 2;
@@ -2270,11 +2700,12 @@ function createNapiModule(options) {
2270
2700
  return outPtr - startPtr;
2271
2701
  },
2272
2702
  newString: function (env, str, length, result, stringMaker) {
2703
+ length >>>= 0;
2273
2704
  if (!env)
2274
2705
  return 1;
2275
2706
  var envObject = emnapiCtx.envStore.get(env);
2276
2707
  envObject.checkGCAccess();
2277
- var autoLength = length === -1;
2708
+ var autoLength = length === -1 || length === 4294967295;
2278
2709
  var sizelength = length >>> 0;
2279
2710
  if (length !== 0) {
2280
2711
  if (!str)
@@ -2284,18 +2715,21 @@ function createNapiModule(options) {
2284
2715
  return envObject.setLastError(1);
2285
2716
  if (!(autoLength || (sizelength <= 2147483647)))
2286
2717
  return envObject.setLastError(1);
2718
+ str >>>= 0;
2287
2719
  var strValue = stringMaker(str, autoLength, sizelength);
2720
+ result >>>= 0;
2288
2721
  var value = emnapiCtx.addToCurrentScope(strValue).id;
2289
2722
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2290
2723
  HEAP_DATA_VIEW.setUint32(result, value, true);
2291
2724
  return envObject.clearLastError();
2292
2725
  },
2293
2726
  newExternalString: function (env, str, length, finalize_callback, finalize_hint, result, copied, createApi, stringMaker) {
2727
+ length >>>= 0;
2294
2728
  if (!env)
2295
2729
  return 1;
2296
2730
  var envObject = emnapiCtx.envStore.get(env);
2297
2731
  envObject.checkGCAccess();
2298
- var autoLength = length === -1;
2732
+ var autoLength = length === -1 || length === 4294967295;
2299
2733
  var sizelength = length >>> 0;
2300
2734
  if (length !== 0) {
2301
2735
  if (!str)
@@ -2337,6 +2771,7 @@ function createNapiModule(options) {
2337
2771
  if (!handle.isArray()) {
2338
2772
  return envObject.setLastError(8);
2339
2773
  }
2774
+ result >>>= 0;
2340
2775
  var v = handle.value.length >>> 0;
2341
2776
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2342
2777
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -2360,14 +2795,50 @@ function createNapiModule(options) {
2360
2795
  }
2361
2796
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2362
2797
  if (data) {
2798
+ data >>>= 0;
2363
2799
  var p = emnapiExternalMemory.getArrayBufferPointer(handle.value, true).address;
2364
2800
  HEAP_DATA_VIEW.setUint32(data, p, true);
2365
2801
  }
2366
2802
  if (byte_length) {
2803
+ byte_length >>>= 0;
2367
2804
  HEAP_DATA_VIEW.setUint32(byte_length, handle.value.byteLength, true);
2368
2805
  }
2369
2806
  return envObject.clearLastError();
2370
2807
  }
2808
+ function node_api_set_prototype(env, object, value) {
2809
+ if (!env)
2810
+ return 1;
2811
+ var envObject = emnapiCtx.envStore.get(env);
2812
+ envObject.checkGCAccess();
2813
+ if (!envObject.tryCatch.isEmpty())
2814
+ return envObject.setLastError(10);
2815
+ if (!envObject.canCallIntoJs())
2816
+ return envObject.setLastError(envObject.moduleApiVersion >= 10 ? 23 : 10);
2817
+ envObject.clearLastError();
2818
+ try {
2819
+ if (!value)
2820
+ return envObject.setLastError(1);
2821
+ var obj = emnapiCtx.handleStore.get(object).value;
2822
+ if (obj == null) {
2823
+ throw new TypeError('Cannot convert undefined or null to object');
2824
+ }
2825
+ var type = typeof obj;
2826
+ var v = void 0;
2827
+ try {
2828
+ v = (type === 'object' && obj !== null) || type === 'function' ? obj : Object(obj);
2829
+ }
2830
+ catch (_) {
2831
+ return envObject.setLastError(2);
2832
+ }
2833
+ var val = emnapiCtx.handleStore.get(value).value;
2834
+ Object.setPrototypeOf(v, val);
2835
+ return envObject.getReturnStatus();
2836
+ }
2837
+ catch (err) {
2838
+ envObject.tryCatch.setError(err);
2839
+ return envObject.setLastError(10);
2840
+ }
2841
+ }
2371
2842
  function napi_get_prototype(env, value, result) {
2372
2843
  if (!env)
2373
2844
  return 1;
@@ -2394,6 +2865,7 @@ function createNapiModule(options) {
2394
2865
  catch (_) {
2395
2866
  return envObject.setLastError(2);
2396
2867
  }
2868
+ result >>>= 0;
2397
2869
  var p = envObject.ensureHandleId(Object.getPrototypeOf(v));
2398
2870
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2399
2871
  HEAP_DATA_VIEW.setUint32(result, p, true);
@@ -2418,6 +2890,7 @@ function createNapiModule(options) {
2418
2890
  var v = handle.value;
2419
2891
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2420
2892
  if (type) {
2893
+ type >>>= 0;
2421
2894
  var t = void 0;
2422
2895
  if (v instanceof Int8Array) {
2423
2896
  t = 0;
@@ -2440,6 +2913,9 @@ function createNapiModule(options) {
2440
2913
  else if (v instanceof Uint32Array) {
2441
2914
  t = 6;
2442
2915
  }
2916
+ else if (typeof Float16Array === 'function' && v instanceof Float16Array) {
2917
+ t = 11;
2918
+ }
2443
2919
  else if (v instanceof Float32Array) {
2444
2920
  t = 7;
2445
2921
  }
@@ -2457,22 +2933,25 @@ function createNapiModule(options) {
2457
2933
  }
2458
2934
  HEAP_DATA_VIEW.setInt32(type, t, true);
2459
2935
  }
2936
+ v = emnapiExternalMemory.getOrUpdateMemoryView(v);
2460
2937
  if (length) {
2938
+ length >>>= 0;
2461
2939
  HEAP_DATA_VIEW.setUint32(length, v.length, true);
2462
2940
  }
2463
- var buffer;
2464
2941
  if (data || arraybuffer) {
2465
- buffer = v.buffer;
2466
2942
  if (data) {
2943
+ data >>>= 0;
2467
2944
  var p = emnapiExternalMemory.getViewPointer(v, true).address;
2468
2945
  HEAP_DATA_VIEW.setUint32(data, p, true);
2469
2946
  }
2470
2947
  if (arraybuffer) {
2471
- var ab = envObject.ensureHandleId(buffer);
2948
+ arraybuffer >>>= 0;
2949
+ var ab = envObject.ensureHandleId(v.buffer);
2472
2950
  HEAP_DATA_VIEW.setUint32(arraybuffer, ab, true);
2473
2951
  }
2474
2952
  }
2475
2953
  if (byte_offset) {
2954
+ byte_offset >>>= 0;
2476
2955
  HEAP_DATA_VIEW.setUint32(byte_offset, v.byteOffset, true);
2477
2956
  }
2478
2957
  return envObject.clearLastError();
@@ -2503,24 +2982,26 @@ function createNapiModule(options) {
2503
2982
  if (!handle.isDataView()) {
2504
2983
  return envObject.setLastError(1);
2505
2984
  }
2506
- var v = handle.value;
2985
+ var v = emnapiExternalMemory.getOrUpdateMemoryView(handle.value);
2507
2986
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2508
2987
  if (byte_length) {
2988
+ byte_length >>>= 0;
2509
2989
  HEAP_DATA_VIEW.setUint32(byte_length, v.byteLength, true);
2510
2990
  }
2511
- var buffer;
2512
2991
  if (data || arraybuffer) {
2513
- buffer = v.buffer;
2514
2992
  if (data) {
2993
+ data >>>= 0;
2515
2994
  var p = emnapiExternalMemory.getViewPointer(v, true).address;
2516
2995
  HEAP_DATA_VIEW.setUint32(data, p, true);
2517
2996
  }
2518
2997
  if (arraybuffer) {
2519
- var ab = envObject.ensureHandleId(buffer);
2998
+ arraybuffer >>>= 0;
2999
+ var ab = envObject.ensureHandleId(v.buffer);
2520
3000
  HEAP_DATA_VIEW.setUint32(arraybuffer, ab, true);
2521
3001
  }
2522
3002
  }
2523
3003
  if (byte_offset) {
3004
+ byte_offset >>>= 0;
2524
3005
  HEAP_DATA_VIEW.setUint32(byte_offset, v.byteOffset, true);
2525
3006
  }
2526
3007
  return envObject.clearLastError();
@@ -2545,6 +3026,7 @@ function createNapiModule(options) {
2545
3026
  if (!handle.isDate()) {
2546
3027
  return envObject.setLastError(1);
2547
3028
  }
3029
+ result >>>= 0;
2548
3030
  v = handle.value.valueOf();
2549
3031
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2550
3032
  HEAP_DATA_VIEW.setFloat64(result, v, true);
@@ -2568,6 +3050,7 @@ function createNapiModule(options) {
2568
3050
  if (typeof handle.value !== 'boolean') {
2569
3051
  return envObject.setLastError(7);
2570
3052
  }
3053
+ result >>>= 0;
2571
3054
  var r = handle.value ? 1 : 0;
2572
3055
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2573
3056
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -2586,6 +3069,7 @@ function createNapiModule(options) {
2586
3069
  if (typeof handle.value !== 'number') {
2587
3070
  return envObject.setLastError(6);
2588
3071
  }
3072
+ result >>>= 0;
2589
3073
  var r = handle.value;
2590
3074
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2591
3075
  HEAP_DATA_VIEW.setFloat64(result, r, true);
@@ -2610,6 +3094,8 @@ function createNapiModule(options) {
2610
3094
  if (typeof numberValue !== 'bigint') {
2611
3095
  return envObject.setLastError(6);
2612
3096
  }
3097
+ lossless >>>= 0;
3098
+ result >>>= 0;
2613
3099
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2614
3100
  if ((numberValue >= (BigInt(-1) * (BigInt(1) << BigInt(63)))) && (numberValue < (BigInt(1) << BigInt(63)))) {
2615
3101
  HEAP_DATA_VIEW.setInt8(lossless, 1, true);
@@ -2646,6 +3132,8 @@ function createNapiModule(options) {
2646
3132
  if (typeof numberValue !== 'bigint') {
2647
3133
  return envObject.setLastError(6);
2648
3134
  }
3135
+ lossless >>>= 0;
3136
+ result >>>= 0;
2649
3137
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2650
3138
  if ((numberValue >= BigInt(0)) && (numberValue < (BigInt(1) << BigInt(64)))) {
2651
3139
  HEAP_DATA_VIEW.setInt8(lossless, 1, true);
@@ -2677,8 +3165,12 @@ function createNapiModule(options) {
2677
3165
  return envObject.setLastError(17);
2678
3166
  }
2679
3167
  var isMinus = handle.value < BigInt(0);
3168
+ sign_bit >>>= 0;
3169
+ words >>>= 0;
3170
+ word_count >>>= 0;
2680
3171
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2681
3172
  var word_count_int = HEAP_DATA_VIEW.getUint32(word_count, true);
3173
+ word_count_int >>>= 0;
2682
3174
  var wordCount = 0;
2683
3175
  var bigintValue = isMinus ? (handle.value * BigInt(-1)) : handle.value;
2684
3176
  while (bigintValue !== BigInt(0)) {
@@ -2726,6 +3218,7 @@ function createNapiModule(options) {
2726
3218
  if (!handle.isExternal()) {
2727
3219
  return envObject.setLastError(1);
2728
3220
  }
3221
+ result >>>= 0;
2729
3222
  var p = handle.data();
2730
3223
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2731
3224
  HEAP_DATA_VIEW.setUint32(result, p, true);
@@ -2744,6 +3237,7 @@ function createNapiModule(options) {
2744
3237
  if (typeof handle.value !== 'number') {
2745
3238
  return envObject.setLastError(6);
2746
3239
  }
3240
+ result >>>= 0;
2747
3241
  var v = new Int32Array([handle.value])[0];
2748
3242
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2749
3243
  HEAP_DATA_VIEW.setInt32(result, v, true);
@@ -2763,6 +3257,7 @@ function createNapiModule(options) {
2763
3257
  return envObject.setLastError(6);
2764
3258
  }
2765
3259
  var numberValue = handle.value;
3260
+ result >>>= 0;
2766
3261
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2767
3262
  if (numberValue === Number.POSITIVE_INFINITY || numberValue === Number.NEGATIVE_INFINITY || isNaN(numberValue)) {
2768
3263
  HEAP_DATA_VIEW.setInt32(result, 0, true);
@@ -2788,6 +3283,9 @@ function createNapiModule(options) {
2788
3283
  envObject.checkGCAccess();
2789
3284
  if (!value)
2790
3285
  return envObject.setLastError(1);
3286
+ result >>>= 0;
3287
+ buf >>>= 0;
3288
+ buf_size >>>= 0;
2791
3289
  buf_size = buf_size >>> 0;
2792
3290
  var handle = emnapiCtx.handleStore.get(value);
2793
3291
  if (typeof handle.value !== 'string') {
@@ -2824,6 +3322,9 @@ function createNapiModule(options) {
2824
3322
  envObject.checkGCAccess();
2825
3323
  if (!value)
2826
3324
  return envObject.setLastError(1);
3325
+ result >>>= 0;
3326
+ buf >>>= 0;
3327
+ buf_size >>>= 0;
2827
3328
  buf_size = buf_size >>> 0;
2828
3329
  var handle = emnapiCtx.handleStore.get(value);
2829
3330
  if (typeof handle.value !== 'string') {
@@ -2854,6 +3355,9 @@ function createNapiModule(options) {
2854
3355
  envObject.checkGCAccess();
2855
3356
  if (!value)
2856
3357
  return envObject.setLastError(1);
3358
+ result >>>= 0;
3359
+ buf >>>= 0;
3360
+ buf_size >>>= 0;
2857
3361
  buf_size = buf_size >>> 0;
2858
3362
  var handle = emnapiCtx.handleStore.get(value);
2859
3363
  if (typeof handle.value !== 'string') {
@@ -2889,6 +3393,7 @@ function createNapiModule(options) {
2889
3393
  if (typeof handle.value !== 'number') {
2890
3394
  return envObject.setLastError(6);
2891
3395
  }
3396
+ result >>>= 0;
2892
3397
  var v = new Uint32Array([handle.value])[0];
2893
3398
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2894
3399
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -2914,7 +3419,8 @@ function createNapiModule(options) {
2914
3419
  napi_get_value_string_latin1: napi_get_value_string_latin1,
2915
3420
  napi_get_value_string_utf16: napi_get_value_string_utf16,
2916
3421
  napi_get_value_string_utf8: napi_get_value_string_utf8,
2917
- napi_get_value_uint32: napi_get_value_uint32
3422
+ napi_get_value_uint32: napi_get_value_uint32,
3423
+ node_api_set_prototype: node_api_set_prototype
2918
3424
  });
2919
3425
  function napi_create_int32(env, value, result) {
2920
3426
  if (!env)
@@ -2923,6 +3429,7 @@ function createNapiModule(options) {
2923
3429
  envObject.checkGCAccess();
2924
3430
  if (!result)
2925
3431
  return envObject.setLastError(1);
3432
+ result >>>= 0;
2926
3433
  var v = emnapiCtx.addToCurrentScope(value).id;
2927
3434
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2928
3435
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -2935,6 +3442,7 @@ function createNapiModule(options) {
2935
3442
  envObject.checkGCAccess();
2936
3443
  if (!result)
2937
3444
  return envObject.setLastError(1);
3445
+ result >>>= 0;
2938
3446
  var v = emnapiCtx.addToCurrentScope(value >>> 0).id;
2939
3447
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2940
3448
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -2950,6 +3458,7 @@ function createNapiModule(options) {
2950
3458
  return envObject.setLastError(1);
2951
3459
  value = Number(low);
2952
3460
  var v1 = emnapiCtx.addToCurrentScope(value).id;
3461
+ high >>>= 0;
2953
3462
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2954
3463
  HEAP_DATA_VIEW.setUint32(high, v1, true);
2955
3464
  return envObject.clearLastError();
@@ -2961,6 +3470,7 @@ function createNapiModule(options) {
2961
3470
  envObject.checkGCAccess();
2962
3471
  if (!result)
2963
3472
  return envObject.setLastError(1);
3473
+ result >>>= 0;
2964
3474
  var v = emnapiCtx.addToCurrentScope(value).id;
2965
3475
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2966
3476
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -3031,6 +3541,7 @@ function createNapiModule(options) {
3031
3541
  return envObject.setLastError(1);
3032
3542
  value = low;
3033
3543
  var v1 = emnapiCtx.addToCurrentScope(value).id;
3544
+ high >>>= 0;
3034
3545
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3035
3546
  HEAP_DATA_VIEW.setUint32(high, v1, true);
3036
3547
  return envObject.clearLastError();
@@ -3048,6 +3559,7 @@ function createNapiModule(options) {
3048
3559
  return envObject.setLastError(1);
3049
3560
  value = low & ((BigInt(1) << BigInt(64)) - BigInt(1));
3050
3561
  var v1 = emnapiCtx.addToCurrentScope(value).id;
3562
+ high >>>= 0;
3051
3563
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3052
3564
  HEAP_DATA_VIEW.setUint32(high, v1, true);
3053
3565
  return envObject.clearLastError();
@@ -3069,6 +3581,8 @@ function createNapiModule(options) {
3069
3581
  }
3070
3582
  if (!result)
3071
3583
  return envObject.setLastError(1);
3584
+ words >>>= 0;
3585
+ word_count >>>= 0;
3072
3586
  word_count = word_count >>> 0;
3073
3587
  if (word_count > 2147483647) {
3074
3588
  return envObject.setLastError(1);
@@ -3085,6 +3599,7 @@ function createNapiModule(options) {
3085
3599
  value += wordi << BigInt(64 * i);
3086
3600
  }
3087
3601
  value *= ((BigInt(sign_bit) % BigInt(2) === BigInt(0)) ? BigInt(1) : BigInt(-1));
3602
+ result >>>= 0;
3088
3603
  v = emnapiCtx.addToCurrentScope(value).id;
3089
3604
  HEAP_DATA_VIEW.setUint32(result, v, true);
3090
3605
  return envObject.getReturnStatus();
@@ -3113,6 +3628,7 @@ function createNapiModule(options) {
3113
3628
  node_api_create_property_key_utf8: node_api_create_property_key_utf8
3114
3629
  });
3115
3630
  function emnapiCreateFunction(envObject, utf8name, length, cb, data) {
3631
+ utf8name >>>= 0;
3116
3632
  var functionName = (!utf8name || !length) ? '' : (emnapiString.UTF8ToString(utf8name, length));
3117
3633
  var f;
3118
3634
  var napiCallback = (wasmTable.get(cb));
@@ -3253,6 +3769,7 @@ function createNapiModule(options) {
3253
3769
  if (!finalize_cb)
3254
3770
  return envObject.setLastError(1);
3255
3771
  reference = emnapiCtx.createReferenceWithFinalizer(envObject, handle.id, 0, 1, finalize_cb, native_object, finalize_hint);
3772
+ result >>>= 0;
3256
3773
  referenceId = reference.id;
3257
3774
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3258
3775
  HEAP_DATA_VIEW.setUint32(result, referenceId, true);
@@ -3301,6 +3818,7 @@ function createNapiModule(options) {
3301
3818
  if (!ref)
3302
3819
  return envObject.setLastError(1);
3303
3820
  if (result) {
3821
+ result >>>= 0;
3304
3822
  data = ref.data();
3305
3823
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3306
3824
  HEAP_DATA_VIEW.setUint32(result, data, true);
@@ -3337,12 +3855,15 @@ function createNapiModule(options) {
3337
3855
  return envObject.setLastError(1);
3338
3856
  if (!constructor)
3339
3857
  return envObject.setLastError(1);
3858
+ length >>>= 0;
3859
+ properties >>>= 0;
3860
+ property_count >>>= 0;
3340
3861
  property_count = property_count >>> 0;
3341
3862
  if (property_count > 0) {
3342
3863
  if (!properties)
3343
3864
  return envObject.setLastError(1);
3344
3865
  }
3345
- if ((length < -1) || (length > 2147483647) || (!utf8name)) {
3866
+ if (!((length >= -1 && length <= 2147483647) || length === 4294967295) || (!utf8name)) {
3346
3867
  return envObject.setLastError(1);
3347
3868
  }
3348
3869
  var fresult = emnapiCreateFunction(envObject, utf8name, length, constructor, callback_data);
@@ -3360,6 +3881,7 @@ function createNapiModule(options) {
3360
3881
  var setter = HEAP_DATA_VIEW.getUint32(propPtr + 16, true);
3361
3882
  var value = HEAP_DATA_VIEW.getUint32(propPtr + 20, true);
3362
3883
  attributes = HEAP_DATA_VIEW.getInt32(propPtr + 24, true);
3884
+ attributes >>>= 0;
3363
3885
  var data = HEAP_DATA_VIEW.getUint32(propPtr + 28, true);
3364
3886
  if (utf8Name) {
3365
3887
  propertyName = emnapiString.UTF8ToString(utf8Name, -1);
@@ -3381,6 +3903,7 @@ function createNapiModule(options) {
3381
3903
  }
3382
3904
  var valueHandle = emnapiCtx.addToCurrentScope(F);
3383
3905
  valueHandleId = valueHandle.id;
3906
+ result >>>= 0;
3384
3907
  HEAP_DATA_VIEW.setUint32(result, valueHandleId, true);
3385
3908
  return envObject.getReturnStatus();
3386
3909
  }
@@ -3416,6 +3939,7 @@ function createNapiModule(options) {
3416
3939
  if (!(value.isObject() || value.isFunction())) {
3417
3940
  return envObject.setLastError(envObject.tryCatch.hasCaught() ? 10 : 2);
3418
3941
  }
3942
+ type_tag >>>= 0;
3419
3943
  if (!type_tag) {
3420
3944
  return envObject.setLastError(envObject.tryCatch.hasCaught() ? 10 : 1);
3421
3945
  }
@@ -3460,6 +3984,7 @@ function createNapiModule(options) {
3460
3984
  }
3461
3985
  var binding = envObject.getObjectBinding(value.value);
3462
3986
  if (binding.tag !== null) {
3987
+ type_tag >>>= 0;
3463
3988
  var tag = binding.tag;
3464
3989
  var typeTag = new Uint32Array(wasmMemory.buffer, type_tag, 4);
3465
3990
  ret = (tag[0] === typeTag[0] &&
@@ -3470,6 +3995,7 @@ function createNapiModule(options) {
3470
3995
  else {
3471
3996
  ret = false;
3472
3997
  }
3998
+ result >>>= 0;
3473
3999
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3474
4000
  HEAP_DATA_VIEW.setInt8(result, ret ? 1 : 0, true);
3475
4001
  return envObject.getReturnStatus();
@@ -3497,8 +4023,12 @@ function createNapiModule(options) {
3497
4023
  }
3498
4024
  var handle = handleResult.handle;
3499
4025
  var ownership = !result ? 0 : 1;
4026
+ finalize_data >>>= 0;
4027
+ finalize_cb >>>= 0;
4028
+ finalize_hint >>>= 0;
3500
4029
  var reference = emnapiCtx.createReferenceWithFinalizer(envObject, handle.id, 0, ownership, finalize_cb, finalize_data, finalize_hint);
3501
4030
  if (result) {
4031
+ result >>>= 0;
3502
4032
  var referenceId = reference.id;
3503
4033
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3504
4034
  HEAP_DATA_VIEW.setUint32(result, referenceId, true);
@@ -3537,6 +4067,9 @@ function createNapiModule(options) {
3537
4067
  try {
3538
4068
  if (!result)
3539
4069
  return envObject.setLastError(1);
4070
+ byte_length >>>= 0;
4071
+ external_data >>>= 0;
4072
+ result >>>= 0;
3540
4073
  byte_length = byte_length >>> 0;
3541
4074
  if (!external_data) {
3542
4075
  byte_length = 0;
@@ -3588,6 +4121,12 @@ function createNapiModule(options) {
3588
4121
  case -1:
3589
4122
  viewDescriptor = { Ctor: DataView, address: external_data, length: byte_length, ownership: 1, runtimeAllocated: 0 };
3590
4123
  break;
4124
+ case 11:
4125
+ if (typeof Float16Array !== 'function') {
4126
+ return envObject.setLastError(1);
4127
+ }
4128
+ viewDescriptor = { Ctor: Float16Array, address: external_data, length: byte_length >> 1, ownership: 1, runtimeAllocated: 0 };
4129
+ break;
3591
4130
  case -2: {
3592
4131
  if (!emnapiCtx.feature.Buffer) {
3593
4132
  throw emnapiCtx.createNotSupportBufferError('emnapi_create_memory_view', '');
@@ -3641,7 +4180,7 @@ function createNapiModule(options) {
3641
4180
  var pointer = emnapiExternalMemory.getArrayBufferPointer(arrayBufferOrView, false).address;
3642
4181
  if (!pointer)
3643
4182
  throw new Error('Unknown ArrayBuffer address');
3644
- if (typeof len !== 'number' || len === -1) {
4183
+ if (typeof len !== 'number' || len === -1 || len === 4294967295) {
3645
4184
  len = arrayBufferOrView.byteLength - offset;
3646
4185
  }
3647
4186
  len = len >>> 0;
@@ -3663,7 +4202,7 @@ function createNapiModule(options) {
3663
4202
  var pointer = viewPointerInfo.address;
3664
4203
  if (!pointer)
3665
4204
  throw new Error('Unknown ArrayBuffer address');
3666
- if (typeof len !== 'number' || len === -1) {
4205
+ if (typeof len !== 'number' || len === -1 || len === 4294967295) {
3667
4206
  len = latestView.byteLength - offset;
3668
4207
  }
3669
4208
  len = len >>> 0;
@@ -3695,6 +4234,9 @@ function createNapiModule(options) {
3695
4234
  try {
3696
4235
  if (!arraybuffer_or_view)
3697
4236
  return envObject.setLastError(1);
4237
+ arraybuffer_or_view >>>= 0;
4238
+ offset >>>= 0;
4239
+ len >>>= 0;
3698
4240
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3699
4241
  var handleId = HEAP_DATA_VIEW.getUint32(arraybuffer_or_view, true);
3700
4242
  var handle = envObject.ctx.handleStore.get(handleId);
@@ -3703,6 +4245,7 @@ function createNapiModule(options) {
3703
4245
  }
3704
4246
  var ret = $emnapiSyncMemory(Boolean(js_to_wasm), handle.value, offset, len);
3705
4247
  if (handle.value !== ret) {
4248
+ arraybuffer_or_view >>>= 0;
3706
4249
  v = envObject.ensureHandleId(ret);
3707
4250
  HEAP_DATA_VIEW.setUint32(arraybuffer_or_view, v, true);
3708
4251
  }
@@ -3756,13 +4299,16 @@ function createNapiModule(options) {
3756
4299
  p = info.address;
3757
4300
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3758
4301
  if (address) {
4302
+ address >>>= 0;
3759
4303
  HEAP_DATA_VIEW.setUint32(address, p, true);
3760
4304
  }
3761
4305
  if (ownership) {
4306
+ ownership >>>= 0;
3762
4307
  ownershipOut = info.ownership;
3763
4308
  HEAP_DATA_VIEW.setInt32(ownership, ownershipOut, true);
3764
4309
  }
3765
4310
  if (runtime_allocated) {
4311
+ runtime_allocated >>>= 0;
3766
4312
  runtimeAllocated = info.runtimeAllocated;
3767
4313
  HEAP_DATA_VIEW.setInt8(runtime_allocated, runtimeAllocated, true);
3768
4314
  }
@@ -3788,22 +4334,102 @@ function createNapiModule(options) {
3788
4334
  }
3789
4335
  var versions = runtimeVersion.split('.')
3790
4336
  .map(function (n) { return Number(n); });
4337
+ version >>>= 0;
3791
4338
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3792
4339
  HEAP_DATA_VIEW.setUint32(version, versions[0], true);
3793
4340
  HEAP_DATA_VIEW.setUint32(version + 4, versions[1], true);
3794
4341
  HEAP_DATA_VIEW.setUint32(version + 8, versions[2], true);
3795
4342
  return envObject.clearLastError();
3796
4343
  }
4344
+ function emnapi_get_external_sharedarraybuffer_handle(env, sharedarraybuffer, handle) {
4345
+ if (!env)
4346
+ return 1;
4347
+ var envObject = emnapiCtx.envStore.get(env);
4348
+ envObject.checkGCAccess();
4349
+ if (!envObject.tryCatch.isEmpty())
4350
+ return envObject.setLastError(10);
4351
+ if (!envObject.canCallIntoJs())
4352
+ return envObject.setLastError(envObject.moduleApiVersion >= 10 ? 23 : 10);
4353
+ envObject.clearLastError();
4354
+ try {
4355
+ if (!sharedarraybuffer)
4356
+ return envObject.setLastError(1);
4357
+ if (!handle)
4358
+ return envObject.setLastError(1);
4359
+ handle >>>= 0;
4360
+ var jsValue = emnapiCtx.handleStore.get(sharedarraybuffer).value;
4361
+ if (!emnapiExternalMemory.isSharedArrayBuffer(jsValue)) {
4362
+ return envObject.setLastError(1);
4363
+ }
4364
+ var metaPtr = emnapiExternalSAB.handleTable.get(jsValue);
4365
+ if (metaPtr === undefined) {
4366
+ return envObject.setLastError(1);
4367
+ }
4368
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4369
+ HEAP_DATA_VIEW.setUint32(handle, metaPtr, true);
4370
+ return envObject.getReturnStatus();
4371
+ }
4372
+ catch (err) {
4373
+ envObject.tryCatch.setError(err);
4374
+ return envObject.setLastError(10);
4375
+ }
4376
+ }
4377
+ function emnapi_acquire_external_sharedarraybuffer(handle) {
4378
+ handle >>>= 0;
4379
+ Atomics.add(new Int32Array(wasmMemory.buffer, handle, 1), 0, 1);
4380
+ }
4381
+ function emnapi_release_external_sharedarraybuffer(handle) {
4382
+ handle >>>= 0;
4383
+ emnapiExternalSAB.release(handle);
4384
+ }
4385
+ function $emnapiAcquireExternalSharedArrayBuffer(handle, sab) {
4386
+ if (sab != null && !emnapiExternalMemory.isSharedArrayBuffer(sab)) {
4387
+ throw new TypeError('Expected a SharedArrayBuffer');
4388
+ }
4389
+ if (!emnapiExternalSAB.registry) {
4390
+ throw new Error('FinalizationRegistry is not supported in this environment');
4391
+ }
4392
+ handle >>>= 0;
4393
+ var meta = emnapiExternalSAB.readMeta(handle);
4394
+ var external_data = meta.external_data;
4395
+ external_data >>>= 0;
4396
+ if (sab == null) {
4397
+ sab = new SharedArrayBuffer(meta.byte_length);
4398
+ new Uint8Array(sab).set(new Uint8Array(wasmMemory.buffer, external_data, meta.byte_length));
4399
+ }
4400
+ else {
4401
+ if (emnapiExternalSAB.handleTable.has(sab)) {
4402
+ return sab;
4403
+ }
4404
+ }
4405
+ Atomics.add(new Int32Array(wasmMemory.buffer, handle, 1), 0, 1);
4406
+ if (!emnapiExternalMemory.table.has(sab)) {
4407
+ if (external_data) {
4408
+ emnapiExternalMemory.table.set(sab, {
4409
+ address: external_data,
4410
+ ownership: 1,
4411
+ runtimeAllocated: 0
4412
+ });
4413
+ }
4414
+ }
4415
+ emnapiExternalSAB.handleTable.set(sab, handle);
4416
+ emnapiExternalSAB.registry.register(sab, handle);
4417
+ return sab;
4418
+ }
3797
4419
  var emnapiMod = Object.freeze({
3798
4420
  __proto__: null,
4421
+ $emnapiAcquireExternalSharedArrayBuffer: $emnapiAcquireExternalSharedArrayBuffer,
3799
4422
  $emnapiGetMemoryAddress: $emnapiGetMemoryAddress,
3800
4423
  $emnapiSyncMemory: $emnapiSyncMemory,
4424
+ emnapi_acquire_external_sharedarraybuffer: emnapi_acquire_external_sharedarraybuffer,
3801
4425
  emnapi_create_memory_view: emnapi_create_memory_view,
4426
+ emnapi_get_external_sharedarraybuffer_handle: emnapi_get_external_sharedarraybuffer_handle,
3802
4427
  emnapi_get_memory_address: emnapi_get_memory_address,
3803
4428
  emnapi_get_runtime_version: emnapi_get_runtime_version,
3804
4429
  emnapi_is_node_binding_available: emnapi_is_node_binding_available,
3805
4430
  emnapi_is_support_bigint: emnapi_is_support_bigint,
3806
4431
  emnapi_is_support_weakref: emnapi_is_support_weakref,
4432
+ emnapi_release_external_sharedarraybuffer: emnapi_release_external_sharedarraybuffer,
3807
4433
  emnapi_sync_memory: emnapi_sync_memory
3808
4434
  });
3809
4435
  function napi_create_array(env, result) {
@@ -3813,6 +4439,7 @@ function createNapiModule(options) {
3813
4439
  envObject.checkGCAccess();
3814
4440
  if (!result)
3815
4441
  return envObject.setLastError(1);
4442
+ result >>>= 0;
3816
4443
  var value = emnapiCtx.addToCurrentScope([]).id;
3817
4444
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3818
4445
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -3825,6 +4452,8 @@ function createNapiModule(options) {
3825
4452
  envObject.checkGCAccess();
3826
4453
  if (!result)
3827
4454
  return envObject.setLastError(1);
4455
+ length >>>= 0;
4456
+ result >>>= 0;
3828
4457
  length = length >>> 0;
3829
4458
  var value = emnapiCtx.addToCurrentScope(new Array(length)).id;
3830
4459
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -3832,9 +4461,11 @@ function createNapiModule(options) {
3832
4461
  return envObject.clearLastError();
3833
4462
  }
3834
4463
  function emnapiCreateArrayBuffer(byte_length, data, shared) {
4464
+ byte_length >>>= 0;
3835
4465
  byte_length = byte_length >>> 0;
3836
4466
  var arrayBuffer = shared ? new SharedArrayBuffer(byte_length) : new ArrayBuffer(byte_length);
3837
4467
  if (data) {
4468
+ data >>>= 0;
3838
4469
  var p = emnapiExternalMemory.getArrayBufferPointer(arrayBuffer, true).address;
3839
4470
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3840
4471
  HEAP_DATA_VIEW.setUint32(data, p, true);
@@ -3855,6 +4486,7 @@ function createNapiModule(options) {
3855
4486
  try {
3856
4487
  if (!result)
3857
4488
  return envObject.setLastError(1);
4489
+ result >>>= 0;
3858
4490
  var arrayBuffer = emnapiCreateArrayBuffer(byte_length, data, false);
3859
4491
  value = emnapiCtx.addToCurrentScope(arrayBuffer).id;
3860
4492
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -3880,6 +4512,7 @@ function createNapiModule(options) {
3880
4512
  try {
3881
4513
  if (!result)
3882
4514
  return envObject.setLastError(1);
4515
+ result >>>= 0;
3883
4516
  var arrayBuffer = emnapiCreateArrayBuffer(byte_length, data, true);
3884
4517
  value = emnapiCtx.addToCurrentScope(arrayBuffer).id;
3885
4518
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -3905,6 +4538,7 @@ function createNapiModule(options) {
3905
4538
  try {
3906
4539
  if (!result)
3907
4540
  return envObject.setLastError(1);
4541
+ result >>>= 0;
3908
4542
  value = emnapiCtx.addToCurrentScope(new Date(time)).id;
3909
4543
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3910
4544
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -3936,6 +4570,7 @@ function createNapiModule(options) {
3936
4570
  if (finalize_cb) {
3937
4571
  emnapiCtx.createReferenceWithFinalizer(envObject, externalHandle.id, 0, 0, finalize_cb, data, finalize_hint);
3938
4572
  }
4573
+ result >>>= 0;
3939
4574
  value = externalHandle.id;
3940
4575
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3941
4576
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -3960,6 +4595,9 @@ function createNapiModule(options) {
3960
4595
  try {
3961
4596
  if (!result)
3962
4597
  return envObject.setLastError(1);
4598
+ byte_length >>>= 0;
4599
+ external_data >>>= 0;
4600
+ result >>>= 0;
3963
4601
  byte_length = byte_length >>> 0;
3964
4602
  if (!external_data) {
3965
4603
  byte_length = 0;
@@ -4010,6 +4648,60 @@ function createNapiModule(options) {
4010
4648
  return envObject.setLastError(10);
4011
4649
  }
4012
4650
  }
4651
+ function node_api_create_external_sharedarraybuffer(env, external_data, byte_length, finalize_cb, finalize_hint, result) {
4652
+ var value;
4653
+ if (!env)
4654
+ return 1;
4655
+ var envObject = emnapiCtx.envStore.get(env);
4656
+ envObject.checkGCAccess();
4657
+ if (!envObject.tryCatch.isEmpty())
4658
+ return envObject.setLastError(10);
4659
+ if (!envObject.canCallIntoJs())
4660
+ return envObject.setLastError(envObject.moduleApiVersion >= 10 ? 23 : 10);
4661
+ envObject.clearLastError();
4662
+ try {
4663
+ if (!result)
4664
+ return envObject.setLastError(1);
4665
+ byte_length >>>= 0;
4666
+ external_data >>>= 0;
4667
+ result >>>= 0;
4668
+ byte_length = byte_length >>> 0;
4669
+ if (!external_data) {
4670
+ byte_length = 0;
4671
+ }
4672
+ if ((external_data + byte_length) > wasmMemory.buffer.byteLength) {
4673
+ throw new RangeError('Memory out of range');
4674
+ }
4675
+ if (!emnapiExternalSAB.registry && finalize_cb) {
4676
+ throw emnapiCtx.createNotSupportWeakRefError('node_api_create_external_sharedarraybuffer', 'Parameter "finalize_cb" must be 0(NULL)');
4677
+ }
4678
+ var sharedArrayBuffer = new SharedArrayBuffer(byte_length);
4679
+ if (byte_length !== 0) {
4680
+ var u8arr = new Uint8Array(sharedArrayBuffer);
4681
+ u8arr.set(new Uint8Array(wasmMemory.buffer).subarray(external_data, external_data + byte_length));
4682
+ emnapiExternalMemory.table.set(sharedArrayBuffer, {
4683
+ address: external_data,
4684
+ ownership: 1,
4685
+ runtimeAllocated: 0
4686
+ });
4687
+ }
4688
+ value = emnapiCtx.addToCurrentScope(sharedArrayBuffer).id;
4689
+ if (finalize_cb) {
4690
+ finalize_cb >>>= 0;
4691
+ finalize_hint >>>= 0;
4692
+ var metaPtr = emnapiExternalSAB.allocMeta(external_data, byte_length, finalize_cb, external_data, finalize_hint);
4693
+ emnapiExternalSAB.handleTable.set(sharedArrayBuffer, metaPtr);
4694
+ emnapiExternalSAB.registry.register(sharedArrayBuffer, metaPtr);
4695
+ }
4696
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4697
+ HEAP_DATA_VIEW.setUint32(result, value, true);
4698
+ return envObject.getReturnStatus();
4699
+ }
4700
+ catch (err) {
4701
+ envObject.tryCatch.setError(err);
4702
+ return envObject.setLastError(10);
4703
+ }
4704
+ }
4013
4705
  function napi_create_object(env, result) {
4014
4706
  if (!env)
4015
4707
  return 1;
@@ -4017,18 +4709,20 @@ function createNapiModule(options) {
4017
4709
  envObject.checkGCAccess();
4018
4710
  if (!result)
4019
4711
  return envObject.setLastError(1);
4712
+ result >>>= 0;
4020
4713
  var value = emnapiCtx.addToCurrentScope({}).id;
4021
4714
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4022
4715
  HEAP_DATA_VIEW.setUint32(result, value, true);
4023
4716
  return envObject.clearLastError();
4024
4717
  }
4025
- function napi_create_object_with_properties(env, prototype_or_null, property_names, property_values, property_count, result) {
4718
+ function node_api_create_object_with_properties(env, prototype_or_null, property_names, property_values, property_count, result) {
4026
4719
  if (!env)
4027
4720
  return 1;
4028
4721
  var envObject = emnapiCtx.envStore.get(env);
4029
4722
  envObject.checkGCAccess();
4030
4723
  if (!result)
4031
4724
  return envObject.setLastError(1);
4725
+ property_count >>>= 0;
4032
4726
  property_count = property_count >>> 0;
4033
4727
  if (property_count > 0) {
4034
4728
  if (!property_names)
@@ -4040,6 +4734,8 @@ function createNapiModule(options) {
4040
4734
  ? emnapiCtx.handleStore.get(prototype_or_null).value
4041
4735
  : null;
4042
4736
  var properties = {};
4737
+ property_names >>>= 0;
4738
+ property_values >>>= 0;
4043
4739
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4044
4740
  for (var i = 0; i < property_count; i++) {
4045
4741
  var name_value = emnapiCtx.handleStore.get(HEAP_DATA_VIEW.getUint32(property_names + i * 4, true)).value;
@@ -4060,6 +4756,7 @@ function createNapiModule(options) {
4060
4756
  return envObject.setLastError(9);
4061
4757
  }
4062
4758
  var value = emnapiCtx.addToCurrentScope(obj).id;
4759
+ result >>>= 0;
4063
4760
  HEAP_DATA_VIEW.setUint32(result, value, true);
4064
4761
  return envObject.clearLastError();
4065
4762
  }
@@ -4070,6 +4767,7 @@ function createNapiModule(options) {
4070
4767
  envObject.checkGCAccess();
4071
4768
  if (!result)
4072
4769
  return envObject.setLastError(1);
4770
+ result >>>= 0;
4073
4771
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4074
4772
  if (!description) {
4075
4773
  var value = emnapiCtx.addToCurrentScope(Symbol()).id;
@@ -4103,10 +4801,9 @@ function createNapiModule(options) {
4103
4801
  if (!result)
4104
4802
  return envObject.setLastError(1);
4105
4803
  var handle = emnapiCtx.handleStore.get(arraybuffer);
4106
- if (!handle.isArrayBuffer()) {
4107
- return envObject.setLastError(1);
4108
- }
4109
4804
  var buffer = handle.value;
4805
+ byte_offset >>>= 0;
4806
+ length >>>= 0;
4110
4807
  var createTypedArray = function (envObject, Type, size_of_element, buffer, byte_offset, length) {
4111
4808
  var _a;
4112
4809
  byte_offset = byte_offset >>> 0;
@@ -4137,36 +4834,47 @@ function createNapiModule(options) {
4137
4834
  });
4138
4835
  }
4139
4836
  }
4837
+ result >>>= 0;
4140
4838
  value = emnapiCtx.addToCurrentScope(out).id;
4141
4839
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4142
4840
  HEAP_DATA_VIEW.setUint32(result, value, true);
4143
4841
  return envObject.getReturnStatus();
4144
4842
  };
4145
- switch (type) {
4146
- case 0:
4147
- return createTypedArray(envObject, Int8Array, 1, buffer, byte_offset, length);
4148
- case 1:
4149
- return createTypedArray(envObject, Uint8Array, 1, buffer, byte_offset, length);
4150
- case 2:
4151
- return createTypedArray(envObject, Uint8ClampedArray, 1, buffer, byte_offset, length);
4152
- case 3:
4153
- return createTypedArray(envObject, Int16Array, 2, buffer, byte_offset, length);
4154
- case 4:
4155
- return createTypedArray(envObject, Uint16Array, 2, buffer, byte_offset, length);
4156
- case 5:
4157
- return createTypedArray(envObject, Int32Array, 4, buffer, byte_offset, length);
4158
- case 6:
4159
- return createTypedArray(envObject, Uint32Array, 4, buffer, byte_offset, length);
4160
- case 7:
4161
- return createTypedArray(envObject, Float32Array, 4, buffer, byte_offset, length);
4162
- case 8:
4163
- return createTypedArray(envObject, Float64Array, 8, buffer, byte_offset, length);
4164
- case 9:
4165
- return createTypedArray(envObject, BigInt64Array, 8, buffer, byte_offset, length);
4166
- case 10:
4167
- return createTypedArray(envObject, BigUint64Array, 8, buffer, byte_offset, length);
4168
- default:
4169
- return envObject.setLastError(1);
4843
+ if (buffer instanceof ArrayBuffer || emnapiExternalMemory.isSharedArrayBuffer(buffer)) {
4844
+ switch (type) {
4845
+ case 0:
4846
+ return createTypedArray(envObject, Int8Array, 1, buffer, byte_offset, length);
4847
+ case 1:
4848
+ return createTypedArray(envObject, Uint8Array, 1, buffer, byte_offset, length);
4849
+ case 2:
4850
+ return createTypedArray(envObject, Uint8ClampedArray, 1, buffer, byte_offset, length);
4851
+ case 3:
4852
+ return createTypedArray(envObject, Int16Array, 2, buffer, byte_offset, length);
4853
+ case 4:
4854
+ return createTypedArray(envObject, Uint16Array, 2, buffer, byte_offset, length);
4855
+ case 5:
4856
+ return createTypedArray(envObject, Int32Array, 4, buffer, byte_offset, length);
4857
+ case 6:
4858
+ return createTypedArray(envObject, Uint32Array, 4, buffer, byte_offset, length);
4859
+ case 7:
4860
+ return createTypedArray(envObject, Float32Array, 4, buffer, byte_offset, length);
4861
+ case 8:
4862
+ return createTypedArray(envObject, Float64Array, 8, buffer, byte_offset, length);
4863
+ case 9:
4864
+ return createTypedArray(envObject, BigInt64Array, 8, buffer, byte_offset, length);
4865
+ case 10:
4866
+ return createTypedArray(envObject, BigUint64Array, 8, buffer, byte_offset, length);
4867
+ case 11:
4868
+ if (typeof Float16Array !== 'function') {
4869
+ return envObject.setLastError(1);
4870
+ }
4871
+ return createTypedArray(envObject, Float16Array, 2, buffer, byte_offset, length);
4872
+ default:
4873
+ return envObject.setLastError(1);
4874
+ }
4875
+ }
4876
+ else {
4877
+ return envObject.setLastError(1);
4170
4878
  }
4171
4879
  }
4172
4880
  catch (err) {
@@ -4193,7 +4901,9 @@ function createNapiModule(options) {
4193
4901
  if (!Buffer) {
4194
4902
  throw emnapiCtx.createNotSupportBufferError('napi_create_buffer', '');
4195
4903
  }
4904
+ result >>>= 0;
4196
4905
  var buffer = void 0;
4906
+ size >>>= 0;
4197
4907
  size = size >>> 0;
4198
4908
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4199
4909
  if (!data || (size === 0)) {
@@ -4205,6 +4915,7 @@ function createNapiModule(options) {
4205
4915
  pointer = _malloc(size);
4206
4916
  if (!pointer)
4207
4917
  throw new Error('Out of memory');
4918
+ pointer >>>= 0;
4208
4919
  new Uint8Array(wasmMemory.buffer).subarray(pointer, pointer + size).fill(0);
4209
4920
  var buffer_1 = Buffer.from(wasmMemory.buffer, pointer, size);
4210
4921
  var viewDescriptor = {
@@ -4218,6 +4929,7 @@ function createNapiModule(options) {
4218
4929
  (_a = emnapiExternalMemory.registry) === null || _a === void 0 ? void 0 : _a.register(viewDescriptor, pointer);
4219
4930
  value = emnapiCtx.addToCurrentScope(buffer_1).id;
4220
4931
  HEAP_DATA_VIEW.setUint32(result, value, true);
4932
+ data >>>= 0;
4221
4933
  HEAP_DATA_VIEW.setUint32(data, pointer, true);
4222
4934
  }
4223
4935
  return envObject.getReturnStatus();
@@ -4247,8 +4959,11 @@ function createNapiModule(options) {
4247
4959
  }
4248
4960
  var arrayBuffer = emnapiCreateArrayBuffer(length, result_data, false);
4249
4961
  var buffer = Buffer.from(arrayBuffer);
4962
+ data >>>= 0;
4963
+ length >>>= 0;
4250
4964
  buffer.set(new Uint8Array(wasmMemory.buffer).subarray(data, data + length));
4251
4965
  value = emnapiCtx.addToCurrentScope(buffer).id;
4966
+ result >>>= 0;
4252
4967
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4253
4968
  HEAP_DATA_VIEW.setUint32(result, value, true);
4254
4969
  return envObject.getReturnStatus();
@@ -4277,6 +4992,8 @@ function createNapiModule(options) {
4277
4992
  return envObject.setLastError(1);
4278
4993
  if (!result)
4279
4994
  return envObject.setLastError(1);
4995
+ byte_offset >>>= 0;
4996
+ byte_length >>>= 0;
4280
4997
  byte_offset = byte_offset >>> 0;
4281
4998
  byte_length = byte_length >>> 0;
4282
4999
  var handle = emnapiCtx.handleStore.get(arraybuffer);
@@ -4305,6 +5022,7 @@ function createNapiModule(options) {
4305
5022
  });
4306
5023
  }
4307
5024
  }
5025
+ result >>>= 0;
4308
5026
  value = emnapiCtx.addToCurrentScope(out).id;
4309
5027
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4310
5028
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4330,6 +5048,8 @@ function createNapiModule(options) {
4330
5048
  return envObject.setLastError(1);
4331
5049
  if (!result)
4332
5050
  return envObject.setLastError(1);
5051
+ byte_length >>>= 0;
5052
+ byte_offset >>>= 0;
4333
5053
  byte_length = byte_length >>> 0;
4334
5054
  byte_offset = byte_offset >>> 0;
4335
5055
  var value = emnapiCtx.handleStore.get(arraybuffer).value;
@@ -4351,6 +5071,7 @@ function createNapiModule(options) {
4351
5071
  });
4352
5072
  }
4353
5073
  }
5074
+ result >>>= 0;
4354
5075
  var v = emnapiCtx.addToCurrentScope(dataview).id;
4355
5076
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4356
5077
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -4375,7 +5096,10 @@ function createNapiModule(options) {
4375
5096
  envObject.checkGCAccess();
4376
5097
  if (!result)
4377
5098
  return envObject.setLastError(1);
4378
- var autoLength = length === -1;
5099
+ length >>>= 0;
5100
+ utf8description >>>= 0;
5101
+ result >>>= 0;
5102
+ var autoLength = length === -1 || length === 4294967295;
4379
5103
  var sizelength = length >>> 0;
4380
5104
  if (length !== 0) {
4381
5105
  if (!utf8description)
@@ -4403,10 +5127,11 @@ function createNapiModule(options) {
4403
5127
  napi_create_external_arraybuffer: napi_create_external_arraybuffer,
4404
5128
  napi_create_external_buffer: napi_create_external_buffer,
4405
5129
  napi_create_object: napi_create_object,
4406
- napi_create_object_with_properties: napi_create_object_with_properties,
4407
5130
  napi_create_symbol: napi_create_symbol,
4408
5131
  napi_create_typedarray: napi_create_typedarray,
4409
5132
  node_api_create_buffer_from_arraybuffer: node_api_create_buffer_from_arraybuffer,
5133
+ node_api_create_external_sharedarraybuffer: node_api_create_external_sharedarraybuffer,
5134
+ node_api_create_object_with_properties: node_api_create_object_with_properties,
4410
5135
  node_api_create_sharedarraybuffer: node_api_create_sharedarraybuffer,
4411
5136
  node_api_symbol_for: node_api_symbol_for
4412
5137
  });
@@ -4417,6 +5142,7 @@ function createNapiModule(options) {
4417
5142
  envObject.checkGCAccess();
4418
5143
  if (!result)
4419
5144
  return envObject.setLastError(1);
5145
+ result >>>= 0;
4420
5146
  var v = value === 0 ? 3 : 4;
4421
5147
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4422
5148
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -4429,6 +5155,7 @@ function createNapiModule(options) {
4429
5155
  envObject.checkGCAccess();
4430
5156
  if (!result)
4431
5157
  return envObject.setLastError(1);
5158
+ result >>>= 0;
4432
5159
  var value = 5;
4433
5160
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4434
5161
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4441,6 +5168,7 @@ function createNapiModule(options) {
4441
5168
  envObject.checkGCAccess();
4442
5169
  if (!result)
4443
5170
  return envObject.setLastError(1);
5171
+ result >>>= 0;
4444
5172
  var value = 2;
4445
5173
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4446
5174
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4453,6 +5181,7 @@ function createNapiModule(options) {
4453
5181
  envObject.checkGCAccess();
4454
5182
  if (!result)
4455
5183
  return envObject.setLastError(1);
5184
+ result >>>= 0;
4456
5185
  var value = 1;
4457
5186
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4458
5187
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4469,6 +5198,9 @@ function createNapiModule(options) {
4469
5198
  if (!env)
4470
5199
  return 1;
4471
5200
  var envObject = emnapiCtx.envStore.get(env);
5201
+ data >>>= 0;
5202
+ finalize_cb >>>= 0;
5203
+ finalize_hint >>>= 0;
4472
5204
  envObject.setInstanceData(data, finalize_cb, finalize_hint);
4473
5205
  return envObject.clearLastError();
4474
5206
  }
@@ -4478,6 +5210,7 @@ function createNapiModule(options) {
4478
5210
  var envObject = emnapiCtx.envStore.get(env);
4479
5211
  if (!data)
4480
5212
  return envObject.setLastError(1);
5213
+ data >>>= 0;
4481
5214
  var value = envObject.getInstanceData();
4482
5215
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4483
5216
  HEAP_DATA_VIEW.setUint32(data, value, true);
@@ -4489,11 +5222,15 @@ function createNapiModule(options) {
4489
5222
  napi_set_instance_data: napi_set_instance_data
4490
5223
  });
4491
5224
  function _emnapi_get_last_error_info(env, error_code, engine_error_code, engine_reserved) {
5225
+ error_code >>>= 0;
5226
+ engine_error_code >>>= 0;
5227
+ engine_reserved >>>= 0;
4492
5228
  var envObject = emnapiCtx.envStore.get(env);
4493
5229
  var lastError = envObject.lastError;
4494
5230
  var errorCode = lastError.errorCode;
4495
5231
  var engineErrorCode = lastError.engineErrorCode >>> 0;
4496
5232
  var engineReserved = lastError.engineReserved;
5233
+ engineReserved >>>= 0;
4497
5234
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4498
5235
  HEAP_DATA_VIEW.setInt32(error_code, errorCode, true);
4499
5236
  HEAP_DATA_VIEW.setUint32(engine_error_code, engineErrorCode, true);
@@ -4533,6 +5270,8 @@ function createNapiModule(options) {
4533
5270
  try {
4534
5271
  if (!msg)
4535
5272
  return envObject.setLastError(1);
5273
+ code >>>= 0;
5274
+ msg >>>= 0;
4536
5275
  var error = new Error(emnapiString.UTF8ToString(msg, -1));
4537
5276
  if (code)
4538
5277
  error.code = emnapiString.UTF8ToString(code, -1);
@@ -4557,6 +5296,8 @@ function createNapiModule(options) {
4557
5296
  try {
4558
5297
  if (!msg)
4559
5298
  return envObject.setLastError(1);
5299
+ code >>>= 0;
5300
+ msg >>>= 0;
4560
5301
  var error = new TypeError(emnapiString.UTF8ToString(msg, -1));
4561
5302
  if (code)
4562
5303
  error.code = emnapiString.UTF8ToString(code, -1);
@@ -4581,6 +5322,8 @@ function createNapiModule(options) {
4581
5322
  try {
4582
5323
  if (!msg)
4583
5324
  return envObject.setLastError(1);
5325
+ code >>>= 0;
5326
+ msg >>>= 0;
4584
5327
  var error = new RangeError(emnapiString.UTF8ToString(msg, -1));
4585
5328
  if (code)
4586
5329
  error.code = emnapiString.UTF8ToString(code, -1);
@@ -4605,6 +5348,8 @@ function createNapiModule(options) {
4605
5348
  try {
4606
5349
  if (!msg)
4607
5350
  return envObject.setLastError(1);
5351
+ code >>>= 0;
5352
+ msg >>>= 0;
4608
5353
  var error = new SyntaxError(emnapiString.UTF8ToString(msg, -1));
4609
5354
  if (code)
4610
5355
  error.code = emnapiString.UTF8ToString(code, -1);
@@ -4624,6 +5369,7 @@ function createNapiModule(options) {
4624
5369
  if (!result)
4625
5370
  return envObject.setLastError(1);
4626
5371
  var r = envObject.tryCatch.hasCaught();
5372
+ result >>>= 0;
4627
5373
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4628
5374
  HEAP_DATA_VIEW.setInt8(result, r ? 1 : 0, true);
4629
5375
  return envObject.clearLastError();
@@ -4649,6 +5395,7 @@ function createNapiModule(options) {
4649
5395
  }
4650
5396
  error.code = codeValue;
4651
5397
  }
5398
+ result >>>= 0;
4652
5399
  var value = emnapiCtx.addToCurrentScope(error).id;
4653
5400
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4654
5401
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4675,6 +5422,7 @@ function createNapiModule(options) {
4675
5422
  }
4676
5423
  error.code = codeValue;
4677
5424
  }
5425
+ result >>>= 0;
4678
5426
  var value = emnapiCtx.addToCurrentScope(error).id;
4679
5427
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4680
5428
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4701,6 +5449,7 @@ function createNapiModule(options) {
4701
5449
  }
4702
5450
  error.code = codeValue;
4703
5451
  }
5452
+ result >>>= 0;
4704
5453
  var value = emnapiCtx.addToCurrentScope(error).id;
4705
5454
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4706
5455
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4727,6 +5476,7 @@ function createNapiModule(options) {
4727
5476
  }
4728
5477
  error.code = codeValue;
4729
5478
  }
5479
+ result >>>= 0;
4730
5480
  var value = emnapiCtx.addToCurrentScope(error).id;
4731
5481
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4732
5482
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4739,6 +5489,7 @@ function createNapiModule(options) {
4739
5489
  envObject.checkGCAccess();
4740
5490
  if (!result)
4741
5491
  return envObject.setLastError(1);
5492
+ result >>>= 0;
4742
5493
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4743
5494
  if (!envObject.tryCatch.hasCaught()) {
4744
5495
  HEAP_DATA_VIEW.setUint32(result, 1, true);
@@ -4753,6 +5504,10 @@ function createNapiModule(options) {
4753
5504
  return envObject.clearLastError();
4754
5505
  }
4755
5506
  function napi_fatal_error(location, location_len, message, message_len) {
5507
+ location >>>= 0;
5508
+ location_len >>>= 0;
5509
+ message >>>= 0;
5510
+ message_len >>>= 0;
4756
5511
  var locationStr = emnapiString.UTF8ToString(location, location_len);
4757
5512
  var messageStr = emnapiString.UTF8ToString(message, message_len);
4758
5513
  if (emnapiNodeBinding) {
@@ -4806,8 +5561,21 @@ function createNapiModule(options) {
4806
5561
  node_api_create_syntax_error: node_api_create_syntax_error,
4807
5562
  node_api_throw_syntax_error: node_api_throw_syntax_error
4808
5563
  });
5564
+ function _emnapi_create_function(env, utf8name, length, cb, data, result) {
5565
+ length >>>= 0;
5566
+ var envObject = emnapiCtx.envStore.get(env);
5567
+ var fresult = emnapiCreateFunction(envObject, utf8name, length, cb, data);
5568
+ if (fresult.status !== 0)
5569
+ return envObject.setLastError(fresult.status);
5570
+ var f = fresult.f;
5571
+ var valueHandle = emnapiCtx.addToCurrentScope(f);
5572
+ result >>>= 0;
5573
+ var value = valueHandle.id;
5574
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5575
+ HEAP_DATA_VIEW.setUint32(result, value, true);
5576
+ return envObject.getReturnStatus();
5577
+ }
4809
5578
  function napi_create_function(env, utf8name, length, cb, data, result) {
4810
- var value;
4811
5579
  if (!env)
4812
5580
  return 1;
4813
5581
  var envObject = emnapiCtx.envStore.get(env);
@@ -4822,15 +5590,7 @@ function createNapiModule(options) {
4822
5590
  return envObject.setLastError(1);
4823
5591
  if (!cb)
4824
5592
  return envObject.setLastError(1);
4825
- var fresult = emnapiCreateFunction(envObject, utf8name, length, cb, data);
4826
- if (fresult.status !== 0)
4827
- return envObject.setLastError(fresult.status);
4828
- var f = fresult.f;
4829
- var valueHandle = emnapiCtx.addToCurrentScope(f);
4830
- value = valueHandle.id;
4831
- var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4832
- HEAP_DATA_VIEW.setUint32(result, value, true);
4833
- return envObject.getReturnStatus();
5593
+ return _emnapi_create_function(env, utf8name, length, cb, data, result);
4834
5594
  }
4835
5595
  catch (err) {
4836
5596
  envObject.tryCatch.setError(err);
@@ -4844,11 +5604,14 @@ function createNapiModule(options) {
4844
5604
  if (!cbinfo)
4845
5605
  return envObject.setLastError(1);
4846
5606
  var cbinfoValue = emnapiCtx.scopeStore.get(cbinfo).callbackInfo;
5607
+ argc >>>= 0;
5608
+ argv >>>= 0;
4847
5609
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4848
5610
  if (argv) {
4849
5611
  if (!argc)
4850
5612
  return envObject.setLastError(1);
4851
5613
  var argcValue = HEAP_DATA_VIEW.getUint32(argc, true);
5614
+ argcValue >>>= 0;
4852
5615
  var len = cbinfoValue.args.length;
4853
5616
  var arrlen = argcValue < len ? argcValue : len;
4854
5617
  var i = 0;
@@ -4866,10 +5629,12 @@ function createNapiModule(options) {
4866
5629
  HEAP_DATA_VIEW.setUint32(argc, cbinfoValue.args.length, true);
4867
5630
  }
4868
5631
  if (this_arg) {
5632
+ this_arg >>>= 0;
4869
5633
  var v = envObject.ensureHandleId(cbinfoValue.thiz);
4870
5634
  HEAP_DATA_VIEW.setUint32(this_arg, v, true);
4871
5635
  }
4872
5636
  if (data) {
5637
+ data >>>= 0;
4873
5638
  HEAP_DATA_VIEW.setUint32(data, cbinfoValue.data, true);
4874
5639
  }
4875
5640
  return envObject.clearLastError();
@@ -4889,6 +5654,9 @@ function createNapiModule(options) {
4889
5654
  try {
4890
5655
  if (!recv)
4891
5656
  return envObject.setLastError(1);
5657
+ argc >>>= 0;
5658
+ argv >>>= 0;
5659
+ result >>>= 0;
4892
5660
  argc = argc >>> 0;
4893
5661
  if (argc > 0) {
4894
5662
  if (!argv)
@@ -4933,6 +5701,9 @@ function createNapiModule(options) {
4933
5701
  try {
4934
5702
  if (!constructor)
4935
5703
  return envObject.setLastError(1);
5704
+ argc >>>= 0;
5705
+ argv >>>= 0;
5706
+ result >>>= 0;
4936
5707
  argc = argc >>> 0;
4937
5708
  if (argc > 0) {
4938
5709
  if (!argv)
@@ -4983,6 +5754,7 @@ function createNapiModule(options) {
4983
5754
  return envObject.setLastError(1);
4984
5755
  if (!result)
4985
5756
  return envObject.setLastError(1);
5757
+ result >>>= 0;
4986
5758
  var cbinfoValue = emnapiCtx.scopeStore.get(cbinfo).callbackInfo;
4987
5759
  var thiz = cbinfoValue.thiz, fn = cbinfoValue.fn;
4988
5760
  var value = thiz == null || thiz.constructor == null
@@ -4996,6 +5768,7 @@ function createNapiModule(options) {
4996
5768
  }
4997
5769
  var functionMod = Object.freeze({
4998
5770
  __proto__: null,
5771
+ _emnapi_create_function: _emnapi_create_function,
4999
5772
  napi_call_function: napi_call_function,
5000
5773
  napi_create_function: napi_create_function,
5001
5774
  napi_get_cb_info: napi_get_cb_info,
@@ -5010,6 +5783,7 @@ function createNapiModule(options) {
5010
5783
  if (!result)
5011
5784
  return envObject.setLastError(1);
5012
5785
  var scope = emnapiCtx.openScope(envObject);
5786
+ result >>>= 0;
5013
5787
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5014
5788
  HEAP_DATA_VIEW.setUint32(result, scope.id, true);
5015
5789
  return envObject.clearLastError();
@@ -5035,6 +5809,7 @@ function createNapiModule(options) {
5035
5809
  if (!result)
5036
5810
  return envObject.setLastError(1);
5037
5811
  var scope = emnapiCtx.openScope(envObject);
5812
+ result >>>= 0;
5038
5813
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5039
5814
  HEAP_DATA_VIEW.setUint32(result, scope.id, true);
5040
5815
  return envObject.clearLastError();
@@ -5065,6 +5840,8 @@ function createNapiModule(options) {
5065
5840
  return envObject.setLastError(1);
5066
5841
  var scopeObject = emnapiCtx.scopeStore.get(scope);
5067
5842
  if (!scopeObject.escapeCalled()) {
5843
+ escapee >>>= 0;
5844
+ result >>>= 0;
5068
5845
  var newHandle = scopeObject.escape(escapee);
5069
5846
  var value = newHandle ? newHandle.id : 0;
5070
5847
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -5089,6 +5866,7 @@ function createNapiModule(options) {
5089
5866
  }
5090
5867
  }
5091
5868
  var ref = emnapiCtx.createReference(envObject, handle.id, initial_refcount >>> 0, 1);
5869
+ result >>>= 0;
5092
5870
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5093
5871
  HEAP_DATA_VIEW.setUint32(result, ref.id, true);
5094
5872
  return envObject.clearLastError();
@@ -5111,6 +5889,7 @@ function createNapiModule(options) {
5111
5889
  return envObject.setLastError(1);
5112
5890
  var count = emnapiCtx.refStore.get(ref).ref();
5113
5891
  if (result) {
5892
+ result >>>= 0;
5114
5893
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5115
5894
  HEAP_DATA_VIEW.setUint32(result, count, true);
5116
5895
  }
@@ -5130,6 +5909,7 @@ function createNapiModule(options) {
5130
5909
  }
5131
5910
  var count = reference.unref();
5132
5911
  if (result) {
5912
+ result >>>= 0;
5133
5913
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5134
5914
  HEAP_DATA_VIEW.setUint32(result, count, true);
5135
5915
  }
@@ -5146,6 +5926,7 @@ function createNapiModule(options) {
5146
5926
  return envObject.setLastError(1);
5147
5927
  var reference = emnapiCtx.refStore.get(ref);
5148
5928
  var handleId = reference.get(envObject);
5929
+ result >>>= 0;
5149
5930
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5150
5931
  HEAP_DATA_VIEW.setUint32(result, handleId, true);
5151
5932
  return envObject.clearLastError();
@@ -5156,6 +5937,8 @@ function createNapiModule(options) {
5156
5937
  var envObject = emnapiCtx.envStore.get(env);
5157
5938
  if (!fun)
5158
5939
  return envObject.setLastError(1);
5940
+ fun >>>= 0;
5941
+ arg >>>= 0;
5159
5942
  emnapiCtx.addCleanupHook(envObject, fun, arg);
5160
5943
  return 0;
5161
5944
  }
@@ -5165,6 +5948,8 @@ function createNapiModule(options) {
5165
5948
  var envObject = emnapiCtx.envStore.get(env);
5166
5949
  if (!fun)
5167
5950
  return envObject.setLastError(1);
5951
+ fun >>>= 0;
5952
+ arg >>>= 0;
5168
5953
  emnapiCtx.removeCleanupHook(envObject, fun, arg);
5169
5954
  return 0;
5170
5955
  }
@@ -5225,8 +6010,10 @@ function createNapiModule(options) {
5225
6010
  var p = new Promise(function (resolve, reject) {
5226
6011
  var deferredObject = emnapiCtx.createDeferred({ resolve: resolve, reject: reject });
5227
6012
  deferredObjectId = deferredObject.id;
6013
+ deferred >>>= 0;
5228
6014
  HEAP_DATA_VIEW.setUint32(deferred, deferredObjectId, true);
5229
6015
  });
6016
+ promise >>>= 0;
5230
6017
  value = emnapiCtx.addToCurrentScope(p).id;
5231
6018
  HEAP_DATA_VIEW.setUint32(promise, value, true);
5232
6019
  return envObject.getReturnStatus();
@@ -5294,6 +6081,7 @@ function createNapiModule(options) {
5294
6081
  if (!is_promise)
5295
6082
  return envObject.setLastError(1);
5296
6083
  var h = emnapiCtx.handleStore.get(value);
6084
+ is_promise >>>= 0;
5297
6085
  var r = h.isPromise() ? 1 : 0;
5298
6086
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5299
6087
  HEAP_DATA_VIEW.setInt8(is_promise, r, true);
@@ -5437,6 +6225,7 @@ function createNapiModule(options) {
5437
6225
  }
5438
6226
  }
5439
6227
  }
6228
+ result >>>= 0;
5440
6229
  value = emnapiCtx.addToCurrentScope(ret).id;
5441
6230
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5442
6231
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -5508,6 +6297,7 @@ function createNapiModule(options) {
5508
6297
  catch (_) {
5509
6298
  return envObject.setLastError(2);
5510
6299
  }
6300
+ result >>>= 0;
5511
6301
  r = (emnapiCtx.handleStore.get(key).value in v) ? 1 : 0;
5512
6302
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5513
6303
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -5547,6 +6337,7 @@ function createNapiModule(options) {
5547
6337
  catch (_) {
5548
6338
  return envObject.setLastError(2);
5549
6339
  }
6340
+ result >>>= 0;
5550
6341
  value = envObject.ensureHandleId(v[emnapiCtx.handleStore.get(key).value]);
5551
6342
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5552
6343
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -5590,6 +6381,7 @@ function createNapiModule(options) {
5590
6381
  }
5591
6382
  }
5592
6383
  if (result) {
6384
+ result >>>= 0;
5593
6385
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5594
6386
  HEAP_DATA_VIEW.setInt8(result, r ? 1 : 0, true);
5595
6387
  }
@@ -5634,6 +6426,7 @@ function createNapiModule(options) {
5634
6426
  return envObject.setLastError(4);
5635
6427
  }
5636
6428
  r = Object.prototype.hasOwnProperty.call(v, emnapiCtx.handleStore.get(key).value);
6429
+ result >>>= 0;
5637
6430
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5638
6431
  HEAP_DATA_VIEW.setInt8(result, r ? 1 : 0, true);
5639
6432
  return envObject.getReturnStatus();
@@ -5665,6 +6458,7 @@ function createNapiModule(options) {
5665
6458
  if (!cname) {
5666
6459
  return envObject.setLastError(1);
5667
6460
  }
6461
+ cname >>>= 0;
5668
6462
  emnapiCtx.handleStore.get(object).value[emnapiString.UTF8ToString(cname, -1)] = emnapiCtx.handleStore.get(value).value;
5669
6463
  return envObject.getReturnStatus();
5670
6464
  }
@@ -5703,6 +6497,8 @@ function createNapiModule(options) {
5703
6497
  catch (_) {
5704
6498
  return envObject.setLastError(2);
5705
6499
  }
6500
+ utf8name >>>= 0;
6501
+ result >>>= 0;
5706
6502
  r = emnapiString.UTF8ToString(utf8name, -1) in v;
5707
6503
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5708
6504
  HEAP_DATA_VIEW.setInt8(result, r ? 1 : 0, true);
@@ -5743,6 +6539,8 @@ function createNapiModule(options) {
5743
6539
  catch (_) {
5744
6540
  return envObject.setLastError(2);
5745
6541
  }
6542
+ utf8name >>>= 0;
6543
+ result >>>= 0;
5746
6544
  value = envObject.ensureHandleId(v[emnapiString.UTF8ToString(utf8name, -1)]);
5747
6545
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5748
6546
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -5807,6 +6605,7 @@ function createNapiModule(options) {
5807
6605
  catch (_) {
5808
6606
  return envObject.setLastError(2);
5809
6607
  }
6608
+ result >>>= 0;
5810
6609
  r = ((index >>> 0) in v) ? 1 : 0;
5811
6610
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5812
6611
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -5844,6 +6643,7 @@ function createNapiModule(options) {
5844
6643
  catch (_) {
5845
6644
  return envObject.setLastError(2);
5846
6645
  }
6646
+ result >>>= 0;
5847
6647
  value = envObject.ensureHandleId(v[index >>> 0]);
5848
6648
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5849
6649
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -5884,6 +6684,7 @@ function createNapiModule(options) {
5884
6684
  }
5885
6685
  }
5886
6686
  if (result) {
6687
+ result >>>= 0;
5887
6688
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5888
6689
  HEAP_DATA_VIEW.setInt8(result, r ? 1 : 0, true);
5889
6690
  }
@@ -5906,6 +6707,8 @@ function createNapiModule(options) {
5906
6707
  return envObject.setLastError(envObject.moduleApiVersion >= 10 ? 23 : 10);
5907
6708
  envObject.clearLastError();
5908
6709
  try {
6710
+ properties >>>= 0;
6711
+ property_count >>>= 0;
5909
6712
  property_count = property_count >>> 0;
5910
6713
  if (property_count > 0) {
5911
6714
  if (!properties)
@@ -5929,6 +6732,7 @@ function createNapiModule(options) {
5929
6732
  var setter = HEAP_DATA_VIEW.getUint32(propPtr + 16, true);
5930
6733
  var value = HEAP_DATA_VIEW.getUint32(propPtr + 20, true);
5931
6734
  attributes = HEAP_DATA_VIEW.getInt32(propPtr + 24, true);
6735
+ attributes >>>= 0;
5932
6736
  var data = HEAP_DATA_VIEW.getUint32(propPtr + 28, true);
5933
6737
  if (utf8Name) {
5934
6738
  propertyName = emnapiString.UTF8ToString(utf8Name, -1);
@@ -6046,6 +6850,7 @@ function createNapiModule(options) {
6046
6850
  }
6047
6851
  var g = emnapiCtx.handleStore.get(5).value;
6048
6852
  var ret = g.eval(v8Script.value);
6853
+ result >>>= 0;
6049
6854
  value = envObject.ensureHandleId(ret);
6050
6855
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6051
6856
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -6071,6 +6876,7 @@ function createNapiModule(options) {
6071
6876
  if (!result)
6072
6877
  return envObject.setLastError(1);
6073
6878
  var v = emnapiCtx.handleStore.get(value);
6879
+ result >>>= 0;
6074
6880
  var r;
6075
6881
  if (v.isNumber()) {
6076
6882
  r = 3;
@@ -6126,6 +6932,7 @@ function createNapiModule(options) {
6126
6932
  if (!result)
6127
6933
  return envObject.setLastError(1);
6128
6934
  var handle = emnapiCtx.handleStore.get(value);
6935
+ result >>>= 0;
6129
6936
  v = handle.value ? 4 : 3;
6130
6937
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6131
6938
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -6156,6 +6963,7 @@ function createNapiModule(options) {
6156
6963
  if (handle.isBigInt()) {
6157
6964
  throw new TypeError('Cannot convert a BigInt value to a number');
6158
6965
  }
6966
+ result >>>= 0;
6159
6967
  v = emnapiCtx.addToCurrentScope(Number(handle.value)).id;
6160
6968
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6161
6969
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -6186,6 +6994,7 @@ function createNapiModule(options) {
6186
6994
  if (handle.value == null) {
6187
6995
  throw new TypeError('Cannot convert undefined or null to object');
6188
6996
  }
6997
+ result >>>= 0;
6189
6998
  v = envObject.ensureHandleId(Object(handle.value));
6190
6999
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6191
7000
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -6216,6 +7025,7 @@ function createNapiModule(options) {
6216
7025
  if (handle.isSymbol()) {
6217
7026
  throw new TypeError('Cannot convert a Symbol value to a string');
6218
7027
  }
7028
+ result >>>= 0;
6219
7029
  v = emnapiCtx.addToCurrentScope(String(handle.value)).id;
6220
7030
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6221
7031
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -6244,6 +7054,7 @@ function createNapiModule(options) {
6244
7054
  return envObject.setLastError(1);
6245
7055
  if (!constructor)
6246
7056
  return envObject.setLastError(1);
7057
+ result >>>= 0;
6247
7058
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6248
7059
  HEAP_DATA_VIEW.setInt8(result, 0, true);
6249
7060
  var ctor = emnapiCtx.handleStore.get(constructor);
@@ -6271,6 +7082,7 @@ function createNapiModule(options) {
6271
7082
  if (!result)
6272
7083
  return envObject.setLastError(1);
6273
7084
  var h = emnapiCtx.handleStore.get(value);
7085
+ result >>>= 0;
6274
7086
  var r = h.isArray() ? 1 : 0;
6275
7087
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6276
7088
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6286,6 +7098,7 @@ function createNapiModule(options) {
6286
7098
  if (!result)
6287
7099
  return envObject.setLastError(1);
6288
7100
  var h = emnapiCtx.handleStore.get(value);
7101
+ result >>>= 0;
6289
7102
  var r = h.isArrayBuffer() ? 1 : 0;
6290
7103
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6291
7104
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6301,6 +7114,7 @@ function createNapiModule(options) {
6301
7114
  if (!result)
6302
7115
  return envObject.setLastError(1);
6303
7116
  var h = emnapiCtx.handleStore.get(value);
7117
+ result >>>= 0;
6304
7118
  var r = ((typeof SharedArrayBuffer === 'function' && h.value instanceof SharedArrayBuffer) ||
6305
7119
  (Object.prototype.toString.call(h.value) === '[object SharedArrayBuffer]'))
6306
7120
  ? 1
@@ -6319,6 +7133,7 @@ function createNapiModule(options) {
6319
7133
  if (!result)
6320
7134
  return envObject.setLastError(1);
6321
7135
  var h = emnapiCtx.handleStore.get(value);
7136
+ result >>>= 0;
6322
7137
  var r = h.isDate() ? 1 : 0;
6323
7138
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6324
7139
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6334,6 +7149,7 @@ function createNapiModule(options) {
6334
7149
  if (!result)
6335
7150
  return envObject.setLastError(1);
6336
7151
  var val = emnapiCtx.handleStore.get(value).value;
7152
+ result >>>= 0;
6337
7153
  var r = (val instanceof Error) ? 1 : 0;
6338
7154
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6339
7155
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6349,6 +7165,7 @@ function createNapiModule(options) {
6349
7165
  if (!result)
6350
7166
  return envObject.setLastError(1);
6351
7167
  var h = emnapiCtx.handleStore.get(value);
7168
+ result >>>= 0;
6352
7169
  var r = h.isTypedArray() ? 1 : 0;
6353
7170
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6354
7171
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6364,6 +7181,7 @@ function createNapiModule(options) {
6364
7181
  if (!result)
6365
7182
  return envObject.setLastError(1);
6366
7183
  var h = emnapiCtx.handleStore.get(value);
7184
+ result >>>= 0;
6367
7185
  var r = h.isBuffer(emnapiCtx.feature.Buffer) ? 1 : 0;
6368
7186
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6369
7187
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6379,6 +7197,7 @@ function createNapiModule(options) {
6379
7197
  if (!result)
6380
7198
  return envObject.setLastError(1);
6381
7199
  var h = emnapiCtx.handleStore.get(value);
7200
+ result >>>= 0;
6382
7201
  var r = h.isDataView() ? 1 : 0;
6383
7202
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6384
7203
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6404,6 +7223,7 @@ function createNapiModule(options) {
6404
7223
  return envObject.setLastError(1);
6405
7224
  var lv = emnapiCtx.handleStore.get(lhs).value;
6406
7225
  var rv = emnapiCtx.handleStore.get(rhs).value;
7226
+ result >>>= 0;
6407
7227
  r = (lv === rv) ? 1 : 0;
6408
7228
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6409
7229
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6454,6 +7274,7 @@ function createNapiModule(options) {
6454
7274
  if (!result)
6455
7275
  return envObject.setLastError(1);
6456
7276
  var h = emnapiCtx.handleStore.get(arraybuffer);
7277
+ result >>>= 0;
6457
7278
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6458
7279
  if (h.isArrayBuffer() && h.value.byteLength === 0) {
6459
7280
  try {
@@ -6509,11 +7330,13 @@ function createNapiModule(options) {
6509
7330
  });
6510
7331
  emnapiAWST.init();
6511
7332
  emnapiExternalMemory.init();
7333
+ emnapiExternalSAB.init();
6512
7334
  emnapiString.init();
6513
7335
  emnapiTSFN.init();
6514
7336
  PThread.init();
6515
7337
  napiModule.emnapi.syncMemory = $emnapiSyncMemory;
6516
7338
  napiModule.emnapi.getMemoryAddress = $emnapiGetMemoryAddress;
7339
+ napiModule.emnapi.acquireExternalSharedArrayBuffer = $emnapiAcquireExternalSharedArrayBuffer;
6517
7340
  function addImports(mod) {
6518
7341
  var keys = Object.keys(mod);
6519
7342
  for (var i = 0; i < keys.length; ++i) {
@@ -6641,9 +7464,9 @@ function loadNapiModuleImpl(loadFn, userNapiModule, wasmInput, options) {
6641
7464
  }
6642
7465
  const table = getTable ? getTable(originalExports) : originalExports.__indirect_function_table;
6643
7466
  if (wasi && !exportMemory) {
6644
- const exports$1 = Object.create(null);
6645
- Object.assign(exports$1, originalExports, { memory });
6646
- instance = { exports: exports$1 };
7467
+ const exports = Object.create(null);
7468
+ Object.assign(exports, originalExports, { memory });
7469
+ instance = { exports };
6647
7470
  }
6648
7471
  const module = source.module;
6649
7472
  if (wasi) {
@@ -6768,12 +7591,7 @@ class MessageHandler extends wasiThreads.ThreadMessageHandler {
6768
7591
  try {
6769
7592
  if (type === 'async-worker-init') {
6770
7593
  this.handleAfterLoad(e, () => {
6771
- this.napiModule.initWorker(payload.arg);
6772
- });
6773
- }
6774
- else if (type === 'async-work-execute') {
6775
- this.handleAfterLoad(e, () => {
6776
- this.napiModule.executeAsyncWork(payload.work);
7594
+ this.napiModule.initWorker(payload.arg, payload.func);
6777
7595
  });
6778
7596
  }
6779
7597
  }
@@ -6784,7 +7602,7 @@ class MessageHandler extends wasiThreads.ThreadMessageHandler {
6784
7602
  }
6785
7603
  }
6786
7604
 
6787
- const version = "1.7.1";
7605
+ const version = "1.11.1";
6788
7606
 
6789
7607
  exports.MessageHandler = MessageHandler;
6790
7608
  exports.createNapiModule = createNapiModule;