@nestia/sdk 3.10.0 → 3.11.0-dev.20240812

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 (279) hide show
  1. package/lib/NestiaSdkApplication.d.ts +1 -3
  2. package/lib/NestiaSdkApplication.js +138 -136
  3. package/lib/NestiaSdkApplication.js.map +1 -1
  4. package/lib/analyses/ConfigAnalyzer.d.ts +2 -2
  5. package/lib/analyses/ConfigAnalyzer.js +39 -80
  6. package/lib/analyses/ConfigAnalyzer.js.map +1 -1
  7. package/lib/analyses/ExceptionAnalyzer.d.ts +0 -16
  8. package/lib/analyses/ExceptionAnalyzer.js +142 -105
  9. package/lib/analyses/ExceptionAnalyzer.js.map +1 -1
  10. package/lib/analyses/GenericAnalyzer.d.ts +1 -2
  11. package/lib/analyses/GenericAnalyzer.js.map +1 -1
  12. package/lib/analyses/ImportAnalyzer.d.ts +6 -11
  13. package/lib/analyses/ImportAnalyzer.js +70 -42
  14. package/lib/analyses/ImportAnalyzer.js.map +1 -1
  15. package/lib/analyses/ReflectControllerAnalyzer.d.ts +7 -1
  16. package/lib/analyses/ReflectControllerAnalyzer.js +28 -99
  17. package/lib/analyses/ReflectControllerAnalyzer.js.map +1 -1
  18. package/lib/analyses/ReflectHttpOperationAnalyzer.d.ts +6 -2
  19. package/lib/analyses/ReflectHttpOperationAnalyzer.js +72 -152
  20. package/lib/analyses/ReflectHttpOperationAnalyzer.js.map +1 -1
  21. package/lib/analyses/ReflectHttpOperationParameterAnalyzer.d.ts +15 -0
  22. package/lib/analyses/ReflectHttpOperationParameterAnalyzer.js +215 -0
  23. package/lib/analyses/ReflectHttpOperationParameterAnalyzer.js.map +1 -0
  24. package/lib/analyses/ReflectHttpOperationResponseAnalyzer.d.ts +15 -0
  25. package/lib/analyses/ReflectHttpOperationResponseAnalyzer.js +81 -0
  26. package/lib/analyses/ReflectHttpOperationResponseAnalyzer.js.map +1 -0
  27. package/lib/analyses/ReflectMetadataAnalyzer.d.ts +1 -3
  28. package/lib/analyses/ReflectMetadataAnalyzer.js +0 -4
  29. package/lib/analyses/ReflectMetadataAnalyzer.js.map +1 -1
  30. package/lib/analyses/ReflectWebSocketOperationAnalyzer.d.ts +6 -2
  31. package/lib/analyses/ReflectWebSocketOperationAnalyzer.js +72 -48
  32. package/lib/analyses/ReflectWebSocketOperationAnalyzer.js.map +1 -1
  33. package/lib/analyses/TypedHttpRouteAnalyzer.d.ts +15 -0
  34. package/lib/analyses/TypedHttpRouteAnalyzer.js +111 -0
  35. package/lib/analyses/TypedHttpRouteAnalyzer.js.map +1 -0
  36. package/lib/analyses/TypedWebSocketRouteAnalyzer.d.ts +10 -0
  37. package/lib/analyses/TypedWebSocketRouteAnalyzer.js +9 -0
  38. package/lib/analyses/TypedWebSocketRouteAnalyzer.js.map +1 -0
  39. package/lib/decorators/OperationMetadata.d.ts +2 -0
  40. package/lib/decorators/OperationMetadata.js +10 -0
  41. package/lib/decorators/OperationMetadata.js.map +1 -0
  42. package/lib/executable/internal/NestiaConfigLoader.d.ts +1 -1
  43. package/lib/executable/internal/NestiaConfigLoader.js +33 -3
  44. package/lib/executable/internal/NestiaConfigLoader.js.map +1 -1
  45. package/lib/executable/internal/NestiaSdkCommand.js +1 -1
  46. package/lib/executable/internal/NestiaSdkCommand.js.map +1 -1
  47. package/lib/generates/CloneGenerator.d.ts +0 -5
  48. package/lib/generates/CloneGenerator.js +60 -60
  49. package/lib/generates/CloneGenerator.js.map +1 -1
  50. package/lib/generates/E2eGenerator.d.ts +2 -3
  51. package/lib/generates/E2eGenerator.js +9 -8
  52. package/lib/generates/E2eGenerator.js.map +1 -1
  53. package/lib/generates/OpenAiGenerator.d.ts +2 -4
  54. package/lib/generates/OpenAiGenerator.js +13 -3
  55. package/lib/generates/OpenAiGenerator.js.map +1 -1
  56. package/lib/generates/SdkGenerator.d.ts +4 -4
  57. package/lib/generates/SdkGenerator.js +63 -73
  58. package/lib/generates/SdkGenerator.js.map +1 -1
  59. package/lib/generates/SwaggerGenerator.d.ts +6 -18
  60. package/lib/generates/SwaggerGenerator.js +60 -235
  61. package/lib/generates/SwaggerGenerator.js.map +1 -1
  62. package/lib/generates/internal/E2eFileProgrammer.js +5 -9
  63. package/lib/generates/internal/E2eFileProgrammer.js.map +1 -1
  64. package/lib/generates/internal/SdkAliasCollection.d.ts +6 -4
  65. package/lib/generates/internal/SdkAliasCollection.js +33 -31
  66. package/lib/generates/internal/SdkAliasCollection.js.map +1 -1
  67. package/lib/generates/internal/SdkDistributionComposer.d.ts +4 -1
  68. package/lib/generates/internal/SdkDistributionComposer.js +6 -6
  69. package/lib/generates/internal/SdkDistributionComposer.js.map +1 -1
  70. package/lib/generates/internal/SdkFileProgrammer.d.ts +2 -4
  71. package/lib/generates/internal/SdkFileProgrammer.js +6 -6
  72. package/lib/generates/internal/SdkFileProgrammer.js.map +1 -1
  73. package/lib/generates/internal/SdkHttpCloneProgrammer.d.ts +0 -12
  74. package/lib/generates/internal/SdkHttpCloneProgrammer.js +142 -97
  75. package/lib/generates/internal/SdkHttpCloneProgrammer.js.map +1 -1
  76. package/lib/generates/internal/SdkHttpFunctionProgrammer.d.ts +4 -3
  77. package/lib/generates/internal/SdkHttpFunctionProgrammer.js +37 -59
  78. package/lib/generates/internal/SdkHttpFunctionProgrammer.js.map +1 -1
  79. package/lib/generates/internal/SdkHttpNamespaceProgrammer.d.ts +4 -3
  80. package/lib/generates/internal/SdkHttpNamespaceProgrammer.js +31 -48
  81. package/lib/generates/internal/SdkHttpNamespaceProgrammer.js.map +1 -1
  82. package/lib/generates/internal/SdkHttpRouteProgrammer.js +7 -3
  83. package/lib/generates/internal/SdkHttpRouteProgrammer.js.map +1 -1
  84. package/lib/generates/internal/SdkHttpSimulationProgrammer.d.ts +4 -3
  85. package/lib/generates/internal/SdkHttpSimulationProgrammer.js +7 -13
  86. package/lib/generates/internal/SdkHttpSimulationProgrammer.js.map +1 -1
  87. package/lib/generates/internal/SdkWebSocketNamespaceProgrammer.d.ts +1 -2
  88. package/lib/generates/internal/SdkWebSocketNamespaceProgrammer.js +11 -16
  89. package/lib/generates/internal/SdkWebSocketNamespaceProgrammer.js.map +1 -1
  90. package/lib/generates/internal/SdkWebSocketRouteProgrammer.d.ts +1 -2
  91. package/lib/generates/internal/SdkWebSocketRouteProgrammer.js +7 -10
  92. package/lib/generates/internal/SdkWebSocketRouteProgrammer.js.map +1 -1
  93. package/lib/generates/internal/SwaggerDescriptionComposer.d.ts +23 -0
  94. package/lib/generates/internal/SwaggerDescriptionComposer.js +44 -0
  95. package/lib/generates/internal/SwaggerDescriptionComposer.js.map +1 -0
  96. package/lib/generates/internal/SwaggerOperationComposer.d.ts +12 -0
  97. package/lib/generates/internal/SwaggerOperationComposer.js +68 -0
  98. package/lib/generates/internal/SwaggerOperationComposer.js.map +1 -0
  99. package/lib/generates/internal/SwaggerOperationParameterComposer.d.ts +18 -0
  100. package/lib/generates/internal/SwaggerOperationParameterComposer.js +99 -0
  101. package/lib/generates/internal/SwaggerOperationParameterComposer.js.map +1 -0
  102. package/lib/generates/internal/SwaggerOperationResponseComposer.d.ts +9 -0
  103. package/lib/generates/internal/SwaggerOperationResponseComposer.js +91 -0
  104. package/lib/generates/internal/SwaggerOperationResponseComposer.js.map +1 -0
  105. package/lib/structures/INestiaProject.d.ts +5 -5
  106. package/lib/structures/INestiaSdkInput.d.ts +20 -0
  107. package/lib/structures/{ISwaggerError.js → INestiaSdkInput.js} +1 -1
  108. package/lib/structures/INestiaSdkInput.js.map +1 -0
  109. package/lib/structures/IReflectApplication.d.ts +6 -0
  110. package/lib/structures/IReflectApplication.js +3 -0
  111. package/lib/structures/IReflectApplication.js.map +1 -0
  112. package/lib/structures/IReflectController.d.ts +3 -5
  113. package/lib/structures/IReflectHttpOperation.d.ts +13 -65
  114. package/lib/structures/IReflectHttpOperationException.d.ts +14 -0
  115. package/lib/structures/IReflectHttpOperationException.js +3 -0
  116. package/lib/structures/IReflectHttpOperationException.js.map +1 -0
  117. package/lib/structures/IReflectHttpOperationParameter.d.ts +35 -0
  118. package/lib/structures/IReflectHttpOperationParameter.js +3 -0
  119. package/lib/structures/IReflectHttpOperationParameter.js.map +1 -0
  120. package/lib/structures/IReflectHttpOperationSuccess.d.ts +15 -0
  121. package/lib/structures/IReflectHttpOperationSuccess.js +3 -0
  122. package/lib/structures/IReflectHttpOperationSuccess.js.map +1 -0
  123. package/lib/structures/IReflectOperationError.d.ts +16 -0
  124. package/lib/structures/IReflectOperationError.js +23 -0
  125. package/lib/structures/IReflectOperationError.js.map +1 -0
  126. package/lib/structures/IReflectType.d.ts +4 -0
  127. package/lib/structures/{IErrorReport.js → IReflectType.js} +1 -1
  128. package/lib/structures/IReflectType.js.map +1 -0
  129. package/lib/structures/IReflectTypeImport.d.ts +4 -0
  130. package/lib/structures/{ISwaggerLazySchema.js → IReflectTypeImport.js} +1 -1
  131. package/lib/structures/IReflectTypeImport.js.map +1 -0
  132. package/lib/structures/IReflectWebSocketOperation.d.ts +8 -9
  133. package/lib/structures/IReflectWebSocketOperationParameter.d.ts +23 -0
  134. package/lib/structures/IReflectWebSocketOperationParameter.js +3 -0
  135. package/lib/structures/IReflectWebSocketOperationParameter.js.map +1 -0
  136. package/lib/structures/ITypedApplication.d.ts +7 -0
  137. package/lib/structures/{INormalizedInput.js → ITypedApplication.js} +1 -1
  138. package/lib/structures/ITypedApplication.js.map +1 -0
  139. package/lib/structures/ITypedHttpRoute.d.ts +14 -42
  140. package/lib/structures/ITypedHttpRouteException.d.ts +10 -0
  141. package/lib/structures/ITypedHttpRouteException.js +3 -0
  142. package/lib/structures/ITypedHttpRouteException.js.map +1 -0
  143. package/lib/structures/ITypedHttpRouteParameter.d.ts +31 -0
  144. package/lib/structures/ITypedHttpRouteParameter.js +3 -0
  145. package/lib/structures/ITypedHttpRouteParameter.js.map +1 -0
  146. package/lib/structures/ITypedHttpRouteSuccess.d.ts +19 -0
  147. package/lib/structures/{ISwaggerLazyProperty.js → ITypedHttpRouteSuccess.js} +1 -1
  148. package/lib/structures/ITypedHttpRouteSuccess.js.map +1 -0
  149. package/lib/structures/ITypedWebSocketRoute.d.ts +8 -44
  150. package/lib/structures/ITypedWebSocketRouteParameter.d.ts +2 -0
  151. package/lib/structures/ITypedWebSocketRouteParameter.js +3 -0
  152. package/lib/structures/ITypedWebSocketRouteParameter.js.map +1 -0
  153. package/lib/transform.d.ts +3 -0
  154. package/lib/transform.js +8 -0
  155. package/lib/transform.js.map +1 -0
  156. package/lib/transformers/IOperationMetadata.d.ts +36 -0
  157. package/lib/transformers/IOperationMetadata.js +3 -0
  158. package/lib/transformers/IOperationMetadata.js.map +1 -0
  159. package/lib/transformers/ISdkTransformerContext.d.ts +7 -0
  160. package/lib/transformers/ISdkTransformerContext.js +3 -0
  161. package/lib/transformers/ISdkTransformerContext.js.map +1 -0
  162. package/lib/transformers/SdkMetadataProgrammer.d.ts +11 -0
  163. package/lib/transformers/SdkMetadataProgrammer.js +159 -0
  164. package/lib/transformers/SdkMetadataProgrammer.js.map +1 -0
  165. package/lib/transformers/SdkTransformer.d.ts +4 -0
  166. package/lib/transformers/SdkTransformer.js +88 -0
  167. package/lib/transformers/SdkTransformer.js.map +1 -0
  168. package/lib/transformers/TextPlainValidator.d.ts +4 -0
  169. package/lib/transformers/TextPlainValidator.js +19 -0
  170. package/lib/transformers/TextPlainValidator.js.map +1 -0
  171. package/lib/utils/StringUtil.d.ts +1 -0
  172. package/lib/utils/StringUtil.js +1 -0
  173. package/lib/utils/StringUtil.js.map +1 -1
  174. package/package.json +8 -8
  175. package/src/NestiaSdkApplication.ts +173 -160
  176. package/src/analyses/ConfigAnalyzer.ts +50 -98
  177. package/src/analyses/ExceptionAnalyzer.ts +142 -142
  178. package/src/analyses/GenericAnalyzer.ts +3 -5
  179. package/src/analyses/ImportAnalyzer.ts +130 -115
  180. package/src/analyses/ReflectControllerAnalyzer.ts +63 -115
  181. package/src/analyses/ReflectHttpOperationAnalyzer.ts +142 -278
  182. package/src/analyses/ReflectHttpOperationParameterAnalyzer.ts +319 -0
  183. package/src/analyses/ReflectHttpOperationResponseAnalyzer.ts +117 -0
  184. package/src/analyses/ReflectMetadataAnalyzer.ts +1 -18
  185. package/src/analyses/ReflectWebSocketOperationAnalyzer.ts +143 -78
  186. package/src/analyses/TypedHttpRouteAnalyzer.ts +178 -0
  187. package/src/analyses/TypedWebSocketRouteAnalyzer.ts +18 -0
  188. package/src/decorators/OperationMetadata.ts +15 -0
  189. package/src/executable/internal/NestiaConfigLoader.ts +17 -3
  190. package/src/executable/internal/NestiaSdkCommand.ts +1 -4
  191. package/src/generates/CloneGenerator.ts +60 -59
  192. package/src/generates/E2eGenerator.ts +20 -21
  193. package/src/generates/OpenAiGenerator.ts +44 -45
  194. package/src/generates/SdkGenerator.ts +97 -125
  195. package/src/generates/SwaggerGenerator.ts +114 -416
  196. package/src/generates/internal/E2eFileProgrammer.ts +5 -14
  197. package/src/generates/internal/SdkAliasCollection.ts +33 -41
  198. package/src/generates/internal/SdkDistributionComposer.ts +9 -6
  199. package/src/generates/internal/SdkFileProgrammer.ts +11 -14
  200. package/src/generates/internal/SdkHttpCloneProgrammer.ts +142 -142
  201. package/src/generates/internal/SdkHttpFunctionProgrammer.ts +20 -47
  202. package/src/generates/internal/SdkHttpNamespaceProgrammer.ts +245 -275
  203. package/src/generates/internal/SdkHttpRouteProgrammer.ts +7 -7
  204. package/src/generates/internal/SdkHttpSimulationProgrammer.ts +11 -23
  205. package/src/generates/internal/SdkWebSocketNamespaceProgrammer.ts +197 -233
  206. package/src/generates/internal/SdkWebSocketRouteProgrammer.ts +5 -15
  207. package/src/generates/internal/{SwaggerDescriptionGenerator.ts → SwaggerDescriptionComposer.ts} +25 -5
  208. package/src/generates/internal/SwaggerOperationComposer.ts +90 -0
  209. package/src/generates/internal/SwaggerOperationParameterComposer.ts +173 -0
  210. package/src/generates/internal/SwaggerOperationResponseComposer.ts +110 -0
  211. package/src/structures/INestiaProject.ts +5 -5
  212. package/src/structures/INestiaSdkInput.ts +25 -0
  213. package/src/structures/IReflectApplication.ts +8 -0
  214. package/src/structures/IReflectController.ts +3 -5
  215. package/src/structures/IReflectHttpOperation.ts +14 -76
  216. package/src/structures/IReflectHttpOperationException.ts +19 -0
  217. package/src/structures/IReflectHttpOperationParameter.ts +81 -0
  218. package/src/structures/IReflectHttpOperationSuccess.ts +22 -0
  219. package/src/structures/IReflectOperationError.ts +26 -0
  220. package/src/structures/IReflectType.ts +4 -0
  221. package/src/structures/IReflectTypeImport.ts +4 -0
  222. package/src/structures/IReflectWebSocketOperation.ts +9 -9
  223. package/src/structures/IReflectWebSocketOperationParameter.ts +38 -0
  224. package/src/structures/ITypedApplication.ts +8 -0
  225. package/src/structures/ITypedHttpRoute.ts +15 -45
  226. package/src/structures/ITypedHttpRouteException.ts +15 -0
  227. package/src/structures/ITypedHttpRouteParameter.ts +41 -0
  228. package/src/structures/ITypedHttpRouteSuccess.ts +22 -0
  229. package/src/structures/ITypedWebSocketRoute.ts +8 -56
  230. package/src/structures/ITypedWebSocketRouteParameter.ts +3 -0
  231. package/src/transform.ts +9 -0
  232. package/src/transformers/IOperationMetadata.ts +38 -0
  233. package/src/transformers/ISdkTransformerContext.ts +8 -0
  234. package/src/transformers/SdkMetadataProgrammer.ts +227 -0
  235. package/src/transformers/SdkTransformer.ts +168 -0
  236. package/src/transformers/TextPlainValidator.ts +17 -0
  237. package/src/utils/StringUtil.ts +3 -0
  238. package/lib/analyses/TypedControllerAnalyzer.d.ts +0 -8
  239. package/lib/analyses/TypedControllerAnalyzer.js +0 -77
  240. package/lib/analyses/TypedControllerAnalyzer.js.map +0 -1
  241. package/lib/analyses/TypedHttpOperationAnalyzer.d.ts +0 -15
  242. package/lib/analyses/TypedHttpOperationAnalyzer.js +0 -263
  243. package/lib/analyses/TypedHttpOperationAnalyzer.js.map +0 -1
  244. package/lib/analyses/TypedWebSocketOperationAnalyzer.d.ts +0 -15
  245. package/lib/analyses/TypedWebSocketOperationAnalyzer.js +0 -226
  246. package/lib/analyses/TypedWebSocketOperationAnalyzer.js.map +0 -1
  247. package/lib/generates/internal/SwaggerDescriptionGenerator.d.ts +0 -14
  248. package/lib/generates/internal/SwaggerDescriptionGenerator.js +0 -33
  249. package/lib/generates/internal/SwaggerDescriptionGenerator.js.map +0 -1
  250. package/lib/generates/internal/SwaggerSchemaGenerator.d.ts +0 -21
  251. package/lib/generates/internal/SwaggerSchemaGenerator.js +0 -289
  252. package/lib/generates/internal/SwaggerSchemaGenerator.js.map +0 -1
  253. package/lib/generates/internal/SwaggerSchemaValidator.d.ts +0 -7
  254. package/lib/generates/internal/SwaggerSchemaValidator.js +0 -191
  255. package/lib/generates/internal/SwaggerSchemaValidator.js.map +0 -1
  256. package/lib/structures/IErrorReport.d.ts +0 -6
  257. package/lib/structures/IErrorReport.js.map +0 -1
  258. package/lib/structures/INormalizedInput.d.ts +0 -19
  259. package/lib/structures/INormalizedInput.js.map +0 -1
  260. package/lib/structures/ISwaggerError.d.ts +0 -6
  261. package/lib/structures/ISwaggerError.js.map +0 -1
  262. package/lib/structures/ISwaggerLazyProperty.d.ts +0 -6
  263. package/lib/structures/ISwaggerLazyProperty.js.map +0 -1
  264. package/lib/structures/ISwaggerLazySchema.d.ts +0 -6
  265. package/lib/structures/ISwaggerLazySchema.js.map +0 -1
  266. package/lib/structures/ITypeTuple.d.ts +0 -5
  267. package/lib/structures/ITypeTuple.js +0 -3
  268. package/lib/structures/ITypeTuple.js.map +0 -1
  269. package/src/analyses/TypedControllerAnalyzer.ts +0 -92
  270. package/src/analyses/TypedHttpOperationAnalyzer.ts +0 -365
  271. package/src/analyses/TypedWebSocketOperationAnalyzer.ts +0 -375
  272. package/src/generates/internal/SwaggerSchemaGenerator.ts +0 -473
  273. package/src/generates/internal/SwaggerSchemaValidator.ts +0 -206
  274. package/src/structures/IErrorReport.ts +0 -6
  275. package/src/structures/INormalizedInput.ts +0 -20
  276. package/src/structures/ISwaggerError.ts +0 -8
  277. package/src/structures/ISwaggerLazyProperty.ts +0 -7
  278. package/src/structures/ISwaggerLazySchema.ts +0 -7
  279. package/src/structures/ITypeTuple.ts +0 -6
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReflectHttpOperationParameterAnalyzer = void 0;
4
+ const constants_1 = require("@nestjs/common/constants");
5
+ const route_paramtypes_enum_1 = require("@nestjs/common/enums/route-paramtypes.enum");
6
+ const JsonMetadataFactory_1 = require("typia/lib/factories/JsonMetadataFactory");
7
+ const HttpFormDataProgrammer_1 = require("typia/lib/programmers/http/HttpFormDataProgrammer");
8
+ const HttpHeadersProgrammer_1 = require("typia/lib/programmers/http/HttpHeadersProgrammer");
9
+ const HttpParameterProgrammer_1 = require("typia/lib/programmers/http/HttpParameterProgrammer");
10
+ const HttpQueryProgrammer_1 = require("typia/lib/programmers/http/HttpQueryProgrammer");
11
+ const TextPlainValidator_1 = require("../transformers/TextPlainValidator");
12
+ var ReflectHttpOperationParameterAnalyzer;
13
+ (function (ReflectHttpOperationParameterAnalyzer) {
14
+ ReflectHttpOperationParameterAnalyzer.analyze = (ctx) => {
15
+ const preconfigured = analyzePreconfigured(ctx);
16
+ const imports = [];
17
+ const errors = [];
18
+ //----
19
+ // FIND CONTRADICTIONS
20
+ //----
21
+ // GET AND HEAD METHOD
22
+ const contradictErrors = [];
23
+ const contradict = (message) => {
24
+ contradictErrors.push(message);
25
+ };
26
+ if ((ctx.httpMethod === "GET" || ctx.httpMethod === "HEAD") &&
27
+ preconfigured.some((x) => x.category === "body"))
28
+ contradict(`@Body() is not allowed in the ${ctx.httpMethod} method.`);
29
+ // FIND DUPLICATED BODY
30
+ if (preconfigured.filter((x) => x.category === "body" && x.field === undefined).length > 1)
31
+ contradict(`Duplicated @Body() is not allowed.`);
32
+ if (preconfigured.filter((x) => x.category === "query" && x.field === undefined).length > 1)
33
+ contradict(`Duplicated @Query() without field name is not allowed.`);
34
+ if (preconfigured.filter((x) => x.category === "headers" && x.field === undefined).length > 1)
35
+ contradict(`Duplicated @Headers() without field name is not allowed.`);
36
+ // FIND DUPLICATED FIELDS
37
+ if (isUnique(preconfigured
38
+ .filter((x) => x.category === "param")
39
+ .map((x) => x.field)
40
+ .filter((field) => field !== undefined)) === false)
41
+ contradict(`Duplicated field names of path are not allowed.`);
42
+ if (isUnique(preconfigured
43
+ .filter((x) => x.category === "query")
44
+ .map((x) => x.field)
45
+ .filter((field) => field !== undefined)) === false)
46
+ contradict(`Duplicated field names of query are not allowed.`);
47
+ if (isUnique(preconfigured
48
+ .filter((x) => x.category === "headers")
49
+ .map((x) => x.field)
50
+ .filter((field) => field !== undefined)) === false)
51
+ contradict(`Duplicated field names of headers are not allowed.`);
52
+ if (contradictErrors.length)
53
+ errors.push({
54
+ file: ctx.controller.file,
55
+ class: ctx.controller.class.name,
56
+ function: ctx.functionName,
57
+ from: "",
58
+ contents: contradictErrors,
59
+ });
60
+ //----
61
+ // COMPOSE PARAMETERS
62
+ //----
63
+ const parameters = preconfigured
64
+ .map((p) => {
65
+ var _a;
66
+ // METADATA INFO
67
+ const pErrorContents = [];
68
+ const matched = ctx.metadata.parameters.find((x) => x.index === p.index);
69
+ const report = () => {
70
+ errors.push({
71
+ file: ctx.controller.file,
72
+ class: ctx.controller.class.name,
73
+ function: ctx.functionName,
74
+ from: `parameter ${matched ? JSON.stringify(matched.name) : `of ${p.index} th`}`,
75
+ contents: pErrorContents,
76
+ });
77
+ return null;
78
+ };
79
+ // VALIDATE TYPE
80
+ if (matched === undefined)
81
+ pErrorContents.push(`Unable to find parameter type.`);
82
+ else if (matched.type === null)
83
+ pErrorContents.push(`Failed to get the type info.`);
84
+ // CONSIDER KIND
85
+ const schema = (() => {
86
+ if (matched === undefined)
87
+ return null;
88
+ const result = p.category === "body" &&
89
+ (p.contentType === "application/json" || p.encrypted === true)
90
+ ? matched.primitive
91
+ : matched.resolved;
92
+ return result.success ? result.data : null;
93
+ })();
94
+ if (p.category === "body" && p.field !== undefined)
95
+ pErrorContents.push(`@Body() must not have a field name.`);
96
+ else if (p.category === "param" && p.field === undefined)
97
+ pErrorContents.push(`@Param() must have a field name.`);
98
+ if (pErrorContents.length)
99
+ return report();
100
+ else if (matched === undefined ||
101
+ matched.type === null ||
102
+ schema === null)
103
+ return null; // unreachable
104
+ // COMPOSITION
105
+ imports.push(...matched.imports);
106
+ if (p.category === "param")
107
+ return Object.assign({ category: p.category, index: p.index, field: p.field, name: matched.name, type: matched.type, validate: HttpParameterProgrammer_1.HttpParameterProgrammer.validate, description: matched.description, jsDocTags: matched.jsDocTags }, schema);
108
+ else if (p.category === "query" || p.category === "headers")
109
+ return Object.assign({ category: p.category, index: p.index, field: (_a = p.field) !== null && _a !== void 0 ? _a : null, name: matched.name, type: matched.type, validate: p.category === "query"
110
+ ? HttpQueryProgrammer_1.HttpQueryProgrammer.validate
111
+ : HttpHeadersProgrammer_1.HttpHeadersProgrammer.validate, description: matched.description, jsDocTags: matched.jsDocTags }, schema);
112
+ else if (p.category === "body")
113
+ return Object.assign({ category: p.category, index: p.index, encrypted: !!p.encrypted, contentType: p.contentType, name: matched.name, type: matched.type, validate: p.contentType === "application/json" || p.encrypted === true
114
+ ? JsonMetadataFactory_1.JsonMetadataFactory.validate
115
+ : p.contentType === "application/x-www-form-urlencoded"
116
+ ? HttpQueryProgrammer_1.HttpQueryProgrammer.validate
117
+ : p.contentType === "multipart/form-data"
118
+ ? HttpFormDataProgrammer_1.HttpFormDataProgrammer.validate
119
+ : TextPlainValidator_1.TextPlainValidator.validate, description: matched.description, jsDocTags: matched.jsDocTags }, schema);
120
+ else {
121
+ pErrorContents.push(`Unknown kind of the parameter.`);
122
+ return report();
123
+ }
124
+ })
125
+ .filter((x) => x !== null);
126
+ if (errors.length)
127
+ ctx.errors.push(...errors);
128
+ return parameters;
129
+ };
130
+ const analyzePreconfigured = (props) => {
131
+ const dict = Reflect.getMetadata(constants_1.ROUTE_ARGS_METADATA, props.controller.class, props.functionName);
132
+ if (dict === undefined)
133
+ return [];
134
+ return Object.entries(dict)
135
+ .map(([key, param]) => analyzeHttpParameter(key, param))
136
+ .filter((x) => x !== null)
137
+ .sort((x, y) => x.index - y.index);
138
+ };
139
+ const analyzeHttpParameter = (key, param) => {
140
+ const symbol = key.split(":")[0];
141
+ if (symbol.indexOf("__custom") !== -1)
142
+ return analyzeCustomParameter(param);
143
+ const category = getNestParamType(Number(symbol[0]));
144
+ if (category === null)
145
+ return null;
146
+ if (category === "body")
147
+ return {
148
+ category: "body",
149
+ index: param.index,
150
+ field: param.data,
151
+ contentType: "application/json",
152
+ };
153
+ else
154
+ return {
155
+ category,
156
+ index: param.index,
157
+ field: param.data,
158
+ };
159
+ };
160
+ const analyzeCustomParameter = (param) => {
161
+ if (param.factory === undefined)
162
+ return null;
163
+ else if (param.factory.name === "EncryptedBody" ||
164
+ param.factory.name === "PlainBody" ||
165
+ param.factory.name === "TypedQueryBody" ||
166
+ param.factory.name === "TypedBody" ||
167
+ param.factory.name === "TypedFormDataBody")
168
+ return {
169
+ category: "body",
170
+ index: param.index,
171
+ encrypted: param.factory.name === "EncryptedBody",
172
+ contentType: param.factory.name === "PlainBody" ||
173
+ param.factory.name === "EncryptedBody"
174
+ ? "text/plain"
175
+ : param.factory.name === "TypedQueryBody"
176
+ ? "application/x-www-form-urlencoded"
177
+ : param.factory.name === "TypedFormDataBody"
178
+ ? "multipart/form-data"
179
+ : "application/json",
180
+ };
181
+ else if (param.factory.name === "TypedHeaders")
182
+ return {
183
+ category: "headers",
184
+ index: param.index,
185
+ field: param.data,
186
+ };
187
+ else if (param.factory.name === "TypedParam")
188
+ return {
189
+ category: "param",
190
+ index: param.index,
191
+ field: param.data,
192
+ };
193
+ else if (param.factory.name === "TypedQuery")
194
+ return {
195
+ category: "query",
196
+ index: param.index,
197
+ field: undefined,
198
+ };
199
+ else
200
+ return null;
201
+ };
202
+ const isUnique = (values) => new Set(values).size === values.length;
203
+ })(ReflectHttpOperationParameterAnalyzer || (exports.ReflectHttpOperationParameterAnalyzer = ReflectHttpOperationParameterAnalyzer = {}));
204
+ const getNestParamType = (value) => {
205
+ if (value === route_paramtypes_enum_1.RouteParamtypes.BODY)
206
+ return "body";
207
+ else if (value === route_paramtypes_enum_1.RouteParamtypes.HEADERS)
208
+ return "headers";
209
+ else if (value === route_paramtypes_enum_1.RouteParamtypes.QUERY)
210
+ return "query";
211
+ else if (value === route_paramtypes_enum_1.RouteParamtypes.PARAM)
212
+ return "param";
213
+ return null;
214
+ };
215
+ //# sourceMappingURL=ReflectHttpOperationParameterAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReflectHttpOperationParameterAnalyzer.js","sourceRoot":"","sources":["../../src/analyses/ReflectHttpOperationParameterAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { IReflectController } from "../structures/IReflectController";
2
+ import { IReflectHttpOperationSuccess } from "../structures/IReflectHttpOperationSuccess";
3
+ import { IReflectOperationError } from "../structures/IReflectOperationError";
4
+ import { IOperationMetadata } from "../transformers/IOperationMetadata";
5
+ export declare namespace ReflectHttpOperationResponseAnalyzer {
6
+ interface IContext {
7
+ controller: IReflectController;
8
+ function: Function;
9
+ functionName: string;
10
+ httpMethod: string;
11
+ metadata: IOperationMetadata;
12
+ errors: IReflectOperationError[];
13
+ }
14
+ const analyze: (ctx: IContext) => IReflectHttpOperationSuccess | null;
15
+ }
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ReflectHttpOperationResponseAnalyzer = void 0;
7
+ const constants_1 = require("@nestjs/common/constants");
8
+ const typia_1 = __importDefault(require("typia"));
9
+ const JsonMetadataFactory_1 = require("typia/lib/factories/JsonMetadataFactory");
10
+ const HttpQueryProgrammer_1 = require("typia/lib/programmers/http/HttpQueryProgrammer");
11
+ const TextPlainValidator_1 = require("../transformers/TextPlainValidator");
12
+ var ReflectHttpOperationResponseAnalyzer;
13
+ (function (ReflectHttpOperationResponseAnalyzer) {
14
+ ReflectHttpOperationResponseAnalyzer.analyze = (ctx) => {
15
+ var _a, _b, _c, _d;
16
+ const errors = [];
17
+ const report = () => {
18
+ ctx.errors.push({
19
+ file: ctx.controller.file,
20
+ class: ctx.controller.class.name,
21
+ function: ctx.functionName,
22
+ from: "return",
23
+ contents: errors,
24
+ });
25
+ return null;
26
+ };
27
+ const encrypted = hasInterceptor({
28
+ name: "EncryptedRouteInterceptor",
29
+ function: ctx.function,
30
+ });
31
+ const contentType = encrypted
32
+ ? "text/plain"
33
+ : hasInterceptor({
34
+ name: "TypedQueryRouteInterceptor",
35
+ function: ctx.function,
36
+ })
37
+ ? "application/x-www-form-urlencoded"
38
+ : (_c = (_b = (_a = Reflect.getMetadata(constants_1.HEADERS_METADATA, ctx.function)) === null || _a === void 0 ? void 0 : _a.find((h) => typeof (h === null || h === void 0 ? void 0 : h.name) === "string" &&
39
+ typeof (h === null || h === void 0 ? void 0 : h.value) === "string" &&
40
+ h.name.toLowerCase() === "content-type")) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : (ctx.httpMethod === "HEAD" ? null : "application/json");
41
+ const schema = contentType === "application/json"
42
+ ? ctx.metadata.success.primitive
43
+ : ctx.metadata.success.resolved;
44
+ if (schema.success === false)
45
+ errors.push(...schema.errors);
46
+ if (ctx.httpMethod === "HEAD" && contentType !== null)
47
+ errors.push(`HEAD method must not have a content type.`);
48
+ if ((() => { return input => null === input || "application/json" === input || "application/x-www-form-urlencoded" === input || "text/plain" === input; })()(contentType) ===
49
+ false)
50
+ errors.push(`@nestia/sdk does not support ${JSON.stringify(contentType)} content type.`);
51
+ if (errors.length)
52
+ return report();
53
+ else if (ctx.metadata.success.type === null ||
54
+ schema.success === false ||
55
+ !(() => { return input => null === input || "application/json" === input || "application/x-www-form-urlencoded" === input || "text/plain" === input; })()(contentType))
56
+ return null;
57
+ return Object.assign(Object.assign({ contentType: contentType, encrypted, status: (_d = getStatus(ctx.function)) !== null && _d !== void 0 ? _d : (ctx.httpMethod === "POST" ? 201 : 200), type: ctx.metadata.success.type }, schema.data), { validate: contentType === "application/json" || encrypted === true
58
+ ? JsonMetadataFactory_1.JsonMetadataFactory.validate
59
+ : contentType === "application/x-www-form-urlencoded"
60
+ ? HttpQueryProgrammer_1.HttpQueryProgrammer.validate
61
+ : contentType === "text/plain"
62
+ ? TextPlainValidator_1.TextPlainValidator.validate
63
+ : (meta) => meta.size()
64
+ ? ["HEAD method must not have any return value."]
65
+ : [] });
66
+ };
67
+ const getStatus = (func) => {
68
+ const text = Reflect.getMetadata(constants_1.HTTP_CODE_METADATA, func);
69
+ if (text === undefined)
70
+ return null;
71
+ const value = Number(text);
72
+ return isNaN(value) ? null : value;
73
+ };
74
+ const hasInterceptor = (props) => {
75
+ const meta = Reflect.getMetadata(constants_1.INTERCEPTORS_METADATA, props.function);
76
+ if (Array.isArray(meta) === false)
77
+ return false;
78
+ return meta.some((elem) => { var _a; return ((_a = elem === null || elem === void 0 ? void 0 : elem.constructor) === null || _a === void 0 ? void 0 : _a.name) === props.name; });
79
+ };
80
+ })(ReflectHttpOperationResponseAnalyzer || (exports.ReflectHttpOperationResponseAnalyzer = ReflectHttpOperationResponseAnalyzer = {}));
81
+ //# sourceMappingURL=ReflectHttpOperationResponseAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReflectHttpOperationResponseAnalyzer.js","sourceRoot":"","sources":["../../src/analyses/ReflectHttpOperationResponseAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,6 @@
1
1
  import { VERSION_NEUTRAL } from "@nestjs/common";
2
- import { IReflectHttpOperation } from "../structures/IReflectHttpOperation";
3
2
  export declare namespace ReflectMetadataAnalyzer {
4
- const exceptions: (value: any) => Record<number | "2XX" | "3XX" | "4XX" | "5XX", IReflectHttpOperation.IException>;
5
- const paths: (target: any) => string[];
3
+ const paths: (target: Function) => string[];
6
4
  const securities: (value: any) => Record<string, string[]>[];
7
5
  const versions: (target: any) => Array<string | typeof VERSION_NEUTRAL> | undefined;
8
6
  }
@@ -5,10 +5,6 @@ const constants_1 = require("@nestjs/common/constants");
5
5
  const SecurityAnalyzer_1 = require("./SecurityAnalyzer");
6
6
  var ReflectMetadataAnalyzer;
7
7
  (function (ReflectMetadataAnalyzer) {
8
- ReflectMetadataAnalyzer.exceptions = (value) => {
9
- const entire = Reflect.getMetadata("nestia/TypedException", value);
10
- return Object.fromEntries((entire !== null && entire !== void 0 ? entire : []).map((exp) => [exp.status, exp]));
11
- };
12
8
  ReflectMetadataAnalyzer.paths = (target) => {
13
9
  const value = Reflect.getMetadata(constants_1.PATH_METADATA, target);
14
10
  if (typeof value === "string")
@@ -1 +1 @@
1
- {"version":3,"file":"ReflectMetadataAnalyzer.js","sourceRoot":"","sources":["../../src/analyses/ReflectMetadataAnalyzer.ts"],"names":[],"mappings":";;;AACA,wDAA2E;AAI3E,yDAAsD;AAEtD,IAAiB,uBAAuB,CA6CvC;AA7CD,WAAiB,uBAAuB;IACzB,kCAAU,GAAG,CACxB,KAAU,EAIV,EAAE;QACF,MAAM,MAAM,GACV,OAAO,CAAC,WAAW,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC,WAAW,CACvB,CAAC,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAI/C,CAAC;IACJ,CAAC,CAAC;IAEW,6BAAK,GAAG,CAAC,MAAW,EAAY,EAAE;QAC7C,MAAM,KAAK,GAAsB,OAAO,CAAC,WAAW,CAAC,yBAAa,EAAE,MAAM,CAAC,CAAC;QAC5E,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,CAAC,KAAK,CAAC,CAAC;aACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,EAAE,CAAC,CAAC;;YACpC,OAAO,KAAK,CAAC;IACpB,CAAC,CAAC;IAEW,kCAAU,GAAG,CAAC,KAAU,EAA8B,EAAE;QACnE,MAAM,MAAM,GAA2C,OAAO,CAAC,WAAW,CACxE,qBAAqB,EACrB,KAAK,CACN,CAAC;QACF,OAAO,MAAM,CAAC,CAAC,CAAC,mCAAgB,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,CAAC,CAAC;IAEW,gCAAQ,GAAG,CACtB,MAAW,EACyC,EAAE;QACtD,MAAM,KAAK,GAA6B,OAAO,CAAC,WAAW,CACzD,4BAAgB,EAChB,MAAM,CACP,CAAC;QACF,OAAO,KAAK,KAAK,SAAS;YACxB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACpB,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC,EA7CgB,uBAAuB,uCAAvB,uBAAuB,QA6CvC"}
1
+ {"version":3,"file":"ReflectMetadataAnalyzer.js","sourceRoot":"","sources":["../../src/analyses/ReflectMetadataAnalyzer.ts"],"names":[],"mappings":";;;AACA,wDAA2E;AAG3E,yDAAsD;AAEtD,IAAiB,uBAAuB,CA6BvC;AA7BD,WAAiB,uBAAuB;IACzB,6BAAK,GAAG,CAAC,MAAgB,EAAY,EAAE;QAClD,MAAM,KAAK,GAAsB,OAAO,CAAC,WAAW,CAAC,yBAAa,EAAE,MAAM,CAAC,CAAC;QAC5E,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,CAAC,KAAK,CAAC,CAAC;aACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,EAAE,CAAC,CAAC;;YACpC,OAAO,KAAK,CAAC;IACpB,CAAC,CAAC;IAEW,kCAAU,GAAG,CAAC,KAAU,EAA8B,EAAE;QACnE,MAAM,MAAM,GAA2C,OAAO,CAAC,WAAW,CACxE,qBAAqB,EACrB,KAAK,CACN,CAAC;QACF,OAAO,MAAM,CAAC,CAAC,CAAC,mCAAgB,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,CAAC,CAAC;IAEW,gCAAQ,GAAG,CACtB,MAAW,EACyC,EAAE;QACtD,MAAM,KAAK,GAA6B,OAAO,CAAC,WAAW,CACzD,4BAAgB,EAChB,MAAM,CACP,CAAC;QACF,OAAO,KAAK,KAAK,SAAS;YACxB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACpB,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC,EA7BgB,uBAAuB,uCAAvB,uBAAuB,QA6BvC"}
@@ -1,10 +1,14 @@
1
1
  import { INestiaProject } from "../structures/INestiaProject";
2
2
  import { IReflectController } from "../structures/IReflectController";
3
3
  import { IReflectWebSocketOperation } from "../structures/IReflectWebSocketOperation";
4
+ import { IOperationMetadata } from "../transformers/IOperationMetadata";
4
5
  export declare namespace ReflectWebSocketOperationAnalyzer {
5
- const analyze: (project: INestiaProject) => (props: {
6
+ interface IProps {
7
+ project: INestiaProject;
6
8
  controller: IReflectController;
7
9
  function: Function;
8
10
  name: string;
9
- }) => IReflectWebSocketOperation | null;
11
+ metadata: IOperationMetadata;
12
+ }
13
+ const analyze: (ctx: IProps) => IReflectWebSocketOperation | null;
10
14
  }
@@ -2,76 +2,100 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ReflectWebSocketOperationAnalyzer = void 0;
4
4
  const tstl_1 = require("tstl");
5
+ const StringUtil_1 = require("../utils/StringUtil");
6
+ const ImportAnalyzer_1 = require("./ImportAnalyzer");
5
7
  const PathAnalyzer_1 = require("./PathAnalyzer");
6
8
  const ReflectMetadataAnalyzer_1 = require("./ReflectMetadataAnalyzer");
7
9
  var ReflectWebSocketOperationAnalyzer;
8
10
  (function (ReflectWebSocketOperationAnalyzer) {
9
- ReflectWebSocketOperationAnalyzer.analyze = (project) => (props) => {
10
- var _a;
11
- const route = Reflect.getMetadata("nestia/WebSocketRoute", props.function);
11
+ ReflectWebSocketOperationAnalyzer.analyze = (ctx) => {
12
+ var _a, _b;
13
+ const route = Reflect.getMetadata("nestia/WebSocketRoute", ctx.function);
12
14
  if (route === undefined)
13
15
  return null;
16
+ // @todo -> detailing is required
14
17
  const errors = [];
15
- const parameters = ((_a = Reflect.getMetadata("nestia/WebSocketRoute/Parameters", props.controller.prototype, props.name)) !== null && _a !== void 0 ? _a : []).sort((a, b) => a.index - b.index);
16
- if (parameters.find((p) => (p.category === "acceptor") === undefined))
17
- errors.push({
18
- file: props.controller.file,
19
- controller: props.controller.name,
20
- function: props.name,
21
- message: "@WebSocketRoute.Acceptor() is essentially required",
22
- });
23
- if (parameters.length !== props.function.length)
24
- errors.push({
25
- file: props.controller.file,
26
- controller: props.controller.name,
27
- function: props.name,
28
- message: [
29
- "Every parameters must be one of below:",
30
- " - @WebSocketRoute.Acceptor()",
31
- " - @WebSocketRoute.Driver()",
32
- " - @WebSocketRoute.Header()",
33
- " - @WebSocketRoute.Param()",
34
- " - @WebSocketRoute.Query()",
35
- ].join("\n"),
36
- });
37
- const fields = parameters
18
+ const preconfigured = ((_a = Reflect.getMetadata("nestia/WebSocketRoute/Parameters", ctx.controller.class.prototype, ctx.name)) !== null && _a !== void 0 ? _a : []).sort((a, b) => a.index - b.index);
19
+ if (preconfigured.find((p) => (p.category === "acceptor") === undefined))
20
+ errors.push("@WebSocketRoute.Acceptor() is essentially required");
21
+ if (preconfigured.length !== ctx.function.length)
22
+ errors.push([
23
+ "Every parameters must be one of below:",
24
+ " - @WebSocketRoute.Acceptor()",
25
+ " - @WebSocketRoute.Driver()",
26
+ " - @WebSocketRoute.Header()",
27
+ " - @WebSocketRoute.Param()",
28
+ " - @WebSocketRoute.Query()",
29
+ ].join("\n"));
30
+ const imports = [];
31
+ const parameters = preconfigured
32
+ .map((p) => {
33
+ var _a, _b, _c, _d, _e;
34
+ // METADATA INFO
35
+ const matched = ctx.metadata.parameters.find((m) => p.index === m.index);
36
+ // VALIDATE PARAMETER
37
+ if (matched === undefined)
38
+ return errors.push(`Unable to find parameter type of the ${p.index} (th).`);
39
+ else if (matched.type === null)
40
+ return errors.push(`Failed to analyze the parameter type of the ${JSON.stringify(matched.name)}.`);
41
+ else if (p.category === "param" &&
42
+ !((_a = p.field) === null || _a === void 0 ? void 0 : _a.length))
43
+ return errors.push(`@WebSocketRoute.Param() must have a field name.`);
44
+ else if (p.category === "acceptor" &&
45
+ ((_c = (_b = matched.type) === null || _b === void 0 ? void 0 : _b.typeArguments) === null || _c === void 0 ? void 0 : _c.length) !== 3)
46
+ return `@WebSocketRoute.Acceptor() must have three type arguments.`;
47
+ else if (p.category === "driver" &&
48
+ ((_e = (_d = matched.type) === null || _d === void 0 ? void 0 : _d.typeArguments) === null || _e === void 0 ? void 0 : _e.length) !== 1)
49
+ return errors.push(`@WebSocketRoute.Driver() must have one type argument.`);
50
+ // COMPLETE COMPOSITION
51
+ imports.push(...matched.imports);
52
+ if (p.category === "acceptor" ||
53
+ p.category === "driver" ||
54
+ p.category === "query")
55
+ return Object.assign(Object.assign({}, p), { name: matched.name, type: matched.type });
56
+ else if (p.category === "param")
57
+ return Object.assign(Object.assign({}, p), { category: "param", field: p.field, name: matched.name, type: matched.type, imports: matched.imports, description: matched.description, jsDocTags: matched.jsDocTags });
58
+ // UNKNOWN TYPE, MAYBE NEW FEATURE
59
+ console.log(p);
60
+ return errors.push(`@WebSocketRoute.${StringUtil_1.StringUtil.capitalize(p.category)}() has not been supported yet. How about upgrading the nestia packages?`);
61
+ })
62
+ .filter((p) => !!p);
63
+ const fields = preconfigured
38
64
  .filter((p) => p.category === "param")
39
- .map((p) => p.field)
65
+ .map((p) => { var _a; return (_a = p.field) !== null && _a !== void 0 ? _a : ""; })
66
+ .filter((field) => !!(field === null || field === void 0 ? void 0 : field.length))
40
67
  .sort();
41
- for (const cLoc of props.controller.paths)
68
+ for (const cLoc of ctx.controller.paths)
42
69
  for (const mLoc of route.paths) {
43
70
  const location = PathAnalyzer_1.PathAnalyzer.join(cLoc, mLoc);
44
71
  if (location.includes("*"))
45
72
  continue;
46
73
  const binded = PathAnalyzer_1.PathAnalyzer.parameters(location);
47
- if (binded === null) {
48
- errors.push({
49
- file: props.controller.file,
50
- controller: props.controller.name,
51
- function: props.name,
52
- message: `invalid path (${JSON.stringify(location)})`,
53
- });
54
- continue;
55
- }
56
- if (tstl_1.ranges.equal(binded.sort(), fields) === false)
57
- errors.push({
58
- file: props.controller.file,
59
- controller: props.controller.name,
60
- function: props.name,
61
- message: `binded arguments in the "path" between function's decorator and parameters' decorators are different (function: [${binded.join(", ")}], parameters: [${fields.join(", ")}]).`,
62
- });
74
+ if (binded === null)
75
+ errors.push(`invalid path (${JSON.stringify(location)})`);
76
+ else if (tstl_1.ranges.equal(binded.sort(), fields) === false)
77
+ errors.push(`binded arguments in the "path" between function's decorator and parameters' decorators are different (function: [${binded.join(", ")}], parameters: [${fields.join(", ")}]).`);
63
78
  }
64
79
  if (errors.length) {
65
- project.errors.push(...errors);
80
+ ctx.project.errors.push({
81
+ file: ctx.controller.file,
82
+ class: ctx.controller.class.name,
83
+ function: ctx.function.name,
84
+ from: ctx.name,
85
+ contents: errors,
86
+ });
66
87
  return null;
67
88
  }
68
89
  return {
69
90
  protocol: "websocket",
70
- target: props.function,
71
- name: props.name,
91
+ name: ctx.name,
72
92
  paths: route.paths,
73
- versions: ReflectMetadataAnalyzer_1.ReflectMetadataAnalyzer.versions(props.function),
93
+ function: ctx.function,
94
+ versions: ReflectMetadataAnalyzer_1.ReflectMetadataAnalyzer.versions(ctx.function),
74
95
  parameters,
96
+ imports: ImportAnalyzer_1.ImportAnalyzer.unique(imports),
97
+ description: (_b = ctx.metadata.description) !== null && _b !== void 0 ? _b : null,
98
+ jsDocTags: ctx.metadata.jsDocTags,
75
99
  };
76
100
  };
77
101
  })(ReflectWebSocketOperationAnalyzer || (exports.ReflectWebSocketOperationAnalyzer = ReflectWebSocketOperationAnalyzer = {}));
@@ -1 +1 @@
1
- {"version":3,"file":"ReflectWebSocketOperationAnalyzer.js","sourceRoot":"","sources":["../../src/analyses/ReflectWebSocketOperationAnalyzer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ReflectWebSocketOperationAnalyzer.js","sourceRoot":"","sources":["../../src/analyses/ReflectWebSocketOperationAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { IMetadataDictionary } from "typia/lib/schemas/metadata/IMetadataDictionary";
2
+ import { IReflectController } from "../structures/IReflectController";
3
+ import { IReflectHttpOperation } from "../structures/IReflectHttpOperation";
4
+ import { IReflectOperationError } from "../structures/IReflectOperationError";
5
+ import { ITypedHttpRoute } from "../structures/ITypedHttpRoute";
6
+ export declare namespace TypedHttpRouteAnalyzer {
7
+ const dictionary: (controllers: IReflectController[]) => IMetadataDictionary;
8
+ const analyze: (props: {
9
+ controller: IReflectController;
10
+ errors: IReflectOperationError[];
11
+ dictionary: IMetadataDictionary;
12
+ operation: IReflectHttpOperation;
13
+ paths: string[];
14
+ }) => ITypedHttpRoute[];
15
+ }