emnapi 1.2.0 → 1.3.1

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 (44) hide show
  1. package/CMakeLists.txt +13 -3
  2. package/README.md +7 -18
  3. package/common.gypi +1 -0
  4. package/dist/library_napi.js +130 -41
  5. package/emnapi.gyp +4 -0
  6. package/include/node/emnapi.h +2 -2
  7. package/include/node/js_native_api.h +30 -25
  8. package/include/node/js_native_api_types.h +13 -9
  9. package/include/node/node_api.h +25 -13
  10. package/include/node/uv/threadpool.h +1 -1
  11. package/include/node/uv/unix.h +4 -0
  12. package/include/node/uv.h +49 -6
  13. package/index.js +1 -0
  14. package/lib/wasm32/libemnapi.a +0 -0
  15. package/lib/wasm32-emscripten/libemnapi-mt.a +0 -0
  16. package/lib/wasm32-emscripten/libemnapi.a +0 -0
  17. package/lib/wasm32-wasi/libemnapi.a +0 -0
  18. package/lib/wasm32-wasi-threads/libemnapi-basic-mt.a +0 -0
  19. package/lib/wasm32-wasi-threads/libemnapi-basic.a +0 -0
  20. package/lib/wasm32-wasi-threads/libemnapi-mt.a +0 -0
  21. package/lib/wasm32-wasi-threads/libemnapi.a +0 -0
  22. package/lib/wasm32-wasip1/libemnapi.a +0 -0
  23. package/lib/wasm32-wasip1-threads/libemnapi-basic-mt.a +0 -0
  24. package/lib/wasm32-wasip1-threads/libemnapi-basic.a +0 -0
  25. package/lib/wasm32-wasip1-threads/libemnapi-mt.a +0 -0
  26. package/lib/wasm32-wasip1-threads/libemnapi.a +0 -0
  27. package/lib/wasm64-emscripten/libemnapi-mt.a +0 -0
  28. package/lib/wasm64-emscripten/libemnapi.a +0 -0
  29. package/package.json +1 -1
  30. package/src/async_cleanup_hook.c +1 -1
  31. package/src/async_work.c +2 -2
  32. package/src/emnapi_internal.h +2 -2
  33. package/src/js_native_api.c +2 -1
  34. package/src/node_api.c +5 -5
  35. package/src/threadsafe_function.c +20 -21
  36. package/src/uv/queue.h +68 -86
  37. package/src/uv/threadpool.c +58 -40
  38. package/src/uv/unix/async.c +67 -64
  39. package/src/uv/unix/core.c +36 -1
  40. package/src/uv/unix/internal.h +54 -0
  41. package/src/uv/unix/loop.c +40 -4
  42. package/src/uv/unix/posix-hrtime.c +40 -0
  43. package/src/uv/uv-common.c +123 -7
  44. package/src/uv/uv-common.h +137 -9
package/CMakeLists.txt CHANGED
@@ -33,6 +33,7 @@ set(UV_SRC
33
33
  "${CMAKE_CURRENT_SOURCE_DIR}/src/uv/uv-common.c"
34
34
  "${CMAKE_CURRENT_SOURCE_DIR}/src/uv/threadpool.c"
35
35
  "${CMAKE_CURRENT_SOURCE_DIR}/src/uv/unix/loop.c"
36
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/uv/unix/posix-hrtime.c"
36
37
  "${CMAKE_CURRENT_SOURCE_DIR}/src/uv/unix/thread.c"
37
38
  "${CMAKE_CURRENT_SOURCE_DIR}/src/uv/unix/async.c"
38
39
  "${CMAKE_CURRENT_SOURCE_DIR}/src/uv/unix/core.c"
@@ -139,7 +140,10 @@ endif()
139
140
 
140
141
  add_library(${EMNAPI_BASIC_TARGET_NAME} STATIC ${ENAPI_BASIC_SRC})
141
142
  target_include_directories(${EMNAPI_BASIC_TARGET_NAME} PUBLIC ${EMNAPI_INCLUDE})
142
- target_compile_definitions(${EMNAPI_BASIC_TARGET_NAME} PUBLIC ${EMNAPI_DEFINES})
143
+ target_compile_definitions(${EMNAPI_BASIC_TARGET_NAME}
144
+ PUBLIC ${EMNAPI_DEFINES}
145
+ PRIVATE "EMNAPI_DISABLE_UV"
146
+ )
143
147
  if(IS_EMSCRIPTEN)
144
148
  set_target_properties(${EMNAPI_BASIC_TARGET_NAME} PROPERTIES INTERFACE_LINK_DEPENDS ${EMNAPI_JS_LIB})
145
149
  target_link_options(${EMNAPI_BASIC_TARGET_NAME} INTERFACE "--js-library=${EMNAPI_JS_LIB}")
@@ -159,7 +163,10 @@ if(EMNAPI_BUILD_BASIC_MT)
159
163
  )
160
164
  target_compile_options(${EMNAPI_BASIC_MT_TARGET_NAME} PUBLIC "-matomics" "-mbulk-memory")
