const didYouMean = require('./did-you-mean.js') const { dirname } = require('path') const { cmdList } = require('./cmd-list') module.exports = (npm, valid = true) => { npm.config.set('loglevel', 'silent') const usesBrowser = npm.config.get('viewer') === 'browser' ? ' (in a browser)' : '' npm.log.level = 'silent' npm.output(` Usage: npm npm install install all the dependencies in your project npm install add the dependency to your project npm test run this project's tests npm run run the script named npm -h quick help on npm -l display usage info for all commands npm help search for help on ${usesBrowser} npm help npm more involved overview${usesBrowser} All commands: ${npm.config.get('long') ? usages(npm) : ('\n ' + wrap(cmdList))} Specify configs in the ini-formatted file: ${npm.config.get('userconfig')} or on the command line via: npm --key=value More configuration info: npm help config Configuration fields: npm help 7 config npm@${npm.version} ${dirname(dirname(__dirname))} `) if (npm.argv.length >= 1) npm.output(didYouMean(npm.argv[0], cmdList)) if (!valid) process.exitCode = 1 } const wrap = (arr) => { const out = [''] const line = !process.stdout.columns ? 60 : Math.min(60, Math.max(process.stdout.columns - 16, 24)) let l = 0 for (const c of arr.sort((a, b) => a < b ? -1 : 1)) { if (out[l].length + c.length + 2 < line) out[l] += ', ' + c else { out[l++] += ',' out[l] = c } } return out.join('\n ').substr(2) } const usages = (npm) => { // return a string of : let maxLen = 0 return cmdList.reduce((set, c) => { set.push([c, npm.commands[c].usage]) maxLen = Math.max(maxLen, c.length) return set }, []) .sort((a, b) => a[0].localeCompare(b[0])) .map(([c, usage]) => `\n ${c}${' '.repeat(maxLen - c.length + 1)}${ (usage.split('\n').join('\n' + ' '.repeat(maxLen + 5)))}`) .join('\n') }