@nestia/sdk 12.0.0-dev.20260601.1 → 12.0.0-dev.20260619.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 (259) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +93 -93
  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/NestiaSdkApplication.js +29 -7
  15. package/lib/NestiaSdkApplication.js.map +1 -1
  16. package/lib/NestiaSwaggerComposer.js +21 -13
  17. package/lib/NestiaSwaggerComposer.js.map +1 -1
  18. package/lib/analyses/AccessorAnalyzer.d.ts +4 -1
  19. package/lib/analyses/AccessorAnalyzer.js.map +1 -1
  20. package/lib/analyses/ConfigAnalyzer.js +1 -1
  21. package/lib/analyses/PathAnalyzer.d.ts +18 -3
  22. package/lib/analyses/PathAnalyzer.js +32 -0
  23. package/lib/analyses/PathAnalyzer.js.map +1 -1
  24. package/lib/analyses/ReflectControllerAnalyzer.js +3 -2
  25. package/lib/analyses/ReflectControllerAnalyzer.js.map +1 -1
  26. package/lib/analyses/ReflectHttpOperationAnalyzer.d.ts +1 -1
  27. package/lib/analyses/ReflectHttpOperationAnalyzer.js +1 -1
  28. package/lib/analyses/ReflectHttpOperationAnalyzer.js.map +1 -1
  29. package/lib/analyses/ReflectHttpOperationResponseAnalyzer.d.ts +1 -1
  30. package/lib/analyses/ReflectHttpOperationResponseAnalyzer.js +53 -20
  31. package/lib/analyses/ReflectHttpOperationResponseAnalyzer.js.map +1 -1
  32. package/lib/analyses/ReflectMcpOperationAnalyzer.d.ts +14 -0
  33. package/lib/analyses/ReflectMcpOperationAnalyzer.js +79 -0
  34. package/lib/analyses/ReflectMcpOperationAnalyzer.js.map +1 -0
  35. package/lib/analyses/TypedMcpRouteAnalyzer.d.ts +9 -0
  36. package/lib/analyses/TypedMcpRouteAnalyzer.js +31 -0
  37. package/lib/analyses/TypedMcpRouteAnalyzer.js.map +1 -0
  38. package/lib/executable/internal/NestiaConfigLoader.js +5 -1
  39. package/lib/executable/internal/NestiaConfigLoader.js.map +1 -1
  40. package/lib/executable/internal/NestiaSdkCommand.js +30 -14
  41. package/lib/executable/internal/NestiaSdkCommand.js.map +1 -1
  42. package/lib/executable/internal/NestiaSdkWatcher.d.ts +10 -0
  43. package/lib/executable/internal/NestiaSdkWatcher.js +322 -0
  44. package/lib/executable/internal/NestiaSdkWatcher.js.map +1 -0
  45. package/lib/executable/sdk.js +12 -12
  46. package/lib/executable/sdk.js.map +1 -1
  47. package/lib/factories/ExpressionFactory.d.ts +9 -0
  48. package/lib/factories/ExpressionFactory.js +16 -0
  49. package/lib/factories/ExpressionFactory.js.map +1 -0
  50. package/lib/factories/IdentifierFactory.d.ts +22 -0
  51. package/lib/factories/IdentifierFactory.js +50 -0
  52. package/lib/factories/IdentifierFactory.js.map +1 -0
  53. package/lib/factories/LiteralFactory.d.ts +9 -0
  54. package/lib/factories/LiteralFactory.js +48 -0
  55. package/lib/factories/LiteralFactory.js.map +1 -0
  56. package/lib/factories/StatementFactory.d.ts +14 -0
  57. package/lib/factories/StatementFactory.js +20 -0
  58. package/lib/factories/StatementFactory.js.map +1 -0
  59. package/lib/factories/TypeFactory.d.ts +24 -0
  60. package/lib/factories/TypeFactory.js +27 -0
  61. package/lib/factories/TypeFactory.js.map +1 -0
  62. package/lib/generates/CloneGenerator.js +6 -4
  63. package/lib/generates/CloneGenerator.js.map +1 -1
  64. package/lib/generates/SdkGenerator.js +50 -1
  65. package/lib/generates/SdkGenerator.js.map +1 -1
  66. package/lib/generates/SwaggerGenerator.js +18 -2
  67. package/lib/generates/SwaggerGenerator.js.map +1 -1
  68. package/lib/generates/internal/E2eFileProgrammer.js +32 -29
  69. package/lib/generates/internal/E2eFileProgrammer.js.map +1 -1
  70. package/lib/generates/internal/FilePrinter.d.ts +2 -2
  71. package/lib/generates/internal/FilePrinter.js +14 -25
  72. package/lib/generates/internal/FilePrinter.js.map +1 -1
  73. package/lib/generates/internal/ImportDictionary.d.ts +2 -1
  74. package/lib/generates/internal/ImportDictionary.js +16 -10
  75. package/lib/generates/internal/ImportDictionary.js.map +1 -1
  76. package/lib/generates/internal/SdkAliasCollection.d.ts +12 -10
  77. package/lib/generates/internal/SdkAliasCollection.js +29 -22
  78. package/lib/generates/internal/SdkAliasCollection.js.map +1 -1
  79. package/lib/generates/internal/SdkDistributionComposer.d.ts +1 -0
  80. package/lib/generates/internal/SdkDistributionComposer.js +3 -0
  81. package/lib/generates/internal/SdkDistributionComposer.js.map +1 -1
  82. package/lib/generates/internal/SdkFileProgrammer.js +6 -3
  83. package/lib/generates/internal/SdkFileProgrammer.js.map +1 -1
  84. package/lib/generates/internal/SdkHttpCloneProgrammer.d.ts +1 -1
  85. package/lib/generates/internal/SdkHttpCloneProgrammer.js +3 -3
  86. package/lib/generates/internal/SdkHttpCloneProgrammer.js.map +1 -1
  87. package/lib/generates/internal/SdkHttpCloneReferencer.d.ts +1 -1
  88. package/lib/generates/internal/SdkHttpCloneReferencer.js +42 -9
  89. package/lib/generates/internal/SdkHttpCloneReferencer.js.map +1 -1
  90. package/lib/generates/internal/SdkHttpFunctionProgrammer.d.ts +1 -1
  91. package/lib/generates/internal/SdkHttpFunctionProgrammer.js +47 -51
  92. package/lib/generates/internal/SdkHttpFunctionProgrammer.js.map +1 -1
  93. package/lib/generates/internal/SdkHttpNamespaceProgrammer.d.ts +1 -1
  94. package/lib/generates/internal/SdkHttpNamespaceProgrammer.js +63 -61
  95. package/lib/generates/internal/SdkHttpNamespaceProgrammer.js.map +1 -1
  96. package/lib/generates/internal/SdkHttpParameterProgrammer.d.ts +2 -2
  97. package/lib/generates/internal/SdkHttpParameterProgrammer.js +11 -13
  98. package/lib/generates/internal/SdkHttpParameterProgrammer.js.map +1 -1
  99. package/lib/generates/internal/SdkHttpRouteProgrammer.d.ts +1 -1
  100. package/lib/generates/internal/SdkHttpSimulationProgrammer.d.ts +1 -1
  101. package/lib/generates/internal/SdkHttpSimulationProgrammer.js +52 -47
  102. package/lib/generates/internal/SdkHttpSimulationProgrammer.js.map +1 -1
  103. package/lib/generates/internal/SdkMcpRouteProgrammer.d.ts +15 -0
  104. package/lib/generates/internal/SdkMcpRouteProgrammer.js +149 -0
  105. package/lib/generates/internal/SdkMcpRouteProgrammer.js.map +1 -0
  106. package/lib/generates/internal/SdkRouteDirectory.d.ts +2 -1
  107. package/lib/generates/internal/SdkRouteDirectory.js.map +1 -1
  108. package/lib/generates/internal/SdkTypeProgrammer.d.ts +3 -3
  109. package/lib/generates/internal/SdkTypeProgrammer.js +42 -43
  110. package/lib/generates/internal/SdkTypeProgrammer.js.map +1 -1
  111. package/lib/generates/internal/SdkTypeTagProgrammer.d.ts +2 -1
  112. package/lib/generates/internal/SdkTypeTagProgrammer.js +7 -9
  113. package/lib/generates/internal/SdkTypeTagProgrammer.js.map +1 -1
  114. package/lib/generates/internal/SdkWebSocketCloneProgrammer.d.ts +6 -0
  115. package/lib/generates/internal/SdkWebSocketCloneProgrammer.js +283 -0
  116. package/lib/generates/internal/SdkWebSocketCloneProgrammer.js.map +1 -0
  117. package/lib/generates/internal/SdkWebSocketNamespaceProgrammer.d.ts +2 -2
  118. package/lib/generates/internal/SdkWebSocketNamespaceProgrammer.js +45 -47
  119. package/lib/generates/internal/SdkWebSocketNamespaceProgrammer.js.map +1 -1
  120. package/lib/generates/internal/SdkWebSocketParameterProgrammer.d.ts +3 -3
  121. package/lib/generates/internal/SdkWebSocketParameterProgrammer.js +9 -9
  122. package/lib/generates/internal/SdkWebSocketParameterProgrammer.js.map +1 -1
  123. package/lib/generates/internal/SdkWebSocketRouteProgrammer.d.ts +2 -2
  124. package/lib/generates/internal/SdkWebSocketRouteProgrammer.js +37 -41
  125. package/lib/generates/internal/SdkWebSocketRouteProgrammer.js.map +1 -1
  126. package/lib/generates/internal/SwaggerOperationParameterComposer.js +10 -2
  127. package/lib/generates/internal/SwaggerOperationParameterComposer.js.map +1 -1
  128. package/lib/generates/internal/SwaggerOperationResponseComposer.d.ts +1 -1
  129. package/lib/generates/internal/SwaggerOperationResponseComposer.js +6 -1
  130. package/lib/generates/internal/SwaggerOperationResponseComposer.js.map +1 -1
  131. package/lib/generates/internal/SwaggerReadonlyArrayEmender.d.ts +9 -0
  132. package/lib/generates/internal/SwaggerReadonlyArrayEmender.js +174 -0
  133. package/lib/generates/internal/SwaggerReadonlyArrayEmender.js.map +1 -0
  134. package/lib/structures/INestiaSdkInput.d.ts +9 -2
  135. package/lib/structures/IReflectController.d.ts +2 -1
  136. package/lib/structures/IReflectHttpOperationSuccess.d.ts +4 -2
  137. package/lib/structures/IReflectMcpOperation.d.ts +35 -0
  138. package/lib/structures/IReflectMcpOperation.js +3 -0
  139. package/lib/structures/IReflectMcpOperation.js.map +1 -0
  140. package/lib/structures/IReflectMcpOperationParameter.d.ts +19 -0
  141. package/lib/structures/IReflectMcpOperationParameter.js +3 -0
  142. package/lib/structures/IReflectMcpOperationParameter.js.map +1 -0
  143. package/lib/structures/ITypedApplication.d.ts +2 -1
  144. package/lib/structures/ITypedHttpRouteSuccess.d.ts +3 -1
  145. package/lib/structures/ITypedMcpRoute.d.ts +31 -0
  146. package/lib/structures/ITypedMcpRoute.js +3 -0
  147. package/lib/structures/ITypedMcpRoute.js.map +1 -0
  148. package/lib/transform.d.ts +5 -9
  149. package/lib/transform.js +8 -31
  150. package/lib/transform.js.map +1 -1
  151. package/lib/utils/HttpResponseContentTypeUtil.d.ts +5 -0
  152. package/lib/utils/HttpResponseContentTypeUtil.js +22 -0
  153. package/lib/utils/HttpResponseContentTypeUtil.js.map +1 -0
  154. package/native/go.mod +52 -52
  155. package/native/go.sum +84 -54
  156. package/native/sdk/register.go +322 -165
  157. package/native/sdk/sdk.go +17 -17
  158. package/native/sdk/sdk_metadata_json.go +327 -327
  159. package/native/sdk/sdk_transform.go +1879 -1549
  160. package/package.json +13 -11
  161. package/src/INestiaConfig.ts +267 -267
  162. package/src/NestiaSdkApplication.ts +39 -8
  163. package/src/NestiaSwaggerComposer.ts +153 -142
  164. package/src/analyses/AccessorAnalyzer.ts +64 -67
  165. package/src/analyses/ConfigAnalyzer.ts +330 -330
  166. package/src/analyses/ImportAnalyzer.ts +92 -92
  167. package/src/analyses/PathAnalyzer.ts +130 -69
  168. package/src/analyses/ReflectControllerAnalyzer.ts +112 -105
  169. package/src/analyses/ReflectHttpOperationAnalyzer.ts +183 -183
  170. package/src/analyses/ReflectHttpOperationExceptionAnalyzer.ts +90 -90
  171. package/src/analyses/ReflectHttpOperationParameterAnalyzer.ts +350 -350
  172. package/src/analyses/ReflectHttpOperationResponseAnalyzer.ts +163 -130
  173. package/src/analyses/ReflectMcpOperationAnalyzer.ts +124 -0
  174. package/src/analyses/ReflectMetadataAnalyzer.ts +44 -44
  175. package/src/analyses/SecurityAnalyzer.ts +25 -25
  176. package/src/analyses/TypedMcpRouteAnalyzer.ts +34 -0
  177. package/src/decorators/OperationMetadata.ts +29 -29
  178. package/src/executable/internal/CommandParser.ts +15 -15
  179. package/src/executable/internal/NestiaConfigLoader.ts +451 -446
  180. package/src/executable/internal/NestiaSdkCommand.ts +124 -106
  181. package/src/executable/internal/NestiaSdkWatcher.ts +342 -0
  182. package/src/executable/sdk.ts +90 -88
  183. package/src/factories/ExpressionFactory.ts +23 -0
  184. package/src/factories/IdentifierFactory.ts +84 -0
  185. package/src/factories/LiteralFactory.ts +54 -0
  186. package/src/factories/StatementFactory.ts +56 -0
  187. package/src/factories/TypeFactory.ts +27 -0
  188. package/src/generates/CloneGenerator.ts +74 -66
  189. package/src/generates/E2eGenerator.ts +32 -32
  190. package/src/generates/SdkGenerator.ts +176 -118
  191. package/src/generates/SwaggerGenerator.ts +342 -310
  192. package/src/generates/internal/E2eFileProgrammer.ts +246 -233
  193. package/src/generates/internal/FilePrinter.ts +57 -65
  194. package/src/generates/internal/ImportDictionary.ts +207 -204
  195. package/src/generates/internal/SdkAliasCollection.ts +280 -261
  196. package/src/generates/internal/SdkDistributionComposer.ts +123 -116
  197. package/src/generates/internal/SdkFileProgrammer.ts +113 -112
  198. package/src/generates/internal/SdkHttpCloneProgrammer.ts +124 -126
  199. package/src/generates/internal/SdkHttpCloneReferencer.ts +131 -77
  200. package/src/generates/internal/SdkHttpFunctionProgrammer.ts +290 -301
  201. package/src/generates/internal/SdkHttpNamespaceProgrammer.ts +507 -510
  202. package/src/generates/internal/SdkHttpParameterProgrammer.ts +163 -165
  203. package/src/generates/internal/SdkHttpRouteProgrammer.ts +109 -109
  204. package/src/generates/internal/SdkHttpSimulationProgrammer.ts +322 -314
  205. package/src/generates/internal/SdkImportWizard.ts +62 -62
  206. package/src/generates/internal/SdkMcpRouteProgrammer.ts +447 -0
  207. package/src/generates/internal/SdkRouteDirectory.ts +21 -18
  208. package/src/generates/internal/SdkTypeProgrammer.ts +389 -382
  209. package/src/generates/internal/SdkTypeTagProgrammer.ts +110 -114
  210. package/src/generates/internal/SdkWebSocketCloneProgrammer.ts +319 -0
  211. package/src/generates/internal/SdkWebSocketNamespaceProgrammer.ts +383 -389
  212. package/src/generates/internal/SdkWebSocketParameterProgrammer.ts +91 -89
  213. package/src/generates/internal/SdkWebSocketRouteProgrammer.ts +304 -323
  214. package/src/generates/internal/SwaggerDescriptionComposer.ts +64 -64
  215. package/src/generates/internal/SwaggerOperationComposer.ts +119 -119
  216. package/src/generates/internal/SwaggerOperationParameterComposer.ts +175 -162
  217. package/src/generates/internal/SwaggerOperationResponseComposer.ts +115 -110
  218. package/src/generates/internal/SwaggerReadonlyArrayEmender.ts +262 -0
  219. package/src/index.ts +4 -4
  220. package/src/internal/legacy.ts +492 -492
  221. package/src/module.ts +4 -4
  222. package/src/structures/INestiaProject.ts +10 -10
  223. package/src/structures/INestiaSdkInput.ts +27 -20
  224. package/src/structures/IOperationMetadata.ts +41 -41
  225. package/src/structures/IReflectController.ts +18 -15
  226. package/src/structures/IReflectHttpOperation.ts +26 -26
  227. package/src/structures/IReflectHttpOperationException.ts +18 -18
  228. package/src/structures/IReflectHttpOperationParameter.ts +79 -79
  229. package/src/structures/IReflectHttpOperationSuccess.ts +18 -21
  230. package/src/structures/IReflectImport.ts +6 -6
  231. package/src/structures/IReflectMcpOperation.ts +38 -0
  232. package/src/structures/IReflectMcpOperationParameter.ts +27 -0
  233. package/src/structures/IReflectOperationError.ts +26 -26
  234. package/src/structures/IReflectType.ts +4 -4
  235. package/src/structures/IReflectWebSocketOperation.ts +17 -17
  236. package/src/structures/ITypedApplication.ts +12 -11
  237. package/src/structures/ITypedHttpRoute.ts +41 -41
  238. package/src/structures/ITypedHttpRouteException.ts +15 -15
  239. package/src/structures/ITypedHttpRouteParameter.ts +41 -41
  240. package/src/structures/ITypedHttpRouteSuccess.ts +18 -22
  241. package/src/structures/ITypedMcpRoute.ts +33 -0
  242. package/src/structures/ITypedWebSocketRoute.ts +24 -24
  243. package/src/structures/ITypedWebSocketRouteParameter.ts +3 -3
  244. package/src/transform.ts +28 -59
  245. package/src/typings/get-function-location.d.ts +7 -7
  246. package/src/utils/ArrayUtil.ts +26 -26
  247. package/src/utils/EmittedJavaScriptPatcher.ts +88 -88
  248. package/src/utils/FileRetriever.ts +22 -22
  249. package/src/utils/HttpResponseContentTypeUtil.ts +30 -0
  250. package/src/utils/MapUtil.ts +14 -14
  251. package/src/utils/PathUtil.ts +10 -10
  252. package/src/utils/SourceFinder.ts +63 -63
  253. package/src/utils/StringUtil.ts +17 -17
  254. package/src/utils/TsConfigReader.ts +108 -108
  255. package/src/utils/TtscExecutor.ts +68 -68
  256. package/src/utils/VersioningStrategy.ts +28 -28
  257. package/src/validators/HttpHeadersValidator.ts +11 -11
  258. package/src/validators/HttpQueryValidator.ts +11 -11
  259. package/src/validators/TextPlainValidator.ts +17 -17
