arkos 1.4.10-beta → 1.4.11-beta

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 (281) hide show
  1. package/dist/cjs/app.js +1 -1
  2. package/dist/cjs/app.js.map +1 -1
  3. package/dist/cjs/modules/auth/auth.router.js +39 -4
  4. package/dist/cjs/modules/auth/auth.router.js.map +1 -1
  5. package/dist/cjs/modules/auth/utils/auth-openapi-generator.js +372 -0
  6. package/dist/cjs/modules/auth/utils/auth-openapi-generator.js.map +1 -0
  7. package/dist/cjs/modules/auth/utils/auth-prisma-json-schema-generator.js +102 -0
  8. package/dist/cjs/modules/auth/utils/auth-prisma-json-schema-generator.js.map +1 -0
  9. package/dist/cjs/modules/base/base.middlewares.js +1 -1
  10. package/dist/cjs/modules/base/base.middlewares.js.map +1 -1
  11. package/dist/cjs/modules/base/types/base.service.types.js.map +1 -1
  12. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +46 -14
  13. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
  14. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +17 -5
  15. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
  16. package/dist/cjs/modules/base/utils/model-openapi-generator.js +443 -0
  17. package/dist/cjs/modules/base/utils/model-openapi-generator.js.map +1 -0
  18. package/dist/cjs/modules/error-handler/error-handler.controller.js +0 -2
  19. package/dist/cjs/modules/error-handler/error-handler.controller.js.map +1 -1
  20. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +0 -106
  21. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
  22. package/dist/cjs/modules/file-upload/file-upload.router.js +19 -0
  23. package/dist/cjs/modules/file-upload/file-upload.router.js.map +1 -1
  24. package/dist/cjs/modules/file-upload/utils/file-upload-json-schema-generator.js +351 -0
  25. package/dist/cjs/modules/file-upload/utils/file-upload-json-schema-generator.js.map +1 -0
  26. package/dist/cjs/modules/swagger/swagger.router.js +35 -16
  27. package/dist/cjs/modules/swagger/swagger.router.js.map +1 -1
  28. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js +1 -2
  29. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js.map +1 -1
  30. package/dist/cjs/modules/swagger/utils/helpers/openapi-schema-converter.js +68 -31
  31. package/dist/cjs/modules/swagger/utils/helpers/openapi-schema-converter.js.map +1 -1
  32. package/dist/cjs/server.js +0 -6
  33. package/dist/cjs/server.js.map +1 -1
  34. package/dist/cjs/types/arkos-config.js.map +1 -1
  35. package/dist/cjs/types/{arkos-config/utils.js → arkos-prisma-input.bak.js} +1 -1
  36. package/dist/cjs/types/arkos-prisma-input.bak.js.map +1 -0
  37. package/dist/cjs/types/index.js.map +1 -1
  38. package/dist/cjs/utils/arkos-router/arkos-router-openapi-manager.js +3 -12
  39. package/dist/cjs/utils/arkos-router/arkos-router-openapi-manager.js.map +1 -1
  40. package/dist/cjs/utils/arkos-router/index.js +47 -8
  41. package/dist/cjs/utils/arkos-router/index.js.map +1 -1
  42. package/dist/cjs/utils/arkos-router/types/openapi-config.js.map +1 -1
  43. package/dist/cjs/utils/arkos-router/utils/helpers/index.js +15 -2
  44. package/dist/cjs/utils/arkos-router/utils/helpers/index.js.map +1 -1
  45. package/dist/cjs/utils/cli/generate.js +4 -4
  46. package/dist/cjs/utils/cli/generate.js.map +1 -1
  47. package/dist/cjs/utils/cli/index.js +11 -11
  48. package/dist/cjs/utils/cli/index.js.map +1 -1
  49. package/dist/cjs/utils/cli/utils/cli.helpers.js +1 -1
  50. package/dist/cjs/utils/cli/utils/template-generator/templates/class-validator/create-dto-template.js +29 -5
  51. package/dist/cjs/utils/cli/utils/template-generator/templates/class-validator/create-dto-template.js.map +1 -1
  52. package/dist/cjs/utils/cli/utils/template-generator/templates/class-validator/update-dto-template.js +26 -5
  53. package/dist/cjs/utils/cli/utils/template-generator/templates/class-validator/update-dto-template.js.map +1 -1
  54. package/dist/cjs/utils/cli/utils/template-generator/templates/class-validator-dto-generator.js +52 -0
  55. package/dist/cjs/utils/cli/utils/template-generator/templates/class-validator-dto-generator.js.map +1 -1
  56. package/dist/cjs/utils/cli/utils/template-generator/templates/zod/create-schema-template.js +10 -1
  57. package/dist/cjs/utils/cli/utils/template-generator/templates/zod/create-schema-template.js.map +1 -1
  58. package/dist/cjs/utils/cli/utils/template-generator/templates/zod/update-schema-template.js +9 -2
  59. package/dist/cjs/utils/cli/utils/template-generator/templates/zod/update-schema-template.js.map +1 -1
  60. package/dist/cjs/utils/cli/utils/template-generator/templates/zod-schema-generator.js +26 -1
  61. package/dist/cjs/utils/cli/utils/template-generator/templates/zod-schema-generator.js.map +1 -1
  62. package/dist/cjs/utils/helpers/routers.helpers.js +2 -4
  63. package/dist/cjs/utils/helpers/routers.helpers.js.map +1 -1
  64. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +144 -257
  65. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js.map +1 -1
  66. package/dist/cjs/utils/prisma/prisma-schema-parser.js +15 -2
  67. package/dist/cjs/utils/prisma/prisma-schema-parser.js.map +1 -1
  68. package/dist/cjs/utils/prisma/types.js.map +1 -1
  69. package/dist/esm/app.js +1 -1
  70. package/dist/esm/app.js.map +1 -1
  71. package/dist/esm/modules/auth/auth.router.js +39 -4
  72. package/dist/esm/modules/auth/auth.router.js.map +1 -1
  73. package/dist/esm/modules/auth/utils/auth-openapi-generator.js +367 -0
  74. package/dist/esm/modules/auth/utils/auth-openapi-generator.js.map +1 -0
  75. package/dist/esm/modules/auth/utils/auth-prisma-json-schema-generator.js +97 -0
  76. package/dist/esm/modules/auth/utils/auth-prisma-json-schema-generator.js.map +1 -0
  77. package/dist/esm/modules/base/base.middlewares.js +1 -1
  78. package/dist/esm/modules/base/base.middlewares.js.map +1 -1
  79. package/dist/esm/modules/base/types/base.service.types.js.map +1 -1
  80. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js +46 -13
  81. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
  82. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +17 -5
  83. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
  84. package/dist/esm/modules/base/utils/model-openapi-generator.js +438 -0
  85. package/dist/esm/modules/base/utils/model-openapi-generator.js.map +1 -0
  86. package/dist/esm/modules/error-handler/error-handler.controller.js +0 -2
  87. package/dist/esm/modules/error-handler/error-handler.controller.js.map +1 -1
  88. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js +0 -87
  89. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
  90. package/dist/esm/modules/file-upload/file-upload.router.js +19 -0
  91. package/dist/esm/modules/file-upload/file-upload.router.js.map +1 -1
  92. package/dist/esm/modules/file-upload/utils/file-upload-json-schema-generator.js +346 -0
  93. package/dist/esm/modules/file-upload/utils/file-upload-json-schema-generator.js.map +1 -0
  94. package/dist/esm/modules/swagger/swagger.router.js +35 -16
  95. package/dist/esm/modules/swagger/swagger.router.js.map +1 -1
  96. package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.js +1 -2
  97. package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.js.map +1 -1
  98. package/dist/esm/modules/swagger/utils/helpers/openapi-schema-converter.js +68 -31
  99. package/dist/esm/modules/swagger/utils/helpers/openapi-schema-converter.js.map +1 -1
  100. package/dist/esm/server.js +0 -5
  101. package/dist/esm/server.js.map +1 -1
  102. package/dist/esm/types/arkos-config.js.map +1 -1
  103. package/dist/esm/types/arkos-prisma-input.bak.js +2 -0
  104. package/dist/esm/types/arkos-prisma-input.bak.js.map +1 -0
  105. package/dist/esm/types/index.js.map +1 -1
  106. package/dist/esm/utils/arkos-router/arkos-router-openapi-manager.js +3 -12
  107. package/dist/esm/utils/arkos-router/arkos-router-openapi-manager.js.map +1 -1
  108. package/dist/esm/utils/arkos-router/index.js +47 -8
  109. package/dist/esm/utils/arkos-router/index.js.map +1 -1
  110. package/dist/esm/utils/arkos-router/types/openapi-config.js.map +1 -1
  111. package/dist/esm/utils/arkos-router/utils/helpers/index.js +15 -2
  112. package/dist/esm/utils/arkos-router/utils/helpers/index.js.map +1 -1
  113. package/dist/esm/utils/cli/generate.js +4 -4
  114. package/dist/esm/utils/cli/generate.js.map +1 -1
  115. package/dist/esm/utils/cli/index.js +11 -11
  116. package/dist/esm/utils/cli/index.js.map +1 -1
  117. package/dist/esm/utils/cli/utils/cli.helpers.js +1 -1
  118. package/dist/esm/utils/cli/utils/template-generator/templates/class-validator/create-dto-template.js +29 -5
  119. package/dist/esm/utils/cli/utils/template-generator/templates/class-validator/create-dto-template.js.map +1 -1
  120. package/dist/esm/utils/cli/utils/template-generator/templates/class-validator/update-dto-template.js +26 -5
  121. package/dist/esm/utils/cli/utils/template-generator/templates/class-validator/update-dto-template.js.map +1 -1
  122. package/dist/esm/utils/cli/utils/template-generator/templates/class-validator-dto-generator.js +52 -0
  123. package/dist/esm/utils/cli/utils/template-generator/templates/class-validator-dto-generator.js.map +1 -1
  124. package/dist/esm/utils/cli/utils/template-generator/templates/zod/create-schema-template.js +10 -1
  125. package/dist/esm/utils/cli/utils/template-generator/templates/zod/create-schema-template.js.map +1 -1
  126. package/dist/esm/utils/cli/utils/template-generator/templates/zod/update-schema-template.js +9 -2
  127. package/dist/esm/utils/cli/utils/template-generator/templates/zod/update-schema-template.js.map +1 -1
  128. package/dist/esm/utils/cli/utils/template-generator/templates/zod-schema-generator.js +26 -1
  129. package/dist/esm/utils/cli/utils/template-generator/templates/zod-schema-generator.js.map +1 -1
  130. package/dist/esm/utils/helpers/routers.helpers.js +2 -4
  131. package/dist/esm/utils/helpers/routers.helpers.js.map +1 -1
  132. package/dist/esm/utils/prisma/prisma-json-schema-generator.js +144 -257
  133. package/dist/esm/utils/prisma/prisma-json-schema-generator.js.map +1 -1
  134. package/dist/esm/utils/prisma/prisma-schema-parser.js +15 -2
  135. package/dist/esm/utils/prisma/prisma-schema-parser.js.map +1 -1
  136. package/dist/esm/utils/prisma/types.js.map +1 -1
  137. package/dist/types/modules/auth/utils/auth-openapi-generator.d.ts +9 -0
  138. package/dist/types/modules/auth/utils/auth-prisma-json-schema-generator.d.ts +13 -0
  139. package/dist/types/modules/base/base.middlewares.d.ts +3 -0
  140. package/dist/types/modules/base/types/base.service.types.d.ts +0 -3
  141. package/dist/types/modules/base/utils/helpers/base.router.helpers.d.ts +0 -1
  142. package/dist/types/modules/base/utils/helpers/base.service.helpers.d.ts +1 -1
  143. package/dist/types/modules/base/utils/model-openapi-generator.d.ts +12 -0
  144. package/dist/types/modules/error-handler/utils/error-handler.helpers.d.ts +0 -19
  145. package/dist/types/modules/file-upload/utils/file-upload-json-schema-generator.d.ts +12 -0
  146. package/dist/types/modules/swagger/utils/helpers/get-swagger-default-configs.d.ts +1 -2
  147. package/dist/types/modules/swagger/utils/helpers/openapi-schema-converter.d.ts +27 -3
  148. package/dist/types/server.d.ts +0 -6
  149. package/dist/types/types/arkos-config.d.ts +1 -1
  150. package/dist/types/types/arkos-prisma-input.bak.d.ts +237 -0
  151. package/dist/types/types/index.d.ts +0 -48
  152. package/dist/types/utils/arkos-router/types/openapi-config.d.ts +3 -2
  153. package/dist/types/utils/helpers/routers.helpers.d.ts +1 -1
  154. package/dist/types/utils/prisma/prisma-json-schema-generator.d.ts +12 -42
  155. package/dist/types/utils/prisma/prisma-schema-parser.d.ts +2 -0
  156. package/dist/types/utils/prisma/types.d.ts +2 -1
  157. package/package.json +3 -1
  158. package/dist/cjs/components/arkos-policy/index.js +0 -38
  159. package/dist/cjs/components/arkos-policy/index.js.map +0 -1
  160. package/dist/cjs/components/arkos-policy/types.js +0 -3
  161. package/dist/cjs/components/arkos-policy/types.js.map +0 -1
  162. package/dist/cjs/exports/config.js +0 -6
  163. package/dist/cjs/exports/config.js.map +0 -1
  164. package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js +0 -80
  165. package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js.map +0 -1
  166. package/dist/cjs/modules/swagger/utils/built-in-route-path-object-manager.js +0 -7
  167. package/dist/cjs/modules/swagger/utils/built-in-route-path-object-manager.js.map +0 -1
  168. package/dist/cjs/modules/swagger/utils/get-open-api-login-html.js +0 -276
  169. package/dist/cjs/modules/swagger/utils/get-open-api-login-html.js.map +0 -1
  170. package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +0 -482
  171. package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +0 -1
  172. package/dist/cjs/modules/swagger/utils/helpers/get-file-upload-json-schema-paths.js +0 -505
  173. package/dist/cjs/modules/swagger/utils/helpers/get-file-upload-json-schema-paths.js.map +0 -1
  174. package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js +0 -37
  175. package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +0 -1
  176. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +0 -50
  177. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +0 -1
  178. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +0 -32
  179. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +0 -1
  180. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js +0 -49
  181. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js.map +0 -1
  182. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +0 -34
  183. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js.map +0 -1
  184. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +0 -508
  185. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js.map +0 -1
  186. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +0 -573
  187. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js.map +0 -1
  188. package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +0 -261
  189. package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +0 -1
  190. package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js +0 -114
  191. package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js.map +0 -1
  192. package/dist/cjs/paths.js +0 -9
  193. package/dist/cjs/paths.js.map +0 -1
  194. package/dist/cjs/types/arkos-config/utils.js.map +0 -1
  195. package/dist/cjs/types/arkos.js +0 -3
  196. package/dist/cjs/types/arkos.js.map +0 -1
  197. package/dist/cjs/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js +0 -152
  198. package/dist/cjs/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js.map +0 -1
  199. package/dist/cjs/utils/cli/utils/template-generator/templates/policy-template.js +0 -53
  200. package/dist/cjs/utils/cli/utils/template-generator/templates/policy-template.js.map +0 -1
  201. package/dist/cjs/utils/helpers/exit-error.js +0 -12
  202. package/dist/cjs/utils/helpers/exit-error.js.map +0 -1
  203. package/dist/cjs/utils/initialize-app.js +0 -56
  204. package/dist/cjs/utils/initialize-app.js.map +0 -1
  205. package/dist/cjs/utils/setup-app.js +0 -119
  206. package/dist/cjs/utils/setup-app.js.map +0 -1
  207. package/dist/esm/components/arkos-policy/index.js +0 -32
  208. package/dist/esm/components/arkos-policy/index.js.map +0 -1
  209. package/dist/esm/components/arkos-policy/types.js +0 -2
  210. package/dist/esm/components/arkos-policy/types.js.map +0 -1
  211. package/dist/esm/exports/config.js +0 -3
  212. package/dist/esm/exports/config.js.map +0 -1
  213. package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js +0 -76
  214. package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js.map +0 -1
  215. package/dist/esm/modules/swagger/utils/built-in-route-path-object-manager.js +0 -5
  216. package/dist/esm/modules/swagger/utils/built-in-route-path-object-manager.js.map +0 -1
  217. package/dist/esm/modules/swagger/utils/get-open-api-login-html.js +0 -273
  218. package/dist/esm/modules/swagger/utils/get-open-api-login-html.js.map +0 -1
  219. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +0 -477
  220. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +0 -1
  221. package/dist/esm/modules/swagger/utils/helpers/get-file-upload-json-schema-paths.js +0 -499
  222. package/dist/esm/modules/swagger/utils/helpers/get-file-upload-json-schema-paths.js.map +0 -1
  223. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js +0 -34
  224. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +0 -1
  225. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +0 -44
  226. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +0 -1
  227. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +0 -26
  228. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +0 -1
  229. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js +0 -46
  230. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js.map +0 -1
  231. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +0 -28
  232. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js.map +0 -1
  233. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +0 -502
  234. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js.map +0 -1
  235. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +0 -567
  236. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js.map +0 -1
  237. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js +0 -256
  238. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +0 -1
  239. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js +0 -103
  240. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js.map +0 -1
  241. package/dist/esm/paths.js +0 -3
  242. package/dist/esm/paths.js.map +0 -1
  243. package/dist/esm/types/arkos-config/utils.js +0 -2
  244. package/dist/esm/types/arkos-config/utils.js.map +0 -1
  245. package/dist/esm/types/arkos.js +0 -2
  246. package/dist/esm/types/arkos.js.map +0 -1
  247. package/dist/esm/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js +0 -146
  248. package/dist/esm/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js.map +0 -1
  249. package/dist/esm/utils/cli/utils/template-generator/templates/policy-template.js +0 -47
  250. package/dist/esm/utils/cli/utils/template-generator/templates/policy-template.js.map +0 -1
  251. package/dist/esm/utils/helpers/exit-error.js +0 -6
  252. package/dist/esm/utils/helpers/exit-error.js.map +0 -1
  253. package/dist/esm/utils/initialize-app.js +0 -50
  254. package/dist/esm/utils/initialize-app.js.map +0 -1
  255. package/dist/esm/utils/setup-app.js +0 -113
  256. package/dist/esm/utils/setup-app.js.map +0 -1
  257. package/dist/types/components/arkos-policy/index.d.ts +0 -31
  258. package/dist/types/components/arkos-policy/types.d.ts +0 -21
  259. package/dist/types/exports/config.d.ts +0 -2
  260. package/dist/types/modules/base/utils/helpers/base.controller.helpers.d.ts +0 -4
  261. package/dist/types/modules/swagger/utils/built-in-route-path-object-manager.d.ts +0 -4
  262. package/dist/types/modules/swagger/utils/get-open-api-login-html.d.ts +0 -1
  263. package/dist/types/modules/swagger/utils/helpers/get-authentication-json-schema-paths.d.ts +0 -4
  264. package/dist/types/modules/swagger/utils/helpers/get-file-upload-json-schema-paths.d.ts +0 -3
  265. package/dist/types/modules/swagger/utils/helpers/get-system-json-schema-paths.d.ts +0 -2
  266. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.d.ts +0 -1
  267. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.d.ts +0 -2
  268. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.d.ts +0 -4
  269. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.d.ts +0 -1
  270. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.d.ts +0 -3
  271. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.d.ts +0 -3
  272. package/dist/types/modules/swagger/utils/helpers/missing-json-schemas-generator.d.ts +0 -77
  273. package/dist/types/modules/swagger/utils/helpers/swagger.router.helpers.d.ts +0 -20
  274. package/dist/types/paths.d.ts +0 -1
  275. package/dist/types/types/arkos-config/utils.d.ts +0 -35
  276. package/dist/types/types/arkos.d.ts +0 -31
  277. package/dist/types/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.d.ts +0 -7
  278. package/dist/types/utils/cli/utils/template-generator/templates/policy-template.d.ts +0 -2
  279. package/dist/types/utils/helpers/exit-error.d.ts +0 -1
  280. package/dist/types/utils/initialize-app.d.ts +0 -2
  281. package/dist/types/utils/setup-app.d.ts +0 -2
