arkos 1.2.32-test → 1.3.0-canary.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (345) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/app.js +1 -1
  3. package/dist/cjs/app.js.map +1 -1
  4. package/dist/cjs/exports/auth/index.js +1 -6
  5. package/dist/cjs/exports/controllers/index.js +1 -11
  6. package/dist/cjs/exports/error-handler/index.js +1 -11
  7. package/dist/cjs/exports/index.js +1 -12
  8. package/dist/cjs/exports/middlewares/index.js +1 -7
  9. package/dist/cjs/exports/prisma/index.js +1 -6
  10. package/dist/cjs/exports/prisma/index.js.map +1 -1
  11. package/dist/cjs/exports/services/index.js +1 -49
  12. package/dist/cjs/exports/services/index.js.map +1 -1
  13. package/dist/cjs/exports/utils/index.js +1 -44
  14. package/dist/cjs/exports/validation/index.js +1 -11
  15. package/dist/cjs/modules/auth/auth.controller.js +1 -194
  16. package/dist/cjs/modules/auth/auth.controller.js.map +1 -1
  17. package/dist/cjs/modules/auth/auth.router.js +1 -50
  18. package/dist/cjs/modules/auth/auth.router.js.map +1 -1
  19. package/dist/cjs/modules/auth/auth.service.js +2 -185
  20. package/dist/cjs/modules/auth/auth.service.js.map +1 -1
  21. package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +1 -83
  22. package/dist/cjs/modules/base/base.controller.js +1 -158
  23. package/dist/cjs/modules/base/base.controller.js.map +1 -1
  24. package/dist/cjs/modules/base/base.middlewares.js +1 -92
  25. package/dist/cjs/modules/base/base.middlewares.js.map +1 -1
  26. package/dist/cjs/modules/base/base.router.js +1 -24
  27. package/dist/cjs/modules/base/base.router.js.map +1 -1
  28. package/dist/cjs/modules/base/base.service.js +1 -128
  29. package/dist/cjs/modules/base/base.service.js.map +1 -1
  30. package/dist/cjs/modules/base/types/base.service.types.js +1 -0
  31. package/dist/cjs/modules/base/types/base.service.types.js.map +1 -0
  32. package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js +1 -82
  33. package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js.map +1 -1
  34. package/dist/cjs/modules/base/utils/helpers/base.middlewares.helpers.js +1 -50
  35. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +1 -97
  36. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
  37. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +1 -171
  38. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
  39. package/dist/cjs/modules/base/utils/service-hooks-manager.js +1 -0
  40. package/dist/cjs/modules/base/utils/service-hooks-manager.js.map +1 -0
  41. package/dist/cjs/modules/email/email.service.js +1 -104
  42. package/dist/cjs/modules/error-handler/error-handler.controller.js +4 -146
  43. package/dist/cjs/modules/error-handler/error-handler.controller.js.map +1 -1
  44. package/dist/cjs/modules/error-handler/utils/app-error.js +1 -17
  45. package/dist/cjs/modules/error-handler/utils/catch-async.js +1 -12
  46. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +3 -201
  47. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
  48. package/dist/cjs/modules/file-upload/file-upload.controller.js +1 -271
  49. package/dist/cjs/modules/file-upload/file-upload.controller.js.map +1 -1
  50. package/dist/cjs/modules/file-upload/file-upload.router.js +1 -44
  51. package/dist/cjs/modules/file-upload/file-upload.router.js.map +1 -1
  52. package/dist/cjs/modules/file-upload/file-upload.service.js +1 -322
  53. package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js +1 -97
  54. package/dist/cjs/modules/swagger/swagger.router.js +1 -99
  55. package/dist/cjs/modules/swagger/swagger.router.js.map +1 -1
  56. package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +1 -250
  57. package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +1 -1
  58. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js +1 -0
  59. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js.map +1 -0
  60. package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js +1 -66
  61. package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +1 -1
  62. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -41
  63. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -1
  64. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -22
  65. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +1 -1
  66. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +1 -0
  67. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js.map +1 -0
  68. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +1 -0
  69. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js.map +1 -0
  70. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +1 -0
  71. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js.map +1 -0
  72. package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +1 -0
  73. package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -0
  74. package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js +1 -94
  75. package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -1
  76. package/dist/cjs/package.json +3 -0
  77. package/dist/cjs/server.js +4 -2
  78. package/dist/cjs/server.js.map +1 -1
  79. package/dist/cjs/types/arkos-config.js +1 -3
  80. package/dist/cjs/types/arkos-config.js.map +1 -1
  81. package/dist/cjs/types/auth.js +1 -3
  82. package/dist/cjs/types/index.js +1 -11
  83. package/dist/cjs/types/index.js.map +1 -1
  84. package/dist/cjs/types/router-config.js +1 -3
  85. package/dist/cjs/utils/arkos-env.js +1 -9
  86. package/dist/cjs/utils/cli/build.js +5 -212
  87. package/dist/cjs/utils/cli/build.js.map +1 -1
  88. package/dist/cjs/utils/cli/dev.js +5 -256
  89. package/dist/cjs/utils/cli/dev.js.map +1 -1
  90. package/dist/cjs/utils/cli/generate.js +12 -189
  91. package/dist/cjs/utils/cli/generate.js.map +1 -1
  92. package/dist/cjs/utils/cli/index.js +1 -81
  93. package/dist/cjs/utils/cli/index.js.map +1 -1
  94. package/dist/cjs/utils/cli/start.js +1 -93
  95. package/dist/cjs/utils/cli/start.js.map +1 -1
  96. package/dist/cjs/utils/cli/utils/cli.helpers.js +1 -24
  97. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +5 -20
  98. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js +9 -18
  99. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +1 -1
  100. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js +174 -101
  101. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +1 -1
  102. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +9 -37
  103. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +1 -1
  104. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js +11 -36
  105. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js.map +1 -1
  106. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js +7 -28
  107. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js.map +1 -1
  108. package/dist/cjs/utils/cli/utils/template-generators.js +2 -28
  109. package/dist/cjs/utils/cli/utils/template-generators.js.map +1 -1
  110. package/dist/cjs/utils/cli/utils/watermark-stamper.js +3 -0
  111. package/dist/cjs/utils/cli/utils/watermark-stamper.js.map +1 -0
  112. package/dist/cjs/utils/dotenv.helpers.js +1 -43
  113. package/dist/cjs/utils/dynamic-loader.js +11 -0
  114. package/dist/cjs/utils/dynamic-loader.js.map +1 -0
  115. package/dist/cjs/utils/features/api.features.js +1 -167
  116. package/dist/cjs/utils/features/api.features.js.map +1 -1
  117. package/dist/cjs/utils/features/change-case.features.js +1 -67
  118. package/dist/cjs/utils/features/port-and-host-allocator.js +1 -0
  119. package/dist/cjs/utils/features/port-and-host-allocator.js.map +1 -0
  120. package/dist/cjs/utils/helpers/api.features.helpers.js +1 -106
  121. package/dist/cjs/utils/helpers/api.features.helpers.js.map +1 -1
  122. package/dist/cjs/utils/helpers/change-case.helpers.js +1 -177
  123. package/dist/cjs/utils/helpers/deepmerge.helper.js +1 -115
  124. package/dist/cjs/utils/helpers/dynamic-loader.helpers.js +1 -0
  125. package/dist/cjs/utils/helpers/dynamic-loader.helpers.js.map +1 -0
  126. package/dist/cjs/utils/helpers/fs.helpers.js +1 -61
  127. package/dist/cjs/utils/helpers/fs.helpers.js.map +1 -1
  128. package/dist/cjs/utils/helpers/global.helpers.js +1 -89
  129. package/dist/cjs/utils/helpers/global.helpers.js.map +1 -1
  130. package/dist/cjs/utils/helpers/prisma.helpers.js +1 -52
  131. package/dist/cjs/utils/helpers/prisma.helpers.js.map +1 -1
  132. package/dist/cjs/utils/helpers/query-parser.helpers.js +1 -45
  133. package/dist/cjs/utils/helpers/routers.helpers.js +1 -21
  134. package/dist/cjs/utils/helpers/routers.helpers.js.map +1 -1
  135. package/dist/cjs/utils/helpers/text.helpers.js +1 -28
  136. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +1 -0
  137. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js.map +1 -0
  138. package/dist/cjs/utils/prisma/prisma-schema-parser.js +3 -0
  139. package/dist/cjs/utils/prisma/prisma-schema-parser.js.map +1 -0
  140. package/dist/cjs/utils/prisma/types.js +1 -0
  141. package/dist/cjs/utils/prisma/types.js.map +1 -0
  142. package/dist/cjs/utils/sheu.js +1 -119
  143. package/dist/cjs/utils/sheu.js.map +1 -1
  144. package/dist/cjs/utils/validate-dto.js +1 -17
  145. package/dist/cjs/utils/validate-schema.js +1 -15
  146. package/dist/esm/app.js +1 -1
  147. package/dist/esm/app.js.map +1 -1
  148. package/dist/esm/exports/auth/index.js +1 -2
  149. package/dist/esm/exports/controllers/index.js +1 -4
  150. package/dist/esm/exports/error-handler/index.js +1 -4
  151. package/dist/esm/exports/index.js +1 -8
  152. package/dist/esm/exports/middlewares/index.js +1 -2
  153. package/dist/esm/exports/prisma/index.js +1 -3
  154. package/dist/esm/exports/prisma/index.js.map +1 -1
  155. package/dist/esm/exports/services/index.js +1 -9
  156. package/dist/esm/exports/services/index.js.map +1 -1
  157. package/dist/esm/exports/utils/index.js +1 -4
  158. package/dist/esm/exports/validation/index.js +1 -4
  159. package/dist/esm/modules/auth/auth.controller.js +1 -187
  160. package/dist/esm/modules/auth/auth.controller.js.map +1 -1
  161. package/dist/esm/modules/auth/auth.router.js +1 -44
  162. package/dist/esm/modules/auth/auth.router.js.map +1 -1
  163. package/dist/esm/modules/auth/auth.service.js +2 -178
  164. package/dist/esm/modules/auth/auth.service.js.map +1 -1
  165. package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js +1 -73
  166. package/dist/esm/modules/base/base.controller.js +1 -150
  167. package/dist/esm/modules/base/base.controller.js.map +1 -1
  168. package/dist/esm/modules/base/base.middlewares.js +1 -81
  169. package/dist/esm/modules/base/base.middlewares.js.map +1 -1
  170. package/dist/esm/modules/base/base.router.js +1 -17
  171. package/dist/esm/modules/base/base.router.js.map +1 -1
  172. package/dist/esm/modules/base/base.service.js +1 -120
  173. package/dist/esm/modules/base/base.service.js.map +1 -1
  174. package/dist/esm/modules/base/types/base.service.types.js +1 -0
  175. package/dist/esm/modules/base/types/base.service.types.js.map +1 -0
  176. package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js +1 -77
  177. package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js.map +1 -1
  178. package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js +1 -44
  179. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js +1 -89
  180. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
  181. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +1 -165
  182. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
  183. package/dist/esm/modules/base/utils/service-hooks-manager.js +1 -0
  184. package/dist/esm/modules/base/utils/service-hooks-manager.js.map +1 -0
  185. package/dist/esm/modules/email/email.service.js +1 -97
  186. package/dist/esm/modules/error-handler/error-handler.controller.js +4 -107
  187. package/dist/esm/modules/error-handler/error-handler.controller.js.map +1 -1
  188. package/dist/esm/modules/error-handler/utils/app-error.js +1 -15
  189. package/dist/esm/modules/error-handler/utils/catch-async.js +1 -10
  190. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js +3 -160
  191. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
  192. package/dist/esm/modules/file-upload/file-upload.controller.js +1 -266
  193. package/dist/esm/modules/file-upload/file-upload.controller.js.map +1 -1
  194. package/dist/esm/modules/file-upload/file-upload.router.js +1 -38
  195. package/dist/esm/modules/file-upload/file-upload.router.js.map +1 -1
  196. package/dist/esm/modules/file-upload/file-upload.service.js +1 -314
  197. package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js +1 -87
  198. package/dist/esm/modules/swagger/swagger.router.js +1 -93
  199. package/dist/esm/modules/swagger/swagger.router.js.map +1 -1
  200. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +1 -247
  201. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +1 -1
  202. package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.js +1 -0
  203. package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.js.map +1 -0
  204. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js +1 -63
  205. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +1 -1
  206. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -38
  207. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -1
  208. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -19
  209. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +1 -1
  210. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +1 -0
  211. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js.map +1 -0
  212. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +1 -0
  213. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js.map +1 -0
  214. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +1 -0
  215. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js.map +1 -0
  216. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js +1 -0
  217. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -0
  218. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js +1 -84
  219. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -1
  220. package/dist/esm/package.json +3 -0
  221. package/dist/esm/server.js +4 -2
  222. package/dist/esm/server.js.map +1 -1
  223. package/dist/esm/types/arkos-config.js +1 -2
  224. package/dist/esm/types/arkos-config.js.map +1 -1
  225. package/dist/esm/types/auth.js +1 -2
  226. package/dist/esm/types/index.js +1 -8
  227. package/dist/esm/types/index.js.map +1 -1
  228. package/dist/esm/types/router-config.js +1 -2
  229. package/dist/esm/utils/arkos-env.js +1 -7
  230. package/dist/esm/utils/cli/build.js +5 -206
  231. package/dist/esm/utils/cli/build.js.map +1 -1
  232. package/dist/esm/utils/cli/dev.js +5 -249
  233. package/dist/esm/utils/cli/dev.js.map +1 -1
  234. package/dist/esm/utils/cli/generate.js +12 -183
  235. package/dist/esm/utils/cli/generate.js.map +1 -1
  236. package/dist/esm/utils/cli/index.js +1 -74
  237. package/dist/esm/utils/cli/index.js.map +1 -1
  238. package/dist/esm/utils/cli/start.js +1 -86
  239. package/dist/esm/utils/cli/start.js.map +1 -1
  240. package/dist/esm/utils/cli/utils/cli.helpers.js +1 -16
  241. package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +5 -17
  242. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js +9 -15
  243. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +1 -1
  244. package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js +174 -98
  245. package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +1 -1
  246. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +9 -34
  247. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +1 -1
  248. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js +11 -30
  249. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js.map +1 -1
  250. package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js +7 -25
  251. package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js.map +1 -1
  252. package/dist/esm/utils/cli/utils/template-generators.js +2 -25
  253. package/dist/esm/utils/cli/utils/template-generators.js.map +1 -1
  254. package/dist/esm/utils/cli/utils/watermark-stamper.js +3 -0
  255. package/dist/esm/utils/cli/utils/watermark-stamper.js.map +1 -0
  256. package/dist/esm/utils/dotenv.helpers.js +1 -37
  257. package/dist/esm/utils/dynamic-loader.js +11 -0
  258. package/dist/esm/utils/dynamic-loader.js.map +1 -0
  259. package/dist/esm/utils/features/api.features.js +1 -160
  260. package/dist/esm/utils/features/api.features.js.map +1 -1
  261. package/dist/esm/utils/features/change-case.features.js +1 -31
  262. package/dist/esm/utils/features/port-and-host-allocator.js +1 -0
  263. package/dist/esm/utils/features/port-and-host-allocator.js.map +1 -0
  264. package/dist/esm/utils/helpers/api.features.helpers.js +1 -103
  265. package/dist/esm/utils/helpers/api.features.helpers.js.map +1 -1
  266. package/dist/esm/utils/helpers/change-case.helpers.js +1 -161
  267. package/dist/esm/utils/helpers/deepmerge.helper.js +1 -113
  268. package/dist/esm/utils/helpers/dynamic-loader.helpers.js +1 -0
  269. package/dist/esm/utils/helpers/dynamic-loader.helpers.js.map +1 -0
  270. package/dist/esm/utils/helpers/fs.helpers.js +1 -52
  271. package/dist/esm/utils/helpers/fs.helpers.js.map +1 -1
  272. package/dist/esm/utils/helpers/global.helpers.js +1 -47
  273. package/dist/esm/utils/helpers/global.helpers.js.map +1 -1
  274. package/dist/esm/utils/helpers/prisma.helpers.js +1 -44
  275. package/dist/esm/utils/helpers/prisma.helpers.js.map +1 -1
  276. package/dist/esm/utils/helpers/query-parser.helpers.js +1 -40
  277. package/dist/esm/utils/helpers/routers.helpers.js +1 -16
  278. package/dist/esm/utils/helpers/routers.helpers.js.map +1 -1
  279. package/dist/esm/utils/helpers/text.helpers.js +1 -22
  280. package/dist/esm/utils/prisma/prisma-json-schema-generator.js +1 -0
  281. package/dist/esm/utils/prisma/prisma-json-schema-generator.js.map +1 -0
  282. package/dist/esm/utils/prisma/prisma-schema-parser.js +3 -0
  283. package/dist/esm/utils/prisma/prisma-schema-parser.js.map +1 -0
  284. package/dist/esm/utils/prisma/types.js +1 -0
  285. package/dist/esm/utils/prisma/types.js.map +1 -0
  286. package/dist/esm/utils/sheu.js +1 -117
  287. package/dist/esm/utils/sheu.js.map +1 -1
  288. package/dist/esm/utils/validate-dto.js +1 -11
  289. package/dist/esm/utils/validate-schema.js +1 -9
  290. package/dist/types/exports/prisma/index.d.ts +1 -1
  291. package/dist/types/exports/services/index.d.ts +3 -2
  292. package/dist/types/modules/auth/auth.controller.d.ts +1 -1
  293. package/dist/types/modules/auth/auth.service.d.ts +5 -1
  294. package/dist/types/modules/base/base.controller.d.ts +1 -2
  295. package/dist/types/modules/base/base.middlewares.d.ts +4 -4
  296. package/dist/types/modules/base/base.service.d.ts +13 -67
  297. package/dist/types/modules/base/types/base.service.types.d.ts +183 -0
  298. package/dist/types/modules/base/utils/helpers/base.controller.helpers.d.ts +0 -2
  299. package/dist/types/modules/base/utils/helpers/base.router.helpers.d.ts +1 -1
  300. package/dist/types/modules/base/utils/helpers/base.service.helpers.d.ts +2 -1
  301. package/dist/types/modules/base/utils/service-hooks-manager.d.ts +7 -0
  302. package/dist/types/modules/error-handler/error-handler.controller.d.ts +1 -1
  303. package/dist/types/modules/error-handler/utils/error-handler.helpers.d.ts +1 -0
  304. package/dist/types/modules/file-upload/file-upload.controller.d.ts +1 -1
  305. package/dist/types/modules/swagger/utils/helpers/get-authentication-json-schema-paths.d.ts +3 -1
  306. package/dist/types/modules/swagger/utils/helpers/get-swagger-default-configs.d.ts +46 -0
  307. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.d.ts +2 -1
  308. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.d.ts +1 -0
  309. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.d.ts +3 -0
  310. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.d.ts +3 -0
  311. package/dist/types/modules/swagger/utils/helpers/missing-json-schemas-generator.d.ts +34 -0
  312. package/dist/types/modules/swagger/utils/helpers/swagger.router.helpers.d.ts +2 -2
  313. package/dist/types/types/arkos-config.d.ts +5 -3
  314. package/dist/types/types/index.d.ts +1 -0
  315. package/dist/types/utils/cli/generate.d.ts +1 -1
  316. package/dist/types/utils/cli/utils/watermark-stamper.d.ts +9 -0
  317. package/dist/types/utils/{helpers/models.helpers.d.ts → dynamic-loader.d.ts} +33 -20
  318. package/dist/types/utils/features/port-and-host-allocator.d.ts +21 -0
  319. package/dist/types/utils/helpers/dynamic-loader.helpers.d.ts +2 -0
  320. package/dist/types/utils/helpers/fs.helpers.d.ts +0 -4
  321. package/dist/types/utils/helpers/global.helpers.d.ts +1 -0
  322. package/dist/types/utils/helpers/prisma.helpers.d.ts +0 -1
  323. package/dist/types/utils/prisma/prisma-json-schema-generator.d.ts +34 -0
  324. package/dist/types/utils/prisma/prisma-schema-parser.d.ts +18 -0
  325. package/dist/types/utils/prisma/types.d.ts +48 -0
  326. package/package.json +24 -17
  327. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +0 -30
  328. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js.map +0 -1
  329. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +0 -442
  330. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js.map +0 -1
  331. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +0 -165
  332. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js.map +0 -1
  333. package/dist/cjs/utils/helpers/models.helpers.js +0 -314
  334. package/dist/cjs/utils/helpers/models.helpers.js.map +0 -1
  335. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +0 -24
  336. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js.map +0 -1
  337. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +0 -436
  338. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js.map +0 -1
  339. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +0 -159
  340. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js.map +0 -1
  341. package/dist/esm/utils/helpers/models.helpers.js +0 -297
  342. package/dist/esm/utils/helpers/models.helpers.js.map +0 -1
  343. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.d.ts +0 -1
  344. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.d.ts +0 -2
  345. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.d.ts +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"base.service.js","sourceRoot":"","sources":["../../../../src/modules/base/base.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n camelCase,\n kebabCase,\n pascalCase,\n} from \"../../utils/helpers/change-case.helpers\";\nimport {\n getModels,\n getPrismaModelRelations,\n RelationFields,\n} from \"../../utils/helpers/models.helpers\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\nimport { handleRelationFieldsInBody } from \"./utils/helpers/base.service.helpers\";\nimport { getPrismaInstance } from \"../../utils/helpers/prisma.helpers\";\nimport authService from \"../auth/auth.service\";\n\n/**\n * Base service class for handling CRUD operations on a specific model.\n * This class provides standard implementation of data operations that can be extended\n *\n * by model-specific service classes.\n *\n * @class BaseService\n *\n * @usage\n *\n * **Example:** creating a simple service\n *\n * ```ts\n * import { prisma } from '../../utils/prisma'\n *\n * const userService = new BaseService<typeof prisma.user>(\"user\")\n * ```\n *\n * @see {@link https://www.arkosjs.com/docs/api-reference/the-base-service-class}\n *\n */\nexport class BaseService<ModelDelegate extends Record<string, any> = any> {\n /**\n * The camelCase name of the model\n * @public\n */\n modelName: string;\n\n /**\n * Object containing singular and list relation fields for the model\n * @public\n */\n relationFields: RelationFields;\n\n /**\n * Instance of the Prisma client\n * @public\n */\n prisma: any;\n\n /**\n * Creates an instance of BaseService.\n * @param {string} modelName - The name of the model to perform operations on.\n */\n constructor(modelName: string) {\n this.modelName = camelCase(modelName);\n this.relationFields = getPrismaModelRelations(pascalCase(modelName))!;\n }\n\n /**\n * Creates a single record in the database.\n *\n * @param {Parameters<ModelDelegate[\"create\"]>[0] extends { data: infer D; [x: string]: any } ? D : any} data - The data to create the record with.\n * @param {TOptions} [queryOptions] - Additional query options to modify the Prisma query.\n * @returns {Promise<ReturnType<ModelDelegate[\"create\"]>>} The created record.\n */\n async createOne<\n TOptions extends Omit<Parameters<ModelDelegate[\"create\"]>[0], \"data\">,\n >(\n data: Parameters<ModelDelegate[\"create\"]>[0] extends {\n data: infer D;\n [x: string]: any;\n }\n ? D\n : any,\n queryOptions?: TOptions\n ): Promise<\n ModelDelegate[\"create\"] extends (args: { data: any }) => infer R ? R : any\n > {\n // user uer Password123 true false Promise { true }\n if (kebabCase(this.modelName) === \"user\" && (data as any).password)\n if (!authService.isPasswordHashed((data as any).password))\n (data as any).password = await authService.hashPassword(\n (data as any).password\n );\n\n const prisma = getPrismaInstance();\n\n const dataWithRelationFieldsHandled = handleRelationFieldsInBody(\n data as Record<string, any>,\n {\n ...this.relationFields,\n },\n [\"delete\", \"disconnect\", \"update\"]\n );\n\n return await (prisma[this.modelName] as ModelDelegate).create(\n deepmerge(\n {\n data: dataWithRelationFieldsHandled,\n },\n (queryOptions as {}) || {}\n ) as { data: any }\n );\n }\n\n /**\n * Creates multiple records in the database.\n *\n * @param {Parameters<ModelDelegate[\"createMany\"]>[0] extends { data: infer D; [x: string]: any } ? D : any} data - An array of data to create records with.\n * @param {TOptions} [queryOptions] - Additional query options to modify the Prisma query.\n * @returns {Promise<ReturnType<ModelDelegate[\"createMany\"]>>} The result of the createMany operation.\n */\n async createMany<\n TOptions extends Omit<Parameters<ModelDelegate[\"createMany\"]>[0], \"data\">,\n >(\n data: Parameters<ModelDelegate[\"createMany\"]>[0] extends {\n data: infer D;\n [x: string]: any;\n }\n ? D\n : any,\n queryOptions?: TOptions\n ): Promise<\n ModelDelegate[\"createMany\"] extends (args: { data: any }) => infer R\n ? R\n : any\n > {\n const prisma = getPrismaInstance();\n const dataWithRelationFieldsHandled: any[] = [];\n\n if (Array.isArray(data))\n await new Promise((resolve) => {\n (data as { [x: string]: any; password?: string }[]).forEach(\n async (curr, i) => {\n if (\"password\" in curr && this.modelName === \"user\")\n if (!authService.isPasswordHashed(curr.password!))\n data[i].password = await authService.hashPassword(\n curr?.password!\n );\n\n dataWithRelationFieldsHandled[i] = handleRelationFieldsInBody(\n data[i] as Record<string, any>,\n {\n ...this.relationFields,\n },\n [\"delete\", \"disconnect\", \"update\"]\n );\n\n if (i === data.length - 1) resolve(null);\n }\n );\n });\n\n return await (prisma[this.modelName] as ModelDelegate).createMany(\n deepmerge(\n { data: dataWithRelationFieldsHandled },\n (queryOptions as {}) || {}\n ) as {\n data: any;\n }\n );\n }\n\n /**\n * Counts records based on provided filters.\n *\n * @param {Parameters<ModelDelegate[\"count\"]>[0] extends { where?: infer W; [x: string]: any } ? W : any} filters - The filters to apply to the query.\n * @returns {Promise<number>} The count of records matching the filters.\n */\n async count(\n filters: Parameters<ModelDelegate[\"count\"]>[0] extends {\n where?: infer W;\n [x: string]: any;\n }\n ? W\n : any\n ): Promise<number> {\n const prisma = getPrismaInstance();\n\n return await (prisma[this.modelName] as ModelDelegate).count({\n where: filters,\n });\n }\n\n /**\n * Finds multiple records based on provided filters.\n *\n * @param {Parameters<ModelDelegate[\"findMany\"]>[0] extends { where?: infer W; [x: string]: any } ? W : any} filters - The filters to apply to the query.\n * @param {TOptions} [queryOptions] - Additional query options to modify the Prisma query.\n * @returns {Promise<ReturnType<ModelDelegate[\"findMany\"]>>} The found data.\n */\n async findMany<\n TOptions extends Omit<Parameters<ModelDelegate[\"findMany\"]>[0], \"where\">,\n >(\n filters?: Parameters<ModelDelegate[\"findMany\"]>[0] extends {\n where?: infer W;\n [x: string]: any;\n }\n ? W\n : any,\n queryOptions?: TOptions\n ): Promise<\n ModelDelegate[\"findMany\"] extends (\n args: { where: any } & TOptions\n ) => infer R\n ? R\n : any\n > {\n const prisma = getPrismaInstance();\n\n return await (prisma[this.modelName] as ModelDelegate).findMany(\n deepmerge({ where: filters }, (queryOptions as {}) || {}) as {\n where: any;\n } & TOptions\n );\n }\n\n /**\n * Finds a single record by its ID.\n *\n * @param {string | number} id - The ID of the record to find.\n * @param {TOptions} [queryOptions] - Additional query options to modify the Prisma query.\n * @returns {Promise<ReturnType<ModelDelegate[\"findUnique\"]>>} The found record or null if not found.\n */\n async findById<\n TOptions extends Omit<Parameters<ModelDelegate[\"findUnique\"]>[0], \"where\">,\n >(\n id: string | number,\n queryOptions?: TOptions\n ): Promise<\n ModelDelegate[\"findUnique\"] extends (args: { where: any }) => infer R\n ? R\n : any\n > {\n const prisma = getPrismaInstance();\n\n return await (prisma[this.modelName] as ModelDelegate).findUnique(\n deepmerge(\n {\n where: { id },\n },\n queryOptions || {}\n ) as { where: { id: string | number } }\n );\n }\n\n /**\n * Finds a single record by its parameters.\n *\n * @param {Parameters<ModelDelegate[\"findFirst\"]>[0] extends { where?: infer W; [x: string]: any } ? W : any | Parameters<TModel[\"findUnique\"]>[0] extends { where: infer W; [x: string]: any } ? W : any} filters - The parameters to find the record by.\n * @param {TOptions} [queryOptions] - Additional query options to modify the Prisma query.\n * @returns {Promise<ReturnType<ModelDelegate[\"findFirst\"]> | ReturnType<TModel[\"findUnique\"]>>} The found record or null if not found.\n */\n async findOne<\n TOptions extends\n | Omit<Parameters<ModelDelegate[\"findFirst\"]>[0], \"where\">\n | Omit<Parameters<ModelDelegate[\"findUnique\"]>[0], \"where\">,\n >(\n filters: Parameters<ModelDelegate[\"findFirst\"]>[0] extends {\n where?: infer W;\n [x: string]: any;\n }\n ? W\n : any | Parameters<ModelDelegate[\"findUnique\"]>[0] extends {\n where?: infer W;\n [x: string]: any;\n }\n ? W\n : any,\n queryOptions?: TOptions\n ): Promise<\n ModelDelegate[\"findFirst\"] extends (args: { where: any }) => infer R\n ? R\n : ModelDelegate[\"findUnique\"] extends (args: { where: any }) => infer R2\n ? R2\n : any\n > {\n const prisma = getPrismaInstance();\n\n if (\n Object.keys(filters as Record<string, any>).length === 1 &&\n \"id\" in (filters as Record<string, any>) &&\n (filters as any).id !== \"me\"\n )\n return (prisma[this.modelName] as ModelDelegate).findUnique(\n deepmerge(\n {\n where: filters,\n },\n (queryOptions as {}) || {}\n ) as { where: any }\n );\n\n return await (prisma[this.modelName] as ModelDelegate).findFirst(\n deepmerge(\n {\n where: filters,\n },\n (queryOptions as {}) || {}\n ) as { where: any }\n );\n }\n\n /**\n * Updates a single record by its ID.\n *\n * @param {Parameters<ModelDelegate[\"update\"]>[0] extends { where?: infer W; [x: string]: any } ? W : any} filters - The parameters to find the record by.\n * @param {Parameters<ModelDelegate[\"update\"]>[0] extends { data: infer D; [x: string]: any } ? D : any} data - The data to update the record with.\n * @param {TOptions} [queryOptions] - Additional query options to modify the Prisma query.\n * @returns {Promise<ReturnType<ModelDelegate[\"update\"]>>} The updated record or null if not found.\n */\n async updateOne<\n TOptions extends Omit<\n Parameters<ModelDelegate[\"update\"]>[0],\n \"where\" | \"data\"\n >,\n >(\n filters: Parameters<ModelDelegate[\"update\"]>[0] extends {\n where?: infer W;\n [x: string]: any;\n }\n ? W\n : any,\n data: Parameters<ModelDelegate[\"update\"]>[0] extends {\n data: infer D;\n [x: string]: any;\n }\n ? D\n : any,\n queryOptions?: TOptions\n ): Promise<\n ModelDelegate[\"update\"] extends (args: { where: any; data: any }) => infer R\n ? R\n : any\n > {\n const prisma = getPrismaInstance();\n\n if (kebabCase(this.modelName) === \"user\" && (data as any)?.password) {\n if (!authService.isPasswordHashed((data as any).password!))\n (data as any).password = await authService.hashPassword(\n (data as any)?.password\n );\n }\n\n const dataWithRelationFieldsHandled = handleRelationFieldsInBody(\n data as Record<string, any>,\n {\n ...this.relationFields,\n }\n );\n\n return await (prisma[this.modelName] as ModelDelegate).update(\n deepmerge(\n {\n where: filters,\n data: dataWithRelationFieldsHandled,\n },\n (queryOptions as {}) || {}\n ) as { where: any; data: any }\n );\n }\n\n /**\n * Updates multiple records based on the provided filter and data.\n *\n * @param {Parameters<ModelDelegate[\"updateMany\"]>[0] extends { where?: infer W; [x: string]: any } ? W : any} filters - The filters to identify records to update.\n * @param {Parameters<ModelDelegate[\"updateMany\"]>[0] extends { data: infer D; [x: string]: any } ? D : any} data - The data to update the records with.\n * @param {TOptions} [queryOptions] - Additional query options.\n * @returns {Promise<ReturnType<ModelDelegate[\"updateMany\"]>>} The result of the updateMany operation.\n */\n async updateMany<\n TOptions extends Omit<\n Parameters<ModelDelegate[\"updateMany\"]>[0],\n \"where\" | \"data\"\n >,\n >(\n filters: Parameters<ModelDelegate[\"updateMany\"]>[0] extends {\n where?: infer W;\n [x: string]: any;\n }\n ? W\n : any,\n data: Parameters<ModelDelegate[\"updateMany\"]>[0] extends {\n data: infer D;\n [x: string]: any;\n }\n ? D\n : any,\n queryOptions?: TOptions\n ): Promise<\n ModelDelegate[\"updateMany\"] extends (args: {\n where: any;\n data: any;\n }) => infer R\n ? R\n : any\n > {\n const prisma = getPrismaInstance();\n\n if (Array.isArray(data) && this.modelName === \"user\")\n await new Promise((resolve) => {\n (data as { [x: string]: any; password?: string }[]).forEach(\n async (curr, i) => {\n if (\"password\" in data[i])\n if (!authService.isPasswordHashed(curr.password!))\n (data[i] as any).password = await authService.hashPassword(\n curr.password!\n );\n\n if (i === data.length - 1) resolve(undefined);\n }\n );\n });\n\n const firstMerge = deepmerge({ data }, (queryOptions as {}) || {});\n\n return await (prisma[this.modelName] as ModelDelegate).updateMany(\n deepmerge({ where: filters }, firstMerge) as {\n where: any;\n data: any;\n }\n );\n }\n\n /**\n * Deletes a single record by its ID.\n *\n * @param {Parameters<ModelDelegate[\"delete\"]>[0] extends { where?: infer W; [x: string]: any } ? W : any} filters - The parameters to find the record by.\n * @returns {Promise<ReturnType<ModelDelegate[\"delete\"]>>} The deleted record or null if an error occurs.\n */\n async deleteOne(\n filters: Parameters<ModelDelegate[\"delete\"]>[0] extends {\n where?: infer W;\n [x: string]: any;\n }\n ? W\n : any\n ): Promise<ReturnType<ModelDelegate[\"delete\"]>> {\n const prisma = getPrismaInstance();\n\n return await (prisma[this.modelName] as ModelDelegate).delete({\n where: filters,\n });\n }\n\n /**\n * Deletes multiple records based on the provided filter.\n *\n * @param {Parameters<ModelDelegate[\"deleteMany\"]>[0] extends { where?: infer W; [x: string]: any } ? W : Record<string, any>} filters - The filter to identify records to delete.\n * @returns {Promise<ReturnType<ModelDelegate[\"deleteMany\"]>>} The result of the deleteMany operation.\n */\n async deleteMany(\n filters: Parameters<ModelDelegate[\"deleteMany\"]>[0] extends {\n where?: infer W;\n [x: string]: any;\n }\n ? W\n : Record<string, any>\n ): Promise<ReturnType<ModelDelegate[\"deleteMany\"]>> {\n const prisma = getPrismaInstance();\n\n return await (prisma[this.modelName] as ModelDelegate).deleteMany({\n where: filters,\n });\n }\n}\n\n/**\n * Generates a set of base service instances for all available models.\n *\n * @returns {Record<string, BaseService>} A dictionary of base service instances, keyed by model name.\n */\nexport function getBaseServices(): Record<string, BaseService<any>> {\n const models = getModels();\n const baseServices: Record<string, BaseService<any>> = {};\n models.forEach((model) => {\n baseServices[`${camelCase(model)}`] = new BaseService(model);\n });\n return baseServices;\n}\n"]}
