@nestia/migrate 14.0.0 → 14.0.1

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 (65) hide show
  1. package/README.md +1 -1
  2. package/lib/analyzers/NestiaMigrateControllerAnalyzer.d.ts +13 -0
  3. package/lib/analyzers/NestiaMigrateControllerAnalyzer.js +32 -2
  4. package/lib/analyzers/NestiaMigrateControllerAnalyzer.js.map +1 -1
  5. package/lib/analyzers/NestiaMigrateControllerAnalyzer.mjs +14 -2
  6. package/lib/bundles/NEST_TEMPLATE.js +1 -1
  7. package/lib/bundles/NEST_TEMPLATE.js.map +1 -1
  8. package/lib/bundles/NEST_TEMPLATE.mjs +1 -1
  9. package/lib/bundles/SDK_TEMPLATE.js +1 -1
  10. package/lib/bundles/SDK_TEMPLATE.js.map +1 -1
  11. package/lib/bundles/SDK_TEMPLATE.mjs +1 -1
  12. package/lib/executable/NestiaMigrateCommander.js +5 -1
  13. package/lib/executable/NestiaMigrateCommander.js.map +1 -1
  14. package/lib/executable/NestiaMigrateCommander.mjs +1 -1
  15. package/lib/executable/NestiaMigrateInquirer.js +7 -25
  16. package/lib/executable/NestiaMigrateInquirer.js.map +1 -1
  17. package/lib/executable/NestiaMigrateInquirer.mjs +5 -7
  18. package/lib/programmers/NestiaMigrateApiFunctionProgrammer.js +7 -5
  19. package/lib/programmers/NestiaMigrateApiFunctionProgrammer.js.map +1 -1
  20. package/lib/programmers/NestiaMigrateApiFunctionProgrammer.mjs +4 -2
  21. package/lib/programmers/NestiaMigrateApiNamespaceProgrammer.js +31 -13
  22. package/lib/programmers/NestiaMigrateApiNamespaceProgrammer.js.map +1 -1
  23. package/lib/programmers/NestiaMigrateApiNamespaceProgrammer.mjs +17 -8
  24. package/lib/programmers/NestiaMigrateApiSimulationProgrammer.js +24 -22
  25. package/lib/programmers/NestiaMigrateApiSimulationProgrammer.js.map +1 -1
  26. package/lib/programmers/NestiaMigrateApiSimulationProgrammer.mjs +13 -20
  27. package/lib/programmers/NestiaMigrateE2eFileProgrammer.js +20 -5
  28. package/lib/programmers/NestiaMigrateE2eFileProgrammer.js.map +1 -1
  29. package/lib/programmers/NestiaMigrateE2eFileProgrammer.mjs +6 -2
  30. package/lib/programmers/NestiaMigrateNestMethodProgrammer.js +69 -13
  31. package/lib/programmers/NestiaMigrateNestMethodProgrammer.js.map +1 -1
  32. package/lib/programmers/NestiaMigrateNestMethodProgrammer.mjs +46 -9
  33. package/lib/programmers/NestiaMigrateSchemaProgrammer.js +25 -4
  34. package/lib/programmers/NestiaMigrateSchemaProgrammer.js.map +1 -1
  35. package/lib/programmers/NestiaMigrateSchemaProgrammer.mjs +15 -4
  36. package/lib/utils/PathTemplate.d.ts +19 -0
  37. package/lib/utils/PathTemplate.js +42 -0
  38. package/lib/utils/PathTemplate.js.map +1 -0
  39. package/lib/utils/PathTemplate.mjs +34 -0
  40. package/lib/utils/PathTemplate.mjs.map +1 -0
  41. package/lib/utils/RequestBody.d.ts +9 -0
  42. package/lib/utils/RequestBody.js +16 -0
  43. package/lib/utils/RequestBody.js.map +1 -0
  44. package/lib/utils/RequestBody.mjs +9 -0
  45. package/lib/utils/RequestBody.mjs.map +1 -0
  46. package/lib/utils/SuccessStatus.d.ts +14 -0
  47. package/lib/utils/SuccessStatus.js +28 -0
  48. package/lib/utils/SuccessStatus.js.map +1 -0
  49. package/lib/utils/SuccessStatus.mjs +14 -0
  50. package/lib/utils/SuccessStatus.mjs.map +1 -0
  51. package/package.json +2 -2
  52. package/src/analyzers/NestiaMigrateControllerAnalyzer.ts +39 -2
  53. package/src/bundles/NEST_TEMPLATE.ts +1 -1
  54. package/src/bundles/SDK_TEMPLATE.ts +1 -1
  55. package/src/executable/NestiaMigrateCommander.ts +7 -1
  56. package/src/executable/NestiaMigrateInquirer.ts +12 -26
  57. package/src/programmers/NestiaMigrateApiFunctionProgrammer.ts +10 -4
  58. package/src/programmers/NestiaMigrateApiNamespaceProgrammer.ts +41 -20
  59. package/src/programmers/NestiaMigrateApiSimulationProgrammer.ts +23 -73
  60. package/src/programmers/NestiaMigrateE2eFileProgrammer.ts +41 -8
  61. package/src/programmers/NestiaMigrateNestMethodProgrammer.ts +88 -29
  62. package/src/programmers/NestiaMigrateSchemaProgrammer.ts +28 -10
  63. package/src/utils/PathTemplate.ts +39 -0
  64. package/src/utils/RequestBody.ts +14 -0
  65. package/src/utils/SuccessStatus.ts +29 -0
@@ -1,10 +1,13 @@
1
1
  import { FilePrinter } from "../utils/FilePrinter.mjs";
2
2
  import { TypeFactory } from "../factories/TypeFactory.mjs";
3
3
  import { IdentifierFactory } from "../factories/IdentifierFactory.mjs";
4
+ import { RequestBody } from "../utils/RequestBody.mjs";
5
+ import { SuccessStatus } from "../utils/SuccessStatus.mjs";
4
6
  import { StringUtil } from "../utils/StringUtil.mjs";
5
7
  import { NestiaMigrateSchemaProgrammer } from "./NestiaMigrateSchemaProgrammer.mjs";
6
8
  import { ExpressionFactory } from "../factories/ExpressionFactory.mjs";
7
9
  import { LiteralFactory } from "../factories/LiteralFactory.mjs";
10
+ import { NestiaMigrateControllerAnalyzer } from "../analyzers/NestiaMigrateControllerAnalyzer.mjs";
8
11
  import { SyntaxKind, factory } from "@ttsc/factory";
9
12
  //#region src/programmers/NestiaMigrateNestMethodProgrammer.ts
10
13
  let NestiaMigrateNestMethodProgrammer;
@@ -41,13 +44,16 @@ let NestiaMigrateNestMethodProgrammer;
41
44
  const decorators = [];
