arkos 1.2.15-test.1 → 1.2.15-test.2

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 (428) hide show
  1. package/README.md +22 -14
  2. package/cli.js +2 -11
  3. package/dist/cjs/app.js +1 -1
  4. package/dist/cjs/app.js.map +1 -1
  5. package/dist/cjs/exports/auth/index.js +1 -6
  6. package/dist/cjs/exports/controllers/index.js +1 -11
  7. package/dist/cjs/exports/error-handler/index.js +1 -11
  8. package/dist/cjs/exports/index.js +1 -12
  9. package/dist/cjs/exports/middlewares/index.js +1 -7
  10. package/dist/cjs/exports/prisma/index.js +1 -6
  11. package/dist/cjs/exports/services/index.js +1 -49
  12. package/dist/cjs/exports/utils/index.js +1 -44
  13. package/dist/cjs/exports/validation/index.js +1 -11
  14. package/dist/cjs/modules/auth/auth.controller.js +1 -194
  15. package/dist/cjs/modules/auth/auth.router.js +1 -124
  16. package/dist/cjs/modules/auth/auth.router.js.map +1 -1
  17. package/dist/cjs/modules/auth/auth.service.js +1 -192
  18. package/dist/cjs/modules/auth/auth.service.js.map +1 -1
  19. package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +1 -83
  20. package/dist/cjs/modules/base/base.controller.js +1 -159
  21. package/dist/cjs/modules/base/base.controller.js.map +1 -1
  22. package/dist/cjs/modules/base/base.middlewares.js +1 -92
  23. package/dist/cjs/modules/base/base.middlewares.js.map +1 -1
  24. package/dist/cjs/modules/base/base.router.js +1 -24
  25. package/dist/cjs/modules/base/base.router.js.map +1 -1
  26. package/dist/cjs/modules/base/base.service.js +1 -128
  27. package/dist/cjs/modules/base/base.service.js.map +1 -1
  28. package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js +1 -82
  29. package/dist/cjs/modules/base/utils/helpers/base.middlewares.helpers.js +1 -50
  30. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +1 -167
  31. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
  32. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +1 -171
  33. package/dist/cjs/modules/email/email.service.js +1 -104
  34. package/dist/cjs/modules/error-handler/error-handler.controller.js +4 -144
  35. package/dist/cjs/modules/error-handler/error-handler.controller.js.map +1 -1
  36. package/dist/cjs/modules/error-handler/utils/app-error.js +1 -17
  37. package/dist/cjs/modules/error-handler/utils/catch-async.js +1 -12
  38. package/dist/cjs/modules/error-handler/utils/catch-async.js.map +1 -1
  39. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +3 -195
  40. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
  41. package/dist/cjs/modules/file-upload/file-upload.controller.js +1 -271
  42. package/dist/cjs/modules/file-upload/file-upload.router.js +1 -56
  43. package/dist/cjs/modules/file-upload/file-upload.router.js.map +1 -1
  44. package/dist/cjs/modules/file-upload/file-upload.service.js +1 -322
  45. package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js +1 -90
  46. package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js.map +1 -1
  47. package/dist/cjs/modules/swagger/swagger.router.js +1 -141
  48. package/dist/cjs/modules/swagger/swagger.router.js.map +1 -1
  49. package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +1 -0
  50. package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +1 -0
  51. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js +1 -0
  52. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js.map +1 -0
  53. package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js +1 -0
  54. package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +1 -0
  55. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -0
  56. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -0
  57. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -0
  58. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +1 -0
  59. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +1 -0
  60. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js.map +1 -0
  61. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +1 -0
  62. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js.map +1 -0
  63. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +1 -0
  64. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js.map +1 -0
  65. package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +1 -0
  66. package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -0
  67. package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js +1 -0
  68. package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -0
  69. package/dist/cjs/package.json +3 -0
  70. package/dist/cjs/paths.js +1 -1
  71. package/dist/cjs/server.js +4 -2
  72. package/dist/cjs/server.js.map +1 -1
  73. package/dist/cjs/types/arkos-config.js +1 -3
  74. package/dist/cjs/types/arkos-config.js.map +1 -1
  75. package/dist/cjs/types/auth.js +1 -3
  76. package/dist/cjs/types/index.js +1 -11
  77. package/dist/cjs/types/router-config.js +1 -3
  78. package/dist/cjs/utils/arkos-env.js +1 -9
  79. package/dist/cjs/utils/cli/build.js +5 -229
  80. package/dist/cjs/utils/cli/build.js.map +1 -1
  81. package/dist/cjs/utils/cli/dev.js +5 -250
  82. package/dist/cjs/utils/cli/dev.js.map +1 -1
  83. package/dist/cjs/utils/cli/generate.js +12 -189
  84. package/dist/cjs/utils/cli/generate.js.map +1 -1
  85. package/dist/cjs/utils/cli/index.js +1 -81
  86. package/dist/cjs/utils/cli/start.js +1 -93
  87. package/dist/cjs/utils/cli/start.js.map +1 -1
  88. package/dist/cjs/utils/cli/utils/cli.helpers.js +1 -26
  89. package/dist/cjs/utils/cli/utils/cli.helpers.js.map +1 -1
  90. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +5 -20
  91. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js +6 -15
  92. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js +71 -133
  93. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +1 -1
  94. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +24 -46
  95. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +1 -1
  96. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js +12 -32
  97. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js.map +1 -1
  98. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js +7 -27
  99. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js.map +1 -1
  100. package/dist/cjs/utils/cli/utils/template-generators.js +2 -28
  101. package/dist/cjs/utils/cli/utils/watermark-stamper.js +3 -0
  102. package/dist/cjs/utils/cli/utils/watermark-stamper.js.map +1 -0
  103. package/dist/cjs/utils/dotenv.helpers.js +1 -43
  104. package/dist/cjs/utils/features/api.features.js +1 -161
  105. package/dist/cjs/utils/features/api.features.js.map +1 -1
  106. package/dist/cjs/utils/features/change-case.features.js +1 -67
  107. package/dist/cjs/utils/features/port-and-host-allocator.js +1 -0
  108. package/dist/cjs/utils/features/port-and-host-allocator.js.map +1 -0
  109. package/dist/cjs/utils/helpers/api.features.helpers.js +1 -106
  110. package/dist/cjs/utils/helpers/api.features.helpers.js.map +1 -1
  111. package/dist/cjs/utils/helpers/change-case.helpers.js +1 -177
  112. package/dist/cjs/utils/helpers/deepmerge.helper.js +1 -115
  113. package/dist/cjs/utils/helpers/fs.helpers.js +1 -54
  114. package/dist/cjs/utils/helpers/fs.helpers.js.map +1 -1
  115. package/dist/cjs/utils/helpers/global.helpers.js +1 -40
  116. package/dist/cjs/utils/helpers/global.helpers.js.map +1 -1
  117. package/dist/cjs/utils/helpers/models.helpers.js +11 -325
  118. package/dist/cjs/utils/helpers/models.helpers.js.map +1 -1
  119. package/dist/cjs/utils/helpers/prisma.helpers.js +1 -49
  120. package/dist/cjs/utils/helpers/prisma.helpers.js.map +1 -1
  121. package/dist/cjs/utils/helpers/query-parser.helpers.js +1 -45
  122. package/dist/cjs/utils/helpers/routers.helpers.js +1 -0
  123. package/dist/cjs/utils/helpers/routers.helpers.js.map +1 -0
  124. package/dist/cjs/utils/helpers/text.helpers.js +1 -28
  125. package/dist/cjs/utils/prisma/enhaced-prisma-json-schema-generator.js +1 -0
  126. package/dist/cjs/utils/prisma/enhaced-prisma-json-schema-generator.js.map +1 -0
  127. package/dist/cjs/utils/prisma/prisma-schema-parser.js +3 -0
  128. package/dist/cjs/utils/prisma/prisma-schema-parser.js.map +1 -0
  129. package/dist/cjs/utils/prisma/types.js +1 -0
  130. package/dist/cjs/utils/prisma/types.js.map +1 -0
  131. package/dist/cjs/utils/sheu.js +1 -0
  132. package/dist/cjs/utils/sheu.js.map +1 -0
  133. package/dist/cjs/utils/validate-dto.js +1 -17
  134. package/dist/cjs/utils/validate-schema.js +1 -15
  135. package/dist/esm/app.js +1 -0
  136. package/dist/esm/app.js.map +1 -0
  137. package/dist/esm/exports/auth/index.js +1 -0
  138. package/dist/esm/exports/controllers/index.js +1 -0
  139. package/dist/esm/exports/error-handler/index.js +1 -0
  140. package/dist/esm/exports/index.js +1 -0
  141. package/dist/esm/exports/middlewares/index.js +1 -0
  142. package/dist/esm/exports/prisma/index.js +1 -0
  143. package/dist/esm/exports/services/index.js +1 -0
  144. package/dist/esm/exports/utils/index.js +1 -0
  145. package/dist/esm/exports/validation/index.js +1 -0
  146. package/dist/esm/modules/auth/auth.controller.js +1 -0
  147. package/dist/esm/modules/auth/auth.router.js +1 -0
  148. package/dist/esm/modules/auth/auth.router.js.map +1 -0
  149. package/dist/esm/modules/auth/auth.service.js +1 -0
  150. package/dist/esm/modules/auth/auth.service.js.map +1 -0
  151. package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js +1 -0
  152. package/dist/esm/modules/base/base.controller.js +1 -0
  153. package/dist/esm/modules/base/base.controller.js.map +1 -0
  154. package/dist/esm/modules/base/base.middlewares.js +1 -0
  155. package/dist/esm/modules/base/base.middlewares.js.map +1 -0
  156. package/dist/esm/modules/base/base.router.js +1 -0
  157. package/dist/esm/modules/base/base.router.js.map +1 -0
  158. package/dist/esm/modules/base/base.service.js +1 -0
  159. package/dist/esm/modules/base/base.service.js.map +1 -0
  160. package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js +1 -0
  161. package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js +1 -0
  162. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js +1 -0
  163. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js.map +1 -0
  164. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +1 -0
  165. package/dist/esm/modules/email/email.service.js +1 -0
  166. package/dist/esm/modules/error-handler/error-handler.controller.js +4 -0
  167. package/dist/esm/modules/error-handler/error-handler.controller.js.map +1 -0
  168. package/dist/esm/modules/error-handler/utils/app-error.js +1 -0
  169. package/dist/esm/modules/error-handler/utils/catch-async.js +1 -0
  170. package/dist/esm/modules/error-handler/utils/catch-async.js.map +1 -0
  171. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js +3 -0
  172. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js.map +1 -0
  173. package/dist/esm/modules/file-upload/file-upload.controller.js +1 -0
  174. package/dist/esm/modules/file-upload/file-upload.router.js +1 -0
  175. package/dist/esm/modules/file-upload/file-upload.router.js.map +1 -0
  176. package/dist/esm/modules/file-upload/file-upload.service.js +1 -0
  177. package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js +1 -0
  178. package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js.map +1 -0
  179. package/dist/esm/modules/swagger/swagger.router.js +1 -0
  180. package/dist/esm/modules/swagger/swagger.router.js.map +1 -0
  181. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +1 -0
  182. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +1 -0
  183. package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.js +1 -0
  184. package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.js.map +1 -0
  185. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js +1 -0
  186. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +1 -0
  187. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -0
  188. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -0
  189. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -0
  190. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +1 -0
  191. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +1 -0
  192. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js.map +1 -0
  193. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +1 -0
  194. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js.map +1 -0
  195. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +1 -0
  196. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js.map +1 -0
  197. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js +1 -0
  198. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -0
  199. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js +1 -0
  200. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -0
  201. package/dist/esm/package.json +3 -0
  202. package/dist/esm/server.js +5 -0
  203. package/dist/esm/server.js.map +1 -0
  204. package/dist/esm/types/arkos-config.js +1 -0
  205. package/dist/esm/types/arkos-config.js.map +1 -0
  206. package/dist/esm/types/auth.js +1 -0
  207. package/dist/esm/types/index.js +1 -0
  208. package/dist/esm/types/router-config.js +1 -0
  209. package/dist/esm/utils/arkos-env.js +1 -0
  210. package/dist/esm/utils/cli/build.js +5 -0
  211. package/dist/esm/utils/cli/build.js.map +1 -0
  212. package/dist/esm/utils/cli/dev.js +5 -0
  213. package/dist/esm/utils/cli/dev.js.map +1 -0
  214. package/dist/esm/utils/cli/generate.js +12 -0
  215. package/dist/{es2020 → esm}/utils/cli/generate.js.map +1 -1
  216. package/dist/esm/utils/cli/index.js +1 -0
  217. package/dist/esm/utils/cli/start.js +1 -0
  218. package/dist/esm/utils/cli/start.js.map +1 -0
  219. package/dist/esm/utils/cli/utils/cli.helpers.js +1 -0
  220. package/dist/esm/utils/cli/utils/cli.helpers.js.map +1 -0
  221. package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +21 -0
  222. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js +12 -0
  223. package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js +206 -0
  224. package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +1 -0
  225. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +36 -0
  226. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +1 -0
  227. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js +18 -0
  228. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js.map +1 -0
  229. package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js +15 -0
  230. package/dist/{es2020 → esm}/utils/cli/utils/template-generator/templates/generate-service-template.js.map +1 -1
  231. package/dist/esm/utils/cli/utils/template-generators.js +2 -0
  232. package/dist/esm/utils/cli/utils/watermark-stamper.js +3 -0
  233. package/dist/esm/utils/cli/utils/watermark-stamper.js.map +1 -0
  234. package/dist/esm/utils/dotenv.helpers.js +1 -0
  235. package/dist/esm/utils/features/api.features.js +1 -0
  236. package/dist/esm/utils/features/api.features.js.map +1 -0
  237. package/dist/esm/utils/features/change-case.features.js +1 -0
  238. package/dist/esm/utils/features/port-and-host-allocator.js +1 -0
  239. package/dist/esm/utils/features/port-and-host-allocator.js.map +1 -0
  240. package/dist/esm/utils/helpers/api.features.helpers.js +1 -0
  241. package/dist/esm/utils/helpers/api.features.helpers.js.map +1 -0
  242. package/dist/esm/utils/helpers/change-case.helpers.js +1 -0
  243. package/dist/esm/utils/helpers/deepmerge.helper.js +1 -0
  244. package/dist/esm/utils/helpers/fs.helpers.js +1 -0
  245. package/dist/esm/utils/helpers/fs.helpers.js.map +1 -0
  246. package/dist/esm/utils/helpers/global.helpers.js +1 -0
  247. package/dist/esm/utils/helpers/global.helpers.js.map +1 -0
  248. package/dist/esm/utils/helpers/models.helpers.js +11 -0
  249. package/dist/esm/utils/helpers/models.helpers.js.map +1 -0
  250. package/dist/esm/utils/helpers/prisma.helpers.js +1 -0
  251. package/dist/esm/utils/helpers/prisma.helpers.js.map +1 -0
  252. package/dist/esm/utils/helpers/query-parser.helpers.js +1 -0
  253. package/dist/esm/utils/helpers/routers.helpers.js +1 -0
  254. package/dist/esm/utils/helpers/routers.helpers.js.map +1 -0
  255. package/dist/esm/utils/helpers/text.helpers.js +1 -0
  256. package/dist/esm/utils/prisma/enhaced-prisma-json-schema-generator.js +1 -0
  257. package/dist/esm/utils/prisma/enhaced-prisma-json-schema-generator.js.map +1 -0
  258. package/dist/esm/utils/prisma/prisma-schema-parser.js +3 -0
  259. package/dist/esm/utils/prisma/prisma-schema-parser.js.map +1 -0
  260. package/dist/esm/utils/prisma/types.js +1 -0
  261. package/dist/esm/utils/prisma/types.js.map +1 -0
  262. package/dist/esm/utils/sheu.js +1 -0
  263. package/dist/esm/utils/sheu.js.map +1 -0
  264. package/dist/esm/utils/validate-dto.js +1 -0
  265. package/dist/esm/utils/validate-schema.js +1 -0
  266. package/dist/types/modules/base/base.middlewares.d.ts +4 -4
  267. package/dist/types/modules/base/base.service.d.ts +1 -1
  268. package/dist/types/modules/base/utils/helpers/base.router.helpers.d.ts +4 -1
  269. package/dist/types/modules/error-handler/error-handler.controller.d.ts +1 -1
  270. package/dist/types/modules/error-handler/utils/catch-async.d.ts +1 -0
  271. package/dist/types/modules/error-handler/utils/error-handler.helpers.d.ts +4 -0
  272. package/dist/types/modules/file-upload/file-upload.router.d.ts +1 -1
  273. package/dist/types/modules/file-upload/utils/helpers/file-upload.helpers.d.ts +2 -1
  274. package/dist/types/modules/swagger/swagger.router.d.ts +1 -1
  275. package/dist/types/modules/swagger/utils/helpers/get-authentication-json-schema-paths.d.ts +4 -0
  276. package/dist/types/modules/swagger/utils/helpers/get-swagger-default-configs.d.ts +46 -0
  277. package/dist/types/modules/swagger/utils/helpers/get-system-json-schema-paths.d.ts +2 -0
  278. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.d.ts +1 -0
  279. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.d.ts +2 -0
  280. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.d.ts +1 -0
  281. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.d.ts +3 -0
  282. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.d.ts +3 -0
  283. package/dist/types/modules/swagger/utils/helpers/missing-json-schemas-generator.d.ts +34 -0
  284. package/dist/types/modules/swagger/utils/helpers/swagger.router.helpers.d.ts +7 -0
  285. package/dist/types/server.d.ts +3 -0
  286. package/dist/types/types/arkos-config.d.ts +10 -5
  287. package/dist/types/utils/cli/utils/cli.helpers.d.ts +1 -1
  288. package/dist/types/utils/cli/utils/watermark-stamper.d.ts +9 -0
  289. package/dist/types/utils/features/api.features.d.ts +1 -0
  290. package/dist/types/utils/features/port-and-host-allocator.d.ts +21 -0
  291. package/dist/types/utils/helpers/global.helpers.d.ts +6 -1
  292. package/dist/types/utils/helpers/models.helpers.d.ts +31 -5
  293. package/dist/types/utils/helpers/routers.helpers.d.ts +2 -0
  294. package/dist/types/utils/prisma/enhaced-prisma-json-schema-generator.d.ts +34 -0
  295. package/dist/types/utils/prisma/prisma-schema-parser.d.ts +18 -0
  296. package/dist/types/utils/prisma/types.d.ts +48 -0
  297. package/dist/types/utils/sheu.d.ts +70 -0
  298. package/package.json +42 -40
  299. package/dist/es2020/app.js +0 -1
  300. package/dist/es2020/app.js.map +0 -1
  301. package/dist/es2020/exports/auth/index.js +0 -2
  302. package/dist/es2020/exports/controllers/index.js +0 -4
  303. package/dist/es2020/exports/error-handler/index.js +0 -4
  304. package/dist/es2020/exports/index.js +0 -8
  305. package/dist/es2020/exports/middlewares/index.js +0 -2
  306. package/dist/es2020/exports/prisma/index.js +0 -3
  307. package/dist/es2020/exports/services/index.js +0 -9
  308. package/dist/es2020/exports/utils/index.js +0 -4
  309. package/dist/es2020/exports/validation/index.js +0 -4
  310. package/dist/es2020/modules/auth/auth.controller.js +0 -187
  311. package/dist/es2020/modules/auth/auth.router.js +0 -118
  312. package/dist/es2020/modules/auth/auth.router.js.map +0 -1
  313. package/dist/es2020/modules/auth/auth.service.js +0 -185
  314. package/dist/es2020/modules/auth/auth.service.js.map +0 -1
  315. package/dist/es2020/modules/auth/utils/helpers/auth.controller.helpers.js +0 -73
  316. package/dist/es2020/modules/base/base.controller.js +0 -151
  317. package/dist/es2020/modules/base/base.controller.js.map +0 -1
  318. package/dist/es2020/modules/base/base.middlewares.js +0 -81
  319. package/dist/es2020/modules/base/base.middlewares.js.map +0 -1
  320. package/dist/es2020/modules/base/base.router.js +0 -17
  321. package/dist/es2020/modules/base/base.router.js.map +0 -1
  322. package/dist/es2020/modules/base/base.service.js +0 -120
  323. package/dist/es2020/modules/base/base.service.js.map +0 -1
  324. package/dist/es2020/modules/base/utils/helpers/base.controller.helpers.js +0 -77
  325. package/dist/es2020/modules/base/utils/helpers/base.middlewares.helpers.js +0 -44
  326. package/dist/es2020/modules/base/utils/helpers/base.router.helpers.js +0 -161
  327. package/dist/es2020/modules/base/utils/helpers/base.router.helpers.js.map +0 -1
  328. package/dist/es2020/modules/base/utils/helpers/base.service.helpers.js +0 -165
  329. package/dist/es2020/modules/email/email.service.js +0 -97
  330. package/dist/es2020/modules/error-handler/error-handler.controller.js +0 -105
  331. package/dist/es2020/modules/error-handler/error-handler.controller.js.map +0 -1
  332. package/dist/es2020/modules/error-handler/utils/app-error.js +0 -15
  333. package/dist/es2020/modules/error-handler/utils/catch-async.js +0 -10
  334. package/dist/es2020/modules/error-handler/utils/catch-async.js.map +0 -1
  335. package/dist/es2020/modules/error-handler/utils/error-handler.helpers.js +0 -155
  336. package/dist/es2020/modules/error-handler/utils/error-handler.helpers.js.map +0 -1
  337. package/dist/es2020/modules/file-upload/file-upload.controller.js +0 -266
  338. package/dist/es2020/modules/file-upload/file-upload.router.js +0 -50
  339. package/dist/es2020/modules/file-upload/file-upload.router.js.map +0 -1
  340. package/dist/es2020/modules/file-upload/file-upload.service.js +0 -314
  341. package/dist/es2020/modules/file-upload/utils/helpers/file-upload.helpers.js +0 -81
  342. package/dist/es2020/modules/file-upload/utils/helpers/file-upload.helpers.js.map +0 -1
  343. package/dist/es2020/modules/swagger/swagger.router.js +0 -135
  344. package/dist/es2020/modules/swagger/swagger.router.js.map +0 -1
  345. package/dist/es2020/server.js +0 -3
  346. package/dist/es2020/server.js.map +0 -1
  347. package/dist/es2020/types/arkos-config.js +0 -2
  348. package/dist/es2020/types/arkos-config.js.map +0 -1
  349. package/dist/es2020/types/auth.js +0 -2
  350. package/dist/es2020/types/index.js +0 -8
  351. package/dist/es2020/types/router-config.js +0 -2
  352. package/dist/es2020/utils/arkos-env.js +0 -7
  353. package/dist/es2020/utils/cli/build.js +0 -223
  354. package/dist/es2020/utils/cli/build.js.map +0 -1
  355. package/dist/es2020/utils/cli/dev.js +0 -243
  356. package/dist/es2020/utils/cli/dev.js.map +0 -1
  357. package/dist/es2020/utils/cli/generate.js +0 -183
  358. package/dist/es2020/utils/cli/index.js +0 -74
  359. package/dist/es2020/utils/cli/start.js +0 -86
  360. package/dist/es2020/utils/cli/start.js.map +0 -1
  361. package/dist/es2020/utils/cli/utils/cli.helpers.js +0 -18
  362. package/dist/es2020/utils/cli/utils/cli.helpers.js.map +0 -1
  363. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +0 -33
  364. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-controller-template.js +0 -18
  365. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-middlewares.js +0 -265
  366. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +0 -1
  367. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +0 -55
  368. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +0 -1
  369. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-router-template.js +0 -32
  370. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-router-template.js.map +0 -1
  371. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-service-template.js +0 -32
  372. package/dist/es2020/utils/cli/utils/template-generators.js +0 -25
  373. package/dist/es2020/utils/dotenv.helpers.js +0 -37
  374. package/dist/es2020/utils/features/api.features.js +0 -154
  375. package/dist/es2020/utils/features/api.features.js.map +0 -1
  376. package/dist/es2020/utils/features/change-case.features.js +0 -31
  377. package/dist/es2020/utils/helpers/api.features.helpers.js +0 -103
  378. package/dist/es2020/utils/helpers/api.features.helpers.js.map +0 -1
  379. package/dist/es2020/utils/helpers/change-case.helpers.js +0 -161
  380. package/dist/es2020/utils/helpers/deepmerge.helper.js +0 -113
  381. package/dist/es2020/utils/helpers/fs.helpers.js +0 -45
  382. package/dist/es2020/utils/helpers/fs.helpers.js.map +0 -1
  383. package/dist/es2020/utils/helpers/global.helpers.js +0 -4
  384. package/dist/es2020/utils/helpers/global.helpers.js.map +0 -1
  385. package/dist/es2020/utils/helpers/models.helpers.js +0 -276
  386. package/dist/es2020/utils/helpers/models.helpers.js.map +0 -1
  387. package/dist/es2020/utils/helpers/prisma.helpers.js +0 -41
  388. package/dist/es2020/utils/helpers/prisma.helpers.js.map +0 -1
  389. package/dist/es2020/utils/helpers/query-parser.helpers.js +0 -40
  390. package/dist/es2020/utils/helpers/text.helpers.js +0 -22
  391. package/dist/es2020/utils/validate-dto.js +0 -11
  392. package/dist/es2020/utils/validate-schema.js +0 -9
  393. /package/dist/{es2020 → esm}/exports/auth/index.js.map +0 -0
  394. /package/dist/{es2020 → esm}/exports/controllers/index.js.map +0 -0
  395. /package/dist/{es2020 → esm}/exports/error-handler/index.js.map +0 -0
  396. /package/dist/{es2020 → esm}/exports/index.js.map +0 -0
  397. /package/dist/{es2020 → esm}/exports/middlewares/index.js.map +0 -0
  398. /package/dist/{es2020 → esm}/exports/prisma/index.js.map +0 -0
  399. /package/dist/{es2020 → esm}/exports/services/index.js.map +0 -0
  400. /package/dist/{es2020 → esm}/exports/utils/index.js.map +0 -0
  401. /package/dist/{es2020 → esm}/exports/validation/index.js.map +0 -0
  402. /package/dist/{es2020 → esm}/modules/auth/auth.controller.js.map +0 -0
  403. /package/dist/{es2020 → esm}/modules/auth/utils/helpers/auth.controller.helpers.js.map +0 -0
  404. /package/dist/{es2020 → esm}/modules/base/utils/helpers/base.controller.helpers.js.map +0 -0
  405. /package/dist/{es2020 → esm}/modules/base/utils/helpers/base.middlewares.helpers.js.map +0 -0
  406. /package/dist/{es2020 → esm}/modules/base/utils/helpers/base.service.helpers.js.map +0 -0
  407. /package/dist/{es2020 → esm}/modules/email/email.service.js.map +0 -0
  408. /package/dist/{es2020 → esm}/modules/error-handler/utils/app-error.js.map +0 -0
  409. /package/dist/{es2020 → esm}/modules/file-upload/file-upload.controller.js.map +0 -0
  410. /package/dist/{es2020 → esm}/modules/file-upload/file-upload.service.js.map +0 -0
  411. /package/dist/{es2020 → esm}/paths.js +0 -0
  412. /package/dist/{es2020 → esm}/paths.js.map +0 -0
  413. /package/dist/{es2020 → esm}/types/auth.js.map +0 -0
  414. /package/dist/{es2020 → esm}/types/index.js.map +0 -0
  415. /package/dist/{es2020 → esm}/types/router-config.js.map +0 -0
  416. /package/dist/{es2020 → esm}/utils/arkos-env.js.map +0 -0
  417. /package/dist/{es2020 → esm}/utils/cli/index.js.map +0 -0
  418. /package/dist/{es2020 → esm}/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js.map +0 -0
  419. /package/dist/{es2020 → esm}/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +0 -0
  420. /package/dist/{es2020 → esm}/utils/cli/utils/template-generators.js.map +0 -0
  421. /package/dist/{es2020 → esm}/utils/dotenv.helpers.js.map +0 -0
  422. /package/dist/{es2020 → esm}/utils/features/change-case.features.js.map +0 -0
  423. /package/dist/{es2020 → esm}/utils/helpers/change-case.helpers.js.map +0 -0
  424. /package/dist/{es2020 → esm}/utils/helpers/deepmerge.helper.js.map +0 -0
  425. /package/dist/{es2020 → esm}/utils/helpers/query-parser.helpers.js.map +0 -0
  426. /package/dist/{es2020 → esm}/utils/helpers/text.helpers.js.map +0 -0
  427. /package/dist/{es2020 → esm}/utils/validate-dto.js.map +0 -0
  428. /package/dist/{es2020 → esm}/utils/validate-schema.js.map +0 -0
