@tailwindcss/oxide-wasm32-wasi 0.0.0-insiders.babe825 → 0.0.0-insiders.bb6a109

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 +1243 -380
  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 +1359 -390
  7. package/node_modules/@emnapi/core/dist/emnapi-core.js +1380 -423
  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 +1243 -380
  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) {
@@ -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;
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();
1709
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,11 +4709,57 @@ 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
  }
4718
+ function node_api_create_object_with_properties(env, prototype_or_null, property_names, property_values, property_count, result) {
4719
+ if (!env)
4720
+ return 1;
4721
+ var envObject = emnapiCtx.envStore.get(env);
4722
+ envObject.checkGCAccess();
4723
+ if (!result)
4724
+ return envObject.setLastError(1);
4725
+ property_count >>>= 0;
4726
+ property_count = property_count >>> 0;
4727
+ if (property_count > 0) {
4728
+ if (!property_names)
4729
+ return envObject.setLastError(1);
4730
+ if (!property_values)
4731
+ return envObject.setLastError(1);
4732
+ }
4733
+ var v8_prototype_or_null = prototype_or_null
4734
+ ? emnapiCtx.handleStore.get(prototype_or_null).value
4735
+ : null;
4736
+ var properties = {};
4737
+ property_names >>>= 0;
4738
+ property_values >>>= 0;
4739
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4740
+ for (var i = 0; i < property_count; i++) {
4741
+ var name_value = emnapiCtx.handleStore.get(HEAP_DATA_VIEW.getUint32(property_names + i * 4, true)).value;
4742
+ if (!(typeof name_value === "string" || typeof name_value === "symbol"))
4743
+ return envObject.setLastError(4);
4744
+ properties[name_value] = {
4745
+ value: emnapiCtx.handleStore.get(HEAP_DATA_VIEW.getUint32(property_values + i * 4, true)).value,
4746
+ writable: true,
4747
+ enumerable: true,
4748
+ configurable: true
4749
+ };
4750
+ }
4751
+ var obj;
4752
+ try {
4753
+ obj = Object.defineProperties(Object.create(v8_prototype_or_null), properties);
4754
+ }
4755
+ catch (_) {
4756
+ return envObject.setLastError(9);
4757
+ }
4758
+ var value = emnapiCtx.addToCurrentScope(obj).id;
4759
+ result >>>= 0;
4760
+ HEAP_DATA_VIEW.setUint32(result, value, true);
4761
+ return envObject.clearLastError();
4762
+ }
4025
4763
  function napi_create_symbol(env, description, result) {
4026
4764
  if (!env)
4027
4765
  return 1;
@@ -4029,6 +4767,7 @@ function createNapiModule(options) {
4029
4767
  envObject.checkGCAccess();
4030
4768
  if (!result)
4031
4769
  return envObject.setLastError(1);
4770
+ result >>>= 0;
4032
4771
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4033
4772
  if (!description) {
4034
4773
  var value = emnapiCtx.addToCurrentScope(Symbol()).id;
@@ -4062,10 +4801,9 @@ function createNapiModule(options) {
4062
4801
  if (!result)
4063
4802
  return envObject.setLastError(1);
4064
4803
  var handle = emnapiCtx.handleStore.get(arraybuffer);
4065
- if (!handle.isArrayBuffer()) {
4066
- return envObject.setLastError(1);
4067
- }
4068
4804
  var buffer = handle.value;
4805
+ byte_offset >>>= 0;
4806
+ length >>>= 0;
4069
4807
  var createTypedArray = function (envObject, Type, size_of_element, buffer, byte_offset, length) {
4070
4808
  var _a;
4071
4809
  byte_offset = byte_offset >>> 0;
@@ -4096,36 +4834,47 @@ function createNapiModule(options) {
4096
4834
  });
4097
4835
  }
4098
4836
  }
4837
+ result >>>= 0;
4099
4838
  value = emnapiCtx.addToCurrentScope(out).id;
4100
4839
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4101
4840
  HEAP_DATA_VIEW.setUint32(result, value, true);
4102
4841
  return envObject.getReturnStatus();
4103
4842
  };
4104
- switch (type) {
4105
- case 0:
4106
- return createTypedArray(envObject, Int8Array, 1, buffer, byte_offset, length);
4107
- case 1:
4108
- return createTypedArray(envObject, Uint8Array, 1, buffer, byte_offset, length);
4109
- case 2:
4110
- return createTypedArray(envObject, Uint8ClampedArray, 1, buffer, byte_offset, length);
4111
- case 3:
4112
- return createTypedArray(envObject, Int16Array, 2, buffer, byte_offset, length);
4113
- case 4:
4114
- return createTypedArray(envObject, Uint16Array, 2, buffer, byte_offset, length);
4115
- case 5:
4116
- return createTypedArray(envObject, Int32Array, 4, buffer, byte_offset, length);
4117
- case 6:
4118
- return createTypedArray(envObject, Uint32Array, 4, buffer, byte_offset, length);
4119
- case 7:
4120
- return createTypedArray(envObject, Float32Array, 4, buffer, byte_offset, length);
4121
- case 8:
4122
- return createTypedArray(envObject, Float64Array, 8, buffer, byte_offset, length);
4123
- case 9:
4124
- return createTypedArray(envObject, BigInt64Array, 8, buffer, byte_offset, length);
4125
- case 10:
4126
- return createTypedArray(envObject, BigUint64Array, 8, buffer, byte_offset, length);
4127
- default:
4128
- 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);
4129
4878
  }