42
45
  if (ctx.route.success) decorators.push(...writeExampleDecorators("Response")(ctx.importer)(ctx.route.success.media()));
43
46
  if (ctx.route.operation()["x-samchon-human"] === true) decorators.push(factory.createDecorator(factory.createCallExpression(external("@nestia/core", "HumanRoute"), void 0, void 0)));
44
- const localPath = ctx.route.emendedPath.slice(ctx.controller.path.length).split("/").filter((str) => !!str.length).join("/");
47
+ const localPath = NestiaMigrateControllerAnalyzer.routePath(ctx.route).slice(ctx.controller.path.length).split("/").filter((str) => !!str.length).join("/");
45
48
  const router = (instance) => factory.createDecorator(factory.createCallExpression(IdentifierFactory.access(external("@nestia/core", instance), StringUtil.capitalize(ctx.route.method)), [], localPath.length ? [factory.createStringLiteral(localPath)] : void 0));
49
+ const nest = (method) => factory.createDecorator(factory.createCallExpression(external("@nestjs/common", method), [], localPath.length ? [factory.createStringLiteral(localPath)] : void 0));
46
50
  if (ctx.route.success?.["x-nestia-encrypted"]) decorators.push(router("EncryptedRoute"));
47
- else if (ctx.route.success?.type === "text/plain") decorators.push(factory.createDecorator(factory.createCallExpression(external("@nestjs/common", StringUtil.capitalize(ctx.route.method)), [], [factory.createStringLiteral(ctx.route.path)])));
51
+ else if (ctx.route.success?.type === "text/plain") decorators.push(nest(StringUtil.capitalize(ctx.route.method)));
48
52
  else if (ctx.route.success?.type === "application/x-www-form-urlencoded") decorators.push(router("TypedQuery"));
49
- else if (ctx.route.method === "head") decorators.push(factory.createDecorator(factory.createCallExpression(external("@nestjs/common", "Head"), [], [factory.createStringLiteral(ctx.route.path)])));
53
+ else if (ctx.route.method === "head") decorators.push(nest("Head"));
50
54
  else if (ctx.route.success === null || ctx.route.success?.type === "application/json") decorators.push(router("TypedRoute"));
55
+ const status = SuccessStatus.of(ctx.route);
56
+ if (status !== null && status !== SuccessStatus.nest(ctx.route)) decorators.push(factory.createDecorator(factory.createCallExpression(external("@nestjs/common", "HttpCode"), void 0, [ExpressionFactory.number(status)])));
51
57
  for (const [key, value] of Object.entries(ctx.route.exceptions ?? {})) decorators.push(factory.createDecorator(factory.createCallExpression(external("@nestia/core", "TypedException"), [NestiaMigrateSchemaProgrammer.write({
52
58
  components: ctx.components,
53
59
  importer: ctx.importer,
@@ -95,7 +101,7 @@ let NestiaMigrateNestMethodProgrammer;
95
101
  })), void 0, void 0))] : []
96
102
  })(ctx.components)(ctx.importer)({
97
103
  schema: ctx.route.body.schema,
98
- required: !((ctx.route.body.type === "application/json" || ctx.route.body.type === "text/plain") && ctx.route.operation().requestBody?.required === false),
104
+ required: RequestBody.optional(ctx.route) === false,
99
105
  example: ctx.route.body.media().example,
100
106
  examples: ctx.route.body.media().examples
101
107
  })] : []
@@ -116,12 +122,43 @@ let NestiaMigrateNestMethodProgrammer;
116
122
  type: "instance",
117
123
  library: "@nestia/core",
118
124
  name: "SwaggerExample"
119
- })), kind), [], [LiteralFactory.write(media.example)]))] : [], ...Object.entries(media.examples ?? {}).map(([key, value]) => factory.createDecorator(factory.createCallExpression(IdentifierFactory.access(factory.createIdentifier(importer.external({
120
- type: "instance",
121
- library: "@nestia/core",
122
- name: "SwaggerExample"
123
- })), kind), [], [factory.createStringLiteral(key), LiteralFactory.write(value)])))];
125
+ })), kind), [], [LiteralFactory.write(media.example)]))] : [], ...Object.entries(media.examples ?? {}).flatMap(([key, example]) => {
126
+ const value = exampleValue(example);
127
+ if (value === null) return [];
128
+ return factory.createDecorator(factory.createCallExpression(IdentifierFactory.access(factory.createIdentifier(importer.external({
129
+ type: "instance",
130
+ library: "@nestia/core",
131
+ name: "SwaggerExample"
132
+ })), kind), [], [factory.createStringLiteral(key), LiteralFactory.write(value.value)]));
133
+ })];
124
134
  })(NestiaMigrateNestMethodProgrammer || (NestiaMigrateNestMethodProgrammer = {}));
135
+ /**
136
+ * The value a named example stands for, or `null` when it names none.
137
+ *
138
+ * OpenAPI names examples with Example Objects, whose `value` (or, since 3.2,
139
+ * `dataValue`) holds the value, and a `$ref` to one arrives resolved. Documents
140
+ * from earlier nestia versions held the values themselves, so an object is read
141
+ * as an Example Object only when it is one: it has one of the value fields, and
142
+ * every other key is an Example Object field or an extension. A raw value of
143
+ * exactly that shape is ambiguous and is read as an Example Object, as a
144
+ * conforming document means it. An Example Object that only points at its value
145
+ * (`externalValue`) or only serializes it (`serializedValue`) gives
146
+ * `SwaggerExample` nothing to hold.
147
+ */
148
+ const exampleValue = (example) => {
149
+ if (isExampleObject(example) === false) return { value: example };
150
+ const record = example;
151
+ if (Object.prototype.hasOwnProperty.call(record, "value")) return { value: record.value };
152
+ if (Object.prototype.hasOwnProperty.call(record, "dataValue")) return { value: record.dataValue };
153
+ return null;
154
+ };
155
+ const isExampleObject = (example) => typeof example === "object" && example !== null && Array.isArray(example) === false && VALUE_KEYS.some((key) => Object.prototype.hasOwnProperty.call(example, key)) && Object.keys(example).every((key) => VALUE_KEYS.includes(key) || key === "summary" || key === "description" || key.startsWith("x-"));
156
+ const VALUE_KEYS = [
157
+ "value",
158
+ "dataValue",
159
+ "serializedValue",
160
+ "externalValue"
161
+ ];
125
162
  //#endregion
126
163
  export { NestiaMigrateNestMethodProgrammer };
127
164
 
