arkos 2.0.0-next.17 → 2.0.0-next.19

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 (432) hide show
  1. package/cli.js +8 -8
  2. package/dist/esm/app.js +3 -3
  3. package/dist/esm/app.js.map +1 -1
  4. package/dist/esm/components/arkos-gateway/arkos-gateway.js +5 -4
  5. package/dist/esm/components/arkos-gateway/arkos-gateway.js.map +1 -1
  6. package/dist/esm/components/arkos-gateway/socket-extensions.js +7 -0
  7. package/dist/esm/components/arkos-gateway/socket-extensions.js.map +1 -1
  8. package/dist/esm/components/arkos-gateway/utils/memory-gateway-store.js +2 -4
  9. package/dist/esm/components/arkos-gateway/utils/memory-gateway-store.js.map +1 -1
  10. package/dist/esm/components/arkos-gateway/utils/multi-tier-arkos-gateway-store.js +1 -0
  11. package/dist/esm/components/arkos-gateway/utils/multi-tier-arkos-gateway-store.js.map +1 -1
  12. package/dist/esm/components/arkos-loadable-registry/index.js +1 -3
  13. package/dist/esm/components/arkos-loadable-registry/index.js.map +1 -1
  14. package/dist/esm/components/arkos-route-hook/index.js +2 -1
  15. package/dist/esm/components/arkos-route-hook/index.js.map +1 -1
  16. package/dist/esm/components/arkos-route-hook/reader.js.map +1 -1
  17. package/dist/esm/components/arkos-route-hook/types.js.map +1 -1
  18. package/dist/esm/exports/index.js +2 -3
  19. package/dist/esm/exports/index.js.map +1 -1
  20. package/dist/esm/exports/middlewares/index.js +1 -1
  21. package/dist/esm/exports/middlewares/index.js.map +1 -1
  22. package/dist/esm/exports/services/index.js.map +1 -1
  23. package/dist/esm/modules/auth/auth.controller.js +213 -221
  24. package/dist/esm/modules/auth/auth.controller.js.map +1 -1
  25. package/dist/esm/modules/auth/auth.service.js +11 -58
  26. package/dist/esm/modules/auth/auth.service.js.map +1 -1
  27. package/dist/esm/modules/auth/utils/auth-prisma-json-schema-generator.js +1 -0
  28. package/dist/esm/modules/auth/utils/auth-prisma-json-schema-generator.js.map +1 -1
  29. package/dist/esm/modules/auth/utils/services/auth-action.service.js +10 -12
  30. package/dist/esm/modules/auth/utils/services/auth-action.service.js.map +1 -1
  31. package/dist/esm/modules/base/base.controller.js +179 -177
  32. package/dist/esm/modules/base/base.controller.js.map +1 -1
  33. package/dist/esm/modules/base/base.middlewares.js +6 -21
  34. package/dist/esm/modules/base/base.middlewares.js.map +1 -1
  35. package/dist/esm/modules/base/base.service.js +28 -72
  36. package/dist/esm/modules/base/base.service.js.map +1 -1
  37. package/dist/esm/modules/base/types/base.service.types.js.map +1 -1
  38. package/dist/esm/modules/base/utils/error-prettifier.js +26 -30
  39. package/dist/esm/modules/base/utils/error-prettifier.js.map +1 -1
  40. package/dist/esm/modules/email/email.service.js +2 -2
  41. package/dist/esm/modules/email/email.service.js.map +1 -1
  42. package/dist/esm/modules/error-handler/utils/app-error.js +5 -1
  43. package/dist/esm/modules/error-handler/utils/app-error.js.map +1 -1
  44. package/dist/esm/modules/file-upload/file-upload.controller.js +203 -205
  45. package/dist/esm/modules/file-upload/file-upload.controller.js.map +1 -1
  46. package/dist/esm/modules/file-upload/file-upload.router.js +3 -3
  47. package/dist/esm/modules/file-upload/file-upload.router.js.map +1 -1
  48. package/dist/esm/modules/file-upload/file-upload.service.js +12 -7
  49. package/dist/esm/modules/file-upload/file-upload.service.js.map +1 -1
  50. package/dist/esm/modules/file-upload/utils/file-upload-json-schema-generator.js +1 -1
  51. package/dist/esm/modules/file-upload/utils/file-upload-json-schema-generator.js.map +1 -1
  52. package/dist/esm/modules/swagger/swagger.router.js.map +1 -1
  53. package/dist/esm/modules/swagger/utils/helpers/openapi-schema-converter.js +1 -0
  54. package/dist/esm/modules/swagger/utils/helpers/openapi-schema-converter.js.map +1 -1
  55. package/dist/esm/types/arkos.js.map +1 -1
  56. package/dist/esm/types/index.js.map +1 -1
  57. package/dist/esm/types/new-arkos-config.js.map +1 -1
  58. package/dist/esm/types/router-config.js.map +1 -1
  59. package/dist/esm/types/validation/validation-manager.js +21 -22
  60. package/dist/esm/types/validation/validation-manager.js.map +1 -1
  61. package/dist/esm/utils/arkos-router/index.js +1 -6
  62. package/dist/esm/utils/arkos-router/index.js.map +1 -1
  63. package/dist/esm/utils/arkos-router/route-config-registry.js +2 -3
  64. package/dist/esm/utils/arkos-router/route-config-registry.js.map +1 -1
  65. package/dist/esm/utils/arkos-router/types/index.js.map +1 -1
  66. package/dist/esm/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js +4 -0
  67. package/dist/esm/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js.map +1 -1
  68. package/dist/esm/utils/arkos-router/utils/helpers/index.js +86 -43
  69. package/dist/esm/utils/arkos-router/utils/helpers/index.js.map +1 -1
  70. package/dist/esm/utils/arkos-router/utils/helpers/upload-manager.js +12 -14
  71. package/dist/esm/utils/arkos-router/utils/helpers/upload-manager.js.map +1 -1
  72. package/dist/esm/utils/bundler.js +6 -6
  73. package/dist/esm/utils/bundler.js.map +1 -1
  74. package/dist/esm/utils/cli/dev.js +4 -17
  75. package/dist/esm/utils/cli/dev.js.map +1 -1
  76. package/dist/esm/utils/cli/generate.js +0 -90
  77. package/dist/esm/utils/cli/generate.js.map +1 -1
  78. package/dist/esm/utils/cli/index.js +9 -73
  79. package/dist/esm/utils/cli/index.js.map +1 -1
  80. package/dist/esm/utils/cli/prisma-generate.js +8 -37
  81. package/dist/esm/utils/cli/prisma-generate.js.map +1 -1
  82. package/dist/esm/utils/cli/utils/cli.helpers.js +1 -1
  83. package/dist/esm/utils/cli/utils/smart-fs-watcher.js +3 -0
  84. package/dist/esm/utils/cli/utils/smart-fs-watcher.js.map +1 -1
  85. package/dist/esm/utils/cli/utils/template-generator/templates/generate-multiple-components.js +0 -51
  86. package/dist/esm/utils/cli/utils/template-generator/templates/generate-multiple-components.js.map +1 -1
  87. package/dist/esm/utils/cli/utils/template-generator/templates/router-template.js +11 -4
  88. package/dist/esm/utils/cli/utils/template-generator/templates/router-template.js.map +1 -1
  89. package/dist/esm/utils/cli/utils/template-generator/templates/service-template.js +2 -2
  90. package/dist/esm/utils/cli/utils/template-generator/templates/service-template.js.map +1 -1
  91. package/dist/esm/utils/cli/utils/template-generators.js +27 -24
  92. package/dist/esm/utils/cli/utils/template-generators.js.map +1 -1
  93. package/dist/esm/utils/dynamic-loader.js +2 -1
  94. package/dist/esm/utils/dynamic-loader.js.map +1 -1
  95. package/dist/esm/utils/features/api.features.js +24 -20
  96. package/dist/esm/utils/features/api.features.js.map +1 -1
  97. package/dist/esm/utils/features/port-and-host-allocator.js +4 -3
  98. package/dist/esm/utils/features/port-and-host-allocator.js.map +1 -1
  99. package/dist/esm/utils/helpers/arkos-config.helpers.js.map +1 -1
  100. package/dist/esm/utils/helpers/query-parser.helpers.js +7 -22
  101. package/dist/esm/utils/helpers/query-parser.helpers.js.map +1 -1
  102. package/dist/esm/utils/initialize-app.js +1 -1
  103. package/dist/esm/utils/initialize-app.js.map +1 -1
  104. package/dist/esm/utils/prisma/prisma-json-schema-generator.js +20 -21
  105. package/dist/esm/utils/prisma/prisma-json-schema-generator.js.map +1 -1
  106. package/dist/esm/utils/prisma/prisma-schema-parser.js +14 -8
  107. package/dist/esm/utils/prisma/prisma-schema-parser.js.map +1 -1
  108. package/dist/esm/utils/validate-schema.js +23 -21
  109. package/dist/esm/utils/validate-schema.js.map +1 -1
  110. package/dist/types/app.d.ts +5 -1
  111. package/dist/types/components/arkos-route-hook/index.d.ts +7 -1
  112. package/dist/types/components/arkos-route-hook/reader.d.ts +3 -6
  113. package/dist/types/components/arkos-route-hook/types.d.ts +8 -10
  114. package/dist/types/exports/index.d.ts +3 -5
  115. package/dist/types/exports/middlewares/index.d.ts +1 -1
  116. package/dist/types/exports/services/index.d.ts +2 -2
  117. package/dist/types/modules/auth/auth.service.d.ts +1 -40
  118. package/dist/types/modules/base/base.middlewares.d.ts +1 -10
  119. package/dist/types/modules/base/base.service.d.ts +1 -8
  120. package/dist/types/modules/base/types/base.service.types.d.ts +11 -0
  121. package/dist/types/modules/swagger/swagger.router.d.ts +1 -2
  122. package/dist/types/types/arkos.d.ts +1 -2
  123. package/dist/types/types/index.d.ts +3 -3
  124. package/dist/types/types/new-arkos-config.d.ts +0 -14
  125. package/dist/types/types/router-config.d.ts +0 -111
  126. package/dist/types/utils/arkos-router/types/index.d.ts +3 -3
  127. package/dist/types/utils/arkos-router/utils/helpers/index.d.ts +2 -6
  128. package/dist/types/utils/cli/generate.d.ts +11 -10
  129. package/dist/types/utils/dynamic-loader.d.ts +2 -2
  130. package/dist/types/utils/helpers/query-parser.helpers.d.ts +1 -1
  131. package/dist/types/utils/prisma/prisma-schema-parser.d.ts +1 -0
  132. package/package.json +56 -58
  133. package/dist/cjs/app.js +0 -114
  134. package/dist/cjs/app.js.map +0 -1
  135. package/dist/cjs/components/arkos-gateway/arkos-gateway.js +0 -344
  136. package/dist/cjs/components/arkos-gateway/arkos-gateway.js.map +0 -1
  137. package/dist/cjs/components/arkos-gateway/socket-extensions.js +0 -166
  138. package/dist/cjs/components/arkos-gateway/socket-extensions.js.map +0 -1
  139. package/dist/cjs/components/arkos-gateway/types.js +0 -7
  140. package/dist/cjs/components/arkos-gateway/types.js.map +0 -1
  141. package/dist/cjs/components/arkos-gateway/utils/helpers.js +0 -111
  142. package/dist/cjs/components/arkos-gateway/utils/helpers.js.map +0 -1
  143. package/dist/cjs/components/arkos-gateway/utils/memory-gateway-store.js +0 -51
  144. package/dist/cjs/components/arkos-gateway/utils/memory-gateway-store.js.map +0 -1
  145. package/dist/cjs/components/arkos-gateway/utils/multi-tier-arkos-gateway-store.js +0 -43
  146. package/dist/cjs/components/arkos-gateway/utils/multi-tier-arkos-gateway-store.js.map +0 -1
  147. package/dist/cjs/components/arkos-gateway/utils/rate-limiter.js +0 -17
  148. package/dist/cjs/components/arkos-gateway/utils/rate-limiter.js.map +0 -1
  149. package/dist/cjs/components/arkos-loadable-registry/index.js +0 -28
  150. package/dist/cjs/components/arkos-loadable-registry/index.js.map +0 -1
  151. package/dist/cjs/components/arkos-loadable-translator/index.js +0 -144
  152. package/dist/cjs/components/arkos-loadable-translator/index.js.map +0 -1
  153. package/dist/cjs/components/arkos-policy/index.js +0 -38
  154. package/dist/cjs/components/arkos-policy/index.js.map +0 -1
  155. package/dist/cjs/components/arkos-policy/types.js +0 -3
  156. package/dist/cjs/components/arkos-policy/types.js.map +0 -1
  157. package/dist/cjs/components/arkos-route-hook/index.js +0 -50
  158. package/dist/cjs/components/arkos-route-hook/index.js.map +0 -1
  159. package/dist/cjs/components/arkos-route-hook/reader.js +0 -47
  160. package/dist/cjs/components/arkos-route-hook/reader.js.map +0 -1
  161. package/dist/cjs/components/arkos-route-hook/types.js +0 -3
  162. package/dist/cjs/components/arkos-route-hook/types.js.map +0 -1
  163. package/dist/cjs/components/arkos-service-hook/index.js +0 -35
  164. package/dist/cjs/components/arkos-service-hook/index.js.map +0 -1
  165. package/dist/cjs/components/arkos-service-hook/reader.js +0 -30
  166. package/dist/cjs/components/arkos-service-hook/reader.js.map +0 -1
  167. package/dist/cjs/components/arkos-service-hook/types.js +0 -3
  168. package/dist/cjs/components/arkos-service-hook/types.js.map +0 -1
  169. package/dist/cjs/exports/auth/index.js +0 -6
  170. package/dist/cjs/exports/auth/index.js.map +0 -1
  171. package/dist/cjs/exports/config.js +0 -6
  172. package/dist/cjs/exports/config.js.map +0 -1
  173. package/dist/cjs/exports/controllers/index.js +0 -42
  174. package/dist/cjs/exports/controllers/index.js.map +0 -1
  175. package/dist/cjs/exports/error-handler/index.js +0 -26
  176. package/dist/cjs/exports/error-handler/index.js.map +0 -1
  177. package/dist/cjs/exports/index.js +0 -25
  178. package/dist/cjs/exports/index.js.map +0 -1
  179. package/dist/cjs/exports/middlewares/index.js +0 -7
  180. package/dist/cjs/exports/middlewares/index.js.map +0 -1
  181. package/dist/cjs/exports/prisma/index.js +0 -13
  182. package/dist/cjs/exports/prisma/index.js.map +0 -1
  183. package/dist/cjs/exports/services/index.js +0 -53
  184. package/dist/cjs/exports/services/index.js.map +0 -1
  185. package/dist/cjs/exports/utils/index.js +0 -26
  186. package/dist/cjs/exports/utils/index.js.map +0 -1
  187. package/dist/cjs/exports/validation/index.js +0 -11
  188. package/dist/cjs/exports/validation/index.js.map +0 -1
  189. package/dist/cjs/exports/websockets.js +0 -13
  190. package/dist/cjs/exports/websockets.js.map +0 -1
  191. package/dist/cjs/generated.js +0 -7
  192. package/dist/cjs/generated.js.map +0 -1
  193. package/dist/cjs/modules/auth/auth.controller.js +0 -254
  194. package/dist/cjs/modules/auth/auth.controller.js.map +0 -1
  195. package/dist/cjs/modules/auth/auth.router.js +0 -130
  196. package/dist/cjs/modules/auth/auth.router.js.map +0 -1
  197. package/dist/cjs/modules/auth/auth.service.js +0 -312
  198. package/dist/cjs/modules/auth/auth.service.js.map +0 -1
  199. package/dist/cjs/modules/auth/utils/auth-error-objects.js +0 -10
  200. package/dist/cjs/modules/auth/utils/auth-error-objects.js.map +0 -1
  201. package/dist/cjs/modules/auth/utils/auth-hooks-manager.js +0 -153
  202. package/dist/cjs/modules/auth/utils/auth-hooks-manager.js.map +0 -1
  203. package/dist/cjs/modules/auth/utils/auth-openapi-generator.js +0 -372
  204. package/dist/cjs/modules/auth/utils/auth-openapi-generator.js.map +0 -1
  205. package/dist/cjs/modules/auth/utils/auth-prisma-json-schema-generator.js +0 -101
  206. package/dist/cjs/modules/auth/utils/auth-prisma-json-schema-generator.js.map +0 -1
  207. package/dist/cjs/modules/auth/utils/docs-links.js +0 -9
  208. package/dist/cjs/modules/auth/utils/docs-links.js.map +0 -1
  209. package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +0 -83
  210. package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js.map +0 -1
  211. package/dist/cjs/modules/auth/utils/services/auth-action.service.js +0 -156
  212. package/dist/cjs/modules/auth/utils/services/auth-action.service.js.map +0 -1
  213. package/dist/cjs/modules/base/base.controller.js +0 -293
  214. package/dist/cjs/modules/base/base.controller.js.map +0 -1
  215. package/dist/cjs/modules/base/base.middlewares.js +0 -229
  216. package/dist/cjs/modules/base/base.middlewares.js.map +0 -1
  217. package/dist/cjs/modules/base/base.router.js +0 -126
  218. package/dist/cjs/modules/base/base.router.js.map +0 -1
  219. package/dist/cjs/modules/base/base.service.js +0 -371
  220. package/dist/cjs/modules/base/base.service.js.map +0 -1
  221. package/dist/cjs/modules/base/types/base.service.types.js +0 -3
  222. package/dist/cjs/modules/base/types/base.service.types.js.map +0 -1
  223. package/dist/cjs/modules/base/utils/error-prettifier.js +0 -188
  224. package/dist/cjs/modules/base/utils/error-prettifier.js.map +0 -1
  225. package/dist/cjs/modules/base/utils/helpers/base.middlewares.helpers.js +0 -49
  226. package/dist/cjs/modules/base/utils/helpers/base.middlewares.helpers.js.map +0 -1
  227. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +0 -243
  228. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js.map +0 -1
  229. package/dist/cjs/modules/base/utils/model-openapi-generator.js +0 -443
  230. package/dist/cjs/modules/base/utils/model-openapi-generator.js.map +0 -1
  231. package/dist/cjs/modules/base/utils/router-validator.js +0 -13
  232. package/dist/cjs/modules/base/utils/router-validator.js.map +0 -1
  233. package/dist/cjs/modules/base/utils/service-hooks-manager.js +0 -19
  234. package/dist/cjs/modules/base/utils/service-hooks-manager.js.map +0 -1
  235. package/dist/cjs/modules/debugger/debugger.service.js +0 -59
  236. package/dist/cjs/modules/debugger/debugger.service.js.map +0 -1
  237. package/dist/cjs/modules/email/email.service.js +0 -113
  238. package/dist/cjs/modules/email/email.service.js.map +0 -1
  239. package/dist/cjs/modules/error-handler/error-handler.controller.js +0 -70
  240. package/dist/cjs/modules/error-handler/error-handler.controller.js.map +0 -1
  241. package/dist/cjs/modules/error-handler/utils/app-error.js +0 -27
  242. package/dist/cjs/modules/error-handler/utils/app-error.js.map +0 -1
  243. package/dist/cjs/modules/error-handler/utils/catch-async.js +0 -21
  244. package/dist/cjs/modules/error-handler/utils/catch-async.js.map +0 -1
  245. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +0 -104
  246. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js.map +0 -1
  247. package/dist/cjs/modules/error-handler/utils/errors.js +0 -158
  248. package/dist/cjs/modules/error-handler/utils/errors.js.map +0 -1
  249. package/dist/cjs/modules/error-handler/utils/get-handled-error.js +0 -107
  250. package/dist/cjs/modules/error-handler/utils/get-handled-error.js.map +0 -1
  251. package/dist/cjs/modules/error-handler/utils/multer-error-handler.js +0 -39
  252. package/dist/cjs/modules/error-handler/utils/multer-error-handler.js.map +0 -1
  253. package/dist/cjs/modules/file-upload/file-upload.controller.js +0 -252
  254. package/dist/cjs/modules/file-upload/file-upload.controller.js.map +0 -1
  255. package/dist/cjs/modules/file-upload/file-upload.router.js +0 -103
  256. package/dist/cjs/modules/file-upload/file-upload.router.js.map +0 -1
  257. package/dist/cjs/modules/file-upload/file-upload.service.js +0 -343
  258. package/dist/cjs/modules/file-upload/file-upload.service.js.map +0 -1
  259. package/dist/cjs/modules/file-upload/utils/file-upload-json-schema-generator.js +0 -351
  260. package/dist/cjs/modules/file-upload/utils/file-upload-json-schema-generator.js.map +0 -1
  261. package/dist/cjs/modules/file-upload/utils/helpers/file-extensions.js +0 -134
  262. package/dist/cjs/modules/file-upload/utils/helpers/file-extensions.js.map +0 -1
  263. package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js +0 -100
  264. package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js.map +0 -1
  265. package/dist/cjs/modules/swagger/swagger.router.js +0 -115
  266. package/dist/cjs/modules/swagger/swagger.router.js.map +0 -1
  267. package/dist/cjs/modules/swagger/utils/get-open-api-login-html.js +0 -308
  268. package/dist/cjs/modules/swagger/utils/get-open-api-login-html.js.map +0 -1
  269. package/dist/cjs/modules/swagger/utils/helpers/class-validator-to-json-schema.js +0 -53
  270. package/dist/cjs/modules/swagger/utils/helpers/class-validator-to-json-schema.js.map +0 -1
  271. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js +0 -72
  272. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js.map +0 -1
  273. package/dist/cjs/modules/swagger/utils/helpers/openapi-schema-converter.js +0 -333
  274. package/dist/cjs/modules/swagger/utils/helpers/openapi-schema-converter.js.map +0 -1
  275. package/dist/cjs/package.json +0 -3
  276. package/dist/cjs/server.js +0 -60
  277. package/dist/cjs/server.js.map +0 -1
  278. package/dist/cjs/types/arkos-config/utils.js +0 -3
  279. package/dist/cjs/types/arkos-config/utils.js.map +0 -1
  280. package/dist/cjs/types/arkos-prisma-input.js +0 -3
  281. package/dist/cjs/types/arkos-prisma-input.js.map +0 -1
  282. package/dist/cjs/types/arkos.js +0 -3
  283. package/dist/cjs/types/arkos.js.map +0 -1
  284. package/dist/cjs/types/auth.js +0 -3
  285. package/dist/cjs/types/auth.js.map +0 -1
  286. package/dist/cjs/types/index.js +0 -3
  287. package/dist/cjs/types/index.js.map +0 -1
  288. package/dist/cjs/types/new-arkos-config.js +0 -3
  289. package/dist/cjs/types/new-arkos-config.js.map +0 -1
  290. package/dist/cjs/types/router-config.js +0 -3
  291. package/dist/cjs/types/router-config.js.map +0 -1
  292. package/dist/cjs/types/upload.js +0 -3
  293. package/dist/cjs/types/upload.js.map +0 -1
  294. package/dist/cjs/types/validation/validation-manager.js +0 -55
  295. package/dist/cjs/types/validation/validation-manager.js.map +0 -1
  296. package/dist/cjs/types/validation/validator.js +0 -3
  297. package/dist/cjs/types/validation/validator.js.map +0 -1
  298. package/dist/cjs/utils/arkos-env.js +0 -9
  299. package/dist/cjs/utils/arkos-env.js.map +0 -1
  300. package/dist/cjs/utils/arkos-router/arkos-router-openapi-manager.js +0 -160
  301. package/dist/cjs/utils/arkos-router/arkos-router-openapi-manager.js.map +0 -1
  302. package/dist/cjs/utils/arkos-router/index.js +0 -165
  303. package/dist/cjs/utils/arkos-router/index.js.map +0 -1
  304. package/dist/cjs/utils/arkos-router/route-config-registry.js +0 -16
  305. package/dist/cjs/utils/arkos-router/route-config-registry.js.map +0 -1
  306. package/dist/cjs/utils/arkos-router/route-config-validator.js +0 -56
  307. package/dist/cjs/utils/arkos-router/route-config-validator.js.map +0 -1
  308. package/dist/cjs/utils/arkos-router/types/body-parser-config.js +0 -3
  309. package/dist/cjs/utils/arkos-router/types/body-parser-config.js.map +0 -1
  310. package/dist/cjs/utils/arkos-router/types/index.js +0 -3
  311. package/dist/cjs/utils/arkos-router/types/index.js.map +0 -1
  312. package/dist/cjs/utils/arkos-router/types/openapi-config.js +0 -3
  313. package/dist/cjs/utils/arkos-router/types/openapi-config.js.map +0 -1
  314. package/dist/cjs/utils/arkos-router/types/upload-config.js +0 -3
  315. package/dist/cjs/utils/arkos-router/types/upload-config.js.map +0 -1
  316. package/dist/cjs/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js +0 -190
  317. package/dist/cjs/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js.map +0 -1
  318. package/dist/cjs/utils/arkos-router/utils/helpers/index.js +0 -179
  319. package/dist/cjs/utils/arkos-router/utils/helpers/index.js.map +0 -1
  320. package/dist/cjs/utils/arkos-router/utils/helpers/upload-manager.js +0 -560
  321. package/dist/cjs/utils/arkos-router/utils/helpers/upload-manager.js.map +0 -1
  322. package/dist/cjs/utils/bundler.js +0 -163
  323. package/dist/cjs/utils/bundler.js.map +0 -1
  324. package/dist/cjs/utils/cli/build.js +0 -208
  325. package/dist/cjs/utils/cli/build.js.map +0 -1
  326. package/dist/cjs/utils/cli/dev.js +0 -131
  327. package/dist/cjs/utils/cli/dev.js.map +0 -1
  328. package/dist/cjs/utils/cli/export-auth-action.js +0 -80
  329. package/dist/cjs/utils/cli/export-auth-action.js.map +0 -1
  330. package/dist/cjs/utils/cli/generate.js +0 -333
  331. package/dist/cjs/utils/cli/generate.js.map +0 -1
  332. package/dist/cjs/utils/cli/index.js +0 -259
  333. package/dist/cjs/utils/cli/index.js.map +0 -1
  334. package/dist/cjs/utils/cli/prisma-generate.js +0 -112
  335. package/dist/cjs/utils/cli/prisma-generate.js.map +0 -1
  336. package/dist/cjs/utils/cli/start.js +0 -83
  337. package/dist/cjs/utils/cli/start.js.map +0 -1
  338. package/dist/cjs/utils/cli/utils/cli.helpers.js +0 -24
  339. package/dist/cjs/utils/cli/utils/cli.helpers.js.map +0 -1
  340. package/dist/cjs/utils/cli/utils/runtime-cli-commander.js +0 -118
  341. package/dist/cjs/utils/cli/utils/runtime-cli-commander.js.map +0 -1
  342. package/dist/cjs/utils/cli/utils/smart-fs-watcher.js +0 -73
  343. package/dist/cjs/utils/cli/utils/smart-fs-watcher.js.map +0 -1
  344. package/dist/cjs/utils/cli/utils/template-generator/templates/class-validator-dto-generator.js +0 -846
  345. package/dist/cjs/utils/cli/utils/template-generator/templates/class-validator-dto-generator.js.map +0 -1
  346. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js +0 -64
  347. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +0 -1
  348. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-multiple-components.js +0 -242
  349. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-multiple-components.js.map +0 -1
  350. package/dist/cjs/utils/cli/utils/template-generator/templates/policy-template.js +0 -51
  351. package/dist/cjs/utils/cli/utils/template-generator/templates/policy-template.js.map +0 -1
  352. package/dist/cjs/utils/cli/utils/template-generator/templates/router-template.js +0 -23
  353. package/dist/cjs/utils/cli/utils/template-generator/templates/router-template.js.map +0 -1
  354. package/dist/cjs/utils/cli/utils/template-generator/templates/service-template.js +0 -50
  355. package/dist/cjs/utils/cli/utils/template-generator/templates/service-template.js.map +0 -1
  356. package/dist/cjs/utils/cli/utils/template-generator/templates/zod-schema-generator.js +0 -545
  357. package/dist/cjs/utils/cli/utils/template-generator/templates/zod-schema-generator.js.map +0 -1
  358. package/dist/cjs/utils/cli/utils/template-generators.js +0 -62
  359. package/dist/cjs/utils/cli/utils/template-generators.js.map +0 -1
  360. package/dist/cjs/utils/cli/utils/watermark-stamper.js +0 -26
  361. package/dist/cjs/utils/cli/utils/watermark-stamper.js.map +0 -1
  362. package/dist/cjs/utils/define-config.js +0 -60
  363. package/dist/cjs/utils/define-config.js.map +0 -1
  364. package/dist/cjs/utils/docs-links.js +0 -5
  365. package/dist/cjs/utils/docs-links.js.map +0 -1
  366. package/dist/cjs/utils/dotenv.helpers.js +0 -46
  367. package/dist/cjs/utils/dotenv.helpers.js.map +0 -1
  368. package/dist/cjs/utils/dynamic-loader.js +0 -22
  369. package/dist/cjs/utils/dynamic-loader.js.map +0 -1
  370. package/dist/cjs/utils/expand-env.js +0 -72
  371. package/dist/cjs/utils/expand-env.js.map +0 -1
  372. package/dist/cjs/utils/features/api.features.js +0 -216
  373. package/dist/cjs/utils/features/api.features.js.map +0 -1
  374. package/dist/cjs/utils/features/port-and-host-allocator.js +0 -129
  375. package/dist/cjs/utils/features/port-and-host-allocator.js.map +0 -1
  376. package/dist/cjs/utils/helpers/api.features.helpers.js +0 -347
  377. package/dist/cjs/utils/helpers/api.features.helpers.js.map +0 -1
  378. package/dist/cjs/utils/helpers/arkos-config.helpers.js +0 -106
  379. package/dist/cjs/utils/helpers/arkos-config.helpers.js.map +0 -1
  380. package/dist/cjs/utils/helpers/change-case.helpers.js +0 -177
  381. package/dist/cjs/utils/helpers/change-case.helpers.js.map +0 -1
  382. package/dist/cjs/utils/helpers/deepmerge.helper.js +0 -115
  383. package/dist/cjs/utils/helpers/deepmerge.helper.js.map +0 -1
  384. package/dist/cjs/utils/helpers/exit-error.js +0 -13
  385. package/dist/cjs/utils/helpers/exit-error.js.map +0 -1
  386. package/dist/cjs/utils/helpers/fs.helpers.js +0 -52
  387. package/dist/cjs/utils/helpers/fs.helpers.js.map +0 -1
  388. package/dist/cjs/utils/helpers/global.helpers.js +0 -106
  389. package/dist/cjs/utils/helpers/global.helpers.js.map +0 -1
  390. package/dist/cjs/utils/helpers/prisma.helpers.js +0 -56
  391. package/dist/cjs/utils/helpers/prisma.helpers.js.map +0 -1
  392. package/dist/cjs/utils/helpers/query-parser.helpers.js +0 -69
  393. package/dist/cjs/utils/helpers/query-parser.helpers.js.map +0 -1
  394. package/dist/cjs/utils/helpers/routers.helpers.js +0 -36
  395. package/dist/cjs/utils/helpers/routers.helpers.js.map +0 -1
  396. package/dist/cjs/utils/helpers/text.helpers.js +0 -28
  397. package/dist/cjs/utils/helpers/text.helpers.js.map +0 -1
  398. package/dist/cjs/utils/helpers/url-helpers.js +0 -14
  399. package/dist/cjs/utils/helpers/url-helpers.js.map +0 -1
  400. package/dist/cjs/utils/initialize-app.js +0 -80
  401. package/dist/cjs/utils/initialize-app.js.map +0 -1
  402. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +0 -366
  403. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js.map +0 -1
  404. package/dist/cjs/utils/prisma/prisma-schema-parser.js +0 -380
  405. package/dist/cjs/utils/prisma/prisma-schema-parser.js.map +0 -1
  406. package/dist/cjs/utils/prisma/types.js +0 -3
  407. package/dist/cjs/utils/prisma/types.js.map +0 -1
  408. package/dist/cjs/utils/remove-dir.js +0 -14
  409. package/dist/cjs/utils/remove-dir.js.map +0 -1
  410. package/dist/cjs/utils/setup-app.js +0 -136
  411. package/dist/cjs/utils/setup-app.js.map +0 -1
  412. package/dist/cjs/utils/sheu.js +0 -131
  413. package/dist/cjs/utils/sheu.js.map +0 -1
  414. package/dist/cjs/utils/validate-dto.js +0 -19
  415. package/dist/cjs/utils/validate-dto.js.map +0 -1
  416. package/dist/cjs/utils/validate-schema.js +0 -75
  417. package/dist/cjs/utils/validate-schema.js.map +0 -1
  418. package/dist/esm/components/arkos-loadable-translator/index.js +0 -138
  419. package/dist/esm/components/arkos-loadable-translator/index.js.map +0 -1
  420. package/dist/esm/components/arkos-service-hook/index.js +0 -32
  421. package/dist/esm/components/arkos-service-hook/index.js.map +0 -1
  422. package/dist/esm/components/arkos-service-hook/reader.js +0 -24
  423. package/dist/esm/components/arkos-service-hook/reader.js.map +0 -1
  424. package/dist/esm/components/arkos-service-hook/types.js +0 -2
  425. package/dist/esm/components/arkos-service-hook/types.js.map +0 -1
  426. package/dist/esm/modules/base/utils/service-hooks-manager.js +0 -17
  427. package/dist/esm/modules/base/utils/service-hooks-manager.js.map +0 -1
  428. package/dist/types/components/arkos-loadable-translator/index.d.ts +0 -53
  429. package/dist/types/components/arkos-service-hook/index.d.ts +0 -41
  430. package/dist/types/components/arkos-service-hook/reader.d.ts +0 -35
  431. package/dist/types/components/arkos-service-hook/types.d.ts +0 -219
  432. package/dist/types/modules/base/utils/service-hooks-manager.d.ts +0 -10