4130
4879
  }
4131
4880
  catch (err) {
@@ -4152,7 +4901,9 @@ function createNapiModule(options) {
4152
4901
  if (!Buffer) {
4153
4902
  throw emnapiCtx.createNotSupportBufferError('napi_create_buffer', '');
4154
4903
  }
4904
+ result >>>= 0;
4155
4905
  var buffer = void 0;
4906
+ size >>>= 0;
4156
4907
  size = size >>> 0;
4157
4908
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4158
4909
  if (!data || (size === 0)) {
@@ -4164,6 +4915,7 @@ function createNapiModule(options) {
4164
4915
  pointer = _malloc(size);
4165
4916
  if (!pointer)
4166
4917
  throw new Error('Out of memory');
4918
+ pointer >>>= 0;
4167
4919
  new Uint8Array(wasmMemory.buffer).subarray(pointer, pointer + size).fill(0);
4168
4920
  var buffer_1 = Buffer.from(wasmMemory.buffer, pointer, size);
4169
4921
  var viewDescriptor = {
@@ -4177,6 +4929,7 @@ function createNapiModule(options) {
4177
4929
  (_a = emnapiExternalMemory.registry) === null || _a === void 0 ? void 0 : _a.register(viewDescriptor, pointer);
4178
4930
  value = emnapiCtx.addToCurrentScope(buffer_1).id;
4179
4931
  HEAP_DATA_VIEW.setUint32(result, value, true);
4932
+ data >>>= 0;
4180
4933
  HEAP_DATA_VIEW.setUint32(data, pointer, true);
4181
4934
  }
4182
4935
  return envObject.getReturnStatus();
@@ -4206,8 +4959,11 @@ function createNapiModule(options) {
4206
4959
  }
4207
4960
  var arrayBuffer = emnapiCreateArrayBuffer(length, result_data, false);
4208
4961
  var buffer = Buffer.from(arrayBuffer);
4962
+ data >>>= 0;
4963
+ length >>>= 0;
4209
4964
  buffer.set(new Uint8Array(wasmMemory.buffer).subarray(data, data + length));
4210
4965
  value = emnapiCtx.addToCurrentScope(buffer).id;
4966
+ result >>>= 0;
4211
4967
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4212
4968
  HEAP_DATA_VIEW.setUint32(result, value, true);
4213
4969
  return envObject.getReturnStatus();
@@ -4236,6 +4992,8 @@ function createNapiModule(options) {
4236
4992
  return envObject.setLastError(1);
4237
4993
  if (!result)
4238
4994
  return envObject.setLastError(1);
4995
+ byte_offset >>>= 0;
4996
+ byte_length >>>= 0;
4239
4997
  byte_offset = byte_offset >>> 0;
4240
4998
  byte_length = byte_length >>> 0;
4241
4999
  var handle = emnapiCtx.handleStore.get(arraybuffer);
@@ -4264,6 +5022,7 @@ function createNapiModule(options) {
4264
5022
  });
4265
5023
  }
4266
5024
  }
5025
+ result >>>= 0;
4267
5026
  value = emnapiCtx.addToCurrentScope(out).id;
4268
5027
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4269
5028
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4275,7 +5034,6 @@ function createNapiModule(options) {
4275
5034
  }
4276
5035
  }
4277
5036
  function napi_create_dataview(env, byte_length, arraybuffer, byte_offset, result) {
4278
- var value;
4279
5037
  if (!env)
4280
5038
  return 1;
4281
5039
  var envObject = emnapiCtx.envStore.get(env);
@@ -4290,34 +5048,41 @@ function createNapiModule(options) {
4290
5048
  return envObject.setLastError(1);
4291
5049
  if (!result)
4292
5050
  return envObject.setLastError(1);
5051
+ byte_length >>>= 0;
5052
+ byte_offset >>>= 0;
4293
5053
  byte_length = byte_length >>> 0;
4294
5054
  byte_offset = byte_offset >>> 0;
4295
- var handle = emnapiCtx.handleStore.get(arraybuffer);
4296
- if (!handle.isArrayBuffer()) {
4297
- return envObject.setLastError(1);
4298
- }
4299
- var buffer = handle.value;
4300
- if ((byte_length + byte_offset) > buffer.byteLength) {
4301
- var err = new RangeError('byte_offset + byte_length should be less than or equal to the size in bytes of the array passed in');
4302
- err.code = 'ERR_NAPI_INVALID_DATAVIEW_ARGS';
4303
- throw err;
4304
- }
4305
- var dataview = new DataView(buffer, byte_offset, byte_length);
4306
- if (buffer === wasmMemory.buffer) {
4307
- if (!emnapiExternalMemory.wasmMemoryViewTable.has(dataview)) {
4308
- emnapiExternalMemory.wasmMemoryViewTable.set(dataview, {
4309
- Ctor: DataView,
4310
- address: byte_offset,
4311
- length: byte_length,
4312
- ownership: 1,
4313
- runtimeAllocated: 0
4314
- });
5055
+ var value = emnapiCtx.handleStore.get(arraybuffer).value;
5056
+ var createDataview = function (buffer) {
5057
+ if ((byte_length + byte_offset) > buffer.byteLength) {
5058
+ var err = new RangeError('byte_offset + byte_length should be less than or equal to the size in bytes of the array passed in');
5059
+ err.code = 'ERR_NAPI_INVALID_DATAVIEW_ARGS';
5060
+ throw err;
4315
5061
  }
5062
+ var dataview = new DataView(buffer, byte_offset, byte_length);
5063
+ if (buffer === wasmMemory.buffer) {
5064
+ if (!emnapiExternalMemory.wasmMemoryViewTable.has(dataview)) {
5065
+ emnapiExternalMemory.wasmMemoryViewTable.set(dataview, {
5066
+ Ctor: DataView,
5067
+ address: byte_offset,
5068
+ length: byte_length,
5069
+ ownership: 1,
5070
+ runtimeAllocated: 0
5071
+ });
5072
+ }
5073
+ }
5074
+ result >>>= 0;
5075
+ var v = emnapiCtx.addToCurrentScope(dataview).id;
5076
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5077
+ HEAP_DATA_VIEW.setUint32(result, v, true);
5078
+ return envObject.getReturnStatus();
5079
+ };
5080
+ if (value instanceof ArrayBuffer || emnapiExternalMemory.isSharedArrayBuffer(value)) {
5081
+ return createDataview(value);
5082
+ }
5083
+ else {
5084
+ return envObject.setLastError(1);
4316
5085
  }
4317
- value = emnapiCtx.addToCurrentScope(dataview).id;
4318
- var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4319
- HEAP_DATA_VIEW.setUint32(result, value, true);
4320
- return envObject.getReturnStatus();
4321
5086
  }
4322
5087
  catch (err) {
4323
5088
  envObject.tryCatch.setError(err);
@@ -4331,7 +5096,10 @@ function createNapiModule(options) {
4331
5096
  envObject.checkGCAccess();
4332
5097
  if (!result)
4333
5098
  return envObject.setLastError(1);
4334
- var autoLength = length === -1;
5099
+ length >>>= 0;
5100
+ utf8description >>>= 0;
5101
+ result >>>= 0;
5102
+ var autoLength = length === -1 || length === 4294967295;
4335
5103
  var sizelength = length >>> 0;
4336
5104
  if (length !== 0) {
4337
5105
  if (!utf8description)
@@ -4362,6 +5130,8 @@ function createNapiModule(options) {
4362
5130
  napi_create_symbol: napi_create_symbol,
4363
5131
  napi_create_typedarray: napi_create_typedarray,
4364
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,
4365
5135
  node_api_create_sharedarraybuffer: node_api_create_sharedarraybuffer,
4366
5136
  node_api_symbol_for: node_api_symbol_for
4367
5137
  });
@@ -4372,6 +5142,7 @@ function createNapiModule(options) {
4372
5142
  envObject.checkGCAccess();
4373
5143
  if (!result)
4374
5144
  return envObject.setLastError(1);
5145
+ result >>>= 0;
4375
5146
  var v = value === 0 ? 3 : 4;
4376
5147
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4377
5148
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -4384,6 +5155,7 @@ function createNapiModule(options) {
4384
5155
  envObject.checkGCAccess();
4385
5156
  if (!result)
4386
5157
  return envObject.setLastError(1);
5158
+ result >>>= 0;
4387
5159
  var value = 5;
4388
5160
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4389
5161
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4396,6 +5168,7 @@ function createNapiModule(options) {
4396
5168
  envObject.checkGCAccess();
4397
5169
  if (!result)
4398
5170
  return envObject.setLastError(1);
5171
+ result >>>= 0;
4399
5172
  var value = 2;
4400
5173
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4401
5174
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4408,6 +5181,7 @@ function createNapiModule(options) {
4408
5181
  envObject.checkGCAccess();
4409
5182
  if (!result)
4410
5183
  return envObject.setLastError(1);
5184
+ result >>>= 0;
4411
5185
  var value = 1;
4412
5186
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4413
5187
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4424,6 +5198,9 @@ function createNapiModule(options) {
4424
5198
  if (!env)
4425
5199
  return 1;
4426
5200
  var envObject = emnapiCtx.envStore.get(env);
5201
+ data >>>= 0;
5202
+ finalize_cb >>>= 0;
5203
+ finalize_hint >>>= 0;
4427
5204
  envObject.setInstanceData(data, finalize_cb, finalize_hint);
4428
5205
  return envObject.clearLastError();
4429
5206
  }
@@ -4433,6 +5210,7 @@ function createNapiModule(options) {
4433
5210
  var envObject = emnapiCtx.envStore.get(env);
4434
5211
  if (!data)
4435
5212
  return envObject.setLastError(1);
5213
+ data >>>= 0;
4436
5214
  var value = envObject.getInstanceData();
4437
5215
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4438
5216
  HEAP_DATA_VIEW.setUint32(data, value, true);
@@ -4444,11 +5222,15 @@ function createNapiModule(options) {
4444
5222
  napi_set_instance_data: napi_set_instance_data
4445
5223
  });
4446
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;
4447
5228
  var envObject = emnapiCtx.envStore.get(env);
4448
5229
  var lastError = envObject.lastError;
4449
5230
  var errorCode = lastError.errorCode;
4450
5231
  var engineErrorCode = lastError.engineErrorCode >>> 0;
4451
5232
  var engineReserved = lastError.engineReserved;
5233
+ engineReserved >>>= 0;
4452
5234
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4453
5235
  HEAP_DATA_VIEW.setInt32(error_code, errorCode, true);
4454
5236
  HEAP_DATA_VIEW.setUint32(engine_error_code, engineErrorCode, true);
@@ -4488,6 +5270,8 @@ function createNapiModule(options) {
4488
5270
  try {
4489
5271
  if (!msg)
4490
5272
  return envObject.setLastError(1);
5273
+ code >>>= 0;
5274
+ msg >>>= 0;
4491
5275
  var error = new Error(emnapiString.UTF8ToString(msg, -1));
4492
5276
  if (code)
4493
5277
  error.code = emnapiString.UTF8ToString(code, -1);
@@ -4512,6 +5296,8 @@ function createNapiModule(options) {
4512
5296
  try {
4513
5297
  if (!msg)
4514
5298
  return envObject.setLastError(1);
5299
+ code >>>= 0;
5300
+ msg >>>= 0;
4515
5301
  var error = new TypeError(emnapiString.UTF8ToString(msg, -1));
4516
5302
  if (code)
4517
5303
  error.code = emnapiString.UTF8ToString(code, -1);
@@ -4536,6 +5322,8 @@ function createNapiModule(options) {
4536
5322
  try {
4537
5323
  if (!msg)
4538
5324
  return envObject.setLastError(1);
5325
+ code >>>= 0;
5326
+ msg >>>= 0;
4539
5327
  var error = new RangeError(emnapiString.UTF8ToString(msg, -1));
4540
5328
  if (code)
4541
5329
  error.code = emnapiString.UTF8ToString(code, -1);
@@ -4560,6 +5348,8 @@ function createNapiModule(options) {
4560
5348
  try {
4561
5349
  if (!msg)
4562
5350
  return envObject.setLastError(1);
5351
+ code >>>= 0;
5352
+ msg >>>= 0;
4563
5353
  var error = new SyntaxError(emnapiString.UTF8ToString(msg, -1));
4564
5354
  if (code)
4565
5355
  error.code = emnapiString.UTF8ToString(code, -1);
@@ -4579,6 +5369,7 @@ function createNapiModule(options) {
4579
5369
  if (!result)
4580
5370
  return envObject.setLastError(1);
4581
5371
  var r = envObject.tryCatch.hasCaught();
5372
+ result >>>= 0;
4582
5373
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4583
5374
  HEAP_DATA_VIEW.setInt8(result, r ? 1 : 0, true);
4584
5375
  return envObject.clearLastError();
@@ -4604,6 +5395,7 @@ function createNapiModule(options) {
4604
5395
  }
4605
5396
  error.code = codeValue;
4606
5397
  }
5398
+ result >>>= 0;
4607
5399
  var value = emnapiCtx.addToCurrentScope(error).id;
4608
5400
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4609
5401
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4630,6 +5422,7 @@ function createNapiModule(options) {
4630
5422
  }
4631
5423
  error.code = codeValue;
4632
5424
  }
5425
+ result >>>= 0;
4633
5426
  var value = emnapiCtx.addToCurrentScope(error).id;
4634
5427
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4635
5428
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4656,6 +5449,7 @@ function createNapiModule(options) {
4656
5449
  }
4657
5450
  error.code = codeValue;
4658
5451
  }
5452
+ result >>>= 0;
4659
5453
  var value = emnapiCtx.addToCurrentScope(error).id;
4660
5454
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4661
5455
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4682,6 +5476,7 @@ function createNapiModule(options) {
4682
5476
  }
4683
5477
  error.code = codeValue;
4684
5478
  }
5479
+ result >>>= 0;
4685
5480
  var value = emnapiCtx.addToCurrentScope(error).id;
4686
5481
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4687
5482
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4694,6 +5489,7 @@ function createNapiModule(options) {
4694
5489
  envObject.checkGCAccess();
4695
5490
  if (!result)
4696
5491
  return envObject.setLastError(1);
5492
+ result >>>= 0;
4697
5493
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4698
5494
  if (!envObject.tryCatch.hasCaught()) {
4699
5495
  HEAP_DATA_VIEW.setUint32(result, 1, true);
@@ -4708,6 +5504,10 @@ function createNapiModule(options) {
4708
5504
  return envObject.clearLastError();
4709
5505
  }
4710
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;
4711
5511
  var locationStr = emnapiString.UTF8ToString(location, location_len);
4712
5512
  var messageStr = emnapiString.UTF8ToString(message, message_len);
4713
5513
  if (emnapiNodeBinding) {
@@ -4761,8 +5561,21 @@ function createNapiModule(options) {
4761
5561
  node_api_create_syntax_error: node_api_create_syntax_error,
4762
5562
  node_api_throw_syntax_error: node_api_throw_syntax_error
4763
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
+ }
4764
5578
  function napi_create_function(env, utf8name, length, cb, data, result) {
4765
- var value;
4766
5579
  if (!env)
4767
5580
  return 1;
4768
5581
  var envObject = emnapiCtx.envStore.get(env);
@@ -4777,15 +5590,7 @@ function createNapiModule(options) {
4777
5590
  return envObject.setLastError(1);
4778
5591
  if (!cb)
4779
5592
  return envObject.setLastError(1);
4780
- var fresult = emnapiCreateFunction(envObject, utf8name, length, cb, data);
4781
- if (fresult.status !== 0)
4782
- return envObject.setLastError(fresult.status);
4783
- var f = fresult.f;
4784
- var valueHandle = emnapiCtx.addToCurrentScope(f);
4785
- value = valueHandle.id;
4786
- var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4787
- HEAP_DATA_VIEW.setUint32(result, value, true);
4788
- return envObject.getReturnStatus();
5593
+ return _emnapi_create_function(env, utf8name, length, cb, data, result);
4789
5594
  }
4790
5595
  catch (err) {
4791
5596
  envObject.tryCatch.setError(err);
@@ -4799,11 +5604,14 @@ function createNapiModule(options) {
4799
5604
  if (!cbinfo)
4800
5605
  return envObject.setLastError(1);
4801
5606
  var cbinfoValue = emnapiCtx.scopeStore.get(cbinfo).callbackInfo;
5607
+ argc >>>= 0;
5608
+ argv >>>= 0;
4802
5609
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4803
5610
  if (argv) {
4804
5611
  if (!argc)
4805
5612
  return envObject.setLastError(1);
4806
5613
  var argcValue = HEAP_DATA_VIEW.getUint32(argc, true);
5614
+ argcValue >>>= 0;
4807
5615
  var len = cbinfoValue.args.length;
4808
5616
  var arrlen = argcValue < len ? argcValue : len;
4809
5617
  var i = 0;
@@ -4821,10 +5629,12 @@ function createNapiModule(options) {
4821
5629
  HEAP_DATA_VIEW.setUint32(argc, cbinfoValue.args.length, true);
4822
5630
  }
4823
5631
  if (this_arg) {
5632
+ this_arg >>>= 0;
4824
5633
  var v = envObject.ensureHandleId(cbinfoValue.thiz);
4825
5634
  HEAP_DATA_VIEW.setUint32(this_arg, v, true);
4826
5635
  }
4827
5636
  if (data) {
5637
+ data >>>= 0;
4828
5638
  HEAP_DATA_VIEW.setUint32(data, cbinfoValue.data, true);
4829
5639
  }
4830
5640
  return envObject.clearLastError();
@@ -4844,6 +5654,9 @@ function createNapiModule(options) {
4844
5654
  try {
4845
5655
  if (!recv)
4846
5656
  return envObject.setLastError(1);
5657
+ argc >>>= 0;
5658
+ argv >>>= 0;
5659
+ result >>>= 0;
4847
5660
  argc = argc >>> 0;
4848
5661
  if (argc > 0) {
4849
5662
  if (!argv)
@@ -4888,6 +5701,9 @@ function createNapiModule(options) {
4888
5701
  try {
4889
5702
  if (!constructor)
4890
5703
  return envObject.setLastError(1);
5704
+ argc >>>= 0;
5705
+ argv >>>= 0;
5706
+ result >>>= 0;
4891
5707
  argc = argc >>> 0;
4892
5708
  if (argc > 0) {
4893
5709
  if (!argv)
@@ -4938,6 +5754,7 @@ function createNapiModule(options) {
4938
5754
  return envObject.setLastError(1);
4939
5755
  if (!result)
4940
5756
  return envObject.setLastError(1);
5757
+ result >>>= 0;
4941
5758
  var cbinfoValue = emnapiCtx.scopeStore.get(cbinfo).callbackInfo;
4942
5759
  var thiz = cbinfoValue.thiz, fn = cbinfoValue.fn;
4943
5760
  var value = thiz == null || thiz.constructor == null
@@ -4951,6 +5768,7 @@ function createNapiModule(options) {
4951
5768
  }
4952
5769
  var functionMod = Object.freeze({
4953
5770
  __proto__: null,
5771
+ _emnapi_create_function: _emnapi_create_function,
4954
5772
  napi_call_function: napi_call_function,
4955
5773
  napi_create_function: napi_create_function,
4956
5774
  napi_get_cb_info: napi_get_cb_info,
@@ -4965,6 +5783,7 @@ function createNapiModule(options) {
4965
5783
  if (!result)
4966
5784
  return envObject.setLastError(1);
4967
5785
  var scope = emnapiCtx.openScope(envObject);
5786
+ result >>>= 0;
4968
5787
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4969
5788
  HEAP_DATA_VIEW.setUint32(result, scope.id, true);
4970
5789
  return envObject.clearLastError();
@@ -4990,6 +5809,7 @@ function createNapiModule(options) {
4990
5809
  if (!result)
4991
5810
  return envObject.setLastError(1);
4992
5811
  var scope = emnapiCtx.openScope(envObject);
5812
+ result >>>= 0;
4993
5813
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4994
5814
  HEAP_DATA_VIEW.setUint32(result, scope.id, true);
4995
5815
  return envObject.clearLastError();
@@ -5020,6 +5840,8 @@ function createNapiModule(options) {
5020
5840
  return envObject.setLastError(1);
5021
5841
  var scopeObject = emnapiCtx.scopeStore.get(scope);
5022
5842
  if (!scopeObject.escapeCalled()) {
5843
+ escapee >>>= 0;
5844
+ result >>>= 0;
5023
5845
  var newHandle = scopeObject.escape(escapee);
5024
5846
  var value = newHandle ? newHandle.id : 0;
5025
5847
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -5044,6 +5866,7 @@ function createNapiModule(options) {
5044
5866
  }
5045
5867
  }
5046
5868
  var ref = emnapiCtx.createReference(envObject, handle.id, initial_refcount >>> 0, 1);
5869
+ result >>>= 0;
5047
5870
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5048
5871
  HEAP_DATA_VIEW.setUint32(result, ref.id, true);
5049
5872
  return envObject.clearLastError();
@@ -5066,6 +5889,7 @@ function createNapiModule(options) {
5066
5889
  return envObject.setLastError(1);
5067
5890
  var count = emnapiCtx.refStore.get(ref).ref();
5068
5891
  if (result) {
5892
+ result >>>= 0;
5069
5893
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5070
5894
  HEAP_DATA_VIEW.setUint32(result, count, true);
5071
5895
  }
@@ -5085,6 +5909,7 @@ function createNapiModule(options) {
5085
5909
  }
5086
5910
  var count = reference.unref();
5087
5911
  if (result) {
5912
+ result >>>= 0;
5088
5913
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5089
5914
  HEAP_DATA_VIEW.setUint32(result, count, true);
5090
5915
  }
@@ -5101,6 +5926,7 @@ function createNapiModule(options) {
5101
5926
  return envObject.setLastError(1);
5102
5927
  var reference = emnapiCtx.refStore.get(ref);
5103
5928
  var handleId = reference.get(envObject);
5929
+ result >>>= 0;
5104
5930
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5105
5931
  HEAP_DATA_VIEW.setUint32(result, handleId, true);
5106
5932
  return envObject.clearLastError();
@@ -5111,6 +5937,8 @@ function createNapiModule(options) {
5111
5937
  var envObject = emnapiCtx.envStore.get(env);
5112
5938
  if (!fun)
5113
5939
  return envObject.setLastError(1);
5940
+ fun >>>= 0;
5941
+ arg >>>= 0;
5114
5942
  emnapiCtx.addCleanupHook(envObject, fun, arg);
5115
5943
  return 0;
5116
5944
  }
@@ -5120,6 +5948,8 @@ function createNapiModule(options) {
5120
5948
  var envObject = emnapiCtx.envStore.get(env);
5121
5949
  if (!fun)
5122
5950
  return envObject.setLastError(1);
5951
+ fun >>>= 0;
5952
+ arg >>>= 0;
5123
5953
  emnapiCtx.removeCleanupHook(envObject, fun, arg);
5124
5954
  return 0;
5125
5955
  }
@@ -5180,8 +6010,10 @@ function createNapiModule(options) {
5180
6010
  var p = new Promise(function (resolve, reject) {
5181
6011
  var deferredObject = emnapiCtx.createDeferred({ resolve: resolve, reject: reject });
5182
6012
  deferredObjectId = deferredObject.id;
6013
+ deferred >>>= 0;
5183
6014
  HEAP_DATA_VIEW.setUint32(deferred, deferredObjectId, true);
5184
6015
  });
6016
+ promise >>>= 0;
5185
6017
  value = emnapiCtx.addToCurrentScope(p).id;
5186
6018
  HEAP_DATA_VIEW.setUint32(promise, value, true);
5187
6019
  return envObject.getReturnStatus();
@@ -5249,6 +6081,7 @@ function createNapiModule(options) {
5249
6081
  if (!is_promise)
5250
6082
  return envObject.setLastError(1);
5251
6083
  var h = emnapiCtx.handleStore.get(value);
6084
+ is_promise >>>= 0;
5252
6085
  var r = h.isPromise() ? 1 : 0;
5253
6086
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5254
6087
  HEAP_DATA_VIEW.setInt8(is_promise, r, true);
@@ -5392,6 +6225,7 @@ function createNapiModule(options) {
5392
6225
  }
5393
6226
  }
5394
6227
  }
6228
+ result >>>= 0;
5395
6229
  value = emnapiCtx.addToCurrentScope(ret).id;
5396
6230
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5397
6231
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -5463,6 +6297,7 @@ function createNapiModule(options) {
5463
6297
  catch (_) {
5464
6298
  return envObject.setLastError(2);
5465
6299
  }
6300
+ result >>>= 0;
5466
6301
  r = (emnapiCtx.handleStore.get(key).value in v) ? 1 : 0;
5467
6302
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5468
6303
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -5502,6 +6337,7 @@ function createNapiModule(options) {
5502
6337
  catch (_) {
5503
6338
  return envObject.setLastError(2);
5504
6339
  }
6340
+ result >>>= 0;
5505
6341
  value = envObject.ensureHandleId(v[emnapiCtx.handleStore.get(key).value]);
5506
6342
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5507
6343
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -5545,6 +6381,7 @@ function createNapiModule(options) {
5545
6381
  }
5546
6382
  }
5547
6383
  if (result) {
6384
+ result >>>= 0;
5548
6385
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5549
6386
  HEAP_DATA_VIEW.setInt8(result, r ? 1 : 0, true);
5550
6387
  }
@@ -5589,6 +6426,7 @@ function createNapiModule(options) {
5589
6426
  return envObject.setLastError(4);
5590
6427
  }
5591
6428
  r = Object.prototype.hasOwnProperty.call(v, emnapiCtx.handleStore.get(key).value);
6429
+ result >>>= 0;
5592
6430
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5593
6431
  HEAP_DATA_VIEW.setInt8(result, r ? 1 : 0, true);
5594
6432
  return envObject.getReturnStatus();
@@ -5620,6 +6458,7 @@ function createNapiModule(options) {
5620
6458
  if (!cname) {
5621
6459
  return envObject.setLastError(1);
5622
6460
  }
6461
+ cname >>>= 0;
5623
6462
  emnapiCtx.handleStore.get(object).value[emnapiString.UTF8ToString(cname, -1)] = emnapiCtx.handleStore.get(value).value;
5624
6463
  return envObject.getReturnStatus();
5625
6464
  }
@@ -5658,6 +6497,8 @@ function createNapiModule(options) {
5658
6497
  catch (_) {
5659
6498
  return envObject.setLastError(2);
5660
6499
  }
6500
+ utf8name >>>= 0;
6501
+ result >>>= 0;
5661
6502
  r = emnapiString.UTF8ToString(utf8name, -1) in v;
5662
6503
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5663
6504
  HEAP_DATA_VIEW.setInt8(result, r ? 1 : 0, true);
@@ -5698,6 +6539,8 @@ function createNapiModule(options) {
5698
6539
  catch (_) {
5699
6540
  return envObject.setLastError(2);
5700
6541
  }
6542
+ utf8name >>>= 0;
6543
+ result >>>= 0;
5701
6544
  value = envObject.ensureHandleId(v[emnapiString.UTF8ToString(utf8name, -1)]);
5702
6545
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5703
6546
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -5762,6 +6605,7 @@ function createNapiModule(options) {
5762
6605
  catch (_) {
5763
6606
  return envObject.setLastError(2);
5764
6607
  }
6608
+ result >>>= 0;
5765
6609
  r = ((index >>> 0) in v) ? 1 : 0;
5766
6610
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5767
6611
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -5799,6 +6643,7 @@ function createNapiModule(options) {
5799
6643
  catch (_) {
5800
6644
  return envObject.setLastError(2);
5801
6645
  }
6646
+ result >>>= 0;
5802
6647
  value = envObject.ensureHandleId(v[index >>> 0]);
5803
6648
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5804
6649
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -5839,6 +6684,7 @@ function createNapiModule(options) {
5839
6684
  }
5840
6685
  }
5841
6686
  if (result) {
6687
+ result >>>= 0;
5842
6688
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5843
6689
  HEAP_DATA_VIEW.setInt8(result, r ? 1 : 0, true);
5844
6690
  }
@@ -5861,6 +6707,8 @@ function createNapiModule(options) {
5861
6707
  return envObject.setLastError(envObject.moduleApiVersion >= 10 ? 23 : 10);
5862
6708
  envObject.clearLastError();
5863
6709
  try {
6710
+ properties >>>= 0;
6711
+ property_count >>>= 0;
5864
6712
  property_count = property_count >>> 0;
5865
6713
  if (property_count > 0) {
5866
6714
  if (!properties)
@@ -5884,6 +6732,7 @@ function createNapiModule(options) {
5884
6732
  var setter = HEAP_DATA_VIEW.getUint32(propPtr + 16, true);
5885
6733
  var value = HEAP_DATA_VIEW.getUint32(propPtr + 20, true);
5886
6734
  attributes = HEAP_DATA_VIEW.getInt32(propPtr + 24, true);
6735
+ attributes >>>= 0;
5887
6736
  var data = HEAP_DATA_VIEW.getUint32(propPtr + 28, true);
5888
6737
  if (utf8Name) {
5889
6738
  propertyName = emnapiString.UTF8ToString(utf8Name, -1);
@@ -6001,6 +6850,7 @@ function createNapiModule(options) {
6001
6850
  }
6002
6851
  var g = emnapiCtx.handleStore.get(5).value;
6003
6852
  var ret = g.eval(v8Script.value);
6853
+ result >>>= 0;
6004
6854
  value = envObject.ensureHandleId(ret);
6005
6855
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6006
6856
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -6026,6 +6876,7 @@ function createNapiModule(options) {
6026
6876
  if (!result)
6027
6877
  return envObject.setLastError(1);
6028
6878
  var v = emnapiCtx.handleStore.get(value);
6879
+ result >>>= 0;
6029
6880
  var r;
6030
6881
  if (v.isNumber()) {
6031
6882
  r = 3;
@@ -6081,6 +6932,7 @@ function createNapiModule(options) {
6081
6932
  if (!result)
6082
6933
  return envObject.setLastError(1);
6083
6934
  var handle = emnapiCtx.handleStore.get(value);
6935
+ result >>>= 0;
6084
6936
  v = handle.value ? 4 : 3;
6085
6937
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6086
6938
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -6111,6 +6963,7 @@ function createNapiModule(options) {
6111
6963
  if (handle.isBigInt()) {
6112
6964
  throw new TypeError('Cannot convert a BigInt value to a number');
6113
6965
  }
6966
+ result >>>= 0;
6114
6967
  v = emnapiCtx.addToCurrentScope(Number(handle.value)).id;
6115
6968
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6116
6969
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -6141,6 +6994,7 @@ function createNapiModule(options) {
6141
6994
  if (handle.value == null) {
6142
6995
  throw new TypeError('Cannot convert undefined or null to object');
6143
6996
  }
6997
+ result >>>= 0;
6144
6998
  v = envObject.ensureHandleId(Object(handle.value));
6145
6999
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6146
7000
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -6171,6 +7025,7 @@ function createNapiModule(options) {
6171
7025
  if (handle.isSymbol()) {
6172
7026
  throw new TypeError('Cannot convert a Symbol value to a string');
6173
7027
  }
7028
+ result >>>= 0;
6174
7029
  v = emnapiCtx.addToCurrentScope(String(handle.value)).id;
6175
7030
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6176
7031
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -6199,6 +7054,7 @@ function createNapiModule(options) {
6199
7054
  return envObject.setLastError(1);
6200
7055
  if (!constructor)
6201
7056
  return envObject.setLastError(1);
7057
+ result >>>= 0;
6202
7058
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6203
7059
  HEAP_DATA_VIEW.setInt8(result, 0, true);
6204
7060
  var ctor = emnapiCtx.handleStore.get(constructor);
@@ -6226,6 +7082,7 @@ function createNapiModule(options) {
6226
7082
  if (!result)
6227
7083
  return envObject.setLastError(1);
6228
7084
  var h = emnapiCtx.handleStore.get(value);
7085
+ result >>>= 0;
6229
7086
  var r = h.isArray() ? 1 : 0;
6230
7087
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6231
7088
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6241,6 +7098,7 @@ function createNapiModule(options) {
6241
7098
  if (!result)
6242
7099
  return envObject.setLastError(1);
6243
7100
  var h = emnapiCtx.handleStore.get(value);
7101
+ result >>>= 0;
6244
7102
  var r = h.isArrayBuffer() ? 1 : 0;
6245
7103
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6246
7104
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6256,6 +7114,7 @@ function createNapiModule(options) {
6256
7114
  if (!result)
6257
7115
  return envObject.setLastError(1);
6258
7116
  var h = emnapiCtx.handleStore.get(value);
7117
+ result >>>= 0;
6259
7118
  var r = ((typeof SharedArrayBuffer === 'function' && h.value instanceof SharedArrayBuffer) ||
6260
7119
  (Object.prototype.toString.call(h.value) === '[object SharedArrayBuffer]'))
6261
7120
  ? 1
@@ -6274,6 +7133,7 @@ function createNapiModule(options) {
6274
7133
  if (!result)
6275
7134
  return envObject.setLastError(1);
6276
7135
  var h = emnapiCtx.handleStore.get(value);
7136
+ result >>>= 0;
6277
7137
  var r = h.isDate() ? 1 : 0;
6278
7138
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6279
7139
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6289,6 +7149,7 @@ function createNapiModule(options) {
6289
7149
  if (!result)
6290
7150
  return envObject.setLastError(1);
6291
7151
  var val = emnapiCtx.handleStore.get(value).value;
7152
+ result >>>= 0;
6292
7153
  var r = (val instanceof Error) ? 1 : 0;
6293
7154
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6294
7155
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6304,6 +7165,7 @@ function createNapiModule(options) {
6304
7165
  if (!result)
6305
7166
  return envObject.setLastError(1);
6306
7167
  var h = emnapiCtx.handleStore.get(value);
7168
+ result >>>= 0;
6307
7169
  var r = h.isTypedArray() ? 1 : 0;
6308
7170
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6309
7171
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6319,6 +7181,7 @@ function createNapiModule(options) {
6319
7181
  if (!result)
6320
7182
  return envObject.setLastError(1);
6321
7183
  var h = emnapiCtx.handleStore.get(value);
7184
+ result >>>= 0;
6322
7185
  var r = h.isBuffer(emnapiCtx.feature.Buffer) ? 1 : 0;
6323
7186
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6324
7187
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6334,6 +7197,7 @@ function createNapiModule(options) {
6334
7197
  if (!result)
6335
7198
  return envObject.setLastError(1);
6336
7199
  var h = emnapiCtx.handleStore.get(value);
7200
+ result >>>= 0;
6337
7201
  var r = h.isDataView() ? 1 : 0;
6338
7202
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6339
7203
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6359,6 +7223,7 @@ function createNapiModule(options) {
6359
7223
  return envObject.setLastError(1);
6360
7224
  var lv = emnapiCtx.handleStore.get(lhs).value;
6361
7225
  var rv = emnapiCtx.handleStore.get(rhs).value;
7226
+ result >>>= 0;
6362
7227
  r = (lv === rv) ? 1 : 0;
6363
7228
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6364
7229
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6409,6 +7274,7 @@ function createNapiModule(options) {
6409
7274
  if (!result)
6410
7275
  return envObject.setLastError(1);
6411
7276
  var h = emnapiCtx.handleStore.get(arraybuffer);
7277
+ result >>>= 0;
6412
7278
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6413
7279
  if (h.isArrayBuffer() && h.value.byteLength === 0) {
6414
7280
  try {
@@ -6464,11 +7330,13 @@ function createNapiModule(options) {
6464
7330
  });
6465
7331
  emnapiAWST.init();
6466
7332
  emnapiExternalMemory.init();
7333
+ emnapiExternalSAB.init();
6467
7334
  emnapiString.init();
6468
7335
  emnapiTSFN.init();
6469
7336
  PThread.init();
6470
7337
  napiModule.emnapi.syncMemory = $emnapiSyncMemory;
6471
7338
  napiModule.emnapi.getMemoryAddress = $emnapiGetMemoryAddress;
7339
+ napiModule.emnapi.acquireExternalSharedArrayBuffer = $emnapiAcquireExternalSharedArrayBuffer;
6472
7340
  function addImports(mod) {
6473
7341
  var keys = Object.keys(mod);
6474
7342
  for (var i = 0; i < keys.length; ++i) {
@@ -6723,12 +7591,7 @@ class MessageHandler extends wasiThreads.ThreadMessageHandler {
6723
7591
  try {
6724
7592
  if (type === 'async-worker-init') {
6725
7593
  this.handleAfterLoad(e, () => {
6726
- this.napiModule.initWorker(payload.arg);
6727
- });
6728
- }
6729
- else if (type === 'async-work-execute') {
6730
- this.handleAfterLoad(e, () => {
6731
- this.napiModule.executeAsyncWork(payload.work);
7594
+ this.napiModule.initWorker(payload.arg, payload.func);
6732
7595
  });
6733
7596
  }
6734
7597
  }
@@ -6739,7 +7602,7 @@ class MessageHandler extends wasiThreads.ThreadMessageHandler {
6739
7602
  }
6740
7603
  }
6741
7604
 
6742
- const version = "1.6.0";
7605
+ const version = "1.11.1";
6743
7606
 
6744
7607
  exports.MessageHandler = MessageHandler;
6745
7608
  exports.createNapiModule = createNapiModule;