@nestia/migrate 0.1.11 → 0.2.1-dev.20230802

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 (38) hide show
  1. package/lib/NestiaMigrateApplication.js +76 -11
  2. package/lib/NestiaMigrateApplication.js.map +1 -1
  3. package/lib/archivers/FileArchiver.js +0 -1
  4. package/lib/archivers/FileArchiver.js.map +1 -1
  5. package/lib/bundles/TEMPLATE.js +10 -5
  6. package/lib/bundles/TEMPLATE.js.map +1 -1
  7. package/lib/programmers/ControllerProgrammer.d.ts +2 -1
  8. package/lib/programmers/ControllerProgrammer.js +12 -17
  9. package/lib/programmers/ControllerProgrammer.js.map +1 -1
  10. package/lib/programmers/DtoProgrammer.d.ts +2 -1
  11. package/lib/programmers/DtoProgrammer.js +5 -5
  12. package/lib/programmers/DtoProgrammer.js.map +1 -1
  13. package/lib/programmers/ImportProgrammer.d.ts +11 -0
  14. package/lib/programmers/ImportProgrammer.js +20 -0
  15. package/lib/programmers/ImportProgrammer.js.map +1 -0
  16. package/lib/programmers/MigrateProgrammer.d.ts +2 -1
  17. package/lib/programmers/MigrateProgrammer.js +3 -3
  18. package/lib/programmers/MigrateProgrammer.js.map +1 -1
  19. package/lib/programmers/RouteProgrammer.d.ts +2 -1
  20. package/lib/programmers/RouteProgrammer.js +93 -37
  21. package/lib/programmers/RouteProgrammer.js.map +1 -1
  22. package/lib/programmers/SchemaProgrammer.d.ts +2 -1
  23. package/lib/programmers/SchemaProgrammer.js +64 -42
  24. package/lib/programmers/SchemaProgrammer.js.map +1 -1
  25. package/lib/structures/IMigrateRoute.d.ts +3 -0
  26. package/lib/structures/ISwaggerRoute.d.ts +3 -1
  27. package/package.json +4 -4
  28. package/src/NestiaMigrateApplication.ts +28 -3
  29. package/src/archivers/FileArchiver.ts +0 -1
  30. package/src/bundles/TEMPLATE.ts +10 -5
  31. package/src/programmers/ControllerProgrammer.ts +50 -54
  32. package/src/programmers/DtoProgrammer.ts +29 -25
  33. package/src/programmers/ImportProgrammer.ts +29 -0
  34. package/src/programmers/MigrateProgrammer.ts +17 -14
  35. package/src/programmers/RouteProgrammer.ts +158 -52
  36. package/src/programmers/SchemaProgrammer.ts +82 -40
  37. package/src/structures/IMigrateRoute.ts +4 -0
  38. package/src/structures/ISwaggerRoute.ts +4 -1
@@ -1,49 +1,81 @@
1
1
  import { Escaper } from "typia/lib/utils/Escaper";
2
2
 
3
3
  import { ISwaggerSchema } from "../structures/ISwaggeSchema";
4
+ import { ISwaggerComponents } from "../structures/ISwaggerComponents";
4
5
  import { JsonTypeChecker } from "../utils/JsonTypeChecker";
5
6
 
