1 #include <js_native_api.h>
2 #include "../common.h"
3 #include "../entry_point.h"
4 #include "myobject.h"
5 
6 extern size_t finalize_count;
7 
CreateObject(napi_env env, napi_callback_info info)8 static napi_value CreateObject(napi_env env, napi_callback_info info) {
9   size_t argc = 1;
10   napi_value args[1];
11   NODE_API_CALL(env,
12       napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
13 
14   napi_value instance;
15   NODE_API_CALL(env, MyObject::NewInstance(env, args[0], &instance));
16 
17   return instance;
18 }
19 
Add(napi_env env, napi_callback_info info)20 static napi_value Add(napi_env env, napi_callback_info info) {
21   size_t argc = 2;
22   napi_value args[2];
23   NODE_API_CALL(env,
24       napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
25 
26   MyObject* obj1;
27   NODE_API_CALL(env,
28       napi_unwrap(env, args[0], reinterpret_cast<void**>(&obj1)));
29 
30   MyObject* obj2;
31   NODE_API_CALL(env,
32       napi_unwrap(env, args[1], reinterpret_cast<void**>(&obj2)));
33 
34   napi_value sum;
35   NODE_API_CALL(env, napi_create_double(env, obj1->Val() + obj2->Val(), &sum));
36 
37   return sum;
38 }
39 
FinalizeCount(napi_env env, napi_callback_info info)40 static napi_value FinalizeCount(napi_env env, napi_callback_info info) {
41   napi_value return_value;
42   NODE_API_CALL(env, napi_create_uint32(env, finalize_count, &return_value));
43   return return_value;
44 }
45 
46 EXTERN_C_START
Init(napi_env env, napi_value exports)47 napi_value Init(napi_env env, napi_value exports) {
48   MyObject::Init(env);
49 
50   napi_property_descriptor desc[] = {
51     DECLARE_NODE_API_PROPERTY("createObject", CreateObject),
52     DECLARE_NODE_API_PROPERTY("add", Add),
53     DECLARE_NODE_API_PROPERTY("finalizeCount", FinalizeCount),
54   };
55 
56   NODE_API_CALL(env,
57       napi_define_properties(env, exports, sizeof(desc) / sizeof(*desc), desc));
58 
59   return exports;
60 }
61 EXTERN_C_END
62