Skip to content

Commit 4e4a157

Browse files
author
Jan Krems
committed
Upgrade nan to 2.x
1 parent ac88a1a commit 4e4a157

File tree

3 files changed

+125
-102
lines changed

3 files changed

+125
-102
lines changed

.travis.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ language: node_js
22
node_js:
33
- 0.8
44
- 0.10
5-
- iojs
5+
- iojs-v2
6+
- iojs-v3

curllib.cc

Lines changed: 122 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -17,36 +17,58 @@ using namespace node;
1717
using namespace v8;
1818

1919
#define THROW_BAD_ARGS \
20-
NanThrowTypeError("Bad argument")
20+
Nan::ThrowTypeError("Bad argument")
21+
22+
#define LOCAL_STRING_HANDLE(text) \
23+
Nan::New<String>(text).ToLocalChecked()
2124

2225
#define PERSISTENT_STRING(id, text) \
23-
NanAssignPersistent<String>(id, NanNew<String>(text))
26+
id.Reset(LOCAL_STRING_HANDLE(text))
27+
28+
#define IS_STRING_PROP(obj, key) \
29+
Nan::Get(obj, key).ToLocalChecked()->IsString()
30+
31+
#define IS_NUMBER_PROP(obj, key) \
32+
Nan::Get(obj, key).ToLocalChecked()->IsNumber()
33+
34+
#define HAS_STRING_PROP(obj, key) \
35+
Nan::Has(obj, key).FromJust() && IS_STRING_PROP(obj, key)
36+
37+
#define HAS_NUMBER_PROP(obj, key) \
38+
Nan::Has(obj, key).FromJust() && IS_NUMBER_PROP(obj, key)
39+
40+
#define GET_STRING_PROP(obj, key) \
41+
Nan::Get(obj, key).ToLocalChecked()->ToString()
42+
43+
#define GET_INT_PROP(obj, key) \
44+
Nan::Get(obj, key).ToLocalChecked()->IntegerValue()
2445

2546
typedef std::vector<char> buff_t;
2647

