diff --git a/lib/api/npm.js b/lib/api/npm.js index 00824525db7816420ab3f95829a49ec7f5c5d219..90b7f9d7f06cf5ec610b2faeb03937917116be01 100644 --- a/lib/api/npm.js +++ b/lib/api/npm.js @@ -3,21 +3,23 @@ const got = require('got'); const url = require('url'); const ini = require('ini'); +const Keyv = require('keyv'); const getRegistryUrl = require('registry-auth-token/registry-url'); const registryAuthToken = require('registry-auth-token'); const parse = require('github-url-from-git'); +const cache = new Keyv({ namespace: 'npm' }); + module.exports = { setNpmrc, getDependency, resetCache, }; -let npmCache = {}; let npmrc = null; function resetCache() { - npmCache = {}; + cache.clear(); } async function setNpmrc(input) { @@ -50,9 +52,10 @@ async function getDependency(name, logger) { const cacheKey = pkgUrl + JSON.stringify(headers); // Return from cache if present - if (npmCache[cacheKey]) { + const cacheVal = await cache.get(cacheKey); + if (cacheVal) { logger.debug(`Returning cached version of ${name}`); - return npmCache[cacheKey]; + return cacheVal; } // Retrieve from API if not cached @@ -88,7 +91,8 @@ async function getDependency(name, logger) { : '2017-01-01T12:00:00.000Z', }; }); - npmCache[cacheKey] = dep; + const expiryMs = 5 * 60 * 1000; + await cache.set(cacheKey, dep, expiryMs); logger.trace({ dependency: dep }, 'dependency'); return dep; } catch (err) { diff --git a/package.json b/package.json index 71229f049721443706573bb62edeaa8673ca6146..638fd2521875d577ceff0fcc3c0fdd6b04f18bfa 100644 --- a/package.json +++ b/package.json @@ -59,6 +59,7 @@ "json-dup-key-validator": "1.0.2", "json-stringify-pretty-compact": "1.0.4", "jsonwebtoken": "8.0.1", + "keyv": "2.0.2", "later": "1.2.0", "lodash": "4.17.4", "minimatch": "3.0.4", diff --git a/yarn.lock b/yarn.lock index db389f6c0013560d0d3e7efe7e604185ec359343..7c9136b793da0328cc00f2686c32c08e76ddf83d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1152,7 +1152,7 @@ debug@^3.0.1: dependencies: ms "2.0.0" -debuglog@*, debuglog@^1.0.1: +debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -2237,7 +2237,7 @@ import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" -imurmurhash@*, imurmurhash@^0.1.4: +imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -2833,6 +2833,10 @@ jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + json-dup-key-validator@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-dup-key-validator/-/json-dup-key-validator-1.0.2.tgz#4e5e1c32c93ede16a8424d28162e5e183b5d8ee5" @@ -2928,6 +2932,12 @@ jws@^3.1.4: jwa "^1.1.4" safe-buffer "^5.0.1" +keyv@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-2.0.2.tgz#5e23fde48a4c59818eddf028cd829798830242f1" + dependencies: + json-buffer "3.0.0" + kind-of@^3.0.2: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -3029,10 +3039,6 @@ lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" -lodash._baseindexof@*: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" - lodash._basetostring@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" @@ -3048,14 +3054,10 @@ lodash._basevalues@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" -lodash._bindcallback@*, lodash._bindcallback@^3.0.0: +lodash._bindcallback@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" -lodash._cacheindexof@*: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" - lodash._createassigner@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" @@ -3064,17 +3066,11 @@ lodash._createassigner@^3.0.0: lodash._isiterateecall "^3.0.0" lodash.restparam "^3.0.0" -lodash._createcache@*: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" - dependencies: - lodash._getnative "^3.0.0" - lodash._createset@~4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" -lodash._getnative@*, lodash._getnative@^3.0.0: +lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" @@ -3156,7 +3152,7 @@ lodash.once@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" -lodash.restparam@*, lodash.restparam@^3.0.0: +lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" @@ -4304,7 +4300,7 @@ readable-stream@~2.0.5: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readdir-scoped-modules@*, readdir-scoped-modules@^1.0.0: +readdir-scoped-modules@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" dependencies: @@ -5240,7 +5236,7 @@ v8flags@^2.1.1: dependencies: user-home "^1.1.1" -validate-npm-package-license@*, validate-npm-package-license@^3.0.1: +validate-npm-package-license@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" dependencies: