arkos 1.2.9-test → 1.2.10-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) 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/modules/auth/auth.service.js +0 -7
  6. package/dist/cjs/modules/auth/auth.service.js.map +1 -1
  7. package/dist/cjs/modules/base/base.controller.js +11 -12
  8. package/dist/cjs/modules/base/base.controller.js.map +1 -1
  9. package/dist/cjs/modules/base/base.router.js.map +1 -1
  10. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +41 -27
  11. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
  12. package/dist/cjs/modules/error-handler/error-handler.controller.js.map +1 -1
  13. package/dist/cjs/modules/swagger/swagger.router.js +14 -56
  14. package/dist/cjs/modules/swagger/swagger.router.js.map +1 -1
  15. package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +250 -0
  16. package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +1 -0
  17. package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js +66 -0
  18. package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +1 -0
  19. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +41 -0
  20. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -0
  21. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +22 -0
  22. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +1 -0
  23. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +30 -0
  24. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js.map +1 -0
  25. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +442 -0
  26. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js.map +1 -0
  27. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +165 -0
  28. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js.map +1 -0
  29. package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js +93 -0
  30. package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -0
  31. package/dist/cjs/server.js +2 -2
  32. package/dist/cjs/server.js.map +1 -1
  33. package/dist/cjs/types/arkos-config.js.map +1 -1
  34. package/dist/cjs/utils/cli/build.js +2 -19
  35. package/dist/cjs/utils/cli/build.js.map +1 -1
  36. package/dist/cjs/utils/cli/dev.js +8 -33
  37. package/dist/cjs/utils/cli/dev.js.map +1 -1
  38. package/dist/cjs/utils/cli/generate.js +6 -6
  39. package/dist/cjs/utils/cli/generate.js.map +1 -1
  40. package/dist/cjs/utils/cli/utils/cli.helpers.js +1 -3
  41. package/dist/cjs/utils/cli/utils/cli.helpers.js.map +1 -1
  42. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js +33 -66
  43. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +1 -1
  44. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +16 -10
  45. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +1 -1
  46. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js +5 -0
  47. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js.map +1 -1
  48. package/dist/cjs/utils/helpers/fs.helpers.js +12 -5
  49. package/dist/cjs/utils/helpers/fs.helpers.js.map +1 -1
  50. package/dist/cjs/utils/helpers/global.helpers.js +69 -2
  51. package/dist/cjs/utils/helpers/global.helpers.js.map +1 -1
  52. package/dist/cjs/utils/helpers/models.helpers.js +20 -44
  53. package/dist/cjs/utils/helpers/models.helpers.js.map +1 -1
  54. package/dist/cjs/utils/helpers/prisma.helpers.js +7 -4
  55. package/dist/cjs/utils/helpers/prisma.helpers.js.map +1 -1
  56. package/dist/cjs/utils/sheu.js +143 -0
  57. package/dist/cjs/utils/sheu.js.map +1 -0
  58. package/dist/esm/app.js +1 -0
  59. package/dist/esm/app.js.map +1 -0
  60. package/dist/{es2020 → esm}/exports/auth/index.js +1 -1
  61. package/dist/{es2020 → esm}/exports/controllers/index.js +2 -2
  62. package/dist/{es2020 → esm}/exports/error-handler/index.js +2 -2
  63. package/dist/{es2020 → esm}/exports/index.js +2 -2
  64. package/dist/{es2020 → esm}/exports/middlewares/index.js +1 -1
  65. package/dist/esm/exports/prisma/index.js +3 -0
  66. package/dist/{es2020 → esm}/exports/services/index.js +4 -4
  67. package/dist/esm/exports/utils/index.js +4 -0
  68. package/dist/esm/exports/validation/index.js +4 -0
  69. package/dist/{es2020 → esm}/modules/auth/auth.controller.js +7 -7
  70. package/dist/{es2020 → esm}/modules/auth/auth.router.js +6 -6
  71. package/dist/{es2020 → esm}/modules/auth/auth.service.js +6 -13
  72. package/dist/esm/modules/auth/auth.service.js.map +1 -0
  73. package/dist/{es2020 → esm}/modules/auth/utils/helpers/auth.controller.helpers.js +2 -2
  74. package/dist/{es2020 → esm}/modules/base/base.controller.js +18 -19
  75. package/dist/esm/modules/base/base.controller.js.map +1 -0
  76. package/dist/{es2020 → esm}/modules/base/base.middlewares.js +6 -6
  77. package/dist/{es2020 → esm}/modules/base/base.router.js +4 -4
  78. package/dist/esm/modules/base/base.router.js.map +1 -0
  79. package/dist/{es2020 → esm}/modules/base/base.service.js +6 -6
  80. package/dist/{es2020 → esm}/modules/base/utils/helpers/base.controller.helpers.js +1 -1
  81. package/dist/{es2020 → esm}/modules/base/utils/helpers/base.middlewares.helpers.js +1 -1
  82. package/dist/{es2020 → esm}/modules/base/utils/helpers/base.router.helpers.js +45 -33
  83. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js.map +1 -0
  84. package/dist/{es2020 → esm}/modules/base/utils/helpers/base.service.helpers.js +1 -1
  85. package/dist/{es2020 → esm}/modules/email/email.service.js +2 -2
  86. package/dist/{es2020 → esm}/modules/error-handler/error-handler.controller.js +3 -3
  87. package/dist/{es2020 → esm}/modules/error-handler/error-handler.controller.js.map +1 -1
  88. package/dist/{es2020 → esm}/modules/error-handler/utils/error-handler.helpers.js +1 -1
  89. package/dist/{es2020 → esm}/modules/file-upload/file-upload.controller.js +7 -7
  90. package/dist/{es2020 → esm}/modules/file-upload/file-upload.router.js +5 -5
  91. package/dist/{es2020 → esm}/modules/file-upload/file-upload.service.js +5 -5
  92. package/dist/{es2020 → esm}/modules/file-upload/utils/helpers/file-upload.helpers.js +2 -2
  93. package/dist/{es2020 → esm}/modules/swagger/swagger.router.js +15 -57
  94. package/dist/esm/modules/swagger/swagger.router.js.map +1 -0
  95. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +247 -0
  96. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +1 -0
  97. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js +63 -0
  98. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +1 -0
  99. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +38 -0
  100. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -0
  101. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +19 -0
  102. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +1 -0
  103. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +24 -0
  104. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js.map +1 -0
  105. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +436 -0
  106. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js.map +1 -0
  107. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +159 -0
  108. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js.map +1 -0
  109. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js +83 -0
  110. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -0
  111. package/dist/esm/server.js +3 -0
  112. package/dist/esm/server.js.map +1 -0
  113. package/dist/esm/types/arkos-config.js.map +1 -0
  114. package/dist/{es2020 → esm}/utils/cli/build.js +4 -21
  115. package/dist/esm/utils/cli/build.js.map +1 -0
  116. package/dist/{es2020 → esm}/utils/cli/dev.js +12 -37
  117. package/dist/esm/utils/cli/dev.js.map +1 -0
  118. package/dist/{es2020 → esm}/utils/cli/generate.js +10 -10
  119. package/dist/{es2020 → esm}/utils/cli/generate.js.map +1 -1
  120. package/dist/{es2020 → esm}/utils/cli/index.js +5 -5
  121. package/dist/{es2020 → esm}/utils/cli/start.js +4 -4
  122. package/dist/esm/utils/cli/utils/cli.helpers.js +16 -0
  123. package/dist/esm/utils/cli/utils/cli.helpers.js.map +1 -0
  124. package/dist/{es2020 → esm}/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +1 -1
  125. package/dist/{es2020 → esm}/utils/cli/utils/template-generator/templates/generate-middlewares.js +34 -67
  126. package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +1 -0
  127. package/dist/{es2020 → esm}/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +18 -12
  128. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +1 -0
  129. package/dist/{es2020 → esm}/utils/cli/utils/template-generator/templates/generate-router-template.js +6 -1
  130. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js.map +1 -0
  131. package/dist/{es2020 → esm}/utils/cli/utils/template-generator/templates/generate-service-template.js +2 -2
  132. package/dist/{es2020 → esm}/utils/cli/utils/template-generators.js +6 -6
  133. package/dist/{es2020 → esm}/utils/features/api.features.js +4 -4
  134. package/dist/{es2020 → esm}/utils/features/change-case.features.js +1 -1
  135. package/dist/{es2020 → esm}/utils/helpers/fs.helpers.js +12 -5
  136. package/dist/esm/utils/helpers/fs.helpers.js.map +1 -0
  137. package/dist/esm/utils/helpers/global.helpers.js +65 -0
  138. package/dist/esm/utils/helpers/global.helpers.js.map +1 -0
  139. package/dist/{es2020 → esm}/utils/helpers/models.helpers.js +21 -12
  140. package/dist/esm/utils/helpers/models.helpers.js.map +1 -0
  141. package/dist/{es2020 → esm}/utils/helpers/prisma.helpers.js +11 -8
  142. package/dist/esm/utils/helpers/prisma.helpers.js.map +1 -0
  143. package/dist/esm/utils/sheu.js +141 -0
  144. package/dist/esm/utils/sheu.js.map +1 -0
  145. package/dist/{es2020 → esm}/utils/validate-dto.js +1 -1
  146. package/dist/{es2020 → esm}/utils/validate-schema.js +1 -1
  147. package/dist/types/modules/auth/auth.controller.d.ts +7 -7
  148. package/dist/types/modules/auth/auth.service.d.ts +1 -1
  149. package/dist/types/modules/base/base.controller.d.ts +9 -9
  150. package/dist/types/modules/base/utils/helpers/base.router.helpers.d.ts +4 -1
  151. package/dist/types/modules/error-handler/utils/catch-async.d.ts +1 -1
  152. package/dist/types/modules/file-upload/file-upload.controller.d.ts +4 -4
  153. package/dist/types/modules/swagger/swagger.router.d.ts +1 -1
  154. package/dist/types/modules/swagger/utils/helpers/get-authentication-json-schema-paths.d.ts +2 -0
  155. package/dist/types/modules/swagger/utils/helpers/get-system-json-schema-paths.d.ts +2 -0
  156. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.d.ts +1 -0
  157. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.d.ts +1 -0
  158. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.d.ts +1 -0
  159. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.d.ts +2 -0
  160. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.d.ts +2 -0
  161. package/dist/types/modules/swagger/utils/helpers/swagger.router.helpers.d.ts +7 -0
  162. package/dist/types/types/arkos-config.d.ts +7 -4
  163. package/dist/types/utils/cli/utils/cli.helpers.d.ts +1 -1
  164. package/dist/types/utils/helpers/global.helpers.d.ts +6 -1
  165. package/dist/types/utils/helpers/models.helpers.d.ts +10 -1
  166. package/dist/types/utils/helpers/prisma.helpers.d.ts +1 -1
  167. package/dist/types/utils/sheu.d.ts +25 -0
  168. package/package.json +23 -29
  169. package/dist/es2020/app.js +0 -1
  170. package/dist/es2020/app.js.map +0 -1
  171. package/dist/es2020/exports/prisma/index.js +0 -3
  172. package/dist/es2020/exports/utils/index.js +0 -4
  173. package/dist/es2020/exports/validation/index.js +0 -4
  174. package/dist/es2020/modules/auth/auth.service.js.map +0 -1
  175. package/dist/es2020/modules/base/base.controller.js.map +0 -1
  176. package/dist/es2020/modules/base/base.router.js.map +0 -1
  177. package/dist/es2020/modules/base/utils/helpers/base.router.helpers.js.map +0 -1
  178. package/dist/es2020/modules/swagger/swagger.router.js.map +0 -1
  179. package/dist/es2020/server.js +0 -3
  180. package/dist/es2020/server.js.map +0 -1
  181. package/dist/es2020/types/arkos-config.js.map +0 -1
  182. package/dist/es2020/utils/cli/build.js.map +0 -1
  183. package/dist/es2020/utils/cli/dev.js.map +0 -1
  184. package/dist/es2020/utils/cli/utils/cli.helpers.js +0 -18
  185. package/dist/es2020/utils/cli/utils/cli.helpers.js.map +0 -1
  186. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +0 -1
  187. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +0 -1
  188. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-router-template.js.map +0 -1
  189. package/dist/es2020/utils/helpers/fs.helpers.js.map +0 -1
  190. package/dist/es2020/utils/helpers/global.helpers.js +0 -4
  191. package/dist/es2020/utils/helpers/global.helpers.js.map +0 -1
  192. package/dist/es2020/utils/helpers/models.helpers.js.map +0 -1
  193. package/dist/es2020/utils/helpers/prisma.helpers.js.map +0 -1
  194. /package/dist/{es2020 → esm}/exports/auth/index.js.map +0 -0
  195. /package/dist/{es2020 → esm}/exports/controllers/index.js.map +0 -0
  196. /package/dist/{es2020 → esm}/exports/error-handler/index.js.map +0 -0
  197. /package/dist/{es2020 → esm}/exports/index.js.map +0 -0
  198. /package/dist/{es2020 → esm}/exports/middlewares/index.js.map +0 -0
  199. /package/dist/{es2020 → esm}/exports/prisma/index.js.map +0 -0
  200. /package/dist/{es2020 → esm}/exports/services/index.js.map +0 -0
  201. /package/dist/{es2020 → esm}/exports/utils/index.js.map +0 -0
  202. /package/dist/{es2020 → esm}/exports/validation/index.js.map +0 -0
  203. /package/dist/{es2020 → esm}/modules/auth/auth.controller.js.map +0 -0
  204. /package/dist/{es2020 → esm}/modules/auth/auth.router.js.map +0 -0
  205. /package/dist/{es2020 → esm}/modules/auth/utils/helpers/auth.controller.helpers.js.map +0 -0
  206. /package/dist/{es2020 → esm}/modules/base/base.middlewares.js.map +0 -0
  207. /package/dist/{es2020 → esm}/modules/base/base.service.js.map +0 -0
  208. /package/dist/{es2020 → esm}/modules/base/utils/helpers/base.controller.helpers.js.map +0 -0
  209. /package/dist/{es2020 → esm}/modules/base/utils/helpers/base.middlewares.helpers.js.map +0 -0
  210. /package/dist/{es2020 → esm}/modules/base/utils/helpers/base.service.helpers.js.map +0 -0
  211. /package/dist/{es2020 → esm}/modules/email/email.service.js.map +0 -0
  212. /package/dist/{es2020 → esm}/modules/error-handler/utils/app-error.js +0 -0
  213. /package/dist/{es2020 → esm}/modules/error-handler/utils/app-error.js.map +0 -0
  214. /package/dist/{es2020 → esm}/modules/error-handler/utils/catch-async.js +0 -0
  215. /package/dist/{es2020 → esm}/modules/error-handler/utils/catch-async.js.map +0 -0
  216. /package/dist/{es2020 → esm}/modules/error-handler/utils/error-handler.helpers.js.map +0 -0
  217. /package/dist/{es2020 → esm}/modules/file-upload/file-upload.controller.js.map +0 -0
  218. /package/dist/{es2020 → esm}/modules/file-upload/file-upload.router.js.map +0 -0
  219. /package/dist/{es2020 → esm}/modules/file-upload/file-upload.service.js.map +0 -0
  220. /package/dist/{es2020 → esm}/modules/file-upload/utils/helpers/file-upload.helpers.js.map +0 -0
  221. /package/dist/{es2020 → esm}/paths.js +0 -0
  222. /package/dist/{es2020 → esm}/paths.js.map +0 -0
  223. /package/dist/{es2020 → esm}/types/arkos-config.js +0 -0
  224. /package/dist/{es2020 → esm}/types/auth.js +0 -0
  225. /package/dist/{es2020 → esm}/types/auth.js.map +0 -0
  226. /package/dist/{es2020 → esm}/types/index.js +0 -0
  227. /package/dist/{es2020 → esm}/types/index.js.map +0 -0
  228. /package/dist/{es2020 → esm}/types/router-config.js +0 -0
  229. /package/dist/{es2020 → esm}/types/router-config.js.map +0 -0
  230. /package/dist/{es2020 → esm}/utils/arkos-env.js +0 -0
  231. /package/dist/{es2020 → esm}/utils/arkos-env.js.map +0 -0
  232. /package/dist/{es2020 → esm}/utils/cli/index.js.map +0 -0
  233. /package/dist/{es2020 → esm}/utils/cli/start.js.map +0 -0
  234. /package/dist/{es2020 → esm}/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js.map +0 -0
  235. /package/dist/{es2020 → esm}/utils/cli/utils/template-generator/templates/generate-controller-template.js +0 -0
  236. /package/dist/{es2020 → esm}/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +0 -0
  237. /package/dist/{es2020 → esm}/utils/cli/utils/template-generator/templates/generate-service-template.js.map +0 -0
  238. /package/dist/{es2020 → esm}/utils/cli/utils/template-generators.js.map +0 -0
  239. /package/dist/{es2020 → esm}/utils/dotenv.helpers.js +0 -0
  240. /package/dist/{es2020 → esm}/utils/dotenv.helpers.js.map +0 -0
  241. /package/dist/{es2020 → esm}/utils/features/api.features.js.map +0 -0
  242. /package/dist/{es2020 → esm}/utils/features/change-case.features.js.map +0 -0
  243. /package/dist/{es2020 → esm}/utils/helpers/api.features.helpers.js +0 -0
  244. /package/dist/{es2020 → esm}/utils/helpers/api.features.helpers.js.map +0 -0
  245. /package/dist/{es2020 → esm}/utils/helpers/change-case.helpers.js +0 -0
  246. /package/dist/{es2020 → esm}/utils/helpers/change-case.helpers.js.map +0 -0
  247. /package/dist/{es2020 → esm}/utils/helpers/deepmerge.helper.js +0 -0
  248. /package/dist/{es2020 → esm}/utils/helpers/deepmerge.helper.js.map +0 -0
  249. /package/dist/{es2020 → esm}/utils/helpers/query-parser.helpers.js +0 -0
  250. /package/dist/{es2020 → esm}/utils/helpers/query-parser.helpers.js.map +0 -0
  251. /package/dist/{es2020 → esm}/utils/helpers/text.helpers.js +0 -0
  252. /package/dist/{es2020 → esm}/utils/helpers/text.helpers.js.map +0 -0
  253. /package/dist/{es2020 → esm}/utils/validate-dto.js.map +0 -0
  254. /package/dist/{es2020 → esm}/utils/validate-schema.js.map +0 -0
