马宇豪
2024-07-16 f591c27b57e2418c9495bc02ae8cfff84d35bc18
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
// get all the paths that are (or might be) installed for a given pkg
// There's no guarantee that all of these will be installed, but if they
// are present, then we can assume that they're associated.
const binTarget = require('./bin-target.js')
const manTarget = require('./man-target.js')
const { resolve, basename, extname } = require('path')
const isWindows = require('./is-windows.js')
module.exports = ({ path, pkg, global, top }) => {
  if (top && !global) {
    return []
  }
 
  const binSet = []
  const binTarg = binTarget({ path, top })
  if (pkg.bin) {
    for (const bin of Object.keys(pkg.bin)) {
      const b = resolve(binTarg, bin)
      binSet.push(b)
      if (isWindows) {
        binSet.push(b + '.cmd')
        binSet.push(b + '.ps1')
      }
    }
  }
 
  const manTarg = manTarget({ path, top })
  const manSet = []
  if (manTarg && pkg.man && Array.isArray(pkg.man) && pkg.man.length) {
    for (const man of pkg.man) {
      if (!/.\.[0-9]+(\.gz)?$/.test(man)) {
        return binSet
      }
 
      const section = extname(basename(man, '.gz')).slice(1)
      const base = basename(man)
 
      manSet.push(resolve(manTarg, 'man' + section, base))
    }
  }
 
  return manSet.length ? [...binSet, ...manSet] : binSet
}