@henteko/kumiki
Version:
A video generation tool that creates videos from JSON configurations
74 lines • 2.35 kB
JavaScript
import { render } from 'ink';
import * as React from 'react';
import { StatusMessage } from './components.js';
export class InkLogger {
static instance = null;
logger;
isInteractive;
currentRender = null;
constructor(logger) {
this.logger = logger;
this.isInteractive = process.stdout.isTTY && !process.env.CI;
}
static create(logger) {
if (!InkLogger.instance) {
InkLogger.instance = new InkLogger(logger);
}
return InkLogger.instance;
}
clearCurrentRender() {
if (this.currentRender) {
this.currentRender.clear();
this.currentRender.unmount();
this.currentRender = null;
}
}
info(message, meta) {
this.logger.info(message, meta);
if (!this.isInteractive)
return;
this.clearCurrentRender();
this.currentRender = render(React.createElement(StatusMessage, { type: "info", message, details: meta }));
}
error(message, meta) {
this.logger.error(message, meta);
if (!this.isInteractive)
return;
this.clearCurrentRender();
this.currentRender = render(React.createElement(StatusMessage, { type: "error", message, details: meta }));
}
success(message, meta) {
this.logger.info(message, meta);
if (!this.isInteractive)
return;
this.clearCurrentRender();
this.currentRender = render(React.createElement(StatusMessage, { type: "success", message, details: meta }));
}
warning(message, meta) {
this.logger.warn(message, meta);
if (!this.isInteractive)
return;
this.clearCurrentRender();
this.currentRender = render(React.createElement(StatusMessage, { type: "warning", message, details: meta }));
}
debug(message, meta) {
this.logger.debug(message, meta);
}
renderComponent(component) {
if (!this.isInteractive)
return;
this.clearCurrentRender();
this.currentRender = render(component);
}
clear() {
this.clearCurrentRender();
}
// Preserve original logger level setting
set level(level) {
this.logger.level = level;
}
get level() {
return this.logger.level;
}
}
//# sourceMappingURL=logger.js.map