export function createLogger(loggerPrefix: string | (() => Promise)) { const asyncWrapper: () => Promise = typeof loggerPrefix === "string" ? async () => loggerPrefix : loggerPrefix const getLoggerPrefix = async () => { const prefix = await asyncWrapper() if (!prefix) { return "" } return `[${prefix}]` } return { async debug(message: string, ...args: unknown[]): Promise { // TODO: Make this configurable if (process.env.NODE_ENV !== "development") { return } console.debug( "\x1b[36m%s\x1b[0m", `${await getLoggerPrefix()} ${message}`.trim(), ...args ) }, async info(message: string, ...args: unknown[]): Promise { console.info(`${await getLoggerPrefix()} ${message}`.trim(), ...args) }, async warn(message: string, ...args: unknown[]): Promise { console.warn( `${await getLoggerPrefix()} [warn] - ${message}`.trim(), ...args ) }, async error(message: string, ...args: unknown[]): Promise { console.error( `${await getLoggerPrefix()} [error] - ${message}`.trim(), ...args ) }, } }