# All files pack.js

97.14% Statements 34/35
100% Branches 4/4
80% Functions 4/5
100% Lines 32/32

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    503x
    3x
    3x
    3x
    3x

    3x
    3x

    3x
    3x

    3x
    3x
    3x

    3x

    3x
    3x

    3x

    3x
    3x

    3x
    3x
    1x

    3x
    3x
    3x
    3x
    3x
    3x
    3x

    3x
    2x

    3x

    3x
     const util = require('util')
    const log = require('npmlog')
    const pacote = require('pacote')
    const libpack = require('libnpmpack')
    const npa = require('npm-package-arg')

    const npm = require('./npm.js')
    const { getContents, logTar } = require('./utils/tar.js')

    const writeFile = util.promisify(require('fs').writeFile)
    const output = require('./utils/output.js')

    const completion = require('./utils/completion/none.js')
    const usageUtil = require('./utils/usage.js')
    const usage = usageUtil('pack', 'npm pack [[<@scope>/]<pkg>...] [--dry-run]')

    const cmd = (args, cb) => pack(args).then(() => cb()).catch(cb)

    const pack = async (args) => {
      if (args.length === 0) args = ['.']

      const { unicode } = npm.flatOptions

      // clone the opts because pacote mutates it with resolved/integrity
      const tarballs = await Promise.all(args.map((arg) =>
        pack_(arg, { ...npm.flatOptions })))

      for (const tar of tarballs) {
        logTar(tar, { log, unicode })
        output(tar.filename)
      }
    }

    const pack_ = async (arg, opts) => {
      const spec = npa(arg)
      const { dryRun } = opts
      const manifest = await pacote.manifest(spec, opts)
      const filename = `${manifest.name}-${manifest.version}.tgz`
      const tarballData = await libpack(arg, opts)
      const pkgContents = await getContents(manifest, tarballData)

      if (!dryRun) {
        await writeFile(filename, tarballData)
      }

      return pkgContents
    }

    module.exports = Object.assign(cmd, { usage, completion })