@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.
- package/LICENSE +21 -0
- package/README.md +17 -0
- package/dist/builder/index.d.ts +5 -0
- package/dist/builder/index.d.ts.map +1 -0
- package/dist/builder/index.js +4 -0
- package/dist/builder/index.js.map +1 -0
- package/dist/builder/path-converter.d.ts +3 -0
- package/dist/builder/path-converter.d.ts.map +1 -0
- package/dist/builder/path-converter.js +9 -0
- package/dist/builder/path-converter.js.map +1 -0
- package/dist/builder/schema-converter.d.ts +3 -0
- package/dist/builder/schema-converter.d.ts.map +1 -0
- package/dist/builder/schema-converter.js +234 -0
- package/dist/builder/schema-converter.js.map +1 -0
- package/dist/builder/spec-builder.d.ts +18 -0
- package/dist/builder/spec-builder.d.ts.map +1 -0
- package/dist/builder/spec-builder.js +245 -0
- package/dist/builder/spec-builder.js.map +1 -0
- package/dist/constants.d.ts +10 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +10 -0
- package/dist/constants.js.map +1 -0
- package/dist/decorators/api-body.d.ts +39 -0
- package/dist/decorators/api-body.d.ts.map +1 -0
- package/dist/decorators/api-body.js +44 -0
- package/dist/decorators/api-body.js.map +1 -0
- package/dist/decorators/api-exclude.d.ts +2 -0
- package/dist/decorators/api-exclude.d.ts.map +1 -0
- package/dist/decorators/api-exclude.js +9 -0
- package/dist/decorators/api-exclude.js.map +1 -0
- package/dist/decorators/api-header.d.ts +3 -0
- package/dist/decorators/api-header.d.ts.map +1 -0
- package/dist/decorators/api-header.js +12 -0
- package/dist/decorators/api-header.js.map +1 -0
- package/dist/decorators/api-operation.d.ts +3 -0
- package/dist/decorators/api-operation.d.ts.map +1 -0
- package/dist/decorators/api-operation.js +6 -0
- package/dist/decorators/api-operation.js.map +1 -0
- package/dist/decorators/api-param.d.ts +3 -0
- package/dist/decorators/api-param.d.ts.map +1 -0
- package/dist/decorators/api-param.js +9 -0
- package/dist/decorators/api-param.js.map +1 -0
- package/dist/decorators/api-query.d.ts +3 -0
- package/dist/decorators/api-query.d.ts.map +1 -0
- package/dist/decorators/api-query.js +9 -0
- package/dist/decorators/api-query.js.map +1 -0
- package/dist/decorators/api-response.d.ts +3 -0
- package/dist/decorators/api-response.d.ts.map +1 -0
- package/dist/decorators/api-response.js +9 -0
- package/dist/decorators/api-response.js.map +1 -0
- package/dist/decorators/api-security.d.ts +2 -0
- package/dist/decorators/api-security.d.ts.map +1 -0
- package/dist/decorators/api-security.js +11 -0
- package/dist/decorators/api-security.js.map +1 -0
- package/dist/decorators/api-tag.d.ts +2 -0
- package/dist/decorators/api-tag.d.ts.map +1 -0
- package/dist/decorators/api-tag.js +6 -0
- package/dist/decorators/api-tag.js.map +1 -0
- package/dist/decorators/index.d.ts +10 -0
- package/dist/decorators/index.d.ts.map +1 -0
- package/dist/decorators/index.js +10 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/swagger-ui.d.ts +2 -0
- package/dist/swagger-ui.d.ts.map +1 -0
- package/dist/swagger-ui.js +16 -0
- package/dist/swagger-ui.js.map +1 -0
- package/dist/swagger.module.d.ts +7 -0
- package/dist/swagger.module.d.ts.map +1 -0
- package/dist/swagger.module.js +19 -0
- package/dist/swagger.module.js.map +1 -0
- package/dist/swagger.service.d.ts +8 -0
- package/dist/swagger.service.d.ts.map +1 -0
- package/dist/swagger.service.js +96 -0
- package/dist/swagger.service.js.map +1 -0
- package/dist/types.d.ts +95 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|