Skip to content

Commit 2f8495d

Browse files
author
Sampson Gao
committed
Update to current napi
1 parent f763e7c commit 2f8495d

File tree

14 files changed

+108
-124
lines changed

14 files changed

+108
-124
lines changed

1_hello_world/napi/hello.cc

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
#include <node_api.h>
22
#include <assert.h>
33

4-
void Method(napi_env env, napi_callback_info info) {
4+
napi_value Method(napi_env env, napi_callback_info info) {
55
napi_status status;
66
napi_value world;
7-
status = napi_create_string_utf8(env, "world", -1, &world);
8-
assert(status == napi_ok);
9-
status = napi_set_return_value(env, info, world);
7+
status = napi_create_string_utf8(env, "world", 5, &world);
108
assert(status == napi_ok);
9+
return world;
1110
}
1211

1312
#define DECLARE_NAPI_METHOD(name, func) \
14-
{ name, func, 0, 0, 0, napi_default, 0 }
13+
{ name, 0, func, 0, 0, 0, napi_default, 0 }
1514

1615
void Init(napi_env env, napi_value exports, napi_value module, void* priv) {
1716
napi_status status;
@@ -20,5 +19,5 @@ void Init(napi_env env, napi_value exports, napi_value module, void* priv) {
2019
assert(status == napi_ok);
2120
}
2221

23-
NAPI_MODULE(addon, Init)
22+
NAPI_MODULE(hello, Init)
2423

1_hello_world/napi/hello.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
var addon = require('bindings')('hello');
22

3-
console.log(addon.hello()); // 'world'
3+
console.log(JSON.stringify(addon)); // 'world'
4+
console.log(addon.hello()); // 'world'

2_function_arguments/napi/addon.cc

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,19 @@
11
#include <node_api.h>
22
#include <assert.h>
3-
4-
void Add(napi_env env, napi_callback_info info) {
3+
#include <stdio.h>
4+
napi_value Add(napi_env env, napi_callback_info info) {
55
napi_status status;
66

7-
size_t argc;
8-
status = napi_get_cb_args_length(env, info, &argc);
7+
size_t argc = 2;
8+
napi_value args[2];
9+
status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
910
assert(status == napi_ok);
1011

1112
if (argc < 2) {
1213
napi_throw_type_error(env, "Wrong number of arguments");
13-
return;
14+
return nullptr;
1415
}
1516

16-
napi_value args[2];
17-
status = napi_get_cb_args(env, info, args, 2);
18-
assert(status == napi_ok);
19-
2017
napi_valuetype valuetype0;
2118
status = napi_typeof(env, args[0], &valuetype0);
2219
assert(status == napi_ok);
@@ -27,7 +24,7 @@ void Add(napi_env env, napi_callback_info info) {
2724

2825
if (valuetype0 != napi_number || valuetype1 != napi_number) {
2926
napi_throw_type_error(env, "Wrong arguments");
30-
return;
27+
return nullptr;
3128
}
3229

3330
double value0;
@@ -42,12 +39,11 @@ void Add(napi_env env, napi_callback_info info) {
4239
status = napi_create_number(env, value0 + value1, &sum);
4340
assert(status == napi_ok);
4441

45-
status = napi_set_return_value(env, info, sum);
46-
assert(status == napi_ok);
42+
return sum;
4743
}
4844

4945
#define DECLARE_NAPI_METHOD(name, func) \
50-
{ name, func, 0, 0, 0, napi_default, 0 }
46+
{ name, 0, func, 0, 0, 0, napi_default, 0 }
5147

5248
void Init(napi_env env, napi_value exports, napi_value module, void* priv) {
5349
napi_status status;

3_callbacks/napi/addon.cc

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
#include <node_api.h>
22
#include <assert.h>
33

4-
void RunCallback(napi_env env, const napi_callback_info info) {
4+
napi_value RunCallback(napi_env env, const napi_callback_info info) {
55
napi_status status;
66

7+
size_t argc = 1;
78
napi_value args[1];
8-
status = napi_get_cb_args(env, info, args, 1);
9+
status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
910
assert(status == napi_ok);
1011

1112
napi_value cb = args[0];
@@ -21,10 +22,12 @@ void RunCallback(napi_env env, const napi_callback_info info) {
2122
napi_value result;
2223
status = napi_call_function(env, global, cb, 1, argv, &result);
2324
assert(status == napi_ok);
25+
26+
return nullptr;
2427
}
2528

2629
#define DECLARE_NAPI_METHOD(name, func) \
27-
{ name, func, 0, 0, 0, napi_default, 0 }
30+
{ name, 0, func, 0, 0, 0, napi_default, 0 }
2831

2932
void Init(napi_env env, napi_value exports, napi_value module, void* priv) {
3033
napi_status status;

4_object_factory/napi/addon.cc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
#include <node_api.h>
22
#include <assert.h>
33

4-
void CreateObject(napi_env env, const napi_callback_info info) {
4+
napi_value CreateObject(napi_env env, const napi_callback_info info) {
55
napi_status status;
66

7+
size_t argc = 1;
78
napi_value args[1];
8-
status = napi_get_cb_args(env, info, args, 1);
9+
status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
910
assert(status == napi_ok);
1011

1112
napi_value obj;
@@ -15,12 +16,11 @@ void CreateObject(napi_env env, const napi_callback_info info) {
1516
status = napi_set_named_property(env, obj, "msg", args[0]);
1617
assert(status == napi_ok);
1718

18-
status = napi_set_return_value(env, info, obj);
19-
assert(status == napi_ok);
19+
return obj;
2020
}
2121

2222
#define DECLARE_NAPI_METHOD(name, func) \
23-
{ name, func, 0, 0, 0, napi_default, 0 }
23+
{ name, 0, func, 0, 0, 0, napi_default, 0 }
2424

2525
void Init(napi_env env, napi_value exports, napi_value module, void* priv) {
2626
napi_status status;

5_function_factory/napi/addon.cc

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,28 @@
11
#include <node_api.h>
22
#include <assert.h>
33

4-
void MyFunction(napi_env env, napi_callback_info info) {
4+
napi_value MyFunction(napi_env env, napi_callback_info info) {
55
napi_status status;
66

77
napi_value str;
88
status = napi_create_string_utf8(env, "hello world", -1, &str);
99
assert(status == napi_ok);
1010

11-
status = napi_set_return_value(env, info, str);
12-
assert(status == napi_ok);
11+
return str;
1312
}
1413

15-
void CreateFunction(napi_env env, napi_callback_info info) {
14+
napi_value CreateFunction(napi_env env, napi_callback_info info) {
1615
napi_status status;
1716

1817
napi_value fn;
1918
status = napi_create_function(env, "theFunction", MyFunction, nullptr, &fn);
2019
assert(status == napi_ok);
2120

22-
status = napi_set_return_value(env, info, fn);
23-
assert(status == napi_ok);
21+
return fn;
2422
}
2523

2624
#define DECLARE_NAPI_METHOD(name, func) \
27-
{ name, func, 0, 0, 0, napi_default, 0 }
25+
{ name, 0, func, 0, 0, 0, napi_default, 0 }
2826

2927
void Init(napi_env env, napi_value exports, napi_value module, void* priv) {
3028
napi_status status;

6_object_wrap/napi/myobject.cc

Lines changed: 28 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,17 @@ MyObject::MyObject(double value)
88

99
MyObject::~MyObject() { napi_delete_reference(env_, wrapper_); }
1010

11-
void MyObject::Destructor(void* nativeObject, void* /*finalize_hint*/) {
11+
void MyObject::Destructor(napi_env env, void* nativeObject, void* /*finalize_hint*/) {
1212
reinterpret_cast<MyObject*>(nativeObject)->~MyObject();
1313
}
1414

1515
#define DECLARE_NAPI_METHOD(name, func) \
16-
{ name, func, 0, 0, 0, napi_default, 0 }
16+
{ name, 0, func, 0, 0, 0, napi_default, 0 }
1717

1818
void MyObject::Init(napi_env env, napi_value exports) {
1919
napi_status status;
2020
napi_property_descriptor properties[] = {
21-
{ "value", 0, GetValue, SetValue, 0, napi_default, 0 },
21+
{ "value", 0, 0, GetValue, SetValue, 0, napi_default, 0 },
2222
DECLARE_NAPI_METHOD("plusOne", PlusOne),
2323
DECLARE_NAPI_METHOD("multiply", Multiply),
2424
};
@@ -35,7 +35,7 @@ void MyObject::Init(napi_env env, napi_value exports) {
3535
assert(status == napi_ok);
3636
}
3737

38-
void MyObject::New(napi_env env, napi_callback_info info) {
38+
napi_value MyObject::New(napi_env env, napi_callback_info info) {
3939
napi_status status;
4040

4141
bool is_constructor;
@@ -44,8 +44,10 @@ void MyObject::New(napi_env env, napi_callback_info info) {
4444

4545
if (is_constructor) {
4646
// Invoked as constructor: `new MyObject(...)`
47+
size_t argc = 1;
4748
napi_value args[1];
48-
status = napi_get_cb_args(env, info, args, 1);
49+
napi_value jsthis;
50+
status = napi_get_cb_info(env, info, &argc, args, &jsthis, nullptr);
4951
assert(status == napi_ok);
5052

5153
double value = 0;
@@ -61,10 +63,6 @@ void MyObject::New(napi_env env, napi_callback_info info) {
6163

6264
MyObject* obj = new MyObject(value);
6365

64-
napi_value jsthis;
65-
status = napi_get_cb_this(env, info, &jsthis);
66-
assert(status == napi_ok);
67-
6866
obj->env_ = env;
6967
status = napi_wrap(env,
7068
jsthis,
@@ -74,12 +72,12 @@ void MyObject::New(napi_env env, napi_callback_info info) {
7472
&obj->wrapper_);
7573
assert(status == napi_ok);
7674

77-
status = napi_set_return_value(env, info, jsthis);
78-
assert(status == napi_ok);
75+
return jsthis;
7976
} else {
8077
// Invoked as plain function `MyObject(...)`, turn into construct call.
78+
size_t argc_ = 1;
8179
napi_value args[1];
82-
status = napi_get_cb_args(env, info, args, 1);
80+
status = napi_get_cb_info(env, info, &argc_, args, nullptr, nullptr);
8381
assert(status == napi_ok);
8482

8583
const size_t argc = 1;
@@ -93,16 +91,15 @@ void MyObject::New(napi_env env, napi_callback_info info) {
9391
status = napi_new_instance(env, cons, argc, argv, &instance);
9492
assert(status == napi_ok);
9593

96-
status = napi_set_return_value(env, info, instance);
97-
assert(status == napi_ok);
94+
return instance;
9895
}
9996
}
10097

101-
void MyObject::GetValue(napi_env env, napi_callback_info info) {
98+
napi_value MyObject::GetValue(napi_env env, napi_callback_info info) {
10299
napi_status status;
103100

104101
napi_value jsthis;
105-
status = napi_get_cb_this(env, info, &jsthis);
102+
status = napi_get_cb_info(env, info, nullptr, nullptr, &jsthis, nullptr);
106103
assert(status == napi_ok);
107104

108105
MyObject* obj;
@@ -113,34 +110,34 @@ void MyObject::GetValue(napi_env env, napi_callback_info info) {
113110
status = napi_create_number(env, obj->value_, &num);
114111
assert(status == napi_ok);
115112

116-
status = napi_set_return_value(env, info, num);
117-
assert(status == napi_ok);
113+
return num;
118114
}
119115

120-
void MyObject::SetValue(napi_env env, napi_callback_info info) {
116+
napi_value MyObject::SetValue(napi_env env, napi_callback_info info) {
121117
napi_status status;
122118

119+
size_t argc = 1;
123120
napi_value value;
124-
status = napi_get_cb_args(env, info, &value, 1);
125-
assert(status == napi_ok);
126-
127121
napi_value jsthis;
128-
status = napi_get_cb_this(env, info, &jsthis);
122+
status = napi_get_cb_info(env, info, &argc, &value, &jsthis, nullptr);
129123
assert(status == napi_ok);
130124

125+
131126
MyObject* obj;
132127
status = napi_unwrap(env, jsthis, reinterpret_cast<void**>(&obj));
133128
assert(status == napi_ok);
134129

135130
status = napi_get_value_double(env, value, &obj->value_);
136131
assert(status == napi_ok);
132+
133+
return nullptr;
137134
}
138135

139-
void MyObject::PlusOne(napi_env env, napi_callback_info info) {
136+
napi_value MyObject::PlusOne(napi_env env, napi_callback_info info) {
140137
napi_status status;
141138

142139
napi_value jsthis;
143-
status = napi_get_cb_this(env, info, &jsthis);
140+
status = napi_get_cb_info(env, info, nullptr, nullptr, &jsthis, nullptr);
144141
assert(status == napi_ok);
145142

146143
MyObject* obj;
@@ -153,15 +150,16 @@ void MyObject::PlusOne(napi_env env, napi_callback_info info) {
153150
status = napi_create_number(env, obj->value_, &num);
154151
assert(status == napi_ok);
155152

156-
status = napi_set_return_value(env, info, num);
157-
assert(status == napi_ok);
153+
return num;
158154
}
159155

160-
void MyObject::Multiply(napi_env env, napi_callback_info info) {
156+
napi_value MyObject::Multiply(napi_env env, napi_callback_info info) {
161157
napi_status status;
162158

159+
size_t argc = 1;
163160
napi_value args[1];
164-
status = napi_get_cb_args(env, info, args, 1);
161+
napi_value jsthis;
162+
status = napi_get_cb_info(env, info, &argc, args, &jsthis, nullptr);
165163
assert(status == napi_ok);
166164

167165
napi_valuetype valuetype;
@@ -174,10 +172,6 @@ void MyObject::Multiply(napi_env env, napi_callback_info info) {
174172
assert(status == napi_ok);
175173
}
176174

177-
napi_value jsthis;
178-
status = napi_get_cb_this(env, info, &jsthis);
179-
assert(status == napi_ok);
180-
181175
MyObject* obj;
182176
status = napi_unwrap(env, jsthis, reinterpret_cast<void**>(&obj));
183177
assert(status == napi_ok);
@@ -195,6 +189,5 @@ void MyObject::Multiply(napi_env env, napi_callback_info info) {
195189
status = napi_new_instance(env, cons, kArgCount, argv, &instance);
196190
assert(status == napi_ok);
197191

198-
status = napi_set_return_value(env, info, instance);
199-
assert(status == napi_ok);
192+
return instance;
200193
}

6_object_wrap/napi/myobject.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@
66
class MyObject {
77
public:
88
static void Init(napi_env env, napi_value exports);
9-
static void Destructor(void* nativeObject, void* finalize_hint);
9+
static void Destructor(napi_env env, void* nativeObject, void* finalize_hint);
1010

1111
private:
1212
explicit MyObject(double value_ = 0);
1313
~MyObject();
1414

15-
static void New(napi_env env, napi_callback_info info);
16-
static void GetValue(napi_env env, napi_callback_info info);
17-
static void SetValue(napi_env env, napi_callback_info info);
18-
static void PlusOne(napi_env env, napi_callback_info info);
19-
static void Multiply(napi_env env, napi_callback_info info);
15+
static napi_value New(napi_env env, napi_callback_info info);
16+
static napi_value GetValue(napi_env env, napi_callback_info info);
17+
static napi_value SetValue(napi_env env, napi_callback_info info);
18+
static napi_value PlusOne(napi_env env, napi_callback_info info);
19+
static napi_value Multiply(napi_env env, napi_callback_info info);
2020
static napi_ref constructor;
2121
double value_;
2222
napi_env env_;

0 commit comments

Comments
 (0)