@@ -108,11 +108,25 @@ var NestiaMigrateSchemaProgrammer;
108
108
  const writeInteger = (props) => writeNumeric({
109
109
  factory: () => [
110
110
  TypeFactory_1.TypeFactory.keyword("number"),
111
- props.importer.tag("Type", "int32"),
111
+ props.importer.tag("Type", integerType(props.schema)),
112
112
  ],
113
113
  importer: props.importer,
114
114
  schema: props.schema,
115
115
  });
116
+ /**
117
+ * The typia integer type admitting what the schema admits: its own `format`
118
+ * when it names one typia has, else `int64`, as an integer schema without a
119
+ * format admits any integer.
120
+ */
121
+ const integerType = (schema) => {
122
+ const format = schema.format;
123
+ return format === "int32" ||
124
+ format === "uint32" ||
125
+ format === "int64" ||
126
+ format === "uint64"
127
+ ? format
128
+ : "int64";
129
+ };
116
130
  const writeNumber = (props) => writeNumeric({
117
131
  factory: () => [TypeFactory_1.TypeFactory.keyword("number")],
118
132
  importer: props.importer,
@@ -122,10 +136,16 @@ var NestiaMigrateSchemaProgrammer;
122
136
  const intersection = props.factory();
123
137
  if (props.schema.default !== undefined)
124
138
  intersection.push(props.importer.tag("Default", props.schema.default));
139
+ // the emended schema holds each bound as a number, as OpenAPI 3.1 does;
140
+ // an OpenAPI 3.0 boolean `exclusiveMinimum` is converted into that form
125
141
  if (props.schema.minimum !== undefined)
126
- intersection.push(props.importer.tag(props.schema.exclusiveMinimum ? "ExclusiveMinimum" : "Minimum", props.schema.minimum));
142
+ intersection.push(props.importer.tag("Minimum", props.schema.minimum));
143
+ if (typeof props.schema.exclusiveMinimum === "number")
144
+ intersection.push(props.importer.tag("ExclusiveMinimum", props.schema.exclusiveMinimum));
127
145
  if (props.schema.maximum !== undefined)
128
- intersection.push(props.importer.tag(props.schema.exclusiveMaximum ? "ExclusiveMaximum" : "Maximum", props.schema.maximum));
146
+ intersection.push(props.importer.tag("Maximum", props.schema.maximum));
147
+ if (typeof props.schema.exclusiveMaximum === "number")
148
+ intersection.push(props.importer.tag("ExclusiveMaximum", props.schema.exclusiveMaximum));
129
149
  if (props.schema.multipleOf !== undefined)
130
150
  intersection.push(props.importer.tag("MultipleOf", props.schema.multipleOf));
131
151
  return intersection.length === 1
@@ -220,7 +240,8 @@ var NestiaMigrateSchemaProgrammer;
220
240
  schema: props.schema.additionalProperties,
221
241
  }),
222
242
  ]);
223
- return !!((_a = props.schema.properties) === null || _a === void 0 ? void 0 : _a.length) &&
243
+ // `properties` is a record, which has no length
244
+ return Object.keys((_a = props.schema.properties) !== null && _a !== void 0 ? _a : {}).length !== 0 &&
224
245
  typeof props.schema.additionalProperties === "object"
225
246
  ? factory_1.factory.createIntersectionTypeNode([regular(), dynamic()])
226
247
  : typeof props.schema.additionalProperties === "object"
@@ -1 +1 @@
1
- {"version":3,"file":"NestiaMigrateSchemaProgrammer.js","sourceRoot":"","sources":["../../src/programmers/NestiaMigrateSchemaProgrammer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NestiaMigrateSchemaProgrammer.js","sourceRoot":"","sources":["../../src/programmers/NestiaMigrateSchemaProgrammer.ts"],"names":[],"mappings":"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"}
@@ -66,10 +66,19 @@ let NestiaMigrateSchemaProgrammer;
66
66
  };
67
67
  const writeBoolean = () => TypeFactory.keyword("boolean");
68
68
  const writeInteger = (props) => writeNumeric({
69
- factory: () => [TypeFactory.keyword("number"), props.importer.tag("Type", "int32")],
69
+ factory: () => [TypeFactory.keyword("number"), props.importer.tag("Type", integerType(props.schema))],
70
70
  importer: props.importer,
71
71
  schema: props.schema
72
72
  });
73
+ /**
74
+ * The typia integer type admitting what the schema admits: its own `format`
75
+ * when it names one typia has, else `int64`, as an integer schema without a
76
+ * format admits any integer.
77
+ */
78
+ const integerType = (schema) => {
79
+ const format = schema.format;
80
+ return format === "int32" || format === "uint32" || format === "int64" || format === "uint64" ? format : "int64";
81
+ };
73
82
  const writeNumber = (props) => writeNumeric({
74
83
  factory: () => [TypeFactory.keyword("number")],
75
84
  importer: props.importer,
@@ -78,8 +87,10 @@ let NestiaMigrateSchemaProgrammer;
78
87
  const writeNumeric = (props) => {
79
88
  const intersection = props.factory();
80
89
  if (props.schema.default !== void 0) intersection.push(props.importer.tag("Default", props.schema.default));
81
- if (props.schema.minimum !== void 0) intersection.push(props.importer.tag(props.schema.exclusiveMinimum ? "ExclusiveMinimum" : "Minimum", props.schema.minimum));
82
- if (props.schema.maximum !== void 0) intersection.push(props.importer.tag(props.schema.exclusiveMaximum ? "ExclusiveMaximum" : "Maximum", props.schema.maximum));
90
+ if (props.schema.minimum !== void 0) intersection.push(props.importer.tag("Minimum", props.schema.minimum));
91
+ if (typeof props.schema.exclusiveMinimum === "number") intersection.push(props.importer.tag("ExclusiveMinimum", props.schema.exclusiveMinimum));
92
+ if (props.schema.maximum !== void 0) intersection.push(props.importer.tag("Maximum", props.schema.maximum));
93
+ if (typeof props.schema.exclusiveMaximum === "number") intersection.push(props.importer.tag("ExclusiveMaximum", props.schema.exclusiveMaximum));
83
94
  if (props.schema.multipleOf !== void 0) intersection.push(props.importer.tag("MultipleOf", props.schema.multipleOf));
84
95
  return intersection.length === 1 ? intersection[0] : factory.createIntersectionTypeNode(intersection);
85
96
  };
@@ -127,7 +138,7 @@ let NestiaMigrateSchemaProgrammer;
127
138
  importer: props.importer,
128
139
  schema: props.schema.additionalProperties
129
140
  })]);
130
- return !!props.schema.properties?.length && typeof props.schema.additionalProperties === "object" ? factory.createIntersectionTypeNode([regular(), dynamic()]) : typeof props.schema.additionalProperties === "object" ? dynamic() : regular();
141
+ return Object.keys(props.schema.properties ?? {}).length !== 0 && typeof props.schema.additionalProperties === "object" ? factory.createIntersectionTypeNode([regular(), dynamic()]) : typeof props.schema.additionalProperties === "object" ? dynamic() : regular();
131
142
  };
