arkos 1.2.32-test → 1.3.0-beta
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 +2 -2
- 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/prisma/index.js.map +1 -1
- package/dist/cjs/exports/services/index.js +1 -49
- package/dist/cjs/exports/services/index.js.map +1 -1
- 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.controller.js.map +1 -1
- package/dist/cjs/modules/auth/auth.router.js +1 -50
- package/dist/cjs/modules/auth/auth.router.js.map +1 -1
- package/dist/cjs/modules/auth/auth.service.js +1 -185
- package/dist/cjs/modules/auth/auth.service.js.map +1 -1
- package/dist/cjs/modules/auth/utils/auth-error-objects.js +1 -0
- package/dist/cjs/modules/auth/utils/auth-error-objects.js.map +1 -0
- package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +1 -83
- package/dist/cjs/modules/auth/utils/services/auth-action.service.js +1 -0
- package/dist/cjs/modules/auth/utils/services/auth-action.service.js.map +1 -0
- package/dist/cjs/modules/base/base.controller.js +1 -158
- 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/types/base.service.types.js +1 -0
- package/dist/cjs/modules/base/types/base.service.types.js.map +1 -0
- package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js +1 -82
- package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js.map +1 -1
- 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.router.helpers.js.map +1 -1
- package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +1 -171
- package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
- package/dist/cjs/modules/base/utils/router-validator.js +1 -0
- package/dist/cjs/modules/base/utils/router-validator.js.map +1 -0
- package/dist/cjs/modules/base/utils/service-hooks-manager.js +1 -0
- package/dist/cjs/modules/base/utils/service-hooks-manager.js.map +1 -0
- 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/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/app-error.js.map +1 -1
- 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 -201
- 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.controller.js.map +1 -1
- package/dist/cjs/modules/file-upload/file-upload.router.js +1 -44
- 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/file-upload.service.js.map +1 -1
- package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js +1 -97
- package/dist/cjs/modules/swagger/swagger.router.js +1 -99
- 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 -250
- package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +1 -1
- 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 -66
- package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +1 -1
- 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-class-validator-json-schemas.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -22
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js +1 -0
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-system-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 -94
- package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -1
- package/dist/cjs/package.json +3 -0
- 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/auth.js.map +1 -1
- package/dist/cjs/types/index.js +1 -11
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/router-config.js +1 -3
- package/dist/cjs/types/router-config.js.map +1 -1
- package/dist/cjs/utils/arkos-env.js +1 -9
- package/dist/cjs/utils/cli/build.js +5 -212
- package/dist/cjs/utils/cli/build.js.map +1 -1
- package/dist/cjs/utils/cli/dev.js +3 -256
- package/dist/cjs/utils/cli/dev.js.map +1 -1
- package/dist/cjs/utils/cli/generate.js +1 -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/index.js.map +1 -1
- 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 -24
- package/dist/cjs/utils/cli/utils/smart-fs-watcher.js +1 -0
- package/dist/cjs/utils/cli/utils/smart-fs-watcher.js.map +1 -0
- 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 +9 -18
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-hooks-template.js +144 -0
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-hooks-template.js.map +1 -0
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js +156 -135
- 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 +9 -37
- 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 +11 -36
- 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 +6 -32
- 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/template-generators.js.map +1 -1
- 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/dynamic-loader.js +9 -0
- package/dist/cjs/utils/dynamic-loader.js.map +1 -0
- package/dist/cjs/utils/features/api.features.js +1 -167
- 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/dynamic-loader.helpers.js +1 -0
- package/dist/cjs/utils/helpers/dynamic-loader.helpers.js.map +1 -0
- package/dist/cjs/utils/helpers/fs.helpers.js +1 -61
- package/dist/cjs/utils/helpers/fs.helpers.js.map +1 -1
- package/dist/cjs/utils/helpers/global.helpers.js +1 -89
- package/dist/cjs/utils/helpers/global.helpers.js.map +1 -1
- package/dist/cjs/utils/helpers/prisma.helpers.js +1 -52
- 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 -21
- package/dist/cjs/utils/helpers/routers.helpers.js.map +1 -1
- package/dist/cjs/utils/helpers/text.helpers.js +1 -28
- package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +1 -0
- package/dist/cjs/utils/prisma/prisma-json-schema-generator.js.map +1 -0
- package/dist/cjs/utils/prisma/prisma-schema-parser.js +4 -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 -119
- package/dist/cjs/utils/sheu.js.map +1 -1
- package/dist/cjs/utils/validate-dto.js +1 -17
- package/dist/cjs/utils/validate-dto.js.map +1 -1
- package/dist/cjs/utils/validate-schema.js +1 -15
- package/dist/cjs/utils/validate-schema.js.map +1 -1
- package/dist/esm/app.js +1 -1
- package/dist/esm/app.js.map +1 -1
- package/dist/esm/exports/auth/index.js +1 -2
- package/dist/esm/exports/controllers/index.js +1 -4
- package/dist/esm/exports/error-handler/index.js +1 -4
- package/dist/esm/exports/index.js +1 -8
- package/dist/esm/exports/middlewares/index.js +1 -2
- package/dist/esm/exports/prisma/index.js +1 -3
- package/dist/esm/exports/prisma/index.js.map +1 -1
- package/dist/esm/exports/services/index.js +1 -9
- package/dist/esm/exports/services/index.js.map +1 -1
- package/dist/esm/exports/utils/index.js +1 -4
- package/dist/esm/exports/validation/index.js +1 -4
- package/dist/esm/modules/auth/auth.controller.js +1 -187
- package/dist/esm/modules/auth/auth.controller.js.map +1 -1
- package/dist/esm/modules/auth/auth.router.js +1 -44
- package/dist/esm/modules/auth/auth.router.js.map +1 -1
- package/dist/esm/modules/auth/auth.service.js +1 -178
- package/dist/esm/modules/auth/auth.service.js.map +1 -1
- package/dist/esm/modules/auth/utils/auth-error-objects.js +1 -0
- package/dist/esm/modules/auth/utils/auth-error-objects.js.map +1 -0
- package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js +1 -73
- package/dist/esm/modules/auth/utils/services/auth-action.service.js +1 -0
- package/dist/esm/modules/auth/utils/services/auth-action.service.js.map +1 -0
- package/dist/esm/modules/base/base.controller.js +1 -150
- package/dist/esm/modules/base/base.controller.js.map +1 -1
- package/dist/esm/modules/base/base.middlewares.js +1 -81
- package/dist/esm/modules/base/base.middlewares.js.map +1 -1
- package/dist/esm/modules/base/base.router.js +1 -17
- package/dist/esm/modules/base/base.router.js.map +1 -1
- package/dist/esm/modules/base/base.service.js +1 -120
- package/dist/esm/modules/base/base.service.js.map +1 -1
- package/dist/esm/modules/base/types/base.service.types.js +1 -0
- package/dist/esm/modules/base/types/base.service.types.js.map +1 -0
- package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js +1 -77
- package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js.map +1 -1
- package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js +1 -44
- package/dist/esm/modules/base/utils/helpers/base.router.helpers.js +1 -89
- package/dist/esm/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
- package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +1 -165
- package/dist/esm/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
- package/dist/esm/modules/base/utils/router-validator.js +1 -0
- package/dist/esm/modules/base/utils/router-validator.js.map +1 -0
- package/dist/esm/modules/base/utils/service-hooks-manager.js +1 -0
- package/dist/esm/modules/base/utils/service-hooks-manager.js.map +1 -0
- package/dist/esm/modules/email/email.service.js +1 -97
- package/dist/esm/modules/error-handler/error-handler.controller.js +4 -107
- package/dist/esm/modules/error-handler/error-handler.controller.js.map +1 -1
- package/dist/esm/modules/error-handler/utils/app-error.js +1 -15
- package/dist/esm/modules/error-handler/utils/app-error.js.map +1 -1
- package/dist/esm/modules/error-handler/utils/catch-async.js +1 -10
- package/dist/esm/modules/error-handler/utils/catch-async.js.map +1 -1
- package/dist/esm/modules/error-handler/utils/error-handler.helpers.js +3 -160
- package/dist/esm/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
- package/dist/esm/modules/file-upload/file-upload.controller.js +1 -266
- package/dist/esm/modules/file-upload/file-upload.controller.js.map +1 -1
- package/dist/esm/modules/file-upload/file-upload.router.js +1 -38
- package/dist/esm/modules/file-upload/file-upload.router.js.map +1 -1
- package/dist/esm/modules/file-upload/file-upload.service.js +1 -314
- package/dist/esm/modules/file-upload/file-upload.service.js.map +1 -1
- package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js +1 -87
- package/dist/esm/modules/swagger/swagger.router.js +1 -93
- package/dist/esm/modules/swagger/swagger.router.js.map +1 -1
- package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +1 -247
- package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +1 -1
- 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 -63
- package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +1 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -38
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -19
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +1 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-system-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 -84
- package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -1
- package/dist/esm/package.json +3 -0
- package/dist/esm/server.js +4 -2
- package/dist/esm/server.js.map +1 -1
- package/dist/esm/types/arkos-config.js +1 -2
- package/dist/esm/types/arkos-config.js.map +1 -1
- package/dist/esm/types/auth.js +1 -2
- package/dist/esm/types/auth.js.map +1 -1
- package/dist/esm/types/index.js +1 -8
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/types/router-config.js +1 -2
- package/dist/esm/types/router-config.js.map +1 -1
- package/dist/esm/utils/arkos-env.js +1 -7
- package/dist/esm/utils/cli/build.js +5 -206
- package/dist/esm/utils/cli/build.js.map +1 -1
- package/dist/esm/utils/cli/dev.js +3 -249
- package/dist/esm/utils/cli/dev.js.map +1 -1
- package/dist/esm/utils/cli/generate.js +1 -183
- package/dist/esm/utils/cli/generate.js.map +1 -1
- package/dist/esm/utils/cli/index.js +1 -74
- package/dist/esm/utils/cli/index.js.map +1 -1
- package/dist/esm/utils/cli/start.js +1 -86
- package/dist/esm/utils/cli/start.js.map +1 -1
- package/dist/esm/utils/cli/utils/cli.helpers.js +1 -16
- package/dist/esm/utils/cli/utils/smart-fs-watcher.js +1 -0
- package/dist/esm/utils/cli/utils/smart-fs-watcher.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +5 -17
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js +9 -15
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-hooks-template.js +144 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-hooks-template.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js +156 -132
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +9 -34
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js +11 -30
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js.map +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js +6 -29
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js.map +1 -1
- package/dist/esm/utils/cli/utils/template-generators.js +2 -25
- package/dist/esm/utils/cli/utils/template-generators.js.map +1 -1
- 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 -37
- package/dist/esm/utils/dynamic-loader.js +9 -0
- package/dist/esm/utils/dynamic-loader.js.map +1 -0
- package/dist/esm/utils/features/api.features.js +1 -160
- package/dist/esm/utils/features/api.features.js.map +1 -1
- package/dist/esm/utils/features/change-case.features.js +1 -31
- 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 -103
- package/dist/esm/utils/helpers/api.features.helpers.js.map +1 -1
- package/dist/esm/utils/helpers/change-case.helpers.js +1 -161
- package/dist/esm/utils/helpers/deepmerge.helper.js +1 -113
- package/dist/esm/utils/helpers/dynamic-loader.helpers.js +1 -0
- package/dist/esm/utils/helpers/dynamic-loader.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/fs.helpers.js +1 -52
- package/dist/esm/utils/helpers/fs.helpers.js.map +1 -1
- package/dist/esm/utils/helpers/global.helpers.js +1 -47
- package/dist/esm/utils/helpers/global.helpers.js.map +1 -1
- package/dist/esm/utils/helpers/prisma.helpers.js +1 -44
- package/dist/esm/utils/helpers/prisma.helpers.js.map +1 -1
- package/dist/esm/utils/helpers/query-parser.helpers.js +1 -40
- package/dist/esm/utils/helpers/routers.helpers.js +1 -16
- package/dist/esm/utils/helpers/routers.helpers.js.map +1 -1
- package/dist/esm/utils/helpers/text.helpers.js +1 -22
- 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 +4 -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 -117
- package/dist/esm/utils/sheu.js.map +1 -1
- package/dist/esm/utils/validate-dto.js +1 -11
- package/dist/esm/utils/validate-dto.js.map +1 -1
- package/dist/esm/utils/validate-schema.js +1 -9
- package/dist/esm/utils/validate-schema.js.map +1 -1
- package/dist/types/exports/prisma/index.d.ts +3 -2
- package/dist/types/exports/services/index.d.ts +3 -2
- package/dist/types/modules/auth/auth.controller.d.ts +10 -9
- package/dist/types/modules/auth/auth.service.d.ts +7 -3
- package/dist/types/modules/auth/utils/auth-error-objects.d.ts +3 -0
- package/dist/types/modules/auth/utils/services/auth-action.service.d.ts +23 -0
- package/dist/types/modules/base/base.controller.d.ts +10 -12
- package/dist/types/modules/base/base.middlewares.d.ts +4 -4
- package/dist/types/modules/base/base.service.d.ts +14 -68
- package/dist/types/modules/base/types/base.service.types.d.ts +215 -0
- package/dist/types/modules/base/utils/helpers/base.controller.helpers.d.ts +0 -2
- package/dist/types/modules/base/utils/helpers/base.router.helpers.d.ts +3 -3
- package/dist/types/modules/base/utils/helpers/base.service.helpers.d.ts +9 -2
- package/dist/types/modules/base/utils/router-validator.d.ts +5 -0
- package/dist/types/modules/base/utils/service-hooks-manager.d.ts +7 -0
- package/dist/types/modules/error-handler/error-handler.controller.d.ts +1 -1
- package/dist/types/modules/error-handler/utils/catch-async.d.ts +4 -2
- package/dist/types/modules/error-handler/utils/error-handler.helpers.d.ts +18 -17
- package/dist/types/modules/file-upload/file-upload.controller.d.ts +4 -6
- package/dist/types/modules/file-upload/file-upload.service.d.ts +4 -5
- package/dist/types/modules/swagger/utils/helpers/get-authentication-json-schema-paths.d.ts +3 -1
- package/dist/types/modules/swagger/utils/helpers/get-swagger-default-configs.d.ts +46 -0
- package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.d.ts +2 -1
- package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.d.ts +4 -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 +4 -2
- package/dist/types/server.d.ts +1 -1
- package/dist/types/types/arkos-config.d.ts +5 -3
- package/dist/types/types/auth.d.ts +7 -1
- package/dist/types/types/index.d.ts +4 -1
- package/dist/types/types/router-config.d.ts +24 -1
- package/dist/types/utils/cli/generate.d.ts +2 -1
- package/dist/types/utils/cli/utils/smart-fs-watcher.d.ts +11 -0
- package/dist/types/utils/cli/utils/template-generator/templates/generate-hooks-template.d.ts +2 -0
- package/dist/types/utils/cli/utils/watermark-stamper.d.ts +9 -0
- package/dist/types/utils/{helpers/models.helpers.d.ts → dynamic-loader.d.ts} +37 -40
- package/dist/types/utils/features/port-and-host-allocator.d.ts +21 -0
- package/dist/types/utils/helpers/dynamic-loader.helpers.d.ts +3 -0
- package/dist/types/utils/helpers/fs.helpers.d.ts +0 -4
- package/dist/types/utils/helpers/global.helpers.d.ts +1 -0
- package/dist/types/utils/helpers/prisma.helpers.d.ts +0 -1
- package/dist/types/utils/helpers/routers.helpers.d.ts +6 -2
- package/dist/types/utils/prisma/prisma-json-schema-generator.d.ts +34 -0
- package/dist/types/utils/prisma/prisma-schema-parser.d.ts +28 -0
- package/dist/types/utils/prisma/types.d.ts +49 -0
- package/dist/types/utils/sheu.d.ts +15 -15
- package/package.json +32 -18
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +0 -30
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js.map +0 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +0 -442
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js.map +0 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +0 -165
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js.map +0 -1
- package/dist/cjs/utils/helpers/models.helpers.js +0 -314
- package/dist/cjs/utils/helpers/models.helpers.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +0 -24
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +0 -436
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +0 -159
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js.map +0 -1
- package/dist/esm/utils/helpers/models.helpers.js +0 -297
- package/dist/esm/utils/helpers/models.helpers.js.map +0 -1
- package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.d.ts +0 -1
- package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.d.ts +0 -2
- package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.d.ts +0 -2
|
@@ -1,89 +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.getPackageJson = getPackageJson;
|
|
40
|
-
exports.isEsm = isEsm;
|
|
41
|
-
exports.importModule = importModule;
|
|
42
|
-
exports.detectPackageManagerFromUserAgent = detectPackageManagerFromUserAgent;
|
|
43
|
-
const fs_1 = __importDefault(require("fs"));
|
|
44
|
-
const path_1 = __importDefault(require("path"));
|
|
45
|
-
const module_1 = require("module");
|
|
46
|
-
const url_1 = require("url");
|
|
47
|
-
function getPackageJson() {
|
|
48
|
-
try {
|
|
49
|
-
const pkgPath = path_1.default.join(process.cwd(), "package.json");
|
|
50
|
-
if (fs_1.default.existsSync(pkgPath)) {
|
|
51
|
-
return JSON.parse(fs_1.default.readFileSync(pkgPath, "utf8"));
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
catch (err) {
|
|
55
|
-
console.error("Error checking package.json:", err);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
function isEsm() {
|
|
59
|
-
const pkg = getPackageJson();
|
|
60
|
-
return pkg?.type === "module";
|
|
61
|
-
}
|
|
62
|
-
async function importModule(modulePath, options = { fixExtension: true }) {
|
|
63
|
-
if (!options.fixExtension || modulePath.endsWith(".ts") || !isEsm())
|
|
64
|
-
return await Promise.resolve(`${modulePath}`).then(s => __importStar(require(s)));
|
|
65
|
-
const userRequire = (0, module_1.createRequire)((0, url_1.pathToFileURL)(process.cwd() + "/package.json"));
|
|
66
|
-
const resolved = userRequire.resolve(modulePath);
|
|
67
|
-
return await Promise.resolve(`${(0, url_1.pathToFileURL)(resolved)}`).then(s => __importStar(require(s)));
|
|
68
|
-
}
|
|
69
|
-
function detectPackageManagerFromUserAgent() {
|
|
70
|
-
const userAgent = process.env.npm_config_user_agent || "";
|
|
71
|
-
if (!userAgent)
|
|
72
|
-
return "npm";
|
|
73
|
-
if (userAgent.includes("cnpm"))
|
|
74
|
-
return "cnpm";
|
|
75
|
-
if (userAgent.includes("pnpm"))
|
|
76
|
-
return "pnpm";
|
|
77
|
-
if (userAgent.includes("yarn"))
|
|
78
|
-
return "yarn";
|
|
79
|
-
if (userAgent.includes("npm"))
|
|
80
|
-
return "npm";
|
|
81
|
-
if (userAgent.includes("bun"))
|
|
82
|
-
return "bun";
|
|
83
|
-
if (userAgent.includes("corepack"))
|
|
84
|
-
return "corepack";
|
|
85
|
-
if (userAgent.includes("deno"))
|
|
86
|
-
return "deno";
|
|
87
|
-
return "npm";
|
|
88
|
-
}
|
|
89
|
-
//# sourceMappingURL=global.helpers.js.map
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,n,t){t===void 0&&(t=n);var i=Object.getOwnPropertyDescriptor(r,n);(!i||("get"in i?!r.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return r[n]}}),Object.defineProperty(e,t,i)}:function(e,r,n,t){t===void 0&&(t=n),e[t]=r[n]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,r){Object.defineProperty(e,"default",{enumerable:!0,value:r})}:function(e,r){e.default=r}),__importStar=this&&this.__importStar||function(){var e=function(r){return e=Object.getOwnPropertyNames||function(n){var t=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[t.length]=i);return t},e(r)};return function(r){if(r&&r.__esModule)return r;var n={};if(r!=null)for(var t=e(r),i=0;i<t.length;i++)t[i]!=="default"&&__createBinding(n,r,t[i]);return __setModuleDefault(n,r),n}}(),__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getPackageJson=getPackageJson,exports.isEsm=isEsm,exports.importModule=importModule,exports.importEsmPreventingTsTransformation=importEsmPreventingTsTransformation,exports.detectPackageManagerFromUserAgent=detectPackageManagerFromUserAgent;const fs_1=__importDefault(require("fs")),path_1=__importDefault(require("path")),module_1=require("module"),url_1=require("url");function getPackageJson(){try{const e=path_1.default.join(process.cwd(),"package.json");if(fs_1.default.existsSync(e))return JSON.parse(fs_1.default.readFileSync(e,"utf8"))}catch(e){console.error("Error checking package.json:",e)}}function isEsm(){return getPackageJson()?.type==="module"}const userRequire=(0,module_1.createRequire)((0,url_1.pathToFileURL)(process.cwd()+"/package.json"));async function importModule(e,r={fixExtension:!0}){if(!r.fixExtension||e.endsWith(".ts")||!isEsm())return await Promise.resolve(`${e}`).then(t=>__importStar(require(t)));const n=userRequire.resolve(e);return await Promise.resolve(`${(0,url_1.pathToFileURL)(n)}`).then(t=>__importStar(require(t)))}async function importEsmPreventingTsTransformation(e){return await new Function("path","return import(path)")(e)}function detectPackageManagerFromUserAgent(){const e=process.env.npm_config_user_agent||"";return e?e.includes("cnpm")?"cnpm":e.includes("pnpm")?"pnpm":e.includes("yarn")?"yarn":e.includes("npm")?"npm":e.includes("bun")?"bun":e.includes("corepack")?"corepack":e.includes("deno")?"deno":"npm":"npm"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/global.helpers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"global.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/global.helpers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,wCASC;AAED,sBAGC;AAOD,oCASC;AAKD,kFAGC;AAQD,8EAaC;AAhED,4CAAoB;AACpB,gDAAwB;AACxB,mCAAuC;AACvC,6BAAoC;AAEpC,SAAgB,cAAc;IAC5B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;QACzD,IAAI,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED,SAAgB,KAAK;IACnB,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;IAC7B,OAAO,GAAG,EAAE,IAAI,KAAK,QAAQ,CAAC;AAChC,CAAC;AAGD,MAAM,WAAW,GAAG,IAAA,sBAAa,EAC/B,IAAA,mBAAa,EAAC,OAAO,CAAC,GAAG,EAAE,GAAG,eAAe,CAAC,CAC/C,CAAC;AAEK,KAAK,UAAU,YAAY,CAChC,UAAkB,EAClB,UAAqC,EAAE,YAAY,EAAE,IAAI,EAAE;IAE3D,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE;QACjE,OAAO,yBAAa,UAAU,uCAAC,CAAC;IAElC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACjD,OAAO,yBAAa,IAAA,mBAAa,EAAC,QAAQ,CAAQ,uCAAC,CAAC;AACtD,CAAC;AAKM,KAAK,UAAU,mCAAmC,CAAC,IAAY;IACpE,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAC7D,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAQD,SAAgB,iCAAiC;IAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC;IAE1D,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7B,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC9C,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC9C,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC9C,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IACtD,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAE9C,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport { createRequire } from \"module\";\nimport { pathToFileURL } from \"url\";\n\nexport function getPackageJson() {\n try {\n const pkgPath = path.join(process.cwd(), \"package.json\");\n if (fs.existsSync(pkgPath)) {\n return JSON.parse(fs.readFileSync(pkgPath, \"utf8\"));\n }\n } catch (err) {\n console.error(\"Error checking package.json:\", err);\n }\n}\n\nexport function isEsm() {\n const pkg = getPackageJson();\n return pkg?.type === \"module\";\n}\n\n// When importing user modules: mainly on ESM environment\nconst userRequire = createRequire(\n pathToFileURL(process.cwd() + \"/package.json\")\n);\n\nexport async function importModule(\n modulePath: string,\n options: { fixExtension: boolean } = { fixExtension: true }\n) {\n if (!options.fixExtension || modulePath.endsWith(\".ts\") || !isEsm())\n return await import(modulePath);\n\n const resolved = userRequire.resolve(modulePath);\n return await import(pathToFileURL(resolved) as any);\n}\n\n/**\n * This one was written for escaping esModules when imported on cjs\n */\nexport async function importEsmPreventingTsTransformation(path: string) {\n const importFn = new Function(\"path\", \"return import(path)\");\n return await importFn(path);\n}\n\n/**\n * Helps getting the current package manager from user agent\n *\n * @returns {string} the package manager\n * @default \"npm\"\n */\nexport function detectPackageManagerFromUserAgent(): string {\n const userAgent = process.env.npm_config_user_agent || \"\";\n\n if (!userAgent) return \"npm\";\n if (userAgent.includes(\"cnpm\")) return \"cnpm\";\n if (userAgent.includes(\"pnpm\")) return \"pnpm\";\n if (userAgent.includes(\"yarn\")) return \"yarn\";\n if (userAgent.includes(\"npm\")) return \"npm\";\n if (userAgent.includes(\"bun\")) return \"bun\";\n if (userAgent.includes(\"corepack\")) return \"corepack\";\n if (userAgent.includes(\"deno\")) return \"deno\";\n\n return \"npm\";\n}\n"]}
|
|
@@ -1,52 +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.checkDatabaseConnection = exports.prismaInstance = void 0;
|
|
7
|
-
exports.loadPrismaModule = loadPrismaModule;
|
|
8
|
-
exports.getPrismaInstance = getPrismaInstance;
|
|
9
|
-
const fs_1 = __importDefault(require("fs"));
|
|
10
|
-
const catch_async_1 = __importDefault(require("../../modules/error-handler/utils/catch-async"));
|
|
11
|
-
const app_error_1 = __importDefault(require("../../modules/error-handler/utils/app-error"));
|
|
12
|
-
const fs_helpers_1 = require("./fs.helpers");
|
|
13
|
-
const global_helpers_1 = require("./global.helpers");
|
|
14
|
-
exports.prismaInstance = null;
|
|
15
|
-
async function loadPrismaModule() {
|
|
16
|
-
if (!exports.prismaInstance) {
|
|
17
|
-
try {
|
|
18
|
-
let prismaPath = `${(0, fs_helpers_1.crd)()}/src/utils/prisma.${(0, fs_helpers_1.getUserFileExtension)()}`;
|
|
19
|
-
if (!fs_1.default.existsSync(prismaPath))
|
|
20
|
-
prismaPath = `${(0, fs_helpers_1.crd)()}/src/utils/prisma/index.${(0, fs_helpers_1.getUserFileExtension)()}`;
|
|
21
|
-
if (!fs_1.default.existsSync(prismaPath))
|
|
22
|
-
throw new Error("Could not found exported prisma insteance");
|
|
23
|
-
const prismaModule = await (0, global_helpers_1.importModule)(prismaPath, {
|
|
24
|
-
fixExtension: false,
|
|
25
|
-
});
|
|
26
|
-
exports.prismaInstance = prismaModule.default || prismaModule.prisma;
|
|
27
|
-
if (!exports.prismaInstance)
|
|
28
|
-
throw new Error("Prisma not found");
|
|
29
|
-
}
|
|
30
|
-
catch (error) {
|
|
31
|
-
if (error.message === "Prisma not found")
|
|
32
|
-
throw new app_error_1.default(`Could not initialize Prisma module. Make sure your prisma instance is exported under src/utils/prisma.${(0, fs_helpers_1.getUserFileExtension)()} or src/utils/prisma/index.${(0, fs_helpers_1.getUserFileExtension)()}, read more about Arkos' Project Structure under https://www.arkosjs.com/docs/project-structure#root-structure`, 500, {}, "PrismaInstanceNotFound");
|
|
33
|
-
throw error;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return exports.prismaInstance;
|
|
37
|
-
}
|
|
38
|
-
function getPrismaInstance() {
|
|
39
|
-
return exports.prismaInstance;
|
|
40
|
-
}
|
|
41
|
-
exports.checkDatabaseConnection = (0, catch_async_1.default)(async (req, res, next) => {
|
|
42
|
-
const prisma = await loadPrismaModule();
|
|
43
|
-
try {
|
|
44
|
-
await prisma.$connect();
|
|
45
|
-
next();
|
|
46
|
-
}
|
|
47
|
-
catch (error) {
|
|
48
|
-
console.error("Database connection error", error.message);
|
|
49
|
-
next(new app_error_1.default(error.message, 503));
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
//# sourceMappingURL=prisma.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.prismaInstance=void 0,exports.loadPrismaModule=loadPrismaModule,exports.getPrismaInstance=getPrismaInstance;const fs_1=__importDefault(require("fs")),app_error_1=__importDefault(require("../../modules/error-handler/utils/app-error")),fs_helpers_1=require("./fs.helpers"),global_helpers_1=require("./global.helpers");exports.prismaInstance=null;async function loadPrismaModule(){if(!exports.prismaInstance)try{let e=`${(0,fs_helpers_1.crd)()}/src/utils/prisma.${(0,fs_helpers_1.getUserFileExtension)()}`;if(fs_1.default.existsSync(e)||(e=`${(0,fs_helpers_1.crd)()}/src/utils/prisma/index.${(0,fs_helpers_1.getUserFileExtension)()}`),!fs_1.default.existsSync(e))throw new Error(`Could not found exported prisma insteance at ${e}`);const r=await(0,global_helpers_1.importModule)(e,{fixExtension:!1});if(exports.prismaInstance=r.default||r.prisma,!exports.prismaInstance)throw new Error("Prisma not found")}catch(e){throw e.message==="Prisma not found"?new app_error_1.default(`Could not initialize Prisma module. Make sure your prisma instance is exported under src/utils/prisma.${(0,fs_helpers_1.getUserFileExtension)()} or src/utils/prisma/index.${(0,fs_helpers_1.getUserFileExtension)()}, read more about Arkos.js Project Structure under https://www.arkosjs.com/docs/getting-started/project-structure#utilities-directory`,500,{},"PrismaInstanceNotFound"):e}return exports.prismaInstance}function getPrismaInstance(){return exports.prismaInstance}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prisma.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/prisma.helpers.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"prisma.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/prisma.helpers.ts"],"names":[],"mappings":";;;;;;AAOA,4CA+BC;AAED,8CAEC;AA1CD,4CAAoB;AACpB,4FAAmE;AACnE,6CAAgE;AAChE,qDAAgD;AAErC,QAAA,cAAc,GAAQ,IAAI,CAAC;AAE/B,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC,sBAAc,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,UAAU,GAAG,GAAG,IAAA,gBAAG,GAAE,qBAAqB,IAAA,iCAAG,GAAE,EAAE,CAAC;YAEtD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC;gBAC5B,UAAU,GAAG,GAAG,IAAA,gBAAG,GAAE,2BAA2B,IAAA,iCAAG,GAAE,EAAE,CAAC;YAE1D,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC;gBAC5B,MAAM,IAAI,KAAK,CACb,gDAAgD,UAAU,EAAE,CAC7D,CAAC;YAEJ,MAAM,YAAY,GAAG,MAAM,IAAA,6BAAY,EAAC,UAAU,EAAE;gBAClD,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;YACH,sBAAc,GAAG,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC;YAE7D,IAAI,CAAC,sBAAc;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,OAAO,KAAK,kBAAkB;gBACtC,MAAM,IAAI,mBAAQ,CAChB,yGAAyG,IAAA,iCAAG,GAAE,8BAA8B,IAAA,iCAAG,GAAE,uIAAuI,EACxR,GAAG,EACH,EAAE,EACF,wBAAwB,CACzB,CAAC;YACJ,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,sBAAc,CAAC;AACxB,CAAC;AAED,SAAgB,iBAAiB;IAC/B,OAAO,sBAAc,CAAC;AACxB,CAAC","sourcesContent":["import fs from \"fs\";\nimport AppError from \"../../modules/error-handler/utils/app-error\";\nimport { crd, getUserFileExtension as ext } from \"./fs.helpers\";\nimport { importModule } from \"./global.helpers\";\n\nexport let prismaInstance: any = null;\n\nexport async function loadPrismaModule() {\n if (!prismaInstance) {\n try {\n let prismaPath = `${crd()}/src/utils/prisma.${ext()}`;\n\n if (!fs.existsSync(prismaPath))\n prismaPath = `${crd()}/src/utils/prisma/index.${ext()}`;\n\n if (!fs.existsSync(prismaPath))\n throw new Error(\n `Could not found exported prisma insteance at ${prismaPath}`\n );\n\n const prismaModule = await importModule(prismaPath, {\n fixExtension: false,\n });\n prismaInstance = prismaModule.default || prismaModule.prisma;\n\n if (!prismaInstance) throw new Error(\"Prisma not found\");\n } catch (error: any) {\n if (error.message === \"Prisma not found\")\n throw new AppError(\n `Could not initialize Prisma module. Make sure your prisma instance is exported under src/utils/prisma.${ext()} or src/utils/prisma/index.${ext()}, read more about Arkos.js Project Structure under https://www.arkosjs.com/docs/getting-started/project-structure#utilities-directory`,\n 500,\n {},\n \"PrismaInstanceNotFound\"\n );\n throw error;\n }\n }\n return prismaInstance;\n}\n\nexport function getPrismaInstance() {\n return prismaInstance;\n}\n"]}
|
|
@@ -1,45 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.queryParser = exports.parse = void 0;
|
|
4
|
-
const parse = (target, options) => {
|
|
5
|
-
switch (typeof target) {
|
|
6
|
-
case "string":
|
|
7
|
-
if (target === "") {
|
|
8
|
-
return "";
|
|
9
|
-
}
|
|
10
|
-
else if (options.parseNull && target === "null") {
|
|
11
|
-
return null;
|
|
12
|
-
}
|
|
13
|
-
else if (options.parseUndefined && target === "undefined") {
|
|
14
|
-
return undefined;
|
|
15
|
-
}
|
|
16
|
-
else if (options.parseBoolean &&
|
|
17
|
-
(target === "true" || target === "false")) {
|
|
18
|
-
return target === "true";
|
|
19
|
-
}
|
|
20
|
-
else if (options.parseNumber && !isNaN(Number(target))) {
|
|
21
|
-
return Number(target);
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
return target;
|
|
25
|
-
}
|
|
26
|
-
case "object":
|
|
27
|
-
if (Array.isArray(target)) {
|
|
28
|
-
return target.map((x) => (0, exports.parse)(x, options));
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
const obj = target;
|
|
32
|
-
Object.keys(obj).map((key) => (obj[key] = (0, exports.parse)(target[key], options)));
|
|
33
|
-
return obj;
|
|
34
|
-
}
|
|
35
|
-
default:
|
|
36
|
-
return target;
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
exports.parse = parse;
|
|
40
|
-
const queryParser = (options) => (req, res, next) => {
|
|
41
|
-
req.query = (0, exports.parse)(req.query, options);
|
|
42
|
-
next();
|
|
43
|
-
};
|
|
44
|
-
exports.queryParser = queryParser;
|
|
45
|
-
//# sourceMappingURL=query-parser.helpers.js.map
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.queryParser=exports.parse=void 0;const parse=(e,r)=>{switch(typeof e){case"string":return e===""?"":r.parseNull&&e==="null"?null:r.parseUndefined&&e==="undefined"?void 0:r.parseBoolean&&(e==="true"||e==="false")?e==="true":r.parseNumber&&!isNaN(Number(e))?Number(e):e;case"object":if(Array.isArray(e))return e.map(s=>(0,exports.parse)(s,r));{const s=e;return Object.keys(s).map(u=>s[u]=(0,exports.parse)(e[u],r)),s}default:return e}};exports.parse=parse;const queryParser=e=>(r,s,u)=>{r.query=(0,exports.parse)(r.query,e),u()};exports.queryParser=queryParser;
|
|
@@ -1,21 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.processMiddleware = exports.safeCatchAsync = void 0;
|
|
4
|
-
const error_handler_1 = require("../../exports/error-handler");
|
|
5
|
-
const safeCatchAsync = (middleware) => {
|
|
6
|
-
return middleware ? (0, error_handler_1.catchAsync)(middleware) : undefined;
|
|
7
|
-
};
|
|
8
|
-
exports.safeCatchAsync = safeCatchAsync;
|
|
9
|
-
const processMiddleware = (middleware) => {
|
|
10
|
-
if (!middleware)
|
|
11
|
-
return [];
|
|
12
|
-
if (Array.isArray(middleware)) {
|
|
13
|
-
return middleware
|
|
14
|
-
.filter((mw) => !!mw)
|
|
15
|
-
.map((mw) => (0, exports.safeCatchAsync)(mw));
|
|
16
|
-
}
|
|
17
|
-
else
|
|
18
|
-
return [(0, exports.safeCatchAsync)(middleware)];
|
|
19
|
-
};
|
|
20
|
-
exports.processMiddleware = processMiddleware;
|
|
21
|
-
//# sourceMappingURL=routers.helpers.js.map
|
|
1
|
+
"use strict";var __importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.processMiddleware=exports.safeCatchAsync=void 0;const catch_async_1=__importDefault(require("../../modules/error-handler/utils/catch-async"));function throwErrorIfInterceptorIsNotAFunction(t){if(t&&typeof t!="function")throw Error(`Validation Error: Invalid interceptor of type ${typeof t}, they must be a function or an array of function. checkout https://arkosjs.com/docs/core-concepts/interceptor-middlewares`)}const safeCatchAsync=(t,r={type:"normal"})=>{if(t&&typeof t!="function")throw Error(`Validation Error: Invalid interceptor of type ${typeof t}, they must be a function or an array of function. checkout https://arkosjs.com/docs/core-concepts/interceptor-middlewares`);return t?(0,catch_async_1.default)(t,r):void 0};exports.safeCatchAsync=safeCatchAsync;const processMiddleware=(t,r={type:"normal"})=>t?Array.isArray(t)?t.filter(o=>!!o).map(o=>(throwErrorIfInterceptorIsNotAFunction(o),(0,exports.safeCatchAsync)(o,r))):(throwErrorIfInterceptorIsNotAFunction(t),[(0,exports.safeCatchAsync)(t,r)]):[];exports.processMiddleware=processMiddleware;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routers.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/routers.helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"routers.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/routers.helpers.ts"],"names":[],"mappings":";;;;;;AAAA,gGAEuD;AAEvD,SAAS,qCAAqC,CAAC,UAAe;IAC5D,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;QACnD,MAAM,KAAK,CACT,iDAAiD,OAAO,UAAU,4HAA4H,CAC/L,CAAC;IACJ,CAAC;AACH,CAAC;AAEM,MAAM,cAAc,GAAG,CAC5B,UAAe,EACf,UAAwC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAC1D,EAAE;IAEF,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;QACnD,MAAM,KAAK,CACT,iDAAiD,OAAO,UAAU,4HAA4H,CAC/L,CAAC;IACJ,CAAC;IAED,OAAO,UAAU,CAAC,CAAC,CAAC,IAAA,qBAAU,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC,CAAC;AAZW,QAAA,cAAc,kBAYzB;AAGK,MAAM,iBAAiB,GAAG,CAC/B,UAAe,EACf,UAAwC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAC1D,EAAE;IACF,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO,UAAU;aACd,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YACV,qCAAqC,CAAC,EAAE,CAAC,CAAC;YAC1C,OAAO,IAAA,sBAAc,EAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC,CAA2B,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,qCAAqC,CAAC,UAAU,CAAC,CAAC;QAClD,OAAO,CAAC,IAAA,sBAAc,EAAC,UAAU,EAAE,OAAO,CAAC,CAA2B,CAAC;IACzE,CAAC;AACH,CAAC,CAAC;AAhBW,QAAA,iBAAiB,qBAgB5B","sourcesContent":["import catchAsync, {\n CatchAsyncReturnType,\n} from \"../../modules/error-handler/utils/catch-async\";\n\nfunction throwErrorIfInterceptorIsNotAFunction(middleware: any) {\n if (middleware && typeof middleware !== \"function\") {\n throw Error(\n `Validation Error: Invalid interceptor of type ${typeof middleware}, they must be a function or an array of function. checkout https://arkosjs.com/docs/core-concepts/interceptor-middlewares`\n );\n }\n}\n\nexport const safeCatchAsync = (\n middleware: any,\n options: { type: \"error\" | \"normal\" } = { type: \"normal\" }\n) => {\n // Check for truthy non-function values and throw error\n if (middleware && typeof middleware !== \"function\") {\n throw Error(\n `Validation Error: Invalid interceptor of type ${typeof middleware}, they must be a function or an array of function. checkout https://arkosjs.com/docs/core-concepts/interceptor-middlewares`\n );\n }\n\n return middleware ? catchAsync(middleware, options) : undefined;\n};\n\n// Helper function to handle middleware arrays or single functions\nexport const processMiddleware = (\n middleware: any,\n options: { type: \"error\" | \"normal\" } = { type: \"normal\" }\n) => {\n if (!middleware) return [];\n if (Array.isArray(middleware)) {\n return middleware\n .filter((mw) => !!mw)\n .map((mw) => {\n throwErrorIfInterceptorIsNotAFunction(mw);\n return safeCatchAsync(mw, options);\n }) as CatchAsyncReturnType[];\n } else {\n throwErrorIfInterceptorIsNotAFunction(middleware);\n return [safeCatchAsync(middleware, options)] as CatchAsyncReturnType[];\n }\n};\n"]}
|
|
@@ -1,28 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.capitalize = capitalize;
|
|
4
|
-
exports.removeBeginningSlash = removeBeginningSlash;
|
|
5
|
-
exports.removeEndingSlash = removeEndingSlash;
|
|
6
|
-
exports.removeBothSlashes = removeBothSlashes;
|
|
7
|
-
function capitalize(text) {
|
|
8
|
-
if (!text)
|
|
9
|
-
return "";
|
|
10
|
-
return text
|
|
11
|
-
.split(" ")
|
|
12
|
-
.map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
13
|
-
.join(" ");
|
|
14
|
-
}
|
|
15
|
-
function removeBeginningSlash(str) {
|
|
16
|
-
if (str.startsWith("/"))
|
|
17
|
-
return str.substring(1);
|
|
18
|
-
return str;
|
|
19
|
-
}
|
|
20
|
-
function removeEndingSlash(str) {
|
|
21
|
-
if (str.endsWith("/"))
|
|
22
|
-
return str.substring(0, str.length - 1);
|
|
23
|
-
return str;
|
|
24
|
-
}
|
|
25
|
-
function removeBothSlashes(str) {
|
|
26
|
-
return removeEndingSlash(removeBeginningSlash(str));
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=text.helpers.js.map
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.capitalize=capitalize,exports.removeBeginningSlash=removeBeginningSlash,exports.removeEndingSlash=removeEndingSlash,exports.removeBothSlashes=removeBothSlashes;function capitalize(e){return e?e.split(" ").map(n=>n.charAt(0).toUpperCase()+n.slice(1).toLowerCase()).join(" "):""}function removeBeginningSlash(e){return e.startsWith("/")?e.substring(1):e}function removeEndingSlash(e){return e.endsWith("/")?e.substring(0,e.length-1):e}function removeBothSlashes(e){return removeEndingSlash(removeBeginningSlash(e))}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=this&&this.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.PrismaJsonSchemaGenerator=void 0;const deepmerge_helper_1=__importDefault(require("../helpers/deepmerge.helper")),dynamic_loader_1=require("../dynamic-loader"),prisma_schema_parser_1=__importDefault(require("./prisma-schema-parser")),swagger_router_helpers_1=require("../../modules/swagger/utils/helpers/swagger.router.helpers");class PrismaJsonSchemaGenerator{constructor(){this.schema=prisma_schema_parser_1.default.parse()}async generateModelSchemas(t){const{modelName:i,arkosConfig:a,schemasToGenerate:s=["model","login","signup","getMe","updateMe","updatePassword","create","createOne","createMany","update","updateOne","updateMany","query","findOne","findMany"]}=t,e=(0,dynamic_loader_1.getModuleComponents)(i),n=e?.router?.config||{},r=e?.prismaQueryOptions||{},o=["auth","me","password","signup","login"].includes(i.toLowerCase());if(a?.swagger?.strict&&a.swagger.mode!=="prisma")return{};if(n?.disable===!0)return{};const d=this.schema.models.find(l=>l.name.toLowerCase()===i.toLowerCase());if(!d&&!o)return{};const p={};return o?await this.generateAuthSchemas(this.schema.models.find(l=>l.name.toLowerCase()==="user"),p,a,s,r):d&&await this.generateCrudSchemas(d,p,a,s,r,n),{...p}}async generateAuthSchemas(t,i,a,s,e,n){const r="Auth";if(!a?.authentication)return i;s.includes("login")&&!this.isEndpointDisabled("login",n)&&!await(0,swagger_router_helpers_1.localValidatorFileExists)("login",r,a)&&(i.LoginSchema=this.generateLoginSchema(a)),s.includes("signup")&&!this.isEndpointDisabled("signup",n)&&!await(0,swagger_router_helpers_1.localValidatorFileExists)("signup",r,a)&&(i.SignupSchema=this.generateSignupSchema(t,e?.signup)),s.includes("updateMe")&&!this.isEndpointDisabled("updateMe",n)&&!await(0,swagger_router_helpers_1.localValidatorFileExists)("updateMe",r,a)&&(i.UpdateMeSchema=this.generateUpdateMeSchema(t,e?.updateMe)),s.includes("updatePassword")&&!this.isEndpointDisabled("updatePassword",n)&&!await(0,swagger_router_helpers_1.localValidatorFileExists)("updatePassword",r,a)&&(i.UpdatePasswordSchema=this.generateUpdatePasswordSchema(t,e?.updatePassword)),s.includes("getMe")&&!this.isEndpointDisabled("getMe",n)&&!await(0,swagger_router_helpers_1.localValidatorFileExists)("getMe",r,a)&&(i.GetMeSchema=this.generateResponseSchema(t,e?.getMe||{},"findOne"))}async generateCrudSchemas(t,i,a,s,e,n){const r=t.name,c=async(o,d)=>{const p=a.validation?.resolver==="zod"?"Schema":"Dto",l=o==="Create"?"createOne":"updateOne";if(await(0,swagger_router_helpers_1.localValidatorFileExists)(l,d,a))return`${o}${d}${p}`;{const m=`${o}${d}ModelSchema`;return i[m]||(o==="Create"?i[m]=this.generateCreateSchema(t,this.resolvePrismaQueryOptions(e,"createOne")):o==="Update"&&(i[m]=this.generateUpdateSchema(t,this.resolvePrismaQueryOptions(e,"updateOne")))),m}};if(s.includes("createOne")&&!this.isEndpointDisabled("createOne",n)&&!await(0,swagger_router_helpers_1.localValidatorFileExists)("createOne",r,a)&&(i[`Create${r}ModelSchema`]=this.generateCreateSchema(t,this.resolvePrismaQueryOptions(e,"createOne"))),s.includes("createMany")&&!this.isEndpointDisabled("createMany",n)&&!await(0,swagger_router_helpers_1.localValidatorFileExists)("createMany",r,a)){const o=await c("Create",r);i[`CreateMany${r}ModelSchema`]={type:"array",items:{$ref:`#/components/schemas/${o}`}}}if(s.includes("updateOne")&&!this.isEndpointDisabled("updateOne",n)&&!await(0,swagger_router_helpers_1.localValidatorFileExists)("updateOne",r,a)&&(i[`Update${r}ModelSchema`]=this.generateUpdateSchema(t,this.resolvePrismaQueryOptions(e,"updateOne"))),s.includes("updateMany")&&!this.isEndpointDisabled("updateMany",n)&&!await(0,swagger_router_helpers_1.localValidatorFileExists)("updateMany",r,a)){const o=await c("Update",r);i[`UpdateMany${r}ModelSchema`]={type:"object",properties:{data:{type:"object",$ref:`#/components/schemas/${o}`},where:{type:"object"}},required:["data"]}}s.includes("findOne")&&!this.isEndpointDisabled("findOne",n)&&!await(0,swagger_router_helpers_1.localValidatorFileExists)("findOne",r,a)&&(i[`FindOne${r}ModelSchema`]=this.generateResponseSchema(t,this.resolvePrismaQueryOptions(e,"findOne"),"findOne")),s.includes("findMany")&&!this.isEndpointDisabled("findMany",n)&&!await(0,swagger_router_helpers_1.localValidatorFileExists)("findMany",r,a)&&(i[`FindMany${r}ModelSchema`]={type:"array",items:this.generateResponseSchema(t,this.resolvePrismaQueryOptions(e,"findMany"),"findMany")})}generateCreateSchema(t,i){const a={},s=[],e=["createdAt","updatedAt","deletedAt","id"];t.name.toLowerCase()==="auth"&&e.push("roles","role","isActive","isStaff","isSuperUser","passwordChangedAt","deletedSelfAccountAt","lastLoginAt");for(const n of t.fields){if(n.isId||e.includes(n.name))continue;if(this.isModelRelation(n.type)){!n.isArray&&n.connectionField&&(a[n.connectionField]={type:this.mapPrismaTypeToJsonSchema(t.fields.find(c=>c.name===n.connectionField)?.type||"String")},!n.isOptional&&n.defaultValue===void 0&&s.push(n.name));continue}const r=this.convertFieldToJsonSchema(n);a[n.name]=r,!n.isOptional&&n.defaultValue===void 0&&!n.isArray&&s.push(n.name)}return{type:"object",properties:a,required:s}}generateUpdateSchema(t,i){const a={},s=["createdAt","updatedAt","deletedAt","id"];for(const e of t.fields){if(e.isId||s.includes(e.name))continue;if(this.isModelRelation(e.type)){!e.isArray&&e.connectionField&&(a[e.connectionField]={type:this.mapPrismaTypeToJsonSchema(t.fields.find(r=>r.name===e.connectionField)?.type||"String")});continue}const n=this.convertFieldToJsonSchema(e);a[e.name]=n}return{type:"object",properties:a,required:[]}}generateResponseSchema(t,i,a){const s={},e=[],n=i?.select,r=i?.omit,c=i?.include;for(const o of t.fields){if(o.name==="password"||r&&r[o.name]||n&&!n[o.name])continue;if(this.isModelRelation(o.type)){if(c?.[o.name]){const p=this.schema.models.find(l=>l.name===o.type);if(p){const l=this.generateNestedRelationSchema(p,c[o.name]);s[o.name]=o.isArray?{type:"array",items:l}:l}}continue}const d=this.convertFieldToJsonSchema(o);s[o.name]=d,o.isOptional||e.push(o.name)}return{type:"object",properties:s,required:e}}generateNestedRelationSchema(t,i){const a={},s=[],e=i?.select,n=i?.include;for(const r of t.fields){if(r.name.toLowerCase().includes("password")||e&&!e[r.name])continue;if(this.isModelRelation(r.type)){if(n?.[r.name]){const o=this.schema.models.find(d=>d.name===r.type);if(o){const d=this.generateNestedRelationSchema(o,n[r.name]);a[r.name]=r.isArray?{type:"array",items:d}:d}}continue}const c=this.convertFieldToJsonSchema(r);a[r.name]=c,r.isOptional||s.push(r.name)}return{type:"object",properties:a,required:s}}generateLoginSchema(t){const i=t?.authentication?.login?.allowedUsernames||[],a=e=>e.includes(".")&&e.split(".").pop()||e,s={type:"object",properties:{password:{type:"string",minLength:8}},required:["password"]};if(i.forEach(e=>{const n=a(e);s.properties[n]={type:"string",format:"string",description:`Username field: ${e}`}}),i.length>0){const e=i.map(a);return{...s,anyOf:e.map(()=>({required:[...s.required]}))}}return s}generateSignupSchema(t,i){const a=this.generateCreateSchema(t,i||{});return["roles","role","isActive","isStaff","isSuperUser","passwordChangedAt","deletedSelfAccountAt","lastLoginAt"].forEach(e=>{delete a?.properties?.[e]}),a}generateUpdateMeSchema(t,i){const a=this.generateUpdateSchema(t,i||{});return["roles","role","isActive","isStaff","isSuperUser","passwordChangedAt","deletedSelfAccountAt","password","lastLoginAt"].forEach(e=>{delete a?.properties?.[e]}),a}generateUpdatePasswordSchema(t,i){return{type:"object",properties:{currentPassword:{type:"string"},newPassword:{type:"string",minLength:8}},required:["currentPassword","newPassword"]}}resolvePrismaQueryOptions(t,i){if(!t||!i)return{};const a=t,s=a[i]||{};let e=a.queryOptions||{};a.global&&(e=(0,deepmerge_helper_1.default)(e,a.global));const n=this.getGeneralOptionsForAction(a,i);return n&&(e=(0,deepmerge_helper_1.default)(e,n)),s&&(e=(0,deepmerge_helper_1.default)(e,s)),e}getGeneralOptionsForAction(t,i){const a={find:["findOne","findMany"],create:["createOne","createMany"],update:["updateOne","updateMany"],delete:["deleteOne","deleteMany"],save:["createOne","createMany","updateOne","updateMany"],saveOne:["createOne","updateOne"],saveMany:["createMany","updateMany"]};for(const[s,e]of Object.entries(a))if(e.includes(i)&&t[s])return t[s];return null}isEndpointDisabled(t,i){return i?.disable?typeof i.disable=="boolean"?i.disable:i.disable[t]||!1:!1}isModelRelation(t){return this.schema.models.some(i=>i.name===t)}convertFieldToJsonSchema(t){const a={type:this.mapPrismaTypeToJsonSchema(t.type)};if(t.isArray&&(a.type="array",a.items={type:this.mapPrismaTypeToJsonSchema(t.type)}),t.defaultValue!==void 0&&(a.default=t.defaultValue),t.type==="DateTime"&&(a.format="date-time"),this.isEnum(t.type)){const s=this.schema.enums.find(e=>e.name===t.type);s&&(a.enum=s.values)}return a}mapPrismaTypeToJsonSchema(t){const i={String:"string",Int:"number",Float:"number",Boolean:"boolean",DateTime:"string",Json:"object",Bytes:"string"};return i[t]?i[t]:this.isEnum(t)?"string":this.isModelRelation(t)?"object":"string"}isEnum(t){return this.schema.enums.some(i=>i.name===t)}}exports.PrismaJsonSchemaGenerator=PrismaJsonSchemaGenerator;const prismaJsonSchemaGenerator=new PrismaJsonSchemaGenerator;exports.default=prismaJsonSchemaGenerator;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prisma-json-schema-generator.js","sourceRoot":"","sources":["../../../../src/utils/prisma/prisma-json-schema-generator.ts"],"names":[],"mappings":"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","sourcesContent":["import { ArkosConfig, RouterConfig } from \"../../exports\";\nimport { AuthPrismaQueryOptions, PrismaQueryOptions } from \"../../types\";\nimport deepmerge from \"../helpers/deepmerge.helper\";\nimport {\n getModuleComponents,\n ValidationFileMappingKey,\n} from \"../dynamic-loader\";\nimport prismaSchemaParser from \"./prisma-schema-parser\";\nimport {\n PrismaModel,\n PrismaField,\n JsonSchema,\n JsonSchemaProperty,\n} from \"./types\";\nimport { localValidatorFileExists } from \"../../modules/swagger/utils/helpers/swagger.router.helpers\";\n\n// Add these types to your existing types file\nexport interface SchemaGenerationConfig {\n modelName: string;\n arkosConfig: ArkosConfig;\n schemasToGenerate?: ValidationFileMappingKey[];\n}\n\nexport interface GeneratedSchemas {\n [key: string]: JsonSchema;\n}\n\n/**\n * Enhanced JSON Schema generator that creates schemas based on Prisma models and query options\n */\nexport class PrismaJsonSchemaGenerator {\n schema = prismaSchemaParser.parse();\n\n /**\n * Main method to generate all schemas for a model\n */\n async generateModelSchemas(\n config: SchemaGenerationConfig\n ): Promise<GeneratedSchemas> {\n const {\n modelName,\n arkosConfig,\n schemasToGenerate = [\n \"model\",\n \"login\",\n \"signup\",\n \"getMe\",\n \"updateMe\",\n \"updatePassword\",\n \"create\",\n \"createOne\",\n \"createMany\",\n \"update\",\n \"updateOne\",\n \"updateMany\",\n \"query\",\n \"findOne\",\n \"findMany\",\n ],\n } = config;\n\n const ModuleComponents = getModuleComponents(modelName);\n const routerConfig = ModuleComponents?.router?.config || {};\n const prismaQueryOptions = ModuleComponents?.prismaQueryOptions || {};\n const authModuleModel = [\"auth\", \"me\", \"password\", \"signup\", \"login\"];\n const isAuthModule = authModuleModel.includes(modelName.toLowerCase());\n\n // Check if generation should be skipped\n if (arkosConfig?.swagger?.strict && arkosConfig.swagger.mode !== \"prisma\")\n return {};\n\n // Check if router is disabled\n if (routerConfig?.disable === true) return {};\n\n const model = this.schema.models.find(\n (m) => m.name.toLowerCase() === modelName.toLowerCase()\n );\n if (!model && !isAuthModule) return {};\n // throw new Error(`Model ${modelName} not found in schema`);\n\n const schemas: { [key: string]: JsonSchema } = {};\n\n if (isAuthModule) {\n // Generate auth-specific schemas\n await this.generateAuthSchemas(\n this.schema.models.find((m) => m.name.toLowerCase() === \"user\")!,\n schemas,\n arkosConfig,\n schemasToGenerate,\n prismaQueryOptions as AuthPrismaQueryOptions<any>\n );\n } else {\n // Generate standard CRUD schemas\n if (model)\n await this.generateCrudSchemas(\n model,\n schemas,\n arkosConfig,\n schemasToGenerate,\n prismaQueryOptions as PrismaQueryOptions<any>,\n routerConfig\n );\n }\n\n return { ...schemas };\n }\n\n /**\n * Generate auth-specific schemas\n */\n private async generateAuthSchemas(\n model: PrismaModel,\n schemas: { [key: string]: JsonSchema },\n arkosConfig: ArkosConfig,\n schemasToGenerate: ValidationFileMappingKey[],\n queryOptions?: AuthPrismaQueryOptions<any>,\n routerConfig?: RouterConfig\n ) {\n const modelName = \"Auth\";\n\n // if no auth activated forget those json schemas\n if (!arkosConfig?.authentication) return schemas;\n\n // Login schema (input)\n if (\n schemasToGenerate.includes(\"login\") &&\n !this.isEndpointDisabled(\"login\", routerConfig) &&\n !(await localValidatorFileExists(\"login\", modelName, arkosConfig))\n ) {\n schemas[`LoginSchema`] = this.generateLoginSchema(arkosConfig);\n }\n\n // Signup schema (input)\n if (\n schemasToGenerate.includes(\"signup\") &&\n !this.isEndpointDisabled(\"signup\", routerConfig) &&\n !(await localValidatorFileExists(\"signup\", modelName, arkosConfig))\n ) {\n schemas[`SignupSchema`] = this.generateSignupSchema(\n model,\n queryOptions?.signup\n );\n }\n\n // UpdateMe schema (input)\n if (\n schemasToGenerate.includes(\"updateMe\") &&\n !this.isEndpointDisabled(\"updateMe\", routerConfig) &&\n !(await localValidatorFileExists(\"updateMe\", modelName, arkosConfig))\n ) {\n schemas[`UpdateMeSchema`] = this.generateUpdateMeSchema(\n model,\n queryOptions?.updateMe\n );\n }\n\n // UpdatePassword schema (input)\n if (\n schemasToGenerate.includes(\"updatePassword\") &&\n !this.isEndpointDisabled(\"updatePassword\", routerConfig) &&\n !(await localValidatorFileExists(\n \"updatePassword\",\n modelName,\n arkosConfig\n ))\n ) {\n schemas[`UpdatePasswordSchema`] = this.generateUpdatePasswordSchema(\n model,\n queryOptions?.updatePassword\n );\n }\n\n // GetMe response schema\n if (\n schemasToGenerate.includes(\"getMe\") &&\n !this.isEndpointDisabled(\"getMe\", routerConfig) &&\n !(await localValidatorFileExists(\"getMe\", modelName, arkosConfig))\n ) {\n schemas[`GetMeSchema`] = this.generateResponseSchema(\n model,\n queryOptions?.getMe || {},\n \"findOne\"\n );\n }\n }\n\n /**\n * Generate standard CRUD schemas\n */\n private async generateCrudSchemas(\n model: PrismaModel,\n schemas: { [key: string]: JsonSchema },\n arkosConfig: ArkosConfig,\n schemasToGenerate: ValidationFileMappingKey[],\n queryOptions?: PrismaQueryOptions<any>,\n routerConfig?: RouterConfig\n ) {\n const modelName = model.name;\n\n // // Create schemas\n // if (\n // schemasToGenerate.includes(\"createOne\") &&\n // !this.isEndpointDisabled(\"createOne\", routerConfig) &&\n // !(await localValidatorFileExists(\"createOne\", modelName, arkosConfig))\n // ) {\n // schemas[`Create${modelName}ModelSchema`] = this.generateCreateSchema(\n // model,\n // this.resolvePrismaQueryOptions(queryOptions, \"createOne\")\n // );\n // }\n\n // if (\n // schemasToGenerate.includes(\"createMany\") &&\n // !this.isEndpointDisabled(\"createMany\", routerConfig) &&\n // !(await localValidatorFileExists(\"createMany\", modelName, arkosConfig))\n // ) {\n // schemas[`CreateMany${modelName}ModelSchema`] = {\n // type: \"array\",\n // items: { $ref: `#/components/schemas/Create${modelName}ModelSchema` },\n // };\n // }\n\n // // Update schemas\n // if (\n // schemasToGenerate.includes(\"updateOne\") &&\n // !this.isEndpointDisabled(\"updateOne\", routerConfig) &&\n // !(await localValidatorFileExists(\"updateOne\", modelName, arkosConfig))\n // ) {\n // schemas[`Update${modelName}ModelSchema`] = this.generateUpdateSchema(\n // model,\n // this.resolvePrismaQueryOptions(queryOptions, \"updateOne\")\n // );\n // }\n\n // if (\n // schemasToGenerate.includes(\"updateMany\") &&\n // !this.isEndpointDisabled(\"updateMany\", routerConfig) &&\n // !(await localValidatorFileExists(\"updateMany\", modelName, arkosConfig))\n // ) {\n // schemas[`UpdateMany${modelName}ModelSchema`] = {\n // type: \"object\",\n // properties: {\n // data: {\n // type: \"object\",\n // $ref: `#/components/schemas/Update${modelName}ModelSchema`,\n // },\n // where: { type: \"object\" },\n // },\n // required: [\"data\"],\n // };\n // }\n // Helper function to ensure base schema exists\n\n const ensureBaseSchemaReference = async (\n operation: string,\n modelName: string\n ) => {\n const suffix =\n arkosConfig.validation?.resolver === \"zod\" ? \"Schema\" : \"Dto\";\n\n // Check if local validator file exists for single operation\n const singleOpName = operation === \"Create\" ? \"createOne\" : \"updateOne\";\n const hasLocalValidator = await localValidatorFileExists(\n singleOpName,\n modelName,\n arkosConfig\n );\n\n if (hasLocalValidator) {\n // Point to local validator schema (Schema or Dto)\n return `${operation}${modelName}${suffix}`;\n } else {\n // Point to ModelSchema, generate if doesn't exist\n const modelSchemaKey = `${operation}${modelName}ModelSchema`;\n\n if (!schemas[modelSchemaKey]) {\n // Generate ModelSchema as fallback\n if (operation === \"Create\") {\n schemas[modelSchemaKey] = this.generateCreateSchema(\n model,\n this.resolvePrismaQueryOptions(queryOptions, \"createOne\")\n );\n } else if (operation === \"Update\") {\n schemas[modelSchemaKey] = this.generateUpdateSchema(\n model,\n this.resolvePrismaQueryOptions(queryOptions, \"updateOne\")\n );\n }\n }\n\n return modelSchemaKey;\n }\n };\n\n // Create schemas (unchanged)\n if (\n schemasToGenerate.includes(\"createOne\") &&\n !this.isEndpointDisabled(\"createOne\", routerConfig) &&\n !(await localValidatorFileExists(\"createOne\", modelName, arkosConfig))\n ) {\n schemas[`Create${modelName}ModelSchema`] = this.generateCreateSchema(\n model,\n this.resolvePrismaQueryOptions(queryOptions, \"createOne\")\n );\n }\n\n if (\n schemasToGenerate.includes(\"createMany\") &&\n !this.isEndpointDisabled(\"createMany\", routerConfig) &&\n !(await localValidatorFileExists(\"createMany\", modelName, arkosConfig))\n ) {\n // Only fix the reference\n const baseSchemaKey = await ensureBaseSchemaReference(\n \"Create\",\n modelName\n );\n schemas[`CreateMany${modelName}ModelSchema`] = {\n type: \"array\",\n items: { $ref: `#/components/schemas/${baseSchemaKey}` },\n };\n }\n\n // Update schemas (unchanged)\n if (\n schemasToGenerate.includes(\"updateOne\") &&\n !this.isEndpointDisabled(\"updateOne\", routerConfig) &&\n !(await localValidatorFileExists(\"updateOne\", modelName, arkosConfig))\n ) {\n schemas[`Update${modelName}ModelSchema`] = this.generateUpdateSchema(\n model,\n this.resolvePrismaQueryOptions(queryOptions, \"updateOne\")\n );\n }\n\n if (\n schemasToGenerate.includes(\"updateMany\") &&\n !this.isEndpointDisabled(\"updateMany\", routerConfig) &&\n !(await localValidatorFileExists(\"updateMany\", modelName, arkosConfig))\n ) {\n // Only fix the reference\n\n const baseSchemaKey = await ensureBaseSchemaReference(\n \"Update\",\n modelName\n );\n schemas[`UpdateMany${modelName}ModelSchema`] = {\n type: \"object\",\n properties: {\n data: {\n type: \"object\",\n $ref: `#/components/schemas/${baseSchemaKey}`,\n },\n where: { type: \"object\" },\n },\n required: [\"data\"],\n };\n }\n // Response schemas\n if (\n schemasToGenerate.includes(\"findOne\") &&\n !this.isEndpointDisabled(\"findOne\", routerConfig) &&\n !(await localValidatorFileExists(\"findOne\", modelName, arkosConfig))\n ) {\n schemas[`FindOne${modelName}ModelSchema`] = this.generateResponseSchema(\n model,\n this.resolvePrismaQueryOptions(queryOptions, \"findOne\"),\n \"findOne\"\n );\n }\n\n if (\n schemasToGenerate.includes(\"findMany\") &&\n !this.isEndpointDisabled(\"findMany\", routerConfig) &&\n !(await localValidatorFileExists(\"findMany\", modelName, arkosConfig))\n ) {\n schemas[`FindMany${modelName}ModelSchema`] = {\n type: \"array\",\n items: this.generateResponseSchema(\n model,\n this.resolvePrismaQueryOptions(queryOptions, \"findMany\"),\n \"findMany\"\n ),\n };\n }\n }\n\n /**\n * Generate create schema (excludes ID, includes relation IDs only)\n */\n private generateCreateSchema(\n model: PrismaModel,\n _: Record<string, any>\n ): JsonSchema {\n const properties: { [key: string]: JsonSchemaProperty } = {};\n const required: string[] = [];\n const restrictedFields = [\"createdAt\", \"updatedAt\", \"deletedAt\", \"id\"];\n\n if (model.name.toLowerCase() === \"auth\")\n restrictedFields.push(\n \"roles\",\n \"role\",\n \"isActive\",\n \"isStaff\",\n \"isSuperUser\",\n \"passwordChangedAt\",\n \"deletedSelfAccountAt\",\n \"lastLoginAt\"\n );\n\n for (const field of model.fields) {\n // Skip ID fields\n if (field.isId || restrictedFields.includes(field.name)) continue;\n\n // Handle relations\n if (this.isModelRelation(field.type)) {\n // For single relations, include only the ID field\n if (!field.isArray && field.connectionField) {\n properties[field.connectionField] = {\n type: this.mapPrismaTypeToJsonSchema(\n model.fields.find(\n (_field) => _field.name === field.connectionField\n )?.type || \"String\"\n ),\n };\n\n // Check if relation ID is required\n if (!field.isOptional && field.defaultValue === undefined)\n required.push(field.name);\n }\n // Skip array relations in create schema\n continue;\n }\n\n const property = this.convertFieldToJsonSchema(field);\n properties[field.name] = property;\n\n // Field is required if not optional, no default, and not array\n if (\n !field.isOptional &&\n field.defaultValue === undefined &&\n !field.isArray\n ) {\n required.push(field.name);\n }\n }\n\n return {\n type: \"object\",\n properties,\n required,\n };\n }\n\n /**\n * Generate update schema (all fields optional, includes relation IDs only)\n */\n private generateUpdateSchema(\n model: PrismaModel,\n _: Record<string, any>\n ): JsonSchema {\n const properties: { [key: string]: JsonSchemaProperty } = {};\n const autoFillFields = [\"createdAt\", \"updatedAt\", \"deletedAt\", \"id\"];\n\n for (const field of model.fields) {\n // Skip ID fields\n if (field.isId || autoFillFields.includes(field.name)) continue;\n\n // Handle relations\n if (this.isModelRelation(field.type)) {\n // For single relations, include only the ID field\n if (!field.isArray && field.connectionField)\n properties[field.connectionField] = {\n type: this.mapPrismaTypeToJsonSchema(\n model.fields.find(\n (_field) => _field.name === field.connectionField\n )?.type || \"String\"\n ),\n };\n\n // Skip array relations in update schema\n continue;\n }\n\n const property = this.convertFieldToJsonSchema(field);\n properties[field.name] = property;\n }\n\n return {\n type: \"object\",\n properties,\n required: [], // All fields are optional in update\n };\n }\n\n /**\n * Generate response schema (includes nested relations based on query options)\n */\n private generateResponseSchema(\n model: PrismaModel,\n options: Record<string, any>,\n _: \"findOne\" | \"findMany\"\n ): JsonSchema {\n const properties: { [key: string]: JsonSchemaProperty } = {};\n const required: string[] = [];\n\n // Get select and include options\n const selectFields = options?.select;\n const omittedFields = options?.omit;\n const includeRelations = options?.include;\n\n for (const field of model.fields) {\n // Skip password fields\n if (field.name === \"password\") continue;\n\n // Skip ommited fields\n if (omittedFields && omittedFields[field.name]) continue;\n\n // If select is specified, only include selected fields\n if (selectFields && !selectFields[field.name]) continue;\n\n // Handle relations\n if (this.isModelRelation(field.type)) {\n // Include relation if specified in include option\n if (includeRelations?.[field.name]) {\n const relationModel = this.schema.models.find(\n (m) => m.name === field.type\n );\n\n if (relationModel) {\n const relationSchema = this.generateNestedRelationSchema(\n relationModel,\n includeRelations[field.name]\n );\n properties[field.name] = field.isArray\n ? { type: \"array\", items: relationSchema }\n : relationSchema;\n }\n }\n continue;\n }\n\n const property = this.convertFieldToJsonSchema(field);\n properties[field.name] = property;\n\n // Field is required if not optional (for response schemas, we include all by default)\n if (!field.isOptional) required.push(field.name);\n }\n\n return {\n type: \"object\",\n properties,\n required,\n };\n }\n\n /**\n * Generate nested relation schema\n */\n private generateNestedRelationSchema(\n model: PrismaModel,\n includeOptions: any\n ): JsonSchemaProperty {\n const properties: { [key: string]: JsonSchemaProperty } = {};\n const required: string[] = [];\n\n // Handle nested select\n const selectFields = includeOptions?.select;\n const nestedIncludes = includeOptions?.include;\n\n for (const field of model.fields) {\n // Skip password fields\n if (field.name.toLowerCase().includes(\"password\")) {\n continue;\n }\n\n if (selectFields && !selectFields[field.name]) {\n continue;\n }\n\n if (this.isModelRelation(field.type)) {\n if (nestedIncludes?.[field.name]) {\n const relationModel = this.schema.models.find(\n (m) => m.name === field.type\n );\n if (relationModel) {\n const nestedSchema = this.generateNestedRelationSchema(\n relationModel,\n nestedIncludes[field.name]\n );\n properties[field.name] = field.isArray\n ? { type: \"array\", items: nestedSchema }\n : nestedSchema;\n }\n }\n continue;\n }\n\n const property = this.convertFieldToJsonSchema(field);\n properties[field.name] = property;\n\n if (!field.isOptional) {\n required.push(field.name);\n }\n }\n\n return {\n type: \"object\",\n properties,\n required,\n };\n }\n\n /**\n * Auth-specific schema generators\n */\n private generateLoginSchema(arkosConfig?: ArkosConfig): JsonSchema {\n const userNameFields =\n arkosConfig?.authentication?.login?.allowedUsernames || [];\n\n // Helper function to get display name for nested fields\n const getDisplayName = (field: string) => {\n if (field.includes(\".\")) return field.split(\".\").pop() || field; // Get the part after the last dot\n return field;\n };\n\n // Base schema with password (always required)\n const baseSchema: JsonSchemaProperty = {\n type: \"object\",\n properties: {\n password: {\n type: \"string\",\n minLength: 8,\n },\n },\n required: [\"password\"],\n };\n\n // Add all username fields to properties\n userNameFields.forEach((field) => {\n const displayName = getDisplayName(field);\n baseSchema.properties![displayName] = {\n type: \"string\",\n format: \"string\",\n description: `Username field: ${field}`, // Optional: show original field path\n };\n });\n\n // At least one username field must be provided along with password\n if (userNameFields.length > 0) {\n const usernameDisplayNames = userNameFields.map(getDisplayName);\n\n return {\n ...baseSchema,\n anyOf: usernameDisplayNames.map(() => ({\n required: [...baseSchema.required!],\n })),\n };\n }\n\n return baseSchema;\n }\n private generateSignupSchema(\n model: PrismaModel,\n options?: Record<string, any>\n ): JsonSchema {\n // Similar to create but might have specific required fields\n const singupSchema = this.generateCreateSchema(model, options || {});\n\n const restrictedFields = [\n \"roles\",\n \"role\",\n \"isActive\",\n \"isStaff\",\n \"isSuperUser\",\n \"passwordChangedAt\",\n \"deletedSelfAccountAt\",\n \"lastLoginAt\",\n ];\n restrictedFields.forEach((field) => {\n delete singupSchema?.properties?.[field];\n });\n\n return singupSchema;\n }\n\n private generateUpdateMeSchema(\n model: PrismaModel,\n options?: Record<string, any>\n ): JsonSchema {\n // Similar to update but might exclude certain fields like role, etc.\n const updateSchema = this.generateUpdateSchema(model, options || {});\n\n // Remove sensitive fields that users shouldn't update themselves\n const restrictedFields = [\n \"roles\",\n \"role\",\n \"isActive\",\n \"isStaff\",\n \"isSuperUser\",\n \"passwordChangedAt\",\n \"deletedSelfAccountAt\",\n \"password\",\n \"lastLoginAt\",\n ];\n restrictedFields.forEach((field) => {\n delete updateSchema?.properties?.[field];\n });\n\n return updateSchema;\n }\n\n private generateUpdatePasswordSchema(\n _: PrismaModel,\n _1?: Record<string, any>\n ): JsonSchema {\n return {\n type: \"object\",\n properties: {\n currentPassword: { type: \"string\" },\n newPassword: { type: \"string\", minLength: 8 },\n },\n required: [\"currentPassword\", \"newPassword\"],\n };\n }\n\n /**\n * Utility methods\n */\n private resolvePrismaQueryOptions(\n prismaQueryOptions?: PrismaQueryOptions<any> | AuthPrismaQueryOptions<any>,\n action?: ValidationFileMappingKey\n ): Record<string, any> {\n if (!prismaQueryOptions || !action) {\n return {};\n }\n\n const options = prismaQueryOptions as any;\n const actionOptions = options[action] || {};\n\n // Start with deprecated queryOptions (for backward compatibility)\n let mergedOptions = options.queryOptions || {};\n\n // Apply global options (replaces queryOptions)\n if (options.global)\n mergedOptions = deepmerge(mergedOptions, options.global);\n\n // Apply general operation options based on action type\n const generalOptions = this.getGeneralOptionsForAction(options, action);\n if (generalOptions)\n mergedOptions = deepmerge(mergedOptions, generalOptions);\n\n // Finally apply specific action options (highest priority)\n if (actionOptions) mergedOptions = deepmerge(mergedOptions, actionOptions);\n\n return mergedOptions;\n }\n\n /**\n * Helps in remmaping those prisma query options that combines many operations for example find, save...\n */\n private getGeneralOptionsForAction(\n options: any,\n action: ValidationFileMappingKey\n ): Record<string, any> | null {\n const actionMap: { [key: string]: string[] } = {\n find: [\"findOne\", \"findMany\"],\n create: [\"createOne\", \"createMany\"],\n update: [\"updateOne\", \"updateMany\"],\n delete: [\"deleteOne\", \"deleteMany\"],\n save: [\"createOne\", \"createMany\", \"updateOne\", \"updateMany\"],\n saveOne: [\"createOne\", \"updateOne\"],\n saveMany: [\"createMany\", \"updateMany\"],\n };\n\n for (const [optionKey, actions] of Object.entries(actionMap)) {\n if (actions.includes(action) && options[optionKey]) {\n return options[optionKey];\n }\n }\n\n return null;\n }\n\n private isEndpointDisabled(\n endpoint: string,\n routerConfig?: RouterConfig\n ): boolean {\n if (!routerConfig?.disable) return false;\n\n if (typeof routerConfig.disable === \"boolean\") {\n return routerConfig.disable;\n }\n\n return (\n routerConfig.disable[endpoint as keyof typeof routerConfig.disable] ||\n false\n );\n }\n\n private isModelRelation(typeName: string): boolean {\n return this.schema.models.some((m) => m.name === typeName);\n }\n\n private convertFieldToJsonSchema(field: PrismaField): JsonSchemaProperty {\n // Reuse the existing method from the original generator\n const baseType = this.mapPrismaTypeToJsonSchema(field.type);\n const property: JsonSchemaProperty = { type: baseType };\n\n if (field.isArray) {\n property.type = \"array\";\n property.items = { type: this.mapPrismaTypeToJsonSchema(field.type) };\n }\n\n if (field.defaultValue !== undefined) {\n property.default = field.defaultValue;\n }\n\n if (field.type === \"DateTime\") {\n property.format = \"date-time\";\n }\n\n if (this.isEnum(field.type)) {\n const enumDef = this.schema.enums.find((e) => e.name === field.type);\n if (enumDef) {\n property.enum = enumDef.values;\n }\n }\n\n return property;\n }\n\n private mapPrismaTypeToJsonSchema(prismaType: string): string {\n const typeMap: { [key: string]: string } = {\n String: \"string\",\n Int: \"number\",\n Float: \"number\",\n Boolean: \"boolean\",\n DateTime: \"string\",\n Json: \"object\",\n Bytes: \"string\",\n };\n\n if (typeMap[prismaType]) return typeMap[prismaType];\n\n if (this.isEnum(prismaType)) return \"string\";\n\n if (this.isModelRelation(prismaType)) return \"object\";\n\n return \"string\";\n }\n\n private isEnum(typeName: string): boolean {\n return this.schema.enums.some((e) => e.name === typeName);\n }\n}\n\nconst prismaJsonSchemaGenerator = new PrismaJsonSchemaGenerator();\n\nexport default prismaJsonSchemaGenerator;\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
"use strict";var __importDefault=this&&this.__importDefault||function(l){return l&&l.__esModule?l:{default:l}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.PrismaSchemaParser=void 0;const path_1=__importDefault(require("path")),change_case_helpers_1=require("../helpers/change-case.helpers"),fs_1=__importDefault(require("fs"));class PrismaSchemaParser{constructor(){this.enums=[],this.models=[],this.prismaSchemasContent="",this.parsed=!1,this.parse()}parse({override:s}={override:!1}){return(!this.parsed||s)&&(this.enums=this.extractEnums(),this.models=this.extractModels(),this.parsed=!0),{models:this.models,enums:this.enums}}extractEnums(){const s=[],i=(this.getPrismaSchemasContent()||"").match(/enum\s+\w+\s*\{[^}]*\}/g)||[];for(const t of i){const n=this.parseEnumBlock(t);n&&s.push(n)}return s}parseEnumBlock(s){const e=s.match(/enum\s+(\w+)/);if(!e)return null;const i=e[1],t=s.split(`
|
|
2
|
+
`).map(n=>n.trim()).filter(n=>n&&!n.startsWith("enum")&&!n.startsWith("{")&&!n.startsWith("}")).map(n=>n.replace(/,$/,""));return{name:i,values:t}}extractModels(){const s=[],e=this.extractModelBlocks();for(const i of e){const t=this.parseModelBlock(i);t&&s.push(t)}return s}extractModelBlocks(){const s=/model\s+\w+\s*\{((?:[^{}]*(?:\{[^{}]*\}[^{}]*)*)*)\}/g;return(this.getPrismaSchemasContent()||"").match(s)||[]}parseModelBlock(s){const e=s.match(/model\s+(\w+)/);if(!e)return null;const i=e[1],t=this.parseFields(s),n=s.match(/@@map\s*\(\s*"([^"]+)"\s*\)/),r=n?n[1]:void 0;return{name:i,fields:t,mapName:r}}parseFields(s){const e=[],i=s.split(`
|
|
3
|
+
`).map(t=>t.trim()).filter(t=>t&&!t.startsWith("model")&&!t.startsWith("{")&&!t.startsWith("}"));for(const t of i){if(t.startsWith("//")||t.startsWith("@@"))continue;const n=this.parseFieldLine(t);n&&e.push(n)}return e}parseFieldLine(s){const e=s.match(/^(\w+)\s+(\w+(?:\[\])?)\??\s*(.*)/);if(!e)return null;const[,i,t,n]=e,r=t.endsWith("[]"),c=r?t.slice(0,-2):t,a=s.includes("?"),m=n.split(/\s+/).filter(o=>o.startsWith("@"));let h;const u=n.match(/@default\(([^)]+)\)/);u&&(h=this.parseDefaultValue(u[1]));let d="";const p=n.match(/@relation\([^)]*fields:\s*\[([^\]]+)\]/);p&&(d=p[1].trim().replace(/['"]/g,""));const f=m.some(o=>o.startsWith("@id")),g=m.some(o=>o.startsWith("@unique")),M=this.models;return{name:i,type:c,isOptional:a,isRelation:M.map(o=>o.name).includes(c)||this.getPrismaSchemasContent().includes(`model ${c} {`),isArray:r,connectionField:d,defaultValue:h,isId:f,isUnique:g,attributes:m}}parseDefaultValue(s){if(s=s.trim(),s.startsWith('"')&&s.endsWith('"'))return s.slice(1,-1);if(s==="true")return!0;if(s==="false")return!1;if(/^-?\d+$/.test(s))return parseInt(s,10);if(/^-?\d+\.\d+$/.test(s))return parseFloat(s);if(!s.includes("("))return s;if(!s.includes("("))return s}getPrismaSchemasContent(){if(this.prismaSchemasContent)return this.prismaSchemasContent;const s=[],e=/model\s+(\w+)\s*{/g,i=[],t=path_1.default.resolve(process.cwd(),"prisma"),n=this.getAllPrismaFiles(t);for(const c of n){const a=fs_1.default.readFileSync(c,"utf-8");i?.includes?.(a)||i.push(a)}return i.join(`
|
|
4
|
+
`).replace(e,(c,a)=>(s?.includes?.(a)||s.push((0,change_case_helpers_1.camelCase)(a.trim())),`model ${a} {`))}getAllPrismaFiles(s,e=[]){return fs_1.default.readdirSync(s)?.forEach(t=>{const n=path_1.default.join(s,t),r=fs_1.default.statSync(n);r.isDirectory()&&t!=="migrations"?e=this.getAllPrismaFiles(n,e):r.isFile()&&t.endsWith(".prisma")&&e.push(n)}),e}isEnum(s){return this.enums.some(e=>e.name===s)}isModel(s){return this.models.some(e=>e.name===s)}getModelUniqueFields(s){return this.models.find(({name:e})=>(0,change_case_helpers_1.pascalCase)(e)===(0,change_case_helpers_1.pascalCase)(s))?.fields.filter(({isUnique:e})=>e)}getModelRelations(s){return this.models.find(e=>(0,change_case_helpers_1.pascalCase)(e.name)===(0,change_case_helpers_1.pascalCase)(s))?.fields.filter(e=>e.isRelation)}getModelsAsArrayOfStrings(){return this.models.map(({name:s})=>s)}}exports.PrismaSchemaParser=PrismaSchemaParser;const prismaSchemaParser=new PrismaSchemaParser;exports.default=prismaSchemaParser;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prisma-schema-parser.js","sourceRoot":"","sources":["../../../../src/utils/prisma/prisma-schema-parser.ts"],"names":[],"mappings":"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","sourcesContent":["import path from \"path\";\nimport { PrismaSchema, PrismaModel, PrismaEnum, PrismaField } from \"./types\";\nimport { camelCase, pascalCase } from \"../helpers/change-case.helpers\";\nimport fs from \"fs\";\n\n/**\n * A parser for Prisma schema files that extracts models, enums, and their properties.\n *\n * @example\n * ```typescript\n * const schemaContent = `\n * model User {\n * id Int @id @default(autoincrement())\n * email String @unique\n * }\n * `;\n * const parser = new PrismaSchemaParser();\n * const schema = parser.parse();\n * ```\n */\nexport class PrismaSchemaParser {\n /** Collection of parsed enum definitions */\n enums: PrismaEnum[] = [];\n /** Collection of parsed model definitions */\n models: PrismaModel[] = [];\n /** Current loaded prisma schemas content as a single file */\n prismaSchemasContent: string = \"\";\n parsed: boolean = false;\n\n constructor() {\n this.parse();\n }\n\n /**\n * Parses the Prisma schema and extracts all models and enums.\n *\n * @returns The parsed schema containing arrays of models and enums\n */\n parse(\n { override }: { override: boolean } = { override: false }\n ): PrismaSchema {\n if (!this.parsed || override) {\n this.enums = this.extractEnums();\n this.models = this.extractModels();\n this.parsed = true;\n }\n\n return {\n models: this.models,\n enums: this.enums,\n };\n }\n\n /**\n * Extracts all enum definitions from the schema.\n *\n * @private\n * @returns Array of parsed enum objects\n */\n private extractEnums(): PrismaEnum[] {\n const enums: PrismaEnum[] = [];\n const schema = this.getPrismaSchemasContent() || \"\";\n const enumBlocks = schema.match(/enum\\s+\\w+\\s*\\{[^}]*\\}/g) || [];\n\n for (const block of enumBlocks) {\n const enumObj = this.parseEnumBlock(block);\n if (enumObj) {\n enums.push(enumObj);\n }\n }\n\n return enums;\n }\n\n /**\n * Parses a single enum block and extracts its name and values.\n *\n * @private\n * @param block - The enum block string (e.g., \"enum Status { ACTIVE INACTIVE }\")\n * @returns The parsed enum object or null if parsing fails\n */\n private parseEnumBlock(block: string): PrismaEnum | null {\n const nameMatch = block.match(/enum\\s+(\\w+)/);\n if (!nameMatch) return null;\n\n const name = nameMatch[1];\n const values = block\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(\n (line) =>\n line &&\n !line.startsWith(\"enum\") &&\n !line.startsWith(\"{\") &&\n !line.startsWith(\"}\")\n )\n .map((line) => line.replace(/,$/, \"\"));\n\n return { name, values };\n }\n\n /**\n * Extracts all model definitions from the schema.\n *\n * @private\n * @returns Array of parsed model objects\n */\n private extractModels(): PrismaModel[] {\n const models: PrismaModel[] = [];\n const modelBlocks = this.extractModelBlocks();\n\n for (const block of modelBlocks) {\n const model = this.parseModelBlock(block);\n if (model) {\n models.push(model);\n }\n }\n\n return models;\n }\n\n /**\n * Extracts raw model block strings from the schema using regex.\n *\n * @private\n * @returns Array of model block strings\n */\n private extractModelBlocks(): string[] {\n const modelRegex = /model\\s+\\w+\\s*\\{((?:[^{}]*(?:\\{[^{}]*\\}[^{}]*)*)*)\\}/g;\n const schema = this.getPrismaSchemasContent() || \"\";\n return schema.match(modelRegex) || [];\n }\n\n /**\n * Parses a single model block and extracts its name, fields, and metadata.\n *\n * @private\n * @param block - The model block string\n * @returns The parsed model object or null if parsing fails\n */\n private parseModelBlock(block: string): PrismaModel | null {\n const nameMatch = block.match(/model\\s+(\\w+)/);\n if (!nameMatch) return null;\n\n const name = nameMatch[1];\n const fields = this.parseFields(block);\n\n // Check for @@map directive\n const mapMatch = block.match(/@@map\\s*\\(\\s*\"([^\"]+)\"\\s*\\)/);\n const mapName = mapMatch ? mapMatch[1] : undefined;\n\n return { name, fields, mapName };\n }\n\n /**\n * Parses all field definitions within a model block.\n *\n * @private\n * @param block - The model block string containing field definitions\n * @returns Array of parsed field objects\n */\n private parseFields(block: string): PrismaField[] {\n const fields: PrismaField[] = [];\n const fieldLines = block\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(\n (line) =>\n line &&\n !line.startsWith(\"model\") &&\n !line.startsWith(\"{\") &&\n !line.startsWith(\"}\")\n );\n\n for (const line of fieldLines) {\n if (line.startsWith(\"//\") || line.startsWith(\"@@\")) continue;\n\n const field = this.parseFieldLine(line);\n if (field) {\n fields.push(field);\n }\n }\n\n return fields;\n }\n\n /**\n * Parses a single field line and extracts all field properties.\n *\n * @private\n * @param line - A single field definition line (e.g., \"id Int @id @default(autoincrement())\")\n * @returns The parsed field object or null if parsing fails\n *\n * @example\n * ```typescript\n * // Input: \"email String? @unique @default(\"user@example.com\")\"\n * // Output: {\n * // name: \"email\",\n * // type: \"String\",\n * // isOptional: true,\n * // isArray: false,\n * // defaultValue: \"user@example.com\",\n * // isId: false,\n * // isUnique: true,\n * // attributes: [\"@unique\", \"@default(\\\"user@example.com\\\")\"]\n * // }\n * ```\n */\n private parseFieldLine(line: string): PrismaField | null {\n const fieldMatch = line.match(/^(\\w+)\\s+(\\w+(?:\\[\\])?)\\??\\s*(.*)/);\n if (!fieldMatch) return null;\n\n const [, name, typeWithArray, attributesStr] = fieldMatch;\n const isArray = typeWithArray.endsWith(\"[]\");\n const type = isArray ? typeWithArray.slice(0, -2) : typeWithArray;\n const isOptional = line.includes(\"?\");\n\n const attributes = attributesStr\n .split(/\\s+/)\n .filter((attr) => attr.startsWith(\"@\"));\n\n // Extract default value\n let defaultValue: any = undefined;\n const defaultMatch = attributesStr.match(/@default\\(([^)]+)\\)/);\n if (defaultMatch) {\n defaultValue = this.parseDefaultValue(defaultMatch[1]);\n }\n\n // Extract connection field from @relation\n let connectionField = \"\";\n const relationMatch = attributesStr.match(\n /@relation\\([^)]*fields:\\s*\\[([^\\]]+)\\]/\n );\n if (relationMatch) {\n // Extract the field name and clean it up (remove quotes and whitespace)\n connectionField = relationMatch[1].trim().replace(/['\"]/g, \"\");\n }\n\n const isId = attributes.some((attr) => attr.startsWith(\"@id\"));\n const isUnique = attributes.some((attr) => attr.startsWith(\"@unique\"));\n const models = this.models;\n\n return {\n name,\n type,\n isOptional,\n isRelation:\n models.map((model) => model.name).includes(type) ||\n this.getPrismaSchemasContent().includes(`model ${type} {`),\n isArray,\n connectionField,\n defaultValue,\n isId,\n isUnique,\n attributes,\n };\n }\n\n /**\n * Parses a default value string and converts it to the appropriate JavaScript type.\n *\n * @private\n * @param defaultStr - The default value string from @default() attribute\n * @returns The parsed default value in appropriate JavaScript type, or undefined for functions\n *\n * @example\n * ```typescript\n * parseDefaultValue('\"hello\"') // returns \"hello\"\n * parseDefaultValue('true') // returns true\n * parseDefaultValue('42') // returns 42\n * parseDefaultValue('3.14') // returns 3.14\n * parseDefaultValue('ACTIVE') // returns \"ACTIVE\" (enum value)\n * parseDefaultValue('now()') // returns undefined (function)\n * ```\n */\n private parseDefaultValue(defaultStr: string): any {\n defaultStr = defaultStr.trim();\n // Handle string values\n if (defaultStr.startsWith('\"') && defaultStr.endsWith('\"'))\n return defaultStr.slice(1, -1);\n // Handle boolean values\n if (defaultStr === \"true\") return true;\n if (defaultStr === \"false\") return false;\n // Handle numeric values (including negative numbers)\n if (/^-?\\d+$/.test(defaultStr)) return parseInt(defaultStr, 10);\n if (/^-?\\d+\\.\\d+$/.test(defaultStr)) return parseFloat(defaultStr);\n // Handle enum values (no quotes, not a function)\n if (!defaultStr.includes(\"(\")) return defaultStr;\n // Handle functions (like now(), auto(), etc.)\n if (defaultStr.includes(\"(\"))\n // For MongoDB, we'll skip function defaults as they're handled by the DB\n return undefined;\n return defaultStr;\n }\n\n getPrismaSchemasContent(): string {\n if (this.prismaSchemasContent) return this.prismaSchemasContent;\n\n const models: string[] = [];\n const modelRegex = /model\\s+(\\w+)\\s*{/g;\n\n const prismaContent: string[] = [];\n const prismaPath = path.resolve(process.cwd(), \"prisma\");\n\n const files = this.getAllPrismaFiles(prismaPath);\n\n for (const file of files) {\n const content = fs.readFileSync(file, \"utf-8\");\n if (!prismaContent?.includes?.(content)) prismaContent.push(content);\n }\n\n // Gather the content of all *.prisma files into single one\n const content = prismaContent\n .join(\"\\n\")\n .replace(modelRegex, (_, modelName) => {\n if (!models?.includes?.(modelName))\n models.push(camelCase(modelName.trim()));\n return `model ${modelName} {`;\n });\n\n return content;\n }\n\n private getAllPrismaFiles(dirPath: string, fileList: string[] = []) {\n const files = fs.readdirSync(dirPath);\n\n files?.forEach((file) => {\n const filePath = path.join(dirPath, file);\n const stat = fs.statSync(filePath);\n\n // Skip migrations folder\n if (stat.isDirectory() && file !== \"migrations\") {\n fileList = this.getAllPrismaFiles(filePath, fileList);\n } else if (stat.isFile() && file.endsWith(\".prisma\")) {\n fileList.push(filePath);\n }\n });\n\n return fileList;\n }\n /**\n * Checks if a given type name corresponds to a defined enum.\n *\n * @param typeName - The type name to check\n * @returns True if the type is an enum, false otherwise\n *\n * @example\n * ```typescript\n * const parser = new PrismaSchemaParser(schemaWithStatusEnum);\n * parser.parse();\n * parser.isEnum('Status'); // true\n * parser.isEnum('String'); // false\n * ```\n */\n isEnum(typeName: string): boolean {\n return this.enums.some((e) => e.name === typeName);\n }\n\n /**\n * Checks if a given type name corresponds to a defined model.\n *\n * @param typeName - The type name to check\n * @returns True if the type is a model, false otherwise\n *\n * @example\n * ```typescript\n * const parser = new PrismaSchemaParser(schemaWithUserModel);\n * parser.parse();\n * parser.isModel('User'); // true\n * parser.isModel('String'); // false\n * ```\n */\n isModel(typeName: string): boolean {\n return this.models.some((m) => m.name === typeName);\n }\n\n getModelUniqueFields(modelName: string) {\n return this.models\n .find(({ name }) => pascalCase(name) === pascalCase(modelName))\n ?.fields.filter(({ isUnique }) => isUnique);\n }\n\n getModelRelations(modelName: string) {\n return this.models\n .find((model) => pascalCase(model.name) === pascalCase(modelName))\n ?.fields.filter((field) => field.isRelation);\n }\n\n getModelsAsArrayOfStrings() {\n return this.models.map(({ name }) => name);\n }\n}\n\nconst prismaSchemaParser = new PrismaSchemaParser();\n\nexport default prismaSchemaParser;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/utils/prisma/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface PrismaField {\n name: string;\n type: string;\n isOptional: boolean;\n isArray: boolean;\n connectionField?: string;\n isRelation: boolean;\n defaultValue?: any;\n isId?: boolean;\n isUnique?: boolean;\n attributes: string[];\n}\n\nexport interface PrismaModel {\n name: string;\n fields: PrismaField[];\n mapName?: string;\n}\n\nexport interface PrismaEnum {\n name: string;\n values: string[];\n}\n\nexport interface PrismaSchema {\n models: PrismaModel[];\n enums: PrismaEnum[];\n}\n\nexport type JsonSchemaProperty = {\n type: string;\n default?: any;\n items?: { type: string };\n format?: string;\n enum?: string[];\n $ref?: string;\n [key: string]: any;\n} & Partial<JsonSchema>;\n\nexport interface JsonSchema {\n type: string;\n properties?: { [key: string]: JsonSchemaProperty };\n items?: { $ref?: string } | JsonSchema;\n required?: string[];\n anyOf?: { required: string[] }[];\n}\n"]}
|