@nestia/sdk 6.0.6 → 7.0.0-dev.20250605

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 (137) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +92 -92
  3. package/assets/bundle/api/HttpError.ts +1 -1
  4. package/assets/bundle/api/IConnection.ts +1 -1
  5. package/assets/bundle/api/Primitive.ts +1 -1
  6. package/assets/bundle/api/Resolved.ts +1 -1
  7. package/assets/bundle/api/index.ts +4 -4
  8. package/assets/bundle/api/module.ts +6 -6
  9. package/assets/bundle/distribute/README.md +37 -37
  10. package/assets/bundle/distribute/package.json +28 -28
  11. package/assets/bundle/distribute/tsconfig.json +109 -109
  12. package/assets/bundle/e2e/index.ts +42 -42
  13. package/assets/config/nestia.config.ts +97 -97
  14. package/lib/INestiaConfig.d.ts +66 -69
  15. package/lib/executable/internal/NestiaConfigLoader.js +10 -5
  16. package/lib/executable/internal/NestiaConfigLoader.js.map +1 -1
  17. package/lib/executable/sdk.js +12 -12
  18. package/lib/generates/internal/E2eFileProgrammer.js +30 -14
  19. package/lib/generates/internal/E2eFileProgrammer.js.map +1 -1
  20. package/lib/generates/internal/ImportDictionary.js +13 -4
  21. package/lib/generates/internal/ImportDictionary.js.map +1 -1
  22. package/lib/generates/internal/SdkAliasCollection.d.ts +3 -2
  23. package/lib/generates/internal/SdkAliasCollection.js +8 -3
  24. package/lib/generates/internal/SdkAliasCollection.js.map +1 -1
  25. package/lib/generates/internal/SdkHttpFunctionProgrammer.d.ts +1 -1
  26. package/lib/generates/internal/SdkHttpFunctionProgrammer.js +47 -35
  27. package/lib/generates/internal/SdkHttpFunctionProgrammer.js.map +1 -1
  28. package/lib/generates/internal/SdkHttpNamespaceProgrammer.d.ts +1 -1
  29. package/lib/generates/internal/SdkHttpNamespaceProgrammer.js +50 -37
  30. package/lib/generates/internal/SdkHttpNamespaceProgrammer.js.map +1 -1
  31. package/lib/generates/internal/SdkHttpRouteProgrammer.js +5 -4
  32. package/lib/generates/internal/SdkHttpRouteProgrammer.js.map +1 -1
  33. package/lib/generates/internal/SdkHttpSimulationProgrammer.d.ts +1 -1
  34. package/lib/generates/internal/SdkHttpSimulationProgrammer.js +28 -16
  35. package/lib/generates/internal/SdkHttpSimulationProgrammer.js.map +1 -1
  36. package/lib/generates/internal/SdkTypeProgrammer.js +3 -3
  37. package/lib/generates/internal/SdkTypeProgrammer.js.map +1 -1
  38. package/lib/generates/internal/SdkWebSocketNamespaceProgrammer.js +1 -1
  39. package/lib/generates/internal/SdkWebSocketNamespaceProgrammer.js.map +1 -1
  40. package/lib/generates/internal/SdkWebSocketRouteProgrammer.js +1 -1
  41. package/lib/generates/internal/SdkWebSocketRouteProgrammer.js.map +1 -1
  42. package/lib/utils/ArrayUtil.d.ts +2 -2
  43. package/lib/utils/ArrayUtil.js.map +1 -1
  44. package/package.json +6 -6
  45. package/src/INestiaConfig.ts +269 -271
  46. package/src/NestiaSdkApplication.ts +307 -307
  47. package/src/NestiaSwaggerComposer.ts +138 -138
  48. package/src/analyses/AccessorAnalyzer.ts +67 -67
  49. package/src/analyses/ConfigAnalyzer.ts +155 -155
  50. package/src/analyses/ExceptionAnalyzer.ts +154 -154
  51. package/src/analyses/GenericAnalyzer.ts +49 -49
  52. package/src/analyses/ImportAnalyzer.ts +171 -171
  53. package/src/analyses/PathAnalyzer.ts +69 -69
  54. package/src/analyses/ReflectControllerAnalyzer.ts +105 -105
  55. package/src/analyses/ReflectHttpOperationAnalyzer.ts +183 -183
  56. package/src/analyses/ReflectHttpOperationExceptionAnalyzer.ts +71 -71
  57. package/src/analyses/ReflectHttpOperationParameterAnalyzer.ts +348 -348
  58. package/src/analyses/ReflectHttpOperationResponseAnalyzer.ts +127 -127
  59. package/src/analyses/ReflectMetadataAnalyzer.ts +44 -44
  60. package/src/analyses/ReflectWebSocketOperationAnalyzer.ts +172 -172
  61. package/src/analyses/SecurityAnalyzer.ts +25 -25
  62. package/src/analyses/TypedHttpRouteAnalyzer.ts +186 -186
  63. package/src/analyses/TypedWebSocketRouteAnalyzer.ts +18 -18
  64. package/src/decorators/OperationMetadata.ts +15 -15
  65. package/src/executable/internal/CommandParser.ts +15 -15
  66. package/src/executable/internal/NestiaConfigLoader.ts +78 -78
  67. package/src/executable/internal/NestiaSdkCommand.ts +103 -103
  68. package/src/executable/sdk.ts +75 -75
  69. package/src/generates/CloneGenerator.ts +66 -66
  70. package/src/generates/E2eGenerator.ts +32 -32
  71. package/src/generates/SdkGenerator.ts +159 -159
  72. package/src/generates/SwaggerGenerator.ts +292 -292
  73. package/src/generates/internal/E2eFileProgrammer.ts +214 -183
  74. package/src/generates/internal/FilePrinter.ts +53 -53
  75. package/src/generates/internal/ImportDictionary.ts +159 -147
  76. package/src/generates/internal/SdkAliasCollection.ts +204 -185
  77. package/src/generates/internal/SdkDistributionComposer.ts +103 -103
  78. package/src/generates/internal/SdkFileProgrammer.ts +116 -116
  79. package/src/generates/internal/SdkHttpCloneProgrammer.ts +124 -124
  80. package/src/generates/internal/SdkHttpCloneReferencer.ts +71 -71
  81. package/src/generates/internal/SdkHttpFunctionProgrammer.ts +325 -301
  82. package/src/generates/internal/SdkHttpNamespaceProgrammer.ts +563 -529
  83. package/src/generates/internal/SdkHttpRouteProgrammer.ts +119 -117
  84. package/src/generates/internal/SdkHttpSimulationProgrammer.ts +386 -362
  85. package/src/generates/internal/SdkImportWizard.ts +55 -55
  86. package/src/generates/internal/SdkRouteDirectory.ts +18 -18
  87. package/src/generates/internal/SdkTypeProgrammer.ts +377 -377
  88. package/src/generates/internal/SdkTypeTagProgrammer.ts +102 -102
  89. package/src/generates/internal/SdkWebSocketNamespaceProgrammer.ts +362 -362
  90. package/src/generates/internal/SdkWebSocketRouteProgrammer.ts +265 -265
  91. package/src/generates/internal/SwaggerDescriptionComposer.ts +64 -64
  92. package/src/generates/internal/SwaggerOperationComposer.ts +119 -119
  93. package/src/generates/internal/SwaggerOperationParameterComposer.ts +177 -177
  94. package/src/generates/internal/SwaggerOperationResponseComposer.ts +110 -110
  95. package/src/index.ts +4 -4
  96. package/src/module.ts +3 -3
  97. package/src/structures/INestiaProject.ts +13 -13
  98. package/src/structures/INestiaSdkInput.ts +20 -20
  99. package/src/structures/IReflectApplication.ts +8 -8
  100. package/src/structures/IReflectController.ts +15 -15
  101. package/src/structures/IReflectHttpOperation.ts +26 -26
  102. package/src/structures/IReflectHttpOperationException.ts +19 -19
  103. package/src/structures/IReflectHttpOperationParameter.ts +81 -81
  104. package/src/structures/IReflectHttpOperationSuccess.ts +22 -22
  105. package/src/structures/IReflectOperationError.ts +26 -26
  106. package/src/structures/IReflectType.ts +4 -4
  107. package/src/structures/IReflectTypeImport.ts +4 -4
  108. package/src/structures/IReflectWebSocketOperation.ts +17 -17
  109. package/src/structures/IReflectWebSocketOperationParameter.ts +38 -38
  110. package/src/structures/ITypedApplication.ts +11 -11
  111. package/src/structures/ITypedHttpRoute.ts +30 -30
  112. package/src/structures/ITypedHttpRouteException.ts +15 -15
  113. package/src/structures/ITypedHttpRouteParameter.ts +41 -41
  114. package/src/structures/ITypedHttpRouteSuccess.ts +22 -22
  115. package/src/structures/ITypedWebSocketRoute.ts +20 -20
  116. package/src/structures/ITypedWebSocketRouteParameter.ts +3 -3
  117. package/src/structures/MethodType.ts +5 -5
  118. package/src/structures/ParamCategory.ts +1 -1
  119. package/src/structures/TypeEntry.ts +22 -22
  120. package/src/transform.ts +9 -9
  121. package/src/transformers/IOperationMetadata.ts +44 -44
  122. package/src/transformers/ISdkOperationTransformerContext.ts +8 -8
  123. package/src/transformers/SdkOperationProgrammer.ts +209 -209
  124. package/src/transformers/SdkOperationTransformer.ts +253 -253
  125. package/src/transformers/TextPlainValidator.ts +17 -17
  126. package/src/typings/get-function-location.d.ts +7 -7
  127. package/src/utils/ArrayUtil.ts +26 -26
  128. package/src/utils/FileRetriever.ts +22 -22
  129. package/src/utils/MapUtil.ts +14 -14
  130. package/src/utils/MetadataUtil.ts +26 -26
  131. package/src/utils/PathUtil.ts +10 -10
  132. package/src/utils/SourceFinder.ts +66 -66
  133. package/src/utils/StringUtil.ts +17 -17
  134. package/src/utils/StripEnums.ts +5 -5
  135. package/src/utils/VersioningStrategy.ts +28 -28
  136. package/src/validators/HttpHeadersValidator.ts +34 -34
  137. package/src/validators/HttpQueryValidator.ts +34 -34