@@ -16,6 +16,7 @@ const class_validator_to_json_schema_1 = __importDefault(require("../../modules/
16
16
  const openapi_schema_converter_1 = __importDefault(require("../../modules/swagger/utils/helpers/openapi-schema-converter.js"));
17
17
  const upload_manager_1 = __importDefault(require("./utils/helpers/upload-manager.js"));
18
18
  const fs_helpers_1 = require("../helpers/fs.helpers.js");
19
+ const arkos_router_openapi_manager_1 = __importDefault(require("./arkos-router-openapi-manager.js"));
19
20
  function ArkosRouter(options) {
20
21
  const router = (0, express_1.Router)(options);
21
22
  return new Proxy(router, {
@@ -120,6 +121,12 @@ function generateOpenAPIFromApp(app) {
120
121
  for (const parameter of pathParatemersFromRoutePath) {
121
122
  path = path.replaceAll(`:${parameter}`, parameter.endsWith("?") ? `{${parameter}}?` : `{${parameter}}`);
122
123
  }
124
+ let wildcardCount = (path.match(/\*/g) || []).length;
125
+ let wildcardIndex = 0;
126
+ path = path.replace(/\*/g, () => {
127
+ wildcardIndex++;
128
+ return wildcardCount === 1 ? "{path}" : `{path${wildcardIndex}}`;
129
+ });
123
130
  if (!paths[path])
124
131
  paths[path] = {};
125
132
  if (typeof config?.experimental?.openapi === "boolean") {
@@ -173,28 +180,60 @@ function generateOpenAPIFromApp(app) {
173
180
  for (const param of allParameters) {
174
181
  if (!pathParatemersFromRoutePath.includes(param.name) &&
175
182
  !pathParatemersFromRoutePath.includes(`${param.name}?`) &&
176
- param.in === "path")
183
+ param.in === "path" &&
184
+ param.name !== "*")
177
185
  throw new Error(`ValidationError: Trying to define path parameter '${param.name}' but it is not present in your pathname ${originalPath}`);
178
186
  }
179
187
  delete convertedOpenAPI.parameters;
188
+ const hasUploadFields = Object.keys(config?.experimental?.uploads || {}).length > 0;
189
+ const multipartFormSchema = convertedOpenAPI?.requestBody?.content?.["multipart/form-data"];
190
+ if (hasUploadFields && multipartFormSchema)
191
+ arkos_router_openapi_manager_1.default.validateMultipartFormDocs(multipartFormSchema, path, config?.experimental?.uploads);
180
192
  paths[path][method.toLowerCase()] = {
193
+ ...convertedOpenAPI,
181
194
  summary: openapi?.summary || `${path}`,
182
195
  description: openapi?.description || `${method} ${path}`,
183
196
  tags: openapi?.tags || ["Defaults"],
184
- operationId: `${method.toLowerCase()}:${path}`,
197
+ operationId: openapi.operationId || `${method.toLowerCase()}:${path}`,
185
198
  parameters: allParameters,
186
199
  ...(!convertedOpenAPI.requestBody &&
187
200
  config?.validation &&
188
201
  config?.validation?.body && {
189
202
  requestBody: {
190
- content: {
191
- "application/json": {
192
- schema: validatorToJsonSchema(config?.validation?.body),
193
- },
194
- },
203
+ content: (() => {
204
+ const schema = validatorToJsonSchema(config?.validation?.body);
205
+ return {
206
+ ...convertedOpenAPI?.requestBody?.content,
207
+ ...(hasUploadFields && {
208
+ "multipart/form-data": {
209
+ schema: openapi_schema_converter_1.default.flattenSchema(arkos_router_openapi_manager_1.default.addUploadFields(config.experimental?.uploads, schema)),
210
+ },
211
+ }),
212
+ "application/json": {
213
+ schema,
214
+ },
215
+ };
216
+ })(),
217
+ },
218
+ }),
219
+ ...(convertedOpenAPI?.requestBody?.content?.["application/json"]
220
+ ?.schema &&
221
+ !multipartFormSchema &&
222
+ !config?.validation?.body &&
223
+ hasUploadFields && {
224
+ requestBody: {
225
+ content: (() => {
226
+ const schema = convertedOpenAPI?.requestBody?.content?.["application/json"]
227
+ ?.schema;
228
+ return {
229
+ "multipart/form-data": {
230
+ schema: openapi_schema_converter_1.default.flattenSchema(arkos_router_openapi_manager_1.default.addUploadFields(config?.experimental?.uploads || {}, schema)),
231
+ },
232
+ ...convertedOpenAPI?.requestBody?.content,
233
+ };
234
+ })(),
195
235
  },
196
236
  }),
197
- ...convertedOpenAPI,
198
237
  };
199
238
  });
200
239
  return paths;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/arkos-router/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Router, RouterOptions } from \"express\";\nimport {\n IArkosRouter,\n ArkosRouteConfig,\n ArkosAnyRequestHandler,\n PathParams,\n IArkosRoute,\n} from \"./types\";\nimport { OpenAPIV3 } from \"openapi-types\";\nimport RouteConfigValidator from \"./route-config-validator\";\nimport RouteConfigRegistry from \"./route-config-registry\";\nimport {\n extractArkosRoutes,\n extractPathParams,\n getMiddlewareStack,\n} from \"./utils/helpers\";\nimport { getArkosConfig } from \"../../exports\";\nimport { catchAsync } from \"../../exports/error-handler\";\nimport zodToJsonSchema from \"zod-to-json-schema\";\nimport classValidatorToJsonSchema from \"../../modules/swagger/utils/helpers/class-validator-to-json-schema\";\nimport openApiSchemaConverter from \"../../modules/swagger/utils/helpers/openapi-schema-converter\";\nimport uploadManager from \"./utils/helpers/upload-manager\";\nimport { getUserFileExtension } from \"../helpers/fs.helpers\";\n\n/**\n * Creates an enhanced Express Router with features like OpenAPI documentation capabilities and smart data validation.\n *\n * The ArkosRouter extends the standard Express Router with the ability to\n * automatically capture OpenAPI metadata from route configurations.\n *\n * @example\n * const router = ArkosRouter();\n *\n * router.get(\n * {\n * path: \"/users/:id\",\n * openapi: {\n * summary: \"Get user by ID\",\n * tags: [\"Users\"]\n * }\n * },\n * (req, res) => { ... }\n * );\n *\n * @returns {IArkosRouter} A proxied Express Router instance with enhanced OpenAPI capabilities\n *\n * @see {@link ArkosRouteConfig} for configuration options\n */\nexport default function ArkosRouter(options?: RouterOptions): IArkosRouter {\n const router = Router(options);\n\n return new Proxy(router, {\n get(target, prop, receiver) {\n const originalMethod = Reflect.get(target, prop, receiver);\n\n const httpMethods = [\n \"get\",\n \"post\",\n \"put\",\n \"patch\",\n \"delete\",\n \"all\",\n \"head\",\n \"trace\",\n \"options\",\n ] as const;\n\n if (prop === \"route\") {\n return function (path: PathParams) {\n const routeChain: any = {};\n\n httpMethods.forEach((method) => {\n routeChain[method] = function (\n config: ArkosAnyRequestHandler | Omit<ArkosRouteConfig, \"path\">,\n ...handlers: ArkosAnyRequestHandler[]\n ) {\n const fullConfig: ArkosRouteConfig = {\n ...config,\n path,\n };\n\n receiver[method](fullConfig, ...handlers);\n\n return routeChain as IArkosRoute;\n };\n });\n\n return routeChain;\n };\n }\n\n if (httpMethods.includes(prop as any)) {\n return function (\n config: ArkosRouteConfig,\n ...handlers: ArkosAnyRequestHandler[]\n ) {\n if (config.disabled) return;\n\n const path = config.path;\n\n if (!RouteConfigValidator.isArkosRouteConfig(config))\n throw Error(\n `First argument of ArkosRouter().${prop as string}() must be a valid ArkosRouteConfig object with path field, but recevied ${typeof config === \"object\" ? JSON.stringify(config, null, 2) : config}`\n );\n\n if ([null, undefined].includes(path as any))\n throw Error(\n \"Please pass valid value for path field to use in your route\"\n );\n\n const method = prop as string;\n const UndefinedHandlerError = (handler: any) =>\n Error(\n `Wrong value for handler in route ${method.toUpperCase()} ${path}, recevied ${handler}.`\n );\n\n if (handlers.length > 0) {\n const flattenHandlers = (arr: any[]): ArkosAnyRequestHandler[] => {\n return arr.reduce((flat, item) => {\n return flat.concat(\n Array.isArray(item) ? flattenHandlers(item) : item\n );\n }, []);\n };\n\n const flatHandlers = flattenHandlers(handlers);\n\n handlers = flatHandlers.map((handler: ArkosAnyRequestHandler) => {\n if (!handler) throw UndefinedHandlerError(handler);\n\n if (typeof handler !== \"function\") {\n throw UndefinedHandlerError(handler);\n }\n\n return catchAsync(handler, {\n type: handler.length > 3 ? \"error\" : \"normal\",\n });\n });\n\n const finalHandler = handlers[handlers.length - 1];\n RouteConfigRegistry.register(finalHandler, config, method);\n }\n\n const arkosConfig = getArkosConfig();\n const validationConfig = arkosConfig.validation;\n const authenticationConfig = arkosConfig.authentication;\n const strictValidation = validationConfig?.strict;\n const route = `${method.toUpperCase()} ${path}`;\n\n if (\n strictValidation &&\n (!(\"validation\" in config) ||\n (\"validation\" in config &&\n !config.validation &&\n config.validation !== undefined))\n )\n throw Error(\n \"When using strict validation you must either pass { validation: false } in order to explicitly tell that no input will be received, or pass `undefined` for each input type e.g { validation: { query: undefined } } in order to deny the input of given request input.\"\n );\n\n if (\n !validationConfig?.resolver &&\n Object.keys(config.validation || {}).length > 0\n )\n throw Error(\n `Trying to pass validators into route ${route} config validation option without choosing a validation resolver under arkos.init({ validation: { resolver: '' } })`\n );\n\n if (config.authentication && !authenticationConfig?.mode)\n throw Error(\n `Trying to authenticate route ${route} without choosing an authentication mode under arkos.config.${getUserFileExtension()}\n\nFor further help see https://www.arkosjs.com/docs/core-concepts/authentication-system.`\n );\n\n handlers = [...getMiddlewareStack(config), ...handlers];\n\n if (\n config.experimental?.uploads &&\n config.experimental.uploads.deleteOnError !== false\n )\n handlers.push(\n catchAsync(\n uploadManager.handleFileCleanup(config.experimental.uploads),\n { type: \"error\" }\n )\n );\n\n return originalMethod.call(target, path, ...handlers);\n };\n }\n // }\n return originalMethod;\n },\n }) as IArkosRouter;\n}\n\nexport function generateOpenAPIFromApp(app: any) {\n const routes = extractArkosRoutes(app);\n const arkosConfig = getArkosConfig();\n\n let paths: Record<\n string,\n Record<string, Partial<OpenAPIV3.OperationObject>>\n > = {};\n\n routes.forEach(({ path, method, config }) => {\n if (config?.experimental?.openapi === false) return;\n const originalPath = path;\n\n const pathParatemersFromRoutePath = extractPathParams(path);\n for (const parameter of pathParatemersFromRoutePath) {\n path = path.replaceAll(\n `:${parameter}`,\n parameter.endsWith(\"?\") ? `{${parameter}}?` : `{${parameter}}`\n );\n }\n\n if (!paths[path]) paths[path] = {};\n\n if (typeof config?.experimental?.openapi === \"boolean\") {\n config = {\n ...config,\n experimental: {\n ...config.experimental,\n openapi: {},\n },\n };\n }\n\n const openapi =\n typeof config?.experimental?.openapi === \"object\" &&\n config.experimental.openapi !== null\n ? config.experimental.openapi\n : {};\n\n const validatorToJsonSchema =\n arkosConfig?.validation?.resolver === \"zod\"\n ? zodToJsonSchema\n : classValidatorToJsonSchema;\n\n let parameters = [];\n const validationToParameterMapping = {\n query: \"query\",\n params: \"path\",\n headers: \"header\",\n cookies: \"cookie\",\n };\n\n if (typeof config?.validation !== \"boolean\" && config?.validation) {\n for (const [key, val] of Object.entries(config?.validation)) {\n if ([\"body\"].includes(key)) continue;\n if ((config?.validation as any)[key]) {\n const jsonSchema = validatorToJsonSchema(val as any);\n const params = openApiSchemaConverter.jsonSchemaToOpenApiParameters(\n (validationToParameterMapping as any)[key],\n jsonSchema\n );\n parameters.push(...params);\n }\n }\n }\n\n const convertedOpenAPI =\n openApiSchemaConverter.convertOpenAPIConfig(openapi);\n\n const allParameters: OpenAPIV3.ParameterObject[] = [\n ...(convertedOpenAPI.parameters || []),\n ...parameters,\n ];\n\n for (const parameter of pathParatemersFromRoutePath) {\n if (\n !allParameters.find(\n ({ name, in: paramIn }) =>\n name === parameter.replace(\"?\", \"\") && paramIn === \"path\"\n )\n )\n allParameters.push({\n name: parameter,\n in: \"path\",\n required: !parameter.includes(\"?\"),\n schema: { type: \"string\" },\n });\n }\n\n for (const param of allParameters) {\n if (\n !pathParatemersFromRoutePath.includes(param.name) &&\n !pathParatemersFromRoutePath.includes(`${param.name}?`) &&\n param.in === \"path\"\n )\n throw new Error(\n `ValidationError: Trying to define path parameter '${param.name}' but it is not present in your pathname ${originalPath}`\n );\n }\n\n delete convertedOpenAPI.parameters;\n\n (paths as any)[path][method.toLowerCase()] = {\n summary: openapi?.summary || `${path}`,\n description: openapi?.description || `${method} ${path}`,\n tags: openapi?.tags || [\"Defaults\"],\n operationId: `${method.toLowerCase()}:${path}`,\n parameters: allParameters,\n ...(!convertedOpenAPI.requestBody &&\n config?.validation &&\n config?.validation?.body && {\n requestBody: {\n content: {\n \"application/json\": {\n schema: validatorToJsonSchema(config?.validation?.body as any),\n },\n },\n },\n }),\n ...convertedOpenAPI,\n };\n });\n\n return paths;\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/arkos-router/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Router, RouterOptions } from \"express\";\nimport {\n IArkosRouter,\n ArkosRouteConfig,\n ArkosAnyRequestHandler,\n PathParams,\n IArkosRoute,\n} from \"./types\";\nimport { OpenAPIV3 } from \"openapi-types\";\nimport RouteConfigValidator from \"./route-config-validator\";\nimport RouteConfigRegistry from \"./route-config-registry\";\nimport {\n extractArkosRoutes,\n extractPathParams,\n getMiddlewareStack,\n} from \"./utils/helpers\";\nimport { getArkosConfig } from \"../../exports\";\nimport { catchAsync } from \"../../exports/error-handler\";\nimport zodToJsonSchema from \"zod-to-json-schema\";\nimport classValidatorToJsonSchema from \"../../modules/swagger/utils/helpers/class-validator-to-json-schema\";\nimport openApiSchemaConverter from \"../../modules/swagger/utils/helpers/openapi-schema-converter\";\nimport uploadManager from \"./utils/helpers/upload-manager\";\nimport { getUserFileExtension } from \"../helpers/fs.helpers\";\nimport arkosRouterOpenApiManager from \"./arkos-router-openapi-manager\";\n\n/**\n * Creates an enhanced Express Router with features like OpenAPI documentation capabilities and smart data validation.\n *\n * The ArkosRouter extends the standard Express Router with the ability to\n * automatically capture OpenAPI metadata from route configurations.\n *\n * @example\n * const router = ArkosRouter();\n *\n * router.get(\n * {\n * path: \"/users/:id\",\n * openapi: {\n * summary: \"Get user by ID\",\n * tags: [\"Users\"]\n * }\n * },\n * (req, res) => { ... }\n * );\n *\n * @returns {IArkosRouter} A proxied Express Router instance with enhanced OpenAPI capabilities\n *\n * @see {@link ArkosRouteConfig} for configuration options\n */\nexport default function ArkosRouter(options?: RouterOptions): IArkosRouter {\n const router = Router(options);\n\n return new Proxy(router, {\n get(target, prop, receiver) {\n const originalMethod = Reflect.get(target, prop, receiver);\n\n const httpMethods = [\n \"get\",\n \"post\",\n \"put\",\n \"patch\",\n \"delete\",\n \"all\",\n \"head\",\n \"trace\",\n \"options\",\n ] as const;\n\n if (prop === \"route\") {\n return function (path: PathParams) {\n const routeChain: any = {};\n\n httpMethods.forEach((method) => {\n routeChain[method] = function (\n config: ArkosAnyRequestHandler | Omit<ArkosRouteConfig, \"path\">,\n ...handlers: ArkosAnyRequestHandler[]\n ) {\n const fullConfig: ArkosRouteConfig = {\n ...config,\n path,\n };\n\n receiver[method](fullConfig, ...handlers);\n\n return routeChain as IArkosRoute;\n };\n });\n\n return routeChain;\n };\n }\n\n if (httpMethods.includes(prop as any)) {\n return function (\n config: ArkosRouteConfig,\n ...handlers: ArkosAnyRequestHandler[]\n ) {\n if (config.disabled) return;\n\n const path = config.path;\n\n if (!RouteConfigValidator.isArkosRouteConfig(config))\n throw Error(\n `First argument of ArkosRouter().${prop as string}() must be a valid ArkosRouteConfig object with path field, but recevied ${typeof config === \"object\" ? JSON.stringify(config, null, 2) : config}`\n );\n\n if ([null, undefined].includes(path as any))\n throw Error(\n \"Please pass valid value for path field to use in your route\"\n );\n\n const method = prop as string;\n const UndefinedHandlerError = (handler: any) =>\n Error(\n `Wrong value for handler in route ${method.toUpperCase()} ${path}, recevied ${handler}.`\n );\n\n if (handlers.length > 0) {\n const flattenHandlers = (arr: any[]): ArkosAnyRequestHandler[] => {\n return arr.reduce((flat, item) => {\n return flat.concat(\n Array.isArray(item) ? flattenHandlers(item) : item\n );\n }, []);\n };\n\n const flatHandlers = flattenHandlers(handlers);\n\n handlers = flatHandlers.map((handler: ArkosAnyRequestHandler) => {\n if (!handler) throw UndefinedHandlerError(handler);\n\n if (typeof handler !== \"function\") {\n throw UndefinedHandlerError(handler);\n }\n\n return catchAsync(handler, {\n type: handler.length > 3 ? \"error\" : \"normal\",\n });\n });\n\n const finalHandler = handlers[handlers.length - 1];\n RouteConfigRegistry.register(finalHandler, config, method);\n }\n\n const arkosConfig = getArkosConfig();\n const validationConfig = arkosConfig.validation;\n const authenticationConfig = arkosConfig.authentication;\n const strictValidation = validationConfig?.strict;\n const route = `${method.toUpperCase()} ${path}`;\n\n if (\n strictValidation &&\n (!(\"validation\" in config) ||\n (\"validation\" in config &&\n !config.validation &&\n config.validation !== undefined))\n )\n throw Error(\n \"When using strict validation you must either pass { validation: false } in order to explicitly tell that no input will be received, or pass `undefined` for each input type e.g { validation: { query: undefined } } in order to deny the input of given request input.\"\n );\n\n if (\n !validationConfig?.resolver &&\n Object.keys(config.validation || {}).length > 0\n )\n throw Error(\n `Trying to pass validators into route ${route} config validation option without choosing a validation resolver under arkos.init({ validation: { resolver: '' } })`\n );\n\n if (config.authentication && !authenticationConfig?.mode)\n throw Error(\n `Trying to authenticate route ${route} without choosing an authentication mode under arkos.config.${getUserFileExtension()}\n\nFor further help see https://www.arkosjs.com/docs/core-concepts/authentication-system.`\n );\n\n handlers = [...getMiddlewareStack(config), ...handlers];\n\n if (\n config.experimental?.uploads &&\n config.experimental.uploads.deleteOnError !== false\n )\n handlers.push(\n catchAsync(\n uploadManager.handleFileCleanup(config.experimental.uploads),\n { type: \"error\" }\n )\n );\n\n return originalMethod.call(target, path, ...handlers);\n };\n }\n // }\n return originalMethod;\n },\n }) as IArkosRouter;\n}\n\nexport function generateOpenAPIFromApp(app: any) {\n const routes = extractArkosRoutes(app);\n const arkosConfig = getArkosConfig();\n\n let paths: Record<\n string,\n Record<string, Partial<OpenAPIV3.OperationObject>>\n > = {};\n\n routes.forEach(({ path, method, config }) => {\n if (config?.experimental?.openapi === false) return;\n const originalPath = path;\n\n const pathParatemersFromRoutePath = extractPathParams(path);\n for (const parameter of pathParatemersFromRoutePath) {\n path = path.replaceAll(\n `:${parameter}`,\n parameter.endsWith(\"?\") ? `{${parameter}}?` : `{${parameter}}`\n );\n }\n\n let wildcardCount = (path.match(/\\*/g) || []).length;\n let wildcardIndex = 0;\n path = path.replace(/\\*/g, () => {\n wildcardIndex++;\n return wildcardCount === 1 ? \"{path}\" : `{path${wildcardIndex}}`;\n });\n\n if (!paths[path]) paths[path] = {};\n\n if (typeof config?.experimental?.openapi === \"boolean\") {\n config = {\n ...config,\n experimental: {\n ...config.experimental,\n openapi: {},\n },\n };\n }\n\n const openapi =\n typeof config?.experimental?.openapi === \"object\" &&\n config.experimental.openapi !== null\n ? config.experimental.openapi\n : {};\n\n const validatorToJsonSchema =\n arkosConfig?.validation?.resolver === \"zod\"\n ? zodToJsonSchema\n : classValidatorToJsonSchema;\n\n let parameters = [];\n const validationToParameterMapping = {\n query: \"query\",\n params: \"path\",\n headers: \"header\",\n cookies: \"cookie\",\n };\n\n if (typeof config?.validation !== \"boolean\" && config?.validation) {\n for (const [key, val] of Object.entries(config?.validation)) {\n if ([\"body\"].includes(key)) continue;\n if ((config?.validation as any)[key]) {\n const jsonSchema = validatorToJsonSchema(val as any);\n const params = openApiSchemaConverter.jsonSchemaToOpenApiParameters(\n (validationToParameterMapping as any)[key],\n jsonSchema\n );\n parameters.push(...params);\n }\n }\n }\n\n const convertedOpenAPI =\n openApiSchemaConverter.convertOpenAPIConfig(openapi);\n\n const allParameters: OpenAPIV3.ParameterObject[] = [\n ...(convertedOpenAPI.parameters || []),\n ...parameters,\n ];\n\n for (const parameter of pathParatemersFromRoutePath) {\n if (\n !allParameters.find(\n ({ name, in: paramIn }) =>\n name === parameter.replace(\"?\", \"\") && paramIn === \"path\"\n )\n )\n allParameters.push({\n name: parameter,\n in: \"path\",\n required: !parameter.includes(\"?\"),\n schema: { type: \"string\" },\n });\n }\n\n for (const param of allParameters) {\n if (\n !pathParatemersFromRoutePath.includes(param.name) &&\n !pathParatemersFromRoutePath.includes(`${param.name}?`) &&\n param.in === \"path\" &&\n param.name !== \"*\"\n )\n throw new Error(\n `ValidationError: Trying to define path parameter '${param.name}' but it is not present in your pathname ${originalPath}`\n );\n }\n\n delete convertedOpenAPI.parameters;\n const hasUploadFields =\n Object.keys(config?.experimental?.uploads || {}).length > 0;\n const multipartFormSchema =\n convertedOpenAPI?.requestBody?.content?.[\"multipart/form-data\"];\n\n if (hasUploadFields && multipartFormSchema)\n arkosRouterOpenApiManager.validateMultipartFormDocs(\n multipartFormSchema,\n path,\n config?.experimental?.uploads\n );\n\n (paths as any)[path][method.toLowerCase()] = {\n ...convertedOpenAPI,\n summary: openapi?.summary || `${path}`,\n description: openapi?.description || `${method} ${path}`,\n tags: openapi?.tags || [\"Defaults\"],\n operationId: openapi.operationId || `${method.toLowerCase()}:${path}`,\n parameters: allParameters,\n ...(!convertedOpenAPI.requestBody &&\n config?.validation &&\n config?.validation?.body && {\n requestBody: {\n content: (() => {\n const schema = validatorToJsonSchema(\n config?.validation?.body as any\n );\n\n return {\n ...convertedOpenAPI?.requestBody?.content,\n ...(hasUploadFields && {\n \"multipart/form-data\": {\n schema: openApiSchemaConverter.flattenSchema(\n arkosRouterOpenApiManager.addUploadFields(\n config.experimental?.uploads!,\n schema\n )\n ),\n },\n }),\n \"application/json\": {\n schema,\n },\n };\n })(),\n },\n }),\n ...(convertedOpenAPI?.requestBody?.content?.[\"application/json\"]\n ?.schema &&\n !multipartFormSchema &&\n !(config as any)?.validation?.body &&\n hasUploadFields && {\n requestBody: {\n content: (() => {\n const schema =\n convertedOpenAPI?.requestBody?.content?.[\"application/json\"]\n ?.schema;\n\n return {\n \"multipart/form-data\": {\n schema: openApiSchemaConverter.flattenSchema(\n arkosRouterOpenApiManager.addUploadFields(\n config?.experimental?.uploads! || {},\n schema\n )\n ),\n },\n ...convertedOpenAPI?.requestBody?.content,\n };\n })(),\n },\n }),\n };\n });\n\n return paths;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"openapi-config.js","sourceRoot":"","sources":["../../../../../src/utils/arkos-router/types/openapi-config.ts"],"names":[],"mappings":"","sourcesContent":["import { OpenAPIV3 } from \"openapi-types\";\nimport { ZodSchema } from \"zod\";\n\n/**\n * Represents a schema-like object that can be used for OpenAPI documentation.\n * Accepts Zod schemas, class constructors (DTOs), or plain JSON Schema objects.\n */\ntype SchemaLike =\n | ZodSchema\n | (new (...args: any[]) => object)\n | OpenAPIV3.SchemaObject;\n\n/**\n * Extended media type object that accepts SchemaLike in addition to standard OpenAPI schemas.\n */\ntype ExtendedMediaTypeObject = Omit<OpenAPIV3.MediaTypeObject, \"schema\"> & {\n schema: SchemaLike;\n};\n\n/**\n * Represents a parameter object with support for Zod schemas, class constructors, or JSON Schema.\n * Extends OpenAPI's ParameterObject to accept SchemaLike types for the schema field.\n *\n * @example\n * // Using JSON Schema (standard OpenAPI)\n * {\n * name: \"userId\",\n * in: \"path\",\n * required: true,\n * schema: { type: \"string\", format: \"uuid\" }\n * }\n *\n * @example\n * // Using Zod schema\n * {\n * name: \"limit\",\n * in: \"query\",\n * schema: z.number().int().min(1).max(100)\n * }\n *\n * @example\n * // Using class constructor (DTO)\n * {\n * name: \"filter\",\n * in: \"query\",\n * schema: FilterDto\n * }\n */\nexport type ExtendedParameterObject = Omit<\n OpenAPIV3.ParameterObject,\n \"schema\"\n> & {\n /**\n * The schema defining the type used for the parameter.\n * Can be a Zod schema, class constructor, or standard JSON Schema object.\n */\n schema?: SchemaLike;\n};\n\n/**\n * Shorthand response definition. Can be:\n * - A SchemaLike (assumes application/json content-type and default description)\n * - An object with `content` as SchemaLike and optional `description`\n * - A full OpenAPI response object with custom content-types\n *\n * @example\n * // Shorthand: Just the schema (assumes application/json + \"Success\" description)\n * 200: ProfileDto\n *\n * @example\n * // Medium: Schema with custom description\n * 404: {\n * content: ErrorDto,\n * description: \"User not found\"\n * }\n *\n * @example\n * // Full: Multiple content-types with custom configuration\n * 500: {\n * content: {\n * \"application/json\": { schema: ErrorDto },\n * \"text/plain\": { schema: PlainErrorDto }\n * },\n * description: \"Internal server error\"\n * }\n */\ntype ResponseDefinition =\n | SchemaLike\n | {\n content: SchemaLike;\n description?: string;\n }\n | (Omit<OpenAPIV3.ResponseObject, \"content\"> & {\n content?: {\n [media: string]: ExtendedMediaTypeObject;\n };\n });\n\n/**\n * Shorthand request body definition. Can be:\n * - A SchemaLike (assumes application/json content-type)\n * - An object with `content` as SchemaLike and optional configuration\n * - A full OpenAPI request body object with custom content-types\n *\n * @example\n * // Shorthand: Just the schema (assumes application/json)\n * requestBody: CreateUserDto\n *\n * @example\n * // Medium: Schema with configuration\n * requestBody: {\n * content: CreateUserDto,\n * required: true,\n * description: \"User creation payload\"\n * }\n *\n * @example\n * // Full: Multiple content-types\n * requestBody: {\n * content: {\n * \"application/json\": { schema: CreateUserDto },\n * \"multipart/form-data\": { schema: CreateUserFormDto }\n * },\n * required: true\n * }\n */\ntype RequestBodyDefinition =\n | SchemaLike\n | {\n content: SchemaLike;\n required?: boolean;\n description?: string;\n }\n | (Omit<OpenAPIV3.RequestBodyObject, \"content\"> & {\n content: {\n [media: string]: ExtendedMediaTypeObject;\n };\n });\n\n/**\n * Extended OpenAPI Operation object with enhanced requestBody and responses.\n *\n * NOTE: If you define validation in the `validation` field, DO NOT redefine\n * the same schemas here. The framework will automatically generate OpenAPI docs\n * from your validation schemas. This field is only for:\n * - Endpoints that don't use validation (docs-only)\n * - Additional metadata (summary, description, tags, etc.)\n *\n * Defining both validation and openapi schemas for the same field will cause\n * a startup error to prevent documentation drift.\n */\ntype ExtendedOperationObject = Omit<\n OpenAPIV3.OperationObject,\n \"responses\" | \"requestBody\"\n> & {\n /**\n * Response definitions keyed by HTTP status code.\n * Supports shorthand, medium, and full OpenAPI formats.\n */\n responses?: {\n [statusCode: number]: ResponseDefinition;\n };\n\n /**\n * Request body definition.\n * Supports shorthand, medium, and full OpenAPI formats.\n *\n * WARNING: Do not define this if you're using `validation.body` -\n * it will be auto-generated from your validation schema.\n */\n requestBody?: RequestBodyDefinition;\n /**\n * Array of parameter definitions for path, query, header, and cookie parameters.\n * Each parameter's schema can be a Zod schema, class constructor, or JSON Schema.\n *\n * WARNING: Do NOT define parameters here if you're using `validation.query`,\n * `validation.params`, `validation.headers`, or `validation.cookies`.\n * Those validation schemas will automatically generate parameter documentation.\n * Defining both will cause a startup error.\n *\n * Only use this field for:\n * - Documentation-only endpoints (no validation)\n * - Routes where you explicitly don't want validation\n *\n * Note: In practice, documenting parameters without validation is rare.\n * Most APIs validate their inputs, so you'll typically use the `validation` field instead.\n *\n * @example\n * // Standard JSON Schema (most common for parameters)\n * parameters: [\n * {\n * name: \"userId\",\n * in: \"path\",\n * required: true,\n * schema: { type: \"string\", format: \"uuid\" }\n * },\n * {\n * name: \"limit\",\n * in: \"query\",\n * schema: { type: \"integer\", minimum: 1, maximum: 100 }\n * }\n * ]\n *\n * @example\n * // Using Zod (less common for parameters, but supported)\n * parameters: [\n * {\n * name: \"page\",\n * in: \"query\",\n * schema: z.number().int().positive()\n * }\n * ]\n */\n parameters?: (ExtendedParameterObject | OpenAPIV3.ReferenceObject)[];\n};\n\n/**\n * OpenAPI configuration for a route.\n * Set to `false` to exclude this route from OpenAPI documentation.\n * Otherwise, provide operation metadata and schema definitions.\n *\n * @example\n * // Exclude from docs\n * openapi: false\n *\n * @example\n * // Simple documentation with shorthand\n * openapi: {\n * summary: \"Get user profile\",\n * responses: {\n * 200: ProfileDto,\n * 404: ErrorDto\n * }\n * }\n *\n * @example\n * // Complex documentation with multiple content-types\n * openapi: {\n * summary: \"Upload file\",\n * requestBody: {\n * content: {\n * \"multipart/form-data\": { schema: FileUploadDto }\n * },\n * required: true\n * },\n * responses: {\n * 200: {\n * content: {\n * \"application/json\": { schema: UploadResultDto }\n * },\n * description: \"File uploaded successfully\"\n * }\n * }\n * }\n */\nexport type OpenApiConfig = false | Partial<ExtendedOperationObject>;\n"]}
1
+ {"version":3,"file":"openapi-config.js","sourceRoot":"","sources":["../../../../../src/utils/arkos-router/types/openapi-config.ts"],"names":[],"mappings":"","sourcesContent":["import { OpenAPIV3 } from \"openapi-types\";\nimport { ZodSchema } from \"zod\";\nimport { JsonSchema } from \"../../prisma/types\";\n\n/**\n * Represents a schema-like object that can be used for OpenAPI documentation.\n * Accepts Zod schemas, class constructors (DTOs), or plain JSON Schema objects.\n */\ntype SchemaLike =\n | ZodSchema\n | (new (...args: any[]) => object)\n | OpenAPIV3.SchemaObject\n | JsonSchema;\n\n/**\n * Extended media type object that accepts SchemaLike in addition to standard OpenAPI schemas.\n */\ntype ExtendedMediaTypeObject = Omit<OpenAPIV3.MediaTypeObject, \"schema\"> & {\n schema: SchemaLike;\n};\n\n/**\n * Represents a parameter object with support for Zod schemas, class constructors, or JSON Schema.\n * Extends OpenAPI's ParameterObject to accept SchemaLike types for the schema field.\n *\n * @example\n * // Using JSON Schema (standard OpenAPI)\n * {\n * name: \"userId\",\n * in: \"path\",\n * required: true,\n * schema: { type: \"string\", format: \"uuid\" }\n * }\n *\n * @example\n * // Using Zod schema\n * {\n * name: \"limit\",\n * in: \"query\",\n * schema: z.number().int().min(1).max(100)\n * }\n *\n * @example\n * // Using class constructor (DTO)\n * {\n * name: \"filter\",\n * in: \"query\",\n * schema: FilterDto\n * }\n */\nexport type ExtendedParameterObject = Omit<\n OpenAPIV3.ParameterObject,\n \"schema\"\n> & {\n /**\n * The schema defining the type used for the parameter.\n * Can be a Zod schema, class constructor, or standard JSON Schema object.\n */\n schema?: SchemaLike;\n};\n\n/**\n * Shorthand response definition. Can be:\n * - A SchemaLike (assumes application/json content-type and default description)\n * - An object with `content` as SchemaLike and optional `description`\n * - A full OpenAPI response object with custom content-types\n *\n * @example\n * // Shorthand: Just the schema (assumes application/json + \"Success\" description)\n * 200: ProfileDto\n *\n * @example\n * // Medium: Schema with custom description\n * 404: {\n * content: ErrorDto,\n * description: \"User not found\"\n * }\n *\n * @example\n * // Full: Multiple content-types with custom configuration\n * 500: {\n * content: {\n * \"application/json\": { schema: ErrorDto },\n * \"text/plain\": { schema: PlainErrorDto }\n * },\n * description: \"Internal server error\"\n * }\n */\ntype ResponseDefinition =\n | SchemaLike\n | {\n content: SchemaLike;\n description?: string;\n }\n | (Omit<OpenAPIV3.ResponseObject, \"content\"> & {\n content?: {\n [media: string]: ExtendedMediaTypeObject;\n };\n });\n\n/**\n * Shorthand request body definition. Can be:\n * - A SchemaLike (assumes application/json content-type)\n * - An object with `content` as SchemaLike and optional configuration\n * - A full OpenAPI request body object with custom content-types\n *\n * @example\n * // Shorthand: Just the schema (assumes application/json)\n * requestBody: CreateUserDto\n *\n * @example\n * // Medium: Schema with configuration\n * requestBody: {\n * content: CreateUserDto,\n * required: true,\n * description: \"User creation payload\"\n * }\n *\n * @example\n * // Full: Multiple content-types\n * requestBody: {\n * content: {\n * \"application/json\": { schema: CreateUserDto },\n * \"multipart/form-data\": { schema: CreateUserFormDto }\n * },\n * required: true\n * }\n */\ntype RequestBodyDefinition =\n | SchemaLike\n | {\n content: SchemaLike;\n required?: boolean;\n description?: string;\n }\n | (Omit<OpenAPIV3.RequestBodyObject, \"content\"> & {\n content: {\n [media: string]: ExtendedMediaTypeObject;\n };\n });\n\n/**\n * Extended OpenAPI Operation object with enhanced requestBody and responses.\n *\n * NOTE: If you define validation in the `validation` field, DO NOT redefine\n * the same schemas here. The framework will automatically generate OpenAPI docs\n * from your validation schemas. This field is only for:\n * - Endpoints that don't use validation (docs-only)\n * - Additional metadata (summary, description, tags, etc.)\n *\n * Defining both validation and openapi schemas for the same field will cause\n * a startup error to prevent documentation drift.\n */\nexport type ExtendedOperationObject = Omit<\n OpenAPIV3.OperationObject,\n \"responses\" | \"requestBody\"\n> & {\n /**\n * Response definitions keyed by HTTP status code.\n * Supports shorthand, medium, and full OpenAPI formats.\n */\n responses?: {\n [statusCode: number]: ResponseDefinition;\n };\n\n /**\n * Request body definition.\n * Supports shorthand, medium, and full OpenAPI formats.\n *\n * WARNING: Do not define this if you're using `validation.body` -\n * it will be auto-generated from your validation schema.\n */\n requestBody?: RequestBodyDefinition;\n /**\n * Array of parameter definitions for path, query, header, and cookie parameters.\n * Each parameter's schema can be a Zod schema, class constructor, or JSON Schema.\n *\n * WARNING: Do NOT define parameters here if you're using `validation.query`,\n * `validation.params`, `validation.headers`, or `validation.cookies`.\n * Those validation schemas will automatically generate parameter documentation.\n * Defining both will cause a startup error.\n *\n * Only use this field for:\n * - Documentation-only endpoints (no validation)\n * - Routes where you explicitly don't want validation\n *\n * Note: In practice, documenting parameters without validation is rare.\n * Most APIs validate their inputs, so you'll typically use the `validation` field instead.\n *\n * @example\n * // Standard JSON Schema (most common for parameters)\n * parameters: [\n * {\n * name: \"userId\",\n * in: \"path\",\n * required: true,\n * schema: { type: \"string\", format: \"uuid\" }\n * },\n * {\n * name: \"limit\",\n * in: \"query\",\n * schema: { type: \"integer\", minimum: 1, maximum: 100 }\n * }\n * ]\n *\n * @example\n * // Using Zod (less common for parameters, but supported)\n * parameters: [\n * {\n * name: \"page\",\n * in: \"query\",\n * schema: z.number().int().positive()\n * }\n * ]\n */\n parameters?: (ExtendedParameterObject | OpenAPIV3.ReferenceObject)[];\n};\n\n/**\n * OpenAPI configuration for a route.\n * Set to `false` to exclude this route from OpenAPI documentation.\n * Otherwise, provide operation metadata and schema definitions.\n *\n * @example\n * // Exclude from docs\n * openapi: false\n *\n * @example\n * // Simple documentation with shorthand\n * openapi: {\n * summary: \"Get user profile\",\n * responses: {\n * 200: ProfileDto,\n * 404: ErrorDto\n * }\n * }\n *\n * @example\n * // Complex documentation with multiple content-types\n * openapi: {\n * summary: \"Upload file\",\n * requestBody: {\n * content: {\n * \"multipart/form-data\": { schema: FileUploadDto }\n * },\n * required: true\n * },\n * responses: {\n * 200: {\n * content: {\n * \"application/json\": { schema: UploadResultDto }\n * },\n * description: \"File uploaded successfully\"\n * }\n * }\n * }\n */\nexport type OpenApiConfig = false | Partial<ExtendedOperationObject>;\n"]}
@@ -100,9 +100,22 @@ function getMiddlewareStack(config) {
100
100
  function extractPathParams(path) {
101
101
  const params = [];
102
102
  const segments = path.split("/");
103
+ let wildcardCount = 0;
103
104
  for (const segment of segments) {
104
- if (segment.startsWith(":")) {
105
- params.push(segment.substring(1));
105
+ if (segment === "*") {
106
+ wildcardCount++;
107
+ }
108
+ else if (segment.startsWith(":")) {
109
+ const clean = segment.substring(1).replace(/\(.*\)$/, "");
110
+ params.push(clean);
111
+ }
112
+ }
113
+ if (wildcardCount === 1) {
114
+ params.push("path");
115
+ }
116
+ else {
117
+ for (let i = 1; i <= wildcardCount; i++) {
118
+ params.push(`path${i}`);
106
119
  }
107
120
  }
108
121
  return params;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/utils/arkos-router/utils/helpers/index.ts"],"names":[],"mappings":"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","sourcesContent":["import rateLimit from \"express-rate-limit\";\nimport authService from \"../../../../modules/auth/auth.service\";\nimport { validateRequestInputs } from \"../../../../modules/base/base.middlewares\";\nimport RouteConfigRegistry from \"../../route-config-registry\";\nimport { ArkosRouteConfig } from \"../../types\";\nimport express from \"express\";\nimport compression from \"compression\";\nimport { queryParser } from \"../../../helpers/query-parser.helpers\";\nimport uploadManager from \"./upload-manager\";\nimport multer from \"multer\";\nimport { catchAsync } from \"../../../../exports/error-handler\";\n\nexport function extractArkosRoutes(\n app: any,\n basePath = \"\"\n): Array<{\n path: string;\n method: string;\n config?: ArkosRouteConfig;\n}> {\n const routes: Array<{\n path: string;\n method: string;\n config?: ArkosRouteConfig;\n }> = [];\n\n function extractFromStack(stack: any[], prefix = \"\") {\n stack.forEach((layer: any) => {\n if (layer.route) {\n const fullPath = prefix + layer.route.path;\n const methods = Object.keys(layer.route.methods);\n\n methods.forEach((method) => {\n const handlers = layer.route.stack || [];\n let config: ArkosRouteConfig | undefined;\n\n for (const handler of handlers) {\n const foundConfig = RouteConfigRegistry.get(handler.handle);\n\n if (foundConfig) {\n config = foundConfig;\n routes.push({\n path: fullPath,\n method: method.toUpperCase(),\n config,\n });\n\n break;\n }\n }\n });\n } else if (layer.name === \"router\" && layer.handle?.stack) {\n let nestedPrefix = prefix;\n\n if (layer.regexp) {\n const match = layer.regexp\n .toString()\n .match(/\\/\\^?(\\\\\\/[^?]+|\\/[^?]+)/);\n if (match) {\n nestedPrefix = prefix + \"/\" + match[1].replace(/\\\\\\//g, \"/\");\n nestedPrefix = nestedPrefix\n .replace(/\\/\\//g, \"/\")\n .replace(/\\/$/, \"\");\n }\n }\n\n extractFromStack(layer.handle.stack, nestedPrefix);\n }\n });\n }\n\n const stack = app._router?.stack || app.stack;\n if (stack) extractFromStack(stack, basePath);\n\n return routes;\n}\n\nexport function getMiddlewareStack(config: ArkosRouteConfig) {\n const middlewares = [];\n\n if (config.authentication) middlewares.push(authService.authenticate);\n\n if (\n typeof config.authentication === \"object\" &&\n config.authentication.action &&\n config.authentication.resource\n )\n middlewares.push(\n authService.handleAccessControl(\n config.authentication.action,\n config.authentication.resource,\n { [config.authentication.action]: config.authentication?.rule }\n )\n );\n\n if (config.rateLimit) middlewares.push(rateLimit(config.rateLimit));\n if (config.compression) middlewares.push(compression(config.compression));\n if (config.queryParser) middlewares.push(queryParser(config.queryParser));\n\n if (config?.bodyParser) {\n const parsers = Array.isArray(config.bodyParser)\n ? config.bodyParser\n : [config.bodyParser];\n\n parsers.forEach((parser) => {\n if (typeof parser === \"object\" && parser.parser)\n if (parser.parser !== \"multipart\")\n middlewares.push(catchAsync(express[parser.parser](parser.options)));\n else if (parser.parser === \"multipart\")\n middlewares.push(\n catchAsync(multer({ limits: parser.options }).none())\n );\n });\n }\n\n if (config.experimental?.uploads) {\n middlewares.push(uploadManager.handleUpload(config.experimental.uploads));\n\n middlewares.push(validateRequestInputs(config));\n\n middlewares.push(\n uploadManager.handlePostUpload(config.experimental.uploads)\n );\n } else middlewares.push(validateRequestInputs(config));\n\n return middlewares;\n}\n\n/**\n * Extracts path parameters from an Express route path\n *\n * @param path - Express route path with :param syntax\n * @returns Array of parameter names\n *\n * @example\n * extractPathParams('/api/users/:userId/posts/:postId')\n * // => ['userId', 'postId']\n *\n */\nexport function extractPathParams(path: string): string[] {\n const params: string[] = [];\n const segments = path.split(\"/\");\n\n for (const segment of segments) {\n if (segment.startsWith(\":\")) {\n params.push(segment.substring(1));\n }\n }\n\n return params;\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/utils/arkos-router/utils/helpers/index.ts"],"names":[],"mappings":";;;;;AAYA,gDA+DC;AAED,gDAiDC;AAaD,8CAuBC;AAlKD,4EAA2C;AAC3C,yFAAgE;AAChE,gFAAkF;AAClF,wFAA8D;AAE9D,sDAA8B;AAC9B,8DAAsC;AACtC,gFAAoE;AACpE,sEAA6C;AAC7C,oDAA4B;AAC5B,qEAA+D;AAE/D,SAAgB,kBAAkB,CAChC,GAAQ,EACR,QAAQ,GAAG,EAAE;IAMb,MAAM,MAAM,GAIP,EAAE,CAAC;IAER,SAAS,gBAAgB,CAAC,KAAY,EAAE,MAAM,GAAG,EAAE;QACjD,KAAK,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE;YAC3B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAEjD,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;oBACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;oBACzC,IAAI,MAAoC,CAAC;oBAEzC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;wBAC/B,MAAM,WAAW,GAAG,+BAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;wBAE5D,IAAI,WAAW,EAAE,CAAC;4BAChB,MAAM,GAAG,WAAW,CAAC;4BACrB,MAAM,CAAC,IAAI,CAAC;gCACV,IAAI,EAAE,QAAQ;gCACd,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;gCAC5B,MAAM;6BACP,CAAC,CAAC;4BAEH,MAAM;wBACR,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;gBAC1D,IAAI,YAAY,GAAG,MAAM,CAAC;gBAE1B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM;yBACvB,QAAQ,EAAE;yBACV,KAAK,CAAC,0BAA0B,CAAC,CAAC;oBACrC,IAAI,KAAK,EAAE,CAAC;wBACV,YAAY,GAAG,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;wBAC7D,YAAY,GAAG,YAAY;6BACxB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;6BACrB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBACxB,CAAC;gBACH,CAAC;gBAED,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YACrD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC;IAC9C,IAAI,KAAK;QAAE,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAE7C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,kBAAkB,CAAC,MAAwB;IACzD,MAAM,WAAW,GAAG,EAAE,CAAC;IAEvB,IAAI,MAAM,CAAC,cAAc;QAAE,WAAW,CAAC,IAAI,CAAC,sBAAW,CAAC,YAAY,CAAC,CAAC;IAEtE,IACE,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ;QACzC,MAAM,CAAC,cAAc,CAAC,MAAM;QAC5B,MAAM,CAAC,cAAc,CAAC,QAAQ;QAE9B,WAAW,CAAC,IAAI,CACd,sBAAW,CAAC,mBAAmB,CAC7B,MAAM,CAAC,cAAc,CAAC,MAAM,EAC5B,MAAM,CAAC,cAAc,CAAC,QAAQ,EAC9B,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,EAAE,IAAI,EAAE,CAChE,CACF,CAAC;IAEJ,IAAI,MAAM,CAAC,SAAS;QAAE,WAAW,CAAC,IAAI,CAAC,IAAA,4BAAS,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IACpE,IAAI,MAAM,CAAC,WAAW;QAAE,WAAW,CAAC,IAAI,CAAC,IAAA,qBAAW,EAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1E,IAAI,MAAM,CAAC,WAAW;QAAE,WAAW,CAAC,IAAI,CAAC,IAAA,kCAAW,EAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAE1E,IAAI,MAAM,EAAE,UAAU,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;YAC9C,CAAC,CAAC,MAAM,CAAC,UAAU;YACnB,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAExB,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACzB,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM;gBAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW;oBAC/B,WAAW,CAAC,IAAI,CAAC,IAAA,0BAAU,EAAC,iBAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;qBAClE,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW;oBACpC,WAAW,CAAC,IAAI,CACd,IAAA,0BAAU,EAAC,IAAA,gBAAM,EAAC,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CACtD,CAAC;QACR,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;QACjC,WAAW,CAAC,IAAI,CAAC,wBAAa,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;QAE1E,WAAW,CAAC,IAAI,CAAC,IAAA,wCAAqB,EAAC,MAAM,CAAC,CAAC,CAAC;QAEhD,WAAW,CAAC,IAAI,CACd,wBAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAC5D,CAAC;IACJ,CAAC;;QAAM,WAAW,CAAC,IAAI,CAAC,IAAA,wCAAqB,EAAC,MAAM,CAAC,CAAC,CAAC;IAEvD,OAAO,WAAW,CAAC;AACrB,CAAC;AAaD,SAAgB,iBAAiB,CAAC,IAAY;IAC5C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;YACpB,aAAa,EAAE,CAAC;QAClB,CAAC;aAAM,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import rateLimit from \"express-rate-limit\";\nimport authService from \"../../../../modules/auth/auth.service\";\nimport { validateRequestInputs } from \"../../../../modules/base/base.middlewares\";\nimport RouteConfigRegistry from \"../../route-config-registry\";\nimport { ArkosRouteConfig } from \"../../types\";\nimport express from \"express\";\nimport compression from \"compression\";\nimport { queryParser } from \"../../../helpers/query-parser.helpers\";\nimport uploadManager from \"./upload-manager\";\nimport multer from \"multer\";\nimport { catchAsync } from \"../../../../exports/error-handler\";\n\nexport function extractArkosRoutes(\n app: any,\n basePath = \"\"\n): Array<{\n path: string;\n method: string;\n config?: ArkosRouteConfig;\n}> {\n const routes: Array<{\n path: string;\n method: string;\n config?: ArkosRouteConfig;\n }> = [];\n\n function extractFromStack(stack: any[], prefix = \"\") {\n stack.forEach((layer: any) => {\n if (layer.route) {\n const fullPath = prefix + layer.route.path;\n const methods = Object.keys(layer.route.methods);\n\n methods.forEach((method) => {\n const handlers = layer.route.stack || [];\n let config: ArkosRouteConfig | undefined;\n\n for (const handler of handlers) {\n const foundConfig = RouteConfigRegistry.get(handler.handle);\n\n if (foundConfig) {\n config = foundConfig;\n routes.push({\n path: fullPath,\n method: method.toUpperCase(),\n config,\n });\n\n break;\n }\n }\n });\n } else if (layer.name === \"router\" && layer.handle?.stack) {\n let nestedPrefix = prefix;\n\n if (layer.regexp) {\n const match = layer.regexp\n .toString()\n .match(/\\/\\^?(\\\\\\/[^?]+|\\/[^?]+)/);\n if (match) {\n nestedPrefix = prefix + \"/\" + match[1].replace(/\\\\\\//g, \"/\");\n nestedPrefix = nestedPrefix\n .replace(/\\/\\//g, \"/\")\n .replace(/\\/$/, \"\");\n }\n }\n\n extractFromStack(layer.handle.stack, nestedPrefix);\n }\n });\n }\n\n const stack = app._router?.stack || app.stack;\n if (stack) extractFromStack(stack, basePath);\n\n return routes;\n}\n\nexport function getMiddlewareStack(config: ArkosRouteConfig) {\n const middlewares = [];\n\n if (config.authentication) middlewares.push(authService.authenticate);\n\n if (\n typeof config.authentication === \"object\" &&\n config.authentication.action &&\n config.authentication.resource\n )\n middlewares.push(\n authService.handleAccessControl(\n config.authentication.action,\n config.authentication.resource,\n { [config.authentication.action]: config.authentication?.rule }\n )\n );\n\n if (config.rateLimit) middlewares.push(rateLimit(config.rateLimit));\n if (config.compression) middlewares.push(compression(config.compression));\n if (config.queryParser) middlewares.push(queryParser(config.queryParser));\n\n if (config?.bodyParser) {\n const parsers = Array.isArray(config.bodyParser)\n ? config.bodyParser\n : [config.bodyParser];\n\n parsers.forEach((parser) => {\n if (typeof parser === \"object\" && parser.parser)\n if (parser.parser !== \"multipart\")\n middlewares.push(catchAsync(express[parser.parser](parser.options)));\n else if (parser.parser === \"multipart\")\n middlewares.push(\n catchAsync(multer({ limits: parser.options }).none())\n );\n });\n }\n\n if (config.experimental?.uploads) {\n middlewares.push(uploadManager.handleUpload(config.experimental.uploads));\n\n middlewares.push(validateRequestInputs(config));\n\n middlewares.push(\n uploadManager.handlePostUpload(config.experimental.uploads)\n );\n } else middlewares.push(validateRequestInputs(config));\n\n return middlewares;\n}\n\n/**\n * Extracts path parameters from an Express route path\n *\n * @param path - Express route path with :param syntax\n * @returns Array of parameter names\n *\n * @example\n * extractPathParams('/api/users/:userId/posts/:postId')\n * // => ['userId', 'postId']\n *\n */\nexport function extractPathParams(path: string): string[] {\n const params: string[] = [];\n const segments = path.split(\"/\");\n let wildcardCount = 0;\n\n for (const segment of segments) {\n if (segment === \"*\") {\n wildcardCount++;\n } else if (segment.startsWith(\":\")) {\n const clean = segment.substring(1).replace(/\\(.*\\)$/, \"\");\n params.push(clean);\n }\n }\n\n if (wildcardCount === 1) {\n params.push(\"path\");\n } else {\n for (let i = 1; i <= wildcardCount; i++) {\n params.push(`path${i}`);\n }\n }\n\n return params;\n}\n"]}
@@ -13,7 +13,6 @@ const fs_helpers_1 = require("../helpers/fs.helpers.js");
13
13
  const sheu_1 = __importDefault(require("../sheu.js"));
14
14
  const text_helpers_1 = require("../helpers/text.helpers.js");
15
15
  const prisma_schema_parser_1 = __importDefault(require("../prisma/prisma-schema-parser.js"));
16
- const swagger_router_helpers_1 = require("../../modules/swagger/utils/helpers/swagger.router.helpers.js");
17
16
  const models = prisma_schema_parser_1.default
18
17
  .getModelsAsArrayOfStrings()
19
18
  .map((val) => (0, change_case_helpers_1.kebabCase)(val));
@@ -29,17 +28,18 @@ const generateFile = async (options, config) => {
29
28
  if (!isKnowModule)
30
29
  throw new Error(`Generate command are only available for know modules such as all prisma models, file-upload and auth. And you passed ${modelName}.`);
31
30
  else if (!isAllowedModule)
32
- throw Error(`${(0, swagger_router_helpers_1.kebabToHuman)((0, change_case_helpers_1.kebabCase)(config.templateName))} are not available for module ${modelName}`);
31
+ throw Error(`${(0, change_case_helpers_1.kebabCase)(config.templateName).replaceAll("-", " ")} are not available for module ${modelName}`);
33
32
  if (config.customValidation)
34
33
  config.customValidation(modelName);
35
- const { path: customPath = "src/modules/{{module-name}}" } = options;
36
34
  const names = {
37
35
  pascal: (0, change_case_helpers_1.pascalCase)(modelName),
38
36
  camel: (0, change_case_helpers_1.camelCase)(modelName),
39
37
  kebab: (0, change_case_helpers_1.kebabCase)(modelName),
40
38
  };
41
39
  const ext = (0, fs_helpers_1.getUserFileExtension)();
42
- const resolvedPath = (config.customPath || customPath).replaceAll("{{module-name}}", names.kebab);
40
+ const resolvedPath = (options.path ||
41
+ config.customPath ||
42
+ "src/modules/{{module-name}}").replaceAll("{{module-name}}", names.kebab);
43
43
  const modulePath = path_1.default.join(process.cwd(), resolvedPath);
44
44
  const fileName = config.prefix
45
45
  ? `${config.prefix}${names.kebab}.${config.fileSuffix}.${ext}`
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../src/utils/cli/generate.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport { generateTemplate } from \"./utils/template-generators\";\nimport { ensureDirectoryExists } from \"./utils/cli.helpers\";\nimport {\n camelCase,\n kebabCase,\n pascalCase,\n} from \"../helpers/change-case.helpers\";\nimport { fullCleanCwd, getUserFileExtension } from \"../helpers/fs.helpers\";\nimport sheu from \"../sheu\";\nimport { capitalize } from \"../helpers/text.helpers\";\nimport prismaSchemaParser from \"../prisma/prisma-schema-parser\";\nimport { kebabToHuman } from \"../../modules/swagger/utils/helpers/swagger.router.helpers\";\n\nconst models = prismaSchemaParser\n .getModelsAsArrayOfStrings()\n .map((val) => kebabCase(val));\n\nconst knownModules = [...models, \"file-upload\", \"auth\"];\n\ninterface GenerateOptions {\n path?: string;\n model?: string;\n module?: string;\n}\n\ninterface GenerateConfig {\n templateName: string;\n fileSuffix: string;\n customValidation?: (modelName: string) => void;\n customImports?: (names: any) => any;\n customPath?: string;\n prefix?: string;\n allowedModules: string[];\n}\n\nconst generateFile = async (\n options: GenerateOptions,\n config: GenerateConfig\n) => {\n const modelName = options.module || options.model;\n\n if (options.module && options.model)\n throw Error(\n \"You must either pass --module or --model, prefer --module to align with future updates.\"\n );\n\n if (!modelName?.trim()) throw new Error(\"Module name is required!\");\n\n const isAllowedModule = config.allowedModules.includes(kebabCase(modelName));\n const isKnowModule = config.allowedModules.includes(kebabCase(modelName));\n\n if (!isKnowModule)\n throw new Error(\n `Generate command are only available for know modules such as all prisma models, file-upload and auth. And you passed ${modelName}.`\n );\n else if (!isAllowedModule)\n throw Error(\n `${kebabToHuman(kebabCase(config.templateName))} are not available for module ${modelName}`\n );\n\n if (config.customValidation) config.customValidation(modelName);\n\n const { path: customPath = \"src/modules/{{module-name}}\" } = options;\n\n const names = {\n pascal: pascalCase(modelName),\n camel: camelCase(modelName),\n kebab: kebabCase(modelName),\n };\n\n const ext = getUserFileExtension();\n\n const resolvedPath = (config.customPath || customPath).replaceAll(\n \"{{module-name}}\",\n names.kebab\n );\n\n const modulePath = path.join(process.cwd(), resolvedPath);\n\n const fileName = config.prefix\n ? `${config.prefix}${names.kebab}.${config.fileSuffix}.${ext}`\n : `${names.kebab}.${config.fileSuffix}.${ext}`;\n\n const filePath = path.join(modulePath, fileName);\n\n const humamReadableTemplateName =\n config.templateName.charAt(0).toUpperCase() +\n config.templateName.slice(1).replaceAll(\"-\", \" \");\n\n try {\n ensureDirectoryExists(modulePath);\n\n const templateData = {\n modelName: names,\n ...(config.customImports && { imports: config.customImports(names) }),\n };\n\n const content = generateTemplate(config.templateName, templateData);\n if (fs.existsSync(filePath))\n throw new Error(\n `${capitalize(humamReadableTemplateName.toLowerCase())} for ${names.kebab.replace(\"-\", \"\")} already exists.`\n );\n fs.writeFileSync(filePath, content);\n\n console.info(\"\");\n sheu.done(\n `${humamReadableTemplateName} for ${names.kebab.replace(\"-\", \"\")} generated under ${fullCleanCwd(filePath)}`\n );\n } catch (err: any) {\n console.info(\"\");\n sheu.error(\n `Failed because of ${err?.message?.toLowerCase() || \"unknown reason\"}`\n );\n process.exit(1);\n }\n};\n\nexport const generateCommand = {\n controller: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"controller\",\n fileSuffix: \"controller\",\n customImports: () => ({\n baseController: \"arkos/controllers\",\n }),\n allowedModules: knownModules,\n });\n },\n\n service: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"service\",\n fileSuffix: \"service\",\n customImports: () => ({\n baseService: \"arkos/services\",\n }),\n allowedModules: [...knownModules, \"email\"],\n });\n },\n\n router: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"router\",\n fileSuffix: \"router\",\n customImports: (names) => ({\n baseRouter: \"arkos\",\n controller: `./${names.kebab}.controller`,\n }),\n allowedModules: knownModules,\n });\n },\n\n interceptors: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"interceptors\",\n fileSuffix: \"interceptors\",\n allowedModules: knownModules,\n });\n },\n\n authConfigs: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"auth-configs\",\n fileSuffix: \"auth\",\n allowedModules: knownModules,\n });\n },\n\n hooks: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"hooks\",\n fileSuffix: \"hooks\",\n allowedModules: knownModules,\n });\n },\n\n createSchema: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"create-schema\",\n fileSuffix: \"schema\",\n customPath: \"src/modules/{{module-name}}/schemas\",\n prefix: \"create-\",\n allowedModules: models,\n });\n },\n\n updateSchema: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"update-schema\",\n fileSuffix: \"schema\",\n customPath: \"src/modules/{{module-name}}/schemas\",\n prefix: \"update-\",\n allowedModules: models,\n });\n },\n\n createDto: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"create-dto\",\n fileSuffix: \"dto\",\n customPath: \"src/modules/{{module-name}}/dtos\",\n prefix: \"create-\",\n allowedModules: models,\n });\n },\n\n updateDto: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"update-dto\",\n fileSuffix: \"dto\",\n customPath: \"src/modules/{{module-name}}/dtos\",\n prefix: \"update-\",\n allowedModules: models,\n });\n },\n\n queryOptions: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"query-options\",\n fileSuffix: \"query\",\n allowedModules: knownModules,\n });\n },\n};\n"]}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../src/utils/cli/generate.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport { generateTemplate } from \"./utils/template-generators\";\nimport { ensureDirectoryExists } from \"./utils/cli.helpers\";\nimport {\n camelCase,\n kebabCase,\n pascalCase,\n} from \"../helpers/change-case.helpers\";\nimport { fullCleanCwd, getUserFileExtension } from \"../helpers/fs.helpers\";\nimport sheu from \"../sheu\";\nimport { capitalize } from \"../helpers/text.helpers\";\nimport prismaSchemaParser from \"../prisma/prisma-schema-parser\";\n\nconst models = prismaSchemaParser\n .getModelsAsArrayOfStrings()\n .map((val) => kebabCase(val));\n\nconst knownModules = [...models, \"file-upload\", \"auth\"];\n\ninterface GenerateOptions {\n path?: string;\n model?: string;\n module?: string;\n}\n\ninterface GenerateConfig {\n templateName: string;\n fileSuffix: string;\n customValidation?: (modelName: string) => void;\n customImports?: (names: any) => any;\n customPath?: string;\n prefix?: string;\n allowedModules: string[];\n}\n\nconst generateFile = async (\n options: GenerateOptions,\n config: GenerateConfig\n) => {\n const modelName = options.module || options.model;\n\n if (options.module && options.model)\n throw Error(\n \"You must either pass --module or --model, prefer --module to align with future updates.\"\n );\n\n if (!modelName?.trim()) throw new Error(\"Module name is required!\");\n\n const isAllowedModule = config.allowedModules.includes(kebabCase(modelName));\n const isKnowModule = config.allowedModules.includes(kebabCase(modelName));\n\n if (!isKnowModule)\n throw new Error(\n `Generate command are only available for know modules such as all prisma models, file-upload and auth. And you passed ${modelName}.`\n );\n else if (!isAllowedModule)\n throw Error(\n `${kebabCase(config.templateName).replaceAll(\"-\", \" \")} are not available for module ${modelName}`\n );\n\n if (config.customValidation) config.customValidation(modelName);\n\n const names = {\n pascal: pascalCase(modelName),\n camel: camelCase(modelName),\n kebab: kebabCase(modelName),\n };\n\n const ext = getUserFileExtension();\n\n const resolvedPath = (\n options.path ||\n config.customPath ||\n \"src/modules/{{module-name}}\"\n ).replaceAll(\"{{module-name}}\", names.kebab);\n\n const modulePath = path.join(process.cwd(), resolvedPath);\n\n const fileName = config.prefix\n ? `${config.prefix}${names.kebab}.${config.fileSuffix}.${ext}`\n : `${names.kebab}.${config.fileSuffix}.${ext}`;\n\n const filePath = path.join(modulePath, fileName);\n\n const humamReadableTemplateName =\n config.templateName.charAt(0).toUpperCase() +\n config.templateName.slice(1).replaceAll(\"-\", \" \");\n\n try {\n ensureDirectoryExists(modulePath);\n\n const templateData = {\n modelName: names,\n ...(config.customImports && { imports: config.customImports(names) }),\n };\n\n const content = generateTemplate(config.templateName, templateData);\n if (fs.existsSync(filePath))\n throw new Error(\n `${capitalize(humamReadableTemplateName.toLowerCase())} for ${names.kebab.replace(\"-\", \"\")} already exists.`\n );\n fs.writeFileSync(filePath, content);\n\n console.info(\"\");\n sheu.done(\n `${humamReadableTemplateName} for ${names.kebab.replace(\"-\", \"\")} generated under ${fullCleanCwd(filePath)}`\n );\n } catch (err: any) {\n console.info(\"\");\n sheu.error(\n `Failed because of ${err?.message?.toLowerCase() || \"unknown reason\"}`\n );\n process.exit(1);\n }\n};\n\nexport const generateCommand = {\n controller: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"controller\",\n fileSuffix: \"controller\",\n customImports: () => ({\n baseController: \"arkos/controllers\",\n }),\n allowedModules: knownModules,\n });\n },\n\n service: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"service\",\n fileSuffix: \"service\",\n customImports: () => ({\n baseService: \"arkos/services\",\n }),\n allowedModules: [...knownModules, \"email\"],\n });\n },\n\n router: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"router\",\n fileSuffix: \"router\",\n customImports: (names) => ({\n baseRouter: \"arkos\",\n controller: `./${names.kebab}.controller`,\n }),\n allowedModules: knownModules,\n });\n },\n\n interceptors: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"interceptors\",\n fileSuffix: \"interceptors\",\n allowedModules: knownModules,\n });\n },\n\n authConfigs: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"auth-configs\",\n fileSuffix: \"auth\",\n allowedModules: knownModules,\n });\n },\n\n hooks: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"hooks\",\n fileSuffix: \"hooks\",\n allowedModules: knownModules,\n });\n },\n\n createSchema: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"create-schema\",\n fileSuffix: \"schema\",\n customPath: \"src/modules/{{module-name}}/schemas\",\n prefix: \"create-\",\n allowedModules: models,\n });\n },\n\n updateSchema: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"update-schema\",\n fileSuffix: \"schema\",\n customPath: \"src/modules/{{module-name}}/schemas\",\n prefix: \"update-\",\n allowedModules: models,\n });\n },\n\n createDto: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"create-dto\",\n fileSuffix: \"dto\",\n customPath: \"src/modules/{{module-name}}/dtos\",\n prefix: \"create-\",\n allowedModules: models,\n });\n },\n\n updateDto: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"update-dto\",\n fileSuffix: \"dto\",\n customPath: \"src/modules/{{module-name}}/dtos\",\n prefix: \"update-\",\n allowedModules: models,\n });\n },\n\n queryOptions: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"query-options\",\n fileSuffix: \"query\",\n allowedModules: knownModules,\n });\n },\n};\n"]}
@@ -46,7 +46,7 @@ generate
46
46
  .description("Generate a new controller")
