Welcome to mirror list, hosted at ThFree Co, Russian Federation.

license.js « bin « arborist « workspaces - github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 77d5796793a46189f990306a22fbde065735e9b8 (plain)
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
44
45
46
47
48
const localeCompare = require('@isaacs/string-locale-compare')('en')
const Arborist = require('../')
const log = require('./lib/logging.js')

module.exports = (options, time) => {
  const query = options._.shift()
  const a = new Arborist(options)
  return a
    .loadVirtual()
    .then(tree => {
      // only load the actual tree if the virtual one doesn't have modern metadata
      if (!tree.meta || !(tree.meta.originalLockfileVersion >= 2)) {
        throw 'load actual'
      } else {
        return tree
      }
    }).catch((er) => {
      log.error('loading actual tree', er)
      return a.loadActual()
    })
    .then(time)
    .then(({ result: tree }) => {
      const output = []
      if (!query) {
        const set = []
        for (const license of tree.inventory.query('license')) {
          set.push([tree.inventory.query('license', license).size, license])
        }

        for (const [count, license] of set.sort((a, b) =>
          a[1] && b[1] ? b[0] - a[0] || localeCompare(a[1], b[1])
          : a[1] ? -1
          : b[1] ? 1
          : 0)) {
          output.push(`${count} ${license}`)
          log.info(count, license)
        }
      } else {
        for (const node of tree.inventory.query('license', query === 'undefined' ? undefined : query)) {
          const msg = `${node.name} ${node.location} ${node.package.description || ''}`
          output.push(msg)
          log.info(msg)
        }
      }

      return output.join('\n')
    })
}