diff --git a/.gitignore b/.gitignore index 8d251dd..afa07c1 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ npm-debug.log build/ node_modules/ +.idea \ No newline at end of file diff --git a/binding.gyp b/binding.gyp index 921c42c..35bd721 100644 --- a/binding.gyp +++ b/binding.gyp @@ -1,7 +1,7 @@ { 'targets': [ { - 'target_name': 'binding', + 'target_name': 'xpc-connection', 'conditions': [ ['OS=="mac"', { 'sources': [ @@ -25,4 +25,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/index.js b/index.js index e331a80..9a3c0c5 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,6 @@ var events = require('events'); -var binding = require('./build/Release/binding.node'); +var binding = require('bindings')('xpc-connection.node'); var XpcConnection = binding.XpcConnection; inherits(XpcConnection, events.EventEmitter); diff --git a/package.json b/package.json index 0d65f21..10642e4 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "darwin" ], "dependencies": { + "bindings": "~1.3.0", "nan": "^2.4.0" } } diff --git a/src/XpcConnection.cpp b/src/XpcConnection.cpp index 480e1a6..1e9ad15 100644 --- a/src/XpcConnection.cpp +++ b/src/XpcConnection.cpp @@ -23,12 +23,13 @@ NAN_MODULE_INIT(XpcConnection::Init) { Nan::SetPrototypeMethod(tmpl, "setup", Setup); Nan::SetPrototypeMethod(tmpl, "sendMessage", SendMessage); - target->Set(Nan::New("XpcConnection").ToLocalChecked(), tmpl->GetFunction()); + Nan::Set(target, Nan::New("XpcConnection").ToLocalChecked(), Nan::GetFunction(tmpl).ToLocalChecked()); } XpcConnection::XpcConnection(std::string serviceName) : node::ObjectWrap(), - serviceName(serviceName) { + serviceName(serviceName), + asyncResource("XpcConnection") { this->asyncHandle = new uv_async_t; @@ -100,7 +101,7 @@ xpc_object_t XpcConnection::ValueToXpcObject(Local value) { xpc_object_t xpcObject = NULL; if (value->IsInt32() || value->IsUint32()) { - xpcObject = xpc_int64_create(value->IntegerValue()); + xpcObject = xpc_int64_create(Nan::To(value).FromJust()); } else if (value->IsString()) { Nan::Utf8String valueString(value); @@ -110,9 +111,10 @@ xpc_object_t XpcConnection::ValueToXpcObject(Local value) { xpcObject = XpcConnection::ArrayToXpcObject(valueArray); } else if (node::Buffer::HasInstance(value)) { - Local valueObject = value->ToObject(); + Local valueObject = Nan::To(value).ToLocalChecked(); - if (valueObject->HasRealNamedProperty(Nan::New("isUuid").ToLocalChecked())) { + + if (Nan::HasRealNamedProperty(valueObject, Nan::New("isUuid").ToLocalChecked()).FromJust()) { uuid_t *uuid = (uuid_t *)node::Buffer::Data(valueObject); xpcObject = xpc_uuid_create(*uuid); @@ -120,7 +122,7 @@ xpc_object_t XpcConnection::ValueToXpcObject(Local value) { xpcObject = xpc_data_create(node::Buffer::Data(valueObject), node::Buffer::Length(valueObject)); } } else if (value->IsObject()) { - Local valueObject = value->ToObject(); + Local valueObject = Nan::To(value).ToLocalChecked(); xpcObject = XpcConnection::ObjectToXpcObject(valueObject); } else { @@ -132,15 +134,15 @@ xpc_object_t XpcConnection::ValueToXpcObject(Local value) { xpc_object_t XpcConnection::ObjectToXpcObject(Local object) { xpc_object_t xpcObject = xpc_dictionary_create(NULL, NULL, 0); - Local propertyNames = object->GetPropertyNames(); + Local propertyNames = Nan::GetPropertyNames(object).ToLocalChecked(); for(uint32_t i = 0; i < propertyNames->Length(); i++) { - Local propertyName = propertyNames->Get(i); + Local propertyName = Nan::Get(propertyNames, i).ToLocalChecked(); if (propertyName->IsString()) { Nan::Utf8String propertyNameString(propertyName); - Local propertyValue = object->GetRealNamedProperty(propertyName->ToString()); + Local propertyValue = Nan::GetRealNamedProperty(object, Nan::To(propertyName).ToLocalChecked()).ToLocalChecked(); xpc_object_t xpcValue = XpcConnection::ValueToXpcObject(propertyValue); xpc_dictionary_set_value(xpcObject, *propertyNameString, xpcValue); @@ -157,7 +159,7 @@ xpc_object_t XpcConnection::ArrayToXpcObject(Local array) { xpc_object_t xpcArray = xpc_array_create(NULL, 0); for(uint32_t i = 0; i < array->Length(); i++) { - Local value = array->Get(i); + Local value = Nan::Get(array, i).ToLocalChecked(); xpc_object_t xpcValue = XpcConnection::ValueToXpcObject(value); xpc_array_append_value(xpcArray, xpcValue); @@ -197,7 +199,7 @@ Local XpcConnection::XpcDictionaryToObject(xpc_object_t xpcDictionary) { Local object = Nan::New(); xpc_dictionary_apply(xpcDictionary, ^bool(const char *key, xpc_object_t value) { - object->Set(Nan::New(key).ToLocalChecked(), XpcConnection::XpcObjectToValue(value)); + Nan::Set(object, Nan::New(key).ToLocalChecked(), XpcConnection::XpcObjectToValue(value)); return true; }); @@ -209,7 +211,7 @@ Local XpcConnection::XpcArrayToArray(xpc_object_t xpcArray) { Local array = Nan::New(); xpc_array_apply(xpcArray, ^bool(size_t index, xpc_object_t value) { - array->Set(Nan::New(index), XpcConnection::XpcObjectToValue(value)); + Nan::Set(array, Nan::New(index), XpcConnection::XpcObjectToValue(value)); return true; }); @@ -251,7 +253,7 @@ void XpcConnection::processEventQueue() { Nan::New(message).ToLocalChecked() }; - Nan::MakeCallback(Nan::New(this->This), Nan::New("emit").ToLocalChecked(), 2, argv); + this->asyncResource.runInAsyncScope(Nan::New(this->This), Nan::New("emit").ToLocalChecked(), 2, argv); } else if (eventType == XPC_TYPE_DICTIONARY) { Local eventObject = XpcConnection::XpcDictionaryToObject(event); @@ -260,7 +262,7 @@ void XpcConnection::processEventQueue() { eventObject }; - Nan::MakeCallback(Nan::New(this->This), Nan::New("emit").ToLocalChecked(), 2, argv); + this->asyncResource.runInAsyncScope(Nan::New(this->This), Nan::New("emit").ToLocalChecked(), 2, argv); } xpc_release(event); diff --git a/src/XpcConnection.h b/src/XpcConnection.h index 114ed58..ab98277 100644 --- a/src/XpcConnection.h +++ b/src/XpcConnection.h @@ -45,6 +45,7 @@ class XpcConnection : public node::ObjectWrap { xpc_connection_t xpcConnnection; Nan::Persistent This; + Nan::AsyncResource asyncResource; uv_async_t* asyncHandle; uv_mutex_t eventQueueMutex;