import type { Handler } from "../types"; import type { BunRequest } from "../core/request"; import type { BunResponse } from "../core/response"; export type TokenFn = (req: BunRequest, res: BunResponse, meta: RequestMeta) => string; export interface RequestMeta { startTime: number; responseTime: number; contentLength: number | null; } export interface LoggerOptions { skip?: (req: BunRequest, res: BunResponse) => boolean; stream?: { write: (message: string) => void; }; immediate?: boolean; useAppLogger?: boolean; } export type FormatFn = (tokens: TokenRegistry, req: BunRequest, res: BunResponse, meta: RequestMeta) => string; export interface TokenRegistry { method: TokenFn; url: TokenFn; path: TokenFn; status: TokenFn; "response-time": TokenFn; "content-length": TokenFn; date: TokenFn; referrer: TokenFn; "user-agent": TokenFn; "remote-addr": TokenFn; "remote-user": TokenFn; "http-version": TokenFn; [key: string]: TokenFn; } /** * Request logging middleware similar to morgan * * @param format - Predefined format name ('combined', 'common', 'dev', 'short', 'tiny') * or custom format string using tokens like :method :url :status * or custom format function * @param options - Logger options * * @example * // Using predefined format * app.use(bunway.logger('dev')); * * @example * // Using custom format string * app.use(bunway.logger(':method :url :status :response-time ms')); * * @example * // Using custom format function * app.use(bunway.logger((tokens, req, res, meta) => { * return `${req.method} ${req.path} ${res.statusCode} ${meta.responseTime}ms`; * })); * * @example * // With options * app.use(bunway.logger('combined', { * skip: (req) => req.path === '/health', * stream: { write: (msg) => Bun.write('access.log', msg, { append: true }) } * })); */ export declare function logger(format?: string | FormatFn, options?: LoggerOptions): Handler; //# sourceMappingURL=logger.d.ts.map