47
47
  .option("-m, --module <name>", "Module name")
48
48
  .option("--model <name>", "Module name (alias for --module)")
49
- .option("-p, --path <path>", "Custom path for the controller", "src/modules/{{module-name}}")
49
+ .option("-p, --path <path>", "Custom path for the controller")
50
50
  .action(generate_1.generateCommand.controller);
51
51
  generate
52
52
  .command("service")
@@ -54,7 +54,7 @@ generate
54
54
  .description("Generate a new service")
55
55
  .option("-m, --module <name>", "Module name")
56
56
  .option("--model <name>", "Module name (alias for --module)")
57
- .option("-p, --path <path>", "Custom path for the service", "src/modules/{{module-name}}")
57
+ .option("-p, --path <path>", "Custom path for the service")
58
58
  .action(generate_1.generateCommand.service);
59
59
  generate
60
60
  .command("router")
@@ -62,7 +62,7 @@ generate
62
62
  .description("Generate a new router")
63
63
  .option("-m, --module <name>", "Module name")
64
64
  .option("--model <name>", "Module name (alias for --module)")
65
- .option("-p, --path <path>", "Custom path for the router", "src/modules/{{module-name}}")
65
+ .option("-p, --path <path>", "Custom path for the router")
66
66
  .action(generate_1.generateCommand.router);
