• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <js_native_api.h>
2 #include "../common.h"
3 
checkError(napi_env env,napi_callback_info info)4 static napi_value checkError(napi_env env, napi_callback_info info) {
5   size_t argc = 1;
6   napi_value args[1];
7   NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
8 
9   bool r;
10   NAPI_CALL(env, napi_is_error(env, args[0], &r));
11 
12   napi_value result;
13   NAPI_CALL(env, napi_get_boolean(env, r, &result));
14 
15   return result;
16 }
17 
throwExistingError(napi_env env,napi_callback_info info)18 static napi_value throwExistingError(napi_env env, napi_callback_info info) {
19   napi_value message;
20   napi_value error;
21   NAPI_CALL(env, napi_create_string_utf8(
22       env, "existing error", NAPI_AUTO_LENGTH, &message));
23   NAPI_CALL(env, napi_create_error(env, NULL,  message, &error));
24   NAPI_CALL(env, napi_throw(env, error));
25   return NULL;
26 }
27 
throwError(napi_env env,napi_callback_info info)28 static napi_value throwError(napi_env env, napi_callback_info info) {
29   NAPI_CALL(env, napi_throw_error(env, NULL, "error"));
30   return NULL;
31 }
32 
throwRangeError(napi_env env,napi_callback_info info)33 static napi_value throwRangeError(napi_env env, napi_callback_info info) {
34   NAPI_CALL(env, napi_throw_range_error(env, NULL, "range error"));
35   return NULL;
36 }
37 
throwTypeError(napi_env env,napi_callback_info info)38 static napi_value throwTypeError(napi_env env, napi_callback_info info) {
39   NAPI_CALL(env, napi_throw_type_error(env, NULL, "type error"));
40   return NULL;
41 }
42 
throwErrorCode(napi_env env,napi_callback_info info)43 static napi_value throwErrorCode(napi_env env, napi_callback_info info) {
44   NAPI_CALL(env, napi_throw_error(env, "ERR_TEST_CODE", "Error [error]"));
45   return NULL;
46 }
47 
throwRangeErrorCode(napi_env env,napi_callback_info info)48 static napi_value throwRangeErrorCode(napi_env env, napi_callback_info info) {
49   NAPI_CALL(env, napi_throw_range_error(env,
50                                         "ERR_TEST_CODE",
51                                         "RangeError [range error]"));
52   return NULL;
53 }
54 
throwTypeErrorCode(napi_env env,napi_callback_info info)55 static napi_value throwTypeErrorCode(napi_env env, napi_callback_info info) {
56   NAPI_CALL(env, napi_throw_type_error(env,
57                                        "ERR_TEST_CODE",
58                                        "TypeError [type error]"));
59   return NULL;
60 }
61 
62 
createError(napi_env env,napi_callback_info info)63 static napi_value createError(napi_env env, napi_callback_info info) {
64   napi_value result;
65   napi_value message;
66   NAPI_CALL(env, napi_create_string_utf8(
67       env, "error", NAPI_AUTO_LENGTH, &message));
68   NAPI_CALL(env, napi_create_error(env, NULL, message, &result));
69   return result;
70 }
71 
createRangeError(napi_env env,napi_callback_info info)72 static napi_value createRangeError(napi_env env, napi_callback_info info) {
73   napi_value result;
74   napi_value message;
75   NAPI_CALL(env, napi_create_string_utf8(
76       env, "range error", NAPI_AUTO_LENGTH, &message));
77   NAPI_CALL(env, napi_create_range_error(env, NULL, message, &result));
78   return result;
79 }
80 
createTypeError(napi_env env,napi_callback_info info)81 static napi_value createTypeError(napi_env env, napi_callback_info info) {
82   napi_value result;
83   napi_value message;
84   NAPI_CALL(env, napi_create_string_utf8(
85       env, "type error", NAPI_AUTO_LENGTH, &message));
86   NAPI_CALL(env, napi_create_type_error(env, NULL, message, &result));
87   return result;
88 }
89 
createErrorCode(napi_env env,napi_callback_info info)90 static napi_value createErrorCode(napi_env env, napi_callback_info info) {
91   napi_value result;
92   napi_value message;
93   napi_value code;
94   NAPI_CALL(env, napi_create_string_utf8(
95       env, "Error [error]", NAPI_AUTO_LENGTH, &message));
96   NAPI_CALL(env, napi_create_string_utf8(
97       env, "ERR_TEST_CODE", NAPI_AUTO_LENGTH, &code));
98   NAPI_CALL(env, napi_create_error(env, code, message, &result));
99   return result;
100 }
101 
createRangeErrorCode(napi_env env,napi_callback_info info)102 static napi_value createRangeErrorCode(napi_env env, napi_callback_info info) {
103   napi_value result;
104   napi_value message;
105   napi_value code;
106   NAPI_CALL(env, napi_create_string_utf8(env,
107                                          "RangeError [range error]",
108                                          NAPI_AUTO_LENGTH,
109                                          &message));
110   NAPI_CALL(env, napi_create_string_utf8(
111       env, "ERR_TEST_CODE", NAPI_AUTO_LENGTH, &code));
112   NAPI_CALL(env, napi_create_range_error(env, code, message, &result));
113   return result;
114 }
115 
createTypeErrorCode(napi_env env,napi_callback_info info)116 static napi_value createTypeErrorCode(napi_env env, napi_callback_info info) {
117   napi_value result;
118   napi_value message;
119   napi_value code;
120   NAPI_CALL(env, napi_create_string_utf8(env,
121                                          "TypeError [type error]",
122                                          NAPI_AUTO_LENGTH,
123                                          &message));
124   NAPI_CALL(env, napi_create_string_utf8(
125       env, "ERR_TEST_CODE", NAPI_AUTO_LENGTH, &code));
126   NAPI_CALL(env, napi_create_type_error(env, code, message, &result));
127   return result;
128 }
129 
throwArbitrary(napi_env env,napi_callback_info info)130 static napi_value throwArbitrary(napi_env env, napi_callback_info info) {
131   napi_value arbitrary;
132   size_t argc = 1;
133   NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &arbitrary, NULL, NULL));
134   NAPI_CALL(env, napi_throw(env, arbitrary));
135   return NULL;
136 }
137 
138 EXTERN_C_START
Init(napi_env env,napi_value exports)139 napi_value Init(napi_env env, napi_value exports) {
140   napi_property_descriptor descriptors[] = {
141     DECLARE_NAPI_PROPERTY("checkError", checkError),
142     DECLARE_NAPI_PROPERTY("throwExistingError", throwExistingError),
143     DECLARE_NAPI_PROPERTY("throwError", throwError),
144     DECLARE_NAPI_PROPERTY("throwRangeError", throwRangeError),
145     DECLARE_NAPI_PROPERTY("throwTypeError", throwTypeError),
146     DECLARE_NAPI_PROPERTY("throwErrorCode", throwErrorCode),
147     DECLARE_NAPI_PROPERTY("throwRangeErrorCode", throwRangeErrorCode),
148     DECLARE_NAPI_PROPERTY("throwTypeErrorCode", throwTypeErrorCode),
149     DECLARE_NAPI_PROPERTY("throwArbitrary", throwArbitrary),
150     DECLARE_NAPI_PROPERTY("createError", createError),
151     DECLARE_NAPI_PROPERTY("createRangeError", createRangeError),
152     DECLARE_NAPI_PROPERTY("createTypeError", createTypeError),
153     DECLARE_NAPI_PROPERTY("createErrorCode", createErrorCode),
154     DECLARE_NAPI_PROPERTY("createRangeErrorCode", createRangeErrorCode),
155     DECLARE_NAPI_PROPERTY("createTypeErrorCode", createTypeErrorCode),
156   };
157 
158   NAPI_CALL(env, napi_define_properties(
159       env, exports, sizeof(descriptors) / sizeof(*descriptors), descriptors));
160 
161   return exports;
162 }
163 EXTERN_C_END
164