@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,389 +1,383 @@
1
- import { Node, NodeFlags, SyntaxKind, TypeScriptFactory } from "@nestia/factory";
2
- import { ExpressionFactory, IdentifierFactory, TypeFactory } from "@nestia/factory";
3
-
4
- import { INestiaProject } from "../../structures/INestiaProject";
5
- import { ITypedWebSocketRoute } from "../../structures/ITypedWebSocketRoute";
6
- import { FilePrinter } from "./FilePrinter";
7
- import { ImportDictionary } from "./ImportDictionary";
8
- import { SdkAliasCollection } from "./SdkAliasCollection";
9
- import { SdkWebSocketParameterProgrammer } from "./SdkWebSocketParameterProgrammer";
10
-
11
- export namespace SdkWebSocketNamespaceProgrammer {
12
- export const write =
13
- (project: INestiaProject) =>
14
- (importer: ImportDictionary) =>
15
- (route: ITypedWebSocketRoute): Node =>
16
- TypeScriptFactory.createModuleDeclaration(
17
- [TypeScriptFactory.createToken(SyntaxKind.ExportKeyword)],
18
- TypeScriptFactory.createIdentifier(route.name),
19
- TypeScriptFactory.createModuleBlock([
20
- ...writeTypes(project)(importer)(route),
21
- FilePrinter.enter(),
22
- writePath(project)(route),
23
- ]),
24
- NodeFlags.Namespace,
25
- );
26
-
27
- const writeTypes =
28
- (project: INestiaProject) =>
29
- (importer: ImportDictionary) =>
30
- (route: ITypedWebSocketRoute): Node[] => {
31
- const output: Node[] = [];
32
- const declare = (name: string, type: Node) =>
33
- output.push(
34
- TypeScriptFactory.createTypeAliasDeclaration(
35
- [TypeScriptFactory.createModifier(SyntaxKind.ExportKeyword)],
36
- name,
37
- undefined,
38
- type,
39
- ),
40
- );
41
-
42
- if (project.config.keyword === true)
43
- declare("Props", SdkAliasCollection.websocketProps(route));
44
- declare(
45
- "Output",
46
- TypeScriptFactory.createTypeLiteralNode([
47
- TypeScriptFactory.createPropertySignature(
48
- undefined,
49
- "connector",
50
- undefined,
51
- TypeScriptFactory.createTypeReferenceNode(
52
- importer.external({
53
- declaration: false,
54
- file: "tgrid",
55
- type: "element",
56
- name: "WebSocketConnector",
57
- }),
58
- [
59
- TypeScriptFactory.createTypeReferenceNode("Header"),
60
- TypeScriptFactory.createTypeReferenceNode("Provider"),
61
- TypeScriptFactory.createTypeReferenceNode("Listener"),
62
- ],
63
- ),
64
- ),
65
- TypeScriptFactory.createPropertySignature(
66
- undefined,
67
- "driver",
68
- undefined,
69
- TypeScriptFactory.createTypeReferenceNode(
70
- importer.external({
71
- declaration: true,
72
- file: "tgrid",
73
- type: "element",
74
- name: "Driver",
75
- }),
76
- [TypeScriptFactory.createTypeReferenceNode("Listener")],
77
- ),
78
- ),
79
- TypeScriptFactory.createPropertySignature(
80
- undefined,
81
- "reconnect",
82
- undefined,
83
- TypeScriptFactory.createFunctionTypeNode(
84
- undefined,
85
- [],
86
- TypeScriptFactory.createTypeReferenceNode(
87
- TypeScriptFactory.createIdentifier("Promise"),
88
- [
89
- TypeScriptFactory.createKeywordTypeNode(
90
- SyntaxKind.VoidKeyword,
91
- ),
92
- ],
93
- ),
94
- ),
95
- ),
96
- ]),
97
- );
98
-
99
- declare(
100
- "Header",
101
- SdkAliasCollection.name({
102
- type: (route.header?.type ?? route.acceptor.type.typeArguments?.[0])!,
103
- }),
104
- );
105
- declare(
106
- "Provider",
107
- SdkAliasCollection.name({
108
- type:
109
- route.driver?.type.typeArguments?.[0] ??
110
- route.acceptor.type.typeArguments?.[2]!,
111
- }),
112
- );
113
- declare(
114
- "Listener",
115
- SdkAliasCollection.name({
116
- type: route.acceptor.type.typeArguments?.[1]!,
117
- }),
118
- );
119
- if (route.query) declare("Query", SdkAliasCollection.name(route.query));
120
- return output;
121
- };
122
-
123
- const writePath =
124
- (project: INestiaProject) =>
125
- (route: ITypedWebSocketRoute): Node => {
126
- const out = (body: Node) =>
127
- constant("path")(
128
- TypeScriptFactory.createArrowFunction(
129
- [],
130
- [],
131
- SdkWebSocketParameterProgrammer.getParameterDeclarations({
132
- project,
133
- route,
134
- provider: false,
135
- prefix: false,
136
- }),
137
- undefined,
138
- undefined,
139
- body,
140
- ),
141
- );
142
- if (route.pathParameters.length === 0 && route.query === null)
143
- return out(TypeScriptFactory.createStringLiteral(route.path));
144
-
145
- const access = (key: string) =>
146
- project.config.keyword === true
147
- ? TypeScriptFactory.createPropertyAccessExpression(
148
- TypeScriptFactory.createIdentifier("props"),
149
- key,
150
- )
151
- : TypeScriptFactory.createIdentifier(key);
152
- const template = () => {
153
- const split: string[] = route.path.split(":");
154
- if (split.length === 1)
155
- return TypeScriptFactory.createStringLiteral(route.path);
156
- return TypeScriptFactory.createTemplateExpression(
157
- TypeScriptFactory.createTemplateHead(split[0]!),
158
- split.slice(1).map((s, i, arr) => {
159
- const name: string = s.split("/")[0]!;
160
- return TypeScriptFactory.createTemplateSpan(
161
- TypeScriptFactory.createCallExpression(
162
- TypeScriptFactory.createIdentifier("encodeURIComponent"),
163
- undefined,
164
- [
165
- TypeScriptFactory.createBinaryExpression(
166
- TypeScriptFactory.createCallChain(
167
- TypeScriptFactory.createPropertyAccessChain(
168
- access(
169
- route.pathParameters.find((p) => p.field === name)!
170
- .name,
171
- ),
172
- TypeScriptFactory.createToken(
173
- SyntaxKind.QuestionDotToken,
174
- ),
175
- "toString",
176
- ),
177
- undefined,
178
- undefined,
179
- [],
180
- ),
181
- TypeScriptFactory.createToken(
182
- SyntaxKind.QuestionQuestionToken,
183
- ),
184
- TypeScriptFactory.createStringLiteral("null"),
185
- ),
186
- ],
187
- ),
188
- (i !== arr.length - 1
189
- ? TypeScriptFactory.createTemplateMiddle
190
- : TypeScriptFactory.createTemplateTail)(
191
- s.substring(name.length),
192
- ),
193
- );
194
- }),
195
- );
196
- };
197
- if (route.query === null) return out(template());
198
-
199
- const block = (expr: Node) => {
200
- const computeName = (str: string): string =>
201
- [...route.pathParameters, ...(route.query ? [route.query] : [])].find(
202
- (p) => p.name === str,
203
- ) !== undefined
204
- ? computeName("_" + str)
205
- : str;
206
- const variables: string = computeName("variables");
207
- return TypeScriptFactory.createBlock(
208
- [
209
- local(variables)("URLSearchParams")(
210
- TypeScriptFactory.createNewExpression(
211
- TypeScriptFactory.createIdentifier("URLSearchParams"),
212
- [],
213
- [],
214
- ),
215
- ),
216
- TypeScriptFactory.createForOfStatement(
217
- undefined,
218
- TypeScriptFactory.createVariableDeclarationList(
219
- [
220
- TypeScriptFactory.createVariableDeclaration(
221
- TypeScriptFactory.createArrayBindingPattern([
222
- TypeScriptFactory.createBindingElement(
223
- undefined,
224
- undefined,
225
- TypeScriptFactory.createIdentifier("key"),
226
- undefined,
227
- ),
228
- TypeScriptFactory.createBindingElement(
229
- undefined,
230
- undefined,
231
- TypeScriptFactory.createIdentifier("value"),
232
- undefined,
233
- ),
234
- ]),
235
- undefined,
236
- undefined,
237
- undefined,
238
- ),
239
- ],
240
- NodeFlags.Const,
241
- ),
242
- TypeScriptFactory.createCallExpression(
243
- TypeScriptFactory.createIdentifier("Object.entries"),
244
- undefined,
245
- [
246
- TypeScriptFactory.createAsExpression(
247
- expr,
248
- TypeFactory.keyword("any"),
249
- ),
250
- ],
251
- ),
252
- TypeScriptFactory.createIfStatement(
253
- TypeScriptFactory.createStrictEquality(
254
- TypeScriptFactory.createIdentifier("undefined"),
255
- TypeScriptFactory.createIdentifier("value"),
256
- ),
257
- TypeScriptFactory.createContinueStatement(),
258
- TypeScriptFactory.createIfStatement(
259
- TypeScriptFactory.createCallExpression(
260
- TypeScriptFactory.createIdentifier("Array.isArray"),
261
- undefined,
262
- [TypeScriptFactory.createIdentifier("value")],
263
- ),
264
- TypeScriptFactory.createExpressionStatement(
265
- TypeScriptFactory.createCallExpression(
266
- TypeScriptFactory.createPropertyAccessExpression(
267
- TypeScriptFactory.createIdentifier("value"),
268
- TypeScriptFactory.createIdentifier("forEach"),
269
- ),
270
- undefined,
271
- [
272
- TypeScriptFactory.createArrowFunction(
273
- undefined,
274
- undefined,
275
- [IdentifierFactory.parameter("elem")],
276
- undefined,
277
- undefined,
278
- TypeScriptFactory.createCallExpression(
279
- IdentifierFactory.access(
280
- TypeScriptFactory.createIdentifier(variables),
281
- "append",
282
- ),
283
- undefined,
284
- [
285
- TypeScriptFactory.createIdentifier("key"),
286
- TypeScriptFactory.createCallExpression(
287
- TypeScriptFactory.createIdentifier("String"),
288
- undefined,
289
- [TypeScriptFactory.createIdentifier("elem")],
290
- ),
291
- ],
292
- ),
293
- ),
294
- ],
295
- ),
296
- ),
297
- TypeScriptFactory.createExpressionStatement(
298
- TypeScriptFactory.createCallExpression(
299
- IdentifierFactory.access(
300
- TypeScriptFactory.createIdentifier(variables),
301
- "set",
302
- ),
303
- undefined,
304
- [
305
- TypeScriptFactory.createIdentifier("key"),
306
- TypeScriptFactory.createCallExpression(
307
- TypeScriptFactory.createIdentifier("String"),
308
- undefined,
309
- [TypeScriptFactory.createIdentifier("value")],
310
- ),
311
- ],
312
- ),
313
- ),
314
- ),
315
- ),
316
- ),
317
- local("location")("string")(template()),
318
- TypeScriptFactory.createReturnStatement(
319
- TypeScriptFactory.createConditionalExpression(
320
- TypeScriptFactory.createStrictEquality(
321
- ExpressionFactory.number(0),
322
- IdentifierFactory.access(
323
- TypeScriptFactory.createIdentifier(variables),
324
- "size",
325
- ),
326
- ),
327
- undefined,
328
- TypeScriptFactory.createIdentifier("location"),
329
- undefined,
330
- TypeScriptFactory.createTemplateExpression(
331
- TypeScriptFactory.createTemplateHead(""),
332
- [
333
- TypeScriptFactory.createTemplateSpan(
334
- TypeScriptFactory.createIdentifier("location"),
335
- TypeScriptFactory.createTemplateMiddle("?"),
336
- ),
337
- TypeScriptFactory.createTemplateSpan(
338
- TypeScriptFactory.createCallExpression(
339
- IdentifierFactory.access(
340
- TypeScriptFactory.createIdentifier(variables),
341
- "toString",
342
- ),
343
- undefined,
344
- undefined,
345
- ),
346
- TypeScriptFactory.createTemplateTail(""),
347
- ),
348
- ],
349
- ),
350
- ),
351
- ),
352
- ],
353
- true,
354
- );
355
- };
356
- return out(block(access(route.query.name)));
357
- };
358
- }
359
-
360
- const local = (name: string) => (type: string) => (expression: Node) =>
361
- TypeScriptFactory.createVariableStatement(
362
- [],
363
- TypeScriptFactory.createVariableDeclarationList(
364
- [
365
- TypeScriptFactory.createVariableDeclaration(
366
- name,
367
- undefined,
368
- TypeScriptFactory.createTypeReferenceNode(type),
369
- expression,
370
- ),
371
- ],
372
- NodeFlags.Const,
373
- ),
374
- );
375
- const constant = (name: string) => (expression: Node) =>
376
- TypeScriptFactory.createVariableStatement(
377
- [TypeScriptFactory.createModifier(SyntaxKind.ExportKeyword)],
378
- TypeScriptFactory.createVariableDeclarationList(
379
- [
380
- TypeScriptFactory.createVariableDeclaration(
381
- name,
382
- undefined,
383
- undefined,
384
- expression,
385
- ),
386
- ],
387
- NodeFlags.Const,
388
- ),
389
- );
1
+ import {
2
+ type Block,
3
+ type Expression,
4
+ NodeFlags,
5
+ type Statement,
6
+ SyntaxKind,
7
+ type TypeNode,
8
+ factory,
9
+ } from "@ttsc/factory";
10
+
11
+ import { ExpressionFactory } from "../../factories/ExpressionFactory";
12
+ import { IdentifierFactory } from "../../factories/IdentifierFactory";
13
+ import { TypeFactory } from "../../factories/TypeFactory";
14
+ import { INestiaProject } from "../../structures/INestiaProject";
15
+ import { ITypedWebSocketRoute } from "../../structures/ITypedWebSocketRoute";
16
+ import { FilePrinter } from "./FilePrinter";
17
+ import { ImportDictionary } from "./ImportDictionary";
18
+ import { SdkAliasCollection } from "./SdkAliasCollection";
19
+ import { SdkWebSocketParameterProgrammer } from "./SdkWebSocketParameterProgrammer";
20
+
21
+ export namespace SdkWebSocketNamespaceProgrammer {
22
+ export const write =
23
+ (project: INestiaProject) =>
24
+ (importer: ImportDictionary) =>
25
+ (route: ITypedWebSocketRoute): Statement =>
26
+ factory.createModuleDeclaration(
27
+ [factory.createToken(SyntaxKind.ExportKeyword)],
28
+ factory.createIdentifier(route.name),
29
+ factory.createModuleBlock([
30
+ ...writeTypes(project)(importer)(route),
31
+ FilePrinter.enter(),
32
+ writePath(project)(route),
33
+ ]),
34
+ NodeFlags.Namespace,
35
+ );
36
+
37
+ const writeTypes =
38
+ (project: INestiaProject) =>
39
+ (importer: ImportDictionary) =>
40
+ (route: ITypedWebSocketRoute): Statement[] => {
41
+ const output: Statement[] = [];
42
+ const declare = (name: string, type: TypeNode) =>
43
+ output.push(
44
+ factory.createTypeAliasDeclaration(
45
+ [factory.createModifier(SyntaxKind.ExportKeyword)],
46
+ name,
47
+ undefined,
48
+ type,
49
+ ),
50
+ );
51
+
52
+ if (project.config.keyword === true)
53
+ declare("Props", SdkAliasCollection.websocketProps(route));
54
+ declare(
55
+ "Output",
56
+ factory.createTypeLiteralNode([
57
+ factory.createPropertySignature(
58
+ undefined,
59
+ "connector",
60
+ undefined,
61
+ factory.createTypeReferenceNode(
62
+ importer.external({
63
+ declaration: false,
64
+ file: "tgrid",
65
+ type: "element",
66
+ name: "WebSocketConnector",
67
+ }),
68
+ [
69
+ factory.createTypeReferenceNode("Header"),
70
+ factory.createTypeReferenceNode("Provider"),
71
+ factory.createTypeReferenceNode("Listener"),
72
+ ],
73
+ ),
74
+ ),
75
+ factory.createPropertySignature(
76
+ undefined,
77
+ "driver",
78
+ undefined,
79
+ factory.createTypeReferenceNode(
80
+ importer.external({
81
+ declaration: true,
82
+ file: "tgrid",
83
+ type: "element",
84
+ name: "Driver",
85
+ }),
86
+ [factory.createTypeReferenceNode("Listener")],
87
+ ),
88
+ ),
89
+ factory.createPropertySignature(
90
+ undefined,
91
+ "reconnect",
92
+ undefined,
93
+ factory.createFunctionTypeNode(
94
+ undefined,
95
+ [],
96
+ factory.createTypeReferenceNode(
97
+ factory.createIdentifier("Promise"),
98
+ [factory.createKeywordTypeNode(SyntaxKind.VoidKeyword)],
99
+ ),
100
+ ),
101
+ ),
102
+ ]),
103
+ );
104
+
105
+ declare(
106
+ "Header",
107
+ SdkAliasCollection.name({
108
+ type: (route.header?.type ?? route.acceptor.type.typeArguments?.[0])!,
109
+ }),
110
+ );
111
+ declare(
112
+ "Provider",
113
+ SdkAliasCollection.name({
114
+ type:
115
+ route.driver?.type.typeArguments?.[0] ??
116
+ route.acceptor.type.typeArguments?.[2]!,
117
+ }),
118
+ );
119
+ declare(
120
+ "Listener",
121
+ SdkAliasCollection.name({
122
+ type: route.acceptor.type.typeArguments?.[1]!,
123
+ }),
124
+ );
125
+ if (route.query) declare("Query", SdkAliasCollection.name(route.query));
126
+ return output;
127
+ };
128
+
129
+ const writePath =
130
+ (project: INestiaProject) =>
131
+ (route: ITypedWebSocketRoute): Statement => {
132
+ const out = (body: Block | Expression) =>
133
+ constant("path")(
134
+ factory.createArrowFunction(
135
+ [],
136
+ [],
137
+ SdkWebSocketParameterProgrammer.getParameterDeclarations({
138
+ project,
139
+ route,
140
+ provider: false,
141
+ prefix: false,
142
+ }),
143
+ undefined,
144
+ undefined,
145
+ body,
146
+ ),
147
+ );
148
+ if (route.pathParameters.length === 0 && route.query === null)
149
+ return out(factory.createStringLiteral(route.path));
150
+
151
+ const access = (key: string) =>
152
+ project.config.keyword === true
153
+ ? factory.createPropertyAccessExpression(
154
+ factory.createIdentifier("props"),
155
+ key,
156
+ )
157
+ : factory.createIdentifier(key);
158
+ const template = () => {
159
+ const split: string[] = route.path.split(":");
160
+ if (split.length === 1) return factory.createStringLiteral(route.path);
161
+ return factory.createTemplateExpression(
162
+ factory.createTemplateHead(split[0]!),
163
+ split.slice(1).map((s, i, arr) => {
164
+ const name: string = s.split("/")[0]!;
165
+ return factory.createTemplateSpan(
166
+ factory.createCallExpression(
167
+ factory.createIdentifier("encodeURIComponent"),
168
+ undefined,
169
+ [
170
+ factory.createBinaryExpression(
171
+ factory.createCallChain(
172
+ factory.createPropertyAccessChain(
173
+ access(
174
+ route.pathParameters.find((p) => p.field === name)!
175
+ .name,
176
+ ),
177
+ factory.createToken(SyntaxKind.QuestionDotToken),
178
+ "toString",
179
+ ),
180
+ undefined,
181
+ undefined,
182
+ [],
183
+ ),
184
+ factory.createToken(SyntaxKind.QuestionQuestionToken),
185
+ factory.createStringLiteral("null"),
186
+ ),
187
+ ],
188
+ ),
189
+ (i !== arr.length - 1
190
+ ? factory.createTemplateMiddle
191
+ : factory.createTemplateTail)(s.substring(name.length)),
192
+ );
193
+ }),
194
+ );
195
+ };
196
+ if (route.query === null) return out(template());
197
+
198
+ const block = (expr: Expression) => {
199
+ const computeName = (str: string): string =>
200
+ [...route.pathParameters, ...(route.query ? [route.query] : [])].find(
201
+ (p) => p.name === str,
202
+ ) !== undefined
203
+ ? computeName("_" + str)
204
+ : str;
205
+ const variables: string = computeName("variables");
206
+ return factory.createBlock(
207
+ [
208
+ local(variables)("URLSearchParams")(
209
+ factory.createNewExpression(
210
+ factory.createIdentifier("URLSearchParams"),
211
+ [],
212
+ [],
213
+ ),
214
+ ),
215
+ factory.createForOfStatement(
216
+ undefined,
217
+ factory.createVariableDeclarationList(
218
+ [
219
+ factory.createVariableDeclaration(
220
+ factory.createArrayBindingPattern([
221
+ factory.createBindingElement(
222
+ undefined,
223
+ undefined,
224
+ factory.createIdentifier("key"),
225
+ undefined,
226
+ ),
227
+ factory.createBindingElement(
228
+ undefined,
229
+ undefined,
230
+ factory.createIdentifier("value"),
231
+ undefined,
232
+ ),
233
+ ]),
234
+ undefined,
235
+ undefined,
236
+ undefined,
237
+ ),
238
+ ],
239
+ NodeFlags.Const,
240
+ ),
241
+ factory.createCallExpression(
242
+ factory.createIdentifier("Object.entries"),
243
+ undefined,
244
+ [factory.createAsExpression(expr, TypeFactory.keyword("any"))],
245
+ ),
246
+ factory.createIfStatement(
247
+ factory.createStrictEquality(
248
+ factory.createIdentifier("undefined"),
249
+ factory.createIdentifier("value"),
250
+ ),
251
+ factory.createContinueStatement(),
252
+ factory.createIfStatement(
253
+ factory.createCallExpression(
254
+ factory.createIdentifier("Array.isArray"),
255
+ undefined,
256
+ [factory.createIdentifier("value")],
257
+ ),
258
+ factory.createExpressionStatement(
259
+ factory.createCallExpression(
260
+ factory.createPropertyAccessExpression(
261
+ factory.createIdentifier("value"),
262
+ factory.createIdentifier("forEach"),
263
+ ),
264
+ undefined,
265
+ [
266
+ factory.createArrowFunction(
267
+ undefined,
268
+ undefined,
269
+ [IdentifierFactory.parameter("elem")],
270
+ undefined,
271
+ undefined,
272
+ factory.createCallExpression(
273
+ IdentifierFactory.access(
274
+ factory.createIdentifier(variables),
275
+ "append",
276
+ ),
277
+ undefined,
278
+ [
279
+ factory.createIdentifier("key"),
280
+ factory.createCallExpression(
281
+ factory.createIdentifier("String"),
282
+ undefined,
283
+ [factory.createIdentifier("elem")],
284
+ ),
285
+ ],
286
+ ),
287
+ ),
288
+ ],
289
+ ),
290
+ ),
291
+ factory.createExpressionStatement(
292
+ factory.createCallExpression(
293
+ IdentifierFactory.access(
294
+ factory.createIdentifier(variables),
295
+ "set",
296
+ ),
297
+ undefined,
298
+ [
299
+ factory.createIdentifier("key"),
300
+ factory.createCallExpression(
301
+ factory.createIdentifier("String"),
302
+ undefined,
303
+ [factory.createIdentifier("value")],
304
+ ),
305
+ ],
306
+ ),
307
+ ),
308
+ ),
309
+ ),
310
+ ),
311
+ local("location")("string")(template()),
312
+ factory.createReturnStatement(
313
+ factory.createConditionalExpression(
314
+ factory.createStrictEquality(
315
+ ExpressionFactory.number(0),
316
+ IdentifierFactory.access(
317
+ factory.createIdentifier(variables),
318
+ "size",
319
+ ),
320
+ ),
321
+ undefined,
322
+ factory.createIdentifier("location"),
323
+ undefined,
324
+ factory.createTemplateExpression(
325
+ factory.createTemplateHead(""),
326
+ [
327
+ factory.createTemplateSpan(
328
+ factory.createIdentifier("location"),
329
+ factory.createTemplateMiddle("?"),
330
+ ),
331
+ factory.createTemplateSpan(
332
+ factory.createCallExpression(
333
+ IdentifierFactory.access(
334
+ factory.createIdentifier(variables),
335
+ "toString",
336
+ ),
337
+ undefined,
338
+ undefined,
339
+ ),
340
+ factory.createTemplateTail(""),
341
+ ),
342
+ ],
343
+ ),
344
+ ),
345
+ ),
346
+ ],
347
+ true,
348
+ );
349
+ };
350
+ return out(block(access(route.query.name)));
351
+ };
352
+ }
353
+
354
+ const local = (name: string) => (type: string) => (expression: Expression) =>
355
+ factory.createVariableStatement(
356
+ [],
357
+ factory.createVariableDeclarationList(
358
+ [
359
+ factory.createVariableDeclaration(
360
+ name,
361
+ undefined,
362
+ factory.createTypeReferenceNode(type),
363
+ expression,
364
+ ),
365
+ ],
366
+ NodeFlags.Const,
367
+ ),
368
+ );
369
+ const constant = (name: string) => (expression: Expression) =>
370
+ factory.createVariableStatement(
371
+ [factory.createModifier(SyntaxKind.ExportKeyword)],
372
+ factory.createVariableDeclarationList(
373
+ [
374
+ factory.createVariableDeclaration(
375
+ name,
376
+ undefined,
377
+ undefined,
378
+ expression,
379
+ ),
380
+ ],
381
+ NodeFlags.Const,
382
+ ),
383
+ );