/*********************************************************************
* NAN - Native Abstractions for Node.js
*
* Copyright (c) 2018 NAN contributors
*
* MIT License
********************************************************************/
#include
#include
NAN_METHOD(Stringify) {
if (info.Length() > 0) {
Nan::MaybeLocal maybe_obj = Nan::To(info[0]);
if (!maybe_obj.IsEmpty()) {
Nan::JSON NanJSON;
v8::Local obj = maybe_obj.ToLocalChecked();
if (3 == info.Length()) {
if (info[2]->IsNumber()) {
int32_t len = Nan::To(info[2]).FromJust();
len = (len > 10) ? 10 : len;
len = (len < 0) ? 0 : len;
Nan::MaybeLocal maybe_gap =
Nan::New(std::string(len, ' '));
if (!maybe_gap.IsEmpty()) {
v8::Local gap = maybe_gap.ToLocalChecked();
Nan::MaybeLocal result =
NanJSON.Stringify(obj, gap);
if (!result.IsEmpty()) {
info.GetReturnValue().Set(result.ToLocalChecked());
}
}
} else if (info[2]->IsString()) {
Nan::MaybeLocal result = NanJSON.Stringify(
obj,
Nan::To(info[2]).ToLocalChecked()
);
if (!result.IsEmpty()) {
info.GetReturnValue().Set(result.ToLocalChecked());
}
} else {
Nan::MaybeLocal result = NanJSON.Stringify(obj);
if (!result.IsEmpty()) {
info.GetReturnValue().Set(result.ToLocalChecked());
}
}
} else {
Nan::MaybeLocal result = NanJSON.Stringify(obj);
if (!result.IsEmpty()) {
info.GetReturnValue().Set(result.ToLocalChecked());
}
}
}
}
}
NAN_MODULE_INIT(Init) {
Nan::Set(target
, Nan::New("stringify").ToLocalChecked()
, Nan::GetFunction(Nan::New(Stringify))
.ToLocalChecked()
);
}
NODE_MODULE(stringify, Init)