@@ -1,325 +1,11 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.prismaModelsUniqueFields = exports.models = exports.prismaModelRelationFields = exports.prismaModelsModules = void 0;
40
- exports.getModelModules = getModelModules;
41
- exports.getFileModelModulesFileStructure = getFileModelModulesFileStructure;
42
- exports.processSubdir = processSubdir;
43
- exports.validateNamingConventions = validateNamingConventions;
44
- exports.assignModuleToResult = assignModuleToResult;
45
- exports.importPrismaModelModules = importPrismaModelModules;
46
- exports.getAllPrismaFiles = getAllPrismaFiles;
47
- exports.initializePrismaModels = initializePrismaModels;
48
- exports.getPrismaModelRelations = getPrismaModelRelations;
49
- exports.getModels = getModels;
50
- exports.getModelUniqueFields = getModelUniqueFields;
51
- const path_1 = __importDefault(require("path"));
52
- const fs_1 = __importDefault(require("fs"));
53
- const change_case_helpers_1 = require("../../utils/helpers/change-case.helpers");
54
- const fs_helpers_1 = require("./fs.helpers");
55
- const global_helpers_1 = require("./global.helpers");
56
- const cli_helpers_1 = require("../cli/utils/cli.helpers");
57
- exports.prismaModelsModules = {};
58
- function getModelModules(modelName) {
59
- return exports.prismaModelsModules[(0, change_case_helpers_1.kebabCase)(modelName)];
60
- }
61
- function getFileModelModulesFileStructure(modelName) {
62
- const kebabModelName = (0, change_case_helpers_1.kebabCase)(modelName).toLowerCase();
63
- const isAuthModule = modelName.toLowerCase() === "auth";
64
- const ext = (0, fs_helpers_1.getUserFileExtension)();
65
- return {
66
- core: {
67
- service: `${kebabModelName}.service.${ext}`,
68
- controller: `${kebabModelName}.controller.${ext}`,
69
- middlewares: `${kebabModelName}.middlewares.${ext}`,
70
- authConfigs: `${kebabModelName}.auth-configs.${ext}`,
71
- authConfigsNew: `${kebabModelName}.auth.${ext}`,
72
- prismaQueryOptions: `${kebabModelName}.prisma-query-options.${ext}`,
73
- prismaQueryOptionsNew: `${kebabModelName}.query.${ext}`,
74
- router: `${kebabModelName}.router.${ext}`,
75
- },
76
- dtos: isAuthModule
77
- ? {
78
- login: `login.dto.${ext}`,
79
- signup: `signup.dto.${ext}`,
80
- updateMe: `update-me.dto.${ext}`,
81
- updatePassword: `update-password.dto.${ext}`,
82
- }
83
- : {
84
- model: `${kebabModelName}.dto.${ext}`,
85
- create: `create-${kebabModelName}.dto.${ext}`,
86
- createMany: `create-many-${kebabModelName}.dto.${ext}`,
87
- update: `update-${kebabModelName}.dto.${ext}`,
88
- updateMany: `update-many-${kebabModelName}.dto.${ext}`,
89
- query: `query-${kebabModelName}.dto.${ext}`,
90
- },
91
- schemas: isAuthModule
92
- ? {
93
- login: `login.schema.${ext}`,
94
- signup: `signup.schema.${ext}`,
95
- updateMe: `update-me.schema.${ext}`,
96
- updatePassword: `update-password.schema.${ext}`,
97
- }
98
- : {
99
- model: `${kebabModelName}.schema.${ext}`,
100
- create: `create-${kebabModelName}.schema.${ext}`,
101
- createMany: `create-many-${kebabModelName}.schema.${ext}`,
102
- update: `update-${kebabModelName}.schema.${ext}`,
103
- updateMany: `update-many-${kebabModelName}.schema.${ext}`,
104
- query: `query-${kebabModelName}.schema.${ext}`,
105
- },
106
- };
107
- }
108
- async function processSubdir(modelName, type, result) {
109
- const moduleDir = path_1.default.resolve((0, fs_helpers_1.crd)(), "src", "modules", (0, change_case_helpers_1.kebabCase)(modelName));
110
- const subdir = path_1.default.join(moduleDir, type);
111
- const fileStructure = getFileModelModulesFileStructure(modelName);
112
- try {
113
- await fs_1.default.promises.access(subdir).catch(() => {
114
- return;
115
- });
116
- await Promise.all(Object.entries(fileStructure[type]).map(async ([key, fileName]) => {
117
- const filePath = path_1.default.join(subdir, fileName);
118
- try {
119
- const module = await Promise.resolve(`${filePath}`).then(s => __importStar(require(s))).catch(() => null);
120
- if (module)
121
- result[type][key] = module.default;
122
- }
123
- catch (error) {
124
- console.error(error);
125
- }
126
- }));
127
- }
128
- catch (error) {
129
- console.error(error);
130
- }
131
- }
132
- function validateNamingConventions(key, fileName, result) {
133
- if (key === "prismaQueryOptions") {
134
- if (result.prismaQueryOptions) {
135
- (0, cli_helpers_1.killServerChildProcess)();
136
- throw new Error(`\n Cannot use both ${fileName} and ${fileName.replace("prisma-query-options", "query")} at once, please choose only one name convention. \n`);
137
- }
138
- }
139
- else if (key === "prismaQueryOptionsNew") {
140
- if (result.prismaQueryOptions) {
141
- (0, cli_helpers_1.killServerChildProcess)();
142
- throw new Error(`\n Cannot use both ${fileName} and ${fileName.replace("query", "prisma-query-options")} at once, please choose only one name convention. \n`);
143
- }
144
- }
145
- else if (key === "authConfigs") {
146
- if (result.authConfigs) {
147
- (0, cli_helpers_1.killServerChildProcess)();
148
- throw new Error(`\n Cannot use both ${fileName} and ${fileName.replace("auth-configs", "auth")} at once, please choose only one name convention. \n`);
149
- }
150
- }
151
- else if (key === "authConfigsNew") {
152
- if (result.authConfigs) {
153
- (0, cli_helpers_1.killServerChildProcess)();
154
- throw new Error(`\n Cannot use both ${fileName} and ${fileName.replace("auth", "auth-configs")} at once, please choose only one name convention. \n`);
155
- }
156
- }
157
- }
158
- function assignModuleToResult(key, module, result) {
159
- if (key === "prismaQueryOptions" || key === "prismaQueryOptionsNew") {
160
- result.prismaQueryOptions = module.default || module;
161
- }
162
- else if (key === "authConfigs" || key === "authConfigsNew") {
163
- result.authConfigs = module.default || module;
164
- }
165
- else if (key === "middlewares" || key === "router") {
166
- result[key] = module;
167
- }
168
- else {
169
- result[key] = module.default || module;
170
- }
171
- }
172
- async function importPrismaModelModules(modelName) {
173
- const moduleDir = path_1.default.resolve((0, fs_helpers_1.crd)(), "src", "modules", (0, change_case_helpers_1.kebabCase)(modelName));
174
- const result = {
175
- dtos: {},
176
- schemas: {},
177
- };
178
- if (getModelModules(modelName))
179
- return getModelModules(modelName);
180
- const fileStructure = getFileModelModulesFileStructure(modelName);
181
- await Promise.all(Object.entries(fileStructure.core).map(async ([key, fileName]) => {
182
- const filePath = path_1.default.join(moduleDir, fileName);
183
- try {
184
- const module = await (0, global_helpers_1.importModule)(filePath).catch((err) => {
185
- if (!err.message.includes("Cannot find module")) {
186
- console.error(`Failed to import ${fileName}: \n`);
187
- console.error(err);
188
- (0, cli_helpers_1.killServerChildProcess)();
189
- process.exit(1);
190
- }
191
- });
192
- if (module) {
193
- validateNamingConventions(key, fileName, result);
194
- assignModuleToResult(key, module, result);
195
- }
196
- }
197
- catch (err) {
198
- if (err.message.includes("Cannot use both"))
199
- throw err;
200
- console.error(err);
201
- (0, cli_helpers_1.killServerChildProcess)();
202
- }
203
- }));
204
- await Promise.all([
205
- processSubdir(modelName, "dtos", result),
206
- processSubdir(modelName, "schemas", result),
207
- ]);
208
- exports.prismaModelsModules[modelName] = result;
209
- return result;
210
- }
211
- exports.prismaModelRelationFields = {};
212
- function getAllPrismaFiles(dirPath, fileList = []) {
213
- const files = fs_1.default.readdirSync(dirPath);
214
- files?.forEach((file) => {
215
- const filePath = path_1.default.join(dirPath, file);
216
- const stat = fs_1.default.statSync(filePath);
217
- if (stat.isDirectory() && file !== "migrations") {
218
- fileList = getAllPrismaFiles(filePath, fileList);
219
- }
220
- else if (stat.isFile() && file.endsWith(".prisma")) {
221
- fileList.push(filePath);
222
- }
223
- });
224
- return fileList;
225
- }
226
- const modelRegex = /model\s+(\w+)\s*{/g;
227
- exports.models = [];
228
- exports.prismaModelsUniqueFields = [];
229
- function initializePrismaModels() {
230
- const prismaContent = [];
231
- const files = getAllPrismaFiles("./prisma");
232
- for (const file of files) {
233
- const content = fs_1.default.readFileSync(file, "utf-8");
234
- if (!prismaContent?.includes?.(content))
235
- prismaContent.push(content);
236
- }
237
- const content = prismaContent
238
- .join("\n")
239
- .replace(modelRegex, (_, modelName) => {
240
- if (!exports.models?.includes?.(modelName))
241
- exports.models.push((0, change_case_helpers_1.camelCase)(modelName.trim()));
242
- return `model ${modelName} {`;
243
- });
244
- for (const model of exports.models) {
245
- const modelName = (0, change_case_helpers_1.pascalCase)(model);
246
- const modelStart = content.indexOf(`model ${modelName} {`);
247
- const modelEnd = content.indexOf("}", modelStart);
248
- const modelDefinition = content.slice(modelStart, modelEnd);
249
- const relations = {
250
- singular: [],
251
- list: [],
252
- };
253
- const lines = modelDefinition.split("\n");
254
- for (const line of lines) {
255
- const trimmedLine = line.trim();
256
- if (!trimmedLine ||
257
- trimmedLine.startsWith("model") ||
258
- trimmedLine.startsWith("//") ||
259
- trimmedLine.startsWith("/*"))
260
- continue;
261
- const [fieldName, type] = trimmedLine.split(/\s+/);
262
- const isUnique = trimmedLine?.includes?.("@unique");
263
- if (isUnique) {
264
- const existingFields = exports.prismaModelsUniqueFields[model] || [];
265
- const alreadyExists = existingFields.some((field) => field.name === fieldName &&
266
- field.type === type &&
267
- field.isUnique === isUnique);
268
- if (!alreadyExists) {
269
- exports.prismaModelsUniqueFields[model] = [
270
- ...existingFields,
271
- { name: fieldName, type, isUnique },
272
- ];
273
- }
274
- }
275
- const cleanType = type?.replace("[]", "").replace("?", "");
276
- if (trimmedLine?.includes?.("@relation") ||
277
- trimmedLine.match(/\s+\w+(\[\])?(\s+@|$)/) ||
278
- exports.models?.includes?.((0, change_case_helpers_1.camelCase)(cleanType || ""))) {
279
- const enumStart = content.indexOf(`enum ${cleanType} {`);
280
- const typeStart = content.indexOf(`type ${cleanType} {`);
281
- if (!cleanType ||
282
- enumStart >= 0 ||
283
- typeStart >= 0 ||
284
- cleanType === "String" ||
285
- cleanType === "Int" ||
286
- cleanType === "Float" ||
287
- cleanType === "Boolean" ||
288
- cleanType === "DateTime" ||
289
- cleanType === "Bytes" ||
290
- cleanType === "Decimal" ||
291
- cleanType === "BigInt" ||
292
- cleanType === "Json") {
293
- continue;
294
- }
295
- if (!type?.includes?.("[]")) {
296
- relations.singular.push({
297
- name: fieldName,
298
- type: cleanType,
299
- });
300
- }
301
- else {
302
- relations.list.push({
303
- name: fieldName,
304
- type: cleanType,
305
- });
306
- }
307
- }
308
- exports.prismaModelRelationFields[modelName] = relations;
309
- }
310
- }
311
- }
312
- initializePrismaModels();
313
- function getPrismaModelRelations(modelName) {
314
- modelName = (0, change_case_helpers_1.pascalCase)(modelName);
315
- if (!(modelName in exports.prismaModelRelationFields))
316
- return;
317
- return exports.prismaModelRelationFields[modelName];
318
- }
319
- function getModels() {
320
- return exports.models;
321
- }
322
- function getModelUniqueFields(modelName) {
323
- return exports.prismaModelsUniqueFields[modelName];
324
- }
325
- //# sourceMappingURL=models.helpers.js.map
1
+ "use strict";var __importDefault=function(s){return s&&s.__esModule?s:{default:s}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.prismaModelsUniqueFields=exports.prismaSchemasContent=exports.models=exports.prismaModelRelationFields=void 0,exports.setModelModules=setModelModules,exports.getModelModules=getModelModules,exports.getFileModelModulesFileStructure=getFileModelModulesFileStructure,exports.processSubdir=processSubdir,exports.validateNamingConventions=validateNamingConventions,exports.assignModuleToResult=assignModuleToResult,exports.importPrismaModelModules=importPrismaModelModules,exports.getAllPrismaFiles=getAllPrismaFiles,exports.initializePrismaModels=initializePrismaModels,exports.getPrismaModelRelations=getPrismaModelRelations,exports.getPrismaSchemasContent=getPrismaSchemasContent,exports.localValidatorFileExists=localValidatorFileExists,exports.getModels=getModels,exports.getModelUniqueFields=getModelUniqueFields;const path_1=__importDefault(require("path")),fs_1=__importDefault(require("fs")),change_case_helpers_1=require("../../utils/helpers/change-case.helpers"),fs_helpers_1=require("./fs.helpers"),global_helpers_1=require("./global.helpers"),cli_helpers_1=require("../cli/utils/cli.helpers"),sheu_1=__importDefault(require("../sheu"));let prismaModelsModules={};function setModelModules(s,e){prismaModelsModules[(0,change_case_helpers_1.kebabCase)(s)]=e}function getModelModules(s){return prismaModelsModules[(0,change_case_helpers_1.kebabCase)(s)]}function getFileModelModulesFileStructure(s){const e=(0,change_case_helpers_1.kebabCase)(s).toLowerCase(),o=s.toLowerCase()==="auth",t=(0,fs_helpers_1.getUserFileExtension)();return{core:{service:`${e}.service.${t}`,controller:`${e}.controller.${t}`,middlewares:`${e}.middlewares.${t}`,authConfigs:`${e}.auth-configs.${t}`,authConfigsNew:`${e}.auth.${t}`,prismaQueryOptions:`${e}.prisma-query-options.${t}`,prismaQueryOptionsNew:`${e}.query.${t}`,router:`${e}.router.${t}`},dtos:o?{login:`login.dto.${t}`,signup:`signup.dto.${t}`,getMe:`get-me.dto.${t}`,updateMe:`update-me.dto.${t}`,updatePassword:`update-password.dto.${t}`}:{model:`${e}.dto.${t}`,create:`create-${e}.dto.${t}`,createOne:`create-${e}.dto.${t}`,createMany:`create-many-${e}.dto.${t}`,update:`update-${e}.dto.${t}`,updateOne:`update-${e}.dto.${t}`,updateMany:`update-many-${e}.dto.${t}`,query:`query-${e}.dto.${t}`,findOne:`find-one-${e}.dto.${t}`,findMany:`find-many-${e}.dto.${t}`},schemas:o?{login:`login.schema.${t}`,signup:`signup.schema.${t}`,getMe:`get-me.schema.${t}`,updateMe:`update-me.schema.${t}`,updatePassword:`update-password.schema.${t}`}:{model:`${e}.schema.${t}`,create:`create-${e}.schema.${t}`,createOne:`create-${e}.schema.${t}`,createMany:`create-many-${e}.schema.${t}`,update:`update-${e}.schema.${t}`,updateOne:`update-${e}.schema.${t}`,updateMany:`update-many-${e}.schema.${t}`,query:`query-${e}.schema.${t}`,findOne:`find-one-${e}.schema.${t}`,findMany:`find-many-${e}.schema.${t}`}}}async function processSubdir(s,e){const o=path_1.default.resolve((0,fs_helpers_1.crd)(),"src","modules",(0,change_case_helpers_1.kebabCase)(s)),t=path_1.default.join(o,e),n=getFileModelModulesFileStructure(s),a={};try{await fs_1.default.promises.access(t).catch(()=>{}),await Promise.all(Object.entries(n[e]).map(async([c,d])=>{const u=path_1.default.join(t,d);try{const r=await(0,global_helpers_1.importModule)(u).catch(l=>{l.message.includes("Cannot find module")||(sheu_1.default.error(`Failed to import ${d}:`),console.error(l),(0,cli_helpers_1.killServerChildProcess)(),process.exit(1))});r&&(a[c]=r.default)}catch(r){console.error(r)}}))}catch(c){console.error(c)}return a}function validateNamingConventions(s,e,o){if(s==="prismaQueryOptions"){if(o.prismaQueryOptions)throw(0,cli_helpers_1.killServerChildProcess)(),new Error(`
2
+ Cannot use both ${e} and ${e.replace("prisma-query-options","query")} at once, please choose only one name convention.
3
+ `)}else if(s==="prismaQueryOptionsNew"){if(o.prismaQueryOptions)throw(0,cli_helpers_1.killServerChildProcess)(),new Error(`
4
+ Cannot use both ${e} and ${e.replace("query","prisma-query-options")} at once, please choose only one name convention.
5
+ `)}else if(s==="authConfigs"){if(o.authConfigs)throw(0,cli_helpers_1.killServerChildProcess)(),new Error(`
6
+ Cannot use both ${e} and ${e.replace("auth-configs","auth")} at once, please choose only one name convention.
7
+ `)}else if(s==="authConfigsNew"&&o.authConfigs)throw(0,cli_helpers_1.killServerChildProcess)(),new Error(`
8
+ Cannot use both ${e} and ${e.replace("auth","auth-configs")} at once, please choose only one name convention.
9
+ `)}function assignModuleToResult(s,e,o){s==="prismaQueryOptions"||s==="prismaQueryOptionsNew"?o.prismaQueryOptions=e.default||e:s==="authConfigs"||s==="authConfigsNew"?o.authConfigs=e.default||e:s==="middlewares"||s==="router"?o[s]=e:o[s]=e.default||e}async function importPrismaModelModules(s,e){const o=path_1.default.resolve((0,fs_helpers_1.crd)(),"src","modules",(0,change_case_helpers_1.kebabCase)(s)),t={dtos:{},schemas:{}};if(getModelModules(s))return getModelModules(s);const n=getFileModelModulesFileStructure(s);await Promise.all(Object.entries(n.core).map(async([d,u])=>{const r=path_1.default.join(o,u);try{const l=await(0,global_helpers_1.importModule)(r).catch(p=>{p.message.includes("Cannot find module")||(sheu_1.default.error(`Failed to import ${u}:`),console.error(p),(0,cli_helpers_1.killServerChildProcess)(),process.exit(1))});l&&(validateNamingConventions(d,u,t),assignModuleToResult(d,l,t))}catch(l){if(l.message.includes("Cannot use both"))throw l;console.error(l),(0,cli_helpers_1.killServerChildProcess)()}}));const a=e.validation?.resolver?e.validation.resolver==="zod"?"schemas":"dtos":null;let c={};return a&&(c=await processSubdir(s,a)),prismaModelsModules[s]={...t,...a&&{[a]:c}},{...t,...a&&{[a]:c}}}exports.prismaModelRelationFields={};function getAllPrismaFiles(s,e=[]){return fs_1.default.readdirSync(s)?.forEach(t=>{const n=path_1.default.join(s,t),a=fs_1.default.statSync(n);a.isDirectory()&&t!=="migrations"?e=getAllPrismaFiles(n,e):a.isFile()&&t.endsWith(".prisma")&&e.push(n)}),e}const modelRegex=/model\s+(\w+)\s*{/g;exports.models=[],exports.prismaModelsUniqueFields=[];function initializePrismaModels(){const s=getPrismaSchemasContent();for(const e of exports.models){const o=(0,change_case_helpers_1.pascalCase)(e),t=s.indexOf(`model ${o} {`),n=s.indexOf("}",t),a=s.slice(t,n),c={singular:[],list:[]},d=a.split(`
10
+ `);for(const u of d){const r=u.trim();if(!r||r.startsWith("model")||r.startsWith("//")||r.startsWith("/*"))continue;const[l,p]=r.split(/\s+/),h=r?.includes?.("@unique");if(h){const m=exports.prismaModelsUniqueFields[e]||[];m.some(f=>f.name===l&&f.type===p&&f.isUnique===h)||(exports.prismaModelsUniqueFields[e]=[...m,{name:l,type:p,isUnique:h}])}const i=p?.replace("[]","").replace("?","");if(r?.includes?.("@relation")||r.match(/\s+\w+(\[\])?(\s+@|$)/)||exports.models?.includes?.((0,change_case_helpers_1.camelCase)(i||""))){const m=s.indexOf(`enum ${i} {`),$=s.indexOf(`type ${i} {`);if(!i||m>=0||$>=0||i==="String"||i==="Int"||i==="Float"||i==="Boolean"||i==="DateTime"||i==="Bytes"||i==="Decimal"||i==="BigInt"||i==="Json")continue;p?.includes?.("[]")?c.list.push({name:l,type:i}):c.singular.push({name:l,type:i})}exports.prismaModelRelationFields[o]=c}}}initializePrismaModels();function getPrismaModelRelations(s){if(s=(0,change_case_helpers_1.pascalCase)(s),s in exports.prismaModelRelationFields)return exports.prismaModelRelationFields[s]}function getModels(){return exports.models}function getPrismaSchemasContent(){if(exports.prismaSchemasContent)return exports.prismaSchemasContent;const s=[],e=getAllPrismaFiles("./prisma");for(const t of e){const n=fs_1.default.readFileSync(t,"utf-8");s?.includes?.(n)||s.push(n)}return s.join(`
11
+ `).replace(modelRegex,(t,n)=>(exports.models?.includes?.(n)||exports.models.push((0,change_case_helpers_1.camelCase)(n.trim())),`model ${n} {`))}function getModelUniqueFields(s){return exports.prismaModelsUniqueFields[s]}async function localValidatorFileExists(s,e,o){return o?.swagger?.mode==="prisma"?!1:!!(await importPrismaModelModules(e,o))?.[o.validation?.resolver==="zod"?"schemas":"dtos"]?.[(0,change_case_helpers_1.camelCase)(s)]}
@@ -1 +1 @@
1
- {"version":3,"file":"models.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/models.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import path from \"path\";\nimport fs from \"fs\";\nimport {\n camelCase,\n kebabCase,\n pascalCase,\n} from \"../../utils/helpers/change-case.helpers\";\nimport { crd, getUserFileExtension } from \"./fs.helpers\";\nimport { importModule } from \"./global.helpers\";\nimport { AuthConfigs } from \"../../types/auth\";\nimport { killServerChildProcess } from \"../cli/utils/cli.helpers\";\n\nexport let prismaModelsModules: Record<\n string,\n Awaited<ReturnType<typeof importPrismaModelModules>>\n> = {};\n\nexport function getModelModules(modelName: string) {\n return prismaModelsModules[kebabCase(modelName)];\n}\n\nexport function getFileModelModulesFileStructure(modelName: string) {\n const kebabModelName = kebabCase(modelName).toLowerCase();\n const isAuthModule = modelName.toLowerCase() === \"auth\";\n const ext = getUserFileExtension();\n\n return {\n core: {\n service: `${kebabModelName}.service.${ext}`,\n controller: `${kebabModelName}.controller.${ext}`,\n middlewares: `${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 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 createMany: `create-many-${kebabModelName}.dto.${ext}`,\n update: `update-${kebabModelName}.dto.${ext}`,\n updateMany: `update-many-${kebabModelName}.dto.${ext}`,\n query: `query-${kebabModelName}.dto.${ext}`,\n },\n schemas: isAuthModule\n ? {\n login: `login.schema.${ext}`,\n signup: `signup.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 createMany: `create-many-${kebabModelName}.schema.${ext}`,\n update: `update-${kebabModelName}.schema.${ext}`,\n updateMany: `update-many-${kebabModelName}.schema.${ext}`,\n query: `query-${kebabModelName}.schema.${ext}`,\n },\n };\n}\n\nexport async function processSubdir(\n modelName: string,\n type: \"dtos\" | \"schemas\",\n result: Record<string, any>\n) {\n const moduleDir = path.resolve(crd(), \"src\", \"modules\", kebabCase(modelName));\n\n const subdir = path.join(moduleDir, type);\n const fileStructure = getFileModelModulesFileStructure(modelName);\n\n // Skip if directory doesn't exist\n try {\n await fs.promises.access(subdir).catch(() => {\n return; // Directory doesn't exist\n });\n\n await Promise.all(\n Object.entries(fileStructure[type]).map(async ([key, fileName]) => {\n const filePath = path.join(subdir, fileName);\n try {\n const module = await import(filePath).catch(() => null);\n if (module) result[type][key] = module.default;\n } catch (error) {\n // Silent fail - file might not exist\n console.error(error);\n }\n })\n );\n } catch (error) {\n // Directory doesn't exist, continue silently\n console.error(error);\n }\n}\n\ntype importPrismaModelModulesReturnType = {\n service?: any;\n controller?: any;\n middlewares?: 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 {importPrismaModelModulesReturnType} 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: importPrismaModelModulesReturnType\n): void {\n if (key === \"prismaQueryOptions\") {\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 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 {importPrismaModelModulesReturnType} result - The result object to modify\n */\nexport function assignModuleToResult(\n key: string,\n module: any,\n result: importPrismaModelModulesReturnType\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 === \"middlewares\" || key === \"router\") {\n result[key] = module;\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 importPrismaModelModules(\n modelName: string\n): Promise<importPrismaModelModulesReturnType> {\n const moduleDir = path.resolve(crd(), \"src\", \"modules\", kebabCase(modelName));\n\n const result: importPrismaModelModulesReturnType = {\n dtos: {},\n schemas: {},\n };\n\n if (getModelModules(modelName)) return getModelModules(modelName);\n\n const fileStructure = getFileModelModulesFileStructure(modelName);\n\n // Batch process core files\n await Promise.all(\n Object.entries(fileStructure.core).map(async ([key, fileName]) => {\n const filePath = path.join(moduleDir, fileName);\n try {\n const module = await importModule(filePath).catch((err) => {\n if (!err.message.includes(\"Cannot find module\")) {\n console.error(`Failed to import ${fileName}: \\n`);\n console.error(err);\n killServerChildProcess();\n process.exit(1);\n }\n });\n\n if (module) {\n // Validate naming conventions before assignment\n validateNamingConventions(key, fileName, result);\n\n // Assign module to result\n assignModuleToResult(key, module, result);\n }\n } catch (err: any) {\n if (err.message.includes(\"Cannot use both\")) throw err;\n console.error(err);\n killServerChildProcess();\n }\n })\n );\n\n await Promise.all([\n processSubdir(modelName, \"dtos\", result),\n processSubdir(modelName, \"schemas\", result),\n ]);\n\n // Cache the result\n prismaModelsModules[modelName] = result;\n\n return result;\n}\n\nexport type ModelFieldDefition = {\n name: string;\n type: string;\n isUnique: boolean;\n};\n\n/**\n * Represents the structure of relation fields for Prisma models.\n * It includes both singular (one-to-one) and list (one-to-many) relationships.\n *\n * @typedef {Object} RelationFields\n * @property {Array<{name: string, type: string}>} singular - List of singular relationships.\n * @property {Array<{name: string, type: string}>} list - List of list relationships.\n */\nexport type RelationFields = {\n singular: Omit<ModelFieldDefition, \"isUnique\">[];\n list: Omit<ModelFieldDefition, \"isUnique\">[];\n};\n\n/**\n * Reads the Prisma schema files and extracts all model definitions,\n * identifying their relations (one-to-one and one-to-many).\n */\nexport const prismaModelRelationFields: Record<string, RelationFields> = {};\n\nexport function getAllPrismaFiles(dirPath: string, fileList: string[] = []) {\n const files = fs.readdirSync(dirPath);\n\n files?.forEach((file) => {\n const filePath = path.join(dirPath, file);\n const stat = fs.statSync(filePath);\n\n // Skip migrations folder\n if (stat.isDirectory() && file !== \"migrations\") {\n fileList = getAllPrismaFiles(filePath, fileList);\n } else if (stat.isFile() && file.endsWith(\".prisma\")) {\n fileList.push(filePath);\n }\n });\n\n return fileList;\n}\n\nconst modelRegex = /model\\s+(\\w+)\\s*{/g;\nexport const models: string[] = [];\nexport const prismaModelsUniqueFields: Record<string, ModelFieldDefition[]> =\n [] as any;\n\nexport function initializePrismaModels() {\n const prismaContent: string[] = [];\n\n const files = getAllPrismaFiles(\"./prisma\");\n\n for (const file of files) {\n const content = fs.readFileSync(file, \"utf-8\");\n\n if (!prismaContent?.includes?.(content)) prismaContent.push(content);\n }\n\n const content = prismaContent\n .join(\"\\n\")\n .replace(modelRegex, (_, modelName) => {\n if (!models?.includes?.(modelName))\n models.push(camelCase(modelName.trim()));\n return `model ${modelName} {`;\n });\n\n for (const model of models) {\n const modelName = pascalCase(model);\n\n const modelStart = content.indexOf(`model ${modelName} {`);\n const modelEnd = content.indexOf(\"}\", modelStart);\n const modelDefinition = content.slice(modelStart, modelEnd);\n\n const relations: RelationFields = {\n singular: [],\n list: [],\n };\n const lines = modelDefinition.split(\"\\n\");\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n\n if (\n !trimmedLine ||\n trimmedLine.startsWith(\"model\") ||\n trimmedLine.startsWith(\"//\") ||\n trimmedLine.startsWith(\"/*\")\n )\n continue;\n\n const [fieldName, type] = trimmedLine.split(/\\s+/);\n const isUnique = trimmedLine?.includes?.(\"@unique\");\n\n if (isUnique) {\n const existingFields = prismaModelsUniqueFields[model] || [];\n\n const alreadyExists = existingFields.some(\n (field) =>\n field.name === fieldName &&\n field.type === type &&\n field.isUnique === isUnique\n );\n\n if (!alreadyExists) {\n prismaModelsUniqueFields[model] = [\n ...existingFields,\n { name: fieldName, type, isUnique },\n ];\n }\n }\n\n const cleanType = type?.replace(\"[]\", \"\").replace(\"?\", \"\");\n\n if (\n trimmedLine?.includes?.(\"@relation\") ||\n trimmedLine.match(/\\s+\\w+(\\[\\])?(\\s+@|$)/) ||\n models?.includes?.(camelCase(cleanType || \"\"))\n ) {\n const enumStart = content.indexOf(`enum ${cleanType} {`);\n const typeStart = content.indexOf(`type ${cleanType} {`);\n\n if (\n !cleanType ||\n enumStart >= 0 ||\n typeStart >= 0 ||\n cleanType === \"String\" ||\n cleanType === \"Int\" ||\n cleanType === \"Float\" ||\n cleanType === \"Boolean\" ||\n cleanType === \"DateTime\" ||\n cleanType === \"Bytes\" ||\n cleanType === \"Decimal\" ||\n cleanType === \"BigInt\" ||\n cleanType === \"Json\"\n\n // && !content.includes?.(`model ${cleanType} {`)\n ) {\n continue;\n }\n\n if (!type?.includes?.(\"[]\")) {\n relations.singular.push({\n name: fieldName,\n type: cleanType,\n });\n } else {\n relations.list.push({\n name: fieldName,\n type: cleanType,\n });\n }\n }\n\n prismaModelRelationFields[modelName] = relations;\n }\n }\n}\n\ninitializePrismaModels();\n\n/**\n * Retrieves the relations for a given Prisma model.\n *\n * @param {string} modelName - The name of the model (e.g., \"User\").\n * @returns {RelationFields|undefined} The relation fields for the model, or `undefined` if no relations are found.\n */\nexport function getPrismaModelRelations(modelName: string) {\n modelName = pascalCase(modelName);\n\n if (!(modelName in prismaModelRelationFields)) return;\n return prismaModelRelationFields[modelName];\n}\n\n/**\n * Retrieves all the model names from the Prisma schema.\n *\n * @returns {string[]} An array of model names (e.g., [\"User\", \"Post\"]).\n */\nfunction getModels() {\n return models;\n}\n\n/** Retuns a given model unique fields\n * @param {string} modelName - The name of model in PascalCase\n * @returns {string[]} An array of all unique fields,\n */\nfunction getModelUniqueFields(modelName: string) {\n return prismaModelsUniqueFields[modelName];\n}\n\nexport { getModels, getModelUniqueFields };\n"]}
1
+ {"version":3,"file":"models.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/models.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import path from \"path\";\nimport fs from \"fs\";\nimport {\n camelCase,\n kebabCase,\n pascalCase,\n} from \"../../utils/helpers/change-case.helpers\";\nimport { crd, getUserFileExtension } from \"./fs.helpers\";\nimport { importModule } from \"./global.helpers\";\nimport { AuthConfigs } from \"../../types/auth\";\nimport { killServerChildProcess } from \"../cli/utils/cli.helpers\";\nimport { ArkosConfig } from \"../../exports\";\nimport sheu from \"../sheu\";\n\ntype ModeModules = Awaited<ReturnType<typeof importPrismaModelModules>>;\n\n// Must be exported to not cause problems on cjs\nlet prismaModelsModules: Record<string, ModeModules> = {};\n\nexport function setModelModules(modelName: string, modules: ModeModules) {\n prismaModelsModules[kebabCase(modelName)] = modules;\n}\n\nexport function getModelModules(modelName: string) {\n return prismaModelsModules[kebabCase(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 getFileModelModulesFileStructure\n>[\"dtos\"];\n\nexport function getFileModelModulesFileStructure(modelName: string) {\n const kebabModelName = kebabCase(modelName).toLowerCase();\n const isAuthModule = modelName.toLowerCase() === \"auth\";\n const ext = getUserFileExtension();\n\n return {\n core: {\n service: `${kebabModelName}.service.${ext}`,\n controller: `${kebabModelName}.controller.${ext}`,\n middlewares: `${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: `create-many-${kebabModelName}.dto.${ext}`,\n update: `update-${kebabModelName}.dto.${ext}`,\n updateOne: `update-${kebabModelName}.dto.${ext}`, // same as createOne\n updateMany: `update-many-${kebabModelName}.dto.${ext}`,\n query: `query-${kebabModelName}.dto.${ext}`,\n // looking for some better naming convetion\n findOne: `find-one-${kebabModelName}.dto.${ext}`,\n findMany: `find-many-${kebabModelName}.dto.${ext}`,\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: `create-many-${kebabModelName}.schema.${ext}`, // 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: `update-many-${kebabModelName}.schema.${ext}`,\n query: `query-${kebabModelName}.schema.${ext}`,\n // looking for some better naming convetion\n findOne: `find-one-${kebabModelName}.schema.${ext}`,\n findMany: `find-many-${kebabModelName}.schema.${ext}`,\n },\n };\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 = getFileModelModulesFileStructure(modelName);\n const result: Record<string, any> = {};\n\n // Skip if directory doesn't exist\n try {\n await fs.promises.access(subdir).catch(() => {\n return; // Directory doesn't exist\n });\n\n await Promise.all(\n Object.entries(fileStructure[type]).map(async ([key, fileName]) => {\n const filePath = path.join(subdir, fileName);\n try {\n const module = await importModule(filePath).catch((err) => {\n if (!err.message.includes(\"Cannot find module\")) {\n sheu.error(`Failed to import ${fileName}:`);\n console.error(err);\n killServerChildProcess();\n process.exit(1);\n }\n });\n\n if (module) result[key] = module.default;\n } catch (error) {\n // Silent fail - file might not exist\n console.error(error);\n }\n })\n );\n } catch (error) {\n // Directory doesn't exist, continue silently\n console.error(error);\n }\n\n return result;\n}\n\ntype importPrismaModelModulesReturnType = {\n service?: any;\n controller?: any;\n middlewares?: 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 {importPrismaModelModulesReturnType} 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: importPrismaModelModulesReturnType\n): void {\n if (key === \"prismaQueryOptions\") {\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 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 {importPrismaModelModulesReturnType} result - The result object to modify\n */\nexport function assignModuleToResult(\n key: string,\n module: any,\n result: importPrismaModelModulesReturnType\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 === \"middlewares\" || key === \"router\") {\n result[key] = module;\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 importPrismaModelModules(\n modelName: string,\n arkosConfig: ArkosConfig\n): Promise<importPrismaModelModulesReturnType> {\n const moduleDir = path.resolve(crd(), \"src\", \"modules\", kebabCase(modelName));\n\n const result: importPrismaModelModulesReturnType = {\n dtos: {},\n schemas: {},\n };\n\n if (getModelModules(modelName)) return getModelModules(modelName);\n\n const fileStructure = getFileModelModulesFileStructure(modelName);\n\n // Batch process core files\n await Promise.all(\n Object.entries(fileStructure.core).map(async ([key, fileName]) => {\n const filePath = path.join(moduleDir, fileName);\n try {\n const module = await importModule(filePath).catch((err) => {\n if (!err.message.includes(\"Cannot find module\")) {\n sheu.error(`Failed to import ${fileName}:`);\n console.error(err);\n killServerChildProcess();\n process.exit(1);\n }\n });\n\n if (module) {\n // Validate naming conventions before assignment\n validateNamingConventions(key, fileName, result);\n\n // Assign module to result\n assignModuleToResult(key, module, result);\n }\n } catch (err: any) {\n if (err.message.includes(\"Cannot use both\")) throw err;\n console.error(err);\n killServerChildProcess();\n }\n })\n );\n\n const validationSubdir = arkosConfig.validation?.resolver\n ? arkosConfig.validation.resolver === \"zod\"\n ? \"schemas\"\n : \"dtos\"\n : null;\n\n let validators = {};\n if (validationSubdir)\n validators = await processSubdir(modelName, validationSubdir);\n\n prismaModelsModules[modelName] = {\n ...result,\n ...(validationSubdir && { [validationSubdir]: validators }),\n };\n\n return {\n ...result,\n ...(validationSubdir && { [validationSubdir]: validators }),\n };\n}\n\nexport type ModelFieldDefition = {\n name: string;\n type: string;\n isUnique: boolean;\n};\n\n/**\n * Represents the structure of relation fields for Prisma models.\n * It includes both singular (one-to-one) and list (one-to-many) relationships.\n *\n */\nexport type RelationFields = {\n singular: Omit<ModelFieldDefition, \"isUnique\">[];\n list: Omit<ModelFieldDefition, \"isUnique\">[];\n};\n\n/**\n * Reads the Prisma schema files and extracts all model definitions,\n * identifying their relations (one-to-one and one-to-many).\n */\nexport const prismaModelRelationFields: Record<string, RelationFields> = {};\n\nexport function getAllPrismaFiles(dirPath: string, fileList: string[] = []) {\n const files = fs.readdirSync(dirPath);\n\n files?.forEach((file) => {\n const filePath = path.join(dirPath, file);\n const stat = fs.statSync(filePath);\n\n // Skip migrations folder\n if (stat.isDirectory() && file !== \"migrations\") {\n fileList = getAllPrismaFiles(filePath, fileList);\n } else if (stat.isFile() && file.endsWith(\".prisma\")) {\n fileList.push(filePath);\n }\n });\n\n return fileList;\n}\n\nconst modelRegex = /model\\s+(\\w+)\\s*{/g;\nexport const models: string[] = [];\nexport let prismaSchemasContent: string;\nexport const prismaModelsUniqueFields: Record<string, ModelFieldDefition[]> =\n [] as any;\n\nexport function initializePrismaModels() {\n const copiedContent = getPrismaSchemasContent();\n\n for (const model of models) {\n const modelName = pascalCase(model);\n\n const modelStart = copiedContent.indexOf(`model ${modelName} {`);\n const modelEnd = copiedContent.indexOf(\"}\", modelStart);\n const modelDefinition = copiedContent.slice(modelStart, modelEnd);\n\n const relations: RelationFields = {\n singular: [],\n list: [],\n };\n const lines = modelDefinition.split(\"\\n\");\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n\n if (\n !trimmedLine ||\n trimmedLine.startsWith(\"model\") ||\n trimmedLine.startsWith(\"//\") ||\n trimmedLine.startsWith(\"/*\")\n )\n continue;\n\n const [fieldName, type] = trimmedLine.split(/\\s+/);\n const isUnique = trimmedLine?.includes?.(\"@unique\");\n\n if (isUnique) {\n const existingFields = prismaModelsUniqueFields[model] || [];\n\n const alreadyExists = existingFields.some(\n (field) =>\n field.name === fieldName &&\n field.type === type &&\n field.isUnique === isUnique\n );\n\n if (!alreadyExists) {\n prismaModelsUniqueFields[model] = [\n ...existingFields,\n { name: fieldName, type, isUnique },\n ];\n }\n }\n\n const cleanType = type?.replace(\"[]\", \"\").replace(\"?\", \"\");\n\n if (\n trimmedLine?.includes?.(\"@relation\") ||\n trimmedLine.match(/\\s+\\w+(\\[\\])?(\\s+@|$)/) ||\n models?.includes?.(camelCase(cleanType || \"\"))\n ) {\n const enumStart = copiedContent.indexOf(`enum ${cleanType} {`);\n const typeStart = copiedContent.indexOf(`type ${cleanType} {`);\n\n if (\n !cleanType ||\n enumStart >= 0 ||\n typeStart >= 0 ||\n cleanType === \"String\" ||\n cleanType === \"Int\" ||\n cleanType === \"Float\" ||\n cleanType === \"Boolean\" ||\n cleanType === \"DateTime\" ||\n cleanType === \"Bytes\" ||\n cleanType === \"Decimal\" ||\n cleanType === \"BigInt\" ||\n cleanType === \"Json\"\n ) {\n continue;\n }\n\n if (!type?.includes?.(\"[]\")) {\n relations.singular.push({\n name: fieldName,\n type: cleanType,\n });\n } else {\n relations.list.push({\n name: fieldName,\n type: cleanType,\n });\n }\n }\n\n prismaModelRelationFields[modelName] = relations;\n }\n }\n}\n\ninitializePrismaModels();\n\n/**\n * Retrieves the relations for a given Prisma model.\n *\n * @param {string} modelName - The name of the model (e.g., \"User\").\n * @returns {RelationFields|undefined} The relation fields for the model, or `undefined` if no relations are found.\n */\nexport function getPrismaModelRelations(\n modelName: string\n): RelationFields | undefined {\n modelName = pascalCase(modelName);\n\n if (!(modelName in prismaModelRelationFields)) return;\n return prismaModelRelationFields[modelName];\n}\n\n/**\n * Retrieves all the model names from the Prisma schema.\n *\n * @returns {string[]} An array of model names (e.g., [\"User\", \"Post\"]).\n */\nfunction getModels(): string[] {\n return models;\n}\n\n/**\n * Returns all content of all .prisma files gathered together\n *\n * @returns {string}\n */\nexport function getPrismaSchemasContent(): string {\n if (prismaSchemasContent) return prismaSchemasContent;\n\n const prismaContent: string[] = [];\n\n const files = getAllPrismaFiles(\"./prisma\");\n\n for (const file of files) {\n const content = fs.readFileSync(file, \"utf-8\");\n if (!prismaContent?.includes?.(content)) prismaContent.push(content);\n }\n\n // Gather the content of all *.prisma files into single one\n const content = prismaContent\n .join(\"\\n\")\n .replace(modelRegex, (_, modelName) => {\n if (!models?.includes?.(modelName))\n models.push(camelCase(modelName.trim()));\n return `model ${modelName} {`;\n });\n\n return content;\n}\n\n/** Retuns a given model unique fields\n * @param {string} modelName - The name of model in PascalCase\n * @returns {string[]} An array of all unique fields,\n */\nfunction getModelUniqueFields(modelName: string): ModelFieldDefition[] {\n return prismaModelsUniqueFields[modelName];\n}\n\n/**\n * Helps in finding out whether a given dto/schema file exits under the user project according to the validation arkos configuration.\n *\n * @param action {ValidationFileMappingKey} - the action of the dto, e.g: create, findMany.\n * @param modelName {string} - the model to be checked\n * @param arkosConfig {ArkosConfig} - the arkos.js configuration\n * @returns boolean\n */\nexport async function localValidatorFileExists(\n action: ValidationFileMappingKey,\n modelName: string,\n arkosConfig: ArkosConfig\n) {\n if (arkosConfig?.swagger?.mode === \"prisma\") return false;\n const modelModules = await importPrismaModelModules(modelName, arkosConfig);\n\n return !!modelModules?.[\n arkosConfig.validation?.resolver === \"zod\" ? \"schemas\" : \"dtos\"\n ]?.[camelCase(action)];\n}\n\nexport { getModels, getModelUniqueFields };\n"]}
@@ -1,49 +1 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.checkDatabaseConnection = exports.prismaInstance = void 0;
7
- exports.loadPrismaModule = loadPrismaModule;
8
- exports.getPrismaInstance = getPrismaInstance;
9
- const fs_1 = __importDefault(require("fs"));
10
- const catch_async_1 = __importDefault(require("../../modules/error-handler/utils/catch-async"));
11
- const app_error_1 = __importDefault(require("../../modules/error-handler/utils/app-error"));
12
- const fs_helpers_1 = require("./fs.helpers");
13
- const global_helpers_1 = require("./global.helpers");
14
- exports.prismaInstance = null;
15
- async function loadPrismaModule() {
16
- if (!exports.prismaInstance) {
17
- try {
18
- let prismaPath = `${(0, fs_helpers_1.crd)()}/src/utils/prisma.${(0, fs_helpers_1.getUserFileExtension)()}`;
19
- if (!fs_1.default.existsSync(prismaPath)) {
20
- prismaPath = `${(0, fs_helpers_1.crd)()}/src/utils/prisma/index.${(0, fs_helpers_1.getUserFileExtension)()}`;
21
- }
22
- const prismaModule = await (0, global_helpers_1.importModule)(prismaPath);
23
- exports.prismaInstance = prismaModule.default || prismaModule.prisma;
24
- if (!exports.prismaInstance)
25
- throw new Error("Prisma not found");
26
- }
27
- catch (error) {
28
- if (error.message === "Prisma not found")
29
- throw new app_error_1.default(`Could not initialize Prisma module. Make sure your prisma instance is exported under src/utils/prisma.${(0, fs_helpers_1.getUserFileExtension)()} or src/utils/prisma/index.${(0, fs_helpers_1.getUserFileExtension)()}, read more about Arkos' Project Structure under https://www.arkosjs.com/docs/project-structure#root-structure`, 500, {}, "prisma_instance_not_found");
30
- throw error;
31
- }
32
- }
33
- return exports.prismaInstance;
34
- }
35
- function getPrismaInstance() {
36
- return exports.prismaInstance;
37
- }
38
- exports.checkDatabaseConnection = (0, catch_async_1.default)(async (req, res, next) => {
39
- const prisma = await loadPrismaModule();
40
- try {
41
- await prisma.$connect();
42
- next();
43
- }
44
- catch (error) {
45
- console.error("Database connection error", error.message);
46
- next(new app_error_1.default(error.message, 503));
47
- }
48
- });
49
- //# sourceMappingURL=prisma.helpers.js.map
1
+ "use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.checkDatabaseConnection=exports.prismaInstance=void 0,exports.loadPrismaModule=loadPrismaModule,exports.getPrismaInstance=getPrismaInstance;const fs_1=__importDefault(require("fs")),catch_async_1=__importDefault(require("../../modules/error-handler/utils/catch-async")),app_error_1=__importDefault(require("../../modules/error-handler/utils/app-error")),fs_helpers_1=require("./fs.helpers"),global_helpers_1=require("./global.helpers");exports.prismaInstance=null;async function loadPrismaModule(){if(!exports.prismaInstance)try{let e=`${(0,fs_helpers_1.crd)()}/src/utils/prisma.${(0,fs_helpers_1.getUserFileExtension)()}`;if(fs_1.default.existsSync(e)||(e=`${(0,fs_helpers_1.crd)()}/src/utils/prisma/index.${(0,fs_helpers_1.getUserFileExtension)()}`),!fs_1.default.existsSync(e))throw new Error(`Could not found exported prisma insteance at ${e}`);const r=await(0,global_helpers_1.importModule)(e,{fixExtension:!1});if(exports.prismaInstance=r.default||r.prisma,!exports.prismaInstance)throw new Error("Prisma not found")}catch(e){throw e.message==="Prisma not found"?new app_error_1.default(`Could not initialize Prisma module. Make sure your prisma instance is exported under src/utils/prisma.${(0,fs_helpers_1.getUserFileExtension)()} or src/utils/prisma/index.${(0,fs_helpers_1.getUserFileExtension)()}, read more about Arkos.js Project Structure under https://www.arkosjs.com/docs/project-structure#root-structure`,500,{},"PrismaInstanceNotFound"):e}return exports.prismaInstance}function getPrismaInstance(){return exports.prismaInstance}exports.checkDatabaseConnection=(0,catch_async_1.default)(async(e,r,s)=>{const a=await loadPrismaModule();try{await a.$connect(),s()}catch(t){console.error("Database connection error",t.message),s(new app_error_1.default(t.message,503))}});
@@ -1 +1 @@
1
- {"version":3,"file":"prisma.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/prisma.helpers.ts"],"names":[],"mappings":";;;;;;AASA,4CAyBC;AAED,8CAEC;AAtCD,4CAAoB;AAEpB,gGAAuE;AACvE,4FAAmE;AACnE,6CAAgE;AAChE,qDAAgD;AAErC,QAAA,cAAc,GAAQ,IAAI,CAAC;AAE/B,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC,sBAAc,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,UAAU,GAAG,GAAG,IAAA,gBAAG,GAAE,qBAAqB,IAAA,iCAAG,GAAE,EAAE,CAAC;YAEtD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/B,UAAU,GAAG,GAAG,IAAA,gBAAG,GAAE,2BAA2B,IAAA,iCAAG,GAAE,EAAE,CAAC;YAC1D,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,IAAA,6BAAY,EAAC,UAAU,CAAC,CAAC;YACpD,sBAAc,GAAG,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC;YAE7D,IAAI,CAAC,sBAAc;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,OAAO,KAAK,kBAAkB;gBACtC,MAAM,IAAI,mBAAQ,CAChB,yGAAyG,IAAA,iCAAG,GAAE,8BAA8B,IAAA,iCAAG,GAAE,gHAAgH,EACjQ,GAAG,EACH,EAAE,EACF,2BAA2B,CAC5B,CAAC;YACJ,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,sBAAc,CAAC;AACxB,CAAC;AAED,SAAgB,iBAAiB;IAC/B,OAAO,sBAAc,CAAC;AACxB,CAAC;AAEY,QAAA,uBAAuB,GAAG,IAAA,qBAAU,EAC/C,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IACxD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,IAAI,EAAE,CAAC;IACT,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,mBAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC;AACH,CAAC,CACF,CAAC","sourcesContent":["import fs from \"fs\";\nimport { Request, Response, NextFunction } from \"express\";\nimport catchAsync from \"../../modules/error-handler/utils/catch-async\";\nimport AppError from \"../../modules/error-handler/utils/app-error\";\nimport { crd, getUserFileExtension as ext } from \"./fs.helpers\";\nimport { importModule } from \"./global.helpers\";\n\nexport let prismaInstance: any = null;\n\nexport async function loadPrismaModule() {\n if (!prismaInstance) {\n try {\n let prismaPath = `${crd()}/src/utils/prisma.${ext()}`;\n\n if (!fs.existsSync(prismaPath)) {\n prismaPath = `${crd()}/src/utils/prisma/index.${ext()}`;\n }\n\n const prismaModule = await importModule(prismaPath);\n prismaInstance = prismaModule.default || prismaModule.prisma;\n\n if (!prismaInstance) throw new Error(\"Prisma not found\");\n } catch (error: any) {\n if (error.message === \"Prisma not found\")\n throw new AppError(\n `Could not initialize Prisma module. Make sure your prisma instance is exported under src/utils/prisma.${ext()} or src/utils/prisma/index.${ext()}, read more about Arkos' Project Structure under https://www.arkosjs.com/docs/project-structure#root-structure`,\n 500,\n {},\n \"prisma_instance_not_found\"\n );\n throw error;\n }\n }\n return prismaInstance;\n}\n\nexport function getPrismaInstance() {\n return prismaInstance;\n}\n\nexport const checkDatabaseConnection = catchAsync(\n async (req: Request, res: Response, next: NextFunction) => {\n const prisma = await loadPrismaModule();\n try {\n await prisma.$connect();\n next();\n } catch (error: any) {\n console.error(\"Database connection error\", error.message);\n next(new AppError(error.message, 503));\n }\n }\n);\n"]}
1
+ {"version":3,"file":"prisma.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/prisma.helpers.ts"],"names":[],"mappings":";;;;;;AASA,4CA+BC;AAED,8CAEC;AA5CD,4CAAoB;AAEpB,gGAAuE;AACvE,4FAAmE;AACnE,6CAAgE;AAChE,qDAAgD;AAErC,QAAA,cAAc,GAAQ,IAAI,CAAC;AAE/B,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC,sBAAc,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,UAAU,GAAG,GAAG,IAAA,gBAAG,GAAE,qBAAqB,IAAA,iCAAG,GAAE,EAAE,CAAC;YAEtD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC;gBAC5B,UAAU,GAAG,GAAG,IAAA,gBAAG,GAAE,2BAA2B,IAAA,iCAAG,GAAE,EAAE,CAAC;YAE1D,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC;gBAC5B,MAAM,IAAI,KAAK,CACb,gDAAgD,UAAU,EAAE,CAC7D,CAAC;YAEJ,MAAM,YAAY,GAAG,MAAM,IAAA,6BAAY,EAAC,UAAU,EAAE;gBAClD,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;YACH,sBAAc,GAAG,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC;YAE7D,IAAI,CAAC,sBAAc;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,OAAO,KAAK,kBAAkB;gBACtC,MAAM,IAAI,mBAAQ,CAChB,yGAAyG,IAAA,iCAAG,GAAE,8BAA8B,IAAA,iCAAG,GAAE,kHAAkH,EACnQ,GAAG,EACH,EAAE,EACF,wBAAwB,CACzB,CAAC;YACJ,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,sBAAc,CAAC;AACxB,CAAC;AAED,SAAgB,iBAAiB;IAC/B,OAAO,sBAAc,CAAC;AACxB,CAAC;AAEY,QAAA,uBAAuB,GAAG,IAAA,qBAAU,EAC/C,KAAK,EAAE,CAAU,EAAE,EAAY,EAAE,IAAkB,EAAE,EAAE;IACrD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,IAAI,EAAE,CAAC;IACT,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,mBAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC;AACH,CAAC,CACF,CAAC","sourcesContent":["import fs from \"fs\";\nimport { Request, Response, NextFunction } from \"express\";\nimport catchAsync from \"../../modules/error-handler/utils/catch-async\";\nimport AppError from \"../../modules/error-handler/utils/app-error\";\nimport { crd, getUserFileExtension as ext } from \"./fs.helpers\";\nimport { importModule } from \"./global.helpers\";\n\nexport let prismaInstance: any = null;\n\nexport async function loadPrismaModule() {\n if (!prismaInstance) {\n try {\n let prismaPath = `${crd()}/src/utils/prisma.${ext()}`;\n\n if (!fs.existsSync(prismaPath))\n prismaPath = `${crd()}/src/utils/prisma/index.${ext()}`;\n\n if (!fs.existsSync(prismaPath))\n throw new Error(\n `Could not found exported prisma insteance at ${prismaPath}`\n );\n\n const prismaModule = await importModule(prismaPath, {\n fixExtension: false,\n });\n prismaInstance = prismaModule.default || prismaModule.prisma;\n\n if (!prismaInstance) throw new Error(\"Prisma not found\");\n } catch (error: any) {\n if (error.message === \"Prisma not found\")\n throw new AppError(\n `Could not initialize Prisma module. Make sure your prisma instance is exported under src/utils/prisma.${ext()} or src/utils/prisma/index.${ext()}, read more about Arkos.js Project Structure under https://www.arkosjs.com/docs/project-structure#root-structure`,\n 500,\n {},\n \"PrismaInstanceNotFound\"\n );\n throw error;\n }\n }\n return prismaInstance;\n}\n\nexport function getPrismaInstance() {\n return prismaInstance;\n}\n\nexport const checkDatabaseConnection = catchAsync(\n async (_: Request, _1: Response, next: NextFunction) => {\n const prisma = await loadPrismaModule();\n try {\n await prisma.$connect();\n next();\n } catch (error: any) {\n console.error(\"Database connection error\", error.message);\n next(new AppError(error.message, 503));\n }\n }\n);\n"]}
@@ -1,45 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.queryParser = exports.parse = void 0;
4
- const parse = (target, options) => {
5
- switch (typeof target) {
6
- case "string":
7
- if (target === "") {
8
- return "";
9
- }
10
- else if (options.parseNull && target === "null") {
11
- return null;
12
- }
13
- else if (options.parseUndefined && target === "undefined") {
14
- return undefined;
15
- }
16
- else if (options.parseBoolean &&
17
- (target === "true" || target === "false")) {
18
- return target === "true";
19
- }
20
- else if (options.parseNumber && !isNaN(Number(target))) {
21
- return Number(target);
22
- }
23
- else {
24
- return target;
25
- }
26
- case "object":
27
- if (Array.isArray(target)) {
28
- return target.map((x) => (0, exports.parse)(x, options));
29
- }
30
- else {
31
- const obj = target;
32
- Object.keys(obj).map((key) => (obj[key] = (0, exports.parse)(target[key], options)));
33
- return obj;
34
- }
35
- default:
36
- return target;
37
- }
38
- };
39
- exports.parse = parse;
40
- const queryParser = (options) => (req, res, next) => {
41
- req.query = (0, exports.parse)(req.query, options);
42
- next();
43
- };
44
- exports.queryParser = queryParser;
45
- //# sourceMappingURL=query-parser.helpers.js.map
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.queryParser=exports.parse=void 0;const parse=(e,r)=>{switch(typeof e){case"string":return e===""?"":r.parseNull&&e==="null"?null:r.parseUndefined&&e==="undefined"?void 0:r.parseBoolean&&(e==="true"||e==="false")?e==="true":r.parseNumber&&!isNaN(Number(e))?Number(e):e;case"object":if(Array.isArray(e))return e.map(s=>(0,exports.parse)(s,r));{const s=e;return Object.keys(s).map(u=>s[u]=(0,exports.parse)(e[u],r)),s}default:return e}};exports.parse=parse;const queryParser=e=>(r,s,u)=>{r.query=(0,exports.parse)(r.query,e),u()};exports.queryParser=queryParser;
@@ -0,0 +1 @@
1
+ "use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.processMiddleware=exports.safeCatchAsync=void 0;const catch_async_1=__importDefault(require("../../modules/error-handler/utils/catch-async")),safeCatchAsync=e=>e?(0,catch_async_1.default)(e):void 0;exports.safeCatchAsync=safeCatchAsync;const processMiddleware=e=>e?Array.isArray(e)?e.filter(s=>!!s).map(s=>(0,exports.safeCatchAsync)(s)):[(0,exports.safeCatchAsync)(e)]:[];exports.processMiddleware=processMiddleware;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routers.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/routers.helpers.ts"],"names":[],"mappings":";;;;;;AAAA,gGAEuD;AAEhD,MAAM,cAAc,GAAG,CAAC,UAAe,EAAE,EAAE;IAChD,OAAO,UAAU,CAAC,CAAC,CAAC,IAAA,qBAAU,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC,CAAC;AAFW,QAAA,cAAc,kBAEzB;AAGK,MAAM,iBAAiB,GAAG,CAAC,UAAe,EAAE,EAAE;IACnD,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAE3B,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO,UAAU;aACd,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAA,sBAAc,EAAC,EAAE,CAAC,CAA2B,CAAC;IAC/D,CAAC;;QAAM,OAAO,CAAC,IAAA,sBAAc,EAAC,UAAU,CAAC,CAA2B,CAAC;AACvE,CAAC,CAAC;AARW,QAAA,iBAAiB,qBAQ5B","sourcesContent":["import catchAsync, {\n CatchAsyncReturnType,\n} from \"../../modules/error-handler/utils/catch-async\";\n\nexport const safeCatchAsync = (middleware: any) => {\n return middleware ? catchAsync(middleware) : undefined;\n};\n\n// Helper function to handle middleware arrays or single functions\nexport const processMiddleware = (middleware: any) => {\n if (!middleware) return [];\n\n if (Array.isArray(middleware)) {\n return middleware\n .filter((mw) => !!mw)\n .map((mw) => safeCatchAsync(mw)) as CatchAsyncReturnType[];\n } else return [safeCatchAsync(middleware)] as CatchAsyncReturnType[];\n};\n"]}