1
+ {"version":3,"file":"base.service.js","sourceRoot":"","sources":["../../../../src/modules/base/base.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n camelCase,\n kebabCase,\n pascalCase,\n} from \"../../utils/helpers/change-case.helpers\";\nimport {\n getModuleComponents,\n getPrismaModelRelations,\n RelationFields,\n} from \"../../utils/dynamic-loader\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\nimport { handleRelationFieldsInBody } from \"./utils/helpers/base.service.helpers\";\nimport { getPrismaInstance } from \"../../utils/helpers/prisma.helpers\";\nimport authService from \"../auth/auth.service\";\nimport {\n ModelDelegate,\n CreateOneData,\n CreateOneOptions,\n CreateOneResult,\n CreateManyData,\n CreateManyOptions,\n CreateManyResult,\n CountFilters,\n FindManyFilters,\n FindManyOptions,\n FindManyResult,\n FindByIdOptions,\n FindByIdResult,\n FindOneFilters,\n FindOneOptions,\n FindOneResult,\n UpdateOneFilters,\n UpdateOneData,\n UpdateOneOptions,\n UpdateOneResult,\n UpdateManyFilters,\n UpdateManyData,\n UpdateManyOptions,\n UpdateManyResult,\n DeleteOneFilters,\n DeleteOneResult,\n DeleteManyFilters,\n DeleteManyResult,\n ServiceBaseContext,\n} from \"./types/base.service.types\";\nimport serviceHooksManager from \"./utils/service-hooks-manager\";\n\n/**\n * Base service class for handling CRUD operations on a specific model.\n * This class provides standard implementation of data operations that can be extended\n *\n * by model-specific service classes.\n *\n * @class BaseService\n *\n * @usage\n *\n * **Example:** creating a simple service\n *\n * ```ts\n * import prisma from '../../utils/prisma'\n *\n * const userService = new BaseService<typeof prisma.user>(\"user\")\n * ```\n *\n * **Example:** accessing request context in hooks\n *\n * ```ts\n * class ProductService extends BaseService<Product> {\n * async beforeCreateOne(data: CreateOneData<Product>, queryOptions?: CreateOneOptions<Product>, context?: ServiceBaseContext) {\n * // Access current user from request context\n * const userId = context?.req.user?.id;\n * if (userId) {\n * data.createdBy = userId;\n * }\n * }\n * }\n * ```\n *\n * @see {@link https://www.arkosjs.com/docs/api-reference/the-base-service-class}\n * @see {@link https://www.arkosjs.com/docs/guide/accessing-request-context-in-services}\n *\n */\nexport class BaseService<T extends ModelDelegate = any> {\n /**\n * The camelCase name of the model\n * @public\n */\n modelName: string;\n\n /**\n * Object containing singular and list relation fields for the model\n * @public\n */\n relationFields: RelationFields;\n\n /**\n * Instance of the Prisma client\n * @public\n */\n prisma: any;\n\n /**\n * Creates an instance of BaseService.\n * @param {string} modelName - The name of the model to perform operations on.\n */\n constructor(modelName: string) {\n this.modelName = camelCase(modelName);\n this.relationFields = getPrismaModelRelations(pascalCase(modelName))!;\n }\n\n /**\n * Creates a single record in the database.\n *\n * @param {CreateOneData<T>} data - The data to create the record with.\n * @param {CreateOneOptions<T>} [queryOptions] - Additional query options to modify the Prisma query.\n * @param {ServiceBaseContext} [context] - Request context containing req, res, and next for accessing HTTP-specific information.\n * @returns {Promise<CreateOneResult<T>>} The created record.\n */\n async createOne<TOptions extends CreateOneOptions<T>>(\n data: CreateOneData<T>,\n queryOptions?: TOptions,\n context?: ServiceBaseContext\n ): Promise<CreateOneResult<T>> {\n const serviceHooks = getModuleComponents(this.modelName)?.hooks;\n\n if (serviceHooks?.beforeCreateOne)\n await serviceHooksManager.handleHook(serviceHooks.beforeCreateOne, {\n data,\n queryOptions,\n context,\n });\n\n if (kebabCase(this.modelName) === \"user\" && (data as any).password)\n if (!authService.isPasswordHashed((data as any).password))\n (data as any).password = await authService.hashPassword(\n (data as any).password\n );\n\n const prisma = getPrismaInstance();\n\n const dataWithRelationFieldsHandled = handleRelationFieldsInBody(\n data as Record<string, any>,\n {\n ...this.relationFields,\n },\n [\"delete\", \"disconnect\", \"update\"]\n );\n\n const result = await (prisma[this.modelName] as T).create(\n deepmerge(\n {\n data: dataWithRelationFieldsHandled,\n },\n (queryOptions as {}) || {}\n ) as { data: any }\n );\n\n if (serviceHooks?.afterCreateOne)\n await serviceHooksManager.handleHook(serviceHooks.afterCreateOne, {\n result,\n data,\n queryOptions,\n context,\n });\n\n return result;\n }\n\n /**\n * Creates multiple records in the database.\n *\n * @param {CreateManyData<T>} data - An array of data to create records with.\n * @param {CreateManyOptions<T>} [queryOptions] - Additional query options to modify the Prisma query.\n * @param {ServiceBaseContext} [context] - Request context containing req, res, and next for accessing HTTP-specific information.\n * @returns {Promise<CreateManyResult<T>>} The result of the createMany operation.\n */\n async createMany<TOptions extends CreateManyOptions<T>>(\n data: CreateManyData<T>,\n queryOptions?: TOptions,\n context?: ServiceBaseContext\n ): Promise<CreateManyResult<T>> {\n const serviceHooks = getModuleComponents(this.modelName)?.hooks;\n\n if (serviceHooks?.beforeCreateMany) {\n await serviceHooksManager.handleHook(serviceHooks.beforeCreateMany, {\n data,\n queryOptions,\n context,\n });\n }\n\n const prisma = getPrismaInstance();\n const dataWithRelationFieldsHandled: any[] = [];\n\n if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n const curr = data[i];\n if (\"password\" in curr && this.modelName === \"user\") {\n if (!authService.isPasswordHashed(curr.password!)) {\n data[i].password = await authService.hashPassword(curr?.password!);\n }\n }\n dataWithRelationFieldsHandled[i] = handleRelationFieldsInBody(\n data[i] as Record<string, any>,\n { ...this.relationFields },\n [\"delete\", \"disconnect\", \"update\"]\n );\n }\n }\n\n const result = await (prisma[this.modelName] as T).createMany(\n deepmerge(\n { data: dataWithRelationFieldsHandled },\n (queryOptions as {}) || {}\n ) as {\n data: any;\n }\n );\n\n if (serviceHooks?.afterCreateMany)\n await serviceHooksManager.handleHook(serviceHooks.afterCreateMany, {\n result,\n data,\n queryOptions,\n context,\n });\n\n return result;\n }\n\n /**\n * Counts records based on provided filters.\n *\n * @param {CountFilters<T>} filters - The filters to apply to the query.\n * @returns {Promise<number>} The count of records matching the filters.\n */\n async count(\n filters?: CountFilters<T>,\n context?: ServiceBaseContext\n ): Promise<number> {\n const serviceHooks = getModuleComponents(this.modelName)?.hooks;\n\n if (serviceHooks?.beforeCount) {\n await serviceHooksManager.handleHook(serviceHooks.beforeCount, {\n filters,\n context,\n });\n }\n\n const prisma = getPrismaInstance();\n\n const result = await (prisma[this.modelName] as T).count({\n where: filters,\n });\n\n if (serviceHooks?.afterCount) {\n await serviceHooksManager.handleHook(serviceHooks.afterCount, {\n result,\n filters,\n context,\n });\n }\n\n return result;\n }\n\n /**\n * Finds multiple records based on provided filters.\n *\n * @param {FindManyFilters<T>} filters - The filters to apply to the query.\n * @param {FindManyOptions<T>} [queryOptions] - Additional query options to modify the Prisma query.\n * @param {ServiceBaseContext} [context] - Request context containing req, res, and next for accessing HTTP-specific information.\n * @returns {Promise<FindManyResult<T>>} The found data.\n */\n async findMany<TOptions extends FindManyOptions<T>>(\n filters?: FindManyFilters<T>,\n queryOptions?: TOptions,\n context?: ServiceBaseContext\n ): Promise<FindManyResult<T, TOptions>> {\n const serviceHooks = getModuleComponents(this.modelName)?.hooks;\n\n if (serviceHooks?.beforeFindMany) {\n await serviceHooksManager.handleHook(serviceHooks.beforeFindMany, {\n filters,\n queryOptions,\n context,\n });\n }\n\n const prisma = getPrismaInstance();\n\n const result = await (prisma[this.modelName] as T).findMany(\n deepmerge({ where: filters }, (queryOptions as {}) || {}) as {\n where: any;\n } & TOptions\n );\n\n if (serviceHooks?.afterFindMany)\n await serviceHooksManager.handleHook(serviceHooks.afterFindMany, {\n result,\n filters,\n queryOptions,\n context,\n });\n\n return result;\n }\n\n /**\n * Finds a single record by its ID.\n *\n * @param {string | number} id - The ID of the record to find.\n * @param {FindByIdOptions<T>} [queryOptions] - Additional query options to modify the Prisma query.\n * @param {ServiceBaseContext} [context] - Request context containing req, res, and next for accessing HTTP-specific information.\n * @returns {Promise<FindByIdResult<T>>} The found record or null if not found.\n */\n async findById<TOptions extends FindByIdOptions<T>>(\n id: string | number,\n queryOptions?: TOptions,\n context?: ServiceBaseContext\n ): Promise<FindByIdResult<T>> {\n const serviceHooks = getModuleComponents(this.modelName)?.hooks;\n\n if (serviceHooks?.beforeFindById) {\n await serviceHooksManager.handleHook(serviceHooks.beforeFindById, {\n id,\n queryOptions,\n context,\n });\n }\n\n const prisma = getPrismaInstance();\n\n const result = await (prisma[this.modelName] as T).findUnique(\n deepmerge(\n {\n where: { id },\n },\n queryOptions || {}\n ) as { where: { id: string | number } }\n );\n\n if (serviceHooks?.afterFindById) {\n await serviceHooksManager.handleHook(serviceHooks.afterFindById, {\n result,\n id,\n queryOptions,\n context,\n });\n }\n\n return result;\n }\n\n /**\n * Finds a single record by its parameters.\n *\n * @param {FindOneFilters<T>} filters - The parameters to find the record by.\n * @param {FindOneOptions<T>} [queryOptions] - Additional query options to modify the Prisma query.\n * @param {ServiceBaseContext} [context] - Request context containing req, res, and next for accessing HTTP-specific information.\n * @returns {Promise<FindOneResult<T>>} The found record or null if not found.\n */\n async findOne<TOptions extends FindOneOptions<T>>(\n filters: FindOneFilters<T>,\n queryOptions?: TOptions,\n context?: ServiceBaseContext\n ): Promise<FindOneResult<T>> {\n const serviceHooks = getModuleComponents(this.modelName)?.hooks;\n\n if (serviceHooks?.beforeFindOne) {\n await serviceHooksManager.handleHook(serviceHooks.beforeFindOne, {\n filters,\n queryOptions,\n context,\n });\n }\n\n const prisma = getPrismaInstance();\n\n let result;\n if (\n Object.keys(filters as Record<string, any>).length === 1 &&\n \"id\" in (filters as Record<string, any>) &&\n (filters as any).id !== \"me\"\n )\n result = await (prisma[this.modelName] as T).findUnique(\n deepmerge(\n {\n where: filters,\n },\n (queryOptions as {}) || {}\n ) as { where: any }\n );\n else\n result = await (prisma[this.modelName] as T).findFirst(\n deepmerge(\n {\n where: filters,\n },\n (queryOptions as {}) || {}\n ) as { where: any }\n );\n\n if (serviceHooks?.afterFindOne)\n await serviceHooksManager.handleHook(serviceHooks.afterFindOne, {\n result,\n filters,\n queryOptions,\n context,\n });\n\n return result;\n }\n\n /**\n * Updates a single record by its ID.\n *\n * @param {UpdateOneFilters<T>} filters - The parameters to find the record by.\n * @param {UpdateOneData<T>} data - The data to update the record with.\n * @param {UpdateOneOptions<T>} [queryOptions] - Additional query options to modify the Prisma query.\n * @param {ServiceBaseContext} [context] - Request context containing req, res, and next for accessing HTTP-specific information.\n * @returns {Promise<UpdateOneResult<T>>} The updated record or null if not found.\n */\n async updateOne<TOptions extends UpdateOneOptions<T>>(\n filters: UpdateOneFilters<T>,\n data: UpdateOneData<T>,\n queryOptions?: TOptions,\n context?: ServiceBaseContext\n ): Promise<UpdateOneResult<T>> {\n const serviceHooks = getModuleComponents(this.modelName)?.hooks;\n\n if (serviceHooks?.beforeUpdateOne)\n await serviceHooksManager.handleHook(serviceHooks.beforeUpdateOne, {\n filters,\n data,\n queryOptions,\n context,\n });\n\n if (kebabCase(this.modelName) === \"user\" && (data as any)?.password) {\n if (!authService.isPasswordHashed((data as any).password!))\n (data as any).password = await authService.hashPassword(\n (data as any)?.password\n );\n }\n\n const prisma = getPrismaInstance();\n\n const dataWithRelationFieldsHandled = handleRelationFieldsInBody(\n data as Record<string, any>,\n {\n ...this.relationFields,\n }\n );\n\n const result = await (prisma[this.modelName] as T).update(\n deepmerge(\n {\n where: filters,\n data: dataWithRelationFieldsHandled,\n },\n (queryOptions as {}) || {}\n ) as { where: any; data: any }\n );\n\n if (serviceHooks?.afterUpdateOne)\n await serviceHooksManager.handleHook(serviceHooks.afterUpdateOne, {\n result,\n filters,\n data,\n queryOptions,\n context,\n });\n\n return result;\n }\n\n /**\n * Updates multiple records based on the provided filter and data.\n *\n * @param {UpdateManyFilters<T>} filters - The filters to identify records to update.\n * @param {UpdateManyData<T>} data - The data to update the records with.\n * @param {UpdateManyOptions<T>} [queryOptions] - Additional query options.\n * @param {ServiceBaseContext} [context] - Request context containing req, res, and next for accessing HTTP-specific information.\n * @returns {Promise<UpdateManyResult<T>>} The result of the updateMany operation.\n */\n async updateMany<TOptions extends UpdateManyOptions<T>>(\n filters: UpdateManyFilters<T>,\n data: UpdateManyData<T>,\n queryOptions?: TOptions,\n context?: ServiceBaseContext\n ): Promise<UpdateManyResult<T>> {\n const serviceHooks = getModuleComponents(this.modelName)?.hooks;\n\n if (serviceHooks?.beforeUpdateMany)\n await serviceHooksManager.handleHook(serviceHooks.beforeUpdateMany, {\n filters,\n data,\n queryOptions,\n context,\n });\n\n const prisma = getPrismaInstance();\n\n if (\n this.modelName === \"user\" &&\n \"password\" in (data as any) &&\n (data as any)?.password\n ) {\n if (!authService.isPasswordHashed((data as any).password)) {\n (data as any).password = await authService.hashPassword(\n (data as any)?.password\n );\n }\n }\n\n const firstMerge = deepmerge({ data }, (queryOptions as {}) || {});\n\n const result = await (prisma[this.modelName] as T).updateMany(\n deepmerge({ where: filters }, firstMerge) as {\n where: any;\n data: any;\n }\n );\n\n if (serviceHooks?.afterUpdateMany)\n await serviceHooksManager.handleHook(serviceHooks.afterUpdateMany, {\n result,\n filters,\n data,\n queryOptions,\n context,\n });\n\n return result;\n }\n\n /**\n * Deletes a single record by its ID.\n *\n * @param {DeleteOneFilters<T>} filters - The parameters to find the record by.\n * @param {ServiceBaseContext} [context] - Request context containing req, res, and next for accessing HTTP-specific information.\n * @returns {Promise<DeleteOneResult<T>>} The deleted record or null if an error occurs.\n */\n async deleteOne(\n filters: DeleteOneFilters<T>,\n context?: ServiceBaseContext\n ): Promise<DeleteOneResult<T>> {\n const serviceHooks = getModuleComponents(this.modelName)?.hooks;\n\n if (serviceHooks?.beforeDeleteOne)\n await serviceHooksManager.handleHook(serviceHooks.beforeDeleteOne, {\n filters,\n context,\n });\n\n const prisma = getPrismaInstance();\n\n const result = await (prisma[this.modelName] as T).delete({\n where: filters,\n });\n\n if (serviceHooks?.afterDeleteOne)\n await serviceHooksManager.handleHook(serviceHooks.afterDeleteOne, {\n result,\n filters,\n context,\n });\n\n return result;\n }\n\n /**\n * Deletes multiple records based on the provided filter.\n *\n * @param {DeleteManyFilters<T>} filters - The filter to identify records to delete.\n * @param {ServiceBaseContext} [context] - Request context containing req, res, and next for accessing HTTP-specific information.\n * @returns {Promise<DeleteManyResult<T>>} The result of the deleteMany operation.\n */\n async deleteMany(\n filters: DeleteManyFilters<T>,\n context?: ServiceBaseContext\n ): Promise<DeleteManyResult<T>> {\n const serviceHooks = getModuleComponents(this.modelName)?.hooks;\n\n if (serviceHooks?.beforeDeleteMany)\n await serviceHooksManager.handleHook(serviceHooks.beforeDeleteMany, {\n filters,\n context,\n });\n\n const prisma = getPrismaInstance();\n\n const result = await (prisma[this.modelName] as T).deleteMany({\n where: filters,\n });\n\n if (serviceHooks?.afterDeleteMany)\n await serviceHooksManager.handleHook(serviceHooks.afterDeleteMany, {\n result,\n filters,\n context,\n });\n\n return result;\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.service.types.js","sourceRoot":"","sources":["../../../../../src/modules/base/types/base.service.types.ts"],"names":[],"mappings":"","sourcesContent":["import { User } from \"../../../types\";\n\nexport type ModelDelegate = Record<string, any>;\n\n// Create Operations\nexport type CreateOneData<T extends ModelDelegate> = Parameters<\n T[\"create\"]\n>[0] extends { data: infer D; [x: string]: any }\n ? D\n : any;\n\nexport type CreateOneOptions<T extends ModelDelegate> = Omit<\n Parameters<T[\"create\"]>[0],\n \"data\"\n>;\n\nexport type CreateOneResult<T extends ModelDelegate> =\n T[\"create\"] extends (args: { data: any }) => infer R ? R : any;\n\nexport type CreateManyData<T extends ModelDelegate> = Parameters<\n T[\"createMany\"]\n>[0] extends { data: infer D; [x: string]: any }\n ? D\n : any;\n\nexport type CreateManyOptions<T extends ModelDelegate> = Omit<\n Parameters<T[\"createMany\"]>[0],\n \"data\"\n>;\n\nexport type CreateManyResult<T extends ModelDelegate> =\n T[\"createMany\"] extends (args: { data: any }) => infer R ? R : any;\n\n// Read Operations\nexport type CountFilters<T extends ModelDelegate> = Parameters<\n T[\"count\"]\n>[0] extends { where?: infer W; [x: string]: any }\n ? W\n : any;\n\nexport type FindManyFilters<T extends ModelDelegate> = Parameters<\n T[\"findMany\"]\n>[0] extends { where?: infer W; [x: string]: any }\n ? W\n : any;\n\nexport type FindManyOptions<T extends ModelDelegate> = Omit<\n Parameters<T[\"findMany\"]>[0],\n \"where\"\n>;\n\nexport type FindManyResult<\n T extends ModelDelegate,\n TOptions = any,\n> = T[\"findMany\"] extends (args: { where: any } & TOptions) => infer R\n ? R\n : any;\n\nexport type FindByIdOptions<T extends ModelDelegate> = Omit<\n Parameters<T[\"findUnique\"]>[0],\n \"where\"\n>;\n\nexport type FindByIdResult<T extends ModelDelegate> =\n T[\"findUnique\"] extends (args: { where: any }) => infer R ? R : any;\n\nexport type FindOneFilters<T extends ModelDelegate> = Parameters<\n T[\"findFirst\"]\n>[0] extends { where?: infer W; [x: string]: any }\n ? W\n : any | Parameters<T[\"findUnique\"]>[0] extends {\n where?: infer W;\n [x: string]: any;\n }\n ? W\n : any;\n\nexport type FindOneOptions<T extends ModelDelegate> =\n | Omit<Parameters<T[\"findFirst\"]>[0], \"where\">\n | Omit<Parameters<T[\"findUnique\"]>[0], \"where\">;\n\nexport type FindOneResult<T extends ModelDelegate> =\n T[\"findFirst\"] extends (args: { where: any }) => infer R\n ? R\n : T[\"findUnique\"] extends (args: { where: any }) => infer R2\n ? R2\n : any;\n\n// Update Operations\nexport type UpdateOneFilters<T extends ModelDelegate> = Parameters<\n T[\"update\"]\n>[0] extends { where?: infer W; [x: string]: any }\n ? W\n : any;\n\nexport type UpdateOneData<T extends ModelDelegate> = Parameters<\n T[\"update\"]\n>[0] extends { data: infer D; [x: string]: any }\n ? D\n : any;\n\nexport type UpdateOneOptions<T extends ModelDelegate> = Omit<\n Parameters<T[\"update\"]>[0],\n \"where\" | \"data\"\n>;\n\nexport type UpdateOneResult<T extends ModelDelegate> =\n T[\"update\"] extends (args: { where: any; data: any }) => infer R ? R : any;\n\nexport type UpdateManyFilters<T extends ModelDelegate> = Parameters<\n T[\"updateMany\"]\n>[0] extends { where?: infer W; [x: string]: any }\n ? W\n : any;\n\nexport type UpdateManyData<T extends ModelDelegate> = Parameters<\n T[\"updateMany\"]\n>[0] extends { data: infer D; [x: string]: any }\n ? D\n : any;\n\nexport type UpdateManyOptions<T extends ModelDelegate> = Omit<\n Parameters<T[\"updateMany\"]>[0],\n \"where\" | \"data\"\n>;\n\nexport type UpdateManyResult<T extends ModelDelegate> =\n T[\"updateMany\"] extends (args: { where: any; data: any }) => infer R\n ? R\n : any;\n\n// Delete Operations\nexport type DeleteOneFilters<T extends ModelDelegate> = Parameters<\n T[\"delete\"]\n>[0] extends { where?: infer W; [x: string]: any }\n ? W\n : any;\n\nexport type DeleteOneResult<T extends ModelDelegate> = ReturnType<T[\"delete\"]>;\n\nexport type DeleteManyFilters<T extends ModelDelegate> = Parameters<\n T[\"deleteMany\"]\n>[0] extends { where?: infer W; [x: string]: any }\n ? W\n : Record<string, any>;\n\nexport type DeleteManyResult<T extends ModelDelegate> = ReturnType<\n T[\"deleteMany\"]\n>;\n\n// Service Hooks types\n\nexport interface ServiceBaseContext {\n user?: User;\n accessToken?: string;\n}\n\nexport interface BeforeCreateOneHookArgs<\n T extends ModelDelegate,\n Context = ServiceBaseContext,\n> {\n data: CreateOneData<T>;\n queryOptions?: CreateOneOptions<T>;\n context?: Context;\n}\n\nexport interface AfterCreateOneHookArgs<\n T extends ModelDelegate,\n Context = ServiceBaseContext,\n> {\n result: CreateOneResult<T>;\n data: CreateOneData<T>;\n queryOptions?: CreateOneOptions<T>;\n context?: Context;\n}\n\nexport interface BeforeCreateManyHookArgs<\n T extends ModelDelegate,\n Context = ServiceBaseContext,\n> {\n data: CreateManyData<T>;\n queryOptions?: CreateManyOptions<T>;\n context?: Context;\n}\n\nexport interface AfterCreateManyHookArgs<\n T extends ModelDelegate,\n Context = ServiceBaseContext,\n> {\n result: CreateManyResult<T>;\n queryOptions?: CreateManyOptions<T>;\n context?: Context;\n}\n\nexport interface BeforeCountHookArgs<\n T extends ModelDelegate,\n Context = ServiceBaseContext,\n> {\n filters?: CountFilters<T>;\n context?: Context;\n}\n\nexport interface AfterCountHookArgs<\n T extends ModelDelegate,\n Context = ServiceBaseContext,\n> {\n result: number;\n filters?: CountFilters<T>;\n context?: Context;\n}\n\nexport interface BeforeFindManyHookArgs<\n T extends ModelDelegate,\n Context = ServiceBaseContext,\n> {\n filters?: FindManyFilters<T>;\n queryOptions?: FindManyOptions<T>;\n context?: Context;\n}\n\nexport interface AfterFindManyHookArgs<\n T extends ModelDelegate,\n Context = ServiceBaseContext,\n> {\n result: FindManyResult<T>;\n filters?: FindManyFilters<T>;\n queryOptions?: FindManyOptions<T>;\n context?: Context;\n}\n\nexport interface BeforeFindOneHookArgs<\n T extends ModelDelegate,\n Context = ServiceBaseContext,\n> {\n filters: FindOneFilters<T>;\n queryOptions?: FindOneOptions<T>;\n context?: Context;\n}\n\nexport interface AfterFindOneHookArgs<\n T extends ModelDelegate,\n Context = ServiceBaseContext,\n> {\n result: FindOneResult<T>;\n filters: FindOneFilters<T>;\n queryOptions?: FindOneOptions<T>;\n context?: Context;\n}\n\nexport interface BeforeUpdateOneHookArgs<\n T extends ModelDelegate,\n Context = ServiceBaseContext,\n> {\n filters: UpdateOneFilters<T>;\n data: UpdateOneData<T>;\n queryOptions?: UpdateOneOptions<T>;\n context?: Context;\n}\n\nexport interface AfterUpdateOneHookArgs<\n T extends ModelDelegate,\n Context = ServiceBaseContext,\n> {\n result: UpdateOneResult<T>;\n filters: UpdateOneFilters<T>;\n data: UpdateOneData<T>;\n queryOptions?: UpdateOneOptions<T>;\n context?: Context;\n}\n\nexport interface BeforeUpdateManyHookArgs<\n T extends ModelDelegate,\n Context = ServiceBaseContext,\n> {\n filters: UpdateManyFilters<T>;\n data: UpdateManyData<T>;\n queryOptions?: UpdateManyOptions<T>;\n context?: Context;\n}\n\nexport interface AfterUpdateManyHookArgs<\n T extends ModelDelegate,\n Context = ServiceBaseContext,\n> {\n result: UpdateManyResult<T>;\n filters: UpdateManyFilters<T>;\n data: UpdateManyData<T>;\n queryOptions?: UpdateManyOptions<T>;\n context?: Context;\n}\n\nexport interface BeforeDeleteOneHookArgs<\n T extends ModelDelegate,\n Context = ServiceBaseContext,\n> {\n filters: DeleteOneFilters<T>;\n context?: Context;\n}\n\nexport interface AfterDeleteOneHookArgs<\n T extends ModelDelegate,\n Context = ServiceBaseContext,\n> {\n result: DeleteOneResult<T>;\n filters: DeleteOneFilters<T>;\n context?: Context;\n}\n\nexport interface BeforeDeleteManyHookArgs<\n T extends ModelDelegate,\n Context = ServiceBaseContext,\n> {\n filters: DeleteManyFilters<T>;\n context?: Context;\n}\n\nexport interface AfterDeleteManyHookArgs<\n T extends ModelDelegate,\n Context = ServiceBaseContext,\n> {\n result: DeleteManyResult<T>;\n filters: DeleteManyFilters<T>;\n context?: Context;\n}\n"]}
@@ -1,82 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getAppRoutes = void 0;
4
- exports.parseAndGetPrismaQueryOptions = parseAndGetPrismaQueryOptions;
5
- const server_1 = require("../../../../server");
6
- const getAppRoutes = () => {
7
- const app = (0, server_1.getExpressApp)();
8
- const routes = [];
9
- app._router.stack.forEach((middleware) => {
10
- if (middleware.route) {
11
- Object.keys(middleware.route.methods).forEach((method) => {
12
- routes.push({
13
- method: method.toUpperCase(),
14
- path: middleware.route.path,
15
- });
16
- });
17
- }
18
- else if (middleware.handle && middleware.handle.stack) {
19
- let basePath = "";
20
- if (middleware.regexp) {
21
- const regexpStr = middleware.regexp.toString();
22
- if (regexpStr.includes?.("/?(?=")) {
23
- const match = regexpStr.match(/\/\^(\\\/[^?]+)/);
24
- if (match) {
25
- basePath = match[1].replace(/\\\//g, "/");
26
- }
27
- }
28
- else {
29
- const simpleMatch = regexpStr.match(/\/\^(\\\/[^\\]+)/);
30
- if (simpleMatch) {
31
- basePath = simpleMatch[1].replace(/\\\//g, "/");
32
- }
33
- }
34
- }
35
- middleware.handle.stack.forEach((routerMiddleware) => {
36
- if (routerMiddleware.route) {
37
- Object.keys(routerMiddleware.route.methods).forEach((method) => {
38
- let routePath = routerMiddleware.route.path;
39
- let fullPath;
40
- if (routePath.includes?.("/?(?=")) {
41
- const pathMatch = routePath.match(/\/\^?(\\\/[^?]+|\/[^?]+)/);
42
- if (pathMatch) {
43
- const cleanPath = pathMatch[1].replace(/\\\//g, "/");
44
- fullPath = basePath ? basePath + cleanPath : cleanPath;
45
- }
46
- else {
47
- const fallbackMatch = routePath.match(/\?\(\?=([^)]+)/);
48
- if (fallbackMatch) {
49
- fullPath = fallbackMatch[1];
50
- }
51
- else {
52
- fullPath = routePath;
53
- }
54
- }
55
- }
56
- else {
57
- fullPath = basePath
58
- ? basePath.replace(/\/$/, "") +
59
- (routePath.startsWith("/") ? routePath : "/" + routePath)
60
- : routePath;
61
- }
62
- fullPath = fullPath
63
- .replace(/\\\//g, "/")
64
- .replace(/\^/g, "")
65
- .replace(/\$/g, "");
66
- if (fullPath.includes?.("/?(?=")) {
67
- fullPath = fullPath.replace(/\/\?\(\?=[^)]*\)/g, "");
68
- }
69
- routes.push({
70
- method: method.toUpperCase(),
71
- path: fullPath,
72
- });
73
- });
74
- }
75
- });
76
- }
77
- });
78
- return routes;
79
- };
80
- exports.getAppRoutes = getAppRoutes;
81
- function parseAndGetPrismaQueryOptions(req) { }
82
- //# sourceMappingURL=base.controller.helpers.js.map
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getAppRoutes=void 0;const server_1=require("../../../../server"),getAppRoutes=()=>{const u=(0,server_1.getExpressApp)(),r=[];return u._router.stack.forEach(t=>{if(t.route)Object.keys(t.route.methods).forEach(s=>{r.push({method:s.toUpperCase(),path:t.route.path})});else if(t.handle&&t.handle.stack){let s="";if(t.regexp){const p=t.regexp.toString();if(p.includes?.("/?(?=")){const o=p.match(/\/\^(\\\/[^?]+)/);o&&(s=o[1].replace(/\\\//g,"/"))}else{const o=p.match(/\/\^(\\\/[^\\]+)/);o&&(s=o[1].replace(/\\\//g,"/"))}}t.handle.stack.forEach(p=>{p.route&&Object.keys(p.route.methods).forEach(o=>{let c=p.route.path,e;if(c.includes?.("/?(?=")){const h=c.match(/\/\^?(\\\/[^?]+|\/[^?]+)/);if(h){const a=h[1].replace(/\\\//g,"/");e=s?s+a:a}else{const a=c.match(/\?\(\?=([^)]+)/);a?e=a[1]:e=c}}else e=s?s.replace(/\/$/,"")+(c.startsWith("/")?c:"/"+c):c;e=e.replace(/\\\//g,"/").replace(/\^/g,"").replace(/\$/g,""),e.includes?.("/?(?=")&&(e=e.replace(/\/\?\(\?=[^)]*\)/g,"")),r.push({method:o.toUpperCase(),path:e})})})}}),r};exports.getAppRoutes=getAppRoutes;
@@ -1 +1 @@
1
- {"version":3,"file":"base.controller.helpers.js","sourceRoot":"","sources":["../../../../../../src/modules/base/utils/helpers/base.controller.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { getExpressApp } from \"../../../../server\";\nimport { ArkosRequest } from \"../../../../types\";\n\nexport const getAppRoutes = () => {\n const app = getExpressApp();\n const routes: { method: string; path: string }[] = [];\n\n app._router.stack.forEach((middleware: any) => {\n if (middleware.route) {\n // Direct routes on the app\n Object.keys(middleware.route.methods).forEach((method) => {\n routes.push({\n method: method.toUpperCase(),\n path: middleware.route.path,\n });\n });\n } else if (middleware.handle && middleware.handle.stack) {\n // Extract the base path from the middleware's regexp pattern\n let basePath = \"\";\n if (middleware.regexp) {\n // Handle pattern like /^\\/api\\/?(?=\\/|$)/i\n const regexpStr = middleware.regexp.toString();\n\n // More robust pattern matching\n if (regexpStr.includes?.(\"/?(?=\")) {\n // Extract everything between the start and the '/?(?=' pattern\n const match = regexpStr.match(/\\/\\^(\\\\\\/[^?]+)/);\n if (match) {\n // Clean up the extracted path\n basePath = match[1].replace(/\\\\\\//g, \"/\");\n }\n } else {\n // Handle other regexp patterns\n const simpleMatch = regexpStr.match(/\\/\\^(\\\\\\/[^\\\\]+)/);\n if (simpleMatch) {\n basePath = simpleMatch[1].replace(/\\\\\\//g, \"/\");\n }\n }\n }\n\n // Process routes in the middleware's router\n middleware.handle.stack.forEach((routerMiddleware: any) => {\n if (routerMiddleware.route) {\n Object.keys(routerMiddleware.route.methods).forEach((method) => {\n let routePath = routerMiddleware.route.path;\n let fullPath;\n\n // Check if routePath already contains regex artifacts\n if (routePath.includes?.(\"/?(?=\")) {\n // Extract the actual path from the regex pattern\n const pathMatch = routePath.match(/\\/\\^?(\\\\\\/[^?]+|\\/[^?]+)/);\n if (pathMatch) {\n const cleanPath = pathMatch[1].replace(/\\\\\\//g, \"/\");\n fullPath = basePath ? basePath + cleanPath : cleanPath;\n } else {\n // If we can't clean it, at least extract what's after '/?(?='\n const fallbackMatch = routePath.match(/\\?\\(\\?=([^)]+)/);\n if (fallbackMatch) {\n fullPath = fallbackMatch[1];\n } else {\n fullPath = routePath; // Use as is if no pattern matches\n }\n }\n } else {\n // Normal path joining\n fullPath = basePath\n ? basePath.replace(/\\/$/, \"\") +\n (routePath.startsWith(\"/\") ? routePath : \"/\" + routePath)\n : routePath;\n }\n\n // Clean up any remaining regex artifacts\n fullPath = fullPath\n .replace(/\\\\\\//g, \"/\")\n .replace(/\\^/g, \"\")\n .replace(/\\$/g, \"\");\n\n // Remove any \"/?(?=\" patterns that might remain\n if (fullPath.includes?.(\"/?(?=\")) {\n fullPath = fullPath.replace(/\\/\\?\\(\\?=[^)]*\\)/g, \"\");\n }\n\n routes.push({\n method: method.toUpperCase(),\n path: fullPath,\n });\n });\n }\n });\n }\n });\n\n return routes;\n};\n\nexport function parseAndGetPrismaQueryOptions(req: ArkosRequest) {}\n"]}
1
+ {"version":3,"file":"base.controller.helpers.js","sourceRoot":"","sources":["../../../../../../src/modules/base/utils/helpers/base.controller.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { getExpressApp } from \"../../../../server\";\nimport { ArkosRequest } from \"../../../../types\";\n\nexport const getAppRoutes = () => {\n const app = getExpressApp();\n const routes: { method: string; path: string }[] = [];\n\n app._router.stack.forEach((middleware: any) => {\n if (middleware.route) {\n // Direct routes on the app\n Object.keys(middleware.route.methods).forEach((method) => {\n routes.push({\n method: method.toUpperCase(),\n path: middleware.route.path,\n });\n });\n } else if (middleware.handle && middleware.handle.stack) {\n // Extract the base path from the middleware's regexp pattern\n let basePath = \"\";\n if (middleware.regexp) {\n // Handle pattern like /^\\/api\\/?(?=\\/|$)/i\n const regexpStr = middleware.regexp.toString();\n\n // More robust pattern matching\n if (regexpStr.includes?.(\"/?(?=\")) {\n // Extract everything between the start and the '/?(?=' pattern\n const match = regexpStr.match(/\\/\\^(\\\\\\/[^?]+)/);\n if (match) {\n // Clean up the extracted path\n basePath = match[1].replace(/\\\\\\//g, \"/\");\n }\n } else {\n // Handle other regexp patterns\n const simpleMatch = regexpStr.match(/\\/\\^(\\\\\\/[^\\\\]+)/);\n if (simpleMatch) {\n basePath = simpleMatch[1].replace(/\\\\\\//g, \"/\");\n }\n }\n }\n\n // Process routes in the middleware's router\n middleware.handle.stack.forEach((routerMiddleware: any) => {\n if (routerMiddleware.route) {\n Object.keys(routerMiddleware.route.methods).forEach((method) => {\n let routePath = routerMiddleware.route.path;\n let fullPath;\n\n // Check if routePath already contains regex artifacts\n if (routePath.includes?.(\"/?(?=\")) {\n // Extract the actual path from the regex pattern\n const pathMatch = routePath.match(/\\/\\^?(\\\\\\/[^?]+|\\/[^?]+)/);\n if (pathMatch) {\n const cleanPath = pathMatch[1].replace(/\\\\\\//g, \"/\");\n fullPath = basePath ? basePath + cleanPath : cleanPath;\n } else {\n // If we can't clean it, at least extract what's after '/?(?='\n const fallbackMatch = routePath.match(/\\?\\(\\?=([^)]+)/);\n if (fallbackMatch) {\n fullPath = fallbackMatch[1];\n } else {\n fullPath = routePath; // Use as is if no pattern matches\n }\n }\n } else {\n // Normal path joining\n fullPath = basePath\n ? basePath.replace(/\\/$/, \"\") +\n (routePath.startsWith(\"/\") ? routePath : \"/\" + routePath)\n : routePath;\n }\n\n // Clean up any remaining regex artifacts\n fullPath = fullPath\n .replace(/\\\\\\//g, \"/\")\n .replace(/\\^/g, \"\")\n .replace(/\\$/g, \"\");\n\n // Remove any \"/?(?=\" patterns that might remain\n if (fullPath.includes?.(\"/?(?=\")) {\n fullPath = fullPath.replace(/\\/\\?\\(\\?=[^)]*\\)/g, \"\");\n }\n\n routes.push({\n method: method.toUpperCase(),\n path: fullPath,\n });\n });\n }\n });\n }\n });\n\n return routes;\n};\n"]}
@@ -1,50 +1 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.resolvePrismaQueryOptions = resolvePrismaQueryOptions;
7
- const deepmerge_helper_1 = __importDefault(require("../../../../utils/helpers/deepmerge.helper"));
8
- function resolvePrismaQueryOptions(prismaQueryOptions, action) {
9
- if (!prismaQueryOptions) {
10
- return {};
11
- }
12
- const options = prismaQueryOptions;
13
- const actionOptions = options[action] || {};
14
- let mergedOptions = options.queryOptions || {};
15
- if (options.global) {
16
- mergedOptions = (0, deepmerge_helper_1.default)(mergedOptions, options.global);
17
- }
18
- const generalOptions = getGeneralOptionsForAction(options, action);
19
- if (generalOptions) {
20
- mergedOptions = (0, deepmerge_helper_1.default)(mergedOptions, generalOptions);
21
- }
22
- if (actionOptions) {
23
- mergedOptions = (0, deepmerge_helper_1.default)(mergedOptions, actionOptions);
24
- }
25
- return mergedOptions;
26
- }
27
- function getGeneralOptionsForAction(options, action) {
28
- const actionMappings = {
29
- findMany: ["find"],
30
- findOne: ["find"],
31
- create: ["create", "save"],
32
- createOne: ["create", "save", "saveOne"],
33
- createMany: ["create", "save", "saveMany"],
34
- update: ["update", "save"],
35
- updateOne: ["update", "save", "saveOne"],
36
- updateMany: ["update", "save", "saveMany"],
37
- delete: ["delete"],
38
- deleteOne: ["delete"],
39
- deleteMany: ["delete"],
40
- };
41
- const generalKeys = actionMappings[action] || [];
42
- let generalOptions = {};
43
- for (const key of generalKeys) {
44
- if (options[key]) {
45
- generalOptions = (0, deepmerge_helper_1.default)(generalOptions, options[key]);
46
- }
47
- }
48
- return Object.keys(generalOptions).length > 0 ? generalOptions : null;
49
- }
50
- //# sourceMappingURL=base.middlewares.helpers.js.map
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.resolvePrismaQueryOptions=resolvePrismaQueryOptions;const deepmerge_helper_1=__importDefault(require("../../../../utils/helpers/deepmerge.helper"));function resolvePrismaQueryOptions(t,r){if(!t)return{};const n=t,s=n[r]||{};let e=n.queryOptions||{};n.global&&(e=(0,deepmerge_helper_1.default)(e,n.global));const a=getGeneralOptionsForAction(n,r);return a&&(e=(0,deepmerge_helper_1.default)(e,a)),s&&(e=(0,deepmerge_helper_1.default)(e,s)),e}function getGeneralOptionsForAction(t,r){const s={findMany:["find"],findOne:["find"],create:["create","save"],createOne:["create","save","saveOne"],createMany:["create","save","saveMany"],update:["update","save"],updateOne:["update","save","saveOne"],updateMany:["update","save","saveMany"],delete:["delete"],deleteOne:["delete"],deleteMany:["delete"]}[r]||[];let e={};for(const a of s)t[a]&&(e=(0,deepmerge_helper_1.default)(e,t[a]));return Object.keys(e).length>0?e:null}
@@ -1,97 +1 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.setupRouters = setupRouters;
7
- exports.isEndpointDisabled = isEndpointDisabled;
8
- exports.isParentEndpointAllowed = isParentEndpointAllowed;
9
- const pluralize_1 = __importDefault(require("pluralize"));
10
- const utils_1 = require("../../../../exports/utils");
11
- const models_helpers_1 = require("../../../../utils/helpers/models.helpers");
12
- const auth_service_1 = __importDefault(require("../../../auth/auth.service"));
13
- const base_controller_1 = require("../../base.controller");
14
- const base_middlewares_1 = require("../../base.middlewares");
15
- const routers_helpers_1 = require("../../../../utils/helpers/routers.helpers");
16
- function setupRouters(models, router, arkosConfigs) {
17
- return models.map(async (model) => {
18
- const modelNameInKebab = (0, utils_1.kebabCase)(model);
19
- const modelModules = await (0, models_helpers_1.importPrismaModelModules)(modelNameInKebab, arkosConfigs);
20
- const { middlewares, authConfigs, prismaQueryOptions, router: customRouterModule, dtos, schemas, } = modelModules;
21
- const routeName = pluralize_1.default.plural(modelNameInKebab);
22
- const controller = new base_controller_1.BaseController(model);
23
- const routerConfig = customRouterModule?.config || {};
24
- const customRouter = customRouterModule || {};
25
- const hasCustomImplementation = (path, method) => {
26
- return customRouter.stack?.some((layer) => (layer.path === `/api/${path}` ||
27
- layer.path === `api/${path}` ||
28
- layer.path === `api/${path}/` ||
29
- layer.path === `/api/${path}/`) &&
30
- layer.method.toLowerCase() === method.toLowerCase());
31
- };
32
- const getValidationSchemaOrDto = (key) => {
33
- const validationConfigs = arkosConfigs?.validation;
34
- if (validationConfigs?.resolver === "class-validator") {
35
- return dtos?.[key];
36
- }
37
- else if (validationConfigs?.resolver === "zod") {
38
- return schemas?.[key];
39
- }
40
- return undefined;
41
- };
42
- if (customRouterModule?.default && !routerConfig?.disable)
43
- router.use(`/${routeName}`, customRouterModule.default);
44
- if (!isEndpointDisabled(routerConfig, "createOne") &&
45
- !hasCustomImplementation(`/${routeName}`, "post")) {
46
- router.post(`/${routeName}`, auth_service_1.default.handleAuthenticationControl("Create", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("Create", (0, utils_1.kebabCase)(pluralize_1.default.singular(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("create")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "createOne"), ...(0, routers_helpers_1.processMiddleware)(middlewares?.beforeCreateOne), controller.createOne, ...(0, routers_helpers_1.processMiddleware)(middlewares?.afterCreateOne), base_middlewares_1.sendResponse);
47
- }
48
- if (!isEndpointDisabled(routerConfig, "findMany") &&
49
- !hasCustomImplementation(`/${routeName}`, "get")) {
50
- router.get(`/${routeName}`, auth_service_1.default.handleAuthenticationControl("View", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("View", (0, utils_1.kebabCase)(pluralize_1.default.singular(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "findMany"), ...(0, routers_helpers_1.processMiddleware)(middlewares?.beforeFindMany), controller.findMany, ...(0, routers_helpers_1.processMiddleware)(middlewares?.afterFindMany), base_middlewares_1.sendResponse);
51
- }
52
- if (!isEndpointDisabled(routerConfig, "createMany") &&
53
- !hasCustomImplementation(`/${routeName}/many`, "post")) {
54
- router.post(`/${routeName}/many`, auth_service_1.default.handleAuthenticationControl("Create", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("Create", (0, utils_1.kebabCase)(pluralize_1.default.singular(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("createMany")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "createMany"), ...(0, routers_helpers_1.processMiddleware)(middlewares?.beforeCreateMany), controller.createMany, ...(0, routers_helpers_1.processMiddleware)(middlewares?.afterCreateMany), base_middlewares_1.sendResponse);
55
- }
56
- if (!isEndpointDisabled(routerConfig, "updateMany") &&
57
- !hasCustomImplementation(`/${routeName}/many`, "patch")) {
58
- router.patch(`/${routeName}/many`, auth_service_1.default.handleAuthenticationControl("Update", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("Update", (0, utils_1.kebabCase)(pluralize_1.default.singular(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("updateMany")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "updateMany"), ...(0, routers_helpers_1.processMiddleware)(middlewares?.beforeUpdateMany), controller.updateMany, ...(0, routers_helpers_1.processMiddleware)(middlewares?.afterUpdateMany), base_middlewares_1.sendResponse);
59
- }
60
- if (!isEndpointDisabled(routerConfig, "deleteMany") &&
61
- !hasCustomImplementation(`/${routeName}/many`, "delete")) {
62
- router.delete(`/${routeName}/many`, auth_service_1.default.handleAuthenticationControl("Delete", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("Delete", (0, utils_1.kebabCase)(pluralize_1.default.singular(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("deleteMany")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "deleteMany"), ...(0, routers_helpers_1.processMiddleware)(middlewares?.beforeDeleteMany), controller.deleteMany, ...(0, routers_helpers_1.processMiddleware)(middlewares?.afterDeleteMany), base_middlewares_1.sendResponse);
63
- }
64
- if (!isEndpointDisabled(routerConfig, "findOne") &&
65
- !hasCustomImplementation(`/${routeName}/:id`, "get")) {
66
- router.get(`/${routeName}/:id`, auth_service_1.default.handleAuthenticationControl("View", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("View", (0, utils_1.kebabCase)(pluralize_1.default.singular(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("findOne")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "findOne"), ...(0, routers_helpers_1.processMiddleware)(middlewares?.beforeFindOne), controller.findOne, ...(0, routers_helpers_1.processMiddleware)(middlewares?.afterFindOne), base_middlewares_1.sendResponse);
67
- }
68
- if (!isEndpointDisabled(routerConfig, "updateOne") &&
69
- !hasCustomImplementation(`/${routeName}/:id`, "patch")) {
70
- router.patch(`/${routeName}/:id`, auth_service_1.default.handleAuthenticationControl("Update", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("Update", (0, utils_1.kebabCase)(pluralize_1.default.singular(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("update")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "updateOne"), ...(0, routers_helpers_1.processMiddleware)(middlewares?.beforeUpdateOne), controller.updateOne, ...(0, routers_helpers_1.processMiddleware)(middlewares?.afterUpdateOne), base_middlewares_1.sendResponse);
71
- }
72
- if (!isEndpointDisabled(routerConfig, "deleteOne") &&
73
- !hasCustomImplementation(`/${routeName}/:id`, "delete")) {
74
- router.delete(`/${routeName}/:id`, auth_service_1.default.handleAuthenticationControl("Delete", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("Delete", (0, utils_1.kebabCase)(pluralize_1.default.singular(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("delete")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "deleteOne"), ...(0, routers_helpers_1.processMiddleware)(middlewares?.beforeDeleteOne), controller.deleteOne, ...(0, routers_helpers_1.processMiddleware)(middlewares?.afterDeleteOne), base_middlewares_1.sendResponse);
75
- }
76
- });
77
- }
78
- function isEndpointDisabled(routerConfig, endpoint) {
79
- if (!routerConfig?.disable)
80
- return false;
81
- if (routerConfig.disable === true)
82
- return true;
83
- if (typeof routerConfig.disable === "object")
84
- return routerConfig.disable[endpoint] === true;
85
- return false;
86
- }
87
- function isParentEndpointAllowed(routerConfig, endpoint) {
88
- if (!routerConfig?.parent)
89
- return false;
90
- const parentEndpoints = routerConfig.parent.endpoints;
91
- if (parentEndpoints === "*")
92
- return true;
93
- if (Array.isArray(parentEndpoints))
94
- return parentEndpoints.includes(endpoint);
95
- return true;
96
- }
97
- //# sourceMappingURL=base.router.helpers.js.map
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.setupRouters=setupRouters,exports.isEndpointDisabled=isEndpointDisabled,exports.isParentEndpointAllowed=isParentEndpointAllowed;const pluralize_1=__importDefault(require("pluralize")),utils_1=require("../../../../exports/utils"),dynamic_loader_1=require("../../../../utils/dynamic-loader"),auth_service_1=__importDefault(require("../../../auth/auth.service")),base_controller_1=require("../../base.controller"),base_middlewares_1=require("../../base.middlewares"),routers_helpers_1=require("../../../../utils/helpers/routers.helpers");async function setupRouters(n,r,p){return n.map(async C=>{const s=(0,utils_1.kebabCase)(C),y=(0,dynamic_loader_1.getModuleComponents)(s)||{},{interceptors:e,authConfigs:a,prismaQueryOptions:d,router:h,dtos:b,schemas:m}=y,t=pluralize_1.default.plural(s),i=new base_controller_1.BaseController(C),o=h?.config||{},O=h||{},l=(c,M)=>O.stack?.some(f=>(f.path===`/api/${c}`||f.path===`api/${c}`||f.path===`api/${c}/`||f.path===`/api/${c}/`)&&f.method.toLowerCase()===M.toLowerCase()),u=c=>{const M=p?.validation;if(M?.resolver==="class-validator")return b?.[c];if(M?.resolver==="zod")return m?.[c]};h?.default&&!o?.disable&&r.use(`/${t}`,h.default),!isEndpointDisabled(o,"createOne")&&!l(`/${t}`,"post")&&r.post(`/${t}`,auth_service_1.default.handleAuthenticationControl("Create",a?.authenticationControl),auth_service_1.default.handleAccessControl("Create",(0,utils_1.kebabCase)(pluralize_1.default.singular(s)),a?.accessControl||{}),(0,base_middlewares_1.handleRequestBodyValidationAndTransformation)(u("create")),(0,base_middlewares_1.addPrismaQueryOptionsToRequest)(d,"createOne"),...(0,routers_helpers_1.processMiddleware)(e?.beforeCreateOne),i.createOne,...(0,routers_helpers_1.processMiddleware)(e?.afterCreateOne),base_middlewares_1.sendResponse,...(0,routers_helpers_1.processMiddleware)(e?.onCreateOneError)),!isEndpointDisabled(o,"findMany")&&!l(`/${t}`,"get")&&r.get(`/${t}`,auth_service_1.default.handleAuthenticationControl("View",a?.authenticationControl),auth_service_1.default.handleAccessControl("View",(0,utils_1.kebabCase)(pluralize_1.default.singular(s)),a?.accessControl||{}),(0,base_middlewares_1.addPrismaQueryOptionsToRequest)(d,"findMany"),...(0,routers_helpers_1.processMiddleware)(e?.beforeFindMany),i.findMany,...(0,routers_helpers_1.processMiddleware)(e?.afterFindMany),base_middlewares_1.sendResponse,...(0,routers_helpers_1.processMiddleware)(e?.onFindManyError)),!isEndpointDisabled(o,"createMany")&&!l(`/${t}/many`,"post")&&r.post(`/${t}/many`,auth_service_1.default.handleAuthenticationControl("Create",a?.authenticationControl),auth_service_1.default.handleAccessControl("Create",(0,utils_1.kebabCase)(pluralize_1.default.singular(s)),a?.accessControl||{}),(0,base_middlewares_1.handleRequestBodyValidationAndTransformation)(u("createMany")),(0,base_middlewares_1.addPrismaQueryOptionsToRequest)(d,"createMany"),...(0,routers_helpers_1.processMiddleware)(e?.beforeCreateMany),i.createMany,...(0,routers_helpers_1.processMiddleware)(e?.afterCreateMany),base_middlewares_1.sendResponse,...(0,routers_helpers_1.processMiddleware)(e?.onCreateManyError)),!isEndpointDisabled(o,"updateMany")&&!l(`/${t}/many`,"patch")&&r.patch(`/${t}/many`,auth_service_1.default.handleAuthenticationControl("Update",a?.authenticationControl),auth_service_1.default.handleAccessControl("Update",(0,utils_1.kebabCase)(pluralize_1.default.singular(s)),a?.accessControl||{}),(0,base_middlewares_1.handleRequestBodyValidationAndTransformation)(u("updateMany")),(0,base_middlewares_1.addPrismaQueryOptionsToRequest)(d,"updateMany"),...(0,routers_helpers_1.processMiddleware)(e?.beforeUpdateMany),i.updateMany,...(0,routers_helpers_1.processMiddleware)(e?.afterUpdateMany),base_middlewares_1.sendResponse,...(0,routers_helpers_1.processMiddleware)(e?.onUpdateManyError)),!isEndpointDisabled(o,"deleteMany")&&!l(`/${t}/many`,"delete")&&r.delete(`/${t}/many`,auth_service_1.default.handleAuthenticationControl("Delete",a?.authenticationControl),auth_service_1.default.handleAccessControl("Delete",(0,utils_1.kebabCase)(pluralize_1.default.singular(s)),a?.accessControl||{}),(0,base_middlewares_1.handleRequestBodyValidationAndTransformation)(u("deleteMany")),(0,base_middlewares_1.addPrismaQueryOptionsToRequest)(d,"deleteMany"),...(0,routers_helpers_1.processMiddleware)(e?.beforeDeleteMany),i.deleteMany,...(0,routers_helpers_1.processMiddleware)(e?.afterDeleteMany),base_middlewares_1.sendResponse,...(0,routers_helpers_1.processMiddleware)(e?.onDeleteManyError)),!isEndpointDisabled(o,"findOne")&&!l(`/${t}/:id`,"get")&&r.get(`/${t}/:id`,auth_service_1.default.handleAuthenticationControl("View",a?.authenticationControl),auth_service_1.default.handleAccessControl("View",(0,utils_1.kebabCase)(pluralize_1.default.singular(s)),a?.accessControl||{}),(0,base_middlewares_1.handleRequestBodyValidationAndTransformation)(u("findOne")),(0,base_middlewares_1.addPrismaQueryOptionsToRequest)(d,"findOne"),...(0,routers_helpers_1.processMiddleware)(e?.beforeFindOne),i.findOne,...(0,routers_helpers_1.processMiddleware)(e?.afterFindOne),base_middlewares_1.sendResponse,...(0,routers_helpers_1.processMiddleware)(e?.onFindOneError)),!isEndpointDisabled(o,"updateOne")&&!l(`/${t}/:id`,"patch")&&r.patch(`/${t}/:id`,auth_service_1.default.handleAuthenticationControl("Update",a?.authenticationControl),auth_service_1.default.handleAccessControl("Update",(0,utils_1.kebabCase)(pluralize_1.default.singular(s)),a?.accessControl||{}),(0,base_middlewares_1.handleRequestBodyValidationAndTransformation)(u("update")),(0,base_middlewares_1.addPrismaQueryOptionsToRequest)(d,"updateOne"),...(0,routers_helpers_1.processMiddleware)(e?.beforeUpdateOne),i.updateOne,...(0,routers_helpers_1.processMiddleware)(e?.afterUpdateOne),base_middlewares_1.sendResponse,...(0,routers_helpers_1.processMiddleware)(e?.onUpdateOneError)),!isEndpointDisabled(o,"deleteOne")&&!l(`/${t}/:id`,"delete")&&r.delete(`/${t}/:id`,auth_service_1.default.handleAuthenticationControl("Delete",a?.authenticationControl),auth_service_1.default.handleAccessControl("Delete",(0,utils_1.kebabCase)(pluralize_1.default.singular(s)),a?.accessControl||{}),(0,base_middlewares_1.handleRequestBodyValidationAndTransformation)(u("delete")),(0,base_middlewares_1.addPrismaQueryOptionsToRequest)(d,"deleteOne"),...(0,routers_helpers_1.processMiddleware)(e?.beforeDeleteOne),i.deleteOne,...(0,routers_helpers_1.processMiddleware)(e?.afterDeleteOne),base_middlewares_1.sendResponse,...(0,routers_helpers_1.processMiddleware)(e?.onDeleteOneError))})}function isEndpointDisabled(n,r){return n?.disable?n.disable===!0?!0:typeof n.disable=="object"?n.disable[r]===!0:!1:!1}function isParentEndpointAllowed(n,r){if(!n?.parent)return!1;const p=n.parent.endpoints;return p==="*"?!0:Array.isArray(p)?p.includes(r):!0}
@@ -1 +1 @@
1
- {"version":3,"file":"base.router.helpers.js","sourceRoot":"","sources":["../../../../../../src/modules/base/utils/helpers/base.router.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { Router } from \"express\";\nimport pluralize from \"pluralize\";\nimport { ArkosConfig, RouterConfig } from \"../../../../exports\";\nimport { kebabCase } from \"../../../../exports/utils\";\nimport { PrismaQueryOptions } from \"../../../../types\";\nimport { RouterEndpoint } from \"../../../../types/router-config\";\nimport { importPrismaModelModules } from \"../../../../utils/helpers/models.helpers\";\nimport authService from \"../../../auth/auth.service\";\nimport { BaseController } from \"../../base.controller\";\nimport {\n addPrismaQueryOptionsToRequest,\n handleRequestBodyValidationAndTransformation,\n sendResponse,\n} from \"../../base.middlewares\";\nimport { processMiddleware } from \"../../../../utils/helpers/routers.helpers\";\n\nexport function setupRouters(\n models: string[],\n router: Router,\n arkosConfigs: ArkosConfig\n) {\n return models.map(async (model) => {\n const modelNameInKebab = kebabCase(model);\n const modelModules = await importPrismaModelModules(\n modelNameInKebab,\n arkosConfigs\n );\n const {\n middlewares,\n authConfigs,\n prismaQueryOptions,\n router: customRouterModule,\n dtos,\n schemas,\n } = modelModules;\n\n const routeName = pluralize.plural(modelNameInKebab);\n const controller = new BaseController(model);\n\n const routerConfig: RouterConfig = customRouterModule?.config || {};\n\n // Check if custom implementation exists\n const customRouter = (customRouterModule as Router) || {};\n const hasCustomImplementation = (path: string, method: string) => {\n return customRouter.stack?.some(\n (layer) =>\n (layer.path === `/api/${path}` ||\n layer.path === `api/${path}` ||\n layer.path === `api/${path}/` ||\n layer.path === `/api/${path}/`) &&\n layer.method.toLowerCase() === method.toLowerCase()\n );\n };\n\n // Helper to get the correct schema or DTO based on Arkos Config\n const getValidationSchemaOrDto = (key: string) => {\n const validationConfigs = arkosConfigs?.validation;\n if (validationConfigs?.resolver === \"class-validator\") {\n return dtos?.[key];\n } else if (validationConfigs?.resolver === \"zod\") {\n return schemas?.[key];\n }\n return undefined;\n };\n\n // If the custom router has its own routes, add them\n if (customRouterModule?.default && !routerConfig?.disable)\n router.use(`/${routeName}`, customRouterModule.default);\n\n // POST /{routeName} - Create One\n if (\n !isEndpointDisabled(routerConfig, \"createOne\") &&\n !hasCustomImplementation(`/${routeName}`, \"post\")\n ) {\n router.post(\n `/${routeName}`,\n authService.handleAuthenticationControl(\n \"Create\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Create\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"create\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"createOne\"\n ),\n ...processMiddleware(middlewares?.beforeCreateOne),\n controller.createOne,\n ...processMiddleware(middlewares?.afterCreateOne),\n sendResponse\n );\n }\n\n // GET /{routeName} - Find Many\n if (\n !isEndpointDisabled(routerConfig, \"findMany\") &&\n !hasCustomImplementation(`/${routeName}`, \"get\")\n ) {\n router.get(\n `/${routeName}`,\n authService.handleAuthenticationControl(\n \"View\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"View\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"findMany\"\n ),\n ...processMiddleware(middlewares?.beforeFindMany),\n controller.findMany,\n ...processMiddleware(middlewares?.afterFindMany),\n sendResponse\n );\n }\n\n // POST /{routeName}/many - Create Many\n if (\n !isEndpointDisabled(routerConfig, \"createMany\") &&\n !hasCustomImplementation(`/${routeName}/many`, \"post\")\n ) {\n router.post(\n `/${routeName}/many`,\n authService.handleAuthenticationControl(\n \"Create\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Create\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"createMany\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"createMany\"\n ),\n ...processMiddleware(middlewares?.beforeCreateMany),\n controller.createMany,\n ...processMiddleware(middlewares?.afterCreateMany),\n sendResponse\n );\n }\n\n // PATCH /{routeName}/many - Update Many\n if (\n !isEndpointDisabled(routerConfig, \"updateMany\") &&\n !hasCustomImplementation(`/${routeName}/many`, \"patch\")\n ) {\n router.patch(\n `/${routeName}/many`,\n authService.handleAuthenticationControl(\n \"Update\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Update\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"updateMany\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"updateMany\"\n ),\n ...processMiddleware(middlewares?.beforeUpdateMany),\n controller.updateMany,\n ...processMiddleware(middlewares?.afterUpdateMany),\n sendResponse\n );\n }\n\n // DELETE /{routeName}/many - Delete Many\n if (\n !isEndpointDisabled(routerConfig, \"deleteMany\") &&\n !hasCustomImplementation(`/${routeName}/many`, \"delete\")\n ) {\n router.delete(\n `/${routeName}/many`,\n authService.handleAuthenticationControl(\n \"Delete\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Delete\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"deleteMany\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"deleteMany\"\n ),\n ...processMiddleware(middlewares?.beforeDeleteMany),\n controller.deleteMany,\n ...processMiddleware(middlewares?.afterDeleteMany),\n sendResponse\n );\n }\n\n // GET /{routeName}/:id - Find One\n if (\n !isEndpointDisabled(routerConfig, \"findOne\") &&\n !hasCustomImplementation(`/${routeName}/:id`, \"get\")\n ) {\n router.get(\n `/${routeName}/:id`,\n authService.handleAuthenticationControl(\n \"View\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"View\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"findOne\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"findOne\"\n ),\n ...processMiddleware(middlewares?.beforeFindOne),\n controller.findOne,\n ...processMiddleware(middlewares?.afterFindOne),\n sendResponse\n );\n }\n\n // PATCH /{routeName}/:id - Update One\n if (\n !isEndpointDisabled(routerConfig, \"updateOne\") &&\n !hasCustomImplementation(`/${routeName}/:id`, \"patch\")\n ) {\n router.patch(\n `/${routeName}/:id`,\n authService.handleAuthenticationControl(\n \"Update\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Update\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"update\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"updateOne\"\n ),\n ...processMiddleware(middlewares?.beforeUpdateOne),\n controller.updateOne,\n ...processMiddleware(middlewares?.afterUpdateOne),\n sendResponse\n );\n }\n\n // DELETE /{routeName}/:id - Delete One\n if (\n !isEndpointDisabled(routerConfig, \"deleteOne\") &&\n !hasCustomImplementation(`/${routeName}/:id`, \"delete\")\n ) {\n router.delete(\n `/${routeName}/:id`,\n authService.handleAuthenticationControl(\n \"Delete\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Delete\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"delete\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"deleteOne\"\n ),\n ...processMiddleware(middlewares?.beforeDeleteOne),\n controller.deleteOne,\n ...processMiddleware(middlewares?.afterDeleteOne),\n sendResponse\n );\n }\n });\n}\n\nexport function isEndpointDisabled(\n routerConfig: RouterConfig,\n endpoint: RouterEndpoint\n): boolean {\n if (!routerConfig?.disable) return false;\n\n if (routerConfig.disable === true) return true;\n\n if (typeof routerConfig.disable === \"object\")\n return routerConfig.disable[endpoint] === true;\n\n return false;\n}\n\nexport function isParentEndpointAllowed(\n routerConfig: any,\n endpoint: string\n): boolean {\n if (!routerConfig?.parent) return false;\n\n const parentEndpoints = routerConfig.parent.endpoints;\n if (parentEndpoints === \"*\") return true;\n if (Array.isArray(parentEndpoints)) return parentEndpoints.includes(endpoint);\n\n return true; // Default to allow if not specified\n}\n"]}
1
+ {"version":3,"file":"base.router.helpers.js","sourceRoot":"","sources":["../../../../../../src/modules/base/utils/helpers/base.router.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { Router } from \"express\";\nimport pluralize from \"pluralize\";\nimport { ArkosConfig, RouterConfig } from \"../../../../exports\";\nimport { kebabCase } from \"../../../../exports/utils\";\nimport { PrismaQueryOptions } from \"../../../../types\";\nimport { RouterEndpoint } from \"../../../../types/router-config\";\nimport { getModuleComponents } from \"../../../../utils/dynamic-loader\";\nimport authService from \"../../../auth/auth.service\";\nimport { BaseController } from \"../../base.controller\";\nimport {\n addPrismaQueryOptionsToRequest,\n handleRequestBodyValidationAndTransformation,\n sendResponse,\n} from \"../../base.middlewares\";\nimport { processMiddleware } from \"../../../../utils/helpers/routers.helpers\";\n\nexport async function setupRouters(\n models: string[],\n router: Router,\n arkosConfigs: ArkosConfig\n) {\n return models.map(async (model) => {\n const modelNameInKebab = kebabCase(model);\n const modelModules = getModuleComponents(modelNameInKebab) || {};\n\n const {\n interceptors,\n authConfigs,\n prismaQueryOptions,\n router: customRouterModule,\n dtos,\n schemas,\n } = modelModules;\n\n const routeName = pluralize.plural(modelNameInKebab);\n const controller = new BaseController(model);\n\n const routerConfig: RouterConfig = customRouterModule?.config || {};\n\n // Check if custom implementation exists\n const customRouter = (customRouterModule as Router) || {};\n const hasCustomImplementation = (path: string, method: string) => {\n return customRouter.stack?.some(\n (layer) =>\n (layer.path === `/api/${path}` ||\n layer.path === `api/${path}` ||\n layer.path === `api/${path}/` ||\n layer.path === `/api/${path}/`) &&\n layer.method.toLowerCase() === method.toLowerCase()\n );\n };\n\n // Helper to get the correct schema or DTO based on Arkos Config\n const getValidationSchemaOrDto = (key: string) => {\n const validationConfigs = arkosConfigs?.validation;\n if (validationConfigs?.resolver === \"class-validator\") {\n return dtos?.[key];\n } else if (validationConfigs?.resolver === \"zod\") {\n return schemas?.[key];\n }\n return undefined;\n };\n\n // If the custom router has its own routes, add them\n if (customRouterModule?.default && !routerConfig?.disable)\n router.use(`/${routeName}`, customRouterModule.default);\n\n // POST /{routeName} - Create One\n if (\n !isEndpointDisabled(routerConfig, \"createOne\") &&\n !hasCustomImplementation(`/${routeName}`, \"post\")\n ) {\n router.post(\n `/${routeName}`,\n authService.handleAuthenticationControl(\n \"Create\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Create\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"create\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"createOne\"\n ),\n ...processMiddleware(interceptors?.beforeCreateOne),\n controller.createOne,\n ...processMiddleware(interceptors?.afterCreateOne),\n sendResponse,\n ...processMiddleware(interceptors?.onCreateOneError)\n );\n }\n\n // GET /{routeName} - Find Many\n if (\n !isEndpointDisabled(routerConfig, \"findMany\") &&\n !hasCustomImplementation(`/${routeName}`, \"get\")\n ) {\n router.get(\n `/${routeName}`,\n authService.handleAuthenticationControl(\n \"View\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"View\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"findMany\"\n ),\n ...processMiddleware(interceptors?.beforeFindMany),\n controller.findMany,\n ...processMiddleware(interceptors?.afterFindMany),\n sendResponse,\n ...processMiddleware(interceptors?.onFindManyError)\n );\n }\n\n // POST /{routeName}/many - Create Many\n if (\n !isEndpointDisabled(routerConfig, \"createMany\") &&\n !hasCustomImplementation(`/${routeName}/many`, \"post\")\n ) {\n router.post(\n `/${routeName}/many`,\n authService.handleAuthenticationControl(\n \"Create\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Create\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"createMany\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"createMany\"\n ),\n ...processMiddleware(interceptors?.beforeCreateMany),\n controller.createMany,\n ...processMiddleware(interceptors?.afterCreateMany),\n sendResponse,\n ...processMiddleware(interceptors?.onCreateManyError)\n );\n }\n\n // PATCH /{routeName}/many - Update Many\n if (\n !isEndpointDisabled(routerConfig, \"updateMany\") &&\n !hasCustomImplementation(`/${routeName}/many`, \"patch\")\n ) {\n router.patch(\n `/${routeName}/many`,\n authService.handleAuthenticationControl(\n \"Update\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Update\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"updateMany\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"updateMany\"\n ),\n ...processMiddleware(interceptors?.beforeUpdateMany),\n controller.updateMany,\n ...processMiddleware(interceptors?.afterUpdateMany),\n sendResponse,\n ...processMiddleware(interceptors?.onUpdateManyError)\n );\n }\n\n // DELETE /{routeName}/many - Delete Many\n if (\n !isEndpointDisabled(routerConfig, \"deleteMany\") &&\n !hasCustomImplementation(`/${routeName}/many`, \"delete\")\n ) {\n router.delete(\n `/${routeName}/many`,\n authService.handleAuthenticationControl(\n \"Delete\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Delete\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"deleteMany\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"deleteMany\"\n ),\n ...processMiddleware(interceptors?.beforeDeleteMany),\n controller.deleteMany,\n ...processMiddleware(interceptors?.afterDeleteMany),\n sendResponse,\n ...processMiddleware(interceptors?.onDeleteManyError)\n );\n }\n\n // GET /{routeName}/:id - Find One\n if (\n !isEndpointDisabled(routerConfig, \"findOne\") &&\n !hasCustomImplementation(`/${routeName}/:id`, \"get\")\n ) {\n router.get(\n `/${routeName}/:id`,\n authService.handleAuthenticationControl(\n \"View\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"View\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"findOne\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"findOne\"\n ),\n ...processMiddleware(interceptors?.beforeFindOne),\n controller.findOne,\n ...processMiddleware(interceptors?.afterFindOne),\n sendResponse,\n ...processMiddleware(interceptors?.onFindOneError)\n );\n }\n\n // PATCH /{routeName}/:id - Update One\n if (\n !isEndpointDisabled(routerConfig, \"updateOne\") &&\n !hasCustomImplementation(`/${routeName}/:id`, \"patch\")\n ) {\n router.patch(\n `/${routeName}/:id`,\n authService.handleAuthenticationControl(\n \"Update\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Update\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"update\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"updateOne\"\n ),\n ...processMiddleware(interceptors?.beforeUpdateOne),\n controller.updateOne,\n ...processMiddleware(interceptors?.afterUpdateOne),\n sendResponse,\n ...processMiddleware(interceptors?.onUpdateOneError)\n );\n }\n\n // DELETE /{routeName}/:id - Delete One\n if (\n !isEndpointDisabled(routerConfig, \"deleteOne\") &&\n !hasCustomImplementation(`/${routeName}/:id`, \"delete\")\n ) {\n router.delete(\n `/${routeName}/:id`,\n authService.handleAuthenticationControl(\n \"Delete\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Delete\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"delete\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"deleteOne\"\n ),\n ...processMiddleware(interceptors?.beforeDeleteOne),\n controller.deleteOne,\n ...processMiddleware(interceptors?.afterDeleteOne),\n sendResponse,\n ...processMiddleware(interceptors?.onDeleteOneError)\n );\n }\n });\n}\n\nexport function isEndpointDisabled(\n routerConfig: RouterConfig,\n endpoint: RouterEndpoint\n): boolean {\n if (!routerConfig?.disable) return false;\n\n if (routerConfig.disable === true) return true;\n\n if (typeof routerConfig.disable === \"object\")\n return routerConfig.disable[endpoint] === true;\n\n return false;\n}\n\nexport function isParentEndpointAllowed(\n routerConfig: any,\n endpoint: string\n): boolean {\n if (!routerConfig?.parent) return false;\n\n const parentEndpoints = routerConfig.parent.endpoints;\n if (parentEndpoints === \"*\") return true;\n if (Array.isArray(parentEndpoints)) return parentEndpoints.includes(endpoint);\n\n return true; // Default to allow if not specified\n}\n"]}