Swagger Decorators
@moostjs/swagger extends Moost’s mate system with a small set of decorators. Apply them directly to controllers or handlers to enrich the generated OpenAPI document. Parameters resolved through Moost decorators (@Param, @Body, @Query, @Header, …) are detected automatically; use these decorators only when you need extra metadata.
Controller/handler-level decorators
| Decorator | Target | Purpose |
|---|---|---|
SwaggerTag(tag: string) | class/method | Adds a tag to the operation. Multiple tags can be applied. |
SwaggerDescription(text: string) | method | Overrides the description specifically for Swagger. (The generic @Description() decorator from moost is picked up automatically.) |
SwaggerExclude() | class/method | Excludes the controller/handler from the generated document. |
Request & response metadata
| Decorator | Target | Purpose |
|---|---|---|
SwaggerResponse(codeOrConfig, response?, example?) | method | Describes responses. Accepts either a status code with configuration or a configuration object. Supports multiple content types. |
SwaggerRequestBody(config) | method | Declares request body content when it cannot be inferred (multiple content types, raw payloads, etc.). |
SwaggerExample(example) | method | Sets a reusable example on the inferred schema (typically the return type). |
SwaggerResponse
Usage patterns:
// basic – infer schema from Atscript return type
@SwaggerResponse(200, CreateUserDto)
// with inline schema and example
@SwaggerResponse(400, {
contentType: 'application/json',
response: {
type: 'object',
properties: { message: { type: 'string' } },
required: ['message'],
},
example: { message: 'Validation failed' },
})
// shorthand for `contentType: '*/*'`
@SwaggerResponse(404, String, 'Not found')If the supplied value exposes toJsonSchema(), the generator stores it under #/components/schemas/<Name> and references it automatically.
SwaggerRequestBody
Pass either an Atscript type or a raw JSON Schema wrapped in a config object:
@SwaggerRequestBody({
contentType: 'application/json',
response: CreateUserDto,
})
@SwaggerRequestBody({
contentType: 'application/xml',
response: {
type: 'string',
},
})Parameter metadata
| Decorator | Target | Purpose |
|---|---|---|
SwaggerParam(opts) | method | Registers an additional parameter (query, header, path, or formData). Use this only when the parameter is not resolved via standard Moost decorators. |
Example
@SwaggerParam({
name: 'expand',
in: 'query',
description: 'Optional relations to include',
required: false,
type: String,
})
async find(@Param('id') id: string, @Header('X-Trace') trace: string) {}The schema passed via type can be a primitive (String, 'desc', true) or an Atscript type. When a parameter is resolved through @Query, @Param, @Header, or @Body, you typically do not need SwaggerParam; the mapper reads the metadata automatically.
Working with examples and metadata
SwaggerExample and metadata from Moost mates (e.g., @Label, @Description) are merged. You can, for instance, set an example on an Atscript DTO and reuse it across multiple endpoints:
@SwaggerExample({ id: 'user_1', name: 'Alice' })
@SwaggerResponse(200, CreateUserDto)
async show(@Param('id') id: string) {}The generated schema will include both the Atscript-derived structure and the example payload.
Common Moost metadata
@moostjs/swagger recognises several framework-level decorators from moost:
@Description()– populates operation descriptions and serves as a fallback for schema descriptions whenSwaggerDescriptionis not supplied.@Label()/@Id()– provide titles for component schemas generated from Atscript types.@Optional()/@Required()– participate in requirement flags when combined with Atscript optional fields.
By reusing these generic decorators you keep validation, documentation, and other modules aligned without duplicating annotations.
