Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions lib/internal/modules/package_json_reader.js
Original file line number Diff line number Diff line change
Expand Up @@ -185,8 +185,8 @@ function getPackageScopeConfig(resolved) {
* @param {URL} url - The URL to get the package type for.
*/
function getPackageType(url) {
// TODO(@anonrig): Write a C++ function that returns only "type".
return getPackageScopeConfig(url).type;
const type = modulesBinding.getPackageType(`${url}`);
return type ?? 'none';
}

const invalidPackageNameRegEx = /^\.|%|\\/;
Expand Down
24 changes: 21 additions & 3 deletions src/node_modules.cc
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,7 @@ void BindingData::GetNearestParentPackageJSONType(
}
}

template <bool return_only_type>
void BindingData::GetPackageScopeConfig(
const FunctionCallbackInfo<Value>& args) {
CHECK_GE(args.Length(), 1);
Expand Down Expand Up @@ -442,7 +443,15 @@ void BindingData::GetPackageScopeConfig(
error_context.specifier = resolved.ToString();
auto package_json = GetPackageJSON(realm, *file_url, &error_context);
if (package_json != nullptr) {
return args.GetReturnValue().Set(package_json->Serialize(realm));
if constexpr (return_only_type) {
Local<Value> value;
if (ToV8Value(realm->context(), package_json->type).ToLocal(&value)) {
args.GetReturnValue().Set(value);
}
return;
} else {
return args.GetReturnValue().Set(package_json->Serialize(realm));
}
}

auto last_href = std::string(package_json_url->get_href());
Expand All @@ -460,6 +469,12 @@ void BindingData::GetPackageScopeConfig(
}
}

if constexpr (return_only_type) {
return;
}

// If the package.json could not be found return a string containing a path
// to the non-existent package.json file in the initial requested location
auto package_json_url_as_path =
url::FileURLToPath(realm->env(), *package_json_url);
CHECK(package_json_url_as_path);
Expand Down Expand Up @@ -604,7 +619,9 @@ void BindingData::CreatePerIsolateProperties(IsolateData* isolate_data,
target,
"getNearestParentPackageJSON",
GetNearestParentPackageJSON);
SetMethod(isolate, target, "getPackageScopeConfig", GetPackageScopeConfig);
SetMethod(
isolate, target, "getPackageScopeConfig", GetPackageScopeConfig<false>);
SetMethod(isolate, target, "getPackageType", GetPackageScopeConfig<true>);
SetMethod(isolate, target, "enableCompileCache", EnableCompileCache);
SetMethod(isolate, target, "getCompileCacheDir", GetCompileCacheDir);
SetMethod(isolate, target, "flushCompileCache", FlushCompileCache);
Expand Down Expand Up @@ -658,7 +675,8 @@ void BindingData::RegisterExternalReferences(
registry->Register(ReadPackageJSON);
registry->Register(GetNearestParentPackageJSONType);
registry->Register(GetNearestParentPackageJSON);
registry->Register(GetPackageScopeConfig);
registry->Register(GetPackageScopeConfig<false>);
registry->Register(GetPackageScopeConfig<true>);
registry->Register(EnableCompileCache);
registry->Register(GetCompileCacheDir);
registry->Register(FlushCompileCache);
Expand Down
1 change: 1 addition & 0 deletions src/node_modules.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ class BindingData : public SnapshotableObject {
const v8::FunctionCallbackInfo<v8::Value>& args);
static void GetNearestParentPackageJSONType(
const v8::FunctionCallbackInfo<v8::Value>& args);
template <bool return_only_type>
static void GetPackageScopeConfig(
const v8::FunctionCallbackInfo<v8::Value>& args);
static void GetPackageJSONScripts(
Expand Down
Loading