codekingpro/portable-devtools
115k
1const { resolve } = require('node:path')
2const localeCompare = require('@isaacs/string-locale-compare')('en')
3
4const installedDeep = async (npm) => {
5 const Arborist = require('@npmcli/arborist')
6 const {
7 depth,
8 global,
9 prefix,
10 workspacesEnabled,
11 } = npm.flatOptions
12
13 const getValues = (tree) =>
14 [...tree.inventory.values()]
15 .filter(i => i.location !== '' && !i.isRoot)
16 .map(i => {
17 return i
18 })
19 .filter(i => (i.depth - 1) <= depth)
20 .sort((a, b) => (a.depth - b.depth) || localeCompare(a.name, b.name))
21
22 const res = new Set()
23 const gArb = new Arborist({
24 global: true,
25 path: resolve(npm.globalDir, '..'),
26 workspacesEnabled,
27 })
28 const gTree = await gArb.loadActual({ global: true })
29
30 for (const node of getValues(gTree)) {
31 res.add(global ? node.name : [node.name, '-g'])
32 }
33
34 if (!global) {
35 const arb = new Arborist({ global: false, path: prefix, workspacesEnabled })
36 const tree = await arb.loadActual()
37 for (const node of getValues(tree)) {
38 res.add(node.name)
39 }
40 }
41
42 return [...res]
43}
44
45module.exports = installedDeep
46 