67
67
  generate
68
68
  .command("auth-configs")
@@ -70,7 +70,7 @@ generate
70
70
  .description("Generate auth configuration")
71
71
  .option("-m, --module <name>", "Module name")
72
72
  .option("--model <name>", "Module name (alias for --module)")
73
- .option("-p, --path <path>", "Custom path for the router", "src/modules/{{module-name}}")
73
+ .option("-p, --path <path>", "Custom path for the router")
74
74
  .action(generate_1.generateCommand.authConfigs);
75
75
  generate
76
76
  .command("query-options")
@@ -78,7 +78,7 @@ generate
78
78
  .description("Generate prisma query options")
79
79
  .option("-m, --module <name>", "Module name")
80
80
  .option("--model <name>", "Module name (alias for --module)")
81
- .option("-p, --path <path>", "Custom path for query options", "src/modules/{{module-name}}")
81
+ .option("-p, --path <path>", "Custom path for query options")
82
82
  .action(generate_1.generateCommand.queryOptions);
83
83
  generate
84
84
  .command("interceptors")
@@ -88,7 +88,7 @@ generate
88
88
  .description("Generate a new interceptors file")
89
89
  .option("-m, --module <name>", "Module name")
90
90
  .option("--model <name>", "Module name (alias for --module)")
91
- .option("-p, --path <path>", "Custom path for interceptors", "src/modules/{{module-name}}")
91
+ .option("-p, --path <path>", "Custom path for interceptors")
92
92
  .action(generate_1.generateCommand.interceptors);
