#!/usr/bin/env node var program = require('commander'); // parse argv program .usage('[query]') .option('-o, --owner ', 'filter by a GitHub user/organization') .option('-k, --keywords ', 'filter by a comma-delimited list of keywords') .option('-l, --limit ', 'maximum number of results', parseInt) .option('-f, --force', 'force redownloading the cache') .option('-m, --maxage ', 'redownload the cache if older than '. parseInt) .option('-v, --verbose', 'verbose output') .option('--debug', 'turn on debug statements') .parse(process.argv); if (program.debug) require('debug').enable('component-consoler*,component-search*'); var co = require('co'); var utils = require('component-consoler'); var search = co(require('component-search2')); var cols = process.stdout.columns || 80; var query = { text: program.args.join(' '), owner: program.owner, limit: program.limit || 5, force: program.force, maxage: 1000 * (program.maxage || 3600), verbose: true, } if (program.keywords) { var keywords = program.keywords.split(','); if (keywords.length) query.keywords = keywords; } // whitespace console.log(); process.on('exit', function(){ console.log(); }); // search search(query, function (err, pkgs) { if (err) utils.fatal(err); if (!pkgs.length) return utils.log('search', 'no matching components found'); verbose(pkgs); }) /** * Verbose output. */ function verbose(pkgs) { console.log(); pkgs.forEach(function(pkg){ console.log(' \033[36m%s\033[m', pkg.repo.toLowerCase()); console.log(' url: \033[90mhttps://github.com/%s\033[m', pkg.repo); console.log(' desc: \033[90m%s\033[m', description(pkg.description)); if (program.verbose && pkg.demo) console.log(' demo: \033[90m%s\033[m', pkg.demo); if (program.verbose) console.log(' version: \033[90m%s\033[m', pkg.version); if (program.verbose) console.log(' license: \033[90m%s\033[m', pkg.license || 'none'); console.log(' ★ \033[90m%s\033[m', pkg.github.stargazers_count); console.log(); }); console.log(); } /** * Wrap description `str`. */ function description(str) { if (!str) return ''; var space; var width = cols - 20; for (var i = 0; i < str.length; ++i) { if (i && i % width === 0) { space = str.indexOf(' ', i); str = str.slice(0, space) + '\n ' + str.slice(space); } } return str; }