@goast/kotlin 0.6.0 → 0.7.0-beta.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 (584) hide show
  1. package/README.md +0 -1
  2. package/dist/mod.d.ts +8 -0
  3. package/{esm → dist}/src/assets.d.ts +0 -1
  4. package/dist/src/assets.js +5 -0
  5. package/{esm → dist}/src/ast/_index.d.ts +28 -29
  6. package/{esm → dist}/src/ast/_index.js +2 -0
  7. package/dist/src/ast/index.d.ts +1 -0
  8. package/{esm → dist}/src/ast/node.d.ts +0 -1
  9. package/{script → dist}/src/ast/nodes/annotation.d.ts +5 -6
  10. package/{esm → dist}/src/ast/nodes/annotation.js +5 -21
  11. package/{esm → dist}/src/ast/nodes/argument.d.ts +5 -6
  12. package/{esm → dist}/src/ast/nodes/argument.js +3 -14
  13. package/{esm → dist}/src/ast/nodes/call.d.ts +5 -6
  14. package/{esm → dist}/src/ast/nodes/call.js +6 -23
  15. package/{esm → dist}/src/ast/nodes/class.d.ts +15 -16
  16. package/dist/src/ast/nodes/class.js +100 -0
  17. package/{esm → dist}/src/ast/nodes/collection-literal.d.ts +4 -5
  18. package/{esm → dist}/src/ast/nodes/collection-literal.js +2 -8
  19. package/{esm → dist}/src/ast/nodes/constructor.d.ts +8 -9
  20. package/{esm → dist}/src/ast/nodes/constructor.js +13 -44
  21. package/{esm → dist}/src/ast/nodes/doc-tag.d.ts +2 -3
  22. package/{esm → dist}/src/ast/nodes/doc-tag.js +5 -21
  23. package/{esm → dist}/src/ast/nodes/doc.d.ts +6 -7
  24. package/{esm → dist}/src/ast/nodes/doc.js +14 -20
  25. package/{script → dist}/src/ast/nodes/enum-value.d.ts +8 -9
  26. package/{esm → dist}/src/ast/nodes/enum-value.js +10 -37
  27. package/{script → dist}/src/ast/nodes/enum.d.ts +15 -16
  28. package/dist/src/ast/nodes/enum.js +86 -0
  29. package/{esm → dist}/src/ast/nodes/function.d.ts +9 -10
  30. package/dist/src/ast/nodes/function.js +120 -0
  31. package/{esm → dist}/src/ast/nodes/generic-parameter.d.ts +4 -5
  32. package/dist/src/ast/nodes/generic-parameter.js +27 -0
  33. package/{esm → dist}/src/ast/nodes/init-block.d.ts +3 -4
  34. package/{esm → dist}/src/ast/nodes/init-block.js +1 -6
  35. package/{esm → dist}/src/ast/nodes/interface.d.ts +13 -14
  36. package/dist/src/ast/nodes/interface.js +70 -0
  37. package/{esm → dist}/src/ast/nodes/lambda-type.d.ts +4 -5
  38. package/{esm → dist}/src/ast/nodes/lambda-type.js +7 -28
  39. package/{esm → dist}/src/ast/nodes/lambda.d.ts +3 -4
  40. package/{esm → dist}/src/ast/nodes/lambda.js +6 -22
  41. package/{script → dist}/src/ast/nodes/object.d.ts +7 -8
  42. package/dist/src/ast/nodes/object.js +60 -0
  43. package/{esm → dist}/src/ast/nodes/parameter.d.ts +7 -8
  44. package/dist/src/ast/nodes/parameter.js +63 -0
  45. package/{esm → dist}/src/ast/nodes/property.d.ts +10 -11
  46. package/dist/src/ast/nodes/property.js +144 -0
  47. package/{script → dist}/src/ast/nodes/reference.d.ts +5 -6
  48. package/{esm → dist}/src/ast/nodes/reference.js +19 -56
  49. package/{esm → dist}/src/ast/nodes/string.d.ts +3 -4
  50. package/{esm → dist}/src/ast/nodes/string.js +13 -45
  51. package/{esm → dist}/src/ast/nodes/types.d.ts +7 -8
  52. package/dist/src/ast/references/index.d.ts +10 -0
  53. package/{script → dist}/src/ast/references/jackson.d.ts +2 -3
  54. package/{script → dist}/src/ast/references/jakarta.d.ts +1 -2
  55. package/{esm → dist}/src/ast/references/java.d.ts +1 -2
  56. package/{esm → dist}/src/ast/references/kotlin.d.ts +1 -2
  57. package/{esm → dist}/src/ast/references/kotlinx.d.ts +1 -2
  58. package/{esm → dist}/src/ast/references/okhttp3.d.ts +1 -2
  59. package/{esm → dist}/src/ast/references/reactor.d.ts +1 -2
  60. package/{esm → dist}/src/ast/references/spring-reactive.d.ts +1 -2
  61. package/{script → dist}/src/ast/references/spring.d.ts +1 -2
  62. package/{script → dist}/src/ast/references/swagger.d.ts +1 -2
  63. package/{esm → dist}/src/ast/utils/get-kotlin-builder-options.d.ts +1 -2
  64. package/{esm → dist}/src/ast/utils/to-kt-node.d.ts +2 -3
  65. package/{esm → dist}/src/ast/utils/write-kt-annotations.d.ts +1 -2
  66. package/{esm → dist}/src/ast/utils/write-kt-annotations.js +1 -1
  67. package/{esm → dist}/src/ast/utils/write-kt-arguments.d.ts +1 -2
  68. package/{script → dist}/src/ast/utils/write-kt-enum-values.d.ts +1 -2
  69. package/{script → dist}/src/ast/utils/write-kt-generic-parameters.d.ts +1 -2
  70. package/{script → dist}/src/ast/utils/write-kt-members.d.ts +1 -2
  71. package/{esm → dist}/src/ast/utils/write-kt-members.js +1 -1
  72. package/{script → dist}/src/ast/utils/write-kt-node.d.ts +1 -2
  73. package/{esm → dist}/src/ast/utils/write-kt-node.js +1 -1
  74. package/{esm → dist}/src/ast/utils/write-kt-parameters.d.ts +1 -2
  75. package/{esm → dist}/src/common-results.d.ts +0 -1
  76. package/{script → dist}/src/config.d.ts +0 -1
  77. package/{esm → dist}/src/file-builder.d.ts +3 -4
  78. package/{esm → dist}/src/file-builder.js +4 -14
  79. package/{esm → dist}/src/generators/file-generator.d.ts +1 -2
  80. package/{esm → dist}/src/generators/file-generator.js +2 -2
  81. package/dist/src/generators/index.d.ts +5 -0
  82. package/{esm → dist}/src/generators/models/args.d.ts +0 -1
  83. package/dist/src/generators/models/index.d.ts +4 -0
  84. package/{esm → dist}/src/generators/models/model-generator.d.ts +5 -6
  85. package/{esm → dist}/src/generators/models/model-generator.js +40 -48
  86. package/{script → dist}/src/generators/models/models-generator.d.ts +2 -3
  87. package/{esm → dist}/src/generators/models/models-generator.js +2 -7
  88. package/{script → dist}/src/generators/models/models.d.ts +2 -3
  89. package/{esm → dist}/src/generators/services/okhttp3-clients/args.d.ts +2 -3
  90. package/dist/src/generators/services/okhttp3-clients/index.d.ts +4 -0
  91. package/{esm → dist}/src/generators/services/okhttp3-clients/models.d.ts +5 -6
  92. package/{script → dist}/src/generators/services/okhttp3-clients/okhttp3-client-generator.d.ts +6 -7
  93. package/{esm → dist}/src/generators/services/okhttp3-clients/okhttp3-client-generator.js +36 -40
  94. package/{script → dist}/src/generators/services/okhttp3-clients/okhttp3-clients-generator.d.ts +3 -4
  95. package/{esm → dist}/src/generators/services/okhttp3-clients/okhttp3-clients-generator.js +7 -15
  96. package/{script → dist}/src/generators/services/okhttp3-clients/refs.d.ts +1 -2
  97. package/{esm → dist}/src/generators/services/spring-controllers/args.d.ts +2 -3
  98. package/dist/src/generators/services/spring-controllers/index.d.ts +4 -0
  99. package/{script → dist}/src/generators/services/spring-controllers/models.d.ts +4 -5
  100. package/dist/src/generators/services/spring-controllers/refs.d.ts +5 -0
  101. package/{script → dist}/src/generators/services/spring-controllers/spring-controller-generator.d.ts +7 -8
  102. package/{esm → dist}/src/generators/services/spring-controllers/spring-controller-generator.js +85 -159
  103. package/{script → dist}/src/generators/services/spring-controllers/spring-controllers-generator.d.ts +4 -5
  104. package/{esm → dist}/src/generators/services/spring-controllers/spring-controllers-generator.js +5 -12
  105. package/{esm → dist}/src/generators/services/spring-reactive-web-clients/args.d.ts +2 -3
  106. package/dist/src/generators/services/spring-reactive-web-clients/index.d.ts +4 -0
  107. package/{script → dist}/src/generators/services/spring-reactive-web-clients/models.d.ts +4 -5
  108. package/{script → dist}/src/generators/services/spring-reactive-web-clients/refs.d.ts +1 -2
  109. package/{script → dist}/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.d.ts +6 -7
  110. package/{esm → dist}/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.js +49 -56
  111. package/{script → dist}/src/generators/services/spring-reactive-web-clients/spring-reactive-web-clients-generator.d.ts +3 -4
  112. package/{esm → dist}/src/generators/services/spring-reactive-web-clients/spring-reactive-web-clients-generator.js +5 -12
  113. package/{esm → dist}/src/import-collection.d.ts +1 -2
  114. package/{esm → dist}/src/import-collection.js +2 -12
  115. package/{script → dist}/src/types.d.ts +0 -1
  116. package/{esm → dist}/src/utils.d.ts +0 -1
  117. package/{esm → dist}/src/utils.js +3 -5
  118. package/package.json +23 -14
  119. package/esm/mod.d.ts +0 -9
  120. package/esm/mod.d.ts.map +0 -1
  121. package/esm/package.json +0 -3
  122. package/esm/src/assets.d.ts.map +0 -1
  123. package/esm/src/assets.js +0 -6
  124. package/esm/src/ast/_index.d.ts.map +0 -1
  125. package/esm/src/ast/common.d.ts +0 -2
  126. package/esm/src/ast/common.d.ts.map +0 -1
  127. package/esm/src/ast/index.d.ts +0 -2
  128. package/esm/src/ast/index.d.ts.map +0 -1
  129. package/esm/src/ast/node.d.ts.map +0 -1
  130. package/esm/src/ast/nodes/annotation.d.ts +0 -25
  131. package/esm/src/ast/nodes/annotation.d.ts.map +0 -1
  132. package/esm/src/ast/nodes/argument.d.ts.map +0 -1
  133. package/esm/src/ast/nodes/call.d.ts.map +0 -1
  134. package/esm/src/ast/nodes/class.d.ts.map +0 -1
  135. package/esm/src/ast/nodes/class.js +0 -168
  136. package/esm/src/ast/nodes/collection-literal.d.ts.map +0 -1
  137. package/esm/src/ast/nodes/constructor.d.ts.map +0 -1
  138. package/esm/src/ast/nodes/doc-tag.d.ts.map +0 -1
  139. package/esm/src/ast/nodes/doc.d.ts.map +0 -1
  140. package/esm/src/ast/nodes/enum-value.d.ts +0 -32
  141. package/esm/src/ast/nodes/enum-value.d.ts.map +0 -1
  142. package/esm/src/ast/nodes/enum.d.ts +0 -47
  143. package/esm/src/ast/nodes/enum.d.ts.map +0 -1
  144. package/esm/src/ast/nodes/enum.js +0 -133
  145. package/esm/src/ast/nodes/function.d.ts.map +0 -1
  146. package/esm/src/ast/nodes/function.js +0 -217
  147. package/esm/src/ast/nodes/generic-parameter.d.ts.map +0 -1
  148. package/esm/src/ast/nodes/generic-parameter.js +0 -44
  149. package/esm/src/ast/nodes/init-block.d.ts.map +0 -1
  150. package/esm/src/ast/nodes/interface.d.ts.map +0 -1
  151. package/esm/src/ast/nodes/interface.js +0 -112
  152. package/esm/src/ast/nodes/lambda-type.d.ts.map +0 -1
  153. package/esm/src/ast/nodes/lambda.d.ts.map +0 -1
  154. package/esm/src/ast/nodes/object.d.ts +0 -36
  155. package/esm/src/ast/nodes/object.d.ts.map +0 -1
  156. package/esm/src/ast/nodes/object.js +0 -96
  157. package/esm/src/ast/nodes/parameter.d.ts.map +0 -1
  158. package/esm/src/ast/nodes/parameter.js +0 -114
  159. package/esm/src/ast/nodes/property.d.ts.map +0 -1
  160. package/esm/src/ast/nodes/property.js +0 -264
  161. package/esm/src/ast/nodes/reference.d.ts +0 -54
  162. package/esm/src/ast/nodes/reference.d.ts.map +0 -1
  163. package/esm/src/ast/nodes/string.d.ts.map +0 -1
  164. package/esm/src/ast/nodes/types.d.ts.map +0 -1
  165. package/esm/src/ast/references/index.d.ts +0 -11
  166. package/esm/src/ast/references/index.d.ts.map +0 -1
  167. package/esm/src/ast/references/jackson.d.ts +0 -26
  168. package/esm/src/ast/references/jackson.d.ts.map +0 -1
  169. package/esm/src/ast/references/jakarta.d.ts +0 -9
  170. package/esm/src/ast/references/jakarta.d.ts.map +0 -1
  171. package/esm/src/ast/references/java.d.ts.map +0 -1
  172. package/esm/src/ast/references/kotlin.d.ts.map +0 -1
  173. package/esm/src/ast/references/kotlinx.d.ts.map +0 -1
  174. package/esm/src/ast/references/okhttp3.d.ts.map +0 -1
  175. package/esm/src/ast/references/reactor.d.ts.map +0 -1
  176. package/esm/src/ast/references/spring-reactive.d.ts.map +0 -1
  177. package/esm/src/ast/references/spring.d.ts +0 -22
  178. package/esm/src/ast/references/spring.d.ts.map +0 -1
  179. package/esm/src/ast/references/swagger.d.ts +0 -9
  180. package/esm/src/ast/references/swagger.d.ts.map +0 -1
  181. package/esm/src/ast/utils/get-kotlin-builder-options.d.ts.map +0 -1
  182. package/esm/src/ast/utils/to-kt-node.d.ts.map +0 -1
  183. package/esm/src/ast/utils/write-kt-annotations.d.ts.map +0 -1
  184. package/esm/src/ast/utils/write-kt-arguments.d.ts.map +0 -1
  185. package/esm/src/ast/utils/write-kt-enum-values.d.ts +0 -4
  186. package/esm/src/ast/utils/write-kt-enum-values.d.ts.map +0 -1
  187. package/esm/src/ast/utils/write-kt-generic-parameters.d.ts +0 -4
  188. package/esm/src/ast/utils/write-kt-generic-parameters.d.ts.map +0 -1
  189. package/esm/src/ast/utils/write-kt-members.d.ts +0 -6
  190. package/esm/src/ast/utils/write-kt-members.d.ts.map +0 -1
  191. package/esm/src/ast/utils/write-kt-node.d.ts +0 -8
  192. package/esm/src/ast/utils/write-kt-node.d.ts.map +0 -1
  193. package/esm/src/ast/utils/write-kt-parameters.d.ts.map +0 -1
  194. package/esm/src/common-results.d.ts.map +0 -1
  195. package/esm/src/config.d.ts +0 -27
  196. package/esm/src/config.d.ts.map +0 -1
  197. package/esm/src/file-builder.d.ts.map +0 -1
  198. package/esm/src/generators/file-generator.d.ts.map +0 -1
  199. package/esm/src/generators/index.d.ts +0 -6
  200. package/esm/src/generators/index.d.ts.map +0 -1
  201. package/esm/src/generators/models/args.d.ts.map +0 -1
  202. package/esm/src/generators/models/index.d.ts +0 -5
  203. package/esm/src/generators/models/index.d.ts.map +0 -1
  204. package/esm/src/generators/models/model-generator.d.ts.map +0 -1
  205. package/esm/src/generators/models/models-generator.d.ts +0 -18
  206. package/esm/src/generators/models/models-generator.d.ts.map +0 -1
  207. package/esm/src/generators/models/models.d.ts +0 -61
  208. package/esm/src/generators/models/models.d.ts.map +0 -1
  209. package/esm/src/generators/services/okhttp3-clients/args.d.ts.map +0 -1
  210. package/esm/src/generators/services/okhttp3-clients/index.d.ts +0 -5
  211. package/esm/src/generators/services/okhttp3-clients/index.d.ts.map +0 -1
  212. package/esm/src/generators/services/okhttp3-clients/models.d.ts.map +0 -1
  213. package/esm/src/generators/services/okhttp3-clients/okhttp3-client-generator.d.ts +0 -55
  214. package/esm/src/generators/services/okhttp3-clients/okhttp3-client-generator.d.ts.map +0 -1
  215. package/esm/src/generators/services/okhttp3-clients/okhttp3-clients-generator.d.ts +0 -23
  216. package/esm/src/generators/services/okhttp3-clients/okhttp3-clients-generator.d.ts.map +0 -1
  217. package/esm/src/generators/services/okhttp3-clients/refs.d.ts +0 -22
  218. package/esm/src/generators/services/okhttp3-clients/refs.d.ts.map +0 -1
  219. package/esm/src/generators/services/spring-controllers/args.d.ts.map +0 -1
  220. package/esm/src/generators/services/spring-controllers/index.d.ts +0 -5
  221. package/esm/src/generators/services/spring-controllers/index.d.ts.map +0 -1
  222. package/esm/src/generators/services/spring-controllers/models.d.ts +0 -38
  223. package/esm/src/generators/services/spring-controllers/models.d.ts.map +0 -1
  224. package/esm/src/generators/services/spring-controllers/refs.d.ts +0 -6
  225. package/esm/src/generators/services/spring-controllers/refs.d.ts.map +0 -1
  226. package/esm/src/generators/services/spring-controllers/spring-controller-generator.d.ts +0 -58
  227. package/esm/src/generators/services/spring-controllers/spring-controller-generator.d.ts.map +0 -1
  228. package/esm/src/generators/services/spring-controllers/spring-controllers-generator.d.ts +0 -24
  229. package/esm/src/generators/services/spring-controllers/spring-controllers-generator.d.ts.map +0 -1
  230. package/esm/src/generators/services/spring-reactive-web-clients/args.d.ts.map +0 -1
  231. package/esm/src/generators/services/spring-reactive-web-clients/index.d.ts +0 -5
  232. package/esm/src/generators/services/spring-reactive-web-clients/index.d.ts.map +0 -1
  233. package/esm/src/generators/services/spring-reactive-web-clients/models.d.ts +0 -48
  234. package/esm/src/generators/services/spring-reactive-web-clients/models.d.ts.map +0 -1
  235. package/esm/src/generators/services/spring-reactive-web-clients/refs.d.ts +0 -5
  236. package/esm/src/generators/services/spring-reactive-web-clients/refs.d.ts.map +0 -1
  237. package/esm/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.d.ts +0 -62
  238. package/esm/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.d.ts.map +0 -1
  239. package/esm/src/generators/services/spring-reactive-web-clients/spring-reactive-web-clients-generator.d.ts +0 -23
  240. package/esm/src/generators/services/spring-reactive-web-clients/spring-reactive-web-clients-generator.d.ts.map +0 -1
  241. package/esm/src/import-collection.d.ts.map +0 -1
  242. package/esm/src/types.d.ts +0 -8
  243. package/esm/src/types.d.ts.map +0 -1
  244. package/esm/src/utils.d.ts.map +0 -1
  245. package/script/mod.d.ts +0 -9
  246. package/script/mod.d.ts.map +0 -1
  247. package/script/mod.js +0 -11
  248. package/script/package.json +0 -3
  249. package/script/src/assets.d.ts +0 -3
  250. package/script/src/assets.d.ts.map +0 -1
  251. package/script/src/assets.js +0 -9
  252. package/script/src/ast/_index.d.ts +0 -29
  253. package/script/src/ast/_index.d.ts.map +0 -1
  254. package/script/src/ast/_index.js +0 -81
  255. package/script/src/ast/common.d.ts +0 -2
  256. package/script/src/ast/common.d.ts.map +0 -1
  257. package/script/src/ast/common.js +0 -2
  258. package/script/src/ast/index.d.ts +0 -2
  259. package/script/src/ast/index.d.ts.map +0 -1
  260. package/script/src/ast/index.js +0 -5
  261. package/script/src/ast/node.d.ts +0 -5
  262. package/script/src/ast/node.d.ts.map +0 -1
  263. package/script/src/ast/node.js +0 -10
  264. package/script/src/ast/nodes/annotation.d.ts.map +0 -1
  265. package/script/src/ast/nodes/annotation.js +0 -57
  266. package/script/src/ast/nodes/argument.d.ts +0 -23
  267. package/script/src/ast/nodes/argument.d.ts.map +0 -1
  268. package/script/src/ast/nodes/argument.js +0 -44
  269. package/script/src/ast/nodes/call.d.ts +0 -24
  270. package/script/src/ast/nodes/call.d.ts.map +0 -1
  271. package/script/src/ast/nodes/call.js +0 -65
  272. package/script/src/ast/nodes/class.d.ts +0 -56
  273. package/script/src/ast/nodes/class.d.ts.map +0 -1
  274. package/script/src/ast/nodes/class.js +0 -172
  275. package/script/src/ast/nodes/collection-literal.d.ts +0 -19
  276. package/script/src/ast/nodes/collection-literal.d.ts.map +0 -1
  277. package/script/src/ast/nodes/collection-literal.js +0 -30
  278. package/script/src/ast/nodes/constructor.d.ts +0 -36
  279. package/script/src/ast/nodes/constructor.d.ts.map +0 -1
  280. package/script/src/ast/nodes/constructor.js +0 -111
  281. package/script/src/ast/nodes/doc-tag.d.ts +0 -36
  282. package/script/src/ast/nodes/doc-tag.d.ts.map +0 -1
  283. package/script/src/ast/nodes/doc-tag.js +0 -78
  284. package/script/src/ast/nodes/doc.d.ts +0 -28
  285. package/script/src/ast/nodes/doc.d.ts.map +0 -1
  286. package/script/src/ast/nodes/doc.js +0 -67
  287. package/script/src/ast/nodes/enum-value.d.ts.map +0 -1
  288. package/script/src/ast/nodes/enum-value.js +0 -80
  289. package/script/src/ast/nodes/enum.d.ts.map +0 -1
  290. package/script/src/ast/nodes/enum.js +0 -137
  291. package/script/src/ast/nodes/function.d.ts +0 -60
  292. package/script/src/ast/nodes/function.d.ts.map +0 -1
  293. package/script/src/ast/nodes/function.js +0 -221
  294. package/script/src/ast/nodes/generic-parameter.d.ts +0 -23
  295. package/script/src/ast/nodes/generic-parameter.d.ts.map +0 -1
  296. package/script/src/ast/nodes/generic-parameter.js +0 -48
  297. package/script/src/ast/nodes/init-block.d.ts +0 -18
  298. package/script/src/ast/nodes/init-block.d.ts.map +0 -1
  299. package/script/src/ast/nodes/init-block.js +0 -25
  300. package/script/src/ast/nodes/interface.d.ts +0 -43
  301. package/script/src/ast/nodes/interface.d.ts.map +0 -1
  302. package/script/src/ast/nodes/interface.js +0 -116
  303. package/script/src/ast/nodes/lambda-type.d.ts +0 -25
  304. package/script/src/ast/nodes/lambda-type.d.ts.map +0 -1
  305. package/script/src/ast/nodes/lambda-type.js +0 -69
  306. package/script/src/ast/nodes/lambda.d.ts +0 -22
  307. package/script/src/ast/nodes/lambda.d.ts.map +0 -1
  308. package/script/src/ast/nodes/lambda.js +0 -59
  309. package/script/src/ast/nodes/object.d.ts.map +0 -1
  310. package/script/src/ast/nodes/object.js +0 -100
  311. package/script/src/ast/nodes/parameter.d.ts +0 -41
  312. package/script/src/ast/nodes/parameter.d.ts.map +0 -1
  313. package/script/src/ast/nodes/parameter.js +0 -118
  314. package/script/src/ast/nodes/property.d.ts +0 -79
  315. package/script/src/ast/nodes/property.d.ts.map +0 -1
  316. package/script/src/ast/nodes/property.js +0 -271
  317. package/script/src/ast/nodes/reference.d.ts.map +0 -1
  318. package/script/src/ast/nodes/reference.js +0 -120
  319. package/script/src/ast/nodes/string.d.ts +0 -32
  320. package/script/src/ast/nodes/string.d.ts.map +0 -1
  321. package/script/src/ast/nodes/string.js +0 -123
  322. package/script/src/ast/nodes/types.d.ts +0 -11
  323. package/script/src/ast/nodes/types.d.ts.map +0 -1
  324. package/script/src/ast/nodes/types.js +0 -2
  325. package/script/src/ast/references/index.d.ts +0 -11
  326. package/script/src/ast/references/index.d.ts.map +0 -1
  327. package/script/src/ast/references/index.js +0 -14
  328. package/script/src/ast/references/jackson.d.ts.map +0 -1
  329. package/script/src/ast/references/jackson.js +0 -41
  330. package/script/src/ast/references/jakarta.d.ts.map +0 -1
  331. package/script/src/ast/references/jakarta.js +0 -14
  332. package/script/src/ast/references/java.d.ts +0 -15
  333. package/script/src/ast/references/java.d.ts.map +0 -1
  334. package/script/src/ast/references/java.js +0 -22
  335. package/script/src/ast/references/kotlin.d.ts +0 -24
  336. package/script/src/ast/references/kotlin.d.ts.map +0 -1
  337. package/script/src/ast/references/kotlin.js +0 -29
  338. package/script/src/ast/references/kotlinx.d.ts +0 -5
  339. package/script/src/ast/references/kotlinx.d.ts.map +0 -1
  340. package/script/src/ast/references/kotlinx.js +0 -9
  341. package/script/src/ast/references/okhttp3.d.ts +0 -4
  342. package/script/src/ast/references/okhttp3.d.ts.map +0 -1
  343. package/script/src/ast/references/okhttp3.js +0 -7
  344. package/script/src/ast/references/reactor.d.ts +0 -4
  345. package/script/src/ast/references/reactor.d.ts.map +0 -1
  346. package/script/src/ast/references/reactor.js +0 -7
  347. package/script/src/ast/references/spring-reactive.d.ts +0 -10
  348. package/script/src/ast/references/spring-reactive.d.ts.map +0 -1
  349. package/script/src/ast/references/spring-reactive.js +0 -14
  350. package/script/src/ast/references/spring.d.ts.map +0 -1
  351. package/script/src/ast/references/spring.js +0 -34
  352. package/script/src/ast/references/swagger.d.ts.map +0 -1
  353. package/script/src/ast/references/swagger.js +0 -14
  354. package/script/src/ast/utils/get-kotlin-builder-options.d.ts +0 -4
  355. package/script/src/ast/utils/get-kotlin-builder-options.d.ts.map +0 -1
  356. package/script/src/ast/utils/get-kotlin-builder-options.js +0 -18
  357. package/script/src/ast/utils/to-kt-node.d.ts +0 -8
  358. package/script/src/ast/utils/to-kt-node.d.ts.map +0 -1
  359. package/script/src/ast/utils/to-kt-node.js +0 -21
  360. package/script/src/ast/utils/write-kt-annotations.d.ts +0 -6
  361. package/script/src/ast/utils/write-kt-annotations.d.ts.map +0 -1
  362. package/script/src/ast/utils/write-kt-annotations.js +0 -12
  363. package/script/src/ast/utils/write-kt-arguments.d.ts +0 -4
  364. package/script/src/ast/utils/write-kt-arguments.d.ts.map +0 -1
  365. package/script/src/ast/utils/write-kt-arguments.js +0 -32
  366. package/script/src/ast/utils/write-kt-enum-values.d.ts.map +0 -1
  367. package/script/src/ast/utils/write-kt-enum-values.js +0 -16
  368. package/script/src/ast/utils/write-kt-generic-parameters.d.ts.map +0 -1
  369. package/script/src/ast/utils/write-kt-generic-parameters.js +0 -11
  370. package/script/src/ast/utils/write-kt-members.d.ts.map +0 -1
  371. package/script/src/ast/utils/write-kt-members.js +0 -15
  372. package/script/src/ast/utils/write-kt-node.d.ts.map +0 -1
  373. package/script/src/ast/utils/write-kt-node.js +0 -23
  374. package/script/src/ast/utils/write-kt-parameters.d.ts +0 -4
  375. package/script/src/ast/utils/write-kt-parameters.d.ts.map +0 -1
  376. package/script/src/ast/utils/write-kt-parameters.js +0 -12
  377. package/script/src/common-results.d.ts +0 -5
  378. package/script/src/common-results.d.ts.map +0 -1
  379. package/script/src/common-results.js +0 -2
  380. package/script/src/config.d.ts.map +0 -1
  381. package/script/src/config.js +0 -26
  382. package/script/src/file-builder.d.ts +0 -23
  383. package/script/src/file-builder.d.ts.map +0 -1
  384. package/script/src/file-builder.js +0 -92
  385. package/script/src/generators/file-generator.d.ts +0 -29
  386. package/script/src/generators/file-generator.d.ts.map +0 -1
  387. package/script/src/generators/file-generator.js +0 -56
  388. package/script/src/generators/index.d.ts +0 -6
  389. package/script/src/generators/index.d.ts.map +0 -1
  390. package/script/src/generators/index.js +0 -8
  391. package/script/src/generators/models/args.d.ts +0 -111
  392. package/script/src/generators/models/args.d.ts.map +0 -1
  393. package/script/src/generators/models/args.js +0 -2
  394. package/script/src/generators/models/index.d.ts +0 -5
  395. package/script/src/generators/models/index.d.ts.map +0 -1
  396. package/script/src/generators/models/index.js +0 -8
  397. package/script/src/generators/models/model-generator.d.ts +0 -73
  398. package/script/src/generators/models/model-generator.d.ts.map +0 -1
  399. package/script/src/generators/models/model-generator.js +0 -645
  400. package/script/src/generators/models/models-generator.d.ts.map +0 -1
  401. package/script/src/generators/models/models-generator.js +0 -39
  402. package/script/src/generators/models/models.d.ts.map +0 -1
  403. package/script/src/generators/models/models.js +0 -14
  404. package/script/src/generators/services/okhttp3-clients/args.d.ts +0 -87
  405. package/script/src/generators/services/okhttp3-clients/args.d.ts.map +0 -1
  406. package/script/src/generators/services/okhttp3-clients/args.js +0 -2
  407. package/script/src/generators/services/okhttp3-clients/index.d.ts +0 -5
  408. package/script/src/generators/services/okhttp3-clients/index.d.ts.map +0 -1
  409. package/script/src/generators/services/okhttp3-clients/index.js +0 -8
  410. package/script/src/generators/services/okhttp3-clients/models.d.ts +0 -46
  411. package/script/src/generators/services/okhttp3-clients/models.d.ts.map +0 -1
  412. package/script/src/generators/services/okhttp3-clients/models.js +0 -12
  413. package/script/src/generators/services/okhttp3-clients/okhttp3-client-generator.d.ts.map +0 -1
  414. package/script/src/generators/services/okhttp3-clients/okhttp3-client-generator.js +0 -441
  415. package/script/src/generators/services/okhttp3-clients/okhttp3-clients-generator.d.ts.map +0 -1
  416. package/script/src/generators/services/okhttp3-clients/okhttp3-clients-generator.js +0 -137
  417. package/script/src/generators/services/okhttp3-clients/refs.d.ts.map +0 -1
  418. package/script/src/generators/services/okhttp3-clients/refs.js +0 -35
  419. package/script/src/generators/services/spring-controllers/args.d.ts +0 -95
  420. package/script/src/generators/services/spring-controllers/args.d.ts.map +0 -1
  421. package/script/src/generators/services/spring-controllers/args.js +0 -2
  422. package/script/src/generators/services/spring-controllers/index.d.ts +0 -5
  423. package/script/src/generators/services/spring-controllers/index.d.ts.map +0 -1
  424. package/script/src/generators/services/spring-controllers/index.js +0 -8
  425. package/script/src/generators/services/spring-controllers/models.d.ts.map +0 -1
  426. package/script/src/generators/services/spring-controllers/models.js +0 -15
  427. package/script/src/generators/services/spring-controllers/refs.d.ts +0 -6
  428. package/script/src/generators/services/spring-controllers/refs.d.ts.map +0 -1
  429. package/script/src/generators/services/spring-controllers/refs.js +0 -12
  430. package/script/src/generators/services/spring-controllers/spring-controller-generator.d.ts.map +0 -1
  431. package/script/src/generators/services/spring-controllers/spring-controller-generator.js +0 -700
  432. package/script/src/generators/services/spring-controllers/spring-controllers-generator.d.ts.map +0 -1
  433. package/script/src/generators/services/spring-controllers/spring-controllers-generator.js +0 -80
  434. package/script/src/generators/services/spring-reactive-web-clients/args.d.ts +0 -115
  435. package/script/src/generators/services/spring-reactive-web-clients/args.d.ts.map +0 -1
  436. package/script/src/generators/services/spring-reactive-web-clients/args.js +0 -2
  437. package/script/src/generators/services/spring-reactive-web-clients/index.d.ts +0 -5
  438. package/script/src/generators/services/spring-reactive-web-clients/index.d.ts.map +0 -1
  439. package/script/src/generators/services/spring-reactive-web-clients/index.js +0 -8
  440. package/script/src/generators/services/spring-reactive-web-clients/models.d.ts.map +0 -1
  441. package/script/src/generators/services/spring-reactive-web-clients/models.js +0 -12
  442. package/script/src/generators/services/spring-reactive-web-clients/refs.d.ts.map +0 -1
  443. package/script/src/generators/services/spring-reactive-web-clients/refs.js +0 -11
  444. package/script/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.d.ts.map +0 -1
  445. package/script/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.js +0 -453
  446. package/script/src/generators/services/spring-reactive-web-clients/spring-reactive-web-clients-generator.d.ts.map +0 -1
  447. package/script/src/generators/services/spring-reactive-web-clients/spring-reactive-web-clients-generator.js +0 -81
  448. package/script/src/import-collection.d.ts +0 -20
  449. package/script/src/import-collection.d.ts.map +0 -1
  450. package/script/src/import-collection.js +0 -90
  451. package/script/src/types.d.ts.map +0 -1
  452. package/script/src/types.js +0 -2
  453. package/script/src/utils.d.ts +0 -8
  454. package/script/src/utils.d.ts.map +0 -1
  455. package/script/src/utils.js +0 -54
  456. package/src/mod.ts +0 -8
  457. package/src/src/assets.ts +0 -9
  458. package/src/src/ast/_index.ts +0 -66
  459. package/src/src/ast/index.ts +0 -1
  460. package/src/src/ast/node.ts +0 -10
  461. package/src/src/ast/nodes/annotation.ts +0 -79
  462. package/src/src/ast/nodes/argument.ts +0 -62
  463. package/src/src/ast/nodes/call.ts +0 -75
  464. package/src/src/ast/nodes/class.ts +0 -178
  465. package/src/src/ast/nodes/collection-literal.ts +0 -49
  466. package/src/src/ast/nodes/constructor.ts +0 -126
  467. package/src/src/ast/nodes/doc-tag.ts +0 -138
  468. package/src/src/ast/nodes/doc.ts +0 -111
  469. package/src/src/ast/nodes/enum-value.ts +0 -100
  470. package/src/src/ast/nodes/enum.ts +0 -163
  471. package/src/src/ast/nodes/function.ts +0 -178
  472. package/src/src/ast/nodes/generic-parameter.ts +0 -54
  473. package/src/src/ast/nodes/init-block.ts +0 -38
  474. package/src/src/ast/nodes/interface.ts +0 -133
  475. package/src/src/ast/nodes/lambda-type.ts +0 -73
  476. package/src/src/ast/nodes/lambda.ts +0 -74
  477. package/src/src/ast/nodes/object.ts +0 -102
  478. package/src/src/ast/nodes/parameter.ts +0 -118
  479. package/src/src/ast/nodes/property.ts +0 -225
  480. package/src/src/ast/nodes/reference.ts +0 -178
  481. package/src/src/ast/nodes/string.ts +0 -114
  482. package/src/src/ast/nodes/types.ts +0 -23
  483. package/src/src/ast/references/index.ts +0 -10
  484. package/src/src/ast/references/jackson.ts +0 -70
  485. package/src/src/ast/references/jakarta.ts +0 -14
  486. package/src/src/ast/references/java.ts +0 -27
  487. package/src/src/ast/references/kotlin.ts +0 -41
  488. package/src/src/ast/references/kotlinx.ts +0 -14
  489. package/src/src/ast/references/okhttp3.ts +0 -5
  490. package/src/src/ast/references/reactor.ts +0 -5
  491. package/src/src/ast/references/spring-reactive.ts +0 -37
  492. package/src/src/ast/references/spring.ts +0 -86
  493. package/src/src/ast/references/swagger.ts +0 -23
  494. package/src/src/ast/utils/get-kotlin-builder-options.ts +0 -19
  495. package/src/src/ast/utils/to-kt-node.ts +0 -31
  496. package/src/src/ast/utils/write-kt-annotations.ts +0 -15
  497. package/src/src/ast/utils/write-kt-arguments.ts +0 -45
  498. package/src/src/ast/utils/write-kt-enum-values.ts +0 -27
  499. package/src/src/ast/utils/write-kt-generic-parameters.ts +0 -12
  500. package/src/src/ast/utils/write-kt-members.ts +0 -25
  501. package/src/src/ast/utils/write-kt-node.ts +0 -37
  502. package/src/src/ast/utils/write-kt-parameters.ts +0 -25
  503. package/src/src/common-results.ts +0 -4
  504. package/src/src/config.ts +0 -61
  505. package/src/src/file-builder.ts +0 -112
  506. package/src/src/generators/file-generator.ts +0 -71
  507. package/src/src/generators/index.ts +0 -5
  508. package/src/src/generators/models/args.ts +0 -142
  509. package/src/src/generators/models/index.ts +0 -4
  510. package/src/src/generators/models/model-generator.ts +0 -850
  511. package/src/src/generators/models/models-generator.ts +0 -65
  512. package/src/src/generators/models/models.ts +0 -95
  513. package/src/src/generators/services/okhttp3-clients/args.ts +0 -90
  514. package/src/src/generators/services/okhttp3-clients/index.ts +0 -4
  515. package/src/src/generators/services/okhttp3-clients/models.ts +0 -73
  516. package/src/src/generators/services/okhttp3-clients/okhttp3-client-generator.ts +0 -639
  517. package/src/src/generators/services/okhttp3-clients/okhttp3-clients-generator.ts +0 -190
  518. package/src/src/generators/services/okhttp3-clients/refs.ts +0 -59
  519. package/src/src/generators/services/spring-controllers/args.ts +0 -95
  520. package/src/src/generators/services/spring-controllers/index.ts +0 -4
  521. package/src/src/generators/services/spring-controllers/models.ts +0 -76
  522. package/src/src/generators/services/spring-controllers/refs.ts +0 -17
  523. package/src/src/generators/services/spring-controllers/spring-controller-generator.ts +0 -1129
  524. package/src/src/generators/services/spring-controllers/spring-controllers-generator.ts +0 -140
  525. package/src/src/generators/services/spring-reactive-web-clients/args.ts +0 -114
  526. package/src/src/generators/services/spring-reactive-web-clients/index.ts +0 -4
  527. package/src/src/generators/services/spring-reactive-web-clients/models.ts +0 -78
  528. package/src/src/generators/services/spring-reactive-web-clients/refs.ts +0 -11
  529. package/src/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.ts +0 -657
  530. package/src/src/generators/services/spring-reactive-web-clients/spring-reactive-web-clients-generator.ts +0 -125
  531. package/src/src/import-collection.ts +0 -98
  532. package/src/src/types.ts +0 -3
  533. package/src/src/utils.ts +0 -55
  534. /package/{assets → dist/assets}/client/okhttp3/ApiAbstractions.kt +0 -0
  535. /package/{assets → dist/assets}/client/okhttp3/ApiClient.kt +0 -0
  536. /package/{assets → dist/assets}/client/okhttp3/ApiResponse.kt +0 -0
  537. /package/{assets → dist/assets}/client/okhttp3/Errors.kt +0 -0
  538. /package/{assets → dist/assets}/client/okhttp3/PartConfig.kt +0 -0
  539. /package/{assets → dist/assets}/client/okhttp3/RequestConfig.kt +0 -0
  540. /package/{assets → dist/assets}/client/okhttp3/RequestMethod.kt +0 -0
  541. /package/{assets → dist/assets}/client/okhttp3/ResponseExtensions.kt +0 -0
  542. /package/{assets → dist/assets}/client/spring-reactive-web-clients/ApiRequestFile.kt +0 -0
  543. /package/{esm → dist}/mod.js +0 -0
  544. /package/{src/src/ast/common.ts → dist/src/ast/common.d.ts} +0 -0
  545. /package/{esm → dist}/src/ast/common.js +0 -0
  546. /package/{esm → dist}/src/ast/index.js +0 -0
  547. /package/{esm → dist}/src/ast/node.js +0 -0
  548. /package/{esm → dist}/src/ast/nodes/types.js +0 -0
  549. /package/{esm → dist}/src/ast/references/index.js +0 -0
  550. /package/{esm → dist}/src/ast/references/jackson.js +0 -0
  551. /package/{esm → dist}/src/ast/references/jakarta.js +0 -0
  552. /package/{esm → dist}/src/ast/references/java.js +0 -0
  553. /package/{esm → dist}/src/ast/references/kotlin.js +0 -0
  554. /package/{esm → dist}/src/ast/references/kotlinx.js +0 -0
  555. /package/{esm → dist}/src/ast/references/okhttp3.js +0 -0
  556. /package/{esm → dist}/src/ast/references/reactor.js +0 -0
  557. /package/{esm → dist}/src/ast/references/spring-reactive.js +0 -0
  558. /package/{esm → dist}/src/ast/references/spring.js +0 -0
  559. /package/{esm → dist}/src/ast/references/swagger.js +0 -0
  560. /package/{esm → dist}/src/ast/utils/get-kotlin-builder-options.js +0 -0
  561. /package/{esm → dist}/src/ast/utils/to-kt-node.js +0 -0
  562. /package/{esm → dist}/src/ast/utils/write-kt-arguments.js +0 -0
  563. /package/{esm → dist}/src/ast/utils/write-kt-enum-values.js +0 -0
  564. /package/{esm → dist}/src/ast/utils/write-kt-generic-parameters.js +0 -0
  565. /package/{esm → dist}/src/ast/utils/write-kt-parameters.js +0 -0
  566. /package/{esm → dist}/src/common-results.js +0 -0
  567. /package/{esm → dist}/src/config.js +0 -0
  568. /package/{esm → dist}/src/generators/index.js +0 -0
  569. /package/{esm → dist}/src/generators/models/args.js +0 -0
  570. /package/{esm → dist}/src/generators/models/index.js +0 -0
  571. /package/{esm → dist}/src/generators/models/models.js +0 -0
  572. /package/{esm → dist}/src/generators/services/okhttp3-clients/args.js +0 -0
  573. /package/{esm → dist}/src/generators/services/okhttp3-clients/index.js +0 -0
  574. /package/{esm → dist}/src/generators/services/okhttp3-clients/models.js +0 -0
  575. /package/{esm → dist}/src/generators/services/okhttp3-clients/refs.js +0 -0
  576. /package/{esm → dist}/src/generators/services/spring-controllers/args.js +0 -0
  577. /package/{esm → dist}/src/generators/services/spring-controllers/index.js +0 -0
  578. /package/{esm → dist}/src/generators/services/spring-controllers/models.js +0 -0
  579. /package/{esm → dist}/src/generators/services/spring-controllers/refs.js +0 -0
  580. /package/{esm → dist}/src/generators/services/spring-reactive-web-clients/args.js +0 -0
  581. /package/{esm → dist}/src/generators/services/spring-reactive-web-clients/index.js +0 -0
  582. /package/{esm → dist}/src/generators/services/spring-reactive-web-clients/models.js +0 -0
  583. /package/{esm → dist}/src/generators/services/spring-reactive-web-clients/refs.js +0 -0
  584. /package/{esm → dist}/src/types.js +0 -0