93
93
  generate
94
94
  .command("hooks")
@@ -96,7 +96,7 @@ generate
96
96
  .description("Generate a new service hooks file")
97
97
  .option("-m, --module <name>", "Module name")
98
98
  .option("--model <name>", "Module name (alias for --module)")
99
- .option("-p, --path <path>", "Custom path for hooks", "src/modules/{{module-name}}")
99
+ .option("-p, --path <path>", "Custom path for hooks")
100
100
  .action(generate_1.generateCommand.hooks);
101
101
  generate
102
102
  .command("create-schema")
@@ -104,7 +104,7 @@ generate
104
104
  .description("Generate a new zod create schema file for a prisma model")
105
105
  .option("-m, --module <name>", "Module name")
106
106
  .option("--model <name>", "Module name (alias for --module)")
107
- .option("-p, --path <path>", "Custom path for hooks", "src/modules/{{module-name}}")
107
+ .option("-p, --path <path>", "Custom path for hooks")
108
108
  .action(generate_1.generateCommand.createSchema);
109
109
  generate
110
110
  .command("update-schema")
@@ -112,7 +112,7 @@ generate
112
112
  .description("Generate a new zod update schema file for a prisma model")
113
113
  .option("-m, --module <name>", "Module name")
114
114
  .option("--model <name>", "Module name (alias for --module)")
