@@ -207,6 +207,29 @@ void ModuleWrap::Evaluate(const FunctionCallbackInfo<Value>& args) {
207207 args.GetReturnValue ().Set (ret);
208208}
209209
210+ void ModuleWrap::Namespace (const FunctionCallbackInfo<Value>& args) {
211+ Environment* env = Environment::GetCurrent (args);
212+ auto isolate = args.GetIsolate ();
213+ auto that = args.This ();
214+ ModuleWrap* obj = Unwrap<ModuleWrap>(that);
215+ CHECK_NE (obj, nullptr );
216+
217+ auto module = obj->module_ .Get (isolate);
218+
219+ switch (module ->GetStatus ()) {
220+ default :
221+ return env->ThrowError (
222+ " cannot get namespace, Module has not been instantiated" );
223+ case v8::Module::Status::kInstantiated :
224+ case v8::Module::Status::kEvaluating :
225+ case v8::Module::Status::kEvaluated :
226+ break ;
227+ }
228+
229+ auto result = module ->GetModuleNamespace ();
230+ args.GetReturnValue ().Set (result);
231+ }
232+
210233MaybeLocal<Module> ModuleWrap::ResolveCallback (Local<Context> context,
211234 Local<String> specifier,
212235 Local<Module> referrer) {
@@ -520,6 +543,7 @@ void ModuleWrap::Initialize(Local<Object> target,
520543 env->SetProtoMethod (tpl, " link" , Link);
521544 env->SetProtoMethod (tpl, " instantiate" , Instantiate);
522545 env->SetProtoMethod (tpl, " evaluate" , Evaluate);
546+ env->SetProtoMethod (tpl, " namespace" , Namespace);
523547
524548 target->Set (FIXED_ONE_BYTE_STRING (isolate, " ModuleWrap" ), tpl->GetFunction ());
525549 env->SetMethod (target, " resolve" , node::loader::ModuleWrap::Resolve);
0 commit comments