arkos 1.3.1-beta → 1.3.2-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/dist/cjs/app.js +139 -1
  2. package/dist/cjs/exports/auth/index.js +6 -1
  3. package/dist/cjs/exports/controllers/index.js +11 -1
  4. package/dist/cjs/exports/error-handler/index.js +11 -1
  5. package/dist/cjs/exports/index.js +12 -1
  6. package/dist/cjs/exports/middlewares/index.js +7 -1
  7. package/dist/cjs/exports/prisma/index.js +13 -1
  8. package/dist/cjs/exports/services/index.js +48 -1
  9. package/dist/cjs/exports/utils/index.js +44 -1
  10. package/dist/cjs/exports/validation/index.js +11 -1
  11. package/dist/cjs/modules/auth/auth.controller.js +229 -1
  12. package/dist/cjs/modules/auth/auth.controller.js.map +1 -1
  13. package/dist/cjs/modules/auth/auth.router.js +82 -1
  14. package/dist/cjs/modules/auth/auth.router.js.map +1 -1
  15. package/dist/cjs/modules/auth/auth.service.js +226 -1
  16. package/dist/cjs/modules/auth/utils/auth-error-objects.js +10 -1
  17. package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +83 -1
  18. package/dist/cjs/modules/auth/utils/services/auth-action.service.js +92 -1
  19. package/dist/cjs/modules/auth/utils/services/auth-action.service.js.map +1 -1
  20. package/dist/cjs/modules/base/base.controller.js +172 -1
  21. package/dist/cjs/modules/base/base.middlewares.js +92 -1
  22. package/dist/cjs/modules/base/base.router.js +22 -1
  23. package/dist/cjs/modules/base/base.service.js +507 -1
  24. package/dist/cjs/modules/base/base.service.js.map +1 -1
  25. package/dist/cjs/modules/base/types/base.service.types.js +3 -1
  26. package/dist/cjs/modules/base/types/base.service.types.js.map +1 -1
  27. package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js +80 -1
  28. package/dist/cjs/modules/base/utils/helpers/base.middlewares.helpers.js +50 -1
  29. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +104 -1
  30. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +208 -1
  31. package/dist/cjs/modules/base/utils/router-validator.js +16 -1
  32. package/dist/cjs/modules/base/utils/service-hooks-manager.js +19 -1
  33. package/dist/cjs/modules/email/email.service.js +104 -1
  34. package/dist/cjs/modules/error-handler/error-handler.controller.js +146 -4
  35. package/dist/cjs/modules/error-handler/utils/app-error.js +17 -1
  36. package/dist/cjs/modules/error-handler/utils/catch-async.js +21 -1
  37. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +205 -3
  38. package/dist/cjs/modules/file-upload/file-upload.controller.js +233 -1
  39. package/dist/cjs/modules/file-upload/file-upload.router.js +60 -1
  40. package/dist/cjs/modules/file-upload/file-upload.service.js +322 -1
  41. package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js +97 -1
  42. package/dist/cjs/modules/swagger/swagger.router.js +38 -1
  43. package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +338 -1
  44. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js +64 -1
  45. package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js +37 -1
  46. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +48 -1
  47. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +32 -1
  48. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js +49 -1
  49. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +34 -1
  50. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +471 -1
  51. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +572 -1
  52. package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +260 -1
  53. package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js +112 -1
  54. package/dist/cjs/paths.js +9 -1
  55. package/dist/cjs/server.js +94 -5
  56. package/dist/cjs/types/arkos-config.js +3 -1
  57. package/dist/cjs/types/arkos-config.js.map +1 -1
  58. package/dist/cjs/types/auth.js +3 -1
  59. package/dist/cjs/types/index.js +11 -1
  60. package/dist/cjs/types/router-config.js +3 -1
  61. package/dist/cjs/utils/arkos-env.js +9 -1
  62. package/dist/cjs/utils/cli/build.js +214 -5
  63. package/dist/cjs/utils/cli/dev.js +154 -3
  64. package/dist/cjs/utils/cli/generate.js +109 -1
  65. package/dist/cjs/utils/cli/index.js +104 -1
  66. package/dist/cjs/utils/cli/index.js.map +1 -1
  67. package/dist/cjs/utils/cli/prisma-generate.js +120 -0
  68. package/dist/cjs/utils/cli/prisma-generate.js.map +1 -0
  69. package/dist/cjs/utils/cli/start.js +103 -1
  70. package/dist/cjs/utils/cli/utils/cli.helpers.js +24 -1
  71. package/dist/cjs/utils/cli/utils/smart-fs-watcher.js +73 -1
  72. package/dist/cjs/utils/cli/utils/template-generator/templates/auth-configs-template.js +36 -0
  73. package/dist/cjs/utils/cli/utils/template-generator/templates/auth-configs-template.js.map +1 -0
  74. package/dist/cjs/utils/cli/utils/template-generator/templates/controller-template.js +21 -0
  75. package/dist/cjs/utils/cli/utils/template-generator/templates/controller-template.js.map +1 -0
  76. package/dist/cjs/utils/cli/utils/template-generator/templates/hooks-template.js +201 -0
  77. package/dist/cjs/utils/cli/utils/template-generator/templates/hooks-template.js.map +1 -0
  78. package/dist/cjs/utils/cli/utils/template-generator/templates/middlewares-template.js +288 -0
  79. package/dist/cjs/utils/cli/utils/template-generator/templates/{generate-middlewares.js.map → middlewares-template.js.map} +1 -1
  80. package/dist/cjs/utils/cli/utils/template-generator/templates/query-options-template.js +64 -0
  81. package/dist/cjs/utils/cli/utils/template-generator/templates/query-options-template.js.map +1 -0
  82. package/dist/cjs/utils/cli/utils/template-generator/templates/router-template.js +45 -0
  83. package/dist/cjs/utils/cli/utils/template-generator/templates/router-template.js.map +1 -0
  84. package/dist/cjs/utils/cli/utils/template-generator/templates/service-template.js +29 -0
  85. package/dist/cjs/utils/cli/utils/template-generator/templates/service-template.js.map +1 -0
  86. package/dist/cjs/utils/cli/utils/template-generators.js +34 -2
  87. package/dist/cjs/utils/cli/utils/template-generators.js.map +1 -1
  88. package/dist/cjs/utils/cli/utils/watermark-stamper.js +17 -3
  89. package/dist/cjs/utils/dotenv.helpers.js +43 -1
  90. package/dist/cjs/utils/dynamic-loader.js +270 -9
  91. package/dist/cjs/utils/features/api.features.js +169 -1
  92. package/dist/cjs/utils/features/change-case.features.js +67 -1
  93. package/dist/cjs/utils/features/port-and-host-allocator.js +105 -1
  94. package/dist/cjs/utils/helpers/api.features.helpers.js +112 -1
  95. package/dist/cjs/utils/helpers/change-case.helpers.js +177 -1
  96. package/dist/cjs/utils/helpers/deepmerge.helper.js +115 -1
  97. package/dist/cjs/utils/helpers/dynamic-loader.helpers.js +76 -1
  98. package/dist/cjs/utils/helpers/fs.helpers.js +57 -1
  99. package/dist/cjs/utils/helpers/global.helpers.js +94 -1
  100. package/dist/cjs/utils/helpers/prisma.helpers.js +40 -1
  101. package/dist/cjs/utils/helpers/query-parser.helpers.js +45 -1
  102. package/dist/cjs/utils/helpers/routers.helpers.js +37 -1
  103. package/dist/cjs/utils/helpers/text.helpers.js +28 -1
  104. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +455 -1
  105. package/dist/cjs/utils/prisma/prisma-schema-parser.js +216 -4
  106. package/dist/cjs/utils/prisma/types.js +3 -1
  107. package/dist/cjs/utils/sheu.js +120 -1
  108. package/dist/cjs/utils/validate-dto.js +17 -1
  109. package/dist/cjs/utils/validate-schema.js +15 -1
  110. package/dist/esm/app.js +132 -1
  111. package/dist/esm/exports/auth/index.js +2 -1
  112. package/dist/esm/exports/controllers/index.js +4 -1
  113. package/dist/esm/exports/error-handler/index.js +4 -1
  114. package/dist/esm/exports/index.js +8 -1
  115. package/dist/esm/exports/middlewares/index.js +2 -1
  116. package/dist/esm/exports/prisma/index.js +6 -1
  117. package/dist/esm/exports/services/index.js +9 -1
  118. package/dist/esm/exports/utils/index.js +4 -1
  119. package/dist/esm/exports/validation/index.js +4 -1
  120. package/dist/esm/modules/auth/auth.controller.js +222 -1
  121. package/dist/esm/modules/auth/auth.controller.js.map +1 -1
  122. package/dist/esm/modules/auth/auth.router.js +76 -1
  123. package/dist/esm/modules/auth/auth.router.js.map +1 -1
  124. package/dist/esm/modules/auth/auth.service.js +219 -1
  125. package/dist/esm/modules/auth/utils/auth-error-objects.js +4 -1
  126. package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js +73 -1
  127. package/dist/esm/modules/auth/utils/services/auth-action.service.js +90 -1
  128. package/dist/esm/modules/auth/utils/services/auth-action.service.js.map +1 -1
  129. package/dist/esm/modules/base/base.controller.js +165 -1
  130. package/dist/esm/modules/base/base.middlewares.js +81 -1
  131. package/dist/esm/modules/base/base.router.js +15 -1
  132. package/dist/esm/modules/base/base.service.js +500 -1
  133. package/dist/esm/modules/base/base.service.js.map +1 -1
  134. package/dist/esm/modules/base/types/base.service.types.js +2 -1
  135. package/dist/esm/modules/base/types/base.service.types.js.map +1 -1
  136. package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js +76 -1
  137. package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js +44 -1
  138. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js +96 -1
  139. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +198 -1
  140. package/dist/esm/modules/base/utils/router-validator.js +14 -1
  141. package/dist/esm/modules/base/utils/service-hooks-manager.js +17 -1
  142. package/dist/esm/modules/email/email.service.js +97 -1
  143. package/dist/esm/modules/error-handler/error-handler.controller.js +107 -4
  144. package/dist/esm/modules/error-handler/utils/app-error.js +15 -1
  145. package/dist/esm/modules/error-handler/utils/catch-async.js +19 -1
  146. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js +163 -3
  147. package/dist/esm/modules/file-upload/file-upload.controller.js +228 -1
  148. package/dist/esm/modules/file-upload/file-upload.router.js +54 -1
  149. package/dist/esm/modules/file-upload/file-upload.service.js +314 -1
  150. package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js +87 -1
  151. package/dist/esm/modules/swagger/swagger.router.js +32 -1
  152. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +333 -1
  153. package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.js +58 -1
  154. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js +34 -1
  155. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +42 -1
  156. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +26 -1
  157. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js +46 -1
  158. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +28 -1
  159. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +465 -1
  160. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +566 -1
  161. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js +255 -1
  162. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js +101 -1
  163. package/dist/esm/paths.js +3 -1
  164. package/dist/esm/server.js +85 -5
  165. package/dist/esm/types/arkos-config.js +2 -1
  166. package/dist/esm/types/arkos-config.js.map +1 -1
  167. package/dist/esm/types/auth.js +2 -1
  168. package/dist/esm/types/index.js +8 -1
  169. package/dist/esm/types/router-config.js +2 -1
  170. package/dist/esm/utils/arkos-env.js +7 -1
  171. package/dist/esm/utils/cli/build.js +208 -5
  172. package/dist/esm/utils/cli/dev.js +147 -3
  173. package/dist/esm/utils/cli/generate.js +103 -1
  174. package/dist/esm/utils/cli/index.js +94 -1
  175. package/dist/esm/utils/cli/index.js.map +1 -1
  176. package/dist/esm/utils/cli/prisma-generate.js +114 -0
  177. package/dist/esm/utils/cli/prisma-generate.js.map +1 -0
  178. package/dist/esm/utils/cli/start.js +96 -1
  179. package/dist/esm/utils/cli/utils/cli.helpers.js +16 -1
  180. package/dist/esm/utils/cli/utils/smart-fs-watcher.js +68 -1
  181. package/dist/esm/utils/cli/utils/template-generator/templates/auth-configs-template.js +33 -0
  182. package/dist/esm/utils/cli/utils/template-generator/templates/auth-configs-template.js.map +1 -0
  183. package/dist/esm/utils/cli/utils/template-generator/templates/controller-template.js +18 -0
  184. package/dist/esm/utils/cli/utils/template-generator/templates/controller-template.js.map +1 -0
  185. package/dist/esm/utils/cli/utils/template-generator/templates/hooks-template.js +198 -0
  186. package/dist/esm/utils/cli/utils/template-generator/templates/hooks-template.js.map +1 -0
  187. package/dist/esm/utils/cli/utils/template-generator/templates/middlewares-template.js +285 -0
  188. package/dist/esm/utils/cli/utils/template-generator/templates/{generate-middlewares.js.map → middlewares-template.js.map} +1 -1
  189. package/dist/esm/utils/cli/utils/template-generator/templates/query-options-template.js +61 -0
  190. package/dist/esm/utils/cli/utils/template-generator/templates/query-options-template.js.map +1 -0
  191. package/dist/esm/utils/cli/utils/template-generator/templates/router-template.js +39 -0
  192. package/dist/esm/utils/cli/utils/template-generator/templates/router-template.js.map +1 -0
  193. package/dist/esm/utils/cli/utils/template-generator/templates/service-template.js +26 -0
  194. package/dist/esm/utils/cli/utils/template-generator/templates/service-template.js.map +1 -0
  195. package/dist/esm/utils/cli/utils/template-generators.js +28 -2
  196. package/dist/esm/utils/cli/utils/template-generators.js.map +1 -1
  197. package/dist/esm/utils/cli/utils/watermark-stamper.js +15 -3
  198. package/dist/esm/utils/dotenv.helpers.js +37 -1
  199. package/dist/esm/utils/dynamic-loader.js +254 -9
  200. package/dist/esm/utils/features/api.features.js +162 -1
  201. package/dist/esm/utils/features/change-case.features.js +31 -1
  202. package/dist/esm/utils/features/port-and-host-allocator.js +67 -1
  203. package/dist/esm/utils/helpers/api.features.helpers.js +106 -1
  204. package/dist/esm/utils/helpers/change-case.helpers.js +161 -1
  205. package/dist/esm/utils/helpers/deepmerge.helper.js +113 -1
  206. package/dist/esm/utils/helpers/dynamic-loader.helpers.js +69 -1
  207. package/dist/esm/utils/helpers/fs.helpers.js +48 -1
  208. package/dist/esm/utils/helpers/global.helpers.js +51 -1
  209. package/dist/esm/utils/helpers/prisma.helpers.js +32 -1
  210. package/dist/esm/utils/helpers/query-parser.helpers.js +40 -1
  211. package/dist/esm/utils/helpers/routers.helpers.js +29 -1
  212. package/dist/esm/utils/helpers/text.helpers.js +22 -1
  213. package/dist/esm/utils/prisma/prisma-json-schema-generator.js +448 -1
  214. package/dist/esm/utils/prisma/prisma-schema-parser.js +209 -4
  215. package/dist/esm/utils/prisma/types.js +2 -1
  216. package/dist/esm/utils/sheu.js +118 -1
  217. package/dist/esm/utils/validate-dto.js +11 -1
  218. package/dist/esm/utils/validate-schema.js +9 -1
  219. package/dist/types/modules/auth/utils/services/auth-action.service.d.ts +1 -1
  220. package/dist/types/modules/base/types/base.service.types.d.ts +12 -9
  221. package/dist/types/types/arkos-config.d.ts +3 -2
  222. package/dist/types/utils/cli/prisma-generate.d.ts +1 -0
  223. package/package.json +2 -2
  224. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +0 -21
  225. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js.map +0 -1
  226. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js +0 -12
  227. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +0 -1
  228. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-hooks-template.js +0 -144
  229. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-hooks-template.js.map +0 -1
  230. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js +0 -256
  231. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +0 -36
  232. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +0 -1
  233. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js +0 -18
  234. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js.map +0 -1
  235. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js +0 -9
  236. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js.map +0 -1
  237. package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +0 -21
  238. package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js.map +0 -1
  239. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js +0 -12
  240. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +0 -1
  241. package/dist/esm/utils/cli/utils/template-generator/templates/generate-hooks-template.js +0 -144
  242. package/dist/esm/utils/cli/utils/template-generator/templates/generate-hooks-template.js.map +0 -1
  243. package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js +0 -256
  244. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +0 -36
  245. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +0 -1
  246. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js +0 -18
  247. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js.map +0 -1
  248. package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js +0 -9
  249. package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js.map +0 -1
  250. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-auth-configs-template.d.ts → auth-configs-template.d.ts} +0 -0
  251. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-controller-template.d.ts → controller-template.d.ts} +0 -0
  252. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-hooks-template.d.ts → hooks-template.d.ts} +0 -0
  253. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-middlewares.d.ts → middlewares-template.d.ts} +0 -0
  254. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-prisma-query-options.d.ts → query-options-template.d.ts} +0 -0
  255. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-router-template.d.ts → router-template.d.ts} +0 -0
  256. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-service-template.d.ts → service-template.d.ts} +0 -0
