1 #include <js_native_api.h>
2 #include "../common.h"
3 #include "../entry_point.h"
4 #include "test_null.h"
5 
AsBool(napi_env env, napi_callback_info info)6 static napi_value AsBool(napi_env env, napi_callback_info info) {
7   size_t argc = 1;
8   napi_value args[1];
9   NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
10 
11   bool value;
12   NODE_API_CALL(env, napi_get_value_bool(env, args[0], &value));
13 
14   napi_value output;
15   NODE_API_CALL(env, napi_get_boolean(env, value, &output));
16 
17   return output;
18 }
19 
AsInt32(napi_env env, napi_callback_info info)20 static napi_value AsInt32(napi_env env, napi_callback_info info) {
21   size_t argc = 1;
22   napi_value args[1];
23   NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
24 
25   int32_t value;
26   NODE_API_CALL(env, napi_get_value_int32(env, args[0], &value));
27 
28   napi_value output;
29   NODE_API_CALL(env, napi_create_int32(env, value, &output));
30 
31   return output;
32 }
33 
AsUInt32(napi_env env, napi_callback_info info)34 static napi_value AsUInt32(napi_env env, napi_callback_info info) {
35   size_t argc = 1;
36   napi_value args[1];
37   NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
38 
39   uint32_t value;
40   NODE_API_CALL(env, napi_get_value_uint32(env, args[0], &value));
41 
42   napi_value output;
43   NODE_API_CALL(env, napi_create_uint32(env, value, &output));
44 
45   return output;
46 }
47 
AsInt64(napi_env env, napi_callback_info info)48 static napi_value AsInt64(napi_env env, napi_callback_info info) {
49   size_t argc = 1;
50   napi_value args[1];
51   NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
52 
53   int64_t value;
54   NODE_API_CALL(env, napi_get_value_int64(env, args[0], &value));
55 
56   napi_value output;
57   NODE_API_CALL(env, napi_create_int64(env, (double)value, &output));
58 
59   return output;
60 }
61 
AsDouble(napi_env env, napi_callback_info info)62 static napi_value AsDouble(napi_env env, napi_callback_info info) {
63   size_t argc = 1;
64   napi_value args[1];
65   NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
66 
67   double value;
68   NODE_API_CALL(env, napi_get_value_double(env, args[0], &value));
69 
70   napi_value output;
71   NODE_API_CALL(env, napi_create_double(env, value, &output));
72 
73   return output;
74 }
75 
AsString(napi_env env, napi_callback_info info)76 static napi_value AsString(napi_env env, napi_callback_info info) {
77   size_t argc = 1;
78   napi_value args[1];
79   NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
80 
81   char value[100];
82   NODE_API_CALL(env,
83     napi_get_value_string_utf8(env, args[0], value, sizeof(value), NULL));
84 
85   napi_value output;
86   NODE_API_CALL(env, napi_create_string_utf8(
87       env, value, NAPI_AUTO_LENGTH, &output));
88 
89   return output;
90 }
91 
ToBool(napi_env env, napi_callback_info info)92 static napi_value ToBool(napi_env env, napi_callback_info info) {
93   size_t argc = 1;
94   napi_value args[1];
95   NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
96 
97   napi_value output;
98   NODE_API_CALL(env, napi_coerce_to_bool(env, args[0], &output));
99 
100   return output;
101 }
102 
ToNumber(napi_env env, napi_callback_info info)103 static napi_value ToNumber(napi_env env, napi_callback_info info) {
104   size_t argc = 1;
105   napi_value args[1];
106   NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
107 
108   napi_value output;
109   NODE_API_CALL(env, napi_coerce_to_number(env, args[0], &output));
110 
111   return output;
112 }
113 
ToObject(napi_env env, napi_callback_info info)114 static napi_value ToObject(napi_env env, napi_callback_info info) {
115   size_t argc = 1;
116   napi_value args[1];
117   NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
118 
119   napi_value output;
120   NODE_API_CALL(env, napi_coerce_to_object(env, args[0], &output));
121 
122   return output;
123 }
124 
ToString(napi_env env, napi_callback_info info)125 static napi_value ToString(napi_env env, napi_callback_info info) {
126   size_t argc = 1;
127   napi_value args[1];
128   NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
129 
130   napi_value output;
131   NODE_API_CALL(env, napi_coerce_to_string(env, args[0], &output));
132 
133   return output;
134 }
135 
136 EXTERN_C_START
Init(napi_env env, napi_value exports)137 napi_value Init(napi_env env, napi_value exports) {
138   napi_property_descriptor descriptors[] = {
139     DECLARE_NODE_API_PROPERTY("asBool", AsBool),
140     DECLARE_NODE_API_PROPERTY("asInt32", AsInt32),
141     DECLARE_NODE_API_PROPERTY("asUInt32", AsUInt32),
142     DECLARE_NODE_API_PROPERTY("asInt64", AsInt64),
143     DECLARE_NODE_API_PROPERTY("asDouble", AsDouble),
144     DECLARE_NODE_API_PROPERTY("asString", AsString),
145     DECLARE_NODE_API_PROPERTY("toBool", ToBool),
146     DECLARE_NODE_API_PROPERTY("toNumber", ToNumber),
147     DECLARE_NODE_API_PROPERTY("toObject", ToObject),
148     DECLARE_NODE_API_PROPERTY("toString", ToString),
149   };
150 
151   NODE_API_CALL(env, napi_define_properties(
152       env, exports, sizeof(descriptors) / sizeof(*descriptors), descriptors));
153 
154   init_test_null(env, exports);
155 
156   return exports;
157 }
158 EXTERN_C_END
159