@globalart/ddd 1.0.30 → 1.1.0

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/dist/index.cjs CHANGED
@@ -25,8 +25,8 @@ let uuid = require("uuid");
25
25
  uuid = __toESM(uuid);
26
26
  let zod = require("zod");
27
27
  zod = __toESM(zod);
28
- let oxide_ts = require("oxide.ts");
29
- oxide_ts = __toESM(oxide_ts);
28
+ let __globalart_oxide = require("@globalart/oxide");
29
+ __globalart_oxide = __toESM(__globalart_oxide);
30
30
  let ts_pattern = require("ts-pattern");
31
31
  ts_pattern = __toESM(ts_pattern);
32
32
  let dequal = require("dequal");
@@ -111,7 +111,6 @@ var ExceptionBase = class extends Error {
111
111
  this.message = message;
112
112
  this.cause = cause;
113
113
  this.metadata = metadata;
114
- Error.captureStackTrace(this, this.constructor);
115
114
  this.correlationId = correlationId;
116
115
  }
117
116
  toJSON() {
@@ -421,7 +420,7 @@ var Or = class extends CompositeSpecification {
421
420
  }
422
421
  accept(v) {
423
422
  v.or(this.left, this.right);
424
- return (0, oxide_ts.Ok)(void 0);
423
+ return (0, __globalart_oxide.Ok)(void 0);
425
424
  }
426
425
  };
427
426
  var Not = class extends CompositeSpecification {
@@ -440,19 +439,19 @@ var Not = class extends CompositeSpecification {
440
439
  }
441
440
  };
442
441
  const and = (...specs) => {
443
- if (!specs.length) return oxide_ts.None;
442
+ if (!specs.length) return __globalart_oxide.None;
444
443
  let s = specs[0];
445
444
  for (const spec of specs.slice(1)) s = s.and(spec);
446
- return (0, oxide_ts.Some)(s);
445
+ return (0, __globalart_oxide.Some)(s);
447
446
  };
448
447
  const andOptions = (...specs) => {
449
448
  return and(...specs.filter((spec) => spec.isSome()).map((spec) => spec.unwrap()));
450
449
  };
451
450
  const or = (...specs) => {
452
- if (!specs.length) return oxide_ts.None;
451
+ if (!specs.length) return __globalart_oxide.None;
453
452
  let s = specs[0];
454
453
  for (const spec of specs.slice(1)) s = s.or(spec);
455
- return (0, oxide_ts.Some)(s);
454
+ return (0, __globalart_oxide.Some)(s);
456
455
  };
457
456
 
458
457
  //#endregion
@@ -477,7 +476,7 @@ var BooleanEqual = class extends BaseFilterSpecification {
477
476
  }
478
477
  accept(v) {
479
478
  v.booleanEqual(this);
480
- return (0, oxide_ts.Ok)(void 0);
479
+ return (0, __globalart_oxide.Ok)(void 0);
481
480
  }
482
481
  };
483
482
  var BooleanNotEqual = class extends BaseFilterSpecification {
@@ -486,7 +485,7 @@ var BooleanNotEqual = class extends BaseFilterSpecification {
486
485
  }
487
486
  accept(v) {
488
487
  v.booleanNotEqual(this);
489
- return (0, oxide_ts.Ok)(void 0);
488
+ return (0, __globalart_oxide.Ok)(void 0);
490
489
  }
491
490
  };
492
491
 
@@ -498,7 +497,7 @@ var DateEqual = class extends BaseFilterSpecification {
498
497
  }
499
498
  accept(v) {
500
499
  v.dateEqual(this);
501
- return (0, oxide_ts.Ok)(void 0);
500
+ return (0, __globalart_oxide.Ok)(void 0);
502
501
  }
503
502
  };
504
503
  var DateGreaterThan = class extends BaseFilterSpecification {
@@ -510,7 +509,7 @@ var DateGreaterThan = class extends BaseFilterSpecification {
510
509
  }
511
510
  accept(v) {
512
511
  v.dateGreaterThan(this);
513
- return (0, oxide_ts.Ok)(void 0);
512
+ return (0, __globalart_oxide.Ok)(void 0);
514
513
  }
515
514
  };
516
515
  var DateLessThan = class extends BaseFilterSpecification {
@@ -522,7 +521,7 @@ var DateLessThan = class extends BaseFilterSpecification {
522
521
  }
523
522
  accept(v) {
524
523
  v.dateLessThan(this);
525
- return (0, oxide_ts.Ok)(void 0);
524
+ return (0, __globalart_oxide.Ok)(void 0);
526
525
  }
527
526
  };
528
527
  var DateGreaterThanOrEqual = class extends BaseFilterSpecification {
@@ -534,7 +533,7 @@ var DateGreaterThanOrEqual = class extends BaseFilterSpecification {
534
533
  }
535
534
  accept(v) {
536
535
  v.dateGreaterThanOrEqual(this);
537
- return (0, oxide_ts.Ok)(void 0);
536
+ return (0, __globalart_oxide.Ok)(void 0);
538
537
  }
539
538
  };
540
539
  var DateLessThanOrEqual = class extends BaseFilterSpecification {
@@ -546,7 +545,7 @@ var DateLessThanOrEqual = class extends BaseFilterSpecification {
546
545
  }
547
546
  accept(v) {
548
547
  v.dateLessThanOrEqual(this);
549
- return (0, oxide_ts.Ok)(void 0);
548
+ return (0, __globalart_oxide.Ok)(void 0);
550
549
  }
551
550
  };
552
551
  var DateIsToday = class extends BaseFilterSpecification {
@@ -557,7 +556,7 @@ var DateIsToday = class extends BaseFilterSpecification {
557
556
  }
558
557
  accept(v) {
559
558
  v.dateIsToday(this);
560
- return (0, oxide_ts.Ok)(void 0);
559
+ return (0, __globalart_oxide.Ok)(void 0);
561
560
  }
562
561
  };
563
562
  var DateIsTomorrow = class extends BaseFilterSpecification {
@@ -568,7 +567,7 @@ var DateIsTomorrow = class extends BaseFilterSpecification {
568
567
  }
569
568
  accept(v) {
570
569
  v.dateIsTomorrow(this);
571
- return (0, oxide_ts.Ok)(void 0);
570
+ return (0, __globalart_oxide.Ok)(void 0);
572
571
  }
573
572
  };
574
573
  var DateIsYesterday = class extends BaseFilterSpecification {
@@ -579,7 +578,7 @@ var DateIsYesterday = class extends BaseFilterSpecification {
579
578
  }
580
579
  accept(v) {
581
580
  v.dateIsYesterday(this);
582
- return (0, oxide_ts.Ok)(void 0);
581
+ return (0, __globalart_oxide.Ok)(void 0);
583
582
  }
584
583
  };
585
584
  var DateBetween = class extends BaseFilterSpecification {
@@ -600,7 +599,7 @@ var DateBetween = class extends BaseFilterSpecification {
600
599
  }
601
600
  accept(v) {
602
601
  v.dateBetween(this);
603
- return (0, oxide_ts.Ok)(void 0);
602
+ return (0, __globalart_oxide.Ok)(void 0);
604
603
  }
605
604
  };
606
605
 
@@ -618,7 +617,7 @@ var NumberEqual = class extends BaseFilterSpecification {
618
617
  }
619
618
  accept(v) {
620
619
  v.numberEqual(this);
621
- return (0, oxide_ts.Ok)(void 0);
620
+ return (0, __globalart_oxide.Ok)(void 0);
622
621
  }
623
622
  };
624
623
  var NumberGreaterThan = class extends BaseFilterSpecification {
@@ -631,7 +630,7 @@ var NumberGreaterThan = class extends BaseFilterSpecification {
631
630
  }
632
631
  accept(v) {
633
632
  v.numberGreaterThan(this);
634
- return (0, oxide_ts.Ok)(void 0);
633
+ return (0, __globalart_oxide.Ok)(void 0);
635
634
  }
636
635
  };
637
636
  var NumberLessThan = class extends BaseFilterSpecification {
@@ -643,7 +642,7 @@ var NumberLessThan = class extends BaseFilterSpecification {
643
642
  }
644
643
  accept(v) {
645
644
  v.numberLessThan(this);
646
- return (0, oxide_ts.Ok)(void 0);
645
+ return (0, __globalart_oxide.Ok)(void 0);
647
646
  }
648
647
  };
649
648
  var NumberGreaterThanOrEqual = class extends BaseFilterSpecification {
@@ -656,7 +655,7 @@ var NumberGreaterThanOrEqual = class extends BaseFilterSpecification {
656
655
  }
657
656
  accept(v) {
658
657
  v.numberGreaterThanOrEqual(this);
659
- return (0, oxide_ts.Ok)(void 0);
658
+ return (0, __globalart_oxide.Ok)(void 0);
660
659
  }
661
660
  };
662
661
  var NumberLessThanOrEqual = class extends BaseFilterSpecification {
@@ -668,7 +667,7 @@ var NumberLessThanOrEqual = class extends BaseFilterSpecification {
668
667
  }
669
668
  accept(v) {
670
669
  v.numberLessThanOrEqual(this);
671
- return (0, oxide_ts.Ok)(void 0);
670
+ return (0, __globalart_oxide.Ok)(void 0);
672
671
  }
673
672
  };
674
673
  var NumberEmpty = class extends BaseFilterSpecification {
@@ -681,7 +680,7 @@ var NumberEmpty = class extends BaseFilterSpecification {
681
680
  }
682
681
  accept(v) {
683
682
  v.numberEmpty(this);
684
- return (0, oxide_ts.Ok)(void 0);
683
+ return (0, __globalart_oxide.Ok)(void 0);
685
684
  }
686
685
  };
687
686
 
@@ -693,7 +692,7 @@ var StringEqual = class extends BaseFilterSpecification {
693
692
  }
694
693
  accept(v) {
695
694
  v.stringEqual(this);
696
- return (0, oxide_ts.Ok)(void 0);
695
+ return (0, __globalart_oxide.Ok)(void 0);
697
696
  }
698
697
  };
699
698
  var StringNotEqual = class extends BaseFilterSpecification {
@@ -702,7 +701,7 @@ var StringNotEqual = class extends BaseFilterSpecification {
702
701
  }
703
702
  accept(v) {
704
703
  v.stringNotEqual(this);
705
- return (0, oxide_ts.Ok)(void 0);
704
+ return (0, __globalart_oxide.Ok)(void 0);
706
705
  }
707
706
  };
708
707
  var StringContain = class extends BaseFilterSpecification {
@@ -714,7 +713,7 @@ var StringContain = class extends BaseFilterSpecification {
714
713
  }
715
714
  accept(v) {
716
715
  v.stringContain(this);
717
- return (0, oxide_ts.Ok)(void 0);
716
+ return (0, __globalart_oxide.Ok)(void 0);
718
717
  }
719
718
  };
720
719
  var StringStartsWith = class extends BaseFilterSpecification {
@@ -726,7 +725,7 @@ var StringStartsWith = class extends BaseFilterSpecification {
726
725
  }
727
726
  accept(v) {
728
727
  v.stringStartsWith(this);
729
- return (0, oxide_ts.Ok)(void 0);
728
+ return (0, __globalart_oxide.Ok)(void 0);
730
729
  }
731
730
  };
732
731
  var StringEndsWith = class extends BaseFilterSpecification {
@@ -738,7 +737,7 @@ var StringEndsWith = class extends BaseFilterSpecification {
738
737
  }
739
738
  accept(v) {
740
739
  v.stringEndsWith(this);
741
- return (0, oxide_ts.Ok)(void 0);
740
+ return (0, __globalart_oxide.Ok)(void 0);
742
741
  }
743
742
  };
744
743
  var StringRegex = class extends BaseFilterSpecification {
@@ -750,7 +749,7 @@ var StringRegex = class extends BaseFilterSpecification {
750
749
  }
751
750
  accept(v) {
752
751
  v.stringRegex(this);
753
- return (0, oxide_ts.Ok)(void 0);
752
+ return (0, __globalart_oxide.Ok)(void 0);
754
753
  }
755
754
  };
756
755
  var StringEmpty = class extends BaseFilterSpecification {
@@ -763,7 +762,7 @@ var StringEmpty = class extends BaseFilterSpecification {
763
762
  }
764
763
  accept(v) {
765
764
  v.stringEmpty(this);
766
- return (0, oxide_ts.Ok)(void 0);
765
+ return (0, __globalart_oxide.Ok)(void 0);
767
766
  }
768
767
  };
769
768
 
