arkos 1.2.15-test → 1.2.15-test.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (428) hide show
  1. package/README.md +22 -14
  2. package/cli.js +2 -11
  3. package/dist/cjs/app.js +1 -1
  4. package/dist/cjs/app.js.map +1 -1
  5. package/dist/cjs/exports/auth/index.js +1 -6
  6. package/dist/cjs/exports/controllers/index.js +1 -11
  7. package/dist/cjs/exports/error-handler/index.js +1 -11
  8. package/dist/cjs/exports/index.js +1 -12
  9. package/dist/cjs/exports/middlewares/index.js +1 -7
  10. package/dist/cjs/exports/prisma/index.js +1 -6
  11. package/dist/cjs/exports/services/index.js +1 -49
  12. package/dist/cjs/exports/utils/index.js +1 -44
  13. package/dist/cjs/exports/validation/index.js +1 -11
  14. package/dist/cjs/modules/auth/auth.controller.js +1 -194
  15. package/dist/cjs/modules/auth/auth.router.js +1 -124
  16. package/dist/cjs/modules/auth/auth.router.js.map +1 -1
  17. package/dist/cjs/modules/auth/auth.service.js +1 -192
  18. package/dist/cjs/modules/auth/auth.service.js.map +1 -1
  19. package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +1 -83
  20. package/dist/cjs/modules/base/base.controller.js +1 -159
  21. package/dist/cjs/modules/base/base.controller.js.map +1 -1
  22. package/dist/cjs/modules/base/base.middlewares.js +1 -92
  23. package/dist/cjs/modules/base/base.middlewares.js.map +1 -1
  24. package/dist/cjs/modules/base/base.router.js +1 -24
  25. package/dist/cjs/modules/base/base.router.js.map +1 -1
  26. package/dist/cjs/modules/base/base.service.js +1 -128
  27. package/dist/cjs/modules/base/base.service.js.map +1 -1
  28. package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js +1 -82
  29. package/dist/cjs/modules/base/utils/helpers/base.middlewares.helpers.js +1 -50
  30. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +1 -167
  31. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
  32. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +1 -171
  33. package/dist/cjs/modules/email/email.service.js +1 -104
  34. package/dist/cjs/modules/error-handler/error-handler.controller.js +4 -144
  35. package/dist/cjs/modules/error-handler/error-handler.controller.js.map +1 -1
  36. package/dist/cjs/modules/error-handler/utils/app-error.js +1 -17
  37. package/dist/cjs/modules/error-handler/utils/catch-async.js +1 -12
  38. package/dist/cjs/modules/error-handler/utils/catch-async.js.map +1 -1
  39. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +3 -195
  40. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
  41. package/dist/cjs/modules/file-upload/file-upload.controller.js +1 -271
  42. package/dist/cjs/modules/file-upload/file-upload.router.js +1 -56
  43. package/dist/cjs/modules/file-upload/file-upload.router.js.map +1 -1
  44. package/dist/cjs/modules/file-upload/file-upload.service.js +1 -322
  45. package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js +1 -90
  46. package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js.map +1 -1
  47. package/dist/cjs/modules/swagger/swagger.router.js +1 -141
  48. package/dist/cjs/modules/swagger/swagger.router.js.map +1 -1
  49. package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +1 -0
  50. package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +1 -0
  51. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js +1 -0
  52. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js.map +1 -0
  53. package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js +1 -0
  54. package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +1 -0
  55. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -0
  56. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -0
  57. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -0
  58. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +1 -0
  59. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +1 -0
  60. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js.map +1 -0
  61. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +1 -0
  62. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js.map +1 -0
  63. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +1 -0
  64. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js.map +1 -0
  65. package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +1 -0
  66. package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -0
  67. package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js +1 -0
  68. package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -0
  69. package/dist/cjs/package.json +3 -0
  70. package/dist/cjs/paths.js +1 -1
  71. package/dist/cjs/server.js +4 -2
  72. package/dist/cjs/server.js.map +1 -1
  73. package/dist/cjs/types/arkos-config.js +1 -3
  74. package/dist/cjs/types/arkos-config.js.map +1 -1
  75. package/dist/cjs/types/auth.js +1 -3
  76. package/dist/cjs/types/index.js +1 -11
  77. package/dist/cjs/types/router-config.js +1 -3
  78. package/dist/cjs/utils/arkos-env.js +1 -9
  79. package/dist/cjs/utils/cli/build.js +5 -229
  80. package/dist/cjs/utils/cli/build.js.map +1 -1
  81. package/dist/cjs/utils/cli/dev.js +5 -267
  82. package/dist/cjs/utils/cli/dev.js.map +1 -1
  83. package/dist/cjs/utils/cli/generate.js +12 -189
  84. package/dist/cjs/utils/cli/generate.js.map +1 -1
  85. package/dist/cjs/utils/cli/index.js +1 -81
  86. package/dist/cjs/utils/cli/start.js +1 -93
  87. package/dist/cjs/utils/cli/start.js.map +1 -1
  88. package/dist/cjs/utils/cli/utils/cli.helpers.js +1 -26
  89. package/dist/cjs/utils/cli/utils/cli.helpers.js.map +1 -1
  90. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +5 -20
  91. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js +6 -15
  92. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js +71 -133
  93. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +1 -1
  94. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +24 -46
  95. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +1 -1
  96. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js +12 -32
  97. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js.map +1 -1
  98. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js +7 -27
  99. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js.map +1 -1
  100. package/dist/cjs/utils/cli/utils/template-generators.js +2 -28
  101. package/dist/cjs/utils/cli/utils/watermark-stamper.js +3 -0
  102. package/dist/cjs/utils/cli/utils/watermark-stamper.js.map +1 -0
  103. package/dist/cjs/utils/dotenv.helpers.js +1 -43
  104. package/dist/cjs/utils/features/api.features.js +1 -161
  105. package/dist/cjs/utils/features/api.features.js.map +1 -1
  106. package/dist/cjs/utils/features/change-case.features.js +1 -67
  107. package/dist/cjs/utils/features/port-and-host-allocator.js +1 -0
  108. package/dist/cjs/utils/features/port-and-host-allocator.js.map +1 -0
  109. package/dist/cjs/utils/helpers/api.features.helpers.js +1 -106
  110. package/dist/cjs/utils/helpers/api.features.helpers.js.map +1 -1
  111. package/dist/cjs/utils/helpers/change-case.helpers.js +1 -177
  112. package/dist/cjs/utils/helpers/deepmerge.helper.js +1 -115
  113. package/dist/cjs/utils/helpers/fs.helpers.js +1 -54
  114. package/dist/cjs/utils/helpers/fs.helpers.js.map +1 -1
  115. package/dist/cjs/utils/helpers/global.helpers.js +1 -40
  116. package/dist/cjs/utils/helpers/global.helpers.js.map +1 -1
  117. package/dist/cjs/utils/helpers/models.helpers.js +11 -325
  118. package/dist/cjs/utils/helpers/models.helpers.js.map +1 -1
  119. package/dist/cjs/utils/helpers/prisma.helpers.js +1 -49
  120. package/dist/cjs/utils/helpers/prisma.helpers.js.map +1 -1
  121. package/dist/cjs/utils/helpers/query-parser.helpers.js +1 -45
  122. package/dist/cjs/utils/helpers/routers.helpers.js +1 -0
  123. package/dist/cjs/utils/helpers/routers.helpers.js.map +1 -0
  124. package/dist/cjs/utils/helpers/text.helpers.js +1 -28
  125. package/dist/cjs/utils/prisma/enhaced-prisma-json-schema-generator.js +1 -0
  126. package/dist/cjs/utils/prisma/enhaced-prisma-json-schema-generator.js.map +1 -0
  127. package/dist/cjs/utils/prisma/prisma-schema-parser.js +3 -0
  128. package/dist/cjs/utils/prisma/prisma-schema-parser.js.map +1 -0
  129. package/dist/cjs/utils/prisma/types.js +1 -0
  130. package/dist/cjs/utils/prisma/types.js.map +1 -0
  131. package/dist/cjs/utils/sheu.js +1 -0
  132. package/dist/cjs/utils/sheu.js.map +1 -0
  133. package/dist/cjs/utils/validate-dto.js +1 -17
  134. package/dist/cjs/utils/validate-schema.js +1 -15
  135. package/dist/esm/app.js +1 -0
  136. package/dist/esm/app.js.map +1 -0
  137. package/dist/esm/exports/auth/index.js +1 -0
  138. package/dist/esm/exports/controllers/index.js +1 -0
  139. package/dist/esm/exports/error-handler/index.js +1 -0
  140. package/dist/esm/exports/index.js +1 -0
  141. package/dist/esm/exports/middlewares/index.js +1 -0
  142. package/dist/esm/exports/prisma/index.js +1 -0
  143. package/dist/esm/exports/services/index.js +1 -0
  144. package/dist/esm/exports/utils/index.js +1 -0
  145. package/dist/esm/exports/validation/index.js +1 -0
  146. package/dist/esm/modules/auth/auth.controller.js +1 -0
  147. package/dist/esm/modules/auth/auth.router.js +1 -0
  148. package/dist/esm/modules/auth/auth.router.js.map +1 -0
  149. package/dist/esm/modules/auth/auth.service.js +1 -0
  150. package/dist/esm/modules/auth/auth.service.js.map +1 -0
  151. package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js +1 -0
  152. package/dist/esm/modules/base/base.controller.js +1 -0
  153. package/dist/esm/modules/base/base.controller.js.map +1 -0
  154. package/dist/esm/modules/base/base.middlewares.js +1 -0
  155. package/dist/esm/modules/base/base.middlewares.js.map +1 -0
  156. package/dist/esm/modules/base/base.router.js +1 -0
  157. package/dist/esm/modules/base/base.router.js.map +1 -0
  158. package/dist/esm/modules/base/base.service.js +1 -0
  159. package/dist/esm/modules/base/base.service.js.map +1 -0
  160. package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js +1 -0
  161. package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js +1 -0
  162. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js +1 -0
  163. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js.map +1 -0
  164. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +1 -0
  165. package/dist/esm/modules/email/email.service.js +1 -0
  166. package/dist/esm/modules/error-handler/error-handler.controller.js +4 -0
  167. package/dist/esm/modules/error-handler/error-handler.controller.js.map +1 -0
  168. package/dist/esm/modules/error-handler/utils/app-error.js +1 -0
  169. package/dist/esm/modules/error-handler/utils/catch-async.js +1 -0
  170. package/dist/esm/modules/error-handler/utils/catch-async.js.map +1 -0
  171. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js +3 -0
  172. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js.map +1 -0
  173. package/dist/esm/modules/file-upload/file-upload.controller.js +1 -0
  174. package/dist/esm/modules/file-upload/file-upload.router.js +1 -0
  175. package/dist/esm/modules/file-upload/file-upload.router.js.map +1 -0
  176. package/dist/esm/modules/file-upload/file-upload.service.js +1 -0
  177. package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js +1 -0
  178. package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js.map +1 -0
  179. package/dist/esm/modules/swagger/swagger.router.js +1 -0
  180. package/dist/esm/modules/swagger/swagger.router.js.map +1 -0
  181. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +1 -0
  182. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +1 -0
  183. package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.js +1 -0
  184. package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.js.map +1 -0
  185. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js +1 -0
  186. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +1 -0
  187. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -0
  188. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -0
  189. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -0
  190. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +1 -0
  191. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +1 -0
  192. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js.map +1 -0
  193. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +1 -0
  194. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js.map +1 -0
  195. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +1 -0
  196. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js.map +1 -0
  197. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js +1 -0
  198. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -0
  199. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js +1 -0
  200. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -0
  201. package/dist/esm/package.json +3 -0
  202. package/dist/esm/server.js +5 -0
  203. package/dist/esm/server.js.map +1 -0
  204. package/dist/esm/types/arkos-config.js +1 -0
  205. package/dist/esm/types/arkos-config.js.map +1 -0
  206. package/dist/esm/types/auth.js +1 -0
  207. package/dist/esm/types/index.js +1 -0
  208. package/dist/esm/types/router-config.js +1 -0
  209. package/dist/esm/utils/arkos-env.js +1 -0
  210. package/dist/esm/utils/cli/build.js +5 -0
  211. package/dist/esm/utils/cli/build.js.map +1 -0
  212. package/dist/esm/utils/cli/dev.js +5 -0
  213. package/dist/esm/utils/cli/dev.js.map +1 -0
  214. package/dist/esm/utils/cli/generate.js +12 -0
  215. package/dist/{es2020 → esm}/utils/cli/generate.js.map +1 -1
  216. package/dist/esm/utils/cli/index.js +1 -0
  217. package/dist/esm/utils/cli/start.js +1 -0
  218. package/dist/esm/utils/cli/start.js.map +1 -0
  219. package/dist/esm/utils/cli/utils/cli.helpers.js +1 -0
  220. package/dist/esm/utils/cli/utils/cli.helpers.js.map +1 -0
  221. package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +21 -0
  222. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js +12 -0
  223. package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js +206 -0
  224. package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +1 -0
  225. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +36 -0
  226. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +1 -0
  227. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js +18 -0
  228. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js.map +1 -0
  229. package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js +15 -0
  230. package/dist/{es2020 → esm}/utils/cli/utils/template-generator/templates/generate-service-template.js.map +1 -1
  231. package/dist/esm/utils/cli/utils/template-generators.js +2 -0
  232. package/dist/esm/utils/cli/utils/watermark-stamper.js +3 -0
  233. package/dist/esm/utils/cli/utils/watermark-stamper.js.map +1 -0
  234. package/dist/esm/utils/dotenv.helpers.js +1 -0
  235. package/dist/esm/utils/features/api.features.js +1 -0
  236. package/dist/esm/utils/features/api.features.js.map +1 -0
  237. package/dist/esm/utils/features/change-case.features.js +1 -0
  238. package/dist/esm/utils/features/port-and-host-allocator.js +1 -0
  239. package/dist/esm/utils/features/port-and-host-allocator.js.map +1 -0
  240. package/dist/esm/utils/helpers/api.features.helpers.js +1 -0
  241. package/dist/esm/utils/helpers/api.features.helpers.js.map +1 -0
  242. package/dist/esm/utils/helpers/change-case.helpers.js +1 -0
  243. package/dist/esm/utils/helpers/deepmerge.helper.js +1 -0
  244. package/dist/esm/utils/helpers/fs.helpers.js +1 -0
  245. package/dist/esm/utils/helpers/fs.helpers.js.map +1 -0
  246. package/dist/esm/utils/helpers/global.helpers.js +1 -0
  247. package/dist/esm/utils/helpers/global.helpers.js.map +1 -0
  248. package/dist/esm/utils/helpers/models.helpers.js +11 -0
  249. package/dist/esm/utils/helpers/models.helpers.js.map +1 -0
  250. package/dist/esm/utils/helpers/prisma.helpers.js +1 -0
  251. package/dist/esm/utils/helpers/prisma.helpers.js.map +1 -0
  252. package/dist/esm/utils/helpers/query-parser.helpers.js +1 -0
  253. package/dist/esm/utils/helpers/routers.helpers.js +1 -0
  254. package/dist/esm/utils/helpers/routers.helpers.js.map +1 -0
  255. package/dist/esm/utils/helpers/text.helpers.js +1 -0
  256. package/dist/esm/utils/prisma/enhaced-prisma-json-schema-generator.js +1 -0
  257. package/dist/esm/utils/prisma/enhaced-prisma-json-schema-generator.js.map +1 -0
  258. package/dist/esm/utils/prisma/prisma-schema-parser.js +3 -0
  259. package/dist/esm/utils/prisma/prisma-schema-parser.js.map +1 -0
  260. package/dist/esm/utils/prisma/types.js +1 -0
  261. package/dist/esm/utils/prisma/types.js.map +1 -0
  262. package/dist/esm/utils/sheu.js +1 -0
  263. package/dist/esm/utils/sheu.js.map +1 -0
  264. package/dist/esm/utils/validate-dto.js +1 -0
  265. package/dist/esm/utils/validate-schema.js +1 -0
  266. package/dist/types/modules/base/base.middlewares.d.ts +4 -4
  267. package/dist/types/modules/base/base.service.d.ts +1 -1
  268. package/dist/types/modules/base/utils/helpers/base.router.helpers.d.ts +4 -1
  269. package/dist/types/modules/error-handler/error-handler.controller.d.ts +1 -1
  270. package/dist/types/modules/error-handler/utils/catch-async.d.ts +1 -0
  271. package/dist/types/modules/error-handler/utils/error-handler.helpers.d.ts +4 -0
  272. package/dist/types/modules/file-upload/file-upload.router.d.ts +1 -1
  273. package/dist/types/modules/file-upload/utils/helpers/file-upload.helpers.d.ts +2 -1
  274. package/dist/types/modules/swagger/swagger.router.d.ts +1 -1
  275. package/dist/types/modules/swagger/utils/helpers/get-authentication-json-schema-paths.d.ts +4 -0
  276. package/dist/types/modules/swagger/utils/helpers/get-swagger-default-configs.d.ts +46 -0
  277. package/dist/types/modules/swagger/utils/helpers/get-system-json-schema-paths.d.ts +2 -0
  278. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.d.ts +1 -0
  279. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.d.ts +2 -0
  280. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.d.ts +1 -0
  281. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.d.ts +3 -0
  282. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.d.ts +3 -0
  283. package/dist/types/modules/swagger/utils/helpers/missing-json-schemas-generator.d.ts +34 -0
  284. package/dist/types/modules/swagger/utils/helpers/swagger.router.helpers.d.ts +7 -0
  285. package/dist/types/server.d.ts +3 -0
  286. package/dist/types/types/arkos-config.d.ts +10 -5
  287. package/dist/types/utils/cli/utils/cli.helpers.d.ts +1 -1
  288. package/dist/types/utils/cli/utils/watermark-stamper.d.ts +9 -0
  289. package/dist/types/utils/features/api.features.d.ts +1 -0
  290. package/dist/types/utils/features/port-and-host-allocator.d.ts +21 -0
  291. package/dist/types/utils/helpers/global.helpers.d.ts +6 -1
  292. package/dist/types/utils/helpers/models.helpers.d.ts +31 -5
  293. package/dist/types/utils/helpers/routers.helpers.d.ts +2 -0
  294. package/dist/types/utils/prisma/enhaced-prisma-json-schema-generator.d.ts +34 -0
  295. package/dist/types/utils/prisma/prisma-schema-parser.d.ts +18 -0
  296. package/dist/types/utils/prisma/types.d.ts +48 -0
  297. package/dist/types/utils/sheu.d.ts +70 -0
  298. package/package.json +43 -41
  299. package/dist/es2020/app.js +0 -1
  300. package/dist/es2020/app.js.map +0 -1
  301. package/dist/es2020/exports/auth/index.js +0 -2
  302. package/dist/es2020/exports/controllers/index.js +0 -4
  303. package/dist/es2020/exports/error-handler/index.js +0 -4
  304. package/dist/es2020/exports/index.js +0 -8
  305. package/dist/es2020/exports/middlewares/index.js +0 -2
  306. package/dist/es2020/exports/prisma/index.js +0 -3
  307. package/dist/es2020/exports/services/index.js +0 -9
  308. package/dist/es2020/exports/utils/index.js +0 -4
  309. package/dist/es2020/exports/validation/index.js +0 -4
  310. package/dist/es2020/modules/auth/auth.controller.js +0 -187
  311. package/dist/es2020/modules/auth/auth.router.js +0 -118
  312. package/dist/es2020/modules/auth/auth.router.js.map +0 -1
  313. package/dist/es2020/modules/auth/auth.service.js +0 -185
  314. package/dist/es2020/modules/auth/auth.service.js.map +0 -1
  315. package/dist/es2020/modules/auth/utils/helpers/auth.controller.helpers.js +0 -73
  316. package/dist/es2020/modules/base/base.controller.js +0 -151
  317. package/dist/es2020/modules/base/base.controller.js.map +0 -1
  318. package/dist/es2020/modules/base/base.middlewares.js +0 -81
  319. package/dist/es2020/modules/base/base.middlewares.js.map +0 -1
  320. package/dist/es2020/modules/base/base.router.js +0 -17
  321. package/dist/es2020/modules/base/base.router.js.map +0 -1
  322. package/dist/es2020/modules/base/base.service.js +0 -120
  323. package/dist/es2020/modules/base/base.service.js.map +0 -1
  324. package/dist/es2020/modules/base/utils/helpers/base.controller.helpers.js +0 -77
  325. package/dist/es2020/modules/base/utils/helpers/base.middlewares.helpers.js +0 -44
  326. package/dist/es2020/modules/base/utils/helpers/base.router.helpers.js +0 -161
  327. package/dist/es2020/modules/base/utils/helpers/base.router.helpers.js.map +0 -1
  328. package/dist/es2020/modules/base/utils/helpers/base.service.helpers.js +0 -165
  329. package/dist/es2020/modules/email/email.service.js +0 -97
  330. package/dist/es2020/modules/error-handler/error-handler.controller.js +0 -105
  331. package/dist/es2020/modules/error-handler/error-handler.controller.js.map +0 -1
  332. package/dist/es2020/modules/error-handler/utils/app-error.js +0 -15
  333. package/dist/es2020/modules/error-handler/utils/catch-async.js +0 -10
  334. package/dist/es2020/modules/error-handler/utils/catch-async.js.map +0 -1
  335. package/dist/es2020/modules/error-handler/utils/error-handler.helpers.js +0 -155
  336. package/dist/es2020/modules/error-handler/utils/error-handler.helpers.js.map +0 -1
  337. package/dist/es2020/modules/file-upload/file-upload.controller.js +0 -266
  338. package/dist/es2020/modules/file-upload/file-upload.router.js +0 -50
  339. package/dist/es2020/modules/file-upload/file-upload.router.js.map +0 -1
  340. package/dist/es2020/modules/file-upload/file-upload.service.js +0 -314
  341. package/dist/es2020/modules/file-upload/utils/helpers/file-upload.helpers.js +0 -81
  342. package/dist/es2020/modules/file-upload/utils/helpers/file-upload.helpers.js.map +0 -1
  343. package/dist/es2020/modules/swagger/swagger.router.js +0 -135
  344. package/dist/es2020/modules/swagger/swagger.router.js.map +0 -1
  345. package/dist/es2020/server.js +0 -3
  346. package/dist/es2020/server.js.map +0 -1
  347. package/dist/es2020/types/arkos-config.js +0 -2
  348. package/dist/es2020/types/arkos-config.js.map +0 -1
  349. package/dist/es2020/types/auth.js +0 -2
  350. package/dist/es2020/types/index.js +0 -8
  351. package/dist/es2020/types/router-config.js +0 -2
  352. package/dist/es2020/utils/arkos-env.js +0 -7
  353. package/dist/es2020/utils/cli/build.js +0 -223
  354. package/dist/es2020/utils/cli/build.js.map +0 -1
  355. package/dist/es2020/utils/cli/dev.js +0 -260
  356. package/dist/es2020/utils/cli/dev.js.map +0 -1
  357. package/dist/es2020/utils/cli/generate.js +0 -183
  358. package/dist/es2020/utils/cli/index.js +0 -74
  359. package/dist/es2020/utils/cli/start.js +0 -86
  360. package/dist/es2020/utils/cli/start.js.map +0 -1
  361. package/dist/es2020/utils/cli/utils/cli.helpers.js +0 -18
  362. package/dist/es2020/utils/cli/utils/cli.helpers.js.map +0 -1
  363. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +0 -33
  364. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-controller-template.js +0 -18
  365. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-middlewares.js +0 -265
  366. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +0 -1
  367. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +0 -55
  368. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +0 -1
  369. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-router-template.js +0 -32
  370. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-router-template.js.map +0 -1
  371. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-service-template.js +0 -32
  372. package/dist/es2020/utils/cli/utils/template-generators.js +0 -25
  373. package/dist/es2020/utils/dotenv.helpers.js +0 -37
  374. package/dist/es2020/utils/features/api.features.js +0 -154
  375. package/dist/es2020/utils/features/api.features.js.map +0 -1
  376. package/dist/es2020/utils/features/change-case.features.js +0 -31
  377. package/dist/es2020/utils/helpers/api.features.helpers.js +0 -103
  378. package/dist/es2020/utils/helpers/api.features.helpers.js.map +0 -1
  379. package/dist/es2020/utils/helpers/change-case.helpers.js +0 -161
  380. package/dist/es2020/utils/helpers/deepmerge.helper.js +0 -113
  381. package/dist/es2020/utils/helpers/fs.helpers.js +0 -45
  382. package/dist/es2020/utils/helpers/fs.helpers.js.map +0 -1
  383. package/dist/es2020/utils/helpers/global.helpers.js +0 -4
  384. package/dist/es2020/utils/helpers/global.helpers.js.map +0 -1
  385. package/dist/es2020/utils/helpers/models.helpers.js +0 -276
  386. package/dist/es2020/utils/helpers/models.helpers.js.map +0 -1
  387. package/dist/es2020/utils/helpers/prisma.helpers.js +0 -41
  388. package/dist/es2020/utils/helpers/prisma.helpers.js.map +0 -1
  389. package/dist/es2020/utils/helpers/query-parser.helpers.js +0 -40
  390. package/dist/es2020/utils/helpers/text.helpers.js +0 -22
  391. package/dist/es2020/utils/validate-dto.js +0 -11
  392. package/dist/es2020/utils/validate-schema.js +0 -9
  393. /package/dist/{es2020 → esm}/exports/auth/index.js.map +0 -0
  394. /package/dist/{es2020 → esm}/exports/controllers/index.js.map +0 -0
  395. /package/dist/{es2020 → esm}/exports/error-handler/index.js.map +0 -0
  396. /package/dist/{es2020 → esm}/exports/index.js.map +0 -0
  397. /package/dist/{es2020 → esm}/exports/middlewares/index.js.map +0 -0
  398. /package/dist/{es2020 → esm}/exports/prisma/index.js.map +0 -0
  399. /package/dist/{es2020 → esm}/exports/services/index.js.map +0 -0
  400. /package/dist/{es2020 → esm}/exports/utils/index.js.map +0 -0
  401. /package/dist/{es2020 → esm}/exports/validation/index.js.map +0 -0
  402. /package/dist/{es2020 → esm}/modules/auth/auth.controller.js.map +0 -0
  403. /package/dist/{es2020 → esm}/modules/auth/utils/helpers/auth.controller.helpers.js.map +0 -0
  404. /package/dist/{es2020 → esm}/modules/base/utils/helpers/base.controller.helpers.js.map +0 -0
  405. /package/dist/{es2020 → esm}/modules/base/utils/helpers/base.middlewares.helpers.js.map +0 -0
  406. /package/dist/{es2020 → esm}/modules/base/utils/helpers/base.service.helpers.js.map +0 -0
  407. /package/dist/{es2020 → esm}/modules/email/email.service.js.map +0 -0
  408. /package/dist/{es2020 → esm}/modules/error-handler/utils/app-error.js.map +0 -0
  409. /package/dist/{es2020 → esm}/modules/file-upload/file-upload.controller.js.map +0 -0
  410. /package/dist/{es2020 → esm}/modules/file-upload/file-upload.service.js.map +0 -0
  411. /package/dist/{es2020 → esm}/paths.js +0 -0
  412. /package/dist/{es2020 → esm}/paths.js.map +0 -0
  413. /package/dist/{es2020 → esm}/types/auth.js.map +0 -0
  414. /package/dist/{es2020 → esm}/types/index.js.map +0 -0
  415. /package/dist/{es2020 → esm}/types/router-config.js.map +0 -0
  416. /package/dist/{es2020 → esm}/utils/arkos-env.js.map +0 -0
  417. /package/dist/{es2020 → esm}/utils/cli/index.js.map +0 -0
  418. /package/dist/{es2020 → esm}/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js.map +0 -0
  419. /package/dist/{es2020 → esm}/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +0 -0
  420. /package/dist/{es2020 → esm}/utils/cli/utils/template-generators.js.map +0 -0
  421. /package/dist/{es2020 → esm}/utils/dotenv.helpers.js.map +0 -0
  422. /package/dist/{es2020 → esm}/utils/features/change-case.features.js.map +0 -0
  423. /package/dist/{es2020 → esm}/utils/helpers/change-case.helpers.js.map +0 -0
  424. /package/dist/{es2020 → esm}/utils/helpers/deepmerge.helper.js.map +0 -0
  425. /package/dist/{es2020 → esm}/utils/helpers/query-parser.helpers.js.map +0 -0
  426. /package/dist/{es2020 → esm}/utils/helpers/text.helpers.js.map +0 -0
  427. /package/dist/{es2020 → esm}/utils/validate-dto.js.map +0 -0
  428. /package/dist/{es2020 → esm}/utils/validate-schema.js.map +0 -0
