fix(npm): resolve cached package name from install dir for non-registry specs#35200
Open
sjawhar wants to merge 1 commit into
Open
fix(npm): resolve cached package name from install dir for non-registry specs#35200sjawhar wants to merge 1 commit into
sjawhar wants to merge 1 commit into
Conversation
…ry specs For non-registry specs (remote tarball URLs, git+https://, github: shorthand, file: paths), npa(pkg).name returns undefined - only registry packages have inferable names from the spec alone. Read the install-root package.json written by Arborist on the initial install to recover the actual installed package name from its first dependency entry. When the cache directory exists but is empty (no package.json), fall through to the Arborist install path instead of returning a likely-failing entrypoint resolution. This preserves upstream's anomalyco#25354 fix for empty cache dirs while adding the cached-name resolution for non-registry specs.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Issue for this PR
Closes #23653
Type of change
What does this PR do?
Fixes the regression introduced in #18308 where
Npm.add()cached install dirs keyed onnpa(pkg).name, which returnsundefinedfor non-registry specs (remote tarball URLs,git+https://, GitHub shorthand likeEdison-A-N/opencode-preview,file:paths). On a cache hit the code then calledresolveEntryPoint(undefined, ...), breaking subsequent installs of these specs.The fix recovers the actual installed package name by reading the install-root
package.json(written by Arborist on the initial install) and using its first dependency entry — matching what the fresh-install path computes from the arborist tree below it.Why this works:
lodash@4),npa(pkg).namereturns the package name as before — unchanged.package.jsoncontains adependenciesmap whose first key is the actual installed package name (Arborist writes this when reifying). We read that name and resolve againstnode_modules/<actual-name>/correctly.How did you verify your code works?
packages/opencode/test/npm.test.tscovering:undefined)packages/opencodeandpackages/coretest suites run locally — passbun typecheckpasses on both packagesScreenshots / recordings
N/A — no UI changes.
Checklist
Closes #23653
Supersedes #25744 (closed by the inactivity bot). Rebased onto latest
devwith all merge conflicts resolved; typecheck and targeted tests pass on the fork branch.