Skip to content

Commit 3406431

Browse files
fixup! module: improve getPackageType performance
make sure to early-return if invalid url errors are thrown
1 parent 7270f76 commit 3406431

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

src/node_modules.cc

+18-3
Original file line numberDiff line numberDiff line change
@@ -405,20 +405,24 @@ void BindingData::GetNearestParentPackageJSONType(
405405
}
406406

407407
const BindingData::PackageConfig* BindingData::FindPackageScopeConfig(
408-
Realm* realm, const FunctionCallbackInfo<Value>& args) {
408+
Realm* realm,
409+
const FunctionCallbackInfo<Value>& args,
410+
bool* invalid_url_out) {
409411
CHECK_GE(args.Length(), 1);
410412
CHECK(args[0]->IsString());
411413
Utf8Value resolved(realm->isolate(), args[0]);
412414
auto package_json_url_base = ada::parse(resolved.ToStringView());
413415
if (!package_json_url_base) {
414416
url::ThrowInvalidURL(realm->env(), resolved.ToStringView(), std::nullopt);
417+
*invalid_url_out = true;
415418
return nullptr;
416419
}
417420

418421
auto package_json_url =
419422
ada::parse("./package.json", &package_json_url_base.value());
420423
if (!package_json_url) {
421424
url::ThrowInvalidURL(realm->env(), "./package.json", resolved.ToString());
425+
*invalid_url_out = true;
422426
return nullptr;
423427
}
424428

@@ -436,6 +440,7 @@ const BindingData::PackageConfig* BindingData::FindPackageScopeConfig(
436440
auto file_url = url::FileURLToPath(realm->env(), *package_json_url);
437441
if (!file_url) {
438442
url::ThrowInvalidURL(realm->env(), resolved.ToStringView(), std::nullopt);
443+
*invalid_url_out = true;
439444
return nullptr;
440445
}
441446
error_context.specifier = resolved.ToString();
@@ -449,6 +454,7 @@ const BindingData::PackageConfig* BindingData::FindPackageScopeConfig(
449454
package_json_url = ada::parse("../package.json", &package_json_url.value());
450455
if (!package_json_url) {
451456
url::ThrowInvalidURL(realm->env(), "../package.json", last_href);
457+
*invalid_url_out = true;
452458
return nullptr;
453459
}
454460

@@ -466,7 +472,12 @@ void BindingData::GetPackageScopeConfig(
466472
const FunctionCallbackInfo<Value>& args) {
467473
Realm* realm = Realm::GetCurrent(args);
468474

469-
auto package_json = FindPackageScopeConfig(realm, args);
475+
bool invalid_url = false;
476+
auto package_json = FindPackageScopeConfig(realm, args, &invalid_url);
477+
if (invalid_url) {
478+
return;
479+
}
480+
470481
if (package_json != nullptr) {
471482
return args.GetReturnValue().Set(package_json->Serialize(realm));
472483
}
@@ -489,7 +500,11 @@ void BindingData::GetPackageScopeConfig(
489500
void BindingData::GetPackageType(const FunctionCallbackInfo<Value>& args) {
490501
Realm* realm = Realm::GetCurrent(args);
491502

492-
auto package_scope = FindPackageScopeConfig(realm, args);
503+
bool invalid_url = false;
504+
auto package_scope = FindPackageScopeConfig(realm, args, &invalid_url);
505+
if (invalid_url) {
506+
return;
507+
}
493508

494509
std::string resultType = "none";
495510

src/node_modules.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ class BindingData : public SnapshotableObject {
6060
static void GetNearestParentPackageJSONType(
6161
const v8::FunctionCallbackInfo<v8::Value>& args);
6262
static const BindingData::PackageConfig* FindPackageScopeConfig(
63-
Realm* realm, const v8::FunctionCallbackInfo<v8::Value>& args);
63+
Realm* realm,
64+
const v8::FunctionCallbackInfo<v8::Value>& args,
65+
bool* invalid_url_out);
6466
static void GetPackageScopeConfig(
6567
const v8::FunctionCallbackInfo<v8::Value>& args);
6668
static void GetPackageType(const v8::FunctionCallbackInfo<v8::Value>& args);

0 commit comments

Comments
 (0)