12 using v8::FunctionCallbackInfo;
23 #define VALUE_METHOD_MAP(V) \ 24 V(isArrayBuffer, IsArrayBuffer) \ 25 V(isAsyncFunction, IsAsyncFunction) \ 26 V(isDataView, IsDataView) \ 28 V(isExternal, IsExternal) \ 30 V(isMapIterator, IsMapIterator) \ 31 V(isNativeError, IsNativeError) \ 32 V(isPromise, IsPromise) \ 33 V(isRegExp, IsRegExp) \ 35 V(isSetIterator, IsSetIterator) \ 36 V(isTypedArray, IsTypedArray) \ 37 V(isUint8Array, IsUint8Array) 40 #define V(_, ucname) \ 41 static void ucname(const FunctionCallbackInfo<Value>& args) { \ 42 CHECK_EQ(1, args.Length()); \ 43 args.GetReturnValue().Set(args[0]->ucname()); \ 49 static void IsAnyArrayBuffer(
const FunctionCallbackInfo<Value>& args) {
50 CHECK_EQ(1, args.Length());
51 args.GetReturnValue().Set(
52 args[0]->IsArrayBuffer() || args[0]->IsSharedArrayBuffer());
55 static void GetPromiseDetails(
const FunctionCallbackInfo<Value>& args) {
57 if (!args[0]->IsPromise())
60 auto isolate = args.GetIsolate();
62 Local<Promise> promise = args[0].As<Promise>();
65 int state = promise->State();
67 if (state != Promise::PromiseState::kPending)
68 ret->Set(1, promise->Result());
70 args.GetReturnValue().Set(ret);
73 static void GetProxyDetails(
const FunctionCallbackInfo<Value>& args) {
75 if (!args[0]->IsProxy())
78 Local<Proxy> proxy = args[0].As<Proxy>();
80 Local<Array> ret =
Array::New(args.GetIsolate(), 2);
81 ret->Set(0, proxy->GetTarget());
82 ret->Set(1, proxy->GetHandler());
84 args.GetReturnValue().Set(ret);
88 static void SafeToString(
const FunctionCallbackInfo<Value>& args) {
89 auto context = args.GetIsolate()->GetCurrentContext();
90 args.GetReturnValue().Set(args[0]->ToDetailString(context).ToLocalChecked());
94 #define V(name, _) &Environment::name, 95 static Local<Private> (Environment::*
const methods[])()
const = {
96 PER_ISOLATE_PRIVATE_SYMBOL_PROPERTIES(
V)
99 CHECK_LT(index, arraysize(methods));
100 return (env->*methods[index])();
103 static void GetHiddenValue(
const FunctionCallbackInfo<Value>& args) {
104 Environment* env = Environment::GetCurrent(args);
106 if (!args[0]->IsObject())
107 return env->ThrowTypeError(
"obj must be an object");
109 if (!args[1]->IsUint32())
110 return env->ThrowTypeError(
"index must be an uint32");
112 Local<Object> obj = args[0].As<Object>();
113 auto index = args[1]->Uint32Value(env->context()).FromJust();
115 auto maybe_value = obj->GetPrivate(env->context(), private_symbol);
117 args.GetReturnValue().Set(maybe_value.ToLocalChecked());
120 static void SetHiddenValue(
const FunctionCallbackInfo<Value>& args) {
121 Environment* env = Environment::GetCurrent(args);
123 if (!args[0]->IsObject())
124 return env->ThrowTypeError(
"obj must be an object");
126 if (!args[1]->IsUint32())
127 return env->ThrowTypeError(
"index must be an uint32");
129 Local<Object> obj = args[0].As<Object>();
130 auto index = args[1]->Uint32Value(env->context()).FromJust();
132 auto maybe_value = obj->SetPrivate(env->context(), private_symbol, args[2]);
134 args.GetReturnValue().Set(maybe_value.FromJust());
139 int ret = SigintWatchdogHelper::GetInstance()->Start();
141 Environment* env = Environment::GetCurrent(args);
142 env->ThrowErrnoException(ret,
"StartSigintWatchdog");
148 bool had_pending_signals = SigintWatchdogHelper::GetInstance()->Stop();
149 args.GetReturnValue().Set(had_pending_signals);
154 bool ret = SigintWatchdogHelper::GetInstance()->HasPendingSignal();
155 args.GetReturnValue().Set(ret);
160 Local<Context> context = args.GetIsolate()->GetCurrentContext();
162 if (!maybe_resolver.IsEmpty())
163 args.GetReturnValue().Set(maybe_resolver.ToLocalChecked());
168 Local<Context> context = args.GetIsolate()->GetCurrentContext();
169 Local<Value> promise = args[0];
170 CHECK(promise->IsPromise());
171 if (promise.As<Promise>()->State() != Promise::kPending)
return;
172 Local<Promise::Resolver> resolver = promise.As<Promise::Resolver>();
173 Maybe<bool> ret = resolver->Resolve(context, args[1]);
174 args.GetReturnValue().Set(ret.FromMaybe(
false));
179 Local<Context> context = args.GetIsolate()->GetCurrentContext();
180 Local<Value> promise = args[0];
181 CHECK(promise->IsPromise());
182 if (promise.As<Promise>()->State() != Promise::kPending)
return;
183 Local<Promise::Resolver> resolver = promise.As<Promise::Resolver>();
184 Maybe<bool> ret = resolver->Reject(context, args[1]);
185 args.GetReturnValue().Set(ret.FromMaybe(
false));
191 Local<Context> context) {
192 Environment* env = Environment::GetCurrent(context);
194 #define V(lcname, ucname) env->SetMethod(target, #lcname, ucname); 198 env->SetMethod(target,
"isAnyArrayBuffer", IsAnyArrayBuffer);
201 target->Set(context, \ 202 FIXED_ONE_BYTE_STRING(env->isolate(), #name), \ 203 Integer::NewFromUnsigned(env->isolate(), index++)).FromJust(); 206 PER_ISOLATE_PRIVATE_SYMBOL_PROPERTIES(
V)
210 target->DefineOwnProperty(
212 OneByteString(env->isolate(),
"pushValToArrayMax"),
213 Integer::NewFromUnsigned(env->isolate(), NODE_PUSH_VAL_TO_ARRAY_MAX),
214 v8::ReadOnly).FromJust();
217 target->Set(context, \ 218 FIXED_ONE_BYTE_STRING(env->isolate(), #name), \ 219 Integer::New(env->isolate(), Promise::PromiseState::name)) \ 226 env->SetMethod(target,
"getHiddenValue", GetHiddenValue);
227 env->SetMethod(target,
"setHiddenValue", SetHiddenValue);
228 env->SetMethod(target,
"getPromiseDetails", GetPromiseDetails);
229 env->SetMethod(target,
"getProxyDetails", GetProxyDetails);
230 env->SetMethod(target,
"safeToString", SafeToString);
void Initialize(Local< Object > target, Local< Value > unused, Local< Context > context)
NODE_MODULE_CONTEXT_AWARE_BUILTIN(inspector, node::inspector::Agent::InitInspector)
#define VALUE_METHOD_MAP(V)
void StartSigintWatchdog(const FunctionCallbackInfo< Value > &args)
void PromiseReject(const FunctionCallbackInfo< Value > &args)
void PromiseResolve(const FunctionCallbackInfo< Value > &args)
void WatchdogHasPendingSigint(const FunctionCallbackInfo< Value > &args)
void StopSigintWatchdog(const FunctionCallbackInfo< Value > &args)
void CreatePromise(const FunctionCallbackInfo< Value > &args)
MaybeLocal< Object > New(Isolate *isolate, Local< String > string, enum encoding enc)
Local< Private > IndexToPrivateSymbol(Environment *env, uint32_t index)