@tailwindcss/oxide-wasm32-wasi 0.0.0-insiders.d593a21 → 0.0.0-insiders.d5ca0ae

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 +1301 -389
  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 +1454 -428
  7. package/node_modules/@emnapi/core/dist/emnapi-core.js +1475 -461
  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 +1301 -389
  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 +20687 -20248
  41. package/node_modules/@napi-rs/wasm-runtime/fs-proxy.js +47 -12
  42. package/node_modules/@napi-rs/wasm-runtime/package.json +19 -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,
@@ -1942,6 +2323,10 @@ function createNapiModule(options) {
1942
2323
  emnapiExternalMemory.table = new WeakMap();
1943
2324
  emnapiExternalMemory.wasmMemoryViewTable = new WeakMap();
1944
2325
  },
2326
+ isSharedArrayBuffer: function (value) {
2327
+ return ((typeof SharedArrayBuffer === 'function' && value instanceof SharedArrayBuffer) ||
2328
+ (Object.prototype.toString.call(value) === '[object SharedArrayBuffer]'));
2329
+ },
1945
2330
  isDetachedArrayBuffer: function (arrayBuffer) {
1946
2331
  if (arrayBuffer.byteLength === 0) {
1947
2332
  try {
@@ -1984,6 +2369,7 @@ function createNapiModule(options) {
1984
2369
  var pointer = _malloc(arrayBuffer.byteLength);
1985
2370
  if (!pointer)
1986
2371
  throw new Error('Out of memory');
2372
+ pointer >>>= 0;
1987
2373
  new Uint8Array(wasmMemory.buffer).set(new Uint8Array(arrayBuffer), pointer);
1988
2374
  info.address = pointer;
1989
2375
  info.ownership = emnapiExternalMemory.registry ? 0 : 1;
@@ -2005,8 +2391,7 @@ function createNapiModule(options) {
2005
2391
  }
2006
2392
  return view;
2007
2393
  }
2008
- var maybeOldWasmMemory = emnapiExternalMemory.isDetachedArrayBuffer(view.buffer) ||
2009
- ((typeof SharedArrayBuffer === 'function') && (view.buffer instanceof SharedArrayBuffer));
2394
+ var maybeOldWasmMemory = emnapiExternalMemory.isDetachedArrayBuffer(view.buffer) || emnapiExternalMemory.isSharedArrayBuffer(view.buffer);
2010
2395
  if (maybeOldWasmMemory && emnapiExternalMemory.wasmMemoryViewTable.has(view)) {
2011
2396
  var info = emnapiExternalMemory.wasmMemoryViewTable.get(view);
2012
2397
  var Ctor = info.Ctor;
@@ -2036,6 +2421,55 @@ function createNapiModule(options) {
2036
2421
  return { address: address === 0 ? 0 : (address + view.byteOffset), ownership: ownership, runtimeAllocated: runtimeAllocated, view: view };
2037
2422
  }
2038
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
+ };
2039
2473
  var emnapiString = {
2040
2474
  utf8Decoder: undefined,
2041
2475
  utf16Decoder: undefined,
@@ -2139,7 +2573,7 @@ function createNapiModule(options) {
2139
2573
  ptr >>>= 0;
2140
2574
  var HEAPU8 = new Uint8Array(wasmMemory.buffer);
2141
2575
  var end = ptr;
2142
- if (length === -1) {
2576
+ if (length === -1 || length === 4294967295) {
2143
2577
  for (; HEAPU8[end];)
2144
2578
  ++end;
2145
2579
  }
@@ -2230,12 +2664,12 @@ function createNapiModule(options) {
2230
2664
  return '';
2231
2665
  ptr >>>= 0;
2232
2666
  var end = ptr;
2233
- if (length === -1) {
2234
- var idx = end >> 1;
2667
+ if (length === -1 || length === 4294967295) {
2668
+ var idx = end >>> 1;
2235
2669
  var HEAPU16 = new Uint16Array(wasmMemory.buffer);
2236
2670
  while (HEAPU16[idx])
2237
2671
  ++idx;
2238
- end = idx << 1;
2672
+ end = (idx << 1) >>> 0;
2239
2673
  }
2240
2674
  else {
2241
2675
  end = ptr + (length >>> 0) * 2;
@@ -2266,11 +2700,12 @@ function createNapiModule(options) {
2266
2700
  return outPtr - startPtr;
2267
2701
  },
2268
2702
  newString: function (env, str, length, result, stringMaker) {
2703
+ length >>>= 0;
2269
2704
  if (!env)
2270
2705
  return 1;
2271
2706
  var envObject = emnapiCtx.envStore.get(env);
2272
2707
  envObject.checkGCAccess();
2273
- var autoLength = length === -1;
2708
+ var autoLength = length === -1 || length === 4294967295;
2274
2709
  var sizelength = length >>> 0;
2275
2710
  if (length !== 0) {
2276
2711
  if (!str)
@@ -2280,18 +2715,21 @@ function createNapiModule(options) {
2280
2715
  return envObject.setLastError(1);
2281
2716
  if (!(autoLength || (sizelength <= 2147483647)))
2282
2717
  return envObject.setLastError(1);
2718
+ str >>>= 0;
2283
2719
  var strValue = stringMaker(str, autoLength, sizelength);
2720
+ result >>>= 0;
2284
2721
  var value = emnapiCtx.addToCurrentScope(strValue).id;
2285
2722
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2286
2723
  HEAP_DATA_VIEW.setUint32(result, value, true);
2287
2724
  return envObject.clearLastError();
2288
2725
  },
2289
2726
  newExternalString: function (env, str, length, finalize_callback, finalize_hint, result, copied, createApi, stringMaker) {
2727
+ length >>>= 0;
2290
2728
  if (!env)
2291
2729
  return 1;
2292
2730
  var envObject = emnapiCtx.envStore.get(env);
2293
2731
  envObject.checkGCAccess();
2294
- var autoLength = length === -1;
2732
+ var autoLength = length === -1 || length === 4294967295;
2295
2733
  var sizelength = length >>> 0;
2296
2734
  if (length !== 0) {
2297
2735
  if (!str)
@@ -2333,6 +2771,7 @@ function createNapiModule(options) {
2333
2771
  if (!handle.isArray()) {
2334
2772
  return envObject.setLastError(8);
2335
2773
  }
2774
+ result >>>= 0;
2336
2775
  var v = handle.value.length >>> 0;
2337
2776
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2338
2777
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -2351,19 +2790,55 @@ function createNapiModule(options) {
2351
2790
  if (!arraybuffer)
2352
2791
  return envObject.setLastError(1);
2353
2792
  var handle = emnapiCtx.handleStore.get(arraybuffer);
2354
- if (!handle.isArrayBuffer()) {
2793
+ if (!handle.isArrayBuffer() && !emnapiExternalMemory.isSharedArrayBuffer(handle.value)) {
2355
2794
  return envObject.setLastError(1);
2356
2795
  }
2357
2796
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2358
2797
  if (data) {
2798
+ data >>>= 0;
2359
2799
  var p = emnapiExternalMemory.getArrayBufferPointer(handle.value, true).address;
2360
2800
  HEAP_DATA_VIEW.setUint32(data, p, true);
2361
2801
  }
2362
2802
  if (byte_length) {
2803
+ byte_length >>>= 0;
2363
2804
  HEAP_DATA_VIEW.setUint32(byte_length, handle.value.byteLength, true);
2364
2805
  }
2365
2806
  return envObject.clearLastError();
2366
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
+ }
2367
2842
  function napi_get_prototype(env, value, result) {
2368
2843
  if (!env)
2369
2844
  return 1;
@@ -2390,6 +2865,7 @@ function createNapiModule(options) {
2390
2865
  catch (_) {
2391
2866
  return envObject.setLastError(2);
2392
2867
  }
2868
+ result >>>= 0;
2393
2869
  var p = envObject.ensureHandleId(Object.getPrototypeOf(v));
2394
2870
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2395
2871
  HEAP_DATA_VIEW.setUint32(result, p, true);
@@ -2414,6 +2890,7 @@ function createNapiModule(options) {
2414
2890
  var v = handle.value;
2415
2891
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2416
2892
  if (type) {
2893
+ type >>>= 0;
2417
2894
  var t = void 0;
2418
2895
  if (v instanceof Int8Array) {
2419
2896
  t = 0;
@@ -2436,6 +2913,9 @@ function createNapiModule(options) {
2436
2913
  else if (v instanceof Uint32Array) {
2437
2914
  t = 6;
2438
2915
  }
2916
+ else if (typeof Float16Array === 'function' && v instanceof Float16Array) {
2917
+ t = 11;
2918
+ }
2439
2919
  else if (v instanceof Float32Array) {
2440
2920
  t = 7;
2441
2921
  }
@@ -2453,22 +2933,25 @@ function createNapiModule(options) {
2453
2933
  }
2454
2934
  HEAP_DATA_VIEW.setInt32(type, t, true);
2455
2935
  }
2936
+ v = emnapiExternalMemory.getOrUpdateMemoryView(v);
2456
2937
  if (length) {
2938
+ length >>>= 0;
2457
2939
  HEAP_DATA_VIEW.setUint32(length, v.length, true);
2458
2940
  }
2459
- var buffer;
2460
2941
  if (data || arraybuffer) {
2461
- buffer = v.buffer;
2462
2942
  if (data) {
2943
+ data >>>= 0;
2463
2944
  var p = emnapiExternalMemory.getViewPointer(v, true).address;
2464
2945
  HEAP_DATA_VIEW.setUint32(data, p, true);
2465
2946
  }
2466
2947
  if (arraybuffer) {
2467
- var ab = envObject.ensureHandleId(buffer);
2948
+ arraybuffer >>>= 0;
2949
+ var ab = envObject.ensureHandleId(v.buffer);
2468
2950
  HEAP_DATA_VIEW.setUint32(arraybuffer, ab, true);
2469
2951
  }
2470
2952
  }
2471
2953
  if (byte_offset) {
2954
+ byte_offset >>>= 0;
2472
2955
  HEAP_DATA_VIEW.setUint32(byte_offset, v.byteOffset, true);
2473
2956
  }
2474
2957
  return envObject.clearLastError();
@@ -2499,24 +2982,26 @@ function createNapiModule(options) {
2499
2982
  if (!handle.isDataView()) {
2500
2983
  return envObject.setLastError(1);
2501
2984
  }
2502
- var v = handle.value;
2985
+ var v = emnapiExternalMemory.getOrUpdateMemoryView(handle.value);
2503
2986
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2504
2987
  if (byte_length) {
2988
+ byte_length >>>= 0;
2505
2989
  HEAP_DATA_VIEW.setUint32(byte_length, v.byteLength, true);
2506
2990
  }
2507
- var buffer;
2508
2991
  if (data || arraybuffer) {
2509
- buffer = v.buffer;
2510
2992
  if (data) {
2993
+ data >>>= 0;
2511
2994
  var p = emnapiExternalMemory.getViewPointer(v, true).address;
2512
2995
  HEAP_DATA_VIEW.setUint32(data, p, true);
2513
2996
  }
2514
2997
  if (arraybuffer) {
2515
- var ab = envObject.ensureHandleId(buffer);
2998
+ arraybuffer >>>= 0;
2999
+ var ab = envObject.ensureHandleId(v.buffer);
2516
3000
  HEAP_DATA_VIEW.setUint32(arraybuffer, ab, true);
2517
3001
  }
2518
3002
  }
2519
3003
  if (byte_offset) {
3004
+ byte_offset >>>= 0;
2520
3005
  HEAP_DATA_VIEW.setUint32(byte_offset, v.byteOffset, true);
2521
3006
  }
2522
3007
  return envObject.clearLastError();
@@ -2541,6 +3026,7 @@ function createNapiModule(options) {
2541
3026
  if (!handle.isDate()) {
2542
3027
  return envObject.setLastError(1);
2543
3028
  }
3029
+ result >>>= 0;
2544
3030
  v = handle.value.valueOf();
2545
3031
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2546
3032
  HEAP_DATA_VIEW.setFloat64(result, v, true);
@@ -2564,6 +3050,7 @@ function createNapiModule(options) {
2564
3050
  if (typeof handle.value !== 'boolean') {
2565
3051
  return envObject.setLastError(7);
2566
3052
  }
3053
+ result >>>= 0;
2567
3054
  var r = handle.value ? 1 : 0;
2568
3055
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2569
3056
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -2582,6 +3069,7 @@ function createNapiModule(options) {
2582
3069
  if (typeof handle.value !== 'number') {
2583
3070
  return envObject.setLastError(6);
2584
3071
  }
3072
+ result >>>= 0;
2585
3073
  var r = handle.value;
2586
3074
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2587
3075
  HEAP_DATA_VIEW.setFloat64(result, r, true);
@@ -2606,6 +3094,8 @@ function createNapiModule(options) {
2606
3094
  if (typeof numberValue !== 'bigint') {
2607
3095
  return envObject.setLastError(6);
2608
3096
  }
3097
+ lossless >>>= 0;
3098
+ result >>>= 0;
2609
3099
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2610
3100
  if ((numberValue >= (BigInt(-1) * (BigInt(1) << BigInt(63)))) && (numberValue < (BigInt(1) << BigInt(63)))) {
2611
3101
  HEAP_DATA_VIEW.setInt8(lossless, 1, true);
@@ -2642,6 +3132,8 @@ function createNapiModule(options) {
2642
3132
  if (typeof numberValue !== 'bigint') {
2643
3133
  return envObject.setLastError(6);
2644
3134
  }
3135
+ lossless >>>= 0;
3136
+ result >>>= 0;
2645
3137
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2646
3138
  if ((numberValue >= BigInt(0)) && (numberValue < (BigInt(1) << BigInt(64)))) {
2647
3139
  HEAP_DATA_VIEW.setInt8(lossless, 1, true);
@@ -2673,8 +3165,12 @@ function createNapiModule(options) {
2673
3165
  return envObject.setLastError(17);
2674
3166
  }
2675
3167
  var isMinus = handle.value < BigInt(0);
3168
+ sign_bit >>>= 0;
3169
+ words >>>= 0;
3170
+ word_count >>>= 0;
2676
3171
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2677
3172
  var word_count_int = HEAP_DATA_VIEW.getUint32(word_count, true);
3173
+ word_count_int >>>= 0;
2678
3174
  var wordCount = 0;
2679
3175
  var bigintValue = isMinus ? (handle.value * BigInt(-1)) : handle.value;
2680
3176
  while (bigintValue !== BigInt(0)) {
@@ -2722,6 +3218,7 @@ function createNapiModule(options) {
2722
3218
  if (!handle.isExternal()) {
2723
3219
  return envObject.setLastError(1);
2724
3220
  }
3221
+ result >>>= 0;
2725
3222
  var p = handle.data();
2726
3223
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2727
3224
  HEAP_DATA_VIEW.setUint32(result, p, true);
@@ -2740,6 +3237,7 @@ function createNapiModule(options) {
2740
3237
  if (typeof handle.value !== 'number') {
2741
3238
  return envObject.setLastError(6);
2742
3239
  }
3240
+ result >>>= 0;
2743
3241
  var v = new Int32Array([handle.value])[0];
2744
3242
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2745
3243
  HEAP_DATA_VIEW.setInt32(result, v, true);
@@ -2759,6 +3257,7 @@ function createNapiModule(options) {
2759
3257
  return envObject.setLastError(6);
2760
3258
  }
2761
3259
  var numberValue = handle.value;
3260
+ result >>>= 0;
2762
3261
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2763
3262
  if (numberValue === Number.POSITIVE_INFINITY || numberValue === Number.NEGATIVE_INFINITY || isNaN(numberValue)) {
2764
3263
  HEAP_DATA_VIEW.setInt32(result, 0, true);
@@ -2784,6 +3283,9 @@ function createNapiModule(options) {
2784
3283
  envObject.checkGCAccess();
2785
3284
  if (!value)
2786
3285
  return envObject.setLastError(1);
3286
+ result >>>= 0;
3287
+ buf >>>= 0;
3288
+ buf_size >>>= 0;
2787
3289
  buf_size = buf_size >>> 0;
2788
3290
  var handle = emnapiCtx.handleStore.get(value);
2789
3291
  if (typeof handle.value !== 'string') {
@@ -2820,6 +3322,9 @@ function createNapiModule(options) {
2820
3322
  envObject.checkGCAccess();
2821
3323
  if (!value)
2822
3324
  return envObject.setLastError(1);
3325
+ result >>>= 0;
3326
+ buf >>>= 0;
3327
+ buf_size >>>= 0;
2823
3328
  buf_size = buf_size >>> 0;
2824
3329
  var handle = emnapiCtx.handleStore.get(value);
2825
3330
  if (typeof handle.value !== 'string') {
@@ -2850,6 +3355,9 @@ function createNapiModule(options) {
2850
3355
  envObject.checkGCAccess();
2851
3356
  if (!value)
2852
3357
  return envObject.setLastError(1);
3358
+ result >>>= 0;
3359
+ buf >>>= 0;
3360
+ buf_size >>>= 0;
2853
3361
  buf_size = buf_size >>> 0;
2854
3362
  var handle = emnapiCtx.handleStore.get(value);
2855
3363
  if (typeof handle.value !== 'string') {
@@ -2885,6 +3393,7 @@ function createNapiModule(options) {
2885
3393
  if (typeof handle.value !== 'number') {
2886
3394
  return envObject.setLastError(6);
2887
3395
  }
3396
+ result >>>= 0;
2888
3397
  var v = new Uint32Array([handle.value])[0];
2889
3398
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2890
3399
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -2910,7 +3419,8 @@ function createNapiModule(options) {
2910
3419
  napi_get_value_string_latin1: napi_get_value_string_latin1,
2911
3420
  napi_get_value_string_utf16: napi_get_value_string_utf16,
2912
3421
  napi_get_value_string_utf8: napi_get_value_string_utf8,
2913
- 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
2914
3424
  });
2915
3425
  function napi_create_int32(env, value, result) {
2916
3426
  if (!env)
@@ -2919,6 +3429,7 @@ function createNapiModule(options) {
2919
3429
  envObject.checkGCAccess();
2920
3430
  if (!result)
2921
3431
  return envObject.setLastError(1);
3432
+ result >>>= 0;
2922
3433
  var v = emnapiCtx.addToCurrentScope(value).id;
2923
3434
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2924
3435
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -2931,6 +3442,7 @@ function createNapiModule(options) {
2931
3442
  envObject.checkGCAccess();
2932
3443
  if (!result)
2933
3444
  return envObject.setLastError(1);
3445
+ result >>>= 0;
2934
3446
  var v = emnapiCtx.addToCurrentScope(value >>> 0).id;
2935
3447
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2936
3448
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -2946,6 +3458,7 @@ function createNapiModule(options) {
2946
3458
  return envObject.setLastError(1);
2947
3459
  value = Number(low);
2948
3460
  var v1 = emnapiCtx.addToCurrentScope(value).id;
3461
+ high >>>= 0;
2949
3462
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2950
3463
  HEAP_DATA_VIEW.setUint32(high, v1, true);
2951
3464
  return envObject.clearLastError();
@@ -2957,6 +3470,7 @@ function createNapiModule(options) {
2957
3470
  envObject.checkGCAccess();
2958
3471
  if (!result)
2959
3472
  return envObject.setLastError(1);
3473
+ result >>>= 0;
2960
3474
  var v = emnapiCtx.addToCurrentScope(value).id;
2961
3475
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
2962
3476
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -3027,6 +3541,7 @@ function createNapiModule(options) {
3027
3541
  return envObject.setLastError(1);
3028
3542
  value = low;
3029
3543
  var v1 = emnapiCtx.addToCurrentScope(value).id;
3544
+ high >>>= 0;
3030
3545
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3031
3546
  HEAP_DATA_VIEW.setUint32(high, v1, true);
3032
3547
  return envObject.clearLastError();
@@ -3044,6 +3559,7 @@ function createNapiModule(options) {
3044
3559
  return envObject.setLastError(1);
3045
3560
  value = low & ((BigInt(1) << BigInt(64)) - BigInt(1));
3046
3561
  var v1 = emnapiCtx.addToCurrentScope(value).id;
3562
+ high >>>= 0;
3047
3563
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3048
3564
  HEAP_DATA_VIEW.setUint32(high, v1, true);
3049
3565
  return envObject.clearLastError();
@@ -3065,6 +3581,8 @@ function createNapiModule(options) {
3065
3581
  }
3066
3582
  if (!result)
3067
3583
  return envObject.setLastError(1);
3584
+ words >>>= 0;
3585
+ word_count >>>= 0;
3068
3586
  word_count = word_count >>> 0;
3069
3587
  if (word_count > 2147483647) {
3070
3588
  return envObject.setLastError(1);
@@ -3081,6 +3599,7 @@ function createNapiModule(options) {
3081
3599
  value += wordi << BigInt(64 * i);
3082
3600
  }
3083
3601
  value *= ((BigInt(sign_bit) % BigInt(2) === BigInt(0)) ? BigInt(1) : BigInt(-1));
3602
+ result >>>= 0;
3084
3603
  v = emnapiCtx.addToCurrentScope(value).id;
3085
3604
  HEAP_DATA_VIEW.setUint32(result, v, true);
3086
3605
  return envObject.getReturnStatus();
@@ -3109,6 +3628,7 @@ function createNapiModule(options) {
3109
3628
  node_api_create_property_key_utf8: node_api_create_property_key_utf8
3110
3629
  });
3111
3630
  function emnapiCreateFunction(envObject, utf8name, length, cb, data) {
3631
+ utf8name >>>= 0;
3112
3632
  var functionName = (!utf8name || !length) ? '' : (emnapiString.UTF8ToString(utf8name, length));
3113
3633
  var f;
3114
3634
  var napiCallback = (wasmTable.get(cb));
@@ -3249,6 +3769,7 @@ function createNapiModule(options) {
3249
3769
  if (!finalize_cb)
3250
3770
  return envObject.setLastError(1);
3251
3771
  reference = emnapiCtx.createReferenceWithFinalizer(envObject, handle.id, 0, 1, finalize_cb, native_object, finalize_hint);
3772
+ result >>>= 0;
3252
3773
  referenceId = reference.id;
3253
3774
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3254
3775
  HEAP_DATA_VIEW.setUint32(result, referenceId, true);
@@ -3297,6 +3818,7 @@ function createNapiModule(options) {
3297
3818
  if (!ref)
3298
3819
  return envObject.setLastError(1);
3299
3820
  if (result) {
3821
+ result >>>= 0;
3300
3822
  data = ref.data();
3301
3823
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3302
3824
  HEAP_DATA_VIEW.setUint32(result, data, true);
@@ -3333,12 +3855,15 @@ function createNapiModule(options) {
3333
3855
  return envObject.setLastError(1);
3334
3856
  if (!constructor)
3335
3857
  return envObject.setLastError(1);
3858
+ length >>>= 0;
3859
+ properties >>>= 0;
3860
+ property_count >>>= 0;
3336
3861
  property_count = property_count >>> 0;
3337
3862
  if (property_count > 0) {
3338
3863
  if (!properties)
3339
3864
  return envObject.setLastError(1);
3340
3865
  }
3341
- if ((length < -1) || (length > 2147483647) || (!utf8name)) {
3866
+ if (!((length >= -1 && length <= 2147483647) || length === 4294967295) || (!utf8name)) {
3342
3867
  return envObject.setLastError(1);
3343
3868
  }
3344
3869
  var fresult = emnapiCreateFunction(envObject, utf8name, length, constructor, callback_data);
@@ -3356,6 +3881,7 @@ function createNapiModule(options) {
3356
3881
  var setter = HEAP_DATA_VIEW.getUint32(propPtr + 16, true);
3357
3882
  var value = HEAP_DATA_VIEW.getUint32(propPtr + 20, true);
3358
3883
  attributes = HEAP_DATA_VIEW.getInt32(propPtr + 24, true);
3884
+ attributes >>>= 0;
3359
3885
  var data = HEAP_DATA_VIEW.getUint32(propPtr + 28, true);
3360
3886
  if (utf8Name) {
3361
3887
  propertyName = emnapiString.UTF8ToString(utf8Name, -1);
@@ -3377,6 +3903,7 @@ function createNapiModule(options) {
3377
3903
  }
3378
3904
  var valueHandle = emnapiCtx.addToCurrentScope(F);
3379
3905
  valueHandleId = valueHandle.id;
3906
+ result >>>= 0;
3380
3907
  HEAP_DATA_VIEW.setUint32(result, valueHandleId, true);
3381
3908
  return envObject.getReturnStatus();
3382
3909
  }
@@ -3412,6 +3939,7 @@ function createNapiModule(options) {
3412
3939
  if (!(value.isObject() || value.isFunction())) {
3413
3940
  return envObject.setLastError(envObject.tryCatch.hasCaught() ? 10 : 2);
3414
3941
  }
3942
+ type_tag >>>= 0;
3415
3943
  if (!type_tag) {
3416
3944
  return envObject.setLastError(envObject.tryCatch.hasCaught() ? 10 : 1);
3417
3945
  }
@@ -3456,6 +3984,7 @@ function createNapiModule(options) {
3456
3984
  }
3457
3985
  var binding = envObject.getObjectBinding(value.value);
3458
3986
  if (binding.tag !== null) {
3987
+ type_tag >>>= 0;
3459
3988
  var tag = binding.tag;
3460
3989
  var typeTag = new Uint32Array(wasmMemory.buffer, type_tag, 4);
3461
3990
  ret = (tag[0] === typeTag[0] &&
@@ -3466,6 +3995,7 @@ function createNapiModule(options) {
3466
3995
  else {
3467
3996
  ret = false;
3468
3997
  }
3998
+ result >>>= 0;
3469
3999
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3470
4000
  HEAP_DATA_VIEW.setInt8(result, ret ? 1 : 0, true);
3471
4001
  return envObject.getReturnStatus();
@@ -3493,8 +4023,12 @@ function createNapiModule(options) {
3493
4023
  }
3494
4024
  var handle = handleResult.handle;
3495
4025
  var ownership = !result ? 0 : 1;
4026
+ finalize_data >>>= 0;
4027
+ finalize_cb >>>= 0;
4028
+ finalize_hint >>>= 0;
3496
4029
  var reference = emnapiCtx.createReferenceWithFinalizer(envObject, handle.id, 0, ownership, finalize_cb, finalize_data, finalize_hint);
3497
4030
  if (result) {
4031
+ result >>>= 0;
3498
4032
  var referenceId = reference.id;
3499
4033
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3500
4034
  HEAP_DATA_VIEW.setUint32(result, referenceId, true);
@@ -3533,6 +4067,9 @@ function createNapiModule(options) {
3533
4067
  try {
3534
4068
  if (!result)
3535
4069
  return envObject.setLastError(1);
4070
+ byte_length >>>= 0;
4071
+ external_data >>>= 0;
4072
+ result >>>= 0;
3536
4073
  byte_length = byte_length >>> 0;
3537
4074
  if (!external_data) {
3538
4075
  byte_length = 0;
@@ -3584,6 +4121,12 @@ function createNapiModule(options) {
3584
4121
  case -1:
3585
4122
  viewDescriptor = { Ctor: DataView, address: external_data, length: byte_length, ownership: 1, runtimeAllocated: 0 };
3586
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;
3587
4130
  case -2: {
3588
4131
  if (!emnapiCtx.feature.Buffer) {
3589
4132
  throw emnapiCtx.createNotSupportBufferError('emnapi_create_memory_view', '');
@@ -3633,11 +4176,11 @@ function createNapiModule(options) {
3633
4176
  offset = offset !== null && offset !== void 0 ? offset : 0;
3634
4177
  offset = offset >>> 0;
3635
4178
  var view;
3636
- if (arrayBufferOrView instanceof ArrayBuffer) {
4179
+ if (arrayBufferOrView instanceof ArrayBuffer || emnapiExternalMemory.isSharedArrayBuffer(arrayBufferOrView)) {
3637
4180
  var pointer = emnapiExternalMemory.getArrayBufferPointer(arrayBufferOrView, false).address;
3638
4181
  if (!pointer)
3639
4182
  throw new Error('Unknown ArrayBuffer address');
3640
- if (typeof len !== 'number' || len === -1) {
4183
+ if (typeof len !== 'number' || len === -1 || len === 4294967295) {
3641
4184
  len = arrayBufferOrView.byteLength - offset;
3642
4185
  }
3643
4186
  len = len >>> 0;
@@ -3659,7 +4202,7 @@ function createNapiModule(options) {
3659
4202
  var pointer = viewPointerInfo.address;
3660
4203
  if (!pointer)
3661
4204
  throw new Error('Unknown ArrayBuffer address');
3662
- if (typeof len !== 'number' || len === -1) {
4205
+ if (typeof len !== 'number' || len === -1 || len === 4294967295) {
3663
4206
  len = latestView.byteLength - offset;
3664
4207
  }
3665
4208
  len = len >>> 0;
@@ -3691,14 +4234,18 @@ function createNapiModule(options) {
3691
4234
  try {
3692
4235
  if (!arraybuffer_or_view)
3693
4236
  return envObject.setLastError(1);
4237
+ arraybuffer_or_view >>>= 0;
4238
+ offset >>>= 0;
4239
+ len >>>= 0;
3694
4240
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3695
4241
  var handleId = HEAP_DATA_VIEW.getUint32(arraybuffer_or_view, true);
3696
4242
  var handle = envObject.ctx.handleStore.get(handleId);
3697
- if (!handle.isArrayBuffer() && !handle.isTypedArray() && !handle.isDataView()) {
4243
+ if (!handle.isArrayBuffer() && !handle.isTypedArray() && !handle.isDataView() && !emnapiExternalMemory.isSharedArrayBuffer(handle.value)) {
3698
4244
  return envObject.setLastError(1);
3699
4245
  }
3700
4246
  var ret = $emnapiSyncMemory(Boolean(js_to_wasm), handle.value, offset, len);
3701
4247
  if (handle.value !== ret) {
4248
+ arraybuffer_or_view >>>= 0;
3702
4249
  v = envObject.ensureHandleId(ret);
3703
4250
  HEAP_DATA_VIEW.setUint32(arraybuffer_or_view, v, true);
3704
4251
  }
@@ -3713,7 +4260,7 @@ function createNapiModule(options) {
3713
4260
  var isArrayBuffer = arrayBufferOrView instanceof ArrayBuffer;
3714
4261
  var isDataView = arrayBufferOrView instanceof DataView;
3715
4262
  var isTypedArray = ArrayBuffer.isView(arrayBufferOrView) && !isDataView;
3716
- if (!isArrayBuffer && !isTypedArray && !isDataView) {
4263
+ if (!isArrayBuffer && !isTypedArray && !isDataView && !emnapiExternalMemory.isSharedArrayBuffer(arrayBufferOrView)) {
3717
4264
  throw new TypeError('emnapiGetMemoryAddress expect ArrayBuffer or ArrayBufferView as first parameter');
3718
4265
  }
3719
4266
  var info;
@@ -3752,13 +4299,16 @@ function createNapiModule(options) {
3752
4299
  p = info.address;
3753
4300
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3754
4301
  if (address) {
4302
+ address >>>= 0;
3755
4303
  HEAP_DATA_VIEW.setUint32(address, p, true);
3756
4304
  }
3757
4305
  if (ownership) {
4306
+ ownership >>>= 0;
3758
4307
  ownershipOut = info.ownership;
3759
4308
  HEAP_DATA_VIEW.setInt32(ownership, ownershipOut, true);
3760
4309
  }
3761
4310
  if (runtime_allocated) {
4311
+ runtime_allocated >>>= 0;
3762
4312
  runtimeAllocated = info.runtimeAllocated;
3763
4313
  HEAP_DATA_VIEW.setInt8(runtime_allocated, runtimeAllocated, true);
3764
4314
  }
@@ -3784,22 +4334,102 @@ function createNapiModule(options) {
3784
4334
  }
3785
4335
  var versions = runtimeVersion.split('.')
3786
4336
  .map(function (n) { return Number(n); });
4337
+ version >>>= 0;
3787
4338
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3788
4339
  HEAP_DATA_VIEW.setUint32(version, versions[0], true);
3789
4340
  HEAP_DATA_VIEW.setUint32(version + 4, versions[1], true);
3790
4341
  HEAP_DATA_VIEW.setUint32(version + 8, versions[2], true);
3791
4342
  return envObject.clearLastError();
3792
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
+ }
3793
4419
  var emnapiMod = Object.freeze({
3794
4420
  __proto__: null,
4421
+ $emnapiAcquireExternalSharedArrayBuffer: $emnapiAcquireExternalSharedArrayBuffer,
3795
4422
  $emnapiGetMemoryAddress: $emnapiGetMemoryAddress,
3796
4423
  $emnapiSyncMemory: $emnapiSyncMemory,
4424
+ emnapi_acquire_external_sharedarraybuffer: emnapi_acquire_external_sharedarraybuffer,
3797
4425
  emnapi_create_memory_view: emnapi_create_memory_view,
4426
+ emnapi_get_external_sharedarraybuffer_handle: emnapi_get_external_sharedarraybuffer_handle,
3798
4427
  emnapi_get_memory_address: emnapi_get_memory_address,
3799
4428
  emnapi_get_runtime_version: emnapi_get_runtime_version,
3800
4429
  emnapi_is_node_binding_available: emnapi_is_node_binding_available,
3801
4430
  emnapi_is_support_bigint: emnapi_is_support_bigint,
3802
4431
  emnapi_is_support_weakref: emnapi_is_support_weakref,
4432
+ emnapi_release_external_sharedarraybuffer: emnapi_release_external_sharedarraybuffer,
3803
4433
  emnapi_sync_memory: emnapi_sync_memory
3804
4434
  });
3805
4435
  function napi_create_array(env, result) {
@@ -3809,6 +4439,7 @@ function createNapiModule(options) {
3809
4439
  envObject.checkGCAccess();
3810
4440
  if (!result)
3811
4441
  return envObject.setLastError(1);
4442
+ result >>>= 0;
3812
4443
  var value = emnapiCtx.addToCurrentScope([]).id;
3813
4444
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3814
4445
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -3821,16 +4452,20 @@ function createNapiModule(options) {
3821
4452
  envObject.checkGCAccess();
3822
4453
  if (!result)
3823
4454
  return envObject.setLastError(1);
4455
+ length >>>= 0;
4456
+ result >>>= 0;
3824
4457
  length = length >>> 0;
3825
4458
  var value = emnapiCtx.addToCurrentScope(new Array(length)).id;
3826
4459
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3827
4460
  HEAP_DATA_VIEW.setUint32(result, value, true);
3828
4461
  return envObject.clearLastError();
3829
4462
  }
3830
- function emnapiCreateArrayBuffer(byte_length, data) {
4463
+ function emnapiCreateArrayBuffer(byte_length, data, shared) {
4464
+ byte_length >>>= 0;
3831
4465
  byte_length = byte_length >>> 0;
3832
- var arrayBuffer = new ArrayBuffer(byte_length);
4466
+ var arrayBuffer = shared ? new SharedArrayBuffer(byte_length) : new ArrayBuffer(byte_length);
3833
4467
  if (data) {
4468
+ data >>>= 0;
3834
4469
  var p = emnapiExternalMemory.getArrayBufferPointer(arrayBuffer, true).address;
3835
4470
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3836
4471
  HEAP_DATA_VIEW.setUint32(data, p, true);
@@ -3851,7 +4486,34 @@ function createNapiModule(options) {
3851
4486
  try {
3852
4487
  if (!result)
3853
4488
  return envObject.setLastError(1);
3854
- var arrayBuffer = emnapiCreateArrayBuffer(byte_length, data);
4489
+ result >>>= 0;
4490
+ var arrayBuffer = emnapiCreateArrayBuffer(byte_length, data, false);
4491
+ value = emnapiCtx.addToCurrentScope(arrayBuffer).id;
4492
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4493
+ HEAP_DATA_VIEW.setUint32(result, value, true);
4494
+ return envObject.getReturnStatus();
4495
+ }
4496
+ catch (err) {
4497
+ envObject.tryCatch.setError(err);
4498
+ return envObject.setLastError(10);
4499
+ }
4500
+ }
4501
+ function node_api_create_sharedarraybuffer(env, byte_length, data, result) {
4502
+ var value;
4503
+ if (!env)
4504
+ return 1;
4505
+ var envObject = emnapiCtx.envStore.get(env);
4506
+ envObject.checkGCAccess();
4507
+ if (!envObject.tryCatch.isEmpty())
4508
+ return envObject.setLastError(10);
4509
+ if (!envObject.canCallIntoJs())
4510
+ return envObject.setLastError(envObject.moduleApiVersion >= 10 ? 23 : 10);
4511
+ envObject.clearLastError();
4512
+ try {
4513
+ if (!result)
4514
+ return envObject.setLastError(1);
4515
+ result >>>= 0;
4516
+ var arrayBuffer = emnapiCreateArrayBuffer(byte_length, data, true);
3855
4517
  value = emnapiCtx.addToCurrentScope(arrayBuffer).id;
3856
4518
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3857
4519
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -3876,6 +4538,7 @@ function createNapiModule(options) {
3876
4538
  try {
3877
4539
  if (!result)
3878
4540
  return envObject.setLastError(1);
4541
+ result >>>= 0;
3879
4542
  value = emnapiCtx.addToCurrentScope(new Date(time)).id;
3880
4543
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3881
4544
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -3907,6 +4570,7 @@ function createNapiModule(options) {
3907
4570
  if (finalize_cb) {
3908
4571
  emnapiCtx.createReferenceWithFinalizer(envObject, externalHandle.id, 0, 0, finalize_cb, data, finalize_hint);
3909
4572
  }
4573
+ result >>>= 0;
3910
4574
  value = externalHandle.id;
3911
4575
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3912
4576
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -3931,6 +4595,9 @@ function createNapiModule(options) {
3931
4595
  try {
3932
4596
  if (!result)
3933
4597
  return envObject.setLastError(1);
4598
+ byte_length >>>= 0;
4599
+ external_data >>>= 0;
4600
+ result >>>= 0;
3934
4601
  byte_length = byte_length >>> 0;
3935
4602
  if (!external_data) {
3936
4603
  byte_length = 0;
@@ -3981,6 +4648,60 @@ function createNapiModule(options) {
3981
4648
  return envObject.setLastError(10);
3982
4649
  }
3983
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
+ }
3984
4705
  function napi_create_object(env, result) {
3985
4706
  if (!env)
3986
4707
  return 1;
@@ -3988,11 +4709,57 @@ function createNapiModule(options) {
3988
4709
  envObject.checkGCAccess();
3989
4710
  if (!result)
3990
4711
  return envObject.setLastError(1);
4712
+ result >>>= 0;
3991
4713
  var value = emnapiCtx.addToCurrentScope({}).id;
3992
4714
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
3993
4715
  HEAP_DATA_VIEW.setUint32(result, value, true);
3994
4716
  return envObject.clearLastError();
3995
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
+ }
3996
4763
  function napi_create_symbol(env, description, result) {
3997
4764
  if (!env)
3998
4765
  return 1;
@@ -4000,6 +4767,7 @@ function createNapiModule(options) {
4000
4767
  envObject.checkGCAccess();
4001
4768
  if (!result)
4002
4769
  return envObject.setLastError(1);
4770
+ result >>>= 0;
4003
4771
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4004
4772
  if (!description) {
4005
4773
  var value = emnapiCtx.addToCurrentScope(Symbol()).id;
@@ -4033,10 +4801,9 @@ function createNapiModule(options) {
4033
4801
  if (!result)
4034
4802
  return envObject.setLastError(1);
4035
4803
  var handle = emnapiCtx.handleStore.get(arraybuffer);
4036
- if (!handle.isArrayBuffer()) {
4037
- return envObject.setLastError(1);
4038
- }
4039
4804
  var buffer = handle.value;
4805
+ byte_offset >>>= 0;
4806
+ length >>>= 0;
4040
4807
  var createTypedArray = function (envObject, Type, size_of_element, buffer, byte_offset, length) {
4041
4808
  var _a;
4042
4809
  byte_offset = byte_offset >>> 0;
@@ -4067,36 +4834,47 @@ function createNapiModule(options) {
4067
4834
  });
4068
4835
  }
4069
4836
  }
4837
+ result >>>= 0;
4070
4838
  value = emnapiCtx.addToCurrentScope(out).id;
4071
4839
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4072
4840
  HEAP_DATA_VIEW.setUint32(result, value, true);
4073
4841
  return envObject.getReturnStatus();
4074
4842
  };
4075
- switch (type) {
4076
- case 0:
4077
- return createTypedArray(envObject, Int8Array, 1, buffer, byte_offset, length);
4078
- case 1:
4079
- return createTypedArray(envObject, Uint8Array, 1, buffer, byte_offset, length);
4080
- case 2:
4081
- return createTypedArray(envObject, Uint8ClampedArray, 1, buffer, byte_offset, length);
4082
- case 3:
4083
- return createTypedArray(envObject, Int16Array, 2, buffer, byte_offset, length);
4084
- case 4:
4085
- return createTypedArray(envObject, Uint16Array, 2, buffer, byte_offset, length);
4086
- case 5:
4087
- return createTypedArray(envObject, Int32Array, 4, buffer, byte_offset, length);
4088
- case 6:
4089
- return createTypedArray(envObject, Uint32Array, 4, buffer, byte_offset, length);
4090
- case 7:
4091
- return createTypedArray(envObject, Float32Array, 4, buffer, byte_offset, length);
4092
- case 8:
4093
- return createTypedArray(envObject, Float64Array, 8, buffer, byte_offset, length);
4094
- case 9:
4095
- return createTypedArray(envObject, BigInt64Array, 8, buffer, byte_offset, length);
4096
- case 10:
4097
- return createTypedArray(envObject, BigUint64Array, 8, buffer, byte_offset, length);
4098
- default:
4099
- 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);
4100
4878
  }
4101
4879
  }
4102
4880
  catch (err) {
@@ -4123,7 +4901,9 @@ function createNapiModule(options) {
4123
4901
  if (!Buffer) {
4124
4902
  throw emnapiCtx.createNotSupportBufferError('napi_create_buffer', '');
4125
4903
  }
4904
+ result >>>= 0;
4126
4905
  var buffer = void 0;
4906
+ size >>>= 0;
4127
4907
  size = size >>> 0;
4128
4908
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4129
4909
  if (!data || (size === 0)) {
@@ -4135,6 +4915,7 @@ function createNapiModule(options) {
4135
4915
  pointer = _malloc(size);
4136
4916
  if (!pointer)
4137
4917
  throw new Error('Out of memory');
4918
+ pointer >>>= 0;
4138
4919
  new Uint8Array(wasmMemory.buffer).subarray(pointer, pointer + size).fill(0);
4139
4920
  var buffer_1 = Buffer.from(wasmMemory.buffer, pointer, size);
4140
4921
  var viewDescriptor = {
@@ -4148,6 +4929,7 @@ function createNapiModule(options) {
4148
4929
  (_a = emnapiExternalMemory.registry) === null || _a === void 0 ? void 0 : _a.register(viewDescriptor, pointer);
4149
4930
  value = emnapiCtx.addToCurrentScope(buffer_1).id;
4150
4931
  HEAP_DATA_VIEW.setUint32(result, value, true);
4932
+ data >>>= 0;
4151
4933
  HEAP_DATA_VIEW.setUint32(data, pointer, true);
4152
4934
  }
4153
4935
  return envObject.getReturnStatus();
@@ -4175,10 +4957,13 @@ function createNapiModule(options) {
4175
4957
  if (!Buffer) {
4176
4958
  throw emnapiCtx.createNotSupportBufferError('napi_create_buffer_copy', '');
4177
4959
  }
4178
- var arrayBuffer = emnapiCreateArrayBuffer(length, result_data);
4960
+ var arrayBuffer = emnapiCreateArrayBuffer(length, result_data, false);
4179
4961
  var buffer = Buffer.from(arrayBuffer);
4962
+ data >>>= 0;
4963
+ length >>>= 0;
4180
4964
  buffer.set(new Uint8Array(wasmMemory.buffer).subarray(data, data + length));
4181
4965
  value = emnapiCtx.addToCurrentScope(buffer).id;
4966
+ result >>>= 0;
4182
4967
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4183
4968
  HEAP_DATA_VIEW.setUint32(result, value, true);
4184
4969
  return envObject.getReturnStatus();
@@ -4207,6 +4992,8 @@ function createNapiModule(options) {
4207
4992
  return envObject.setLastError(1);
4208
4993
  if (!result)
4209
4994
  return envObject.setLastError(1);
4995
+ byte_offset >>>= 0;
4996
+ byte_length >>>= 0;
4210
4997
  byte_offset = byte_offset >>> 0;
4211
4998
  byte_length = byte_length >>> 0;
4212
4999
  var handle = emnapiCtx.handleStore.get(arraybuffer);
@@ -4235,6 +5022,7 @@ function createNapiModule(options) {
4235
5022
  });
4236
5023
  }
4237
5024
  }
5025
+ result >>>= 0;
4238
5026
  value = emnapiCtx.addToCurrentScope(out).id;
4239
5027
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4240
5028
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4246,7 +5034,6 @@ function createNapiModule(options) {
4246
5034
  }
4247
5035
  }
4248
5036
  function napi_create_dataview(env, byte_length, arraybuffer, byte_offset, result) {
4249
- var value;
4250
5037
  if (!env)
4251
5038
  return 1;
4252
5039
  var envObject = emnapiCtx.envStore.get(env);
@@ -4261,34 +5048,41 @@ function createNapiModule(options) {
4261
5048
  return envObject.setLastError(1);
4262
5049
  if (!result)
4263
5050
  return envObject.setLastError(1);
5051
+ byte_length >>>= 0;
5052
+ byte_offset >>>= 0;
4264
5053
  byte_length = byte_length >>> 0;
4265
5054
  byte_offset = byte_offset >>> 0;
4266
- var handle = emnapiCtx.handleStore.get(arraybuffer);
4267
- if (!handle.isArrayBuffer()) {
4268
- return envObject.setLastError(1);
4269
- }
4270
- var buffer = handle.value;
4271
- if ((byte_length + byte_offset) > buffer.byteLength) {
4272
- var err = new RangeError('byte_offset + byte_length should be less than or equal to the size in bytes of the array passed in');
4273
- err.code = 'ERR_NAPI_INVALID_DATAVIEW_ARGS';
4274
- throw err;
4275
- }
4276
- var dataview = new DataView(buffer, byte_offset, byte_length);
4277
- if (buffer === wasmMemory.buffer) {
4278
- if (!emnapiExternalMemory.wasmMemoryViewTable.has(dataview)) {
4279
- emnapiExternalMemory.wasmMemoryViewTable.set(dataview, {
4280
- Ctor: DataView,
4281
- address: byte_offset,
4282
- length: byte_length,
4283
- ownership: 1,
4284
- runtimeAllocated: 0
4285
- });
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;
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
+ }
4286
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);
4287
5085
  }
4288
- value = emnapiCtx.addToCurrentScope(dataview).id;
4289
- var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4290
- HEAP_DATA_VIEW.setUint32(result, value, true);
4291
- return envObject.getReturnStatus();
4292
5086
  }
4293
5087
  catch (err) {
4294
5088
  envObject.tryCatch.setError(err);
@@ -4302,7 +5096,10 @@ function createNapiModule(options) {
4302
5096
  envObject.checkGCAccess();
4303
5097
  if (!result)
4304
5098
  return envObject.setLastError(1);
4305
- var autoLength = length === -1;
5099
+ length >>>= 0;
5100
+ utf8description >>>= 0;
5101
+ result >>>= 0;
5102
+ var autoLength = length === -1 || length === 4294967295;
4306
5103
  var sizelength = length >>> 0;
4307
5104
  if (length !== 0) {
4308
5105
  if (!utf8description)
@@ -4333,6 +5130,9 @@ function createNapiModule(options) {
4333
5130
  napi_create_symbol: napi_create_symbol,
4334
5131
  napi_create_typedarray: napi_create_typedarray,
4335
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,
5135
+ node_api_create_sharedarraybuffer: node_api_create_sharedarraybuffer,
4336
5136
  node_api_symbol_for: node_api_symbol_for
4337
5137
  });
4338
5138
  function napi_get_boolean(env, value, result) {
@@ -4342,6 +5142,7 @@ function createNapiModule(options) {
4342
5142
  envObject.checkGCAccess();
4343
5143
  if (!result)
4344
5144
  return envObject.setLastError(1);
5145
+ result >>>= 0;
4345
5146
  var v = value === 0 ? 3 : 4;
4346
5147
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4347
5148
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -4354,6 +5155,7 @@ function createNapiModule(options) {
4354
5155
  envObject.checkGCAccess();
4355
5156
  if (!result)
4356
5157
  return envObject.setLastError(1);
5158
+ result >>>= 0;
4357
5159
  var value = 5;
4358
5160
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4359
5161
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4366,6 +5168,7 @@ function createNapiModule(options) {
4366
5168
  envObject.checkGCAccess();
4367
5169
  if (!result)
4368
5170
  return envObject.setLastError(1);
5171
+ result >>>= 0;
4369
5172
  var value = 2;
4370
5173
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4371
5174
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4378,6 +5181,7 @@ function createNapiModule(options) {
4378
5181
  envObject.checkGCAccess();
4379
5182
  if (!result)
4380
5183
  return envObject.setLastError(1);
5184
+ result >>>= 0;
4381
5185
  var value = 1;
4382
5186
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4383
5187
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4394,6 +5198,9 @@ function createNapiModule(options) {
4394
5198
  if (!env)
4395
5199
  return 1;
4396
5200
  var envObject = emnapiCtx.envStore.get(env);
5201
+ data >>>= 0;
5202
+ finalize_cb >>>= 0;
5203
+ finalize_hint >>>= 0;
4397
5204
  envObject.setInstanceData(data, finalize_cb, finalize_hint);
4398
5205
  return envObject.clearLastError();
4399
5206
  }
@@ -4403,6 +5210,7 @@ function createNapiModule(options) {
4403
5210
  var envObject = emnapiCtx.envStore.get(env);
4404
5211
  if (!data)
4405
5212
  return envObject.setLastError(1);
5213
+ data >>>= 0;
4406
5214
  var value = envObject.getInstanceData();
4407
5215
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4408
5216
  HEAP_DATA_VIEW.setUint32(data, value, true);
@@ -4414,11 +5222,15 @@ function createNapiModule(options) {
4414
5222
  napi_set_instance_data: napi_set_instance_data
4415
5223
  });
4416
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;
4417
5228
  var envObject = emnapiCtx.envStore.get(env);
4418
5229
  var lastError = envObject.lastError;
4419
5230
  var errorCode = lastError.errorCode;
4420
5231
  var engineErrorCode = lastError.engineErrorCode >>> 0;
4421
5232
  var engineReserved = lastError.engineReserved;
5233
+ engineReserved >>>= 0;
4422
5234
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4423
5235
  HEAP_DATA_VIEW.setInt32(error_code, errorCode, true);
4424
5236
  HEAP_DATA_VIEW.setUint32(engine_error_code, engineErrorCode, true);
@@ -4458,6 +5270,8 @@ function createNapiModule(options) {
4458
5270
  try {
4459
5271
  if (!msg)
4460
5272
  return envObject.setLastError(1);
5273
+ code >>>= 0;
5274
+ msg >>>= 0;
4461
5275
  var error = new Error(emnapiString.UTF8ToString(msg, -1));
4462
5276
  if (code)
4463
5277
  error.code = emnapiString.UTF8ToString(code, -1);
@@ -4482,6 +5296,8 @@ function createNapiModule(options) {
4482
5296
  try {
4483
5297
  if (!msg)
4484
5298
  return envObject.setLastError(1);
5299
+ code >>>= 0;
5300
+ msg >>>= 0;
4485
5301
  var error = new TypeError(emnapiString.UTF8ToString(msg, -1));
4486
5302
  if (code)
4487
5303
  error.code = emnapiString.UTF8ToString(code, -1);
@@ -4506,6 +5322,8 @@ function createNapiModule(options) {
4506
5322
  try {
4507
5323
  if (!msg)
4508
5324
  return envObject.setLastError(1);
5325
+ code >>>= 0;
5326
+ msg >>>= 0;
4509
5327
  var error = new RangeError(emnapiString.UTF8ToString(msg, -1));
4510
5328
  if (code)
4511
5329
  error.code = emnapiString.UTF8ToString(code, -1);
@@ -4530,6 +5348,8 @@ function createNapiModule(options) {
4530
5348
  try {
4531
5349
  if (!msg)
4532
5350
  return envObject.setLastError(1);
5351
+ code >>>= 0;
5352
+ msg >>>= 0;
4533
5353
  var error = new SyntaxError(emnapiString.UTF8ToString(msg, -1));
4534
5354
  if (code)
4535
5355
  error.code = emnapiString.UTF8ToString(code, -1);
@@ -4549,6 +5369,7 @@ function createNapiModule(options) {
4549
5369
  if (!result)
4550
5370
  return envObject.setLastError(1);
4551
5371
  var r = envObject.tryCatch.hasCaught();
5372
+ result >>>= 0;
4552
5373
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4553
5374
  HEAP_DATA_VIEW.setInt8(result, r ? 1 : 0, true);
4554
5375
  return envObject.clearLastError();
@@ -4574,6 +5395,7 @@ function createNapiModule(options) {
4574
5395
  }
4575
5396
  error.code = codeValue;
4576
5397
  }
5398
+ result >>>= 0;
4577
5399
  var value = emnapiCtx.addToCurrentScope(error).id;
4578
5400
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4579
5401
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4600,6 +5422,7 @@ function createNapiModule(options) {
4600
5422
  }
4601
5423
  error.code = codeValue;
4602
5424
  }
5425
+ result >>>= 0;
4603
5426
  var value = emnapiCtx.addToCurrentScope(error).id;
4604
5427
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4605
5428
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4626,6 +5449,7 @@ function createNapiModule(options) {
4626
5449
  }
4627
5450
  error.code = codeValue;
4628
5451
  }
5452
+ result >>>= 0;
4629
5453
  var value = emnapiCtx.addToCurrentScope(error).id;
4630
5454
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4631
5455
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4652,6 +5476,7 @@ function createNapiModule(options) {
4652
5476
  }
4653
5477
  error.code = codeValue;
4654
5478
  }
5479
+ result >>>= 0;
4655
5480
  var value = emnapiCtx.addToCurrentScope(error).id;
4656
5481
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4657
5482
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -4664,6 +5489,7 @@ function createNapiModule(options) {
4664
5489
  envObject.checkGCAccess();
4665
5490
  if (!result)
4666
5491
  return envObject.setLastError(1);
5492
+ result >>>= 0;
4667
5493
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4668
5494
  if (!envObject.tryCatch.hasCaught()) {
4669
5495
  HEAP_DATA_VIEW.setUint32(result, 1, true);
@@ -4678,6 +5504,10 @@ function createNapiModule(options) {
4678
5504
  return envObject.clearLastError();
4679
5505
  }
4680
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;
4681
5511
  var locationStr = emnapiString.UTF8ToString(location, location_len);
4682
5512
  var messageStr = emnapiString.UTF8ToString(message, message_len);
4683
5513
  if (emnapiNodeBinding) {
@@ -4731,8 +5561,21 @@ function createNapiModule(options) {
4731
5561
  node_api_create_syntax_error: node_api_create_syntax_error,
4732
5562
  node_api_throw_syntax_error: node_api_throw_syntax_error
4733
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
+ }
4734
5578
  function napi_create_function(env, utf8name, length, cb, data, result) {
4735
- var value;
4736
5579
  if (!env)
4737
5580
  return 1;
4738
5581
  var envObject = emnapiCtx.envStore.get(env);
@@ -4747,15 +5590,7 @@ function createNapiModule(options) {
4747
5590
  return envObject.setLastError(1);
4748
5591
  if (!cb)
4749
5592
  return envObject.setLastError(1);
4750
- var fresult = emnapiCreateFunction(envObject, utf8name, length, cb, data);
4751
- if (fresult.status !== 0)
4752
- return envObject.setLastError(fresult.status);
4753
- var f = fresult.f;
4754
- var valueHandle = emnapiCtx.addToCurrentScope(f);
4755
- value = valueHandle.id;
4756
- var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4757
- HEAP_DATA_VIEW.setUint32(result, value, true);
4758
- return envObject.getReturnStatus();
5593
+ return _emnapi_create_function(env, utf8name, length, cb, data, result);
4759
5594
  }
4760
5595
  catch (err) {
4761
5596
  envObject.tryCatch.setError(err);
@@ -4769,11 +5604,14 @@ function createNapiModule(options) {
4769
5604
  if (!cbinfo)
4770
5605
  return envObject.setLastError(1);
4771
5606
  var cbinfoValue = emnapiCtx.scopeStore.get(cbinfo).callbackInfo;
5607
+ argc >>>= 0;
5608
+ argv >>>= 0;
4772
5609
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4773
5610
  if (argv) {
4774
5611
  if (!argc)
4775
5612
  return envObject.setLastError(1);
4776
5613
  var argcValue = HEAP_DATA_VIEW.getUint32(argc, true);
5614
+ argcValue >>>= 0;
4777
5615
  var len = cbinfoValue.args.length;
4778
5616
  var arrlen = argcValue < len ? argcValue : len;
4779
5617
  var i = 0;
@@ -4791,10 +5629,12 @@ function createNapiModule(options) {
4791
5629
  HEAP_DATA_VIEW.setUint32(argc, cbinfoValue.args.length, true);
4792
5630
  }
4793
5631
  if (this_arg) {
5632
+ this_arg >>>= 0;
4794
5633
  var v = envObject.ensureHandleId(cbinfoValue.thiz);
4795
5634
  HEAP_DATA_VIEW.setUint32(this_arg, v, true);
4796
5635
  }
4797
5636
  if (data) {
5637
+ data >>>= 0;
4798
5638
  HEAP_DATA_VIEW.setUint32(data, cbinfoValue.data, true);
4799
5639
  }
4800
5640
  return envObject.clearLastError();
@@ -4814,6 +5654,9 @@ function createNapiModule(options) {
4814
5654
  try {
4815
5655
  if (!recv)
4816
5656
  return envObject.setLastError(1);
5657
+ argc >>>= 0;
5658
+ argv >>>= 0;
5659
+ result >>>= 0;
4817
5660
  argc = argc >>> 0;
4818
5661
  if (argc > 0) {
4819
5662
  if (!argv)
@@ -4858,6 +5701,9 @@ function createNapiModule(options) {
4858
5701
  try {
4859
5702
  if (!constructor)
4860
5703
  return envObject.setLastError(1);
5704
+ argc >>>= 0;
5705
+ argv >>>= 0;
5706
+ result >>>= 0;
4861
5707
  argc = argc >>> 0;
4862
5708
  if (argc > 0) {
4863
5709
  if (!argv)
@@ -4908,6 +5754,7 @@ function createNapiModule(options) {
4908
5754
  return envObject.setLastError(1);
4909
5755
  if (!result)
4910
5756
  return envObject.setLastError(1);
5757
+ result >>>= 0;
4911
5758
  var cbinfoValue = emnapiCtx.scopeStore.get(cbinfo).callbackInfo;
4912
5759
  var thiz = cbinfoValue.thiz, fn = cbinfoValue.fn;
4913
5760
  var value = thiz == null || thiz.constructor == null
@@ -4921,6 +5768,7 @@ function createNapiModule(options) {
4921
5768
  }
4922
5769
  var functionMod = Object.freeze({
4923
5770
  __proto__: null,
5771
+ _emnapi_create_function: _emnapi_create_function,
4924
5772
  napi_call_function: napi_call_function,
4925
5773
  napi_create_function: napi_create_function,
4926
5774
  napi_get_cb_info: napi_get_cb_info,
@@ -4935,6 +5783,7 @@ function createNapiModule(options) {
4935
5783
  if (!result)
4936
5784
  return envObject.setLastError(1);
4937
5785
  var scope = emnapiCtx.openScope(envObject);
5786
+ result >>>= 0;
4938
5787
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4939
5788
  HEAP_DATA_VIEW.setUint32(result, scope.id, true);
4940
5789
  return envObject.clearLastError();
@@ -4960,6 +5809,7 @@ function createNapiModule(options) {
4960
5809
  if (!result)
4961
5810
  return envObject.setLastError(1);
4962
5811
  var scope = emnapiCtx.openScope(envObject);
5812
+ result >>>= 0;
4963
5813
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
4964
5814
  HEAP_DATA_VIEW.setUint32(result, scope.id, true);
4965
5815
  return envObject.clearLastError();
@@ -4990,6 +5840,8 @@ function createNapiModule(options) {
4990
5840
  return envObject.setLastError(1);
4991
5841
  var scopeObject = emnapiCtx.scopeStore.get(scope);
4992
5842
  if (!scopeObject.escapeCalled()) {
5843
+ escapee >>>= 0;
5844
+ result >>>= 0;
4993
5845
  var newHandle = scopeObject.escape(escapee);
4994
5846
  var value = newHandle ? newHandle.id : 0;
4995
5847
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
@@ -5014,6 +5866,7 @@ function createNapiModule(options) {
5014
5866
  }
5015
5867
  }
5016
5868
  var ref = emnapiCtx.createReference(envObject, handle.id, initial_refcount >>> 0, 1);
5869
+ result >>>= 0;
5017
5870
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5018
5871
  HEAP_DATA_VIEW.setUint32(result, ref.id, true);
5019
5872
  return envObject.clearLastError();
@@ -5036,6 +5889,7 @@ function createNapiModule(options) {
5036
5889
  return envObject.setLastError(1);
5037
5890
  var count = emnapiCtx.refStore.get(ref).ref();
5038
5891
  if (result) {
5892
+ result >>>= 0;
5039
5893
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5040
5894
  HEAP_DATA_VIEW.setUint32(result, count, true);
5041
5895
  }
@@ -5055,6 +5909,7 @@ function createNapiModule(options) {
5055
5909
  }
5056
5910
  var count = reference.unref();
5057
5911
  if (result) {
5912
+ result >>>= 0;
5058
5913
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5059
5914
  HEAP_DATA_VIEW.setUint32(result, count, true);
5060
5915
  }
@@ -5071,6 +5926,7 @@ function createNapiModule(options) {
5071
5926
  return envObject.setLastError(1);
5072
5927
  var reference = emnapiCtx.refStore.get(ref);
5073
5928
  var handleId = reference.get(envObject);
5929
+ result >>>= 0;
5074
5930
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5075
5931
  HEAP_DATA_VIEW.setUint32(result, handleId, true);
5076
5932
  return envObject.clearLastError();
@@ -5081,6 +5937,8 @@ function createNapiModule(options) {
5081
5937
  var envObject = emnapiCtx.envStore.get(env);
5082
5938
  if (!fun)
5083
5939
  return envObject.setLastError(1);
5940
+ fun >>>= 0;
5941
+ arg >>>= 0;
5084
5942
  emnapiCtx.addCleanupHook(envObject, fun, arg);
5085
5943
  return 0;
5086
5944
  }
@@ -5090,6 +5948,8 @@ function createNapiModule(options) {
5090
5948
  var envObject = emnapiCtx.envStore.get(env);
5091
5949
  if (!fun)
5092
5950
  return envObject.setLastError(1);
5951
+ fun >>>= 0;
5952
+ arg >>>= 0;
5093
5953
  emnapiCtx.removeCleanupHook(envObject, fun, arg);
5094
5954
  return 0;
5095
5955
  }
@@ -5150,8 +6010,10 @@ function createNapiModule(options) {
5150
6010
  var p = new Promise(function (resolve, reject) {
5151
6011
  var deferredObject = emnapiCtx.createDeferred({ resolve: resolve, reject: reject });
5152
6012
  deferredObjectId = deferredObject.id;
6013
+ deferred >>>= 0;
5153
6014
  HEAP_DATA_VIEW.setUint32(deferred, deferredObjectId, true);
5154
6015
  });
6016
+ promise >>>= 0;
5155
6017
  value = emnapiCtx.addToCurrentScope(p).id;
5156
6018
  HEAP_DATA_VIEW.setUint32(promise, value, true);
5157
6019
  return envObject.getReturnStatus();
@@ -5219,6 +6081,7 @@ function createNapiModule(options) {
5219
6081
  if (!is_promise)
5220
6082
  return envObject.setLastError(1);
5221
6083
  var h = emnapiCtx.handleStore.get(value);
6084
+ is_promise >>>= 0;
5222
6085
  var r = h.isPromise() ? 1 : 0;
5223
6086
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5224
6087
  HEAP_DATA_VIEW.setInt8(is_promise, r, true);
@@ -5362,6 +6225,7 @@ function createNapiModule(options) {
5362
6225
  }
5363
6226
  }
5364
6227
  }
6228
+ result >>>= 0;
5365
6229
  value = emnapiCtx.addToCurrentScope(ret).id;
5366
6230
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5367
6231
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -5433,6 +6297,7 @@ function createNapiModule(options) {
5433
6297
  catch (_) {
5434
6298
  return envObject.setLastError(2);
5435
6299
  }
6300
+ result >>>= 0;
5436
6301
  r = (emnapiCtx.handleStore.get(key).value in v) ? 1 : 0;
5437
6302
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5438
6303
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -5472,6 +6337,7 @@ function createNapiModule(options) {
5472
6337
  catch (_) {
5473
6338
  return envObject.setLastError(2);
5474
6339
  }
6340
+ result >>>= 0;
5475
6341
  value = envObject.ensureHandleId(v[emnapiCtx.handleStore.get(key).value]);
5476
6342
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5477
6343
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -5515,6 +6381,7 @@ function createNapiModule(options) {
5515
6381
  }
5516
6382
  }
5517
6383
  if (result) {
6384
+ result >>>= 0;
5518
6385
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5519
6386
  HEAP_DATA_VIEW.setInt8(result, r ? 1 : 0, true);
5520
6387
  }
@@ -5559,6 +6426,7 @@ function createNapiModule(options) {
5559
6426
  return envObject.setLastError(4);
5560
6427
  }
5561
6428
  r = Object.prototype.hasOwnProperty.call(v, emnapiCtx.handleStore.get(key).value);
6429
+ result >>>= 0;
5562
6430
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5563
6431
  HEAP_DATA_VIEW.setInt8(result, r ? 1 : 0, true);
5564
6432
  return envObject.getReturnStatus();
@@ -5590,6 +6458,7 @@ function createNapiModule(options) {
5590
6458
  if (!cname) {
5591
6459
  return envObject.setLastError(1);
5592
6460
  }
6461
+ cname >>>= 0;
5593
6462
  emnapiCtx.handleStore.get(object).value[emnapiString.UTF8ToString(cname, -1)] = emnapiCtx.handleStore.get(value).value;
5594
6463
  return envObject.getReturnStatus();
5595
6464
  }
@@ -5628,6 +6497,8 @@ function createNapiModule(options) {
5628
6497
  catch (_) {
5629
6498
  return envObject.setLastError(2);
5630
6499
  }
6500
+ utf8name >>>= 0;
6501
+ result >>>= 0;
5631
6502
  r = emnapiString.UTF8ToString(utf8name, -1) in v;
5632
6503
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5633
6504
  HEAP_DATA_VIEW.setInt8(result, r ? 1 : 0, true);
@@ -5668,6 +6539,8 @@ function createNapiModule(options) {
5668
6539
  catch (_) {
5669
6540
  return envObject.setLastError(2);
5670
6541
  }
6542
+ utf8name >>>= 0;
6543
+ result >>>= 0;
5671
6544
  value = envObject.ensureHandleId(v[emnapiString.UTF8ToString(utf8name, -1)]);
5672
6545
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5673
6546
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -5732,6 +6605,7 @@ function createNapiModule(options) {
5732
6605
  catch (_) {
5733
6606
  return envObject.setLastError(2);
5734
6607
  }
6608
+ result >>>= 0;
5735
6609
  r = ((index >>> 0) in v) ? 1 : 0;
5736
6610
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5737
6611
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -5769,6 +6643,7 @@ function createNapiModule(options) {
5769
6643
  catch (_) {
5770
6644
  return envObject.setLastError(2);
5771
6645
  }
6646
+ result >>>= 0;
5772
6647
  value = envObject.ensureHandleId(v[index >>> 0]);
5773
6648
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5774
6649
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -5809,6 +6684,7 @@ function createNapiModule(options) {
5809
6684
  }
5810
6685
  }
5811
6686
  if (result) {
6687
+ result >>>= 0;
5812
6688
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5813
6689
  HEAP_DATA_VIEW.setInt8(result, r ? 1 : 0, true);
5814
6690
  }
@@ -5831,6 +6707,8 @@ function createNapiModule(options) {
5831
6707
  return envObject.setLastError(envObject.moduleApiVersion >= 10 ? 23 : 10);
5832
6708
  envObject.clearLastError();
5833
6709
  try {
6710
+ properties >>>= 0;
6711
+ property_count >>>= 0;
5834
6712
  property_count = property_count >>> 0;
5835
6713
  if (property_count > 0) {
5836
6714
  if (!properties)
@@ -5854,6 +6732,7 @@ function createNapiModule(options) {
5854
6732
  var setter = HEAP_DATA_VIEW.getUint32(propPtr + 16, true);
5855
6733
  var value = HEAP_DATA_VIEW.getUint32(propPtr + 20, true);
5856
6734
  attributes = HEAP_DATA_VIEW.getInt32(propPtr + 24, true);
6735
+ attributes >>>= 0;
5857
6736
  var data = HEAP_DATA_VIEW.getUint32(propPtr + 28, true);
5858
6737
  if (utf8Name) {
5859
6738
  propertyName = emnapiString.UTF8ToString(utf8Name, -1);
@@ -5971,6 +6850,7 @@ function createNapiModule(options) {
5971
6850
  }
5972
6851
  var g = emnapiCtx.handleStore.get(5).value;
5973
6852
  var ret = g.eval(v8Script.value);
6853
+ result >>>= 0;
5974
6854
  value = envObject.ensureHandleId(ret);
5975
6855
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
5976
6856
  HEAP_DATA_VIEW.setUint32(result, value, true);
@@ -5996,6 +6876,7 @@ function createNapiModule(options) {
5996
6876
  if (!result)
5997
6877
  return envObject.setLastError(1);
5998
6878
  var v = emnapiCtx.handleStore.get(value);
6879
+ result >>>= 0;
5999
6880
  var r;
6000
6881
  if (v.isNumber()) {
6001
6882
  r = 3;
@@ -6051,6 +6932,7 @@ function createNapiModule(options) {
6051
6932
  if (!result)
6052
6933
  return envObject.setLastError(1);
6053
6934
  var handle = emnapiCtx.handleStore.get(value);
6935
+ result >>>= 0;
6054
6936
  v = handle.value ? 4 : 3;
6055
6937
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6056
6938
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -6081,6 +6963,7 @@ function createNapiModule(options) {
6081
6963
  if (handle.isBigInt()) {
6082
6964
  throw new TypeError('Cannot convert a BigInt value to a number');
6083
6965
  }
6966
+ result >>>= 0;
6084
6967
  v = emnapiCtx.addToCurrentScope(Number(handle.value)).id;
6085
6968
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6086
6969
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -6111,6 +6994,7 @@ function createNapiModule(options) {
6111
6994
  if (handle.value == null) {
6112
6995
  throw new TypeError('Cannot convert undefined or null to object');
6113
6996
  }
6997
+ result >>>= 0;
6114
6998
  v = envObject.ensureHandleId(Object(handle.value));
6115
6999
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6116
7000
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -6141,6 +7025,7 @@ function createNapiModule(options) {
6141
7025
  if (handle.isSymbol()) {
6142
7026
  throw new TypeError('Cannot convert a Symbol value to a string');
6143
7027
  }
7028
+ result >>>= 0;
6144
7029
  v = emnapiCtx.addToCurrentScope(String(handle.value)).id;
6145
7030
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6146
7031
  HEAP_DATA_VIEW.setUint32(result, v, true);
@@ -6169,6 +7054,7 @@ function createNapiModule(options) {
6169
7054
  return envObject.setLastError(1);
6170
7055
  if (!constructor)
6171
7056
  return envObject.setLastError(1);
7057
+ result >>>= 0;
6172
7058
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6173
7059
  HEAP_DATA_VIEW.setInt8(result, 0, true);
6174
7060
  var ctor = emnapiCtx.handleStore.get(constructor);
@@ -6196,6 +7082,7 @@ function createNapiModule(options) {
6196
7082
  if (!result)
6197
7083
  return envObject.setLastError(1);
6198
7084
  var h = emnapiCtx.handleStore.get(value);
7085
+ result >>>= 0;
6199
7086
  var r = h.isArray() ? 1 : 0;
6200
7087
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6201
7088
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6211,11 +7098,31 @@ function createNapiModule(options) {
6211
7098
  if (!result)
6212
7099
  return envObject.setLastError(1);
6213
7100
  var h = emnapiCtx.handleStore.get(value);
7101
+ result >>>= 0;
6214
7102
  var r = h.isArrayBuffer() ? 1 : 0;
6215
7103
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6216
7104
  HEAP_DATA_VIEW.setInt8(result, r, true);
6217
7105
  return envObject.clearLastError();
6218
7106
  }
7107
+ function node_api_is_sharedarraybuffer(env, value, result) {
7108
+ if (!env)
7109
+ return 1;
7110
+ var envObject = emnapiCtx.envStore.get(env);
7111
+ envObject.checkGCAccess();
7112
+ if (!value)
7113
+ return envObject.setLastError(1);
7114
+ if (!result)
7115
+ return envObject.setLastError(1);
7116
+ var h = emnapiCtx.handleStore.get(value);
7117
+ result >>>= 0;
7118
+ var r = ((typeof SharedArrayBuffer === 'function' && h.value instanceof SharedArrayBuffer) ||
7119
+ (Object.prototype.toString.call(h.value) === '[object SharedArrayBuffer]'))
7120
+ ? 1
7121
+ : 0;
7122
+ var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
7123
+ HEAP_DATA_VIEW.setInt8(result, r, true);
7124
+ return envObject.clearLastError();
7125
+ }
6219
7126
  function napi_is_date(env, value, result) {
6220
7127
  if (!env)
6221
7128
  return 1;
@@ -6226,6 +7133,7 @@ function createNapiModule(options) {
6226
7133
  if (!result)
6227
7134
  return envObject.setLastError(1);
6228
7135
  var h = emnapiCtx.handleStore.get(value);
7136
+ result >>>= 0;
6229
7137
  var r = h.isDate() ? 1 : 0;
6230
7138
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6231
7139
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6241,6 +7149,7 @@ function createNapiModule(options) {
6241
7149
  if (!result)
6242
7150
  return envObject.setLastError(1);
6243
7151
  var val = emnapiCtx.handleStore.get(value).value;
7152
+ result >>>= 0;
6244
7153
  var r = (val instanceof Error) ? 1 : 0;
6245
7154
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6246
7155
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6256,6 +7165,7 @@ function createNapiModule(options) {
6256
7165
  if (!result)
6257
7166
  return envObject.setLastError(1);
6258
7167
  var h = emnapiCtx.handleStore.get(value);
7168
+ result >>>= 0;
6259
7169
  var r = h.isTypedArray() ? 1 : 0;
6260
7170
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6261
7171
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6271,6 +7181,7 @@ function createNapiModule(options) {
6271
7181
  if (!result)
6272
7182
  return envObject.setLastError(1);
6273
7183
  var h = emnapiCtx.handleStore.get(value);
7184
+ result >>>= 0;
6274
7185
  var r = h.isBuffer(emnapiCtx.feature.Buffer) ? 1 : 0;
6275
7186
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6276
7187
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6286,6 +7197,7 @@ function createNapiModule(options) {
6286
7197
  if (!result)
6287
7198
  return envObject.setLastError(1);
6288
7199
  var h = emnapiCtx.handleStore.get(value);
7200
+ result >>>= 0;
6289
7201
  var r = h.isDataView() ? 1 : 0;
6290
7202
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6291
7203
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6311,6 +7223,7 @@ function createNapiModule(options) {
6311
7223
  return envObject.setLastError(1);
6312
7224
  var lv = emnapiCtx.handleStore.get(lhs).value;
6313
7225
  var rv = emnapiCtx.handleStore.get(rhs).value;
7226
+ result >>>= 0;
6314
7227
  r = (lv === rv) ? 1 : 0;
6315
7228
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6316
7229
  HEAP_DATA_VIEW.setInt8(result, r, true);
@@ -6361,6 +7274,7 @@ function createNapiModule(options) {
6361
7274
  if (!result)
6362
7275
  return envObject.setLastError(1);
6363
7276
  var h = emnapiCtx.handleStore.get(arraybuffer);
7277
+ result >>>= 0;
6364
7278
  var HEAP_DATA_VIEW = new DataView(wasmMemory.buffer);
6365
7279
  if (h.isArrayBuffer() && h.value.byteLength === 0) {
6366
7280
  try {
@@ -6396,7 +7310,8 @@ function createNapiModule(options) {
6396
7310
  napi_is_error: napi_is_error,
6397
7311
  napi_is_typedarray: napi_is_typedarray,
6398
7312
  napi_strict_equals: napi_strict_equals,
6399
- napi_typeof: napi_typeof
7313
+ napi_typeof: napi_typeof,
7314
+ node_api_is_sharedarraybuffer: node_api_is_sharedarraybuffer
6400
7315
  });
6401
7316
  function napi_get_version(env, result) {
6402
7317
  if (!env)
@@ -6415,11 +7330,13 @@ function createNapiModule(options) {
6415
7330
  });
6416
7331
  emnapiAWST.init();
6417
7332
  emnapiExternalMemory.init();
7333
+ emnapiExternalSAB.init();
6418
7334
  emnapiString.init();
6419
7335
  emnapiTSFN.init();
6420
7336
  PThread.init();
6421
7337
  napiModule.emnapi.syncMemory = $emnapiSyncMemory;
6422
7338
  napiModule.emnapi.getMemoryAddress = $emnapiGetMemoryAddress;
7339
+ napiModule.emnapi.acquireExternalSharedArrayBuffer = $emnapiAcquireExternalSharedArrayBuffer;
6423
7340
  function addImports(mod) {
6424
7341
  var keys = Object.keys(mod);
6425
7342
  for (var i = 0; i < keys.length; ++i) {
@@ -6674,12 +7591,7 @@ class MessageHandler extends wasiThreads.ThreadMessageHandler {
6674
7591
  try {
6675
7592
  if (type === 'async-worker-init') {
6676
7593
  this.handleAfterLoad(e, () => {
6677
- this.napiModule.initWorker(payload.arg);
6678
- });
6679
- }
6680
- else if (type === 'async-work-execute') {
6681
- this.handleAfterLoad(e, () => {
6682
- this.napiModule.executeAsyncWork(payload.work);
7594
+ this.napiModule.initWorker(payload.arg, payload.func);
6683
7595
  });
6684
7596
  }
6685
7597
  }
@@ -6690,7 +7602,7 @@ class MessageHandler extends wasiThreads.ThreadMessageHandler {
6690
7602
  }
6691
7603
  }
6692
7604
 
6693
- const version = "1.5.0";
7605
+ const version = "1.11.1";
6694
7606
 
6695
7607
  exports.MessageHandler = MessageHandler;
6696
7608
  exports.createNapiModule = createNapiModule;