n-api: add napi_delete_element() · nodejs/node@6316c9a · GitHub
Skip to content

Commit 6316c9a

Browse files
cjihrigaddaleax
authored andcommitted
n-api: add napi_delete_element()
Refs: #13924 PR-URL: #13949 Reviewed-By: Jason Ginchereau <jasongin@microsoft.com>
1 parent 79ead79 commit 6316c9a

5 files changed

Lines changed: 93 additions & 0 deletions

File tree

doc/api/n-api.md

Lines changed: 22 additions & 0 deletions

src/node_api.cc

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1139,6 +1139,26 @@ napi_status napi_get_element(napi_env env,
11391139
return GET_RETURN_STATUS(env);
11401140
}
11411141

1142+
napi_status napi_delete_element(napi_env env,
1143+
napi_value object,
1144+
uint32_t index,
1145+
bool* result) {
1146+
NAPI_PREAMBLE(env);
1147+
1148+
v8::Isolate* isolate = env->isolate;
1149+
v8::Local<v8::Context> context = isolate->GetCurrentContext();
1150+
v8::Local<v8::Object> obj;
1151+
1152+
CHECK_TO_OBJECT(env, context, obj, object);
1153+
v8::Maybe<bool> delete_maybe = obj->Delete(context, index);
1154+
CHECK_MAYBE_NOTHING(env, delete_maybe, napi_generic_failure);
1155+
1156+
if (result != NULL)
1157+
*result = delete_maybe.FromMaybe(false);
1158+
1159+
return GET_RETURN_STATUS(env);
1160+
}
1161+
11421162
napi_status napi_define_properties(napi_env env,
11431163
napi_value object,
11441164
size_t property_count,

src/node_api.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,10 @@ NAPI_EXTERN napi_status napi_get_element(napi_env env,
250250
napi_value object,
251251
uint32_t index,
252252
napi_value* result);
253+
NAPI_EXTERN napi_status napi_delete_element(napi_env env,
254+
napi_value object,
255+
uint32_t index,
256+
bool* result);
253257
NAPI_EXTERN napi_status
254258
napi_define_properties(napi_env env,
255259
napi_value object,

test/addons-napi/test_array/test.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,14 @@ assert(test_array.NewWithLength(0) instanceof Array);
4747
assert(test_array.NewWithLength(1) instanceof Array);
4848
// check max allowed length for an array 2^32 -1
4949
assert(test_array.NewWithLength(4294967295) instanceof Array);
50+
51+
{
52+
// Verify that array elements can be deleted.
53+
const arr = ['a', 'b', 'c', 'd'];
54+
55+
assert.strictEqual(arr.length, 4);
56+
assert.strictEqual(2 in arr, true);
57+
assert.strictEqual(test_array.TestDeleteElement(arr, 2), true);
58+
assert.strictEqual(arr.length, 4);
59+
assert.strictEqual(2 in arr, false);
60+
}

test/addons-napi/test_array/test_array.c

Lines changed: 36 additions & 0 deletions

0 commit comments

Comments
 (0)