@nestia/migrate 0.9.5 → 0.9.7
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/lib/MigrateApplication.js +268 -192
- package/lib/MigrateApplication.js.map +1 -1
- package/lib/analyzers/MigrateControllerAnalyzer.js +5 -0
- package/lib/analyzers/MigrateControllerAnalyzer.js.map +1 -1
- package/lib/analyzers/MigrateMethodAnalyzer.js +103 -31
- package/lib/analyzers/MigrateMethodAnalyzer.js.map +1 -1
- package/lib/bundles/NEST_TEMPLATE.js +2 -2
- package/lib/bundles/NEST_TEMPLATE.js.map +1 -1
- package/lib/bundles/SDK_TEMPLATE.js +1 -1
- package/lib/bundles/SDK_TEMPLATE.js.map +1 -1
- package/lib/programmers/MigrateSchemaProgrammer.js +14 -12
- package/lib/programmers/MigrateSchemaProgrammer.js.map +1 -1
- package/lib/structures/ISwagger.d.ts +1 -1
- package/lib/structures/ISwaggerComponents.d.ts +2 -0
- package/lib/structures/ISwaggerRoute.d.ts +2 -8
- package/lib/structures/ISwaggerRouteParameter.d.ts +13 -0
- package/lib/structures/ISwaggerRouteParameter.js +3 -0
- package/lib/structures/ISwaggerRouteParameter.js.map +1 -0
- package/lib/utils/FilePrinter.d.ts +1 -1
- package/lib/utils/SwaggerTypeChecker.d.ts +4 -2
- package/lib/utils/SwaggerTypeChecker.js +31 -25
- package/lib/utils/SwaggerTypeChecker.js.map +1 -1
- package/package.json +5 -5
- package/src/analyzers/MigrateControllerAnalyzer.ts +7 -0
- package/src/analyzers/MigrateMethodAnalyzer.ts +95 -59
- package/src/bundles/NEST_TEMPLATE.ts +2 -2
- package/src/bundles/SDK_TEMPLATE.ts +1 -1
- package/src/programmers/MigrateSchemaProgrammer.ts +15 -15
- package/src/structures/ISwagger.ts +4 -1
- package/src/structures/ISwaggerComponents.ts +2 -0
- package/src/structures/ISwaggerRoute.ts +2 -8
- package/src/structures/ISwaggerRouteHeaders.ts +0 -0
- package/src/structures/ISwaggerRouteParameter.ts +14 -0
- package/src/structures/ISwaggerRouteRequestBody.ts +0 -0
- package/src/structures/ISwaggerRouteResponse.ts +0 -0
- package/src/utils/SwaggerTypeChecker.ts +17 -5
@@ -1,7 +1,8 @@
|
|
1
1
|
import { IJsDocTagInfo } from "typia/lib/schemas/metadata/IJsDocTagInfo";
|
2
|
+
import { ISwaggerRouteParameter } from "./ISwaggerRouteParameter";
|
2
3
|
import { ISwaggerSchema } from "./ISwaggerSchema";
|
3
4
|
export interface ISwaggerRoute {
|
4
|
-
parameters?:
|
5
|
+
parameters?: (ISwaggerRouteParameter | ISwaggerRouteParameter.IReference)[];
|
5
6
|
requestBody?: ISwaggerRoute.IRequestBody;
|
6
7
|
responses?: ISwaggerRoute.IResponseBody;
|
7
8
|
summary?: string;
|
@@ -12,13 +13,6 @@ export interface ISwaggerRoute {
|
|
12
13
|
"x-nestia-jsDocTags"?: IJsDocTagInfo[];
|
13
14
|
}
|
14
15
|
export declare namespace ISwaggerRoute {
|
15
|
-
interface IParameter {
|
16
|
-
name?: string;
|
17
|
-
in: "path" | "query" | "header" | "cookie";
|
18
|
-
schema: ISwaggerSchema;
|
19
|
-
required?: boolean;
|
20
|
-
description?: string;
|
21
|
-
}
|
22
16
|
interface IRequestBody {
|
23
17
|
description?: string;
|
24
18
|
content: IContent;
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { ISwaggerSchema } from "./ISwaggerSchema";
|
2
|
+
export interface ISwaggerRouteParameter {
|
3
|
+
name?: string;
|
4
|
+
in: "path" | "query" | "header" | "cookie";
|
5
|
+
schema: ISwaggerSchema;
|
6
|
+
required?: boolean;
|
7
|
+
description?: string;
|
8
|
+
}
|
9
|
+
export declare namespace ISwaggerRouteParameter {
|
10
|
+
interface IReference {
|
11
|
+
$ref: `#/components/parameters/${string}`;
|
12
|
+
}
|
13
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ISwaggerRouteParameter.js","sourceRoot":"","sources":["../../src/structures/ISwaggerRouteParameter.ts"],"names":[],"mappings":""}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import ts from "typescript";
|
2
2
|
export declare namespace FilePrinter {
|
3
|
-
const description: <
|
3
|
+
const description: <Node extends ts.Node>(node: Node, comment: string) => Node;
|
4
4
|
const newLine: () => ts.ExpressionStatement;
|
5
5
|
const write: (props: {
|
6
6
|
statements: ts.Statement[];
|
@@ -1,6 +1,7 @@
|
|
1
|
-
import { ISwaggerSchema } from "../structures/ISwaggerSchema";
|
2
1
|
import { ISwaggerComponents } from "../structures/ISwaggerComponents";
|
3
|
-
|
2
|
+
import { ISwaggerRouteParameter } from "../structures/ISwaggerRouteParameter";
|
3
|
+
import { ISwaggerSchema } from "../structures/ISwaggerSchema";
|
4
|
+
export declare namespace SwaggerTypeChecker {
|
4
5
|
const isAnyOf: (schema: ISwaggerSchema) => schema is ISwaggerSchema.IAnyOf;
|
5
6
|
const isOneOf: (schema: ISwaggerSchema) => schema is ISwaggerSchema.IOneOf;
|
6
7
|
const isNullOnly: (schema: ISwaggerSchema) => schema is ISwaggerSchema.INullOnly;
|
@@ -13,4 +14,5 @@ export declare namespace SwaggerSwaggerChecker {
|
|
13
14
|
const isReference: (schema: ISwaggerSchema) => schema is ISwaggerSchema.IReference;
|
14
15
|
const isUnknown: (schema: ISwaggerSchema) => schema is ISwaggerSchema.IUnknown;
|
15
16
|
const isNullable: (components: ISwaggerComponents) => (schema: ISwaggerSchema) => boolean;
|
17
|
+
const getParameter: (components: ISwaggerComponents) => (schema: ISwaggerRouteParameter | ISwaggerRouteParameter.IReference) => ISwaggerRouteParameter | null;
|
16
18
|
}
|
@@ -1,34 +1,40 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.
|
4
|
-
var
|
5
|
-
(function (
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
!
|
18
|
-
!
|
19
|
-
!
|
20
|
-
|
3
|
+
exports.SwaggerTypeChecker = void 0;
|
4
|
+
var SwaggerTypeChecker;
|
5
|
+
(function (SwaggerTypeChecker) {
|
6
|
+
SwaggerTypeChecker.isAnyOf = (schema) => schema.anyOf !== undefined;
|
7
|
+
SwaggerTypeChecker.isOneOf = (schema) => schema.oneOf !== undefined;
|
8
|
+
SwaggerTypeChecker.isNullOnly = (schema) => schema.type === "null";
|
9
|
+
SwaggerTypeChecker.isBoolean = (schema) => schema.type === "boolean";
|
10
|
+
SwaggerTypeChecker.isInteger = (schema) => schema.type === "integer";
|
11
|
+
SwaggerTypeChecker.isNumber = (schema) => schema.type === "number";
|
12
|
+
SwaggerTypeChecker.isString = (schema) => schema.type === "string";
|
13
|
+
SwaggerTypeChecker.isArray = (schema) => schema.type === "array";
|
14
|
+
SwaggerTypeChecker.isObject = (schema) => schema.type === "object";
|
15
|
+
SwaggerTypeChecker.isReference = (schema) => schema.$ref !== undefined;
|
16
|
+
SwaggerTypeChecker.isUnknown = (schema) => schema.type === undefined &&
|
17
|
+
!SwaggerTypeChecker.isAnyOf(schema) &&
|
18
|
+
!SwaggerTypeChecker.isOneOf(schema) &&
|
19
|
+
!SwaggerTypeChecker.isReference(schema);
|
20
|
+
SwaggerTypeChecker.isNullable = (components) => (schema) => {
|
21
21
|
var _a;
|
22
|
-
if (
|
23
|
-
return schema.anyOf.some(
|
24
|
-
else if (
|
25
|
-
return schema.oneOf.some(
|
26
|
-
else if (
|
22
|
+
if (SwaggerTypeChecker.isAnyOf(schema))
|
23
|
+
return schema.anyOf.some(SwaggerTypeChecker.isNullable(components));
|
24
|
+
else if (SwaggerTypeChecker.isOneOf(schema))
|
25
|
+
return schema.oneOf.some(SwaggerTypeChecker.isNullable(components));
|
26
|
+
else if (SwaggerTypeChecker.isReference(schema)) {
|
27
27
|
const $id = schema.$ref.replace("#/components/schemas/", "");
|
28
28
|
const target = ((_a = components.schemas) !== null && _a !== void 0 ? _a : {})[$id];
|
29
|
-
return target === undefined ? false :
|
29
|
+
return target === undefined ? false : SwaggerTypeChecker.isNullable(components)(target);
|
30
30
|
}
|
31
31
|
return schema.nullable === true;
|
32
32
|
};
|
33
|
-
|
33
|
+
SwaggerTypeChecker.getParameter = (components) => (schema) => {
|
34
|
+
var _a, _b;
|
35
|
+
return SwaggerTypeChecker.isReference(schema) && schema.$ref.startsWith("#/components/parameters/")
|
36
|
+
? (_b = (_a = components.parameters) === null || _a === void 0 ? void 0 : _a[schema.$ref.replace("#/components/parameters/", "")]) !== null && _b !== void 0 ? _b : null
|
37
|
+
: schema;
|
38
|
+
};
|
39
|
+
})(SwaggerTypeChecker || (exports.SwaggerTypeChecker = SwaggerTypeChecker = {}));
|
34
40
|
//# sourceMappingURL=SwaggerTypeChecker.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SwaggerTypeChecker.js","sourceRoot":"","sources":["../../src/utils/SwaggerTypeChecker.ts"],"names":[],"mappings":";;;
|
1
|
+
{"version":3,"file":"SwaggerTypeChecker.js","sourceRoot":"","sources":["../../src/utils/SwaggerTypeChecker.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@nestia/migrate",
|
3
|
-
"version": "0.9.
|
3
|
+
"version": "0.9.7",
|
4
4
|
"description": "Migration program from swagger to NestJS",
|
5
5
|
"main": "lib/index.js",
|
6
6
|
"typings": "lib/index.d.ts",
|
@@ -34,9 +34,9 @@
|
|
34
34
|
},
|
35
35
|
"homepage": "https://nestia.io",
|
36
36
|
"devDependencies": {
|
37
|
-
"@nestia/core": "^2.5.
|
37
|
+
"@nestia/core": "^2.5.15",
|
38
38
|
"@nestia/e2e": "^0.4.1",
|
39
|
-
"@nestia/fetcher": "^2.5.
|
39
|
+
"@nestia/fetcher": "^2.5.15",
|
40
40
|
"@nestjs/common": "^10.3.3",
|
41
41
|
"@nestjs/core": "^10.3.3",
|
42
42
|
"@nestjs/platform-express": "^10.3.3",
|
@@ -59,8 +59,8 @@
|
|
59
59
|
"inquirer": "8.2.5",
|
60
60
|
"prettier": "^3.2.5",
|
61
61
|
"tstl": "^2.5.13",
|
62
|
-
"typescript": "^5.
|
63
|
-
"typia": "^5.5.
|
62
|
+
"typescript": "^5.4.2",
|
63
|
+
"typia": "^5.5.7"
|
64
64
|
},
|
65
65
|
"files": [
|
66
66
|
"lib",
|
@@ -20,6 +20,8 @@ export namespace MigrateControllerAnalyzer {
|
|
20
20
|
|
21
21
|
// GATHER ROUTES
|
22
22
|
for (const [path, collection] of Object.entries(props.swagger.paths)) {
|
23
|
+
if (collection === undefined) continue;
|
24
|
+
|
23
25
|
// PREPARE DIRECTORIES
|
24
26
|
const location: string = StringUtil.splitWithNormalization(path)
|
25
27
|
.filter((str) => str[0] !== "{" && str[0] !== ":")
|
@@ -29,6 +31,11 @@ export namespace MigrateControllerAnalyzer {
|
|
29
31
|
// INSERT ROUTES TO THE LAST DIRECTORY
|
30
32
|
const routes: IEntry[] = MapUtil.take(endpoints)(location)(() => []);
|
31
33
|
for (const [method, value] of Object.entries(collection)) {
|
34
|
+
if (
|
35
|
+
value === undefined ||
|
36
|
+
["get", "post", "patch", "put", "delete"].includes(method) === false
|
37
|
+
)
|
38
|
+
continue;
|
32
39
|
const r: IMigrateRoute | null = MigrateMethodAnalzyer.analyze(props)({
|
33
40
|
path,
|
34
41
|
method,
|
@@ -1,12 +1,14 @@
|
|
1
|
+
import typia from "typia";
|
1
2
|
import { Escaper } from "typia/lib/utils/Escaper";
|
2
3
|
|
3
4
|
import { IMigrateProgram } from "../structures/IMigrateProgram";
|
4
5
|
import { IMigrateRoute } from "../structures/IMigrateRoute";
|
5
6
|
import { ISwagger } from "../structures/ISwagger";
|
6
7
|
import { ISwaggerRoute } from "../structures/ISwaggerRoute";
|
8
|
+
import { ISwaggerRouteParameter } from "../structures/ISwaggerRouteParameter";
|
7
9
|
import { ISwaggerSchema } from "../structures/ISwaggerSchema";
|
8
10
|
import { StringUtil } from "../utils/StringUtil";
|
9
|
-
import {
|
11
|
+
import { SwaggerTypeChecker } from "../utils/SwaggerTypeChecker";
|
10
12
|
|
11
13
|
export namespace MigrateMethodAnalzyer {
|
12
14
|
export const analyze =
|
@@ -25,6 +27,13 @@ export namespace MigrateMethodAnalzyer {
|
|
25
27
|
);
|
26
28
|
|
27
29
|
const failures: string[] = [];
|
30
|
+
for (const p of route.parameters ?? [])
|
31
|
+
if (
|
32
|
+
SwaggerTypeChecker.getParameter(props.swagger.components)(p) === null
|
33
|
+
)
|
34
|
+
failures.push(
|
35
|
+
`parameter "${(p as ISwaggerRouteParameter.IReference).$ref}" is not defined in "components.parameters".`,
|
36
|
+
);
|
28
37
|
if (body === false)
|
29
38
|
failures.push(
|
30
39
|
`supports only "application/json", "application/x-www-form-urlencoded", "multipart/form-data" and "text/plain" content type in the request body.`,
|
@@ -39,17 +48,24 @@ export namespace MigrateMethodAnalzyer {
|
|
39
48
|
);
|
40
49
|
|
41
50
|
const [headers, query] = ["header", "query"].map((type) => {
|
42
|
-
const parameters = (route.parameters ?? [])
|
43
|
-
(
|
44
|
-
|
51
|
+
const parameters: ISwaggerRouteParameter[] = (route.parameters ?? [])
|
52
|
+
.filter(
|
53
|
+
(p) =>
|
54
|
+
SwaggerTypeChecker.getParameter(props.swagger.components)(p)
|
55
|
+
?.in === type,
|
56
|
+
)
|
57
|
+
.map(
|
58
|
+
(p) =>
|
59
|
+
SwaggerTypeChecker.getParameter(props.swagger.components)(p)!,
|
60
|
+
);
|
45
61
|
if (parameters.length === 0) return null;
|
46
62
|
|
47
63
|
const objects = parameters
|
48
64
|
.map((p) =>
|
49
|
-
|
65
|
+
SwaggerTypeChecker.isObject(p.schema)
|
50
66
|
? p.schema
|
51
|
-
:
|
52
|
-
|
67
|
+
: SwaggerTypeChecker.isReference(p.schema) &&
|
68
|
+
SwaggerTypeChecker.isObject(
|
53
69
|
(props.swagger.components.schemas ?? {})[
|
54
70
|
p.schema.$ref.replace(`#/components/schemas/`, ``)
|
55
71
|
] ?? {},
|
@@ -60,11 +76,11 @@ export namespace MigrateMethodAnalzyer {
|
|
60
76
|
.filter((s) => !!s);
|
61
77
|
const primitives = parameters.filter(
|
62
78
|
(p) =>
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
79
|
+
SwaggerTypeChecker.isBoolean(p.schema) ||
|
80
|
+
SwaggerTypeChecker.isNumber(p.schema) ||
|
81
|
+
SwaggerTypeChecker.isInteger(p.schema) ||
|
82
|
+
SwaggerTypeChecker.isString(p.schema) ||
|
83
|
+
SwaggerTypeChecker.isArray(p.schema),
|
68
84
|
);
|
69
85
|
if (objects.length === 1 && primitives.length === 0) return objects[0];
|
70
86
|
else if (objects.length > 1) {
|
@@ -75,7 +91,7 @@ export namespace MigrateMethodAnalzyer {
|
|
75
91
|
}
|
76
92
|
|
77
93
|
const dto: ISwaggerSchema.IObject | null = objects[0]
|
78
|
-
?
|
94
|
+
? SwaggerTypeChecker.isObject(objects[0])
|
79
95
|
? objects[0]
|
80
96
|
: ((props.swagger.components.schemas ?? {})[
|
81
97
|
(objects[0] as ISwaggerSchema.IReference).$ref.replace(
|
@@ -86,7 +102,7 @@ export namespace MigrateMethodAnalzyer {
|
|
86
102
|
: null;
|
87
103
|
const entire: ISwaggerSchema.IObject[] = [
|
88
104
|
...objects.map((o) =>
|
89
|
-
|
105
|
+
SwaggerTypeChecker.isObject(o)
|
90
106
|
? o
|
91
107
|
: (props.swagger.components.schemas?.[
|
92
108
|
o.$ref.replace(`#/components/schemas/`, ``)
|
@@ -152,7 +168,11 @@ export namespace MigrateMethodAnalzyer {
|
|
152
168
|
);
|
153
169
|
if (
|
154
170
|
parameterNames.length !==
|
155
|
-
(route.parameters ?? []).filter(
|
171
|
+
(route.parameters ?? []).filter(
|
172
|
+
(p) =>
|
173
|
+
SwaggerTypeChecker.getParameter(props.swagger.components)(p)?.in ===
|
174
|
+
"path",
|
175
|
+
).length
|
156
176
|
)
|
157
177
|
failures.push(
|
158
178
|
"number of path parameters are not matched with its full path.",
|
@@ -179,7 +199,10 @@ export namespace MigrateMethodAnalzyer {
|
|
179
199
|
}
|
180
200
|
: null,
|
181
201
|
parameters: (route.parameters ?? [])
|
182
|
-
.
|
202
|
+
.map((p) =>
|
203
|
+
SwaggerTypeChecker.getParameter(props.swagger.components)(p),
|
204
|
+
)
|
205
|
+
.filter((p) => p !== null && p.in === "path")
|
183
206
|
.map((p, i) => ({
|
184
207
|
name: parameterNames[i],
|
185
208
|
key: (() => {
|
@@ -191,8 +214,8 @@ export namespace MigrateMethodAnalzyer {
|
|
191
214
|
}
|
192
215
|
})(),
|
193
216
|
schema: {
|
194
|
-
...p
|
195
|
-
description: p
|
217
|
+
...p!.schema,
|
218
|
+
description: p!.schema.description ?? p!.description,
|
196
219
|
},
|
197
220
|
})),
|
198
221
|
query: query
|
@@ -222,56 +245,69 @@ export namespace MigrateMethodAnalzyer {
|
|
222
245
|
]),
|
223
246
|
),
|
224
247
|
deprecated: route.deprecated ?? false,
|
225
|
-
comment: () => describe(route),
|
248
|
+
comment: () => describe(props.swagger)(route),
|
226
249
|
tags: route.tags ?? [],
|
227
250
|
};
|
228
251
|
};
|
229
252
|
|
230
|
-
const describe =
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
253
|
+
const describe =
|
254
|
+
(swagger: ISwagger) =>
|
255
|
+
(route: ISwaggerRoute): string => {
|
256
|
+
const commentTags: string[] = [];
|
257
|
+
const add = (text: string) => {
|
258
|
+
if (commentTags.every((line) => line !== text)) commentTags.push(text);
|
259
|
+
};
|
235
260
|
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
261
|
+
let description: string = route.description ?? "";
|
262
|
+
if (route.summary) {
|
263
|
+
const emended: string = route.summary.endsWith(".")
|
264
|
+
? route.summary
|
265
|
+
: route.summary + ".";
|
266
|
+
if (
|
267
|
+
!!description.length &&
|
268
|
+
!description.startsWith(route.summary) &&
|
269
|
+
!route["x-nestia-jsDocTags"]?.some((t) => t.name === "summary")
|
270
|
+
)
|
271
|
+
description = `${emended}\n${description}`;
|
272
|
+
}
|
273
|
+
for (const p of route.parameters ?? []) {
|
274
|
+
const param: ISwaggerRouteParameter | null = (() => {
|
275
|
+
if (!typia.is<ISwaggerRouteParameter.IReference>(p))
|
276
|
+
return typia.is<ISwaggerRouteParameter>(p) ? p : null;
|
277
|
+
return (
|
278
|
+
swagger.components.parameters?.[
|
279
|
+
p.$ref.replace(`#/components/parameters/`, ``)
|
280
|
+
] ?? null
|
281
|
+
);
|
282
|
+
})();
|
283
|
+
if (param !== null && param.description)
|
284
|
+
add(`@param ${param.name} ${param.description}`);
|
285
|
+
}
|
286
|
+
if (route.requestBody?.description)
|
287
|
+
add(`@param body ${route.requestBody.description}`);
|
288
|
+
for (const security of route.security ?? [])
|
289
|
+
for (const [name, scopes] of Object.entries(security))
|
290
|
+
add(`@security ${[name, ...scopes].join("")}`);
|
291
|
+
if (route.tags) route.tags.forEach((name) => add(`@tag ${name}`));
|
292
|
+
if (route.deprecated) add("@deprecated");
|
293
|
+
return description.length
|
294
|
+
? commentTags.length
|
295
|
+
? `${description}\n\n${commentTags.join("\n")}`
|
296
|
+
: description
|
297
|
+
: commentTags.join("\n");
|
298
|
+
};
|
263
299
|
|
264
300
|
const isNotObjectLiteral = (schema: ISwaggerSchema): boolean =>
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
(
|
301
|
+
SwaggerTypeChecker.isReference(schema) ||
|
302
|
+
SwaggerTypeChecker.isBoolean(schema) ||
|
303
|
+
SwaggerTypeChecker.isNumber(schema) ||
|
304
|
+
SwaggerTypeChecker.isString(schema) ||
|
305
|
+
SwaggerTypeChecker.isUnknown(schema) ||
|
306
|
+
(SwaggerTypeChecker.isAnyOf(schema) &&
|
271
307
|
schema.anyOf.every(isNotObjectLiteral)) ||
|
272
|
-
(
|
308
|
+
(SwaggerTypeChecker.isOneOf(schema) &&
|
273
309
|
schema.oneOf.every(isNotObjectLiteral)) ||
|
274
|
-
(
|
310
|
+
(SwaggerTypeChecker.isArray(schema) && isNotObjectLiteral(schema.items));
|
275
311
|
|
276
312
|
const emplaceBodySchema =
|
277
313
|
(from: "request" | "response") =>
|
@@ -47,7 +47,7 @@ export const NEST_TEMPLATE = [
|
|
47
47
|
{
|
48
48
|
"location": "",
|
49
49
|
"file": "package.json",
|
50
|
-
"content": "{\r\n \"private\": true,\r\n \"name\": \"@ORGANIZATION/PROJECT\",\r\n \"version\": \"0.1.0\",\r\n \"description\": \"Starter kit of Nestia\",\r\n \"main\": \"lib/index.js\",\r\n \"scripts\": {\r\n \"test\": \"node bin/test\",\r\n \"test:webpack\": \"npm run webpack && node bin/test/webpack.js\",\r\n \"------------------------BUILDS------------------------\": \"\",\r\n \"build\": \"npm run build:sdk && npm run build:main && npm run build:test\",\r\n \"build:api\": \"rimraf packages/api/lib && npm run build:sdk && tsc -p packages/api/tsconfig.json\",\r\n \"build:main\": \"rimraf lib && tsc\",\r\n \"build:sdk\": \"rimraf src/api/functional && nestia sdk\",\r\n \"build:swagger\": \"npx nestia swagger\",\r\n \"build:test\": \"rimraf bin && tsc -p test/tsconfig.json\",\r\n \"dev\": \"npm run build:test -- --watch\",\r\n \"eslint\": \"eslint src && eslint test\",\r\n \"eslint:fix\": \"eslint --fix src && eslint --fix test\",\r\n \"prepare\": \"ts-patch install && typia patch\",\r\n \"prettier\": \"prettier src --write && prettier test --write\",\r\n \"------------------------WEBPACK------------------------\": \"\",\r\n \"webpack\": \"rimraf dist && webpack\",\r\n \"webpack:start\": \"cd dist && node dist/server\",\r\n \"------------------------DEPLOYS------------------------\": \"\",\r\n \"package:api\": \"npm run build:swagger && npm run build:api && cd packages/api && npm publish\",\r\n \"start\": \"node lib/executable/server\",\r\n \"start:swagger\": \"ts-node src/executable/swagger.ts\"\r\n },\r\n \"repository\": {\r\n \"type\": \"git\",\r\n \"url\": \"https://github.com/samchon/nestia-start\"\r\n },\r\n \"keywords\": [\r\n \"nestia\",\r\n \"template\",\r\n \"boilerplate\"\r\n ],\r\n \"author\": \"AUTHOR\",\r\n \"license\": \"MIT\",\r\n \"bugs\": {\r\n \"url\": \"https://github.com/samchon/nestia-start/issues\"\r\n },\r\n \"homepage\": \"https://github.com/samchon/nestia-start#readme\",\r\n \"devDependencies\": {\r\n \"@nestia/e2e\": \"^0.4.
|
50
|
+
"content": "{\r\n \"private\": true,\r\n \"name\": \"@ORGANIZATION/PROJECT\",\r\n \"version\": \"0.1.0\",\r\n \"description\": \"Starter kit of Nestia\",\r\n \"main\": \"lib/index.js\",\r\n \"scripts\": {\r\n \"test\": \"node bin/test\",\r\n \"test:webpack\": \"npm run webpack && node bin/test/webpack.js\",\r\n \"------------------------BUILDS------------------------\": \"\",\r\n \"build\": \"npm run build:sdk && npm run build:main && npm run build:test\",\r\n \"build:api\": \"rimraf packages/api/lib && npm run build:sdk && tsc -p packages/api/tsconfig.json\",\r\n \"build:main\": \"rimraf lib && tsc\",\r\n \"build:sdk\": \"rimraf src/api/functional && nestia sdk\",\r\n \"build:swagger\": \"npx nestia swagger\",\r\n \"build:test\": \"rimraf bin && tsc -p test/tsconfig.json\",\r\n \"dev\": \"npm run build:test -- --watch\",\r\n \"eslint\": \"eslint src && eslint test\",\r\n \"eslint:fix\": \"eslint --fix src && eslint --fix test\",\r\n \"prepare\": \"ts-patch install && typia patch\",\r\n \"prettier\": \"prettier src --write && prettier test --write\",\r\n \"------------------------WEBPACK------------------------\": \"\",\r\n \"webpack\": \"rimraf dist && webpack\",\r\n \"webpack:start\": \"cd dist && node dist/server\",\r\n \"------------------------DEPLOYS------------------------\": \"\",\r\n \"package:api\": \"npm run build:swagger && npm run build:api && cd packages/api && npm publish\",\r\n \"start\": \"node lib/executable/server\",\r\n \"start:swagger\": \"ts-node src/executable/swagger.ts\"\r\n },\r\n \"repository\": {\r\n \"type\": \"git\",\r\n \"url\": \"https://github.com/samchon/nestia-start\"\r\n },\r\n \"keywords\": [\r\n \"nestia\",\r\n \"template\",\r\n \"boilerplate\"\r\n ],\r\n \"author\": \"AUTHOR\",\r\n \"license\": \"MIT\",\r\n \"bugs\": {\r\n \"url\": \"https://github.com/samchon/nestia-start/issues\"\r\n },\r\n \"homepage\": \"https://github.com/samchon/nestia-start#readme\",\r\n \"devDependencies\": {\r\n \"@nestia/e2e\": \"^0.4.2\",\r\n \"@nestia/sdk\": \"^2.5.16\",\r\n \"@trivago/prettier-plugin-sort-imports\": \"^4.3.0\",\r\n \"@types/cli\": \"^0.11.21\",\r\n \"@types/express\": \"^4.17.21\",\r\n \"@types/inquirer\": \"^8.2.5\",\r\n \"@types/node\": \"^18.11.0\",\r\n \"@types/uuid\": \"^8.3.4\",\r\n \"@typescript-eslint/eslint-plugin\": \"^6.19.1\",\r\n \"@typescript-eslint/parser\": \"^6.19.1\",\r\n \"chalk\": \"^4.1.0\",\r\n \"cli\": \"^1.0.1\",\r\n \"copy-webpack-plugin\": \"^11.0.0\",\r\n \"eslint-plugin-deprecation\": \"^2.0.0\",\r\n \"express\": \"^4.18.2\",\r\n \"nestia\": \"^5.3.0\",\r\n \"prettier\": \"^3.2.4\",\r\n \"prettier-plugin-prisma\": \"^5.0.0\",\r\n \"rimraf\": \"^3.0.2\",\r\n \"source-map-support\": \"^0.5.21\",\r\n \"swagger-ui-express\": \"^5.0.0\",\r\n \"ts-loader\": \"^9.5.1\",\r\n \"ts-node\": \"^10.9.1\",\r\n \"ts-patch\": \"^3.0.2\",\r\n \"typescript\": \"^5.3.2\",\r\n \"typescript-transform-paths\": \"^3.4.6\",\r\n \"webpack\": \"^5.89.0\",\r\n \"webpack-cli\": \"^5.1.4\",\r\n \"write-file-webpack-plugin\": \"^4.5.1\"\r\n },\r\n \"dependencies\": {\r\n \"@nestia/core\": \"^2.5.16\",\r\n \"@nestia/fetcher\": \"^2.5.16\",\r\n \"@nestjs/common\": \"^10.3.4\",\r\n \"@nestjs/core\": \"^10.3.4\",\r\n \"@nestjs/platform-express\": \"^10.3.4\",\r\n \"commander\": \"10.0.0\",\r\n \"dotenv\": \"^16.3.1\",\r\n \"dotenv-expand\": \"^10.0.0\",\r\n \"inquirer\": \"8.2.5\",\r\n \"serialize-error\": \"^4.1.0\",\r\n \"tstl\": \"^2.5.13\",\r\n \"typia\": \"^5.5.7\",\r\n \"uuid\": \"^9.0.0\"\r\n },\r\n \"stackblitz\": {\r\n \"startCommand\": \"npm run prepare && npm run build:test && npm run test\"\r\n }\r\n}"
|
51
51
|
},
|
52
52
|
{
|
53
53
|
"location": "packages/api",
|
@@ -62,7 +62,7 @@ export const NEST_TEMPLATE = [
|
|
62
62
|
{
|
63
63
|
"location": "packages/api",
|
64
64
|
"file": "package.json",
|
65
|
-
"content": "{\r\n \"name\": \"@ORGANIZATION/PROJECT-api\",\r\n \"version\": \"0.1.0\",\r\n \"description\": \"SDK library generated by Nestia\",\r\n \"main\": \"lib/index.js\",\r\n \"typings\": \"lib/index.d.ts\",\r\n \"scripts\": {\r\n \"build\": \"npm run build:sdk && npm run compile\",\r\n \"build:sdk\": \"rimraf ../../src/api/functional && cd ../.. && npx nestia sdk && cd packages/api\",\r\n \"compile\": \"rimraf lib && tsc\",\r\n \"deploy\": \"npm run build && npm publish\",\r\n \"prepare\": \"ts-patch install && typia patch\"\r\n },\r\n \"repository\": {\r\n \"type\": \"git\",\r\n \"url\": \"https://github.com/samchon/nestia\"\r\n },\r\n \"author\": \"Jeongho Nam\",\r\n \"license\": \"MIT\",\r\n \"bugs\": {\r\n \"url\": \"https://github.com/samchon/nestia/issues\"\r\n },\r\n \"homepage\": \"https://nestia.io\",\r\n \"files\": [\r\n \"lib\",\r\n \"swagger.json\",\r\n \"package.json\",\r\n \"README.md\"\r\n ],\r\n \"devDependencies\": {\r\n \"rimraf\": \"^5.0.5\",\r\n \"ts-node\": \"^10.9.2\",\r\n \"ts-patch\": \"^3.1.2\",\r\n \"typescript\": \"^5.3.3\"\r\n },\r\n \"dependencies\": {\r\n \"@nestia/fetcher\": \"^2.5.
|
65
|
+
"content": "{\r\n \"name\": \"@ORGANIZATION/PROJECT-api\",\r\n \"version\": \"0.1.0\",\r\n \"description\": \"SDK library generated by Nestia\",\r\n \"main\": \"lib/index.js\",\r\n \"typings\": \"lib/index.d.ts\",\r\n \"scripts\": {\r\n \"build\": \"npm run build:sdk && npm run compile\",\r\n \"build:sdk\": \"rimraf ../../src/api/functional && cd ../.. && npx nestia sdk && cd packages/api\",\r\n \"compile\": \"rimraf lib && tsc\",\r\n \"deploy\": \"npm run build && npm publish\",\r\n \"prepare\": \"ts-patch install && typia patch\"\r\n },\r\n \"repository\": {\r\n \"type\": \"git\",\r\n \"url\": \"https://github.com/samchon/nestia\"\r\n },\r\n \"author\": \"Jeongho Nam\",\r\n \"license\": \"MIT\",\r\n \"bugs\": {\r\n \"url\": \"https://github.com/samchon/nestia/issues\"\r\n },\r\n \"homepage\": \"https://nestia.io\",\r\n \"files\": [\r\n \"lib\",\r\n \"swagger.json\",\r\n \"package.json\",\r\n \"README.md\"\r\n ],\r\n \"devDependencies\": {\r\n \"rimraf\": \"^5.0.5\",\r\n \"ts-node\": \"^10.9.2\",\r\n \"ts-patch\": \"^3.1.2\",\r\n \"typescript\": \"^5.3.3\"\r\n },\r\n \"dependencies\": {\r\n \"@nestia/fetcher\": \"^2.5.16\",\r\n \"typia\": \"^5.5.7\"\r\n }\r\n}"
|
66
66
|
},
|
67
67
|
{
|
68
68
|
"location": "packages/api",
|
@@ -22,7 +22,7 @@ export const SDK_TEMPLATE = [
|
|
22
22
|
{
|
23
23
|
"location": "",
|
24
24
|
"file": "package.json",
|
25
|
-
"content": "{\r\n \"name\": \"@ORGANIZATION/PROJECT-api\",\r\n \"version\": \"0.1.0\",\r\n \"description\": \"SDK library generated by Nestia\",\r\n \"main\": \"lib/index.js\",\r\n \"typings\": \"lib/index.d.ts\",\r\n \"scripts\": {\r\n \"build\": \"rimraf lib && tsc\",\r\n \"build:test\": \"rimraf bin && tsc --project test/tsconfig.json\",\r\n \"deploy\": \"npm run build && npm publish\",\r\n \"dev\": \"npm run build:test -- --watch\",\r\n \"prepare\": \"ts-patch install && typia patch\",\r\n \"start\": \"npx ts-node test/start.ts\",\r\n \"test\": \"npx ts-node test/index.ts\",\r\n \"test:simulate\": \"npx ts-node test/index.ts --simulate true\"\r\n },\r\n \"repository\": {\r\n \"type\": \"git\",\r\n \"url\": \"https://github.com/samchon/nestia\"\r\n },\r\n \"author\": \"Jeongho Nam\",\r\n \"license\": \"MIT\",\r\n \"bugs\": {\r\n \"url\": \"https://github.com/samchon/nestia/issues\"\r\n },\r\n \"homepage\": \"https://nestia.io\",\r\n \"files\": [\r\n \"lib\",\r\n \"swagger.json\",\r\n \"package.json\",\r\n \"README.md\"\r\n ],\r\n \"devDependencies\": {\r\n \"@nestia/e2e\": \"^0.4.1\",\r\n \"@types/inquirer\": \"8.2.5\",\r\n \"commander\": \"^10.0.0\",\r\n \"inquirer\": \"8.2.5\",\r\n \"prettier\": \"^3.2.5\",\r\n \"rimraf\": \"^5.0.5\",\r\n \"ts-node\": \"^10.9.2\",\r\n \"ts-patch\": \"^3.1.2\",\r\n \"typescript\": \"^5.3.3\",\r\n \"typescript-transform-paths\": \"^3.4.6\"\r\n },\r\n \"dependencies\": {\r\n \"@nestia/fetcher\": \"^2.5.
|
25
|
+
"content": "{\r\n \"name\": \"@ORGANIZATION/PROJECT-api\",\r\n \"version\": \"0.1.0\",\r\n \"description\": \"SDK library generated by Nestia\",\r\n \"main\": \"lib/index.js\",\r\n \"typings\": \"lib/index.d.ts\",\r\n \"scripts\": {\r\n \"build\": \"rimraf lib && tsc\",\r\n \"build:test\": \"rimraf bin && tsc --project test/tsconfig.json\",\r\n \"deploy\": \"npm run build && npm publish\",\r\n \"dev\": \"npm run build:test -- --watch\",\r\n \"prepare\": \"ts-patch install && typia patch\",\r\n \"start\": \"npx ts-node test/start.ts\",\r\n \"test\": \"npx ts-node test/index.ts\",\r\n \"test:simulate\": \"npx ts-node test/index.ts --simulate true\"\r\n },\r\n \"repository\": {\r\n \"type\": \"git\",\r\n \"url\": \"https://github.com/samchon/nestia\"\r\n },\r\n \"author\": \"Jeongho Nam\",\r\n \"license\": \"MIT\",\r\n \"bugs\": {\r\n \"url\": \"https://github.com/samchon/nestia/issues\"\r\n },\r\n \"homepage\": \"https://nestia.io\",\r\n \"files\": [\r\n \"lib\",\r\n \"swagger.json\",\r\n \"package.json\",\r\n \"README.md\"\r\n ],\r\n \"devDependencies\": {\r\n \"@nestia/e2e\": \"^0.4.1\",\r\n \"@types/inquirer\": \"8.2.5\",\r\n \"commander\": \"^10.0.0\",\r\n \"inquirer\": \"8.2.5\",\r\n \"prettier\": \"^3.2.5\",\r\n \"rimraf\": \"^5.0.5\",\r\n \"ts-node\": \"^10.9.2\",\r\n \"ts-patch\": \"^3.1.2\",\r\n \"typescript\": \"^5.3.3\",\r\n \"typescript-transform-paths\": \"^3.4.6\"\r\n },\r\n \"dependencies\": {\r\n \"@nestia/fetcher\": \"^2.5.16\",\r\n \"typia\": \"^5.5.7\"\r\n }\r\n}"
|
26
26
|
},
|
27
27
|
{
|
28
28
|
"location": "",
|
@@ -7,7 +7,7 @@ import { Escaper } from "typia/lib/utils/Escaper";
|
|
7
7
|
import { ISwaggerComponents } from "../structures/ISwaggerComponents";
|
8
8
|
import { ISwaggerSchema } from "../structures/ISwaggerSchema";
|
9
9
|
import { FilePrinter } from "../utils/FilePrinter";
|
10
|
-
import {
|
10
|
+
import { SwaggerTypeChecker } from "../utils/SwaggerTypeChecker";
|
11
11
|
import { MigrateImportProgrammer } from "./MigrateImportProgrammer";
|
12
12
|
|
13
13
|
export namespace MigrateSchemaProgrammer {
|
@@ -19,34 +19,32 @@ export namespace MigrateSchemaProgrammer {
|
|
19
19
|
(importer: MigrateImportProgrammer) =>
|
20
20
|
(schema: ISwaggerSchema): ts.TypeNode => {
|
21
21
|
const union: ts.TypeNode[] = [];
|
22
|
-
if (
|
22
|
+
if (SwaggerTypeChecker.isUnknown(schema))
|
23
23
|
return TypeFactory.keyword("any");
|
24
|
-
else if (
|
25
|
-
|
26
|
-
else if (SwaggerSwaggerChecker.isNullable(components)(schema))
|
24
|
+
else if (SwaggerTypeChecker.isNullOnly(schema)) return createNode("null");
|
25
|
+
else if (SwaggerTypeChecker.isNullable(components)(schema))
|
27
26
|
union.push(createNode("null"));
|
28
27
|
|
29
28
|
const type: ts.TypeNode = (() => {
|
30
29
|
// ATOMIC
|
31
|
-
if (
|
32
|
-
|
33
|
-
else if (SwaggerSwaggerChecker.isInteger(schema))
|
30
|
+
if (SwaggerTypeChecker.isBoolean(schema)) return writeBoolean(schema);
|
31
|
+
else if (SwaggerTypeChecker.isInteger(schema))
|
34
32
|
return writeInteger(importer)(schema);
|
35
|
-
else if (
|
33
|
+
else if (SwaggerTypeChecker.isNumber(schema))
|
36
34
|
return writeNumber(importer)(schema);
|
37
35
|
// INSTANCES
|
38
|
-
else if (
|
36
|
+
else if (SwaggerTypeChecker.isString(schema))
|
39
37
|
return writeString(importer)(schema);
|
40
|
-
else if (
|
38
|
+
else if (SwaggerTypeChecker.isArray(schema))
|
41
39
|
return writeArray(components)(importer)(schema);
|
42
|
-
else if (
|
40
|
+
else if (SwaggerTypeChecker.isObject(schema))
|
43
41
|
return writeObject(components)(importer)(schema);
|
44
|
-
else if (
|
42
|
+
else if (SwaggerTypeChecker.isReference(schema))
|
45
43
|
return writeReference(components)(importer)(schema);
|
46
44
|
// NESTED UNION
|
47
|
-
else if (
|
45
|
+
else if (SwaggerTypeChecker.isAnyOf(schema))
|
48
46
|
return writeUnion(components)(importer)(schema.anyOf);
|
49
|
-
else if (
|
47
|
+
else if (SwaggerTypeChecker.isOneOf(schema))
|
50
48
|
return writeUnion(components)(importer)(schema.oneOf);
|
51
49
|
else return TypeFactory.keyword("any");
|
52
50
|
})();
|
@@ -236,6 +234,8 @@ export namespace MigrateSchemaProgrammer {
|
|
236
234
|
(
|
237
235
|
schema: ISwaggerSchema.IReference,
|
238
236
|
): ts.TypeReferenceNode | ts.KeywordTypeNode => {
|
237
|
+
if (schema.$ref.startsWith("#/components/schemas") === false)
|
238
|
+
return TypeFactory.keyword("any");
|
239
239
|
const name: string = schema.$ref.split("/").at(-1)!;
|
240
240
|
return name === ""
|
241
241
|
? TypeFactory.keyword("any")
|
@@ -1,7 +1,9 @@
|
|
1
|
+
import { ISwaggerRouteParameter } from "./ISwaggerRouteParameter";
|
1
2
|
import { ISwaggerSchema } from "./ISwaggerSchema";
|
2
3
|
import { ISwaggerSecurityScheme } from "./ISwaggerSecurityScheme";
|
3
4
|
|
4
5
|
export interface ISwaggerComponents {
|
6
|
+
parameters?: Record<string, ISwaggerRouteParameter>;
|
5
7
|
schemas?: Record<string, ISwaggerSchema>;
|
6
8
|
securitySchemes?: Record<string, ISwaggerSecurityScheme>;
|
7
9
|
namespace?: string;
|
@@ -1,9 +1,10 @@
|
|
1
1
|
import { IJsDocTagInfo } from "typia/lib/schemas/metadata/IJsDocTagInfo";
|
2
2
|
|
3
|
+
import { ISwaggerRouteParameter } from "./ISwaggerRouteParameter";
|
3
4
|
import { ISwaggerSchema } from "./ISwaggerSchema";
|
4
5
|
|
5
6
|
export interface ISwaggerRoute {
|
6
|
-
parameters?:
|
7
|
+
parameters?: (ISwaggerRouteParameter | ISwaggerRouteParameter.IReference)[];
|
7
8
|
requestBody?: ISwaggerRoute.IRequestBody;
|
8
9
|
responses?: ISwaggerRoute.IResponseBody;
|
9
10
|
summary?: string;
|
@@ -14,13 +15,6 @@ export interface ISwaggerRoute {
|
|
14
15
|
"x-nestia-jsDocTags"?: IJsDocTagInfo[];
|
15
16
|
}
|
16
17
|
export namespace ISwaggerRoute {
|
17
|
-
export interface IParameter {
|
18
|
-
name?: string;
|
19
|
-
in: "path" | "query" | "header" | "cookie";
|
20
|
-
schema: ISwaggerSchema;
|
21
|
-
required?: boolean;
|
22
|
-
description?: string;
|
23
|
-
}
|
24
18
|
export interface IRequestBody {
|
25
19
|
description?: string;
|
26
20
|
content: IContent;
|
File without changes
|