@tsed/platform-http
Version:
A TypeScript Framework on top of Express
42 lines (41 loc) • 1.65 kB
JavaScript
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;
};
}