MCPcopy Index your code
hub / github.com/nodejs/node / searchCachePackage

Function searchCachePackage

deps/npm/lib/commands/cache.js:14–64  ·  view source on GitHub ↗
(path, parsed, cacheKeys)

Source from the content-addressed store, hash-verified

12const BaseCommand = require('../base-cmd.js')
13
14const searchCachePackage = async (path, parsed, cacheKeys) => {
15 const searchMFH = new RegExp(`^make-fetch-happen:request-cache:.*(?<!/[@a-zA-Z]+)/${parsed.name}/-/(${parsed.name}[^/]+.tgz)$`)
16 const searchPack = new RegExp(`^make-fetch-happen:request-cache:.*/${parsed.escapedName}$`)
17 const results = new Set()
18 cacheKeys = new Set(cacheKeys)
19 for (const key of cacheKeys) {
20 // match on the public key registry url format
21 if (searchMFH.test(key)) {
22 // extract the version from the filename
23 const filename = key.match(searchMFH)[1]
24 const noExt = filename.slice(0, -4)
25 const noScope = `${parsed.name.split('/').pop()}-`
26 const ver = noExt.slice(noScope.length)
27 if (semver.satisfies(ver, parsed.rawSpec)) {
28 results.add(key)
29 }
30 continue
31 }
32 // is this key a packument?
33 if (!searchPack.test(key)) {
34 continue
35 }
36
37 results.add(key)
38 let packument, details
39 try {
40 details = await cacache.get(path, key)
41 packument = jsonParse(details.data)
42 } catch {
43 // if we couldn't parse the packument, abort
44 continue
45 }
46 if (!packument.versions || typeof packument.versions !== 'object') {
47 continue
48 }
49
50 // assuming this is a packument
51 for (const ver of Object.keys(packument.versions)) {
52 if (semver.satisfies(ver, parsed.rawSpec)) {
53 if (packument.versions[ver].dist &&
54 typeof packument.versions[ver].dist === 'object' &&
55 packument.versions[ver].dist.tarball !== undefined &&
56 cacheKeys.has(`make-fetch-happen:request-cache:${packument.versions[ver].dist.tarball}`)
57 ) {
58 results.add(`make-fetch-happen:request-cache:${packument.versions[ver].dist.tarball}`)
59 }
60 }
61 }
62 }
63 return results
64}
65
66class Cache extends BaseCommand {
67 static description = 'Manipulates packages and npx cache'

Callers 1

lsMethod · 0.85

Calls 10

jsonParseFunction · 0.85
popMethod · 0.80
matchMethod · 0.65
sliceMethod · 0.65
addMethod · 0.65
getMethod · 0.65
keysMethod · 0.65
hasMethod · 0.65
testMethod · 0.45
splitMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…