mirror of
https://github.com/shishantbiswas/bknd.git
synced 2026-03-17 12:56:05 +00:00
Merge pull request #94 from bknd-io/feat/improve-console-with-timestamps
improve console with timestamps
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
import { describe, expect, test } from "bun:test";
|
import { describe, expect, test } from "bun:test";
|
||||||
import { Perf, isBlob, ucFirst } from "../../src/core/utils";
|
import { Perf, datetimeStringUTC, isBlob, ucFirst } from "../../src/core/utils";
|
||||||
import * as utils from "../../src/core/utils";
|
import * as utils from "../../src/core/utils";
|
||||||
|
|
||||||
async function wait(ms: number) {
|
async function wait(ms: number) {
|
||||||
@@ -245,4 +245,14 @@ describe("Core Utils", async () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("dates", () => {
|
||||||
|
test.only("formats local time", () => {
|
||||||
|
expect(utils.datetimeStringUTC("2025-02-21T16:48:25.841Z")).toBe("2025-02-21 16:48:25");
|
||||||
|
console.log(utils.datetimeStringUTC(new Date()));
|
||||||
|
console.log(utils.datetimeStringUTC());
|
||||||
|
console.log(new Date());
|
||||||
|
console.log("timezone", Intl.DateTimeFormat().resolvedOptions().timeZone);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import * as SystemPermissions from "modules/permissions";
|
|||||||
import { AdminController, type AdminControllerOptions } from "modules/server/AdminController";
|
import { AdminController, type AdminControllerOptions } from "modules/server/AdminController";
|
||||||
import { SystemController } from "modules/server/SystemController";
|
import { SystemController } from "modules/server/SystemController";
|
||||||
|
|
||||||
// biome-ignore
|
// biome-ignore format: must be there
|
||||||
import { Api, type ApiOptions } from "Api";
|
import { Api, type ApiOptions } from "Api";
|
||||||
|
|
||||||
export type AppPlugin = (app: App) => Promise<void> | void;
|
export type AppPlugin = (app: App) => Promise<void> | void;
|
||||||
@@ -122,6 +122,8 @@ export class App {
|
|||||||
this.trigger_first_boot = false;
|
this.trigger_first_boot = false;
|
||||||
await this.emgr.emit(new AppFirstBoot({ app: this }));
|
await this.emgr.emit(new AppFirstBoot({ app: this }));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$console.log("App built");
|
||||||
}
|
}
|
||||||
|
|
||||||
mutateConfig<Module extends keyof Modules>(module: Module) {
|
mutateConfig<Module extends keyof Modules>(module: Module) {
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { datetimeStringLocal } from "core/utils";
|
||||||
import colors from "picocolors";
|
import colors from "picocolors";
|
||||||
|
|
||||||
function hasColors() {
|
function hasColors() {
|
||||||
@@ -8,10 +9,10 @@ function hasColors() {
|
|||||||
env = p.env || {};
|
env = p.env || {};
|
||||||
return (
|
return (
|
||||||
!(!!env.NO_COLOR || argv.includes("--no-color")) &&
|
!(!!env.NO_COLOR || argv.includes("--no-color")) &&
|
||||||
// biome-ignore lint/complexity/useOptionalChain: <explanation>
|
|
||||||
(!!env.FORCE_COLOR ||
|
(!!env.FORCE_COLOR ||
|
||||||
argv.includes("--color") ||
|
argv.includes("--color") ||
|
||||||
p.platform === "win32" ||
|
p.platform === "win32" ||
|
||||||
|
// biome-ignore lint/complexity/useOptionalChain: <explanation>
|
||||||
((p.stdout || {}).isTTY && env.TERM !== "dumb") ||
|
((p.stdout || {}).isTTY && env.TERM !== "dumb") ||
|
||||||
!!env.CI)
|
!!env.CI)
|
||||||
);
|
);
|
||||||
@@ -43,19 +44,17 @@ function __tty(type: any, args: any[]) {
|
|||||||
prefix: colors.cyan
|
prefix: colors.cyan
|
||||||
},
|
},
|
||||||
log: {
|
log: {
|
||||||
prefix: colors.gray
|
prefix: colors.dim
|
||||||
},
|
},
|
||||||
debug: {
|
debug: {
|
||||||
prefix: colors.yellow
|
prefix: colors.yellow
|
||||||
}
|
}
|
||||||
} as const;
|
} as const;
|
||||||
const prefix = styles[type].prefix(
|
const prefix = styles[type].prefix(`[${type.toUpperCase()}]`);
|
||||||
`[${type.toUpperCase()}]${has ? " ".repeat(5 - type.length) : ""}`
|
|
||||||
);
|
|
||||||
const _args = args.map((a) =>
|
const _args = args.map((a) =>
|
||||||
"args" in styles[type] && has && typeof a === "string" ? styles[type].args(a) : a
|
"args" in styles[type] && has && typeof a === "string" ? styles[type].args(a) : a
|
||||||
);
|
);
|
||||||
return originalConsoles[type](prefix, ..._args);
|
return originalConsoles[type](prefix, colors.gray(datetimeStringLocal()), ..._args);
|
||||||
}
|
}
|
||||||
|
|
||||||
export type TConsoleSeverity = keyof typeof originalConsoles;
|
export type TConsoleSeverity = keyof typeof originalConsoles;
|
||||||
|
|||||||
@@ -11,4 +11,21 @@ declare module "dayjs" {
|
|||||||
|
|
||||||
dayjs.extend(weekOfYear);
|
dayjs.extend(weekOfYear);
|
||||||
|
|
||||||
|
export function datetimeStringLocal(dateOrString?: string | Date | undefined): string {
|
||||||
|
return dayjs(dateOrString).format("YYYY-MM-DD HH:mm:ss");
|
||||||
|
}
|
||||||
|
|
||||||
|
export function datetimeStringUTC(dateOrString?: string | Date | undefined): string {
|
||||||
|
const date = dateOrString ? new Date(dateOrString) : new Date();
|
||||||
|
return date.toISOString().replace("T", " ").split(".")[0]!;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getTimezoneOffset(): number {
|
||||||
|
return new Date().getTimezoneOffset();
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getTimezone(): string {
|
||||||
|
return Intl.DateTimeFormat().resolvedOptions().timeZone;
|
||||||
|
}
|
||||||
|
|
||||||
export { dayjs };
|
export { dayjs };
|
||||||
|
|||||||
@@ -2,7 +2,15 @@
|
|||||||
|
|
||||||
import type { App } from "App";
|
import type { App } from "App";
|
||||||
import { tbValidator as tb } from "core";
|
import { tbValidator as tb } from "core";
|
||||||
import { StringEnum, Type, TypeInvalidError } from "core/utils";
|
import {
|
||||||
|
StringEnum,
|
||||||
|
Type,
|
||||||
|
TypeInvalidError,
|
||||||
|
datetimeStringLocal,
|
||||||
|
datetimeStringUTC,
|
||||||
|
getTimezone,
|
||||||
|
getTimezoneOffset
|
||||||
|
} from "core/utils";
|
||||||
import { getRuntimeKey } from "core/utils";
|
import { getRuntimeKey } from "core/utils";
|
||||||
import type { Context, Hono } from "hono";
|
import type { Context, Hono } from "hono";
|
||||||
import { Controller } from "modules/Controller";
|
import { Controller } from "modules/Controller";
|
||||||
@@ -273,7 +281,13 @@ export class SystemController extends Controller {
|
|||||||
hono.get("/info", (c) =>
|
hono.get("/info", (c) =>
|
||||||
c.json({
|
c.json({
|
||||||
version: c.get("app")?.version(),
|
version: c.get("app")?.version(),
|
||||||
runtime: getRuntimeKey()
|
runtime: getRuntimeKey(),
|
||||||
|
timezone: {
|
||||||
|
name: getTimezone(),
|
||||||
|
offset: getTimezoneOffset(),
|
||||||
|
local: datetimeStringLocal(),
|
||||||
|
utc: datetimeStringUTC()
|
||||||
|
}
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user