@@ -613,30 +613,6 @@ Maybe<const PackageConfig*> GetPackageConfig(Environment* env,
613613 return Just (&entry.first ->second );
614614}
615615
616- Maybe<const PackageConfig*> GetPackageBoundaryConfig (Environment* env,
617- const URL& search,
618- const URL& base) {
619- URL pjson_url (" package.json" , &search);
620- while (true ) {
621- Maybe<const PackageConfig*> pkg_cfg =
622- GetPackageConfig (env, pjson_url.ToFilePath (), base);
623- if (pkg_cfg.IsNothing ()) return pkg_cfg;
624- if (pkg_cfg.FromJust ()->exists == Exists::Yes) return pkg_cfg;
625-
626- URL last_pjson_url = pjson_url;
627- pjson_url = URL (" ../package.json" , pjson_url);
628-
629- // Terminates at root where ../package.json equals ../../package.json
630- // (can't just check "/package.json" for Windows support).
631- if (pjson_url.path () == last_pjson_url.path ()) {
632- auto entry = env->package_json_cache .emplace (pjson_url.ToFilePath (),
633- PackageConfig { Exists::No, IsValid::Yes, HasMain::No, " " ,
634- IsESM::No });
635- return Just (&entry.first ->second );
636- }
637- }
638- }
639-
640616/*
641617 * Legacy CommonJS main resolution:
642618 * 1. let M = pkg_url + (json main field)
@@ -691,7 +667,7 @@ Maybe<URL> LegacyMainResolve(const URL& pjson_url,
691667 return Nothing<URL>();
692668}
693669
694- Maybe<ModuleResolution > FinalizeResolution (Environment* env,
670+ Maybe<URL > FinalizeResolution (Environment* env,
695671 const URL& resolved,
696672 const URL& base,
697673 bool check_exists) {
@@ -701,46 +677,13 @@ Maybe<ModuleResolution> FinalizeResolution(Environment* env,
701677 std::string msg = " Cannot find module '" + path +
702678 " ' imported from " + base.ToFilePath ();
703679 node::THROW_ERR_MODULE_NOT_FOUND (env, msg.c_str ());
704- return Nothing<ModuleResolution>();
705- }
706-
707- Maybe<const PackageConfig*> pcfg =
708- GetPackageBoundaryConfig (env, resolved, base);
709- if (pcfg.IsNothing ()) return Nothing<ModuleResolution>();
710-
711- if (pcfg.FromJust ()->exists == Exists::No) {
712- return Just (ModuleResolution { resolved, true });
713- }
714-
715- return Just (ModuleResolution {
716- resolved, pcfg.FromJust ()->esm == IsESM::No });
717- }
718-
719- Maybe<ModuleResolution> FinalizeResolutionMain (Environment* env,
720- const URL& resolved,
721- const URL& base) {
722- const std::string& path = resolved.ToFilePath ();
723-
724- if (CheckDescriptorAtPath (path) != FILE) {
725- std::string msg = " Cannot find module '" + path +
726- " ' imported from " + base.ToFilePath ();
727- node::THROW_ERR_MODULE_NOT_FOUND (env, msg.c_str ());
728- return Nothing<ModuleResolution>();
729- }
730-
731- Maybe<const PackageConfig*> pcfg =
732- GetPackageBoundaryConfig (env, resolved, base);
733- if (pcfg.IsNothing ()) return Nothing<ModuleResolution>();
734-
735- if (pcfg.FromJust ()->exists == Exists::No) {
736- return Just (ModuleResolution { resolved, true });
680+ return Nothing<URL>();
737681 }
738682
739- return Just (ModuleResolution {
740- resolved, pcfg.FromJust ()->esm == IsESM::No });
683+ return Just (resolved);
741684}
742685
743- Maybe<ModuleResolution > PackageMainResolve (Environment* env,
686+ Maybe<URL > PackageMainResolve (Environment* env,
744687 const URL& pjson_url,
745688 const PackageConfig& pcfg,
746689 const URL& base) {
@@ -750,7 +693,7 @@ Maybe<ModuleResolution> PackageMainResolve(Environment* env,
750693 URL (" ." , pjson_url).ToFilePath () + " ' imported from " +
751694 base.ToFilePath ();
752695 node::THROW_ERR_MODULE_NOT_FOUND (env, msg.c_str ());
753- return Nothing<ModuleResolution >();
696+ return Nothing<URL >();
754697 }
755698 if (pcfg.has_main == HasMain::Yes &&
756699 pcfg.main .substr (pcfg.main .length () - 4 , 4 ) == " .mjs" ) {
@@ -764,12 +707,12 @@ Maybe<ModuleResolution> PackageMainResolve(Environment* env,
764707 Maybe<URL> resolved = LegacyMainResolve (pjson_url, pcfg);
765708 // Legacy main resolution error
766709 if (resolved.IsNothing ()) {
767- return Nothing<ModuleResolution >();
710+ return Nothing<URL >();
768711 }
769- return FinalizeResolution (env, resolved. FromJust (), base, false ) ;
712+ return resolved;
770713}
771714
772- Maybe<ModuleResolution > PackageResolve (Environment* env,
715+ Maybe<URL > PackageResolve (Environment* env,
773716 const std::string& specifier,
774717 const URL& base) {
775718 size_t sep_index = specifier.find (' /' );
@@ -778,7 +721,7 @@ Maybe<ModuleResolution> PackageResolve(Environment* env,
778721 std::string msg = " Invalid package name '" + specifier +
779722 " ' imported from " + base.ToFilePath ();
780723 node::THROW_ERR_INVALID_MODULE_SPECIFIER (env, msg.c_str ());
781- return Nothing<ModuleResolution >();
724+ return Nothing<URL >();
782725 }
783726 bool scope = false ;
784727 if (specifier[0 ] == ' @' ) {
@@ -812,7 +755,7 @@ Maybe<ModuleResolution> PackageResolve(Environment* env,
812755 // Package match.
813756 Maybe<const PackageConfig*> pcfg = GetPackageConfig (env, pjson_path, base);
814757 // Invalid package configuration error.
815- if (pcfg.IsNothing ()) return Nothing<ModuleResolution >();
758+ if (pcfg.IsNothing ()) return Nothing<URL >();
816759 if (!pkg_subpath.length ()) {
817760 return PackageMainResolve (env, pjson_url, *pcfg.FromJust (), base);
818761 } else {
@@ -825,15 +768,14 @@ Maybe<ModuleResolution> PackageResolve(Environment* env,
825768 std::string msg = " Cannot find package '" + pkg_name +
826769 " ' imported from " + base.ToFilePath ();
827770 node::THROW_ERR_MODULE_NOT_FOUND (env, msg.c_str ());
828- return Nothing<ModuleResolution >();
771+ return Nothing<URL >();
829772}
830773
831774} // anonymous namespace
832775
833- Maybe<ModuleResolution > Resolve (Environment* env,
776+ Maybe<URL > Resolve (Environment* env,
834777 const std::string& specifier,
835- const URL& base,
836- bool is_main) {
778+ const URL& base) {
837779 // Order swapped from spec for minor perf gain.
838780 // Ok since relative URLs cannot parse as URLs.
839781 URL resolved;
@@ -847,17 +789,14 @@ Maybe<ModuleResolution> Resolve(Environment* env,
847789 return PackageResolve (env, specifier, base);
848790 }
849791 }
850- if (is_main)
851- return FinalizeResolutionMain (env, resolved, base);
852- else
853- return FinalizeResolution (env, resolved, base, true );
792+ return FinalizeResolution (env, resolved, base, true );
854793}
855794
856795void ModuleWrap::Resolve (const FunctionCallbackInfo<Value>& args) {
857796 Environment* env = Environment::GetCurrent (args);
858797
859- // module.resolve(specifier, url, is_main )
860- CHECK_EQ (args.Length (), 3 );
798+ // module.resolve(specifier, url)
799+ CHECK_EQ (args.Length (), 2 );
861800
862801 CHECK (args[0 ]->IsString ());
863802 Utf8Value specifier_utf8 (env->isolate (), args[0 ]);
@@ -867,44 +806,29 @@ void ModuleWrap::Resolve(const FunctionCallbackInfo<Value>& args) {
867806 Utf8Value url_utf8 (env->isolate (), args[1 ]);
868807 URL url (*url_utf8, url_utf8.length ());
869808
870- CHECK (args[2 ]->IsBoolean ());
871-
872809 if (url.flags () & URL_FLAGS_FAILED) {
873810 return node::THROW_ERR_INVALID_ARG_TYPE (
874811 env, " second argument is not a URL string" );
875812 }
876813
877814 TryCatchScope try_catch (env);
878- Maybe<ModuleResolution > result =
815+ Maybe<URL > result =
879816 node::loader::Resolve (env,
880817 specifier_std,
881- url,
882- args[2 ]->IsTrue ());
818+ url);
883819 if (result.IsNothing ()) {
884820 CHECK (try_catch.HasCaught ());
885821 try_catch.ReThrow ();
886822 return ;
887823 }
888824 CHECK (!try_catch.HasCaught ());
889825
890- ModuleResolution resolution = result.FromJust ();
891- CHECK (!(resolution.url .flags () & URL_FLAGS_FAILED));
892-
893- Local<Object> resolved = Object::New (env->isolate ());
894-
895- resolved->DefineOwnProperty (
896- env->context (),
897- env->url_string (),
898- resolution.url .ToObject (env).ToLocalChecked (),
899- v8::ReadOnly).FromJust ();
826+ URL resolution = result.FromJust ();
827+ CHECK (!(resolution.flags () & URL_FLAGS_FAILED));
900828
901- resolved->DefineOwnProperty (
902- env->context (),
903- env->legacy_string (),
904- v8::Boolean::New (env->isolate (), resolution.legacy ),
905- v8::ReadOnly).FromJust ();
829+ Local<Value> resolved = resolution.ToObject (env).ToLocalChecked ();
906830
907- args.GetReturnValue ().Set (resolved);
831+ args.GetReturnValue ().Set (resolved);
908832}
909833
910834static MaybeLocal<Promise> ImportModuleDynamically (
0 commit comments