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