arkos 1.4.10-beta → 1.4.11-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/dist/cjs/app.js +1 -1
- package/dist/cjs/app.js.map +1 -1
- package/dist/cjs/modules/auth/auth.router.js +39 -4
- package/dist/cjs/modules/auth/auth.router.js.map +1 -1
- package/dist/cjs/modules/auth/utils/auth-openapi-generator.js +372 -0
- package/dist/cjs/modules/auth/utils/auth-openapi-generator.js.map +1 -0
- package/dist/cjs/modules/auth/utils/auth-prisma-json-schema-generator.js +102 -0
- package/dist/cjs/modules/auth/utils/auth-prisma-json-schema-generator.js.map +1 -0
- package/dist/cjs/modules/base/base.middlewares.js +1 -1
- package/dist/cjs/modules/base/base.middlewares.js.map +1 -1
- package/dist/cjs/modules/base/types/base.service.types.js.map +1 -1
- package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +46 -14
- 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 +17 -5
- package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
- package/dist/cjs/modules/base/utils/model-openapi-generator.js +443 -0
- package/dist/cjs/modules/base/utils/model-openapi-generator.js.map +1 -0
- package/dist/cjs/modules/error-handler/error-handler.controller.js +0 -2
- package/dist/cjs/modules/error-handler/error-handler.controller.js.map +1 -1
- package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +0 -106
- package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
- package/dist/cjs/modules/file-upload/file-upload.router.js +19 -0
- package/dist/cjs/modules/file-upload/file-upload.router.js.map +1 -1
- package/dist/cjs/modules/file-upload/utils/file-upload-json-schema-generator.js +351 -0
- package/dist/cjs/modules/file-upload/utils/file-upload-json-schema-generator.js.map +1 -0
- package/dist/cjs/modules/swagger/swagger.router.js +35 -16
- package/dist/cjs/modules/swagger/swagger.router.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js +1 -2
- package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/openapi-schema-converter.js +68 -31
- package/dist/cjs/modules/swagger/utils/helpers/openapi-schema-converter.js.map +1 -1
- package/dist/cjs/server.js +0 -6
- package/dist/cjs/server.js.map +1 -1
- package/dist/cjs/types/arkos-config.js.map +1 -1
- package/dist/cjs/types/{arkos-config/utils.js → arkos-prisma-input.bak.js} +1 -1
- package/dist/cjs/types/arkos-prisma-input.bak.js.map +1 -0
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/utils/arkos-router/arkos-router-openapi-manager.js +3 -12
- package/dist/cjs/utils/arkos-router/arkos-router-openapi-manager.js.map +1 -1
- package/dist/cjs/utils/arkos-router/index.js +47 -8
- package/dist/cjs/utils/arkos-router/index.js.map +1 -1
- package/dist/cjs/utils/arkos-router/types/openapi-config.js.map +1 -1
- package/dist/cjs/utils/arkos-router/utils/helpers/index.js +15 -2
- package/dist/cjs/utils/arkos-router/utils/helpers/index.js.map +1 -1
- package/dist/cjs/utils/cli/generate.js +4 -4
- package/dist/cjs/utils/cli/generate.js.map +1 -1
- package/dist/cjs/utils/cli/index.js +11 -11
- package/dist/cjs/utils/cli/index.js.map +1 -1
- package/dist/cjs/utils/cli/utils/cli.helpers.js +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/class-validator/create-dto-template.js +29 -5
- package/dist/cjs/utils/cli/utils/template-generator/templates/class-validator/create-dto-template.js.map +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/class-validator/update-dto-template.js +26 -5
- package/dist/cjs/utils/cli/utils/template-generator/templates/class-validator/update-dto-template.js.map +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/class-validator-dto-generator.js +52 -0
- package/dist/cjs/utils/cli/utils/template-generator/templates/class-validator-dto-generator.js.map +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/zod/create-schema-template.js +10 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/zod/create-schema-template.js.map +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/zod/update-schema-template.js +9 -2
- package/dist/cjs/utils/cli/utils/template-generator/templates/zod/update-schema-template.js.map +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/zod-schema-generator.js +26 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/zod-schema-generator.js.map +1 -1
- package/dist/cjs/utils/helpers/routers.helpers.js +2 -4
- package/dist/cjs/utils/helpers/routers.helpers.js.map +1 -1
- package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +144 -257
- package/dist/cjs/utils/prisma/prisma-json-schema-generator.js.map +1 -1
- package/dist/cjs/utils/prisma/prisma-schema-parser.js +15 -2
- package/dist/cjs/utils/prisma/prisma-schema-parser.js.map +1 -1
- package/dist/cjs/utils/prisma/types.js.map +1 -1
- package/dist/esm/app.js +1 -1
- package/dist/esm/app.js.map +1 -1
- package/dist/esm/modules/auth/auth.router.js +39 -4
- package/dist/esm/modules/auth/auth.router.js.map +1 -1
- package/dist/esm/modules/auth/utils/auth-openapi-generator.js +367 -0
- package/dist/esm/modules/auth/utils/auth-openapi-generator.js.map +1 -0
- package/dist/esm/modules/auth/utils/auth-prisma-json-schema-generator.js +97 -0
- package/dist/esm/modules/auth/utils/auth-prisma-json-schema-generator.js.map +1 -0
- package/dist/esm/modules/base/base.middlewares.js +1 -1
- package/dist/esm/modules/base/base.middlewares.js.map +1 -1
- package/dist/esm/modules/base/types/base.service.types.js.map +1 -1
- package/dist/esm/modules/base/utils/helpers/base.router.helpers.js +46 -13
- 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 +17 -5
- package/dist/esm/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
- package/dist/esm/modules/base/utils/model-openapi-generator.js +438 -0
- package/dist/esm/modules/base/utils/model-openapi-generator.js.map +1 -0
- package/dist/esm/modules/error-handler/error-handler.controller.js +0 -2
- package/dist/esm/modules/error-handler/error-handler.controller.js.map +1 -1
- package/dist/esm/modules/error-handler/utils/error-handler.helpers.js +0 -87
- package/dist/esm/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
- package/dist/esm/modules/file-upload/file-upload.router.js +19 -0
- package/dist/esm/modules/file-upload/file-upload.router.js.map +1 -1
- package/dist/esm/modules/file-upload/utils/file-upload-json-schema-generator.js +346 -0
- package/dist/esm/modules/file-upload/utils/file-upload-json-schema-generator.js.map +1 -0
- package/dist/esm/modules/swagger/swagger.router.js +35 -16
- package/dist/esm/modules/swagger/swagger.router.js.map +1 -1
- package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.js +1 -2
- package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.js.map +1 -1
- package/dist/esm/modules/swagger/utils/helpers/openapi-schema-converter.js +68 -31
- package/dist/esm/modules/swagger/utils/helpers/openapi-schema-converter.js.map +1 -1
- package/dist/esm/server.js +0 -5
- package/dist/esm/server.js.map +1 -1
- package/dist/esm/types/arkos-config.js.map +1 -1
- package/dist/esm/types/arkos-prisma-input.bak.js +2 -0
- package/dist/esm/types/arkos-prisma-input.bak.js.map +1 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/utils/arkos-router/arkos-router-openapi-manager.js +3 -12
- package/dist/esm/utils/arkos-router/arkos-router-openapi-manager.js.map +1 -1
- package/dist/esm/utils/arkos-router/index.js +47 -8
- package/dist/esm/utils/arkos-router/index.js.map +1 -1
- package/dist/esm/utils/arkos-router/types/openapi-config.js.map +1 -1
- package/dist/esm/utils/arkos-router/utils/helpers/index.js +15 -2
- package/dist/esm/utils/arkos-router/utils/helpers/index.js.map +1 -1
- package/dist/esm/utils/cli/generate.js +4 -4
- package/dist/esm/utils/cli/generate.js.map +1 -1
- package/dist/esm/utils/cli/index.js +11 -11
- package/dist/esm/utils/cli/index.js.map +1 -1
- package/dist/esm/utils/cli/utils/cli.helpers.js +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/class-validator/create-dto-template.js +29 -5
- package/dist/esm/utils/cli/utils/template-generator/templates/class-validator/create-dto-template.js.map +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/class-validator/update-dto-template.js +26 -5
- package/dist/esm/utils/cli/utils/template-generator/templates/class-validator/update-dto-template.js.map +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/class-validator-dto-generator.js +52 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/class-validator-dto-generator.js.map +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/zod/create-schema-template.js +10 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/zod/create-schema-template.js.map +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/zod/update-schema-template.js +9 -2
- package/dist/esm/utils/cli/utils/template-generator/templates/zod/update-schema-template.js.map +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/zod-schema-generator.js +26 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/zod-schema-generator.js.map +1 -1
- package/dist/esm/utils/helpers/routers.helpers.js +2 -4
- package/dist/esm/utils/helpers/routers.helpers.js.map +1 -1
- package/dist/esm/utils/prisma/prisma-json-schema-generator.js +144 -257
- package/dist/esm/utils/prisma/prisma-json-schema-generator.js.map +1 -1
- package/dist/esm/utils/prisma/prisma-schema-parser.js +15 -2
- package/dist/esm/utils/prisma/prisma-schema-parser.js.map +1 -1
- package/dist/esm/utils/prisma/types.js.map +1 -1
- package/dist/types/modules/auth/utils/auth-openapi-generator.d.ts +9 -0
- package/dist/types/modules/auth/utils/auth-prisma-json-schema-generator.d.ts +13 -0
- package/dist/types/modules/base/base.middlewares.d.ts +3 -0
- package/dist/types/modules/base/types/base.service.types.d.ts +0 -3
- package/dist/types/modules/base/utils/helpers/base.router.helpers.d.ts +0 -1
- package/dist/types/modules/base/utils/helpers/base.service.helpers.d.ts +1 -1
- package/dist/types/modules/base/utils/model-openapi-generator.d.ts +12 -0
- package/dist/types/modules/error-handler/utils/error-handler.helpers.d.ts +0 -19
- package/dist/types/modules/file-upload/utils/file-upload-json-schema-generator.d.ts +12 -0
- package/dist/types/modules/swagger/utils/helpers/get-swagger-default-configs.d.ts +1 -2
- package/dist/types/modules/swagger/utils/helpers/openapi-schema-converter.d.ts +27 -3
- package/dist/types/server.d.ts +0 -6
- package/dist/types/types/arkos-config.d.ts +1 -1
- package/dist/types/types/arkos-prisma-input.bak.d.ts +237 -0
- package/dist/types/types/index.d.ts +0 -48
- package/dist/types/utils/arkos-router/types/openapi-config.d.ts +3 -2
- package/dist/types/utils/helpers/routers.helpers.d.ts +1 -1
- package/dist/types/utils/prisma/prisma-json-schema-generator.d.ts +12 -42
- package/dist/types/utils/prisma/prisma-schema-parser.d.ts +2 -0
- package/dist/types/utils/prisma/types.d.ts +2 -1
- package/package.json +3 -1
- package/dist/cjs/components/arkos-policy/index.js +0 -38
- package/dist/cjs/components/arkos-policy/index.js.map +0 -1
- package/dist/cjs/components/arkos-policy/types.js +0 -3
- package/dist/cjs/components/arkos-policy/types.js.map +0 -1
- package/dist/cjs/exports/config.js +0 -6
- package/dist/cjs/exports/config.js.map +0 -1
- package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js +0 -80
- package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js.map +0 -1
- package/dist/cjs/modules/swagger/utils/built-in-route-path-object-manager.js +0 -7
- package/dist/cjs/modules/swagger/utils/built-in-route-path-object-manager.js.map +0 -1
- package/dist/cjs/modules/swagger/utils/get-open-api-login-html.js +0 -276
- package/dist/cjs/modules/swagger/utils/get-open-api-login-html.js.map +0 -1
- package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +0 -482
- package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +0 -1
- package/dist/cjs/modules/swagger/utils/helpers/get-file-upload-json-schema-paths.js +0 -505
- package/dist/cjs/modules/swagger/utils/helpers/get-file-upload-json-schema-paths.js.map +0 -1
- package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js +0 -37
- package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +0 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +0 -50
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +0 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +0 -32
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +0 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js +0 -49
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js.map +0 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +0 -34
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js.map +0 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +0 -508
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js.map +0 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +0 -573
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js.map +0 -1
- package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +0 -261
- package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +0 -1
- package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js +0 -114
- package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js.map +0 -1
- package/dist/cjs/paths.js +0 -9
- package/dist/cjs/paths.js.map +0 -1
- package/dist/cjs/types/arkos-config/utils.js.map +0 -1
- package/dist/cjs/types/arkos.js +0 -3
- package/dist/cjs/types/arkos.js.map +0 -1
- package/dist/cjs/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js +0 -152
- package/dist/cjs/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js.map +0 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/policy-template.js +0 -53
- package/dist/cjs/utils/cli/utils/template-generator/templates/policy-template.js.map +0 -1
- package/dist/cjs/utils/helpers/exit-error.js +0 -12
- package/dist/cjs/utils/helpers/exit-error.js.map +0 -1
- package/dist/cjs/utils/initialize-app.js +0 -56
- package/dist/cjs/utils/initialize-app.js.map +0 -1
- package/dist/cjs/utils/setup-app.js +0 -119
- package/dist/cjs/utils/setup-app.js.map +0 -1
- package/dist/esm/components/arkos-policy/index.js +0 -32
- package/dist/esm/components/arkos-policy/index.js.map +0 -1
- package/dist/esm/components/arkos-policy/types.js +0 -2
- package/dist/esm/components/arkos-policy/types.js.map +0 -1
- package/dist/esm/exports/config.js +0 -3
- package/dist/esm/exports/config.js.map +0 -1
- package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js +0 -76
- package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js.map +0 -1
- package/dist/esm/modules/swagger/utils/built-in-route-path-object-manager.js +0 -5
- package/dist/esm/modules/swagger/utils/built-in-route-path-object-manager.js.map +0 -1
- package/dist/esm/modules/swagger/utils/get-open-api-login-html.js +0 -273
- package/dist/esm/modules/swagger/utils/get-open-api-login-html.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +0 -477
- package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/get-file-upload-json-schema-paths.js +0 -499
- package/dist/esm/modules/swagger/utils/helpers/get-file-upload-json-schema-paths.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js +0 -34
- package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +0 -44
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +0 -26
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js +0 -46
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +0 -28
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +0 -502
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +0 -567
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js +0 -256
- package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js +0 -103
- package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js.map +0 -1
- package/dist/esm/paths.js +0 -3
- package/dist/esm/paths.js.map +0 -1
- package/dist/esm/types/arkos-config/utils.js +0 -2
- package/dist/esm/types/arkos-config/utils.js.map +0 -1
- package/dist/esm/types/arkos.js +0 -2
- package/dist/esm/types/arkos.js.map +0 -1
- package/dist/esm/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js +0 -146
- package/dist/esm/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js.map +0 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/policy-template.js +0 -47
- package/dist/esm/utils/cli/utils/template-generator/templates/policy-template.js.map +0 -1
- package/dist/esm/utils/helpers/exit-error.js +0 -6
- package/dist/esm/utils/helpers/exit-error.js.map +0 -1
- package/dist/esm/utils/initialize-app.js +0 -50
- package/dist/esm/utils/initialize-app.js.map +0 -1
- package/dist/esm/utils/setup-app.js +0 -113
- package/dist/esm/utils/setup-app.js.map +0 -1
- package/dist/types/components/arkos-policy/index.d.ts +0 -31
- package/dist/types/components/arkos-policy/types.d.ts +0 -21
- package/dist/types/exports/config.d.ts +0 -2
- package/dist/types/modules/base/utils/helpers/base.controller.helpers.d.ts +0 -4
- package/dist/types/modules/swagger/utils/built-in-route-path-object-manager.d.ts +0 -4
- package/dist/types/modules/swagger/utils/get-open-api-login-html.d.ts +0 -1
- package/dist/types/modules/swagger/utils/helpers/get-authentication-json-schema-paths.d.ts +0 -4
- package/dist/types/modules/swagger/utils/helpers/get-file-upload-json-schema-paths.d.ts +0 -3
- package/dist/types/modules/swagger/utils/helpers/get-system-json-schema-paths.d.ts +0 -2
- package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.d.ts +0 -1
- package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.d.ts +0 -2
- package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.d.ts +0 -4
- package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.d.ts +0 -1
- package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.d.ts +0 -3
- package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.d.ts +0 -3
- package/dist/types/modules/swagger/utils/helpers/missing-json-schemas-generator.d.ts +0 -77
- package/dist/types/modules/swagger/utils/helpers/swagger.router.helpers.d.ts +0 -20
- package/dist/types/paths.d.ts +0 -1
- package/dist/types/types/arkos-config/utils.d.ts +0 -35
- package/dist/types/types/arkos.d.ts +0 -31
- package/dist/types/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.d.ts +0 -7
- package/dist/types/utils/cli/utils/template-generator/templates/policy-template.d.ts +0 -2
- package/dist/types/utils/helpers/exit-error.d.ts +0 -1
- package/dist/types/utils/initialize-app.d.ts +0 -2
- package/dist/types/utils/setup-app.d.ts +0 -2
|
@@ -49,7 +49,7 @@ function throwErrorIfApiActionIsInvalid(apiAction) {
|
|
|
49
49
|
if (apiAction && !prismaOperations.includes(apiAction))
|
|
50
50
|
throw new app_error_1.default(`Unknown value "${apiAction}" for apiAction field, available values are ${prismaOperations.join(", ")}.`, 400, "InvalidApiAction");
|
|
51
51
|
}
|
|
52
|
-
function handleRelationFieldsInBody(body, relationFields, ignoreActions = [], isRelation = false) {
|
|
52
|
+
function handleRelationFieldsInBody(body, relationFields, ignoreActions = [], isRelation = false, parentOperation = null) {
|
|
53
53
|
body = JSON.parse(JSON.stringify(body));
|
|
54
54
|
let mutableBody = { ...body };
|
|
55
55
|
relationFields?.list?.forEach((field) => {
|
|
@@ -89,7 +89,7 @@ function handleRelationFieldsInBody(body, relationFields, ignoreActions = [], is
|
|
|
89
89
|
let nestedRelations = getGroupedModelReations(field.type);
|
|
90
90
|
let dataToPush = { ...bodyField };
|
|
91
91
|
if (nestedRelations?.singular || nestedRelations?.list) {
|
|
92
|
-
dataToPush = handleRelationFieldsInBody(dataToPush, nestedRelations, ignoreActions, true);
|
|
92
|
+
dataToPush = handleRelationFieldsInBody(dataToPush, nestedRelations, ignoreActions, true, "create");
|
|
93
93
|
}
|
|
94
94
|
if (dataToPush?.apiAction) {
|
|
95
95
|
const { apiAction, ...rest } = dataToPush;
|
|
@@ -99,6 +99,12 @@ function handleRelationFieldsInBody(body, relationFields, ignoreActions = [], is
|
|
|
99
99
|
createData.push(dataToPush);
|
|
100
100
|
}
|
|
101
101
|
else {
|
|
102
|
+
if (parentOperation === "create") {
|
|
103
|
+
const { apiAction, ...cleanedData } = bodyField;
|
|
104
|
+
throwErrorIfApiActionIsInvalid(apiAction);
|
|
105
|
+
connectData.push(cleanedData);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
102
108
|
const { apiAction, ...data } = bodyField;
|
|
103
109
|
let foreignKeyFieldName = bodyField?.id ? "id" : "";
|
|
104
110
|
let foreignKeyFieldValue = bodyField?.id ? bodyField.id : "";
|
|
@@ -118,7 +124,7 @@ function handleRelationFieldsInBody(body, relationFields, ignoreActions = [], is
|
|
|
118
124
|
let nestedRelations = getGroupedModelReations(field.type);
|
|
119
125
|
let dataToPush = data;
|
|
120
126
|
if (nestedRelations?.singular || nestedRelations?.list) {
|
|
121
|
-
dataToPush = handleRelationFieldsInBody(data, nestedRelations, ignoreActions, true);
|
|
127
|
+
dataToPush = handleRelationFieldsInBody(data, nestedRelations, ignoreActions, true, "update");
|
|
122
128
|
}
|
|
123
129
|
updateData.push({
|
|
124
130
|
where: { [foreignKeyFieldName]: foreignKeyFieldValue },
|
|
@@ -168,16 +174,22 @@ function handleRelationFieldsInBody(body, relationFields, ignoreActions = [], is
|
|
|
168
174
|
dataToCreate = rest;
|
|
169
175
|
}
|
|
170
176
|
if (nestedRelations?.singular || nestedRelations?.list) {
|
|
171
|
-
dataToCreate = handleRelationFieldsInBody(dataToCreate, nestedRelations, ignoreActions, true);
|
|
177
|
+
dataToCreate = handleRelationFieldsInBody(dataToCreate, nestedRelations, ignoreActions, true, "create");
|
|
172
178
|
}
|
|
173
179
|
mutableBody[field.name] = { create: dataToCreate };
|
|
174
180
|
}
|
|
175
181
|
else {
|
|
182
|
+
if (parentOperation === "create") {
|
|
183
|
+
const { apiAction, ...cleanedData } = relationData;
|
|
184
|
+
throwErrorIfApiActionIsInvalid(apiAction);
|
|
185
|
+
mutableBody[field.name] = { connect: cleanedData };
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
176
188
|
const { id, apiAction, ...data } = relationData;
|
|
177
189
|
throwErrorIfApiActionIsInvalid(apiAction);
|
|
178
190
|
let dataToUpdate = data;
|
|
179
191
|
if (nestedRelations?.singular || nestedRelations?.list) {
|
|
180
|
-
dataToUpdate = handleRelationFieldsInBody(data, nestedRelations, ignoreActions, true);
|
|
192
|
+
dataToUpdate = handleRelationFieldsInBody(data, nestedRelations, ignoreActions, true, "update");
|
|
181
193
|
}
|
|
182
194
|
mutableBody[field.name] = {
|
|
183
195
|
update: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.service.helpers.js","sourceRoot":"","sources":["../../../../../../src/modules/base/utils/helpers/base.service.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import prismaSchemaParser from \"../../../../utils/prisma/prisma-schema-parser\";\nimport { PrismaField } from \"../../../../utils/prisma/types\";\nimport AppError from \"../../../error-handler/utils/app-error\";\n\n/**\n * Removes apiAction field from an object and all nested objects\n *\n * @param {Record<string, any>} obj - The object to clean\n * @returns {Record<string, any>} - The cleaned object\n */\nexport function removeApiAction(obj: Record<string, any>): Record<string, any> {\n if (!obj || typeof obj !== \"object\") return obj;\n\n const result: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(obj)) {\n if (key === \"apiAction\") continue;\n\n if (Array.isArray(value)) {\n result[key] = value.map((item) =>\n typeof item === \"object\" && item !== null ? removeApiAction(item) : item\n );\n } else if (typeof value === \"object\" && value !== null) {\n result[key] = removeApiAction(value);\n } else {\n result[key] = value;\n }\n }\n\n return result;\n}\n\nconst prismaOperations = [\n \"create\",\n \"connect\",\n \"update\",\n \"delete\",\n \"disconnect\",\n \"deleteMany\",\n \"connectOrCreate\",\n \"upsert\",\n \"set\",\n];\n\n/**\n * Checks if an object is already formatted as a Prisma relation operation\n *\n * @param {Record<string, any>} obj - The object to check\n * @returns {boolean} - True if the object contains Prisma relation operations\n */\nexport function isPrismaRelationFormat(obj: Record<string, any>): boolean {\n if (!obj || typeof obj !== \"object\") return false;\n\n // Check if any key is a Prisma operation\n return prismaOperations.some((op) => obj?.[op]);\n}\n\nexport function throwErrorIfApiActionIsInvalid(apiAction: string) {\n if (apiAction && !prismaOperations.includes(apiAction))\n throw new AppError(\n `Unknown value \"${apiAction}\" for apiAction field, available values are ${prismaOperations.join(\", \")}.`,\n 400,\n \"InvalidApiAction\"\n );\n}\n\n/**\n * Determines the appropriate Prisma operation (`create`, `connect`, `update`, `delete`, or `disconnect`)\n * for each relation field in the provided body based on its nested data and recursively does the same for each relation field.\n *\n * This function handles the following types of relations:\n * - **One-to-one**\n * - **One-to-many**\n *\n *\n * ### Operation Rules:\n *\n *\n * - **Create**: Used when the nested relation data is provided **without an `id` or unique field**.\n * - **Connect**: Used when the nested relation data contains **only an `id` or a unique field** (e.g., email).\n * - **Update**: Used when the nested relation data contains **both an `id` and additional fields**.\n * - **Delete**: Used when the nested relation data includes **`apiAction: \"delete\"`**.\n * - **Disconnect**: Used when the nested relation data includes **`apiAction: \"disconnect\"`**.\n *\n * The function will preserve existing Prisma operation formats if detected,\n * allowing developers to manually structure relation operations when needed.\n *\n * @param {Record<string, any>} body - The object containing relation fields to be processed.\n * @param {ModelGroupRelationFields} relationFields - List of many-side relation field names (one-to-many).\n * @param {string[]} ignoreActions - Optional list of apiAction values to ignore.\n * @returns {Record<string, any>} The transformed data with appropriate Prisma operations applied.\n */\nexport function handleRelationFieldsInBody(\n body: Record<string, any>,\n relationFields: ModelGroupRelationFields,\n ignoreActions: string[] = [],\n isRelation: boolean = false\n): Record<string, any> {\n body = JSON.parse(JSON.stringify(body));\n let mutableBody = { ...body };\n\n relationFields?.list?.forEach((field) => {\n if (!body?.[field.name]) return;\n\n if (ignoreActions?.includes?.(body[field.name]?.apiAction)) {\n delete mutableBody[field.name];\n return;\n }\n\n if (isPrismaRelationFormat(body[field.name])) return;\n\n if (!Array.isArray(body[field.name])) return;\n\n const createData: any[] = [];\n const connectData: any[] = [];\n const updateData: any[] = [];\n const disconnectData: any[] = [];\n const deleteManyIds: any[] = [];\n\n body[field.name]?.forEach((bodyField: any) => {\n if (ignoreActions?.includes?.(bodyField?.apiAction)) return;\n\n const apiAction = bodyField?.apiAction;\n\n throwErrorIfApiActionIsInvalid(apiAction);\n\n if (apiAction === \"delete\") {\n deleteManyIds.push(bodyField.id);\n } else if (apiAction === \"disconnect\") {\n disconnectData.push({ id: bodyField.id });\n } else if (\n bodyField?.apiAction !== \"update\" &&\n canBeUsedToConnect(field.type, bodyField)\n ) {\n const { apiAction, ...cleanedData } = bodyField;\n\n throwErrorIfApiActionIsInvalid(apiAction);\n connectData.push(cleanedData);\n } else if (bodyField?.apiAction !== \"update\" && !bodyField?.id) {\n let nestedRelations = getGroupedModelReations(field.type);\n\n let dataToPush = { ...bodyField };\n\n if (nestedRelations?.singular || nestedRelations?.list) {\n dataToPush = handleRelationFieldsInBody(\n dataToPush,\n nestedRelations,\n ignoreActions,\n true\n );\n }\n\n if (dataToPush?.apiAction) {\n const { apiAction, ...rest } = dataToPush;\n\n throwErrorIfApiActionIsInvalid(apiAction);\n dataToPush = rest;\n }\n\n createData.push(dataToPush);\n } else {\n const { apiAction, ...data } = bodyField;\n let foreignKeyFieldName = bodyField?.id ? \"id\" : \"\";\n let foreignKeyFieldValue = bodyField?.id ? bodyField.id : \"\";\n\n if (!foreignKeyFieldName) {\n for (const [key, value] of Object.entries(data)) {\n if (canBeUsedToConnect(field.type, { [key]: value })) {\n foreignKeyFieldName = key;\n break;\n }\n }\n\n if (!foreignKeyFieldName)\n throw new AppError(\n \"No unique fields to be used in the prisma where clause\",\n 400,\n \"NoFieldToIsInPrismaWhereClause\",\n { data: body }\n );\n }\n\n foreignKeyFieldValue = data[foreignKeyFieldName];\n delete data[foreignKeyFieldName];\n\n throwErrorIfApiActionIsInvalid(apiAction);\n let nestedRelations = getGroupedModelReations(field.type);\n\n let dataToPush = data;\n if (nestedRelations?.singular || nestedRelations?.list) {\n dataToPush = handleRelationFieldsInBody(\n data,\n nestedRelations,\n ignoreActions,\n true\n );\n }\n\n updateData.push({\n where: { [foreignKeyFieldName]: foreignKeyFieldValue },\n data: dataToPush,\n });\n }\n });\n\n mutableBody[field.name] = {\n ...(createData.length ? { create: createData } : {}),\n ...(connectData.length ? { connect: connectData } : {}),\n ...(updateData.length ? { update: updateData } : {}),\n ...(disconnectData.length ? { disconnect: disconnectData } : {}),\n ...(deleteManyIds.length\n ? { deleteMany: { id: { in: deleteManyIds } } }\n : {}),\n };\n });\n\n relationFields?.singular?.forEach((field) => {\n if (!body?.[field.name]) return;\n\n if (ignoreActions?.includes?.(body[field.name]?.apiAction)) {\n delete mutableBody[field.name];\n return;\n }\n\n if (isPrismaRelationFormat(body[field.name])) {\n return;\n }\n\n const relationData = body[field.name];\n let nestedRelations = getGroupedModelReations(field.type);\n\n if (relationData?.apiAction === \"delete\") {\n mutableBody[field.name] = { delete: true };\n } else if (relationData?.apiAction === \"disconnect\") {\n mutableBody[field.name] = { disconnect: true };\n } else if (\n relationData?.apiAction !== \"update\" &&\n canBeUsedToConnect(field.type, relationData)\n ) {\n const { apiAction, ...cleanedData } = relationData;\n\n throwErrorIfApiActionIsInvalid(apiAction);\n\n mutableBody[field.name] = { connect: cleanedData };\n } else if (relationData?.apiAction !== \"update\" && !relationData?.id) {\n let dataToCreate = { ...relationData };\n\n if (dataToCreate?.apiAction) {\n const { apiAction, ...rest } = dataToCreate;\n throwErrorIfApiActionIsInvalid(apiAction);\n\n dataToCreate = rest;\n }\n\n if (nestedRelations?.singular || nestedRelations?.list) {\n dataToCreate = handleRelationFieldsInBody(\n dataToCreate,\n nestedRelations,\n ignoreActions,\n true\n );\n }\n\n mutableBody[field.name] = { create: dataToCreate };\n } else {\n // If ID and other fields, assume update operation\n const { id, apiAction, ...data } = relationData;\n\n throwErrorIfApiActionIsInvalid(apiAction);\n\n let dataToUpdate = data;\n if (nestedRelations?.singular || nestedRelations?.list) {\n dataToUpdate = handleRelationFieldsInBody(\n data,\n nestedRelations,\n ignoreActions,\n true\n );\n }\n\n mutableBody[field.name] = {\n update: {\n where: { id },\n data: dataToUpdate,\n },\n };\n }\n });\n\n if (mutableBody?.apiAction && !isRelation) {\n throw new AppError(\n \"Invalid usage of apiAction field, it must only be used on relation fields whether single or multiple.\",\n 400,\n {\n data: {\n ...body,\n },\n }\n );\n }\n\n // As a final step, recursively remove any remaining apiAction fields\n return removeApiAction(mutableBody);\n}\n\nexport type ModelGroupRelationFields = ReturnType<\n typeof getGroupedModelReations\n>;\n\nfunction getGroupedModelReations(modelName: string) {\n const relationsFields = prismaSchemaParser.getModelRelations(modelName);\n\n return {\n singular: relationsFields?.filter(\n (field) => field.isRelation && !field.isArray\n ),\n list: relationsFields?.filter((field) => field.isRelation && field.isArray),\n };\n}\n\n/**\n * Checks if a field value can be used to connect to a model\n * This happens when the field contains only an ID or a single unique field\n *\n * @param {string} modelName - The model name to get unique fields for\n * @param {Record<string, any>} bodyField - The field value from the body\n * @returns {boolean} True if the field can be used for a connect operation\n */\nexport function canBeUsedToConnect(\n modelName: string,\n bodyField: Record<string, any> | undefined | null\n): boolean {\n if (!bodyField) return false;\n\n if (bodyField.apiAction && ![\"connect\"]?.includes?.(bodyField.apiAction))\n return false;\n\n if (bodyField.apiAction === \"connect\") return true;\n\n if (Object.keys(bodyField)?.length === 1 && bodyField?.id) return true;\n\n const uniqueFields = prismaSchemaParser.getModelUniqueFields(modelName) || [];\n\n if (Object.keys(bodyField).length === 1 && uniqueFields?.length > 0) {\n const fieldName = Object.keys(bodyField)[0];\n return uniqueFields?.some((field: PrismaField) => field.name === fieldName);\n }\n\n return false;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"base.service.helpers.js","sourceRoot":"","sources":["../../../../../../src/modules/base/utils/helpers/base.service.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import prismaSchemaParser from \"../../../../utils/prisma/prisma-schema-parser\";\nimport { PrismaField } from \"../../../../utils/prisma/types\";\nimport AppError from \"../../../error-handler/utils/app-error\";\n\n/**\n * Removes apiAction field from an object and all nested objects\n *\n * @param {Record<string, any>} obj - The object to clean\n * @returns {Record<string, any>} - The cleaned object\n */\nexport function removeApiAction(obj: Record<string, any>): Record<string, any> {\n if (!obj || typeof obj !== \"object\") return obj;\n\n const result: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(obj)) {\n if (key === \"apiAction\") continue;\n\n if (Array.isArray(value)) {\n result[key] = value.map((item) =>\n typeof item === \"object\" && item !== null ? removeApiAction(item) : item\n );\n } else if (typeof value === \"object\" && value !== null) {\n result[key] = removeApiAction(value);\n } else {\n result[key] = value;\n }\n }\n\n return result;\n}\n\nconst prismaOperations = [\n \"create\",\n \"connect\",\n \"update\",\n \"delete\",\n \"disconnect\",\n \"deleteMany\",\n \"connectOrCreate\",\n \"upsert\",\n \"set\",\n];\n\n/**\n * Checks if an object is already formatted as a Prisma relation operation\n *\n * @param {Record<string, any>} obj - The object to check\n * @returns {boolean} - True if the object contains Prisma relation operations\n */\nexport function isPrismaRelationFormat(obj: Record<string, any>): boolean {\n if (!obj || typeof obj !== \"object\") return false;\n\n // Check if any key is a Prisma operation\n return prismaOperations.some((op) => obj?.[op]);\n}\n\nexport function throwErrorIfApiActionIsInvalid(apiAction: string) {\n if (apiAction && !prismaOperations.includes(apiAction))\n throw new AppError(\n `Unknown value \"${apiAction}\" for apiAction field, available values are ${prismaOperations.join(\", \")}.`,\n 400,\n \"InvalidApiAction\"\n );\n}\n\n/**\n * Determines the appropriate Prisma operation (`create`, `connect`, `update`, `delete`, or `disconnect`)\n * for each relation field in the provided body based on its nested data and recursively does the same for each relation field.\n *\n * This function handles the following types of relations:\n * - **One-to-one**\n * - **One-to-many**\n *\n *\n * ### Operation Rules:\n *\n *\n * - **Create**: Used when the nested relation data is provided **without an `id` or unique field**.\n * - **Connect**: Used when the nested relation data contains **only an `id` or a unique field** (e.g., email).\n * - **Update**: Used when the nested relation data contains **both an `id` and additional fields**.\n * - **Delete**: Used when the nested relation data includes **`apiAction: \"delete\"`**.\n * - **Disconnect**: Used when the nested relation data includes **`apiAction: \"disconnect\"`**.\n *\n * The function will preserve existing Prisma operation formats if detected,\n * allowing developers to manually structure relation operations when needed.\n *\n * @param {Record<string, any>} body - The object containing relation fields to be processed.\n * @param {ModelGroupRelationFields} relationFields - List of many-side relation field names (one-to-many).\n * @param {string[]} ignoreActions - Optional list of apiAction values to ignore.\n * @returns {Record<string, any>} The transformed data with appropriate Prisma operations applied.\n */\nexport function handleRelationFieldsInBody(\n body: Record<string, any>,\n relationFields: ModelGroupRelationFields,\n ignoreActions: string[] = [],\n isRelation: boolean = false,\n parentOperation: \"create\" | \"update\" | null = null\n): Record<string, any> {\n body = JSON.parse(JSON.stringify(body));\n let mutableBody = { ...body };\n\n relationFields?.list?.forEach((field) => {\n if (!body?.[field.name]) return;\n\n if (ignoreActions?.includes?.(body[field.name]?.apiAction)) {\n delete mutableBody[field.name];\n return;\n }\n\n if (isPrismaRelationFormat(body[field.name])) return;\n\n if (!Array.isArray(body[field.name])) return;\n\n const createData: any[] = [];\n const connectData: any[] = [];\n const updateData: any[] = [];\n const disconnectData: any[] = [];\n const deleteManyIds: any[] = [];\n\n body[field.name]?.forEach((bodyField: any) => {\n if (ignoreActions?.includes?.(bodyField?.apiAction)) return;\n\n const apiAction = bodyField?.apiAction;\n\n throwErrorIfApiActionIsInvalid(apiAction);\n\n if (apiAction === \"delete\") {\n deleteManyIds.push(bodyField.id);\n } else if (apiAction === \"disconnect\") {\n disconnectData.push({ id: bodyField.id });\n } else if (\n bodyField?.apiAction !== \"update\" &&\n canBeUsedToConnect(field.type, bodyField)\n ) {\n const { apiAction, ...cleanedData } = bodyField;\n throwErrorIfApiActionIsInvalid(apiAction);\n connectData.push(cleanedData);\n } else if (bodyField?.apiAction !== \"update\" && !bodyField?.id) {\n let nestedRelations = getGroupedModelReations(field.type);\n let dataToPush = { ...bodyField };\n\n if (nestedRelations?.singular || nestedRelations?.list) {\n dataToPush = handleRelationFieldsInBody(\n dataToPush,\n nestedRelations,\n ignoreActions,\n true,\n \"create\"\n );\n }\n\n if (dataToPush?.apiAction) {\n const { apiAction, ...rest } = dataToPush;\n throwErrorIfApiActionIsInvalid(apiAction);\n dataToPush = rest;\n }\n\n createData.push(dataToPush);\n } else {\n if (parentOperation === \"create\") {\n const { apiAction, ...cleanedData } = bodyField;\n throwErrorIfApiActionIsInvalid(apiAction);\n connectData.push(cleanedData);\n return;\n }\n\n const { apiAction, ...data } = bodyField;\n let foreignKeyFieldName = bodyField?.id ? \"id\" : \"\";\n let foreignKeyFieldValue = bodyField?.id ? bodyField.id : \"\";\n\n if (!foreignKeyFieldName) {\n for (const [key, value] of Object.entries(data)) {\n if (canBeUsedToConnect(field.type, { [key]: value })) {\n foreignKeyFieldName = key;\n break;\n }\n }\n\n if (!foreignKeyFieldName)\n throw new AppError(\n \"No unique fields to be used in the prisma where clause\",\n 400,\n \"NoFieldToIsInPrismaWhereClause\",\n { data: body }\n );\n }\n\n foreignKeyFieldValue = data[foreignKeyFieldName];\n delete data[foreignKeyFieldName];\n\n throwErrorIfApiActionIsInvalid(apiAction);\n let nestedRelations = getGroupedModelReations(field.type);\n\n let dataToPush = data;\n if (nestedRelations?.singular || nestedRelations?.list) {\n dataToPush = handleRelationFieldsInBody(\n data,\n nestedRelations,\n ignoreActions,\n true,\n \"update\"\n );\n }\n\n updateData.push({\n where: { [foreignKeyFieldName]: foreignKeyFieldValue },\n data: dataToPush,\n });\n }\n });\n\n mutableBody[field.name] = {\n ...(createData.length ? { create: createData } : {}),\n ...(connectData.length ? { connect: connectData } : {}),\n ...(updateData.length ? { update: updateData } : {}),\n ...(disconnectData.length ? { disconnect: disconnectData } : {}),\n ...(deleteManyIds.length\n ? { deleteMany: { id: { in: deleteManyIds } } }\n : {}),\n };\n });\n\n relationFields?.singular?.forEach((field) => {\n if (!body?.[field.name]) return;\n\n if (ignoreActions?.includes?.(body[field.name]?.apiAction)) {\n delete mutableBody[field.name];\n return;\n }\n\n if (isPrismaRelationFormat(body[field.name])) {\n return;\n }\n\n const relationData = body[field.name];\n let nestedRelations = getGroupedModelReations(field.type);\n\n if (relationData?.apiAction === \"delete\") {\n mutableBody[field.name] = { delete: true };\n } else if (relationData?.apiAction === \"disconnect\") {\n mutableBody[field.name] = { disconnect: true };\n } else if (\n relationData?.apiAction !== \"update\" &&\n canBeUsedToConnect(field.type, relationData)\n ) {\n const { apiAction, ...cleanedData } = relationData;\n throwErrorIfApiActionIsInvalid(apiAction);\n mutableBody[field.name] = { connect: cleanedData };\n } else if (relationData?.apiAction !== \"update\" && !relationData?.id) {\n let dataToCreate = { ...relationData };\n\n if (dataToCreate?.apiAction) {\n const { apiAction, ...rest } = dataToCreate;\n throwErrorIfApiActionIsInvalid(apiAction);\n dataToCreate = rest;\n }\n\n if (nestedRelations?.singular || nestedRelations?.list) {\n dataToCreate = handleRelationFieldsInBody(\n dataToCreate,\n nestedRelations,\n ignoreActions,\n true,\n \"create\"\n );\n }\n\n mutableBody[field.name] = { create: dataToCreate };\n } else {\n if (parentOperation === \"create\") {\n const { apiAction, ...cleanedData } = relationData;\n throwErrorIfApiActionIsInvalid(apiAction);\n mutableBody[field.name] = { connect: cleanedData };\n return;\n }\n\n const { id, apiAction, ...data } = relationData;\n throwErrorIfApiActionIsInvalid(apiAction);\n\n let dataToUpdate = data;\n if (nestedRelations?.singular || nestedRelations?.list) {\n dataToUpdate = handleRelationFieldsInBody(\n data,\n nestedRelations,\n ignoreActions,\n true,\n \"update\"\n );\n }\n\n mutableBody[field.name] = {\n update: {\n where: { id },\n data: dataToUpdate,\n },\n };\n }\n });\n\n if (mutableBody?.apiAction && !isRelation) {\n throw new AppError(\n \"Invalid usage of apiAction field, it must only be used on relation fields whether single or multiple.\",\n 400,\n {\n data: {\n ...body,\n },\n }\n );\n }\n\n return removeApiAction(mutableBody);\n}\n\nexport type ModelGroupRelationFields = ReturnType<\n typeof getGroupedModelReations\n>;\n\nfunction getGroupedModelReations(modelName: string) {\n const relationsFields = prismaSchemaParser.getModelRelations(modelName);\n\n return {\n singular: relationsFields?.filter(\n (field) => field.isRelation && !field.isArray\n ),\n list: relationsFields?.filter((field) => field.isRelation && field.isArray),\n };\n}\n\n/**\n * Checks if a field value can be used to connect to a model\n * This happens when the field contains only an ID or a single unique field\n *\n * @param {string} modelName - The model name to get unique fields for\n * @param {Record<string, any>} bodyField - The field value from the body\n * @returns {boolean} True if the field can be used for a connect operation\n */\nexport function canBeUsedToConnect(\n modelName: string,\n bodyField: Record<string, any> | undefined | null\n): boolean {\n if (!bodyField) return false;\n\n if (bodyField.apiAction && ![\"connect\"]?.includes?.(bodyField.apiAction))\n return false;\n\n if (bodyField.apiAction === \"connect\") return true;\n\n if (Object.keys(bodyField)?.length === 1 && bodyField?.id) return true;\n\n const uniqueFields = prismaSchemaParser.getModelUniqueFields(modelName) || [];\n\n if (Object.keys(bodyField).length === 1 && uniqueFields?.length > 0) {\n const fieldName = Object.keys(bodyField)[0];\n return uniqueFields?.some((field: PrismaField) => field.name === fieldName);\n }\n\n return false;\n}\n"]}
|
|
@@ -0,0 +1,443 @@
|
|
|
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
|
+
const prisma_1 = require("../../../exports/prisma/index.js");
|
|
7
|
+
const utils_1 = require("../../../exports/utils/index.js");
|
|
8
|
+
const arkos_config_helpers_1 = require("../../../utils/helpers/arkos-config.helpers.js");
|
|
9
|
+
const text_helpers_1 = require("../../../utils/helpers/text.helpers.js");
|
|
10
|
+
const prisma_json_schema_generator_1 = __importDefault(require("../../../utils/prisma/prisma-json-schema-generator.js"));
|
|
11
|
+
const pluralize_1 = __importDefault(require("pluralize"));
|
|
12
|
+
class ModelOpenAPIGenerator {
|
|
13
|
+
getModel(modelName) {
|
|
14
|
+
return prisma_1.prismaSchemaParser.models.find((m) => (0, utils_1.kebabCase)(m.name) === (0, utils_1.kebabCase)(modelName));
|
|
15
|
+
}
|
|
16
|
+
getAuthErrorResponses() {
|
|
17
|
+
if (!(0, arkos_config_helpers_1.isAuthenticationEnabled)())
|
|
18
|
+
return {};
|
|
19
|
+
return {
|
|
20
|
+
"401": { description: "Authentication required" },
|
|
21
|
+
"403": { description: "Insufficient permissions" },
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
resolvePrismaQueryOptions(prismaQueryOptions, action) {
|
|
25
|
+
if (!prismaQueryOptions)
|
|
26
|
+
return {};
|
|
27
|
+
const options = prismaQueryOptions;
|
|
28
|
+
let merged = options.queryOptions || {};
|
|
29
|
+
if (options.global)
|
|
30
|
+
merged = { ...merged, ...options.global };
|
|
31
|
+
const actionMap = {
|
|
32
|
+
find: ["findOne", "findMany"],
|
|
33
|
+
create: ["createOne", "createMany"],
|
|
34
|
+
update: ["updateOne", "updateMany"],
|
|
35
|
+
delete: ["deleteOne", "deleteMany"],
|
|
36
|
+
save: ["createOne", "createMany", "updateOne", "updateMany"],
|
|
37
|
+
saveOne: ["createOne", "updateOne"],
|
|
38
|
+
saveMany: ["createMany", "updateMany"],
|
|
39
|
+
};
|
|
40
|
+
for (const [key, actions] of Object.entries(actionMap)) {
|
|
41
|
+
if (actions.includes(action) && options[key])
|
|
42
|
+
merged = { ...merged, ...options[key] };
|
|
43
|
+
}
|
|
44
|
+
if (options[action])
|
|
45
|
+
merged = { ...merged, ...options[action] };
|
|
46
|
+
return merged;
|
|
47
|
+
}
|
|
48
|
+
getOpenApiConfig(endpointRouterConfig = {}, endpoint, modelNameInKebab, prismaQueryOptions) {
|
|
49
|
+
const existingOpenApi = endpointRouterConfig?.experimental?.openapi || {};
|
|
50
|
+
const hasBodyValidation = typeof endpointRouterConfig?.validation !== "boolean" &&
|
|
51
|
+
!!endpointRouterConfig?.validation?.body;
|
|
52
|
+
const hasQueryValidation = typeof endpointRouterConfig?.validation !== "boolean" &&
|
|
53
|
+
!!endpointRouterConfig?.validation?.query;
|
|
54
|
+
const hasParamsValidation = typeof endpointRouterConfig?.validation !== "boolean" &&
|
|
55
|
+
!!endpointRouterConfig?.validation?.params;
|
|
56
|
+
const model = this.getModel(modelNameInKebab);
|
|
57
|
+
const pascalModelName = (0, utils_1.pascalCase)(modelNameInKebab);
|
|
58
|
+
const humanReadableName = modelNameInKebab.replaceAll("-", " ");
|
|
59
|
+
const humanReadableNamePlural = pluralize_1.default.plural(humanReadableName);
|
|
60
|
+
const authErrors = this.getAuthErrorResponses();
|
|
61
|
+
switch (endpoint) {
|
|
62
|
+
case "createOne":
|
|
63
|
+
return {
|
|
64
|
+
...existingOpenApi,
|
|
65
|
+
tags: [
|
|
66
|
+
(0, text_helpers_1.capitalize)(humanReadableNamePlural),
|
|
67
|
+
...(existingOpenApi?.tags || []),
|
|
68
|
+
].filter((tag) => tag !== "Defaults"),
|
|
69
|
+
summary: existingOpenApi?.summary || `Create a new ${humanReadableName}`,
|
|
70
|
+
description: existingOpenApi?.description ||
|
|
71
|
+
`Creates a new ${humanReadableName} record in the system`,
|
|
72
|
+
operationId: existingOpenApi?.operationId || `create${pascalModelName}`,
|
|
73
|
+
security: existingOpenApi?.security || [{ BearerAuth: [] }],
|
|
74
|
+
...(!hasBodyValidation && {
|
|
75
|
+
requestBody: existingOpenApi?.requestBody || {
|
|
76
|
+
description: `${humanReadableName} data to create`,
|
|
77
|
+
required: true,
|
|
78
|
+
content: {
|
|
79
|
+
"application/json": {
|
|
80
|
+
schema: prisma_json_schema_generator_1.default.generateCreateSchema(model),
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
}),
|
|
85
|
+
responses: {
|
|
86
|
+
...(existingOpenApi?.responses || {}),
|
|
87
|
+
"201": existingOpenApi?.responses?.["201"] || {
|
|
88
|
+
description: `${humanReadableName} created successfully`,
|
|
89
|
+
content: {
|
|
90
|
+
"application/json": {
|
|
91
|
+
schema: prisma_json_schema_generator_1.default.generateResponseSchema(model, this.resolvePrismaQueryOptions(prismaQueryOptions, "createOne")),
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
"400": existingOpenApi?.responses?.["400"] || {
|
|
96
|
+
description: "Invalid input data provided",
|
|
97
|
+
},
|
|
98
|
+
...authErrors,
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
case "findMany":
|
|
102
|
+
return {
|
|
103
|
+
...existingOpenApi,
|
|
104
|
+
tags: [
|
|
105
|
+
(0, text_helpers_1.capitalize)(humanReadableNamePlural),
|
|
106
|
+
...(existingOpenApi?.tags || []),
|
|
107
|
+
].filter((tag) => tag !== "Defaults"),
|
|
108
|
+
summary: existingOpenApi?.summary || `Get ${humanReadableNamePlural}`,
|
|
109
|
+
description: existingOpenApi?.description ||
|
|
110
|
+
`Retrieves a paginated list of ${humanReadableNamePlural} with optional filtering and sorting`,
|
|
111
|
+
operationId: existingOpenApi?.operationId ||
|
|
112
|
+
`find${pluralize_1.default.plural(pascalModelName)}`,
|
|
113
|
+
security: existingOpenApi?.security || [{ BearerAuth: [] }],
|
|
114
|
+
parameters: [
|
|
115
|
+
...(existingOpenApi?.parameters || []),
|
|
116
|
+
...(!hasQueryValidation
|
|
117
|
+
? prisma_json_schema_generator_1.default.generateQueryFilterParameters(model)
|
|
118
|
+
: []).filter((p) => !(existingOpenApi?.parameters || []).find((ep) => ep.name === p.name && ep.in === p.in)),
|
|
119
|
+
],
|
|
120
|
+
responses: {
|
|
121
|
+
...(existingOpenApi?.responses || {}),
|
|
122
|
+
"200": existingOpenApi?.responses?.["200"] || {
|
|
123
|
+
description: `List of ${humanReadableNamePlural} retrieved successfully`,
|
|
124
|
+
content: {
|
|
125
|
+
"application/json": {
|
|
126
|
+
schema: {
|
|
127
|
+
type: "object",
|
|
128
|
+
properties: {
|
|
129
|
+
total: {
|
|
130
|
+
type: "integer",
|
|
131
|
+
description: "Total number of records matching the criteria",
|
|
132
|
+
},
|
|
133
|
+
results: {
|
|
134
|
+
type: "integer",
|
|
135
|
+
description: "Number of records returned in current page",
|
|
136
|
+
},
|
|
137
|
+
data: {
|
|
138
|
+
type: "array",
|
|
139
|
+
items: prisma_json_schema_generator_1.default.generateResponseSchema(model, this.resolvePrismaQueryOptions(prismaQueryOptions, "findMany")),
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
...authErrors,
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
case "createMany":
|
|
150
|
+
return {
|
|
151
|
+
...existingOpenApi,
|
|
152
|
+
tags: [
|
|
153
|
+
(0, text_helpers_1.capitalize)(humanReadableNamePlural),
|
|
154
|
+
...(existingOpenApi?.tags || []),
|
|
155
|
+
].filter((tag) => tag !== "Defaults"),
|
|
156
|
+
summary: existingOpenApi?.summary ||
|
|
157
|
+
`Create multiple ${humanReadableNamePlural}`,
|
|
158
|
+
description: existingOpenApi?.description ||
|
|
159
|
+
`Creates multiple ${humanReadableNamePlural} records in a single batch operation`,
|
|
160
|
+
operationId: existingOpenApi?.operationId || `createMany${pascalModelName}`,
|
|
161
|
+
security: existingOpenApi?.security || [{ BearerAuth: [] }],
|
|
162
|
+
...(!hasBodyValidation && {
|
|
163
|
+
requestBody: existingOpenApi?.requestBody || {
|
|
164
|
+
description: `Array of ${humanReadableName} data to create`,
|
|
165
|
+
required: true,
|
|
166
|
+
content: {
|
|
167
|
+
"application/json": {
|
|
168
|
+
schema: {
|
|
169
|
+
type: "array",
|
|
170
|
+
items: prisma_json_schema_generator_1.default.generateCreateSchema(model),
|
|
171
|
+
},
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
}),
|
|
176
|
+
responses: {
|
|
177
|
+
...(existingOpenApi?.responses || {}),
|
|
178
|
+
"201": existingOpenApi?.responses?.["201"] || {
|
|
179
|
+
description: `${humanReadableNamePlural} created successfully`,
|
|
180
|
+
content: {
|
|
181
|
+
"application/json": {
|
|
182
|
+
schema: {
|
|
183
|
+
type: "object",
|
|
184
|
+
properties: {
|
|
185
|
+
count: {
|
|
186
|
+
type: "integer",
|
|
187
|
+
description: "Number of records created",
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
"400": existingOpenApi?.responses?.["400"] || {
|
|
195
|
+
description: "Invalid input data provided",
|
|
196
|
+
},
|
|
197
|
+
...authErrors,
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
case "updateMany":
|
|
201
|
+
return {
|
|
202
|
+
...existingOpenApi,
|
|
203
|
+
tags: [
|
|
204
|
+
(0, text_helpers_1.capitalize)(humanReadableNamePlural),
|
|
205
|
+
...(existingOpenApi?.tags || []),
|
|
206
|
+
].filter((tag) => tag !== "Defaults"),
|
|
207
|
+
summary: existingOpenApi?.summary ||
|
|
208
|
+
`Update multiple ${humanReadableNamePlural}`,
|
|
209
|
+
description: existingOpenApi?.description ||
|
|
210
|
+
`Updates multiple ${humanReadableNamePlural} records that match the specified filter criteria`,
|
|
211
|
+
operationId: existingOpenApi?.operationId || `updateMany${pascalModelName}`,
|
|
212
|
+
parameters: [
|
|
213
|
+
...(existingOpenApi?.parameters || []),
|
|
214
|
+
...(!hasQueryValidation
|
|
215
|
+
? prisma_json_schema_generator_1.default.generateQueryFilterParameters(model, {
|
|
216
|
+
modelFieldsOnly: true,
|
|
217
|
+
})
|
|
218
|
+
: []).filter((p) => !(existingOpenApi?.parameters || []).find((ep) => ep.name === p.name && ep.in === p.in)),
|
|
219
|
+
],
|
|
220
|
+
security: existingOpenApi?.security || [{ BearerAuth: [] }],
|
|
221
|
+
...(!hasBodyValidation && {
|
|
222
|
+
requestBody: existingOpenApi?.requestBody || {
|
|
223
|
+
description: `Partial ${humanReadableName} data to update`,
|
|
224
|
+
required: true,
|
|
225
|
+
content: {
|
|
226
|
+
"application/json": {
|
|
227
|
+
schema: prisma_json_schema_generator_1.default.generateUpdateSchema(model),
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
}),
|
|
232
|
+
responses: {
|
|
233
|
+
...(existingOpenApi?.responses || {}),
|
|
234
|
+
"200": existingOpenApi?.responses?.["200"] || {
|
|
235
|
+
description: `${humanReadableNamePlural} updated successfully`,
|
|
236
|
+
content: {
|
|
237
|
+
"application/json": {
|
|
238
|
+
schema: {
|
|
239
|
+
type: "object",
|
|
240
|
+
properties: {
|
|
241
|
+
count: {
|
|
242
|
+
type: "integer",
|
|
243
|
+
description: "Number of records updated",
|
|
244
|
+
},
|
|
245
|
+
},
|
|
246
|
+
},
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
},
|
|
250
|
+
"400": existingOpenApi?.responses?.["400"] || {
|
|
251
|
+
description: "Invalid input data or missing filter criteria",
|
|
252
|
+
},
|
|
253
|
+
...authErrors,
|
|
254
|
+
},
|
|
255
|
+
};
|
|
256
|
+
case "deleteMany":
|
|
257
|
+
return {
|
|
258
|
+
...existingOpenApi,
|
|
259
|
+
tags: [
|
|
260
|
+
(0, text_helpers_1.capitalize)(humanReadableNamePlural),
|
|
261
|
+
...(existingOpenApi?.tags || []),
|
|
262
|
+
].filter((tag) => tag !== "Defaults"),
|
|
263
|
+
summary: existingOpenApi?.summary ||
|
|
264
|
+
`Delete multiple ${humanReadableNamePlural}`,
|
|
265
|
+
description: existingOpenApi?.description ||
|
|
266
|
+
`Deletes multiple ${humanReadableNamePlural} records that match the specified filter criteria`,
|
|
267
|
+
operationId: existingOpenApi?.operationId || `deleteMany${pascalModelName}`,
|
|
268
|
+
parameters: [
|
|
269
|
+
...(existingOpenApi?.parameters || []),
|
|
270
|
+
...(!hasQueryValidation
|
|
271
|
+
? prisma_json_schema_generator_1.default.generateQueryFilterParameters(model, {
|
|
272
|
+
modelFieldsOnly: true,
|
|
273
|
+
})
|
|
274
|
+
: []).filter((p) => !(existingOpenApi?.parameters || []).find((ep) => ep.name === p.name && ep.in === p.in)),
|
|
275
|
+
],
|
|
276
|
+
security: existingOpenApi?.security || [{ BearerAuth: [] }],
|
|
277
|
+
responses: {
|
|
278
|
+
...(existingOpenApi?.responses || {}),
|
|
279
|
+
"200": existingOpenApi?.responses?.["200"] || {
|
|
280
|
+
description: `${humanReadableNamePlural} deleted successfully`,
|
|
281
|
+
content: {
|
|
282
|
+
"application/json": {
|
|
283
|
+
schema: {
|
|
284
|
+
type: "object",
|
|
285
|
+
properties: {
|
|
286
|
+
count: {
|
|
287
|
+
type: "integer",
|
|
288
|
+
description: "Number of records deleted",
|
|
289
|
+
},
|
|
290
|
+
},
|
|
291
|
+
},
|
|
292
|
+
},
|
|
293
|
+
},
|
|
294
|
+
},
|
|
295
|
+
"400": existingOpenApi?.responses?.["400"] || {
|
|
296
|
+
description: "Missing filter criteria",
|
|
297
|
+
},
|
|
298
|
+
...authErrors,
|
|
299
|
+
},
|
|
300
|
+
};
|
|
301
|
+
case "findOne":
|
|
302
|
+
return {
|
|
303
|
+
...existingOpenApi,
|
|
304
|
+
tags: [
|
|
305
|
+
(0, text_helpers_1.capitalize)(humanReadableNamePlural),
|
|
306
|
+
...(existingOpenApi?.tags || []),
|
|
307
|
+
].filter((tag) => tag !== "Defaults"),
|
|
308
|
+
summary: existingOpenApi?.summary || `Get ${humanReadableName} by ID`,
|
|
309
|
+
description: existingOpenApi?.description ||
|
|
310
|
+
`Retrieves a single ${humanReadableName} record by its unique identifier`,
|
|
311
|
+
operationId: existingOpenApi?.operationId || `find${pascalModelName}ById`,
|
|
312
|
+
security: existingOpenApi?.security || [{ BearerAuth: [] }],
|
|
313
|
+
parameters: [
|
|
314
|
+
...(existingOpenApi?.parameters || []),
|
|
315
|
+
...(!hasParamsValidation
|
|
316
|
+
? [
|
|
317
|
+
{
|
|
318
|
+
name: "id",
|
|
319
|
+
in: "path",
|
|
320
|
+
description: `Unique identifier of the ${humanReadableName}`,
|
|
321
|
+
required: true,
|
|
322
|
+
schema: { type: "string" },
|
|
323
|
+
},
|
|
324
|
+
]
|
|
325
|
+
: []).filter((p) => !(existingOpenApi?.parameters || []).find((ep) => ep.name === p.name && ep.in === p.in)),
|
|
326
|
+
],
|
|
327
|
+
responses: {
|
|
328
|
+
...(existingOpenApi?.responses || {}),
|
|
329
|
+
"200": existingOpenApi?.responses?.["200"] || {
|
|
330
|
+
description: `${humanReadableName} retrieved successfully`,
|
|
331
|
+
content: {
|
|
332
|
+
"application/json": {
|
|
333
|
+
schema: prisma_json_schema_generator_1.default.generateResponseSchema(model, this.resolvePrismaQueryOptions(prismaQueryOptions, "findOne")),
|
|
334
|
+
},
|
|
335
|
+
},
|
|
336
|
+
},
|
|
337
|
+
...authErrors,
|
|
338
|
+
"404": existingOpenApi?.responses?.["404"] || {
|
|
339
|
+
description: `${humanReadableName} not found`,
|
|
340
|
+
},
|
|
341
|
+
},
|
|
342
|
+
};
|
|
343
|
+
case "updateOne":
|
|
344
|
+
return {
|
|
345
|
+
...existingOpenApi,
|
|
346
|
+
tags: [
|
|
347
|
+
(0, text_helpers_1.capitalize)(humanReadableNamePlural),
|
|
348
|
+
...(existingOpenApi?.tags || []),
|
|
349
|
+
].filter((tag) => tag !== "Defaults"),
|
|
350
|
+
summary: existingOpenApi?.summary || `Update ${humanReadableName} by ID`,
|
|
351
|
+
description: existingOpenApi?.description ||
|
|
352
|
+
`Updates a single ${humanReadableName} record by its unique identifier`,
|
|
353
|
+
operationId: existingOpenApi?.operationId || `update${pascalModelName}`,
|
|
354
|
+
security: existingOpenApi?.security || [{ BearerAuth: [] }],
|
|
355
|
+
parameters: [
|
|
356
|
+
...(existingOpenApi?.parameters || []),
|
|
357
|
+
...(!hasParamsValidation
|
|
358
|
+
? [
|
|
359
|
+
{
|
|
360
|
+
name: "id",
|
|
361
|
+
in: "path",
|
|
362
|
+
description: `Unique identifier of the ${humanReadableName}`,
|
|
363
|
+
required: true,
|
|
364
|
+
schema: { type: "string" },
|
|
365
|
+
},
|
|
366
|
+
]
|
|
367
|
+
: []).filter((p) => !(existingOpenApi?.parameters || []).find((ep) => ep.name === p.name && ep.in === p.in)),
|
|
368
|
+
],
|
|
369
|
+
...(!hasBodyValidation && {
|
|
370
|
+
requestBody: existingOpenApi?.requestBody || {
|
|
371
|
+
description: `Partial ${humanReadableName} data to update`,
|
|
372
|
+
required: true,
|
|
373
|
+
content: {
|
|
374
|
+
"application/json": {
|
|
375
|
+
schema: prisma_json_schema_generator_1.default.generateUpdateSchema(model),
|
|
376
|
+
},
|
|
377
|
+
},
|
|
378
|
+
},
|
|
379
|
+
}),
|
|
380
|
+
responses: {
|
|
381
|
+
...(existingOpenApi?.responses || {}),
|
|
382
|
+
"200": existingOpenApi?.responses?.["200"] || {
|
|
383
|
+
description: `${humanReadableName} updated successfully`,
|
|
384
|
+
content: {
|
|
385
|
+
"application/json": {
|
|
386
|
+
schema: prisma_json_schema_generator_1.default.generateResponseSchema(model, this.resolvePrismaQueryOptions(prismaQueryOptions, "updateOne")),
|
|
387
|
+
},
|
|
388
|
+
},
|
|
389
|
+
},
|
|
390
|
+
"400": existingOpenApi?.responses?.["400"] || {
|
|
391
|
+
description: "Invalid input data provided",
|
|
392
|
+
},
|
|
393
|
+
...authErrors,
|
|
394
|
+
"404": existingOpenApi?.responses?.["404"] || {
|
|
395
|
+
description: `${humanReadableName} not found`,
|
|
396
|
+
},
|
|
397
|
+
},
|
|
398
|
+
};
|
|
399
|
+
case "deleteOne":
|
|
400
|
+
return {
|
|
401
|
+
...existingOpenApi,
|
|
402
|
+
tags: [
|
|
403
|
+
(0, text_helpers_1.capitalize)(humanReadableNamePlural),
|
|
404
|
+
...(existingOpenApi?.tags || []),
|
|
405
|
+
].filter((tag) => tag !== "Defaults"),
|
|
406
|
+
summary: existingOpenApi?.summary || `Delete ${humanReadableName} by ID`,
|
|
407
|
+
description: existingOpenApi?.description ||
|
|
408
|
+
`Permanently deletes a single ${humanReadableName} record by its unique identifier`,
|
|
409
|
+
operationId: existingOpenApi?.operationId || `delete${pascalModelName}`,
|
|
410
|
+
security: existingOpenApi?.security || [{ BearerAuth: [] }],
|
|
411
|
+
parameters: [
|
|
412
|
+
...(existingOpenApi?.parameters || []),
|
|
413
|
+
...(!hasParamsValidation
|
|
414
|
+
? [
|
|
415
|
+
{
|
|
416
|
+
name: "id",
|
|
417
|
+
in: "path",
|
|
418
|
+
description: `Unique identifier of the ${humanReadableName}`,
|
|
419
|
+
required: true,
|
|
420
|
+
schema: { type: "string" },
|
|
421
|
+
},
|
|
422
|
+
]
|
|
423
|
+
: []).filter((p) => !(existingOpenApi?.parameters || []).find((ep) => ep.name === p.name && ep.in === p.in)),
|
|
424
|
+
],
|
|
425
|
+
responses: {
|
|
426
|
+
...(existingOpenApi?.responses || {}),
|
|
427
|
+
"204": existingOpenApi?.responses?.["204"] || {
|
|
428
|
+
description: `${humanReadableName} deleted successfully`,
|
|
429
|
+
},
|
|
430
|
+
...authErrors,
|
|
431
|
+
"404": existingOpenApi?.responses?.["404"] || {
|
|
432
|
+
description: `${humanReadableName} not found`,
|
|
433
|
+
},
|
|
434
|
+
},
|
|
435
|
+
};
|
|
436
|
+
default:
|
|
437
|
+
return {};
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
const modelOpenAPIGenerator = new ModelOpenAPIGenerator();
|
|
442
|
+
exports.default = modelOpenAPIGenerator;
|
|
443
|
+
//# sourceMappingURL=model-openapi-generator.js.map
|