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