{"version":3,"file":"base.vo-Bw5vQPk4.cjs","names":["dateRangeParser: DateRangeParser","start: DateTime","end: DateTime","data: unknown","other: IDateRange"],"sources":["../src/domain/base.vo.ts"],"sourcesContent":["import { Result } from \"@carbonteq/fp\";\nimport { type ZodObject, z } from \"zod\";\nimport { ValidationError } from \"./base.errors.js\";\nimport { DateTime } from \"./refined.types.js\";\n\nexport abstract class BaseValueObject<T> {\n  abstract serialize(): T;\n\n  /** Util method to use associated parser in boundary validators */\n  //@ts-ignore\n  getParser?();\n}\n\nexport interface IDateRange {\n  startDate: DateTime;\n  endDate: DateTime;\n}\n\ntype TDateTime = typeof DateTime;\ntype DateRangeParser = ZodObject<{ startDate: TDateTime; endDate: TDateTime }>;\nconst dateRangeParser: DateRangeParser = z.object({\n  startDate: DateTime,\n  endDate: DateTime,\n});\n\n// Can be Domain Error\nexport class InvalidDateRange extends ValidationError {}\n\nexport class DateRange extends BaseValueObject<IDateRange> {\n  private constructor(\n    readonly start: DateTime,\n    readonly end: DateTime,\n  ) {\n    super();\n  }\n\n  private ensureValidRange(): Result<DateRange, InvalidDateRange> {\n    if (this.intervalMs() < 0)\n      return Result.Err(\n        new InvalidDateRange(\n          `Start Date <${this.start}> must be <= End Date <${this.end}>`,\n        ),\n      );\n\n    return Result.Ok(this);\n  }\n\n  static create(data: unknown): Result<DateRange, InvalidDateRange> {\n    const parseRes = dateRangeParser.safeParse(data);\n\n    if (!parseRes.success)\n      return Result.Err(new InvalidDateRange(`Invalid Date Range: <${data}>`));\n\n    const range = new DateRange(parseRes.data.startDate, parseRes.data.endDate);\n\n    return range.ensureValidRange();\n  }\n\n  static from(other: IDateRange): DateRange {\n    return new DateRange(other.startDate, other.endDate);\n  }\n\n  intervalMs(): number {\n    return this.end.getTime() - this.start.getTime();\n  }\n\n  serialize(): IDateRange {\n    return { startDate: this.start, endDate: this.end };\n  }\n\n  getParser(): DateRangeParser {\n    return dateRangeParser;\n  }\n}\n"],"mappings":";;;;;;;;AAKA,IAAsB,kBAAtB,MAAyC,CAMxC;AASD,MAAMA,kBAAmC,MAAE,OAAO;CAChD,WAAW;CACX,SAAS;AACV,EAAC;AAGF,IAAa,mBAAb,cAAsC,oCAAgB,CAAE;AAExD,IAAa,YAAb,MAAa,kBAAkB,gBAA4B;CACzD,YACWC,OACAC,KACT;AACA,SAAO;AAHE,OAAA,QAAA;AACA,OAAA,MAAA;CAGV;CAED,mBAAgE;AAC9D,MAAI,KAAK,YAAY,GAAG,EACtB,QAAO,sBAAO,IACZ,IAAI,kBACD,cAAc,KAAK,MAAM,yBAAyB,KAAK,IAAI,IAE/D;AAEH,SAAO,sBAAO,GAAG,KAAK;CACvB;CAED,OAAO,OAAOC,MAAoD;EAChE,MAAM,WAAW,gBAAgB,UAAU,KAAK;AAEhD,OAAK,SAAS,QACZ,QAAO,sBAAO,IAAI,IAAI,kBAAkB,uBAAuB,KAAK,IAAI;EAE1E,MAAM,QAAQ,IAAI,UAAU,SAAS,KAAK,WAAW,SAAS,KAAK;AAEnE,SAAO,MAAM,kBAAkB;CAChC;CAED,OAAO,KAAKC,OAA8B;AACxC,SAAO,IAAI,UAAU,MAAM,WAAW,MAAM;CAC7C;CAED,aAAqB;AACnB,SAAO,KAAK,IAAI,SAAS,GAAG,KAAK,MAAM,SAAS;CACjD;CAED,YAAwB;AACtB,SAAO;GAAE,WAAW,KAAK;GAAO,SAAS,KAAK;EAAK;CACpD;CAED,YAA6B;AAC3B,SAAO;CACR;AACF"}