import { combine } from './combine'; import { LogInfo } from '../Logger'; type FormatFnOptions = Record; type FormatFn = (info: LogInfo, opts?: FormatFnOptions) => LogInfo | boolean; export abstract class Format { protected readonly opts: FormatFnOptions; constructor(opts) { this.opts = opts; } abstract transform(info: LogInfo): LogInfo | boolean; } export const format = (fn: FormatFn): (opts?: FormatFnOptions) => Format => { class Factory extends Format { transform(info: LogInfo) { return fn(info, this.opts); } } return (opts?: FormatFnOptions) => new Factory(opts); }; format.combine = combine;