opinionated-machine
Version:
Very opinionated DI framework for fastify, built on top of awilix
38 lines • 1.33 kB
JavaScript
/**
* Abstract base class for controllers that use the `ApiContract` API.
*
* Concrete controllers declare a static `contracts` field and a `routes` object
* built with `buildApiRoute()`. The generic ensures every contract has a matching route.
*
* @example
* ```typescript
* class UserController extends AbstractApiController<typeof UserController.contracts> {
* static contracts = {
* getUser: getUserContract,
* streamUpdates: streamUpdatesContract,
* } as const
*
* readonly routes = {
* getUser: buildApiRoute(UserController.contracts.getUser, async (req) => ({
* status: 200,
* body: { id: req.params.id },
* })),
* streamUpdates: buildApiRoute(UserController.contracts.streamUpdates, async (_req, sse) => {
* sse.start('keepAlive')
* }),
* }
* }
* ```
*/
export class AbstractApiController {
/**
* Optional controller-level defaults for gateway metadata.
*
* Merged underneath per-route metadata (passed inline via
* `buildApiRoute(..., { gatewayMetadata })` or attached post-hoc via
* `withGatewayMetadata`) when `DIContext.buildGatewayManifest()` assembles a
* manifest. See `AbstractController.gatewayDefaults` for full semantics.
*/
gatewayDefaults;
}
//# sourceMappingURL=AbstractApiController.js.map