mirror of https://github.com/Seich/Beau.git
121 lines
2.9 KiB
JavaScript
121 lines
2.9 KiB
JavaScript
const clc = require('cli-color');
|
|
const jsome = require('jsome');
|
|
const { Line, Spinner } = require('clui');
|
|
const { flags, Command } = require('@oclif/command');
|
|
const { baseFlags, loadConfig } = require('../utils');
|
|
|
|
class RequestCommand extends Command {
|
|
prettyOutput(res, verbose = false) {
|
|
let { status, body } = res.response;
|
|
|
|
this.spinner.stop();
|
|
|
|
status = status.toString().startsWith(2)
|
|
? clc.green(status)
|
|
: clc.red(status);
|
|
|
|
new Line()
|
|
.padding(2)
|
|
.column('Status', 20, [clc.cyan])
|
|
.column('Endpoint', 20, [clc.cyan])
|
|
.output();
|
|
|
|
new Line()
|
|
.padding(2)
|
|
.column(status, 20)
|
|
.column(res.request.endpoint)
|
|
.output();
|
|
|
|
new Line().output();
|
|
|
|
this.log(jsome.getColoredString((verbose ? res : body) || null));
|
|
}
|
|
|
|
async run() {
|
|
const {
|
|
flags: {
|
|
param: params,
|
|
config,
|
|
'no-format': noFormat = false,
|
|
verbose = false,
|
|
'as-json': asJson = false,
|
|
quiet = false
|
|
},
|
|
args
|
|
} = this.parse(RequestCommand);
|
|
|
|
const Beau = loadConfig(config, params);
|
|
|
|
const spinnerSprite = ['⣾', '⣽', '⣻', '⢿', '⡿', '⣟', '⣯', '⣷'];
|
|
this.spinner = new Spinner('', spinnerSprite);
|
|
|
|
let spinnerEnabled = !noFormat && !asJson && !quiet;
|
|
|
|
if (spinnerEnabled) {
|
|
this.spinner.start();
|
|
}
|
|
|
|
let res;
|
|
|
|
try {
|
|
res = await Beau.requests.execByAlias(args.alias);
|
|
} catch (err) {
|
|
this.spinner.stop();
|
|
|
|
if (!quiet) {
|
|
this.error(err.message);
|
|
}
|
|
|
|
this.exit(1);
|
|
}
|
|
|
|
if (quiet) {
|
|
return;
|
|
}
|
|
|
|
if (asJson) {
|
|
return this.log(JSON.stringify(verbose ? res : res.response));
|
|
}
|
|
|
|
if (noFormat) {
|
|
this.log(res.response.status);
|
|
this.log(res.request.endpoint);
|
|
this.log(JSON.stringify(res.response.headers));
|
|
this.log(JSON.stringify(res.response.body));
|
|
return;
|
|
}
|
|
|
|
this.prettyOutput(res, verbose);
|
|
}
|
|
}
|
|
|
|
RequestCommand.description = `Executes a request by name.`;
|
|
RequestCommand.flags = {
|
|
...baseFlags,
|
|
param: flags.string({
|
|
char: 'P',
|
|
multiple: true,
|
|
default: [],
|
|
description: `Allows you to inject values into the request's environment.`
|
|
}),
|
|
|
|
quiet: flags.boolean({
|
|
description: `Skips the output.`
|
|
}),
|
|
|
|
'as-json': flags.boolean({
|
|
char: 'j',
|
|
description: `Outputs the response as json.`
|
|
})
|
|
};
|
|
|
|
RequestCommand.args = [
|
|
{
|
|
name: 'alias',
|
|
required: true,
|
|
description: `The alias of the request to execute.`
|
|
}
|
|
];
|
|
|
|
module.exports = RequestCommand;
|