arkos 2.0.0-next.13 → 2.0.0-next.16

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 (246) hide show
  1. package/README.md +144 -145
  2. package/cli.js +1 -0
  3. package/dist/cjs/app.js +7 -0
  4. package/dist/cjs/app.js.map +1 -1
  5. package/dist/cjs/exports/error-handler/index.js +15 -0
  6. package/dist/cjs/exports/error-handler/index.js.map +1 -1
  7. package/dist/cjs/modules/auth/auth.router.js +3 -0
  8. package/dist/cjs/modules/auth/auth.router.js.map +1 -1
  9. package/dist/cjs/modules/auth/auth.service.js +2 -0
  10. package/dist/cjs/modules/auth/auth.service.js.map +1 -1
  11. package/dist/cjs/modules/base/base.controller.js +15 -3
  12. package/dist/cjs/modules/base/base.controller.js.map +1 -1
  13. package/dist/cjs/modules/base/base.middlewares.js +19 -12
  14. package/dist/cjs/modules/base/base.middlewares.js.map +1 -1
  15. package/dist/cjs/modules/base/base.service.js +5 -1
  16. package/dist/cjs/modules/base/base.service.js.map +1 -1
  17. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +9 -0
  18. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
  19. package/dist/cjs/modules/error-handler/error-handler.controller.js +25 -42
  20. package/dist/cjs/modules/error-handler/error-handler.controller.js.map +1 -1
  21. package/dist/cjs/modules/error-handler/utils/app-error.js +0 -1
  22. package/dist/cjs/modules/error-handler/utils/app-error.js.map +1 -1
  23. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +8 -9
  24. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
  25. package/dist/cjs/modules/error-handler/utils/errors.js +158 -0
  26. package/dist/cjs/modules/error-handler/utils/errors.js.map +1 -0
  27. package/dist/cjs/modules/error-handler/utils/multer-error-handler.js +39 -0
  28. package/dist/cjs/modules/error-handler/utils/multer-error-handler.js.map +1 -0
  29. package/dist/cjs/modules/file-upload/file-upload.controller.js +10 -14
  30. package/dist/cjs/modules/file-upload/file-upload.controller.js.map +1 -1
  31. package/dist/cjs/modules/file-upload/file-upload.router.js +2 -0
  32. package/dist/cjs/modules/file-upload/file-upload.router.js.map +1 -1
  33. package/dist/cjs/modules/swagger/swagger.router.js +8 -2
  34. package/dist/cjs/modules/swagger/swagger.router.js.map +1 -1
  35. package/dist/cjs/modules/swagger/utils/get-open-api-login-html.js +18 -0
  36. package/dist/cjs/modules/swagger/utils/get-open-api-login-html.js.map +1 -1
  37. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js +5 -5
  38. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js.map +1 -1
  39. package/dist/cjs/modules/swagger/utils/helpers/openapi-schema-converter.js +1 -1
  40. package/dist/cjs/modules/swagger/utils/helpers/openapi-schema-converter.js.map +1 -1
  41. package/dist/cjs/types/arkos-prisma-input.js.map +1 -1
  42. package/dist/cjs/types/index.js.map +1 -1
  43. package/dist/cjs/types/new-arkos-config.js.map +1 -1
  44. package/dist/cjs/types/router-config.js.map +1 -1
  45. package/dist/cjs/utils/arkos-router/arkos-router-openapi-manager.js +86 -28
  46. package/dist/cjs/utils/arkos-router/arkos-router-openapi-manager.js.map +1 -1
  47. package/dist/cjs/utils/arkos-router/index.js +11 -7
  48. package/dist/cjs/utils/arkos-router/index.js.map +1 -1
  49. package/dist/cjs/utils/arkos-router/types/index.js.map +1 -1
  50. package/dist/cjs/utils/arkos-router/types/upload-config.js.map +1 -1
  51. package/dist/cjs/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js +34 -28
  52. package/dist/cjs/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js.map +1 -1
  53. package/dist/cjs/utils/arkos-router/utils/helpers/index.js +9 -6
  54. package/dist/cjs/utils/arkos-router/utils/helpers/index.js.map +1 -1
  55. package/dist/cjs/utils/arkos-router/utils/helpers/upload-manager.js +334 -77
  56. package/dist/cjs/utils/arkos-router/utils/helpers/upload-manager.js.map +1 -1
  57. package/dist/cjs/utils/bundler.js.map +1 -1
  58. package/dist/cjs/utils/cli/build.js +2 -3
  59. package/dist/cjs/utils/cli/build.js.map +1 -1
  60. package/dist/cjs/utils/cli/dev.js +11 -6
  61. package/dist/cjs/utils/cli/dev.js.map +1 -1
  62. package/dist/cjs/utils/cli/export-auth-action.js +5 -4
  63. package/dist/cjs/utils/cli/export-auth-action.js.map +1 -1
  64. package/dist/cjs/utils/cli/generate.js +6 -8
  65. package/dist/cjs/utils/cli/generate.js.map +1 -1
  66. package/dist/cjs/utils/cli/index.js +22 -19
  67. package/dist/cjs/utils/cli/index.js.map +1 -1
  68. package/dist/cjs/utils/cli/start.js +4 -2
  69. package/dist/cjs/utils/cli/start.js.map +1 -1
  70. package/dist/cjs/utils/cli/utils/cli.helpers.js +1 -1
  71. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js +19 -7
  72. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +1 -1
  73. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-multiple-components.js +7 -6
  74. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-multiple-components.js.map +1 -1
  75. package/dist/cjs/utils/cli/utils/template-generator/templates/policy-template.js +4 -4
  76. package/dist/cjs/utils/cli/utils/template-generator/templates/policy-template.js.map +1 -1
  77. package/dist/cjs/utils/cli/utils/template-generators.js +0 -6
  78. package/dist/cjs/utils/cli/utils/template-generators.js.map +1 -1
  79. package/dist/cjs/utils/define-config.js +5 -0
  80. package/dist/cjs/utils/define-config.js.map +1 -1
  81. package/dist/cjs/utils/dotenv.helpers.js +0 -6
  82. package/dist/cjs/utils/dotenv.helpers.js.map +1 -1
  83. package/dist/cjs/utils/features/api.features.js +23 -5
  84. package/dist/cjs/utils/features/api.features.js.map +1 -1
  85. package/dist/cjs/utils/helpers/arkos-config.helpers.js +22 -2
  86. package/dist/cjs/utils/helpers/arkos-config.helpers.js.map +1 -1
  87. package/dist/cjs/utils/helpers/exit-error.js +1 -0
  88. package/dist/cjs/utils/helpers/exit-error.js.map +1 -1
  89. package/dist/cjs/utils/helpers/fs.helpers.js +25 -24
  90. package/dist/cjs/utils/helpers/fs.helpers.js.map +1 -1
  91. package/dist/cjs/utils/helpers/global.helpers.js +3 -2
  92. package/dist/cjs/utils/helpers/global.helpers.js.map +1 -1
  93. package/dist/cjs/utils/helpers/prisma.helpers.js +4 -5
  94. package/dist/cjs/utils/helpers/prisma.helpers.js.map +1 -1
  95. package/dist/cjs/utils/helpers/url-helpers.js +14 -0
  96. package/dist/cjs/utils/helpers/url-helpers.js.map +1 -0
  97. package/dist/cjs/utils/initialize-app.js +35 -6
  98. package/dist/cjs/utils/initialize-app.js.map +1 -1
  99. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +12 -6
  100. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js.map +1 -1
  101. package/dist/cjs/utils/prisma/prisma-schema-parser.js +10 -3
  102. package/dist/cjs/utils/prisma/prisma-schema-parser.js.map +1 -1
  103. package/dist/cjs/utils/setup-app.js +58 -41
  104. package/dist/cjs/utils/setup-app.js.map +1 -1
  105. package/dist/esm/app.js +6 -0
  106. package/dist/esm/app.js.map +1 -1
  107. package/dist/esm/exports/error-handler/index.js +1 -0
  108. package/dist/esm/exports/error-handler/index.js.map +1 -1
  109. package/dist/esm/modules/auth/auth.router.js +3 -0
  110. package/dist/esm/modules/auth/auth.router.js.map +1 -1
  111. package/dist/esm/modules/auth/auth.service.js +2 -0
  112. package/dist/esm/modules/auth/auth.service.js.map +1 -1
  113. package/dist/esm/modules/base/base.controller.js +15 -3
  114. package/dist/esm/modules/base/base.controller.js.map +1 -1
  115. package/dist/esm/modules/base/base.middlewares.js +19 -12
  116. package/dist/esm/modules/base/base.middlewares.js.map +1 -1
  117. package/dist/esm/modules/base/base.service.js +5 -1
  118. package/dist/esm/modules/base/base.service.js.map +1 -1
  119. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +9 -0
  120. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
  121. package/dist/esm/modules/error-handler/error-handler.controller.js +22 -42
  122. package/dist/esm/modules/error-handler/error-handler.controller.js.map +1 -1
  123. package/dist/esm/modules/error-handler/utils/app-error.js +0 -1
  124. package/dist/esm/modules/error-handler/utils/app-error.js.map +1 -1
  125. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js +8 -9
  126. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
  127. package/dist/esm/modules/error-handler/utils/errors.js +127 -0
  128. package/dist/esm/modules/error-handler/utils/errors.js.map +1 -0
  129. package/dist/esm/modules/error-handler/utils/multer-error-handler.js +34 -0
  130. package/dist/esm/modules/error-handler/utils/multer-error-handler.js.map +1 -0
  131. package/dist/esm/modules/file-upload/file-upload.controller.js +10 -14
  132. package/dist/esm/modules/file-upload/file-upload.controller.js.map +1 -1
  133. package/dist/esm/modules/file-upload/file-upload.router.js +2 -0
  134. package/dist/esm/modules/file-upload/file-upload.router.js.map +1 -1
  135. package/dist/esm/modules/swagger/swagger.router.js +8 -2
  136. package/dist/esm/modules/swagger/swagger.router.js.map +1 -1
  137. package/dist/esm/modules/swagger/utils/get-open-api-login-html.js +18 -0
  138. package/dist/esm/modules/swagger/utils/get-open-api-login-html.js.map +1 -1
  139. package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.js +5 -5
  140. package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.js.map +1 -1
  141. package/dist/esm/modules/swagger/utils/helpers/openapi-schema-converter.js +1 -1
  142. package/dist/esm/modules/swagger/utils/helpers/openapi-schema-converter.js.map +1 -1
  143. package/dist/esm/types/arkos-prisma-input.js.map +1 -1
  144. package/dist/esm/types/index.js.map +1 -1
  145. package/dist/esm/types/new-arkos-config.js.map +1 -1
  146. package/dist/esm/types/router-config.js.map +1 -1
  147. package/dist/esm/utils/arkos-router/arkos-router-openapi-manager.js +86 -28
  148. package/dist/esm/utils/arkos-router/arkos-router-openapi-manager.js.map +1 -1
  149. package/dist/esm/utils/arkos-router/index.js +11 -7
  150. package/dist/esm/utils/arkos-router/index.js.map +1 -1
  151. package/dist/esm/utils/arkos-router/types/index.js.map +1 -1
  152. package/dist/esm/utils/arkos-router/types/upload-config.js.map +1 -1
  153. package/dist/esm/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js +34 -28
  154. package/dist/esm/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js.map +1 -1
  155. package/dist/esm/utils/arkos-router/utils/helpers/index.js +9 -6
  156. package/dist/esm/utils/arkos-router/utils/helpers/index.js.map +1 -1
  157. package/dist/esm/utils/arkos-router/utils/helpers/upload-manager.js +334 -77
  158. package/dist/esm/utils/arkos-router/utils/helpers/upload-manager.js.map +1 -1
  159. package/dist/esm/utils/bundler.js.map +1 -1
  160. package/dist/esm/utils/cli/build.js +3 -4
  161. package/dist/esm/utils/cli/build.js.map +1 -1
  162. package/dist/esm/utils/cli/dev.js +12 -7
  163. package/dist/esm/utils/cli/dev.js.map +1 -1
  164. package/dist/esm/utils/cli/export-auth-action.js +5 -4
  165. package/dist/esm/utils/cli/export-auth-action.js.map +1 -1
  166. package/dist/esm/utils/cli/generate.js +6 -8
  167. package/dist/esm/utils/cli/generate.js.map +1 -1
  168. package/dist/esm/utils/cli/index.js +22 -19
  169. package/dist/esm/utils/cli/index.js.map +1 -1
  170. package/dist/esm/utils/cli/start.js +4 -2
  171. package/dist/esm/utils/cli/start.js.map +1 -1
  172. package/dist/esm/utils/cli/utils/cli.helpers.js +1 -1
  173. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js +16 -7
  174. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +1 -1
  175. package/dist/esm/utils/cli/utils/template-generator/templates/generate-multiple-components.js +7 -6
  176. package/dist/esm/utils/cli/utils/template-generator/templates/generate-multiple-components.js.map +1 -1
  177. package/dist/esm/utils/cli/utils/template-generator/templates/policy-template.js +4 -4
  178. package/dist/esm/utils/cli/utils/template-generator/templates/policy-template.js.map +1 -1
  179. package/dist/esm/utils/cli/utils/template-generators.js +0 -6
  180. package/dist/esm/utils/cli/utils/template-generators.js.map +1 -1
  181. package/dist/esm/utils/define-config.js +5 -0
  182. package/dist/esm/utils/define-config.js.map +1 -1
  183. package/dist/esm/utils/dotenv.helpers.js +0 -6
  184. package/dist/esm/utils/dotenv.helpers.js.map +1 -1
  185. package/dist/esm/utils/features/api.features.js +23 -5
  186. package/dist/esm/utils/features/api.features.js.map +1 -1
  187. package/dist/esm/utils/helpers/arkos-config.helpers.js +20 -2
  188. package/dist/esm/utils/helpers/arkos-config.helpers.js.map +1 -1
  189. package/dist/esm/utils/helpers/exit-error.js +1 -0
  190. package/dist/esm/utils/helpers/exit-error.js.map +1 -1
  191. package/dist/esm/utils/helpers/fs.helpers.js +25 -24
  192. package/dist/esm/utils/helpers/fs.helpers.js.map +1 -1
  193. package/dist/esm/utils/helpers/global.helpers.js +1 -1
  194. package/dist/esm/utils/helpers/global.helpers.js.map +1 -1
  195. package/dist/esm/utils/helpers/prisma.helpers.js +4 -5
  196. package/dist/esm/utils/helpers/prisma.helpers.js.map +1 -1
  197. package/dist/esm/utils/helpers/url-helpers.js +11 -0
  198. package/dist/esm/utils/helpers/url-helpers.js.map +1 -0
  199. package/dist/esm/utils/initialize-app.js +35 -6
  200. package/dist/esm/utils/initialize-app.js.map +1 -1
  201. package/dist/esm/utils/prisma/prisma-json-schema-generator.js +12 -6
  202. package/dist/esm/utils/prisma/prisma-json-schema-generator.js.map +1 -1
  203. package/dist/esm/utils/prisma/prisma-schema-parser.js +10 -3
  204. package/dist/esm/utils/prisma/prisma-schema-parser.js.map +1 -1
  205. package/dist/esm/utils/setup-app.js +59 -42
  206. package/dist/esm/utils/setup-app.js.map +1 -1
  207. package/dist/types/app.d.ts +5 -6
  208. package/dist/types/exports/error-handler/index.d.ts +1 -0
  209. package/dist/types/modules/auth/auth.service.d.ts +2 -6
  210. package/dist/types/modules/base/base.service.d.ts +2 -1
  211. package/dist/types/modules/error-handler/utils/app-error.d.ts +0 -2
  212. package/dist/types/modules/error-handler/utils/error-handler.helpers.d.ts +1 -1
  213. package/dist/types/modules/error-handler/utils/errors.d.ts +176 -0
  214. package/dist/types/modules/error-handler/utils/multer-error-handler.d.ts +7 -0
  215. package/dist/types/modules/file-upload/file-upload.controller.d.ts +0 -1
  216. package/dist/types/modules/swagger/utils/helpers/get-swagger-default-configs.d.ts +48 -2
  217. package/dist/types/types/arkos-prisma-input.d.ts +3 -2
  218. package/dist/types/types/index.d.ts +0 -21
  219. package/dist/types/types/new-arkos-config.d.ts +183 -14
  220. package/dist/types/types/router-config.d.ts +1 -1
  221. package/dist/types/utils/arkos-router/arkos-router-openapi-manager.d.ts +14 -1
  222. package/dist/types/utils/arkos-router/index.d.ts +76 -8
  223. package/dist/types/utils/arkos-router/types/index.d.ts +19 -6
  224. package/dist/types/utils/arkos-router/types/upload-config.d.ts +63 -7
  225. package/dist/types/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.d.ts +1 -1
  226. package/dist/types/utils/arkos-router/utils/helpers/index.d.ts +2 -0
  227. package/dist/types/utils/arkos-router/utils/helpers/upload-manager.d.ts +0 -36
  228. package/dist/types/utils/bundler.d.ts +1 -1
  229. package/dist/types/utils/cli/generate.d.ts +0 -1
  230. package/dist/types/utils/cli/start.d.ts +1 -1
  231. package/dist/types/utils/helpers/arkos-config.helpers.d.ts +2 -0
  232. package/dist/types/utils/helpers/fs.helpers.d.ts +1 -1
  233. package/dist/types/utils/helpers/global.helpers.d.ts +1 -0
  234. package/dist/types/utils/helpers/url-helpers.d.ts +1 -0
  235. package/dist/types/utils/prisma/prisma-schema-parser.d.ts +1 -0
  236. package/package.json +15 -15
  237. package/dist/cjs/utils/cli/utils/template-generator/templates/route-hook.template.js +0 -39
  238. package/dist/cjs/utils/cli/utils/template-generator/templates/route-hook.template.js.map +0 -1
  239. package/dist/cjs/utils/cli/utils/template-generator/templates/service-hook.template.js +0 -32
  240. package/dist/cjs/utils/cli/utils/template-generator/templates/service-hook.template.js.map +0 -1
  241. package/dist/esm/utils/cli/utils/template-generator/templates/route-hook.template.js +0 -36
  242. package/dist/esm/utils/cli/utils/template-generator/templates/route-hook.template.js.map +0 -1
  243. package/dist/esm/utils/cli/utils/template-generator/templates/service-hook.template.js +0 -29
  244. package/dist/esm/utils/cli/utils/template-generator/templates/service-hook.template.js.map +0 -1
  245. package/dist/types/utils/cli/utils/template-generator/templates/route-hook.template.d.ts +0 -2
  246. package/dist/types/utils/cli/utils/template-generator/templates/service-hook.template.d.ts +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"template-generators.js","sourceRoot":"","sources":["../../../../../src/utils/cli/utils/template-generators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,6DAA6D,CAAC;AACzG,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AACxF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC;AAC1F,OAAO,0BAA0B,MAAM,8DAA8D,CAAC;AACtG,OAAO,kBAAkB,MAAM,qDAAqD,CAAC;AACrF,OAAO,kBAAkB,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AACxF,OAAO,EAAE,yBAAyB,EAAE,MAAM,oDAAoD,CAAC;AAC/F,OAAO,EAAE,2BAA2B,EAAE,MAAM,sDAAsD,CAAC;AAoBnG,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,OAAwB;IAExB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,YAAY;YACf,OAAO,0BAA0B,CAAC,OAAO,CAAC,CAAC;QAC7C,KAAK,SAAS;YACZ,OAAO,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAC1C,KAAK,QAAQ;YACX,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACzC,KAAK,QAAQ;YACX,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACzC,KAAK,YAAY;YACf,OAAO,yBAAyB,CAAC,OAAO,CAAC,CAAC;QAC5C,KAAK,cAAc;YACjB,OAAO,2BAA2B,CAAC,OAAO,CAAC,CAAC;QAE9C,KAAK,eAAe;YAClB,OAAO,kBAAkB,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC1D,KAAK,eAAe;YAClB,OAAO,kBAAkB,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC1D,KAAK,QAAQ;YACX,OAAO,kBAAkB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACxD,KAAK,cAAc;YACjB,OAAO,kBAAkB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAEzD,KAAK,YAAY;YACf,OAAO,0BAA0B,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC/D,KAAK,YAAY;YACf,OAAO,0BAA0B,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC/D,KAAK,KAAK;YACR,OAAO,0BAA0B,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC7D,KAAK,WAAW;YACd,OAAO,0BAA0B,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAE9D,KAAK,cAAc;YACjB,OAAO,kBAAkB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAEzD,KAAK,cAAc;YACjB,OAAO,kBAAkB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACzD,KAAK,eAAe;YAClB,OAAO,kBAAkB,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC1D,KAAK,kBAAkB;YACrB,OAAO,kBAAkB,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAC5D,KAAK,wBAAwB;YAC3B,OAAO,kBAAkB,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC;QAClE,KAAK,WAAW;YACd,OAAO,0BAA0B,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC9D,KAAK,YAAY;YACf,OAAO,0BAA0B,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC/D,KAAK,eAAe;YAClB,OAAO,0BAA0B,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACjE,KAAK,qBAAqB;YACxB,OAAO,0BAA0B,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;QAEvE;YACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC","sourcesContent":["import { generateControllerTemplate } from \"./template-generator/templates/generate-controller-template\";\nimport { generateRouterTemplate } from \"./template-generator/templates/router-template\";\nimport { generateServiceTemplate } from \"./template-generator/templates/service-template\";\nimport classValidatorDtoGenerator from \"./template-generator/templates/class-validator-dto-generator\";\nimport zodSchemaGenerator from \"./template-generator/templates/zod-schema-generator\";\nimport prismaSchemaParser from \"../../prisma/prisma-schema-parser\";\nimport { generatePolicyTemplate } from \"./template-generator/templates/policy-template\";\nimport { generateRouteHookTemplate } from \"./template-generator/templates/route-hook.template\";\nimport { generateServiceHookTemplate } from \"./template-generator/templates/service-hook.template\";\n\ninterface ModelName {\n pascal: string;\n camel: string;\n kebab: string;\n}\n\ninterface MiddlewareName {\n pascal: string;\n camel: string;\n kebab: string;\n}\n\nexport interface TemplateOptions {\n modelName: ModelName;\n middlewareName?: MiddlewareName;\n imports?: Record<string, string>;\n}\n\nexport function generateTemplate(\n type: string,\n options: TemplateOptions\n): string {\n switch (type) {\n case \"controller\":\n return generateControllerTemplate(options);\n case \"service\":\n return generateServiceTemplate(options);\n case \"router\":\n return generateRouterTemplate(options);\n case \"policy\":\n return generatePolicyTemplate(options);\n case \"route-hook\":\n return generateRouteHookTemplate(options);\n case \"service-hook\":\n return generateServiceHookTemplate(options);\n\n case \"create-schema\":\n return zodSchemaGenerator.generateCreateSchema(options);\n case \"update-schema\":\n return zodSchemaGenerator.generateUpdateSchema(options);\n case \"schema\":\n return zodSchemaGenerator.generateBaseSchema(options);\n case \"query-schema\":\n return zodSchemaGenerator.generateQuerySchema(options);\n\n case \"create-dto\":\n return classValidatorDtoGenerator.generateCreateDto(options);\n case \"update-dto\":\n return classValidatorDtoGenerator.generateUpdateDto(options);\n case \"dto\":\n return classValidatorDtoGenerator.generateBaseDto(options);\n case \"query-dto\":\n return classValidatorDtoGenerator.generateQueryDto(options);\n\n case \"prisma-model\":\n return prismaSchemaParser.generatePrismaModel(options);\n\n case \"login-schema\":\n return zodSchemaGenerator.generateLoginSchema(options);\n case \"signup-schema\":\n return zodSchemaGenerator.generateSignupSchema(options);\n case \"update-me-schema\":\n return zodSchemaGenerator.generateUpdateMeSchema(options);\n case \"update-password-schema\":\n return zodSchemaGenerator.generateUpdatePasswordSchema(options);\n case \"login-dto\":\n return classValidatorDtoGenerator.generateLoginDto(options);\n case \"signup-dto\":\n return classValidatorDtoGenerator.generateSignupDto(options);\n case \"update-me-dto\":\n return classValidatorDtoGenerator.generateUpdateMeDto(options);\n case \"update-password-dto\":\n return classValidatorDtoGenerator.generateUpdatePasswordDto(options);\n\n default:\n throw new Error(`Unknown template type: ${type}`);\n }\n}\n"]}
