PHP 8.1.33
Preview: run-script.js Size: 5.41 KB
//lib/node_modules/npm/lib/run-script.js

module.exports = runScript

var lifecycle = require('./utils/lifecycle.js')
var npm = require('./npm.js')
var path = require('path')
var readJson = require('read-package-json')
var log = require('npmlog')
var chain = require('slide').chain
var usage = require('./utils/usage')
var output = require('./utils/output.js')
var didYouMean = require('./utils/did-you-mean')
var isWindowsShell = require('./utils/is-windows-shell.js')

runScript.usage = usage(
  'run-script',
  'npm run-script <command> [-- <args>...]'
)

runScript.completion = function (opts, cb) {
  // see if there's already a package specified.
  var argv = opts.conf.argv.remain

  if (argv.length >= 4) return cb()

  if (argv.length === 3) {
    // either specified a script locally, in which case, done,
    // or a package, in which case, complete against its scripts
    var json = path.join(npm.localPrefix, 'package.json')
    return readJson(json, function (er, d) {
      if (er && er.code !== 'ENOENT' && er.code !== 'ENOTDIR') return cb(er)
      if (er) d = {}
      var scripts = Object.keys(d.scripts || {})
      console.error('local scripts', scripts)
      if (scripts.indexOf(argv[2]) !== -1) return cb()
      // ok, try to find out which package it was, then
      var pref = npm.config.get('global') ? npm.config.get('prefix')
        : npm.localPrefix
      var pkgDir = path.resolve(pref, 'node_modules', argv[2], 'package.json')
      readJson(pkgDir, function (er, d) {
        if (er && er.code !== 'ENOENT' && er.code !== 'ENOTDIR') return cb(er)
        if (er) d = {}
        var scripts = Object.keys(d.scripts || {})
        return cb(null, scripts)
      })
    })
  }

  readJson(path.join(npm.localPrefix, 'package.json'), function (er, d) {
    if (er && er.code !== 'ENOENT' && er.code !== 'ENOTDIR') return cb(er)
    d = d || {}
    cb(null, Object.keys(d.scripts || {}))
  })
}

function runScript (args, cb) {
  if (!args.length) return list(cb)

  var pkgdir = npm.localPrefix
  var cmd = args.shift()

  readJson(path.resolve(pkgdir, 'package.json'), function (er, d) {
    if (er) return cb(er)
    run(d, pkgdir, cmd, args, cb)
  })
}

function list (cb) {
  var json = path.join(npm.localPrefix, 'package.json')
  var cmdList = [
    'publish',
    'install',
    'uninstall',
    'test',
    'stop',
    'start',
    'restart',
    'version'
  ].reduce(function (l, p) {
    return l.concat(['pre' + p, p, 'post' + p])
  }, [])
  return readJson(json, function (er, d) {
    if (er && er.code !== 'ENOENT' && er.code !== 'ENOTDIR') return cb(er)
    if (er) d = {}
    var allScripts = Object.keys(d.scripts || {})
    var scripts = []
    var runScripts = []
    allScripts.forEach(function (script) {
      if (cmdList.indexOf(script) !== -1) scripts.push(script)
      else runScripts.push(script)
    })

    if (log.level === 'silent') {
      return cb(null, allScripts)
    }

    if (npm.config.get('json')) {
      output(JSON.stringify(d.scripts || {}, null, 2))
      return cb(null, allScripts)
    }

    if (npm.config.get('parseable')) {
      allScripts.forEach(function (script) {
        output(script + ':' + d.scripts[script])
      })
      return cb(null, allScripts)
    }

    var s = '\n    '
    var prefix = '  '
    if (scripts.length) {
      output('Lifecycle scripts included in %s:', d.name)
    }
    scripts.forEach(function (script) {
      output(prefix + script + s + d.scripts[script])
    })
    if (!scripts.length && runScripts.length) {
      output('Scripts available in %s via `npm run-script`:', d.name)
    } else if (runScripts.length) {
      output('\navailable via `npm run-script`:')
    }
    runScripts.forEach(function (script) {
      output(prefix + script + s + d.scripts[script])
    })
    return cb(null, allScripts)
  })
}

