1#include <js_native_api.h>
2#include "../common.h"
3#include "../entry_point.h"
4#include "test_null.h"
5
6static 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
20static 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
34static 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
48static 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
62static 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
76static 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
92static 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
103static 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
114static 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
125static 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
136EXTERN_C_START
137napi_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}
158EXTERN_C_END
159