@haskou/value-objects 7.0.0 → 7.0.2
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 +0 -4
- package/dist/index.cjs +6 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +0 -1
- package/dist/index.d.cts.map +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -10,8 +10,6 @@ A TypeScript library for validated, immutable primitive wrappers and small utili
|
|
|
10
10
|
|
|
11
11
|
It provides ready-to-use objects for strings, numbers, identifiers, dates, coordinates, hashes, media, and collections. Validation happens when an object is created, so code receiving one of these objects can rely on its shape.
|
|
12
12
|
|
|
13
|
-
Cryptographic operations are intentionally outside this package. Pigeon Swarm-specific cryptography lives in `@haskou/pigeon-swarm-crypto`; dependency direction is one-way, with the crypto package allowed to consume generic value-object representations and never the reverse.
|
|
14
|
-
|
|
15
13
|
The package publishes ESM and CommonJS entry points plus TypeScript declarations. Both entry points share one runtime implementation, so class identity and NullObject configuration stay consistent when imports and requires are mixed. It does not declare a Node.js engine requirement. Identifier generation uses the installed `uuid` dependency with platform-specific Node and browser implementations.
|
|
16
14
|
|
|
17
15
|
## Documentation
|
|
@@ -20,8 +18,6 @@ Full documentation is available at **https://haskou.github.io/value-objects/**.
|
|
|
20
18
|
|
|
21
19
|
The documentation includes installation, quick start, examples, error handling, serialization notes, and one reference page per exported class.
|
|
22
20
|
|
|
23
|
-
Reusable agent instructions and engineering skills are available at **https://github.com/haskou/ddd-engineer-skills**.
|
|
24
|
-
|
|
25
21
|
## Installation
|
|
26
22
|
|
|
27
23
|
```bash
|
package/dist/index.cjs
CHANGED
|
@@ -225,7 +225,12 @@ var ValueObject = class ValueObject {
|
|
|
225
225
|
if (ValueObject.nullObjectCreationEnabled === false) throw new NullObjectCreationDisabledError(new.target.name);
|
|
226
226
|
return NullObject.new(new.target);
|
|
227
227
|
}
|
|
228
|
-
this
|
|
228
|
+
Object.defineProperty(this, "value", {
|
|
229
|
+
value,
|
|
230
|
+
writable: false,
|
|
231
|
+
configurable: false,
|
|
232
|
+
enumerable: true
|
|
233
|
+
});
|
|
229
234
|
}
|
|
230
235
|
isNullish(value) {
|
|
231
236
|
return value === null || value === void 0;
|
|
@@ -503,10 +508,8 @@ var Day = class extends Integer {
|
|
|
503
508
|
//#endregion
|
|
504
509
|
//#region src/value-objects/Enum.ts
|
|
505
510
|
var Enum = class extends ValueObject {
|
|
506
|
-
value;
|
|
507
511
|
constructor(value) {
|
|
508
512
|
super(value);
|
|
509
|
-
this.value = value;
|
|
510
513
|
if (NullObject.isNullObject(this)) return this;
|
|
511
514
|
this.ensureIsValidValue();
|
|
512
515
|
}
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["Buffer","Buffer","Buffer","parse","uuidV4","Buffer","uuidV4","Buffer"],"sources":["../src/errors/BaseError.ts","../src/errors/DomainError.ts","../src/errors/InvalidColorError.ts","../src/errors/InvalidDayError.ts","../src/errors/InvalidDayFormatError.ts","../src/errors/InvalidHourError.ts","../src/errors/InvalidEmailError.ts","../src/errors/InvalidFormatError.ts","../src/errors/InvalidHashError.ts","../src/errors/InvalidIntegerError.ts","../src/errors/InvalidLatitudeError.ts","../src/errors/InvalidLongitudeError.ts","../src/errors/InvalidMinutesError.ts","../src/errors/InvalidNumberError.ts","../src/errors/InvalidPasswordError.ts","../src/errors/InvalidPositiveNumberError.ts","../src/errors/InvalidStringLengthError.ts","../src/errors/InvalidTimestampIntervalError.ts","../src/errors/InvalidLengthError.ts","../src/errors/NullObjectCreationDisabledError.ts","../src/errors/NullObjectError.ts","../src/errors/ValueNotInEnumError.ts","../src/patterns/Assert.ts","../src/value-objects/NullObject.ts","../src/value-objects/ValueObject.ts","../src/value-objects/StringValueObject.ts","../src/value-objects/NumberValueObject.ts","../src/value-objects/coordinates/Latitude.ts","../src/value-objects/coordinates/Longitude.ts","../src/value-objects/coordinates/Coordinates.ts","../src/value-objects/hashes/Hash.ts","../src/value-objects/hashes/MD5Hash.ts","../src/value-objects/hashes/SHA256Hash.ts","../src/value-objects/hashes/SHA512Hash.ts","../src/value-objects/ids/ShortId.ts","../src/value-objects/ids/UUID.ts","../src/value-objects/media/Media.ts","../src/value-objects/Integer.ts","../src/value-objects/time/Day.ts","../src/value-objects/Enum.ts","../src/value-objects/time/DayOfWeek.ts","../src/value-objects/time/Month.ts","../src/value-objects/time/Year.ts","../src/value-objects/time/Timestamp.ts","../src/value-objects/PositiveNumber.ts","../src/value-objects/time/Duration.ts","../src/value-objects/time/TimestampInterval.ts","../src/value-objects/time/MonthOfYear.ts","../src/value-objects/time/CalendarDay.ts","../src/value-objects/time/Hour.ts","../src/value-objects/Color.ts","../src/value-objects/Email.ts","../src/value-objects/Password.ts","../src/value-objects/UniqueObjectArray.ts"],"sourcesContent":["export class BaseError extends Error {\n private readonly isBaseError = true;\n public static isBaseError(error: unknown): boolean {\n return !!(error as BaseError).isBaseError;\n }\n\n constructor(message: string, prototype: object = BaseError.prototype) {\n super(message);\n this.name = this.constructor.name;\n Object.setPrototypeOf(this, prototype);\n }\n\n public toString(): string {\n return `[${this.name}]: ${this.message}`;\n }\n\n public getStack(): string {\n return this.stack || '';\n }\n}\n","import { BaseError } from './BaseError';\n\nexport class DomainError extends BaseError {\n protected readonly isDomainError = true;\n public static isDomainError(error: unknown): boolean {\n return !!(error as DomainError).isDomainError;\n }\n\n constructor(message: string) {\n super(message, new.target.prototype);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidColorError extends DomainError {\n constructor(value: string) {\n super(`Invalid color value: ${value}. Must be a valid hex color code.`);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidDayError extends DomainError {\n constructor(invalidDay: unknown) {\n super(`Invalid day ${String(invalidDay)}`);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidDayFormatError extends DomainError {\n constructor(invalidDate: string) {\n super(`Invalid day ${invalidDate}. Expected YYYY-MM-DD. `);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidHourError extends DomainError {\n constructor() {\n super(`Invalid hour`);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidEmailError extends DomainError {\n constructor(value: string) {\n super(`Invalid email format: ${value}`);\n }\n}\n","import { DomainError } from '../errors/DomainError';\n\nexport class InvalidFormatError extends DomainError {\n constructor(value?: string) {\n super(`Invalid Format Error with value: '${value}'`);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidHashError extends DomainError {\n constructor(type: string, value: string) {\n super(`Invalid ${type} hash: ${value}`);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidIntegerError extends DomainError {\n constructor(value: number) {\n super(`Invalid integer value ${value}`);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidLatitudeError extends DomainError {\n constructor(value: number) {\n super(`Invalid latitude: ${value}. Must be between -90 and 90`);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidLongitudeError extends DomainError {\n constructor(value: number) {\n super(`Invalid longitude: ${value}. Must be between -180 and 180`);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidMinutesError extends DomainError {\n constructor() {\n super(`Invalid minutes`);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidNumberError extends DomainError {\n constructor(invalidNumber: unknown) {\n super(`Invalid number ${String(invalidNumber)}`);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidPasswordError extends DomainError {\n constructor(minLength: number, maxLength: number) {\n super(\n `Password must be between ${minLength} and ${maxLength} characters long and include at least one uppercase letter, one lowercase letter, one number and one symbol.`,\n );\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidPositiveNumberError extends DomainError {\n constructor() {\n super(`Value must be greater or equal than 0`);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidStringLengthError extends DomainError {\n constructor(value: string, length: number) {\n super(\n `String length '${value.length}' exceeds the expected length: '${length}'`,\n );\n }\n}\n","import { Timestamp } from '../value-objects/time/Timestamp';\nimport { DomainError } from './DomainError';\n\nexport class InvalidTimestampIntervalError extends DomainError {\n constructor(start: Timestamp, end: Timestamp) {\n super(\n `Invalid TimestampInterval, start (${start.valueOf()}) must be before the end (${end.valueOf()})`,\n );\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidLengthError extends DomainError {\n constructor(value: unknown, length: number) {\n super(\n `Invalid Length Error with value: '${value}' expected length: '${length}'`,\n );\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class NullObjectCreationDisabledError extends DomainError {\n constructor(valueObjectName: string) {\n super(\n `[NullObjectCreationDisabledError]: ${valueObjectName} received null or undefined while automatic NullObject creation is disabled`,\n );\n Object.setPrototypeOf(this, NullObjectCreationDisabledError.prototype);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class NullObjectError extends DomainError {\n constructor(message: string) {\n super(`[NullObjectError]: ${message} is NullObject`);\n Object.setPrototypeOf(this, NullObjectError.prototype);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class ValueNotInEnumError extends DomainError {\n constructor(value: unknown, enumerate: unknown) {\n super(\n `${Object.values(enumerate as object).join(',')} enum does not include value: ${value}`,\n );\n }\n}\n","import { BaseError } from '../errors/BaseError';\nimport { DomainError } from '../errors/DomainError';\n\nexport type Errors = Error | BaseError | DomainError | string;\n\nexport function assert(\n condition: boolean | unknown | undefined,\n error: string | Errors,\n): asserts condition {\n if (condition) {\n return;\n }\n\n throw typeof error === 'string' ? new DomainError(error) : error;\n}\n","import { NullObjectError } from '../errors/NullObjectError';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor<T> = abstract new (...args: any[]) => T;\ntype NullableObject = Nullable & Record<string, unknown>;\ninterface Nullable {\n isNullObject: boolean;\n valueOf(): undefined;\n}\n\nexport abstract class NullObject {\n private static setFakeProps<T>(\n nullObject: NullableObject,\n klass: Constructor<T>,\n ): void {\n const visited = new Set<string>();\n let proto = klass.prototype;\n\n while (proto && proto !== Object.prototype) {\n const props = Object.getOwnPropertyNames(proto);\n\n for (const prop of props) {\n if (\n prop === 'constructor' ||\n prop === 'isNullObject' ||\n prop === 'valueOf' ||\n visited.has(prop)\n ) {\n continue;\n }\n\n visited.add(prop);\n // eslint-disable-next-line no-param-reassign\n nullObject[prop] = () => {\n throw new NullObjectError(klass.name);\n };\n }\n\n proto = Object.getPrototypeOf(proto);\n }\n\n Object.setPrototypeOf(nullObject, NullObject.prototype);\n }\n\n public static new<T>(klass: Constructor<T>): T {\n const nullObject: NullableObject = {\n isNullObject: true,\n valueOf: () => {\n return undefined;\n },\n };\n NullObject.setFakeProps(nullObject, klass);\n\n return nullObject as T;\n }\n\n public static isNullObject(nullable: unknown): boolean {\n return !!(nullable as NullableObject)?.isNullObject;\n }\n}\n","import { NullObjectCreationDisabledError } from '../errors';\nimport { Primitive, Nullish } from '../types';\nimport { NullObject } from './NullObject';\n\nexport abstract class ValueObject<T extends Primitive = Primitive> {\n private static nullObjectCreationEnabled = true;\n\n protected readonly value!: T;\n\n public static disableNullObjectCreation(): void {\n ValueObject.nullObjectCreationEnabled = false;\n }\n\n public static enableNullObjectCreation(): void {\n ValueObject.nullObjectCreationEnabled = true;\n }\n\n constructor(value: T | Nullish) {\n if (this.isNullish(value)) {\n if (ValueObject.nullObjectCreationEnabled === false) {\n throw new NullObjectCreationDisabledError(new.target.name);\n }\n\n return NullObject.new(new.target);\n }\n this.value = value;\n }\n\n private isNullish(value: T | Nullish): value is null | undefined {\n return value === null || value === undefined;\n }\n\n protected clone(value: T): this {\n return new (this.constructor as new (value: Primitive) => this)(\n this.isNullish(value) ? this.value : value,\n ) as this;\n }\n\n public hasValue(other: unknown): boolean {\n const otherValue = other instanceof ValueObject ? other.valueOf() : other;\n\n return this.value === otherValue;\n }\n\n public isEqual(other: unknown): boolean {\n return (\n other instanceof ValueObject &&\n this.constructor === other.constructor &&\n this.hasValue(other)\n );\n }\n\n public isNotEqual(other: unknown): boolean {\n return this.isEqual(other) === false;\n }\n\n public valueOf(): T {\n return this.value;\n }\n\n public toString(): string {\n return this.value!.toString();\n }\n}\n","import { InvalidStringLengthError } from '../errors/InvalidStringLengthError';\nimport { assert } from '../patterns/Assert';\nimport { NullObject } from './NullObject';\nimport { ValueObject } from './ValueObject';\n\nexport class StringValueObject extends ValueObject<string> {\n constructor(value: string | StringValueObject, maxLength: number = 512) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n this.ensureDoesNotExceedsMaxLength(maxLength);\n }\n\n private ensureDoesNotExceedsMaxLength(maxLength: number): void {\n assert(\n this.value.length <= maxLength,\n new InvalidStringLengthError(this.value, maxLength),\n );\n }\n\n public isEmpty(): boolean {\n return !this.value;\n }\n}\n","import { InvalidNumberError } from '../errors/InvalidNumberError';\nimport { assert } from '../patterns/Assert';\nimport { NullObject } from './NullObject';\nimport { ValueObject } from './ValueObject';\n\nexport class NumberValueObject extends ValueObject<number> {\n constructor(value: number | NumberValueObject) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n assert(this.isValidNumber(this.value), new InvalidNumberError(this.value));\n }\n\n private isValidNumber(value: number): boolean {\n return Number.isFinite(value.valueOf());\n }\n\n public isZero(): boolean {\n return this.value === 0;\n }\n\n public isGreaterThan(other: number | NumberValueObject): boolean {\n return this.value > other.valueOf();\n }\n\n public isGreaterOrEqualThan(other: number | NumberValueObject): boolean {\n return this.value >= other.valueOf();\n }\n\n public isLessThan(other: number | NumberValueObject): boolean {\n return this.value < other.valueOf();\n }\n\n public isLessOrEqualThan(other: number | NumberValueObject): boolean {\n return this.value <= other.valueOf();\n }\n\n public add(other: number | NumberValueObject): NumberValueObject {\n return this.clone(this.value + other.valueOf());\n }\n\n public subtract(other: number | NumberValueObject): NumberValueObject {\n return this.clone(this.value - other.valueOf());\n }\n\n public multiply(other: number | NumberValueObject): NumberValueObject {\n return this.clone(this.value * other.valueOf());\n }\n\n public divide(other: number | NumberValueObject): NumberValueObject {\n return this.clone(this.value / other.valueOf());\n }\n}\n","import { InvalidLatitudeError } from '../../errors/InvalidLatitudeError';\nimport { assert } from '../../patterns/Assert';\nimport { NumberValueObject } from '../NumberValueObject';\n\nexport class Latitude extends NumberValueObject {\n private static MIN_VALUE = new NumberValueObject(-90);\n private static MAX_VALUE = new NumberValueObject(90);\n\n private static isValid(value: number | NumberValueObject): boolean {\n const primitive = value.valueOf();\n\n return (\n Number.isFinite(primitive) &&\n primitive >= this.MIN_VALUE.valueOf() &&\n primitive <= this.MAX_VALUE.valueOf()\n );\n }\n\n constructor(value: number | NumberValueObject) {\n assert(Latitude.isValid(value), new InvalidLatitudeError(value.valueOf()));\n super(value.valueOf());\n }\n}\n","import { InvalidLongitudeError } from '../../errors/InvalidLongitudeError';\nimport { assert } from '../../patterns/Assert';\nimport { NumberValueObject } from '../NumberValueObject';\n\nexport class Longitude extends NumberValueObject {\n private static MIN_VALUE = new NumberValueObject(-180);\n private static MAX_VALUE = new NumberValueObject(180);\n\n private static isValid(value: number | NumberValueObject): boolean {\n const primitive = value.valueOf();\n\n return (\n Number.isFinite(primitive) &&\n primitive >= this.MIN_VALUE.valueOf() &&\n primitive <= this.MAX_VALUE.valueOf()\n );\n }\n\n constructor(value: number | NumberValueObject) {\n assert(\n Longitude.isValid(value),\n new InvalidLongitudeError(value.valueOf()),\n );\n super(value.valueOf());\n }\n}\n","import { StringValueObject } from '../StringValueObject';\nimport { Latitude } from './Latitude';\nimport { Longitude } from './Longitude';\n\nexport class Coordinates extends StringValueObject {\n private latitude: Latitude;\n private longitude: Longitude;\n\n public static fromString(value: string): Coordinates {\n const latitude = parseFloat(value.split(',')[0]);\n const longitude = parseFloat(value.split(',')[1]);\n\n return new Coordinates(latitude, longitude);\n }\n\n constructor(latitude: number | Latitude, longitude: number | Longitude) {\n super(latitude?.valueOf() + ',' + longitude?.valueOf());\n\n this.latitude = new Latitude(latitude.valueOf());\n this.longitude = new Longitude(longitude.valueOf());\n }\n\n public getLatitude(): Latitude {\n return this.latitude;\n }\n\n public getLongitude(): Longitude {\n return this.longitude;\n }\n}\n","import { Buffer } from 'buffer';\n\nimport { NullObject } from '../NullObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { ValueObject } from '../ValueObject';\n\nexport abstract class Hash extends ValueObject<string> {\n constructor(source: string | StringValueObject) {\n super(source?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n }\n\n public toBase64(): StringValueObject {\n return new StringValueObject(\n Buffer.from(this.valueOf(), 'hex').toString('base64'),\n );\n }\n}\n","import { InvalidHashError } from '../../errors/InvalidHashError';\nimport { assert } from '../../patterns';\nimport { NullObject } from '../NullObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { Hash } from './Hash';\n\nexport class MD5Hash extends Hash {\n public static isValid(hash: string | StringValueObject): boolean {\n return !!hash.valueOf().match(/^[a-f0-9]{32}$/);\n }\n\n constructor(source: string | StringValueObject) {\n super(source?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n assert(\n MD5Hash.isValid(this.valueOf()),\n new InvalidHashError('MD5', source.valueOf()),\n );\n }\n}\n","import { Buffer } from 'buffer';\n\nimport { InvalidHashError } from '../../errors/InvalidHashError';\nimport { assert } from '../../patterns';\nimport { NullObject } from '../NullObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { ValueObject } from '../ValueObject';\n\nexport class SHA256Hash extends ValueObject<string> {\n public static isValid(hash: string | StringValueObject): boolean {\n return !!hash.valueOf().match(/^[a-f0-9]{64}$/i);\n }\n\n constructor(source: string | StringValueObject) {\n super(source?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n assert(\n SHA256Hash.isValid(this.valueOf()),\n new InvalidHashError('SHA256', source.valueOf()),\n );\n }\n\n public toBase64(): StringValueObject {\n return new StringValueObject(\n Buffer.from(this.valueOf(), 'hex').toString('base64'),\n );\n }\n}\n","import { Buffer } from 'buffer';\n\nimport { InvalidHashError } from '../../errors/InvalidHashError';\nimport { assert } from '../../patterns';\nimport { NullObject } from '../NullObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { ValueObject } from '../ValueObject';\n\nexport class SHA512Hash extends ValueObject<string> {\n public static isValid(hash: string | StringValueObject): boolean {\n return !!hash.valueOf().match(/^[a-f0-9]{128}$/i);\n }\n\n constructor(source: string | StringValueObject) {\n super(source?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n assert(\n SHA512Hash.isValid(this.valueOf()),\n new InvalidHashError('SHA512', source.valueOf()),\n );\n }\n\n public toBase64(): StringValueObject {\n return new StringValueObject(\n Buffer.from(this.valueOf(), 'hex').toString('base64'),\n );\n }\n}\n","import { Buffer } from 'buffer';\nimport { parse, v4 as uuidV4 } from 'uuid';\n\nimport { InvalidFormatError } from '../../errors/InvalidFormatError';\nimport { InvalidLengthError } from '../../errors/InvalidLengthError';\nimport { assert } from '../../patterns';\nimport { NullObject } from '../NullObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { ValueObject } from '../ValueObject';\n\nexport class ShortId extends ValueObject<string> {\n private static readonly LENGTH = 24;\n private static readonly PATTERN = new RegExp(`[a-zA-Z0-9]{${this.LENGTH}}$`);\n\n private static generateObjectIdHex(): string {\n const random = parse(uuidV4());\n const bytes = Buffer.alloc(12);\n bytes.writeUInt32BE(Math.floor(Date.now() / 1000), 0);\n // Keep eight fully random bytes, excluding the UUID version/variant bytes.\n bytes.set(random.subarray(0, 6), 4);\n bytes.set(random.subarray(9, 11), 10);\n\n return bytes.toString('hex');\n }\n\n public static generate(): ShortId {\n return new ShortId(ShortId.generateObjectIdHex());\n }\n\n constructor(value: string | StringValueObject) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n this.ensureIsShortId(this.value);\n }\n\n private ensureIsShortId(value: string): void {\n assert(\n value.length === ShortId.LENGTH,\n new InvalidLengthError(this.value, ShortId.LENGTH),\n );\n assert(ShortId.PATTERN.test(value), new InvalidFormatError(this.value));\n }\n}\n","import { v4 as uuidV4 } from 'uuid';\n\nimport { InvalidFormatError } from '../../errors/InvalidFormatError';\nimport { InvalidLengthError } from '../../errors/InvalidLengthError';\nimport { assert } from '../../patterns';\nimport { NullObject } from '../NullObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { ValueObject } from '../ValueObject';\n\nexport class UUID extends ValueObject<string> {\n private static readonly LENGTH = 36;\n private static readonly PATTERN =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n private static readonly SENTINEL_PATTERN =\n /^(?:00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;\n\n public static generate(): UUID {\n return new UUID(uuidV4());\n }\n\n constructor(value: string | StringValueObject) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n this.ensureIsUUID(this.value);\n }\n\n private ensureIsUUID(value: string): void {\n assert(\n value.length === UUID.LENGTH,\n new InvalidLengthError(this.value, UUID.LENGTH),\n );\n assert(\n UUID.PATTERN.test(value) || UUID.SENTINEL_PATTERN.test(value),\n new InvalidFormatError(this.value),\n );\n }\n}\n","import { Buffer } from 'buffer';\n\nimport { NullObject } from '../NullObject';\nimport { ValueObject } from '../ValueObject';\n\nexport class Media extends ValueObject<string> {\n private readonly buffer?: Buffer;\n\n constructor(value: string | Buffer) {\n super(value?.toString());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n this.buffer = Buffer.isBuffer(value) ? Buffer.from(value) : undefined;\n }\n\n public getBuffer(): Buffer {\n return this.buffer === undefined\n ? Buffer.from(this.value)\n : Buffer.from(this.buffer);\n }\n\n public getSize(): number {\n return this.getBuffer().length;\n }\n\n public getBase64(): string {\n return this.getBuffer().toString('base64');\n }\n\n public hasValue(other: unknown): boolean {\n if (other instanceof Media) {\n return this.getBuffer().equals(other.getBuffer());\n }\n\n if (Buffer.isBuffer(other)) {\n return this.getBuffer().equals(other);\n }\n\n return super.hasValue(other);\n }\n}\n","import { InvalidIntegerError } from '../errors/InvalidIntegerError';\nimport { assert } from '../patterns/Assert';\nimport { NullObject } from './NullObject';\nimport { NumberValueObject } from './NumberValueObject';\n\nexport class Integer extends NumberValueObject {\n constructor(value: number | NumberValueObject) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n this.ensureIsInteger();\n }\n\n private ensureIsInteger(): void {\n assert(\n this.value.valueOf() % 1 === 0,\n new InvalidIntegerError(this.value.valueOf()),\n );\n }\n}\n","import { InvalidDayError } from '../../errors/InvalidDayError';\nimport { assert } from '../../patterns/Assert';\nimport { Integer } from '../Integer';\nimport { NumberValueObject } from '../NumberValueObject';\n\nexport class Day extends Integer {\n constructor(value: number | NumberValueObject) {\n super(value.valueOf());\n\n this.ensureIsValidDay();\n }\n\n private ensureIsValidDay(): void {\n assert(this.isGreaterOrEqualThan(1), new InvalidDayError(this.value));\n assert(this.isLessOrEqualThan(31), new InvalidDayError(this.value));\n }\n}\n","import { ValueNotInEnumError } from '../errors/ValueNotInEnumError';\nimport { assert } from '../patterns/Assert';\nimport { Primitive } from '../types';\nimport { NullObject } from './NullObject';\nimport { ValueObject } from './ValueObject';\n\nexport abstract class Enum<\n T extends Primitive = Primitive,\n> extends ValueObject<T> {\n constructor(protected readonly value: T) {\n super(value);\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n this.ensureIsValidValue();\n }\n\n public abstract getValues(): T[];\n\n private ensureIsValidValue(): void {\n const isValueInEnum = this.getValues().some((enumValue) =>\n this.hasValue(enumValue),\n );\n assert(\n isValueInEnum,\n new ValueNotInEnumError(this.valueOf(), this.getValues()),\n );\n }\n}\n","import { InvalidDayError } from '../../errors/InvalidDayError';\nimport { assert } from '../../patterns';\nimport { Enum } from '../Enum';\nimport { Timestamp } from './Timestamp';\n\nexport enum EDaysOfWeek {\n MONDAY = 'monday',\n TUESDAY = 'tuesday',\n WEDNESDAY = 'wednesday',\n THURSDAY = 'thursday',\n FRIDAY = 'friday',\n SATURDAY = 'saturday',\n SUNDAY = 'sunday',\n}\n\nexport const timeStampDayToDaysMap = {\n [EDaysOfWeek.FRIDAY]: 5,\n [EDaysOfWeek.MONDAY]: 1,\n [EDaysOfWeek.SATURDAY]: 6,\n [EDaysOfWeek.SUNDAY]: 0,\n [EDaysOfWeek.THURSDAY]: 4,\n [EDaysOfWeek.TUESDAY]: 2,\n [EDaysOfWeek.WEDNESDAY]: 3,\n};\n\nexport class DayOfWeek extends Enum {\n public static MONDAY = new DayOfWeek(EDaysOfWeek.MONDAY);\n public static TUESDAY = new DayOfWeek(EDaysOfWeek.TUESDAY);\n public static WEDNESDAY = new DayOfWeek(EDaysOfWeek.WEDNESDAY);\n public static THURSDAY = new DayOfWeek(EDaysOfWeek.THURSDAY);\n public static FRIDAY = new DayOfWeek(EDaysOfWeek.FRIDAY);\n public static SATURDAY = new DayOfWeek(EDaysOfWeek.SATURDAY);\n public static SUNDAY = new DayOfWeek(EDaysOfWeek.SUNDAY);\n\n public static fromNumber(day: number): DayOfWeek {\n const [eDay] =\n Object.entries(timeStampDayToDaysMap).find(\n ([, value]) => value === day,\n ) || [];\n\n assert(eDay, new InvalidDayError(eDay));\n\n return new DayOfWeek(eDay);\n }\n\n public static fromTimestamp(timestamp: Timestamp): DayOfWeek {\n const dayOfWeekNumber = timestamp.getDayOfWeek();\n\n return DayOfWeek.fromNumber(dayOfWeekNumber);\n }\n\n public getValues(): string[] {\n return Object.values(EDaysOfWeek);\n }\n\n public toNumber(): number {\n return timeStampDayToDaysMap[this.value as EDaysOfWeek];\n }\n}\n","import { Enum } from '../Enum';\n\nenum MonthEnum {\n JANUARY = 1,\n FEBRUARY = 2,\n MARCH = 3,\n APRIL = 4,\n MAY = 5,\n JUNE = 6,\n JULY = 7,\n AUGUST = 8,\n SEPTEMBER = 9,\n OCTOBER = 10,\n NOVEMBER = 11,\n DECEMBER = 12,\n}\n\nexport class Month extends Enum<number> {\n public static readonly JANUARY = new Month(MonthEnum.JANUARY);\n public static readonly FEBRUARY = new Month(MonthEnum.FEBRUARY);\n public static readonly MARCH = new Month(MonthEnum.MARCH);\n public static readonly APRIL = new Month(MonthEnum.APRIL);\n public static readonly MAY = new Month(MonthEnum.MAY);\n public static readonly JUNE = new Month(MonthEnum.JUNE);\n public static readonly JULY = new Month(MonthEnum.JULY);\n public static readonly AUGUST = new Month(MonthEnum.AUGUST);\n public static readonly SEPTEMBER = new Month(MonthEnum.SEPTEMBER);\n public static readonly OCTOBER = new Month(MonthEnum.OCTOBER);\n public static readonly NOVEMBER = new Month(MonthEnum.NOVEMBER);\n public static readonly DECEMBER = new Month(MonthEnum.DECEMBER);\n\n public getValues(): number[] {\n return Object.values(MonthEnum) as number[];\n }\n\n public getIndex(): number {\n return Number(this.valueOf()) - 1;\n }\n}\n","import { Integer } from '../Integer';\nimport { NullObject } from '../NullObject';\nimport { NumberValueObject } from '../NumberValueObject';\n\nexport class Year extends Integer {\n private static readonly YEAR_DAYS = 365;\n private static readonly LEAP_YEAR_DAYS = 366;\n\n constructor(value: number | NumberValueObject) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n }\n\n public isLeapYear(): boolean {\n return this.getNumberOfDays() === Year.LEAP_YEAR_DAYS;\n }\n\n public getNumberOfDays(): number {\n return (this.value % 4 === 0 && this.value % 100 !== 0) ||\n this.value % 400 === 0\n ? Year.LEAP_YEAR_DAYS\n : Year.YEAR_DAYS;\n }\n}\n","import { InvalidIntegerError } from '../../errors/InvalidIntegerError';\nimport { InvalidNumberError } from '../../errors/InvalidNumberError';\nimport { assert } from '../../patterns/Assert';\nimport { NumberValueObject } from '../NumberValueObject';\nimport { ValueObject } from '../ValueObject';\nimport { CalendarDay } from './CalendarDay';\nimport { Day } from './Day';\nimport { Duration } from './Duration';\nimport { Month } from './Month';\nimport { MonthOfYear } from './MonthOfYear';\nimport { Year } from './Year';\n\ntype TimestampValue = number | Date | Timestamp | string;\n\nexport class Timestamp extends ValueObject<number> {\n private static readonly FACTORS = {\n DAYS: 24 * 60 * 60 * 1000,\n HOURS: 60 * 60 * 1000,\n MINUTES: 60 * 1000,\n SECONDS: 1000,\n WEEKS: 7 * 24 * 60 * 60 * 1000,\n };\n\n private static valueMilliseconds(value?: TimestampValue): number {\n if (value instanceof Timestamp || value instanceof Date) {\n return value.valueOf();\n }\n\n if (typeof value === 'number') {\n return value;\n }\n\n if (typeof value === 'string') {\n return new Date(value).valueOf();\n }\n\n return Date.now().valueOf();\n }\n\n private static getLastDayOfUtcMonth(year: number, month: number): number {\n const normalizedYear = year + Math.floor(month / 12);\n const normalizedMonth = ((month % 12) + 12) % 12;\n const days = [\n 31,\n new Year(normalizedYear).isLeapYear() ? 29 : 28,\n 31,\n 30,\n 31,\n 30,\n 31,\n 31,\n 30,\n 31,\n 30,\n 31,\n ];\n\n return days[normalizedMonth];\n }\n\n private static ensureCalendarDelta(value: number): void {\n assert(Number.isInteger(value), new InvalidIntegerError(value));\n }\n\n private static createUtcCalendarValue(\n sourceValue: number,\n year: number,\n month: number,\n day: number,\n ): number {\n const integerValue = Math.floor(sourceValue);\n const fractionalMilliseconds = sourceValue - integerValue;\n const source = new Date(integerValue);\n const target = new Date(0);\n\n target.setUTCFullYear(year, month, day);\n target.setUTCHours(\n source.getUTCHours(),\n source.getUTCMinutes(),\n source.getUTCSeconds(),\n source.getUTCMilliseconds(),\n );\n\n return target.valueOf() + fractionalMilliseconds;\n }\n\n public static new(value: TimestampValue): Timestamp {\n return new Timestamp(value);\n }\n\n public static now(): Timestamp {\n return new Timestamp();\n }\n\n public static fromSeconds(seconds: number | NumberValueObject): Timestamp {\n return new Timestamp(seconds.valueOf() * Timestamp.FACTORS.SECONDS);\n }\n\n public constructor(value?: TimestampValue) {\n super(Timestamp.valueMilliseconds(value));\n\n assert(\n Number.isFinite(new Date(this.value).valueOf()),\n new InvalidNumberError(this.value),\n );\n }\n\n public toExactHour(): Timestamp {\n const date = new Date(this.valueOf());\n\n date.setSeconds(0);\n date.setMinutes(0);\n date.setMilliseconds(0);\n\n const value = Timestamp.new(date.getTime()).value;\n\n return this.clone(value);\n }\n\n public toMilliseconds(): number {\n return this.value;\n }\n\n public toSeconds(): number {\n return Math.round(this.value / Timestamp.FACTORS.SECONDS);\n }\n\n public toDate(): Date {\n return new Date(this.value);\n }\n\n public toString(): string {\n return `${this.valueOf()}`;\n }\n\n public isBefore(other: Timestamp): boolean {\n return this.value < other.valueOf();\n }\n\n public isAfter(other: Timestamp): boolean {\n return this.value > other.valueOf();\n }\n\n public isBeforeOrEqual(other: Timestamp): boolean {\n return this.value <= other.valueOf();\n }\n\n public isAfterOrEqual(other: Timestamp): boolean {\n return this.value >= other.valueOf();\n }\n\n public addMilliseconds(milliseconds: number | NumberValueObject): Timestamp {\n const value = this.value + milliseconds.valueOf();\n\n return this.clone(value);\n }\n\n public addSeconds(seconds: number | NumberValueObject): Timestamp {\n const value = this.value + seconds.valueOf() * Timestamp.FACTORS.SECONDS;\n\n return this.clone(value);\n }\n\n public addMinutes(minutes: number | NumberValueObject): Timestamp {\n const value = this.value + minutes.valueOf() * Timestamp.FACTORS.MINUTES;\n\n return this.clone(value);\n }\n\n public addHours(hours: number | NumberValueObject): Timestamp {\n const value = this.value + hours.valueOf() * Timestamp.FACTORS.HOURS;\n\n return this.clone(value);\n }\n\n public addDays(days: number | NumberValueObject): Timestamp {\n const value = this.value + days.valueOf() * Timestamp.FACTORS.DAYS;\n\n return this.clone(value);\n }\n\n public addWeeks(weeks: number | NumberValueObject): Timestamp {\n const value = this.value + weeks.valueOf() * Timestamp.FACTORS.WEEKS;\n\n return this.clone(value);\n }\n\n public addMonths(months: number | NumberValueObject): Timestamp {\n const delta = months.valueOf();\n Timestamp.ensureCalendarDelta(delta);\n\n const source = new Date(Math.floor(this.value));\n const totalMonths =\n source.getUTCFullYear() * 12 + source.getUTCMonth() + delta;\n const targetYear = Math.floor(totalMonths / 12);\n const targetMonth = totalMonths - targetYear * 12;\n const targetDay = Math.min(\n source.getUTCDate(),\n Timestamp.getLastDayOfUtcMonth(targetYear, targetMonth),\n );\n\n return this.clone(\n Timestamp.createUtcCalendarValue(\n this.value,\n targetYear,\n targetMonth,\n targetDay,\n ),\n );\n }\n\n public addYears(years: number | NumberValueObject): Timestamp {\n const delta = years.valueOf();\n Timestamp.ensureCalendarDelta(delta);\n\n const source = new Date(Math.floor(this.value));\n const targetYear = source.getUTCFullYear() + delta;\n const targetMonth = source.getUTCMonth();\n const targetDay = Math.min(\n source.getUTCDate(),\n Timestamp.getLastDayOfUtcMonth(targetYear, targetMonth),\n );\n\n return this.clone(\n Timestamp.createUtcCalendarValue(\n this.value,\n targetYear,\n targetMonth,\n targetDay,\n ),\n );\n }\n\n public addDuration(duration: Duration): Timestamp {\n const value = this.value + duration.valueOf();\n\n return this.clone(value);\n }\n\n public isSameDay(other: Timestamp): boolean {\n return this.getCalendarDay().isEqual(other.getCalendarDay());\n }\n\n public isSameMonth(other: Timestamp): boolean {\n return this.getMonthOfYear().isEqual(other.getMonthOfYear());\n }\n\n public isSameYear(other: Timestamp): boolean {\n return this.getYear().isEqual(other.getYear());\n }\n\n public getCalendarDay(): CalendarDay {\n return new CalendarDay(this);\n }\n\n public getDay(): Day {\n return new Day(this.toDate().getUTCDate());\n }\n\n public getMonth(): Month {\n return new Month(this.toDate().getUTCMonth() + 1);\n }\n\n public getYear(): Year {\n return new Year(this.toDate().getUTCFullYear());\n }\n\n public getHours(): number {\n return this.toDate().getUTCHours();\n }\n\n public getMinutes(): number {\n return this.toDate().getUTCMinutes();\n }\n\n public getSeconds(): number {\n return this.toDate().getUTCSeconds();\n }\n\n public getMilliseconds(): number {\n return this.toDate().getUTCMilliseconds();\n }\n\n public getDayOfWeek(): number {\n return this.toDate().getUTCDay();\n }\n\n public getMonthOfYear(): MonthOfYear {\n return new MonthOfYear(this.getMonth(), this.getYear());\n }\n}\n","import { InvalidPositiveNumberError } from '../errors/InvalidPositiveNumberError';\nimport { assert } from '../patterns/Assert';\nimport { NullObject } from './NullObject';\nimport { NumberValueObject } from './NumberValueObject';\n\nexport class PositiveNumber extends NumberValueObject {\n constructor(value: number | NumberValueObject) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n this.ensureIsPositive(this.value);\n }\n\n private ensureIsPositive(value: number): void {\n assert(value >= 0, new InvalidPositiveNumberError());\n }\n}\n","import { NumberValueObject } from '../NumberValueObject';\n\nexport class Duration extends NumberValueObject {\n private static readonly MILLISECOND_FACTOR = 1000;\n private static readonly SECOND_UNITS = {\n DAYS: 24 * 60 * 60,\n HOURS: 60 * 60,\n MINUTES: 60,\n MONTHS: 30 * 24 * 60 * 60,\n SECONDS: 1,\n WEEKS: 7 * 24 * 60 * 60,\n YEARS: 365 * 24 * 60 * 60,\n };\n\n private static readonly millisecondFactors = {\n DAYS: new NumberValueObject(\n this.SECOND_UNITS.DAYS * this.MILLISECOND_FACTOR,\n ),\n HOURS: new NumberValueObject(\n this.SECOND_UNITS.HOURS * this.MILLISECOND_FACTOR,\n ),\n MINUTES: new NumberValueObject(\n this.SECOND_UNITS.MINUTES * this.MILLISECOND_FACTOR,\n ),\n MONTHS: new NumberValueObject(\n this.SECOND_UNITS.MONTHS * this.MILLISECOND_FACTOR,\n ),\n SECONDS: new NumberValueObject(\n this.SECOND_UNITS.SECONDS * this.MILLISECOND_FACTOR,\n ),\n WEEKS: new NumberValueObject(\n this.SECOND_UNITS.WEEKS * this.MILLISECOND_FACTOR,\n ),\n YEARS: new NumberValueObject(\n this.SECOND_UNITS.YEARS * this.MILLISECOND_FACTOR,\n ),\n };\n\n public static fromDays(days: number | NumberValueObject): Duration {\n return new Duration(\n new NumberValueObject(days.valueOf()).multiply(\n this.millisecondFactors.DAYS,\n ),\n );\n }\n\n public static fromHours(hours: number | NumberValueObject): Duration {\n return new Duration(\n new NumberValueObject(hours.valueOf()).multiply(\n this.millisecondFactors.HOURS,\n ),\n );\n }\n\n public static fromMinutes(minutes: number | NumberValueObject): Duration {\n return new Duration(\n new NumberValueObject(minutes.valueOf()).multiply(\n this.millisecondFactors.MINUTES,\n ),\n );\n }\n\n public static fromSeconds(seconds: number | NumberValueObject): Duration {\n return new Duration(\n new NumberValueObject(seconds.valueOf()).multiply(\n this.millisecondFactors.SECONDS,\n ),\n );\n }\n\n public static fromMilliseconds(\n milliseconds: number | NumberValueObject,\n ): Duration {\n return new Duration(new NumberValueObject(milliseconds.valueOf()));\n }\n\n constructor(milliseconds: NumberValueObject | Duration) {\n super(milliseconds.valueOf());\n }\n\n public getTotalDays(): NumberValueObject {\n return new Duration(this).divide(Duration.millisecondFactors.DAYS);\n }\n\n public getTotalHours(): NumberValueObject {\n return new Duration(this).divide(Duration.millisecondFactors.HOURS);\n }\n\n public getTotalMinutes(): NumberValueObject {\n return new Duration(this).divide(Duration.millisecondFactors.MINUTES);\n }\n\n public getTotalSeconds(): NumberValueObject {\n return new Duration(this).divide(Duration.millisecondFactors.SECONDS);\n }\n\n public getTotalMilliseconds(): NumberValueObject {\n return new NumberValueObject(this.valueOf());\n }\n\n public getDays(): NumberValueObject {\n return new NumberValueObject(\n Math.floor(\n new Duration(this).divide(Duration.millisecondFactors.DAYS).valueOf(),\n ),\n );\n }\n\n public getHours(): NumberValueObject {\n return new NumberValueObject(\n Math.floor(\n new Duration(this).divide(Duration.millisecondFactors.HOURS).valueOf(),\n ) % 24,\n );\n }\n\n public getMinutes(): NumberValueObject {\n return new NumberValueObject(\n Math.floor(\n new Duration(this)\n .divide(Duration.millisecondFactors.MINUTES)\n .valueOf(),\n ) % Duration.SECOND_UNITS.MINUTES,\n );\n }\n\n public getSeconds(): NumberValueObject {\n return new NumberValueObject(\n Math.floor(\n new Duration(this)\n .divide(Duration.millisecondFactors.SECONDS)\n .valueOf(),\n ) % Duration.SECOND_UNITS.MINUTES,\n );\n }\n\n public getMilliseconds(): NumberValueObject {\n return new NumberValueObject(\n Math.floor(new Duration(this).valueOf()) % Duration.MILLISECOND_FACTOR,\n );\n }\n}\n","import { InvalidTimestampIntervalError } from '../../errors/InvalidTimestampIntervalError';\nimport { PrimitiveOf } from '../../interfaces/PrimitiveOf';\nimport { assert } from '../../patterns/Assert';\nimport { PositiveNumber } from '../PositiveNumber';\nimport { ValueObject } from '../ValueObject';\nimport { CalendarDay } from './CalendarDay';\nimport { DayOfWeek } from './DayOfWeek';\nimport { Duration } from './Duration';\nimport { Timestamp } from './Timestamp';\n\nexport class TimestampInterval extends ValueObject<string> {\n public static fromPrimitives(\n primitives: PrimitiveOf<TimestampInterval>,\n ): TimestampInterval {\n return new TimestampInterval(\n new Timestamp(primitives.start),\n new Timestamp(primitives.end),\n );\n }\n\n constructor(\n private readonly start: Timestamp,\n private readonly end: Timestamp,\n ) {\n super(`${start.valueOf()}-${end.valueOf()}`);\n\n assert(\n start.isBeforeOrEqual(end),\n new InvalidTimestampIntervalError(start, end),\n );\n }\n\n public toPrimitives() {\n return {\n end: this.end.valueOf(),\n start: this.start.valueOf(),\n };\n }\n\n public getStart(): Timestamp {\n return this.start;\n }\n\n public getEnd(): Timestamp {\n return this.end;\n }\n\n public getDuration(): Duration {\n return new Duration(\n new PositiveNumber(this.end.valueOf() - this.start.valueOf()),\n );\n }\n\n public getTotalDaysOfWeek(dayOfWeek: DayOfWeek): number {\n const oneDayInMilliseconds = 24 * 60 * 60 * 1000;\n const daysToCheck: number = Math.trunc(\n this.getDuration().valueOf() / oneDayInMilliseconds,\n );\n\n let count = 0;\n\n for (let daysChecked = 0; daysChecked <= daysToCheck; daysChecked++) {\n const iteratorDay = new Timestamp(this.start).addDays(daysChecked);\n\n if (iteratorDay.getDayOfWeek() === dayOfWeek.toNumber()) {\n count++;\n }\n }\n\n return count;\n }\n\n public getDaysBetweenInterval(): CalendarDay[] {\n const days: CalendarDay[] = [];\n\n let iteratorTimestamp = new Timestamp(this.getStart());\n const endTimestamp = new Timestamp(this.getEnd());\n\n while (iteratorTimestamp.isBeforeOrEqual(endTimestamp)) {\n days.push(new CalendarDay(iteratorTimestamp));\n iteratorTimestamp = iteratorTimestamp.addDays(1);\n }\n\n return days;\n }\n\n public getOverlappingInterval(\n searchInterval: TimestampInterval,\n ): TimestampInterval | null {\n const start = this.start.isAfter(searchInterval.getStart())\n ? this.start\n : searchInterval.getStart();\n const end = this.end.isBefore(searchInterval.getEnd())\n ? this.end\n : searchInterval.getEnd();\n\n if (start.isAfterOrEqual(end)) {\n return null;\n }\n\n return new TimestampInterval(start, end);\n }\n\n public includes(timestamp: Timestamp): boolean {\n return (\n timestamp.isAfterOrEqual(this.start) &&\n timestamp.isBeforeOrEqual(this.end)\n );\n }\n}\n","import { ValueObject } from '../ValueObject';\nimport { Month } from './Month';\nimport { Timestamp } from './Timestamp';\nimport { TimestampInterval } from './TimestampInterval';\nimport { Year } from './Year';\n\nexport class MonthOfYear extends ValueObject<string> {\n private readonly month: Month;\n private readonly year: Year;\n\n public static fromTimestamp(timestamp: Timestamp): MonthOfYear {\n return new MonthOfYear(timestamp.getMonth(), timestamp.getYear());\n }\n\n public static fromString(value: string): MonthOfYear {\n const [year, month] = value.split('/').map(Number);\n\n return new MonthOfYear(month, year);\n }\n\n constructor(month: number | Month, year: number | Year) {\n super(\n year.valueOf().toString() +\n '/' +\n month.valueOf().toString().padStart(2, '0'),\n );\n this.month = new Month(month.valueOf());\n this.year = new Year(year.valueOf());\n }\n\n public getMonth(): Month {\n return new Month(this.month.valueOf());\n }\n\n public getYear(): Year {\n return new Year(this.year);\n }\n\n public getNumberOfDays(): number {\n return new Date(this.year.valueOf(), this.month.valueOf(), 0).getDate();\n }\n\n public getTimestampInterval(): TimestampInterval {\n const firstMonthDay = '01';\n const month = this.month.valueOf().toString().padStart(2, '0');\n const lastDay = this.getNumberOfDays().toString();\n const startDate = new Timestamp(`${this.year}-${month}-${firstMonthDay}`);\n const endDate = new Timestamp(`${this.year}-${month}-${lastDay}`);\n\n return new TimestampInterval(startDate, endDate);\n }\n}\n","import { InvalidDayError } from '../../errors/InvalidDayError';\nimport { InvalidDayFormatError } from '../../errors/InvalidDayFormatError';\nimport { assert } from '../../patterns/Assert';\nimport { ValueObject } from '../ValueObject';\nimport { Day } from './Day';\nimport { DayOfWeek } from './DayOfWeek';\nimport { Month } from './Month';\nimport { MonthOfYear } from './MonthOfYear';\nimport { Timestamp } from './Timestamp';\n\nexport class CalendarDay extends ValueObject<string> {\n private readonly year: number;\n private readonly month: number;\n private readonly day: number;\n\n private static ensureIsValidString(value: string): void {\n assert(\n value.match(/^\\d{4}-\\d{1,2}-\\d{1,2}$/),\n new InvalidDayFormatError(value),\n );\n }\n\n private static generateStringValue(timestamp: Timestamp): string {\n const paddedMonth = timestamp.getMonth().toString().padStart(2, '0');\n const paddedDay = timestamp.getDay().toString().padStart(2, '0');\n\n return `${timestamp.getYear().toString()}-${paddedMonth}-${paddedDay}`;\n }\n\n private static ensureIsValidDate(value: Date | number | Timestamp): void {\n assert(Number.isFinite(value.valueOf()), new InvalidDayError(value));\n }\n\n private static timestampFromString(value: string): Timestamp {\n CalendarDay.ensureIsValidString(value);\n\n const [year, month, day] = value.split('-').map(Number);\n const date = new Date(0);\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCFullYear(year, month - 1, day);\n\n assert(\n date.getUTCFullYear() === year &&\n date.getUTCMonth() === month - 1 &&\n date.getUTCDate() === day,\n new InvalidDayError(value),\n );\n\n return new Timestamp(date);\n }\n\n private static timestampFromValue(\n value: string | Date | number | Timestamp,\n ): Timestamp {\n if (typeof value === 'string') {\n return CalendarDay.timestampFromString(value);\n }\n\n CalendarDay.ensureIsValidDate(value);\n\n return new Timestamp(value);\n }\n\n constructor(value?: string | Date | number | Timestamp) {\n let timestamp: Timestamp;\n\n if (value !== undefined) {\n timestamp = CalendarDay.timestampFromValue(value);\n } else {\n timestamp = new Timestamp();\n }\n\n super(CalendarDay.generateStringValue(timestamp));\n\n this.year = timestamp.getYear().valueOf();\n this.month = timestamp.getMonth().getIndex() + 1;\n this.day = timestamp.getDay().valueOf();\n }\n\n public isAfter(date: CalendarDay): boolean {\n return this.valueOf() > date.valueOf();\n }\n\n public isBefore(date: CalendarDay): boolean {\n return this.valueOf() < date.valueOf();\n }\n\n public getYear(): number {\n return this.year;\n }\n\n public getMonth(): Month {\n return new Month(this.month);\n }\n\n public getMonthOfYear(): MonthOfYear {\n return new MonthOfYear(this.month, this.year);\n }\n\n public getDay(): Day {\n return new Day(this.day);\n }\n\n public getDayOfWeek(): DayOfWeek {\n return DayOfWeek.fromNumber(this.toTimestamp().getDayOfWeek());\n }\n\n public toTimestamp(): Timestamp {\n const date = new Date(0);\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCFullYear(this.year, this.month - 1, this.day);\n\n return new Timestamp(date);\n }\n}\n","import { InvalidHourError } from '../../errors/InvalidHourError';\nimport { InvalidMinutesError } from '../../errors/InvalidMinutesError';\nimport { assert } from '../../patterns/Assert';\nimport { StringValueObject } from '../StringValueObject';\n\nexport class Hour extends StringValueObject {\n private readonly minutes: string;\n private readonly hours: string;\n\n private static addTrailZero(value: number): string {\n return value < 10 ? `0${value}` : value.toString();\n }\n\n private static normalizeMinutes(totalMinutes: number): number {\n const minutesPerDay = 24 * 60;\n\n return ((totalMinutes % minutesPerDay) + minutesPerDay) % minutesPerDay;\n }\n\n private static parseFromNumber(value: number, minutes: number): string[] {\n assert(\n Number.isInteger(value) && value >= 0 && value <= 23,\n new InvalidHourError(),\n );\n assert(\n Number.isInteger(minutes) && minutes >= 0 && minutes <= 59,\n new InvalidMinutesError(),\n );\n\n return [Hour.addTrailZero(value), Hour.addTrailZero(minutes)];\n }\n\n private static parseFromString(value: string): string[] {\n const parts = value.split(':');\n\n assert(parts.length === 2 && parts[1] !== '', new InvalidHourError());\n\n const [hours, minutes] = parts;\n\n assert(/^\\d{1,2}$/.test(hours), new InvalidHourError());\n assert(/^\\d{1,2}$/.test(minutes), new InvalidMinutesError());\n\n const parsedHours = Number(hours);\n const parsedMinutes = Number(minutes);\n\n assert(parsedHours >= 0 && parsedHours <= 23, new InvalidHourError());\n assert(\n parsedMinutes >= 0 && parsedMinutes <= 59,\n new InvalidMinutesError(),\n );\n\n return [Hour.addTrailZero(parsedHours), Hour.addTrailZero(parsedMinutes)];\n }\n\n constructor(value: string);\n constructor(value: number, minutes?: number);\n constructor(value: string | number, minutes?: number) {\n const [parsedHours, parsedMinutes] =\n typeof value === 'number' && minutes !== undefined\n ? Hour.parseFromNumber(value, minutes)\n : Hour.parseFromString(value as string);\n\n super(`${parsedHours}:${parsedMinutes}`);\n this.hours = parsedHours;\n this.minutes = parsedMinutes;\n }\n\n public addMinutes(minutes: number): Hour {\n const currentMinutes = Number(this.hours) * 60 + Number(this.minutes);\n const normalizedMinutes = Hour.normalizeMinutes(currentMinutes + minutes);\n const newHour = Math.floor(normalizedMinutes / 60);\n const newMinutes = normalizedMinutes % 60;\n\n return new Hour(newHour, newMinutes);\n }\n\n public diffInMinutes(other: Hour): number {\n let endHour = Number(other.hours);\n\n if (\n other.hours < this.hours ||\n (other.hours === this.hours && other.minutes < this.minutes)\n ) {\n endHour += 24;\n }\n\n const totalMinutes =\n (endHour - Number(this.hours)) * 60 +\n (Number(other.minutes) - Number(this.minutes));\n\n return totalMinutes;\n }\n\n public getMinutes(): number {\n return Number(this.minutes);\n }\n\n public getHours(): number {\n return Number(this.hours);\n }\n\n public isGreaterThan(hour: Hour): boolean {\n if (this.hours === hour.hours) {\n return Number(this.minutes) > Number(hour.minutes);\n }\n\n return Number(this.hours) > Number(hour.hours);\n }\n\n public isLessThan(hour: Hour): boolean {\n if (this.hours === hour.hours) {\n return Number(this.minutes) < Number(hour.minutes);\n }\n\n return Number(this.hours) < Number(hour.hours);\n }\n}\n","import { InvalidColorError } from '../errors/InvalidColorError';\nimport { assert } from '../patterns/Assert';\nimport { NullObject } from './NullObject';\nimport { StringValueObject } from './StringValueObject';\nimport { ValueObject } from './ValueObject';\n\nexport class Color extends StringValueObject {\n public static readonly RED = new Color('#FF0000');\n public static readonly GREEN = new Color('#00FF00');\n public static readonly BLUE = new Color('#0000FF');\n public static readonly BLACK = new Color('#000000');\n public static readonly WHITE = new Color('#FFFFFF');\n public static readonly YELLOW = new Color('#FFFF00');\n public static readonly CYAN = new Color('#00FFFF');\n public static readonly MAGENTA = new Color('#FF00FF');\n public static readonly ORANGE = new Color('#FFA500');\n public static readonly PURPLE = new Color('#800080');\n public static readonly PINK = new Color('#FFC0CB');\n public static readonly BROWN = new Color('#A52A2A');\n\n constructor(value: string | StringValueObject) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n this.ensureIsValidColor();\n }\n\n private ensureIsValidColor(): void {\n const hexColorPattern = /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/;\n\n assert(hexColorPattern.test(this.value), new InvalidColorError(this.value));\n }\n\n public hasValue(other: unknown): boolean {\n const otherValue = other instanceof ValueObject ? other.valueOf() : other;\n\n return (\n typeof otherValue === 'string' &&\n this.value.toLowerCase() === otherValue.toLowerCase()\n );\n }\n}\n","import { InvalidEmailError } from '../errors/InvalidEmailError';\nimport { assert } from '../patterns/Assert';\nimport { NullObject } from './NullObject';\nimport { StringValueObject } from './StringValueObject';\n\nexport class Email extends StringValueObject {\n private static readonly PATTERN =\n /^[\\w+\\-.!#$%&'*/=?^`{|}~]+@(?:[\\w-]+\\.)+(?:[a-z]{2,63}|xn--[a-z0-9](?:[a-z0-9-]{0,57}[a-z0-9])?)$/i;\n\n constructor(value: string | StringValueObject) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n this.ensureIsValidEmail(this.value);\n }\n\n private ensureIsValidEmail(value: string): void {\n assert(Email.PATTERN.test(value), new InvalidEmailError(value));\n }\n}\n","import { InvalidPasswordError } from '../errors/InvalidPasswordError';\nimport { assert } from '../patterns';\nimport { NullObject } from './NullObject';\nimport { StringValueObject } from './StringValueObject';\n\nexport class Password extends StringValueObject {\n private static readonly MAX_LENGTH = 256;\n private static readonly MIN_LENGTH = 12;\n\n constructor(value: string | StringValueObject) {\n super(value);\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n assert(\n this.isValidPassword(),\n new InvalidPasswordError(Password.MIN_LENGTH, Password.MAX_LENGTH),\n );\n }\n\n private isValidPassword(): boolean {\n return (\n this.value.length >= Password.MIN_LENGTH &&\n this.value.length <= Password.MAX_LENGTH &&\n /[A-Z]/.test(this.value) &&\n /[a-z]/.test(this.value) &&\n /[0-9]/.test(this.value) &&\n /[^A-Za-z0-9]/.test(this.value)\n );\n }\n}\n","interface ComparableItem {\n isEqual(item: unknown): boolean;\n}\nexport class UniqueObjectArray<\n T extends ComparableItem,\n> implements Iterable<T> {\n private items: T[] = [];\n\n public static fromArray<T extends ComparableItem>(\n array: T[],\n ): UniqueObjectArray<T> {\n const uniqueArray = new UniqueObjectArray<T>();\n for (const item of array) {\n uniqueArray.push(item);\n }\n\n return uniqueArray;\n }\n\n public includes(item: T): boolean {\n return this.items.some((one) => one.isEqual(item));\n }\n\n public push(item: T): boolean {\n if (!this.includes(item)) {\n this.items.push(item);\n\n return true;\n }\n\n return false;\n }\n\n public remove(item: T): boolean {\n const index = this.items.findIndex((one) => one.isEqual(item));\n\n if (index !== -1) {\n this.items.splice(index, 1);\n\n return true;\n }\n\n return false;\n }\n\n public [Symbol.iterator](): Iterator<T> {\n return this.items[Symbol.iterator]();\n }\n\n public length(): number {\n return this.items.length;\n }\n\n public toArray(): T[] {\n return Array.from(this.items);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["Buffer","Buffer","Buffer","parse","uuidV4","Buffer","uuidV4","Buffer"],"sources":["../src/errors/BaseError.ts","../src/errors/DomainError.ts","../src/errors/InvalidColorError.ts","../src/errors/InvalidDayError.ts","../src/errors/InvalidDayFormatError.ts","../src/errors/InvalidHourError.ts","../src/errors/InvalidEmailError.ts","../src/errors/InvalidFormatError.ts","../src/errors/InvalidHashError.ts","../src/errors/InvalidIntegerError.ts","../src/errors/InvalidLatitudeError.ts","../src/errors/InvalidLongitudeError.ts","../src/errors/InvalidMinutesError.ts","../src/errors/InvalidNumberError.ts","../src/errors/InvalidPasswordError.ts","../src/errors/InvalidPositiveNumberError.ts","../src/errors/InvalidStringLengthError.ts","../src/errors/InvalidTimestampIntervalError.ts","../src/errors/InvalidLengthError.ts","../src/errors/NullObjectCreationDisabledError.ts","../src/errors/NullObjectError.ts","../src/errors/ValueNotInEnumError.ts","../src/patterns/Assert.ts","../src/value-objects/NullObject.ts","../src/value-objects/ValueObject.ts","../src/value-objects/StringValueObject.ts","../src/value-objects/NumberValueObject.ts","../src/value-objects/coordinates/Latitude.ts","../src/value-objects/coordinates/Longitude.ts","../src/value-objects/coordinates/Coordinates.ts","../src/value-objects/hashes/Hash.ts","../src/value-objects/hashes/MD5Hash.ts","../src/value-objects/hashes/SHA256Hash.ts","../src/value-objects/hashes/SHA512Hash.ts","../src/value-objects/ids/ShortId.ts","../src/value-objects/ids/UUID.ts","../src/value-objects/media/Media.ts","../src/value-objects/Integer.ts","../src/value-objects/time/Day.ts","../src/value-objects/Enum.ts","../src/value-objects/time/DayOfWeek.ts","../src/value-objects/time/Month.ts","../src/value-objects/time/Year.ts","../src/value-objects/time/Timestamp.ts","../src/value-objects/PositiveNumber.ts","../src/value-objects/time/Duration.ts","../src/value-objects/time/TimestampInterval.ts","../src/value-objects/time/MonthOfYear.ts","../src/value-objects/time/CalendarDay.ts","../src/value-objects/time/Hour.ts","../src/value-objects/Color.ts","../src/value-objects/Email.ts","../src/value-objects/Password.ts","../src/value-objects/UniqueObjectArray.ts"],"sourcesContent":["export class BaseError extends Error {\n private readonly isBaseError = true;\n public static isBaseError(error: unknown): boolean {\n return !!(error as BaseError).isBaseError;\n }\n\n constructor(message: string, prototype: object = BaseError.prototype) {\n super(message);\n this.name = this.constructor.name;\n Object.setPrototypeOf(this, prototype);\n }\n\n public toString(): string {\n return `[${this.name}]: ${this.message}`;\n }\n\n public getStack(): string {\n return this.stack || '';\n }\n}\n","import { BaseError } from './BaseError';\n\nexport class DomainError extends BaseError {\n protected readonly isDomainError = true;\n public static isDomainError(error: unknown): boolean {\n return !!(error as DomainError).isDomainError;\n }\n\n constructor(message: string) {\n super(message, new.target.prototype);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidColorError extends DomainError {\n constructor(value: string) {\n super(`Invalid color value: ${value}. Must be a valid hex color code.`);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidDayError extends DomainError {\n constructor(invalidDay: unknown) {\n super(`Invalid day ${String(invalidDay)}`);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidDayFormatError extends DomainError {\n constructor(invalidDate: string) {\n super(`Invalid day ${invalidDate}. Expected YYYY-MM-DD. `);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidHourError extends DomainError {\n constructor() {\n super(`Invalid hour`);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidEmailError extends DomainError {\n constructor(value: string) {\n super(`Invalid email format: ${value}`);\n }\n}\n","import { DomainError } from '../errors/DomainError';\n\nexport class InvalidFormatError extends DomainError {\n constructor(value?: string) {\n super(`Invalid Format Error with value: '${value}'`);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidHashError extends DomainError {\n constructor(type: string, value: string) {\n super(`Invalid ${type} hash: ${value}`);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidIntegerError extends DomainError {\n constructor(value: number) {\n super(`Invalid integer value ${value}`);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidLatitudeError extends DomainError {\n constructor(value: number) {\n super(`Invalid latitude: ${value}. Must be between -90 and 90`);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidLongitudeError extends DomainError {\n constructor(value: number) {\n super(`Invalid longitude: ${value}. Must be between -180 and 180`);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidMinutesError extends DomainError {\n constructor() {\n super(`Invalid minutes`);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidNumberError extends DomainError {\n constructor(invalidNumber: unknown) {\n super(`Invalid number ${String(invalidNumber)}`);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidPasswordError extends DomainError {\n constructor(minLength: number, maxLength: number) {\n super(\n `Password must be between ${minLength} and ${maxLength} characters long and include at least one uppercase letter, one lowercase letter, one number and one symbol.`,\n );\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidPositiveNumberError extends DomainError {\n constructor() {\n super(`Value must be greater or equal than 0`);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidStringLengthError extends DomainError {\n constructor(value: string, length: number) {\n super(\n `String length '${value.length}' exceeds the expected length: '${length}'`,\n );\n }\n}\n","import { Timestamp } from '../value-objects/time/Timestamp';\nimport { DomainError } from './DomainError';\n\nexport class InvalidTimestampIntervalError extends DomainError {\n constructor(start: Timestamp, end: Timestamp) {\n super(\n `Invalid TimestampInterval, start (${start.valueOf()}) must be before the end (${end.valueOf()})`,\n );\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidLengthError extends DomainError {\n constructor(value: unknown, length: number) {\n super(\n `Invalid Length Error with value: '${value}' expected length: '${length}'`,\n );\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class NullObjectCreationDisabledError extends DomainError {\n constructor(valueObjectName: string) {\n super(\n `[NullObjectCreationDisabledError]: ${valueObjectName} received null or undefined while automatic NullObject creation is disabled`,\n );\n Object.setPrototypeOf(this, NullObjectCreationDisabledError.prototype);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class NullObjectError extends DomainError {\n constructor(message: string) {\n super(`[NullObjectError]: ${message} is NullObject`);\n Object.setPrototypeOf(this, NullObjectError.prototype);\n }\n}\n","import { DomainError } from './DomainError';\n\nexport class ValueNotInEnumError extends DomainError {\n constructor(value: unknown, enumerate: unknown) {\n super(\n `${Object.values(enumerate as object).join(',')} enum does not include value: ${value}`,\n );\n }\n}\n","import { BaseError } from '../errors/BaseError';\nimport { DomainError } from '../errors/DomainError';\n\nexport type Errors = Error | BaseError | DomainError | string;\n\nexport function assert(\n condition: boolean | unknown | undefined,\n error: string | Errors,\n): asserts condition {\n if (condition) {\n return;\n }\n\n throw typeof error === 'string' ? new DomainError(error) : error;\n}\n","import { NullObjectError } from '../errors/NullObjectError';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor<T> = abstract new (...args: any[]) => T;\ntype NullableObject = Nullable & Record<string, unknown>;\ninterface Nullable {\n isNullObject: boolean;\n valueOf(): undefined;\n}\n\nexport abstract class NullObject {\n private static setFakeProps<T>(\n nullObject: NullableObject,\n klass: Constructor<T>,\n ): void {\n const visited = new Set<string>();\n let proto = klass.prototype;\n\n while (proto && proto !== Object.prototype) {\n const props = Object.getOwnPropertyNames(proto);\n\n for (const prop of props) {\n if (\n prop === 'constructor' ||\n prop === 'isNullObject' ||\n prop === 'valueOf' ||\n visited.has(prop)\n ) {\n continue;\n }\n\n visited.add(prop);\n // eslint-disable-next-line no-param-reassign\n nullObject[prop] = () => {\n throw new NullObjectError(klass.name);\n };\n }\n\n proto = Object.getPrototypeOf(proto);\n }\n\n Object.setPrototypeOf(nullObject, NullObject.prototype);\n }\n\n public static new<T>(klass: Constructor<T>): T {\n const nullObject: NullableObject = {\n isNullObject: true,\n valueOf: () => {\n return undefined;\n },\n };\n NullObject.setFakeProps(nullObject, klass);\n\n return nullObject as T;\n }\n\n public static isNullObject(nullable: unknown): boolean {\n return !!(nullable as NullableObject)?.isNullObject;\n }\n}\n","import { NullObjectCreationDisabledError } from '../errors';\nimport { Primitive, Nullish } from '../types';\nimport { NullObject } from './NullObject';\n\nexport abstract class ValueObject<T extends Primitive = Primitive> {\n private static nullObjectCreationEnabled = true;\n\n protected readonly value!: T;\n\n public static disableNullObjectCreation(): void {\n ValueObject.nullObjectCreationEnabled = false;\n }\n\n public static enableNullObjectCreation(): void {\n ValueObject.nullObjectCreationEnabled = true;\n }\n\n constructor(value: T | Nullish) {\n if (this.isNullish(value)) {\n if (ValueObject.nullObjectCreationEnabled === false) {\n throw new NullObjectCreationDisabledError(new.target.name);\n }\n\n return NullObject.new(new.target);\n }\n Object.defineProperty(this, 'value', {\n value,\n writable: false,\n configurable: false,\n enumerable: true,\n });\n }\n\n private isNullish(value: T | Nullish): value is null | undefined {\n return value === null || value === undefined;\n }\n\n protected clone(value: T): this {\n return new (this.constructor as new (value: Primitive) => this)(\n this.isNullish(value) ? this.value : value,\n ) as this;\n }\n\n public hasValue(other: unknown): boolean {\n const otherValue = other instanceof ValueObject ? other.valueOf() : other;\n\n return this.value === otherValue;\n }\n\n public isEqual(other: unknown): boolean {\n return (\n other instanceof ValueObject &&\n this.constructor === other.constructor &&\n this.hasValue(other)\n );\n }\n\n public isNotEqual(other: unknown): boolean {\n return this.isEqual(other) === false;\n }\n\n public valueOf(): T {\n return this.value;\n }\n\n public toString(): string {\n return this.value!.toString();\n }\n}\n","import { InvalidStringLengthError } from '../errors/InvalidStringLengthError';\nimport { assert } from '../patterns/Assert';\nimport { NullObject } from './NullObject';\nimport { ValueObject } from './ValueObject';\n\nexport class StringValueObject extends ValueObject<string> {\n constructor(value: string | StringValueObject, maxLength: number = 512) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n this.ensureDoesNotExceedsMaxLength(maxLength);\n }\n\n private ensureDoesNotExceedsMaxLength(maxLength: number): void {\n assert(\n this.value.length <= maxLength,\n new InvalidStringLengthError(this.value, maxLength),\n );\n }\n\n public isEmpty(): boolean {\n return !this.value;\n }\n}\n","import { InvalidNumberError } from '../errors/InvalidNumberError';\nimport { assert } from '../patterns/Assert';\nimport { NullObject } from './NullObject';\nimport { ValueObject } from './ValueObject';\n\nexport class NumberValueObject extends ValueObject<number> {\n constructor(value: number | NumberValueObject) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n assert(this.isValidNumber(this.value), new InvalidNumberError(this.value));\n }\n\n private isValidNumber(value: number): boolean {\n return Number.isFinite(value.valueOf());\n }\n\n public isZero(): boolean {\n return this.value === 0;\n }\n\n public isGreaterThan(other: number | NumberValueObject): boolean {\n return this.value > other.valueOf();\n }\n\n public isGreaterOrEqualThan(other: number | NumberValueObject): boolean {\n return this.value >= other.valueOf();\n }\n\n public isLessThan(other: number | NumberValueObject): boolean {\n return this.value < other.valueOf();\n }\n\n public isLessOrEqualThan(other: number | NumberValueObject): boolean {\n return this.value <= other.valueOf();\n }\n\n public add(other: number | NumberValueObject): NumberValueObject {\n return this.clone(this.value + other.valueOf());\n }\n\n public subtract(other: number | NumberValueObject): NumberValueObject {\n return this.clone(this.value - other.valueOf());\n }\n\n public multiply(other: number | NumberValueObject): NumberValueObject {\n return this.clone(this.value * other.valueOf());\n }\n\n public divide(other: number | NumberValueObject): NumberValueObject {\n return this.clone(this.value / other.valueOf());\n }\n}\n","import { InvalidLatitudeError } from '../../errors/InvalidLatitudeError';\nimport { assert } from '../../patterns/Assert';\nimport { NumberValueObject } from '../NumberValueObject';\n\nexport class Latitude extends NumberValueObject {\n private static MIN_VALUE = new NumberValueObject(-90);\n private static MAX_VALUE = new NumberValueObject(90);\n\n private static isValid(value: number | NumberValueObject): boolean {\n const primitive = value.valueOf();\n\n return (\n Number.isFinite(primitive) &&\n primitive >= this.MIN_VALUE.valueOf() &&\n primitive <= this.MAX_VALUE.valueOf()\n );\n }\n\n constructor(value: number | NumberValueObject) {\n assert(Latitude.isValid(value), new InvalidLatitudeError(value.valueOf()));\n super(value.valueOf());\n }\n}\n","import { InvalidLongitudeError } from '../../errors/InvalidLongitudeError';\nimport { assert } from '../../patterns/Assert';\nimport { NumberValueObject } from '../NumberValueObject';\n\nexport class Longitude extends NumberValueObject {\n private static MIN_VALUE = new NumberValueObject(-180);\n private static MAX_VALUE = new NumberValueObject(180);\n\n private static isValid(value: number | NumberValueObject): boolean {\n const primitive = value.valueOf();\n\n return (\n Number.isFinite(primitive) &&\n primitive >= this.MIN_VALUE.valueOf() &&\n primitive <= this.MAX_VALUE.valueOf()\n );\n }\n\n constructor(value: number | NumberValueObject) {\n assert(\n Longitude.isValid(value),\n new InvalidLongitudeError(value.valueOf()),\n );\n super(value.valueOf());\n }\n}\n","import { StringValueObject } from '../StringValueObject';\nimport { Latitude } from './Latitude';\nimport { Longitude } from './Longitude';\n\nexport class Coordinates extends StringValueObject {\n private latitude: Latitude;\n private longitude: Longitude;\n\n public static fromString(value: string): Coordinates {\n const latitude = parseFloat(value.split(',')[0]);\n const longitude = parseFloat(value.split(',')[1]);\n\n return new Coordinates(latitude, longitude);\n }\n\n constructor(latitude: number | Latitude, longitude: number | Longitude) {\n super(latitude?.valueOf() + ',' + longitude?.valueOf());\n\n this.latitude = new Latitude(latitude.valueOf());\n this.longitude = new Longitude(longitude.valueOf());\n }\n\n public getLatitude(): Latitude {\n return this.latitude;\n }\n\n public getLongitude(): Longitude {\n return this.longitude;\n }\n}\n","import { Buffer } from 'buffer';\n\nimport { NullObject } from '../NullObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { ValueObject } from '../ValueObject';\n\nexport abstract class Hash extends ValueObject<string> {\n constructor(source: string | StringValueObject) {\n super(source?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n }\n\n public toBase64(): StringValueObject {\n return new StringValueObject(\n Buffer.from(this.valueOf(), 'hex').toString('base64'),\n );\n }\n}\n","import { InvalidHashError } from '../../errors/InvalidHashError';\nimport { assert } from '../../patterns';\nimport { NullObject } from '../NullObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { Hash } from './Hash';\n\nexport class MD5Hash extends Hash {\n public static isValid(hash: string | StringValueObject): boolean {\n return !!hash.valueOf().match(/^[a-f0-9]{32}$/);\n }\n\n constructor(source: string | StringValueObject) {\n super(source?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n assert(\n MD5Hash.isValid(this.valueOf()),\n new InvalidHashError('MD5', source.valueOf()),\n );\n }\n}\n","import { Buffer } from 'buffer';\n\nimport { InvalidHashError } from '../../errors/InvalidHashError';\nimport { assert } from '../../patterns';\nimport { NullObject } from '../NullObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { ValueObject } from '../ValueObject';\n\nexport class SHA256Hash extends ValueObject<string> {\n public static isValid(hash: string | StringValueObject): boolean {\n return !!hash.valueOf().match(/^[a-f0-9]{64}$/i);\n }\n\n constructor(source: string | StringValueObject) {\n super(source?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n assert(\n SHA256Hash.isValid(this.valueOf()),\n new InvalidHashError('SHA256', source.valueOf()),\n );\n }\n\n public toBase64(): StringValueObject {\n return new StringValueObject(\n Buffer.from(this.valueOf(), 'hex').toString('base64'),\n );\n }\n}\n","import { Buffer } from 'buffer';\n\nimport { InvalidHashError } from '../../errors/InvalidHashError';\nimport { assert } from '../../patterns';\nimport { NullObject } from '../NullObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { ValueObject } from '../ValueObject';\n\nexport class SHA512Hash extends ValueObject<string> {\n public static isValid(hash: string | StringValueObject): boolean {\n return !!hash.valueOf().match(/^[a-f0-9]{128}$/i);\n }\n\n constructor(source: string | StringValueObject) {\n super(source?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n assert(\n SHA512Hash.isValid(this.valueOf()),\n new InvalidHashError('SHA512', source.valueOf()),\n );\n }\n\n public toBase64(): StringValueObject {\n return new StringValueObject(\n Buffer.from(this.valueOf(), 'hex').toString('base64'),\n );\n }\n}\n","import { Buffer } from 'buffer';\nimport { parse, v4 as uuidV4 } from 'uuid';\n\nimport { InvalidFormatError } from '../../errors/InvalidFormatError';\nimport { InvalidLengthError } from '../../errors/InvalidLengthError';\nimport { assert } from '../../patterns';\nimport { NullObject } from '../NullObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { ValueObject } from '../ValueObject';\n\nexport class ShortId extends ValueObject<string> {\n private static readonly LENGTH = 24;\n private static readonly PATTERN = new RegExp(`[a-zA-Z0-9]{${this.LENGTH}}$`);\n\n private static generateObjectIdHex(): string {\n const random = parse(uuidV4());\n const bytes = Buffer.alloc(12);\n bytes.writeUInt32BE(Math.floor(Date.now() / 1000), 0);\n // Keep eight fully random bytes, excluding the UUID version/variant bytes.\n bytes.set(random.subarray(0, 6), 4);\n bytes.set(random.subarray(9, 11), 10);\n\n return bytes.toString('hex');\n }\n\n public static generate(): ShortId {\n return new ShortId(ShortId.generateObjectIdHex());\n }\n\n constructor(value: string | StringValueObject) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n this.ensureIsShortId(this.value);\n }\n\n private ensureIsShortId(value: string): void {\n assert(\n value.length === ShortId.LENGTH,\n new InvalidLengthError(this.value, ShortId.LENGTH),\n );\n assert(ShortId.PATTERN.test(value), new InvalidFormatError(this.value));\n }\n}\n","import { v4 as uuidV4 } from 'uuid';\n\nimport { InvalidFormatError } from '../../errors/InvalidFormatError';\nimport { InvalidLengthError } from '../../errors/InvalidLengthError';\nimport { assert } from '../../patterns';\nimport { NullObject } from '../NullObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { ValueObject } from '../ValueObject';\n\nexport class UUID extends ValueObject<string> {\n private static readonly LENGTH = 36;\n private static readonly PATTERN =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n private static readonly SENTINEL_PATTERN =\n /^(?:00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;\n\n public static generate(): UUID {\n return new UUID(uuidV4());\n }\n\n constructor(value: string | StringValueObject) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n this.ensureIsUUID(this.value);\n }\n\n private ensureIsUUID(value: string): void {\n assert(\n value.length === UUID.LENGTH,\n new InvalidLengthError(this.value, UUID.LENGTH),\n );\n assert(\n UUID.PATTERN.test(value) || UUID.SENTINEL_PATTERN.test(value),\n new InvalidFormatError(this.value),\n );\n }\n}\n","import { Buffer } from 'buffer';\n\nimport { NullObject } from '../NullObject';\nimport { ValueObject } from '../ValueObject';\n\nexport class Media extends ValueObject<string> {\n private readonly buffer?: Buffer;\n\n constructor(value: string | Buffer) {\n super(value?.toString());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n this.buffer = Buffer.isBuffer(value) ? Buffer.from(value) : undefined;\n }\n\n public getBuffer(): Buffer {\n return this.buffer === undefined\n ? Buffer.from(this.value)\n : Buffer.from(this.buffer);\n }\n\n public getSize(): number {\n return this.getBuffer().length;\n }\n\n public getBase64(): string {\n return this.getBuffer().toString('base64');\n }\n\n public hasValue(other: unknown): boolean {\n if (other instanceof Media) {\n return this.getBuffer().equals(other.getBuffer());\n }\n\n if (Buffer.isBuffer(other)) {\n return this.getBuffer().equals(other);\n }\n\n return super.hasValue(other);\n }\n}\n","import { InvalidIntegerError } from '../errors/InvalidIntegerError';\nimport { assert } from '../patterns/Assert';\nimport { NullObject } from './NullObject';\nimport { NumberValueObject } from './NumberValueObject';\n\nexport class Integer extends NumberValueObject {\n constructor(value: number | NumberValueObject) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n this.ensureIsInteger();\n }\n\n private ensureIsInteger(): void {\n assert(\n this.value.valueOf() % 1 === 0,\n new InvalidIntegerError(this.value.valueOf()),\n );\n }\n}\n","import { InvalidDayError } from '../../errors/InvalidDayError';\nimport { assert } from '../../patterns/Assert';\nimport { Integer } from '../Integer';\nimport { NumberValueObject } from '../NumberValueObject';\n\nexport class Day extends Integer {\n constructor(value: number | NumberValueObject) {\n super(value.valueOf());\n\n this.ensureIsValidDay();\n }\n\n private ensureIsValidDay(): void {\n assert(this.isGreaterOrEqualThan(1), new InvalidDayError(this.value));\n assert(this.isLessOrEqualThan(31), new InvalidDayError(this.value));\n }\n}\n","import { ValueNotInEnumError } from '../errors/ValueNotInEnumError';\nimport { assert } from '../patterns/Assert';\nimport { Primitive } from '../types';\nimport { NullObject } from './NullObject';\nimport { ValueObject } from './ValueObject';\n\nexport abstract class Enum<\n T extends Primitive = Primitive,\n> extends ValueObject<T> {\n constructor(value: T) {\n super(value);\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n this.ensureIsValidValue();\n }\n\n public abstract getValues(): T[];\n\n private ensureIsValidValue(): void {\n const isValueInEnum = this.getValues().some((enumValue) =>\n this.hasValue(enumValue),\n );\n assert(\n isValueInEnum,\n new ValueNotInEnumError(this.valueOf(), this.getValues()),\n );\n }\n}\n","import { InvalidDayError } from '../../errors/InvalidDayError';\nimport { assert } from '../../patterns';\nimport { Enum } from '../Enum';\nimport { Timestamp } from './Timestamp';\n\nexport enum EDaysOfWeek {\n MONDAY = 'monday',\n TUESDAY = 'tuesday',\n WEDNESDAY = 'wednesday',\n THURSDAY = 'thursday',\n FRIDAY = 'friday',\n SATURDAY = 'saturday',\n SUNDAY = 'sunday',\n}\n\nexport const timeStampDayToDaysMap = {\n [EDaysOfWeek.FRIDAY]: 5,\n [EDaysOfWeek.MONDAY]: 1,\n [EDaysOfWeek.SATURDAY]: 6,\n [EDaysOfWeek.SUNDAY]: 0,\n [EDaysOfWeek.THURSDAY]: 4,\n [EDaysOfWeek.TUESDAY]: 2,\n [EDaysOfWeek.WEDNESDAY]: 3,\n};\n\nexport class DayOfWeek extends Enum {\n public static MONDAY = new DayOfWeek(EDaysOfWeek.MONDAY);\n public static TUESDAY = new DayOfWeek(EDaysOfWeek.TUESDAY);\n public static WEDNESDAY = new DayOfWeek(EDaysOfWeek.WEDNESDAY);\n public static THURSDAY = new DayOfWeek(EDaysOfWeek.THURSDAY);\n public static FRIDAY = new DayOfWeek(EDaysOfWeek.FRIDAY);\n public static SATURDAY = new DayOfWeek(EDaysOfWeek.SATURDAY);\n public static SUNDAY = new DayOfWeek(EDaysOfWeek.SUNDAY);\n\n public static fromNumber(day: number): DayOfWeek {\n const [eDay] =\n Object.entries(timeStampDayToDaysMap).find(\n ([, value]) => value === day,\n ) || [];\n\n assert(eDay, new InvalidDayError(eDay));\n\n return new DayOfWeek(eDay);\n }\n\n public static fromTimestamp(timestamp: Timestamp): DayOfWeek {\n const dayOfWeekNumber = timestamp.getDayOfWeek();\n\n return DayOfWeek.fromNumber(dayOfWeekNumber);\n }\n\n public getValues(): string[] {\n return Object.values(EDaysOfWeek);\n }\n\n public toNumber(): number {\n return timeStampDayToDaysMap[this.value as EDaysOfWeek];\n }\n}\n","import { Enum } from '../Enum';\n\nenum MonthEnum {\n JANUARY = 1,\n FEBRUARY = 2,\n MARCH = 3,\n APRIL = 4,\n MAY = 5,\n JUNE = 6,\n JULY = 7,\n AUGUST = 8,\n SEPTEMBER = 9,\n OCTOBER = 10,\n NOVEMBER = 11,\n DECEMBER = 12,\n}\n\nexport class Month extends Enum<number> {\n public static readonly JANUARY = new Month(MonthEnum.JANUARY);\n public static readonly FEBRUARY = new Month(MonthEnum.FEBRUARY);\n public static readonly MARCH = new Month(MonthEnum.MARCH);\n public static readonly APRIL = new Month(MonthEnum.APRIL);\n public static readonly MAY = new Month(MonthEnum.MAY);\n public static readonly JUNE = new Month(MonthEnum.JUNE);\n public static readonly JULY = new Month(MonthEnum.JULY);\n public static readonly AUGUST = new Month(MonthEnum.AUGUST);\n public static readonly SEPTEMBER = new Month(MonthEnum.SEPTEMBER);\n public static readonly OCTOBER = new Month(MonthEnum.OCTOBER);\n public static readonly NOVEMBER = new Month(MonthEnum.NOVEMBER);\n public static readonly DECEMBER = new Month(MonthEnum.DECEMBER);\n\n public getValues(): number[] {\n return Object.values(MonthEnum) as number[];\n }\n\n public getIndex(): number {\n return Number(this.valueOf()) - 1;\n }\n}\n","import { Integer } from '../Integer';\nimport { NullObject } from '../NullObject';\nimport { NumberValueObject } from '../NumberValueObject';\n\nexport class Year extends Integer {\n private static readonly YEAR_DAYS = 365;\n private static readonly LEAP_YEAR_DAYS = 366;\n\n constructor(value: number | NumberValueObject) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n }\n\n public isLeapYear(): boolean {\n return this.getNumberOfDays() === Year.LEAP_YEAR_DAYS;\n }\n\n public getNumberOfDays(): number {\n return (this.value % 4 === 0 && this.value % 100 !== 0) ||\n this.value % 400 === 0\n ? Year.LEAP_YEAR_DAYS\n : Year.YEAR_DAYS;\n }\n}\n","import { InvalidIntegerError } from '../../errors/InvalidIntegerError';\nimport { InvalidNumberError } from '../../errors/InvalidNumberError';\nimport { assert } from '../../patterns/Assert';\nimport { NumberValueObject } from '../NumberValueObject';\nimport { ValueObject } from '../ValueObject';\nimport { CalendarDay } from './CalendarDay';\nimport { Day } from './Day';\nimport { Duration } from './Duration';\nimport { Month } from './Month';\nimport { MonthOfYear } from './MonthOfYear';\nimport { Year } from './Year';\n\ntype TimestampValue = number | Date | Timestamp | string;\n\nexport class Timestamp extends ValueObject<number> {\n private static readonly FACTORS = {\n DAYS: 24 * 60 * 60 * 1000,\n HOURS: 60 * 60 * 1000,\n MINUTES: 60 * 1000,\n SECONDS: 1000,\n WEEKS: 7 * 24 * 60 * 60 * 1000,\n };\n\n private static valueMilliseconds(value?: TimestampValue): number {\n if (value instanceof Timestamp || value instanceof Date) {\n return value.valueOf();\n }\n\n if (typeof value === 'number') {\n return value;\n }\n\n if (typeof value === 'string') {\n return new Date(value).valueOf();\n }\n\n return Date.now().valueOf();\n }\n\n private static getLastDayOfUtcMonth(year: number, month: number): number {\n const normalizedYear = year + Math.floor(month / 12);\n const normalizedMonth = ((month % 12) + 12) % 12;\n const days = [\n 31,\n new Year(normalizedYear).isLeapYear() ? 29 : 28,\n 31,\n 30,\n 31,\n 30,\n 31,\n 31,\n 30,\n 31,\n 30,\n 31,\n ];\n\n return days[normalizedMonth];\n }\n\n private static ensureCalendarDelta(value: number): void {\n assert(Number.isInteger(value), new InvalidIntegerError(value));\n }\n\n private static createUtcCalendarValue(\n sourceValue: number,\n year: number,\n month: number,\n day: number,\n ): number {\n const integerValue = Math.floor(sourceValue);\n const fractionalMilliseconds = sourceValue - integerValue;\n const source = new Date(integerValue);\n const target = new Date(0);\n\n target.setUTCFullYear(year, month, day);\n target.setUTCHours(\n source.getUTCHours(),\n source.getUTCMinutes(),\n source.getUTCSeconds(),\n source.getUTCMilliseconds(),\n );\n\n return target.valueOf() + fractionalMilliseconds;\n }\n\n public static new(value: TimestampValue): Timestamp {\n return new Timestamp(value);\n }\n\n public static now(): Timestamp {\n return new Timestamp();\n }\n\n public static fromSeconds(seconds: number | NumberValueObject): Timestamp {\n return new Timestamp(seconds.valueOf() * Timestamp.FACTORS.SECONDS);\n }\n\n public constructor(value?: TimestampValue) {\n super(Timestamp.valueMilliseconds(value));\n\n assert(\n Number.isFinite(new Date(this.value).valueOf()),\n new InvalidNumberError(this.value),\n );\n }\n\n public toExactHour(): Timestamp {\n const date = new Date(this.valueOf());\n\n date.setSeconds(0);\n date.setMinutes(0);\n date.setMilliseconds(0);\n\n const value = Timestamp.new(date.getTime()).value;\n\n return this.clone(value);\n }\n\n public toMilliseconds(): number {\n return this.value;\n }\n\n public toSeconds(): number {\n return Math.round(this.value / Timestamp.FACTORS.SECONDS);\n }\n\n public toDate(): Date {\n return new Date(this.value);\n }\n\n public toString(): string {\n return `${this.valueOf()}`;\n }\n\n public isBefore(other: Timestamp): boolean {\n return this.value < other.valueOf();\n }\n\n public isAfter(other: Timestamp): boolean {\n return this.value > other.valueOf();\n }\n\n public isBeforeOrEqual(other: Timestamp): boolean {\n return this.value <= other.valueOf();\n }\n\n public isAfterOrEqual(other: Timestamp): boolean {\n return this.value >= other.valueOf();\n }\n\n public addMilliseconds(milliseconds: number | NumberValueObject): Timestamp {\n const value = this.value + milliseconds.valueOf();\n\n return this.clone(value);\n }\n\n public addSeconds(seconds: number | NumberValueObject): Timestamp {\n const value = this.value + seconds.valueOf() * Timestamp.FACTORS.SECONDS;\n\n return this.clone(value);\n }\n\n public addMinutes(minutes: number | NumberValueObject): Timestamp {\n const value = this.value + minutes.valueOf() * Timestamp.FACTORS.MINUTES;\n\n return this.clone(value);\n }\n\n public addHours(hours: number | NumberValueObject): Timestamp {\n const value = this.value + hours.valueOf() * Timestamp.FACTORS.HOURS;\n\n return this.clone(value);\n }\n\n public addDays(days: number | NumberValueObject): Timestamp {\n const value = this.value + days.valueOf() * Timestamp.FACTORS.DAYS;\n\n return this.clone(value);\n }\n\n public addWeeks(weeks: number | NumberValueObject): Timestamp {\n const value = this.value + weeks.valueOf() * Timestamp.FACTORS.WEEKS;\n\n return this.clone(value);\n }\n\n public addMonths(months: number | NumberValueObject): Timestamp {\n const delta = months.valueOf();\n Timestamp.ensureCalendarDelta(delta);\n\n const source = new Date(Math.floor(this.value));\n const totalMonths =\n source.getUTCFullYear() * 12 + source.getUTCMonth() + delta;\n const targetYear = Math.floor(totalMonths / 12);\n const targetMonth = totalMonths - targetYear * 12;\n const targetDay = Math.min(\n source.getUTCDate(),\n Timestamp.getLastDayOfUtcMonth(targetYear, targetMonth),\n );\n\n return this.clone(\n Timestamp.createUtcCalendarValue(\n this.value,\n targetYear,\n targetMonth,\n targetDay,\n ),\n );\n }\n\n public addYears(years: number | NumberValueObject): Timestamp {\n const delta = years.valueOf();\n Timestamp.ensureCalendarDelta(delta);\n\n const source = new Date(Math.floor(this.value));\n const targetYear = source.getUTCFullYear() + delta;\n const targetMonth = source.getUTCMonth();\n const targetDay = Math.min(\n source.getUTCDate(),\n Timestamp.getLastDayOfUtcMonth(targetYear, targetMonth),\n );\n\n return this.clone(\n Timestamp.createUtcCalendarValue(\n this.value,\n targetYear,\n targetMonth,\n targetDay,\n ),\n );\n }\n\n public addDuration(duration: Duration): Timestamp {\n const value = this.value + duration.valueOf();\n\n return this.clone(value);\n }\n\n public isSameDay(other: Timestamp): boolean {\n return this.getCalendarDay().isEqual(other.getCalendarDay());\n }\n\n public isSameMonth(other: Timestamp): boolean {\n return this.getMonthOfYear().isEqual(other.getMonthOfYear());\n }\n\n public isSameYear(other: Timestamp): boolean {\n return this.getYear().isEqual(other.getYear());\n }\n\n public getCalendarDay(): CalendarDay {\n return new CalendarDay(this);\n }\n\n public getDay(): Day {\n return new Day(this.toDate().getUTCDate());\n }\n\n public getMonth(): Month {\n return new Month(this.toDate().getUTCMonth() + 1);\n }\n\n public getYear(): Year {\n return new Year(this.toDate().getUTCFullYear());\n }\n\n public getHours(): number {\n return this.toDate().getUTCHours();\n }\n\n public getMinutes(): number {\n return this.toDate().getUTCMinutes();\n }\n\n public getSeconds(): number {\n return this.toDate().getUTCSeconds();\n }\n\n public getMilliseconds(): number {\n return this.toDate().getUTCMilliseconds();\n }\n\n public getDayOfWeek(): number {\n return this.toDate().getUTCDay();\n }\n\n public getMonthOfYear(): MonthOfYear {\n return new MonthOfYear(this.getMonth(), this.getYear());\n }\n}\n","import { InvalidPositiveNumberError } from '../errors/InvalidPositiveNumberError';\nimport { assert } from '../patterns/Assert';\nimport { NullObject } from './NullObject';\nimport { NumberValueObject } from './NumberValueObject';\n\nexport class PositiveNumber extends NumberValueObject {\n constructor(value: number | NumberValueObject) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n this.ensureIsPositive(this.value);\n }\n\n private ensureIsPositive(value: number): void {\n assert(value >= 0, new InvalidPositiveNumberError());\n }\n}\n","import { NumberValueObject } from '../NumberValueObject';\n\nexport class Duration extends NumberValueObject {\n private static readonly MILLISECOND_FACTOR = 1000;\n private static readonly SECOND_UNITS = {\n DAYS: 24 * 60 * 60,\n HOURS: 60 * 60,\n MINUTES: 60,\n MONTHS: 30 * 24 * 60 * 60,\n SECONDS: 1,\n WEEKS: 7 * 24 * 60 * 60,\n YEARS: 365 * 24 * 60 * 60,\n };\n\n private static readonly millisecondFactors = {\n DAYS: new NumberValueObject(\n this.SECOND_UNITS.DAYS * this.MILLISECOND_FACTOR,\n ),\n HOURS: new NumberValueObject(\n this.SECOND_UNITS.HOURS * this.MILLISECOND_FACTOR,\n ),\n MINUTES: new NumberValueObject(\n this.SECOND_UNITS.MINUTES * this.MILLISECOND_FACTOR,\n ),\n MONTHS: new NumberValueObject(\n this.SECOND_UNITS.MONTHS * this.MILLISECOND_FACTOR,\n ),\n SECONDS: new NumberValueObject(\n this.SECOND_UNITS.SECONDS * this.MILLISECOND_FACTOR,\n ),\n WEEKS: new NumberValueObject(\n this.SECOND_UNITS.WEEKS * this.MILLISECOND_FACTOR,\n ),\n YEARS: new NumberValueObject(\n this.SECOND_UNITS.YEARS * this.MILLISECOND_FACTOR,\n ),\n };\n\n public static fromDays(days: number | NumberValueObject): Duration {\n return new Duration(\n new NumberValueObject(days.valueOf()).multiply(\n this.millisecondFactors.DAYS,\n ),\n );\n }\n\n public static fromHours(hours: number | NumberValueObject): Duration {\n return new Duration(\n new NumberValueObject(hours.valueOf()).multiply(\n this.millisecondFactors.HOURS,\n ),\n );\n }\n\n public static fromMinutes(minutes: number | NumberValueObject): Duration {\n return new Duration(\n new NumberValueObject(minutes.valueOf()).multiply(\n this.millisecondFactors.MINUTES,\n ),\n );\n }\n\n public static fromSeconds(seconds: number | NumberValueObject): Duration {\n return new Duration(\n new NumberValueObject(seconds.valueOf()).multiply(\n this.millisecondFactors.SECONDS,\n ),\n );\n }\n\n public static fromMilliseconds(\n milliseconds: number | NumberValueObject,\n ): Duration {\n return new Duration(new NumberValueObject(milliseconds.valueOf()));\n }\n\n constructor(milliseconds: NumberValueObject | Duration) {\n super(milliseconds.valueOf());\n }\n\n public getTotalDays(): NumberValueObject {\n return new Duration(this).divide(Duration.millisecondFactors.DAYS);\n }\n\n public getTotalHours(): NumberValueObject {\n return new Duration(this).divide(Duration.millisecondFactors.HOURS);\n }\n\n public getTotalMinutes(): NumberValueObject {\n return new Duration(this).divide(Duration.millisecondFactors.MINUTES);\n }\n\n public getTotalSeconds(): NumberValueObject {\n return new Duration(this).divide(Duration.millisecondFactors.SECONDS);\n }\n\n public getTotalMilliseconds(): NumberValueObject {\n return new NumberValueObject(this.valueOf());\n }\n\n public getDays(): NumberValueObject {\n return new NumberValueObject(\n Math.floor(\n new Duration(this).divide(Duration.millisecondFactors.DAYS).valueOf(),\n ),\n );\n }\n\n public getHours(): NumberValueObject {\n return new NumberValueObject(\n Math.floor(\n new Duration(this).divide(Duration.millisecondFactors.HOURS).valueOf(),\n ) % 24,\n );\n }\n\n public getMinutes(): NumberValueObject {\n return new NumberValueObject(\n Math.floor(\n new Duration(this)\n .divide(Duration.millisecondFactors.MINUTES)\n .valueOf(),\n ) % Duration.SECOND_UNITS.MINUTES,\n );\n }\n\n public getSeconds(): NumberValueObject {\n return new NumberValueObject(\n Math.floor(\n new Duration(this)\n .divide(Duration.millisecondFactors.SECONDS)\n .valueOf(),\n ) % Duration.SECOND_UNITS.MINUTES,\n );\n }\n\n public getMilliseconds(): NumberValueObject {\n return new NumberValueObject(\n Math.floor(new Duration(this).valueOf()) % Duration.MILLISECOND_FACTOR,\n );\n }\n}\n","import { InvalidTimestampIntervalError } from '../../errors/InvalidTimestampIntervalError';\nimport { PrimitiveOf } from '../../interfaces/PrimitiveOf';\nimport { assert } from '../../patterns/Assert';\nimport { PositiveNumber } from '../PositiveNumber';\nimport { ValueObject } from '../ValueObject';\nimport { CalendarDay } from './CalendarDay';\nimport { DayOfWeek } from './DayOfWeek';\nimport { Duration } from './Duration';\nimport { Timestamp } from './Timestamp';\n\nexport class TimestampInterval extends ValueObject<string> {\n public static fromPrimitives(\n primitives: PrimitiveOf<TimestampInterval>,\n ): TimestampInterval {\n return new TimestampInterval(\n new Timestamp(primitives.start),\n new Timestamp(primitives.end),\n );\n }\n\n constructor(\n private readonly start: Timestamp,\n private readonly end: Timestamp,\n ) {\n super(`${start.valueOf()}-${end.valueOf()}`);\n\n assert(\n start.isBeforeOrEqual(end),\n new InvalidTimestampIntervalError(start, end),\n );\n }\n\n public toPrimitives() {\n return {\n end: this.end.valueOf(),\n start: this.start.valueOf(),\n };\n }\n\n public getStart(): Timestamp {\n return this.start;\n }\n\n public getEnd(): Timestamp {\n return this.end;\n }\n\n public getDuration(): Duration {\n return new Duration(\n new PositiveNumber(this.end.valueOf() - this.start.valueOf()),\n );\n }\n\n public getTotalDaysOfWeek(dayOfWeek: DayOfWeek): number {\n const oneDayInMilliseconds = 24 * 60 * 60 * 1000;\n const daysToCheck: number = Math.trunc(\n this.getDuration().valueOf() / oneDayInMilliseconds,\n );\n\n let count = 0;\n\n for (let daysChecked = 0; daysChecked <= daysToCheck; daysChecked++) {\n const iteratorDay = new Timestamp(this.start).addDays(daysChecked);\n\n if (iteratorDay.getDayOfWeek() === dayOfWeek.toNumber()) {\n count++;\n }\n }\n\n return count;\n }\n\n public getDaysBetweenInterval(): CalendarDay[] {\n const days: CalendarDay[] = [];\n\n let iteratorTimestamp = new Timestamp(this.getStart());\n const endTimestamp = new Timestamp(this.getEnd());\n\n while (iteratorTimestamp.isBeforeOrEqual(endTimestamp)) {\n days.push(new CalendarDay(iteratorTimestamp));\n iteratorTimestamp = iteratorTimestamp.addDays(1);\n }\n\n return days;\n }\n\n public getOverlappingInterval(\n searchInterval: TimestampInterval,\n ): TimestampInterval | null {\n const start = this.start.isAfter(searchInterval.getStart())\n ? this.start\n : searchInterval.getStart();\n const end = this.end.isBefore(searchInterval.getEnd())\n ? this.end\n : searchInterval.getEnd();\n\n if (start.isAfterOrEqual(end)) {\n return null;\n }\n\n return new TimestampInterval(start, end);\n }\n\n public includes(timestamp: Timestamp): boolean {\n return (\n timestamp.isAfterOrEqual(this.start) &&\n timestamp.isBeforeOrEqual(this.end)\n );\n }\n}\n","import { ValueObject } from '../ValueObject';\nimport { Month } from './Month';\nimport { Timestamp } from './Timestamp';\nimport { TimestampInterval } from './TimestampInterval';\nimport { Year } from './Year';\n\nexport class MonthOfYear extends ValueObject<string> {\n private readonly month: Month;\n private readonly year: Year;\n\n public static fromTimestamp(timestamp: Timestamp): MonthOfYear {\n return new MonthOfYear(timestamp.getMonth(), timestamp.getYear());\n }\n\n public static fromString(value: string): MonthOfYear {\n const [year, month] = value.split('/').map(Number);\n\n return new MonthOfYear(month, year);\n }\n\n constructor(month: number | Month, year: number | Year) {\n super(\n year.valueOf().toString() +\n '/' +\n month.valueOf().toString().padStart(2, '0'),\n );\n this.month = new Month(month.valueOf());\n this.year = new Year(year.valueOf());\n }\n\n public getMonth(): Month {\n return new Month(this.month.valueOf());\n }\n\n public getYear(): Year {\n return new Year(this.year);\n }\n\n public getNumberOfDays(): number {\n return new Date(this.year.valueOf(), this.month.valueOf(), 0).getDate();\n }\n\n public getTimestampInterval(): TimestampInterval {\n const firstMonthDay = '01';\n const month = this.month.valueOf().toString().padStart(2, '0');\n const lastDay = this.getNumberOfDays().toString();\n const startDate = new Timestamp(`${this.year}-${month}-${firstMonthDay}`);\n const endDate = new Timestamp(`${this.year}-${month}-${lastDay}`);\n\n return new TimestampInterval(startDate, endDate);\n }\n}\n","import { InvalidDayError } from '../../errors/InvalidDayError';\nimport { InvalidDayFormatError } from '../../errors/InvalidDayFormatError';\nimport { assert } from '../../patterns/Assert';\nimport { ValueObject } from '../ValueObject';\nimport { Day } from './Day';\nimport { DayOfWeek } from './DayOfWeek';\nimport { Month } from './Month';\nimport { MonthOfYear } from './MonthOfYear';\nimport { Timestamp } from './Timestamp';\n\nexport class CalendarDay extends ValueObject<string> {\n private readonly year: number;\n private readonly month: number;\n private readonly day: number;\n\n private static ensureIsValidString(value: string): void {\n assert(\n value.match(/^\\d{4}-\\d{1,2}-\\d{1,2}$/),\n new InvalidDayFormatError(value),\n );\n }\n\n private static generateStringValue(timestamp: Timestamp): string {\n const paddedMonth = timestamp.getMonth().toString().padStart(2, '0');\n const paddedDay = timestamp.getDay().toString().padStart(2, '0');\n\n return `${timestamp.getYear().toString()}-${paddedMonth}-${paddedDay}`;\n }\n\n private static ensureIsValidDate(value: Date | number | Timestamp): void {\n assert(Number.isFinite(value.valueOf()), new InvalidDayError(value));\n }\n\n private static timestampFromString(value: string): Timestamp {\n CalendarDay.ensureIsValidString(value);\n\n const [year, month, day] = value.split('-').map(Number);\n const date = new Date(0);\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCFullYear(year, month - 1, day);\n\n assert(\n date.getUTCFullYear() === year &&\n date.getUTCMonth() === month - 1 &&\n date.getUTCDate() === day,\n new InvalidDayError(value),\n );\n\n return new Timestamp(date);\n }\n\n private static timestampFromValue(\n value: string | Date | number | Timestamp,\n ): Timestamp {\n if (typeof value === 'string') {\n return CalendarDay.timestampFromString(value);\n }\n\n CalendarDay.ensureIsValidDate(value);\n\n return new Timestamp(value);\n }\n\n constructor(value?: string | Date | number | Timestamp) {\n let timestamp: Timestamp;\n\n if (value !== undefined) {\n timestamp = CalendarDay.timestampFromValue(value);\n } else {\n timestamp = new Timestamp();\n }\n\n super(CalendarDay.generateStringValue(timestamp));\n\n this.year = timestamp.getYear().valueOf();\n this.month = timestamp.getMonth().getIndex() + 1;\n this.day = timestamp.getDay().valueOf();\n }\n\n public isAfter(date: CalendarDay): boolean {\n return this.valueOf() > date.valueOf();\n }\n\n public isBefore(date: CalendarDay): boolean {\n return this.valueOf() < date.valueOf();\n }\n\n public getYear(): number {\n return this.year;\n }\n\n public getMonth(): Month {\n return new Month(this.month);\n }\n\n public getMonthOfYear(): MonthOfYear {\n return new MonthOfYear(this.month, this.year);\n }\n\n public getDay(): Day {\n return new Day(this.day);\n }\n\n public getDayOfWeek(): DayOfWeek {\n return DayOfWeek.fromNumber(this.toTimestamp().getDayOfWeek());\n }\n\n public toTimestamp(): Timestamp {\n const date = new Date(0);\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCFullYear(this.year, this.month - 1, this.day);\n\n return new Timestamp(date);\n }\n}\n","import { InvalidHourError } from '../../errors/InvalidHourError';\nimport { InvalidMinutesError } from '../../errors/InvalidMinutesError';\nimport { assert } from '../../patterns/Assert';\nimport { StringValueObject } from '../StringValueObject';\n\nexport class Hour extends StringValueObject {\n private readonly minutes: string;\n private readonly hours: string;\n\n private static addTrailZero(value: number): string {\n return value < 10 ? `0${value}` : value.toString();\n }\n\n private static normalizeMinutes(totalMinutes: number): number {\n const minutesPerDay = 24 * 60;\n\n return ((totalMinutes % minutesPerDay) + minutesPerDay) % minutesPerDay;\n }\n\n private static parseFromNumber(value: number, minutes: number): string[] {\n assert(\n Number.isInteger(value) && value >= 0 && value <= 23,\n new InvalidHourError(),\n );\n assert(\n Number.isInteger(minutes) && minutes >= 0 && minutes <= 59,\n new InvalidMinutesError(),\n );\n\n return [Hour.addTrailZero(value), Hour.addTrailZero(minutes)];\n }\n\n private static parseFromString(value: string): string[] {\n const parts = value.split(':');\n\n assert(parts.length === 2 && parts[1] !== '', new InvalidHourError());\n\n const [hours, minutes] = parts;\n\n assert(/^\\d{1,2}$/.test(hours), new InvalidHourError());\n assert(/^\\d{1,2}$/.test(minutes), new InvalidMinutesError());\n\n const parsedHours = Number(hours);\n const parsedMinutes = Number(minutes);\n\n assert(parsedHours >= 0 && parsedHours <= 23, new InvalidHourError());\n assert(\n parsedMinutes >= 0 && parsedMinutes <= 59,\n new InvalidMinutesError(),\n );\n\n return [Hour.addTrailZero(parsedHours), Hour.addTrailZero(parsedMinutes)];\n }\n\n constructor(value: string);\n constructor(value: number, minutes?: number);\n constructor(value: string | number, minutes?: number) {\n const [parsedHours, parsedMinutes] =\n typeof value === 'number' && minutes !== undefined\n ? Hour.parseFromNumber(value, minutes)\n : Hour.parseFromString(value as string);\n\n super(`${parsedHours}:${parsedMinutes}`);\n this.hours = parsedHours;\n this.minutes = parsedMinutes;\n }\n\n public addMinutes(minutes: number): Hour {\n const currentMinutes = Number(this.hours) * 60 + Number(this.minutes);\n const normalizedMinutes = Hour.normalizeMinutes(currentMinutes + minutes);\n const newHour = Math.floor(normalizedMinutes / 60);\n const newMinutes = normalizedMinutes % 60;\n\n return new Hour(newHour, newMinutes);\n }\n\n public diffInMinutes(other: Hour): number {\n let endHour = Number(other.hours);\n\n if (\n other.hours < this.hours ||\n (other.hours === this.hours && other.minutes < this.minutes)\n ) {\n endHour += 24;\n }\n\n const totalMinutes =\n (endHour - Number(this.hours)) * 60 +\n (Number(other.minutes) - Number(this.minutes));\n\n return totalMinutes;\n }\n\n public getMinutes(): number {\n return Number(this.minutes);\n }\n\n public getHours(): number {\n return Number(this.hours);\n }\n\n public isGreaterThan(hour: Hour): boolean {\n if (this.hours === hour.hours) {\n return Number(this.minutes) > Number(hour.minutes);\n }\n\n return Number(this.hours) > Number(hour.hours);\n }\n\n public isLessThan(hour: Hour): boolean {\n if (this.hours === hour.hours) {\n return Number(this.minutes) < Number(hour.minutes);\n }\n\n return Number(this.hours) < Number(hour.hours);\n }\n}\n","import { InvalidColorError } from '../errors/InvalidColorError';\nimport { assert } from '../patterns/Assert';\nimport { NullObject } from './NullObject';\nimport { StringValueObject } from './StringValueObject';\nimport { ValueObject } from './ValueObject';\n\nexport class Color extends StringValueObject {\n public static readonly RED = new Color('#FF0000');\n public static readonly GREEN = new Color('#00FF00');\n public static readonly BLUE = new Color('#0000FF');\n public static readonly BLACK = new Color('#000000');\n public static readonly WHITE = new Color('#FFFFFF');\n public static readonly YELLOW = new Color('#FFFF00');\n public static readonly CYAN = new Color('#00FFFF');\n public static readonly MAGENTA = new Color('#FF00FF');\n public static readonly ORANGE = new Color('#FFA500');\n public static readonly PURPLE = new Color('#800080');\n public static readonly PINK = new Color('#FFC0CB');\n public static readonly BROWN = new Color('#A52A2A');\n\n constructor(value: string | StringValueObject) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n this.ensureIsValidColor();\n }\n\n private ensureIsValidColor(): void {\n const hexColorPattern = /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/;\n\n assert(hexColorPattern.test(this.value), new InvalidColorError(this.value));\n }\n\n public hasValue(other: unknown): boolean {\n const otherValue = other instanceof ValueObject ? other.valueOf() : other;\n\n return (\n typeof otherValue === 'string' &&\n this.value.toLowerCase() === otherValue.toLowerCase()\n );\n }\n}\n","import { InvalidEmailError } from '../errors/InvalidEmailError';\nimport { assert } from '../patterns/Assert';\nimport { NullObject } from './NullObject';\nimport { StringValueObject } from './StringValueObject';\n\nexport class Email extends StringValueObject {\n private static readonly PATTERN =\n /^[\\w+\\-.!#$%&'*/=?^`{|}~]+@(?:[\\w-]+\\.)+(?:[a-z]{2,63}|xn--[a-z0-9](?:[a-z0-9-]{0,57}[a-z0-9])?)$/i;\n\n constructor(value: string | StringValueObject) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n this.ensureIsValidEmail(this.value);\n }\n\n private ensureIsValidEmail(value: string): void {\n assert(Email.PATTERN.test(value), new InvalidEmailError(value));\n }\n}\n","import { InvalidPasswordError } from '../errors/InvalidPasswordError';\nimport { assert } from '../patterns';\nimport { NullObject } from './NullObject';\nimport { StringValueObject } from './StringValueObject';\n\nexport class Password extends StringValueObject {\n private static readonly MAX_LENGTH = 256;\n private static readonly MIN_LENGTH = 12;\n\n constructor(value: string | StringValueObject) {\n super(value);\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n assert(\n this.isValidPassword(),\n new InvalidPasswordError(Password.MIN_LENGTH, Password.MAX_LENGTH),\n );\n }\n\n private isValidPassword(): boolean {\n return (\n this.value.length >= Password.MIN_LENGTH &&\n this.value.length <= Password.MAX_LENGTH &&\n /[A-Z]/.test(this.value) &&\n /[a-z]/.test(this.value) &&\n /[0-9]/.test(this.value) &&\n /[^A-Za-z0-9]/.test(this.value)\n );\n }\n}\n","interface ComparableItem {\n isEqual(item: unknown): boolean;\n}\nexport class UniqueObjectArray<\n T extends ComparableItem,\n> implements Iterable<T> {\n private items: T[] = [];\n\n public static fromArray<T extends ComparableItem>(\n array: T[],\n ): UniqueObjectArray<T> {\n const uniqueArray = new UniqueObjectArray<T>();\n for (const item of array) {\n uniqueArray.push(item);\n }\n\n return uniqueArray;\n }\n\n public includes(item: T): boolean {\n return this.items.some((one) => one.isEqual(item));\n }\n\n public push(item: T): boolean {\n if (!this.includes(item)) {\n this.items.push(item);\n\n return true;\n }\n\n return false;\n }\n\n public remove(item: T): boolean {\n const index = this.items.findIndex((one) => one.isEqual(item));\n\n if (index !== -1) {\n this.items.splice(index, 1);\n\n return true;\n }\n\n return false;\n }\n\n public [Symbol.iterator](): Iterator<T> {\n return this.items[Symbol.iterator]();\n }\n\n public length(): number {\n return this.items.length;\n }\n\n public toArray(): T[] {\n return Array.from(this.items);\n }\n}\n"],"mappings":"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"}
|
package/dist/index.d.cts
CHANGED
|
@@ -141,7 +141,6 @@ export declare class Day extends Integer {
|
|
|
141
141
|
//#endregion
|
|
142
142
|
//#region src/value-objects/Enum.d.ts
|
|
143
143
|
export declare abstract class Enum<T extends Primitive = Primitive> extends ValueObject<T> {
|
|
144
|
-
protected readonly value: T;
|
|
145
144
|
constructor(value: T);
|
|
146
145
|
abstract getValues(): T[];
|
|
147
146
|
private ensureIsValidValue;
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/errors/BaseError.ts","../src/errors/DomainError.ts","../src/errors/InvalidColorError.ts","../src/errors/InvalidDayError.ts","../src/errors/InvalidDayFormatError.ts","../src/errors/InvalidHourError.ts","../src/errors/InvalidEmailError.ts","../src/errors/InvalidFormatError.ts","../src/errors/InvalidHashError.ts","../src/errors/InvalidIntegerError.ts","../src/errors/InvalidLatitudeError.ts","../src/errors/InvalidLongitudeError.ts","../src/errors/InvalidMinutesError.ts","../src/errors/InvalidNumberError.ts","../src/errors/InvalidPasswordError.ts","../src/errors/InvalidPositiveNumberError.ts","../src/errors/InvalidStringLengthError.ts","../src/types/Primitive.ts","../src/types/Nullish.ts","../src/value-objects/ValueObject.ts","../src/value-objects/NumberValueObject.ts","../src/value-objects/Integer.ts","../src/value-objects/time/Day.ts","../src/value-objects/Enum.ts","../src/value-objects/time/DayOfWeek.ts","../src/value-objects/time/Month.ts","../src/interfaces/PrimitiveOf.ts","../src/value-objects/time/Duration.ts","../src/value-objects/time/TimestampInterval.ts","../src/value-objects/time/Year.ts","../src/value-objects/time/MonthOfYear.ts","../src/value-objects/time/CalendarDay.ts","../src/value-objects/time/Timestamp.ts","../src/errors/InvalidTimestampIntervalError.ts","../src/errors/InvalidLengthError.ts","../src/errors/NullObjectCreationDisabledError.ts","../src/errors/NullObjectError.ts","../src/errors/ValueNotInEnumError.ts","../src/patterns/Assert.ts","../src/value-objects/StringValueObject.ts","../src/value-objects/coordinates/Latitude.ts","../src/value-objects/coordinates/Longitude.ts","../src/value-objects/coordinates/Coordinates.ts","../src/value-objects/hashes/Hash.ts","../src/value-objects/hashes/MD5Hash.ts","../src/value-objects/hashes/SHA256Hash.ts","../src/value-objects/hashes/SHA512Hash.ts","../src/value-objects/ids/ShortId.ts","../src/value-objects/ids/UUID.ts","../src/value-objects/media/Media.ts","../src/value-objects/time/Hour.ts","../src/value-objects/Color.ts","../src/value-objects/Email.ts","../src/value-objects/Password.ts","../src/value-objects/PositiveNumber.ts","../src/value-objects/NullObject.ts","../src/value-objects/UniqueObjectArray.ts"],"mappings":";;qBAAa,kBAAkB;mBACZ;SACH,YAAY;EAId,YAAA,iBAAiB;EAMtB;EAIA;;;;qBCdI,oBAAoB;qBACZ;SACL,cAAc;EAIhB,YAAA;;;;qBCND,0BAA0B;EACzB,YAAA;;;;qBCDD,wBAAwB;EACvB,YAAA;;;;qBCDD,8BAA8B;EAC7B,YAAA;;;;qBCDD,yBAAyB;EAAA;;;;qBCAzB,0BAA0B;EACzB,YAAA;;;;qBCDD,2BAA2B;EAC1B,YAAA;;;;qBCDD,yBAAyB;EACxB,YAAA,cAAc;;;;qBCDf,4BAA4B;EAC3B,YAAA;;;;qBCDD,6BAA6B;EAC5B,YAAA;;;;qBCDD,8BAA8B;EAC7B,YAAA;;;;qBCDD,4BAA4B;EAAA;;;;qBCA5B,2BAA2B;EAC1B,YAAA;;;;qBCDD,6BAA6B;EAC5B,YAAA,mBAAmB;;;;qBCDpB,mCAAmC;EAAA;;;;qBCAnC,iCAAiC;EAChC,YAAA,eAAe;;;;YCHjB;;;YCAA;;;8BCIU,YAAY,UAAU,YAAY;iBACvC;qBAEI,OAAQ;SAEb;SAIA;EAIF,YAAA,OAAO,IAAI;
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/errors/BaseError.ts","../src/errors/DomainError.ts","../src/errors/InvalidColorError.ts","../src/errors/InvalidDayError.ts","../src/errors/InvalidDayFormatError.ts","../src/errors/InvalidHourError.ts","../src/errors/InvalidEmailError.ts","../src/errors/InvalidFormatError.ts","../src/errors/InvalidHashError.ts","../src/errors/InvalidIntegerError.ts","../src/errors/InvalidLatitudeError.ts","../src/errors/InvalidLongitudeError.ts","../src/errors/InvalidMinutesError.ts","../src/errors/InvalidNumberError.ts","../src/errors/InvalidPasswordError.ts","../src/errors/InvalidPositiveNumberError.ts","../src/errors/InvalidStringLengthError.ts","../src/types/Primitive.ts","../src/types/Nullish.ts","../src/value-objects/ValueObject.ts","../src/value-objects/NumberValueObject.ts","../src/value-objects/Integer.ts","../src/value-objects/time/Day.ts","../src/value-objects/Enum.ts","../src/value-objects/time/DayOfWeek.ts","../src/value-objects/time/Month.ts","../src/interfaces/PrimitiveOf.ts","../src/value-objects/time/Duration.ts","../src/value-objects/time/TimestampInterval.ts","../src/value-objects/time/Year.ts","../src/value-objects/time/MonthOfYear.ts","../src/value-objects/time/CalendarDay.ts","../src/value-objects/time/Timestamp.ts","../src/errors/InvalidTimestampIntervalError.ts","../src/errors/InvalidLengthError.ts","../src/errors/NullObjectCreationDisabledError.ts","../src/errors/NullObjectError.ts","../src/errors/ValueNotInEnumError.ts","../src/patterns/Assert.ts","../src/value-objects/StringValueObject.ts","../src/value-objects/coordinates/Latitude.ts","../src/value-objects/coordinates/Longitude.ts","../src/value-objects/coordinates/Coordinates.ts","../src/value-objects/hashes/Hash.ts","../src/value-objects/hashes/MD5Hash.ts","../src/value-objects/hashes/SHA256Hash.ts","../src/value-objects/hashes/SHA512Hash.ts","../src/value-objects/ids/ShortId.ts","../src/value-objects/ids/UUID.ts","../src/value-objects/media/Media.ts","../src/value-objects/time/Hour.ts","../src/value-objects/Color.ts","../src/value-objects/Email.ts","../src/value-objects/Password.ts","../src/value-objects/PositiveNumber.ts","../src/value-objects/NullObject.ts","../src/value-objects/UniqueObjectArray.ts"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@haskou/value-objects",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.2",
|
|
4
4
|
"description": "TypeScript value objects for validated, immutable primitive values and small domain-safe data structures.",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -71,9 +71,9 @@
|
|
|
71
71
|
"@arethetypeswrong/core": "^0.18.5",
|
|
72
72
|
"@haskou/eslint-config": "^0.2.2",
|
|
73
73
|
"@types/jest": "^30.0.0",
|
|
74
|
-
"@types/node": "^26.1
|
|
75
|
-
"eslint": "^10.
|
|
76
|
-
"jest": "^30.
|
|
74
|
+
"@types/node": "^26.4.1",
|
|
75
|
+
"eslint": "^10.10.0",
|
|
76
|
+
"jest": "^30.5.1",
|
|
77
77
|
"jest-extended": "^7.0.0",
|
|
78
78
|
"prettier": "^3.9.6",
|
|
79
79
|
"publint": "^0.3.24",
|
|
@@ -81,6 +81,6 @@
|
|
|
81
81
|
"tsdown": "^0.23.0",
|
|
82
82
|
"typescript": "^6.0.3",
|
|
83
83
|
"vitepress": "^1.6.4",
|
|
84
|
-
"vue": "^3.5.
|
|
84
|
+
"vue": "^3.5.42"
|
|
85
85
|
}
|
|
86
86
|
}
|