Skip to content

Commit dc86a66

Browse files
make node-addon-api examples context-sensistive (#139)
1 parent b024ee9 commit dc86a66

File tree

12 files changed

+29
-27
lines changed

12 files changed

+29
-27
lines changed

.github/workflows/nodejs.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212

1313
strategy:
1414
matrix:
15-
node-version: [10.x, 12.x, 13.x]
15+
node-version: [10.21.0, 12.18.0, 13.x, 14.x]
1616
operating-system: [ubuntu-latest, windows-latest, macos-latest]
1717

1818
steps:

.travis.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
language: node_js
22
node_js:
3-
- "8"
43
- "10"
54
- "12"
65
- "13"
6+
- "14"
77
cache:
88
npm
99
before_install:

6_object_wrap/node-addon-api/myobject.cc

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
#include "myobject.h"
22

3-
Napi::FunctionReference MyObject::constructor;
4-
53
Napi::Object MyObject::Init(Napi::Env env, Napi::Object exports) {
64
Napi::HandleScope scope(env);
75

@@ -12,8 +10,9 @@ Napi::Object MyObject::Init(Napi::Env env, Napi::Object exports) {
1210
InstanceMethod("value", &MyObject::GetValue),
1311
InstanceMethod("multiply", &MyObject::Multiply)});
1412

15-
constructor = Napi::Persistent(func);
16-
constructor.SuppressDestruct();
13+
Napi::FunctionReference* constructor = new Napi::FunctionReference();
14+
*constructor = Napi::Persistent(func);
15+
env.SetInstanceData(constructor);
1716

1817
exports.Set("MyObject", func);
1918
return exports;
@@ -55,7 +54,7 @@ Napi::Value MyObject::Multiply(const Napi::CallbackInfo& info) {
5554
multiple = info[0].As<Napi::Number>();
5655
}
5756

58-
Napi::Object obj = constructor.New(
57+
Napi::Object obj = info.Env().GetInstanceData<Napi::FunctionReference>()->New(
5958
{Napi::Number::New(info.Env(), this->value_ * multiple.DoubleValue())});
6059

6160
return obj;

6_object_wrap/node-addon-api/myobject.h

-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ class MyObject : public Napi::ObjectWrap<MyObject> {
99
MyObject(const Napi::CallbackInfo& info);
1010

1111
private:
12-
static Napi::FunctionReference constructor;
13-
1412
Napi::Value GetValue(const Napi::CallbackInfo& info);
1513
Napi::Value PlusOne(const Napi::CallbackInfo& info);
1614
Napi::Value Multiply(const Napi::CallbackInfo& info);

6_object_wrap/node-addon-api/package.json

+4-1
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@
55
"main": "addon.js",
66
"private": true,
77
"gypfile": true,
8+
"engines": {
9+
"node": "~10 >=10.20 || >=12.17"
10+
},
811
"dependencies": {
912
"bindings": "~1.2.1",
10-
"node-addon-api": "^1.0.0"
13+
"node-addon-api": "^3.0.0"
1114
}
1215
}

7_factory_wrap/node-addon-api/myobject.cc

+4-5
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,15 @@
44

55
using namespace Napi;
66

7-
Napi::FunctionReference MyObject::constructor;
8-
97
Napi::Object MyObject::Init(Napi::Env env, Napi::Object exports) {
108
Napi::HandleScope scope(env);
119

1210
Napi::Function func = DefineClass(
1311
env, "MyObject", {InstanceMethod("plusOne", &MyObject::PlusOne)});
1412

15-
constructor = Napi::Persistent(func);
16-
constructor.SuppressDestruct();
13+
Napi::FunctionReference* constructor = new Napi::FunctionReference();
14+
*constructor = Napi::Persistent(func);
15+
env.SetInstanceData(constructor);
1716

1817
exports.Set("MyObject", func);
1918
return exports;
@@ -29,7 +28,7 @@ MyObject::MyObject(const Napi::CallbackInfo& info)
2928

3029
Napi::Object MyObject::NewInstance(Napi::Env env, Napi::Value arg) {
3130
Napi::EscapableHandleScope scope(env);
32-
Napi::Object obj = constructor.New({arg});
31+
Napi::Object obj = env.GetInstanceData<Napi::FunctionReference>()->New({arg});
3332
return scope.Escape(napi_value(obj)).ToObject();
3433
}
3534

7_factory_wrap/node-addon-api/myobject.h

-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ class MyObject : public Napi::ObjectWrap<MyObject> {
1010
MyObject(const Napi::CallbackInfo& info);
1111

1212
private:
13-
static Napi::FunctionReference constructor;
1413
Napi::Value PlusOne(const Napi::CallbackInfo& info);
1514
double counter_;
1615
};

7_factory_wrap/node-addon-api/package.json

+4-1
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@
55
"main": "addon.js",
66
"private": true,
77
"gypfile": true,
8+
"engines": {
9+
"node": "~10 >=10.20 || >=12.17"
10+
},
811
"dependencies": {
912
"bindings": "~1.2.1",
10-
"node-addon-api": "^1.0.0"
13+
"node-addon-api": "^3.0.0"
1114
}
1215
}

8_passing_wrapped/node-addon-api/addon.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
using namespace Napi;
55

66
Napi::Object CreateObject(const Napi::CallbackInfo& info) {
7-
return MyObject::NewInstance(info[0]);
7+
return MyObject::NewInstance(info.Env(), info[0]);
88
}
99

1010
Napi::Number Add(const Napi::CallbackInfo& info) {

8_passing_wrapped/node-addon-api/myobject.cc

+5-6
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,19 @@ MyObject::MyObject(const Napi::CallbackInfo& info)
1010
this->val_ = info[0].As<Napi::Number>().DoubleValue();
1111
};
1212

13-
Napi::FunctionReference MyObject::constructor;
14-
1513
void MyObject::Init(Napi::Env env, Napi::Object exports) {
1614
Napi::HandleScope scope(env);
1715

1816
Napi::Function func = DefineClass(env, "MyObject", {});
1917

20-
constructor = Napi::Persistent(func);
21-
constructor.SuppressDestruct();
18+
Napi::FunctionReference* constructor = new Napi::FunctionReference();
19+
*constructor = Napi::Persistent(func);
20+
env.SetInstanceData(constructor);
2221

2322
exports.Set("MyObject", func);
2423
}
2524

26-
Napi::Object MyObject::NewInstance(Napi::Value arg) {
27-
Napi::Object obj = constructor.New({arg});
25+
Napi::Object MyObject::NewInstance(Napi::Env env, Napi::Value arg) {
26+
Napi::Object obj = env.GetInstanceData<Napi::FunctionReference>()->New({arg});
2827
return obj;
2928
}

8_passing_wrapped/node-addon-api/myobject.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,11 @@
66
class MyObject : public Napi::ObjectWrap<MyObject> {
77
public:
88
static void Init(Napi::Env env, Napi::Object exports);
9-
static Napi::Object NewInstance(Napi::Value arg);
9+
static Napi::Object NewInstance(Napi::Env env, Napi::Value arg);
1010
double Val() const { return val_; }
1111
MyObject(const Napi::CallbackInfo& info);
1212

1313
private:
14-
static Napi::FunctionReference constructor;
1514
double val_;
1615
};
1716

8_passing_wrapped/node-addon-api/package.json

+4-1
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@
55
"main": "addon.js",
66
"private": true,
77
"gypfile": true,
8+
"engines": {
9+
"node": "~10 >=10.20 || >=12.17"
10+
},
811
"dependencies": {
912
"bindings": "~1.2.1",
10-
"node-addon-api": "^1.0.0"
13+
"node-addon-api": "^3.0.0"
1114
}
1215
}

0 commit comments

Comments
 (0)