UNPKG

movie-list

Version:

A node program to show a list of your movies sorted by rating

139 lines (101 loc) 4.05 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _util = require('util'); var _caporal = require('caporal'); var _caporal2 = _interopRequireDefault(_caporal); var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk); var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var _cliTable = require('cli-table2'); var _cliTable2 = _interopRequireDefault(_cliTable); var _updateNotifier = require('update-notifier'); var _updateNotifier2 = _interopRequireDefault(_updateNotifier); var _package = require('../package.json'); var _package2 = _interopRequireDefault(_package); var _2 = require('.'); var _3 = _interopRequireDefault(_2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const notifier = (0, _updateNotifier2.default)({ pkg: _package2.default }); _caporal2.default.version(_package2.default.version).description(_package2.default.description).argument('[path]', 'Path to movies directory', null, process.cwd()).option('-s, --sort <property>', 'Sort by property (title|year|rating|runtime)', ['title', 'year', 'rating', 'runtime'], 'rating').option('-o, --order <asc|desc>', 'Order of the sorting', ['asc', 'desc'], 'desc').option('-t, --table', 'Prints the list in a table').option('-j, --json', 'Prints the list data as json').action(({ path }, { sort, order, table, json }, logger) => (0, _3.default)({ source: path }).then(listData => { if (json) { logger.info(JSON.stringify(listData)); return; } if (listData.succeeded) { const sortMap = { title: 'Title', year: 'Year', rating: 'imdbRating', runtime: 'Runtime' }; logger.info(`Succeeded: ${listData.succeeded.length}`); listData.succeeded.sort((a, b) => { const orderIndicator = order === 'asc' ? 1 : -1; const prop = _lodash2.default.property(sortMap[sort]); const responseA = prop(a.info); const responseB = prop(b.info); return responseA > responseB ? orderIndicator : -orderIndicator; }); const succeededTable = new _cliTable2.default({ head: ['Title', 'Year', 'Rating', 'Genres', 'Runtime'], style: { head: [] } }); listData.succeeded.forEach(({ info }) => { const output = [_chalk2.default.cyan(info.Title), info.Year, _chalk2.default.yellow(info.imdbRating), _chalk2.default.green(info.Genre), _chalk2.default.red(info.Runtime)]; if (table) { succeededTable.push(output); } else { logger.info(...output); } }); if (table) { logger.info(succeededTable.toString()); } } if (listData.succeeded && listData.failed) { // Space line between succeeded and failed logger.info(); } if (listData.failed) { const failedTable = new _cliTable2.default({ head: ['Name', 'Error'], style: { head: [] } }); logger.info(`Failed: ${listData.failed.length}`); listData.failed.forEach(({ value, reason }) => { const output = [_chalk2.default.cyan(value.name), _chalk2.default.red((0, _util.isError)(reason) ? reason : `Error: ${reason}`)]; if (table) { failedTable.push(output); } else { logger.info(...output); } }); if (table) { logger.info(failedTable.toString()); } } notifier.notify(); }).catch(err => { if (err.message === 'No api key provided') { err.message += ', save a key with `movie-list key my-key`'; } if (json) { logger.info(JSON.stringify((0, _util.isError)(err) ? err : { err })); return; } console.error(_chalk2.default.red((0, _util.isError)(err) ? err : `Error: ${err}`)); })).command('key', 'set api key to omdb').argument('<key>', 'The api key').action(({ key }, options, logger) => { (0, _2.saveKey)({ apiKey: key }); logger.info(`Saved the given key: ${key} as the api key to omdb`); }); exports.default = argv => { _caporal2.default.parse(argv); }; //# sourceMappingURL=cli.js.map