in scripts/bitrot.js [99:130]
function getNpmInfo(name) {
const CACHE_TIMEOUT_MS = 30 * 60 * 1000; // 30 minutes
const cache = ensureCacheLoaded('npmInfo');
const cacheEntry = cache[name];
if (cacheEntry) {
if (cacheEntry.timestamp + CACHE_TIMEOUT_MS > Date.now()) {
return cacheEntry.value;
} else {
delete cache[name];
}
}
// Limited security guard on exec'ing given `name`.
const PKG_NAME_RE = /^(@[\w_.-]+\/)?([\w_.-]+)$/;
if (!PKG_NAME_RE.test(name)) {
throw new Error(
`${JSON.stringify(
name
)} does not look like a valid npm package name`
);
}
const stdout = execSync(`npm info -j "${name}"`).toString('utf8');
const npmInfo = JSON.parse(stdout);
cache[name] = {
timestamp: Date.now(),
value: npmInfo,
};
saveCache();
return npmInfo;
}