UNPKG

opinionated-machine

Version:

Very opinionated DI framework for fastify, built on top of awilix

36 lines (35 loc) 3.98 kB
import type { CommonRouteDefinition, DeleteRouteDefinition, GetRouteDefinition, PayloadRouteDefinition } from '@lokalise/api-contracts'; import type { buildFastifyRoute } from '@lokalise/fastify-api-contracts'; import type { z } from 'zod/v4'; import type { GatewayMetadataValue } from './gateway/gatewayMetadata.ts'; type AnyCommonRouteDefinition = CommonRouteDefinition<any, any, any, any, any, any, any, any>; type OptionalZodSchema = z.Schema | undefined; type FastifyPayloadRouteReturnType<RequestBody extends OptionalZodSchema, ResponseBody extends OptionalZodSchema, Path extends OptionalZodSchema, Query extends OptionalZodSchema, Headers extends OptionalZodSchema, ResponseHeaders extends OptionalZodSchema, IsNonJSONResponseExpected extends boolean, IsEmptyResponseExpected extends boolean, ResponseSchemasByStatusCode extends Record<number, any> | undefined> = ReturnType<typeof buildFastifyRoute<RequestBody, ResponseBody, Path, Query, Headers, ResponseHeaders, IsNonJSONResponseExpected, IsEmptyResponseExpected, ResponseSchemasByStatusCode>>; type FastifyNoPayloadRouteReturnType<ResponseBody extends OptionalZodSchema, Path extends OptionalZodSchema, Query extends OptionalZodSchema, Headers extends OptionalZodSchema, ResponseHeaders extends OptionalZodSchema, IsNonJSONResponseExpected extends boolean, IsEmptyResponseExpected extends boolean, ResponseSchemasByStatusCode extends Record<number, any> | undefined> = ReturnType<typeof buildFastifyRoute<undefined, ResponseBody, Path, Query, Headers, ResponseHeaders, IsNonJSONResponseExpected, IsEmptyResponseExpected, ResponseSchemasByStatusCode>>; export type BuildRoutesReturnType<APIContracts extends Record<string, AnyCommonRouteDefinition>> = { [K in keyof APIContracts]: APIContracts[K] extends PayloadRouteDefinition<infer RequestBody, infer ResponseBody, infer Path, infer Query, infer Headers, infer ResponseHeaders, infer IsNonJSONResponseExpected, infer IsEmptyResponseExpected, infer ResponseSchemasByStatusCode> ? FastifyPayloadRouteReturnType<RequestBody, ResponseBody, Path, Query, Headers, ResponseHeaders, IsNonJSONResponseExpected, IsEmptyResponseExpected, ResponseSchemasByStatusCode> : APIContracts[K] extends GetRouteDefinition<infer GetResponseBody, infer GetPath, infer GetQuery, infer GetHeaders, infer GetResponseHeaders, infer GetIsNonJSONResponseExpected, infer GetIsEmptyResponseExpected, infer GetResponseSchemasByStatusCode> | DeleteRouteDefinition<infer DeleteResponseBody, infer DeletePath, infer DeleteQuery, infer DeleteHeaders, infer DeleteResponseHeaders, infer DeleteIsNonJSONResponseExpected, infer DeleteIsEmptyResponseExpected, infer DeleteResponseSchemasByStatusCode> ? FastifyNoPayloadRouteReturnType<GetResponseBody | DeleteResponseBody, GetPath | DeletePath, GetQuery | DeleteQuery, GetHeaders | DeleteHeaders, GetResponseHeaders | DeleteResponseHeaders, GetIsNonJSONResponseExpected | DeleteIsNonJSONResponseExpected, GetIsEmptyResponseExpected | DeleteIsEmptyResponseExpected, GetResponseSchemasByStatusCode | DeleteResponseSchemasByStatusCode> : never; }; export declare abstract class AbstractController<APIContracts extends Record<string, AnyCommonRouteDefinition>> { abstract buildRoutes(): BuildRoutesReturnType<APIContracts>; /** * Optional controller-level defaults for gateway metadata. * * Merged underneath per-route metadata when `DIContext.buildGatewayManifest()` * assembles a manifest. Use this for fields that apply to every route in the * controller (e.g. `upstream`, `auth`, baseline `timeouts`). * * Service-wide defaults (passed to `buildGatewayManifest({ defaults })`) sit * underneath these. * * @example * ```ts * public readonly gatewayDefaults: GatewayMetadataValue = { * upstream: 'users-service', * timeouts: { request: '5s' }, * auth: { required: true }, * } * ``` */ readonly gatewayDefaults?: GatewayMetadataValue; } export {};