line-api-cli
Version:
LINE API CLIs for Node.js
142 lines (128 loc) • 5.09 kB
JavaScript
import '../typedef';
import colors from 'colors';
import Command from './command';
import ImageHelper from '../image-helper';
import theme from '../theme';
import LINETvListModulesOperation from '../operations/linetv-list-modules-operation';
import LINETvGetSportlightOperation from '../operations/linetv-get-sportlight-operation';
import LINETvListCategoryOperation from '../operations/linetv-list-category-operation';
import LINETvGetCategoryOperation from '../operations/linetv-get-category-operation';
import LINETvRankingOperation from '../operations/linetv-ranking-operation';
import LINETvSearchOperation from '../operations/linetv-search-operation';
import LINETvListStationOperation from '../operations/linetv-list-station-operation';
import LINETvGetStationOperation from '../operations/linetv-get-station-operation';
import LINETvLiveOperation from '../operations/linetv-live-operation';
export default class LINETvCommand extends Command {
/**
* @return {operation:string, options:LINETvCommandOptions, _unknown: Array<string>}
*/
static getCommandLineArgs() {
const commandLineArgs = require('command-line-args');
const { operation, _unknown } = commandLineArgs(
[{ name: 'operation', defaultOption: true }],
{ stopAtFirstUnknown: true }
);
const argv = _unknown || [];
const options = commandLineArgs(
[
{ name: 'help', alias: 'h', type: Boolean },
{ name: 'version', alias: 'v', type: Boolean },
{ name: 'format', type: String },
{ name: 'page', alias: 'p', type: Number }
],
{ argv }
);
return { operation, options, _unknown };
}
static async cli() {
try {
colors.setTheme(theme);
const { operation, options } = this.getCommandLineArgs();
if (options.help) {
const commandLineUsage = require('command-line-usage');
await ImageHelper.draw('chick-helps');
switch (operation) {
case 'list:modules':
console.log(commandLineUsage(LINETvListModulesOperation.usage));
break;
case 'get:spotlight':
console.log(commandLineUsage(LINETvGetSportlightOperation.usage));
break;
case 'list:category':
console.log(commandLineUsage(LINETvListCategoryOperation.usage));
break;
case 'get:category':
console.log(commandLineUsage(LINETvGetCategoryOperation.usage));
break;
case 'ranking':
console.log(commandLineUsage(LINETvRankingOperation.usage));
break;
case 'search':
console.log(commandLineUsage(LINETvSearchOperation.usage));
break;
case 'list:station':
console.log(commandLineUsage(LINETvListStationOperation.usage));
break;
case 'get:station':
console.log(commandLineUsage(LINETvGetStationOperation.usage));
break;
case 'live':
console.log(commandLineUsage(LINETvLiveOperation.usage));
break;
default:
console.log(
commandLineUsage([
...LINETvListModulesOperation.usage,
...LINETvGetSportlightOperation.usage,
...LINETvListCategoryOperation.usage,
...LINETvGetCategoryOperation.usage,
...LINETvRankingOperation.usage,
...LINETvSearchOperation.usage,
...LINETvListStationOperation.usage,
...LINETvGetStationOperation.usage,
...LINETvLiveOperation.usage
])
);
}
process.exit(0);
return;
}
if (options.version) {
await ImageHelper.draw('chick-helps');
console.log(this.versionText);
process.exit(0);
return;
}
if (operation === 'list:modules') {
await LINETvListModulesOperation.run(options);
} else if (operation === 'get:spotlight') {
await LINETvGetSportlightOperation.run(options);
} else if (operation === 'list:category') {
await LINETvListCategoryOperation.run(options);
} else if (operation === 'get:category') {
await LINETvGetCategoryOperation.run(options);
} else if (operation === 'ranking') {
await LINETvRankingOperation.run(options);
} else if (operation === 'search') {
await LINETvSearchOperation.run(options);
} else if (operation === 'list:station') {
await LINETvListStationOperation.run(options);
} else if (operation === 'get:station') {
await LINETvGetStationOperation.run(options);
} else if (operation === 'live') {
await LINETvLiveOperation.run(options);
} else {
await ImageHelper.draw('chick-helps');
console.log(
`Unknown operation: ${(operation || 'undefined').code}`.warn
);
}
return;
} catch (error) {
await ImageHelper.draw('chick-helps');
console.error(error);
process.exit(1);
return;
}
}
}