From 8d8e6fc906720c1e4d2a795e492b2778da60f8eb Mon Sep 17 00:00:00 2001 From: Zamralik Date: Mon, 27 Jul 2026 20:51:04 +0200 Subject: [PATCH] feat: improve default behavior for properties and types --- packages/ddd/package.json | 2 +- packages/ddd/src/_index.mts | 1 + .../base/auxiliary/meta-property/_index.mts | 2 +- .../meta-property/base-meta-property.mts | 55 -------------- .../meta-property/definition/type/_index.mts | 2 +- .../type/base-meta-property.type.mts | 7 -- .../definition/type/meta-property.type.mts | 7 ++ .../auxiliary/meta-property/meta-property.mts | 53 ++++++++++++++ .../predefined-meta-property.mts | 9 ++- .../auxiliary/property-definition/_index.mts | 3 +- ...rty-definition-instantiation-interface.mts | 9 --- .../property-definition/definition/_index.mts | 1 + .../definition/interface/_index.mts | 1 + ...rty-definition-instantiation-interface.mts | 9 +++ .../definition/type/_index.mts | 2 +- .../type/base-property-definition.type.mts | 5 -- .../type/property-definition.type.mts | 5 ++ ...definition.mts => property-definition.mts} | 14 ++-- .../src/base/auxiliary/property/_index.mts | 4 +- .../property/base-immutable-property.mts | 20 ------ .../property/definition/interface/_index.mts | 2 +- .../base-property-instantiation.interface.mts | 10 --- .../property-instantiation.interface.mts | 10 +++ .../property/definition/type/_index.mts | 2 +- .../definition/type/base-property.type.mts | 6 -- .../definition/type/property.type.mts | 6 ++ .../auxiliary/property/immutable-property.mts | 20 ++++++ .../{base-property.mts => property.mts} | 10 +-- .../base/auxiliary/type-definition/_index.mts | 5 +- .../base-optional-type-definition.mts | 12 ---- ...ype-definition.mts => type-definition.mts} | 6 +- packages/ddd/src/base/primary/_index.mts | 10 +-- .../ddd/src/base/primary/base-factory.mts | 22 ------ .../ddd/src/base/primary/base-meta-record.mts | 15 ---- packages/ddd/src/base/primary/base-record.mts | 52 -------------- .../base/primary/base-write-repository.mts | 8 --- .../base/primary/definition/type/_index.mts | 4 +- .../definition/type/base-factory.type.mts | 6 -- .../type/base-record-constructor.type.mts | 5 -- .../primary/definition/type/factory.type.mts | 6 ++ .../type/record-constructor.type.mts | 5 ++ packages/ddd/src/base/primary/factory.mts | 22 ++++++ packages/ddd/src/base/primary/meta-record.mts | 15 ++++ ...ead-repository.mts => read-repository.mts} | 6 +- .../src/base/primary/repository-record.mts | 52 ++++++++++++++ .../ddd/src/base/primary/write-repository.mts | 8 +++ .../blank-record/blank-read-repository.mts | 4 +- .../ddd/src/blank-record/blank-record.mts | 8 +-- .../blank-record/blank-write-repository.mts | 4 +- .../blank-record-instantiation.interface.mts | 4 +- .../repository-date-meta-property.mts | 12 ++-- .../repository-date-property-definition.mts | 4 +- .../repository-date-property.mts | 4 +- .../type/repository-status-property.type.mts | 4 +- .../repository-status-meta-property.mts | 4 +- .../repository-status-property-definition.mts | 4 +- .../repository-status-property.mts | 8 +-- .../repository-status-type-definition.mts | 4 +- .../definition/type/uuid-v4-property.type.mts | 4 +- .../uuid-v4/uuid-v4-meta-property.mts | 10 +-- .../uuid-v4/uuid-v4-property-definition.mts | 4 +- packages/ddd/src/predefined-type/_index.mts | 7 +- .../ddd/src/predefined-type/array/_index.mts | 1 + .../array/array-type-definition.mts | 71 +++++++++++++++++++ .../date/date-type-definition.mts | 4 +- .../ddd/src/predefined-type/enum/_index.mts | 1 + .../enum/enum-type-definition.mts | 14 ++++ .../src/predefined-type/nullable/_index.mts | 1 + .../nullable}/nullable-type-definition.mts | 10 +-- .../src/predefined-type/optional/_index.mts | 1 + .../optional/optional-type-definition.mts | 12 ++++ .../relation/relation-type-definition.mts | 9 +++ .../src/predefined-type/required/_index.mts | 1 + .../required/required-type-definition.mts} | 8 +-- .../uuid-v4/uuid-v4-type-definition.mts | 4 +- packages/ddd/src/value-object/_index.mts | 3 + packages/ddd/src/value-object/box/_index.mts | 1 + packages/ddd/src/value-object/box/box.mts | 16 +++++ .../lazy-reference/_index.mts | 0 .../lazy-reference/lazy-reference.mts | 4 +- .../lazy-reference/null-reference.mts | 0 .../nullable-lazy-reference.mts | 4 +- .../password/_index.mts | 0 .../password/definition/_index.mts | 0 .../password/definition/interface/_index.mts | 0 .../password-instantiation.interface.mts | 0 .../password/null-password.mts | 0 .../password/nullable-password.mts | 0 .../password/password.factory.mts | 0 .../password/password.mts | 0 packages/ts-predicate/package.json | 2 +- .../src/extended/nullish/no-value.mts | 4 +- .../src/helper/stringify-error-tree.mts | 2 +- .../type-assertion/assert-allowed-keys.mts | 2 +- .../src/type-assertion/assert-enum-value.mts | 2 +- .../src/type-assertion/assert-union.mts | 4 +- .../src/type-guard/has-allowed-keys.mts | 2 +- .../src/type-guard/is-enum-value.mts | 2 +- .../ts-predicate/src/type-guard/is-union.mts | 4 +- 99 files changed, 467 insertions(+), 347 deletions(-) delete mode 100644 packages/ddd/src/base/auxiliary/meta-property/base-meta-property.mts delete mode 100644 packages/ddd/src/base/auxiliary/meta-property/definition/type/base-meta-property.type.mts create mode 100644 packages/ddd/src/base/auxiliary/meta-property/definition/type/meta-property.type.mts create mode 100644 packages/ddd/src/base/auxiliary/meta-property/meta-property.mts delete mode 100644 packages/ddd/src/base/auxiliary/property-definition/base-property-definition-instantiation-interface.mts create mode 100644 packages/ddd/src/base/auxiliary/property-definition/definition/interface/_index.mts create mode 100644 packages/ddd/src/base/auxiliary/property-definition/definition/interface/property-definition-instantiation-interface.mts delete mode 100644 packages/ddd/src/base/auxiliary/property-definition/definition/type/base-property-definition.type.mts create mode 100644 packages/ddd/src/base/auxiliary/property-definition/definition/type/property-definition.type.mts rename packages/ddd/src/base/auxiliary/property-definition/{base-property-definition.mts => property-definition.mts} (52%) delete mode 100644 packages/ddd/src/base/auxiliary/property/base-immutable-property.mts delete mode 100644 packages/ddd/src/base/auxiliary/property/definition/interface/base-property-instantiation.interface.mts create mode 100644 packages/ddd/src/base/auxiliary/property/definition/interface/property-instantiation.interface.mts delete mode 100644 packages/ddd/src/base/auxiliary/property/definition/type/base-property.type.mts create mode 100644 packages/ddd/src/base/auxiliary/property/definition/type/property.type.mts create mode 100644 packages/ddd/src/base/auxiliary/property/immutable-property.mts rename packages/ddd/src/base/auxiliary/property/{base-property.mts => property.mts} (78%) delete mode 100644 packages/ddd/src/base/auxiliary/type-definition/base-optional-type-definition.mts rename packages/ddd/src/base/auxiliary/type-definition/{base-type-definition.mts => type-definition.mts} (88%) delete mode 100644 packages/ddd/src/base/primary/base-factory.mts delete mode 100644 packages/ddd/src/base/primary/base-meta-record.mts delete mode 100644 packages/ddd/src/base/primary/base-record.mts delete mode 100644 packages/ddd/src/base/primary/base-write-repository.mts delete mode 100644 packages/ddd/src/base/primary/definition/type/base-factory.type.mts delete mode 100644 packages/ddd/src/base/primary/definition/type/base-record-constructor.type.mts create mode 100644 packages/ddd/src/base/primary/definition/type/factory.type.mts create mode 100644 packages/ddd/src/base/primary/definition/type/record-constructor.type.mts create mode 100644 packages/ddd/src/base/primary/factory.mts create mode 100644 packages/ddd/src/base/primary/meta-record.mts rename packages/ddd/src/base/primary/{base-read-repository.mts => read-repository.mts} (77%) create mode 100644 packages/ddd/src/base/primary/repository-record.mts create mode 100644 packages/ddd/src/base/primary/write-repository.mts create mode 100644 packages/ddd/src/predefined-type/array/_index.mts create mode 100644 packages/ddd/src/predefined-type/array/array-type-definition.mts create mode 100644 packages/ddd/src/predefined-type/enum/_index.mts create mode 100644 packages/ddd/src/predefined-type/enum/enum-type-definition.mts create mode 100644 packages/ddd/src/predefined-type/nullable/_index.mts rename packages/ddd/src/{base/auxiliary/type-definition => predefined-type/nullable}/nullable-type-definition.mts (73%) create mode 100644 packages/ddd/src/predefined-type/optional/_index.mts create mode 100644 packages/ddd/src/predefined-type/optional/optional-type-definition.mts create mode 100644 packages/ddd/src/predefined-type/relation/relation-type-definition.mts create mode 100644 packages/ddd/src/predefined-type/required/_index.mts rename packages/ddd/src/{base/auxiliary/type-definition/base-required-type-definition.mts => predefined-type/required/required-type-definition.mts} (56%) create mode 100644 packages/ddd/src/value-object/_index.mts create mode 100644 packages/ddd/src/value-object/box/_index.mts create mode 100644 packages/ddd/src/value-object/box/box.mts rename packages/ddd/src/{predefined-type => value-object}/lazy-reference/_index.mts (100%) rename packages/ddd/src/{predefined-type => value-object}/lazy-reference/lazy-reference.mts (83%) rename packages/ddd/src/{predefined-type => value-object}/lazy-reference/null-reference.mts (100%) rename packages/ddd/src/{predefined-type => value-object}/lazy-reference/nullable-lazy-reference.mts (63%) rename packages/ddd/src/{predefined-type => value-object}/password/_index.mts (100%) rename packages/ddd/src/{predefined-type => value-object}/password/definition/_index.mts (100%) rename packages/ddd/src/{predefined-type => value-object}/password/definition/interface/_index.mts (100%) rename packages/ddd/src/{predefined-type => value-object}/password/definition/interface/password-instantiation.interface.mts (100%) rename packages/ddd/src/{predefined-type => value-object}/password/null-password.mts (100%) rename packages/ddd/src/{predefined-type => value-object}/password/nullable-password.mts (100%) rename packages/ddd/src/{predefined-type => value-object}/password/password.factory.mts (100%) rename packages/ddd/src/{predefined-type => value-object}/password/password.mts (100%) diff --git a/packages/ddd/package.json b/packages/ddd/package.json index e54f79ce..61c1b464 100755 --- a/packages/ddd/package.json +++ b/packages/ddd/package.json @@ -1,6 +1,6 @@ { "name": "@vitruvius-labs/ddd", - "version": "0.1.1", + "version": "0.1.2", "description": "", "author": { "name": "VitruviusLabs" diff --git a/packages/ddd/src/_index.mts b/packages/ddd/src/_index.mts index c1034961..6a7d6c09 100644 --- a/packages/ddd/src/_index.mts +++ b/packages/ddd/src/_index.mts @@ -1,3 +1,4 @@ export * from "./base/_index.mjs"; export * from "./blank-record/_index.mjs"; +export * from "./value-object/_index.mjs"; export * from "./predefined-type/_index.mjs"; diff --git a/packages/ddd/src/base/auxiliary/meta-property/_index.mts b/packages/ddd/src/base/auxiliary/meta-property/_index.mts index f3048ac5..9fa894ca 100644 --- a/packages/ddd/src/base/auxiliary/meta-property/_index.mts +++ b/packages/ddd/src/base/auxiliary/meta-property/_index.mts @@ -1,3 +1,3 @@ export type * from "./definition/_index.mjs"; -export * from "./base-meta-property.mjs"; +export * from "./meta-property.mjs"; export * from "./predefined-meta-property.mjs"; diff --git a/packages/ddd/src/base/auxiliary/meta-property/base-meta-property.mts b/packages/ddd/src/base/auxiliary/meta-property/base-meta-property.mts deleted file mode 100644 index c2b1e210..00000000 --- a/packages/ddd/src/base/auxiliary/meta-property/base-meta-property.mts +++ /dev/null @@ -1,55 +0,0 @@ -import type { BasePropertyDefinition } from "../property-definition/base-property-definition.mjs"; -import type { BaseProperty } from "../property/base-property.mjs"; -import type { BasePropertyInstantiationInterface } from "../property/definition/interface/base-property-instantiation.interface.mjs"; -import type { BaseTypeDefinition } from "../type-definition/base-type-definition.mjs"; - -abstract class BaseMetaProperty, P extends BaseProperty = BaseProperty> -{ - public abstract getPropertyDefinition(): Promise>; - - protected abstract createProperty(parameters: BasePropertyInstantiationInterface): P; - - public async createNewProperty(value: T): Promise

- { - // @ts-expect-error -- We have to assume this is the correct definition - const definition: PD = await this.getPropertyDefinition(); - - const property: P = this.createProperty({ - definition: definition, - value: value, - existing: false, - }); - - return property; - } - - public async createExistingProperty(value: unknown): Promise

- { - // @ts-expect-error -- We have to assume this is the correct definition - const property_definition: PD = await this.getPropertyDefinition(); - - const type_definition: BaseTypeDefinition = property_definition.getTypeDefinition(); - - const normalized_value: T = await this.normalize(value, type_definition); - - await type_definition.verify(normalized_value); - - const property: P = this.createProperty({ - definition: property_definition, - value: normalized_value, - existing: true, - }); - - return property; - } - - // eslint-disable-next-line @ts/class-methods-use-this, @ts/require-await - public async normalize(value: unknown, type_definition: BaseTypeDefinition): Promise - { - type_definition.assertType(value); - - return value; - } -} - -export { BaseMetaProperty }; diff --git a/packages/ddd/src/base/auxiliary/meta-property/definition/type/_index.mts b/packages/ddd/src/base/auxiliary/meta-property/definition/type/_index.mts index 9bee720c..b1eea354 100644 --- a/packages/ddd/src/base/auxiliary/meta-property/definition/type/_index.mts +++ b/packages/ddd/src/base/auxiliary/meta-property/definition/type/_index.mts @@ -1 +1 @@ -export type * from "./base-meta-property.type.mjs"; +export type * from "./meta-property.type.mjs"; diff --git a/packages/ddd/src/base/auxiliary/meta-property/definition/type/base-meta-property.type.mts b/packages/ddd/src/base/auxiliary/meta-property/definition/type/base-meta-property.type.mts deleted file mode 100644 index 0f02e81f..00000000 --- a/packages/ddd/src/base/auxiliary/meta-property/definition/type/base-meta-property.type.mts +++ /dev/null @@ -1,7 +0,0 @@ -import type { BaseMetaProperty } from "../../base-meta-property.mjs"; -import type { BasePropertyType } from "../../../property/definition/type/base-property.type.mjs"; -import type { BasePropertyDefinitionType } from "../../../property-definition/definition/type/base-property-definition.type.mjs"; - -type BaseMetaPropertyType = BaseMetaProperty; - -export type { BaseMetaPropertyType }; diff --git a/packages/ddd/src/base/auxiliary/meta-property/definition/type/meta-property.type.mts b/packages/ddd/src/base/auxiliary/meta-property/definition/type/meta-property.type.mts new file mode 100644 index 00000000..1dc61b84 --- /dev/null +++ b/packages/ddd/src/base/auxiliary/meta-property/definition/type/meta-property.type.mts @@ -0,0 +1,7 @@ +import type { MetaProperty } from "../../meta-property.mjs"; +import type { PropertyType } from "../../../property/definition/type/property.type.mjs"; +import type { PropertyDefinitionType } from "../../../property-definition/definition/type/property-definition.type.mjs"; + +type MetaPropertyType = MetaProperty; + +export type { MetaPropertyType }; diff --git a/packages/ddd/src/base/auxiliary/meta-property/meta-property.mts b/packages/ddd/src/base/auxiliary/meta-property/meta-property.mts new file mode 100644 index 00000000..2a2ca3d5 --- /dev/null +++ b/packages/ddd/src/base/auxiliary/meta-property/meta-property.mts @@ -0,0 +1,53 @@ +import type { PropertyDefinition } from "../property-definition/property-definition.mjs"; +import type { Property } from "../property/property.mjs"; +import type { PropertyInstantiationInterface } from "../property/definition/interface/property-instantiation.interface.mjs"; +import type { TypeDefinition } from "../type-definition/type-definition.mjs"; + +abstract class MetaProperty = PropertyDefinition, P extends Property = Property> +{ + public abstract getPropertyDefinition(): Promise; + + protected abstract createProperty(parameters: PropertyInstantiationInterface): P; + + public async createNewProperty(value: T): Promise

+ { + const definition: PD = await this.getPropertyDefinition(); + + const property: P = this.createProperty({ + definition: definition, + value: value, + existing: false, + }); + + return property; + } + + public async createExistingProperty(value: unknown): Promise

+ { + const property_definition: PD = await this.getPropertyDefinition(); + + const type_definition: TypeDefinition = property_definition.getTypeDefinition(); + + const normalized_value: T = await this.normalize(value, type_definition); + + await type_definition.verify(normalized_value); + + const property: P = this.createProperty({ + definition: property_definition, + value: normalized_value, + existing: true, + }); + + return property; + } + + // eslint-disable-next-line @ts/class-methods-use-this, @ts/require-await + public async normalize(value: unknown, type_definition: TypeDefinition): Promise + { + type_definition.assertType(value); + + return value; + } +} + +export { MetaProperty }; diff --git a/packages/ddd/src/base/auxiliary/meta-property/predefined-meta-property.mts b/packages/ddd/src/base/auxiliary/meta-property/predefined-meta-property.mts index 9423d184..168f81ac 100644 --- a/packages/ddd/src/base/auxiliary/meta-property/predefined-meta-property.mts +++ b/packages/ddd/src/base/auxiliary/meta-property/predefined-meta-property.mts @@ -1,14 +1,13 @@ -import type { BasePropertyDefinition } from "../property-definition/base-property-definition.mjs"; -import type { BaseProperty } from "../property/base-property.mjs"; -import { BaseMetaProperty } from "./base-meta-property.mjs"; +import type { PropertyDefinition } from "../property-definition/property-definition.mjs"; +import type { Property } from "../property/property.mjs"; +import { MetaProperty } from "./meta-property.mjs"; -abstract class PredefinedMetaProperty, P extends BaseProperty = BaseProperty> extends BaseMetaProperty +abstract class PredefinedMetaProperty = PropertyDefinition, P extends Property = Property> extends MetaProperty { protected abstract getInitialValue(): Promise; public async createPredefinedProperty(): Promise

{ - // @ts-expect-error -- We have to assume this is the correct definition const definition: PD = await this.getPropertyDefinition(); const property: P = this.createProperty({ diff --git a/packages/ddd/src/base/auxiliary/property-definition/_index.mts b/packages/ddd/src/base/auxiliary/property-definition/_index.mts index f2702397..014b5f0e 100644 --- a/packages/ddd/src/base/auxiliary/property-definition/_index.mts +++ b/packages/ddd/src/base/auxiliary/property-definition/_index.mts @@ -1,3 +1,2 @@ export type * from "./definition/_index.mjs"; -export * from "./base-property-definition-instantiation-interface.mjs"; -export * from "./base-property-definition.mjs"; +export * from "./property-definition.mjs"; diff --git a/packages/ddd/src/base/auxiliary/property-definition/base-property-definition-instantiation-interface.mts b/packages/ddd/src/base/auxiliary/property-definition/base-property-definition-instantiation-interface.mts deleted file mode 100644 index 5a6eef59..00000000 --- a/packages/ddd/src/base/auxiliary/property-definition/base-property-definition-instantiation-interface.mts +++ /dev/null @@ -1,9 +0,0 @@ -import type { BaseTypeDefinition } from "../type-definition/base-type-definition.mjs"; - -interface BasePropertyDefinitionInstantiationInterface -{ - identifier: string; - typeDefinition: BaseTypeDefinition; -} - -export type { BasePropertyDefinitionInstantiationInterface }; diff --git a/packages/ddd/src/base/auxiliary/property-definition/definition/_index.mts b/packages/ddd/src/base/auxiliary/property-definition/definition/_index.mts index 343d0f1c..e554e8ed 100644 --- a/packages/ddd/src/base/auxiliary/property-definition/definition/_index.mts +++ b/packages/ddd/src/base/auxiliary/property-definition/definition/_index.mts @@ -1 +1,2 @@ +export type * from "./interface/_index.mjs"; export type * from "./type/_index.mjs"; diff --git a/packages/ddd/src/base/auxiliary/property-definition/definition/interface/_index.mts b/packages/ddd/src/base/auxiliary/property-definition/definition/interface/_index.mts new file mode 100644 index 00000000..de1e6e7d --- /dev/null +++ b/packages/ddd/src/base/auxiliary/property-definition/definition/interface/_index.mts @@ -0,0 +1 @@ +export type * from "./property-definition-instantiation-interface.mjs"; diff --git a/packages/ddd/src/base/auxiliary/property-definition/definition/interface/property-definition-instantiation-interface.mts b/packages/ddd/src/base/auxiliary/property-definition/definition/interface/property-definition-instantiation-interface.mts new file mode 100644 index 00000000..60a36e84 --- /dev/null +++ b/packages/ddd/src/base/auxiliary/property-definition/definition/interface/property-definition-instantiation-interface.mts @@ -0,0 +1,9 @@ +import type { TypeDefinition } from "../../../type-definition/type-definition.mjs"; + +interface PropertyDefinitionInstantiationInterface +{ + identifier: string; + typeDefinition: TypeDefinition; +} + +export type { PropertyDefinitionInstantiationInterface }; diff --git a/packages/ddd/src/base/auxiliary/property-definition/definition/type/_index.mts b/packages/ddd/src/base/auxiliary/property-definition/definition/type/_index.mts index 5177bb02..0d545e9f 100644 --- a/packages/ddd/src/base/auxiliary/property-definition/definition/type/_index.mts +++ b/packages/ddd/src/base/auxiliary/property-definition/definition/type/_index.mts @@ -1 +1 @@ -export type * from "./base-property-definition.type.mjs"; +export type * from "./property-definition.type.mjs"; diff --git a/packages/ddd/src/base/auxiliary/property-definition/definition/type/base-property-definition.type.mts b/packages/ddd/src/base/auxiliary/property-definition/definition/type/base-property-definition.type.mts deleted file mode 100644 index e01a7cee..00000000 --- a/packages/ddd/src/base/auxiliary/property-definition/definition/type/base-property-definition.type.mts +++ /dev/null @@ -1,5 +0,0 @@ -import type { BasePropertyDefinition } from "../../base-property-definition.mjs"; - -type BasePropertyDefinitionType = BasePropertyDefinition; - -export type { BasePropertyDefinitionType }; diff --git a/packages/ddd/src/base/auxiliary/property-definition/definition/type/property-definition.type.mts b/packages/ddd/src/base/auxiliary/property-definition/definition/type/property-definition.type.mts new file mode 100644 index 00000000..5d66f7f0 --- /dev/null +++ b/packages/ddd/src/base/auxiliary/property-definition/definition/type/property-definition.type.mts @@ -0,0 +1,5 @@ +import type { PropertyDefinition } from "../../property-definition.mjs"; + +type PropertyDefinitionType = PropertyDefinition; + +export type { PropertyDefinitionType }; diff --git a/packages/ddd/src/base/auxiliary/property-definition/base-property-definition.mts b/packages/ddd/src/base/auxiliary/property-definition/property-definition.mts similarity index 52% rename from packages/ddd/src/base/auxiliary/property-definition/base-property-definition.mts rename to packages/ddd/src/base/auxiliary/property-definition/property-definition.mts index cc194ee9..2baeb5be 100644 --- a/packages/ddd/src/base/auxiliary/property-definition/base-property-definition.mts +++ b/packages/ddd/src/base/auxiliary/property-definition/property-definition.mts @@ -1,13 +1,13 @@ import type { NoValue } from "@vitruvius-labs/ts-predicate"; -import type { BaseTypeDefinition } from "../type-definition/base-type-definition.mjs"; -import type { BasePropertyDefinitionInstantiationInterface } from "./base-property-definition-instantiation-interface.mjs"; +import type { TypeDefinition } from "../type-definition/type-definition.mjs"; +import type { PropertyDefinitionInstantiationInterface } from "./definition/interface/property-definition-instantiation-interface.mjs"; -abstract class BasePropertyDefinition +class PropertyDefinition { protected readonly identifier: string; - protected readonly typeDefinition: BaseTypeDefinition; + protected readonly typeDefinition: TypeDefinition; - public constructor(parameters: BasePropertyDefinitionInstantiationInterface) + public constructor(parameters: PropertyDefinitionInstantiationInterface) { this.identifier = parameters.identifier; this.typeDefinition = parameters.typeDefinition; @@ -18,7 +18,7 @@ abstract class BasePropertyDefinition return this.identifier; } - public getTypeDefinition(): BaseTypeDefinition + public getTypeDefinition(): TypeDefinition { return this.typeDefinition; } @@ -31,4 +31,4 @@ abstract class BasePropertyDefinition } } -export { BasePropertyDefinition }; +export { PropertyDefinition }; diff --git a/packages/ddd/src/base/auxiliary/property/_index.mts b/packages/ddd/src/base/auxiliary/property/_index.mts index 9c085e5c..f048b751 100644 --- a/packages/ddd/src/base/auxiliary/property/_index.mts +++ b/packages/ddd/src/base/auxiliary/property/_index.mts @@ -1,3 +1,3 @@ export type * from "./definition/_index.mjs"; -export * from "./base-immutable-property.mjs"; -export * from "./base-property.mjs"; +export * from "./immutable-property.mjs"; +export * from "./property.mjs"; diff --git a/packages/ddd/src/base/auxiliary/property/base-immutable-property.mts b/packages/ddd/src/base/auxiliary/property/base-immutable-property.mts deleted file mode 100644 index 05c37b39..00000000 --- a/packages/ddd/src/base/auxiliary/property/base-immutable-property.mts +++ /dev/null @@ -1,20 +0,0 @@ -import type { BasePropertyDefinition } from "../property-definition/base-property-definition.mjs"; -import type { BasePropertyInstantiationInterface } from "./definition/interface/base-property-instantiation.interface.mjs"; -import { BaseProperty } from "./base-property.mjs"; - -class BaseImmutableProperty> extends BaseProperty -{ - public constructor(parameters: BasePropertyInstantiationInterface) - { - super(parameters); - - this.disableMutability(); - } - - public override setValue(): never - { - throw new Error(`Property "${this.getDefinition().getIdentifier()}" is immutable.`); - } -} - -export { BaseImmutableProperty }; diff --git a/packages/ddd/src/base/auxiliary/property/definition/interface/_index.mts b/packages/ddd/src/base/auxiliary/property/definition/interface/_index.mts index 33518fe3..d28b8020 100644 --- a/packages/ddd/src/base/auxiliary/property/definition/interface/_index.mts +++ b/packages/ddd/src/base/auxiliary/property/definition/interface/_index.mts @@ -1 +1 @@ -export type * from "./base-property-instantiation.interface.mjs"; +export type * from "./property-instantiation.interface.mjs"; diff --git a/packages/ddd/src/base/auxiliary/property/definition/interface/base-property-instantiation.interface.mts b/packages/ddd/src/base/auxiliary/property/definition/interface/base-property-instantiation.interface.mts deleted file mode 100644 index 8c5397ac..00000000 --- a/packages/ddd/src/base/auxiliary/property/definition/interface/base-property-instantiation.interface.mts +++ /dev/null @@ -1,10 +0,0 @@ -import type { BasePropertyDefinition } from "../../../property-definition/base-property-definition.mjs"; - -interface BasePropertyInstantiationInterface> -{ - definition: PD; - value: T; - existing: boolean; -} - -export type { BasePropertyInstantiationInterface }; diff --git a/packages/ddd/src/base/auxiliary/property/definition/interface/property-instantiation.interface.mts b/packages/ddd/src/base/auxiliary/property/definition/interface/property-instantiation.interface.mts new file mode 100644 index 00000000..0201a130 --- /dev/null +++ b/packages/ddd/src/base/auxiliary/property/definition/interface/property-instantiation.interface.mts @@ -0,0 +1,10 @@ +import type { PropertyDefinition } from "../../../property-definition/property-definition.mjs"; + +interface PropertyInstantiationInterface> +{ + definition: PD; + value: T; + existing: boolean; +} + +export type { PropertyInstantiationInterface }; diff --git a/packages/ddd/src/base/auxiliary/property/definition/type/_index.mts b/packages/ddd/src/base/auxiliary/property/definition/type/_index.mts index 5383f2b9..4099abfc 100644 --- a/packages/ddd/src/base/auxiliary/property/definition/type/_index.mts +++ b/packages/ddd/src/base/auxiliary/property/definition/type/_index.mts @@ -1 +1 @@ -export type * from "./base-property.type.mjs"; +export type * from "./property.type.mjs"; diff --git a/packages/ddd/src/base/auxiliary/property/definition/type/base-property.type.mts b/packages/ddd/src/base/auxiliary/property/definition/type/base-property.type.mts deleted file mode 100644 index e481d1d9..00000000 --- a/packages/ddd/src/base/auxiliary/property/definition/type/base-property.type.mts +++ /dev/null @@ -1,6 +0,0 @@ -import type { BaseProperty } from "../../base-property.mjs"; -import type { BasePropertyDefinitionType } from "../../../property-definition/definition/type/base-property-definition.type.mjs"; - -type BasePropertyType = BaseProperty; - -export type { BasePropertyType }; diff --git a/packages/ddd/src/base/auxiliary/property/definition/type/property.type.mts b/packages/ddd/src/base/auxiliary/property/definition/type/property.type.mts new file mode 100644 index 00000000..75cdd777 --- /dev/null +++ b/packages/ddd/src/base/auxiliary/property/definition/type/property.type.mts @@ -0,0 +1,6 @@ +import type { Property } from "../../property.mjs"; +import type { PropertyDefinitionType } from "../../../property-definition/definition/type/property-definition.type.mjs"; + +type PropertyType = Property; + +export type { PropertyType }; diff --git a/packages/ddd/src/base/auxiliary/property/immutable-property.mts b/packages/ddd/src/base/auxiliary/property/immutable-property.mts new file mode 100644 index 00000000..61509544 --- /dev/null +++ b/packages/ddd/src/base/auxiliary/property/immutable-property.mts @@ -0,0 +1,20 @@ +import type { PropertyDefinition } from "../property-definition/property-definition.mjs"; +import type { PropertyInstantiationInterface } from "./definition/interface/property-instantiation.interface.mjs"; +import { Property } from "./property.mjs"; + +class ImmutableProperty = PropertyDefinition> extends Property +{ + public constructor(parameters: PropertyInstantiationInterface) + { + super(parameters); + + this.disableMutability(); + } + + public override setValue(): never + { + throw new Error(`Property "${this.getDefinition().getIdentifier()}" is immutable.`); + } +} + +export { ImmutableProperty }; diff --git a/packages/ddd/src/base/auxiliary/property/base-property.mts b/packages/ddd/src/base/auxiliary/property/property.mts similarity index 78% rename from packages/ddd/src/base/auxiliary/property/base-property.mts rename to packages/ddd/src/base/auxiliary/property/property.mts index 92e635d8..dd08c1fd 100644 --- a/packages/ddd/src/base/auxiliary/property/base-property.mts +++ b/packages/ddd/src/base/auxiliary/property/property.mts @@ -1,15 +1,15 @@ import { NoValue } from "@vitruvius-labs/ts-predicate"; -import type { BasePropertyDefinition } from "../property-definition/base-property-definition.mjs"; -import type { BasePropertyInstantiationInterface } from "./definition/interface/base-property-instantiation.interface.mjs"; +import type { PropertyDefinition } from "../property-definition/property-definition.mjs"; +import type { PropertyInstantiationInterface } from "./definition/interface/property-instantiation.interface.mjs"; -class BaseProperty> +class Property = PropertyDefinition> { private readonly definition: PD; private mutability: boolean; private value: T; private previousValue: T | typeof NoValue; - public constructor(parameters: BasePropertyInstantiationInterface) + public constructor(parameters: PropertyInstantiationInterface) { this.definition = parameters.definition; this.mutability = true; @@ -78,4 +78,4 @@ class BaseProperty> } } -export { BaseProperty }; +export { Property }; diff --git a/packages/ddd/src/base/auxiliary/type-definition/_index.mts b/packages/ddd/src/base/auxiliary/type-definition/_index.mts index 8d929288..9ea80b4e 100644 --- a/packages/ddd/src/base/auxiliary/type-definition/_index.mts +++ b/packages/ddd/src/base/auxiliary/type-definition/_index.mts @@ -1,4 +1 @@ -export * from "./base-optional-type-definition.mjs"; -export * from "./base-required-type-definition.mjs"; -export * from "./base-type-definition.mjs"; -export * from "./nullable-type-definition.mjs"; +export * from "./type-definition.mjs"; diff --git a/packages/ddd/src/base/auxiliary/type-definition/base-optional-type-definition.mts b/packages/ddd/src/base/auxiliary/type-definition/base-optional-type-definition.mts deleted file mode 100644 index d83851a6..00000000 --- a/packages/ddd/src/base/auxiliary/type-definition/base-optional-type-definition.mts +++ /dev/null @@ -1,12 +0,0 @@ -import { BaseTypeDefinition } from "./base-type-definition.mjs"; - -abstract class BaseOptionalTypeDefinition extends BaseTypeDefinition -{ - // eslint-disable-next-line @ts/class-methods-use-this - public isOptional(): true - { - return true; - } -} - -export { BaseOptionalTypeDefinition }; diff --git a/packages/ddd/src/base/auxiliary/type-definition/base-type-definition.mts b/packages/ddd/src/base/auxiliary/type-definition/type-definition.mts similarity index 88% rename from packages/ddd/src/base/auxiliary/type-definition/base-type-definition.mts rename to packages/ddd/src/base/auxiliary/type-definition/type-definition.mts index c2ab9acb..c0d0724b 100644 --- a/packages/ddd/src/base/auxiliary/type-definition/base-type-definition.mts +++ b/packages/ddd/src/base/auxiliary/type-definition/type-definition.mts @@ -1,9 +1,9 @@ -abstract class BaseTypeDefinition +abstract class TypeDefinition { - public abstract assertType(value: unknown): asserts value is T; public abstract isOptional(): boolean; public abstract getEmptyValue(): T; public abstract isEmptyValue(value: T): boolean; + public abstract assertType(value: unknown): asserts value is T; // eslint-disable-next-line @ts/class-methods-use-this public isEqual(value_a: T, value_b: T): boolean @@ -16,4 +16,4 @@ abstract class BaseTypeDefinition public async verify(value: T): Promise {} } -export { BaseTypeDefinition }; +export { TypeDefinition }; diff --git a/packages/ddd/src/base/primary/_index.mts b/packages/ddd/src/base/primary/_index.mts index 5d4d3772..61197e7b 100644 --- a/packages/ddd/src/base/primary/_index.mts +++ b/packages/ddd/src/base/primary/_index.mts @@ -1,6 +1,6 @@ export type * from "./definition/_index.mjs"; -export * from "./base-factory.mjs"; -export * from "./base-meta-record.mjs"; -export * from "./base-read-repository.mjs"; -export * from "./base-record.mjs"; -export * from "./base-write-repository.mjs"; +export * from "./factory.mjs"; +export * from "./meta-record.mjs"; +export * from "./read-repository.mjs"; +export * from "./repository-record.mjs"; +export * from "./write-repository.mjs"; diff --git a/packages/ddd/src/base/primary/base-factory.mts b/packages/ddd/src/base/primary/base-factory.mts deleted file mode 100644 index 4ec62193..00000000 --- a/packages/ddd/src/base/primary/base-factory.mts +++ /dev/null @@ -1,22 +0,0 @@ -import type { BaseRecordConstructorType } from "./definition/type/base-record-constructor.type.mjs"; -import type { BaseRecord } from "./base-record.mjs"; - -abstract class BaseFactory -{ - protected readonly recordConstructor: BaseRecordConstructorType; - - public constructor(record_constructor: BaseRecordConstructorType) - { - this.recordConstructor = record_constructor; - } - - // eslint-disable-next-line @ts/require-await - public async create(parameters: I): Promise - { - const instance: M = new this.recordConstructor(parameters); - - return instance; - } -} - -export { BaseFactory }; diff --git a/packages/ddd/src/base/primary/base-meta-record.mts b/packages/ddd/src/base/primary/base-meta-record.mts deleted file mode 100644 index f379c4f6..00000000 --- a/packages/ddd/src/base/primary/base-meta-record.mts +++ /dev/null @@ -1,15 +0,0 @@ -import type { BaseMetaPropertyType } from "../auxiliary/meta-property/definition/type/base-meta-property.type.mjs"; -import type { BaseRecord } from "./base-record.mjs"; -import type { BaseFactory } from "./base-factory.mjs"; -import type { BaseReadRepository } from "./base-read-repository.mjs"; -import type { BaseWriteRepository } from "./base-write-repository.mjs"; - -abstract class BaseMetaRecord -{ - public abstract getMetaProperties(): Array; - public abstract getFactory(): BaseFactory; - public abstract getReadRepository(): BaseReadRepository; - public abstract getWriteRepository(): BaseWriteRepository; -} - -export { BaseMetaRecord }; diff --git a/packages/ddd/src/base/primary/base-record.mts b/packages/ddd/src/base/primary/base-record.mts deleted file mode 100644 index 6b524575..00000000 --- a/packages/ddd/src/base/primary/base-record.mts +++ /dev/null @@ -1,52 +0,0 @@ -import { isInstanceOf } from "@vitruvius-labs/ts-predicate"; -import type { BasePropertyType } from "../auxiliary/property/definition/type/base-property.type.mjs"; -import { BaseProperty } from "../auxiliary/property/base-property.mjs"; - -abstract class BaseRecord -{ - public abstract save(): Promise; - - // eslint-disable-next-line @ts/class-methods-use-this, @ts/no-empty-function - public async verify(): Promise {} - - public getProperty(identifier: string): BasePropertyType - { - for (const member of Object.values(this)) - { - if (isInstanceOf(member, BaseProperty) && member.getDefinition().getIdentifier() === identifier) - { - return member; - } - } - - throw new Error(`No property with identifier "${identifier}" found.`); - } - - public getAllProperties(): Array - { - const properties: Array = []; - - for (const member of Object.values(this)) - { - if (isInstanceOf(member, BaseProperty)) - { - properties.push(member); - } - } - - return properties; - } - - public * properties(): Generator - { - for (const member of Object.values(this)) - { - if (isInstanceOf(member, BaseProperty)) - { - yield member; - } - } - } -} - -export { BaseRecord }; diff --git a/packages/ddd/src/base/primary/base-write-repository.mts b/packages/ddd/src/base/primary/base-write-repository.mts deleted file mode 100644 index ba487102..00000000 --- a/packages/ddd/src/base/primary/base-write-repository.mts +++ /dev/null @@ -1,8 +0,0 @@ -import type { BaseRecord } from "./base-record.mjs"; - -abstract class BaseWriteRepository -{ - public abstract saveRecord(instance: M): Promise; -} - -export { BaseWriteRepository }; diff --git a/packages/ddd/src/base/primary/definition/type/_index.mts b/packages/ddd/src/base/primary/definition/type/_index.mts index 30ab735b..0cffd112 100644 --- a/packages/ddd/src/base/primary/definition/type/_index.mts +++ b/packages/ddd/src/base/primary/definition/type/_index.mts @@ -1,2 +1,2 @@ -export type * from "./base-factory.type.mjs"; -export type * from "./base-record-constructor.type.mjs"; +export type * from "./factory.type.mjs"; +export type * from "./record-constructor.type.mjs"; diff --git a/packages/ddd/src/base/primary/definition/type/base-factory.type.mts b/packages/ddd/src/base/primary/definition/type/base-factory.type.mts deleted file mode 100644 index a39cf52b..00000000 --- a/packages/ddd/src/base/primary/definition/type/base-factory.type.mts +++ /dev/null @@ -1,6 +0,0 @@ -import type { BaseFactory } from "../../base-factory.mjs"; -import type { BaseRecord } from "../../base-record.mjs"; - -type BaseFactoryType = BaseFactory; - -export type { BaseFactoryType }; diff --git a/packages/ddd/src/base/primary/definition/type/base-record-constructor.type.mts b/packages/ddd/src/base/primary/definition/type/base-record-constructor.type.mts deleted file mode 100644 index db91c08c..00000000 --- a/packages/ddd/src/base/primary/definition/type/base-record-constructor.type.mts +++ /dev/null @@ -1,5 +0,0 @@ -import type { BaseRecord } from "../../base-record.mjs"; - -type BaseRecordConstructorType = new (parameters: I) => M; - -export type { BaseRecordConstructorType }; diff --git a/packages/ddd/src/base/primary/definition/type/factory.type.mts b/packages/ddd/src/base/primary/definition/type/factory.type.mts new file mode 100644 index 00000000..bc8fae33 --- /dev/null +++ b/packages/ddd/src/base/primary/definition/type/factory.type.mts @@ -0,0 +1,6 @@ +import type { Factory } from "../../factory.mjs"; +import type { RepositoryRecord } from "../../repository-record.mjs"; + +type FactoryType = Factory; + +export type { FactoryType }; diff --git a/packages/ddd/src/base/primary/definition/type/record-constructor.type.mts b/packages/ddd/src/base/primary/definition/type/record-constructor.type.mts new file mode 100644 index 00000000..b93f084e --- /dev/null +++ b/packages/ddd/src/base/primary/definition/type/record-constructor.type.mts @@ -0,0 +1,5 @@ +import type { RepositoryRecord } from "../../repository-record.mjs"; + +type RecordConstructorType = new (parameters: I) => M; + +export type { RecordConstructorType }; diff --git a/packages/ddd/src/base/primary/factory.mts b/packages/ddd/src/base/primary/factory.mts new file mode 100644 index 00000000..e2482334 --- /dev/null +++ b/packages/ddd/src/base/primary/factory.mts @@ -0,0 +1,22 @@ +import type { RecordConstructorType } from "./definition/type/record-constructor.type.mjs"; +import type { RepositoryRecord } from "./repository-record.mjs"; + +abstract class Factory +{ + protected readonly recordConstructor: RecordConstructorType; + + public constructor(record_constructor: RecordConstructorType) + { + this.recordConstructor = record_constructor; + } + + // eslint-disable-next-line @ts/require-await + public async create(parameters: I): Promise + { + const instance: M = new this.recordConstructor(parameters); + + return instance; + } +} + +export { Factory }; diff --git a/packages/ddd/src/base/primary/meta-record.mts b/packages/ddd/src/base/primary/meta-record.mts new file mode 100644 index 00000000..96187691 --- /dev/null +++ b/packages/ddd/src/base/primary/meta-record.mts @@ -0,0 +1,15 @@ +import type { MetaPropertyType } from "../auxiliary/meta-property/definition/type/meta-property.type.mjs"; +import type { RepositoryRecord } from "./repository-record.mjs"; +import type { Factory } from "./factory.mjs"; +import type { ReadRepository } from "./read-repository.mjs"; +import type { WriteRepository } from "./write-repository.mjs"; + +abstract class MetaRecord +{ + public abstract getMetaProperties(): Array; + public abstract getFactory(): Factory; + public abstract getReadRepository(): ReadRepository; + public abstract getWriteRepository(): WriteRepository; +} + +export { MetaRecord }; diff --git a/packages/ddd/src/base/primary/base-read-repository.mts b/packages/ddd/src/base/primary/read-repository.mts similarity index 77% rename from packages/ddd/src/base/primary/base-read-repository.mts rename to packages/ddd/src/base/primary/read-repository.mts index 01c3ce72..45de6c4a 100644 --- a/packages/ddd/src/base/primary/base-read-repository.mts +++ b/packages/ddd/src/base/primary/read-repository.mts @@ -1,7 +1,7 @@ import { type Nullable, isNullable } from "@vitruvius-labs/ts-predicate"; -import type { BaseRecord } from "./base-record.mjs"; +import type { RepositoryRecord } from "./repository-record.mjs"; -abstract class BaseReadRepository +abstract class ReadRepository { protected abstract create(data: T): Promise; @@ -32,4 +32,4 @@ abstract class BaseReadRepository } } -export { BaseReadRepository }; +export { ReadRepository }; diff --git a/packages/ddd/src/base/primary/repository-record.mts b/packages/ddd/src/base/primary/repository-record.mts new file mode 100644 index 00000000..ba20eb4f --- /dev/null +++ b/packages/ddd/src/base/primary/repository-record.mts @@ -0,0 +1,52 @@ +import { isInstanceOf } from "@vitruvius-labs/ts-predicate"; +import type { PropertyType } from "../auxiliary/property/definition/type/property.type.mjs"; +import { Property } from "../auxiliary/property/property.mjs"; + +abstract class RepositoryRecord +{ + public abstract save(): Promise; + + // eslint-disable-next-line @ts/class-methods-use-this, @ts/no-empty-function + public async verify(): Promise {} + + public getProperty(identifier: string): PropertyType + { + for (const member of Object.values(this)) + { + if (isInstanceOf(member, Property) && member.getDefinition().getIdentifier() === identifier) + { + return member; + } + } + + throw new Error(`No property with identifier "${identifier}" found.`); + } + + public getAllProperties(): Array + { + const properties: Array = []; + + for (const member of Object.values(this)) + { + if (isInstanceOf(member, Property)) + { + properties.push(member); + } + } + + return properties; + } + + public * properties(): Generator + { + for (const member of Object.values(this)) + { + if (isInstanceOf(member, Property)) + { + yield member; + } + } + } +} + +export { RepositoryRecord }; diff --git a/packages/ddd/src/base/primary/write-repository.mts b/packages/ddd/src/base/primary/write-repository.mts new file mode 100644 index 00000000..0b926c63 --- /dev/null +++ b/packages/ddd/src/base/primary/write-repository.mts @@ -0,0 +1,8 @@ +import type { RepositoryRecord } from "./repository-record.mjs"; + +abstract class WriteRepository +{ + public abstract saveRecord(instance: M): Promise; +} + +export { WriteRepository }; diff --git a/packages/ddd/src/blank-record/blank-read-repository.mts b/packages/ddd/src/blank-record/blank-read-repository.mts index 20bb726e..08c9bf79 100644 --- a/packages/ddd/src/blank-record/blank-read-repository.mts +++ b/packages/ddd/src/blank-record/blank-read-repository.mts @@ -1,8 +1,8 @@ import { type Nullable, isNullable } from "@vitruvius-labs/ts-predicate"; import type { BlankRecord } from "./blank-record.mjs"; -import { BaseReadRepository } from "../base/primary/base-read-repository.mjs"; +import { ReadRepository } from "../base/primary/read-repository.mjs"; -abstract class BlankReadRepository, T extends object> extends BaseReadRepository +abstract class BlankReadRepository, T extends object> extends ReadRepository { protected abstract fetchByUUID(uuid: string): Promise>; diff --git a/packages/ddd/src/blank-record/blank-record.mts b/packages/ddd/src/blank-record/blank-record.mts index 88039197..93832fe8 100644 --- a/packages/ddd/src/blank-record/blank-record.mts +++ b/packages/ddd/src/blank-record/blank-record.mts @@ -2,13 +2,13 @@ import type { RepositoryStatusProperty } from "./properties/repository-status/re import type { UUIDv4PropertyType } from "./properties/uuid-v4/definition/type/uuid-v4-property.type.mjs"; import type { RepositoryDateProperty } from "./properties/repository-date/repository-date-property.mjs"; import type { BlankRecordInstantiationInterface } from "./definition/interface/blank-record-instantiation.interface.mjs"; -import { BaseRecord } from "../base/primary/base-record.mjs"; +import { RepositoryRecord } from "../base/primary/repository-record.mjs"; import { RepositoryActionEnum } from "./properties/repository-status/definition/enum/repository-action.enum.mjs"; -import type { BaseMetaRecord } from "../base/primary/base-meta-record.mjs"; +import type { MetaRecord } from "../base/primary/meta-record.mjs"; -abstract class BlankRecord> extends BaseRecord +abstract class BlankRecord> extends RepositoryRecord { - protected readonly metaRecord: BaseMetaRecord; + protected readonly metaRecord: MetaRecord; protected readonly status: RepositoryStatusProperty; protected readonly uuid: UUIDv4PropertyType; protected readonly registrationDate: RepositoryDateProperty; diff --git a/packages/ddd/src/blank-record/blank-write-repository.mts b/packages/ddd/src/blank-record/blank-write-repository.mts index 403b3c10..edb55cf8 100644 --- a/packages/ddd/src/blank-record/blank-write-repository.mts +++ b/packages/ddd/src/blank-record/blank-write-repository.mts @@ -1,9 +1,9 @@ import type { BlankRecord } from "./blank-record.mjs"; import type { WriteRepositoryHooks } from "./write-repository-hooks.mjs"; -import { BaseWriteRepository } from "../base/primary/base-write-repository.mjs"; +import { WriteRepository } from "../base/primary/write-repository.mjs"; import { RepositoryActionEnum } from "./properties/repository-status/definition/enum/repository-action.enum.mjs"; -abstract class BlankWriteRepository> extends BaseWriteRepository +abstract class BlankWriteRepository> extends WriteRepository { protected readonly hooks: WriteRepositoryHooks | undefined; diff --git a/packages/ddd/src/blank-record/definition/interface/blank-record-instantiation.interface.mts b/packages/ddd/src/blank-record/definition/interface/blank-record-instantiation.interface.mts index 335d47c3..d47085c0 100644 --- a/packages/ddd/src/blank-record/definition/interface/blank-record-instantiation.interface.mts +++ b/packages/ddd/src/blank-record/definition/interface/blank-record-instantiation.interface.mts @@ -2,11 +2,11 @@ import type { RepositoryStatusProperty } from "../../properties/repository-statu import type { UUIDv4PropertyType } from "../../properties/uuid-v4/definition/type/uuid-v4-property.type.mjs"; import type { RepositoryDateProperty } from "../../properties/repository-date/repository-date-property.mjs"; import type { BlankRecord } from "../../blank-record.mjs"; -import type { BaseMetaRecord } from "../../../base/primary/base-meta-record.mjs"; +import type { MetaRecord } from "../../../base/primary/meta-record.mjs"; interface BlankRecordInstantiationInterface> { - metaRecord: BaseMetaRecord; + metaRecord: MetaRecord; status: RepositoryStatusProperty; uuid: UUIDv4PropertyType; registrationDate: RepositoryDateProperty; diff --git a/packages/ddd/src/blank-record/properties/repository-date/repository-date-meta-property.mts b/packages/ddd/src/blank-record/properties/repository-date/repository-date-meta-property.mts index 259ff192..e2fb61a9 100644 --- a/packages/ddd/src/blank-record/properties/repository-date/repository-date-meta-property.mts +++ b/packages/ddd/src/blank-record/properties/repository-date/repository-date-meta-property.mts @@ -1,17 +1,17 @@ import { isNumber, isString } from "@vitruvius-labs/ts-predicate"; -import type { BasePropertyInstantiationInterface } from "../../../base/auxiliary/property/definition/interface/base-property-instantiation.interface.mjs"; -import type { BaseTypeDefinition } from "../../../base/auxiliary/type-definition/base-type-definition.mjs"; +import type { PropertyInstantiationInterface } from "../../../base/auxiliary/property/definition/interface/property-instantiation.interface.mjs"; +import type { TypeDefinition } from "../../../base/auxiliary/type-definition/type-definition.mjs"; import { RepositoryDatePropertyDefinition } from "./repository-date-property-definition.mjs"; import { PredefinedMetaProperty } from "../../../base/auxiliary/meta-property/predefined-meta-property.mjs"; import { RepositoryDateProperty } from "./repository-date-property.mjs"; -import { NullableTypeDefinition } from "../../../base/auxiliary/type-definition/nullable-type-definition.mjs"; +import { NullableTypeDefinition } from "../../../predefined-type/nullable/nullable-type-definition.mjs"; import { DateTypeDefinition } from "../../../predefined-type/date/date-type-definition.mjs"; abstract class RepositoryDateMetaProperty extends PredefinedMetaProperty { protected abstract getIdentifier(): string; - public override async normalize(value: unknown, type_definition: BaseTypeDefinition): Promise + public override async normalize(value: unknown, type_definition: TypeDefinition): Promise { if (isNumber(value) || isString(value)) { @@ -24,7 +24,7 @@ abstract class RepositoryDateMetaProperty extends PredefinedMetaProperty { - const type_definition: BaseTypeDefinition = new NullableTypeDefinition(new DateTypeDefinition()); + const type_definition: TypeDefinition = new NullableTypeDefinition(new DateTypeDefinition()); return new RepositoryDatePropertyDefinition({ identifier: this.getIdentifier(), @@ -33,7 +33,7 @@ abstract class RepositoryDateMetaProperty extends PredefinedMetaProperty): RepositoryDateProperty + protected createProperty(parameters: PropertyInstantiationInterface): RepositoryDateProperty { return new RepositoryDateProperty(parameters); } diff --git a/packages/ddd/src/blank-record/properties/repository-date/repository-date-property-definition.mts b/packages/ddd/src/blank-record/properties/repository-date/repository-date-property-definition.mts index dbcbd005..36361819 100644 --- a/packages/ddd/src/blank-record/properties/repository-date/repository-date-property-definition.mts +++ b/packages/ddd/src/blank-record/properties/repository-date/repository-date-property-definition.mts @@ -1,5 +1,5 @@ -import { BasePropertyDefinition } from "../../../base/auxiliary/property-definition/base-property-definition.mjs"; +import { PropertyDefinition } from "../../../base/auxiliary/property-definition/property-definition.mjs"; -class RepositoryDatePropertyDefinition extends BasePropertyDefinition {} +class RepositoryDatePropertyDefinition extends PropertyDefinition {} export { RepositoryDatePropertyDefinition }; diff --git a/packages/ddd/src/blank-record/properties/repository-date/repository-date-property.mts b/packages/ddd/src/blank-record/properties/repository-date/repository-date-property.mts index a213e23d..5953ddba 100644 --- a/packages/ddd/src/blank-record/properties/repository-date/repository-date-property.mts +++ b/packages/ddd/src/blank-record/properties/repository-date/repository-date-property.mts @@ -1,7 +1,7 @@ -import { BaseProperty } from "../../../base/auxiliary/property/base-property.mjs"; +import { Property } from "../../../base/auxiliary/property/property.mjs"; import type { RepositoryDatePropertyDefinition } from "./repository-date-property-definition.mjs"; -class RepositoryDateProperty extends BaseProperty +class RepositoryDateProperty extends Property { // eslint-disable-next-line @ts/class-methods-use-this public override isMutable(): false diff --git a/packages/ddd/src/blank-record/properties/repository-status/definition/type/repository-status-property.type.mts b/packages/ddd/src/blank-record/properties/repository-status/definition/type/repository-status-property.type.mts index 99fcfd9b..6b06ed45 100644 --- a/packages/ddd/src/blank-record/properties/repository-status/definition/type/repository-status-property.type.mts +++ b/packages/ddd/src/blank-record/properties/repository-status/definition/type/repository-status-property.type.mts @@ -1,7 +1,7 @@ -import type { BaseProperty } from "../../../../../base/auxiliary/property/base-property.mjs"; +import type { Property } from "../../../../../base/auxiliary/property/property.mjs"; import type { RepositoryStatusEnum } from "../enum/repository-status.enum.mjs"; import type { RepositoryStatusPropertyDefinition } from "../../repository-status-property-definition.mjs"; -type RepositoryStatusPropertyType = BaseProperty; +type RepositoryStatusPropertyType = Property; export type { RepositoryStatusPropertyType }; diff --git a/packages/ddd/src/blank-record/properties/repository-status/repository-status-meta-property.mts b/packages/ddd/src/blank-record/properties/repository-status/repository-status-meta-property.mts index 568ec778..4007167e 100644 --- a/packages/ddd/src/blank-record/properties/repository-status/repository-status-meta-property.mts +++ b/packages/ddd/src/blank-record/properties/repository-status/repository-status-meta-property.mts @@ -1,4 +1,4 @@ -import type { BasePropertyInstantiationInterface } from "../../../base/auxiliary/property/definition/interface/base-property-instantiation.interface.mjs"; +import type { PropertyInstantiationInterface } from "../../../base/auxiliary/property/definition/interface/property-instantiation.interface.mjs"; import { PredefinedMetaProperty } from "../../../base/auxiliary/meta-property/predefined-meta-property.mjs"; import { RepositoryStatusEnum } from "./definition/enum/repository-status.enum.mjs"; import { RepositoryStatusPropertyDefinition } from "./repository-status-property-definition.mjs"; @@ -18,7 +18,7 @@ class RepositoryStatusMetaProperty extends PredefinedMetaProperty): RepositoryStatusProperty + protected createProperty(parameters: PropertyInstantiationInterface): RepositoryStatusProperty { return new RepositoryStatusProperty(parameters); } diff --git a/packages/ddd/src/blank-record/properties/repository-status/repository-status-property-definition.mts b/packages/ddd/src/blank-record/properties/repository-status/repository-status-property-definition.mts index 8493f042..8d83d838 100644 --- a/packages/ddd/src/blank-record/properties/repository-status/repository-status-property-definition.mts +++ b/packages/ddd/src/blank-record/properties/repository-status/repository-status-property-definition.mts @@ -1,6 +1,6 @@ import type { RepositoryStatusEnum } from "./definition/enum/repository-status.enum.mjs"; -import { BasePropertyDefinition } from "../../../base/auxiliary/property-definition/base-property-definition.mjs"; +import { PropertyDefinition } from "../../../base/auxiliary/property-definition/property-definition.mjs"; -class RepositoryStatusPropertyDefinition extends BasePropertyDefinition {} +class RepositoryStatusPropertyDefinition extends PropertyDefinition {} export { RepositoryStatusPropertyDefinition }; diff --git a/packages/ddd/src/blank-record/properties/repository-status/repository-status-property.mts b/packages/ddd/src/blank-record/properties/repository-status/repository-status-property.mts index 9183e451..6952a290 100644 --- a/packages/ddd/src/blank-record/properties/repository-status/repository-status-property.mts +++ b/packages/ddd/src/blank-record/properties/repository-status/repository-status-property.mts @@ -1,15 +1,15 @@ import type { RepositoryStatusPropertyDefinition } from "./repository-status-property-definition.mjs"; -import type { BasePropertyInstantiationInterface } from "../../../base/auxiliary/property/definition/interface/base-property-instantiation.interface.mjs"; -import { BaseProperty } from "../../../base/auxiliary/property/base-property.mjs"; +import type { PropertyInstantiationInterface } from "../../../base/auxiliary/property/definition/interface/property-instantiation.interface.mjs"; +import { Property } from "../../../base/auxiliary/property/property.mjs"; import { RepositoryStatusEnum } from "./definition/enum/repository-status.enum.mjs"; import { RepositoryActionEnum } from "./definition/enum/repository-action.enum.mjs"; import { NoValue } from "@vitruvius-labs/ts-predicate"; -class RepositoryStatusProperty extends BaseProperty +class RepositoryStatusProperty extends Property { protected action: RepositoryActionEnum; - public constructor(parameters: BasePropertyInstantiationInterface) + public constructor(parameters: PropertyInstantiationInterface) { super(parameters); diff --git a/packages/ddd/src/blank-record/properties/repository-status/repository-status-type-definition.mts b/packages/ddd/src/blank-record/properties/repository-status/repository-status-type-definition.mts index 1e07d31b..8b2dcbde 100644 --- a/packages/ddd/src/blank-record/properties/repository-status/repository-status-type-definition.mts +++ b/packages/ddd/src/blank-record/properties/repository-status/repository-status-type-definition.mts @@ -1,8 +1,8 @@ import type { RepositoryStatusEnum } from "./definition/enum/repository-status.enum.mjs"; -import { BaseRequiredTypeDefinition } from "../../../base/auxiliary/type-definition/base-required-type-definition.mjs"; +import { RequiredTypeDefinition } from "../../../predefined-type/required/required-type-definition.mjs"; import { assertRepositoryStatusEnum } from "./predicate/assert-repository-status-enum.mjs"; -class RepositoryStatusTypeDefinition extends BaseRequiredTypeDefinition +class RepositoryStatusTypeDefinition extends RequiredTypeDefinition { // eslint-disable-next-line @ts/class-methods-use-this public assertType(value: unknown): asserts value is RepositoryStatusEnum diff --git a/packages/ddd/src/blank-record/properties/uuid-v4/definition/type/uuid-v4-property.type.mts b/packages/ddd/src/blank-record/properties/uuid-v4/definition/type/uuid-v4-property.type.mts index 84bfa609..c71aef42 100644 --- a/packages/ddd/src/blank-record/properties/uuid-v4/definition/type/uuid-v4-property.type.mts +++ b/packages/ddd/src/blank-record/properties/uuid-v4/definition/type/uuid-v4-property.type.mts @@ -1,7 +1,7 @@ import type { UUID } from "node:crypto"; -import type { BaseImmutableProperty } from "../../../../../base/auxiliary/property/base-immutable-property.mjs"; +import type { ImmutableProperty } from "../../../../../base/auxiliary/property/immutable-property.mjs"; import type { UUIDv4PropertyDefinition } from "../../uuid-v4-property-definition.mjs"; -type UUIDv4PropertyType = BaseImmutableProperty; +type UUIDv4PropertyType = ImmutableProperty; export type { UUIDv4PropertyType }; diff --git a/packages/ddd/src/blank-record/properties/uuid-v4/uuid-v4-meta-property.mts b/packages/ddd/src/blank-record/properties/uuid-v4/uuid-v4-meta-property.mts index 3f050acb..4db33115 100644 --- a/packages/ddd/src/blank-record/properties/uuid-v4/uuid-v4-meta-property.mts +++ b/packages/ddd/src/blank-record/properties/uuid-v4/uuid-v4-meta-property.mts @@ -1,12 +1,12 @@ import { type UUID, randomUUID } from "node:crypto"; -import type { BasePropertyInstantiationInterface } from "../../../base/auxiliary/property/definition/interface/base-property-instantiation.interface.mjs"; +import type { PropertyInstantiationInterface } from "../../../base/auxiliary/property/definition/interface/property-instantiation.interface.mjs"; import { PredefinedMetaProperty } from "../../../base/auxiliary/meta-property/predefined-meta-property.mjs"; -import { BaseImmutableProperty } from "../../../base/auxiliary/property/base-immutable-property.mjs"; +import { ImmutableProperty } from "../../../base/auxiliary/property/immutable-property.mjs"; import { UUIDv4PropertyDefinition } from "./uuid-v4-property-definition.mjs"; import { BlankRecordPropertyEnum } from "../../definition/enum/blank-record-property.enum.mjs"; import { UUIDv4TypeDefinition } from "../../../predefined-type/uuid-v4/uuid-v4-type-definition.mjs"; -class UUIDv4MetaProperty extends PredefinedMetaProperty> +class UUIDv4MetaProperty extends PredefinedMetaProperty> { // eslint-disable-next-line @ts/class-methods-use-this, @ts/require-await public async getPropertyDefinition(): Promise @@ -18,9 +18,9 @@ class UUIDv4MetaProperty extends PredefinedMetaProperty): BaseImmutableProperty + protected createProperty(parameters: PropertyInstantiationInterface): ImmutableProperty { - return new BaseImmutableProperty(parameters); + return new ImmutableProperty(parameters); } // eslint-disable-next-line @ts/class-methods-use-this, @ts/require-await diff --git a/packages/ddd/src/blank-record/properties/uuid-v4/uuid-v4-property-definition.mts b/packages/ddd/src/blank-record/properties/uuid-v4/uuid-v4-property-definition.mts index 1fe780b0..323a2d72 100644 --- a/packages/ddd/src/blank-record/properties/uuid-v4/uuid-v4-property-definition.mts +++ b/packages/ddd/src/blank-record/properties/uuid-v4/uuid-v4-property-definition.mts @@ -1,6 +1,6 @@ import type { UUID } from "node:crypto"; -import { BasePropertyDefinition } from "../../../base/auxiliary/property-definition/base-property-definition.mjs"; +import { PropertyDefinition } from "../../../base/auxiliary/property-definition/property-definition.mjs"; -class UUIDv4PropertyDefinition extends BasePropertyDefinition {} +class UUIDv4PropertyDefinition extends PropertyDefinition {} export { UUIDv4PropertyDefinition }; diff --git a/packages/ddd/src/predefined-type/_index.mts b/packages/ddd/src/predefined-type/_index.mts index 78d99b7a..224fb03d 100644 --- a/packages/ddd/src/predefined-type/_index.mts +++ b/packages/ddd/src/predefined-type/_index.mts @@ -1,4 +1,7 @@ +export * from "./array/_index.mjs"; export * from "./date/_index.mjs"; -export * from "./lazy-reference/_index.mjs"; -export * from "./password/_index.mjs"; +export * from "./enum/_index.mjs"; +export * from "./nullable/_index.mjs"; +export * from "./optional/_index.mjs"; +export * from "./required/_index.mjs"; export * from "./uuid-v4/_index.mjs"; diff --git a/packages/ddd/src/predefined-type/array/_index.mts b/packages/ddd/src/predefined-type/array/_index.mts new file mode 100644 index 00000000..5fe945c9 --- /dev/null +++ b/packages/ddd/src/predefined-type/array/_index.mts @@ -0,0 +1 @@ +export * from "./array-type-definition.mjs"; diff --git a/packages/ddd/src/predefined-type/array/array-type-definition.mts b/packages/ddd/src/predefined-type/array/array-type-definition.mts new file mode 100644 index 00000000..75198368 --- /dev/null +++ b/packages/ddd/src/predefined-type/array/array-type-definition.mts @@ -0,0 +1,71 @@ +import { assertArray } from "@vitruvius-labs/ts-predicate"; +import type { RequiredTypeDefinition } from "../required/required-type-definition.mjs"; +import { OptionalTypeDefinition } from "../optional/optional-type-definition.mjs"; + +class ArrayTypeDefinition extends OptionalTypeDefinition> +{ + protected readonly definition: RequiredTypeDefinition; + + public constructor(definition: RequiredTypeDefinition) + { + super(); + + this.definition = definition; + } + + // eslint-disable-next-line @ts/class-methods-use-this + public getEmptyValue(): Array + { + return []; + } + + // eslint-disable-next-line @ts/class-methods-use-this + public isEmptyValue(value: Array): boolean + { + return value.length === 0; + } + + public assertType(value: unknown): asserts value is Array + { + assertArray(value); + + for (const item of value) + { + this.definition.assertType(item); + } + } + + public override isEqual(value_a: Array, value_b: Array): boolean + { + if (value_a.length !== value_b.length) + { + return false; + } + + for (let i: number = 0; i < value_a.length; ++i) + { + // @ts-expect-error: There is a value at this index + const item_a: T = value_a[i]; + + // @ts-expect-error: There is a value at this index + const item_b: T = value_b[i]; + + if (!this.definition.isEqual(item_a, item_b)) + { + return false; + } + } + + return true; + } + + public override async verify(value: Array): Promise + { + for (const item of value) + { + await this.definition.verify(item); + } + } +} + +export { ArrayTypeDefinition }; diff --git a/packages/ddd/src/predefined-type/date/date-type-definition.mts b/packages/ddd/src/predefined-type/date/date-type-definition.mts index 1ea0396d..68cf9edc 100644 --- a/packages/ddd/src/predefined-type/date/date-type-definition.mts +++ b/packages/ddd/src/predefined-type/date/date-type-definition.mts @@ -1,7 +1,7 @@ import { ValidationError } from "@vitruvius-labs/ts-predicate"; -import { BaseRequiredTypeDefinition } from "../../base/auxiliary/type-definition/base-required-type-definition.mjs"; +import { RequiredTypeDefinition } from "../required/required-type-definition.mjs"; -class DateTypeDefinition extends BaseRequiredTypeDefinition +class DateTypeDefinition extends RequiredTypeDefinition { // eslint-disable-next-line @ts/class-methods-use-this public assertType(value: unknown): asserts value is Date diff --git a/packages/ddd/src/predefined-type/enum/_index.mts b/packages/ddd/src/predefined-type/enum/_index.mts new file mode 100644 index 00000000..58442971 --- /dev/null +++ b/packages/ddd/src/predefined-type/enum/_index.mts @@ -0,0 +1 @@ +export * from "./enum-type-definition.mjs"; diff --git a/packages/ddd/src/predefined-type/enum/enum-type-definition.mts b/packages/ddd/src/predefined-type/enum/enum-type-definition.mts new file mode 100644 index 00000000..d7133fe7 --- /dev/null +++ b/packages/ddd/src/predefined-type/enum/enum-type-definition.mts @@ -0,0 +1,14 @@ +import { assertEnumValue } from "@vitruvius-labs/ts-predicate"; +import { RequiredTypeDefinition } from "../required/required-type-definition.mjs"; + +abstract class EnumTypeDefinition extends RequiredTypeDefinition +{ + public abstract getValues(): ReadonlyArray; + + public assertType(value: unknown): asserts value is Date + { + assertEnumValue(value, this.getValues()); + } +} + +export { EnumTypeDefinition }; diff --git a/packages/ddd/src/predefined-type/nullable/_index.mts b/packages/ddd/src/predefined-type/nullable/_index.mts new file mode 100644 index 00000000..59480ed0 --- /dev/null +++ b/packages/ddd/src/predefined-type/nullable/_index.mts @@ -0,0 +1 @@ +export * from "./nullable-type-definition.mjs"; diff --git a/packages/ddd/src/base/auxiliary/type-definition/nullable-type-definition.mts b/packages/ddd/src/predefined-type/nullable/nullable-type-definition.mts similarity index 73% rename from packages/ddd/src/base/auxiliary/type-definition/nullable-type-definition.mts rename to packages/ddd/src/predefined-type/nullable/nullable-type-definition.mts index 04589e28..52062557 100644 --- a/packages/ddd/src/base/auxiliary/type-definition/nullable-type-definition.mts +++ b/packages/ddd/src/predefined-type/nullable/nullable-type-definition.mts @@ -1,11 +1,11 @@ -import type { BaseRequiredTypeDefinition } from "./base-required-type-definition.mjs"; -import { BaseTypeDefinition } from "./base-type-definition.mjs"; +import type { RequiredTypeDefinition } from "../required/required-type-definition.mjs"; +import { TypeDefinition } from "../../base/auxiliary/type-definition/type-definition.mjs"; -class NullableTypeDefinition extends BaseTypeDefinition +class NullableTypeDefinition extends TypeDefinition { - protected readonly definition: BaseRequiredTypeDefinition; + protected readonly definition: RequiredTypeDefinition; - public constructor(definition: BaseRequiredTypeDefinition) + public constructor(definition: RequiredTypeDefinition) { super(); diff --git a/packages/ddd/src/predefined-type/optional/_index.mts b/packages/ddd/src/predefined-type/optional/_index.mts new file mode 100644 index 00000000..c600573c --- /dev/null +++ b/packages/ddd/src/predefined-type/optional/_index.mts @@ -0,0 +1 @@ +export * from "./optional-type-definition.mjs"; diff --git a/packages/ddd/src/predefined-type/optional/optional-type-definition.mts b/packages/ddd/src/predefined-type/optional/optional-type-definition.mts new file mode 100644 index 00000000..c39a7a7c --- /dev/null +++ b/packages/ddd/src/predefined-type/optional/optional-type-definition.mts @@ -0,0 +1,12 @@ +import { TypeDefinition } from "../../base/auxiliary/type-definition/type-definition.mjs"; + +abstract class OptionalTypeDefinition extends TypeDefinition +{ + // eslint-disable-next-line @ts/class-methods-use-this + public isOptional(): true + { + return true; + } +} + +export { OptionalTypeDefinition }; diff --git a/packages/ddd/src/predefined-type/relation/relation-type-definition.mts b/packages/ddd/src/predefined-type/relation/relation-type-definition.mts new file mode 100644 index 00000000..608078a5 --- /dev/null +++ b/packages/ddd/src/predefined-type/relation/relation-type-definition.mts @@ -0,0 +1,9 @@ +import type { RepositoryRecord } from "../../base/primary/repository-record.mjs"; +import type { LazyReference } from "../../value-object/lazy-reference/lazy-reference.mjs"; +import { RequiredTypeDefinition } from "../required/required-type-definition.mjs"; + +abstract class RelationTypeDefinition extends RequiredTypeDefinition> +{ +} + +export { RelationTypeDefinition }; diff --git a/packages/ddd/src/predefined-type/required/_index.mts b/packages/ddd/src/predefined-type/required/_index.mts new file mode 100644 index 00000000..03dd7ccc --- /dev/null +++ b/packages/ddd/src/predefined-type/required/_index.mts @@ -0,0 +1 @@ +export * from "./required-type-definition.mjs"; diff --git a/packages/ddd/src/base/auxiliary/type-definition/base-required-type-definition.mts b/packages/ddd/src/predefined-type/required/required-type-definition.mts similarity index 56% rename from packages/ddd/src/base/auxiliary/type-definition/base-required-type-definition.mts rename to packages/ddd/src/predefined-type/required/required-type-definition.mts index 59d2c8d0..3f875f9f 100644 --- a/packages/ddd/src/base/auxiliary/type-definition/base-required-type-definition.mts +++ b/packages/ddd/src/predefined-type/required/required-type-definition.mts @@ -1,6 +1,6 @@ -import { BaseTypeDefinition } from "./base-type-definition.mjs"; +import { TypeDefinition } from "../../base/auxiliary/type-definition/type-definition.mjs"; -abstract class BaseRequiredTypeDefinition extends BaseTypeDefinition +abstract class RequiredTypeDefinition extends TypeDefinition { // eslint-disable-next-line @ts/class-methods-use-this public isOptional(): false @@ -11,7 +11,7 @@ abstract class BaseRequiredTypeDefinition extends BaseTypeDefinition // eslint-disable-next-line @ts/class-methods-use-this public getEmptyValue(): never { - throw new Error("Not an optional type"); + throw new Error("This is not an optional type"); } // eslint-disable-next-line @ts/class-methods-use-this @@ -21,4 +21,4 @@ abstract class BaseRequiredTypeDefinition extends BaseTypeDefinition } } -export { BaseRequiredTypeDefinition }; +export { RequiredTypeDefinition }; diff --git a/packages/ddd/src/predefined-type/uuid-v4/uuid-v4-type-definition.mts b/packages/ddd/src/predefined-type/uuid-v4/uuid-v4-type-definition.mts index 8e03b572..0c606669 100644 --- a/packages/ddd/src/predefined-type/uuid-v4/uuid-v4-type-definition.mts +++ b/packages/ddd/src/predefined-type/uuid-v4/uuid-v4-type-definition.mts @@ -1,8 +1,8 @@ import type { UUID } from "node:crypto"; -import { BaseRequiredTypeDefinition } from "../../base/auxiliary/type-definition/base-required-type-definition.mjs"; +import { RequiredTypeDefinition } from "../required/required-type-definition.mjs"; import { assertUUIDv4 } from "./predicate/assert-uuid-v4.mjs"; -class UUIDv4TypeDefinition extends BaseRequiredTypeDefinition +class UUIDv4TypeDefinition extends RequiredTypeDefinition { // eslint-disable-next-line @ts/class-methods-use-this public assertType(value: unknown): asserts value is UUID diff --git a/packages/ddd/src/value-object/_index.mts b/packages/ddd/src/value-object/_index.mts new file mode 100644 index 00000000..abdb6065 --- /dev/null +++ b/packages/ddd/src/value-object/_index.mts @@ -0,0 +1,3 @@ +export * from "./box/_index.mjs"; +export * from "./lazy-reference/_index.mjs"; +export * from "./password/_index.mjs"; diff --git a/packages/ddd/src/value-object/box/_index.mts b/packages/ddd/src/value-object/box/_index.mts new file mode 100644 index 00000000..a038ab74 --- /dev/null +++ b/packages/ddd/src/value-object/box/_index.mts @@ -0,0 +1 @@ +export * from "./box.mjs"; diff --git a/packages/ddd/src/value-object/box/box.mts b/packages/ddd/src/value-object/box/box.mts new file mode 100644 index 00000000..05bdeed3 --- /dev/null +++ b/packages/ddd/src/value-object/box/box.mts @@ -0,0 +1,16 @@ +class Box +{ + protected readonly content: T; + + public constructor(content: T) + { + this.content = content; + } + + public get(): T + { + return this.content; + } +} + +export { Box }; diff --git a/packages/ddd/src/predefined-type/lazy-reference/_index.mts b/packages/ddd/src/value-object/lazy-reference/_index.mts similarity index 100% rename from packages/ddd/src/predefined-type/lazy-reference/_index.mts rename to packages/ddd/src/value-object/lazy-reference/_index.mts diff --git a/packages/ddd/src/predefined-type/lazy-reference/lazy-reference.mts b/packages/ddd/src/value-object/lazy-reference/lazy-reference.mts similarity index 83% rename from packages/ddd/src/predefined-type/lazy-reference/lazy-reference.mts rename to packages/ddd/src/value-object/lazy-reference/lazy-reference.mts index b73b7aa6..5bd817c7 100644 --- a/packages/ddd/src/predefined-type/lazy-reference/lazy-reference.mts +++ b/packages/ddd/src/value-object/lazy-reference/lazy-reference.mts @@ -1,7 +1,7 @@ -import type { BaseRecord } from "../../base/primary/base-record.mjs"; +import type { RepositoryRecord } from "../../base/primary/repository-record.mjs"; import { NullableLazyReference } from "./nullable-lazy-reference.mjs"; -abstract class LazyReference extends NullableLazyReference +abstract class LazyReference extends NullableLazyReference { protected readonly uuid: string; protected cacheable: boolean; diff --git a/packages/ddd/src/predefined-type/lazy-reference/null-reference.mts b/packages/ddd/src/value-object/lazy-reference/null-reference.mts similarity index 100% rename from packages/ddd/src/predefined-type/lazy-reference/null-reference.mts rename to packages/ddd/src/value-object/lazy-reference/null-reference.mts diff --git a/packages/ddd/src/predefined-type/lazy-reference/nullable-lazy-reference.mts b/packages/ddd/src/value-object/lazy-reference/nullable-lazy-reference.mts similarity index 63% rename from packages/ddd/src/predefined-type/lazy-reference/nullable-lazy-reference.mts rename to packages/ddd/src/value-object/lazy-reference/nullable-lazy-reference.mts index d781fc4e..53124531 100644 --- a/packages/ddd/src/predefined-type/lazy-reference/nullable-lazy-reference.mts +++ b/packages/ddd/src/value-object/lazy-reference/nullable-lazy-reference.mts @@ -1,6 +1,6 @@ -import type { BaseRecord } from "../../base/primary/base-record.mjs"; +import type { RepositoryRecord } from "../../base/primary/repository-record.mjs"; -abstract class NullableLazyReference +abstract class NullableLazyReference { public abstract getUUID(): string | null; public abstract getRecord(): Promise; diff --git a/packages/ddd/src/predefined-type/password/_index.mts b/packages/ddd/src/value-object/password/_index.mts similarity index 100% rename from packages/ddd/src/predefined-type/password/_index.mts rename to packages/ddd/src/value-object/password/_index.mts diff --git a/packages/ddd/src/predefined-type/password/definition/_index.mts b/packages/ddd/src/value-object/password/definition/_index.mts similarity index 100% rename from packages/ddd/src/predefined-type/password/definition/_index.mts rename to packages/ddd/src/value-object/password/definition/_index.mts diff --git a/packages/ddd/src/predefined-type/password/definition/interface/_index.mts b/packages/ddd/src/value-object/password/definition/interface/_index.mts similarity index 100% rename from packages/ddd/src/predefined-type/password/definition/interface/_index.mts rename to packages/ddd/src/value-object/password/definition/interface/_index.mts diff --git a/packages/ddd/src/predefined-type/password/definition/interface/password-instantiation.interface.mts b/packages/ddd/src/value-object/password/definition/interface/password-instantiation.interface.mts similarity index 100% rename from packages/ddd/src/predefined-type/password/definition/interface/password-instantiation.interface.mts rename to packages/ddd/src/value-object/password/definition/interface/password-instantiation.interface.mts diff --git a/packages/ddd/src/predefined-type/password/null-password.mts b/packages/ddd/src/value-object/password/null-password.mts similarity index 100% rename from packages/ddd/src/predefined-type/password/null-password.mts rename to packages/ddd/src/value-object/password/null-password.mts diff --git a/packages/ddd/src/predefined-type/password/nullable-password.mts b/packages/ddd/src/value-object/password/nullable-password.mts similarity index 100% rename from packages/ddd/src/predefined-type/password/nullable-password.mts rename to packages/ddd/src/value-object/password/nullable-password.mts diff --git a/packages/ddd/src/predefined-type/password/password.factory.mts b/packages/ddd/src/value-object/password/password.factory.mts similarity index 100% rename from packages/ddd/src/predefined-type/password/password.factory.mts rename to packages/ddd/src/value-object/password/password.factory.mts diff --git a/packages/ddd/src/predefined-type/password/password.mts b/packages/ddd/src/value-object/password/password.mts similarity index 100% rename from packages/ddd/src/predefined-type/password/password.mts rename to packages/ddd/src/value-object/password/password.mts diff --git a/packages/ts-predicate/package.json b/packages/ts-predicate/package.json index 5f3cbf5a..7ee38dbb 100644 --- a/packages/ts-predicate/package.json +++ b/packages/ts-predicate/package.json @@ -1,6 +1,6 @@ { "name": "@vitruvius-labs/ts-predicate", - "version": "7.2.1", + "version": "7.2.2", "description": "TypeScript predicates library", "author": { "name": "VitruviusLabs" diff --git a/packages/ts-predicate/src/extended/nullish/no-value.mts b/packages/ts-predicate/src/extended/nullish/no-value.mts index dda5b0d5..e2ea3065 100644 --- a/packages/ts-predicate/src/extended/nullish/no-value.mts +++ b/packages/ts-predicate/src/extended/nullish/no-value.mts @@ -1,3 +1,5 @@ const NO_VALUE: unique symbol = Symbol("no value"); -export { NO_VALUE as NoValue }; +type NoValueType = typeof NO_VALUE; + +export { NO_VALUE as NoValue, type NoValueType }; diff --git a/packages/ts-predicate/src/helper/stringify-error-tree.mts b/packages/ts-predicate/src/helper/stringify-error-tree.mts index a8c66064..4a471316 100644 --- a/packages/ts-predicate/src/helper/stringify-error-tree.mts +++ b/packages/ts-predicate/src/helper/stringify-error-tree.mts @@ -9,7 +9,7 @@ const enum TreeStructure LAST_CHILD_INDENT /* */ = " ", } -function generateTreeStructure(errors: Array, indent: string): string +function generateTreeStructure(errors: ReadonlyArray, indent: string): string { let result: string = ""; diff --git a/packages/ts-predicate/src/type-assertion/assert-allowed-keys.mts b/packages/ts-predicate/src/type-assertion/assert-allowed-keys.mts index 5c709838..e9ecbfd6 100644 --- a/packages/ts-predicate/src/type-assertion/assert-allowed-keys.mts +++ b/packages/ts-predicate/src/type-assertion/assert-allowed-keys.mts @@ -1,6 +1,6 @@ import { ValidationError } from "./utils/validation-error.mjs"; -function assertAllowedKeys(value: object, allowed_keys: Array): void +function assertAllowedKeys(value: object, allowed_keys: ReadonlyArray): void { const FORBIDDEN_PROPERTIES: Array = Object.keys(value).filter( (key: string): boolean => diff --git a/packages/ts-predicate/src/type-assertion/assert-enum-value.mts b/packages/ts-predicate/src/type-assertion/assert-enum-value.mts index 2a78a659..b61bb47e 100644 --- a/packages/ts-predicate/src/type-assertion/assert-enum-value.mts +++ b/packages/ts-predicate/src/type-assertion/assert-enum-value.mts @@ -1,6 +1,6 @@ import { ValidationError } from "./_index.mjs"; -function assertEnumValue(value: unknown, enum_values: Array, enum_name?: string): asserts value is Type +function assertEnumValue(value: unknown, enum_values: ReadonlyArray, enum_name?: string): asserts value is Type { // @ts-expect-error: [].includes() should not care about the type of the parameter. if (!enum_values.includes(value)) diff --git a/packages/ts-predicate/src/type-assertion/assert-union.mts b/packages/ts-predicate/src/type-assertion/assert-union.mts index edb3f513..4653a62c 100644 --- a/packages/ts-predicate/src/type-assertion/assert-union.mts +++ b/packages/ts-predicate/src/type-assertion/assert-union.mts @@ -7,9 +7,9 @@ function assertUnion(value: unknown, tests: [Test, Test]): asser function assertUnion(value: unknown, tests: [Test, Test, Test]): asserts value is T1 | T2 | T3; function assertUnion(value: unknown, tests: [Test, Test, Test, Test]): asserts value is T1 | T2 | T3 | T4; function assertUnion(value: unknown, tests: [Test, Test, Test, Test, Test]): asserts value is T1 | T2 | T3 | T4 | T5; -function assertUnion(value: unknown, tests: Array>): asserts value is T; +function assertUnion(value: unknown, tests: ReadonlyArray>): asserts value is T; -function assertUnion(value: unknown, tests: Array>): asserts value is unknown +function assertUnion(value: unknown, tests: ReadonlyArray>): asserts value is unknown { const errors: Array = []; diff --git a/packages/ts-predicate/src/type-guard/has-allowed-keys.mts b/packages/ts-predicate/src/type-guard/has-allowed-keys.mts index 5346a425..3e026e2c 100644 --- a/packages/ts-predicate/src/type-guard/has-allowed-keys.mts +++ b/packages/ts-predicate/src/type-guard/has-allowed-keys.mts @@ -1,4 +1,4 @@ -function hasAllowedKeys(value: object, allowed_keys: Array): boolean +function hasAllowedKeys(value: object, allowed_keys: ReadonlyArray): boolean { return Object.keys(value).every( (key: string): boolean => diff --git a/packages/ts-predicate/src/type-guard/is-enum-value.mts b/packages/ts-predicate/src/type-guard/is-enum-value.mts index c22d1e97..79a1c9f0 100644 --- a/packages/ts-predicate/src/type-guard/is-enum-value.mts +++ b/packages/ts-predicate/src/type-guard/is-enum-value.mts @@ -1,4 +1,4 @@ -function isEnumValue(value: unknown, enum_values: Array): value is Type +function isEnumValue(value: unknown, enum_values: ReadonlyArray): value is Type { // @ts-expect-error: [].includes() should not care about the type of the parameter. return enum_values.includes(value); diff --git a/packages/ts-predicate/src/type-guard/is-union.mts b/packages/ts-predicate/src/type-guard/is-union.mts index 61dbaed4..a80e2992 100644 --- a/packages/ts-predicate/src/type-guard/is-union.mts +++ b/packages/ts-predicate/src/type-guard/is-union.mts @@ -5,9 +5,9 @@ function isUnion(value: unknown, tests: [Test, Test]): value is function isUnion(value: unknown, tests: [Test, Test, Test]): value is T1 | T2 | T3; function isUnion(value: unknown, tests: [Test, Test, Test, Test]): value is T1 | T2 | T3 | T4; function isUnion(value: unknown, tests: [Test, Test, Test, Test, Test]): value is T1 | T2 | T3 | T4 | T5; -function isUnion(value: unknown, tests: Array>): value is T; +function isUnion(value: unknown, tests: ReadonlyArray>): value is T; -function isUnion(value: unknown, tests: Array>): value is unknown +function isUnion(value: unknown, tests: ReadonlyArray>): value is unknown { return tests.some( (test: Test): boolean =>