UNPKG

@tsed/platform-http

Version:
42 lines (41 loc) 1.65 kB
import { configuration, injector } from "@tsed/di"; import { v4 } from "uuid"; import { PlatformContext } from "../domain/PlatformContext.js"; import { PlatformRequest } from "../services/PlatformRequest.js"; import { PlatformResponse } from "../services/PlatformResponse.js"; function defaultReqIdBuilder(req) { return req.get?.("x-request-id") || v4().split("-").join(""); } function mapIgnoreUrlPatterns(ignoreUrlPatterns) { return ignoreUrlPatterns.map((pattern) => (typeof pattern === "string" ? new RegExp(pattern, "gi") : pattern)); } export function buildIgnoreLog(ignoreUrlPatterns) { if (ignoreUrlPatterns) { ignoreUrlPatterns = mapIgnoreUrlPatterns(ignoreUrlPatterns); return (ignore, data, url) => ignoreUrlPatterns?.find((reg) => !!url.match(reg)); } } /** * Create the TsED context to wrap request, response, injector, etc... * @ignore */ export function createContext() { const ResponseKlass = injector().getProvider(PlatformResponse)?.useClass; const RequestKlass = injector().getProvider(PlatformRequest)?.useClass; const { reqIdBuilder = defaultReqIdBuilder, ...loggerOptions } = configuration().logger; const opts = { ...loggerOptions, ResponseKlass, RequestKlass }; const ignoreLog = buildIgnoreLog(loggerOptions.ignoreUrlPatterns); return function invokeContext(event) { const $ctx = new PlatformContext({ ...opts, event, id: reqIdBuilder(event.request) }); ignoreLog && $ctx.logger.alterIgnoreLog((ignore, data) => ignoreLog(ignore, data, $ctx.url)); return $ctx; }; }