arkos 1.2.32-test → 1.3.0-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (396) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/app.js +1 -1
  3. package/dist/cjs/app.js.map +1 -1
  4. package/dist/cjs/exports/auth/index.js +1 -6
  5. package/dist/cjs/exports/controllers/index.js +1 -11
  6. package/dist/cjs/exports/error-handler/index.js +1 -11
  7. package/dist/cjs/exports/index.js +1 -12
  8. package/dist/cjs/exports/middlewares/index.js +1 -7
  9. package/dist/cjs/exports/prisma/index.js +1 -6
  10. package/dist/cjs/exports/prisma/index.js.map +1 -1
  11. package/dist/cjs/exports/services/index.js +1 -49
  12. package/dist/cjs/exports/services/index.js.map +1 -1
  13. package/dist/cjs/exports/utils/index.js +1 -44
  14. package/dist/cjs/exports/validation/index.js +1 -11
  15. package/dist/cjs/modules/auth/auth.controller.js +1 -194
  16. package/dist/cjs/modules/auth/auth.controller.js.map +1 -1
  17. package/dist/cjs/modules/auth/auth.router.js +1 -50
  18. package/dist/cjs/modules/auth/auth.router.js.map +1 -1
  19. package/dist/cjs/modules/auth/auth.service.js +1 -185
  20. package/dist/cjs/modules/auth/auth.service.js.map +1 -1
  21. package/dist/cjs/modules/auth/utils/auth-error-objects.js +1 -0
  22. package/dist/cjs/modules/auth/utils/auth-error-objects.js.map +1 -0
  23. package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +1 -83
  24. package/dist/cjs/modules/auth/utils/services/auth-action.service.js +1 -0
  25. package/dist/cjs/modules/auth/utils/services/auth-action.service.js.map +1 -0
  26. package/dist/cjs/modules/base/base.controller.js +1 -158
  27. package/dist/cjs/modules/base/base.controller.js.map +1 -1
  28. package/dist/cjs/modules/base/base.middlewares.js +1 -92
  29. package/dist/cjs/modules/base/base.middlewares.js.map +1 -1
  30. package/dist/cjs/modules/base/base.router.js +1 -24
  31. package/dist/cjs/modules/base/base.router.js.map +1 -1
  32. package/dist/cjs/modules/base/base.service.js +1 -128
  33. package/dist/cjs/modules/base/base.service.js.map +1 -1
  34. package/dist/cjs/modules/base/types/base.service.types.js +1 -0
  35. package/dist/cjs/modules/base/types/base.service.types.js.map +1 -0
  36. package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js +1 -82
  37. package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js.map +1 -1
  38. package/dist/cjs/modules/base/utils/helpers/base.middlewares.helpers.js +1 -50
  39. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +1 -97
  40. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
  41. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +1 -171
  42. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
  43. package/dist/cjs/modules/base/utils/router-validator.js +1 -0
  44. package/dist/cjs/modules/base/utils/router-validator.js.map +1 -0
  45. package/dist/cjs/modules/base/utils/service-hooks-manager.js +1 -0
  46. package/dist/cjs/modules/base/utils/service-hooks-manager.js.map +1 -0
  47. package/dist/cjs/modules/email/email.service.js +1 -104
  48. package/dist/cjs/modules/error-handler/error-handler.controller.js +4 -146
  49. package/dist/cjs/modules/error-handler/error-handler.controller.js.map +1 -1
  50. package/dist/cjs/modules/error-handler/utils/app-error.js +1 -17
  51. package/dist/cjs/modules/error-handler/utils/app-error.js.map +1 -1
  52. package/dist/cjs/modules/error-handler/utils/catch-async.js +1 -12
  53. package/dist/cjs/modules/error-handler/utils/catch-async.js.map +1 -1
  54. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +3 -201
  55. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
  56. package/dist/cjs/modules/file-upload/file-upload.controller.js +1 -271
  57. package/dist/cjs/modules/file-upload/file-upload.controller.js.map +1 -1
  58. package/dist/cjs/modules/file-upload/file-upload.router.js +1 -44
  59. package/dist/cjs/modules/file-upload/file-upload.router.js.map +1 -1
  60. package/dist/cjs/modules/file-upload/file-upload.service.js +1 -322
  61. package/dist/cjs/modules/file-upload/file-upload.service.js.map +1 -1
  62. package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js +1 -97
  63. package/dist/cjs/modules/swagger/swagger.router.js +1 -99
  64. package/dist/cjs/modules/swagger/swagger.router.js.map +1 -1
  65. package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +1 -250
  66. package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +1 -1
  67. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js +1 -0
  68. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js.map +1 -0
  69. package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js +1 -66
  70. package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +1 -1
  71. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -41
  72. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -1
  73. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -22
  74. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +1 -1
  75. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js +1 -0
  76. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js.map +1 -0
  77. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +1 -0
  78. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js.map +1 -0
  79. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +1 -0
  80. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js.map +1 -0
  81. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +1 -0
  82. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js.map +1 -0
  83. package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +1 -0
  84. package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -0
  85. package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js +1 -94
  86. package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -1
  87. package/dist/cjs/package.json +3 -0
  88. package/dist/cjs/server.js +4 -2
  89. package/dist/cjs/server.js.map +1 -1
  90. package/dist/cjs/types/arkos-config.js +1 -3
  91. package/dist/cjs/types/arkos-config.js.map +1 -1
  92. package/dist/cjs/types/auth.js +1 -3
  93. package/dist/cjs/types/auth.js.map +1 -1
  94. package/dist/cjs/types/index.js +1 -11
  95. package/dist/cjs/types/index.js.map +1 -1
  96. package/dist/cjs/types/router-config.js +1 -3
  97. package/dist/cjs/types/router-config.js.map +1 -1
  98. package/dist/cjs/utils/arkos-env.js +1 -9
  99. package/dist/cjs/utils/cli/build.js +5 -212
  100. package/dist/cjs/utils/cli/build.js.map +1 -1
  101. package/dist/cjs/utils/cli/dev.js +3 -256
  102. package/dist/cjs/utils/cli/dev.js.map +1 -1
  103. package/dist/cjs/utils/cli/generate.js +1 -189
  104. package/dist/cjs/utils/cli/generate.js.map +1 -1
  105. package/dist/cjs/utils/cli/index.js +1 -81
  106. package/dist/cjs/utils/cli/index.js.map +1 -1
  107. package/dist/cjs/utils/cli/start.js +1 -93
  108. package/dist/cjs/utils/cli/start.js.map +1 -1
  109. package/dist/cjs/utils/cli/utils/cli.helpers.js +1 -24
  110. package/dist/cjs/utils/cli/utils/smart-fs-watcher.js +1 -0
  111. package/dist/cjs/utils/cli/utils/smart-fs-watcher.js.map +1 -0
  112. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +5 -20
  113. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js +9 -18
  114. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +1 -1
  115. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-hooks-template.js +144 -0
  116. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-hooks-template.js.map +1 -0
  117. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js +156 -135
  118. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +1 -1
  119. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +9 -37
  120. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +1 -1
  121. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js +11 -36
  122. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js.map +1 -1
  123. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js +6 -32
  124. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js.map +1 -1
  125. package/dist/cjs/utils/cli/utils/template-generators.js +2 -28
  126. package/dist/cjs/utils/cli/utils/template-generators.js.map +1 -1
  127. package/dist/cjs/utils/cli/utils/watermark-stamper.js +3 -0
  128. package/dist/cjs/utils/cli/utils/watermark-stamper.js.map +1 -0
  129. package/dist/cjs/utils/dotenv.helpers.js +1 -43
  130. package/dist/cjs/utils/dynamic-loader.js +9 -0
  131. package/dist/cjs/utils/dynamic-loader.js.map +1 -0
  132. package/dist/cjs/utils/features/api.features.js +1 -167
  133. package/dist/cjs/utils/features/api.features.js.map +1 -1
  134. package/dist/cjs/utils/features/change-case.features.js +1 -67
  135. package/dist/cjs/utils/features/port-and-host-allocator.js +1 -0
  136. package/dist/cjs/utils/features/port-and-host-allocator.js.map +1 -0
  137. package/dist/cjs/utils/helpers/api.features.helpers.js +1 -106
  138. package/dist/cjs/utils/helpers/api.features.helpers.js.map +1 -1
  139. package/dist/cjs/utils/helpers/change-case.helpers.js +1 -177
  140. package/dist/cjs/utils/helpers/deepmerge.helper.js +1 -115
  141. package/dist/cjs/utils/helpers/dynamic-loader.helpers.js +1 -0
  142. package/dist/cjs/utils/helpers/dynamic-loader.helpers.js.map +1 -0
  143. package/dist/cjs/utils/helpers/fs.helpers.js +1 -61
  144. package/dist/cjs/utils/helpers/fs.helpers.js.map +1 -1
  145. package/dist/cjs/utils/helpers/global.helpers.js +1 -89
  146. package/dist/cjs/utils/helpers/global.helpers.js.map +1 -1
  147. package/dist/cjs/utils/helpers/prisma.helpers.js +1 -52
  148. package/dist/cjs/utils/helpers/prisma.helpers.js.map +1 -1
  149. package/dist/cjs/utils/helpers/query-parser.helpers.js +1 -45
  150. package/dist/cjs/utils/helpers/routers.helpers.js +1 -21
  151. package/dist/cjs/utils/helpers/routers.helpers.js.map +1 -1
  152. package/dist/cjs/utils/helpers/text.helpers.js +1 -28
  153. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +1 -0
  154. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js.map +1 -0
  155. package/dist/cjs/utils/prisma/prisma-schema-parser.js +4 -0
  156. package/dist/cjs/utils/prisma/prisma-schema-parser.js.map +1 -0
  157. package/dist/cjs/utils/prisma/types.js +1 -0
  158. package/dist/cjs/utils/prisma/types.js.map +1 -0
  159. package/dist/cjs/utils/sheu.js +1 -119
  160. package/dist/cjs/utils/sheu.js.map +1 -1
  161. package/dist/cjs/utils/validate-dto.js +1 -17
  162. package/dist/cjs/utils/validate-dto.js.map +1 -1
  163. package/dist/cjs/utils/validate-schema.js +1 -15
  164. package/dist/cjs/utils/validate-schema.js.map +1 -1
  165. package/dist/esm/app.js +1 -1
  166. package/dist/esm/app.js.map +1 -1
  167. package/dist/esm/exports/auth/index.js +1 -2
  168. package/dist/esm/exports/controllers/index.js +1 -4
  169. package/dist/esm/exports/error-handler/index.js +1 -4
  170. package/dist/esm/exports/index.js +1 -8
  171. package/dist/esm/exports/middlewares/index.js +1 -2
  172. package/dist/esm/exports/prisma/index.js +1 -3
  173. package/dist/esm/exports/prisma/index.js.map +1 -1
  174. package/dist/esm/exports/services/index.js +1 -9
  175. package/dist/esm/exports/services/index.js.map +1 -1
  176. package/dist/esm/exports/utils/index.js +1 -4
  177. package/dist/esm/exports/validation/index.js +1 -4
  178. package/dist/esm/modules/auth/auth.controller.js +1 -187
  179. package/dist/esm/modules/auth/auth.controller.js.map +1 -1
  180. package/dist/esm/modules/auth/auth.router.js +1 -44
  181. package/dist/esm/modules/auth/auth.router.js.map +1 -1
  182. package/dist/esm/modules/auth/auth.service.js +1 -178
  183. package/dist/esm/modules/auth/auth.service.js.map +1 -1
  184. package/dist/esm/modules/auth/utils/auth-error-objects.js +1 -0
  185. package/dist/esm/modules/auth/utils/auth-error-objects.js.map +1 -0
  186. package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js +1 -73
  187. package/dist/esm/modules/auth/utils/services/auth-action.service.js +1 -0
  188. package/dist/esm/modules/auth/utils/services/auth-action.service.js.map +1 -0
  189. package/dist/esm/modules/base/base.controller.js +1 -150
  190. package/dist/esm/modules/base/base.controller.js.map +1 -1
  191. package/dist/esm/modules/base/base.middlewares.js +1 -81
  192. package/dist/esm/modules/base/base.middlewares.js.map +1 -1
  193. package/dist/esm/modules/base/base.router.js +1 -17
  194. package/dist/esm/modules/base/base.router.js.map +1 -1
  195. package/dist/esm/modules/base/base.service.js +1 -120
  196. package/dist/esm/modules/base/base.service.js.map +1 -1
  197. package/dist/esm/modules/base/types/base.service.types.js +1 -0
  198. package/dist/esm/modules/base/types/base.service.types.js.map +1 -0
  199. package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js +1 -77
  200. package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js.map +1 -1
  201. package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js +1 -44
  202. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js +1 -89
  203. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
  204. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +1 -165
  205. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
  206. package/dist/esm/modules/base/utils/router-validator.js +1 -0
  207. package/dist/esm/modules/base/utils/router-validator.js.map +1 -0
  208. package/dist/esm/modules/base/utils/service-hooks-manager.js +1 -0
  209. package/dist/esm/modules/base/utils/service-hooks-manager.js.map +1 -0
  210. package/dist/esm/modules/email/email.service.js +1 -97
  211. package/dist/esm/modules/error-handler/error-handler.controller.js +4 -107
  212. package/dist/esm/modules/error-handler/error-handler.controller.js.map +1 -1
  213. package/dist/esm/modules/error-handler/utils/app-error.js +1 -15
  214. package/dist/esm/modules/error-handler/utils/app-error.js.map +1 -1
  215. package/dist/esm/modules/error-handler/utils/catch-async.js +1 -10
  216. package/dist/esm/modules/error-handler/utils/catch-async.js.map +1 -1
  217. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js +3 -160
  218. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
  219. package/dist/esm/modules/file-upload/file-upload.controller.js +1 -266
  220. package/dist/esm/modules/file-upload/file-upload.controller.js.map +1 -1
  221. package/dist/esm/modules/file-upload/file-upload.router.js +1 -38
  222. package/dist/esm/modules/file-upload/file-upload.router.js.map +1 -1
  223. package/dist/esm/modules/file-upload/file-upload.service.js +1 -314
  224. package/dist/esm/modules/file-upload/file-upload.service.js.map +1 -1
  225. package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js +1 -87
  226. package/dist/esm/modules/swagger/swagger.router.js +1 -93
  227. package/dist/esm/modules/swagger/swagger.router.js.map +1 -1
  228. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +1 -247
  229. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +1 -1
  230. package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.js +1 -0
  231. package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.js.map +1 -0
  232. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js +1 -63
  233. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +1 -1
  234. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -38
  235. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -1
  236. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -19
  237. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +1 -1
  238. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js +1 -0
  239. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js.map +1 -0
  240. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +1 -0
  241. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js.map +1 -0
  242. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +1 -0
  243. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js.map +1 -0
  244. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +1 -0
  245. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js.map +1 -0
  246. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js +1 -0
  247. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -0
  248. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js +1 -84
  249. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -1
  250. package/dist/esm/package.json +3 -0
  251. package/dist/esm/server.js +4 -2
  252. package/dist/esm/server.js.map +1 -1
  253. package/dist/esm/types/arkos-config.js +1 -2
  254. package/dist/esm/types/arkos-config.js.map +1 -1
  255. package/dist/esm/types/auth.js +1 -2
  256. package/dist/esm/types/auth.js.map +1 -1
  257. package/dist/esm/types/index.js +1 -8
  258. package/dist/esm/types/index.js.map +1 -1
  259. package/dist/esm/types/router-config.js +1 -2
  260. package/dist/esm/types/router-config.js.map +1 -1
  261. package/dist/esm/utils/arkos-env.js +1 -7
  262. package/dist/esm/utils/cli/build.js +5 -206
  263. package/dist/esm/utils/cli/build.js.map +1 -1
  264. package/dist/esm/utils/cli/dev.js +3 -249
  265. package/dist/esm/utils/cli/dev.js.map +1 -1
  266. package/dist/esm/utils/cli/generate.js +1 -183
  267. package/dist/esm/utils/cli/generate.js.map +1 -1
  268. package/dist/esm/utils/cli/index.js +1 -74
  269. package/dist/esm/utils/cli/index.js.map +1 -1
  270. package/dist/esm/utils/cli/start.js +1 -86
  271. package/dist/esm/utils/cli/start.js.map +1 -1
  272. package/dist/esm/utils/cli/utils/cli.helpers.js +1 -16
  273. package/dist/esm/utils/cli/utils/smart-fs-watcher.js +1 -0
  274. package/dist/esm/utils/cli/utils/smart-fs-watcher.js.map +1 -0
  275. package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +5 -17
  276. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js +9 -15
  277. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +1 -1
  278. package/dist/esm/utils/cli/utils/template-generator/templates/generate-hooks-template.js +144 -0
  279. package/dist/esm/utils/cli/utils/template-generator/templates/generate-hooks-template.js.map +1 -0
  280. package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js +156 -132
  281. package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +1 -1
  282. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +9 -34
  283. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +1 -1
  284. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js +11 -30
  285. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js.map +1 -1
  286. package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js +6 -29
  287. package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js.map +1 -1
  288. package/dist/esm/utils/cli/utils/template-generators.js +2 -25
  289. package/dist/esm/utils/cli/utils/template-generators.js.map +1 -1
  290. package/dist/esm/utils/cli/utils/watermark-stamper.js +3 -0
  291. package/dist/esm/utils/cli/utils/watermark-stamper.js.map +1 -0
  292. package/dist/esm/utils/dotenv.helpers.js +1 -37
  293. package/dist/esm/utils/dynamic-loader.js +9 -0
  294. package/dist/esm/utils/dynamic-loader.js.map +1 -0
  295. package/dist/esm/utils/features/api.features.js +1 -160
  296. package/dist/esm/utils/features/api.features.js.map +1 -1
  297. package/dist/esm/utils/features/change-case.features.js +1 -31
  298. package/dist/esm/utils/features/port-and-host-allocator.js +1 -0
  299. package/dist/esm/utils/features/port-and-host-allocator.js.map +1 -0
  300. package/dist/esm/utils/helpers/api.features.helpers.js +1 -103
  301. package/dist/esm/utils/helpers/api.features.helpers.js.map +1 -1
  302. package/dist/esm/utils/helpers/change-case.helpers.js +1 -161
  303. package/dist/esm/utils/helpers/deepmerge.helper.js +1 -113
  304. package/dist/esm/utils/helpers/dynamic-loader.helpers.js +1 -0
  305. package/dist/esm/utils/helpers/dynamic-loader.helpers.js.map +1 -0
  306. package/dist/esm/utils/helpers/fs.helpers.js +1 -52
  307. package/dist/esm/utils/helpers/fs.helpers.js.map +1 -1
  308. package/dist/esm/utils/helpers/global.helpers.js +1 -47
  309. package/dist/esm/utils/helpers/global.helpers.js.map +1 -1
  310. package/dist/esm/utils/helpers/prisma.helpers.js +1 -44
  311. package/dist/esm/utils/helpers/prisma.helpers.js.map +1 -1
  312. package/dist/esm/utils/helpers/query-parser.helpers.js +1 -40
  313. package/dist/esm/utils/helpers/routers.helpers.js +1 -16
  314. package/dist/esm/utils/helpers/routers.helpers.js.map +1 -1
  315. package/dist/esm/utils/helpers/text.helpers.js +1 -22
  316. package/dist/esm/utils/prisma/prisma-json-schema-generator.js +1 -0
  317. package/dist/esm/utils/prisma/prisma-json-schema-generator.js.map +1 -0
  318. package/dist/esm/utils/prisma/prisma-schema-parser.js +4 -0
  319. package/dist/esm/utils/prisma/prisma-schema-parser.js.map +1 -0
  320. package/dist/esm/utils/prisma/types.js +1 -0
  321. package/dist/esm/utils/prisma/types.js.map +1 -0
  322. package/dist/esm/utils/sheu.js +1 -117
  323. package/dist/esm/utils/sheu.js.map +1 -1
  324. package/dist/esm/utils/validate-dto.js +1 -11
  325. package/dist/esm/utils/validate-dto.js.map +1 -1
  326. package/dist/esm/utils/validate-schema.js +1 -9
  327. package/dist/esm/utils/validate-schema.js.map +1 -1
  328. package/dist/types/exports/prisma/index.d.ts +3 -2
  329. package/dist/types/exports/services/index.d.ts +3 -2
  330. package/dist/types/modules/auth/auth.controller.d.ts +10 -9
  331. package/dist/types/modules/auth/auth.service.d.ts +7 -3
  332. package/dist/types/modules/auth/utils/auth-error-objects.d.ts +3 -0
  333. package/dist/types/modules/auth/utils/services/auth-action.service.d.ts +23 -0
  334. package/dist/types/modules/base/base.controller.d.ts +10 -12
  335. package/dist/types/modules/base/base.middlewares.d.ts +4 -4
  336. package/dist/types/modules/base/base.service.d.ts +14 -68
  337. package/dist/types/modules/base/types/base.service.types.d.ts +215 -0
  338. package/dist/types/modules/base/utils/helpers/base.controller.helpers.d.ts +0 -2
  339. package/dist/types/modules/base/utils/helpers/base.router.helpers.d.ts +3 -3
  340. package/dist/types/modules/base/utils/helpers/base.service.helpers.d.ts +9 -2
  341. package/dist/types/modules/base/utils/router-validator.d.ts +5 -0
  342. package/dist/types/modules/base/utils/service-hooks-manager.d.ts +7 -0
  343. package/dist/types/modules/error-handler/error-handler.controller.d.ts +1 -1
  344. package/dist/types/modules/error-handler/utils/catch-async.d.ts +4 -2
  345. package/dist/types/modules/error-handler/utils/error-handler.helpers.d.ts +18 -17
  346. package/dist/types/modules/file-upload/file-upload.controller.d.ts +4 -6
  347. package/dist/types/modules/file-upload/file-upload.service.d.ts +4 -5
  348. package/dist/types/modules/swagger/utils/helpers/get-authentication-json-schema-paths.d.ts +3 -1
  349. package/dist/types/modules/swagger/utils/helpers/get-swagger-default-configs.d.ts +46 -0
  350. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.d.ts +2 -1
  351. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.d.ts +4 -0
  352. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.d.ts +1 -0
  353. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.d.ts +3 -0
  354. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.d.ts +3 -0
  355. package/dist/types/modules/swagger/utils/helpers/missing-json-schemas-generator.d.ts +34 -0
  356. package/dist/types/modules/swagger/utils/helpers/swagger.router.helpers.d.ts +4 -2
  357. package/dist/types/server.d.ts +1 -1
  358. package/dist/types/types/arkos-config.d.ts +5 -3
  359. package/dist/types/types/auth.d.ts +7 -1
  360. package/dist/types/types/index.d.ts +4 -1
  361. package/dist/types/types/router-config.d.ts +24 -1
  362. package/dist/types/utils/cli/generate.d.ts +2 -1
  363. package/dist/types/utils/cli/utils/smart-fs-watcher.d.ts +11 -0
  364. package/dist/types/utils/cli/utils/template-generator/templates/generate-hooks-template.d.ts +2 -0
  365. package/dist/types/utils/cli/utils/watermark-stamper.d.ts +9 -0
  366. package/dist/types/utils/{helpers/models.helpers.d.ts → dynamic-loader.d.ts} +37 -40
  367. package/dist/types/utils/features/port-and-host-allocator.d.ts +21 -0
  368. package/dist/types/utils/helpers/dynamic-loader.helpers.d.ts +3 -0
  369. package/dist/types/utils/helpers/fs.helpers.d.ts +0 -4
  370. package/dist/types/utils/helpers/global.helpers.d.ts +1 -0
  371. package/dist/types/utils/helpers/prisma.helpers.d.ts +0 -1
  372. package/dist/types/utils/helpers/routers.helpers.d.ts +6 -2
  373. package/dist/types/utils/prisma/prisma-json-schema-generator.d.ts +34 -0
  374. package/dist/types/utils/prisma/prisma-schema-parser.d.ts +28 -0
  375. package/dist/types/utils/prisma/types.d.ts +49 -0
  376. package/dist/types/utils/sheu.d.ts +15 -15
  377. package/package.json +32 -18
  378. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +0 -30
  379. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js.map +0 -1
  380. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +0 -442
  381. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js.map +0 -1
  382. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +0 -165
  383. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js.map +0 -1
  384. package/dist/cjs/utils/helpers/models.helpers.js +0 -314
  385. package/dist/cjs/utils/helpers/models.helpers.js.map +0 -1
  386. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +0 -24
  387. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js.map +0 -1
  388. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +0 -436
  389. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js.map +0 -1
  390. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +0 -159
  391. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js.map +0 -1
  392. package/dist/esm/utils/helpers/models.helpers.js +0 -297
  393. package/dist/esm/utils/helpers/models.helpers.js.map +0 -1
  394. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.d.ts +0 -1
  395. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.d.ts +0 -2
  396. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.d.ts +0 -2
