@nestia/sdk 2.0.0-dev.20230831-5 → 2.0.0-dev.20230901

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 (56) hide show
  1. package/assets/bundle/api/utils/NestiaSimulator.ts +1 -23
  2. package/lib/NestiaSdkApplication.js +1 -1
  3. package/lib/NestiaSdkApplication.js.map +1 -1
  4. package/lib/analyses/ControllerAnalyzer.js +11 -5
  5. package/lib/analyses/ControllerAnalyzer.js.map +1 -1
  6. package/lib/analyses/ExceptionAnalyzer.js +7 -2
  7. package/lib/analyses/ExceptionAnalyzer.js.map +1 -1
  8. package/lib/analyses/ImportAnalyzer.js +1 -1
  9. package/lib/analyses/ImportAnalyzer.js.map +1 -1
  10. package/lib/analyses/ReflectAnalyzer.js +0 -10
  11. package/lib/analyses/ReflectAnalyzer.js.map +1 -1
  12. package/lib/executable/internal/NestiaSdkConfig.js +37 -46
  13. package/lib/executable/internal/NestiaSdkConfig.js.map +1 -1
  14. package/lib/generates/SwaggerGenerator.d.ts +10 -0
  15. package/lib/generates/SwaggerGenerator.js +29 -497
  16. package/lib/generates/SwaggerGenerator.js.map +1 -1
  17. package/lib/generates/internal/E2eFileProgrammer.js +5 -44
  18. package/lib/generates/internal/E2eFileProgrammer.js.map +1 -1
  19. package/lib/generates/internal/SdkFunctionProgrammer.js +12 -10
  20. package/lib/generates/internal/SdkFunctionProgrammer.js.map +1 -1
  21. package/lib/generates/internal/SdkSimulationProgrammer.js +4 -4
  22. package/lib/generates/internal/SdkSimulationProgrammer.js.map +1 -1
  23. package/lib/generates/internal/SwaggerSchemaGenerator.d.ts +19 -0
  24. package/lib/generates/internal/SwaggerSchemaGenerator.js +301 -0
  25. package/lib/generates/internal/SwaggerSchemaGenerator.js.map +1 -0
  26. package/lib/generates/internal/SwaggerSchemaValidator.d.ts +7 -0
  27. package/lib/generates/internal/SwaggerSchemaValidator.js +200 -0
  28. package/lib/generates/internal/SwaggerSchemaValidator.js.map +1 -0
  29. package/lib/structures/IController.d.ts +0 -4
  30. package/lib/structures/IRoute.d.ts +6 -3
  31. package/lib/structures/ISwaggerError.d.ts +6 -0
  32. package/lib/structures/ISwaggerError.js +3 -0
  33. package/lib/structures/ISwaggerError.js.map +1 -0
  34. package/lib/structures/ISwaggerRoute.d.ts +2 -1
  35. package/lib/structures/ISwaggerSchemaTuple.d.ts +6 -0
  36. package/lib/structures/ISwaggerSchemaTuple.js +3 -0
  37. package/lib/structures/ISwaggerSchemaTuple.js.map +1 -0
  38. package/lib/structures/ITypeTuple.d.ts +1 -1
  39. package/package.json +5 -5
  40. package/src/NestiaSdkApplication.ts +1 -1
  41. package/src/analyses/ControllerAnalyzer.ts +13 -4
  42. package/src/analyses/ExceptionAnalyzer.ts +3 -2
  43. package/src/analyses/ImportAnalyzer.ts +1 -1
  44. package/src/analyses/ReflectAnalyzer.ts +0 -10
  45. package/src/generates/SwaggerGenerator.ts +86 -478
  46. package/src/generates/internal/E2eFileProgrammer.ts +7 -49
  47. package/src/generates/internal/SdkFunctionProgrammer.ts +13 -11
  48. package/src/generates/internal/SdkSimulationProgrammer.ts +5 -5
  49. package/src/generates/internal/SwaggerSchemaGenerator.ts +433 -0
  50. package/src/generates/internal/SwaggerSchemaValidator.ts +222 -0
  51. package/src/structures/IController.ts +0 -4
  52. package/src/structures/IRoute.ts +6 -3
  53. package/src/structures/ISwaggerError.ts +8 -0
  54. package/src/structures/ISwaggerRoute.ts +2 -1
  55. package/src/structures/ISwaggerSchemaTuple.ts +7 -0
  56. package/src/structures/ITypeTuple.ts +1 -1
