arkos 1.2.14-test → 1.2.14-test.1

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 (413) 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-system-json-schema-paths.js +1 -0
  52. package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +1 -0
  53. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -0
  54. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -0
  55. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -0
  56. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +1 -0
  57. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +1 -0
  58. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js.map +1 -0
  59. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +1 -0
  60. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js.map +1 -0
  61. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +1 -0
  62. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js.map +1 -0
  63. package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +1 -0
  64. package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -0
  65. package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js +1 -0
  66. package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -0
  67. package/dist/cjs/package.json +3 -0
  68. package/dist/cjs/server.js +4 -2
  69. package/dist/cjs/server.js.map +1 -1
  70. package/dist/cjs/types/arkos-config.js +1 -3
  71. package/dist/cjs/types/arkos-config.js.map +1 -1
  72. package/dist/cjs/types/auth.js +1 -3
  73. package/dist/cjs/types/index.js +1 -11
  74. package/dist/cjs/types/router-config.js +1 -3
  75. package/dist/cjs/utils/arkos-env.js +1 -9
  76. package/dist/cjs/utils/cli/build.js +6 -229
  77. package/dist/cjs/utils/cli/build.js.map +1 -1
  78. package/dist/cjs/utils/cli/dev.js +5 -271
  79. package/dist/cjs/utils/cli/dev.js.map +1 -1
  80. package/dist/cjs/utils/cli/generate.js +12 -189
  81. package/dist/cjs/utils/cli/generate.js.map +1 -1
  82. package/dist/cjs/utils/cli/index.js +1 -81
  83. package/dist/cjs/utils/cli/start.js +5 -93
  84. package/dist/cjs/utils/cli/start.js.map +1 -1
  85. package/dist/cjs/utils/cli/utils/cli.helpers.js +1 -26
  86. package/dist/cjs/utils/cli/utils/cli.helpers.js.map +1 -1
  87. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +5 -20
  88. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js +6 -15
  89. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js +71 -133
  90. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +1 -1
  91. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +24 -46
  92. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +1 -1
  93. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js +12 -32
  94. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js.map +1 -1
  95. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js +7 -27
  96. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js.map +1 -1
  97. package/dist/cjs/utils/cli/utils/template-generators.js +2 -28
  98. package/dist/cjs/utils/dotenv.helpers.js +1 -43
  99. package/dist/cjs/utils/features/api.features.js +1 -161
  100. package/dist/cjs/utils/features/api.features.js.map +1 -1
  101. package/dist/cjs/utils/features/change-case.features.js +1 -67
  102. package/dist/cjs/utils/helpers/api.features.helpers.js +1 -106
  103. package/dist/cjs/utils/helpers/change-case.helpers.js +1 -177
  104. package/dist/cjs/utils/helpers/deepmerge.helper.js +1 -115
  105. package/dist/cjs/utils/helpers/fs.helpers.js +1 -54
  106. package/dist/cjs/utils/helpers/fs.helpers.js.map +1 -1
  107. package/dist/cjs/utils/helpers/global.helpers.js +1 -40
  108. package/dist/cjs/utils/helpers/global.helpers.js.map +1 -1
  109. package/dist/cjs/utils/helpers/models.helpers.js +11 -325
  110. package/dist/cjs/utils/helpers/models.helpers.js.map +1 -1
  111. package/dist/cjs/utils/helpers/prisma.helpers.js +1 -49
  112. package/dist/cjs/utils/helpers/prisma.helpers.js.map +1 -1
  113. package/dist/cjs/utils/helpers/query-parser.helpers.js +1 -45
  114. package/dist/cjs/utils/helpers/routers.helpers.js +1 -0
  115. package/dist/cjs/utils/helpers/routers.helpers.js.map +1 -0
  116. package/dist/cjs/utils/helpers/text.helpers.js +1 -28
  117. package/dist/cjs/utils/prisma/enhaced-prisma-json-schema-generator.js +1 -0
  118. package/dist/cjs/utils/prisma/enhaced-prisma-json-schema-generator.js.map +1 -0
  119. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +1 -0
  120. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js.map +1 -0
  121. package/dist/cjs/utils/prisma/prisma-schema-parser.js +3 -0
  122. package/dist/cjs/utils/prisma/prisma-schema-parser.js.map +1 -0
  123. package/dist/cjs/utils/prisma/types.js +1 -0
  124. package/dist/cjs/utils/prisma/types.js.map +1 -0
  125. package/dist/cjs/utils/sheu.js +1 -0
  126. package/dist/cjs/utils/sheu.js.map +1 -0
  127. package/dist/cjs/utils/validate-dto.js +1 -17
  128. package/dist/cjs/utils/validate-schema.js +1 -15
  129. package/dist/esm/app.js +1 -0
  130. package/dist/esm/app.js.map +1 -0
  131. package/dist/esm/exports/auth/index.js +1 -0
  132. package/dist/esm/exports/controllers/index.js +1 -0
  133. package/dist/esm/exports/error-handler/index.js +1 -0
  134. package/dist/esm/exports/index.js +1 -0
  135. package/dist/esm/exports/middlewares/index.js +1 -0
  136. package/dist/esm/exports/prisma/index.js +1 -0
  137. package/dist/esm/exports/services/index.js +1 -0
  138. package/dist/esm/exports/utils/index.js +1 -0
  139. package/dist/esm/exports/validation/index.js +1 -0
  140. package/dist/esm/modules/auth/auth.controller.js +1 -0
  141. package/dist/esm/modules/auth/auth.router.js +1 -0
  142. package/dist/esm/modules/auth/auth.router.js.map +1 -0
  143. package/dist/esm/modules/auth/auth.service.js +1 -0
  144. package/dist/esm/modules/auth/auth.service.js.map +1 -0
  145. package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js +1 -0
  146. package/dist/esm/modules/base/base.controller.js +1 -0
  147. package/dist/esm/modules/base/base.controller.js.map +1 -0
  148. package/dist/esm/modules/base/base.middlewares.js +1 -0
  149. package/dist/esm/modules/base/base.middlewares.js.map +1 -0
  150. package/dist/esm/modules/base/base.router.js +1 -0
  151. package/dist/esm/modules/base/base.router.js.map +1 -0
  152. package/dist/esm/modules/base/base.service.js +1 -0
  153. package/dist/{es2020 → esm}/modules/base/base.service.js.map +1 -1
  154. package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js +1 -0
  155. package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js +1 -0
  156. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js +1 -0
  157. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js.map +1 -0
  158. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +1 -0
  159. package/dist/esm/modules/email/email.service.js +1 -0
  160. package/dist/esm/modules/error-handler/error-handler.controller.js +4 -0
  161. package/dist/esm/modules/error-handler/error-handler.controller.js.map +1 -0
  162. package/dist/esm/modules/error-handler/utils/app-error.js +1 -0
  163. package/dist/esm/modules/error-handler/utils/catch-async.js +1 -0
  164. package/dist/esm/modules/error-handler/utils/catch-async.js.map +1 -0
  165. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js +3 -0
  166. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js.map +1 -0
  167. package/dist/esm/modules/file-upload/file-upload.controller.js +1 -0
  168. package/dist/esm/modules/file-upload/file-upload.router.js +1 -0
  169. package/dist/esm/modules/file-upload/file-upload.router.js.map +1 -0
  170. package/dist/esm/modules/file-upload/file-upload.service.js +1 -0
  171. package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js +1 -0
  172. package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js.map +1 -0
  173. package/dist/esm/modules/swagger/swagger.router.js +1 -0
  174. package/dist/esm/modules/swagger/swagger.router.js.map +1 -0
  175. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +1 -0
  176. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +1 -0
  177. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js +1 -0
  178. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +1 -0
  179. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -0
  180. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -0
  181. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -0
  182. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +1 -0
  183. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +1 -0
  184. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js.map +1 -0
  185. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +1 -0
  186. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js.map +1 -0
  187. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +1 -0
  188. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js.map +1 -0
  189. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js +1 -0
  190. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -0
  191. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js +1 -0
  192. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -0
  193. package/dist/esm/package.json +3 -0
  194. package/dist/esm/server.js +5 -0
  195. package/dist/esm/server.js.map +1 -0
  196. package/dist/esm/types/arkos-config.js +1 -0
  197. package/dist/esm/types/arkos-config.js.map +1 -0
  198. package/dist/esm/types/auth.js +1 -0
  199. package/dist/esm/types/index.js +1 -0
  200. package/dist/esm/types/router-config.js +1 -0
  201. package/dist/esm/utils/arkos-env.js +1 -0
  202. package/dist/esm/utils/cli/build.js +6 -0
  203. package/dist/esm/utils/cli/build.js.map +1 -0
  204. package/dist/esm/utils/cli/dev.js +5 -0
  205. package/dist/esm/utils/cli/dev.js.map +1 -0
  206. package/dist/esm/utils/cli/generate.js +12 -0
  207. package/dist/{es2020 → esm}/utils/cli/generate.js.map +1 -1
  208. package/dist/esm/utils/cli/index.js +1 -0
  209. package/dist/esm/utils/cli/start.js +5 -0
  210. package/dist/esm/utils/cli/start.js.map +1 -0
  211. package/dist/esm/utils/cli/utils/cli.helpers.js +1 -0
  212. package/dist/esm/utils/cli/utils/cli.helpers.js.map +1 -0
  213. package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +21 -0
  214. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js +12 -0
  215. package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js +206 -0
  216. package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +1 -0
  217. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +36 -0
  218. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +1 -0
  219. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js +18 -0
  220. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js.map +1 -0
  221. package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js +15 -0
  222. package/dist/{es2020 → esm}/utils/cli/utils/template-generator/templates/generate-service-template.js.map +1 -1
  223. package/dist/esm/utils/cli/utils/template-generators.js +2 -0
  224. package/dist/esm/utils/dotenv.helpers.js +1 -0
  225. package/dist/esm/utils/features/api.features.js +1 -0
  226. package/dist/esm/utils/features/api.features.js.map +1 -0
  227. package/dist/esm/utils/features/change-case.features.js +1 -0
  228. package/dist/esm/utils/helpers/api.features.helpers.js +1 -0
  229. package/dist/esm/utils/helpers/change-case.helpers.js +1 -0
  230. package/dist/esm/utils/helpers/deepmerge.helper.js +1 -0
  231. package/dist/esm/utils/helpers/fs.helpers.js +1 -0
  232. package/dist/esm/utils/helpers/fs.helpers.js.map +1 -0
  233. package/dist/esm/utils/helpers/global.helpers.js +1 -0
  234. package/dist/esm/utils/helpers/global.helpers.js.map +1 -0
  235. package/dist/esm/utils/helpers/models.helpers.js +11 -0
  236. package/dist/esm/utils/helpers/models.helpers.js.map +1 -0
  237. package/dist/esm/utils/helpers/prisma.helpers.js +1 -0
  238. package/dist/esm/utils/helpers/prisma.helpers.js.map +1 -0
  239. package/dist/esm/utils/helpers/query-parser.helpers.js +1 -0
  240. package/dist/esm/utils/helpers/routers.helpers.js +1 -0
  241. package/dist/esm/utils/helpers/routers.helpers.js.map +1 -0
  242. package/dist/esm/utils/helpers/text.helpers.js +1 -0
  243. package/dist/esm/utils/prisma/enhaced-prisma-json-schema-generator.js +1 -0
  244. package/dist/esm/utils/prisma/enhaced-prisma-json-schema-generator.js.map +1 -0
  245. package/dist/esm/utils/prisma/prisma-json-schema-generator.js +1 -0
  246. package/dist/esm/utils/prisma/prisma-json-schema-generator.js.map +1 -0
  247. package/dist/esm/utils/prisma/prisma-schema-parser.js +3 -0
  248. package/dist/esm/utils/prisma/prisma-schema-parser.js.map +1 -0
  249. package/dist/esm/utils/prisma/types.js +1 -0
  250. package/dist/esm/utils/prisma/types.js.map +1 -0
  251. package/dist/esm/utils/sheu.js +1 -0
  252. package/dist/esm/utils/sheu.js.map +1 -0
  253. package/dist/esm/utils/validate-dto.js +1 -0
  254. package/dist/esm/utils/validate-schema.js +1 -0
  255. package/dist/types/modules/base/base.middlewares.d.ts +4 -4
  256. package/dist/types/modules/base/base.service.d.ts +1 -1
  257. package/dist/types/modules/base/utils/helpers/base.router.helpers.d.ts +4 -1
  258. package/dist/types/modules/error-handler/utils/catch-async.d.ts +1 -0
  259. package/dist/types/modules/error-handler/utils/error-handler.helpers.d.ts +4 -0
  260. package/dist/types/modules/file-upload/file-upload.router.d.ts +1 -1
  261. package/dist/types/modules/file-upload/utils/helpers/file-upload.helpers.d.ts +2 -1
  262. package/dist/types/modules/swagger/swagger.router.d.ts +1 -1
  263. package/dist/types/modules/swagger/utils/helpers/get-authentication-json-schema-paths.d.ts +3 -0
  264. package/dist/types/modules/swagger/utils/helpers/get-system-json-schema-paths.d.ts +2 -0
  265. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.d.ts +1 -0
  266. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.d.ts +2 -0
  267. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.d.ts +1 -0
  268. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.d.ts +3 -0
  269. package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.d.ts +3 -0
  270. package/dist/types/modules/swagger/utils/helpers/missing-json-schemas-generator.d.ts +34 -0
  271. package/dist/types/modules/swagger/utils/helpers/swagger.router.helpers.d.ts +7 -0
  272. package/dist/types/server.d.ts +3 -0
  273. package/dist/types/types/arkos-config.d.ts +10 -5
  274. package/dist/types/utils/cli/utils/cli.helpers.d.ts +1 -1
  275. package/dist/types/utils/features/api.features.d.ts +1 -0
  276. package/dist/types/utils/helpers/global.helpers.d.ts +6 -1
  277. package/dist/types/utils/helpers/models.helpers.d.ts +31 -5
  278. package/dist/types/utils/helpers/routers.helpers.d.ts +2 -0
  279. package/dist/types/utils/prisma/enhaced-prisma-json-schema-generator.d.ts +34 -0
  280. package/dist/types/utils/prisma/prisma-json-schema-generator.d.ts +10 -0
  281. package/dist/types/utils/prisma/prisma-schema-parser.d.ts +18 -0
  282. package/dist/types/utils/prisma/types.d.ts +48 -0
  283. package/dist/types/utils/sheu.d.ts +70 -0
  284. package/package.json +34 -35
  285. package/dist/es2020/app.js +0 -1
  286. package/dist/es2020/app.js.map +0 -1
  287. package/dist/es2020/exports/auth/index.js +0 -2
  288. package/dist/es2020/exports/controllers/index.js +0 -4
  289. package/dist/es2020/exports/error-handler/index.js +0 -4
  290. package/dist/es2020/exports/index.js +0 -8
  291. package/dist/es2020/exports/middlewares/index.js +0 -2
  292. package/dist/es2020/exports/prisma/index.js +0 -3
  293. package/dist/es2020/exports/services/index.js +0 -9
  294. package/dist/es2020/exports/utils/index.js +0 -4
  295. package/dist/es2020/exports/validation/index.js +0 -4
  296. package/dist/es2020/modules/auth/auth.controller.js +0 -187
  297. package/dist/es2020/modules/auth/auth.router.js +0 -118
  298. package/dist/es2020/modules/auth/auth.router.js.map +0 -1
  299. package/dist/es2020/modules/auth/auth.service.js +0 -185
  300. package/dist/es2020/modules/auth/auth.service.js.map +0 -1
  301. package/dist/es2020/modules/auth/utils/helpers/auth.controller.helpers.js +0 -73
  302. package/dist/es2020/modules/base/base.controller.js +0 -151
  303. package/dist/es2020/modules/base/base.controller.js.map +0 -1
  304. package/dist/es2020/modules/base/base.middlewares.js +0 -81
  305. package/dist/es2020/modules/base/base.middlewares.js.map +0 -1
  306. package/dist/es2020/modules/base/base.router.js +0 -17
  307. package/dist/es2020/modules/base/base.router.js.map +0 -1
  308. package/dist/es2020/modules/base/base.service.js +0 -120
  309. package/dist/es2020/modules/base/utils/helpers/base.controller.helpers.js +0 -77
  310. package/dist/es2020/modules/base/utils/helpers/base.middlewares.helpers.js +0 -44
  311. package/dist/es2020/modules/base/utils/helpers/base.router.helpers.js +0 -161
  312. package/dist/es2020/modules/base/utils/helpers/base.router.helpers.js.map +0 -1
  313. package/dist/es2020/modules/base/utils/helpers/base.service.helpers.js +0 -165
  314. package/dist/es2020/modules/email/email.service.js +0 -97
  315. package/dist/es2020/modules/error-handler/error-handler.controller.js +0 -105
  316. package/dist/es2020/modules/error-handler/error-handler.controller.js.map +0 -1
  317. package/dist/es2020/modules/error-handler/utils/app-error.js +0 -15
  318. package/dist/es2020/modules/error-handler/utils/catch-async.js +0 -10
  319. package/dist/es2020/modules/error-handler/utils/catch-async.js.map +0 -1
  320. package/dist/es2020/modules/error-handler/utils/error-handler.helpers.js +0 -155
  321. package/dist/es2020/modules/error-handler/utils/error-handler.helpers.js.map +0 -1
  322. package/dist/es2020/modules/file-upload/file-upload.controller.js +0 -266
  323. package/dist/es2020/modules/file-upload/file-upload.router.js +0 -50
  324. package/dist/es2020/modules/file-upload/file-upload.router.js.map +0 -1
  325. package/dist/es2020/modules/file-upload/file-upload.service.js +0 -314
  326. package/dist/es2020/modules/file-upload/utils/helpers/file-upload.helpers.js +0 -81
  327. package/dist/es2020/modules/file-upload/utils/helpers/file-upload.helpers.js.map +0 -1
  328. package/dist/es2020/modules/swagger/swagger.router.js +0 -135
  329. package/dist/es2020/modules/swagger/swagger.router.js.map +0 -1
  330. package/dist/es2020/server.js +0 -3
  331. package/dist/es2020/server.js.map +0 -1
  332. package/dist/es2020/types/arkos-config.js +0 -2
  333. package/dist/es2020/types/arkos-config.js.map +0 -1
  334. package/dist/es2020/types/auth.js +0 -2
  335. package/dist/es2020/types/index.js +0 -8
  336. package/dist/es2020/types/router-config.js +0 -2
  337. package/dist/es2020/utils/arkos-env.js +0 -7
  338. package/dist/es2020/utils/cli/build.js +0 -223
  339. package/dist/es2020/utils/cli/build.js.map +0 -1
  340. package/dist/es2020/utils/cli/dev.js +0 -264
  341. package/dist/es2020/utils/cli/dev.js.map +0 -1
  342. package/dist/es2020/utils/cli/generate.js +0 -183
  343. package/dist/es2020/utils/cli/index.js +0 -74
  344. package/dist/es2020/utils/cli/start.js +0 -86
  345. package/dist/es2020/utils/cli/start.js.map +0 -1
  346. package/dist/es2020/utils/cli/utils/cli.helpers.js +0 -18
  347. package/dist/es2020/utils/cli/utils/cli.helpers.js.map +0 -1
  348. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +0 -33
  349. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-controller-template.js +0 -18
  350. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-middlewares.js +0 -265
  351. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +0 -1
  352. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +0 -55
  353. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +0 -1
  354. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-router-template.js +0 -32
  355. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-router-template.js.map +0 -1
  356. package/dist/es2020/utils/cli/utils/template-generator/templates/generate-service-template.js +0 -32
  357. package/dist/es2020/utils/cli/utils/template-generators.js +0 -25
  358. package/dist/es2020/utils/dotenv.helpers.js +0 -37
  359. package/dist/es2020/utils/features/api.features.js +0 -154
  360. package/dist/es2020/utils/features/api.features.js.map +0 -1
  361. package/dist/es2020/utils/features/change-case.features.js +0 -31
  362. package/dist/es2020/utils/helpers/api.features.helpers.js +0 -103
  363. package/dist/es2020/utils/helpers/change-case.helpers.js +0 -161
  364. package/dist/es2020/utils/helpers/deepmerge.helper.js +0 -113
  365. package/dist/es2020/utils/helpers/fs.helpers.js +0 -45
  366. package/dist/es2020/utils/helpers/fs.helpers.js.map +0 -1
  367. package/dist/es2020/utils/helpers/global.helpers.js +0 -4
  368. package/dist/es2020/utils/helpers/global.helpers.js.map +0 -1
  369. package/dist/es2020/utils/helpers/models.helpers.js +0 -276
  370. package/dist/es2020/utils/helpers/models.helpers.js.map +0 -1
  371. package/dist/es2020/utils/helpers/prisma.helpers.js +0 -41
  372. package/dist/es2020/utils/helpers/prisma.helpers.js.map +0 -1
  373. package/dist/es2020/utils/helpers/query-parser.helpers.js +0 -40
  374. package/dist/es2020/utils/helpers/text.helpers.js +0 -22
  375. package/dist/es2020/utils/validate-dto.js +0 -11
  376. package/dist/es2020/utils/validate-schema.js +0 -9
  377. /package/dist/{es2020 → esm}/exports/auth/index.js.map +0 -0
  378. /package/dist/{es2020 → esm}/exports/controllers/index.js.map +0 -0
  379. /package/dist/{es2020 → esm}/exports/error-handler/index.js.map +0 -0
  380. /package/dist/{es2020 → esm}/exports/index.js.map +0 -0
  381. /package/dist/{es2020 → esm}/exports/middlewares/index.js.map +0 -0
  382. /package/dist/{es2020 → esm}/exports/prisma/index.js.map +0 -0
  383. /package/dist/{es2020 → esm}/exports/services/index.js.map +0 -0
  384. /package/dist/{es2020 → esm}/exports/utils/index.js.map +0 -0
  385. /package/dist/{es2020 → esm}/exports/validation/index.js.map +0 -0
  386. /package/dist/{es2020 → esm}/modules/auth/auth.controller.js.map +0 -0
  387. /package/dist/{es2020 → esm}/modules/auth/utils/helpers/auth.controller.helpers.js.map +0 -0
  388. /package/dist/{es2020 → esm}/modules/base/utils/helpers/base.controller.helpers.js.map +0 -0
  389. /package/dist/{es2020 → esm}/modules/base/utils/helpers/base.middlewares.helpers.js.map +0 -0
  390. /package/dist/{es2020 → esm}/modules/base/utils/helpers/base.service.helpers.js.map +0 -0
  391. /package/dist/{es2020 → esm}/modules/email/email.service.js.map +0 -0
  392. /package/dist/{es2020 → esm}/modules/error-handler/utils/app-error.js.map +0 -0
  393. /package/dist/{es2020 → esm}/modules/file-upload/file-upload.controller.js.map +0 -0
  394. /package/dist/{es2020 → esm}/modules/file-upload/file-upload.service.js.map +0 -0
  395. /package/dist/{es2020 → esm}/paths.js +0 -0
  396. /package/dist/{es2020 → esm}/paths.js.map +0 -0
  397. /package/dist/{es2020 → esm}/types/auth.js.map +0 -0
  398. /package/dist/{es2020 → esm}/types/index.js.map +0 -0
  399. /package/dist/{es2020 → esm}/types/router-config.js.map +0 -0
  400. /package/dist/{es2020 → esm}/utils/arkos-env.js.map +0 -0
  401. /package/dist/{es2020 → esm}/utils/cli/index.js.map +0 -0
  402. /package/dist/{es2020 → esm}/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js.map +0 -0
  403. /package/dist/{es2020 → esm}/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +0 -0
  404. /package/dist/{es2020 → esm}/utils/cli/utils/template-generators.js.map +0 -0
  405. /package/dist/{es2020 → esm}/utils/dotenv.helpers.js.map +0 -0
  406. /package/dist/{es2020 → esm}/utils/features/change-case.features.js.map +0 -0
  407. /package/dist/{es2020 → esm}/utils/helpers/api.features.helpers.js.map +0 -0
  408. /package/dist/{es2020 → esm}/utils/helpers/change-case.helpers.js.map +0 -0
  409. /package/dist/{es2020 → esm}/utils/helpers/deepmerge.helper.js.map +0 -0
  410. /package/dist/{es2020 → esm}/utils/helpers/query-parser.helpers.js.map +0 -0
  411. /package/dist/{es2020 → esm}/utils/helpers/text.helpers.js.map +0 -0
  412. /package/dist/{es2020 → esm}/utils/validate-dto.js.map +0 -0
  413. /package/dist/{es2020 → esm}/utils/validate-schema.js.map +0 -0
