Repository navigation
Conversation
Hidden lockfiles omit script bodies and often omit hasInstallScript for prepare-only git dependencies, so install-scripts ls/prune treated them as having no scripts (npm#10182). Extend the existing package.json disk read to cover non-registry nodes even when hasInstallScript is absent, without using forceActual (which drops resolved and breaks git policy matching).
Gate disk script recovery on the resolved URL instead of hasNonRegistryShape/isRegistryDependency, and emit the hasInstallScript sentinel only when the lockfile asserted scripts. Linked-store nodes expose isRegistryDependency as boolean false by default, which previously made empty store roots look like pending install-script packages.
Contributor
Author
|
Pushed a follow-up for the CI failures on this branch:
Local: arborist |
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.
Fixes #10182
What
npm install-scripts ls/prunemissedprepareon git dependencies when the tree was loaded fromnode_modules/.package-lock.json. That hidden lockfile omits script bodies and often omitshasInstallScriptfor prepare-only git deps, so prune deleted a still-neededallowScriptsentry and ls hid the package.Why this approach
loadActual({ forceActual: true })does recover scripts, but it also dropsresolvedfor those nodes, which breaks git policy matching (github:owner/repo#sha). Instead, extend the existing read-onlypackage.jsondisk hydration ingetInstallScriptsso non-registry nodes are checked even whenhasInstallScriptis absent. Registry behavior is unchanged.Tests
preparefrom disk withouthasInstallScriptinstall-scripts prunekeeps a git prepareallowScriptsentry under a hidden lockfileinstall-scripts lslists that git prepare dep under a hidden lockfileAI disclosure
This change was written with AI assistance. I reviewed every line, ran the tests above, and chose disk hydration over
forceActualafter verifying thatforceActualclearsresolvedand breaks git allowScripts matching.