e46feeb
commit 1b3d14846e245a541bd7132c96dfeb56cc64b1b1
e46feeb
Author: Tom Hughes <tom@compton.nu>
e46feeb
Date:   Thu Jun 20 14:01:15 2019 +0100
e46feeb
e46feeb
    Update for Node.js 12.x support
e46feeb
e46feeb
diff --git a/src/i2c.cc b/src/i2c.cc
e46feeb
index c7d4bee..968d5fb 100644
e46feeb
--- a/src/i2c.cc
e46feeb
+++ b/src/i2c.cc
e46feeb
@@ -35,7 +35,7 @@ void SetAddress(const Nan::FunctionCallbackInfo<v8::Value>& info) {
e46feeb
     Nan::ThrowTypeError("addr must be an int");
e46feeb
     return;
e46feeb
   }
e46feeb
-  addr = info[0]->Int32Value();
e46feeb
+  addr = Nan::To<int32_t>(info[0]).ToChecked();
e46feeb
   setAddress(addr);
e46feeb
 }
e46feeb
 
e46feeb
@@ -57,15 +57,16 @@ void Scan(const Nan::FunctionCallbackInfo<v8::Value>& info) {
e46feeb
     if (res >= 0) {
e46feeb
       res = i;
e46feeb
     }
e46feeb
-    results->Set(i, Nan::New<Integer>(res));
e46feeb
+    Nan::Set(results, i, Nan::New<Integer>(res));
e46feeb
   }
e46feeb
 
e46feeb
   setAddress(addr);
e46feeb
 
e46feeb
   const unsigned argc = 2;
e46feeb
   Local<Value> argv[argc] = { err, results };
e46feeb
+  Nan::AsyncResource ar("Scan");
e46feeb
 
e46feeb
-  Nan::MakeCallback(Nan::GetCurrentContext()->Global(), callback, argc, argv);
e46feeb
+  ar.runInAsyncScope(Nan::GetCurrentContext()->Global(), callback, argc, argv);
e46feeb
 
e46feeb
   info.GetReturnValue().Set(results);
e46feeb
 }
