napi_value TestGetElement(napi_env env, napi_callback_info info) { size_t argc = 2; napi_value args[2]; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); NAPI_ASSERT(env, argc >= 2, "Wrong number of arguments"); napi_valuetype valuetype0; NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0)); NAPI_ASSERT(env, valuetype0 == napi_object, "Wrong type of arguments. Expects an array as first argument."); napi_valuetype valuetype1; NAPI_CALL(env, napi_typeof(env, args[1], &valuetype1)); NAPI_ASSERT(env, valuetype1 == napi_number, "Wrong type of arguments. Expects an integer as second argument."); napi_value array = args[0]; int32_t index; NAPI_CALL(env, napi_get_value_int32(env, args[1], &index)); NAPI_ASSERT(env, index >= 0, "Invalid index. Expects a positive integer."); bool isarray; NAPI_CALL(env, napi_is_array(env, array, &isarray)); if (!isarray) { return NULL; } uint32_t length; NAPI_CALL(env, napi_get_array_length(env, array, &length)); NAPI_ASSERT(env, ((uint32_t)index < length), "Index out of bounds!"); napi_value ret; NAPI_CALL(env, napi_get_element(env, array, index, &ret)); return ret; }
napi_value TestHasElement(napi_env env, napi_callback_info info) { size_t argc = 2; napi_value args[2]; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); NAPI_ASSERT(env, argc >= 2, "Wrong number of arguments"); napi_valuetype valuetype0; NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0)); NAPI_ASSERT(env, valuetype0 == napi_object, "Wrong type of arguments. Expects an array as first argument."); napi_valuetype valuetype1; NAPI_CALL(env, napi_typeof(env, args[1], &valuetype1)); NAPI_ASSERT(env, valuetype1 == napi_number, "Wrong type of arguments. Expects an integer as second argument."); napi_value array = args[0]; int32_t index; NAPI_CALL(env, napi_get_value_int32(env, args[1], &index)); bool isarray; NAPI_CALL(env, napi_is_array(env, array, &isarray)); if (!isarray) { return NULL; } bool has_element; NAPI_CALL(env, napi_has_element(env, array, index, &has_element)); napi_value ret; NAPI_CALL(env, napi_get_boolean(env, has_element, &ret)); return ret; }
void Test(napi_env env, napi_callback_info info) { napi_status status; size_t argc; status = napi_get_cb_args_length(env, info, &argc); if (status != napi_ok) return; if (argc < 2) { napi_throw_type_error(env, "Wrong number of arguments"); return; } napi_value args[2]; status = napi_get_cb_args(env, info, args, 2); if (status != napi_ok) return; napi_valuetype valuetype0; status = napi_typeof(env, args[0], &valuetype0); if (status != napi_ok) return; if (valuetype0 != napi_object) { napi_throw_type_error( env, "Wrong type of argments. Expects an array as first argument."); return; } napi_valuetype valuetype1; status = napi_typeof(env, args[1], &valuetype1); if (status != napi_ok) return; if (valuetype1 != napi_number) { napi_throw_type_error( env, "Wrong type of argments. Expects an integer as second argument."); return; } napi_value array = args[0]; int index; status = napi_get_value_int32(env, args[1], &index); if (status != napi_ok) return; bool isarray; status = napi_is_array(env, array, &isarray); if (status != napi_ok) return; if (isarray) { uint32_t size; status = napi_get_array_length(env, array, &size); if (status != napi_ok) return; if (index >= (int)(size)) { napi_value str; status = napi_create_string_utf8(env, "Index out of bound!", -1, &str); if (status != napi_ok) return; status = napi_set_return_value(env, info, str); if (status != napi_ok) return; } else if (index < 0) { napi_throw_type_error(env, "Invalid index. Expects a positive integer."); } else { napi_value ret; status = napi_get_element(env, array, index, &ret); if (status != napi_ok) return; status = napi_set_return_value(env, info, ret); if (status != napi_ok) return; } } }