mongodb-dynamic-api 1.6.0 → 2.1.0
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/CHANGELOG.md +72 -19
- package/README.md +91 -67
- package/package.json +13 -1
- package/src/builders/casl/casl-ability.builder.d.ts +5 -0
- package/src/builders/casl/casl-ability.builder.js +14 -0
- package/src/builders/index.d.ts +3 -1
- package/src/builders/index.js +3 -1
- package/src/builders/route-decorators/auth-decorators.builder.d.ts +7 -0
- package/src/builders/route-decorators/auth-decorators.builder.js +14 -0
- package/src/builders/route-decorators/route-decorators.builder.d.ts +23 -0
- package/src/builders/route-decorators/route-decorators.builder.js +110 -0
- package/src/decorators/check-policies.decorator.d.ts +5 -0
- package/src/decorators/check-policies.decorator.js +8 -0
- package/src/decorators/index.d.ts +2 -0
- package/src/decorators/index.js +2 -0
- package/src/decorators/public.decorator.d.ts +3 -0
- package/src/decorators/public.decorator.js +8 -0
- package/src/dtos/delete-many-entity.query.d.ts +3 -0
- package/src/dtos/delete-many-entity.query.js +24 -0
- package/src/dtos/index.d.ts +1 -0
- package/src/dtos/index.js +1 -0
- package/src/dynamic-api.module.d.ts +6 -4
- package/src/dynamic-api.module.js +145 -69
- package/src/guards/base-policies.guard.d.ts +13 -0
- package/src/guards/base-policies.guard.js +32 -0
- package/src/guards/dynamic-api-jwt-auth.guard.d.ts +11 -0
- package/src/guards/dynamic-api-jwt-auth.guard.js +38 -0
- package/src/guards/index.d.ts +2 -0
- package/src/guards/index.js +18 -0
- package/src/helpers/controller-ability-predicates.helper.d.ts +4 -0
- package/src/helpers/controller-ability-predicates.helper.js +18 -0
- package/src/helpers/format.helper.d.ts +2 -0
- package/src/helpers/format.helper.js +12 -0
- package/src/helpers/index.d.ts +6 -1
- package/src/helpers/index.js +6 -1
- package/src/helpers/route-decorators.helper.d.ts +2 -2
- package/src/helpers/route-description.helper.d.ts +3 -0
- package/src/helpers/route-description.helper.js +34 -0
- package/src/helpers/schema.helper.d.ts +28 -0
- package/src/helpers/schema.helper.js +30 -0
- package/src/helpers/swagger-config.helper.d.ts +4 -0
- package/src/helpers/{config.helper.js → swagger-config.helper.js} +37 -21
- package/src/helpers/validation-config.helper.d.ts +3 -0
- package/src/helpers/validation-config.helper.js +8 -0
- package/src/helpers/versioning-config.helper.d.ts +4 -0
- package/src/helpers/versioning-config.helper.js +15 -0
- package/src/index.d.ts +3 -1
- package/src/index.js +3 -1
- package/src/interceptors/dynamic-api-cache.interceptor.d.ts +16 -0
- package/src/interceptors/dynamic-api-cache.interceptor.js +48 -0
- package/src/interceptors/index.d.ts +1 -0
- package/src/interceptors/index.js +17 -0
- package/src/interfaces/dynamic-api-cache-options.interface.d.ts +9 -0
- package/src/interfaces/dynamic-api-casl-ability.interface.d.ts +9 -0
- package/src/interfaces/dynamic-api-controller-options.interface.d.ts +12 -0
- package/src/interfaces/dynamic-api-decorator-builder.interface.d.ts +5 -0
- package/src/interfaces/dynamic-api-global-state.interface.d.ts +16 -0
- package/src/interfaces/dynamic-api-options.interface.d.ts +14 -11
- package/src/interfaces/dynamic-api-options.interface.js +3 -0
- package/src/interfaces/dynamic-api-policy-handler.interface.d.ts +16 -0
- package/src/interfaces/dynamic-api-route-config.interface.d.ts +15 -0
- package/src/interfaces/dynamic-api-route-dtos-bundle.type.d.ts +8 -0
- package/src/interfaces/dynamic-api-route-module.type.d.ts +3 -0
- package/src/interfaces/dynamic-api-route-type.type.d.ts +2 -0
- package/src/interfaces/dynamic-api-schema-options.interface.d.ts +9 -2
- package/src/interfaces/dynamic-api-schema-options.interface.js +14 -0
- package/src/interfaces/{service-provider.interface.d.ts → dynamic-api-service-provider.interface.d.ts} +2 -2
- package/src/{helpers/config.helper.d.ts → interfaces/dynamic-api-swagger-options.type.d.ts} +23 -15
- package/src/interfaces/index.d.ts +13 -4
- package/src/interfaces/index.js +13 -4
- package/src/mixins/create-policies-guard.mixin.d.ts +5 -0
- package/src/mixins/create-policies-guard.mixin.js +37 -0
- package/src/mixins/entity-presenter.mixin.d.ts +1 -1
- package/src/mixins/entity-presenter.mixin.js +12 -2
- package/src/mixins/index.d.ts +1 -0
- package/src/mixins/index.js +1 -0
- package/src/models/base-entity.model.d.ts +1 -1
- package/src/modules/auth/auth.helper.d.ts +10 -0
- package/src/modules/auth/auth.helper.js +103 -0
- package/src/modules/auth/auth.module.d.ts +12 -0
- package/src/modules/auth/auth.module.js +55 -0
- package/src/modules/auth/guards/index.d.ts +2 -0
- package/src/modules/auth/guards/index.js +18 -0
- package/src/modules/auth/guards/jwt-auth.guard.d.ts +4 -0
- package/src/modules/auth/guards/jwt-auth.guard.js +17 -0
- package/src/modules/auth/guards/local-auth.guard.d.ts +4 -0
- package/src/modules/auth/guards/local-auth.guard.js +17 -0
- package/src/modules/auth/index.d.ts +7 -0
- package/src/modules/auth/index.js +23 -0
- package/src/modules/auth/interfaces/auth-controller.interface.d.ts +9 -0
- package/src/modules/auth/interfaces/auth-options.interface.d.ts +25 -0
- package/src/modules/auth/interfaces/auth-service.interface.d.ts +12 -0
- package/src/modules/auth/interfaces/index.d.ts +3 -0
- package/src/modules/auth/interfaces/index.js +19 -0
- package/src/modules/auth/mixins/auth-controller.mixin.d.ts +5 -0
- package/src/modules/auth/mixins/auth-controller.mixin.js +118 -0
- package/src/modules/auth/mixins/auth-register-policies-guard.mixin.d.ts +6 -0
- package/src/modules/auth/mixins/auth-register-policies-guard.mixin.js +59 -0
- package/src/modules/auth/mixins/index.d.ts +2 -0
- package/src/modules/auth/mixins/index.js +18 -0
- package/src/modules/auth/services/base-auth.service.d.ts +51 -0
- package/src/modules/auth/services/base-auth.service.js +64 -0
- package/src/modules/auth/services/index.d.ts +1 -0
- package/src/modules/auth/services/index.js +17 -0
- package/src/modules/auth/strategies/index.d.ts +1 -0
- package/src/modules/auth/strategies/index.js +17 -0
- package/src/modules/auth/strategies/jwt.strategy.d.ts +8 -0
- package/src/modules/auth/strategies/jwt.strategy.js +35 -0
- package/src/modules/dynamic-api-config/dynamic-api-config.module.d.ts +5 -0
- package/src/modules/dynamic-api-config/dynamic-api-config.module.js +31 -0
- package/src/modules/dynamic-api-config/index.d.ts +1 -0
- package/src/modules/dynamic-api-config/index.js +17 -0
- package/src/modules/index.d.ts +2 -8
- package/src/modules/index.js +2 -8
- package/src/routes/create-many/create-many-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/create-many/create-many-controller.mixin.js +31 -9
- package/src/routes/create-many/create-many.helper.d.ts +7 -0
- package/src/{modules → routes}/create-many/create-many.helper.js +14 -11
- package/src/routes/create-many/create-many.module.d.ts +6 -0
- package/src/{modules → routes}/create-many/create-many.module.js +3 -3
- package/src/routes/create-one/create-one-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/create-one/create-one-controller.mixin.js +29 -7
- package/src/routes/create-one/create-one.helper.d.ts +7 -0
- package/src/{modules → routes}/create-one/create-one.helper.js +14 -11
- package/src/routes/create-one/create-one.module.d.ts +6 -0
- package/src/{modules → routes}/create-one/create-one.module.js +4 -4
- package/src/routes/delete-many/base-delete-many.service.d.ts +34 -0
- package/src/routes/delete-many/base-delete-many.service.js +29 -0
- package/src/routes/delete-many/delete-many-controller.interface.d.ts +8 -0
- package/src/routes/delete-many/delete-many-controller.interface.js +2 -0
- package/src/routes/delete-many/delete-many-controller.mixin.d.ts +6 -0
- package/src/routes/delete-many/delete-many-controller.mixin.js +77 -0
- package/src/routes/delete-many/delete-many-service.interface.d.ts +6 -0
- package/src/routes/delete-many/delete-many-service.interface.js +2 -0
- package/src/routes/delete-many/delete-many.helper.d.ts +7 -0
- package/src/routes/delete-many/delete-many.helper.js +71 -0
- package/src/routes/delete-many/delete-many.module.d.ts +6 -0
- package/src/routes/delete-many/delete-many.module.js +28 -0
- package/src/routes/delete-many/delete-many.presenter.d.ts +3 -0
- package/src/routes/delete-many/delete-many.presenter.js +20 -0
- package/src/routes/delete-many/index.d.ts +7 -0
- package/src/routes/delete-many/index.js +23 -0
- package/src/routes/delete-one/delete-one-controller.interface.js +2 -0
- package/src/routes/delete-one/delete-one-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/delete-one/delete-one-controller.mixin.js +30 -7
- package/src/routes/delete-one/delete-one-service.interface.js +2 -0
- package/src/routes/delete-one/delete-one.helper.d.ts +7 -0
- package/src/{modules → routes}/delete-one/delete-one.helper.js +14 -11
- package/src/routes/delete-one/delete-one.module.d.ts +6 -0
- package/src/{modules → routes}/delete-one/delete-one.module.js +4 -4
- package/src/routes/duplicate-many/base-duplicate-many.service.d.ts +33 -0
- package/src/routes/duplicate-many/base-duplicate-many.service.js +43 -0
- package/src/routes/duplicate-many/duplicate-many-controller.interface.d.ts +7 -0
- package/src/routes/duplicate-many/duplicate-many-controller.interface.js +2 -0
- package/src/routes/duplicate-many/duplicate-many-controller.mixin.d.ts +6 -0
- package/src/routes/duplicate-many/duplicate-many-controller.mixin.js +85 -0
- package/src/routes/duplicate-many/duplicate-many-service.interface.d.ts +5 -0
- package/src/routes/duplicate-many/duplicate-many-service.interface.js +2 -0
- package/src/routes/duplicate-many/duplicate-many.helper.d.ts +7 -0
- package/src/routes/duplicate-many/duplicate-many.helper.js +71 -0
- package/src/routes/duplicate-many/duplicate-many.module.d.ts +6 -0
- package/src/routes/duplicate-many/duplicate-many.module.js +28 -0
- package/src/routes/duplicate-many/index.d.ts +6 -0
- package/src/routes/duplicate-many/index.js +22 -0
- package/src/routes/duplicate-one/duplicate-one-controller.interface.js +2 -0
- package/src/routes/duplicate-one/duplicate-one-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/duplicate-one/duplicate-one-controller.mixin.js +30 -8
- package/src/routes/duplicate-one/duplicate-one-service.interface.js +2 -0
- package/src/routes/duplicate-one/duplicate-one.helper.d.ts +7 -0
- package/src/{modules → routes}/duplicate-one/duplicate-one.helper.js +14 -11
- package/src/routes/duplicate-one/duplicate-one.module.d.ts +6 -0
- package/src/{modules → routes}/duplicate-one/duplicate-one.module.js +4 -4
- package/src/routes/get-many/get-many-controller.interface.js +2 -0
- package/src/routes/get-many/get-many-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/get-many/get-many-controller.mixin.js +29 -7
- package/src/routes/get-many/get-many-service.interface.js +2 -0
- package/src/routes/get-many/get-many.helper.d.ts +7 -0
- package/src/{modules → routes}/get-many/get-many.helper.js +14 -11
- package/src/routes/get-many/get-many.module.d.ts +6 -0
- package/src/{modules → routes}/get-many/get-many.module.js +4 -4
- package/src/routes/get-one/get-one-controller.interface.js +2 -0
- package/src/routes/get-one/get-one-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/get-one/get-one-controller.mixin.js +30 -8
- package/src/routes/get-one/get-one-service.interface.js +2 -0
- package/src/routes/get-one/get-one.helper.d.ts +7 -0
- package/src/{modules → routes}/get-one/get-one.helper.js +14 -11
- package/src/routes/get-one/get-one.module.d.ts +6 -0
- package/src/{modules → routes}/get-one/get-one.module.js +4 -4
- package/src/routes/index.d.ts +11 -0
- package/src/routes/index.js +27 -0
- package/src/routes/replace-one/replace-one-controller.interface.js +2 -0
- package/src/routes/replace-one/replace-one-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/replace-one/replace-one-controller.mixin.js +30 -8
- package/src/routes/replace-one/replace-one-service.interface.js +2 -0
- package/src/routes/replace-one/replace-one.helper.d.ts +7 -0
- package/src/{modules → routes}/replace-one/replace-one.helper.js +14 -11
- package/src/routes/replace-one/replace-one.module.d.ts +6 -0
- package/src/{modules → routes}/replace-one/replace-one.module.js +4 -4
- package/src/routes/update-many/base-update-many.service.d.ts +33 -0
- package/src/routes/update-many/base-update-many.service.js +32 -0
- package/src/routes/update-many/index.d.ts +6 -0
- package/src/routes/update-many/index.js +22 -0
- package/src/routes/update-many/update-many-controller.interface.d.ts +7 -0
- package/src/routes/update-many/update-many-controller.interface.js +2 -0
- package/src/routes/update-many/update-many-controller.mixin.d.ts +6 -0
- package/src/routes/update-many/update-many-controller.mixin.js +85 -0
- package/src/routes/update-many/update-many-service.interface.d.ts +5 -0
- package/src/routes/update-many/update-many-service.interface.js +2 -0
- package/src/routes/update-many/update-many.helper.d.ts +7 -0
- package/src/routes/update-many/update-many.helper.js +71 -0
- package/src/routes/update-many/update-many.module.d.ts +6 -0
- package/src/routes/update-many/update-many.module.js +28 -0
- package/src/routes/update-one/update-one-controller.interface.js +2 -0
- package/src/routes/update-one/update-one-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/update-one/update-one-controller.mixin.js +30 -8
- package/src/routes/update-one/update-one-service.interface.js +2 -0
- package/src/routes/update-one/update-one.helper.d.ts +7 -0
- package/src/{modules → routes}/update-one/update-one.helper.js +14 -11
- package/src/routes/update-one/update-one.module.d.ts +6 -0
- package/src/{modules → routes}/update-one/update-one.module.js +4 -4
- package/src/services/{base.service.d.ts → base/base.service.d.ts} +1 -1
- package/src/services/{base.service.js → base/base.service.js} +2 -2
- package/src/services/bcrypt/bcrypt.service.d.ts +5 -0
- package/src/services/bcrypt/bcrypt.service.js +26 -0
- package/src/services/dynamic-api-global-state/dynamic-api-global-state.service.d.ts +11 -0
- package/src/services/dynamic-api-global-state/dynamic-api-global-state.service.js +36 -0
- package/src/services/index.d.ts +3 -1
- package/src/services/index.js +3 -1
- package/src/version.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/src/builders/route-decorators.builder.d.ts +0 -18
- package/src/builders/route-decorators.builder.js +0 -76
- package/src/interfaces/maybe-promise.type.d.ts +0 -2
- package/src/interfaces/route-config.interface.d.ts +0 -17
- package/src/modules/create-many/create-many-controller.mixin.d.ts +0 -6
- package/src/modules/create-many/create-many.helper.d.ts +0 -7
- package/src/modules/create-many/create-many.module.d.ts +0 -6
- package/src/modules/create-one/create-one-controller.mixin.d.ts +0 -6
- package/src/modules/create-one/create-one.helper.d.ts +0 -7
- package/src/modules/create-one/create-one.module.d.ts +0 -6
- package/src/modules/delete-one/delete-one-controller.mixin.d.ts +0 -6
- package/src/modules/delete-one/delete-one.helper.d.ts +0 -7
- package/src/modules/delete-one/delete-one.module.d.ts +0 -6
- package/src/modules/duplicate-one/duplicate-one-controller.mixin.d.ts +0 -6
- package/src/modules/duplicate-one/duplicate-one.helper.d.ts +0 -7
- package/src/modules/duplicate-one/duplicate-one.module.d.ts +0 -6
- package/src/modules/get-many/get-many-controller.mixin.d.ts +0 -6
- package/src/modules/get-many/get-many.helper.d.ts +0 -7
- package/src/modules/get-many/get-many.module.d.ts +0 -6
- package/src/modules/get-one/get-one-controller.mixin.d.ts +0 -6
- package/src/modules/get-one/get-one.helper.d.ts +0 -7
- package/src/modules/get-one/get-one.module.d.ts +0 -6
- package/src/modules/replace-one/replace-one-controller.mixin.d.ts +0 -6
- package/src/modules/replace-one/replace-one.helper.d.ts +0 -7
- package/src/modules/replace-one/replace-one.module.d.ts +0 -6
- package/src/modules/update-one/update-one-controller.mixin.d.ts +0 -6
- package/src/modules/update-one/update-one.helper.d.ts +0 -7
- package/src/modules/update-one/update-one.module.d.ts +0 -6
- package/src/interfaces/{entity-mappers.interface.js → dynamic-api-cache-options.interface.js} +0 -0
- package/src/interfaces/{maybe-promise.type.js → dynamic-api-casl-ability.interface.js} +0 -0
- package/src/interfaces/{route-config.interface.js → dynamic-api-controller-options.interface.js} +0 -0
- package/src/interfaces/{service-provider.interface.js → dynamic-api-decorator-builder.interface.js} +0 -0
- package/src/interfaces/{entity-mappers.interface.d.ts → dynamic-api-entity-mappers.interface.d.ts} +0 -0
- package/src/{modules/create-many/create-many-controller.interface.js → interfaces/dynamic-api-entity-mappers.interface.js} +0 -0
- package/src/{modules/create-many/create-many-service.interface.js → interfaces/dynamic-api-global-state.interface.js} +0 -0
- package/src/{modules/create-one/create-one-controller.interface.js → interfaces/dynamic-api-policy-handler.interface.js} +0 -0
- package/src/{modules/create-one/create-one-service.interface.js → interfaces/dynamic-api-route-config.interface.js} +0 -0
- package/src/{modules/delete-one/delete-one-controller.interface.js → interfaces/dynamic-api-route-dtos-bundle.type.js} +0 -0
- package/src/{modules/delete-one/delete-one-service.interface.js → interfaces/dynamic-api-route-module.type.js} +0 -0
- package/src/{modules/duplicate-one/duplicate-one-controller.interface.js → interfaces/dynamic-api-route-type.type.js} +0 -0
- package/src/{modules/duplicate-one/duplicate-one-service.interface.js → interfaces/dynamic-api-service-provider.interface.js} +0 -0
- package/src/{modules/get-many/get-many-controller.interface.js → interfaces/dynamic-api-swagger-options.type.js} +0 -0
- package/src/modules/{get-many/get-many-service.interface.js → auth/interfaces/auth-controller.interface.js} +0 -0
- package/src/modules/{get-one/get-one-controller.interface.js → auth/interfaces/auth-options.interface.js} +0 -0
- package/src/modules/{get-one/get-one-service.interface.js → auth/interfaces/auth-service.interface.js} +0 -0
- package/src/{modules → routes}/create-many/base-create-many.service.d.ts +0 -0
- package/src/{modules → routes}/create-many/base-create-many.service.js +0 -0
- package/src/{modules → routes}/create-many/create-many-controller.interface.d.ts +0 -0
- package/src/{modules/replace-one/replace-one-controller.interface.js → routes/create-many/create-many-controller.interface.js} +0 -0
- package/src/{modules → routes}/create-many/create-many-service.interface.d.ts +0 -0
- package/src/{modules/replace-one/replace-one-service.interface.js → routes/create-many/create-many-service.interface.js} +0 -0
- package/src/{modules → routes}/create-many/index.d.ts +0 -0
- package/src/{modules → routes}/create-many/index.js +0 -0
- package/src/{modules → routes}/create-one/base-create-one.service.d.ts +0 -0
- package/src/{modules → routes}/create-one/base-create-one.service.js +0 -0
- package/src/{modules → routes}/create-one/create-one-controller.interface.d.ts +0 -0
- package/src/{modules/update-one/update-one-controller.interface.js → routes/create-one/create-one-controller.interface.js} +0 -0
- package/src/{modules → routes}/create-one/create-one-service.interface.d.ts +0 -0
- package/src/{modules/update-one/update-one-service.interface.js → routes/create-one/create-one-service.interface.js} +0 -0
- package/src/{modules → routes}/create-one/index.d.ts +0 -0
- package/src/{modules → routes}/create-one/index.js +0 -0
- package/src/{modules → routes}/delete-one/base-delete-one.service.d.ts +0 -0
- package/src/{modules → routes}/delete-one/base-delete-one.service.js +0 -0
- package/src/{modules → routes}/delete-one/delete-one-controller.interface.d.ts +0 -0
- package/src/{modules → routes}/delete-one/delete-one-service.interface.d.ts +0 -0
- package/src/{modules → routes}/delete-one/delete-one.presenter.d.ts +0 -0
- package/src/{modules → routes}/delete-one/delete-one.presenter.js +0 -0
- package/src/{modules → routes}/delete-one/index.d.ts +0 -0
- package/src/{modules → routes}/delete-one/index.js +0 -0
- package/src/{modules → routes}/duplicate-one/base-duplicate-one.service.d.ts +0 -0
- package/src/{modules → routes}/duplicate-one/base-duplicate-one.service.js +0 -0
- package/src/{modules → routes}/duplicate-one/duplicate-one-controller.interface.d.ts +0 -0
- package/src/{modules → routes}/duplicate-one/duplicate-one-service.interface.d.ts +0 -0
- package/src/{modules → routes}/duplicate-one/index.d.ts +0 -0
- package/src/{modules → routes}/duplicate-one/index.js +0 -0
- package/src/{modules → routes}/get-many/base-get-many.service.d.ts +0 -0
- package/src/{modules → routes}/get-many/base-get-many.service.js +1 -1
- /package/src/{modules → routes}/get-many/get-many-controller.interface.d.ts +0 -0
- /package/src/{modules → routes}/get-many/get-many-service.interface.d.ts +0 -0
- /package/src/{modules → routes}/get-many/index.d.ts +0 -0
- /package/src/{modules → routes}/get-many/index.js +0 -0
- /package/src/{modules → routes}/get-one/base-get-one.service.d.ts +0 -0
- /package/src/{modules → routes}/get-one/base-get-one.service.js +0 -0
- /package/src/{modules → routes}/get-one/get-one-controller.interface.d.ts +0 -0
- /package/src/{modules → routes}/get-one/get-one-service.interface.d.ts +0 -0
- /package/src/{modules → routes}/get-one/index.d.ts +0 -0
- /package/src/{modules → routes}/get-one/index.js +0 -0
- /package/src/{modules → routes}/replace-one/base-replace-one.service.d.ts +0 -0
- /package/src/{modules → routes}/replace-one/base-replace-one.service.js +0 -0
- /package/src/{modules → routes}/replace-one/index.d.ts +0 -0
- /package/src/{modules → routes}/replace-one/index.js +0 -0
- /package/src/{modules → routes}/replace-one/replace-one-controller.interface.d.ts +0 -0
- /package/src/{modules → routes}/replace-one/replace-one-service.interface.d.ts +0 -0
- /package/src/{modules → routes}/update-one/base-update-one.service.d.ts +0 -0
- /package/src/{modules → routes}/update-one/base-update-one.service.js +0 -0
- /package/src/{modules → routes}/update-one/index.d.ts +0 -0
- /package/src/{modules → routes}/update-one/index.js +0 -0
- /package/src/{modules → routes}/update-one/update-one-controller.interface.d.ts +0 -0
- /package/src/{modules → routes}/update-one/update-one-service.interface.d.ts +0 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.DeleteManyEntityQuery = void 0;
|
|
13
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
class DeleteManyEntityQuery {
|
|
16
|
+
}
|
|
17
|
+
exports.DeleteManyEntityQuery = DeleteManyEntityQuery;
|
|
18
|
+
__decorate([
|
|
19
|
+
(0, swagger_1.ApiProperty)({ type: [String], minItems: 1 }),
|
|
20
|
+
(0, class_validator_1.IsNotEmpty)({ each: true }),
|
|
21
|
+
(0, class_validator_1.IsString)({ each: true }),
|
|
22
|
+
(0, class_validator_1.ArrayMinSize)(1),
|
|
23
|
+
__metadata("design:type", Array)
|
|
24
|
+
], DeleteManyEntityQuery.prototype, "ids", void 0);
|
package/src/dtos/index.d.ts
CHANGED
package/src/dtos/index.js
CHANGED
|
@@ -14,5 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./delete-many-entity.query"), exports);
|
|
17
18
|
__exportStar(require("./entity.param"), exports);
|
|
18
19
|
__exportStar(require("./entity.query"), exports);
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { DynamicModule } from '@nestjs/common';
|
|
2
|
-
import {
|
|
2
|
+
import { DynamicApiForFeatureOptions, DynamicApiForRootOptions } from './interfaces';
|
|
3
3
|
import { BaseEntity } from './models';
|
|
4
|
+
import { DynamicApiGlobalStateService } from './services';
|
|
4
5
|
export declare class DynamicApiModule {
|
|
5
|
-
static readonly
|
|
6
|
-
static forRoot(uri: string): DynamicModule;
|
|
7
|
-
static forFeature<Entity extends BaseEntity>({ entity, controllerOptions
|
|
6
|
+
static readonly state: DynamicApiGlobalStateService;
|
|
7
|
+
static forRoot(uri: string, { useGlobalCache, cacheOptions, useAuth, }?: DynamicApiForRootOptions): DynamicModule;
|
|
8
|
+
static forFeature<Entity extends BaseEntity>({ entity, controllerOptions, routes, }: DynamicApiForFeatureOptions<Entity>): Promise<DynamicModule>;
|
|
9
|
+
private static setDefaultRoutesIfNotConfigured;
|
|
8
10
|
}
|
|
@@ -8,94 +8,170 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
var DynamicApiModule_1;
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.DynamicApiModule = void 0;
|
|
11
|
+
const cache_manager_1 = require("@nestjs/cache-manager");
|
|
11
12
|
const common_1 = require("@nestjs/common");
|
|
13
|
+
const core_1 = require("@nestjs/core");
|
|
14
|
+
const http_adapter_host_1 = require("@nestjs/core/helpers/http-adapter-host");
|
|
12
15
|
const mongoose_1 = require("@nestjs/mongoose");
|
|
13
|
-
const
|
|
14
|
-
const
|
|
16
|
+
const rxjs_1 = require("rxjs");
|
|
17
|
+
const guards_1 = require("./guards");
|
|
18
|
+
const helpers_1 = require("./helpers");
|
|
19
|
+
const interceptors_1 = require("./interceptors");
|
|
20
|
+
const interfaces_1 = require("./interfaces");
|
|
15
21
|
const modules_1 = require("./modules");
|
|
22
|
+
const routes_1 = require("./routes");
|
|
23
|
+
const services_1 = require("./services");
|
|
16
24
|
let DynamicApiModule = DynamicApiModule_1 = class DynamicApiModule {
|
|
17
|
-
static forRoot(uri) {
|
|
25
|
+
static forRoot(uri, { useGlobalCache = true, cacheOptions = {}, useAuth, } = {}) {
|
|
18
26
|
if (!uri) {
|
|
19
27
|
throw new Error('You must provide a valid mongodb uri in the forRoot method to use MongoDB Dynamic API');
|
|
20
28
|
}
|
|
29
|
+
this.state.set([
|
|
30
|
+
'partial', {
|
|
31
|
+
initialized: true,
|
|
32
|
+
isGlobalCacheEnabled: useGlobalCache,
|
|
33
|
+
...(cacheOptions?.excludePaths ? { cacheExcludedPaths: cacheOptions?.excludePaths } : {}),
|
|
34
|
+
...(useAuth?.user ? {
|
|
35
|
+
isAuthEnabled: true,
|
|
36
|
+
credentials: {
|
|
37
|
+
loginField: !useAuth.user.loginField ? 'email' : String(useAuth.user.loginField),
|
|
38
|
+
passwordField: !useAuth.user.passwordField ? 'password' : String(useAuth.user.passwordField),
|
|
39
|
+
},
|
|
40
|
+
jwtSecret: useAuth.jwt?.secret ?? 'dynamic-api-jwt-secret',
|
|
41
|
+
} : {}),
|
|
42
|
+
},
|
|
43
|
+
]);
|
|
21
44
|
return {
|
|
22
45
|
module: DynamicApiModule_1,
|
|
23
46
|
imports: [
|
|
24
|
-
|
|
47
|
+
modules_1.DynamicApiConfigModule.register(this.state.get()),
|
|
48
|
+
cache_manager_1.CacheModule.register({ isGlobal: true, ...cacheOptions }),
|
|
49
|
+
mongoose_1.MongooseModule.forRoot(uri, { connectionName: this.state.get('connectionName') }),
|
|
50
|
+
...(useAuth?.user ? [
|
|
51
|
+
modules_1.AuthModule.forRoot({
|
|
52
|
+
user: {
|
|
53
|
+
entity: useAuth.user.entity,
|
|
54
|
+
loginField: useAuth.user.loginField ?? 'email',
|
|
55
|
+
passwordField: useAuth.user.passwordField ?? 'password',
|
|
56
|
+
requestAdditionalFields: useAuth.user.requestAdditionalFields ?? [],
|
|
57
|
+
},
|
|
58
|
+
jwt: {
|
|
59
|
+
secret: useAuth.jwt?.secret ?? 'dynamic-api-jwt-secret',
|
|
60
|
+
expiresIn: useAuth.jwt?.expiresIn ?? '1d',
|
|
61
|
+
},
|
|
62
|
+
register: useAuth.register ?? {
|
|
63
|
+
protected: false,
|
|
64
|
+
additionalFields: [],
|
|
65
|
+
},
|
|
66
|
+
}),
|
|
67
|
+
] : []),
|
|
25
68
|
],
|
|
69
|
+
exports: [modules_1.DynamicApiConfigModule],
|
|
26
70
|
};
|
|
27
71
|
}
|
|
28
|
-
static forFeature({ entity, controllerOptions
|
|
29
|
-
const {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
72
|
+
static forFeature({ entity, controllerOptions, routes = [], }) {
|
|
73
|
+
const databaseModule = mongoose_1.MongooseModule.forFeature([{ name: entity.name, schema: (0, helpers_1.buildSchemaFromEntity)(entity) }], this.state.get('connectionName'));
|
|
74
|
+
routes = this.setDefaultRoutesIfNotConfigured([...routes]);
|
|
75
|
+
return new Promise((resolve, reject) => {
|
|
76
|
+
const waitInitializedStateInterval = setInterval(async () => {
|
|
77
|
+
const stateInitialized = await (0, rxjs_1.firstValueFrom)(this.state.get().onInitialized());
|
|
78
|
+
if (!stateInitialized) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (waitForState) {
|
|
82
|
+
clearTimeout(waitForState);
|
|
83
|
+
}
|
|
84
|
+
clearInterval(waitInitializedStateInterval);
|
|
85
|
+
const { version: controllerVersion, validationPipeOptions: controllerValidationPipeOptions, } = controllerOptions;
|
|
86
|
+
const castType = (t) => t;
|
|
87
|
+
const castModule = (m) => m;
|
|
88
|
+
const moduleByRouteType = new Map([
|
|
89
|
+
[castType('CreateMany'), castModule(routes_1.CreateManyModule)],
|
|
90
|
+
[castType('CreateOne'), castModule(routes_1.CreateOneModule)],
|
|
91
|
+
[castType('DeleteMany'), castModule(routes_1.DeleteManyModule)],
|
|
92
|
+
[castType('DeleteOne'), castModule(routes_1.DeleteOneModule)],
|
|
93
|
+
[castType('DuplicateMany'), castModule(routes_1.DuplicateManyModule)],
|
|
94
|
+
[castType('DuplicateOne'), castModule(routes_1.DuplicateOneModule)],
|
|
95
|
+
[castType('GetMany'), castModule(routes_1.GetManyModule)],
|
|
96
|
+
[castType('GetOne'), castModule(routes_1.GetOneModule)],
|
|
97
|
+
[castType('ReplaceOne'), castModule(routes_1.ReplaceOneModule)],
|
|
98
|
+
[castType('UpdateMany'), castModule(routes_1.UpdateManyModule)],
|
|
99
|
+
[castType('UpdateOne'), castModule(routes_1.UpdateOneModule)],
|
|
100
|
+
]);
|
|
101
|
+
const apiModule = {
|
|
102
|
+
module: DynamicApiModule_1,
|
|
103
|
+
imports: [
|
|
104
|
+
...routes.map((routeConfig) => {
|
|
105
|
+
const { type, description: routeDescription, version: routeVersion, validationPipeOptions: routeValidationPipeOptions, } = routeConfig;
|
|
106
|
+
const module = moduleByRouteType.get(type);
|
|
107
|
+
if (!module) {
|
|
108
|
+
reject(new Error(`Route module for ${type} not found`));
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const description = routeDescription ?? (0, helpers_1.getDefaultRouteDescription)(type, entity.name);
|
|
112
|
+
const version = routeVersion ?? controllerVersion;
|
|
113
|
+
if (version && !(0, helpers_1.isValidVersion)(version)) {
|
|
114
|
+
reject(new Error(`Invalid version ${version} for ${type} route.`
|
|
115
|
+
+ ' Version must be a string that matches numeric format, e.g. 1, 2, 3, ..., 99.'));
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const validationPipeOptions = routeValidationPipeOptions ?? controllerValidationPipeOptions;
|
|
119
|
+
return module.forFeature(databaseModule, entity, controllerOptions, { ...routeConfig, description }, version, validationPipeOptions ?? { transform: true });
|
|
120
|
+
}),
|
|
121
|
+
],
|
|
122
|
+
providers: [
|
|
123
|
+
{
|
|
124
|
+
provide: core_1.APP_INTERCEPTOR,
|
|
125
|
+
inject: [cache_manager_1.CACHE_MANAGER, core_1.Reflector, http_adapter_host_1.HttpAdapterHost, interfaces_1.DYNAMIC_API_GLOBAL_STATE],
|
|
126
|
+
useFactory: (cacheManager, reflector, httpAdapterHost, state) => {
|
|
127
|
+
return new interceptors_1.DynamicApiCacheInterceptor(cacheManager, reflector, httpAdapterHost, state);
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
provide: core_1.APP_GUARD,
|
|
132
|
+
inject: [core_1.Reflector, interfaces_1.DYNAMIC_API_GLOBAL_STATE],
|
|
133
|
+
useFactory: (reflector, state) => {
|
|
134
|
+
return new guards_1.DynamicApiJwtAuthGuard(reflector, state);
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
],
|
|
138
|
+
};
|
|
139
|
+
resolve(apiModule);
|
|
140
|
+
}, 500);
|
|
141
|
+
const waitForState = setTimeout(() => {
|
|
142
|
+
clearInterval(waitInitializedStateInterval);
|
|
143
|
+
reject(new Error('Dynamic API state could not be initialized. Please check your configuration.'));
|
|
144
|
+
}, 5000);
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
static setDefaultRoutesIfNotConfigured(routes) {
|
|
43
148
|
if (!routes.length) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
{ type: '
|
|
47
|
-
{ type: '
|
|
48
|
-
{ type: '
|
|
49
|
-
{ type: '
|
|
50
|
-
{ type: '
|
|
51
|
-
{ type: '
|
|
52
|
-
{ type: '
|
|
53
|
-
{ type: '
|
|
149
|
+
return [
|
|
150
|
+
{ type: 'GetMany' },
|
|
151
|
+
{ type: 'GetOne' },
|
|
152
|
+
{ type: 'CreateMany' },
|
|
153
|
+
{ type: 'CreateOne' },
|
|
154
|
+
{ type: 'UpdateMany' },
|
|
155
|
+
{ type: 'UpdateOne' },
|
|
156
|
+
{ type: 'ReplaceOne' },
|
|
157
|
+
{ type: 'DuplicateMany' },
|
|
158
|
+
{ type: 'DuplicateOne' },
|
|
159
|
+
{ type: 'DeleteMany' },
|
|
160
|
+
{ type: 'DeleteOne' },
|
|
54
161
|
];
|
|
55
162
|
}
|
|
56
|
-
return
|
|
57
|
-
module: DynamicApiModule_1,
|
|
58
|
-
imports: [
|
|
59
|
-
...routes
|
|
60
|
-
.map(({ type, description, dTOs, version: routeVersion, validationPipeOptions: routeValidationPipeOptions, }) => {
|
|
61
|
-
let module;
|
|
62
|
-
switch (type) {
|
|
63
|
-
case 'CreateMany':
|
|
64
|
-
module = modules_1.CreateManyModule;
|
|
65
|
-
break;
|
|
66
|
-
case 'CreateOne':
|
|
67
|
-
module = modules_1.CreateOneModule;
|
|
68
|
-
break;
|
|
69
|
-
case 'DeleteOne':
|
|
70
|
-
module = modules_1.DeleteOneModule;
|
|
71
|
-
break;
|
|
72
|
-
case 'DuplicateOne':
|
|
73
|
-
module = modules_1.DuplicateOneModule;
|
|
74
|
-
break;
|
|
75
|
-
case 'GetMany':
|
|
76
|
-
module = modules_1.GetManyModule;
|
|
77
|
-
break;
|
|
78
|
-
case 'GetOne':
|
|
79
|
-
module = modules_1.GetOneModule;
|
|
80
|
-
break;
|
|
81
|
-
case 'ReplaceOne':
|
|
82
|
-
module = modules_1.ReplaceOneModule;
|
|
83
|
-
break;
|
|
84
|
-
case 'UpdateOne':
|
|
85
|
-
module = modules_1.UpdateOneModule;
|
|
86
|
-
break;
|
|
87
|
-
default:
|
|
88
|
-
throw new Error(`Route for ${type} is not implemented`);
|
|
89
|
-
}
|
|
90
|
-
return module.forFeature(databaseModule, entity, { path, apiTag }, { description, dTOs }, routeVersion ?? controllerVersion, routeValidationPipeOptions ?? controllerValidationPipeOptions);
|
|
91
|
-
})
|
|
92
|
-
.filter((module) => module),
|
|
93
|
-
],
|
|
94
|
-
};
|
|
163
|
+
return routes;
|
|
95
164
|
}
|
|
96
165
|
};
|
|
97
166
|
exports.DynamicApiModule = DynamicApiModule;
|
|
98
|
-
DynamicApiModule.
|
|
167
|
+
DynamicApiModule.state = new services_1.DynamicApiGlobalStateService({
|
|
168
|
+
connectionName: 'dynamic-api-connection',
|
|
169
|
+
isGlobalCacheEnabled: true,
|
|
170
|
+
isAuthEnabled: false,
|
|
171
|
+
credentials: null,
|
|
172
|
+
jwtSecret: undefined,
|
|
173
|
+
cacheExcludedPaths: [],
|
|
174
|
+
});
|
|
99
175
|
exports.DynamicApiModule = DynamicApiModule = DynamicApiModule_1 = __decorate([
|
|
100
176
|
(0, common_1.Module)({})
|
|
101
177
|
], DynamicApiModule);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { CanActivate, ExecutionContext, Type } from '@nestjs/common';
|
|
2
|
+
import { Reflector } from '@nestjs/core';
|
|
3
|
+
import { DynamicApiRouteCaslAbilityPredicate, RouteType } from '../interfaces';
|
|
4
|
+
import { BaseEntity } from '../models';
|
|
5
|
+
export declare abstract class BasePoliciesGuard<Entity extends BaseEntity> implements CanActivate {
|
|
6
|
+
protected readonly reflector: Reflector;
|
|
7
|
+
protected routeType: RouteType;
|
|
8
|
+
protected entity: Type<Entity>;
|
|
9
|
+
protected abilityPredicate: DynamicApiRouteCaslAbilityPredicate<Entity> | undefined;
|
|
10
|
+
protected constructor(reflector: Reflector);
|
|
11
|
+
canActivate(context: ExecutionContext): boolean;
|
|
12
|
+
private execPolicyHandler;
|
|
13
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BasePoliciesGuard = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const builders_1 = require("../builders");
|
|
6
|
+
const decorators_1 = require("../decorators");
|
|
7
|
+
class BasePoliciesGuard {
|
|
8
|
+
constructor(reflector) {
|
|
9
|
+
this.reflector = reflector;
|
|
10
|
+
}
|
|
11
|
+
canActivate(context) {
|
|
12
|
+
const policyHandlers = this.reflector.get(decorators_1.CHECK_POLICIES_KEY, context.getHandler());
|
|
13
|
+
if (!policyHandlers || !this.abilityPredicate) {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
let { user } = context.switchToHttp().getRequest();
|
|
17
|
+
if (!user) {
|
|
18
|
+
throw new common_1.ForbiddenException('Forbidden resource');
|
|
19
|
+
}
|
|
20
|
+
const ability = (0, builders_1.CaslAbilityBuilder)(this.entity, this.routeType, this.abilityPredicate, user);
|
|
21
|
+
return policyHandlers.every((handler) => {
|
|
22
|
+
return this.execPolicyHandler(handler, ability);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
execPolicyHandler(handler, ability) {
|
|
26
|
+
if (typeof handler === 'function') {
|
|
27
|
+
return handler(ability);
|
|
28
|
+
}
|
|
29
|
+
return handler.handle(ability);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.BasePoliciesGuard = BasePoliciesGuard;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ExecutionContext } from '@nestjs/common';
|
|
2
|
+
import { Reflector } from '@nestjs/core';
|
|
3
|
+
import { DynamicApiGlobalState } from '../interfaces';
|
|
4
|
+
declare const DynamicApiJwtAuthGuard_base: import("@nestjs/passport").Type<import("@nestjs/passport").IAuthGuard>;
|
|
5
|
+
export declare class DynamicApiJwtAuthGuard extends DynamicApiJwtAuthGuard_base {
|
|
6
|
+
private reflector;
|
|
7
|
+
private readonly state;
|
|
8
|
+
constructor(reflector: Reflector, state: DynamicApiGlobalState);
|
|
9
|
+
canActivate(context: ExecutionContext): boolean | Promise<boolean> | import("rxjs").Observable<boolean>;
|
|
10
|
+
}
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.DynamicApiJwtAuthGuard = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const core_1 = require("@nestjs/core");
|
|
15
|
+
const passport_1 = require("@nestjs/passport");
|
|
16
|
+
const decorators_1 = require("../decorators");
|
|
17
|
+
let DynamicApiJwtAuthGuard = class DynamicApiJwtAuthGuard extends (0, passport_1.AuthGuard)('jwt') {
|
|
18
|
+
constructor(reflector, state) {
|
|
19
|
+
super();
|
|
20
|
+
this.reflector = reflector;
|
|
21
|
+
this.state = state;
|
|
22
|
+
}
|
|
23
|
+
canActivate(context) {
|
|
24
|
+
const isPublic = this.reflector.getAllAndOverride(decorators_1.IS_PUBLIC_KEY, [
|
|
25
|
+
context.getHandler(),
|
|
26
|
+
context.getClass(),
|
|
27
|
+
]);
|
|
28
|
+
if (isPublic || !this.state.isAuthEnabled) {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
return super.canActivate(context);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
exports.DynamicApiJwtAuthGuard = DynamicApiJwtAuthGuard;
|
|
35
|
+
exports.DynamicApiJwtAuthGuard = DynamicApiJwtAuthGuard = __decorate([
|
|
36
|
+
(0, common_1.Injectable)(),
|
|
37
|
+
__metadata("design:paramtypes", [core_1.Reflector, Object])
|
|
38
|
+
], DynamicApiJwtAuthGuard);
|
|
@@ -0,0 +1,18 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./base-policies.guard"), exports);
|
|
18
|
+
__exportStar(require("./dynamic-api-jwt-auth.guard"), exports);
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { DynamicApiControllerAbilityPredicate, DynamicApiRouteCaslAbilityPredicate, RouteType } from '../interfaces';
|
|
2
|
+
import { BaseEntity } from '../models';
|
|
3
|
+
declare function getPredicateFromControllerAbilityPredicates<Entity extends BaseEntity>(controllerAbilityPredicates: DynamicApiControllerAbilityPredicate<Entity>[], route: RouteType): DynamicApiRouteCaslAbilityPredicate<Entity>;
|
|
4
|
+
export { getPredicateFromControllerAbilityPredicates };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPredicateFromControllerAbilityPredicates = void 0;
|
|
4
|
+
function getPredicateFromControllerAbilityPredicates(controllerAbilityPredicates, route) {
|
|
5
|
+
let routePredicate;
|
|
6
|
+
if (!controllerAbilityPredicates?.length) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
for (const controllerAbilityPredicate of controllerAbilityPredicates) {
|
|
10
|
+
const { targets, predicate } = controllerAbilityPredicate;
|
|
11
|
+
if (targets.includes(route)) {
|
|
12
|
+
routePredicate = predicate;
|
|
13
|
+
break;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return routePredicate;
|
|
17
|
+
}
|
|
18
|
+
exports.getPredicateFromControllerAbilityPredicates = getPredicateFromControllerAbilityPredicates;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isValidVersion = exports.pascalCase = void 0;
|
|
4
|
+
const lodash_1 = require("lodash");
|
|
5
|
+
function pascalCase(str) {
|
|
6
|
+
return str ? (0, lodash_1.upperFirst)((0, lodash_1.camelCase)(str)) : undefined;
|
|
7
|
+
}
|
|
8
|
+
exports.pascalCase = pascalCase;
|
|
9
|
+
function isValidVersion(version) {
|
|
10
|
+
return /^\d+$/.test(version);
|
|
11
|
+
}
|
|
12
|
+
exports.isValidVersion = isValidVersion;
|
package/src/helpers/index.d.ts
CHANGED
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './format.helper';
|
|
2
2
|
export * from './route-decorators.helper';
|
|
3
|
+
export * from './route-description.helper';
|
|
4
|
+
export * from './schema.helper';
|
|
5
|
+
export * from './swagger-config.helper';
|
|
6
|
+
export * from './validation-config.helper';
|
|
7
|
+
export * from './versioning-config.helper';
|
package/src/helpers/index.js
CHANGED
|
@@ -14,5 +14,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./
|
|
17
|
+
__exportStar(require("./format.helper"), exports);
|
|
18
18
|
__exportStar(require("./route-decorators.helper"), exports);
|
|
19
|
+
__exportStar(require("./route-description.helper"), exports);
|
|
20
|
+
__exportStar(require("./schema.helper"), exports);
|
|
21
|
+
__exportStar(require("./swagger-config.helper"), exports);
|
|
22
|
+
__exportStar(require("./validation-config.helper"), exports);
|
|
23
|
+
__exportStar(require("./versioning-config.helper"), exports);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DynamicApiDecoratorBuilder } from '../interfaces';
|
|
2
2
|
import { BaseEntity } from '../models';
|
|
3
|
-
declare function RouteDecoratorsHelper<Entity extends BaseEntity>(routeDecorators:
|
|
3
|
+
declare function RouteDecoratorsHelper<Entity extends BaseEntity>(routeDecorators: DynamicApiDecoratorBuilder<Entity>): <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
|
|
4
4
|
export { RouteDecoratorsHelper };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDefaultRouteDescription = void 0;
|
|
4
|
+
const lodash_1 = require("lodash");
|
|
5
|
+
function getDefaultRouteDescription(routeType, entityName) {
|
|
6
|
+
const contentName = (0, lodash_1.lowerCase)(entityName);
|
|
7
|
+
switch (routeType) {
|
|
8
|
+
case 'CreateMany':
|
|
9
|
+
return `Create many ${contentName}`;
|
|
10
|
+
case 'CreateOne':
|
|
11
|
+
return `Create one ${contentName}`;
|
|
12
|
+
case 'DeleteMany':
|
|
13
|
+
return `Delete many ${contentName}`;
|
|
14
|
+
case 'DeleteOne':
|
|
15
|
+
return `Delete one ${contentName}`;
|
|
16
|
+
case 'DuplicateMany':
|
|
17
|
+
return `Duplicate many ${contentName}`;
|
|
18
|
+
case 'DuplicateOne':
|
|
19
|
+
return `Duplicate one ${contentName}`;
|
|
20
|
+
case 'GetMany':
|
|
21
|
+
return `Get many ${contentName}`;
|
|
22
|
+
case 'GetOne':
|
|
23
|
+
return `Get one ${contentName} by id`;
|
|
24
|
+
case 'ReplaceOne':
|
|
25
|
+
return `Replace one ${contentName}`;
|
|
26
|
+
case 'UpdateMany':
|
|
27
|
+
return `Update many ${contentName}`;
|
|
28
|
+
case 'UpdateOne':
|
|
29
|
+
return `Update one ${contentName}`;
|
|
30
|
+
default:
|
|
31
|
+
throw new Error(`Route type "${routeType}" is not supported`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.getDefaultRouteDescription = getDefaultRouteDescription;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/// <reference types="mongoose/types/aggregate" />
|
|
2
|
+
/// <reference types="mongoose/types/callback" />
|
|
3
|
+
/// <reference types="mongoose/types/collection" />
|
|
4
|
+
/// <reference types="mongoose/types/connection" />
|
|
5
|
+
/// <reference types="mongoose/types/cursor" />
|
|
6
|
+
/// <reference types="mongoose/types/document" />
|
|
7
|
+
/// <reference types="mongoose/types/error" />
|
|
8
|
+
/// <reference types="mongoose/types/expressions" />
|
|
9
|
+
/// <reference types="mongoose/types/helpers" />
|
|
10
|
+
/// <reference types="mongoose/types/middlewares" />
|
|
11
|
+
/// <reference types="mongoose/types/indexes" />
|
|
12
|
+
/// <reference types="mongoose/types/models" />
|
|
13
|
+
/// <reference types="mongoose/types/mongooseoptions" />
|
|
14
|
+
/// <reference types="mongoose/types/pipelinestage" />
|
|
15
|
+
/// <reference types="mongoose/types/populate" />
|
|
16
|
+
/// <reference types="mongoose/types/query" />
|
|
17
|
+
/// <reference types="mongoose/types/schemaoptions" />
|
|
18
|
+
/// <reference types="mongoose/types/schematypes" />
|
|
19
|
+
/// <reference types="mongoose/types/session" />
|
|
20
|
+
/// <reference types="mongoose/types/types" />
|
|
21
|
+
/// <reference types="mongoose/types/utility" />
|
|
22
|
+
/// <reference types="mongoose/types/validation" />
|
|
23
|
+
/// <reference types="mongoose/types/virtuals" />
|
|
24
|
+
/// <reference types="mongoose/types/inferschematype" />
|
|
25
|
+
import { Type } from '@nestjs/common';
|
|
26
|
+
import { Schema } from 'mongoose';
|
|
27
|
+
declare function buildSchemaFromEntity<Entity>(entity: Type<Entity>): Schema<Entity>;
|
|
28
|
+
export { buildSchemaFromEntity };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildSchemaFromEntity = void 0;
|
|
4
|
+
const mongoose_1 = require("@nestjs/mongoose");
|
|
5
|
+
const decorators_1 = require("../decorators");
|
|
6
|
+
const interfaces_1 = require("../interfaces");
|
|
7
|
+
function buildSchemaFromEntity(entity) {
|
|
8
|
+
const { indexes, hooks, customInit } = Reflect.getOwnMetadata(decorators_1.DYNAMIC_API_SCHEMA_OPTIONS_METADATA, entity) ?? {};
|
|
9
|
+
const schema = mongoose_1.SchemaFactory.createForClass(entity);
|
|
10
|
+
if (Object.getOwnPropertyNames(schema.paths).includes('createdAt')) {
|
|
11
|
+
schema.set('timestamps', true);
|
|
12
|
+
}
|
|
13
|
+
if (indexes) {
|
|
14
|
+
indexes.forEach(({ fields, options }) => {
|
|
15
|
+
schema.index(fields, options);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
if (hooks?.length) {
|
|
19
|
+
const isSoftDeletable = Object.getOwnPropertyNames(schema.paths).includes('deletedAt');
|
|
20
|
+
hooks.forEach(({ type, method, callback, options }) => {
|
|
21
|
+
const { query, softDeletableQuery } = interfaces_1.queryByRouteTypeMap.get(type);
|
|
22
|
+
schema[method](isSoftDeletable && softDeletableQuery ? softDeletableQuery : query, { document: true, query: true, ...options }, callback);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
if (customInit) {
|
|
26
|
+
customInit(schema);
|
|
27
|
+
}
|
|
28
|
+
return schema;
|
|
29
|
+
}
|
|
30
|
+
exports.buildSchemaFromEntity = buildSchemaFromEntity;
|