11const npa = require ( 'npm-package-arg' )
22const { log } = require ( 'proc-log' )
3- const { getTrustedRegistryIdentity } = require ( '@npmcli/arborist/lib/script-allowed.js' )
3+ const {
4+ getTrustedRegistryIdentity,
5+ resolvedSourceSpecs,
6+ } = require ( '@npmcli/arborist/lib/script-allowed.js' )
47
58// Pure helpers that implement the RFC's pin-mismatch table for
69// `npm approve-scripts` and `npm deny-scripts`.
@@ -12,6 +15,8 @@ const { getTrustedRegistryIdentity } = require('@npmcli/arborist/lib/script-allo
1215// Denying always writes `"<name>": false`, regardless of `--allow-scripts-pin`, per the
1316// RFC's asymmetric-pin rule.
1417
18+ const primaryResolvedSource = ( node ) => resolvedSourceSpecs ( node ) [ 0 ] || ''
19+
1520// Convert an arborist Node into the spec string used for a versioned policy
1621// entry. Returns `null` if the node cannot be represented as a versioned key
1722// derived from trusted sources (lockfile URL for registry, hosted shortcut
@@ -21,8 +26,7 @@ const versionedKeyFor = (node) => {
2126 if ( ! node ) {
2227 return null
2328 }
24- /* istanbul ignore next: callers guarantee a string resolved */
25- const resolved = typeof node . resolved === 'string' ? node . resolved : ''
29+ const resolved = primaryResolvedSource ( node )
2630 if ( resolved . startsWith ( 'git' ) ) {
2731 try {
2832 const parsed = npa ( resolved )
@@ -69,8 +73,7 @@ const nameKeyFor = (node) => {
6973 if ( ! node ) {
7074 return null
7175 }
72- /* istanbul ignore next: callers guarantee a string resolved */
73- const resolved = typeof node . resolved === 'string' ? node . resolved : ''
76+ const resolved = primaryResolvedSource ( node )
7477 if ( resolved . startsWith ( 'git' ) ) {
7578 try {
7679 const parsed = npa ( resolved )
@@ -164,7 +167,8 @@ const keyTargetsNode = (key, node) => {
164167 case 'git' : {
165168 let resolvedParsed
166169 try {
167- resolvedParsed = node . resolved ? npa ( node . resolved ) : null
170+ const resolved = primaryResolvedSource ( node )
171+ resolvedParsed = resolved ? npa ( resolved ) : null
168172 } catch {
169173 /* istanbul ignore next */
170174 return false
@@ -176,7 +180,8 @@ const keyTargetsNode = (key, node) => {
176180 case 'file' :
177181 case 'directory' :
178182 case 'remote' :
179- return node . resolved === parsed . saveSpec || node . resolved === parsed . fetchSpec
183+ return resolvedSourceSpecs ( node )
184+ . some ( resolved => resolved === parsed . saveSpec || resolved === parsed . fetchSpec )
180185 default :
181186 return false
182187 }
0 commit comments