HEX
Server: Apache/2.4.41
System: Linux mainweb 5.4.0-182-generic #202-Ubuntu SMP Fri Apr 26 12:29:36 UTC 2024 x86_64
User: nationalmedicaregrp (1119)
PHP: 8.3.7
Disabled: exec,passthru,shell_exec,system,popen,proc_open,pcntl_exec
Upload Files
File: /home/ubuntu/.nvm/versions/node/v8.16.2/lib/node_modules/npm/node_modules/libcipm/lib/extract.js
'use strict'

const BB = require('bluebird')

const npa = require('npm-package-arg')
const workerFarm = require('worker-farm')

const extractionWorker = require('./worker.js')
const WORKER_PATH = require.resolve('./worker.js')

module.exports = {
  startWorkers () {
    this._workers = workerFarm({
      maxConcurrentCallsPerWorker: 20,
      maxRetries: 1
    }, WORKER_PATH)
  },

  stopWorkers () {
    workerFarm.end(this._workers)
  },

  child (name, child, childPath, config, opts) {
    const spec = npa.resolve(name, child.version)
    const additionalToPacoteOpts = {}
    if (typeof opts.dirPacker !== 'undefined') {
      additionalToPacoteOpts.dirPacker = opts.dirPacker
    }
    const childOpts = config.toPacote(Object.assign({
      integrity: child.integrity,
      resolved: child.resolved
    }, additionalToPacoteOpts))
    const args = [spec, childPath, childOpts]
    return BB.fromNode((cb) => {
      let launcher = extractionWorker
      let msg = args
      const spec = typeof args[0] === 'string' ? npa(args[0]) : args[0]
      childOpts.loglevel = opts.log.level
      if (spec.registry || spec.type === 'remote') {
        // We can't serialize these options
        childOpts.config = null
        childOpts.log = null
        childOpts.dirPacker = null
        // workers will run things in parallel!
        launcher = this._workers
        try {
          msg = JSON.stringify(msg)
        } catch (e) {
          return cb(e)
        }
      }
      launcher(msg, cb)
    })
  }
}