pushoo-cli
Version:
A command line tool with Pushoo.js pushes multiple platform messages.
137 lines • 5.46 kB
JavaScript
import chalkTemplate from 'chalk-template';
import { exit } from 'process';
import pushoo from 'pushoo';
import YAML from 'yaml';
import manifest from '../package.json';
import * as utils from './utils';
import { checkForUpdates, configurationFileSetting, defaultConfigurationFilePath, getConfiguration, getDefaultConfiguration, getHelpText, parseArguments } from './utils/cli';
import { logger } from './utils/logger';
import { resolve } from './utils/promise';
const run = async () => {
// Parse the options passed by the user.
const [parseError, args] = await resolve(parseArguments());
if (parseError || !args) {
logger.error(parseError.message);
exit(1);
}
const cliOptions = {
config: args['--config'],
platforms: args['--platforms'],
tokens: args['--tokens'],
title: args['--title'],
content: args['--content'],
options: args['--options'],
debug: args['--debug']
};
// if debug, then set log level to debug
if (cliOptions.debug) {
logger.setLevel('debug');
}
logger.debug('command options:', JSON.stringify(cliOptions));
// Check for updates to the paØckage unless the user sets the `NO_UPDATE_CHECK`
// variable.
const [updateError] = await resolve(checkForUpdates(manifest));
if (updateError) {
const suffix = args['--debug'] ? ':' : ' (use `--debug` to see full error)';
logger.warn(`Checking for updates failed${suffix}`);
logger.error(updateError.message);
}
// If the `version` or `help` arguments are passed, print the version or the
// help text and exit.
if (args['--version']) {
logger.log(manifest.version);
exit(0);
}
if (args['--help']) {
logger.log(getHelpText());
exit(0);
}
const commandArray = args._;
if (commandArray.includes('config')) {
await configurationFileSetting(defaultConfigurationFilePath);
exit(0);
}
const defaultConfig = await getDefaultConfiguration();
// log default config string
logger.debug(`default config(${defaultConfigurationFilePath}):`, JSON.stringify(defaultConfig));
if (cliOptions.config) {
const tmpConfig = await getConfiguration(cliOptions.config);
if (tmpConfig) {
cliOptions.platforms = cliOptions.platforms
? cliOptions.platforms
: tmpConfig.platforms;
cliOptions.tokens = cliOptions.tokens
? cliOptions.tokens
: tmpConfig.tokens;
cliOptions.title = cliOptions.title ? cliOptions.title : tmpConfig.title;
cliOptions.content = cliOptions.content
? cliOptions.content
: tmpConfig.content;
}
}
else if (defaultConfig) {
cliOptions.platforms = cliOptions.platforms
? cliOptions.platforms
: defaultConfig.platforms;
cliOptions.tokens = cliOptions.tokens
? cliOptions.tokens
: defaultConfig.tokens;
cliOptions.title = cliOptions.title
? cliOptions.title
: defaultConfig.title;
cliOptions.content = cliOptions.content
? cliOptions.content
: defaultConfig.content;
}
if (!cliOptions.content && cliOptions.content === '' && args._[0]) {
cliOptions.content = args._[0];
}
// if content is not set, show help text and exit
if (!cliOptions.content && cliOptions.content === '') {
logger.info(getHelpText());
exit(0);
}
utils.checkRequiredAttributes(cliOptions, ['platforms', 'tokens', 'content']);
const platforms = cliOptions.platforms.split(/[,,]/).map((p) => p.trim());
const tokens = cliOptions.tokens.split(/[,,]/).map((t) => t.trim());
utils.checkArrayLength([platforms, tokens]);
const pushStateList = [];
logger.log(chalkTemplate `{bold pushoo ...}`);
for (let i = 0; i < platforms.length; i++) {
const platform = platforms[i];
// Hide string parts of the character
const pushooOptions = {
token: tokens[i],
title: cliOptions.title,
content: cliOptions.content,
options: cliOptions.options ? JSON.parse(cliOptions.options) : {}
};
const pushState = {
platform: platform,
options: pushooOptions
};
const hideToken = tokens[i].replace(/(?<=.{4}).(?=.{4})/g, '*');
logger.log(chalkTemplate `\n\n{bold platform ${i + 1}/${platforms.length}:} {cyan ${platform}} push options:\n${YAML.stringify({
...pushooOptions,
token: hideToken
})}`);
try {
pushState.result = await pushoo(platform, pushooOptions);
}
catch (e) {
pushState.error = e;
}
pushStateList.push(pushState);
if (pushState.error) {
logger.info(chalkTemplate `{bold ${pushState.platform}}: {red ${pushState.error.message}}`);
}
else {
logger.log(chalkTemplate `{bold ${pushState.platform}}: {green Push done.}`);
}
}
const successPushCount = pushStateList.filter((v) => !v.error).length;
logger.log(chalkTemplate `\n{bold Pushoo done.} success: {green ${successPushCount}}, failed: {red ${pushStateList.length - successPushCount}}.`);
};
run();
//# sourceMappingURL=main.js.map