@@ -1,9 +1,254 @@
1
- "use strict";import{z as b}from"zod";import h from"path";import{killServerChildProcess as p}from"./cli/utils/cli.helpers.js";import g from"./sheu.js";import{applyStrictRoutingRules as v,pathExists as d}from"./helpers/dynamic-loader.helpers.js";import{kebabCase as $,pascalCase as y}from"./helpers/change-case.helpers.js";import{crd as C,getUserFileExtension as P}from"./helpers/fs.helpers.js";import{importModule as x}from"./helpers/global.helpers.js";import S from"./prisma/prisma-schema-parser.js";let M={};export function setModuleComponents(o,t){M[y(o)]=t}export function getModuleComponents(o){return M[y(o)]}export function getFileModuleComponentsFileStructure(o){const t=$(o).toLowerCase(),r=o.toLowerCase()==="auth",e=P();return{core:{hooks:`${t}.hooks.${e}`,interceptors:`${t}.middlewares.${e}`,authConfigs:`${t}.auth-configs.${e}`,authConfigsNew:`${t}.auth.${e}`,prismaQueryOptions:`${t}.prisma-query-options.${e}`,prismaQueryOptionsNew:`${t}.query.${e}`,router:`${t}.router.${e}`},dtos:r?{login:`login.dto.${e}`,signup:`signup.dto.${e}`,getMe:`get-me.dto.${e}`,updateMe:`update-me.dto.${e}`,updatePassword:`update-password.dto.${e}`}:{model:`${t}.dto.${e}`,create:`create-${t}.dto.${e}`,createOne:`create-${t}.dto.${e}`,createMany:"",update:`update-${t}.dto.${e}`,updateOne:`update-${t}.dto.${e}`,updateMany:"",query:`query-${t}.dto.${e}`,findOne:"",findMany:""},schemas:r?{login:`login.schema.${e}`,signup:`signup.schema.${e}`,getMe:`get-me.schema.${e}`,updateMe:`update-me.schema.${e}`,updatePassword:`update-password.schema.${e}`}:{model:`${t}.schema.${e}`,create:`create-${t}.schema.${e}`,createOne:`create-${t}.schema.${e}`,createMany:"",update:`update-${t}.schema.${e}`,updateOne:`update-${t}.schema.${e}`,updateMany:"",query:`query-${t}.schema.${e}`,findOne:"",findMany:""}}}export function isClass(o){return typeof o=="function"&&/^class\s/.test(Function.prototype.toString.call(o))}export function isZodSchema(o){return o instanceof b.ZodType}export async function processSubdir(o,t){const r=h.resolve(C(),"src","modules",$(o)),e=h.join(r,t),a=getFileModuleComponentsFileStructure(o),f={};if(!await d(e))return f;try{await Promise.all(Object.entries(a[t]).map(async([u,s])=>{const m=h.join(e,s);if(!(!s||!await d(m)))try{const n=await x(m).catch(async l=>{await d(m)&&(g.error(`Failed to import ${s}: `),console.error(l),p(),process.exit(1))}),i=`src/modules/${$(o)}/${s}`;if(t==="dtos"&&!isClass(n?.default))throw Error(`ValidationError: Please export as default a valid class under ${i}, in order to use as Dto.`);if(t==="schemas"&&!isZodSchema(n?.default))throw Error(`ValidationError: Please export as default a valid zod schema under ${i}, in order to use as Schema`);n&&n?.default&&(f[u]=n.default)}catch(n){if(n?.message?.includes("ValidationError"))throw n;console.error(n)}}))}catch(u){if(u?.message?.includes("ValidationError"))throw u;console.error(u)}return f}export function validateNamingConventions(o,t,r){if(o==="prismaQueryOptions"){if(g.warn(`Found ${t} which will be deprecated from 1.4.0-beta, consider switching to ${t.replace("prisma-query-options","query")}.`),r.prismaQueryOptions)throw p(),new Error(`
2
- Cannot use both ${t} and ${t.replace("prisma-query-options","query")} at once, please choose only one name convention.
3
- `)}else if(o==="prismaQueryOptionsNew"){if(r.prismaQueryOptions)throw p(),new Error(`
4
- Cannot use both ${t} and ${t.replace("query","prisma-query-options")} at once, please choose only one name convention.
5
- `)}else if(o==="authConfigs"){if(g.warn(`Found ${t} which will be deprecated from 1.4.0-beta, consider switching to ${t.replace("auth-configs","auth")}.`),r.authConfigs)throw p(),new Error(`
6
- Cannot use both ${t} and ${t.replace("auth-configs","auth")} at once, please choose only one name convention.
7
- `)}else if(o==="authConfigsNew"&&r.authConfigs)throw p(),new Error(`
8
- Cannot use both ${t} and ${t.replace("auth","auth-configs")} at once, please choose only one name convention.
9
- `)}export function assignModuleToResult(o,t,r,e,a){t==="prismaQueryOptions"||t==="prismaQueryOptionsNew"?e.prismaQueryOptions=r.default||r:t==="authConfigs"||t==="authConfigsNew"?e.authConfigs=r.default||r:t==="interceptors"?e[t]=r:t==="router"?e[t]={...r,config:v(o,a,r?.config||{})}:e[t]=r.default||r}export async function importModuleComponents(o,t,r){const e={dtos:{},schemas:{}},a=t.routers?.strict;if(!r&&!a)return e;if(getModuleComponents(o))return getModuleComponents(o);const f=h.resolve(C(),"src","modules",$(o)),u=getFileModuleComponentsFileStructure(o),s=t.validation?.resolver?t.validation.resolver==="zod"?"schemas":"dtos":null,[m,n]=await Promise.all([Object.entries(u.core).map(async([i,l])=>{if(["createMany","findMany","findOne","updateMany"].includes(i)||!l)return;const w=h.join(f,l);if(!(i==="router"&&!a&&!await d(w))&&!(i!=="router"&&a&&!await d(w)))try{let c=await x(w).catch(async O=>{try{await d(w)&&(g.error(`Failed to import ${l}`),console.error(O),p(),process.exit(1))}catch{}});!c&&i==="router"&&a&&(c={}),c&&(validateNamingConventions(i,l,e),assignModuleToResult(o,i,c,e,t))}catch(c){if(c.message?.includes("Cannot use both"))throw c;console.error(c),p()}}),s&&processSubdir(o,s)]);return M[y(o)]={...e,...s&&{[s]:n}},{...e,...s&&{[s]:n}}}export const appModules=Array.from(new Set([...S.getModelsAsArrayOfStrings(),"auth","file-upload"]));export async function loadAllModuleComponents(o){const t=[];await Promise.all(appModules.map(async e=>{const a=h.resolve(C(),"src","modules",$(e));await d(a)&&t.push(e)}));const r=appModules.map(async e=>await importModuleComponents(e,o,t.includes(e)));await Promise.all(r)}
1
+ import { z } from "zod";
2
+ import path from "path";
3
+ import { killServerChildProcess } from "./cli/utils/cli.helpers.js";
4
+ import sheu from "./sheu.js";
5
+ import { applyStrictRoutingRules, pathExists, } from "./helpers/dynamic-loader.helpers.js";
6
+ import { kebabCase, pascalCase } from "./helpers/change-case.helpers.js";
7
+ import { crd, getUserFileExtension } from "./helpers/fs.helpers.js";
8
+ import { importModule } from "./helpers/global.helpers.js";
9
+ import prismaSchemaParser from "./prisma/prisma-schema-parser.js";
10
+ let prismaModelsModules = {};
11
+ export function setModuleComponents(modelName, modules) {
12
+ prismaModelsModules[pascalCase(modelName)] = modules;
13
+ }
14
+ export function getModuleComponents(modelName) {
15
+ return prismaModelsModules[pascalCase(modelName)];
16
+ }
17
+ export function getFileModuleComponentsFileStructure(modelName) {
18
+ const kebabModelName = kebabCase(modelName).toLowerCase();
19
+ const isAuthModule = modelName.toLowerCase() === "auth";
20
+ const ext = getUserFileExtension();
21
+ return {
22
+ core: {
23
+ hooks: `${kebabModelName}.hooks.${ext}`,
24
+ interceptors: `${kebabModelName}.middlewares.${ext}`,
25
+ authConfigs: `${kebabModelName}.auth-configs.${ext}`,
26
+ authConfigsNew: `${kebabModelName}.auth.${ext}`,
27
+ prismaQueryOptions: `${kebabModelName}.prisma-query-options.${ext}`,
28
+ prismaQueryOptionsNew: `${kebabModelName}.query.${ext}`,
29
+ router: `${kebabModelName}.router.${ext}`,
30
+ },
31
+ dtos: isAuthModule
32
+ ? {
33
+ login: `login.dto.${ext}`,
34
+ signup: `signup.dto.${ext}`,
35
+ getMe: `get-me.dto.${ext}`,
36
+ updateMe: `update-me.dto.${ext}`,
37
+ updatePassword: `update-password.dto.${ext}`,
38
+ }
39
+ : {
40
+ model: `${kebabModelName}.dto.${ext}`,
41
+ create: `create-${kebabModelName}.dto.${ext}`,
42
+ createOne: `create-${kebabModelName}.dto.${ext}`,
43
+ createMany: ``,
44
+ update: `update-${kebabModelName}.dto.${ext}`,
45
+ updateOne: `update-${kebabModelName}.dto.${ext}`,
46
+ updateMany: ``,
47
+ query: `query-${kebabModelName}.dto.${ext}`,
48
+ findOne: ``,
49
+ findMany: ``,
50
+ },
51
+ schemas: isAuthModule
52
+ ? {
53
+ login: `login.schema.${ext}`,
54
+ signup: `signup.schema.${ext}`,
55
+ getMe: `get-me.schema.${ext}`,
56
+ updateMe: `update-me.schema.${ext}`,
57
+ updatePassword: `update-password.schema.${ext}`,
58
+ }
59
+ : {
60
+ model: `${kebabModelName}.schema.${ext}`,
61
+ create: `create-${kebabModelName}.schema.${ext}`,
62
+ createOne: `create-${kebabModelName}.schema.${ext}`,
63
+ createMany: ``,
64
+ update: `update-${kebabModelName}.schema.${ext}`,
65
+ updateOne: `update-${kebabModelName}.schema.${ext}`,
66
+ updateMany: ``,
67
+ query: `query-${kebabModelName}.schema.${ext}`,
68
+ findOne: ``,
69
+ findMany: ``,
70
+ },
71
+ };
72
+ }
73
+ export function isClass(value) {
74
+ return (typeof value === "function" &&
75
+ /^class\s/.test(Function.prototype.toString.call(value)));
76
+ }
77
+ export function isZodSchema(value) {
78
+ return value instanceof z.ZodType;
79
+ }
80
+ export async function processSubdir(modelName, type) {
81
+ const moduleDir = path.resolve(crd(), "src", "modules", kebabCase(modelName));
82
+ const subdir = path.join(moduleDir, type);
83
+ const fileStructure = getFileModuleComponentsFileStructure(modelName);
84
+ const result = {};
85
+ if (!(await pathExists(subdir)))
86
+ return result;
87
+ try {
88
+ await Promise.all(Object.entries(fileStructure[type]).map(async ([key, fileName]) => {
89
+ const filePath = path.join(subdir, fileName);
90
+ if (!fileName || !(await pathExists(filePath)))
91
+ return;
92
+ try {
93
+ const module = await importModule(filePath).catch(async (err) => {
94
+ if (await pathExists(filePath)) {
95
+ sheu.error(`Failed to import ${fileName}: `);
96
+ console.error(err);
97
+ killServerChildProcess();
98
+ process.exit(1);
99
+ }
100
+ });
101
+ const cleanFilePath = `src/modules/${kebabCase(modelName)}/${fileName}`;
102
+ if (type === "dtos" && !isClass(module?.default))
103
+ throw Error(`ValidationError: Please export as default a valid class under ${cleanFilePath}, in order to use as Dto.`);
104
+ else if (type === "schemas" && !isZodSchema(module?.default))
105
+ throw Error(`ValidationError: Please export as default a valid zod schema under ${cleanFilePath}, in order to use as Schema`);
106
+ if (module && module?.default)
107
+ result[key] = module.default;
108
+ }
109
+ catch (err) {
110
+ if (err?.message?.includes("ValidationError"))
111
+ throw err;
112
+ console.error(err);
113
+ }
114
+ }));
115
+ }
116
+ catch (err) {
117
+ if (err?.message?.includes("ValidationError"))
118
+ throw err;
119
+ console.error(err);
120
+ }
121
+ return result;
122
+ }
123
+ export function validateNamingConventions(key, fileName, result) {
124
+ if (key === "prismaQueryOptions") {
125
+ sheu.warn(`Found ${fileName} which will be deprecated from 1.4.0-beta, consider switching to ${fileName.replace("prisma-query-options", "query")}.`);
126
+ if (result.prismaQueryOptions) {
127
+ killServerChildProcess();
128
+ throw new Error(`\n Cannot use both ${fileName} and ${fileName.replace("prisma-query-options", "query")} at once, please choose only one name convention. \n`);
129
+ }
130
+ }
131
+ else if (key === "prismaQueryOptionsNew") {
132
+ if (result.prismaQueryOptions) {
133
+ killServerChildProcess();
134
+ throw new Error(`\n Cannot use both ${fileName} and ${fileName.replace("query", "prisma-query-options")} at once, please choose only one name convention. \n`);
135
+ }
136
+ }
137
+ else if (key === "authConfigs") {
138
+ sheu.warn(`Found ${fileName} which will be deprecated from 1.4.0-beta, consider switching to ${fileName.replace("auth-configs", "auth")}.`);
139
+ if (result.authConfigs) {
140
+ killServerChildProcess();
141
+ throw new Error(`\n Cannot use both ${fileName} and ${fileName.replace("auth-configs", "auth")} at once, please choose only one name convention. \n`);
142
+ }
143
+ }
144
+ else if (key === "authConfigsNew") {
145
+ if (result.authConfigs) {
146
+ killServerChildProcess();
147
+ throw new Error(`\n Cannot use both ${fileName} and ${fileName.replace("auth", "auth-configs")} at once, please choose only one name convention. \n`);
148
+ }
149
+ }
150
+ }
151
+ export function assignModuleToResult(appModule, key, module, result, arkosConfig) {
152
+ if (key === "prismaQueryOptions" || key === "prismaQueryOptionsNew") {
153
+ result.prismaQueryOptions = module.default || module;
154
+ }
155
+ else if (key === "authConfigs" || key === "authConfigsNew") {
156
+ result.authConfigs = module.default || module;
157
+ }
158
+ else if (key === "interceptors") {
159
+ result[key] = module;
160
+ }
161
+ else if (key === "router") {
162
+ result[key] = {
163
+ ...module,
164
+ config: applyStrictRoutingRules(appModule, arkosConfig, module?.config || {}),
165
+ };
166
+ }
167
+ else {
168
+ result[key] = module.default || module;
169
+ }
170
+ }
171
+ export async function importModuleComponents(modelName, arkosConfig, moduleDirExists) {
172
+ const result = {
173
+ dtos: {},
174
+ schemas: {},
175
+ };
176
+ const usingStrictRouting = arkosConfig.routers?.strict;
177
+ if (!moduleDirExists && !usingStrictRouting)
178
+ return result;
179
+ if (getModuleComponents(modelName))
180
+ return getModuleComponents(modelName);
181
+ const moduleDir = path.resolve(crd(), "src", "modules", kebabCase(modelName));
182
+ const fileStructure = getFileModuleComponentsFileStructure(modelName);
183
+ const validationSubdir = arkosConfig.validation?.resolver
184
+ ? arkosConfig.validation.resolver === "zod"
185
+ ? "schemas"
186
+ : "dtos"
187
+ : null;
188
+ const [_, validators] = await Promise.all([
189
+ Object.entries(fileStructure.core).map(async ([key, fileName]) => {
190
+ if (["createMany", "findMany", "findOne", "updateMany"].includes(key) ||
191
+ !fileName)
192
+ return;
193
+ const filePath = path.join(moduleDir, fileName);
194
+ if (key === "router" &&
195
+ !usingStrictRouting &&
196
+ !(await pathExists(filePath)))
197
+ return;
198
+ else if (key !== "router" &&
199
+ usingStrictRouting &&
200
+ !(await pathExists(filePath)))
201
+ return;
202
+ try {
203
+ let module = await importModule(filePath).catch(async (err) => {
204
+ try {
205
+ if (await pathExists(filePath)) {
206
+ sheu.error(`Failed to import ${fileName}`);
207
+ console.error(err);
208
+ killServerChildProcess();
209
+ process.exit(1);
210
+ }
211
+ }
212
+ catch (err) { }
213
+ });
214
+ if (!module && key === "router" && usingStrictRouting)
215
+ module = {};
216
+ if (module) {
217
+ validateNamingConventions(key, fileName, result);
218
+ assignModuleToResult(modelName, key, module, result, arkosConfig);
219
+ }
220
+ }
221
+ catch (err) {
222
+ if (err.message?.includes("Cannot use both"))
223
+ throw err;
224
+ console.error(err);
225
+ killServerChildProcess();
226
+ }
227
+ }),
228
+ validationSubdir && processSubdir(modelName, validationSubdir),
229
+ ]);
230
+ prismaModelsModules[pascalCase(modelName)] = {
231
+ ...result,
232
+ ...(validationSubdir && { [validationSubdir]: validators }),
233
+ };
234
+ return {
235
+ ...result,
236
+ ...(validationSubdir && { [validationSubdir]: validators }),
237
+ };
238
+ }
239
+ export const appModules = Array.from(new Set([
240
+ ...prismaSchemaParser.getModelsAsArrayOfStrings(),
241
+ "auth",
242
+ "file-upload",
243
+ ]));
244
+ export async function loadAllModuleComponents(arkosConfig) {
245
+ const moduleDirExists = [];
246
+ await Promise.all(appModules.map(async (appModule) => {
247
+ const moduleDir = path.resolve(crd(), "src", "modules", kebabCase(appModule));
248
+ if (await pathExists(moduleDir))
249
+ moduleDirExists.push(appModule);
250
+ }));
251
+ const modulesComponentsImportPromises = appModules.map(async (appModule) => await importModuleComponents(appModule, arkosConfig, moduleDirExists.includes(appModule)));
252
+ await Promise.all(modulesComponentsImportPromises);
253
+ }
254
+ //# sourceMappingURL=dynamic-loader.js.map
@@ -1 +1,162 @@
1
- "use strict";import l from"../helpers/deepmerge.helper.js";import{parseQueryParamsWithModifiers as c}from"../helpers/api.features.helpers.js";import f from"../../modules/error-handler/utils/app-error.js";import{getPrismaInstance as m}from"../helpers/prisma.helpers.js";export default class d{constructor(s,e){if(this.filters={},this.reqFiltersSearchParam={},this.excludedFields=["page","filters","sort","limit","fields","addFields","removeFields","search","include","filterMode","where","prismaQueryOptions","ignoredFields"],s){const{filters:r="{}",...h}=s.query;this.req=s,this.searchParams=l(c(h),c(JSON.parse(r))),s.finalPrismaQueryOptions=this.searchParams}e&&(this.modelName=e),this.filters={...this.filters}}setup(s,e){if(s){const{filters:r="{}",...h}=s.query;this.req=s,this.searchParams=l(c(h),c(JSON.parse(r))),s.finalPrismaQueryOptions=this.searchParams}return e&&(this.modelName=e),this.filters={...this.filters},this}filter(){if(!this.req)throw new Error("Trying to use APIFeatures.filter() without passing request on class constructor or APIFeatures.setup() method. read more about at www.arkosjs.com/docs/advanced-guide/api-features-class");const s=[],e={...this.searchParams};this.excludedFields.forEach(a=>delete e[a]);const r={...this.req.params,...e},h=Object.keys(r).map(a=>({[a]:r[a]}));let i=h.length>0?{[this.req.query?.filterMode??"OR"]:h}:{};if(this.searchParams.search){const a=m();this.modelName&&Object.keys(a[this.modelName].fields).forEach(o=>{const n=a[this.modelName].fields[o];n?.typeName==="String"&&o!=="id"&&o!=="password"&&!n.isList&&!o?.includes?.("Id")&&!o?.includes?.("ID")&&s.push({[`${o}`]:{contains:this.searchParams.search,mode:"insensitive"}})}),i=l({OR:s},i)}const t=l({where:i},this.req.prismaQueryOptions||{});return this.filters=l(t,this.filters),this}search(){this.searchParams?.search&&(this.filters=l(this.filters,{where:{OR:[]}}))}sort(){if(this.searchParams.sort){const s=this.searchParams?.sort?.split(",")?.map(e=>({[e.startsWith("-")?e.substring(1):e]:e.startsWith("-")?"desc":"asc"}));this.filters=l(this.filters,{orderBy:s})}return this}limitFields(){if(this.searchParams?.fields){const s=this.searchParams.fields.split(","),e=s.filter(t=>!t.startsWith("+")&&!t.startsWith("-")),r=s.filter(t=>t.startsWith("+")).map(t=>t.substring(1)),h=s.filter(t=>t.startsWith("-")).map(t=>t.substring(1));let i={};e.length>0?i=e.reduce((t,a)=>(t[a]=!0,t),{}):(i=this.filters.include||{},r.forEach(t=>{i[t]=!0}),h.forEach(t=>{i[t]=!1})),this.filters={...this.filters,select:i},this.filters.include&&delete this.filters.include}if(this.searchParams?.addFields||this.searchParams?.removeFields)throw new f("The addFields and removeFields parameters are deprecated. Please use fields with + and - prefixes instead.",400);return this}paginate(){const s=parseInt(this.searchParams.page,10)||1,e=parseInt(this.searchParams.limit,10)||30,r=(s-1)*e;return this.filters={...this.filters,skip:r,take:e},this}}export const apiFeatures=new d;
1
+ import deepmerge from "../helpers/deepmerge.helper.js";
2
+ import { parseQueryParamsWithModifiers } from "../helpers/api.features.helpers.js";
3
+ import AppError from "../../modules/error-handler/utils/app-error.js";
4
+ import { getPrismaInstance } from "../helpers/prisma.helpers.js";
5
+ export default class APIFeatures {
6
+ constructor(req, modelName) {
7
+ this.filters = {};
8
+ this.reqFiltersSearchParam = {};
9
+ this.excludedFields = [
10
+ "page",
11
+ "filters",
12
+ "sort",
13
+ "limit",
14
+ "fields",
15
+ "addFields",
16
+ "removeFields",
17
+ "search",
18
+ "include",
19
+ "filterMode",
20
+ "where",
21
+ "prismaQueryOptions",
22
+ "ignoredFields",
23
+ ];
24
+ if (req) {
25
+ const { filters = "{}", ...restOfQuery } = req.query;
26
+ this.req = req;
27
+ this.searchParams = deepmerge(parseQueryParamsWithModifiers(restOfQuery), parseQueryParamsWithModifiers(JSON.parse(filters)));
28
+ req.finalPrismaQueryOptions = this.searchParams;
29
+ }
30
+ if (modelName)
31
+ this.modelName = modelName;
32
+ this.filters = { ...this.filters };
33
+ }
34
+ setup(req, modelName) {
35
+ if (req) {
36
+ const { filters = "{}", ...restOfQuery } = req.query;
37
+ this.req = req;
38
+ this.searchParams = deepmerge(parseQueryParamsWithModifiers(restOfQuery), parseQueryParamsWithModifiers(JSON.parse(filters)));
39
+ req.finalPrismaQueryOptions = this.searchParams;
40
+ }
41
+ if (modelName)
42
+ this.modelName = modelName;
43
+ this.filters = { ...this.filters };
44
+ return this;
45
+ }
46
+ filter() {
47
+ if (!this.req)
48
+ throw new Error("Trying to use APIFeatures.filter() without passing request on class constructor or APIFeatures.setup() method. read more about at www.arkosjs.com/docs/advanced-guide/api-features-class");
49
+ const searchableFields = [];
50
+ const queryObj = { ...this.searchParams };
51
+ this.excludedFields.forEach((el) => delete queryObj[el]);
52
+ const whereObj = { ...this.req.params, ...queryObj };
53
+ const whereLogicalOperatorFilters = Object.keys(whereObj).map((key) => ({
54
+ [key]: whereObj[key],
55
+ }));
56
+ let whereOptions = whereLogicalOperatorFilters.length > 0
57
+ ? {
58
+ [this.req.query?.filterMode ?? "OR"]: whereLogicalOperatorFilters,
59
+ }
60
+ : {};
61
+ if (!!this.searchParams.search) {
62
+ const prisma = getPrismaInstance();
63
+ if (this.modelName)
64
+ Object.keys(prisma[this.modelName].fields).forEach((key) => {
65
+ const field = prisma[this.modelName].fields[key];
66
+ if (field?.typeName === "String" &&
67
+ key !== "id" &&
68
+ key !== "password" &&
69
+ !field.isList &&
70
+ !key?.includes?.("Id") &&
71
+ !key?.includes?.("ID")) {
72
+ searchableFields.push({
73
+ [`${key}`]: {
74
+ contains: this.searchParams.search,
75
+ mode: "insensitive",
76
+ },
77
+ });
78
+ }
79
+ });
80
+ whereOptions = deepmerge({
81
+ OR: searchableFields,
82
+ }, whereOptions);
83
+ }
84
+ const firstMerge = deepmerge({
85
+ where: whereOptions,
86
+ }, this.req.prismaQueryOptions || {});
87
+ this.filters = deepmerge(firstMerge, this.filters);
88
+ return this;
89
+ }
90
+ search() {
91
+ if (this.searchParams?.search) {
92
+ this.filters = deepmerge(this.filters, {
93
+ where: {
94
+ OR: [],
95
+ },
96
+ });
97
+ }
98
+ }
99
+ sort() {
100
+ if (this.searchParams.sort) {
101
+ const sortBy = this.searchParams?.sort
102
+ ?.split(",")
103
+ ?.map((field) => ({
104
+ [field.startsWith("-") ? field.substring(1) : field]: field.startsWith("-") ? "desc" : "asc",
105
+ }));
106
+ this.filters = deepmerge(this.filters, { orderBy: sortBy });
107
+ }
108
+ return this;
109
+ }
110
+ limitFields() {
111
+ if (this.searchParams?.fields) {
112
+ const fields = this.searchParams.fields.split(",");
113
+ const regularFields = fields.filter((field) => !field.startsWith("+") && !field.startsWith("-"));
114
+ const includeFields = fields
115
+ .filter((field) => field.startsWith("+"))
116
+ .map((field) => field.substring(1));
117
+ const excludeFields = fields
118
+ .filter((field) => field.startsWith("-"))
119
+ .map((field) => field.substring(1));
120
+ let selection = {};
121
+ if (regularFields.length > 0) {
122
+ selection = regularFields.reduce((acc, field) => {
123
+ acc[field] = true;
124
+ return acc;
125
+ }, {});
126
+ }
127
+ else {
128
+ selection = this.filters.include || {};
129
+ includeFields.forEach((field) => {
130
+ selection[field] = true;
131
+ });
132
+ excludeFields.forEach((field) => {
133
+ selection[field] = false;
134
+ });
135
+ }
136
+ this.filters = {
137
+ ...this.filters,
138
+ select: selection,
139
+ };
140
+ if (this.filters.include) {
141
+ delete this.filters.include;
142
+ }
143
+ }
144
+ if (this.searchParams?.addFields || this.searchParams?.removeFields) {
145
+ throw new AppError("The addFields and removeFields parameters are deprecated. Please use fields with + and - prefixes instead.", 400);
146
+ }
147
+ return this;
148
+ }
149
+ paginate() {
150
+ const page = parseInt(this.searchParams.page, 10) || 1;
151
+ const limit = parseInt(this.searchParams.limit, 10) || 30;
152
+ const skip = (page - 1) * limit;
153
+ this.filters = {
154
+ ...this.filters,
155
+ skip,
156
+ take: limit,
157
+ };
158
+ return this;
159
+ }
160
+ }
161
+ export const apiFeatures = new APIFeatures();
162
+ //# sourceMappingURL=api.features.js.map
@@ -1 +1,31 @@
1
- "use strict";import*as e from"../helpers/change-case.helpers.js";const u=t=>t!==null&&typeof t=="object";function a(t){return function r(s,c=1,o){if(c===0||!u(s))return s;if(Array.isArray(s))return s.map(n=>r(n,c-1,o));const C=Object.create(Object.getPrototypeOf(s));return Object.keys(s).forEach(n=>{const p=s[n],l=t(n,o),x=r(p,c-1,o);C[l]=x}),C}}export const camelCase=a(e.camelCase),capitalCase=a(e.capitalCase),constantCase=a(e.constantCase),dotCase=a(e.dotCase),trainCase=a(e.trainCase),noCase=a(e.noCase),kebabCase=a(e.kebabCase),pascalCase=a(e.pascalCase),pathCase=a(e.pathCase),sentenceCase=a(e.sentenceCase),snakeCase=a(e.snakeCase);
1
+ import * as changeCase from "../helpers/change-case.helpers.js";
2
+ const isObject = (object) => object !== null && typeof object === "object";
3
+ function changeKeysFactory(changeCase) {
4
+ return function changeKeys(object, depth = 1, options) {
5
+ if (depth === 0 || !isObject(object))
6
+ return object;
7
+ if (Array.isArray(object)) {
8
+ return object.map((item) => changeKeys(item, depth - 1, options));
9
+ }
10
+ const result = Object.create(Object.getPrototypeOf(object));
11
+ Object.keys(object).forEach((key) => {
12
+ const value = object[key];
13
+ const changedKey = changeCase(key, options);
14
+ const changedValue = changeKeys(value, depth - 1, options);
15
+ result[changedKey] = changedValue;
16
+ });
17
+ return result;
18
+ };
19
+ }
20
+ export const camelCase = changeKeysFactory(changeCase.camelCase);
21
+ export const capitalCase = changeKeysFactory(changeCase.capitalCase);
22
+ export const constantCase = changeKeysFactory(changeCase.constantCase);
23
+ export const dotCase = changeKeysFactory(changeCase.dotCase);
24
+ export const trainCase = changeKeysFactory(changeCase.trainCase);
25
+ export const noCase = changeKeysFactory(changeCase.noCase);
26
+ export const kebabCase = changeKeysFactory(changeCase.kebabCase);
27
+ export const pascalCase = changeKeysFactory(changeCase.pascalCase);
28
+ export const pathCase = changeKeysFactory(changeCase.pathCase);
29
+ export const sentenceCase = changeKeysFactory(changeCase.sentenceCase);
30
+ export const snakeCase = changeKeysFactory(changeCase.snakeCase);
31
+ //# sourceMappingURL=change-case.features.js.map
@@ -1 +1,67 @@
1
- "use strict";import*as l from"net";import i from"../sheu.js";class c{constructor(){this.prevWarnings=new Set}getCorrectHostAndPortToUse(o,s){const r=o?.CLI_HOST||s?.host||o?.HOST||"localhost",n=o?.CLI_PORT||s?.port||o?.PORT||"8000";return{host:String(r),port:String(n)}}async getHostAndAvailablePort(o,s){if(this.port&&this.host)return s?.logWarning&&this.prevWarnings.size>0&&(console.info(""),Array.from(this.prevWarnings).forEach(e=>i.warn(e))),{port:this.port,host:this.host};const{host:r,port:n}=this.getCorrectHostAndPortToUse(o,s);let t=parseInt(n,10);for(;;){if(await this.isPortAvailable(r,t))return this.port=t.toString(),this.host=r,{host:r,port:t.toString()};const a=`Port ${t} is in use, trying port ${t+1} instead...`;this.prevWarnings.add(a),s?.logWarning&&i.warn(`${a}`),t++}}async isPortAvailable(o,s){return new Promise(r=>{const n=["localhost","127.0.0.1"].includes(o)?"localhost":o,t=l.createConnection({host:n,port:s,timeout:100});t.on("connect",()=>{t.destroy(),r(!1)}),t.on("error",()=>{r(!0)}),t.on("timeout",()=>{t.destroy(),r(!0)})})}logWarnings(){console.info(""),Array.from(this.prevWarnings).forEach(o=>i.warn(o))}}const h=new c;export default h;
1
+ import * as net from "net";
2
+ import sheu from "../sheu.js";
3
+ class PortAndHostAllocator {
4
+ constructor() {
5
+ this.prevWarnings = new Set();
6
+ }
7
+ getCorrectHostAndPortToUse(env, config) {
8
+ const host = env?.CLI_HOST || config?.host || env?.HOST || "localhost";
9
+ const port = env?.CLI_PORT || config?.port || env?.PORT || "8000";
10
+ return { host: String(host), port: String(port) };
11
+ }
12
+ async getHostAndAvailablePort(env, config) {
13
+ if (this.port && this.host) {
14
+ if (config?.logWarning && this.prevWarnings.size > 0) {
15
+ console.info("");
16
+ Array.from(this.prevWarnings).forEach((msg) => sheu.warn(msg));
17
+ }
18
+ return { port: this.port, host: this.host };
19
+ }
20
+ const { host, port: initialPort } = this.getCorrectHostAndPortToUse(env, config);
21
+ let currentPort = parseInt(initialPort, 10);
22
+ while (true) {
23
+ const isAvailable = await this.isPortAvailable(host, currentPort);
24
+ if (isAvailable) {
25
+ this.port = currentPort.toString();
26
+ this.host = host;
27
+ return { host, port: currentPort.toString() };
28
+ }
29
+ const msg = `Port ${currentPort} is in use, trying port ${currentPort + 1} instead...`;
30
+ this.prevWarnings.add(msg);
31
+ if (config?.logWarning) {
32
+ sheu.warn(`${msg}`);
33
+ }
34
+ currentPort++;
35
+ }
36
+ }
37
+ async isPortAvailable(host, port) {
38
+ return new Promise((resolve) => {
39
+ const actualHost = !["localhost", "127.0.0.1"].includes(host)
40
+ ? host
41
+ : "localhost";
42
+ const socket = net.createConnection({
43
+ host: actualHost,
44
+ port,
45
+ timeout: 100,
46
+ });
47
+ socket.on("connect", () => {
48
+ socket.destroy();
49
+ resolve(false);
50
+ });
51
+ socket.on("error", () => {
52
+ resolve(true);
53
+ });
54
+ socket.on("timeout", () => {
55
+ socket.destroy();
56
+ resolve(true);
57
+ });
58
+ });
59
+ }
60
+ logWarnings() {
61
+ console.info("");
62
+ Array.from(this.prevWarnings).forEach((msg) => sheu.warn(msg));
63
+ }
64
+ }
65
+ const portAndHostAllocator = new PortAndHostAllocator();
66
+ export default portAndHostAllocator;
67
+ //# sourceMappingURL=port-and-host-allocator.js.map
@@ -1 +1,106 @@
1
- "use strict";import h from"./deepmerge.helper.js";const F={dateFields:["createdAt","updatedAt","deletedAt","date"],booleanFields:["isActive","isDeleted","isPublished","isArchived"],numericFields:["age","price","quantity","amount","rating"]};export function parseQueryParamsWithModifiers(s,r=F){const c=Object.entries(JSON.parse(JSON.stringify(s)));let p={};for(const[f,n]of c){const e=f.split("__");if(!n&&n!==!1&&n!=="false"&&e.length<2)continue;const t=Array.isArray(n)?n[0]?.toString():n;let o={};if(e.length<2)o[f]=typeof n=="string"&&!Number.isNaN(n)?d(t,e[0],r):n;else{const l=e[0];if(l==="orderBy"&&e.length===2)o.orderBy={},o.orderBy[e[1]]=t;else if(e.length===1)o[l]={equals:d(t,l,r)};else{let m={},i=m,a=l;for(let u=1;u<e.length-1;u++)i[a]={},i=i[a],a=e[u];const b=e[e.length-1];switch(b){case"icontains":i[a]={contains:t,mode:"insensitive"};break;case"contains":i[a]={contains:t,mode:"sensitive"};break;case"in":case"notIn":i[a]={[b]:t.split(",").map(y=>d(y.trim(),l,r))};break;case"or":const u=t.split(",");m.OR=u.map(y=>({[l]:{equals:d(y.trim(),l,r)}}));break;case"isNull":i[a]={equals:t.toLowerCase()==="true"?null:void 0};break;case"isEmpty":i[a]={equals:t.toLowerCase()==="true"?"":void 0};break;default:i[a]={[b]:d(t,l,r)}}o=m}}p=h(p,o)}return p}function d(s,r,c){return c.dateFields?.includes?.(r)&&s?new Date(s):c.booleanFields?.includes?.(r)&&s?s.toLowerCase()==="true":c.numericFields?.includes?.(r)&&s?Number(s):s}
1
+ import deepmerge from "./deepmerge.helper.js";
2
+ const DEFAULT_FIELD_CONFIG = {
3
+ dateFields: ["createdAt", "updatedAt", "deletedAt", "date"],
4
+ booleanFields: ["isActive", "isDeleted", "isPublished", "isArchived"],
5
+ numericFields: ["age", "price", "quantity", "amount", "rating"],
6
+ };
7
+ export function parseQueryParamsWithModifiers(query, fieldConfig = DEFAULT_FIELD_CONFIG) {
8
+ const entries = Object.entries(JSON.parse(JSON.stringify(query)));
9
+ let result = {};
10
+ for (const [key, value] of entries) {
11
+ const parts = key.split("__");
12
+ if (!value && value !== false && value !== "false" && parts.length < 2)
13
+ continue;
14
+ const stringValue = Array.isArray(value) ? value[0]?.toString() : value;
15
+ let currentResult = {};
16
+ if (parts.length < 2) {
17
+ currentResult[key] =
18
+ typeof value === "string" && !Number.isNaN(value)
19
+ ? convertValue(stringValue, parts[0], fieldConfig)
20
+ : value;
21
+ }
22
+ else {
23
+ const fieldName = parts[0];
24
+ if (fieldName === "orderBy" && parts.length === 2) {
25
+ currentResult.orderBy = {};
26
+ currentResult.orderBy[parts[1]] = stringValue;
27
+ }
28
+ else if (parts.length === 1) {
29
+ currentResult[fieldName] = {
30
+ equals: convertValue(stringValue, fieldName, fieldConfig),
31
+ };
32
+ }
33
+ else {
34
+ let nestedObj = {};
35
+ let currentLevel = nestedObj;
36
+ let currentKey = fieldName;
37
+ for (let i = 1; i < parts.length - 1; i++) {
38
+ currentLevel[currentKey] = {};
39
+ currentLevel = currentLevel[currentKey];
40
+ currentKey = parts[i];
41
+ }
42
+ const lastOperator = parts[parts.length - 1];
43
+ switch (lastOperator) {
44
+ case "icontains":
45
+ currentLevel[currentKey] = {
46
+ contains: stringValue,
47
+ mode: "insensitive",
48
+ };
49
+ break;
50
+ case "contains":
51
+ currentLevel[currentKey] = {
52
+ contains: stringValue,
53
+ mode: "sensitive",
54
+ };
55
+ break;
56
+ case "in":
57
+ case "notIn":
58
+ currentLevel[currentKey] = {
59
+ [lastOperator]: stringValue
60
+ .split(",")
61
+ .map((v) => convertValue(v.trim(), fieldName, fieldConfig)),
62
+ };
63
+ break;
64
+ case "or":
65
+ const values = stringValue.split(",");
66
+ nestedObj.OR = values.map((val) => ({
67
+ [fieldName]: {
68
+ equals: convertValue(val.trim(), fieldName, fieldConfig),
69
+ },
70
+ }));
71
+ break;
72
+ case "isNull":
73
+ currentLevel[currentKey] = {
74
+ equals: stringValue.toLowerCase() === "true" ? null : undefined,
75
+ };
76
+ break;
77
+ case "isEmpty":
78
+ currentLevel[currentKey] = {
79
+ equals: stringValue.toLowerCase() === "true" ? "" : undefined,
80
+ };
81
+ break;
82
+ default:
83
+ currentLevel[currentKey] = {
84
+ [lastOperator]: convertValue(stringValue, fieldName, fieldConfig),
85
+ };
86
+ }
87
+ currentResult = nestedObj;
88
+ }
89
+ }
90
+ result = deepmerge(result, currentResult);
91
+ }
92
+ return result;
93
+ }
94
+ function convertValue(value, fieldName, config) {
95
+ if (config.dateFields?.includes?.(fieldName) && value) {
96
+ return new Date(value);
97
+ }
98
+ if (config.booleanFields?.includes?.(fieldName) && value) {
99
+ return value.toLowerCase() === "true";
100
+ }
101
+ if (config.numericFields?.includes?.(fieldName) && value) {
102
+ return Number(value);
103
+ }
104
+ return value;
105
+ }
106
+ //# sourceMappingURL=api.features.helpers.js.map