PHP 8.2.30
Preview: unbuild.js Size: 4.11 KB
/proc/thread-self/root/proc/self/root/opt/alt/alt-nodejs11/root/lib/node_modules/npm/lib/unbuild.js

module.exports = unbuild
module.exports.rmStuff = rmStuff
unbuild.usage = 'npm unbuild <folder>\n(this is plumbing)'

var readJson = require('read-package-json')
var gentlyRm = require('./utils/gently-rm.js')
var npm = require('./npm.js')
var path = require('path')
var isInside = require('path-is-inside')
var lifecycle = require('./utils/lifecycle.js')
var asyncMap = require('slide').asyncMap
var chain = require('slide').chain
var log = require('npmlog')
var build = require('./build.js')
var output = require('./utils/output.js')

// args is a list of folders.
// remove any bins/etc, and then delete the folder.
function unbuild (args, silent, cb) {
  if (typeof silent === 'function') {
    cb = silent
    silent = false
  }
  asyncMap(args, unbuild_(silent), cb)
}

function unbuild_ (silent) {
  return function (folder, cb_) {
    function cb (er) {
      cb_(er, path.relative(npm.root, folder))
    }
    folder = path.resolve(folder)
    var base = isInside(folder, npm.prefix) ? npm.prefix : folder
    delete build._didBuild[folder]
    log.verbose('unbuild', folder.substr(npm.prefix.length + 1))
    readJson(path.resolve(folder, 'package.json'), function (er, pkg) {
      // if no json, then just trash it, but no scripts or whatever.
      if (er) return gentlyRm(folder, false, base, cb)
      chain(
        [
          [lifecycle, pkg, 'preuninstall', folder, { failOk: true }],
          [lifecycle, pkg, 'uninstall', folder, { failOk: true }],
          !silent && function (cb) {
            output('unbuild ' + pkg._id)
            cb()
          },
          [rmStuff, pkg, folder],
          [lifecycle, pkg, 'postuninstall', folder, { failOk: true }],
          [gentlyRm, folder, false, base]
        ],
        cb
      )
    })
  }
}

function rmStuff (pkg, folder, cb) {
  // if it's global, and folder is in {prefix}/node_modules,
  // then bins are in {prefix}/bin
  // otherwise, then bins are in folder/../.bin
  var parent = pkg.name[0] === '@' ? path.dirname(path.dirname(folder)) : path.dirname(folder)
  var gnm = npm.dir
  // gnm might be an absolute path, parent might be relative
  // this checks they're the same directory regardless
  var top = path.relative(gnm, parent) === ''

  log.verbose('unbuild rmStuff', pkg._id, 'from', gnm)
  if (!top) log.verbose('unbuild rmStuff', 'in', parent)
  asyncMap([rmBins, rmMans], function (fn, cb) {
    fn(pkg, folder, parent, top, cb)
  }, cb)
}

function rmBins (pkg, folder, parent, top, cb) {
  if (!pkg.bin) return cb()
  var binRoot = top ? npm.bin : path.resolve(parent, '.bin')
  asyncMap(Object.keys(pkg.bin), function (b, cb) {
    if (process.platform === 'win32') {
      chain([ [gentlyRm, path.resolve(binRoot, b) + '.cmd', true, folder],
        [gentlyRm, path.resolve(binRoot, b), true, folder] ], cb)
    } else {
      gentlyRm(path.resolve(binRoot, b), true, folder, cb)
    }
  }, gentlyRmBinRoot)

  function gentlyRmBinRoot (err) {
    if (err || top) return cb(err)
    return gentlyRm(binRoot, true, parent, cb)
  }
}

