Press n or j to go to the next uncovered block, b, p or k for the previous block.
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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | const c = require('chalk'); const _ = require('lodash/fp'); const ora = require('ora'); const pMap = require('p-map'); const { fetchPackageStats, getPackageVersionList, getPackagesFromPackageJson } = require('./fetch-package-stats'); const {getView} = require('./cli-views'); const fakeSpinner = require('./fake-spinner'); const getPackages = async argv => { const range = argv.range || (argv.range === undefined ? null : -1); if ('range' in argv && 'r' in argv) return getPackageVersionList(argv._[0], range || 8); if ('package' in argv && 'p' in argv) return getPackagesFromPackageJson(argv.package); return argv.self ? ['bundle-phobia-cli'] : argv._; }; const isSingleOutput = argv => _.some(opt => opt in argv, ['size', 'json', 'gzip-size', 'dependencies']); const main = async ({argv, stream = process.stdout}) => { if ('range' in argv && 'r' in argv && argv._.length > 1) throw new Error("Can't use both --range option and list of packages"); if ('package' in argv && 'p' in argv && argv._.length > 0) throw new Error("Can't use both --package option and list of packages"); if ('self' in argv && argv._.length > 0) throw new Error("Can't use both --self and list of packages"); const spinnerActivated = !isSingleOutput(argv); const Spinner = spinnerActivated ? ora : fakeSpinner; const spinner = Spinner({stream}); const packages = await getPackages(argv).catch(err => { const paquage = argv._[0] || 'packages from packages.json'; if (spinnerActivated) spinner.fail(c.red(`resolving ${c.bold.underline(paquage)} failed: `) + err.message); const wrapError = new Error(`${paquage}: ${err.message}`); wrapError.error = err; throw wrapError; }); const view = getView(argv); const allStats = await pMap( packages, async paquage => { spinner.text = `Fetching stats for package ${c.dim.bold(paquage)}`; spinner.start(); const stats = await fetchPackageStats(paquage).catch(err => { spinner.fail(c.red(`resolving ${c.bold.underline(paquage)} failed: `) + err.message); throw err; }); spinner.info(view(stats)); return stats; }, {concurrency: 1} ).catch(err => { spinner.stop(); throw err; }); const nLibs = _.size(allStats); if (nLibs > 1) { spinner.clear(); stream.write('\n'); spinner.info( view({ name: c.magenta('total'), version: `${nLibs} packages`, gzip: _.sumBy('gzip', allStats), size: _.sumBy('size', allStats), dependencyCount: _.sumBy('dependencyCount', allStats) }) ); } spinner.stop(); }; module.exports = {main, isSingleOutput}; |