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
|
const linkBins = require('./lib/link-bins.js')
const linkMans = require('./lib/link-mans.js')
const binLinks = opts => {
const { path, pkg, force, global, top } = opts
// global top pkgs on windows get bins installed in {prefix}, and no mans
//
// unix global top pkgs get their bins installed in {prefix}/bin,
// and mans in {prefix}/share/man
//
// non-top pkgs get their bins installed in {prefix}/node_modules/.bin,
// and do not install mans
//
// non-global top pkgs don't have any bins or mans linked. From here on
// out, if it's top, we know that it's global, so no need to pass that
// option further down the stack.
if (top && !global)
return Promise.resolve()
return Promise.all([
// allow clobbering within the local node_modules/.bin folder.
// only global bins are protected in this way, or else it is
// yet another vector for excessive dependency conflicts.
linkBins({path, pkg, top, force: force || !top}),
linkMans({path, pkg, top, force}),
])
}
const shimBin = require('./lib/shim-bin.js')
const linkGently = require('./lib/link-gently.js')
const resetSeen = () => {
shimBin.resetSeen()
linkGently.resetSeen()
}
const checkBins = require('./lib/check-bins.js')
const getPaths = require('./lib/get-paths.js')
module.exports = Object.assign(binLinks, {
checkBins,
resetSeen,
getPaths,
})
|