arkos 1.2.13-test.1 → 1.2.13-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 (258) hide show
  1. package/dist/cjs/app.js +1 -138
  2. package/dist/cjs/exports/auth/index.js +1 -6
  3. package/dist/cjs/exports/controllers/index.js +1 -11
  4. package/dist/cjs/exports/error-handler/index.js +1 -11
  5. package/dist/cjs/exports/index.js +1 -12
  6. package/dist/cjs/exports/middlewares/index.js +1 -7
  7. package/dist/cjs/exports/prisma/index.js +1 -6
  8. package/dist/cjs/exports/services/index.js +1 -49
  9. package/dist/cjs/exports/utils/index.js +1 -44
  10. package/dist/cjs/exports/validation/index.js +1 -11
  11. package/dist/cjs/modules/auth/auth.controller.js +1 -194
  12. package/dist/cjs/modules/auth/auth.router.js +1 -50
  13. package/dist/cjs/modules/auth/auth.service.js +1 -185
  14. package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +1 -83
  15. package/dist/cjs/modules/base/base.controller.js +1 -158
  16. package/dist/cjs/modules/base/base.middlewares.js +1 -92
  17. package/dist/cjs/modules/base/base.router.js +1 -24
  18. package/dist/cjs/modules/base/base.service.js +1 -128
  19. package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js +1 -82
  20. package/dist/cjs/modules/base/utils/helpers/base.middlewares.helpers.js +1 -50
  21. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +1 -97
  22. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +1 -171
  23. package/dist/cjs/modules/email/email.service.js +1 -104
  24. package/dist/cjs/modules/error-handler/error-handler.controller.js +4 -146
  25. package/dist/cjs/modules/error-handler/utils/app-error.js +1 -17
  26. package/dist/cjs/modules/error-handler/utils/catch-async.js +1 -12
  27. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +3 -201
  28. package/dist/cjs/modules/file-upload/file-upload.controller.js +1 -271
  29. package/dist/cjs/modules/file-upload/file-upload.router.js +1 -44
  30. package/dist/cjs/modules/file-upload/file-upload.service.js +1 -322
  31. package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js +1 -97
  32. package/dist/cjs/modules/swagger/swagger.router.js +1 -119
  33. package/dist/cjs/modules/swagger/swagger.router.js.map +1 -1
  34. package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +1 -270
  35. package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js +1 -66
  36. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -41
  37. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -29
  38. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +1 -30
  39. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +1 -471
  40. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +1 -575
  41. package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +1 -253
  42. package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js +1 -105
  43. package/dist/cjs/paths.js +1 -9
  44. package/dist/cjs/server.js +5 -85
  45. package/dist/cjs/types/arkos-config.js +1 -3
  46. package/dist/cjs/types/auth.js +1 -3
  47. package/dist/cjs/types/index.js +1 -11
  48. package/dist/cjs/types/router-config.js +1 -3
  49. package/dist/cjs/utils/arkos-env.js +1 -9
  50. package/dist/cjs/utils/cli/build.js +6 -212
  51. package/dist/cjs/utils/cli/dev.js +5 -256
  52. package/dist/cjs/utils/cli/generate.js +12 -189
  53. package/dist/cjs/utils/cli/index.js +1 -81
  54. package/dist/cjs/utils/cli/start.js +5 -94
  55. package/dist/cjs/utils/cli/utils/cli.helpers.js +1 -24
  56. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +5 -20
  57. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js +6 -15
  58. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js +38 -67
  59. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +8 -36
  60. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js +11 -36
  61. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js +7 -27
  62. package/dist/cjs/utils/cli/utils/template-generators.js +2 -28
  63. package/dist/cjs/utils/dotenv.helpers.js +1 -43
  64. package/dist/cjs/utils/features/api.features.js +1 -167
  65. package/dist/cjs/utils/features/change-case.features.js +1 -67
  66. package/dist/cjs/utils/helpers/api.features.helpers.js +1 -106
  67. package/dist/cjs/utils/helpers/change-case.helpers.js +1 -177
  68. package/dist/cjs/utils/helpers/deepmerge.helper.js +1 -115
  69. package/dist/cjs/utils/helpers/fs.helpers.js +1 -61
  70. package/dist/cjs/utils/helpers/global.helpers.js +1 -89
  71. package/dist/cjs/utils/helpers/models.helpers.js +11 -339
  72. package/dist/cjs/utils/helpers/prisma.helpers.js +1 -52
  73. package/dist/cjs/utils/helpers/query-parser.helpers.js +1 -45
  74. package/dist/cjs/utils/helpers/routers.helpers.js +1 -21
  75. package/dist/cjs/utils/helpers/text.helpers.js +1 -28
  76. package/dist/cjs/utils/prisma/enhaced-prisma-json-schema-generator.js +1 -451
  77. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +1 -88
  78. package/dist/cjs/utils/prisma/prisma-schema-parser.js +3 -158
  79. package/dist/cjs/utils/prisma/types.js +1 -3
  80. package/dist/cjs/utils/sheu.js +1 -119
  81. package/dist/cjs/utils/validate-dto.js +1 -17
  82. package/dist/cjs/utils/validate-schema.js +1 -15
  83. package/dist/esm/app.js +1 -0
  84. package/dist/esm/app.js.map +1 -0
  85. package/dist/esm/exports/auth/index.js +1 -0
  86. package/dist/esm/exports/auth/index.js.map +1 -0
  87. package/dist/esm/exports/controllers/index.js +1 -0
  88. package/dist/esm/exports/controllers/index.js.map +1 -0
  89. package/dist/esm/exports/error-handler/index.js +1 -0
  90. package/dist/esm/exports/error-handler/index.js.map +1 -0
  91. package/dist/esm/exports/index.js +1 -0
  92. package/dist/esm/exports/index.js.map +1 -0
  93. package/dist/esm/exports/middlewares/index.js +1 -0
  94. package/dist/esm/exports/middlewares/index.js.map +1 -0
  95. package/dist/esm/exports/prisma/index.js +1 -0
  96. package/dist/esm/exports/prisma/index.js.map +1 -0
  97. package/dist/esm/exports/services/index.js +1 -0
  98. package/dist/esm/exports/services/index.js.map +1 -0
  99. package/dist/esm/exports/utils/index.js +1 -0
  100. package/dist/esm/exports/utils/index.js.map +1 -0
  101. package/dist/esm/exports/validation/index.js +1 -0
  102. package/dist/esm/exports/validation/index.js.map +1 -0
  103. package/dist/esm/modules/auth/auth.controller.js +1 -0
  104. package/dist/esm/modules/auth/auth.controller.js.map +1 -0
  105. package/dist/esm/modules/auth/auth.router.js +1 -0
  106. package/dist/esm/modules/auth/auth.router.js.map +1 -0
  107. package/dist/esm/modules/auth/auth.service.js +1 -0
  108. package/dist/esm/modules/auth/auth.service.js.map +1 -0
  109. package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js +1 -0
  110. package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js.map +1 -0
  111. package/dist/esm/modules/base/base.controller.js +1 -0
  112. package/dist/esm/modules/base/base.controller.js.map +1 -0
  113. package/dist/esm/modules/base/base.middlewares.js +1 -0
  114. package/dist/esm/modules/base/base.middlewares.js.map +1 -0
  115. package/dist/esm/modules/base/base.router.js +1 -0
  116. package/dist/esm/modules/base/base.router.js.map +1 -0
  117. package/dist/esm/modules/base/base.service.js +1 -0
  118. package/dist/esm/modules/base/base.service.js.map +1 -0
  119. package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js +1 -0
  120. package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js.map +1 -0
  121. package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js +1 -0
  122. package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js.map +1 -0
  123. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js +1 -0
  124. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js.map +1 -0
  125. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +1 -0
  126. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js.map +1 -0
  127. package/dist/esm/modules/email/email.service.js +1 -0
  128. package/dist/esm/modules/email/email.service.js.map +1 -0
  129. package/dist/esm/modules/error-handler/error-handler.controller.js +4 -0
  130. package/dist/esm/modules/error-handler/error-handler.controller.js.map +1 -0
  131. package/dist/esm/modules/error-handler/utils/app-error.js +1 -0
  132. package/dist/esm/modules/error-handler/utils/app-error.js.map +1 -0
  133. package/dist/esm/modules/error-handler/utils/catch-async.js +1 -0
  134. package/dist/esm/modules/error-handler/utils/catch-async.js.map +1 -0
  135. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js +3 -0
  136. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js.map +1 -0
  137. package/dist/esm/modules/file-upload/file-upload.controller.js +1 -0
  138. package/dist/esm/modules/file-upload/file-upload.controller.js.map +1 -0
  139. package/dist/esm/modules/file-upload/file-upload.router.js +1 -0
  140. package/dist/esm/modules/file-upload/file-upload.router.js.map +1 -0
  141. package/dist/esm/modules/file-upload/file-upload.service.js +1 -0
  142. package/dist/esm/modules/file-upload/file-upload.service.js.map +1 -0
  143. package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js +1 -0
  144. package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js.map +1 -0
  145. package/dist/esm/modules/swagger/swagger.router.js +1 -0
  146. package/dist/esm/modules/swagger/swagger.router.js.map +1 -0
  147. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +1 -0
  148. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +1 -0
  149. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js +1 -0
  150. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +1 -0
  151. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -0
  152. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -0
  153. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -0
  154. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +1 -0
  155. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +1 -0
  156. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js.map +1 -0
  157. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +1 -0
  158. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js.map +1 -0
  159. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +1 -0
  160. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js.map +1 -0
  161. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js +1 -0
  162. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -0
  163. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js +1 -0
  164. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -0
  165. package/dist/esm/paths.js +1 -0
  166. package/dist/esm/paths.js.map +1 -0
  167. package/dist/esm/server.js +5 -0
  168. package/dist/esm/server.js.map +1 -0
  169. package/dist/esm/types/arkos-config.js +1 -0
  170. package/dist/esm/types/arkos-config.js.map +1 -0
  171. package/dist/esm/types/auth.js +1 -0
  172. package/dist/esm/types/auth.js.map +1 -0
  173. package/dist/esm/types/index.js +1 -0
  174. package/dist/esm/types/index.js.map +1 -0
  175. package/dist/esm/types/router-config.js +1 -0
  176. package/dist/esm/types/router-config.js.map +1 -0
  177. package/dist/esm/utils/arkos-env.js +1 -0
  178. package/dist/esm/utils/arkos-env.js.map +1 -0
  179. package/dist/esm/utils/cli/build.js +6 -0
  180. package/dist/esm/utils/cli/build.js.map +1 -0
  181. package/dist/esm/utils/cli/dev.js +5 -0
  182. package/dist/esm/utils/cli/dev.js.map +1 -0
  183. package/dist/esm/utils/cli/generate.js +12 -0
  184. package/dist/esm/utils/cli/generate.js.map +1 -0
  185. package/dist/esm/utils/cli/index.js +1 -0
  186. package/dist/esm/utils/cli/index.js.map +1 -0
  187. package/dist/esm/utils/cli/start.js +5 -0
  188. package/dist/esm/utils/cli/start.js.map +1 -0
  189. package/dist/esm/utils/cli/utils/cli.helpers.js +1 -0
  190. package/dist/esm/utils/cli/utils/cli.helpers.js.map +1 -0
  191. package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +21 -0
  192. package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js.map +1 -0
  193. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js +12 -0
  194. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +1 -0
  195. package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js +206 -0
  196. package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +1 -0
  197. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +36 -0
  198. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +1 -0
  199. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js +18 -0
  200. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js.map +1 -0
  201. package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js +15 -0
  202. package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js.map +1 -0
  203. package/dist/esm/utils/cli/utils/template-generators.js +2 -0
  204. package/dist/esm/utils/cli/utils/template-generators.js.map +1 -0
  205. package/dist/esm/utils/dotenv.helpers.js +1 -0
  206. package/dist/esm/utils/dotenv.helpers.js.map +1 -0
  207. package/dist/esm/utils/features/api.features.js +1 -0
  208. package/dist/esm/utils/features/api.features.js.map +1 -0
  209. package/dist/esm/utils/features/change-case.features.js +1 -0
  210. package/dist/esm/utils/features/change-case.features.js.map +1 -0
  211. package/dist/esm/utils/helpers/api.features.helpers.js +1 -0
  212. package/dist/esm/utils/helpers/api.features.helpers.js.map +1 -0
  213. package/dist/esm/utils/helpers/change-case.helpers.js +1 -0
  214. package/dist/esm/utils/helpers/change-case.helpers.js.map +1 -0
  215. package/dist/esm/utils/helpers/deepmerge.helper.js +1 -0
  216. package/dist/esm/utils/helpers/deepmerge.helper.js.map +1 -0
  217. package/dist/esm/utils/helpers/fs.helpers.js +1 -0
  218. package/dist/esm/utils/helpers/fs.helpers.js.map +1 -0
  219. package/dist/esm/utils/helpers/global.helpers.js +1 -0
  220. package/dist/esm/utils/helpers/global.helpers.js.map +1 -0
  221. package/dist/esm/utils/helpers/models.helpers.js +11 -0
  222. package/dist/esm/utils/helpers/models.helpers.js.map +1 -0
  223. package/dist/esm/utils/helpers/prisma.helpers.js +1 -0
  224. package/dist/esm/utils/helpers/prisma.helpers.js.map +1 -0
  225. package/dist/esm/utils/helpers/query-parser.helpers.js +1 -0
  226. package/dist/esm/utils/helpers/query-parser.helpers.js.map +1 -0
  227. package/dist/esm/utils/helpers/routers.helpers.js +1 -0
  228. package/dist/esm/utils/helpers/routers.helpers.js.map +1 -0
  229. package/dist/esm/utils/helpers/text.helpers.js +1 -0
  230. package/dist/esm/utils/helpers/text.helpers.js.map +1 -0
  231. package/dist/esm/utils/prisma/enhaced-prisma-json-schema-generator.js +1 -0
  232. package/dist/esm/utils/prisma/enhaced-prisma-json-schema-generator.js.map +1 -0
  233. package/dist/esm/utils/prisma/prisma-json-schema-generator.js +1 -0
  234. package/dist/esm/utils/prisma/prisma-json-schema-generator.js.map +1 -0
  235. package/dist/esm/utils/prisma/prisma-schema-parser.js +3 -0
  236. package/dist/esm/utils/prisma/prisma-schema-parser.js.map +1 -0
  237. package/dist/esm/utils/prisma/types.js +1 -0
  238. package/dist/esm/utils/prisma/types.js.map +1 -0
  239. package/dist/esm/utils/sheu.js +1 -0
  240. package/dist/esm/utils/sheu.js.map +1 -0
  241. package/dist/esm/utils/validate-dto.js +1 -0
  242. package/dist/esm/utils/validate-dto.js.map +1 -0
  243. package/dist/esm/utils/validate-schema.js +1 -0
  244. package/dist/esm/utils/validate-schema.js.map +1 -0
  245. package/package.json +6 -4
  246. package/dist/cjs/index.js +0 -22
  247. package/dist/esm/index.d.mts +0 -280
  248. package/dist/esm/index.mjs +0 -22
  249. package/dist/exports/index.js +0 -1
  250. package/dist/types/arkos-config.js +0 -1
  251. package/dist/types/auth.js +0 -1
  252. package/dist/types/index.js +0 -1
  253. package/dist/types/router-config.js +0 -1
  254. package/dist/utils/arkos-env.js +0 -1
  255. package/dist/utils/dotenv.helpers.js +0 -1
  256. package/dist/utils/sheu.js +0 -1
  257. package/dist/utils/validate-dto.js +0 -1
  258. package/dist/utils/validate-schema.js +0 -1
