Loading bindings/nodesjs.cpp +55 −21 Changes for bindings/nodesjs.cpp: 55 added lines, 21 removed lines. Original line number Diff line number Diff line Loading @@ -43,12 +43,12 @@ using v8::Object; using v8::String; using v8::Value; class AuthDBJS : public node::ObjectWrap , Client{ class AuthDBConnectionJS : public node::ObjectWrap , ClientConnections{ public: static void Init(v8::Isolate* isolate){ // Prepare constructor template Local<v8::FunctionTemplate> tpl = v8::FunctionTemplate::New(isolate, New); tpl->SetClassName(String::NewFromUtf8(isolate, "AuthDBJS").ToLocalChecked()); tpl->SetClassName(String::NewFromUtf8(isolate, "AuthDBConnectionJS").ToLocalChecked()); tpl->InstanceTemplate()->SetInternalFieldCount(1); Local<Context> context = isolate->GetCurrentContext(); Loading @@ -63,50 +63,84 @@ public: Isolate* isolate = args.GetIsolate(); const unsigned argc = 1; Local<Value> argv[argc] = { args[0] }; Local<v8::Function> cons = Local<v8::Function>::New(isolate, constructor); Local<Context> context = isolate->GetCurrentContext(); Local<Object> instance = cons->NewInstance(context, argc, argv).ToLocalChecked(); Local<Object> instance = cons->NewInstance(context).ToLocalChecked(); args.GetReturnValue().Set(instance); }; private: explicit AuthDBJS(double value = 0); ~AuthDBJS(); explicit AuthDBConnectionJS(); ~AuthDBConnectionJS(); static void New(const v8::FunctionCallbackInfo<v8::Value>& args){ AuthDBConnectionJS* obj = new AuthDBConnectionJS(); obj->Wrap(args.This()); } static v8::Global<v8::Function> constructor; friend class AuthDBClientJS; }; class AuthDBClientJS : public node::ObjectWrap , Client{ public: static void Init(v8::Isolate* isolate){ // Prepare constructor template Local<v8::FunctionTemplate> tpl = v8::FunctionTemplate::New(isolate, New); tpl->SetClassName(String::NewFromUtf8(isolate, "AuthDBClientJS").ToLocalChecked()); tpl->InstanceTemplate()->SetInternalFieldCount(1); Local<Context> context = isolate->GetCurrentContext(); constructor.Reset(isolate, tpl->GetFunction(context).ToLocalChecked()); node::AddEnvironmentCleanupHook(isolate, [](void*) { constructor.Reset(); }, nullptr); } static void NewInstance(const v8::FunctionCallbackInfo<v8::Value>& args){ Isolate* isolate = args.GetIsolate(); const unsigned argc = 1; Local<Value> argv[argc] = { args[0] }; Local<v8::Function> cons = Local<v8::Function>::New(isolate, constructor); Local<Context> context = isolate->GetCurrentContext(); Local<Object> instance = cons->NewInstance(context, argc, argv).ToLocalChecked(); args.GetReturnValue().Set(instance); }; private: explicit AuthDBClientJS(AuthDBConnectionJS &value) : con(value) { }; ~AuthDBClientJS(); if (args.IsConstructCall()) { static void New(const v8::FunctionCallbackInfo<v8::Value>& args){ Isolate* isolate = args.GetIsolate(); if (args.IsConstructCall() && args[0]->IsObject() ) { // Invoked as constructor: `new MyObject(...)` double value = args[0]->IsUndefined() ? 0 : args[0]->NumberValue(context).FromMaybe(0); AuthDBJS* obj = new AuthDBJS(value); AuthDBConnectionJS *cons=ObjectWrap::Unwrap<AuthDBConnectionJS>(args[0].As<Object>()); AuthDBClientJS* obj = new AuthDBClientJS(*cons); obj->Wrap(args.This()); args.GetReturnValue().Set(args.This()); } else { // Invoked as plain function `MyObject(...)`, turn into construct call. const int argc = 1; Local<Value> argv[argc] = { args[0] }; Local<v8::Function> cons = Local<v8::Function>::New(isolate, constructor); Local<Object> instance = cons->NewInstance(context, argc, argv).ToLocalChecked(); args.GetReturnValue().Set(instance); throw AuthBackendError("no Connection given to Auth::client !"); } } static v8::Global<v8::Function> constructor; double value_; ClientConnections &con; }; void CreateObject(const FunctionCallbackInfo<Value>& args) { AuthDBJS::NewInstance(args); AuthDBClientJS::NewInstance(args); AuthDBConnectionJS::NewInstance(args); } void InitAll(Local<Object> exports) { AuthDBJS::Init(exports->GetIsolate()); AuthDBConnectionJS::Init(exports->GetIsolate()); AuthDBClientJS::Init(exports->GetIsolate()); NODE_SET_METHOD(exports, "createObject", CreateObject); } Loading Loading
bindings/nodesjs.cpp +55 −21 Changes for bindings/nodesjs.cpp: 55 added lines, 21 removed lines. Original line number Diff line number Diff line Loading @@ -43,12 +43,12 @@ using v8::Object; using v8::String; using v8::Value; class AuthDBJS : public node::ObjectWrap , Client{ class AuthDBConnectionJS : public node::ObjectWrap , ClientConnections{ public: static void Init(v8::Isolate* isolate){ // Prepare constructor template Local<v8::FunctionTemplate> tpl = v8::FunctionTemplate::New(isolate, New); tpl->SetClassName(String::NewFromUtf8(isolate, "AuthDBJS").ToLocalChecked()); tpl->SetClassName(String::NewFromUtf8(isolate, "AuthDBConnectionJS").ToLocalChecked()); tpl->InstanceTemplate()->SetInternalFieldCount(1); Local<Context> context = isolate->GetCurrentContext(); Loading @@ -63,50 +63,84 @@ public: Isolate* isolate = args.GetIsolate(); const unsigned argc = 1; Local<Value> argv[argc] = { args[0] }; Local<v8::Function> cons = Local<v8::Function>::New(isolate, constructor); Local<Context> context = isolate->GetCurrentContext(); Local<Object> instance = cons->NewInstance(context, argc, argv).ToLocalChecked(); Local<Object> instance = cons->NewInstance(context).ToLocalChecked(); args.GetReturnValue().Set(instance); }; private: explicit AuthDBJS(double value = 0); ~AuthDBJS(); explicit AuthDBConnectionJS(); ~AuthDBConnectionJS(); static void New(const v8::FunctionCallbackInfo<v8::Value>& args){ AuthDBConnectionJS* obj = new AuthDBConnectionJS(); obj->Wrap(args.This()); } static v8::Global<v8::Function> constructor; friend class AuthDBClientJS; }; class AuthDBClientJS : public node::ObjectWrap , Client{ public: static void Init(v8::Isolate* isolate){ // Prepare constructor template Local<v8::FunctionTemplate> tpl = v8::FunctionTemplate::New(isolate, New); tpl->SetClassName(String::NewFromUtf8(isolate, "AuthDBClientJS").ToLocalChecked()); tpl->InstanceTemplate()->SetInternalFieldCount(1); Local<Context> context = isolate->GetCurrentContext(); constructor.Reset(isolate, tpl->GetFunction(context).ToLocalChecked()); node::AddEnvironmentCleanupHook(isolate, [](void*) { constructor.Reset(); }, nullptr); } static void NewInstance(const v8::FunctionCallbackInfo<v8::Value>& args){ Isolate* isolate = args.GetIsolate(); const unsigned argc = 1; Local<Value> argv[argc] = { args[0] }; Local<v8::Function> cons = Local<v8::Function>::New(isolate, constructor); Local<Context> context = isolate->GetCurrentContext(); Local<Object> instance = cons->NewInstance(context, argc, argv).ToLocalChecked(); args.GetReturnValue().Set(instance); }; private: explicit AuthDBClientJS(AuthDBConnectionJS &value) : con(value) { }; ~AuthDBClientJS(); if (args.IsConstructCall()) { static void New(const v8::FunctionCallbackInfo<v8::Value>& args){ Isolate* isolate = args.GetIsolate(); if (args.IsConstructCall() && args[0]->IsObject() ) { // Invoked as constructor: `new MyObject(...)` double value = args[0]->IsUndefined() ? 0 : args[0]->NumberValue(context).FromMaybe(0); AuthDBJS* obj = new AuthDBJS(value); AuthDBConnectionJS *cons=ObjectWrap::Unwrap<AuthDBConnectionJS>(args[0].As<Object>()); AuthDBClientJS* obj = new AuthDBClientJS(*cons); obj->Wrap(args.This()); args.GetReturnValue().Set(args.This()); } else { // Invoked as plain function `MyObject(...)`, turn into construct call. const int argc = 1; Local<Value> argv[argc] = { args[0] }; Local<v8::Function> cons = Local<v8::Function>::New(isolate, constructor); Local<Object> instance = cons->NewInstance(context, argc, argv).ToLocalChecked(); args.GetReturnValue().Set(instance); throw AuthBackendError("no Connection given to Auth::client !"); } } static v8::Global<v8::Function> constructor; double value_; ClientConnections &con; }; void CreateObject(const FunctionCallbackInfo<Value>& args) { AuthDBJS::NewInstance(args); AuthDBClientJS::NewInstance(args); AuthDBConnectionJS::NewInstance(args); } void InitAll(Local<Object> exports) { AuthDBJS::Init(exports->GetIsolate()); AuthDBConnectionJS::Init(exports->GetIsolate()); AuthDBClientJS::Init(exports->GetIsolate()); NODE_SET_METHOD(exports, "createObject", CreateObject); } Loading