function getNpmInfo()

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;
}