@riktajs/swagger 0.10.2 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/index.cjs +1253 -0
  2. package/dist/index.cjs.map +1 -0
  3. package/dist/index.d.cts +498 -0
  4. package/dist/index.d.ts +498 -7
  5. package/dist/index.js +1163 -6
  6. package/dist/index.js.map +1 -0
  7. package/package.json +13 -6
  8. package/dist/constants.d.ts +0 -11
  9. package/dist/constants.js +0 -11
  10. package/dist/decorators/api-body.decorator.d.ts +0 -4
  11. package/dist/decorators/api-body.decorator.js +0 -11
  12. package/dist/decorators/api-exclude.decorator.d.ts +0 -9
  13. package/dist/decorators/api-exclude.decorator.js +0 -31
  14. package/dist/decorators/api-header.decorator.d.ts +0 -4
  15. package/dist/decorators/api-header.decorator.js +0 -12
  16. package/dist/decorators/api-operation.decorator.d.ts +0 -4
  17. package/dist/decorators/api-operation.decorator.js +0 -11
  18. package/dist/decorators/api-param.decorator.d.ts +0 -4
  19. package/dist/decorators/api-param.decorator.js +0 -12
  20. package/dist/decorators/api-property.decorator.d.ts +0 -11
  21. package/dist/decorators/api-property.decorator.js +0 -20
  22. package/dist/decorators/api-query.decorator.d.ts +0 -4
  23. package/dist/decorators/api-query.decorator.js +0 -12
  24. package/dist/decorators/api-response.decorator.d.ts +0 -15
  25. package/dist/decorators/api-response.decorator.js +0 -45
  26. package/dist/decorators/api-security.decorator.d.ts +0 -8
  27. package/dist/decorators/api-security.decorator.js +0 -35
  28. package/dist/decorators/api-tags.decorator.d.ts +0 -3
  29. package/dist/decorators/api-tags.decorator.js +0 -22
  30. package/dist/decorators/index.d.ts +0 -10
  31. package/dist/decorators/index.js +0 -10
  32. package/dist/openapi/generator.d.ts +0 -49
  33. package/dist/openapi/generator.js +0 -409
  34. package/dist/openapi/index.d.ts +0 -2
  35. package/dist/openapi/index.js +0 -2
  36. package/dist/openapi/zod-to-openapi.d.ts +0 -5
  37. package/dist/openapi/zod-to-openapi.js +0 -115
  38. package/dist/plugin/index.d.ts +0 -1
  39. package/dist/plugin/index.js +0 -1
  40. package/dist/plugin/swagger.plugin.d.ts +0 -38
  41. package/dist/plugin/swagger.plugin.js +0 -126
  42. package/dist/types.d.ts +0 -338
  43. package/dist/types.js +0 -1