161
165
  target_include_directories(${EMNAPI_BASIC_MT_TARGET_NAME} PUBLIC ${EMNAPI_INCLUDE})
162
- target_compile_definitions(${EMNAPI_BASIC_MT_TARGET_NAME} PUBLIC ${EMNAPI_DEFINES})
166
+ target_compile_definitions(${EMNAPI_BASIC_MT_TARGET_NAME}
167
+ PUBLIC ${EMNAPI_DEFINES}
168
+ PRIVATE "EMNAPI_DISABLE_UV"
169
+ )
163
170
 
164
171
  if(IS_EMSCRIPTEN)
165
172
  set_target_properties(${EMNAPI_BASIC_MT_TARGET_NAME} PROPERTIES INTERFACE_LINK_DEPENDS ${EMNAPI_JS_LIB})
@@ -175,7 +182,10 @@ endif()
175
182
 
176
183
  if(EMNAPI_BUILD_MT)
177
184
  add_library(${EMNAPI_MT_TARGET_NAME} STATIC ${EMNAPI_SRC} ${UV_SRC})
178
- target_compile_options(${EMNAPI_MT_TARGET_NAME} PRIVATE ${EMNAPI_MT_CFLAGS})
185
+ target_compile_options(${EMNAPI_MT_TARGET_NAME}
186
+ PUBLIC "-matomics" "-mbulk-memory"
187
+ PRIVATE ${EMNAPI_MT_CFLAGS}
188
+ )
179
189
  target_include_directories(${EMNAPI_MT_TARGET_NAME} PUBLIC ${EMNAPI_INCLUDE})
180
190
  target_compile_definitions(${EMNAPI_MT_TARGET_NAME} PUBLIC ${EMNAPI_DEFINES})
181
191
  if(IS_EMSCRIPTEN)
package/README.md CHANGED
@@ -45,6 +45,7 @@ You will need to install:
45
45
  - npm `>= v8`
46
46
  - Emscripten `>= v3.1.9` / wasi-sdk / LLVM clang with wasm support
47
47
  - (Optional) CMake `>= v3.13`
48
+ - (Optional) node-gyp `>= v10.2.0`
48
49
  - (Optional) ninja
49
50
  - (Optional) make