@@ -0,0 +1,301 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SwaggerSchemaGenerator = void 0;
4
+ const tstl_1 = require("tstl");
5
+ const MetadataCollection_1 = require("typia/lib/factories/MetadataCollection");
6
+ const MetadataFactory_1 = require("typia/lib/factories/MetadataFactory");
7
+ const Metadata_1 = require("typia/lib/schemas/metadata/Metadata");
8
+ const SwaggerSchemaValidator_1 = require("./SwaggerSchemaValidator");
9
+ var SwaggerSchemaGenerator;
10
+ (function (SwaggerSchemaGenerator) {
11
+ SwaggerSchemaGenerator.response = (props) => (route) => {
12
+ var _a, _b, _c, _d;
13
+ const output = {};
14
+ //----
15
+ // EXCEPTION STATUSES
16
+ //----
17
+ // FROM DECORATOR
18
+ for (const [status, exp] of Object.entries(route.exceptions)) {
19
+ const result = MetadataFactory_1.MetadataFactory.analyze(props.checker)({
20
+ escape: true,
21
+ constant: true,
22
+ absorb: false,
23
+ validate: (meta) => {
24
+ const bigint = meta.atomics.some((a) => a.type === "bigint") ||
25
+ meta.constants.some((a) => a.type === "bigint");
26
+ return bigint ? ["bigint type is not allowed."] : [];
27
+ },
28
+ })(props.collection)(exp.type);
29
+ if (result.success === false)
30
+ props.errors.push(...result.errors.map((e) => (Object.assign(Object.assign({}, e), { route, from: `response body (status: ${status})` }))));
31
+ output[status] = {
32
+ description: (_a = exp.description) !== null && _a !== void 0 ? _a : "",
33
+ content: {
34
+ "application/json": {
35
+ schema: coalesceSchema(props)(result),
36
+ },
37
+ },
38
+ };
39
+ }
40
+ // FROM COMMENT TAGS -> ANY
41
+ for (const tag of route.tags) {
42
+ if (tag.name !== "throw" && tag.name !== "throws")
43
+ continue;
44
+ const text = (_c = (_b = tag.text) === null || _b === void 0 ? void 0 : _b.find((elem) => elem.kind === "text")) === null || _c === void 0 ? void 0 : _c.text;
45
+ if (text === undefined)
46
+ continue;
47
+ const elements = text
48
+ .split(" ")
49
+ .map((str) => str.trim());
50
+ const status = elements[0];
51
+ if (isNaN(Number(status)) &&
52
+ status !== "2XX" &&
53
+ status !== "3XX" &&
54
+ status !== "4XX" &&
55
+ status !== "5XX")
56
+ continue;
57
+ const description = elements.length === 1
58
+ ? undefined
59
+ : elements.slice(1).join(" ");
60
+ const oldbie = output[status];
61
+ if (description && oldbie !== undefined)
62
+ oldbie.description = description;
63
+ else if (oldbie === undefined)
64
+ output[status] = {
65
+ description: description !== null && description !== void 0 ? description : "",
66
+ content: {
67
+ "application/json": {
68
+ schema: {},
69
+ },
70
+ },
71
+ };
72
+ }
73
+ //----
74
+ // SUCCESS
75
+ //----
76
+ // STATUS
77
+ const status = route.status !== undefined
78
+ ? String(route.status)
79
+ : route.method === "GET" ||
80
+ route.method === "HEAD" ||
81
+ route.method === "DELETE"
82
+ ? "200"
83
+ : "201";
84
+ // SCHEMA
85
+ const result = MetadataFactory_1.MetadataFactory.analyze(props.checker)({
86
+ escape: true,
87
+ constant: true,
88
+ absorb: false,
89
+ validate: (meta) => {
90
+ const bigint = meta.atomics.some((a) => a.type === "bigint") ||
91
+ meta.constants.some((a) => a.type === "bigint");
92
+ return bigint ? ["bigint type is not allowed."] : [];
93
+ },
94
+ })(props.collection)(route.output.type);
95
+ if (result.success === false)
96
+ props.errors.push(...result.errors.map((e) => (Object.assign(Object.assign({}, e), { route, from: `response body (status: ${status})` }))));
97
+ // DO ASSIGN
98
+ const description = (_d = describe(route, "return")) !== null && _d !== void 0 ? _d : describe(route, "returns");
99
+ output[status] = {
100
+ description: route.encrypted
101
+ ? `${warning
102
+ .get(!!description)
103
+ .get("response", route.method)}${description !== null && description !== void 0 ? description : ""}`
104
+ : description !== null && description !== void 0 ? description : "",
105
+ content: route.output.typeName === "void"
106
+ ? undefined
107
+ : {
108
+ [route.output.contentType]: {
109
+ schema: coalesceSchema(props)(result),
110
+ },
111
+ },
112
+ "x-nestia-encrypted": route.encrypted,
113
+ };
114
+ return output;
115
+ };
116
+ SwaggerSchemaGenerator.body = (props) => (route) => (param) => {
117
+ // ANALZE TYPE WITH VALIDATION
118
+ const result = MetadataFactory_1.MetadataFactory.analyze(props.checker)({
119
+ escape: true,
120
+ constant: true,
121
+ absorb: true,
122
+ validate: (meta) => {
123
+ const bigint = meta.atomics.some((a) => a.type === "bigint") ||
124
+ meta.constants.some((a) => a.type === "bigint");
125
+ return bigint ? ["bigint type is not allowed."] : [];
126
+ },
127
+ })(props.collection)(param.type);
128
+ if (result.success === false)
129
+ props.errors.push(...result.errors.map((e) => (Object.assign(Object.assign({}, e), { route, from: `body parameter ${param.name}` }))));
130
+ // LIST UP PROPERTIES
131
+ const contentType = param.custom && param.category === "body"
132
+ ? param.contentType
133
+ : "application/json";
134
+ const encrypted = param.custom && param.category === "body" && param.encrypted;
135
+ const description = describe(route, "param", param.name);
136
+ // RETURNS WITH LAZY CONSTRUCTION
137
+ const schema = coalesceSchema(props)(result);
138
+ return {
139
+ description: encrypted
140
+ ? `${warning.get(!!description).get("request")}${description !== null && description !== void 0 ? description : ""}`
141
+ : description,
142
+ content: {
143
+ [contentType]: {
144
+ schema,
145
+ },
146
+ },
147
+ required: true,
148
+ "x-nestia-encrypted": encrypted,
149
+ };
150
+ };
151
+ SwaggerSchemaGenerator.parameter = (props) => (route) => (param) => param.category === "headers"
152
+ ? headers(props)(route)(param)
153
+ : param.category === "param"
154
+ ? path(props)(route)(param)
155
+ : query(props)(route)(param);
156
+ const headers = (props) => (route) => (param) => {
157
+ // ANALYZE TYPE WITH VALIDATIONS
158
+ const result = (() => {
159
+ const result = MetadataFactory_1.MetadataFactory.analyze(props.checker)({
160
+ escape: false,
161
+ constant: true,
162
+ absorb: true,
163
+ })(props.collection)(param.type);
164
+ if (result.success === false)
165
+ props.errors.push(...result.errors.map((e) => (Object.assign(Object.assign({}, e), { route, from: `header parameter ${param.name}` }))));
166
+ else if (result.data.objects.length === 1) {
167
+ // WHEN OBJECT CASE, VALIDATE IT MORE DETAILY
168
+ const again = MetadataFactory_1.MetadataFactory.analyze(props.checker)({
169
+ escape: false,
170
+ constant: true,
171
+ absorb: true,
172
+ validate: SwaggerSchemaValidator_1.SwaggerSchemaValidator.headers,
173
+ })(new MetadataCollection_1.MetadataCollection())(param.type);
174
+ if (again.success === false)
175
+ return again;
176
+ }
177
+ return result;
178
+ })();
179
+ // RETURNS WITH LAZY CONSTRUCTION
180
+ return lazyParameterReturns(props)(route)("header")(param, result);
181
+ };
182
+ const path = (props) => (route) => (param) => {
183
+ // ANALZE TYPE WITH VALIDATION
184
+ const result = MetadataFactory_1.MetadataFactory.analyze(props.checker)({
185
+ escape: false,
186
+ constant: true,
187
+ absorb: true,
188
+ validate: SwaggerSchemaValidator_1.SwaggerSchemaValidator.path,
189
+ })(props.collection)(param.type);
190
+ if (result.success === false)
191
+ props.errors.push(...result.errors.map((e) => (Object.assign(Object.assign({}, e), { route, from: `path parameter ${param.name}` }))));
192
+ // RETURNS WITH LAZY CONSTRUCTION
193
+ return lazyParameterReturns(props)(route)("path")(param, result);
194
+ };
195
+ const query = (props) => (route) => (param) => {
196
+ // ANALYZE TYPE WITH VALIDATIONS
197
+ const result = (() => {
198
+ const result = MetadataFactory_1.MetadataFactory.analyze(props.checker)({
199
+ escape: false,
200
+ constant: true,
201
+ absorb: true,
202
+ })(props.collection)(param.type);
203
+ if (result.success === false) {
204
+ props.errors.push(...result.errors.map((e) => (Object.assign(Object.assign({}, e), { route, from: `query parameter ${param.name}` }))));
205
+ }
206
+ else if (result.data.objects.length === 1) {
207
+ // WHEN OBJECT CASE, VALIDATE IT MORE DETAILY
208
+ const again = MetadataFactory_1.MetadataFactory.analyze(props.checker)({
209
+ escape: false,
210
+ constant: true,
211
+ absorb: true,
212
+ validate: SwaggerSchemaValidator_1.SwaggerSchemaValidator.query,
213
+ })(new MetadataCollection_1.MetadataCollection())(param.type);
214
+ if (again.success === false)
215
+ return again;
216
+ }
217
+ return result;
218
+ })();
219
+ // RETURNS WITH LAZY CONSTRUCTION
220
+ return lazyParameterReturns(props)(route)("query")(param, result);
221
+ };
222
+ const coalesceSchema = (props) => (result) => {
223
+ const schema = {};
224
+ props.tuples.push({
225
+ metadata: result.success ? result.data : any.get(),
226
+ schema,
227
+ });
228
+ return schema;
229
+ };
230
+ const lazyParameterReturns = (props) => (route) => (inKeyword) => (param, result) => {
231
+ var _a, _b;
232
+ const schema = coalesceSchema(props)(result);
233
+ return {
234
+ name: (_a = param.field) !== null && _a !== void 0 ? _a : param.name,
235
+ in: inKeyword,
236
+ schema,
237
+ description: (_b = describe(route, "param", param.name)) !== null && _b !== void 0 ? _b : "",
238
+ required: result.success ? result.data.isRequired() : true,
239
+ };
240
+ };
241
+ function describe(route, tagName, parameterName) {
242
+ var _a;
243
+ const parametric = parameterName
244
+ ? (tag) => tag.text.find((elem) => elem.kind === "parameterName" &&
245
+ elem.text === parameterName) !== undefined
246
+ : () => true;
247
+ const tag = route.tags.find((tag) => tag.name === tagName && tag.text && parametric(tag));
248
+ return tag && tag.text
249
+ ? (_a = tag.text.find((elem) => elem.kind === "text")) === null || _a === void 0 ? void 0 : _a.text
250
+ : undefined;
251
+ }
252
+ })(SwaggerSchemaGenerator || (exports.SwaggerSchemaGenerator = SwaggerSchemaGenerator = {}));
253
+ const warning = new tstl_1.Singleton((described) => {
254
+ return new tstl_1.Singleton((type, method) => {
255
+ const summary = type === "request"
256
+ ? "Request body must be encrypted."
257
+ : "Response data have been encrypted.";
258
+ const component = type === "request"
259
+ ? "[EncryptedBody](https://github.com/samchon/@nestia/core#encryptedbody)"
260
+ : `[EncryptedRoute.${method[0].toUpperCase()}.${method
261
+ .substring(1)
262
+ .toLowerCase()}](https://github.com/samchon/@nestia/core#encryptedroute)`;
263
+ const content = [
264
+ "## Warning",
265
+ "",
266
+ summary,
267
+ "",
268
+ `The ${type} body data would be encrypted as "AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding", through the ${component} component.`,
269
+ "",
270
+ `Therefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.`,
271
+ ];
272
+ if (described === true)
273
+ content.push("----------------", "");
274
+ return content.join("\n");
275
+ });
276
+ });
277
+ const any = new tstl_1.Singleton(() => Metadata_1.Metadata.from({
278
+ any: true,
279
+ required: true,
280
+ optional: false,
281
+ nullable: false,
282
+ functional: false,
283
+ atomics: [],
284
+ constants: [],
285
+ templates: [],
286
+ escaped: null,
287
+ rest: null,
288
+ arrays: [],
289
+ tuples: [],
290
+ objects: [],
291
+ aliases: [],
292
+ natives: [],
293
+ sets: [],
294
+ maps: [],
295
+ }, {
296
+ aliases: [],
297
+ arrays: [],
298
+ tuples: [],
299
+ objects: [],
300
+ }));
301
+ //# sourceMappingURL=SwaggerSchemaGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwaggerSchemaGenerator.js","sourceRoot":"","sources":["../../../src/generates/internal/SwaggerSchemaGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { MetadataFactory } from "typia/lib/factories/MetadataFactory";
2
+ import { Metadata } from "typia/lib/schemas/metadata/Metadata";
3
+ export declare namespace SwaggerSchemaValidator {
4
+ const path: (meta: Metadata) => string[];
5
+ const query: (meta: Metadata, explore: MetadataFactory.IExplore) => string[];
6
+ const headers: (meta: Metadata, explore: MetadataFactory.IExplore) => string[];
7
+ }
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SwaggerSchemaValidator = void 0;
4
+ const MetadataArray_1 = require("typia/lib/schemas/metadata/MetadataArray");
5
+ var SwaggerSchemaValidator;
6
+ (function (SwaggerSchemaValidator) {
7
+ SwaggerSchemaValidator.path = (meta) => {
8
+ const errors = [];
9
+ const insert = (msg) => errors.push(msg);
10
+ if (meta.any)
11
+ insert("do not allow any type");
12
+ if (meta.isRequired() === false)
13
+ insert("do not allow undefindable type");
14
+ const atomics = CoreMetadataUtil.atomics(meta);
15
+ const expected = meta.atomics.length +
16
+ meta.templates.length +
17
+ meta.constants
18
+ .map((c) => c.values.length)
19
+ .reduce((a, b) => a + b, 0);
20
+ if (meta.size() !== expected || atomics.size === 0)
21
+ insert("only atomic or constant types are allowed");
22
+ if (atomics.size > 1)
23
+ insert("do not allow union type");
24
+ return errors;
25
+ };
26
+ SwaggerSchemaValidator.query = (meta, explore) => {
27
+ const errors = [];
28
+ const insert = (msg) => errors.push(msg);
29
+ if (explore.top === true) {
30
+ // TOP MUST BE ONLY OBJECT
31
+ if (meta.objects.length !== 1 || meta.bucket() !== 1)
32
+ insert("only one object type is allowed.");
33
+ if (meta.nullable === true)
34
+ insert("query parameters cannot be null.");
35
+ if (meta.isRequired() === false)
36
+ insert("query parameters cannot be undefined.");
37
+ }
38
+ else if (explore.nested !== null &&
39
+ explore.nested instanceof MetadataArray_1.MetadataArray) {
40
+ const atomics = CoreMetadataUtil.atomics(meta);
41
+ const expected = meta.atomics.length +
42
+ meta.templates.length +
43
+ meta.constants
44
+ .map((c) => c.values.length)
45
+ .reduce((a, b) => a + b, 0);
46
+ if (atomics.size > 1)
47
+ insert("union type is not allowed in array.");
48
+ if (meta.nullable)
49
+ insert("nullable type is not allowed in array.");
50
+ if (meta.isRequired() === false)
51
+ insert("optional type is not allowed in array.");
52
+ if (meta.size() !== expected)
53
+ insert("only atomic or constant types are allowed in array.");
54
+ }
55
+ else if (explore.object && explore.property !== null) {
56
+ //----
57
+ // COMMON
58
+ //----
59
+ // PROPERTY MUST BE SOLE
60
+ if (typeof explore.property === "object")
61
+ insert("dynamic property is not allowed.");
62
+ // MUST BE LOWER-CASE
63
+ if (typeof explore.property === "string" &&
64
+ explore.property !== explore.property.toLowerCase())
65
+ insert("property name must be lower-case.");
66
+ // DO NOT ALLOW TUPLE TYPE
67
+ if (meta.tuples.length)
68
+ insert("tuple type is not allowed.");
69
+ // DO NOT ALLOW UNION TYPE
70
+ if (CoreMetadataUtil.isUnion(meta))
71
+ insert("union type is not allowed.");
72
+ // DO NOT ALLOW NESTED OBJECT
73
+ if (meta.objects.length ||
74
+ meta.sets.length ||
75
+ meta.maps.length ||
76
+ meta.natives.length)
77
+ insert("nested object type is not allowed.");
78
+ //----
79
+ // ARRAY CASES
80
+ //----
81
+ const isArray = meta.arrays.length > 1 || meta.tuples.length > 1;
82
+ // ARRAY TYPE MUST BE REQUIRED
83
+ if (isArray && meta.isRequired() === false)
84
+ insert("optional type is not allowed when array.");
85
+ // SET-COOKIE MUST BE ARRAY
86
+ if (explore.property === "set-cookie" && !isArray)
87
+ insert("set-cookie property must be array.");
88
+ }
89
+ return errors;
90
+ };
91
+ SwaggerSchemaValidator.headers = (meta, explore) => {
92
+ const errors = [];
93
+ const insert = (msg) => errors.push(msg);
94
+ if (explore.top === true) {
95
+ // TOP MUST BE ONLY OBJECT
96
+ if (meta.objects.length !== 1 || meta.bucket() !== 1)
97
+ insert("only one object type is allowed.");
98
+ if (meta.nullable === true)
99
+ insert("headers cannot be null.");
100
+ if (meta.isRequired() === false)
101
+ insert("headers cannot be null.");
102
+ }
103
+ else if (explore.nested !== null &&
104
+ explore.nested instanceof MetadataArray_1.MetadataArray) {
105
+ const atomics = CoreMetadataUtil.atomics(meta);
106
+ const expected = meta.atomics.length +
107
+ meta.templates.length +
108
+ meta.constants
109
+ .map((c) => c.values.length)
110
+ .reduce((a, b) => a + b, 0);
111
+ if (atomics.size > 1)
112
+ insert("union type is not allowed in array.");
113
+ if (meta.nullable)
114
+ insert("nullable type is not allowed in array.");
115
+ if (meta.isRequired() === false)
116
+ insert("optional type is not allowed.");
117
+ if (meta.size() !== expected)
118
+ insert("only atomic or constant types are allowed in array.");
119
+ }
120
+ else if (explore.object && explore.property !== null) {
121
+ //----
122
+ // COMMON
123
+ //----
124
+ // PROPERTY MUST BE SOLE
125
+ if (typeof explore.property === "object")
126
+ insert("dynamic property is not allowed.");
127
+ // MUST BE LOWER-CASE
128
+ if (typeof explore.property === "string" &&
129
+ explore.property !== explore.property.toLowerCase())
130
+ insert("property name must be lower-case.");
131
+ // DO NOT ALLOW TUPLE TYPE
132
+ if (meta.tuples.length)
133
+ insert("tuple type is not allowed.");
134
+ // DO NOT ALLOW UNION TYPE
135
+ if (CoreMetadataUtil.isUnion(meta))
136
+ insert("union type is not allowed.");
137
+ // DO NOT ALLOW NESTED OBJECT
138
+ if (meta.objects.length ||
139
+ meta.sets.length ||
140
+ meta.maps.length ||
141
+ meta.natives.length)
142
+ insert("nested object type is not allowed.");
143
+ // DO NOT ALLOW NULLABLE
144
+ if (meta.nullable)
145
+ insert("nullable type is not allowed.");
146
+ //----
147
+ // ARRAY CASES
148
+ //----
149
+ const isArray = meta.arrays.length > 1;
150
+ // ARRAY TYPE MUST BE REQUIRED
151
+ if (isArray && meta.isRequired() === false)
152
+ insert("optional type is not allowed when array.");
153
+ // SET-COOKIE MUST BE ARRAY
154
+ if (explore.property === "set-cookie" && !isArray)
155
+ insert("set-cookie property must be array.");
156
+ // MUST BE SINGULAR CASE
157
+ if (typeof explore.property === "string" &&
158
+ SINGULAR.has(explore.property) &&
159
+ isArray)
160
+ insert("property cannot be array.");
161
+ }
162
+ return errors;
163
+ };
164
+ })(SwaggerSchemaValidator || (exports.SwaggerSchemaValidator = SwaggerSchemaValidator = {}));
165
+ var CoreMetadataUtil;
166
+ (function (CoreMetadataUtil) {
167
+ CoreMetadataUtil.atomics = (meta) => new Set([
168
+ ...meta.atomics.map((a) => a.type),
169
+ ...meta.constants.map((c) => c.type),
170
+ ...(meta.templates.length ? ["string"] : []),
171
+ ]);
172
+ CoreMetadataUtil.isUnion = (meta) => CoreMetadataUtil.atomics(meta).size +
173
+ meta.arrays.length +
174
+ meta.tuples.length +
175
+ meta.natives.length +
176
+ meta.maps.length +
177
+ meta.objects.length >
178
+ 1;
179
+ })(CoreMetadataUtil || (CoreMetadataUtil = {}));
180
+ const SINGULAR = new Set([
181
+ "age",
182
+ "authorization",
183
+ "content-length",
184
+ "content-type",
185
+ "etag",
186
+ "expires",
187
+ "from",
188
+ "host",
189
+ "if-modified-since",
190
+ "if-unmodified-since",
191
+ "last-modified",
192
+ "location",
193
+ "max-forwards",
194
+ "proxy-authorization",
195
+ "referer",
196
+ "retry-after",
197
+ "server",
198
+ "user-agent",
199
+ ]);
200
+ //# sourceMappingURL=SwaggerSchemaValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwaggerSchemaValidator.js","sourceRoot":"","sources":["../../../src/generates/internal/SwaggerSchemaValidator.ts"],"names":[],"mappings":"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"}
@@ -56,10 +56,6 @@ export declare namespace IController {
56
56
  index: number;
57
57
  name: string;
58
58
  field: string | undefined;
59
- meta?: {
60
- type: string;
61
- nullable: boolean;
62
- };
63
59
  }
