zibri 2.4.1 → 2.5.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/dist/cjs/application-options.model.d.ts +2 -2
- package/dist/cjs/application-options.model.d.ts.map +1 -1
- package/dist/cjs/application.d.ts.map +1 -1
- package/dist/cjs/application.js +0 -1
- package/dist/cjs/application.js.map +1 -1
- package/dist/cjs/assets/asset.service.d.ts.map +1 -1
- package/dist/cjs/assets/asset.service.js +3 -1
- package/dist/cjs/assets/asset.service.js.map +1 -1
- package/dist/cjs/auth/2fa/methods/otp/otp-credentials.model.d.ts +1 -1
- package/dist/cjs/auth/2fa/methods/otp/otp-credentials.model.d.ts.map +1 -1
- package/dist/cjs/auth/2fa/methods/otp/otp-credentials.model.js.map +1 -1
- package/dist/cjs/auth/2fa/methods/otp/otp.two-factor-method.js +1 -1
- package/dist/cjs/auth/2fa/methods/otp/otp.two-factor-method.js.map +1 -1
- package/dist/cjs/auth/strategies/cookie/cookie-auth.controller.js +1 -1
- package/dist/cjs/auth/strategies/cookie/cookie-auth.controller.js.map +1 -1
- package/dist/cjs/auth/strategies/jwt/jwt-auth.controller.js +1 -1
- package/dist/cjs/auth/strategies/jwt/jwt-auth.controller.js.map +1 -1
- package/dist/cjs/auth/strategies/jwt/jwt.auth-strategy.js +1 -1
- package/dist/cjs/auth/strategies/jwt/jwt.auth-strategy.js.map +1 -1
- package/dist/cjs/backup/backup-resource-entity.model.d.ts +1 -1
- package/dist/cjs/backup/backup-resource-entity.model.d.ts.map +1 -1
- package/dist/cjs/backup/backup-resource-entity.model.js.map +1 -1
- package/dist/cjs/change-sets/models/change-set.model.d.ts +1 -1
- package/dist/cjs/change-sets/models/change-set.model.d.ts.map +1 -1
- package/dist/cjs/change-sets/models/change-set.model.js +1 -1
- package/dist/cjs/change-sets/models/change-set.model.js.map +1 -1
- package/dist/cjs/change-sets/models/change.model.d.ts +2 -2
- package/dist/cjs/change-sets/models/change.model.d.ts.map +1 -1
- package/dist/cjs/change-sets/models/change.model.js.map +1 -1
- package/dist/cjs/context/cache/cache.context.d.ts +2 -2
- package/dist/cjs/context/cache/cache.context.d.ts.map +1 -1
- package/dist/cjs/context/cache/cache.context.js +2 -2
- package/dist/cjs/context/cache/cache.context.js.map +1 -1
- package/dist/cjs/context/request/request-context-token.model.js +1 -1
- package/dist/cjs/context/request/request-context-token.model.js.map +1 -1
- package/dist/cjs/cron/cron-job-entity.model.d.ts +2 -2
- package/dist/cjs/cron/cron-job-entity.model.d.ts.map +1 -1
- package/dist/cjs/cron/cron-job-entity.model.js.map +1 -1
- package/dist/cjs/data-source/data-sources/postgres-typeorm-data-source.model.d.ts +1 -0
- package/dist/cjs/data-source/data-sources/postgres-typeorm-data-source.model.d.ts.map +1 -1
- package/dist/cjs/data-source/data-sources/postgres-typeorm-data-source.model.js +9 -0
- package/dist/cjs/data-source/data-sources/postgres-typeorm-data-source.model.js.map +1 -1
- package/dist/cjs/data-source/data-sources/typeorm-base-data-source.model.d.ts.map +1 -1
- package/dist/cjs/data-source/data-sources/typeorm-base-data-source.model.js +3 -3
- package/dist/cjs/data-source/data-sources/typeorm-base-data-source.model.js.map +1 -1
- package/dist/cjs/data-source/data-sources/where-converter/postgres-typeorm-where-filter.converter.d.ts +2 -1
- package/dist/cjs/data-source/data-sources/where-converter/postgres-typeorm-where-filter.converter.d.ts.map +1 -1
- package/dist/cjs/data-source/data-sources/where-converter/postgres-typeorm-where-filter.converter.js +20 -0
- package/dist/cjs/data-source/data-sources/where-converter/postgres-typeorm-where-filter.converter.js.map +1 -1
- package/dist/cjs/data-source/data-sources/where-converter/typeorm-where-filter.converter.d.ts +4 -0
- package/dist/cjs/data-source/data-sources/where-converter/typeorm-where-filter.converter.d.ts.map +1 -1
- package/dist/cjs/data-source/data-sources/where-converter/typeorm-where-filter.converter.js +3 -1
- package/dist/cjs/data-source/data-sources/where-converter/typeorm-where-filter.converter.js.map +1 -1
- package/dist/cjs/data-source/migration/migration-entity.model.d.ts +2 -2
- package/dist/cjs/data-source/migration/migration-entity.model.d.ts.map +1 -1
- package/dist/cjs/data-source/migration/migration-entity.model.js.map +1 -1
- package/dist/cjs/data-source/migration/migration.model.d.ts +2 -2
- package/dist/cjs/data-source/migration/migration.model.d.ts.map +1 -1
- package/dist/cjs/data-source/models/where/date-where-filter.model.d.ts +10 -2
- package/dist/cjs/data-source/models/where/date-where-filter.model.d.ts.map +1 -1
- package/dist/cjs/data-source/models/where/string-where-filter.model.d.ts +17 -0
- package/dist/cjs/data-source/models/where/string-where-filter.model.d.ts.map +1 -1
- package/dist/cjs/data-source/models/where/where-filter-keys.model.d.ts.map +1 -1
- package/dist/cjs/data-source/models/where/where-filter-keys.model.js +3 -0
- package/dist/cjs/data-source/models/where/where-filter-keys.model.js.map +1 -1
- package/dist/cjs/di/default/zibri-di-providers.default.d.ts.map +1 -1
- package/dist/cjs/di/default/zibri-di-providers.default.js +4 -0
- package/dist/cjs/di/default/zibri-di-providers.default.js.map +1 -1
- package/dist/cjs/di/default/zibri-di-tokens.default.d.ts +3 -0
- package/dist/cjs/di/default/zibri-di-tokens.default.d.ts.map +1 -1
- package/dist/cjs/di/default/zibri-di-tokens.default.js +2 -0
- package/dist/cjs/di/default/zibri-di-tokens.default.js.map +1 -1
- package/dist/cjs/email/email.service.d.ts +1 -1
- package/dist/cjs/email/email.service.d.ts.map +1 -1
- package/dist/cjs/email/email.service.js +4 -4
- package/dist/cjs/email/email.service.js.map +1 -1
- package/dist/cjs/email/models/email.model.d.ts +4 -4
- package/dist/cjs/email/models/email.model.d.ts.map +1 -1
- package/dist/cjs/email/models/email.model.js +4 -4
- package/dist/cjs/email/models/email.model.js.map +1 -1
- package/dist/cjs/entity/generation/generate-entity-file.function.js +1 -1
- package/dist/cjs/entity/generation/generate-entity-file.function.js.map +1 -1
- package/dist/cjs/event/event-subscriber-run.model.d.ts +1 -1
- package/dist/cjs/event/event-subscriber-run.model.d.ts.map +1 -1
- package/dist/cjs/event/event-subscriber-run.model.js +1 -1
- package/dist/cjs/event/event-subscriber-run.model.js.map +1 -1
- package/dist/cjs/global/global-registry.d.ts +2 -2
- package/dist/cjs/global/global-registry.d.ts.map +1 -1
- package/dist/cjs/http/http-request.model.d.ts +2 -2
- package/dist/cjs/http/http-request.model.d.ts.map +1 -1
- package/dist/cjs/http/known-header.enum.d.ts +1 -0
- package/dist/cjs/http/known-header.enum.d.ts.map +1 -1
- package/dist/cjs/http/known-header.enum.js +1 -0
- package/dist/cjs/http/known-header.enum.js.map +1 -1
- package/dist/cjs/http-client/http-client.d.ts.map +1 -1
- package/dist/cjs/http-client/http-client.js.map +1 -1
- package/dist/cjs/index.d.ts +7 -3
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +8 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/localization/formatting/format-price.function.d.ts.map +1 -1
- package/dist/cjs/localization/formatting/format-price.function.js.map +1 -1
- package/dist/cjs/logging/log-context.model.d.ts +6 -6
- package/dist/cjs/logging/log-context.model.d.ts.map +1 -1
- package/dist/cjs/logging/log-context.model.js +6 -6
- package/dist/cjs/logging/log-context.model.js.map +1 -1
- package/dist/cjs/logging/logger.js +1 -1
- package/dist/cjs/logging/logger.js.map +1 -1
- package/dist/cjs/multithreading/models/thread-job-entity.model.d.ts +5 -5
- package/dist/cjs/multithreading/models/thread-job-entity.model.d.ts.map +1 -1
- package/dist/cjs/multithreading/models/thread-job-entity.model.js +4 -4
- package/dist/cjs/multithreading/models/thread-job-entity.model.js.map +1 -1
- package/dist/cjs/multithreading/services/thread-job.d.ts +4 -4
- package/dist/cjs/multithreading/services/thread-job.d.ts.map +1 -1
- package/dist/cjs/multithreading/services/thread-job.js.map +1 -1
- package/dist/cjs/open-api/open-api-service.interface.d.ts +2 -1
- package/dist/cjs/open-api/open-api-service.interface.d.ts.map +1 -1
- package/dist/cjs/open-api/open-api.service.d.ts +5 -2
- package/dist/cjs/open-api/open-api.service.d.ts.map +1 -1
- package/dist/cjs/open-api/open-api.service.js +256 -139
- package/dist/cjs/open-api/open-api.service.js.map +1 -1
- package/dist/cjs/parsing/html/csp-options.model.d.ts +1 -1
- package/dist/cjs/parsing/html/csp-options.model.d.ts.map +1 -1
- package/dist/cjs/parsing/html/csp-options.model.js.map +1 -1
- package/dist/cjs/parsing/parser.js +3 -3
- package/dist/cjs/parsing/parser.js.map +1 -1
- package/dist/cjs/plugin/invoicing/models/invoice-address.model.d.ts +2 -2
- package/dist/cjs/plugin/invoicing/models/invoice-address.model.d.ts.map +1 -1
- package/dist/cjs/plugin/invoicing/models/invoice-address.model.js +2 -2
- package/dist/cjs/plugin/invoicing/models/invoice-address.model.js.map +1 -1
- package/dist/cjs/plugin/invoicing/models/vat.model.d.ts +1 -1
- package/dist/cjs/plugin/invoicing/models/vat.model.d.ts.map +1 -1
- package/dist/cjs/plugin/invoicing/models/vat.model.js +1 -1
- package/dist/cjs/plugin/invoicing/models/vat.model.js.map +1 -1
- package/dist/cjs/plugin/mailing-list/mailing-list.controller.js +1 -1
- package/dist/cjs/plugin/mailing-list/mailing-list.controller.js.map +1 -1
- package/dist/cjs/plugin/mailing-list/models/mailing-list-subscriber.model.d.ts +1 -1
- package/dist/cjs/plugin/mailing-list/models/mailing-list-subscriber.model.d.ts.map +1 -1
- package/dist/cjs/plugin/mailing-list/models/mailing-list-subscriber.model.js +1 -1
- package/dist/cjs/plugin/mailing-list/models/mailing-list-subscriber.model.js.map +1 -1
- package/dist/cjs/plugin/mailing-list/models/mailing-list-subscription-confirmation-token.model.d.ts +1 -1
- package/dist/cjs/plugin/mailing-list/models/mailing-list-subscription-confirmation-token.model.d.ts.map +1 -1
- package/dist/cjs/plugin/mailing-list/models/mailing-list-subscription-confirmation-token.model.js +1 -1
- package/dist/cjs/plugin/mailing-list/models/mailing-list-subscription-confirmation-token.model.js.map +1 -1
- package/dist/cjs/plugin/payment/models/payment.model.d.ts +2 -2
- package/dist/cjs/plugin/payment/models/payment.model.d.ts.map +1 -1
- package/dist/cjs/plugin/payment/models/payment.model.js +1 -1
- package/dist/cjs/plugin/payment/models/payment.model.js.map +1 -1
- package/dist/cjs/plugin/payment/providers/pay-pal/pay-pal-client.d.ts +17 -17
- package/dist/cjs/plugin/payment/providers/pay-pal/pay-pal-client.d.ts.map +1 -1
- package/dist/cjs/plugin/payment/providers/pay-pal/pay-pal-client.js +17 -17
- package/dist/cjs/plugin/payment/providers/pay-pal/pay-pal-client.js.map +1 -1
- package/dist/cjs/plugin/payment/providers/pay-pal/pay-pal.payment-provider.js +1 -1
- package/dist/cjs/plugin/payment/providers/pay-pal/pay-pal.payment-provider.js.map +1 -1
- package/dist/cjs/preact/preact.utilities.js +1 -1
- package/dist/cjs/preact/preact.utilities.js.map +1 -1
- package/dist/cjs/preact/validate-email-templates.function.js +1 -1
- package/dist/cjs/preact/validate-email-templates.function.js.map +1 -1
- package/dist/cjs/rate-limiting/rate-limiter.d.ts +10 -5
- package/dist/cjs/rate-limiting/rate-limiter.d.ts.map +1 -1
- package/dist/cjs/rate-limiting/rate-limiter.js +22 -12
- package/dist/cjs/rate-limiting/rate-limiter.js.map +1 -1
- package/dist/cjs/routing/controller-route-configuration.model.d.ts +5 -0
- package/dist/cjs/routing/controller-route-configuration.model.d.ts.map +1 -1
- package/dist/cjs/routing/decorators/controller.decorator.d.ts +5 -0
- package/dist/cjs/routing/decorators/controller.decorator.d.ts.map +1 -1
- package/dist/cjs/routing/decorators/controller.decorator.js +3 -2
- package/dist/cjs/routing/decorators/controller.decorator.js.map +1 -1
- package/dist/cjs/routing/decorators/create-http-decorator.function.d.ts +2 -1
- package/dist/cjs/routing/decorators/create-http-decorator.function.d.ts.map +1 -1
- package/dist/cjs/routing/decorators/create-http-decorator.function.js +2 -2
- package/dist/cjs/routing/decorators/create-http-decorator.function.js.map +1 -1
- package/dist/cjs/routing/decorators/delete.decorator.d.ts +3 -1
- package/dist/cjs/routing/decorators/delete.decorator.d.ts.map +1 -1
- package/dist/cjs/routing/decorators/delete.decorator.js +3 -2
- package/dist/cjs/routing/decorators/delete.decorator.js.map +1 -1
- package/dist/cjs/routing/decorators/get.decorator.d.ts +3 -1
- package/dist/cjs/routing/decorators/get.decorator.d.ts.map +1 -1
- package/dist/cjs/routing/decorators/get.decorator.js +3 -2
- package/dist/cjs/routing/decorators/get.decorator.js.map +1 -1
- package/dist/cjs/routing/decorators/http-decorator-option-input.model.d.ts +11 -0
- package/dist/cjs/routing/decorators/http-decorator-option-input.model.d.ts.map +1 -0
- package/dist/cjs/routing/decorators/http-decorator-option-input.model.js +3 -0
- package/dist/cjs/routing/decorators/http-decorator-option-input.model.js.map +1 -0
- package/dist/cjs/routing/decorators/patch.decorator.d.ts +3 -1
- package/dist/cjs/routing/decorators/patch.decorator.d.ts.map +1 -1
- package/dist/cjs/routing/decorators/patch.decorator.js +3 -2
- package/dist/cjs/routing/decorators/patch.decorator.js.map +1 -1
- package/dist/cjs/routing/decorators/post.decorator.d.ts +3 -1
- package/dist/cjs/routing/decorators/post.decorator.d.ts.map +1 -1
- package/dist/cjs/routing/decorators/post.decorator.js +3 -2
- package/dist/cjs/routing/decorators/post.decorator.js.map +1 -1
- package/dist/cjs/routing/resolve-route-params.function.js +1 -0
- package/dist/cjs/routing/resolve-route-params.function.js.map +1 -1
- package/dist/cjs/routing/route-configuration.model.d.ts +11 -1
- package/dist/cjs/routing/route-configuration.model.d.ts.map +1 -1
- package/dist/cjs/routing/router.d.ts +6 -2
- package/dist/cjs/routing/router.d.ts.map +1 -1
- package/dist/cjs/routing/router.js +173 -88
- package/dist/cjs/routing/router.js.map +1 -1
- package/dist/cjs/utilities/fs.utilities.d.ts +1 -1
- package/dist/cjs/utilities/fs.utilities.js +1 -1
- package/dist/cjs/utilities/sem-ver.utilities.d.ts +46 -0
- package/dist/cjs/utilities/sem-ver.utilities.d.ts.map +1 -0
- package/dist/cjs/utilities/sem-ver.utilities.js +204 -0
- package/dist/cjs/utilities/sem-ver.utilities.js.map +1 -0
- package/dist/cjs/utilities/uuid.utilities.js +2 -2
- package/dist/cjs/utilities/uuid.utilities.js.map +1 -1
- package/dist/cjs/versioning/route-with-version-data.model.d.ts +15 -0
- package/dist/cjs/versioning/route-with-version-data.model.d.ts.map +1 -0
- package/dist/cjs/versioning/route-with-version-data.model.js +3 -0
- package/dist/cjs/versioning/route-with-version-data.model.js.map +1 -0
- package/dist/cjs/versioning/supported-versions-options.model.d.ts +17 -0
- package/dist/cjs/versioning/supported-versions-options.model.d.ts.map +1 -0
- package/dist/cjs/versioning/supported-versions-options.model.js +3 -0
- package/dist/cjs/versioning/supported-versions-options.model.js.map +1 -0
- package/dist/cjs/versioning/version.model.d.ts +29 -0
- package/dist/cjs/versioning/version.model.d.ts.map +1 -0
- package/dist/{esm/types/version.type.js → cjs/versioning/version.model.js} +1 -1
- package/dist/cjs/versioning/version.model.js.map +1 -0
- package/dist/cjs/versioning/versioning-service.interface.d.ts +31 -0
- package/dist/cjs/versioning/versioning-service.interface.d.ts.map +1 -0
- package/dist/cjs/versioning/versioning-service.interface.js +3 -0
- package/dist/cjs/versioning/versioning-service.interface.js.map +1 -0
- package/dist/cjs/versioning/versioning.service.d.ts +41 -0
- package/dist/cjs/versioning/versioning.service.d.ts.map +1 -0
- package/dist/cjs/versioning/versioning.service.js +366 -0
- package/dist/cjs/versioning/versioning.service.js.map +1 -0
- package/dist/cjs/websocket/decorators/websocket-controller.decorator.d.ts +10 -0
- package/dist/cjs/websocket/decorators/websocket-controller.decorator.d.ts.map +1 -1
- package/dist/cjs/websocket/decorators/websocket-controller.decorator.js +2 -2
- package/dist/cjs/websocket/decorators/websocket-controller.decorator.js.map +1 -1
- package/dist/cjs/websocket/decorators/websocket-route.decorator.d.ts +13 -1
- package/dist/cjs/websocket/decorators/websocket-route.decorator.d.ts.map +1 -1
- package/dist/cjs/websocket/decorators/websocket-route.decorator.js +3 -2
- package/dist/cjs/websocket/decorators/websocket-route.decorator.js.map +1 -1
- package/dist/cjs/websocket/models/connection/base-websocket-connection.model.d.ts +5 -0
- package/dist/cjs/websocket/models/connection/base-websocket-connection.model.d.ts.map +1 -1
- package/dist/cjs/websocket/models/connection/socket-io-websocket-connection.model.d.ts +3 -1
- package/dist/cjs/websocket/models/connection/socket-io-websocket-connection.model.d.ts.map +1 -1
- package/dist/cjs/websocket/models/connection/socket-io-websocket-connection.model.js +3 -1
- package/dist/cjs/websocket/models/connection/socket-io-websocket-connection.model.js.map +1 -1
- package/dist/cjs/websocket/models/websocket-controller-route-configuration.model.d.ts +6 -0
- package/dist/cjs/websocket/models/websocket-controller-route-configuration.model.d.ts.map +1 -1
- package/dist/cjs/websocket/models/websocket-message.model.d.ts +2 -2
- package/dist/cjs/websocket/models/websocket-message.model.d.ts.map +1 -1
- package/dist/cjs/websocket/models/websocket-message.model.js.map +1 -1
- package/dist/cjs/websocket/models/websocket-request.model.d.ts +3 -3
- package/dist/cjs/websocket/models/websocket-request.model.d.ts.map +1 -1
- package/dist/cjs/websocket/models/websocket-request.model.js +1 -1
- package/dist/cjs/websocket/models/websocket-request.model.js.map +1 -1
- package/dist/cjs/websocket/services/websocket.service.d.ts +6 -4
- package/dist/cjs/websocket/services/websocket.service.d.ts.map +1 -1
- package/dist/cjs/websocket/services/websocket.service.js +121 -33
- package/dist/cjs/websocket/services/websocket.service.js.map +1 -1
- package/dist/esm/application.js +0 -1
- package/dist/esm/application.js.map +1 -1
- package/dist/esm/assets/asset.service.js +3 -1
- package/dist/esm/assets/asset.service.js.map +1 -1
- package/dist/esm/auth/2fa/methods/otp/otp-credentials.model.js.map +1 -1
- package/dist/esm/auth/2fa/methods/otp/otp.two-factor-method.js +1 -1
- package/dist/esm/auth/2fa/methods/otp/otp.two-factor-method.js.map +1 -1
- package/dist/esm/auth/strategies/cookie/cookie-auth.controller.js +1 -1
- package/dist/esm/auth/strategies/cookie/cookie-auth.controller.js.map +1 -1
- package/dist/esm/auth/strategies/jwt/jwt-auth.controller.js +1 -1
- package/dist/esm/auth/strategies/jwt/jwt-auth.controller.js.map +1 -1
- package/dist/esm/auth/strategies/jwt/jwt.auth-strategy.js +1 -1
- package/dist/esm/auth/strategies/jwt/jwt.auth-strategy.js.map +1 -1
- package/dist/esm/backup/backup-resource-entity.model.js.map +1 -1
- package/dist/esm/change-sets/models/change-set.model.js +1 -1
- package/dist/esm/change-sets/models/change-set.model.js.map +1 -1
- package/dist/esm/change-sets/models/change.model.js.map +1 -1
- package/dist/esm/context/cache/cache.context.js +2 -2
- package/dist/esm/context/cache/cache.context.js.map +1 -1
- package/dist/esm/context/request/request-context-token.model.js +1 -1
- package/dist/esm/context/request/request-context-token.model.js.map +1 -1
- package/dist/esm/cron/cron-job-entity.model.js.map +1 -1
- package/dist/esm/data-source/data-sources/postgres-typeorm-data-source.model.js +9 -0
- package/dist/esm/data-source/data-sources/postgres-typeorm-data-source.model.js.map +1 -1
- package/dist/esm/data-source/data-sources/typeorm-base-data-source.model.js +3 -3
- package/dist/esm/data-source/data-sources/typeorm-base-data-source.model.js.map +1 -1
- package/dist/esm/data-source/data-sources/where-converter/postgres-typeorm-where-filter.converter.js +20 -0
- package/dist/esm/data-source/data-sources/where-converter/postgres-typeorm-where-filter.converter.js.map +1 -1
- package/dist/esm/data-source/data-sources/where-converter/typeorm-where-filter.converter.js +3 -1
- package/dist/esm/data-source/data-sources/where-converter/typeorm-where-filter.converter.js.map +1 -1
- package/dist/esm/data-source/migration/migration-entity.model.js.map +1 -1
- package/dist/esm/data-source/models/where/where-filter-keys.model.js +3 -0
- package/dist/esm/data-source/models/where/where-filter-keys.model.js.map +1 -1
- package/dist/esm/di/default/zibri-di-providers.default.js +4 -0
- package/dist/esm/di/default/zibri-di-providers.default.js.map +1 -1
- package/dist/esm/di/default/zibri-di-tokens.default.js +2 -0
- package/dist/esm/di/default/zibri-di-tokens.default.js.map +1 -1
- package/dist/esm/email/email.service.js +4 -4
- package/dist/esm/email/email.service.js.map +1 -1
- package/dist/esm/email/models/email.model.js +4 -4
- package/dist/esm/email/models/email.model.js.map +1 -1
- package/dist/esm/entity/generation/generate-entity-file.function.js +1 -1
- package/dist/esm/entity/generation/generate-entity-file.function.js.map +1 -1
- package/dist/esm/event/event-subscriber-run.model.js +1 -1
- package/dist/esm/event/event-subscriber-run.model.js.map +1 -1
- package/dist/esm/http/known-header.enum.js +1 -0
- package/dist/esm/http/known-header.enum.js.map +1 -1
- package/dist/esm/http-client/http-client.js.map +1 -1
- package/dist/esm/index.js +8 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/localization/formatting/format-price.function.js.map +1 -1
- package/dist/esm/logging/log-context.model.js +6 -6
- package/dist/esm/logging/log-context.model.js.map +1 -1
- package/dist/esm/logging/logger.js +1 -1
- package/dist/esm/logging/logger.js.map +1 -1
- package/dist/esm/multithreading/models/thread-job-entity.model.js +4 -4
- package/dist/esm/multithreading/models/thread-job-entity.model.js.map +1 -1
- package/dist/esm/multithreading/services/thread-job.js.map +1 -1
- package/dist/esm/open-api/open-api.service.js +256 -139
- package/dist/esm/open-api/open-api.service.js.map +1 -1
- package/dist/esm/parsing/html/csp-options.model.js.map +1 -1
- package/dist/esm/parsing/parser.js +3 -3
- package/dist/esm/parsing/parser.js.map +1 -1
- package/dist/esm/plugin/invoicing/models/invoice-address.model.js +2 -2
- package/dist/esm/plugin/invoicing/models/invoice-address.model.js.map +1 -1
- package/dist/esm/plugin/invoicing/models/vat.model.js +1 -1
- package/dist/esm/plugin/invoicing/models/vat.model.js.map +1 -1
- package/dist/esm/plugin/mailing-list/mailing-list.controller.js +1 -1
- package/dist/esm/plugin/mailing-list/mailing-list.controller.js.map +1 -1
- package/dist/esm/plugin/mailing-list/models/mailing-list-subscriber.model.js +1 -1
- package/dist/esm/plugin/mailing-list/models/mailing-list-subscriber.model.js.map +1 -1
- package/dist/esm/plugin/mailing-list/models/mailing-list-subscription-confirmation-token.model.js +1 -1
- package/dist/esm/plugin/mailing-list/models/mailing-list-subscription-confirmation-token.model.js.map +1 -1
- package/dist/esm/plugin/payment/models/payment.model.js +1 -1
- package/dist/esm/plugin/payment/models/payment.model.js.map +1 -1
- package/dist/esm/plugin/payment/providers/pay-pal/pay-pal-client.js +17 -17
- package/dist/esm/plugin/payment/providers/pay-pal/pay-pal-client.js.map +1 -1
- package/dist/esm/plugin/payment/providers/pay-pal/pay-pal.payment-provider.js +1 -1
- package/dist/esm/plugin/payment/providers/pay-pal/pay-pal.payment-provider.js.map +1 -1
- package/dist/esm/preact/preact.utilities.js +1 -1
- package/dist/esm/preact/preact.utilities.js.map +1 -1
- package/dist/esm/preact/validate-email-templates.function.js +1 -1
- package/dist/esm/preact/validate-email-templates.function.js.map +1 -1
- package/dist/esm/rate-limiting/rate-limiter.js +22 -12
- package/dist/esm/rate-limiting/rate-limiter.js.map +1 -1
- package/dist/esm/routing/decorators/controller.decorator.js +3 -2
- package/dist/esm/routing/decorators/controller.decorator.js.map +1 -1
- package/dist/esm/routing/decorators/create-http-decorator.function.js +2 -2
- package/dist/esm/routing/decorators/create-http-decorator.function.js.map +1 -1
- package/dist/esm/routing/decorators/delete.decorator.js +3 -2
- package/dist/esm/routing/decorators/delete.decorator.js.map +1 -1
- package/dist/esm/routing/decorators/get.decorator.js +3 -2
- package/dist/esm/routing/decorators/get.decorator.js.map +1 -1
- package/dist/esm/routing/decorators/http-decorator-option-input.model.js +3 -0
- package/dist/esm/routing/decorators/http-decorator-option-input.model.js.map +1 -0
- package/dist/esm/routing/decorators/patch.decorator.js +3 -2
- package/dist/esm/routing/decorators/patch.decorator.js.map +1 -1
- package/dist/esm/routing/decorators/post.decorator.js +3 -2
- package/dist/esm/routing/decorators/post.decorator.js.map +1 -1
- package/dist/esm/routing/resolve-route-params.function.js +1 -0
- package/dist/esm/routing/resolve-route-params.function.js.map +1 -1
- package/dist/esm/routing/router.js +173 -88
- package/dist/esm/routing/router.js.map +1 -1
- package/dist/esm/utilities/fs.utilities.js +1 -1
- package/dist/esm/utilities/sem-ver.utilities.js +204 -0
- package/dist/esm/utilities/sem-ver.utilities.js.map +1 -0
- package/dist/esm/utilities/uuid.utilities.js +2 -2
- package/dist/esm/utilities/uuid.utilities.js.map +1 -1
- package/dist/esm/versioning/route-with-version-data.model.js +3 -0
- package/dist/esm/versioning/route-with-version-data.model.js.map +1 -0
- package/dist/esm/versioning/supported-versions-options.model.js +3 -0
- package/dist/esm/versioning/supported-versions-options.model.js.map +1 -0
- package/dist/{cjs/types/version.type.js → esm/versioning/version.model.js} +1 -1
- package/dist/esm/versioning/version.model.js.map +1 -0
- package/dist/esm/versioning/versioning-service.interface.js +3 -0
- package/dist/esm/versioning/versioning-service.interface.js.map +1 -0
- package/dist/esm/versioning/versioning.service.js +366 -0
- package/dist/esm/versioning/versioning.service.js.map +1 -0
- package/dist/esm/websocket/decorators/websocket-controller.decorator.js +2 -2
- package/dist/esm/websocket/decorators/websocket-controller.decorator.js.map +1 -1
- package/dist/esm/websocket/decorators/websocket-route.decorator.js +3 -2
- package/dist/esm/websocket/decorators/websocket-route.decorator.js.map +1 -1
- package/dist/esm/websocket/models/connection/socket-io-websocket-connection.model.js +3 -1
- package/dist/esm/websocket/models/connection/socket-io-websocket-connection.model.js.map +1 -1
- package/dist/esm/websocket/models/websocket-message.model.js.map +1 -1
- package/dist/esm/websocket/models/websocket-request.model.js +1 -1
- package/dist/esm/websocket/models/websocket-request.model.js.map +1 -1
- package/dist/esm/websocket/services/websocket.service.js +121 -33
- package/dist/esm/websocket/services/websocket.service.js.map +1 -1
- package/package.json +17 -19
- package/src/__testing__/test-server/providers.ts +25 -1
- package/src/__testing__/test-server/start-test-server.function.ts +76 -8
- package/src/application-options.model.ts +2 -2
- package/src/application.ts +0 -1
- package/src/assets/asset.service.ts +3 -1
- package/src/auth/2fa/methods/otp/otp-credentials.model.ts +1 -1
- package/src/auth/2fa/methods/otp/otp.two-factor-method.ts +1 -1
- package/src/auth/strategies/cookie/cookie-auth.controller.ts +1 -1
- package/src/auth/strategies/jwt/jwt-auth.controller.ts +1 -1
- package/src/auth/strategies/jwt/jwt.auth-strategy.ts +1 -1
- package/src/backup/backup-resource-entity.model.ts +1 -1
- package/src/backup/backup-service.test.ts +2 -1
- package/src/change-sets/models/change-set.model.ts +1 -1
- package/src/change-sets/models/change.model.ts +2 -2
- package/src/context/cache/cache.context.ts +2 -2
- package/src/context/request/request-context-token.model.ts +1 -1
- package/src/cron/cron-job-entity.model.ts +2 -2
- package/src/data-source/data-sources/postgres-typeorm-data-source.model.ts +10 -0
- package/src/data-source/data-sources/typeorm-base-data-source.model.ts +4 -5
- package/src/data-source/data-sources/where-converter/postgres-typeorm-where-filter.converter.ts +35 -2
- package/src/data-source/data-sources/where-converter/typeorm-where-filter.converter.ts +14 -1
- package/src/data-source/hooks/hooks.test.ts +1 -1
- package/src/data-source/migration/migration-entity.model.ts +2 -2
- package/src/data-source/migration/migration.model.ts +2 -2
- package/src/data-source/migration/migration.test.ts +2 -2
- package/src/data-source/models/where/date-where-filter.model.ts +11 -3
- package/src/data-source/models/where/string-where-filter.model.ts +18 -1
- package/src/data-source/models/where/where-filter-keys.model.ts +3 -0
- package/src/data-source/nested-where-filter.test.ts +8 -3
- package/src/data-source/repository.test.ts +2 -2
- package/src/data-source/where-filter.test.ts +17 -7
- package/src/di/default/zibri-di-providers.default.ts +4 -0
- package/src/di/default/zibri-di-tokens.default.ts +3 -0
- package/src/email/email.service.ts +5 -5
- package/src/email/models/email.model.ts +4 -4
- package/src/entity/generation/generate-entity-file.function.ts +1 -1
- package/src/event/event-subscriber-run.model.ts +1 -1
- package/src/global/global-registry.ts +2 -2
- package/src/http/http-request.model.ts +2 -2
- package/src/http/known-header.enum.ts +1 -0
- package/src/http-client/http-client.ts +0 -1
- package/src/index.ts +9 -3
- package/src/localization/formatting/format-price.function.ts +2 -3
- package/src/logging/log-context.model.ts +6 -6
- package/src/logging/logger.ts +1 -1
- package/src/multithreading/models/thread-job-entity.model.ts +5 -5
- package/src/multithreading/services/thread-job.ts +4 -4
- package/src/open-api/open-api-service.interface.ts +2 -1
- package/src/open-api/open-api.service.ts +263 -141
- package/src/parsing/html/csp-options.model.ts +3 -0
- package/src/parsing/parser.ts +3 -3
- package/src/plugin/invoicing/models/invoice-address.model.ts +2 -2
- package/src/plugin/invoicing/models/vat.model.ts +1 -1
- package/src/plugin/mailing-list/mailing-list.controller.ts +1 -1
- package/src/plugin/mailing-list/models/mailing-list-subscriber.model.ts +1 -1
- package/src/plugin/mailing-list/models/mailing-list-subscription-confirmation-token.model.ts +1 -1
- package/src/plugin/payment/models/payment.model.ts +2 -2
- package/src/plugin/payment/providers/pay-pal/pay-pal-client.ts +17 -17
- package/src/plugin/payment/providers/pay-pal/pay-pal.payment-provider.test.ts +1 -1
- package/src/plugin/payment/providers/pay-pal/pay-pal.payment-provider.ts +1 -1
- package/src/preact/preact.utilities.ts +1 -1
- package/src/preact/validate-email-templates.function.ts +1 -1
- package/src/rate-limiting/rate-limiter.ts +23 -12
- package/src/routing/controller-route-configuration.model.ts +6 -1
- package/src/routing/decorators/controller.decorator.ts +8 -2
- package/src/routing/decorators/create-http-decorator.function.ts +3 -2
- package/src/routing/decorators/delete.decorator.ts +4 -2
- package/src/routing/decorators/get.decorator.ts +4 -2
- package/src/routing/decorators/http-decorator-option-input.model.ts +11 -0
- package/src/routing/decorators/patch.decorator.ts +4 -2
- package/src/routing/decorators/post.decorator.ts +4 -2
- package/src/routing/resolve-route-params.function.ts +1 -0
- package/src/routing/route-configuration.model.ts +13 -3
- package/src/routing/router.ts +265 -134
- package/src/utilities/fs.utilities.ts +1 -1
- package/src/utilities/sem-ver.utilities.ts +270 -0
- package/src/utilities/uuid.utilities.ts +2 -2
- package/src/versioning/route-with-version-data.model.ts +15 -0
- package/src/versioning/supported-versions-options.model.ts +25 -0
- package/src/versioning/version.model.ts +30 -0
- package/src/versioning/versioning-service.interface.ts +39 -0
- package/src/versioning/versioning-websocket.test.ts +351 -0
- package/src/versioning/versioning.service.test.ts +582 -0
- package/src/versioning/versioning.service.ts +496 -0
- package/src/websocket/decorators/websocket-controller.decorator.ts +13 -3
- package/src/websocket/decorators/websocket-route.decorator.ts +15 -2
- package/src/websocket/models/connection/base-websocket-connection.model.ts +6 -0
- package/src/websocket/models/connection/socket-io-websocket-connection.model.ts +8 -1
- package/src/websocket/models/websocket-controller-route-configuration.model.ts +8 -1
- package/src/websocket/models/websocket-message.model.ts +2 -2
- package/src/websocket/models/websocket-request.model.ts +4 -3
- package/src/websocket/services/websocket.service.ts +143 -38
- package/dist/cjs/types/version.type.d.ts +0 -5
- package/dist/cjs/types/version.type.d.ts.map +0 -1
- package/dist/cjs/types/version.type.js.map +0 -1
- package/dist/cjs/utilities/compare-versions.function.d.ts +0 -9
- package/dist/cjs/utilities/compare-versions.function.d.ts.map +0 -1
- package/dist/cjs/utilities/compare-versions.function.js +0 -33
- package/dist/cjs/utilities/compare-versions.function.js.map +0 -1
- package/dist/cjs/utilities/is-version.function.d.ts +0 -7
- package/dist/cjs/utilities/is-version.function.d.ts.map +0 -1
- package/dist/cjs/utilities/is-version.function.js +0 -18
- package/dist/cjs/utilities/is-version.function.js.map +0 -1
- package/dist/esm/types/version.type.js.map +0 -1
- package/dist/esm/utilities/compare-versions.function.js +0 -33
- package/dist/esm/utilities/compare-versions.function.js.map +0 -1
- package/dist/esm/utilities/is-version.function.js +0 -18
- package/dist/esm/utilities/is-version.function.js.map +0 -1
- package/src/types/version.type.ts +0 -4
- package/src/utilities/compare-versions.function.ts +0 -33
- package/src/utilities/is-version.function.ts +0 -16
|
@@ -58,7 +58,9 @@ export class AssetService implements AssetServiceInterface, OnAppInit {
|
|
|
58
58
|
await inject(ZIBRI_DI_TOKENS.ROUTER).registerRoute({
|
|
59
59
|
httpMethod: HttpMethod.GET,
|
|
60
60
|
route: '/favicon.ico',
|
|
61
|
-
handler: () => FileResponse.fromPath(FsUtilities.getPath(this.publicAssetsPath, 'favicon.png'))
|
|
61
|
+
handler: () => FileResponse.fromPath(FsUtilities.getPath(this.publicAssetsPath, 'favicon.png')),
|
|
62
|
+
versions: 'all',
|
|
63
|
+
openApi: { useInOpenApi: false }
|
|
62
64
|
});
|
|
63
65
|
|
|
64
66
|
}
|
|
@@ -84,7 +84,7 @@ export class OtpTwoFactorMethod implements TwoFactorMethod<never, OtpConfirmRegi
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
private extractTokenFromRequestContext(context: HttpRequestContext | WebsocketRequestContext): string {
|
|
87
|
-
const code: string | undefined = context.request.headers[this.otpHeader];
|
|
87
|
+
const code: string | undefined = context.request.headers?.[this.otpHeader];
|
|
88
88
|
if (!code) {
|
|
89
89
|
throw new UnauthorizedError(`"${this.otpHeader}" header not found`);
|
|
90
90
|
}
|
|
@@ -43,7 +43,7 @@ class CookieAuthRefreshLoginDto extends OmitClass(CookieAuthRefreshLoginData, ['
|
|
|
43
43
|
|
|
44
44
|
class CookieAuthLogoutDto extends OmitClass(CookieAuthLogoutData, ['transaction']) {}
|
|
45
45
|
|
|
46
|
-
@Controller('/auth', { allowOrphan: true })
|
|
46
|
+
@Controller('/auth', { allowOrphan: true, versions: 'all' })
|
|
47
47
|
export class CookieAuthController implements AuthControllerInterface<
|
|
48
48
|
CookieAuthCredentialsDto,
|
|
49
49
|
CookieAuthData<string>,
|
|
@@ -56,7 +56,7 @@ class JwtConfirmPasswordResetDto extends OmitClass(JwtConfirmPasswordResetData,
|
|
|
56
56
|
|
|
57
57
|
class JwtRefreshLoginDto extends OmitClass(JwtRefreshLoginData, ['transaction']) {}
|
|
58
58
|
|
|
59
|
-
@Controller('/auth', { allowOrphan: true })
|
|
59
|
+
@Controller('/auth', { allowOrphan: true, versions: 'all' })
|
|
60
60
|
export class JwtAuthController implements AuthControllerInterface<
|
|
61
61
|
JwtCredentialsDto,
|
|
62
62
|
JwtAuthData<string>,
|
|
@@ -383,7 +383,7 @@ implements AuthStrategyInterface<
|
|
|
383
383
|
private extractAccessTokenFromRequestContext(
|
|
384
384
|
context: HttpRequestContext | WebsocketRequestContext
|
|
385
385
|
): string | undefined {
|
|
386
|
-
const authHeader: string | string[] | undefined = context.request.headers
|
|
386
|
+
const authHeader: string | string[] | undefined = context.request.headers?.authorization;
|
|
387
387
|
if (authHeader == undefined || typeof authHeader !== 'string') {
|
|
388
388
|
return undefined;
|
|
389
389
|
}
|
|
@@ -18,7 +18,7 @@ export class BackupResourceEntity extends BaseEntity {
|
|
|
18
18
|
* The size of the resource in bytes.
|
|
19
19
|
*/
|
|
20
20
|
@Property.number({ required: false })
|
|
21
|
-
size: number | undefined;
|
|
21
|
+
size: number | undefined | null;
|
|
22
22
|
/**
|
|
23
23
|
* Whether or not the backup of this resource has been completed.
|
|
24
24
|
*/
|
|
@@ -17,6 +17,7 @@ import { BaseEntity } from '../entity/base-entity.model';
|
|
|
17
17
|
import { Entity } from '../entity/decorators/entity.decorator';
|
|
18
18
|
import { Property } from '../entity/decorators/property.decorator';
|
|
19
19
|
import { Newable } from '../types/newable.type';
|
|
20
|
+
import { OmitStrict } from '../types/omit-strict.type';
|
|
20
21
|
import { FsUtilities, FsPath } from '../utilities/fs.utilities';
|
|
21
22
|
|
|
22
23
|
const backupFsFolder: FsPath = FsUtilities.getPath(testFileFolder, 'backups');
|
|
@@ -42,7 +43,7 @@ class Item {
|
|
|
42
43
|
class DbDataSource extends PostgresDataSource {
|
|
43
44
|
rootPw: string = 'password';
|
|
44
45
|
rootUsername: string = 'postgres';
|
|
45
|
-
options: PostgresOptions = {
|
|
46
|
+
options: OmitStrict<PostgresOptions, 'type'> = {
|
|
46
47
|
host: 'localhost',
|
|
47
48
|
username: 'postgres',
|
|
48
49
|
password: 'password',
|
|
@@ -26,7 +26,7 @@ export class ChangeSet extends BaseEntity {
|
|
|
26
26
|
* The id of the user that changed something.
|
|
27
27
|
*/
|
|
28
28
|
@Property.string({ format: 'uuid', required: false })
|
|
29
|
-
createdBy?: string;
|
|
29
|
+
createdBy?: string | null;
|
|
30
30
|
/**
|
|
31
31
|
* The things that have been changed.
|
|
32
32
|
*/
|
|
@@ -18,12 +18,12 @@ export class Change<T = unknown> extends BaseEntity {
|
|
|
18
18
|
* The value before it was changed.
|
|
19
19
|
*/
|
|
20
20
|
@Property.unknown({ required: false })
|
|
21
|
-
previousValue?: T;
|
|
21
|
+
previousValue?: T | null;
|
|
22
22
|
/**
|
|
23
23
|
* The value after it was changed.
|
|
24
24
|
*/
|
|
25
25
|
@Property.unknown({ required: false })
|
|
26
|
-
newValue?: T;
|
|
26
|
+
newValue?: T | null;
|
|
27
27
|
/**
|
|
28
28
|
* The change set that this change belongs to.
|
|
29
29
|
*/
|
|
@@ -24,10 +24,10 @@ export class CacheContext {
|
|
|
24
24
|
* Whether or not the cache has been hit.
|
|
25
25
|
*/
|
|
26
26
|
@Property.boolean({ required: false })
|
|
27
|
-
hit?: boolean;
|
|
27
|
+
hit?: boolean | null;
|
|
28
28
|
/**
|
|
29
29
|
* The duration that the original function took.
|
|
30
30
|
*/
|
|
31
31
|
@Property.number({ required: false })
|
|
32
|
-
durationInMs?: number;
|
|
32
|
+
durationInMs?: number | null;
|
|
33
33
|
}
|
|
@@ -51,7 +51,7 @@ export const ZIBRI_REQUEST_CONTEXT_TOKENS = {
|
|
|
51
51
|
'correlation_id',
|
|
52
52
|
ctx => {
|
|
53
53
|
const correlationIdHeader: string = inject(ZIBRI_DI_TOKENS.CORRELATION_ID_HEADER);
|
|
54
|
-
return ctx.request.headers[correlationIdHeader as KnownHeader] ?? UUIDUtilities.generate();
|
|
54
|
+
return ctx.request.headers?.[correlationIdHeader as KnownHeader] ?? UUIDUtilities.generate();
|
|
55
55
|
}
|
|
56
56
|
),
|
|
57
57
|
CURRENT_USER: new RequestContextToken(
|
|
@@ -43,13 +43,13 @@ export class CronJobEntity extends BaseEntity {
|
|
|
43
43
|
* The timestamp at which this cron job has been last run.
|
|
44
44
|
*/
|
|
45
45
|
@Property.date({ required: false })
|
|
46
|
-
lastRun
|
|
46
|
+
lastRun?: Date | null;
|
|
47
47
|
|
|
48
48
|
/**
|
|
49
49
|
* The error message that this cron job failed with.
|
|
50
50
|
*/
|
|
51
51
|
@Property.string({ required: false })
|
|
52
|
-
errorMessage
|
|
52
|
+
errorMessage?: string | null;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
/**
|
|
@@ -73,6 +73,16 @@ export abstract class PostgresDataSource extends TypeOrmBaseDataSource<PostgresO
|
|
|
73
73
|
super(logger, authService);
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
77
|
+
async init(): Promise<void> {
|
|
78
|
+
await super.init();
|
|
79
|
+
if (!this.ds) {
|
|
80
|
+
throw new DataSourceInitializationError();
|
|
81
|
+
}
|
|
82
|
+
// eslint-disable-next-line cspell/spellchecker
|
|
83
|
+
await this.ds.query('CREATE EXTENSION IF NOT EXISTS pg_trgm');
|
|
84
|
+
}
|
|
85
|
+
|
|
76
86
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
77
87
|
query<T extends BaseEntity>(entityClass: Newable<T>, options?: QueryOptions): QueryBuilder<T> {
|
|
78
88
|
if (!this.ds) {
|
|
@@ -28,10 +28,9 @@ import { type LoggerInterface } from '../../logging/logger.interface';
|
|
|
28
28
|
import { ExcludeStrict } from '../../types/exclude-strict.type';
|
|
29
29
|
import { Newable } from '../../types/newable.type';
|
|
30
30
|
import { OmitStrict } from '../../types/omit-strict.type';
|
|
31
|
-
import { Version } from '../../types/version.type';
|
|
32
|
-
import { compareVersion } from '../../utilities/compare-versions.function';
|
|
33
31
|
import { MetadataUtilities } from '../../utilities/metadata.utilities';
|
|
34
32
|
import { ObjectUtilities } from '../../utilities/object.utilities';
|
|
33
|
+
import { SemVerUtilities, SemVerVersion } from '../../utilities/sem-ver.utilities';
|
|
35
34
|
import { TypeOrmUtilities } from '../../utilities/typeorm.utilities';
|
|
36
35
|
import { getDefaultBeforeReturnHook, getDefaultBeforeSaveHook } from '../hooks/hooks.default';
|
|
37
36
|
import { MigrationEntity } from '../migration/migration-entity.model';
|
|
@@ -217,19 +216,19 @@ export abstract class TypeOrmBaseDataSource<TOptions extends DataSourceOptions>
|
|
|
217
216
|
const finishedMigrationVersions: string[] = (await migrationsRepository.findAll()).map(m => m.version);
|
|
218
217
|
const allMigrations: MigrationWithName[] = this.migrations.map(m => ({ migration: inject(m), name: m.name }));
|
|
219
218
|
|
|
220
|
-
const appVersion:
|
|
219
|
+
const appVersion: SemVerVersion | undefined = GlobalRegistry.getAppData('version');
|
|
221
220
|
if (!appVersion) {
|
|
222
221
|
throw new Error('Couldn\'t run migrations: No app version could be resolved');
|
|
223
222
|
}
|
|
224
223
|
|
|
225
224
|
const migrationsToRunUp: MigrationWithName[] = allMigrations.filter(m => {
|
|
226
225
|
return !finishedMigrationVersions.includes(m.migration.version)
|
|
227
|
-
&&
|
|
226
|
+
&& SemVerUtilities.compare(m.migration.version, appVersion) !== 'bigger';
|
|
228
227
|
});
|
|
229
228
|
|
|
230
229
|
const migrationsToRunDown: MigrationWithName[] = allMigrations.filter(m => {
|
|
231
230
|
return finishedMigrationVersions.includes(m.migration.version)
|
|
232
|
-
&&
|
|
231
|
+
&& SemVerUtilities.compare(m.migration.version, appVersion) === 'bigger';
|
|
233
232
|
});
|
|
234
233
|
|
|
235
234
|
for (const migration of migrationsToRunUp) {
|
package/src/data-source/data-sources/where-converter/postgres-typeorm-where-filter.converter.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Raw, FindOperator, DataSource as ToDataSource } from 'typeorm';
|
|
2
2
|
import { RelationMetadata as ToRelationMetadata } from 'typeorm/metadata/RelationMetadata.js';
|
|
3
3
|
|
|
4
|
-
import { TypeOrmWhereFilterConverter } from './typeorm-where-filter.converter';
|
|
4
|
+
import { TypeOrmWhereFilterConverter, WhereFilterHandler } from './typeorm-where-filter.converter';
|
|
5
5
|
import { BaseEntity } from '../../../entity/base-entity.model';
|
|
6
6
|
import { EntityMetadata } from '../../../entity/decorators/entity.decorator';
|
|
7
7
|
import { PropertyMetadata, RelationMetadata } from '../../../entity/decorators/property.decorator';
|
|
@@ -9,6 +9,7 @@ import { EntityMetadataMissingError } from '../../../entity/entity-metadata-miss
|
|
|
9
9
|
import { Relation } from '../../../entity/models/relation.enum';
|
|
10
10
|
import { Newable } from '../../../types/newable.type';
|
|
11
11
|
import { MetadataUtilities } from '../../../utilities/metadata.utilities';
|
|
12
|
+
import { NumberUtilities } from '../../../utilities/number.utilities';
|
|
12
13
|
import { WhereFilterKeys } from '../../models/where/where-filter-keys.model';
|
|
13
14
|
import { Where } from '../../models/where/where-filter.model';
|
|
14
15
|
|
|
@@ -32,7 +33,7 @@ type JsonbOperatorHandler = (
|
|
|
32
33
|
*/
|
|
33
34
|
export class PostgresTypeOrmWhereFilterConverter extends TypeOrmWhereFilterConverter {
|
|
34
35
|
|
|
35
|
-
private readonly jsonbOperatorHandlers: Record<
|
|
36
|
+
private readonly jsonbOperatorHandlers: Record<WhereFilterKeys, JsonbOperatorHandler> = {
|
|
36
37
|
is: (jp, _tp, _cp, val) => val === null
|
|
37
38
|
? `${jp} = 'null'::jsonb`
|
|
38
39
|
: `${jp} @> ${this.toJsonbLiteral(val as object)}`,
|
|
@@ -59,12 +60,27 @@ export class PostgresTypeOrmWhereFilterConverter extends TypeOrmWhereFilterConve
|
|
|
59
60
|
},
|
|
60
61
|
like: (_jp, tp, _cp, val) => `${tp} LIKE ${this.toSqlLiteral(val)}`,
|
|
61
62
|
iLike: (_jp, tp, _cp, val) => `${tp} ILIKE ${this.toSqlLiteral(val)}`,
|
|
63
|
+
fuzzyLike: (_jp, tp, _cp, val) => {
|
|
64
|
+
if (typeof val !== 'object' || !('value' in (val as object))) {
|
|
65
|
+
throw new Error('fuzzyLike expects an object with a "value" property');
|
|
66
|
+
}
|
|
67
|
+
const { value: searchString, minSimilarity = 0.3 } = val as {
|
|
68
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
69
|
+
value: string,
|
|
70
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
71
|
+
minSimilarity?: number
|
|
72
|
+
};
|
|
73
|
+
const safeSearch: string = this.toSqlLiteral(searchString);
|
|
74
|
+
return `similarity(${tp}, ${safeSearch}) >= ${NumberUtilities.divide(minSimilarity, 100)}`;
|
|
75
|
+
},
|
|
62
76
|
greaterThan: (_jp, _tp, cp, val) => `${cp} > ${this.toSqlLiteral(val)}`,
|
|
63
77
|
after: (_jp, _tp, cp, val) => `${cp} > ${this.toSqlLiteral(val)}`,
|
|
64
78
|
greaterThanEquals: (_jp, _tp, cp, val) => `${cp} >= ${this.toSqlLiteral(val)}`,
|
|
79
|
+
afterOrOn: (_jp, _tp, cp, val) => `${cp} >= ${this.toSqlLiteral(val)}`,
|
|
65
80
|
lesserThan: (_jp, _tp, cp, val) => `${cp} < ${this.toSqlLiteral(val)}`,
|
|
66
81
|
before: (_jp, _tp, cp, val) => `${cp} < ${this.toSqlLiteral(val)}`,
|
|
67
82
|
lesserThanEquals: (_jp, _tp, cp, val) => `${cp} <= ${this.toSqlLiteral(val)}`,
|
|
83
|
+
beforeOrOn: (_jp, _tp, cp, val) => `${cp} <= ${this.toSqlLiteral(val)}`,
|
|
68
84
|
length: (jp, _tp, _cp, val) => `jsonb_array_length(${jp}) = ${this.toSqlLiteral(val)}`,
|
|
69
85
|
lengthGreaterThan: (jp, _tp, _cp, val) => `jsonb_array_length(${jp}) > ${this.toSqlLiteral(val)}`,
|
|
70
86
|
lengthGreaterThanEquals: (jp, _tp, _cp, val) => `jsonb_array_length(${jp}) >= ${this.toSqlLiteral(val)}`,
|
|
@@ -89,6 +105,23 @@ export class PostgresTypeOrmWhereFilterConverter extends TypeOrmWhereFilterConve
|
|
|
89
105
|
super(dataSource);
|
|
90
106
|
}
|
|
91
107
|
|
|
108
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
109
|
+
protected fuzzyLikeWhereFilterHandler: WhereFilterHandler = (value) => {
|
|
110
|
+
if (typeof value !== 'object' || value === null || !('value' in value)) {
|
|
111
|
+
throw new Error('fuzzyLike expects an object with a "value" property');
|
|
112
|
+
}
|
|
113
|
+
const { value: searchString, minSimilarity = 30 } = value as {
|
|
114
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
115
|
+
value: string,
|
|
116
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
117
|
+
minSimilarity?: number
|
|
118
|
+
};
|
|
119
|
+
const safeSearch: string = this.toSqlLiteral(searchString); // produces e.g. 'hello'
|
|
120
|
+
return Raw(
|
|
121
|
+
alias => `similarity(${alias}, ${safeSearch}) >= ${NumberUtilities.divide(minSimilarity, 100)}`
|
|
122
|
+
);
|
|
123
|
+
};
|
|
124
|
+
|
|
92
125
|
// ── JSONB-aware "where" handler ─────────────────────────────
|
|
93
126
|
|
|
94
127
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
@@ -34,6 +34,12 @@ export type WhereFilterHandler = (
|
|
|
34
34
|
* Abstract base converter that transforms a Zibri WhereFilter into a TypeORM FindOptionsWhere.
|
|
35
35
|
*/
|
|
36
36
|
export abstract class TypeOrmWhereFilterConverter {
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Handler for a fuzzyLike filter.
|
|
40
|
+
*/
|
|
41
|
+
protected abstract fuzzyLikeWhereFilterHandler: WhereFilterHandler;
|
|
42
|
+
|
|
37
43
|
/**
|
|
38
44
|
* A map that defines how Zibri's where filter properties are mapped to their typeorm counterpart.
|
|
39
45
|
*/
|
|
@@ -54,11 +60,19 @@ export abstract class TypeOrmWhereFilterConverter {
|
|
|
54
60
|
},
|
|
55
61
|
after: (value) => MoreThan(value),
|
|
56
62
|
before: (value) => LessThan(value),
|
|
63
|
+
afterOrOn: (value) => MoreThanOrEqual(value),
|
|
64
|
+
beforeOrOn: (value) => LessThanOrEqual(value),
|
|
57
65
|
greaterThan: (value) => MoreThan(value),
|
|
58
66
|
greaterThanEquals: (value) => MoreThanOrEqual(value),
|
|
59
67
|
lesserThan: (value) => LessThan(value),
|
|
60
68
|
lesserThanEquals: (value) => LessThanOrEqual(value),
|
|
61
69
|
iLike: (value) => ILike(value),
|
|
70
|
+
fuzzyLike: (value, metadata, nestedProperties, entityClass) => this.fuzzyLikeWhereFilterHandler(
|
|
71
|
+
value,
|
|
72
|
+
metadata,
|
|
73
|
+
nestedProperties,
|
|
74
|
+
entityClass
|
|
75
|
+
),
|
|
62
76
|
is: (value, metadata) => {
|
|
63
77
|
if (value === null) {
|
|
64
78
|
return IsNull();
|
|
@@ -67,7 +81,6 @@ export abstract class TypeOrmWhereFilterConverter {
|
|
|
67
81
|
if (
|
|
68
82
|
(metadata.type === Relation.MANY_TO_ONE
|
|
69
83
|
|| metadata.type === Relation.BELONGS_TO_ONE)
|
|
70
|
-
&& value !== null
|
|
71
84
|
&& typeof value === 'object'
|
|
72
85
|
&& !Array.isArray(value)
|
|
73
86
|
&& 'id' in value
|
|
@@ -33,7 +33,7 @@ class HookTestEntity extends BaseEntity implements ChangeSetEntity, SoftDeleteEn
|
|
|
33
33
|
isActive!: boolean; // default value set on create
|
|
34
34
|
|
|
35
35
|
@Property.string({ required: false, excludeFromChangeSets: true })
|
|
36
|
-
internalNote?: string; // excluded from change sets
|
|
36
|
+
internalNote?: string | null; // excluded from change sets
|
|
37
37
|
|
|
38
38
|
@Property.boolean({ default: false })
|
|
39
39
|
deleted!: boolean; // required by SoftDeleteEntity
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BaseEntity } from '../../entity/base-entity.model';
|
|
2
2
|
import { Entity } from '../../entity/decorators/entity.decorator';
|
|
3
3
|
import { Property } from '../../entity/decorators/property.decorator';
|
|
4
|
-
import { type
|
|
4
|
+
import { type SemVerVersion } from '../../utilities/sem-ver.utilities';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* The migration entity that is stored in the db.
|
|
@@ -18,7 +18,7 @@ export class MigrationEntity extends BaseEntity {
|
|
|
18
18
|
* The version at which this migration should run.
|
|
19
19
|
*/
|
|
20
20
|
@Property.string({ unique: true })
|
|
21
|
-
version!:
|
|
21
|
+
version!: SemVerVersion;
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
* The timestamp at which the migration ran.
|
|
@@ -2,7 +2,7 @@ import { MigrationEntity } from './migration-entity.model';
|
|
|
2
2
|
import { repositoryTokenFor } from '../../di/decorators/inject-repository.decorator';
|
|
3
3
|
import { inject } from '../../di/inject.function';
|
|
4
4
|
import { Newable } from '../../types/newable.type';
|
|
5
|
-
import {
|
|
5
|
+
import { SemVerVersion } from '../../utilities/sem-ver.utilities';
|
|
6
6
|
import { DataSourceInterface } from '../data-sources/data-source.interface';
|
|
7
7
|
import { Repository } from '../repository';
|
|
8
8
|
import { Transaction } from '../transaction/transaction.model';
|
|
@@ -11,7 +11,7 @@ import { Transaction } from '../transaction/transaction.model';
|
|
|
11
11
|
* Base class for a data source migration.
|
|
12
12
|
*/
|
|
13
13
|
export abstract class Migration {
|
|
14
|
-
abstract readonly version:
|
|
14
|
+
abstract readonly version: SemVerVersion;
|
|
15
15
|
/**
|
|
16
16
|
* The data source that the migration is for.
|
|
17
17
|
*/
|
|
@@ -20,7 +20,7 @@ import { Property } from '../../entity/decorators/property.decorator';
|
|
|
20
20
|
import { GlobalRegistry } from '../../global/global-registry';
|
|
21
21
|
import { Newable } from '../../types/newable.type';
|
|
22
22
|
import { OmitStrict } from '../../types/omit-strict.type';
|
|
23
|
-
import {
|
|
23
|
+
import { SemVerVersion } from '../../types/version.type';
|
|
24
24
|
import { PostgresDataSource, PostgresOptions } from '../data-sources/postgres-typeorm-data-source.model';
|
|
25
25
|
import { DataSource } from '../decorators/data-source.decorator';
|
|
26
26
|
import { Repository } from '../repository';
|
|
@@ -68,7 +68,7 @@ class DbDataSource extends PostgresDataSource {
|
|
|
68
68
|
|
|
69
69
|
@Injectable()
|
|
70
70
|
class AddTestValueMigration extends Migration {
|
|
71
|
-
version:
|
|
71
|
+
version: SemVerVersion = '0.0.1';
|
|
72
72
|
|
|
73
73
|
constructor(
|
|
74
74
|
@InjectRepository(Item)
|
|
@@ -5,13 +5,21 @@ import { BaseWhereFilter, BaseWhereFilterObject } from './base-where-filter.mode
|
|
|
5
5
|
*/
|
|
6
6
|
type DateFilterWhereObject = BaseWhereFilterObject<Date> & {
|
|
7
7
|
/**
|
|
8
|
-
* The property needs to be after the
|
|
8
|
+
* The property needs to be after the date.
|
|
9
9
|
*/
|
|
10
10
|
after?: Date,
|
|
11
11
|
/**
|
|
12
|
-
* The property needs to be before the
|
|
12
|
+
* The property needs to be before the date.
|
|
13
13
|
*/
|
|
14
|
-
before?: Date
|
|
14
|
+
before?: Date,
|
|
15
|
+
/**
|
|
16
|
+
* The property needs to be after or on the date.
|
|
17
|
+
*/
|
|
18
|
+
afterOrOn?: Date,
|
|
19
|
+
/**
|
|
20
|
+
* The property needs to be before or on the date.
|
|
21
|
+
*/
|
|
22
|
+
beforeOrOn?: Date
|
|
15
23
|
};
|
|
16
24
|
|
|
17
25
|
/**
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { BaseWhereFilter, BaseWhereFilterObject } from './base-where-filter.model';
|
|
2
|
+
import { ExcludeStrict } from '../../../types/exclude-strict.type';
|
|
3
|
+
import { Percentage } from '../../../types/percentage.type';
|
|
2
4
|
|
|
3
5
|
/**
|
|
4
6
|
* The string where filter object.
|
|
@@ -13,7 +15,22 @@ type StringWhereFilterObject = BaseWhereFilterObject<string> & {
|
|
|
13
15
|
* The property needs to be like the provided string, ignoring case.
|
|
14
16
|
* @example '%.cOm'
|
|
15
17
|
*/
|
|
16
|
-
iLike?: string
|
|
18
|
+
iLike?: string,
|
|
19
|
+
/**
|
|
20
|
+
* The property needs to fuzzily be like the provided string so that eg. Typos don't matter.
|
|
21
|
+
*/
|
|
22
|
+
fuzzyLike?: {
|
|
23
|
+
/**
|
|
24
|
+
* The search value.
|
|
25
|
+
*/
|
|
26
|
+
value: string,
|
|
27
|
+
/**
|
|
28
|
+
* The minimum similarity that the search term must have as a percentage between 1 and 99.
|
|
29
|
+
*
|
|
30
|
+
* 1 matches almost everything while 99 is basically just a strict equal.
|
|
31
|
+
*/
|
|
32
|
+
minSimilarity?: ExcludeStrict<Percentage, 0 | 100>
|
|
33
|
+
}
|
|
17
34
|
};
|
|
18
35
|
|
|
19
36
|
/**
|
|
@@ -60,12 +60,15 @@ const whereFilterKeysRecord: Record<WhereFilterKeys, WhereFilterKeys> = {
|
|
|
60
60
|
oneOf: 'oneOf',
|
|
61
61
|
notOneOf: 'notOneOf',
|
|
62
62
|
after: 'after',
|
|
63
|
+
afterOrOn: 'afterOrOn',
|
|
63
64
|
before: 'before',
|
|
65
|
+
beforeOrOn: 'beforeOrOn',
|
|
64
66
|
greaterThan: 'greaterThan',
|
|
65
67
|
greaterThanEquals: 'greaterThanEquals',
|
|
66
68
|
lesserThan: 'lesserThan',
|
|
67
69
|
lesserThanEquals: 'lesserThanEquals',
|
|
68
70
|
iLike: 'iLike',
|
|
71
|
+
fuzzyLike: 'fuzzyLike',
|
|
69
72
|
is: 'is',
|
|
70
73
|
where: 'where',
|
|
71
74
|
includes: 'includes',
|
|
@@ -20,7 +20,7 @@ class Address {
|
|
|
20
20
|
city!: string;
|
|
21
21
|
|
|
22
22
|
@Property.string({ required: false })
|
|
23
|
-
type?: string; // 'home', 'work', etc.
|
|
23
|
+
type?: string | null; // 'home', 'work', etc.
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
class PersonalData {
|
|
@@ -182,7 +182,6 @@ describe('Where filters – deeply nested (object → array → object)', () =>
|
|
|
182
182
|
|
|
183
183
|
// ===== Array of objects: includes (contains) – requires feature, skip for now =====
|
|
184
184
|
it('array includes (contains all specified objects)', async () => {
|
|
185
|
-
// TODO: implement partial object match in includes for object arrays
|
|
186
185
|
const res: Customer[] = await customerRepo.findAll({
|
|
187
186
|
where: {
|
|
188
187
|
personalData: {
|
|
@@ -197,7 +196,6 @@ describe('Where filters – deeply nested (object → array → object)', () =>
|
|
|
197
196
|
|
|
198
197
|
// ===== Array of objects: nested where on items (if supported) =====
|
|
199
198
|
it('array item where filter', async () => {
|
|
200
|
-
// TODO: implement 'where' on array items to filter by item properties
|
|
201
199
|
const res: Customer[] = await customerRepo.findAll({
|
|
202
200
|
where: {
|
|
203
201
|
personalData: {
|
|
@@ -340,5 +338,12 @@ describe('Where filters – deeply nested (object → array → object)', () =>
|
|
|
340
338
|
});
|
|
341
339
|
expect(res.map(c => c.id)).toEqual([container2.id]);
|
|
342
340
|
});
|
|
341
|
+
|
|
342
|
+
it('fuzzyLike on title', async () => {
|
|
343
|
+
const res: Container[] = await containerRepo.findAll({
|
|
344
|
+
where: { title: { fuzzyLike: { value: 'Cont', minSimilarity: 30 } } }
|
|
345
|
+
});
|
|
346
|
+
expect(res.map(c => c.id)).toEqual(expect.arrayContaining([container.id, container2.id]));
|
|
347
|
+
});
|
|
343
348
|
});
|
|
344
349
|
});
|
|
@@ -87,7 +87,7 @@ class User extends BaseEntity {
|
|
|
87
87
|
company!: Company;
|
|
88
88
|
|
|
89
89
|
@Property.string({ format: 'uuid', required: false })
|
|
90
|
-
companyId
|
|
90
|
+
companyId?: string | null;
|
|
91
91
|
|
|
92
92
|
@Property.oneToMany({ target: () => Post, inverseSide: 'author' })
|
|
93
93
|
posts!: Post[];
|
|
@@ -96,7 +96,7 @@ class User extends BaseEntity {
|
|
|
96
96
|
profile!: Profile;
|
|
97
97
|
|
|
98
98
|
@Property.string({ format: 'uuid', required: false })
|
|
99
|
-
profileId
|
|
99
|
+
profileId?: string | null;
|
|
100
100
|
|
|
101
101
|
@Property.manyToMany({ target: () => Group, inverseSide: 'members', joinTable: true })
|
|
102
102
|
groups!: Group[];
|
|
@@ -152,6 +152,23 @@ describe('Where filters', () => {
|
|
|
152
152
|
expect(res.map(p => p.id)).toEqual([prodA.id]);
|
|
153
153
|
});
|
|
154
154
|
|
|
155
|
+
it('fuzzyLike', async () => {
|
|
156
|
+
// eslint-disable-next-line cspell/spellchecker
|
|
157
|
+
// "Alpha" and "Beta" are seeded. A fuzzy search for "Alpah" (typo) should still match.
|
|
158
|
+
const res: Product[] = await productRepo.findAll({
|
|
159
|
+
// eslint-disable-next-line cspell/spellchecker
|
|
160
|
+
where: { name: { fuzzyLike: { value: 'Alpah', minSimilarity: 30 } } }
|
|
161
|
+
});
|
|
162
|
+
expect(res.map(p => p.id)).toEqual([prodA.id]);
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
it('fuzzyLike with low similarity returns nothing', async () => {
|
|
166
|
+
const res: Product[] = await productRepo.findAll({
|
|
167
|
+
where: { name: { fuzzyLike: { value: 'Zzzz', minSimilarity: 90 } } }
|
|
168
|
+
});
|
|
169
|
+
expect(res).toHaveLength(0);
|
|
170
|
+
});
|
|
171
|
+
|
|
155
172
|
it('null', async () => {
|
|
156
173
|
await productRepo.updateById(prodA.id, { name: null }); // set to null
|
|
157
174
|
const res: Product[] = await productRepo.findAll({ where: { name: null } });
|
|
@@ -406,13 +423,6 @@ describe('Where filters', () => {
|
|
|
406
423
|
const res: Product[] = await productRepo.findAll({ where: { category: { is: catFood } } });
|
|
407
424
|
expect(res.map(p => p.id)).toEqual([prodFood.id]);
|
|
408
425
|
});
|
|
409
|
-
|
|
410
|
-
// TODO
|
|
411
|
-
// it('null (no category)', async () => {
|
|
412
|
-
// await productRepo.updateById(prodFood.id, { category: null });
|
|
413
|
-
// const res: Product[] = await productRepo.findAll({ where: { category: null } });
|
|
414
|
-
// expect(res.map(p => p.id)).toEqual([prodFood.id]);
|
|
415
|
-
// });
|
|
416
426
|
});
|
|
417
427
|
|
|
418
428
|
// =================== ARRAY OF OBJECTS (Review[]) ===================
|
|
@@ -25,6 +25,7 @@ import { DataSourceService } from '../../data-source/data-source.service';
|
|
|
25
25
|
import { EmailService } from '../../email/email.service';
|
|
26
26
|
import { errorHandler } from '../../error-handling/error-handler';
|
|
27
27
|
import { EventService } from '../../event/event.service';
|
|
28
|
+
import { KnownHeader } from '../../http/known-header.enum';
|
|
28
29
|
import { HttpClient } from '../../http-client/http-client';
|
|
29
30
|
import { LocalizeOptionsInput } from '../../localization/models/localize-options.model';
|
|
30
31
|
import { LogLevel } from '../../logging/log-level.enum';
|
|
@@ -39,6 +40,7 @@ import { Router } from '../../routing/router';
|
|
|
39
40
|
import { FsUtilities } from '../../utilities/fs.utilities';
|
|
40
41
|
import { Ms } from '../../utilities/ms';
|
|
41
42
|
import { ValidationService } from '../../validation/validation.service';
|
|
43
|
+
import { VersioningService } from '../../versioning/versioning.service';
|
|
42
44
|
import { WebsocketService } from '../../websocket/services/websocket.service';
|
|
43
45
|
import { DiTokenProviderRecord } from '../models/di-token.model';
|
|
44
46
|
|
|
@@ -147,6 +149,8 @@ export const ZIBRI_DI_PROVIDERS: DiTokenProviderRecord<typeof ZIBRI_DI_TOKENS> =
|
|
|
147
149
|
ENCRYPTION_STRATEGIES: { useValue: [AesGcmEncryptionStrategy] },
|
|
148
150
|
ENCRYPTION_MASTER_OPTIONS: { useValue: undefined },
|
|
149
151
|
CACHE_SERVICE: { useClass: CacheService },
|
|
152
|
+
VERSIONING_SERVICE: { useClass: VersioningService },
|
|
153
|
+
VERSION_HEADER: { useValue: KnownHeader.X_VERSION },
|
|
150
154
|
// dynamic
|
|
151
155
|
CURRENT_REQUEST_CONTEXT: {
|
|
152
156
|
useFactory: () => AlsUtilities.getCurrentRequestContext(),
|
|
@@ -38,6 +38,7 @@ import { RouterInterface } from '../../routing/router.interface';
|
|
|
38
38
|
import { Newable } from '../../types/newable.type';
|
|
39
39
|
import { FsPath } from '../../utilities/fs.utilities';
|
|
40
40
|
import { ValidationServiceInterface } from '../../validation/validation-service.interface';
|
|
41
|
+
import { VersioningServiceInterface } from '../../versioning/versioning-service.interface';
|
|
41
42
|
import { WebsocketOptions } from '../../websocket/models/websocket-options.model';
|
|
42
43
|
import { WebsocketServiceInterface } from '../../websocket/services/websocket-service.interface';
|
|
43
44
|
import { TokenRecord } from '../models/di-token.model';
|
|
@@ -115,6 +116,8 @@ export const ZIBRI_DI_TOKENS = {
|
|
|
115
116
|
'zi.encryption_master_options'
|
|
116
117
|
),
|
|
117
118
|
CACHE_SERVICE: ziToken<CacheServiceInterface>('zi.cache_service'),
|
|
119
|
+
VERSIONING_SERVICE: ziToken<VersioningServiceInterface>('zi.versioning_service'),
|
|
120
|
+
VERSION_HEADER: ziToken<string>('zi.version_header'),
|
|
118
121
|
// dynamic/context based tokens
|
|
119
122
|
CURRENT_REQUEST_CONTEXT: ziToken<HttpRequestContext | WebsocketRequestContext | undefined>('zi.current_request_context'),
|
|
120
123
|
DEFAULT_CSP_OPTIONS: ziToken<CspOptions>('zi.default_csp_options'),
|
|
@@ -101,15 +101,15 @@ export class EmailService implements EmailServiceInterface, OnAppInit, OnAppShut
|
|
|
101
101
|
* @param email - The email to send out.
|
|
102
102
|
*/
|
|
103
103
|
protected async send(email: Email): Promise<void> {
|
|
104
|
-
await this.validateAttachments(email.attachments);
|
|
104
|
+
await this.validateAttachments(email.attachments ?? undefined);
|
|
105
105
|
const res: SMTPTransport.SentMessageInfo = await this.transporter.sendMail({
|
|
106
106
|
html: email.html,
|
|
107
107
|
subject: email.subject,
|
|
108
108
|
from: email.sender,
|
|
109
109
|
to: email.recipients,
|
|
110
|
-
bcc: email.bcc,
|
|
111
|
-
cc: email.cc,
|
|
112
|
-
attachments: email.attachments
|
|
110
|
+
bcc: email.bcc ?? undefined,
|
|
111
|
+
cc: email.cc ?? undefined,
|
|
112
|
+
attachments: email.attachments ?? undefined
|
|
113
113
|
});
|
|
114
114
|
|
|
115
115
|
const status: EmailStatus = res.rejected.length ? EmailStatus.FAILED : EmailStatus.SENT;
|
|
@@ -132,7 +132,7 @@ export class EmailService implements EmailServiceInterface, OnAppInit, OnAppShut
|
|
|
132
132
|
* @param attachments - The attachments to resolve.
|
|
133
133
|
* @returns The resolved attachments.
|
|
134
134
|
*/
|
|
135
|
-
protected async validateAttachments(attachments: EmailAttachment[] | undefined): Promise<void> {
|
|
135
|
+
protected async validateAttachments(attachments: EmailAttachment[] | undefined | null): Promise<void> {
|
|
136
136
|
if (!attachments?.length) {
|
|
137
137
|
return;
|
|
138
138
|
}
|