@@ -1,266 +0,0 @@
1
- import AppError from "../error-handler/utils/app-error";
2
- import { getFileUploadServices, } from "./file-upload.service";
3
- import path from "path";
4
- import fs from "fs";
5
- import catchAsync from "../error-handler/utils/catch-async";
6
- import { getArkosConfig } from "../../server";
7
- import { processFile, processImage } from "./utils/helpers/file-upload.helpers";
8
- import { accessAsync, mkdirAsync, statAsync, } from "../../utils/helpers/fs.helpers";
9
- import { getModelModules } from "../../utils/helpers/models.helpers";
10
- class FileUploadController {
11
- constructor() {
12
- this.uploadFile = catchAsync(async (req, res, next) => {
13
- this.middlewares = getModelModules("file-upload")?.middlewares || {};
14
- const { fileType } = req.params;
15
- const { format, width, height, resizeTo } = req.query;
16
- const options = { format, width, height, resizeTo };
17
- const { documentUploadService, fileUploadService, imageUploadService, videoUploadService, } = getFileUploadServices();
18
- const { fileUpload } = getArkosConfig();
19
- const baseUploadDir = fileUpload?.baseUploadDir || "/uploads";
20
- const uploadPath = path.resolve(process.cwd(), baseUploadDir, fileType);
21
- try {
22
- await accessAsync(uploadPath);
23
- }
24
- catch (err) {
25
- await mkdirAsync(uploadPath, { recursive: true });
26
- }
27
- let uploader;
28
- switch (fileType) {
29
- case "images":
30
- uploader = imageUploadService;
31
- break;
32
- case "videos":
33
- uploader = videoUploadService;
34
- break;
35
- case "documents":
36
- uploader = documentUploadService;
37
- break;
38
- case "files":
39
- uploader = fileUploadService;
40
- break;
41
- default:
42
- return next(new AppError("Invalid file type", 400));
43
- }
44
- uploader.handleMultipleUpload()(req, res, async (err) => {
45
- if (err)
46
- return next(err);
47
- let data;
48
- if (req.files && Array.isArray(req.files) && req.files.length > 0) {
49
- if (fileType === "images") {
50
- data = await Promise.all(req.files.map((file) => processImage(req, file.path, options)));
51
- }
52
- else {
53
- data = await Promise.all(req.files.map((file) => processFile(req, file.path)));
54
- }
55
- data = data.filter((url) => url !== null);
56
- }
57
- else if (req.file) {
58
- if (fileType === "images") {
59
- data = await processImage(req, req.file.path, options);
60
- }
61
- else {
62
- data = await processFile(req, req.file.path);
63
- }
64
- }
65
- else {
66
- return next(new AppError("No file uploaded", 400));
67
- }
68
- const jsonContent = {
69
- success: true,
70
- data,
71
- message: Array.isArray(data)
72
- ? `${data.length} files uploaded successfully`
73
- : "File uploaded successfully",
74
- };
75
- if (this.middlewares?.afterUploadFile) {
76
- req.responseData = jsonContent;
77
- req.responseStatus = 200;
78
- return next();
79
- }
80
- res.status(200).json(jsonContent);
81
- });
82
- });
83
- this.deleteFile = catchAsync(async (req, res, next) => {
84
- this.middlewares = getModelModules("file-upload")?.middlewares || {};
85
- const { fileType, fileName } = req.params;
86
- const { documentUploadService, fileUploadService, imageUploadService, videoUploadService, } = getFileUploadServices();
87
- let uploader;
88
- switch (fileType) {
89
- case "images":
90
- uploader = imageUploadService;
91
- break;
92
- case "videos":
93
- uploader = videoUploadService;
94
- break;
95
- case "documents":
96
- uploader = documentUploadService;
97
- break;
98
- case "files":
99
- uploader = fileUploadService;
100
- break;
101
- default:
102
- return next(new AppError("Invalid file type", 400));
103
- }
104
- try {
105
- const { fileUpload } = getArkosConfig();
106
- const baseUploadRoute = fileUpload?.baseRoute || "/api/uploads";
107
- const urlPattern = new RegExp(`${baseUploadRoute}/${fileType}/${fileName}`);
108
- const isExpectedUrlPattern = urlPattern.test(req.originalUrl);
109
- if (isExpectedUrlPattern) {
110
- const fullUrl = `${req.protocol}://${req.get("host")}${req.originalUrl}`;
111
- await uploader.deleteFileByUrl(fullUrl);
112
- }
113
- else {
114
- await uploader.deleteFileByName(fileName, fileType);
115
- }
116
- if (this.middlewares.afterDeleteFile) {
117
- req.responseStatus = 204;
118
- return next();
119
- }
120
- res.status(204).json();
121
- }
122
- catch (error) {
123
- if (error instanceof AppError) {
124
- return next(error);
125
- }
126
- return next(new AppError("File not found", 404));
127
- }
128
- });
129
- this.updateFile = catchAsync(async (req, res, next) => {
130
- this.middlewares = getModelModules("file-upload")?.middlewares || {};
131
- const { fileType, fileName } = req.params;
132
- const { format, width, height, resizeTo } = req.query;
133
- const options = { format, width, height, resizeTo };
134
- const { documentUploadService, fileUploadService, imageUploadService, videoUploadService, } = getFileUploadServices();
135
- const { fileUpload } = getArkosConfig();
136
- const baseUploadDir = fileUpload?.baseUploadDir || "/uploads";
137
- const uploadPath = path.resolve(process.cwd(), baseUploadDir, fileType);
138
- try {
139
- await accessAsync(uploadPath);
140
- }
141
- catch (err) {
142
- await mkdirAsync(uploadPath, { recursive: true });
143
- }
144
- let uploader;
145
- switch (fileType) {
146
- case "images":
147
- uploader = imageUploadService;
148
- break;
149
- case "videos":
150
- uploader = videoUploadService;
151
- break;
152
- case "documents":
153
- uploader = documentUploadService;
154
- break;
155
- case "files":
156
- uploader = fileUploadService;
157
- break;
158
- default:
159
- return next(new AppError("Invalid file type", 400));
160
- }
161
- uploader.handleMultipleUpload()(req, res, async (err) => {
162
- if (err)
163
- return next(err);
164
- if (!req.file &&
165
- (!req.files || !Array.isArray(req.files) || req.files.length === 0)) {
166
- return next(new AppError("No new file uploaded", 400));
167
- }
168
- if (fileName && fileName.trim() !== "") {
169
- try {
170
- const baseUploadRoute = fileUpload?.baseRoute || "/api/uploads";
171
- const urlPattern = new RegExp(`${baseUploadRoute}/${fileType}/${fileName}`);
172
- const isExpectedUrlPattern = urlPattern.test(req.originalUrl);
173
- if (isExpectedUrlPattern) {
174
- const oldFileUrl = `${req.protocol}://${req.get("host")}${req.originalUrl}`;
175
- await uploader.deleteFileByUrl(oldFileUrl);
176
- }
177
- else {
178
- await uploader.deleteFileByName(fileName, fileType);
179
- }
180
- }
181
- catch (error) {
182
- console.warn(`Could not delete old file: ${fileName}`, error);
183
- }
184
- }
185
- let data;
186
- if (req.files && Array.isArray(req.files) && req.files.length > 0) {
187
- if (fileType === "images") {
188
- data = await Promise.all(req.files.map((file) => processImage(req, file.path, options)));
189
- }
190
- else {
191
- data = await Promise.all(req.files.map((file) => processFile(req, file.path)));
192
- }
193
- data = data.filter((url) => url !== null);
194
- }
195
- else if (req.file) {
196
- if (fileType === "images") {
197
- data = await processImage(req, req.file.path, options);
198
- }
199
- else {
200
- data = await processFile(req, req.file.path);
201
- }
202
- }
203
- const jsonContent = {
204
- success: true,
205
- data,
206
- message: Array.isArray(data)
207
- ? fileName && fileName.trim() !== ""
208
- ? `File updated successfully. ${data.length} new files uploaded`
209
- : `${data.length} files uploaded successfully`
210
- : fileName && fileName.trim() !== ""
211
- ? "File updated successfully"
212
- : "File uploaded successfully",
213
- };
214
- if (this.middlewares.afterUpdateFile) {
215
- req.responseData = jsonContent;
216
- req.responseStatus = 200;
217
- return next();
218
- }
219
- res.status(200).json(jsonContent);
220
- });
221
- });
222
- this.streamFile = catchAsync(async (req, res, next) => {
223
- const { fileName, fileType } = req.params;
224
- const filePath = path.join(".", "uploads", fileType, fileName);
225
- try {
226
- await accessAsync(filePath);
227
- }
228
- catch (err) {
229
- throw new AppError("File not found", 404);
230
- }
231
- const fileStat = await statAsync(filePath);
232
- const fileSize = fileStat.size;
233
- const range = req.headers.range;
234
- if (range) {
235
- const [partialStart, partialEnd] = range
236
- .replace(/bytes=/, "")
237
- .split("-");
238
- const start = parseInt(partialStart, 10) || 0;
239
- const end = partialEnd ? parseInt(partialEnd, 10) : fileSize - 1;
240
- if (start >= fileSize || end >= fileSize) {
241
- res.status(416).json({ error: "Range Not Satisfiable" });
242
- return;
243
- }
244
- res.writeHead(206, {
245
- "Content-Range": `bytes ${start}-${end}/${fileSize}`,
246
- "Accept-Ranges": "bytes",
247
- "Content-Length": end - start + 1,
248
- "Content-Type": "application/octet-stream",
249
- "Content-Disposition": `inline; filename="${fileName}"`,
250
- });
251
- fs.createReadStream(filePath, { start, end }).pipe(res);
252
- }
253
- else {
254
- res.writeHead(200, {
255
- "Content-Length": fileSize,
256
- "Content-Type": "application/octet-stream",
257
- "Content-Disposition": `inline; filename="${fileName}"`,
258
- });
259
- fs.createReadStream(filePath).pipe(res);
260
- }
261
- });
262
- }
263
- }
264
- const fileUploadController = new FileUploadController();
265
- export default fileUploadController;
266
- //# sourceMappingURL=file-upload.controller.js.map
@@ -1,50 +0,0 @@
1
- import { Router } from "express";
2
- import { importPrismaModelModules } from "../../utils/helpers/models.helpers";
3
- import authService from "../auth/auth.service";
4
- import fileUploadController from "./file-upload.controller";
5
- import path from "path";
6
- import express from "express";
7
- import deepmerge from "../../utils/helpers/deepmerge.helper";
8
- import { sendResponse } from "../base/base.middlewares";
9
- const router = Router();
10
- export async function getFileUploadRouter({ fileUpload }) {
11
- const modelModules = await importPrismaModelModules("file-upload");
12
- let { middlewares = {}, authConfigs = {} } = {};
13
- if (modelModules) {
14
- ({ middlewares = {}, authConfigs = {} } = modelModules);
15
- }
16
- let basePathname = fileUpload?.baseRoute || "/api/uploads/";
17
- if (!basePathname.startsWith("/"))
18
- basePathname = "/" + basePathname;
19
- if (!basePathname.endsWith("/"))
20
- basePathname = basePathname + "/";
21
- router.get(`${basePathname}*`, authService.handleAuthenticationControl("View", authConfigs.authenticationControl), authService.handleAccessControl("View", "file-upload", authConfigs.accessControl), ...(middlewares?.beforeFindFile ? [middlewares?.beforeFindFile] : []), (req, res, next) => {
22
- req.url = req.url.replace(basePathname, "/");
23
- next();
24
- }, express.static(path.resolve(process.cwd(), fileUpload?.baseUploadDir || "uploads"), deepmerge({
25
- maxAge: "1y",
26
- etag: true,
27
- lastModified: true,
28
- dotfiles: "ignore",
29
- fallthrough: true,
30
- index: false,
31
- cacheControl: true,
32
- }, fileUpload?.expressStaticOptions || {})));
33
- router.post(`${basePathname}:fileType`, authService.handleAuthenticationControl("Create", authConfigs.authenticationControl), authService.handleAccessControl("Create", "file-upload", authConfigs.accessControl), middlewares?.beforeUploadFile || fileUploadController.uploadFile, middlewares?.beforeUploadFile
34
- ? fileUploadController.uploadFile
35
- : middlewares?.afterUploadFile || sendResponse, middlewares?.beforeUploadFile && middlewares?.afterUploadFile
36
- ? middlewares?.afterUploadFile
37
- : sendResponse, sendResponse);
38
- router.patch(`${basePathname}:fileType/:fileName`, authService.handleAuthenticationControl("Update", authConfigs.authenticationControl), authService.handleAccessControl("Update", "file-upload", authConfigs.accessControl), middlewares?.beforeUpdateFile || fileUploadController.updateFile, middlewares?.beforeUpdateFile
39
- ? fileUploadController.updateFile
40
- : middlewares?.afterUpdateFile || sendResponse, middlewares?.beforeUpdateFile && middlewares?.afterUpdateFile
41
- ? middlewares?.afterUpdateFile
42
- : sendResponse, sendResponse);
43
- router.delete(`${basePathname}:fileType/:fileName`, authService.handleAuthenticationControl("Delete", authConfigs.authenticationControl), authService.handleAccessControl("Delete", "file-upload", authConfigs.accessControl), middlewares?.beforeDeleteFile || fileUploadController.deleteFile, middlewares?.beforeDeleteFile
44
- ? fileUploadController.deleteFile
45
- : middlewares?.afterDeleteFile || sendResponse, middlewares?.beforeDeleteFile && middlewares?.afterDeleteFile
46
- ? middlewares?.afterDeleteFile
47
- : sendResponse, sendResponse);
48
- return router;
49
- }
50
- //# sourceMappingURL=file-upload.router.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-upload.router.js","sourceRoot":"","sources":["../../../../src/modules/file-upload/file-upload.router.ts"],"names":[],"mappings":"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","sourcesContent":["import { Router } from \"express\";\nimport { importPrismaModelModules } from \"../../utils/helpers/models.helpers\";\nimport authService from \"../auth/auth.service\";\nimport fileUploadController from \"./file-upload.controller\";\nimport { ArkosConfig } from \"../../types/arkos-config\";\nimport path from \"path\";\nimport express from \"express\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\nimport { AuthConfigs } from \"../../types/auth\";\nimport { sendResponse } from \"../base/base.middlewares\";\n\nconst router: Router = Router();\n\nexport async function getFileUploadRouter({ fileUpload }: ArkosConfig) {\n const modelModules = await importPrismaModelModules(\"file-upload\");\n let { middlewares = {} as any, authConfigs = {} as AuthConfigs } = {};\n\n if (modelModules) {\n ({ middlewares = {}, authConfigs = {} } = modelModules);\n }\n\n let basePathname = fileUpload?.baseRoute || \"/api/uploads/\";\n\n if (!basePathname.startsWith(\"/\")) basePathname = \"/\" + basePathname;\n if (!basePathname.endsWith(\"/\")) basePathname = basePathname + \"/\";\n\n // Static file serving route\n router.get(\n `${basePathname}*`,\n authService.handleAuthenticationControl(\n \"View\",\n authConfigs.authenticationControl\n ),\n authService.handleAccessControl(\n \"View\",\n \"file-upload\",\n authConfigs.accessControl\n ),\n ...(middlewares?.beforeFindFile ? [middlewares?.beforeFindFile] : []),\n (req, res, next) => {\n req.url = req.url.replace(basePathname, \"/\");\n next();\n },\n express.static(\n path.resolve(process.cwd(), fileUpload?.baseUploadDir || \"uploads\"),\n deepmerge(\n {\n maxAge: \"1y\",\n etag: true,\n lastModified: true,\n dotfiles: \"ignore\",\n fallthrough: true,\n index: false,\n cacheControl: true,\n },\n fileUpload?.expressStaticOptions || {}\n )\n )\n );\n\n // POST /{basePathname}:fileType - Upload File\n router.post(\n `${basePathname}:fileType`,\n authService.handleAuthenticationControl(\n \"Create\",\n authConfigs.authenticationControl\n ),\n authService.handleAccessControl(\n \"Create\",\n \"file-upload\",\n authConfigs.accessControl\n ),\n middlewares?.beforeUploadFile || fileUploadController.uploadFile,\n middlewares?.beforeUploadFile\n ? fileUploadController.uploadFile\n : middlewares?.afterUploadFile || sendResponse,\n middlewares?.beforeUploadFile && middlewares?.afterUploadFile\n ? middlewares?.afterUploadFile\n : sendResponse,\n sendResponse\n );\n\n // PATCH /{basePathname}:fileType/:fileName - Update File\n router.patch(\n `${basePathname}:fileType/:fileName`,\n authService.handleAuthenticationControl(\n \"Update\",\n authConfigs.authenticationControl\n ),\n authService.handleAccessControl(\n \"Update\",\n \"file-upload\",\n authConfigs.accessControl\n ),\n middlewares?.beforeUpdateFile || fileUploadController.updateFile,\n middlewares?.beforeUpdateFile\n ? fileUploadController.updateFile\n : middlewares?.afterUpdateFile || sendResponse,\n middlewares?.beforeUpdateFile && middlewares?.afterUpdateFile\n ? middlewares?.afterUpdateFile\n : sendResponse,\n sendResponse\n );\n\n // DELETE /{basePathname}:fileType/:fileName - Delete File\n router.delete(\n `${basePathname}:fileType/:fileName`,\n authService.handleAuthenticationControl(\n \"Delete\",\n authConfigs.authenticationControl\n ),\n authService.handleAccessControl(\n \"Delete\",\n \"file-upload\",\n authConfigs.accessControl\n ),\n middlewares?.beforeDeleteFile || fileUploadController.deleteFile,\n middlewares?.beforeDeleteFile\n ? fileUploadController.deleteFile\n : middlewares?.afterDeleteFile || sendResponse,\n middlewares?.beforeDeleteFile && middlewares?.afterDeleteFile\n ? middlewares?.afterDeleteFile\n : sendResponse,\n sendResponse\n );\n\n return router;\n}\n"]}
@@ -1,314 +0,0 @@
1
- import multer from "multer";
2
- import path from "path";
3
- import fs from "fs";
4
- import AppError from "../error-handler/utils/app-error";
5
- import { promisify } from "util";
6
- import { getArkosConfig } from "../../server";
7
- import deepmerge from "../../utils/helpers/deepmerge.helper";
8
- import { processFile, processImage } from "./utils/helpers/file-upload.helpers";
9
- import { removeBothSlashes } from "../../utils/helpers/text.helpers";
10
- export class FileUploadService {
11
- constructor(uploadDir, fileSizeLimit = 1024 * 1024 * 5, allowedFileTypes = /.*/, maxCount = 30) {
12
- this.fileFilter = (req, file, cb) => {
13
- const extName = this.allowedFileTypes.test(path.extname(file.originalname).toLowerCase());
14
- const mimeType = this.allowedFileTypes.test(file.mimetype);
15
- if (mimeType && extName) {
16
- cb(null, true);
17
- }
18
- else {
19
- cb(new AppError("Invalid file type", 400));
20
- }
21
- };
22
- uploadDir = uploadDir.startsWith("/") ? uploadDir.substring(1) : uploadDir;
23
- uploadDir = uploadDir.endsWith("/") ? uploadDir.slice(0, -1) : uploadDir;
24
- this.uploadDir = path.resolve(process.cwd(), `${uploadDir}/`);
25
- this.fileSizeLimit = fileSizeLimit;
26
- this.allowedFileTypes = allowedFileTypes;
27
- this.maxCount = maxCount;
28
- if (!fs.existsSync(this.uploadDir)) {
29
- fs.mkdirSync(this.uploadDir, { recursive: true });
30
- }
31
- this.storage = multer.diskStorage({
32
- destination: (req, file, cb) => {
33
- cb(null, this.uploadDir);
34
- },
35
- filename: (req, file, cb) => {
36
- const uniqueSuffix = Date.now() + "-" + Math.round(Math.random() * 1e9);
37
- cb(null, `${uniqueSuffix}${path.extname(file.originalname)}`);
38
- },
39
- });
40
- }
41
- getUpload() {
42
- return multer({
43
- storage: this.storage,
44
- fileFilter: this.fileFilter,
45
- limits: { fileSize: this.fileSizeLimit },
46
- });
47
- }
48
- handleSingleUpload(oldFilePath) {
49
- return (req, res, next) => {
50
- const upload = this.getUpload().single(this.getFieldName());
51
- upload(req, res, async (err) => {
52
- if (err instanceof multer.MulterError) {
53
- return next(err);
54
- }
55
- else if (err) {
56
- return next(err);
57
- }
58
- if (oldFilePath) {
59
- const { fileUpload: configs } = getArkosConfig();
60
- const filePath = path.resolve(process.cwd(), removeBothSlashes(configs?.baseUploadDir), removeBothSlashes(oldFilePath));
61
- try {
62
- const stats = await promisify(fs.stat)(filePath);
63
- if (stats)
64
- await promisify(fs.unlink)(filePath);
65
- }
66
- catch (err) {
67
- console.error(err);
68
- }
69
- }
70
- next();
71
- });
72
- };
73
- }
74
- handleMultipleUpload() {
75
- return (req, res, next) => {
76
- const upload = this.getUpload().array(this.getFieldName(), this.maxCount);
77
- upload(req, res, (err) => {
78
- if (err instanceof multer.MulterError)
79
- return next(err);
80
- else if (err)
81
- return next(err);
82
- next();
83
- });
84
- };
85
- }
86
- handleDeleteSingleFile(oldFilePath) {
87
- return async (req, res, next) => {
88
- const filePath = path.join(oldFilePath);
89
- try {
90
- const stats = await promisify(fs.stat)(filePath);
91
- if (stats) {
92
- await promisify(fs.unlink)(filePath);
93
- }
94
- }
95
- catch (err) {
96
- console.error(err);
97
- }
98
- next();
99
- };
100
- }
101
- async deleteFileByUrl(fileUrl) {
102
- try {
103
- const { fileUpload } = getArkosConfig();
104
- const baseRoute = fileUpload?.baseRoute || "/api/uploads";
105
- let urlPath;
106
- if (fileUrl.startsWith("http")) {
107
- const url = new URL(fileUrl);
108
- urlPath = url.pathname;
109
- }
110
- else {
111
- urlPath = fileUrl;
112
- }
113
- const baseRouteIndex = urlPath.indexOf(baseRoute);
114
- if (baseRouteIndex === -1) {
115
- throw new AppError("Invalid file URL: base route not found", 400);
116
- }
117
- const pathAfterBaseRoute = urlPath.substring(baseRouteIndex + baseRoute.length);
118
- const cleanPath = pathAfterBaseRoute.startsWith("/")
119
- ? pathAfterBaseRoute.substring(1)
120
- : pathAfterBaseRoute;
121
- const fileTypes = ["images", "videos", "documents", "files"];
122
- let fileType = null;
123
- let fileName = null;
124
- for (const type of fileTypes) {
125
- const typeIndex = cleanPath.indexOf(type + "/");
126
- if (typeIndex !== -1) {
127
- fileType = type;
128
- fileName = cleanPath.substring(typeIndex + type.length + 1);
129
- break;
130
- }
131
- }
132
- if (!fileType || !fileName) {
133
- throw new AppError("Unable to determine file type or file name from URL", 400);
134
- }
135
- const { documentUploadService, fileUploadService, imageUploadService, videoUploadService, } = getFileUploadServices();
136
- let filePath;
137
- switch (fileType) {
138
- case "images":
139
- filePath = path.join(imageUploadService.uploadDir, fileName);
140
- break;
141
- case "videos":
142
- filePath = path.join(videoUploadService.uploadDir, fileName);
143
- break;
144
- case "documents":
145
- filePath = path.join(documentUploadService.uploadDir, fileName);
146
- break;
147
- case "files":
148
- filePath = path.join(fileUploadService.uploadDir, fileName);
149
- break;
150
- default:
151
- throw new AppError(`Unsupported file type: ${fileType}`, 400);
152
- }
153
- await promisify(fs.stat)(filePath);
154
- await promisify(fs.unlink)(filePath);
155
- return true;
156
- }
157
- catch (error) {
158
- if (error instanceof AppError) {
159
- throw error;
160
- }
161
- if (error.code === "ENOENT") {
162
- throw new AppError("File not found", 404);
163
- }
164
- throw new AppError(`Failed to delete file: ${error.message}`, 500);
165
- }
166
- }
167
- getFieldName() {
168
- let fieldName = "files";
169
- if (this.uploadDir.endsWith("images") || this.uploadDir.endsWith("images/"))
170
- fieldName = "images";
171
- if (this.uploadDir.endsWith("videos") || this.uploadDir.endsWith("videos/"))
172
- fieldName = "videos";
173
- if (this.uploadDir.endsWith("documents") ||
174
- this.uploadDir.endsWith("documents/"))
175
- fieldName = "documents";
176
- if (this.uploadDir.endsWith("files") || this.uploadDir.endsWith("files/"))
177
- fieldName = "files";
178
- return fieldName;
179
- }
180
- async upload(req, res, options = {}) {
181
- const { fileUpload } = getArkosConfig();
182
- const baseRoute = fileUpload?.baseRoute || "/api/uploads";
183
- return new Promise((resolve, reject) => {
184
- const isMultiple = Array.isArray(req.query.multiple)
185
- ? req.query.multiple[0] == "true"
186
- : req.query.multiple == "true";
187
- const uploadHandler = isMultiple
188
- ? this.getUpload().array(this.getFieldName(), this.maxCount)
189
- : this.getUpload().single(this.getFieldName());
190
- uploadHandler(req, res, async (err) => {
191
- if (err)
192
- return reject(err);
193
- try {
194
- const protocol = req.get("host")?.includes?.("localhost")
195
- ? "http"
196
- : "https";
197
- const baseURL = `${protocol}://${req.get("host")}`;
198
- const dirParts = this.uploadDir.split("/");
199
- const fileType = (this.uploadDir.endsWith("/")
200
- ? dirParts[dirParts.length - 2]
201
- : dirParts[dirParts.length - 1]) || "files";
202
- let data;
203
- if (req.files && Array.isArray(req.files) && req.files.length > 0) {
204
- const isImageUpload = this.uploadDir?.includes?.("/images");
205
- if (isImageUpload) {
206
- data = await Promise.all(req.files.map((file) => processImage(req, file.path, options)));
207
- }
208
- else {
209
- data = await Promise.all(req.files.map((file) => processFile(req, file.path)));
210
- }
211
- data = data.filter((url) => url !== null);
212
- }
213
- else if (req.file) {
214
- const isImageUpload = this.uploadDir?.includes?.("/images");
215
- if (isImageUpload) {
216
- data = await processImage(req, req.file.path, options);
217
- }
218
- else {
219
- data = await processFile(req, req.file.path);
220
- }
221
- }
222
- else {
223
- return reject(new AppError("No file uploaded", 400));
224
- }
225
- resolve(data);
226
- }
227
- catch (error) {
228
- reject(error);
229
- }
230
- });
231
- });
232
- }
233
- async deleteFileByName(fileName, fileType) {
234
- try {
235
- if (!fileType)
236
- throw new AppError("File type parameter is required", 400);
237
- const validFileTypes = ["images", "videos", "documents", "files"];
238
- if (!validFileTypes.includes(fileType)) {
239
- throw new AppError(`Invalid file type: ${fileType}. Must be one of: ${validFileTypes.join(", ")}`, 400);
240
- }
241
- const { documentUploadService, fileUploadService, imageUploadService, videoUploadService, } = getFileUploadServices();
242
- let targetService;
243
- switch (fileType) {
244
- case "images":
245
- targetService = imageUploadService;
246
- break;
247
- case "videos":
248
- targetService = videoUploadService;
249
- break;
250
- case "documents":
251
- targetService = documentUploadService;
252
- break;
253
- case "files":
254
- targetService = fileUploadService;
255
- break;
256
- default:
257
- throw new AppError(`Unsupported file type: ${fileType}`, 400);
258
- }
259
- const filePath = path.join(targetService.uploadDir, fileName);
260
- await promisify(fs.stat)(filePath);
261
- await promisify(fs.unlink)(filePath);
262
- return true;
263
- }
264
- catch (error) {
265
- if (error instanceof AppError) {
266
- throw error;
267
- }
268
- if (error.code === "ENOENT") {
269
- throw new AppError("File not found", 404);
270
- }
271
- throw new AppError(`Failed to delete file: ${error.message}`, 500);
272
- }
273
- }
274
- }
275
- export const getFileUploadServices = () => {
276
- const { fileUpload } = getArkosConfig();
277
- const baseUploadDir = fileUpload?.baseUploadDir || "/uploads";
278
- const defaultRestrictions = {
279
- images: {
280
- maxCount: 30,
281
- maxSize: 1024 * 1024 * 15,
282
- supportedFilesRegex: /jpeg|jpg|png|gif|webp|svg|bmp|tiff|heif|heic|ico|jfif|raw|cr2|nef|orf|sr2|arw|dng|pef|raf|rw2|psd|ai|eps|xcf|jxr|wdp|hdp|jp2|j2k|jpf|jpx|jpm|mj2|avif/,
283
- },
284
- videos: {
285
- maxCount: 10,
286
- maxSize: 1024 * 1024 * 5096,
287
- supportedFilesRegex: /mp4|avi|mov|mkv|flv|wmv|webm|mpg|mpeg|3gp|m4v|ts|rm|rmvb|vob|ogv|dv|qt|asf|m2ts|mts|divx|f4v|swf|mxf|roq|nsv|mvb|svi|mpe|m2v|mp2|mpv|h264|h265|hevc/,
288
- },
289
- documents: {
290
- maxCount: 30,
291
- maxSize: 1024 * 1024 * 50,
292
- supportedFilesRegex: /pdf|doc|docx|xls|xlsx|ppt|pptx|odt|ods|odg|odp|txt|rtf|csv|epub|md|tex|pages|numbers|key|xml|json|yaml|yml|ini|cfg|conf|log|html|htm|xhtml|djvu|mobi|azw|azw3|fb2|lit|ps|wpd|wps|dot|dotx|xlt|xltx|pot|potx|oft|one|onetoc2|opf|oxps|hwp/,
293
- },
294
- files: {
295
- maxCount: 10,
296
- maxSize: 1024 * 1024 * 5096,
297
- supportedFilesRegex: /.*/,
298
- },
299
- };
300
- const restrictions = fileUpload?.restrictions
301
- ? deepmerge(defaultRestrictions, fileUpload.restrictions)
302
- : defaultRestrictions;
303
- const imageUploadService = new FileUploadService(`${baseUploadDir}/images`, restrictions.images.maxSize, restrictions.images.supportedFilesRegex, restrictions.images.maxCount);
304
- const videoUploadService = new FileUploadService(`${baseUploadDir}/videos`, restrictions.videos.maxSize, restrictions.videos.supportedFilesRegex, restrictions.videos.maxCount);
305
- const documentUploadService = new FileUploadService(`${baseUploadDir}/documents`, restrictions.documents.maxSize, restrictions.documents.supportedFilesRegex, restrictions.documents.maxCount);
306
- const fileUploadService = new FileUploadService(`${baseUploadDir}/files`, restrictions.files.maxSize, restrictions.files.supportedFilesRegex, restrictions.files.maxCount);
307
- return {
308
- imageUploadService,
309
- videoUploadService,
310
- documentUploadService,
311
- fileUploadService,
312
- };
313
- };
314
- //# sourceMappingURL=file-upload.service.js.map