| 
2 | 2 | #include <string.h>  | 
3 | 3 | #include "../common.h"  | 
4 | 4 | 
 
  | 
5 |  | -napi_value Test(napi_env env, napi_callback_info info) {  | 
 | 5 | +napi_value TestGetElement(napi_env env, napi_callback_info info) {  | 
6 | 6 |   size_t argc = 2;  | 
7 | 7 |   napi_value args[2];  | 
8 | 8 |   NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));  | 
@@ -37,17 +37,49 @@ napi_value Test(napi_env env, napi_callback_info info) {  | 
37 | 37 |   uint32_t length;  | 
38 | 38 |   NAPI_CALL(env, napi_get_array_length(env, array, &length));  | 
39 | 39 | 
 
  | 
40 |  | -  if ((uint32_t)index >= length) {  | 
41 |  | -    napi_value str;  | 
42 |  | -    const char* str_val = "Index out of bound!";  | 
43 |  | -    size_t str_len = strlen(str_val);  | 
44 |  | -    NAPI_CALL(env, napi_create_string_utf8(env, str_val, str_len, &str));  | 
 | 40 | +  NAPI_ASSERT(env, ((uint32_t)index < length), "Index out of bounds!");  | 
45 | 41 | 
 
  | 
46 |  | -    return str;  | 
 | 42 | +  napi_value ret;  | 
 | 43 | +  NAPI_CALL(env, napi_get_element(env, array, index, &ret));  | 
 | 44 | + | 
 | 45 | +  return ret;  | 
 | 46 | +}  | 
 | 47 | + | 
 | 48 | +napi_value TestHasElement(napi_env env, napi_callback_info info) {  | 
 | 49 | +  size_t argc = 2;  | 
 | 50 | +  napi_value args[2];  | 
 | 51 | +  NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));  | 
 | 52 | + | 
 | 53 | +  NAPI_ASSERT(env, argc >= 2, "Wrong number of arguments");  | 
 | 54 | + | 
 | 55 | +  napi_valuetype valuetype0;  | 
 | 56 | +  NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));  | 
 | 57 | + | 
 | 58 | +  NAPI_ASSERT(env, valuetype0 == napi_object,  | 
 | 59 | +    "Wrong type of arguments. Expects an array as first argument.");  | 
 | 60 | + | 
 | 61 | +  napi_valuetype valuetype1;  | 
 | 62 | +  NAPI_CALL(env, napi_typeof(env, args[1], &valuetype1));  | 
 | 63 | + | 
 | 64 | +  NAPI_ASSERT(env, valuetype1 == napi_number,  | 
 | 65 | +    "Wrong type of arguments. Expects an integer as second argument.");  | 
 | 66 | + | 
 | 67 | +  napi_value array = args[0];  | 
 | 68 | +  int32_t index;  | 
 | 69 | +  NAPI_CALL(env, napi_get_value_int32(env, args[1], &index));  | 
 | 70 | + | 
 | 71 | +  bool isarray;  | 
 | 72 | +  NAPI_CALL(env, napi_is_array(env, array, &isarray));  | 
 | 73 | + | 
 | 74 | +  if (!isarray) {  | 
 | 75 | +    return NULL;  | 
47 | 76 |   }  | 
48 | 77 | 
 
  | 
 | 78 | +  bool has_element;  | 
 | 79 | +  NAPI_CALL(env, napi_has_element(env, array, index, &has_element));  | 
 | 80 | + | 
49 | 81 |   napi_value ret;  | 
50 |  | -  NAPI_CALL(env, napi_get_element(env, array, index, &ret));  | 
 | 82 | +  NAPI_CALL(env, napi_get_boolean(env, has_element, &ret));  | 
51 | 83 | 
 
  | 
52 | 84 |   return ret;  | 
53 | 85 | }  | 
@@ -80,10 +112,34 @@ napi_value New(napi_env env, napi_callback_info info) {  | 
80 | 112 |   return ret;  | 
81 | 113 | }  | 
82 | 114 | 
 
  | 
 | 115 | +napi_value NewWithLength(napi_env env, napi_callback_info info) {  | 
 | 116 | +  size_t argc = 1;  | 
 | 117 | +  napi_value args[1];  | 
 | 118 | +  NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));  | 
 | 119 | + | 
 | 120 | +  NAPI_ASSERT(env, argc >= 1, "Wrong number of arguments");  | 
 | 121 | + | 
 | 122 | +  napi_valuetype valuetype0;  | 
 | 123 | +  NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));  | 
 | 124 | + | 
 | 125 | +  NAPI_ASSERT(env, valuetype0 == napi_number,  | 
 | 126 | +    "Wrong type of arguments. Expects an integer the first argument.");  | 
 | 127 | + | 
 | 128 | +  int32_t array_length;  | 
 | 129 | +  NAPI_CALL(env, napi_get_value_int32(env, args[0], &array_length));  | 
 | 130 | + | 
 | 131 | +  napi_value ret;  | 
 | 132 | +  NAPI_CALL(env, napi_create_array_with_length(env, array_length, &ret));  | 
 | 133 | + | 
 | 134 | +  return ret;  | 
 | 135 | +}  | 
 | 136 | + | 
83 | 137 | void Init(napi_env env, napi_value exports, napi_value module, void* priv) {  | 
84 | 138 |   napi_property_descriptor descriptors[] = {  | 
85 |  | -    DECLARE_NAPI_PROPERTY("Test", Test),  | 
 | 139 | +    DECLARE_NAPI_PROPERTY("TestGetElement", TestGetElement),  | 
 | 140 | +    DECLARE_NAPI_PROPERTY("TestHasElement", TestHasElement),  | 
86 | 141 |     DECLARE_NAPI_PROPERTY("New", New),  | 
 | 142 | +    DECLARE_NAPI_PROPERTY("NewWithLength", NewWithLength),  | 
87 | 143 |   };  | 
88 | 144 | 
 
  | 
89 | 145 |   NAPI_CALL_RETURN_VOID(env, napi_define_properties(  | 
 | 
0 commit comments