/********************************************************************* * 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)