64
60
  interface IException {
65
61
  type: string;
@@ -1,6 +1,5 @@
1
1
  import ts from "typescript";
2
2
  import { IController } from "./IController";
3
- import { ITypeTuple } from "./ITypeTuple";
4
3
  export interface IRoute {
5
4
  name: string;
6
5
  method: string;
@@ -14,6 +13,7 @@ export interface IRoute {
14
13
  location: string;
15
14
  symbol: string;
16
15
  description?: string;
16
+ operationId?: string;
17
17
  tags: ts.JSDocTagInfo[];
18
18
  setHeaders: Array<{
19
19
  type: "setter";
@@ -29,9 +29,12 @@ export interface IRoute {
29
29
  export declare namespace IRoute {
30
30
  type IParameter = IController.IParameter & {
31
31
  optional: boolean;
32
- type: ITypeTuple;
32
+ type: ts.Type;
33
+ typeName: string;
33
34
  };
34
- interface IOutput extends ITypeTuple {
35
+ interface IOutput {
36
+ type: ts.Type;
37
+ typeName: string;
35
38
  description?: string;
36
39
  contentType: "application/json" | "text/plain";
37
40
  }
@@ -0,0 +1,6 @@
1
+ import { MetadataFactory } from "typia/lib/factories/MetadataFactory";
2
+ import { IRoute } from "./IRoute";
3
+ export interface ISwaggerError extends MetadataFactory.IError {
4
+ route: IRoute;
5
+ from: string;
6
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=ISwaggerError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ISwaggerError.js","sourceRoot":"","sources":["../../src/structures/ISwaggerError.ts"],"names":[],"mappings":""}
@@ -1,8 +1,9 @@
1
1
  import { IJsonSchema } from "typia";
2
- import { IJsDocTagInfo } from "typia/lib/metadata/IJsDocTagInfo";
2
+ import { IJsDocTagInfo } from "typia/lib/schemas/metadata/IJsDocTagInfo";
3
3
  export interface ISwaggerRoute {
4
4
  deprecated?: boolean;
5
5
  security?: Record<string, string[]>[];
6
+ operationId?: string;
6
7
  tags: string[];
7
8
  parameters: ISwaggerRoute.IParameter[];
8
9
  requestBody?: ISwaggerRoute.IRequestBody;
@@ -0,0 +1,6 @@
1
+ import { IJsonSchema } from "typia";
2
+ import { Metadata } from "typia/lib/schemas/metadata/Metadata";
3
+ export interface ISwaggerSchemaTuple {
4
+ metadata: Metadata;
5
+ schema: IJsonSchema;
6
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=ISwaggerSchemaTuple.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ISwaggerSchemaTuple.js","sourceRoot":"","sources":["../../src/structures/ISwaggerSchemaTuple.ts"],"names":[],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  import ts from "typescript";
2
2
  export interface ITypeTuple {
3
3
  type: ts.Type;
4
- name: string;
4
+ typeName: string;
5
5
  }