@haskou/value-objects 8.3.4 → 8.4.1

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 CHANGED
@@ -122,18 +122,19 @@ This is the main idea behind the library: use the provided Value Objects where t
122
122
 
123
123
  ## Available Value Objects
124
124
 
125
- | Category | Classes | What they give you |
126
- | ----------- | ------------------------------------------------------------- | ----------------------------------------------------------------- |
127
- | Base | `ValueObject`, `NullObject`, `Enum` | Immutability, equality by value, safe absence |
128
- | Strings | `StringValueObject`, `Password`, `Email`, `Color` | Length, format and emptiness rules |
129
- | Numbers | `NumberValueObject`, `Integer`, `PositiveNumber` | Range and integer guarantees |
130
- | Money | `Money`, `Currency` | Exact arithmetic in minor units, no floating point errors |
131
- | Identifiers | `ShortId`, `UUID` | Generated and validated identifiers |
132
- | Date & time | `Timestamp`, `CalendarDay`, `Hour`, `Duration`, `MonthOfYear` | Arithmetic and comparison without hand-rolled `Date` code |
133
- | Coordinates | `Latitude`, `Longitude`, `Coordinates` | Range-checked geographic points |
134
- | Hashes | `MD5Hash`, `SHA256Hash`, `SHA512Hash` | Validated digests |
135
- | Media | `Media` | Typed media references |
136
- | Collections | `UniqueObjectArray` | Immutable collection without duplicates, by Value Object equality |
125
+ | Category | Classes | What they give you |
126
+ | ----------- | ------------------------------------------------------------------- | ----------------------------------------------------------------- |
127
+ | Base | `ValueObject`, `NullObject`, `Enum` | Immutability, equality by value, safe absence |
128
+ | Strings | `StringValueObject`, `Password`, `Email`, `Color` | Length, format and emptiness rules |
129
+ | Numbers | `NumberValueObject`, `Integer`, `PositiveInteger`, `PositiveNumber` | Range and integer guarantees |
130
+ | Money | `Money`, `Currency` | Exact arithmetic in minor units, no floating point errors |
131
+ | File size | `FileSize`, `FileSizeUnit` | Bytes with SI and IEC units, parsing and unit conversion |
132
+ | Identifiers | `ShortId`, `UUID` | Generated and validated identifiers |
133
+ | Date & time | `Timestamp`, `CalendarDay`, `Hour`, `Duration`, `MonthOfYear` | Arithmetic and comparison without hand-rolled `Date` code |
134
+ | Coordinates | `Latitude`, `Longitude`, `Coordinates` | Range-checked geographic points |
135
+ | Hashes | `MD5Hash`, `SHA256Hash`, `SHA512Hash` | Validated digests |
136
+ | Media | `Media` | Typed media references |
137
+ | Collections | `UniqueObjectArray` | Immutable collection without duplicates, by Value Object equality |
137
138
 
138
139
  Every class has its own page in the [API reference](https://haskou.github.io/value-objects/reference/).
139
140
 
package/dist/index.cjs CHANGED
@@ -376,6 +376,143 @@ var Coordinates = class Coordinates extends StringValueObject {
376
376
  }
377
377
  };
378
378
  //#endregion
379
+ //#region src/value-objects/Integer.ts
380
+ var Integer = class extends NumberValueObject {
381
+ constructor(value) {
382
+ super(value?.valueOf());
383
+ if (NullObject.isNullObject(this)) return this;
384
+ this.ensureIsInteger();
385
+ }
386
+ ensureIsInteger() {
387
+ assert(this.value.valueOf() % 1 === 0, new InvalidIntegerError(this.value.valueOf()));
388
+ }
389
+ };
390
+ //#endregion
391
+ //#region src/value-objects/PositiveInteger.ts
392
+ var PositiveInteger = class extends Integer {
393
+ constructor(value) {
394
+ super(value?.valueOf());
395
+ if (NullObject.isNullObject(this)) return this;
396
+ assert(this.value >= 0, new InvalidPositiveNumberError());
397
+ }
398
+ };
399
+ //#endregion
400
+ //#region src/value-objects/Enum.ts
401
+ var Enum = class extends ValueObject {
402
+ constructor(value) {
403
+ super(value);
404
+ if (NullObject.isNullObject(this)) return this;
405
+ this.ensureIsValidValue();
406
+ }
407
+ ensureIsValidValue() {
408
+ assert(this.getValues().some((enumValue) => this.hasValue(enumValue)), new ValueNotInEnumError(this.valueOf(), this.getValues()));
409
+ }
410
+ };
411
+ //#endregion
412
+ //#region src/value-objects/file-size/FileSizeUnit.ts
413
+ let EFileSizeUnit = /* @__PURE__ */ function(EFileSizeUnit) {
414
+ EFileSizeUnit["BYTE"] = "B";
415
+ EFileSizeUnit["KILOBYTE"] = "kB";
416
+ EFileSizeUnit["MEGABYTE"] = "MB";
417
+ EFileSizeUnit["GIGABYTE"] = "GB";
418
+ EFileSizeUnit["TERABYTE"] = "TB";
419
+ EFileSizeUnit["PETABYTE"] = "PB";
420
+ EFileSizeUnit["KIBIBYTE"] = "KiB";
421
+ EFileSizeUnit["MEBIBYTE"] = "MiB";
422
+ EFileSizeUnit["GIBIBYTE"] = "GiB";
423
+ EFileSizeUnit["TEBIBYTE"] = "TiB";
424
+ EFileSizeUnit["PEBIBYTE"] = "PiB";
425
+ return EFileSizeUnit;
426
+ }({});
427
+ const SI_BASE = 1e3;
428
+ const IEC_BASE = 1024;
429
+ const fileSizeUnitToBytesMap = {
430
+ ["B"]: 1,
431
+ ["GiB"]: IEC_BASE ** 3,
432
+ ["GB"]: SI_BASE ** 3,
433
+ ["KiB"]: IEC_BASE ** 1,
434
+ ["kB"]: SI_BASE ** 1,
435
+ ["MiB"]: IEC_BASE ** 2,
436
+ ["MB"]: SI_BASE ** 2,
437
+ ["PiB"]: IEC_BASE ** 5,
438
+ ["PB"]: SI_BASE ** 5,
439
+ ["TiB"]: IEC_BASE ** 4,
440
+ ["TB"]: SI_BASE ** 4
441
+ };
442
+ var FileSizeUnit = class FileSizeUnit extends Enum {
443
+ static BYTE = new FileSizeUnit("B");
444
+ static KILOBYTE = new FileSizeUnit("kB");
445
+ static MEGABYTE = new FileSizeUnit("MB");
446
+ static GIGABYTE = new FileSizeUnit("GB");
447
+ static TERABYTE = new FileSizeUnit("TB");
448
+ static PETABYTE = new FileSizeUnit("PB");
449
+ static KIBIBYTE = new FileSizeUnit("KiB");
450
+ static MEBIBYTE = new FileSizeUnit("MiB");
451
+ static GIBIBYTE = new FileSizeUnit("GiB");
452
+ static TEBIBYTE = new FileSizeUnit("TiB");
453
+ static PEBIBYTE = new FileSizeUnit("PiB");
454
+ static SI = [
455
+ FileSizeUnit.BYTE,
456
+ FileSizeUnit.KILOBYTE,
457
+ FileSizeUnit.MEGABYTE,
458
+ FileSizeUnit.GIGABYTE,
459
+ FileSizeUnit.TERABYTE,
460
+ FileSizeUnit.PETABYTE
461
+ ];
462
+ static IEC = [
463
+ FileSizeUnit.BYTE,
464
+ FileSizeUnit.KIBIBYTE,
465
+ FileSizeUnit.MEBIBYTE,
466
+ FileSizeUnit.GIBIBYTE,
467
+ FileSizeUnit.TEBIBYTE,
468
+ FileSizeUnit.PEBIBYTE
469
+ ];
470
+ getValues() {
471
+ return Object.values(EFileSizeUnit);
472
+ }
473
+ getBytes() {
474
+ return new PositiveInteger(fileSizeUnitToBytesMap[this.value]);
475
+ }
476
+ };
477
+ //#endregion
478
+ //#region src/value-objects/file-size/FileSize.ts
479
+ var FileSize = class FileSize extends PositiveInteger {
480
+ static FORMAT = /^(\d+(?:\.\d+)?)\s*(\S+)$/;
481
+ static fromBytes(bytes) {
482
+ return new this(bytes);
483
+ }
484
+ static from(value, unit) {
485
+ return new this(Math.round(value.valueOf() * unit.getBytes().valueOf()));
486
+ }
487
+ static parse(text) {
488
+ const match = FileSize.FORMAT.exec(text.trim());
489
+ assert(match, new InvalidFormatError(text));
490
+ const [, value, symbol] = match;
491
+ const unit = new FileSizeUnit(symbol);
492
+ return new this(Math.round(Number(value) * unit.getBytes().valueOf()));
493
+ }
494
+ add(other) {
495
+ return this.clone(this.value + other.valueOf());
496
+ }
497
+ subtract(other) {
498
+ return this.clone(this.value - other.valueOf());
499
+ }
500
+ toBytes() {
501
+ return new PositiveInteger(this.value);
502
+ }
503
+ to(unit) {
504
+ return new NumberValueObject(this.value / unit.getBytes().valueOf());
505
+ }
506
+ toHumanReadable(units) {
507
+ const [smallest, ...rest] = [...units].sort((a, b) => a.getBytes().isLessThan(b.getBytes()) ? -1 : 1);
508
+ const unit = rest.reduce((fitting, candidate) => this.isGreaterOrEqualThan(candidate.getBytes()) ? candidate : fitting, smallest);
509
+ return {
510
+ unit,
511
+ value: this.to(unit)
512
+ };
513
+ }
514
+ };
515
+ //#endregion
379
516
  //#region src/value-objects/hashes/Hash.ts
