static napi_value testGetPrototype(napi_env env, napi_callback_info info) { size_t argc = 1; napi_value args[1]; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); napi_value result; NAPI_CALL(env, napi_get_prototype(env, args[0], &result)); return result; }
static napi_value testGetVersion(napi_env env, napi_callback_info info) { uint32_t version; napi_value result; NAPI_CALL(env, napi_get_version(env, &version)); NAPI_CALL(env, napi_create_uint32(env, version, &result)); return result; }
static napi_value CreateDataViewFromJSDataView(napi_env env, napi_callback_info info) { size_t argc = 1; napi_value args [1]; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); NAPI_ASSERT(env, argc == 1, "Wrong number of arguments"); napi_valuetype valuetype; napi_value input_dataview = args[0]; NAPI_CALL(env, napi_typeof(env, input_dataview, &valuetype)); NAPI_ASSERT(env, valuetype == napi_object, "Wrong type of arguments. Expects a DataView as the first " "argument."); bool is_dataview; NAPI_CALL(env, napi_is_dataview(env, input_dataview, &is_dataview)); NAPI_ASSERT(env, is_dataview, "Wrong type of arguments. Expects a DataView as the first " "argument."); size_t byte_offset = 0; size_t length = 0; napi_value buffer; NAPI_CALL(env, napi_get_dataview_info(env, input_dataview, &length, NULL, &buffer, &byte_offset)); napi_value output_dataview; NAPI_CALL(env, napi_create_dataview(env, length, buffer, byte_offset, &output_dataview)); return output_dataview; }
napi_value Set(napi_env env, napi_callback_info info) { size_t argc = 3; napi_value args[3]; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); NAPI_ASSERT(env, argc >= 3, "Wrong number of arguments"); napi_valuetype valuetype0; NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0)); NAPI_ASSERT(env, valuetype0 == napi_object, "Wrong type of arguments. Expects an object as first argument."); napi_valuetype valuetype1; NAPI_CALL(env, napi_typeof(env, args[1], &valuetype1)); NAPI_ASSERT(env, valuetype1 == napi_string || valuetype1 == napi_symbol, "Wrong type of arguments. Expects a string or symbol as second."); NAPI_CALL(env, napi_set_property(env, args[0], args[1], args[2])); napi_value valuetrue; NAPI_CALL(env, napi_get_boolean(env, true, &valuetrue)); return valuetrue; }
napi_value Get(napi_env env, napi_callback_info info) { size_t argc = 2; napi_value args[2]; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); NAPI_ASSERT(env, argc >= 2, "Wrong number of arguments"); napi_valuetype valuetype0; NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0)); NAPI_ASSERT(env, valuetype0 == napi_object, "Wrong type of arguments. Expects an object as first argument."); napi_valuetype valuetype1; NAPI_CALL(env, napi_typeof(env, args[1], &valuetype1)); NAPI_ASSERT(env, valuetype1 == napi_string || valuetype1 == napi_symbol, "Wrong type of arguments. Expects a string or symbol as second."); napi_value object = args[0]; napi_value output; NAPI_CALL(env, napi_get_property(env, object, args[1], &output)); return output; }
napi_value testNapiTypeof(napi_env env, napi_callback_info info) { size_t argc = 1; napi_value args[1]; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); napi_valuetype argument_type; NAPI_CALL(env, napi_typeof(env, args[0], &argument_type)); napi_value result = NULL; if (argument_type == napi_number) { NAPI_CALL(env, napi_create_string_utf8(env, "number", -1, &result)); } else if (argument_type == napi_string) { NAPI_CALL(env, napi_create_string_utf8(env, "string", -1, &result)); } else if (argument_type == napi_function) { NAPI_CALL(env, napi_create_string_utf8(env, "function", -1, &result)); } else if (argument_type == napi_object) { NAPI_CALL(env, napi_create_string_utf8(env, "object", -1, &result)); } else if (argument_type == napi_boolean) { NAPI_CALL(env, napi_create_string_utf8(env, "boolean", -1, &result)); } else if (argument_type == napi_undefined) { NAPI_CALL(env, napi_create_string_utf8(env, "undefined", -1, &result)); } else if (argument_type == napi_symbol) { NAPI_CALL(env, napi_create_string_utf8(env, "symbol", -1, &result)); } else if (argument_type == napi_null) { NAPI_CALL(env, napi_create_string_utf8(env, "null", -1, &result)); } return result; }
napi_value HasOwn(napi_env env, napi_callback_info info) { size_t argc = 2; napi_value args[2]; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); NAPI_ASSERT(env, argc == 2, "Wrong number of arguments"); napi_valuetype valuetype0; NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0)); NAPI_ASSERT(env, valuetype0 == napi_object, "Wrong type of arguments. Expects an object as first argument."); // napi_valuetype valuetype1; // NAPI_CALL(env, napi_typeof(env, args[1], &valuetype1)); // // NAPI_ASSERT(env, valuetype1 == napi_string || valuetype1 == napi_symbol, // "Wrong type of arguments. Expects a string or symbol as second."); bool has_property; NAPI_CALL(env, napi_has_own_property(env, args[0], args[1], &has_property)); napi_value ret; NAPI_CALL(env, napi_get_boolean(env, has_property, &ret)); return ret; }
napi_value Init(napi_env env, napi_value exports) { napi_value number; NAPI_CALL(env, napi_create_double(env, value_, &number)); napi_property_descriptor properties[] = { { "echo", 0, Echo, 0, 0, 0, napi_enumerable, 0 }, { "readwriteValue", 0, 0, 0, 0, number, napi_enumerable | napi_writable, 0 }, { "readonlyValue", 0, 0, 0, 0, number, napi_enumerable, 0}, { "hiddenValue", 0, 0, 0, 0, number, napi_default, 0}, { "readwriteAccessor1", 0, 0, GetValue, SetValue, 0, napi_default, 0}, { "readwriteAccessor2", 0, 0, GetValue, SetValue, 0, napi_writable, 0}, { "readonlyAccessor1", 0, 0, GetValue, NULL, 0, napi_default, 0}, { "readonlyAccessor2", 0, 0, GetValue, NULL, 0, napi_writable, 0}, { "staticReadonlyAccessor1", 0, 0, GetStaticValue, NULL, 0, napi_default | napi_static, 0}, }; napi_value cons; NAPI_CALL(env, napi_define_class(env, "MyObject", -1, New, NULL, sizeof(properties)/sizeof(*properties), properties, &cons)); NAPI_CALL(env, napi_create_reference(env, cons, 1, &constructor_)); return cons; }
napi_value TestLatin1Insufficient(napi_env env, napi_callback_info info) { size_t argc = 1; napi_value args[1]; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); NAPI_ASSERT(env, argc >= 1, "Wrong number of arguments"); napi_valuetype valuetype; NAPI_CALL(env, napi_typeof(env, args[0], &valuetype)); NAPI_ASSERT(env, valuetype == napi_string, "Wrong type of argment. Expects a string."); char buffer[4]; size_t buffer_size = 4; size_t copied; NAPI_CALL(env, napi_get_value_string_latin1(env, args[0], buffer, buffer_size, &copied)); napi_value output; NAPI_CALL(env, napi_create_string_latin1(env, buffer, copied, &output)); return output; }
napi_value Init(napi_env env, napi_value exports) { napi_value cons; NAPI_CALL(env, napi_define_class( env, "MyObject_Extra", 8, New, NULL, 0, NULL, &cons)); NAPI_CALL(env, napi_create_reference(env, cons, 1, &constructor_)); return cons; }
static napi_value NewScope(napi_env env, napi_callback_info info) { napi_handle_scope scope; napi_value output = NULL; NAPI_CALL(env, napi_open_handle_scope(env, &scope)); NAPI_CALL(env, napi_create_object(env, &output)); NAPI_CALL(env, napi_close_handle_scope(env, scope)); return NULL; }
static napi_value testAdjustExternalMemory(napi_env env, napi_callback_info info) { napi_value result; int64_t adjustedValue; NAPI_CALL(env, napi_adjust_external_memory(env, 1, &adjustedValue)); NAPI_CALL(env, napi_create_double(env, (double)adjustedValue, &result)); return result; }
static napi_value test_finalize_wrap(napi_env env, napi_callback_info info) { size_t argc = 1; napi_value js_object; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &js_object, NULL, NULL)); NAPI_CALL(env, napi_wrap(env, js_object, NULL, test_finalize, NULL, NULL)); return NULL; }
napi_value Wrap(napi_env env, napi_callback_info info) { size_t argc = 1; napi_value arg; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &arg, NULL, NULL)); int32_t* data = malloc(sizeof(int32_t)); *data = test_value; NAPI_CALL(env, napi_wrap(env, arg, data, NULL, NULL, NULL)); return NULL; }
static napi_value Test(napi_env env, napi_callback_info info) { napi_value err; size_t argc = 1; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &err, NULL, NULL)); NAPI_CALL(env, napi_fatal_exception(env, err)); return NULL; }
static napi_value testNapiErrorCleanup(napi_env env, napi_callback_info info) { const napi_extended_error_info *error_info = 0; NAPI_CALL(env, napi_get_last_error_info(env, &error_info)); napi_value result; bool is_ok = error_info->error_code == napi_ok; NAPI_CALL(env, napi_get_boolean(env, is_ok, &result)); return result; }
napi_value RunCallbackWithRecv(napi_env env, napi_callback_info info) { size_t argc = 2; napi_value args[2]; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); napi_value cb = args[0]; napi_value recv = args[1]; NAPI_CALL(env, napi_call_function(env, recv, cb, 0, NULL, NULL)); return NULL; }
static napi_value testNapiRun(napi_env env, napi_callback_info info) { napi_value script, result; size_t argc = 1; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &script, NULL, NULL)); NAPI_CALL(env, napi_run_script(env, script, &result)); return result; }
napi_value SayHello(napi_env env, napi_callback_info info) { size_t argc = 0; // test if `napi_get_cb_info` tolerants NULL pointers. NAPI_CALL(env, napi_get_cb_info(env, info, &argc, NULL, NULL, NULL)); napi_value str; NAPI_CALL(env, napi_create_string_utf8(env, "Hello", 5, &str)); return str; }
static napi_value remove_wrap(napi_env env, napi_callback_info info) { size_t argc = 1; napi_value wrapped; void* data; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &wrapped, NULL, NULL)); NAPI_CALL(env, napi_remove_wrap(env, wrapped, &data)); return NULL; }
napi_value Inflate(napi_env env, napi_callback_info info) { size_t argc = 1; napi_value args[1]; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); NAPI_ASSERT(env, argc >= 1, "Wrong number of arguments"); napi_valuetype valuetype0; NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0)); NAPI_ASSERT(env, valuetype0 == napi_object, "Wrong type of arguments. Expects an object as first argument."); napi_value obj = args[0]; napi_value propertynames; NAPI_CALL(env, napi_get_property_names(env, obj, &propertynames)); uint32_t i, length; NAPI_CALL(env, napi_get_array_length(env, propertynames, &length)); for (i = 0; i < length; i++) { napi_value property_str; NAPI_CALL(env, napi_get_element(env, propertynames, i, &property_str)); napi_value value; NAPI_CALL(env, napi_get_property(env, obj, property_str, &value)); double double_val; NAPI_CALL(env, napi_get_value_double(env, value, &double_val)); NAPI_CALL(env, napi_create_double(env, double_val + 1, &value)); NAPI_CALL(env, napi_set_property(env, obj, property_str, value)); } return obj; }
static napi_value wrap(napi_env env, napi_callback_info info) { size_t argc = 1; napi_value to_wrap; deref_item_called = false; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &to_wrap, NULL, NULL)); NAPI_CALL(env, napi_wrap(env, to_wrap, &deref_item_called, deref_item, NULL, NULL)); return NULL; }
static napi_value DecrementRefcount(napi_env env, napi_callback_info info) { NAPI_ASSERT(env, test_reference != NULL, "A reference must have been created."); uint32_t refcount; NAPI_CALL(env, napi_reference_unref(env, test_reference, &refcount)); napi_value result; NAPI_CALL(env, napi_create_uint32(env, refcount, &result)); return result; }
static napi_value NewScopeEscape(napi_env env, napi_callback_info info) { napi_escapable_handle_scope scope; napi_value output = NULL; napi_value escapee = NULL; NAPI_CALL(env, napi_open_escapable_handle_scope(env, &scope)); NAPI_CALL(env, napi_create_object(env, &output)); NAPI_CALL(env, napi_escape_handle(env, scope, output, &escapee)); NAPI_CALL(env, napi_close_escapable_handle_scope(env, scope)); return escapee; }
napi_value GetValue(napi_env env, napi_callback_info info) { size_t argc = 0; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, NULL, NULL, NULL)); NAPI_ASSERT(env, argc == 0, "Wrong number of arguments"); napi_value number; NAPI_CALL(env, napi_create_double(env, value_, &number)); return number; }
napi_value wrap(napi_env env, napi_callback_info info) { size_t argc = 2; napi_value argv[2]; napi_ref payload; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, NULL, NULL)); NAPI_CALL(env, napi_create_reference(env, argv[1], 1, &payload)); NAPI_CALL(env, napi_wrap(env, argv[0], payload, deref_item, NULL, NULL)); return NULL; }
napi_value SetValue(napi_env env, napi_callback_info info) { size_t argc = 1; napi_value args[1]; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); NAPI_ASSERT(env, argc == 1, "Wrong number of arguments"); NAPI_CALL(env, napi_get_value_double(env, args[0], &value_)); return NULL; }
napi_value wrap(napi_env env, napi_callback_info info) { size_t argc = 1; napi_value argv[1]; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, NULL, NULL)); NAPI_CALL(env, napi_wrap(env, argv[0], &native_counter, finalize, &native_hint, &weak_ref)); /** * `weak_ref` is a weak reference, so leave as it be. */ return argv[0]; }
napi_value Init(napi_env env, napi_value exports) { SET_NAMED_METHOD(env, exports, "sayHello", SayHello); SET_NAMED_METHOD(env, exports, "sayError", SayError); SET_NAMED_METHOD(env, exports, "strictEquals", StrictEquals); SET_NAMED_METHOD(env, exports, "instanceof", Instanceof); napi_value id; NAPI_CALL(env, napi_create_int32(env, 321, &id)); NAPI_CALL(env, napi_set_named_property(env, exports, "id", id)); return exports; }
static napi_value testStrictEquals(napi_env env, napi_callback_info info) { size_t argc = 2; napi_value args[2]; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); bool bool_result; napi_value result; NAPI_CALL(env, napi_strict_equals(env, args[0], args[1], &bool_result)); NAPI_CALL(env, napi_get_boolean(env, bool_result, &result)); return result; }