void TNodeJsFOut::New(const v8::FunctionCallbackInfo<v8::Value>& Args) { v8::Isolate* Isolate = v8::Isolate::GetCurrent(); v8::EscapableHandleScope HandleScope(Isolate); if (Args.IsConstructCall()) { EAssertR(Args.Length() >= 1 && Args[0]->IsString(), "Expected file path."); TStr FNm(*v8::String::Utf8Value(Args[0]->ToString())); bool AppendP = Args.Length() >= 2 && Args[1]->IsBoolean() && Args[1]->BooleanValue(); TNodeJsFOut* JsFOut = new TNodeJsFOut(FNm, AppendP); v8::Local<v8::Object> Instance = Args.This(); JsFOut->Wrap(Instance); Args.GetReturnValue().Set(Instance); } else { const int Argc = 1; v8::Local<v8::Value> Argv[Argc] = { Args[0] }; v8::Local<v8::Function> cons = v8::Local<v8::Function>::New(Isolate, constructor); cons->NewInstance(Argc, Argv); v8::Local<v8::Object> Instance = cons->NewInstance(Argc, Argv); Args.GetReturnValue().Set(Instance); } }
void TNodeJsFIn::New(const v8::FunctionCallbackInfo<v8::Value>& Args) { v8::Isolate* Isolate = v8::Isolate::GetCurrent(); v8::HandleScope HandleScope(Isolate); if (Args.IsConstructCall()) { EAssertR(Args.Length() == 1 && Args[0]->IsString(), "Expected a file path."); TStr FNm(*v8::String::Utf8Value(Args[0]->ToString())); EAssertR(TFile::Exists(FNm), "File does not exist."); TNodeJsFIn* JsFIn = new TNodeJsFIn(FNm); v8::Local<v8::Object> Instance = Args.This(); v8::Handle<v8::String> key = v8::String::NewFromUtf8(Isolate, "class"); v8::Handle<v8::String> value = v8::String::NewFromUtf8(Isolate, ClassId.CStr()); Instance->SetHiddenValue(key, value); JsFIn->Wrap(Instance); Args.GetReturnValue().Set(Instance); } else { const int Argc = 1; v8::Local<v8::Value> Argv[Argc] = { Args[0] }; v8::Local<v8::Function> cons = v8::Local<v8::Function>::New(Isolate, constructor); v8::Local<v8::Object> Instance = cons->NewInstance(Argc, Argv); Args.GetReturnValue().Set(Instance); } }
void TNodeJsFs::openAppend(const v8::FunctionCallbackInfo<v8::Value>& Args) { // Call with AppendP = true v8::Isolate* Isolate = v8::Isolate::GetCurrent(); v8::HandleScope HandleScope(Isolate); EAssertR(Args.Length() == 1 && Args[0]->IsString(), "Expected file path."); TStr FNm(*v8::String::Utf8Value(Args[0]->ToString())); Args.GetReturnValue().Set(TNodeJsFOut::New(FNm, true)); }
void TNodeJsFs::exists(const v8::FunctionCallbackInfo<v8::Value>& Args) { v8::Isolate* Isolate = v8::Isolate::GetCurrent(); v8::HandleScope HandleScope(Isolate); EAssertR(Args.Length() == 1 && Args[0]->IsString(), "Expected file path."); TStr FNm(*v8::String::Utf8Value(Args[0]->ToString())); Args.GetReturnValue().Set(v8::Boolean::New(Isolate, TFile::Exists(FNm))); }
void TNodeJsFs::del(const v8::FunctionCallbackInfo<v8::Value>& Args) { v8::Isolate* Isolate = v8::Isolate::GetCurrent(); v8::HandleScope HandleScope(Isolate); EAssertR(Args.Length() == 1 && Args[0]->IsString(), "Expected a file path as the only argument."); TStr FNm(*v8::String::Utf8Value(Args[0]->ToString())); EAssertR(TFile::Exists(FNm), TStr("File '" + FNm + "' does not exist").CStr()); Args.GetReturnValue().Set(v8::Boolean::New(Isolate, TFile::Del(FNm, false))); // ThrowExceptP = false }
void TNodeJsFs::openRead(const v8::FunctionCallbackInfo<v8::Value>& Args) { v8::Isolate* Isolate = v8::Isolate::GetCurrent(); v8::HandleScope HandleScope(Isolate); EAssertR(Args.Length() == 1 && Args[0]->IsString(), "Expected file path."); TStr FNm(*v8::String::Utf8Value(Args[0]->ToString())); EAssertR(TFile::Exists(FNm), TStr("File '" + FNm + "' does not exist").CStr()); Args.GetReturnValue().Set(TNodeJsFIn::New(FNm)); }
void TNodeJsFs::openRead(const v8::FunctionCallbackInfo<v8::Value>& Args) { v8::Isolate* Isolate = v8::Isolate::GetCurrent(); v8::HandleScope HandleScope(Isolate); EAssertR(Args.Length() == 1 && Args[0]->IsString(), "Expected file path."); TStr FNm(*v8::String::Utf8Value(Args[0]->ToString())); // file exist check is done by TFIn Args.GetReturnValue().Set( TNodeJsUtil::NewInstance<TNodeJsFIn>(new TNodeJsFIn(FNm))); }
void TNodeJsFOut::New(const v8::FunctionCallbackInfo<v8::Value>& Args) { EAssertR(Args.IsConstructCall(), "TNodeJsFOut: not a constructor call (you forgot to use the new operator)"); v8::Isolate* Isolate = v8::Isolate::GetCurrent(); v8::EscapableHandleScope HandleScope(Isolate); // set hidden class id v8::Local<v8::Object> Instance = Args.This(); v8::Handle<v8::String> key = v8::String::NewFromUtf8(Isolate, "class"); v8::Handle<v8::String> value = v8::String::NewFromUtf8(Isolate, GetClassId().CStr()); Instance->SetHiddenValue(key, value); // empty constructor call just forwards the instance if (Args.Length() == 0) { Args.GetReturnValue().Set(Instance); return; } // parse arguments EAssertR(Args.Length() >= 1 && Args[0]->IsString(), "Expected file path."); TStr FNm(*v8::String::Utf8Value(Args[0]->ToString())); bool AppendP = Args.Length() >= 2 && Args[1]->IsBoolean() && Args[1]->BooleanValue(); // Args.This() is an instance, wrap our C++ object TNodeJsFOut* Obj = new TNodeJsFOut(FNm, AppendP); Obj->Wrap(Instance); Args.GetReturnValue().Set(Instance); }
void TNodeJsFs::fileInfo(const v8::FunctionCallbackInfo<v8::Value>& Args) { v8::Isolate* Isolate = v8::Isolate::GetCurrent(); v8::HandleScope HandleScope(Isolate); EAssertR(Args.Length() == 1 && Args[0]->IsString(), "Expected a file path as the only argument."); TStr FNm(*v8::String::Utf8Value(Args[0]->ToString())); EAssertR(TFile::Exists(FNm), TStr("File '" + FNm + "' does not exist").CStr()); const uint64 CreateTm = TFile::GetCreateTm(FNm); const uint64 LastAccessTm = TFile::GetLastAccessTm(FNm); const uint64 LastWriteTm = TFile::GetLastWriteTm(FNm); const uint64 Size = TFile::GetSize(FNm); v8::Handle<v8::Object> Obj = v8::Object::New(Isolate); Obj->Set(v8::String::NewFromUtf8(Isolate, "createTime"), v8::String::NewFromUtf8(Isolate, TTm::GetTmFromMSecs(CreateTm).GetWebLogDateTimeStr().CStr())); Obj->Set(v8::String::NewFromUtf8(Isolate, "lastAccessTime"), v8::String::NewFromUtf8(Isolate, TTm::GetTmFromMSecs(LastAccessTm).GetWebLogDateTimeStr().CStr())); Obj->Set(v8::String::NewFromUtf8(Isolate, "lastWriteTime"), v8::String::NewFromUtf8(Isolate, TTm::GetTmFromMSecs(LastWriteTm).GetWebLogDateTimeStr().CStr())); Obj->Set(v8::String::NewFromUtf8(Isolate, "size"), v8::Number::New(Isolate, static_cast<double>(Size))); Args.GetReturnValue().Set(Obj); }