@woltz/rich-domain 1.3.1 → 1.4.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/README.md +21 -0
- package/dist/{aggregate-changes.d.ts → cjs/aggregate-changes.d.ts} +2 -2
- package/dist/cjs/aggregate-changes.d.ts.map +1 -0
- package/dist/cjs/aggregate-changes.js +365 -0
- package/dist/cjs/aggregate-changes.js.map +1 -0
- package/dist/{base-entity.d.ts → cjs/base-entity.d.ts} +5 -5
- package/dist/cjs/base-entity.d.ts.map +1 -0
- package/dist/cjs/base-entity.js +328 -0
- package/dist/cjs/base-entity.js.map +1 -0
- package/dist/{change-tracker.d.ts → cjs/change-tracker.d.ts} +2 -2
- package/dist/cjs/change-tracker.d.ts.map +1 -0
- package/dist/cjs/change-tracker.js +789 -0
- package/dist/cjs/change-tracker.js.map +1 -0
- package/dist/cjs/constants.d.ts.map +1 -0
- package/dist/cjs/constants.js +74 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/{criteria.d.ts → cjs/criteria.d.ts} +1 -1
- package/dist/cjs/criteria.d.ts.map +1 -0
- package/dist/cjs/criteria.js +335 -0
- package/dist/{criteria.js.map → cjs/criteria.js.map} +1 -1
- package/dist/cjs/crypto.d.ts.map +1 -0
- package/dist/cjs/crypto.js +32 -0
- package/dist/cjs/crypto.js.map +1 -0
- package/dist/cjs/domain-event-bus.d.ts.map +1 -0
- package/dist/cjs/domain-event-bus.js +108 -0
- package/dist/cjs/domain-event-bus.js.map +1 -0
- package/dist/{domain-event.d.ts → cjs/domain-event.d.ts} +1 -1
- package/dist/cjs/domain-event.d.ts.map +1 -0
- package/dist/cjs/domain-event.js +47 -0
- package/dist/cjs/domain-event.js.map +1 -0
- package/dist/{entity-changes.d.ts → cjs/entity-changes.d.ts} +1 -1
- package/dist/cjs/entity-changes.d.ts.map +1 -0
- package/dist/cjs/entity-changes.js +136 -0
- package/dist/cjs/entity-changes.js.map +1 -0
- package/dist/{entity-schema-registry.d.ts → cjs/entity-schema-registry.d.ts} +2 -2
- package/dist/cjs/entity-schema-registry.d.ts.map +1 -0
- package/dist/cjs/entity-schema-registry.js +370 -0
- package/dist/cjs/entity-schema-registry.js.map +1 -0
- package/dist/{entity.d.ts → cjs/entity.d.ts} +2 -2
- package/dist/cjs/entity.d.ts.map +1 -0
- package/dist/cjs/entity.js +11 -0
- package/dist/cjs/entity.js.map +1 -0
- package/dist/cjs/exceptions.d.ts.map +1 -0
- package/dist/cjs/exceptions.js +365 -0
- package/dist/cjs/exceptions.js.map +1 -0
- package/dist/cjs/id.d.ts.map +1 -0
- package/dist/cjs/id.js +80 -0
- package/dist/cjs/id.js.map +1 -0
- package/dist/cjs/index.d.ts +17 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +47 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/mapper.d.ts.map +1 -0
- package/dist/cjs/mapper.js +7 -0
- package/dist/cjs/mapper.js.map +1 -0
- package/dist/{paginated-result.d.ts → cjs/paginated-result.d.ts} +2 -2
- package/dist/cjs/paginated-result.d.ts.map +1 -0
- package/dist/cjs/paginated-result.js +194 -0
- package/dist/cjs/paginated-result.js.map +1 -0
- package/dist/{repository → cjs/repository}/base-repository.d.ts +4 -4
- package/dist/cjs/repository/base-repository.d.ts.map +1 -0
- package/dist/cjs/repository/base-repository.js +16 -0
- package/dist/cjs/repository/base-repository.js.map +1 -0
- package/dist/cjs/repository/index.d.ts +4 -0
- package/dist/cjs/repository/index.d.ts.map +1 -0
- package/dist/cjs/repository/index.js +24 -0
- package/dist/cjs/repository/index.js.map +1 -0
- package/dist/{repository → cjs/repository}/unit-of-work.d.ts +1 -1
- package/dist/cjs/repository/unit-of-work.d.ts.map +1 -0
- package/dist/cjs/repository/unit-of-work.js +60 -0
- package/dist/cjs/repository/unit-of-work.js.map +1 -0
- package/dist/cjs/types/change-tracker.d.ts +226 -0
- package/dist/cjs/types/change-tracker.d.ts.map +1 -0
- package/dist/cjs/types/change-tracker.js +3 -0
- package/dist/cjs/types/change-tracker.js.map +1 -0
- package/dist/cjs/types/criteria.d.ts +60 -0
- package/dist/cjs/types/criteria.d.ts.map +1 -0
- package/dist/cjs/types/criteria.js +20 -0
- package/dist/cjs/types/criteria.js.map +1 -0
- package/dist/cjs/types/domain-event.d.ts +32 -0
- package/dist/cjs/types/domain-event.d.ts.map +1 -0
- package/dist/cjs/types/domain-event.js +3 -0
- package/dist/{types → cjs/types}/domain-event.js.map +1 -1
- package/dist/{types → cjs/types}/domain.d.ts +2 -2
- package/dist/cjs/types/domain.d.ts.map +1 -0
- package/dist/cjs/types/domain.js +3 -0
- package/dist/{types → cjs/types}/domain.js.map +1 -1
- package/dist/cjs/types/index.d.ts +8 -0
- package/dist/cjs/types/index.d.ts.map +1 -0
- package/dist/cjs/types/index.js +24 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/standard-schema.d.ts.map +1 -0
- package/dist/cjs/types/standard-schema.js +3 -0
- package/dist/cjs/types/standard-schema.js.map +1 -0
- package/dist/{types → cjs/types}/unit-of-work.d.ts +2 -2
- package/dist/cjs/types/unit-of-work.d.ts.map +1 -0
- package/dist/cjs/types/unit-of-work.js +3 -0
- package/dist/{types → cjs/types}/unit-of-work.js.map +1 -1
- package/dist/{types → cjs/types}/utils.d.ts +1 -1
- package/dist/cjs/types/utils.d.ts.map +1 -0
- package/dist/cjs/types/utils.js +3 -0
- package/dist/{types → cjs/types}/utils.js.map +1 -1
- package/dist/{utils → cjs/utils}/criteria-operator-validation.d.ts +1 -1
- package/dist/cjs/utils/criteria-operator-validation.d.ts.map +1 -0
- package/dist/cjs/utils/criteria-operator-validation.js +171 -0
- package/dist/cjs/utils/criteria-operator-validation.js.map +1 -0
- package/dist/cjs/utils/helpers.d.ts.map +1 -0
- package/dist/cjs/utils/helpers.js +37 -0
- package/dist/cjs/utils/helpers.js.map +1 -0
- package/dist/cjs/validation-error.d.ts.map +1 -0
- package/dist/cjs/validation-error.js +117 -0
- package/dist/cjs/validation-error.js.map +1 -0
- package/dist/{value-object.d.ts → cjs/value-object.d.ts} +2 -2
- package/dist/cjs/value-object.d.ts.map +1 -0
- package/dist/cjs/value-object.js +192 -0
- package/dist/cjs/value-object.js.map +1 -0
- package/dist/esm/aggregate-changes.d.ts +206 -0
- package/dist/esm/aggregate-changes.d.ts.map +1 -0
- package/dist/{aggregate-changes.js → esm/aggregate-changes.js} +1 -1
- package/dist/esm/aggregate-changes.js.map +1 -0
- package/dist/esm/base-entity.d.ts +91 -0
- package/dist/esm/base-entity.d.ts.map +1 -0
- package/dist/{base-entity.js → esm/base-entity.js} +5 -5
- package/dist/esm/base-entity.js.map +1 -0
- package/dist/esm/change-tracker.d.ts +98 -0
- package/dist/esm/change-tracker.d.ts.map +1 -0
- package/dist/{change-tracker.js → esm/change-tracker.js} +4 -4
- package/dist/esm/change-tracker.js.map +1 -0
- package/dist/esm/constants.d.ts +9 -0
- package/dist/esm/constants.d.ts.map +1 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/criteria.d.ts +62 -0
- package/dist/esm/criteria.d.ts.map +1 -0
- package/dist/{criteria.js → esm/criteria.js} +3 -3
- package/dist/esm/criteria.js.map +1 -0
- package/dist/esm/crypto.d.ts +3 -0
- package/dist/esm/crypto.d.ts.map +1 -0
- package/dist/esm/crypto.js.map +1 -0
- package/dist/esm/domain-event-bus.d.ts +56 -0
- package/dist/esm/domain-event-bus.d.ts.map +1 -0
- package/dist/esm/domain-event-bus.js.map +1 -0
- package/dist/esm/domain-event.d.ts +25 -0
- package/dist/esm/domain-event.d.ts.map +1 -0
- package/dist/{domain-event.js → esm/domain-event.js} +1 -1
- package/dist/esm/domain-event.js.map +1 -0
- package/dist/esm/entity-changes.d.ts +84 -0
- package/dist/esm/entity-changes.d.ts.map +1 -0
- package/dist/esm/entity-changes.js.map +1 -0
- package/dist/esm/entity-schema-registry.d.ts +282 -0
- package/dist/esm/entity-schema-registry.d.ts.map +1 -0
- package/dist/{entity-schema-registry.js → esm/entity-schema-registry.js} +5 -5
- package/dist/esm/entity-schema-registry.js.map +1 -0
- package/dist/esm/entity.d.ts +7 -0
- package/dist/esm/entity.d.ts.map +1 -0
- package/dist/{entity.js → esm/entity.js} +1 -1
- package/dist/esm/entity.js.map +1 -0
- package/dist/esm/exceptions.d.ts +251 -0
- package/dist/esm/exceptions.d.ts.map +1 -0
- package/dist/esm/exceptions.js.map +1 -0
- package/dist/esm/id.d.ts +52 -0
- package/dist/esm/id.d.ts.map +1 -0
- package/dist/{id.js → esm/id.js} +1 -1
- package/dist/esm/id.js.map +1 -0
- package/dist/esm/index.d.ts +17 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +16 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/mapper.d.ts +4 -0
- package/dist/esm/mapper.d.ts.map +1 -0
- package/dist/esm/mapper.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/paginated-result.d.ts +62 -0
- package/dist/esm/paginated-result.d.ts.map +1 -0
- package/dist/{paginated-result.js → esm/paginated-result.js} +1 -1
- package/dist/esm/paginated-result.js.map +1 -0
- package/dist/esm/repository/base-repository.d.ts +28 -0
- package/dist/esm/repository/base-repository.d.ts.map +1 -0
- package/dist/esm/repository/base-repository.js.map +1 -0
- package/dist/esm/repository/index.d.ts +4 -0
- package/dist/esm/repository/index.d.ts.map +1 -0
- package/dist/esm/repository/index.js +4 -0
- package/dist/esm/repository/index.js.map +1 -0
- package/dist/esm/repository/unit-of-work.d.ts +34 -0
- package/dist/esm/repository/unit-of-work.d.ts.map +1 -0
- package/dist/esm/repository/unit-of-work.js.map +1 -0
- package/dist/esm/types/change-tracker.d.ts +226 -0
- package/dist/esm/types/change-tracker.d.ts.map +1 -0
- package/dist/esm/types/change-tracker.js.map +1 -0
- package/dist/esm/types/criteria.d.ts +60 -0
- package/dist/esm/types/criteria.d.ts.map +1 -0
- package/dist/esm/types/criteria.js.map +1 -0
- package/dist/esm/types/domain-event.d.ts +32 -0
- package/dist/esm/types/domain-event.d.ts.map +1 -0
- package/dist/esm/types/domain-event.js.map +1 -0
- package/dist/esm/types/domain.d.ts +29 -0
- package/dist/esm/types/domain.d.ts.map +1 -0
- package/dist/esm/types/domain.js.map +1 -0
- package/dist/esm/types/index.d.ts +8 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/esm/types/index.js +8 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/standard-schema.d.ts +15 -0
- package/dist/esm/types/standard-schema.d.ts.map +1 -0
- package/dist/esm/types/standard-schema.js.map +1 -0
- package/dist/esm/types/unit-of-work.d.ts +39 -0
- package/dist/esm/types/unit-of-work.d.ts.map +1 -0
- package/dist/esm/types/unit-of-work.js.map +1 -0
- package/{src/types/utils.ts → dist/esm/types/utils.d.ts} +13 -20
- package/dist/esm/types/utils.d.ts.map +1 -0
- package/dist/esm/types/utils.js.map +1 -0
- package/dist/esm/utils/criteria-operator-validation.d.ts +6 -0
- package/dist/esm/utils/criteria-operator-validation.d.ts.map +1 -0
- package/dist/{utils → esm/utils}/criteria-operator-validation.js +1 -1
- package/dist/esm/utils/criteria-operator-validation.js.map +1 -0
- package/dist/esm/utils/helpers.d.ts +3 -0
- package/dist/esm/utils/helpers.d.ts.map +1 -0
- package/dist/esm/utils/helpers.js.map +1 -0
- package/dist/esm/validation-error.d.ts +56 -0
- package/dist/esm/validation-error.d.ts.map +1 -0
- package/dist/esm/validation-error.js.map +1 -0
- package/dist/esm/value-object.d.ts +96 -0
- package/dist/esm/value-object.d.ts.map +1 -0
- package/dist/{value-object.js → esm/value-object.js} +3 -3
- package/dist/esm/value-object.js.map +1 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.esm.tsbuildinfo +1 -0
- package/dist/tsconfig.types.tsbuildinfo +1 -0
- package/dist/types/aggregate-changes.d.ts +206 -0
- package/dist/types/aggregate-changes.d.ts.map +1 -0
- package/dist/types/base-entity.d.ts +91 -0
- package/dist/types/base-entity.d.ts.map +1 -0
- package/dist/types/change-tracker.d.ts +90 -218
- package/dist/types/change-tracker.d.ts.map +1 -1
- package/dist/types/constants.d.ts +9 -0
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/types/criteria.d.ts +59 -57
- package/dist/types/criteria.d.ts.map +1 -1
- package/dist/types/crypto.d.ts +3 -0
- package/dist/types/crypto.d.ts.map +1 -0
- package/dist/types/domain-event-bus.d.ts +56 -0
- package/dist/types/domain-event-bus.d.ts.map +1 -0
- package/dist/types/domain-event.d.ts +14 -21
- package/dist/types/domain-event.d.ts.map +1 -1
- package/dist/types/entity-changes.d.ts +84 -0
- package/dist/types/entity-changes.d.ts.map +1 -0
- package/dist/types/entity-schema-registry.d.ts +282 -0
- package/dist/types/entity-schema-registry.d.ts.map +1 -0
- package/dist/types/entity.d.ts +7 -0
- package/dist/types/entity.d.ts.map +1 -0
- package/dist/types/exceptions.d.ts +251 -0
- package/dist/types/exceptions.d.ts.map +1 -0
- package/dist/types/id.d.ts +52 -0
- package/dist/types/id.d.ts.map +1 -0
- package/dist/types/index.d.ts +16 -7
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/mapper.d.ts +4 -0
- package/dist/types/mapper.d.ts.map +1 -0
- package/dist/types/paginated-result.d.ts +62 -0
- package/dist/types/paginated-result.d.ts.map +1 -0
- package/dist/types/repository/base-repository.d.ts +28 -0
- package/dist/types/repository/base-repository.d.ts.map +1 -0
- package/dist/types/repository/index.d.ts +4 -0
- package/dist/types/repository/index.d.ts.map +1 -0
- package/dist/types/repository/unit-of-work.d.ts +34 -0
- package/dist/types/repository/unit-of-work.d.ts.map +1 -0
- package/dist/types/types/change-tracker.d.ts +226 -0
- package/dist/types/types/change-tracker.d.ts.map +1 -0
- package/dist/types/types/criteria.d.ts +60 -0
- package/dist/types/types/criteria.d.ts.map +1 -0
- package/dist/types/types/domain-event.d.ts +32 -0
- package/dist/types/types/domain-event.d.ts.map +1 -0
- package/dist/types/types/domain.d.ts +29 -0
- package/dist/types/types/domain.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +8 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/types/standard-schema.d.ts +15 -0
- package/dist/types/types/standard-schema.d.ts.map +1 -0
- package/dist/types/types/unit-of-work.d.ts +39 -0
- package/dist/types/types/unit-of-work.d.ts.map +1 -0
- package/dist/types/types/utils.d.ts +13 -0
- package/dist/types/types/utils.d.ts.map +1 -0
- package/dist/types/utils/criteria-operator-validation.d.ts +6 -0
- package/dist/types/utils/criteria-operator-validation.d.ts.map +1 -0
- package/dist/types/utils/helpers.d.ts +3 -0
- package/dist/types/utils/helpers.d.ts.map +1 -0
- package/dist/types/validation-error.d.ts +56 -0
- package/dist/types/validation-error.d.ts.map +1 -0
- package/dist/types/value-object.d.ts +96 -0
- package/dist/types/value-object.d.ts.map +1 -0
- package/package.json +18 -15
- package/dist/aggregate-changes.d.ts.map +0 -1
- package/dist/aggregate-changes.js.map +0 -1
- package/dist/base-entity.d.ts.map +0 -1
- package/dist/base-entity.js.map +0 -1
- package/dist/change-tracker.d.ts.map +0 -1
- package/dist/change-tracker.js.map +0 -1
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js.map +0 -1
- package/dist/criteria.d.ts.map +0 -1
- package/dist/crypto.d.ts.map +0 -1
- package/dist/crypto.js.map +0 -1
- package/dist/domain-event-bus.d.ts.map +0 -1
- package/dist/domain-event-bus.js.map +0 -1
- package/dist/domain-event.d.ts.map +0 -1
- package/dist/domain-event.js.map +0 -1
- package/dist/entity-changes.d.ts.map +0 -1
- package/dist/entity-changes.js.map +0 -1
- package/dist/entity-schema-registry.d.ts.map +0 -1
- package/dist/entity-schema-registry.js.map +0 -1
- package/dist/entity.d.ts.map +0 -1
- package/dist/entity.js.map +0 -1
- package/dist/exceptions.d.ts.map +0 -1
- package/dist/exceptions.js.map +0 -1
- package/dist/id.d.ts.map +0 -1
- package/dist/id.js.map +0 -1
- package/dist/index.d.ts +0 -17
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -16
- package/dist/index.js.map +0 -1
- package/dist/mapper.d.ts.map +0 -1
- package/dist/mapper.js.map +0 -1
- package/dist/paginated-result.d.ts.map +0 -1
- package/dist/paginated-result.js.map +0 -1
- package/dist/repository/base-repository.d.ts.map +0 -1
- package/dist/repository/base-repository.js.map +0 -1
- package/dist/repository/index.d.ts +0 -4
- package/dist/repository/index.d.ts.map +0 -1
- package/dist/repository/index.js +0 -4
- package/dist/repository/index.js.map +0 -1
- package/dist/repository/unit-of-work.d.ts.map +0 -1
- package/dist/repository/unit-of-work.js.map +0 -1
- package/dist/types/change-tracker.js.map +0 -1
- package/dist/types/criteria.js.map +0 -1
- package/dist/types/domain.d.ts.map +0 -1
- package/dist/types/index.js +0 -8
- package/dist/types/index.js.map +0 -1
- package/dist/types/standard-schema.d.ts.map +0 -1
- package/dist/types/standard-schema.js.map +0 -1
- package/dist/types/unit-of-work.d.ts.map +0 -1
- package/dist/types/utils.d.ts.map +0 -1
- package/dist/utils/criteria-operator-validation.d.ts.map +0 -1
- package/dist/utils/criteria-operator-validation.js.map +0 -1
- package/dist/utils/helpers.d.ts.map +0 -1
- package/dist/utils/helpers.js.map +0 -1
- package/dist/validation-error.d.ts.map +0 -1
- package/dist/validation-error.js.map +0 -1
- package/dist/value-object.d.ts.map +0 -1
- package/dist/value-object.js.map +0 -1
- package/eslint.config.js +0 -57
- package/jest.config.js +0 -21
- package/src/aggregate-changes.ts +0 -444
- package/src/base-entity.ts +0 -410
- package/src/change-tracker.ts +0 -1123
- package/src/constants.ts +0 -81
- package/src/criteria.ts +0 -521
- package/src/crypto.ts +0 -31
- package/src/domain-event-bus.ts +0 -152
- package/src/domain-event.ts +0 -49
- package/src/entity-changes.ts +0 -146
- package/src/entity-schema-registry.ts +0 -505
- package/src/entity.ts +0 -5
- package/src/exceptions.ts +0 -435
- package/src/id.ts +0 -98
- package/src/index.ts +0 -52
- package/src/mapper.ts +0 -6
- package/src/paginated-result.ts +0 -250
- package/src/repository/base-repository.ts +0 -33
- package/src/repository/index.ts +0 -3
- package/src/repository/unit-of-work.ts +0 -76
- package/src/types/change-tracker.ts +0 -264
- package/src/types/criteria.ts +0 -159
- package/src/types/domain-event.ts +0 -38
- package/src/types/domain.ts +0 -33
- package/src/types/index.ts +0 -7
- package/src/types/standard-schema.ts +0 -19
- package/src/types/unit-of-work.ts +0 -46
- package/src/utils/criteria-operator-validation.ts +0 -209
- package/src/utils/helpers.ts +0 -34
- package/src/validation-error.ts +0 -141
- package/src/value-object.ts +0 -249
- /package/dist/{constants.d.ts → cjs/constants.d.ts} +0 -0
- /package/dist/{crypto.d.ts → cjs/crypto.d.ts} +0 -0
- /package/dist/{domain-event-bus.d.ts → cjs/domain-event-bus.d.ts} +0 -0
- /package/dist/{exceptions.d.ts → cjs/exceptions.d.ts} +0 -0
- /package/dist/{id.d.ts → cjs/id.d.ts} +0 -0
- /package/dist/{mapper.d.ts → cjs/mapper.d.ts} +0 -0
- /package/dist/{types → cjs/types}/standard-schema.d.ts +0 -0
- /package/dist/{utils → cjs/utils}/helpers.d.ts +0 -0
- /package/dist/{validation-error.d.ts → cjs/validation-error.d.ts} +0 -0
- /package/dist/{constants.js → esm/constants.js} +0 -0
- /package/dist/{crypto.js → esm/crypto.js} +0 -0
- /package/dist/{domain-event-bus.js → esm/domain-event-bus.js} +0 -0
- /package/dist/{entity-changes.js → esm/entity-changes.js} +0 -0
- /package/dist/{exceptions.js → esm/exceptions.js} +0 -0
- /package/dist/{mapper.js → esm/mapper.js} +0 -0
- /package/dist/{repository → esm/repository}/base-repository.js +0 -0
- /package/dist/{repository → esm/repository}/unit-of-work.js +0 -0
- /package/dist/{types → esm/types}/change-tracker.js +0 -0
- /package/dist/{types → esm/types}/criteria.js +0 -0
- /package/dist/{types → esm/types}/domain-event.js +0 -0
- /package/dist/{types → esm/types}/domain.js +0 -0
- /package/dist/{types → esm/types}/standard-schema.js +0 -0
- /package/dist/{types → esm/types}/unit-of-work.js +0 -0
- /package/dist/{types → esm/types}/utils.js +0 -0
- /package/dist/{utils → esm/utils}/helpers.js +0 -0
- /package/dist/{validation-error.js → esm/validation-error.js} +0 -0
package/src/types/criteria.ts
DELETED
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
import { Primitive } from "./utils";
|
|
2
|
-
|
|
3
|
-
export const FILTER_OPERATORS = [
|
|
4
|
-
"equals",
|
|
5
|
-
"notEquals",
|
|
6
|
-
"greaterThan",
|
|
7
|
-
"greaterThanOrEqual",
|
|
8
|
-
"lessThan",
|
|
9
|
-
"lessThanOrEqual",
|
|
10
|
-
"contains",
|
|
11
|
-
"startsWith",
|
|
12
|
-
"endsWith",
|
|
13
|
-
"in",
|
|
14
|
-
"notIn",
|
|
15
|
-
"between",
|
|
16
|
-
"isNull",
|
|
17
|
-
"isNotNull",
|
|
18
|
-
] as const;
|
|
19
|
-
|
|
20
|
-
export type FilterOperator = (typeof FILTER_OPERATORS)[number];
|
|
21
|
-
|
|
22
|
-
export type StringOperators =
|
|
23
|
-
| "equals"
|
|
24
|
-
| "notEquals"
|
|
25
|
-
| "contains"
|
|
26
|
-
| "startsWith"
|
|
27
|
-
| "endsWith"
|
|
28
|
-
| "in"
|
|
29
|
-
| "notIn"
|
|
30
|
-
| "isNull"
|
|
31
|
-
| "isNotNull";
|
|
32
|
-
|
|
33
|
-
export type NumberOperators =
|
|
34
|
-
| "equals"
|
|
35
|
-
| "notEquals"
|
|
36
|
-
| "greaterThan"
|
|
37
|
-
| "greaterThanOrEqual"
|
|
38
|
-
| "lessThan"
|
|
39
|
-
| "lessThanOrEqual"
|
|
40
|
-
| "in"
|
|
41
|
-
| "notIn"
|
|
42
|
-
| "between"
|
|
43
|
-
| "isNull"
|
|
44
|
-
| "isNotNull";
|
|
45
|
-
|
|
46
|
-
export type DateOperators =
|
|
47
|
-
| "equals"
|
|
48
|
-
| "notEquals"
|
|
49
|
-
| "greaterThan"
|
|
50
|
-
| "greaterThanOrEqual"
|
|
51
|
-
| "lessThan"
|
|
52
|
-
| "lessThanOrEqual"
|
|
53
|
-
| "in"
|
|
54
|
-
| "notIn"
|
|
55
|
-
| "between"
|
|
56
|
-
| "isNull"
|
|
57
|
-
| "isNotNull";
|
|
58
|
-
|
|
59
|
-
export type BooleanOperators = "equals" | "notEquals" | "isNull" | "isNotNull";
|
|
60
|
-
|
|
61
|
-
export type ArrayOperators = "in" | "notIn" | "isNull" | "isNotNull";
|
|
62
|
-
|
|
63
|
-
export type OperatorsForType<T> = T extends string
|
|
64
|
-
? StringOperators
|
|
65
|
-
: T extends number
|
|
66
|
-
? NumberOperators
|
|
67
|
-
: T extends Date
|
|
68
|
-
? DateOperators
|
|
69
|
-
: T extends boolean
|
|
70
|
-
? BooleanOperators
|
|
71
|
-
: T extends Array<any>
|
|
72
|
-
? ArrayOperators
|
|
73
|
-
: FilterOperator;
|
|
74
|
-
|
|
75
|
-
export type FilterValueFor<T> =
|
|
76
|
-
| T
|
|
77
|
-
| (T extends number | Date ? [T, T] : never)
|
|
78
|
-
| T[]
|
|
79
|
-
| null;
|
|
80
|
-
|
|
81
|
-
export type PathValue<
|
|
82
|
-
T,
|
|
83
|
-
P extends string
|
|
84
|
-
> = P extends `${infer K}.${infer Rest}`
|
|
85
|
-
? K extends keyof T
|
|
86
|
-
? T[K] extends Array<infer U>
|
|
87
|
-
? PathValue<U, Rest>
|
|
88
|
-
: PathValue<T[K], Rest>
|
|
89
|
-
: never
|
|
90
|
-
: P extends keyof T
|
|
91
|
-
? T[P]
|
|
92
|
-
: never;
|
|
93
|
-
|
|
94
|
-
export interface Filter<TField = string, TValue = unknown> {
|
|
95
|
-
field: TField;
|
|
96
|
-
operator: unknown extends TValue ? FilterOperator : OperatorsForType<TValue>;
|
|
97
|
-
value: TValue;
|
|
98
|
-
options?: CriteriaOptions;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
export type TypedFilter<T> = {
|
|
102
|
-
[K in FieldPath<T>]: {
|
|
103
|
-
field: K;
|
|
104
|
-
operator: OperatorsForType<NonNullable<PathValue<T, K>>>;
|
|
105
|
-
value: FilterValueFor<NonNullable<PathValue<T, K>>>;
|
|
106
|
-
options?: CriteriaOptions;
|
|
107
|
-
};
|
|
108
|
-
}[FieldPath<T>];
|
|
109
|
-
|
|
110
|
-
export type CriteriaAdapter<Input, Output> = {
|
|
111
|
-
[K in FieldPath<Input>]?: FieldPath<Output>;
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
export type OrderDirection = "asc" | "desc";
|
|
115
|
-
|
|
116
|
-
export interface Order {
|
|
117
|
-
field: string;
|
|
118
|
-
direction: OrderDirection;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
export type TypedOrder<T> = {
|
|
122
|
-
field: FieldPath<T>;
|
|
123
|
-
direction: OrderDirection;
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
export interface Pagination {
|
|
127
|
-
page: number;
|
|
128
|
-
limit: number;
|
|
129
|
-
offset: number;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
export type Search = string;
|
|
133
|
-
|
|
134
|
-
export interface PaginationMeta {
|
|
135
|
-
page: number;
|
|
136
|
-
limit: number;
|
|
137
|
-
total: number;
|
|
138
|
-
totalPages: number;
|
|
139
|
-
hasNext: boolean;
|
|
140
|
-
hasPrevious: boolean;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
export interface CriteriaOptions {
|
|
144
|
-
quantifier?: "some" | "every" | "none";
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
type ExcludeBuiltInKeys<T> = Exclude<keyof T, keyof any[] | number | symbol>;
|
|
148
|
-
|
|
149
|
-
export type FieldPath<T> = T extends Primitive
|
|
150
|
-
? never
|
|
151
|
-
: {
|
|
152
|
-
[K in ExcludeBuiltInKeys<T> & string]: NonNullable<T[K]> extends Primitive
|
|
153
|
-
? K
|
|
154
|
-
: NonNullable<T[K]> extends Array<infer U>
|
|
155
|
-
? U extends Primitive
|
|
156
|
-
? K
|
|
157
|
-
: K | `${K}.${FieldPath<U>}`
|
|
158
|
-
: `${K}.${FieldPath<NonNullable<T[K]>>}`;
|
|
159
|
-
}[ExcludeBuiltInKeys<T> & string];
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Interface for all domain events
|
|
3
|
-
*/
|
|
4
|
-
export interface IDomainEvent {
|
|
5
|
-
/**
|
|
6
|
-
* Unique identifier for this event occurrence
|
|
7
|
-
*/
|
|
8
|
-
readonly eventId: string;
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* When the event occurred
|
|
12
|
-
*/
|
|
13
|
-
readonly occurredOn: Date;
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Name/type of the event (e.g., "UserCreated", "OrderPlaced")
|
|
17
|
-
*/
|
|
18
|
-
readonly eventName: string;
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* ID of the aggregate that raised this event
|
|
22
|
-
*/
|
|
23
|
-
readonly aggregateId: string;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Event handler function type
|
|
28
|
-
*/
|
|
29
|
-
export type DomainEventHandler<T extends IDomainEvent = IDomainEvent> = (
|
|
30
|
-
event: T
|
|
31
|
-
) => void | Promise<void>;
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Event handler class type
|
|
35
|
-
*/
|
|
36
|
-
export interface IDomainEventHandler<T extends IDomainEvent = IDomainEvent> {
|
|
37
|
-
handle(event: T): void | Promise<void>;
|
|
38
|
-
}
|
package/src/types/domain.ts
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { Id } from "../id";
|
|
2
|
-
import { StandardSchema } from "./standard-schema";
|
|
3
|
-
|
|
4
|
-
export interface BaseProps {
|
|
5
|
-
id: Id;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
interface DomainValidation<T> {
|
|
9
|
-
schema: StandardSchema<T>;
|
|
10
|
-
config?: ValidationConfig;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export type EntityValidation<T> = DomainValidation<T>;
|
|
14
|
-
export type VOValidation<T> = DomainValidation<T>;
|
|
15
|
-
|
|
16
|
-
export interface VOHooks<T, E> {
|
|
17
|
-
onBeforeCreate?: (props: T) => void;
|
|
18
|
-
onCreate?: (entity: E) => void;
|
|
19
|
-
rules?: (entity: E) => void;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export interface EntityHooks<T extends BaseProps, E> {
|
|
23
|
-
onBeforeCreate?: (props: T) => void;
|
|
24
|
-
onBeforeUpdate?: (entity: E, snapshot: T) => boolean;
|
|
25
|
-
onCreate?: (entity: E) => void;
|
|
26
|
-
rules?: (entity: E) => void;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface ValidationConfig {
|
|
30
|
-
onCreate?: boolean;
|
|
31
|
-
onUpdate?: boolean;
|
|
32
|
-
throwOnError?: boolean;
|
|
33
|
-
}
|
package/src/types/index.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export interface StandardSchemaIssue {
|
|
2
|
-
message: string;
|
|
3
|
-
path?: ReadonlyArray<unknown>;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
export interface StandardSchemaResult<T> {
|
|
7
|
-
value?: T;
|
|
8
|
-
issues?: ReadonlyArray<StandardSchemaIssue>;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export interface StandardSchemaProps<T> {
|
|
12
|
-
validate: (
|
|
13
|
-
value: unknown
|
|
14
|
-
) => StandardSchemaResult<T> | Promise<StandardSchemaResult<T>>;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export interface StandardSchema<T = unknown> {
|
|
18
|
-
"~standard": StandardSchemaProps<T>;
|
|
19
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { Aggregate } from "../entity";
|
|
2
|
-
import { Repository } from "../repository/base-repository";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Transaction context for Unit of Work
|
|
6
|
-
*/
|
|
7
|
-
export interface TransactionContext {
|
|
8
|
-
/**
|
|
9
|
-
* Commit all changes
|
|
10
|
-
*/
|
|
11
|
-
commit(): Promise<void>;
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Rollback all changes
|
|
15
|
-
*/
|
|
16
|
-
rollback(): Promise<void>;
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Check if transaction is active
|
|
20
|
-
*/
|
|
21
|
-
isActive(): boolean;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Unit of Work interface
|
|
26
|
-
* Manages transactions across multiple repositories
|
|
27
|
-
*/
|
|
28
|
-
export interface IUnitOfWork {
|
|
29
|
-
/**
|
|
30
|
-
* Start a new transaction
|
|
31
|
-
*/
|
|
32
|
-
begin(): Promise<TransactionContext>;
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Execute work within a transaction
|
|
36
|
-
* Auto-commits on success, rolls back on error
|
|
37
|
-
*/
|
|
38
|
-
transaction<T>(work: (ctx: TransactionContext) => Promise<T>): Promise<T>;
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Get repository within transaction context
|
|
42
|
-
*/
|
|
43
|
-
getRepository<TDomain extends Aggregate<any>>(
|
|
44
|
-
repository: new (...args: any[]) => Repository<TDomain>
|
|
45
|
-
): Repository<TDomain>;
|
|
46
|
-
}
|
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ArrayOperators,
|
|
3
|
-
BooleanOperators,
|
|
4
|
-
DateOperators,
|
|
5
|
-
FILTER_OPERATORS,
|
|
6
|
-
FilterOperator,
|
|
7
|
-
NumberOperators,
|
|
8
|
-
StringOperators,
|
|
9
|
-
} from "../types";
|
|
10
|
-
|
|
11
|
-
const FORCE_STRING_OPERATORS = new Set(["contains", "startsWith", "endsWith"]);
|
|
12
|
-
|
|
13
|
-
export function sanitizeFieldValue(
|
|
14
|
-
value: unknown,
|
|
15
|
-
operator: FilterOperator
|
|
16
|
-
): unknown {
|
|
17
|
-
if (value === null || value === undefined) {
|
|
18
|
-
return value;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
if (Array.isArray(value)) {
|
|
22
|
-
return value.map((item) => sanitizeFieldValue(item, operator));
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
if (value instanceof Date) {
|
|
26
|
-
return value;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const stringValue = String(value).trim();
|
|
30
|
-
|
|
31
|
-
if (stringValue === "") {
|
|
32
|
-
return "";
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
if (operator && FORCE_STRING_OPERATORS.has(operator)) {
|
|
36
|
-
return stringValue;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
if (stringValue === "true" || stringValue === "false") {
|
|
40
|
-
return stringValue === "true";
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const numberValue = Number(stringValue);
|
|
44
|
-
if (!Number.isNaN(numberValue)) {
|
|
45
|
-
return numberValue;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const dateObj = new Date(stringValue);
|
|
49
|
-
if (!Number.isNaN(dateObj.getTime())) {
|
|
50
|
-
return dateObj;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return stringValue;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export function isValidOperatorForType(
|
|
57
|
-
value: unknown,
|
|
58
|
-
operator: FilterOperator
|
|
59
|
-
): boolean {
|
|
60
|
-
const sanitizedValue = sanitizeFieldValue(value, operator);
|
|
61
|
-
|
|
62
|
-
if (
|
|
63
|
-
operator === "between" &&
|
|
64
|
-
Array.isArray(sanitizedValue) &&
|
|
65
|
-
sanitizedValue.length === 2
|
|
66
|
-
) {
|
|
67
|
-
const elementType = typeof sanitizedValue[0];
|
|
68
|
-
if (elementType === "number" || sanitizedValue[0] instanceof Date) {
|
|
69
|
-
return true;
|
|
70
|
-
}
|
|
71
|
-
return false;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
const valueType = typeof sanitizedValue;
|
|
75
|
-
|
|
76
|
-
if (valueType === "string") {
|
|
77
|
-
const validOps: StringOperators[] = [
|
|
78
|
-
"equals",
|
|
79
|
-
"notEquals",
|
|
80
|
-
"contains",
|
|
81
|
-
"startsWith",
|
|
82
|
-
"endsWith",
|
|
83
|
-
"in",
|
|
84
|
-
"notIn",
|
|
85
|
-
"isNull",
|
|
86
|
-
"isNotNull",
|
|
87
|
-
];
|
|
88
|
-
return validOps.includes(operator as StringOperators);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
if (valueType === "number") {
|
|
92
|
-
const validOps: NumberOperators[] = [
|
|
93
|
-
"equals",
|
|
94
|
-
"notEquals",
|
|
95
|
-
"greaterThan",
|
|
96
|
-
"greaterThanOrEqual",
|
|
97
|
-
"lessThan",
|
|
98
|
-
"lessThanOrEqual",
|
|
99
|
-
"in",
|
|
100
|
-
"notIn",
|
|
101
|
-
"between",
|
|
102
|
-
"isNull",
|
|
103
|
-
"isNotNull",
|
|
104
|
-
];
|
|
105
|
-
return validOps.includes(operator as NumberOperators);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
if (valueType === "boolean") {
|
|
109
|
-
const validOps: BooleanOperators[] = [
|
|
110
|
-
"equals",
|
|
111
|
-
"notEquals",
|
|
112
|
-
"isNull",
|
|
113
|
-
"isNotNull",
|
|
114
|
-
];
|
|
115
|
-
return validOps.includes(operator as BooleanOperators);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
if (sanitizedValue instanceof Date) {
|
|
119
|
-
const validOps: DateOperators[] = [
|
|
120
|
-
"equals",
|
|
121
|
-
"notEquals",
|
|
122
|
-
"greaterThan",
|
|
123
|
-
"greaterThanOrEqual",
|
|
124
|
-
"lessThan",
|
|
125
|
-
"lessThanOrEqual",
|
|
126
|
-
"in",
|
|
127
|
-
"notIn",
|
|
128
|
-
"between",
|
|
129
|
-
"isNull",
|
|
130
|
-
"isNotNull",
|
|
131
|
-
];
|
|
132
|
-
return validOps.includes(operator as DateOperators);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
if (Array.isArray(sanitizedValue)) {
|
|
136
|
-
const validOps: ArrayOperators[] = ["in", "notIn", "isNull", "isNotNull"];
|
|
137
|
-
return validOps.includes(operator as ArrayOperators);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
return true;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
export function getValidOperatorsForType(value: unknown): FilterOperator[] {
|
|
144
|
-
if (value === null || value === undefined) {
|
|
145
|
-
return ["isNull", "isNotNull", "equals", "notEquals"];
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
const valueType = typeof value;
|
|
149
|
-
|
|
150
|
-
if (valueType === "string" && Number.isNaN(Number(value))) {
|
|
151
|
-
return [
|
|
152
|
-
"equals",
|
|
153
|
-
"notEquals",
|
|
154
|
-
"contains",
|
|
155
|
-
"startsWith",
|
|
156
|
-
"endsWith",
|
|
157
|
-
"in",
|
|
158
|
-
"notIn",
|
|
159
|
-
"isNull",
|
|
160
|
-
"isNotNull",
|
|
161
|
-
];
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
if (valueType === "number") {
|
|
165
|
-
return [
|
|
166
|
-
"equals",
|
|
167
|
-
"notEquals",
|
|
168
|
-
"greaterThan",
|
|
169
|
-
"greaterThanOrEqual",
|
|
170
|
-
"lessThan",
|
|
171
|
-
"lessThanOrEqual",
|
|
172
|
-
"in",
|
|
173
|
-
"notIn",
|
|
174
|
-
"between",
|
|
175
|
-
"isNull",
|
|
176
|
-
"isNotNull",
|
|
177
|
-
];
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
if (valueType === "boolean") {
|
|
181
|
-
return ["equals", "notEquals", "isNull", "isNotNull"];
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
if (value instanceof Date) {
|
|
185
|
-
return [
|
|
186
|
-
"equals",
|
|
187
|
-
"notEquals",
|
|
188
|
-
"greaterThan",
|
|
189
|
-
"greaterThanOrEqual",
|
|
190
|
-
"lessThan",
|
|
191
|
-
"lessThanOrEqual",
|
|
192
|
-
"in",
|
|
193
|
-
"notIn",
|
|
194
|
-
"between",
|
|
195
|
-
"isNull",
|
|
196
|
-
"isNotNull",
|
|
197
|
-
];
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
if (Array.isArray(value)) {
|
|
201
|
-
return ["in", "notIn", "isNull", "isNotNull"];
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
return [...FILTER_OPERATORS];
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
export function isOperator(value: string): value is FilterOperator {
|
|
208
|
-
return FILTER_OPERATORS.includes(value as FilterOperator);
|
|
209
|
-
}
|
package/src/utils/helpers.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
export function parseQueryValue(value: string): any {
|
|
2
|
-
if (!isNaN(Number(value))) return Number(value); // number
|
|
3
|
-
if (value === "true" || value === "false") return value === "true"; // boolean
|
|
4
|
-
if (!isNaN(Date.parse(value))) return new Date(value); // Date
|
|
5
|
-
return value; // string
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export function levenshteinDistance(a: string, b: string): number {
|
|
9
|
-
const matrix: number[][] = [];
|
|
10
|
-
|
|
11
|
-
for (let i = 0; i <= b.length; i++) {
|
|
12
|
-
matrix[i] = [i];
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
for (let j = 0; j <= a.length; j++) {
|
|
16
|
-
matrix[0][j] = j;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
for (let i = 1; i <= b.length; i++) {
|
|
20
|
-
for (let j = 1; j <= a.length; j++) {
|
|
21
|
-
if (b.charAt(i - 1) === a.charAt(j - 1)) {
|
|
22
|
-
matrix[i][j] = matrix[i - 1][j - 1];
|
|
23
|
-
} else {
|
|
24
|
-
matrix[i][j] = Math.min(
|
|
25
|
-
matrix[i - 1][j - 1] + 1, // substitution
|
|
26
|
-
matrix[i][j - 1] + 1, // insertion
|
|
27
|
-
matrix[i - 1][j] + 1 // deletion
|
|
28
|
-
);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
return matrix[b.length][a.length];
|
|
34
|
-
}
|
package/src/validation-error.ts
DELETED
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
export interface ValidationIssue {
|
|
2
|
-
path: string[];
|
|
3
|
-
message: string;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
export class ValidationError extends Error {
|
|
7
|
-
public readonly issues: ValidationIssue[];
|
|
8
|
-
public readonly __isValidationError = true;
|
|
9
|
-
public readonly entityName?: string;
|
|
10
|
-
|
|
11
|
-
constructor(issues: ValidationIssue[], options?: { message?: string; entityName?: string }) {
|
|
12
|
-
const errorMessage = options?.message || ValidationError.formatMessage(issues, options?.entityName);
|
|
13
|
-
super(errorMessage);
|
|
14
|
-
this.name = 'ValidationError';
|
|
15
|
-
this.issues = issues;
|
|
16
|
-
this.entityName = options?.entityName;
|
|
17
|
-
|
|
18
|
-
if (Error.captureStackTrace) {
|
|
19
|
-
Error.captureStackTrace(this, ValidationError);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
private static formatMessage(issues: ValidationIssue[], entityName?: string): string {
|
|
24
|
-
const entityPrefix = entityName ? `[${entityName}] ` : '';
|
|
25
|
-
|
|
26
|
-
if (issues.length === 0) {
|
|
27
|
-
return `${entityPrefix}Validation failed`;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
if (issues.length === 1) {
|
|
31
|
-
const issue = issues[0];
|
|
32
|
-
const pathStr = issue.path.length > 0 ? ` at "${issue.path.join('.')}"` : '';
|
|
33
|
-
return `${entityPrefix}Validation failed${pathStr}: ${issue.message}`;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const errorLines = issues.map((issue, index) => {
|
|
37
|
-
const pathStr = issue.path.length > 0 ? ` at "${issue.path.join('.')}"` : '';
|
|
38
|
-
return ` ${index + 1}. ${issue.message}${pathStr}`;
|
|
39
|
-
}).join('\n');
|
|
40
|
-
|
|
41
|
-
return `${entityPrefix}Validation failed with ${issues.length} error(s):\n${errorLines}`;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Check if an error is a ValidationError (works across module boundaries)
|
|
46
|
-
*/
|
|
47
|
-
static isValidationError(error: unknown): error is ValidationError {
|
|
48
|
-
if (error instanceof ValidationError) {
|
|
49
|
-
return true;
|
|
50
|
-
}
|
|
51
|
-
return (
|
|
52
|
-
error instanceof Error &&
|
|
53
|
-
error.name === 'ValidationError' &&
|
|
54
|
-
'issues' in error &&
|
|
55
|
-
Array.isArray((error as any).issues)
|
|
56
|
-
);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Get all error messages as a simple array
|
|
61
|
-
*/
|
|
62
|
-
getMessages(): string[] {
|
|
63
|
-
return this.issues.map(i => i.message);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Get errors for a specific field path
|
|
68
|
-
*/
|
|
69
|
-
getErrorsForPath(path: string): ValidationIssue[] {
|
|
70
|
-
return this.issues.filter(i => i.path.join('.') === path);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Check if a specific path has errors
|
|
75
|
-
*/
|
|
76
|
-
hasErrorsForPath(path: string): boolean {
|
|
77
|
-
return this.getErrorsForPath(path).length > 0;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Convert to a plain object for serialization
|
|
82
|
-
*/
|
|
83
|
-
toJSON(): { name: string; message: string; issues: ValidationIssue[]; entityName?: string } {
|
|
84
|
-
return {
|
|
85
|
-
name: this.name,
|
|
86
|
-
message: this.message,
|
|
87
|
-
issues: this.issues,
|
|
88
|
-
entityName: this.entityName,
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Get a formatted string with all validation errors
|
|
94
|
-
*/
|
|
95
|
-
getFormattedErrors(): string {
|
|
96
|
-
return this.issues.map((issue) => {
|
|
97
|
-
const pathStr = issue.path.length > 0 ? ` [${issue.path.join('.')}]` : '';
|
|
98
|
-
return `${pathStr} ${issue.message}`;
|
|
99
|
-
}).join('\n');
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Get a summary of the error for logging
|
|
104
|
-
*/
|
|
105
|
-
getSummary(): string {
|
|
106
|
-
const entityPrefix = this.entityName ? `[${this.entityName}] ` : '';
|
|
107
|
-
const paths = this.issues
|
|
108
|
-
.filter(i => i.path.length > 0)
|
|
109
|
-
.map(i => i.path.join('.'));
|
|
110
|
-
|
|
111
|
-
if (paths.length === 0) {
|
|
112
|
-
return `${entityPrefix}Validation failed with ${this.issues.length} error(s)`;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
const uniquePaths = Array.from(new Set(paths));
|
|
116
|
-
return `${entityPrefix}Validation failed on: ${uniquePaths.join(', ')} (${this.issues.length} error(s))`;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Helper to create a single validation issue
|
|
122
|
-
*/
|
|
123
|
-
export function createValidationIssue(
|
|
124
|
-
path: string | string[],
|
|
125
|
-
message: string
|
|
126
|
-
): ValidationIssue {
|
|
127
|
-
return {
|
|
128
|
-
path: Array.isArray(path) ? path : path.split('.'),
|
|
129
|
-
message,
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Helper to throw a validation error with a single issue
|
|
135
|
-
*/
|
|
136
|
-
export function throwValidationError(
|
|
137
|
-
path: string | string[],
|
|
138
|
-
message: string
|
|
139
|
-
): never {
|
|
140
|
-
throw new ValidationError([createValidationIssue(path, message)]);
|
|
141
|
-
}
|