diff options
Diffstat (limited to 'deno/base')
-rw-r--r-- | deno/base/config.ts | 3 | ||||
-rw-r--r-- | deno/base/deno.json | 3 | ||||
-rw-r--r-- | deno/base/lib.ts (renamed from deno/base/date.ts) | 4 | ||||
-rw-r--r-- | deno/base/log.ts | 118 | ||||
-rw-r--r-- | deno/base/text.ts | 3 |
5 files changed, 13 insertions, 118 deletions
diff --git a/deno/base/config.ts b/deno/base/config.ts index 98722f6..a5f5d86 100644 --- a/deno/base/config.ts +++ b/deno/base/config.ts @@ -1,4 +1,4 @@ -import { camelCaseToKebabCase } from "./text.ts"; +import { camelCaseToKebabCase } from "./lib.ts"; export interface ConfigDefinitionItem { readonly description: string; @@ -91,4 +91,3 @@ export class ConfigProvider<K extends string> { .join("\n"); } } - diff --git a/deno/base/deno.json b/deno/base/deno.json index 2c2d550..dabc02a 100644 --- a/deno/base/deno.json +++ b/deno/base/deno.json @@ -2,10 +2,9 @@ "name": "@crupest/base", "version": "0.1.0", "exports": { + ".": "./lib.ts", "./config": "./config.ts", "./cron": "./cron.ts", - "./date": "./date.ts", - "./text": "./text.ts", "./log": "./log.ts" } } diff --git a/deno/base/date.ts b/deno/base/lib.ts index e65691e..a5e4a6a 100644 --- a/deno/base/date.ts +++ b/deno/base/lib.ts @@ -1,3 +1,7 @@ +export function camelCaseToKebabCase(str: string): string { + return str.replace(/[A-Z]/g, (m) => "-" + m.toLowerCase()); +} + export function toFileNameString(date: Date, dateOnly?: boolean): string { const str = date.toISOString(); return dateOnly === true diff --git a/deno/base/log.ts b/deno/base/log.ts index 1a4942d..940f569 100644 --- a/deno/base/log.ts +++ b/deno/base/log.ts @@ -1,117 +1,17 @@ import { join } from "@std/path"; -import { toFileNameString } from "./date.ts"; - -export type LogLevel = "error" | "warn" | "info"; - -export interface LogEntry { - content: [unknown, ...unknown[]]; - level?: LogLevel; - cause?: unknown; -} - -export interface LogEntryBuilder { - withLevel(level: LogLevel): LogEntryBuilder; - withCause(cause: unknown): LogEntryBuilder; - setError(error: boolean): LogEntryBuilder; - write(): void; -} +import { toFileNameString } from "./lib.ts"; export interface ExternalLogStream extends Disposable { stream: WritableStream; } -export class Logger { - #indentSize = 2; - #externalLogDir?: string; - - #contextStack: { depth: number; level: LogLevel }[] = [ - { depth: 0, level: "info" }, - ]; +export class LogFileProvider { + #directory: string; - get #context() { - return this.#contextStack.at(-1)!; - } - - get indentSize() { - return this.#indentSize; - } - - set indentSize(value: number) { - this.#indentSize = value; - } - - get externalLogDir() { - return this.#externalLogDir; - } - - set externalLogDir(value: string | undefined) { - this.#externalLogDir = value; - if (value != null) { - Deno.mkdirSync(value, { - recursive: true, - }); - } - } - - write(entry: LogEntry): void { - const { content, level, cause } = entry; - const [message, ...rest] = content; - console[level ?? this.#context.level]( - " ".repeat(this.#indentSize * this.#context.depth) + String(message), - ...(cause != null ? [cause, ...rest] : rest), - ); - } - - push(entry: LogEntry): Disposable { - this.write(entry); - this.#contextStack.push({ - depth: this.#context.depth + 1, - level: entry.level ?? this.#context.level, - }); - return { - [Symbol.dispose]: () => { - this.#contextStack.pop(); - }, - }; - } - - info(message: unknown, ...args: unknown[]) { - this.write({ level: "info", content: [message, ...args] }); - } - - warn(message: unknown, ...args: unknown[]) { - this.write({ level: "warn", content: [message, ...args] }); - } - - error(message: unknown, ...args: unknown[]) { - this.write({ level: "error", content: [message, ...args] }); - } - - builder(message: unknown, ...args: unknown[]): LogEntryBuilder { - const entry: LogEntry = { - content: [message, ...args], - level: "info", - cause: undefined, - }; - const builder: LogEntryBuilder = { - withCause: (cause) => { - entry.cause = cause; - return builder; - }, - withLevel: (level) => { - entry.level = level; - return builder; - }, - setError: (error) => { - if (error) entry.level = "error"; - return builder; - }, - write: () => { - this.write(entry); - }, - }; - return builder; + constructor(directory: string) { + this.#directory = directory; + Deno.mkdirSync(directory, { recursive: true }); } async createExternalLogStream( @@ -123,12 +23,9 @@ export class Logger { if (name.includes("/")) { throw new Error(`External log stream's name (${name}) contains '/'.`); } - if (this.#externalLogDir == null) { - throw new Error("External log directory is not set."); - } const logPath = join( - this.#externalLogDir, + this.#directory, options?.noTime === true ? name : `${name}-${toFileNameString(new Date())}`, @@ -161,4 +58,3 @@ export class Logger { }; } } - diff --git a/deno/base/text.ts b/deno/base/text.ts deleted file mode 100644 index f3e4020..0000000 --- a/deno/base/text.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function camelCaseToKebabCase(str: string): string { - return str.replace(/[A-Z]/g, (m) => "-" + m.toLowerCase()); -} |