1 #include <stdio.h>
2 #include <node_api.h>
3 #include <assert.h>
4 #include <stdlib.h>
5 #include "../../js-native-api/common.h"
6
7 #define BUFFER_SIZE 4
8
9 int wrappedNativeData;
10 napi_ref ref;
WrapFinalizer(napi_env env,void * data,void * hint)11 void WrapFinalizer(napi_env env, void* data, void* hint) {
12 uint32_t count;
13 NAPI_CALL_RETURN_VOID(env, napi_reference_unref(env, ref, &count));
14 NAPI_CALL_RETURN_VOID(env, napi_delete_reference(env, ref));
15 }
16
BufferFinalizer(napi_env env,void * data,void * hint)17 void BufferFinalizer(napi_env env, void* data, void* hint) {
18 free(hint);
19 }
20
Test(napi_env env,napi_callback_info info)21 napi_value Test(napi_env env, napi_callback_info info) {
22 size_t argc = 1;
23 napi_value argv[1];
24 napi_value result;
25 void* bufferData = malloc(BUFFER_SIZE);
26
27 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, NULL, NULL));
28 NAPI_CALL(env, napi_create_external_buffer(env, BUFFER_SIZE, bufferData, BufferFinalizer, bufferData, &result));
29 NAPI_CALL(env, napi_create_reference(env, result, 1, &ref));
30 NAPI_CALL(env, napi_wrap(env, argv[0], (void*) &wrappedNativeData, WrapFinalizer, NULL, NULL));
31 return NULL;
32 }
33
Init(napi_env env,napi_value exports)34 napi_value Init(napi_env env, napi_value exports) {
35 napi_property_descriptor properties[] = {
36 DECLARE_NAPI_PROPERTY("Test", Test)
37 };
38
39 NAPI_CALL(env, napi_define_properties(
40 env, exports, sizeof(properties) / sizeof(*properties), properties));
41
42 return exports;
43 }
44
45 // Do not start using NAPI_MODULE_INIT() here, so that we can test
46 // compatibility of Workers with NAPI_MODULE().
47 NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)
48