@@ -4,7 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.setupRouters = setupRouters;
7
- const pluralize_1 = require("pluralize");
7
+ exports.isEndpointDisabled = isEndpointDisabled;
8
+ exports.isParentEndpointAllowed = isParentEndpointAllowed;
9
+ const pluralize_1 = __importDefault(require("pluralize"));
8
10
  const utils_1 = require("../../../../exports/utils");
9
11
  const models_helpers_1 = require("../../../../utils/helpers/models.helpers");
10
12
  const auth_service_1 = __importDefault(require("../../../auth/auth.service"));
@@ -16,11 +18,9 @@ function setupRouters(models, router, arkosConfigs) {
16
18
  const modelNameInKebab = (0, utils_1.kebabCase)(model);
17
19
  const modelModules = await (0, models_helpers_1.importPrismaModelModules)(modelNameInKebab);
18
20
  const { middlewares, authConfigs, prismaQueryOptions, router: customRouterModule, dtos, schemas, } = modelModules;
19
- const routeName = (0, pluralize_1.plural)(modelNameInKebab);
21
+ const routeName = pluralize_1.default.plural(modelNameInKebab);
20
22
  const controller = new base_controller_1.BaseController(model);
21
- const routerConfig = customRouterModule?.config;
22
- const disableConfig = routerConfig?.disable || {};
23
- const isCompletelyDisabled = disableConfig === true;
23
+ const routerConfig = customRouterModule?.config || {};
24
24
  const customRouter = customRouterModule || {};
25
25
  const hasCustomImplementation = (path, method) => {
26
26
  return customRouter.stack?.some((layer) => (layer.path === `/api/${path}` ||
@@ -29,11 +29,6 @@ function setupRouters(models, router, arkosConfigs) {
29
29
  layer.path === `/api/${path}/`) &&
30
30
  layer.method.toLowerCase() === method.toLowerCase());
31
31
  };
32
- const isEndpointDisabled = (endpoint) => {
33
- if (isCompletelyDisabled)
34
- return true;
35
- return typeof disableConfig === "object" && !!disableConfig[endpoint];
36
- };
37
32
  const getValidationSchemaOrDto = (key) => {
38
33
  const validationConfigs = arkosConfigs?.validation;
39
34
  if (validationConfigs?.resolver === "class-validator") {
@@ -44,14 +39,14 @@ function setupRouters(models, router, arkosConfigs) {
44
39
  }
45
40
  return undefined;
46
41
  };
47
- if (customRouterModule?.default && !customRouterModule?.config?.disable)
42
+ if (customRouterModule?.default && !routerConfig?.disable)
48
43
  router.use(`/${routeName}`, customRouterModule.default);
49
44
  function safeCatchAsync(middleware) {
50
45
  return middleware ? (0, catch_async_1.default)(middleware) : undefined;
51
46
  }
52
- if (!isEndpointDisabled("createOne") &&
47
+ if (!isEndpointDisabled(routerConfig, "createOne") &&
53
48
  !hasCustomImplementation(`/${routeName}`, "post")) {
54
- router.post(`/${routeName}`, auth_service_1.default.handleAuthenticationControl("Create", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("Create", (0, utils_1.kebabCase)((0, pluralize_1.singular)(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("create")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "createOne"), ...[
49
+ router.post(`/${routeName}`, auth_service_1.default.handleAuthenticationControl("Create", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("Create", (0, utils_1.kebabCase)(pluralize_1.default.singular(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("create")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "createOne"), ...[
55
50
  safeCatchAsync(middlewares?.beforeCreateOne) || controller.createOne,
56
51
  safeCatchAsync(middlewares?.beforeCreateOne)
57
52
  ? controller.createOne
@@ -62,9 +57,9 @@ function setupRouters(models, router, arkosConfigs) {
62
57
  : base_middlewares_1.sendResponse,
63
58
  ].filter((m) => !!m), base_middlewares_1.sendResponse);
64
59
  }
65
- if (!isEndpointDisabled("findMany") &&
60
+ if (!isEndpointDisabled(routerConfig, "findMany") &&
66
61
  !hasCustomImplementation(`/${routeName}`, "get")) {
67
- router.get(`/${routeName}`, auth_service_1.default.handleAuthenticationControl("View", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("View", (0, utils_1.kebabCase)((0, pluralize_1.singular)(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "findMany"), ...[
62
+ router.get(`/${routeName}`, auth_service_1.default.handleAuthenticationControl("View", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("View", (0, utils_1.kebabCase)(pluralize_1.default.singular(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "findMany"), ...[
68
63
  safeCatchAsync(middlewares?.beforeFindMany) || controller.findMany,
69
64
  safeCatchAsync(middlewares?.beforeFindMany)
70
65
  ? controller.findMany
@@ -76,9 +71,9 @@ function setupRouters(models, router, arkosConfigs) {
76
71
  base_middlewares_1.sendResponse,
77
72
  ].filter((m) => !!m));
78
73
  }
79
- if (!isEndpointDisabled("createMany") &&
74
+ if (!isEndpointDisabled(routerConfig, "createMany") &&
80
75
  !hasCustomImplementation(`/${routeName}/many`, "post")) {
81
- router.post(`/${routeName}/many`, auth_service_1.default.handleAuthenticationControl("Create", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("Create", (0, utils_1.kebabCase)((0, pluralize_1.singular)(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("createMany")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "createMany"), ...[
76
+ router.post(`/${routeName}/many`, auth_service_1.default.handleAuthenticationControl("Create", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("Create", (0, utils_1.kebabCase)(pluralize_1.default.singular(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("createMany")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "createMany"), ...[
82
77
  safeCatchAsync(middlewares?.beforeCreateMany) ||
83
78
  controller.createMany,
84
79
  safeCatchAsync(middlewares?.beforeCreateMany)
@@ -91,9 +86,9 @@ function setupRouters(models, router, arkosConfigs) {
91
86
  base_middlewares_1.sendResponse,
92
87
  ].filter((m) => !!m));
93
88
  }
94
- if (!isEndpointDisabled("updateMany") &&
89
+ if (!isEndpointDisabled(routerConfig, "updateMany") &&
95
90
  !hasCustomImplementation(`/${routeName}/many`, "patch")) {
96
- router.patch(`/${routeName}/many`, auth_service_1.default.handleAuthenticationControl("Update", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("Update", (0, utils_1.kebabCase)((0, pluralize_1.singular)(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("updateMany")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "updateMany"), ...[
91
+ router.patch(`/${routeName}/many`, auth_service_1.default.handleAuthenticationControl("Update", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("Update", (0, utils_1.kebabCase)(pluralize_1.default.singular(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("updateMany")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "updateMany"), ...[
97
92
  safeCatchAsync(middlewares?.beforeUpdateMany) ||
98
93
  controller.updateMany,
99
94
  safeCatchAsync(middlewares?.beforeUpdateMany)
@@ -106,9 +101,9 @@ function setupRouters(models, router, arkosConfigs) {
106
101
  base_middlewares_1.sendResponse,
107
102
  ].filter((m) => !!m));
108
103
  }
109
- if (!isEndpointDisabled("deleteMany") &&
104
+ if (!isEndpointDisabled(routerConfig, "deleteMany") &&
110
105
  !hasCustomImplementation(`/${routeName}/many`, "delete")) {
111
- router.delete(`/${routeName}/many`, auth_service_1.default.handleAuthenticationControl("Delete", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("Delete", (0, utils_1.kebabCase)((0, pluralize_1.singular)(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("deleteMany")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "deleteMany"), ...[
106
+ router.delete(`/${routeName}/many`, auth_service_1.default.handleAuthenticationControl("Delete", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("Delete", (0, utils_1.kebabCase)(pluralize_1.default.singular(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("deleteMany")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "deleteMany"), ...[
112
107
  safeCatchAsync(middlewares?.beforeDeleteMany) ||
113
108
  controller.deleteMany,
114
109
  safeCatchAsync(middlewares?.beforeDeleteMany)
@@ -121,9 +116,9 @@ function setupRouters(models, router, arkosConfigs) {
121
116
  base_middlewares_1.sendResponse,
122
117
  ].filter((middleware) => !!middleware));
123
118
  }
124
- if (!isEndpointDisabled("findOne") &&
119
+ if (!isEndpointDisabled(routerConfig, "findOne") &&
125
120
  !hasCustomImplementation(`/${routeName}/:id`, "get")) {
126
- router.get(`/${routeName}/:id`, auth_service_1.default.handleAuthenticationControl("View", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("View", (0, utils_1.kebabCase)((0, pluralize_1.singular)(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("findOne")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "findOne"), ...[
121
+ router.get(`/${routeName}/:id`, auth_service_1.default.handleAuthenticationControl("View", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("View", (0, utils_1.kebabCase)(pluralize_1.default.singular(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("findOne")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "findOne"), ...[
127
122
  safeCatchAsync(middlewares?.beforeFindOne) || controller.findOne,
128
123
  safeCatchAsync(middlewares?.beforeFindOne)
129
124
  ? controller.findOne
@@ -135,9 +130,9 @@ function setupRouters(models, router, arkosConfigs) {
135
130
  base_middlewares_1.sendResponse,
136
131
  ].filter((m) => !!m));
137
132
  }
138
- if (!isEndpointDisabled("updateOne") &&
133
+ if (!isEndpointDisabled(routerConfig, "updateOne") &&
139
134
  !hasCustomImplementation(`/${routeName}/:id`, "patch")) {
140
- router.patch(`/${routeName}/:id`, auth_service_1.default.handleAuthenticationControl("Update", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("Update", (0, utils_1.kebabCase)((0, pluralize_1.singular)(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("update")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "updateOne"), ...[
135
+ router.patch(`/${routeName}/:id`, auth_service_1.default.handleAuthenticationControl("Update", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("Update", (0, utils_1.kebabCase)(pluralize_1.default.singular(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("update")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "updateOne"), ...[
141
136
  safeCatchAsync(middlewares?.beforeUpdateOne) || controller.updateOne,
142
137
  safeCatchAsync(middlewares?.beforeUpdateOne)
143
138
  ? controller.updateOne
@@ -148,9 +143,9 @@ function setupRouters(models, router, arkosConfigs) {
148
143
  : base_middlewares_1.sendResponse,
149
144
  ].filter((m) => !!m), base_middlewares_1.sendResponse);
150
145
  }
151
- if (!isEndpointDisabled("deleteOne") &&
146
+ if (!isEndpointDisabled(routerConfig, "deleteOne") &&
152
147
  !hasCustomImplementation(`/${routeName}/:id`, "delete")) {
153
- router.delete(`/${routeName}/:id`, auth_service_1.default.handleAuthenticationControl("Delete", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("Delete", (0, utils_1.kebabCase)((0, pluralize_1.singular)(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("delete")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "deleteOne"), ...[
148
+ router.delete(`/${routeName}/:id`, auth_service_1.default.handleAuthenticationControl("Delete", authConfigs?.authenticationControl), auth_service_1.default.handleAccessControl("Delete", (0, utils_1.kebabCase)(pluralize_1.default.singular(modelNameInKebab)), authConfigs?.accessControl || {}), (0, base_middlewares_1.handleRequestBodyValidationAndTransformation)(getValidationSchemaOrDto("delete")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "deleteOne"), ...[
154
149
  safeCatchAsync(middlewares?.beforeDeleteOne) || controller.deleteOne,
155
150
  safeCatchAsync(middlewares?.beforeDeleteOne)
156
151
  ? controller.deleteOne
@@ -164,4 +159,23 @@ function setupRouters(models, router, arkosConfigs) {
164
159
  }
165
160
  });
166
161
  }
162
+ function isEndpointDisabled(routerConfig, endpoint) {
163
+ if (!routerConfig?.disable)
164
+ return false;
165
+ if (routerConfig.disable === true)
166
+ return true;
167
+ if (typeof routerConfig.disable === "object")
168
+ return routerConfig.disable[endpoint] === true;
169
+ return false;
170
+ }
171
+ function isParentEndpointAllowed(routerConfig, endpoint) {
172
+ if (!routerConfig?.parent)
173
+ return false;
174
+ const parentEndpoints = routerConfig.parent.endpoints;
175
+ if (parentEndpoints === "*")
176
+ return true;
177
+ if (Array.isArray(parentEndpoints))
178
+ return parentEndpoints.includes(endpoint);
179
+ return true;
180
+ }
167
181
  //# sourceMappingURL=base.router.helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.router.helpers.js","sourceRoot":"","sources":["../../../../../../src/modules/base/utils/helpers/base.router.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { Router } from \"express\";\nimport { singular, plural } from \"pluralize\";\nimport { ArkosConfig, RouterConfig } from \"../../../../exports\";\nimport { kebabCase } from \"../../../../exports/utils\";\nimport { PrismaQueryOptions } from \"../../../../types\";\nimport { RouterEndpoint } from \"../../../../types/router-config\";\nimport { importPrismaModelModules } from \"../../../../utils/helpers/models.helpers\";\nimport authService from \"../../../auth/auth.service\";\nimport { BaseController } from \"../../base.controller\";\nimport {\n addPrismaQueryOptionsToRequest,\n handleRequestBodyValidationAndTransformation,\n sendResponse,\n} from \"../../base.middlewares\";\nimport catchAsync from \"../../../error-handler/utils/catch-async\";\n\nexport function setupRouters(\n models: string[],\n router: Router,\n arkosConfigs: ArkosConfig\n) {\n return models.map(async (model) => {\n const modelNameInKebab = kebabCase(model);\n const modelModules = await importPrismaModelModules(modelNameInKebab);\n const {\n middlewares,\n authConfigs,\n prismaQueryOptions,\n router: customRouterModule,\n dtos,\n schemas,\n } = modelModules;\n\n const routeName = plural(modelNameInKebab);\n const controller = new BaseController(model);\n\n // Check for router customization/disabling\n const routerConfig: RouterConfig = customRouterModule?.config;\n const disableConfig = routerConfig?.disable || {};\n const isCompletelyDisabled = disableConfig === true;\n\n // Check if custom implementation exists\n const customRouter = (customRouterModule as Router) || {};\n const hasCustomImplementation = (path: string, method: string) => {\n return customRouter.stack?.some(\n (layer) =>\n (layer.path === `/api/${path}` ||\n layer.path === `api/${path}` ||\n layer.path === `api/${path}/` ||\n layer.path === `/api/${path}/`) &&\n layer.method.toLowerCase() === method.toLowerCase()\n );\n };\n\n // Helper to determine if an endpoint should be disabled\n const isEndpointDisabled = (endpoint: RouterEndpoint): boolean => {\n if (isCompletelyDisabled) return true;\n return typeof disableConfig === \"object\" && !!disableConfig[endpoint];\n };\n\n // Helper to get the correct schema or DTO based on Arkos Config\n const getValidationSchemaOrDto = (\n key: keyof typeof dtos | keyof typeof schemas\n ) => {\n const validationConfigs = arkosConfigs?.validation;\n if (validationConfigs?.resolver === \"class-validator\") {\n return dtos?.[key];\n } else if (validationConfigs?.resolver === \"zod\") {\n return schemas?.[key];\n }\n return undefined;\n };\n\n // If the custom router has its own routes, add them\n if (customRouterModule?.default && !customRouterModule?.config?.disable)\n router.use(`/${routeName}`, customRouterModule.default);\n\n function safeCatchAsync(middleware: any) {\n return middleware ? catchAsync(middleware) : undefined;\n }\n\n // POST /{routeName} - Create One\n if (\n !isEndpointDisabled(\"createOne\") &&\n !hasCustomImplementation(`/${routeName}`, \"post\")\n ) {\n router.post(\n `/${routeName}`,\n authService.handleAuthenticationControl(\n \"Create\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Create\",\n kebabCase(singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"create\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"createOne\"\n ),\n ...[\n safeCatchAsync(middlewares?.beforeCreateOne) || controller.createOne,\n safeCatchAsync(middlewares?.beforeCreateOne)\n ? controller.createOne\n : safeCatchAsync(middlewares?.afterCreateOne) || sendResponse,\n safeCatchAsync(middlewares?.beforeCreateOne) &&\n safeCatchAsync(middlewares?.afterCreateOne)\n ? safeCatchAsync(middlewares?.afterCreateOne)\n : sendResponse,\n ].filter((m) => !!m),\n sendResponse\n );\n }\n\n // GET /{routeName} - Find Many\n if (\n !isEndpointDisabled(\"findMany\") &&\n !hasCustomImplementation(`/${routeName}`, \"get\")\n ) {\n router.get(\n `/${routeName}`,\n authService.handleAuthenticationControl(\n \"View\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"View\",\n kebabCase(singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"findMany\"\n ),\n ...[\n safeCatchAsync(middlewares?.beforeFindMany) || controller.findMany,\n safeCatchAsync(middlewares?.beforeFindMany)\n ? controller.findMany\n : safeCatchAsync(middlewares?.afterFindMany) || sendResponse,\n safeCatchAsync(middlewares?.beforeFindMany) &&\n safeCatchAsync(middlewares?.afterFindMany)\n ? safeCatchAsync(middlewares?.afterFindMany)\n : sendResponse,\n sendResponse,\n ].filter((m) => !!m)\n );\n }\n\n // POST /{routeName}/many - Create Many\n if (\n !isEndpointDisabled(\"createMany\") &&\n !hasCustomImplementation(`/${routeName}/many`, \"post\")\n ) {\n router.post(\n `/${routeName}/many`,\n authService.handleAuthenticationControl(\n \"Create\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Create\",\n kebabCase(singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"createMany\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"createMany\"\n ),\n ...[\n safeCatchAsync(middlewares?.beforeCreateMany) ||\n controller.createMany,\n safeCatchAsync(middlewares?.beforeCreateMany)\n ? controller.createMany\n : safeCatchAsync(middlewares?.afterCreateMany) || sendResponse,\n safeCatchAsync(middlewares?.beforeCreateMany) &&\n safeCatchAsync(middlewares?.afterCreateMany)\n ? safeCatchAsync(middlewares?.afterCreateMany)\n : sendResponse,\n sendResponse,\n ].filter((m) => !!m)\n );\n }\n\n // PATCH /{routeName}/many - Update Many\n if (\n !isEndpointDisabled(\"updateMany\") &&\n !hasCustomImplementation(`/${routeName}/many`, \"patch\")\n ) {\n router.patch(\n `/${routeName}/many`,\n authService.handleAuthenticationControl(\n \"Update\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Update\",\n kebabCase(singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"updateMany\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"updateMany\"\n ),\n ...[\n safeCatchAsync(middlewares?.beforeUpdateMany) ||\n controller.updateMany,\n safeCatchAsync(middlewares?.beforeUpdateMany)\n ? controller.updateMany\n : safeCatchAsync(middlewares?.afterUpdateMany) || sendResponse,\n safeCatchAsync(middlewares?.beforeUpdateMany) &&\n safeCatchAsync(middlewares?.afterUpdateMany)\n ? safeCatchAsync(middlewares?.afterUpdateMany)\n : sendResponse,\n sendResponse,\n ].filter((m) => !!m)\n );\n }\n\n // DELETE /{routeName}/many - Delete Many\n if (\n !isEndpointDisabled(\"deleteMany\") &&\n !hasCustomImplementation(`/${routeName}/many`, \"delete\")\n ) {\n router.delete(\n `/${routeName}/many`,\n authService.handleAuthenticationControl(\n \"Delete\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Delete\",\n kebabCase(singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"deleteMany\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"deleteMany\"\n ),\n ...[\n safeCatchAsync(middlewares?.beforeDeleteMany) ||\n controller.deleteMany,\n safeCatchAsync(middlewares?.beforeDeleteMany)\n ? controller.deleteMany\n : safeCatchAsync(middlewares?.afterDeleteMany) || sendResponse,\n safeCatchAsync(middlewares?.beforeDeleteMany) &&\n safeCatchAsync(middlewares?.afterDeleteMany)\n ? safeCatchAsync(middlewares?.afterDeleteMany)\n : sendResponse,\n sendResponse,\n ].filter((middleware) => !!middleware)\n );\n }\n\n // GET /{routeName}/:id - Find One\n if (\n !isEndpointDisabled(\"findOne\") &&\n !hasCustomImplementation(`/${routeName}/:id`, \"get\")\n ) {\n router.get(\n `/${routeName}/:id`,\n authService.handleAuthenticationControl(\n \"View\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"View\",\n kebabCase(singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"findOne\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"findOne\"\n ),\n ...[\n safeCatchAsync(middlewares?.beforeFindOne) || controller.findOne,\n safeCatchAsync(middlewares?.beforeFindOne)\n ? controller.findOne\n : safeCatchAsync(middlewares?.afterFindOne) || sendResponse,\n safeCatchAsync(middlewares?.beforeFindOne) &&\n safeCatchAsync(middlewares?.afterFindOne)\n ? safeCatchAsync(middlewares?.afterFindOne)\n : sendResponse,\n sendResponse,\n ].filter((m) => !!m)\n );\n }\n\n // PATCH /{routeName}/:id - Update One\n if (\n !isEndpointDisabled(\"updateOne\") &&\n !hasCustomImplementation(`/${routeName}/:id`, \"patch\")\n ) {\n router.patch(\n `/${routeName}/:id`,\n authService.handleAuthenticationControl(\n \"Update\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Update\",\n kebabCase(singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"update\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"updateOne\"\n ),\n ...[\n safeCatchAsync(middlewares?.beforeUpdateOne) || controller.updateOne,\n safeCatchAsync(middlewares?.beforeUpdateOne)\n ? controller.updateOne\n : safeCatchAsync(middlewares?.afterUpdateOne) || sendResponse,\n safeCatchAsync(middlewares?.beforeUpdateOne) &&\n safeCatchAsync(middlewares?.afterUpdateOne)\n ? safeCatchAsync(middlewares?.afterUpdateOne)\n : sendResponse,\n ].filter((m) => !!m),\n sendResponse\n );\n }\n\n // DELETE /{routeName}/:id - Delete One\n if (\n !isEndpointDisabled(\"deleteOne\") &&\n !hasCustomImplementation(`/${routeName}/:id`, \"delete\")\n ) {\n router.delete(\n `/${routeName}/:id`,\n authService.handleAuthenticationControl(\n \"Delete\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Delete\",\n kebabCase(singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"delete\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"deleteOne\"\n ),\n ...[\n safeCatchAsync(middlewares?.beforeDeleteOne) || controller.deleteOne,\n safeCatchAsync(middlewares?.beforeDeleteOne)\n ? controller.deleteOne\n : safeCatchAsync(middlewares?.afterDeleteOne) || sendResponse,\n safeCatchAsync(middlewares?.beforeDeleteOne) &&\n safeCatchAsync(middlewares?.afterDeleteOne)\n ? safeCatchAsync(middlewares?.afterDeleteOne)\n : sendResponse,\n sendResponse,\n ].filter((m) => !!m)\n );\n }\n });\n}\n"]}
1
+ {"version":3,"file":"base.router.helpers.js","sourceRoot":"","sources":["../../../../../../src/modules/base/utils/helpers/base.router.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { Router } from \"express\";\nimport pluralize from \"pluralize\";\nimport { ArkosConfig, RouterConfig } from \"../../../../exports\";\nimport { kebabCase } from \"../../../../exports/utils\";\nimport { PrismaQueryOptions } from \"../../../../types\";\nimport { RouterEndpoint } from \"../../../../types/router-config\";\nimport { importPrismaModelModules } from \"../../../../utils/helpers/models.helpers\";\nimport authService from \"../../../auth/auth.service\";\nimport { BaseController } from \"../../base.controller\";\nimport {\n addPrismaQueryOptionsToRequest,\n handleRequestBodyValidationAndTransformation,\n sendResponse,\n} from \"../../base.middlewares\";\nimport catchAsync from \"../../../error-handler/utils/catch-async\";\n\nexport function setupRouters(\n models: string[],\n router: Router,\n arkosConfigs: ArkosConfig\n) {\n return models.map(async (model) => {\n const modelNameInKebab = kebabCase(model);\n const modelModules = await importPrismaModelModules(modelNameInKebab);\n const {\n middlewares,\n authConfigs,\n prismaQueryOptions,\n router: customRouterModule,\n dtos,\n schemas,\n } = modelModules;\n\n const routeName = pluralize.plural(modelNameInKebab);\n const controller = new BaseController(model);\n\n const routerConfig: RouterConfig = customRouterModule?.config || {};\n\n // Check if custom implementation exists\n const customRouter = (customRouterModule as Router) || {};\n const hasCustomImplementation = (path: string, method: string) => {\n return customRouter.stack?.some(\n (layer) =>\n (layer.path === `/api/${path}` ||\n layer.path === `api/${path}` ||\n layer.path === `api/${path}/` ||\n layer.path === `/api/${path}/`) &&\n layer.method.toLowerCase() === method.toLowerCase()\n );\n };\n\n // Helper to get the correct schema or DTO based on Arkos Config\n const getValidationSchemaOrDto = (\n key: keyof typeof dtos | keyof typeof schemas\n ) => {\n const validationConfigs = arkosConfigs?.validation;\n if (validationConfigs?.resolver === \"class-validator\") {\n return dtos?.[key];\n } else if (validationConfigs?.resolver === \"zod\") {\n return schemas?.[key];\n }\n return undefined;\n };\n\n // If the custom router has its own routes, add them\n if (customRouterModule?.default && !routerConfig?.disable)\n router.use(`/${routeName}`, customRouterModule.default);\n\n function safeCatchAsync(middleware: any) {\n return middleware ? catchAsync(middleware) : undefined;\n }\n\n // POST /{routeName} - Create One\n if (\n !isEndpointDisabled(routerConfig, \"createOne\") &&\n !hasCustomImplementation(`/${routeName}`, \"post\")\n ) {\n router.post(\n `/${routeName}`,\n authService.handleAuthenticationControl(\n \"Create\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Create\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"create\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"createOne\"\n ),\n ...[\n safeCatchAsync(middlewares?.beforeCreateOne) || controller.createOne,\n safeCatchAsync(middlewares?.beforeCreateOne)\n ? controller.createOne\n : safeCatchAsync(middlewares?.afterCreateOne) || sendResponse,\n safeCatchAsync(middlewares?.beforeCreateOne) &&\n safeCatchAsync(middlewares?.afterCreateOne)\n ? safeCatchAsync(middlewares?.afterCreateOne)\n : sendResponse,\n ].filter((m) => !!m),\n sendResponse\n );\n }\n\n // GET /{routeName} - Find Many\n if (\n !isEndpointDisabled(routerConfig, \"findMany\") &&\n !hasCustomImplementation(`/${routeName}`, \"get\")\n ) {\n router.get(\n `/${routeName}`,\n authService.handleAuthenticationControl(\n \"View\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"View\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"findMany\"\n ),\n ...[\n safeCatchAsync(middlewares?.beforeFindMany) || controller.findMany,\n safeCatchAsync(middlewares?.beforeFindMany)\n ? controller.findMany\n : safeCatchAsync(middlewares?.afterFindMany) || sendResponse,\n safeCatchAsync(middlewares?.beforeFindMany) &&\n safeCatchAsync(middlewares?.afterFindMany)\n ? safeCatchAsync(middlewares?.afterFindMany)\n : sendResponse,\n sendResponse,\n ].filter((m) => !!m)\n );\n }\n\n // POST /{routeName}/many - Create Many\n if (\n !isEndpointDisabled(routerConfig, \"createMany\") &&\n !hasCustomImplementation(`/${routeName}/many`, \"post\")\n ) {\n router.post(\n `/${routeName}/many`,\n authService.handleAuthenticationControl(\n \"Create\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Create\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"createMany\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"createMany\"\n ),\n ...[\n safeCatchAsync(middlewares?.beforeCreateMany) ||\n controller.createMany,\n safeCatchAsync(middlewares?.beforeCreateMany)\n ? controller.createMany\n : safeCatchAsync(middlewares?.afterCreateMany) || sendResponse,\n safeCatchAsync(middlewares?.beforeCreateMany) &&\n safeCatchAsync(middlewares?.afterCreateMany)\n ? safeCatchAsync(middlewares?.afterCreateMany)\n : sendResponse,\n sendResponse,\n ].filter((m) => !!m)\n );\n }\n\n // PATCH /{routeName}/many - Update Many\n if (\n !isEndpointDisabled(routerConfig, \"updateMany\") &&\n !hasCustomImplementation(`/${routeName}/many`, \"patch\")\n ) {\n router.patch(\n `/${routeName}/many`,\n authService.handleAuthenticationControl(\n \"Update\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Update\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"updateMany\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"updateMany\"\n ),\n ...[\n safeCatchAsync(middlewares?.beforeUpdateMany) ||\n controller.updateMany,\n safeCatchAsync(middlewares?.beforeUpdateMany)\n ? controller.updateMany\n : safeCatchAsync(middlewares?.afterUpdateMany) || sendResponse,\n safeCatchAsync(middlewares?.beforeUpdateMany) &&\n safeCatchAsync(middlewares?.afterUpdateMany)\n ? safeCatchAsync(middlewares?.afterUpdateMany)\n : sendResponse,\n sendResponse,\n ].filter((m) => !!m)\n );\n }\n\n // DELETE /{routeName}/many - Delete Many\n if (\n !isEndpointDisabled(routerConfig, \"deleteMany\") &&\n !hasCustomImplementation(`/${routeName}/many`, \"delete\")\n ) {\n router.delete(\n `/${routeName}/many`,\n authService.handleAuthenticationControl(\n \"Delete\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Delete\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"deleteMany\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"deleteMany\"\n ),\n ...[\n safeCatchAsync(middlewares?.beforeDeleteMany) ||\n controller.deleteMany,\n safeCatchAsync(middlewares?.beforeDeleteMany)\n ? controller.deleteMany\n : safeCatchAsync(middlewares?.afterDeleteMany) || sendResponse,\n safeCatchAsync(middlewares?.beforeDeleteMany) &&\n safeCatchAsync(middlewares?.afterDeleteMany)\n ? safeCatchAsync(middlewares?.afterDeleteMany)\n : sendResponse,\n sendResponse,\n ].filter((middleware) => !!middleware)\n );\n }\n\n // GET /{routeName}/:id - Find One\n if (\n !isEndpointDisabled(routerConfig, \"findOne\") &&\n !hasCustomImplementation(`/${routeName}/:id`, \"get\")\n ) {\n router.get(\n `/${routeName}/:id`,\n authService.handleAuthenticationControl(\n \"View\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"View\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"findOne\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"findOne\"\n ),\n ...[\n safeCatchAsync(middlewares?.beforeFindOne) || controller.findOne,\n safeCatchAsync(middlewares?.beforeFindOne)\n ? controller.findOne\n : safeCatchAsync(middlewares?.afterFindOne) || sendResponse,\n safeCatchAsync(middlewares?.beforeFindOne) &&\n safeCatchAsync(middlewares?.afterFindOne)\n ? safeCatchAsync(middlewares?.afterFindOne)\n : sendResponse,\n sendResponse,\n ].filter((m) => !!m)\n );\n }\n\n // PATCH /{routeName}/:id - Update One\n if (\n !isEndpointDisabled(routerConfig, \"updateOne\") &&\n !hasCustomImplementation(`/${routeName}/:id`, \"patch\")\n ) {\n router.patch(\n `/${routeName}/:id`,\n authService.handleAuthenticationControl(\n \"Update\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Update\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"update\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"updateOne\"\n ),\n ...[\n safeCatchAsync(middlewares?.beforeUpdateOne) || controller.updateOne,\n safeCatchAsync(middlewares?.beforeUpdateOne)\n ? controller.updateOne\n : safeCatchAsync(middlewares?.afterUpdateOne) || sendResponse,\n safeCatchAsync(middlewares?.beforeUpdateOne) &&\n safeCatchAsync(middlewares?.afterUpdateOne)\n ? safeCatchAsync(middlewares?.afterUpdateOne)\n : sendResponse,\n ].filter((m) => !!m),\n sendResponse\n );\n }\n\n // DELETE /{routeName}/:id - Delete One\n if (\n !isEndpointDisabled(routerConfig, \"deleteOne\") &&\n !hasCustomImplementation(`/${routeName}/:id`, \"delete\")\n ) {\n router.delete(\n `/${routeName}/:id`,\n authService.handleAuthenticationControl(\n \"Delete\",\n authConfigs?.authenticationControl\n ),\n authService.handleAccessControl(\n \"Delete\",\n kebabCase(pluralize.singular(modelNameInKebab)),\n authConfigs?.accessControl || {}\n ),\n handleRequestBodyValidationAndTransformation(\n getValidationSchemaOrDto(\"delete\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"deleteOne\"\n ),\n ...[\n safeCatchAsync(middlewares?.beforeDeleteOne) || controller.deleteOne,\n safeCatchAsync(middlewares?.beforeDeleteOne)\n ? controller.deleteOne\n : safeCatchAsync(middlewares?.afterDeleteOne) || sendResponse,\n safeCatchAsync(middlewares?.beforeDeleteOne) &&\n safeCatchAsync(middlewares?.afterDeleteOne)\n ? safeCatchAsync(middlewares?.afterDeleteOne)\n : sendResponse,\n sendResponse,\n ].filter((m) => !!m)\n );\n }\n });\n}\n\nexport function isEndpointDisabled(\n routerConfig: RouterConfig,\n endpoint: RouterEndpoint\n): boolean {\n if (!routerConfig?.disable) return false;\n\n if (routerConfig.disable === true) return true;\n\n if (typeof routerConfig.disable === \"object\")\n return routerConfig.disable[endpoint] === true;\n\n return false;\n}\n\nexport function isParentEndpointAllowed(\n routerConfig: any,\n endpoint: string\n): boolean {\n if (!routerConfig?.parent) return false;\n\n const parentEndpoints = routerConfig.parent.endpoints;\n if (parentEndpoints === \"*\") return true;\n if (Array.isArray(parentEndpoints)) return parentEndpoints.includes(endpoint);\n\n return true; // Default to allow if not specified\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"error-handler.controller.js","sourceRoot":"","sources":["../../../../src/modules/error-handler/error-handler.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { NextFunction, Request, Response } from \"express\";\nimport AppError from \"./utils/app-error\";\nimport * as errorControllerHelper from \"./utils/error-handler.helpers\";\nimport { server } from \"../../server\";\n\n/**\n * Error handling middleware for Express.\n *\n * This middleware function handles all errors in the Express application.\n * It checks for the environment (development or production) and sends appropriate error responses\n * based on whether the environment is production or not. It also maps specific errors such as\n * JWT errors, Prisma client errors, and database-related errors to specific helper functions for handling.\n *\n * @param {AppError} err - The error object thrown by the application.\n * @param {Request} req - The Express request object.\n * @param {Response} res - The Express response object.\n * @param {NextFunction} next - The next middleware function in the chain.\n *\n * @returns {void} - Sends the response with the error details to the client.\n */\nexport default function errorHandler(\n err: AppError,\n req: Request,\n res: Response,\n next: NextFunction\n): void {\n console.error(\"[\\x1b[31mERROR\\x1b[0m]:\", err);\n // Default error status\n err.statusCode = err.statusCode || 500;\n err.status = err.status || \"error\";\n\n // If the environment is not production, send detailed error information\n if (process.env.NODE_ENV !== \"production\") {\n sendDevelopmentError(err, req, res);\n return;\n }\n\n // Prepare error object for response, copying the original error's properties\n let error = { ...err, message: err.message };\n\n // Handle specific error cases (JWT errors, Prisma validation errors, etc.)\n if (err.name === \"JsonWebTokenError\")\n error = errorControllerHelper.handleJWTError();\n if (err.name === \"TokenExpiredError\")\n error = errorControllerHelper.handleJWTExpired();\n\n // Handle specific Prisma client validation errors\n if (err.name === \"PrismaClientValidationError\")\n error = errorControllerHelper.handlePrismaClientValidationError(err);\n\n // Handle Prisma database-specific error codes (P1000 to P3005)\n if (err.code === \"P1000\")\n error = errorControllerHelper.handleAuthenticationError(err);\n if (err.code === \"P1001\")\n error = errorControllerHelper.handleServerNotReachableError(err);\n if (err.code === \"P1002\")\n error = errorControllerHelper.handleConnectionTimeoutError(err);\n if (err.code === \"P1003\")\n error = errorControllerHelper.handleDatabaseNotFoundError(err);\n if (err.code === \"P2000\")\n error = errorControllerHelper.handleFieldValueTooLargeError(err);\n if (err.code === \"P2001\")\n error = errorControllerHelper.handleRecordNotFoundError(err);\n if (err.code === \"P2002\")\n error = errorControllerHelper.handleUniqueConstraintError(err);\n if (err.code === \"P2003\")\n error = errorControllerHelper.handleForeignKeyConstraintError(err);\n if (err.code === \"P2004\")\n error = errorControllerHelper.handleConstraintFailedError(err);\n if (err.code === \"P3000\")\n error = errorControllerHelper.handleSchemaCreationFailedError(err);\n if (err.code === \"P3001\")\n error = errorControllerHelper.handleMigrationAlreadyAppliedError(err);\n if (err.code === \"P3002\")\n error = errorControllerHelper.handleMigrationScriptFailedError(err);\n if (err.code === \"P3003\")\n error = errorControllerHelper.handleVersionMismatchError(err);\n\n // Handle general error types (e.g., syntax errors, type errors, etc.)\n // if (err.name === \"SyntaxError\")\n // error = errorControllerHelper.handleSchemaSyntaxError(err);\n // if (err.name === \"TypeError\")\n // error = errorControllerHelper.handleClientTypeError(err);\n // if (err.name === \"BinaryError\")\n // error = errorControllerHelper.handleBinaryError(err);\n if (err.name === \"NetworkError\")\n error = errorControllerHelper.handleNetworkError(err);\n // if (err.name === \"UnhandledPromiseRejection\")\n // error = errorControllerHelper.handleUnhandledPromiseError(err);\n if (!error.isOperational) error = new AppError(\"Something went wrong!\", 500);\n\n // Send the error response for production environment\n sendProductionError(error, req, res);\n}\n\n/**\n * Sends a detailed error response in development mode.\n *\n * In development, the error response includes full error details, including\n * the stack trace and the complete error message.\n *\n * @param {AppError} err - The error object.\n * @param {Request} req - The Express request object.\n * @param {Response} res - The Express response object.\n *\n * @returns {void} - Sends the response with the error details to the client.\n */\nfunction sendDevelopmentError(\n err: AppError,\n req: Request,\n res: Response\n): void {\n if (req.originalUrl.startsWith(\"/api\"))\n res.status(err.statusCode).json({\n ...err,\n message: err.message.split(\"\\n\")[err.message.split(\"\\n\").length - 1],\n stack: err.stack?.split(\"\\n\"),\n });\n else\n res.status(err.statusCode).json({\n title: \"Something went wrong!\",\n message: err.message,\n });\n}\n\n/**\n * Sends a generic error response in production mode.\n *\n * In production, sensitive error details (such as stack traces) are not exposed\n * to the client. Only operational errors are shown with a generic message.\n *\n * @param {AppError} err - The error object.\n * @param {Request} req - The Express request object.\n * @param {Response} res - The Express response object.\n *\n * @returns {void} - Sends the response with the error details to the client.\n */\nfunction sendProductionError(err: AppError, req: Request, res: Response): void {\n if (req.originalUrl.startsWith(\"/api\")) {\n if (err.isOperational)\n res.status(err.statusCode).json({\n status: err.status,\n message: err.message,\n meta: err.meta || {},\n code: err.code || \"unknown\",\n });\n else\n res.status(500).json({\n status: \"error\",\n message: \"Something went wrong!\",\n });\n\n return;\n }\n\n if (err.isOperational) {\n res.status(err.statusCode).json({\n title: \"Something went wrong!\",\n message: err.message,\n });\n return;\n }\n\n res.status(err.statusCode).json({\n title: \"Something went wrong!\",\n message: \"Please try again later.\",\n });\n}\n\n/**\n * Gracefully handles process termination by listening for SIGTERM signal.\n *\n * - In production and staging environments, it will log a shutdown message\n * and attempt to close the server gracefully.\n * - In development or non-production environments, it will immediately exit the process.\n *\n * @returns {void}\n */\nprocess.on(\"SIGTERM\", () => {\n if (\n process.env.NODE_ENV !== \"production\" &&\n process.env.NODE_ENV !== \"staging\"\n ) {\n process.exit();\n } else {\n console.error(\"SIGTERM RECEIVED in Production. Shutting down gracefully!\");\n\n server.close(() => {\n console.error(\"Process terminated!!!\");\n process.exit();\n });\n }\n});\n"]}
1
+ {"version":3,"file":"error-handler.controller.js","sourceRoot":"","sources":["../../../../src/modules/error-handler/error-handler.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { NextFunction, Request, Response } from \"express\";\nimport AppError from \"./utils/app-error\";\nimport * as errorControllerHelper from \"./utils/error-handler.helpers\";\nimport { server } from \"../../server\";\n\n/**\n * Error handling middleware for Express.\n *\n * This middleware function handles all errors in the Express application.\n * It checks for the environment (development or production) and sends appropriate error responses\n * based on whether the environment is production or not. It also maps specific errors such as\n * JWT errors, Prisma client errors, and database-related errors to specific helper functions for handling.\n *\n * @param {AppError} err - The error object thrown by the application.\n * @param {Request} req - The Express request object.\n * @param {Response} res - The Express response object.\n * @param {NextFunction} next - The next middleware function in the chain.\n *\n * @returns {void} - Sends the response with the error details to the client.\n */\nexport default function errorHandler(\n err: AppError,\n req: Request,\n res: Response,\n next: NextFunction\n): void {\n console.error(\"[\\x1b[31mERROR\\x1b[0m]:\", err);\n // Default error status\n err.statusCode = err.statusCode || 500;\n err.status = err.status || \"error\";\n\n // If the environment is not production, send detailed error information\n if (process.env.NODE_ENV !== \"production\") {\n sendDevelopmentError(err, req, res);\n return;\n }\n\n // Prepare error object for response, copying the original error's properties\n let error = { ...err, message: err.message };\n\n // Handle specific error cases (JWT errors, Prisma validation errors, etc.)\n if (err.name === \"JsonWebTokenError\")\n error = errorControllerHelper.handleJWTError();\n if (err.name === \"TokenExpiredError\")\n error = errorControllerHelper.handleJWTExpired();\n\n // Handle specific Prisma client validation errors\n if (err.name === \"PrismaClientValidationError\")\n error = errorControllerHelper.handlePrismaClientValidationError(err);\n\n // Handle Prisma database-specific error codes (P1000 to P3005)\n if (err.code === \"P1000\")\n error = errorControllerHelper.handleAuthenticationError(err);\n if (err.code === \"P1001\")\n error = errorControllerHelper.handleServerNotReachableError(err);\n if (err.code === \"P1002\")\n error = errorControllerHelper.handleConnectionTimeoutError(err);\n if (err.code === \"P1003\")\n error = errorControllerHelper.handleDatabaseNotFoundError(err);\n if (err.code === \"P2000\")\n error = errorControllerHelper.handleFieldValueTooLargeError(err);\n if (err.code === \"P2001\")\n error = errorControllerHelper.handleRecordNotFoundError(err);\n if (err.code === \"P2002\")\n error = errorControllerHelper.handleUniqueConstraintError(err);\n if (err.code === \"P2003\")\n error = errorControllerHelper.handleForeignKeyConstraintError(err);\n if (err.code === \"P2004\")\n error = errorControllerHelper.handleConstraintFailedError(err);\n if (err.code === \"P3000\")\n error = errorControllerHelper.handleSchemaCreationFailedError(err);\n if (err.code === \"P3001\")\n error = errorControllerHelper.handleMigrationAlreadyAppliedError(err);\n if (err.code === \"P3002\")\n error = errorControllerHelper.handleMigrationScriptFailedError(err);\n if (err.code === \"P3003\")\n error = errorControllerHelper.handleVersionMismatchError(err);\n\n if (err.name === \"NetworkError\")\n error = errorControllerHelper.handleNetworkError(err);\n if (!error.isOperational) error = new AppError(\"Something went wrong!\", 500);\n\n // Send the error response for production environment\n sendProductionError(error, req, res);\n}\n\n/**\n * Sends a detailed error response in development mode.\n *\n * In development, the error response includes full error details, including\n * the stack trace and the complete error message.\n *\n * @param {AppError} err - The error object.\n * @param {Request} req - The Express request object.\n * @param {Response} res - The Express response object.\n *\n * @returns {void} - Sends the response with the error details to the client.\n */\nfunction sendDevelopmentError(\n err: AppError,\n req: Request,\n res: Response\n): void {\n if (req.originalUrl.startsWith(\"/api\"))\n res.status(err.statusCode).json({\n ...err,\n message: err.message.split(\"\\n\")[err.message.split(\"\\n\").length - 1],\n stack: err.stack?.split(\"\\n\"),\n });\n else\n res.status(err.statusCode).json({\n title: \"Something went wrong!\",\n message: err.message,\n });\n}\n\n/**\n * Sends a generic error response in production mode.\n *\n * In production, sensitive error details (such as stack traces) are not exposed\n * to the client. Only operational errors are shown with a generic message.\n *\n * @param {AppError} err - The error object.\n * @param {Request} req - The Express request object.\n * @param {Response} res - The Express response object.\n *\n * @returns {void} - Sends the response with the error details to the client.\n */\nfunction sendProductionError(err: AppError, req: Request, res: Response): void {\n if (req.originalUrl.startsWith(\"/api\")) {\n if (err.isOperational)\n res.status(err.statusCode).json({\n status: err.status,\n message: err.message,\n meta: err.meta || {},\n code: err.code || \"unknown\",\n });\n else\n res.status(500).json({\n status: \"error\",\n message: \"Something went wrong!\",\n });\n\n return;\n }\n\n if (err.isOperational) {\n res.status(err.statusCode).json({\n title: \"Something went wrong!\",\n message: err.message,\n });\n return;\n }\n\n res.status(err.statusCode).json({\n title: \"Something went wrong!\",\n message: \"Please try again later.\",\n });\n}\n\n/**\n * Gracefully handles process termination by listening for SIGTERM signal.\n *\n * - In production and staging environments, it will log a shutdown message\n * and attempt to close the server gracefully.\n * - In development or non-production environments, it will immediately exit the process.\n *\n * @returns {void}\n */\nprocess.on(\"SIGTERM\", () => {\n if (\n process.env.NODE_ENV !== \"production\" &&\n process.env.NODE_ENV !== \"staging\"\n ) {\n process.exit();\n } else {\n console.error(\"SIGTERM RECEIVED in Production. Shutting down gracefully!\");\n\n server.close(() => {\n console.error(\"Process terminated!!!\");\n process.exit();\n });\n }\n});\n"]}
@@ -8,53 +8,37 @@ const express_1 = require("express");
8
8
  const swagger_ui_express_1 = __importDefault(require("swagger-ui-express"));
9
9
  const swagger_jsdoc_1 = __importDefault(require("swagger-jsdoc"));
10
10
  const deepmerge_helper_1 = __importDefault(require("../../utils/helpers/deepmerge.helper"));
11
+ const swagger_router_helpers_1 = require("./utils/helpers/swagger.router.helpers");
11
12
  const swaggerRouter = (0, express_1.Router)();
12
- function generateSchemasByMode(swaggerConfig) {
13
- const schemas = {};
14
- switch (swaggerConfig.mode) {
15
- case "prisma":
16
- break;
17
- case "class-validator":
18
- break;
19
- case "zod":
20
- break;
21
- case "json-schema":
22
- default:
23
- break;
24
- }
25
- return schemas;
26
- }
27
- function getSwaggerRouter(arkosConfig) {
13
+ async function getSwaggerRouter(arkosConfig) {
14
+ const defaultJsonSchemas = await (0, swagger_router_helpers_1.getOpenAPIJsonSchemasByConfigMode)(arkosConfig.swagger);
15
+ const defaultModelsPaths = await (0, swagger_router_helpers_1.generatePathsForModels)(arkosConfig.swagger);
28
16
  const defaultSwaggerConfig = {
29
- endpoint: "/docs",
30
- mode: "json-schema",
17
+ endpoint: "/api-docs",
18
+ mode: "prisma",
31
19
  options: {
32
20
  definition: {
33
21
  openapi: "3.0.0",
34
22
  info: {
35
- title: "Generated By Arkos.js",
23
+ title: "Powered By Arkos.js",
36
24
  version: "1.0.0",
37
- description: "This API was automatically generated by Arkos.js read more about at www.arkosjs.com",
25
+ description: "This API was automatically generated by Arkos.js, read more about at www.arkosjs.com",
38
26
  },
39
27
  servers: [
40
28
  {
41
29
  url: `http://${arkosConfig.host}:${arkosConfig.port}`,
42
- description: "Local server",
30
+ description: "Development server",
43
31
  },
44
32
  ],
33
+ paths: defaultModelsPaths,
45
34
  components: {
46
- schemas: {},
35
+ schemas: defaultJsonSchemas || {},
47
36
  securitySchemes: {
48
37
  BearerAuth: {
49
38
  type: "http",
50
39
  scheme: "bearer",
51
40
  bearerFormat: "JWT",
52
41
  },
53
- ApiKeyAuth: {
54
- type: "apiKey",
55
- in: "header",
56
- name: "X-API-Key",
57
- },
58
42
  },
59
43
  },
60
44
  security: [],
@@ -65,10 +49,6 @@ function getSwaggerRouter(arkosConfig) {
65
49
  ],
66
50
  swaggerUiOptions: {
67
51
  explorer: true,
68
- customCss: `
69
- .swagger-ui .topbar { display: none; }
70
- .swagger-ui .info { margin: 20px 0; }
71
- `,
72
52
  swaggerOptions: {
73
53
  filter: true,
74
54
  displayRequestDuration: true,
@@ -82,11 +62,9 @@ function getSwaggerRouter(arkosConfig) {
82
62
  },
83
63
  };
84
64
  const swaggerConfigs = (0, deepmerge_helper_1.default)(defaultSwaggerConfig, arkosConfig.swagger || {});
85
- const modeSchemas = generateSchemasByMode(swaggerConfigs);
86
- if (swaggerConfigs.options.definition.components?.schemas) {
65
+ if (swaggerConfigs?.options?.definition?.components?.schemas) {
87
66
  swaggerConfigs.options.definition.components.schemas = {
88
- ...swaggerConfigs.options.definition.components.schemas,
89
- ...modeSchemas,
67
+ ...swaggerConfigs?.options?.definition?.components.schemas,
90
68
  };
91
69
  }
92
70
  const swaggerSpecification = (0, swagger_jsdoc_1.default)({
@@ -98,7 +76,7 @@ function getSwaggerRouter(arkosConfig) {
98
76
  explorer: swaggerConfigs.options.swaggerUiOptions?.explorer ?? true,
99
77
  customCss: swaggerConfigs.options.swaggerUiOptions?.customCss,
100
78
  customSiteTitle: swaggerConfigs.options.swaggerUiOptions?.customSiteTitle ||
101
- "API Documentation",
79
+ "Arkos.js API Documentation",
102
80
  customfavIcon: swaggerConfigs.options.swaggerUiOptions?.customfavIcon,
103
81
  swaggerOptions: {
104
82
  filter: swaggerConfigs.options.swaggerUiOptions?.swaggerOptions?.filter ?? true,
@@ -116,26 +94,6 @@ function getSwaggerRouter(arkosConfig) {
116
94
  };
117
95
  swaggerRouter.use(swaggerConfigs.endpoint, swagger_ui_express_1.default.serve);
118
96
  swaggerRouter.get(swaggerConfigs.endpoint, swagger_ui_express_1.default.setup(swaggerSpecification, swaggerUiOptions));
119
- swaggerRouter.get(`${swaggerConfigs.endpoint}/json`, (req, res) => {
120
- res.setHeader("Content-Type", "application/json");
121
- res.json(swaggerSpecification);
122
- });
123
- swaggerRouter.get(`${swaggerConfigs.endpoint}/yaml`, (req, res) => {
124
- const yaml = require("js-yaml");
125
- res.setHeader("Content-Type", "text/yaml");
126
- res.send(yaml.dump(swaggerSpecification));
127
- });
128
- swaggerRouter.get(`${swaggerConfigs.endpoint}/health`, (req, res) => {
129
- res.json({
130
- status: "ok",
131
- swagger: {
132
- version: swaggerConfigs.options.definition.openapi,
133
- title: swaggerConfigs.options.definition.info?.title,
134
- endpoint: swaggerConfigs.endpoint,
135
- mode: swaggerConfigs.mode,
136
- },
137
- });
138
- });
139
97
  return swaggerRouter;
140
98
  }
141
99
  //# sourceMappingURL=swagger.router.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"swagger.router.js","sourceRoot":"","sources":["../../../../src/modules/swagger/swagger.router.ts"],"names":[],"mappings":"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","sourcesContent":["import { Router } from \"express\";\nimport swaggerUi from \"swagger-ui-express\";\nimport swaggerJsdoc from \"swagger-jsdoc\";\nimport { ArkosConfig } from \"../../types/arkos-config\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\n\nconst swaggerRouter = Router();\n\n// Helper function to generate schemas based on mode\nfunction generateSchemasByMode(swaggerConfig: ArkosConfig[\"swagger\"]) {\n const schemas: Record<string, any> = {};\n\n switch (swaggerConfig!.mode) {\n case \"prisma\":\n // In a real implementation, you'd generate schemas from Prisma models\n // This would require additional logic to parse Prisma schema files\n break;\n\n case \"class-validator\":\n // Generate schemas from class-validator decorators\n // This would require reflection or build-time generation\n break;\n\n case \"zod\":\n // Generate schemas from Zod definitions\n // This could be done through custom transformations\n break;\n\n case \"json-schema\":\n default:\n // Use manually defined JSON schemas\n // This is the default behavior with JSDoc comments\n break;\n }\n\n return schemas;\n}\n\nexport function getSwaggerRouter(arkosConfig: ArkosConfig): Router {\n // Default swagger configuration\n const defaultSwaggerConfig: ArkosConfig[\"swagger\"] = {\n endpoint: \"/docs\",\n mode: \"json-schema\",\n options: {\n definition: {\n openapi: \"3.0.0\",\n info: {\n title: \"Generated By Arkos.js\",\n version: \"1.0.0\",\n description:\n \"This API was automatically generated by Arkos.js read more about at www.arkosjs.com\",\n },\n servers: [\n {\n url: `http://${arkosConfig.host}:${arkosConfig.port}`,\n description: \"Local server\",\n },\n ],\n components: {\n schemas: {},\n securitySchemes: {\n BearerAuth: {\n type: \"http\",\n scheme: \"bearer\",\n bearerFormat: \"JWT\",\n },\n ApiKeyAuth: {\n type: \"apiKey\",\n in: \"header\",\n name: \"X-API-Key\",\n },\n },\n },\n security: [],\n },\n apis: [\n \"./src/routers/*.router.{ts,js}\",\n \"./src/modules/**/*.router.{ts,js}\",\n ],\n swaggerUiOptions: {\n explorer: true,\n customCss: `\n .swagger-ui .topbar { display: none; }\n .swagger-ui .info { margin: 20px 0; }\n `,\n swaggerOptions: {\n filter: true,\n displayRequestDuration: true,\n showExtensions: true,\n showCommonExtensions: true,\n },\n },\n deepLinking: true,\n tryItOutEnabled: true,\n persistAuthorization: false,\n },\n };\n\n // Merge default config with user config\n const swaggerConfigs = deepmerge(\n defaultSwaggerConfig,\n arkosConfig.swagger || {}\n );\n\n // Generate additional schemas based on mode\n const modeSchemas = generateSchemasByMode(swaggerConfigs);\n\n // Merge mode-generated schemas with existing schemas\n if (swaggerConfigs.options.definition.components?.schemas) {\n swaggerConfigs.options.definition.components.schemas = {\n ...swaggerConfigs.options.definition.components.schemas,\n ...modeSchemas,\n };\n }\n\n // Generate OpenAPI specification using swagger-jsdoc\n const swaggerSpecification = swaggerJsdoc({\n definition: swaggerConfigs.options\n .definition as swaggerJsdoc.SwaggerDefinition,\n apis: swaggerConfigs.options.apis || [],\n });\n\n // Setup Swagger UI options\n const swaggerUiOptions = {\n explorer: swaggerConfigs.options.swaggerUiOptions?.explorer ?? true,\n customCss: swaggerConfigs.options.swaggerUiOptions?.customCss,\n customSiteTitle:\n swaggerConfigs.options.swaggerUiOptions?.customSiteTitle ||\n \"API Documentation\",\n customfavIcon: swaggerConfigs.options.swaggerUiOptions?.customfavIcon,\n swaggerOptions: {\n filter:\n swaggerConfigs.options.swaggerUiOptions?.swaggerOptions?.filter ?? true,\n displayRequestDuration:\n swaggerConfigs.options.swaggerUiOptions?.swaggerOptions\n ?.displayRequestDuration ?? true,\n deepLinking: swaggerConfigs.options.deepLinking ?? true,\n tryItOutEnabled: swaggerConfigs.options.tryItOutEnabled ?? true,\n persistAuthorization:\n swaggerConfigs.options.persistAuthorization ?? false,\n showExtensions:\n swaggerConfigs.options.swaggerUiOptions?.swaggerOptions\n ?.showExtensions ?? true,\n showCommonExtensions:\n swaggerConfigs.options.swaggerUiOptions?.swaggerOptions\n ?.showCommonExtensions ?? true,\n ...swaggerConfigs.options.swaggerUiOptions?.swaggerOptions,\n },\n };\n\n // Serve Swagger UI static assets\n swaggerRouter.use(swaggerConfigs.endpoint!, swaggerUi.serve);\n\n // Serve Swagger documentation\n swaggerRouter.get(\n swaggerConfigs.endpoint!,\n swaggerUi.setup(swaggerSpecification, swaggerUiOptions)\n );\n\n // Serve raw OpenAPI spec as JSON\n swaggerRouter.get(`${swaggerConfigs.endpoint}/json`, (req, res) => {\n res.setHeader(\"Content-Type\", \"application/json\");\n res.json(swaggerSpecification);\n });\n\n // Serve raw OpenAPI spec as YAML (optional)\n swaggerRouter.get(`${swaggerConfigs.endpoint}/yaml`, (req, res) => {\n const yaml = require(\"js-yaml\");\n res.setHeader(\"Content-Type\", \"text/yaml\");\n res.send(yaml.dump(swaggerSpecification));\n });\n\n // Health check endpoint for Swagger itself\n swaggerRouter.get(`${swaggerConfigs.endpoint}/health`, (req, res) => {\n res.json({\n status: \"ok\",\n swagger: {\n version: swaggerConfigs.options.definition.openapi,\n title: swaggerConfigs.options.definition.info?.title,\n endpoint: swaggerConfigs.endpoint,\n mode: swaggerConfigs.mode,\n },\n });\n });\n\n return swaggerRouter;\n}\n"]}
1
+ {"version":3,"file":"swagger.router.js","sourceRoot":"","sources":["../../../../src/modules/swagger/swagger.router.ts"],"names":[],"mappings":"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","sourcesContent":["import { Router } from \"express\";\nimport swaggerUi from \"swagger-ui-express\";\nimport swaggerJsdoc from \"swagger-jsdoc\";\nimport { ArkosConfig } from \"../../types/arkos-config\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\nimport {\n generatePathsForModels,\n getOpenAPIJsonSchemasByConfigMode,\n} from \"./utils/helpers/swagger.router.helpers\";\n\nconst swaggerRouter = Router();\n\nexport async function getSwaggerRouter(\n arkosConfig: ArkosConfig\n): Promise<Router> {\n const defaultJsonSchemas = await getOpenAPIJsonSchemasByConfigMode(\n arkosConfig.swagger\n );\n const defaultModelsPaths = await generatePathsForModels(arkosConfig.swagger);\n\n const defaultSwaggerConfig: ArkosConfig[\"swagger\"] = {\n endpoint: \"/api-docs\",\n mode: \"prisma\",\n options: {\n definition: {\n openapi: \"3.0.0\",\n info: {\n title: \"Powered By Arkos.js\",\n version: \"1.0.0\",\n description:\n \"This API was automatically generated by Arkos.js, read more about at www.arkosjs.com\",\n },\n servers: [\n {\n url: `http://${arkosConfig.host}:${arkosConfig.port}`,\n description: \"Development server\",\n },\n ],\n paths: defaultModelsPaths,\n components: {\n schemas: defaultJsonSchemas || {},\n securitySchemes: {\n BearerAuth: {\n type: \"http\",\n scheme: \"bearer\",\n bearerFormat: \"JWT\",\n },\n },\n },\n security: [],\n },\n apis: [\n \"./src/routers/*.router.{ts,js}\",\n \"./src/modules/**/*.router.{ts,js}\",\n ],\n swaggerUiOptions: {\n explorer: true,\n swaggerOptions: {\n filter: true,\n displayRequestDuration: true,\n showExtensions: true,\n showCommonExtensions: true,\n },\n },\n deepLinking: true,\n tryItOutEnabled: true,\n persistAuthorization: false,\n },\n };\n\n // Merge default config with user config\n const swaggerConfigs = deepmerge(\n defaultSwaggerConfig,\n arkosConfig.swagger || {}\n );\n\n // Merge mode-generated schemas with existing schemas\n if (swaggerConfigs?.options?.definition?.components?.schemas) {\n swaggerConfigs.options.definition.components.schemas = {\n ...swaggerConfigs?.options?.definition?.components.schemas,\n };\n }\n\n // Generate OpenAPI specification using swagger-jsdoc\n const swaggerSpecification = swaggerJsdoc({\n definition: swaggerConfigs.options\n .definition as swaggerJsdoc.SwaggerDefinition,\n apis: swaggerConfigs.options.apis || [],\n });\n\n // Setup Swagger UI options\n const swaggerUiOptions = {\n explorer: swaggerConfigs.options.swaggerUiOptions?.explorer ?? true,\n customCss: swaggerConfigs.options.swaggerUiOptions?.customCss,\n customSiteTitle:\n swaggerConfigs.options.swaggerUiOptions?.customSiteTitle ||\n \"Arkos.js API Documentation\",\n customfavIcon: swaggerConfigs.options.swaggerUiOptions?.customfavIcon,\n swaggerOptions: {\n filter:\n swaggerConfigs.options.swaggerUiOptions?.swaggerOptions?.filter ?? true,\n displayRequestDuration:\n swaggerConfigs.options.swaggerUiOptions?.swaggerOptions\n ?.displayRequestDuration ?? true,\n deepLinking: swaggerConfigs.options.deepLinking ?? true,\n tryItOutEnabled: swaggerConfigs.options.tryItOutEnabled ?? true,\n persistAuthorization:\n swaggerConfigs.options.persistAuthorization ?? false,\n showExtensions:\n swaggerConfigs.options.swaggerUiOptions?.swaggerOptions\n ?.showExtensions ?? true,\n showCommonExtensions:\n swaggerConfigs.options.swaggerUiOptions?.swaggerOptions\n ?.showCommonExtensions ?? true,\n ...swaggerConfigs.options.swaggerUiOptions?.swaggerOptions,\n },\n };\n\n // Serve Swagger UI static assets\n swaggerRouter.use(swaggerConfigs.endpoint!, swaggerUi.serve);\n\n // Serve Swagger documentation\n swaggerRouter.get(\n swaggerConfigs.endpoint!,\n swaggerUi.setup(swaggerSpecification, swaggerUiOptions)\n );\n\n // Serve raw OpenAPI spec as JSON\n // swaggerRouter.get(`${swaggerConfigs.endpoint}/json`, (req, res) => {\n // res.setHeader(\"Content-Type\", \"application/json\");\n // res.json(swaggerSpecification);\n // });\n\n // // Serve raw OpenAPI spec as YAML (optional)\n // swaggerRouter.get(`${swaggerConfigs.endpoint}/yaml`, (req, res) => {\n // const yaml = require(\"js-yaml\");\n // res.setHeader(\"Content-Type\", \"text/yaml\");\n // res.send(yaml.dump(swaggerSpecification));\n // });\n\n // // Health check endpoint for Swagger itself\n // swaggerRouter.get(`${swaggerConfigs.endpoint}/health`, (req, res) => {\n // res.json({\n // status: \"ok\",\n // swagger: {\n // version: swaggerConfigs?.options?.definition?.openapi,\n // title: swaggerConfigs?.options?.definition?.info?.title,\n // endpoint: swaggerConfigs.endpoint,\n // mode: swaggerConfigs.mode,\n // },\n // });\n // });\n\n return swaggerRouter;\n}\n"]}