@@ -1,1129 +0,0 @@
1
- import {
2
- type ApiEndpoint,
3
- type ApiParameter,
4
- type AppendValueGroup,
5
- appendValueGroup,
6
- type BasicAppendValue,
7
- builderTemplate as s,
8
- createOverwriteProxy,
9
- getSourceDisplayName,
10
- type MaybePromise,
11
- notNullish,
12
- resolveAnyOfAndAllOf,
13
- SourceBuilder,
14
- toCasing,
15
- } from '@goast/core';
16
-
17
- import { getReasonPhrase } from 'http-status-codes';
18
- import { kt } from '../../../ast/index.js';
19
- import type { KotlinImport } from '../../../common-results.js';
20
- import { KotlinFileBuilder } from '../../../file-builder.js';
21
- import type { ApiParameterWithMultipartInfo } from '../../../types.js';
22
- import { getArrayItemStringEnumSchema, getSourceDocLine, getStringEnumSchema, modifyString } from '../../../utils.js';
23
- import { KotlinFileGenerator } from '../../file-generator.js';
24
- import type { DefaultKotlinSpringControllerGeneratorArgs as Args } from './index.js';
25
- import type { KotlinServiceGeneratorContext, KotlinServiceGeneratorOutput } from './models.js';
26
-
27
- type Context = KotlinServiceGeneratorContext;
28
- type Output = KotlinServiceGeneratorOutput;
29
- type Builder = KotlinFileBuilder;
30
-
31
- const strictResponseCustomProperty = 'strict-response';
32
-
33
- export interface KotlinSpringControllerGenerator<
34
- TOutput extends Output = Output,
35
- > {
36
- generate(ctx: Context): MaybePromise<TOutput>;
37
- }
38
-
39
- export class DefaultKotlinSpringControllerGenerator extends KotlinFileGenerator<Context, Output>
40
- implements KotlinSpringControllerGenerator {
41
- public generate(
42
- ctx: KotlinServiceGeneratorContext,
43
- ): MaybePromise<KotlinServiceGeneratorOutput> {
44
- const packageName = this.getPackageName(ctx, {});
45
- const dirPath = this.getDirectoryPath(ctx, { packageName });
46
-
47
- console.log(`Generating service ${ctx.service.id} to ${dirPath}...`);
48
- console.log(` Endpoints:`);
49
- ctx.service.endpoints.forEach((endpoint) => {
50
- console.log(
51
- ` - ${getSourceDisplayName(ctx.data, endpoint)} [${toCasing(endpoint.name, ctx.config.functionNameCasing)}]`,
52
- );
53
- });
54
- return {
55
- apiInterface: this.generateApiInterfaceFile(ctx, {
56
- dirPath,
57
- packageName,
58
- }),
59
- apiController: this.generateApiControllerFile(ctx, {
60
- dirPath,
61
- packageName,
62
- }),
63
- apiDelegate: this.generateApiDelegateInterfaceFile(ctx, {
64
- dirPath,
65
- packageName,
66
- }),
67
- };
68
- }
69
-
70
- // #region API Interface
71
- protected generateApiInterfaceFile(
72
- ctx: Context,
73
- args: Args.GenerateApiInterfaceFile,
74
- ): KotlinImport {
75
- const { dirPath, packageName } = args;
76
- const typeName = this.getApiInterfaceName(ctx, {});
77
- const fileName = `${typeName}.kt`;
78
- const filePath = `${dirPath}/${fileName}`;
79
- console.log(` Generating API interface ${typeName} to ${fileName}...`);
80
-
81
- const builder = new KotlinFileBuilder(packageName, ctx.config);
82
- builder.append(
83
- this.getApiInterfaceFileContent(ctx, { interfaceName: typeName }),
84
- );
85
- builder.writeToFile(filePath);
86
-
87
- return { typeName, packageName };
88
- }
89
-
90
- protected getApiInterfaceFileContent(
91
- ctx: Context,
92
- args: Args.GetApiInterfaceFileContent,
93
- ): AppendValueGroup<Builder> {
94
- const { interfaceName } = args;
95
- return appendValueGroup<Builder>(
96
- [this.getApiInterface(ctx, { interfaceName })],
97
- '\n',
98
- );
99
- }
100
-
101
- protected getApiInterface(
102
- ctx: Context,
103
- args: Args.GetApiInterface,
104
- ): kt.Interface<Builder> {
105
- const { interfaceName } = args;
106
-
107
- return kt.interface(interfaceName, {
108
- annotations: this.getApiInterfaceAnnotations(ctx),
109
- members: this.getApiInterfaceMembers(ctx),
110
- companionObject: kt.object({
111
- members: ctx.service.endpoints.map((endpoint) =>
112
- kt.property(this.getPathConstantName(ctx, { endpoint }), {
113
- const: true,
114
- default: kt.string(this.getEndpointPath(ctx, { endpoint })),
115
- })
116
- ),
117
- }),
118
- });
119
- }
120
-
121
- protected getApiInterfaceAnnotations(ctx: Context): kt.Annotation<Builder>[] {
122
- const validated = kt.annotation(kt.refs.spring.validated());
123
- const requestMapping = kt.annotation(kt.refs.spring.requestMapping(), [
124
- kt.argument(this.getControllerRequestMapping(ctx, { prefix: 'api' })),
125
- ]);
126
- return [validated, requestMapping];
127
- }
128
-
129
- protected getApiInterfaceMembers(ctx: Context): kt.InterfaceMember<Builder>[] {
130
- const members: kt.InterfaceMember<Builder>[] = [];
131
- const delegateInterfaceName = this.getApiDelegateInterfaceName(ctx, {});
132
-
133
- members.push(
134
- kt.function('getDelegate', {
135
- returnType: delegateInterfaceName,
136
- singleExpression: true,
137
- body: kt.object({
138
- implements: [delegateInterfaceName],
139
- }),
140
- }),
141
- kt.function('getExceptionHandler', {
142
- returnType: ctx.refs.apiExceptionHandler({ nullable: true }),
143
- singleExpression: true,
144
- body: kt.toNode(null),
145
- }),
146
- );
147
-
148
- ctx.service.endpoints.forEach((endpoint) => {
149
- members.push(this.getApiInterfaceEndpointMethod(ctx, { endpoint }));
150
- });
151
-
152
- members.push(
153
- ...ctx.service.endpoints
154
- .filter((endpoint) => endpoint.custom[strictResponseCustomProperty] ?? ctx.config.strictResponseEntities)
155
- .map((endpoint) => this.getApiResponseEntityClass(ctx, { endpoint })),
156
- );
157
-
158
- return members;
159
- }
160
-
161
- protected getApiInterfaceEndpointMethod(
162
- ctx: Context,
163
- args: Args.GetApiInterfaceEndpointMethod,
164
- ): kt.Function<Builder> {
165
- const { endpoint } = args;
166
- const parameters = this.getAllParameters(ctx, { endpoint });
167
-
168
- return kt.function(toCasing(endpoint.name, ctx.config.functionNameCasing), {
169
- doc: kt.doc(this.getEndpointDocDescription(ctx, { endpoint })),
170
- suspend: ctx.config.suspendingFunctions,
171
- annotations: this.getApiInterfaceEndpointMethodAnnnotations(
172
- ctx,
173
- endpoint,
174
- ),
175
- parameters: parameters.map((parameter) => this.getApiInterfaceEndpointMethodParameter(ctx, endpoint, parameter)),
176
- returnType: kt.refs.spring.responseEntity(['*']),
177
- body: this.getApiInterfaceEndpointMethodBody(ctx, endpoint, parameters),
178
- });
179
- }
180
-
181
- protected getApiInterfaceEndpointMethodAnnnotations(
182
- ctx: Context,
183
- endpoint: ApiEndpoint,
184
- ): kt.Annotation<Builder>[] {
185
- const annotations: kt.Annotation<Builder>[] = [];
186
-
187
- if (ctx.config.addSwaggerAnnotations) {
188
- annotations.push(
189
- kt.annotation(kt.refs.swagger.operation(), [
190
- endpoint.summary ? kt.argument.named('summary', kt.string(endpoint.summary?.trim())) : null,
191
- kt.argument.named('operationId', kt.string(endpoint.name)),
192
- endpoint.description
193
- ? kt.argument.named(
194
- 'description',
195
- kt.string(endpoint.description?.trim()),
196
- )
197
- : null,
198
- endpoint.deprecated !== undefined ? kt.argument.named('deprecated', kt.toNode(endpoint.deprecated)) : null,
199
- ]),
200
- );
201
-
202
- if (endpoint.responses.length > 0) {
203
- annotations.push(
204
- kt.annotation(kt.refs.swagger.apiResponses(), [
205
- kt.argument.named(
206
- 'value',
207
- kt.collectionLiteral(
208
- endpoint.responses.map((response) =>
209
- kt.call(kt.refs.swagger.apiResponse(), [
210
- kt.argument.named(
211
- 'responseCode',
212
- // The spec's own response key, not `statusCode`: that field is `undefined` for
213
- // `default` and every range code, and `kt.string(undefined)` renders the bare token
214
- // `null`, which is not assignable to this non-nullable annotation element.
215
- kt.string(response.statusKey),
216
- ),
217
- response.description
218
- ? kt.argument.named(
219
- 'description',
220
- kt.string(response.description?.trim()),
221
- )
222
- : null,
223
- kt.argument.named(
224
- 'content',
225
- kt.collectionLiteral(
226
- (response.contentOptions.length === 0
227
- ? [{ schema: undefined, type: undefined }]
228
- : response.contentOptions).map(
229
- (content) => {
230
- let schemaType: kt.Type<Builder> = this.getSchemaType(ctx, {
231
- schema: content.schema,
232
- }) ?? kt.refs.any();
233
- let isArray = false;
234
-
235
- if (kt.refs.list.matches(schemaType)) {
236
- isArray = true;
237
- schemaType = schemaType.generics[0];
238
- }
239
-
240
- let ktSchema = kt.call(kt.refs.swagger.schema(), [
241
- kt.argument.named(
242
- 'implementation',
243
- s<Builder>`${schemaType}::class`,
244
- ),
245
- ]);
246
- if (isArray) {
247
- ktSchema = kt.call(kt.refs.swagger.arraySchema(), [
248
- kt.argument.named('schema', ktSchema),
249
- ]);
250
- }
251
-
252
- return kt.call(kt.refs.swagger.content(), [
253
- content.type
254
- ? kt.argument.named(
255
- 'mediaType',
256
- kt.string(content.type),
257
- )
258
- : null,
259
- content.schema
260
- ? kt.argument.named(
261
- isArray ? 'array' : 'schema',
262
- ktSchema,
263
- )
264
- : null,
265
- ]);
266
- },
267
- ),
268
- ),
269
- ),
270
- ])
271
- ),
272
- ),
273
- ),
274
- ]),
275
- );
276
- }
277
- }
278
-
279
- const requestMapping = kt.annotation(kt.refs.spring.requestMapping(), [
280
- kt.argument.named(
281
- 'method',
282
- kt.collectionLiteral([
283
- kt.call([
284
- kt.refs.spring.requestMethod(),
285
- endpoint.method.toUpperCase(),
286
- ]),
287
- ]),
288
- ),
289
- kt.argument.named(
290
- 'value',
291
- kt.collectionLiteral([this.getPathConstantName(ctx, { endpoint })]),
292
- ),
293
- ]);
294
- if (endpoint.requestBody && endpoint.requestBody.content.length > 0) {
295
- requestMapping.arguments.push(
296
- kt.argument.named(
297
- 'consumes',
298
- kt.collectionLiteral(
299
- endpoint.requestBody?.content.map((x) => kt.string(x.type)),
300
- ),
301
- ),
302
- );
303
- }
304
- annotations.push(requestMapping);
305
-
306
- return annotations;
307
- }
308
-
309
- protected getApiInterfaceEndpointMethodParameter(
310
- ctx: Context,
311
- endpoint: ApiEndpoint,
312
- parameter: ApiParameterWithMultipartInfo,
313
- ): kt.Parameter<Builder> {
314
- const enumItemSchema = parameter.multipart ? undefined : getArrayItemStringEnumSchema(parameter.schema);
315
- const enumSchema = parameter.multipart ? undefined : getStringEnumSchema(parameter.schema);
316
- const enumValueSchema = enumSchema ?? enumItemSchema;
317
- const actualType = this.getSchemaType(ctx, { schema: parameter.schema });
318
- const isEnumSchema = !!enumValueSchema && !!actualType &&
319
- !!this.getSchemaType(ctx, { schema: enumValueSchema });
320
- const schemaType = !isEnumSchema
321
- ? actualType
322
- : enumItemSchema
323
- ? kt.refs.list([kt.refs.string()], { nullable: actualType?.nullable })
324
- : kt.refs.string({ nullable: actualType?.nullable });
325
- const result = kt.parameter(
326
- toCasing(parameter.name, ctx.config.parameterNameCasing),
327
- this.getParameterType(ctx, {
328
- endpoint,
329
- parameter,
330
- type: isEnumSchema ? schemaType : undefined,
331
- }),
332
- {
333
- default: parameter.multipart && parameter.schema?.default !== undefined
334
- ? kt.toNode(parameter.schema?.default)
335
- : null,
336
- },
337
- );
338
-
339
- if (ctx.config.addSwaggerAnnotations) {
340
- const annotation = kt.annotation(kt.refs.swagger.parameter(), [
341
- parameter.multipart ? kt.argument.named('name', kt.string(parameter.multipart.name)) : null,
342
- parameter.description
343
- ? kt.argument.named(
344
- 'description',
345
- kt.string(parameter.description?.trim()),
346
- )
347
- : null,
348
- kt.argument.named('required', parameter.required),
349
- // Only emitted when set, matching how the model generator marks a deprecated property on `@Schema`.
350
- // `@Operation` always states `deprecated`, but doing that for every parameter of every endpoint
351
- // would add `deprecated = false` noise far beyond what the annotation is documenting.
352
- parameter.deprecated ? kt.argument.named('deprecated', kt.toNode(true)) : null,
353
- parameter.target === 'header' ? kt.argument.named('hidden', kt.toNode(true)) : null,
354
- ]);
355
-
356
- const schemaArgs: kt.Argument<SourceBuilder>[] = [];
357
- if (parameter.schema?.default !== undefined) {
358
- schemaArgs.push(
359
- kt.argument.named(
360
- 'defaultValue',
361
- kt.string(String(parameter.schema?.default)),
362
- ),
363
- );
364
- }
365
- if (isEnumSchema) {
366
- schemaArgs.push(
367
- kt.argument.named(
368
- 'allowableValues',
369
- kt.collectionLiteral(
370
- enumValueSchema?.enum?.map((x) => kt.string(x?.toString())),
371
- ),
372
- ),
373
- );
374
- }
375
- if (schemaArgs.length) {
376
- annotation.arguments.push(
377
- kt.argument.named(
378
- 'schema',
379
- kt.call([kt.refs.swagger.schema()], schemaArgs),
380
- ),
381
- );
382
- }
383
- result.annotations.push(annotation);
384
- }
385
-
386
- const isCorePackage = !schemaType?.packageName ||
387
- /^(kotlin|java)(\..*|$)/.test(schemaType.packageName);
388
- if (!isCorePackage && ctx.config.addJakartaValidationAnnotations) {
389
- result.annotations.push(kt.annotation(kt.refs.jakarta.valid()));
390
- }
391
-
392
- if (parameter.target === 'body' && !parameter.multipart) {
393
- // A bare @RequestBody is required as far as Spring is concerned, so an optional body has to say so in the
394
- // annotation too - the nullable parameter type alone still answers 400 when the body is missing.
395
- result.annotations.push(
396
- kt.annotation(
397
- kt.refs.spring.requestBody(),
398
- parameter.required ? [] : [kt.argument.named('required', parameter.required)],
399
- ),
400
- );
401
- }
402
-
403
- if (parameter.target === 'query') {
404
- const annotation = kt.annotation(kt.refs.spring.requestParam(), [
405
- kt.argument.named('value', kt.string(parameter.name)),
406
- kt.argument.named('required', parameter.required),
407
- ]);
408
- if (parameter.schema?.default !== undefined) {
409
- annotation.arguments.push(
410
- kt.argument.named(
411
- 'defaultValue',
412
- kt.string(String(parameter.schema?.default)),
413
- ),
414
- );
415
- }
416
- result.annotations.push(annotation);
417
- }
418
-
419
- if (parameter.target === 'path') {
420
- result.annotations.push(
421
- kt.annotation(kt.refs.spring.pathVariable(), [
422
- kt.string(parameter.name),
423
- ]),
424
- );
425
- }
426
-
427
- if (parameter.target === 'header') {
428
- result.annotations.push(
429
- kt.annotation(kt.refs.spring.requestHeader(), [
430
- kt.string(parameter.name),
431
- ]),
432
- );
433
- }
434
-
435
- if (parameter.multipart) {
436
- result.annotations.push(
437
- kt.annotation(kt.refs.spring.requestPart(), [
438
- kt.argument.named('value', kt.string(parameter.multipart.name)),
439
- kt.argument.named('required', parameter.required),
440
- ]),
441
- );
442
- }
443
-
444
- return result;
445
- }
446
-
447
- protected getApiInterfaceEndpointMethodBody(
448
- ctx: Context,
449
- endpoint: ApiEndpoint,
450
- parameters: ApiParameterWithMultipartInfo[],
451
- ): AppendValueGroup<Builder> {
452
- const body = appendValueGroup<Builder>([], '\n');
453
-
454
- parameters.forEach((x) => {
455
- const paramName = toCasing(x.name, ctx.config.parameterNameCasing);
456
- if (x.multipart) return;
457
-
458
- const enumItemSchema = getArrayItemStringEnumSchema(x.schema);
459
- const enumValueSchema = getStringEnumSchema(x.schema) ?? enumItemSchema;
460
- if (!enumValueSchema) return;
461
-
462
- const schemaType = this.getSchemaType(ctx, { schema: x.schema });
463
- const enumType = this.getSchemaType(ctx, { schema: enumValueSchema });
464
- if (schemaType && enumType) {
465
- body.values.push(
466
- s`val ${paramName} = ${paramName}${schemaType.nullable || (!x.required && !x.schema?.default) ? '?' : ''}.${
467
- enumItemSchema ? 'map' : 'let'
468
- } { ${enumType}.fromValue(it) ?: return ${kt.refs.spring.responseEntity.infer()}.status(${kt.refs.spring.httpStatus()}.BAD_REQUEST).body(${
469
- kt.string(
470
- `Invalid value for parameter ${x.name}`,
471
- )
472
- }) }`,
473
- );
474
- }
475
- });
476
-
477
- body.values.push(
478
- s`try {${s.indent`
479
- return ${
480
- kt.call(
481
- [
482
- kt.call(kt.reference('getDelegate'), []),
483
- toCasing(endpoint.name, ctx.config.functionNameCasing),
484
- ],
485
- parameters.map((x) => toCasing(x.name, ctx.config.parameterNameCasing)),
486
- )
487
- }`}
488
- } catch (e: ${kt.refs.throwable()}) {${s.indent`
489
- return getExceptionHandler()?.handleApiException(e) ?: throw e`}
490
- }`,
491
- );
492
-
493
- return body;
494
- }
495
-
496
- protected getApiResponseEntityClass(
497
- ctx: Context,
498
- args: Args.GetApiResponseEntityClass,
499
- ): kt.Class<Builder> {
500
- const { endpoint } = args;
501
- const name = this.getApiResponseEntityName(ctx, { endpoint });
502
- // Spring 7's `ResponseEntity<T>` carries an `Any` upper bound (JSpecify), so the subclass must bound `T`.
503
- // The body parameter is then made nullable (`T?`) to keep null-body ("no response body") responses legal
504
- // while staying wire-identical, since Spring's super constructor accepts a `@Nullable T body`.
505
- const springBoot4 = ctx.config.springBootVersion === 4;
506
- return kt.class(name, {
507
- doc: kt.doc(`Response entity for ${endpoint.name}.`),
508
- generics: [kt.genericParameter('T', springBoot4 ? { constraint: kt.refs.any() } : undefined)],
509
- primaryConstructor: kt.constructor(
510
- [
511
- kt.parameter.class('body', kt.reference('T', null, springBoot4 ? { nullable: true } : undefined)),
512
- kt.parameter.class('rawStatus', kt.refs.int()),
513
- kt.parameter.class(
514
- 'headers',
515
- kt.refs.spring.multiValueMap([kt.refs.string(), kt.refs.string()], {
516
- nullable: true,
517
- }),
518
- { default: kt.toNode(null) },
519
- ),
520
- ],
521
- null,
522
- {
523
- accessModifier: endpoint.responses.length > 0 ? 'private' : null,
524
- delegateTarget: 'super',
525
- delegateArguments: [
526
- kt.argument('body'),
527
- kt.argument('headers'),
528
- kt.argument('rawStatus'),
529
- ],
530
- },
531
- ),
532
- extends: kt.refs.spring.responseEntity([kt.reference('T')]),
533
- companionObject: kt.object({
534
- members: Array.from(
535
- new Set(
536
- [
537
- ...ctx.config.defaultStatusCodes,
538
- 501,
539
- ...endpoint.responses.map((x) => x.statusCode),
540
- ].filter(notNullish),
541
- ),
542
- ).map((code) => {
543
- const fnName = toCasing(
544
- getReasonPhrase(code),
545
- ctx.config.functionNameCasing,
546
- );
547
- const response = endpoint.responses.find(
548
- (x) => x.statusCode === code,
549
- );
550
- const responseType = response ? this.getResponseType(ctx, { endpoint, response }) : undefined;
551
- const contentType = response?.contentOptions.find(
552
- (x) => x.schema,
553
- )?.type;
554
-
555
- const hasResponseBody = responseType && !kt.refs.unit.matches(responseType);
556
- return kt.function(fnName, {
557
- parameters: [
558
- hasResponseBody ? kt.parameter.class('body', responseType) : null,
559
- kt.parameter.class(
560
- 'headers',
561
- kt.refs.spring.multiValueMap(
562
- [kt.refs.string(), kt.refs.string()],
563
- { nullable: true },
564
- ),
565
- { default: kt.toNode(null) },
566
- ),
567
- ],
568
- singleExpression: true,
569
- body: kt.call(
570
- [
571
- kt.reference(
572
- this.getApiResponseEntityName(ctx, { endpoint }),
573
- null,
574
- {
575
- generics: [
576
- hasResponseBody
577
- ? responseType
578
- // `Unit?` violates the `T : Any` bound under Spring Boot 4; the `null` body argument
579
- // below stays (now legal because the subclass body parameter is nullable).
580
- : (springBoot4 ? kt.refs.unit() : kt.refs.unit({ nullable: true })),
581
- ],
582
- },
583
- ),
584
- ],
585
- [
586
- hasResponseBody ? kt.argument('body') : kt.toNode(null),
587
- kt.toNode(code),
588
- contentType
589
- ? s`${kt.refs.spring.linkedMultiValueMap([kt.refs.string(), kt.refs.string()])}().also {
590
- if (headers != null) {
591
- it.putAll(headers)
592
- }
593
- it.addIfAbsent("Content-Type", ${kt.string(contentType)})
594
- }`
595
- : kt.argument('headers'),
596
- ],
597
- ),
598
- });
599
- }),
600
- }),
601
- });
602
- }
603
- // #endregion
604
-
605
- // #region API Controller
606
- protected generateApiControllerFile(
607
- ctx: Context,
608
- args: Args.GenerateApiControllerFile,
609
- ): KotlinImport {
610
- const { dirPath, packageName } = args;
611
- const typeName = this.getApiControllerName(ctx, {});
612
- const fileName = `${typeName}.kt`;
613
- const filePath = `${dirPath}/${fileName}`;
614
- console.log(` Generating API controller ${typeName} to ${fileName}...`);
615
-
616
- const builder = new KotlinFileBuilder(packageName, ctx.config);
617
- builder.append(
618
- this.getApiControllerFileContent(ctx, { controllerName: typeName }),
619
- );
620
- builder.writeToFile(filePath);
621
-
622
- return { typeName, packageName };
623
- }
624
-
625
- protected getApiControllerFileContent(
626
- ctx: Context,
627
- args: Args.GetApiControllerFileContent,
628
- ): AppendValueGroup<Builder> {
629
- const { controllerName } = args;
630
-
631
- return appendValueGroup(
632
- [this.getApiController(ctx, { controllerName })],
633
- '\n',
634
- );
635
- }
636
-
637
- protected getApiController(
638
- ctx: Context,
639
- args: Args.GetApiController,
640
- ): kt.Class<Builder> {
641
- const { controllerName } = args;
642
-
643
- return kt.class(controllerName, {
644
- annotations: this.getApiControllerAnnotations(ctx),
645
- primaryConstructor: kt.constructor([
646
- kt.parameter.class(
647
- 'delegate',
648
- kt.reference(this.getApiDelegateInterfaceName(ctx, {}), null, {
649
- nullable: true,
650
- }),
651
- {
652
- annotations: [
653
- kt.annotation(kt.refs.spring.autowired(), [
654
- kt.argument.named('required', 'false'),
655
- ]),
656
- ],
657
- },
658
- ),
659
- kt.parameter.class(
660
- 'exceptionHandler',
661
- ctx.refs.apiExceptionHandler({ nullable: true }),
662
- {
663
- annotations: [
664
- kt.annotation(kt.refs.spring.autowired(), [
665
- kt.argument.named('required', 'false'),
666
- ]),
667
- ],
668
- accessModifier: 'private',
669
- property: 'readonly',
670
- },
671
- ),
672
- ]),
673
- implements: [this.getApiInterfaceName(ctx, {})],
674
- members: this.getApiControllerMembers(ctx),
675
- });
676
- }
677
-
678
- protected getApiControllerAnnotations(ctx: Context): kt.Annotation<Builder>[] {
679
- const annotations: kt.Annotation<Builder>[] = [];
680
- if (ctx.config.addJakartaValidationAnnotations) {
681
- annotations.push(
682
- kt.annotation(kt.refs.jakarta.generated(), [
683
- kt.argument.named(
684
- 'value',
685
- kt.collectionLiteral([
686
- kt.string('com.goast.kotlin.spring-service-generator'),
687
- ]),
688
- ),
689
- ]),
690
- );
691
- }
692
- annotations.push(kt.annotation(kt.refs.spring.controller()));
693
- annotations.push(
694
- kt.annotation(kt.refs.spring.requestMapping(), [
695
- this.getControllerRequestMapping(ctx, {}),
696
- ]),
697
- );
698
- return annotations;
699
- }
700
-
701
- protected getApiControllerMembers(ctx: Context): kt.ClassMember<Builder>[] {
702
- const delegateInterfaceName = this.getApiDelegateInterfaceName(ctx, {});
703
-
704
- const delegateProp = kt.property<Builder>('delegate', {
705
- accessModifier: 'private',
706
- default: s`delegate ?: ${kt.object({ implements: [delegateInterfaceName] })}`,
707
- });
708
-
709
- const getDelegateFun = kt.function<Builder>('getDelegate', {
710
- override: true,
711
- returnType: delegateInterfaceName,
712
- singleExpression: true,
713
- body: kt.reference('delegate'),
714
- });
715
-
716
- const getExceptionHandlerFun = kt.function<Builder>('getExceptionHandler', {
717
- override: true,
718
- returnType: ctx.refs.apiExceptionHandler({ nullable: true }),
719
- singleExpression: true,
720
- body: kt.reference('exceptionHandler'),
721
- });
722
-
723
- return [delegateProp, getDelegateFun, getExceptionHandlerFun];
724
- }
725
- // #endregion
726
-
727
- // #region API Delegate Interface
728
- protected generateApiDelegateInterfaceFile(
729
- ctx: Context,
730
- args: Args.GenerateApiDelegateInterfaceFile,
731
- ): KotlinImport {
732
- const { dirPath, packageName } = args;
733
- const typeName = this.getApiDelegateInterfaceName(ctx, {});
734
- const fileName = `${typeName}.kt`;
735
- const filePath = `${dirPath}/${fileName}`;
736
- console.log(` Generating API delegate ${typeName} to ${fileName}...`);
737
-
738
- const builder = new KotlinFileBuilder(packageName, ctx.config);
739
- builder.append(
740
- this.getApiDelegateInterfaceFileContent(ctx, {
741
- delegateInterfaceName: typeName,
742
- }),
743
- );
744
- builder.writeToFile(filePath);
745
-
746
- return { typeName, packageName };
747
- }
748
-
749
- protected getApiDelegateInterfaceFileContent(
750
- ctx: Context,
751
- args: Args.GetApiDelegateInterfaceFileContent,
752
- ): AppendValueGroup<Builder> {
753
- const { delegateInterfaceName } = args;
754
-
755
- return appendValueGroup(
756
- [this.getApiDelegateInterface(ctx, { delegateInterfaceName })],
757
- '\n',
758
- );
759
- }
760
-
761
- protected getApiDelegateInterface(
762
- ctx: Context,
763
- args: Args.GetApiDelegateInterface,
764
- ): kt.Interface<Builder> {
765
- const { delegateInterfaceName } = args;
766
-
767
- return kt.interface(delegateInterfaceName, {
768
- annotations: this.getApiDelegateInterfaceAnnotations(ctx),
769
- members: this.getApiDelegateInterfaceMembers(ctx),
770
- });
771
- }
772
-
773
- protected getApiDelegateInterfaceAnnotations(
774
- ctx: Context,
775
- ): kt.Annotation<Builder>[] {
776
- const annotations: kt.Annotation<Builder>[] = [];
777
- if (ctx.config.addJakartaValidationAnnotations) {
778
- annotations.push(
779
- kt.annotation(kt.refs.jakarta.generated(), [
780
- kt.argument.named(
781
- 'value',
782
- kt.collectionLiteral([
783
- kt.string('com.goast.kotlin.spring-service-generator'),
784
- ]),
785
- ),
786
- ]),
787
- );
788
- }
789
- return annotations;
790
- }
791
-
792
- protected getApiDelegateInterfaceMembers(
793
- ctx: Context,
794
- ): kt.InterfaceMember<Builder>[] {
795
- const members: kt.InterfaceMember<Builder>[] = [];
796
-
797
- members.push(
798
- kt.function('getRequest', {
799
- returnType: kt.refs.java.optional([kt.refs.spring.nativeWebRequest()]),
800
- singleExpression: true,
801
- body: kt.call([kt.refs.java.optional.infer(), 'empty'], []),
802
- }),
803
- );
804
-
805
- ctx.service.endpoints.forEach((endpoint) => {
806
- members.push(
807
- this.getApiDelegateInterfaceEndpointMethod(ctx, { endpoint }),
808
- );
809
- });
810
-
811
- return members;
812
- }
813
-
814
- protected getApiDelegateInterfaceEndpointMethod(
815
- ctx: Context,
816
- args: Args.GetApiDelegateInterfaceEndpointMethod,
817
- ): kt.Function<Builder> {
818
- const { endpoint } = args;
819
- const parameters = this.getAllParameters(ctx, { endpoint });
820
-
821
- const fn = kt.function<Builder>(
822
- toCasing(endpoint.name, ctx.config.functionNameCasing),
823
- {
824
- doc: kt.doc(this.getEndpointDocDescription(ctx, { endpoint })),
825
- suspend: ctx.config.suspendingFunctions,
826
- parameters: parameters.map((parameter) => {
827
- return kt.parameter(
828
- toCasing(parameter.name, ctx.config.parameterNameCasing),
829
- this.getParameterType(ctx, { endpoint, parameter }),
830
- );
831
- }),
832
- },
833
- );
834
-
835
- if (endpoint.custom[strictResponseCustomProperty] ?? ctx.config.strictResponseEntities) {
836
- const responseEntity = kt.reference.genericFactory(
837
- this.getApiResponseEntityName(ctx, { endpoint }),
838
- `${this.getPackageName(ctx, {})}.${this.getApiInterfaceName(ctx, {})}`,
839
- );
840
- fn.returnType = responseEntity(['*']);
841
- fn.body = appendValueGroup(
842
- [
843
- s`return ${
844
- kt.call(
845
- [
846
- responseEntity.infer(),
847
- toCasing(getReasonPhrase(501), ctx.config.functionNameCasing),
848
- ],
849
- [],
850
- )
851
- }`,
852
- ],
853
- '\n',
854
- );
855
- } else {
856
- fn.returnType = kt.refs.spring.responseEntity([
857
- this.getResponseType(ctx, { endpoint }),
858
- ]);
859
- fn.body = appendValueGroup(
860
- [
861
- s`return ${kt.refs.spring.responseEntity.infer()}(${kt.refs.spring.httpStatus()}.NOT_IMPLEMENTED)`,
862
- ],
863
- '\n',
864
- );
865
- }
866
-
867
- return fn;
868
- }
869
- // #endregion
870
-
871
- protected getParameterType(
872
- ctx: Context,
873
- args: Args.GetParameterType,
874
- ): kt.Type<Builder> {
875
- const { parameter } = args;
876
- if (parameter.multipart?.isFile) {
877
- return kt.refs.spring.filePart();
878
- }
879
- const type = this.getTypeUsage(ctx, {
880
- schema: parameter.schema,
881
- nullable: (!parameter.required && parameter.schema?.default === undefined) ||
882
- undefined,
883
- type: args.type,
884
- });
885
- return parameter.target === 'body' ? adjustListType(ctx, type) : type;
886
- }
887
-
888
- protected getResponseType(
889
- ctx: Context,
890
- args: Args.GetResponseType,
891
- ): kt.Type<Builder> {
892
- const { endpoint, response } = args;
893
- const responseSchemas = (response ? [response] : endpoint.responses)
894
- .flatMap((x) => x.contentOptions.flatMap((x) => x.schema))
895
- .filter(notNullish)
896
- .filter(
897
- (x, i, a) =>
898
- a.findIndex((y) => {
899
- const xType = this.getSchemaType(ctx, { schema: x });
900
- const yType = this.getSchemaType(ctx, { schema: y });
901
- return (
902
- xType?.name === yType?.name &&
903
- xType?.packageName === yType?.packageName
904
- );
905
- }) === i,
906
- );
907
-
908
- if (responseSchemas.length === 1) {
909
- return adjustListType(
910
- ctx,
911
- this.getTypeUsage(ctx, {
912
- schema: responseSchemas[0],
913
- fallback: kt.refs.unit(),
914
- }),
915
- );
916
- } else if (responseSchemas.length === 0) {
917
- return kt.refs.unit();
918
- } else {
919
- // Under Spring Boot 4, this type flows into `ResponseEntity<T : Any>` (e.g. the delegate default methods),
920
- // so the ambiguous/unknown-body fallback must be non-null `Any` rather than `Any?`.
921
- return ctx.config.springBootVersion === 4 ? kt.refs.any() : kt.refs.any({ nullable: true });
922
- }
923
- }
924
-
925
- protected getTypeUsage(
926
- ctx: Context,
927
- args: Args.GetTypeUsage<Builder>,
928
- ): kt.Type<Builder> {
929
- const { schema, nullable, fallback } = args;
930
- const type = args.type ?? this.getSchemaType(ctx, { schema });
931
- return type
932
- ? createOverwriteProxy(type, { nullable: nullable ?? type.nullable })
933
- : (fallback ?? kt.refs.any({ nullable }));
934
- }
935
-
936
- protected getSchemaType(
937
- ctx: Context,
938
- args: Args.GetSchemaType,
939
- ): kt.Reference<SourceBuilder> | undefined {
940
- const { schema } = args;
941
- return schema && ctx.input.kotlin.models[schema.id].type;
942
- }
943
-
944
- protected getEndpointDocDescription(ctx: Context, args: Args.GetEndpointDocDescription): BasicAppendValue<Builder> {
945
- const docSegments = [args.endpoint.description?.trim()];
946
-
947
- if (ctx.config.includeSourceInDocs) {
948
- docSegments.push(getSourceDocLine(args.endpoint));
949
- }
950
-
951
- return docSegments.filter(notNullish).join('\n\n');
952
- }
953
-
954
- protected getControllerRequestMapping(
955
- ctx: Context,
956
- args: Args.GetControllerRequestMapping,
957
- ): kt.String<Builder> {
958
- let { prefix } = args;
959
- const basePath = this.getBasePath(ctx, {});
960
- prefix ??= `openapi.${toCasing(ctx.service.name, ctx.config.propertyNameCasing)}`;
961
- return kt.string(`\${${prefix}.base-path:${basePath}}`);
962
- }
963
-
964
- protected getBasePath(ctx: Context, _args: Args.GetBasePath): string {
965
- return modifyString(
966
- (ctx.service.$src ?? ctx.service.endpoints[0]?.$src)?.document
967
- .servers?.[0]?.url ?? '/',
968
- ctx.config.basePath,
969
- ctx.service,
970
- );
971
- }
972
-
973
- protected getEndpointPath(ctx: Context, args: Args.GetEndpointPath): string {
974
- const { endpoint } = args;
975
- return modifyString(endpoint.path, ctx.config.pathModifier, endpoint);
976
- }
977
-
978
- protected getDirectoryPath(
979
- ctx: Context,
980
- args: Args.GetDirectoryPath,
981
- ): string {
982
- const { packageName } = args;
983
- return `${ctx.config.outputDir}/${packageName.replace(/\./g, '/')}`;
984
- }
985
-
986
- protected getPathConstantName(
987
- ctx: Context,
988
- args: Args.GetPathConstantName,
989
- ): string {
990
- const { endpoint } = args;
991
- return toCasing(`${endpoint.name}_path`, ctx.config.constantNameCasing);
992
- }
993
-
994
- protected getPackageName(ctx: Context, _args: Args.GetPackageName): string {
995
- const packageSuffix = typeof ctx.config.packageSuffix === 'string'
996
- ? ctx.config.packageSuffix
997
- : ctx.config.packageSuffix(ctx.service);
998
- return ctx.config.packageName + packageSuffix;
999
- }
1000
-
1001
- protected getApiResponseEntityName(
1002
- ctx: Context,
1003
- args: Args.GetApiResponseEntityName,
1004
- ): string {
1005
- const { endpoint } = args;
1006
- return toCasing(
1007
- `${endpoint.name}_ResponseEntity`,
1008
- ctx.config.typeNameCasing,
1009
- );
1010
- }
1011
-
1012
- protected getApiInterfaceName(
1013
- ctx: Context,
1014
- _args: Args.GetApiInterfaceName,
1015
- ): string {
1016
- return toCasing(ctx.service.name + '_Api', ctx.config.typeNameCasing);
1017
- }
1018
-
1019
- protected getApiControllerName(
1020
- ctx: Context,
1021
- _args: Args.GetApiControllerName,
1022
- ): string {
1023
- return toCasing(
1024
- ctx.service.name + '_ApiController',
1025
- ctx.config.typeNameCasing,
1026
- );
1027
- }
1028
-
1029
- protected getApiDelegateInterfaceName(
1030
- ctx: Context,
1031
- _args: Args.GetApiDelegateInterfaceName,
1032
- ): string {
1033
- return toCasing(
1034
- ctx.service.name + '_ApiDelegate',
1035
- ctx.config.typeNameCasing,
1036
- );
1037
- }
1038
-
1039
- protected getAllParameters(
1040
- ctx: Context,
1041
- args: Args.GetAllParameters,
1042
- ): ApiParameterWithMultipartInfo[] {
1043
- const { endpoint } = args;
1044
- const parameters = endpoint.parameters.filter(
1045
- (parameter) =>
1046
- parameter.target === 'query' ||
1047
- parameter.target === 'path' ||
1048
- parameter.target === 'header',
1049
- );
1050
- if (endpoint.requestBody) {
1051
- const content = endpoint.requestBody.content[0];
1052
- let schema = content.schema;
1053
-
1054
- if (content.type === 'multipart/form-data') {
1055
- if (schema && schema.kind === 'object') {
1056
- schema = resolveAnyOfAndAllOf(schema, true) ?? schema;
1057
- const properties = schema.properties ?? {};
1058
- for (const [name, property] of properties.entries()) {
1059
- parameters.push(
1060
- Object.assign(
1061
- this.createApiParameter({
1062
- id: `multipart-${name}`,
1063
- name,
1064
- target: 'body',
1065
- schema: property.schema,
1066
- required: schema.required.has(name),
1067
- description: property.schema.description,
1068
- }),
1069
- {
1070
- multipart: {
1071
- name,
1072
- isFile: property.schema.kind === 'string' &&
1073
- property.schema.format === 'binary',
1074
- },
1075
- },
1076
- ),
1077
- );
1078
- }
1079
- }
1080
- } else {
1081
- const schemaType = this.getSchemaType(ctx, { schema });
1082
- const name = !schemaType || /^Any\??$/.test(schemaType.name)
1083
- ? 'body'
1084
- : SourceBuilder.build((b) => kt.reference.write(b, schemaType));
1085
- parameters.push(
1086
- this.createApiParameter({
1087
- id: 'body',
1088
- name,
1089
- target: 'body',
1090
- schema,
1091
- required: endpoint.requestBody.required,
1092
- description: endpoint.requestBody.description,
1093
- }),
1094
- );
1095
- }
1096
- }
1097
-
1098
- return parameters;
1099
- }
1100
-
1101
- private createApiParameter(
1102
- data: Partial<ApiParameter> & Pick<ApiParameter, 'id' | 'name' | 'target'>,
1103
- ): ApiParameter {
1104
- return {
1105
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
1106
- $src: undefined!,
1107
- $ref: undefined,
1108
- schema: undefined,
1109
- required: false,
1110
- description: undefined,
1111
- allowEmptyValue: undefined,
1112
- allowReserved: undefined,
1113
- deprecated: false,
1114
- explode: undefined,
1115
- style: undefined,
1116
- ...data,
1117
- };
1118
- }
1119
- }
1120
-
1121
- export function adjustListType<T>(ctx: Context, type: T): T {
1122
- if (!kt.refs.list.matches(type)) return type;
1123
- switch (ctx.config.arrayType) {
1124
- case 'flux':
1125
- return kt.refs.reactor.flux([type.generics[0]]) as T;
1126
- default:
1127
- return type;
1128
- }
1129
- }