@thisisagile/easy 18.5.0 → 18.7.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/{chunk-WGDPSWDJ.mjs → chunk-5N6Q7OXJ.mjs} +3 -3
- package/dist/{chunk-32JNUNPT.mjs → chunk-63DTRTSC.mjs} +4 -8
- package/dist/{chunk-32JNUNPT.mjs.map → chunk-63DTRTSC.mjs.map} +1 -1
- package/dist/{chunk-TRHTO2EW.mjs → chunk-6PMTGQVO.mjs} +3 -3
- package/dist/{chunk-6BH22YKR.mjs → chunk-6YTIRHPN.mjs} +4 -6
- package/dist/{chunk-6BH22YKR.mjs.map → chunk-6YTIRHPN.mjs.map} +1 -1
- package/dist/{chunk-QFOUEEXU.mjs → chunk-7TW4TBFN.mjs} +8 -16
- package/dist/{chunk-QFOUEEXU.mjs.map → chunk-7TW4TBFN.mjs.map} +1 -1
- package/dist/{chunk-PYDTZUGI.mjs → chunk-AYR4US3Z.mjs} +2 -2
- package/dist/{chunk-A4BT3ONR.mjs → chunk-B37NZCNW.mjs} +2 -2
- package/dist/{chunk-5KIMOU2T.mjs → chunk-FF3BNZ4H.mjs} +3 -5
- package/dist/{chunk-5KIMOU2T.mjs.map → chunk-FF3BNZ4H.mjs.map} +1 -1
- package/dist/{chunk-YYLTSI5X.mjs → chunk-FFD2T6YV.mjs} +2 -2
- package/dist/{chunk-FM3C7UJ5.mjs → chunk-FSWASMJZ.mjs} +2 -2
- package/dist/{chunk-TZMIA2P4.mjs → chunk-GF7JYGJU.mjs} +4 -8
- package/dist/{chunk-TZMIA2P4.mjs.map → chunk-GF7JYGJU.mjs.map} +1 -1
- package/dist/{chunk-XCE2MDKJ.mjs → chunk-GKQMIKIY.mjs} +2 -2
- package/dist/{chunk-NDOE57NV.mjs → chunk-IESVFCB3.mjs} +3 -3
- package/dist/{chunk-S5ROAZ73.mjs → chunk-IYUYA5OX.mjs} +5 -5
- package/dist/{chunk-G2NE3X2O.mjs → chunk-J5PB7ZVO.mjs} +4 -6
- package/dist/{chunk-G2NE3X2O.mjs.map → chunk-J5PB7ZVO.mjs.map} +1 -1
- package/dist/{chunk-YH6IWZDQ.mjs → chunk-JI7MC5EA.mjs} +2 -2
- package/dist/{chunk-6L2QT25T.mjs → chunk-JM6NAJQ3.mjs} +4 -6
- package/dist/{chunk-6L2QT25T.mjs.map → chunk-JM6NAJQ3.mjs.map} +1 -1
- package/dist/{chunk-7HAFUM6F.mjs → chunk-JNZUGKMO.mjs} +2 -2
- package/dist/{chunk-7JZYEQC2.mjs → chunk-KPXOQFEB.mjs} +4 -6
- package/dist/{chunk-7JZYEQC2.mjs.map → chunk-KPXOQFEB.mjs.map} +1 -1
- package/dist/{chunk-UK7JEY65.mjs → chunk-LHDTOERW.mjs} +3 -5
- package/dist/{chunk-UK7JEY65.mjs.map → chunk-LHDTOERW.mjs.map} +1 -1
- package/dist/{chunk-ZA3RBSEC.mjs → chunk-M2S4OLVZ.mjs} +2 -2
- package/dist/{chunk-WIBO6IZF.mjs → chunk-O4RWZGFC.mjs} +4 -6
- package/dist/{chunk-WIBO6IZF.mjs.map → chunk-O4RWZGFC.mjs.map} +1 -1
- package/dist/{chunk-GSRE7B6A.mjs → chunk-QBPSI5NM.mjs} +4 -4
- package/dist/{chunk-75E6U7F3.mjs → chunk-QLEGIYVU.mjs} +3 -5
- package/dist/{chunk-75E6U7F3.mjs.map → chunk-QLEGIYVU.mjs.map} +1 -1
- package/dist/{chunk-YP6UP7XS.mjs → chunk-QZPBFVZL.mjs} +2 -2
- package/dist/{chunk-DBQGZ42Q.mjs → chunk-RBJBAJOK.mjs} +2 -2
- package/dist/{chunk-3QWILJ53.mjs → chunk-RW4AKBCN.mjs} +3 -3
- package/dist/{chunk-M2YNFJCR.mjs → chunk-SBT3WGBP.mjs} +7 -7
- package/dist/{chunk-WSSDODHS.mjs → chunk-TNIG6FU2.mjs} +2 -2
- package/dist/{chunk-UL2QXFW5.mjs → chunk-TUO7ZPSP.mjs} +541 -105
- package/dist/chunk-TUO7ZPSP.mjs.map +1 -0
- package/dist/{chunk-KMYWEWV2.mjs → chunk-WOUH6UVC.mjs} +3 -5
- package/dist/{chunk-KMYWEWV2.mjs.map → chunk-WOUH6UVC.mjs.map} +1 -1
- package/dist/{chunk-CUA35DFA.mjs → chunk-XQJ5LQEQ.mjs} +2 -2
- package/dist/{chunk-NTNX63YD.mjs → chunk-ZBOGLMG2.mjs} +4 -4
- package/dist/{chunk-DRKXISJA.mjs → chunk-ZRH6FGUK.mjs} +4 -4
- package/dist/{chunk-LHBXZT7D.mjs → chunk-ZZ73Z5CU.mjs} +2 -2
- package/dist/data/Condition.mjs +6 -5
- package/dist/data/Database.mjs +5 -6
- package/dist/data/Field.mjs +6 -5
- package/dist/data/Field.mjs.map +1 -1
- package/dist/data/InMemoryGateway.mjs +5 -10
- package/dist/data/InMemoryGateway.mjs.map +1 -1
- package/dist/domain/Audit.mjs +9 -14
- package/dist/domain/Child.mjs +6 -11
- package/dist/domain/Child.mjs.map +1 -1
- package/dist/domain/DateTime.mjs +5 -10
- package/dist/domain/Entity.mjs +9 -14
- package/dist/domain/Entity.mjs.map +1 -1
- package/dist/domain/Repo.mjs +8 -15
- package/dist/domain/Repo.mjs.map +1 -1
- package/dist/domain/Struct.mjs +5 -10
- package/dist/domain/Typo.mjs +5 -10
- package/dist/domain/Typo.mjs.map +1 -1
- package/dist/http/CacheControl.mjs +7 -13
- package/dist/http/CacheControl.mjs.map +1 -1
- package/dist/http/ContentType.mjs +5 -6
- package/dist/http/HttpStatus.mjs +5 -6
- package/dist/http/HttpVerb.mjs +5 -6
- package/dist/http/LocalRequestStore.mjs +3 -8
- package/dist/http/LocalRequestStore.mjs.map +1 -1
- package/dist/http/RequestOptions.mjs +5 -10
- package/dist/http/RestResult.mjs +5 -10
- package/dist/http/toResponse.mjs +6 -11
- package/dist/index.js +528 -523
- package/dist/index.js.map +1 -1
- package/dist/process/App.mjs +4 -9
- package/dist/process/App.mjs.map +1 -1
- package/dist/process/Manage.mjs +5 -10
- package/dist/process/Manage.mjs.map +1 -1
- package/dist/process/Scope.mjs +4 -9
- package/dist/process/Search.mjs +5 -10
- package/dist/process/UseCase.mjs +6 -13
- package/dist/process/UseCase.mjs.map +1 -1
- package/dist/resources/Req.mjs +5 -10
- package/dist/resources/Req.mjs.map +1 -1
- package/dist/services/Api.mjs +13 -18
- package/dist/services/ApiGateway.mjs +16 -21
- package/dist/services/AxiosProvider.mjs +11 -16
- package/dist/services/MappedRouteGateway.mjs +19 -24
- package/dist/services/MappedRouteGateway.mjs.map +1 -1
- package/dist/services/RouteGateway.mjs +17 -22
- package/dist/services/ViewRouteGateway.mjs +19 -25
- package/dist/services/ViewRouteGateway.mjs.map +1 -1
- package/dist/sql/Column.mjs +4 -9
- package/dist/sql/Count.mjs +7 -5
- package/dist/sql/Delete.mjs +6 -4
- package/dist/sql/Insert.mjs +6 -4
- package/dist/sql/Select.mjs +6 -4
- package/dist/sql/SqlQuery.mjs +5 -3
- package/dist/sql/Table.mjs +14 -19
- package/dist/sql/Table.mjs.map +1 -1
- package/dist/sql/TableGateway.mjs +6 -12
- package/dist/sql/TableGateway.mjs.map +1 -1
- package/dist/sql/Update.mjs +6 -4
- package/dist/types/Cache.mjs +4 -4
- package/dist/types/CacheAge.mjs +5 -10
- package/dist/types/Case.mjs +3 -8
- package/dist/types/Context.mjs +3 -8
- package/dist/types/Enum.mjs +4 -5
- package/dist/types/Environment.mjs +4 -5
- package/dist/types/Environment.mjs.map +1 -1
- package/dist/types/Exception.mjs +3 -8
- package/dist/types/Gateway.mjs +4 -9
- package/dist/types/IsEqual.mjs +3 -9
- package/dist/types/Json.mjs +5 -4
- package/dist/types/List.mjs +4 -2
- package/dist/types/Meta.mjs +4 -4
- package/dist/types/Number.mjs +4 -9
- package/dist/types/Object.mjs +4 -3
- package/dist/types/PageList.mjs +4 -9
- package/dist/types/Parser.mjs +3 -8
- package/dist/types/Parser.mjs.map +1 -1
- package/dist/types/Repository.mjs +4 -9
- package/dist/types/Result.mjs +3 -8
- package/dist/types/Results.mjs +3 -8
- package/dist/types/Tag.mjs +4 -4
- package/dist/types/Template.mjs +3 -8
- package/dist/types/ToText.mjs +3 -8
- package/dist/types/Try.mjs +3 -8
- package/dist/types/Uri.mjs +6 -14
- package/dist/types/Uri.mjs.map +1 -1
- package/dist/utils/If.d.ts +2 -0
- package/dist/utils/If.mjs +6 -2
- package/dist/utils/Mapper.mjs +6 -6
- package/dist/utils/Period.mjs +5 -10
- package/dist/utils/Period.mjs.map +1 -1
- package/dist/utils/Promise.mjs +4 -4
- package/dist/utils/Seconds.mjs +5 -3
- package/dist/utils/Sentence.mjs +3 -8
- package/dist/utils/Sentence.mjs.map +1 -1
- package/dist/utils/View.mjs +6 -12
- package/dist/validation/Contraints.mjs +4 -9
- package/dist/validation/Validate.mjs +3 -8
- package/dist/validation/When.mjs +3 -8
- package/package.json +1 -1
- package/src/utils/If.ts +7 -0
- package/dist/chunk-FECVT2OY.mjs +0 -58
- package/dist/chunk-FECVT2OY.mjs.map +0 -1
- package/dist/chunk-GRMWYEPU.mjs +0 -37
- package/dist/chunk-GRMWYEPU.mjs.map +0 -1
- package/dist/chunk-HNW64DUZ.mjs +0 -54
- package/dist/chunk-HNW64DUZ.mjs.map +0 -1
- package/dist/chunk-MQ6KZAFL.mjs +0 -310
- package/dist/chunk-MQ6KZAFL.mjs.map +0 -1
- package/dist/chunk-NYKMQY5N.mjs +0 -23
- package/dist/chunk-NYKMQY5N.mjs.map +0 -1
- package/dist/chunk-UL2QXFW5.mjs.map +0 -1
- package/dist/chunk-VN4JL4JB.mjs +0 -68
- package/dist/chunk-VN4JL4JB.mjs.map +0 -1
- /package/dist/{chunk-WGDPSWDJ.mjs.map → chunk-5N6Q7OXJ.mjs.map} +0 -0
- /package/dist/{chunk-TRHTO2EW.mjs.map → chunk-6PMTGQVO.mjs.map} +0 -0
- /package/dist/{chunk-PYDTZUGI.mjs.map → chunk-AYR4US3Z.mjs.map} +0 -0
- /package/dist/{chunk-A4BT3ONR.mjs.map → chunk-B37NZCNW.mjs.map} +0 -0
- /package/dist/{chunk-YYLTSI5X.mjs.map → chunk-FFD2T6YV.mjs.map} +0 -0
- /package/dist/{chunk-FM3C7UJ5.mjs.map → chunk-FSWASMJZ.mjs.map} +0 -0
- /package/dist/{chunk-XCE2MDKJ.mjs.map → chunk-GKQMIKIY.mjs.map} +0 -0
- /package/dist/{chunk-NDOE57NV.mjs.map → chunk-IESVFCB3.mjs.map} +0 -0
- /package/dist/{chunk-S5ROAZ73.mjs.map → chunk-IYUYA5OX.mjs.map} +0 -0
- /package/dist/{chunk-YH6IWZDQ.mjs.map → chunk-JI7MC5EA.mjs.map} +0 -0
- /package/dist/{chunk-7HAFUM6F.mjs.map → chunk-JNZUGKMO.mjs.map} +0 -0
- /package/dist/{chunk-ZA3RBSEC.mjs.map → chunk-M2S4OLVZ.mjs.map} +0 -0
- /package/dist/{chunk-GSRE7B6A.mjs.map → chunk-QBPSI5NM.mjs.map} +0 -0
- /package/dist/{chunk-YP6UP7XS.mjs.map → chunk-QZPBFVZL.mjs.map} +0 -0
- /package/dist/{chunk-DBQGZ42Q.mjs.map → chunk-RBJBAJOK.mjs.map} +0 -0
- /package/dist/{chunk-3QWILJ53.mjs.map → chunk-RW4AKBCN.mjs.map} +0 -0
- /package/dist/{chunk-M2YNFJCR.mjs.map → chunk-SBT3WGBP.mjs.map} +0 -0
- /package/dist/{chunk-WSSDODHS.mjs.map → chunk-TNIG6FU2.mjs.map} +0 -0
- /package/dist/{chunk-CUA35DFA.mjs.map → chunk-XQJ5LQEQ.mjs.map} +0 -0
- /package/dist/{chunk-NTNX63YD.mjs.map → chunk-ZBOGLMG2.mjs.map} +0 -0
- /package/dist/{chunk-DRKXISJA.mjs.map → chunk-ZRH6FGUK.mjs.map} +0 -0
- /package/dist/{chunk-LHBXZT7D.mjs.map → chunk-ZZ73Z5CU.mjs.map} +0 -0
package/dist/index.js
CHANGED
|
@@ -148,6 +148,7 @@ __export(src_exports, {
|
|
|
148
148
|
ifA: () => ifA,
|
|
149
149
|
ifDefined: () => ifDefined,
|
|
150
150
|
ifEither: () => ifEither,
|
|
151
|
+
ifEqual: () => ifEqual,
|
|
151
152
|
ifFalse: () => ifFalse,
|
|
152
153
|
ifGet: () => ifGet,
|
|
153
154
|
ifNotEmpty: () => ifNotEmpty,
|
|
@@ -671,26 +672,6 @@ var asList = (c, items = []) => toList(toArray(items).map((i) => new c(i)));
|
|
|
671
672
|
var maxValue = (l, key) => l.desc(key).first()?.[key];
|
|
672
673
|
var minValue = (l, key) => l.asc(key).first()?.[key];
|
|
673
674
|
|
|
674
|
-
// src/utils/If.ts
|
|
675
|
-
function ifTrue(o, f, alt) {
|
|
676
|
-
return isTrue(o) ? ofConstruct(f, o) : ofConstruct(alt, o);
|
|
677
|
-
}
|
|
678
|
-
function ifFalse(o, f, alt) {
|
|
679
|
-
return !isTrue(o) ? ofConstruct(f, o) : ofConstruct(alt, o);
|
|
680
|
-
}
|
|
681
|
-
function ifDefined(o, f, alt) {
|
|
682
|
-
return isDefined(o) ? ofConstruct(f, o) : ofConstruct(alt);
|
|
683
|
-
}
|
|
684
|
-
function ifNotEmpty(o, f = (o2) => o2, alt) {
|
|
685
|
-
return isNotEmpty(o) ? ofConstruct(f, o) : ofConstruct(alt, o);
|
|
686
|
-
}
|
|
687
|
-
function ifEither(os, f = (o) => o, alt) {
|
|
688
|
-
return use(
|
|
689
|
-
toList(os).first((o) => isPresent(o)),
|
|
690
|
-
(o) => isDefined(o) ? ofConstruct(f, o) : ofConstruct(alt, o)
|
|
691
|
-
);
|
|
692
|
-
}
|
|
693
|
-
|
|
694
675
|
// src/types/Object.ts
|
|
695
676
|
function entries(subject) {
|
|
696
677
|
return ifDefined(
|
|
@@ -716,124 +697,29 @@ function extractKeys(obj, keys2) {
|
|
|
716
697
|
);
|
|
717
698
|
}
|
|
718
699
|
|
|
719
|
-
// src/
|
|
720
|
-
var
|
|
721
|
-
var
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
const rest2 = { ...t };
|
|
736
|
-
keys2.forEach((key) => {
|
|
737
|
-
if (key in t) {
|
|
738
|
-
ifDefined(t[key], (v) => extracted[key] = v);
|
|
739
|
-
delete rest2[key];
|
|
740
|
-
}
|
|
741
|
-
});
|
|
742
|
-
return { [prop]: extracted, ...rest2 };
|
|
743
|
-
}
|
|
744
|
-
};
|
|
745
|
-
var toJson = json.merge;
|
|
746
|
-
var asJson = (j, alt = {}) => isJson(j) ? j.toJSON() : isObject(j) ? j : ofGet(alt, j);
|
|
747
|
-
var Any = class {
|
|
748
|
-
constructor(value) {
|
|
749
|
-
this.value = value;
|
|
750
|
-
}
|
|
751
|
-
merge = (...subjects) => any(json.merge(this.value, ...subjects));
|
|
752
|
-
delete = (key) => any(json.delete(this.value, key));
|
|
753
|
-
omit = (...keys2) => any(json.omit(this.value, ...keys2));
|
|
754
|
-
set = (key, value) => any(json.set(this.value, key, value));
|
|
755
|
-
toJSON() {
|
|
756
|
-
return this.value;
|
|
757
|
-
}
|
|
758
|
-
};
|
|
759
|
-
var takeFirstKey = (j, alt = "") => entries(asJson(j)).first(([, v]) => isDefined(v))?.[0] ?? alt;
|
|
760
|
-
var takeFirst = (j) => entries(j).first(([, v]) => isDefined(v));
|
|
761
|
-
var any = (value) => new Any(value);
|
|
762
|
-
|
|
763
|
-
// src/utils/Convert.ts
|
|
764
|
-
var Convert = class {
|
|
765
|
-
constructor(from, to) {
|
|
766
|
-
this.from = from;
|
|
767
|
-
this.to = to;
|
|
768
|
-
}
|
|
769
|
-
};
|
|
770
|
-
var convert = {
|
|
771
|
-
default: new Convert(
|
|
772
|
-
(a) => a,
|
|
773
|
-
(a) => a
|
|
774
|
-
),
|
|
775
|
-
ignore: new Convert(
|
|
776
|
-
() => void 0,
|
|
777
|
-
() => void 0
|
|
778
|
-
),
|
|
779
|
-
toBool: {
|
|
780
|
-
fromNumber: new Convert(
|
|
781
|
-
(b) => b ? 1 : 0,
|
|
782
|
-
(n) => n !== 0
|
|
783
|
-
),
|
|
784
|
-
fromString: new Convert(
|
|
785
|
-
(b) => b ? "true" : "false",
|
|
786
|
-
(s) => s === "true"
|
|
787
|
-
)
|
|
788
|
-
},
|
|
789
|
-
toDate: {
|
|
790
|
-
fromString: new Convert(
|
|
791
|
-
(s) => new Date(s).toISOString(),
|
|
792
|
-
(s) => s
|
|
793
|
-
)
|
|
794
|
-
},
|
|
795
|
-
toNumber: {
|
|
796
|
-
fromString: new Convert(
|
|
797
|
-
(n) => asString(n),
|
|
798
|
-
(s) => parseInt(s)
|
|
799
|
-
)
|
|
800
|
-
}
|
|
801
|
-
};
|
|
802
|
-
|
|
803
|
-
// src/data/Condition.ts
|
|
804
|
-
var Condition = class {
|
|
805
|
-
constructor(key, operator, value) {
|
|
806
|
-
this.key = key;
|
|
807
|
-
this.operator = operator;
|
|
808
|
-
this.value = value;
|
|
809
|
-
}
|
|
810
|
-
and = (...others) => new LogicalCondition("and", [this, ...others]);
|
|
811
|
-
or = (...others) => new LogicalCondition("or", [this, ...others]);
|
|
812
|
-
toJSON() {
|
|
813
|
-
return { [this.key]: { [`$${this.operator}`]: json.parse(this.value) } };
|
|
814
|
-
}
|
|
815
|
-
};
|
|
816
|
-
var LogicalCondition = class {
|
|
817
|
-
constructor(operator, conditions) {
|
|
818
|
-
this.operator = operator;
|
|
819
|
-
this.conditions = conditions;
|
|
820
|
-
}
|
|
821
|
-
toJSON() {
|
|
822
|
-
return { [`$${this.operator}`]: this.conditions.map((c) => c.toJSON()) };
|
|
823
|
-
}
|
|
824
|
-
};
|
|
825
|
-
var SortCondition = class extends Condition {
|
|
826
|
-
constructor(key, value) {
|
|
827
|
-
super(key, "", value);
|
|
828
|
-
this.key = key;
|
|
829
|
-
this.value = value;
|
|
830
|
-
}
|
|
831
|
-
toJSON() {
|
|
832
|
-
return { [this.key]: this.value };
|
|
833
|
-
}
|
|
700
|
+
// src/utils/Promise.ts
|
|
701
|
+
var resolve = (subject) => Promise.resolve(subject);
|
|
702
|
+
var reject = (e) => Promise.reject(e);
|
|
703
|
+
var tuple = {
|
|
704
|
+
2: (first, second) => Promise.all([first, second]),
|
|
705
|
+
3: (first, second, third) => Promise.all([first, second, third]),
|
|
706
|
+
4: (first, second, third, forth) => Promise.all([first, second, third, forth]),
|
|
707
|
+
5: (first, second, third, forth, fifth) => Promise.all([first, second, third, forth, fifth]),
|
|
708
|
+
all: (first, second) => Promise.all([first, Promise.all(second)]),
|
|
709
|
+
spread: (first, ...second) => Promise.all([first, Promise.all(toArray(second))]),
|
|
710
|
+
list: (list) => Promise.all([...list]).then(toList),
|
|
711
|
+
settled: (list) => Promise.allSettled([...list]).then((rs) => ({
|
|
712
|
+
fulfilled: toList(...rs.filter((r) => r.status === "fulfilled").map((r) => r.value)),
|
|
713
|
+
rejected: toList(...rs.filter((r) => r.status === "rejected").map((r) => asString(r.reason)))
|
|
714
|
+
})),
|
|
715
|
+
object: (obj) => use(keys(obj), (ks) => tuple.list(values(obj)).then((vs) => vs.reduce((acc, v, i) => on(acc, (a) => a[ks[i]] = v), {})))
|
|
834
716
|
};
|
|
835
|
-
var
|
|
836
|
-
var
|
|
717
|
+
var tuple2 = tuple[2];
|
|
718
|
+
var tuple3 = tuple[3];
|
|
719
|
+
var tuple4 = tuple[4];
|
|
720
|
+
var tuple5 = tuple[5];
|
|
721
|
+
var tupleO = tuple.object;
|
|
722
|
+
var settled = tuple.settled;
|
|
837
723
|
|
|
838
724
|
// src/types/Meta.ts
|
|
839
725
|
var import_reflect_metadata = require("reflect-metadata");
|
|
@@ -919,69 +805,305 @@ var Enum = class {
|
|
|
919
805
|
};
|
|
920
806
|
var isEnum = (e) => isDefined(e) && e instanceof Enum && isAn(e, "name", "id", "code");
|
|
921
807
|
|
|
922
|
-
// src/
|
|
923
|
-
var
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
808
|
+
// src/types/Try.ts
|
|
809
|
+
var Try = class _Try {
|
|
810
|
+
is = {
|
|
811
|
+
defined: (prop) => this.filter((v) => isDefined(prop ? prop(v) : v)),
|
|
812
|
+
empty: (prop) => this.filter((v) => isEmpty(prop ? prop(v) : v)),
|
|
813
|
+
valid: (prop) => this.filter((v) => validate(prop ? prop(v) : v).isValid),
|
|
814
|
+
true: (prop) => this.filter((v) => isTrue(prop ? prop(v) : v)),
|
|
815
|
+
false: (prop) => this.filter((v) => !isTrue(prop ? prop(v) : v)),
|
|
816
|
+
not: {
|
|
817
|
+
defined: (prop) => this.filter((v) => !isDefined(prop ? prop(v) : v)),
|
|
818
|
+
empty: (prop) => this.filter((v) => !isEmpty(prop ? prop(v) : v)),
|
|
819
|
+
valid: (prop) => this.filter((v) => !validate(prop ? prop(v) : v).isValid)
|
|
820
|
+
}
|
|
821
|
+
};
|
|
822
|
+
if = this.is;
|
|
823
|
+
static of = (c, ...args) => {
|
|
824
|
+
try {
|
|
825
|
+
const out = ofGet(c, ...args);
|
|
826
|
+
return new Success(out instanceof _Try ? out.value : out);
|
|
827
|
+
} catch (e) {
|
|
828
|
+
return new Failure(e);
|
|
829
|
+
}
|
|
830
|
+
};
|
|
938
831
|
};
|
|
939
|
-
var
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
var tupleO = tuple.object;
|
|
944
|
-
var settled = tuple.settled;
|
|
945
|
-
|
|
946
|
-
// src/validation/When.ts
|
|
947
|
-
var When = class _When {
|
|
948
|
-
constructor(subject, valid2 = true, results) {
|
|
949
|
-
this.subject = subject;
|
|
950
|
-
this.valid = valid2;
|
|
951
|
-
this.results = results;
|
|
832
|
+
var Success = class extends Try {
|
|
833
|
+
constructor(value) {
|
|
834
|
+
super();
|
|
835
|
+
this.value = value;
|
|
952
836
|
}
|
|
953
|
-
get
|
|
954
|
-
|
|
837
|
+
get error() {
|
|
838
|
+
throw new Error("No error found");
|
|
955
839
|
}
|
|
956
|
-
get
|
|
957
|
-
return
|
|
840
|
+
get isValid() {
|
|
841
|
+
return true;
|
|
958
842
|
}
|
|
959
|
-
|
|
960
|
-
return
|
|
843
|
+
map(f) {
|
|
844
|
+
return tryTo(f, this.value);
|
|
961
845
|
}
|
|
962
|
-
|
|
963
|
-
return this
|
|
846
|
+
recover(f) {
|
|
847
|
+
return this;
|
|
964
848
|
}
|
|
965
|
-
|
|
966
|
-
return this
|
|
849
|
+
recoverFrom(type, f) {
|
|
850
|
+
return this;
|
|
967
851
|
}
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
852
|
+
accept(f) {
|
|
853
|
+
return tryTo(() => {
|
|
854
|
+
f(this.value);
|
|
855
|
+
return this;
|
|
856
|
+
});
|
|
971
857
|
}
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
858
|
+
filter(predicate) {
|
|
859
|
+
return tryTo(() => {
|
|
860
|
+
if (predicate(this.value))
|
|
861
|
+
return this;
|
|
862
|
+
throw new Error(`Applying filter(${predicate.toString()}) failed.`);
|
|
863
|
+
});
|
|
864
|
+
}
|
|
865
|
+
or(value) {
|
|
866
|
+
return this.value;
|
|
867
|
+
}
|
|
868
|
+
orElse(value) {
|
|
869
|
+
return this.value;
|
|
870
|
+
}
|
|
871
|
+
orThrow(_error) {
|
|
872
|
+
return this.value;
|
|
873
|
+
}
|
|
874
|
+
};
|
|
875
|
+
var Failure = class _Failure extends Try {
|
|
876
|
+
constructor(error) {
|
|
877
|
+
super();
|
|
878
|
+
this.error = error;
|
|
879
|
+
}
|
|
880
|
+
get value() {
|
|
881
|
+
throw this.error;
|
|
882
|
+
}
|
|
883
|
+
get isValid() {
|
|
884
|
+
return false;
|
|
885
|
+
}
|
|
886
|
+
map(f) {
|
|
887
|
+
return new _Failure(this.error);
|
|
888
|
+
}
|
|
889
|
+
recover(f) {
|
|
890
|
+
return tryTo(f, this.error);
|
|
891
|
+
}
|
|
892
|
+
recoverFrom(type, f) {
|
|
893
|
+
return tryTo(() => this.error instanceof type ? this.recover(f) : this);
|
|
894
|
+
}
|
|
895
|
+
accept(f) {
|
|
896
|
+
return this;
|
|
897
|
+
}
|
|
898
|
+
filter(predicate) {
|
|
899
|
+
return this;
|
|
900
|
+
}
|
|
901
|
+
or(value) {
|
|
902
|
+
return ofGet(value);
|
|
903
|
+
}
|
|
904
|
+
orElse(value) {
|
|
905
|
+
return ofGet(value);
|
|
906
|
+
}
|
|
907
|
+
orThrow(error) {
|
|
908
|
+
throw ofConstruct(error);
|
|
909
|
+
}
|
|
910
|
+
};
|
|
911
|
+
var tryTo = (c, ...args) => Try.of(c, ...args);
|
|
912
|
+
|
|
913
|
+
// src/types/Template.ts
|
|
914
|
+
var Template = class {
|
|
915
|
+
constructor(template2, subject = {}, options = {}) {
|
|
916
|
+
this.template = template2;
|
|
917
|
+
this.subject = subject;
|
|
918
|
+
this.options = options;
|
|
919
|
+
}
|
|
920
|
+
knownPrefixes = /* @__PURE__ */ new Set(["typeof", "property", "actual", "subject"]);
|
|
921
|
+
toString = () => {
|
|
922
|
+
return entries(this.options).reduce((t, [k]) => this.option(t, k), this.object()).replace(" ", " ");
|
|
923
|
+
};
|
|
924
|
+
props = (tmpl, key, result = toList()) => {
|
|
925
|
+
const i1 = tmpl.indexOf(`{${key}`);
|
|
926
|
+
if (i1 < 0) {
|
|
927
|
+
return result;
|
|
928
|
+
}
|
|
929
|
+
const i2 = tmpl.indexOf("}", i1);
|
|
930
|
+
return this.props(tmpl.slice(i2 + 1), key, result.add(tmpl.substring(i1 + 1, i2)));
|
|
931
|
+
};
|
|
932
|
+
object = () => tryTo(() => this.template.replace(/\{this\./g, "{")).map((t) => t.replace(/\{([^{}]+)}/g, (match, p) => this.knownPrefixes.has(p.split(".")[0]) ? match : textValue(this.subject, p))).or("");
|
|
933
|
+
option = (tmpl, prop) => {
|
|
934
|
+
return this.props(tmpl, prop).reduce((t, p) => t.replace(`{${p}}`, textValue(this.options, p)), tmpl);
|
|
935
|
+
};
|
|
936
|
+
};
|
|
937
|
+
function template(tmpl, subject, options = {}) {
|
|
938
|
+
return new Template(asString(tmpl), subject, {
|
|
939
|
+
typeof: toName(subject),
|
|
940
|
+
subject: text(JSON.stringify(subject)),
|
|
941
|
+
...options
|
|
942
|
+
});
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
// src/types/ToText.ts
|
|
946
|
+
var ToText = class {
|
|
947
|
+
constructor(subject) {
|
|
948
|
+
this.subject = subject;
|
|
949
|
+
}
|
|
950
|
+
get cap() {
|
|
951
|
+
return this.map((s) => capitalize(s?.toLowerCase()));
|
|
952
|
+
}
|
|
953
|
+
get capFirst() {
|
|
954
|
+
return this.map((s) => capitalize(s));
|
|
955
|
+
}
|
|
956
|
+
get title() {
|
|
957
|
+
return this.map(
|
|
958
|
+
(s) => s.split(" ").map((w) => text(w).cap).join(" ")
|
|
959
|
+
);
|
|
960
|
+
}
|
|
961
|
+
get pascal() {
|
|
962
|
+
return this.title.replace(" ", "");
|
|
963
|
+
}
|
|
964
|
+
get lower() {
|
|
965
|
+
return this.map((s) => s.toLowerCase());
|
|
966
|
+
}
|
|
967
|
+
get upper() {
|
|
968
|
+
return this.map((s) => s.toUpperCase());
|
|
969
|
+
}
|
|
970
|
+
get camel() {
|
|
971
|
+
return this.title.trim.map((s) => `${s.charAt(0).toLowerCase()}${s.slice(1)}`);
|
|
972
|
+
}
|
|
973
|
+
get kebab() {
|
|
974
|
+
return this.lower.replace(" ", "-");
|
|
975
|
+
}
|
|
976
|
+
get strictKebab() {
|
|
977
|
+
return this.map((s) => s.replace(/[^a-z\d]+/gi, " ").trim()).kebab;
|
|
978
|
+
}
|
|
979
|
+
get slug() {
|
|
980
|
+
return this.map(
|
|
981
|
+
(s) => s.replace(/ß/g, "ss").normalize("NFKD").replace(/[\u0300-\u036F]/g, "").toLowerCase().replace(/[^a-z\d]+/g, "-").replace(/(^-)|(-$)/g, "")
|
|
982
|
+
);
|
|
983
|
+
}
|
|
984
|
+
get snake() {
|
|
985
|
+
return this.upper.replace(" ", "_");
|
|
986
|
+
}
|
|
987
|
+
get plural() {
|
|
988
|
+
return this.ifLike("") ?? this.add("s");
|
|
989
|
+
}
|
|
990
|
+
get space() {
|
|
991
|
+
return this.map((s) => s.replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/[_-]/g, " "));
|
|
992
|
+
}
|
|
993
|
+
get sentence() {
|
|
994
|
+
return this.isEmpty ? this : this.map((s) => `${s.charAt(0).toUpperCase()}${s.slice(1)}.`);
|
|
995
|
+
}
|
|
996
|
+
get initials() {
|
|
997
|
+
return this.map(
|
|
998
|
+
(s) => s.split(" ").map((w) => w[0]).join("")
|
|
999
|
+
);
|
|
1000
|
+
}
|
|
1001
|
+
get trim() {
|
|
1002
|
+
return this.map((s) => s.replace(/[- ,_#]/g, ""));
|
|
1003
|
+
}
|
|
1004
|
+
get trimSentence() {
|
|
1005
|
+
return this.map(
|
|
1006
|
+
(s) => s.replace(/[\u200B-\u200D\uFEFF]/g, "").replace(/[\s\u00A0]+/g, " ").replace(/\s+([.,;:!?])/g, "$1").trim()
|
|
1007
|
+
);
|
|
1008
|
+
}
|
|
1009
|
+
get isEmpty() {
|
|
1010
|
+
return isEmpty(this.toString());
|
|
1011
|
+
}
|
|
1012
|
+
parse = (subject, options = {}) => text(template(this.subject, subject, { typeof: toName(subject), ...options }));
|
|
1013
|
+
is = (...others) => others.some((o) => this.toString() === text(o).toString());
|
|
1014
|
+
equals = this.is;
|
|
1015
|
+
like = (...others) => others.some((o) => this.trim.lower.toString().includes(text(o).trim.lower.toString()));
|
|
1016
|
+
isLike = (...others) => others.some((o) => this.trim.lower.is(text(o).trim.lower));
|
|
1017
|
+
ifLike = (...others) => this.isLike(...others) ? this : void 0;
|
|
1018
|
+
endsWith = (end) => this.subject.endsWith(asString(end));
|
|
1019
|
+
startsWith = (end) => this.subject.startsWith(asString(end));
|
|
1020
|
+
first = (n) => this.map((s) => s.substring(0, n));
|
|
1021
|
+
last = (n) => this.map((s) => s.substring(s.length - n));
|
|
1022
|
+
map = (func) => text(ofGet(func, this.subject));
|
|
1023
|
+
replace = (search, replace) => this.map((s) => replaceAll(s, search, replace));
|
|
1024
|
+
add = (add, separator = "") => this.map((s) => isNotEmpty(add) ? `${s}${separator}${text(add)}` : s);
|
|
1025
|
+
with = (separator, ...other) => this.map(
|
|
1026
|
+
(s) => toList(s).add(...other.map((u) => text(u).toString())).filter((s2) => isNotEmpty(s2)).join(separator)
|
|
1027
|
+
);
|
|
1028
|
+
split = (separator = " ") => toList(this.subject.split(separator));
|
|
1029
|
+
toString() {
|
|
1030
|
+
return this.subject;
|
|
1031
|
+
}
|
|
1032
|
+
toJSON() {
|
|
1033
|
+
return this.subject;
|
|
1034
|
+
}
|
|
1035
|
+
};
|
|
1036
|
+
function text(subject, alt = "") {
|
|
1037
|
+
const sub = subject ? asString(subject) : alt;
|
|
1038
|
+
return new ToText(sub !== "[object Object]" ? sub : "");
|
|
1039
|
+
}
|
|
1040
|
+
function textValue(subject, prop) {
|
|
1041
|
+
const p = prop.split(".");
|
|
1042
|
+
const root = subject?.[p[0]];
|
|
1043
|
+
const initial = typeof root === "object" && root !== null ? root : text(root);
|
|
1044
|
+
return p.splice(1).reduce((t, s) => (typeof t === "object" && t !== null ? t : text(t))?.[s], initial)?.toString() ?? "";
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
// src/types/Exception.ts
|
|
1048
|
+
var Exception = class _Exception extends Enum {
|
|
1049
|
+
constructor(message, id, reason) {
|
|
1050
|
+
super(message, id ?? text(message).pascal.toString());
|
|
1051
|
+
this.message = message;
|
|
1052
|
+
this.reason = reason;
|
|
1053
|
+
}
|
|
1054
|
+
static AlreadyExists = new _Exception("Subject already exists");
|
|
1055
|
+
static DoesNotExist = new _Exception("Does not exist");
|
|
1056
|
+
static IsMissingId = new _Exception("Subject is missing an id");
|
|
1057
|
+
static IsNotImplemented = new _Exception("Is not implemented");
|
|
1058
|
+
static IsNotValid = new _Exception("Is not valid");
|
|
1059
|
+
static Unknown = new _Exception("Unknown error");
|
|
1060
|
+
static CouldNotExecute = (target) => new _Exception(`Could not execute ${target}.`, "CouldNotExecute");
|
|
1061
|
+
static CouldNotValidate = (target) => new _Exception(`Could not validate ${target}.`, "CouldNotValidate");
|
|
1062
|
+
static EnvironmentVariableNotFound = (variable) => new _Exception(`Environment variable ${text(variable).upper} could not be found.`, "EnvironmentVariableNotFound");
|
|
1063
|
+
because = (reason) => new _Exception(this.message, this.id, reason);
|
|
1064
|
+
};
|
|
1065
|
+
var isException = (e, t) => e instanceof Exception && (isDefined(t) ? e.equals(asString(t)) : true);
|
|
1066
|
+
var isDoesNotExist = (e) => e instanceof Exception && Exception.DoesNotExist.equals(e);
|
|
1067
|
+
|
|
1068
|
+
// src/validation/When.ts
|
|
1069
|
+
var When = class _When {
|
|
1070
|
+
constructor(subject, valid2 = true, results) {
|
|
1071
|
+
this.subject = subject;
|
|
1072
|
+
this.valid = valid2;
|
|
1073
|
+
this.results = results;
|
|
1074
|
+
}
|
|
1075
|
+
get not() {
|
|
1076
|
+
return this.clone(!this.valid);
|
|
1077
|
+
}
|
|
1078
|
+
get and() {
|
|
1079
|
+
return this.clone(this.valid);
|
|
1080
|
+
}
|
|
1081
|
+
get isDefined() {
|
|
1082
|
+
return this.clone(this.valid === isDefined(this.subject));
|
|
1083
|
+
}
|
|
1084
|
+
get isEmpty() {
|
|
1085
|
+
return this.clone(this.valid === isEmpty(this.subject));
|
|
1086
|
+
}
|
|
1087
|
+
get isTrue() {
|
|
1088
|
+
return this.clone(this.valid === !!this.subject);
|
|
1089
|
+
}
|
|
1090
|
+
get isValid() {
|
|
1091
|
+
this.results = validate(this.subject);
|
|
1092
|
+
return this.clone(this.valid === this.results.isValid);
|
|
1093
|
+
}
|
|
1094
|
+
isInstance = (c) => this.clone(this.valid === this.subject instanceof c);
|
|
1095
|
+
with = (pred) => this.clone(this.valid === ofGet(pred, this.subject));
|
|
1096
|
+
contains = (property) => this.clone(this.valid === isDefined(ofGet(property, this.subject)));
|
|
1097
|
+
in = (...items) => this.clone(this.valid === isIn(this.subject, toArray(...items)));
|
|
1098
|
+
is = (item) => this.clone(this.valid === (this.subject === item));
|
|
1099
|
+
reject = (error) => !this.valid ? resolve(this.subject) : reject(ofGet(error, this.subject) ?? this.results ?? Exception.Unknown);
|
|
1100
|
+
recover = (f) => resolve(!this.valid ? this.subject : f(this.subject));
|
|
1101
|
+
clone = (result = true) => new _When(this.subject, result, this.results);
|
|
1102
|
+
};
|
|
1103
|
+
var when = (subject) => new When(subject);
|
|
1104
|
+
|
|
1105
|
+
// src/types/Context.ts
|
|
1106
|
+
var DotEnvContext = class {
|
|
985
1107
|
domain = process.env.DOMAIN ?? "easy";
|
|
986
1108
|
name = process.env.ENVIRONMENT_NAME ?? "";
|
|
987
1109
|
host = process.env.HOST ?? "";
|
|
@@ -1088,13 +1210,57 @@ var Results = class {
|
|
|
1088
1210
|
var toResults = (...r) => new Results(...r);
|
|
1089
1211
|
var isResults = (r) => isDefined(r) && r instanceof Results;
|
|
1090
1212
|
|
|
1091
|
-
// src/types/
|
|
1092
|
-
var
|
|
1093
|
-
constructor(
|
|
1094
|
-
this.
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1213
|
+
// src/types/Value.ts
|
|
1214
|
+
var Value = class {
|
|
1215
|
+
constructor(value) {
|
|
1216
|
+
this.value = value;
|
|
1217
|
+
this.value = value;
|
|
1218
|
+
}
|
|
1219
|
+
get isValid() {
|
|
1220
|
+
return isDefined(this.value);
|
|
1221
|
+
}
|
|
1222
|
+
toJSON() {
|
|
1223
|
+
return this.value;
|
|
1224
|
+
}
|
|
1225
|
+
toString() {
|
|
1226
|
+
return asString(this.value);
|
|
1227
|
+
}
|
|
1228
|
+
};
|
|
1229
|
+
var isValue = (v) => v instanceof Value;
|
|
1230
|
+
|
|
1231
|
+
// src/types/Validatable.ts
|
|
1232
|
+
var isValidatable = (v) => isA(v, "isValid");
|
|
1233
|
+
|
|
1234
|
+
// src/validation/Validate.ts
|
|
1235
|
+
var asResults = (subject, template2, options = {}) => toResults(toResult(text(template2).parse(subject, options), toName(subject)));
|
|
1236
|
+
var validators = (subject) => meta(subject).keys("constraint").reduce((list, vs) => list.add(vs), toList());
|
|
1237
|
+
var runValidator = (v, subject) => {
|
|
1238
|
+
try {
|
|
1239
|
+
const actual = isFunction(subject[v.property]) ? subject[v.property]() : subject[v.property];
|
|
1240
|
+
const constraint2 = v.constraint(actual);
|
|
1241
|
+
return isResults(constraint2) ? constraint2 : !constraint2 ? asResults(subject, v.text, {
|
|
1242
|
+
...v,
|
|
1243
|
+
actual
|
|
1244
|
+
}) : toResults();
|
|
1245
|
+
} catch (e) {
|
|
1246
|
+
return asResults(subject, asString(e));
|
|
1247
|
+
}
|
|
1248
|
+
};
|
|
1249
|
+
var constraints = (subject) => validators(subject).map((vs) => runValidator(vs, subject)).reduce((rs, r) => rs.add(...r.results), toResults());
|
|
1250
|
+
var validate = (subject) => choose(subject).is.not.defined(
|
|
1251
|
+
(s) => s,
|
|
1252
|
+
() => toResults("Subject is not defined.")
|
|
1253
|
+
).type(isEnum, (e) => e.isValid ? toResults() : asResults(e, "This is not a valid {typeof}.")).type(isValue, (v) => v.isValid ? toResults() : asResults(v, "This is not a valid {typeof}.")).type(isArray, (a) => a.map((i) => validate(i)).reduce((rs, r) => rs.add(...r.results), toResults())).type(isValidatable, (v) => constraints(v)).else(toResults());
|
|
1254
|
+
var validateReject = (subject) => when(subject).not.isValid.reject();
|
|
1255
|
+
var isValid = (t) => validate(t).isValid;
|
|
1256
|
+
|
|
1257
|
+
// src/types/Case.ts
|
|
1258
|
+
var CaseBuilder = class {
|
|
1259
|
+
constructor(v) {
|
|
1260
|
+
this.v = v;
|
|
1261
|
+
}
|
|
1262
|
+
is = {
|
|
1263
|
+
true: (pred, out) => this.case(pred, out),
|
|
1098
1264
|
false: (pred, out) => this.case(!ofGet(pred, this.v), out),
|
|
1099
1265
|
truthy: (prop, out) => this.case(!!prop(this.v), out),
|
|
1100
1266
|
falsy: (prop, out) => this.case(!prop(this.v), out),
|
|
@@ -1157,340 +1323,189 @@ var Case = class {
|
|
|
1157
1323
|
case(pred, out) {
|
|
1158
1324
|
return tryTo(pred, this.value).is.true().map(() => ofGet(out, this.value)).map((res) => new Found(this.value, res)).or(this);
|
|
1159
1325
|
}
|
|
1160
|
-
type(guard, out) {
|
|
1161
|
-
return tryTo(guard, this.value).is.true().map(() => out(this.value)).map((res) => new Found(this.value, res)).or(this);
|
|
1162
|
-
}
|
|
1163
|
-
equals(value, out) {
|
|
1164
|
-
return this.case(this.value === value, out);
|
|
1165
|
-
}
|
|
1166
|
-
else(alt) {
|
|
1167
|
-
return ofGet(alt, this.value);
|
|
1168
|
-
}
|
|
1169
|
-
};
|
|
1170
|
-
var Found = class extends Case {
|
|
1171
|
-
constructor(value, outcome) {
|
|
1172
|
-
super(value, outcome);
|
|
1173
|
-
this.value = value;
|
|
1174
|
-
this.outcome = outcome;
|
|
1175
|
-
}
|
|
1176
|
-
case(pred, out) {
|
|
1177
|
-
return this;
|
|
1178
|
-
}
|
|
1179
|
-
type(guard, out) {
|
|
1180
|
-
return this;
|
|
1181
|
-
}
|
|
1182
|
-
equals(value, out) {
|
|
1183
|
-
return this;
|
|
1184
|
-
}
|
|
1185
|
-
else(alt) {
|
|
1186
|
-
return this.outcome;
|
|
1187
|
-
}
|
|
1188
|
-
};
|
|
1189
|
-
var choose = (value) => new CaseBuilder(value);
|
|
1190
|
-
|
|
1191
|
-
// src/types/Value.ts
|
|
1192
|
-
var Value = class {
|
|
1193
|
-
constructor(value) {
|
|
1194
|
-
this.value = value;
|
|
1195
|
-
this.value = value;
|
|
1196
|
-
}
|
|
1197
|
-
get isValid() {
|
|
1198
|
-
return isDefined(this.value);
|
|
1199
|
-
}
|
|
1200
|
-
toJSON() {
|
|
1201
|
-
return this.value;
|
|
1202
|
-
}
|
|
1203
|
-
toString() {
|
|
1204
|
-
return asString(this.value);
|
|
1205
|
-
}
|
|
1206
|
-
};
|
|
1207
|
-
var isValue = (v) => v instanceof Value;
|
|
1208
|
-
|
|
1209
|
-
// src/types/Validatable.ts
|
|
1210
|
-
var isValidatable = (v) => isA(v, "isValid");
|
|
1211
|
-
|
|
1212
|
-
// src/validation/Validate.ts
|
|
1213
|
-
var asResults = (subject, template2, options = {}) => toResults(toResult(text(template2).parse(subject, options), toName(subject)));
|
|
1214
|
-
var validators = (subject) => meta(subject).keys("constraint").reduce((list, vs) => list.add(vs), toList());
|
|
1215
|
-
var runValidator = (v, subject) => {
|
|
1216
|
-
try {
|
|
1217
|
-
const actual = isFunction(subject[v.property]) ? subject[v.property]() : subject[v.property];
|
|
1218
|
-
const constraint2 = v.constraint(actual);
|
|
1219
|
-
return isResults(constraint2) ? constraint2 : !constraint2 ? asResults(subject, v.text, {
|
|
1220
|
-
...v,
|
|
1221
|
-
actual
|
|
1222
|
-
}) : toResults();
|
|
1223
|
-
} catch (e) {
|
|
1224
|
-
return asResults(subject, asString(e));
|
|
1225
|
-
}
|
|
1226
|
-
};
|
|
1227
|
-
var constraints = (subject) => validators(subject).map((vs) => runValidator(vs, subject)).reduce((rs, r) => rs.add(...r.results), toResults());
|
|
1228
|
-
var validate = (subject) => choose(subject).is.not.defined(
|
|
1229
|
-
(s) => s,
|
|
1230
|
-
() => toResults("Subject is not defined.")
|
|
1231
|
-
).type(isEnum, (e) => e.isValid ? toResults() : asResults(e, "This is not a valid {typeof}.")).type(isValue, (v) => v.isValid ? toResults() : asResults(v, "This is not a valid {typeof}.")).type(isArray, (a) => a.map((i) => validate(i)).reduce((rs, r) => rs.add(...r.results), toResults())).type(isValidatable, (v) => constraints(v)).else(toResults());
|
|
1232
|
-
var validateReject = (subject) => when(subject).not.isValid.reject();
|
|
1233
|
-
var isValid = (t) => validate(t).isValid;
|
|
1234
|
-
|
|
1235
|
-
// src/types/Try.ts
|
|
1236
|
-
var Try = class _Try {
|
|
1237
|
-
is = {
|
|
1238
|
-
defined: (prop) => this.filter((v) => isDefined(prop ? prop(v) : v)),
|
|
1239
|
-
empty: (prop) => this.filter((v) => isEmpty(prop ? prop(v) : v)),
|
|
1240
|
-
valid: (prop) => this.filter((v) => validate(prop ? prop(v) : v).isValid),
|
|
1241
|
-
true: (prop) => this.filter((v) => isTrue(prop ? prop(v) : v)),
|
|
1242
|
-
false: (prop) => this.filter((v) => !isTrue(prop ? prop(v) : v)),
|
|
1243
|
-
not: {
|
|
1244
|
-
defined: (prop) => this.filter((v) => !isDefined(prop ? prop(v) : v)),
|
|
1245
|
-
empty: (prop) => this.filter((v) => !isEmpty(prop ? prop(v) : v)),
|
|
1246
|
-
valid: (prop) => this.filter((v) => !validate(prop ? prop(v) : v).isValid)
|
|
1247
|
-
}
|
|
1248
|
-
};
|
|
1249
|
-
if = this.is;
|
|
1250
|
-
static of = (c, ...args) => {
|
|
1251
|
-
try {
|
|
1252
|
-
const out = ofGet(c, ...args);
|
|
1253
|
-
return new Success(out instanceof _Try ? out.value : out);
|
|
1254
|
-
} catch (e) {
|
|
1255
|
-
return new Failure(e);
|
|
1256
|
-
}
|
|
1257
|
-
};
|
|
1258
|
-
};
|
|
1259
|
-
var Success = class extends Try {
|
|
1260
|
-
constructor(value) {
|
|
1261
|
-
super();
|
|
1262
|
-
this.value = value;
|
|
1263
|
-
}
|
|
1264
|
-
get error() {
|
|
1265
|
-
throw new Error("No error found");
|
|
1266
|
-
}
|
|
1267
|
-
get isValid() {
|
|
1268
|
-
return true;
|
|
1269
|
-
}
|
|
1270
|
-
map(f) {
|
|
1271
|
-
return tryTo(f, this.value);
|
|
1272
|
-
}
|
|
1273
|
-
recover(f) {
|
|
1274
|
-
return this;
|
|
1275
|
-
}
|
|
1276
|
-
recoverFrom(type, f) {
|
|
1277
|
-
return this;
|
|
1278
|
-
}
|
|
1279
|
-
accept(f) {
|
|
1280
|
-
return tryTo(() => {
|
|
1281
|
-
f(this.value);
|
|
1282
|
-
return this;
|
|
1283
|
-
});
|
|
1284
|
-
}
|
|
1285
|
-
filter(predicate) {
|
|
1286
|
-
return tryTo(() => {
|
|
1287
|
-
if (predicate(this.value))
|
|
1288
|
-
return this;
|
|
1289
|
-
throw new Error(`Applying filter(${predicate.toString()}) failed.`);
|
|
1290
|
-
});
|
|
1291
|
-
}
|
|
1292
|
-
or(value) {
|
|
1293
|
-
return this.value;
|
|
1294
|
-
}
|
|
1295
|
-
orElse(value) {
|
|
1296
|
-
return this.value;
|
|
1297
|
-
}
|
|
1298
|
-
orThrow(_error) {
|
|
1299
|
-
return this.value;
|
|
1300
|
-
}
|
|
1301
|
-
};
|
|
1302
|
-
var Failure = class _Failure extends Try {
|
|
1303
|
-
constructor(error) {
|
|
1304
|
-
super();
|
|
1305
|
-
this.error = error;
|
|
1306
|
-
}
|
|
1307
|
-
get value() {
|
|
1308
|
-
throw this.error;
|
|
1309
|
-
}
|
|
1310
|
-
get isValid() {
|
|
1311
|
-
return false;
|
|
1312
|
-
}
|
|
1313
|
-
map(f) {
|
|
1314
|
-
return new _Failure(this.error);
|
|
1315
|
-
}
|
|
1316
|
-
recover(f) {
|
|
1317
|
-
return tryTo(f, this.error);
|
|
1318
|
-
}
|
|
1319
|
-
recoverFrom(type, f) {
|
|
1320
|
-
return tryTo(() => this.error instanceof type ? this.recover(f) : this);
|
|
1321
|
-
}
|
|
1322
|
-
accept(f) {
|
|
1323
|
-
return this;
|
|
1324
|
-
}
|
|
1325
|
-
filter(predicate) {
|
|
1326
|
-
return this;
|
|
1327
|
-
}
|
|
1328
|
-
or(value) {
|
|
1329
|
-
return ofGet(value);
|
|
1330
|
-
}
|
|
1331
|
-
orElse(value) {
|
|
1332
|
-
return ofGet(value);
|
|
1333
|
-
}
|
|
1334
|
-
orThrow(error) {
|
|
1335
|
-
throw ofConstruct(error);
|
|
1336
|
-
}
|
|
1337
|
-
};
|
|
1338
|
-
var tryTo = (c, ...args) => Try.of(c, ...args);
|
|
1339
|
-
|
|
1340
|
-
// src/types/Template.ts
|
|
1341
|
-
var Template = class {
|
|
1342
|
-
constructor(template2, subject = {}, options = {}) {
|
|
1343
|
-
this.template = template2;
|
|
1344
|
-
this.subject = subject;
|
|
1345
|
-
this.options = options;
|
|
1346
|
-
}
|
|
1347
|
-
knownPrefixes = /* @__PURE__ */ new Set(["typeof", "property", "actual", "subject"]);
|
|
1348
|
-
toString = () => {
|
|
1349
|
-
return entries(this.options).reduce((t, [k]) => this.option(t, k), this.object()).replace(" ", " ");
|
|
1350
|
-
};
|
|
1351
|
-
props = (tmpl, key, result = toList()) => {
|
|
1352
|
-
const i1 = tmpl.indexOf(`{${key}`);
|
|
1353
|
-
if (i1 < 0) {
|
|
1354
|
-
return result;
|
|
1355
|
-
}
|
|
1356
|
-
const i2 = tmpl.indexOf("}", i1);
|
|
1357
|
-
return this.props(tmpl.slice(i2 + 1), key, result.add(tmpl.substring(i1 + 1, i2)));
|
|
1358
|
-
};
|
|
1359
|
-
object = () => tryTo(() => this.template.replace(/\{this\./g, "{")).map((t) => t.replace(/\{([^{}]+)}/g, (match, p) => this.knownPrefixes.has(p.split(".")[0]) ? match : textValue(this.subject, p))).or("");
|
|
1360
|
-
option = (tmpl, prop) => {
|
|
1361
|
-
return this.props(tmpl, prop).reduce((t, p) => t.replace(`{${p}}`, textValue(this.options, p)), tmpl);
|
|
1362
|
-
};
|
|
1363
|
-
};
|
|
1364
|
-
function template(tmpl, subject, options = {}) {
|
|
1365
|
-
return new Template(asString(tmpl), subject, {
|
|
1366
|
-
typeof: toName(subject),
|
|
1367
|
-
subject: text(JSON.stringify(subject)),
|
|
1368
|
-
...options
|
|
1369
|
-
});
|
|
1370
|
-
}
|
|
1371
|
-
|
|
1372
|
-
// src/types/ToText.ts
|
|
1373
|
-
var ToText = class {
|
|
1374
|
-
constructor(subject) {
|
|
1375
|
-
this.subject = subject;
|
|
1376
|
-
}
|
|
1377
|
-
get cap() {
|
|
1378
|
-
return this.map((s) => capitalize(s?.toLowerCase()));
|
|
1379
|
-
}
|
|
1380
|
-
get capFirst() {
|
|
1381
|
-
return this.map((s) => capitalize(s));
|
|
1382
|
-
}
|
|
1383
|
-
get title() {
|
|
1384
|
-
return this.map(
|
|
1385
|
-
(s) => s.split(" ").map((w) => text(w).cap).join(" ")
|
|
1386
|
-
);
|
|
1387
|
-
}
|
|
1388
|
-
get pascal() {
|
|
1389
|
-
return this.title.replace(" ", "");
|
|
1326
|
+
type(guard, out) {
|
|
1327
|
+
return tryTo(guard, this.value).is.true().map(() => out(this.value)).map((res) => new Found(this.value, res)).or(this);
|
|
1390
1328
|
}
|
|
1391
|
-
|
|
1392
|
-
return this.
|
|
1329
|
+
equals(value, out) {
|
|
1330
|
+
return this.case(this.value === value, out);
|
|
1393
1331
|
}
|
|
1394
|
-
|
|
1395
|
-
return
|
|
1332
|
+
else(alt) {
|
|
1333
|
+
return ofGet(alt, this.value);
|
|
1396
1334
|
}
|
|
1397
|
-
|
|
1398
|
-
|
|
1335
|
+
};
|
|
1336
|
+
var Found = class extends Case {
|
|
1337
|
+
constructor(value, outcome) {
|
|
1338
|
+
super(value, outcome);
|
|
1339
|
+
this.value = value;
|
|
1340
|
+
this.outcome = outcome;
|
|
1399
1341
|
}
|
|
1400
|
-
|
|
1401
|
-
return this
|
|
1342
|
+
case(pred, out) {
|
|
1343
|
+
return this;
|
|
1402
1344
|
}
|
|
1403
|
-
|
|
1404
|
-
return this
|
|
1345
|
+
type(guard, out) {
|
|
1346
|
+
return this;
|
|
1405
1347
|
}
|
|
1406
|
-
|
|
1407
|
-
return this
|
|
1408
|
-
(s) => s.replace(/ß/g, "ss").normalize("NFKD").replace(/[\u0300-\u036F]/g, "").toLowerCase().replace(/[^a-z\d]+/g, "-").replace(/(^-)|(-$)/g, "")
|
|
1409
|
-
);
|
|
1348
|
+
equals(value, out) {
|
|
1349
|
+
return this;
|
|
1410
1350
|
}
|
|
1411
|
-
|
|
1412
|
-
return this.
|
|
1351
|
+
else(alt) {
|
|
1352
|
+
return this.outcome;
|
|
1413
1353
|
}
|
|
1414
|
-
|
|
1415
|
-
|
|
1354
|
+
};
|
|
1355
|
+
var choose = (value) => new CaseBuilder(value);
|
|
1356
|
+
|
|
1357
|
+
// src/types/IsEqual.ts
|
|
1358
|
+
var isEqualArray = (one, another) => choose([one, another]).case(([o, a]) => !isArray(o) || !isArray(a), false).case(([o, a]) => o?.length !== a?.length, false).else(([o, a]) => !o.some((v, i) => !isEqual(v, a[i])));
|
|
1359
|
+
var isEqualObject = (one, another) => choose([Object.keys(one), Object.keys(another)]).case(([keysO, keysA]) => keysO.length !== keysA.length, false).case(([keysO, keysA]) => keysO.some((k) => !keysA.includes(k)), false).case(([keysO]) => keysO.some((k) => !isEqual(one[k], another[k])), false).else(true);
|
|
1360
|
+
var isEqual = (one, another) => choose([one, another]).case(([o, a]) => o === a, true).case(
|
|
1361
|
+
([o, a]) => isArray(o) || isArray(a),
|
|
1362
|
+
([o, a]) => isEqualArray(o, a)
|
|
1363
|
+
).case(
|
|
1364
|
+
([o, a]) => o == null || a == null || !isObject(o) && !isObject(a),
|
|
1365
|
+
([o, a]) => o !== o && a !== a
|
|
1366
|
+
).else(([o, a]) => isEqualObject(o, a));
|
|
1367
|
+
|
|
1368
|
+
// src/utils/If.ts
|
|
1369
|
+
function ifTrue(o, f, alt) {
|
|
1370
|
+
return isTrue(o) ? ofConstruct(f, o) : ofConstruct(alt, o);
|
|
1371
|
+
}
|
|
1372
|
+
function ifFalse(o, f, alt) {
|
|
1373
|
+
return !isTrue(o) ? ofConstruct(f, o) : ofConstruct(alt, o);
|
|
1374
|
+
}
|
|
1375
|
+
function ifDefined(o, f, alt) {
|
|
1376
|
+
return isDefined(o) ? ofConstruct(f, o) : ofConstruct(alt);
|
|
1377
|
+
}
|
|
1378
|
+
function ifNotEmpty(o, f = (o2) => o2, alt) {
|
|
1379
|
+
return isNotEmpty(o) ? ofConstruct(f, o) : ofConstruct(alt, o);
|
|
1380
|
+
}
|
|
1381
|
+
function ifEqual(one, another, f, alt) {
|
|
1382
|
+
return isEqual(one, another) ? ofConstruct(f) : ofConstruct(alt);
|
|
1383
|
+
}
|
|
1384
|
+
function ifEither(os, f = (o) => o, alt) {
|
|
1385
|
+
return use(
|
|
1386
|
+
toList(os).first((o) => isPresent(o)),
|
|
1387
|
+
(o) => isDefined(o) ? ofConstruct(f, o) : ofConstruct(alt, o)
|
|
1388
|
+
);
|
|
1389
|
+
}
|
|
1390
|
+
|
|
1391
|
+
// src/types/Json.ts
|
|
1392
|
+
var isJson = (subject) => isA(subject, "toJSON");
|
|
1393
|
+
var json = {
|
|
1394
|
+
parse: (subject) => JSON.parse(JSON.stringify(subject ?? {})),
|
|
1395
|
+
merge: (...subjects) => json.parse(subjects.map((s) => asJson(s, (s2) => json.parse(s2))).reduce((js, j) => ({ ...js, ...j }), {})),
|
|
1396
|
+
delete: (subject, key) => {
|
|
1397
|
+
ifDefined(subject, () => delete subject[key]);
|
|
1398
|
+
return subject;
|
|
1399
|
+
},
|
|
1400
|
+
set: (subject, key = "", value) => isEmpty(key) ? subject : value !== void 0 ? { ...subject, ...{ [key]: value } } : json.delete(subject, key),
|
|
1401
|
+
omit: (subject, ...keys2) => keys2.reduce((js, k) => json.delete(js, k), json.parse(subject)),
|
|
1402
|
+
pick: (subject, ...keys2) => keys2.reduce((js, k) => json.set(js, k, subject[k]), {}),
|
|
1403
|
+
defaults: (options = {}, defaults = {}) => json.merge(defaults, options),
|
|
1404
|
+
isSubset: (subject, subset) => !entries(subset).some(([k, v]) => subject[k] !== v),
|
|
1405
|
+
split: (t, keys2, prop = "extracted") => {
|
|
1406
|
+
const extracted = {};
|
|
1407
|
+
const rest2 = { ...t };
|
|
1408
|
+
keys2.forEach((key) => {
|
|
1409
|
+
if (key in t) {
|
|
1410
|
+
ifDefined(t[key], (v) => extracted[key] = v);
|
|
1411
|
+
delete rest2[key];
|
|
1412
|
+
}
|
|
1413
|
+
});
|
|
1414
|
+
return { [prop]: extracted, ...rest2 };
|
|
1416
1415
|
}
|
|
1417
|
-
|
|
1418
|
-
|
|
1416
|
+
};
|
|
1417
|
+
var toJson = json.merge;
|
|
1418
|
+
var asJson = (j, alt = {}) => isJson(j) ? j.toJSON() : isObject(j) ? j : ofGet(alt, j);
|
|
1419
|
+
var Any = class {
|
|
1420
|
+
constructor(value) {
|
|
1421
|
+
this.value = value;
|
|
1419
1422
|
}
|
|
1420
|
-
|
|
1421
|
-
|
|
1423
|
+
merge = (...subjects) => any(json.merge(this.value, ...subjects));
|
|
1424
|
+
delete = (key) => any(json.delete(this.value, key));
|
|
1425
|
+
omit = (...keys2) => any(json.omit(this.value, ...keys2));
|
|
1426
|
+
set = (key, value) => any(json.set(this.value, key, value));
|
|
1427
|
+
toJSON() {
|
|
1428
|
+
return this.value;
|
|
1422
1429
|
}
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1430
|
+
};
|
|
1431
|
+
var takeFirstKey = (j, alt = "") => entries(asJson(j)).first(([, v]) => isDefined(v))?.[0] ?? alt;
|
|
1432
|
+
var takeFirst = (j) => entries(j).first(([, v]) => isDefined(v));
|
|
1433
|
+
var any = (value) => new Any(value);
|
|
1434
|
+
|
|
1435
|
+
// src/utils/Convert.ts
|
|
1436
|
+
var Convert = class {
|
|
1437
|
+
constructor(from, to) {
|
|
1438
|
+
this.from = from;
|
|
1439
|
+
this.to = to;
|
|
1427
1440
|
}
|
|
1428
|
-
|
|
1429
|
-
|
|
1441
|
+
};
|
|
1442
|
+
var convert = {
|
|
1443
|
+
default: new Convert(
|
|
1444
|
+
(a) => a,
|
|
1445
|
+
(a) => a
|
|
1446
|
+
),
|
|
1447
|
+
ignore: new Convert(
|
|
1448
|
+
() => void 0,
|
|
1449
|
+
() => void 0
|
|
1450
|
+
),
|
|
1451
|
+
toBool: {
|
|
1452
|
+
fromNumber: new Convert(
|
|
1453
|
+
(b) => b ? 1 : 0,
|
|
1454
|
+
(n) => n !== 0
|
|
1455
|
+
),
|
|
1456
|
+
fromString: new Convert(
|
|
1457
|
+
(b) => b ? "true" : "false",
|
|
1458
|
+
(s) => s === "true"
|
|
1459
|
+
)
|
|
1460
|
+
},
|
|
1461
|
+
toDate: {
|
|
1462
|
+
fromString: new Convert(
|
|
1463
|
+
(s) => new Date(s).toISOString(),
|
|
1464
|
+
(s) => s
|
|
1465
|
+
)
|
|
1466
|
+
},
|
|
1467
|
+
toNumber: {
|
|
1468
|
+
fromString: new Convert(
|
|
1469
|
+
(n) => asString(n),
|
|
1470
|
+
(s) => parseInt(s)
|
|
1471
|
+
)
|
|
1430
1472
|
}
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1473
|
+
};
|
|
1474
|
+
|
|
1475
|
+
// src/data/Condition.ts
|
|
1476
|
+
var Condition = class {
|
|
1477
|
+
constructor(key, operator, value) {
|
|
1478
|
+
this.key = key;
|
|
1479
|
+
this.operator = operator;
|
|
1480
|
+
this.value = value;
|
|
1435
1481
|
}
|
|
1436
|
-
|
|
1437
|
-
|
|
1482
|
+
and = (...others) => new LogicalCondition("and", [this, ...others]);
|
|
1483
|
+
or = (...others) => new LogicalCondition("or", [this, ...others]);
|
|
1484
|
+
toJSON() {
|
|
1485
|
+
return { [this.key]: { [`$${this.operator}`]: json.parse(this.value) } };
|
|
1438
1486
|
}
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
ifLike = (...others) => this.isLike(...others) ? this : void 0;
|
|
1445
|
-
endsWith = (end) => this.subject.endsWith(asString(end));
|
|
1446
|
-
startsWith = (end) => this.subject.startsWith(asString(end));
|
|
1447
|
-
first = (n) => this.map((s) => s.substring(0, n));
|
|
1448
|
-
last = (n) => this.map((s) => s.substring(s.length - n));
|
|
1449
|
-
map = (func) => text(ofGet(func, this.subject));
|
|
1450
|
-
replace = (search, replace) => this.map((s) => replaceAll(s, search, replace));
|
|
1451
|
-
add = (add, separator = "") => this.map((s) => isNotEmpty(add) ? `${s}${separator}${text(add)}` : s);
|
|
1452
|
-
with = (separator, ...other) => this.map(
|
|
1453
|
-
(s) => toList(s).add(...other.map((u) => text(u).toString())).filter((s2) => isNotEmpty(s2)).join(separator)
|
|
1454
|
-
);
|
|
1455
|
-
split = (separator = " ") => toList(this.subject.split(separator));
|
|
1456
|
-
toString() {
|
|
1457
|
-
return this.subject;
|
|
1487
|
+
};
|
|
1488
|
+
var LogicalCondition = class {
|
|
1489
|
+
constructor(operator, conditions) {
|
|
1490
|
+
this.operator = operator;
|
|
1491
|
+
this.conditions = conditions;
|
|
1458
1492
|
}
|
|
1459
1493
|
toJSON() {
|
|
1460
|
-
return this.
|
|
1494
|
+
return { [`$${this.operator}`]: this.conditions.map((c) => c.toJSON()) };
|
|
1461
1495
|
}
|
|
1462
1496
|
};
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
return p.splice(1).reduce((t, s) => (typeof t === "object" && t !== null ? t : text(t))?.[s], initial)?.toString() ?? "";
|
|
1472
|
-
}
|
|
1473
|
-
|
|
1474
|
-
// src/types/Exception.ts
|
|
1475
|
-
var Exception = class _Exception extends Enum {
|
|
1476
|
-
constructor(message, id, reason) {
|
|
1477
|
-
super(message, id ?? text(message).pascal.toString());
|
|
1478
|
-
this.message = message;
|
|
1479
|
-
this.reason = reason;
|
|
1497
|
+
var SortCondition = class extends Condition {
|
|
1498
|
+
constructor(key, value) {
|
|
1499
|
+
super(key, "", value);
|
|
1500
|
+
this.key = key;
|
|
1501
|
+
this.value = value;
|
|
1502
|
+
}
|
|
1503
|
+
toJSON() {
|
|
1504
|
+
return { [this.key]: this.value };
|
|
1480
1505
|
}
|
|
1481
|
-
static AlreadyExists = new _Exception("Subject already exists");
|
|
1482
|
-
static DoesNotExist = new _Exception("Does not exist");
|
|
1483
|
-
static IsMissingId = new _Exception("Subject is missing an id");
|
|
1484
|
-
static IsNotImplemented = new _Exception("Is not implemented");
|
|
1485
|
-
static IsNotValid = new _Exception("Is not valid");
|
|
1486
|
-
static Unknown = new _Exception("Unknown error");
|
|
1487
|
-
static CouldNotExecute = (target) => new _Exception(`Could not execute ${target}.`, "CouldNotExecute");
|
|
1488
|
-
static CouldNotValidate = (target) => new _Exception(`Could not validate ${target}.`, "CouldNotValidate");
|
|
1489
|
-
static EnvironmentVariableNotFound = (variable) => new _Exception(`Environment variable ${text(variable).upper} could not be found.`, "EnvironmentVariableNotFound");
|
|
1490
|
-
because = (reason) => new _Exception(this.message, this.id, reason);
|
|
1491
1506
|
};
|
|
1492
|
-
var
|
|
1493
|
-
var
|
|
1507
|
+
var toCondition = (field, operator, value, conv = convert.default) => new Condition(field, operator, conv.from(value));
|
|
1508
|
+
var isSortCondition = (s) => isDefined(s) && s instanceof SortCondition;
|
|
1494
1509
|
|
|
1495
1510
|
// src/types/Gateway.ts
|
|
1496
1511
|
var Gateway = class {
|
|
@@ -2879,17 +2894,6 @@ var MappedRouteGateway = class extends RouteGateway {
|
|
|
2879
2894
|
}
|
|
2880
2895
|
};
|
|
2881
2896
|
|
|
2882
|
-
// src/types/IsEqual.ts
|
|
2883
|
-
var isEqualArray = (one, another) => choose([one, another]).case(([o, a]) => !isArray(o) || !isArray(a), false).case(([o, a]) => o?.length !== a?.length, false).else(([o, a]) => !o.some((v, i) => !isEqual(v, a[i])));
|
|
2884
|
-
var isEqualObject = (one, another) => choose([Object.keys(one), Object.keys(another)]).case(([keysO, keysA]) => keysO.length !== keysA.length, false).case(([keysO, keysA]) => keysO.some((k) => !keysA.includes(k)), false).case(([keysO]) => keysO.some((k) => !isEqual(one[k], another[k])), false).else(true);
|
|
2885
|
-
var isEqual = (one, another) => choose([one, another]).case(([o, a]) => o === a, true).case(
|
|
2886
|
-
([o, a]) => isArray(o) || isArray(a),
|
|
2887
|
-
([o, a]) => isEqualArray(o, a)
|
|
2888
|
-
).case(
|
|
2889
|
-
([o, a]) => o == null || a == null || !isObject(o) && !isObject(a),
|
|
2890
|
-
([o, a]) => o !== o && a !== a
|
|
2891
|
-
).else(([o, a]) => isEqualObject(o, a));
|
|
2892
|
-
|
|
2893
2897
|
// src/utils/View.ts
|
|
2894
2898
|
var ignore = Symbol("view.ignore");
|
|
2895
2899
|
var keep = Symbol("view.keep");
|
|
@@ -3677,6 +3681,7 @@ var wait = (millis) => Wait.wait(millis);
|
|
|
3677
3681
|
ifA,
|
|
3678
3682
|
ifDefined,
|
|
3679
3683
|
ifEither,
|
|
3684
|
+
ifEqual,
|
|
3680
3685
|
ifFalse,
|
|
3681
3686
|
ifGet,
|
|
3682
3687
|
ifNotEmpty,
|