mirror of
https://github.com/nicotsx/ironmount.git
synced 2025-12-10 12:10:51 +01:00
feat: proper timeout and order of operations
This commit is contained in:
@@ -6,12 +6,12 @@ const printConsole = printf((info) => `${info.level} > ${info.message}`);
|
||||
const consoleFormat = combine(colorize(), printConsole);
|
||||
|
||||
const winstonLogger = createLogger({
|
||||
level: "info",
|
||||
level: "debug",
|
||||
format: format.json(),
|
||||
transports: [new transports.Console({ level: "info", format: consoleFormat })],
|
||||
transports: [new transports.Console({ level: "debug", format: consoleFormat })],
|
||||
});
|
||||
|
||||
const log = (level: "info" | "warn" | "error", messages: unknown[]) => {
|
||||
const log = (level: "info" | "warn" | "error" | "debug", messages: unknown[]) => {
|
||||
const stringMessages = messages.flatMap((m) => {
|
||||
if (m instanceof Error) {
|
||||
return [m.message, m.stack];
|
||||
@@ -24,10 +24,11 @@ const log = (level: "info" | "warn" | "error", messages: unknown[]) => {
|
||||
return m;
|
||||
});
|
||||
|
||||
winstonLogger.log(level, stringMessages.join(" | "));
|
||||
winstonLogger.log(level, stringMessages.join(" "));
|
||||
};
|
||||
|
||||
export const logger = {
|
||||
debug: (...messages: unknown[]) => log("debug", messages),
|
||||
info: (...messages: unknown[]) => log("info", messages),
|
||||
warn: (...messages: unknown[]) => log("warn", messages),
|
||||
error: (...messages: unknown[]) => log("error", messages),
|
||||
|
||||
17
apps/server/src/utils/timeout.ts
Normal file
17
apps/server/src/utils/timeout.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
class TimeoutError extends Error {
|
||||
code = "ETIMEOUT";
|
||||
constructor(message: string) {
|
||||
super(message);
|
||||
this.name = "TimeoutError";
|
||||
}
|
||||
}
|
||||
|
||||
export async function withTimeout<T>(promise: Promise<T>, ms: number, label = "operation"): Promise<T> {
|
||||
let timer: NodeJS.Timeout | undefined;
|
||||
const timeout = new Promise<T>((_, reject) => {
|
||||
timer = setTimeout(() => reject(new TimeoutError(`${label} timed out after ${ms}ms`)), ms);
|
||||
});
|
||||
return Promise.race([promise, timeout]).finally(() => {
|
||||
if (timer) clearTimeout(timer);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user