movie-list
Version:
A node program to show a list of your movies sorted by rating
139 lines (101 loc) • 4.05 kB
JavaScript
;
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