| #!/usr/bin/env node |
| |
| /* |
| Copyright (c) 2013, Yahoo! Inc. All rights reserved. |
| Code licensed under the BSD License: |
| http://yuilibrary.com/license/ |
| */ |
| |
| var checker = require('../lib/index'); |
| |
| var args = require('../lib/args').parse(); |
| var mkdirp = require('mkdirp'); |
| var path = require('path'); |
| var chalk = require('chalk'); |
| var fs = require('fs'); |
| |
| if (args.help) { |
| console.error('license-checker@' + require('../package.json').version); |
| var usage = [ |
| '', |
| ' --production only show production dependencies.', |
| ' --development only show development dependencies.', |
| ' --unknown report guessed licenses as unknown licenses.', |
| ' --start [path of the initial json to look for]', |
| ' --onlyunknown only list packages with unknown or guessed licenses.', |
| ' --json output in json format.', |
| ' --csv output in csv format.', |
| ' --csvComponentPrefix column prefix for components in csv file', |
| ' --out [filepath] write the data to a specific file.', |
| ' --customPath to add a custom Format file in JSON', |
| ' --exclude [list] exclude modules which licenses are in the comma-separated list from the output', |
| ' --relativeLicensePath output the location of the license files as relative paths', |
| ' --summary output a summary of the license usage', |
| ' --failOn [list] fail (exit with code 1) on the first occurrence of the licenses of the semicolon-separated list', |
| ' --onlyAllow [list] fail (exit with code 1) on the first occurrence of the licenses not in the semicolon-seperated list', |
| ' --direct look for direct dependencies only', |
| ' --packages [list] restrict output to the packages (package@version) in the semicolon-seperated list', |
| ' --excludePackages [list] restrict output to the packages (package@version) not in the semicolon-seperated list', |
| ' --excludePrivatePackages restrict output to not include any package marked as private', |
| '', |
| ' --version The current version', |
| ' --help The text you are reading right now :)', |
| '' |
| ]; |
| console.error(usage.join('\n'), '\n'); |
| process.exit(0); |
| } |
| |
| if (args.version) { |
| console.error(require('../package.json').version); |
| process.exit(1); |
| } |
| |
| if (args.failOn && args.onlyAllow) { |
| console.error('--failOn and --onlyAllow can not be used at the same time. Choose one or the other.'); |
| process.exit(1); |
| } else { |
| var argValue = args.failOn || args.onlyAllow; |
| if (argValue && argValue.indexOf(',') >= 0) { |
| var argName = args.failOn ? 'failOn' : 'onlyAllow'; |
| console.warn('Warning: As of v17 the --' + argName + ' argument takes semicolons as delimeters instead of commas (some license names can contain commas)'); |
| } |
| } |
| |
| checker.init(args, function(err, json) { |
| |
| var formattedOutput = ''; |
| |
| if (!!err) { |
| console.error('Found error'); |
| console.error(err); |
| } |
| |
| if (shouldColorizeOutput(args)) { |
| var keys = Object.keys(json); |
| keys.forEach(function(key) { |
| var keyParts = key.split('@'); |
| var colorizedKey = chalk.blue(keyParts[0]) + chalk.dim('@') + chalk.green(keyParts[1]); |
| json[colorizedKey] = json[key]; |
| delete json[key]; |
| }); |
| } |
| |
| if (args.json) { |
| formattedOutput = JSON.stringify(json, null, 2) + '\n'; |
| } else if (args.csv) { |
| formattedOutput = checker.asCSV(json, args.customFormat, args.csvComponentPrefix); |
| } else if (args.markdown){ |
| formattedOutput = checker.asMarkDown(json, args.customFormat) + '\n'; |
| } else if (args.summary) { |
| formattedOutput = checker.asSummary(json); |
| } else { |
| formattedOutput = checker.asTree(json); |
| } |
| |
| if (args.files) { |
| checker.asFiles(json, args.files); |
| } else if (args.out) { |
| var dir = path.dirname(args.out); |
| mkdirp.sync(dir); |
| fs.writeFileSync(args.out, formattedOutput, 'utf8'); |
| } else { |
| console.log(formattedOutput); |
| } |
| }); |
| |
| function shouldColorizeOutput(args) { |
| return args.color && !args.out && !(args.csv || args.json || args.markdown); |
| } |