115
- .option("-p, --path <path>", "Custom path for hooks", "src/modules/{{module-name}}")
115
+ .option("-p, --path <path>", "Custom path for hooks")
116
116
  .action(generate_1.generateCommand.updateSchema);
117
117
  generate
118
118
  .command("create-dto")
@@ -120,7 +120,7 @@ generate
120
120
  .description("Generate a new class-validator create dto file for a prisma model")
121
121
  .option("-m, --module <name>", "Module name")
122
122
  .option("--model <name>", "Module name (alias for --module)")
123
- .option("-p, --path <path>", "Custom path for hooks", "src/modules/{{module-name}}")
123
+ .option("-p, --path <path>", "Custom path for hooks")
124
124
  .action(generate_1.generateCommand.createDto);
125
125
  generate
126
126
  .command("update-dto")
@@ -128,7 +128,7 @@ generate
128
128
  .description("Generate a new class-validator update dto file for a prisma model")
129
129
  .option("-m, --module <name>", "Module name")
130
130
  .option("--model <name>", "Module name (alias for --module)")
131
- .option("-p, --path <path>", "Custom path for hooks", "src/modules/{{module-name}}")
131
+ .option("-p, --path <path>", "Custom path for hooks")
132
132
  .action(generate_1.generateCommand.updateDto);