@@ -1,126 +0,0 @@
1
- import fp from 'fastify-plugin';
2
- import fastifySwagger from '@fastify/swagger';
3
- import fastifySwaggerUI from '@fastify/swagger-ui';
4
- import { OpenApiGenerator } from '../openapi/generator.js';
5
- import { registry } from '@riktajs/core';
6
- const DEFAULT_OPTIONS = {
7
- jsonPath: '/docs/json',
8
- uiPath: '/docs',
9
- exposeUI: true,
10
- exposeSpec: true,
11
- };
12
- async function swaggerPluginImpl(fastify, options) {
13
- const mergedOptions = { ...DEFAULT_OPTIONS, ...options };
14
- const { jsonPath, uiPath, exposeUI, exposeSpec, controllers, config, info, transform } = mergedOptions;
15
- const apiInfo = info || config?.info || {
16
- title: 'API Documentation',
17
- version: '1.0.0',
18
- };
19
- const generator = new OpenApiGenerator({
20
- ...config,
21
- info: apiInfo,
22
- });
23
- const controllersToDocument = controllers || registry.getControllers();
24
- for (const controller of controllersToDocument) {
25
- generator.addController(controller);
26
- }
27
- if (config?.securitySchemes) {
28
- for (const [name, scheme] of Object.entries(config.securitySchemes)) {
29
- generator.addSecurityScheme(name, scheme);
30
- }
31
- }
32
- let spec = generator.generate();
33
- if (transform) {
34
- spec = await transform(spec);
35
- }
36
- await fastify.register(fastifySwagger, {
37
- mode: 'static',
38
- specification: {
39
- document: spec,
40
- },
41
- });
42
- if (exposeUI) {
43
- const uiOptions = {
44
- routePrefix: uiPath,
45
- uiConfig: {
46
- docExpansion: 'list',
47
- deepLinking: true,
48
- displayRequestDuration: true,
49
- filter: true,
50
- syntaxHighlight: {
51
- activate: true,
52
- theme: mergedOptions.theme === 'dark' ? 'monokai' : 'agate',
53
- },
54
- },
55
- staticCSP: true,
56
- transformStaticCSP: (header) => header,
57
- };
58
- if (mergedOptions.logo) {
59
- uiOptions.logo = {
60
- type: 'image/png',
61
- content: mergedOptions.logo.url,
62
- href: mergedOptions.logo.url,
63
- };
64
- }
65
- await fastify.register(fastifySwaggerUI, uiOptions);
66
- }
67
- const defaultSwaggerUIJsonPath = `${uiPath}/json`;
68
- const shouldRegisterCustomJsonRoute = exposeSpec && (!exposeUI ||
69
- (jsonPath !== defaultSwaggerUIJsonPath && jsonPath !== '/docs/json'));
70
- if (shouldRegisterCustomJsonRoute) {
71
- fastify.get(jsonPath, {
72
- schema: {
73
- hide: true,
74
- },
75
- }, async () => {
76
- return spec;
77
- });
78
- }
79
- fastify.decorate('openApiSpec', spec);
80
- }
81
- export const swaggerPlugin = fp(swaggerPluginImpl, {
82
- fastify: '>=4.0.0',
83
- name: '@riktajs/swagger',
84
- dependencies: [],
85
- });
86
- export async function registerSwagger(app, options = {}) {
87
- await app.register(swaggerPlugin, options);
88
- }
89
- export function createSwaggerConfig(options = {}) {
90
- const mergedOptions = { ...DEFAULT_OPTIONS, ...options };
91
- const { uiPath, controllers, config, info } = mergedOptions;
92
- const apiInfo = info || config?.info || {
93
- title: 'API Documentation',
94
- version: '1.0.0',
95
- };
96
- const generator = new OpenApiGenerator({
97
- ...config,
98
- info: apiInfo,
99
- });
100
- const controllersToDocument = controllers || registry.getControllers();
101
- for (const controller of controllersToDocument) {
102
- generator.addController(controller);
103
- }
104
- if (config?.securitySchemes) {
105
- for (const [name, scheme] of Object.entries(config.securitySchemes)) {
106
- generator.addSecurityScheme(name, scheme);
107
- }
108
- }
109
- const specification = generator.generate();
110
- return {
111
- swaggerOptions: {
112
- mode: 'static',
113
- specification: { document: specification },
114
- },
115
- swaggerUIOptions: {
116
- routePrefix: uiPath,
117
- uiConfig: {
118
- docExpansion: 'list',
119
- deepLinking: true,
120
- displayRequestDuration: true,
121
- filter: true,
122
- },
123
- },
124
- specification,
125
- };
126
- }
package/dist/types.d.ts DELETED
@@ -1,338 +0,0 @@
1
- import type { ZodType } from 'zod';
2
- export type OpenApiDataType = 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object';
3
- export type OpenApiFormat = 'int32' | 'int64' | 'float' | 'double' | 'date' | 'date-time' | 'password' | 'byte' | 'binary' | 'email' | 'uuid' | 'uri' | 'hostname' | 'ipv4' | 'ipv6';
4
- export interface OpenApiSchemaObject {
5
- type?: OpenApiDataType;
6
- format?: string;
7
- description?: string;
8
- default?: unknown;
9
- example?: unknown;
10
- enum?: unknown[];
11
- items?: OpenApiSchemaObject;
12
- properties?: Record<string, OpenApiSchemaObject>;
13
- required?: string[];
14
- nullable?: boolean;
15
- allOf?: OpenApiSchemaObject[];
16
- oneOf?: OpenApiSchemaObject[];
17
- anyOf?: OpenApiSchemaObject[];
18
- not?: OpenApiSchemaObject;
19
- $ref?: string;
20
- minimum?: number;
21
- maximum?: number;
22
- minLength?: number;
23
- maxLength?: number;
24
- pattern?: string;
25
- additionalProperties?: boolean | OpenApiSchemaObject;
26
- }
27
- export type ParameterLocation = 'query' | 'path' | 'header' | 'cookie';
28
- export interface OpenApiParameterObject {
29
- name: string;
30
- in: ParameterLocation;
31
- description?: string;
32
- required?: boolean;
33
- deprecated?: boolean;
34
- schema?: OpenApiSchemaObject;
35
- example?: unknown;
36
- examples?: Record<string, {
37
- value: unknown;
38
- summary?: string;
39
- }>;
40
- }
41
- export interface OpenApiRequestBodyObject {
42
- description?: string;
43
- required?: boolean;
44
- content: Record<string, {
45
- schema?: OpenApiSchemaObject;
46
- example?: unknown;
47
- examples?: Record<string, {
48
- value: unknown;
49
- summary?: string;
50
- }>;
51
- }>;
52
- }
53
- export interface OpenApiResponseObject {
54
- description: string;
55
- content?: Record<string, {
56
- schema?: OpenApiSchemaObject;
57
- example?: unknown;
58
- }>;
59
- headers?: Record<string, {
60
- description?: string;
61
- schema?: OpenApiSchemaObject;
62
- }>;
63
- }
64
- export type OpenApiSecurityRequirement = Record<string, string[]>;
65
- export interface OpenApiSecurityScheme {
66
- type: 'apiKey' | 'http' | 'oauth2' | 'openIdConnect';
67
- description?: string;
68
- name?: string;
69
- in?: 'query' | 'header' | 'cookie';
70
- scheme?: string;
71
- bearerFormat?: string;
72
- flows?: {
73
- implicit?: {
74
- authorizationUrl: string;
75
- scopes: Record<string, string>;
76
- };
77
- password?: {
78
- tokenUrl: string;
79
- scopes: Record<string, string>;
80
- };
81
- clientCredentials?: {
82
- tokenUrl: string;
83
- scopes: Record<string, string>;
84
- };
85
- authorizationCode?: {
86
- authorizationUrl: string;
87
- tokenUrl: string;
88
- scopes: Record<string, string>;
89
- };
90
- };
91
- openIdConnectUrl?: string;
92
- }
93
- export interface OpenApiOperation {
94
- tags?: string[];
95
- summary?: string;
96
- description?: string;
97
- externalDocs?: {
98
- url: string;
99
- description?: string;
100
- };
101
- operationId?: string;
102
- parameters?: Array<{
103
- name: string;
104
- in: 'path' | 'query' | 'header' | 'cookie';
105
- description?: string;
106
- required?: boolean;
107
- deprecated?: boolean;
108
- schema?: OpenApiSchemaObject;
109
- example?: unknown;
110
- }>;
111
- requestBody?: {
112
- description?: string;
113
- required?: boolean;
114
- content: Record<string, {
115
- schema?: OpenApiSchemaObject;
116
- example?: unknown;
117
- }>;
118
- };
119
- responses: Record<string, {
120
- description: string;
121
- headers?: Record<string, {
122
- description?: string;
123
- schema?: OpenApiSchemaObject;
124
- }>;
125
- content?: Record<string, {
126
- schema?: OpenApiSchemaObject;
127
- example?: unknown;
128
- }>;
129
- }>;
130
- deprecated?: boolean;
131
- security?: Array<Record<string, string[]>>;
132
- }
133
- export interface OpenApiPathItem {
134
- get?: OpenApiOperation;
135
- put?: OpenApiOperation;
136
- post?: OpenApiOperation;
137
- delete?: OpenApiOperation;
138
- options?: OpenApiOperation;
139
- head?: OpenApiOperation;
140
- patch?: OpenApiOperation;
141
- trace?: OpenApiOperation;
142
- summary?: string;
143
- description?: string;
144
- parameters?: Array<{
145
- name: string;
146
- in: 'path' | 'query' | 'header' | 'cookie';
147
- required?: boolean;
148
- schema?: OpenApiSchemaObject;
149
- }>;
150
- }
151
- export interface OpenApiInfoObject {
152
- title: string;
153
- version: string;
154
- description?: string;
155
- termsOfService?: string;
156
- contact?: {
157
- name?: string;
158
- url?: string;
159
- email?: string;
160
- };
161
- license?: {
162
- name: string;
163
- url?: string;
164
- identifier?: string;
165
- };
166
- }
167
- export interface OpenApiDocument {
168
- openapi: string;
169
- info: OpenApiInfoObject;
170
- paths: Record<string, OpenApiPathItem>;
171
- servers?: Array<{
172
- url: string;
173
- description?: string;
174
- variables?: Record<string, {
175
- default: string;
176
- description?: string;
177
- enum?: string[];
178
- }>;
179
- }>;
180
- components?: {
181
- schemas?: Record<string, OpenApiSchemaObject>;
182
- securitySchemes?: Record<string, OpenApiSecurityScheme | {
183
- type: string;
184
- description?: string;
185
- name?: string;
186
- in?: string;
187
- scheme?: string;
188
- bearerFormat?: string;
189
- flows?: unknown;
190
- }>;
191
- responses?: Record<string, OpenApiResponseObject>;
192
- parameters?: Record<string, OpenApiParameterObject>;
193
- requestBodies?: Record<string, OpenApiRequestBodyObject>;
194
- };
195
- security?: Array<Record<string, string[]>>;
196
- tags?: Array<{
197
- name: string;
198
- description?: string;
199
- externalDocs?: {
200
- url: string;
201
- description?: string;
202
- };
203
- }>;
204
- externalDocs?: {
205
- url: string;
206
- description?: string;
207
- };
208
- }
209
- export interface ApiOperationOptions {
210
- summary?: string;
211
- description?: string;
212
- operationId?: string;
213
- deprecated?: boolean;
214
- tags?: string[];
215
- }
216
- export interface ApiResponseOptions {
217
- status: number;
218
- description?: string;
219
- schema?: ZodType<unknown> | OpenApiSchemaObject;
220
- type?: string;
221
- example?: unknown;
222
- isArray?: boolean;
223
- }
224
- export interface ApiPropertyOptions {
225
- description?: string;
226
- example?: unknown;
227
- default?: unknown;
228
- required?: boolean;
229
- type?: OpenApiDataType | string;
230
- format?: OpenApiFormat | string;
231
- enum?: unknown[];
232
- nullable?: boolean;
233
- minimum?: number;
234
- maximum?: number;
235
- minLength?: number;
236
- maxLength?: number;
237
- pattern?: string;
238
- deprecated?: boolean;
239
- readOnly?: boolean;
240
- writeOnly?: boolean;
241
- }
242
- export interface ApiParamOptions {
243
- name: string;
244
- description?: string;
245
- required?: boolean;
246
- type?: OpenApiDataType | string;
247
- format?: OpenApiFormat | string;
248
- example?: unknown;
249
- enum?: unknown[];
250
- deprecated?: boolean;
251
- schema?: ZodType<unknown>;
252
- }
253
- export interface ApiQueryOptions extends Omit<ApiParamOptions, 'required'> {
254
- required?: boolean;
255
- isArray?: boolean;
256
- }
257
- export interface ApiHeaderOptions {
258
- name: string;
259
- description?: string;
260
- required?: boolean;
261
- type?: OpenApiDataType | string;
262
- deprecated?: boolean;
263
- example?: unknown;
264
- schema?: ZodType<unknown>;
265
- }
266
- export interface ApiBodyOptions {
267
- description?: string;
268
- required?: boolean;
269
- type?: string;
270
- schema?: ZodType<unknown> | OpenApiSchemaObject;
271
- example?: unknown;
272
- examples?: Record<string, {
273
- value: unknown;
274
- summary?: string;
275
- description?: string;
276
- }>;
277
- isArray?: boolean;
278
- }
279
- export interface ApiSecurityOptions {
280
- name: string;
281
- scopes?: string[];
282
- }
283
- export interface SwaggerServerConfig {
284
- url: string;
285
- description?: string;
286
- variables?: Record<string, {
287
- default: string;
288
- description?: string;
289
- enum?: string[];
290
- }>;
291
- }
292
- export interface SwaggerContactConfig {
293
- name?: string;
294
- url?: string;
295
- email?: string;
296
- }
297
- export interface SwaggerLicenseConfig {
298
- name: string;
299
- url?: string;
300
- identifier?: string;
301
- }
302
- export interface SwaggerExternalDocsConfig {
303
- url: string;
304
- description?: string;
305
- }
306
- export interface SwaggerTagConfig {
307
- name: string;
308
- description?: string;
309
- externalDocs?: SwaggerExternalDocsConfig;
310
- }
311
- export interface SwaggerConfig {
312
- info?: OpenApiInfoObject;
313
- externalDocs?: SwaggerExternalDocsConfig;
314
- servers?: SwaggerServerConfig[];
315
- tags?: SwaggerTagConfig[];
316
- securitySchemes?: Record<string, OpenApiSecurityScheme>;
317
- security?: OpenApiSecurityRequirement[];
318
- jsonPath?: string;
319
- uiPath?: string;
320
- openApiVersion?: '3.0.0' | '3.0.1' | '3.0.2' | '3.0.3' | '3.1.0';
321
- includeUndocumented?: boolean;
322
- basePath?: string;
323
- }
324
- export interface StoredResponseMetadata extends ApiResponseOptions {
325
- _stored: true;
326
- }
327
- export interface StoredParamMetadata extends ApiParamOptions {
328
- _stored: true;
329
- location: ParameterLocation;
330
- }
331
- export interface ExtractedRouteInfo {
332
- method: string;
333
- path: string;
334
- handlerName: string | symbol;
335
- controllerPrefix: string;
336
- controllerClass: Function;
337
- }
338
- export type Constructor<T = unknown> = new (...args: any[]) => T;
package/dist/types.js DELETED
@@ -1 +0,0 @@
1
- export {};