summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/pacote/lib/fetchers/file.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/node_modules/pacote/lib/fetchers/file.js')
-rw-r--r--deps/npm/node_modules/pacote/lib/fetchers/file.js31
1 files changed, 28 insertions, 3 deletions
diff --git a/deps/npm/node_modules/pacote/lib/fetchers/file.js b/deps/npm/node_modules/pacote/lib/fetchers/file.js
index 8217f5015b..48bec0c2d8 100644
--- a/deps/npm/node_modules/pacote/lib/fetchers/file.js
+++ b/deps/npm/node_modules/pacote/lib/fetchers/file.js
@@ -2,9 +2,10 @@
const BB = require('bluebird')
+const cacache = require('cacache')
const Fetcher = require('../fetch')
const fs = require('fs')
-const pipe = require('mississippi').pipe
+const pipe = BB.promisify(require('mississippi').pipe)
const through = require('mississippi').through
const readFileAsync = BB.promisify(fs.readFile)
@@ -29,15 +30,39 @@ Fetcher.impl(fetchFile, {
const src = spec._resolved || spec.fetchSpec
const stream = through()
statAsync(src).then(stat => {
+ if (spec._resolved) { stream.emit('manifest', spec) }
if (stat.size <= MAX_BULK_SIZE) {
// YAY LET'S DO THING IN BULK
return readFileAsync(src).then(data => {
- stream.write(data, () => {
+ if (opts.cache) {
+ return cacache.put(
+ opts.cache, `pacote:tarball:file:${src}`, data, {
+ integrity: opts.integrity
+ }
+ ).then(integrity => ({data, integrity}))
+ } else {
+ return {data}
+ }
+ }).then(info => {
+ if (info.integrity) { stream.emit('integrity', info.integrity) }
+ stream.write(info.data, () => {
stream.end()
})
})
} else {
- return pipe(fs.createReadStream(src), stream)
+ let integrity
+ const cacheWriter = !opts.cache
+ ? BB.resolve(null)
+ : (pipe(
+ fs.createReadStream(src),
+ cacache.put.stream(opts.cache, `pacote:tarball:${src}`, {
+ integrity: opts.integrity
+ }).on('integrity', d => { integrity = d })
+ ))
+ return cacheWriter.then(() => {
+ if (integrity) { stream.emit('integrity', integrity) }
+ return pipe(fs.createReadStream(src), stream)
+ })
}
}, err => stream.emit('error', err))
return stream