39 using v8::FunctionCallbackInfo;
40 using v8::FunctionTemplate;
50 Local<Context> context) {
51 Environment* env = Environment::GetCurrent(context);
53 Local<String> ttyString = FIXED_ONE_BYTE_STRING(env->isolate(),
"TTY");
55 Local<FunctionTemplate>
t = env->NewFunctionTemplate(
New);
56 t->SetClassName(ttyString);
57 t->InstanceTemplate()->SetInternalFieldCount(1);
59 AsyncWrap::AddWrapMethods(env, t);
61 env->SetProtoMethod(t,
"close", HandleWrap::Close);
62 env->SetProtoMethod(t,
"unref", HandleWrap::Unref);
63 env->SetProtoMethod(t,
"ref", HandleWrap::Ref);
64 env->SetProtoMethod(t,
"hasRef", HandleWrap::HasRef);
66 StreamWrap::AddMethods(env, t, StreamBase::kFlagNoShutdown);
68 env->SetProtoMethod(t,
"getWindowSize", TTYWrap::GetWindowSize);
69 env->SetProtoMethod(t,
"setRawMode", SetRawMode);
71 env->SetMethod(target,
"isTTY", IsTTY);
72 env->SetMethod(target,
"guessHandleType", GuessHandleType);
74 target->Set(ttyString, t->GetFunction());
75 env->set_tty_constructor_template(t);
79 uv_tty_t* TTYWrap::UVHandle() {
84 void TTYWrap::GuessHandleType(
const FunctionCallbackInfo<Value>& args) {
85 Environment* env = Environment::GetCurrent(args);
86 int fd = args[0]->Int32Value();
89 uv_handle_type t = uv_guess_handle(fd);
90 const char* type =
nullptr;
93 case UV_TCP: type =
"TCP";
break;
94 case UV_TTY: type =
"TTY";
break;
95 case UV_UDP: type =
"UDP";
break;
96 case UV_FILE: type =
"FILE";
break;
97 case UV_NAMED_PIPE: type =
"PIPE";
break;
98 case UV_UNKNOWN_HANDLE: type =
"UNKNOWN";
break;
103 args.GetReturnValue().Set(OneByteString(env->isolate(), type));
107 void TTYWrap::IsTTY(
const FunctionCallbackInfo<Value>& args) {
108 int fd = args[0]->Int32Value();
110 bool rc = uv_guess_handle(fd) == UV_TTY;
111 args.GetReturnValue().Set(rc);
115 void TTYWrap::GetWindowSize(
const FunctionCallbackInfo<Value>& args) {
116 Environment* env = Environment::GetCurrent(args);
119 ASSIGN_OR_RETURN_UNWRAP(&wrap,
121 args.GetReturnValue().Set(UV_EBADF));
122 CHECK(args[0]->IsArray());
125 int err = uv_tty_get_winsize(&wrap->handle_, &width, &height);
128 Local<v8::Array>
a = args[0].As<Array>();
133 args.GetReturnValue().Set(err);
137 void TTYWrap::SetRawMode(
const FunctionCallbackInfo<Value>& args) {
139 ASSIGN_OR_RETURN_UNWRAP(&wrap,
141 args.GetReturnValue().Set(UV_EBADF));
142 int err = uv_tty_set_mode(&wrap->handle_, args[0]->IsTrue());
143 args.GetReturnValue().Set(err);
147 void TTYWrap::New(
const FunctionCallbackInfo<Value>& args) {
148 Environment* env = Environment::GetCurrent(args);
153 CHECK(args.IsConstructCall());
155 int fd = args[0]->Int32Value();
159 TTYWrap* wrap =
new TTYWrap(env, args.This(), fd, args[1]->IsTrue(), &err);
161 return env->ThrowUVException(err,
"uv_tty_init");
163 wrap->UpdateWriteQueueSize();
167 TTYWrap::TTYWrap(Environment* env,
168 Local<Object>
object,
174 reinterpret_cast<uv_stream_t*>(&handle_),
175 AsyncWrap::PROVIDER_TTYWRAP) {
176 *init_err = uv_tty_init(env->event_loop(), &handle_, fd, readable);
NODE_MODULE_CONTEXT_AWARE_BUILTIN(inspector, node::inspector::Agent::InitInspector)
void Initialize(Local< Object > target, Local< Value > unused, Local< Context > context, void *priv)
MaybeLocal< Object > New(Isolate *isolate, Local< String > string, enum encoding enc)