50
51
  - (Optional) [node-addon-api](https://github.com/nodejs/node-addon-api) `>= 6.1.0`
@@ -68,6 +69,9 @@ emcc -v
68
69
 
69
70
  cmake --version
70
71
 
72
+ # if you use node-gyp
73
+ node-gyp --version
74
+
71
75
  # if you use ninja
72
76
  ninja --version
73
77
 
@@ -629,15 +633,9 @@ Output code can run in recent version modern browsers and Node.js latest LTS. IE
629
633
 
630
634
  ### Using node-gyp (Experimental)
631
635
 
632
- Currently node-gyp works on Linux only and don't support static library linking in cross-compiling.
633
- There are related PRs to try to make node-gyp work fine.
634
-
635
- - https://github.com/nodejs/gyp-next/pull/222
636
- - https://github.com/nodejs/gyp-next/pull/240
637
- - https://github.com/nodejs/node-gyp/pull/2974
636
+ Require node-gyp `>= 10.2.0`
638
637
 
639
- If you experienced issues on Windows or macOS, please check the PRs for upstream changes detail and see
640
- [emnapi-node-gyp-test](https://github.com/toyobayashi/emnapi-node-gyp-test) for examples.
638
+ See [emnapi-node-gyp-test](https://github.com/toyobayashi/emnapi-node-gyp-test) for examples.
641
639
 
642
640
  - Variables
643
641
 
@@ -685,19 +683,10 @@ declare var emnapi_manual_linking: 0 | 1
685
683
  ["OS == 'emscripten'", {
686
684
  "product_extension": "js", # required
687
685
 
688
- # Windows and Linux
689
686
  "cflags": [],
690
687
  "cflags_c": [],
691
688
  "cflags_cc": [],
692
- "ldflags": [],
693
-
694
- # macOS uses following config
695
- 'xcode_settings': {
696
- "WARNING_CFLAGS": [], # cflags
697
- "OTHER_CFLAGS": [], # cflags_c
698
- "OTHER_CPLUSPLUSFLAGS": [], # cflags_cc
699
- "OTHER_LDFLAGS": [] # ldflags
700
- }
689
+ "ldflags": []
701
690
  }],
702
691
  ["OS == 'wasi'", {
703
692
  # ...
package/common.gypi CHANGED
@@ -312,6 +312,7 @@
312
312
  'src/uv/uv-common.c',
313
313
  'src/uv/threadpool.c',
314
314
  'src/uv/unix/loop.c',
315
+ 'src/uv/unix/posix-hrtime.c',
315
316
  'src/uv/unix/thread.c',
316
317
  'src/uv/unix/async.c',
317
318
  'src/uv/unix/core.c',
@@ -958,7 +958,7 @@ var emnapiExternalMemory = {
958
958
  var _a;
959
959
  var info = {
960
960
  address: 0,
961
- ownership: 0 /* Ownership.kRuntime */,
961
+ ownership: 0 /* ReferenceOwnership.kRuntime */,
962
962
  runtimeAllocated: 0
963
963
  };
964
964
  if (arrayBuffer === wasmMemory.buffer) {
@@ -971,7 +971,7 @@ var emnapiExternalMemory = {
971
971
  cachedInfo.address = 0;
972
972
  return cachedInfo;
973
973
  }
974
- if (shouldCopy && cachedInfo.ownership === 0 /* Ownership.kRuntime */ && cachedInfo.runtimeAllocated === 1) {
974
+ if (shouldCopy && cachedInfo.ownership === 0 /* ReferenceOwnership.kRuntime */ && cachedInfo.runtimeAllocated === 1) {
975
975
  new Uint8Array(wasmMemory.buffer).set(new Uint8Array(arrayBuffer), cachedInfo.address);
976
976
  }
977
977
  return cachedInfo;
@@ -987,7 +987,7 @@ var emnapiExternalMemory = {
987
987
  throw new Error('Out of memory');
988
988
  new Uint8Array(wasmMemory.buffer).set(new Uint8Array(arrayBuffer), pointer);
989
989
  info.address = pointer;
990
- info.ownership = emnapiExternalMemory.registry ? 0 /* Ownership.kRuntime */ : 1 /* Ownership.kUserland */;
990
+ info.ownership = emnapiExternalMemory.registry ? 0 /* ReferenceOwnership.kRuntime */ : 1 /* ReferenceOwnership.kUserland */;
991
991
  info.runtimeAllocated = 1;
992
992
  emnapiExternalMemory.table.set(arrayBuffer, info);
993
993
  (_a = emnapiExternalMemory.registry) === null || _a === void 0 ? void 0 : _a.register(arrayBuffer, pointer);
@@ -1000,7 +1000,7 @@ var emnapiExternalMemory = {
1000
1000
  Ctor: view.constructor,
1001
1001
  address: view.byteOffset,
1002
1002
  length: view instanceof DataView ? view.byteLength : view.length,
1003
- ownership: 1 /* Ownership.kUserland */,
1003
+ ownership: 1 /* ReferenceOwnership.kUserland */,
1004
1004
  runtimeAllocated: 0
1005
1005
  });
1006
1006
  }
@@ -1031,7 +1031,7 @@ var emnapiExternalMemory = {
1031
1031
  var _a = emnapiExternalMemory.wasmMemoryViewTable.get(view), address_1 = _a.address, ownership_1 = _a.ownership, runtimeAllocated_1 = _a.runtimeAllocated;
1032
1032
  return { address: address_1, ownership: ownership_1, runtimeAllocated: runtimeAllocated_1, view: view };
1033
1033
  }
1034
- return { address: view.byteOffset, ownership: 1 /* Ownership.kUserland */, runtimeAllocated: 0, view: view };
1034
+ return { address: view.byteOffset, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0, view: view };
1035
1035
  }
1036
1036
  var _b = emnapiExternalMemory.getArrayBufferPointer(view.buffer, shouldCopy), address = _b.address, ownership = _b.ownership, runtimeAllocated = _b.runtimeAllocated;
1037
1037
  return { address: address === 0 ? 0 : (address + view.byteOffset), ownership: ownership, runtimeAllocated: runtimeAllocated, view: view };
@@ -1237,6 +1237,9 @@ function _napi_get_buffer_info(env, buffer, data, length) {
1237
1237
  var handle = emnapiCtx.handleStore.get(buffer);
1238
1238
  if (!handle.isBuffer(emnapiCtx.feature.Buffer))
1239
1239
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
1240
+ if (handle.isDataView()) {
1241
+ return _napi_get_dataview_info(env, buffer, length, data, 0, 0);
1242
+ }
1240
1243
  return _napi_get_typedarray_info(env, buffer, 0, length, data, 0, 0);
1241
1244
  }
1242
1245
  /**
@@ -1867,6 +1870,18 @@ function _node_api_create_external_string_latin1(env, str, length, finalize_call
1867
1870
  function _node_api_create_external_string_utf16(env, str, length, finalize_callback, finalize_hint, result, copied) {
1868
1871
  return emnapiString.newExternalString(env, str, length, finalize_callback, finalize_hint, result, copied, _napi_create_string_utf16, undefined);
1869
1872
  }
1873
+ /**
1874
+ * @__sig ipppp
1875
+ */
1876
+ function _node_api_create_property_key_latin1(env, str, length, result) {
1877
+ return _napi_create_string_latin1(env, str, length, result);
1878
+ }
1879
+ /**
1880
+ * @__sig ipppp
1881
+ */
1882
+ function _node_api_create_property_key_utf8(env, str, length, result) {
1883
+ return _napi_create_string_utf8(env, str, length, result);
1884
+ }
1870
1885
  /**
1871
1886
  * @__sig ipppp
1872
1887
  */
@@ -2128,13 +2143,16 @@ function emnapiWrap(env, js_object, native_object, finalize_cb, finalize_hint, r
2128
2143
  if (result) {
2129
2144
  if (!finalize_cb)
2130
2145
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
2131
- reference = emnapiCtx.createReference(envObject, handle.id, 0, 1 /* Ownership.kUserland */, finalize_cb, native_object, finalize_hint);
2146
+ reference = emnapiCtx.createReferenceWithFinalizer(envObject, handle.id, 0, 1 /* ReferenceOwnership.kUserland */, finalize_cb, native_object, finalize_hint);
2132
2147
  {{{ from64('result') }}};
2133
2148
  referenceId = reference.id;
2134
2149
  {{{ makeSetValue('result', 0, 'referenceId', '*') }}};
2135
2150
  }
2151
+ else if (finalize_cb) {
2152
+ reference = emnapiCtx.createReferenceWithFinalizer(envObject, handle.id, 0, 0 /* ReferenceOwnership.kRuntime */, finalize_cb, native_object, finalize_hint);
2153
+ }
2136
2154
  else {
2137
- reference = emnapiCtx.createReference(envObject, handle.id, 0, 0 /* Ownership.kRuntime */, finalize_cb, native_object, !finalize_cb ? finalize_cb : finalize_hint);
2155
+ reference = emnapiCtx.createReferenceWithData(envObject, handle.id, 0, 0 /* ReferenceOwnership.kRuntime */, native_object);
2138
2156
  }
2139
2157
  envObject.getObjectBinding(handle.value).wrapped = reference.id;
2140
2158
  return envObject.getReturnStatus();
@@ -2181,7 +2199,7 @@ function emnapiUnwrap(env, js_object, result, action) {
2181
2199
  }
2182
2200
  if (action === 1 /* UnwrapAction.RemoveWrap */) {
2183
2201
  binding.wrapped = 0;
2184
- if (ref.ownership() === 1 /* Ownership.kUserland */) {
2202
+ if (ref.ownership() === 1 /* ReferenceOwnership.kUserland */) {
2185
2203
  // When the wrap is been removed, the finalizer should be reset.
2186
2204
  ref.resetFinalizer();
2187
2205
  }
@@ -2406,11 +2424,11 @@ function _napi_add_finalizer(env, js_object, finalize_data, finalize_cb, finaliz
2406
2424
  return envObject.setLastError(handleResult.status);
2407
2425
  }
2408
2426
  var handle = handleResult.handle;
2409
- var ownership = !result ? 0 /* Ownership.kRuntime */ : 1 /* Ownership.kUserland */;
2427
+ var ownership = !result ? 0 /* ReferenceOwnership.kRuntime */ : 1 /* ReferenceOwnership.kUserland */;
2410
2428
  {{{ from64('finalize_data') }}};
2411
2429
  {{{ from64('finalize_cb') }}};
2412
2430
  {{{ from64('finalize_hint') }}};
2413
- var reference = emnapiCtx.createReference(envObject, handle.id, 0, ownership, finalize_cb, finalize_data, finalize_hint);
2431
+ var reference = emnapiCtx.createReferenceWithFinalizer(envObject, handle.id, 0, ownership, finalize_cb, finalize_data, finalize_hint);
2414
2432
  if (result) {
2415
2433
  {{{ from64('result') }}};
2416
2434
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -2467,46 +2485,46 @@ function _emnapi_create_memory_view(env, typedarray_type, external_data, byte_le
2467
2485
  var viewDescriptor = void 0;
2468
2486
  switch (typedarray_type) {
2469
2487
  case 0 /* emnapi_memory_view_type.emnapi_int8_array */:
2470
- viewDescriptor = { Ctor: Int8Array, address: external_data, length: byte_length, ownership: 1 /* Ownership.kUserland */, runtimeAllocated: 0 };
2488
+ viewDescriptor = { Ctor: Int8Array, address: external_data, length: byte_length, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
2471
2489
  break;
2472
2490
  case 1 /* emnapi_memory_view_type.emnapi_uint8_array */:
2473
- viewDescriptor = { Ctor: Uint8Array, address: external_data, length: byte_length, ownership: 1 /* Ownership.kUserland */, runtimeAllocated: 0 };
2491
+ viewDescriptor = { Ctor: Uint8Array, address: external_data, length: byte_length, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
2474
2492
  break;
2475
2493
  case 2 /* emnapi_memory_view_type.emnapi_uint8_clamped_array */:
2476
- viewDescriptor = { Ctor: Uint8ClampedArray, address: external_data, length: byte_length, ownership: 1 /* Ownership.kUserland */, runtimeAllocated: 0 };
2494
+ viewDescriptor = { Ctor: Uint8ClampedArray, address: external_data, length: byte_length, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
2477
2495
  break;
2478
2496
  case 3 /* emnapi_memory_view_type.emnapi_int16_array */:
2479
- viewDescriptor = { Ctor: Int16Array, address: external_data, length: byte_length >> 1, ownership: 1 /* Ownership.kUserland */, runtimeAllocated: 0 };
2497
+ viewDescriptor = { Ctor: Int16Array, address: external_data, length: byte_length >> 1, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
2480
2498
  break;
2481
2499
  case 4 /* emnapi_memory_view_type.emnapi_uint16_array */:
2482
- viewDescriptor = { Ctor: Uint16Array, address: external_data, length: byte_length >> 1, ownership: 1 /* Ownership.kUserland */, runtimeAllocated: 0 };
2500
+ viewDescriptor = { Ctor: Uint16Array, address: external_data, length: byte_length >> 1, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
2483
2501
  break;
2484
2502
  case 5 /* emnapi_memory_view_type.emnapi_int32_array */:
2485
- viewDescriptor = { Ctor: Int32Array, address: external_data, length: byte_length >> 2, ownership: 1 /* Ownership.kUserland */, runtimeAllocated: 0 };
2503
+ viewDescriptor = { Ctor: Int32Array, address: external_data, length: byte_length >> 2, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
2486
2504
  break;
2487
2505
  case 6 /* emnapi_memory_view_type.emnapi_uint32_array */:
2488
- viewDescriptor = { Ctor: Uint32Array, address: external_data, length: byte_length >> 2, ownership: 1 /* Ownership.kUserland */, runtimeAllocated: 0 };
2506
+ viewDescriptor = { Ctor: Uint32Array, address: external_data, length: byte_length >> 2, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
2489
2507
  break;
2490
2508
  case 7 /* emnapi_memory_view_type.emnapi_float32_array */:
2491
- viewDescriptor = { Ctor: Float32Array, address: external_data, length: byte_length >> 2, ownership: 1 /* Ownership.kUserland */, runtimeAllocated: 0 };
2509
+ viewDescriptor = { Ctor: Float32Array, address: external_data, length: byte_length >> 2, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
2492
2510
  break;
2493
2511
  case 8 /* emnapi_memory_view_type.emnapi_float64_array */:
2494
- viewDescriptor = { Ctor: Float64Array, address: external_data, length: byte_length >> 3, ownership: 1 /* Ownership.kUserland */, runtimeAllocated: 0 };
2512
+ viewDescriptor = { Ctor: Float64Array, address: external_data, length: byte_length >> 3, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
2495
2513
  break;
2496
2514
  case 9 /* emnapi_memory_view_type.emnapi_bigint64_array */:
2497
- viewDescriptor = { Ctor: BigInt64Array, address: external_data, length: byte_length >> 3, ownership: 1 /* Ownership.kUserland */, runtimeAllocated: 0 };
2515
+ viewDescriptor = { Ctor: BigInt64Array, address: external_data, length: byte_length >> 3, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
2498
2516
  break;
2499
2517
  case 10 /* emnapi_memory_view_type.emnapi_biguint64_array */:
2500
- viewDescriptor = { Ctor: BigUint64Array, address: external_data, length: byte_length >> 3, ownership: 1 /* Ownership.kUserland */, runtimeAllocated: 0 };
2518
+ viewDescriptor = { Ctor: BigUint64Array, address: external_data, length: byte_length >> 3, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
2501
2519
  break;
2502
2520
  case -1 /* emnapi_memory_view_type.emnapi_data_view */:
2503
- viewDescriptor = { Ctor: DataView, address: external_data, length: byte_length, ownership: 1 /* Ownership.kUserland */, runtimeAllocated: 0 };
2521
+ viewDescriptor = { Ctor: DataView, address: external_data, length: byte_length, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
2504
2522
  break;
2505
2523
  case -2 /* emnapi_memory_view_type.emnapi_buffer */: {
2506
2524
  if (!emnapiCtx.feature.Buffer) {
2507
2525
  throw emnapiCtx.createNotSupportBufferError('emnapi_create_memory_view', '');
2508
2526
  }
2509
- viewDescriptor = { Ctor: emnapiCtx.feature.Buffer, address: external_data, length: byte_length, ownership: 1 /* Ownership.kUserland */, runtimeAllocated: 0 };
2527
+ viewDescriptor = { Ctor: emnapiCtx.feature.Buffer, address: external_data, length: byte_length, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
2510
2528
  break;
2511
2529
  }
2512
2530
  default: return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
@@ -2869,7 +2887,7 @@ function _napi_create_external(env, data, finalize_cb, finalize_hint, result) {
2869
2887
  }
2870
2888
  var externalHandle = emnapiCtx.getCurrentScope().addExternal(envObject, data);
2871
2889
  if (finalize_cb) {
2872
- emnapiCtx.createReference(envObject, externalHandle.id, 0, 0 /* Ownership.kRuntime */, finalize_cb, data, finalize_hint);
2890
+ emnapiCtx.createReferenceWithFinalizer(envObject, externalHandle.id, 0, 0 /* ReferenceOwnership.kRuntime */, finalize_cb, data, finalize_hint);
2873
2891
  }
2874
2892
  {{{ from64('result') }}};
2875
2893
  value = externalHandle.id;
@@ -2927,7 +2945,7 @@ function _napi_create_external_arraybuffer(env, external_data, byte_length, fina
2927
2945
  u8arr.set(new Uint8Array(wasmMemory.buffer).subarray(external_data, external_data + byte_length));
2928
2946
  emnapiExternalMemory.table.set(arrayBuffer, {
2929
2947
  address: external_data,
2930
- ownership: 1 /* Ownership.kUserland */,
2948
+ ownership: 1 /* ReferenceOwnership.kUserland */,
2931
2949
  runtimeAllocated: 0
2932
2950
  });
2933
2951
  }
@@ -3020,10 +3038,10 @@ function _napi_create_typedarray(env, type, length, arraybuffer, byte_offset, re
3020
3038
  if (!result)
3021
3039
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
3022
3040
  var handle = emnapiCtx.handleStore.get(arraybuffer);
3023
- var buffer = handle.value;
3024
- if (!(buffer instanceof ArrayBuffer)) {
3041
+ if (!handle.isArrayBuffer()) {
3025
3042
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
3026
3043
  }
3044
+ var buffer = handle.value;
3027
3045
  {{{ from64('byte_offset') }}};
3028
3046
  {{{ from64('length') }}};
3029
3047
  var createTypedArray = function (envObject, Type, size_of_element, buffer, byte_offset, length) {
@@ -3051,7 +3069,7 @@ function _napi_create_typedarray(env, type, length, arraybuffer, byte_offset, re
3051
3069
  Ctor: Type,
3052
3070
  address: byte_offset,
3053
3071
  length: length,
3054
- ownership: 1 /* Ownership.kUserland */,
3072
+ ownership: 1 /* ReferenceOwnership.kUserland */,
3055
3073
  runtimeAllocated: 0
3056
3074
  });
3057
3075
  }
@@ -3138,7 +3156,7 @@ function _napi_create_buffer(env, size, data, result) {
3138
3156
  Ctor: Buffer,
3139
3157
  address: pointer,
3140
3158
  length: size,
3141
- ownership: emnapiExternalMemory.registry ? 0 /* Ownership.kRuntime */ : 1 /* Ownership.kUserland */,
3159
+ ownership: emnapiExternalMemory.registry ? 0 /* ReferenceOwnership.kRuntime */ : 1 /* ReferenceOwnership.kUserland */,
3142
3160
  runtimeAllocated: 1
3143
3161
  };
3144
3162
  emnapiExternalMemory.wasmMemoryViewTable.set(buffer_1, viewDescriptor);
@@ -3199,6 +3217,68 @@ function _napi_create_buffer_copy(env, length, data, result_data, result) {
3199
3217
  function _napi_create_external_buffer(env, length, data, finalize_cb, finalize_hint, result) {
3200
3218
  return _emnapi_create_memory_view(env, -2 /* emnapi_memory_view_type.emnapi_buffer */, data, length, finalize_cb, finalize_hint, result);
3201
3219
  }
3220
+ /**
3221
+ * @__sig ippppp
3222
+ */
3223
+ function _node_api_create_buffer_from_arraybuffer(env, arraybuffer, byte_offset, byte_length, result) {
3224
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
3225
+ var value;
3226
+ if (!env)
3227
+ return 1 /* napi_status.napi_invalid_arg */;
3228
+ // @ts-expect-error
3229
+ var envObject = emnapiCtx.envStore.get(env);
3230
+ envObject.checkGCAccess();
3231
+ if (!envObject.tryCatch.isEmpty())
3232
+ return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
3233
+ if (!envObject.canCallIntoJs())
3234
+ return envObject.setLastError(envObject.moduleApiVersion === 2147483647 /* Version.NAPI_VERSION_EXPERIMENTAL */ ? 23 /* napi_status.napi_cannot_run_js */ : 10 /* napi_status.napi_pending_exception */);
3235
+ envObject.clearLastError();
3236
+ try {
3237
+ if (!arraybuffer)
3238
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
3239
+ if (!result)
3240
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
3241
+ {{{ from64('byte_offset') }}};
3242
+ {{{ from64('byte_length') }}};
3243
+ byte_offset = byte_offset >>> 0;
3244
+ byte_length = byte_length >>> 0;
3245
+ var handle = emnapiCtx.handleStore.get(arraybuffer);
3246
+ if (!handle.isArrayBuffer()) {
3247
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
3248
+ }
3249
+ var buffer = handle.value;
3250
+ if ((byte_length + byte_offset) > buffer.byteLength) {
3251
+ var err = new RangeError('The byte offset + length is out of range');
3252
+ err.code = 'ERR_OUT_OF_RANGE';
3253
+ throw err;
3254
+ }
3255
+ var Buffer = emnapiCtx.feature.Buffer;
3256
+ if (!Buffer) {
3257
+ throw emnapiCtx.createNotSupportBufferError('node_api_create_buffer_from_arraybuffer', '');
3258
+ }
3259
+ var out = Buffer.from(buffer, byte_offset, byte_length);
3260
+ if (buffer === wasmMemory.buffer) {
3261
+ if (!emnapiExternalMemory.wasmMemoryViewTable.has(out)) {
3262
+ emnapiExternalMemory.wasmMemoryViewTable.set(out, {
3263
+ Ctor: Buffer,
3264
+ address: byte_offset,
3265
+ length: byte_length,
3266
+ ownership: 1 /* ReferenceOwnership.kUserland */,
3267
+ runtimeAllocated: 0
3268
+ });
3269
+ }
3270
+ }
3271
+ {{{ from64('result') }}};
3272
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
3273
+ value = emnapiCtx.addToCurrentScope(out).id;
3274
+ {{{ makeSetValue('result', 0, 'value', '*') }}};
3275
+ return envObject.getReturnStatus();
3276
+ }
3277
+ catch (err) {
3278
+ envObject.tryCatch.setError(err);
3279
+ return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
3280
+ }
3281
+ }
3202
3282
  /**
3203
3283
  * @__sig ippppp
3204
3284
  */
@@ -3225,10 +3305,10 @@ function _napi_create_dataview(env, byte_length, arraybuffer, byte_offset, resul
3225
3305
  byte_length = byte_length >>> 0;
3226
3306
  byte_offset = byte_offset >>> 0;
3227
3307
  var handle = emnapiCtx.handleStore.get(arraybuffer);
3228
- var buffer = handle.value;
3229
- if (!(buffer instanceof ArrayBuffer)) {
3308
+ if (!handle.isArrayBuffer()) {
3230
3309
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
3231
3310
  }
3311
+ var buffer = handle.value;
3232
3312
  if ((byte_length + byte_offset) > buffer.byteLength) {
3233
3313
  var err = new RangeError('byte_offset + byte_length should be less than or equal to the size in bytes of the array passed in');
3234
3314
  err.code = 'ERR_NAPI_INVALID_DATAVIEW_ARGS';
@@ -3241,7 +3321,7 @@ function _napi_create_dataview(env, byte_length, arraybuffer, byte_offset, resul
3241
3321
  Ctor: DataView,
3242
3322
  address: byte_offset,
3243
3323
  length: byte_length,
3244
- ownership: 1 /* Ownership.kUserland */,
3324
+ ownership: 1 /* ReferenceOwnership.kUserland */,
3245
3325
  runtimeAllocated: 0
3246
3326
  });
3247
3327
  }
@@ -4032,7 +4112,7 @@ function _napi_create_reference(env, value, initial_refcount, result) {
4032
4112
  }
4033
4113
  }
4034
4114
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
4035
- var ref = emnapiCtx.createReference(envObject, handle.id, initial_refcount >>> 0, 1 /* Ownership.kUserland */);
4115
+ var ref = emnapiCtx.createReference(envObject, handle.id, initial_refcount >>> 0, 1 /* ReferenceOwnership.kUserland */);
4036
4116
  {{{ from64('result') }}};
4037
4117
  {{{ makeSetValue('result', 0, 'ref.id', '*') }}};
4038
4118
  return envObject.clearLastError();
@@ -4076,7 +4156,7 @@ function _napi_reference_unref(env, ref, result) {
4076
4156
  if (!ref)
4077
4157
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4078
4158
  var reference = emnapiCtx.refStore.get(ref);
4079
- var refcount = reference.refCount();
4159
+ var refcount = reference.refcount();
4080
4160
  if (refcount === 0) {
4081
4161
  return envObject.setLastError(9 /* napi_status.napi_generic_failure */);
4082
4162
  }
@@ -4101,7 +4181,7 @@ function _napi_get_reference_value(env, ref, result) {
4101
4181
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4102
4182
  var reference = emnapiCtx.refStore.get(ref);
4103
4183
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
4104
- var handleId = reference.get();
4184
+ var handleId = reference.get(envObject);
4105
4185
  {{{ from64('result') }}};
4106
4186
  {{{ makeSetValue('result', 0, 'handleId', '*') }}};
4107
4187
  return envObject.clearLastError();
@@ -5911,7 +5991,7 @@ function _napi_create_threadsafe_function(env, func, async_resource, async_resou
5911
5991
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5912
5992
  }
5913
5993
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
5914
- ref = emnapiCtx.createReference(envObject, func, 1, 1 /* Ownership.kUserland */).id;
5994
+ ref = emnapiCtx.createReference(envObject, func, 1, 1 /* ReferenceOwnership.kUserland */).id;
5915
5995
  }
5916
5996
  var asyncResourceObject;
5917
5997
  if (async_resource) {
@@ -5937,7 +6017,7 @@ function _napi_create_threadsafe_function(env, func, async_resource, async_resou
5937
6017
  if (!tsfn)
5938
6018
  return envObject.setLastError(9 /* napi_status.napi_generic_failure */);
5939
6019
  new Uint8Array(wasmMemory.buffer).subarray(tsfn, tsfn + sizeofTSFN).fill(0);
5940
- var resourceRef = emnapiCtx.createReference(envObject, resource, 1, 1 /* Ownership.kUserland */);
6020
+ var resourceRef = emnapiCtx.createReference(envObject, resource, 1, 1 /* ReferenceOwnership.kUserland */);
5941
6021
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
5942
6022
  var resource_ = resourceRef.id;
5943
6023
  {{{ makeSetValue('tsfn', 0, 'resource_', '*') }}};
@@ -6834,18 +6914,18 @@ function _napi_get_version(env, result) {
6834
6914
  napi_get_boolean: _napi_get_boolean,
6835
6915
  napi_get_boolean__deps: ["$emnapiCtx"],
6836
6916
  napi_get_boolean__sig: "ipip",
6917
+ napi_get_dataview_info: _napi_get_dataview_info,
6918
+ napi_get_dataview_info__deps: ["$emnapiCtx", "$emnapiExternalMemory"],
6919
+ napi_get_dataview_info__sig: "ipppppp",
6837
6920
  napi_get_typedarray_info: _napi_get_typedarray_info,
6838
6921
  napi_get_typedarray_info__deps: ["$emnapiCtx", "$emnapiExternalMemory"],
6839
6922
  napi_get_typedarray_info__sig: "ippppppp",
6840
6923
  napi_get_buffer_info: _napi_get_buffer_info,
6841
- napi_get_buffer_info__deps: ["$emnapiCtx", "napi_get_typedarray_info"],
6924
+ napi_get_buffer_info__deps: ["$emnapiCtx", "napi_get_dataview_info", "napi_get_typedarray_info"],
6842
6925
  napi_get_buffer_info__sig: "ipppp",
6843
6926
  napi_get_cb_info: _napi_get_cb_info,
6844
6927
  napi_get_cb_info__deps: ["$emnapiCtx"],
6845
6928
  napi_get_cb_info__sig: "ipppppp",
6846
- napi_get_dataview_info: _napi_get_dataview_info,
6847
- napi_get_dataview_info__deps: ["$emnapiCtx", "$emnapiExternalMemory"],
6848
- napi_get_dataview_info__sig: "ipppppp",
6849
6929
  napi_get_date_value: _napi_get_date_value,
6850
6930
  napi_get_date_value__deps: ["$emnapiCtx"],
6851
6931
  napi_get_date_value__sig: "ippp",
@@ -7068,15 +7148,24 @@ function _napi_get_version(env, result) {
7068
7148
  napi_wrap: _napi_wrap,
7069
7149
  napi_wrap__deps: ["$emnapiWrap"],
7070
7150
  napi_wrap__sig: "ipppppp",
7151
+ node_api_create_buffer_from_arraybuffer: _node_api_create_buffer_from_arraybuffer,
7152
+ node_api_create_buffer_from_arraybuffer__deps: ["$emnapiCtx", "$emnapiExternalMemory"],
7153
+ node_api_create_buffer_from_arraybuffer__sig: "ippppp",
7071
7154
  node_api_create_external_string_latin1: _node_api_create_external_string_latin1,
7072
7155
  node_api_create_external_string_latin1__deps: ["$emnapiString", "napi_create_string_latin1"],
7073
7156
  node_api_create_external_string_latin1__sig: "ippppppp",
7074
7157
  node_api_create_external_string_utf16: _node_api_create_external_string_utf16,
7075
7158
  node_api_create_external_string_utf16__deps: ["$emnapiString", "napi_create_string_utf16"],
7076
7159
  node_api_create_external_string_utf16__sig: "ippppppp",
7160
+ node_api_create_property_key_latin1: _node_api_create_property_key_latin1,
7161
+ node_api_create_property_key_latin1__deps: ["napi_create_string_latin1"],
7162
+ node_api_create_property_key_latin1__sig: "ipppp",
7077
7163
  node_api_create_property_key_utf16: _node_api_create_property_key_utf16,
7078
7164
  node_api_create_property_key_utf16__deps: ["napi_create_string_utf16"],
7079
7165
  node_api_create_property_key_utf16__sig: "ipppp",
7166
+ node_api_create_property_key_utf8: _node_api_create_property_key_utf8,
7167
+ node_api_create_property_key_utf8__deps: ["napi_create_string_utf8"],
7168
+ node_api_create_property_key_utf8__sig: "ipppp",
7080
7169
  node_api_create_syntax_error: _node_api_create_syntax_error,
7081
7170
  node_api_create_syntax_error__deps: ["$emnapiCtx"],
7082
7171
  node_api_create_syntax_error__sig: "ipppp",
package/emnapi.gyp CHANGED
@@ -47,6 +47,9 @@
47
47
  {
48
48
  'target_name': 'emnapi_basic',
49
49
  'type': 'static_library',
50
+ 'defines': [
51
+ 'EMNAPI_DISABLE_UV'
52
+ ],
50
53
  'sources': [
51
54
  'src/js_native_api.c',
52
55
  'src/node_api.c',
@@ -99,6 +102,7 @@
99
102
  'src/uv/uv-common.c',
100
103
  'src/uv/threadpool.c',
101
104
  'src/uv/unix/loop.c',
105
+ 'src/uv/unix/posix-hrtime.c',
102
106
  'src/uv/unix/thread.c',
103
107
  'src/uv/unix/async.c',
104
108
  'src/uv/unix/core.c',
@@ -6,8 +6,8 @@
6
6
  #include "emnapi_common.h"
7
7
 
8
8
  #define EMNAPI_MAJOR_VERSION 1
9
- #define EMNAPI_MINOR_VERSION 2
10
- #define EMNAPI_PATCH_VERSION 0
9
+ #define EMNAPI_MINOR_VERSION 3
10
+ #define EMNAPI_PATCH_VERSION 1
11
11
 
12
12
  typedef enum {
13
13
  emnapi_runtime,