@@ -801,60 +800,60 @@ const isFilter = (filterOrGroup$1) => {
801
800
  const operators = zod.z.union([numberFilterOperators, stringFilterOperators]);
802
801
  const operatorsMap = { number: numberFilterOperators.options.map((v) => v.value) };
803
802
  const convertStringFilter = (filter$1) => {
804
- if (filter$1.value === void 0) return oxide_ts.None;
803
+ if (filter$1.value === void 0) return __globalart_oxide.None;
805
804
  switch (filter$1.operator) {
806
- case "$eq": return (0, oxide_ts.Some)(new StringEqual(filter$1.field, new StringFieldValue(filter$1.value), filter$1.relation));
807
- case "$neq": return (0, oxide_ts.Some)(new StringNotEqual(filter$1.field, new StringFieldValue(filter$1.value), filter$1.relation));
808
- case "$contains": return (0, oxide_ts.Some)(new StringContain(filter$1.field, new StringFieldValue(filter$1.value)));
809
- case "$not_contains": return (0, oxide_ts.Some)(new StringContain(filter$1.field, new StringFieldValue(filter$1.value)).not());
810
- case "$starts_with": return (0, oxide_ts.Some)(new StringStartsWith(filter$1.field, new StringFieldValue(filter$1.value)));
811
- case "$ends_with": return (0, oxide_ts.Some)(new StringEndsWith(filter$1.field, new StringFieldValue(filter$1.value)));
812
- case "$regex": return (0, oxide_ts.Some)(new StringRegex(filter$1.field, new StringFieldValue(filter$1.value)));
813
- case "$is_empty": return (0, oxide_ts.Some)(new StringEmpty(filter$1.field));
814
- case "$is_not_empty": return (0, oxide_ts.Some)(new StringEmpty(filter$1.field).not());
815
- default: return oxide_ts.None;
805
+ case "$eq": return (0, __globalart_oxide.Some)(new StringEqual(filter$1.field, new StringFieldValue(filter$1.value), filter$1.relation));
806
+ case "$neq": return (0, __globalart_oxide.Some)(new StringNotEqual(filter$1.field, new StringFieldValue(filter$1.value), filter$1.relation));
807
+ case "$contains": return (0, __globalart_oxide.Some)(new StringContain(filter$1.field, new StringFieldValue(filter$1.value)));
808
+ case "$not_contains": return (0, __globalart_oxide.Some)(new StringContain(filter$1.field, new StringFieldValue(filter$1.value)).not());
809
+ case "$starts_with": return (0, __globalart_oxide.Some)(new StringStartsWith(filter$1.field, new StringFieldValue(filter$1.value)));
810
+ case "$ends_with": return (0, __globalart_oxide.Some)(new StringEndsWith(filter$1.field, new StringFieldValue(filter$1.value)));
811
+ case "$regex": return (0, __globalart_oxide.Some)(new StringRegex(filter$1.field, new StringFieldValue(filter$1.value)));
812
+ case "$is_empty": return (0, __globalart_oxide.Some)(new StringEmpty(filter$1.field));
813
+ case "$is_not_empty": return (0, __globalart_oxide.Some)(new StringEmpty(filter$1.field).not());
814
+ default: return __globalart_oxide.None;
816
815
  }
817
816
  };
818
817
  const convertNumberFilter = (filter$1) => {
819
- if (filter$1 === void 0) return oxide_ts.None;
818
+ if (filter$1 === void 0) return __globalart_oxide.None;
820
819
  switch (filter$1.operator) {
821
- case "$eq": return (0, oxide_ts.Some)(new NumberEqual(filter$1.field, new NumberFieldValue(filter$1.value)));
822
- case "$neq": return (0, oxide_ts.Some)(new NumberEqual(filter$1.field, new NumberFieldValue(filter$1.value)).not());
823
- case "$gt": return (0, oxide_ts.Some)(new NumberGreaterThan(filter$1.field, new NumberFieldValue(filter$1.value)));
824
- case "$gte": return (0, oxide_ts.Some)(new NumberGreaterThanOrEqual(filter$1.field, new NumberFieldValue(filter$1.value)));
825
- case "$lt": return (0, oxide_ts.Some)(new NumberLessThan(filter$1.field, new NumberFieldValue(filter$1.value)));
826
- case "$lte": return (0, oxide_ts.Some)(new NumberLessThanOrEqual(filter$1.field, new NumberFieldValue(filter$1.value)));
827
- case "$is_empty": return (0, oxide_ts.Some)(new NumberEmpty(filter$1.field));
828
- case "$is_not_empty": return (0, oxide_ts.Some)(new NumberEmpty(filter$1.field).not());
829
- default: return oxide_ts.None;
820
+ case "$eq": return (0, __globalart_oxide.Some)(new NumberEqual(filter$1.field, new NumberFieldValue(filter$1.value)));
821
+ case "$neq": return (0, __globalart_oxide.Some)(new NumberEqual(filter$1.field, new NumberFieldValue(filter$1.value)).not());
822
+ case "$gt": return (0, __globalart_oxide.Some)(new NumberGreaterThan(filter$1.field, new NumberFieldValue(filter$1.value)));
823
+ case "$gte": return (0, __globalart_oxide.Some)(new NumberGreaterThanOrEqual(filter$1.field, new NumberFieldValue(filter$1.value)));
824
+ case "$lt": return (0, __globalart_oxide.Some)(new NumberLessThan(filter$1.field, new NumberFieldValue(filter$1.value)));
825
+ case "$lte": return (0, __globalart_oxide.Some)(new NumberLessThanOrEqual(filter$1.field, new NumberFieldValue(filter$1.value)));
826
+ case "$is_empty": return (0, __globalart_oxide.Some)(new NumberEmpty(filter$1.field));
827
+ case "$is_not_empty": return (0, __globalart_oxide.Some)(new NumberEmpty(filter$1.field).not());
828
+ default: return __globalart_oxide.None;
830
829
  }
831
830
  };
832
831
  const convertBooleanFilter = (filter$1) => {
833
- if (filter$1 === void 0) return oxide_ts.None;
832
+ if (filter$1 === void 0) return __globalart_oxide.None;
834
833
  switch (filter$1.operator) {
835
- case "$eq": return (0, oxide_ts.Some)(new BooleanEqual(filter$1.field, new BooleanFieldValue(filter$1.value)));
836
- case "$neq": return (0, oxide_ts.Some)(new BooleanNotEqual(filter$1.field, new BooleanFieldValue(filter$1.value)));
834
+ case "$eq": return (0, __globalart_oxide.Some)(new BooleanEqual(filter$1.field, new BooleanFieldValue(filter$1.value)));
835
+ case "$neq": return (0, __globalart_oxide.Some)(new BooleanNotEqual(filter$1.field, new BooleanFieldValue(filter$1.value)));
837
836
  }
838
- return (0, oxide_ts.Some)(new BooleanEqual(filter$1.field, new BooleanFieldValue(filter$1.value)));
837
+ return (0, __globalart_oxide.Some)(new BooleanEqual(filter$1.field, new BooleanFieldValue(filter$1.value)));
839
838
  };
840
839
  const convertDateFilter = (filter$1) => {
841
- if (filter$1 === void 0) return oxide_ts.None;
840
+ if (filter$1 === void 0) return __globalart_oxide.None;
842
841
  switch (filter$1.operator) {
843
- case "$eq": return (0, oxide_ts.Some)(new DateEqual(filter$1.field, DateFieldValue.fromNullableString(filter$1.value), filter$1.relation));
844
- case "$between": return (0, oxide_ts.Some)(new DateBetween(filter$1.field, new Date(filter$1.value[0]), new Date(filter$1.value[1])));
842
+ case "$eq": return (0, __globalart_oxide.Some)(new DateEqual(filter$1.field, DateFieldValue.fromNullableString(filter$1.value), filter$1.relation));
843
+ case "$between": return (0, __globalart_oxide.Some)(new DateBetween(filter$1.field, new Date(filter$1.value[0]), new Date(filter$1.value[1])));
845
844
  }
846
- return oxide_ts.None;
845
+ return __globalart_oxide.None;
847
846
  };
848
847
  const convertFilter = (filter$1) => {
849
- return (0, ts_pattern.match)(filter$1).returnType().with({ type: "number" }, (f) => convertNumberFilter(f)).with({ type: "string" }, (f) => convertStringFilter(f)).with({ type: "date" }, (f) => convertDateFilter(f)).with({ type: "boolean" }, (f) => convertBooleanFilter(f)).otherwise(() => oxide_ts.None);
848
+ return (0, ts_pattern.match)(filter$1).returnType().with({ type: "number" }, (f) => convertNumberFilter(f)).with({ type: "string" }, (f) => convertStringFilter(f)).with({ type: "date" }, (f) => convertDateFilter(f)).with({ type: "boolean" }, (f) => convertBooleanFilter(f)).otherwise(() => __globalart_oxide.None);
850
849
  };
851
850
  const convertFilterOrGroup = (filterOrGroup$1) => {
852
851
  if (isGroup(filterOrGroup$1)) return convertFilterOrGroupList(filterOrGroup$1.children, filterOrGroup$1.conjunction);
853
852
  else if (isFilter(filterOrGroup$1)) return convertFilter(filterOrGroup$1);
854
- return oxide_ts.None;
853
+ return __globalart_oxide.None;
855
854
  };
856
855
  const convertFilterOrGroupList = (filterOrGroupList$1 = [], conjunction = "$and") => {
857
- let spec = oxide_ts.None;
856
+ let spec = __globalart_oxide.None;
858
857
  for (const filter$1 of filterOrGroupList$1) if (spec.isNone()) {
859
858
  spec = convertFilterOrGroup(filter$1);
860
859
  if (conjunction === "$not") return spec.map((s) => s.not());
@@ -979,8 +978,7 @@ var ID = class extends ValueObject {
979
978
  var NanoID = class NanoID extends ID {
980
979
  static ALPHABETS = "0123456789abcdefghijklmnopqrstuvwxyz";
981
980
  static createId(prefix = "", size = 5) {
982
- const id = (0, nanoid.customAlphabet)(NanoID.ALPHABETS, size)();
983
- return prefix + id;
981
+ return prefix + (0, nanoid.customAlphabet)(NanoID.ALPHABETS, size)();
984
982
  }
985
983
  get value() {
986
984
  return this.props.value;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["#domainEvents","z","payload: TPayload","operatorId: string","meta: TMeta","message: string","cause?: Error","metadata?: unknown","z","z","props: ValueObjectProps<T>","z","z","z","z","z","z","z","z","z","left: ISpecification<T, V>","right: ISpecification<T, V>","spec: ISpecification<T, V>","None","field: string","value: V","relation?: string","field: string","dateStart: Date","dateEnd: Date","relation?: string","field: string","filterTuple: [T, ...T[]]","filter","z","group: z.ZodType<{\n conjunction?: IConjunction;\n children?: (z.infer<typeof group> | z.infer<typeof filter>)[];\n }>","group","filterOrGroupList","group: z.ZodType<IGroup>","filterOrGroup","operatorsMap: Record<IFieldType, IOperator[]>","None","spec: Option<BaseFilterSpecification>","z","z","z","z"],"sources":["../src/aggregate-root.ts","../src/command.ts","../src/event.ts","../src/exception.base.ts","../src/filter/base.filter.ts","../src/filter/conjunction.ts","../src/utils.ts","../src/value-objects/value-object.ts","../src/filter/fields/field-value.base.ts","../src/filter/fields/boolean/boolean-field-value.ts","../src/filter/fields/boolean/boolean-field.type.ts","../src/filter/operators.ts","../src/filter/fields/boolean/boolean.filter.ts","../src/filter/fields/date/date-field-value.ts","../src/filter/fields/date/date-field.type.ts","../src/filter/fields/date/date.filter.ts","../src/filter/fields/number/number-field-value.ts","../src/filter/fields/number/number-field.type.ts","../src/filter/fields/number/number.filter.ts","../src/filter/fields/string/string-field-value.ts","../src/filter/fields/string/string-field.type.ts","../src/filter/fields/string/string.filter.ts","../src/specification.ts","../src/filter/filter-specification.base.ts","../src/filter/specifications/boolean.specification.ts","../src/filter/specifications/date.specification.ts","../src/filter/specifications/number.specification.ts","../src/filter/specifications/string.specification.ts","../src/filter/filter.ts","../src/filter/root-filter.ts","../src/pagination.ts","../src/query.ts","../src/sort.ts","../src/value-objects/boolean.vo.ts","../src/value-objects/date.vo.ts","../src/value-objects/id.vo.ts","../src/value-objects/nanoid.vo.ts","../src/value-objects/integer.vo.ts","../src/value-objects/string.vo.ts","../src/value-objects/uuid.vo.ts","../src/value-objects/email.vo.ts","../src/value-objects/color.vo.ts"],"sourcesContent":["import { type BaseEvent } from \"./event\";\n\nexport abstract class AggregateRoot<E extends BaseEvent> {\n #domainEvents: E[] = [];\n\n get domainEvents() {\n return this.#domainEvents;\n }\n\n set domainEvents(events: E[]) {\n this.#domainEvents = events;\n }\n\n addDomainEvent(event: E) {\n this.#domainEvents.push(event);\n }\n\n removeEvents(events: E[]) {\n this.#domainEvents = this.#domainEvents.filter(\n (event) => !events.includes(event),\n );\n }\n}\n","import { v4 } from \"uuid\";\n\nexport type CommandProps<T> = Omit<T, \"correlationId\" | \"commandId\"> &\n Partial<Command>;\n\nexport abstract class Command {\n public readonly commandId: string;\n\n public readonly correlationId: string;\n\n public readonly causationId?: string;\n\n constructor(props: CommandProps<unknown>) {\n this.correlationId = props.correlationId ?? v4();\n this.commandId = props.commandId ?? v4();\n }\n}\n","import { v4 } from \"uuid\";\nimport { z } from \"zod\";\n\nexport const eventSchema = <\n TName extends string,\n TPayload extends z.ZodTypeAny,\n TMeta extends z.ZodTypeAny,\n>(\n name: TName,\n payload: TPayload,\n meta: TMeta,\n) =>\n z.object({\n id: z.string().uuid(),\n name: z.literal(name),\n operatorId: z.string().optional(),\n payload: payload,\n timestamp: z.coerce.date(),\n meta: meta,\n });\n\nexport interface IEvent<TPayload extends object = object, TMeta = any> {\n id: string;\n name: string;\n operatorId: string;\n payload: TPayload;\n timestamp: Date;\n meta: TMeta;\n}\n\nexport interface IEventJSON<TPayload extends object = object, TMeta = any> {\n id: string;\n name: string;\n operatorId: string;\n payload: TPayload;\n timestamp: string;\n meta: TMeta;\n}\n\nexport abstract class BaseEvent<\n TPayload extends object = object,\n TName extends string = string,\n TMeta extends any = { key?: string; headers?: Record<string, string> },\n> implements IEvent<TPayload>\n{\n abstract name: TName;\n constructor(\n public readonly payload: TPayload,\n public readonly operatorId: string,\n public readonly meta: TMeta,\n public readonly id = v4(),\n public readonly timestamp = new Date(),\n ) {}\n\n toJSON(): IEventJSON<TPayload, TMeta> {\n return {\n id: this.id,\n name: this.name,\n operatorId: this.operatorId,\n timestamp: this.timestamp.toISOString(),\n payload: this.payload,\n meta: this.meta,\n };\n }\n}\n","export interface SerializedException {\n message: string;\n code: string;\n correlationId?: string;\n stack?: string;\n cause?: string;\n metadata?: unknown;\n}\n\nexport abstract class ExceptionBase extends Error {\n abstract code: string;\n\n public readonly correlationId?: string;\n\n /**\n *\n * @param message\n * @param correlationId\n * @param cause\n * @param metadata\n */\n constructor(\n readonly message: string,\n correlationId?: string,\n readonly cause?: Error,\n readonly metadata?: unknown,\n ) {\n super(message);\n Error.captureStackTrace(this, this.constructor);\n this.correlationId = correlationId;\n }\n\n toJSON(): SerializedException {\n return {\n message: this.message,\n code: this.code,\n stack: this.stack,\n correlationId: this.correlationId,\n cause: JSON.stringify(this.cause),\n metadata: this.metadata,\n };\n }\n}\n","import { z } from \"zod\";\n\nexport const baseFilter = z.object({\n field: z.string().min(1),\n relation: z.string().min(1).optional(),\n});\n","import { z } from \"zod\";\n\nconst $and = z.literal(\"$and\");\nconst $or = z.literal(\"$or\");\nconst $not = z.literal(\"$not\");\nexport const conjunctions = z.union([$and, $or, $not]);\nexport type IConjunction = z.infer<typeof conjunctions>;\n","import { ValueObject } from \"./value-objects/value-object\";\n\nexport function convertPropsToObject(props: any): any {\n const propsCopy = { ...props };\n\n // eslint-disable-next-line guard-for-in\n for (const prop in propsCopy) {\n if (Array.isArray(propsCopy[prop])) {\n propsCopy[prop] = (propsCopy[prop] as Array<unknown>).map((item) => {\n return convertToPlainObject(item);\n });\n }\n propsCopy[prop] = convertToPlainObject(propsCopy[prop]);\n }\n\n return propsCopy;\n}\n\nfunction convertToPlainObject(item: any): any {\n if (ValueObject.isValueObject(item)) {\n return item.unpack();\n }\n\n return item;\n}\n","import { dequal } from \"dequal\";\nimport { convertPropsToObject } from \"../utils.js\";\nexport type Primitives = string | number | boolean | null;\nexport interface DomainPrimitive<T extends Primitives | Date> {\n value: T;\n}\n\nexport type ValueObjectProps<T> = T extends Primitives | Date\n ? DomainPrimitive<T>\n : T;\n\nexport abstract class ValueObject<T = any> {\n constructor(protected readonly props: ValueObjectProps<T>) {}\n\n public equals(vo?: ValueObject<T>): boolean {\n if (vo === null || vo === undefined) {\n return false;\n }\n\n return dequal(vo, this);\n }\n\n static isValueObject(obj: unknown): obj is ValueObject<unknown> {\n return obj instanceof ValueObject;\n }\n\n public unpack(): T {\n if (this.isDomainPrimitive(this.props)) {\n return this.props.value;\n }\n\n const propsCopy = convertPropsToObject(this.props);\n\n return Object.freeze(propsCopy);\n }\n\n private isDomainPrimitive(\n obj: unknown\n ): obj is DomainPrimitive<T & (Primitives | Date)> {\n if (Object.prototype.hasOwnProperty.call(obj, \"value\")) {\n return true;\n }\n\n return false;\n }\n}\n","import { ValueObject } from \"../../value-objects/value-object\";\nimport { type IFieldValueVisitor } from \"./field-value.visitor\";\nimport { type UnpackedFieldValue } from \"./field.type\";\n\nexport abstract class FieldValueBase<\n V extends UnpackedFieldValue,\n> extends ValueObject<V> {\n abstract accept(visitor: IFieldValueVisitor): void;\n}\n","import { FieldValueBase } from \"../field-value.base\";\nimport { type IFieldValueVisitor } from \"../field-value.visitor\";\nimport { type IBooleanFieldValue } from \"./boolean-field.type\";\n \nexport class BooleanFieldValue extends FieldValueBase<IBooleanFieldValue> {\n constructor(value: IBooleanFieldValue) {\n super({ value });\n }\n\n accept(visitor: IFieldValueVisitor): void {\n visitor.boolean(this);\n }\n}\n","import { z } from \"zod\";\n\nexport const booleanFieldValue = z.boolean().nullable();\nexport type IBooleanFieldValue = z.infer<typeof booleanFieldValue>;\n","import { z } from \"zod\";\n\nexport const $eq = z.literal(\"$eq\");\nexport const $neq = z.literal(\"$neq\");\nexport const $contains = z.literal(\"$contains\");\nexport const $not_contains = z.literal(\"$not_contains\");\nexport const $starts_with = z.literal(\"$starts_with\");\nexport const $ends_with = z.literal(\"$ends_with\");\nexport const $regex = z.literal(\"$regex\");\n\nexport const $is_true = z.literal(\"$is_true\");\nexport const $is_false = z.literal(\"$is_false\");\n\nexport const $in = z.literal(\"$in\");\nexport const $nin = z.literal(\"$nin\");\n\nexport const $gt = z.literal(\"$gt\");\nexport const $lt = z.literal(\"$lt\");\nexport const $gte = z.literal(\"$gte\");\nexport const $lte = z.literal(\"$lte\");\n\nexport const $start_eq = z.literal(\"$start_eq\");\nexport const $start_neq = z.literal(\"$start_neq\");\nexport const $start_gt = z.literal(\"$start_gt\");\nexport const $start_lt = z.literal(\"$start_lt\");\nexport const $start_gte = z.literal(\"$start_gte\");\nexport const $start_lte = z.literal(\"$start_lte\");\n\nexport const $end_eq = z.literal(\"$end_eq\");\nexport const $end_neq = z.literal(\"$end_neq\");\nexport const $end_gt = z.literal(\"$end_gt\");\nexport const $end_lt = z.literal(\"$end_lt\");\nexport const $end_gte = z.literal(\"$end_gte\");\nexport const $end_lte = z.literal(\"$end_lte\");\n\nexport const $is_empty = z.literal(\"$is_empty\");\nexport const $is_not_empty = z.literal(\"$is_not_empty\");\n\nexport const $is_today = z.literal(\"$is_today\");\nexport const $is_not_today = z.literal(\"$is_not_today\");\nexport const $is_tomorrow = z.literal(\"$is_tomorrow\");\nexport const $is_yesterday = z.literal(\"$is_yesterday\");\nexport const $between = z.literal(\"$between\");\n\nexport const $has_file_type = z.literal(\"$has_file_type\");\nexport const $has_file_extension = z.literal(\"$has_file_extension\");\n\nexport const $is_root = z.literal(\"$is_root\");\n\nexport const $is_me = z.literal(\"$is_me\");\nexport const $is_not_me = z.literal(\"$is_not_me\");\n\nexport const operatorsWihtoutValue = z.union([\n $is_empty,\n $is_not_empty,\n $is_today,\n $is_not_today,\n $is_tomorrow,\n $is_yesterday,\n $is_root,\n $is_me,\n $is_not_me,\n]);\nexport const isOperatorWithoutValue = (value: string): boolean =>\n operatorsWihtoutValue.safeParse(value).success;\n","import { z } from \"zod\";\nimport { baseFilter } from \"../../base.filter\";\nimport {\n $eq,\n $neq\n} from \"../../operators\";\n\nexport const booleanFilterOperators = z.union([\n $eq,\n $neq,\n]);\n\nexport const booleanFilterValue = z.boolean().nullable();\nexport const booleanFilter = z\n .object({\n type: z.literal(\"boolean\"),\n operator: booleanFilterOperators,\n value: booleanFilterValue,\n })\n .merge(baseFilter);\n\nexport type IBooleanFilter = z.infer<typeof booleanFilter>;\nexport type IBooleanFilterOperator = z.infer<typeof booleanFilterOperators>;\n","import { FieldValueBase } from \"../field-value.base\";\nimport { type IFieldValueVisitor } from \"../field-value.visitor\";\nimport { type IDateFieldValue } from \"./date-field.type\";\n\nexport class DateFieldValue extends FieldValueBase<IDateFieldValue> {\n constructor(value: IDateFieldValue) {\n super({ value });\n }\n\n accept(visitor: IFieldValueVisitor): void {\n visitor.date(this);\n }\n\n static fromNullableString(str: string | null): DateFieldValue {\n if (!str) {\n return new this(null);\n }\n\n return new this(new Date(str));\n }\n}\n","import { z } from \"zod\";\n\nexport const dateFieldValue = z.date().nullable();\n\nexport type IDateFieldValue = z.infer<typeof dateFieldValue>;\n","import { z } from \"zod\";\nimport {\n $between,\n $eq,\n $gt,\n $gte,\n $is_not_today,\n $is_today,\n $is_tomorrow,\n $is_yesterday,\n $lt,\n $lte,\n $neq,\n} from \"../../operators\";\nimport { baseFilter } from \"../../base.filter\";\n\nexport const dateFilterOperators = z.union([\n $eq,\n $neq,\n $gt,\n $gte,\n $lt,\n $lte,\n $between,\n $is_today,\n $is_tomorrow,\n $is_yesterday,\n $is_not_today,\n]);\n\nexport const dateFilterValue = z\n .string()\n .nullable()\n .or(z.tuple([z.string(), z.string()]));\nexport const dateFilter = z\n .object({\n type: z.literal(\"date\"),\n operator: dateFilterOperators,\n value: dateFilterValue,\n })\n .merge(baseFilter);\n\nexport type IDateFilter = z.infer<typeof dateFilter>;\nexport type IDateFilterValue = z.infer<typeof dateFilterValue>;\nexport type IDateFilterOperator = z.infer<typeof dateFilterOperators>;\n","import { FieldValueBase } from \"../field-value.base\";\nimport { type IFieldValueVisitor } from \"../field-value.visitor\";\nimport { type INumberFieldValue } from \"./number-field.type\";\n\nexport class NumberFieldValue extends FieldValueBase<INumberFieldValue> {\n constructor(value: INumberFieldValue) {\n super({ value });\n }\n\n accept(visitor: IFieldValueVisitor): void {\n visitor.number(this);\n }\n}\n","import { z } from \"zod\";\n\nexport const numberFieldValue = z.number().or(z.null());\nexport type INumberFieldValue = z.infer<typeof numberFieldValue>;\n","import { z } from \"zod\";\nimport {\n $eq,\n $gt,\n $gte,\n $is_empty,\n $is_not_empty,\n $lt,\n $lte,\n $neq,\n} from \"../../operators\";\nimport { baseFilter } from \"../../base.filter\";\n\nexport const numberFilterOperators = z.union([\n $eq,\n $neq,\n $gt,\n $gte,\n $lt,\n $lte,\n $is_empty,\n $is_not_empty,\n]);\nexport type INumberFilterOperators = z.infer<typeof numberFilterOperators>;\n\nexport const numberFilterValue = z.number().nullable();\nexport const numberFilter = z\n .object({\n type: z.literal(\"number\"),\n operator: numberFilterOperators,\n value: numberFilterValue,\n })\n .merge(baseFilter);\n\nexport type INumberFilter = z.infer<typeof numberFilter>;\nexport type INumberFilterValue = z.infer<typeof numberFilterValue>;\n","import { FieldValueBase } from \"../field-value.base\";\nimport { type IFieldValueVisitor } from \"../field-value.visitor\";\nimport { type IStringFieldValue } from \"./string-field.type\";\n\nexport class StringFieldValue extends FieldValueBase<IStringFieldValue> {\n constructor(value: IStringFieldValue) {\n super({ value });\n }\n\n accept(visitor: IFieldValueVisitor): void {\n visitor.string(this);\n }\n}\n","import { z } from \"zod\";\n\nexport const stringFieldValue = z.string().nullable();\nexport type IStringFieldValue = z.infer<typeof stringFieldValue>;\n","import { z } from \"zod\";\nimport { baseFilter } from \"../../base.filter\";\nimport {\n $eq,\n $neq,\n $contains,\n $not_contains,\n $starts_with,\n $ends_with,\n $regex,\n $is_empty,\n $is_not_empty,\n} from \"../../operators\";\n\nexport const stringFilterOperators = z.union([\n $eq,\n $neq,\n $contains,\n $not_contains,\n $starts_with,\n $ends_with,\n $regex,\n $is_empty,\n $is_not_empty,\n]);\n\nexport const stringFilterValue = z.string().nullable();\nexport const stringFilter = z\n .object({\n type: z.literal(\"string\"),\n operator: stringFilterOperators,\n value: stringFilterValue,\n })\n .merge(baseFilter);\n\nexport type IStringFilter = z.infer<typeof stringFilter>;\nexport type IStringFilterOperator = z.infer<typeof stringFilterOperators>;\n","import type { Option, Result } from \"oxide.ts\";\nimport { None, Ok, Some } from \"oxide.ts\";\n\nexport interface ISpecVisitor {\n or(left: ISpecification, right: ISpecification): this;\n not(): this;\n}\n\nexport interface ISpecification<\n T = any,\n V extends ISpecVisitor = ISpecVisitor,\n> {\n isSatisfiedBy(t: T): boolean;\n mutate(t: T): Result<T, string>;\n accept(v: V): Result<void, string>;\n}\n\nexport abstract class CompositeSpecification<\n T = any,\n V extends ISpecVisitor = ISpecVisitor,\n> implements ISpecification<T, V>\n{\n abstract isSatisfiedBy(t: T): boolean;\n abstract mutate(t: T): Result<T, string>;\n abstract accept(v: V): Result<void, string>;\n\n public and(s: ISpecification<T, V>): CompositeSpecification<T, V> {\n return new And(this, s);\n }\n\n public or(s: ISpecification<T, V>): CompositeSpecification<T, V> {\n return new Or(this, s);\n }\n\n public not(): Not<T, V> {\n return new Not(this);\n }\n}\n\nclass And<T, V extends ISpecVisitor> extends CompositeSpecification<T, V> {\n constructor(\n private readonly left: ISpecification<T, V>,\n private readonly right: ISpecification<T, V>,\n ) {\n super();\n }\n\n isSatisfiedBy(t: T): boolean {\n return this.left.isSatisfiedBy(t) && this.right.isSatisfiedBy(t);\n }\n\n mutate(t: T): Result<T, string> {\n return this.left.mutate(t).and(this.right.mutate(t));\n }\n\n accept(v: V): Result<void, string> {\n return this.left.accept(v).and(this.right.accept(v));\n }\n}\n\nclass Or<T, V extends ISpecVisitor> extends CompositeSpecification<T, V> {\n constructor(\n private readonly left: ISpecification<T, V>,\n private readonly right: ISpecification<T, V>,\n ) {\n super();\n }\n\n isSatisfiedBy(t: T): boolean {\n return this.left.isSatisfiedBy(t) || this.right.isSatisfiedBy(t);\n }\n\n mutate(t: T): Result<T, string> {\n return this.left.mutate(t).orElse(() => this.right.mutate(t));\n }\n\n accept(v: V): Result<void, string> {\n v.or(this.left, this.right);\n\n return Ok(undefined);\n }\n}\n\nclass Not<T, V extends ISpecVisitor> extends CompositeSpecification<T, V> {\n constructor(public readonly spec: ISpecification<T, V>) {\n super();\n }\n\n isSatisfiedBy(t: T): boolean {\n return !this.spec.isSatisfiedBy(t);\n }\n\n mutate(): Result<T, string> {\n throw new Error(\"[Not.mutate] Method not implemented.\");\n }\n\n accept(v: V): Result<void, string> {\n return this.spec.accept(v.not());\n }\n}\n\nexport const and = <T, V extends ISpecVisitor>(\n ...specs: CompositeSpecification<T, V>[]\n): Option<CompositeSpecification<T, V>> => {\n if (!specs.length) {\n return None;\n }\n\n let s = specs[0];\n for (const spec of specs.slice(1)) {\n s = s.and(spec);\n }\n\n return Some(s);\n};\n\nexport const andOptions = <T, V extends ISpecVisitor>(\n ...specs: Option<CompositeSpecification<T, V>>[]\n): Option<CompositeSpecification<T, V>> => {\n return and(\n ...specs.filter((spec) => spec.isSome()).map((spec) => spec.unwrap()),\n );\n};\n\nexport const or = <T, V extends ISpecVisitor>(\n ...specs: CompositeSpecification<T, V>[]\n): Option<CompositeSpecification<T, V>> => {\n if (!specs.length) {\n return None;\n }\n\n let s = specs[0];\n for (const spec of specs.slice(1)) {\n s = s.or(spec);\n }\n\n return Some(s);\n};\n","import { type IFilterBaseVisitor } from \"./filter-specification-visitor.base\";\nimport { CompositeSpecification } from \"../specification\";\nimport { type Result } from \"oxide.ts\";\n\nexport abstract class BaseFilterSpecification<\n E = unknown,\n V = unknown,\n> extends CompositeSpecification<E, IFilterBaseVisitor> {\n constructor(\n public readonly field: string,\n public readonly value: V,\n public readonly relation?: string,\n ) {\n super();\n }\n\n mutate(t: E): Result<E, string> {\n throw new Error(\"Method not implemented.\");\n }\n}\n","import { Ok, type Result } from \"oxide.ts\";\nimport { BooleanFieldValue } from \"../fields/boolean/boolean-field-value\";\nimport { type IFilterBaseVisitor } from \"../filter-specification-visitor.base\";\nimport { BaseFilterSpecification } from \"../filter-specification.base\";\n\nexport class BooleanEqual extends BaseFilterSpecification<\n unknown,\n BooleanFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof BooleanFieldValue && this.value.equals(value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.booleanEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class BooleanNotEqual extends BaseFilterSpecification<\n unknown,\n BooleanFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof BooleanFieldValue && this.value.equals(value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.booleanNotEqual(this);\n\n return Ok(undefined);\n }\n}\n\n","import {\n isAfter,\n isBefore,\n isEqual,\n isToday,\n isTomorrow,\n isWithinInterval,\n isYesterday,\n} from \"date-fns\";\nimport { Ok, type Result } from \"oxide.ts\";\nimport { DateFieldValue } from \"../fields/date/date-field-value\";\nimport { type IFilterBaseVisitor } from \"../filter-specification-visitor.base\";\nimport { BaseFilterSpecification } from \"../filter-specification.base\";\n\nexport class DateEqual extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof DateFieldValue && value.equals(this.value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateGreaterThan extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n const d1 = value.unpack();\n const d2 = this.value.unpack();\n\n return !!d1 && !!d2 && isAfter(d1, d2);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateGreaterThan(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateLessThan extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const d1 = value.unpack();\n const d2 = this.value.unpack();\n\n return !!d1 && !!d2 && isBefore(d1, d2);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateLessThan(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateGreaterThanOrEqual extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const d1 = value.unpack();\n const d2 = this.value.unpack();\n\n return !!d1 && !!d2 && (isEqual(d1, d2) || isAfter(d1, d2));\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateGreaterThanOrEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateLessThanOrEqual extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const d1 = value.unpack();\n const d2 = this.value.unpack();\n\n return !!d1 && !!d2 && (isEqual(d1, d2) || isBefore(d1, d2));\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateLessThanOrEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateIsToday extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const date = value.unpack();\n\n return !!date && isToday(date);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateIsToday(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateIsTomorrow extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const date = value.unpack();\n\n return !!date && isTomorrow(date);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateIsTomorrow(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateIsYesterday extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const date = value.unpack();\n\n return !!date && isYesterday(date);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateIsYesterday(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateBetween extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n constructor(\n public field: string,\n public dateStart: Date,\n public dateEnd: Date,\n public relation?: string,\n ) {\n super(field, new DateFieldValue(dateStart), relation);\n }\n\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const date = value.unpack();\n\n return (\n !!date &&\n isWithinInterval(date, { start: this.dateStart, end: this.dateEnd })\n );\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateBetween(this);\n\n return Ok(undefined);\n }\n}\n","import { Ok, type Result } from \"oxide.ts\";\nimport { type IFilterBaseVisitor } from \"../filter-specification-visitor.base\";\nimport { BaseFilterSpecification } from \"../filter-specification.base\";\nimport { NumberFieldValue } from \"../fields/number/number-field-value\";\n\nfunction isNil(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n\nfunction isNumber(value: unknown): value is number {\n return typeof value === \"number\";\n}\n\nexport class NumberEqual extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof NumberFieldValue && value.equals(this.value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class NumberGreaterThan extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof NumberFieldValue)) {\n return false;\n }\n const n1 = value.unpack();\n const n2 = this.value.unpack();\n if (n1 === null && isNumber(n2)) {\n return true;\n }\n\n return n1 !== null && n2 !== null && n1 > n2;\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberGreaterThan(this);\n\n return Ok(undefined);\n }\n}\n\nexport class NumberLessThan extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof NumberFieldValue)) {\n return false;\n }\n const n1 = value.unpack();\n const n2 = this.value.unpack();\n\n return n1 !== null && n2 !== null && n1 < n2;\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberLessThan(this);\n\n return Ok(undefined);\n }\n}\n\nexport class NumberGreaterThanOrEqual extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof NumberFieldValue)) {\n return false;\n }\n const n1 = value.unpack();\n const n2 = this.value.unpack();\n if (n1 === null && isNumber(n2)) {\n return true;\n }\n\n return n1 !== null && n2 !== null && n1 >= n2;\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberGreaterThanOrEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class NumberLessThanOrEqual extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof NumberFieldValue)) {\n return false;\n }\n const n1 = value.unpack();\n const n2 = this.value.unpack();\n\n return n1 !== null && n2 !== null && n1 <= n2;\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberLessThanOrEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class NumberEmpty extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n constructor(public readonly field: string) {\n super(field, new NumberFieldValue(null));\n }\n\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof NumberFieldValue && isNil(value.unpack());\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberEmpty(this);\n\n return Ok(undefined);\n }\n}\n","import { Ok, type Result } from \"oxide.ts\";\nimport { StringFieldValue } from \"../fields/string/string-field-value\";\nimport { type IFilterBaseVisitor } from \"../filter-specification-visitor.base\";\nimport { BaseFilterSpecification } from \"../filter-specification.base\";\n\nexport class StringEqual extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof StringFieldValue && this.value.equals(value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringNotEqual extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof StringFieldValue && this.value.equals(value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringNotEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringContain extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof StringFieldValue)) {\n return false;\n }\n\n const s1 = value.unpack();\n const s2 = this.value.unpack();\n\n return !!s1 && !!s2 && s1.includes(s2);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringContain(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringStartsWith extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof StringFieldValue)) {\n return false;\n }\n\n const s1 = value.unpack();\n const s2 = this.value.unpack();\n\n return !!s1 && !!s2 && s1.startsWith(s2);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringStartsWith(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringEndsWith extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof StringFieldValue)) {\n return false;\n }\n\n const s1 = value.unpack();\n const s2 = this.value.unpack();\n\n return !!s1 && !!s2 && s1.endsWith(s2);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringEndsWith(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringRegex extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof StringFieldValue)) {\n return false;\n }\n\n const s1 = value.unpack();\n const s2 = this.value.unpack();\n\n return !!s1 && !!s2 && new RegExp(s2).test(s1);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringRegex(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringEmpty extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n constructor(field: string) {\n super(field, new StringFieldValue(null));\n }\n\n isSatisfiedBy(value: unknown): boolean {\n if (value instanceof StringFieldValue) {\n return !value.unpack();\n }\n\n return !value;\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringEmpty(this);\n\n return Ok(undefined);\n }\n}\n","import { None, Some, type Option } from \"oxide.ts\";\nimport { match } from \"ts-pattern\";\nimport { z } from \"zod\";\nimport { conjunctions, type IConjunction } from \"./conjunction\";\nimport { BooleanFieldValue, booleanFilter, IBooleanFilter } from \"./fields\";\nimport { DateFieldValue } from \"./fields/date/date-field-value\";\nimport { dateFilter, type IDateFilter } from \"./fields/date/date.filter\";\nimport { NumberFieldValue } from \"./fields/number/number-field-value\";\nimport {\n numberFilter,\n numberFilterOperators,\n type INumberFilter,\n} from \"./fields/number/number.filter\";\nimport { StringFieldValue } from \"./fields/string/string-field-value\";\nimport {\n stringFilter,\n stringFilterOperators,\n type IStringFilter,\n} from \"./fields/string/string.filter\";\nimport { type BaseFilterSpecification } from \"./filter-specification.base\";\nimport { BooleanEqual, BooleanNotEqual } from \"./specifications/boolean.specification\";\nimport { DateBetween, DateEqual } from \"./specifications/date.specification\";\nimport {\n NumberEmpty,\n NumberEqual,\n NumberGreaterThan,\n NumberGreaterThanOrEqual,\n NumberLessThan,\n NumberLessThanOrEqual,\n} from \"./specifications/number.specification\";\nimport {\n StringContain,\n StringEmpty,\n StringEndsWith,\n StringEqual,\n StringNotEqual,\n StringRegex,\n StringStartsWith,\n} from \"./specifications/string.specification\";\n\nexport const filterRoorFilter = <T extends z.ZodType>(filters: [T, ...T[]]) => {\n const filterTuple: [T, ...T[]] = [filters[0], ...filters.slice(1)];\n\n const filter = z.union(filterTuple as [T, T, ...T[]]);\n\n const group: z.ZodType<{\n conjunction?: IConjunction;\n children?: (z.infer<typeof group> | z.infer<typeof filter>)[];\n }> = z.lazy(() =>\n z.object({\n conjunction: conjunctions,\n children: z.union([group, filter]).array().nonempty().optional(),\n })\n );\n\n const filterOrGroup = filter.or(group);\n type IFilterOrGroup = z.infer<typeof filterOrGroup>;\n const filterOrGroupList = filterOrGroup.array();\n\n return group.or(filterOrGroupList);\n};\n\nconst filter = z.discriminatedUnion(\"type\", [\n numberFilter,\n stringFilter,\n dateFilter,\n booleanFilter,\n]);\n\nexport type IFilter = z.infer<typeof filter>;\nexport type IFilters = IFilter[];\n\nexport interface IGroup<Filter extends IFilter = IFilter> {\n conjunction?: IConjunction;\n children?: IFilterOrGroupList<Filter>;\n}\n\nconst group: z.ZodType<IGroup> = z.lazy(() =>\n z.object({\n conjunction: conjunctions,\n children: z.union([group, filter]).array().nonempty().optional(),\n })\n);\n\nconst filterOrGroup = filter.or(group);\nexport type IFilterOrGroup<Filter extends IFilter = IFilter> =\n | Filter\n | IGroup<Filter>;\n\nexport const filterOrGroupList = filterOrGroup.array();\nexport type IFilterOrGroupList<Filter extends IFilter = IFilter> =\n IFilterOrGroup<Filter>[];\nexport const rootFilter = filterOrGroup.or(filterOrGroupList);\nexport type IRootFilter<Filter extends IFilter = IFilter> =\n | IFilterOrGroup<Filter>\n | IFilterOrGroupList<Filter>;\n\nexport const isGroup = (\n filterOrGroup: IFilterOrGroup\n): filterOrGroup is IGroup => {\n return Reflect.has(filterOrGroup, \"conjunction\");\n};\n\nexport const isFilter = (\n filterOrGroup: IFilterOrGroup\n): filterOrGroup is IFilter => {\n return (\n Reflect.has(filterOrGroup, \"type\") && Reflect.has(filterOrGroup, \"operator\")\n );\n};\n\nexport const operators = z.union([\n numberFilterOperators,\n stringFilterOperators,\n]);\nexport type IOperator = z.infer<typeof operators>;\n\ntype IFieldType = \"number\";\n\nexport const operatorsMap: Record<IFieldType, IOperator[]> = {\n number: numberFilterOperators.options.map((v) => v.value),\n};\n\nconst convertStringFilter = (\n filter: IStringFilter\n): Option<BaseFilterSpecification> => {\n if (filter.value === undefined) {\n return None;\n }\n\n switch (filter.operator) {\n case \"$eq\": {\n return Some(\n new StringEqual(\n filter.field,\n new StringFieldValue(filter.value),\n filter.relation\n )\n );\n }\n case \"$neq\": {\n return Some(\n new StringNotEqual(\n filter.field,\n new StringFieldValue(filter.value),\n filter.relation\n )\n );\n }\n case \"$contains\": {\n return Some(\n new StringContain(filter.field, new StringFieldValue(filter.value))\n );\n }\n case \"$not_contains\": {\n return Some(\n new StringContain(\n filter.field,\n new StringFieldValue(filter.value)\n ).not() as unknown as BaseFilterSpecification\n );\n }\n case \"$starts_with\": {\n return Some(\n new StringStartsWith(filter.field, new StringFieldValue(filter.value))\n );\n }\n case \"$ends_with\": {\n return Some(\n new StringEndsWith(filter.field, new StringFieldValue(filter.value))\n );\n }\n case \"$regex\": {\n return Some(\n new StringRegex(filter.field, new StringFieldValue(filter.value))\n );\n }\n case \"$is_empty\": {\n return Some(new StringEmpty(filter.field));\n }\n case \"$is_not_empty\": {\n return Some(\n new StringEmpty(\n filter.field\n ).not() as unknown as BaseFilterSpecification\n );\n }\n\n default:\n return None;\n }\n};\n\nconst convertNumberFilter = (\n filter: INumberFilter\n): Option<BaseFilterSpecification> => {\n if (filter === undefined) {\n return None;\n }\n\n switch (filter.operator) {\n case \"$eq\":\n return Some(\n new NumberEqual(filter.field, new NumberFieldValue(filter.value))\n );\n case \"$neq\": {\n // @ts-ignore\n return Some(\n new NumberEqual(filter.field, new NumberFieldValue(filter.value)).not()\n );\n }\n case \"$gt\": {\n return Some(\n new NumberGreaterThan(filter.field, new NumberFieldValue(filter.value))\n );\n }\n case \"$gte\": {\n return Some(\n new NumberGreaterThanOrEqual(\n filter.field,\n new NumberFieldValue(filter.value)\n )\n );\n }\n case \"$lt\": {\n return Some(\n new NumberLessThan(filter.field, new NumberFieldValue(filter.value))\n );\n }\n case \"$lte\": {\n return Some(\n new NumberLessThanOrEqual(\n filter.field,\n new NumberFieldValue(filter.value)\n )\n );\n }\n case \"$is_empty\": {\n return Some(new NumberEmpty(filter.field));\n }\n case \"$is_not_empty\": {\n // @ts-ignore\n return Some(new NumberEmpty(filter.field).not());\n }\n default:\n return None;\n }\n};\n\nconst convertBooleanFilter = (\n filter: IBooleanFilter\n): Option<BaseFilterSpecification> => {\n if (filter === undefined) {\n return None;\n }\n\n switch (filter.operator) {\n case '$eq': {\n return Some(new BooleanEqual(filter.field, new BooleanFieldValue(filter.value)));\n }\n case '$neq': {\n return Some(new BooleanNotEqual(filter.field, new BooleanFieldValue(filter.value)));\n }\n }\n\n return Some(new BooleanEqual(filter.field, new BooleanFieldValue(filter.value)));\n};\n\nconst convertDateFilter = (\n filter: IDateFilter\n): Option<BaseFilterSpecification> => {\n if (filter === undefined) {\n return None;\n }\n\n switch (filter.operator) {\n case \"$eq\": {\n return Some(\n new DateEqual(\n filter.field,\n DateFieldValue.fromNullableString(filter.value as string),\n filter.relation\n )\n );\n }\n case \"$between\": {\n return Some(\n new DateBetween(\n filter.field,\n new Date((filter.value as [string, string])[0]),\n new Date((filter.value as [string, string])[1])\n )\n );\n }\n }\n\n return None;\n};\n\nconst convertFilter = (filter: IFilter): Option<BaseFilterSpecification> => {\n return match(filter)\n .returnType<Option<BaseFilterSpecification>>()\n .with({ type: \"number\" }, (f) => convertNumberFilter(f))\n .with({ type: \"string\" }, (f) => convertStringFilter(f))\n .with({ type: \"date\" }, (f) => convertDateFilter(f))\n .with({ type: \"boolean\" }, (f) => convertBooleanFilter(f))\n .otherwise(() => None);\n};\n\nconst convertFilterOrGroup = (\n filterOrGroup: IFilterOrGroup\n): Option<BaseFilterSpecification> => {\n if (isGroup(filterOrGroup)) {\n return convertFilterOrGroupList(\n filterOrGroup.children,\n filterOrGroup.conjunction\n );\n } else if (isFilter(filterOrGroup)) {\n return convertFilter(filterOrGroup);\n }\n\n return None;\n};\n\nconst convertFilterOrGroupList = (\n filterOrGroupList: IFilterOrGroupList = [],\n conjunction: IConjunction = \"$and\"\n): Option<BaseFilterSpecification> => {\n let spec: Option<BaseFilterSpecification> = None;\n for (const filter of filterOrGroupList) {\n if (spec.isNone()) {\n spec = convertFilterOrGroup(filter);\n if (conjunction === \"$not\") {\n // @ts-ignore\n return spec.map((s) => s.not());\n }\n } else {\n if (isFilter(filter)) {\n // @ts-ignore\n spec = spec.map((left) => {\n const right = convertFilterOrGroup(filter);\n if (right.isSome()) {\n if (conjunction === \"$and\") {\n return left.and(right.unwrap());\n } else if (conjunction === \"$or\") {\n return left.or(right.unwrap());\n }\n\n return left.and(right.unwrap().not());\n }\n\n return left;\n });\n } else if (isGroup(filter)) {\n spec = convertFilterOrGroupList(filter.children, filter.conjunction);\n }\n }\n }\n\n return spec;\n};\n\nexport const convertFilterSpec = (\n filter: IRootFilter\n): Option<BaseFilterSpecification> => {\n if (Array.isArray(filter)) {\n return convertFilterOrGroupList(filter);\n }\n\n return convertFilterOrGroup(filter);\n};\n\nfunction isEmptyNative(value: unknown): boolean {\n if (value == null) return true;\n if (Array.isArray(value)) return value.length === 0;\n if (typeof value === \"object\") {\n for (const _ in value as object) {\n return false;\n }\n return true;\n }\n return false;\n}\n\nexport const isEmptyFilter = (filter: IRootFilter) => isEmptyNative(filter);\n","import { type Option } from \"oxide.ts\";\nimport { ValueObject } from \"../value-objects/value-object\";\nimport {\n type IFilter,\n type IRootFilter,\n convertFilterSpec,\n isGroup,\n} from \"./filter\";\nimport { type BaseFilterSpecification } from \"./filter-specification.base\";\n\nexport class RootFilter<T extends IFilter = IFilter> extends ValueObject<\n IRootFilter<T>\n> {\n get value() {\n return this.props;\n }\n\n get group() {\n if (Array.isArray(this.value)) {\n return { conjunction: \"$and\", children: this.value };\n }\n if (isGroup(this.value)) {\n return this.value;\n }\n\n return { conjunction: \"$and\", children: [this.value] };\n }\n\n getSpec(): Option<BaseFilterSpecification> {\n return convertFilterSpec(this.value);\n }\n\n public toJSON() {\n return this.props;\n }\n}\n","import { z } from \"zod\";\n\nexport const paginationSchema = z.object({\n limit: z.coerce.number().positive().int().default(10).optional(),\n offset: z.coerce.number().nonnegative().int().default(0).optional(),\n});\n\nexport type IPagination = z.infer<typeof paginationSchema>;\n\nexport const paginatedResponseSchema = paginationSchema.extend({\n total: z.number().nonnegative().int(),\n});\n","export abstract class Query {}\n","import { z } from \"zod\";\n\n// TODO: base sort with possibility limit sorting fields for concrete entity\nexport const sortingSchema = z.record(z.string(), z.enum([\"ASC\", \"DESC\"]));\n\nexport type ISorting = z.infer<typeof sortingSchema>;\n","import { ValueObject } from \"./value-object.js\";\n\nexport class BoolVO extends ValueObject<boolean> {\n constructor(value: boolean) {\n super({ value });\n }\n\n public get value(): boolean {\n return this.props.value;\n }\n\n public static fromBoolean(value: boolean) {\n return new BoolVO(value);\n }\n\n public static True(): BoolVO {\n return new BoolVO(true);\n }\n\n public static False(): BoolVO {\n return new BoolVO(false);\n }\n}\n","import { ValueObject } from \"./value-object.js\";\n\nexport class DateVO extends ValueObject<Date> {\n constructor(value: Date | string | number) {\n const date = new Date(value);\n super({ value: date });\n }\n\n public get value(): Date {\n return this.props.value;\n }\n\n public static fromDate(value: Date) {\n return new DateVO(value);\n }\n\n public static now(): DateVO {\n return new DateVO(Date.now());\n }\n}\n","import { ValueObject, ValueObjectProps } from \"./value-object\";\n\nexport abstract class ID<T = number> extends ValueObject<T> {\n constructor(value: T) {\n super({ value } as ValueObjectProps<T>);\n }\n\n public get value(): T {\n return this.unpack();\n }\n}\n","import { customAlphabet } from \"nanoid\";\nimport { ID } from \"./id.vo.js\";\n\nexport abstract class NanoID extends ID {\n private static ALPHABETS = \"0123456789abcdefghijklmnopqrstuvwxyz\";\n\n static createId(prefix = \"\", size = 5) {\n const id = customAlphabet(NanoID.ALPHABETS, size)();\n\n return prefix + id;\n }\n\n public get value(): number {\n return this.props.value;\n }\n}\n","import { ValueObject } from \"./value-object.js\";\n\nexport class IntegerVO extends ValueObject<number> {\n constructor(value: number) {\n super({ value });\n }\n\n public get value(): number {\n return this.props.value;\n }\n\n public static fromNumber(value: number) {\n return new IntegerVO(value);\n }\n}\n","import { ValueObject } from \"./value-object.js\";\n\nexport class StringVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n public get value(): string {\n return this.props.value;\n }\n\n public static fromString(value: string) {\n return new StringVO(value);\n }\n\n public static empty(): StringVO {\n return new StringVO(\"\");\n }\n}\n","import { ID } from \"./id.vo.js\";\nimport { v4 } from \"uuid\";\n\nexport abstract class UUID extends ID {\n static createId() {\n return v4();\n }\n\n public get value(): number {\n return this.props.value;\n }\n}\n","import z from \"zod\";\nimport { ValueObject } from \"./value-object.js\";\n\nconst emailSchema = z.email();\n\nexport class EmailVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n static create(value: string) {\n return new this(emailSchema.parse(value));\n }\n\n public get value(): string {\n return this.props.value;\n }\n}\n","import z from \"zod\";\nimport { ValueObject } from \"./value-object.js\";\n\nconst colorSchema = z.hex();\n\nexport class ColorVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n static create(value: string) {\n return new this(colorSchema.parse(value));\n }\n\n public get value(): string {\n return this.props.value;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["#domainEvents","z","payload: TPayload","operatorId: string","meta: TMeta","message: string","cause?: Error","metadata?: unknown","z","z","props: ValueObjectProps<T>","z","z","z","z","z","z","z","z","z","left: ISpecification<T, V>","right: ISpecification<T, V>","spec: ISpecification<T, V>","None","field: string","value: V","relation?: string","field: string","dateStart: Date","dateEnd: Date","relation?: string","field: string","filterTuple: [T, ...T[]]","filter","z","group: z.ZodType<{\n conjunction?: IConjunction;\n children?: (z.infer<typeof group> | z.infer<typeof filter>)[];\n }>","group","filterOrGroupList","group: z.ZodType<IGroup>","filterOrGroup","operatorsMap: Record<IFieldType, IOperator[]>","None","spec: Option<BaseFilterSpecification>","z","z","z","z"],"sources":["../src/aggregate-root.ts","../src/command.ts","../src/event.ts","../src/exception.base.ts","../src/filter/base.filter.ts","../src/filter/conjunction.ts","../src/utils.ts","../src/value-objects/value-object.ts","../src/filter/fields/field-value.base.ts","../src/filter/fields/boolean/boolean-field-value.ts","../src/filter/fields/boolean/boolean-field.type.ts","../src/filter/operators.ts","../src/filter/fields/boolean/boolean.filter.ts","../src/filter/fields/date/date-field-value.ts","../src/filter/fields/date/date-field.type.ts","../src/filter/fields/date/date.filter.ts","../src/filter/fields/number/number-field-value.ts","../src/filter/fields/number/number-field.type.ts","../src/filter/fields/number/number.filter.ts","../src/filter/fields/string/string-field-value.ts","../src/filter/fields/string/string-field.type.ts","../src/filter/fields/string/string.filter.ts","../src/specification.ts","../src/filter/filter-specification.base.ts","../src/filter/specifications/boolean.specification.ts","../src/filter/specifications/date.specification.ts","../src/filter/specifications/number.specification.ts","../src/filter/specifications/string.specification.ts","../src/filter/filter.ts","../src/filter/root-filter.ts","../src/pagination.ts","../src/query.ts","../src/sort.ts","../src/value-objects/boolean.vo.ts","../src/value-objects/date.vo.ts","../src/value-objects/id.vo.ts","../src/value-objects/nanoid.vo.ts","../src/value-objects/integer.vo.ts","../src/value-objects/string.vo.ts","../src/value-objects/uuid.vo.ts","../src/value-objects/email.vo.ts","../src/value-objects/color.vo.ts"],"sourcesContent":["import { type BaseEvent } from \"./event\";\n\nexport abstract class AggregateRoot<E extends BaseEvent> {\n #domainEvents: E[] = [];\n\n get domainEvents() {\n return this.#domainEvents;\n }\n\n set domainEvents(events: E[]) {\n this.#domainEvents = events;\n }\n\n addDomainEvent(event: E) {\n this.#domainEvents.push(event);\n }\n\n removeEvents(events: E[]) {\n this.#domainEvents = this.#domainEvents.filter(\n (event) => !events.includes(event),\n );\n }\n}\n","import { v4 } from \"uuid\";\n\nexport type CommandProps<T> = Omit<T, \"correlationId\" | \"commandId\"> &\n Partial<Command>;\n\nexport abstract class Command {\n public readonly commandId: string;\n\n public readonly correlationId: string;\n\n public readonly causationId?: string;\n\n constructor(props: CommandProps<unknown>) {\n this.correlationId = props.correlationId ?? v4();\n this.commandId = props.commandId ?? v4();\n }\n}\n","import { v4 } from \"uuid\";\nimport { z } from \"zod\";\n\nexport const eventSchema = <\n TName extends string,\n TPayload extends z.ZodTypeAny,\n TMeta extends z.ZodTypeAny,\n>(\n name: TName,\n payload: TPayload,\n meta: TMeta,\n) =>\n z.object({\n id: z.string().uuid(),\n name: z.literal(name),\n operatorId: z.string().optional(),\n payload: payload,\n timestamp: z.coerce.date(),\n meta: meta,\n });\n\nexport interface IEvent<TPayload extends object = object, TMeta = any> {\n id: string;\n name: string;\n operatorId: string;\n payload: TPayload;\n timestamp: Date;\n meta: TMeta;\n}\n\nexport interface IEventJSON<TPayload extends object = object, TMeta = any> {\n id: string;\n name: string;\n operatorId: string;\n payload: TPayload;\n timestamp: string;\n meta: TMeta;\n}\n\nexport abstract class BaseEvent<\n TPayload extends object = object,\n TName extends string = string,\n TMeta extends any = { key?: string; headers?: Record<string, string> },\n> implements IEvent<TPayload>\n{\n abstract name: TName;\n constructor(\n public readonly payload: TPayload,\n public readonly operatorId: string,\n public readonly meta: TMeta,\n public readonly id = v4(),\n public readonly timestamp = new Date(),\n ) {}\n\n toJSON(): IEventJSON<TPayload, TMeta> {\n return {\n id: this.id,\n name: this.name,\n operatorId: this.operatorId,\n timestamp: this.timestamp.toISOString(),\n payload: this.payload,\n meta: this.meta,\n };\n }\n}\n","export interface SerializedException {\n message: string;\n code: string;\n correlationId?: string;\n stack?: string;\n cause?: string;\n metadata?: unknown;\n}\n\nexport abstract class ExceptionBase extends Error {\n abstract code: string;\n\n public readonly correlationId?: string;\n\n /**\n *\n * @param message\n * @param correlationId\n * @param cause\n * @param metadata\n */\n constructor(\n readonly message: string,\n correlationId?: string,\n readonly cause?: Error,\n readonly metadata?: unknown\n ) {\n super(message);\n this.correlationId = correlationId;\n }\n\n toJSON(): SerializedException {\n return {\n message: this.message,\n code: this.code,\n stack: this.stack,\n correlationId: this.correlationId,\n cause: JSON.stringify(this.cause),\n metadata: this.metadata,\n };\n }\n}\n","import { z } from \"zod\";\n\nexport const baseFilter = z.object({\n field: z.string().min(1),\n relation: z.string().min(1).optional(),\n});\n","import { z } from \"zod\";\n\nconst $and = z.literal(\"$and\");\nconst $or = z.literal(\"$or\");\nconst $not = z.literal(\"$not\");\nexport const conjunctions = z.union([$and, $or, $not]);\nexport type IConjunction = z.infer<typeof conjunctions>;\n","import { ValueObject } from \"./value-objects/value-object\";\n\nexport function convertPropsToObject(props: any): any {\n const propsCopy = { ...props };\n\n // eslint-disable-next-line guard-for-in\n for (const prop in propsCopy) {\n if (Array.isArray(propsCopy[prop])) {\n propsCopy[prop] = (propsCopy[prop] as Array<unknown>).map((item) => {\n return convertToPlainObject(item);\n });\n }\n propsCopy[prop] = convertToPlainObject(propsCopy[prop]);\n }\n\n return propsCopy;\n}\n\nfunction convertToPlainObject(item: any): any {\n if (ValueObject.isValueObject(item)) {\n return item.unpack();\n }\n\n return item;\n}\n","import { dequal } from \"dequal\";\nimport { convertPropsToObject } from \"../utils.js\";\nexport type Primitives = string | number | boolean | null;\nexport interface DomainPrimitive<T extends Primitives | Date> {\n value: T;\n}\n\nexport type ValueObjectProps<T> = T extends Primitives | Date\n ? DomainPrimitive<T>\n : T;\n\nexport abstract class ValueObject<T = any> {\n constructor(protected readonly props: ValueObjectProps<T>) {}\n\n public equals(vo?: ValueObject<T>): boolean {\n if (vo === null || vo === undefined) {\n return false;\n }\n\n return dequal(vo, this);\n }\n\n static isValueObject(obj: unknown): obj is ValueObject<unknown> {\n return obj instanceof ValueObject;\n }\n\n public unpack(): T {\n if (this.isDomainPrimitive(this.props)) {\n return this.props.value;\n }\n\n const propsCopy = convertPropsToObject(this.props);\n\n return Object.freeze(propsCopy);\n }\n\n private isDomainPrimitive(\n obj: unknown\n ): obj is DomainPrimitive<T & (Primitives | Date)> {\n if (Object.prototype.hasOwnProperty.call(obj, \"value\")) {\n return true;\n }\n\n return false;\n }\n}\n","import { ValueObject } from \"../../value-objects/value-object\";\nimport { type IFieldValueVisitor } from \"./field-value.visitor\";\nimport { type UnpackedFieldValue } from \"./field.type\";\n\nexport abstract class FieldValueBase<\n V extends UnpackedFieldValue,\n> extends ValueObject<V> {\n abstract accept(visitor: IFieldValueVisitor): void;\n}\n","import { FieldValueBase } from \"../field-value.base\";\nimport { type IFieldValueVisitor } from \"../field-value.visitor\";\nimport { type IBooleanFieldValue } from \"./boolean-field.type\";\n \nexport class BooleanFieldValue extends FieldValueBase<IBooleanFieldValue> {\n constructor(value: IBooleanFieldValue) {\n super({ value });\n }\n\n accept(visitor: IFieldValueVisitor): void {\n visitor.boolean(this);\n }\n}\n","import { z } from \"zod\";\n\nexport const booleanFieldValue = z.boolean().nullable();\nexport type IBooleanFieldValue = z.infer<typeof booleanFieldValue>;\n","import { z } from \"zod\";\n\nexport const $eq = z.literal(\"$eq\");\nexport const $neq = z.literal(\"$neq\");\nexport const $contains = z.literal(\"$contains\");\nexport const $not_contains = z.literal(\"$not_contains\");\nexport const $starts_with = z.literal(\"$starts_with\");\nexport const $ends_with = z.literal(\"$ends_with\");\nexport const $regex = z.literal(\"$regex\");\n\nexport const $is_true = z.literal(\"$is_true\");\nexport const $is_false = z.literal(\"$is_false\");\n\nexport const $in = z.literal(\"$in\");\nexport const $nin = z.literal(\"$nin\");\n\nexport const $gt = z.literal(\"$gt\");\nexport const $lt = z.literal(\"$lt\");\nexport const $gte = z.literal(\"$gte\");\nexport const $lte = z.literal(\"$lte\");\n\nexport const $start_eq = z.literal(\"$start_eq\");\nexport const $start_neq = z.literal(\"$start_neq\");\nexport const $start_gt = z.literal(\"$start_gt\");\nexport const $start_lt = z.literal(\"$start_lt\");\nexport const $start_gte = z.literal(\"$start_gte\");\nexport const $start_lte = z.literal(\"$start_lte\");\n\nexport const $end_eq = z.literal(\"$end_eq\");\nexport const $end_neq = z.literal(\"$end_neq\");\nexport const $end_gt = z.literal(\"$end_gt\");\nexport const $end_lt = z.literal(\"$end_lt\");\nexport const $end_gte = z.literal(\"$end_gte\");\nexport const $end_lte = z.literal(\"$end_lte\");\n\nexport const $is_empty = z.literal(\"$is_empty\");\nexport const $is_not_empty = z.literal(\"$is_not_empty\");\n\nexport const $is_today = z.literal(\"$is_today\");\nexport const $is_not_today = z.literal(\"$is_not_today\");\nexport const $is_tomorrow = z.literal(\"$is_tomorrow\");\nexport const $is_yesterday = z.literal(\"$is_yesterday\");\nexport const $between = z.literal(\"$between\");\n\nexport const $has_file_type = z.literal(\"$has_file_type\");\nexport const $has_file_extension = z.literal(\"$has_file_extension\");\n\nexport const $is_root = z.literal(\"$is_root\");\n\nexport const $is_me = z.literal(\"$is_me\");\nexport const $is_not_me = z.literal(\"$is_not_me\");\n\nexport const operatorsWihtoutValue = z.union([\n $is_empty,\n $is_not_empty,\n $is_today,\n $is_not_today,\n $is_tomorrow,\n $is_yesterday,\n $is_root,\n $is_me,\n $is_not_me,\n]);\nexport const isOperatorWithoutValue = (value: string): boolean =>\n operatorsWihtoutValue.safeParse(value).success;\n","import { z } from \"zod\";\nimport { baseFilter } from \"../../base.filter\";\nimport {\n $eq,\n $neq\n} from \"../../operators\";\n\nexport const booleanFilterOperators = z.union([\n $eq,\n $neq,\n]);\n\nexport const booleanFilterValue = z.boolean().nullable();\nexport const booleanFilter = z\n .object({\n type: z.literal(\"boolean\"),\n operator: booleanFilterOperators,\n value: booleanFilterValue,\n })\n .merge(baseFilter);\n\nexport type IBooleanFilter = z.infer<typeof booleanFilter>;\nexport type IBooleanFilterOperator = z.infer<typeof booleanFilterOperators>;\n","import { FieldValueBase } from \"../field-value.base\";\nimport { type IFieldValueVisitor } from \"../field-value.visitor\";\nimport { type IDateFieldValue } from \"./date-field.type\";\n\nexport class DateFieldValue extends FieldValueBase<IDateFieldValue> {\n constructor(value: IDateFieldValue) {\n super({ value });\n }\n\n accept(visitor: IFieldValueVisitor): void {\n visitor.date(this);\n }\n\n static fromNullableString(str: string | null): DateFieldValue {\n if (!str) {\n return new this(null);\n }\n\n return new this(new Date(str));\n }\n}\n","import { z } from \"zod\";\n\nexport const dateFieldValue = z.date().nullable();\n\nexport type IDateFieldValue = z.infer<typeof dateFieldValue>;\n","import { z } from \"zod\";\nimport {\n $between,\n $eq,\n $gt,\n $gte,\n $is_not_today,\n $is_today,\n $is_tomorrow,\n $is_yesterday,\n $lt,\n $lte,\n $neq,\n} from \"../../operators\";\nimport { baseFilter } from \"../../base.filter\";\n\nexport const dateFilterOperators = z.union([\n $eq,\n $neq,\n $gt,\n $gte,\n $lt,\n $lte,\n $between,\n $is_today,\n $is_tomorrow,\n $is_yesterday,\n $is_not_today,\n]);\n\nexport const dateFilterValue = z\n .string()\n .nullable()\n .or(z.tuple([z.string(), z.string()]));\nexport const dateFilter = z\n .object({\n type: z.literal(\"date\"),\n operator: dateFilterOperators,\n value: dateFilterValue,\n })\n .merge(baseFilter);\n\nexport type IDateFilter = z.infer<typeof dateFilter>;\nexport type IDateFilterValue = z.infer<typeof dateFilterValue>;\nexport type IDateFilterOperator = z.infer<typeof dateFilterOperators>;\n","import { FieldValueBase } from \"../field-value.base\";\nimport { type IFieldValueVisitor } from \"../field-value.visitor\";\nimport { type INumberFieldValue } from \"./number-field.type\";\n\nexport class NumberFieldValue extends FieldValueBase<INumberFieldValue> {\n constructor(value: INumberFieldValue) {\n super({ value });\n }\n\n accept(visitor: IFieldValueVisitor): void {\n visitor.number(this);\n }\n}\n","import { z } from \"zod\";\n\nexport const numberFieldValue = z.number().or(z.null());\nexport type INumberFieldValue = z.infer<typeof numberFieldValue>;\n","import { z } from \"zod\";\nimport {\n $eq,\n $gt,\n $gte,\n $is_empty,\n $is_not_empty,\n $lt,\n $lte,\n $neq,\n} from \"../../operators\";\nimport { baseFilter } from \"../../base.filter\";\n\nexport const numberFilterOperators = z.union([\n $eq,\n $neq,\n $gt,\n $gte,\n $lt,\n $lte,\n $is_empty,\n $is_not_empty,\n]);\nexport type INumberFilterOperators = z.infer<typeof numberFilterOperators>;\n\nexport const numberFilterValue = z.number().nullable();\nexport const numberFilter = z\n .object({\n type: z.literal(\"number\"),\n operator: numberFilterOperators,\n value: numberFilterValue,\n })\n .merge(baseFilter);\n\nexport type INumberFilter = z.infer<typeof numberFilter>;\nexport type INumberFilterValue = z.infer<typeof numberFilterValue>;\n","import { FieldValueBase } from \"../field-value.base\";\nimport { type IFieldValueVisitor } from \"../field-value.visitor\";\nimport { type IStringFieldValue } from \"./string-field.type\";\n\nexport class StringFieldValue extends FieldValueBase<IStringFieldValue> {\n constructor(value: IStringFieldValue) {\n super({ value });\n }\n\n accept(visitor: IFieldValueVisitor): void {\n visitor.string(this);\n }\n}\n","import { z } from \"zod\";\n\nexport const stringFieldValue = z.string().nullable();\nexport type IStringFieldValue = z.infer<typeof stringFieldValue>;\n","import { z } from \"zod\";\nimport { baseFilter } from \"../../base.filter\";\nimport {\n $eq,\n $neq,\n $contains,\n $not_contains,\n $starts_with,\n $ends_with,\n $regex,\n $is_empty,\n $is_not_empty,\n} from \"../../operators\";\n\nexport const stringFilterOperators = z.union([\n $eq,\n $neq,\n $contains,\n $not_contains,\n $starts_with,\n $ends_with,\n $regex,\n $is_empty,\n $is_not_empty,\n]);\n\nexport const stringFilterValue = z.string().nullable();\nexport const stringFilter = z\n .object({\n type: z.literal(\"string\"),\n operator: stringFilterOperators,\n value: stringFilterValue,\n })\n .merge(baseFilter);\n\nexport type IStringFilter = z.infer<typeof stringFilter>;\nexport type IStringFilterOperator = z.infer<typeof stringFilterOperators>;\n","import type { Option, Result } from \"@globalart/oxide\";\nimport { None, Ok, Some } from \"@globalart/oxide\";\n\nexport interface ISpecVisitor {\n or(left: ISpecification, right: ISpecification): this;\n not(): this;\n}\n\nexport interface ISpecification<\n T = any,\n V extends ISpecVisitor = ISpecVisitor,\n> {\n isSatisfiedBy(t: T): boolean;\n mutate(t: T): Result<T, string>;\n accept(v: V): Result<void, string>;\n}\n\nexport abstract class CompositeSpecification<\n T = any,\n V extends ISpecVisitor = ISpecVisitor,\n> implements ISpecification<T, V>\n{\n abstract isSatisfiedBy(t: T): boolean;\n abstract mutate(t: T): Result<T, string>;\n abstract accept(v: V): Result<void, string>;\n\n public and(s: ISpecification<T, V>): CompositeSpecification<T, V> {\n return new And(this, s);\n }\n\n public or(s: ISpecification<T, V>): CompositeSpecification<T, V> {\n return new Or(this, s);\n }\n\n public not(): Not<T, V> {\n return new Not(this);\n }\n}\n\nclass And<T, V extends ISpecVisitor> extends CompositeSpecification<T, V> {\n constructor(\n private readonly left: ISpecification<T, V>,\n private readonly right: ISpecification<T, V>\n ) {\n super();\n }\n\n isSatisfiedBy(t: T): boolean {\n return this.left.isSatisfiedBy(t) && this.right.isSatisfiedBy(t);\n }\n\n mutate(t: T): Result<T, string> {\n return this.left.mutate(t).and(this.right.mutate(t));\n }\n\n accept(v: V): Result<void, string> {\n return this.left.accept(v).and(this.right.accept(v));\n }\n}\n\nclass Or<T, V extends ISpecVisitor> extends CompositeSpecification<T, V> {\n constructor(\n private readonly left: ISpecification<T, V>,\n private readonly right: ISpecification<T, V>\n ) {\n super();\n }\n\n isSatisfiedBy(t: T): boolean {\n return this.left.isSatisfiedBy(t) || this.right.isSatisfiedBy(t);\n }\n\n mutate(t: T): Result<T, string> {\n return this.left.mutate(t).orElse(() => this.right.mutate(t));\n }\n\n accept(v: V): Result<void, string> {\n v.or(this.left, this.right);\n\n return Ok(undefined);\n }\n}\n\nclass Not<T, V extends ISpecVisitor> extends CompositeSpecification<T, V> {\n constructor(public readonly spec: ISpecification<T, V>) {\n super();\n }\n\n isSatisfiedBy(t: T): boolean {\n return !this.spec.isSatisfiedBy(t);\n }\n\n mutate(): Result<T, string> {\n throw new Error(\"[Not.mutate] Method not implemented.\");\n }\n\n accept(v: V): Result<void, string> {\n return this.spec.accept(v.not());\n }\n}\n\nexport const and = <T, V extends ISpecVisitor>(\n ...specs: CompositeSpecification<T, V>[]\n): Option<CompositeSpecification<T, V>> => {\n if (!specs.length) {\n return None;\n }\n\n let s = specs[0];\n for (const spec of specs.slice(1)) {\n s = s.and(spec);\n }\n\n return Some(s);\n};\n\nexport const andOptions = <T, V extends ISpecVisitor>(\n ...specs: Option<CompositeSpecification<T, V>>[]\n): Option<CompositeSpecification<T, V>> => {\n return and(\n ...specs.filter((spec) => spec.isSome()).map((spec) => spec.unwrap())\n );\n};\n\nexport const or = <T, V extends ISpecVisitor>(\n ...specs: CompositeSpecification<T, V>[]\n): Option<CompositeSpecification<T, V>> => {\n if (!specs.length) {\n return None;\n }\n\n let s = specs[0];\n for (const spec of specs.slice(1)) {\n s = s.or(spec);\n }\n\n return Some(s);\n};\n","import { type IFilterBaseVisitor } from \"./filter-specification-visitor.base\";\nimport { CompositeSpecification } from \"../specification\";\nimport { type Result } from \"@globalart/oxide\";\n\nexport abstract class BaseFilterSpecification<\n E = unknown,\n V = unknown,\n> extends CompositeSpecification<E, IFilterBaseVisitor> {\n constructor(\n public readonly field: string,\n public readonly value: V,\n public readonly relation?: string\n ) {\n super();\n }\n\n mutate(t: E): Result<E, string> {\n throw new Error(\"Method not implemented.\");\n }\n}\n","import { Ok, type Result } from \"@globalart/oxide\";\nimport { BooleanFieldValue } from \"../fields/boolean/boolean-field-value\";\nimport { type IFilterBaseVisitor } from \"../filter-specification-visitor.base\";\nimport { BaseFilterSpecification } from \"../filter-specification.base\";\n\nexport class BooleanEqual extends BaseFilterSpecification<\n unknown,\n BooleanFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof BooleanFieldValue && this.value.equals(value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.booleanEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class BooleanNotEqual extends BaseFilterSpecification<\n unknown,\n BooleanFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof BooleanFieldValue && this.value.equals(value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.booleanNotEqual(this);\n\n return Ok(undefined);\n }\n}\n","import {\n isAfter,\n isBefore,\n isEqual,\n isToday,\n isTomorrow,\n isWithinInterval,\n isYesterday,\n} from \"date-fns\";\nimport { Ok, type Result } from \"@globalart/oxide\";\nimport { DateFieldValue } from \"../fields/date/date-field-value\";\nimport { type IFilterBaseVisitor } from \"../filter-specification-visitor.base\";\nimport { BaseFilterSpecification } from \"../filter-specification.base\";\n\nexport class DateEqual extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof DateFieldValue && value.equals(this.value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateGreaterThan extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n const d1 = value.unpack();\n const d2 = this.value.unpack();\n\n return !!d1 && !!d2 && isAfter(d1, d2);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateGreaterThan(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateLessThan extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const d1 = value.unpack();\n const d2 = this.value.unpack();\n\n return !!d1 && !!d2 && isBefore(d1, d2);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateLessThan(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateGreaterThanOrEqual extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const d1 = value.unpack();\n const d2 = this.value.unpack();\n\n return !!d1 && !!d2 && (isEqual(d1, d2) || isAfter(d1, d2));\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateGreaterThanOrEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateLessThanOrEqual extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const d1 = value.unpack();\n const d2 = this.value.unpack();\n\n return !!d1 && !!d2 && (isEqual(d1, d2) || isBefore(d1, d2));\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateLessThanOrEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateIsToday extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const date = value.unpack();\n\n return !!date && isToday(date);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateIsToday(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateIsTomorrow extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const date = value.unpack();\n\n return !!date && isTomorrow(date);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateIsTomorrow(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateIsYesterday extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const date = value.unpack();\n\n return !!date && isYesterday(date);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateIsYesterday(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateBetween extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n constructor(\n public field: string,\n public dateStart: Date,\n public dateEnd: Date,\n public relation?: string\n ) {\n super(field, new DateFieldValue(dateStart), relation);\n }\n\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const date = value.unpack();\n\n return (\n !!date &&\n isWithinInterval(date, { start: this.dateStart, end: this.dateEnd })\n );\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateBetween(this);\n\n return Ok(undefined);\n }\n}\n","import { Ok, type Result } from \"@globalart/oxide\";\nimport { type IFilterBaseVisitor } from \"../filter-specification-visitor.base\";\nimport { BaseFilterSpecification } from \"../filter-specification.base\";\nimport { NumberFieldValue } from \"../fields/number/number-field-value\";\n\nfunction isNil(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n\nfunction isNumber(value: unknown): value is number {\n return typeof value === \"number\";\n}\n\nexport class NumberEqual extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof NumberFieldValue && value.equals(this.value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class NumberGreaterThan extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof NumberFieldValue)) {\n return false;\n }\n const n1 = value.unpack();\n const n2 = this.value.unpack();\n if (n1 === null && isNumber(n2)) {\n return true;\n }\n\n return n1 !== null && n2 !== null && n1 > n2;\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberGreaterThan(this);\n\n return Ok(undefined);\n }\n}\n\nexport class NumberLessThan extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof NumberFieldValue)) {\n return false;\n }\n const n1 = value.unpack();\n const n2 = this.value.unpack();\n\n return n1 !== null && n2 !== null && n1 < n2;\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberLessThan(this);\n\n return Ok(undefined);\n }\n}\n\nexport class NumberGreaterThanOrEqual extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof NumberFieldValue)) {\n return false;\n }\n const n1 = value.unpack();\n const n2 = this.value.unpack();\n if (n1 === null && isNumber(n2)) {\n return true;\n }\n\n return n1 !== null && n2 !== null && n1 >= n2;\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberGreaterThanOrEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class NumberLessThanOrEqual extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof NumberFieldValue)) {\n return false;\n }\n const n1 = value.unpack();\n const n2 = this.value.unpack();\n\n return n1 !== null && n2 !== null && n1 <= n2;\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberLessThanOrEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class NumberEmpty extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n constructor(public readonly field: string) {\n super(field, new NumberFieldValue(null));\n }\n\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof NumberFieldValue && isNil(value.unpack());\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberEmpty(this);\n\n return Ok(undefined);\n }\n}\n","import { Ok, type Result } from \"@globalart/oxide\";\nimport { StringFieldValue } from \"../fields/string/string-field-value\";\nimport { type IFilterBaseVisitor } from \"../filter-specification-visitor.base\";\nimport { BaseFilterSpecification } from \"../filter-specification.base\";\n\nexport class StringEqual extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof StringFieldValue && this.value.equals(value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringNotEqual extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof StringFieldValue && this.value.equals(value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringNotEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringContain extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof StringFieldValue)) {\n return false;\n }\n\n const s1 = value.unpack();\n const s2 = this.value.unpack();\n\n return !!s1 && !!s2 && s1.includes(s2);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringContain(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringStartsWith extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof StringFieldValue)) {\n return false;\n }\n\n const s1 = value.unpack();\n const s2 = this.value.unpack();\n\n return !!s1 && !!s2 && s1.startsWith(s2);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringStartsWith(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringEndsWith extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof StringFieldValue)) {\n return false;\n }\n\n const s1 = value.unpack();\n const s2 = this.value.unpack();\n\n return !!s1 && !!s2 && s1.endsWith(s2);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringEndsWith(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringRegex extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof StringFieldValue)) {\n return false;\n }\n\n const s1 = value.unpack();\n const s2 = this.value.unpack();\n\n return !!s1 && !!s2 && new RegExp(s2).test(s1);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringRegex(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringEmpty extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n constructor(field: string) {\n super(field, new StringFieldValue(null));\n }\n\n isSatisfiedBy(value: unknown): boolean {\n if (value instanceof StringFieldValue) {\n return !value.unpack();\n }\n\n return !value;\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringEmpty(this);\n\n return Ok(undefined);\n }\n}\n","import { None, Some, type Option } from \"@globalart/oxide\";\nimport { match } from \"ts-pattern\";\nimport { z } from \"zod\";\nimport { conjunctions, type IConjunction } from \"./conjunction\";\nimport { BooleanFieldValue, booleanFilter, IBooleanFilter } from \"./fields\";\nimport { DateFieldValue } from \"./fields/date/date-field-value\";\nimport { dateFilter, type IDateFilter } from \"./fields/date/date.filter\";\nimport { NumberFieldValue } from \"./fields/number/number-field-value\";\nimport {\n numberFilter,\n numberFilterOperators,\n type INumberFilter,\n} from \"./fields/number/number.filter\";\nimport { StringFieldValue } from \"./fields/string/string-field-value\";\nimport {\n stringFilter,\n stringFilterOperators,\n type IStringFilter,\n} from \"./fields/string/string.filter\";\nimport { type BaseFilterSpecification } from \"./filter-specification.base\";\nimport {\n BooleanEqual,\n BooleanNotEqual,\n} from \"./specifications/boolean.specification\";\nimport { DateBetween, DateEqual } from \"./specifications/date.specification\";\nimport {\n NumberEmpty,\n NumberEqual,\n NumberGreaterThan,\n NumberGreaterThanOrEqual,\n NumberLessThan,\n NumberLessThanOrEqual,\n} from \"./specifications/number.specification\";\nimport {\n StringContain,\n StringEmpty,\n StringEndsWith,\n StringEqual,\n StringNotEqual,\n StringRegex,\n StringStartsWith,\n} from \"./specifications/string.specification\";\n\nexport const filterRoorFilter = <T extends z.ZodType>(filters: [T, ...T[]]) => {\n const filterTuple: [T, ...T[]] = [filters[0], ...filters.slice(1)];\n\n const filter = z.union(filterTuple as [T, T, ...T[]]);\n\n const group: z.ZodType<{\n conjunction?: IConjunction;\n children?: (z.infer<typeof group> | z.infer<typeof filter>)[];\n }> = z.lazy(() =>\n z.object({\n conjunction: conjunctions,\n children: z.union([group, filter]).array().nonempty().optional(),\n })\n );\n\n const filterOrGroup = filter.or(group);\n type IFilterOrGroup = z.infer<typeof filterOrGroup>;\n const filterOrGroupList = filterOrGroup.array();\n\n return group.or(filterOrGroupList);\n};\n\nconst filter = z.discriminatedUnion(\"type\", [\n numberFilter,\n stringFilter,\n dateFilter,\n booleanFilter,\n]);\n\nexport type IFilter = z.infer<typeof filter>;\nexport type IFilters = IFilter[];\n\nexport interface IGroup<Filter extends IFilter = IFilter> {\n conjunction?: IConjunction;\n children?: IFilterOrGroupList<Filter>;\n}\n\nconst group: z.ZodType<IGroup> = z.lazy(() =>\n z.object({\n conjunction: conjunctions,\n children: z.union([group, filter]).array().nonempty().optional(),\n })\n);\n\nconst filterOrGroup = filter.or(group);\nexport type IFilterOrGroup<Filter extends IFilter = IFilter> =\n | Filter\n | IGroup<Filter>;\n\nexport const filterOrGroupList = filterOrGroup.array();\nexport type IFilterOrGroupList<Filter extends IFilter = IFilter> =\n IFilterOrGroup<Filter>[];\nexport const rootFilter = filterOrGroup.or(filterOrGroupList);\nexport type IRootFilter<Filter extends IFilter = IFilter> =\n | IFilterOrGroup<Filter>\n | IFilterOrGroupList<Filter>;\n\nexport const isGroup = (\n filterOrGroup: IFilterOrGroup\n): filterOrGroup is IGroup => {\n return Reflect.has(filterOrGroup, \"conjunction\");\n};\n\nexport const isFilter = (\n filterOrGroup: IFilterOrGroup\n): filterOrGroup is IFilter => {\n return (\n Reflect.has(filterOrGroup, \"type\") && Reflect.has(filterOrGroup, \"operator\")\n );\n};\n\nexport const operators = z.union([\n numberFilterOperators,\n stringFilterOperators,\n]);\nexport type IOperator = z.infer<typeof operators>;\n\ntype IFieldType = \"number\";\n\nexport const operatorsMap: Record<IFieldType, IOperator[]> = {\n number: numberFilterOperators.options.map((v) => v.value),\n};\n\nconst convertStringFilter = (\n filter: IStringFilter\n): Option<BaseFilterSpecification> => {\n if (filter.value === undefined) {\n return None;\n }\n\n switch (filter.operator) {\n case \"$eq\": {\n return Some(\n new StringEqual(\n filter.field,\n new StringFieldValue(filter.value),\n filter.relation\n )\n );\n }\n case \"$neq\": {\n return Some(\n new StringNotEqual(\n filter.field,\n new StringFieldValue(filter.value),\n filter.relation\n )\n );\n }\n case \"$contains\": {\n return Some(\n new StringContain(filter.field, new StringFieldValue(filter.value))\n );\n }\n case \"$not_contains\": {\n return Some(\n new StringContain(\n filter.field,\n new StringFieldValue(filter.value)\n ).not() as unknown as BaseFilterSpecification\n );\n }\n case \"$starts_with\": {\n return Some(\n new StringStartsWith(filter.field, new StringFieldValue(filter.value))\n );\n }\n case \"$ends_with\": {\n return Some(\n new StringEndsWith(filter.field, new StringFieldValue(filter.value))\n );\n }\n case \"$regex\": {\n return Some(\n new StringRegex(filter.field, new StringFieldValue(filter.value))\n );\n }\n case \"$is_empty\": {\n return Some(new StringEmpty(filter.field));\n }\n case \"$is_not_empty\": {\n return Some(\n new StringEmpty(\n filter.field\n ).not() as unknown as BaseFilterSpecification\n );\n }\n\n default:\n return None;\n }\n};\n\nconst convertNumberFilter = (\n filter: INumberFilter\n): Option<BaseFilterSpecification> => {\n if (filter === undefined) {\n return None;\n }\n\n switch (filter.operator) {\n case \"$eq\":\n return Some(\n new NumberEqual(filter.field, new NumberFieldValue(filter.value))\n );\n case \"$neq\": {\n // @ts-ignore\n return Some(\n new NumberEqual(filter.field, new NumberFieldValue(filter.value)).not()\n );\n }\n case \"$gt\": {\n return Some(\n new NumberGreaterThan(filter.field, new NumberFieldValue(filter.value))\n );\n }\n case \"$gte\": {\n return Some(\n new NumberGreaterThanOrEqual(\n filter.field,\n new NumberFieldValue(filter.value)\n )\n );\n }\n case \"$lt\": {\n return Some(\n new NumberLessThan(filter.field, new NumberFieldValue(filter.value))\n );\n }\n case \"$lte\": {\n return Some(\n new NumberLessThanOrEqual(\n filter.field,\n new NumberFieldValue(filter.value)\n )\n );\n }\n case \"$is_empty\": {\n return Some(new NumberEmpty(filter.field));\n }\n case \"$is_not_empty\": {\n // @ts-ignore\n return Some(new NumberEmpty(filter.field).not());\n }\n default:\n return None;\n }\n};\n\nconst convertBooleanFilter = (\n filter: IBooleanFilter\n): Option<BaseFilterSpecification> => {\n if (filter === undefined) {\n return None;\n }\n\n switch (filter.operator) {\n case \"$eq\": {\n return Some(\n new BooleanEqual(filter.field, new BooleanFieldValue(filter.value))\n );\n }\n case \"$neq\": {\n return Some(\n new BooleanNotEqual(filter.field, new BooleanFieldValue(filter.value))\n );\n }\n }\n\n return Some(\n new BooleanEqual(filter.field, new BooleanFieldValue(filter.value))\n );\n};\n\nconst convertDateFilter = (\n filter: IDateFilter\n): Option<BaseFilterSpecification> => {\n if (filter === undefined) {\n return None;\n }\n\n switch (filter.operator) {\n case \"$eq\": {\n return Some(\n new DateEqual(\n filter.field,\n DateFieldValue.fromNullableString(filter.value as string),\n filter.relation\n )\n );\n }\n case \"$between\": {\n return Some(\n new DateBetween(\n filter.field,\n new Date((filter.value as [string, string])[0]),\n new Date((filter.value as [string, string])[1])\n )\n );\n }\n }\n\n return None;\n};\n\nconst convertFilter = (filter: IFilter): Option<BaseFilterSpecification> => {\n return match(filter)\n .returnType<Option<BaseFilterSpecification>>()\n .with({ type: \"number\" }, (f) => convertNumberFilter(f))\n .with({ type: \"string\" }, (f) => convertStringFilter(f))\n .with({ type: \"date\" }, (f) => convertDateFilter(f))\n .with({ type: \"boolean\" }, (f) => convertBooleanFilter(f))\n .otherwise(() => None);\n};\n\nconst convertFilterOrGroup = (\n filterOrGroup: IFilterOrGroup\n): Option<BaseFilterSpecification> => {\n if (isGroup(filterOrGroup)) {\n return convertFilterOrGroupList(\n filterOrGroup.children,\n filterOrGroup.conjunction\n );\n } else if (isFilter(filterOrGroup)) {\n return convertFilter(filterOrGroup);\n }\n\n return None;\n};\n\nconst convertFilterOrGroupList = (\n filterOrGroupList: IFilterOrGroupList = [],\n conjunction: IConjunction = \"$and\"\n): Option<BaseFilterSpecification> => {\n let spec: Option<BaseFilterSpecification> = None;\n for (const filter of filterOrGroupList) {\n if (spec.isNone()) {\n spec = convertFilterOrGroup(filter);\n if (conjunction === \"$not\") {\n // @ts-ignore\n return spec.map((s) => s.not());\n }\n } else {\n if (isFilter(filter)) {\n // @ts-ignore\n spec = spec.map((left) => {\n const right = convertFilterOrGroup(filter);\n if (right.isSome()) {\n if (conjunction === \"$and\") {\n return left.and(right.unwrap());\n } else if (conjunction === \"$or\") {\n return left.or(right.unwrap());\n }\n\n return left.and(right.unwrap().not());\n }\n\n return left;\n });\n } else if (isGroup(filter)) {\n spec = convertFilterOrGroupList(filter.children, filter.conjunction);\n }\n }\n }\n\n return spec;\n};\n\nexport const convertFilterSpec = (\n filter: IRootFilter\n): Option<BaseFilterSpecification> => {\n if (Array.isArray(filter)) {\n return convertFilterOrGroupList(filter);\n }\n\n return convertFilterOrGroup(filter);\n};\n\nfunction isEmptyNative(value: unknown): boolean {\n if (value == null) return true;\n if (Array.isArray(value)) return value.length === 0;\n if (typeof value === \"object\") {\n for (const _ in value as object) {\n return false;\n }\n return true;\n }\n return false;\n}\n\nexport const isEmptyFilter = (filter: IRootFilter) => isEmptyNative(filter);\n","import { type Option } from \"@globalart/oxide\";\nimport { ValueObject } from \"../value-objects/value-object\";\nimport {\n type IFilter,\n type IRootFilter,\n convertFilterSpec,\n isGroup,\n} from \"./filter\";\nimport { type BaseFilterSpecification } from \"./filter-specification.base\";\n\nexport class RootFilter<T extends IFilter = IFilter> extends ValueObject<\n IRootFilter<T>\n> {\n get value() {\n return this.props;\n }\n\n get group() {\n if (Array.isArray(this.value)) {\n return { conjunction: \"$and\", children: this.value };\n }\n if (isGroup(this.value)) {\n return this.value;\n }\n\n return { conjunction: \"$and\", children: [this.value] };\n }\n\n getSpec(): Option<BaseFilterSpecification> {\n return convertFilterSpec(this.value);\n }\n\n public toJSON() {\n return this.props;\n }\n}\n","import { z } from \"zod\";\n\nexport const paginationSchema = z.object({\n limit: z.coerce.number().positive().int().default(10).optional(),\n offset: z.coerce.number().nonnegative().int().default(0).optional(),\n});\n\nexport type IPagination = z.infer<typeof paginationSchema>;\n\nexport const paginatedResponseSchema = paginationSchema.extend({\n total: z.number().nonnegative().int(),\n});\n","export abstract class Query {}\n","import { z } from \"zod\";\n\n// TODO: base sort with possibility limit sorting fields for concrete entity\nexport const sortingSchema = z.record(z.string(), z.enum([\"ASC\", \"DESC\"]));\n\nexport type ISorting = z.infer<typeof sortingSchema>;\n","import { ValueObject } from \"./value-object.js\";\n\nexport class BoolVO extends ValueObject<boolean> {\n constructor(value: boolean) {\n super({ value });\n }\n\n public get value(): boolean {\n return this.props.value;\n }\n\n public static fromBoolean(value: boolean) {\n return new BoolVO(value);\n }\n\n public static True(): BoolVO {\n return new BoolVO(true);\n }\n\n public static False(): BoolVO {\n return new BoolVO(false);\n }\n}\n","import { ValueObject } from \"./value-object.js\";\n\nexport class DateVO extends ValueObject<Date> {\n constructor(value: Date | string | number) {\n const date = new Date(value);\n super({ value: date });\n }\n\n public get value(): Date {\n return this.props.value;\n }\n\n public static fromDate(value: Date) {\n return new DateVO(value);\n }\n\n public static now(): DateVO {\n return new DateVO(Date.now());\n }\n}\n","import { ValueObject, ValueObjectProps } from \"./value-object\";\n\nexport abstract class ID<T = any> extends ValueObject<T> {\n constructor(value: T) {\n super({ value } as ValueObjectProps<T>);\n }\n\n public get value(): T {\n return this.unpack();\n }\n}\n","import { customAlphabet } from \"nanoid\";\nimport { ID } from \"./id.vo.js\";\n\nexport abstract class NanoID extends ID {\n private static ALPHABETS = \"0123456789abcdefghijklmnopqrstuvwxyz\";\n\n static createId(prefix = \"\", size = 5) {\n const id = customAlphabet(NanoID.ALPHABETS, size)();\n\n return prefix + id;\n }\n\n public get value(): number {\n return this.props.value;\n }\n}\n","import { ValueObject } from \"./value-object.js\";\n\nexport class IntegerVO extends ValueObject<number> {\n constructor(value: number) {\n super({ value });\n }\n\n public get value(): number {\n return this.props.value;\n }\n\n public static fromNumber(value: number) {\n return new IntegerVO(value);\n }\n}\n","import { ValueObject } from \"./value-object.js\";\n\nexport class StringVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n public get value(): string {\n return this.props.value;\n }\n\n public static fromString(value: string) {\n return new StringVO(value);\n }\n\n public static empty(): StringVO {\n return new StringVO(\"\");\n }\n}\n","import { ID } from \"./id.vo.js\";\nimport { v4 } from \"uuid\";\n\nexport abstract class UUID extends ID {\n static createId() {\n return v4();\n }\n\n public get value(): number {\n return this.props.value;\n }\n}\n","import z from \"zod\";\nimport { ValueObject } from \"./value-object.js\";\n\nconst emailSchema = z.email();\n\nexport class EmailVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n static create(value: string) {\n return new this(emailSchema.parse(value));\n }\n\n public get value(): string {\n return this.props.value;\n }\n}\n","import z from \"zod\";\nimport { ValueObject } from \"./value-object.js\";\n\nconst colorSchema = z.hex();\n\nexport class ColorVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n static create(value: string) {\n return new this(colorSchema.parse(value));\n }\n\n public get value(): string {\n return this.props.value;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAsB,gBAAtB,MAAyD;CACvD,gBAAqB,EAAE;CAEvB,IAAI,eAAe;AACjB,SAAO,MAAKA;;CAGd,IAAI,aAAa,QAAa;AAC5B,QAAKA,eAAgB;;CAGvB,eAAe,OAAU;AACvB,QAAKA,aAAc,KAAK,MAAM;;CAGhC,aAAa,QAAa;AACxB,QAAKA,eAAgB,MAAKA,aAAc,QACrC,UAAU,CAAC,OAAO,SAAS,MAAM,CACnC;;;;;;ACfL,IAAsB,UAAtB,MAA8B;CAC5B,AAAgB;CAEhB,AAAgB;CAEhB,AAAgB;CAEhB,YAAY,OAA8B;AACxC,OAAK,gBAAgB,MAAM,+BAAqB;AAChD,OAAK,YAAY,MAAM,2BAAiB;;;;;;ACX5C,MAAa,eAKX,MACA,SACA,SAEAC,MAAE,OAAO;CACP,IAAIA,MAAE,QAAQ,CAAC,MAAM;CACrB,MAAMA,MAAE,QAAQ,KAAK;CACrB,YAAYA,MAAE,QAAQ,CAAC,UAAU;CACxB;CACT,WAAWA,MAAE,OAAO,MAAM;CACpB;CACP,CAAC;AAoBJ,IAAsB,YAAtB,MAKA;CAEE,YACE,AAAgBC,SAChB,AAAgBC,YAChB,AAAgBC,MAChB,AAAgB,mBAAS,EACzB,AAAgB,4BAAY,IAAI,MAAM,EACtC;EALgB;EACA;EACA;EACA;EACA;;CAGlB,SAAsC;AACpC,SAAO;GACL,IAAI,KAAK;GACT,MAAM,KAAK;GACX,YAAY,KAAK;GACjB,WAAW,KAAK,UAAU,aAAa;GACvC,SAAS,KAAK;GACd,MAAM,KAAK;GACZ;;;;;;ACrDL,IAAsB,gBAAtB,cAA4C,MAAM;CAGhD,AAAgB;;;;;;;;CAShB,YACE,AAASC,SACT,eACA,AAASC,OACT,AAASC,UACT;AACA,QAAM,QAAQ;EALL;EAEA;EACA;AAGT,OAAK,gBAAgB;;CAGvB,SAA8B;AAC5B,SAAO;GACL,SAAS,KAAK;GACd,MAAM,KAAK;GACX,OAAO,KAAK;GACZ,eAAe,KAAK;GACpB,OAAO,KAAK,UAAU,KAAK,MAAM;GACjC,UAAU,KAAK;GAChB;;;;;;ACrCL,MAAa,aAAaC,MAAE,OAAO;CACjC,OAAOA,MAAE,QAAQ,CAAC,IAAI,EAAE;CACxB,UAAUA,MAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACvC,CAAC;;;;ACHF,MAAM,OAAOC,MAAE,QAAQ,OAAO;AAC9B,MAAM,MAAMA,MAAE,QAAQ,MAAM;AAC5B,MAAM,OAAOA,MAAE,QAAQ,OAAO;AAC9B,MAAa,eAAeA,MAAE,MAAM;CAAC;CAAM;CAAK;CAAK,CAAC;;;;ACHtD,SAAgB,qBAAqB,OAAiB;CACpD,MAAM,YAAY,EAAE,GAAG,OAAO;AAG9B,MAAK,MAAM,QAAQ,WAAW;AAC5B,MAAI,MAAM,QAAQ,UAAU,MAAM,CAChC,WAAU,QAAS,UAAU,MAAyB,KAAK,SAAS;AAClE,UAAO,qBAAqB,KAAK;IACjC;AAEJ,YAAU,QAAQ,qBAAqB,UAAU,MAAM;;AAGzD,QAAO;;AAGT,SAAS,qBAAqB,MAAgB;AAC5C,KAAI,YAAY,cAAc,KAAK,CACjC,QAAO,KAAK,QAAQ;AAGtB,QAAO;;;;;ACZT,IAAsB,cAAtB,MAAsB,YAAqB;CACzC,YAAY,AAAmBC,OAA4B;EAA5B;;CAE/B,AAAO,OAAO,IAA8B;AAC1C,MAAI,OAAO,QAAQ,OAAO,OACxB,QAAO;AAGT,4BAAc,IAAI,KAAK;;CAGzB,OAAO,cAAc,KAA2C;AAC9D,SAAO,eAAe;;CAGxB,AAAO,SAAY;AACjB,MAAI,KAAK,kBAAkB,KAAK,MAAM,CACpC,QAAO,KAAK,MAAM;EAGpB,MAAM,YAAY,qBAAqB,KAAK,MAAM;AAElD,SAAO,OAAO,OAAO,UAAU;;CAGjC,AAAQ,kBACN,KACiD;AACjD,MAAI,OAAO,UAAU,eAAe,KAAK,KAAK,QAAQ,CACpD,QAAO;AAGT,SAAO;;;;;;ACvCX,IAAsB,iBAAtB,cAEU,YAAe;;;;ACFzB,IAAa,oBAAb,cAAuC,eAAmC;CACxE,YAAY,OAA2B;AACrC,QAAM,EAAE,OAAO,CAAC;;CAGlB,OAAO,SAAmC;AACxC,UAAQ,QAAQ,KAAK;;;;;;ACRzB,MAAa,oBAAoBC,MAAE,SAAS,CAAC,UAAU;;;;ACAvD,MAAa,MAAMC,MAAE,QAAQ,MAAM;AACnC,MAAa,OAAOA,MAAE,QAAQ,OAAO;AACrC,MAAa,YAAYA,MAAE,QAAQ,YAAY;AAC/C,MAAa,gBAAgBA,MAAE,QAAQ,gBAAgB;AACvD,MAAa,eAAeA,MAAE,QAAQ,eAAe;AACrD,MAAa,aAAaA,MAAE,QAAQ,aAAa;AACjD,MAAa,SAASA,MAAE,QAAQ,SAAS;AAEzC,MAAa,WAAWA,MAAE,QAAQ,WAAW;AAC7C,MAAa,YAAYA,MAAE,QAAQ,YAAY;AAE/C,MAAa,MAAMA,MAAE,QAAQ,MAAM;AACnC,MAAa,OAAOA,MAAE,QAAQ,OAAO;AAErC,MAAa,MAAMA,MAAE,QAAQ,MAAM;AACnC,MAAa,MAAMA,MAAE,QAAQ,MAAM;AACnC,MAAa,OAAOA,MAAE,QAAQ,OAAO;AACrC,MAAa,OAAOA,MAAE,QAAQ,OAAO;AAErC,MAAa,YAAYA,MAAE,QAAQ,YAAY;AAC/C,MAAa,aAAaA,MAAE,QAAQ,aAAa;AACjD,MAAa,YAAYA,MAAE,QAAQ,YAAY;AAC/C,MAAa,YAAYA,MAAE,QAAQ,YAAY;AAC/C,MAAa,aAAaA,MAAE,QAAQ,aAAa;AACjD,MAAa,aAAaA,MAAE,QAAQ,aAAa;AAEjD,MAAa,UAAUA,MAAE,QAAQ,UAAU;AAC3C,MAAa,WAAWA,MAAE,QAAQ,WAAW;AAC7C,MAAa,UAAUA,MAAE,QAAQ,UAAU;AAC3C,MAAa,UAAUA,MAAE,QAAQ,UAAU;AAC3C,MAAa,WAAWA,MAAE,QAAQ,WAAW;AAC7C,MAAa,WAAWA,MAAE,QAAQ,WAAW;AAE7C,MAAa,YAAYA,MAAE,QAAQ,YAAY;AAC/C,MAAa,gBAAgBA,MAAE,QAAQ,gBAAgB;AAEvD,MAAa,YAAYA,MAAE,QAAQ,YAAY;AAC/C,MAAa,gBAAgBA,MAAE,QAAQ,gBAAgB;AACvD,MAAa,eAAeA,MAAE,QAAQ,eAAe;AACrD,MAAa,gBAAgBA,MAAE,QAAQ,gBAAgB;AACvD,MAAa,WAAWA,MAAE,QAAQ,WAAW;AAE7C,MAAa,iBAAiBA,MAAE,QAAQ,iBAAiB;AACzD,MAAa,sBAAsBA,MAAE,QAAQ,sBAAsB;AAEnE,MAAa,WAAWA,MAAE,QAAQ,WAAW;AAE7C,MAAa,SAASA,MAAE,QAAQ,SAAS;AACzC,MAAa,aAAaA,MAAE,QAAQ,aAAa;AAEjD,MAAa,wBAAwBA,MAAE,MAAM;CAC3C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AACF,MAAa,0BAA0B,UACrC,sBAAsB,UAAU,MAAM,CAAC;;;;ACzDzC,MAAa,yBAAyBC,MAAE,MAAM,CAC5C,KACA,KACD,CAAC;AAEF,MAAa,qBAAqBA,MAAE,SAAS,CAAC,UAAU;AACxD,MAAa,gBAAgBA,MAC1B,OAAO;CACN,MAAMA,MAAE,QAAQ,UAAU;CAC1B,UAAU;CACV,OAAO;CACR,CAAC,CACD,MAAM,WAAW;;;;ACfpB,IAAa,iBAAb,cAAoC,eAAgC;CAClE,YAAY,OAAwB;AAClC,QAAM,EAAE,OAAO,CAAC;;CAGlB,OAAO,SAAmC;AACxC,UAAQ,KAAK,KAAK;;CAGpB,OAAO,mBAAmB,KAAoC;AAC5D,MAAI,CAAC,IACH,QAAO,IAAI,KAAK,KAAK;AAGvB,SAAO,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC;;;;;;AChBlC,MAAa,iBAAiBC,MAAE,MAAM,CAAC,UAAU;;;;ACcjD,MAAa,sBAAsBC,MAAE,MAAM;CACzC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,MAAa,kBAAkBA,MAC5B,QAAQ,CACR,UAAU,CACV,GAAGA,MAAE,MAAM,CAACA,MAAE,QAAQ,EAAEA,MAAE,QAAQ,CAAC,CAAC,CAAC;AACxC,MAAa,aAAaA,MACvB,OAAO;CACN,MAAMA,MAAE,QAAQ,OAAO;CACvB,UAAU;CACV,OAAO;CACR,CAAC,CACD,MAAM,WAAW;;;;ACpCpB,IAAa,mBAAb,cAAsC,eAAkC;CACtE,YAAY,OAA0B;AACpC,QAAM,EAAE,OAAO,CAAC;;CAGlB,OAAO,SAAmC;AACxC,UAAQ,OAAO,KAAK;;;;;;ACRxB,MAAa,mBAAmBC,MAAE,QAAQ,CAAC,GAAGA,MAAE,MAAM,CAAC;;;;ACWvD,MAAa,wBAAwBC,MAAE,MAAM;CAC3C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAGF,MAAa,oBAAoBA,MAAE,QAAQ,CAAC,UAAU;AACtD,MAAa,eAAeA,MACzB,OAAO;CACN,MAAMA,MAAE,QAAQ,SAAS;CACzB,UAAU;CACV,OAAO;CACR,CAAC,CACD,MAAM,WAAW;;;;AC5BpB,IAAa,mBAAb,cAAsC,eAAkC;CACtE,YAAY,OAA0B;AACpC,QAAM,EAAE,OAAO,CAAC;;CAGlB,OAAO,SAAmC;AACxC,UAAQ,OAAO,KAAK;;;;;;ACRxB,MAAa,mBAAmBC,MAAE,QAAQ,CAAC,UAAU;;;;ACYrD,MAAa,wBAAwBC,MAAE,MAAM;CAC3C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,MAAa,oBAAoBA,MAAE,QAAQ,CAAC,UAAU;AACtD,MAAa,eAAeA,MACzB,OAAO;CACN,MAAMA,MAAE,QAAQ,SAAS;CACzB,UAAU;CACV,OAAO;CACR,CAAC,CACD,MAAM,WAAW;;;;AChBpB,IAAsB,yBAAtB,MAIA;CAKE,AAAO,IAAI,GAAuD;AAChE,SAAO,IAAI,IAAI,MAAM,EAAE;;CAGzB,AAAO,GAAG,GAAuD;AAC/D,SAAO,IAAI,GAAG,MAAM,EAAE;;CAGxB,AAAO,MAAiB;AACtB,SAAO,IAAI,IAAI,KAAK;;;AAIxB,IAAM,MAAN,cAA6C,uBAA6B;CACxE,YACE,AAAiBC,MACjB,AAAiBC,OACjB;AACA,SAAO;EAHU;EACA;;CAKnB,cAAc,GAAe;AAC3B,SAAO,KAAK,KAAK,cAAc,EAAE,IAAI,KAAK,MAAM,cAAc,EAAE;;CAGlE,OAAO,GAAyB;AAC9B,SAAO,KAAK,KAAK,OAAO,EAAE,CAAC,IAAI,KAAK,MAAM,OAAO,EAAE,CAAC;;CAGtD,OAAO,GAA4B;AACjC,SAAO,KAAK,KAAK,OAAO,EAAE,CAAC,IAAI,KAAK,MAAM,OAAO,EAAE,CAAC;;;AAIxD,IAAM,KAAN,cAA4C,uBAA6B;CACvE,YACE,AAAiBD,MACjB,AAAiBC,OACjB;AACA,SAAO;EAHU;EACA;;CAKnB,cAAc,GAAe;AAC3B,SAAO,KAAK,KAAK,cAAc,EAAE,IAAI,KAAK,MAAM,cAAc,EAAE;;CAGlE,OAAO,GAAyB;AAC9B,SAAO,KAAK,KAAK,OAAO,EAAE,CAAC,aAAa,KAAK,MAAM,OAAO,EAAE,CAAC;;CAG/D,OAAO,GAA4B;AACjC,IAAE,GAAG,KAAK,MAAM,KAAK,MAAM;AAE3B,mCAAU,OAAU;;;AAIxB,IAAM,MAAN,cAA6C,uBAA6B;CACxE,YAAY,AAAgBC,MAA4B;AACtD,SAAO;EADmB;;CAI5B,cAAc,GAAe;AAC3B,SAAO,CAAC,KAAK,KAAK,cAAc,EAAE;;CAGpC,SAA4B;AAC1B,QAAM,IAAI,MAAM,uCAAuC;;CAGzD,OAAO,GAA4B;AACjC,SAAO,KAAK,KAAK,OAAO,EAAE,KAAK,CAAC;;;AAIpC,MAAa,OACX,GAAG,UACsC;AACzC,KAAI,CAAC,MAAM,OACT,QAAOC;CAGT,IAAI,IAAI,MAAM;AACd,MAAK,MAAM,QAAQ,MAAM,MAAM,EAAE,CAC/B,KAAI,EAAE,IAAI,KAAK;AAGjB,oCAAY,EAAE;;AAGhB,MAAa,cACX,GAAG,UACsC;AACzC,QAAO,IACL,GAAG,MAAM,QAAQ,SAAS,KAAK,QAAQ,CAAC,CAAC,KAAK,SAAS,KAAK,QAAQ,CAAC,CACtE;;AAGH,MAAa,MACX,GAAG,UACsC;AACzC,KAAI,CAAC,MAAM,OACT,QAAOA;CAGT,IAAI,IAAI,MAAM;AACd,MAAK,MAAM,QAAQ,MAAM,MAAM,EAAE,CAC/B,KAAI,EAAE,GAAG,KAAK;AAGhB,oCAAY,EAAE;;;;;ACpIhB,IAAsB,0BAAtB,cAGU,uBAA8C;CACtD,YACE,AAAgBC,OAChB,AAAgBC,OAChB,AAAgBC,UAChB;AACA,SAAO;EAJS;EACA;EACA;;CAKlB,OAAO,GAAyB;AAC9B,QAAM,IAAI,MAAM,0BAA0B;;;;;;ACZ9C,IAAa,eAAb,cAAkC,wBAGhC;CACA,cAAc,OAAyB;AACrC,SAAO,iBAAiB,qBAAqB,KAAK,MAAM,OAAO,MAAM;;CAGvE,OAAO,GAA6C;AAClD,IAAE,aAAa,KAAK;AAEpB,mCAAU,OAAU;;;AAIxB,IAAa,kBAAb,cAAqC,wBAGnC;CACA,cAAc,OAAyB;AACrC,SAAO,iBAAiB,qBAAqB,KAAK,MAAM,OAAO,MAAM;;CAGvE,OAAO,GAA6C;AAClD,IAAE,gBAAgB,KAAK;AAEvB,mCAAU,OAAU;;;;;;ACjBxB,IAAa,YAAb,cAA+B,wBAG7B;CACA,cAAc,OAAyB;AACrC,SAAO,iBAAiB,kBAAkB,MAAM,OAAO,KAAK,MAAM;;CAGpE,OAAO,GAA6C;AAClD,IAAE,UAAU,KAAK;AAEjB,mCAAU,OAAU;;;AAIxB,IAAa,kBAAb,cAAqC,wBAGnC;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,gBACrB,QAAO;EAET,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAE9B,SAAO,CAAC,CAAC,MAAM,CAAC,CAAC,4BAAc,IAAI,GAAG;;CAGxC,OAAO,GAA6C;AAClD,IAAE,gBAAgB,KAAK;AAEvB,mCAAU,OAAU;;;AAIxB,IAAa,eAAb,cAAkC,wBAGhC;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,gBACrB,QAAO;EAGT,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAE9B,SAAO,CAAC,CAAC,MAAM,CAAC,CAAC,6BAAe,IAAI,GAAG;;CAGzC,OAAO,GAA6C;AAClD,IAAE,aAAa,KAAK;AAEpB,mCAAU,OAAU;;;AAIxB,IAAa,yBAAb,cAA4C,wBAG1C;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,gBACrB,QAAO;EAGT,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAE9B,SAAO,CAAC,CAAC,MAAM,CAAC,CAAC,6BAAe,IAAI,GAAG,0BAAY,IAAI,GAAG;;CAG5D,OAAO,GAA6C;AAClD,IAAE,uBAAuB,KAAK;AAE9B,mCAAU,OAAU;;;AAIxB,IAAa,sBAAb,cAAyC,wBAGvC;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,gBACrB,QAAO;EAGT,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAE9B,SAAO,CAAC,CAAC,MAAM,CAAC,CAAC,6BAAe,IAAI,GAAG,2BAAa,IAAI,GAAG;;CAG7D,OAAO,GAA6C;AAClD,IAAE,oBAAoB,KAAK;AAE3B,mCAAU,OAAU;;;AAIxB,IAAa,cAAb,cAAiC,wBAG/B;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,gBACrB,QAAO;EAGT,MAAM,OAAO,MAAM,QAAQ;AAE3B,SAAO,CAAC,CAAC,8BAAgB,KAAK;;CAGhC,OAAO,GAA6C;AAClD,IAAE,YAAY,KAAK;AAEnB,mCAAU,OAAU;;;AAIxB,IAAa,iBAAb,cAAoC,wBAGlC;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,gBACrB,QAAO;EAGT,MAAM,OAAO,MAAM,QAAQ;AAE3B,SAAO,CAAC,CAAC,iCAAmB,KAAK;;CAGnC,OAAO,GAA6C;AAClD,IAAE,eAAe,KAAK;AAEtB,mCAAU,OAAU;;;AAIxB,IAAa,kBAAb,cAAqC,wBAGnC;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,gBACrB,QAAO;EAGT,MAAM,OAAO,MAAM,QAAQ;AAE3B,SAAO,CAAC,CAAC,kCAAoB,KAAK;;CAGpC,OAAO,GAA6C;AAClD,IAAE,gBAAgB,KAAK;AAEvB,mCAAU,OAAU;;;AAIxB,IAAa,cAAb,cAAiC,wBAG/B;CACA,YACE,AAAOC,OACP,AAAOC,WACP,AAAOC,SACP,AAAOC,UACP;AACA,QAAM,OAAO,IAAI,eAAe,UAAU,EAAE,SAAS;EAL9C;EACA;EACA;EACA;;CAKT,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,gBACrB,QAAO;EAGT,MAAM,OAAO,MAAM,QAAQ;AAE3B,SACE,CAAC,CAAC,uCACe,MAAM;GAAE,OAAO,KAAK;GAAW,KAAK,KAAK;GAAS,CAAC;;CAIxE,OAAO,GAA6C;AAClD,IAAE,YAAY,KAAK;AAEnB,mCAAU,OAAU;;;;;;AC3MxB,SAAS,MAAM,OAA2C;AACxD,QAAO,UAAU,QAAQ,UAAU;;AAGrC,SAAS,SAAS,OAAiC;AACjD,QAAO,OAAO,UAAU;;AAG1B,IAAa,cAAb,cAAiC,wBAG/B;CACA,cAAc,OAAyB;AACrC,SAAO,iBAAiB,oBAAoB,MAAM,OAAO,KAAK,MAAM;;CAGtE,OAAO,GAA6C;AAClD,IAAE,YAAY,KAAK;AAEnB,mCAAU,OAAU;;;AAIxB,IAAa,oBAAb,cAAuC,wBAGrC;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,kBACrB,QAAO;EAET,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAC9B,MAAI,OAAO,QAAQ,SAAS,GAAG,CAC7B,QAAO;AAGT,SAAO,OAAO,QAAQ,OAAO,QAAQ,KAAK;;CAG5C,OAAO,GAA6C;AAClD,IAAE,kBAAkB,KAAK;AAEzB,mCAAU,OAAU;;;AAIxB,IAAa,iBAAb,cAAoC,wBAGlC;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,kBACrB,QAAO;EAET,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAE9B,SAAO,OAAO,QAAQ,OAAO,QAAQ,KAAK;;CAG5C,OAAO,GAA6C;AAClD,IAAE,eAAe,KAAK;AAEtB,mCAAU,OAAU;;;AAIxB,IAAa,2BAAb,cAA8C,wBAG5C;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,kBACrB,QAAO;EAET,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAC9B,MAAI,OAAO,QAAQ,SAAS,GAAG,CAC7B,QAAO;AAGT,SAAO,OAAO,QAAQ,OAAO,QAAQ,MAAM;;CAG7C,OAAO,GAA6C;AAClD,IAAE,yBAAyB,KAAK;AAEhC,mCAAU,OAAU;;;AAIxB,IAAa,wBAAb,cAA2C,wBAGzC;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,kBACrB,QAAO;EAET,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAE9B,SAAO,OAAO,QAAQ,OAAO,QAAQ,MAAM;;CAG7C,OAAO,GAA6C;AAClD,IAAE,sBAAsB,KAAK;AAE7B,mCAAU,OAAU;;;AAIxB,IAAa,cAAb,cAAiC,wBAG/B;CACA,YAAY,AAAgBC,OAAe;AACzC,QAAM,OAAO,IAAI,iBAAiB,KAAK,CAAC;EADd;;CAI5B,cAAc,OAAyB;AACrC,SAAO,iBAAiB,oBAAoB,MAAM,MAAM,QAAQ,CAAC;;CAGnE,OAAO,GAA6C;AAClD,IAAE,YAAY,KAAK;AAEnB,mCAAU,OAAU;;;;;;AChIxB,IAAa,cAAb,cAAiC,wBAG/B;CACA,cAAc,OAAyB;AACrC,SAAO,iBAAiB,oBAAoB,KAAK,MAAM,OAAO,MAAM;;CAGtE,OAAO,GAA6C;AAClD,IAAE,YAAY,KAAK;AAEnB,mCAAU,OAAU;;;AAIxB,IAAa,iBAAb,cAAoC,wBAGlC;CACA,cAAc,OAAyB;AACrC,SAAO,iBAAiB,oBAAoB,KAAK,MAAM,OAAO,MAAM;;CAGtE,OAAO,GAA6C;AAClD,IAAE,eAAe,KAAK;AAEtB,mCAAU,OAAU;;;AAIxB,IAAa,gBAAb,cAAmC,wBAGjC;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,kBACrB,QAAO;EAGT,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAE9B,SAAO,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,SAAS,GAAG;;CAGxC,OAAO,GAA6C;AAClD,IAAE,cAAc,KAAK;AAErB,mCAAU,OAAU;;;AAIxB,IAAa,mBAAb,cAAsC,wBAGpC;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,kBACrB,QAAO;EAGT,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAE9B,SAAO,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,WAAW,GAAG;;CAG1C,OAAO,GAA6C;AAClD,IAAE,iBAAiB,KAAK;AAExB,mCAAU,OAAU;;;AAIxB,IAAa,iBAAb,cAAoC,wBAGlC;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,kBACrB,QAAO;EAGT,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAE9B,SAAO,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,SAAS,GAAG;;CAGxC,OAAO,GAA6C;AAClD,IAAE,eAAe,KAAK;AAEtB,mCAAU,OAAU;;;AAIxB,IAAa,cAAb,cAAiC,wBAG/B;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,kBACrB,QAAO;EAGT,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAE9B,SAAO,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,IAAI,OAAO,GAAG,CAAC,KAAK,GAAG;;CAGhD,OAAO,GAA6C;AAClD,IAAE,YAAY,KAAK;AAEnB,mCAAU,OAAU;;;AAIxB,IAAa,cAAb,cAAiC,wBAG/B;CACA,YAAY,OAAe;AACzB,QAAM,OAAO,IAAI,iBAAiB,KAAK,CAAC;;CAG1C,cAAc,OAAyB;AACrC,MAAI,iBAAiB,iBACnB,QAAO,CAAC,MAAM,QAAQ;AAGxB,SAAO,CAAC;;CAGV,OAAO,GAA6C;AAClD,IAAE,YAAY,KAAK;AAEnB,mCAAU,OAAU;;;;;;ACnGxB,MAAa,oBAAyC,YAAyB;CAC7E,MAAMC,cAA2B,CAAC,QAAQ,IAAI,GAAG,QAAQ,MAAM,EAAE,CAAC;CAElE,MAAMC,WAASC,MAAE,MAAM,YAA8B;CAErD,MAAMC,UAGDD,MAAE,WACLA,MAAE,OAAO;EACP,aAAa;EACb,UAAUA,MAAE,MAAM,CAACE,SAAOH,SAAO,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU;EACjE,CAAC,CACH;CAID,MAAMI,sBAFgBJ,SAAO,GAAGG,QAAM,CAEE,OAAO;AAE/C,QAAOA,QAAM,GAAGC,oBAAkB;;AAGpC,MAAM,SAASH,MAAE,mBAAmB,QAAQ;CAC1C;CACA;CACA;CACA;CACD,CAAC;AAUF,MAAMI,QAA2BJ,MAAE,WACjCA,MAAE,OAAO;CACP,aAAa;CACb,UAAUA,MAAE,MAAM,CAAC,OAAO,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU;CACjE,CAAC,CACH;AAED,MAAM,gBAAgB,OAAO,GAAG,MAAM;AAKtC,MAAa,oBAAoB,cAAc,OAAO;AAGtD,MAAa,aAAa,cAAc,GAAG,kBAAkB;AAK7D,MAAa,WACX,oBAC4B;AAC5B,QAAO,QAAQ,IAAIK,iBAAe,cAAc;;AAGlD,MAAa,YACX,oBAC6B;AAC7B,QACE,QAAQ,IAAIA,iBAAe,OAAO,IAAI,QAAQ,IAAIA,iBAAe,WAAW;;AAIhF,MAAa,YAAYL,MAAE,MAAM,CAC/B,uBACA,sBACD,CAAC;AAKF,MAAaM,eAAgD,EAC3D,QAAQ,sBAAsB,QAAQ,KAAK,MAAM,EAAE,MAAM,EAC1D;AAED,MAAM,uBACJ,aACoC;AACpC,KAAIP,SAAO,UAAU,OACnB,QAAOQ;AAGT,SAAQR,SAAO,UAAf;EACE,KAAK,MACH,oCACE,IAAI,YACFA,SAAO,OACP,IAAI,iBAAiBA,SAAO,MAAM,EAClCA,SAAO,SACR,CACF;EAEH,KAAK,OACH,oCACE,IAAI,eACFA,SAAO,OACP,IAAI,iBAAiBA,SAAO,MAAM,EAClCA,SAAO,SACR,CACF;EAEH,KAAK,YACH,oCACE,IAAI,cAAcA,SAAO,OAAO,IAAI,iBAAiBA,SAAO,MAAM,CAAC,CACpE;EAEH,KAAK,gBACH,oCACE,IAAI,cACFA,SAAO,OACP,IAAI,iBAAiBA,SAAO,MAAM,CACnC,CAAC,KAAK,CACR;EAEH,KAAK,eACH,oCACE,IAAI,iBAAiBA,SAAO,OAAO,IAAI,iBAAiBA,SAAO,MAAM,CAAC,CACvE;EAEH,KAAK,aACH,oCACE,IAAI,eAAeA,SAAO,OAAO,IAAI,iBAAiBA,SAAO,MAAM,CAAC,CACrE;EAEH,KAAK,SACH,oCACE,IAAI,YAAYA,SAAO,OAAO,IAAI,iBAAiBA,SAAO,MAAM,CAAC,CAClE;EAEH,KAAK,YACH,oCAAY,IAAI,YAAYA,SAAO,MAAM,CAAC;EAE5C,KAAK,gBACH,oCACE,IAAI,YACFA,SAAO,MACR,CAAC,KAAK,CACR;EAGH,QACE,QAAOQ;;;AAIb,MAAM,uBACJ,aACoC;AACpC,KAAIR,aAAW,OACb,QAAOQ;AAGT,SAAQR,SAAO,UAAf;EACE,KAAK,MACH,oCACE,IAAI,YAAYA,SAAO,OAAO,IAAI,iBAAiBA,SAAO,MAAM,CAAC,CAClE;EACH,KAAK,OAEH,oCACE,IAAI,YAAYA,SAAO,OAAO,IAAI,iBAAiBA,SAAO,MAAM,CAAC,CAAC,KAAK,CACxE;EAEH,KAAK,MACH,oCACE,IAAI,kBAAkBA,SAAO,OAAO,IAAI,iBAAiBA,SAAO,MAAM,CAAC,CACxE;EAEH,KAAK,OACH,oCACE,IAAI,yBACFA,SAAO,OACP,IAAI,iBAAiBA,SAAO,MAAM,CACnC,CACF;EAEH,KAAK,MACH,oCACE,IAAI,eAAeA,SAAO,OAAO,IAAI,iBAAiBA,SAAO,MAAM,CAAC,CACrE;EAEH,KAAK,OACH,oCACE,IAAI,sBACFA,SAAO,OACP,IAAI,iBAAiBA,SAAO,MAAM,CACnC,CACF;EAEH,KAAK,YACH,oCAAY,IAAI,YAAYA,SAAO,MAAM,CAAC;EAE5C,KAAK,gBAEH,oCAAY,IAAI,YAAYA,SAAO,MAAM,CAAC,KAAK,CAAC;EAElD,QACE,QAAOQ;;;AAIb,MAAM,wBACJ,aACoC;AACpC,KAAIR,aAAW,OACb,QAAOQ;AAGT,SAAQR,SAAO,UAAf;EACE,KAAK,MACH,oCACE,IAAI,aAAaA,SAAO,OAAO,IAAI,kBAAkBA,SAAO,MAAM,CAAC,CACpE;EAEH,KAAK,OACH,oCACE,IAAI,gBAAgBA,SAAO,OAAO,IAAI,kBAAkBA,SAAO,MAAM,CAAC,CACvE;;AAIL,oCACE,IAAI,aAAaA,SAAO,OAAO,IAAI,kBAAkBA,SAAO,MAAM,CAAC,CACpE;;AAGH,MAAM,qBACJ,aACoC;AACpC,KAAIA,aAAW,OACb,QAAOQ;AAGT,SAAQR,SAAO,UAAf;EACE,KAAK,MACH,oCACE,IAAI,UACFA,SAAO,OACP,eAAe,mBAAmBA,SAAO,MAAgB,EACzDA,SAAO,SACR,CACF;EAEH,KAAK,WACH,oCACE,IAAI,YACFA,SAAO,OACP,IAAI,KAAMA,SAAO,MAA2B,GAAG,EAC/C,IAAI,KAAMA,SAAO,MAA2B,GAAG,CAChD,CACF;;AAIL,QAAOQ;;AAGT,MAAM,iBAAiB,aAAqD;AAC1E,8BAAaR,SAAO,CACjB,YAA6C,CAC7C,KAAK,EAAE,MAAM,UAAU,GAAG,MAAM,oBAAoB,EAAE,CAAC,CACvD,KAAK,EAAE,MAAM,UAAU,GAAG,MAAM,oBAAoB,EAAE,CAAC,CACvD,KAAK,EAAE,MAAM,QAAQ,GAAG,MAAM,kBAAkB,EAAE,CAAC,CACnD,KAAK,EAAE,MAAM,WAAW,GAAG,MAAM,qBAAqB,EAAE,CAAC,CACzD,gBAAgBQ,uBAAK;;AAG1B,MAAM,wBACJ,oBACoC;AACpC,KAAI,QAAQF,gBAAc,CACxB,QAAO,yBACLA,gBAAc,UACdA,gBAAc,YACf;UACQ,SAASA,gBAAc,CAChC,QAAO,cAAcA,gBAAc;AAGrC,QAAOE;;AAGT,MAAM,4BACJ,sBAAwC,EAAE,EAC1C,cAA4B,WACQ;CACpC,IAAIC,OAAwCD;AAC5C,MAAK,MAAMR,YAAUI,oBACnB,KAAI,KAAK,QAAQ,EAAE;AACjB,SAAO,qBAAqBJ,SAAO;AACnC,MAAI,gBAAgB,OAElB,QAAO,KAAK,KAAK,MAAM,EAAE,KAAK,CAAC;YAG7B,SAASA,SAAO,CAElB,QAAO,KAAK,KAAK,SAAS;EACxB,MAAM,QAAQ,qBAAqBA,SAAO;AAC1C,MAAI,MAAM,QAAQ,EAAE;AAClB,OAAI,gBAAgB,OAClB,QAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;YACtB,gBAAgB,MACzB,QAAO,KAAK,GAAG,MAAM,QAAQ,CAAC;AAGhC,UAAO,KAAK,IAAI,MAAM,QAAQ,CAAC,KAAK,CAAC;;AAGvC,SAAO;GACP;UACO,QAAQA,SAAO,CACxB,QAAO,yBAAyBA,SAAO,UAAUA,SAAO,YAAY;AAK1E,QAAO;;AAGT,MAAa,qBACX,aACoC;AACpC,KAAI,MAAM,QAAQA,SAAO,CACvB,QAAO,yBAAyBA,SAAO;AAGzC,QAAO,qBAAqBA,SAAO;;AAGrC,SAAS,cAAc,OAAyB;AAC9C,KAAI,SAAS,KAAM,QAAO;AAC1B,KAAI,MAAM,QAAQ,MAAM,CAAE,QAAO,MAAM,WAAW;AAClD,KAAI,OAAO,UAAU,UAAU;AAC7B,OAAK,MAAM,KAAK,MACd,QAAO;AAET,SAAO;;AAET,QAAO;;AAGT,MAAa,iBAAiB,aAAwB,cAAcA,SAAO;;;;AC/X3E,IAAa,aAAb,cAA6D,YAE3D;CACA,IAAI,QAAQ;AACV,SAAO,KAAK;;CAGd,IAAI,QAAQ;AACV,MAAI,MAAM,QAAQ,KAAK,MAAM,CAC3B,QAAO;GAAE,aAAa;GAAQ,UAAU,KAAK;GAAO;AAEtD,MAAI,QAAQ,KAAK,MAAM,CACrB,QAAO,KAAK;AAGd,SAAO;GAAE,aAAa;GAAQ,UAAU,CAAC,KAAK,MAAM;GAAE;;CAGxD,UAA2C;AACzC,SAAO,kBAAkB,KAAK,MAAM;;CAGtC,AAAO,SAAS;AACd,SAAO,KAAK;;;;;;AC/BhB,MAAa,mBAAmBU,MAAE,OAAO;CACvC,OAAOA,MAAE,OAAO,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,UAAU;CAChE,QAAQA,MAAE,OAAO,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,UAAU;CACpE,CAAC;AAIF,MAAa,0BAA0B,iBAAiB,OAAO,EAC7D,OAAOA,MAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,EACtC,CAAC;;;;ACXF,IAAsB,QAAtB,MAA4B;;;;ACG5B,MAAa,gBAAgBC,MAAE,OAAOA,MAAE,QAAQ,EAAEA,MAAE,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;;;;ACD1E,IAAa,SAAb,MAAa,eAAe,YAAqB;CAC/C,YAAY,OAAgB;AAC1B,QAAM,EAAE,OAAO,CAAC;;CAGlB,IAAW,QAAiB;AAC1B,SAAO,KAAK,MAAM;;CAGpB,OAAc,YAAY,OAAgB;AACxC,SAAO,IAAI,OAAO,MAAM;;CAG1B,OAAc,OAAe;AAC3B,SAAO,IAAI,OAAO,KAAK;;CAGzB,OAAc,QAAgB;AAC5B,SAAO,IAAI,OAAO,MAAM;;;;;;AClB5B,IAAa,SAAb,MAAa,eAAe,YAAkB;CAC5C,YAAY,OAA+B;AAEzC,QAAM,EAAE,OADK,IAAI,KAAK,MAAM,EACP,CAAC;;CAGxB,IAAW,QAAc;AACvB,SAAO,KAAK,MAAM;;CAGpB,OAAc,SAAS,OAAa;AAClC,SAAO,IAAI,OAAO,MAAM;;CAG1B,OAAc,MAAc;AAC1B,SAAO,IAAI,OAAO,KAAK,KAAK,CAAC;;;;;;ACfjC,IAAsB,KAAtB,cAA0C,YAAe;CACvD,YAAY,OAAU;AACpB,QAAM,EAAE,OAAO,CAAwB;;CAGzC,IAAW,QAAW;AACpB,SAAO,KAAK,QAAQ;;;;;;ACLxB,IAAsB,SAAtB,MAAsB,eAAe,GAAG;CACtC,OAAe,YAAY;CAE3B,OAAO,SAAS,SAAS,IAAI,OAAO,GAAG;AAGrC,SAAO,oCAFmB,OAAO,WAAW,KAAK,EAAE;;CAKrD,IAAW,QAAgB;AACzB,SAAO,KAAK,MAAM;;;;;;ACXtB,IAAa,YAAb,MAAa,kBAAkB,YAAoB;CACjD,YAAY,OAAe;AACzB,QAAM,EAAE,OAAO,CAAC;;CAGlB,IAAW,QAAgB;AACzB,SAAO,KAAK,MAAM;;CAGpB,OAAc,WAAW,OAAe;AACtC,SAAO,IAAI,UAAU,MAAM;;;;;;ACV/B,IAAa,WAAb,MAAa,iBAAiB,YAAoB;CAChD,YAAY,OAAe;AACzB,QAAM,EAAE,OAAO,CAAC;;CAGlB,IAAW,QAAgB;AACzB,SAAO,KAAK,MAAM;;CAGpB,OAAc,WAAW,OAAe;AACtC,SAAO,IAAI,SAAS,MAAM;;CAG5B,OAAc,QAAkB;AAC9B,SAAO,IAAI,SAAS,GAAG;;;;;;ACb3B,IAAsB,OAAtB,cAAmC,GAAG;CACpC,OAAO,WAAW;AAChB,uBAAW;;CAGb,IAAW,QAAgB;AACzB,SAAO,KAAK,MAAM;;;;;;ACNtB,MAAM,cAAcC,YAAE,OAAO;AAE7B,IAAa,UAAb,cAA6B,YAAoB;CAC/C,YAAY,OAAe;AACzB,QAAM,EAAE,OAAO,CAAC;;CAGlB,OAAO,OAAO,OAAe;AAC3B,SAAO,IAAI,KAAK,YAAY,MAAM,MAAM,CAAC;;CAG3C,IAAW,QAAgB;AACzB,SAAO,KAAK,MAAM;;;;;;ACZtB,MAAM,cAAcC,YAAE,KAAK;AAE3B,IAAa,UAAb,cAA6B,YAAoB;CAC/C,YAAY,OAAe;AACzB,QAAM,EAAE,OAAO,CAAC;;CAGlB,OAAO,OAAO,OAAe;AAC3B,SAAO,IAAI,KAAK,YAAY,MAAM,MAAM,CAAC;;CAG3C,IAAW,QAAgB;AACzB,SAAO,KAAK,MAAM"}
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import { Option, Result } from "oxide.ts";
2
+ import { Option, Result } from "@globalart/oxide";
3
3
 
4
4
  //#region src/event.d.ts
5
5
  declare const eventSchema: <TName extends string, TPayload extends z.ZodTypeAny, TMeta extends z.ZodTypeAny>(name: TName, payload: TPayload, meta: TMeta) => z.ZodObject<{
@@ -842,7 +842,7 @@ declare class DateVO extends ValueObject<Date> {
842
842
  }
843
843
  //#endregion
844
844
  //#region src/value-objects/id.vo.d.ts
845
- declare abstract class ID<T = number> extends ValueObject<T> {
845
+ declare abstract class ID<T = any> extends ValueObject<T> {
846
846
  constructor(value: T);
847
847
  get value(): T;
848
848
  }
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import { Option, Result } from "oxide.ts";
2
+ import { Option, Result } from "@globalart/oxide";
3
3
 
4
4
  //#region src/event.d.ts
5
5
  declare const eventSchema: <TName extends string, TPayload extends z.ZodTypeAny, TMeta extends z.ZodTypeAny>(name: TName, payload: TPayload, meta: TMeta) => z.ZodObject<{
@@ -842,7 +842,7 @@ declare class DateVO extends ValueObject<Date> {
842
842
  }
843
843
  //#endregion
844
844
  //#region src/value-objects/id.vo.d.ts
845
- declare abstract class ID<T = number> extends ValueObject<T> {
845
+ declare abstract class ID<T = any> extends ValueObject<T> {
846
846
  constructor(value: T);
847
847
  get value(): T;
848
848
  }
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { v4 } from "uuid";
2
2
  import z$1, { z } from "zod";
3
- import { None, Ok, Some } from "oxide.ts";
3
+ import { None, Ok, Some } from "@globalart/oxide";
4
4
  import { match } from "ts-pattern";
5
5
  import { dequal } from "dequal";
6
6
  import { isAfter, isBefore, isEqual, isToday, isTomorrow, isWithinInterval, isYesterday } from "date-fns";
@@ -81,7 +81,6 @@ var ExceptionBase = class extends Error {
81
81
  this.message = message;
82
82
  this.cause = cause;
83
83
  this.metadata = metadata;
84
- Error.captureStackTrace(this, this.constructor);
85
84
  this.correlationId = correlationId;
86
85
  }
87
86
  toJSON() {
@@ -949,8 +948,7 @@ var ID = class extends ValueObject {
949
948
  var NanoID = class NanoID extends ID {
950
949
  static ALPHABETS = "0123456789abcdefghijklmnopqrstuvwxyz";
951
950
  static createId(prefix = "", size = 5) {
952
- const id = customAlphabet(NanoID.ALPHABETS, size)();
953
- return prefix + id;
951
+ return prefix + customAlphabet(NanoID.ALPHABETS, size)();
954
952
  }
955
953
  get value() {
956
954
  return this.props.value;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["#domainEvents","payload: TPayload","operatorId: string","meta: TMeta","message: string","cause?: Error","metadata?: unknown","props: ValueObjectProps<T>","left: ISpecification<T, V>","right: ISpecification<T, V>","spec: ISpecification<T, V>","field: string","value: V","relation?: string","field: string","dateStart: Date","dateEnd: Date","relation?: string","field: string","filterTuple: [T, ...T[]]","filter","group: z.ZodType<{\n conjunction?: IConjunction;\n children?: (z.infer<typeof group> | z.infer<typeof filter>)[];\n }>","group","filterOrGroupList","group: z.ZodType<IGroup>","filterOrGroup","operatorsMap: Record<IFieldType, IOperator[]>","spec: Option<BaseFilterSpecification>","z","z"],"sources":["../src/aggregate-root.ts","../src/command.ts","../src/event.ts","../src/exception.base.ts","../src/filter/base.filter.ts","../src/filter/conjunction.ts","../src/utils.ts","../src/value-objects/value-object.ts","../src/filter/fields/field-value.base.ts","../src/filter/fields/boolean/boolean-field-value.ts","../src/filter/fields/boolean/boolean-field.type.ts","../src/filter/operators.ts","../src/filter/fields/boolean/boolean.filter.ts","../src/filter/fields/date/date-field-value.ts","../src/filter/fields/date/date-field.type.ts","../src/filter/fields/date/date.filter.ts","../src/filter/fields/number/number-field-value.ts","../src/filter/fields/number/number-field.type.ts","../src/filter/fields/number/number.filter.ts","../src/filter/fields/string/string-field-value.ts","../src/filter/fields/string/string-field.type.ts","../src/filter/fields/string/string.filter.ts","../src/specification.ts","../src/filter/filter-specification.base.ts","../src/filter/specifications/boolean.specification.ts","../src/filter/specifications/date.specification.ts","../src/filter/specifications/number.specification.ts","../src/filter/specifications/string.specification.ts","../src/filter/filter.ts","../src/filter/root-filter.ts","../src/pagination.ts","../src/query.ts","../src/sort.ts","../src/value-objects/boolean.vo.ts","../src/value-objects/date.vo.ts","../src/value-objects/id.vo.ts","../src/value-objects/nanoid.vo.ts","../src/value-objects/integer.vo.ts","../src/value-objects/string.vo.ts","../src/value-objects/uuid.vo.ts","../src/value-objects/email.vo.ts","../src/value-objects/color.vo.ts"],"sourcesContent":["import { type BaseEvent } from \"./event\";\n\nexport abstract class AggregateRoot<E extends BaseEvent> {\n #domainEvents: E[] = [];\n\n get domainEvents() {\n return this.#domainEvents;\n }\n\n set domainEvents(events: E[]) {\n this.#domainEvents = events;\n }\n\n addDomainEvent(event: E) {\n this.#domainEvents.push(event);\n }\n\n removeEvents(events: E[]) {\n this.#domainEvents = this.#domainEvents.filter(\n (event) => !events.includes(event),\n );\n }\n}\n","import { v4 } from \"uuid\";\n\nexport type CommandProps<T> = Omit<T, \"correlationId\" | \"commandId\"> &\n Partial<Command>;\n\nexport abstract class Command {\n public readonly commandId: string;\n\n public readonly correlationId: string;\n\n public readonly causationId?: string;\n\n constructor(props: CommandProps<unknown>) {\n this.correlationId = props.correlationId ?? v4();\n this.commandId = props.commandId ?? v4();\n }\n}\n","import { v4 } from \"uuid\";\nimport { z } from \"zod\";\n\nexport const eventSchema = <\n TName extends string,\n TPayload extends z.ZodTypeAny,\n TMeta extends z.ZodTypeAny,\n>(\n name: TName,\n payload: TPayload,\n meta: TMeta,\n) =>\n z.object({\n id: z.string().uuid(),\n name: z.literal(name),\n operatorId: z.string().optional(),\n payload: payload,\n timestamp: z.coerce.date(),\n meta: meta,\n });\n\nexport interface IEvent<TPayload extends object = object, TMeta = any> {\n id: string;\n name: string;\n operatorId: string;\n payload: TPayload;\n timestamp: Date;\n meta: TMeta;\n}\n\nexport interface IEventJSON<TPayload extends object = object, TMeta = any> {\n id: string;\n name: string;\n operatorId: string;\n payload: TPayload;\n timestamp: string;\n meta: TMeta;\n}\n\nexport abstract class BaseEvent<\n TPayload extends object = object,\n TName extends string = string,\n TMeta extends any = { key?: string; headers?: Record<string, string> },\n> implements IEvent<TPayload>\n{\n abstract name: TName;\n constructor(\n public readonly payload: TPayload,\n public readonly operatorId: string,\n public readonly meta: TMeta,\n public readonly id = v4(),\n public readonly timestamp = new Date(),\n ) {}\n\n toJSON(): IEventJSON<TPayload, TMeta> {\n return {\n id: this.id,\n name: this.name,\n operatorId: this.operatorId,\n timestamp: this.timestamp.toISOString(),\n payload: this.payload,\n meta: this.meta,\n };\n }\n}\n","export interface SerializedException {\n message: string;\n code: string;\n correlationId?: string;\n stack?: string;\n cause?: string;\n metadata?: unknown;\n}\n\nexport abstract class ExceptionBase extends Error {\n abstract code: string;\n\n public readonly correlationId?: string;\n\n /**\n *\n * @param message\n * @param correlationId\n * @param cause\n * @param metadata\n */\n constructor(\n readonly message: string,\n correlationId?: string,\n readonly cause?: Error,\n readonly metadata?: unknown,\n ) {\n super(message);\n Error.captureStackTrace(this, this.constructor);\n this.correlationId = correlationId;\n }\n\n toJSON(): SerializedException {\n return {\n message: this.message,\n code: this.code,\n stack: this.stack,\n correlationId: this.correlationId,\n cause: JSON.stringify(this.cause),\n metadata: this.metadata,\n };\n }\n}\n","import { z } from \"zod\";\n\nexport const baseFilter = z.object({\n field: z.string().min(1),\n relation: z.string().min(1).optional(),\n});\n","import { z } from \"zod\";\n\nconst $and = z.literal(\"$and\");\nconst $or = z.literal(\"$or\");\nconst $not = z.literal(\"$not\");\nexport const conjunctions = z.union([$and, $or, $not]);\nexport type IConjunction = z.infer<typeof conjunctions>;\n","import { ValueObject } from \"./value-objects/value-object\";\n\nexport function convertPropsToObject(props: any): any {\n const propsCopy = { ...props };\n\n // eslint-disable-next-line guard-for-in\n for (const prop in propsCopy) {\n if (Array.isArray(propsCopy[prop])) {\n propsCopy[prop] = (propsCopy[prop] as Array<unknown>).map((item) => {\n return convertToPlainObject(item);\n });\n }\n propsCopy[prop] = convertToPlainObject(propsCopy[prop]);\n }\n\n return propsCopy;\n}\n\nfunction convertToPlainObject(item: any): any {\n if (ValueObject.isValueObject(item)) {\n return item.unpack();\n }\n\n return item;\n}\n","import { dequal } from \"dequal\";\nimport { convertPropsToObject } from \"../utils.js\";\nexport type Primitives = string | number | boolean | null;\nexport interface DomainPrimitive<T extends Primitives | Date> {\n value: T;\n}\n\nexport type ValueObjectProps<T> = T extends Primitives | Date\n ? DomainPrimitive<T>\n : T;\n\nexport abstract class ValueObject<T = any> {\n constructor(protected readonly props: ValueObjectProps<T>) {}\n\n public equals(vo?: ValueObject<T>): boolean {\n if (vo === null || vo === undefined) {\n return false;\n }\n\n return dequal(vo, this);\n }\n\n static isValueObject(obj: unknown): obj is ValueObject<unknown> {\n return obj instanceof ValueObject;\n }\n\n public unpack(): T {\n if (this.isDomainPrimitive(this.props)) {\n return this.props.value;\n }\n\n const propsCopy = convertPropsToObject(this.props);\n\n return Object.freeze(propsCopy);\n }\n\n private isDomainPrimitive(\n obj: unknown\n ): obj is DomainPrimitive<T & (Primitives | Date)> {\n if (Object.prototype.hasOwnProperty.call(obj, \"value\")) {\n return true;\n }\n\n return false;\n }\n}\n","import { ValueObject } from \"../../value-objects/value-object\";\nimport { type IFieldValueVisitor } from \"./field-value.visitor\";\nimport { type UnpackedFieldValue } from \"./field.type\";\n\nexport abstract class FieldValueBase<\n V extends UnpackedFieldValue,\n> extends ValueObject<V> {\n abstract accept(visitor: IFieldValueVisitor): void;\n}\n","import { FieldValueBase } from \"../field-value.base\";\nimport { type IFieldValueVisitor } from \"../field-value.visitor\";\nimport { type IBooleanFieldValue } from \"./boolean-field.type\";\n \nexport class BooleanFieldValue extends FieldValueBase<IBooleanFieldValue> {\n constructor(value: IBooleanFieldValue) {\n super({ value });\n }\n\n accept(visitor: IFieldValueVisitor): void {\n visitor.boolean(this);\n }\n}\n","import { z } from \"zod\";\n\nexport const booleanFieldValue = z.boolean().nullable();\nexport type IBooleanFieldValue = z.infer<typeof booleanFieldValue>;\n","import { z } from \"zod\";\n\nexport const $eq = z.literal(\"$eq\");\nexport const $neq = z.literal(\"$neq\");\nexport const $contains = z.literal(\"$contains\");\nexport const $not_contains = z.literal(\"$not_contains\");\nexport const $starts_with = z.literal(\"$starts_with\");\nexport const $ends_with = z.literal(\"$ends_with\");\nexport const $regex = z.literal(\"$regex\");\n\nexport const $is_true = z.literal(\"$is_true\");\nexport const $is_false = z.literal(\"$is_false\");\n\nexport const $in = z.literal(\"$in\");\nexport const $nin = z.literal(\"$nin\");\n\nexport const $gt = z.literal(\"$gt\");\nexport const $lt = z.literal(\"$lt\");\nexport const $gte = z.literal(\"$gte\");\nexport const $lte = z.literal(\"$lte\");\n\nexport const $start_eq = z.literal(\"$start_eq\");\nexport const $start_neq = z.literal(\"$start_neq\");\nexport const $start_gt = z.literal(\"$start_gt\");\nexport const $start_lt = z.literal(\"$start_lt\");\nexport const $start_gte = z.literal(\"$start_gte\");\nexport const $start_lte = z.literal(\"$start_lte\");\n\nexport const $end_eq = z.literal(\"$end_eq\");\nexport const $end_neq = z.literal(\"$end_neq\");\nexport const $end_gt = z.literal(\"$end_gt\");\nexport const $end_lt = z.literal(\"$end_lt\");\nexport const $end_gte = z.literal(\"$end_gte\");\nexport const $end_lte = z.literal(\"$end_lte\");\n\nexport const $is_empty = z.literal(\"$is_empty\");\nexport const $is_not_empty = z.literal(\"$is_not_empty\");\n\nexport const $is_today = z.literal(\"$is_today\");\nexport const $is_not_today = z.literal(\"$is_not_today\");\nexport const $is_tomorrow = z.literal(\"$is_tomorrow\");\nexport const $is_yesterday = z.literal(\"$is_yesterday\");\nexport const $between = z.literal(\"$between\");\n\nexport const $has_file_type = z.literal(\"$has_file_type\");\nexport const $has_file_extension = z.literal(\"$has_file_extension\");\n\nexport const $is_root = z.literal(\"$is_root\");\n\nexport const $is_me = z.literal(\"$is_me\");\nexport const $is_not_me = z.literal(\"$is_not_me\");\n\nexport const operatorsWihtoutValue = z.union([\n $is_empty,\n $is_not_empty,\n $is_today,\n $is_not_today,\n $is_tomorrow,\n $is_yesterday,\n $is_root,\n $is_me,\n $is_not_me,\n]);\nexport const isOperatorWithoutValue = (value: string): boolean =>\n operatorsWihtoutValue.safeParse(value).success;\n","import { z } from \"zod\";\nimport { baseFilter } from \"../../base.filter\";\nimport {\n $eq,\n $neq\n} from \"../../operators\";\n\nexport const booleanFilterOperators = z.union([\n $eq,\n $neq,\n]);\n\nexport const booleanFilterValue = z.boolean().nullable();\nexport const booleanFilter = z\n .object({\n type: z.literal(\"boolean\"),\n operator: booleanFilterOperators,\n value: booleanFilterValue,\n })\n .merge(baseFilter);\n\nexport type IBooleanFilter = z.infer<typeof booleanFilter>;\nexport type IBooleanFilterOperator = z.infer<typeof booleanFilterOperators>;\n","import { FieldValueBase } from \"../field-value.base\";\nimport { type IFieldValueVisitor } from \"../field-value.visitor\";\nimport { type IDateFieldValue } from \"./date-field.type\";\n\nexport class DateFieldValue extends FieldValueBase<IDateFieldValue> {\n constructor(value: IDateFieldValue) {\n super({ value });\n }\n\n accept(visitor: IFieldValueVisitor): void {\n visitor.date(this);\n }\n\n static fromNullableString(str: string | null): DateFieldValue {\n if (!str) {\n return new this(null);\n }\n\n return new this(new Date(str));\n }\n}\n","import { z } from \"zod\";\n\nexport const dateFieldValue = z.date().nullable();\n\nexport type IDateFieldValue = z.infer<typeof dateFieldValue>;\n","import { z } from \"zod\";\nimport {\n $between,\n $eq,\n $gt,\n $gte,\n $is_not_today,\n $is_today,\n $is_tomorrow,\n $is_yesterday,\n $lt,\n $lte,\n $neq,\n} from \"../../operators\";\nimport { baseFilter } from \"../../base.filter\";\n\nexport const dateFilterOperators = z.union([\n $eq,\n $neq,\n $gt,\n $gte,\n $lt,\n $lte,\n $between,\n $is_today,\n $is_tomorrow,\n $is_yesterday,\n $is_not_today,\n]);\n\nexport const dateFilterValue = z\n .string()\n .nullable()\n .or(z.tuple([z.string(), z.string()]));\nexport const dateFilter = z\n .object({\n type: z.literal(\"date\"),\n operator: dateFilterOperators,\n value: dateFilterValue,\n })\n .merge(baseFilter);\n\nexport type IDateFilter = z.infer<typeof dateFilter>;\nexport type IDateFilterValue = z.infer<typeof dateFilterValue>;\nexport type IDateFilterOperator = z.infer<typeof dateFilterOperators>;\n","import { FieldValueBase } from \"../field-value.base\";\nimport { type IFieldValueVisitor } from \"../field-value.visitor\";\nimport { type INumberFieldValue } from \"./number-field.type\";\n\nexport class NumberFieldValue extends FieldValueBase<INumberFieldValue> {\n constructor(value: INumberFieldValue) {\n super({ value });\n }\n\n accept(visitor: IFieldValueVisitor): void {\n visitor.number(this);\n }\n}\n","import { z } from \"zod\";\n\nexport const numberFieldValue = z.number().or(z.null());\nexport type INumberFieldValue = z.infer<typeof numberFieldValue>;\n","import { z } from \"zod\";\nimport {\n $eq,\n $gt,\n $gte,\n $is_empty,\n $is_not_empty,\n $lt,\n $lte,\n $neq,\n} from \"../../operators\";\nimport { baseFilter } from \"../../base.filter\";\n\nexport const numberFilterOperators = z.union([\n $eq,\n $neq,\n $gt,\n $gte,\n $lt,\n $lte,\n $is_empty,\n $is_not_empty,\n]);\nexport type INumberFilterOperators = z.infer<typeof numberFilterOperators>;\n\nexport const numberFilterValue = z.number().nullable();\nexport const numberFilter = z\n .object({\n type: z.literal(\"number\"),\n operator: numberFilterOperators,\n value: numberFilterValue,\n })\n .merge(baseFilter);\n\nexport type INumberFilter = z.infer<typeof numberFilter>;\nexport type INumberFilterValue = z.infer<typeof numberFilterValue>;\n","import { FieldValueBase } from \"../field-value.base\";\nimport { type IFieldValueVisitor } from \"../field-value.visitor\";\nimport { type IStringFieldValue } from \"./string-field.type\";\n\nexport class StringFieldValue extends FieldValueBase<IStringFieldValue> {\n constructor(value: IStringFieldValue) {\n super({ value });\n }\n\n accept(visitor: IFieldValueVisitor): void {\n visitor.string(this);\n }\n}\n","import { z } from \"zod\";\n\nexport const stringFieldValue = z.string().nullable();\nexport type IStringFieldValue = z.infer<typeof stringFieldValue>;\n","import { z } from \"zod\";\nimport { baseFilter } from \"../../base.filter\";\nimport {\n $eq,\n $neq,\n $contains,\n $not_contains,\n $starts_with,\n $ends_with,\n $regex,\n $is_empty,\n $is_not_empty,\n} from \"../../operators\";\n\nexport const stringFilterOperators = z.union([\n $eq,\n $neq,\n $contains,\n $not_contains,\n $starts_with,\n $ends_with,\n $regex,\n $is_empty,\n $is_not_empty,\n]);\n\nexport const stringFilterValue = z.string().nullable();\nexport const stringFilter = z\n .object({\n type: z.literal(\"string\"),\n operator: stringFilterOperators,\n value: stringFilterValue,\n })\n .merge(baseFilter);\n\nexport type IStringFilter = z.infer<typeof stringFilter>;\nexport type IStringFilterOperator = z.infer<typeof stringFilterOperators>;\n","import type { Option, Result } from \"oxide.ts\";\nimport { None, Ok, Some } from \"oxide.ts\";\n\nexport interface ISpecVisitor {\n or(left: ISpecification, right: ISpecification): this;\n not(): this;\n}\n\nexport interface ISpecification<\n T = any,\n V extends ISpecVisitor = ISpecVisitor,\n> {\n isSatisfiedBy(t: T): boolean;\n mutate(t: T): Result<T, string>;\n accept(v: V): Result<void, string>;\n}\n\nexport abstract class CompositeSpecification<\n T = any,\n V extends ISpecVisitor = ISpecVisitor,\n> implements ISpecification<T, V>\n{\n abstract isSatisfiedBy(t: T): boolean;\n abstract mutate(t: T): Result<T, string>;\n abstract accept(v: V): Result<void, string>;\n\n public and(s: ISpecification<T, V>): CompositeSpecification<T, V> {\n return new And(this, s);\n }\n\n public or(s: ISpecification<T, V>): CompositeSpecification<T, V> {\n return new Or(this, s);\n }\n\n public not(): Not<T, V> {\n return new Not(this);\n }\n}\n\nclass And<T, V extends ISpecVisitor> extends CompositeSpecification<T, V> {\n constructor(\n private readonly left: ISpecification<T, V>,\n private readonly right: ISpecification<T, V>,\n ) {\n super();\n }\n\n isSatisfiedBy(t: T): boolean {\n return this.left.isSatisfiedBy(t) && this.right.isSatisfiedBy(t);\n }\n\n mutate(t: T): Result<T, string> {\n return this.left.mutate(t).and(this.right.mutate(t));\n }\n\n accept(v: V): Result<void, string> {\n return this.left.accept(v).and(this.right.accept(v));\n }\n}\n\nclass Or<T, V extends ISpecVisitor> extends CompositeSpecification<T, V> {\n constructor(\n private readonly left: ISpecification<T, V>,\n private readonly right: ISpecification<T, V>,\n ) {\n super();\n }\n\n isSatisfiedBy(t: T): boolean {\n return this.left.isSatisfiedBy(t) || this.right.isSatisfiedBy(t);\n }\n\n mutate(t: T): Result<T, string> {\n return this.left.mutate(t).orElse(() => this.right.mutate(t));\n }\n\n accept(v: V): Result<void, string> {\n v.or(this.left, this.right);\n\n return Ok(undefined);\n }\n}\n\nclass Not<T, V extends ISpecVisitor> extends CompositeSpecification<T, V> {\n constructor(public readonly spec: ISpecification<T, V>) {\n super();\n }\n\n isSatisfiedBy(t: T): boolean {\n return !this.spec.isSatisfiedBy(t);\n }\n\n mutate(): Result<T, string> {\n throw new Error(\"[Not.mutate] Method not implemented.\");\n }\n\n accept(v: V): Result<void, string> {\n return this.spec.accept(v.not());\n }\n}\n\nexport const and = <T, V extends ISpecVisitor>(\n ...specs: CompositeSpecification<T, V>[]\n): Option<CompositeSpecification<T, V>> => {\n if (!specs.length) {\n return None;\n }\n\n let s = specs[0];\n for (const spec of specs.slice(1)) {\n s = s.and(spec);\n }\n\n return Some(s);\n};\n\nexport const andOptions = <T, V extends ISpecVisitor>(\n ...specs: Option<CompositeSpecification<T, V>>[]\n): Option<CompositeSpecification<T, V>> => {\n return and(\n ...specs.filter((spec) => spec.isSome()).map((spec) => spec.unwrap()),\n );\n};\n\nexport const or = <T, V extends ISpecVisitor>(\n ...specs: CompositeSpecification<T, V>[]\n): Option<CompositeSpecification<T, V>> => {\n if (!specs.length) {\n return None;\n }\n\n let s = specs[0];\n for (const spec of specs.slice(1)) {\n s = s.or(spec);\n }\n\n return Some(s);\n};\n","import { type IFilterBaseVisitor } from \"./filter-specification-visitor.base\";\nimport { CompositeSpecification } from \"../specification\";\nimport { type Result } from \"oxide.ts\";\n\nexport abstract class BaseFilterSpecification<\n E = unknown,\n V = unknown,\n> extends CompositeSpecification<E, IFilterBaseVisitor> {\n constructor(\n public readonly field: string,\n public readonly value: V,\n public readonly relation?: string,\n ) {\n super();\n }\n\n mutate(t: E): Result<E, string> {\n throw new Error(\"Method not implemented.\");\n }\n}\n","import { Ok, type Result } from \"oxide.ts\";\nimport { BooleanFieldValue } from \"../fields/boolean/boolean-field-value\";\nimport { type IFilterBaseVisitor } from \"../filter-specification-visitor.base\";\nimport { BaseFilterSpecification } from \"../filter-specification.base\";\n\nexport class BooleanEqual extends BaseFilterSpecification<\n unknown,\n BooleanFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof BooleanFieldValue && this.value.equals(value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.booleanEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class BooleanNotEqual extends BaseFilterSpecification<\n unknown,\n BooleanFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof BooleanFieldValue && this.value.equals(value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.booleanNotEqual(this);\n\n return Ok(undefined);\n }\n}\n\n","import {\n isAfter,\n isBefore,\n isEqual,\n isToday,\n isTomorrow,\n isWithinInterval,\n isYesterday,\n} from \"date-fns\";\nimport { Ok, type Result } from \"oxide.ts\";\nimport { DateFieldValue } from \"../fields/date/date-field-value\";\nimport { type IFilterBaseVisitor } from \"../filter-specification-visitor.base\";\nimport { BaseFilterSpecification } from \"../filter-specification.base\";\n\nexport class DateEqual extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof DateFieldValue && value.equals(this.value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateGreaterThan extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n const d1 = value.unpack();\n const d2 = this.value.unpack();\n\n return !!d1 && !!d2 && isAfter(d1, d2);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateGreaterThan(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateLessThan extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const d1 = value.unpack();\n const d2 = this.value.unpack();\n\n return !!d1 && !!d2 && isBefore(d1, d2);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateLessThan(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateGreaterThanOrEqual extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const d1 = value.unpack();\n const d2 = this.value.unpack();\n\n return !!d1 && !!d2 && (isEqual(d1, d2) || isAfter(d1, d2));\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateGreaterThanOrEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateLessThanOrEqual extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const d1 = value.unpack();\n const d2 = this.value.unpack();\n\n return !!d1 && !!d2 && (isEqual(d1, d2) || isBefore(d1, d2));\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateLessThanOrEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateIsToday extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const date = value.unpack();\n\n return !!date && isToday(date);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateIsToday(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateIsTomorrow extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const date = value.unpack();\n\n return !!date && isTomorrow(date);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateIsTomorrow(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateIsYesterday extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const date = value.unpack();\n\n return !!date && isYesterday(date);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateIsYesterday(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateBetween extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n constructor(\n public field: string,\n public dateStart: Date,\n public dateEnd: Date,\n public relation?: string,\n ) {\n super(field, new DateFieldValue(dateStart), relation);\n }\n\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const date = value.unpack();\n\n return (\n !!date &&\n isWithinInterval(date, { start: this.dateStart, end: this.dateEnd })\n );\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateBetween(this);\n\n return Ok(undefined);\n }\n}\n","import { Ok, type Result } from \"oxide.ts\";\nimport { type IFilterBaseVisitor } from \"../filter-specification-visitor.base\";\nimport { BaseFilterSpecification } from \"../filter-specification.base\";\nimport { NumberFieldValue } from \"../fields/number/number-field-value\";\n\nfunction isNil(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n\nfunction isNumber(value: unknown): value is number {\n return typeof value === \"number\";\n}\n\nexport class NumberEqual extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof NumberFieldValue && value.equals(this.value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class NumberGreaterThan extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof NumberFieldValue)) {\n return false;\n }\n const n1 = value.unpack();\n const n2 = this.value.unpack();\n if (n1 === null && isNumber(n2)) {\n return true;\n }\n\n return n1 !== null && n2 !== null && n1 > n2;\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberGreaterThan(this);\n\n return Ok(undefined);\n }\n}\n\nexport class NumberLessThan extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof NumberFieldValue)) {\n return false;\n }\n const n1 = value.unpack();\n const n2 = this.value.unpack();\n\n return n1 !== null && n2 !== null && n1 < n2;\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberLessThan(this);\n\n return Ok(undefined);\n }\n}\n\nexport class NumberGreaterThanOrEqual extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof NumberFieldValue)) {\n return false;\n }\n const n1 = value.unpack();\n const n2 = this.value.unpack();\n if (n1 === null && isNumber(n2)) {\n return true;\n }\n\n return n1 !== null && n2 !== null && n1 >= n2;\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberGreaterThanOrEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class NumberLessThanOrEqual extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof NumberFieldValue)) {\n return false;\n }\n const n1 = value.unpack();\n const n2 = this.value.unpack();\n\n return n1 !== null && n2 !== null && n1 <= n2;\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberLessThanOrEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class NumberEmpty extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n constructor(public readonly field: string) {\n super(field, new NumberFieldValue(null));\n }\n\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof NumberFieldValue && isNil(value.unpack());\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberEmpty(this);\n\n return Ok(undefined);\n }\n}\n","import { Ok, type Result } from \"oxide.ts\";\nimport { StringFieldValue } from \"../fields/string/string-field-value\";\nimport { type IFilterBaseVisitor } from \"../filter-specification-visitor.base\";\nimport { BaseFilterSpecification } from \"../filter-specification.base\";\n\nexport class StringEqual extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof StringFieldValue && this.value.equals(value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringNotEqual extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof StringFieldValue && this.value.equals(value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringNotEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringContain extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof StringFieldValue)) {\n return false;\n }\n\n const s1 = value.unpack();\n const s2 = this.value.unpack();\n\n return !!s1 && !!s2 && s1.includes(s2);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringContain(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringStartsWith extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof StringFieldValue)) {\n return false;\n }\n\n const s1 = value.unpack();\n const s2 = this.value.unpack();\n\n return !!s1 && !!s2 && s1.startsWith(s2);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringStartsWith(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringEndsWith extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof StringFieldValue)) {\n return false;\n }\n\n const s1 = value.unpack();\n const s2 = this.value.unpack();\n\n return !!s1 && !!s2 && s1.endsWith(s2);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringEndsWith(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringRegex extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof StringFieldValue)) {\n return false;\n }\n\n const s1 = value.unpack();\n const s2 = this.value.unpack();\n\n return !!s1 && !!s2 && new RegExp(s2).test(s1);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringRegex(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringEmpty extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n constructor(field: string) {\n super(field, new StringFieldValue(null));\n }\n\n isSatisfiedBy(value: unknown): boolean {\n if (value instanceof StringFieldValue) {\n return !value.unpack();\n }\n\n return !value;\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringEmpty(this);\n\n return Ok(undefined);\n }\n}\n","import { None, Some, type Option } from \"oxide.ts\";\nimport { match } from \"ts-pattern\";\nimport { z } from \"zod\";\nimport { conjunctions, type IConjunction } from \"./conjunction\";\nimport { BooleanFieldValue, booleanFilter, IBooleanFilter } from \"./fields\";\nimport { DateFieldValue } from \"./fields/date/date-field-value\";\nimport { dateFilter, type IDateFilter } from \"./fields/date/date.filter\";\nimport { NumberFieldValue } from \"./fields/number/number-field-value\";\nimport {\n numberFilter,\n numberFilterOperators,\n type INumberFilter,\n} from \"./fields/number/number.filter\";\nimport { StringFieldValue } from \"./fields/string/string-field-value\";\nimport {\n stringFilter,\n stringFilterOperators,\n type IStringFilter,\n} from \"./fields/string/string.filter\";\nimport { type BaseFilterSpecification } from \"./filter-specification.base\";\nimport { BooleanEqual, BooleanNotEqual } from \"./specifications/boolean.specification\";\nimport { DateBetween, DateEqual } from \"./specifications/date.specification\";\nimport {\n NumberEmpty,\n NumberEqual,\n NumberGreaterThan,\n NumberGreaterThanOrEqual,\n NumberLessThan,\n NumberLessThanOrEqual,\n} from \"./specifications/number.specification\";\nimport {\n StringContain,\n StringEmpty,\n StringEndsWith,\n StringEqual,\n StringNotEqual,\n StringRegex,\n StringStartsWith,\n} from \"./specifications/string.specification\";\n\nexport const filterRoorFilter = <T extends z.ZodType>(filters: [T, ...T[]]) => {\n const filterTuple: [T, ...T[]] = [filters[0], ...filters.slice(1)];\n\n const filter = z.union(filterTuple as [T, T, ...T[]]);\n\n const group: z.ZodType<{\n conjunction?: IConjunction;\n children?: (z.infer<typeof group> | z.infer<typeof filter>)[];\n }> = z.lazy(() =>\n z.object({\n conjunction: conjunctions,\n children: z.union([group, filter]).array().nonempty().optional(),\n })\n );\n\n const filterOrGroup = filter.or(group);\n type IFilterOrGroup = z.infer<typeof filterOrGroup>;\n const filterOrGroupList = filterOrGroup.array();\n\n return group.or(filterOrGroupList);\n};\n\nconst filter = z.discriminatedUnion(\"type\", [\n numberFilter,\n stringFilter,\n dateFilter,\n booleanFilter,\n]);\n\nexport type IFilter = z.infer<typeof filter>;\nexport type IFilters = IFilter[];\n\nexport interface IGroup<Filter extends IFilter = IFilter> {\n conjunction?: IConjunction;\n children?: IFilterOrGroupList<Filter>;\n}\n\nconst group: z.ZodType<IGroup> = z.lazy(() =>\n z.object({\n conjunction: conjunctions,\n children: z.union([group, filter]).array().nonempty().optional(),\n })\n);\n\nconst filterOrGroup = filter.or(group);\nexport type IFilterOrGroup<Filter extends IFilter = IFilter> =\n | Filter\n | IGroup<Filter>;\n\nexport const filterOrGroupList = filterOrGroup.array();\nexport type IFilterOrGroupList<Filter extends IFilter = IFilter> =\n IFilterOrGroup<Filter>[];\nexport const rootFilter = filterOrGroup.or(filterOrGroupList);\nexport type IRootFilter<Filter extends IFilter = IFilter> =\n | IFilterOrGroup<Filter>\n | IFilterOrGroupList<Filter>;\n\nexport const isGroup = (\n filterOrGroup: IFilterOrGroup\n): filterOrGroup is IGroup => {\n return Reflect.has(filterOrGroup, \"conjunction\");\n};\n\nexport const isFilter = (\n filterOrGroup: IFilterOrGroup\n): filterOrGroup is IFilter => {\n return (\n Reflect.has(filterOrGroup, \"type\") && Reflect.has(filterOrGroup, \"operator\")\n );\n};\n\nexport const operators = z.union([\n numberFilterOperators,\n stringFilterOperators,\n]);\nexport type IOperator = z.infer<typeof operators>;\n\ntype IFieldType = \"number\";\n\nexport const operatorsMap: Record<IFieldType, IOperator[]> = {\n number: numberFilterOperators.options.map((v) => v.value),\n};\n\nconst convertStringFilter = (\n filter: IStringFilter\n): Option<BaseFilterSpecification> => {\n if (filter.value === undefined) {\n return None;\n }\n\n switch (filter.operator) {\n case \"$eq\": {\n return Some(\n new StringEqual(\n filter.field,\n new StringFieldValue(filter.value),\n filter.relation\n )\n );\n }\n case \"$neq\": {\n return Some(\n new StringNotEqual(\n filter.field,\n new StringFieldValue(filter.value),\n filter.relation\n )\n );\n }\n case \"$contains\": {\n return Some(\n new StringContain(filter.field, new StringFieldValue(filter.value))\n );\n }\n case \"$not_contains\": {\n return Some(\n new StringContain(\n filter.field,\n new StringFieldValue(filter.value)\n ).not() as unknown as BaseFilterSpecification\n );\n }\n case \"$starts_with\": {\n return Some(\n new StringStartsWith(filter.field, new StringFieldValue(filter.value))\n );\n }\n case \"$ends_with\": {\n return Some(\n new StringEndsWith(filter.field, new StringFieldValue(filter.value))\n );\n }\n case \"$regex\": {\n return Some(\n new StringRegex(filter.field, new StringFieldValue(filter.value))\n );\n }\n case \"$is_empty\": {\n return Some(new StringEmpty(filter.field));\n }\n case \"$is_not_empty\": {\n return Some(\n new StringEmpty(\n filter.field\n ).not() as unknown as BaseFilterSpecification\n );\n }\n\n default:\n return None;\n }\n};\n\nconst convertNumberFilter = (\n filter: INumberFilter\n): Option<BaseFilterSpecification> => {\n if (filter === undefined) {\n return None;\n }\n\n switch (filter.operator) {\n case \"$eq\":\n return Some(\n new NumberEqual(filter.field, new NumberFieldValue(filter.value))\n );\n case \"$neq\": {\n // @ts-ignore\n return Some(\n new NumberEqual(filter.field, new NumberFieldValue(filter.value)).not()\n );\n }\n case \"$gt\": {\n return Some(\n new NumberGreaterThan(filter.field, new NumberFieldValue(filter.value))\n );\n }\n case \"$gte\": {\n return Some(\n new NumberGreaterThanOrEqual(\n filter.field,\n new NumberFieldValue(filter.value)\n )\n );\n }\n case \"$lt\": {\n return Some(\n new NumberLessThan(filter.field, new NumberFieldValue(filter.value))\n );\n }\n case \"$lte\": {\n return Some(\n new NumberLessThanOrEqual(\n filter.field,\n new NumberFieldValue(filter.value)\n )\n );\n }\n case \"$is_empty\": {\n return Some(new NumberEmpty(filter.field));\n }\n case \"$is_not_empty\": {\n // @ts-ignore\n return Some(new NumberEmpty(filter.field).not());\n }\n default:\n return None;\n }\n};\n\nconst convertBooleanFilter = (\n filter: IBooleanFilter\n): Option<BaseFilterSpecification> => {\n if (filter === undefined) {\n return None;\n }\n\n switch (filter.operator) {\n case '$eq': {\n return Some(new BooleanEqual(filter.field, new BooleanFieldValue(filter.value)));\n }\n case '$neq': {\n return Some(new BooleanNotEqual(filter.field, new BooleanFieldValue(filter.value)));\n }\n }\n\n return Some(new BooleanEqual(filter.field, new BooleanFieldValue(filter.value)));\n};\n\nconst convertDateFilter = (\n filter: IDateFilter\n): Option<BaseFilterSpecification> => {\n if (filter === undefined) {\n return None;\n }\n\n switch (filter.operator) {\n case \"$eq\": {\n return Some(\n new DateEqual(\n filter.field,\n DateFieldValue.fromNullableString(filter.value as string),\n filter.relation\n )\n );\n }\n case \"$between\": {\n return Some(\n new DateBetween(\n filter.field,\n new Date((filter.value as [string, string])[0]),\n new Date((filter.value as [string, string])[1])\n )\n );\n }\n }\n\n return None;\n};\n\nconst convertFilter = (filter: IFilter): Option<BaseFilterSpecification> => {\n return match(filter)\n .returnType<Option<BaseFilterSpecification>>()\n .with({ type: \"number\" }, (f) => convertNumberFilter(f))\n .with({ type: \"string\" }, (f) => convertStringFilter(f))\n .with({ type: \"date\" }, (f) => convertDateFilter(f))\n .with({ type: \"boolean\" }, (f) => convertBooleanFilter(f))\n .otherwise(() => None);\n};\n\nconst convertFilterOrGroup = (\n filterOrGroup: IFilterOrGroup\n): Option<BaseFilterSpecification> => {\n if (isGroup(filterOrGroup)) {\n return convertFilterOrGroupList(\n filterOrGroup.children,\n filterOrGroup.conjunction\n );\n } else if (isFilter(filterOrGroup)) {\n return convertFilter(filterOrGroup);\n }\n\n return None;\n};\n\nconst convertFilterOrGroupList = (\n filterOrGroupList: IFilterOrGroupList = [],\n conjunction: IConjunction = \"$and\"\n): Option<BaseFilterSpecification> => {\n let spec: Option<BaseFilterSpecification> = None;\n for (const filter of filterOrGroupList) {\n if (spec.isNone()) {\n spec = convertFilterOrGroup(filter);\n if (conjunction === \"$not\") {\n // @ts-ignore\n return spec.map((s) => s.not());\n }\n } else {\n if (isFilter(filter)) {\n // @ts-ignore\n spec = spec.map((left) => {\n const right = convertFilterOrGroup(filter);\n if (right.isSome()) {\n if (conjunction === \"$and\") {\n return left.and(right.unwrap());\n } else if (conjunction === \"$or\") {\n return left.or(right.unwrap());\n }\n\n return left.and(right.unwrap().not());\n }\n\n return left;\n });\n } else if (isGroup(filter)) {\n spec = convertFilterOrGroupList(filter.children, filter.conjunction);\n }\n }\n }\n\n return spec;\n};\n\nexport const convertFilterSpec = (\n filter: IRootFilter\n): Option<BaseFilterSpecification> => {\n if (Array.isArray(filter)) {\n return convertFilterOrGroupList(filter);\n }\n\n return convertFilterOrGroup(filter);\n};\n\nfunction isEmptyNative(value: unknown): boolean {\n if (value == null) return true;\n if (Array.isArray(value)) return value.length === 0;\n if (typeof value === \"object\") {\n for (const _ in value as object) {\n return false;\n }\n return true;\n }\n return false;\n}\n\nexport const isEmptyFilter = (filter: IRootFilter) => isEmptyNative(filter);\n","import { type Option } from \"oxide.ts\";\nimport { ValueObject } from \"../value-objects/value-object\";\nimport {\n type IFilter,\n type IRootFilter,\n convertFilterSpec,\n isGroup,\n} from \"./filter\";\nimport { type BaseFilterSpecification } from \"./filter-specification.base\";\n\nexport class RootFilter<T extends IFilter = IFilter> extends ValueObject<\n IRootFilter<T>\n> {\n get value() {\n return this.props;\n }\n\n get group() {\n if (Array.isArray(this.value)) {\n return { conjunction: \"$and\", children: this.value };\n }\n if (isGroup(this.value)) {\n return this.value;\n }\n\n return { conjunction: \"$and\", children: [this.value] };\n }\n\n getSpec(): Option<BaseFilterSpecification> {\n return convertFilterSpec(this.value);\n }\n\n public toJSON() {\n return this.props;\n }\n}\n","import { z } from \"zod\";\n\nexport const paginationSchema = z.object({\n limit: z.coerce.number().positive().int().default(10).optional(),\n offset: z.coerce.number().nonnegative().int().default(0).optional(),\n});\n\nexport type IPagination = z.infer<typeof paginationSchema>;\n\nexport const paginatedResponseSchema = paginationSchema.extend({\n total: z.number().nonnegative().int(),\n});\n","export abstract class Query {}\n","import { z } from \"zod\";\n\n// TODO: base sort with possibility limit sorting fields for concrete entity\nexport const sortingSchema = z.record(z.string(), z.enum([\"ASC\", \"DESC\"]));\n\nexport type ISorting = z.infer<typeof sortingSchema>;\n","import { ValueObject } from \"./value-object.js\";\n\nexport class BoolVO extends ValueObject<boolean> {\n constructor(value: boolean) {\n super({ value });\n }\n\n public get value(): boolean {\n return this.props.value;\n }\n\n public static fromBoolean(value: boolean) {\n return new BoolVO(value);\n }\n\n public static True(): BoolVO {\n return new BoolVO(true);\n }\n\n public static False(): BoolVO {\n return new BoolVO(false);\n }\n}\n","import { ValueObject } from \"./value-object.js\";\n\nexport class DateVO extends ValueObject<Date> {\n constructor(value: Date | string | number) {\n const date = new Date(value);\n super({ value: date });\n }\n\n public get value(): Date {\n return this.props.value;\n }\n\n public static fromDate(value: Date) {\n return new DateVO(value);\n }\n\n public static now(): DateVO {\n return new DateVO(Date.now());\n }\n}\n","import { ValueObject, ValueObjectProps } from \"./value-object\";\n\nexport abstract class ID<T = number> extends ValueObject<T> {\n constructor(value: T) {\n super({ value } as ValueObjectProps<T>);\n }\n\n public get value(): T {\n return this.unpack();\n }\n}\n","import { customAlphabet } from \"nanoid\";\nimport { ID } from \"./id.vo.js\";\n\nexport abstract class NanoID extends ID {\n private static ALPHABETS = \"0123456789abcdefghijklmnopqrstuvwxyz\";\n\n static createId(prefix = \"\", size = 5) {\n const id = customAlphabet(NanoID.ALPHABETS, size)();\n\n return prefix + id;\n }\n\n public get value(): number {\n return this.props.value;\n }\n}\n","import { ValueObject } from \"./value-object.js\";\n\nexport class IntegerVO extends ValueObject<number> {\n constructor(value: number) {\n super({ value });\n }\n\n public get value(): number {\n return this.props.value;\n }\n\n public static fromNumber(value: number) {\n return new IntegerVO(value);\n }\n}\n","import { ValueObject } from \"./value-object.js\";\n\nexport class StringVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n public get value(): string {\n return this.props.value;\n }\n\n public static fromString(value: string) {\n return new StringVO(value);\n }\n\n public static empty(): StringVO {\n return new StringVO(\"\");\n }\n}\n","import { ID } from \"./id.vo.js\";\nimport { v4 } from \"uuid\";\n\nexport abstract class UUID extends ID {\n static createId() {\n return v4();\n }\n\n public get value(): number {\n return this.props.value;\n }\n}\n","import z from \"zod\";\nimport { ValueObject } from \"./value-object.js\";\n\nconst emailSchema = z.email();\n\nexport class EmailVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n static create(value: string) {\n return new this(emailSchema.parse(value));\n }\n\n public get value(): string {\n return this.props.value;\n }\n}\n","import z from \"zod\";\nimport { ValueObject } from \"./value-object.js\";\n\nconst colorSchema = z.hex();\n\nexport class ColorVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n static create(value: string) {\n return new this(colorSchema.parse(value));\n }\n\n public get value(): string {\n return this.props.value;\n }\n}\n"],"mappings":";;;;;;;;;AAEA,IAAsB,gBAAtB,MAAyD;CACvD,gBAAqB,EAAE;CAEvB,IAAI,eAAe;AACjB,SAAO,MAAKA;;CAGd,IAAI,aAAa,QAAa;AAC5B,QAAKA,eAAgB;;CAGvB,eAAe,OAAU;AACvB,QAAKA,aAAc,KAAK,MAAM;;CAGhC,aAAa,QAAa;AACxB,QAAKA,eAAgB,MAAKA,aAAc,QACrC,UAAU,CAAC,OAAO,SAAS,MAAM,CACnC;;;;;;ACfL,IAAsB,UAAtB,MAA8B;CAC5B,AAAgB;CAEhB,AAAgB;CAEhB,AAAgB;CAEhB,YAAY,OAA8B;AACxC,OAAK,gBAAgB,MAAM,iBAAiB,IAAI;AAChD,OAAK,YAAY,MAAM,aAAa,IAAI;;;;;;ACX5C,MAAa,eAKX,MACA,SACA,SAEA,EAAE,OAAO;CACP,IAAI,EAAE,QAAQ,CAAC,MAAM;CACrB,MAAM,EAAE,QAAQ,KAAK;CACrB,YAAY,EAAE,QAAQ,CAAC,UAAU;CACxB;CACT,WAAW,EAAE,OAAO,MAAM;CACpB;CACP,CAAC;AAoBJ,IAAsB,YAAtB,MAKA;CAEE,YACE,AAAgBC,SAChB,AAAgBC,YAChB,AAAgBC,MAChB,AAAgB,KAAK,IAAI,EACzB,AAAgB,4BAAY,IAAI,MAAM,EACtC;EALgB;EACA;EACA;EACA;EACA;;CAGlB,SAAsC;AACpC,SAAO;GACL,IAAI,KAAK;GACT,MAAM,KAAK;GACX,YAAY,KAAK;GACjB,WAAW,KAAK,UAAU,aAAa;GACvC,SAAS,KAAK;GACd,MAAM,KAAK;GACZ;;;;;;ACrDL,IAAsB,gBAAtB,cAA4C,MAAM;CAGhD,AAAgB;;;;;;;;CAShB,YACE,AAASC,SACT,eACA,AAASC,OACT,AAASC,UACT;AACA,QAAM,QAAQ;EALL;EAEA;EACA;AAGT,QAAM,kBAAkB,MAAM,KAAK,YAAY;AAC/C,OAAK,gBAAgB;;CAGvB,SAA8B;AAC5B,SAAO;GACL,SAAS,KAAK;GACd,MAAM,KAAK;GACX,OAAO,KAAK;GACZ,eAAe,KAAK;GACpB,OAAO,KAAK,UAAU,KAAK,MAAM;GACjC,UAAU,KAAK;GAChB;;;;;;ACtCL,MAAa,aAAa,EAAE,OAAO;CACjC,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE;CACxB,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACvC,CAAC;;;;ACHF,MAAM,OAAO,EAAE,QAAQ,OAAO;AAC9B,MAAM,MAAM,EAAE,QAAQ,MAAM;AAC5B,MAAM,OAAO,EAAE,QAAQ,OAAO;AAC9B,MAAa,eAAe,EAAE,MAAM;CAAC;CAAM;CAAK;CAAK,CAAC;;;;ACHtD,SAAgB,qBAAqB,OAAiB;CACpD,MAAM,YAAY,EAAE,GAAG,OAAO;AAG9B,MAAK,MAAM,QAAQ,WAAW;AAC5B,MAAI,MAAM,QAAQ,UAAU,MAAM,CAChC,WAAU,QAAS,UAAU,MAAyB,KAAK,SAAS;AAClE,UAAO,qBAAqB,KAAK;IACjC;AAEJ,YAAU,QAAQ,qBAAqB,UAAU,MAAM;;AAGzD,QAAO;;AAGT,SAAS,qBAAqB,MAAgB;AAC5C,KAAI,YAAY,cAAc,KAAK,CACjC,QAAO,KAAK,QAAQ;AAGtB,QAAO;;;;;ACZT,IAAsB,cAAtB,MAAsB,YAAqB;CACzC,YAAY,AAAmBC,OAA4B;EAA5B;;CAE/B,AAAO,OAAO,IAA8B;AAC1C,MAAI,OAAO,QAAQ,OAAO,OACxB,QAAO;AAGT,SAAO,OAAO,IAAI,KAAK;;CAGzB,OAAO,cAAc,KAA2C;AAC9D,SAAO,eAAe;;CAGxB,AAAO,SAAY;AACjB,MAAI,KAAK,kBAAkB,KAAK,MAAM,CACpC,QAAO,KAAK,MAAM;EAGpB,MAAM,YAAY,qBAAqB,KAAK,MAAM;AAElD,SAAO,OAAO,OAAO,UAAU;;CAGjC,AAAQ,kBACN,KACiD;AACjD,MAAI,OAAO,UAAU,eAAe,KAAK,KAAK,QAAQ,CACpD,QAAO;AAGT,SAAO;;;;;;ACvCX,IAAsB,iBAAtB,cAEU,YAAe;;;;ACFzB,IAAa,oBAAb,cAAuC,eAAmC;CACxE,YAAY,OAA2B;AACrC,QAAM,EAAE,OAAO,CAAC;;CAGlB,OAAO,SAAmC;AACxC,UAAQ,QAAQ,KAAK;;;;;;ACRzB,MAAa,oBAAoB,EAAE,SAAS,CAAC,UAAU;;;;ACAvD,MAAa,MAAM,EAAE,QAAQ,MAAM;AACnC,MAAa,OAAO,EAAE,QAAQ,OAAO;AACrC,MAAa,YAAY,EAAE,QAAQ,YAAY;AAC/C,MAAa,gBAAgB,EAAE,QAAQ,gBAAgB;AACvD,MAAa,eAAe,EAAE,QAAQ,eAAe;AACrD,MAAa,aAAa,EAAE,QAAQ,aAAa;AACjD,MAAa,SAAS,EAAE,QAAQ,SAAS;AAEzC,MAAa,WAAW,EAAE,QAAQ,WAAW;AAC7C,MAAa,YAAY,EAAE,QAAQ,YAAY;AAE/C,MAAa,MAAM,EAAE,QAAQ,MAAM;AACnC,MAAa,OAAO,EAAE,QAAQ,OAAO;AAErC,MAAa,MAAM,EAAE,QAAQ,MAAM;AACnC,MAAa,MAAM,EAAE,QAAQ,MAAM;AACnC,MAAa,OAAO,EAAE,QAAQ,OAAO;AACrC,MAAa,OAAO,EAAE,QAAQ,OAAO;AAErC,MAAa,YAAY,EAAE,QAAQ,YAAY;AAC/C,MAAa,aAAa,EAAE,QAAQ,aAAa;AACjD,MAAa,YAAY,EAAE,QAAQ,YAAY;AAC/C,MAAa,YAAY,EAAE,QAAQ,YAAY;AAC/C,MAAa,aAAa,EAAE,QAAQ,aAAa;AACjD,MAAa,aAAa,EAAE,QAAQ,aAAa;AAEjD,MAAa,UAAU,EAAE,QAAQ,UAAU;AAC3C,MAAa,WAAW,EAAE,QAAQ,WAAW;AAC7C,MAAa,UAAU,EAAE,QAAQ,UAAU;AAC3C,MAAa,UAAU,EAAE,QAAQ,UAAU;AAC3C,MAAa,WAAW,EAAE,QAAQ,WAAW;AAC7C,MAAa,WAAW,EAAE,QAAQ,WAAW;AAE7C,MAAa,YAAY,EAAE,QAAQ,YAAY;AAC/C,MAAa,gBAAgB,EAAE,QAAQ,gBAAgB;AAEvD,MAAa,YAAY,EAAE,QAAQ,YAAY;AAC/C,MAAa,gBAAgB,EAAE,QAAQ,gBAAgB;AACvD,MAAa,eAAe,EAAE,QAAQ,eAAe;AACrD,MAAa,gBAAgB,EAAE,QAAQ,gBAAgB;AACvD,MAAa,WAAW,EAAE,QAAQ,WAAW;AAE7C,MAAa,iBAAiB,EAAE,QAAQ,iBAAiB;AACzD,MAAa,sBAAsB,EAAE,QAAQ,sBAAsB;AAEnE,MAAa,WAAW,EAAE,QAAQ,WAAW;AAE7C,MAAa,SAAS,EAAE,QAAQ,SAAS;AACzC,MAAa,aAAa,EAAE,QAAQ,aAAa;AAEjD,MAAa,wBAAwB,EAAE,MAAM;CAC3C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AACF,MAAa,0BAA0B,UACrC,sBAAsB,UAAU,MAAM,CAAC;;;;ACzDzC,MAAa,yBAAyB,EAAE,MAAM,CAC5C,KACA,KACD,CAAC;AAEF,MAAa,qBAAqB,EAAE,SAAS,CAAC,UAAU;AACxD,MAAa,gBAAgB,EAC1B,OAAO;CACN,MAAM,EAAE,QAAQ,UAAU;CAC1B,UAAU;CACV,OAAO;CACR,CAAC,CACD,MAAM,WAAW;;;;ACfpB,IAAa,iBAAb,cAAoC,eAAgC;CAClE,YAAY,OAAwB;AAClC,QAAM,EAAE,OAAO,CAAC;;CAGlB,OAAO,SAAmC;AACxC,UAAQ,KAAK,KAAK;;CAGpB,OAAO,mBAAmB,KAAoC;AAC5D,MAAI,CAAC,IACH,QAAO,IAAI,KAAK,KAAK;AAGvB,SAAO,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC;;;;;;AChBlC,MAAa,iBAAiB,EAAE,MAAM,CAAC,UAAU;;;;ACcjD,MAAa,sBAAsB,EAAE,MAAM;CACzC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,MAAa,kBAAkB,EAC5B,QAAQ,CACR,UAAU,CACV,GAAG,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxC,MAAa,aAAa,EACvB,OAAO;CACN,MAAM,EAAE,QAAQ,OAAO;CACvB,UAAU;CACV,OAAO;CACR,CAAC,CACD,MAAM,WAAW;;;;ACpCpB,IAAa,mBAAb,cAAsC,eAAkC;CACtE,YAAY,OAA0B;AACpC,QAAM,EAAE,OAAO,CAAC;;CAGlB,OAAO,SAAmC;AACxC,UAAQ,OAAO,KAAK;;;;;;ACRxB,MAAa,mBAAmB,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;;;;ACWvD,MAAa,wBAAwB,EAAE,MAAM;CAC3C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAGF,MAAa,oBAAoB,EAAE,QAAQ,CAAC,UAAU;AACtD,MAAa,eAAe,EACzB,OAAO;CACN,MAAM,EAAE,QAAQ,SAAS;CACzB,UAAU;CACV,OAAO;CACR,CAAC,CACD,MAAM,WAAW;;;;AC5BpB,IAAa,mBAAb,cAAsC,eAAkC;CACtE,YAAY,OAA0B;AACpC,QAAM,EAAE,OAAO,CAAC;;CAGlB,OAAO,SAAmC;AACxC,UAAQ,OAAO,KAAK;;;;;;ACRxB,MAAa,mBAAmB,EAAE,QAAQ,CAAC,UAAU;;;;ACYrD,MAAa,wBAAwB,EAAE,MAAM;CAC3C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,MAAa,oBAAoB,EAAE,QAAQ,CAAC,UAAU;AACtD,MAAa,eAAe,EACzB,OAAO;CACN,MAAM,EAAE,QAAQ,SAAS;CACzB,UAAU;CACV,OAAO;CACR,CAAC,CACD,MAAM,WAAW;;;;AChBpB,IAAsB,yBAAtB,MAIA;CAKE,AAAO,IAAI,GAAuD;AAChE,SAAO,IAAI,IAAI,MAAM,EAAE;;CAGzB,AAAO,GAAG,GAAuD;AAC/D,SAAO,IAAI,GAAG,MAAM,EAAE;;CAGxB,AAAO,MAAiB;AACtB,SAAO,IAAI,IAAI,KAAK;;;AAIxB,IAAM,MAAN,cAA6C,uBAA6B;CACxE,YACE,AAAiBC,MACjB,AAAiBC,OACjB;AACA,SAAO;EAHU;EACA;;CAKnB,cAAc,GAAe;AAC3B,SAAO,KAAK,KAAK,cAAc,EAAE,IAAI,KAAK,MAAM,cAAc,EAAE;;CAGlE,OAAO,GAAyB;AAC9B,SAAO,KAAK,KAAK,OAAO,EAAE,CAAC,IAAI,KAAK,MAAM,OAAO,EAAE,CAAC;;CAGtD,OAAO,GAA4B;AACjC,SAAO,KAAK,KAAK,OAAO,EAAE,CAAC,IAAI,KAAK,MAAM,OAAO,EAAE,CAAC;;;AAIxD,IAAM,KAAN,cAA4C,uBAA6B;CACvE,YACE,AAAiBD,MACjB,AAAiBC,OACjB;AACA,SAAO;EAHU;EACA;;CAKnB,cAAc,GAAe;AAC3B,SAAO,KAAK,KAAK,cAAc,EAAE,IAAI,KAAK,MAAM,cAAc,EAAE;;CAGlE,OAAO,GAAyB;AAC9B,SAAO,KAAK,KAAK,OAAO,EAAE,CAAC,aAAa,KAAK,MAAM,OAAO,EAAE,CAAC;;CAG/D,OAAO,GAA4B;AACjC,IAAE,GAAG,KAAK,MAAM,KAAK,MAAM;AAE3B,SAAO,GAAG,OAAU;;;AAIxB,IAAM,MAAN,cAA6C,uBAA6B;CACxE,YAAY,AAAgBC,MAA4B;AACtD,SAAO;EADmB;;CAI5B,cAAc,GAAe;AAC3B,SAAO,CAAC,KAAK,KAAK,cAAc,EAAE;;CAGpC,SAA4B;AAC1B,QAAM,IAAI,MAAM,uCAAuC;;CAGzD,OAAO,GAA4B;AACjC,SAAO,KAAK,KAAK,OAAO,EAAE,KAAK,CAAC;;;AAIpC,MAAa,OACX,GAAG,UACsC;AACzC,KAAI,CAAC,MAAM,OACT,QAAO;CAGT,IAAI,IAAI,MAAM;AACd,MAAK,MAAM,QAAQ,MAAM,MAAM,EAAE,CAC/B,KAAI,EAAE,IAAI,KAAK;AAGjB,QAAO,KAAK,EAAE;;AAGhB,MAAa,cACX,GAAG,UACsC;AACzC,QAAO,IACL,GAAG,MAAM,QAAQ,SAAS,KAAK,QAAQ,CAAC,CAAC,KAAK,SAAS,KAAK,QAAQ,CAAC,CACtE;;AAGH,MAAa,MACX,GAAG,UACsC;AACzC,KAAI,CAAC,MAAM,OACT,QAAO;CAGT,IAAI,IAAI,MAAM;AACd,MAAK,MAAM,QAAQ,MAAM,MAAM,EAAE,CAC/B,KAAI,EAAE,GAAG,KAAK;AAGhB,QAAO,KAAK,EAAE;;;;;ACpIhB,IAAsB,0BAAtB,cAGU,uBAA8C;CACtD,YACE,AAAgBC,OAChB,AAAgBC,OAChB,AAAgBC,UAChB;AACA,SAAO;EAJS;EACA;EACA;;CAKlB,OAAO,GAAyB;AAC9B,QAAM,IAAI,MAAM,0BAA0B;;;;;;ACZ9C,IAAa,eAAb,cAAkC,wBAGhC;CACA,cAAc,OAAyB;AACrC,SAAO,iBAAiB,qBAAqB,KAAK,MAAM,OAAO,MAAM;;CAGvE,OAAO,GAA6C;AAClD,IAAE,aAAa,KAAK;AAEpB,SAAO,GAAG,OAAU;;;AAIxB,IAAa,kBAAb,cAAqC,wBAGnC;CACA,cAAc,OAAyB;AACrC,SAAO,iBAAiB,qBAAqB,KAAK,MAAM,OAAO,MAAM;;CAGvE,OAAO,GAA6C;AAClD,IAAE,gBAAgB,KAAK;AAEvB,SAAO,GAAG,OAAU;;;;;;ACjBxB,IAAa,YAAb,cAA+B,wBAG7B;CACA,cAAc,OAAyB;AACrC,SAAO,iBAAiB,kBAAkB,MAAM,OAAO,KAAK,MAAM;;CAGpE,OAAO,GAA6C;AAClD,IAAE,UAAU,KAAK;AAEjB,SAAO,GAAG,OAAU;;;AAIxB,IAAa,kBAAb,cAAqC,wBAGnC;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,gBACrB,QAAO;EAET,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAE9B,SAAO,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,QAAQ,IAAI,GAAG;;CAGxC,OAAO,GAA6C;AAClD,IAAE,gBAAgB,KAAK;AAEvB,SAAO,GAAG,OAAU;;;AAIxB,IAAa,eAAb,cAAkC,wBAGhC;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,gBACrB,QAAO;EAGT,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAE9B,SAAO,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,SAAS,IAAI,GAAG;;CAGzC,OAAO,GAA6C;AAClD,IAAE,aAAa,KAAK;AAEpB,SAAO,GAAG,OAAU;;;AAIxB,IAAa,yBAAb,cAA4C,wBAG1C;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,gBACrB,QAAO;EAGT,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAE9B,SAAO,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,QAAQ,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG;;CAG5D,OAAO,GAA6C;AAClD,IAAE,uBAAuB,KAAK;AAE9B,SAAO,GAAG,OAAU;;;AAIxB,IAAa,sBAAb,cAAyC,wBAGvC;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,gBACrB,QAAO;EAGT,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAE9B,SAAO,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,QAAQ,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG;;CAG7D,OAAO,GAA6C;AAClD,IAAE,oBAAoB,KAAK;AAE3B,SAAO,GAAG,OAAU;;;AAIxB,IAAa,cAAb,cAAiC,wBAG/B;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,gBACrB,QAAO;EAGT,MAAM,OAAO,MAAM,QAAQ;AAE3B,SAAO,CAAC,CAAC,QAAQ,QAAQ,KAAK;;CAGhC,OAAO,GAA6C;AAClD,IAAE,YAAY,KAAK;AAEnB,SAAO,GAAG,OAAU;;;AAIxB,IAAa,iBAAb,cAAoC,wBAGlC;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,gBACrB,QAAO;EAGT,MAAM,OAAO,MAAM,QAAQ;AAE3B,SAAO,CAAC,CAAC,QAAQ,WAAW,KAAK;;CAGnC,OAAO,GAA6C;AAClD,IAAE,eAAe,KAAK;AAEtB,SAAO,GAAG,OAAU;;;AAIxB,IAAa,kBAAb,cAAqC,wBAGnC;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,gBACrB,QAAO;EAGT,MAAM,OAAO,MAAM,QAAQ;AAE3B,SAAO,CAAC,CAAC,QAAQ,YAAY,KAAK;;CAGpC,OAAO,GAA6C;AAClD,IAAE,gBAAgB,KAAK;AAEvB,SAAO,GAAG,OAAU;;;AAIxB,IAAa,cAAb,cAAiC,wBAG/B;CACA,YACE,AAAOC,OACP,AAAOC,WACP,AAAOC,SACP,AAAOC,UACP;AACA,QAAM,OAAO,IAAI,eAAe,UAAU,EAAE,SAAS;EAL9C;EACA;EACA;EACA;;CAKT,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,gBACrB,QAAO;EAGT,MAAM,OAAO,MAAM,QAAQ;AAE3B,SACE,CAAC,CAAC,QACF,iBAAiB,MAAM;GAAE,OAAO,KAAK;GAAW,KAAK,KAAK;GAAS,CAAC;;CAIxE,OAAO,GAA6C;AAClD,IAAE,YAAY,KAAK;AAEnB,SAAO,GAAG,OAAU;;;;;;AC3MxB,SAAS,MAAM,OAA2C;AACxD,QAAO,UAAU,QAAQ,UAAU;;AAGrC,SAAS,SAAS,OAAiC;AACjD,QAAO,OAAO,UAAU;;AAG1B,IAAa,cAAb,cAAiC,wBAG/B;CACA,cAAc,OAAyB;AACrC,SAAO,iBAAiB,oBAAoB,MAAM,OAAO,KAAK,MAAM;;CAGtE,OAAO,GAA6C;AAClD,IAAE,YAAY,KAAK;AAEnB,SAAO,GAAG,OAAU;;;AAIxB,IAAa,oBAAb,cAAuC,wBAGrC;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,kBACrB,QAAO;EAET,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAC9B,MAAI,OAAO,QAAQ,SAAS,GAAG,CAC7B,QAAO;AAGT,SAAO,OAAO,QAAQ,OAAO,QAAQ,KAAK;;CAG5C,OAAO,GAA6C;AAClD,IAAE,kBAAkB,KAAK;AAEzB,SAAO,GAAG,OAAU;;;AAIxB,IAAa,iBAAb,cAAoC,wBAGlC;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,kBACrB,QAAO;EAET,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAE9B,SAAO,OAAO,QAAQ,OAAO,QAAQ,KAAK;;CAG5C,OAAO,GAA6C;AAClD,IAAE,eAAe,KAAK;AAEtB,SAAO,GAAG,OAAU;;;AAIxB,IAAa,2BAAb,cAA8C,wBAG5C;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,kBACrB,QAAO;EAET,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAC9B,MAAI,OAAO,QAAQ,SAAS,GAAG,CAC7B,QAAO;AAGT,SAAO,OAAO,QAAQ,OAAO,QAAQ,MAAM;;CAG7C,OAAO,GAA6C;AAClD,IAAE,yBAAyB,KAAK;AAEhC,SAAO,GAAG,OAAU;;;AAIxB,IAAa,wBAAb,cAA2C,wBAGzC;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,kBACrB,QAAO;EAET,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAE9B,SAAO,OAAO,QAAQ,OAAO,QAAQ,MAAM;;CAG7C,OAAO,GAA6C;AAClD,IAAE,sBAAsB,KAAK;AAE7B,SAAO,GAAG,OAAU;;;AAIxB,IAAa,cAAb,cAAiC,wBAG/B;CACA,YAAY,AAAgBC,OAAe;AACzC,QAAM,OAAO,IAAI,iBAAiB,KAAK,CAAC;EADd;;CAI5B,cAAc,OAAyB;AACrC,SAAO,iBAAiB,oBAAoB,MAAM,MAAM,QAAQ,CAAC;;CAGnE,OAAO,GAA6C;AAClD,IAAE,YAAY,KAAK;AAEnB,SAAO,GAAG,OAAU;;;;;;AChIxB,IAAa,cAAb,cAAiC,wBAG/B;CACA,cAAc,OAAyB;AACrC,SAAO,iBAAiB,oBAAoB,KAAK,MAAM,OAAO,MAAM;;CAGtE,OAAO,GAA6C;AAClD,IAAE,YAAY,KAAK;AAEnB,SAAO,GAAG,OAAU;;;AAIxB,IAAa,iBAAb,cAAoC,wBAGlC;CACA,cAAc,OAAyB;AACrC,SAAO,iBAAiB,oBAAoB,KAAK,MAAM,OAAO,MAAM;;CAGtE,OAAO,GAA6C;AAClD,IAAE,eAAe,KAAK;AAEtB,SAAO,GAAG,OAAU;;;AAIxB,IAAa,gBAAb,cAAmC,wBAGjC;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,kBACrB,QAAO;EAGT,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAE9B,SAAO,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,SAAS,GAAG;;CAGxC,OAAO,GAA6C;AAClD,IAAE,cAAc,KAAK;AAErB,SAAO,GAAG,OAAU;;;AAIxB,IAAa,mBAAb,cAAsC,wBAGpC;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,kBACrB,QAAO;EAGT,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAE9B,SAAO,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,WAAW,GAAG;;CAG1C,OAAO,GAA6C;AAClD,IAAE,iBAAiB,KAAK;AAExB,SAAO,GAAG,OAAU;;;AAIxB,IAAa,iBAAb,cAAoC,wBAGlC;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,kBACrB,QAAO;EAGT,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAE9B,SAAO,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,SAAS,GAAG;;CAGxC,OAAO,GAA6C;AAClD,IAAE,eAAe,KAAK;AAEtB,SAAO,GAAG,OAAU;;;AAIxB,IAAa,cAAb,cAAiC,wBAG/B;CACA,cAAc,OAAyB;AACrC,MAAI,EAAE,iBAAiB,kBACrB,QAAO;EAGT,MAAM,KAAK,MAAM,QAAQ;EACzB,MAAM,KAAK,KAAK,MAAM,QAAQ;AAE9B,SAAO,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,IAAI,OAAO,GAAG,CAAC,KAAK,GAAG;;CAGhD,OAAO,GAA6C;AAClD,IAAE,YAAY,KAAK;AAEnB,SAAO,GAAG,OAAU;;;AAIxB,IAAa,cAAb,cAAiC,wBAG/B;CACA,YAAY,OAAe;AACzB,QAAM,OAAO,IAAI,iBAAiB,KAAK,CAAC;;CAG1C,cAAc,OAAyB;AACrC,MAAI,iBAAiB,iBACnB,QAAO,CAAC,MAAM,QAAQ;AAGxB,SAAO,CAAC;;CAGV,OAAO,GAA6C;AAClD,IAAE,YAAY,KAAK;AAEnB,SAAO,GAAG,OAAU;;;;;;ACtGxB,MAAa,oBAAyC,YAAyB;CAC7E,MAAMC,cAA2B,CAAC,QAAQ,IAAI,GAAG,QAAQ,MAAM,EAAE,CAAC;CAElE,MAAMC,WAAS,EAAE,MAAM,YAA8B;CAErD,MAAMC,UAGD,EAAE,WACL,EAAE,OAAO;EACP,aAAa;EACb,UAAU,EAAE,MAAM,CAACC,SAAOF,SAAO,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU;EACjE,CAAC,CACH;CAID,MAAMG,sBAFgBH,SAAO,GAAGE,QAAM,CAEE,OAAO;AAE/C,QAAOA,QAAM,GAAGC,oBAAkB;;AAGpC,MAAM,SAAS,EAAE,mBAAmB,QAAQ;CAC1C;CACA;CACA;CACA;CACD,CAAC;AAUF,MAAMC,QAA2B,EAAE,WACjC,EAAE,OAAO;CACP,aAAa;CACb,UAAU,EAAE,MAAM,CAAC,OAAO,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU;CACjE,CAAC,CACH;AAED,MAAM,gBAAgB,OAAO,GAAG,MAAM;AAKtC,MAAa,oBAAoB,cAAc,OAAO;AAGtD,MAAa,aAAa,cAAc,GAAG,kBAAkB;AAK7D,MAAa,WACX,oBAC4B;AAC5B,QAAO,QAAQ,IAAIC,iBAAe,cAAc;;AAGlD,MAAa,YACX,oBAC6B;AAC7B,QACE,QAAQ,IAAIA,iBAAe,OAAO,IAAI,QAAQ,IAAIA,iBAAe,WAAW;;AAIhF,MAAa,YAAY,EAAE,MAAM,CAC/B,uBACA,sBACD,CAAC;AAKF,MAAaC,eAAgD,EAC3D,QAAQ,sBAAsB,QAAQ,KAAK,MAAM,EAAE,MAAM,EAC1D;AAED,MAAM,uBACJ,aACoC;AACpC,KAAIN,SAAO,UAAU,OACnB,QAAO;AAGT,SAAQA,SAAO,UAAf;EACE,KAAK,MACH,QAAO,KACL,IAAI,YACFA,SAAO,OACP,IAAI,iBAAiBA,SAAO,MAAM,EAClCA,SAAO,SACR,CACF;EAEH,KAAK,OACH,QAAO,KACL,IAAI,eACFA,SAAO,OACP,IAAI,iBAAiBA,SAAO,MAAM,EAClCA,SAAO,SACR,CACF;EAEH,KAAK,YACH,QAAO,KACL,IAAI,cAAcA,SAAO,OAAO,IAAI,iBAAiBA,SAAO,MAAM,CAAC,CACpE;EAEH,KAAK,gBACH,QAAO,KACL,IAAI,cACFA,SAAO,OACP,IAAI,iBAAiBA,SAAO,MAAM,CACnC,CAAC,KAAK,CACR;EAEH,KAAK,eACH,QAAO,KACL,IAAI,iBAAiBA,SAAO,OAAO,IAAI,iBAAiBA,SAAO,MAAM,CAAC,CACvE;EAEH,KAAK,aACH,QAAO,KACL,IAAI,eAAeA,SAAO,OAAO,IAAI,iBAAiBA,SAAO,MAAM,CAAC,CACrE;EAEH,KAAK,SACH,QAAO,KACL,IAAI,YAAYA,SAAO,OAAO,IAAI,iBAAiBA,SAAO,MAAM,CAAC,CAClE;EAEH,KAAK,YACH,QAAO,KAAK,IAAI,YAAYA,SAAO,MAAM,CAAC;EAE5C,KAAK,gBACH,QAAO,KACL,IAAI,YACFA,SAAO,MACR,CAAC,KAAK,CACR;EAGH,QACE,QAAO;;;AAIb,MAAM,uBACJ,aACoC;AACpC,KAAIA,aAAW,OACb,QAAO;AAGT,SAAQA,SAAO,UAAf;EACE,KAAK,MACH,QAAO,KACL,IAAI,YAAYA,SAAO,OAAO,IAAI,iBAAiBA,SAAO,MAAM,CAAC,CAClE;EACH,KAAK,OAEH,QAAO,KACL,IAAI,YAAYA,SAAO,OAAO,IAAI,iBAAiBA,SAAO,MAAM,CAAC,CAAC,KAAK,CACxE;EAEH,KAAK,MACH,QAAO,KACL,IAAI,kBAAkBA,SAAO,OAAO,IAAI,iBAAiBA,SAAO,MAAM,CAAC,CACxE;EAEH,KAAK,OACH,QAAO,KACL,IAAI,yBACFA,SAAO,OACP,IAAI,iBAAiBA,SAAO,MAAM,CACnC,CACF;EAEH,KAAK,MACH,QAAO,KACL,IAAI,eAAeA,SAAO,OAAO,IAAI,iBAAiBA,SAAO,MAAM,CAAC,CACrE;EAEH,KAAK,OACH,QAAO,KACL,IAAI,sBACFA,SAAO,OACP,IAAI,iBAAiBA,SAAO,MAAM,CACnC,CACF;EAEH,KAAK,YACH,QAAO,KAAK,IAAI,YAAYA,SAAO,MAAM,CAAC;EAE5C,KAAK,gBAEH,QAAO,KAAK,IAAI,YAAYA,SAAO,MAAM,CAAC,KAAK,CAAC;EAElD,QACE,QAAO;;;AAIb,MAAM,wBACJ,aACoC;AACpC,KAAIA,aAAW,OACb,QAAO;AAGT,SAAQA,SAAO,UAAf;EACE,KAAK,MACH,QAAO,KAAK,IAAI,aAAaA,SAAO,OAAO,IAAI,kBAAkBA,SAAO,MAAM,CAAC,CAAC;EAElF,KAAK,OACH,QAAO,KAAK,IAAI,gBAAgBA,SAAO,OAAO,IAAI,kBAAkBA,SAAO,MAAM,CAAC,CAAC;;AAIvF,QAAO,KAAK,IAAI,aAAaA,SAAO,OAAO,IAAI,kBAAkBA,SAAO,MAAM,CAAC,CAAC;;AAGlF,MAAM,qBACJ,aACoC;AACpC,KAAIA,aAAW,OACb,QAAO;AAGT,SAAQA,SAAO,UAAf;EACE,KAAK,MACH,QAAO,KACL,IAAI,UACFA,SAAO,OACP,eAAe,mBAAmBA,SAAO,MAAgB,EACzDA,SAAO,SACR,CACF;EAEH,KAAK,WACH,QAAO,KACL,IAAI,YACFA,SAAO,OACP,IAAI,KAAMA,SAAO,MAA2B,GAAG,EAC/C,IAAI,KAAMA,SAAO,MAA2B,GAAG,CAChD,CACF;;AAIL,QAAO;;AAGT,MAAM,iBAAiB,aAAqD;AAC1E,QAAO,MAAMA,SAAO,CACjB,YAA6C,CAC7C,KAAK,EAAE,MAAM,UAAU,GAAG,MAAM,oBAAoB,EAAE,CAAC,CACvD,KAAK,EAAE,MAAM,UAAU,GAAG,MAAM,oBAAoB,EAAE,CAAC,CACvD,KAAK,EAAE,MAAM,QAAQ,GAAG,MAAM,kBAAkB,EAAE,CAAC,CACnD,KAAK,EAAE,MAAM,WAAW,GAAG,MAAM,qBAAqB,EAAE,CAAC,CACzD,gBAAgB,KAAK;;AAG1B,MAAM,wBACJ,oBACoC;AACpC,KAAI,QAAQK,gBAAc,CACxB,QAAO,yBACLA,gBAAc,UACdA,gBAAc,YACf;UACQ,SAASA,gBAAc,CAChC,QAAO,cAAcA,gBAAc;AAGrC,QAAO;;AAGT,MAAM,4BACJ,sBAAwC,EAAE,EAC1C,cAA4B,WACQ;CACpC,IAAIE,OAAwC;AAC5C,MAAK,MAAMP,YAAUG,oBACnB,KAAI,KAAK,QAAQ,EAAE;AACjB,SAAO,qBAAqBH,SAAO;AACnC,MAAI,gBAAgB,OAElB,QAAO,KAAK,KAAK,MAAM,EAAE,KAAK,CAAC;YAG7B,SAASA,SAAO,CAElB,QAAO,KAAK,KAAK,SAAS;EACxB,MAAM,QAAQ,qBAAqBA,SAAO;AAC1C,MAAI,MAAM,QAAQ,EAAE;AAClB,OAAI,gBAAgB,OAClB,QAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;YACtB,gBAAgB,MACzB,QAAO,KAAK,GAAG,MAAM,QAAQ,CAAC;AAGhC,UAAO,KAAK,IAAI,MAAM,QAAQ,CAAC,KAAK,CAAC;;AAGvC,SAAO;GACP;UACO,QAAQA,SAAO,CACxB,QAAO,yBAAyBA,SAAO,UAAUA,SAAO,YAAY;AAK1E,QAAO;;AAGT,MAAa,qBACX,aACoC;AACpC,KAAI,MAAM,QAAQA,SAAO,CACvB,QAAO,yBAAyBA,SAAO;AAGzC,QAAO,qBAAqBA,SAAO;;AAGrC,SAAS,cAAc,OAAyB;AAC9C,KAAI,SAAS,KAAM,QAAO;AAC1B,KAAI,MAAM,QAAQ,MAAM,CAAE,QAAO,MAAM,WAAW;AAClD,KAAI,OAAO,UAAU,UAAU;AAC7B,OAAK,MAAM,KAAK,MACd,QAAO;AAET,SAAO;;AAET,QAAO;;AAGT,MAAa,iBAAiB,aAAwB,cAAcA,SAAO;;;;ACtX3E,IAAa,aAAb,cAA6D,YAE3D;CACA,IAAI,QAAQ;AACV,SAAO,KAAK;;CAGd,IAAI,QAAQ;AACV,MAAI,MAAM,QAAQ,KAAK,MAAM,CAC3B,QAAO;GAAE,aAAa;GAAQ,UAAU,KAAK;GAAO;AAEtD,MAAI,QAAQ,KAAK,MAAM,CACrB,QAAO,KAAK;AAGd,SAAO;GAAE,aAAa;GAAQ,UAAU,CAAC,KAAK,MAAM;GAAE;;CAGxD,UAA2C;AACzC,SAAO,kBAAkB,KAAK,MAAM;;CAGtC,AAAO,SAAS;AACd,SAAO,KAAK;;;;;;AC/BhB,MAAa,mBAAmB,EAAE,OAAO;CACvC,OAAO,EAAE,OAAO,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,UAAU;CAChE,QAAQ,EAAE,OAAO,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,UAAU;CACpE,CAAC;AAIF,MAAa,0BAA0B,iBAAiB,OAAO,EAC7D,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,EACtC,CAAC;;;;ACXF,IAAsB,QAAtB,MAA4B;;;;ACG5B,MAAa,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;;;;ACD1E,IAAa,SAAb,MAAa,eAAe,YAAqB;CAC/C,YAAY,OAAgB;AAC1B,QAAM,EAAE,OAAO,CAAC;;CAGlB,IAAW,QAAiB;AAC1B,SAAO,KAAK,MAAM;;CAGpB,OAAc,YAAY,OAAgB;AACxC,SAAO,IAAI,OAAO,MAAM;;CAG1B,OAAc,OAAe;AAC3B,SAAO,IAAI,OAAO,KAAK;;CAGzB,OAAc,QAAgB;AAC5B,SAAO,IAAI,OAAO,MAAM;;;;;;AClB5B,IAAa,SAAb,MAAa,eAAe,YAAkB;CAC5C,YAAY,OAA+B;AAEzC,QAAM,EAAE,OADK,IAAI,KAAK,MAAM,EACP,CAAC;;CAGxB,IAAW,QAAc;AACvB,SAAO,KAAK,MAAM;;CAGpB,OAAc,SAAS,OAAa;AAClC,SAAO,IAAI,OAAO,MAAM;;CAG1B,OAAc,MAAc;AAC1B,SAAO,IAAI,OAAO,KAAK,KAAK,CAAC;;;;;;ACfjC,IAAsB,KAAtB,cAA6C,YAAe;CAC1D,YAAY,OAAU;AACpB,QAAM,EAAE,OAAO,CAAwB;;CAGzC,IAAW,QAAW;AACpB,SAAO,KAAK,QAAQ;;;;;;ACLxB,IAAsB,SAAtB,MAAsB,eAAe,GAAG;CACtC,OAAe,YAAY;CAE3B,OAAO,SAAS,SAAS,IAAI,OAAO,GAAG;EACrC,MAAM,KAAK,eAAe,OAAO,WAAW,KAAK,EAAE;AAEnD,SAAO,SAAS;;CAGlB,IAAW,QAAgB;AACzB,SAAO,KAAK,MAAM;;;;;;ACXtB,IAAa,YAAb,MAAa,kBAAkB,YAAoB;CACjD,YAAY,OAAe;AACzB,QAAM,EAAE,OAAO,CAAC;;CAGlB,IAAW,QAAgB;AACzB,SAAO,KAAK,MAAM;;CAGpB,OAAc,WAAW,OAAe;AACtC,SAAO,IAAI,UAAU,MAAM;;;;;;ACV/B,IAAa,WAAb,MAAa,iBAAiB,YAAoB;CAChD,YAAY,OAAe;AACzB,QAAM,EAAE,OAAO,CAAC;;CAGlB,IAAW,QAAgB;AACzB,SAAO,KAAK,MAAM;;CAGpB,OAAc,WAAW,OAAe;AACtC,SAAO,IAAI,SAAS,MAAM;;CAG5B,OAAc,QAAkB;AAC9B,SAAO,IAAI,SAAS,GAAG;;;;;;ACb3B,IAAsB,OAAtB,cAAmC,GAAG;CACpC,OAAO,WAAW;AAChB,SAAO,IAAI;;CAGb,IAAW,QAAgB;AACzB,SAAO,KAAK,MAAM;;;;;;ACNtB,MAAM,cAAcQ,IAAE,OAAO;AAE7B,IAAa,UAAb,cAA6B,YAAoB;CAC/C,YAAY,OAAe;AACzB,QAAM,EAAE,OAAO,CAAC;;CAGlB,OAAO,OAAO,OAAe;AAC3B,SAAO,IAAI,KAAK,YAAY,MAAM,MAAM,CAAC;;CAG3C,IAAW,QAAgB;AACzB,SAAO,KAAK,MAAM;;;;;;ACZtB,MAAM,cAAcC,IAAE,KAAK;AAE3B,IAAa,UAAb,cAA6B,YAAoB;CAC/C,YAAY,OAAe;AACzB,QAAM,EAAE,OAAO,CAAC;;CAGlB,OAAO,OAAO,OAAe;AAC3B,SAAO,IAAI,KAAK,YAAY,MAAM,MAAM,CAAC;;CAG3C,IAAW,QAAgB;AACzB,SAAO,KAAK,MAAM"}
1
+ {"version":3,"file":"index.js","names":["#domainEvents","payload: TPayload","operatorId: string","meta: TMeta","message: string","cause?: Error","metadata?: unknown","props: ValueObjectProps<T>","left: ISpecification<T, V>","right: ISpecification<T, V>","spec: ISpecification<T, V>","field: string","value: V","relation?: string","field: string","dateStart: Date","dateEnd: Date","relation?: string","field: string","filterTuple: [T, ...T[]]","filter","group: z.ZodType<{\n conjunction?: IConjunction;\n children?: (z.infer<typeof group> | z.infer<typeof filter>)[];\n }>","group","filterOrGroupList","group: z.ZodType<IGroup>","filterOrGroup","operatorsMap: Record<IFieldType, IOperator[]>","spec: Option<BaseFilterSpecification>","z","z"],"sources":["../src/aggregate-root.ts","../src/command.ts","../src/event.ts","../src/exception.base.ts","../src/filter/base.filter.ts","../src/filter/conjunction.ts","../src/utils.ts","../src/value-objects/value-object.ts","../src/filter/fields/field-value.base.ts","../src/filter/fields/boolean/boolean-field-value.ts","../src/filter/fields/boolean/boolean-field.type.ts","../src/filter/operators.ts","../src/filter/fields/boolean/boolean.filter.ts","../src/filter/fields/date/date-field-value.ts","../src/filter/fields/date/date-field.type.ts","../src/filter/fields/date/date.filter.ts","../src/filter/fields/number/number-field-value.ts","../src/filter/fields/number/number-field.type.ts","../src/filter/fields/number/number.filter.ts","../src/filter/fields/string/string-field-value.ts","../src/filter/fields/string/string-field.type.ts","../src/filter/fields/string/string.filter.ts","../src/specification.ts","../src/filter/filter-specification.base.ts","../src/filter/specifications/boolean.specification.ts","../src/filter/specifications/date.specification.ts","../src/filter/specifications/number.specification.ts","../src/filter/specifications/string.specification.ts","../src/filter/filter.ts","../src/filter/root-filter.ts","../src/pagination.ts","../src/query.ts","../src/sort.ts","../src/value-objects/boolean.vo.ts","../src/value-objects/date.vo.ts","../src/value-objects/id.vo.ts","../src/value-objects/nanoid.vo.ts","../src/value-objects/integer.vo.ts","../src/value-objects/string.vo.ts","../src/value-objects/uuid.vo.ts","../src/value-objects/email.vo.ts","../src/value-objects/color.vo.ts"],"sourcesContent":["import { type BaseEvent } from \"./event\";\n\nexport abstract class AggregateRoot<E extends BaseEvent> {\n #domainEvents: E[] = [];\n\n get domainEvents() {\n return this.#domainEvents;\n }\n\n set domainEvents(events: E[]) {\n this.#domainEvents = events;\n }\n\n addDomainEvent(event: E) {\n this.#domainEvents.push(event);\n }\n\n removeEvents(events: E[]) {\n this.#domainEvents = this.#domainEvents.filter(\n (event) => !events.includes(event),\n );\n }\n}\n","import { v4 } from \"uuid\";\n\nexport type CommandProps<T> = Omit<T, \"correlationId\" | \"commandId\"> &\n Partial<Command>;\n\nexport abstract class Command {\n public readonly commandId: string;\n\n public readonly correlationId: string;\n\n public readonly causationId?: string;\n\n constructor(props: CommandProps<unknown>) {\n this.correlationId = props.correlationId ?? v4();\n this.commandId = props.commandId ?? v4();\n }\n}\n","import { v4 } from \"uuid\";\nimport { z } from \"zod\";\n\nexport const eventSchema = <\n TName extends string,\n TPayload extends z.ZodTypeAny,\n TMeta extends z.ZodTypeAny,\n>(\n name: TName,\n payload: TPayload,\n meta: TMeta,\n) =>\n z.object({\n id: z.string().uuid(),\n name: z.literal(name),\n operatorId: z.string().optional(),\n payload: payload,\n timestamp: z.coerce.date(),\n meta: meta,\n });\n\nexport interface IEvent<TPayload extends object = object, TMeta = any> {\n id: string;\n name: string;\n operatorId: string;\n payload: TPayload;\n timestamp: Date;\n meta: TMeta;\n}\n\nexport interface IEventJSON<TPayload extends object = object, TMeta = any> {\n id: string;\n name: string;\n operatorId: string;\n payload: TPayload;\n timestamp: string;\n meta: TMeta;\n}\n\nexport abstract class BaseEvent<\n TPayload extends object = object,\n TName extends string = string,\n TMeta extends any = { key?: string; headers?: Record<string, string> },\n> implements IEvent<TPayload>\n{\n abstract name: TName;\n constructor(\n public readonly payload: TPayload,\n public readonly operatorId: string,\n public readonly meta: TMeta,\n public readonly id = v4(),\n public readonly timestamp = new Date(),\n ) {}\n\n toJSON(): IEventJSON<TPayload, TMeta> {\n return {\n id: this.id,\n name: this.name,\n operatorId: this.operatorId,\n timestamp: this.timestamp.toISOString(),\n payload: this.payload,\n meta: this.meta,\n };\n }\n}\n","export interface SerializedException {\n message: string;\n code: string;\n correlationId?: string;\n stack?: string;\n cause?: string;\n metadata?: unknown;\n}\n\nexport abstract class ExceptionBase extends Error {\n abstract code: string;\n\n public readonly correlationId?: string;\n\n /**\n *\n * @param message\n * @param correlationId\n * @param cause\n * @param metadata\n */\n constructor(\n readonly message: string,\n correlationId?: string,\n readonly cause?: Error,\n readonly metadata?: unknown\n ) {\n super(message);\n this.correlationId = correlationId;\n }\n\n toJSON(): SerializedException {\n return {\n message: this.message,\n code: this.code,\n stack: this.stack,\n correlationId: this.correlationId,\n cause: JSON.stringify(this.cause),\n metadata: this.metadata,\n };\n }\n}\n","import { z } from \"zod\";\n\nexport const baseFilter = z.object({\n field: z.string().min(1),\n relation: z.string().min(1).optional(),\n});\n","import { z } from \"zod\";\n\nconst $and = z.literal(\"$and\");\nconst $or = z.literal(\"$or\");\nconst $not = z.literal(\"$not\");\nexport const conjunctions = z.union([$and, $or, $not]);\nexport type IConjunction = z.infer<typeof conjunctions>;\n","import { ValueObject } from \"./value-objects/value-object\";\n\nexport function convertPropsToObject(props: any): any {\n const propsCopy = { ...props };\n\n // eslint-disable-next-line guard-for-in\n for (const prop in propsCopy) {\n if (Array.isArray(propsCopy[prop])) {\n propsCopy[prop] = (propsCopy[prop] as Array<unknown>).map((item) => {\n return convertToPlainObject(item);\n });\n }\n propsCopy[prop] = convertToPlainObject(propsCopy[prop]);\n }\n\n return propsCopy;\n}\n\nfunction convertToPlainObject(item: any): any {\n if (ValueObject.isValueObject(item)) {\n return item.unpack();\n }\n\n return item;\n}\n","import { dequal } from \"dequal\";\nimport { convertPropsToObject } from \"../utils.js\";\nexport type Primitives = string | number | boolean | null;\nexport interface DomainPrimitive<T extends Primitives | Date> {\n value: T;\n}\n\nexport type ValueObjectProps<T> = T extends Primitives | Date\n ? DomainPrimitive<T>\n : T;\n\nexport abstract class ValueObject<T = any> {\n constructor(protected readonly props: ValueObjectProps<T>) {}\n\n public equals(vo?: ValueObject<T>): boolean {\n if (vo === null || vo === undefined) {\n return false;\n }\n\n return dequal(vo, this);\n }\n\n static isValueObject(obj: unknown): obj is ValueObject<unknown> {\n return obj instanceof ValueObject;\n }\n\n public unpack(): T {\n if (this.isDomainPrimitive(this.props)) {\n return this.props.value;\n }\n\n const propsCopy = convertPropsToObject(this.props);\n\n return Object.freeze(propsCopy);\n }\n\n private isDomainPrimitive(\n obj: unknown\n ): obj is DomainPrimitive<T & (Primitives | Date)> {\n if (Object.prototype.hasOwnProperty.call(obj, \"value\")) {\n return true;\n }\n\n return false;\n }\n}\n","import { ValueObject } from \"../../value-objects/value-object\";\nimport { type IFieldValueVisitor } from \"./field-value.visitor\";\nimport { type UnpackedFieldValue } from \"./field.type\";\n\nexport abstract class FieldValueBase<\n V extends UnpackedFieldValue,\n> extends ValueObject<V> {\n abstract accept(visitor: IFieldValueVisitor): void;\n}\n","import { FieldValueBase } from \"../field-value.base\";\nimport { type IFieldValueVisitor } from \"../field-value.visitor\";\nimport { type IBooleanFieldValue } from \"./boolean-field.type\";\n \nexport class BooleanFieldValue extends FieldValueBase<IBooleanFieldValue> {\n constructor(value: IBooleanFieldValue) {\n super({ value });\n }\n\n accept(visitor: IFieldValueVisitor): void {\n visitor.boolean(this);\n }\n}\n","import { z } from \"zod\";\n\nexport const booleanFieldValue = z.boolean().nullable();\nexport type IBooleanFieldValue = z.infer<typeof booleanFieldValue>;\n","import { z } from \"zod\";\n\nexport const $eq = z.literal(\"$eq\");\nexport const $neq = z.literal(\"$neq\");\nexport const $contains = z.literal(\"$contains\");\nexport const $not_contains = z.literal(\"$not_contains\");\nexport const $starts_with = z.literal(\"$starts_with\");\nexport const $ends_with = z.literal(\"$ends_with\");\nexport const $regex = z.literal(\"$regex\");\n\nexport const $is_true = z.literal(\"$is_true\");\nexport const $is_false = z.literal(\"$is_false\");\n\nexport const $in = z.literal(\"$in\");\nexport const $nin = z.literal(\"$nin\");\n\nexport const $gt = z.literal(\"$gt\");\nexport const $lt = z.literal(\"$lt\");\nexport const $gte = z.literal(\"$gte\");\nexport const $lte = z.literal(\"$lte\");\n\nexport const $start_eq = z.literal(\"$start_eq\");\nexport const $start_neq = z.literal(\"$start_neq\");\nexport const $start_gt = z.literal(\"$start_gt\");\nexport const $start_lt = z.literal(\"$start_lt\");\nexport const $start_gte = z.literal(\"$start_gte\");\nexport const $start_lte = z.literal(\"$start_lte\");\n\nexport const $end_eq = z.literal(\"$end_eq\");\nexport const $end_neq = z.literal(\"$end_neq\");\nexport const $end_gt = z.literal(\"$end_gt\");\nexport const $end_lt = z.literal(\"$end_lt\");\nexport const $end_gte = z.literal(\"$end_gte\");\nexport const $end_lte = z.literal(\"$end_lte\");\n\nexport const $is_empty = z.literal(\"$is_empty\");\nexport const $is_not_empty = z.literal(\"$is_not_empty\");\n\nexport const $is_today = z.literal(\"$is_today\");\nexport const $is_not_today = z.literal(\"$is_not_today\");\nexport const $is_tomorrow = z.literal(\"$is_tomorrow\");\nexport const $is_yesterday = z.literal(\"$is_yesterday\");\nexport const $between = z.literal(\"$between\");\n\nexport const $has_file_type = z.literal(\"$has_file_type\");\nexport const $has_file_extension = z.literal(\"$has_file_extension\");\n\nexport const $is_root = z.literal(\"$is_root\");\n\nexport const $is_me = z.literal(\"$is_me\");\nexport const $is_not_me = z.literal(\"$is_not_me\");\n\nexport const operatorsWihtoutValue = z.union([\n $is_empty,\n $is_not_empty,\n $is_today,\n $is_not_today,\n $is_tomorrow,\n $is_yesterday,\n $is_root,\n $is_me,\n $is_not_me,\n]);\nexport const isOperatorWithoutValue = (value: string): boolean =>\n operatorsWihtoutValue.safeParse(value).success;\n","import { z } from \"zod\";\nimport { baseFilter } from \"../../base.filter\";\nimport {\n $eq,\n $neq\n} from \"../../operators\";\n\nexport const booleanFilterOperators = z.union([\n $eq,\n $neq,\n]);\n\nexport const booleanFilterValue = z.boolean().nullable();\nexport const booleanFilter = z\n .object({\n type: z.literal(\"boolean\"),\n operator: booleanFilterOperators,\n value: booleanFilterValue,\n })\n .merge(baseFilter);\n\nexport type IBooleanFilter = z.infer<typeof booleanFilter>;\nexport type IBooleanFilterOperator = z.infer<typeof booleanFilterOperators>;\n","import { FieldValueBase } from \"../field-value.base\";\nimport { type IFieldValueVisitor } from \"../field-value.visitor\";\nimport { type IDateFieldValue } from \"./date-field.type\";\n\nexport class DateFieldValue extends FieldValueBase<IDateFieldValue> {\n constructor(value: IDateFieldValue) {\n super({ value });\n }\n\n accept(visitor: IFieldValueVisitor): void {\n visitor.date(this);\n }\n\n static fromNullableString(str: string | null): DateFieldValue {\n if (!str) {\n return new this(null);\n }\n\n return new this(new Date(str));\n }\n}\n","import { z } from \"zod\";\n\nexport const dateFieldValue = z.date().nullable();\n\nexport type IDateFieldValue = z.infer<typeof dateFieldValue>;\n","import { z } from \"zod\";\nimport {\n $between,\n $eq,\n $gt,\n $gte,\n $is_not_today,\n $is_today,\n $is_tomorrow,\n $is_yesterday,\n $lt,\n $lte,\n $neq,\n} from \"../../operators\";\nimport { baseFilter } from \"../../base.filter\";\n\nexport const dateFilterOperators = z.union([\n $eq,\n $neq,\n $gt,\n $gte,\n $lt,\n $lte,\n $between,\n $is_today,\n $is_tomorrow,\n $is_yesterday,\n $is_not_today,\n]);\n\nexport const dateFilterValue = z\n .string()\n .nullable()\n .or(z.tuple([z.string(), z.string()]));\nexport const dateFilter = z\n .object({\n type: z.literal(\"date\"),\n operator: dateFilterOperators,\n value: dateFilterValue,\n })\n .merge(baseFilter);\n\nexport type IDateFilter = z.infer<typeof dateFilter>;\nexport type IDateFilterValue = z.infer<typeof dateFilterValue>;\nexport type IDateFilterOperator = z.infer<typeof dateFilterOperators>;\n","import { FieldValueBase } from \"../field-value.base\";\nimport { type IFieldValueVisitor } from \"../field-value.visitor\";\nimport { type INumberFieldValue } from \"./number-field.type\";\n\nexport class NumberFieldValue extends FieldValueBase<INumberFieldValue> {\n constructor(value: INumberFieldValue) {\n super({ value });\n }\n\n accept(visitor: IFieldValueVisitor): void {\n visitor.number(this);\n }\n}\n","import { z } from \"zod\";\n\nexport const numberFieldValue = z.number().or(z.null());\nexport type INumberFieldValue = z.infer<typeof numberFieldValue>;\n","import { z } from \"zod\";\nimport {\n $eq,\n $gt,\n $gte,\n $is_empty,\n $is_not_empty,\n $lt,\n $lte,\n $neq,\n} from \"../../operators\";\nimport { baseFilter } from \"../../base.filter\";\n\nexport const numberFilterOperators = z.union([\n $eq,\n $neq,\n $gt,\n $gte,\n $lt,\n $lte,\n $is_empty,\n $is_not_empty,\n]);\nexport type INumberFilterOperators = z.infer<typeof numberFilterOperators>;\n\nexport const numberFilterValue = z.number().nullable();\nexport const numberFilter = z\n .object({\n type: z.literal(\"number\"),\n operator: numberFilterOperators,\n value: numberFilterValue,\n })\n .merge(baseFilter);\n\nexport type INumberFilter = z.infer<typeof numberFilter>;\nexport type INumberFilterValue = z.infer<typeof numberFilterValue>;\n","import { FieldValueBase } from \"../field-value.base\";\nimport { type IFieldValueVisitor } from \"../field-value.visitor\";\nimport { type IStringFieldValue } from \"./string-field.type\";\n\nexport class StringFieldValue extends FieldValueBase<IStringFieldValue> {\n constructor(value: IStringFieldValue) {\n super({ value });\n }\n\n accept(visitor: IFieldValueVisitor): void {\n visitor.string(this);\n }\n}\n","import { z } from \"zod\";\n\nexport const stringFieldValue = z.string().nullable();\nexport type IStringFieldValue = z.infer<typeof stringFieldValue>;\n","import { z } from \"zod\";\nimport { baseFilter } from \"../../base.filter\";\nimport {\n $eq,\n $neq,\n $contains,\n $not_contains,\n $starts_with,\n $ends_with,\n $regex,\n $is_empty,\n $is_not_empty,\n} from \"../../operators\";\n\nexport const stringFilterOperators = z.union([\n $eq,\n $neq,\n $contains,\n $not_contains,\n $starts_with,\n $ends_with,\n $regex,\n $is_empty,\n $is_not_empty,\n]);\n\nexport const stringFilterValue = z.string().nullable();\nexport const stringFilter = z\n .object({\n type: z.literal(\"string\"),\n operator: stringFilterOperators,\n value: stringFilterValue,\n })\n .merge(baseFilter);\n\nexport type IStringFilter = z.infer<typeof stringFilter>;\nexport type IStringFilterOperator = z.infer<typeof stringFilterOperators>;\n","import type { Option, Result } from \"@globalart/oxide\";\nimport { None, Ok, Some } from \"@globalart/oxide\";\n\nexport interface ISpecVisitor {\n or(left: ISpecification, right: ISpecification): this;\n not(): this;\n}\n\nexport interface ISpecification<\n T = any,\n V extends ISpecVisitor = ISpecVisitor,\n> {\n isSatisfiedBy(t: T): boolean;\n mutate(t: T): Result<T, string>;\n accept(v: V): Result<void, string>;\n}\n\nexport abstract class CompositeSpecification<\n T = any,\n V extends ISpecVisitor = ISpecVisitor,\n> implements ISpecification<T, V>\n{\n abstract isSatisfiedBy(t: T): boolean;\n abstract mutate(t: T): Result<T, string>;\n abstract accept(v: V): Result<void, string>;\n\n public and(s: ISpecification<T, V>): CompositeSpecification<T, V> {\n return new And(this, s);\n }\n\n public or(s: ISpecification<T, V>): CompositeSpecification<T, V> {\n return new Or(this, s);\n }\n\n public not(): Not<T, V> {\n return new Not(this);\n }\n}\n\nclass And<T, V extends ISpecVisitor> extends CompositeSpecification<T, V> {\n constructor(\n private readonly left: ISpecification<T, V>,\n private readonly right: ISpecification<T, V>\n ) {\n super();\n }\n\n isSatisfiedBy(t: T): boolean {\n return this.left.isSatisfiedBy(t) && this.right.isSatisfiedBy(t);\n }\n\n mutate(t: T): Result<T, string> {\n return this.left.mutate(t).and(this.right.mutate(t));\n }\n\n accept(v: V): Result<void, string> {\n return this.left.accept(v).and(this.right.accept(v));\n }\n}\n\nclass Or<T, V extends ISpecVisitor> extends CompositeSpecification<T, V> {\n constructor(\n private readonly left: ISpecification<T, V>,\n private readonly right: ISpecification<T, V>\n ) {\n super();\n }\n\n isSatisfiedBy(t: T): boolean {\n return this.left.isSatisfiedBy(t) || this.right.isSatisfiedBy(t);\n }\n\n mutate(t: T): Result<T, string> {\n return this.left.mutate(t).orElse(() => this.right.mutate(t));\n }\n\n accept(v: V): Result<void, string> {\n v.or(this.left, this.right);\n\n return Ok(undefined);\n }\n}\n\nclass Not<T, V extends ISpecVisitor> extends CompositeSpecification<T, V> {\n constructor(public readonly spec: ISpecification<T, V>) {\n super();\n }\n\n isSatisfiedBy(t: T): boolean {\n return !this.spec.isSatisfiedBy(t);\n }\n\n mutate(): Result<T, string> {\n throw new Error(\"[Not.mutate] Method not implemented.\");\n }\n\n accept(v: V): Result<void, string> {\n return this.spec.accept(v.not());\n }\n}\n\nexport const and = <T, V extends ISpecVisitor>(\n ...specs: CompositeSpecification<T, V>[]\n): Option<CompositeSpecification<T, V>> => {\n if (!specs.length) {\n return None;\n }\n\n let s = specs[0];\n for (const spec of specs.slice(1)) {\n s = s.and(spec);\n }\n\n return Some(s);\n};\n\nexport const andOptions = <T, V extends ISpecVisitor>(\n ...specs: Option<CompositeSpecification<T, V>>[]\n): Option<CompositeSpecification<T, V>> => {\n return and(\n ...specs.filter((spec) => spec.isSome()).map((spec) => spec.unwrap())\n );\n};\n\nexport const or = <T, V extends ISpecVisitor>(\n ...specs: CompositeSpecification<T, V>[]\n): Option<CompositeSpecification<T, V>> => {\n if (!specs.length) {\n return None;\n }\n\n let s = specs[0];\n for (const spec of specs.slice(1)) {\n s = s.or(spec);\n }\n\n return Some(s);\n};\n","import { type IFilterBaseVisitor } from \"./filter-specification-visitor.base\";\nimport { CompositeSpecification } from \"../specification\";\nimport { type Result } from \"@globalart/oxide\";\n\nexport abstract class BaseFilterSpecification<\n E = unknown,\n V = unknown,\n> extends CompositeSpecification<E, IFilterBaseVisitor> {\n constructor(\n public readonly field: string,\n public readonly value: V,\n public readonly relation?: string\n ) {\n super();\n }\n\n mutate(t: E): Result<E, string> {\n throw new Error(\"Method not implemented.\");\n }\n}\n","import { Ok, type Result } from \"@globalart/oxide\";\nimport { BooleanFieldValue } from \"../fields/boolean/boolean-field-value\";\nimport { type IFilterBaseVisitor } from \"../filter-specification-visitor.base\";\nimport { BaseFilterSpecification } from \"../filter-specification.base\";\n\nexport class BooleanEqual extends BaseFilterSpecification<\n unknown,\n BooleanFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof BooleanFieldValue && this.value.equals(value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.booleanEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class BooleanNotEqual extends BaseFilterSpecification<\n unknown,\n BooleanFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof BooleanFieldValue && this.value.equals(value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.booleanNotEqual(this);\n\n return Ok(undefined);\n }\n}\n","import {\n isAfter,\n isBefore,\n isEqual,\n isToday,\n isTomorrow,\n isWithinInterval,\n isYesterday,\n} from \"date-fns\";\nimport { Ok, type Result } from \"@globalart/oxide\";\nimport { DateFieldValue } from \"../fields/date/date-field-value\";\nimport { type IFilterBaseVisitor } from \"../filter-specification-visitor.base\";\nimport { BaseFilterSpecification } from \"../filter-specification.base\";\n\nexport class DateEqual extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof DateFieldValue && value.equals(this.value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateGreaterThan extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n const d1 = value.unpack();\n const d2 = this.value.unpack();\n\n return !!d1 && !!d2 && isAfter(d1, d2);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateGreaterThan(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateLessThan extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const d1 = value.unpack();\n const d2 = this.value.unpack();\n\n return !!d1 && !!d2 && isBefore(d1, d2);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateLessThan(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateGreaterThanOrEqual extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const d1 = value.unpack();\n const d2 = this.value.unpack();\n\n return !!d1 && !!d2 && (isEqual(d1, d2) || isAfter(d1, d2));\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateGreaterThanOrEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateLessThanOrEqual extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const d1 = value.unpack();\n const d2 = this.value.unpack();\n\n return !!d1 && !!d2 && (isEqual(d1, d2) || isBefore(d1, d2));\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateLessThanOrEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateIsToday extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const date = value.unpack();\n\n return !!date && isToday(date);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateIsToday(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateIsTomorrow extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const date = value.unpack();\n\n return !!date && isTomorrow(date);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateIsTomorrow(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateIsYesterday extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const date = value.unpack();\n\n return !!date && isYesterday(date);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateIsYesterday(this);\n\n return Ok(undefined);\n }\n}\n\nexport class DateBetween extends BaseFilterSpecification<\n unknown,\n DateFieldValue\n> {\n constructor(\n public field: string,\n public dateStart: Date,\n public dateEnd: Date,\n public relation?: string\n ) {\n super(field, new DateFieldValue(dateStart), relation);\n }\n\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof DateFieldValue)) {\n return false;\n }\n\n const date = value.unpack();\n\n return (\n !!date &&\n isWithinInterval(date, { start: this.dateStart, end: this.dateEnd })\n );\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.dateBetween(this);\n\n return Ok(undefined);\n }\n}\n","import { Ok, type Result } from \"@globalart/oxide\";\nimport { type IFilterBaseVisitor } from \"../filter-specification-visitor.base\";\nimport { BaseFilterSpecification } from \"../filter-specification.base\";\nimport { NumberFieldValue } from \"../fields/number/number-field-value\";\n\nfunction isNil(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n\nfunction isNumber(value: unknown): value is number {\n return typeof value === \"number\";\n}\n\nexport class NumberEqual extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof NumberFieldValue && value.equals(this.value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class NumberGreaterThan extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof NumberFieldValue)) {\n return false;\n }\n const n1 = value.unpack();\n const n2 = this.value.unpack();\n if (n1 === null && isNumber(n2)) {\n return true;\n }\n\n return n1 !== null && n2 !== null && n1 > n2;\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberGreaterThan(this);\n\n return Ok(undefined);\n }\n}\n\nexport class NumberLessThan extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof NumberFieldValue)) {\n return false;\n }\n const n1 = value.unpack();\n const n2 = this.value.unpack();\n\n return n1 !== null && n2 !== null && n1 < n2;\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberLessThan(this);\n\n return Ok(undefined);\n }\n}\n\nexport class NumberGreaterThanOrEqual extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof NumberFieldValue)) {\n return false;\n }\n const n1 = value.unpack();\n const n2 = this.value.unpack();\n if (n1 === null && isNumber(n2)) {\n return true;\n }\n\n return n1 !== null && n2 !== null && n1 >= n2;\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberGreaterThanOrEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class NumberLessThanOrEqual extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof NumberFieldValue)) {\n return false;\n }\n const n1 = value.unpack();\n const n2 = this.value.unpack();\n\n return n1 !== null && n2 !== null && n1 <= n2;\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberLessThanOrEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class NumberEmpty extends BaseFilterSpecification<\n unknown,\n NumberFieldValue\n> {\n constructor(public readonly field: string) {\n super(field, new NumberFieldValue(null));\n }\n\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof NumberFieldValue && isNil(value.unpack());\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.numberEmpty(this);\n\n return Ok(undefined);\n }\n}\n","import { Ok, type Result } from \"@globalart/oxide\";\nimport { StringFieldValue } from \"../fields/string/string-field-value\";\nimport { type IFilterBaseVisitor } from \"../filter-specification-visitor.base\";\nimport { BaseFilterSpecification } from \"../filter-specification.base\";\n\nexport class StringEqual extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof StringFieldValue && this.value.equals(value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringNotEqual extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n return value instanceof StringFieldValue && this.value.equals(value);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringNotEqual(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringContain extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof StringFieldValue)) {\n return false;\n }\n\n const s1 = value.unpack();\n const s2 = this.value.unpack();\n\n return !!s1 && !!s2 && s1.includes(s2);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringContain(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringStartsWith extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof StringFieldValue)) {\n return false;\n }\n\n const s1 = value.unpack();\n const s2 = this.value.unpack();\n\n return !!s1 && !!s2 && s1.startsWith(s2);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringStartsWith(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringEndsWith extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof StringFieldValue)) {\n return false;\n }\n\n const s1 = value.unpack();\n const s2 = this.value.unpack();\n\n return !!s1 && !!s2 && s1.endsWith(s2);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringEndsWith(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringRegex extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n isSatisfiedBy(value: unknown): boolean {\n if (!(value instanceof StringFieldValue)) {\n return false;\n }\n\n const s1 = value.unpack();\n const s2 = this.value.unpack();\n\n return !!s1 && !!s2 && new RegExp(s2).test(s1);\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringRegex(this);\n\n return Ok(undefined);\n }\n}\n\nexport class StringEmpty extends BaseFilterSpecification<\n unknown,\n StringFieldValue\n> {\n constructor(field: string) {\n super(field, new StringFieldValue(null));\n }\n\n isSatisfiedBy(value: unknown): boolean {\n if (value instanceof StringFieldValue) {\n return !value.unpack();\n }\n\n return !value;\n }\n\n accept(v: IFilterBaseVisitor): Result<void, string> {\n v.stringEmpty(this);\n\n return Ok(undefined);\n }\n}\n","import { None, Some, type Option } from \"@globalart/oxide\";\nimport { match } from \"ts-pattern\";\nimport { z } from \"zod\";\nimport { conjunctions, type IConjunction } from \"./conjunction\";\nimport { BooleanFieldValue, booleanFilter, IBooleanFilter } from \"./fields\";\nimport { DateFieldValue } from \"./fields/date/date-field-value\";\nimport { dateFilter, type IDateFilter } from \"./fields/date/date.filter\";\nimport { NumberFieldValue } from \"./fields/number/number-field-value\";\nimport {\n numberFilter,\n numberFilterOperators,\n type INumberFilter,\n} from \"./fields/number/number.filter\";\nimport { StringFieldValue } from \"./fields/string/string-field-value\";\nimport {\n stringFilter,\n stringFilterOperators,\n type IStringFilter,\n} from \"./fields/string/string.filter\";\nimport { type BaseFilterSpecification } from \"./filter-specification.base\";\nimport {\n BooleanEqual,\n BooleanNotEqual,\n} from \"./specifications/boolean.specification\";\nimport { DateBetween, DateEqual } from \"./specifications/date.specification\";\nimport {\n NumberEmpty,\n NumberEqual,\n NumberGreaterThan,\n NumberGreaterThanOrEqual,\n NumberLessThan,\n NumberLessThanOrEqual,\n} from \"./specifications/number.specification\";\nimport {\n StringContain,\n StringEmpty,\n StringEndsWith,\n StringEqual,\n StringNotEqual,\n StringRegex,\n StringStartsWith,\n} from \"./specifications/string.specification\";\n\nexport const filterRoorFilter = <T extends z.ZodType>(filters: [T, ...T[]]) => {\n const filterTuple: [T, ...T[]] = [filters[0], ...filters.slice(1)];\n\n const filter = z.union(filterTuple as [T, T, ...T[]]);\n\n const group: z.ZodType<{\n conjunction?: IConjunction;\n children?: (z.infer<typeof group> | z.infer<typeof filter>)[];\n }> = z.lazy(() =>\n z.object({\n conjunction: conjunctions,\n children: z.union([group, filter]).array().nonempty().optional(),\n })\n );\n\n const filterOrGroup = filter.or(group);\n type IFilterOrGroup = z.infer<typeof filterOrGroup>;\n const filterOrGroupList = filterOrGroup.array();\n\n return group.or(filterOrGroupList);\n};\n\nconst filter = z.discriminatedUnion(\"type\", [\n numberFilter,\n stringFilter,\n dateFilter,\n booleanFilter,\n]);\n\nexport type IFilter = z.infer<typeof filter>;\nexport type IFilters = IFilter[];\n\nexport interface IGroup<Filter extends IFilter = IFilter> {\n conjunction?: IConjunction;\n children?: IFilterOrGroupList<Filter>;\n}\n\nconst group: z.ZodType<IGroup> = z.lazy(() =>\n z.object({\n conjunction: conjunctions,\n children: z.union([group, filter]).array().nonempty().optional(),\n })\n);\n\nconst filterOrGroup = filter.or(group);\nexport type IFilterOrGroup<Filter extends IFilter = IFilter> =\n | Filter\n | IGroup<Filter>;\n\nexport const filterOrGroupList = filterOrGroup.array();\nexport type IFilterOrGroupList<Filter extends IFilter = IFilter> =\n IFilterOrGroup<Filter>[];\nexport const rootFilter = filterOrGroup.or(filterOrGroupList);\nexport type IRootFilter<Filter extends IFilter = IFilter> =\n | IFilterOrGroup<Filter>\n | IFilterOrGroupList<Filter>;\n\nexport const isGroup = (\n filterOrGroup: IFilterOrGroup\n): filterOrGroup is IGroup => {\n return Reflect.has(filterOrGroup, \"conjunction\");\n};\n\nexport const isFilter = (\n filterOrGroup: IFilterOrGroup\n): filterOrGroup is IFilter => {\n return (\n Reflect.has(filterOrGroup, \"type\") && Reflect.has(filterOrGroup, \"operator\")\n );\n};\n\nexport const operators = z.union([\n numberFilterOperators,\n stringFilterOperators,\n]);\nexport type IOperator = z.infer<typeof operators>;\n\ntype IFieldType = \"number\";\n\nexport const operatorsMap: Record<IFieldType, IOperator[]> = {\n number: numberFilterOperators.options.map((v) => v.value),\n};\n\nconst convertStringFilter = (\n filter: IStringFilter\n): Option<BaseFilterSpecification> => {\n if (filter.value === undefined) {\n return None;\n }\n\n switch (filter.operator) {\n case \"$eq\": {\n return Some(\n new StringEqual(\n filter.field,\n new StringFieldValue(filter.value),\n filter.relation\n )\n );\n }\n case \"$neq\": {\n return Some(\n new StringNotEqual(\n filter.field,\n new StringFieldValue(filter.value),\n filter.relation\n )\n );\n }\n case \"$contains\": {\n return Some(\n new StringContain(filter.field, new StringFieldValue(filter.value))\n );\n }\n case \"$not_contains\": {\n return Some(\n new StringContain(\n filter.field,\n new StringFieldValue(filter.value)\n ).not() as unknown as BaseFilterSpecification\n );\n }\n case \"$starts_with\": {\n return Some(\n new StringStartsWith(filter.field, new StringFieldValue(filter.value))\n );\n }\n case \"$ends_with\": {\n return Some(\n new StringEndsWith(filter.field, new StringFieldValue(filter.value))\n );\n }\n case \"$regex\": {\n return Some(\n new StringRegex(filter.field, new StringFieldValue(filter.value))\n );\n }\n case \"$is_empty\": {\n return Some(new StringEmpty(filter.field));\n }\n case \"$is_not_empty\": {\n return Some(\n new StringEmpty(\n filter.field\n ).not() as unknown as BaseFilterSpecification\n );\n }\n\n default:\n return None;\n }\n};\n\nconst convertNumberFilter = (\n filter: INumberFilter\n): Option<BaseFilterSpecification> => {\n if (filter === undefined) {\n return None;\n }\n\n switch (filter.operator) {\n case \"$eq\":\n return Some(\n new NumberEqual(filter.field, new NumberFieldValue(filter.value))\n );\n case \"$neq\": {\n // @ts-ignore\n return Some(\n new NumberEqual(filter.field, new NumberFieldValue(filter.value)).not()\n );\n }\n case \"$gt\": {\n return Some(\n new NumberGreaterThan(filter.field, new NumberFieldValue(filter.value))\n );\n }\n case \"$gte\": {\n return Some(\n new NumberGreaterThanOrEqual(\n filter.field,\n new NumberFieldValue(filter.value)\n )\n );\n }\n case \"$lt\": {\n return Some(\n new NumberLessThan(filter.field, new NumberFieldValue(filter.value))\n );\n }\n case \"$lte\": {\n return Some(\n new NumberLessThanOrEqual(\n filter.field,\n new NumberFieldValue(filter.value)\n )\n );\n }\n case \"$is_empty\": {\n return Some(new NumberEmpty(filter.field));\n }\n case \"$is_not_empty\": {\n // @ts-ignore\n return Some(new NumberEmpty(filter.field).not());\n }\n default:\n return None;\n }\n};\n\nconst convertBooleanFilter = (\n filter: IBooleanFilter\n): Option<BaseFilterSpecification> => {\n if (filter === undefined) {\n return None;\n }\n\n switch (filter.operator) {\n case \"$eq\": {\n return Some(\n new BooleanEqual(filter.field, new BooleanFieldValue(filter.value))\n );\n }\n case \"$neq\": {\n return Some(\n new BooleanNotEqual(filter.field, new BooleanFieldValue(filter.value))\n );\n }\n }\n\n return Some(\n new BooleanEqual(filter.field, new BooleanFieldValue(filter.value))\n );\n};\n\nconst convertDateFilter = (\n filter: IDateFilter\n): Option<BaseFilterSpecification> => {\n if (filter === undefined) {\n return None;\n }\n\n switch (filter.operator) {\n case \"$eq\": {\n return Some(\n new DateEqual(\n filter.field,\n DateFieldValue.fromNullableString(filter.value as string),\n filter.relation\n )\n );\n }\n case \"$between\": {\n return Some(\n new DateBetween(\n filter.field,\n new Date((filter.value as [string, string])[0]),\n new Date((filter.value as [string, string])[1])\n )\n );\n }\n }\n\n return None;\n};\n\nconst convertFilter = (filter: IFilter): Option<BaseFilterSpecification> => {\n return match(filter)\n .returnType<Option<BaseFilterSpecification>>()\n .with({ type: \"number\" }, (f) => convertNumberFilter(f))\n .with({ type: \"string\" }, (f) => convertStringFilter(f))\n .with({ type: \"date\" }, (f) => convertDateFilter(f))\n .with({ type: \"boolean\" }, (f) => convertBooleanFilter(f))\n .otherwise(() => None);\n};\n\nconst convertFilterOrGroup = (\n filterOrGroup: IFilterOrGroup\n): Option<BaseFilterSpecification> => {\n if (isGroup(filterOrGroup)) {\n return convertFilterOrGroupList(\n filterOrGroup.children,\n filterOrGroup.conjunction\n );\n } else if (isFilter(filterOrGroup)) {\n return convertFilter(filterOrGroup);\n }\n\n return None;\n};\n\nconst convertFilterOrGroupList = (\n filterOrGroupList: IFilterOrGroupList = [],\n conjunction: IConjunction = \"$and\"\n): Option<BaseFilterSpecification> => {\n let spec: Option<BaseFilterSpecification> = None;\n for (const filter of filterOrGroupList) {\n if (spec.isNone()) {\n spec = convertFilterOrGroup(filter);\n if (conjunction === \"$not\") {\n // @ts-ignore\n return spec.map((s) => s.not());\n }\n } else {\n if (isFilter(filter)) {\n // @ts-ignore\n spec = spec.map((left) => {\n const right = convertFilterOrGroup(filter);\n if (right.isSome()) {\n if (conjunction === \"$and\") {\n return left.and(right.unwrap());\n } else if (conjunction === \"$or\") {\n return left.or(right.unwrap());\n }\n\n return left.and(right.unwrap().not());\n }\n\n return left;\n });\n } else if (isGroup(filter)) {\n spec = convertFilterOrGroupList(filter.children, filter.conjunction);\n }\n }\n }\n\n return spec;\n};\n\nexport const convertFilterSpec = (\n filter: IRootFilter\n): Option<BaseFilterSpecification> => {\n if (Array.isArray(filter)) {\n return convertFilterOrGroupList(filter);\n }\n\n return convertFilterOrGroup(filter);\n};\n\nfunction isEmptyNative(value: unknown): boolean {\n if (value == null) return true;\n if (Array.isArray(value)) return value.length === 0;\n if (typeof value === \"object\") {\n for (const _ in value as object) {\n return false;\n }\n return true;\n }\n return false;\n}\n\nexport const isEmptyFilter = (filter: IRootFilter) => isEmptyNative(filter);\n","import { type Option } from \"@globalart/oxide\";\nimport { ValueObject } from \"../value-objects/value-object\";\nimport {\n type IFilter,\n type IRootFilter,\n convertFilterSpec,\n isGroup,\n} from \"./filter\";\nimport { type BaseFilterSpecification } from \"./filter-specification.base\";\n\nexport class RootFilter<T extends IFilter = IFilter> extends ValueObject<\n IRootFilter<T>\n> {\n get value() {\n return this.props;\n }\n\n get group() {\n if (Array.isArray(this.value)) {\n return { conjunction: \"$and\", children: this.value };\n }\n if (isGroup(this.value)) {\n return this.value;\n }\n\n return { conjunction: \"$and\", children: [this.value] };\n }\n\n getSpec(): Option<BaseFilterSpecification> {\n return convertFilterSpec(this.value);\n }\n\n public toJSON() {\n return this.props;\n }\n}\n","import { z } from \"zod\";\n\nexport const paginationSchema = z.object({\n limit: z.coerce.number().positive().int().default(10).optional(),\n offset: z.coerce.number().nonnegative().int().default(0).optional(),\n});\n\nexport type IPagination = z.infer<typeof paginationSchema>;\n\nexport const paginatedResponseSchema = paginationSchema.extend({\n total: z.number().nonnegative().int(),\n});\n","export abstract class Query {}\n","import { z } from \"zod\";\n\n// TODO: base sort with possibility limit sorting fields for concrete entity\nexport const sortingSchema = z.record(z.string(), z.enum([\"ASC\", \"DESC\"]));\n\nexport type ISorting = z.infer<typeof sortingSchema>;\n","import { ValueObject } from \"./value-object.js\";\n\nexport class BoolVO extends ValueObject<boolean> {\n constructor(value: boolean) {\n super({ value });\n }\n\n public get value(): boolean {\n return this.props.value;\n }\n\n public static fromBoolean(value: boolean) {\n return new BoolVO(value);\n }\n\n public static True(): BoolVO {\n return new BoolVO(true);\n }\n\n public static False(): BoolVO {\n return new BoolVO(false);\n }\n}\n","import { ValueObject } from \"./value-object.js\";\n\nexport class DateVO extends ValueObject<Date> {\n constructor(value: Date | string | number) {\n const date = new Date(value);\n super({ value: date });\n }\n\n public get value(): Date {\n return this.props.value;\n }\n\n public static fromDate(value: Date) {\n return new DateVO(value);\n }\n\n public static now(): DateVO {\n return new DateVO(Date.now());\n }\n}\n","import { ValueObject, ValueObjectProps } from \"./value-object\";\n\nexport abstract class ID<T = any> extends ValueObject<T> {\n constructor(value: T) {\n super({ value } as ValueObjectProps<T>);\n }\n\n public get value(): T {\n return this.unpack();\n }\n}\n","import { customAlphabet } from \"nanoid\";\nimport { ID } from \"./id.vo.js\";\n\nexport abstract class NanoID extends ID {\n private static ALPHABETS = \"0123456789abcdefghijklmnopqrstuvwxyz\";\n\n static createId(prefix = \"\", size = 5) {\n const id = customAlphabet(NanoID.ALPHABETS, size)();\n\n return prefix + id;\n }\n\n public get value(): number {\n return this.props.value;\n }\n}\n","import { ValueObject } from \"./value-object.js\";\n\nexport class IntegerVO extends ValueObject<number> {\n constructor(value: number) {\n super({ value });\n }\n\n public get value(): number {\n return this.props.value;\n }\n\n public static fromNumber(value: number) {\n return new IntegerVO(value);\n }\n}\n","import { ValueObject } from \"./value-object.js\";\n\nexport class StringVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n public get value(): string {\n return this.props.value;\n }\n\n public static fromString(value: string) {\n return new StringVO(value);\n }\n\n public static empty(): StringVO {\n return new StringVO(\"\");\n }\n}\n","import { ID } from \"./id.vo.js\";\nimport { v4 } from \"uuid\";\n\nexport abstract class UUID extends ID {\n static createId() {\n return v4();\n }\n\n public get value(): number {\n return this.props.value;\n }\n}\n","import z from \"zod\";\nimport { ValueObject } from \"./value-object.js\";\n\nconst emailSchema = z.email();\n\nexport class EmailVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n static create(value: string) {\n return new this(emailSchema.parse(value));\n }\n\n public get value(): string {\n return this.props.value;\n }\n}\n","import z from \"zod\";\nimport { ValueObject } from \"./value-object.js\";\n\nconst colorSchema = z.hex();\n\nexport class ColorVO extends ValueObject<string> {\n constructor(value: string) {\n super({ value });\n }\n\n static create(value: string) {\n return new this(colorSchema.parse(value));\n }\n\n public get value(): string {\n return this.props.value;\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@globalart/ddd",
3
- "version": "1.0.30",
3
+ "version": "1.1.0",
4
4
  "description": "Advanced Domain-Driven Design",
5
5
  "author": {
6
6
  "name": "GlobalArt, Inc"
@@ -36,7 +36,7 @@
36
36
  "build:watch": "tsdown --watch",
37
37
  "prepublishOnly": "npm run build",
38
38
  "publish:dev": "npm version prerelease --preid=dev && npm publish --tag dev --access public",
39
- "publish:npm": "release-it"
39
+ "publish:npm": "release-it --config ../../.release-it.json"
40
40
  },
41
41
  "publishConfig": {
42
42
  "access": "public"
@@ -45,14 +45,14 @@
45
45
  "date-fns": "4.1.0",
46
46
  "dequal": "2.0.3",
47
47
  "nanoid": "5.1.5",
48
- "oxide.ts": "1.1.0",
48
+ "@globalart/oxide": "1.0.0",
49
49
  "prettier": "^3.6.2",
50
- "ts-pattern": "5.8.0",
50
+ "ts-pattern": "5.9.0",
51
51
  "uuid": "13.0.0",
52
- "zod": "4.1.8"
52
+ "zod": "4.1.12"
53
53
  },
54
54
  "devDependencies": {
55
- "release-it": "19.0.4",
56
- "tsdown": "0.15.1"
55
+ "release-it": "19.0.5",
56
+ "tsdown": "0.15.12"
57
57
  }
58
58
  }
@@ -1,4 +1,4 @@
1
- import { Ok, type Result } from 'oxide.ts';
1
+ import { Ok, type Result } from 'globalart/oxide';
2
2
  import { {{pascalCase name}} } from './{{kebabCase name}}';
3
3
  import { ICreate{{pascalCase name}}Internal } from './{{kebabCase name}}.schema';
4
4
  import { new{{pascalCase name}}Spec } from './specifications';
@@ -1,4 +1,4 @@
1
- import { Option } from 'oxide.ts';
1
+ import { Option } from 'globalart/oxide';
2
2
  import { IQuery{{pascalCase name}} } from './{{kebabCase name}}.schema';
3
3
  import { I{{pascalCase name}}Spec } from './specifications';
4
4
  import { BaseFilterSpecification, IRepositoryOption, PaginatedRepositoryMethodResult } from '@globalart/ddd';
@@ -1,4 +1,4 @@
1
- import { Option } from 'oxide.ts';
1
+ import { Option } from 'globalart/oxide';
2
2
  import { {{pascalCase name}} } from './{{kebabCase name}}';
3
3
  import { I{{pascalCase name}}Spec } from './specifications';
4
4
 
@@ -1,5 +1,5 @@
1
1
  import { CompositeSpecification, ID } from '@globalart/ddd';
2
- import { Ok, Result } from 'oxide.ts';
2
+ import { Ok, Result } from 'globalart/oxide';
3
3
  import { {{pascalCase name}} } from '../{{kebabCase name}}';
4
4
  import { I{{pascalCase name}}SpecVisitor } from './interface';
5
5