Skip to content

Commit 4fad89e

Browse files
authored
[Backport] feat: add support for Float16Array (#191)
1 parent 8ed5b33 commit 4fad89e

12 files changed

Lines changed: 474 additions & 15 deletions

File tree

.eslintignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@ node_modules
1414
/packages/**/test/**/expected
1515
/packages/**/test/**/rollup/src
1616
/out
17+
packages/emnapi/src/typings/lib.esnext.float16.d.ts

.github/workflows/main.yml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ env:
3737
WASI_SDK_PATH: './wasi-sdk-27.0'
3838
EM_VERSION: '4.0.1'
3939
EM_CACHE_FOLDER: 'emsdk-cache'
40-
NODE_VERSION: '22.16.0'
40+
NODE_VERSION: '24.11.1'
4141

4242
jobs:
4343
build:
@@ -91,7 +91,7 @@ jobs:
9191
9292
- uses: actions/setup-node@v3
9393
with:
94-
node-version: ${{ matrix.target == 'wasm64-unknown-emscripten' && '24.5.0' || env.NODE_VERSION }}
94+
node-version: ${{ env.NODE_VERSION }}
9595
registry-url: 'https://registry.npmjs.org'
9696

9797
- name: NPM Install
@@ -234,8 +234,7 @@ jobs:
234234
with:
235235
node-version: ${{ env.NODE_VERSION }}
236236
registry-url: 'https://registry.npmjs.org'
237-
- name: Update npm
238-
run: npm install -g npm@latest
237+
239238
- name: NPM Install
240239
shell: bash
241240
run: |

packages/core/src/util.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export function load (wasmInput: MaybePromise<InputType>, imports?: WebAssembly.
3737

3838
// BufferSource
3939
if (wasmInput instanceof ArrayBuffer || ArrayBuffer.isView(wasmInput)) {
40-
return _WebAssembly.instantiate(wasmInput, imports)
40+
return _WebAssembly.instantiate(wasmInput as BufferSource, imports)
4141
}
4242

4343
// WebAssembly.Module
@@ -87,7 +87,7 @@ export function loadSync (wasmInput: InputType, imports?: WebAssembly.Imports):
8787
let module
8888

8989
if ((wasmInput instanceof ArrayBuffer) || ArrayBuffer.isView(wasmInput)) {
90-
module = new _WebAssembly.Module(wasmInput)
90+
module = new _WebAssembly.Module(wasmInput as BufferSource)
9191
} else if (wasmInput instanceof WebAssembly.Module) {
9292
module = wasmInput
9393
} else {

packages/emnapi/include/node/emnapi.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ typedef enum {
2626
emnapi_float64_array,
2727
emnapi_bigint64_array,
2828
emnapi_biguint64_array,
29+
emnapi_float16_array,
2930
emnapi_data_view = -1,
3031
emnapi_buffer = -2,
3132
} emnapi_memory_view_type;

packages/emnapi/include/node/js_native_api_types.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ typedef enum {
133133
napi_float64_array,
134134
napi_bigint64_array,
135135
napi_biguint64_array,
136+
#define NODE_API_HAS_FLOAT16_ARRAY
137+
napi_float16_array,
136138
} napi_typedarray_type;
137139

138140
typedef enum {

packages/emnapi/src/emnapi.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,12 @@ export function emnapi_create_memory_view (
8080
case emnapi_memory_view_type.emnapi_data_view:
8181
viewDescriptor = { Ctor: DataView, address: external_data, length: byte_length, ownership: ReferenceOwnership.kUserland, runtimeAllocated: 0 }
8282
break
83+
case emnapi_memory_view_type.emnapi_float16_array:
84+
if (typeof Float16Array !== 'function') {
85+
return envObject.setLastError(napi_status.napi_invalid_arg)
86+
}
87+
viewDescriptor = { Ctor: Float16Array, address: external_data as number, length: byte_length >> 1, ownership: ReferenceOwnership.kUserland, runtimeAllocated: 0 }
88+
break
8389
case emnapi_memory_view_type.emnapi_buffer: {
8490
if (!emnapiCtx.feature.Buffer) {
8591
throw emnapiCtx.createNotSupportBufferError('emnapi_create_memory_view', '')
@@ -132,7 +138,7 @@ export function emnapi_is_node_binding_available (): int {
132138
return emnapiNodeBinding ? 1 : 0
133139
}
134140

135-
export function $emnapiSyncMemory<T extends ArrayBuffer | ArrayBufferView> (
141+
export function $emnapiSyncMemory<T extends ArrayBufferLike | ArrayBufferView> (
136142
js_to_wasm: boolean,
137143
arrayBufferOrView: T,
138144
offset?: number,

0 commit comments

Comments
 (0)