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 | 2x 2x 2x 2x 2x 2x 2x 2x 5x 5x 4x 4x 2x 17x 2x 9x 2x 7x 1x 6x 1x 5x 5x 5x 5x 1x 1x 1x 1x 1x 1x 4x 3x 4x 4x 4x 1x 1x 3x 3x 1x 1x 2x 2x 1x 1x 1x 2x 2x | 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); Iif ('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'; Eif (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}; |