132
143
  const writeRegularProperty = (props) => {
133
144
  const valueTypeNode = write({
@@ -0,0 +1,19 @@
1
+ import { IHttpMigrateRoute } from "@typia/interface";
2
+ export declare namespace PathTemplate {
3
+ type ISegment = {
4
+ type: "literal";
5
+ value: string;
6
+ } | {
7
+ type: "param";
8
+ parameter: IHttpMigrateRoute.IParameter;
9
+ };
10
+ /**
11
+ * The route's path as literal text and path parameters, in order, read from
12
+ * the document's own template (`/files/{id}.json`), whose braces delimit each
13
+ * parameter name. The emended path (`/files/:id.json`) cannot be split back:
14
+ * its `:id.json` could name `id` or `id.json`, and a name such as `item-id`
15
+ * would read as `item` followed by `-id`. It always starts with `/`, as the
16
+ * emended path does.
17
+ */
18
+ const segments: (route: IHttpMigrateRoute) => ISegment[];
19
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PathTemplate = void 0;
4
+ var PathTemplate;
5
+ (function (PathTemplate) {
6
+ /**
7
+ * The route's path as literal text and path parameters, in order, read from
8
+ * the document's own template (`/files/{id}.json`), whose braces delimit each
9
+ * parameter name. The emended path (`/files/:id.json`) cannot be split back:
10
+ * its `:id.json` could name `id` or `id.json`, and a name such as `item-id`
11
+ * would read as `item` followed by `-id`. It always starts with `/`, as the
12
+ * emended path does.
13
+ */
14
+ PathTemplate.segments = (route) => {
15
+ const path = route.path.startsWith("/")
16
+ ? route.path
17
+ : `/${route.path}`;
18
+ const output = [];
19
+ const literal = (value) => {
20
+ if (value.length === 0)
21
+ return;
22
+ const last = output[output.length - 1];
23
+ if ((last === null || last === void 0 ? void 0 : last.type) === "literal")
24
+ last.value += value;
25
+ else
26
+ output.push({ type: "literal", value });
27
+ };
28
+ let cursor = 0;
29
+ for (const match of path.matchAll(/\{([^{}]+)\}/g)) {
30
+ literal(path.slice(cursor, match.index));
31
+ cursor = match.index + match[0].length;
32
+ const parameter = route.parameters.find((p) => p.name === match[1]);
33
+ if (parameter === undefined)
34
+ literal(match[0]);
35
+ else
36
+ output.push({ type: "param", parameter });
37
+ }
38
+ literal(path.slice(cursor));
39
+ return output;
40
+ };
41
+ })(PathTemplate || (exports.PathTemplate = PathTemplate = {}));
42
+ //# sourceMappingURL=PathTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PathTemplate.js","sourceRoot":"","sources":["../../src/utils/PathTemplate.ts"],"names":[],"mappings":";;;AAEA,IAAiB,YAAY,CAoC5B;AApCD,WAAiB,YAAY;IAK3B;;;;;;;OAOG;IACU,qBAAQ,GAAG,CAAC,KAAwB,EAAc,EAAE;QAC/D,MAAM,IAAI,GAAW,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAC7C,CAAC,CAAC,KAAK,CAAC,IAAI;YACZ,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACrB,MAAM,MAAM,GAAe,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,CAAC,KAAa,EAAQ,EAAE;YACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAC/B,MAAM,IAAI,GAAyB,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC7D,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,MAAK,SAAS;gBAAE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;;gBAC7C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAC;QACF,IAAI,MAAM,GAAW,CAAC,CAAC;QACvB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YACzC,MAAM,GAAG,KAAK,CAAC,KAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACxC,MAAM,SAAS,GACb,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD,IAAI,SAAS,KAAK,SAAS;gBAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;;gBAC1C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5B,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC,EApCgB,YAAY,aAAZ,YAAY,GAAZ,YAAY,QAoC5B"}
@@ -0,0 +1,34 @@
1
+ //#region src/utils/PathTemplate.ts
2
+ let PathTemplate;
3
+ (function(_PathTemplate) {
4
+ _PathTemplate.segments = (route) => {
5
+ const path = route.path.startsWith("/") ? route.path : `/${route.path}`;
6
+ const output = [];
7
+ const literal = (value) => {
8
+ if (value.length === 0) return;
9
+ const last = output[output.length - 1];
10
+ if (last?.type === "literal") last.value += value;
11
+ else output.push({
12
+ type: "literal",
13
+ value
14
+ });
15
+ };
16
+ let cursor = 0;
17
+ for (const match of path.matchAll(/\{([^{}]+)\}/g)) {
18
+ literal(path.slice(cursor, match.index));
19
+ cursor = match.index + match[0].length;
20
+ const parameter = route.parameters.find((p) => p.name === match[1]);
21
+ if (parameter === void 0) literal(match[0]);
22
+ else output.push({
23
+ type: "param",
24
+ parameter
25
+ });
26
+ }
27
+ literal(path.slice(cursor));
28
+ return output;
29
+ };
30
+ })(PathTemplate || (PathTemplate = {}));
31
+ //#endregion
32
+ export { PathTemplate };
33
+
34
+ //# sourceMappingURL=PathTemplate.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PathTemplate.mjs","names":[],"sources":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import { IHttpMigrateRoute } from "@typia/interface";
2
+ export declare namespace RequestBody {
3
+ /**
4
+ * Whether the route's body may be omitted: a JSON or text body the document
5
+ * does not require. The SDK's positional and keyword functions and the Nest
6
+ * controller all read this one rule.
7
+ */
8
+ const optional: (route: IHttpMigrateRoute) => boolean;
9
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RequestBody = void 0;
4
+ var RequestBody;
5
+ (function (RequestBody) {
6
+ /**
7
+ * Whether the route's body may be omitted: a JSON or text body the document
8
+ * does not require. The SDK's positional and keyword functions and the Nest
9
+ * controller all read this one rule.
10
+ */
11
+ RequestBody.optional = (route) => { var _a; return route.body !== null &&
12
+ (route.body.type === "application/json" ||
13
+ route.body.type === "text/plain") &&
14
+ ((_a = route.operation().requestBody) === null || _a === void 0 ? void 0 : _a.required) === false; };
15
+ })(RequestBody || (exports.RequestBody = RequestBody = {}));
16
+ //# sourceMappingURL=RequestBody.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestBody.js","sourceRoot":"","sources":["../../src/utils/RequestBody.ts"],"names":[],"mappings":";;;AAEA,IAAiB,WAAW,CAW3B;AAXD,WAAiB,WAAW;IAC1B;;;;OAIG;IACU,oBAAQ,GAAG,CAAC,KAAwB,EAAW,EAAE,kBAC5D,KAAK,CAAC,IAAI,KAAK,IAAI;QACnB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,kBAAkB;YACrC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC;QACnC,CAAA,MAAA,KAAK,CAAC,SAAS,EAAE,CAAC,WAAW,0CAAE,QAAQ,MAAK,KAAK,GAAA,CAAC;AACtD,CAAC,EAXgB,WAAW,aAAX,WAAW,GAAX,WAAW,QAW3B"}
@@ -0,0 +1,9 @@
1
+ //#region src/utils/RequestBody.ts
2
+ let RequestBody;
3
+ (function(_RequestBody) {
4
+ _RequestBody.optional = (route) => route.body !== null && (route.body.type === "application/json" || route.body.type === "text/plain") && route.operation().requestBody?.required === false;
5
+ })(RequestBody || (RequestBody = {}));
6
+ //#endregion
7
+ export { RequestBody };
8
+
9
+ //# sourceMappingURL=RequestBody.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestBody.mjs","names":[],"sources":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { IHttpMigrateRoute } from "@typia/interface";
2
+ export declare namespace SuccessStatus {
3
+ /**
4
+ * The route's success status code, or null when the document declares only a
5
+ * range (`2XX`) or a `default` response.
6
+ *
7
+ * The success response is the one typia's route composer selects: 200, then
8
+ * 201, then the lowest other 2xx. A bodiless one, such as a 204 No Content,
9
+ * leaves `route.success` null, so its status is read from the responses.
10
+ */
11
+ const of: (route: IHttpMigrateRoute) => number | null;
12
+ /** The status NestJS answers without `@HttpCode()`. */
13
+ const nest: (route: IHttpMigrateRoute) => number;
14
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SuccessStatus = void 0;
4
+ var SuccessStatus;
5
+ (function (SuccessStatus) {
6
+ /**
7
+ * The route's success status code, or null when the document declares only a
8
+ * range (`2XX`) or a `default` response.
9
+ *
10
+ * The success response is the one typia's route composer selects: 200, then
11
+ * 201, then the lowest other 2xx. A bodiless one, such as a 204 No Content,
12
+ * leaves `route.success` null, so its status is read from the responses.
13
+ */
14
+ SuccessStatus.of = (route) => {
15
+ var _a;
16
+ var _b, _c;
17
+ const status = (_b = (_a = route.success) === null || _a === void 0 ? void 0 : _a.status) !== null && _b !== void 0 ? _b : Object.keys((_c = route.operation().responses) !== null && _c !== void 0 ? _c : {})
18
+ .filter((key) => /^2\d\d$/.test(key))
19
+ .sort((x, y) => priority(x) - priority(y))[0];
20
+ return status !== undefined && /^\d{3}$/.test(status)
21
+ ? Number(status)
22
+ : null;
23
+ };
24
+ /** The status NestJS answers without `@HttpCode()`. */
25
+ SuccessStatus.nest = (route) => route.method === "post" ? 201 : 200;
26
+ const priority = (status) => status === "200" ? 0 : status === "201" ? 1 : Number(status);
27
+ })(SuccessStatus || (exports.SuccessStatus = SuccessStatus = {}));
28
+ //# sourceMappingURL=SuccessStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SuccessStatus.js","sourceRoot":"","sources":["../../src/utils/SuccessStatus.ts"],"names":[],"mappings":";;;AAEA,IAAiB,aAAa,CA0B7B;AA1BD,WAAiB,aAAa;IAC5B;;;;;;;OAOG;IACU,gBAAE,GAAG,CAAC,KAAwB,EAAiB,EAAE;;;QAC5D,MAAM,MAAM,SACV,MAAA,KAAK,CAAC,OAAO,0CAAE,MAAM,mCACrB,MAAM,CAAC,IAAI,OAAC,KAAK,CAAC,SAAS,EAAE,CAAC,SAAS,mCAAI,EAAE,CAAC;aAC3C,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACpC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,OAAO,MAAM,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;YACnD,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YAChB,CAAC,CAAC,IAAI,CAAC;IACX,CAAC,CAAC;IAEF,uDAAuD;IAC1C,kBAAI,GAAG,CAAC,KAAwB,EAAU,EAAE,CACvD,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAEtC,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAU,EAAE,CAC1C,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACjE,CAAC,EA1BgB,aAAa,aAAb,aAAa,GAAb,aAAa,QA0B7B"}
@@ -0,0 +1,14 @@
1
+ //#region src/utils/SuccessStatus.ts
2
+ let SuccessStatus;
3
+ (function(_SuccessStatus) {
4
+ _SuccessStatus.of = (route) => {
5
+ const status = route.success?.status ?? Object.keys(route.operation().responses ?? {}).filter((key) => /^2\d\d$/.test(key)).sort((x, y) => priority(x) - priority(y))[0];
6
+ return status !== void 0 && /^\d{3}$/.test(status) ? Number(status) : null;
7
+ };
8
+ _SuccessStatus.nest = (route) => route.method === "post" ? 201 : 200;
9
+ const priority = (status) => status === "200" ? 0 : status === "201" ? 1 : Number(status);
10
+ })(SuccessStatus || (SuccessStatus = {}));
11
+ //#endregion
12
+ export { SuccessStatus };
13
+
14
+ //# sourceMappingURL=SuccessStatus.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SuccessStatus.mjs","names":[],"sources":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestia/migrate",
3
- "version": "14.0.0",
3
+ "version": "14.0.1",
4
4
  "description": "Migration program from swagger to NestJS",
5
5
  "main": "lib/index.js",
6
6
  "bin": {
@@ -52,7 +52,7 @@
52
52
  "prettier": "^3.8.1",
53
53
  "prettier-plugin-jsdoc": "^1.8.0",
54
54
  "tstl": "^3.0.0",
55
- "typia": "^15.0.0"
55
+ "typia": "15.0.0"
56
56
  },
57
57
  "files": [
58
58
  "lib",
@@ -2,6 +2,7 @@ import { IHttpMigrateRoute } from "@typia/interface";
2
2
 
3
3
  import { INestiaMigrateController } from "../structures/INestiaMigrateController";
4
4
  import { MapUtil } from "../utils/MapUtil";
5
+ import { PathTemplate } from "../utils/PathTemplate";
5
6
  import { StringUtil } from "../utils/StringUtil";
6
7
 
7
8
  export namespace NestiaMigrateControllerAnalyzer {
@@ -27,9 +28,11 @@ export namespace NestiaMigrateControllerAnalyzer {
27
28
  const controllers: INestiaMigrateController[] = [...collection.values()];
28
29
  for (const col of controllers) {
29
30
  const splitPath = (r: IHttpMigrateRoute): string[] =>
30
- r.emendedPath.split("/");
31
+ routePath(r).split("/");
31
32
  const splitLocation = (r: IHttpMigrateRoute): string[] =>
32
- splitPath(r).filter((s) => s.length !== 0 && s[0] !== ":");
33
+ splitPath(r)
34
+ .filter((s) => s.length !== 0 && s[0] !== ":")
35
+ .map(directoryName);
33
36
 
34
37
  const minPath: string[] = splitPath(col.routes[0]!);
35
38
  const minLocation: string[] = splitLocation(col.routes[0]!);
@@ -42,8 +45,42 @@ export namespace NestiaMigrateControllerAnalyzer {
42
45
  }
43
46
  return controllers;
44
47
  };
48
+
49
+ /**
50
+ * The route's path as NestJS reads it: each path parameter under the key its
51
+ * handler reads with `@TypedParam()`. The document's name, such as `item-id`,
52
+ * is no path-to-regexp parameter name; it would read as `item` followed by
53
+ * the literal `-id`, and the handler's lookup would miss. Each parameter is
54
+ * found where the document's template writes it, beside literal text in its
55
+ * segment too (`/files/{id}.json`).
56
+ *
57
+ * A literal character the router reserves is escaped, so an AIP custom
58
+ * method's `/items:batchGet` stays a literal rather than a parameter
59
+ * `batchGet`, and `(` or `*` no syntax error.
60
+ */
61
+ export const routePath = (route: IHttpMigrateRoute): string =>
62
+ PathTemplate.segments(route)
63
+ .map((segment) =>
64
+ segment.type === "literal"
65
+ ? segment.value.replace(ROUTER_RESERVED, "\\$&")
66
+ : `:${segment.parameter.key}`,
67
+ )
68
+ .join("");
45
69
  }
46
70
 
71
+ /**
72
+ * The characters path-to-regexp 8, Express 5's router, gives a meaning in a
73
+ * route: parameters, wildcards, optional groups, and its own escape.
74
+ */
75
+ const ROUTER_RESERVED = /[\\:*?+!(){}[\]]/g;
76
+
77
+ /**
78
+ * A route segment as a directory name: unescaped, and each character a file
79
+ * name cannot hold on Windows (`:` of an AIP custom method, `*`, `?`) as `_`.
80
+ */
81
+ const directoryName = (segment: string): string =>
82
+ segment.replace(/\\(.)/g, "$1").replace(/[<>:"|?*\\]/g, "_");
83
+
47
84
  const getSplitIndex = (x: string[], y: string[]) => {
48
85
  const n: number = Math.min(x.length, y.length);
49
86
  for (let i: number = 0; i < n; ++i) if (x[i] !== y[i]) return i;
@@ -49,6 +49,6 @@ export const NEST_TEMPLATE: Record<string, string> = {
49
49
  "packages/backend/test/webpack.ts": "import { DynamicExecutor } from \"@nestia/e2e\";\nimport cp from \"node:child_process\";\nimport { sleep_for } from \"tstl\";\n\nimport { MyConfiguration } from \"../src/MyConfiguration\";\nimport { MyGlobal } from \"../src/MyGlobal\";\nimport { TestAutomation } from \"./helpers/TestAutomation\";\nimport { TestAutomationStdio } from \"./helpers/TestAutomationStdio\";\n\nconst wait = async (): Promise<void> => {\n while (true)\n try {\n await fetch(`http://localhost:${MyConfiguration.API_PORT()}/dsafdsafsd`);\n return;\n } catch (exp) {\n await sleep_for(100);\n }\n};\n\nconst main = async (): Promise<void> => {\n MyGlobal.testing = true;\n\n const report: DynamicExecutor.IReport = await TestAutomation.execute({\n open: async () => {\n const backend: cp.ChildProcess = cp.fork(\n `${MyConfiguration.ROOT}/dist/server.js`,\n {\n cwd: `${MyConfiguration.ROOT}/dist`,\n },\n );\n await wait();\n return backend;\n },\n close: async (backend) => {\n backend.kill();\n },\n options: await TestAutomationStdio.getOptions(),\n onComplete: TestAutomationStdio.onComplete,\n });\n TestAutomationStdio.report(report);\n};\nmain().catch((exp: unknown) => {\n console.log(exp);\n process.exit(-1);\n});\n",
50
50
  "packages/backend/tsconfig.json": "{\n \"extends\": \"../../config/tsconfig.json\",\n \"compilerOptions\": {\n \"outDir\": \"lib\",\n \"rootDir\": \"src\",\n \"experimentalDecorators\": true,\n \"emitDecoratorMetadata\": true\n },\n \"include\": [\"src\"]\n}\n",
51
51
  "packages/backend/webpack.config.js": "const path = require(\"path\");\n\nconst CopyWebpackPlugin = require(\"copy-webpack-plugin\");\nconst WriteFilePlugin = require(\"write-file-webpack-plugin\");\nconst { IgnorePlugin } = require(\"webpack\");\n\nconst lazyImports = [\n \"@modelcontextprotocol/sdk\",\n \"@fastify/static\",\n \"@fastify/view\",\n \"@nestjs/microservices\",\n \"@nestjs/websockets\",\n \"class-transformer\",\n \"class-validator\",\n];\n\n// @reference https://tech-blog.s-yoshiki.com/entry/297\nmodule.exports = {\n // CUSTOMIZE HERE\n entry: {\n server: \"./lib/executable/server.js\",\n },\n output: {\n path: path.join(__dirname, \"dist\"),\n filename: \"[name].js\",\n },\n optimization: {\n minimize: true,\n },\n\n // JUST KEEP THEM\n mode: \"production\",\n target: \"node\",\n plugins: [\n new CopyWebpackPlugin({\n patterns: [\n {\n from: \".env\",\n to: \"[name][ext]\",\n },\n ],\n }),\n new WriteFilePlugin(),\n new IgnorePlugin({\n checkResource: (resource) => {\n if (lazyImports.some((modulo) => resource.startsWith(modulo))) {\n try {\n require.resolve(resource);\n } catch (err) {\n return true;\n }\n }\n return false;\n },\n }),\n ],\n};\n",
52
- "pnpm-workspace.yaml": "packages:\n - \"config\"\n - \"packages/*\"\ncatalogs:\n samchon:\n \"@nestia/benchmark\": ^14.0.0\n \"@nestia/core\": ^14.0.0\n \"@nestia/e2e\": ^14.0.0\n \"@nestia/fetcher\": ^14.0.0\n \"@nestia/sdk\": ^14.0.0\n nestia: ^14.0.0\n tgrid: ^1.2.1\n tstl: ^3.0.0\n typia: ^15.0.0\n rolldown:\n rolldown: ^1.1.5\n utils:\n rimraf: ^6.1.3\n uuid: ^13.0.0\n typescript:\n \"@ttsc/lint\": ^0.18.2\n \"@ttsc/paths\": ^0.18.2\n \"@ttsc/unplugin\": ^0.28.1\n ttsc: ^0.28.1\n typescript: ^7.0.2\n",
52
+ "pnpm-workspace.yaml": "packages:\n - \"config\"\n - \"packages/*\"\ncatalogs:\n samchon:\n \"@nestia/benchmark\": ^14.0.1\n \"@nestia/core\": ^14.0.1\n \"@nestia/e2e\": ^14.0.1\n \"@nestia/fetcher\": ^14.0.1\n \"@nestia/sdk\": ^14.0.1\n nestia: ^14.0.1\n tgrid: ^1.2.1\n tstl: ^3.0.0\n typia: 15.0.0\n rolldown:\n rolldown: ^1.1.5\n utils:\n rimraf: ^6.1.3\n uuid: ^13.0.0\n typescript:\n \"@ttsc/lint\": ^0.18.2\n \"@ttsc/paths\": ^0.18.2\n \"@ttsc/unplugin\": ^0.28.1\n ttsc: ^0.28.1\n typescript: ^7.0.2\n",
53
53
  "typos.toml": "[default]\nlocale = 'en-us'\nextend-ignore-re = [\n \"(?Rm)^.*(<!--|#|//)\\\\s*spellchecker:disable-line(-->|\\n)?$\",\n \"(?s)(<!--|#|//)\\\\s*spellchecker:off\\\\s*(-->|\\n).*?(<!--|#|//)\\\\s*spellchecker:on\",\n]\n\n[default.extend-words]\nJeongho = \"Jeongho\"\nNam = \"Nam\"\ntypia = \"typia\"\n\n[files]\nextend-exclude = [\"*.json\"]"
54
54
  }
@@ -5,7 +5,7 @@ export const SDK_TEMPLATE: Record<string, string> = {
5
5
  "LICENSE": "MIT License\n\nCopyright (c) 2024 Jeongho Nam\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n",
6
6
  "README.md": "# Software Development Kit\nThis is a SDK library generated by [`@nestia/migrate`](https://nestia.io/docs/migrate) or [`@nestia/editor`](https://nestia.io/docs/editor).\n\nWith this SDK library, you can easily and safely interact with backend server.\n\nJust import and call some API functions like gif image below:\n\n![nestia-sdk-demo](https://user-images.githubusercontent.com/13158709/215004990-368c589d-7101-404e-b81b-fbc936382f05.gif)\n\n> Left is server code, and right is client code utilizing the SDK\n\n\n\n\n## How to Test\n```bash\npnpm install\npnpm run start # run only \"test/start.ts\" file\npnpm run test # everything under the \"test/features\" directory\npnpm run test:simulate # \"test/features\" with mockup simulation mode\n```\n\nIf you run `pnpm run start` command, only [test/start.ts](test/start.ts) file would be executed.\n\nOtherwise you run `pnpm run test` command instead, run everything in the [test/features](test/features) directory.\n\nFor reference, the [test/features](test/features) directory and E2E test functions (for each API endpoints) would be automatically composed only when you've configured the \"E2E test function generation mode\" of the `@nestia/migrate` (or `@nestia/editor`).\n\n```bash\npnpm dlx @nestia/migrate\n? Migration mode (Use arrow keys):\n NestJS\n > SDK\n? Swagger file location: assets/input/clickhouse.json\n? Output directory path: assets/output/clickhouse-sdk-manual\n? Mokup Simulator: true\n? E2E Test Functions: true\n```\n\n\n\n\n## Deploy\n```bash\npnpm install\npnpm run deploy\n```\n\nJust run `pnpm run deploy` command, then your SDK library would be published.\n\nBy the way, the initial package name of this template repository is `@ORGANIZATION/PROJECT-api`. I think it would better to change the word to your own organization and project name. If you're utilizing `VsCode`, you can do it through `Edit > Replace in Files` (*Ctrl + Shift + H*) feature.\n\n-----------\n\n> ## What [`Nestia`](https://nestia.io) is:\n> ![Nestia Logo](https://nestia.io/logo.png)\n> \n> [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/samchon/nestia/blob/master/LICENSE)\n> [![npm version](https://img.shields.io/npm/v/@nestia/core.svg)](https://www.npmjs.com/package/@nestia/core)\n> [![Downloads](https://img.shields.io/npm/dm/@nestia/core.svg)](https://www.npmjs.com/package/@nestia/core)\n> [![Build Status](https://github.com/samchon/nestia/workflows/build/badge.svg)](https://github.com/samchon/nestia/actions?query=workflow%3Abuild)\n> [![Guide Documents](https://img.shields.io/badge/guide-documents-forestgreen)](https://nestia.io/docs/)\n> \n> Nestia is a set of helper libraries for NestJS, supporting below features:\n> \n> - `@nestia/core`: Super-fast decorators\n> - `@nestia/sdk`:\n> - Swagger generator evolved than ever\n> - SDK library generator for clients\n> - Mockup Simulator for client applications\n> - Automatic E2E test functions generator\n> - `@nestia/migrate`: Migration from Swagger to NestJS\n> - `@nestia/editor`: Online TypeScript Swagger Editor\n> - `nestia`: Just CLI (command line interface) tool\n> \n>> **Note**\n>> \n>> - **Only one line** required, with pure TypeScript type\n>> - Enhance performance **30x** up\n>> - Runtime validator is **20,000x faster** than `class-validator`\n>> - JSON serialization is **200x faster** than `class-transformer`\n>> - Software Development Kit\n>> - SDK is a collection of `fetch` functions with type definitions like [tRPC](https://> trpc.io/)\n>> - Mockup simulator means embedded backend simulator in SDK\n>> - similar with [msw](https://mswjs.io/), but fully automated\n",
7
7
  "hello.js": "function print(command, description) {\n return console.log(`\\x1b[1m${command}\\x1b[2m: ${description}\\x1b[0m`);\n}\n\nconsole.log(\"-----------------------------------------\");\nconsole.log(\"\\x1b[7mGenerated by \\x1b[2m@nestia/editor\\x1b[0m\");\nconsole.log(\"\");\nconsole.log(\" - \\x1b[36mhttps://nestia.io/docs/editor\\x1b[0m\");\nconsole.log(\" - \\x1b[36mhttps://github.com/samchon/nestia\\x1b[0m\");\nconsole.log(\"-----------------------------------------\");\n\nprint(\"pnpm run start\", \"Run only test/start.ts\");\nprint(\"pnpm run test\", \"Run every test/features/**/*.ts files\");\nprint(\"pnpm run test:simulate\", \"Test with mockup simulator\");\n",
8
- "package.json": "{\n \"name\": \"@ORGANIZATION/PROJECT-api\",\n \"version\": \"0.1.0\",\n \"description\": \"SDK library generated by Nestia\",\n \"main\": \"src/index.ts\",\n \"exports\": {\n \".\": \"./src/index.ts\",\n \"./lib/*\": \"./src/*.ts\",\n \"./package.json\": \"./package.json\"\n },\n \"publishConfig\": {\n \"main\": \"lib/index.mjs\",\n \"module\": \"lib/index.mjs\",\n \"types\": \"lib/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/index.d.ts\",\n \"import\": \"./lib/index.mjs\",\n \"default\": \"./lib/index.js\"\n },\n \"./lib/*\": {\n \"types\": \"./lib/*.d.ts\",\n \"import\": \"./lib/*.mjs\",\n \"default\": \"./lib/*.js\"\n },\n \"./package.json\": \"./package.json\"\n }\n },\n \"scripts\": {\n \"build\": \"rimraf lib && ttsc && rolldown -c\",\n \"build:test\": \"rimraf bin && ttsc --project test/tsconfig.json\",\n \"deploy\": \"pnpm run build && pnpm publish\",\n \"dev\": \"pnpm run build:test --watch\",\n \"hello\": \"node hello\",\n \"start\": \"ttsx test/start.ts\",\n \"swagger\": \"ttsx test/swagger.ts\",\n \"test\": \"ttsx test/index.ts\",\n \"test:simulate\": \"ttsx test/index.ts --simulate true\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/samchon/nestia\"\n },\n \"author\": \"Jeongho Nam\",\n \"license\": \"MIT\",\n \"bugs\": {\n \"url\": \"https://github.com/samchon/nestia/issues\"\n },\n \"homepage\": \"https://nestia.io\",\n \"files\": [\n \"lib\",\n \"swagger.json\",\n \"package.json\",\n \"README.md\"\n ],\n \"dependencies\": {\n \"@nestia/fetcher\": \"^14.0.0\",\n \"tgrid\": \"^1.2.1\",\n \"typia\": \"^15.0.0\"\n },\n \"devDependencies\": {\n \"@nestia/e2e\": \"^14.0.0\",\n \"@ttsc/unplugin\": \"^0.28.1\",\n \"@types/express\": \"^4.17.21\",\n \"@types/swagger-ui-express\": \"^4.1.6\",\n \"chalk\": \"4.1.2\",\n \"express\": \"^4.19.2\",\n \"rimraf\": \"^5.0.5\",\n \"rolldown\": \"^1.1.5\",\n \"swagger-ui-express\": \"^5.0.0\",\n \"tinyglobby\": \"^0.2.17\",\n \"ttsc\": \"^0.28.1\",\n \"typescript\": \"^7.0.2\",\n \"@nestia/core\": \"^14.0.0\"\n },\n \"packageManager\": \"pnpm@10.19.0\"\n}",
8
+ "package.json": "{\n \"name\": \"@ORGANIZATION/PROJECT-api\",\n \"version\": \"0.1.0\",\n \"description\": \"SDK library generated by Nestia\",\n \"main\": \"src/index.ts\",\n \"exports\": {\n \".\": \"./src/index.ts\",\n \"./lib/*\": \"./src/*.ts\",\n \"./package.json\": \"./package.json\"\n },\n \"publishConfig\": {\n \"main\": \"lib/index.mjs\",\n \"module\": \"lib/index.mjs\",\n \"types\": \"lib/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/index.d.ts\",\n \"import\": \"./lib/index.mjs\",\n \"default\": \"./lib/index.js\"\n },\n \"./lib/*\": {\n \"types\": \"./lib/*.d.ts\",\n \"import\": \"./lib/*.mjs\",\n \"default\": \"./lib/*.js\"\n },\n \"./package.json\": \"./package.json\"\n }\n },\n \"scripts\": {\n \"build\": \"rimraf lib && ttsc && rolldown -c\",\n \"build:test\": \"rimraf bin && ttsc --project test/tsconfig.json\",\n \"deploy\": \"pnpm run build && pnpm publish\",\n \"dev\": \"pnpm run build:test --watch\",\n \"hello\": \"node hello\",\n \"start\": \"ttsx test/start.ts\",\n \"swagger\": \"ttsx test/swagger.ts\",\n \"test\": \"ttsx test/index.ts\",\n \"test:simulate\": \"ttsx test/index.ts --simulate true\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/samchon/nestia\"\n },\n \"author\": \"Jeongho Nam\",\n \"license\": \"MIT\",\n \"bugs\": {\n \"url\": \"https://github.com/samchon/nestia/issues\"\n },\n \"homepage\": \"https://nestia.io\",\n \"files\": [\n \"lib\",\n \"swagger.json\",\n \"package.json\",\n \"README.md\"\n ],\n \"dependencies\": {\n \"@nestia/fetcher\": \"^14.0.1\",\n \"tgrid\": \"^1.2.1\",\n \"typia\": \"15.0.0\"\n },\n \"devDependencies\": {\n \"@nestia/e2e\": \"^14.0.1\",\n \"@ttsc/unplugin\": \"^0.28.1\",\n \"@types/express\": \"^4.17.21\",\n \"@types/swagger-ui-express\": \"^4.1.6\",\n \"chalk\": \"4.1.2\",\n \"express\": \"^4.19.2\",\n \"rimraf\": \"^5.0.5\",\n \"rolldown\": \"^1.1.5\",\n \"swagger-ui-express\": \"^5.0.0\",\n \"tinyglobby\": \"^0.2.17\",\n \"ttsc\": \"^0.28.1\",\n \"typescript\": \"^7.0.2\",\n \"@nestia/core\": \"^14.0.1\"\n },\n \"packageManager\": \"pnpm@10.19.0\"\n}",
9
9
  "rolldown.config.mjs": "import ttsc from \"@ttsc/unplugin/rolldown\";\nimport path from \"node:path\";\nimport { globSync } from \"tinyglobby\";\n\nexport default {\n input: globSync(\"./src/**/*.ts\"),\n external: (id) => !id.startsWith(\".\") && !path.isAbsolute(id),\n output: {\n dir: \"./lib\",\n format: \"esm\",\n sourcemap: true,\n entryFileNames: \"[name].mjs\",\n preserveModules: true,\n preserveModulesRoot: \"src\",\n },\n plugins: [ttsc()],\n};\n",
10
10
  "src/HttpError.ts": "export { HttpError } from \"@nestia/fetcher\";\n",
11
11
  "src/IConnection.ts": "export type { IConnection } from \"@nestia/fetcher\";\n",