27-
class CurlLib : ObjectWrap {
48+
class CurlLib : Nan::ObjectWrap {
2849
private:
2950
static std::string buffer;
3051
static std::vector<std::string> headers;
31-
static Persistent<String> sym_body_length;
32-
static Persistent<String> sym_headers;
33-
static Persistent<String> sym_timedout;
34-
static Persistent<String> sym_error;
52+
static Nan::Persistent<String> sym_body_length;
53+
static Nan::Persistent<String> sym_headers;
54+
static Nan::Persistent<String> sym_timedout;
55+
static Nan::Persistent<String> sym_error;
3556

3657
public:
37-
static Persistent<Function> s_constructor;
58+
static Nan::Persistent<Function> s_constructor;
3859
static void Init(Handle<Object> target) {
39-
Local<FunctionTemplate> t = NanNew<FunctionTemplate>(New);
60+
Local<FunctionTemplate> t = Nan::New<FunctionTemplate>(New);
61+
Local<String> className = LOCAL_STRING_HANDLE("CurlLib");
4062

4163
t->InstanceTemplate()->SetInternalFieldCount(1);
42-
t->SetClassName(NanNew<String>("CurlLib"));
64+
t->SetClassName(className);
4365

44-
NODE_SET_PROTOTYPE_METHOD(t, "run", Run);
45-
NODE_SET_PROTOTYPE_METHOD(t, "body", Body);
66+
Nan::SetPrototypeMethod(t, "run", Run);
67+
Nan::SetPrototypeMethod(t, "body", Body);
4668

47-
NanAssignPersistent<Function>(s_constructor, t->GetFunction());
48-
target->Set(NanNew<String>("CurlLib"),
49-
t->GetFunction());
69+
Local<Function> tFunction = Nan::GetFunction(t).ToLocalChecked();
70+
s_constructor.Reset(tFunction);
71+
Nan::Set(target, className, tFunction);
5072

5173
PERSISTENT_STRING(sym_body_length, "body_length");
5274
PERSISTENT_STRING(sym_headers, "headers");
@@ -58,10 +80,9 @@ class CurlLib : ObjectWrap {
5880
~CurlLib() { }
5981

6082
static NAN_METHOD(New) {
61-
NanScope();
6283
CurlLib* curllib = new CurlLib();
63-
curllib->Wrap(args.This());
64-
NanReturnValue(args.This());
84+
curllib->Wrap(info.This());
85+
info.GetReturnValue().Set(info.This());
6586
}
6687

6788
static size_t write_data(void *ptr, size_t size,
@@ -80,134 +101,135 @@ class CurlLib : ObjectWrap {
80101
}
81102

82103
static NAN_METHOD(Body) {
83-
NanScope();
84104

85-
if (args.Length() < 1 || !Buffer::HasInstance(args[0])) {
105+
if (info.Length() < 1 || !Buffer::HasInstance(info[0])) {
86106
return THROW_BAD_ARGS;
87107
}
88108

89-
Local<Object> buffer_obj = args[0]->ToObject();
109+
Local<Object> buffer_obj = info[0]->ToObject();
90110
char *buffer_data = Buffer::Data(buffer_obj);
91111
size_t buffer_length = Buffer::Length(buffer_obj);
92112

93113
if (buffer_length < buffer.size()) {
94-
return NanThrowTypeError("Insufficient Buffer Length");
114+
return Nan::ThrowTypeError("Insufficient Buffer Length");
95115
}
96116

97117
if (!buffer.empty()) {
98118
memcpy(buffer_data, buffer.data(), buffer.size());
99119
}
100120
buffer.clear();
101-
NanReturnValue(buffer_obj);
121+
info.GetReturnValue().Set(buffer_obj);
102122
}
103123

104124
static NAN_METHOD(Run) {
105-
NanScope();
106125

107-
if (args.Length() < 1) {
126+
if (info.Length() < 1) {
108127
return THROW_BAD_ARGS;
109128
}
110129

111-
Local<String> key_method = NanNew<String>("method");
112-
Local<String> key_url = NanNew<String>("url");
113-
Local<String> key_headers = NanNew<String>("headers");
114-
Local<String> key_body = NanNew<String>("body");
115-
Local<String> key_connect_timeout_ms = NanNew<String>("connect_timeout_ms");
116-
Local<String> key_timeout_ms = NanNew<String>("timeout_ms");
117-
Local<String> key_rejectUnauthorized = NanNew<String>("rejectUnauthorized");
118-
Local<String> key_caCert = NanNew<String>("ca");
119-
Local<String> key_clientCert = NanNew<String>("cert");
120-
Local<String> key_pfx = NanNew<String>("pfx");
121-
Local<String> key_clientKey = NanNew<String>("key");
122-
Local<String> key_clientKeyPhrase = NanNew<String>("passphrase");
123-
124-
static const Local<String> PFXFORMAT = NanNew<String>("P12");
125-
126-
Local<Array> opt = Local<Array>::Cast(args[0]);
127-
128-
if (!opt->Has(key_method) ||
129-
!opt->Has(key_url) ||
130-
!opt->Has(key_headers)) {
130+
Local<String> key_method = LOCAL_STRING_HANDLE("method");
131+
Local<String> key_url = LOCAL_STRING_HANDLE("url");
132+
Local<String> key_headers = LOCAL_STRING_HANDLE("headers");
133+
Local<String> key_body = LOCAL_STRING_HANDLE("body");
134+
Local<String> key_connect_timeout_ms = LOCAL_STRING_HANDLE("connect_timeout_ms");
135+
Local<String> key_timeout_ms = LOCAL_STRING_HANDLE("timeout_ms");
136+
Local<String> key_rejectUnauthorized = LOCAL_STRING_HANDLE("rejectUnauthorized");
137+
Local<String> key_caCert = LOCAL_STRING_HANDLE("ca");
138+
Local<String> key_clientCert = LOCAL_STRING_HANDLE("cert");
139+
Local<String> key_pfx = LOCAL_STRING_HANDLE("pfx");
140+
Local<String> key_clientKey = LOCAL_STRING_HANDLE("key");
141+
Local<String> key_clientKeyPhrase = LOCAL_STRING_HANDLE("passphrase");
142+
143+
static const Local<String> PFXFORMAT = LOCAL_STRING_HANDLE("P12");
144+
145+
Local<Array> opt = Local<Array>::Cast(info[0]);
146+
147+
if (!Nan::Has(opt, key_method).FromJust() ||
148+
!Nan::Has(opt, key_url).FromJust() ||
149+
!Nan::Has(opt, key_headers).FromJust()) {
131150
return THROW_BAD_ARGS;
132151
}
133152

134-
if (!opt->Get(key_method)->IsString() ||
135-
!opt->Get(key_url)->IsString()) {
153+
if (!IS_STRING_PROP(opt, key_method) ||
154+
!IS_STRING_PROP(opt, key_url)) {
136155
return THROW_BAD_ARGS;
137156
}
138157

139-
Local<String> method = Local<String>::Cast(opt->Get(key_method));
140-
Local<String> url = Local<String>::Cast(opt->Get(key_url));
141-
Local<Array> reqh = Local<Array>::Cast(opt->Get(key_headers));
142-
Local<String> body = NanNew<String>((const char*)"", 0);
143-
Local<String> caCert = NanNew<String>((const char*)"", 0);
144-
Local<String> clientCert = NanNew<String>((const char*)"", 0);
145-
Local<String> clientCertFormat = NanNew<String>((const char*)"", 0);
146-
Local<String> clientKey = NanNew<String>((const char*)"", 0);
147-
Local<String> clientKeyPhrase = NanNew<String>((const char*)"", 0);
158+
Local<String> method = GET_STRING_PROP(opt, key_method);
159+
Local<String> url = GET_STRING_PROP(opt, key_url);
160+
Local<Array> reqh = Handle<Array>::Cast(Nan::Get(opt, key_headers).ToLocalChecked());
161+
Local<String> body = Nan::EmptyString();
162+
Local<String> caCert = Nan::EmptyString();
163+
Local<String> clientCert = Nan::EmptyString();
164+
Local<String> clientCertFormat = Nan::EmptyString();
165+
Local<String> clientKey = Nan::EmptyString();
166+
Local<String> clientKeyPhrase = Nan::EmptyString();
148167
long connect_timeout_ms = 1 * 60 * 60 * 1000; /* 1 hr in msec */
149168
long timeout_ms = 1 * 60 * 60 * 1000; /* 1 hr in msec */
150169
bool rejectUnauthorized = false;
151170

152-
if (opt->Has(key_caCert) && opt->Get(key_caCert)->IsString()) {
153-
caCert = opt->Get(key_caCert)->ToString();
171+
if (HAS_STRING_PROP(opt, key_caCert)) {
172+
caCert = GET_STRING_PROP(opt, key_caCert);
154173
}
155174

156-
if (opt->Has(key_clientKey) && opt->Get(key_clientKey)->IsString()) {
157-
clientKey = opt->Get(key_clientKey)->ToString();
175+
if (HAS_STRING_PROP(opt, key_clientKey)) {
176+
clientKey = GET_STRING_PROP(opt, key_clientKey);
158177
}
159178

160-
if (opt->Has(key_clientKeyPhrase) && opt->Get(key_clientKeyPhrase)->IsString()) {
161-
clientKeyPhrase = opt->Get(key_clientKeyPhrase)->ToString();
179+
if (HAS_STRING_PROP(opt, key_clientKeyPhrase)) {
180+
clientKeyPhrase = GET_STRING_PROP(opt, key_clientKeyPhrase);
162181
}
163182

164-
if (opt->Has(key_clientCert) && opt->Get(key_clientCert)->IsString()) {
165-
clientCert = opt->Get(key_clientCert)->ToString();
166-
} else if (opt->Has(key_pfx) && opt->Get(key_pfx)->IsString()) {
167-
clientCert = opt->Get(key_pfx)->ToString();
183+
if (HAS_STRING_PROP(opt, key_clientCert)) {
184+
clientCert = GET_STRING_PROP(opt, key_clientCert);
185+
} else if (HAS_STRING_PROP(opt, key_pfx)) {
186+
clientCert = GET_STRING_PROP(opt, key_pfx);
168187
clientCertFormat = PFXFORMAT;
169188
}
170189

171-
if (opt->Has(key_body) && opt->Get(key_body)->IsString()) {
172-
body = opt->Get(key_body)->ToString();
190+
if (HAS_STRING_PROP(opt, key_body)) {
191+
body = GET_STRING_PROP(opt, key_body);
173192
}
174193

175-
if (opt->Has(key_connect_timeout_ms) && opt->Get(key_connect_timeout_ms)->IsNumber()) {
176-
connect_timeout_ms = opt->Get(key_connect_timeout_ms)->IntegerValue();
194+
if (HAS_NUMBER_PROP(opt, key_connect_timeout_ms)) {
195+
connect_timeout_ms = GET_INT_PROP(opt, key_connect_timeout_ms);
177196
}
178197

179-
if (opt->Has(key_timeout_ms) && opt->Get(key_timeout_ms)->IsNumber()) {
180-
timeout_ms = opt->Get(key_timeout_ms)->IntegerValue();
198+
if (HAS_NUMBER_PROP(opt, key_timeout_ms)) {
199+
timeout_ms = GET_INT_PROP(opt, key_timeout_ms);
181200
}
182201

183-
if (opt->Has(key_rejectUnauthorized)) {
202+
if (Nan::Has(opt, key_rejectUnauthorized).FromJust()) {
203+
Local<Value> rejectUnauthorizedValue =
204+
Nan::Get(opt, key_rejectUnauthorized).ToLocalChecked();
205+
184206
// std::cerr<<"has reject unauth"<<std::endl;
185-
if (opt->Get(key_rejectUnauthorized)->IsBoolean()) {
186-
rejectUnauthorized = opt->Get(key_rejectUnauthorized)->BooleanValue();
187-
} else if (opt->Get(key_rejectUnauthorized)->IsBooleanObject()) {
188-
rejectUnauthorized = opt->Get(key_rejectUnauthorized)
207+
if (rejectUnauthorizedValue->IsBoolean()) {
208+
rejectUnauthorized = rejectUnauthorizedValue->BooleanValue();
209+
} else if (rejectUnauthorizedValue->IsBooleanObject()) {
210+
rejectUnauthorized = rejectUnauthorizedValue
189211
->ToBoolean()
190212
->BooleanValue();
191213
}
192214
}
193215

194216
// std::cerr<<"rejectUnauthorized: " << rejectUnauthorized << std::endl;
195217

196-
NanUtf8String _body(body);
197-
NanUtf8String _method(method);
198-
NanUtf8String _url(url);
199-
NanUtf8String _cacert(caCert);
200-
NanUtf8String _clientcert(clientCert);
201-
NanUtf8String _clientcertformat(clientCertFormat);
202-
NanUtf8String _clientkeyphrase(clientKeyPhrase);
203-
NanUtf8String _clientkey(clientKey);
218+
Nan::Utf8String _body(body);
219+
Nan::Utf8String _method(method);
220+
Nan::Utf8String _url(url);
221+
Nan::Utf8String _cacert(caCert);
222+
Nan::Utf8String _clientcert(clientCert);
223+
Nan::Utf8String _clientcertformat(clientCertFormat);
224+
Nan::Utf8String _clientkeyphrase(clientKeyPhrase);
225+
Nan::Utf8String _clientkey(clientKey);
204226

205227
std::vector<std::string> _reqh;
206228
for (size_t i = 0; i < reqh->Length(); ++i) {
207-
_reqh.push_back(*NanUtf8String(reqh->Get(i)));
229+
_reqh.push_back(*Nan::Utf8String(Nan::Get(reqh, i).ToLocalChecked()));
208230
}
209231

210-
// CurlLib* curllib = ObjectWrap::Unwrap<CurlLib>(args.This());
232+
// CurlLib* curllib = Nan::ObjectWrap::Unwrap<CurlLib>(info.This());
211233

212234
buffer.clear();
213235
headers.clear();
@@ -283,34 +305,34 @@ class CurlLib : ObjectWrap {
283305

284306
// std::cerr<<"error_buffer: "<<error_buffer<<std::endl;
285307

286-
Local<Object> result = NanNew<Object>();
308+
Local<Object> result = Nan::New<Object>();
287309

288310
if (!res) {
289-
result->Set(NanNew(sym_body_length), NanNew<Integer>((int32_t)buffer.size()));
290-
Local<Array> _h = NanNew<Array>();
311+
Nan::Set(result, Nan::New(sym_body_length), Nan::New<Integer>((int32_t)buffer.size()));
312+
Local<Array> _h = Nan::New<Array>();
291313
for (size_t i = 0; i < headers.size(); ++i) {
292-
_h->Set(i, NanNew<String>(headers[i].c_str()));
314+
Nan::Set(_h, i, Nan::New<String>(headers[i].c_str()).ToLocalChecked());
293315
}
294-
result->Set(NanNew(sym_headers), _h);
316+
Nan::Set(result, Nan::New<String>(sym_headers), _h);
295317
}
296318
else if (res == CURLE_OPERATION_TIMEDOUT) {
297-
result->Set(NanNew(sym_timedout), NanNew<Integer>(1));
319+
Nan::Set(result, Nan::New<String>(sym_timedout), Nan::New<Integer>(1));
298320
} else {
299-
result->Set(NanNew(sym_error), NanNew<String>(curl_easy_strerror(res)));
321+
Nan::Set(result, Nan::New<String>(sym_error), LOCAL_STRING_HANDLE(curl_easy_strerror(res)));
300322
}
301323

302324
headers.clear();
303-
NanReturnValue(result);
325+
info.GetReturnValue().Set(result);
304326
}
305327
};
306328

307-
Persistent<Function> CurlLib::s_constructor;
329+
Nan::Persistent<Function> CurlLib::s_constructor;
308330
std::string CurlLib::buffer;
309331
std::vector<std::string> CurlLib::headers;
310-
Persistent<String> CurlLib::sym_body_length;
311-
Persistent<String> CurlLib::sym_headers;
312-
Persistent<String> CurlLib::sym_timedout;
313-
Persistent<String> CurlLib::sym_error;
332+
Nan::Persistent<String> CurlLib::sym_body_length;
333+
Nan::Persistent<String> CurlLib::sym_headers;
334+
Nan::Persistent<String> CurlLib::sym_timedout;
335+
Nan::Persistent<String> CurlLib::sym_error;
314336

315337
extern "C" {
316338
static void init (Handle<Object> target) {

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
"gypfile": true,
4848
"readmeFilename": "README.md",
4949
"dependencies": {
50-
"nan": "~1.8.0",
50+
"nan": "~2.0.8",
5151
"caseless": "~0.9.0"
5252
}
5353
}

0 commit comments

Comments
 (0)