@@ -1,28 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateTemplate = generateTemplate;
4
- const generate_controller_template_1 = require("./template-generator/templates/generate-controller-template");
5
- const generate_auth_configs_template_1 = require("./template-generator/templates/generate-auth-configs-template");
6
- const generate_middlewares_1 = require("./template-generator/templates/generate-middlewares");
7
- const generate_prisma_query_options_1 = require("./template-generator/templates/generate-prisma-query-options");
8
- const generate_router_template_1 = require("./template-generator/templates/generate-router-template");
9
- const generate_service_template_1 = require("./template-generator/templates/generate-service-template");
10
- function generateTemplate(type, options) {
11
- switch (type) {
12
- case "controller":
13
- return (0, generate_controller_template_1.generateControllerTemplate)(options);
14
- case "service":
15
- return (0, generate_service_template_1.generateServiceTemplate)(options);
16
- case "router":
17
- return (0, generate_router_template_1.generateRouterTemplate)(options);
18
- case "auth-configs":
19
- return (0, generate_auth_configs_template_1.generateAuthConfigsTemplate)(options);
20
- case "query-options":
21
- return (0, generate_prisma_query_options_1.generateQueryOptionsTemplate)(options);
22
- case "middlewares":
23
- return (0, generate_middlewares_1.generateMiddlewaresTemplate)(options);
24
- default:
25
- throw new Error(`\n Unknown template type: ${type}`);
26
- }
27
- }
28
- //# sourceMappingURL=template-generators.js.map
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.generateTemplate=generateTemplate;const generate_controller_template_1=require("./template-generator/templates/generate-controller-template"),generate_auth_configs_template_1=require("./template-generator/templates/generate-auth-configs-template"),generate_middlewares_1=require("./template-generator/templates/generate-middlewares"),generate_prisma_query_options_1=require("./template-generator/templates/generate-prisma-query-options"),generate_router_template_1=require("./template-generator/templates/generate-router-template"),generate_service_template_1=require("./template-generator/templates/generate-service-template");function generateTemplate(t,e){switch(t){case"controller":return(0,generate_controller_template_1.generateControllerTemplate)(e);case"service":return(0,generate_service_template_1.generateServiceTemplate)(e);case"router":return(0,generate_router_template_1.generateRouterTemplate)(e);case"auth-configs":return(0,generate_auth_configs_template_1.generateAuthConfigsTemplate)(e);case"query-options":return(0,generate_prisma_query_options_1.generateQueryOptionsTemplate)(e);case"middlewares":return(0,generate_middlewares_1.generateMiddlewaresTemplate)(e);default:throw new Error(`
2
+ Unknown template type: ${t}`)}}
@@ -0,0 +1,3 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const cli_helpers_1=require("./cli.helpers");class WatermarkStamper{stamp({envFiles:e,host:r,port:o}){console.info(`
2
+ \x1B[1m\x1B[36m Arkos.js ${(0,cli_helpers_1.getVersion)()}\x1B[0m`),r&&o&&console.info(` - Local: http://${r}:${o}`),e?.length&&console.info(` - Environments: ${e?.join(", ").replaceAll(`${process.cwd()}/`,"")}
3
+ `)}}const watermarkStamper=new WatermarkStamper;exports.default=watermarkStamper;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watermark-stamper.js","sourceRoot":"","sources":["../../../../../src/utils/cli/utils/watermark-stamper.ts"],"names":[],"mappings":";;AAAA,+CAA2C;AAK3C,MAAM,gBAAgB;IAIpB,KAAK,CAAC,EACJ,QAAQ,EACR,IAAI,EACJ,IAAI,GAKL;QACC,OAAO,CAAC,IAAI,CAAC,iCAAiC,IAAA,wBAAU,GAAE,SAAS,CAAC,CAAC;QACrE,IAAI,IAAI,IAAI,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,4BAA4B,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QAC3E,IAAI,QAAQ,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC;YAC3B,OAAO,CAAC,IAAI,CACV,qBAAqB,QAAQ;gBAC3B,EAAE,IAAI,CAAC,IAAI,CAAC;iBACX,UAAU,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAC3C,CAAC;IACN,CAAC;CACF;AAED,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAEhD,kBAAe,gBAAgB,CAAC","sourcesContent":["import { getVersion } from \"./cli.helpers\";\n\n/**\n * Helps in putting Arkosjs watermark\n */\nclass WatermarkStamper {\n /**\n * Stamps Arkosjs watermark with Local and Environments\n */\n stamp({\n envFiles,\n host,\n port,\n }: {\n envFiles: string[] | undefined;\n host: string | undefined;\n port: string | undefined;\n }) {\n console.info(`\\n \\x1b[1m\\x1b[36m Arkos.js ${getVersion()}\\x1b[0m`);\n if (host && port) console.info(` - Local: http://${host}:${port}`);\n if (envFiles?.length || 0 > 1)\n console.info(\n ` - Environments: ${envFiles\n ?.join(\", \")\n .replaceAll(`${process.cwd()}/`, \"\")}\\n`\n );\n }\n}\n\nconst watermarkStamper = new WatermarkStamper();\n\nexport default watermarkStamper;\n"]}
@@ -1,43 +1 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.loadEnvironmentVariables = loadEnvironmentVariables;
7
- const path_1 = __importDefault(require("path"));
8
- const fs_1 = __importDefault(require("fs"));
9
- const dotenv_1 = __importDefault(require("dotenv"));
10
- function loadEnvironmentVariables() {
11
- const ENV = process.env.NODE_ENV;
12
- const cwd = process.cwd();
13
- let loadedEnvs = [];
14
- const envFiles = [
15
- path_1.default.resolve(cwd, `.env.defaults`),
16
- path_1.default.resolve(cwd, `.env.${ENV}`),
17
- path_1.default.resolve(cwd, `.env.${ENV}.local`),
18
- path_1.default.resolve(cwd, ".env.local"),
19
- path_1.default.resolve(cwd, ".env"),
20
- ];
21
- envFiles.forEach((filePath) => {
22
- if (fs_1.default.existsSync(filePath)) {
23
- if (ENV === "production" && filePath.endsWith(".local"))
24
- console.info(`Skipping the local ${filePath.replace(cwd, "")} files in production`);
25
- else {
26
- const result = dotenv_1.default.config({ path: filePath, override: true });
27
- if (result.error) {
28
- console.warn(`Warning: Error loading ${filePath}`, result.error);
29
- }
30
- else
31
- loadedEnvs.push(filePath);
32
- }
33
- }
34
- });
35
- const requiredVars = ["DATABASE_URL"];
36
- const missingVars = requiredVars.filter((varName) => !process.env[varName]);
37
- if (missingVars.length > 0) {
38
- console.error("Missing required environment variables:", missingVars.join(", "));
39
- }
40
- if (loadedEnvs)
41
- return loadedEnvs;
42
- }
43
- //# sourceMappingURL=dotenv.helpers.js.map
1
+ "use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.loadEnvironmentVariables=loadEnvironmentVariables;const path_1=__importDefault(require("path")),fs_1=__importDefault(require("fs")),dotenv_1=__importDefault(require("dotenv"));function loadEnvironmentVariables(){const e=process.env.NODE_ENV,n=process.cwd();let o=[];[path_1.default.resolve(n,".env.defaults"),path_1.default.resolve(n,`.env.${e}`),path_1.default.resolve(n,`.env.${e}.local`),path_1.default.resolve(n,".env.local"),path_1.default.resolve(n,".env")].forEach(r=>{if(fs_1.default.existsSync(r))if(e==="production"&&r.endsWith(".local"))console.info(`Skipping the local ${r.replace(n,"")} files in production`);else{const t=dotenv_1.default.config({path:r,override:!0});t.error?console.warn(`Warning: Error loading ${r}`,t.error):o.push(r)}});const s=["DATABASE_URL"].filter(r=>!process.env[r]);if(s.length>0&&console.error("Missing required environment variables:",s.join(", ")),o)return o}
@@ -1,161 +1 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.apiFeatures = void 0;
7
- const deepmerge_helper_1 = __importDefault(require("../helpers/deepmerge.helper"));
8
- const api_features_helpers_1 = require("../helpers/api.features.helpers");
9
- const app_error_1 = __importDefault(require("../../modules/error-handler/utils/app-error"));
10
- const prisma_helpers_1 = require("../helpers/prisma.helpers");
11
- class APIFeatures {
12
- constructor(req, modelName) {
13
- this.filters = {};
14
- this.excludedFields = [
15
- "page",
16
- "sort",
17
- "limit",
18
- "fields",
19
- "addFields",
20
- "removeFields",
21
- "search",
22
- "include",
23
- "filterMode",
24
- "where",
25
- "prismaQueryOptions",
26
- "ignoredFields",
27
- ];
28
- if (req) {
29
- this.req = req;
30
- this.searchParams = (0, api_features_helpers_1.parseQueryParamsWithModifiers)(req.query);
31
- }
32
- if (modelName)
33
- this.modelName = modelName;
34
- this.filters = { ...this.filters };
35
- }
36
- setup(req, modelName) {
37
- this.req = req;
38
- this.searchParams = (0, api_features_helpers_1.parseQueryParamsWithModifiers)(req.query);
39
- if (modelName)
40
- this.modelName = modelName;
41
- this.filters = { ...this.filters };
42
- return this;
43
- }
44
- filter() {
45
- if (!this.req)
46
- throw new Error("Trying to use APIFeatures.filter() without passing request on class constructor or APIFeatures.setup() method. read more about at www.arkosjs.com/docs/advanced-guide/api-features-class");
47
- const searchableFields = [];
48
- const queryObj = { ...this.searchParams };
49
- this.excludedFields.forEach((el) => delete queryObj[el]);
50
- const whereObj = { ...this.req.params, ...queryObj };
51
- const whereLogicalOperatorFilters = Object.keys(whereObj).map((key) => ({
52
- [key]: whereObj[key],
53
- }));
54
- let whereOptions = whereLogicalOperatorFilters.length > 0
55
- ? {
56
- [this.req.query?.filterMode ?? "OR"]: whereLogicalOperatorFilters,
57
- }
58
- : {};
59
- if (!!this.searchParams.search) {
60
- const prisma = (0, prisma_helpers_1.getPrismaInstance)();
61
- if (this.modelName)
62
- Object.keys(prisma[this.modelName].fields).forEach((key) => {
63
- const field = prisma[this.modelName].fields[key];
64
- if (field.typeName === "String" &&
65
- key !== "id" &&
66
- key !== "password" &&
67
- !field.isList &&
68
- !key?.includes?.("Id") &&
69
- !key?.includes?.("ID")) {
70
- searchableFields.push({
71
- [`${key}`]: {
72
- contains: this.searchParams.search,
73
- mode: "insensitive",
74
- },
75
- });
76
- }
77
- });
78
- whereOptions = (0, deepmerge_helper_1.default)({
79
- OR: searchableFields,
80
- }, whereOptions);
81
- }
82
- const firstMerge = (0, deepmerge_helper_1.default)({
83
- where: whereOptions,
84
- }, this.req.prismaQueryOptions || {});
85
- this.filters = (0, deepmerge_helper_1.default)(firstMerge, this.filters);
86
- return this;
87
- }
88
- search() {
89
- if (this.searchParams?.search) {
90
- this.filters = (0, deepmerge_helper_1.default)(this.filters, {
91
- where: {
92
- OR: [],
93
- },
94
- });
95
- }
96
- }
97
- sort() {
98
- if (this.searchParams.sort) {
99
- const sortBy = this.searchParams?.sort
100
- ?.split(",")
101
- ?.map((field) => ({
102
- [field.startsWith("-") ? field.substring(1) : field]: field.startsWith("-") ? "desc" : "asc",
103
- }));
104
- this.filters = (0, deepmerge_helper_1.default)(this.filters, { orderBy: sortBy });
105
- }
106
- return this;
107
- }
108
- limitFields() {
109
- if (this.searchParams?.fields) {
110
- const fields = this.searchParams.fields.split(",");
111
- const regularFields = fields.filter((field) => !field.startsWith("+") && !field.startsWith("-"));
112
- const includeFields = fields
113
- .filter((field) => field.startsWith("+"))
114
- .map((field) => field.substring(1));
115
- const excludeFields = fields
116
- .filter((field) => field.startsWith("-"))
117
- .map((field) => field.substring(1));
118
- let selection = {};
119
- if (regularFields.length > 0) {
120
- selection = regularFields.reduce((acc, field) => {
121
- acc[field] = true;
122
- return acc;
123
- }, {});
124
- }
125
- else {
126
- selection = this.filters.include || {};
127
- includeFields.forEach((field) => {
128
- selection[field] = true;
129
- });
130
- excludeFields.forEach((field) => {
131
- selection[field] = false;
132
- });
133
- }
134
- this.filters = {
135
- ...this.filters,
136
- select: selection,
137
- };
138
- if (this.filters.include) {
139
- delete this.filters.include;
140
- }
141
- }
142
- if (this.searchParams?.addFields || this.searchParams?.removeFields) {
143
- throw new app_error_1.default("The addFields and removeFields parameters are deprecated. Please use fields with + and - prefixes instead.", 400);
144
- }
145
- return this;
146
- }
147
- paginate() {
148
- const page = parseInt(this.searchParams.page, 10) || 1;
149
- const limit = parseInt(this.searchParams.limit, 10) || 30;
150
- const skip = (page - 1) * limit;
151
- this.filters = {
152
- ...this.filters,
153
- skip,
154
- take: limit,
155
- };
156
- return this;
157
- }
158
- }
159
- exports.default = APIFeatures;
160
- exports.apiFeatures = new APIFeatures();
161
- //# sourceMappingURL=api.features.js.map
1
+ "use strict";var __importDefault=function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.apiFeatures=void 0;const deepmerge_helper_1=__importDefault(require("../helpers/deepmerge.helper")),api_features_helpers_1=require("../helpers/api.features.helpers"),app_error_1=__importDefault(require("../../modules/error-handler/utils/app-error")),prisma_helpers_1=require("../helpers/prisma.helpers");class APIFeatures{constructor(e,s){if(this.filters={},this.reqFiltersSearchParam={},this.excludedFields=["page","filters","sort","limit","fields","addFields","removeFields","search","include","filterMode","where","prismaQueryOptions","ignoredFields"],e){const{filters:t="{}",...h}=e.query;this.req=e,this.searchParams=(0,deepmerge_helper_1.default)((0,api_features_helpers_1.parseQueryParamsWithModifiers)(h),(0,api_features_helpers_1.parseQueryParamsWithModifiers)(JSON.parse(t))),e.finalPrismaQueryOptions=this.searchParams}s&&(this.modelName=s),this.filters={...this.filters}}setup(e,s){if(e){const{filters:t="{}",...h}=e.query;this.req=e,this.searchParams=(0,deepmerge_helper_1.default)((0,api_features_helpers_1.parseQueryParamsWithModifiers)(h),(0,api_features_helpers_1.parseQueryParamsWithModifiers)(JSON.parse(t))),e.finalPrismaQueryOptions=this.searchParams}return s&&(this.modelName=s),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 e=[],s={...this.searchParams};this.excludedFields.forEach(a=>delete s[a]);const t={...this.req.params,...s},h=Object.keys(t).map(a=>({[a]:t[a]}));let i=h.length>0?{[this.req.query?.filterMode??"OR"]:h}:{};if(this.searchParams.search){const a=(0,prisma_helpers_1.getPrismaInstance)();this.modelName&&Object.keys(a[this.modelName].fields).forEach(l=>{const d=a[this.modelName].fields[l];d?.typeName==="String"&&l!=="id"&&l!=="password"&&!d.isList&&!l?.includes?.("Id")&&!l?.includes?.("ID")&&e.push({[`${l}`]:{contains:this.searchParams.search,mode:"insensitive"}})}),i=(0,deepmerge_helper_1.default)({OR:e},i)}const r=(0,deepmerge_helper_1.default)({where:i},this.req.prismaQueryOptions||{});return this.filters=(0,deepmerge_helper_1.default)(r,this.filters),this}search(){this.searchParams?.search&&(this.filters=(0,deepmerge_helper_1.default)(this.filters,{where:{OR:[]}}))}sort(){if(this.searchParams.sort){const e=this.searchParams?.sort?.split(",")?.map(s=>({[s.startsWith("-")?s.substring(1):s]:s.startsWith("-")?"desc":"asc"}));this.filters=(0,deepmerge_helper_1.default)(this.filters,{orderBy:e})}return this}limitFields(){if(this.searchParams?.fields){const e=this.searchParams.fields.split(","),s=e.filter(r=>!r.startsWith("+")&&!r.startsWith("-")),t=e.filter(r=>r.startsWith("+")).map(r=>r.substring(1)),h=e.filter(r=>r.startsWith("-")).map(r=>r.substring(1));let i={};s.length>0?i=s.reduce((r,a)=>(r[a]=!0,r),{}):(i=this.filters.include||{},t.forEach(r=>{i[r]=!0}),h.forEach(r=>{i[r]=!1})),this.filters={...this.filters,select:i},this.filters.include&&delete this.filters.include}if(this.searchParams?.addFields||this.searchParams?.removeFields)throw new app_error_1.default("The addFields and removeFields parameters are deprecated. Please use fields with + and - prefixes instead.",400);return this}paginate(){const e=parseInt(this.searchParams.page,10)||1,s=parseInt(this.searchParams.limit,10)||30,t=(e-1)*s;return this.filters={...this.filters,skip:t,take:s},this}}exports.default=APIFeatures,exports.apiFeatures=new APIFeatures;
@@ -1 +1 @@
1
- {"version":3,"file":"api.features.js","sourceRoot":"","sources":["../../../../src/utils/features/api.features.ts"],"names":[],"mappings":"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","sourcesContent":["import { Request } from \"express\";\nimport deepmerge from \"../helpers/deepmerge.helper\";\nimport { parseQueryParamsWithModifiers } from \"../helpers/api.features.helpers\";\nimport AppError from \"../../modules/error-handler/utils/app-error\";\nimport { getPrismaInstance } from \"../helpers/prisma.helpers\";\nimport { ArkosRequest } from \"../../types\";\n\ntype ModelName = string;\n\nexport default class APIFeatures {\n req?: ArkosRequest;\n searchParams: any; // The query string parameters from the request\n searchParamsWithModifiers: any; // The query string parameters from the request\n filters: any = {};\n modelName?: ModelName;\n excludedFields = [\n \"page\",\n \"sort\",\n \"limit\",\n \"fields\",\n \"addFields\",\n \"removeFields\",\n \"search\",\n \"include\",\n \"filterMode\",\n \"where\",\n \"prismaQueryOptions\",\n \"ignoredFields\",\n ];\n\n constructor(req?: Request, modelName?: ModelName) {\n if (req) {\n this.req = req;\n this.searchParams = parseQueryParamsWithModifiers(req.query);\n }\n if (modelName) this.modelName = modelName;\n this.filters = { ...this.filters };\n }\n\n setup(req: Request, modelName?: ModelName) {\n this.req = req;\n this.searchParams = parseQueryParamsWithModifiers(req.query);\n if (modelName) this.modelName = modelName;\n this.filters = { ...this.filters };\n\n return this;\n }\n\n filter() {\n if (!this.req)\n throw new Error(\n \"Trying to use APIFeatures.filter() without passing request on class constructor or APIFeatures.setup() method. read more about at www.arkosjs.com/docs/advanced-guide/api-features-class\"\n );\n const searchableFields: Record<string, any>[] = [];\n\n const queryObj = { ...this.searchParams };\n\n this.excludedFields.forEach((el) => delete queryObj[el]);\n\n const whereObj = { ...this.req.params, ...queryObj };\n const whereLogicalOperatorFilters = Object.keys(whereObj).map((key) => ({\n [key]: whereObj[key],\n }));\n\n let whereOptions =\n whereLogicalOperatorFilters.length > 0\n ? {\n [(this.req.query?.filterMode as string) ?? \"OR\"]:\n whereLogicalOperatorFilters,\n }\n : {};\n\n if (!!this.searchParams.search) {\n const prisma = getPrismaInstance();\n\n if (this.modelName)\n Object.keys((prisma as any)[this.modelName].fields).forEach((key) => {\n const field = ((prisma as any)[this.modelName!].fields as any)[key];\n if (\n field.typeName === \"String\" &&\n key !== \"id\" &&\n key !== \"password\" &&\n !field.isList &&\n !key?.includes?.(\"Id\") &&\n !key?.includes?.(\"ID\")\n ) {\n searchableFields.push({\n [`${key}`]: {\n contains: this.searchParams.search,\n mode: \"insensitive\",\n },\n });\n }\n });\n\n whereOptions = deepmerge(\n {\n OR: searchableFields,\n },\n whereOptions\n );\n }\n\n const firstMerge = deepmerge(\n {\n where: whereOptions,\n },\n this.req.prismaQueryOptions || {}\n );\n\n this.filters = deepmerge(firstMerge, this.filters);\n return this;\n }\n\n search() {\n if (this.searchParams?.search) {\n this.filters = deepmerge(this.filters, {\n where: {\n OR: [],\n },\n });\n }\n }\n\n sort() {\n if (this.searchParams.sort) {\n const sortBy = this.searchParams?.sort\n ?.split(\",\")\n ?.map((field: string) => ({\n [field.startsWith(\"-\") ? field.substring(1) : field]:\n field.startsWith(\"-\") ? \"desc\" : \"asc\",\n }));\n this.filters = deepmerge(this.filters, { orderBy: sortBy });\n }\n\n return this;\n }\n\n limitFields() {\n if (this.searchParams?.fields) {\n const fields = this.searchParams.fields.split(\",\");\n\n // Separate fields into includes, excludes, and regular fields\n const regularFields = fields.filter(\n (field: string) => !field.startsWith(\"+\") && !field.startsWith(\"-\")\n );\n const includeFields = fields\n .filter((field: string) => field.startsWith(\"+\"))\n .map((field: string) => field.substring(1));\n const excludeFields = fields\n .filter((field: string) => field.startsWith(\"-\"))\n .map((field: string) => field.substring(1));\n\n // Create selection object based on field type\n let selection: Record<string, any> = {};\n\n // If regular fields exist, use them as the base selection\n if (regularFields.length > 0) {\n selection = regularFields.reduce(\n (acc: Record<string, any>, field: string) => {\n acc[field] = true;\n return acc;\n },\n {} as Record<string, any>\n );\n }\n // Otherwise, use include fields as additions to any existing included fields\n else {\n // Start with current include fields if they exist\n selection = this.filters.include || {};\n\n // Add any explicitly included fields\n includeFields.forEach((field: string) => {\n selection[field] = true;\n });\n\n // Add any explicitly excluded fields\n excludeFields.forEach((field: string) => {\n selection[field] = false;\n });\n }\n\n // Apply the selection to filters\n this.filters = {\n ...this.filters,\n select: selection,\n };\n\n // Remove the include filter as it's now part of select\n if (this.filters.include) {\n delete this.filters.include;\n }\n }\n\n // Remove any references to the now-unused parameters\n if (this.searchParams?.addFields || this.searchParams?.removeFields) {\n throw new AppError(\n \"The addFields and removeFields parameters are deprecated. Please use fields with + and - prefixes instead.\",\n 400\n );\n }\n\n return this;\n }\n\n paginate() {\n const page = parseInt(this.searchParams.page, 10) || 1;\n const limit = parseInt(this.searchParams.limit, 10) || 30;\n const skip = (page - 1) * limit;\n\n this.filters = {\n ...this.filters,\n skip,\n take: limit,\n };\n return this;\n }\n}\n\nexport const apiFeatures = new APIFeatures();\n"]}
1
+ {"version":3,"file":"api.features.js","sourceRoot":"","sources":["../../../../src/utils/features/api.features.ts"],"names":[],"mappings":"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","sourcesContent":["import { Request } from \"express\";\nimport deepmerge from \"../helpers/deepmerge.helper\";\nimport { parseQueryParamsWithModifiers } from \"../helpers/api.features.helpers\";\nimport AppError from \"../../modules/error-handler/utils/app-error\";\nimport { getPrismaInstance } from \"../helpers/prisma.helpers\";\nimport { ArkosRequest } from \"../../types\";\n\ntype ModelName = string;\n\nexport default class APIFeatures {\n req?: ArkosRequest;\n searchParams: any; // The query string parameters from the request\n searchParamsWithModifiers: any; // The query string parameters from the request\n filters: any = {};\n reqFiltersSearchParam: any = {};\n modelName?: ModelName;\n excludedFields = [\n \"page\",\n \"filters\",\n \"sort\",\n \"limit\",\n \"fields\",\n \"addFields\",\n \"removeFields\",\n \"search\",\n \"include\",\n \"filterMode\",\n \"where\",\n \"prismaQueryOptions\",\n \"ignoredFields\",\n ];\n\n constructor(req?: Request, modelName?: ModelName) {\n if (req) {\n const { filters = \"{}\", ...restOfQuery } = req.query;\n this.req = req;\n this.searchParams = deepmerge(\n parseQueryParamsWithModifiers(restOfQuery),\n parseQueryParamsWithModifiers(JSON.parse(filters as string))\n );\n (req as any).finalPrismaQueryOptions = this.searchParams;\n }\n\n if (modelName) this.modelName = modelName;\n this.filters = { ...this.filters };\n }\n\n setup(req: Request, modelName?: ModelName) {\n if (req) {\n const { filters = \"{}\", ...restOfQuery } = req.query;\n this.req = req;\n this.searchParams = deepmerge(\n parseQueryParamsWithModifiers(restOfQuery),\n parseQueryParamsWithModifiers(JSON.parse(filters as string))\n );\n (req as any).finalPrismaQueryOptions = this.searchParams;\n }\n if (modelName) this.modelName = modelName;\n this.filters = { ...this.filters };\n\n return this;\n }\n\n filter() {\n if (!this.req)\n throw new Error(\n \"Trying to use APIFeatures.filter() without passing request on class constructor or APIFeatures.setup() method. read more about at www.arkosjs.com/docs/advanced-guide/api-features-class\"\n );\n const searchableFields: Record<string, any>[] = [];\n\n const queryObj = { ...this.searchParams };\n\n this.excludedFields.forEach((el) => delete queryObj[el]);\n\n const whereObj = { ...this.req.params, ...queryObj };\n const whereLogicalOperatorFilters = Object.keys(whereObj).map((key) => ({\n [key]: whereObj[key],\n }));\n\n let whereOptions =\n whereLogicalOperatorFilters.length > 0\n ? {\n [(this.req.query?.filterMode as string) ?? \"OR\"]:\n whereLogicalOperatorFilters,\n }\n : {};\n\n if (!!this.searchParams.search) {\n const prisma = getPrismaInstance();\n\n if (this.modelName)\n Object.keys((prisma as any)[this.modelName].fields).forEach((key) => {\n const field = ((prisma as any)[this.modelName!].fields as any)[key];\n if (\n field?.typeName === \"String\" &&\n key !== \"id\" &&\n key !== \"password\" &&\n !field.isList &&\n !key?.includes?.(\"Id\") &&\n !key?.includes?.(\"ID\")\n ) {\n searchableFields.push({\n [`${key}`]: {\n contains: this.searchParams.search,\n mode: \"insensitive\",\n },\n });\n }\n });\n\n whereOptions = deepmerge(\n {\n OR: searchableFields,\n },\n whereOptions\n );\n }\n\n const firstMerge = deepmerge(\n {\n where: whereOptions,\n },\n this.req.prismaQueryOptions || {}\n );\n\n this.filters = deepmerge(firstMerge, this.filters);\n return this;\n }\n\n search() {\n if (this.searchParams?.search) {\n this.filters = deepmerge(this.filters, {\n where: {\n OR: [],\n },\n });\n }\n }\n\n sort() {\n if (this.searchParams.sort) {\n const sortBy = this.searchParams?.sort\n ?.split(\",\")\n ?.map((field: string) => ({\n [field.startsWith(\"-\") ? field.substring(1) : field]:\n field.startsWith(\"-\") ? \"desc\" : \"asc\",\n }));\n this.filters = deepmerge(this.filters, { orderBy: sortBy });\n }\n\n return this;\n }\n\n limitFields() {\n if (this.searchParams?.fields) {\n const fields = this.searchParams.fields.split(\",\");\n\n // Separate fields into includes, excludes, and regular fields\n const regularFields = fields.filter(\n (field: string) => !field.startsWith(\"+\") && !field.startsWith(\"-\")\n );\n const includeFields = fields\n .filter((field: string) => field.startsWith(\"+\"))\n .map((field: string) => field.substring(1));\n const excludeFields = fields\n .filter((field: string) => field.startsWith(\"-\"))\n .map((field: string) => field.substring(1));\n\n // Create selection object based on field type\n let selection: Record<string, any> = {};\n\n // If regular fields exist, use them as the base selection\n if (regularFields.length > 0) {\n selection = regularFields.reduce(\n (acc: Record<string, any>, field: string) => {\n acc[field] = true;\n return acc;\n },\n {} as Record<string, any>\n );\n }\n // Otherwise, use include fields as additions to any existing included fields\n else {\n // Start with current include fields if they exist\n selection = this.filters.include || {};\n\n // Add any explicitly included fields\n includeFields.forEach((field: string) => {\n selection[field] = true;\n });\n\n // Add any explicitly excluded fields\n excludeFields.forEach((field: string) => {\n selection[field] = false;\n });\n }\n\n // Apply the selection to filters\n this.filters = {\n ...this.filters,\n select: selection,\n };\n\n // Remove the include filter as it's now part of select\n if (this.filters.include) {\n delete this.filters.include;\n }\n }\n\n // Remove any references to the now-unused parameters\n if (this.searchParams?.addFields || this.searchParams?.removeFields) {\n throw new AppError(\n \"The addFields and removeFields parameters are deprecated. Please use fields with + and - prefixes instead.\",\n 400\n );\n }\n\n return this;\n }\n\n paginate() {\n const page = parseInt(this.searchParams.page, 10) || 1;\n const limit = parseInt(this.searchParams.limit, 10) || 30;\n const skip = (page - 1) * limit;\n\n this.filters = {\n ...this.filters,\n skip,\n take: limit,\n };\n return this;\n }\n}\n\nexport const apiFeatures = new APIFeatures();\n"]}
@@ -1,67 +1 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.snakeCase = exports.sentenceCase = exports.pathCase = exports.pascalCase = exports.kebabCase = exports.noCase = exports.trainCase = exports.dotCase = exports.constantCase = exports.capitalCase = exports.camelCase = void 0;
37
- const changeCase = __importStar(require("../helpers/change-case.helpers"));
38
- const isObject = (object) => object !== null && typeof object === "object";
39
- function changeKeysFactory(changeCase) {
40
- return function changeKeys(object, depth = 1, options) {
41
- if (depth === 0 || !isObject(object))
42
- return object;
43
- if (Array.isArray(object)) {
44
- return object.map((item) => changeKeys(item, depth - 1, options));
45
- }
46
- const result = Object.create(Object.getPrototypeOf(object));
47
- Object.keys(object).forEach((key) => {
48
- const value = object[key];
49
- const changedKey = changeCase(key, options);
50
- const changedValue = changeKeys(value, depth - 1, options);
51
- result[changedKey] = changedValue;
52
- });
53
- return result;
54
- };
55
- }
56
- exports.camelCase = changeKeysFactory(changeCase.camelCase);
57
- exports.capitalCase = changeKeysFactory(changeCase.capitalCase);
58
- exports.constantCase = changeKeysFactory(changeCase.constantCase);
59
- exports.dotCase = changeKeysFactory(changeCase.dotCase);
60
- exports.trainCase = changeKeysFactory(changeCase.trainCase);
61
- exports.noCase = changeKeysFactory(changeCase.noCase);
62
- exports.kebabCase = changeKeysFactory(changeCase.kebabCase);
63
- exports.pascalCase = changeKeysFactory(changeCase.pascalCase);
64
- exports.pathCase = changeKeysFactory(changeCase.pathCase);
65
- exports.sentenceCase = changeKeysFactory(changeCase.sentenceCase);
66
- exports.snakeCase = changeKeysFactory(changeCase.snakeCase);
67
- //# sourceMappingURL=change-case.features.js.map
1
+ "use strict";var __createBinding=Object.create?function(s,e,t,a){a===void 0&&(a=t);var r=Object.getOwnPropertyDescriptor(e,t);(!r||("get"in r?!e.__esModule:r.writable||r.configurable))&&(r={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(s,a,r)}:function(s,e,t,a){a===void 0&&(a=t),s[a]=e[t]},__setModuleDefault=Object.create?function(s,e){Object.defineProperty(s,"default",{enumerable:!0,value:e})}:function(s,e){s.default=e},__importStar=function(){var s=function(e){return s=Object.getOwnPropertyNames||function(t){var a=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(a[a.length]=r);return a},s(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var a=s(e),r=0;r<a.length;r++)a[r]!=="default"&&__createBinding(t,e,a[r]);return __setModuleDefault(t,e),t}}();Object.defineProperty(exports,"__esModule",{value:!0}),exports.snakeCase=exports.sentenceCase=exports.pathCase=exports.pascalCase=exports.kebabCase=exports.noCase=exports.trainCase=exports.dotCase=exports.constantCase=exports.capitalCase=exports.camelCase=void 0;const changeCase=__importStar(require("../helpers/change-case.helpers")),isObject=s=>s!==null&&typeof s=="object";function changeKeysFactory(s){return function e(t,a=1,r){if(a===0||!isObject(t))return t;if(Array.isArray(t))return t.map(n=>e(n,a-1,r));const o=Object.create(Object.getPrototypeOf(t));return Object.keys(t).forEach(n=>{const c=t[n],u=s(n,r),i=e(c,a-1,r);o[u]=i}),o}}exports.camelCase=changeKeysFactory(changeCase.camelCase),exports.capitalCase=changeKeysFactory(changeCase.capitalCase),exports.constantCase=changeKeysFactory(changeCase.constantCase),exports.dotCase=changeKeysFactory(changeCase.dotCase),exports.trainCase=changeKeysFactory(changeCase.trainCase),exports.noCase=changeKeysFactory(changeCase.noCase),exports.kebabCase=changeKeysFactory(changeCase.kebabCase),exports.pascalCase=changeKeysFactory(changeCase.pascalCase),exports.pathCase=changeKeysFactory(changeCase.pathCase),exports.sentenceCase=changeKeysFactory(changeCase.sentenceCase),exports.snakeCase=changeKeysFactory(changeCase.snakeCase);
@@ -0,0 +1 @@
1
+ "use strict";var __createBinding=Object.create?function(o,t,e,r){r===void 0&&(r=e);var n=Object.getOwnPropertyDescriptor(t,e);(!n||("get"in n?!t.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return t[e]}}),Object.defineProperty(o,r,n)}:function(o,t,e,r){r===void 0&&(r=e),o[r]=t[e]},__setModuleDefault=Object.create?function(o,t){Object.defineProperty(o,"default",{enumerable:!0,value:t})}:function(o,t){o.default=t},__importStar=function(){var o=function(t){return o=Object.getOwnPropertyNames||function(e){var r=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(r[r.length]=n);return r},o(t)};return function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r=o(t),n=0;n<r.length;n++)r[n]!=="default"&&__createBinding(e,t,r[n]);return __setModuleDefault(e,t),e}}(),__importDefault=function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(exports,"__esModule",{value:!0});const net=__importStar(require("net")),sheu_1=__importDefault(require("../sheu"));class PortAndHostAllocator{constructor(){this.prevWarnings=new Set}getCorrectHostAndPortToUse(t,e){const r=t?.CLI_HOST||e?.host||t?.HOST||"localhost",n=t?.CLI_PORT||e?.port||t?.PORT||"8000";return{host:String(r),port:String(n)}}async getHostAndAvailablePort(t,e){if(this.port&&this.host)return e?.logWarning&&this.prevWarnings.size>0&&(console.info(""),Array.from(this.prevWarnings).forEach(s=>sheu_1.default.warn(s))),{port:this.port,host:this.host};const{host:r,port:n}=this.getCorrectHostAndPortToUse(t,e);let i=parseInt(n,10);for(;;){if(await this.isPortAvailable(r,i))return this.port=i.toString(),this.host=r,{host:r,port:i.toString()};const a=`Port ${i} is in use, trying port ${i+1} instead...`;this.prevWarnings.add(a),e?.logWarning&&(console.info(""),sheu_1.default.warn(`${a}`)),i++}}async isPortAvailable(t,e){return new Promise(r=>{const n=net.createServer(),i=[e,["localhost","127.0.0.1"].includes(t)?void 0:t].filter(s=>!!s);n.listen(...i,()=>{n.close(()=>{r(!0)})}),n.on("error",()=>{r(!1)})})}logWarnings(){console.info(""),Array.from(this.prevWarnings).forEach(t=>sheu_1.default.warn(t))}}const portAndHostAllocator=new PortAndHostAllocator;exports.default=portAndHostAllocator;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"port-and-host-allocator.js","sourceRoot":"","sources":["../../../../src/utils/features/port-and-host-allocator.ts"],"names":[],"mappings":"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","sourcesContent":["import { ArkosConfig } from \"../../exports\";\nimport * as net from \"net\";\nimport sheu from \"../sheu\";\n\nclass PortAndHostAllocator {\n private host: string | undefined;\n private port: string | undefined;\n private prevWarnings = new Set<string>();\n\n /**\n * Helps in correcting getting the right host and port to be used according to cli params, arkos config, env and default host and port.\n *\n * Is worth mentioning that this will be preserved along the application until it restarts.\n *\n * @param config {ArkosConfig} - your application configuraiton\n * @param env {Record<string,any>} - current env, may pass process.env\n */\n getCorrectHostAndPortToUse(\n env: Record<string, any>,\n config?: ArkosConfig\n ): { port: string; host: string } {\n const host = env?.CLI_HOST || config?.host || env?.HOST || \"localhost\";\n const port = env?.CLI_PORT || config?.port || env?.PORT || \"8000\";\n return { host: String(host), port: String(port) };\n }\n\n /**\n * Finds an available port starting from the configured port and incrementing until one is found\n *\n * @param env {Record<string,any>} - current env, may pass process.env\n * @param config {ArkosConfig} - your application configuration\n * @returns Promise<{port: string; host: string}> - available port and host\n */\n async getHostAndAvailablePort(\n env: Record<string, any>,\n config?: ArkosConfig & { logWarning?: boolean; caller?: string }\n ): Promise<{ port: string; host: string }> {\n if (this.port && this.host) {\n if (config?.logWarning && this.prevWarnings.size > 0) {\n console.info(\"\");\n Array.from(this.prevWarnings).forEach((msg) => sheu.warn(msg));\n }\n return { port: this.port, host: this.host };\n }\n\n const { host, port: initialPort } = this.getCorrectHostAndPortToUse(\n env,\n config\n );\n let currentPort = parseInt(initialPort, 10);\n\n while (true) {\n const isAvailable = await this.isPortAvailable(host, currentPort);\n\n if (isAvailable) {\n this.port = currentPort.toString();\n this.host = host;\n return { host, port: currentPort.toString() };\n }\n\n const msg = `Port ${currentPort} is in use, trying port ${currentPort + 1} instead...`;\n this.prevWarnings.add(msg);\n\n if (config?.logWarning) {\n console.info(\"\");\n sheu.warn(`${msg}`);\n }\n\n currentPort++;\n }\n }\n\n /**\n * Checks if a port is available on the given host\n *\n * @param host {string} - host to check\n * @param port {number} - port to check\n * @returns Promise<boolean> - true if port is available, false otherwise\n */\n private async isPortAvailable(host: string, port: number): Promise<boolean> {\n return new Promise((resolve) => {\n const server = net.createServer();\n const hostAndPort = [\n port,\n ![\"localhost\", \"127.0.0.1\"].includes(host) ? host : undefined,\n ].filter((val) => !!val) as any;\n\n server.listen(...hostAndPort, () => {\n server.close(() => {\n resolve(true);\n });\n });\n\n server.on(\"error\", () => {\n resolve(false);\n });\n });\n }\n\n logWarnings() {\n console.info(\"\");\n Array.from(this.prevWarnings).forEach((msg) => sheu.warn(msg));\n }\n}\n\nconst portAndHostAllocator = new PortAndHostAllocator();\n\nexport default portAndHostAllocator;\n"]}
@@ -1,106 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseQueryParamsWithModifiers = parseQueryParamsWithModifiers;
4
- const DEFAULT_FIELD_CONFIG = {
5
- dateFields: ["createdAt", "updatedAt", "deletedAt", "date"],
6
- booleanFields: ["isActive", "isDeleted", "isPublished", "isArchived"],
7
- numericFields: ["age", "price", "quantity", "amount", "rating"],
8
- };
9
- function parseQueryParamsWithModifiers(query, fieldConfig = DEFAULT_FIELD_CONFIG) {
10
- return Object.entries(JSON.parse(JSON.stringify(query))).reduce((acc, [key, value]) => {
11
- const parts = key.split("__");
12
- if (!value && value !== false && value !== "false" && parts.length < 2)
13
- return acc;
14
- const stringValue = Array.isArray(value) ? value[0]?.toString() : value;
15
- if (parts.length < 2) {
16
- acc[key] =
17
- typeof value === "string" && !Number.isNaN(value)
18
- ? convertValue(stringValue, parts[0], fieldConfig)
19
- : value;
20
- return acc;
21
- }
22
- const fieldName = parts[0];
23
- if (fieldName === "orderBy" && parts.length === 2) {
24
- if (!acc.orderBy)
25
- acc.orderBy = {};
26
- acc.orderBy[parts[1]] = stringValue;
27
- return acc;
28
- }
29
- if (parts.length === 1) {
30
- acc[fieldName] = {
31
- equals: convertValue(stringValue, fieldName, fieldConfig),
32
- };
33
- return acc;
34
- }
35
- let currentLevel = acc;
36
- let currentKey = fieldName;
37
- for (let i = 1; i < parts.length - 1; i++) {
38
- if (!currentLevel[currentKey]) {
39
- currentLevel[currentKey] = {};
40
- }
41
- currentLevel = currentLevel[currentKey];
42
- currentKey = parts[i];
43
- }
44
- const lastOperator = parts[parts.length - 1];
45
- switch (lastOperator) {
46
- case "icontains":
47
- currentLevel[currentKey] = {
48
- contains: stringValue,
49
- mode: "insensitive",
50
- };
51
- break;
52
- case "contains":
53
- currentLevel[currentKey] = {
54
- contains: stringValue,
55
- mode: "sensitive",
56
- };
57
- break;
58
- case "in":
59
- case "notIn":
60
- currentLevel[currentKey] = {
61
- [lastOperator]: stringValue
62
- .split(",")
63
- .map((v) => convertValue(v.trim(), fieldName, fieldConfig)),
64
- };
65
- break;
66
- case "or":
67
- const values = stringValue.split(",");
68
- if (!acc.OR)
69
- acc.OR = [];
70
- acc.OR.push(...values.map((val) => ({
71
- [fieldName]: {
72
- equals: convertValue(val.trim(), fieldName, fieldConfig),
73
- },
74
- })));
75
- break;
76
- case "isNull":
77
- currentLevel[currentKey] = {
78
- equals: stringValue.toLowerCase() === "true" ? null : undefined,
79
- };
80
- break;
81
- case "isEmpty":
82
- currentLevel[currentKey] = {
83
- equals: stringValue.toLowerCase() === "true" ? "" : undefined,
84
- };
85
- break;
86
- default:
87
- currentLevel[currentKey] = {
88
- [lastOperator]: convertValue(stringValue, fieldName, fieldConfig),
89
- };
90
- }
91
- return acc;
92
- }, {});
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
1
+ "use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.parseQueryParamsWithModifiers=parseQueryParamsWithModifiers;const deepmerge_helper_1=__importDefault(require("./deepmerge.helper")),DEFAULT_FIELD_CONFIG={dateFields:["createdAt","updatedAt","deletedAt","date"],booleanFields:["isActive","isDeleted","isPublished","isArchived"],numericFields:["age","price","quantity","amount","rating"]};function parseQueryParamsWithModifiers(e,s=DEFAULT_FIELD_CONFIG){const o=Object.entries(JSON.parse(JSON.stringify(e)));let d={};for(const[b,i]of o){const t=b.split("__");if(!i&&i!==!1&&i!=="false"&&t.length<2)continue;const r=Array.isArray(i)?i[0]?.toString():i;let u={};if(t.length<2)u[b]=typeof i=="string"&&!Number.isNaN(i)?convertValue(r,t[0],s):i;else{const l=t[0];if(l==="orderBy"&&t.length===2)u.orderBy={},u.orderBy[t[1]]=r;else if(t.length===1)u[l]={equals:convertValue(r,l,s)};else{let p={},n=p,a=l;for(let c=1;c<t.length-1;c++)n[a]={},n=n[a],a=t[c];const f=t[t.length-1];switch(f){case"icontains":n[a]={contains:r,mode:"insensitive"};break;case"contains":n[a]={contains:r,mode:"sensitive"};break;case"in":case"notIn":n[a]={[f]:r.split(",").map(h=>convertValue(h.trim(),l,s))};break;case"or":const c=r.split(",");p.OR=c.map(h=>({[l]:{equals:convertValue(h.trim(),l,s)}}));break;case"isNull":n[a]={equals:r.toLowerCase()==="true"?null:void 0};break;case"isEmpty":n[a]={equals:r.toLowerCase()==="true"?"":void 0};break;default:n[a]={[f]:convertValue(r,l,s)}}u=p}}d=(0,deepmerge_helper_1.default)(d,u)}return d}function convertValue(e,s,o){return o.dateFields?.includes?.(s)&&e?new Date(e):o.booleanFields?.includes?.(s)&&e?e.toLowerCase()==="true":o.numericFields?.includes?.(s)&&e?Number(e):e}
@@ -1 +1 @@
1
- {"version":3,"file":"api.features.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/api.features.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Configuration types for field type mapping\n */\ninterface FieldConfig {\n dateFields: string[];\n booleanFields: string[];\n numericFields: string[];\n}\n\n/**\n * Type for the structured filter object returned by the parser\n */\ntype ParsedFilter = {\n [key: string]: any;\n orderBy?: Record<string, \"asc\" | \"desc\">;\n OR?: Record<string, any>[];\n};\n\n/**\n * Default configuration for field types\n */\nconst DEFAULT_FIELD_CONFIG: FieldConfig = {\n dateFields: [\"createdAt\", \"updatedAt\", \"deletedAt\", \"date\"],\n booleanFields: [\"isActive\", \"isDeleted\", \"isPublished\", \"isArchived\"],\n numericFields: [\"age\", \"price\", \"quantity\", \"amount\", \"rating\"],\n};\n\n/**\n * Parses query parameters into a structured filter object compatible with Prisma queries.\n * Supports various operators and data type conversions.\n *\n * @param query - Object containing query parameters\n * @param fieldConfig - Optional configuration for field type mapping\n * @returns Structured filter object for database queries\n *\n * @example\n * // Basic usage\n * parseQueryParamsWithModifiers({ name__contains: 'john' })\n * // => { name: { contains: 'john', mode: 'sensitive' } }\n *\n * @example\n * // Complex query\n * parseQueryParamsWithModifiers({\n * name__not__equals: 'john',\n * age__gt: '25',\n * tags__in: 'tag1,tag2',\n * orderBy__createdAt: 'desc'\n * })\n */\nexport function parseQueryParamsWithModifiers(\n query: Record<string, any>,\n // excludedFields: string[],\n fieldConfig: FieldConfig = DEFAULT_FIELD_CONFIG\n): ParsedFilter {\n return Object.entries(JSON.parse(JSON.stringify(query))).reduce(\n (acc, [key, value]) => {\n const parts = key.split(\"__\");\n if (!value && value !== false && value !== \"false\" && parts.length < 2)\n return acc;\n\n // Convert value to string if it's not already\n const stringValue = Array.isArray(value) ? value[0]?.toString() : value;\n\n if (parts.length < 2) {\n acc[key] =\n typeof value === \"string\" && !Number.isNaN(value)\n ? convertValue(stringValue, parts[0], fieldConfig)\n : value;\n return acc;\n }\n const fieldName = parts[0];\n\n // Handle ordering\n if (fieldName === \"orderBy\" && parts.length === 2) {\n if (!acc.orderBy) acc.orderBy = {};\n acc.orderBy[parts[1]] = stringValue as \"asc\" | \"desc\";\n return acc;\n }\n\n // Handle simple equals case\n if (parts.length === 1) {\n acc[fieldName] = {\n equals: convertValue(stringValue, fieldName, fieldConfig),\n };\n return acc;\n }\n\n let currentLevel = acc;\n let currentKey = fieldName;\n\n // Build nested structure\n for (let i = 1; i < parts.length - 1; i++) {\n if (!currentLevel[currentKey]) {\n currentLevel[currentKey] = {};\n }\n currentLevel = currentLevel[currentKey];\n currentKey = parts[i];\n }\n\n const lastOperator = parts[parts.length - 1];\n\n // Handle special operators\n switch (lastOperator) {\n case \"icontains\":\n currentLevel[currentKey] = {\n contains: stringValue,\n mode: \"insensitive\",\n };\n break;\n\n case \"contains\":\n currentLevel[currentKey] = {\n contains: stringValue,\n mode: \"sensitive\",\n };\n break;\n\n case \"in\":\n case \"notIn\":\n currentLevel[currentKey] = {\n [lastOperator]: stringValue\n .split(\",\")\n .map((v: string) =>\n convertValue(v.trim(), fieldName, fieldConfig)\n ),\n };\n break;\n\n case \"or\":\n const values: string[] = stringValue.split(\",\");\n if (!acc.OR) acc.OR = [];\n acc.OR.push(\n ...values.map((val) => ({\n [fieldName]: {\n equals: convertValue(val.trim(), fieldName, fieldConfig),\n },\n }))\n );\n break;\n\n case \"isNull\":\n currentLevel[currentKey] = {\n equals: stringValue.toLowerCase() === \"true\" ? null : undefined,\n };\n break;\n\n case \"isEmpty\":\n currentLevel[currentKey] = {\n equals: stringValue.toLowerCase() === \"true\" ? \"\" : undefined,\n };\n break;\n\n default:\n currentLevel[currentKey] = {\n [lastOperator]: convertValue(stringValue, fieldName, fieldConfig),\n };\n }\n\n return acc;\n },\n {} as ParsedFilter\n );\n}\n\n/**\n * Converts string values to appropriate types based on field configuration\n * \n * // Example usage:\n/*\n const query = {\n name__not__equals: 'uanela',\n email__contains: 'example.com',\n description__icontains: 'test',\n age__gt: '25',\n status: 'active',\n tags__in: 'tag1,tag2,tag3',\n createdAt__gt: '2024-01-01',\n isActive: 'true',\n orderBy__createdAt: 'desc'\n };\n \n const result = parseQueryParamsWithModifiers(query);\n */\nfunction convertValue(\n value: string,\n fieldName: string,\n config: FieldConfig\n): any {\n // Handle date fields\n if (config.dateFields?.includes?.(fieldName) && value) {\n return new Date(value);\n }\n\n // Handle boolean fields\n if (config.booleanFields?.includes?.(fieldName) && value) {\n return value.toLowerCase() === \"true\";\n }\n\n // Handle numeric fields\n if (config.numericFields?.includes?.(fieldName) && value) {\n return Number(value);\n }\n\n return value;\n}\n"]}
1
+ {"version":3,"file":"api.features.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/api.features.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import deepmerge from \"./deepmerge.helper\";\n\n/**\n * Configuration types for field type mapping\n */\ninterface FieldConfig {\n dateFields: string[];\n booleanFields: string[];\n numericFields: string[];\n}\n\n/**\n * Type for the structured filter object returned by the parser\n */\ntype ParsedFilter = {\n [key: string]: any;\n orderBy?: Record<string, \"asc\" | \"desc\">;\n OR?: Record<string, any>[];\n};\n\n/**\n * Default configuration for field types\n */\nconst DEFAULT_FIELD_CONFIG: FieldConfig = {\n dateFields: [\"createdAt\", \"updatedAt\", \"deletedAt\", \"date\"],\n booleanFields: [\"isActive\", \"isDeleted\", \"isPublished\", \"isArchived\"],\n numericFields: [\"age\", \"price\", \"quantity\", \"amount\", \"rating\"],\n};\n\n/**\n * Parses query parameters into a structured filter object compatible with Prisma queries.\n * Supports various operators and data type conversions with deep merge strategy.\n *\n * @param query - Object containing query parameters\n * @param fieldConfig - Optional configuration for field type mapping\n * @returns Structured filter object for database queries\n *\n * @example\n * // Basic usage\n * parseQueryParamsWithModifiers({ name__contains: 'john' })\n * // => { name: { contains: 'john', mode: 'sensitive' } }\n *\n * @example\n * // Deep merge example\n * parseQueryParamsWithModifiers({\n * 'some__data': '1',\n * 'some__info': '2'\n * })\n * // => { some: { data: '1', info: '2' } }\n *\n * @example\n * // Complex query\n * parseQueryParamsWithModifiers({\n * name__not__equals: 'john',\n * age__gt: '25',\n * tags__in: 'tag1,tag2',\n * orderBy__createdAt: 'desc'\n * })\n */\nexport function parseQueryParamsWithModifiers(\n query: Record<string, any>,\n fieldConfig: FieldConfig = DEFAULT_FIELD_CONFIG\n): ParsedFilter {\n const entries = Object.entries(JSON.parse(JSON.stringify(query)));\n let result: ParsedFilter = {};\n\n for (const [key, value] of entries) {\n const parts = key.split(\"__\");\n if (!value && value !== false && value !== \"false\" && parts.length < 2)\n continue;\n\n // Convert value to string if it's not already\n const stringValue = Array.isArray(value) ? value[0]?.toString() : value;\n\n let currentResult: any = {};\n\n if (parts.length < 2) {\n currentResult[key] =\n typeof value === \"string\" && !Number.isNaN(value)\n ? convertValue(stringValue, parts[0], fieldConfig)\n : value;\n } else {\n const fieldName = parts[0];\n\n // Handle ordering\n if (fieldName === \"orderBy\" && parts.length === 2) {\n currentResult.orderBy = {};\n currentResult.orderBy[parts[1]] = stringValue as \"asc\" | \"desc\";\n } else if (parts.length === 1) {\n // Handle simple equals case\n currentResult[fieldName] = {\n equals: convertValue(stringValue, fieldName, fieldConfig),\n };\n } else {\n // Build nested structure\n let nestedObj: any = {};\n let currentLevel = nestedObj;\n let currentKey = fieldName;\n\n // Create the nested path\n for (let i = 1; i < parts.length - 1; i++) {\n currentLevel[currentKey] = {};\n currentLevel = currentLevel[currentKey];\n currentKey = parts[i];\n }\n\n const lastOperator = parts[parts.length - 1];\n\n // Handle special operators\n switch (lastOperator) {\n case \"icontains\":\n currentLevel[currentKey] = {\n contains: stringValue,\n mode: \"insensitive\",\n };\n break;\n\n case \"contains\":\n currentLevel[currentKey] = {\n contains: stringValue,\n mode: \"sensitive\",\n };\n break;\n\n case \"in\":\n case \"notIn\":\n currentLevel[currentKey] = {\n [lastOperator]: stringValue\n .split(\",\")\n .map((v: string) =>\n convertValue(v.trim(), fieldName, fieldConfig)\n ),\n };\n break;\n\n case \"or\":\n const values: string[] = stringValue.split(\",\");\n nestedObj.OR = values.map((val) => ({\n [fieldName]: {\n equals: convertValue(val.trim(), fieldName, fieldConfig),\n },\n }));\n break;\n\n case \"isNull\":\n currentLevel[currentKey] = {\n equals: stringValue.toLowerCase() === \"true\" ? null : undefined,\n };\n break;\n\n case \"isEmpty\":\n currentLevel[currentKey] = {\n equals: stringValue.toLowerCase() === \"true\" ? \"\" : undefined,\n };\n break;\n\n default:\n currentLevel[currentKey] = {\n [lastOperator]: convertValue(stringValue, fieldName, fieldConfig),\n };\n }\n\n currentResult = nestedObj;\n }\n }\n\n // Deep merge the current result with the accumulated result\n result = deepmerge(result, currentResult);\n }\n\n return result;\n}\n\n/**\n * Converts string values to appropriate types based on field configuration\n *\n * @example\n * // Example usage:\n * const query = {\n * name__not__equals: 'uanela',\n * email__contains: 'example.com',\n * description__icontains: 'test',\n * age__gt: '25',\n * status: 'active',\n * tags__in: 'tag1,tag2,tag3',\n * createdAt__gt: '2024-01-01',\n * isActive: 'true',\n * orderBy__createdAt: 'desc',\n * some__data: '1',\n * some__info: '2'\n * };\n *\n * const result = parseQueryParamsWithModifiers(query);\n * // Result will properly merge nested objects instead of overwriting\n */\nfunction convertValue(\n value: string,\n fieldName: string,\n config: FieldConfig\n): any {\n // Handle date fields\n if (config.dateFields?.includes?.(fieldName) && value) {\n return new Date(value);\n }\n\n // Handle boolean fields\n if (config.booleanFields?.includes?.(fieldName) && value) {\n return value.toLowerCase() === \"true\";\n }\n\n // Handle numeric fields\n if (config.numericFields?.includes?.(fieldName) && value) {\n return Number(value);\n }\n\n return value;\n}\n"]}