function run (pkg, wd, cmd, args, cb) {
  if (!pkg.scripts) pkg.scripts = {}

  var cmds
  if (cmd === 'restart' && !pkg.scripts.restart) {
    cmds = [
      'prestop', 'stop', 'poststop',
      'restart',
      'prestart', 'start', 'poststart'
    ]
  } else {
    if (pkg.scripts[cmd] == null) {
      if (cmd === 'test') {
        pkg.scripts.test = 'echo \'Error: no test specified\''
      } else if (cmd === 'env') {
        if (isWindowsShell) {
          log.verbose('run-script using default platform env: SET (Windows)')
          pkg.scripts[cmd] = 'SET'
        } else {
          log.verbose('run-script using default platform env: env (Unix)')
          pkg.scripts[cmd] = 'env'
        }
      } else if (npm.config.get('if-present')) {
        return cb(null)
      } else {
        let suggestions = didYouMean(cmd, Object.keys(pkg.scripts))
        suggestions = suggestions ? '\n' + suggestions : ''
        return cb(new Error('missing script: ' + cmd + suggestions))
      }
    }
    cmds = [cmd]
  }

  if (!cmd.match(/^(pre|post)/)) {
    cmds = ['pre' + cmd].concat(cmds).concat('post' + cmd)
  }

  log.verbose('run-script', cmds)
  chain(cmds.map(function (c) {
    // pass cli arguments after -- to script.
    if (pkg.scripts[c] && c === cmd) {
      pkg.scripts[c] = pkg.scripts[c] + joinArgs(args)
    }

    // when running scripts explicitly, assume that they're trusted.
    return [lifecycle, pkg, c, wd, { unsafePerm: true }]
  }), cb)
}

// join arguments after '--' and pass them to script,
// handle special characters such as ', ", ' '.
function joinArgs (args) {
  var joinedArgs = ''
  args.forEach(function (arg) {
    joinedArgs += ' "' + arg.replace(/"/g, '\\"') + '"'
  })
  return joinedArgs
}

Directory Contents

Dirs: 6 × Files: 66

Name Size Perms Modified Actions
auth DIR
- drwxr-xr-x 2024-03-03 22:36:29
Edit Download
config DIR
- drwxr-xr-x 2024-03-03 22:36:29
Edit Download
doctor DIR
- drwxr-xr-x 2024-03-03 22:36:29
Edit Download
install DIR
- drwxr-xr-x 2024-03-03 22:36:29
Edit Download
search DIR
- drwxr-xr-x 2024-03-03 22:36:29
Edit Download
utils DIR
- drwxr-xr-x 2024-03-03 22:36:29
Edit Download
5.54 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
1.31 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
10.56 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
515 B lrw-r--r-- 2021-03-10 14:36:36
Edit Download
864 B lrw-r--r-- 2021-03-10 14:36:35
Edit Download
4.44 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
4.66 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
1.31 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
7.11 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
7.43 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
4.88 KB lrw-r--r-- 2021-03-10 14:36:35
Edit Download
2.11 KB lrw-r--r-- 2021-03-10 14:36:35
Edit Download
4.11 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
1.04 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
3.98 KB lrw-r--r-- 2021-03-10 14:36:35
Edit Download
1.37 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
1.67 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
3.97 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
1.77 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
4.91 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
235 B lrw-r--r-- 2021-03-10 14:36:36
Edit Download
5.64 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
6.35 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
4.62 KB lrw-r--r-- 2021-03-10 14:36:35
Edit Download
2.74 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
486 B lrw-r--r-- 2021-03-10 14:36:36
Edit Download
507 B lrw-r--r-- 2021-03-10 14:36:36
Edit Download
36.47 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
5.60 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
1.26 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
16.09 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
14.37 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
4.18 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
12.28 KB lrw-r--r-- 2021-03-10 14:36:35
Edit Download
6.60 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
11.79 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
1.11 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
330 B lrw-r--r-- 2021-03-10 14:36:36
Edit Download
11.13 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
2.23 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
5.14 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
2.09 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
1.44 KB lrw-r--r-- 2021-03-10 14:36:35
Edit Download
64 B lrw-r--r-- 2021-03-10 14:36:36
Edit Download
320 B lrw-r--r-- 2021-03-10 14:36:35
Edit Download
5.41 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
3.36 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
276 B lrw-r--r-- 2021-03-10 14:36:36
Edit Download
9.82 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
2.11 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
1.03 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
62 B lrw-r--r-- 2021-03-10 14:36:36
Edit Download
61 B lrw-r--r-- 2021-03-10 14:36:36
Edit Download
509 B lrw-r--r-- 2021-03-10 14:36:36
Edit Download
4.61 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
374 B lrw-r--r-- 2021-03-10 14:36:36
Edit Download
6.66 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
4.27 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
2.21 KB lrw-r--r-- 2021-03-10 14:36:35
Edit Download
3.51 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
2.16 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
9.79 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
15.11 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
4.01 KB lrw-r--r-- 2021-03-10 14:36:35
Edit Download
1.77 KB lrw-r--r-- 2021-03-10 14:36:36
Edit Download
1.62 KB lrw-r--r-- 2021-03-10 14:36:35
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).