133
133
  program
134
134
  .command("prisma")
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/cli/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Command } from \"commander\";\nimport { buildCommand } from \"./build\";\nimport { devCommand } from \"./dev\";\nimport { startCommand } from \"./start\";\nimport { generateCommand } from \"./generate\";\nimport { getVersion } from \"./utils/cli.helpers\";\nimport prismaGenerateCommand from \"./prisma-generate\";\nimport exportAuthActionCommand from \"./export-auth-action\";\n\nconst program = new Command();\n\nprogram.name(\"arkos\").description(\"Arkos.js CLI\").version(getVersion());\n\nprogram\n .command(\"build\")\n .description(\"Build your Arkos project\")\n .option(\"-m, --module <type>\", \"Module type (cjs or esm)\", \"cjs\")\n .action(buildCommand);\n\nprogram\n .command(\"dev\")\n .description(\"Run development server\")\n .option(\"-p, --port <number>\", \"Port number\")\n .option(\"-h, --host <host>\", \"Host to bind to\")\n .action(devCommand);\n\nprogram\n .command(\"start\")\n .description(\"Run production server\")\n .option(\"-p, --port <number>\", \"Port number\")\n .option(\"-h, --host <host>\", \"Host to bind to\")\n .action(startCommand);\n\nconst generate = program\n .command(\"generate\")\n .alias(\"g\")\n .description(\"Generate arkos components\");\n\ngenerate\n .command(\"controller\")\n .alias(\"c\")\n .description(\"Generate a new controller\")\n .option(\"-m, --module <name>\", \"Module name\")\n .option(\"--model <name>\", \"Module name (alias for --module)\")\n .option(\n \"-p, --path <path>\",\n \"Custom path for the controller\",\n \"src/modules/{{module-name}}\"\n )\n .action(generateCommand.controller);\n\ngenerate\n .command(\"service\")\n .alias(\"s\")\n .description(\"Generate a new service\")\n .option(\"-m, --module <name>\", \"Module name\")\n .option(\"--model <name>\", \"Module name (alias for --module)\")\n .option(\n \"-p, --path <path>\",\n \"Custom path for the service\",\n \"src/modules/{{module-name}}\"\n )\n .action(generateCommand.service);\n\ngenerate\n .command(\"router\")\n .alias(\"r\")\n .description(\"Generate a new router\")\n\n .option(\"-m, --module <name>\", \"Module name\")\n .option(\"--model <name>\", \"Module name (alias for --module)\")\n .option(\n \"-p, --path <path>\",\n \"Custom path for the router\",\n \"src/modules/{{module-name}}\"\n )\n .action(generateCommand.router);\n\ngenerate\n .command(\"auth-configs\")\n .alias(\"a\")\n .description(\"Generate auth configuration\")\n .option(\"-m, --module <name>\", \"Module name\")\n .option(\"--model <name>\", \"Module name (alias for --module)\")\n .option(\n \"-p, --path <path>\",\n \"Custom path for the router\",\n \"src/modules/{{module-name}}\"\n )\n .action(generateCommand.authConfigs);\n\ngenerate\n .command(\"query-options\")\n .alias(\"q\")\n .description(\"Generate prisma query options\")\n .option(\"-m, --module <name>\", \"Module name\")\n .option(\"--model <name>\", \"Module name (alias for --module)\")\n .option(\n \"-p, --path <path>\",\n \"Custom path for query options\",\n \"src/modules/{{module-name}}\"\n )\n .action(generateCommand.queryOptions);\n\ngenerate\n .command(\"interceptors\")\n .alias(\"i\")\n .alias(\"middlewares\")\n .alias(\"m\")\n .description(\"Generate a new interceptors file\")\n .option(\"-m, --module <name>\", \"Module name\")\n .option(\"--model <name>\", \"Module name (alias for --module)\")\n .option(\n \"-p, --path <path>\",\n \"Custom path for interceptors\",\n \"src/modules/{{module-name}}\"\n )\n .action(generateCommand.interceptors);\n\ngenerate\n .command(\"hooks\")\n .alias(\"h\")\n .description(\"Generate a new service hooks file\")\n\n .option(\"-m, --module <name>\", \"Module name\")\n .option(\"--model <name>\", \"Module name (alias for --module)\")\n .option(\n \"-p, --path <path>\",\n \"Custom path for hooks\",\n \"src/modules/{{module-name}}\"\n )\n .action(generateCommand.hooks);\n\ngenerate\n .command(\"create-schema\")\n .alias(\"cs\")\n .description(\"Generate a new zod create schema file for a prisma model\")\n .option(\"-m, --module <name>\", \"Module name\")\n .option(\"--model <name>\", \"Module name (alias for --module)\")\n .option(\n \"-p, --path <path>\",\n \"Custom path for hooks\",\n \"src/modules/{{module-name}}\"\n )\n .action(generateCommand.createSchema);\n\ngenerate\n .command(\"update-schema\")\n .alias(\"us\")\n .description(\"Generate a new zod update schema file for a prisma model\")\n .option(\"-m, --module <name>\", \"Module name\")\n .option(\"--model <name>\", \"Module name (alias for --module)\")\n .option(\n \"-p, --path <path>\",\n \"Custom path for hooks\",\n \"src/modules/{{module-name}}\"\n )\n .action(generateCommand.updateSchema);\n\ngenerate\n .command(\"create-dto\")\n .alias(\"cd\")\n .description(\n \"Generate a new class-validator create dto file for a prisma model\"\n )\n .option(\"-m, --module <name>\", \"Module name\")\n .option(\"--model <name>\", \"Module name (alias for --module)\")\n .option(\n \"-p, --path <path>\",\n \"Custom path for hooks\",\n \"src/modules/{{module-name}}\"\n )\n .action(generateCommand.createDto);\n\ngenerate\n .command(\"update-dto\")\n .alias(\"ud\")\n .description(\n \"Generate a new class-validator update dto file for a prisma model\"\n )\n .option(\"-m, --module <name>\", \"Module name\")\n .option(\"--model <name>\", \"Module name (alias for --module)\")\n .option(\n \"-p, --path <path>\",\n \"Custom path for hooks\",\n \"src/modules/{{module-name}}\"\n )\n .action(generateCommand.updateDto);\n\nprogram\n .command(\"prisma\")\n .command(\"generate\")\n .description(\"Generate your @prisma/client and BaseService class types\")\n .action(prismaGenerateCommand);\n\nprogram\n .command(\"export\")\n .command(\"auth-action\")\n .description(\"Export file with an array containing all auth-actions\")\n .option(\"-o, --overwrite\", \"Overwrites all the changes on the object\")\n .option(\n \"-p, --path <path>\",\n \"Custom path for auth-actions\",\n \"src/modules/auth/utils\"\n )\n .action(exportAuthActionCommand);\n\nprogram.parse(process.argv);\n\nexport { program, buildCommand, devCommand, startCommand, generateCommand };\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/cli/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Command } from \"commander\";\nimport { buildCommand } from \"./build\";\nimport { devCommand } from \"./dev\";\nimport { startCommand } from \"./start\";\nimport { generateCommand } from \"./generate\";\nimport { getVersion } from \"./utils/cli.helpers\";\nimport prismaGenerateCommand from \"./prisma-generate\";\nimport exportAuthActionCommand from \"./export-auth-action\";\n\nconst program = new Command();\n\nprogram.name(\"arkos\").description(\"Arkos.js CLI\").version(getVersion());\n\nprogram\n .command(\"build\")\n .description(\"Build your Arkos project\")\n .option(\"-m, --module <type>\", \"Module type (cjs or esm)\", \"cjs\")\n .action(buildCommand);\n\nprogram\n .command(\"dev\")\n .description(\"Run development server\")\n .option(\"-p, --port <number>\", \"Port number\")\n .option(\"-h, --host <host>\", \"Host to bind to\")\n .action(devCommand);\n\nprogram\n .command(\"start\")\n .description(\"Run production server\")\n .option(\"-p, --port <number>\", \"Port number\")\n .option(\"-h, --host <host>\", \"Host to bind to\")\n .action(startCommand);\n\nconst generate = program\n .command(\"generate\")\n .alias(\"g\")\n .description(\"Generate arkos components\");\n\ngenerate\n .command(\"controller\")\n .alias(\"c\")\n .description(\"Generate a new controller\")\n .option(\"-m, --module <name>\", \"Module name\")\n .option(\"--model <name>\", \"Module name (alias for --module)\")\n .option(\"-p, --path <path>\", \"Custom path for the controller\")\n .action(generateCommand.controller);\n\ngenerate\n .command(\"service\")\n .alias(\"s\")\n .description(\"Generate a new service\")\n .option(\"-m, --module <name>\", \"Module name\")\n .option(\"--model <name>\", \"Module name (alias for --module)\")\n .option(\"-p, --path <path>\", \"Custom path for the service\")\n .action(generateCommand.service);\n\ngenerate\n .command(\"router\")\n .alias(\"r\")\n .description(\"Generate a new router\")\n\n .option(\"-m, --module <name>\", \"Module name\")\n .option(\"--model <name>\", \"Module name (alias for --module)\")\n .option(\"-p, --path <path>\", \"Custom path for the router\")\n .action(generateCommand.router);\n\ngenerate\n .command(\"auth-configs\")\n .alias(\"a\")\n .description(\"Generate auth configuration\")\n .option(\"-m, --module <name>\", \"Module name\")\n .option(\"--model <name>\", \"Module name (alias for --module)\")\n .option(\"-p, --path <path>\", \"Custom path for the router\")\n .action(generateCommand.authConfigs);\n\ngenerate\n .command(\"query-options\")\n .alias(\"q\")\n .description(\"Generate prisma query options\")\n .option(\"-m, --module <name>\", \"Module name\")\n .option(\"--model <name>\", \"Module name (alias for --module)\")\n .option(\"-p, --path <path>\", \"Custom path for query options\")\n .action(generateCommand.queryOptions);\n\ngenerate\n .command(\"interceptors\")\n .alias(\"i\")\n .alias(\"middlewares\")\n .alias(\"m\")\n .description(\"Generate a new interceptors file\")\n .option(\"-m, --module <name>\", \"Module name\")\n .option(\"--model <name>\", \"Module name (alias for --module)\")\n .option(\"-p, --path <path>\", \"Custom path for interceptors\")\n .action(generateCommand.interceptors);\n\ngenerate\n .command(\"hooks\")\n .alias(\"h\")\n .description(\"Generate a new service hooks file\")\n\n .option(\"-m, --module <name>\", \"Module name\")\n .option(\"--model <name>\", \"Module name (alias for --module)\")\n .option(\"-p, --path <path>\", \"Custom path for hooks\")\n .action(generateCommand.hooks);\n\ngenerate\n .command(\"create-schema\")\n .alias(\"cs\")\n .description(\"Generate a new zod create schema file for a prisma model\")\n .option(\"-m, --module <name>\", \"Module name\")\n .option(\"--model <name>\", \"Module name (alias for --module)\")\n .option(\"-p, --path <path>\", \"Custom path for hooks\")\n .action(generateCommand.createSchema);\n\ngenerate\n .command(\"update-schema\")\n .alias(\"us\")\n .description(\"Generate a new zod update schema file for a prisma model\")\n .option(\"-m, --module <name>\", \"Module name\")\n .option(\"--model <name>\", \"Module name (alias for --module)\")\n .option(\"-p, --path <path>\", \"Custom path for hooks\")\n .action(generateCommand.updateSchema);\n\ngenerate\n .command(\"create-dto\")\n .alias(\"cd\")\n .description(\n \"Generate a new class-validator create dto file for a prisma model\"\n )\n .option(\"-m, --module <name>\", \"Module name\")\n .option(\"--model <name>\", \"Module name (alias for --module)\")\n .option(\"-p, --path <path>\", \"Custom path for hooks\")\n .action(generateCommand.createDto);\n\ngenerate\n .command(\"update-dto\")\n .alias(\"ud\")\n .description(\n \"Generate a new class-validator update dto file for a prisma model\"\n )\n .option(\"-m, --module <name>\", \"Module name\")\n .option(\"--model <name>\", \"Module name (alias for --module)\")\n .option(\"-p, --path <path>\", \"Custom path for hooks\")\n .action(generateCommand.updateDto);\n\nprogram\n .command(\"prisma\")\n .command(\"generate\")\n .description(\"Generate your @prisma/client and BaseService class types\")\n .action(prismaGenerateCommand);\n\nprogram\n .command(\"export\")\n .command(\"auth-action\")\n .description(\"Export file with an array containing all auth-actions\")\n .option(\"-o, --overwrite\", \"Overwrites all the changes on the object\")\n .option(\n \"-p, --path <path>\",\n \"Custom path for auth-actions\",\n \"src/modules/auth/utils\"\n )\n .action(exportAuthActionCommand);\n\nprogram.parse(process.argv);\n\nexport { program, buildCommand, devCommand, startCommand, generateCommand };\n"]}
@@ -19,6 +19,6 @@ function killServerChildProcess() {
19
19
  (0, start_1.killProductionServerChildProcess)();
20
20
  }