@@ -1,322 +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.getFileUploadServices = exports.FileUploadService = void 0;
7
- const multer_1 = __importDefault(require("multer"));
8
- const path_1 = __importDefault(require("path"));
9
- const fs_1 = __importDefault(require("fs"));
10
- const app_error_1 = __importDefault(require("../error-handler/utils/app-error"));
11
- const util_1 = require("util");
12
- const server_1 = require("../../server");
13
- const deepmerge_helper_1 = __importDefault(require("../../utils/helpers/deepmerge.helper"));
14
- const file_upload_helpers_1 = require("./utils/helpers/file-upload.helpers");
15
- const text_helpers_1 = require("../../utils/helpers/text.helpers");
16
- class FileUploadService {
17
- constructor(uploadDir, fileSizeLimit = 1024 * 1024 * 5, allowedFileTypes = /.*/, maxCount = 30) {
18
- this.fileFilter = (req, file, cb) => {
19
- const extName = this.allowedFileTypes.test(path_1.default.extname(file.originalname).toLowerCase());
20
- const mimeType = this.allowedFileTypes.test(file.mimetype);
21
- if (mimeType && extName) {
22
- cb(null, true);
23
- }
24
- else {
25
- cb(new app_error_1.default("Invalid file type", 400));
26
- }
27
- };
28
- uploadDir = uploadDir.startsWith("/") ? uploadDir.substring(1) : uploadDir;
29
- uploadDir = uploadDir.endsWith("/") ? uploadDir.slice(0, -1) : uploadDir;
30
- this.uploadDir = path_1.default.resolve(process.cwd(), `${uploadDir}/`);
31
- this.fileSizeLimit = fileSizeLimit;
32
- this.allowedFileTypes = allowedFileTypes;
33
- this.maxCount = maxCount;
34
- if (!fs_1.default.existsSync(this.uploadDir)) {
35
- fs_1.default.mkdirSync(this.uploadDir, { recursive: true });
36
- }
37
- this.storage = multer_1.default.diskStorage({
38
- destination: (req, file, cb) => {
39
- cb(null, this.uploadDir);
40
- },
41
- filename: (req, file, cb) => {
42
- const uniqueSuffix = Date.now() + "-" + Math.round(Math.random() * 1e9);
43
- cb(null, `${uniqueSuffix}${path_1.default.extname(file.originalname)}`);
44
- },
45
- });
46
- }
47
- getUpload() {
48
- return (0, multer_1.default)({
49
- storage: this.storage,
50
- fileFilter: this.fileFilter,
51
- limits: { fileSize: this.fileSizeLimit },
52
- });
53
- }
54
- handleSingleUpload(oldFilePath) {
55
- return (req, res, next) => {
56
- const upload = this.getUpload().single(this.getFieldName());
57
- upload(req, res, async (err) => {
58
- if (err instanceof multer_1.default.MulterError) {
59
- return next(err);
60
- }
61
- else if (err) {
62
- return next(err);
63
- }
64
- if (oldFilePath) {
65
- const { fileUpload: configs } = (0, server_1.getArkosConfig)();
66
- const filePath = path_1.default.resolve(process.cwd(), (0, text_helpers_1.removeBothSlashes)(configs?.baseUploadDir), (0, text_helpers_1.removeBothSlashes)(oldFilePath));
67
- try {
68
- const stats = await (0, util_1.promisify)(fs_1.default.stat)(filePath);
69
- if (stats)
70
- await (0, util_1.promisify)(fs_1.default.unlink)(filePath);
71
- }
72
- catch (err) {
73
- console.error(err);
74
- }
75
- }
76
- next();
77
- });
78
- };
79
- }
80
- handleMultipleUpload() {
81
- return (req, res, next) => {
82
- const upload = this.getUpload().array(this.getFieldName(), this.maxCount);
83
- upload(req, res, (err) => {
84
- if (err instanceof multer_1.default.MulterError)
85
- return next(err);
86
- else if (err)
87
- return next(err);
88
- next();
89
- });
90
- };
91
- }
92
- handleDeleteSingleFile(oldFilePath) {
93
- return async (req, res, next) => {
94
- const filePath = path_1.default.join(oldFilePath);
95
- try {
96
- const stats = await (0, util_1.promisify)(fs_1.default.stat)(filePath);
97
- if (stats) {
98
- await (0, util_1.promisify)(fs_1.default.unlink)(filePath);
99
- }
100
- }
101
- catch (err) {
102
- console.error(err);
103
- }
104
- next();
105
- };
106
- }
107
- async deleteFileByUrl(fileUrl) {
108
- try {
109
- const { fileUpload } = (0, server_1.getArkosConfig)();
110
- const baseRoute = fileUpload?.baseRoute || "/api/uploads";
111
- let urlPath;
112
- if (fileUrl.startsWith("http")) {
113
- const url = new URL(fileUrl);
114
- urlPath = url.pathname;
115
- }
116
- else {
117
- urlPath = fileUrl;
118
- }
119
- const baseRouteIndex = urlPath.indexOf(baseRoute);
120
- if (baseRouteIndex === -1) {
121
- throw new app_error_1.default("Invalid file URL: base route not found", 400);
122
- }
123
- const pathAfterBaseRoute = urlPath.substring(baseRouteIndex + baseRoute.length);
124
- const cleanPath = pathAfterBaseRoute.startsWith("/")
125
- ? pathAfterBaseRoute.substring(1)
126
- : pathAfterBaseRoute;
127
- const fileTypes = ["images", "videos", "documents", "files"];
128
- let fileType = null;
129
- let fileName = null;
130
- for (const type of fileTypes) {
131
- const typeIndex = cleanPath.indexOf(type + "/");
132
- if (typeIndex !== -1) {
133
- fileType = type;
134
- fileName = cleanPath.substring(typeIndex + type.length + 1);
135
- break;
136
- }
137
- }
138
- if (!fileType || !fileName) {
139
- throw new app_error_1.default("Unable to determine file type or file name from URL", 400);
140
- }
141
- const { documentUploadService, fileUploadService, imageUploadService, videoUploadService, } = (0, exports.getFileUploadServices)();
142
- let filePath;
143
- switch (fileType) {
144
- case "images":
145
- filePath = path_1.default.join(imageUploadService.uploadDir, fileName);
146
- break;
147
- case "videos":
148
- filePath = path_1.default.join(videoUploadService.uploadDir, fileName);
149
- break;
150
- case "documents":
151
- filePath = path_1.default.join(documentUploadService.uploadDir, fileName);
152
- break;
153
- case "files":
154
- filePath = path_1.default.join(fileUploadService.uploadDir, fileName);
155
- break;
156
- default:
157
- throw new app_error_1.default(`Unsupported file type: ${fileType}`, 400);
158
- }
159
- await (0, util_1.promisify)(fs_1.default.stat)(filePath);
160
- await (0, util_1.promisify)(fs_1.default.unlink)(filePath);
161
- return true;
162
- }
163
- catch (error) {
164
- if (error instanceof app_error_1.default) {
165
- throw error;
166
- }
167
- if (error.code === "ENOENT") {
168
- throw new app_error_1.default("File not found", 404);
169
- }
170
- throw new app_error_1.default(`Failed to delete file: ${error.message}`, 500);
171
- }
172
- }
173
- getFieldName() {
174
- let fieldName = "files";
175
- if (this.uploadDir.endsWith("images") || this.uploadDir.endsWith("images/"))
176
- fieldName = "images";
177
- if (this.uploadDir.endsWith("videos") || this.uploadDir.endsWith("videos/"))
178
- fieldName = "videos";
179
- if (this.uploadDir.endsWith("documents") ||
180
- this.uploadDir.endsWith("documents/"))
181
- fieldName = "documents";
182
- if (this.uploadDir.endsWith("files") || this.uploadDir.endsWith("files/"))
183
- fieldName = "files";
184
- return fieldName;
185
- }
186
- async upload(req, res, options = {}) {
187
- const { fileUpload } = (0, server_1.getArkosConfig)();
188
- const baseRoute = fileUpload?.baseRoute || "/api/uploads";
189
- return new Promise((resolve, reject) => {
190
- const isMultiple = Array.isArray(req.query.multiple)
191
- ? req.query.multiple[0] == "true"
192
- : req.query.multiple == "true";
193
- const uploadHandler = isMultiple
194
- ? this.getUpload().array(this.getFieldName(), this.maxCount)
195
- : this.getUpload().single(this.getFieldName());
196
- uploadHandler(req, res, async (err) => {
197
- if (err)
198
- return reject(err);
199
- try {
200
- const protocol = req.get("host")?.includes?.("localhost")
201
- ? "http"
202
- : "https";
203
- const baseURL = `${protocol}://${req.get("host")}`;
204
- const dirParts = this.uploadDir.split("/");
205
- const fileType = (this.uploadDir.endsWith("/")
206
- ? dirParts[dirParts.length - 2]
207
- : dirParts[dirParts.length - 1]) || "files";
208
- let data;
209
- if (req.files && Array.isArray(req.files) && req.files.length > 0) {
210
- const isImageUpload = this.uploadDir?.includes?.("/images");
211
- if (isImageUpload) {
212
- data = await Promise.all(req.files.map((file) => (0, file_upload_helpers_1.processImage)(req, file.path, options)));
213
- }
214
- else {
215
- data = await Promise.all(req.files.map((file) => (0, file_upload_helpers_1.processFile)(req, file.path)));
216
- }
217
- data = data.filter((url) => url !== null);
218
- }
219
- else if (req.file) {
220
- const isImageUpload = this.uploadDir?.includes?.("/images");
221
- if (isImageUpload) {
222
- data = await (0, file_upload_helpers_1.processImage)(req, req.file.path, options);
223
- }
224
- else {
225
- data = await (0, file_upload_helpers_1.processFile)(req, req.file.path);
226
- }
227
- }
228
- else {
229
- return reject(new app_error_1.default("No file uploaded", 400));
230
- }
231
- resolve(data);
232
- }
233
- catch (error) {
234
- reject(error);
235
- }
236
- });
237
- });
238
- }
239
- async deleteFileByName(fileName, fileType) {
240
- try {
241
- if (!fileType)
242
- throw new app_error_1.default("File type parameter is required", 400);
243
- const validFileTypes = ["images", "videos", "documents", "files"];
244
- if (!validFileTypes.includes(fileType)) {
245
- throw new app_error_1.default(`Invalid file type: ${fileType}. Must be one of: ${validFileTypes.join(", ")}`, 400);
246
- }
247
- const { documentUploadService, fileUploadService, imageUploadService, videoUploadService, } = (0, exports.getFileUploadServices)();
248
- let targetService;
249
- switch (fileType) {
250
- case "images":
251
- targetService = imageUploadService;
252
- break;
253
- case "videos":
254
- targetService = videoUploadService;
255
- break;
256
- case "documents":
257
- targetService = documentUploadService;
258
- break;
259
- case "files":
260
- targetService = fileUploadService;
261
- break;
262
- default:
263
- throw new app_error_1.default(`Unsupported file type: ${fileType}`, 400);
264
- }
265
- const filePath = path_1.default.join(targetService.uploadDir, fileName);
266
- await (0, util_1.promisify)(fs_1.default.stat)(filePath);
267
- await (0, util_1.promisify)(fs_1.default.unlink)(filePath);
268
- return true;
269
- }
270
- catch (error) {
271
- if (error instanceof app_error_1.default) {
272
- throw error;
273
- }
274
- if (error.code === "ENOENT") {
275
- throw new app_error_1.default("File not found", 404);
276
- }
277
- throw new app_error_1.default(`Failed to delete file: ${error.message}`, 500);
278
- }
279
- }
280
- }
281
- exports.FileUploadService = FileUploadService;
282
- const getFileUploadServices = () => {
283
- const { fileUpload } = (0, server_1.getArkosConfig)();
284
- const baseUploadDir = fileUpload?.baseUploadDir || "/uploads";
285
- const defaultRestrictions = {
286
- images: {
287
- maxCount: 30,
288
- maxSize: 1024 * 1024 * 15,
289
- 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/,
290
- },
291
- videos: {
292
- maxCount: 10,
293
- maxSize: 1024 * 1024 * 5096,
294
- 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/,
295
- },
296
- documents: {
297
- maxCount: 30,
298
- maxSize: 1024 * 1024 * 50,
299
- 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/,
300
- },
301
- files: {
302
- maxCount: 10,
303
- maxSize: 1024 * 1024 * 5096,
304
- supportedFilesRegex: /.*/,
305
- },
306
- };
307
- const restrictions = fileUpload?.restrictions
308
- ? (0, deepmerge_helper_1.default)(defaultRestrictions, fileUpload.restrictions)
309
- : defaultRestrictions;
310
- const imageUploadService = new FileUploadService(`${baseUploadDir}/images`, restrictions.images.maxSize, restrictions.images.supportedFilesRegex, restrictions.images.maxCount);
311
- const videoUploadService = new FileUploadService(`${baseUploadDir}/videos`, restrictions.videos.maxSize, restrictions.videos.supportedFilesRegex, restrictions.videos.maxCount);
312
- const documentUploadService = new FileUploadService(`${baseUploadDir}/documents`, restrictions.documents.maxSize, restrictions.documents.supportedFilesRegex, restrictions.documents.maxCount);
313
- const fileUploadService = new FileUploadService(`${baseUploadDir}/files`, restrictions.files.maxSize, restrictions.files.supportedFilesRegex, restrictions.files.maxCount);
314
- return {
315
- imageUploadService,
316
- videoUploadService,
317
- documentUploadService,
318
- fileUploadService,
319
- };
320
- };
321
- exports.getFileUploadServices = getFileUploadServices;
322
- //# sourceMappingURL=file-upload.service.js.map
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getFileUploadServices=exports.FileUploadService=void 0;const multer_1=__importDefault(require("multer")),path_1=__importDefault(require("path")),fs_1=__importDefault(require("fs")),app_error_1=__importDefault(require("../error-handler/utils/app-error")),util_1=require("util"),server_1=require("../../server"),deepmerge_helper_1=__importDefault(require("../../utils/helpers/deepmerge.helper")),file_upload_helpers_1=require("./utils/helpers/file-upload.helpers"),text_helpers_1=require("../../utils/helpers/text.helpers");class FileUploadService{constructor(e,i=1024*1024*5,t=/.*/,l=30){this.fileFilter=(a,s,o)=>{const r=this.allowedFileTypes.test(path_1.default.extname(s.originalname).toLowerCase());this.allowedFileTypes.test(s.mimetype)&&r?o(null,!0):o(new app_error_1.default("Invalid file type",400))},e=e.startsWith("/")?e.substring(1):e,e=e.endsWith("/")?e.slice(0,-1):e,this.uploadDir=path_1.default.resolve(process.cwd(),`${e}/`),this.fileSizeLimit=i,this.allowedFileTypes=t,this.maxCount=l,fs_1.default.existsSync(this.uploadDir)||fs_1.default.mkdirSync(this.uploadDir,{recursive:!0}),this.storage=multer_1.default.diskStorage({destination:(a,s,o)=>{o(null,this.uploadDir)},filename:(a,s,o)=>{const r=Date.now()+"-"+Math.round(Math.random()*1e9);o(null,`${r}${path_1.default.extname(s.originalname)}`)}})}getUpload(){return(0,multer_1.default)({storage:this.storage,fileFilter:this.fileFilter,limits:{fileSize:this.fileSizeLimit}})}handleSingleUpload(e){return(i,t,l)=>{this.getUpload().single(this.getFieldName())(i,t,async s=>{if(s instanceof multer_1.default.MulterError)return l(s);if(s)return l(s);if(e){const{fileUpload:o}=(0,server_1.getArkosConfig)(),r=path_1.default.resolve(process.cwd(),(0,text_helpers_1.removeBothSlashes)(o?.baseUploadDir),(0,text_helpers_1.removeBothSlashes)(e));try{await(0,util_1.promisify)(fs_1.default.stat)(r)&&await(0,util_1.promisify)(fs_1.default.unlink)(r)}catch(d){console.error(d)}}l()})}}handleMultipleUpload(){return(e,i,t)=>{this.getUpload().array(this.getFieldName(),this.maxCount)(e,i,a=>{if(a instanceof multer_1.default.MulterError)return t(a);if(a)return t(a);t()})}}handleDeleteSingleFile(e){return async(i,t,l)=>{const a=path_1.default.join(e);try{await(0,util_1.promisify)(fs_1.default.stat)(a)&&await(0,util_1.promisify)(fs_1.default.unlink)(a)}catch(s){console.error(s)}l()}}async deleteFileByUrl(e){try{const{fileUpload:i}=(0,server_1.getArkosConfig)(),t=i?.baseRoute||"/api/uploads";let l;e.startsWith("http")?l=new URL(e).pathname:l=e;const a=l.indexOf(t);if(a===-1)throw new app_error_1.default("Invalid file URL: base route not found",400);const s=l.substring(a+t.length),o=s.startsWith("/")?s.substring(1):s,r=["images","videos","documents","files"];let d=null,p=null;for(const m of r){const f=o.indexOf(m+"/");if(f!==-1){d=m,p=o.substring(f+m.length+1);break}}if(!d||!p)throw new app_error_1.default("Unable to determine file type or file name from URL",400);const{documentUploadService:h,fileUploadService:g,imageUploadService:c,videoUploadService:v}=(0,exports.getFileUploadServices)();let n;switch(d){case"images":n=path_1.default.join(c.uploadDir,p);break;case"videos":n=path_1.default.join(v.uploadDir,p);break;case"documents":n=path_1.default.join(h.uploadDir,p);break;case"files":n=path_1.default.join(g.uploadDir,p);break;default:throw new app_error_1.default(`Unsupported file type: ${d}`,400)}return await(0,util_1.promisify)(fs_1.default.stat)(n),await(0,util_1.promisify)(fs_1.default.unlink)(n),!0}catch(i){throw i instanceof app_error_1.default?i:i.code==="ENOENT"?new app_error_1.default("File not found",404):new app_error_1.default(`Failed to delete file: ${i.message}`,500)}}getFieldName(){let e="files";return(this.uploadDir.endsWith("images")||this.uploadDir.endsWith("images/"))&&(e="images"),(this.uploadDir.endsWith("videos")||this.uploadDir.endsWith("videos/"))&&(e="videos"),(this.uploadDir.endsWith("documents")||this.uploadDir.endsWith("documents/"))&&(e="documents"),(this.uploadDir.endsWith("files")||this.uploadDir.endsWith("files/"))&&(e="files"),e}async upload(e,i,t={}){const{fileUpload:l}=(0,server_1.getArkosConfig)(),a=l?.baseRoute||"/api/uploads";return new Promise((s,o)=>{((Array.isArray(e.query.multiple)?e.query.multiple[0]=="true":e.query.multiple=="true")?this.getUpload().array(this.getFieldName(),this.maxCount):this.getUpload().single(this.getFieldName()))(e,i,async p=>{if(p)return o(p);try{const g=`${e.get("host")?.includes?.("localhost")?"http":"https"}://${e.get("host")}`,c=this.uploadDir.split("/"),v=(this.uploadDir.endsWith("/")?c[c.length-2]:c[c.length-1])||"files";let n;if(e.files&&Array.isArray(e.files)&&e.files.length>0)this.uploadDir?.includes?.("/images")?n=await Promise.all(e.files.map(f=>(0,file_upload_helpers_1.processImage)(e,f.path,t))):n=await Promise.all(e.files.map(f=>(0,file_upload_helpers_1.processFile)(e,f.path))),n=n.filter(f=>f!==null);else if(e.file)this.uploadDir?.includes?.("/images")?n=await(0,file_upload_helpers_1.processImage)(e,e.file.path,t):n=await(0,file_upload_helpers_1.processFile)(e,e.file.path);else return o(new app_error_1.default("No file uploaded",400));s(n)}catch(h){o(h)}})})}async deleteFileByName(e,i){try{if(!i)throw new app_error_1.default("File type parameter is required",400);const t=["images","videos","documents","files"];if(!t.includes(i))throw new app_error_1.default(`Invalid file type: ${i}. Must be one of: ${t.join(", ")}`,400);const{documentUploadService:l,fileUploadService:a,imageUploadService:s,videoUploadService:o}=(0,exports.getFileUploadServices)();let r;switch(i){case"images":r=s;break;case"videos":r=o;break;case"documents":r=l;break;case"files":r=a;break;default:throw new app_error_1.default(`Unsupported file type: ${i}`,400)}const d=path_1.default.join(r.uploadDir,e);return await(0,util_1.promisify)(fs_1.default.stat)(d),await(0,util_1.promisify)(fs_1.default.unlink)(d),!0}catch(t){throw t instanceof app_error_1.default?t:t.code==="ENOENT"?new app_error_1.default("File not found",404):new app_error_1.default(`Failed to delete file: ${t.message}`,500)}}}exports.FileUploadService=FileUploadService;const getFileUploadServices=()=>{const{fileUpload:u}=(0,server_1.getArkosConfig)(),e=u?.baseUploadDir||"/uploads",i={images:{maxCount:30,maxSize:1024*1024*15,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/},videos:{maxCount:10,maxSize:1024*1024*5096,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/},documents:{maxCount:30,maxSize:1024*1024*50,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/},files:{maxCount:10,maxSize:1024*1024*5096,supportedFilesRegex:/.*/}},t=u?.restrictions?(0,deepmerge_helper_1.default)(i,u.restrictions):i,l=new FileUploadService(`${e}/images`,t.images.maxSize,t.images.supportedFilesRegex,t.images.maxCount),a=new FileUploadService(`${e}/videos`,t.videos.maxSize,t.videos.supportedFilesRegex,t.videos.maxCount),s=new FileUploadService(`${e}/documents`,t.documents.maxSize,t.documents.supportedFilesRegex,t.documents.maxCount),o=new FileUploadService(`${e}/files`,t.files.maxSize,t.files.supportedFilesRegex,t.files.maxCount);return{imageUploadService:l,videoUploadService:a,documentUploadService:s,fileUploadService:o}};exports.getFileUploadServices=getFileUploadServices;
@@ -1,97 +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.processImage = exports.processFile = void 0;
7
- exports.adjustRequestUrl = adjustRequestUrl;
8
- exports.extractRequestInfo = extractRequestInfo;
9
- const fs_1 = __importDefault(require("fs"));
10
- const path_1 = __importDefault(require("path"));
11
- const sharp_1 = __importDefault(require("sharp"));
12
- const util_1 = require("util");
13
- const server_1 = require("../../../../server");
14
- const mimetype_1 = __importDefault(require("mimetype"));
15
- const fs_helpers_1 = require("../../../../utils/helpers/fs.helpers");
16
- function adjustRequestUrl(req, _, next) {
17
- const { fileUpload } = (0, server_1.getArkosConfig)();
18
- req.url = req.url.replace(fileUpload?.baseRoute + "/" || "/api/uploads/", "/");
19
- req.url = req.url.replace(fileUpload?.baseRoute || "/api/uploads/", "/");
20
- next();
21
- }
22
- function extractRequestInfo(req) {
23
- const { fileUpload } = (0, server_1.getArkosConfig)();
24
- const protocol = req.headers["x-forwarded-proto"] === "https" ? "https" : "http";
25
- const baseURL = `${protocol}://${req.get?.("host")}`;
26
- const baseRoute = fileUpload?.baseRoute || "/api/uploads";
27
- return { baseURL, baseRoute };
28
- }
29
- const generateRelativePath = (filePath, fileType) => {
30
- const { fileUpload } = (0, server_1.getArkosConfig)();
31
- const baseUploadDir = fileUpload?.baseUploadDir || "/uploads";
32
- if (baseUploadDir.startsWith("..")) {
33
- return path_1.default.join(fileType, path_1.default.basename(filePath));
34
- }
35
- else {
36
- return (0, fs_helpers_1.fullCleanCwd)(filePath
37
- .replace(`${baseUploadDir}/`, "")
38
- .replace(`/${baseUploadDir}/`, "")
39
- .replace(`/${baseUploadDir}`, "")
40
- .replace(`${baseUploadDir}`, ""));
41
- }
42
- };
43
- const processFile = async (req, filePath) => {
44
- const { baseURL, baseRoute } = extractRequestInfo(req);
45
- const relativePath = generateRelativePath(filePath, req.params.fileType);
46
- return `${baseURL}${baseRoute === "/" ? "" : baseRoute}/${relativePath}`;
47
- };
48
- exports.processFile = processFile;
49
- const processImage = async (req, filePath, options) => {
50
- const { baseURL, baseRoute } = extractRequestInfo(req);
51
- const ext = path_1.default.extname(filePath).toLowerCase();
52
- const originalFormat = ext.replace(".", "");
53
- const outputFormat = options.format || originalFormat;
54
- if (!mimetype_1.default.lookup(ext)?.includes?.("image")) {
55
- const relativePath = generateRelativePath(filePath, req.params.fileType);
56
- return `${baseURL}${baseRoute}/${relativePath}`;
57
- }
58
- const tempName = `${path_1.default.basename(filePath, ext)}_${Date.now()}${ext}`;
59
- const tempPath = path_1.default.join(path_1.default.dirname(filePath), tempName);
60
- try {
61
- let transformer = (0, sharp_1.default)(filePath);
62
- const metadata = await transformer.metadata();
63
- if (options.resizeTo && metadata.width && metadata.height) {
64
- const targetSize = options.resizeTo;
65
- const scaleFactor = targetSize / Math.min(metadata.width, metadata.height);
66
- const newWidth = Math.round(metadata.width * scaleFactor);
67
- const newHeight = Math.round(metadata.height * scaleFactor);
68
- transformer = transformer.resize(newWidth, newHeight);
69
- }
70
- else if (options.width || options.height) {
71
- transformer = transformer.resize(options.width || null, options.height || null, {
72
- fit: "inside",
73
- });
74
- }
75
- if (outputFormat === "webp") {
76
- transformer = transformer.toFormat("webp");
77
- }
78
- else if (outputFormat === "jpeg" || outputFormat === "jpg") {
79
- transformer = transformer.toFormat("jpeg");
80
- }
81
- await transformer.toFile(tempPath);
82
- await (0, util_1.promisify)(fs_1.default.rename)(tempPath, filePath);
83
- const relativePath = generateRelativePath(filePath, req?.params.fileType);
84
- return `${baseURL}${baseRoute}/${relativePath}`;
85
- }
86
- catch (error) {
87
- try {
88
- await (0, util_1.promisify)(fs_1.default.stat)(tempPath);
89
- await (0, util_1.promisify)(fs_1.default.unlink)(tempPath);
90
- }
91
- catch (err) {
92
- }
93
- throw error;
94
- }
95
- };
96
- exports.processImage = processImage;
97
- //# sourceMappingURL=file-upload.helpers.js.map
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.processImage=exports.processFile=void 0,exports.adjustRequestUrl=adjustRequestUrl,exports.extractRequestInfo=extractRequestInfo;const fs_1=__importDefault(require("fs")),path_1=__importDefault(require("path")),sharp_1=__importDefault(require("sharp")),util_1=require("util"),server_1=require("../../../../server"),mimetype_1=__importDefault(require("mimetype")),fs_helpers_1=require("../../../../utils/helpers/fs.helpers");function adjustRequestUrl(e,a,r){const{fileUpload:t}=(0,server_1.getArkosConfig)();e.url=e.url.replace(t?.baseRoute+"/"||"/api/uploads/","/"),e.url=e.url.replace(t?.baseRoute||"/api/uploads/","/"),r()}function extractRequestInfo(e){const{fileUpload:a}=(0,server_1.getArkosConfig)(),t=`${e.headers["x-forwarded-proto"]==="https"?"https":"http"}://${e.get?.("host")}`,i=a?.baseRoute||"/api/uploads";return{baseURL:t,baseRoute:i}}const generateRelativePath=(e,a)=>{const{fileUpload:r}=(0,server_1.getArkosConfig)(),t=r?.baseUploadDir||"/uploads";return t.startsWith("..")?path_1.default.join(a,path_1.default.basename(e)):(0,fs_helpers_1.fullCleanCwd)(e.replace(`${t}/`,"").replace(`/${t}/`,"").replace(`/${t}`,"").replace(`${t}`,""))},processFile=async(e,a)=>{const{baseURL:r,baseRoute:t}=extractRequestInfo(e),i=generateRelativePath(a,e.params.fileType);return`${r}${t==="/"?"":t}/${i}`};exports.processFile=processFile;const processImage=async(e,a,r)=>{const{baseURL:t,baseRoute:i}=extractRequestInfo(e),l=path_1.default.extname(a).toLowerCase(),p=l.replace(".",""),u=r.format||p;if(!mimetype_1.default.lookup(l)?.includes?.("image")){const s=generateRelativePath(a,e.params.fileType);return`${t}${i}/${s}`}const d=`${path_1.default.basename(a,l)}_${Date.now()}${l}`,n=path_1.default.join(path_1.default.dirname(a),d);try{let s=(0,sharp_1.default)(a);const o=await s.metadata();if(r.resizeTo&&o.width&&o.height){const c=r.resizeTo/Math.min(o.width,o.height),h=Math.round(o.width*c),m=Math.round(o.height*c);s=s.resize(h,m)}else(r.width||r.height)&&(s=s.resize(r.width||null,r.height||null,{fit:"inside"}));u==="webp"?s=s.toFormat("webp"):(u==="jpeg"||u==="jpg")&&(s=s.toFormat("jpeg")),await s.toFile(n),await(0,util_1.promisify)(fs_1.default.rename)(n,a);const f=generateRelativePath(a,e?.params.fileType);return`${t}${i}/${f}`}catch(s){try{await(0,util_1.promisify)(fs_1.default.stat)(n),await(0,util_1.promisify)(fs_1.default.unlink)(n)}catch{}throw s}};exports.processImage=processImage;
@@ -1,119 +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
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.getSwaggerRouter = getSwaggerRouter;
40
- const express_1 = require("express");
41
- const scalar = __importStar(require("@scalar/express-api-reference"));
42
- const swagger_jsdoc_1 = __importDefault(require("swagger-jsdoc"));
43
- const deepmerge_helper_1 = __importDefault(require("../../utils/helpers/deepmerge.helper"));
44
- const swagger_router_helpers_1 = require("./utils/helpers/swagger.router.helpers");
45
- const text_helpers_1 = require("../../utils/helpers/text.helpers");
46
- const missing_json_schemas_generator_1 = __importDefault(require("./utils/helpers/missing-json-schemas-generator"));
47
- const swaggerRouter = (0, express_1.Router)();
48
- async function getSwaggerRouter(arkosConfig) {
49
- let defaultJsonSchemas = await (0, swagger_router_helpers_1.getOpenAPIJsonSchemasByConfigMode)(arkosConfig);
50
- const defaultModelsPaths = await (0, swagger_router_helpers_1.generatePathsForModels)(arkosConfig);
51
- defaultJsonSchemas = {
52
- ...defaultJsonSchemas,
53
- ...(await missing_json_schemas_generator_1.default.generateMissingJsonSchemas(defaultModelsPaths, defaultJsonSchemas, arkosConfig)),
54
- };
55
- const defaultSwaggerConfig = {
56
- endpoint: "/docs",
57
- mode: "prisma",
58
- strict: false,
59
- options: {
60
- definition: {
61
- openapi: "3.0.0",
62
- info: {
63
- title: "Powered By Arkos.js",
64
- version: "1.0.0",
65
- description: "This API was automatically generated by Arkos.js, read more about at www.arkosjs.com",
66
- },
67
- servers: [
68
- {
69
- url: `http://${arkosConfig.host}:${arkosConfig.port}`,
70
- description: `Local ${(0, text_helpers_1.capitalize)(process.env.NODE_ENV || "development")} Server`,
71
- },
72
- ],
73
- paths: defaultModelsPaths,
74
- components: {
75
- schemas: defaultJsonSchemas || {},
76
- securitySchemes: {
77
- BearerAuth: {
78
- type: "http",
79
- scheme: "bearer",
80
- bearerFormat: "JWT",
81
- },
82
- },
83
- },
84
- security: [],
85
- },
86
- apis: [
87
- "./src/routers/*.router.{ts,js}",
88
- "./src/modules/**/*.router.{ts,js}",
89
- ],
90
- deepLinking: true,
91
- tryItOutEnabled: true,
92
- persistAuthorization: false,
93
- },
94
- scalarApiReferenceConfiguration: {
95
- theme: "deepSpace",
96
- darkMode: true,
97
- layout: "modern",
98
- showSidebar: true,
99
- hideDownloadButton: false,
100
- metaData: {
101
- title: "Arkos.js API Documentation",
102
- description: "API documentation generated by Arkos.js",
103
- },
104
- pageTitle: "Arkos.js API Documentation",
105
- },
106
- };
107
- const swaggerConfigs = (0, deepmerge_helper_1.default)(defaultSwaggerConfig || {}, arkosConfig.swagger || {});
108
- const { definition, ...options } = swaggerConfigs?.options;
109
- const swaggerSpecification = (0, swagger_jsdoc_1.default)({
110
- definition: definition,
111
- ...options,
112
- });
113
- swaggerRouter.use(swaggerConfigs.endpoint, scalar.apiReference({
114
- content: swaggerSpecification,
115
- ...swaggerConfigs?.scalarApiReferenceConfiguration,
116
- }));
117
- return swaggerRouter;
118
- }
119
- //# sourceMappingURL=swagger.router.js.map
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getSwaggerRouter=getSwaggerRouter;const express_1=require("express"),swagger_jsdoc_1=__importDefault(require("swagger-jsdoc")),deepmerge_helper_1=__importDefault(require("../../utils/helpers/deepmerge.helper")),swagger_router_helpers_1=require("./utils/helpers/swagger.router.helpers"),text_helpers_1=require("../../utils/helpers/text.helpers"),missing_json_schemas_generator_1=__importDefault(require("./utils/helpers/missing-json-schemas-generator")),swaggerRouter=(0,express_1.Router)();async function getSwaggerRouter(e){let t=await(0,swagger_router_helpers_1.getOpenAPIJsonSchemasByConfigMode)(e);const s=await(0,swagger_router_helpers_1.generatePathsForModels)(e);t={...t,...await missing_json_schemas_generator_1.default.generateMissingJsonSchemas(s,t,e)};const o={endpoint:"/docs",mode:"prisma",strict:!1,options:{definition:{openapi:"3.0.0",info:{title:"Powered By Arkos.js",version:"1.0.0",description:"This API was automatically generated by Arkos.js, read more about at www.arkosjs.com"},servers:[{url:`http://${e.host}:${e.port}`,description:`Local ${(0,text_helpers_1.capitalize)(process.env.NODE_ENV||"development")} Server`}],paths:s,components:{schemas:t||{},securitySchemes:{BearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}},security:[]},apis:["./src/routers/*.router.{ts,js}","./src/modules/**/*.router.{ts,js}"],deepLinking:!0,tryItOutEnabled:!0,persistAuthorization:!1},scalarApiReferenceConfiguration:{theme:"deepSpace",darkMode:!0,layout:"modern",showSidebar:!0,hideDownloadButton:!1,metaData:{title:"Arkos.js API Documentation",description:"API documentation generated by Arkos.js"},pageTitle:"Arkos.js API Documentation"}},r=(0,deepmerge_helper_1.default)(o||{},e.swagger||{}),{definition:a,...n}=r?.options,i=(0,swagger_jsdoc_1.default)({definition:a,...n}),c=await new Function("path","return import(path)")("@scalar/express-api-reference");return swaggerRouter.use(r.endpoint,c.apiReference({content:i,...r?.scalarApiReferenceConfiguration})),swaggerRouter}
@@ -1 +1 @@
1
- {"version":3,"file":"swagger.router.js","sourceRoot":"","sources":["../../../../src/modules/swagger/swagger.router.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,4CA8FC;AA5GD,qCAAiC;AACjC,sEAAwD;AACxD,kEAAyC;AAEzC,4FAA6D;AAC7D,mFAGgD;AAChD,mEAA8D;AAC9D,oHAAwF;AAExF,MAAM,aAAa,GAAG,IAAA,gBAAM,GAAE,CAAC;AAExB,KAAK,UAAU,gBAAgB,CACpC,WAAwB;IAExB,IAAI,kBAAkB,GAAG,MAAM,IAAA,0DAAiC,EAAC,WAAW,CAAC,CAAC;IAC9E,MAAM,kBAAkB,GAAG,MAAM,IAAA,+CAAsB,EAAC,WAAW,CAAC,CAAC;IACrE,kBAAkB,GAAG;QACnB,GAAG,kBAAkB;QACrB,GAAG,CAAC,MAAM,wCAA0B,CAAC,0BAA0B,CAC7D,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,CACZ,CAAC;KACH,CAAC;IAEF,MAAM,oBAAoB,GAA2B;QACnD,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,UAAU,EAAE;gBACV,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE;oBACJ,KAAK,EAAE,qBAAqB;oBAC5B,OAAO,EAAE,OAAO;oBAChB,WAAW,EACT,sFAAsF;iBACzF;gBACD,OAAO,EAAE;oBACP;wBACE,GAAG,EAAE,UAAU,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,EAAE;wBACrD,WAAW,EAAE,SAAS,IAAA,yBAAU,EAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC,SAAS;qBACjF;iBACF;gBACD,KAAK,EAAE,kBAAkB;gBACzB,UAAU,EAAE;oBACV,OAAO,EAAE,kBAAkB,IAAI,EAAE;oBACjC,eAAe,EAAE;wBACf,UAAU,EAAE;4BACV,IAAI,EAAE,MAAM;4BACZ,MAAM,EAAE,QAAQ;4BAChB,YAAY,EAAE,KAAK;yBACpB;qBACF;iBACF;gBACD,QAAQ,EAAE,EAAE;aACb;YACD,IAAI,EAAE;gBACJ,gCAAgC;gBAChC,mCAAmC;aACpC;YACD,WAAW,EAAE,IAAI;YACjB,eAAe,EAAE,IAAI;YACrB,oBAAoB,EAAE,KAAK;SAC5B;QACD,+BAA+B,EAAE;YAC/B,KAAK,EAAE,WAAW;YAClB,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,QAAQ;YAChB,WAAW,EAAE,IAAI;YACjB,kBAAkB,EAAE,KAAK;YACzB,QAAQ,EAAE;gBACR,KAAK,EAAE,4BAA4B;gBACnC,WAAW,EAAE,yCAAyC;aACvD;YACD,SAAS,EAAE,4BAA4B;SACxC;KACF,CAAC;IAGF,MAAM,cAAc,GAAG,IAAA,0BAAS,EAC9B,oBAAoB,IAAI,EAAE,EAC1B,WAAW,CAAC,OAAO,IAAI,EAAE,CACA,CAAC;IAE5B,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,EAAE,GAAG,cAAc,EAAE,OAAQ,CAAC;IAG5D,MAAM,oBAAoB,GAAG,IAAA,uBAAY,EAAC;QACxC,UAAU,EAAE,UAA4C;QACxD,GAAG,OAAO;KACX,CAAC,CAAC;IAKH,aAAa,CAAC,GAAG,CACf,cAAe,CAAC,QAAS,EACzB,MAAM,CAAC,YAAY,CAAC;QAClB,OAAO,EAAE,oBAAoB;QAC7B,GAAG,cAAc,EAAE,+BAA+B;KACnD,CAAC,CACH,CAAC;IAEF,OAAO,aAAa,CAAC;AACvB,CAAC","sourcesContent":["import { Router } from \"express\";\nimport * as scalar from \"@scalar/express-api-reference\";\nimport swaggerJsdoc from \"swagger-jsdoc\";\nimport { ArkosConfig } from \"../../types/arkos-config\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\nimport {\n generatePathsForModels,\n getOpenAPIJsonSchemasByConfigMode,\n} from \"./utils/helpers/swagger.router.helpers\";\nimport { capitalize } from \"../../utils/helpers/text.helpers\";\nimport missingJsonSchemaGenerator from \"./utils/helpers/missing-json-schemas-generator\";\n\nconst swaggerRouter = Router();\n\nexport async function getSwaggerRouter(\n arkosConfig: ArkosConfig\n): Promise<Router> {\n let defaultJsonSchemas = await getOpenAPIJsonSchemasByConfigMode(arkosConfig);\n const defaultModelsPaths = await generatePathsForModels(arkosConfig);\n defaultJsonSchemas = {\n ...defaultJsonSchemas,\n ...(await missingJsonSchemaGenerator.generateMissingJsonSchemas(\n defaultModelsPaths,\n defaultJsonSchemas,\n arkosConfig\n )),\n };\n\n const defaultSwaggerConfig: ArkosConfig[\"swagger\"] = {\n endpoint: \"/docs\",\n mode: \"prisma\",\n strict: false,\n options: {\n definition: {\n openapi: \"3.0.0\",\n info: {\n title: \"Powered By Arkos.js\",\n version: \"1.0.0\",\n description:\n \"This API was automatically generated by Arkos.js, read more about at www.arkosjs.com\",\n },\n servers: [\n {\n url: `http://${arkosConfig.host}:${arkosConfig.port}`,\n description: `Local ${capitalize(process.env.NODE_ENV || \"development\")} Server`,\n },\n ],\n paths: defaultModelsPaths,\n components: {\n schemas: defaultJsonSchemas || {},\n securitySchemes: {\n BearerAuth: {\n type: \"http\",\n scheme: \"bearer\",\n bearerFormat: \"JWT\",\n },\n },\n },\n security: [],\n },\n apis: [\n \"./src/routers/*.router.{ts,js}\",\n \"./src/modules/**/*.router.{ts,js}\",\n ],\n deepLinking: true,\n tryItOutEnabled: true,\n persistAuthorization: false,\n },\n scalarApiReferenceConfiguration: {\n theme: \"deepSpace\",\n darkMode: true,\n layout: \"modern\",\n showSidebar: true,\n hideDownloadButton: false,\n metaData: {\n title: \"Arkos.js API Documentation\",\n description: \"API documentation generated by Arkos.js\",\n },\n pageTitle: \"Arkos.js API Documentation\",\n },\n };\n\n // Merge default config with user config\n const swaggerConfigs = deepmerge(\n defaultSwaggerConfig || {},\n arkosConfig.swagger || {}\n ) as ArkosConfig[\"swagger\"];\n\n const { definition, ...options } = swaggerConfigs?.options!;\n\n // Generate OpenAPI specification using swagger-jsdoc\n const swaggerSpecification = swaggerJsdoc({\n definition: definition as swaggerJsdoc.SwaggerDefinition,\n ...options,\n });\n\n // const scalar = await require(\"@scalar/express-api-reference\");\n\n // Serve Scalar API documentation\n swaggerRouter.use(\n swaggerConfigs!.endpoint!,\n scalar.apiReference({\n content: swaggerSpecification,\n ...swaggerConfigs?.scalarApiReferenceConfiguration,\n })\n );\n\n return swaggerRouter;\n}\n"]}
1
+ {"version":3,"file":"swagger.router.js","sourceRoot":"","sources":["../../../../src/modules/swagger/swagger.router.ts"],"names":[],"mappings":";;;;;AAcA,4CA+FC;AA7GD,qCAAiC;AAEjC,kEAAyC;AAEzC,4FAA6D;AAC7D,mFAGgD;AAChD,mEAA8D;AAC9D,oHAAwF;AAExF,MAAM,aAAa,GAAG,IAAA,gBAAM,GAAE,CAAC;AAExB,KAAK,UAAU,gBAAgB,CACpC,WAAwB;IAExB,IAAI,kBAAkB,GAAG,MAAM,IAAA,0DAAiC,EAAC,WAAW,CAAC,CAAC;IAC9E,MAAM,kBAAkB,GAAG,MAAM,IAAA,+CAAsB,EAAC,WAAW,CAAC,CAAC;IACrE,kBAAkB,GAAG;QACnB,GAAG,kBAAkB;QACrB,GAAG,CAAC,MAAM,wCAA0B,CAAC,0BAA0B,CAC7D,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,CACZ,CAAC;KACH,CAAC;IAEF,MAAM,oBAAoB,GAA2B;QACnD,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,UAAU,EAAE;gBACV,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE;oBACJ,KAAK,EAAE,qBAAqB;oBAC5B,OAAO,EAAE,OAAO;oBAChB,WAAW,EACT,sFAAsF;iBACzF;gBACD,OAAO,EAAE;oBACP;wBACE,GAAG,EAAE,UAAU,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,EAAE;wBACrD,WAAW,EAAE,SAAS,IAAA,yBAAU,EAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC,SAAS;qBACjF;iBACF;gBACD,KAAK,EAAE,kBAAkB;gBACzB,UAAU,EAAE;oBACV,OAAO,EAAE,kBAAkB,IAAI,EAAE;oBACjC,eAAe,EAAE;wBACf,UAAU,EAAE;4BACV,IAAI,EAAE,MAAM;4BACZ,MAAM,EAAE,QAAQ;4BAChB,YAAY,EAAE,KAAK;yBACpB;qBACF;iBACF;gBACD,QAAQ,EAAE,EAAE;aACb;YACD,IAAI,EAAE;gBACJ,gCAAgC;gBAChC,mCAAmC;aACpC;YACD,WAAW,EAAE,IAAI;YACjB,eAAe,EAAE,IAAI;YACrB,oBAAoB,EAAE,KAAK;SAC5B;QACD,+BAA+B,EAAE;YAC/B,KAAK,EAAE,WAAW;YAClB,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,QAAQ;YAChB,WAAW,EAAE,IAAI;YACjB,kBAAkB,EAAE,KAAK;YACzB,QAAQ,EAAE;gBACR,KAAK,EAAE,4BAA4B;gBACnC,WAAW,EAAE,yCAAyC;aACvD;YACD,SAAS,EAAE,4BAA4B;SACxC;KACF,CAAC;IAGF,MAAM,cAAc,GAAG,IAAA,0BAAS,EAC9B,oBAAoB,IAAI,EAAE,EAC1B,WAAW,CAAC,OAAO,IAAI,EAAE,CACA,CAAC;IAE5B,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,EAAE,GAAG,cAAc,EAAE,OAAQ,CAAC;IAG5D,MAAM,oBAAoB,GAAG,IAAA,uBAAY,EAAC;QACxC,UAAU,EAAE,UAA4C;QACxD,GAAG,OAAO;KACX,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,+BAA+B,CAAC,CAAC;IAG/D,aAAa,CAAC,GAAG,CACf,cAAe,CAAC,QAAS,EACzB,MAAM,CAAC,YAAY,CAAC;QAClB,OAAO,EAAE,oBAAoB;QAC7B,GAAG,cAAc,EAAE,+BAA+B;KACnD,CAAC,CACH,CAAC;IAEF,OAAO,aAAa,CAAC;AACvB,CAAC","sourcesContent":["import { Router } from \"express\";\n// import * as scalar from \"@scalar/express-api-reference\";\nimport swaggerJsdoc from \"swagger-jsdoc\";\nimport { ArkosConfig } from \"../../types/arkos-config\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\nimport {\n generatePathsForModels,\n getOpenAPIJsonSchemasByConfigMode,\n} from \"./utils/helpers/swagger.router.helpers\";\nimport { capitalize } from \"../../utils/helpers/text.helpers\";\nimport missingJsonSchemaGenerator from \"./utils/helpers/missing-json-schemas-generator\";\n\nconst swaggerRouter = Router();\n\nexport async function getSwaggerRouter(\n arkosConfig: ArkosConfig\n): Promise<Router> {\n let defaultJsonSchemas = await getOpenAPIJsonSchemasByConfigMode(arkosConfig);\n const defaultModelsPaths = await generatePathsForModels(arkosConfig);\n defaultJsonSchemas = {\n ...defaultJsonSchemas,\n ...(await missingJsonSchemaGenerator.generateMissingJsonSchemas(\n defaultModelsPaths,\n defaultJsonSchemas,\n arkosConfig\n )),\n };\n\n const defaultSwaggerConfig: ArkosConfig[\"swagger\"] = {\n endpoint: \"/docs\",\n mode: \"prisma\",\n strict: false,\n options: {\n definition: {\n openapi: \"3.0.0\",\n info: {\n title: \"Powered By Arkos.js\",\n version: \"1.0.0\",\n description:\n \"This API was automatically generated by Arkos.js, read more about at www.arkosjs.com\",\n },\n servers: [\n {\n url: `http://${arkosConfig.host}:${arkosConfig.port}`,\n description: `Local ${capitalize(process.env.NODE_ENV || \"development\")} Server`,\n },\n ],\n paths: defaultModelsPaths,\n components: {\n schemas: defaultJsonSchemas || {},\n securitySchemes: {\n BearerAuth: {\n type: \"http\",\n scheme: \"bearer\",\n bearerFormat: \"JWT\",\n },\n },\n },\n security: [],\n },\n apis: [\n \"./src/routers/*.router.{ts,js}\",\n \"./src/modules/**/*.router.{ts,js}\",\n ],\n deepLinking: true,\n tryItOutEnabled: true,\n persistAuthorization: false,\n },\n scalarApiReferenceConfiguration: {\n theme: \"deepSpace\",\n darkMode: true,\n layout: \"modern\",\n showSidebar: true,\n hideDownloadButton: false,\n metaData: {\n title: \"Arkos.js API Documentation\",\n description: \"API documentation generated by Arkos.js\",\n },\n pageTitle: \"Arkos.js API Documentation\",\n },\n };\n\n // Merge default config with user config\n const swaggerConfigs = deepmerge(\n defaultSwaggerConfig || {},\n arkosConfig.swagger || {}\n ) as ArkosConfig[\"swagger\"];\n\n const { definition, ...options } = swaggerConfigs?.options!;\n\n // Generate OpenAPI specification using swagger-jsdoc\n const swaggerSpecification = swaggerJsdoc({\n definition: definition as swaggerJsdoc.SwaggerDefinition,\n ...options,\n });\n\n const importFn = new Function(\"path\", \"return import(path)\");\n const scalar = await importFn(\"@scalar/express-api-reference\");\n\n // Serve Scalar API documentation\n swaggerRouter.use(\n swaggerConfigs!.endpoint!,\n scalar.apiReference({\n content: swaggerSpecification,\n ...swaggerConfigs?.scalarApiReferenceConfiguration,\n })\n );\n\n return swaggerRouter;\n}\n"]}