import {Writer} from 'writer' import {type WriterOptions, Level} from 'types' export class File extends Writer { public constructor(options: WriterOptions & { path: string }) { const {path, ...rest} = options super(rest) } protected write(level: Level, ...data: any[]) : void { // TODO } } export class DailyFile extends Writer { private _writer: File private readonly _folder: string private now: Date = new Date() public constructor(options: WriterOptions & {folder: string}) { const {folder, ...rest} = options super(rest) this._folder = folder this._writer = DailyFile.start(this.options, this._folder, this.now) } private static start(options: WriterOptions, folder: string, now: Date) : File { const date = now.toISOString().split('T')[0] const path = `${folder}/${date}.log` return new File({...options, path}) } protected write(level: Level, ...data: any[]): void { if (new Date().getDay() !== this.now.getDay()) { this.now = new Date() this._writer = DailyFile.start(this.options, this._folder, this.now) } return this._writer.log(level, data) } }