• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict'
2
3const fetchManifest = require('./lib/fetch').manifest
4const finalizeManifest = require('./lib/finalize-manifest')
5const optCheck = require('./lib/util/opt-check')
6const pinflight = require('promise-inflight')
7const npa = require('npm-package-arg')
8
9module.exports = manifest
10function manifest (spec, opts) {
11  opts = optCheck(opts)
12  spec = npa(spec, opts.where)
13
14  const label = [
15    spec.name,
16    spec.saveSpec || spec.fetchSpec,
17    spec.type,
18    opts.cache,
19    opts.registry,
20    opts.scope
21  ].join(':')
22  return pinflight(label, () => {
23    const startTime = Date.now()
24    return fetchManifest(spec, opts).then(rawManifest => {
25      return finalizeManifest(rawManifest, spec, opts)
26    }).then(manifest => {
27      if (opts.annotate) {
28        manifest._from = spec.saveSpec || spec.raw
29        manifest._requested = spec
30        manifest._spec = spec.raw
31        manifest._where = opts.where
32      }
33      const elapsedTime = Date.now() - startTime
34      opts.log.silly('pacote', `${spec.type} manifest for ${spec.name}@${spec.saveSpec || spec.fetchSpec} fetched in ${elapsedTime}ms`)
35      return manifest
36    })
37  })
38}
39