src/index.ts1.2 KB · typescript
import * as fs from 'fs/promises';
import * as path from 'path';
import { LogEntry, ChroniclerConfig } from './types';
export class Chronicler {
private config: ChroniclerConfig;
constructor(config: ChroniclerConfig) {
this.config = config;
}
private getFilename(): string {
const date = new Date().toISOString().split('T')[0];
return path.join(this.config.baseDir, `${date}.${this.config.extension || 'md'}`);
}
async ensureDir(): Promise<void> {
await fs.mkdir(this.config.baseDir, { recursive: true });
}
async log(content: string, level: LogEntry['level'] = 'info', tags: string[] = []): Promise<void> {
await this.ensureDir();
const entry: LogEntry = {
timestamp: new Date().toISOString(),
level,
content,
tags
};
const line = `[${entry.timestamp}] [${entry.level.toUpperCase()}] ${entry.content} ${tags.length ? `(${tags.join(', ')})` : ''}\n`;
const file = this.getFilename();
await fs.appendFile(file, line, 'utf-8');
}
async readToday(): Promise<string> {
try {
return await fs.readFile(this.getFilename(), 'utf-8');
} catch (e) {
return '';
}
}
}