@@ -1 +1 @@
1
- {"version":3,"file":"base.middlewares.js","sourceRoot":"","sources":["../../../../src/modules/base/base.middlewares.ts"],"names":[],"mappings":"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","sourcesContent":["import { NextFunction, Request, Response } from \"express\";\nimport {\n PrismaQueryOptions,\n ArkosNextFunction,\n ArkosRequest,\n ArkosRequestHandler,\n ArkosResponse,\n AuthPrismaQueryOptions,\n} from \"../../types\";\nimport { getArkosConfig } from \"../../server\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\nimport {\n AppError,\n BadRequestError,\n catchAsync,\n} from \"../../exports/error-handler\";\nimport validateDto from \"../../utils/validate-dto\";\nimport validateSchema from \"../../utils/validate-schema\";\nimport { ZodSchema } from \"zod\";\nimport { ClassConstructor } from \"class-transformer\";\nimport { ValidatorOptions } from \"class-validator\";\nimport { resolvePrismaQueryOptions } from \"./utils/helpers/base.middlewares.helpers\";\nimport { ArkosRouteConfig } from \"../../utils/arkos-router/types\";\nimport { capitalize } from \"../../utils/helpers/text.helpers\";\nimport errorPrettifier from \"./utils/error-prettifier\";\nimport { lenientDecode } from \"../../utils/helpers/url-helpers\";\nimport { pascalCase } from \"../../exports/utils\";\nimport validationManager from \"../../types/validation/validation-manager\";\n\nexport function callNext(_: Request, _1: Response, next: NextFunction) {\n next();\n}\n\n/**\n * Deep comparison helper for objects\n */\nfunction deepEqual(a: any, b: any): boolean {\n if (a === b) return true;\n if (a == null || b == null) return false;\n if (typeof a !== \"object\" || typeof b !== \"object\") return a === b;\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (!keysB.includes(key)) return false;\n if (!deepEqual(a[key], b[key])) return false;\n }\n\n return true;\n}\n\n/**\n * Sends response with backward compatibility support\n * Compares current values against original values to detect middleware changes\n * If values were modified by subsequent middleware, use the modified version\n */\nexport function sendResponse(req: ArkosRequest, res: ArkosResponse) {\n let responseData;\n let responseStatus;\n\n const originalData = (res as any).originalData;\n const originalStatus = (res as any).originalStatus;\n\n const currentReqData = req.responseData;\n const currentReqStatus = req.responseStatus;\n const currentLocalsData = res.locals?.data;\n const currentLocalsStatus = res.locals?.status;\n\n if (\n currentReqData !== undefined &&\n !deepEqual(currentReqData, originalData)\n ) {\n responseData = currentReqData;\n } else if (\n currentLocalsData !== undefined &&\n !deepEqual(currentLocalsData, originalData)\n ) {\n responseData = currentLocalsData;\n } else if (originalData !== undefined) {\n responseData = originalData;\n } else {\n responseData = currentReqData ?? currentLocalsData;\n }\n\n if (currentReqStatus !== undefined && currentReqStatus !== originalStatus) {\n responseStatus = currentReqStatus;\n } else if (\n currentLocalsStatus !== undefined &&\n currentLocalsStatus !== originalStatus\n ) {\n responseStatus = currentLocalsStatus;\n } else if (originalStatus !== undefined) {\n responseStatus = originalStatus;\n } else {\n responseStatus = currentReqStatus ?? currentLocalsStatus;\n }\n\n // Send response\n\n if (Number(responseStatus) === 204) {\n res.status(Number(responseStatus)).send();\n } else if (\n (responseData !== undefined || responseData !== null) &&\n responseStatus\n ) {\n res.status(Number(responseStatus)).json(responseData);\n } else if (\n Number(responseStatus) &&\n (responseData === undefined || responseData === null)\n ) {\n res.status(Number(responseStatus)).send();\n } else {\n res.status(500).json({\n message: \"No status or data attached to the response\",\n });\n }\n}\n\n/**\n * Type representing all possible actions that can be performed on a controller\n * Combines both standard CRUD operations and auth-specific operations\n */\nexport type ControllerActions =\n | keyof PrismaQueryOptions<any>\n | keyof Omit<AuthPrismaQueryOptions<any>, keyof PrismaQueryOptions<any>>;\n\n/**\n * Middleware to add Prisma query options to the request's query parameters.\n *\n * @template T - The type of the Prisma model.\n * @param {PrismaQueryOptions<T> | AuthPrismaQueryOptions<T>} prismaQueryOptions - The Prisma query options to attach.\n * @param {ControllerActions} action - The controller action to apply.\n * @returns A middleware function that attaches the query options to the request.\n */\nexport function addPrismaQueryOptionsToRequest<T extends Record<string, any>>(\n prismaQueryOptions: PrismaQueryOptions<T> | AuthPrismaQueryOptions<T>,\n action: ControllerActions\n) {\n return (req: ArkosRequest, _: ArkosResponse, next: NextFunction) => {\n const configs = getArkosConfig();\n\n const resolvedOptions = resolvePrismaQueryOptions(\n prismaQueryOptions,\n action\n );\n\n const requestQueryOptions = configs?.request?.parameters\n ?.allowDangerousPrismaQueryOptions\n ? JSON.parse((req.query?.prismaQueryOptions as string) || \"{}\")\n : {};\n\n req.prismaQueryOptions = deepmerge(resolvedOptions, requestQueryOptions);\n\n next();\n };\n}\n\n/**\n * Logs request events with colored text such as errors, requests responses.\n *\n */\nexport function handleRequestLogs(\n req: Request,\n res: Response,\n next: NextFunction\n) {\n const startTime = Date.now();\n\n const methodColors = {\n GET: \"\\x1b[36m\", // Cyan\n POST: \"\\x1b[32m\", // Green\n PUT: \"\\x1b[33m\", // Orange/Yellow\n PATCH: \"\\x1b[33m\", // Orange/Yellow\n DELETE: \"\\x1b[31m\", // Red\n HEAD: \"\\x1b[34m\", // Blue\n OPTIONS: \"\\x1b[34m\", // Blue\n };\n\n const getStatusColor = (statusCode: number) => {\n if (statusCode >= 200 && statusCode < 300) return \"\\x1b[32m\";\n if (statusCode >= 300 && statusCode < 400) return \"\\x1b[33m\";\n if (statusCode >= 400 && statusCode < 500) return \"\\x1b[33m\";\n if (statusCode >= 500) return \"\\x1b[31m\";\n return \"\\x1b[0m\";\n };\n\n res.on(\"finish\", () => {\n const isProduction = process.env.ARKOS_BUILD == \"true\";\n const duration = Date.now() - startTime;\n\n const now = new Date();\n\n const date = now.toISOString().split(\"T\")[0];\n const time = now.toTimeString().split(\" \")[0];\n\n const timestamp = isProduction ? `${date} ${time}` : time;\n\n const methodColor =\n methodColors[req.method as keyof typeof methodColors] || \"\\x1b[0m\";\n const statusColor = getStatusColor(res.statusCode);\n\n console.info(\n `[\\x1b[36mInfo\\x1b[0m] \\x1b[90m${timestamp}\\x1b[0m ${methodColor}${\n req.method\n }\\x1b[0m ${lenientDecode(req.originalUrl)} ${statusColor}${\n res.statusCode\n }\\x1b[0m \\x1b[35m${duration}ms\\x1b[0m`\n );\n });\n\n next();\n}\n\n/**\n * @deprecated Will be removed in v2.0, please ArkosRouter instead.\n */\nexport function handleRequestBodyValidationAndTransformation<T extends object>(\n schemaOrDtoClass?: ClassConstructor<T>,\n classValidatorValidationOptions?: ValidatorOptions\n): ArkosRequestHandler;\nexport function handleRequestBodyValidationAndTransformation<T extends object>(\n schemaOrDtoClass?: ZodSchema<T>\n): ArkosRequestHandler;\nexport function handleRequestBodyValidationAndTransformation<T extends object>(\n schemaOrDtoClass?: ZodSchema<T> | ClassConstructor<T>,\n classValidatorValidationOptions?: ValidatorOptions\n) {\n return catchAsync(\n async (req: ArkosRequest, _: ArkosResponse, next: ArkosNextFunction) => {\n const validationConfigs = getArkosConfig()?.validation;\n let body = req.body;\n\n if (validationConfigs?.resolver === \"class-validator\" && schemaOrDtoClass)\n req.body = await validateDto(\n schemaOrDtoClass as ClassConstructor<T>,\n body,\n deepmerge(\n {\n whitelist: true,\n forbidNonWhitelisted: true,\n ...classValidatorValidationOptions,\n },\n validationConfigs?.validationOptions || {}\n )\n );\n else if (validationConfigs?.resolver === \"zod\" && schemaOrDtoClass)\n req.body = await validateSchema(schemaOrDtoClass as any, body);\n\n next();\n }\n );\n}\n\nexport function validateRequestInputs(routeConfig: ArkosRouteConfig) {\n const arkosConfig = getArkosConfig();\n const validationConfig = arkosConfig.validation;\n const validators = routeConfig?.validation;\n const openapi = routeConfig?.experimental?.openapi;\n\n const validationToParameterMapping = {\n query: \"query\",\n params: \"path\",\n headers: \"header\",\n cookies: \"cookie\",\n };\n\n if (\n !validationConfig?.resolver &&\n Object.keys(routeConfig.validation || {}).length > 0\n )\n throw Error(\n `Trying to pass validators into route \\\"${routeConfig.path}\\\" config validation option without choosing a validation resolver under arkos config { validation: {} }.`\n );\n\n if ((validators as any) === true)\n throw Error(\n `Invalid value ${validators} passed to validation option, it can only receive false or object of { query, body, params }.`\n );\n\n const validatorsKey: (\"body\" | \"query\" | \"params\")[] = [\n \"body\",\n \"query\",\n \"params\",\n ];\n\n const { validationFn, validatorNameType, validatorName } = validationManager;\n\n if (typeof validators === \"object\")\n validatorsKey.forEach((key) => {\n if (\n openapi &&\n typeof openapi === \"object\" &&\n key != \"body\" &&\n openapi.parameters?.some(\n (parameter: any) => parameter.in === validationToParameterMapping[key]\n ) &&\n validators?.[key]\n ) {\n throw Error(\n `Error in ${routeConfig.path}: when usign validation.${key} you must not define parameters under openapi.parameters as documentation of req.${key} because the ${validatorName} you passed under validation.${key} will be added as jsonSchema into the api documenation, if you wish to define documenation by yourself do not define validation.${key}.\n\nRead more about strict validation at https://www.arkosjs.com/docs/guides/validation/setup#strict-mode.\n`\n );\n }\n\n if (\n openapi &&\n typeof openapi === \"object\" &&\n openapi.requestBody &&\n validators?.[key] &&\n key === \"body\"\n ) {\n throw Error(\n `When usign validation.${key} you must not define json-schema under openapi.requestBody as documentation for req.${key}, because the ${validatorName} you passed under validation.${key} will be added as json-schema into the api documenation, if you wish to define documenation by yourself do not define validation.${key}.`\n );\n }\n\n if (\n validators?.[key] &&\n !validationManager.isValidator(validators?.[key])\n )\n throw Error(\n `Your validation resolver is set to ${arkosConfig?.validation?.resolver}, please provide a valid ${validatorName} in order to use in { validation: { ${key}: ${validatorNameType} } } under route ${routeConfig.path}. Received ${validators?.[key]}`\n );\n });\n\n return catchAsync(\n async (req: ArkosRequest, _: ArkosResponse, next: ArkosNextFunction) => {\n for (const key of validatorsKey) {\n const validator = (validators as any)?.[key];\n const NotAllowedInputError = new BadRequestError(\n `Request ${key} is not allowed on this route`,\n `Request${capitalize(key)}NotAllowed`,\n { [key]: req[key] }\n );\n\n const shouldValidate = validationManager.shouldValidate(\n validator,\n req?.[key]\n );\n\n if (shouldValidate === \"prohibit\") throw NotAllowedInputError;\n else if (shouldValidate === \"passthrough\") continue;\n\n if (validator)\n try {\n req[key] = await (validationFn as any)(\n validator,\n req[key],\n arkosConfig.validation?.validationOptions\n );\n } catch (err: any) {\n const resolver = validationConfig?.resolver;\n const isZod = validationConfig?.resolver === \"zod\";\n\n const prettifiedError = errorPrettifier.prettify(\n resolver as any,\n err\n );\n const error = prettifiedError[0];\n throw new AppError(\n error.message,\n 400,\n `InvalidRequest${pascalCase(key)}`,\n isZod ? err.format() : err\n );\n }\n }\n\n next();\n }\n );\n}\n"]}
1
+ {"version":3,"file":"base.middlewares.js","sourceRoot":"","sources":["../../../../src/modules/base/base.middlewares.ts"],"names":[],"mappings":"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","sourcesContent":["import { NextFunction, Request, Response } from \"express\";\nimport {\n PrismaQueryOptions,\n ArkosNextFunction,\n ArkosRequest,\n ArkosResponse,\n AuthPrismaQueryOptions,\n} from \"../../types\";\nimport { getArkosConfig } from \"../../server\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\nimport {\n AppError,\n BadRequestError,\n catchAsync,\n} from \"../../exports/error-handler\";\nimport { resolvePrismaQueryOptions } from \"./utils/helpers/base.middlewares.helpers\";\nimport { ArkosRouteConfig } from \"../../utils/arkos-router/types\";\nimport { capitalize } from \"../../utils/helpers/text.helpers\";\nimport errorPrettifier from \"./utils/error-prettifier\";\nimport { lenientDecode } from \"../../utils/helpers/url-helpers\";\nimport { pascalCase } from \"../../exports/utils\";\nimport validationManager from \"../../types/validation/validation-manager\";\n\n/**\n * Deep comparison helper for objects\n */\nfunction deepEqual(a: any, b: any): boolean {\n if (a === b) return true;\n if (a == null || b == null) return false;\n if (typeof a !== \"object\" || typeof b !== \"object\") return a === b;\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (!keysB.includes(key)) return false;\n if (!deepEqual(a[key], b[key])) return false;\n }\n\n return true;\n}\n\n/**\n * Sends response with backward compatibility support\n * Compares current values against original values to detect middleware changes\n * If values were modified by subsequent middleware, use the modified version\n */\nexport function sendResponse(req: ArkosRequest, res: ArkosResponse) {\n let responseData;\n let responseStatus;\n\n const originalData = (res as any).originalData;\n const originalStatus = (res as any).originalStatus;\n\n const currentReqData = req.responseData;\n const currentReqStatus = req.responseStatus;\n const currentLocalsData = res.locals?.data;\n const currentLocalsStatus = res.locals?.status;\n\n if (\n currentReqData !== undefined &&\n !deepEqual(currentReqData, originalData)\n ) {\n responseData = currentReqData;\n } else if (\n currentLocalsData !== undefined &&\n !deepEqual(currentLocalsData, originalData)\n ) {\n responseData = currentLocalsData;\n } else if (originalData !== undefined) {\n responseData = originalData;\n } else {\n responseData = currentReqData ?? currentLocalsData;\n }\n\n if (currentReqStatus !== undefined && currentReqStatus !== originalStatus) {\n responseStatus = currentReqStatus;\n } else if (\n currentLocalsStatus !== undefined &&\n currentLocalsStatus !== originalStatus\n ) {\n responseStatus = currentLocalsStatus;\n } else if (originalStatus !== undefined) {\n responseStatus = originalStatus;\n } else {\n responseStatus = currentReqStatus ?? currentLocalsStatus;\n }\n\n // Send response\n\n if (Number(responseStatus) === 204) {\n res.status(Number(responseStatus)).send();\n } else if (\n (responseData !== undefined || responseData !== null) &&\n responseStatus\n ) {\n res.status(Number(responseStatus)).json(responseData);\n } else if (\n Number(responseStatus) &&\n (responseData === undefined || responseData === null)\n ) {\n res.status(Number(responseStatus)).send();\n } else {\n res.status(500).json({\n message: \"No status or data attached to the response\",\n });\n }\n}\n\n/**\n * Type representing all possible actions that can be performed on a controller\n * Combines both standard CRUD operations and auth-specific operations\n */\nexport type ControllerActions =\n | keyof PrismaQueryOptions<any>\n | keyof Omit<AuthPrismaQueryOptions<any>, keyof PrismaQueryOptions<any>>;\n\n/**\n * Middleware to add Prisma query options to the request's query parameters.\n *\n * @template T - The type of the Prisma model.\n * @param {PrismaQueryOptions<T> | AuthPrismaQueryOptions<T>} prismaQueryOptions - The Prisma query options to attach.\n * @param {ControllerActions} action - The controller action to apply.\n * @returns A middleware function that attaches the query options to the request.\n */\nexport function addPrismaQueryOptionsToRequest<T extends Record<string, any>>(\n prismaQueryOptions: PrismaQueryOptions<T> | AuthPrismaQueryOptions<T>,\n action: ControllerActions\n) {\n return (req: ArkosRequest, _: ArkosResponse, next: NextFunction) => {\n const configs = getArkosConfig();\n\n const resolvedOptions = resolvePrismaQueryOptions(\n prismaQueryOptions,\n action\n );\n\n const requestQueryOptions = configs?.request?.parameters\n ?.allowDangerousPrismaQueryOptions\n ? JSON.parse((req.query?.prismaQueryOptions as string) || \"{}\")\n : {};\n\n req.prismaQueryOptions = deepmerge(resolvedOptions, requestQueryOptions);\n\n next();\n };\n}\n\n/**\n * Logs request events with colored text such as errors, requests responses.\n *\n */\nexport function handleRequestLogs(\n req: Request,\n res: Response,\n next: NextFunction\n) {\n const startTime = Date.now();\n\n const methodColors = {\n GET: \"\\x1b[36m\", // Cyan\n POST: \"\\x1b[32m\", // Green\n PUT: \"\\x1b[33m\", // Orange/Yellow\n PATCH: \"\\x1b[33m\", // Orange/Yellow\n DELETE: \"\\x1b[31m\", // Red\n HEAD: \"\\x1b[34m\", // Blue\n OPTIONS: \"\\x1b[34m\", // Blue\n };\n\n const getStatusColor = (statusCode: number) => {\n if (statusCode >= 200 && statusCode < 300) return \"\\x1b[32m\";\n if (statusCode >= 300 && statusCode < 400) return \"\\x1b[33m\";\n if (statusCode >= 400 && statusCode < 500) return \"\\x1b[33m\";\n if (statusCode >= 500) return \"\\x1b[31m\";\n return \"\\x1b[0m\";\n };\n\n res.on(\"finish\", () => {\n const isProduction = process.env.ARKOS_BUILD == \"true\";\n const duration = Date.now() - startTime;\n\n const now = new Date();\n\n const date = now.toISOString().split(\"T\")[0];\n const time = now.toTimeString().split(\" \")[0];\n\n const timestamp = isProduction ? `${date} ${time}` : time;\n\n const methodColor =\n methodColors[req.method as keyof typeof methodColors] || \"\\x1b[0m\";\n const statusColor = getStatusColor(res.statusCode);\n\n console.info(\n `[\\x1b[36mInfo\\x1b[0m] \\x1b[90m${timestamp}\\x1b[0m ${methodColor}${req.method\n }\\x1b[0m ${lenientDecode(req.originalUrl)} ${statusColor}${res.statusCode\n }\\x1b[0m \\x1b[35m${duration}ms\\x1b[0m`\n );\n });\n\n next();\n}\n\n\nexport function validateRequestInputs(routeConfig: ArkosRouteConfig) {\n const arkosConfig = getArkosConfig();\n const validationConfig = arkosConfig.validation;\n const validators = routeConfig?.validation;\n const openapi = routeConfig?.experimental?.openapi;\n\n const validationToParameterMapping = {\n query: \"query\",\n params: \"path\",\n headers: \"header\",\n cookies: \"cookie\",\n };\n\n if (\n !validationConfig?.resolver &&\n Object.keys(routeConfig.validation || {}).length > 0\n )\n throw Error(\n `Trying to pass validators into route \\\"${routeConfig.path}\\\" config validation option without choosing a validation resolver under arkos config { validation: {} }.`\n );\n\n if ((validators as any) === true)\n throw Error(\n `Invalid value ${validators} passed to validation option, it can only receive false or object of { query, body, params }.`\n );\n\n const validatorsKey: (\"body\" | \"query\" | \"params\")[] = [\n \"body\",\n \"query\",\n \"params\",\n ];\n\n const { validationFn, validatorNameType, validatorName } = validationManager;\n\n if (typeof validators === \"object\")\n validatorsKey.forEach((key) => {\n if (\n openapi &&\n typeof openapi === \"object\" &&\n key != \"body\" &&\n openapi.parameters?.some(\n (parameter: any) => parameter.in === validationToParameterMapping[key]\n ) &&\n validators?.[key]\n ) {\n throw Error(\n `Error in ${routeConfig.path}: when usign validation.${key} you must not define parameters under openapi.parameters as documentation of req.${key} because the ${validatorName} you passed under validation.${key} will be added as jsonSchema into the api documenation, if you wish to define documenation by yourself do not define validation.${key}.\n\nRead more about strict validation at https://www.arkosjs.com/docs/guides/validation/setup#strict-mode.\n`\n );\n }\n\n if (\n openapi &&\n typeof openapi === \"object\" &&\n openapi.requestBody &&\n validators?.[key] &&\n key === \"body\"\n ) {\n throw Error(\n `When usign validation.${key} you must not define json-schema under openapi.requestBody as documentation for req.${key}, because the ${validatorName} you passed under validation.${key} will be added as json-schema into the api documenation, if you wish to define documenation by yourself do not define validation.${key}.`\n );\n }\n\n if (\n validators?.[key] &&\n !validationManager.isValidator(validators?.[key])\n )\n throw Error(\n `Your validation resolver is set to ${arkosConfig?.validation?.resolver}, please provide a valid ${validatorName} in order to use in { validation: { ${key}: ${validatorNameType} } } under route ${routeConfig.path}. Received ${validators?.[key]}`\n );\n });\n\n return catchAsync(\n async (req: ArkosRequest, _: ArkosResponse, next: ArkosNextFunction) => {\n for (const key of validatorsKey) {\n const validator = (validators as any)?.[key];\n const NotAllowedInputError = new BadRequestError(\n `Request ${key} is not allowed on this route`,\n `Request${capitalize(key)}NotAllowed`,\n { [key]: req[key] }\n );\n\n const shouldValidate = validationManager.shouldValidate(\n validator,\n req?.[key]\n );\n\n if (shouldValidate === \"prohibit\") throw NotAllowedInputError;\n else if (shouldValidate === \"passthrough\") continue;\n\n if (validator)\n try {\n Object.defineProperty(req, key, {\n value: await (validationFn as any)(\n validator,\n req[key],\n arkosConfig.validation?.validationOptions\n ),\n writable: false,\n configurable: true,\n enumerable: true,\n });\n } catch (err: any) {\n const resolver = validationConfig?.resolver;\n const isZod = validationConfig?.resolver === \"zod\";\n\n const prettifiedError = errorPrettifier.prettify(\n resolver as any,\n err\n );\n const error = prettifiedError[0];\n throw new AppError(\n error.message,\n 400,\n `InvalidRequest${pascalCase(key)}`,\n isZod ? err.format() : err\n );\n }\n }\n\n next();\n }\n );\n}\n"]}
@@ -5,43 +5,10 @@ import { getPrismaInstance } from "../../utils/helpers/prisma.helpers.js";
5
5
  import authService from "../auth/auth.service.js";
