diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index de846209..f4204604 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -12,7 +12,7 @@ jobs: strategy: matrix: - node-version: [10.x, 12.x, 13.x] + node-version: [10.21.0, 12.18.0, 13.x, 14.x] operating-system: [ubuntu-latest, windows-latest, macos-latest] steps: diff --git a/.travis.yml b/.travis.yml index c62aeaed..e526c0c4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,9 @@ language: node_js node_js: - - "8" - "10" - "12" - "13" + - "14" cache: npm before_install: diff --git a/6_object_wrap/node-addon-api/myobject.cc b/6_object_wrap/node-addon-api/myobject.cc index a81b51c7..24c62681 100644 --- a/6_object_wrap/node-addon-api/myobject.cc +++ b/6_object_wrap/node-addon-api/myobject.cc @@ -1,7 +1,5 @@ #include "myobject.h" -Napi::FunctionReference MyObject::constructor; - Napi::Object MyObject::Init(Napi::Env env, Napi::Object exports) { Napi::HandleScope scope(env); @@ -12,8 +10,9 @@ Napi::Object MyObject::Init(Napi::Env env, Napi::Object exports) { InstanceMethod("value", &MyObject::GetValue), InstanceMethod("multiply", &MyObject::Multiply)}); - constructor = Napi::Persistent(func); - constructor.SuppressDestruct(); + Napi::FunctionReference* constructor = new Napi::FunctionReference(); + *constructor = Napi::Persistent(func); + env.SetInstanceData(constructor); exports.Set("MyObject", func); return exports; @@ -55,7 +54,7 @@ Napi::Value MyObject::Multiply(const Napi::CallbackInfo& info) { multiple = info[0].As(); } - Napi::Object obj = constructor.New( + Napi::Object obj = info.Env().GetInstanceData()->New( {Napi::Number::New(info.Env(), this->value_ * multiple.DoubleValue())}); return obj; diff --git a/6_object_wrap/node-addon-api/myobject.h b/6_object_wrap/node-addon-api/myobject.h index fbd30588..e8ccad93 100644 --- a/6_object_wrap/node-addon-api/myobject.h +++ b/6_object_wrap/node-addon-api/myobject.h @@ -9,8 +9,6 @@ class MyObject : public Napi::ObjectWrap { MyObject(const Napi::CallbackInfo& info); private: - static Napi::FunctionReference constructor; - Napi::Value GetValue(const Napi::CallbackInfo& info); Napi::Value PlusOne(const Napi::CallbackInfo& info); Napi::Value Multiply(const Napi::CallbackInfo& info); diff --git a/6_object_wrap/node-addon-api/package.json b/6_object_wrap/node-addon-api/package.json index 37fc7045..205996a7 100644 --- a/6_object_wrap/node-addon-api/package.json +++ b/6_object_wrap/node-addon-api/package.json @@ -5,8 +5,11 @@ "main": "addon.js", "private": true, "gypfile": true, + "engines": { + "node": "~10 >=10.20 || >=12.17" + }, "dependencies": { "bindings": "~1.2.1", - "node-addon-api": "^1.0.0" + "node-addon-api": "^3.0.0" } } diff --git a/7_factory_wrap/node-addon-api/myobject.cc b/7_factory_wrap/node-addon-api/myobject.cc index 1f9c9e53..e83dab22 100644 --- a/7_factory_wrap/node-addon-api/myobject.cc +++ b/7_factory_wrap/node-addon-api/myobject.cc @@ -4,16 +4,15 @@ using namespace Napi; -Napi::FunctionReference MyObject::constructor; - Napi::Object MyObject::Init(Napi::Env env, Napi::Object exports) { Napi::HandleScope scope(env); Napi::Function func = DefineClass( env, "MyObject", {InstanceMethod("plusOne", &MyObject::PlusOne)}); - constructor = Napi::Persistent(func); - constructor.SuppressDestruct(); + Napi::FunctionReference* constructor = new Napi::FunctionReference(); + *constructor = Napi::Persistent(func); + env.SetInstanceData(constructor); exports.Set("MyObject", func); return exports; @@ -29,7 +28,7 @@ MyObject::MyObject(const Napi::CallbackInfo& info) Napi::Object MyObject::NewInstance(Napi::Env env, Napi::Value arg) { Napi::EscapableHandleScope scope(env); - Napi::Object obj = constructor.New({arg}); + Napi::Object obj = env.GetInstanceData()->New({arg}); return scope.Escape(napi_value(obj)).ToObject(); } diff --git a/7_factory_wrap/node-addon-api/myobject.h b/7_factory_wrap/node-addon-api/myobject.h index 9939ca9e..cfc97a2d 100644 --- a/7_factory_wrap/node-addon-api/myobject.h +++ b/7_factory_wrap/node-addon-api/myobject.h @@ -10,7 +10,6 @@ class MyObject : public Napi::ObjectWrap { MyObject(const Napi::CallbackInfo& info); private: - static Napi::FunctionReference constructor; Napi::Value PlusOne(const Napi::CallbackInfo& info); double counter_; }; diff --git a/7_factory_wrap/node-addon-api/package.json b/7_factory_wrap/node-addon-api/package.json index 5ae4e7b7..3903b07f 100644 --- a/7_factory_wrap/node-addon-api/package.json +++ b/7_factory_wrap/node-addon-api/package.json @@ -5,8 +5,11 @@ "main": "addon.js", "private": true, "gypfile": true, + "engines": { + "node": "~10 >=10.20 || >=12.17" + }, "dependencies": { "bindings": "~1.2.1", - "node-addon-api": "^1.0.0" + "node-addon-api": "^3.0.0" } } diff --git a/8_passing_wrapped/node-addon-api/addon.cc b/8_passing_wrapped/node-addon-api/addon.cc index c348e79e..8b48589c 100644 --- a/8_passing_wrapped/node-addon-api/addon.cc +++ b/8_passing_wrapped/node-addon-api/addon.cc @@ -4,7 +4,7 @@ using namespace Napi; Napi::Object CreateObject(const Napi::CallbackInfo& info) { - return MyObject::NewInstance(info[0]); + return MyObject::NewInstance(info.Env(), info[0]); } Napi::Number Add(const Napi::CallbackInfo& info) { diff --git a/8_passing_wrapped/node-addon-api/myobject.cc b/8_passing_wrapped/node-addon-api/myobject.cc index f2669849..eb9500ac 100644 --- a/8_passing_wrapped/node-addon-api/myobject.cc +++ b/8_passing_wrapped/node-addon-api/myobject.cc @@ -10,20 +10,19 @@ MyObject::MyObject(const Napi::CallbackInfo& info) this->val_ = info[0].As().DoubleValue(); }; -Napi::FunctionReference MyObject::constructor; - void MyObject::Init(Napi::Env env, Napi::Object exports) { Napi::HandleScope scope(env); Napi::Function func = DefineClass(env, "MyObject", {}); - constructor = Napi::Persistent(func); - constructor.SuppressDestruct(); + Napi::FunctionReference* constructor = new Napi::FunctionReference(); + *constructor = Napi::Persistent(func); + env.SetInstanceData(constructor); exports.Set("MyObject", func); } -Napi::Object MyObject::NewInstance(Napi::Value arg) { - Napi::Object obj = constructor.New({arg}); +Napi::Object MyObject::NewInstance(Napi::Env env, Napi::Value arg) { + Napi::Object obj = env.GetInstanceData()->New({arg}); return obj; } diff --git a/8_passing_wrapped/node-addon-api/myobject.h b/8_passing_wrapped/node-addon-api/myobject.h index 67c36781..b8752b20 100644 --- a/8_passing_wrapped/node-addon-api/myobject.h +++ b/8_passing_wrapped/node-addon-api/myobject.h @@ -6,12 +6,11 @@ class MyObject : public Napi::ObjectWrap { public: static void Init(Napi::Env env, Napi::Object exports); - static Napi::Object NewInstance(Napi::Value arg); + static Napi::Object NewInstance(Napi::Env env, Napi::Value arg); double Val() const { return val_; } MyObject(const Napi::CallbackInfo& info); private: - static Napi::FunctionReference constructor; double val_; }; diff --git a/8_passing_wrapped/node-addon-api/package.json b/8_passing_wrapped/node-addon-api/package.json index 22447819..95029a92 100644 --- a/8_passing_wrapped/node-addon-api/package.json +++ b/8_passing_wrapped/node-addon-api/package.json @@ -5,8 +5,11 @@ "main": "addon.js", "private": true, "gypfile": true, + "engines": { + "node": "~10 >=10.20 || >=12.17" + }, "dependencies": { "bindings": "~1.2.1", - "node-addon-api": "^1.0.0" + "node-addon-api": "^3.0.0" } }