function rmMans (pkg, folder, parent, top, cb) {
  if (!pkg.man ||
      !top ||
      process.platform === 'win32' ||
      !npm.config.get('global')) {
    return cb()
  }
  var manRoot = path.resolve(npm.config.get('prefix'), 'share', 'man')
  log.verbose('rmMans', 'man files are', pkg.man, 'in', manRoot)
  asyncMap(pkg.man, function (man, cb) {
    if (Array.isArray(man)) {
      man.forEach(rmMan)
    } else {
      rmMan(man)
    }

    function rmMan (man) {
      log.silly('rmMan', 'preparing to remove', man)
      var parseMan = man.match(/(.*\.([0-9]+)(\.gz)?)$/)
      if (!parseMan) {
        log.error(
          'rmMan', man, 'is not a valid name for a man file.',
          'Man files must end with a number, ' +
          'and optionally a .gz suffix if they are compressed.'
        )
        return cb()
      }

      var stem = parseMan[1]
      var sxn = parseMan[2]
      var gz = parseMan[3] || ''
      var bn = path.basename(stem)
      var manDest = path.join(
        manRoot,
        'man' + sxn,
        (bn.indexOf(pkg.name) === 0 ? bn : pkg.name + '-' + bn) + '.' + sxn + gz
      )
      gentlyRm(manDest, true, cb)
    }
  }, cb)
}

Directory Contents

Dirs: 6 × Files: 65

Name Size Perms Modified Actions
auth DIR
- drwxr-xr-x 2024-03-03 22:41:37
Edit Download
config DIR
- drwxr-xr-x 2024-03-03 22:41:37
Edit Download
doctor DIR
- drwxr-xr-x 2024-03-03 22:41:37
Edit Download
install DIR
- drwxr-xr-x 2024-03-03 22:41:37
Edit Download
search DIR
- drwxr-xr-x 2024-03-03 22:41:37
Edit Download
utils DIR
- drwxr-xr-x 2024-03-03 22:41:37
Edit Download
5.53 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
1.29 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
10.43 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
515 B lrw-r--r-- 2021-10-19 09:47:43
Edit Download
864 B lrw-r--r-- 2021-10-19 09:47:43
Edit Download
4.44 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
4.66 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
471 B lrw-r--r-- 2021-10-19 09:47:43
Edit Download
7.11 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
7.42 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
4.88 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
2.11 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
4.09 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
1.04 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
3.97 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
1.37 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
1.63 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
3.81 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
1.77 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
235 B lrw-r--r-- 2021-10-19 09:47:43
Edit Download
5.64 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
6.33 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
4.21 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
2.74 KB lrw-r--r-- 2021-10-19 09:47:44
Edit Download
486 B lrw-r--r-- 2021-10-19 09:47:43
Edit Download
507 B lrw-r--r-- 2021-10-19 09:47:43
Edit Download
34.75 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
5.60 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
1.26 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
15.79 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
12.89 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
4.18 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
11.73 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
6.60 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
11.72 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
1.11 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
330 B lrw-r--r-- 2021-10-19 09:47:43
Edit Download
11.13 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
2.23 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
5.14 KB lrw-r--r-- 2021-10-19 09:47:44
Edit Download
2.09 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
1.44 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
64 B lrw-r--r-- 2021-10-19 09:47:43
Edit Download
316 B lrw-r--r-- 2021-10-19 09:47:43
Edit Download
5.40 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
3.36 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
276 B lrw-r--r-- 2021-10-19 09:47:43
Edit Download
9.00 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
2.11 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
1.03 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
62 B lrw-r--r-- 2021-10-19 09:47:43
Edit Download
61 B lrw-r--r-- 2021-10-19 09:47:43
Edit Download
509 B lrw-r--r-- 2021-10-19 09:47:43
Edit Download
4.54 KB lrw-r--r-- 2021-10-19 09:47:44
Edit Download
374 B lrw-r--r-- 2021-10-19 09:47:43
Edit Download
6.84 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
4.11 KB lrw-r--r-- 2021-10-19 09:47:44
Edit Download
2.21 KB lrw-r--r-- 2021-10-19 09:47:44
Edit Download
3.44 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
2.19 KB lrw-r--r-- 2021-10-19 09:47:44
Edit Download
9.50 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
15.06 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
4.01 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
1.77 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download
1.58 KB lrw-r--r-- 2021-10-19 09:47:43
Edit Download

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