const middlewareConfigs: MiddlewareConfigs = config.get('middlewares') ?? {};
this.use(koaRequestId(middlewareConfigs?.requestId));
for(const [middlewareName, middlewareConfig] of Object.entries(middlewareConfigs)) {
// ignore requestId middleware, as it is already initialized above
if (middlewareName === 'requestId') continue;
if (middlewareConfig?.$$isDisabled) {
this.logger.info(`Configuration for middleware "${middlewareName}" found, but it is disabled, therefore ignored`);
}
}
interface BasicMiddlewareOptions {
[key: string]: any;
};
type GenericMiddlewareConfig<T extends any> = T & {
$$isDisabled?: boolean;
};
interface MiddlewareConfigs {
bodyParser: GenericMiddlewareConfig<koaBodyParser.Options>;
cors: GenericMiddlewareConfig<koaCors.Options>;
slow: GenericMiddlewareConfig<koaSlow.Options>;
jwt: GenericMiddlewareConfig<koaJwt.Options>;
[middlewareName: string]: GenericMiddlewareConfig<BasicMiddlewareOptions>;
};
/*
TSError: ⨯ Unable to compile TypeScript:
src/api-server.ts:111:27 - error TS2345: Argument of type 'GenericMiddlewareConfig<BasicMiddlewareOptions>' is not assignable to parameter of type '{ expose?: string | false | undefined; header?: string | false | undefined; query?: string | false | undefined; } | undefined'.
Type 'GenericMiddlewareConfig<BasicMiddlewareOptions>' has no properties in common with type '{ expose?: string | false | undefined; header?: string | false | undefined; query?: string | false | undefined; }'.
111 this.use(koaRequestId(middlewareConfigs?.requestId));
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/api-server.ts:118:11 - error TS1345: An expression of type 'void' cannot be tested for truthiness
118 if (middlewareConfig?.$$isDisabled) {
*/