e46feeb
@@ -81,7 +82,7 @@ void Close(const Nan::FunctionCallbackInfo<v8::Value>& info) {
e46feeb
 void Open(const Nan::FunctionCallbackInfo<v8::Value>& info) {
e46feeb
   Nan::HandleScope scope;
e46feeb
 
e46feeb
-  String::Utf8Value device(info[0]);
e46feeb
+  Nan::Utf8String device(info[0]);
e46feeb
   Local<Value> err = Nan::New<Value>(Nan::Null());
e46feeb
 
e46feeb
   fd = open(*device, O_RDWR);
e46feeb
@@ -93,14 +94,16 @@ void Open(const Nan::FunctionCallbackInfo<v8::Value>& info) {
e46feeb
     const unsigned argc = 1;
e46feeb
     Local<Function> callback = Local<Function>::Cast(info[1]);
e46feeb
     Local<Value> argv[argc] = { err };
e46feeb
-    Nan::MakeCallback(Nan::GetCurrentContext()->Global(), callback, argc, argv);
e46feeb
+    Nan::AsyncResource ar("Open");
e46feeb
+
e46feeb
+    ar.runInAsyncScope(Nan::GetCurrentContext()->Global(), callback, argc, argv);
e46feeb
   }
e46feeb
 }
e46feeb
 
e46feeb
 void Read(const Nan::FunctionCallbackInfo<v8::Value>& info) {
e46feeb
   Nan::HandleScope scope;
e46feeb
 
e46feeb
-  int len = info[0]->Int32Value();
e46feeb
+  int len = Nan::To<int32_t>(info[0]).ToChecked();
e46feeb
 
e46feeb
   Local<Array> data = Nan::New<Array>();
e46feeb
 
e46feeb
@@ -111,7 +114,7 @@ void Read(const Nan::FunctionCallbackInfo<v8::Value>& info) {
e46feeb
     err = Nan::Error(Nan::New("Cannot read from device").ToLocalChecked());
e46feeb
   } else {
e46feeb
     for (int i = 0; i < len; ++i) {
e46feeb
-      data->Set(i, Nan::New<Integer>(buf[i]));
e46feeb
+      Nan::Set(data, i, Nan::New<Integer>(buf[i]));
e46feeb
     }
e46feeb
   }
e46feeb
   delete[] buf;
e46feeb
@@ -120,7 +123,9 @@ void Read(const Nan::FunctionCallbackInfo<v8::Value>& info) {
e46feeb
     const unsigned argc = 2;
e46feeb
     Local<Function> callback = Local<Function>::Cast(info[1]);
e46feeb
     Local<Value> argv[argc] = { err, data };
e46feeb
-    Nan::MakeCallback(Nan::GetCurrentContext()->Global(), callback, argc, argv);
e46feeb
+    Nan::AsyncResource ar("Read");
e46feeb
+
e46feeb
+    ar.runInAsyncScope(Nan::GetCurrentContext()->Global(), callback, argc, argv);
e46feeb
   }
e46feeb
 }
e46feeb
 
e46feeb
@@ -142,7 +147,9 @@ void ReadByte(const Nan::FunctionCallbackInfo<v8::Value>& info) {
e46feeb
     const unsigned argc = 2;
e46feeb
     Local<Function> callback = Local<Function>::Cast(info[0]);
e46feeb
     Local<Value> argv[argc] = { err, data };
e46feeb
-    Nan::MakeCallback(Nan::GetCurrentContext()->Global(), callback, argc, argv);
e46feeb
+    Nan::AsyncResource ar("ReadByte");
e46feeb
+
e46feeb
+    ar.runInAsyncScope(Nan::GetCurrentContext()->Global(), callback, argc, argv);
e46feeb
   }
e46feeb
 
e46feeb
   info.GetReturnValue().Set(data);
e46feeb
@@ -151,8 +158,8 @@ void ReadByte(const Nan::FunctionCallbackInfo<v8::Value>& info) {
e46feeb
 void ReadBlock(const Nan::FunctionCallbackInfo<v8::Value>& info) {
e46feeb
   Nan::HandleScope scope;
e46feeb
 
e46feeb
-  int8_t cmd = info[0]->Int32Value();
e46feeb
-  int32_t len = info[1]->Int32Value();
e46feeb
+  int8_t cmd = Nan::To<int32_t>(info[0]).ToChecked();
e46feeb
+  int32_t len = Nan::To<int32_t>(info[1]).ToChecked();
e46feeb
   uint8_t data[len]; 
e46feeb
   Local<Value> err = Nan::New<Value>(Nan::Null());
e46feeb
   // Local<Object> buffer = node::Buffer::New(len);
e46feeb
@@ -171,11 +178,13 @@ void ReadBlock(const Nan::FunctionCallbackInfo<v8::Value>& info) {
e46feeb
       const unsigned argc = 2;
e46feeb
       Local<Function> callback = Local<Function>::Cast(info[3]);
e46feeb
       Local<Value> argv[argc] = { err, buffer };
e46feeb
-      Nan::MakeCallback(Nan::GetCurrentContext()->Global(), callback, argc, argv);
e46feeb
+      Nan::AsyncResource ar("ReadBlock");
e46feeb
+
e46feeb
+      ar.runInAsyncScope(Nan::GetCurrentContext()->Global(), callback, argc, argv);
e46feeb
     }
e46feeb
  
e46feeb
     if (info[2]->IsNumber()) {
e46feeb
-      int32_t delay = info[2]->Int32Value();
e46feeb
+      int32_t delay = Nan::To<int32_t>(info[2]).ToChecked();
e46feeb
       usleep(delay * 1000);
e46feeb
     } else {
e46feeb
       break;
e46feeb
@@ -190,8 +199,8 @@ void Write(const Nan::FunctionCallbackInfo<v8::Value>& info) {
e46feeb
 
e46feeb
   Local<Value> buffer = info[0];
e46feeb
 
e46feeb
-  int   len = node::Buffer::Length(buffer->ToObject());
e46feeb
-  char* data = node::Buffer::Data(buffer->ToObject());
e46feeb
+  int   len = node::Buffer::Length(Nan::To<Object>(buffer).ToLocalChecked());
e46feeb
+  char* data = node::Buffer::Data(Nan::To<Object>(buffer).ToLocalChecked());
e46feeb
 
e46feeb
   Local<Value> err = Nan::New<Value>(Nan::Null());
e46feeb
 
e46feeb
@@ -203,14 +212,16 @@ void Write(const Nan::FunctionCallbackInfo<v8::Value>& info) {
e46feeb
     const unsigned argc = 1;
e46feeb
     Local<Function> callback = Local<Function>::Cast(info[1]);
e46feeb
     Local<Value> argv[argc] = { err };
e46feeb
-    Nan::MakeCallback(Nan::GetCurrentContext()->Global(), callback, argc, argv);
e46feeb
+    Nan::AsyncResource ar("Write");
e46feeb
+
e46feeb
+    ar.runInAsyncScope(Nan::GetCurrentContext()->Global(), callback, argc, argv);
e46feeb
   }
e46feeb
 }
e46feeb
 
e46feeb
 void WriteByte(const Nan::FunctionCallbackInfo<v8::Value>& info) {
e46feeb
   Nan::HandleScope scope;
e46feeb
 
e46feeb
-  int8_t byte = info[0]->Int32Value();
e46feeb
+  int8_t byte = Nan::To<int32_t>(info[0]).ToChecked();
e46feeb
   Local<Value> err = Nan::New<Value>(Nan::Null());
e46feeb
 
e46feeb
   if (i2c_smbus_write_byte(fd, byte) == -1) {
e46feeb
@@ -221,7 +232,9 @@ void WriteByte(const Nan::FunctionCallbackInfo<v8::Value>& info) {
e46feeb
     const unsigned argc = 1;
e46feeb
     Local<Function> callback = Local<Function>::Cast(info[1]);
e46feeb
     Local<Value> argv[argc] = { err };
e46feeb
-    Nan::MakeCallback(Nan::GetCurrentContext()->Global(), callback, argc, argv);
e46feeb
+    Nan::AsyncResource ar("WriteByte");
e46feeb
+
e46feeb
+    ar.runInAsyncScope(Nan::GetCurrentContext()->Global(), callback, argc, argv);
e46feeb
   }
e46feeb
 }
e46feeb
 
e46feeb
@@ -229,9 +242,9 @@ void WriteBlock(const Nan::FunctionCallbackInfo<v8::Value>& info) {
e46feeb
   Nan::HandleScope scope;
e46feeb
 
e46feeb
   Local<Value> buffer = info[1];
e46feeb
-  int8_t cmd = info[0]->Int32Value();
e46feeb
-  int   len = node::Buffer::Length(buffer->ToObject());
e46feeb
-  char* data = node::Buffer::Data(buffer->ToObject());
e46feeb
+  int8_t cmd = Nan::To<int32_t>(info[0]).ToChecked();
e46feeb
+  int   len = node::Buffer::Length(Nan::To<Object>(buffer).ToLocalChecked());
e46feeb
+  char* data = node::Buffer::Data(Nan::To<Object>(buffer).ToLocalChecked());
e46feeb
 
e46feeb
   Local<Value> err = Nan::New<Value>(Nan::Null());
e46feeb
 
e46feeb
@@ -243,15 +256,17 @@ void WriteBlock(const Nan::FunctionCallbackInfo<v8::Value>& info) {
e46feeb
     const unsigned argc = 1;
e46feeb
     Local<Function> callback = Local<Function>::Cast(info[2]);
e46feeb
     Local<Value> argv[argc] = { err };
e46feeb
-    Nan::MakeCallback(Nan::GetCurrentContext()->Global(), callback, argc, argv);
e46feeb
+    Nan::AsyncResource ar("WriteBlock");
e46feeb
+
e46feeb
+    ar.runInAsyncScope(Nan::GetCurrentContext()->Global(), callback, argc, argv);
e46feeb
   }
e46feeb
 }
e46feeb
 
e46feeb
 void WriteWord(const Nan::FunctionCallbackInfo<v8::Value>& info) {
e46feeb
   Nan::HandleScope scope;
e46feeb
   
e46feeb
-  int8_t cmd = info[0]->Int32Value();
e46feeb
-  int16_t word = info[1]->Int32Value();
e46feeb
+  int8_t cmd = Nan::To<int32_t>(info[0]).ToChecked();
e46feeb
+  int16_t word = Nan::To<int32_t>(info[1]).ToChecked();
e46feeb
 
e46feeb
   Local<Value> err = Nan::New<Value>(Nan::Null());
e46feeb
   
e46feeb
@@ -263,33 +278,25 @@ void WriteWord(const Nan::FunctionCallbackInfo<v8::Value>& info) {
e46feeb
     const unsigned argc = 1;
e46feeb
     Local<Function> callback = Local<Function>::Cast(info[2]);
e46feeb
     Local<Value> argv[argc] = { err };
e46feeb
-    Nan::MakeCallback(Nan::GetCurrentContext()->Global(), callback, argc, argv);
e46feeb
+    Nan::AsyncResource ar("WriteWord");
e46feeb
+
e46feeb
+    ar.runInAsyncScope(Nan::GetCurrentContext()->Global(), callback, argc, argv);
e46feeb
   }
e46feeb
 }
e46feeb
 
e46feeb
-void Init(Handle<Object> exports) {
e46feeb
-
e46feeb
-  exports->Set(Nan::New("setAddress").ToLocalChecked(),
e46feeb
-               Nan::New<v8::FunctionTemplate>(SetAddress)->GetFunction());
e46feeb
-  exports->Set(Nan::New("scan").ToLocalChecked(),
e46feeb
-               Nan::New<v8::FunctionTemplate>(Scan)->GetFunction());
e46feeb
-  exports->Set(Nan::New("open").ToLocalChecked(),
e46feeb
-               Nan::New<v8::FunctionTemplate>(Open)->GetFunction());
e46feeb
-  exports->Set(Nan::New("close").ToLocalChecked(),
e46feeb
-               Nan::New<v8::FunctionTemplate>(Close)->GetFunction());
e46feeb
-  exports->Set(Nan::New("write").ToLocalChecked(),
e46feeb
-               Nan::New<v8::FunctionTemplate>(Write)->GetFunction());
e46feeb
-  exports->Set(Nan::New("writeByte").ToLocalChecked(),
e46feeb
-               Nan::New<v8::FunctionTemplate>(WriteByte)->GetFunction());
e46feeb
-  exports->Set(Nan::New("writeBlock").ToLocalChecked(),
e46feeb
-               Nan::New<v8::FunctionTemplate>(WriteBlock)->GetFunction());
e46feeb
-  exports->Set(Nan::New("read").ToLocalChecked(),
e46feeb
-               Nan::New<v8::FunctionTemplate>(Read)->GetFunction());
e46feeb
-  exports->Set(Nan::New("readByte").ToLocalChecked(),
e46feeb
-               Nan::New<v8::FunctionTemplate>(ReadByte)->GetFunction());
e46feeb
-  exports->Set(Nan::New("readBlock").ToLocalChecked(),
e46feeb
-               Nan::New<v8::FunctionTemplate>(ReadBlock)->GetFunction());
e46feeb
+NAN_MODULE_INIT(Init) {
e46feeb
+
e46feeb
+  Nan::Export(target, "setAddress", SetAddress);
e46feeb
+  Nan::Export(target, "scan", Scan);
e46feeb
+  Nan::Export(target, "open", Open);
e46feeb
+  Nan::Export(target, "close", Close);
e46feeb
+  Nan::Export(target, "write", Write);
e46feeb
+  Nan::Export(target, "writeByte", WriteByte);
e46feeb
+  Nan::Export(target, "writeBlock", WriteBlock);
e46feeb
+  Nan::Export(target, "read", Read);
e46feeb
+  Nan::Export(target, "readByte", ReadByte);
e46feeb
+  Nan::Export(target, "readBlock", ReadBlock);
e46feeb
 
e46feeb
 }
e46feeb
 
e46feeb
-NODE_MODULE(i2c, Init)
e46feeb
\ No newline at end of file
e46feeb
+NAN_MODULE_WORKER_ENABLED(i2c, Init)