@@ -1,314 +1,322 @@
1
- import { Node, NodeFlags, SyntaxKind, TypeScriptFactory } from "@nestia/factory";
2
- import { ExpressionFactory, IdentifierFactory, LiteralFactory, StatementFactory, TypeFactory } from "@nestia/factory";
3
-
4
- import { INestiaProject } from "../../structures/INestiaProject";
5
- import { ITypedHttpRoute } from "../../structures/ITypedHttpRoute";
6
- import { ImportDictionary } from "./ImportDictionary";
7
- import { SdkAliasCollection } from "./SdkAliasCollection";
8
- import { SdkHttpParameterProgrammer } from "./SdkHttpParameterProgrammer";
9
- import { SdkImportWizard } from "./SdkImportWizard";
10
- import { sizeOf } from "../../internal/legacy";
11
-
12
- export namespace SdkHttpSimulationProgrammer {
13
- export const random =
14
- (project: INestiaProject) =>
15
- (importer: ImportDictionary) =>
16
- (route: ITypedHttpRoute): Node => {
17
- const output = SdkAliasCollection.responseBody(project)(importer)(route);
18
- return constant("random")(
19
- TypeScriptFactory.createArrowFunction(
20
- undefined,
21
- undefined,
22
- [],
23
- project.config.primitive === false
24
- ? output
25
- : TypeScriptFactory.createTypeReferenceNode(
26
- SdkImportWizard.Resolved(importer),
27
- [output],
28
- ),
29
- undefined,
30
- TypeScriptFactory.createCallExpression(
31
- IdentifierFactory.access(
32
- TypeScriptFactory.createIdentifier(
33
- SdkImportWizard.typia(importer),
34
- ),
35
- "random",
36
- ),
37
- [output],
38
- undefined,
39
- ),
40
- ),
41
- );
42
- };
43
-
44
- export const simulate =
45
- (project: INestiaProject) =>
46
- (importer: ImportDictionary) =>
47
- (route: ITypedHttpRoute): Node => {
48
- const output: boolean =
49
- project.config.propagate === true ||
50
- sizeOf(route.success.metadata) !== 0;
51
- const caller = () =>
52
- TypeScriptFactory.createCallExpression(
53
- TypeScriptFactory.createIdentifier("random"),
54
- undefined,
55
- undefined,
56
- );
57
- return constant("simulate")(
58
- TypeScriptFactory.createArrowFunction(
59
- undefined,
60
- undefined,
61
- [
62
- IdentifierFactory.parameter(
63
- SdkHttpParameterProgrammer.getSignificant(route, true).length !==
64
- 0
65
- ? "connection"
66
- : "_connection",
67
- TypeScriptFactory.createTypeReferenceNode(
68
- SdkImportWizard.IConnection(importer),
69
- route.headerObject
70
- ? [
71
- TypeScriptFactory.createTypeReferenceNode(
72
- `${route.name}.Headers`,
73
- ),
74
- ]
75
- : [],
76
- ),
77
- ),
78
- ...SdkHttpParameterProgrammer.getParameterDeclarations({
79
- project,
80
- importer,
81
- route,
82
- body: true,
83
- prefix: false,
84
- }),
85
- ],
86
- TypeScriptFactory.createTypeReferenceNode(output ? "Output" : "void"),
87
- undefined,
88
- TypeScriptFactory.createBlock(
89
- [
90
- ...assert(project)(importer)(route),
91
- TypeScriptFactory.createReturnStatement(
92
- project.config.propagate
93
- ? TypeScriptFactory.createAsExpression(
94
- TypeScriptFactory.createObjectLiteralExpression(
95
- [
96
- TypeScriptFactory.createPropertyAssignment(
97
- "success",
98
- TypeScriptFactory.createTrue(),
99
- ),
100
- TypeScriptFactory.createPropertyAssignment(
101
- "status",
102
- ExpressionFactory.number(
103
- route.success.status ??
104
- (route.method === "POST" ? 201 : 200),
105
- ),
106
- ),
107
- TypeScriptFactory.createPropertyAssignment(
108
- "headers",
109
- LiteralFactory.write({
110
- "Content-Type": route.success.contentType,
111
- }),
112
- ),
113
- TypeScriptFactory.createPropertyAssignment(
114
- "data",
115
- caller(),
116
- ),
117
- ],
118
- true,
119
- ),
120
- TypeScriptFactory.createTypeReferenceNode("Output"),
121
- )
122
- : caller(),
123
- ),
124
- ],
125
- true,
126
- ),
127
- ),
128
- );
129
- };
130
-
131
- const assert =
132
- (project: INestiaProject) =>
133
- (importer: ImportDictionary) =>
134
- (route: ITypedHttpRoute): Node[] => {
135
- const parameters = SdkHttpParameterProgrammer.getSignificant(route, true);
136
- if (parameters.length === 0) return [];
137
-
138
- const typia = SdkImportWizard.typia(importer);
139
- const validator = StatementFactory.constant({
140
- name: "assert",
141
- value: TypeScriptFactory.createCallExpression(
142
- IdentifierFactory.access(
143
- TypeScriptFactory.createIdentifier(
144
- importer.external({
145
- file: `@nestia/fetcher`,
146
- declaration: false,
147
- type: "element",
148
- name: "NestiaSimulator",
149
- }),
150
- ),
151
- "assert",
152
- ),
153
- undefined,
154
- [
155
- TypeScriptFactory.createObjectLiteralExpression(
156
- [
157
- TypeScriptFactory.createPropertyAssignment(
158
- "method",
159
- TypeScriptFactory.createIdentifier("METADATA.method"),
160
- ),
161
- TypeScriptFactory.createPropertyAssignment(
162
- "host",
163
- TypeScriptFactory.createIdentifier("connection.host"),
164
- ),
165
- TypeScriptFactory.createPropertyAssignment(
166
- "path",
167
- TypeScriptFactory.createCallExpression(
168
- TypeScriptFactory.createIdentifier("path"),
169
- undefined,
170
- SdkHttpParameterProgrammer.getArguments({
171
- project,
172
- route,
173
- body: false,
174
- }),
175
- ),
176
- ),
177
- TypeScriptFactory.createPropertyAssignment(
178
- "contentType",
179
- TypeScriptFactory.createIdentifier(
180
- JSON.stringify(route.success.contentType),
181
- ),
182
- ),
183
- ],
184
- true,
185
- ),
186
- ],
187
- ),
188
- });
189
- const individual: Node[] = parameters
190
- .map((p) =>
191
- TypeScriptFactory.createCallExpression(
192
- (() => {
193
- const base = IdentifierFactory.access(
194
- TypeScriptFactory.createIdentifier("assert"),
195
- p.category,
196
- );
197
- if (p.category !== "param") return base;
198
- return TypeScriptFactory.createCallExpression(base, undefined, [
199
- TypeScriptFactory.createStringLiteral(p.name),
200
- ]);
201
- })(),
202
- undefined,
203
- [
204
- TypeScriptFactory.createArrowFunction(
205
- undefined,
206
- undefined,
207
- [],
208
- undefined,
209
- undefined,
210
- TypeScriptFactory.createCallExpression(
211
- IdentifierFactory.access(
212
- TypeScriptFactory.createIdentifier(typia),
213
- "assert",
214
- ),
215
- undefined,
216
- [
217
- project.config.keyword === true
218
- ? TypeScriptFactory.createIdentifier(`props.${p.name}`)
219
- : TypeScriptFactory.createIdentifier(p.name),
220
- ],
221
- ),
222
- ),
223
- ],
224
- ),
225
- )
226
- .map(TypeScriptFactory.createExpressionStatement) as Node[];
227
- return [
228
- validator,
229
- ...(project.config.propagate !== true
230
- ? individual
231
- : [tryAndCatch(importer)(individual)]),
232
- ];
233
- };
234
-
235
- const tryAndCatch =
236
- (importer: ImportDictionary) => (individual: Node[]) =>
237
- TypeScriptFactory.createTryStatement(
238
- TypeScriptFactory.createBlock(individual, true),
239
- TypeScriptFactory.createCatchClause(
240
- "exp",
241
- TypeScriptFactory.createBlock(
242
- [
243
- TypeScriptFactory.createIfStatement(
244
- TypeScriptFactory.createLogicalNot(
245
- TypeScriptFactory.createCallExpression(
246
- IdentifierFactory.access(
247
- TypeScriptFactory.createIdentifier(
248
- SdkImportWizard.typia(importer),
249
- ),
250
- "is",
251
- ),
252
- [
253
- TypeScriptFactory.createTypeReferenceNode(
254
- SdkImportWizard.HttpError(importer),
255
- ),
256
- ],
257
- [TypeScriptFactory.createIdentifier("exp")],
258
- ),
259
- ),
260
- TypeScriptFactory.createThrowStatement(
261
- TypeScriptFactory.createIdentifier("exp"),
262
- ),
263
- ),
264
- TypeScriptFactory.createReturnStatement(
265
- TypeScriptFactory.createAsExpression(
266
- TypeScriptFactory.createObjectLiteralExpression(
267
- [
268
- TypeScriptFactory.createPropertyAssignment(
269
- "success",
270
- TypeScriptFactory.createFalse(),
271
- ),
272
- TypeScriptFactory.createPropertyAssignment(
273
- "status",
274
- TypeScriptFactory.createIdentifier("exp.status"),
275
- ),
276
- TypeScriptFactory.createPropertyAssignment(
277
- "headers",
278
- TypeScriptFactory.createIdentifier("exp.headers"),
279
- ),
280
- TypeScriptFactory.createPropertyAssignment(
281
- "data",
282
- TypeScriptFactory.createIdentifier(
283
- "exp.toJSON().message",
284
- ),
285
- ),
286
- ],
287
- true,
288
- ),
289
- TypeFactory.keyword("any"),
290
- ),
291
- ),
292
- ],
293
- true,
294
- ),
295
- ),
296
- undefined,
297
- );
298
- }
299
-
300
- const constant = (name: string) => (expression: Node) =>
301
- TypeScriptFactory.createVariableStatement(
302
- [TypeScriptFactory.createModifier(SyntaxKind.ExportKeyword)],
303
- TypeScriptFactory.createVariableDeclarationList(
304
- [
305
- TypeScriptFactory.createVariableDeclaration(
306
- TypeScriptFactory.createIdentifier(name),
307
- undefined,
308
- undefined,
309
- expression,
310
- ),
311
- ],
312
- NodeFlags.Const,
313
- ),
314
- );
1
+ import {
2
+ type Expression,
3
+ type ExpressionStatement,
4
+ type Node,
5
+ NodeFlags,
6
+ type ParameterDeclaration,
7
+ type Statement,
8
+ SyntaxKind,
9
+ type TypeNode,
10
+ factory,
11
+ } from "@ttsc/factory";
12
+
13
+ import { ExpressionFactory } from "../../factories/ExpressionFactory";
14
+ import { IdentifierFactory } from "../../factories/IdentifierFactory";
15
+ import { LiteralFactory } from "../../factories/LiteralFactory";
16
+ import { StatementFactory } from "../../factories/StatementFactory";
17
+ import { TypeFactory } from "../../factories/TypeFactory";
18
+ import { sizeOf } from "../../internal/legacy";
19
+ import { INestiaProject } from "../../structures/INestiaProject";
20
+ import { ITypedHttpRoute } from "../../structures/ITypedHttpRoute";
21
+ import { ImportDictionary } from "./ImportDictionary";
22
+ import { SdkAliasCollection } from "./SdkAliasCollection";
23
+ import { SdkHttpParameterProgrammer } from "./SdkHttpParameterProgrammer";
24
+ import { SdkImportWizard } from "./SdkImportWizard";
25
+
26
+ export namespace SdkHttpSimulationProgrammer {
27
+ export const random =
28
+ (project: INestiaProject) =>
29
+ (importer: ImportDictionary) =>
30
+ (route: ITypedHttpRoute): Node => {
31
+ const output: TypeNode = SdkAliasCollection.responseBody(project)(
32
+ importer,
33
+ )(route) as TypeNode;
34
+ return constant("random")(
35
+ factory.createArrowFunction(
36
+ undefined,
37
+ undefined,
38
+ [],
39
+ project.config.primitive === false || route.success.binary === true
40
+ ? output
41
+ : factory.createTypeReferenceNode(
42
+ SdkImportWizard.Resolved(importer),
43
+ [output],
44
+ ),
45
+ undefined,
46
+ route.success.binary === true
47
+ ? factory.createNewExpression(
48
+ factory.createIdentifier("ReadableStream"),
49
+ [SdkAliasCollection.binaryChunk() as TypeNode],
50
+ [],
51
+ )
52
+ : factory.createCallExpression(
53
+ IdentifierFactory.access(
54
+ factory.createIdentifier(SdkImportWizard.typia(importer)),
55
+ "random",
56
+ ),
57
+ [output],
58
+ undefined,
59
+ ),
60
+ ),
61
+ );
62
+ };
63
+
64
+ export const simulate =
65
+ (project: INestiaProject) =>
66
+ (importer: ImportDictionary) =>
67
+ (route: ITypedHttpRoute): Node => {
68
+ const output: boolean =
69
+ project.config.propagate === true ||
70
+ route.success.binary === true ||
71
+ sizeOf(route.success.metadata) !== 0;
72
+ const caller = () =>
73
+ factory.createCallExpression(
74
+ factory.createIdentifier("random"),
75
+ undefined,
76
+ undefined,
77
+ );
78
+ return constant("simulate")(
79
+ factory.createArrowFunction(
80
+ undefined,
81
+ undefined,
82
+ [
83
+ IdentifierFactory.parameter(
84
+ SdkHttpParameterProgrammer.getSignificant(route, true).length !==
85
+ 0
86
+ ? "connection"
87
+ : "_connection",
88
+ factory.createTypeReferenceNode(
89
+ SdkImportWizard.IConnection(importer),
90
+ route.headerObject
91
+ ? [factory.createTypeReferenceNode(`${route.name}.Headers`)]
92
+ : [],
93
+ ),
94
+ ),
95
+ ...(SdkHttpParameterProgrammer.getParameterDeclarations({
96
+ project,
97
+ importer,
98
+ route,
99
+ body: true,
100
+ prefix: false,
101
+ }) as ParameterDeclaration[]),
102
+ ],
103
+ factory.createTypeReferenceNode(output ? "Output" : "void"),
104
+ undefined,
105
+ factory.createBlock(
106
+ [
107
+ ...assert(project)(importer)(route),
108
+ factory.createReturnStatement(
109
+ project.config.propagate
110
+ ? factory.createAsExpression(
111
+ factory.createObjectLiteralExpression(
112
+ [
113
+ factory.createPropertyAssignment(
114
+ "success",
115
+ factory.createTrue(),
116
+ ),
117
+ factory.createPropertyAssignment(
118
+ "status",
119
+ ExpressionFactory.number(
120
+ route.success.status ??
121
+ (route.method === "POST" ? 201 : 200),
122
+ ),
123
+ ),
124
+ factory.createPropertyAssignment(
125
+ "headers",
126
+ LiteralFactory.write({
127
+ "Content-Type": route.success.contentType,
128
+ }),
129
+ ),
130
+ factory.createPropertyAssignment("data", caller()),
131
+ ],
132
+ true,
133
+ ),
134
+ factory.createTypeReferenceNode("Output"),
135
+ )
136
+ : caller(),
137
+ ),
138
+ ],
139
+ true,
140
+ ),
141
+ ),
142
+ );
143
+ };
144
+
145
+ const assert =
146
+ (project: INestiaProject) =>
147
+ (importer: ImportDictionary) =>
148
+ (route: ITypedHttpRoute): Statement[] => {
149
+ const parameters = SdkHttpParameterProgrammer.getSignificant(route, true);
150
+ if (parameters.length === 0) return [];
151
+
152
+ const typia = SdkImportWizard.typia(importer);
153
+ const validator = StatementFactory.constant({
154
+ name: "assert",
155
+ value: factory.createCallExpression(
156
+ IdentifierFactory.access(
157
+ factory.createIdentifier(
158
+ importer.external({
159
+ file: `@nestia/fetcher`,
160
+ declaration: false,
161
+ type: "element",
162
+ name: "NestiaSimulator",
163
+ }),
164
+ ),
165
+ "assert",
166
+ ),
167
+ undefined,
168
+ [
169
+ factory.createObjectLiteralExpression(
170
+ [
171
+ factory.createPropertyAssignment(
172
+ "method",
173
+ factory.createIdentifier("METADATA.method"),
174
+ ),
175
+ factory.createPropertyAssignment(
176
+ "host",
177
+ factory.createIdentifier("connection.host"),
178
+ ),
179
+ factory.createPropertyAssignment(
180
+ "path",
181
+ factory.createCallExpression(
182
+ factory.createIdentifier("path"),
183
+ undefined,
184
+ SdkHttpParameterProgrammer.getArguments({
185
+ project,
186
+ route,
187
+ body: false,
188
+ }) as Expression[],
189
+ ),
190
+ ),
191
+ factory.createPropertyAssignment(
192
+ "contentType",
193
+ factory.createIdentifier(
194
+ JSON.stringify(route.success.contentType),
195
+ ),
196
+ ),
197
+ ],
198
+ true,
199
+ ),
200
+ ],
201
+ ),
202
+ });
203
+ const individual: ExpressionStatement[] = parameters
204
+ .map((p) =>
205
+ factory.createCallExpression(
206
+ (() => {
207
+ const base = IdentifierFactory.access(
208
+ factory.createIdentifier("assert"),
209
+ p.category,
210
+ );
211
+ if (p.category !== "param") return base;
212
+ return factory.createCallExpression(base, undefined, [
213
+ factory.createStringLiteral(p.name),
214
+ ]);
215
+ })(),
216
+ undefined,
217
+ [
218
+ factory.createArrowFunction(
219
+ undefined,
220
+ undefined,
221
+ [],
222
+ undefined,
223
+ undefined,
224
+ factory.createCallExpression(
225
+ IdentifierFactory.access(
226
+ factory.createIdentifier(typia),
227
+ "assert",
228
+ ),
229
+ undefined,
230
+ [
231
+ project.config.keyword === true
232
+ ? factory.createIdentifier(`props.${p.name}`)
233
+ : factory.createIdentifier(p.name),
234
+ ],
235
+ ),
236
+ ),
237
+ ],
238
+ ),
239
+ )
240
+ .map(factory.createExpressionStatement);
241
+ return [
242
+ validator,
243
+ ...(project.config.propagate !== true
244
+ ? individual
245
+ : [tryAndCatch(importer)(individual)]),
246
+ ];
247
+ };
248
+
249
+ const tryAndCatch =
250
+ (importer: ImportDictionary) => (individual: Statement[]) =>
251
+ factory.createTryStatement(
252
+ factory.createBlock(individual, true),
253
+ factory.createCatchClause(
254
+ "exp",
255
+ factory.createBlock(
256
+ [
257
+ factory.createIfStatement(
258
+ factory.createLogicalNot(
259
+ factory.createCallExpression(
260
+ IdentifierFactory.access(
261
+ factory.createIdentifier(SdkImportWizard.typia(importer)),
262
+ "is",
263
+ ),
264
+ [
265
+ factory.createTypeReferenceNode(
266
+ SdkImportWizard.HttpError(importer),
267
+ ),
268
+ ],
269
+ [factory.createIdentifier("exp")],
270
+ ),
271
+ ),
272
+ factory.createThrowStatement(factory.createIdentifier("exp")),
273
+ ),
274
+ factory.createReturnStatement(
275
+ factory.createAsExpression(
276
+ factory.createObjectLiteralExpression(
277
+ [
278
+ factory.createPropertyAssignment(
279
+ "success",
280
+ factory.createFalse(),
281
+ ),
282
+ factory.createPropertyAssignment(
283
+ "status",
284
+ factory.createIdentifier("exp.status"),
285
+ ),
286
+ factory.createPropertyAssignment(
287
+ "headers",
288
+ factory.createIdentifier("exp.headers"),
289
+ ),
290
+ factory.createPropertyAssignment(
291
+ "data",
292
+ factory.createIdentifier("exp.toJSON().message"),
293
+ ),
294
+ ],
295
+ true,
296
+ ),
297
+ TypeFactory.keyword("any"),
298
+ ),
299
+ ),
300
+ ],
301
+ true,
302
+ ),
303
+ ),
304
+ undefined,
305
+ );
306
+ }
307
+
308
+ const constant = (name: string) => (expression: Expression) =>
309
+ factory.createVariableStatement(
310
+ [factory.createModifier(SyntaxKind.ExportKeyword)],
311
+ factory.createVariableDeclarationList(
312
+ [
313
+ factory.createVariableDeclaration(
314
+ factory.createIdentifier(name),
315
+ undefined,
316
+ undefined,
317
+ expression,
318
+ ),
319
+ ],
320
+ NodeFlags.Const,
321
+ ),
322
+ );