@swell/cli
Version:
Swell's command line interface/utility
89 lines (88 loc) • 2.77 kB
JavaScript
import style from '../style.js';
export { LineOutput } from './line-output.js';
export { TableOutput } from './table-output.js';
/**
* A log item.
*
* A common class for all log types that handles the mapping of log data to the
* columns. This mapping is to then be used by all output options consistently.
*/
export class LoggedItem {
app;
data;
date;
env;
ip;
req;
request;
status;
time;
type;
constructor(log) {
const logMessage = log.message;
this.app = style.logApp(log.$app_id || log.app_id);
this.data = logMessage?.data || null;
this.date = style.logDate(log.date.replaceAll(/T|Z/g, ' ').trim());
this.env = log.environment_id;
this.ip = log.ip;
this.request = this.prepareRequest(logMessage);
this.req = log.req_id;
this.status = style.logStatus(logMessage?.status);
this.time = `${log.time}ms`;
this.type = logMessage?.type;
}
prepareRequest(logMessage) {
let request = '';
if (!logMessage) {
return request;
}
const { url } = logMessage;
switch (logMessage.type) {
case 'function': {
request = this.prepareRequestFunction(logMessage);
break;
}
case 'webhook': {
const { event } = logMessage;
request = `Webhook ${event.type} > ${style.logMethod('POST')} ${url}`;
break;
}
case 'api': {
request = [
style.logMethod(logMessage.method.toUpperCase()),
logMessage.url,
].join(' ');
break;
}
default: {
request = logMessage.type;
break;
}
}
return request;
}
prepareRequestFunction(logMessage) {
const { event } = logMessage;
const { logs, method, name } = logMessage;
const logLines = logs
?.map((l) => {
const line = l.line?.join('\n');
switch (l.level) {
case 'debug': {
return style.funcDebug(line);
}
case 'warn': {
return style.funcWarn(line);
}
case 'error': {
return style.funcError(line);
}
default: {
return style.funcInfo(line);
}
}
})
.join('\n');
return `Function ${event ? `${event.hook ? `${event.hook}:` : ''}${event.type} >` : ''} ${style.logMethod(method.toUpperCase())} /${name} ${logLines ? `\n${logLines}` : ''}`;
}
}