cli-block
Version:
Create nice looking CLI Blocks
50 lines (44 loc) • 1.33 kB
text/typescript
import { BorderType, BorderColor } from "../border/border.model";
import { LoggerSettings, LoggerLevel, LoggerType } from "../types/settings";
export const defaultSettings: LoggerSettings = {
borderType: BorderType.single,
borderColor: BorderColor.dim,
frameWidth: 80,
indentBlock: 5,
prefix: "",
newLine: true,
autoSpace: true,
tableHeader: true,
tableSpace: true,
padding: -1,
pathDepth: -1,
logger: LoggerType.STDOUT,
logLevel: LoggerLevel.VERBOSE,
logOutputLevel: LoggerLevel.VERBOSE,
};
export const useSettings = (
settings: Partial<LoggerSettings> = {}
): LoggerSettings => {
return {
...defaultSettings,
...settings,
};
};
export const getFrameWidth = (
settings: Partial<LoggerSettings> = {}
): number => {
const cfg = useSettings(settings);
return process.stdout.columns < cfg.frameWidth + cfg.indentBlock * 2 + 2
? process.stdout.columns - cfg.indentBlock * 2
: cfg.frameWidth;
};
export const getPadding = (settings: Partial<LoggerSettings> = {}): number =>
(settings = useSettings(settings)) && settings.padding > -1
? settings.padding
: getFrameWidth(settings) / 10;
export const getContentWidth = (
settings: Partial<LoggerSettings> = {}
): number => {
const cfg = useSettings(settings);
return getFrameWidth(cfg) - getPadding(cfg) * 2;
};