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
@@ -49,7 +49,7 @@ function throwErrorIfApiActionIsInvalid(apiAction) {
49
49
  if (apiAction && !prismaOperations.includes(apiAction))
50
50
  throw new app_error_1.default(`Unknown value "${apiAction}" for apiAction field, available values are ${prismaOperations.join(", ")}.`, 400, "InvalidApiAction");
51
51
  }
52
- function handleRelationFieldsInBody(body, relationFields, ignoreActions = [], isRelation = false) {
52
+ function handleRelationFieldsInBody(body, relationFields, ignoreActions = [], isRelation = false, parentOperation = null) {
53
53
  body = JSON.parse(JSON.stringify(body));
54
54
  let mutableBody = { ...body };
55
55
  relationFields?.list?.forEach((field) => {
@@ -89,7 +89,7 @@ function handleRelationFieldsInBody(body, relationFields, ignoreActions = [], is
89
89
  let nestedRelations = getGroupedModelReations(field.type);
90
90
  let dataToPush = { ...bodyField };
91
91
  if (nestedRelations?.singular || nestedRelations?.list) {
92
- dataToPush = handleRelationFieldsInBody(dataToPush, nestedRelations, ignoreActions, true);
92
+ dataToPush = handleRelationFieldsInBody(dataToPush, nestedRelations, ignoreActions, true, "create");
93
93
  }
94
94
  if (dataToPush?.apiAction) {
95
95
  const { apiAction, ...rest } = dataToPush;
@@ -99,6 +99,12 @@ function handleRelationFieldsInBody(body, relationFields, ignoreActions = [], is
99
99
  createData.push(dataToPush);
100
100
  }
101
101
  else {
102
+ if (parentOperation === "create") {
103
+ const { apiAction, ...cleanedData } = bodyField;
104
+ throwErrorIfApiActionIsInvalid(apiAction);
105
+ connectData.push(cleanedData);
106
+ return;
107
+ }
102
108
  const { apiAction, ...data } = bodyField;
103
109
  let foreignKeyFieldName = bodyField?.id ? "id" : "";
104
110
  let foreignKeyFieldValue = bodyField?.id ? bodyField.id : "";
@@ -118,7 +124,7 @@ function handleRelationFieldsInBody(body, relationFields, ignoreActions = [], is
118
124
  let nestedRelations = getGroupedModelReations(field.type);
119
125
  let dataToPush = data;
120
126
  if (nestedRelations?.singular || nestedRelations?.list) {
121
- dataToPush = handleRelationFieldsInBody(data, nestedRelations, ignoreActions, true);
127
+ dataToPush = handleRelationFieldsInBody(data, nestedRelations, ignoreActions, true, "update");
122
128
  }
123
129
  updateData.push({
124
130
  where: { [foreignKeyFieldName]: foreignKeyFieldValue },
@@ -168,16 +174,22 @@ function handleRelationFieldsInBody(body, relationFields, ignoreActions = [], is
168
174
  dataToCreate = rest;
169
175
  }
170
176
  if (nestedRelations?.singular || nestedRelations?.list) {
171
- dataToCreate = handleRelationFieldsInBody(dataToCreate, nestedRelations, ignoreActions, true);
177
+ dataToCreate = handleRelationFieldsInBody(dataToCreate, nestedRelations, ignoreActions, true, "create");
172
178
  }
173
179
  mutableBody[field.name] = { create: dataToCreate };
174
180
  }
175
181
  else {
182
+ if (parentOperation === "create") {
183
+ const { apiAction, ...cleanedData } = relationData;
184
+ throwErrorIfApiActionIsInvalid(apiAction);
185
+ mutableBody[field.name] = { connect: cleanedData };
186
+ return;
187
+ }
176
188
  const { id, apiAction, ...data } = relationData;
177
189
  throwErrorIfApiActionIsInvalid(apiAction);
178
190
  let dataToUpdate = data;
179
191
  if (nestedRelations?.singular || nestedRelations?.list) {
180
- dataToUpdate = handleRelationFieldsInBody(data, nestedRelations, ignoreActions, true);
192
+ dataToUpdate = handleRelationFieldsInBody(data, nestedRelations, ignoreActions, true, "update");
181
193
  }
182
194
  mutableBody[field.name] = {
183
195
  update: {
@@ -1 +1 @@
1
- {"version":3,"file":"base.service.helpers.js","sourceRoot":"","sources":["../../../../../../src/modules/base/utils/helpers/base.service.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import prismaSchemaParser from \"../../../../utils/prisma/prisma-schema-parser\";\nimport { PrismaField } from \"../../../../utils/prisma/types\";\nimport AppError from \"../../../error-handler/utils/app-error\";\n\n/**\n * Removes apiAction field from an object and all nested objects\n *\n * @param {Record<string, any>} obj - The object to clean\n * @returns {Record<string, any>} - The cleaned object\n */\nexport function removeApiAction(obj: Record<string, any>): Record<string, any> {\n if (!obj || typeof obj !== \"object\") return obj;\n\n const result: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(obj)) {\n if (key === \"apiAction\") continue;\n\n if (Array.isArray(value)) {\n result[key] = value.map((item) =>\n typeof item === \"object\" && item !== null ? removeApiAction(item) : item\n );\n } else if (typeof value === \"object\" && value !== null) {\n result[key] = removeApiAction(value);\n } else {\n result[key] = value;\n }\n }\n\n return result;\n}\n\nconst prismaOperations = [\n \"create\",\n \"connect\",\n \"update\",\n \"delete\",\n \"disconnect\",\n \"deleteMany\",\n \"connectOrCreate\",\n \"upsert\",\n \"set\",\n];\n\n/**\n * Checks if an object is already formatted as a Prisma relation operation\n *\n * @param {Record<string, any>} obj - The object to check\n * @returns {boolean} - True if the object contains Prisma relation operations\n */\nexport function isPrismaRelationFormat(obj: Record<string, any>): boolean {\n if (!obj || typeof obj !== \"object\") return false;\n\n // Check if any key is a Prisma operation\n return prismaOperations.some((op) => obj?.[op]);\n}\n\nexport function throwErrorIfApiActionIsInvalid(apiAction: string) {\n if (apiAction && !prismaOperations.includes(apiAction))\n throw new AppError(\n `Unknown value \"${apiAction}\" for apiAction field, available values are ${prismaOperations.join(\", \")}.`,\n 400,\n \"InvalidApiAction\"\n );\n}\n\n/**\n * Determines the appropriate Prisma operation (`create`, `connect`, `update`, `delete`, or `disconnect`)\n * for each relation field in the provided body based on its nested data and recursively does the same for each relation field.\n *\n * This function handles the following types of relations:\n * - **One-to-one**\n * - **One-to-many**\n *\n *\n * ### Operation Rules:\n *\n *\n * - **Create**: Used when the nested relation data is provided **without an `id` or unique field**.\n * - **Connect**: Used when the nested relation data contains **only an `id` or a unique field** (e.g., email).\n * - **Update**: Used when the nested relation data contains **both an `id` and additional fields**.\n * - **Delete**: Used when the nested relation data includes **`apiAction: \"delete\"`**.\n * - **Disconnect**: Used when the nested relation data includes **`apiAction: \"disconnect\"`**.\n *\n * The function will preserve existing Prisma operation formats if detected,\n * allowing developers to manually structure relation operations when needed.\n *\n * @param {Record<string, any>} body - The object containing relation fields to be processed.\n * @param {ModelGroupRelationFields} relationFields - List of many-side relation field names (one-to-many).\n * @param {string[]} ignoreActions - Optional list of apiAction values to ignore.\n * @returns {Record<string, any>} The transformed data with appropriate Prisma operations applied.\n */\nexport function handleRelationFieldsInBody(\n body: Record<string, any>,\n relationFields: ModelGroupRelationFields,\n ignoreActions: string[] = [],\n isRelation: boolean = false\n): Record<string, any> {\n body = JSON.parse(JSON.stringify(body));\n let mutableBody = { ...body };\n\n relationFields?.list?.forEach((field) => {\n if (!body?.[field.name]) return;\n\n if (ignoreActions?.includes?.(body[field.name]?.apiAction)) {\n delete mutableBody[field.name];\n return;\n }\n\n if (isPrismaRelationFormat(body[field.name])) return;\n\n if (!Array.isArray(body[field.name])) return;\n\n const createData: any[] = [];\n const connectData: any[] = [];\n const updateData: any[] = [];\n const disconnectData: any[] = [];\n const deleteManyIds: any[] = [];\n\n body[field.name]?.forEach((bodyField: any) => {\n if (ignoreActions?.includes?.(bodyField?.apiAction)) return;\n\n const apiAction = bodyField?.apiAction;\n\n throwErrorIfApiActionIsInvalid(apiAction);\n\n if (apiAction === \"delete\") {\n deleteManyIds.push(bodyField.id);\n } else if (apiAction === \"disconnect\") {\n disconnectData.push({ id: bodyField.id });\n } else if (\n bodyField?.apiAction !== \"update\" &&\n canBeUsedToConnect(field.type, bodyField)\n ) {\n const { apiAction, ...cleanedData } = bodyField;\n\n throwErrorIfApiActionIsInvalid(apiAction);\n connectData.push(cleanedData);\n } else if (bodyField?.apiAction !== \"update\" && !bodyField?.id) {\n let nestedRelations = getGroupedModelReations(field.type);\n\n let dataToPush = { ...bodyField };\n\n if (nestedRelations?.singular || nestedRelations?.list) {\n dataToPush = handleRelationFieldsInBody(\n dataToPush,\n nestedRelations,\n ignoreActions,\n true\n );\n }\n\n if (dataToPush?.apiAction) {\n const { apiAction, ...rest } = dataToPush;\n\n throwErrorIfApiActionIsInvalid(apiAction);\n dataToPush = rest;\n }\n\n createData.push(dataToPush);\n } else {\n const { apiAction, ...data } = bodyField;\n let foreignKeyFieldName = bodyField?.id ? \"id\" : \"\";\n let foreignKeyFieldValue = bodyField?.id ? bodyField.id : \"\";\n\n if (!foreignKeyFieldName) {\n for (const [key, value] of Object.entries(data)) {\n if (canBeUsedToConnect(field.type, { [key]: value })) {\n foreignKeyFieldName = key;\n break;\n }\n }\n\n if (!foreignKeyFieldName)\n throw new AppError(\n \"No unique fields to be used in the prisma where clause\",\n 400,\n \"NoFieldToIsInPrismaWhereClause\",\n { data: body }\n );\n }\n\n foreignKeyFieldValue = data[foreignKeyFieldName];\n delete data[foreignKeyFieldName];\n\n throwErrorIfApiActionIsInvalid(apiAction);\n let nestedRelations = getGroupedModelReations(field.type);\n\n let dataToPush = data;\n if (nestedRelations?.singular || nestedRelations?.list) {\n dataToPush = handleRelationFieldsInBody(\n data,\n nestedRelations,\n ignoreActions,\n true\n );\n }\n\n updateData.push({\n where: { [foreignKeyFieldName]: foreignKeyFieldValue },\n data: dataToPush,\n });\n }\n });\n\n mutableBody[field.name] = {\n ...(createData.length ? { create: createData } : {}),\n ...(connectData.length ? { connect: connectData } : {}),\n ...(updateData.length ? { update: updateData } : {}),\n ...(disconnectData.length ? { disconnect: disconnectData } : {}),\n ...(deleteManyIds.length\n ? { deleteMany: { id: { in: deleteManyIds } } }\n : {}),\n };\n });\n\n relationFields?.singular?.forEach((field) => {\n if (!body?.[field.name]) return;\n\n if (ignoreActions?.includes?.(body[field.name]?.apiAction)) {\n delete mutableBody[field.name];\n return;\n }\n\n if (isPrismaRelationFormat(body[field.name])) {\n return;\n }\n\n const relationData = body[field.name];\n let nestedRelations = getGroupedModelReations(field.type);\n\n if (relationData?.apiAction === \"delete\") {\n mutableBody[field.name] = { delete: true };\n } else if (relationData?.apiAction === \"disconnect\") {\n mutableBody[field.name] = { disconnect: true };\n } else if (\n relationData?.apiAction !== \"update\" &&\n canBeUsedToConnect(field.type, relationData)\n ) {\n const { apiAction, ...cleanedData } = relationData;\n\n throwErrorIfApiActionIsInvalid(apiAction);\n\n mutableBody[field.name] = { connect: cleanedData };\n } else if (relationData?.apiAction !== \"update\" && !relationData?.id) {\n let dataToCreate = { ...relationData };\n\n if (dataToCreate?.apiAction) {\n const { apiAction, ...rest } = dataToCreate;\n throwErrorIfApiActionIsInvalid(apiAction);\n\n dataToCreate = rest;\n }\n\n if (nestedRelations?.singular || nestedRelations?.list) {\n dataToCreate = handleRelationFieldsInBody(\n dataToCreate,\n nestedRelations,\n ignoreActions,\n true\n );\n }\n\n mutableBody[field.name] = { create: dataToCreate };\n } else {\n // If ID and other fields, assume update operation\n const { id, apiAction, ...data } = relationData;\n\n throwErrorIfApiActionIsInvalid(apiAction);\n\n let dataToUpdate = data;\n if (nestedRelations?.singular || nestedRelations?.list) {\n dataToUpdate = handleRelationFieldsInBody(\n data,\n nestedRelations,\n ignoreActions,\n true\n );\n }\n\n mutableBody[field.name] = {\n update: {\n where: { id },\n data: dataToUpdate,\n },\n };\n }\n });\n\n if (mutableBody?.apiAction && !isRelation) {\n throw new AppError(\n \"Invalid usage of apiAction field, it must only be used on relation fields whether single or multiple.\",\n 400,\n {\n data: {\n ...body,\n },\n }\n );\n }\n\n // As a final step, recursively remove any remaining apiAction fields\n return removeApiAction(mutableBody);\n}\n\nexport type ModelGroupRelationFields = ReturnType<\n typeof getGroupedModelReations\n>;\n\nfunction getGroupedModelReations(modelName: string) {\n const relationsFields = prismaSchemaParser.getModelRelations(modelName);\n\n return {\n singular: relationsFields?.filter(\n (field) => field.isRelation && !field.isArray\n ),\n list: relationsFields?.filter((field) => field.isRelation && field.isArray),\n };\n}\n\n/**\n * Checks if a field value can be used to connect to a model\n * This happens when the field contains only an ID or a single unique field\n *\n * @param {string} modelName - The model name to get unique fields for\n * @param {Record<string, any>} bodyField - The field value from the body\n * @returns {boolean} True if the field can be used for a connect operation\n */\nexport function canBeUsedToConnect(\n modelName: string,\n bodyField: Record<string, any> | undefined | null\n): boolean {\n if (!bodyField) return false;\n\n if (bodyField.apiAction && ![\"connect\"]?.includes?.(bodyField.apiAction))\n return false;\n\n if (bodyField.apiAction === \"connect\") return true;\n\n if (Object.keys(bodyField)?.length === 1 && bodyField?.id) return true;\n\n const uniqueFields = prismaSchemaParser.getModelUniqueFields(modelName) || [];\n\n if (Object.keys(bodyField).length === 1 && uniqueFields?.length > 0) {\n const fieldName = Object.keys(bodyField)[0];\n return uniqueFields?.some((field: PrismaField) => field.name === fieldName);\n }\n\n return false;\n}\n"]}
1
+ {"version":3,"file":"base.service.helpers.js","sourceRoot":"","sources":["../../../../../../src/modules/base/utils/helpers/base.service.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import prismaSchemaParser from \"../../../../utils/prisma/prisma-schema-parser\";\nimport { PrismaField } from \"../../../../utils/prisma/types\";\nimport AppError from \"../../../error-handler/utils/app-error\";\n\n/**\n * Removes apiAction field from an object and all nested objects\n *\n * @param {Record<string, any>} obj - The object to clean\n * @returns {Record<string, any>} - The cleaned object\n */\nexport function removeApiAction(obj: Record<string, any>): Record<string, any> {\n if (!obj || typeof obj !== \"object\") return obj;\n\n const result: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(obj)) {\n if (key === \"apiAction\") continue;\n\n if (Array.isArray(value)) {\n result[key] = value.map((item) =>\n typeof item === \"object\" && item !== null ? removeApiAction(item) : item\n );\n } else if (typeof value === \"object\" && value !== null) {\n result[key] = removeApiAction(value);\n } else {\n result[key] = value;\n }\n }\n\n return result;\n}\n\nconst prismaOperations = [\n \"create\",\n \"connect\",\n \"update\",\n \"delete\",\n \"disconnect\",\n \"deleteMany\",\n \"connectOrCreate\",\n \"upsert\",\n \"set\",\n];\n\n/**\n * Checks if an object is already formatted as a Prisma relation operation\n *\n * @param {Record<string, any>} obj - The object to check\n * @returns {boolean} - True if the object contains Prisma relation operations\n */\nexport function isPrismaRelationFormat(obj: Record<string, any>): boolean {\n if (!obj || typeof obj !== \"object\") return false;\n\n // Check if any key is a Prisma operation\n return prismaOperations.some((op) => obj?.[op]);\n}\n\nexport function throwErrorIfApiActionIsInvalid(apiAction: string) {\n if (apiAction && !prismaOperations.includes(apiAction))\n throw new AppError(\n `Unknown value \"${apiAction}\" for apiAction field, available values are ${prismaOperations.join(\", \")}.`,\n 400,\n \"InvalidApiAction\"\n );\n}\n\n/**\n * Determines the appropriate Prisma operation (`create`, `connect`, `update`, `delete`, or `disconnect`)\n * for each relation field in the provided body based on its nested data and recursively does the same for each relation field.\n *\n * This function handles the following types of relations:\n * - **One-to-one**\n * - **One-to-many**\n *\n *\n * ### Operation Rules:\n *\n *\n * - **Create**: Used when the nested relation data is provided **without an `id` or unique field**.\n * - **Connect**: Used when the nested relation data contains **only an `id` or a unique field** (e.g., email).\n * - **Update**: Used when the nested relation data contains **both an `id` and additional fields**.\n * - **Delete**: Used when the nested relation data includes **`apiAction: \"delete\"`**.\n * - **Disconnect**: Used when the nested relation data includes **`apiAction: \"disconnect\"`**.\n *\n * The function will preserve existing Prisma operation formats if detected,\n * allowing developers to manually structure relation operations when needed.\n *\n * @param {Record<string, any>} body - The object containing relation fields to be processed.\n * @param {ModelGroupRelationFields} relationFields - List of many-side relation field names (one-to-many).\n * @param {string[]} ignoreActions - Optional list of apiAction values to ignore.\n * @returns {Record<string, any>} The transformed data with appropriate Prisma operations applied.\n */\nexport function handleRelationFieldsInBody(\n body: Record<string, any>,\n relationFields: ModelGroupRelationFields,\n ignoreActions: string[] = [],\n isRelation: boolean = false,\n parentOperation: \"create\" | \"update\" | null = null\n): Record<string, any> {\n body = JSON.parse(JSON.stringify(body));\n let mutableBody = { ...body };\n\n relationFields?.list?.forEach((field) => {\n if (!body?.[field.name]) return;\n\n if (ignoreActions?.includes?.(body[field.name]?.apiAction)) {\n delete mutableBody[field.name];\n return;\n }\n\n if (isPrismaRelationFormat(body[field.name])) return;\n\n if (!Array.isArray(body[field.name])) return;\n\n const createData: any[] = [];\n const connectData: any[] = [];\n const updateData: any[] = [];\n const disconnectData: any[] = [];\n const deleteManyIds: any[] = [];\n\n body[field.name]?.forEach((bodyField: any) => {\n if (ignoreActions?.includes?.(bodyField?.apiAction)) return;\n\n const apiAction = bodyField?.apiAction;\n\n throwErrorIfApiActionIsInvalid(apiAction);\n\n if (apiAction === \"delete\") {\n deleteManyIds.push(bodyField.id);\n } else if (apiAction === \"disconnect\") {\n disconnectData.push({ id: bodyField.id });\n } else if (\n bodyField?.apiAction !== \"update\" &&\n canBeUsedToConnect(field.type, bodyField)\n ) {\n const { apiAction, ...cleanedData } = bodyField;\n throwErrorIfApiActionIsInvalid(apiAction);\n connectData.push(cleanedData);\n } else if (bodyField?.apiAction !== \"update\" && !bodyField?.id) {\n let nestedRelations = getGroupedModelReations(field.type);\n let dataToPush = { ...bodyField };\n\n if (nestedRelations?.singular || nestedRelations?.list) {\n dataToPush = handleRelationFieldsInBody(\n dataToPush,\n nestedRelations,\n ignoreActions,\n true,\n \"create\"\n );\n }\n\n if (dataToPush?.apiAction) {\n const { apiAction, ...rest } = dataToPush;\n throwErrorIfApiActionIsInvalid(apiAction);\n dataToPush = rest;\n }\n\n createData.push(dataToPush);\n } else {\n if (parentOperation === \"create\") {\n const { apiAction, ...cleanedData } = bodyField;\n throwErrorIfApiActionIsInvalid(apiAction);\n connectData.push(cleanedData);\n return;\n }\n\n const { apiAction, ...data } = bodyField;\n let foreignKeyFieldName = bodyField?.id ? \"id\" : \"\";\n let foreignKeyFieldValue = bodyField?.id ? bodyField.id : \"\";\n\n if (!foreignKeyFieldName) {\n for (const [key, value] of Object.entries(data)) {\n if (canBeUsedToConnect(field.type, { [key]: value })) {\n foreignKeyFieldName = key;\n break;\n }\n }\n\n if (!foreignKeyFieldName)\n throw new AppError(\n \"No unique fields to be used in the prisma where clause\",\n 400,\n \"NoFieldToIsInPrismaWhereClause\",\n { data: body }\n );\n }\n\n foreignKeyFieldValue = data[foreignKeyFieldName];\n delete data[foreignKeyFieldName];\n\n throwErrorIfApiActionIsInvalid(apiAction);\n let nestedRelations = getGroupedModelReations(field.type);\n\n let dataToPush = data;\n if (nestedRelations?.singular || nestedRelations?.list) {\n dataToPush = handleRelationFieldsInBody(\n data,\n nestedRelations,\n ignoreActions,\n true,\n \"update\"\n );\n }\n\n updateData.push({\n where: { [foreignKeyFieldName]: foreignKeyFieldValue },\n data: dataToPush,\n });\n }\n });\n\n mutableBody[field.name] = {\n ...(createData.length ? { create: createData } : {}),\n ...(connectData.length ? { connect: connectData } : {}),\n ...(updateData.length ? { update: updateData } : {}),\n ...(disconnectData.length ? { disconnect: disconnectData } : {}),\n ...(deleteManyIds.length\n ? { deleteMany: { id: { in: deleteManyIds } } }\n : {}),\n };\n });\n\n relationFields?.singular?.forEach((field) => {\n if (!body?.[field.name]) return;\n\n if (ignoreActions?.includes?.(body[field.name]?.apiAction)) {\n delete mutableBody[field.name];\n return;\n }\n\n if (isPrismaRelationFormat(body[field.name])) {\n return;\n }\n\n const relationData = body[field.name];\n let nestedRelations = getGroupedModelReations(field.type);\n\n if (relationData?.apiAction === \"delete\") {\n mutableBody[field.name] = { delete: true };\n } else if (relationData?.apiAction === \"disconnect\") {\n mutableBody[field.name] = { disconnect: true };\n } else if (\n relationData?.apiAction !== \"update\" &&\n canBeUsedToConnect(field.type, relationData)\n ) {\n const { apiAction, ...cleanedData } = relationData;\n throwErrorIfApiActionIsInvalid(apiAction);\n mutableBody[field.name] = { connect: cleanedData };\n } else if (relationData?.apiAction !== \"update\" && !relationData?.id) {\n let dataToCreate = { ...relationData };\n\n if (dataToCreate?.apiAction) {\n const { apiAction, ...rest } = dataToCreate;\n throwErrorIfApiActionIsInvalid(apiAction);\n dataToCreate = rest;\n }\n\n if (nestedRelations?.singular || nestedRelations?.list) {\n dataToCreate = handleRelationFieldsInBody(\n dataToCreate,\n nestedRelations,\n ignoreActions,\n true,\n \"create\"\n );\n }\n\n mutableBody[field.name] = { create: dataToCreate };\n } else {\n if (parentOperation === \"create\") {\n const { apiAction, ...cleanedData } = relationData;\n throwErrorIfApiActionIsInvalid(apiAction);\n mutableBody[field.name] = { connect: cleanedData };\n return;\n }\n\n const { id, apiAction, ...data } = relationData;\n throwErrorIfApiActionIsInvalid(apiAction);\n\n let dataToUpdate = data;\n if (nestedRelations?.singular || nestedRelations?.list) {\n dataToUpdate = handleRelationFieldsInBody(\n data,\n nestedRelations,\n ignoreActions,\n true,\n \"update\"\n );\n }\n\n mutableBody[field.name] = {\n update: {\n where: { id },\n data: dataToUpdate,\n },\n };\n }\n });\n\n if (mutableBody?.apiAction && !isRelation) {\n throw new AppError(\n \"Invalid usage of apiAction field, it must only be used on relation fields whether single or multiple.\",\n 400,\n {\n data: {\n ...body,\n },\n }\n );\n }\n\n return removeApiAction(mutableBody);\n}\n\nexport type ModelGroupRelationFields = ReturnType<\n typeof getGroupedModelReations\n>;\n\nfunction getGroupedModelReations(modelName: string) {\n const relationsFields = prismaSchemaParser.getModelRelations(modelName);\n\n return {\n singular: relationsFields?.filter(\n (field) => field.isRelation && !field.isArray\n ),\n list: relationsFields?.filter((field) => field.isRelation && field.isArray),\n };\n}\n\n/**\n * Checks if a field value can be used to connect to a model\n * This happens when the field contains only an ID or a single unique field\n *\n * @param {string} modelName - The model name to get unique fields for\n * @param {Record<string, any>} bodyField - The field value from the body\n * @returns {boolean} True if the field can be used for a connect operation\n */\nexport function canBeUsedToConnect(\n modelName: string,\n bodyField: Record<string, any> | undefined | null\n): boolean {\n if (!bodyField) return false;\n\n if (bodyField.apiAction && ![\"connect\"]?.includes?.(bodyField.apiAction))\n return false;\n\n if (bodyField.apiAction === \"connect\") return true;\n\n if (Object.keys(bodyField)?.length === 1 && bodyField?.id) return true;\n\n const uniqueFields = prismaSchemaParser.getModelUniqueFields(modelName) || [];\n\n if (Object.keys(bodyField).length === 1 && uniqueFields?.length > 0) {\n const fieldName = Object.keys(bodyField)[0];\n return uniqueFields?.some((field: PrismaField) => field.name === fieldName);\n }\n\n return false;\n}\n"]}
@@ -0,0 +1,443 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const prisma_1 = require("../../../exports/prisma/index.js");
7
+ const utils_1 = require("../../../exports/utils/index.js");
8
+ const arkos_config_helpers_1 = require("../../../utils/helpers/arkos-config.helpers.js");
9
+ const text_helpers_1 = require("../../../utils/helpers/text.helpers.js");
10
+ const prisma_json_schema_generator_1 = __importDefault(require("../../../utils/prisma/prisma-json-schema-generator.js"));
11
+ const pluralize_1 = __importDefault(require("pluralize"));
12
+ class ModelOpenAPIGenerator {
13
+ getModel(modelName) {
14
+ return prisma_1.prismaSchemaParser.models.find((m) => (0, utils_1.kebabCase)(m.name) === (0, utils_1.kebabCase)(modelName));
15
+ }
16
+ getAuthErrorResponses() {
17
+ if (!(0, arkos_config_helpers_1.isAuthenticationEnabled)())
18
+ return {};
19
+ return {
20
+ "401": { description: "Authentication required" },
21
+ "403": { description: "Insufficient permissions" },
22
+ };
23
+ }
24
+ resolvePrismaQueryOptions(prismaQueryOptions, action) {
25
+ if (!prismaQueryOptions)
26
+ return {};
27
+ const options = prismaQueryOptions;
28
+ let merged = options.queryOptions || {};
29
+ if (options.global)
30
+ merged = { ...merged, ...options.global };
31
+ const actionMap = {
32
+ find: ["findOne", "findMany"],
33
+ create: ["createOne", "createMany"],
34
+ update: ["updateOne", "updateMany"],
35
+ delete: ["deleteOne", "deleteMany"],
36
+ save: ["createOne", "createMany", "updateOne", "updateMany"],
37
+ saveOne: ["createOne", "updateOne"],
38
+ saveMany: ["createMany", "updateMany"],
39
+ };
40
+ for (const [key, actions] of Object.entries(actionMap)) {
41
+ if (actions.includes(action) && options[key])
42
+ merged = { ...merged, ...options[key] };
43
+ }
44
+ if (options[action])
45
+ merged = { ...merged, ...options[action] };
46
+ return merged;
47
+ }
48
+ getOpenApiConfig(endpointRouterConfig = {}, endpoint, modelNameInKebab, prismaQueryOptions) {
49
+ const existingOpenApi = endpointRouterConfig?.experimental?.openapi || {};
50
+ const hasBodyValidation = typeof endpointRouterConfig?.validation !== "boolean" &&
51
+ !!endpointRouterConfig?.validation?.body;
52
+ const hasQueryValidation = typeof endpointRouterConfig?.validation !== "boolean" &&
53
+ !!endpointRouterConfig?.validation?.query;
54
+ const hasParamsValidation = typeof endpointRouterConfig?.validation !== "boolean" &&
55
+ !!endpointRouterConfig?.validation?.params;
56
+ const model = this.getModel(modelNameInKebab);
57
+ const pascalModelName = (0, utils_1.pascalCase)(modelNameInKebab);
58
+ const humanReadableName = modelNameInKebab.replaceAll("-", " ");
59
+ const humanReadableNamePlural = pluralize_1.default.plural(humanReadableName);
60
+ const authErrors = this.getAuthErrorResponses();
61
+ switch (endpoint) {
62
+ case "createOne":
63
+ return {
64
+ ...existingOpenApi,
65
+ tags: [
66
+ (0, text_helpers_1.capitalize)(humanReadableNamePlural),
67
+ ...(existingOpenApi?.tags || []),
68
+ ].filter((tag) => tag !== "Defaults"),
69
+ summary: existingOpenApi?.summary || `Create a new ${humanReadableName}`,
70
+ description: existingOpenApi?.description ||
71
+ `Creates a new ${humanReadableName} record in the system`,
72
+ operationId: existingOpenApi?.operationId || `create${pascalModelName}`,
73
+ security: existingOpenApi?.security || [{ BearerAuth: [] }],
74
+ ...(!hasBodyValidation && {
75
+ requestBody: existingOpenApi?.requestBody || {
76
+ description: `${humanReadableName} data to create`,
77
+ required: true,
78
+ content: {
79
+ "application/json": {
80
+ schema: prisma_json_schema_generator_1.default.generateCreateSchema(model),
81
+ },
82
+ },
83
+ },
84
+ }),
85
+ responses: {
86
+ ...(existingOpenApi?.responses || {}),
87
+ "201": existingOpenApi?.responses?.["201"] || {
88
+ description: `${humanReadableName} created successfully`,
89
+ content: {
90
+ "application/json": {
91
+ schema: prisma_json_schema_generator_1.default.generateResponseSchema(model, this.resolvePrismaQueryOptions(prismaQueryOptions, "createOne")),
92
+ },
93
+ },
94
+ },
95
+ "400": existingOpenApi?.responses?.["400"] || {
96
+ description: "Invalid input data provided",
97
+ },
98
+ ...authErrors,
99
+ },
100
+ };
101
+ case "findMany":
102
+ return {
103
+ ...existingOpenApi,
104
+ tags: [
105
+ (0, text_helpers_1.capitalize)(humanReadableNamePlural),
106
+ ...(existingOpenApi?.tags || []),
107
+ ].filter((tag) => tag !== "Defaults"),
108
+ summary: existingOpenApi?.summary || `Get ${humanReadableNamePlural}`,
109
+ description: existingOpenApi?.description ||
110
+ `Retrieves a paginated list of ${humanReadableNamePlural} with optional filtering and sorting`,
111
+ operationId: existingOpenApi?.operationId ||
112
+ `find${pluralize_1.default.plural(pascalModelName)}`,
113
+ security: existingOpenApi?.security || [{ BearerAuth: [] }],
114
+ parameters: [
115
+ ...(existingOpenApi?.parameters || []),
116
+ ...(!hasQueryValidation
117
+ ? prisma_json_schema_generator_1.default.generateQueryFilterParameters(model)
118
+ : []).filter((p) => !(existingOpenApi?.parameters || []).find((ep) => ep.name === p.name && ep.in === p.in)),
119
+ ],
120
+ responses: {
121
+ ...(existingOpenApi?.responses || {}),
122
+ "200": existingOpenApi?.responses?.["200"] || {
123
+ description: `List of ${humanReadableNamePlural} retrieved successfully`,
124
+ content: {
125
+ "application/json": {
126
+ schema: {
127
+ type: "object",
128
+ properties: {
129
+ total: {
130
+ type: "integer",
131
+ description: "Total number of records matching the criteria",
132
+ },
133
+ results: {
134
+ type: "integer",
135
+ description: "Number of records returned in current page",
136
+ },
137
+ data: {
138
+ type: "array",
139
+ items: prisma_json_schema_generator_1.default.generateResponseSchema(model, this.resolvePrismaQueryOptions(prismaQueryOptions, "findMany")),
140
+ },
141
+ },
142
+ },
143
+ },
144
+ },
145
+ },
146
+ ...authErrors,
147
+ },
148
+ };
149
+ case "createMany":
150
+ return {
151
+ ...existingOpenApi,
152
+ tags: [
153
+ (0, text_helpers_1.capitalize)(humanReadableNamePlural),
154
+ ...(existingOpenApi?.tags || []),
155
+ ].filter((tag) => tag !== "Defaults"),
156
+ summary: existingOpenApi?.summary ||
157
+ `Create multiple ${humanReadableNamePlural}`,
158
+ description: existingOpenApi?.description ||
159
+ `Creates multiple ${humanReadableNamePlural} records in a single batch operation`,
160
+ operationId: existingOpenApi?.operationId || `createMany${pascalModelName}`,
161
+ security: existingOpenApi?.security || [{ BearerAuth: [] }],
162
+ ...(!hasBodyValidation && {
163
+ requestBody: existingOpenApi?.requestBody || {
164
+ description: `Array of ${humanReadableName} data to create`,
165
+ required: true,
166
+ content: {
167
+ "application/json": {
168
+ schema: {
169
+ type: "array",
170
+ items: prisma_json_schema_generator_1.default.generateCreateSchema(model),
171
+ },
172
+ },
173
+ },
174
+ },
175
+ }),
176
+ responses: {
177
+ ...(existingOpenApi?.responses || {}),
178
+ "201": existingOpenApi?.responses?.["201"] || {
179
+ description: `${humanReadableNamePlural} created successfully`,
180
+ content: {
181
+ "application/json": {
182
+ schema: {
183
+ type: "object",
184
+ properties: {
185
+ count: {
186
+ type: "integer",
187
+ description: "Number of records created",
188
+ },
189
+ },
190
+ },
191
+ },
192
+ },
193
+ },
194
+ "400": existingOpenApi?.responses?.["400"] || {
195
+ description: "Invalid input data provided",
196
+ },
197
+ ...authErrors,
198
+ },
199
+ };
200
+ case "updateMany":
201
+ return {
202
+ ...existingOpenApi,
203
+ tags: [
204
+ (0, text_helpers_1.capitalize)(humanReadableNamePlural),
205
+ ...(existingOpenApi?.tags || []),
206
+ ].filter((tag) => tag !== "Defaults"),
207
+ summary: existingOpenApi?.summary ||
208
+ `Update multiple ${humanReadableNamePlural}`,
209
+ description: existingOpenApi?.description ||
210
+ `Updates multiple ${humanReadableNamePlural} records that match the specified filter criteria`,
211
+ operationId: existingOpenApi?.operationId || `updateMany${pascalModelName}`,
212
+ parameters: [
213
+ ...(existingOpenApi?.parameters || []),
214
+ ...(!hasQueryValidation
215
+ ? prisma_json_schema_generator_1.default.generateQueryFilterParameters(model, {
216
+ modelFieldsOnly: true,
217
+ })
218
+ : []).filter((p) => !(existingOpenApi?.parameters || []).find((ep) => ep.name === p.name && ep.in === p.in)),
219
+ ],
220
+ security: existingOpenApi?.security || [{ BearerAuth: [] }],
221
+ ...(!hasBodyValidation && {
222
+ requestBody: existingOpenApi?.requestBody || {
223
+ description: `Partial ${humanReadableName} data to update`,
224
+ required: true,
225
+ content: {
226
+ "application/json": {
227
+ schema: prisma_json_schema_generator_1.default.generateUpdateSchema(model),
228
+ },
229
+ },
230
+ },
231
+ }),
232
+ responses: {
233
+ ...(existingOpenApi?.responses || {}),
234
+ "200": existingOpenApi?.responses?.["200"] || {
235
+ description: `${humanReadableNamePlural} updated successfully`,
236
+ content: {
237
+ "application/json": {
238
+ schema: {
239
+ type: "object",
240
+ properties: {
241
+ count: {
242
+ type: "integer",
243
+ description: "Number of records updated",
244
+ },
245
+ },
246
+ },
247
+ },
248
+ },
249
+ },
250
+ "400": existingOpenApi?.responses?.["400"] || {
251
+ description: "Invalid input data or missing filter criteria",
252
+ },
253
+ ...authErrors,
254
+ },
255
+ };
256
+ case "deleteMany":
257
+ return {
258
+ ...existingOpenApi,
259
+ tags: [
260
+ (0, text_helpers_1.capitalize)(humanReadableNamePlural),
261
+ ...(existingOpenApi?.tags || []),
262
+ ].filter((tag) => tag !== "Defaults"),
263
+ summary: existingOpenApi?.summary ||
264
+ `Delete multiple ${humanReadableNamePlural}`,
265
+ description: existingOpenApi?.description ||
266
+ `Deletes multiple ${humanReadableNamePlural} records that match the specified filter criteria`,
267
+ operationId: existingOpenApi?.operationId || `deleteMany${pascalModelName}`,
268
+ parameters: [
269
+ ...(existingOpenApi?.parameters || []),
270
+ ...(!hasQueryValidation
271
+ ? prisma_json_schema_generator_1.default.generateQueryFilterParameters(model, {
272
+ modelFieldsOnly: true,
273
+ })
274
+ : []).filter((p) => !(existingOpenApi?.parameters || []).find((ep) => ep.name === p.name && ep.in === p.in)),
275
+ ],
276
+ security: existingOpenApi?.security || [{ BearerAuth: [] }],
277
+ responses: {
278
+ ...(existingOpenApi?.responses || {}),
279
+ "200": existingOpenApi?.responses?.["200"] || {
280
+ description: `${humanReadableNamePlural} deleted successfully`,
281
+ content: {
282
+ "application/json": {
283
+ schema: {
284
+ type: "object",
285
+ properties: {
286
+ count: {
287
+ type: "integer",
288
+ description: "Number of records deleted",
289
+ },
290
+ },
291
+ },
292
+ },
293
+ },
294
+ },
295
+ "400": existingOpenApi?.responses?.["400"] || {
296
+ description: "Missing filter criteria",
297
+ },
298
+ ...authErrors,
299
+ },
300
+ };
301
+ case "findOne":
302
+ return {
303
+ ...existingOpenApi,
304
+ tags: [
305
+ (0, text_helpers_1.capitalize)(humanReadableNamePlural),
306
+ ...(existingOpenApi?.tags || []),
307
+ ].filter((tag) => tag !== "Defaults"),
308
+ summary: existingOpenApi?.summary || `Get ${humanReadableName} by ID`,
309
+ description: existingOpenApi?.description ||
310
+ `Retrieves a single ${humanReadableName} record by its unique identifier`,
311
+ operationId: existingOpenApi?.operationId || `find${pascalModelName}ById`,
312
+ security: existingOpenApi?.security || [{ BearerAuth: [] }],
313
+ parameters: [
314
+ ...(existingOpenApi?.parameters || []),
315
+ ...(!hasParamsValidation
316
+ ? [
317
+ {
318
+ name: "id",
319
+ in: "path",
320
+ description: `Unique identifier of the ${humanReadableName}`,
321
+ required: true,
322
+ schema: { type: "string" },
323
+ },
324
+ ]
325
+ : []).filter((p) => !(existingOpenApi?.parameters || []).find((ep) => ep.name === p.name && ep.in === p.in)),
326
+ ],
327
+ responses: {
328
+ ...(existingOpenApi?.responses || {}),
329
+ "200": existingOpenApi?.responses?.["200"] || {
330
+ description: `${humanReadableName} retrieved successfully`,
331
+ content: {
332
+ "application/json": {
333
+ schema: prisma_json_schema_generator_1.default.generateResponseSchema(model, this.resolvePrismaQueryOptions(prismaQueryOptions, "findOne")),
334
+ },
335
+ },
336
+ },
337
+ ...authErrors,
338
+ "404": existingOpenApi?.responses?.["404"] || {
339
+ description: `${humanReadableName} not found`,
340
+ },
341
+ },
342
+ };
343
+ case "updateOne":
344
+ return {
345
+ ...existingOpenApi,
346
+ tags: [
347
+ (0, text_helpers_1.capitalize)(humanReadableNamePlural),
348
+ ...(existingOpenApi?.tags || []),
349
+ ].filter((tag) => tag !== "Defaults"),
350
+ summary: existingOpenApi?.summary || `Update ${humanReadableName} by ID`,
351
+ description: existingOpenApi?.description ||
352
+ `Updates a single ${humanReadableName} record by its unique identifier`,
353
+ operationId: existingOpenApi?.operationId || `update${pascalModelName}`,
354
+ security: existingOpenApi?.security || [{ BearerAuth: [] }],
355
+ parameters: [
356
+ ...(existingOpenApi?.parameters || []),
357
+ ...(!hasParamsValidation
358
+ ? [
359
+ {
360
+ name: "id",
361
+ in: "path",
362
+ description: `Unique identifier of the ${humanReadableName}`,
363
+ required: true,
364
+ schema: { type: "string" },
365
+ },
366
+ ]
367
+ : []).filter((p) => !(existingOpenApi?.parameters || []).find((ep) => ep.name === p.name && ep.in === p.in)),
368
+ ],
369
+ ...(!hasBodyValidation && {
370
+ requestBody: existingOpenApi?.requestBody || {
371
+ description: `Partial ${humanReadableName} data to update`,
372
+ required: true,
373
+ content: {
374
+ "application/json": {
375
+ schema: prisma_json_schema_generator_1.default.generateUpdateSchema(model),
376
+ },
377
+ },
378
+ },
379
+ }),
380
+ responses: {
381
+ ...(existingOpenApi?.responses || {}),
382
+ "200": existingOpenApi?.responses?.["200"] || {
383
+ description: `${humanReadableName} updated successfully`,
384
+ content: {
385
+ "application/json": {
386
+ schema: prisma_json_schema_generator_1.default.generateResponseSchema(model, this.resolvePrismaQueryOptions(prismaQueryOptions, "updateOne")),
387
+ },
388
+ },
389
+ },
390
+ "400": existingOpenApi?.responses?.["400"] || {
391
+ description: "Invalid input data provided",
392
+ },
393
+ ...authErrors,
394
+ "404": existingOpenApi?.responses?.["404"] || {
395
+ description: `${humanReadableName} not found`,
396
+ },
397
+ },
398
+ };
399
+ case "deleteOne":
400
+ return {
401
+ ...existingOpenApi,
402
+ tags: [
403
+ (0, text_helpers_1.capitalize)(humanReadableNamePlural),
404
+ ...(existingOpenApi?.tags || []),
405
+ ].filter((tag) => tag !== "Defaults"),
406
+ summary: existingOpenApi?.summary || `Delete ${humanReadableName} by ID`,
407
+ description: existingOpenApi?.description ||
408
+ `Permanently deletes a single ${humanReadableName} record by its unique identifier`,
409
+ operationId: existingOpenApi?.operationId || `delete${pascalModelName}`,
410
+ security: existingOpenApi?.security || [{ BearerAuth: [] }],
411
+ parameters: [
412
+ ...(existingOpenApi?.parameters || []),
413
+ ...(!hasParamsValidation
414
+ ? [
415
+ {
416
+ name: "id",
417
+ in: "path",
418
+ description: `Unique identifier of the ${humanReadableName}`,
419
+ required: true,
420
+ schema: { type: "string" },
421
+ },
422
+ ]
423
+ : []).filter((p) => !(existingOpenApi?.parameters || []).find((ep) => ep.name === p.name && ep.in === p.in)),
424
+ ],
425
+ responses: {
426
+ ...(existingOpenApi?.responses || {}),
427
+ "204": existingOpenApi?.responses?.["204"] || {
428
+ description: `${humanReadableName} deleted successfully`,
429
+ },
430
+ ...authErrors,
431
+ "404": existingOpenApi?.responses?.["404"] || {
432
+ description: `${humanReadableName} not found`,
433
+ },
434
+ },
435
+ };
436
+ default:
437
+ return {};
438
+ }
439
+ }
440
+ }
441
+ const modelOpenAPIGenerator = new ModelOpenAPIGenerator();
442
+ exports.default = modelOpenAPIGenerator;
443
+ //# sourceMappingURL=model-openapi-generator.js.map