@@ -3204,62 +3204,69 @@ napi_status NAPI_CDECL napi_create_typedarray(napi_env env,
32043204 CHECK_ARG (env, result);
32053205
32063206 v8::Local<v8::Value> value = v8impl::V8LocalValueFromJsValue (arraybuffer);
3207- RETURN_STATUS_IF_FALSE (env, value->IsArrayBuffer (), napi_invalid_arg);
3207+ auto create_typedarray = [&](auto buffer) -> napi_status {
3208+ v8::Local<v8::TypedArray> typedArray;
3209+
3210+ switch (type) {
3211+ case napi_int8_array:
3212+ CREATE_TYPED_ARRAY (
3213+ env, Int8Array, 1 , buffer, byte_offset, length, typedArray);
3214+ break ;
3215+ case napi_uint8_array:
3216+ CREATE_TYPED_ARRAY (
3217+ env, Uint8Array, 1 , buffer, byte_offset, length, typedArray);
3218+ break ;
3219+ case napi_uint8_clamped_array:
3220+ CREATE_TYPED_ARRAY (
3221+ env, Uint8ClampedArray, 1 , buffer, byte_offset, length, typedArray);
3222+ break ;
3223+ case napi_int16_array:
3224+ CREATE_TYPED_ARRAY (
3225+ env, Int16Array, 2 , buffer, byte_offset, length, typedArray);
3226+ break ;
3227+ case napi_uint16_array:
3228+ CREATE_TYPED_ARRAY (
3229+ env, Uint16Array, 2 , buffer, byte_offset, length, typedArray);
3230+ break ;
3231+ case napi_int32_array:
3232+ CREATE_TYPED_ARRAY (
3233+ env, Int32Array, 4 , buffer, byte_offset, length, typedArray);
3234+ break ;
3235+ case napi_uint32_array:
3236+ CREATE_TYPED_ARRAY (
3237+ env, Uint32Array, 4 , buffer, byte_offset, length, typedArray);
3238+ break ;
3239+ case napi_float32_array:
3240+ CREATE_TYPED_ARRAY (
3241+ env, Float32Array, 4 , buffer, byte_offset, length, typedArray);
3242+ break ;
3243+ case napi_float64_array:
3244+ CREATE_TYPED_ARRAY (
3245+ env, Float64Array, 8 , buffer, byte_offset, length, typedArray);
3246+ break ;
3247+ case napi_bigint64_array:
3248+ CREATE_TYPED_ARRAY (
3249+ env, BigInt64Array, 8 , buffer, byte_offset, length, typedArray);
3250+ break ;
3251+ case napi_biguint64_array:
3252+ CREATE_TYPED_ARRAY (
3253+ env, BigUint64Array, 8 , buffer, byte_offset, length, typedArray);
3254+ break ;
3255+ default :
3256+ return napi_set_last_error (env, napi_invalid_arg);
3257+ }
32083258
3209- v8::Local<v8::ArrayBuffer> buffer = value.As <v8::ArrayBuffer>();
3210- v8::Local<v8::TypedArray> typedArray;
3259+ *result = v8impl::JsValueFromV8LocalValue (typedArray);
3260+ return GET_RETURN_STATUS (env);
3261+ };
32113262
3212- switch (type) {
3213- case napi_int8_array:
3214- CREATE_TYPED_ARRAY (
3215- env, Int8Array, 1 , buffer, byte_offset, length, typedArray);
3216- break ;
3217- case napi_uint8_array:
3218- CREATE_TYPED_ARRAY (
3219- env, Uint8Array, 1 , buffer, byte_offset, length, typedArray);
3220- break ;
3221- case napi_uint8_clamped_array:
3222- CREATE_TYPED_ARRAY (
3223- env, Uint8ClampedArray, 1 , buffer, byte_offset, length, typedArray);
3224- break ;
3225- case napi_int16_array:
3226- CREATE_TYPED_ARRAY (
3227- env, Int16Array, 2 , buffer, byte_offset, length, typedArray);
3228- break ;
3229- case napi_uint16_array:
3230- CREATE_TYPED_ARRAY (
3231- env, Uint16Array, 2 , buffer, byte_offset, length, typedArray);
3232- break ;
3233- case napi_int32_array:
3234- CREATE_TYPED_ARRAY (
3235- env, Int32Array, 4 , buffer, byte_offset, length, typedArray);
3236- break ;
3237- case napi_uint32_array:
3238- CREATE_TYPED_ARRAY (
3239- env, Uint32Array, 4 , buffer, byte_offset, length, typedArray);
3240- break ;
3241- case napi_float32_array:
3242- CREATE_TYPED_ARRAY (
3243- env, Float32Array, 4 , buffer, byte_offset, length, typedArray);
3244- break ;
3245- case napi_float64_array:
3246- CREATE_TYPED_ARRAY (
3247- env, Float64Array, 8 , buffer, byte_offset, length, typedArray);
3248- break ;
3249- case napi_bigint64_array:
3250- CREATE_TYPED_ARRAY (
3251- env, BigInt64Array, 8 , buffer, byte_offset, length, typedArray);
3252- break ;
3253- case napi_biguint64_array:
3254- CREATE_TYPED_ARRAY (
3255- env, BigUint64Array, 8 , buffer, byte_offset, length, typedArray);
3256- break ;
3257- default :
3258- return napi_set_last_error (env, napi_invalid_arg);
3263+ if (value->IsArrayBuffer ()) {
3264+ return create_typedarray (value.As <v8::ArrayBuffer>());
3265+ } else if (value->IsSharedArrayBuffer ()) {
3266+ return create_typedarray (value.As <v8::SharedArrayBuffer>());
3267+ } else {
3268+ return napi_set_last_error (env, napi_invalid_arg);
32593269 }
3260-
3261- *result = v8impl::JsValueFromV8LocalValue (typedArray);
3262- return GET_RETURN_STATUS (env);
32633270}
32643271
32653272napi_status NAPI_CDECL napi_get_typedarray_info (napi_env env,
0 commit comments