6
6
  import prismaSchemaParser from "../../utils/prisma/prisma-schema-parser.js";
7
7
  export class ArkosPrismaService {
8
+ modelName;
9
+ relationFields;
10
+ prismaInstace;
8
11
  constructor(modelName) {
9
- this.executeOperation = (config) => {
10
- return async (...args) => {
11
- let argsWithRelationFieldsHandled = await this.processRelationFieldsInBody(args, config);
12
- let prismaFinalArgs = await this.handlePasswordHashing(argsWithRelationFieldsHandled, config);
13
- if (config.hooks?.beforeOperation)
14
- await config.hooks.beforeOperation(this.buildHookParams(argsWithRelationFieldsHandled, config));
15
- if (config.hooks?.beforePrisma) {
16
- argsWithRelationFieldsHandled = await config.hooks.beforePrisma(argsWithRelationFieldsHandled, this.buildHookParams(argsWithRelationFieldsHandled, config));
17
- }
18
- const prisma = getPrismaInstance();
19
- let result;
20
- if (config.customPrismaLogic) {
21
- result = await config.customPrismaLogic(argsWithRelationFieldsHandled, prisma, config, this);
22
- }
23
- else {
24
- const prismaArgs = this.buildPrismaArgs(prismaFinalArgs, config);
25
- result = await prisma[this.modelName][config.prismaMethod](prismaArgs);
26
- }
27
- if (config.hooks?.afterPrisma) {
28
- result = await config.hooks.afterPrisma(result, this.buildHookParams(argsWithRelationFieldsHandled, config));
29
- }
30
- if (config.hooks?.afterOperation) {
31
- await config.hooks.afterOperation(result, this.buildHookParams(argsWithRelationFieldsHandled, config));
32
- }
33
- return result;
34
- };
35
- };
36
- this.executeTransactionOperation = (config) => {
37
- return async (...args) => {
38
- let argsWithRelationFieldsHandled = await this.processRelationFieldsInBody(args, config);
39
- let prismaFinalArgs = await this.handlePasswordHashing(argsWithRelationFieldsHandled, config);
40
- const prisma = getPrismaInstance();
41
- const results = await this.executeTransactionLogic(prismaFinalArgs, config, prisma);
42
- return results;
43
- };
44
- };
45
12
  this.modelName = camelCase(modelName);
46
13
  const modelFields = prismaSchemaParser?.getModelRelations?.(modelName);
47
14
  this.relationFields = {
@@ -55,42 +22,31 @@ export class ArkosPrismaService {
55
22
  this.prismaInstace = getPrismaInstance();
56
23
  return this.prismaInstace;
57
24
  }
58
- buildHookParams(args, config) {
59
- const context = args[args.length - 1];
60
- switch (config.operationType) {
61
- case "createOne":
62
- case "createMany":
63
- return { data: args[0], queryOptions: args[1], context };
64
- case "findMany":
65
- return { filters: args[0], queryOptions: args[1], context };
66
- case "findById":
67
- return { id: args[0], queryOptions: args[1], context };
68
- case "findOne":
69
- return { filters: args[0], queryOptions: args[1], context };
70
- case "updateOne":
71
- return {
72
- filters: args[0],
73
- data: args[1],
74
- queryOptions: args[2],
75
- context,
76
- };
77
- case "updateMany":
78
- return {
79
- filters: args[0],
80
- data: args[1],
81
- queryOptions: args[2],
82
- context,
83
- };
84
- case "deleteOne":
85
- return { filters: args[0], context };
86
- case "deleteMany":
87
- return { filters: args[0], context };
88
- case "count":
89
- return { filters: args[0], context };
90
- default:
91
- return { context };
92
- }
93
- }
25
+ executeOperation = (config) => {
26
+ return async (...args) => {
27
+ let argsWithRelationFieldsHandled = await this.processRelationFieldsInBody(args, config);
28
+ let prismaFinalArgs = await this.handlePasswordHashing(argsWithRelationFieldsHandled, config);
29
+ const prisma = getPrismaInstance();
30
+ let result;
31
+ if (config.customPrismaLogic) {
32
+ result = await config.customPrismaLogic(argsWithRelationFieldsHandled, prisma, config, this);
33
+ }
34
+ else {
35
+ const prismaArgs = this.buildPrismaArgs(prismaFinalArgs, config);
36
+ result = await prisma[this.modelName][config.prismaMethod](prismaArgs);
37
+ }
38
+ return result;
39
+ };
40
+ };
41
+ executeTransactionOperation = (config) => {
42
+ return async (...args) => {
43
+ let argsWithRelationFieldsHandled = await this.processRelationFieldsInBody(args, config);
44
+ let prismaFinalArgs = await this.handlePasswordHashing(argsWithRelationFieldsHandled, config);
45
+ const prisma = getPrismaInstance();
46
+ const results = await this.executeTransactionLogic(prismaFinalArgs, config, prisma);
47
+ return results;
48
+ };
49
+ };
94
50
  async handlePasswordHashing(args, config) {
95
51
  let processedArgs = [...args];
96
52
  if (config.requiresPasswordHashing) {
@@ -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 deepmerge from \"../../utils/helpers/deepmerge.helper\";\nimport {\n handleRelationFieldsInBody,\n ModelGroupRelationFields,\n} from \"./utils/helpers/base.service.helpers\";\nimport { getPrismaInstance } from \"../../utils/helpers/prisma.helpers\";\nimport authService from \"../auth/auth.service\";\nimport { PrismaClient } from \"../../generated\";\nimport {\n CountFilters,\n CreateData,\n CreateManyData,\n CreateManyOptions,\n CreateOptions,\n Delegate,\n DeleteManyFilters,\n DeleteOneFilters,\n FindManyFilters,\n FindManyOptions,\n FindOneFilters,\n FindOneOptions,\n GetPayload,\n Models,\n UpdateManyData,\n UpdateManyFilters,\n UpdateManyOptions,\n UpdateOneData,\n UpdateOneFilters,\n UpdateOneOptions,\n} from \"./types/base.service.types\";\nimport prismaSchemaParser from \"../../utils/prisma/prisma-schema-parser\";\nimport {\n ArkosServiceHookMethodConfigs,\n ServiceHookContext,\n} from \"../../components/arkos-service-hook/types\";\n\nexport interface ServiceOperationHooks {\n beforeOperation?: (params: any) => void | Promise<void>;\n afterOperation?: (result: any, params: any) => void | Promise<void>;\n beforePrisma?: (prismaArgs: any, params: any) => any | Promise<any>;\n afterPrisma?: (result: any, params: any) => any | Promise<any>;\n}\n\ninterface ServiceOperationConfig {\n operationType:\n | keyof ArkosServiceHookMethodConfigs<any, any>\n | \"batchDelete\"\n | \"batchUpdate\";\n prismaMethod: string;\n requiresPasswordHashing?: boolean;\n relationFieldsHandling?: string[];\n returnsFallback?: any;\n customPrismaLogic?: (\n args: any[],\n prisma: PrismaClient,\n config: ServiceOperationConfig,\n context: ArkosPrismaService<any>\n ) => Promise<any>;\n hooks?: ServiceOperationHooks;\n}\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 * by model-specific service classes.\n *\n * @class ArkosPrismaService\n *\n * @example\n * ```ts\n * import { ArkosPrismaService } from \"arkos/services\";\n *\n * export class UserService extends ArkosPrismaService<\"user\"> {}\n *\n * const userService = new UserService(\"user\");\n * ```\n *\n * @see {@link https://www.arkosjs.com/docs/reference/base-service}\n * @see {@link https://www.arkosjs.com/docs/guide/accessing-request-context-in-services}\n */\nexport class ArkosPrismaService<TModelName extends keyof Models = keyof Models> {\n modelName: TModelName;\n relationFields: ModelGroupRelationFields;\n private prismaInstace?: PrismaClient;\n\n constructor(modelName: TModelName) {\n this.modelName = camelCase(modelName as string) as TModelName;\n const modelFields = prismaSchemaParser?.getModelRelations?.(\n modelName as string\n );\n\n this.relationFields = {\n singular:\n modelFields?.filter((field) => field.isRelation && !field.isArray) ||\n [],\n list:\n modelFields?.filter((field) => field.isRelation && field.isArray) || [],\n };\n }\n\n get prisma() {\n if (!this.prismaInstace) this.prismaInstace = getPrismaInstance();\n return this.prismaInstace!;\n }\n\n private executeOperation = (config: ServiceOperationConfig) => {\n return async (...args: any[]): Promise<any> => {\n let argsWithRelationFieldsHandled =\n await this.processRelationFieldsInBody(args, config);\n let prismaFinalArgs = await this.handlePasswordHashing(\n argsWithRelationFieldsHandled,\n config\n );\n\n\n if (config.hooks?.beforeOperation)\n await config.hooks.beforeOperation(\n this.buildHookParams(argsWithRelationFieldsHandled, config)\n );\n\n if (config.hooks?.beforePrisma) {\n argsWithRelationFieldsHandled = await config.hooks.beforePrisma(\n argsWithRelationFieldsHandled,\n this.buildHookParams(argsWithRelationFieldsHandled, config)\n );\n }\n\n const prisma = getPrismaInstance();\n let result: any;\n\n if (config.customPrismaLogic) {\n result = await config.customPrismaLogic(\n argsWithRelationFieldsHandled,\n prisma,\n config,\n this\n );\n } else {\n const prismaArgs = this.buildPrismaArgs(prismaFinalArgs, config);\n result = await (\n prisma[this.modelName as string] as Delegate<TModelName>\n )[config.prismaMethod](prismaArgs);\n }\n\n if (config.hooks?.afterPrisma) {\n result = await config.hooks.afterPrisma(\n result,\n this.buildHookParams(argsWithRelationFieldsHandled, config)\n );\n }\n\n\n if (config.hooks?.afterOperation) {\n await config.hooks.afterOperation(\n result,\n this.buildHookParams(argsWithRelationFieldsHandled, config)\n );\n }\n\n return result;\n };\n };\n\n private executeTransactionOperation = (config: ServiceOperationConfig) => {\n return async (...args: any[]): Promise<any> => {\n\n let argsWithRelationFieldsHandled =\n await this.processRelationFieldsInBody(args, config);\n let prismaFinalArgs = await this.handlePasswordHashing(\n argsWithRelationFieldsHandled,\n config\n );\n\n\n const prisma = getPrismaInstance();\n const results = await this.executeTransactionLogic(\n prismaFinalArgs,\n config,\n prisma\n );\n\n return results;\n } };\n\n\n private buildHookParams(args: any[], config: ServiceOperationConfig): any {\n const context = args[args.length - 1];\n\n switch (config.operationType) {\n case \"createOne\":\n case \"createMany\":\n return { data: args[0], queryOptions: args[1], context };\n case \"findMany\":\n return { filters: args[0], queryOptions: args[1], context };\n case \"findById\":\n return { id: args[0], queryOptions: args[1], context };\n case \"findOne\":\n return { filters: args[0], queryOptions: args[1], context };\n case \"updateOne\":\n return {\n filters: args[0],\n data: args[1],\n queryOptions: args[2],\n context,\n };\n case \"updateMany\":\n return {\n filters: args[0],\n data: args[1],\n queryOptions: args[2],\n context,\n };\n case \"deleteOne\":\n return { filters: args[0], context };\n case \"deleteMany\":\n return { filters: args[0], context };\n case \"count\":\n return { filters: args[0], context };\n default:\n return { context };\n }\n }\n\n private async handlePasswordHashing(\n args: any[],\n config: ServiceOperationConfig\n ): Promise<any[]> {\n let processedArgs = [...args];\n\n if (config.requiresPasswordHashing) {\n const dataIndex = config.operationType.includes(\"update\") ? 1 : 0;\n const data = processedArgs[dataIndex];\n\n if (Array.isArray(data)) {\n for (const i in data) {\n if (this.shouldHashPassword(data[i]))\n processedArgs[dataIndex][i] = await this.processPasswordHashing(\n data[i]\n );\n }\n } else if (this.shouldHashPassword(data)) {\n processedArgs[dataIndex] = await this.processPasswordHashing(data);\n }\n }\n\n return processedArgs;\n }\n\n private async processRelationFieldsInBody(\n args: any[],\n config: ServiceOperationConfig\n ): Promise<any[]> {\n let processedArgs = [...args];\n\n if (config.relationFieldsHandling) {\n const dataIndex = config.operationType.includes(\"update\") ? 1 : 0;\n\n if (config.operationType === \"batchUpdate\") {\n const dataArray = processedArgs[0];\n if (Array.isArray(dataArray)) {\n processedArgs[0] = dataArray.map((data) =>\n handleRelationFieldsInBody(\n data as Record<string, any>,\n this.relationFields,\n config.relationFieldsHandling\n )\n );\n }\n } else if (config.operationType === \"batchDelete\") {\n const batchFilters = processedArgs[0];\n if (Array.isArray(batchFilters)) {\n processedArgs[0] = batchFilters.map((filters) =>\n handleRelationFieldsInBody(\n filters as Record<string, any>,\n this.relationFields\n )\n );\n }\n } else if (config.operationType === \"createMany\") {\n const data = processedArgs[dataIndex];\n if (Array.isArray(data)) {\n processedArgs[dataIndex] = data.map((item) =>\n handleRelationFieldsInBody(\n item as Record<string, any>,\n this.relationFields,\n config.relationFieldsHandling\n )\n );\n }\n } else {\n const data = processedArgs[dataIndex];\n if (data) {\n processedArgs[dataIndex] = handleRelationFieldsInBody(\n data as Record<string, any>,\n this.relationFields,\n config.relationFieldsHandling\n );\n }\n }\n }\n\n return processedArgs;\n }\n\n private buildPrismaArgs(args: any[], config: ServiceOperationConfig): any {\n switch (config.operationType) {\n case \"createOne\":\n case \"createMany\":\n return deepmerge({ data: args[0] }, args[1] || {});\n case \"findMany\":\n return deepmerge({ where: args[0] }, args[1] || {});\n case \"findById\":\n return deepmerge({ where: { id: args[0] } }, args[1] || {});\n case \"findOne\":\n return deepmerge({ where: args[0] }, args[1] || {});\n case \"updateOne\":\n return deepmerge({ where: args[0], data: args[1] }, args[2] || {});\n case \"updateMany\":\n const firstMerge = deepmerge({ data: args[1] }, args[2] || {});\n return deepmerge({ where: args[0] }, firstMerge);\n case \"deleteOne\":\n case \"deleteMany\":\n return { where: args[0] };\n case \"count\":\n return { where: args[0] };\n default:\n return {};\n }\n }\n\n private async executeTransactionLogic(\n args: any[],\n config: ServiceOperationConfig,\n prisma: PrismaClient\n ): Promise<any> {\n if (config.operationType === \"batchUpdate\") {\n const dataArray = args[0];\n const queryOptions = args[1];\n\n return await (prisma as any).$transaction(async (tx: any) => {\n const updatePromises = dataArray.map(async (data: any) => {\n let processedData = data;\n if (this.shouldHashPassword(data)) {\n processedData = await this.processPasswordHashing(data);\n }\n\n const finalPrismaQueryParams = handleRelationFieldsInBody(\n {\n batchedData: {\n ...processedData,\n apiAction: \"update\",\n },\n } as Record<string, any>,\n {\n singular: [\n {\n ...prismaSchemaParser.getField({\n type: pascalCase(this.modelName as string),\n })!,\n name: \"batchedData\",\n },\n ],\n list: [],\n }\n );\n\n return await tx[this.modelName as string].update(\n deepmerge(\n finalPrismaQueryParams.batchedData?.update,\n queryOptions || {}\n ) as { where: any; data: any }\n );\n });\n\n return await Promise.all(updatePromises);\n });\n }\n\n if (config.operationType === \"batchDelete\") {\n const batchFilters = args[0];\n\n return await (prisma as any).$transaction(async (tx: any) => {\n const deletePromises = batchFilters.map(async (filters: any) => {\n return await tx[this.modelName as string].delete({ where: filters });\n });\n\n return await Promise.all(deletePromises);\n });\n }\n\n throw new Error(`Unknown transaction operation: ${config.operationType}`);\n }\n\n private shouldHashPassword(data: any): boolean {\n return kebabCase(this.modelName as string) === \"user\" && data?.password;\n }\n\n private async processPasswordHashing(data: any): Promise<any> {\n if (Array.isArray(data)) {\n const processedArray: any[] = [];\n for (let i = 0; i < data.length; i++) {\n const curr = data[i];\n if (\n \"password\" in curr &&\n !authService.isPasswordHashed(curr.password!)\n ) {\n processedArray[i] = {\n ...curr,\n password: await authService.hashPassword(curr.password!),\n };\n } else {\n processedArray[i] = curr;\n }\n }\n return processedArray;\n } else {\n if (data.password && !authService.isPasswordHashed(data.password)) {\n return {\n ...data,\n password: await authService.hashPassword(data.password),\n };\n }\n }\n return data;\n }\n\n // ─── Public API ─────────────────────────────────────────────────────────────\n\n /**\n * Creates a single record in the database.\n *\n * @param data - The data for creating the record\n * @param queryOptions - Optional Prisma query options (select, include, etc.)\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const user = await userService.createOne({\n * name: \"John Doe\",\n * email: \"john@example.com\"\n * });\n * ```\n */\n async createOne<TOptions extends CreateOptions<TModelName>>(\n data: CreateData<TModelName>,\n queryOptions?: TOptions,\n context?: ServiceHookContext\n ): Promise<GetPayload<TModelName, TOptions>> {\n return this.executeOperation({\n operationType: \"createOne\",\n prismaMethod: \"create\",\n requiresPasswordHashing: true,\n relationFieldsHandling: [\"delete\", \"disconnect\", \"update\"],\n returnsFallback: undefined,\n })(data, queryOptions, context);\n }\n\n /**\n * Creates multiple records in the database.\n *\n * @param data - Array of data objects or object with data array\n * @param queryOptions - Optional Prisma query options\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const result = await userService.createMany([\n * { name: \"John Doe\", email: \"john@example.com\" },\n * { name: \"Jane Smith\", email: \"jane@example.com\" }\n * ]);\n * ```\n */\n async createMany<TOptions extends CreateManyOptions<TModelName>>(\n data: CreateManyData<TModelName>,\n queryOptions?: TOptions,\n context?: ServiceHookContext\n ): Promise<GetPayload<TModelName, TOptions>[]> {\n return this.executeOperation({\n operationType: \"createMany\",\n prismaMethod: \"createMany\",\n requiresPasswordHashing: true,\n relationFieldsHandling: [\"delete\", \"disconnect\", \"update\"],\n returnsFallback: undefined,\n })(data, queryOptions, context);\n }\n\n /**\n * Counts records matching the specified filters.\n *\n * @param filters - Optional where conditions\n * @param queryOptions - Optional Prisma query options\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const total = await userService.count({ status: \"active\" });\n * ```\n */\n async count(\n filters?: CountFilters<TModelName>,\n context?: ServiceHookContext\n ): Promise<number> {\n return this.executeOperation({\n operationType: \"count\",\n prismaMethod: \"count\",\n returnsFallback: 0,\n })(filters, context);\n }\n\n /**\n * Finds multiple records matching the specified filters.\n *\n * @param filters - Optional where conditions\n * @param queryOptions - Optional Prisma query options (select, include, orderBy, skip, take, etc.)\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const users = await userService.findMany(\n * { status: \"active\" },\n * { orderBy: { createdAt: \"desc\" }, take: 10 }\n * );\n * ```\n */\n async findMany<TOptions extends FindManyOptions<TModelName>>(\n filters?: FindManyFilters<TModelName>,\n queryOptions?: TOptions,\n context?: ServiceHookContext\n ): Promise<GetPayload<TModelName, TOptions>[]> {\n return this.executeOperation({\n operationType: \"findMany\",\n prismaMethod: \"findMany\",\n returnsFallback: [],\n })(filters, queryOptions, context);\n }\n\n /**\n * Finds a single record by its ID.\n *\n * @param id - The unique identifier of the record\n * @param queryOptions - Optional Prisma query options (select, include, etc.)\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const user = await userService.findById(\"user-123\");\n * ```\n */\n async findById<TOptions extends FindOneOptions<TModelName>>(\n id: string | number,\n queryOptions?: TOptions,\n context?: ServiceHookContext\n ): Promise<GetPayload<TModelName, TOptions> | null> {\n return this.executeOperation({\n operationType: \"findById\",\n prismaMethod: \"findUnique\",\n returnsFallback: undefined,\n })(id, queryOptions, context);\n }\n\n /**\n * Finds the first record matching the specified filters.\n *\n * @param filters - Where conditions to filter records\n * @param queryOptions - Optional Prisma query options\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const user = await userService.findOne({ email: \"john@example.com\" });\n * ```\n */\n async findOne<TOptions extends FindOneOptions<TModelName>>(\n filters: FindOneFilters<TModelName>,\n queryOptions?: TOptions,\n context?: ServiceHookContext\n ): Promise<GetPayload<TModelName, TOptions> | null> {\n return this.executeOperation({\n operationType: \"findOne\",\n prismaMethod: \"findFirst\",\n returnsFallback: undefined,\n customPrismaLogic: async (args, prisma, _, serviceContext) => {\n const filters = args[0];\n const queryOptions = args[1];\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 await (prisma as any)[serviceContext.modelName].findUnique(\n deepmerge({ where: filters }, queryOptions || {})\n );\n } else {\n return await (prisma as any)[serviceContext.modelName].findFirst(\n deepmerge({ where: filters }, queryOptions || {})\n );\n }\n },\n })(filters, queryOptions, context);\n }\n\n /**\n * Updates a single record matching the specified filters.\n *\n * @param filters - Where conditions to identify the record\n * @param data - The data to update\n * @param queryOptions - Optional Prisma query options\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const updated = await userService.updateOne(\n * { id: \"user-123\" },\n * { name: \"John Updated\" }\n * );\n * ```\n */\n async updateOne<TOptions extends UpdateOneOptions<TModelName>>(\n filters: UpdateOneFilters<TModelName>,\n data: UpdateOneData<TModelName>,\n queryOptions?: TOptions,\n context?: ServiceHookContext\n ): Promise<GetPayload<TModelName, TOptions>> {\n return this.executeOperation({\n operationType: \"updateOne\",\n prismaMethod: \"update\",\n requiresPasswordHashing: true,\n relationFieldsHandling: [],\n returnsFallback: undefined,\n })(filters, data, queryOptions, context);\n }\n\n /**\n * Updates a single record matching the specified id.\n *\n * @param id - The unique identifier of the record\n * @param data - The data to update\n * @param queryOptions - Optional Prisma query options\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const updated = await userService.updateById(\"user-123\", { name: \"John Updated\" });\n * ```\n */\n async updateById<TOptions extends UpdateOneOptions<TModelName>>(\n id: string | number,\n data: UpdateOneData<TModelName>,\n queryOptions?: TOptions,\n context?: ServiceHookContext\n ): Promise<GetPayload<TModelName, TOptions>> {\n return this.executeOperation({\n operationType: \"updateOne\",\n prismaMethod: \"update\",\n requiresPasswordHashing: true,\n relationFieldsHandling: [],\n returnsFallback: undefined,\n })({ id }, data, queryOptions, context);\n }\n\n /**\n * Updates multiple records matching the specified filters.\n *\n * @param filters - Where conditions to identify records\n * @param data - The data to update\n * @param queryOptions - Optional Prisma query options\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const result = await userService.updateMany(\n * { status: \"pending\" },\n * { status: \"active\" }\n * );\n * ```\n */\n async updateMany<TOptions extends UpdateManyOptions<TModelName>>(\n filters: UpdateManyFilters<TModelName>,\n data: UpdateManyData<TModelName>,\n queryOptions?: TOptions,\n context?: ServiceHookContext\n ): Promise<{ count: number }> {\n return this.executeOperation({\n operationType: \"updateMany\",\n prismaMethod: \"updateMany\",\n requiresPasswordHashing: true,\n relationFieldsHandling: [],\n returnsFallback: undefined,\n })(filters, data, queryOptions, context);\n }\n\n /**\n * Deletes a single record by its ID.\n *\n * @param id - The unique identifier of the record\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const deleted = await userService.deleteById(\"user-123\");\n * ```\n */\n async deleteById(\n id: string | number,\n context?: ServiceHookContext\n ): Promise<GetPayload<TModelName, any>> {\n return this.executeOperation({\n operationType: \"deleteOne\",\n prismaMethod: \"delete\",\n returnsFallback: undefined,\n })({ id }, context);\n }\n\n /**\n * Deletes a single record matching the specified filters.\n *\n * @param filters - Where conditions to identify the record\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const deleted = await userService.deleteOne({ id: \"user-123\" });\n * ```\n */\n async deleteOne(\n filters: DeleteOneFilters<TModelName>,\n context?: ServiceHookContext\n ): Promise<GetPayload<TModelName, any>> {\n return this.executeOperation({\n operationType: \"deleteOne\",\n prismaMethod: \"delete\",\n returnsFallback: undefined,\n })(filters, context);\n }\n\n /**\n * Deletes multiple records matching the specified filters.\n *\n * @param filters - Where conditions to identify records\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const result = await userService.deleteMany({ status: \"inactive\" });\n * ```\n */\n async deleteMany(\n filters: DeleteManyFilters<TModelName>,\n context?: ServiceHookContext\n ): Promise<{ count: number }> {\n return this.executeOperation({\n operationType: \"deleteMany\",\n prismaMethod: \"deleteMany\",\n returnsFallback: undefined,\n })(filters, context);\n }\n\n /**\n * Performs multiple update operations in a single transaction.\n *\n * @param dataArray - Array of update objects each containing filter criteria and data\n * @param queryOptions - Optional Prisma query options applied to all updates\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const results = await userService.batchUpdate([\n * { id: \"user-1\", status: \"active\" },\n * { id: \"user-2\", status: \"inactive\" }\n * ]);\n * ```\n */\n async batchUpdate<TOptions extends UpdateOneOptions<TModelName>>(\n dataArray: UpdateOneData<TModelName>[],\n queryOptions?: TOptions,\n context?: ServiceHookContext\n ): Promise<GetPayload<TModelName, TOptions>[]> {\n return this.executeTransactionOperation({\n operationType: \"batchUpdate\",\n prismaMethod: \"update\",\n requiresPasswordHashing: true,\n relationFieldsHandling: [],\n returnsFallback: undefined,\n })(dataArray, queryOptions, context);\n }\n\n /**\n * Performs multiple delete operations in a single transaction.\n *\n * @param batchFilters - Array of where conditions each identifying a record to delete\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const deleted = await userService.batchDelete([\n * { id: \"user-1\" },\n * { id: \"user-2\" }\n * ]);\n * ```\n */\n async batchDelete(\n batchFilters: Array<DeleteOneFilters<TModelName>>,\n context?: ServiceHookContext\n ): Promise<GetPayload<TModelName, any>[]> {\n return this.executeTransactionOperation({\n operationType: \"batchDelete\",\n prismaMethod: \"delete\",\n relationFieldsHandling: [],\n returnsFallback: undefined,\n })(batchFilters, context);\n }\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 deepmerge from \"../../utils/helpers/deepmerge.helper\";\nimport {\n handleRelationFieldsInBody,\n ModelGroupRelationFields,\n} from \"./utils/helpers/base.service.helpers\";\nimport { getPrismaInstance } from \"../../utils/helpers/prisma.helpers\";\nimport authService from \"../auth/auth.service\";\nimport { PrismaClient } from \"../../generated\";\nimport {\n CountFilters,\n CreateData,\n CreateManyData,\n CreateManyOptions,\n CreateOptions,\n Delegate,\n DeleteManyFilters,\n DeleteOneFilters,\n FindManyFilters,\n FindManyOptions,\n FindOneFilters,\n FindOneOptions,\n GetPayload,\n Models,\n UpdateManyData,\n UpdateManyFilters,\n UpdateManyOptions,\n UpdateOneData,\n UpdateOneFilters,\n UpdateOneOptions,\n} from \"./types/base.service.types\";\nimport prismaSchemaParser from \"../../utils/prisma/prisma-schema-parser\";\nimport { ServiceHookContext } from \"./types/base.service.types\";\n\ninterface ServiceOperationConfig {\n operationType:\n | keyof ArkosPrismaService\n | \"batchDelete\"\n | \"batchUpdate\";\n prismaMethod: string;\n requiresPasswordHashing?: boolean;\n relationFieldsHandling?: string[];\n returnsFallback?: any;\n customPrismaLogic?: (\n args: any[],\n prisma: PrismaClient,\n config: ServiceOperationConfig,\n context: ArkosPrismaService<any>\n ) => Promise<any>;\n}\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 * by model-specific service classes.\n *\n * @class ArkosPrismaService\n *\n * @example\n * ```ts\n * import { ArkosPrismaService } from \"arkos/services\";\n *\n * export class UserService extends ArkosPrismaService<\"user\"> {}\n *\n * const userService = new UserService(\"user\");\n * ```\n *\n * @see {@link https://www.arkosjs.com/docs/reference/base-service}\n * @see {@link https://www.arkosjs.com/docs/guide/accessing-request-context-in-services}\n */\nexport class ArkosPrismaService<TModelName extends keyof Models = keyof Models> {\n modelName: TModelName;\n relationFields: ModelGroupRelationFields;\n private prismaInstace?: PrismaClient;\n\n constructor(modelName: TModelName) {\n this.modelName = camelCase(modelName as string) as TModelName;\n const modelFields = prismaSchemaParser?.getModelRelations?.(\n modelName as string\n );\n\n this.relationFields = {\n singular:\n modelFields?.filter((field) => field.isRelation && !field.isArray) ||\n [],\n list:\n modelFields?.filter((field) => field.isRelation && field.isArray) || [],\n };\n }\n\n get prisma() {\n if (!this.prismaInstace) this.prismaInstace = getPrismaInstance();\n return this.prismaInstace!;\n }\n\n private executeOperation = (config: ServiceOperationConfig) => {\n return async (...args: any[]): Promise<any> => {\n let argsWithRelationFieldsHandled =\n await this.processRelationFieldsInBody(args, config);\n let prismaFinalArgs = await this.handlePasswordHashing(\n argsWithRelationFieldsHandled,\n config\n );\n\n\n\n\n const prisma = getPrismaInstance();\n let result: any;\n\n if (config.customPrismaLogic) {\n result = await config.customPrismaLogic(\n argsWithRelationFieldsHandled,\n prisma,\n config,\n this\n );\n } else {\n const prismaArgs = this.buildPrismaArgs(prismaFinalArgs, config);\n result = await (\n prisma[this.modelName as string] as Delegate<TModelName>\n )[config.prismaMethod](prismaArgs);\n }\n\n return result;\n };\n };\n\n private executeTransactionOperation = (config: ServiceOperationConfig) => {\n return async (...args: any[]): Promise<any> => {\n\n let argsWithRelationFieldsHandled =\n await this.processRelationFieldsInBody(args, config);\n let prismaFinalArgs = await this.handlePasswordHashing(\n argsWithRelationFieldsHandled,\n config\n );\n\n\n const prisma = getPrismaInstance();\n const results = await this.executeTransactionLogic(\n prismaFinalArgs,\n config,\n prisma\n );\n\n return results;\n }\n };\n\n\n private async handlePasswordHashing(\n args: any[],\n config: ServiceOperationConfig\n ): Promise<any[]> {\n let processedArgs = [...args];\n\n if (config.requiresPasswordHashing) {\n const dataIndex = config.operationType.includes(\"update\") ? 1 : 0;\n const data = processedArgs[dataIndex];\n\n if (Array.isArray(data)) {\n for (const i in data) {\n if (this.shouldHashPassword(data[i]))\n processedArgs[dataIndex][i] = await this.processPasswordHashing(\n data[i]\n );\n }\n } else if (this.shouldHashPassword(data)) {\n processedArgs[dataIndex] = await this.processPasswordHashing(data);\n }\n }\n\n return processedArgs;\n }\n\n private async processRelationFieldsInBody(\n args: any[],\n config: ServiceOperationConfig\n ): Promise<any[]> {\n let processedArgs = [...args];\n\n if (config.relationFieldsHandling) {\n const dataIndex = config.operationType.includes(\"update\") ? 1 : 0;\n\n if (config.operationType === \"batchUpdate\") {\n const dataArray = processedArgs[0];\n if (Array.isArray(dataArray)) {\n processedArgs[0] = dataArray.map((data) =>\n handleRelationFieldsInBody(\n data as Record<string, any>,\n this.relationFields,\n config.relationFieldsHandling\n )\n );\n }\n } else if (config.operationType === \"batchDelete\") {\n const batchFilters = processedArgs[0];\n if (Array.isArray(batchFilters)) {\n processedArgs[0] = batchFilters.map((filters) =>\n handleRelationFieldsInBody(\n filters as Record<string, any>,\n this.relationFields\n )\n );\n }\n } else if (config.operationType === \"createMany\") {\n const data = processedArgs[dataIndex];\n if (Array.isArray(data)) {\n processedArgs[dataIndex] = data.map((item) =>\n handleRelationFieldsInBody(\n item as Record<string, any>,\n this.relationFields,\n config.relationFieldsHandling\n )\n );\n }\n } else {\n const data = processedArgs[dataIndex];\n if (data) {\n processedArgs[dataIndex] = handleRelationFieldsInBody(\n data as Record<string, any>,\n this.relationFields,\n config.relationFieldsHandling\n );\n }\n }\n }\n\n return processedArgs;\n }\n\n private buildPrismaArgs(args: any[], config: ServiceOperationConfig): any {\n switch (config.operationType) {\n case \"createOne\":\n case \"createMany\":\n return deepmerge({ data: args[0] }, args[1] || {});\n case \"findMany\":\n return deepmerge({ where: args[0] }, args[1] || {});\n case \"findById\":\n return deepmerge({ where: { id: args[0] } }, args[1] || {});\n case \"findOne\":\n return deepmerge({ where: args[0] }, args[1] || {});\n case \"updateOne\":\n return deepmerge({ where: args[0], data: args[1] }, args[2] || {});\n case \"updateMany\":\n const firstMerge = deepmerge({ data: args[1] }, args[2] || {});\n return deepmerge({ where: args[0] }, firstMerge);\n case \"deleteOne\":\n case \"deleteMany\":\n return { where: args[0] };\n case \"count\":\n return { where: args[0] };\n default:\n return {};\n }\n }\n\n private async executeTransactionLogic(\n args: any[],\n config: ServiceOperationConfig,\n prisma: PrismaClient\n ): Promise<any> {\n if (config.operationType === \"batchUpdate\") {\n const dataArray = args[0];\n const queryOptions = args[1];\n\n return await (prisma as any).$transaction(async (tx: any) => {\n const updatePromises = dataArray.map(async (data: any) => {\n let processedData = data;\n if (this.shouldHashPassword(data)) {\n processedData = await this.processPasswordHashing(data);\n }\n\n const finalPrismaQueryParams = handleRelationFieldsInBody(\n {\n batchedData: {\n ...processedData,\n apiAction: \"update\",\n },\n } as Record<string, any>,\n {\n singular: [\n {\n ...prismaSchemaParser.getField({\n type: pascalCase(this.modelName as string),\n })!,\n name: \"batchedData\",\n },\n ],\n list: [],\n }\n );\n\n return await tx[this.modelName as string].update(\n deepmerge(\n finalPrismaQueryParams.batchedData?.update,\n queryOptions || {}\n ) as { where: any; data: any }\n );\n });\n\n return await Promise.all(updatePromises);\n });\n }\n\n if (config.operationType === \"batchDelete\") {\n const batchFilters = args[0];\n\n return await (prisma as any).$transaction(async (tx: any) => {\n const deletePromises = batchFilters.map(async (filters: any) => {\n return await tx[this.modelName as string].delete({ where: filters });\n });\n\n return await Promise.all(deletePromises);\n });\n }\n\n throw new Error(`Unknown transaction operation: ${config.operationType}`);\n }\n\n private shouldHashPassword(data: any): boolean {\n return kebabCase(this.modelName as string) === \"user\" && data?.password;\n }\n\n private async processPasswordHashing(data: any): Promise<any> {\n if (Array.isArray(data)) {\n const processedArray: any[] = [];\n for (let i = 0; i < data.length; i++) {\n const curr = data[i];\n if (\n \"password\" in curr &&\n !authService.isPasswordHashed(curr.password!)\n ) {\n processedArray[i] = {\n ...curr,\n password: await authService.hashPassword(curr.password!),\n };\n } else {\n processedArray[i] = curr;\n }\n }\n return processedArray;\n } else {\n if (data.password && !authService.isPasswordHashed(data.password)) {\n return {\n ...data,\n password: await authService.hashPassword(data.password),\n };\n }\n }\n return data;\n }\n\n // ─── Public API ─────────────────────────────────────────────────────────────\n\n /**\n * Creates a single record in the database.\n *\n * @param data - The data for creating the record\n * @param queryOptions - Optional Prisma query options (select, include, etc.)\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const user = await userService.createOne({\n * name: \"John Doe\",\n * email: \"john@example.com\"\n * });\n * ```\n */\n async createOne<TOptions extends CreateOptions<TModelName>>(\n data: CreateData<TModelName>,\n queryOptions?: TOptions,\n context?: ServiceHookContext\n ): Promise<GetPayload<TModelName, TOptions>> {\n return this.executeOperation({\n operationType: \"createOne\",\n prismaMethod: \"create\",\n requiresPasswordHashing: true,\n relationFieldsHandling: [\"delete\", \"disconnect\", \"update\"],\n returnsFallback: undefined,\n })(data, queryOptions, context);\n }\n\n /**\n * Creates multiple records in the database.\n *\n * @param data - Array of data objects or object with data array\n * @param queryOptions - Optional Prisma query options\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const result = await userService.createMany([\n * { name: \"John Doe\", email: \"john@example.com\" },\n * { name: \"Jane Smith\", email: \"jane@example.com\" }\n * ]);\n * ```\n */\n async createMany<TOptions extends CreateManyOptions<TModelName>>(\n data: CreateManyData<TModelName>,\n queryOptions?: TOptions,\n context?: ServiceHookContext\n ): Promise<GetPayload<TModelName, TOptions>[]> {\n return this.executeOperation({\n operationType: \"createMany\",\n prismaMethod: \"createMany\",\n requiresPasswordHashing: true,\n relationFieldsHandling: [\"delete\", \"disconnect\", \"update\"],\n returnsFallback: undefined,\n })(data, queryOptions, context);\n }\n\n /**\n * Counts records matching the specified filters.\n *\n * @param filters - Optional where conditions\n * @param queryOptions - Optional Prisma query options\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const total = await userService.count({ status: \"active\" });\n * ```\n */\n async count(\n filters?: CountFilters<TModelName>,\n context?: ServiceHookContext\n ): Promise<number> {\n return this.executeOperation({\n operationType: \"count\",\n prismaMethod: \"count\",\n returnsFallback: 0,\n })(filters, context);\n }\n\n /**\n * Finds multiple records matching the specified filters.\n *\n * @param filters - Optional where conditions\n * @param queryOptions - Optional Prisma query options (select, include, orderBy, skip, take, etc.)\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const users = await userService.findMany(\n * { status: \"active\" },\n * { orderBy: { createdAt: \"desc\" }, take: 10 }\n * );\n * ```\n */\n async findMany<TOptions extends FindManyOptions<TModelName>>(\n filters?: FindManyFilters<TModelName>,\n queryOptions?: TOptions,\n context?: ServiceHookContext\n ): Promise<GetPayload<TModelName, TOptions>[]> {\n return this.executeOperation({\n operationType: \"findMany\",\n prismaMethod: \"findMany\",\n returnsFallback: [],\n })(filters, queryOptions, context);\n }\n\n /**\n * Finds a single record by its ID.\n *\n * @param id - The unique identifier of the record\n * @param queryOptions - Optional Prisma query options (select, include, etc.)\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const user = await userService.findById(\"user-123\");\n * ```\n */\n async findById<TOptions extends FindOneOptions<TModelName>>(\n id: string | number,\n queryOptions?: TOptions,\n context?: ServiceHookContext\n ): Promise<GetPayload<TModelName, TOptions> | null> {\n return this.executeOperation({\n operationType: \"findById\",\n prismaMethod: \"findUnique\",\n returnsFallback: undefined,\n })(id, queryOptions, context);\n }\n\n /**\n * Finds the first record matching the specified filters.\n *\n * @param filters - Where conditions to filter records\n * @param queryOptions - Optional Prisma query options\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const user = await userService.findOne({ email: \"john@example.com\" });\n * ```\n */\n async findOne<TOptions extends FindOneOptions<TModelName>>(\n filters: FindOneFilters<TModelName>,\n queryOptions?: TOptions,\n context?: ServiceHookContext\n ): Promise<GetPayload<TModelName, TOptions> | null> {\n return this.executeOperation({\n operationType: \"findOne\",\n prismaMethod: \"findFirst\",\n returnsFallback: undefined,\n customPrismaLogic: async (args, prisma, _, serviceContext) => {\n const filters = args[0];\n const queryOptions = args[1];\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 await (prisma as any)[serviceContext.modelName].findUnique(\n deepmerge({ where: filters }, queryOptions || {})\n );\n } else {\n return await (prisma as any)[serviceContext.modelName].findFirst(\n deepmerge({ where: filters }, queryOptions || {})\n );\n }\n },\n })(filters, queryOptions, context);\n }\n\n /**\n * Updates a single record matching the specified filters.\n *\n * @param filters - Where conditions to identify the record\n * @param data - The data to update\n * @param queryOptions - Optional Prisma query options\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const updated = await userService.updateOne(\n * { id: \"user-123\" },\n * { name: \"John Updated\" }\n * );\n * ```\n */\n async updateOne<TOptions extends UpdateOneOptions<TModelName>>(\n filters: UpdateOneFilters<TModelName>,\n data: UpdateOneData<TModelName>,\n queryOptions?: TOptions,\n context?: ServiceHookContext\n ): Promise<GetPayload<TModelName, TOptions>> {\n return this.executeOperation({\n operationType: \"updateOne\",\n prismaMethod: \"update\",\n requiresPasswordHashing: true,\n relationFieldsHandling: [],\n returnsFallback: undefined,\n })(filters, data, queryOptions, context);\n }\n\n /**\n * Updates a single record matching the specified id.\n *\n * @param id - The unique identifier of the record\n * @param data - The data to update\n * @param queryOptions - Optional Prisma query options\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const updated = await userService.updateById(\"user-123\", { name: \"John Updated\" });\n * ```\n */\n async updateById<TOptions extends UpdateOneOptions<TModelName>>(\n id: string | number,\n data: UpdateOneData<TModelName>,\n queryOptions?: TOptions,\n context?: ServiceHookContext\n ): Promise<GetPayload<TModelName, TOptions>> {\n return this.executeOperation({\n operationType: \"updateOne\",\n prismaMethod: \"update\",\n requiresPasswordHashing: true,\n relationFieldsHandling: [],\n returnsFallback: undefined,\n })({ id }, data, queryOptions, context);\n }\n\n /**\n * Updates multiple records matching the specified filters.\n *\n * @param filters - Where conditions to identify records\n * @param data - The data to update\n * @param queryOptions - Optional Prisma query options\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const result = await userService.updateMany(\n * { status: \"pending\" },\n * { status: \"active\" }\n * );\n * ```\n */\n async updateMany<TOptions extends UpdateManyOptions<TModelName>>(\n filters: UpdateManyFilters<TModelName>,\n data: UpdateManyData<TModelName>,\n queryOptions?: TOptions,\n context?: ServiceHookContext\n ): Promise<{ count: number }> {\n return this.executeOperation({\n operationType: \"updateMany\",\n prismaMethod: \"updateMany\",\n requiresPasswordHashing: true,\n relationFieldsHandling: [],\n returnsFallback: undefined,\n })(filters, data, queryOptions, context);\n }\n\n /**\n * Deletes a single record by its ID.\n *\n * @param id - The unique identifier of the record\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const deleted = await userService.deleteById(\"user-123\");\n * ```\n */\n async deleteById(\n id: string | number,\n context?: ServiceHookContext\n ): Promise<GetPayload<TModelName, any>> {\n return this.executeOperation({\n operationType: \"deleteOne\",\n prismaMethod: \"delete\",\n returnsFallback: undefined,\n })({ id }, context);\n }\n\n /**\n * Deletes a single record matching the specified filters.\n *\n * @param filters - Where conditions to identify the record\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const deleted = await userService.deleteOne({ id: \"user-123\" });\n * ```\n */\n async deleteOne(\n filters: DeleteOneFilters<TModelName>,\n context?: ServiceHookContext\n ): Promise<GetPayload<TModelName, any>> {\n return this.executeOperation({\n operationType: \"deleteOne\",\n prismaMethod: \"delete\",\n returnsFallback: undefined,\n })(filters, context);\n }\n\n /**\n * Deletes multiple records matching the specified filters.\n *\n * @param filters - Where conditions to identify records\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const result = await userService.deleteMany({ status: \"inactive\" });\n * ```\n */\n async deleteMany(\n filters: DeleteManyFilters<TModelName>,\n context?: ServiceHookContext\n ): Promise<{ count: number }> {\n return this.executeOperation({\n operationType: \"deleteMany\",\n prismaMethod: \"deleteMany\",\n returnsFallback: undefined,\n })(filters, context);\n }\n\n /**\n * Performs multiple update operations in a single transaction.\n *\n * @param dataArray - Array of update objects each containing filter criteria and data\n * @param queryOptions - Optional Prisma query options applied to all updates\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const results = await userService.batchUpdate([\n * { id: \"user-1\", status: \"active\" },\n * { id: \"user-2\", status: \"inactive\" }\n * ]);\n * ```\n */\n async batchUpdate<TOptions extends UpdateOneOptions<TModelName>>(\n dataArray: UpdateOneData<TModelName>[],\n queryOptions?: TOptions,\n context?: ServiceHookContext\n ): Promise<GetPayload<TModelName, TOptions>[]> {\n return this.executeTransactionOperation({\n operationType: \"batchUpdate\",\n prismaMethod: \"update\",\n requiresPasswordHashing: true,\n relationFieldsHandling: [],\n returnsFallback: undefined,\n })(dataArray, queryOptions, context);\n }\n\n /**\n * Performs multiple delete operations in a single transaction.\n *\n * @param batchFilters - Array of where conditions each identifying a record to delete\n * @param context - Optional service execution context\n *\n * @example\n * ```ts\n * const deleted = await userService.batchDelete([\n * { id: \"user-1\" },\n * { id: \"user-2\" }\n * ]);\n * ```\n */\n async batchDelete(\n batchFilters: Array<DeleteOneFilters<TModelName>>,\n context?: ServiceHookContext\n ): Promise<GetPayload<TModelName, any>[]> {\n return this.executeTransactionOperation({\n operationType: \"batchDelete\",\n prismaMethod: \"delete\",\n relationFieldsHandling: [],\n returnsFallback: undefined,\n })(batchFilters, context);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"base.service.types.js","sourceRoot":"","sources":["../../../../../src/modules/base/types/base.service.types.ts"],"names":[],"mappings":"","sourcesContent":["import {\n ExtractPrismaData,\n ExtractPrismaFilters,\n ExtractPrismaQueryOptions,\n PrismaModels,\n} from \"../../../generated\";\n\nexport type Models = PrismaModels<any>;\n\nexport type Delegate<TModelName extends keyof Models> =\n Models[TModelName][\"Delegate\"];\n\nexport type CreateData<TModelName extends keyof Models> = ExtractPrismaData<\n Models[TModelName][\"CreateArgs\"]\n>;\nexport type CreateOptions<TModelName extends keyof Models> =\n ExtractPrismaQueryOptions<Models[TModelName][\"CreateArgs\"], \"data\">;\nexport type CreateResult<TModelName extends keyof Models> =\n Models[TModelName][\"GetPayload\"];\n\nexport type CreateManyData<TModelName extends keyof Models> = ExtractPrismaData<\n Models[TModelName][\"CreateManyArgs\"]\n>;\nexport type CreateManyOptions<TModelName extends keyof Models> =\n ExtractPrismaQueryOptions<Models[TModelName][\"CreateManyArgs\"], \"data\">;\nexport type CreateManyResult<TModelName extends keyof Models> =\n Models[TModelName][\"GetPayload\"][];\n\nexport type CountFilters<TModelName extends keyof Models> =\n ExtractPrismaFilters<Models[TModelName][\"CountArgs\"]>;\n\nexport type FindManyFilters<TModelName extends keyof Models> =\n ExtractPrismaFilters<Models[TModelName][\"FindManyArgs\"]>;\nexport type FindManyOptions<TModelName extends keyof Models> =\n ExtractPrismaQueryOptions<Models[TModelName][\"FindManyArgs\"], \"where\">;\nexport type FindManyResult<TModelName extends keyof Models> =\n Models[TModelName][\"GetPayload\"][];\n\nexport type FindOneFilters<TModelName extends keyof Models> =\n ExtractPrismaFilters<Models[TModelName][\"FindFirstArgs\"]>;\nexport type FindOneOptions<TModelName extends keyof Models> =\n ExtractPrismaQueryOptions<Models[TModelName][\"FindFirstArgs\"], \"where\">;\nexport type FindOneResult<TModelName extends keyof Models> =\n | Models[TModelName][\"GetPayload\"]\n | null;\n\nexport type UpdateOneFilters<TModelName extends keyof Models> =\n ExtractPrismaFilters<Models[TModelName][\"UpdateArgs\"]>;\nexport type UpdateOneData<TModelName extends keyof Models> = ExtractPrismaData<\n Models[TModelName][\"UpdateArgs\"]\n>;\nexport type UpdateOneOptions<TModelName extends keyof Models> =\n ExtractPrismaQueryOptions<Models[TModelName][\"UpdateArgs\"], \"where\" | \"data\">;\nexport type UpdateOneResult<TModelName extends keyof Models> =\n Models[TModelName][\"GetPayload\"];\n\nexport type UpdateManyFilters<TModelName extends keyof Models> =\n ExtractPrismaFilters<Models[TModelName][\"UpdateManyArgs\"]>;\nexport type UpdateManyData<TModelName extends keyof Models> = ExtractPrismaData<\n Models[TModelName][\"UpdateManyArgs\"]\n>;\nexport type UpdateManyOptions<TModelName extends keyof Models> =\n ExtractPrismaQueryOptions<\n Models[TModelName][\"UpdateManyArgs\"],\n \"where\" | \"data\"\n >;\n\nexport type DeleteOneFilters<TModelName extends keyof Models> =\n ExtractPrismaFilters<Models[TModelName][\"DeleteArgs\"]>;\n\nexport type DeleteManyFilters<TModelName extends keyof Models> =\n ExtractPrismaFilters<Models[TModelName][\"DeleteManyArgs\"]>;\n\nexport type GetPayload<\n TModelName extends keyof Models,\n TOptions extends Record<string, any>,\n> = PrismaModels<TOptions>[TModelName][\"GetPayload\"];\n"]}
1
+ {"version":3,"file":"base.service.types.js","sourceRoot":"","sources":["../../../../../src/modules/base/types/base.service.types.ts"],"names":[],"mappings":"","sourcesContent":["import {\n ExtractPrismaData,\n ExtractPrismaFilters,\n ExtractPrismaQueryOptions,\n PrismaModels,\n} from \"../../../generated\";\nimport { User } from \"../../../types\";\n\nexport type Models = PrismaModels<any>;\n\n\nexport interface ServiceHookContext {\n /**\n * The authenticated user making the request.\n */\n user?: User;\n /**\n * The access token from the request for authorization.\n */\n accessToken?: string;\n}\n\nexport type Delegate<TModelName extends keyof Models> =\n Models[TModelName][\"Delegate\"];\n\nexport type CreateData<TModelName extends keyof Models> = ExtractPrismaData<\n Models[TModelName][\"CreateArgs\"]\n>;\nexport type CreateOptions<TModelName extends keyof Models> =\n ExtractPrismaQueryOptions<Models[TModelName][\"CreateArgs\"], \"data\">;\nexport type CreateResult<TModelName extends keyof Models> =\n Models[TModelName][\"GetPayload\"];\n\nexport type CreateManyData<TModelName extends keyof Models> = ExtractPrismaData<\n Models[TModelName][\"CreateManyArgs\"]\n>;\nexport type CreateManyOptions<TModelName extends keyof Models> =\n ExtractPrismaQueryOptions<Models[TModelName][\"CreateManyArgs\"], \"data\">;\nexport type CreateManyResult<TModelName extends keyof Models> =\n Models[TModelName][\"GetPayload\"][];\n\nexport type CountFilters<TModelName extends keyof Models> =\n ExtractPrismaFilters<Models[TModelName][\"CountArgs\"]>;\n\nexport type FindManyFilters<TModelName extends keyof Models> =\n ExtractPrismaFilters<Models[TModelName][\"FindManyArgs\"]>;\nexport type FindManyOptions<TModelName extends keyof Models> =\n ExtractPrismaQueryOptions<Models[TModelName][\"FindManyArgs\"], \"where\">;\nexport type FindManyResult<TModelName extends keyof Models> =\n Models[TModelName][\"GetPayload\"][];\n\nexport type FindOneFilters<TModelName extends keyof Models> =\n ExtractPrismaFilters<Models[TModelName][\"FindFirstArgs\"]>;\nexport type FindOneOptions<TModelName extends keyof Models> =\n ExtractPrismaQueryOptions<Models[TModelName][\"FindFirstArgs\"], \"where\">;\nexport type FindOneResult<TModelName extends keyof Models> =\n | Models[TModelName][\"GetPayload\"]\n | null;\n\nexport type UpdateOneFilters<TModelName extends keyof Models> =\n ExtractPrismaFilters<Models[TModelName][\"UpdateArgs\"]>;\nexport type UpdateOneData<TModelName extends keyof Models> = ExtractPrismaData<\n Models[TModelName][\"UpdateArgs\"]\n>;\nexport type UpdateOneOptions<TModelName extends keyof Models> =\n ExtractPrismaQueryOptions<Models[TModelName][\"UpdateArgs\"], \"where\" | \"data\">;\nexport type UpdateOneResult<TModelName extends keyof Models> =\n Models[TModelName][\"GetPayload\"];\n\nexport type UpdateManyFilters<TModelName extends keyof Models> =\n ExtractPrismaFilters<Models[TModelName][\"UpdateManyArgs\"]>;\nexport type UpdateManyData<TModelName extends keyof Models> = ExtractPrismaData<\n Models[TModelName][\"UpdateManyArgs\"]\n>;\nexport type UpdateManyOptions<TModelName extends keyof Models> =\n ExtractPrismaQueryOptions<\n Models[TModelName][\"UpdateManyArgs\"],\n \"where\" | \"data\"\n >;\n\nexport type DeleteOneFilters<TModelName extends keyof Models> =\n ExtractPrismaFilters<Models[TModelName][\"DeleteArgs\"]>;\n\nexport type DeleteManyFilters<TModelName extends keyof Models> =\n ExtractPrismaFilters<Models[TModelName][\"DeleteManyArgs\"]>;\n\nexport type GetPayload<\n TModelName extends keyof Models,\n TOptions extends Record<string, any>,\n> = PrismaModels<TOptions>[TModelName][\"GetPayload\"];\n"]}
@@ -59,6 +59,12 @@ export class ErrorPrettifier {
59
59
  switch (expected) {
60
60
  case "string":
61
61
  return "IsStringConstraint";
62
+ case "email":
63
+ return "IsEmailConstraint";
64
+ case "uuid":
65
+ return "IsUuidConstraint";
66
+ case "url":
67
+ return "IsUrlConstraint";
62
68
  case "number":
63
69
  return "IsNumberConstraint";
64
70
  case "boolean":
@@ -70,57 +76,47 @@ export class ErrorPrettifier {
70
76
  case "date":
71
77
  return "IsDateConstraint";
72
78
  default:
79
+ if (typeof expected === "object" && "includes" in expected)
80
+ return "ContainsConstraint";
81
+ if (typeof expected === "object" && "startsWith" in expected)
82
+ return "StartsWithConstraint";
83
+ if (typeof expected === "object" && "endsWith" in expected)
84
+ return "EndsWithConstraint";
73
85
  return "InvalidTypeConstraint";
74
86
  }
75
87
  case "too_small":
76
- if (issue.type === "string") {
88
+ if (issue.origin === "string") {
77
89
  return "MinLengthConstraint";
78
90
  }
79
- else if (issue.type === "number") {
91
+ else if (issue.origin === "number") {
80
92
  return "MinConstraint";
81
93
  }
82
- else if (issue.type === "array") {
94
+ else if (issue.origin === "array") {
83
95
  return "ArrayMinSizeConstraint";
84
96
  }
85
97
  return "TooSmallConstraint";
86
98
  case "too_big":
87
- if (issue.type === "string") {
99
+ if (issue.origin === "string") {
88
100
  return "MaxLengthConstraint";
89
101
  }
90
- else if (issue.type === "number") {
102
+ else if (issue.origin === "number") {
91
103
  return "MaxConstraint";
92
104
  }
93
- else if (issue.type === "array") {
105
+ else if (issue.origin === "array") {
94
106
  return "ArrayMaxSizeConstraint";
95
107
  }
96
108
  return "TooBigConstraint";
97
- case "invalid_string":
98
- if ("validation" in issue) {
99
- const validation = issue.validation;
100
- if (validation === "email")
101
- return "IsEmailConstraint";
102
- if (validation === "uuid")
103
- return "IsUuidConstraint";
104
- if (validation === "url")
105
- return "IsUrlConstraint";
106
- if (typeof validation === "object" && "includes" in validation)
107
- return "ContainsConstraint";
108
- if (typeof validation === "object" && "startsWith" in validation)
109
- return "StartsWithConstraint";
110
- if (typeof validation === "object" && "endsWith" in validation)
111
- return "EndsWithConstraint";
109
+ case "invalid_value":
110
+ if (issue.values.length > 1) {
111
+ return "IsEnumConstraint";
112
+ }
113
+ else {
114
+ return "EqualsConstraint";
112
115
  }
113
- return "InvalidStringConstraint";
114
- case "invalid_enum_value":
115
- return "IsEnumConstraint";
116
- case "invalid_literal":
117
- return "EqualsConstraint";
118
116
  case "unrecognized_keys":
119
117
  return "UnrecognizedKeysConstraint";
120
118
  case "invalid_union":
121
119
  return "InvalidUnionConstraint";
122
- case "invalid_date":
123
- return "IsDateConstraint";
124
120
  case "custom":
125
121
  return "CustomConstraint";
126
122
  default:
@@ -135,7 +131,7 @@ export class ErrorPrettifier {
135
131
  if (typeof segment === "number") {
136
132
  return `[${segment}]`;
137
133
  }
138
- return index === 0 ? segment : `.${segment}`;
134
+ return index === 0 ? segment : `.${String(segment)}`;
139
135
  })
140
136
  .join("")
141
137
  .replace(/\.\[/g, "[");
@@ -151,7 +147,7 @@ export class ErrorPrettifier {
151
147
  }
152
148
  return result;
153
149
  }
154
- injectFieldPathInZodMessage(message, fieldPath, issue) {
150
+ injectFieldPathInZodMessage(message, fieldPath, _) {
155
151
  if (!fieldPath) {
156
152
  return message;
157
153
  }