aboutsummaryrefslogtreecommitdiff
path: root/deno/base
diff options
context:
space:
mode:
Diffstat (limited to 'deno/base')
-rw-r--r--deno/base/config.ts3
-rw-r--r--deno/base/deno.json3
-rw-r--r--deno/base/lib.ts (renamed from deno/base/date.ts)4
-rw-r--r--deno/base/log.ts118
-rw-r--r--deno/base/text.ts3
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());
-}