diff options
Diffstat (limited to 'deps/npm/node_modules/cacache/lib/content/read.js')
-rw-r--r-- | deps/npm/node_modules/cacache/lib/content/read.js | 43 |
1 files changed, 29 insertions, 14 deletions
diff --git a/deps/npm/node_modules/cacache/lib/content/read.js b/deps/npm/node_modules/cacache/lib/content/read.js index b09ad5cb40..5c1a6f2f29 100644 --- a/deps/npm/node_modules/cacache/lib/content/read.js +++ b/deps/npm/node_modules/cacache/lib/content/read.js @@ -3,6 +3,7 @@ const BB = require('bluebird') const contentPath = require('./path') +const figgyPudding = require('figgy-pudding') const fs = require('graceful-fs') const PassThrough = require('stream').PassThrough const pipe = BB.promisify(require('mississippi').pipe) @@ -11,9 +12,13 @@ const Y = require('../util/y.js') BB.promisifyAll(fs) +const ReadOpts = figgyPudding({ + size: {} +}) + module.exports = read function read (cache, integrity, opts) { - opts = opts || {} + opts = ReadOpts(opts) return pickContentSri(cache, integrity).then(content => { const sri = content.sri const cpath = contentPath(cache, sri) @@ -32,7 +37,7 @@ function read (cache, integrity, opts) { module.exports.stream = readStream module.exports.readStream = readStream function readStream (cache, integrity, opts) { - opts = opts || {} + opts = ReadOpts(opts) const stream = new PassThrough() pickContentSri( cache, integrity @@ -56,7 +61,7 @@ if (fs.copyFile) { module.exports.copy = copy } function copy (cache, integrity, dest, opts) { - opts = opts || {} + opts = ReadOpts(opts) return pickContentSri(cache, integrity).then(content => { const sri = content.sri const cpath = contentPath(cache, sri) @@ -68,17 +73,17 @@ module.exports.hasContent = hasContent function hasContent (cache, integrity) { if (!integrity) { return BB.resolve(false) } return pickContentSri(cache, integrity) - .catch({code: 'ENOENT'}, () => false) - .catch({code: 'EPERM'}, err => { - if (process.platform !== 'win32') { - throw err - } else { - return false - } - }).then(content => { - if (!content.sri) return false - return ({ sri: content.sri, size: content.stat.size }) - }) + .catch({code: 'ENOENT'}, () => false) + .catch({code: 'EPERM'}, err => { + if (process.platform !== 'win32') { + throw err + } else { + return false + } + }).then(content => { + if (!content.sri) return false + return ({ sri: content.sri, size: content.stat.size }) + }) } module.exports._pickContentSri = pickContentSri @@ -95,6 +100,16 @@ function pickContentSri (cache, integrity) { return BB.any(sri[sri.pickAlgorithm()].map(meta => { return pickContentSri(cache, meta) })) + .catch(err => { + if ([].some.call(err, e => e.code === 'ENOENT')) { + throw Object.assign( + new Error('No matching content found for ' + sri.toString()), + {code: 'ENOENT'} + ) + } else { + throw err[0] + } + }) } } |