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.
- package/dist/cjs/app.js +1 -138
- package/dist/cjs/exports/auth/index.js +1 -6
- package/dist/cjs/exports/controllers/index.js +1 -11
- package/dist/cjs/exports/error-handler/index.js +1 -11
- package/dist/cjs/exports/index.js +1 -12
- package/dist/cjs/exports/middlewares/index.js +1 -7
- package/dist/cjs/exports/prisma/index.js +1 -6
- package/dist/cjs/exports/services/index.js +1 -49
- package/dist/cjs/exports/utils/index.js +1 -44
- package/dist/cjs/exports/validation/index.js +1 -11
- package/dist/cjs/modules/auth/auth.controller.js +1 -194
- package/dist/cjs/modules/auth/auth.router.js +1 -50
- package/dist/cjs/modules/auth/auth.service.js +1 -185
- package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +1 -83
- package/dist/cjs/modules/base/base.controller.js +1 -158
- package/dist/cjs/modules/base/base.middlewares.js +1 -92
- package/dist/cjs/modules/base/base.router.js +1 -24
- package/dist/cjs/modules/base/base.service.js +1 -128
- package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js +1 -82
- package/dist/cjs/modules/base/utils/helpers/base.middlewares.helpers.js +1 -50
- package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +1 -97
- package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +1 -171
- package/dist/cjs/modules/email/email.service.js +1 -104
- package/dist/cjs/modules/error-handler/error-handler.controller.js +4 -146
- package/dist/cjs/modules/error-handler/utils/app-error.js +1 -17
- package/dist/cjs/modules/error-handler/utils/catch-async.js +1 -12
- package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +3 -201
- package/dist/cjs/modules/file-upload/file-upload.controller.js +1 -271
- package/dist/cjs/modules/file-upload/file-upload.router.js +1 -44
- package/dist/cjs/modules/file-upload/file-upload.service.js +1 -322
- package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js +1 -97
- package/dist/cjs/modules/swagger/swagger.router.js +1 -119
- package/dist/cjs/modules/swagger/swagger.router.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +1 -270
- package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js +1 -66
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -41
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -29
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +1 -30
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +1 -471
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +1 -575
- package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +1 -253
- package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js +1 -105
- package/dist/cjs/paths.js +1 -9
- package/dist/cjs/server.js +5 -85
- package/dist/cjs/types/arkos-config.js +1 -3
- package/dist/cjs/types/auth.js +1 -3
- package/dist/cjs/types/index.js +1 -11
- package/dist/cjs/types/router-config.js +1 -3
- package/dist/cjs/utils/arkos-env.js +1 -9
- package/dist/cjs/utils/cli/build.js +6 -212
- package/dist/cjs/utils/cli/dev.js +5 -256
- package/dist/cjs/utils/cli/generate.js +12 -189
- package/dist/cjs/utils/cli/index.js +1 -81
- package/dist/cjs/utils/cli/start.js +5 -94
- package/dist/cjs/utils/cli/utils/cli.helpers.js +1 -24
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +5 -20
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js +6 -15
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js +38 -67
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +8 -36
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js +11 -36
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js +7 -27
- package/dist/cjs/utils/cli/utils/template-generators.js +2 -28
- package/dist/cjs/utils/dotenv.helpers.js +1 -43
- package/dist/cjs/utils/features/api.features.js +1 -167
- package/dist/cjs/utils/features/change-case.features.js +1 -67
- package/dist/cjs/utils/helpers/api.features.helpers.js +1 -106
- package/dist/cjs/utils/helpers/change-case.helpers.js +1 -177
- package/dist/cjs/utils/helpers/deepmerge.helper.js +1 -115
- package/dist/cjs/utils/helpers/fs.helpers.js +1 -61
- package/dist/cjs/utils/helpers/global.helpers.js +1 -89
- package/dist/cjs/utils/helpers/models.helpers.js +11 -339
- package/dist/cjs/utils/helpers/prisma.helpers.js +1 -52
- package/dist/cjs/utils/helpers/query-parser.helpers.js +1 -45
- package/dist/cjs/utils/helpers/routers.helpers.js +1 -21
- package/dist/cjs/utils/helpers/text.helpers.js +1 -28
- package/dist/cjs/utils/prisma/enhaced-prisma-json-schema-generator.js +1 -451
- package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +1 -88
- package/dist/cjs/utils/prisma/prisma-schema-parser.js +3 -158
- package/dist/cjs/utils/prisma/types.js +1 -3
- package/dist/cjs/utils/sheu.js +1 -119
- package/dist/cjs/utils/validate-dto.js +1 -17
- package/dist/cjs/utils/validate-schema.js +1 -15
- package/dist/esm/app.js +1 -0
- package/dist/esm/app.js.map +1 -0
- package/dist/esm/exports/auth/index.js +1 -0
- package/dist/esm/exports/auth/index.js.map +1 -0
- package/dist/esm/exports/controllers/index.js +1 -0
- package/dist/esm/exports/controllers/index.js.map +1 -0
- package/dist/esm/exports/error-handler/index.js +1 -0
- package/dist/esm/exports/error-handler/index.js.map +1 -0
- package/dist/esm/exports/index.js +1 -0
- package/dist/esm/exports/index.js.map +1 -0
- package/dist/esm/exports/middlewares/index.js +1 -0
- package/dist/esm/exports/middlewares/index.js.map +1 -0
- package/dist/esm/exports/prisma/index.js +1 -0
- package/dist/esm/exports/prisma/index.js.map +1 -0
- package/dist/esm/exports/services/index.js +1 -0
- package/dist/esm/exports/services/index.js.map +1 -0
- package/dist/esm/exports/utils/index.js +1 -0
- package/dist/esm/exports/utils/index.js.map +1 -0
- package/dist/esm/exports/validation/index.js +1 -0
- package/dist/esm/exports/validation/index.js.map +1 -0
- package/dist/esm/modules/auth/auth.controller.js +1 -0
- package/dist/esm/modules/auth/auth.controller.js.map +1 -0
- package/dist/esm/modules/auth/auth.router.js +1 -0
- package/dist/esm/modules/auth/auth.router.js.map +1 -0
- package/dist/esm/modules/auth/auth.service.js +1 -0
- package/dist/esm/modules/auth/auth.service.js.map +1 -0
- package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js +1 -0
- package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js.map +1 -0
- package/dist/esm/modules/base/base.controller.js +1 -0
- package/dist/esm/modules/base/base.controller.js.map +1 -0
- package/dist/esm/modules/base/base.middlewares.js +1 -0
- package/dist/esm/modules/base/base.middlewares.js.map +1 -0
- package/dist/esm/modules/base/base.router.js +1 -0
- package/dist/esm/modules/base/base.router.js.map +1 -0
- package/dist/esm/modules/base/base.service.js +1 -0
- package/dist/esm/modules/base/base.service.js.map +1 -0
- package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js +1 -0
- package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js.map +1 -0
- package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js +1 -0
- package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js.map +1 -0
- package/dist/esm/modules/base/utils/helpers/base.router.helpers.js +1 -0
- package/dist/esm/modules/base/utils/helpers/base.router.helpers.js.map +1 -0
- package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +1 -0
- package/dist/esm/modules/base/utils/helpers/base.service.helpers.js.map +1 -0
- package/dist/esm/modules/email/email.service.js +1 -0
- package/dist/esm/modules/email/email.service.js.map +1 -0
- package/dist/esm/modules/error-handler/error-handler.controller.js +4 -0
- package/dist/esm/modules/error-handler/error-handler.controller.js.map +1 -0
- package/dist/esm/modules/error-handler/utils/app-error.js +1 -0
- package/dist/esm/modules/error-handler/utils/app-error.js.map +1 -0
- package/dist/esm/modules/error-handler/utils/catch-async.js +1 -0
- package/dist/esm/modules/error-handler/utils/catch-async.js.map +1 -0
- package/dist/esm/modules/error-handler/utils/error-handler.helpers.js +3 -0
- package/dist/esm/modules/error-handler/utils/error-handler.helpers.js.map +1 -0
- package/dist/esm/modules/file-upload/file-upload.controller.js +1 -0
- package/dist/esm/modules/file-upload/file-upload.controller.js.map +1 -0
- package/dist/esm/modules/file-upload/file-upload.router.js +1 -0
- package/dist/esm/modules/file-upload/file-upload.router.js.map +1 -0
- package/dist/esm/modules/file-upload/file-upload.service.js +1 -0
- package/dist/esm/modules/file-upload/file-upload.service.js.map +1 -0
- package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js +1 -0
- package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js.map +1 -0
- package/dist/esm/modules/swagger/swagger.router.js +1 -0
- package/dist/esm/modules/swagger/swagger.router.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -0
- package/dist/esm/paths.js +1 -0
- package/dist/esm/paths.js.map +1 -0
- package/dist/esm/server.js +5 -0
- package/dist/esm/server.js.map +1 -0
- package/dist/esm/types/arkos-config.js +1 -0
- package/dist/esm/types/arkos-config.js.map +1 -0
- package/dist/esm/types/auth.js +1 -0
- package/dist/esm/types/auth.js.map +1 -0
- package/dist/esm/types/index.js +1 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/router-config.js +1 -0
- package/dist/esm/types/router-config.js.map +1 -0
- package/dist/esm/utils/arkos-env.js +1 -0
- package/dist/esm/utils/arkos-env.js.map +1 -0
- package/dist/esm/utils/cli/build.js +6 -0
- package/dist/esm/utils/cli/build.js.map +1 -0
- package/dist/esm/utils/cli/dev.js +5 -0
- package/dist/esm/utils/cli/dev.js.map +1 -0
- package/dist/esm/utils/cli/generate.js +12 -0
- package/dist/esm/utils/cli/generate.js.map +1 -0
- package/dist/esm/utils/cli/index.js +1 -0
- package/dist/esm/utils/cli/index.js.map +1 -0
- package/dist/esm/utils/cli/start.js +5 -0
- package/dist/esm/utils/cli/start.js.map +1 -0
- package/dist/esm/utils/cli/utils/cli.helpers.js +1 -0
- package/dist/esm/utils/cli/utils/cli.helpers.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +21 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js +12 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js +206 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +36 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js +18 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js +15 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generators.js +2 -0
- package/dist/esm/utils/cli/utils/template-generators.js.map +1 -0
- package/dist/esm/utils/dotenv.helpers.js +1 -0
- package/dist/esm/utils/dotenv.helpers.js.map +1 -0
- package/dist/esm/utils/features/api.features.js +1 -0
- package/dist/esm/utils/features/api.features.js.map +1 -0
- package/dist/esm/utils/features/change-case.features.js +1 -0
- package/dist/esm/utils/features/change-case.features.js.map +1 -0
- package/dist/esm/utils/helpers/api.features.helpers.js +1 -0
- package/dist/esm/utils/helpers/api.features.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/change-case.helpers.js +1 -0
- package/dist/esm/utils/helpers/change-case.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/deepmerge.helper.js +1 -0
- package/dist/esm/utils/helpers/deepmerge.helper.js.map +1 -0
- package/dist/esm/utils/helpers/fs.helpers.js +1 -0
- package/dist/esm/utils/helpers/fs.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/global.helpers.js +1 -0
- package/dist/esm/utils/helpers/global.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/models.helpers.js +11 -0
- package/dist/esm/utils/helpers/models.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/prisma.helpers.js +1 -0
- package/dist/esm/utils/helpers/prisma.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/query-parser.helpers.js +1 -0
- package/dist/esm/utils/helpers/query-parser.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/routers.helpers.js +1 -0
- package/dist/esm/utils/helpers/routers.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/text.helpers.js +1 -0
- package/dist/esm/utils/helpers/text.helpers.js.map +1 -0
- package/dist/esm/utils/prisma/enhaced-prisma-json-schema-generator.js +1 -0
- package/dist/esm/utils/prisma/enhaced-prisma-json-schema-generator.js.map +1 -0
- package/dist/esm/utils/prisma/prisma-json-schema-generator.js +1 -0
- package/dist/esm/utils/prisma/prisma-json-schema-generator.js.map +1 -0
- package/dist/esm/utils/prisma/prisma-schema-parser.js +3 -0
- package/dist/esm/utils/prisma/prisma-schema-parser.js.map +1 -0
- package/dist/esm/utils/prisma/types.js +1 -0
- package/dist/esm/utils/prisma/types.js.map +1 -0
- package/dist/esm/utils/sheu.js +1 -0
- package/dist/esm/utils/sheu.js.map +1 -0
- package/dist/esm/utils/validate-dto.js +1 -0
- package/dist/esm/utils/validate-dto.js.map +1 -0
- package/dist/esm/utils/validate-schema.js +1 -0
- package/dist/esm/utils/validate-schema.js.map +1 -0
- package/package.json +6 -4
- package/dist/cjs/index.js +0 -22
- package/dist/esm/index.d.mts +0 -280
- package/dist/esm/index.mjs +0 -22
- package/dist/exports/index.js +0 -1
- package/dist/types/arkos-config.js +0 -1
- package/dist/types/auth.js +0 -1
- package/dist/types/index.js +0 -1
- package/dist/types/router-config.js +0 -1
- package/dist/utils/arkos-env.js +0 -1
- package/dist/utils/dotenv.helpers.js +0 -1
- package/dist/utils/sheu.js +0 -1
- package/dist/utils/validate-dto.js +0 -1
- 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":"
|
|
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"]}
|