{"version":3,"file":"index.cjs","names":["Buffer","Buffer","Buffer","parse","uuidV4","Buffer","uuidV4","Buffer"],"sources":["../src/errors/BaseError.ts","../src/errors/DomainError.ts","../src/errors/InvalidColorError.ts","../src/errors/InvalidDayError.ts","../src/errors/InvalidDayFormatError.ts","../src/errors/InvalidHourError.ts","../src/errors/InvalidEmailError.ts","../src/errors/InvalidFormatError.ts","../src/errors/InvalidHashError.ts","../src/errors/InvalidIntegerError.ts","../src/errors/InvalidLatitudeError.ts","../src/errors/InvalidLongitudeError.ts","../src/errors/InvalidMinutesError.ts","../src/errors/InvalidNumberError.ts","../src/errors/InvalidPasswordError.ts","../src/errors/InvalidPositiveNumberError.ts","../src/errors/InvalidStringLengthError.ts","../src/errors/InvalidTimestampIntervalError.ts","../src/errors/InvalidLengthError.ts","../src/errors/NullObjectCreationDisabledError.ts","../src/errors/NullObjectError.ts","../src/errors/ValueNotInEnumError.ts","../src/patterns/Assert.ts","../src/value-objects/NullObject.ts","../src/value-objects/ValueObject.ts","../src/value-objects/StringValueObject.ts","../src/value-objects/NumberValueObject.ts","../src/value-objects/coordinates/Latitude.ts","../src/value-objects/coordinates/Longitude.ts","../src/value-objects/coordinates/Coordinates.ts","../src/value-objects/hashes/Hash.ts","../src/value-objects/hashes/MD5Hash.ts","../src/value-objects/hashes/SHA256Hash.ts","../src/value-objects/hashes/SHA512Hash.ts","../src/value-objects/ids/ShortId.ts","../src/value-objects/ids/UUID.ts","../src/value-objects/media/Media.ts","../src/value-objects/Integer.ts","../src/value-objects/time/Day.ts","../src/value-objects/Enum.ts","../src/value-objects/time/DayOfWeek.ts","../src/value-objects/time/Month.ts","../src/value-objects/time/Year.ts","../src/value-objects/time/Timestamp.ts","../src/value-objects/PositiveNumber.ts","../src/value-objects/time/Duration.ts","../src/value-objects/time/TimestampInterval.ts","../src/value-objects/time/MonthOfYear.ts","../src/value-objects/time/CalendarDay.ts","../src/value-objects/time/Hour.ts","../src/value-objects/Color.ts","../src/value-objects/Email.ts","../src/value-objects/Password.ts","../src/value-objects/UniqueObjectArray.ts"],"sourcesContent":["export class BaseError extends Error {\n  private readonly isBaseError = true;\n  public static isBaseError(error: unknown): boolean {\n    return !!(error as BaseError).isBaseError;\n  }\n\n  constructor(message: string, prototype: object = BaseError.prototype) {\n    super(message);\n    this.name = this.constructor.name;\n    Object.setPrototypeOf(this, prototype);\n  }\n\n  public toString(): string {\n    return `[${this.name}]: ${this.message}`;\n  }\n\n  public getStack(): string {\n    return this.stack || '';\n  }\n}\n","import { BaseError } from './BaseError';\n\nexport class DomainError extends BaseError {\n  protected readonly isDomainError = true;\n  public static isDomainError(error: unknown): boolean {\n    return !!(error as DomainError).isDomainError;\n  }\n\n  constructor(message: string) {\n    super(message, new.target.prototype);\n  }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidColorError extends DomainError {\n  constructor(value: string) {\n    super(`Invalid color value: ${value}. Must be a valid hex color code.`);\n  }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidDayError extends DomainError {\n  constructor(invalidDay: unknown) {\n    super(`Invalid day ${String(invalidDay)}`);\n  }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidDayFormatError extends DomainError {\n  constructor(invalidDate: string) {\n    super(`Invalid day ${invalidDate}. Expected YYYY-MM-DD. `);\n  }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidHourError extends DomainError {\n  constructor() {\n    super(`Invalid hour`);\n  }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidEmailError extends DomainError {\n  constructor(value: string) {\n    super(`Invalid email format: ${value}`);\n  }\n}\n","import { DomainError } from '../errors/DomainError';\n\nexport class InvalidFormatError extends DomainError {\n  constructor(value?: string) {\n    super(`Invalid Format Error with value: '${value}'`);\n  }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidHashError extends DomainError {\n  constructor(type: string, value: string) {\n    super(`Invalid ${type} hash: ${value}`);\n  }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidIntegerError extends DomainError {\n  constructor(value: number) {\n    super(`Invalid integer value ${value}`);\n  }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidLatitudeError extends DomainError {\n  constructor(value: number) {\n    super(`Invalid latitude: ${value}. Must be between -90 and 90`);\n  }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidLongitudeError extends DomainError {\n  constructor(value: number) {\n    super(`Invalid longitude: ${value}. Must be between -180 and 180`);\n  }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidMinutesError extends DomainError {\n  constructor() {\n    super(`Invalid minutes`);\n  }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidNumberError extends DomainError {\n  constructor(invalidNumber: unknown) {\n    super(`Invalid number ${String(invalidNumber)}`);\n  }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidPasswordError extends DomainError {\n  constructor(minLength: number, maxLength: number) {\n    super(\n      `Password must be between ${minLength} and ${maxLength} characters long and include at least one uppercase letter, one lowercase letter, one number and one symbol.`,\n    );\n  }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidPositiveNumberError extends DomainError {\n  constructor() {\n    super(`Value must be greater or equal than 0`);\n  }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidStringLengthError extends DomainError {\n  constructor(value: string, length: number) {\n    super(\n      `String length '${value.length}' exceeds the expected length: '${length}'`,\n    );\n  }\n}\n","import { Timestamp } from '../value-objects/time/Timestamp';\nimport { DomainError } from './DomainError';\n\nexport class InvalidTimestampIntervalError extends DomainError {\n  constructor(start: Timestamp, end: Timestamp) {\n    super(\n      `Invalid TimestampInterval, start (${start.valueOf()}) must be before the end (${end.valueOf()})`,\n    );\n  }\n}\n","import { DomainError } from './DomainError';\n\nexport class InvalidLengthError extends DomainError {\n  constructor(value: unknown, length: number) {\n    super(\n      `Invalid Length Error with value: '${value}' expected length: '${length}'`,\n    );\n  }\n}\n","import { DomainError } from './DomainError';\n\nexport class NullObjectCreationDisabledError extends DomainError {\n  constructor(valueObjectName: string) {\n    super(\n      `[NullObjectCreationDisabledError]: ${valueObjectName} received null or undefined while automatic NullObject creation is disabled`,\n    );\n    Object.setPrototypeOf(this, NullObjectCreationDisabledError.prototype);\n  }\n}\n","import { DomainError } from './DomainError';\n\nexport class NullObjectError extends DomainError {\n  constructor(message: string) {\n    super(`[NullObjectError]: ${message} is NullObject`);\n    Object.setPrototypeOf(this, NullObjectError.prototype);\n  }\n}\n","import { DomainError } from './DomainError';\n\nexport class ValueNotInEnumError extends DomainError {\n  constructor(value: unknown, enumerate: unknown) {\n    super(\n      `${Object.values(enumerate as object).join(',')} enum does not include value: ${value}`,\n    );\n  }\n}\n","import { BaseError } from '../errors/BaseError';\nimport { DomainError } from '../errors/DomainError';\n\nexport type Errors = Error | BaseError | DomainError | string;\n\nexport function assert(\n  condition: boolean | unknown | undefined,\n  error: string | Errors,\n): asserts condition {\n  if (condition) {\n    return;\n  }\n\n  throw typeof error === 'string' ? new DomainError(error) : error;\n}\n","import { NullObjectError } from '../errors/NullObjectError';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor<T> = abstract new (...args: any[]) => T;\ntype NullableObject = Nullable & Record<string, unknown>;\ninterface Nullable {\n  isNullObject: boolean;\n  valueOf(): undefined;\n}\n\nexport abstract class NullObject {\n  private static setFakeProps<T>(\n    nullObject: NullableObject,\n    klass: Constructor<T>,\n  ): void {\n    const visited = new Set<string>();\n    let proto = klass.prototype;\n\n    while (proto && proto !== Object.prototype) {\n      const props = Object.getOwnPropertyNames(proto);\n\n      for (const prop of props) {\n        if (\n          prop === 'constructor' ||\n          prop === 'isNullObject' ||\n          prop === 'valueOf' ||\n          visited.has(prop)\n        ) {\n          continue;\n        }\n\n        visited.add(prop);\n        // eslint-disable-next-line no-param-reassign\n        nullObject[prop] = () => {\n          throw new NullObjectError(klass.name);\n        };\n      }\n\n      proto = Object.getPrototypeOf(proto);\n    }\n\n    Object.setPrototypeOf(nullObject, NullObject.prototype);\n  }\n\n  public static new<T>(klass: Constructor<T>): T {\n    const nullObject: NullableObject = {\n      isNullObject: true,\n      valueOf: () => {\n        return undefined;\n      },\n    };\n    NullObject.setFakeProps(nullObject, klass);\n\n    return nullObject as T;\n  }\n\n  public static isNullObject(nullable: unknown): boolean {\n    return !!(nullable as NullableObject)?.isNullObject;\n  }\n}\n","import { NullObjectCreationDisabledError } from '../errors';\nimport { Primitive, Nullish } from '../types';\nimport { NullObject } from './NullObject';\n\nexport abstract class ValueObject<T extends Primitive = Primitive> {\n  private static nullObjectCreationEnabled = true;\n\n  protected readonly value!: T;\n\n  public static disableNullObjectCreation(): void {\n    ValueObject.nullObjectCreationEnabled = false;\n  }\n\n  public static enableNullObjectCreation(): void {\n    ValueObject.nullObjectCreationEnabled = true;\n  }\n\n  constructor(value: T | Nullish) {\n    if (this.isNullish(value)) {\n      if (ValueObject.nullObjectCreationEnabled === false) {\n        throw new NullObjectCreationDisabledError(new.target.name);\n      }\n\n      return NullObject.new(new.target);\n    }\n    Object.defineProperty(this, 'value', {\n      value,\n      writable: false,\n      configurable: false,\n      enumerable: true,\n    });\n  }\n\n  private isNullish(value: T | Nullish): value is null | undefined {\n    return value === null || value === undefined;\n  }\n\n  protected clone(value: T): this {\n    return new (this.constructor as new (value: Primitive) => this)(\n      this.isNullish(value) ? this.value : value,\n    ) as this;\n  }\n\n  public hasValue(other: unknown): boolean {\n    const otherValue = other instanceof ValueObject ? other.valueOf() : other;\n\n    return this.value === otherValue;\n  }\n\n  public isEqual(other: unknown): boolean {\n    return (\n      other instanceof ValueObject &&\n      this.constructor === other.constructor &&\n      this.hasValue(other)\n    );\n  }\n\n  public isNotEqual(other: unknown): boolean {\n    return this.isEqual(other) === false;\n  }\n\n  public valueOf(): T {\n    return this.value;\n  }\n\n  public toString(): string {\n    return this.value!.toString();\n  }\n}\n","import { InvalidStringLengthError } from '../errors/InvalidStringLengthError';\nimport { assert } from '../patterns/Assert';\nimport { NullObject } from './NullObject';\nimport { ValueObject } from './ValueObject';\n\nexport class StringValueObject extends ValueObject<string> {\n  constructor(value: string | StringValueObject, maxLength: number = 512) {\n    super(value?.valueOf());\n\n    if (NullObject.isNullObject(this)) {\n      return this;\n    }\n\n    this.ensureDoesNotExceedsMaxLength(maxLength);\n  }\n\n  private ensureDoesNotExceedsMaxLength(maxLength: number): void {\n    assert(\n      this.value.length <= maxLength,\n      new InvalidStringLengthError(this.value, maxLength),\n    );\n  }\n\n  public isEmpty(): boolean {\n    return !this.value;\n  }\n}\n","import { InvalidNumberError } from '../errors/InvalidNumberError';\nimport { assert } from '../patterns/Assert';\nimport { NullObject } from './NullObject';\nimport { ValueObject } from './ValueObject';\n\nexport class NumberValueObject extends ValueObject<number> {\n  constructor(value: number | NumberValueObject) {\n    super(value?.valueOf());\n\n    if (NullObject.isNullObject(this)) {\n      return this;\n    }\n\n    assert(this.isValidNumber(this.value), new InvalidNumberError(this.value));\n  }\n\n  private isValidNumber(value: number): boolean {\n    return Number.isFinite(value.valueOf());\n  }\n\n  public isZero(): boolean {\n    return this.value === 0;\n  }\n\n  public isGreaterThan(other: number | NumberValueObject): boolean {\n    return this.value > other.valueOf();\n  }\n\n  public isGreaterOrEqualThan(other: number | NumberValueObject): boolean {\n    return this.value >= other.valueOf();\n  }\n\n  public isLessThan(other: number | NumberValueObject): boolean {\n    return this.value < other.valueOf();\n  }\n\n  public isLessOrEqualThan(other: number | NumberValueObject): boolean {\n    return this.value <= other.valueOf();\n  }\n\n  public add(other: number | NumberValueObject): NumberValueObject {\n    return this.clone(this.value + other.valueOf());\n  }\n\n  public subtract(other: number | NumberValueObject): NumberValueObject {\n    return this.clone(this.value - other.valueOf());\n  }\n\n  public multiply(other: number | NumberValueObject): NumberValueObject {\n    return this.clone(this.value * other.valueOf());\n  }\n\n  public divide(other: number | NumberValueObject): NumberValueObject {\n    return this.clone(this.value / other.valueOf());\n  }\n}\n","import { InvalidLatitudeError } from '../../errors/InvalidLatitudeError';\nimport { assert } from '../../patterns/Assert';\nimport { NumberValueObject } from '../NumberValueObject';\n\nexport class Latitude extends NumberValueObject {\n  private static MIN_VALUE = new NumberValueObject(-90);\n  private static MAX_VALUE = new NumberValueObject(90);\n\n  private static isValid(value: number | NumberValueObject): boolean {\n    const primitive = value.valueOf();\n\n    return (\n      Number.isFinite(primitive) &&\n      primitive >= this.MIN_VALUE.valueOf() &&\n      primitive <= this.MAX_VALUE.valueOf()\n    );\n  }\n\n  constructor(value: number | NumberValueObject) {\n    assert(Latitude.isValid(value), new InvalidLatitudeError(value.valueOf()));\n    super(value.valueOf());\n  }\n}\n","import { InvalidLongitudeError } from '../../errors/InvalidLongitudeError';\nimport { assert } from '../../patterns/Assert';\nimport { NumberValueObject } from '../NumberValueObject';\n\nexport class Longitude extends NumberValueObject {\n  private static MIN_VALUE = new NumberValueObject(-180);\n  private static MAX_VALUE = new NumberValueObject(180);\n\n  private static isValid(value: number | NumberValueObject): boolean {\n    const primitive = value.valueOf();\n\n    return (\n      Number.isFinite(primitive) &&\n      primitive >= this.MIN_VALUE.valueOf() &&\n      primitive <= this.MAX_VALUE.valueOf()\n    );\n  }\n\n  constructor(value: number | NumberValueObject) {\n    assert(\n      Longitude.isValid(value),\n      new InvalidLongitudeError(value.valueOf()),\n    );\n    super(value.valueOf());\n  }\n}\n","import { StringValueObject } from '../StringValueObject';\nimport { Latitude } from './Latitude';\nimport { Longitude } from './Longitude';\n\nexport class Coordinates extends StringValueObject {\n  private latitude: Latitude;\n  private longitude: Longitude;\n\n  public static fromString(value: string): Coordinates {\n    const latitude = parseFloat(value.split(',')[0]);\n    const longitude = parseFloat(value.split(',')[1]);\n\n    return new Coordinates(latitude, longitude);\n  }\n\n  constructor(latitude: number | Latitude, longitude: number | Longitude) {\n    super(latitude?.valueOf() + ',' + longitude?.valueOf());\n\n    this.latitude = new Latitude(latitude.valueOf());\n    this.longitude = new Longitude(longitude.valueOf());\n  }\n\n  public getLatitude(): Latitude {\n    return this.latitude;\n  }\n\n  public getLongitude(): Longitude {\n    return this.longitude;\n  }\n}\n","import { Buffer } from 'buffer';\n\nimport { NullObject } from '../NullObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { ValueObject } from '../ValueObject';\n\nexport abstract class Hash extends ValueObject<string> {\n  constructor(source: string | StringValueObject) {\n    super(source?.valueOf());\n\n    if (NullObject.isNullObject(this)) {\n      return this;\n    }\n  }\n\n  public toBase64(): StringValueObject {\n    return new StringValueObject(\n      Buffer.from(this.valueOf(), 'hex').toString('base64'),\n    );\n  }\n}\n","import { InvalidHashError } from '../../errors/InvalidHashError';\nimport { assert } from '../../patterns';\nimport { NullObject } from '../NullObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { Hash } from './Hash';\n\nexport class MD5Hash extends Hash {\n  public static isValid(hash: string | StringValueObject): boolean {\n    return !!hash.valueOf().match(/^[a-f0-9]{32}$/);\n  }\n\n  constructor(source: string | StringValueObject) {\n    super(source?.valueOf());\n\n    if (NullObject.isNullObject(this)) {\n      return this;\n    }\n\n    assert(\n      MD5Hash.isValid(this.valueOf()),\n      new InvalidHashError('MD5', source.valueOf()),\n    );\n  }\n}\n","import { Buffer } from 'buffer';\n\nimport { InvalidHashError } from '../../errors/InvalidHashError';\nimport { assert } from '../../patterns';\nimport { NullObject } from '../NullObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { ValueObject } from '../ValueObject';\n\nexport class SHA256Hash extends ValueObject<string> {\n  public static isValid(hash: string | StringValueObject): boolean {\n    return !!hash.valueOf().match(/^[a-f0-9]{64}$/i);\n  }\n\n  constructor(source: string | StringValueObject) {\n    super(source?.valueOf());\n\n    if (NullObject.isNullObject(this)) {\n      return this;\n    }\n\n    assert(\n      SHA256Hash.isValid(this.valueOf()),\n      new InvalidHashError('SHA256', source.valueOf()),\n    );\n  }\n\n  public toBase64(): StringValueObject {\n    return new StringValueObject(\n      Buffer.from(this.valueOf(), 'hex').toString('base64'),\n    );\n  }\n}\n","import { Buffer } from 'buffer';\n\nimport { InvalidHashError } from '../../errors/InvalidHashError';\nimport { assert } from '../../patterns';\nimport { NullObject } from '../NullObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { ValueObject } from '../ValueObject';\n\nexport class SHA512Hash extends ValueObject<string> {\n  public static isValid(hash: string | StringValueObject): boolean {\n    return !!hash.valueOf().match(/^[a-f0-9]{128}$/i);\n  }\n\n  constructor(source: string | StringValueObject) {\n    super(source?.valueOf());\n\n    if (NullObject.isNullObject(this)) {\n      return this;\n    }\n\n    assert(\n      SHA512Hash.isValid(this.valueOf()),\n      new InvalidHashError('SHA512', source.valueOf()),\n    );\n  }\n\n  public toBase64(): StringValueObject {\n    return new StringValueObject(\n      Buffer.from(this.valueOf(), 'hex').toString('base64'),\n    );\n  }\n}\n","import { Buffer } from 'buffer';\nimport { parse, v4 as uuidV4 } from 'uuid';\n\nimport { InvalidFormatError } from '../../errors/InvalidFormatError';\nimport { InvalidLengthError } from '../../errors/InvalidLengthError';\nimport { assert } from '../../patterns';\nimport { NullObject } from '../NullObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { ValueObject } from '../ValueObject';\n\nexport class ShortId extends ValueObject<string> {\n  private static readonly LENGTH = 24;\n  private static readonly PATTERN = new RegExp(`[a-zA-Z0-9]{${this.LENGTH}}$`);\n\n  private static generateObjectIdHex(): string {\n    const random = parse(uuidV4());\n    const bytes = Buffer.alloc(12);\n    bytes.writeUInt32BE(Math.floor(Date.now() / 1000), 0);\n    // Keep eight fully random bytes, excluding the UUID version/variant bytes.\n    bytes.set(random.subarray(0, 6), 4);\n    bytes.set(random.subarray(9, 11), 10);\n\n    return bytes.toString('hex');\n  }\n\n  public static generate(): ShortId {\n    return new ShortId(ShortId.generateObjectIdHex());\n  }\n\n  constructor(value: string | StringValueObject) {\n    super(value?.valueOf());\n\n    if (NullObject.isNullObject(this)) {\n      return this;\n    }\n    this.ensureIsShortId(this.value);\n  }\n\n  private ensureIsShortId(value: string): void {\n    assert(\n      value.length === ShortId.LENGTH,\n      new InvalidLengthError(this.value, ShortId.LENGTH),\n    );\n    assert(ShortId.PATTERN.test(value), new InvalidFormatError(this.value));\n  }\n}\n","import { v4 as uuidV4 } from 'uuid';\n\nimport { InvalidFormatError } from '../../errors/InvalidFormatError';\nimport { InvalidLengthError } from '../../errors/InvalidLengthError';\nimport { assert } from '../../patterns';\nimport { NullObject } from '../NullObject';\nimport { StringValueObject } from '../StringValueObject';\nimport { ValueObject } from '../ValueObject';\n\nexport class UUID extends ValueObject<string> {\n  private static readonly LENGTH = 36;\n  private static readonly PATTERN =\n    /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n  private static readonly SENTINEL_PATTERN =\n    /^(?:00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;\n\n  public static generate(): UUID {\n    return new UUID(uuidV4());\n  }\n\n  constructor(value: string | StringValueObject) {\n    super(value?.valueOf());\n\n    if (NullObject.isNullObject(this)) {\n      return this;\n    }\n    this.ensureIsUUID(this.value);\n  }\n\n  private ensureIsUUID(value: string): void {\n    assert(\n      value.length === UUID.LENGTH,\n      new InvalidLengthError(this.value, UUID.LENGTH),\n    );\n    assert(\n      UUID.PATTERN.test(value) || UUID.SENTINEL_PATTERN.test(value),\n      new InvalidFormatError(this.value),\n    );\n  }\n}\n","import { Buffer } from 'buffer';\n\nimport { NullObject } from '../NullObject';\nimport { ValueObject } from '../ValueObject';\n\nexport class Media extends ValueObject<string> {\n  private readonly buffer?: Buffer;\n\n  constructor(value: string | Buffer) {\n    super(value?.toString());\n\n    if (NullObject.isNullObject(this)) {\n      return this;\n    }\n\n    this.buffer = Buffer.isBuffer(value) ? Buffer.from(value) : undefined;\n  }\n\n  public getBuffer(): Buffer {\n    return this.buffer === undefined\n      ? Buffer.from(this.value)\n      : Buffer.from(this.buffer);\n  }\n\n  public getSize(): number {\n    return this.getBuffer().length;\n  }\n\n  public getBase64(): string {\n    return this.getBuffer().toString('base64');\n  }\n\n  public hasValue(other: unknown): boolean {\n    if (other instanceof Media) {\n      return this.getBuffer().equals(other.getBuffer());\n    }\n\n    if (Buffer.isBuffer(other)) {\n      return this.getBuffer().equals(other);\n    }\n\n    return super.hasValue(other);\n  }\n}\n","import { InvalidIntegerError } from '../errors/InvalidIntegerError';\nimport { assert } from '../patterns/Assert';\nimport { NullObject } from './NullObject';\nimport { NumberValueObject } from './NumberValueObject';\n\nexport class Integer extends NumberValueObject {\n  constructor(value: number | NumberValueObject) {\n    super(value?.valueOf());\n\n    if (NullObject.isNullObject(this)) {\n      return this;\n    }\n    this.ensureIsInteger();\n  }\n\n  private ensureIsInteger(): void {\n    assert(\n      this.value.valueOf() % 1 === 0,\n      new InvalidIntegerError(this.value.valueOf()),\n    );\n  }\n}\n","import { InvalidDayError } from '../../errors/InvalidDayError';\nimport { assert } from '../../patterns/Assert';\nimport { Integer } from '../Integer';\nimport { NumberValueObject } from '../NumberValueObject';\n\nexport class Day extends Integer {\n  constructor(value: number | NumberValueObject) {\n    super(value.valueOf());\n\n    this.ensureIsValidDay();\n  }\n\n  private ensureIsValidDay(): void {\n    assert(this.isGreaterOrEqualThan(1), new InvalidDayError(this.value));\n    assert(this.isLessOrEqualThan(31), new InvalidDayError(this.value));\n  }\n}\n","import { ValueNotInEnumError } from '../errors/ValueNotInEnumError';\nimport { assert } from '../patterns/Assert';\nimport { Primitive } from '../types';\nimport { NullObject } from './NullObject';\nimport { ValueObject } from './ValueObject';\n\nexport abstract class Enum<\n  T extends Primitive = Primitive,\n> extends ValueObject<T> {\n  constructor(value: T) {\n    super(value);\n\n    if (NullObject.isNullObject(this)) {\n      return this;\n    }\n\n    this.ensureIsValidValue();\n  }\n\n  public abstract getValues(): T[];\n\n  private ensureIsValidValue(): void {\n    const isValueInEnum = this.getValues().some((enumValue) =>\n      this.hasValue(enumValue),\n    );\n    assert(\n      isValueInEnum,\n      new ValueNotInEnumError(this.valueOf(), this.getValues()),\n    );\n  }\n}\n","import { InvalidDayError } from '../../errors/InvalidDayError';\nimport { assert } from '../../patterns';\nimport { Enum } from '../Enum';\nimport { Timestamp } from './Timestamp';\n\nexport enum EDaysOfWeek {\n  MONDAY = 'monday',\n  TUESDAY = 'tuesday',\n  WEDNESDAY = 'wednesday',\n  THURSDAY = 'thursday',\n  FRIDAY = 'friday',\n  SATURDAY = 'saturday',\n  SUNDAY = 'sunday',\n}\n\nexport const timeStampDayToDaysMap = {\n  [EDaysOfWeek.FRIDAY]: 5,\n  [EDaysOfWeek.MONDAY]: 1,\n  [EDaysOfWeek.SATURDAY]: 6,\n  [EDaysOfWeek.SUNDAY]: 0,\n  [EDaysOfWeek.THURSDAY]: 4,\n  [EDaysOfWeek.TUESDAY]: 2,\n  [EDaysOfWeek.WEDNESDAY]: 3,\n};\n\nexport class DayOfWeek extends Enum {\n  public static MONDAY = new DayOfWeek(EDaysOfWeek.MONDAY);\n  public static TUESDAY = new DayOfWeek(EDaysOfWeek.TUESDAY);\n  public static WEDNESDAY = new DayOfWeek(EDaysOfWeek.WEDNESDAY);\n  public static THURSDAY = new DayOfWeek(EDaysOfWeek.THURSDAY);\n  public static FRIDAY = new DayOfWeek(EDaysOfWeek.FRIDAY);\n  public static SATURDAY = new DayOfWeek(EDaysOfWeek.SATURDAY);\n  public static SUNDAY = new DayOfWeek(EDaysOfWeek.SUNDAY);\n\n  public static fromNumber(day: number): DayOfWeek {\n    const [eDay] =\n      Object.entries(timeStampDayToDaysMap).find(\n        ([, value]) => value === day,\n      ) || [];\n\n    assert(eDay, new InvalidDayError(eDay));\n\n    return new DayOfWeek(eDay);\n  }\n\n  public static fromTimestamp(timestamp: Timestamp): DayOfWeek {\n    const dayOfWeekNumber = timestamp.getDayOfWeek();\n\n    return DayOfWeek.fromNumber(dayOfWeekNumber);\n  }\n\n  public getValues(): string[] {\n    return Object.values(EDaysOfWeek);\n  }\n\n  public toNumber(): number {\n    return timeStampDayToDaysMap[this.value as EDaysOfWeek];\n  }\n}\n","import { Enum } from '../Enum';\n\nenum MonthEnum {\n  JANUARY = 1,\n  FEBRUARY = 2,\n  MARCH = 3,\n  APRIL = 4,\n  MAY = 5,\n  JUNE = 6,\n  JULY = 7,\n  AUGUST = 8,\n  SEPTEMBER = 9,\n  OCTOBER = 10,\n  NOVEMBER = 11,\n  DECEMBER = 12,\n}\n\nexport class Month extends Enum<number> {\n  public static readonly JANUARY = new Month(MonthEnum.JANUARY);\n  public static readonly FEBRUARY = new Month(MonthEnum.FEBRUARY);\n  public static readonly MARCH = new Month(MonthEnum.MARCH);\n  public static readonly APRIL = new Month(MonthEnum.APRIL);\n  public static readonly MAY = new Month(MonthEnum.MAY);\n  public static readonly JUNE = new Month(MonthEnum.JUNE);\n  public static readonly JULY = new Month(MonthEnum.JULY);\n  public static readonly AUGUST = new Month(MonthEnum.AUGUST);\n  public static readonly SEPTEMBER = new Month(MonthEnum.SEPTEMBER);\n  public static readonly OCTOBER = new Month(MonthEnum.OCTOBER);\n  public static readonly NOVEMBER = new Month(MonthEnum.NOVEMBER);\n  public static readonly DECEMBER = new Month(MonthEnum.DECEMBER);\n\n  public getValues(): number[] {\n    return Object.values(MonthEnum) as number[];\n  }\n\n  public getIndex(): number {\n    return Number(this.valueOf()) - 1;\n  }\n}\n","import { Integer } from '../Integer';\nimport { NullObject } from '../NullObject';\nimport { NumberValueObject } from '../NumberValueObject';\n\nexport class Year extends Integer {\n  private static readonly YEAR_DAYS = 365;\n  private static readonly LEAP_YEAR_DAYS = 366;\n\n  constructor(value: number | NumberValueObject) {\n    super(value?.valueOf());\n\n    if (NullObject.isNullObject(this)) {\n      return this;\n    }\n  }\n\n  public isLeapYear(): boolean {\n    return this.getNumberOfDays() === Year.LEAP_YEAR_DAYS;\n  }\n\n  public getNumberOfDays(): number {\n    return (this.value % 4 === 0 && this.value % 100 !== 0) ||\n      this.value % 400 === 0\n      ? Year.LEAP_YEAR_DAYS\n      : Year.YEAR_DAYS;\n  }\n}\n","import { InvalidIntegerError } from '../../errors/InvalidIntegerError';\nimport { InvalidNumberError } from '../../errors/InvalidNumberError';\nimport { assert } from '../../patterns/Assert';\nimport { NumberValueObject } from '../NumberValueObject';\nimport { ValueObject } from '../ValueObject';\nimport { CalendarDay } from './CalendarDay';\nimport { Day } from './Day';\nimport { Duration } from './Duration';\nimport { Month } from './Month';\nimport { MonthOfYear } from './MonthOfYear';\nimport { Year } from './Year';\n\ntype TimestampValue = number | Date | Timestamp | string;\n\nexport class Timestamp extends ValueObject<number> {\n  private static readonly FACTORS = {\n    DAYS: 24 * 60 * 60 * 1000,\n    HOURS: 60 * 60 * 1000,\n    MINUTES: 60 * 1000,\n    SECONDS: 1000,\n    WEEKS: 7 * 24 * 60 * 60 * 1000,\n  };\n\n  private static valueMilliseconds(value?: TimestampValue): number {\n    if (value instanceof Timestamp || value instanceof Date) {\n      return value.valueOf();\n    }\n\n    if (typeof value === 'number') {\n      return value;\n    }\n\n    if (typeof value === 'string') {\n      return new Date(value).valueOf();\n    }\n\n    return Date.now().valueOf();\n  }\n\n  private static getLastDayOfUtcMonth(year: number, month: number): number {\n    const normalizedYear = year + Math.floor(month / 12);\n    const normalizedMonth = ((month % 12) + 12) % 12;\n    const days = [\n      31,\n      new Year(normalizedYear).isLeapYear() ? 29 : 28,\n      31,\n      30,\n      31,\n      30,\n      31,\n      31,\n      30,\n      31,\n      30,\n      31,\n    ];\n\n    return days[normalizedMonth];\n  }\n\n  private static ensureCalendarDelta(value: number): void {\n    assert(Number.isInteger(value), new InvalidIntegerError(value));\n  }\n\n  private static createUtcCalendarValue(\n    sourceValue: number,\n    year: number,\n    month: number,\n    day: number,\n  ): number {\n    const integerValue = Math.floor(sourceValue);\n    const fractionalMilliseconds = sourceValue - integerValue;\n    const source = new Date(integerValue);\n    const target = new Date(0);\n\n    target.setUTCFullYear(year, month, day);\n    target.setUTCHours(\n      source.getUTCHours(),\n      source.getUTCMinutes(),\n      source.getUTCSeconds(),\n      source.getUTCMilliseconds(),\n    );\n\n    return target.valueOf() + fractionalMilliseconds;\n  }\n\n  public static new(value: TimestampValue): Timestamp {\n    return new Timestamp(value);\n  }\n\n  public static now(): Timestamp {\n    return new Timestamp();\n  }\n\n  public static fromSeconds(seconds: number | NumberValueObject): Timestamp {\n    return new Timestamp(seconds.valueOf() * Timestamp.FACTORS.SECONDS);\n  }\n\n  public constructor(value?: TimestampValue) {\n    super(Timestamp.valueMilliseconds(value));\n\n    assert(\n      Number.isFinite(new Date(this.value).valueOf()),\n      new InvalidNumberError(this.value),\n    );\n  }\n\n  public toExactHour(): Timestamp {\n    const date = new Date(this.valueOf());\n\n    date.setSeconds(0);\n    date.setMinutes(0);\n    date.setMilliseconds(0);\n\n    const value = Timestamp.new(date.getTime()).value;\n\n    return this.clone(value);\n  }\n\n  public toMilliseconds(): number {\n    return this.value;\n  }\n\n  public toSeconds(): number {\n    return Math.round(this.value / Timestamp.FACTORS.SECONDS);\n  }\n\n  public toDate(): Date {\n    return new Date(this.value);\n  }\n\n  public toString(): string {\n    return `${this.valueOf()}`;\n  }\n\n  public isBefore(other: Timestamp): boolean {\n    return this.value < other.valueOf();\n  }\n\n  public isAfter(other: Timestamp): boolean {\n    return this.value > other.valueOf();\n  }\n\n  public isBeforeOrEqual(other: Timestamp): boolean {\n    return this.value <= other.valueOf();\n  }\n\n  public isAfterOrEqual(other: Timestamp): boolean {\n    return this.value >= other.valueOf();\n  }\n\n  public addMilliseconds(milliseconds: number | NumberValueObject): Timestamp {\n    const value = this.value + milliseconds.valueOf();\n\n    return this.clone(value);\n  }\n\n  public addSeconds(seconds: number | NumberValueObject): Timestamp {\n    const value = this.value + seconds.valueOf() * Timestamp.FACTORS.SECONDS;\n\n    return this.clone(value);\n  }\n\n  public addMinutes(minutes: number | NumberValueObject): Timestamp {\n    const value = this.value + minutes.valueOf() * Timestamp.FACTORS.MINUTES;\n\n    return this.clone(value);\n  }\n\n  public addHours(hours: number | NumberValueObject): Timestamp {\n    const value = this.value + hours.valueOf() * Timestamp.FACTORS.HOURS;\n\n    return this.clone(value);\n  }\n\n  public addDays(days: number | NumberValueObject): Timestamp {\n    const value = this.value + days.valueOf() * Timestamp.FACTORS.DAYS;\n\n    return this.clone(value);\n  }\n\n  public addWeeks(weeks: number | NumberValueObject): Timestamp {\n    const value = this.value + weeks.valueOf() * Timestamp.FACTORS.WEEKS;\n\n    return this.clone(value);\n  }\n\n  public addMonths(months: number | NumberValueObject): Timestamp {\n    const delta = months.valueOf();\n    Timestamp.ensureCalendarDelta(delta);\n\n    const source = new Date(Math.floor(this.value));\n    const totalMonths =\n      source.getUTCFullYear() * 12 + source.getUTCMonth() + delta;\n    const targetYear = Math.floor(totalMonths / 12);\n    const targetMonth = totalMonths - targetYear * 12;\n    const targetDay = Math.min(\n      source.getUTCDate(),\n      Timestamp.getLastDayOfUtcMonth(targetYear, targetMonth),\n    );\n\n    return this.clone(\n      Timestamp.createUtcCalendarValue(\n        this.value,\n        targetYear,\n        targetMonth,\n        targetDay,\n      ),\n    );\n  }\n\n  public addYears(years: number | NumberValueObject): Timestamp {\n    const delta = years.valueOf();\n    Timestamp.ensureCalendarDelta(delta);\n\n    const source = new Date(Math.floor(this.value));\n    const targetYear = source.getUTCFullYear() + delta;\n    const targetMonth = source.getUTCMonth();\n    const targetDay = Math.min(\n      source.getUTCDate(),\n      Timestamp.getLastDayOfUtcMonth(targetYear, targetMonth),\n    );\n\n    return this.clone(\n      Timestamp.createUtcCalendarValue(\n        this.value,\n        targetYear,\n        targetMonth,\n        targetDay,\n      ),\n    );\n  }\n\n  public addDuration(duration: Duration): Timestamp {\n    const value = this.value + duration.valueOf();\n\n    return this.clone(value);\n  }\n\n  public isSameDay(other: Timestamp): boolean {\n    return this.getCalendarDay().isEqual(other.getCalendarDay());\n  }\n\n  public isSameMonth(other: Timestamp): boolean {\n    return this.getMonthOfYear().isEqual(other.getMonthOfYear());\n  }\n\n  public isSameYear(other: Timestamp): boolean {\n    return this.getYear().isEqual(other.getYear());\n  }\n\n  public getCalendarDay(): CalendarDay {\n    return new CalendarDay(this);\n  }\n\n  public getDay(): Day {\n    return new Day(this.toDate().getUTCDate());\n  }\n\n  public getMonth(): Month {\n    return new Month(this.toDate().getUTCMonth() + 1);\n  }\n\n  public getYear(): Year {\n    return new Year(this.toDate().getUTCFullYear());\n  }\n\n  public getHours(): number {\n    return this.toDate().getUTCHours();\n  }\n\n  public getMinutes(): number {\n    return this.toDate().getUTCMinutes();\n  }\n\n  public getSeconds(): number {\n    return this.toDate().getUTCSeconds();\n  }\n\n  public getMilliseconds(): number {\n    return this.toDate().getUTCMilliseconds();\n  }\n\n  public getDayOfWeek(): number {\n    return this.toDate().getUTCDay();\n  }\n\n  public getMonthOfYear(): MonthOfYear {\n    return new MonthOfYear(this.getMonth(), this.getYear());\n  }\n}\n","import { InvalidPositiveNumberError } from '../errors/InvalidPositiveNumberError';\nimport { assert } from '../patterns/Assert';\nimport { NullObject } from './NullObject';\nimport { NumberValueObject } from './NumberValueObject';\n\nexport class PositiveNumber extends NumberValueObject {\n  constructor(value: number | NumberValueObject) {\n    super(value?.valueOf());\n\n    if (NullObject.isNullObject(this)) {\n      return this;\n    }\n\n    this.ensureIsPositive(this.value);\n  }\n\n  private ensureIsPositive(value: number): void {\n    assert(value >= 0, new InvalidPositiveNumberError());\n  }\n}\n","import { NumberValueObject } from '../NumberValueObject';\n\nexport class Duration extends NumberValueObject {\n  private static readonly MILLISECOND_FACTOR = 1000;\n  private static readonly SECOND_UNITS = {\n    DAYS: 24 * 60 * 60,\n    HOURS: 60 * 60,\n    MINUTES: 60,\n    MONTHS: 30 * 24 * 60 * 60,\n    SECONDS: 1,\n    WEEKS: 7 * 24 * 60 * 60,\n    YEARS: 365 * 24 * 60 * 60,\n  };\n\n  private static readonly millisecondFactors = {\n    DAYS: new NumberValueObject(\n      this.SECOND_UNITS.DAYS * this.MILLISECOND_FACTOR,\n    ),\n    HOURS: new NumberValueObject(\n      this.SECOND_UNITS.HOURS * this.MILLISECOND_FACTOR,\n    ),\n    MINUTES: new NumberValueObject(\n      this.SECOND_UNITS.MINUTES * this.MILLISECOND_FACTOR,\n    ),\n    MONTHS: new NumberValueObject(\n      this.SECOND_UNITS.MONTHS * this.MILLISECOND_FACTOR,\n    ),\n    SECONDS: new NumberValueObject(\n      this.SECOND_UNITS.SECONDS * this.MILLISECOND_FACTOR,\n    ),\n    WEEKS: new NumberValueObject(\n      this.SECOND_UNITS.WEEKS * this.MILLISECOND_FACTOR,\n    ),\n    YEARS: new NumberValueObject(\n      this.SECOND_UNITS.YEARS * this.MILLISECOND_FACTOR,\n    ),\n  };\n\n  public static fromDays(days: number | NumberValueObject): Duration {\n    return new Duration(\n      new NumberValueObject(days.valueOf()).multiply(\n        this.millisecondFactors.DAYS,\n      ),\n    );\n  }\n\n  public static fromHours(hours: number | NumberValueObject): Duration {\n    return new Duration(\n      new NumberValueObject(hours.valueOf()).multiply(\n        this.millisecondFactors.HOURS,\n      ),\n    );\n  }\n\n  public static fromMinutes(minutes: number | NumberValueObject): Duration {\n    return new Duration(\n      new NumberValueObject(minutes.valueOf()).multiply(\n        this.millisecondFactors.MINUTES,\n      ),\n    );\n  }\n\n  public static fromSeconds(seconds: number | NumberValueObject): Duration {\n    return new Duration(\n      new NumberValueObject(seconds.valueOf()).multiply(\n        this.millisecondFactors.SECONDS,\n      ),\n    );\n  }\n\n  public static fromMilliseconds(\n    milliseconds: number | NumberValueObject,\n  ): Duration {\n    return new Duration(new NumberValueObject(milliseconds.valueOf()));\n  }\n\n  constructor(milliseconds: NumberValueObject | Duration) {\n    super(milliseconds.valueOf());\n  }\n\n  public getTotalDays(): NumberValueObject {\n    return new Duration(this).divide(Duration.millisecondFactors.DAYS);\n  }\n\n  public getTotalHours(): NumberValueObject {\n    return new Duration(this).divide(Duration.millisecondFactors.HOURS);\n  }\n\n  public getTotalMinutes(): NumberValueObject {\n    return new Duration(this).divide(Duration.millisecondFactors.MINUTES);\n  }\n\n  public getTotalSeconds(): NumberValueObject {\n    return new Duration(this).divide(Duration.millisecondFactors.SECONDS);\n  }\n\n  public getTotalMilliseconds(): NumberValueObject {\n    return new NumberValueObject(this.valueOf());\n  }\n\n  public getDays(): NumberValueObject {\n    return new NumberValueObject(\n      Math.floor(\n        new Duration(this).divide(Duration.millisecondFactors.DAYS).valueOf(),\n      ),\n    );\n  }\n\n  public getHours(): NumberValueObject {\n    return new NumberValueObject(\n      Math.floor(\n        new Duration(this).divide(Duration.millisecondFactors.HOURS).valueOf(),\n      ) % 24,\n    );\n  }\n\n  public getMinutes(): NumberValueObject {\n    return new NumberValueObject(\n      Math.floor(\n        new Duration(this)\n          .divide(Duration.millisecondFactors.MINUTES)\n          .valueOf(),\n      ) % Duration.SECOND_UNITS.MINUTES,\n    );\n  }\n\n  public getSeconds(): NumberValueObject {\n    return new NumberValueObject(\n      Math.floor(\n        new Duration(this)\n          .divide(Duration.millisecondFactors.SECONDS)\n          .valueOf(),\n      ) % Duration.SECOND_UNITS.MINUTES,\n    );\n  }\n\n  public getMilliseconds(): NumberValueObject {\n    return new NumberValueObject(\n      Math.floor(new Duration(this).valueOf()) % Duration.MILLISECOND_FACTOR,\n    );\n  }\n}\n","import { InvalidTimestampIntervalError } from '../../errors/InvalidTimestampIntervalError';\nimport { PrimitiveOf } from '../../interfaces/PrimitiveOf';\nimport { assert } from '../../patterns/Assert';\nimport { PositiveNumber } from '../PositiveNumber';\nimport { ValueObject } from '../ValueObject';\nimport { CalendarDay } from './CalendarDay';\nimport { DayOfWeek } from './DayOfWeek';\nimport { Duration } from './Duration';\nimport { Timestamp } from './Timestamp';\n\nexport class TimestampInterval extends ValueObject<string> {\n  public static fromPrimitives(\n    primitives: PrimitiveOf<TimestampInterval>,\n  ): TimestampInterval {\n    return new TimestampInterval(\n      new Timestamp(primitives.start),\n      new Timestamp(primitives.end),\n    );\n  }\n\n  constructor(\n    private readonly start: Timestamp,\n    private readonly end: Timestamp,\n  ) {\n    super(`${start.valueOf()}-${end.valueOf()}`);\n\n    assert(\n      start.isBeforeOrEqual(end),\n      new InvalidTimestampIntervalError(start, end),\n    );\n  }\n\n  public toPrimitives() {\n    return {\n      end: this.end.valueOf(),\n      start: this.start.valueOf(),\n    };\n  }\n\n  public getStart(): Timestamp {\n    return this.start;\n  }\n\n  public getEnd(): Timestamp {\n    return this.end;\n  }\n\n  public getDuration(): Duration {\n    return new Duration(\n      new PositiveNumber(this.end.valueOf() - this.start.valueOf()),\n    );\n  }\n\n  public getTotalDaysOfWeek(dayOfWeek: DayOfWeek): number {\n    const oneDayInMilliseconds = 24 * 60 * 60 * 1000;\n    const daysToCheck: number = Math.trunc(\n      this.getDuration().valueOf() / oneDayInMilliseconds,\n    );\n\n    let count = 0;\n\n    for (let daysChecked = 0; daysChecked <= daysToCheck; daysChecked++) {\n      const iteratorDay = new Timestamp(this.start).addDays(daysChecked);\n\n      if (iteratorDay.getDayOfWeek() === dayOfWeek.toNumber()) {\n        count++;\n      }\n    }\n\n    return count;\n  }\n\n  public getDaysBetweenInterval(): CalendarDay[] {\n    const days: CalendarDay[] = [];\n\n    let iteratorTimestamp = new Timestamp(this.getStart());\n    const endTimestamp = new Timestamp(this.getEnd());\n\n    while (iteratorTimestamp.isBeforeOrEqual(endTimestamp)) {\n      days.push(new CalendarDay(iteratorTimestamp));\n      iteratorTimestamp = iteratorTimestamp.addDays(1);\n    }\n\n    return days;\n  }\n\n  public getOverlappingInterval(\n    searchInterval: TimestampInterval,\n  ): TimestampInterval | null {\n    const start = this.start.isAfter(searchInterval.getStart())\n      ? this.start\n      : searchInterval.getStart();\n    const end = this.end.isBefore(searchInterval.getEnd())\n      ? this.end\n      : searchInterval.getEnd();\n\n    if (start.isAfterOrEqual(end)) {\n      return null;\n    }\n\n    return new TimestampInterval(start, end);\n  }\n\n  public includes(timestamp: Timestamp): boolean {\n    return (\n      timestamp.isAfterOrEqual(this.start) &&\n      timestamp.isBeforeOrEqual(this.end)\n    );\n  }\n}\n","import { ValueObject } from '../ValueObject';\nimport { Month } from './Month';\nimport { Timestamp } from './Timestamp';\nimport { TimestampInterval } from './TimestampInterval';\nimport { Year } from './Year';\n\nexport class MonthOfYear extends ValueObject<string> {\n  private readonly month: Month;\n  private readonly year: Year;\n\n  public static fromTimestamp(timestamp: Timestamp): MonthOfYear {\n    return new MonthOfYear(timestamp.getMonth(), timestamp.getYear());\n  }\n\n  public static fromString(value: string): MonthOfYear {\n    const [year, month] = value.split('/').map(Number);\n\n    return new MonthOfYear(month, year);\n  }\n\n  constructor(month: number | Month, year: number | Year) {\n    super(\n      year.valueOf().toString() +\n        '/' +\n        month.valueOf().toString().padStart(2, '0'),\n    );\n    this.month = new Month(month.valueOf());\n    this.year = new Year(year.valueOf());\n  }\n\n  public getMonth(): Month {\n    return new Month(this.month.valueOf());\n  }\n\n  public getYear(): Year {\n    return new Year(this.year);\n  }\n\n  public getNumberOfDays(): number {\n    return new Date(this.year.valueOf(), this.month.valueOf(), 0).getDate();\n  }\n\n  public getTimestampInterval(): TimestampInterval {\n    const firstMonthDay = '01';\n    const month = this.month.valueOf().toString().padStart(2, '0');\n    const lastDay = this.getNumberOfDays().toString();\n    const startDate = new Timestamp(`${this.year}-${month}-${firstMonthDay}`);\n    const endDate = new Timestamp(`${this.year}-${month}-${lastDay}`);\n\n    return new TimestampInterval(startDate, endDate);\n  }\n}\n","import { InvalidDayError } from '../../errors/InvalidDayError';\nimport { InvalidDayFormatError } from '../../errors/InvalidDayFormatError';\nimport { assert } from '../../patterns/Assert';\nimport { ValueObject } from '../ValueObject';\nimport { Day } from './Day';\nimport { DayOfWeek } from './DayOfWeek';\nimport { Month } from './Month';\nimport { MonthOfYear } from './MonthOfYear';\nimport { Timestamp } from './Timestamp';\n\nexport class CalendarDay extends ValueObject<string> {\n  private readonly year: number;\n  private readonly month: number;\n  private readonly day: number;\n\n  private static ensureIsValidString(value: string): void {\n    assert(\n      value.match(/^\\d{4}-\\d{1,2}-\\d{1,2}$/),\n      new InvalidDayFormatError(value),\n    );\n  }\n\n  private static generateStringValue(timestamp: Timestamp): string {\n    const paddedMonth = timestamp.getMonth().toString().padStart(2, '0');\n    const paddedDay = timestamp.getDay().toString().padStart(2, '0');\n\n    return `${timestamp.getYear().toString()}-${paddedMonth}-${paddedDay}`;\n  }\n\n  private static ensureIsValidDate(value: Date | number | Timestamp): void {\n    assert(Number.isFinite(value.valueOf()), new InvalidDayError(value));\n  }\n\n  private static timestampFromString(value: string): Timestamp {\n    CalendarDay.ensureIsValidString(value);\n\n    const [year, month, day] = value.split('-').map(Number);\n    const date = new Date(0);\n    date.setUTCHours(0, 0, 0, 0);\n    date.setUTCFullYear(year, month - 1, day);\n\n    assert(\n      date.getUTCFullYear() === year &&\n        date.getUTCMonth() === month - 1 &&\n        date.getUTCDate() === day,\n      new InvalidDayError(value),\n    );\n\n    return new Timestamp(date);\n  }\n\n  private static timestampFromValue(\n    value: string | Date | number | Timestamp,\n  ): Timestamp {\n    if (typeof value === 'string') {\n      return CalendarDay.timestampFromString(value);\n    }\n\n    CalendarDay.ensureIsValidDate(value);\n\n    return new Timestamp(value);\n  }\n\n  constructor(value?: string | Date | number | Timestamp) {\n    let timestamp: Timestamp;\n\n    if (value !== undefined) {\n      timestamp = CalendarDay.timestampFromValue(value);\n    } else {\n      timestamp = new Timestamp();\n    }\n\n    super(CalendarDay.generateStringValue(timestamp));\n\n    this.year = timestamp.getYear().valueOf();\n    this.month = timestamp.getMonth().getIndex() + 1;\n    this.day = timestamp.getDay().valueOf();\n  }\n\n  public isAfter(date: CalendarDay): boolean {\n    return this.valueOf() > date.valueOf();\n  }\n\n  public isBefore(date: CalendarDay): boolean {\n    return this.valueOf() < date.valueOf();\n  }\n\n  public getYear(): number {\n    return this.year;\n  }\n\n  public getMonth(): Month {\n    return new Month(this.month);\n  }\n\n  public getMonthOfYear(): MonthOfYear {\n    return new MonthOfYear(this.month, this.year);\n  }\n\n  public getDay(): Day {\n    return new Day(this.day);\n  }\n\n  public getDayOfWeek(): DayOfWeek {\n    return DayOfWeek.fromNumber(this.toTimestamp().getDayOfWeek());\n  }\n\n  public toTimestamp(): Timestamp {\n    const date = new Date(0);\n    date.setUTCHours(0, 0, 0, 0);\n    date.setUTCFullYear(this.year, this.month - 1, this.day);\n\n    return new Timestamp(date);\n  }\n}\n","import { InvalidHourError } from '../../errors/InvalidHourError';\nimport { InvalidMinutesError } from '../../errors/InvalidMinutesError';\nimport { assert } from '../../patterns/Assert';\nimport { StringValueObject } from '../StringValueObject';\n\nexport class Hour extends StringValueObject {\n  private readonly minutes: string;\n  private readonly hours: string;\n\n  private static addTrailZero(value: number): string {\n    return value < 10 ? `0${value}` : value.toString();\n  }\n\n  private static normalizeMinutes(totalMinutes: number): number {\n    const minutesPerDay = 24 * 60;\n\n    return ((totalMinutes % minutesPerDay) + minutesPerDay) % minutesPerDay;\n  }\n\n  private static parseFromNumber(value: number, minutes: number): string[] {\n    assert(\n      Number.isInteger(value) && value >= 0 && value <= 23,\n      new InvalidHourError(),\n    );\n    assert(\n      Number.isInteger(minutes) && minutes >= 0 && minutes <= 59,\n      new InvalidMinutesError(),\n    );\n\n    return [Hour.addTrailZero(value), Hour.addTrailZero(minutes)];\n  }\n\n  private static parseFromString(value: string): string[] {\n    const parts = value.split(':');\n\n    assert(parts.length === 2 && parts[1] !== '', new InvalidHourError());\n\n    const [hours, minutes] = parts;\n\n    assert(/^\\d{1,2}$/.test(hours), new InvalidHourError());\n    assert(/^\\d{1,2}$/.test(minutes), new InvalidMinutesError());\n\n    const parsedHours = Number(hours);\n    const parsedMinutes = Number(minutes);\n\n    assert(parsedHours >= 0 && parsedHours <= 23, new InvalidHourError());\n    assert(\n      parsedMinutes >= 0 && parsedMinutes <= 59,\n      new InvalidMinutesError(),\n    );\n\n    return [Hour.addTrailZero(parsedHours), Hour.addTrailZero(parsedMinutes)];\n  }\n\n  constructor(value: string);\n  constructor(value: number, minutes?: number);\n  constructor(value: string | number, minutes?: number) {\n    const [parsedHours, parsedMinutes] =\n      typeof value === 'number' && minutes !== undefined\n        ? Hour.parseFromNumber(value, minutes)\n        : Hour.parseFromString(value as string);\n\n    super(`${parsedHours}:${parsedMinutes}`);\n    this.hours = parsedHours;\n    this.minutes = parsedMinutes;\n  }\n\n  public addMinutes(minutes: number): Hour {\n    const currentMinutes = Number(this.hours) * 60 + Number(this.minutes);\n    const normalizedMinutes = Hour.normalizeMinutes(currentMinutes + minutes);\n    const newHour = Math.floor(normalizedMinutes / 60);\n    const newMinutes = normalizedMinutes % 60;\n\n    return new Hour(newHour, newMinutes);\n  }\n\n  public diffInMinutes(other: Hour): number {\n    let endHour = Number(other.hours);\n\n    if (\n      other.hours < this.hours ||\n      (other.hours === this.hours && other.minutes < this.minutes)\n    ) {\n      endHour += 24;\n    }\n\n    const totalMinutes =\n      (endHour - Number(this.hours)) * 60 +\n      (Number(other.minutes) - Number(this.minutes));\n\n    return totalMinutes;\n  }\n\n  public getMinutes(): number {\n    return Number(this.minutes);\n  }\n\n  public getHours(): number {\n    return Number(this.hours);\n  }\n\n  public isGreaterThan(hour: Hour): boolean {\n    if (this.hours === hour.hours) {\n      return Number(this.minutes) > Number(hour.minutes);\n    }\n\n    return Number(this.hours) > Number(hour.hours);\n  }\n\n  public isLessThan(hour: Hour): boolean {\n    if (this.hours === hour.hours) {\n      return Number(this.minutes) < Number(hour.minutes);\n    }\n\n    return Number(this.hours) < Number(hour.hours);\n  }\n}\n","import { InvalidColorError } from '../errors/InvalidColorError';\nimport { assert } from '../patterns/Assert';\nimport { NullObject } from './NullObject';\nimport { StringValueObject } from './StringValueObject';\nimport { ValueObject } from './ValueObject';\n\nexport class Color extends StringValueObject {\n  public static readonly RED = new Color('#FF0000');\n  public static readonly GREEN = new Color('#00FF00');\n  public static readonly BLUE = new Color('#0000FF');\n  public static readonly BLACK = new Color('#000000');\n  public static readonly WHITE = new Color('#FFFFFF');\n  public static readonly YELLOW = new Color('#FFFF00');\n  public static readonly CYAN = new Color('#00FFFF');\n  public static readonly MAGENTA = new Color('#FF00FF');\n  public static readonly ORANGE = new Color('#FFA500');\n  public static readonly PURPLE = new Color('#800080');\n  public static readonly PINK = new Color('#FFC0CB');\n  public static readonly BROWN = new Color('#A52A2A');\n\n  constructor(value: string | StringValueObject) {\n    super(value?.valueOf());\n\n    if (NullObject.isNullObject(this)) {\n      return this;\n    }\n\n    this.ensureIsValidColor();\n  }\n\n  private ensureIsValidColor(): void {\n    const hexColorPattern = /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/;\n\n    assert(hexColorPattern.test(this.value), new InvalidColorError(this.value));\n  }\n\n  public hasValue(other: unknown): boolean {\n    const otherValue = other instanceof ValueObject ? other.valueOf() : other;\n\n    return (\n      typeof otherValue === 'string' &&\n      this.value.toLowerCase() === otherValue.toLowerCase()\n    );\n  }\n}\n","import { InvalidEmailError } from '../errors/InvalidEmailError';\nimport { assert } from '../patterns/Assert';\nimport { NullObject } from './NullObject';\nimport { StringValueObject } from './StringValueObject';\n\nexport class Email extends StringValueObject {\n  private static readonly PATTERN =\n    /^[\\w+\\-.!#$%&'*/=?^`{|}~]+@(?:[\\w-]+\\.)+(?:[a-z]{2,63}|xn--[a-z0-9](?:[a-z0-9-]{0,57}[a-z0-9])?)$/i;\n\n  constructor(value: string | StringValueObject) {\n    super(value?.valueOf());\n\n    if (NullObject.isNullObject(this)) {\n      return this;\n    }\n\n    this.ensureIsValidEmail(this.value);\n  }\n\n  private ensureIsValidEmail(value: string): void {\n    assert(Email.PATTERN.test(value), new InvalidEmailError(value));\n  }\n}\n","import { InvalidPasswordError } from '../errors/InvalidPasswordError';\nimport { assert } from '../patterns';\nimport { NullObject } from './NullObject';\nimport { StringValueObject } from './StringValueObject';\n\nexport class Password extends StringValueObject {\n  private static readonly MAX_LENGTH = 256;\n  private static readonly MIN_LENGTH = 12;\n\n  constructor(value: string | StringValueObject) {\n    super(value);\n\n    if (NullObject.isNullObject(this)) {\n      return this;\n    }\n\n    assert(\n      this.isValidPassword(),\n      new InvalidPasswordError(Password.MIN_LENGTH, Password.MAX_LENGTH),\n    );\n  }\n\n  private isValidPassword(): boolean {\n    return (\n      this.value.length >= Password.MIN_LENGTH &&\n      this.value.length <= Password.MAX_LENGTH &&\n      /[A-Z]/.test(this.value) &&\n      /[a-z]/.test(this.value) &&\n      /[0-9]/.test(this.value) &&\n      /[^A-Za-z0-9]/.test(this.value)\n    );\n  }\n}\n","interface ComparableItem {\n  isEqual(item: unknown): boolean;\n}\nexport class UniqueObjectArray<\n  T extends ComparableItem,\n> implements Iterable<T> {\n  private items: T[] = [];\n\n  public static fromArray<T extends ComparableItem>(\n    array: T[],\n  ): UniqueObjectArray<T> {\n    const uniqueArray = new UniqueObjectArray<T>();\n    for (const item of array) {\n      uniqueArray.push(item);\n    }\n\n    return uniqueArray;\n  }\n\n  public includes(item: T): boolean {\n    return this.items.some((one) => one.isEqual(item));\n  }\n\n  public push(item: T): boolean {\n    if (!this.includes(item)) {\n      this.items.push(item);\n\n      return true;\n    }\n\n    return false;\n  }\n\n  public remove(item: T): boolean {\n    const index = this.items.findIndex((one) => one.isEqual(item));\n\n    if (index !== -1) {\n      this.items.splice(index, 1);\n\n      return true;\n    }\n\n    return false;\n  }\n\n  public [Symbol.iterator](): Iterator<T> {\n    return this.items[Symbol.iterator]();\n  }\n\n  public length(): number {\n    return this.items.length;\n  }\n\n  public toArray(): T[] {\n    return Array.from(this.items);\n  }\n}\n"],"mappings":"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"}