380
517
  var Hash = class extends ValueObject {
381
518
  constructor(source) {
@@ -508,18 +645,6 @@ var Media = class Media extends ValueObject {
508
645
  }
509
646
  };
510
647
  //#endregion
511
- //#region src/value-objects/Enum.ts
512
- var Enum = class extends ValueObject {
513
- constructor(value) {
514
- super(value);
515
- if (NullObject.isNullObject(this)) return this;
516
- this.ensureIsValidValue();
517
- }
518
- ensureIsValidValue() {
519
- assert(this.getValues().some((enumValue) => this.hasValue(enumValue)), new ValueNotInEnumError(this.valueOf(), this.getValues()));
520
- }
521
- };
522
- //#endregion
523
648
  //#region src/value-objects/money/Currency.ts
524
649
  var Currency = class Currency extends Enum {
525
650
  static MINOR_UNIT_DIGITS = {
@@ -583,18 +708,6 @@ var Currency = class Currency extends Enum {
583
708
  }
584
709
  };
585
710
  //#endregion
586
- //#region src/value-objects/Integer.ts
587
- var Integer = class extends NumberValueObject {
588
- constructor(value) {
589
- super(value?.valueOf());
590
- if (NullObject.isNullObject(this)) return this;
591
- this.ensureIsInteger();
592
- }
593
- ensureIsInteger() {
594
- assert(this.value.valueOf() % 1 === 0, new InvalidIntegerError(this.value.valueOf()));
595
- }
596
- };
597
- //#endregion
598
711
  //#region src/value-objects/money/Money.ts
599
712
  var Money = class Money extends ValueObject {
600
713
  static FORMAT = /^(-?)(\d+)(?:\.(\d+))? ([A-Z]{3})$/;
@@ -1413,8 +1526,11 @@ exports.DayOfWeek = DayOfWeek;
1413
1526
  exports.DomainError = DomainError;
1414
1527
  exports.Duration = Duration;
1415
1528
  exports.EDaysOfWeek = EDaysOfWeek;
1529
+ exports.EFileSizeUnit = EFileSizeUnit;
1416
1530
  exports.Email = Email;
1417
1531
  exports.Enum = Enum;
1532
+ exports.FileSize = FileSize;
1533
+ exports.FileSizeUnit = FileSizeUnit;
1418
1534
  exports.Hash = Hash;
1419
1535
  exports.Hour = Hour;
1420
1536
  exports.Integer = Integer;
@@ -1448,6 +1564,7 @@ exports.NullObjectCreationDisabledError = NullObjectCreationDisabledError;
1448
1564
  exports.NullObjectError = NullObjectError;
1449
1565
  exports.NumberValueObject = NumberValueObject;
1450
1566
  exports.Password = Password;
1567
+ exports.PositiveInteger = PositiveInteger;
1451
1568
  exports.PositiveNumber = PositiveNumber;
1452
1569
  exports.SHA256Hash = SHA256Hash;
1453
1570
  exports.SHA512Hash = SHA512Hash;
@@ -1461,6 +1578,7 @@ exports.ValueNotInEnumError = ValueNotInEnumError;
1461
1578
  exports.ValueObject = ValueObject;
1462
1579
  exports.Year = Year;
1463
1580
  exports.assert = assert;
1581
+ exports.fileSizeUnitToBytesMap = fileSizeUnitToBytesMap;
1464
1582
  exports.timeStampDayToDaysMap = timeStampDayToDaysMap;
1465
1583
 
1466
1584
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../src/errors/BaseError.ts","../src/errors/DomainError.ts","../src/errors/CurrencyMismatchError.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/InvalidMoneyError.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/Enum.ts","../src/value-objects/money/Currency.ts","../src/value-objects/Integer.ts","../src/value-objects/money/Money.ts","../src/value-objects/time/Day.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 CurrencyMismatchError extends DomainError {\n constructor(expected: string, received: string) {\n super(`Currency mismatch: expected ${expected}, received ${received}`);\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 InvalidMoneyError extends DomainError {\n constructor(value: unknown) {\n super(`Invalid money ${String(value)}`);\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 public toJSON(): T {\n return this.value;\n }\n}\n","import { InvalidStringLengthError } from '../errors/InvalidStringLengthError';\nimport { assert } from '../patterns/Assert';\nimport { Nullish } from '../types';\nimport { NullObject } from './NullObject';\nimport { ValueObject } from './ValueObject';\n\nexport class StringValueObject extends ValueObject<string> {\n constructor(\n value: string | StringValueObject | Nullish,\n maxLength: number = 512,\n ) {\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(\n value === null || value === undefined || Latitude.isValid(value),\n new InvalidLatitudeError(value?.valueOf()),\n );\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 value === null || value === undefined || Longitude.isValid(value),\n new InvalidLongitudeError(value?.valueOf()),\n );\n super(value?.valueOf());\n }\n}\n","import { NullObject } from '../NullObject';\nimport { 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 const hasValues =\n latitude !== null &&\n latitude !== undefined &&\n longitude !== null &&\n longitude !== undefined;\n\n super(hasValues ? latitude.valueOf() + ',' + longitude.valueOf() : null);\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\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 { 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 const bytes = Array.from(this.valueOf().matchAll(/../g), ([pair]) =>\n parseInt(pair, 16),\n );\n\n return new StringValueObject(btoa(String.fromCharCode(...bytes)));\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 { InvalidHashError } from '../../errors/InvalidHashError';\nimport { assert } from '../../patterns';\nimport { NullObject } from '../NullObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { Hash } from './Hash';\n\nexport class SHA256Hash extends Hash {\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","import { InvalidHashError } from '../../errors/InvalidHashError';\nimport { assert } from '../../patterns';\nimport { NullObject } from '../NullObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { Hash } from './Hash';\n\nexport class SHA512Hash extends Hash {\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","import { 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 bytes = new Uint8Array(12);\n new DataView(bytes.buffer).setUint32(0, Math.floor(Date.now() / 1000));\n bytes.set(globalThis.crypto.getRandomValues(new Uint8Array(8)), 4);\n\n return Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join(\n '',\n );\n }\n\n public static generate<T extends ShortId = ShortId>(\n this: new (value: string) => T,\n ): T {\n return new this(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 { 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<T extends UUID = UUID>(\n this: new (value: string) => T,\n ): T {\n const bytes = globalThis.crypto.getRandomValues(new Uint8Array(16));\n // RFC 4122 §4.4: version 4 and variant 10xx.\n bytes[6] = (bytes[6] % 16) + 64;\n bytes[8] = (bytes[8] % 64) + 128;\n const hex = Array.from(bytes, (byte) =>\n byte.toString(16).padStart(2, '0'),\n ).join('');\n\n return new this(\n [\n hex.slice(0, 8),\n hex.slice(8, 12),\n hex.slice(12, 16),\n hex.slice(16, 20),\n hex.slice(20),\n ].join('-'),\n );\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 { NullObject } from '../NullObject';\nimport { ValueObject } from '../ValueObject';\n\nexport class Media extends ValueObject<string> {\n private static readonly BASE64_CHUNK_SIZE = 0x8000;\n\n private readonly buffer?: Uint8Array;\n\n constructor(value: string | Uint8Array) {\n super(\n value instanceof Uint8Array\n ? new TextDecoder('utf-8', { ignoreBOM: true }).decode(value)\n : value,\n );\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n this.buffer =\n value instanceof Uint8Array ? new Uint8Array(value) : undefined;\n }\n\n public getBuffer(): Uint8Array {\n return this.buffer === undefined\n ? new TextEncoder().encode(this.value)\n : new Uint8Array(this.buffer);\n }\n\n public getSize(): number {\n return this.getBuffer().length;\n }\n\n public getBase64(): string {\n const bytes = this.getBuffer();\n const chunks: string[] = [];\n\n // Chunked so large payloads do not overflow the call stack.\n for (let i = 0; i < bytes.length; i += Media.BASE64_CHUNK_SIZE) {\n chunks.push(\n String.fromCharCode(...bytes.subarray(i, i + Media.BASE64_CHUNK_SIZE)),\n );\n }\n\n return btoa(chunks.join(''));\n }\n\n public hasValue(other: unknown): boolean {\n let otherBytes: Uint8Array | undefined;\n\n if (other instanceof Media) {\n otherBytes = other.getBuffer();\n } else if (other instanceof Uint8Array) {\n otherBytes = other;\n }\n\n if (otherBytes === undefined) {\n return super.hasValue(other);\n }\n\n const bytes = this.getBuffer();\n\n return (\n bytes.length === otherBytes.length &&\n bytes.every((byte, i) => byte === otherBytes[i])\n );\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 { InvalidFormatError } from '../../errors/InvalidFormatError';\nimport { assert } from '../../patterns/Assert';\nimport { Enum } from '../Enum';\n\nexport class Currency extends Enum<string> {\n private static readonly MINOR_UNIT_DIGITS: Record<string, number> = {\n AED: 2,\n ARS: 2,\n AUD: 2,\n BRL: 2,\n CAD: 2,\n CHF: 2,\n CLP: 0,\n CNY: 2,\n COP: 2,\n CRC: 2,\n CZK: 2,\n DKK: 2,\n EUR: 2,\n GBP: 2,\n HKD: 2,\n HUF: 2,\n IDR: 2,\n ILS: 2,\n INR: 2,\n ISK: 0,\n JPY: 0,\n KRW: 0,\n KWD: 3,\n MXN: 2,\n NOK: 2,\n NZD: 2,\n PEN: 2,\n PLN: 2,\n RON: 2,\n SEK: 2,\n SGD: 2,\n THB: 2,\n TRY: 2,\n USD: 2,\n ZAR: 2,\n };\n\n private static readonly SYMBOLS: Record<string, string> = {\n $: 'USD',\n '£': 'GBP',\n '¥': 'JPY',\n '₡': 'CRC',\n '₩': 'KRW',\n '₪': 'ILS',\n '€': 'EUR',\n '₹': 'INR',\n '₺': 'TRY',\n };\n\n public static fromSymbol(symbol: string): Currency {\n const code = Currency.SYMBOLS[symbol];\n assert(code, new InvalidFormatError(symbol));\n\n return new Currency(code);\n }\n\n public getValues(): string[] {\n return Object.keys(Currency.MINOR_UNIT_DIGITS);\n }\n\n public getMinorUnitDigits(): number {\n return Currency.MINOR_UNIT_DIGITS[this.valueOf()];\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 { CurrencyMismatchError } from '../../errors/CurrencyMismatchError';\nimport { InvalidMoneyError } from '../../errors/InvalidMoneyError';\nimport { assert } from '../../patterns/Assert';\nimport { Integer } from '../Integer';\nimport { NullObject } from '../NullObject';\nimport { NumberValueObject } from '../NumberValueObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { ValueObject } from '../ValueObject';\nimport { Currency } from './Currency';\n\nexport class Money extends ValueObject<string> {\n private static readonly FORMAT = /^(-?)(\\d+)(?:\\.(\\d+))? ([A-Z]{3})$/;\n private static readonly TEXT_FORMAT =\n /^(-?)(?:([^\\d\\s.-]+)\\s*)?(\\d+(?:\\.\\d+)?)(?:\\s*([^\\d\\s.-]+))?$/;\n\n private readonly currency!: Currency;\n private readonly minorUnits!: Integer;\n\n public static fromMinorUnits(\n minorUnits: number | NumberValueObject,\n currency: string | Currency,\n ): Money {\n const units = new Integer(minorUnits.valueOf());\n assert(Number.isSafeInteger(units.valueOf()), new InvalidMoneyError(units));\n\n const code = new Currency(currency.valueOf());\n const digits = code.getMinorUnitDigits();\n const padded = String(Math.abs(units.valueOf())).padStart(digits + 1, '0');\n const integer = padded.slice(0, padded.length - digits);\n const fraction =\n digits > 0 ? `.${padded.slice(padded.length - digits)}` : '';\n const sign = units.isLessThan(0) ? '-' : '';\n\n return new Money(`${sign}${integer}${fraction} ${code}`);\n }\n\n public static fromString(text: string): Money {\n const match = Money.TEXT_FORMAT.exec(text.trim());\n assert(match, new InvalidMoneyError(text));\n\n const [, sign, prefix, amount, suffix] = match;\n assert(!prefix !== !suffix, new InvalidMoneyError(text));\n\n const token = prefix ?? suffix;\n const currency = /^[A-Za-z]{3}$/.test(token)\n ? new Currency(token.toUpperCase())\n : Currency.fromSymbol(token);\n const [integer, fraction = ''] = amount.split('.');\n const digits = currency.getMinorUnitDigits();\n assert(fraction.length <= digits, new InvalidMoneyError(text));\n\n return Money.fromMinorUnits(\n Number(`${sign}${integer}${fraction.padEnd(digits, '0')}`),\n currency,\n );\n }\n\n constructor(value: string | StringValueObject) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n const match = Money.FORMAT.exec(this.value);\n assert(match, new InvalidMoneyError(this.value));\n\n const [, sign, integer, fraction = '', code] = match;\n const currency = new Currency(code);\n const minorUnits = new Integer(Number(`${sign}${integer}${fraction}`));\n\n assert(\n fraction.length === currency.getMinorUnitDigits() &&\n Number.isSafeInteger(minorUnits.valueOf()) &&\n !(sign && minorUnits.isZero()),\n new InvalidMoneyError(this.value),\n );\n\n Object.defineProperties(this, {\n currency: { enumerable: false, value: currency },\n minorUnits: { enumerable: false, value: minorUnits },\n });\n }\n\n private ensureSameCurrency(other: Money): void {\n assert(\n this.currency.isEqual(other.currency),\n new CurrencyMismatchError(\n this.currency.valueOf(),\n other.currency.valueOf(),\n ),\n );\n }\n\n public getCurrency(): Currency {\n return this.currency;\n }\n\n public getMinorUnits(): Integer {\n return this.minorUnits;\n }\n\n public isZero(): boolean {\n return this.minorUnits.isZero();\n }\n\n public isNegative(): boolean {\n return this.minorUnits.isLessThan(0);\n }\n\n public isGreaterThan(other: Money): boolean {\n this.ensureSameCurrency(other);\n\n return this.minorUnits.isGreaterThan(other.minorUnits);\n }\n\n public isLessThan(other: Money): boolean {\n this.ensureSameCurrency(other);\n\n return this.minorUnits.isLessThan(other.minorUnits);\n }\n\n public add(other: Money): Money {\n this.ensureSameCurrency(other);\n\n return Money.fromMinorUnits(\n this.minorUnits.add(other.minorUnits),\n this.currency,\n );\n }\n\n public subtract(other: Money): Money {\n this.ensureSameCurrency(other);\n\n return Money.fromMinorUnits(\n this.minorUnits.subtract(other.minorUnits),\n this.currency,\n );\n }\n\n public multiply(factor: number): Money {\n return Money.fromMinorUnits(\n Math.round(this.minorUnits.valueOf() * factor),\n this.currency,\n );\n }\n}\n","import { InvalidDayError } from '../../errors/InvalidDayError';\nimport { assert } from '../../patterns/Assert';\nimport { Integer } from '../Integer';\nimport { NullObject } from '../NullObject';\nimport { NumberValueObject } from '../NumberValueObject';\n\nexport class Day extends Integer {\n constructor(value: number | NumberValueObject) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\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 { 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 { NullObject } from '../NullObject';\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<T extends Timestamp = Timestamp>(\n this: new (value?: TimestampValue) => T,\n value: TimestampValue,\n ): T {\n return new this(value);\n }\n\n public static now<T extends Timestamp = Timestamp>(\n this: new (value?: TimestampValue) => T,\n ): T {\n return new this();\n }\n\n public static fromSeconds<T extends Timestamp = Timestamp>(\n this: new (value?: TimestampValue) => T,\n seconds: number | NumberValueObject,\n ): T {\n return new this(seconds.valueOf() * Timestamp.FACTORS.SECONDS);\n }\n\n public constructor(value?: TimestampValue) {\n super(value === null ? null : Timestamp.valueMilliseconds(value));\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\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 hours = Math.floor(this.value / Timestamp.FACTORS.HOURS);\n\n return this.clone(hours * Timestamp.FACTORS.HOURS);\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<T extends Duration = Duration>(\n this: new (milliseconds: NumberValueObject) => T,\n days: number | NumberValueObject,\n ): T {\n return new this(\n new NumberValueObject(days.valueOf()).multiply(\n Duration.millisecondFactors.DAYS,\n ),\n );\n }\n\n public static fromHours<T extends Duration = Duration>(\n this: new (milliseconds: NumberValueObject) => T,\n hours: number | NumberValueObject,\n ): T {\n return new this(\n new NumberValueObject(hours.valueOf()).multiply(\n Duration.millisecondFactors.HOURS,\n ),\n );\n }\n\n public static fromMinutes<T extends Duration = Duration>(\n this: new (milliseconds: NumberValueObject) => T,\n minutes: number | NumberValueObject,\n ): T {\n return new this(\n new NumberValueObject(minutes.valueOf()).multiply(\n Duration.millisecondFactors.MINUTES,\n ),\n );\n }\n\n public static fromSeconds<T extends Duration = Duration>(\n this: new (milliseconds: NumberValueObject) => T,\n seconds: number | NumberValueObject,\n ): T {\n return new this(\n new NumberValueObject(seconds.valueOf()).multiply(\n Duration.millisecondFactors.SECONDS,\n ),\n );\n }\n\n public static fromMilliseconds<T extends Duration = Duration>(\n this: new (milliseconds: NumberValueObject) => T,\n milliseconds: number | NumberValueObject,\n ): T {\n return new this(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 { NullObject } from '../NullObject';\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 && end ? `${start.valueOf()}-${end.valueOf()}` : null);\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\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 { InvalidFormatError } from '../../errors/InvalidFormatError';\nimport { assert } from '../../patterns/Assert';\nimport { 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 assert(/^[^/]+\\/[^/]+$/.test(value), new InvalidFormatError(value));\n\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 const hasValues =\n month !== null &&\n month !== undefined &&\n year !== null &&\n year !== undefined;\n\n super(\n hasValues\n ? year.valueOf().toString() +\n '/' +\n month.valueOf().toString().padStart(2, '0')\n : null,\n );\n\n if (!hasValues) {\n return this;\n }\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 | undefined;\n\n if (value === undefined) {\n timestamp = new Timestamp();\n } else if (value !== null) {\n timestamp = CalendarDay.timestampFromValue(value);\n }\n\n super(timestamp && CalendarDay.generateStringValue(timestamp));\n\n if (timestamp === undefined) {\n return this;\n }\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 let parsed: string[] | undefined;\n\n if (value !== null && value !== undefined) {\n parsed =\n typeof value === 'number' && minutes !== undefined\n ? Hour.parseFromNumber(value, minutes)\n : Hour.parseFromString(value as string);\n }\n\n super(parsed && `${parsed[0]}:${parsed[1]}`);\n\n if (parsed === undefined) {\n return this;\n }\n\n [this.hours, this.minutes] = parsed;\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 MAX_LENGTH = 254;\n private static readonly PATTERN =\n /^[\\w+\\-.!#$%&'*/=?^`{|}~]{1,64}@(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+(?:[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(), Email.MAX_LENGTH);\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}\n\nexport class UniqueObjectArray<\n T extends ComparableItem,\n> implements Iterable<T> {\n private readonly items: readonly T[];\n private readonly buckets = new Map<string, T[]>();\n\n private static keyOf(item: ComparableItem): string {\n return `${item.constructor.name}:${String(item.valueOf())}`;\n }\n\n public static fromArray<T extends ComparableItem>(\n array: Iterable<T>,\n ): UniqueObjectArray<T> {\n return new UniqueObjectArray<T>(array);\n }\n\n constructor(items: Iterable<T> = []) {\n const unique: T[] = [];\n\n for (const item of items) {\n const key = UniqueObjectArray.keyOf(item);\n const bucket = this.buckets.get(key);\n\n if (bucket === undefined) {\n this.buckets.set(key, [item]);\n unique.push(item);\n } else if (!bucket.some((one) => one.isEqual(item))) {\n bucket.push(item);\n unique.push(item);\n }\n }\n\n this.items = unique;\n }\n\n public get length(): number {\n return this.items.length;\n }\n\n public includes(item: T): boolean {\n const bucket = this.buckets.get(UniqueObjectArray.keyOf(item));\n\n return bucket !== undefined && bucket.some((one) => one.isEqual(item));\n }\n\n public push(...items: T[]): UniqueObjectArray<T> {\n return new UniqueObjectArray<T>([...this.items, ...items]);\n }\n\n public remove(item: T): UniqueObjectArray<T> {\n return this.filter((one) => !one.isEqual(item));\n }\n\n public isEmpty(): boolean {\n return this.items.length === 0;\n }\n\n public at(index: number): T | undefined {\n return this.items.at(index);\n }\n\n public find(predicate: (item: T, index: number) => boolean): T | undefined {\n return this.items.find(predicate);\n }\n\n public filter(\n predicate: (item: T, index: number) => boolean,\n ): UniqueObjectArray<T> {\n return new UniqueObjectArray<T>(this.items.filter(predicate));\n }\n\n public map<U>(callback: (item: T, index: number) => U): U[] {\n return this.items.map(callback);\n }\n\n public some(predicate: (item: T, index: number) => boolean): boolean {\n return this.items.some(predicate);\n }\n\n public every(predicate: (item: T, index: number) => boolean): boolean {\n return this.items.every(predicate);\n }\n\n public forEach(callback: (item: T, index: number) => void): void {\n this.items.forEach(callback);\n }\n\n public reduce<U>(\n callback: (accumulator: U, item: T, index: number) => U,\n initialValue: U,\n ): U {\n return this.items.reduce(callback, initialValue);\n }\n\n public [Symbol.iterator](): Iterator<T> {\n return this.items[Symbol.iterator]();\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":[],"sources":["../src/errors/BaseError.ts","../src/errors/DomainError.ts","../src/errors/CurrencyMismatchError.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/InvalidMoneyError.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/Integer.ts","../src/value-objects/PositiveInteger.ts","../src/value-objects/Enum.ts","../src/value-objects/file-size/FileSizeUnit.ts","../src/value-objects/file-size/FileSize.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/money/Currency.ts","../src/value-objects/money/Money.ts","../src/value-objects/time/Day.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 CurrencyMismatchError extends DomainError {\n constructor(expected: string, received: string) {\n super(`Currency mismatch: expected ${expected}, received ${received}`);\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 InvalidMoneyError extends DomainError {\n constructor(value: unknown) {\n super(`Invalid money ${String(value)}`);\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 public toJSON(): T {\n return this.value;\n }\n}\n","import { InvalidStringLengthError } from '../errors/InvalidStringLengthError';\nimport { assert } from '../patterns/Assert';\nimport { Nullish } from '../types';\nimport { NullObject } from './NullObject';\nimport { ValueObject } from './ValueObject';\n\nexport class StringValueObject extends ValueObject<string> {\n constructor(\n value: string | StringValueObject | Nullish,\n maxLength: number = 512,\n ) {\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(\n value === null || value === undefined || Latitude.isValid(value),\n new InvalidLatitudeError(value?.valueOf()),\n );\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 value === null || value === undefined || Longitude.isValid(value),\n new InvalidLongitudeError(value?.valueOf()),\n );\n super(value?.valueOf());\n }\n}\n","import { NullObject } from '../NullObject';\nimport { 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 const hasValues =\n latitude !== null &&\n latitude !== undefined &&\n longitude !== null &&\n longitude !== undefined;\n\n super(hasValues ? latitude.valueOf() + ',' + longitude.valueOf() : null);\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\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 { 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 { InvalidPositiveNumberError } from '../errors/InvalidPositiveNumberError';\nimport { assert } from '../patterns/Assert';\nimport { Integer } from './Integer';\nimport { NullObject } from './NullObject';\nimport { NumberValueObject } from './NumberValueObject';\n\nexport class PositiveInteger extends Integer {\n constructor(value: number | NumberValueObject) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n assert(this.value >= 0, new InvalidPositiveNumberError());\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 { Enum } from '../Enum';\nimport { PositiveInteger } from '../PositiveInteger';\n\nexport enum EFileSizeUnit {\n BYTE = 'B',\n KILOBYTE = 'kB',\n MEGABYTE = 'MB',\n GIGABYTE = 'GB',\n TERABYTE = 'TB',\n PETABYTE = 'PB',\n KIBIBYTE = 'KiB',\n MEBIBYTE = 'MiB',\n GIBIBYTE = 'GiB',\n TEBIBYTE = 'TiB',\n PEBIBYTE = 'PiB',\n}\n\nconst SI_BASE = 1000;\nconst IEC_BASE = 1024;\n\nexport const fileSizeUnitToBytesMap: Record<EFileSizeUnit, number> = {\n [EFileSizeUnit.BYTE]: 1,\n [EFileSizeUnit.GIBIBYTE]: IEC_BASE ** 3,\n [EFileSizeUnit.GIGABYTE]: SI_BASE ** 3,\n [EFileSizeUnit.KIBIBYTE]: IEC_BASE ** 1,\n [EFileSizeUnit.KILOBYTE]: SI_BASE ** 1,\n [EFileSizeUnit.MEBIBYTE]: IEC_BASE ** 2,\n [EFileSizeUnit.MEGABYTE]: SI_BASE ** 2,\n [EFileSizeUnit.PEBIBYTE]: IEC_BASE ** 5,\n [EFileSizeUnit.PETABYTE]: SI_BASE ** 5,\n [EFileSizeUnit.TEBIBYTE]: IEC_BASE ** 4,\n [EFileSizeUnit.TERABYTE]: SI_BASE ** 4,\n};\n\nexport type FileSizeUnits = readonly [FileSizeUnit, ...FileSizeUnit[]];\n\nexport class FileSizeUnit extends Enum<string> {\n public static readonly BYTE = new FileSizeUnit(EFileSizeUnit.BYTE);\n public static readonly KILOBYTE = new FileSizeUnit(EFileSizeUnit.KILOBYTE);\n public static readonly MEGABYTE = new FileSizeUnit(EFileSizeUnit.MEGABYTE);\n public static readonly GIGABYTE = new FileSizeUnit(EFileSizeUnit.GIGABYTE);\n public static readonly TERABYTE = new FileSizeUnit(EFileSizeUnit.TERABYTE);\n public static readonly PETABYTE = new FileSizeUnit(EFileSizeUnit.PETABYTE);\n public static readonly KIBIBYTE = new FileSizeUnit(EFileSizeUnit.KIBIBYTE);\n public static readonly MEBIBYTE = new FileSizeUnit(EFileSizeUnit.MEBIBYTE);\n public static readonly GIBIBYTE = new FileSizeUnit(EFileSizeUnit.GIBIBYTE);\n public static readonly TEBIBYTE = new FileSizeUnit(EFileSizeUnit.TEBIBYTE);\n public static readonly PEBIBYTE = new FileSizeUnit(EFileSizeUnit.PEBIBYTE);\n\n public static readonly SI: FileSizeUnits = [\n FileSizeUnit.BYTE,\n FileSizeUnit.KILOBYTE,\n FileSizeUnit.MEGABYTE,\n FileSizeUnit.GIGABYTE,\n FileSizeUnit.TERABYTE,\n FileSizeUnit.PETABYTE,\n ];\n\n public static readonly IEC: FileSizeUnits = [\n FileSizeUnit.BYTE,\n FileSizeUnit.KIBIBYTE,\n FileSizeUnit.MEBIBYTE,\n FileSizeUnit.GIBIBYTE,\n FileSizeUnit.TEBIBYTE,\n FileSizeUnit.PEBIBYTE,\n ];\n\n public getValues(): string[] {\n return Object.values(EFileSizeUnit);\n }\n\n public getBytes(): PositiveInteger {\n return new PositiveInteger(\n fileSizeUnitToBytesMap[this.value as EFileSizeUnit],\n );\n }\n}\n","import { InvalidFormatError } from '../../errors/InvalidFormatError';\nimport { assert } from '../../patterns/Assert';\nimport { NumberValueObject } from '../NumberValueObject';\nimport { PositiveInteger } from '../PositiveInteger';\nimport { FileSizeUnit, FileSizeUnits } from './FileSizeUnit';\n\nexport interface HumanReadableFileSize {\n value: NumberValueObject;\n unit: FileSizeUnit;\n}\n\nexport class FileSize extends PositiveInteger {\n private static readonly FORMAT = /^(\\d+(?:\\.\\d+)?)\\s*(\\S+)$/;\n\n public static fromBytes<T extends FileSize = FileSize>(\n this: new (bytes: number | NumberValueObject) => T,\n bytes: number | NumberValueObject,\n ): T {\n return new this(bytes);\n }\n\n public static from<T extends FileSize = FileSize>(\n this: new (bytes: number | NumberValueObject) => T,\n value: number | NumberValueObject,\n unit: FileSizeUnit,\n ): T {\n return new this(Math.round(value.valueOf() * unit.getBytes().valueOf()));\n }\n\n public static parse<T extends FileSize = FileSize>(\n this: new (bytes: number | NumberValueObject) => T,\n text: string,\n ): T {\n const match = FileSize.FORMAT.exec(text.trim());\n\n assert(match, new InvalidFormatError(text));\n\n const [, value, symbol] = match;\n const unit = new FileSizeUnit(symbol);\n\n return new this(Math.round(Number(value) * unit.getBytes().valueOf()));\n }\n\n public add(other: FileSize): FileSize {\n return this.clone(this.value + other.valueOf());\n }\n\n public subtract(other: FileSize): FileSize {\n return this.clone(this.value - other.valueOf());\n }\n\n public toBytes(): PositiveInteger {\n return new PositiveInteger(this.value);\n }\n\n public to(unit: FileSizeUnit): NumberValueObject {\n return new NumberValueObject(this.value / unit.getBytes().valueOf());\n }\n\n public toHumanReadable(units: FileSizeUnits): HumanReadableFileSize {\n const [smallest, ...rest] = [...units].sort((a, b) =>\n a.getBytes().isLessThan(b.getBytes()) ? -1 : 1,\n );\n const unit = rest.reduce(\n (fitting, candidate) =>\n this.isGreaterOrEqualThan(candidate.getBytes()) ? candidate : fitting,\n smallest,\n );\n\n return { unit, value: this.to(unit) };\n }\n}\n","import { 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 const bytes = Array.from(this.valueOf().matchAll(/../g), ([pair]) =>\n parseInt(pair, 16),\n );\n\n return new StringValueObject(btoa(String.fromCharCode(...bytes)));\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 { InvalidHashError } from '../../errors/InvalidHashError';\nimport { assert } from '../../patterns';\nimport { NullObject } from '../NullObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { Hash } from './Hash';\n\nexport class SHA256Hash extends Hash {\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","import { InvalidHashError } from '../../errors/InvalidHashError';\nimport { assert } from '../../patterns';\nimport { NullObject } from '../NullObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { Hash } from './Hash';\n\nexport class SHA512Hash extends Hash {\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","import { 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 bytes = new Uint8Array(12);\n new DataView(bytes.buffer).setUint32(0, Math.floor(Date.now() / 1000));\n bytes.set(globalThis.crypto.getRandomValues(new Uint8Array(8)), 4);\n\n return Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join(\n '',\n );\n }\n\n public static generate<T extends ShortId = ShortId>(\n this: new (value: string) => T,\n ): T {\n return new this(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 { 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<T extends UUID = UUID>(\n this: new (value: string) => T,\n ): T {\n const bytes = globalThis.crypto.getRandomValues(new Uint8Array(16));\n // RFC 4122 §4.4: version 4 and variant 10xx.\n bytes[6] = (bytes[6] % 16) + 64;\n bytes[8] = (bytes[8] % 64) + 128;\n const hex = Array.from(bytes, (byte) =>\n byte.toString(16).padStart(2, '0'),\n ).join('');\n\n return new this(\n [\n hex.slice(0, 8),\n hex.slice(8, 12),\n hex.slice(12, 16),\n hex.slice(16, 20),\n hex.slice(20),\n ].join('-'),\n );\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 { NullObject } from '../NullObject';\nimport { ValueObject } from '../ValueObject';\n\nexport class Media extends ValueObject<string> {\n private static readonly BASE64_CHUNK_SIZE = 0x8000;\n\n private readonly buffer?: Uint8Array;\n\n constructor(value: string | Uint8Array) {\n super(\n value instanceof Uint8Array\n ? new TextDecoder('utf-8', { ignoreBOM: true }).decode(value)\n : value,\n );\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n this.buffer =\n value instanceof Uint8Array ? new Uint8Array(value) : undefined;\n }\n\n public getBuffer(): Uint8Array {\n return this.buffer === undefined\n ? new TextEncoder().encode(this.value)\n : new Uint8Array(this.buffer);\n }\n\n public getSize(): number {\n return this.getBuffer().length;\n }\n\n public getBase64(): string {\n const bytes = this.getBuffer();\n const chunks: string[] = [];\n\n // Chunked so large payloads do not overflow the call stack.\n for (let i = 0; i < bytes.length; i += Media.BASE64_CHUNK_SIZE) {\n chunks.push(\n String.fromCharCode(...bytes.subarray(i, i + Media.BASE64_CHUNK_SIZE)),\n );\n }\n\n return btoa(chunks.join(''));\n }\n\n public hasValue(other: unknown): boolean {\n let otherBytes: Uint8Array | undefined;\n\n if (other instanceof Media) {\n otherBytes = other.getBuffer();\n } else if (other instanceof Uint8Array) {\n otherBytes = other;\n }\n\n if (otherBytes === undefined) {\n return super.hasValue(other);\n }\n\n const bytes = this.getBuffer();\n\n return (\n bytes.length === otherBytes.length &&\n bytes.every((byte, i) => byte === otherBytes[i])\n );\n }\n}\n","import { InvalidFormatError } from '../../errors/InvalidFormatError';\nimport { assert } from '../../patterns/Assert';\nimport { Enum } from '../Enum';\n\nexport class Currency extends Enum<string> {\n private static readonly MINOR_UNIT_DIGITS: Record<string, number> = {\n AED: 2,\n ARS: 2,\n AUD: 2,\n BRL: 2,\n CAD: 2,\n CHF: 2,\n CLP: 0,\n CNY: 2,\n COP: 2,\n CRC: 2,\n CZK: 2,\n DKK: 2,\n EUR: 2,\n GBP: 2,\n HKD: 2,\n HUF: 2,\n IDR: 2,\n ILS: 2,\n INR: 2,\n ISK: 0,\n JPY: 0,\n KRW: 0,\n KWD: 3,\n MXN: 2,\n NOK: 2,\n NZD: 2,\n PEN: 2,\n PLN: 2,\n RON: 2,\n SEK: 2,\n SGD: 2,\n THB: 2,\n TRY: 2,\n USD: 2,\n ZAR: 2,\n };\n\n private static readonly SYMBOLS: Record<string, string> = {\n $: 'USD',\n '£': 'GBP',\n '¥': 'JPY',\n '₡': 'CRC',\n '₩': 'KRW',\n '₪': 'ILS',\n '€': 'EUR',\n '₹': 'INR',\n '₺': 'TRY',\n };\n\n public static fromSymbol(symbol: string): Currency {\n const code = Currency.SYMBOLS[symbol];\n assert(code, new InvalidFormatError(symbol));\n\n return new Currency(code);\n }\n\n public getValues(): string[] {\n return Object.keys(Currency.MINOR_UNIT_DIGITS);\n }\n\n public getMinorUnitDigits(): number {\n return Currency.MINOR_UNIT_DIGITS[this.valueOf()];\n }\n}\n","import { CurrencyMismatchError } from '../../errors/CurrencyMismatchError';\nimport { InvalidMoneyError } from '../../errors/InvalidMoneyError';\nimport { assert } from '../../patterns/Assert';\nimport { Integer } from '../Integer';\nimport { NullObject } from '../NullObject';\nimport { NumberValueObject } from '../NumberValueObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { ValueObject } from '../ValueObject';\nimport { Currency } from './Currency';\n\nexport class Money extends ValueObject<string> {\n private static readonly FORMAT = /^(-?)(\\d+)(?:\\.(\\d+))? ([A-Z]{3})$/;\n private static readonly TEXT_FORMAT =\n /^(-?)(?:([^\\d\\s.-]+)\\s*)?(\\d+(?:\\.\\d+)?)(?:\\s*([^\\d\\s.-]+))?$/;\n\n private readonly currency!: Currency;\n private readonly minorUnits!: Integer;\n\n public static fromMinorUnits(\n minorUnits: number | NumberValueObject,\n currency: string | Currency,\n ): Money {\n const units = new Integer(minorUnits.valueOf());\n assert(Number.isSafeInteger(units.valueOf()), new InvalidMoneyError(units));\n\n const code = new Currency(currency.valueOf());\n const digits = code.getMinorUnitDigits();\n const padded = String(Math.abs(units.valueOf())).padStart(digits + 1, '0');\n const integer = padded.slice(0, padded.length - digits);\n const fraction =\n digits > 0 ? `.${padded.slice(padded.length - digits)}` : '';\n const sign = units.isLessThan(0) ? '-' : '';\n\n return new Money(`${sign}${integer}${fraction} ${code}`);\n }\n\n public static fromString(text: string): Money {\n const match = Money.TEXT_FORMAT.exec(text.trim());\n assert(match, new InvalidMoneyError(text));\n\n const [, sign, prefix, amount, suffix] = match;\n assert(!prefix !== !suffix, new InvalidMoneyError(text));\n\n const token = prefix ?? suffix;\n const currency = /^[A-Za-z]{3}$/.test(token)\n ? new Currency(token.toUpperCase())\n : Currency.fromSymbol(token);\n const [integer, fraction = ''] = amount.split('.');\n const digits = currency.getMinorUnitDigits();\n assert(fraction.length <= digits, new InvalidMoneyError(text));\n\n return Money.fromMinorUnits(\n Number(`${sign}${integer}${fraction.padEnd(digits, '0')}`),\n currency,\n );\n }\n\n constructor(value: string | StringValueObject) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\n\n const match = Money.FORMAT.exec(this.value);\n assert(match, new InvalidMoneyError(this.value));\n\n const [, sign, integer, fraction = '', code] = match;\n const currency = new Currency(code);\n const minorUnits = new Integer(Number(`${sign}${integer}${fraction}`));\n\n assert(\n fraction.length === currency.getMinorUnitDigits() &&\n Number.isSafeInteger(minorUnits.valueOf()) &&\n !(sign && minorUnits.isZero()),\n new InvalidMoneyError(this.value),\n );\n\n Object.defineProperties(this, {\n currency: { enumerable: false, value: currency },\n minorUnits: { enumerable: false, value: minorUnits },\n });\n }\n\n private ensureSameCurrency(other: Money): void {\n assert(\n this.currency.isEqual(other.currency),\n new CurrencyMismatchError(\n this.currency.valueOf(),\n other.currency.valueOf(),\n ),\n );\n }\n\n public getCurrency(): Currency {\n return this.currency;\n }\n\n public getMinorUnits(): Integer {\n return this.minorUnits;\n }\n\n public isZero(): boolean {\n return this.minorUnits.isZero();\n }\n\n public isNegative(): boolean {\n return this.minorUnits.isLessThan(0);\n }\n\n public isGreaterThan(other: Money): boolean {\n this.ensureSameCurrency(other);\n\n return this.minorUnits.isGreaterThan(other.minorUnits);\n }\n\n public isLessThan(other: Money): boolean {\n this.ensureSameCurrency(other);\n\n return this.minorUnits.isLessThan(other.minorUnits);\n }\n\n public add(other: Money): Money {\n this.ensureSameCurrency(other);\n\n return Money.fromMinorUnits(\n this.minorUnits.add(other.minorUnits),\n this.currency,\n );\n }\n\n public subtract(other: Money): Money {\n this.ensureSameCurrency(other);\n\n return Money.fromMinorUnits(\n this.minorUnits.subtract(other.minorUnits),\n this.currency,\n );\n }\n\n public multiply(factor: number): Money {\n return Money.fromMinorUnits(\n Math.round(this.minorUnits.valueOf() * factor),\n this.currency,\n );\n }\n}\n","import { InvalidDayError } from '../../errors/InvalidDayError';\nimport { assert } from '../../patterns/Assert';\nimport { Integer } from '../Integer';\nimport { NullObject } from '../NullObject';\nimport { NumberValueObject } from '../NumberValueObject';\n\nexport class Day extends Integer {\n constructor(value: number | NumberValueObject) {\n super(value?.valueOf());\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\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 { 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 { NullObject } from '../NullObject';\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<T extends Timestamp = Timestamp>(\n this: new (value?: TimestampValue) => T,\n value: TimestampValue,\n ): T {\n return new this(value);\n }\n\n public static now<T extends Timestamp = Timestamp>(\n this: new (value?: TimestampValue) => T,\n ): T {\n return new this();\n }\n\n public static fromSeconds<T extends Timestamp = Timestamp>(\n this: new (value?: TimestampValue) => T,\n seconds: number | NumberValueObject,\n ): T {\n return new this(seconds.valueOf() * Timestamp.FACTORS.SECONDS);\n }\n\n public constructor(value?: TimestampValue) {\n super(value === null ? null : Timestamp.valueMilliseconds(value));\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\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 hours = Math.floor(this.value / Timestamp.FACTORS.HOURS);\n\n return this.clone(hours * Timestamp.FACTORS.HOURS);\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<T extends Duration = Duration>(\n this: new (milliseconds: NumberValueObject) => T,\n days: number | NumberValueObject,\n ): T {\n return new this(\n new NumberValueObject(days.valueOf()).multiply(\n Duration.millisecondFactors.DAYS,\n ),\n );\n }\n\n public static fromHours<T extends Duration = Duration>(\n this: new (milliseconds: NumberValueObject) => T,\n hours: number | NumberValueObject,\n ): T {\n return new this(\n new NumberValueObject(hours.valueOf()).multiply(\n Duration.millisecondFactors.HOURS,\n ),\n );\n }\n\n public static fromMinutes<T extends Duration = Duration>(\n this: new (milliseconds: NumberValueObject) => T,\n minutes: number | NumberValueObject,\n ): T {\n return new this(\n new NumberValueObject(minutes.valueOf()).multiply(\n Duration.millisecondFactors.MINUTES,\n ),\n );\n }\n\n public static fromSeconds<T extends Duration = Duration>(\n this: new (milliseconds: NumberValueObject) => T,\n seconds: number | NumberValueObject,\n ): T {\n return new this(\n new NumberValueObject(seconds.valueOf()).multiply(\n Duration.millisecondFactors.SECONDS,\n ),\n );\n }\n\n public static fromMilliseconds<T extends Duration = Duration>(\n this: new (milliseconds: NumberValueObject) => T,\n milliseconds: number | NumberValueObject,\n ): T {\n return new this(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 { NullObject } from '../NullObject';\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 && end ? `${start.valueOf()}-${end.valueOf()}` : null);\n\n if (NullObject.isNullObject(this)) {\n return this;\n }\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 { InvalidFormatError } from '../../errors/InvalidFormatError';\nimport { assert } from '../../patterns/Assert';\nimport { 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 assert(/^[^/]+\\/[^/]+$/.test(value), new InvalidFormatError(value));\n\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 const hasValues =\n month !== null &&\n month !== undefined &&\n year !== null &&\n year !== undefined;\n\n super(\n hasValues\n ? year.valueOf().toString() +\n '/' +\n month.valueOf().toString().padStart(2, '0')\n : null,\n );\n\n if (!hasValues) {\n return this;\n }\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 | undefined;\n\n if (value === undefined) {\n timestamp = new Timestamp();\n } else if (value !== null) {\n timestamp = CalendarDay.timestampFromValue(value);\n }\n\n super(timestamp && CalendarDay.generateStringValue(timestamp));\n\n if (timestamp === undefined) {\n return this;\n }\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 let parsed: string[] | undefined;\n\n if (value !== null && value !== undefined) {\n parsed =\n typeof value === 'number' && minutes !== undefined\n ? Hour.parseFromNumber(value, minutes)\n : Hour.parseFromString(value as string);\n }\n\n super(parsed && `${parsed[0]}:${parsed[1]}`);\n\n if (parsed === undefined) {\n return this;\n }\n\n [this.hours, this.minutes] = parsed;\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 MAX_LENGTH = 254;\n private static readonly PATTERN =\n /^[\\w+\\-.!#$%&'*/=?^`{|}~]{1,64}@(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+(?:[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(), Email.MAX_LENGTH);\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}\n\nexport class UniqueObjectArray<\n T extends ComparableItem,\n> implements Iterable<T> {\n private readonly items: readonly T[];\n private readonly buckets = new Map<string, T[]>();\n\n private static keyOf(item: ComparableItem): string {\n return `${item.constructor.name}:${String(item.valueOf())}`;\n }\n\n public static fromArray<T extends ComparableItem>(\n array: Iterable<T>,\n ): UniqueObjectArray<T> {\n return new UniqueObjectArray<T>(array);\n }\n\n constructor(items: Iterable<T> = []) {\n const unique: T[] = [];\n\n for (const item of items) {\n const key = UniqueObjectArray.keyOf(item);\n const bucket = this.buckets.get(key);\n\n if (bucket === undefined) {\n this.buckets.set(key, [item]);\n unique.push(item);\n } else if (!bucket.some((one) => one.isEqual(item))) {\n bucket.push(item);\n unique.push(item);\n }\n }\n\n this.items = unique;\n }\n\n public get length(): number {\n return this.items.length;\n }\n\n public includes(item: T): boolean {\n const bucket = this.buckets.get(UniqueObjectArray.keyOf(item));\n\n return bucket !== undefined && bucket.some((one) => one.isEqual(item));\n }\n\n public push(...items: T[]): UniqueObjectArray<T> {\n return new UniqueObjectArray<T>([...this.items, ...items]);\n }\n\n public remove(item: T): UniqueObjectArray<T> {\n return this.filter((one) => !one.isEqual(item));\n }\n\n public isEmpty(): boolean {\n return this.items.length === 0;\n }\n\n public at(index: number): T | undefined {\n return this.items.at(index);\n }\n\n public find(predicate: (item: T, index: number) => boolean): T | undefined {\n return this.items.find(predicate);\n }\n\n public filter(\n predicate: (item: T, index: number) => boolean,\n ): UniqueObjectArray<T> {\n return new UniqueObjectArray<T>(this.items.filter(predicate));\n }\n\n public map<U>(callback: (item: T, index: number) => U): U[] {\n return this.items.map(callback);\n }\n\n public some(predicate: (item: T, index: number) => boolean): boolean {\n return this.items.some(predicate);\n }\n\n public every(predicate: (item: T, index: number) => boolean): boolean {\n return this.items.every(predicate);\n }\n\n public forEach(callback: (item: T, index: number) => void): void {\n this.items.forEach(callback);\n }\n\n public reduce<U>(\n callback: (accumulator: U, item: T, index: number) => U,\n initialValue: U,\n ): U {\n return this.items.reduce(callback, initialValue);\n }\n\n public [Symbol.iterator](): Iterator<T> {\n return this.items[Symbol.iterator]();\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
@@ -407,6 +407,62 @@ export declare class Coordinates extends StringValueObject {
407
407
  getLongitude(): Longitude;
408
408
  }
409
409
  //#endregion
410
+ //#region src/value-objects/PositiveInteger.d.ts
411
+ export declare class PositiveInteger extends Integer {
412
+ constructor(value: number | NumberValueObject);
413
+ }
414
+ //#endregion
415
+ //#region src/value-objects/file-size/FileSizeUnit.d.ts
416
+ export declare enum EFileSizeUnit {
417
+ BYTE = "B",
418
+ KILOBYTE = "kB",
419
+ MEGABYTE = "MB",
420
+ GIGABYTE = "GB",
421
+ TERABYTE = "TB",
422
+ PETABYTE = "PB",
423
+ KIBIBYTE = "KiB",
424
+ MEBIBYTE = "MiB",
425
+ GIBIBYTE = "GiB",
426
+ TEBIBYTE = "TiB",
427
+ PEBIBYTE = "PiB"
428
+ }
429
+ export declare const fileSizeUnitToBytesMap: Record<EFileSizeUnit, number>;
430
+ export type FileSizeUnits = readonly [FileSizeUnit, ...FileSizeUnit[]];
431
+ export declare class FileSizeUnit extends Enum<string> {
432
+ static readonly BYTE: FileSizeUnit;
433
+ static readonly KILOBYTE: FileSizeUnit;
434
+ static readonly MEGABYTE: FileSizeUnit;
435
+ static readonly GIGABYTE: FileSizeUnit;
436
+ static readonly TERABYTE: FileSizeUnit;
437
+ static readonly PETABYTE: FileSizeUnit;
438
+ static readonly KIBIBYTE: FileSizeUnit;
439
+ static readonly MEBIBYTE: FileSizeUnit;
440
+ static readonly GIBIBYTE: FileSizeUnit;
441
+ static readonly TEBIBYTE: FileSizeUnit;
442
+ static readonly PEBIBYTE: FileSizeUnit;
443
+ static readonly SI: FileSizeUnits;
444
+ static readonly IEC: FileSizeUnits;
445
+ getValues(): string[];
446
+ getBytes(): PositiveInteger;
447
+ }
448
+ //#endregion
449
+ //#region src/value-objects/file-size/FileSize.d.ts
450
+ export interface HumanReadableFileSize {
451
+ value: NumberValueObject;
452
+ unit: FileSizeUnit;
453
+ }
454
+ export declare class FileSize extends PositiveInteger {
455
+ private static readonly FORMAT;
456
+ static fromBytes<T extends FileSize = FileSize>(this: new (bytes: number | NumberValueObject) => T, bytes: number | NumberValueObject): T;
457
+ static from<T extends FileSize = FileSize>(this: new (bytes: number | NumberValueObject) => T, value: number | NumberValueObject, unit: FileSizeUnit): T;
458
+ static parse<T extends FileSize = FileSize>(this: new (bytes: number | NumberValueObject) => T, text: string): T;
459
+ add(other: FileSize): FileSize;
460
+ subtract(other: FileSize): FileSize;
461
+ toBytes(): PositiveInteger;
462
+ to(unit: FileSizeUnit): NumberValueObject;
463
+ toHumanReadable(units: FileSizeUnits): HumanReadableFileSize;
464
+ }
465
+ //#endregion
410
466
  //#region src/value-objects/hashes/Hash.d.ts
411
467
  export declare abstract class Hash extends ValueObject<string> {
412
468
  constructor(source: string | StringValueObject);
@@ -586,4 +642,5 @@ export declare class UniqueObjectArray<T extends ComparableItem> implements Iter
586
642
  toArray(): T[];
587
643
  }
588
644
  //#endregion
645
+ export {};
589
646
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/errors/BaseError.ts","../src/errors/DomainError.ts","../src/errors/CurrencyMismatchError.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/InvalidMoneyError.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/money/Currency.ts","../src/value-objects/money/Money.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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"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/errors/BaseError.ts","../src/errors/DomainError.ts","../src/errors/CurrencyMismatchError.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/InvalidMoneyError.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/PositiveInteger.ts","../src/value-objects/file-size/FileSizeUnit.ts","../src/value-objects/file-size/FileSize.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/money/Currency.ts","../src/value-objects/money/Money.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/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
1
  import runtime from './index.cjs';
2
- export const { BaseError, CalendarDay, Color, Coordinates, Currency, CurrencyMismatchError, Day, DayOfWeek, DomainError, Duration, EDaysOfWeek, Email, Enum, Hash, Hour, Integer, InvalidColorError, InvalidDayError, InvalidDayFormatError, InvalidEmailError, InvalidFormatError, InvalidHashError, InvalidHourError, InvalidIntegerError, InvalidLatitudeError, InvalidLengthError, InvalidLongitudeError, InvalidMinutesError, InvalidMoneyError, InvalidNumberError, InvalidPasswordError, InvalidPositiveNumberError, InvalidStringLengthError, InvalidTimestampIntervalError, Latitude, Longitude, MD5Hash, Media, Money, Month, MonthOfYear, NullObject, NullObjectCreationDisabledError, NullObjectError, NumberValueObject, Password, PositiveNumber, SHA256Hash, SHA512Hash, ShortId, StringValueObject, Timestamp, TimestampInterval, UUID, UniqueObjectArray, ValueNotInEnumError, ValueObject, Year, assert, timeStampDayToDaysMap } = runtime;
2
+ export const { BaseError, CalendarDay, Color, Coordinates, Currency, CurrencyMismatchError, Day, DayOfWeek, DomainError, Duration, EDaysOfWeek, EFileSizeUnit, Email, Enum, FileSize, FileSizeUnit, Hash, Hour, Integer, InvalidColorError, InvalidDayError, InvalidDayFormatError, InvalidEmailError, InvalidFormatError, InvalidHashError, InvalidHourError, InvalidIntegerError, InvalidLatitudeError, InvalidLengthError, InvalidLongitudeError, InvalidMinutesError, InvalidMoneyError, InvalidNumberError, InvalidPasswordError, InvalidPositiveNumberError, InvalidStringLengthError, InvalidTimestampIntervalError, Latitude, Longitude, MD5Hash, Media, Money, Month, MonthOfYear, NullObject, NullObjectCreationDisabledError, NullObjectError, NumberValueObject, Password, PositiveInteger, PositiveNumber, SHA256Hash, SHA512Hash, ShortId, StringValueObject, Timestamp, TimestampInterval, UUID, UniqueObjectArray, ValueNotInEnumError, ValueObject, Year, assert, fileSizeUnitToBytesMap, timeStampDayToDaysMap } = runtime;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haskou/value-objects",
3
- "version": "8.3.4",
3
+ "version": "8.4.1",
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",
@@ -73,14 +73,14 @@
73
73
  "@arethetypeswrong/core": "^0.18.5",
74
74
  "@haskou/eslint-config": "^0.2.2",
75
75
  "@types/jest": "^30.0.0",
76
- "@types/node": "^26.6.4",
76
+ "@types/node": "^26.6.5",
77
77
  "eslint": "^10.12.0",
78
78
  "jest": "^30.5.2",
79
79
  "jest-extended": "^7.0.0",
80
- "prettier": "^3.9.9",
80
+ "prettier": "^3.9.10",
81
81
  "publint": "^0.3.25",
82
82
  "ts-jest": "^29.4.14",
83
- "tsdown": "^0.23.0",
83
+ "tsdown": "^0.23.1",
84
84
  "typescript": "^6.0.3",
85
85
  "vitepress": "^1.6.4"
86
86
  }