@@ -1,117 +1,119 @@
1
- import ts from "typescript";
2
- import { IJsDocTagInfo } from "typia";
3
-
4
- import { INestiaProject } from "../../structures/INestiaProject";
5
- import { ITypedHttpRoute } from "../../structures/ITypedHttpRoute";
6
- import { FilePrinter } from "./FilePrinter";
7
- import { ImportDictionary } from "./ImportDictionary";
8
- import { SdkHttpFunctionProgrammer } from "./SdkHttpFunctionProgrammer";
9
- import { SdkHttpNamespaceProgrammer } from "./SdkHttpNamespaceProgrammer";
10
-
11
- export namespace SdkHttpRouteProgrammer {
12
- export const write =
13
- (project: INestiaProject) =>
14
- (importer: ImportDictionary) =>
15
- (route: ITypedHttpRoute): ts.Statement[] => {
16
- const props = {
17
- headers: route.parameters
18
- .filter((p) => p.category === "headers")
19
- .find((p) => p.field === null),
20
- query: route.parameters
21
- .filter((p) => p.category === "query")
22
- .find((p) => p.field === null),
23
- input: route.parameters.find((p) => p.category === "body"),
24
- };
25
- return [
26
- FilePrinter.description(
27
- SdkHttpFunctionProgrammer.write(project)(importer)(route, props),
28
- describe(route),
29
- ),
30
- SdkHttpNamespaceProgrammer.write(project)(importer)(route, props),
31
- ];
32
- };
33
-
34
- const describe = (route: ITypedHttpRoute): string => {
35
- // MAIN DESCRIPTION
36
- const descriptionComments: string[] = route.description
37
- ? route.description.split("\n")
38
- : [];
39
- const tagComments: string[] = [];
40
-
41
- // PARAMETERS
42
- for (const p of route.parameters) {
43
- if (p.category === "headers") continue;
44
-
45
- const description: string | undefined =
46
- p.description ??
47
- p.jsDocTags.find((tag) => tag.name === "description")?.text?.[0].text ??
48
- route.jsDocTags
49
- .find((tag) => tag.name === "param" && tag.text?.[0].text === p.name)
50
- ?.text?.map((e) => e.text)
51
- .join("")
52
- .substring(p.name.length);
53
- if (!description?.length) continue;
54
-
55
- tagComments.push(
56
- `@param ${p.name} ${description
57
- .split("\n")
58
- .map((str) => str.trim())
59
- .map((str, i) => {
60
- if (i === 0) return str;
61
- const rpad: number = p.name.length + 8;
62
- return `${" ".repeat(rpad)}${str}`;
63
- })
64
- .join("\n")}`,
65
- );
66
- }
67
-
68
- // COMMENT TAGS
69
- const tags: IJsDocTagInfo[] = route.jsDocTags.filter(
70
- (tag) => tag.name !== "param",
71
- );
72
- if (tags.length !== 0) {
73
- const content: string[] = tags.map((t) =>
74
- t.text?.length
75
- ? `@${t.name} ${t.text
76
- .map((e) => e.text)
77
- .join("")
78
- .split("\n")
79
- .map((str) => str.trim())
80
- .map((str, i) => {
81
- if (i === 0) return str;
82
- return `${" ".repeat(t.name.length + 1)} ${str}`;
83
- })
84
- .join("\n")}`
85
- : `@${t.name}`,
86
- );
87
- tagComments.push(...new Set(content));
88
- }
89
-
90
- // EXCEPTIONS
91
- for (const [key, value] of Object.entries(route.exceptions)) {
92
- if (
93
- tagComments.some(
94
- (str) =>
95
- str.startsWith(`@throw ${key}`) || str.startsWith(`@throws ${key}`),
96
- )
97
- )
98
- continue;
99
- tagComments.push(
100
- value.description?.length
101
- ? `@throws ${key} ${value.description.split("\n")[0]}`
102
- : `@throws ${key}`,
103
- );
104
- }
105
-
106
- // POSTFIX
107
- return [
108
- ...descriptionComments,
109
- ...(descriptionComments.length && tagComments.length ? [""] : []),
110
- ...tagComments,
111
- ...(descriptionComments.length && tagComments.length ? [""] : []),
112
- `@controller ${route.controller.class.name}.${route.name}`,
113
- `@path ${route.method} ${route.path}`,
114
- `@nestia Generated by Nestia - https://github.com/samchon/nestia`,
115
- ].join("\n");
116
- };
117
- }
1
+ import ts from "typescript";
2
+ import { IJsDocTagInfo } from "typia";
3
+
4
+ import { INestiaConfig } from "../../INestiaConfig";
5
+ import { INestiaProject } from "../../structures/INestiaProject";
6
+ import { ITypedHttpRoute } from "../../structures/ITypedHttpRoute";
7
+ import { FilePrinter } from "./FilePrinter";
8
+ import { ImportDictionary } from "./ImportDictionary";
9
+ import { SdkHttpFunctionProgrammer } from "./SdkHttpFunctionProgrammer";
10
+ import { SdkHttpNamespaceProgrammer } from "./SdkHttpNamespaceProgrammer";
11
+
12
+ export namespace SdkHttpRouteProgrammer {
13
+ export const write =
14
+ (project: INestiaProject) =>
15
+ (importer: ImportDictionary) =>
16
+ (route: ITypedHttpRoute): ts.Statement[] => {
17
+ const props = {
18
+ headers: route.parameters
19
+ .filter((p) => p.category === "headers")
20
+ .find((p) => p.field === null),
21
+ query: route.parameters
22
+ .filter((p) => p.category === "query")
23
+ .find((p) => p.field === null),
24
+ body: route.parameters.find((p) => p.category === "body"),
25
+ };
26
+ return [
27
+ FilePrinter.description(
28
+ SdkHttpFunctionProgrammer.write(project)(importer)(route, props),
29
+ describe(project.config, route),
30
+ ),
31
+ SdkHttpNamespaceProgrammer.write(project)(importer)(route, props),
32
+ ];
33
+ };
34
+
35
+ const describe = (config: INestiaConfig, route: ITypedHttpRoute): string => {
36
+ // MAIN DESCRIPTION
37
+ const descriptionComments: string[] = route.description
38
+ ? route.description.split("\n")
39
+ : [];
40
+ const tagComments: string[] = [];
41
+
42
+ // PARAMETERS
43
+ for (const p of route.parameters) {
44
+ if (p.category === "headers") continue;
45
+
46
+ const description: string | undefined =
47
+ p.description ??
48
+ p.jsDocTags.find((tag) => tag.name === "description")?.text?.[0].text ??
49
+ route.jsDocTags
50
+ .find((tag) => tag.name === "param" && tag.text?.[0].text === p.name)
51
+ ?.text?.map((e) => e.text)
52
+ .join("")
53
+ .substring(p.name.length);
54
+ if (!description?.length) continue;
55
+
56
+ const name: string = config.keyword === true ? `props.${p.name}` : p.name;
57
+ tagComments.push(
58
+ `@param ${name} ${description
59
+ .split("\n")
60
+ .map((str) => str.trim())
61
+ .map((str, i) => {
62
+ if (i === 0) return str;
63
+ const rpad: number = p.name.length + 8;
64
+ return `${" ".repeat(rpad)}${str}`;
65
+ })
66
+ .join("\n")}`,
67
+ );
68
+ }
69
+
70
+ // COMMENT TAGS
71
+ const tags: IJsDocTagInfo[] = route.jsDocTags.filter(
72
+ (tag) => tag.name !== "param",
73
+ );
74
+ if (tags.length !== 0) {
75
+ const content: string[] = tags.map((t) =>
76
+ t.text?.length
77
+ ? `@${t.name} ${t.text
78
+ .map((e) => e.text)
79
+ .join("")
80
+ .split("\n")
81
+ .map((str) => str.trim())
82
+ .map((str, i) => {
83
+ if (i === 0) return str;
84
+ return `${" ".repeat(t.name.length + 1)} ${str}`;
85
+ })
86
+ .join("\n")}`
87
+ : `@${t.name}`,
88
+ );
89
+ tagComments.push(...new Set(content));
90
+ }
91
+
92
+ // EXCEPTIONS
93
+ for (const [key, value] of Object.entries(route.exceptions)) {
94
+ if (
95
+ tagComments.some(
96
+ (str) =>
97
+ str.startsWith(`@throw ${key}`) || str.startsWith(`@throws ${key}`),
98
+ )
99
+ )
100
+ continue;
101
+ tagComments.push(
102
+ value.description?.length
103
+ ? `@throws ${key} ${value.description.split("\n")[0]}`
104
+ : `@throws ${key}`,
105
+ );
106
+ }
107
+
108
+ // POSTFIX
109
+ return [
110
+ ...descriptionComments,
111
+ ...(descriptionComments.length && tagComments.length ? [""] : []),
112
+ ...tagComments,
113
+ ...(descriptionComments.length && tagComments.length ? [""] : []),
114
+ `@controller ${route.controller.class.name}.${route.name}`,
115
+ `@path ${route.method} ${route.path}`,
116
+ `@nestia Generated by Nestia - https://github.com/samchon/nestia`,
117
+ ].join("\n");
118
+ };
119
+ }