6
7
  export namespace SchemaProgrammer {
7
8
  export const write =
9
+ (components: ISwaggerComponents) =>
8
10
  (references: ISwaggerSchema.IReference[]) =>
9
11
  (schema: ISwaggerSchema): string =>
10
- writeSchema(references)(() => () => {})(schema);
12
+ writeSchema(components)(references)(() => () => {})(true)(schema);
11
13
 
12
14
  type Tagger = (tag: string) => (value?: string) => void;
13
15
  const writeSchema =
16
+ (components: ISwaggerComponents) =>
14
17
  (references: ISwaggerSchema.IReference[]) =>
15
18
  (tagger: Tagger) =>
19
+ (final: boolean) =>
16
20
  (schema: ISwaggerSchema): string => {
17
21
  // SPECIAL TYPES
18
22
  if (JsonTypeChecker.isUnknown(schema)) return "any";
19
- else if (JsonTypeChecker.isAnyOf(schema))
20
- return schema.anyOf
21
- .map(writeSchema(references)(tagger))
22
- .join(" | ");
23
+
24
+ const type: string = (() => {
25
+ if (JsonTypeChecker.isAnyOf(schema))
26
+ return (
27
+ "(" +
28
+ schema.anyOf
29
+ .map(
30
+ writeSchema(components)(references)(tagger)(
31
+ false,
32
+ ),
33
+ )
34
+ .join(" | ") +
35
+ ")"
36
+ );
37
+ else if (JsonTypeChecker.isOneOf(schema))
38
+ return schema.oneOf
39
+ .map(writeSchema(components)(references)(tagger)(false))
40
+ .join(" | ");
41
+ // ATOMIC TYPES
42
+ else if (JsonTypeChecker.isBoolean(schema))
43
+ return writeBoolean(tagger)(schema);
44
+ else if (JsonTypeChecker.isInteger(schema))
45
+ return writeInteger(tagger)(schema);
46
+ else if (JsonTypeChecker.isNumber(schema))
47
+ return writeNumber(tagger)(schema);
48
+ else if (JsonTypeChecker.isString(schema))
49
+ return writeString(tagger)(schema);
50
+ // INSTANCE TYPES
51
+ else if (JsonTypeChecker.isArray(schema))
52
+ return writeArray(components)(references)(tagger)(schema);
53
+ else if (JsonTypeChecker.isObject(schema))
54
+ return writeObject(components)(references)(schema);
55
+ else if (JsonTypeChecker.isReference(schema)) {
56
+ references.push(schema);
57
+ return schema.$ref.replace(`#/components/schemas/`, ``);
58
+ } else return "any";
59
+ })();
60
+ if (type === "any" || final === false) return type;
61
+ return isNullable(components)(schema) ? `${type} | null` : type;
62
+ };
63
+
64
+ const isNullable =
65
+ (components: ISwaggerComponents) =>
66
+ (schema: ISwaggerSchema): boolean => {
67
+ if (JsonTypeChecker.isAnyOf(schema))
68
+ return schema.anyOf.some(isNullable(components));
23
69
  else if (JsonTypeChecker.isOneOf(schema))
24
- return schema.oneOf
25
- .map(writeSchema(references)(tagger))
26
- .join(" | ");
27
- // ATOMIC TYPES
28
- else if (JsonTypeChecker.isBoolean(schema))
29
- return writeBoolean(tagger)(schema);
30
- else if (JsonTypeChecker.isInteger(schema))
31
- return writeInteger(tagger)(schema);
32
- else if (JsonTypeChecker.isNumber(schema))
33
- return writeNumber(tagger)(schema);
34
- else if (JsonTypeChecker.isString(schema))
35
- return writeString(tagger)(schema);
36
- // INSTANCE TYPES
37
- else if (JsonTypeChecker.isArray(schema))
38
- return writeArray(references)(tagger)(schema);
39
- else if (JsonTypeChecker.isObject(schema))
40
- return writeObject(references)(schema);
70
+ return schema.oneOf.some(isNullable(components));
41
71
  else if (JsonTypeChecker.isReference(schema)) {
42
- references.push(schema);
43
- return schema.$ref.replace(`#/components/schemas/`, ``);
72
+ const $id = schema.$ref.replace("#/components/schemas/", "");
73
+ const target = (components.schemas ?? {})[$id];
74
+ return target === undefined
75
+ ? false
76
+ : isNullable(components)(target);
44
77
  }
45
- // NOTHING
46
- return "any";
78
+ return (schema as ISwaggerSchema.IString).nullable === true;
47
79
  };
48
80
 
49
81
  const writeBoolean =
@@ -94,20 +126,24 @@ export namespace SchemaProgrammer {
94
126
  };
95
127
 
96
128
  const writeArray =
129
+ (components: ISwaggerComponents) =>
97
130
  (references: ISwaggerSchema.IReference[]) =>
98
131
  (tagger: Tagger) =>
99
132
  (schema: ISwaggerSchema.IArray): string =>
100
133
  schema["x-typia-tuple"]
101
134
  ? `[${schema["x-typia-tuple"].items
102
- .map(writeTupleElement(references))
135
+ .map(writeTupleElement(components)(references))
103
136
  .join(", ")}]`
104
- : `Array<${writeSchema(references)(tagger)(schema.items)}>`;
137
+ : `Array<${writeSchema(components)(references)(tagger)(true)(
138
+ schema.items,
139
+ )}>`;
105
140
  const writeTupleElement =
141
+ (components: ISwaggerComponents) =>
106
142
  (references: ISwaggerSchema.IReference[]) =>
107
143
  (schema: ISwaggerSchema): string => {
108
- const name: string = writeSchema(references)(() => () => {})(
109
- schema,
110
- );
144
+ const name: string = writeSchema(components)(references)(
145
+ () => () => {},
146
+ )(true)(schema);
111
147
  return schema["x-typia-optional"]
112
148
  ? `${name}?`
113
149
  : schema["x-typia-rest"]
@@ -116,29 +152,31 @@ export namespace SchemaProgrammer {
116
152
  };
117
153
 
118
154
  const writeObject =
155
+ (components: ISwaggerComponents) =>
119
156
  (references: ISwaggerSchema.IReference[]) =>
120
157
  (schema: ISwaggerSchema.IObject): string => {
121
158
  const entries = Object.entries(schema.properties ?? {});
122
159
  return typeof schema.additionalProperties === "object"
123
160
  ? entries.length
124
- ? `${writeStaticObject(references)(
161
+ ? `${writeStaticObject(components)(references)(
125
162
  schema,
126
- )} & ${writeDynamicObject(references)(
163
+ )} & ${writeDynamicObject(components)(references)(
127
164
  schema.additionalProperties,
128
165
  )}`
129
- : writeDynamicObject(references)(
166
+ : writeDynamicObject(components)(references)(
130
167
  schema.additionalProperties,
131
168
  )
132
- : writeStaticObject(references)(schema);
169
+ : writeStaticObject(components)(references)(schema);
133
170
  };
134
171
  const writeStaticObject =
172
+ (components: ISwaggerComponents) =>
135
173
  (references: ISwaggerSchema.IReference[]) =>
136
174
  (schema: ISwaggerSchema.IObject): string =>
137
175
  [
138
176
  "{",
139
177
  ...Object.entries(schema.properties ?? {})
140
178
  .map(([key, value]) =>
141
- writeProperty(references)(key)(
179
+ writeProperty(components)(references)(key)(
142
180
  (schema.required ?? []).some((r) => r === key),
143
181
  )(value),
144
182
  )
@@ -146,20 +184,23 @@ export namespace SchemaProgrammer {
146
184
  "}",
147
185
  ].join("\n");
148
186
  const writeDynamicObject =
187
+ (components: ISwaggerComponents) =>
149
188
  (references: ISwaggerSchema.IReference[]) =>
150
189
  (additional: ISwaggerSchema): string => {
151
190
  return [
152
191
  "{",
153
192
  tab(4)(
154
- writeProperty(references)("[key: string]", true)(true)(
155
- additional,
156
- ),
193
+ writeProperty(components)(references)(
194
+ "[key: string]",
195
+ true,
196
+ )(true)(additional),
157
197
  ),
158
198
  "}",
159
199
  ].join("\n");
160
200
  };
161
201
 
162
202
  const writeProperty =
203
+ (components: ISwaggerComponents) =>
163
204
  (references: ISwaggerSchema.IReference[]) =>
164
205
  (key: string, ensureVariable: boolean = false) =>
165
206
  (required: boolean) =>
@@ -184,7 +225,8 @@ export namespace SchemaProgrammer {
184
225
  if (schema.title) tagger("@title")(schema.title);
185
226
 
186
227
  // GET TYPE WITH SPECIAL TAGS
187
- const type: string = writeSchema(references)(tagger)(schema);
228
+ const type: string =
229
+ writeSchema(components)(references)(tagger)(true)(schema);
188
230
 
189
231
  // ENDS WITH DEPRECATED TAG
190
232
  if (schema.deprecated) tagger("@deprecated")();
@@ -1,3 +1,5 @@
1
+ import { IJsDocTagInfo } from "typia/lib/metadata/IJsDocTagInfo";
2
+
1
3
  import { ISwaggerSchema } from "./ISwaggeSchema";
2
4
 
3
5
  export interface IMigrateRoute {
@@ -10,6 +12,7 @@ export interface IMigrateRoute {
10
12
  body: IMigrateRoute.IBody | null;
11
13
  response: IMigrateRoute.IBody | null;
12
14
  description?: string;
15
+ "x-nestia-jsDocTags"?: IJsDocTagInfo[];
13
16
  }
14
17
  export namespace IMigrateRoute {
15
18
  export interface IParameter {
@@ -20,5 +23,6 @@ export namespace IMigrateRoute {
20
23
  export interface IBody {
21
24
  type: "text/plain" | "application/json";
22
25
  schema: ISwaggerSchema;
26
+ "x-nestia-encrypted"?: boolean;
23
27
  }
24
28
  }
@@ -1,3 +1,5 @@
1
+ import { IJsDocTagInfo } from "typia/lib/metadata/IJsDocTagInfo";
2
+
1
3
  import { ISwaggerSchema } from "./ISwaggeSchema";
2
4
 
3
5
  export interface ISwaggerRoute {
@@ -9,6 +11,7 @@ export interface ISwaggerRoute {
9
11
  deprecated?: boolean;
10
12
  security?: Record<string, string[]>[];
11
13
  tags?: string[];
14
+ "x-nestia-jsDocTags"?: IJsDocTagInfo[];
12
15
  }
13
16
  export namespace ISwaggerRoute {
14
17
  export interface IParameter {
@@ -34,7 +37,7 @@ export namespace ISwaggerRoute {
34
37
  >;
35
38
  export interface IContent {
36
39
  "text/plain"?: {
37
- schema: ISwaggerSchema.IString;
40
+ schema: ISwaggerSchema;
38
41
  };
39
42
  "application/json"?: {
40
43
  schema: ISwaggerSchema;