Skip to content

covenix / Covenix

Class: Covenix

Defined in: src/covenix.ts:718

Owns a set of controllers and wires them to Express and OpenAPI. Construct one instance, register your controllers, then mount an Express app and/or call swagger.

Example

ts
const api = new Covenix({ info: { title: 'My API', version: '1.0.0' } });
api.register(new UsersController(db));
api.mount(app);
app.get('/swagger.json', (_req, res) => res.json(api.swagger()));

Constructors

Constructor

new Covenix(options): Covenix

Defined in: src/covenix.ts:726

Parameters

options

CovenixOptions

Instance options, including the OpenAPI info block.

Returns

Covenix

Accessors

info

Get Signature

get info(): InfoObject

Defined in: src/covenix.ts:729

The OpenAPI info block this instance was constructed with.

Returns

InfoObject

Methods

contract()

contract(options?): object

Defined in: src/covenix.ts:815

Builds the high-fidelity CovenixContract (the codegen IR) from the registered controllers' metadata — the contract sibling of Covenix.swagger. Independent of Covenix.mount; serialize it to contract.json for a client generator.

Parameters

options?

ContractOptions = {}

Extra inputs, e.g. route-less schemas (named via .meta({ id })).

Returns

object

The validated contract document.

covenixContract

covenixContract: "0.1"

info

info: object

Index Signature

[key: string]: unknown

info.title

title: string

info.version

version: string

operations

operations: object[]

schemas

schemas: Record<string, SchemaNode>


group()

group(prefix, fn): this

Defined in: src/covenix.ts:768

Registers a set of controllers under a shared base path — typically an API version segment. The callback receives a ControllerGroup scoped to prefix; groups nest. Reflected in both the routes and the generated spec.

Parameters

prefix

string

Base path for the group (e.g. '/v1').

fn

(group) => void

Receives the scoped group to register controllers on.

Returns

this

This instance, for chaining.

Example

ts
api.group('/v1', (v1) => {
  v1.register(new UsersController(svc));
  v1.register(new AuthController(auth));
});

mount()

mount(app): this

Defined in: src/covenix.ts:862

Walks every registered controller's metadata and binds its routes (with validation middleware) onto the Express app.

Parameters

app

Express

The Express application to register routes on.

Returns

this

This instance, for chaining.


register()

register(instance, options?): this

Defined in: src/covenix.ts:746

Records a pre-constructed controller instance. The caller owns construction and dependency injection; Covenix.mount does the wiring later.

Parameters

instance

object

A controller instance (not a class).

options?

RegisterOptions = {}

Registration options, e.g. a prefix base path.

Returns

this

This instance, for chaining.


serveDocs()

serveDocs(app, path?, options?): this

Defined in: src/covenix.ts:843

Mounts a documentation UI (and the spec it renders) onto an Express app. The UI HTML is served at path and the spec at ${path}/openapi.json.

By default the assets are self-hosted from the chosen UI's package (an optional peer dependency: @scalar/api-reference for 'scalar', swagger-ui-dist for 'swagger-ui', redoc for 'redoc') — install the one you use, or pass { cdn: true } to load it from a CDN instead.

Parameters

app

Express

The Express application to mount onto.

path?

string = '/docs'

Mount path for the UI. Defaults to '/docs'.

options?

ServeDocsOptions = {}

UI choice, cdn, specVersion, title.

Returns

this

This instance, for chaining.

Example

ts
api.serveDocs(app);                          // Scalar at /docs
api.serveDocs(app, '/docs', { ui: 'swagger-ui' });

swagger()

swagger(options?): OpenApiDocument

Defined in: src/covenix.ts:783

Builds the OpenAPI document from the registered controllers' metadata. Independent of Covenix.mount — does not require routes to be wired.

Parameters

options?

Generation options. specVersion defaults to '3.1'. schemas adds standalone (route-less) named schemas to components.schemas — pass the same list to generateSwagger to keep instance and static output identical.

schemas?

ZodType<unknown, unknown, $ZodTypeInternals<unknown, unknown>>[]

specVersion?

SpecVersion

Returns

OpenApiDocument

The assembled OpenAPI document.