blob: 2704616f9df39c2d939b9bebfb91d6584b10c3f5 [file] [log] [blame]
#!/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);
}