Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/commands/activate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ export async function handler(

checkConfigForCredentials(config);

printActivateConfig(config);
printActivateConfig(config, flags.outputFormat);

const details = config.buildSid
? `(${config.buildSid})`
Expand All @@ -78,7 +78,7 @@ export async function handler(
`Activated new build ${details} on ${config.targetEnvironment ||
'production'}`
);
printActivateResult(result);
printActivateResult(result, flags.outputFormat);
} catch (err) {
handleError(err, spinner);
}
Expand Down
5 changes: 2 additions & 3 deletions src/commands/deploy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@ export async function handler(
externalCliOptions?: ExternalCliOptions
): Promise<void> {
setLogLevelByName(flags.logLevel);

const cwd = flags.cwd ? path.resolve(flags.cwd) : process.cwd();
flags.cwd = cwd;
const command = getFullCommand(flags);
Expand All @@ -100,7 +99,7 @@ export async function handler(

checkConfigForCredentials(config);

printConfigInfo(config);
printConfigInfo(config, flags.outputFormat);

const spinner = getOraSpinner('Deploying Function').start();
try {
Expand All @@ -111,7 +110,7 @@ export async function handler(
const result = await client.deployLocalProject(config);
spinner.text = 'Serverless project successfully deployed\n';
spinner.succeed();
printDeployedResources(config, result);
printDeployedResources(config, result, flags.outputFormat);
const { serviceSid, buildSid } = result;
await saveLatestDeploymentData(
config.cwd,
Expand Down
9 changes: 2 additions & 7 deletions src/commands/list-templates.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import chalk from 'chalk';
import { Arguments } from 'yargs';
import { fetchListOfTemplates } from '../templating/actions';
import { getOraSpinner, setLogLevelByName } from '../utils/logger';
import { writeOutput } from '../utils/output';
import { baseCliOptions, BaseFlags } from './shared';
import { CliInfo } from './types';
import { printTemplates } from '../printers/list-templates';

export async function handler(flags: Arguments<BaseFlags>): Promise<void> {
setLogLevelByName(flags.logLevel);
Expand All @@ -21,11 +20,7 @@ export async function handler(flags: Arguments<BaseFlags>): Promise<void> {

spinner.stop();

templates.forEach(template => {
writeOutput(
chalk`‣ ${template.name} ({cyan ${template.id}})\n {dim ${template.description}}`
);
});
printTemplates(templates, flags.outputFormat);
}

export const cliInfo: CliInfo = { options: { ...baseCliOptions } };
Expand Down
3 changes: 1 addition & 2 deletions src/commands/list.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ export async function handler(
externalCliOptions?: ExternalCliOptions
): Promise<void> {
setLogLevelByName(flags.logLevel);

let config: ListConfig;
try {
config = await getConfigFromFlags(flags, externalCliOptions);
Expand All @@ -66,7 +65,7 @@ export async function handler(
try {
const client = new TwilioServerlessApiClient(config);
const result = await client.list({ ...config });
printListResult(result, config);
printListResult(result, config, flags.outputFormat);
} catch (err) {
handleError(err);
}
Expand Down
12 changes: 2 additions & 10 deletions src/commands/logs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ export async function handler(
externalCliOptions?: ExternalCliOptions
): Promise<void> {
setLogLevelByName(flags.logLevel);

let config: LogsConfig;
try {
config = await getConfigFromFlags(flags, externalCliOptions);
Expand All @@ -68,11 +67,11 @@ export async function handler(
if (flags.tail) {
const stream = await client.getLogsStream({ ...config });
stream.on('data', (log: LogApiResource) => {
printLog(log, config.outputFormat);
printLog(log, flags.outputFormat);
});
} else {
const result = (await client.getLogs({ ...config })) as LogApiResource[];
printLogs(result, config, config.outputFormat);
printLogs(result, flags.outputFormat);
}
} catch (err) {
handleError(err);
Expand Down Expand Up @@ -100,13 +99,6 @@ export const cliInfo: CliInfo = {
type: 'boolean',
describe: 'Continuously stream the logs',
},
'output-format': {
type: 'string',
alias: 'o',
default: '',
describe: 'Output the log in a different format',
choices: ['', 'json'],
},
env: {
type: 'string',
describe:
Expand Down
2 changes: 2 additions & 0 deletions src/commands/new.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { setLogLevelByName, logger } from '../utils/logger';
import { baseCliOptions, BaseFlags, ExternalCliOptions } from './shared';
import { CliInfo } from './types';
import { getFullCommand } from './utils';
import { printNewResult } from '../printers/new';

export type NewCliFlags = Arguments<
BaseFlags & {
Expand Down Expand Up @@ -114,6 +115,7 @@ export async function handler(

try {
await downloadTemplate(flags.template, sanitizedNamespace, targetDirectory);
printNewResult(sanitizedNamespace, flags.template);
} catch (error) {
logger.error(error.message, error.name);
}
Expand Down
10 changes: 10 additions & 0 deletions src/commands/shared.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import { Options } from 'yargs';
import { LoggingLevel, LoggingLevelNames } from '../utils/logger';

export type OutputFormat = 'json' | 'pretty' | undefined;

export type BaseFlags = {
logLevel: LoggingLevelNames;
outputFormat: OutputFormat;
};

export type SharedFlags = BaseFlags & {
Expand Down Expand Up @@ -36,6 +39,13 @@ export const baseCliOptions: { [key: string]: Options } = {
describe: 'Level of logging messages.',
choices: Object.keys(LoggingLevel),
},
'output-format': {
type: 'string',
default: 'pretty',
alias: 'o',
describe: 'Format of command output.',
choices: ['json', 'pretty'],
},
};

export const sharedApiRelatedCliOptions: { [key: string]: Options } = {
Expand Down
4 changes: 0 additions & 4 deletions src/config/logs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ export type LogsConfig = ClientConfig &
accountSid: string;
authToken: string;
properties?: string[];
outputFormat?: string;
};

export type LogsCliFlags = Arguments<
Expand All @@ -31,7 +30,6 @@ export type LogsCliFlags = Arguments<
serviceSid?: string;
functionSid?: string;
tail: boolean;
outputFormat?: string;
}
>;

Expand Down Expand Up @@ -64,7 +62,6 @@ export async function getConfigFromFlags(

const command = getFullCommand(flags);
const serviceSid = checkForValidServiceSid(command, flags.serviceSid);
const outputFormat = flags.outputFormat || externalCliOptions?.outputFormat;
const region = flags.region;
const edge = flags.edge;

Expand All @@ -74,7 +71,6 @@ export async function getConfigFromFlags(
authToken,
environment,
serviceSid,
outputFormat,
filterByFunction: flags.functionSid,
tail: flags.tail,
region,
Expand Down
21 changes: 18 additions & 3 deletions src/printers/activate.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,35 @@
import { ActivateConfig, ActivateResult } from '@twilio-labs/serverless-api';
import { stripIndent } from 'common-tags';
import { logger } from '../utils/logger';
import { writeOutput } from '../utils/output';
import { writeOutput, writeJSONOutput } from '../utils/output';
import { getTwilioConsoleDeploymentUrl, redactPartOfString } from './utils';
import chalk = require('chalk');
import terminalLink = require('terminal-link');
import { OutputFormat } from '../commands/shared';

export function printActivateConfig(config: ActivateConfig) {
export function printActivateConfig(
config: ActivateConfig,
outputFormat: OutputFormat
) {
if (outputFormat === 'json') {
return;
}
const message = chalk`
{cyan.bold Account} ${config.accountSid}
{cyan.bold Token} ${redactPartOfString(config.authToken)}
`;
logger.info(stripIndent(message) + '\n');
}

export function printActivateResult(result: ActivateResult) {
export function printActivateResult(
result: ActivateResult,
outputFormat: OutputFormat
) {
if (outputFormat === 'json') {
writeJSONOutput(result, null, '\t');
return;
}

logger.info(chalk.cyan.bold('\nActive build available at:'));
writeOutput(result.domain);

Expand Down
20 changes: 16 additions & 4 deletions src/printers/deploy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,14 @@ import { stripIndent } from 'common-tags';
import terminalLink from 'terminal-link';
import { MergeExclusive } from 'type-fest';
import { logger } from '../utils/logger';
import { writeOutput } from '../utils/output';
import { writeOutput, writeJSONOutput } from '../utils/output';
import {
getTwilioConsoleDeploymentUrl,
printObjectWithoutHeaders,
redactPartOfString,
shouldPrettyPrint,
} from './utils';
import { OutputFormat } from '../commands/shared';

function sortByAccess<
T extends MergeExclusive<AssetResource, FunctionResource>
Expand Down Expand Up @@ -83,7 +84,7 @@ function prettyPrintConfigInfo(config: DeployLocalProjectConfig) {
}

logger.info('\nDeploying functions & assets to the Twilio Runtime');
writeOutput(
logger.info(
chalk`
{bold.cyan Account}\t\t${config.accountSid}
{bold.cyan Token}\t\t${redactPartOfString(config.authToken)}
Expand Down Expand Up @@ -171,7 +172,13 @@ function prettyPrintDeployedResources(
}
}

export function printConfigInfo(config: DeployLocalProjectConfig) {
export function printConfigInfo(
config: DeployLocalProjectConfig,
outputFormat: OutputFormat
) {
if (outputFormat === 'json') {
return;
}
if (shouldPrettyPrint) {
prettyPrintConfigInfo(config);
} else {
Expand All @@ -181,8 +188,13 @@ export function printConfigInfo(config: DeployLocalProjectConfig) {

export function printDeployedResources(
config: DeployLocalProjectConfig,
result: DeployResult
result: DeployResult,
outputFormat: OutputFormat
) {
if (outputFormat === 'json') {
writeJSONOutput(result);
return;
}
if (shouldPrettyPrint) {
prettyPrintDeployedResources(config, result);
} else {
Expand Down
34 changes: 34 additions & 0 deletions src/printers/list-templates.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import chalk from 'chalk';
import { Template } from '../templating/data';
import { writeOutput, writeJSONOutput } from '../utils/output';
import { OutputFormat } from '../commands/shared';
import { shouldPrettyPrint } from './utils';

function prettyPrintTemplates(templates: Template[]) {
templates.forEach(template => {
writeOutput(
chalk`‣ ${template.name} ({cyan ${template.id}})\n {dim ${template.description}}`
);
});
}

function plainPrintTemplates(templates: Template[]) {
templates.forEach(template => {
writeOutput(`${template.name} (${template.id})\n ${template.description}`);
});
}

export function printTemplates(
templates: Template[],
outputFormat: OutputFormat
) {
if (outputFormat === 'json') {
writeJSONOutput(templates);
return;
}
if (shouldPrettyPrint) {
prettyPrintTemplates(templates);
} else {
plainPrintTemplates(templates);
}
}
13 changes: 11 additions & 2 deletions src/printers/list.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@ import logSymbols from 'log-symbols';
import title from 'title';
import { ListConfig } from '../config/list';
import { logger } from '../utils/logger';
import { writeOutput } from '../utils/output';
import { writeOutput, writeJSONOutput } from '../utils/output';
import { redactPartOfString, shouldPrettyPrint, windowSize } from './utils';
import { OutputFormat } from '../commands/shared';

type KeyMaps = {
[key in ListOptions]: string[];
Expand Down Expand Up @@ -313,7 +314,15 @@ function printListResultTerminal(result: ListResult, config: ListConfig): void {
writeOutput(output);
}

export function printListResult(result: ListResult, config: ListConfig): void {
export function printListResult(
result: ListResult,
config: ListConfig,
outputFormat: OutputFormat
): void {
if (outputFormat === 'json') {
writeJSONOutput(result);
return;
}
if (shouldPrettyPrint && !config.properties && !config.extendedOutput) {
printListResultTerminal(result, config);
} else {
Expand Down
6 changes: 3 additions & 3 deletions src/printers/logs.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import { LogList, LogApiResource } from '@twilio-labs/serverless-api';
import { LogsConfig } from '../config/logs';
import { writeOutput } from '../utils/output';
import { OutputFormat } from '../commands/shared';

export function printLogs(
result: LogApiResource[],
config: LogsConfig,
outputFormat?: string
outputFormat: OutputFormat
) {
result.forEach(log => printLog(log, outputFormat));
}

export function printLog(log: LogApiResource, outputFormat?: string) {
export function printLog(log: LogApiResource, outputFormat: OutputFormat) {
if (outputFormat === 'json') {
writeOutput(JSON.stringify(log));
} else {
Expand Down
16 changes: 16 additions & 0 deletions src/printers/new.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import chalk from 'chalk';
import { logger } from '../utils/logger';
import { join } from 'path';

export function printNewResult(namespace: string, templateName: string) {
logger.info(
chalk`{green SUCCESS} Downloaded new template into the "${namespace}" subdirectories.`
);
logger.info(
`Check ${join(
'readmes',
namespace,
`${templateName}.md`
)} for template instructions.`
);
}
Loading