UNPKG

@swell/cli

Version:

Swell's command line interface/utility

89 lines (88 loc) 2.77 kB
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}` : ''}`; } }