21
21
  function getVersion() {
22
- return "1.4.10-beta";
22
+ return "1.4.11-beta";
23
23
  }
24
24
  //# sourceMappingURL=cli.helpers.js.map
@@ -23,11 +23,36 @@ function generateCreateDtoTemplate(options) {
23
23
  const nestedDtoClasses = [];
24
24
  let dtoFields = [];
25
25
  for (const field of model.fields) {
26
- if (field.isId || restrictedFields.includes(field.name)) {
26
+ if (field.isId || restrictedFields.includes(field.name))
27
27
  continue;
28
- }
29
28
  const isForeignKey = model.fields.some((f) => f.foreignKeyField === field.name);
30
- if (isForeignKey) {
29
+ if (isForeignKey)
30
+ continue;
31
+ if (field.isCompositeType) {
32
+ const compositeType = prisma_schema_parser_1.default.compositeTypes.find((t) => t.name === field.type);
33
+ const compositeDtoName = `${field.type}ForCreate${modelName.pascal}Dto`;
34
+ validatorsUsed.add("ValidateNested");
35
+ transformersUsed.add("Type");
36
+ if (!nestedDtoClasses.find((c) => c.includes(`class ${compositeDtoName}`))) {
37
+ const nestedFields = compositeType.fields.map((f) => {
38
+ const { decorators, type } = generateClassValidatorField(f, false, validatorsUsed);
39
+ const mod = isTypeScript ? (f.isOptional ? "?" : "!") : "";
40
+ return `${decorators} ${f.name}${mod}: ${type};`;
41
+ });
42
+ nestedDtoClasses.push(`class ${compositeDtoName} {\n${nestedFields.join("\n\n")}\n}`);
43
+ }
44
+ const isOptional = field.isOptional || field.defaultValue !== undefined;
45
+ if (isOptional)
46
+ validatorsUsed.add("IsOptional");
47
+ const optDecorator = isOptional ? " @IsOptional()\n" : "";
48
+ const mod = isTypeScript ? (isOptional ? "?" : "!") : "";
49
+ const eachOpt = field.isArray ? "{ each: true }" : "";
50
+ const typeStr = field.isArray
51
+ ? `${compositeDtoName}[]`
52
+ : compositeDtoName;
53
+ if (field.isArray)
54
+ validatorsUsed.add("IsArray");
55
+ dtoFields.push(`${optDecorator}${field.isArray ? " @IsArray()\n" : ""} @ValidateNested(${eachOpt})\n @Type(() => ${compositeDtoName})\n ${field.name}${mod}: ${typeStr};`);
31
56
  continue;
32
57
  }
33
58
  if (field.isRelation) {
@@ -48,9 +73,8 @@ function generateCreateDtoTemplate(options) {
48
73
  }
49
74
  continue;
50
75
  }
51
- if (prisma_schema_parser_1.default.isEnum(field.type)) {
76
+ if (prisma_schema_parser_1.default.isEnum(field.type))
52
77
  enumsUsed.add(field.type);
53
- }
54
78
  const { decorators, type } = generateClassValidatorField(field, isUserModule, validatorsUsed);
55
79
  const isOptional = field.isOptional || field.defaultValue !== undefined;
56
80
  const typeModifier = isTypeScript ? (isOptional ? "?" : "!") : "";