[node-core-libary] Update PackageJsonLookup
to only resolve to package.json
files that contain a "name"
field.
#3559
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Fixes #2070
PackageJsonLookup is erroneously presuming that all package.json files include a
"name"
field, and will complain when attempting to load a package.json file that does not include that field.In the npm docs on the file format, it's quite clear that the name+version requirements only apply to published packages:
This means that when e.g. a third-party dependency follows the guidance given for the
"type"
field in the Node.js documentation, it's not possible to successfully run api-extractor.Details
To fix this, each package.json file is loaded during lookup before returning it as valid, and in case the load fails with the
The required field "name" was not found
error, the lookup continues in the parent directory.This should have no real-world effect on performance, as practically all such lookups are immediately followed by a load, which will then use the result cached during the lookup.
How it was tested
A test case is added to validate this behaviour.