@miiajs/swagger 0.1.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 (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +17 -0
  3. package/dist/builder/index.d.ts +5 -0
  4. package/dist/builder/index.d.ts.map +1 -0
  5. package/dist/builder/index.js +4 -0
  6. package/dist/builder/index.js.map +1 -0
  7. package/dist/builder/path-converter.d.ts +3 -0
  8. package/dist/builder/path-converter.d.ts.map +1 -0
  9. package/dist/builder/path-converter.js +9 -0
  10. package/dist/builder/path-converter.js.map +1 -0
  11. package/dist/builder/schema-converter.d.ts +3 -0
  12. package/dist/builder/schema-converter.d.ts.map +1 -0
  13. package/dist/builder/schema-converter.js +234 -0
  14. package/dist/builder/schema-converter.js.map +1 -0
  15. package/dist/builder/spec-builder.d.ts +18 -0
  16. package/dist/builder/spec-builder.d.ts.map +1 -0
  17. package/dist/builder/spec-builder.js +245 -0
  18. package/dist/builder/spec-builder.js.map +1 -0
  19. package/dist/constants.d.ts +10 -0
  20. package/dist/constants.d.ts.map +1 -0
  21. package/dist/constants.js +10 -0
  22. package/dist/constants.js.map +1 -0
  23. package/dist/decorators/api-body.d.ts +39 -0
  24. package/dist/decorators/api-body.d.ts.map +1 -0
  25. package/dist/decorators/api-body.js +44 -0
  26. package/dist/decorators/api-body.js.map +1 -0
  27. package/dist/decorators/api-exclude.d.ts +2 -0
  28. package/dist/decorators/api-exclude.d.ts.map +1 -0
  29. package/dist/decorators/api-exclude.js +9 -0
  30. package/dist/decorators/api-exclude.js.map +1 -0
  31. package/dist/decorators/api-header.d.ts +3 -0
  32. package/dist/decorators/api-header.d.ts.map +1 -0
  33. package/dist/decorators/api-header.js +12 -0
  34. package/dist/decorators/api-header.js.map +1 -0
  35. package/dist/decorators/api-operation.d.ts +3 -0
  36. package/dist/decorators/api-operation.d.ts.map +1 -0
  37. package/dist/decorators/api-operation.js +6 -0
  38. package/dist/decorators/api-operation.js.map +1 -0
  39. package/dist/decorators/api-param.d.ts +3 -0
  40. package/dist/decorators/api-param.d.ts.map +1 -0
  41. package/dist/decorators/api-param.js +9 -0
  42. package/dist/decorators/api-param.js.map +1 -0
  43. package/dist/decorators/api-query.d.ts +3 -0
  44. package/dist/decorators/api-query.d.ts.map +1 -0
  45. package/dist/decorators/api-query.js +9 -0
  46. package/dist/decorators/api-query.js.map +1 -0
  47. package/dist/decorators/api-response.d.ts +3 -0
  48. package/dist/decorators/api-response.d.ts.map +1 -0
  49. package/dist/decorators/api-response.js +9 -0
  50. package/dist/decorators/api-response.js.map +1 -0
  51. package/dist/decorators/api-security.d.ts +2 -0
  52. package/dist/decorators/api-security.d.ts.map +1 -0
  53. package/dist/decorators/api-security.js +11 -0
  54. package/dist/decorators/api-security.js.map +1 -0
  55. package/dist/decorators/api-tag.d.ts +2 -0
  56. package/dist/decorators/api-tag.d.ts.map +1 -0
  57. package/dist/decorators/api-tag.js +6 -0
  58. package/dist/decorators/api-tag.js.map +1 -0
  59. package/dist/decorators/index.d.ts +10 -0
  60. package/dist/decorators/index.d.ts.map +1 -0
  61. package/dist/decorators/index.js +10 -0
  62. package/dist/decorators/index.js.map +1 -0
  63. package/dist/index.d.ts +7 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +9 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/swagger-ui.d.ts +2 -0
  68. package/dist/swagger-ui.d.ts.map +1 -0
  69. package/dist/swagger-ui.js +16 -0
  70. package/dist/swagger-ui.js.map +1 -0
  71. package/dist/swagger.module.d.ts +7 -0
  72. package/dist/swagger.module.d.ts.map +1 -0
  73. package/dist/swagger.module.js +19 -0
  74. package/dist/swagger.module.js.map +1 -0
  75. package/dist/swagger.service.d.ts +8 -0
  76. package/dist/swagger.service.d.ts.map +1 -0
  77. package/dist/swagger.service.js +96 -0
  78. package/dist/swagger.service.js.map +1 -0
  79. package/dist/types.d.ts +95 -0
  80. package/dist/types.d.ts.map +1 -0
  81. package/dist/types.js +2 -0
  82. package/dist/types.js.map +1 -0
  83. package/package.json +61 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Ruslan Matiushev
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,17 @@
1
+ # @miiajs/swagger
2
+
3
+ OpenAPI 3.1 spec generation and Swagger UI for MiiaJS.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @miiajs/swagger swagger-ui-dist
9
+ ```
10
+
11
+ ## Documentation
12
+
13
+ **[miiajs.com/docs/packages/swagger](https://miiajs.com/docs/packages/swagger)**
14
+
15
+ ## License
16
+
17
+ MIT
@@ -0,0 +1,5 @@
1
+ export { SpecBuilder } from './spec-builder.js';
2
+ export type { DiscoveredController } from './spec-builder.js';
3
+ export { convertSchema } from './schema-converter.js';
4
+ export { toOpenApiPath, extractPathParams } from './path-converter.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/builder/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { SpecBuilder } from './spec-builder.js';
2
+ export { convertSchema } from './schema-converter.js';
3
+ export { toOpenApiPath, extractPathParams } from './path-converter.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/builder/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export declare function toOpenApiPath(path: string): string;
2
+ export declare function extractPathParams(path: string): string[];
3
+ //# sourceMappingURL=path-converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-converter.d.ts","sourceRoot":"","sources":["../../src/builder/path-converter.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAExD"}
@@ -0,0 +1,9 @@
1
+ export function toOpenApiPath(path) {
2
+ const normalized = path.replace(/\/+/g, '/').replace(/^\/+|\/+$/g, '');
3
+ const converted = normalized.replace(/:(\w+)/g, '{$1}');
4
+ return '/' + converted;
5
+ }
6
+ export function extractPathParams(path) {
7
+ return [...path.matchAll(/:(\w+)/g)].map((m) => m[1]);
8
+ }
9
+ //# sourceMappingURL=path-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-converter.js","sourceRoot":"","sources":["../../src/builder/path-converter.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;IACtE,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IACvD,OAAO,GAAG,GAAG,SAAS,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACvD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { JsonSchema } from '../types.js';
2
+ export declare function convertSchema(schema: unknown): JsonSchema;
3
+ //# sourceMappingURL=schema-converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-converter.d.ts","sourceRoot":"","sources":["../../src/builder/schema-converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU,CA2BzD"}
@@ -0,0 +1,234 @@
1
+ export function convertSchema(schema) {
2
+ if (!schema || typeof schema !== 'object')
3
+ return { type: 'object' };
4
+ // 1. Zod 4+ native toJsonSchema() (future-proof)
5
+ if ('toJsonSchema' in schema && typeof schema.toJsonSchema === 'function') {
6
+ return schema.toJsonSchema();
7
+ }
8
+ // 2. Already a JSON Schema object (has 'type' but no '_def')
9
+ if ('type' in schema && !('_def' in schema)) {
10
+ return schema;
11
+ }
12
+ // 3. Zod schema (has '_def')
13
+ if ('_def' in schema) {
14
+ const def = schema._def;
15
+ // Zod 4: _def.type is a string ("object", "string", etc.)
16
+ if (def.type && typeof def.type === 'string') {
17
+ return convertZod4(schema);
18
+ }
19
+ // Zod 3: _def.typeName is "ZodObject", "ZodString", etc.
20
+ if (def.typeName) {
21
+ return convertZod3Def(def);
22
+ }
23
+ }
24
+ return { type: 'object' };
25
+ }
26
+ // ─── Zod 4 Converter ───────────────────────────────────────────
27
+ function convertZod4(schema) {
28
+ const def = schema._def;
29
+ const result = {};
30
+ if (schema.description)
31
+ result.description = schema.description;
32
+ switch (def.type) {
33
+ case 'object':
34
+ return convertZod4Object(def, result);
35
+ case 'string':
36
+ return convertZod4String(schema, result);
37
+ case 'number':
38
+ return convertZod4Number(schema, result);
39
+ case 'boolean':
40
+ return { ...result, type: 'boolean' };
41
+ case 'array':
42
+ return { ...result, type: 'array', items: def.element ? convertZod4(def.element) : {} };
43
+ case 'enum':
44
+ return { ...result, type: 'string', enum: Object.values(def.entries) };
45
+ case 'literal':
46
+ return { ...result, const: def.value };
47
+ case 'optional':
48
+ return def.innerType ? convertZod4(def.innerType) : { ...result, type: 'object' };
49
+ case 'nullable': {
50
+ const inner = def.innerType ? convertZod4(def.innerType) : { type: 'object' };
51
+ return { ...inner, ...result, type: [inner.type ?? 'object', 'null'] };
52
+ }
53
+ case 'default': {
54
+ const inner = def.innerType ? convertZod4(def.innerType) : { type: 'object' };
55
+ return { ...inner, ...result, default: def.defaultValue };
56
+ }
57
+ case 'union':
58
+ return {
59
+ ...result,
60
+ anyOf: (def.options ?? []).map((opt) => convertZod4(opt)),
61
+ };
62
+ default:
63
+ return { ...result, type: 'object' };
64
+ }
65
+ }
66
+ function convertZod4Object(def, base) {
67
+ const shape = def.shape ?? {};
68
+ const properties = {};
69
+ const required = [];
70
+ for (const [key, value] of Object.entries(shape)) {
71
+ const v = value;
72
+ properties[key] = convertZod4(v);
73
+ if (v._def?.type !== 'optional' && v._def?.type !== 'default') {
74
+ required.push(key);
75
+ }
76
+ }
77
+ return {
78
+ ...base,
79
+ type: 'object',
80
+ properties,
81
+ ...(required.length > 0 && { required }),
82
+ };
83
+ }
84
+ function convertZod4String(schema, base) {
85
+ const result = { ...base, type: 'string' };
86
+ if (schema.format) {
87
+ const formatMap = {
88
+ email: 'email',
89
+ url: 'uri',
90
+ uri: 'uri',
91
+ uuid: 'uuid',
92
+ datetime: 'date-time',
93
+ date: 'date',
94
+ time: 'time',
95
+ ip: 'ip',
96
+ };
97
+ result.format = formatMap[schema.format] ?? schema.format;
98
+ }
99
+ if (schema.minLength != null)
100
+ result.minLength = schema.minLength;
101
+ if (schema.maxLength != null)
102
+ result.maxLength = schema.maxLength;
103
+ return result;
104
+ }
105
+ function convertZod4Number(schema, base) {
106
+ const result = { ...base };
107
+ result.type = schema.isInt ? 'integer' : 'number';
108
+ if (schema.minValue !== null &&
109
+ schema.minValue !== undefined &&
110
+ isFinite(schema.minValue) &&
111
+ schema.minValue !== -Number.MAX_SAFE_INTEGER &&
112
+ schema.minValue !== Number.MIN_SAFE_INTEGER) {
113
+ result.minimum = schema.minValue;
114
+ }
115
+ if (schema.maxValue !== null &&
116
+ schema.maxValue !== undefined &&
117
+ isFinite(schema.maxValue) &&
118
+ schema.maxValue !== Number.MAX_SAFE_INTEGER) {
119
+ result.maximum = schema.maxValue;
120
+ }
121
+ return result;
122
+ }
123
+ // ─── Zod 3 Converter ───────────────────────────────────────────
124
+ function convertZod3Def(def) {
125
+ if (!def || !def.typeName)
126
+ return { type: 'object' };
127
+ const result = {};
128
+ if (def.description)
129
+ result.description = def.description;
130
+ switch (def.typeName) {
131
+ case 'ZodObject':
132
+ return convertZod3Object(def, result);
133
+ case 'ZodString':
134
+ return convertZod3String(def, result);
135
+ case 'ZodNumber':
136
+ return convertZod3Number(def, result);
137
+ case 'ZodBoolean':
138
+ return { ...result, type: 'boolean' };
139
+ case 'ZodArray': {
140
+ const itemsDef = def.type?._def ?? def.type;
141
+ return { ...result, type: 'array', items: itemsDef ? convertZod3Def(itemsDef) : {} };
142
+ }
143
+ case 'ZodEnum':
144
+ return { ...result, type: 'string', enum: def.values };
145
+ case 'ZodNativeEnum':
146
+ return { ...result, enum: Object.values(def.values) };
147
+ case 'ZodLiteral':
148
+ return { ...result, const: def.value };
149
+ case 'ZodOptional':
150
+ return convertZod3Def(def.innerType?._def ?? def.innerType);
151
+ case 'ZodNullable': {
152
+ const inner = convertZod3Def(def.innerType?._def ?? def.innerType);
153
+ return { ...inner, ...result, type: [inner.type ?? 'object', 'null'] };
154
+ }
155
+ case 'ZodDefault': {
156
+ const inner = convertZod3Def(def.innerType?._def ?? def.innerType);
157
+ return { ...inner, ...result, default: def.defaultValue() };
158
+ }
159
+ case 'ZodUnion':
160
+ case 'ZodDiscriminatedUnion':
161
+ return {
162
+ ...result,
163
+ anyOf: (def.options ?? []).map((opt) => convertZod3Def(opt._def ?? opt)),
164
+ };
165
+ case 'ZodEffects':
166
+ return convertZod3Def(def.schema?._def ?? def.schema);
167
+ default:
168
+ return { ...result, type: 'object' };
169
+ }
170
+ }
171
+ function convertZod3Object(def, base) {
172
+ const shape = typeof def.shape === 'function' ? def.shape() : (def.shape ?? {});
173
+ const properties = {};
174
+ const required = [];
175
+ for (const [key, value] of Object.entries(shape)) {
176
+ const fieldDef = value?._def;
177
+ properties[key] = convertZod3Def(fieldDef ?? value);
178
+ if (fieldDef?.typeName !== 'ZodOptional' && fieldDef?.typeName !== 'ZodDefault') {
179
+ required.push(key);
180
+ }
181
+ }
182
+ return {
183
+ ...base,
184
+ type: 'object',
185
+ properties,
186
+ ...(required.length > 0 && { required }),
187
+ };
188
+ }
189
+ function convertZod3String(def, base) {
190
+ const result = { ...base, type: 'string' };
191
+ for (const check of def.checks ?? []) {
192
+ switch (check.kind) {
193
+ case 'email':
194
+ result.format = 'email';
195
+ break;
196
+ case 'url':
197
+ result.format = 'uri';
198
+ break;
199
+ case 'uuid':
200
+ result.format = 'uuid';
201
+ break;
202
+ case 'datetime':
203
+ result.format = 'date-time';
204
+ break;
205
+ case 'min':
206
+ result.minLength = check.value;
207
+ break;
208
+ case 'max':
209
+ result.maxLength = check.value;
210
+ break;
211
+ }
212
+ }
213
+ return result;
214
+ }
215
+ function convertZod3Number(def, base) {
216
+ const result = { ...base };
217
+ let isInteger = false;
218
+ for (const check of def.checks ?? []) {
219
+ switch (check.kind) {
220
+ case 'int':
221
+ isInteger = true;
222
+ break;
223
+ case 'min':
224
+ result.minimum = check.value;
225
+ break;
226
+ case 'max':
227
+ result.maximum = check.value;
228
+ break;
229
+ }
230
+ }
231
+ result.type = isInteger ? 'integer' : 'number';
232
+ return result;
233
+ }
234
+ //# sourceMappingURL=schema-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-converter.js","sourceRoot":"","sources":["../../src/builder/schema-converter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Constructor } from '@miiajs/core';
2
+ export interface DiscoveredController {
3
+ controller: Constructor;
4
+ prefix: string;
5
+ }
6
+ import type { SwaggerSetupOptions } from '../types.js';
7
+ export declare class SpecBuilder {
8
+ build(controllers: DiscoveredController[], options: SwaggerSetupOptions): Record<string, any>;
9
+ private processController;
10
+ private buildParameters;
11
+ private buildResponses;
12
+ private buildSecurity;
13
+ private isExcluded;
14
+ private getClassSecurity;
15
+ private getClassHeaders;
16
+ private getMethodSecurityMap;
17
+ }
18
+ //# sourceMappingURL=spec-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-builder.d.ts","sourceRoot":"","sources":["../../src/builder/spec-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAmC,MAAM,cAAc,CAAA;AAYhF,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,WAAW,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;CACf;AAYD,OAAO,KAAK,EACV,mBAAmB,EASpB,MAAM,aAAa,CAAA;AAIpB,qBAAa,WAAW;IACtB,KAAK,CAAC,WAAW,EAAE,oBAAoB,EAAE,EAAE,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAmC7F,OAAO,CAAC,iBAAiB;IAqGzB,OAAO,CAAC,eAAe;IAoFvB,OAAO,CAAC,cAAc;IA2CtB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,oBAAoB;CAG7B"}
@@ -0,0 +1,245 @@
1
+ import { getMeta, ROUTES, STATUSES, CLASS_GUARDS, METHOD_GUARDS, BODY_SCHEMAS, QUERY_SCHEMAS, PARAMS_SCHEMAS, } from '@miiajs/core';
2
+ import { API_TAG, API_OPERATIONS, API_RESPONSES, API_PARAMS, API_QUERIES, API_SECURITY, API_HEADERS, API_EXCLUDE, API_BODY_OPTIONS, } from '../constants.js';
3
+ import { convertSchema } from './schema-converter.js';
4
+ import { toOpenApiPath, extractPathParams } from './path-converter.js';
5
+ export class SpecBuilder {
6
+ build(controllers, options) {
7
+ const doc = {
8
+ openapi: '3.1.0',
9
+ info: {
10
+ title: options.title,
11
+ version: options.version,
12
+ ...(options.description && { description: options.description }),
13
+ },
14
+ paths: {},
15
+ tags: [],
16
+ };
17
+ if (options.servers?.length) {
18
+ doc.servers = options.servers;
19
+ }
20
+ if (options.securitySchemes && Object.keys(options.securitySchemes).length) {
21
+ doc.components = { securitySchemes: options.securitySchemes };
22
+ }
23
+ if (options.globalSecurity?.length) {
24
+ doc.security = options.globalSecurity;
25
+ }
26
+ const tagSet = new Set();
27
+ for (const { controller, prefix } of controllers) {
28
+ this.processController(doc, controller, prefix, tagSet);
29
+ }
30
+ doc.tags = [...tagSet].map((name) => ({ name }));
31
+ return doc;
32
+ }
33
+ processController(doc, controller, prefix, tagSet) {
34
+ // Check exclude
35
+ if (this.isExcluded(controller, '*'))
36
+ return;
37
+ // Tags
38
+ const tags = getMeta(controller, API_TAG) ?? [controller.name.replace(/Controller$/, '')];
39
+ for (const tag of tags)
40
+ tagSet.add(tag);
41
+ // Class-level metadata
42
+ const classGuards = getMeta(controller, CLASS_GUARDS) ?? [];
43
+ const classSecurity = this.getClassSecurity(controller);
44
+ const classHeaders = this.getClassHeaders(controller);
45
+ // Routes
46
+ const routes = getMeta(controller, ROUTES) ?? [];
47
+ const statusMap = getMeta(controller, STATUSES);
48
+ const bodySchemaMap = getMeta(controller, BODY_SCHEMAS);
49
+ const bodyOptionsMap = getMeta(controller, API_BODY_OPTIONS);
50
+ const querySchemaMap = getMeta(controller, QUERY_SCHEMAS);
51
+ const paramsSchemaMap = getMeta(controller, PARAMS_SCHEMAS);
52
+ const operationMap = getMeta(controller, API_OPERATIONS);
53
+ const responseMap = getMeta(controller, API_RESPONSES);
54
+ const paramMap = getMeta(controller, API_PARAMS);
55
+ const queryMap = getMeta(controller, API_QUERIES);
56
+ const methodGuardMap = getMeta(controller, METHOD_GUARDS);
57
+ const methodHeaderMap = getMeta(controller, API_HEADERS);
58
+ const methodSecurityMap = this.getMethodSecurityMap(controller);
59
+ for (const route of routes) {
60
+ if (this.isExcluded(controller, route.handlerName))
61
+ continue;
62
+ const fullPath = toOpenApiPath(prefix ? `${prefix}/${route.path}` : route.path);
63
+ const method = route.method.toLowerCase();
64
+ const operation = { tags };
65
+ // Operation metadata
66
+ const opMeta = operationMap?.get(route.handlerName);
67
+ if (opMeta?.summary)
68
+ operation.summary = opMeta.summary;
69
+ if (opMeta?.description)
70
+ operation.description = opMeta.description;
71
+ if (opMeta?.operationId)
72
+ operation.operationId = opMeta.operationId;
73
+ if (opMeta?.deprecated)
74
+ operation.deprecated = true;
75
+ // Parameters
76
+ const parameters = this.buildParameters(route, prefix, paramMap?.get(route.handlerName), queryMap?.get(route.handlerName), paramsSchemaMap?.get(route.handlerName), querySchemaMap?.get(route.handlerName), classHeaders, methodHeaderMap?.get(route.handlerName));
77
+ if (parameters.length)
78
+ operation.parameters = parameters;
79
+ // Request body
80
+ const bodySchema = bodySchemaMap?.get(route.handlerName);
81
+ if (bodySchema) {
82
+ const bodyOpts = bodyOptionsMap?.get(route.handlerName);
83
+ const contentType = bodyOpts?.contentType ?? 'application/json';
84
+ operation.requestBody = {
85
+ required: bodyOpts?.required ?? true,
86
+ ...(bodyOpts?.description && { description: bodyOpts.description }),
87
+ content: {
88
+ [contentType]: {
89
+ schema: convertSchema(bodySchema),
90
+ },
91
+ },
92
+ };
93
+ }
94
+ // Responses
95
+ const customStatus = statusMap?.get(route.handlerName);
96
+ const explicitResponses = responseMap?.get(route.handlerName) ?? [];
97
+ const hasGuards = classGuards.length > 0 || (methodGuardMap?.get(route.handlerName)?.length ?? 0) > 0;
98
+ const hasValidation = !!bodySchema || !!querySchemaMap?.get(route.handlerName) || !!paramsSchemaMap?.get(route.handlerName);
99
+ operation.responses = this.buildResponses(customStatus ?? (method === 'post' ? 201 : 200), explicitResponses, hasGuards, hasValidation);
100
+ // Security
101
+ const security = this.buildSecurity(classSecurity, methodSecurityMap?.get(route.handlerName));
102
+ if (security.length)
103
+ operation.security = security;
104
+ // Add to paths
105
+ if (!doc.paths[fullPath])
106
+ doc.paths[fullPath] = {};
107
+ doc.paths[fullPath][method] = operation;
108
+ }
109
+ }
110
+ buildParameters(route, prefix, explicitParams, explicitQueries, paramsSchema, querySchema, classHeaders, methodHeaders) {
111
+ const parameters = [];
112
+ const fullPath = prefix ? `${prefix}/${route.path}` : route.path;
113
+ // Path params: explicit > auto-inferred from schema > auto-inferred from path
114
+ const pathParamNames = extractPathParams(fullPath);
115
+ const explicitParamNames = new Set((explicitParams ?? []).map((p) => p.name));
116
+ // Add explicit params first
117
+ for (const param of explicitParams ?? []) {
118
+ parameters.push({
119
+ name: param.name,
120
+ in: 'path',
121
+ required: true,
122
+ ...(param.description && { description: param.description }),
123
+ schema: param.schema ? convertSchema(param.schema) : { type: 'string' },
124
+ });
125
+ }
126
+ // Auto-infer from schema for non-explicit params
127
+ const paramsJsonSchema = paramsSchema ? convertSchema(paramsSchema) : null;
128
+ for (const name of pathParamNames) {
129
+ if (explicitParamNames.has(name))
130
+ continue;
131
+ const propSchema = paramsJsonSchema?.properties?.[name];
132
+ parameters.push({
133
+ name,
134
+ in: 'path',
135
+ required: true,
136
+ schema: propSchema ?? { type: 'string' },
137
+ });
138
+ }
139
+ // Query params: explicit > auto-inferred from schema
140
+ const explicitQueryNames = new Set((explicitQueries ?? []).map((q) => q.name));
141
+ for (const query of explicitQueries ?? []) {
142
+ parameters.push({
143
+ name: query.name,
144
+ in: 'query',
145
+ ...(query.required && { required: true }),
146
+ ...(query.description && { description: query.description }),
147
+ schema: query.schema ? convertSchema(query.schema) : { type: 'string' },
148
+ });
149
+ }
150
+ // Auto-infer query from schema
151
+ if (querySchema) {
152
+ const queryJsonSchema = convertSchema(querySchema);
153
+ const requiredFields = new Set(queryJsonSchema.required ?? []);
154
+ for (const [name, propSchema] of Object.entries(queryJsonSchema.properties ?? {})) {
155
+ if (explicitQueryNames.has(name))
156
+ continue;
157
+ parameters.push({
158
+ name,
159
+ in: 'query',
160
+ ...(requiredFields.has(name) && { required: true }),
161
+ ...(propSchema.description && { description: propSchema.description }),
162
+ schema: propSchema,
163
+ });
164
+ }
165
+ }
166
+ // Headers: class-level + method-level
167
+ for (const header of [...classHeaders, ...(methodHeaders ?? [])]) {
168
+ parameters.push({
169
+ name: header.name,
170
+ in: 'header',
171
+ ...(header.required && { required: true }),
172
+ ...(header.description && { description: header.description }),
173
+ schema: { type: 'string' },
174
+ });
175
+ }
176
+ return parameters;
177
+ }
178
+ buildResponses(defaultStatus, explicit, hasGuards, hasValidation) {
179
+ const responses = {};
180
+ const explicitStatuses = new Set(explicit.map((r) => r.status));
181
+ // Default success response
182
+ if (!explicitStatuses.has(defaultStatus)) {
183
+ responses[String(defaultStatus)] = {
184
+ description: defaultStatus === 201 ? 'Created' : 'OK',
185
+ content: { 'application/json': { schema: {} } },
186
+ };
187
+ }
188
+ // Explicit responses
189
+ for (const res of explicit) {
190
+ const entry = {
191
+ description: res.description ?? statusText(res.status),
192
+ };
193
+ if (res.schema) {
194
+ entry.content = {
195
+ 'application/json': { schema: convertSchema(res.schema) },
196
+ };
197
+ }
198
+ responses[String(res.status)] = entry;
199
+ }
200
+ // Auto-add 403 for guards
201
+ if (hasGuards && !explicitStatuses.has(403)) {
202
+ responses['403'] = { description: 'Forbidden' };
203
+ }
204
+ // Auto-add 422 for validation
205
+ if (hasValidation && !explicitStatuses.has(422)) {
206
+ responses['422'] = { description: 'Unprocessable Entity' };
207
+ }
208
+ return responses;
209
+ }
210
+ buildSecurity(classSecurity, methodSecurity) {
211
+ const merged = methodSecurity ?? classSecurity;
212
+ return merged.map((s) => ({ [s.name]: s.scopes }));
213
+ }
214
+ isExcluded(controller, handler) {
215
+ const set = getMeta(controller, API_EXCLUDE);
216
+ if (!set)
217
+ return false;
218
+ return set.has('*') || set.has(handler);
219
+ }
220
+ getClassSecurity(controller) {
221
+ return getMeta(controller, API_SECURITY)?.get('*') ?? [];
222
+ }
223
+ getClassHeaders(controller) {
224
+ return getMeta(controller, API_HEADERS)?.get('*') ?? [];
225
+ }
226
+ getMethodSecurityMap(controller) {
227
+ return getMeta(controller, API_SECURITY);
228
+ }
229
+ }
230
+ function statusText(code) {
231
+ const texts = {
232
+ 200: 'OK',
233
+ 201: 'Created',
234
+ 204: 'No Content',
235
+ 400: 'Bad Request',
236
+ 401: 'Unauthorized',
237
+ 403: 'Forbidden',
238
+ 404: 'Not Found',
239
+ 409: 'Conflict',
240
+ 422: 'Unprocessable Entity',
241
+ 500: 'Internal Server Error',
242
+ };
243
+ return texts[code] ?? 'Response';
244
+ }
245
+ //# sourceMappingURL=spec-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-builder.js","sourceRoot":"","sources":["../../src/builder/spec-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare const API_TAG: unique symbol;
2
+ export declare const API_OPERATIONS: unique symbol;
3
+ export declare const API_RESPONSES: unique symbol;
4
+ export declare const API_PARAMS: unique symbol;
5
+ export declare const API_QUERIES: unique symbol;
6
+ export declare const API_SECURITY: unique symbol;
7
+ export declare const API_HEADERS: unique symbol;
8
+ export declare const API_EXCLUDE: unique symbol;
9
+ export declare const API_BODY_OPTIONS: unique symbol;
10
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,eAAmB,CAAA;AACvC,eAAO,MAAM,cAAc,eAA0B,CAAA;AACrD,eAAO,MAAM,aAAa,eAAyB,CAAA;AACnD,eAAO,MAAM,UAAU,eAAsB,CAAA;AAC7C,eAAO,MAAM,WAAW,eAAuB,CAAA;AAC/C,eAAO,MAAM,YAAY,eAAwB,CAAA;AACjD,eAAO,MAAM,WAAW,eAAuB,CAAA;AAC/C,eAAO,MAAM,WAAW,eAAuB,CAAA;AAC/C,eAAO,MAAM,gBAAgB,eAA2B,CAAA"}