1
+ {"version":3,"file":"template-generators.js","sourceRoot":"","sources":["../../../../../src/utils/cli/utils/template-generators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,6DAA6D,CAAC;AACzG,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AACxF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC;AAC1F,OAAO,0BAA0B,MAAM,8DAA8D,CAAC;AACtG,OAAO,kBAAkB,MAAM,qDAAqD,CAAC;AACrF,OAAO,kBAAkB,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AAoBxF,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,OAAwB;IAExB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,YAAY;YACf,OAAO,0BAA0B,CAAC,OAAO,CAAC,CAAC;QAC7C,KAAK,SAAS;YACZ,OAAO,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAC1C,KAAK,QAAQ;YACX,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACzC,KAAK,QAAQ;YACX,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAEzC,KAAK,eAAe;YAClB,OAAO,kBAAkB,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC1D,KAAK,eAAe;YAClB,OAAO,kBAAkB,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC1D,KAAK,QAAQ;YACX,OAAO,kBAAkB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACxD,KAAK,cAAc;YACjB,OAAO,kBAAkB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAEzD,KAAK,YAAY;YACf,OAAO,0BAA0B,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC/D,KAAK,YAAY;YACf,OAAO,0BAA0B,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC/D,KAAK,KAAK;YACR,OAAO,0BAA0B,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC7D,KAAK,WAAW;YACd,OAAO,0BAA0B,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAE9D,KAAK,cAAc;YACjB,OAAO,kBAAkB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAEzD,KAAK,cAAc;YACjB,OAAO,kBAAkB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACzD,KAAK,eAAe;YAClB,OAAO,kBAAkB,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC1D,KAAK,kBAAkB;YACrB,OAAO,kBAAkB,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAC5D,KAAK,wBAAwB;YAC3B,OAAO,kBAAkB,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC;QAClE,KAAK,WAAW;YACd,OAAO,0BAA0B,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC9D,KAAK,YAAY;YACf,OAAO,0BAA0B,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC/D,KAAK,eAAe;YAClB,OAAO,0BAA0B,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACjE,KAAK,qBAAqB;YACxB,OAAO,0BAA0B,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;QAEvE;YACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC","sourcesContent":["import { generateControllerTemplate } from \"./template-generator/templates/generate-controller-template\";\nimport { generateRouterTemplate } from \"./template-generator/templates/router-template\";\nimport { generateServiceTemplate } from \"./template-generator/templates/service-template\";\nimport classValidatorDtoGenerator from \"./template-generator/templates/class-validator-dto-generator\";\nimport zodSchemaGenerator from \"./template-generator/templates/zod-schema-generator\";\nimport prismaSchemaParser from \"../../prisma/prisma-schema-parser\";\nimport { generatePolicyTemplate } from \"./template-generator/templates/policy-template\";\n\ninterface ModelName {\n pascal: string;\n camel: string;\n kebab: string;\n}\n\ninterface MiddlewareName {\n pascal: string;\n camel: string;\n kebab: string;\n}\n\nexport interface TemplateOptions {\n modelName: ModelName;\n middlewareName?: MiddlewareName;\n imports?: Record<string, string>;\n}\n\nexport function generateTemplate(\n type: string,\n options: TemplateOptions\n): string {\n switch (type) {\n case \"controller\":\n return generateControllerTemplate(options);\n case \"service\":\n return generateServiceTemplate(options);\n case \"router\":\n return generateRouterTemplate(options);\n case \"policy\":\n return generatePolicyTemplate(options);\n\n case \"create-schema\":\n return zodSchemaGenerator.generateCreateSchema(options);\n case \"update-schema\":\n return zodSchemaGenerator.generateUpdateSchema(options);\n case \"schema\":\n return zodSchemaGenerator.generateBaseSchema(options);\n case \"query-schema\":\n return zodSchemaGenerator.generateQuerySchema(options);\n\n case \"create-dto\":\n return classValidatorDtoGenerator.generateCreateDto(options);\n case \"update-dto\":\n return classValidatorDtoGenerator.generateUpdateDto(options);\n case \"dto\":\n return classValidatorDtoGenerator.generateBaseDto(options);\n case \"query-dto\":\n return classValidatorDtoGenerator.generateQueryDto(options);\n\n case \"prisma-model\":\n return prismaSchemaParser.generatePrismaModel(options);\n\n case \"login-schema\":\n return zodSchemaGenerator.generateLoginSchema(options);\n case \"signup-schema\":\n return zodSchemaGenerator.generateSignupSchema(options);\n case \"update-me-schema\":\n return zodSchemaGenerator.generateUpdateMeSchema(options);\n case \"update-password-schema\":\n return zodSchemaGenerator.generateUpdatePasswordSchema(options);\n case \"login-dto\":\n return classValidatorDtoGenerator.generateLoginDto(options);\n case \"signup-dto\":\n return classValidatorDtoGenerator.generateSignupDto(options);\n case \"update-me-dto\":\n return classValidatorDtoGenerator.generateUpdateMeDto(options);\n case \"update-password-dto\":\n return classValidatorDtoGenerator.generateUpdatePasswordDto(options);\n\n default:\n throw new Error(`Unknown template type: ${type}`);\n }\n}\n"]}
@@ -1,8 +1,13 @@
1
+ import { getUserFileExtension } from "./helpers/fs.helpers.js";
1
2
  export function defineConfig(config) {
2
3
  const finalConfig = {
3
4
  welcomeMessage: "Welcome to our RESTful API generated by Arkos, find out more about Arkos at www.arkosjs.com",
4
5
  globalPrefix: "/api",
5
6
  ...config,
7
+ source: {
8
+ entryPoint: `src/app.${getUserFileExtension()}`,
9
+ ...config.source,
10
+ },
6
11
  port: config.port ||
7
12
  Number(process.env.__PORT || process.env.CLI_PORT || process.env.PORT) ||
8
13
  8000,
@@ -1 +1 @@
1
- {"version":3,"file":"define-config.js","sourceRoot":"","sources":["../../../src/utils/define-config.ts"],"names":[],"mappings":"AAsBA,MAAM,UAAU,YAAY,CAAC,MAAmB;IAgB9C,MAAM,WAAW,GAAyB;QACxC,cAAc,EACZ,6FAA6F;QAC/F,YAAY,EAAE,MAAM;QACpB,GAAG,MAAM;QACT,IAAI,EACF,MAAM,CAAC,IAAI;YACX,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACtE,IAAI;QACN,IAAI,EACF,MAAM,CAAC,IAAI;YACX,OAAO,CAAC,GAAG,CAAC,MAAM;YAClB,OAAO,CAAC,GAAG,CAAC,QAAQ;YACpB,OAAO,CAAC,GAAG,CAAC,IAAI;YAChB,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;QAChE,OAAO,EAAE;YACP,GAAG,MAAM,CAAC,OAAO;YACjB,UAAU,EAAE;gBACV,gCAAgC,EAC9B,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,gCAAgC,IAAI,KAAK;gBACvE,GAAG,MAAM,CAAC,OAAO,EAAE,UAAU;aAC9B;SACF;QACD,UAAU,EAAE;YACV,aAAa,EAAE,SAAS;YACxB,SAAS,EAAE,cAAc;YACzB,GAAG,MAAM,CAAC,UAAU;SACrB;QACD,OAAO,EAAE;YACP,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,SAAS;YAC3C,GAAG,MAAM,CAAC,OAAO;SAClB;QACD,WAAW,EAAE;YACX,GAAG,MAAM,CAAC,WAAW;SACtB;QACD,OAAO,EAAE;YACP,GAAG,MAAM,EAAE,OAAO;YAClB,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,KAAK,KAAK;YAC7D,YAAY,EACV,OAAO,MAAM,EAAE,OAAO,EAAE,YAAY,KAAK,SAAS;gBAChD,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY;gBAC/B,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB,KAAK,KAAK;oBAC3C,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM;oBACpC,CAAC,CAAC,KAAK;SACd;QACD,SAAS,EAAE;YACT,QAAQ,EAAE;gBACR,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC;gBAC7C,GAAG,MAAM,CAAC,SAAS,EAAE,QAAQ;aAC9B;SACF;KACF,CAAC;IAED,WAAmB,CAAC,QAAQ,GAAG,cAAc,CAAC;IAE/C,OAAO,WAAkB,CAAC;AAC5B,CAAC","sourcesContent":["import { ArkosConfig } from \"../exports\";\n// import { PrismaClient } from \"../generated\";\nimport ExitError from \"./helpers/exit-error\";\n\n/**\n * Defines and validates the Arkos configuration, filling in defaults where needed.\n * Use this in your `arkos.config.ts` to get full type safety and autocompletion.\n *\n * @example\n * ```ts\n * // arkos.config.ts\n * import prisma from \"./src/utils/prisma\";\n * import { defineConfig } from \"arkos\";\n *\n * export default defineConfig({\n * prisma: { instance: prisma },\n * globalPrefix: \"/api\",\n * });\n * ```\n *\n * @see {@link https://www.arkosjs.com/docs/reference/define-config}\n */\nexport function defineConfig(config: ArkosConfig): ArkosConfig {\n // if (!config.prisma?.instance && typeof jest === \"undefined\") {\n // throw ExitError(\n // \"ArkosConfigError: prisma.instance is required. Pass your PrismaClient instance via defineConfig({ prisma: { instance: new PrismaClient() } }).\"\n // );\n // }\n\n // if (\n // !(config.prisma?.instance instanceof PrismaClient) &&\n // typeof jest === \"undefined\"\n // ) {\n // throw ExitError(\n // \"ArkosConfigError: prisma.instance must be a valid PrismaClient instance.\"\n // );\n // }\n\n const finalConfig: Partial<ArkosConfig> = {\n welcomeMessage:\n \"Welcome to our RESTful API generated by Arkos, find out more about Arkos at www.arkosjs.com\",\n globalPrefix: \"/api\",\n ...config,\n port:\n config.port ||\n Number(process.env.__PORT || process.env.CLI_PORT || process.env.PORT) ||\n 8000,\n host:\n config.host ||\n process.env.__HOST ||\n process.env.CLI_HOST ||\n process.env.HOST ||\n (process.env.ARKOS_BUILD !== \"true\" ? \"0.0.0.0\" : \"127.0.0.1\"),\n request: {\n ...config.request,\n parameters: {\n allowDangerousPrismaQueryOptions:\n config.request?.parameters?.allowDangerousPrismaQueryOptions ?? false,\n ...config.request?.parameters,\n },\n },\n fileUpload: {\n baseUploadDir: \"uploads\",\n baseRoute: \"/api/uploads\",\n ...config.fileUpload,\n },\n routers: {\n strict: config.routers?.strict || \"no-bulk\",\n ...config.routers,\n },\n middlewares: {\n ...config.middlewares,\n },\n swagger: {\n ...config?.swagger,\n enableAfterBuild: config?.swagger?.enableAfterBuild !== false,\n authenticate:\n typeof config?.swagger?.authenticate === \"boolean\"\n ? config?.swagger?.authenticate\n : config?.swagger?.enableAfterBuild !== false\n ? process.env.ARKOS_BUILD === \"true\"\n : false,\n },\n debugging: {\n requests: {\n level: config.debugging?.requests?.level || 1,\n ...config.debugging?.requests,\n },\n },\n };\n\n (finalConfig as any).__loader = \"defineConfig\";\n\n return finalConfig as any;\n}\n\nexport type UserArkosConfig = ReturnType<typeof defineConfig> & {\n __loader: \"defineConfig\";\n};\n"]}
1
+ {"version":3,"file":"define-config.js","sourceRoot":"","sources":["../../../src/utils/define-config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAoB5D,MAAM,UAAU,YAAY,CAAC,MAAmB;IAgB9C,MAAM,WAAW,GAAyB;QACxC,cAAc,EACZ,6FAA6F;QAC/F,YAAY,EAAE,MAAM;QACpB,GAAG,MAAM;QACT,MAAM,EAAE;YACN,UAAU,EAAE,WAAW,oBAAoB,EAAE,EAAE;YAC/C,GAAG,MAAM,CAAC,MAAM;SACjB;QACD,IAAI,EACF,MAAM,CAAC,IAAI;YACX,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACtE,IAAI;QACN,IAAI,EACF,MAAM,CAAC,IAAI;YACX,OAAO,CAAC,GAAG,CAAC,MAAM;YAClB,OAAO,CAAC,GAAG,CAAC,QAAQ;YACpB,OAAO,CAAC,GAAG,CAAC,IAAI;YAChB,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;QAChE,OAAO,EAAE;YACP,GAAG,MAAM,CAAC,OAAO;YACjB,UAAU,EAAE;gBACV,gCAAgC,EAC9B,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,gCAAgC,IAAI,KAAK;gBACvE,GAAG,MAAM,CAAC,OAAO,EAAE,UAAU;aAC9B;SACF;QACD,UAAU,EAAE;YACV,aAAa,EAAE,SAAS;YACxB,SAAS,EAAE,cAAc;YACzB,GAAG,MAAM,CAAC,UAAU;SACrB;QACD,OAAO,EAAE;YACP,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,SAAS;YAC3C,GAAG,MAAM,CAAC,OAAO;SAClB;QACD,WAAW,EAAE;YACX,GAAG,MAAM,CAAC,WAAW;SACtB;QACD,OAAO,EAAE;YACP,GAAG,MAAM,EAAE,OAAO;YAClB,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,KAAK,KAAK;YAC7D,YAAY,EACV,OAAO,MAAM,EAAE,OAAO,EAAE,YAAY,KAAK,SAAS;gBAChD,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY;gBAC/B,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB,KAAK,KAAK;oBAC3C,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM;oBACpC,CAAC,CAAC,KAAK;SACd;QACD,SAAS,EAAE;YACT,QAAQ,EAAE;gBACR,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC;gBAC7C,GAAG,MAAM,CAAC,SAAS,EAAE,QAAQ;aAC9B;SACF;KACF,CAAC;IAED,WAAmB,CAAC,QAAQ,GAAG,cAAc,CAAC;IAE/C,OAAO,WAAkB,CAAC;AAC5B,CAAC","sourcesContent":["import { ArkosConfig } from \"../exports\";\n// import { PrismaClient } from \"../generated\";\n// import ExitError from \"./helpers/exit-error\";\nimport { getUserFileExtension } from \"./helpers/fs.helpers\";\n\n/**\n * Defines and validates the Arkos configuration, filling in defaults where needed.\n * Use this in your `arkos.config.ts` to get full type safety and autocompletion.\n *\n * @example\n * ```ts\n * // arkos.config.ts\n * import prisma from \"./src/utils/prisma\";\n * import { defineConfig } from \"arkos\";\n *\n * export default defineConfig({\n * prisma: { instance: prisma },\n * globalPrefix: \"/api\",\n * });\n * ```\n *\n * @see {@link https://www.arkosjs.com/docs/reference/define-config}\n */\nexport function defineConfig(config: ArkosConfig): ArkosConfig {\n // if (!config.prisma?.instance && typeof jest === \"undefined\") {\n // throw ExitError(\n // \"ArkosConfigError: prisma.instance is required. Pass your PrismaClient instance via defineConfig({ prisma: { instance: new PrismaClient() } }).\"\n // );\n // }\n\n // if (\n // !(config.prisma?.instance instanceof PrismaClient) &&\n // typeof jest === \"undefined\"\n // ) {\n // throw ExitError(\n // \"ArkosConfigError: prisma.instance must be a valid PrismaClient instance.\"\n // );\n // }\n\n const finalConfig: Partial<ArkosConfig> = {\n welcomeMessage:\n \"Welcome to our RESTful API generated by Arkos, find out more about Arkos at www.arkosjs.com\",\n globalPrefix: \"/api\",\n ...config,\n source: {\n entryPoint: `src/app.${getUserFileExtension()}`,\n ...config.source,\n },\n port:\n config.port ||\n Number(process.env.__PORT || process.env.CLI_PORT || process.env.PORT) ||\n 8000,\n host:\n config.host ||\n process.env.__HOST ||\n process.env.CLI_HOST ||\n process.env.HOST ||\n (process.env.ARKOS_BUILD !== \"true\" ? \"0.0.0.0\" : \"127.0.0.1\"),\n request: {\n ...config.request,\n parameters: {\n allowDangerousPrismaQueryOptions:\n config.request?.parameters?.allowDangerousPrismaQueryOptions ?? false,\n ...config.request?.parameters,\n },\n },\n fileUpload: {\n baseUploadDir: \"uploads\",\n baseRoute: \"/api/uploads\",\n ...config.fileUpload,\n },\n routers: {\n strict: config.routers?.strict || \"no-bulk\",\n ...config.routers,\n },\n middlewares: {\n ...config.middlewares,\n },\n swagger: {\n ...config?.swagger,\n enableAfterBuild: config?.swagger?.enableAfterBuild !== false,\n authenticate:\n typeof config?.swagger?.authenticate === \"boolean\"\n ? config?.swagger?.authenticate\n : config?.swagger?.enableAfterBuild !== false\n ? process.env.ARKOS_BUILD === \"true\"\n : false,\n },\n debugging: {\n requests: {\n level: config.debugging?.requests?.level || 1,\n ...config.debugging?.requests,\n },\n },\n };\n\n (finalConfig as any).__loader = \"defineConfig\";\n\n return finalConfig as any;\n}\n\nexport type UserArkosConfig = ReturnType<typeof defineConfig> & {\n __loader: \"defineConfig\";\n};\n"]}
@@ -35,12 +35,6 @@ export function loadEnvironmentVariables() {
35
35
  processEnv: mergedParsed,
36
36
  });
37
37
  Object.assign(process.env, expanded.parsed || mergedParsed);
38
- const requiredVars = ["DATABASE_URL"];
39
- const missingVars = requiredVars.filter((varName) => !process.env[varName]);
40
- if (missingVars.length > 0) {
41
- console.error("Missing required environment variables:", missingVars.join(", "));
42
- throw new Error(`Missing required environment variables: ${missingVars.join(", ")}`);
43
- }
44
38
  return existingEnvFiles.reverse();
45
39
  }
46
40
  //# sourceMappingURL=dotenv.helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dotenv.helpers.js","sourceRoot":"","sources":["../../../src/utils/dotenv.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAUzC,MAAM,UAAU,wBAAwB;IACtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IACjC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,MAAM,QAAQ,GAAG;QACf,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC;QAC/B,GAAG,CAAC,GAAG;YACL,CAAC,CAAC;gBACE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,EAAE,CAAC;gBAChC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,QAAQ,CAAC;aACvC;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IAEF,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,IAAI,YAAY,GAA2B,EAAE,CAAC;IAE9C,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC5B,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtE,IAAI,CAAC,IAAI,CACP,sBAAsB,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,2BAA2B,CAC5F,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACvD,YAAY,GAAG,EAAE,GAAG,YAAY,EAAE,GAAG,MAAM,EAAE,CAAC;gBAC9C,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,SAAS,CAAC;QACzB,MAAM,EAAE,YAAY;QACpB,UAAU,EAAE,YAAY;KACzB,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,IAAI,YAAY,CAAC,CAAC;IAE5D,MAAM,YAAY,GAAG,CAAC,cAAc,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAE5E,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CACX,yCAAyC,EACzC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CACvB,CAAC;QACF,MAAM,IAAI,KAAK,CACb,2CAA2C,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpE,CAAC;IACJ,CAAC;IAED,OAAO,gBAAgB,CAAC,OAAO,EAAE,CAAC;AACpC,CAAC","sourcesContent":["import path from \"path\";\nimport fs from \"fs\";\nimport dotenv from \"dotenv\";\nimport sheu from \"./sheu\";\nimport { expandEnv } from \"./expand-env\";\n\n/**\n * Loads and expands environment variables in a prioritized order\n *\n * 1. Main .env file (.env)\n * 2. Local environment overrides (.env.local)\n * 3. Environment-specific (.env.{NODE_ENV})\n * 5. Environment-specific local (.env.{NODE_ENV}.local)\n */\nexport function loadEnvironmentVariables() {\n const ENV = process.env.NODE_ENV;\n const cwd = process.cwd();\n\n const envFiles = [\n path.resolve(cwd, \".env\"),\n path.resolve(cwd, \".env.local\"),\n ...(ENV\n ? [\n path.resolve(cwd, `.env.${ENV}`),\n path.resolve(cwd, `.env.${ENV}.local`),\n ]\n : []),\n ];\n\n const existingEnvFiles: string[] = [];\n let mergedParsed: Record<string, string> = {};\n\n envFiles.forEach((filePath) => {\n if (fs.existsSync(filePath)) {\n if (process.env.ARKOS_BUILD === \"true\" && filePath.endsWith(\".local\")) {\n sheu.warn(\n `Skipping the local ${filePath.replace(cwd, \"\").replace(\"/\", \"\")} file in production build`\n );\n } else {\n const parsed = dotenv.parse(fs.readFileSync(filePath));\n mergedParsed = { ...mergedParsed, ...parsed };\n existingEnvFiles.push(filePath);\n }\n }\n });\n\n const expanded = expandEnv({\n parsed: mergedParsed,\n processEnv: mergedParsed,\n });\n\n Object.assign(process.env, expanded.parsed || mergedParsed);\n\n const requiredVars = [\"DATABASE_URL\"];\n const missingVars = requiredVars.filter((varName) => !process.env[varName]);\n\n if (missingVars.length > 0) {\n console.error(\n \"Missing required environment variables:\",\n missingVars.join(\", \")\n );\n throw new Error(\n `Missing required environment variables: ${missingVars.join(\", \")}`\n );\n }\n\n return existingEnvFiles.reverse();\n}\n"]}
1
+ {"version":3,"file":"dotenv.helpers.js","sourceRoot":"","sources":["../../../src/utils/dotenv.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAUzC,MAAM,UAAU,wBAAwB;IACtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IACjC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,MAAM,QAAQ,GAAG;QACf,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC;QAC/B,GAAG,CAAC,GAAG;YACL,CAAC,CAAC;gBACE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,EAAE,CAAC;gBAChC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,QAAQ,CAAC;aACvC;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IAEF,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,IAAI,YAAY,GAA2B,EAAE,CAAC;IAE9C,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC5B,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtE,IAAI,CAAC,IAAI,CACP,sBAAsB,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,2BAA2B,CAC5F,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACvD,YAAY,GAAG,EAAE,GAAG,YAAY,EAAE,GAAG,MAAM,EAAE,CAAC;gBAC9C,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,SAAS,CAAC;QACzB,MAAM,EAAE,YAAY;QACpB,UAAU,EAAE,YAAY;KACzB,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,IAAI,YAAY,CAAC,CAAC;IAE5D,OAAO,gBAAgB,CAAC,OAAO,EAAE,CAAC;AACpC,CAAC","sourcesContent":["import path from \"path\";\nimport fs from \"fs\";\nimport dotenv from \"dotenv\";\nimport sheu from \"./sheu\";\nimport { expandEnv } from \"./expand-env\";\n\n/**\n * Loads and expands environment variables in a prioritized order\n *\n * 1. Main .env file (.env)\n * 2. Local environment overrides (.env.local)\n * 3. Environment-specific (.env.{NODE_ENV})\n * 5. Environment-specific local (.env.{NODE_ENV}.local)\n */\nexport function loadEnvironmentVariables() {\n const ENV = process.env.NODE_ENV;\n const cwd = process.cwd();\n\n const envFiles = [\n path.resolve(cwd, \".env\"),\n path.resolve(cwd, \".env.local\"),\n ...(ENV\n ? [\n path.resolve(cwd, `.env.${ENV}`),\n path.resolve(cwd, `.env.${ENV}.local`),\n ]\n : []),\n ];\n\n const existingEnvFiles: string[] = [];\n let mergedParsed: Record<string, string> = {};\n\n envFiles.forEach((filePath) => {\n if (fs.existsSync(filePath)) {\n if (process.env.ARKOS_BUILD === \"true\" && filePath.endsWith(\".local\")) {\n sheu.warn(\n `Skipping the local ${filePath.replace(cwd, \"\").replace(\"/\", \"\")} file in production build`\n );\n } else {\n const parsed = dotenv.parse(fs.readFileSync(filePath));\n mergedParsed = { ...mergedParsed, ...parsed };\n existingEnvFiles.push(filePath);\n }\n }\n });\n\n const expanded = expandEnv({\n parsed: mergedParsed,\n processEnv: mergedParsed,\n });\n\n Object.assign(process.env, expanded.parsed || mergedParsed);\n\n return existingEnvFiles.reverse();\n}\n"]}
@@ -22,6 +22,7 @@ export default class APIFeatures {
22
22
  "prismaQueryOptions",
23
23
  "ignoredFields",
24
24
  "select",
25
+ "orderBy",
25
26
  "omit",
26
27
  ];
27
28
  if (req) {
@@ -113,13 +114,30 @@ export default class APIFeatures {
113
114
  return this;
114
115
  }
115
116
  sort() {
117
+ const reqOrderBy = this.req?.query.orderBy;
118
+ const normalizeOrderBy = (orderBy) => {
119
+ if (!orderBy)
120
+ return [];
121
+ if (Array.isArray(orderBy))
122
+ return orderBy;
123
+ if (typeof orderBy === "object")
124
+ return [orderBy];
125
+ return [];
126
+ };
116
127
  if (this.searchParams.sort) {
117
- const sortBy = this.searchParams?.sort
118
- ?.split(",")
119
- ?.map((field) => ({
120
- [field.startsWith("-") ? field.substring(1) : field]: field.startsWith("-") ? "desc" : "asc",
128
+ const sortBy = this.searchParams.sort.split(",").map((field) => ({
129
+ [field.startsWith("-") ? field.substring(1) : field]: field.startsWith("-")
130
+ ? "desc"
131
+ : "asc",
121
132
  }));
122
- this.filters = deepmerge(this.filters, { orderBy: sortBy });
133
+ const reqOrderByArray = normalizeOrderBy(reqOrderBy);
134
+ const result = reqOrderByArray.length
135
+ ? [...sortBy, ...reqOrderByArray]
136
+ : sortBy;
137
+ this.filters = deepmerge(this.filters, { orderBy: result });
138
+ }
139
+ else {
140
+ this.filters.orderBy = reqOrderBy;
123
141
  }
124
142
  return this;
125
143
  }
@@ -1 +1 @@
1
- {"version":3,"file":"api.features.js","sourceRoot":"","sources":["../../../../src/utils/features/api.features.ts"],"names":[],"mappings":"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","sourcesContent":["import { Request } from \"express\";\nimport deepmerge from \"../helpers/deepmerge.helper\";\nimport { parseQueryParamsWithModifiers } from \"../helpers/api.features.helpers\";\nimport AppError from \"../../modules/error-handler/utils/app-error\";\nimport { getPrismaInstance } from \"../helpers/prisma.helpers\";\nimport { ArkosRequest } from \"../../types\";\nimport debuggerService from \"../../modules/debugger/debugger.service\";\n\ntype ModelName = string;\n\nexport default class APIFeatures {\n req?: ArkosRequest;\n searchParams: any;\n searchParamsWithModifiers: any;\n filters: Record<string, any> = {};\n reqFiltersSearchParam: any = {};\n modelName?: ModelName;\n excludedFields = [\n \"page\",\n \"filters\",\n \"sort\",\n \"limit\",\n \"fields\",\n \"addFields\",\n \"removeFields\",\n \"search\",\n \"include\",\n \"filterMode\",\n \"where\",\n \"prismaQueryOptions\",\n \"ignoredFields\",\n \"select\",\n \"omit\",\n ];\n\n constructor(req?: Request, modelName?: ModelName) {\n if (req) {\n const { filters = \"{}\", ...restOfQuery } = req.query;\n this.req = req;\n\n let parsedFilters = {};\n try {\n parsedFilters = JSON.parse(filters as string);\n } catch (error) {\n throw new AppError(\"Invalid req.query.filters JSON format\", 400);\n }\n\n this.searchParams = deepmerge(\n parseQueryParamsWithModifiers(restOfQuery),\n parseQueryParamsWithModifiers(parsedFilters)\n );\n\n debuggerService.handleTransformedQueryLog(this.searchParams);\n }\n\n if (modelName) this.modelName = modelName;\n this.filters = { ...this.filters };\n }\n\n filter() {\n if (!this.req)\n throw new Error(\n \"Trying to use APIFeatures.filter() without passing request on class constructor or APIFeatures.setup() method.\"\n );\n\n const searchableFields: Record<string, any>[] = [];\n const queryObj = { ...this.searchParams };\n\n this.excludedFields.forEach((el) => delete queryObj[el]);\n\n const topLevelOR = queryObj.OR;\n const topLevelAND = queryObj.AND;\n delete queryObj.OR;\n delete queryObj.AND;\n\n const whereObj = { ...this.req.params, ...queryObj };\n const whereLogicalOperatorFilters = Object.keys(whereObj).map((key) => ({\n [key]: whereObj[key],\n }));\n\n let whereOptions: any = {};\n\n if (whereLogicalOperatorFilters.length > 0) {\n whereOptions = {\n [(this.req.query?.filterMode as string) ?? \"OR\"]:\n whereLogicalOperatorFilters,\n };\n }\n\n if (topLevelOR) {\n if (whereOptions.OR) {\n whereOptions.OR = [...whereOptions.OR, ...topLevelOR];\n } else {\n whereOptions.OR = topLevelOR;\n }\n }\n\n if (topLevelAND) {\n if (whereOptions.AND) {\n whereOptions.AND = [...whereOptions.AND, ...topLevelAND];\n } else {\n whereOptions.AND = topLevelAND;\n }\n }\n\n if (!!this.searchParams.search) {\n const prisma = getPrismaInstance();\n\n if (!this.modelName)\n throw new Error(\"Model name is required for search functionality\");\n\n if (!prisma[this.modelName] || !prisma[this.modelName].fields)\n throw new Error(`Model '${this.modelName}' not found or has no fields`);\n\n Object.keys((prisma as any)[this.modelName].fields).forEach((key) => {\n const field = ((prisma as any)[this.modelName!].fields as any)[key];\n if (\n field?.typeName === \"String\" &&\n key !== \"id\" &&\n key !== \"password\" &&\n !field.isList &&\n !key?.includes?.(\"Id\") &&\n !key?.includes?.(\"ID\")\n ) {\n searchableFields.push({\n [`${key}`]: {\n contains: this.searchParams.search,\n mode: \"insensitive\",\n },\n });\n }\n });\n\n if (searchableFields.length > 0) {\n whereOptions = deepmerge(\n {\n OR: searchableFields,\n },\n whereOptions\n );\n }\n }\n\n const firstMerge = deepmerge(\n {\n where: whereOptions,\n },\n this.req.prismaQueryOptions || {}\n );\n\n this.filters = deepmerge(firstMerge, this.filters);\n this.searchParams = deepmerge(\n this.searchParams || {},\n this.req.prismaQueryOptions || {}\n );\n\n return this;\n }\n\n sort() {\n if (this.searchParams.sort) {\n const sortBy = this.searchParams?.sort\n ?.split(\",\")\n ?.map((field: string) => ({\n [field.startsWith(\"-\") ? field.substring(1) : field]:\n field.startsWith(\"-\") ? \"desc\" : \"asc\",\n }));\n this.filters = deepmerge(this.filters, { orderBy: sortBy });\n }\n\n return this;\n }\n\n limitFields() {\n let finalSelect: Record<string, any> = {};\n let finalInclude: Record<string, any> = {};\n let finalOmit: Record<string, any> = {};\n\n if (this.searchParams?.fields) {\n const fields = this.searchParams.fields.split(\",\");\n\n const regularFields = fields.filter(\n (field: string) => !field.startsWith(\"+\") && !field.startsWith(\"-\")\n );\n const includeFields = fields\n .filter((field: string) => field.startsWith(\"+\"))\n .map((field: string) => field.substring(1));\n const excludeFields = fields\n .filter((field: string) => field.startsWith(\"-\"))\n .map((field: string) => field.substring(1));\n\n if (regularFields.length > 0) {\n finalSelect = regularFields.reduce(\n (acc: Record<string, any>, field: string) => {\n acc[field] = true;\n return acc;\n },\n {} as Record<string, any>\n );\n }\n\n includeFields.forEach((field: string) => {\n finalInclude[field] = true;\n });\n\n excludeFields.forEach((field: string) => {\n finalOmit[field] = true;\n });\n }\n\n if (this.searchParams.include || this.filters.include)\n finalInclude = deepmerge(\n finalInclude,\n deepmerge(this.filters?.include || {}, this.searchParams?.include || {})\n );\n\n if (this.searchParams.select || this.filters.include)\n finalSelect = deepmerge(\n finalSelect,\n deepmerge(this.filters?.select || {}, this.searchParams?.select || {})\n );\n\n if (this.searchParams.omit || this.filters.omit)\n finalOmit = deepmerge(\n finalOmit,\n deepmerge(this.filters?.omit || {}, this.searchParams?.omit || {})\n );\n\n if (\n Object.keys(finalSelect).length > 0 &&\n Object.keys(finalInclude).length > 0\n ) {\n finalSelect = deepmerge(finalSelect, finalInclude);\n finalInclude = {};\n delete this.filters.include;\n delete this.searchParams.include;\n }\n\n if (Object.keys(finalSelect).length > 0) this.filters.select = finalSelect;\n\n if (Object.keys(finalInclude).length > 0)\n this.filters.include = finalInclude;\n\n if (Object.keys(finalOmit).length > 0) this.filters.omit = finalOmit;\n\n if (this.searchParams?.addFields || this.searchParams?.removeFields) {\n throw new AppError(\n \"The addFields and removeFields parameters are deprecated.\",\n 400\n );\n }\n\n return this;\n }\n\n paginate(): APIFeatures {\n const paginationOptions = (() => {\n if (this.searchParams.limit === \"all\") return {};\n\n const page = parseInt(this.searchParams.page, 10) || 1;\n const limit = parseInt(this.searchParams.limit, 10) || 30;\n const skip = (page - 1) * limit;\n\n return { skip, take: limit };\n })();\n\n this.filters = {\n ...this.filters,\n ...paginationOptions,\n };\n return this;\n }\n}\n"]}
1
+ {"version":3,"file":"api.features.js","sourceRoot":"","sources":["../../../../src/utils/features/api.features.ts"],"names":[],"mappings":"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","sourcesContent":["import { Request } from \"express\";\nimport deepmerge from \"../helpers/deepmerge.helper\";\nimport { parseQueryParamsWithModifiers } from \"../helpers/api.features.helpers\";\nimport AppError from \"../../modules/error-handler/utils/app-error\";\nimport { getPrismaInstance } from \"../helpers/prisma.helpers\";\nimport { ArkosRequest } from \"../../types\";\nimport debuggerService from \"../../modules/debugger/debugger.service\";\n\ntype ModelName = string;\n\nexport default class APIFeatures {\n req?: ArkosRequest;\n searchParams: any;\n searchParamsWithModifiers: any;\n filters: Record<string, any> = {};\n reqFiltersSearchParam: any = {};\n modelName?: ModelName;\n excludedFields = [\n \"page\",\n \"filters\",\n \"sort\",\n \"limit\",\n \"fields\",\n \"addFields\",\n \"removeFields\",\n \"search\",\n \"include\",\n \"filterMode\",\n \"where\",\n \"prismaQueryOptions\",\n \"ignoredFields\",\n \"select\",\n \"orderBy\",\n \"omit\",\n ];\n\n constructor(req?: Request, modelName?: ModelName) {\n if (req) {\n const { filters = \"{}\", ...restOfQuery } = req.query;\n this.req = req;\n\n let parsedFilters = {};\n try {\n parsedFilters = JSON.parse(filters as string);\n } catch (error) {\n throw new AppError(\"Invalid req.query.filters JSON format\", 400);\n }\n\n this.searchParams = deepmerge(\n parseQueryParamsWithModifiers(restOfQuery),\n parseQueryParamsWithModifiers(parsedFilters)\n );\n\n debuggerService.handleTransformedQueryLog(this.searchParams);\n }\n\n if (modelName) this.modelName = modelName;\n this.filters = { ...this.filters };\n }\n\n filter() {\n if (!this.req)\n throw new Error(\n \"Trying to use APIFeatures.filter() without passing request on class constructor or APIFeatures.setup() method.\"\n );\n\n const searchableFields: Record<string, any>[] = [];\n const queryObj = { ...this.searchParams };\n\n this.excludedFields.forEach((el) => delete queryObj[el]);\n\n const topLevelOR = queryObj.OR;\n const topLevelAND = queryObj.AND;\n delete queryObj.OR;\n delete queryObj.AND;\n\n const whereObj = { ...this.req.params, ...queryObj };\n const whereLogicalOperatorFilters = Object.keys(whereObj).map((key) => ({\n [key]: whereObj[key],\n }));\n\n let whereOptions: any = {};\n\n if (whereLogicalOperatorFilters.length > 0) {\n whereOptions = {\n [(this.req.query?.filterMode as string) ?? \"OR\"]:\n whereLogicalOperatorFilters,\n };\n }\n\n if (topLevelOR) {\n if (whereOptions.OR) {\n whereOptions.OR = [...whereOptions.OR, ...topLevelOR];\n } else {\n whereOptions.OR = topLevelOR;\n }\n }\n\n if (topLevelAND) {\n if (whereOptions.AND) {\n whereOptions.AND = [...whereOptions.AND, ...topLevelAND];\n } else {\n whereOptions.AND = topLevelAND;\n }\n }\n\n if (!!this.searchParams.search) {\n const prisma = getPrismaInstance();\n\n if (!this.modelName)\n throw new Error(\"Model name is required for search functionality\");\n\n if (!prisma[this.modelName] || !prisma[this.modelName].fields)\n throw new Error(`Model '${this.modelName}' not found or has no fields`);\n\n Object.keys((prisma as any)[this.modelName].fields).forEach((key) => {\n const field = ((prisma as any)[this.modelName!].fields as any)[key];\n if (\n field?.typeName === \"String\" &&\n key !== \"id\" &&\n key !== \"password\" &&\n !field.isList &&\n !key?.includes?.(\"Id\") &&\n !key?.includes?.(\"ID\")\n ) {\n searchableFields.push({\n [`${key}`]: {\n contains: this.searchParams.search,\n mode: \"insensitive\",\n },\n });\n }\n });\n\n if (searchableFields.length > 0) {\n whereOptions = deepmerge(\n {\n OR: searchableFields,\n },\n whereOptions\n );\n }\n }\n\n const firstMerge = deepmerge(\n {\n where: whereOptions,\n },\n this.req.prismaQueryOptions || {}\n );\n\n this.filters = deepmerge(firstMerge, this.filters);\n this.searchParams = deepmerge(\n this.searchParams || {},\n this.req.prismaQueryOptions || {}\n );\n\n return this;\n }\n\n sort() {\n const reqOrderBy = this.req?.query.orderBy;\n\n const normalizeOrderBy = (orderBy: any): object[] => {\n if (!orderBy) return [];\n if (Array.isArray(orderBy)) return orderBy;\n if (typeof orderBy === \"object\") return [orderBy];\n return [];\n };\n\n if (this.searchParams.sort) {\n const sortBy = this.searchParams.sort.split(\",\").map((field: string) => ({\n [field.startsWith(\"-\") ? field.substring(1) : field]: field.startsWith(\n \"-\"\n )\n ? \"desc\"\n : \"asc\",\n }));\n\n const reqOrderByArray = normalizeOrderBy(reqOrderBy);\n\n const result = reqOrderByArray.length\n ? [...sortBy, ...reqOrderByArray]\n : sortBy;\n\n this.filters = deepmerge(this.filters, { orderBy: result });\n } else {\n this.filters.orderBy = reqOrderBy;\n }\n\n return this;\n }\n\n limitFields() {\n let finalSelect: Record<string, any> = {};\n let finalInclude: Record<string, any> = {};\n let finalOmit: Record<string, any> = {};\n\n if (this.searchParams?.fields) {\n const fields = this.searchParams.fields.split(\",\");\n\n const regularFields = fields.filter(\n (field: string) => !field.startsWith(\"+\") && !field.startsWith(\"-\")\n );\n const includeFields = fields\n .filter((field: string) => field.startsWith(\"+\"))\n .map((field: string) => field.substring(1));\n const excludeFields = fields\n .filter((field: string) => field.startsWith(\"-\"))\n .map((field: string) => field.substring(1));\n\n if (regularFields.length > 0) {\n finalSelect = regularFields.reduce(\n (acc: Record<string, any>, field: string) => {\n acc[field] = true;\n return acc;\n },\n {} as Record<string, any>\n );\n }\n\n includeFields.forEach((field: string) => {\n finalInclude[field] = true;\n });\n\n excludeFields.forEach((field: string) => {\n finalOmit[field] = true;\n });\n }\n\n if (this.searchParams.include || this.filters.include)\n finalInclude = deepmerge(\n finalInclude,\n deepmerge(this.filters?.include || {}, this.searchParams?.include || {})\n );\n\n if (this.searchParams.select || this.filters.include)\n finalSelect = deepmerge(\n finalSelect,\n deepmerge(this.filters?.select || {}, this.searchParams?.select || {})\n );\n\n if (this.searchParams.omit || this.filters.omit)\n finalOmit = deepmerge(\n finalOmit,\n deepmerge(this.filters?.omit || {}, this.searchParams?.omit || {})\n );\n\n if (\n Object.keys(finalSelect).length > 0 &&\n Object.keys(finalInclude).length > 0\n ) {\n finalSelect = deepmerge(finalSelect, finalInclude);\n finalInclude = {};\n delete this.filters.include;\n delete this.searchParams.include;\n }\n\n if (Object.keys(finalSelect).length > 0) this.filters.select = finalSelect;\n\n if (Object.keys(finalInclude).length > 0)\n this.filters.include = finalInclude;\n\n if (Object.keys(finalOmit).length > 0) this.filters.omit = finalOmit;\n\n if (this.searchParams?.addFields || this.searchParams?.removeFields) {\n throw new AppError(\n \"The addFields and removeFields parameters are deprecated.\",\n 400\n );\n }\n\n return this;\n }\n\n paginate(): APIFeatures {\n const paginationOptions = (() => {\n if (this.searchParams.limit === \"all\") return {};\n\n const page = parseInt(this.searchParams.page, 10) || 1;\n const limit = parseInt(this.searchParams.limit, 10) || 30;\n const skip = (page - 1) * limit;\n\n return { skip, take: limit };\n })();\n\n this.filters = {\n ...this.filters,\n ...paginationOptions,\n };\n return this;\n }\n}\n"]}
@@ -1,6 +1,8 @@
1
1
  import { defineConfig } from "../define-config.js";
2
2
  import sheu from "../sheu.js";
3
+ import ExitError from "./exit-error.js";
3
4
  import * as fsHelpers from "./fs.helpers.js";
5
+ import { getPrismaInstance } from "./prisma.helpers.js";
4
6
  import { importModule } from "./global.helpers.js";
5
7
  import { getUserFileExtension, crd } from "./fs.helpers.js";
6
8
 
@@ -26,8 +28,8 @@ export function isAuthenticationEnabled() {
26
28
  }
27
29
  export function getArkosConfig() {
28
30
  const config = typeof definedArkosConfig === "string"
29
- ? {}
30
- : definedArkosConfig?.default || {};
31
+ ? { __loader: "defineConfig" }
32
+ : definedArkosConfig?.default || { __loader: "defineConfig" };
31
33
  const configFile = `arkos.config.${fsHelpers.getUserFileExtension()}`;
32
34
  if (config.__loader !== "defineConfig" &&
33
35
  typeof jest == "undefined" &&
@@ -44,4 +46,20 @@ export default config
44
46
  }
45
47
  return defineConfig(config);
46
48
  }
49
+ export function isProduction() {
50
+ return process.env.ARKOS_BUILD === "true";
51
+ }
52
+ export function validateArkosConfig() {
53
+ const config = getArkosConfig();
54
+ const authenticationEnabled = isAuthenticationEnabled();
55
+ if (!config?.source?.entryPoint)
56
+ throw ExitError(`Invalid value for 'arkosConfig.source.entryPoint', please pass a valid path from the current working directory`);
57
+ if (authenticationEnabled &&
58
+ isProduction() &&
59
+ !process.env.JWT_SECRET &&
60
+ !config.authentication?.jwt?.secret)
61
+ throw ExitError(`Missing jwt secret in production, see https://www.arkosjs.com/docs/core-concepts/authentication/setup#configuration`);
62
+ if (authenticationEnabled && !getPrismaInstance())
63
+ throw ExitError(`Arkos' authentication system relies on prisma instance, please disabled your authentication or see https://www.arkosjs.com/docs/core-concepts/prisma-orm/setup to setup a prisma instance`);
64
+ }
47
65
  //# sourceMappingURL=arkos-config.helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"arkos-config.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/arkos-config.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAmB,MAAM,kBAAkB,CAAC;AACjE,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAC1C,CAAC,wCAAwC,CAAC,CAAC;AAE3C,IAAI,kBAAkB,GAAQ,EAAE,CAAC;AAEjC,IAAI,CAAC;IACH,kBAAkB,GAAG,0BAA0B,CAAC;AAClD,CAAC;AAAC,OAAO,GAAQ,EAAE,CAAC;IAClB,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC1D,IAAI,CAAC,IAAI,CACP,+CAA+C,SAAS,CAAC,oBAAoB,EAAE,gBAAgB,EAC/F;YACE,SAAS,EAAE,IAAI;SAChB,CACF,CAAC;;QACC,MAAM,GAAG,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,MAAM,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAAC;IAE5C,OAAO,cAAc,EAAE,IAAI,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,MAAM,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAAC;IAE5C,OAAO,cAAc,EAAE,IAAI,IAAI,cAAc,EAAE,OAAO,KAAK,KAAK,CAAC;AACnE,CAAC;AAOD,MAAM,UAAU,cAAc;IAC5B,MAAM,MAAM,GACV,OAAO,kBAAkB,KAAK,QAAQ;QACpC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAE,kBAA0B,EAAE,OAAO,IAAI,EAAE,CAAC;IACjD,MAAM,UAAU,GAAG,gBAAgB,SAAS,CAAC,oBAAoB,EAAE,EAAE,CAAC;IAEtE,IACG,MAAc,CAAC,QAAQ,KAAK,cAAc;QAC3C,OAAO,IAAI,IAAI,WAAW;QAC1B,OAAO,kBAAkB,KAAK,QAAQ,EACtC,CAAC;QACD,IAAI,CAAC,KAAK,CACR,0BAA0B,UAAU,8GAA8G,UAAU;;;;;;;CAOjK,CACI,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,YAAY,CAAC,MAAM,CAAQ,CAAC;AACrC,CAAC","sourcesContent":["import { defineConfig, UserArkosConfig } from \"../define-config\";\nimport sheu from \"../sheu\";\nimport * as fsHelpers from \"./fs.helpers\";\n(\"ReplaceWithNeededImportsForArkosConfig\"); // This will be filled by post build script\n\nlet definedArkosConfig: any = {};\n\ntry {\n definedArkosConfig = \"ReplaceWithDynamicImport\"; // This will be filled by post build script\n} catch (err: any) {\n if (err.message.toLowerCase().includes(\"cannot find module\"))\n sheu.warn(\n `Using default configs, because arkos.config.${fsHelpers.getUserFileExtension()} was not found`,\n {\n timestamp: true,\n }\n );\n else throw err;\n}\n\nexport function isUsingAuthentication() {\n const { authentication } = getArkosConfig();\n\n return authentication?.mode;\n}\n\nexport function isAuthenticationEnabled() {\n const { authentication } = getArkosConfig();\n\n return authentication?.mode && authentication?.enabled !== false;\n}\n\n/**\n * Gives access to the underlying current configurations being used by **Arkos** by default and also loaded through `arkos.config.{ts|js}`\n *\n * @returns {ArkosConfig}\n */\nexport function getArkosConfig(): UserArkosConfig {\n const config =\n typeof definedArkosConfig === \"string\"\n ? {}\n : (definedArkosConfig as any)?.default || {};\n const configFile = `arkos.config.${fsHelpers.getUserFileExtension()}`;\n\n if (\n (config as any).__loader !== \"defineConfig\" &&\n typeof jest == \"undefined\" &&\n typeof definedArkosConfig === \"object\"\n ) {\n sheu.error(\n `From v1.6 config under ${configFile} must be wrapped in \\`defineConfig()\\` function from \\`arkos/config\\`. You can do the following under your ${configFile}:\n\nimport { defineConfig } from \"arkos/config\"\n\nconst config = defineConfig({ ... })\n\nexport default config\n`\n );\n process.exit(1);\n }\n\n return defineConfig(config) as any;\n}\n"]}
1
+ {"version":3,"file":"arkos-config.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/arkos-config.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAmB,MAAM,kBAAkB,CAAC;AACjE,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,CAAC,wCAAwC,CAAC,CAAC;AAE3C,IAAI,kBAAkB,GAAQ,EAAE,CAAC;AAEjC,IAAI,CAAC;IACH,kBAAkB,GAAG,0BAA0B,CAAC;AAClD,CAAC;AAAC,OAAO,GAAQ,EAAE,CAAC;IAClB,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC1D,IAAI,CAAC,IAAI,CACP,+CAA+C,SAAS,CAAC,oBAAoB,EAAE,gBAAgB,EAC/F;YACE,SAAS,EAAE,IAAI;SAChB,CACF,CAAC;;QACC,MAAM,GAAG,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,MAAM,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAAC;IAE5C,OAAO,cAAc,EAAE,IAAI,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,MAAM,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAAC;IAE5C,OAAO,cAAc,EAAE,IAAI,IAAI,cAAc,EAAE,OAAO,KAAK,KAAK,CAAC;AACnE,CAAC;AAOD,MAAM,UAAU,cAAc;IAC5B,MAAM,MAAM,GACV,OAAO,kBAAkB,KAAK,QAAQ;QACpC,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE;QAC9B,CAAC,CAAE,kBAA0B,EAAE,OAAO,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3E,MAAM,UAAU,GAAG,gBAAgB,SAAS,CAAC,oBAAoB,EAAE,EAAE,CAAC;IAEtE,IACG,MAAc,CAAC,QAAQ,KAAK,cAAc;QAC3C,OAAO,IAAI,IAAI,WAAW;QAC1B,OAAO,kBAAkB,KAAK,QAAQ,EACtC,CAAC;QACD,IAAI,CAAC,KAAK,CACR,0BAA0B,UAAU,8GAA8G,UAAU;;;;;;;CAOjK,CACI,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,YAAY,CAAC,MAAM,CAAQ,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,qBAAqB,GAAG,uBAAuB,EAAE,CAAC;IAExD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU;QAC7B,MAAM,SAAS,CACb,gHAAgH,CACjH,CAAC;IAEJ,IACE,qBAAqB;QACrB,YAAY,EAAE;QACd,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU;QACvB,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,EAAE,MAAM;QAEnC,MAAM,SAAS,CACb,qHAAqH,CACtH,CAAC;IAEJ,IAAI,qBAAqB,IAAI,CAAC,iBAAiB,EAAE;QAC/C,MAAM,SAAS,CACb,2LAA2L,CAC5L,CAAC;AACN,CAAC","sourcesContent":["import { defineConfig, UserArkosConfig } from \"../define-config\";\nimport sheu from \"../sheu\";\nimport ExitError from \"./exit-error\";\nimport * as fsHelpers from \"./fs.helpers\";\nimport { getPrismaInstance } from \"./prisma.helpers\";\n(\"ReplaceWithNeededImportsForArkosConfig\"); // This will be filled by post build script\n\nlet definedArkosConfig: any = {};\n\ntry {\n definedArkosConfig = \"ReplaceWithDynamicImport\"; // This will be filled by post build script\n} catch (err: any) {\n if (err.message.toLowerCase().includes(\"cannot find module\"))\n sheu.warn(\n `Using default configs, because arkos.config.${fsHelpers.getUserFileExtension()} was not found`,\n {\n timestamp: true,\n }\n );\n else throw err;\n}\n\nexport function isUsingAuthentication() {\n const { authentication } = getArkosConfig();\n\n return authentication?.mode;\n}\n\nexport function isAuthenticationEnabled() {\n const { authentication } = getArkosConfig();\n\n return authentication?.mode && authentication?.enabled !== false;\n}\n\n/**\n * Gives access to the underlying current configurations being used by **Arkos** by default and also loaded through `arkos.config.{ts|js}`\n *\n * @returns {ArkosConfig}\n */\nexport function getArkosConfig(): UserArkosConfig {\n const config =\n typeof definedArkosConfig === \"string\"\n ? { __loader: \"defineConfig\" }\n : (definedArkosConfig as any)?.default || { __loader: \"defineConfig\" };\n const configFile = `arkos.config.${fsHelpers.getUserFileExtension()}`;\n\n if (\n (config as any).__loader !== \"defineConfig\" &&\n typeof jest == \"undefined\" &&\n typeof definedArkosConfig === \"object\"\n ) {\n sheu.error(\n `From v1.6 config under ${configFile} must be wrapped in \\`defineConfig()\\` function from \\`arkos/config\\`. You can do the following under your ${configFile}:\n\nimport { defineConfig } from \"arkos/config\"\n\nconst config = defineConfig({ ... })\n\nexport default config\n`\n );\n process.exit(1);\n }\n\n return defineConfig(config) as any;\n}\n\nexport function isProduction() {\n return process.env.ARKOS_BUILD === \"true\";\n}\n\nexport function validateArkosConfig() {\n const config = getArkosConfig();\n const authenticationEnabled = isAuthenticationEnabled();\n\n if (!config?.source?.entryPoint)\n throw ExitError(\n `Invalid value for 'arkosConfig.source.entryPoint', please pass a valid path from the current working directory`\n );\n\n if (\n authenticationEnabled &&\n isProduction() &&\n !process.env.JWT_SECRET &&\n !config.authentication?.jwt?.secret\n )\n throw ExitError(\n `Missing jwt secret in production, see https://www.arkosjs.com/docs/core-concepts/authentication/setup#configuration`\n );\n\n if (authenticationEnabled && !getPrismaInstance())\n throw ExitError(\n `Arkos' authentication system relies on prisma instance, please disabled your authentication or see https://www.arkosjs.com/docs/core-concepts/prisma-orm/setup to setup a prisma instance`\n );\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import sheu from "../sheu.js";
2
2
  export default function ExitError(message, code = 1) {
3
+ console.log("");
3
4
  sheu.error(message);
4
5
  process.exit(code);
5
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"exit-error.js","sourceRoot":"","sources":["../../../../src/utils/helpers/exit-error.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,OAAY,EAAE,IAAI,GAAG,CAAC;IACtD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC","sourcesContent":["import sheu from \"../sheu\";\n\nexport default function ExitError(message: any, code = 1) {\n sheu.error(message);\n process.exit(code);\n}\n"]}
1
+ {"version":3,"file":"exit-error.js","sourceRoot":"","sources":["../../../../src/utils/helpers/exit-error.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,OAAY,EAAE,IAAI,GAAG,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC","sourcesContent":["import sheu from \"../sheu\";\n\nexport default function ExitError(message: any, code = 1) {\n console.log(\"\");\n sheu.error(message);\n process.exit(code);\n}\n"]}
@@ -1,5 +1,5 @@
1
- import fs from "fs";
2
- import path from "path";
1
+ import path from "node:path";
2
+ import fs from "node:fs";
3
3
  export const crd = () => process.env.ARKOS_BUILD === "true"
4
4
  ? process.cwd() + "/.build/"
5
5
  : process.cwd();
@@ -14,30 +14,31 @@ export function fullCleanCwd(path) {
14
14
  return path;
15
15
  }
16
16
  export let userFileExtension;
17
- export const getUserFileExtension = () => {
17
+ export const getUserFileExtension = (root = process.cwd()) => {
18
18
  if (userFileExtension)
19
19
  return userFileExtension;
20
- try {
21
- const currentDir = process.cwd();
22
- const hasTsConfig = fs.existsSync(path.join(currentDir, "tsconfig.json"));
23
- const hasAppTs = fs.existsSync(path.join(currentDir, "src", "app.ts"));
24
- const hasAppJs = fs.existsSync(path.join(currentDir, "src", "app.js"));
25
- const isBuildMode = process.env.ARKOS_BUILD === "true";
26
- if (isBuildMode)
27
- userFileExtension = "js";
28
- else if (hasTsConfig && hasAppTs)
29
- userFileExtension = "ts";
30
- else if (hasAppTs && !hasAppJs)
31
- userFileExtension = "ts";
32
- else if (hasAppJs)
33
- userFileExtension = "js";
34
- else
35
- userFileExtension = "js";
36
- return userFileExtension;
37
- }
38
- catch (e) {
39
- userFileExtension = "js";
40
- return userFileExtension;
20
+ const tsconfigPath = path.join(root, "tsconfig.json");
21
+ function isTs() {
22
+ try {
23
+ if (fs.existsSync(tsconfigPath))
24
+ return true;
25
+ const packageJsonPath = path.join(root, "package.json");
26
+ if (!fs.existsSync(packageJsonPath))
27
+ return false;
28
+ const pkg = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
29
+ const dependencies = {
30
+ ...pkg.dependencies,
31
+ ...pkg.devDependencies,
32
+ ...pkg.peerDependencies,
33
+ };
34
+ return Boolean(dependencies.typescript);
35
+ }
36
+ catch {
37
+ return false;
38
+ }
41
39
  }
40
+ userFileExtension =
41
+ isTs() && process.env.ARKOS_BUILD !== "true" ? "ts" : "js";
42
+ return userFileExtension;
42
43
  };
43
44
  //# sourceMappingURL=fs.helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fs.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/fs.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE,CACtB,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM;IAChC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,UAAU;IAC5B,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AAQpB,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAEvE,IACE,IAAI,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;QAEpC,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;;QACvC,OAAO,IAAI,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,IAAI,iBAA0C,CAAC;AAOtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAgB,EAAE;IACpD,IAAI,iBAAiB;QAAE,OAAO,iBAAiB,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAEjC,MAAM,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC;QAE1E,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QAEvE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC;QAEvD,IAAI,WAAW;YAAE,iBAAiB,GAAG,IAAI,CAAC;aACrC,IAAI,WAAW,IAAI,QAAQ;YAAE,iBAAiB,GAAG,IAAI,CAAC;aACtD,IAAI,QAAQ,IAAI,CAAC,QAAQ;YAAE,iBAAiB,GAAG,IAAI,CAAC;aACpD,IAAI,QAAQ;YAAE,iBAAiB,GAAG,IAAI,CAAC;;YACvC,iBAAiB,GAAG,IAAI,CAAC;QAE9B,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,iBAAiB,GAAG,IAAI,CAAC;QACzB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;AACH,CAAC,CAAC","sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\n\nexport const crd = () =>\n process.env.ARKOS_BUILD === \"true\"\n ? process.cwd() + \"/.build/\"\n : process.cwd();\n\n/**\n * Removes the current working directory prefix from the given path.\n * Handles cases with or without a trailing slash in cwd.\n * @param path - The path to clean\n * @returns The path without the cwd prefix\n */\nexport function fullCleanCwd(path: string): string {\n if (typeof path !== \"string\") throw new Error(\"Path must be a string\");\n\n if (\n path.startsWith(`/${process.cwd()}`) ||\n path.startsWith(`${process.cwd()}`) ||\n path.startsWith(`${process.cwd()}/`)\n )\n return path.replaceAll(process.cwd(), \"\");\n else return path;\n}\n\nexport let userFileExtension: \"ts\" | \"js\" | undefined;\n\n/**\n * Detects the file extension that should be used in the current execution context\n * Returns 'ts' when TypeScript config exists and not in build mode, otherwise 'js'\n * @returns 'ts' | 'js'\n */\nexport const getUserFileExtension = (): \"ts\" | \"js\" => {\n if (userFileExtension) return userFileExtension;\n\n try {\n const currentDir = process.cwd();\n\n const hasTsConfig = fs.existsSync(path.join(currentDir, \"tsconfig.json\"));\n\n const hasAppTs = fs.existsSync(path.join(currentDir, \"src\", \"app.ts\"));\n const hasAppJs = fs.existsSync(path.join(currentDir, \"src\", \"app.js\"));\n\n const isBuildMode = process.env.ARKOS_BUILD === \"true\";\n\n if (isBuildMode) userFileExtension = \"js\";\n else if (hasTsConfig && hasAppTs) userFileExtension = \"ts\";\n else if (hasAppTs && !hasAppJs) userFileExtension = \"ts\";\n else if (hasAppJs) userFileExtension = \"js\";\n else userFileExtension = \"js\";\n\n return userFileExtension;\n } catch (e) {\n userFileExtension = \"js\";\n return userFileExtension;\n }\n};\n"]}
1
+ {"version":3,"file":"fs.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/fs.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE,CACtB,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM;IAChC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,UAAU;IAC5B,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AAQpB,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAEvE,IACE,IAAI,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;QAEpC,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;;QACvC,OAAO,IAAI,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,IAAI,iBAA0C,CAAC;AAOtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,EAAe,EAAE;IACxE,IAAI,iBAAiB;QAAE,OAAO,iBAAiB,CAAC;IAChD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAEtD,SAAS,IAAI;QACX,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;gBAAE,OAAO,IAAI,CAAC;YAE7C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAExD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;gBAAE,OAAO,KAAK,CAAC;YAElD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;YAEjE,MAAM,YAAY,GAAG;gBACnB,GAAG,GAAG,CAAC,YAAY;gBACnB,GAAG,GAAG,CAAC,eAAe;gBACtB,GAAG,GAAG,CAAC,gBAAgB;aACxB,CAAC;YAEF,OAAO,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,iBAAiB;QACf,IAAI,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7D,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAC","sourcesContent":["import path from \"node:path\";\nimport fs from \"node:fs\";\n\nexport const crd = () =>\n process.env.ARKOS_BUILD === \"true\"\n ? process.cwd() + \"/.build/\"\n : process.cwd();\n\n/**\n * Removes the current working directory prefix from the given path.\n * Handles cases with or without a trailing slash in cwd.\n * @param path - The path to clean\n * @returns The path without the cwd prefix\n */\nexport function fullCleanCwd(path: string): string {\n if (typeof path !== \"string\") throw new Error(\"Path must be a string\");\n\n if (\n path.startsWith(`/${process.cwd()}`) ||\n path.startsWith(`${process.cwd()}`) ||\n path.startsWith(`${process.cwd()}/`)\n )\n return path.replaceAll(process.cwd(), \"\");\n else return path;\n}\n\nexport let userFileExtension: \"ts\" | \"js\" | undefined;\n\n/**\n * Detects the file extension that should be used in the current execution context\n * Returns 'ts' when TypeScript config exists and not in build mode, otherwise 'js'\n * @returns 'ts' | 'js'\n */\nexport const getUserFileExtension = (root = process.cwd()): \"ts\" | \"js\" => {\n if (userFileExtension) return userFileExtension;\n const tsconfigPath = path.join(root, \"tsconfig.json\");\n\n function isTs() {\n try {\n if (fs.existsSync(tsconfigPath)) return true;\n\n const packageJsonPath = path.join(root, \"package.json\");\n\n if (!fs.existsSync(packageJsonPath)) return false;\n\n const pkg = JSON.parse(fs.readFileSync(packageJsonPath, \"utf8\"));\n\n const dependencies = {\n ...pkg.dependencies,\n ...pkg.devDependencies,\n ...pkg.peerDependencies,\n };\n\n return Boolean(dependencies.typescript);\n } catch {\n return false;\n }\n }\n\n userFileExtension =\n isTs() && process.env.ARKOS_BUILD !== \"true\" ? \"ts\" : \"js\";\n return userFileExtension;\n};\n"]}
@@ -17,7 +17,7 @@ export function isEsm() {
17
17
  const pkg = getPackageJson();
18
18
  return pkg?.type === "module";
19
19
  }
20
- const userRequire = createRequire(pathToFileURL(process.cwd() + "/package.json"));
20
+ export const userRequire = createRequire(pathToFileURL(process.cwd() + "/package.json"));
21
21
  export async function importModule(modulePath, options = { fixExtension: true }) {
22
22
  if (!options.fixExtension || modulePath.endsWith(".ts") || !isEsm()) {
23
23
  let imported;
@@ -1 +1 @@
1
- {"version":3,"file":"global.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/global.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport { createRequire } from \"module\";\nimport { pathToFileURL } from \"url\";\n\nexport function getPackageJson() {\n try {\n const pkgPath = path.join(process.cwd(), \"package.json\");\n if (fs.existsSync(pkgPath)) {\n return JSON.parse(fs.readFileSync(pkgPath, \"utf8\"));\n }\n } catch (err) {\n console.error(\"Error checking package.json:\", err);\n }\n}\n\nexport function isEsm() {\n const pkg = getPackageJson();\n return pkg?.type === \"module\";\n}\n\n// When importing user modules: mainly on ESM environment\nconst userRequire = createRequire(\n pathToFileURL(process.cwd() + \"/package.json\")\n);\n\nexport async function importModule(\n modulePath: string,\n options: { fixExtension: boolean } = { fixExtension: true }\n) {\n if (!options.fixExtension || modulePath.endsWith(\".ts\") || !isEsm()) {\n let imported;\n try {\n imported = await import(pathToFileURL(modulePath).href);\n } catch (err: any) {\n if (err?.message?.includes(\"file://\"))\n imported = await import(modulePath);\n else throw err;\n }\n return imported;\n }\n\n const resolved = userRequire.resolve(modulePath);\n return await import(pathToFileURL(resolved).href);\n}\n\n/**\n * This one was written for escaping esModules when imported on cjs\n */\nexport async function importEsmPreventingTsTransformation(path: string) {\n const importFn = new Function(\"path\", \"return import(path)\");\n return await importFn(path);\n}\n\n/**\n * Helps getting the current package manager from user agent\n *\n * @returns {string} the package manager\n * @default \"npm\"\n */\nexport function detectPackageManagerFromUserAgent(): string {\n const userAgent = process.env.npm_config_user_agent || \"\";\n\n if (!userAgent) return \"npm\";\n if (userAgent.includes(\"cnpm\")) return \"cnpm\";\n if (userAgent.includes(\"pnpm\")) return \"pnpm\";\n if (userAgent.includes(\"yarn\")) return \"yarn\";\n if (userAgent.includes(\"npm\")) return \"npm\";\n if (userAgent.includes(\"bun\")) return \"bun\";\n if (userAgent.includes(\"corepack\")) return \"corepack\";\n if (userAgent.includes(\"deno\")) return \"deno\";\n\n return \"npm\";\n}\n"]}
1
+ {"version":3,"file":"global.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/global.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport { createRequire } from \"module\";\nimport { pathToFileURL } from \"url\";\n\nexport function getPackageJson() {\n try {\n const pkgPath = path.join(process.cwd(), \"package.json\");\n if (fs.existsSync(pkgPath)) {\n return JSON.parse(fs.readFileSync(pkgPath, \"utf8\"));\n }\n } catch (err) {\n console.error(\"Error checking package.json:\", err);\n }\n}\n\nexport function isEsm() {\n const pkg = getPackageJson();\n return pkg?.type === \"module\";\n}\n\n// When importing user modules: mainly on ESM environment\nexport const userRequire = createRequire(\n pathToFileURL(process.cwd() + \"/package.json\")\n);\n\nexport async function importModule(\n modulePath: string,\n options: { fixExtension: boolean } = { fixExtension: true }\n) {\n if (!options.fixExtension || modulePath.endsWith(\".ts\") || !isEsm()) {\n let imported;\n try {\n imported = await import(pathToFileURL(modulePath).href);\n } catch (err: any) {\n if (err?.message?.includes(\"file://\"))\n imported = await import(modulePath);\n else throw err;\n }\n return imported;\n }\n\n const resolved = userRequire.resolve(modulePath);\n return await import(pathToFileURL(resolved).href);\n}\n\n/**\n * This one was written for escaping esModules when imported on cjs\n */\nexport async function importEsmPreventingTsTransformation(path: string) {\n const importFn = new Function(\"path\", \"return import(path)\");\n return await importFn(path);\n}\n\n/**\n * Helps getting the current package manager from user agent\n *\n * @returns {string} the package manager\n * @default \"npm\"\n */\nexport function detectPackageManagerFromUserAgent(): string {\n const userAgent = process.env.npm_config_user_agent || \"\";\n\n if (!userAgent) return \"npm\";\n if (userAgent.includes(\"cnpm\")) return \"cnpm\";\n if (userAgent.includes(\"pnpm\")) return \"pnpm\";\n if (userAgent.includes(\"yarn\")) return \"yarn\";\n if (userAgent.includes(\"npm\")) return \"npm\";\n if (userAgent.includes(\"bun\")) return \"bun\";\n if (userAgent.includes(\"corepack\")) return \"corepack\";\n if (userAgent.includes(\"deno\")) return \"deno\";\n\n return \"npm\";\n}\n"]}
@@ -1,4 +1,3 @@
1
- import prismaSchemaParser from "../prisma/prisma-schema-parser.js";
2
1
  import { getArkosConfig } from "./arkos-config.helpers.js";
3
2
  import sheu from "../sheu.js";
4
3
  import { getUserFileExtension } from "./fs.helpers.js";
@@ -10,10 +9,10 @@ export function loadPrismaModule() {
10
9
  return instance;
11
10
  }
12
11
  export function handlePrismaGet(target, prop, receiver) {
13
- const originalProperty = Reflect.get(target, prop, receiver);
14
- const isModel = prismaSchemaParser
15
- .getModelsAsArrayOfStrings()
16
- .find((m) => m.toLowerCase() === prop?.toLowerCase?.());
12
+ const originalProperty = (Reflect.get(target, prop, receiver) || {});
13
+ const isModel = typeof originalProperty === "object"
14
+ ? "findMany" in originalProperty
15
+ : false;
17
16
  if (isModel && originalProperty) {
18
17
  return new Proxy(originalProperty, {
19
18
  get(modelTarget, methodName, modelReceiver) {
@@ -1 +1 @@
1
- {"version":3,"file":"prisma.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/prisma.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,CAAC,IAAI,cAAc,GAAQ,IAAI,CAAC;AAEtC,MAAM,UAAU,gBAAgB;IAC9B,MAAM,QAAQ,GAAG,cAAc,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC;IACpD,IAAI,CAAC,QAAQ;QACX,IAAI,CAAC,IAAI,CACP,qDAAqD,oBAAoB,EAAE,mEAAmE,EAC9I,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;IACJ,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAW,EAAE,IAAY,EAAE,QAAa;IACtE,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAE7D,MAAM,OAAO,GAAG,kBAAkB;SAC/B,yBAAyB,EAAE;SAC3B,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAM,IAAe,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;IAEtE,IAAI,OAAO,IAAI,gBAAgB,EAAE,CAAC;QAChC,OAAO,IAAI,KAAK,CAAC,gBAAgB,EAAE;YACjC,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,aAAa;gBACxC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAChC,WAAW,EACX,UAAU,EACV,aAAa,CACd,CAAC;gBAEF,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE,CAAC;oBACzC,OAAO,UAAU,GAAG,IAAW;wBAC7B,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;wBAChC,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC;wBAE1D,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;4BACpB,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;4BAE1B,IAAI,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCACnD,IAAI,CAAC,KAAK,CACR,sBAAsB,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAC1D,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;4BACJ,CAAC;iCAAM,CAAC;gCACN,IAAI,CAAC,KAAK,CAAC,2BAA2B,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;4BAC/D,CAAC;wBACH,CAAC;wBAED,OAAO,cAAc,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;oBACjD,CAAC,CAAC;gBACJ,CAAC;gBAED,OAAO,cAAc,CAAC;YACxB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,QAAQ,IAAI,EAAE,EAAE;QACzD,GAAG,EAAE,eAAe;KACrB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import prismaSchemaParser from \"../prisma/prisma-schema-parser\";\nimport { getArkosConfig } from \"./arkos-config.helpers\";\nimport sheu from \"../sheu\";\nimport { getUserFileExtension } from \"./fs.helpers\";\n\nexport let prismaInstance: any = null;\n\nexport function loadPrismaModule() {\n const instance = getArkosConfig()?.prisma?.instance;\n if (!instance)\n sheu.warn(\n `Prisma client instance not passed to arkos.config.${getUserFileExtension()}, see https://www.arkosjs.com/docs/core-concepts/prisma-orm/setup`,\n { timestamp: true }\n );\n return instance;\n}\n\nexport function handlePrismaGet(target: any, prop: string, receiver: any) {\n const originalProperty = Reflect.get(target, prop, receiver);\n\n const isModel = prismaSchemaParser\n .getModelsAsArrayOfStrings()\n .find((m) => m.toLowerCase() === (prop as string)?.toLowerCase?.());\n\n if (isModel && originalProperty) {\n return new Proxy(originalProperty, {\n get(modelTarget, methodName, modelReceiver) {\n const originalMethod = Reflect.get(\n modelTarget,\n methodName,\n modelReceiver\n );\n\n if (typeof originalMethod === \"function\") {\n return function (...args: any[]) {\n const config = getArkosConfig();\n const debugLevel = config.debugging?.requests?.level || 0;\n\n if (debugLevel >= 3) {\n const queryArgs = args[0];\n\n if (queryArgs && Object.keys(queryArgs).length > 0) {\n sheu.debug(\n `Final Prisma Args\\n${JSON.stringify(queryArgs, null, 2)}`,\n { timestamp: true }\n );\n } else {\n sheu.debug(`Final Prisma Args - Empty`, { timestamp: true });\n }\n }\n\n return originalMethod.apply(modelTarget, args);\n };\n }\n\n return originalMethod;\n },\n });\n }\n\n return originalProperty;\n}\n\nexport function getPrismaInstance() {\n return new Proxy(getArkosConfig()?.prisma?.instance || {}, {\n get: handlePrismaGet,\n });\n}\n"]}
1
+ {"version":3,"file":"prisma.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/prisma.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,CAAC,IAAI,cAAc,GAAQ,IAAI,CAAC;AAEtC,MAAM,UAAU,gBAAgB;IAC9B,MAAM,QAAQ,GAAG,cAAc,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC;IACpD,IAAI,CAAC,QAAQ;QACX,IAAI,CAAC,IAAI,CACP,qDAAqD,oBAAoB,EAAE,mEAAmE,EAC9I,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;IACJ,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAW,EAAE,IAAY,EAAE,QAAa;IACtE,MAAM,gBAAgB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAQ,CAAC;IAE5E,MAAM,OAAO,GACX,OAAO,gBAAgB,KAAK,QAAQ;QAClC,CAAC,CAAC,UAAU,IAAI,gBAAgB;QAChC,CAAC,CAAC,KAAK,CAAC;IAEZ,IAAI,OAAO,IAAI,gBAAgB,EAAE,CAAC;QAChC,OAAO,IAAI,KAAK,CAAC,gBAAgB,EAAE;YACjC,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,aAAa;gBACxC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAChC,WAAW,EACX,UAAU,EACV,aAAa,CACd,CAAC;gBAEF,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE,CAAC;oBACzC,OAAO,UAAU,GAAG,IAAW;wBAC7B,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;wBAChC,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC;wBAE1D,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;4BACpB,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;4BAE1B,IAAI,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCACnD,IAAI,CAAC,KAAK,CACR,sBAAsB,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAC1D,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;4BACJ,CAAC;iCAAM,CAAC;gCACN,IAAI,CAAC,KAAK,CAAC,2BAA2B,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;4BAC/D,CAAC;wBACH,CAAC;wBAED,OAAO,cAAc,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;oBACjD,CAAC,CAAC;gBACJ,CAAC;gBAED,OAAO,cAAc,CAAC;YACxB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,QAAQ,IAAI,EAAE,EAAE;QACzD,GAAG,EAAE,eAAe;KACrB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { getArkosConfig } from \"./arkos-config.helpers\";\nimport sheu from \"../sheu\";\nimport { getUserFileExtension } from \"./fs.helpers\";\n\nexport let prismaInstance: any = null;\n\nexport function loadPrismaModule() {\n const instance = getArkosConfig()?.prisma?.instance;\n if (!instance)\n sheu.warn(\n `Prisma client instance not passed to arkos.config.${getUserFileExtension()}, see https://www.arkosjs.com/docs/core-concepts/prisma-orm/setup`,\n { timestamp: true }\n );\n return instance;\n}\n\nexport function handlePrismaGet(target: any, prop: string, receiver: any) {\n const originalProperty = (Reflect.get(target, prop, receiver) || {}) as any;\n\n const isModel =\n typeof originalProperty === \"object\"\n ? \"findMany\" in originalProperty\n : false;\n\n if (isModel && originalProperty) {\n return new Proxy(originalProperty, {\n get(modelTarget, methodName, modelReceiver) {\n const originalMethod = Reflect.get(\n modelTarget,\n methodName,\n modelReceiver\n );\n\n if (typeof originalMethod === \"function\") {\n return function (...args: any[]) {\n const config = getArkosConfig();\n const debugLevel = config.debugging?.requests?.level || 0;\n\n if (debugLevel >= 3) {\n const queryArgs = args[0];\n\n if (queryArgs && Object.keys(queryArgs).length > 0) {\n sheu.debug(\n `Final Prisma Args\\n${JSON.stringify(queryArgs, null, 2)}`,\n { timestamp: true }\n );\n } else {\n sheu.debug(`Final Prisma Args - Empty`, { timestamp: true });\n }\n }\n\n return originalMethod.apply(modelTarget, args);\n };\n }\n\n return originalMethod;\n },\n });\n }\n\n return originalProperty;\n}\n\nexport function getPrismaInstance() {\n return new Proxy(getArkosConfig()?.prisma?.instance || {}, {\n get: handlePrismaGet,\n });\n}\n"]}
@@ -0,0 +1,11 @@
1
+ export function lenientDecode(str) {
2
+ return str.replace(/%([0-9A-Fa-f]{2})/g, (_, hex) => {
3
+ try {
4
+ return decodeURIComponent("%" + hex);
5
+ }
6
+ catch {
7
+ return String.fromCharCode(parseInt(hex, 16));
8
+ }
9
+ });
10
+ }
11
+ //# sourceMappingURL=url-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/url-helpers.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;QAClD,IAAI,CAAC;YACH,OAAO,kBAAkB,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["export function lenientDecode(str: string) {\n return str.replace(/%([0-9A-Fa-f]{2})/g, (_, hex) => {\n try {\n return decodeURIComponent(\"%\" + hex);\n } catch {\n return String.fromCharCode(parseInt(hex, 16));\n }\n });\n}\n"]}
@@ -6,10 +6,35 @@ import errorHandler from "../modules/error-handler/error-handler.controller.js";
6
6
  import { getArkosConfig } from "../server.js";
7
7
  import { isAuthenticationEnabled } from "./helpers/arkos-config.helpers.js";
8
8
  import { getSwaggerRouter } from "../modules/swagger/swagger.router.js";
9
+ import { lenientDecode } from "./helpers/url-helpers.js";
10
+ import path from "path";
11
+ import express from "express";
12
+ import { userRequire } from "./helpers/global.helpers.js";
13
+ import { existsSync, mkdirSync } from "fs";
14
+ import sheu from "./sheu.js";
9
15
  export default function initializeApp(app) {
10
16
  const config = getArkosConfig();
11
17
  const globalPrefix = config.globalPrefix || "/api";
12
18
  const routersConfig = config?.routers;
19
+ if (config?.staticFiles?.enabled !== false) {
20
+ const folder = config?.staticFiles?.folder ?? "public";
21
+ const prefix = config?.staticFiles?.prefix ?? "/";
22
+ const resolvedPath = path.resolve(process.cwd(), folder);
23
+ if (!existsSync(resolvedPath)) {
24
+ mkdirSync(resolvedPath, { recursive: true });
25
+ sheu.warn(`Folder '${resolvedPath}' was created to serve static files. If you intend to disable static files set staticFiles.enabled = false. See https://arkosjs.com/docs/static-files`, { timestamp: true });
26
+ }
27
+ app.use({ path: prefix }, express.static(resolvedPath, {
28
+ maxAge: "1y",
29
+ etag: true,
30
+ lastModified: true,
31
+ dotfiles: "ignore",
32
+ fallthrough: true,
33
+ index: false,
34
+ cacheControl: true,
35
+ ...config?.staticFiles?.expressStatic,
36
+ }));
37
+ }
13
38
  if (routersConfig?.welcomeRoute !== false) {
14
39
  if (typeof routersConfig?.welcomeRoute === "function") {
15
40
  app.get({ path: globalPrefix }, routersConfig.welcomeRoute);
@@ -24,19 +49,23 @@ export default function initializeApp(app) {
24
49
  app.use(fileUploadRouter);
25
50
  if (isAuthenticationEnabled()) {
26
51
  const authRouter = getAuthRouter();
27
- app.use(globalPrefix, authRouter);
52
+ app.use({ path: globalPrefix }, authRouter);
28
53
  }
29
54
  const modelsRouter = getPrismaModelsRouter();
30
- app.use(globalPrefix, modelsRouter);
55
+ app.use({ path: globalPrefix }, modelsRouter);
31
56
  if (config.swagger &&
32
57
  (process.env.ARKOS_BUILD !== "true" ||
33
- config.swagger.enableAfterBuild === true))
34
- app.use(globalPrefix, getSwaggerRouter(config, app));
58
+ config.swagger.enableAfterBuild === true)) {
59
+ const scalarDistPath = path.dirname(userRequire.resolve("@scalar/api-reference"));
60
+ app.use({ path: `${config.globalPrefix}/scalar-api-reference` }, express.static(scalarDistPath));
61
+ app.use({ path: globalPrefix }, getSwaggerRouter(config, app));
62
+ }
35
63
  return app;
36
64
  }
37
65
  export function addGlobalErrorHandler(app) {
38
- app.use("*", (req) => {
39
- throw new AppError(`Route ${req.method} ${req.originalUrl} was not found`, 404, { route: `${req.method} ${req.originalUrl}` }, "RouteNotFound");
66
+ app.use({ path: "*" }, (req) => {
67
+ const url = lenientDecode(req.originalUrl);
68
+ throw new AppError(`Route ${req.method.toUpperCase()} ${url} was not found`, 404, { route: `${req.method.toUpperCase()} ${url}` }, "RouteNotFound");
40
69
  });
41
70
  app.use(errorHandler);
42
71
  return app;
@@ -1 +1 @@
1
- {"version":3,"file":"initialize-app.js","sourceRoot":"","sources":["../../../src/utils/initialize-app.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,YAAY,MAAM,mDAAmD,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAErE,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,GAAU;IAC9C,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC;IAEnD,MAAM,aAAa,GAAG,MAAM,EAAE,OAAO,CAAC;IAEtC,IAAI,aAAa,EAAE,YAAY,KAAK,KAAK,EAAE,CAAC;QAC1C,IAAI,OAAO,aAAa,EAAE,YAAY,KAAK,UAAU,EAAE,CAAC;YACtD,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;gBACzC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;IAC/C,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAE1B,IAAI,uBAAuB,EAAE,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,YAAY,GAAG,qBAAqB,EAAE,CAAC;IAC7C,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAEpC,IACE,MAAM,CAAC,OAAO;QACd,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM;YACjC,MAAM,CAAC,OAAO,CAAC,gBAAgB,KAAK,IAAI,CAAC;QAE3C,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAEvD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAU;IAC9C,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;QACnB,MAAM,IAAI,QAAQ,CAChB,SAAS,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,WAAW,gBAAgB,EACtD,GAAG,EACH,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,WAAW,EAAE,EAAE,EAC7C,eAAe,CAChB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAEtB,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["import { Arkos } from \"../types/arkos\";\nimport { getFileUploadRouter } from \"../modules/file-upload/file-upload.router\";\nimport { getAuthRouter } from \"../modules/auth/auth.router\";\nimport { getPrismaModelsRouter } from \"../modules/base/base.router\";\nimport { AppError } from \"../exports/error-handler\";\nimport errorHandler from \"../modules/error-handler/error-handler.controller\";\nimport { getArkosConfig } from \"../server\";\nimport { isAuthenticationEnabled } from \"./helpers/arkos-config.helpers\";\nimport { getSwaggerRouter } from \"../modules/swagger/swagger.router\";\n\nexport default function initializeApp(app: Arkos) {\n const config = getArkosConfig();\n const globalPrefix = config.globalPrefix || \"/api\";\n\n const routersConfig = config?.routers;\n\n if (routersConfig?.welcomeRoute !== false) {\n if (typeof routersConfig?.welcomeRoute === \"function\") {\n app.get({ path: globalPrefix }, routersConfig.welcomeRoute);\n } else {\n app.get({ path: globalPrefix }, (_, res) => {\n res.status(200).json({ message: config.welcomeMessage });\n });\n }\n }\n\n const fileUploadRouter = getFileUploadRouter();\n app.use(fileUploadRouter);\n\n if (isAuthenticationEnabled()) {\n const authRouter = getAuthRouter();\n app.use(globalPrefix, authRouter);\n }\n\n const modelsRouter = getPrismaModelsRouter();\n app.use(globalPrefix, modelsRouter);\n\n if (\n config.swagger &&\n (process.env.ARKOS_BUILD !== \"true\" ||\n config.swagger.enableAfterBuild === true)\n )\n app.use(globalPrefix, getSwaggerRouter(config, app));\n\n return app;\n}\n\nexport function addGlobalErrorHandler(app: Arkos) {\n app.use(\"*\", (req) => {\n throw new AppError(\n `Route ${req.method} ${req.originalUrl} was not found`,\n 404,\n { route: `${req.method} ${req.originalUrl}` },\n \"RouteNotFound\"\n );\n });\n\n app.use(errorHandler);\n\n return app;\n}\n"]}
1
+ {"version":3,"file":"initialize-app.js","sourceRoot":"","sources":["../../../src/utils/initialize-app.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arkos } from \"../types/arkos\";\nimport { getFileUploadRouter } from \"../modules/file-upload/file-upload.router\";\nimport { getAuthRouter } from \"../modules/auth/auth.router\";\nimport { getPrismaModelsRouter } from \"../modules/base/base.router\";\nimport { AppError } from \"../exports/error-handler\";\nimport errorHandler from \"../modules/error-handler/error-handler.controller\";\nimport { getArkosConfig } from \"../server\";\nimport { isAuthenticationEnabled } from \"./helpers/arkos-config.helpers\";\nimport { getSwaggerRouter } from \"../modules/swagger/swagger.router\";\nimport { lenientDecode } from \"./helpers/url-helpers\";\nimport path from \"path\";\nimport express from \"express\";\nimport { userRequire } from \"./helpers/global.helpers\";\nimport { existsSync, mkdirSync } from \"fs\";\nimport sheu from \"./sheu\";\n\nexport default function initializeApp(app: Arkos) {\n const config = getArkosConfig();\n const globalPrefix = config.globalPrefix || \"/api\";\n\n const routersConfig = config?.routers;\n\n if (config?.staticFiles?.enabled !== false) {\n const folder = config?.staticFiles?.folder ?? \"public\";\n const prefix = config?.staticFiles?.prefix ?? \"/\";\n const resolvedPath = path.resolve(process.cwd(), folder);\n\n if (!existsSync(resolvedPath)) {\n mkdirSync(resolvedPath, { recursive: true });\n sheu.warn(\n `Folder '${resolvedPath}' was created to serve static files. If you intend to disable static files set staticFiles.enabled = false. See https://arkosjs.com/docs/static-files`,\n { timestamp: true }\n );\n }\n\n app.use(\n { path: prefix },\n express.static(resolvedPath, {\n maxAge: \"1y\",\n etag: true,\n lastModified: true,\n dotfiles: \"ignore\",\n fallthrough: true,\n index: false,\n cacheControl: true,\n ...config?.staticFiles?.expressStatic,\n })\n );\n }\n\n if (routersConfig?.welcomeRoute !== false) {\n if (typeof routersConfig?.welcomeRoute === \"function\") {\n app.get({ path: globalPrefix }, routersConfig.welcomeRoute);\n } else {\n app.get({ path: globalPrefix }, (_, res) => {\n res.status(200).json({ message: config.welcomeMessage });\n });\n }\n }\n\n const fileUploadRouter = getFileUploadRouter();\n app.use(fileUploadRouter);\n\n if (isAuthenticationEnabled()) {\n const authRouter = getAuthRouter();\n app.use({ path: globalPrefix }, authRouter);\n }\n\n const modelsRouter = getPrismaModelsRouter();\n app.use({ path: globalPrefix }, modelsRouter);\n\n if (\n config.swagger &&\n (process.env.ARKOS_BUILD !== \"true\" ||\n config.swagger.enableAfterBuild === true)\n ) {\n const scalarDistPath = path.dirname(\n userRequire.resolve(\"@scalar/api-reference\")\n );\n\n app.use(\n { path: `${config.globalPrefix}/scalar-api-reference` },\n express.static(scalarDistPath)\n );\n\n app.use({ path: globalPrefix }, getSwaggerRouter(config, app));\n }\n\n return app;\n}\n\nexport function addGlobalErrorHandler(app: Arkos) {\n app.use({ path: \"*\" }, (req) => {\n const url = lenientDecode(req.originalUrl);\n throw new AppError(\n `Route ${req.method.toUpperCase()} ${url} was not found`,\n 404,\n { route: `${req.method.toUpperCase()} ${url}` },\n \"RouteNotFound\"\n );\n });\n app.use(errorHandler);\n\n return app;\n}\n"]}