@nestia/migrate 0.2.13 → 0.3.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/lib/NestiaMigrateApplication.js +49 -6
- package/lib/NestiaMigrateApplication.js.map +1 -1
- package/lib/bundles/TEMPLATE.js +3 -3
- package/lib/bundles/TEMPLATE.js.map +1 -1
- package/lib/programmers/ControllerProgrammer.js +4 -14
- package/lib/programmers/ControllerProgrammer.js.map +1 -1
- package/lib/programmers/DtoProgrammer.js +8 -13
- package/lib/programmers/DtoProgrammer.js.map +1 -1
- package/lib/programmers/ImportProgrammer.d.ts +7 -3
- package/lib/programmers/ImportProgrammer.js +28 -7
- package/lib/programmers/ImportProgrammer.js.map +1 -1
- package/lib/programmers/MigrateProgrammer.js +5 -5
- package/lib/programmers/MigrateProgrammer.js.map +1 -1
- package/lib/programmers/RouteProgrammer.d.ts +2 -1
- package/lib/programmers/RouteProgrammer.js +19 -19
- package/lib/programmers/RouteProgrammer.js.map +1 -1
- package/lib/programmers/SchemaProgrammer.d.ts +2 -1
- package/lib/programmers/SchemaProgrammer.js +80 -51
- package/lib/programmers/SchemaProgrammer.js.map +1 -1
- package/lib/structures/IMigrateRoute.d.ts +1 -1
- package/lib/structures/ISwaggerRoute.d.ts +1 -1
- package/package.json +5 -5
- package/src/bundles/TEMPLATE.ts +3 -3
- package/src/programmers/ControllerProgrammer.ts +13 -29
- package/src/programmers/DtoProgrammer.ts +9 -17
- package/src/programmers/ImportProgrammer.ts +41 -13
- package/src/programmers/MigrateProgrammer.ts +5 -5
- package/src/programmers/RouteProgrammer.ts +31 -31
- package/src/programmers/SchemaProgrammer.ts +128 -61
- package/src/structures/IMigrateRoute.ts +1 -1
- package/src/structures/ISwaggerRoute.ts +1 -1
@@ -3,19 +3,25 @@ import { Escaper } from "typia/lib/utils/Escaper";
|
|
3
3
|
import { ISwaggerSchema } from "../structures/ISwaggeSchema";
|
4
4
|
import { ISwaggerComponents } from "../structures/ISwaggerComponents";
|
5
5
|
import { JsonTypeChecker } from "../utils/JsonTypeChecker";
|
6
|
+
import { ImportProgrammer } from "./ImportProgrammer";
|
6
7
|
|
7
8
|
export namespace SchemaProgrammer {
|
8
9
|
export const write =
|
9
10
|
(components: ISwaggerComponents) =>
|
10
11
|
(references: ISwaggerSchema.IReference[]) =>
|
12
|
+
(importer: ImportProgrammer) =>
|
11
13
|
(schema: ISwaggerSchema): string =>
|
12
|
-
writeSchema(components)(references)(() => () => {})(true)(
|
14
|
+
writeSchema(components)(references)(importer)(() => () => {})(true)(
|
15
|
+
schema,
|
16
|
+
);
|
17
|
+
|
18
|
+
type CommentTagger = (tag: string) => (value?: string) => void;
|
13
19
|
|
14
|
-
type Tagger = (tag: string) => (value?: string) => void;
|
15
20
|
const writeSchema =
|
16
21
|
(components: ISwaggerComponents) =>
|
17
22
|
(references: ISwaggerSchema.IReference[]) =>
|
18
|
-
(
|
23
|
+
(importer: ImportProgrammer) =>
|
24
|
+
(commentTagger: CommentTagger) =>
|
19
25
|
(final: boolean) =>
|
20
26
|
(schema: ISwaggerSchema): string => {
|
21
27
|
// SPECIAL TYPES
|
@@ -27,38 +33,49 @@ export namespace SchemaProgrammer {
|
|
27
33
|
"(" +
|
28
34
|
schema.anyOf
|
29
35
|
.map(
|
30
|
-
writeSchema(components)(references)(
|
31
|
-
|
32
|
-
),
|
36
|
+
writeSchema(components)(references)(importer)(
|
37
|
+
commentTagger,
|
38
|
+
)(false),
|
33
39
|
)
|
34
40
|
.join(" | ") +
|
35
41
|
")"
|
36
42
|
);
|
37
43
|
else if (JsonTypeChecker.isOneOf(schema))
|
38
44
|
return schema.oneOf
|
39
|
-
.map(
|
45
|
+
.map(
|
46
|
+
writeSchema(components)(references)(importer)(
|
47
|
+
commentTagger,
|
48
|
+
)(false),
|
49
|
+
)
|
40
50
|
.join(" | ");
|
41
51
|
// ATOMIC TYPES
|
42
52
|
else if (JsonTypeChecker.isBoolean(schema))
|
43
|
-
return writeBoolean(
|
44
|
-
else if (
|
45
|
-
|
46
|
-
|
47
|
-
|
53
|
+
return writeBoolean(commentTagger)(schema);
|
54
|
+
else if (
|
55
|
+
JsonTypeChecker.isInteger(schema) ||
|
56
|
+
JsonTypeChecker.isNumber(schema)
|
57
|
+
)
|
58
|
+
return writeNumber(importer)(commentTagger)(schema);
|
48
59
|
else if (JsonTypeChecker.isString(schema))
|
49
|
-
return writeString(
|
60
|
+
return writeString(importer)(commentTagger)(schema);
|
50
61
|
// INSTANCE TYPES
|
51
62
|
else if (JsonTypeChecker.isArray(schema))
|
52
|
-
return writeArray(components)(references)(
|
63
|
+
return writeArray(components)(references)(importer)(
|
64
|
+
commentTagger,
|
65
|
+
)(schema);
|
53
66
|
else if (JsonTypeChecker.isObject(schema))
|
54
|
-
return writeObject(components)(references)(
|
67
|
+
return writeObject(components)(references)(importer)(
|
68
|
+
schema,
|
69
|
+
);
|
55
70
|
else if (JsonTypeChecker.isReference(schema)) {
|
56
71
|
references.push(schema);
|
57
|
-
return
|
72
|
+
return importer.dto(
|
73
|
+
schema.$ref.replace(`#/components/schemas/`, ``),
|
74
|
+
);
|
58
75
|
} else return "any";
|
59
76
|
})();
|
60
77
|
if (type === "any" || final === false) return type;
|
61
|
-
return isNullable(components)(schema) ?
|
78
|
+
return isNullable(components)(schema) ? `null | ${type}` : type;
|
62
79
|
};
|
63
80
|
|
64
81
|
const isNullable =
|
@@ -79,69 +96,103 @@ export namespace SchemaProgrammer {
|
|
79
96
|
};
|
80
97
|
|
81
98
|
const writeBoolean =
|
82
|
-
(tagger:
|
99
|
+
(tagger: CommentTagger) =>
|
83
100
|
(schema: ISwaggerSchema.IBoolean): string => {
|
84
101
|
if (schema.default) tagger("default")(schema.default.toString());
|
85
102
|
return schema.enum ? schema.enum.join(" | ") : "boolean";
|
86
103
|
};
|
87
|
-
|
88
|
-
(tagger: Tagger) =>
|
89
|
-
(schema: ISwaggerSchema.IInteger): string => {
|
90
|
-
tagger("type")("int");
|
91
|
-
return writeNumber(tagger)(schema);
|
92
|
-
};
|
104
|
+
|
93
105
|
const writeNumber =
|
94
|
-
(
|
106
|
+
(importer: ImportProgrammer) =>
|
107
|
+
(commentTagger: CommentTagger) =>
|
95
108
|
(schema: ISwaggerSchema.IInteger | ISwaggerSchema.INumber): string => {
|
96
|
-
if (schema.default)
|
109
|
+
if (schema.default)
|
110
|
+
commentTagger("default")(schema.default.toString());
|
97
111
|
if (schema.enum?.length) return schema.enum.join(" | ");
|
98
112
|
|
113
|
+
const intersection: string[] = ["number"];
|
114
|
+
if (schema.type === "integer")
|
115
|
+
intersection.push(importer.tag("Type", "int32"));
|
99
116
|
if (schema.minimum !== undefined)
|
100
|
-
|
101
|
-
|
102
|
-
|
117
|
+
intersection.push(
|
118
|
+
importer.tag(
|
119
|
+
schema.exclusiveMinimum
|
120
|
+
? "ExclusiveMinimum"
|
121
|
+
: "Minimum",
|
122
|
+
schema.minimum,
|
123
|
+
),
|
124
|
+
);
|
103
125
|
if (schema.maximum !== undefined)
|
104
|
-
|
105
|
-
|
106
|
-
|
126
|
+
intersection.push(
|
127
|
+
importer.tag(
|
128
|
+
schema.exclusiveMaximum
|
129
|
+
? "ExclusiveMaximum"
|
130
|
+
: "Maximum",
|
131
|
+
schema.maximum,
|
132
|
+
),
|
133
|
+
);
|
107
134
|
if (schema.multipleOf !== undefined)
|
108
|
-
|
109
|
-
|
135
|
+
intersection.push(
|
136
|
+
importer.tag("MultipleOf", schema.multipleOf),
|
137
|
+
);
|
138
|
+
return intersection.length === 1
|
139
|
+
? intersection[0]
|
140
|
+
: "(" + intersection.join(" & ") + ")";
|
110
141
|
};
|
111
142
|
const writeString =
|
112
|
-
(
|
143
|
+
(importer: ImportProgrammer) =>
|
144
|
+
(commentTagger: CommentTagger) =>
|
113
145
|
(schema: ISwaggerSchema.IString): string => {
|
114
|
-
if (schema.default)
|
146
|
+
if (schema.default) commentTagger("default")(schema.default);
|
115
147
|
if (schema.enum?.length)
|
116
148
|
return schema.enum
|
117
149
|
.map((str) => JSON.stringify(str))
|
118
150
|
.join(" | ");
|
119
151
|
|
152
|
+
const intersection: string[] = ["string"];
|
153
|
+
if (schema.format !== undefined && FORMATS.has(schema.format))
|
154
|
+
intersection.push(importer.tag("Format", schema.format));
|
155
|
+
if (schema.pattern !== undefined)
|
156
|
+
intersection.push(importer.tag("Pattern", schema.pattern));
|
120
157
|
if (schema.minLength !== undefined)
|
121
|
-
|
158
|
+
intersection.push(importer.tag("MinLength", schema.minLength));
|
122
159
|
if (schema.maxLength !== undefined)
|
123
|
-
|
124
|
-
|
125
|
-
|
160
|
+
intersection.push(importer.tag("MaxLength", schema.maxLength));
|
161
|
+
return intersection.length === 1
|
162
|
+
? intersection[0]
|
163
|
+
: "(" + intersection.join(" & ") + ")";
|
126
164
|
};
|
127
165
|
|
128
166
|
const writeArray =
|
129
167
|
(components: ISwaggerComponents) =>
|
130
168
|
(references: ISwaggerSchema.IReference[]) =>
|
131
|
-
(
|
132
|
-
(
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
169
|
+
(importer: ImportProgrammer) =>
|
170
|
+
(commentTagger: CommentTagger) =>
|
171
|
+
(schema: ISwaggerSchema.IArray): string => {
|
172
|
+
if (schema["x-typia-tuple"])
|
173
|
+
return `[${schema["x-typia-tuple"].items
|
174
|
+
.map(writeTupleElement(components)(references)(importer))
|
175
|
+
.join(", ")}]`;
|
176
|
+
const intersection: string[] = [
|
177
|
+
`Array<${writeSchema(components)(references)(importer)(
|
178
|
+
commentTagger,
|
179
|
+
)(true)(schema.items)}>`,
|
180
|
+
];
|
181
|
+
if (schema.minItems !== undefined)
|
182
|
+
intersection.push(importer.tag("MinItems", schema.minItems));
|
183
|
+
if (schema.maxItems !== undefined)
|
184
|
+
intersection.push(importer.tag("MaxItems", schema.maxItems));
|
185
|
+
|
186
|
+
return intersection.length === 1
|
187
|
+
? intersection[0]
|
188
|
+
: "(" + intersection.join(" & ") + ")";
|
189
|
+
};
|
140
190
|
const writeTupleElement =
|
141
191
|
(components: ISwaggerComponents) =>
|
142
192
|
(references: ISwaggerSchema.IReference[]) =>
|
193
|
+
(importer: ImportProgrammer) =>
|
143
194
|
(schema: ISwaggerSchema): string => {
|
144
|
-
const name: string = writeSchema(components)(references)(
|
195
|
+
const name: string = writeSchema(components)(references)(importer)(
|
145
196
|
() => () => {},
|
146
197
|
)(true)(schema);
|
147
198
|
return schema["x-typia-optional"]
|
@@ -154,29 +205,31 @@ export namespace SchemaProgrammer {
|
|
154
205
|
const writeObject =
|
155
206
|
(components: ISwaggerComponents) =>
|
156
207
|
(references: ISwaggerSchema.IReference[]) =>
|
208
|
+
(importer: ImportProgrammer) =>
|
157
209
|
(schema: ISwaggerSchema.IObject): string => {
|
158
210
|
const entries = Object.entries(schema.properties ?? {});
|
159
211
|
return typeof schema.additionalProperties === "object"
|
160
212
|
? entries.length
|
161
|
-
? `${writeStaticObject(components)(references)(
|
213
|
+
? `${writeStaticObject(components)(references)(importer)(
|
162
214
|
schema,
|
163
215
|
)} & ${writeDynamicObject(components)(references)(
|
164
|
-
|
165
|
-
)}`
|
166
|
-
: writeDynamicObject(components)(references)(
|
216
|
+
importer,
|
217
|
+
)(schema.additionalProperties)}`
|
218
|
+
: writeDynamicObject(components)(references)(importer)(
|
167
219
|
schema.additionalProperties,
|
168
220
|
)
|
169
|
-
: writeStaticObject(components)(references)(schema);
|
221
|
+
: writeStaticObject(components)(references)(importer)(schema);
|
170
222
|
};
|
171
223
|
const writeStaticObject =
|
172
224
|
(components: ISwaggerComponents) =>
|
173
225
|
(references: ISwaggerSchema.IReference[]) =>
|
226
|
+
(importer: ImportProgrammer) =>
|
174
227
|
(schema: ISwaggerSchema.IObject): string =>
|
175
228
|
[
|
176
229
|
"{",
|
177
230
|
...Object.entries(schema.properties ?? {})
|
178
231
|
.map(([key, value]) =>
|
179
|
-
writeProperty(components)(references)(key)(
|
232
|
+
writeProperty(components)(references)(importer)(key)(
|
180
233
|
(schema.required ?? []).some((r) => r === key),
|
181
234
|
)(value),
|
182
235
|
)
|
@@ -186,11 +239,12 @@ export namespace SchemaProgrammer {
|
|
186
239
|
const writeDynamicObject =
|
187
240
|
(components: ISwaggerComponents) =>
|
188
241
|
(references: ISwaggerSchema.IReference[]) =>
|
242
|
+
(importer: ImportProgrammer) =>
|
189
243
|
(additional: ISwaggerSchema): string => {
|
190
244
|
return [
|
191
245
|
"{",
|
192
246
|
tab(4)(
|
193
|
-
writeProperty(components)(references)(
|
247
|
+
writeProperty(components)(references)(importer)(
|
194
248
|
"[key: string]",
|
195
249
|
true,
|
196
250
|
)(true)(additional),
|
@@ -202,11 +256,12 @@ export namespace SchemaProgrammer {
|
|
202
256
|
const writeProperty =
|
203
257
|
(components: ISwaggerComponents) =>
|
204
258
|
(references: ISwaggerSchema.IReference[]) =>
|
259
|
+
(importer: ImportProgrammer) =>
|
205
260
|
(key: string, ensureVariable: boolean = false) =>
|
206
261
|
(required: boolean) =>
|
207
262
|
(schema: ISwaggerSchema): string => {
|
208
263
|
const content: string[] = [];
|
209
|
-
const
|
264
|
+
const commentTagger = (tag: string) => (value?: string) => {
|
210
265
|
const exists: boolean =
|
211
266
|
(!!schema.description?.length &&
|
212
267
|
schema.description.includes(`@${tag}`)) ||
|
@@ -222,14 +277,16 @@ export namespace SchemaProgrammer {
|
|
222
277
|
}
|
223
278
|
|
224
279
|
// STARTS FROM TITLE
|
225
|
-
if (schema.title)
|
280
|
+
if (schema.title) commentTagger("@title")(schema.title);
|
226
281
|
|
227
282
|
// GET TYPE WITH SPECIAL TAGS
|
228
283
|
const type: string =
|
229
|
-
writeSchema(components)(references)(
|
284
|
+
writeSchema(components)(references)(importer)(commentTagger)(
|
285
|
+
true,
|
286
|
+
)(schema);
|
230
287
|
|
231
288
|
// ENDS WITH DEPRECATED TAG
|
232
|
-
if (schema.deprecated)
|
289
|
+
if (schema.deprecated) commentTagger("@deprecated")();
|
233
290
|
|
234
291
|
const description: string =
|
235
292
|
content.length === 0
|
@@ -255,3 +312,13 @@ export namespace SchemaProgrammer {
|
|
255
312
|
.map((l) => `${" ".repeat(size)}${l}`)
|
256
313
|
.join("\n");
|
257
314
|
}
|
315
|
+
|
316
|
+
const FORMATS = new Set([
|
317
|
+
"email",
|
318
|
+
"uuid",
|
319
|
+
"ipv4",
|
320
|
+
"ipv6",
|
321
|
+
"url",
|
322
|
+
"date",
|
323
|
+
"date-time",
|
324
|
+
]);
|