Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/pacote/lib/fetchers/file.js')
-rw-r--r--node_modules/pacote/lib/fetchers/file.js49
1 files changed, 49 insertions, 0 deletions
diff --git a/node_modules/pacote/lib/fetchers/file.js b/node_modules/pacote/lib/fetchers/file.js
new file mode 100644
index 000000000..8217f5015
--- /dev/null
+++ b/node_modules/pacote/lib/fetchers/file.js
@@ -0,0 +1,49 @@
+'use strict'
+
+const BB = require('bluebird')
+
+const Fetcher = require('../fetch')
+const fs = require('fs')
+const pipe = require('mississippi').pipe
+const through = require('mississippi').through
+
+const readFileAsync = BB.promisify(fs.readFile)
+const statAsync = BB.promisify(fs.stat)
+
+const MAX_BULK_SIZE = 2 * 1024 * 1024 // 2MB
+
+// `file` packages refer to local tarball files.
+const fetchFile = module.exports = Object.create(null)
+
+Fetcher.impl(fetchFile, {
+ manifest (spec, opts) {
+ // We can't do much here. `finalizeManifest` will take care of
+ // calling `tarball` to fill out all the necessary details.
+ return BB.resolve(null)
+ },
+
+ // All the heavy lifting for `file` packages is done here.
+ // They're never cached. We just read straight out of the file.
+ // TODO - maybe they *should* be cached?
+ tarball (spec, opts) {
+ const src = spec._resolved || spec.fetchSpec
+ const stream = through()
+ statAsync(src).then(stat => {
+ if (stat.size <= MAX_BULK_SIZE) {
+ // YAY LET'S DO THING IN BULK
+ return readFileAsync(src).then(data => {
+ stream.write(data, () => {
+ stream.end()
+ })
+ })
+ } else {
+ return pipe(fs.createReadStream(src), stream)
+ }
+ }, err => stream.emit('error', err))
+ return stream
+ },
+
+ fromManifest (manifest, spec, opts) {
+ return this.tarball(manifest || spec, opts)
+ }
+})