@@ -1,26 +1,7 @@
1
- import { getUserFileExtension } from "../../../../helpers/fs.helpers.js";
2
- export function generateQueryOptionsTemplate(options) {
3
- const { modelName } = options;
4
- const isAuth = modelName?.camel === "auth";
5
- const ext = getUserFileExtension();
6
- const isTypeScript = ext === "ts";
7
- if (!modelName)
8
- throw new Error("Model name is required for query config template");
9
- const imports = isAuth
10
- ? `import { AuthPrismaQueryOptions } from 'arkos/prisma'`
11
- : `import { PrismaQueryOptions } from 'arkos/prisma'`;
12
- const typeAnnotation = isTypeScript
13
- ? isAuth
14
- ? `: AuthPrismaQueryOptions<typeof prisma.${modelName.camel}>`
15
- : `: PrismaQueryOptions<typeof prisma.${modelName.camel}>`
16
- : "";
17
- const prismaImport = isTypeScript
18
- ? `import { prisma } from "../../utils/prisma.js";\n`
19
- : "";
20
- if (isAuth) {
21
- return `${prismaImport}${imports};
1
+ "use strict";import{getUserFileExtension as i}from"../../../../helpers/fs.helpers.js";export function generateQueryOptionsTemplate(s){const{modelName:e}=s,t=e?.camel==="auth",r=i()==="ts";if(!e)throw new Error("Model name is required for query config template");const o=t?"import { AuthPrismaQueryOptions } from 'arkos/prisma'":"import { PrismaQueryOptions } from 'arkos/prisma'",a=r?t?`: AuthPrismaQueryOptions<typeof prisma.${e.camel}>`:`: PrismaQueryOptions<typeof prisma.${e.camel}>`:"",n=r?`import prisma from "../../utils/prisma.js";
2
+ `:"";return t?`${n}${o};
22
3
 
23
- const ${modelName.camel}QueryOptions${typeAnnotation} = {
4
+ const ${e.camel}QueryOptions${a} = {
24
5
  getMe: {},
25
6
  updateMe: {},
26
7
  deleteMe: {},
@@ -29,18 +10,15 @@ const ${modelName.camel}QueryOptions${typeAnnotation} = {
29
10
  updatePassword: {},
30
11
  }
31
12
 
32
- export default ${modelName.camel}QueryOptions;
33
- `;
34
- }
35
- else {
36
- return `${prismaImport}${imports};
13
+ export default ${e.camel}QueryOptions;
14
+ `:`${n}${o};
37
15
 
38
- const ${modelName.camel}QueryOptions${typeAnnotation} = {
16
+ const ${e.camel}QueryOptions${a} = {
39
17
  global: {},
40
18
  find: {},
41
19
  findOne: {},
42
20
  findMany: {},
43
- udpate: {},
21
+ update: {},
44
22
  updateMany: {},
45
23
  updateOne: {},
46
24
  create: {},
@@ -54,8 +32,5 @@ const ${modelName.camel}QueryOptions${typeAnnotation} = {
54
32
  deleteOne: {},
55
33
  }
56
34
 
57
- export default ${modelName.camel}QueryOptions;
58
- `;
59
- }
60
- }
61
- //# sourceMappingURL=generate-prisma-query-options.js.map
35
+ export default ${e.camel}QueryOptions;
36
+ `}
@@ -1 +1 @@
1
- {"version":3,"file":"generate-prisma-query-options.js","sourceRoot":"","sources":["../../../../../../../src/utils/cli/utils/template-generator/templates/generate-prisma-query-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAGtE,MAAM,UAAU,4BAA4B,CAAC,OAAwB;IACnE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9B,MAAM,MAAM,GAAG,SAAS,EAAE,KAAK,KAAK,MAAM,CAAC;IAC3C,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,YAAY,GAAG,GAAG,KAAK,IAAI,CAAC;IAElC,IAAI,CAAC,SAAS;QACZ,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAGtE,MAAM,OAAO,GAAG,MAAM;QACpB,CAAC,CAAC,uDAAuD;QACzD,CAAC,CAAC,mDAAmD,CAAC;IAGxD,MAAM,cAAc,GAAG,YAAY;QACjC,CAAC,CAAC,MAAM;YACN,CAAC,CAAC,0CAA0C,SAAS,CAAC,KAAK,GAAG;YAC9D,CAAC,CAAC,sCAAsC,SAAS,CAAC,KAAK,GAAG;QAC5D,CAAC,CAAC,EAAE,CAAC;IAGP,MAAM,YAAY,GAAG,YAAY;QAC/B,CAAC,CAAC,gDAAgD;QAClD,CAAC,CAAC,EAAE,CAAC;IAEP,IAAI,MAAM,EAAE,CAAC;QAEX,OAAO,GAAG,YAAY,GAAG,OAAO;;QAE5B,SAAS,CAAC,KAAK,eAAe,cAAc;;;;;;;;;iBASnC,SAAS,CAAC,KAAK;CAC/B,CAAC;IACA,CAAC;SAAM,CAAC;QAEN,OAAO,GAAG,YAAY,GAAG,OAAO;;QAE5B,SAAS,CAAC,KAAK,eAAe,cAAc;;;;;;;;;;;;;;;;;;;iBAmBnC,SAAS,CAAC,KAAK;CAC/B,CAAC;IACA,CAAC;AACH,CAAC","sourcesContent":["import { getUserFileExtension } from \"../../../../helpers/fs.helpers\";\nimport { TemplateOptions } from \"../../template-generators\";\n\nexport function generateQueryOptionsTemplate(options: TemplateOptions): string {\n const { modelName } = options;\n const isAuth = modelName?.camel === \"auth\";\n const ext = getUserFileExtension();\n const isTypeScript = ext === \"ts\";\n\n if (!modelName)\n throw new Error(\"Model name is required for query config template\");\n\n // Generate imports\n const imports = isAuth\n ? `import { AuthPrismaQueryOptions } from 'arkos/prisma'`\n : `import { PrismaQueryOptions } from 'arkos/prisma'`;\n\n // Generate type annotation for TypeScript\n const typeAnnotation = isTypeScript\n ? isAuth\n ? `: AuthPrismaQueryOptions<typeof prisma.${modelName.camel}>`\n : `: PrismaQueryOptions<typeof prisma.${modelName.camel}>`\n : \"\";\n\n // Generate prisma import if TypeScript\n const prismaImport = isTypeScript\n ? `import { prisma } from \"../../utils/prisma\";\\n`\n : \"\";\n\n if (isAuth) {\n // Auth template\n return `${prismaImport}${imports};\n\nconst ${modelName.camel}QueryOptions${typeAnnotation} = {\n getMe: {},\n updateMe: {},\n deleteMe: {},\n login: {},\n signup: {},\n updatePassword: {},\n}\n\nexport default ${modelName.camel}QueryOptions;\n`;\n } else {\n // Regular template\n return `${prismaImport}${imports};\n\nconst ${modelName.camel}QueryOptions${typeAnnotation} = {\n global: {},\n find: {},\n findOne: {},\n findMany: {},\n udpate: {},\n updateMany: {},\n updateOne: {},\n create: {},\n createMany: {},\n createOne: {},\n save: {},\n saveMany: {},\n saveOne: {},\n delete: {},\n deleteMany: {},\n deleteOne: {},\n}\n\nexport default ${modelName.camel}QueryOptions;\n`;\n }\n}\n"]}
1
+ {"version":3,"file":"generate-prisma-query-options.js","sourceRoot":"","sources":["../../../../../../../src/utils/cli/utils/template-generator/templates/generate-prisma-query-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAGtE,MAAM,UAAU,4BAA4B,CAAC,OAAwB;IACnE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9B,MAAM,MAAM,GAAG,SAAS,EAAE,KAAK,KAAK,MAAM,CAAC;IAC3C,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,YAAY,GAAG,GAAG,KAAK,IAAI,CAAC;IAElC,IAAI,CAAC,SAAS;QACZ,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAGtE,MAAM,OAAO,GAAG,MAAM;QACpB,CAAC,CAAC,uDAAuD;QACzD,CAAC,CAAC,mDAAmD,CAAC;IAGxD,MAAM,cAAc,GAAG,YAAY;QACjC,CAAC,CAAC,MAAM;YACN,CAAC,CAAC,0CAA0C,SAAS,CAAC,KAAK,GAAG;YAC9D,CAAC,CAAC,sCAAsC,SAAS,CAAC,KAAK,GAAG;QAC5D,CAAC,CAAC,EAAE,CAAC;IAGP,MAAM,YAAY,GAAG,YAAY;QAC/B,CAAC,CAAC,4CAA4C;QAC9C,CAAC,CAAC,EAAE,CAAC;IAEP,IAAI,MAAM,EAAE,CAAC;QAEX,OAAO,GAAG,YAAY,GAAG,OAAO;;QAE5B,SAAS,CAAC,KAAK,eAAe,cAAc;;;;;;;;;iBASnC,SAAS,CAAC,KAAK;CAC/B,CAAC;IACA,CAAC;SAAM,CAAC;QAEN,OAAO,GAAG,YAAY,GAAG,OAAO;;QAE5B,SAAS,CAAC,KAAK,eAAe,cAAc;;;;;;;;;;;;;;;;;;;iBAmBnC,SAAS,CAAC,KAAK;CAC/B,CAAC;IACA,CAAC;AACH,CAAC","sourcesContent":["import { getUserFileExtension } from \"../../../../helpers/fs.helpers\";\nimport { TemplateOptions } from \"../../template-generators\";\n\nexport function generateQueryOptionsTemplate(options: TemplateOptions): string {\n const { modelName } = options;\n const isAuth = modelName?.camel === \"auth\";\n const ext = getUserFileExtension();\n const isTypeScript = ext === \"ts\";\n\n if (!modelName)\n throw new Error(\"Model name is required for query config template\");\n\n // Generate imports\n const imports = isAuth\n ? `import { AuthPrismaQueryOptions } from 'arkos/prisma'`\n : `import { PrismaQueryOptions } from 'arkos/prisma'`;\n\n // Generate type annotation for TypeScript\n const typeAnnotation = isTypeScript\n ? isAuth\n ? `: AuthPrismaQueryOptions<typeof prisma.${modelName.camel}>`\n : `: PrismaQueryOptions<typeof prisma.${modelName.camel}>`\n : \"\";\n\n // Generate prisma import if TypeScript\n const prismaImport = isTypeScript\n ? `import prisma from \"../../utils/prisma\";\\n`\n : \"\";\n\n if (isAuth) {\n // Auth template\n return `${prismaImport}${imports};\n\nconst ${modelName.camel}QueryOptions${typeAnnotation} = {\n getMe: {},\n updateMe: {},\n deleteMe: {},\n login: {},\n signup: {},\n updatePassword: {},\n}\n\nexport default ${modelName.camel}QueryOptions;\n`;\n } else {\n // Regular template\n return `${prismaImport}${imports};\n\nconst ${modelName.camel}QueryOptions${typeAnnotation} = {\n global: {},\n find: {},\n findOne: {},\n findMany: {},\n update: {},\n updateMany: {},\n updateOne: {},\n create: {},\n createMany: {},\n createOne: {},\n save: {},\n saveMany: {},\n saveOne: {},\n delete: {},\n deleteMany: {},\n deleteOne: {},\n}\n\nexport default ${modelName.camel}QueryOptions;\n`;\n }\n}\n"]}
@@ -1,37 +1,18 @@
1
- import pluralize from "pluralize";
2
- import { checkFileExists, getUserFileExtension, } from "../../../../helpers/fs.helpers.js";
3
- export function generateRouterTemplate(options) {
4
- const { modelName, imports } = options;
5
- if (!modelName)
6
- throw new Error("Model name is required for router template");
7
- const ext = getUserFileExtension();
8
- const controllerPath = imports?.controller || `./${modelName.kebab}.controller.${ext}`;
9
- const routerConfigTsType = ext === "ts" ? ": RouterConfig" : "";
10
- const routerConfigTsTypeImport = ext === "ts" ? "import { RouterConfig } from 'arkos'" : "";
11
- const controllerExists = checkFileExists(controllerPath);
12
- const controllerImportLine = controllerExists
13
- ? `import ${modelName.camel}Controller from "${imports?.controller || `./${modelName.kebab}.controller`}"`
14
- : `// import ${modelName.camel}Controller from "${imports?.controller || `./${modelName.kebab}.controller`}"`;
15
- const controllerHandlerLine = controllerExists
16
- ? ` ${modelName.camel}Controller.someHandler`
17
- : ` // ${modelName.camel}Controller.someHandler`;
18
- return `import { Router } from 'express'
1
+ "use strict";import a from"pluralize";import{checkFileExists as p,getUserFileExtension as u}from"../../../../helpers/fs.helpers.js";export function generateRouterTemplate(l){const{modelName:o,imports:r}=l;if(!o)throw new Error("Model name is required for router template");const e=u(),n=r?.controller||`./${o.kebab}.controller.${e}`,s=e==="ts"?": RouterConfig":"",c=e==="ts"?"import { RouterConfig } from 'arkos'":"",t=p(n),i=t?`import ${o.camel}Controller from "${r?.controller||`./${o.kebab}.controller${e==="js"?".js":""}`}"`:`// import ${o.camel}Controller from "${r?.controller||`./${o.kebab}.controller${e==="js"?".js":""}`}"`,m=t?` ${o.camel}Controller.someHandler`:` // ${o.camel}Controller.someHandler`;return`import { Router } from 'express'
19
2
  import { authService } from 'arkos/services'
20
- ${controllerImportLine}
21
- ${routerConfigTsTypeImport}
3
+ ${i}
4
+ ${c}
22
5
 
23
- export const config${routerConfigTsType} = { }
6
+ export const config${s} = { }
24
7
 
25
- const ${modelName.camel}Router = Router()
8
+ const ${o.camel}Router = Router()
26
9
 
27
- ${modelName.camel}Router.post(
28
- '/custom-endpoint', // resolves to /api/${pluralize(modelName.kebab)}/custom-endpoint
10
+ ${o.camel}Router.post(
11
+ '/custom-endpoint', // resolves to /api/${a(o.kebab)}/custom-endpoint
29
12
  authService.authenticate,
30
- authService.handleAccessControl('CustomAction', '${modelName.kebab}'),
31
- ${controllerHandlerLine}
13
+ authService.handleAccessControl('CustomAction', '${o.kebab}'),
14
+ ${m}
32
15
  )
33
16
 
34
- export default ${modelName.camel}Router
35
- `;
36
- }
37
- //# sourceMappingURL=generate-router-template.js.map
17
+ export default ${o.camel}Router
18
+ `}
@@ -1 +1 @@
1
- {"version":3,"file":"generate-router-template.js","sourceRoot":"","sources":["../../../../../../../src/utils/cli/utils/template-generator/templates/generate-router-template.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,eAAe,EACf,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAGxC,MAAM,UAAU,sBAAsB,CAAC,OAAwB;IAC7D,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAEvC,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAG9E,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,cAAc,GAClB,OAAO,EAAE,UAAU,IAAI,KAAK,SAAS,CAAC,KAAK,eAAe,GAAG,EAAE,CAAC;IAElE,MAAM,kBAAkB,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,MAAM,wBAAwB,GAC5B,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7D,MAAM,gBAAgB,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IAEzD,MAAM,oBAAoB,GAAG,gBAAgB;QAC3C,CAAC,CAAC,UAAU,SAAS,CAAC,KAAK,oBACvB,OAAO,EAAE,UAAU,IAAI,KAAK,SAAS,CAAC,KAAK,aAC7C,GAAG;QACL,CAAC,CAAC,aAAa,SAAS,CAAC,KAAK,oBAC1B,OAAO,EAAE,UAAU,IAAI,KAAK,SAAS,CAAC,KAAK,aAC7C,GAAG,CAAC;IAER,MAAM,qBAAqB,GAAG,gBAAgB;QAC5C,CAAC,CAAC,KAAK,SAAS,CAAC,KAAK,wBAAwB;QAC9C,CAAC,CAAC,QAAQ,SAAS,CAAC,KAAK,wBAAwB,CAAC;IAEpD,OAAO;;EAEP,oBAAoB;EACpB,wBAAwB;;qBAEL,kBAAkB;;QAE/B,SAAS,CAAC,KAAK;;EAErB,SAAS,CAAC,KAAK;4CAC2B,SAAS,CACjD,SAAS,CAAC,KAAK,CAChB;;qDAEkD,SAAS,CAAC,KAAK;EAClE,qBAAqB;;;iBAGN,SAAS,CAAC,KAAK;CAC/B,CAAC;AACF,CAAC","sourcesContent":["import pluralize from \"pluralize\";\nimport {\n checkFileExists,\n getUserFileExtension,\n} from \"../../../../helpers/fs.helpers\";\nimport { TemplateOptions } from \"../../template-generators\";\n\nexport function generateRouterTemplate(options: TemplateOptions): string {\n const { modelName, imports } = options;\n\n if (!modelName) throw new Error(\"Model name is required for router template\");\n\n // Check if controller file exists\n const ext = getUserFileExtension();\n const controllerPath =\n imports?.controller || `./${modelName.kebab}.controller.${ext}`;\n\n const routerConfigTsType = ext === \"ts\" ? \": RouterConfig\" : \"\";\n const routerConfigTsTypeImport =\n ext === \"ts\" ? \"import { RouterConfig } from 'arkos'\" : \"\";\n\n const controllerExists = checkFileExists(controllerPath);\n\n const controllerImportLine = controllerExists\n ? `import ${modelName.camel}Controller from \"${\n imports?.controller || `./${modelName.kebab}.controller`\n }\"`\n : `// import ${modelName.camel}Controller from \"${\n imports?.controller || `./${modelName.kebab}.controller`\n }\"`;\n\n const controllerHandlerLine = controllerExists\n ? ` ${modelName.camel}Controller.someHandler`\n : ` // ${modelName.camel}Controller.someHandler`;\n\n return `import { Router } from 'express'\nimport { authService } from 'arkos/services'\n${controllerImportLine}\n${routerConfigTsTypeImport}\n\nexport const config${routerConfigTsType} = { }\n\nconst ${modelName.camel}Router = Router()\n\n${modelName.camel}Router.post(\n '/custom-endpoint', // resolves to /api/${pluralize(\n modelName.kebab\n )}/custom-endpoint\n authService.authenticate,\n authService.handleAccessControl('CustomAction', '${modelName.kebab}'),\n${controllerHandlerLine}\n)\n\nexport default ${modelName.camel}Router\n`;\n}\n"]}
1
+ {"version":3,"file":"generate-router-template.js","sourceRoot":"","sources":["../../../../../../../src/utils/cli/utils/template-generator/templates/generate-router-template.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,eAAe,EACf,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAGxC,MAAM,UAAU,sBAAsB,CAAC,OAAwB;IAC7D,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAEvC,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAG9E,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,cAAc,GAClB,OAAO,EAAE,UAAU,IAAI,KAAK,SAAS,CAAC,KAAK,eAAe,GAAG,EAAE,CAAC;IAElE,MAAM,kBAAkB,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,MAAM,wBAAwB,GAC5B,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7D,MAAM,gBAAgB,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IAEzD,MAAM,oBAAoB,GAAG,gBAAgB;QAC3C,CAAC,CAAC,UAAU,SAAS,CAAC,KAAK,oBACvB,OAAO,EAAE,UAAU;YACnB,KAAK,SAAS,CAAC,KAAK,cAAc,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,EAClE,GAAG;QACL,CAAC,CAAC,aAAa,SAAS,CAAC,KAAK,oBAC1B,OAAO,EAAE,UAAU;YACnB,KAAK,SAAS,CAAC,KAAK,cAAc,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,EAClE,GAAG,CAAC;IAER,MAAM,qBAAqB,GAAG,gBAAgB;QAC5C,CAAC,CAAC,KAAK,SAAS,CAAC,KAAK,wBAAwB;QAC9C,CAAC,CAAC,QAAQ,SAAS,CAAC,KAAK,wBAAwB,CAAC;IAEpD,OAAO;;EAEP,oBAAoB;EACpB,wBAAwB;;qBAEL,kBAAkB;;QAE/B,SAAS,CAAC,KAAK;;EAErB,SAAS,CAAC,KAAK;4CAC2B,SAAS,CACjD,SAAS,CAAC,KAAK,CAChB;;qDAEkD,SAAS,CAAC,KAAK;EAClE,qBAAqB;;;iBAGN,SAAS,CAAC,KAAK;CAC/B,CAAC;AACF,CAAC","sourcesContent":["import pluralize from \"pluralize\";\nimport {\n checkFileExists,\n getUserFileExtension,\n} from \"../../../../helpers/fs.helpers\";\nimport { TemplateOptions } from \"../../template-generators\";\n\nexport function generateRouterTemplate(options: TemplateOptions): string {\n const { modelName, imports } = options;\n\n if (!modelName) throw new Error(\"Model name is required for router template\");\n\n // Check if controller file exists\n const ext = getUserFileExtension();\n const controllerPath =\n imports?.controller || `./${modelName.kebab}.controller.${ext}`;\n\n const routerConfigTsType = ext === \"ts\" ? \": RouterConfig\" : \"\";\n const routerConfigTsTypeImport =\n ext === \"ts\" ? \"import { RouterConfig } from 'arkos'\" : \"\";\n\n const controllerExists = checkFileExists(controllerPath);\n\n const controllerImportLine = controllerExists\n ? `import ${modelName.camel}Controller from \"${\n imports?.controller ||\n `./${modelName.kebab}.controller${ext === \"js\" ? \".\" + \"js\" : \"\"}`\n }\"`\n : `// import ${modelName.camel}Controller from \"${\n imports?.controller ||\n `./${modelName.kebab}.controller${ext === \"js\" ? \".\" + \"js\" : \"\"}`\n }\"`;\n\n const controllerHandlerLine = controllerExists\n ? ` ${modelName.camel}Controller.someHandler`\n : ` // ${modelName.camel}Controller.someHandler`;\n\n return `import { Router } from 'express'\nimport { authService } from 'arkos/services'\n${controllerImportLine}\n${routerConfigTsTypeImport}\n\nexport const config${routerConfigTsType} = { }\n\nconst ${modelName.camel}Router = Router()\n\n${modelName.camel}Router.post(\n '/custom-endpoint', // resolves to /api/${pluralize(\n modelName.kebab\n )}/custom-endpoint\n authService.authenticate,\n authService.handleAccessControl('CustomAction', '${modelName.kebab}'),\n${controllerHandlerLine}\n)\n\nexport default ${modelName.camel}Router\n`;\n}\n"]}
@@ -1,32 +1,9 @@
1
- import { getUserFileExtension } from "../../../../helpers/fs.helpers.js";
2
- export function generateServiceTemplate(options) {
3
- const { modelName, imports } = options;
4
- const ext = getUserFileExtension();
5
- const isTypeScript = ext === "ts";
6
- if (!modelName)
7
- throw new Error("Model name is required for service template");
8
- const prismaImport = isTypeScript
9
- ? `import prisma from "../../utils/prisma.js";\n`
10
- : "";
11
- const baseServiceImport = isTypeScript
12
- ? `import { BaseService } from "${imports?.baseService || "arkos/services"}";`
13
- : `import { BaseService } from "${imports?.baseService || "arkos/services"}";`;
14
- const typeParameter = isTypeScript
15
- ? `<typeof prisma.${modelName.camel}>`
16
- : "";
17
- return `${prismaImport}${baseServiceImport}
1
+ "use strict";import{getUserFileExtension as m}from"../../../../helpers/fs.helpers.js";export function generateServiceTemplate(i){const{modelName:e,imports:s}=i,t=m(),r=t==="ts";if(!e)throw new Error("Model name is required for service template");const o=r?`"../../utils/prisma${t==="ts"?"":".js"}";
2
+ `:"",a=r?`import { BaseService } from "${s?.baseService||"arkos/services"}";`:`import { BaseService } from "${s?.baseService||"arkos/services"}";`,c=r?`<typeof prisma.${e.camel}>`:"";return`${r&&"import prisma from "}${o}${a}
18
3
 
19
- class ${modelName.pascal}Service extends BaseService${typeParameter} {
20
- constructor() {
21
- super("${modelName.kebab}");
22
- }
4
+ class ${e.pascal}Service extends BaseService${c} {}
23
5
 
24
- // Add your custom service methods here
25
- }
6
+ const ${e.camel}Service = new ${e.pascal}Service("${e.kebab}");
26
7
 
27
- const ${modelName.camel}Service = new ${modelName.pascal}Service();
28
-
29
- export default ${modelName.camel}Service;
30
- `;
31
- }
32
- //# sourceMappingURL=generate-service-template.js.map
8
+ export default ${e.camel}Service;
9
+ `}
@@ -1 +1 @@
1
- {"version":3,"file":"generate-service-template.js","sourceRoot":"","sources":["../../../../../../../src/utils/cli/utils/template-generator/templates/generate-service-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAGtE,MAAM,UAAU,uBAAuB,CAAC,OAAwB;IAC9D,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACvC,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,YAAY,GAAG,GAAG,KAAK,IAAI,CAAC;IAElC,IAAI,CAAC,SAAS;QACZ,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAGjE,MAAM,YAAY,GAAG,YAAY;QAC/B,CAAC,CAAC,4CAA4C;QAC9C,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,iBAAiB,GAAG,YAAY;QACpC,CAAC,CAAC,gCACE,OAAO,EAAE,WAAW,IAAI,gBAC1B,IAAI;QACN,CAAC,CAAC,gCACE,OAAO,EAAE,WAAW,IAAI,gBAC1B,IAAI,CAAC;IAGT,MAAM,aAAa,GAAG,YAAY;QAChC,CAAC,CAAC,kBAAkB,SAAS,CAAC,KAAK,GAAG;QACtC,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,GAAG,YAAY,GAAG,iBAAiB;;QAEpC,SAAS,CAAC,MAAM,8BAA8B,aAAa;;aAEtD,SAAS,CAAC,KAAK;;;;;;QAMpB,SAAS,CAAC,KAAK,iBAAiB,SAAS,CAAC,MAAM;;iBAEvC,SAAS,CAAC,KAAK;CAC/B,CAAC;AACF,CAAC","sourcesContent":["import { getUserFileExtension } from \"../../../../helpers/fs.helpers\";\nimport { TemplateOptions } from \"../../template-generators\";\n\nexport function generateServiceTemplate(options: TemplateOptions): string {\n const { modelName, imports } = options;\n const ext = getUserFileExtension();\n const isTypeScript = ext === \"ts\";\n\n if (!modelName)\n throw new Error(\"Model name is required for service template\");\n\n // Generate imports\n const prismaImport = isTypeScript\n ? `import prisma from \"../../utils/prisma\";\\n`\n : \"\";\n\n const baseServiceImport = isTypeScript\n ? `import { BaseService } from \"${\n imports?.baseService || \"arkos/services\"\n }\";`\n : `import { BaseService } from \"${\n imports?.baseService || \"arkos/services\"\n }\";`;\n\n // Generate type parameter for TypeScript\n const typeParameter = isTypeScript\n ? `<typeof prisma.${modelName.camel}>`\n : \"\";\n\n return `${prismaImport}${baseServiceImport}\n \nclass ${modelName.pascal}Service extends BaseService${typeParameter} {\n constructor() {\n super(\"${modelName.kebab}\");\n }\n\n // Add your custom service methods here\n}\n\nconst ${modelName.camel}Service = new ${modelName.pascal}Service();\n\nexport default ${modelName.camel}Service;\n`;\n}\n"]}
1
+ {"version":3,"file":"generate-service-template.js","sourceRoot":"","sources":["../../../../../../../src/utils/cli/utils/template-generator/templates/generate-service-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAGtE,MAAM,UAAU,uBAAuB,CAAC,OAAwB;IAC9D,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACvC,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,YAAY,GAAG,GAAG,KAAK,IAAI,CAAC;IAElC,IAAI,CAAC,SAAS;QACZ,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAGjE,MAAM,YAAY,GAAG,YAAY;QAC/B,CAAC,CAAC,sBAAsB,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM;QAC5D,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,iBAAiB,GAAG,YAAY;QACpC,CAAC,CAAC,gCACE,OAAO,EAAE,WAAW,IAAI,gBAC1B,IAAI;QACN,CAAC,CAAC,gCACE,OAAO,EAAE,WAAW,IAAI,gBAC1B,IAAI,CAAC;IAGT,MAAM,aAAa,GAAG,YAAY;QAChC,CAAC,CAAC,kBAAkB,SAAS,CAAC,KAAK,GAAG;QACtC,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,GAAG,YAAY,IAAI,qBAAqB,GAAG,YAAY,GAAG,iBAAiB;;QAE5E,SAAS,CAAC,MAAM,8BAA8B,aAAa;;QAE3D,SAAS,CAAC,KAAK,iBAAiB,SAAS,CAAC,MAAM,YAAY,SAAS,CAAC,KAAK;;iBAElE,SAAS,CAAC,KAAK;CAC/B,CAAC;AACF,CAAC","sourcesContent":["import { getUserFileExtension } from \"../../../../helpers/fs.helpers\";\nimport { TemplateOptions } from \"../../template-generators\";\n\nexport function generateServiceTemplate(options: TemplateOptions): string {\n const { modelName, imports } = options;\n const ext = getUserFileExtension();\n const isTypeScript = ext === \"ts\";\n\n if (!modelName)\n throw new Error(\"Model name is required for service template\");\n\n // Generate imports\n const prismaImport = isTypeScript\n ? `\"../../utils/prisma${ext === \"ts\" ? \"\" : \".\" + \"js\"}\";\\n`\n : \"\";\n\n const baseServiceImport = isTypeScript\n ? `import { BaseService } from \"${\n imports?.baseService || \"arkos/services\"\n }\";`\n : `import { BaseService } from \"${\n imports?.baseService || \"arkos/services\"\n }\";`;\n\n // Generate type parameter for TypeScript\n const typeParameter = isTypeScript\n ? `<typeof prisma.${modelName.camel}>`\n : \"\";\n\n return `${isTypeScript && \"import prisma from \"}${prismaImport}${baseServiceImport}\n \nclass ${modelName.pascal}Service extends BaseService${typeParameter} {}\n\nconst ${modelName.camel}Service = new ${modelName.pascal}Service(\"${modelName.kebab}\");\n\nexport default ${modelName.camel}Service;\n`;\n}\n"]}
@@ -1,25 +1,2 @@
1
- import { generateControllerTemplate } from "./template-generator/templates/generate-controller-template.js";
2
- import { generateAuthConfigsTemplate } from "./template-generator/templates/generate-auth-configs-template.js";
3
- import { generateMiddlewaresTemplate } from "./template-generator/templates/generate-middlewares.js";
4
- import { generateQueryOptionsTemplate } from "./template-generator/templates/generate-prisma-query-options.js";
5
- import { generateRouterTemplate } from "./template-generator/templates/generate-router-template.js";
6
- import { generateServiceTemplate } from "./template-generator/templates/generate-service-template.js";
7
- export function generateTemplate(type, options) {
8
- switch (type) {
9
- case "controller":
10
- return generateControllerTemplate(options);
11
- case "service":
12
- return generateServiceTemplate(options);
13
- case "router":
14
- return generateRouterTemplate(options);
15
- case "auth-configs":
16
- return generateAuthConfigsTemplate(options);
17
- case "query-options":
18
- return generateQueryOptionsTemplate(options);
19
- case "middlewares":
20
- return generateMiddlewaresTemplate(options);
21
- default:
22
- throw new Error(`\n Unknown template type: ${type}`);
23
- }
24
- }
25
- //# sourceMappingURL=template-generators.js.map
1
+ "use strict";import{generateControllerTemplate as t}from"./template-generator/templates/generate-controller-template.js";import{generateAuthConfigsTemplate as a}from"./template-generator/templates/generate-auth-configs-template.js";import{generateMiddlewaresTemplate as m}from"./template-generator/templates/generate-middlewares.js";import{generateQueryOptionsTemplate as n}from"./template-generator/templates/generate-prisma-query-options.js";import{generateRouterTemplate as o}from"./template-generator/templates/generate-router-template.js";import{generateServiceTemplate as l}from"./template-generator/templates/generate-service-template.js";import u from"./template-generator/templates/generate-hooks-template.js";export function generateTemplate(r,e){switch(r){case"controller":return t(e);case"service":return l(e);case"router":return o(e);case"auth-configs":return a(e);case"query-options":return n(e);case"interceptors":return m(e);case"hooks":return u(e);default:throw new Error(`
2
+ Unknown template type: ${r}`)}}
@@ -1 +1 @@
1
- {"version":3,"file":"template-generators.js","sourceRoot":"","sources":["../../../../../src/utils/cli/utils/template-generators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,6DAA6D,CAAC;AACzG,OAAO,EAAE,2BAA2B,EAAE,MAAM,+DAA+D,CAAC;AAC5G,OAAO,EAAE,2BAA2B,EAAE,MAAM,qDAAqD,CAAC;AAClG,OAAO,EAAE,4BAA4B,EAAE,MAAM,8DAA8D,CAAC;AAC5G,OAAO,EAAE,sBAAsB,EAAE,MAAM,yDAAyD,CAAC;AACjG,OAAO,EAAE,uBAAuB,EAAE,MAAM,0DAA0D,CAAC;AAoBnG,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,OAAwB;IAExB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,YAAY;YACf,OAAO,0BAA0B,CAAC,OAAO,CAAC,CAAC;QAC7C,KAAK,SAAS;YACZ,OAAO,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAC1C,KAAK,QAAQ;YACX,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACzC,KAAK,cAAc;YACjB,OAAO,2BAA2B,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,eAAe;YAClB,OAAO,4BAA4B,CAAC,OAAO,CAAC,CAAC;QAC/C,KAAK,aAAa;YAChB,OAAO,2BAA2B,CAAC,OAAO,CAAC,CAAC;QAC9C;YACE,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC","sourcesContent":["import { generateControllerTemplate } from \"./template-generator/templates/generate-controller-template\";\nimport { generateAuthConfigsTemplate } from \"./template-generator/templates/generate-auth-configs-template\";\nimport { generateMiddlewaresTemplate } from \"./template-generator/templates/generate-middlewares\";\nimport { generateQueryOptionsTemplate } from \"./template-generator/templates/generate-prisma-query-options\";\nimport { generateRouterTemplate } from \"./template-generator/templates/generate-router-template\";\nimport { generateServiceTemplate } from \"./template-generator/templates/generate-service-template\";\n\ninterface ModelName {\n pascal: string;\n camel: string;\n kebab: string;\n}\n\ninterface MiddlewareName {\n pascal: string;\n camel: string;\n kebab: string;\n}\n\nexport interface TemplateOptions {\n modelName: ModelName;\n middlewareName?: MiddlewareName;\n imports?: Record<string, string>;\n}\n\nexport function generateTemplate(\n type: string,\n options: TemplateOptions\n): string {\n switch (type) {\n case \"controller\":\n return generateControllerTemplate(options);\n case \"service\":\n return generateServiceTemplate(options);\n case \"router\":\n return generateRouterTemplate(options);\n case \"auth-configs\":\n return generateAuthConfigsTemplate(options);\n case \"query-options\":\n return generateQueryOptionsTemplate(options);\n case \"middlewares\":\n return generateMiddlewaresTemplate(options);\n default:\n throw new Error(`\\n Unknown template type: ${type}`);\n }\n}\n"]}
1
+ {"version":3,"file":"template-generators.js","sourceRoot":"","sources":["../../../../../src/utils/cli/utils/template-generators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,6DAA6D,CAAC;AACzG,OAAO,EAAE,2BAA2B,EAAE,MAAM,+DAA+D,CAAC;AAC5G,OAAO,EAAE,2BAA2B,EAAE,MAAM,qDAAqD,CAAC;AAClG,OAAO,EAAE,4BAA4B,EAAE,MAAM,8DAA8D,CAAC;AAC5G,OAAO,EAAE,sBAAsB,EAAE,MAAM,yDAAyD,CAAC;AACjG,OAAO,EAAE,uBAAuB,EAAE,MAAM,0DAA0D,CAAC;AACnG,OAAO,qBAAqB,MAAM,wDAAwD,CAAC;AAoB3F,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,OAAwB;IAExB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,YAAY;YACf,OAAO,0BAA0B,CAAC,OAAO,CAAC,CAAC;QAC7C,KAAK,SAAS;YACZ,OAAO,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAC1C,KAAK,QAAQ;YACX,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACzC,KAAK,cAAc;YACjB,OAAO,2BAA2B,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,eAAe;YAClB,OAAO,4BAA4B,CAAC,OAAO,CAAC,CAAC;QAC/C,KAAK,cAAc;YACjB,OAAO,2BAA2B,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,OAAO;YACV,OAAO,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACxC;YACE,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC","sourcesContent":["import { generateControllerTemplate } from \"./template-generator/templates/generate-controller-template\";\nimport { generateAuthConfigsTemplate } from \"./template-generator/templates/generate-auth-configs-template\";\nimport { generateMiddlewaresTemplate } from \"./template-generator/templates/generate-middlewares\";\nimport { generateQueryOptionsTemplate } from \"./template-generator/templates/generate-prisma-query-options\";\nimport { generateRouterTemplate } from \"./template-generator/templates/generate-router-template\";\nimport { generateServiceTemplate } from \"./template-generator/templates/generate-service-template\";\nimport generateHooksTemplate from \"./template-generator/templates/generate-hooks-template\";\n\ninterface ModelName {\n pascal: string;\n camel: string;\n kebab: string;\n}\n\ninterface MiddlewareName {\n pascal: string;\n camel: string;\n kebab: string;\n}\n\nexport interface TemplateOptions {\n modelName: ModelName;\n middlewareName?: MiddlewareName;\n imports?: Record<string, string>;\n}\n\nexport function generateTemplate(\n type: string,\n options: TemplateOptions\n): string {\n switch (type) {\n case \"controller\":\n return generateControllerTemplate(options);\n case \"service\":\n return generateServiceTemplate(options);\n case \"router\":\n return generateRouterTemplate(options);\n case \"auth-configs\":\n return generateAuthConfigsTemplate(options);\n case \"query-options\":\n return generateQueryOptionsTemplate(options);\n case \"interceptors\":\n return generateMiddlewaresTemplate(options);\n case \"hooks\":\n return generateHooksTemplate(options);\n default:\n throw new Error(`\\n Unknown template type: ${type}`);\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ "use strict";import{getVersion as r}from"./cli.helpers.js";class t{stamp({envFiles:o,host:e,port:n}){console.info(`
2
+ \x1B[1m\x1B[36m Arkos.js ${r()}\x1B[0m`),e&&n&&console.info(` - Local: http://${e}:${n}`),o?.length&&console.info(` - Environments: ${o?.join(", ").replaceAll(`${process.cwd()}/`,"")}
3
+ `)}}const a=new t;export default a;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watermark-stamper.js","sourceRoot":"","sources":["../../../../../src/utils/cli/utils/watermark-stamper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAK3C,MAAM,gBAAgB;IAIpB,KAAK,CAAC,EACJ,QAAQ,EACR,IAAI,EACJ,IAAI,GAKL;QACC,OAAO,CAAC,IAAI,CAAC,iCAAiC,UAAU,EAAE,SAAS,CAAC,CAAC;QACrE,IAAI,IAAI,IAAI,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,4BAA4B,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QAC3E,IAAI,QAAQ,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC;YAC3B,OAAO,CAAC,IAAI,CACV,qBAAqB,QAAQ;gBAC3B,EAAE,IAAI,CAAC,IAAI,CAAC;iBACX,UAAU,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAC3C,CAAC;IACN,CAAC;CACF;AAED,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAEhD,eAAe,gBAAgB,CAAC","sourcesContent":["import { getVersion } from \"./cli.helpers\";\n\n/**\n * Helps in putting Arkosjs watermark\n */\nclass WatermarkStamper {\n /**\n * Stamps Arkosjs watermark with Local and Environments\n */\n stamp({\n envFiles,\n host,\n port,\n }: {\n envFiles: string[] | undefined;\n host: string | undefined;\n port: string | undefined;\n }) {\n console.info(`\\n \\x1b[1m\\x1b[36m Arkos.js ${getVersion()}\\x1b[0m`);\n if (host && port) console.info(` - Local: http://${host}:${port}`);\n if (envFiles?.length || 0 > 1)\n console.info(\n ` - Environments: ${envFiles\n ?.join(\", \")\n .replaceAll(`${process.cwd()}/`, \"\")}\\n`\n );\n }\n}\n\nconst watermarkStamper = new WatermarkStamper();\n\nexport default watermarkStamper;\n"]}
@@ -1,37 +1 @@
1
- import path from "path";
2
- import fs from "fs";
3
- import dotenv from "dotenv";
4
- export function loadEnvironmentVariables() {
5
- const ENV = process.env.NODE_ENV;
6
- const cwd = process.cwd();
7
- let loadedEnvs = [];
8
- const envFiles = [
9
- path.resolve(cwd, `.env.defaults`),
10
- path.resolve(cwd, `.env.${ENV}`),
11
- path.resolve(cwd, `.env.${ENV}.local`),
12
- path.resolve(cwd, ".env.local"),
13
- path.resolve(cwd, ".env"),
14
- ];
15
- envFiles.forEach((filePath) => {
16
- if (fs.existsSync(filePath)) {
17
- if (ENV === "production" && filePath.endsWith(".local"))
18
- console.info(`Skipping the local ${filePath.replace(cwd, "")} files in production`);
19
- else {
20
- const result = dotenv.config({ path: filePath, override: true });
21
- if (result.error) {
22
- console.warn(`Warning: Error loading ${filePath}`, result.error);
23
- }
24
- else
25
- loadedEnvs.push(filePath);
26
- }
27
- }
28
- });
29
- const requiredVars = ["DATABASE_URL"];
30
- const missingVars = requiredVars.filter((varName) => !process.env[varName]);
31
- if (missingVars.length > 0) {
32
- console.error("Missing required environment variables:", missingVars.join(", "));
33
- }
34
- if (loadedEnvs)
35
- return loadedEnvs;
36
- }
37
- //# sourceMappingURL=dotenv.helpers.js.map
1
+ "use strict";import o from"path";import c from"fs";import t from"dotenv";export function loadEnvironmentVariables(){const n=process.env.NODE_ENV,r=process.cwd();let s=[];[o.resolve(r,".env.defaults"),o.resolve(r,`.env.${n}`),o.resolve(r,`.env.${n}.local`),o.resolve(r,".env.local"),o.resolve(r,".env")].forEach(e=>{if(c.existsSync(e))if(n==="production"&&e.endsWith(".local"))console.info(`Skipping the local ${e.replace(r,"")} files in production`);else{const l=t.config({path:e,override:!0});l.error?console.warn(`Warning: Error loading ${e}`,l.error):s.push(e)}});const i=["DATABASE_URL"].filter(e=>!process.env[e]);if(i.length>0&&console.error("Missing required environment variables:",i.join(", ")),s)return s}
@@ -0,0 +1,9 @@
1
+ "use strict";import{z as b}from"zod";import h from"path";import{killServerChildProcess as p}from"./cli/utils/cli.helpers.js";import g from"./sheu.js";import{applyStrictRoutingRules as v,pathExists as d}from"./helpers/dynamic-loader.helpers.js";import{kebabCase as $,pascalCase as y}from"./helpers/change-case.helpers.js";import{crd as C,getUserFileExtension as P}from"./helpers/fs.helpers.js";import{importModule as x}from"./helpers/global.helpers.js";import S from"./prisma/prisma-schema-parser.js";let M={};export function setModuleComponents(o,t){M[y(o)]=t}export function getModuleComponents(o){return M[y(o)]}export function getFileModuleComponentsFileStructure(o){const t=$(o).toLowerCase(),r=o.toLowerCase()==="auth",e=P();return{core:{hooks:`${t}.hooks.${e}`,interceptors:`${t}.middlewares.${e}`,authConfigs:`${t}.auth-configs.${e}`,authConfigsNew:`${t}.auth.${e}`,prismaQueryOptions:`${t}.prisma-query-options.${e}`,prismaQueryOptionsNew:`${t}.query.${e}`,router:`${t}.router.${e}`},dtos:r?{login:`login.dto.${e}`,signup:`signup.dto.${e}`,getMe:`get-me.dto.${e}`,updateMe:`update-me.dto.${e}`,updatePassword:`update-password.dto.${e}`}:{model:`${t}.dto.${e}`,create:`create-${t}.dto.${e}`,createOne:`create-${t}.dto.${e}`,createMany:"",update:`update-${t}.dto.${e}`,updateOne:`update-${t}.dto.${e}`,updateMany:"",query:`query-${t}.dto.${e}`,findOne:"",findMany:""},schemas:r?{login:`login.schema.${e}`,signup:`signup.schema.${e}`,getMe:`get-me.schema.${e}`,updateMe:`update-me.schema.${e}`,updatePassword:`update-password.schema.${e}`}:{model:`${t}.schema.${e}`,create:`create-${t}.schema.${e}`,createOne:`create-${t}.schema.${e}`,createMany:"",update:`update-${t}.schema.${e}`,updateOne:`update-${t}.schema.${e}`,updateMany:"",query:`query-${t}.schema.${e}`,findOne:"",findMany:""}}}export function isClass(o){return typeof o=="function"&&/^class\s/.test(Function.prototype.toString.call(o))}export function isZodSchema(o){return o instanceof b.ZodType}export async function processSubdir(o,t){const r=h.resolve(C(),"src","modules",$(o)),e=h.join(r,t),a=getFileModuleComponentsFileStructure(o),f={};if(!await d(e))return f;try{await Promise.all(Object.entries(a[t]).map(async([u,s])=>{const m=h.join(e,s);if(!(!s||!await d(m)))try{const n=await x(m).catch(async l=>{await d(m)&&(g.error(`Failed to import ${s}: `),console.error(l),p(),process.exit(1))}),i=`src/modules/${$(o)}/${s}`;if(t==="dtos"&&!isClass(n?.default))throw Error(`ValidationError: Please export as default a valid class under ${i}, in order to use as Dto.`);if(t==="schemas"&&!isZodSchema(n?.default))throw Error(`ValidationError: Please export as default a valid zod schema under ${i}, in order to use as Schema`);n&&n?.default&&(f[u]=n.default)}catch(n){if(n?.message?.includes("ValidationError"))throw n;console.error(n)}}))}catch(u){if(u?.message?.includes("ValidationError"))throw u;console.error(u)}return f}export function validateNamingConventions(o,t,r){if(o==="prismaQueryOptions"){if(g.warn(`Found ${t} which will be deprecated from 1.4.0-beta, consider switching to ${t.replace("prisma-query-options","query")}.`),r.prismaQueryOptions)throw p(),new Error(`
2
+ Cannot use both ${t} and ${t.replace("prisma-query-options","query")} at once, please choose only one name convention.
3
+ `)}else if(o==="prismaQueryOptionsNew"){if(r.prismaQueryOptions)throw p(),new Error(`
4
+ Cannot use both ${t} and ${t.replace("query","prisma-query-options")} at once, please choose only one name convention.
5
+ `)}else if(o==="authConfigs"){if(g.warn(`Found ${t} which will be deprecated from 1.4.0-beta, consider switching to ${t.replace("auth-configs","auth")}.`),r.authConfigs)throw p(),new Error(`
6
+ Cannot use both ${t} and ${t.replace("auth-configs","auth")} at once, please choose only one name convention.
7
+ `)}else if(o==="authConfigsNew"&&r.authConfigs)throw p(),new Error(`
8
+ Cannot use both ${t} and ${t.replace("auth","auth-configs")} at once, please choose only one name convention.
9
+ `)}export function assignModuleToResult(o,t,r,e,a){t==="prismaQueryOptions"||t==="prismaQueryOptionsNew"?e.prismaQueryOptions=r.default||r:t==="authConfigs"||t==="authConfigsNew"?e.authConfigs=r.default||r:t==="interceptors"?e[t]=r:t==="router"?e[t]={...r,config:v(o,a,r?.config||{})}:e[t]=r.default||r}export async function importModuleComponents(o,t,r){const e={dtos:{},schemas:{}},a=t.routers?.strict;if(!r&&!a)return e;if(getModuleComponents(o))return getModuleComponents(o);const f=h.resolve(C(),"src","modules",$(o)),u=getFileModuleComponentsFileStructure(o),s=t.validation?.resolver?t.validation.resolver==="zod"?"schemas":"dtos":null,[m,n]=await Promise.all([Object.entries(u.core).map(async([i,l])=>{if(["createMany","findMany","findOne","updateMany"].includes(i)||!l)return;const w=h.join(f,l);if(!(i==="router"&&!a&&!await d(w))&&!(i!=="router"&&a&&!await d(w)))try{let c=await x(w).catch(async O=>{try{await d(w)&&(g.error(`Failed to import ${l}`),console.error(O),p(),process.exit(1))}catch{}});!c&&i==="router"&&a&&(c={}),c&&(validateNamingConventions(i,l,e),assignModuleToResult(o,i,c,e,t))}catch(c){if(c.message?.includes("Cannot use both"))throw c;console.error(c),p()}}),s&&processSubdir(o,s)]);return M[y(o)]={...e,...s&&{[s]:n}},{...e,...s&&{[s]:n}}}export const appModules=Array.from(new Set([...S.getModelsAsArrayOfStrings(),"auth","file-upload"]));export async function loadAllModuleComponents(o){const t=[];await Promise.all(appModules.map(async e=>{const a=h.resolve(C(),"src","modules",$(e));await d(a)&&t.push(e)}));const r=appModules.map(async e=>await importModuleComponents(e,o,t.includes(e)));await Promise.all(r)}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-loader.js","sourceRoot":"","sources":["../../../src/utils/dynamic-loader.ts"],"names":[],"mappings":"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","sourcesContent":["import { z, ZodTypeAny } from \"zod\";\nimport path from \"path\";\nimport { AuthConfigs } from \"../types/auth\";\nimport { killServerChildProcess } from \"./cli/utils/cli.helpers\";\nimport { ArkosConfig } from \"../exports\";\nimport sheu from \"./sheu\";\nimport {\n applyStrictRoutingRules,\n pathExists,\n} from \"./helpers/dynamic-loader.helpers\";\nimport { kebabCase, pascalCase } from \"./helpers/change-case.helpers\";\nimport { crd, getUserFileExtension } from \"./helpers/fs.helpers\";\nimport { importModule } from \"./helpers/global.helpers\";\nimport prismaSchemaParser from \"./prisma/prisma-schema-parser\";\n\ntype AppModuleComponent = Awaited<ReturnType<typeof importModuleComponents>>;\n\nlet prismaModelsModules: Record<string, AppModuleComponent> = {};\n\n/** This was a workaround when testing and also when cjs was generated while `prismaModelsModules` was exported there where some problems */\nexport function setModuleComponents(\n modelName: string,\n modules: AppModuleComponent\n): any {\n prismaModelsModules[pascalCase(modelName)] = modules;\n}\n\nexport function getModuleComponents(modelName: string) {\n return prismaModelsModules[pascalCase(modelName)];\n}\n\n/**\n * To be reused on other part of code for correct typing\n *\n * @param key\n * @param fileName\n * @param result\n */\nexport type ValidationFileMappingKey = keyof ReturnType<\n typeof getFileModuleComponentsFileStructure\n>[\"dtos\"];\n\nexport function getFileModuleComponentsFileStructure(modelName: string) {\n const kebabModelName = kebabCase(modelName).toLowerCase();\n const isAuthModule = modelName.toLowerCase() === \"auth\";\n const ext = getUserFileExtension();\n\n return {\n core: {\n hooks: `${kebabModelName}.hooks.${ext}`,\n interceptors: `${kebabModelName}.middlewares.${ext}`,\n authConfigs: `${kebabModelName}.auth-configs.${ext}`,\n authConfigsNew: `${kebabModelName}.auth.${ext}`,\n prismaQueryOptions: `${kebabModelName}.prisma-query-options.${ext}`,\n prismaQueryOptionsNew: `${kebabModelName}.query.${ext}`,\n router: `${kebabModelName}.router.${ext}`,\n },\n dtos: isAuthModule\n ? {\n login: `login.dto.${ext}`,\n signup: `signup.dto.${ext}`,\n getMe: `get-me.dto.${ext}`,\n updateMe: `update-me.dto.${ext}`,\n updatePassword: `update-password.dto.${ext}`,\n }\n : {\n model: `${kebabModelName}.dto.${ext}`,\n create: `create-${kebabModelName}.dto.${ext}`,\n createOne: `create-${kebabModelName}.dto.${ext}`, // just for sake of completion and reusability around other parts of code\n createMany: ``,\n update: `update-${kebabModelName}.dto.${ext}`,\n updateOne: `update-${kebabModelName}.dto.${ext}`, // same as createOne\n updateMany: ``,\n query: `query-${kebabModelName}.dto.${ext}`,\n // looking for some better naming convetion\n findOne: ``,\n findMany: ``,\n },\n schemas: isAuthModule\n ? {\n login: `login.schema.${ext}`,\n signup: `signup.schema.${ext}`,\n getMe: `get-me.schema.${ext}`,\n updateMe: `update-me.schema.${ext}`,\n updatePassword: `update-password.schema.${ext}`,\n }\n : {\n model: `${kebabModelName}.schema.${ext}`,\n create: `create-${kebabModelName}.schema.${ext}`,\n createOne: `create-${kebabModelName}.schema.${ext}`,\n createMany: ``, // just for sake of completion and reusability around other parts of code\n update: `update-${kebabModelName}.schema.${ext}`,\n updateOne: `update-${kebabModelName}.schema.${ext}`, // same as createOne\n updateMany: ``,\n query: `query-${kebabModelName}.schema.${ext}`,\n // looking for some better naming convetion\n findOne: ``,\n findMany: ``,\n },\n };\n}\n\nexport function isClass(value: any): boolean {\n return (\n typeof value === \"function\" &&\n /^class\\s/.test(Function.prototype.toString.call(value))\n );\n}\n\nexport function isZodSchema(value: any): value is ZodTypeAny {\n return value instanceof z.ZodType;\n}\n\nexport async function processSubdir(\n modelName: string,\n type: \"dtos\" | \"schemas\"\n) {\n const moduleDir = path.resolve(crd(), \"src\", \"modules\", kebabCase(modelName));\n\n const subdir = path.join(moduleDir, type);\n const fileStructure = getFileModuleComponentsFileStructure(modelName);\n const result: Record<string, any> = {};\n\n if (!(await pathExists(subdir))) return result;\n\n try {\n await Promise.all(\n Object.entries(fileStructure[type]).map(async ([key, fileName]) => {\n const filePath = path.join(subdir, fileName);\n if (!fileName || !(await pathExists(filePath))) return;\n\n try {\n const module = await importModule(filePath).catch(\n async (err: any) => {\n if (await pathExists(filePath)) {\n sheu.error(`Failed to import ${fileName}: `);\n console.error(err);\n killServerChildProcess();\n process.exit(1);\n }\n }\n );\n\n const cleanFilePath = `src/modules/${kebabCase(modelName)}/${fileName}`;\n if (type === \"dtos\" && !isClass(module?.default))\n throw Error(\n `ValidationError: Please export as default a valid class under ${cleanFilePath}, in order to use as Dto.`\n );\n else if (type === \"schemas\" && !isZodSchema(module?.default))\n throw Error(\n `ValidationError: Please export as default a valid zod schema under ${cleanFilePath}, in order to use as Schema`\n );\n\n if (module && module?.default) result[key] = module.default;\n } catch (err: any) {\n if (err?.message?.includes(\"ValidationError\")) throw err;\n console.error(err);\n }\n })\n );\n } catch (err: any) {\n if (err?.message?.includes(\"ValidationError\")) throw err;\n console.error(err);\n }\n\n return result;\n}\n\ntype importModuleComponentsReturnType = {\n hooks?: any;\n interceptors?: any;\n authConfigs?: AuthConfigs;\n authConfigsNew?: AuthConfigs;\n prismaQueryOptions?: any;\n prismaQueryOptionsNew?: any;\n router?: any;\n dtos?: Record<string, any>;\n schemas?: Record<string, any>;\n};\n\n/**\n * Validates naming convention conflicts for prismaQueryOptions and authConfigs\n * @param {string} key - The current file key being processed\n * @param {string} fileName - The filename being imported\n * @param {importModuleComponentsReturnType} result - The current result object\n * @throws {Error} When conflicting naming conventions are detected\n */\nexport function validateNamingConventions(\n key: string,\n fileName: string,\n result: importModuleComponentsReturnType\n): void {\n if (key === \"prismaQueryOptions\") {\n sheu.warn(\n `Found ${fileName} which will be deprecated from 1.4.0-beta, consider switching to ${fileName.replace(\"prisma-query-options\", \"query\")}.`\n );\n if (result.prismaQueryOptions) {\n killServerChildProcess();\n throw new Error(\n `\\n Cannot use both ${fileName} and ${fileName.replace(\n \"prisma-query-options\",\n \"query\"\n )} at once, please choose only one name convention. \\n`\n );\n }\n } else if (key === \"prismaQueryOptionsNew\") {\n if (result.prismaQueryOptions) {\n killServerChildProcess();\n throw new Error(\n `\\n Cannot use both ${fileName} and ${fileName.replace(\n \"query\",\n \"prisma-query-options\"\n )} at once, please choose only one name convention. \\n`\n );\n }\n } else if (key === \"authConfigs\") {\n sheu.warn(\n `Found ${fileName} which will be deprecated from 1.4.0-beta, consider switching to ${fileName.replace(\"auth-configs\", \"auth\")}.`\n );\n if (result.authConfigs) {\n killServerChildProcess();\n throw new Error(\n `\\n Cannot use both ${fileName} and ${fileName.replace(\n \"auth-configs\",\n \"auth\"\n )} at once, please choose only one name convention. \\n`\n );\n }\n } else if (key === \"authConfigsNew\") {\n if (result.authConfigs) {\n killServerChildProcess();\n throw new Error(\n `\\n Cannot use both ${fileName} and ${fileName.replace(\n \"auth\",\n \"auth-configs\"\n )} at once, please choose only one name convention. \\n`\n );\n }\n }\n}\n\n/**\n * Processes and assigns module to the result object based on the key\n * @param {string} key - The file key being processed\n * @param {any} module - The imported module\n * @param {importModuleComponentsReturnType} result - The result object to modify\n */\nexport function assignModuleToResult(\n appModule: string,\n key: string,\n module: any,\n result: importModuleComponentsReturnType,\n arkosConfig: ArkosConfig\n): void {\n if (key === \"prismaQueryOptions\" || key === \"prismaQueryOptionsNew\") {\n result.prismaQueryOptions = module.default || module;\n } else if (key === \"authConfigs\" || key === \"authConfigsNew\") {\n result.authConfigs = module.default || module;\n } else if (key === \"interceptors\") {\n result[key] = module;\n } else if (key === \"router\") {\n result[key] = {\n ...module,\n config: applyStrictRoutingRules(\n appModule,\n arkosConfig,\n module?.config || {}\n ),\n };\n } else {\n result[key as keyof typeof result] = module.default || module;\n }\n}\n\n/**\n * Dynamically imports model-specific modules for a given model with optimized file handling.\n * Includes special handling for the Auth module.\n *\n * @param {string} modelName - The name of the model (e.g., \"User\", \"Post\", \"Auth\").\n * @returns {Promise<Object>} An object containing the imported modules\n */\nexport async function importModuleComponents(\n modelName: string,\n arkosConfig: ArkosConfig,\n moduleDirExists?: boolean\n): Promise<importModuleComponentsReturnType> {\n const result: importModuleComponentsReturnType = {\n dtos: {},\n schemas: {},\n };\n const usingStrictRouting = arkosConfig.routers?.strict;\n\n if (!moduleDirExists && !usingStrictRouting) return result;\n\n if (getModuleComponents(modelName)) return getModuleComponents(modelName);\n\n const moduleDir = path.resolve(crd(), \"src\", \"modules\", kebabCase(modelName));\n const fileStructure = getFileModuleComponentsFileStructure(modelName);\n\n const validationSubdir = arkosConfig.validation?.resolver\n ? arkosConfig.validation.resolver === \"zod\"\n ? \"schemas\"\n : \"dtos\"\n : null;\n\n // Batch process core files\n const [_, validators] = await Promise.all([\n Object.entries(fileStructure.core).map(async ([key, fileName]) => {\n if (\n [\"createMany\", \"findMany\", \"findOne\", \"updateMany\"].includes(key) ||\n !fileName\n )\n return;\n\n const filePath = path.join(moduleDir, fileName);\n\n if (\n key === \"router\" &&\n !usingStrictRouting &&\n !(await pathExists(filePath))\n )\n return;\n else if (\n key !== \"router\" &&\n usingStrictRouting &&\n !(await pathExists(filePath))\n )\n return;\n\n try {\n let module = await importModule(filePath).catch(async (err) => {\n try {\n if (await pathExists(filePath)) {\n sheu.error(`Failed to import ${fileName}`);\n console.error(err);\n killServerChildProcess();\n process.exit(1);\n }\n } catch (err) {}\n });\n\n if (!module && key === \"router\" && usingStrictRouting) module = {};\n\n if (module) {\n // Validate naming conventions before assignment\n validateNamingConventions(key, fileName, result);\n\n // Assign module to result\n assignModuleToResult(modelName, key, module, result, arkosConfig);\n }\n } catch (err: any) {\n if (err.message?.includes(\"Cannot use both\")) throw err;\n console.error(err);\n killServerChildProcess();\n }\n }),\n validationSubdir && processSubdir(modelName, validationSubdir),\n ]);\n\n prismaModelsModules[pascalCase(modelName)] = {\n ...result,\n ...(validationSubdir && { [validationSubdir]: validators }),\n };\n\n return {\n ...result,\n ...(validationSubdir && { [validationSubdir]: validators }),\n };\n}\n\nexport const appModules = Array.from(\n new Set([\n ...prismaSchemaParser.getModelsAsArrayOfStrings(),\n \"auth\",\n \"file-upload\",\n ])\n);\n\n/**\n * Allows to asynchronously load all app modules components at once to speed up app start time.\n */\nexport async function loadAllModuleComponents(arkosConfig: ArkosConfig) {\n const moduleDirExists: string[] = [];\n await Promise.all(\n appModules.map(async (appModule) => {\n const moduleDir = path.resolve(\n crd(),\n \"src\",\n \"modules\",\n kebabCase(appModule)\n );\n if (await pathExists(moduleDir)) moduleDirExists.push(appModule);\n })\n );\n\n const modulesComponentsImportPromises = appModules.map(\n async (appModule) =>\n await importModuleComponents(\n appModule,\n arkosConfig,\n moduleDirExists.includes(appModule)\n )\n );\n\n await Promise.all(modulesComponentsImportPromises);\n}\n"]}
@@ -1,160 +1 @@
1
- import deepmerge from "../helpers/deepmerge.helper.js";
2
- import { parseQueryParamsWithModifiers } from "../helpers/api.features.helpers.js";
3
- import AppError from "../../modules/error-handler/utils/app-error.js";
4
- import { getPrismaInstance } from "../helpers/prisma.helpers.js";
5
- export default class APIFeatures {
6
- constructor(req, modelName) {
7
- this.filters = {};
8
- this.reqFiltersSearchParam = {};
9
- this.excludedFields = [
10
- "page",
11
- "filters",
12
- "sort",
13
- "limit",
14
- "fields",
15
- "addFields",
16
- "removeFields",
17
- "search",
18
- "include",
19
- "filterMode",
20
- "where",
21
- "prismaQueryOptions",
22
- "ignoredFields",
23
- ];
24
- if (req) {
25
- const { filters = "{}", ...restOfQuery } = req.query;
26
- this.req = req;
27
- this.searchParams = deepmerge(parseQueryParamsWithModifiers(restOfQuery), JSON.parse(filters));
28
- }
29
- if (modelName)
30
- this.modelName = modelName;
31
- this.filters = { ...this.filters };
32
- }
33
- setup(req, modelName) {
34
- if (req) {
35
- const { filters = "{}", ...restOfQuery } = req.query;
36
- this.req = req;
37
- this.searchParams = deepmerge(parseQueryParamsWithModifiers(restOfQuery), JSON.parse(filters));
38
- }
39
- if (modelName)
40
- this.modelName = modelName;
41
- this.filters = { ...this.filters };
42
- return this;
43
- }
44
- filter() {
45
- if (!this.req)
46
- throw new Error("Trying to use APIFeatures.filter() without passing request on class constructor or APIFeatures.setup() method. read more about at www.arkosjs.com/docs/advanced-guide/api-features-class");
47
- const searchableFields = [];
48
- const queryObj = { ...this.searchParams };
49
- this.excludedFields.forEach((el) => delete queryObj[el]);
50
- const whereObj = { ...this.req.params, ...queryObj };
51
- const whereLogicalOperatorFilters = Object.keys(whereObj).map((key) => ({
52
- [key]: whereObj[key],
53
- }));
54
- let whereOptions = whereLogicalOperatorFilters.length > 0
55
- ? {
56
- [this.req.query?.filterMode ?? "OR"]: whereLogicalOperatorFilters,
57
- }
58
- : {};
59
- if (!!this.searchParams.search) {
60
- const prisma = getPrismaInstance();
61
- if (this.modelName)
62
- Object.keys(prisma[this.modelName].fields).forEach((key) => {
63
- const field = prisma[this.modelName].fields[key];
64
- if (field.typeName === "String" &&
65
- key !== "id" &&
66
- key !== "password" &&
67
- !field.isList &&
68
- !key?.includes?.("Id") &&
69
- !key?.includes?.("ID")) {
70
- searchableFields.push({
71
- [`${key}`]: {
72
- contains: this.searchParams.search,
73
- mode: "insensitive",
74
- },
75
- });
76
- }
77
- });
78
- whereOptions = deepmerge({
79
- OR: searchableFields,
80
- }, whereOptions);
81
- }
82
- const firstMerge = deepmerge({
83
- where: whereOptions,
84
- }, this.req.prismaQueryOptions || {});
85
- this.filters = deepmerge(firstMerge, this.filters);
86
- return this;
87
- }
88
- search() {
89
- if (this.searchParams?.search) {
90
- this.filters = deepmerge(this.filters, {
91
- where: {
92
- OR: [],
93
- },
94
- });
95
- }
96
- }
97
- sort() {
98
- if (this.searchParams.sort) {
99
- const sortBy = this.searchParams?.sort
100
- ?.split(",")
101
- ?.map((field) => ({
102
- [field.startsWith("-") ? field.substring(1) : field]: field.startsWith("-") ? "desc" : "asc",
103
- }));
104
- this.filters = deepmerge(this.filters, { orderBy: sortBy });
105
- }
106
- return this;
107
- }
108
- limitFields() {
109
- if (this.searchParams?.fields) {
110
- const fields = this.searchParams.fields.split(",");
111
- const regularFields = fields.filter((field) => !field.startsWith("+") && !field.startsWith("-"));
112
- const includeFields = fields
113
- .filter((field) => field.startsWith("+"))
114
- .map((field) => field.substring(1));
115
- const excludeFields = fields
116
- .filter((field) => field.startsWith("-"))
117
- .map((field) => field.substring(1));
118
- let selection = {};
119
- if (regularFields.length > 0) {
120
- selection = regularFields.reduce((acc, field) => {
121
- acc[field] = true;
122
- return acc;
123
- }, {});
124
- }
125
- else {
126
- selection = this.filters.include || {};
127
- includeFields.forEach((field) => {
128
- selection[field] = true;
129
- });
130
- excludeFields.forEach((field) => {
131
- selection[field] = false;
132
- });
133
- }
134
- this.filters = {
135
- ...this.filters,
136
- select: selection,
137
- };
138
- if (this.filters.include) {
139
- delete this.filters.include;
140
- }
141
- }
142
- if (this.searchParams?.addFields || this.searchParams?.removeFields) {
143
- throw new AppError("The addFields and removeFields parameters are deprecated. Please use fields with + and - prefixes instead.", 400);
144
- }
145
- return this;
146
- }
147
- paginate() {
148
- const page = parseInt(this.searchParams.page, 10) || 1;
149
- const limit = parseInt(this.searchParams.limit, 10) || 30;
150
- const skip = (page - 1) * limit;
151
- this.filters = {
152
- ...this.filters,
153
- skip,
154
- take: limit,
155
- };
156
- return this;
157
- }
158
- }
159
- export const apiFeatures = new APIFeatures();
160
- //# sourceMappingURL=api.features.js.map
1
+ "use strict";import l from"../helpers/deepmerge.helper.js";import{parseQueryParamsWithModifiers as c}from"../helpers/api.features.helpers.js";import f from"../../modules/error-handler/utils/app-error.js";import{getPrismaInstance as m}from"../helpers/prisma.helpers.js";export default class d{constructor(s,e){if(this.filters={},this.reqFiltersSearchParam={},this.excludedFields=["page","filters","sort","limit","fields","addFields","removeFields","search","include","filterMode","where","prismaQueryOptions","ignoredFields"],s){const{filters:r="{}",...h}=s.query;this.req=s,this.searchParams=l(c(h),c(JSON.parse(r))),s.finalPrismaQueryOptions=this.searchParams}e&&(this.modelName=e),this.filters={...this.filters}}setup(s,e){if(s){const{filters:r="{}",...h}=s.query;this.req=s,this.searchParams=l(c(h),c(JSON.parse(r))),s.finalPrismaQueryOptions=this.searchParams}return e&&(this.modelName=e),this.filters={...this.filters},this}filter(){if(!this.req)throw new Error("Trying to use APIFeatures.filter() without passing request on class constructor or APIFeatures.setup() method. read more about at www.arkosjs.com/docs/advanced-guide/api-features-class");const s=[],e={...this.searchParams};this.excludedFields.forEach(a=>delete e[a]);const r={...this.req.params,...e},h=Object.keys(r).map(a=>({[a]:r[a]}));let i=h.length>0?{[this.req.query?.filterMode??"OR"]:h}:{};if(this.searchParams.search){const a=m();this.modelName&&Object.keys(a[this.modelName].fields).forEach(o=>{const n=a[this.modelName].fields[o];n?.typeName==="String"&&o!=="id"&&o!=="password"&&!n.isList&&!o?.includes?.("Id")&&!o?.includes?.("ID")&&s.push({[`${o}`]:{contains:this.searchParams.search,mode:"insensitive"}})}),i=l({OR:s},i)}const t=l({where:i},this.req.prismaQueryOptions||{});return this.filters=l(t,this.filters),this}search(){this.searchParams?.search&&(this.filters=l(this.filters,{where:{OR:[]}}))}sort(){if(this.searchParams.sort){const s=this.searchParams?.sort?.split(",")?.map(e=>({[e.startsWith("-")?e.substring(1):e]:e.startsWith("-")?"desc":"asc"}));this.filters=l(this.filters,{orderBy:s})}return this}limitFields(){if(this.searchParams?.fields){const s=this.searchParams.fields.split(","),e=s.filter(t=>!t.startsWith("+")&&!t.startsWith("-")),r=s.filter(t=>t.startsWith("+")).map(t=>t.substring(1)),h=s.filter(t=>t.startsWith("-")).map(t=>t.substring(1));let i={};e.length>0?i=e.reduce((t,a)=>(t[a]=!0,t),{}):(i=this.filters.include||{},r.forEach(t=>{i[t]=!0}),h.forEach(t=>{i[t]=!1})),this.filters={...this.filters,select:i},this.filters.include&&delete this.filters.include}if(this.searchParams?.addFields||this.searchParams?.removeFields)throw new f("The addFields and removeFields parameters are deprecated. Please use fields with + and - prefixes instead.",400);return this}paginate(){const s=parseInt(this.searchParams.page,10)||1,e=parseInt(this.searchParams.limit,10)||30,r=(s-1)*e;return this.filters={...this.filters,skip:r,take:e},this}}export const apiFeatures=new d;
@@ -1 +1 @@
1
- {"version":3,"file":"api.features.js","sourceRoot":"","sources":["../../../../src/utils/features/api.features.ts"],"names":[],"mappings":"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","sourcesContent":["import { Request } from \"express\";\nimport deepmerge from \"../helpers/deepmerge.helper\";\nimport { parseQueryParamsWithModifiers } from \"../helpers/api.features.helpers\";\nimport AppError from \"../../modules/error-handler/utils/app-error\";\nimport { getPrismaInstance } from \"../helpers/prisma.helpers\";\nimport { ArkosRequest } from \"../../types\";\n\ntype ModelName = string;\n\nexport default class APIFeatures {\n req?: ArkosRequest;\n searchParams: any; // The query string parameters from the request\n searchParamsWithModifiers: any; // The query string parameters from the request\n filters: any = {};\n reqFiltersSearchParam: any = {};\n modelName?: ModelName;\n excludedFields = [\n \"page\",\n \"filters\",\n \"sort\",\n \"limit\",\n \"fields\",\n \"addFields\",\n \"removeFields\",\n \"search\",\n \"include\",\n \"filterMode\",\n \"where\",\n \"prismaQueryOptions\",\n \"ignoredFields\",\n ];\n\n constructor(req?: Request, modelName?: ModelName) {\n if (req) {\n const { filters = \"{}\", ...restOfQuery } = req.query;\n this.req = req;\n this.searchParams = deepmerge(\n parseQueryParamsWithModifiers(restOfQuery),\n JSON.parse(filters as string)\n );\n }\n if (modelName) this.modelName = modelName;\n this.filters = { ...this.filters };\n }\n\n setup(req: Request, modelName?: ModelName) {\n if (req) {\n const { filters = \"{}\", ...restOfQuery } = req.query;\n this.req = req;\n this.searchParams = deepmerge(\n parseQueryParamsWithModifiers(restOfQuery),\n JSON.parse(filters as string)\n );\n }\n if (modelName) this.modelName = modelName;\n this.filters = { ...this.filters };\n\n return this;\n }\n\n filter() {\n if (!this.req)\n throw new Error(\n \"Trying to use APIFeatures.filter() without passing request on class constructor or APIFeatures.setup() method. read more about at www.arkosjs.com/docs/advanced-guide/api-features-class\"\n );\n const searchableFields: Record<string, any>[] = [];\n\n const queryObj = { ...this.searchParams };\n\n this.excludedFields.forEach((el) => delete queryObj[el]);\n\n const whereObj = { ...this.req.params, ...queryObj };\n const whereLogicalOperatorFilters = Object.keys(whereObj).map((key) => ({\n [key]: whereObj[key],\n }));\n\n let whereOptions =\n whereLogicalOperatorFilters.length > 0\n ? {\n [(this.req.query?.filterMode as string) ?? \"OR\"]:\n whereLogicalOperatorFilters,\n }\n : {};\n\n if (!!this.searchParams.search) {\n const prisma = getPrismaInstance();\n\n if (this.modelName)\n Object.keys((prisma as any)[this.modelName].fields).forEach((key) => {\n const field = ((prisma as any)[this.modelName!].fields as any)[key];\n if (\n field.typeName === \"String\" &&\n key !== \"id\" &&\n key !== \"password\" &&\n !field.isList &&\n !key?.includes?.(\"Id\") &&\n !key?.includes?.(\"ID\")\n ) {\n searchableFields.push({\n [`${key}`]: {\n contains: this.searchParams.search,\n mode: \"insensitive\",\n },\n });\n }\n });\n\n whereOptions = deepmerge(\n {\n OR: searchableFields,\n },\n whereOptions\n );\n }\n\n const firstMerge = deepmerge(\n {\n where: whereOptions,\n },\n this.req.prismaQueryOptions || {}\n );\n\n this.filters = deepmerge(firstMerge, this.filters);\n return this;\n }\n\n search() {\n if (this.searchParams?.search) {\n this.filters = deepmerge(this.filters, {\n where: {\n OR: [],\n },\n });\n }\n }\n\n sort() {\n if (this.searchParams.sort) {\n const sortBy = this.searchParams?.sort\n ?.split(\",\")\n ?.map((field: string) => ({\n [field.startsWith(\"-\") ? field.substring(1) : field]:\n field.startsWith(\"-\") ? \"desc\" : \"asc\",\n }));\n this.filters = deepmerge(this.filters, { orderBy: sortBy });\n }\n\n return this;\n }\n\n limitFields() {\n if (this.searchParams?.fields) {\n const fields = this.searchParams.fields.split(\",\");\n\n // Separate fields into includes, excludes, and regular fields\n const regularFields = fields.filter(\n (field: string) => !field.startsWith(\"+\") && !field.startsWith(\"-\")\n );\n const includeFields = fields\n .filter((field: string) => field.startsWith(\"+\"))\n .map((field: string) => field.substring(1));\n const excludeFields = fields\n .filter((field: string) => field.startsWith(\"-\"))\n .map((field: string) => field.substring(1));\n\n // Create selection object based on field type\n let selection: Record<string, any> = {};\n\n // If regular fields exist, use them as the base selection\n if (regularFields.length > 0) {\n selection = regularFields.reduce(\n (acc: Record<string, any>, field: string) => {\n acc[field] = true;\n return acc;\n },\n {} as Record<string, any>\n );\n }\n // Otherwise, use include fields as additions to any existing included fields\n else {\n // Start with current include fields if they exist\n selection = this.filters.include || {};\n\n // Add any explicitly included fields\n includeFields.forEach((field: string) => {\n selection[field] = true;\n });\n\n // Add any explicitly excluded fields\n excludeFields.forEach((field: string) => {\n selection[field] = false;\n });\n }\n\n // Apply the selection to filters\n this.filters = {\n ...this.filters,\n select: selection,\n };\n\n // Remove the include filter as it's now part of select\n if (this.filters.include) {\n delete this.filters.include;\n }\n }\n\n // Remove any references to the now-unused parameters\n if (this.searchParams?.addFields || this.searchParams?.removeFields) {\n throw new AppError(\n \"The addFields and removeFields parameters are deprecated. Please use fields with + and - prefixes instead.\",\n 400\n );\n }\n\n return this;\n }\n\n paginate() {\n const page = parseInt(this.searchParams.page, 10) || 1;\n const limit = parseInt(this.searchParams.limit, 10) || 30;\n const skip = (page - 1) * limit;\n\n this.filters = {\n ...this.filters,\n skip,\n take: limit,\n };\n return this;\n }\n}\n\nexport const apiFeatures = new APIFeatures();\n"]}
1
+ {"version":3,"file":"api.features.js","sourceRoot":"","sources":["../../../../src/utils/features/api.features.ts"],"names":[],"mappings":"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","sourcesContent":["import { Request } from \"express\";\nimport deepmerge from \"../helpers/deepmerge.helper\";\nimport { parseQueryParamsWithModifiers } from \"../helpers/api.features.helpers\";\nimport AppError from \"../../modules/error-handler/utils/app-error\";\nimport { getPrismaInstance } from \"../helpers/prisma.helpers\";\nimport { ArkosRequest } from \"../../types\";\n\ntype ModelName = string;\n\nexport default class APIFeatures {\n req?: ArkosRequest;\n searchParams: any; // The query string parameters from the request\n searchParamsWithModifiers: any; // The query string parameters from the request\n filters: any = {};\n reqFiltersSearchParam: any = {};\n modelName?: ModelName;\n excludedFields = [\n \"page\",\n \"filters\",\n \"sort\",\n \"limit\",\n \"fields\",\n \"addFields\",\n \"removeFields\",\n \"search\",\n \"include\",\n \"filterMode\",\n \"where\",\n \"prismaQueryOptions\",\n \"ignoredFields\",\n ];\n\n constructor(req?: Request, modelName?: ModelName) {\n if (req) {\n const { filters = \"{}\", ...restOfQuery } = req.query;\n this.req = req;\n this.searchParams = deepmerge(\n parseQueryParamsWithModifiers(restOfQuery),\n parseQueryParamsWithModifiers(JSON.parse(filters as string))\n );\n (req as any).finalPrismaQueryOptions = this.searchParams;\n }\n\n if (modelName) this.modelName = modelName;\n this.filters = { ...this.filters };\n }\n\n setup(req: Request, modelName?: ModelName) {\n if (req) {\n const { filters = \"{}\", ...restOfQuery } = req.query;\n this.req = req;\n this.searchParams = deepmerge(\n parseQueryParamsWithModifiers(restOfQuery),\n parseQueryParamsWithModifiers(JSON.parse(filters as string))\n );\n (req as any).finalPrismaQueryOptions = this.searchParams;\n }\n if (modelName) this.modelName = modelName;\n this.filters = { ...this.filters };\n\n return this;\n }\n\n filter() {\n if (!this.req)\n throw new Error(\n \"Trying to use APIFeatures.filter() without passing request on class constructor or APIFeatures.setup() method. read more about at www.arkosjs.com/docs/advanced-guide/api-features-class\"\n );\n const searchableFields: Record<string, any>[] = [];\n\n const queryObj = { ...this.searchParams };\n\n this.excludedFields.forEach((el) => delete queryObj[el]);\n\n const whereObj = { ...this.req.params, ...queryObj };\n const whereLogicalOperatorFilters = Object.keys(whereObj).map((key) => ({\n [key]: whereObj[key],\n }));\n\n let whereOptions =\n whereLogicalOperatorFilters.length > 0\n ? {\n [(this.req.query?.filterMode as string) ?? \"OR\"]:\n whereLogicalOperatorFilters,\n }\n : {};\n\n if (!!this.searchParams.search) {\n const prisma = getPrismaInstance();\n\n if (this.modelName)\n Object.keys((prisma as any)[this.modelName].fields).forEach((key) => {\n const field = ((prisma as any)[this.modelName!].fields as any)[key];\n if (\n field?.typeName === \"String\" &&\n key !== \"id\" &&\n key !== \"password\" &&\n !field.isList &&\n !key?.includes?.(\"Id\") &&\n !key?.includes?.(\"ID\")\n ) {\n searchableFields.push({\n [`${key}`]: {\n contains: this.searchParams.search,\n mode: \"insensitive\",\n },\n });\n }\n });\n\n whereOptions = deepmerge(\n {\n OR: searchableFields,\n },\n whereOptions\n );\n }\n\n const firstMerge = deepmerge(\n {\n where: whereOptions,\n },\n this.req.prismaQueryOptions || {}\n );\n\n this.filters = deepmerge(firstMerge, this.filters);\n return this;\n }\n\n search() {\n if (this.searchParams?.search) {\n this.filters = deepmerge(this.filters, {\n where: {\n OR: [],\n },\n });\n }\n }\n\n sort() {\n if (this.searchParams.sort) {\n const sortBy = this.searchParams?.sort\n ?.split(\",\")\n ?.map((field: string) => ({\n [field.startsWith(\"-\") ? field.substring(1) : field]:\n field.startsWith(\"-\") ? \"desc\" : \"asc\",\n }));\n this.filters = deepmerge(this.filters, { orderBy: sortBy });\n }\n\n return this;\n }\n\n limitFields() {\n if (this.searchParams?.fields) {\n const fields = this.searchParams.fields.split(\",\");\n\n // Separate fields into includes, excludes, and regular fields\n const regularFields = fields.filter(\n (field: string) => !field.startsWith(\"+\") && !field.startsWith(\"-\")\n );\n const includeFields = fields\n .filter((field: string) => field.startsWith(\"+\"))\n .map((field: string) => field.substring(1));\n const excludeFields = fields\n .filter((field: string) => field.startsWith(\"-\"))\n .map((field: string) => field.substring(1));\n\n // Create selection object based on field type\n let selection: Record<string, any> = {};\n\n // If regular fields exist, use them as the base selection\n if (regularFields.length > 0) {\n selection = regularFields.reduce(\n (acc: Record<string, any>, field: string) => {\n acc[field] = true;\n return acc;\n },\n {} as Record<string, any>\n );\n }\n // Otherwise, use include fields as additions to any existing included fields\n else {\n // Start with current include fields if they exist\n selection = this.filters.include || {};\n\n // Add any explicitly included fields\n includeFields.forEach((field: string) => {\n selection[field] = true;\n });\n\n // Add any explicitly excluded fields\n excludeFields.forEach((field: string) => {\n selection[field] = false;\n });\n }\n\n // Apply the selection to filters\n this.filters = {\n ...this.filters,\n select: selection,\n };\n\n // Remove the include filter as it's now part of select\n if (this.filters.include) {\n delete this.filters.include;\n }\n }\n\n // Remove any references to the now-unused parameters\n if (this.searchParams?.addFields || this.searchParams?.removeFields) {\n throw new AppError(\n \"The addFields and removeFields parameters are deprecated. Please use fields with + and - prefixes instead.\",\n 400\n );\n }\n\n return this;\n }\n\n paginate() {\n const page = parseInt(this.searchParams.page, 10) || 1;\n const limit = parseInt(this.searchParams.limit, 10) || 30;\n const skip = (page - 1) * limit;\n\n this.filters = {\n ...this.filters,\n skip,\n take: limit,\n };\n return this;\n }\n}\n\nexport const apiFeatures = new APIFeatures();\n"]}