arkos 1.2.15-test → 1.2.15-test.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -14
- package/cli.js +2 -11
- package/dist/cjs/app.js +1 -1
- package/dist/cjs/app.js.map +1 -1
- 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 -124
- package/dist/cjs/modules/auth/auth.router.js.map +1 -1
- package/dist/cjs/modules/auth/auth.service.js +1 -192
- package/dist/cjs/modules/auth/auth.service.js.map +1 -1
- package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +1 -83
- package/dist/cjs/modules/base/base.controller.js +1 -159
- package/dist/cjs/modules/base/base.controller.js.map +1 -1
- package/dist/cjs/modules/base/base.middlewares.js +1 -92
- package/dist/cjs/modules/base/base.middlewares.js.map +1 -1
- package/dist/cjs/modules/base/base.router.js +1 -24
- package/dist/cjs/modules/base/base.router.js.map +1 -1
- package/dist/cjs/modules/base/base.service.js +1 -128
- package/dist/cjs/modules/base/base.service.js.map +1 -1
- 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 -167
- package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
- 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 -144
- package/dist/cjs/modules/error-handler/error-handler.controller.js.map +1 -1
- 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/catch-async.js.map +1 -1
- package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +3 -195
- package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
- package/dist/cjs/modules/file-upload/file-upload.controller.js +1 -271
- package/dist/cjs/modules/file-upload/file-upload.router.js +1 -56
- package/dist/cjs/modules/file-upload/file-upload.router.js.map +1 -1
- 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 -90
- package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js.map +1 -1
- package/dist/cjs/modules/swagger/swagger.router.js +1 -141
- 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 -0
- package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +1 -0
- package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js +1 -0
- package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js.map +1 -0
- package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js +1 -0
- package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +1 -0
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -0
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -0
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -0
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +1 -0
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +1 -0
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js.map +1 -0
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +1 -0
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js.map +1 -0
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +1 -0
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js.map +1 -0
- package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +1 -0
- package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -0
- package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js +1 -0
- package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/paths.js +1 -1
- package/dist/cjs/server.js +4 -2
- package/dist/cjs/server.js.map +1 -1
- package/dist/cjs/types/arkos-config.js +1 -3
- package/dist/cjs/types/arkos-config.js.map +1 -1
- 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 +5 -229
- package/dist/cjs/utils/cli/build.js.map +1 -1
- package/dist/cjs/utils/cli/dev.js +5 -267
- package/dist/cjs/utils/cli/dev.js.map +1 -1
- package/dist/cjs/utils/cli/generate.js +12 -189
- package/dist/cjs/utils/cli/generate.js.map +1 -1
- package/dist/cjs/utils/cli/index.js +1 -81
- package/dist/cjs/utils/cli/start.js +1 -93
- package/dist/cjs/utils/cli/start.js.map +1 -1
- package/dist/cjs/utils/cli/utils/cli.helpers.js +1 -26
- package/dist/cjs/utils/cli/utils/cli.helpers.js.map +1 -1
- 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 +71 -133
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +24 -46
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js +12 -32
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js.map +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js +7 -27
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js.map +1 -1
- package/dist/cjs/utils/cli/utils/template-generators.js +2 -28
- package/dist/cjs/utils/cli/utils/watermark-stamper.js +3 -0
- package/dist/cjs/utils/cli/utils/watermark-stamper.js.map +1 -0
- package/dist/cjs/utils/dotenv.helpers.js +1 -43
- package/dist/cjs/utils/features/api.features.js +1 -161
- package/dist/cjs/utils/features/api.features.js.map +1 -1
- package/dist/cjs/utils/features/change-case.features.js +1 -67
- package/dist/cjs/utils/features/port-and-host-allocator.js +1 -0
- package/dist/cjs/utils/features/port-and-host-allocator.js.map +1 -0
- package/dist/cjs/utils/helpers/api.features.helpers.js +1 -106
- package/dist/cjs/utils/helpers/api.features.helpers.js.map +1 -1
- 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 -54
- package/dist/cjs/utils/helpers/fs.helpers.js.map +1 -1
- package/dist/cjs/utils/helpers/global.helpers.js +1 -40
- package/dist/cjs/utils/helpers/global.helpers.js.map +1 -1
- package/dist/cjs/utils/helpers/models.helpers.js +11 -325
- package/dist/cjs/utils/helpers/models.helpers.js.map +1 -1
- package/dist/cjs/utils/helpers/prisma.helpers.js +1 -49
- package/dist/cjs/utils/helpers/prisma.helpers.js.map +1 -1
- package/dist/cjs/utils/helpers/query-parser.helpers.js +1 -45
- package/dist/cjs/utils/helpers/routers.helpers.js +1 -0
- package/dist/cjs/utils/helpers/routers.helpers.js.map +1 -0
- package/dist/cjs/utils/helpers/text.helpers.js +1 -28
- package/dist/cjs/utils/prisma/enhaced-prisma-json-schema-generator.js +1 -0
- package/dist/cjs/utils/prisma/enhaced-prisma-json-schema-generator.js.map +1 -0
- package/dist/cjs/utils/prisma/prisma-schema-parser.js +3 -0
- package/dist/cjs/utils/prisma/prisma-schema-parser.js.map +1 -0
- package/dist/cjs/utils/prisma/types.js +1 -0
- package/dist/cjs/utils/prisma/types.js.map +1 -0
- package/dist/cjs/utils/sheu.js +1 -0
- package/dist/cjs/utils/sheu.js.map +1 -0
- 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/controllers/index.js +1 -0
- package/dist/esm/exports/error-handler/index.js +1 -0
- package/dist/esm/exports/index.js +1 -0
- package/dist/esm/exports/middlewares/index.js +1 -0
- package/dist/esm/exports/prisma/index.js +1 -0
- package/dist/esm/exports/services/index.js +1 -0
- package/dist/esm/exports/utils/index.js +1 -0
- package/dist/esm/exports/validation/index.js +1 -0
- package/dist/esm/modules/auth/auth.controller.js +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/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.middlewares.helpers.js +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/email/email.service.js +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/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.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/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-swagger-default-configs.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.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-schemas.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.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/package.json +3 -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/index.js +1 -0
- package/dist/esm/types/router-config.js +1 -0
- package/dist/esm/utils/arkos-env.js +1 -0
- package/dist/esm/utils/cli/build.js +5 -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/{es2020 → esm}/utils/cli/generate.js.map +1 -1
- package/dist/esm/utils/cli/index.js +1 -0
- package/dist/esm/utils/cli/start.js +1 -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-controller-template.js +12 -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/{es2020 → esm}/utils/cli/utils/template-generator/templates/generate-service-template.js.map +1 -1
- package/dist/esm/utils/cli/utils/template-generators.js +2 -0
- package/dist/esm/utils/cli/utils/watermark-stamper.js +3 -0
- package/dist/esm/utils/cli/utils/watermark-stamper.js.map +1 -0
- package/dist/esm/utils/dotenv.helpers.js +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/port-and-host-allocator.js +1 -0
- package/dist/esm/utils/features/port-and-host-allocator.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/deepmerge.helper.js +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/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/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-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-schema.js +1 -0
- package/dist/types/modules/base/base.middlewares.d.ts +4 -4
- package/dist/types/modules/base/base.service.d.ts +1 -1
- package/dist/types/modules/base/utils/helpers/base.router.helpers.d.ts +4 -1
- package/dist/types/modules/error-handler/error-handler.controller.d.ts +1 -1
- package/dist/types/modules/error-handler/utils/catch-async.d.ts +1 -0
- package/dist/types/modules/error-handler/utils/error-handler.helpers.d.ts +4 -0
- package/dist/types/modules/file-upload/file-upload.router.d.ts +1 -1
- package/dist/types/modules/file-upload/utils/helpers/file-upload.helpers.d.ts +2 -1
- package/dist/types/modules/swagger/swagger.router.d.ts +1 -1
- package/dist/types/modules/swagger/utils/helpers/get-authentication-json-schema-paths.d.ts +4 -0
- package/dist/types/modules/swagger/utils/helpers/get-swagger-default-configs.d.ts +46 -0
- package/dist/types/modules/swagger/utils/helpers/get-system-json-schema-paths.d.ts +2 -0
- package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.d.ts +1 -0
- package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.d.ts +2 -0
- package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.d.ts +1 -0
- package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.d.ts +3 -0
- package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.d.ts +3 -0
- package/dist/types/modules/swagger/utils/helpers/missing-json-schemas-generator.d.ts +34 -0
- package/dist/types/modules/swagger/utils/helpers/swagger.router.helpers.d.ts +7 -0
- package/dist/types/server.d.ts +3 -0
- package/dist/types/types/arkos-config.d.ts +10 -5
- package/dist/types/utils/cli/utils/cli.helpers.d.ts +1 -1
- package/dist/types/utils/cli/utils/watermark-stamper.d.ts +9 -0
- package/dist/types/utils/features/api.features.d.ts +1 -0
- package/dist/types/utils/features/port-and-host-allocator.d.ts +21 -0
- package/dist/types/utils/helpers/global.helpers.d.ts +6 -1
- package/dist/types/utils/helpers/models.helpers.d.ts +31 -5
- package/dist/types/utils/helpers/routers.helpers.d.ts +2 -0
- package/dist/types/utils/prisma/enhaced-prisma-json-schema-generator.d.ts +34 -0
- package/dist/types/utils/prisma/prisma-schema-parser.d.ts +18 -0
- package/dist/types/utils/prisma/types.d.ts +48 -0
- package/dist/types/utils/sheu.d.ts +70 -0
- package/package.json +43 -41
- package/dist/es2020/app.js +0 -1
- package/dist/es2020/app.js.map +0 -1
- package/dist/es2020/exports/auth/index.js +0 -2
- package/dist/es2020/exports/controllers/index.js +0 -4
- package/dist/es2020/exports/error-handler/index.js +0 -4
- package/dist/es2020/exports/index.js +0 -8
- package/dist/es2020/exports/middlewares/index.js +0 -2
- package/dist/es2020/exports/prisma/index.js +0 -3
- package/dist/es2020/exports/services/index.js +0 -9
- package/dist/es2020/exports/utils/index.js +0 -4
- package/dist/es2020/exports/validation/index.js +0 -4
- package/dist/es2020/modules/auth/auth.controller.js +0 -187
- package/dist/es2020/modules/auth/auth.router.js +0 -118
- package/dist/es2020/modules/auth/auth.router.js.map +0 -1
- package/dist/es2020/modules/auth/auth.service.js +0 -185
- package/dist/es2020/modules/auth/auth.service.js.map +0 -1
- package/dist/es2020/modules/auth/utils/helpers/auth.controller.helpers.js +0 -73
- package/dist/es2020/modules/base/base.controller.js +0 -151
- package/dist/es2020/modules/base/base.controller.js.map +0 -1
- package/dist/es2020/modules/base/base.middlewares.js +0 -81
- package/dist/es2020/modules/base/base.middlewares.js.map +0 -1
- package/dist/es2020/modules/base/base.router.js +0 -17
- package/dist/es2020/modules/base/base.router.js.map +0 -1
- package/dist/es2020/modules/base/base.service.js +0 -120
- package/dist/es2020/modules/base/base.service.js.map +0 -1
- package/dist/es2020/modules/base/utils/helpers/base.controller.helpers.js +0 -77
- package/dist/es2020/modules/base/utils/helpers/base.middlewares.helpers.js +0 -44
- package/dist/es2020/modules/base/utils/helpers/base.router.helpers.js +0 -161
- package/dist/es2020/modules/base/utils/helpers/base.router.helpers.js.map +0 -1
- package/dist/es2020/modules/base/utils/helpers/base.service.helpers.js +0 -165
- package/dist/es2020/modules/email/email.service.js +0 -97
- package/dist/es2020/modules/error-handler/error-handler.controller.js +0 -105
- package/dist/es2020/modules/error-handler/error-handler.controller.js.map +0 -1
- package/dist/es2020/modules/error-handler/utils/app-error.js +0 -15
- package/dist/es2020/modules/error-handler/utils/catch-async.js +0 -10
- package/dist/es2020/modules/error-handler/utils/catch-async.js.map +0 -1
- package/dist/es2020/modules/error-handler/utils/error-handler.helpers.js +0 -155
- package/dist/es2020/modules/error-handler/utils/error-handler.helpers.js.map +0 -1
- package/dist/es2020/modules/file-upload/file-upload.controller.js +0 -266
- package/dist/es2020/modules/file-upload/file-upload.router.js +0 -50
- package/dist/es2020/modules/file-upload/file-upload.router.js.map +0 -1
- package/dist/es2020/modules/file-upload/file-upload.service.js +0 -314
- package/dist/es2020/modules/file-upload/utils/helpers/file-upload.helpers.js +0 -81
- package/dist/es2020/modules/file-upload/utils/helpers/file-upload.helpers.js.map +0 -1
- package/dist/es2020/modules/swagger/swagger.router.js +0 -135
- package/dist/es2020/modules/swagger/swagger.router.js.map +0 -1
- package/dist/es2020/server.js +0 -3
- package/dist/es2020/server.js.map +0 -1
- package/dist/es2020/types/arkos-config.js +0 -2
- package/dist/es2020/types/arkos-config.js.map +0 -1
- package/dist/es2020/types/auth.js +0 -2
- package/dist/es2020/types/index.js +0 -8
- package/dist/es2020/types/router-config.js +0 -2
- package/dist/es2020/utils/arkos-env.js +0 -7
- package/dist/es2020/utils/cli/build.js +0 -223
- package/dist/es2020/utils/cli/build.js.map +0 -1
- package/dist/es2020/utils/cli/dev.js +0 -260
- package/dist/es2020/utils/cli/dev.js.map +0 -1
- package/dist/es2020/utils/cli/generate.js +0 -183
- package/dist/es2020/utils/cli/index.js +0 -74
- package/dist/es2020/utils/cli/start.js +0 -86
- package/dist/es2020/utils/cli/start.js.map +0 -1
- package/dist/es2020/utils/cli/utils/cli.helpers.js +0 -18
- package/dist/es2020/utils/cli/utils/cli.helpers.js.map +0 -1
- package/dist/es2020/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +0 -33
- package/dist/es2020/utils/cli/utils/template-generator/templates/generate-controller-template.js +0 -18
- package/dist/es2020/utils/cli/utils/template-generator/templates/generate-middlewares.js +0 -265
- package/dist/es2020/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +0 -1
- package/dist/es2020/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +0 -55
- package/dist/es2020/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +0 -1
- package/dist/es2020/utils/cli/utils/template-generator/templates/generate-router-template.js +0 -32
- package/dist/es2020/utils/cli/utils/template-generator/templates/generate-router-template.js.map +0 -1
- package/dist/es2020/utils/cli/utils/template-generator/templates/generate-service-template.js +0 -32
- package/dist/es2020/utils/cli/utils/template-generators.js +0 -25
- package/dist/es2020/utils/dotenv.helpers.js +0 -37
- package/dist/es2020/utils/features/api.features.js +0 -154
- package/dist/es2020/utils/features/api.features.js.map +0 -1
- package/dist/es2020/utils/features/change-case.features.js +0 -31
- package/dist/es2020/utils/helpers/api.features.helpers.js +0 -103
- package/dist/es2020/utils/helpers/api.features.helpers.js.map +0 -1
- package/dist/es2020/utils/helpers/change-case.helpers.js +0 -161
- package/dist/es2020/utils/helpers/deepmerge.helper.js +0 -113
- package/dist/es2020/utils/helpers/fs.helpers.js +0 -45
- package/dist/es2020/utils/helpers/fs.helpers.js.map +0 -1
- package/dist/es2020/utils/helpers/global.helpers.js +0 -4
- package/dist/es2020/utils/helpers/global.helpers.js.map +0 -1
- package/dist/es2020/utils/helpers/models.helpers.js +0 -276
- package/dist/es2020/utils/helpers/models.helpers.js.map +0 -1
- package/dist/es2020/utils/helpers/prisma.helpers.js +0 -41
- package/dist/es2020/utils/helpers/prisma.helpers.js.map +0 -1
- package/dist/es2020/utils/helpers/query-parser.helpers.js +0 -40
- package/dist/es2020/utils/helpers/text.helpers.js +0 -22
- package/dist/es2020/utils/validate-dto.js +0 -11
- package/dist/es2020/utils/validate-schema.js +0 -9
- /package/dist/{es2020 → esm}/exports/auth/index.js.map +0 -0
- /package/dist/{es2020 → esm}/exports/controllers/index.js.map +0 -0
- /package/dist/{es2020 → esm}/exports/error-handler/index.js.map +0 -0
- /package/dist/{es2020 → esm}/exports/index.js.map +0 -0
- /package/dist/{es2020 → esm}/exports/middlewares/index.js.map +0 -0
- /package/dist/{es2020 → esm}/exports/prisma/index.js.map +0 -0
- /package/dist/{es2020 → esm}/exports/services/index.js.map +0 -0
- /package/dist/{es2020 → esm}/exports/utils/index.js.map +0 -0
- /package/dist/{es2020 → esm}/exports/validation/index.js.map +0 -0
- /package/dist/{es2020 → esm}/modules/auth/auth.controller.js.map +0 -0
- /package/dist/{es2020 → esm}/modules/auth/utils/helpers/auth.controller.helpers.js.map +0 -0
- /package/dist/{es2020 → esm}/modules/base/utils/helpers/base.controller.helpers.js.map +0 -0
- /package/dist/{es2020 → esm}/modules/base/utils/helpers/base.middlewares.helpers.js.map +0 -0
- /package/dist/{es2020 → esm}/modules/base/utils/helpers/base.service.helpers.js.map +0 -0
- /package/dist/{es2020 → esm}/modules/email/email.service.js.map +0 -0
- /package/dist/{es2020 → esm}/modules/error-handler/utils/app-error.js.map +0 -0
- /package/dist/{es2020 → esm}/modules/file-upload/file-upload.controller.js.map +0 -0
- /package/dist/{es2020 → esm}/modules/file-upload/file-upload.service.js.map +0 -0
- /package/dist/{es2020 → esm}/paths.js +0 -0
- /package/dist/{es2020 → esm}/paths.js.map +0 -0
- /package/dist/{es2020 → esm}/types/auth.js.map +0 -0
- /package/dist/{es2020 → esm}/types/index.js.map +0 -0
- /package/dist/{es2020 → esm}/types/router-config.js.map +0 -0
- /package/dist/{es2020 → esm}/utils/arkos-env.js.map +0 -0
- /package/dist/{es2020 → esm}/utils/cli/index.js.map +0 -0
- /package/dist/{es2020 → esm}/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js.map +0 -0
- /package/dist/{es2020 → esm}/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +0 -0
- /package/dist/{es2020 → esm}/utils/cli/utils/template-generators.js.map +0 -0
- /package/dist/{es2020 → esm}/utils/dotenv.helpers.js.map +0 -0
- /package/dist/{es2020 → esm}/utils/features/change-case.features.js.map +0 -0
- /package/dist/{es2020 → esm}/utils/helpers/change-case.helpers.js.map +0 -0
- /package/dist/{es2020 → esm}/utils/helpers/deepmerge.helper.js.map +0 -0
- /package/dist/{es2020 → esm}/utils/helpers/query-parser.helpers.js.map +0 -0
- /package/dist/{es2020 → esm}/utils/helpers/text.helpers.js.map +0 -0
- /package/dist/{es2020 → esm}/utils/validate-dto.js.map +0 -0
- /package/dist/{es2020 → esm}/utils/validate-schema.js.map +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-upload.router.js","sourceRoot":"","sources":["../../../../src/modules/file-upload/file-upload.router.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"file-upload.router.js","sourceRoot":"","sources":["../../../../src/modules/file-upload/file-upload.router.ts"],"names":[],"mappings":"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","sourcesContent":["import { Router } from \"express\";\nimport { importPrismaModelModules } from \"../../utils/helpers/models.helpers\";\nimport authService from \"../auth/auth.service\";\nimport fileUploadController from \"./file-upload.controller\";\nimport { ArkosConfig } from \"../../types/arkos-config\";\nimport path from \"path\";\nimport express from \"express\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\nimport { AuthConfigs } from \"../../types/auth\";\nimport { sendResponse } from \"../base/base.middlewares\";\nimport { processMiddleware } from \"../../utils/helpers/routers.helpers\";\nimport { adjustRequestUrl } from \"./utils/helpers/file-upload.helpers\";\n\nconst router: Router = Router();\n\nexport async function getFileUploadRouter(arkosConfig: ArkosConfig) {\n const { fileUpload } = arkosConfig;\n\n const modelModules = await importPrismaModelModules(\n \"file-upload\",\n arkosConfig\n );\n let { middlewares = {} as any, authConfigs = {} as AuthConfigs } = {};\n\n if (modelModules) {\n ({ middlewares = {}, authConfigs = {} } = modelModules);\n }\n\n let basePathname = fileUpload?.baseRoute || \"/api/uploads/\";\n\n if (!basePathname.startsWith(\"/\")) basePathname = \"/\" + basePathname;\n if (!basePathname.endsWith(\"/\")) basePathname = basePathname + \"/\";\n\n // Static file serving route\n router.get(\n `${basePathname}*`,\n authService.handleAuthenticationControl(\n \"View\",\n authConfigs.authenticationControl\n ),\n authService.handleAccessControl(\n \"View\",\n \"file-upload\",\n authConfigs.accessControl\n ),\n ...processMiddleware(middlewares?.beforeFindFile),\n adjustRequestUrl,\n express.static(\n path.resolve(process.cwd(), fileUpload?.baseUploadDir || \"uploads\"),\n deepmerge(\n {\n maxAge: \"1y\",\n etag: true,\n lastModified: true,\n dotfiles: \"ignore\",\n fallthrough: true,\n index: false,\n cacheControl: true,\n },\n fileUpload?.expressStaticOptions || {}\n )\n )\n );\n\n // POST /{basePathname}:fileType - Upload File\n router.post(\n `${basePathname}:fileType`,\n authService.handleAuthenticationControl(\n \"Create\",\n authConfigs.authenticationControl\n ),\n authService.handleAccessControl(\n \"Create\",\n \"file-upload\",\n authConfigs.accessControl\n ),\n ...processMiddleware(middlewares?.beforeUploadFile),\n fileUploadController.uploadFile,\n ...processMiddleware(middlewares?.afterUploadFile),\n sendResponse\n );\n\n // PATCH /{basePathname}:fileType/:fileName - Update File\n router.patch(\n `${basePathname}:fileType/:fileName`,\n authService.handleAuthenticationControl(\n \"Update\",\n authConfigs.authenticationControl\n ),\n authService.handleAccessControl(\n \"Update\",\n \"file-upload\",\n authConfigs.accessControl\n ),\n ...processMiddleware(middlewares?.beforeUpdateFile),\n fileUploadController.updateFile,\n ...processMiddleware(middlewares?.afterUpdateFile),\n sendResponse\n );\n\n // DELETE /{basePathname}:fileType/:fileName - Delete File\n router.delete(\n `${basePathname}:fileType/:fileName`,\n authService.handleAuthenticationControl(\n \"Delete\",\n authConfigs.authenticationControl\n ),\n authService.handleAccessControl(\n \"Delete\",\n \"file-upload\",\n authConfigs.accessControl\n ),\n ...processMiddleware(middlewares?.beforeDeleteFile),\n fileUploadController.deleteFile,\n ...processMiddleware(middlewares?.afterDeleteFile),\n sendResponse\n );\n\n return router;\n}\n"]}
|
|
@@ -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=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,90 +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.extractRequestInfo = extractRequestInfo;
|
|
8
|
-
const fs_1 = __importDefault(require("fs"));
|
|
9
|
-
const path_1 = __importDefault(require("path"));
|
|
10
|
-
const sharp_1 = __importDefault(require("sharp"));
|
|
11
|
-
const util_1 = require("util");
|
|
12
|
-
const server_1 = require("../../../../server");
|
|
13
|
-
const mimetype_1 = __importDefault(require("mimetype"));
|
|
14
|
-
const fs_helpers_1 = require("../../../../utils/helpers/fs.helpers");
|
|
15
|
-
function extractRequestInfo(req) {
|
|
16
|
-
const { fileUpload } = (0, server_1.getArkosConfig)();
|
|
17
|
-
const protocol = req.headers["x-forwarded-proto"] === "https" ? "https" : "http";
|
|
18
|
-
const baseURL = `${protocol}://${req.get?.("host")}`;
|
|
19
|
-
const baseRoute = fileUpload?.baseRoute || "/api/uploads";
|
|
20
|
-
return { baseURL, baseRoute };
|
|
21
|
-
}
|
|
22
|
-
const generateRelativePath = (filePath, fileType) => {
|
|
23
|
-
const { fileUpload } = (0, server_1.getArkosConfig)();
|
|
24
|
-
const baseUploadDir = fileUpload?.baseUploadDir || "/uploads";
|
|
25
|
-
if (baseUploadDir.startsWith("..")) {
|
|
26
|
-
return path_1.default.join(fileType, path_1.default.basename(filePath));
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
return (0, fs_helpers_1.fullCleanCwd)(filePath
|
|
30
|
-
.replace(`${baseUploadDir}/`, "")
|
|
31
|
-
.replace(`/${baseUploadDir}/`, "")
|
|
32
|
-
.replace(`/${baseUploadDir}`, "")
|
|
33
|
-
.replace(`${baseUploadDir}`, ""));
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
const processFile = async (req, filePath) => {
|
|
37
|
-
const { baseURL, baseRoute } = extractRequestInfo(req);
|
|
38
|
-
const relativePath = generateRelativePath(filePath, req.params.fileType);
|
|
39
|
-
return `${baseURL}${baseRoute === "/" ? "" : baseRoute}/${relativePath}`;
|
|
40
|
-
};
|
|
41
|
-
exports.processFile = processFile;
|
|
42
|
-
const processImage = async (req, filePath, options) => {
|
|
43
|
-
const { baseURL, baseRoute } = extractRequestInfo(req);
|
|
44
|
-
const ext = path_1.default.extname(filePath).toLowerCase();
|
|
45
|
-
const originalFormat = ext.replace(".", "");
|
|
46
|
-
const outputFormat = options.format || originalFormat;
|
|
47
|
-
if (!mimetype_1.default.lookup(ext)?.includes?.("image")) {
|
|
48
|
-
const relativePath = generateRelativePath(filePath, req.params.fileType);
|
|
49
|
-
return `${baseURL}${baseRoute}/${relativePath}`;
|
|
50
|
-
}
|
|
51
|
-
const tempName = `${path_1.default.basename(filePath, ext)}_${Date.now()}${ext}`;
|
|
52
|
-
const tempPath = path_1.default.join(path_1.default.dirname(filePath), tempName);
|
|
53
|
-
try {
|
|
54
|
-
let transformer = (0, sharp_1.default)(filePath);
|
|
55
|
-
const metadata = await transformer.metadata();
|
|
56
|
-
if (options.resizeTo && metadata.width && metadata.height) {
|
|
57
|
-
const targetSize = options.resizeTo;
|
|
58
|
-
const scaleFactor = targetSize / Math.min(metadata.width, metadata.height);
|
|
59
|
-
const newWidth = Math.round(metadata.width * scaleFactor);
|
|
60
|
-
const newHeight = Math.round(metadata.height * scaleFactor);
|
|
61
|
-
transformer = transformer.resize(newWidth, newHeight);
|
|
62
|
-
}
|
|
63
|
-
else if (options.width || options.height) {
|
|
64
|
-
transformer = transformer.resize(options.width || null, options.height || null, {
|
|
65
|
-
fit: "inside",
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
if (outputFormat === "webp") {
|
|
69
|
-
transformer = transformer.toFormat("webp");
|
|
70
|
-
}
|
|
71
|
-
else if (outputFormat === "jpeg" || outputFormat === "jpg") {
|
|
72
|
-
transformer = transformer.toFormat("jpeg");
|
|
73
|
-
}
|
|
74
|
-
await transformer.toFile(tempPath);
|
|
75
|
-
await (0, util_1.promisify)(fs_1.default.rename)(tempPath, filePath);
|
|
76
|
-
const relativePath = generateRelativePath(filePath, req?.params.fileType);
|
|
77
|
-
return `${baseURL}${baseRoute}/${relativePath}`;
|
|
78
|
-
}
|
|
79
|
-
catch (error) {
|
|
80
|
-
try {
|
|
81
|
-
await (0, util_1.promisify)(fs_1.default.stat)(tempPath);
|
|
82
|
-
await (0, util_1.promisify)(fs_1.default.unlink)(tempPath);
|
|
83
|
-
}
|
|
84
|
-
catch (err) {
|
|
85
|
-
}
|
|
86
|
-
throw error;
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
exports.processImage = processImage;
|
|
90
|
-
//# sourceMappingURL=file-upload.helpers.js.map
|
|
1
|
+
"use strict";var __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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-upload.helpers.js","sourceRoot":"","sources":["../../../../../../src/modules/file-upload/utils/helpers/file-upload.helpers.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"file-upload.helpers.js","sourceRoot":"","sources":["../../../../../../src/modules/file-upload/utils/helpers/file-upload.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport sharp from \"sharp\";\nimport { promisify } from \"util\";\nimport { getArkosConfig } from \"../../../../server\";\nimport mimetype from \"mimetype\";\nimport {\n ArkosNextFunction,\n ArkosRequest,\n ArkosResponse,\n} from \"../../../../types\";\nimport { fullCleanCwd } from \"../../../../utils/helpers/fs.helpers\";\n\nexport function adjustRequestUrl(\n req: ArkosRequest,\n _: ArkosResponse,\n next: ArkosNextFunction\n) {\n const { fileUpload } = getArkosConfig();\n req.url = req.url.replace(\n fileUpload?.baseRoute + \"/\" || \"/api/uploads/\",\n \"/\"\n );\n req.url = req.url.replace(fileUpload?.baseRoute || \"/api/uploads/\", \"/\");\n next();\n}\n\nexport function extractRequestInfo(req: ArkosRequest) {\n const { fileUpload } = getArkosConfig();\n\n // Determine the base URL for file access\n const protocol =\n req.headers[\"x-forwarded-proto\"] === \"https\" ? \"https\" : \"http\";\n const baseURL = `${protocol}://${req.get?.(\"host\")}`;\n const baseRoute = fileUpload?.baseRoute || \"/api/uploads\";\n return { baseURL, baseRoute };\n}\n\n/**\n * Generates the correct relative path regardless of upload directory location\n */\nconst generateRelativePath = (filePath: string, fileType: string) => {\n const { fileUpload } = getArkosConfig();\n\n const baseUploadDir = fileUpload?.baseUploadDir || \"/uploads\";\n if (baseUploadDir.startsWith(\"..\")) {\n // For paths outside project directory\n return path.join(fileType, path.basename(filePath));\n } else {\n // For paths within project\n return fullCleanCwd(\n filePath\n .replace(`${baseUploadDir}/`, \"\")\n .replace(`/${baseUploadDir}/`, \"\")\n .replace(`/${baseUploadDir}`, \"\")\n .replace(`${baseUploadDir}`, \"\")\n );\n }\n};\n\n/**\n * Handles basic file processing for non-image files\n */\nexport const processFile = async (\n req: ArkosRequest,\n filePath: string\n): Promise<string> => {\n const { baseURL, baseRoute } = extractRequestInfo(req);\n\n const relativePath = generateRelativePath(filePath, req.params!.fileType);\n return `${baseURL}${baseRoute === \"/\" ? \"\" : baseRoute}/${relativePath}`;\n};\n\n/**\n * Processes image files using Sharp for resizing and format conversion\n */\nexport const processImage = async (\n req: ArkosRequest,\n filePath: string,\n options: Record<string, any>\n): Promise<string | null> => {\n const { baseURL, baseRoute } = extractRequestInfo(req);\n\n const ext = path.extname(filePath).toLowerCase();\n const originalFormat = ext.replace(\".\", \"\");\n const outputFormat = options.format || originalFormat;\n\n if (!mimetype.lookup(ext)?.includes?.(\"image\")) {\n const relativePath = generateRelativePath(filePath, req.params!.fileType);\n return `${baseURL}${baseRoute}/${relativePath}`;\n }\n\n // Create a temp filename with original name + random string\n const tempName = `${path.basename(filePath, ext)}_${Date.now()}${ext}`;\n const tempPath = path.join(path.dirname(filePath), tempName);\n\n try {\n let transformer = sharp(filePath);\n const metadata = await transformer.metadata();\n\n // Apply resize transformations if requested\n if (options.resizeTo && metadata.width && metadata.height) {\n const targetSize = options.resizeTo;\n const scaleFactor =\n targetSize / Math.min(metadata.width, metadata.height);\n const newWidth = Math.round(metadata.width * scaleFactor);\n const newHeight = Math.round(metadata.height * scaleFactor);\n transformer = transformer.resize(newWidth, newHeight);\n } else if (options.width || options.height) {\n transformer = transformer.resize(\n options.width || null,\n options.height || null,\n {\n fit: \"inside\",\n }\n );\n }\n\n // Apply format transformations if requested\n if (outputFormat === \"webp\") {\n transformer = transformer.toFormat(\"webp\");\n } else if (outputFormat === \"jpeg\" || outputFormat === \"jpg\") {\n transformer = transformer.toFormat(\"jpeg\");\n }\n\n // Save to temp file first\n await transformer.toFile(tempPath);\n\n // Rename temp file to original filename\n await promisify(fs.rename)(tempPath, filePath);\n\n // Return the public URL for the file\n const relativePath = generateRelativePath(filePath, req?.params!.fileType);\n\n return `${baseURL}${baseRoute}/${relativePath}`;\n } catch (error) {\n // Clean up temp file if it exists\n try {\n await promisify(fs.stat)(tempPath);\n await promisify(fs.unlink)(tempPath);\n } catch (err) {\n // If temp file doesn't exist, no need to clean up\n }\n throw error;\n }\n};\n"]}
|