@thisisagile/easy 18.2.0 → 18.4.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.
Files changed (177) hide show
  1. package/dist/{chunk-346UESSY.mjs → chunk-4BMUPWAJ.mjs} +2 -2
  2. package/dist/{chunk-4HFBYRDU.mjs → chunk-4BV4JTCA.mjs} +2 -2
  3. package/dist/{chunk-RBH76M5S.mjs → chunk-4CSPGBOC.mjs} +2 -2
  4. package/dist/{chunk-N3BN6DIS.mjs → chunk-4DRQYK44.mjs} +2 -2
  5. package/dist/{chunk-IUNLGNPE.mjs → chunk-4PQAGLRK.mjs} +2 -2
  6. package/dist/{chunk-UE4CBXS7.mjs → chunk-4VF35SCY.mjs} +2 -2
  7. package/dist/{chunk-H3GPCSOP.mjs → chunk-6MGBA6VX.mjs} +4 -4
  8. package/dist/{chunk-TW4N4K7Z.mjs → chunk-7OSZEDXZ.mjs} +3 -3
  9. package/dist/{chunk-TBC7JYW7.mjs → chunk-7QHZIOLI.mjs} +4 -4
  10. package/dist/{chunk-ZDY2R7PR.mjs → chunk-7XS4KJXX.mjs} +2 -2
  11. package/dist/{chunk-KLOR6M5V.mjs → chunk-A2DUHG6M.mjs} +3 -3
  12. package/dist/{chunk-BZBO6ZOG.mjs → chunk-AU4TT4W7.mjs} +6 -6
  13. package/dist/{chunk-MKAQMXAZ.mjs → chunk-DFYAOK6M.mjs} +2 -2
  14. package/dist/{chunk-C3AYNXM3.mjs → chunk-EM2EQSG2.mjs} +4 -4
  15. package/dist/{chunk-CIRJQ6H4.mjs → chunk-GOBS35G5.mjs} +4 -4
  16. package/dist/{chunk-BM6SJM2X.mjs → chunk-I7YGK7VI.mjs} +4 -4
  17. package/dist/{chunk-CXOHZJ3X.mjs → chunk-IYA5UMKH.mjs} +5 -5
  18. package/dist/{chunk-VTBCBLNT.mjs → chunk-JOVRTPGK.mjs} +2 -2
  19. package/dist/{chunk-M437XKJ2.mjs → chunk-LTTIVS2R.mjs} +3 -3
  20. package/dist/{chunk-4NUHEKCN.mjs → chunk-MKZLN3EP.mjs} +2 -2
  21. package/dist/{chunk-BCWYJNUM.mjs → chunk-ML44QJXA.mjs} +2 -2
  22. package/dist/chunk-O3UNRTSC.mjs +33 -0
  23. package/dist/chunk-O3UNRTSC.mjs.map +1 -0
  24. package/dist/{chunk-OUVMPMLU.mjs → chunk-OOL44FMU.mjs} +5 -5
  25. package/dist/{chunk-CB6QZWQ6.mjs → chunk-PLIJRFFH.mjs} +2 -2
  26. package/dist/{chunk-G3IYJVMJ.mjs → chunk-QFSQQB4W.mjs} +3 -3
  27. package/dist/{chunk-73PRAXSF.mjs → chunk-R62T2NFF.mjs} +11 -11
  28. package/dist/{chunk-4BZBT7XW.mjs → chunk-SRL6CD77.mjs} +4 -4
  29. package/dist/{chunk-WWBSB5S2.mjs → chunk-UXWH5JLO.mjs} +6 -6
  30. package/dist/{chunk-O7OBT5S4.mjs → chunk-UYWVHCIV.mjs} +3 -3
  31. package/dist/chunk-UYWVHCIV.mjs.map +1 -0
  32. package/dist/{chunk-SKZ6OEGT.mjs → chunk-VDDHUQPK.mjs} +2 -2
  33. package/dist/{chunk-2QIRXEJP.mjs → chunk-VTXFZ2S3.mjs} +3 -3
  34. package/dist/{chunk-HI4ZKGVP.mjs → chunk-W44K6LRU.mjs} +172 -172
  35. package/dist/chunk-W44K6LRU.mjs.map +1 -0
  36. package/dist/{chunk-H662YXBM.mjs → chunk-WT6TNFBH.mjs} +2 -2
  37. package/dist/{chunk-5MRHONF6.mjs → chunk-X36DYYCE.mjs} +3 -3
  38. package/dist/{chunk-3VXBRJE3.mjs → chunk-XL5HGL2Q.mjs} +3 -3
  39. package/dist/{chunk-UPF75QBA.mjs → chunk-YGS6ZIIN.mjs} +4 -4
  40. package/dist/{chunk-JDXXXRIC.mjs → chunk-YTNVFND2.mjs} +30 -30
  41. package/dist/chunk-YTNVFND2.mjs.map +1 -0
  42. package/dist/{chunk-DLL5JW5M.mjs → chunk-YXAXW4CU.mjs} +3 -3
  43. package/dist/{chunk-GZPU5CCW.mjs → chunk-YZQCILB6.mjs} +4 -4
  44. package/dist/{chunk-RODYFWE7.mjs → chunk-ZN2CJA6R.mjs} +3 -3
  45. package/dist/{chunk-3Y76ZQ46.mjs → chunk-ZUUMN5JN.mjs} +2 -2
  46. package/dist/{chunk-ZOW7USWK.mjs → chunk-ZVQY2BYW.mjs} +7 -7
  47. package/dist/data/Condition.mjs +5 -5
  48. package/dist/data/Database.mjs +6 -6
  49. package/dist/data/Field.mjs +5 -5
  50. package/dist/data/InMemoryGateway.mjs +9 -9
  51. package/dist/domain/Audit.mjs +13 -13
  52. package/dist/domain/Child.mjs +12 -12
  53. package/dist/domain/DateTime.mjs +9 -9
  54. package/dist/domain/Entity.mjs +17 -17
  55. package/dist/domain/Repo.mjs +14 -14
  56. package/dist/domain/Struct.mjs +9 -9
  57. package/dist/domain/Typo.mjs +11 -11
  58. package/dist/http/CacheControl.mjs +9 -9
  59. package/dist/http/ContentType.mjs +6 -6
  60. package/dist/http/HttpStatus.mjs +6 -6
  61. package/dist/http/HttpVerb.mjs +6 -6
  62. package/dist/http/LocalRequestStore.mjs +7 -7
  63. package/dist/http/RequestOptions.mjs +9 -9
  64. package/dist/http/RestResult.mjs +9 -9
  65. package/dist/http/toResponse.mjs +10 -10
  66. package/dist/index.d.ts +2 -0
  67. package/dist/index.js +63 -0
  68. package/dist/index.js.map +1 -1
  69. package/dist/index.mjs +2 -0
  70. package/dist/index.mjs.map +1 -1
  71. package/dist/process/App.mjs +8 -8
  72. package/dist/process/Manage.mjs +9 -9
  73. package/dist/process/Scope.mjs +8 -8
  74. package/dist/process/Search.mjs +9 -9
  75. package/dist/process/UseCase.mjs +7 -7
  76. package/dist/resources/Req.mjs +8 -8
  77. package/dist/services/Api.mjs +17 -17
  78. package/dist/services/ApiGateway.mjs +20 -20
  79. package/dist/services/AxiosProvider.mjs +15 -15
  80. package/dist/services/MappedRouteGateway.mjs +25 -25
  81. package/dist/services/RouteGateway.mjs +21 -21
  82. package/dist/services/ViewRouteGateway.mjs +24 -24
  83. package/dist/sql/Column.mjs +9 -9
  84. package/dist/sql/Count.mjs +5 -5
  85. package/dist/sql/Delete.mjs +4 -4
  86. package/dist/sql/Insert.mjs +4 -4
  87. package/dist/sql/Select.mjs +4 -4
  88. package/dist/sql/SqlQuery.mjs +3 -3
  89. package/dist/sql/Table.mjs +21 -21
  90. package/dist/sql/TableGateway.mjs +9 -9
  91. package/dist/sql/Update.mjs +4 -4
  92. package/dist/types/Cache.mjs +4 -4
  93. package/dist/types/CacheAge.mjs +9 -9
  94. package/dist/types/Case.mjs +7 -7
  95. package/dist/types/Context.mjs +7 -7
  96. package/dist/types/Enum.d.ts +1 -0
  97. package/dist/types/Enum.mjs +5 -5
  98. package/dist/types/Environment.mjs +5 -5
  99. package/dist/types/Exception.mjs +7 -7
  100. package/dist/types/Gateway.mjs +8 -8
  101. package/dist/types/IsEqual.mjs +8 -8
  102. package/dist/types/Json.mjs +4 -4
  103. package/dist/types/List.mjs +2 -2
  104. package/dist/types/Meta.mjs +4 -4
  105. package/dist/types/Number.mjs +8 -8
  106. package/dist/types/Object.mjs +3 -3
  107. package/dist/types/PageList.mjs +8 -8
  108. package/dist/types/Parser.mjs +7 -7
  109. package/dist/types/Repository.mjs +8 -8
  110. package/dist/types/Result.mjs +7 -7
  111. package/dist/types/Results.mjs +7 -7
  112. package/dist/types/Tag.mjs +4 -4
  113. package/dist/types/Template.mjs +7 -7
  114. package/dist/types/Timezone.d.ts +15 -0
  115. package/dist/types/Timezone.mjs +14 -0
  116. package/dist/types/Timezone.mjs.map +1 -0
  117. package/dist/types/ToText.mjs +7 -7
  118. package/dist/types/Try.mjs +7 -7
  119. package/dist/types/Uri.mjs +7 -7
  120. package/dist/utils/If.mjs +2 -2
  121. package/dist/utils/Mapper.mjs +6 -6
  122. package/dist/utils/Period.d.ts +13 -0
  123. package/dist/utils/Period.mjs +59 -0
  124. package/dist/utils/Period.mjs.map +1 -0
  125. package/dist/utils/Promise.mjs +4 -4
  126. package/dist/utils/Seconds.mjs +3 -3
  127. package/dist/utils/Sentence.mjs +7 -7
  128. package/dist/utils/View.mjs +11 -11
  129. package/dist/validation/Contraints.mjs +8 -8
  130. package/dist/validation/Validate.mjs +7 -7
  131. package/dist/validation/When.mjs +7 -7
  132. package/package.json +1 -1
  133. package/src/index.ts +2 -0
  134. package/src/types/Enum.ts +1 -0
  135. package/src/types/Timezone.ts +28 -0
  136. package/src/utils/Period.ts +59 -0
  137. package/dist/chunk-HI4ZKGVP.mjs.map +0 -1
  138. package/dist/chunk-JDXXXRIC.mjs.map +0 -1
  139. package/dist/chunk-O7OBT5S4.mjs.map +0 -1
  140. /package/dist/{chunk-346UESSY.mjs.map → chunk-4BMUPWAJ.mjs.map} +0 -0
  141. /package/dist/{chunk-4HFBYRDU.mjs.map → chunk-4BV4JTCA.mjs.map} +0 -0
  142. /package/dist/{chunk-RBH76M5S.mjs.map → chunk-4CSPGBOC.mjs.map} +0 -0
  143. /package/dist/{chunk-N3BN6DIS.mjs.map → chunk-4DRQYK44.mjs.map} +0 -0
  144. /package/dist/{chunk-IUNLGNPE.mjs.map → chunk-4PQAGLRK.mjs.map} +0 -0
  145. /package/dist/{chunk-UE4CBXS7.mjs.map → chunk-4VF35SCY.mjs.map} +0 -0
  146. /package/dist/{chunk-H3GPCSOP.mjs.map → chunk-6MGBA6VX.mjs.map} +0 -0
  147. /package/dist/{chunk-TW4N4K7Z.mjs.map → chunk-7OSZEDXZ.mjs.map} +0 -0
  148. /package/dist/{chunk-TBC7JYW7.mjs.map → chunk-7QHZIOLI.mjs.map} +0 -0
  149. /package/dist/{chunk-ZDY2R7PR.mjs.map → chunk-7XS4KJXX.mjs.map} +0 -0
  150. /package/dist/{chunk-KLOR6M5V.mjs.map → chunk-A2DUHG6M.mjs.map} +0 -0
  151. /package/dist/{chunk-BZBO6ZOG.mjs.map → chunk-AU4TT4W7.mjs.map} +0 -0
  152. /package/dist/{chunk-MKAQMXAZ.mjs.map → chunk-DFYAOK6M.mjs.map} +0 -0
  153. /package/dist/{chunk-C3AYNXM3.mjs.map → chunk-EM2EQSG2.mjs.map} +0 -0
  154. /package/dist/{chunk-CIRJQ6H4.mjs.map → chunk-GOBS35G5.mjs.map} +0 -0
  155. /package/dist/{chunk-BM6SJM2X.mjs.map → chunk-I7YGK7VI.mjs.map} +0 -0
  156. /package/dist/{chunk-CXOHZJ3X.mjs.map → chunk-IYA5UMKH.mjs.map} +0 -0
  157. /package/dist/{chunk-VTBCBLNT.mjs.map → chunk-JOVRTPGK.mjs.map} +0 -0
  158. /package/dist/{chunk-M437XKJ2.mjs.map → chunk-LTTIVS2R.mjs.map} +0 -0
  159. /package/dist/{chunk-4NUHEKCN.mjs.map → chunk-MKZLN3EP.mjs.map} +0 -0
  160. /package/dist/{chunk-BCWYJNUM.mjs.map → chunk-ML44QJXA.mjs.map} +0 -0
  161. /package/dist/{chunk-OUVMPMLU.mjs.map → chunk-OOL44FMU.mjs.map} +0 -0
  162. /package/dist/{chunk-CB6QZWQ6.mjs.map → chunk-PLIJRFFH.mjs.map} +0 -0
  163. /package/dist/{chunk-G3IYJVMJ.mjs.map → chunk-QFSQQB4W.mjs.map} +0 -0
  164. /package/dist/{chunk-73PRAXSF.mjs.map → chunk-R62T2NFF.mjs.map} +0 -0
  165. /package/dist/{chunk-4BZBT7XW.mjs.map → chunk-SRL6CD77.mjs.map} +0 -0
  166. /package/dist/{chunk-WWBSB5S2.mjs.map → chunk-UXWH5JLO.mjs.map} +0 -0
  167. /package/dist/{chunk-SKZ6OEGT.mjs.map → chunk-VDDHUQPK.mjs.map} +0 -0
  168. /package/dist/{chunk-2QIRXEJP.mjs.map → chunk-VTXFZ2S3.mjs.map} +0 -0
  169. /package/dist/{chunk-H662YXBM.mjs.map → chunk-WT6TNFBH.mjs.map} +0 -0
  170. /package/dist/{chunk-5MRHONF6.mjs.map → chunk-X36DYYCE.mjs.map} +0 -0
  171. /package/dist/{chunk-3VXBRJE3.mjs.map → chunk-XL5HGL2Q.mjs.map} +0 -0
  172. /package/dist/{chunk-UPF75QBA.mjs.map → chunk-YGS6ZIIN.mjs.map} +0 -0
  173. /package/dist/{chunk-DLL5JW5M.mjs.map → chunk-YXAXW4CU.mjs.map} +0 -0
  174. /package/dist/{chunk-GZPU5CCW.mjs.map → chunk-YZQCILB6.mjs.map} +0 -0
  175. /package/dist/{chunk-RODYFWE7.mjs.map → chunk-ZN2CJA6R.mjs.map} +0 -0
  176. /package/dist/{chunk-3Y76ZQ46.mjs.map → chunk-ZUUMN5JN.mjs.map} +0 -0
  177. /package/dist/{chunk-ZOW7USWK.mjs.map → chunk-ZVQY2BYW.mjs.map} +0 -0
@@ -1,26 +1,26 @@
1
- import {
2
- reject,
3
- resolve
4
- } from "./chunk-M437XKJ2.mjs";
5
1
  import {
6
2
  isValidatable
7
3
  } from "./chunk-OFGI5FLG.mjs";
4
+ import {
5
+ reject,
6
+ resolve
7
+ } from "./chunk-LTTIVS2R.mjs";
8
8
  import {
9
9
  isValue
10
10
  } from "./chunk-4262V2GR.mjs";
11
11
  import {
12
12
  Enum,
13
13
  isEnum
14
- } from "./chunk-O7OBT5S4.mjs";
14
+ } from "./chunk-UYWVHCIV.mjs";
15
15
  import {
16
16
  meta
17
- } from "./chunk-2QIRXEJP.mjs";
17
+ } from "./chunk-VTXFZ2S3.mjs";
18
18
  import {
19
19
  entries
20
- } from "./chunk-IUNLGNPE.mjs";
20
+ } from "./chunk-4PQAGLRK.mjs";
21
21
  import {
22
22
  toList
23
- } from "./chunk-JDXXXRIC.mjs";
23
+ } from "./chunk-YTNVFND2.mjs";
24
24
  import {
25
25
  toArray
26
26
  } from "./chunk-CO2AFYVD.mjs";
@@ -49,6 +49,111 @@ import {
49
49
  isTrue
50
50
  } from "./chunk-DEJ7A5PY.mjs";
51
51
 
52
+ // src/types/Try.ts
53
+ var Try = class _Try {
54
+ is = {
55
+ defined: (prop) => this.filter((v) => isDefined(prop ? prop(v) : v)),
56
+ empty: (prop) => this.filter((v) => isEmpty(prop ? prop(v) : v)),
57
+ valid: (prop) => this.filter((v) => validate(prop ? prop(v) : v).isValid),
58
+ true: (prop) => this.filter((v) => isTrue(prop ? prop(v) : v)),
59
+ false: (prop) => this.filter((v) => !isTrue(prop ? prop(v) : v)),
60
+ not: {
61
+ defined: (prop) => this.filter((v) => !isDefined(prop ? prop(v) : v)),
62
+ empty: (prop) => this.filter((v) => !isEmpty(prop ? prop(v) : v)),
63
+ valid: (prop) => this.filter((v) => !validate(prop ? prop(v) : v).isValid)
64
+ }
65
+ };
66
+ if = this.is;
67
+ static of = (c, ...args) => {
68
+ try {
69
+ const out = ofGet(c, ...args);
70
+ return new Success(out instanceof _Try ? out.value : out);
71
+ } catch (e) {
72
+ return new Failure(e);
73
+ }
74
+ };
75
+ };
76
+ var Success = class extends Try {
77
+ constructor(value) {
78
+ super();
79
+ this.value = value;
80
+ }
81
+ get error() {
82
+ throw new Error("No error found");
83
+ }
84
+ get isValid() {
85
+ return true;
86
+ }
87
+ map(f) {
88
+ return tryTo(f, this.value);
89
+ }
90
+ recover(f) {
91
+ return this;
92
+ }
93
+ recoverFrom(type, f) {
94
+ return this;
95
+ }
96
+ accept(f) {
97
+ return tryTo(() => {
98
+ f(this.value);
99
+ return this;
100
+ });
101
+ }
102
+ filter(predicate) {
103
+ return tryTo(() => {
104
+ if (predicate(this.value))
105
+ return this;
106
+ throw new Error(`Applying filter(${predicate.toString()}) failed.`);
107
+ });
108
+ }
109
+ or(value) {
110
+ return this.value;
111
+ }
112
+ orElse(value) {
113
+ return this.value;
114
+ }
115
+ orThrow(_error) {
116
+ return this.value;
117
+ }
118
+ };
119
+ var Failure = class _Failure extends Try {
120
+ constructor(error) {
121
+ super();
122
+ this.error = error;
123
+ }
124
+ get value() {
125
+ throw this.error;
126
+ }
127
+ get isValid() {
128
+ return false;
129
+ }
130
+ map(f) {
131
+ return new _Failure(this.error);
132
+ }
133
+ recover(f) {
134
+ return tryTo(f, this.error);
135
+ }
136
+ recoverFrom(type, f) {
137
+ return tryTo(() => this.error instanceof type ? this.recover(f) : this);
138
+ }
139
+ accept(f) {
140
+ return this;
141
+ }
142
+ filter(predicate) {
143
+ return this;
144
+ }
145
+ or(value) {
146
+ return ofGet(value);
147
+ }
148
+ orElse(value) {
149
+ return ofGet(value);
150
+ }
151
+ orThrow(error) {
152
+ throw ofConstruct(error);
153
+ }
154
+ };
155
+ var tryTo = (c, ...args) => Try.of(c, ...args);
156
+
52
157
  // src/types/Template.ts
53
158
  var Template = class {
54
159
  constructor(template2, subject = {}, options = {}) {
@@ -183,64 +288,6 @@ function textValue(subject, prop) {
183
288
  return p.splice(1).reduce((t, s) => (typeof t === "object" && t !== null ? t : text(t))?.[s], initial)?.toString() ?? "";
184
289
  }
185
290
 
186
- // src/types/Exception.ts
187
- var Exception = class _Exception extends Enum {
188
- constructor(message, id, reason) {
189
- super(message, id ?? text(message).pascal.toString());
190
- this.message = message;
191
- this.reason = reason;
192
- }
193
- static AlreadyExists = new _Exception("Subject already exists");
194
- static DoesNotExist = new _Exception("Does not exist");
195
- static IsMissingId = new _Exception("Subject is missing an id");
196
- static IsNotImplemented = new _Exception("Is not implemented");
197
- static IsNotValid = new _Exception("Is not valid");
198
- static Unknown = new _Exception("Unknown error");
199
- static CouldNotExecute = (target) => new _Exception(`Could not execute ${target}.`, "CouldNotExecute");
200
- static CouldNotValidate = (target) => new _Exception(`Could not validate ${target}.`, "CouldNotValidate");
201
- static EnvironmentVariableNotFound = (variable) => new _Exception(`Environment variable ${text(variable).upper} could not be found.`, "EnvironmentVariableNotFound");
202
- because = (reason) => new _Exception(this.message, this.id, reason);
203
- };
204
- var isException = (e, t) => e instanceof Exception && (isDefined(t) ? e.equals(asString(t)) : true);
205
- var isDoesNotExist = (e) => e instanceof Exception && Exception.DoesNotExist.equals(e);
206
-
207
- // src/validation/When.ts
208
- var When = class _When {
209
- constructor(subject, valid = true, results) {
210
- this.subject = subject;
211
- this.valid = valid;
212
- this.results = results;
213
- }
214
- get not() {
215
- return this.clone(!this.valid);
216
- }
217
- get and() {
218
- return this.clone(this.valid);
219
- }
220
- get isDefined() {
221
- return this.clone(this.valid === isDefined(this.subject));
222
- }
223
- get isEmpty() {
224
- return this.clone(this.valid === isEmpty(this.subject));
225
- }
226
- get isTrue() {
227
- return this.clone(this.valid === !!this.subject);
228
- }
229
- get isValid() {
230
- this.results = validate(this.subject);
231
- return this.clone(this.valid === this.results.isValid);
232
- }
233
- isInstance = (c) => this.clone(this.valid === this.subject instanceof c);
234
- with = (pred) => this.clone(this.valid === ofGet(pred, this.subject));
235
- contains = (property) => this.clone(this.valid === isDefined(ofGet(property, this.subject)));
236
- in = (...items) => this.clone(this.valid === isIn(this.subject, toArray(...items)));
237
- is = (item) => this.clone(this.valid === (this.subject === item));
238
- reject = (error) => !this.valid ? resolve(this.subject) : reject(ofGet(error, this.subject) ?? this.results ?? Exception.Unknown);
239
- recover = (f) => resolve(!this.valid ? this.subject : f(this.subject));
240
- clone = (result = true) => new _When(this.subject, result, this.results);
241
- };
242
- var when = (subject) => new When(subject);
243
-
244
291
  // src/types/Context.ts
245
292
  var DotEnvContext = class {
246
293
  domain = process.env.DOMAIN ?? "easy";
@@ -472,122 +519,65 @@ var validate = (subject) => choose(subject).is.not.defined(
472
519
  var validateReject = (subject) => when(subject).not.isValid.reject();
473
520
  var isValid = (t) => validate(t).isValid;
474
521
 
475
- // src/types/Try.ts
476
- var Try = class _Try {
477
- is = {
478
- defined: (prop) => this.filter((v) => isDefined(prop ? prop(v) : v)),
479
- empty: (prop) => this.filter((v) => isEmpty(prop ? prop(v) : v)),
480
- valid: (prop) => this.filter((v) => validate(prop ? prop(v) : v).isValid),
481
- true: (prop) => this.filter((v) => isTrue(prop ? prop(v) : v)),
482
- false: (prop) => this.filter((v) => !isTrue(prop ? prop(v) : v)),
483
- not: {
484
- defined: (prop) => this.filter((v) => !isDefined(prop ? prop(v) : v)),
485
- empty: (prop) => this.filter((v) => !isEmpty(prop ? prop(v) : v)),
486
- valid: (prop) => this.filter((v) => !validate(prop ? prop(v) : v).isValid)
487
- }
488
- };
489
- if = this.is;
490
- static of = (c, ...args) => {
491
- try {
492
- const out = ofGet(c, ...args);
493
- return new Success(out instanceof _Try ? out.value : out);
494
- } catch (e) {
495
- return new Failure(e);
496
- }
497
- };
498
- };
499
- var Success = class extends Try {
500
- constructor(value) {
501
- super();
502
- this.value = value;
503
- }
504
- get error() {
505
- throw new Error("No error found");
506
- }
507
- get isValid() {
508
- return true;
509
- }
510
- map(f) {
511
- return tryTo(f, this.value);
512
- }
513
- recover(f) {
514
- return this;
515
- }
516
- recoverFrom(type, f) {
517
- return this;
518
- }
519
- accept(f) {
520
- return tryTo(() => {
521
- f(this.value);
522
- return this;
523
- });
524
- }
525
- filter(predicate) {
526
- return tryTo(() => {
527
- if (predicate(this.value))
528
- return this;
529
- throw new Error(`Applying filter(${predicate.toString()}) failed.`);
530
- });
531
- }
532
- or(value) {
533
- return this.value;
534
- }
535
- orElse(value) {
536
- return this.value;
537
- }
538
- orThrow(_error) {
539
- return this.value;
522
+ // src/types/Exception.ts
523
+ var Exception = class _Exception extends Enum {
524
+ constructor(message, id, reason) {
525
+ super(message, id ?? text(message).pascal.toString());
526
+ this.message = message;
527
+ this.reason = reason;
540
528
  }
529
+ static AlreadyExists = new _Exception("Subject already exists");
530
+ static DoesNotExist = new _Exception("Does not exist");
531
+ static IsMissingId = new _Exception("Subject is missing an id");
532
+ static IsNotImplemented = new _Exception("Is not implemented");
533
+ static IsNotValid = new _Exception("Is not valid");
534
+ static Unknown = new _Exception("Unknown error");
535
+ static CouldNotExecute = (target) => new _Exception(`Could not execute ${target}.`, "CouldNotExecute");
536
+ static CouldNotValidate = (target) => new _Exception(`Could not validate ${target}.`, "CouldNotValidate");
537
+ static EnvironmentVariableNotFound = (variable) => new _Exception(`Environment variable ${text(variable).upper} could not be found.`, "EnvironmentVariableNotFound");
538
+ because = (reason) => new _Exception(this.message, this.id, reason);
541
539
  };
542
- var Failure = class _Failure extends Try {
543
- constructor(error) {
544
- super();
545
- this.error = error;
546
- }
547
- get value() {
548
- throw this.error;
549
- }
550
- get isValid() {
551
- return false;
552
- }
553
- map(f) {
554
- return new _Failure(this.error);
555
- }
556
- recover(f) {
557
- return tryTo(f, this.error);
540
+ var isException = (e, t) => e instanceof Exception && (isDefined(t) ? e.equals(asString(t)) : true);
541
+ var isDoesNotExist = (e) => e instanceof Exception && Exception.DoesNotExist.equals(e);
542
+
543
+ // src/validation/When.ts
544
+ var When = class _When {
545
+ constructor(subject, valid = true, results) {
546
+ this.subject = subject;
547
+ this.valid = valid;
548
+ this.results = results;
558
549
  }
559
- recoverFrom(type, f) {
560
- return tryTo(() => this.error instanceof type ? this.recover(f) : this);
550
+ get not() {
551
+ return this.clone(!this.valid);
561
552
  }
562
- accept(f) {
563
- return this;
553
+ get and() {
554
+ return this.clone(this.valid);
564
555
  }
565
- filter(predicate) {
566
- return this;
556
+ get isDefined() {
557
+ return this.clone(this.valid === isDefined(this.subject));
567
558
  }
568
- or(value) {
569
- return ofGet(value);
559
+ get isEmpty() {
560
+ return this.clone(this.valid === isEmpty(this.subject));
570
561
  }
571
- orElse(value) {
572
- return ofGet(value);
562
+ get isTrue() {
563
+ return this.clone(this.valid === !!this.subject);
573
564
  }
574
- orThrow(error) {
575
- throw ofConstruct(error);
565
+ get isValid() {
566
+ this.results = validate(this.subject);
567
+ return this.clone(this.valid === this.results.isValid);
576
568
  }
569
+ isInstance = (c) => this.clone(this.valid === this.subject instanceof c);
570
+ with = (pred) => this.clone(this.valid === ofGet(pred, this.subject));
571
+ contains = (property) => this.clone(this.valid === isDefined(ofGet(property, this.subject)));
572
+ in = (...items) => this.clone(this.valid === isIn(this.subject, toArray(...items)));
573
+ is = (item) => this.clone(this.valid === (this.subject === item));
574
+ reject = (error) => !this.valid ? resolve(this.subject) : reject(ofGet(error, this.subject) ?? this.results ?? Exception.Unknown);
575
+ recover = (f) => resolve(!this.valid ? this.subject : f(this.subject));
576
+ clone = (result = true) => new _When(this.subject, result, this.results);
577
577
  };
578
- var tryTo = (c, ...args) => Try.of(c, ...args);
578
+ var when = (subject) => new When(subject);
579
579
 
580
580
  export {
581
- Try,
582
- tryTo,
583
- Template,
584
- template,
585
- ToText,
586
- text,
587
- textValue,
588
- Exception,
589
- isException,
590
- isDoesNotExist,
591
581
  When,
592
582
  when,
593
583
  DotEnvContext,
@@ -604,6 +594,16 @@ export {
604
594
  asResults,
605
595
  validate,
606
596
  validateReject,
607
- isValid
597
+ isValid,
598
+ Try,
599
+ tryTo,
600
+ Template,
601
+ template,
602
+ ToText,
603
+ text,
604
+ textValue,
605
+ Exception,
606
+ isException,
607
+ isDoesNotExist
608
608
  };
609
- //# sourceMappingURL=chunk-HI4ZKGVP.mjs.map
609
+ //# sourceMappingURL=chunk-W44K6LRU.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types/Try.ts","../src/types/Template.ts","../src/types/ToText.ts","../src/types/Context.ts","../src/types/Result.ts","../src/types/Results.ts","../src/types/Case.ts","../src/validation/Validate.ts","../src/types/Exception.ts","../src/validation/When.ts"],"sourcesContent":["import { isDefined, isEmpty, isTrue } from './Is';\nimport { validate } from '../validation/Validate';\nimport { Construct, Constructor, ofConstruct } from './Constructor';\nimport { Validatable } from './Validatable';\nimport { Get, ofGet } from './Get';\nimport { Func } from './Func';\nimport { Optional } from './Types';\n\nexport abstract class Try<T = unknown> implements Validatable {\n is = {\n defined: (prop?: Func<unknown, T>): Try<T> => this.filter(v => isDefined(prop ? prop(v) : v)),\n empty: (prop?: Func<unknown, T>): Try<T> => this.filter(v => isEmpty(prop ? prop(v) : v)),\n valid: (prop?: Func<unknown, T>): Try<T> => this.filter(v => validate(prop ? prop(v) : v).isValid),\n true: (prop?: Func<unknown, T>): Try<T> => this.filter(v => isTrue(prop ? prop(v) : v)),\n false: (prop?: Func<unknown, T>): Try<T> => this.filter(v => !isTrue(prop ? prop(v) : v)),\n not: {\n defined: (prop?: Func<unknown, T>): Try<T> => this.filter(v => !isDefined(prop ? prop(v) : v)),\n empty: (prop?: Func<unknown, T>): Try<T> => this.filter(v => !isEmpty(prop ? prop(v) : v)),\n valid: (prop?: Func<unknown, T>): Try<T> => this.filter(v => !validate(prop ? prop(v) : v).isValid),\n },\n };\n\n if = this.is;\n\n abstract get value(): T;\n\n abstract get error(): Error;\n\n abstract get isValid(): boolean;\n\n static of = <T>(c: Get<T | Try<T>>, ...args: unknown[]): Try<T> => {\n try {\n const out = ofGet(c, ...args);\n return new Success(out instanceof Try ? out.value : out);\n } catch (e) {\n return new Failure(e as Error);\n }\n };\n\n abstract map<U>(f: Func<U | Try<U>, T>): Try<U>;\n\n abstract recover(f: Func<T | Try<T>, Error>): Try<T>;\n\n abstract recoverFrom(type: Constructor<Error>, f: Func<T | Try<T>, Error>): Try<T>;\n\n abstract accept(f: Func<void, T>): Try<T>;\n\n abstract filter(predicate: Func<boolean, T>): Try<T>;\n\n abstract or(value: Get<T>): T;\n\n abstract orElse(value?: Get<T>): Optional<T>;\n\n abstract orThrow(error: Construct<Error>): T;\n}\n\nclass Success<T> extends Try<T> {\n constructor(readonly value: T) {\n super();\n }\n\n get error(): Error {\n throw new Error('No error found');\n }\n\n get isValid(): boolean {\n return true;\n }\n\n map<U>(f: Func<U | Try<U>, T>): Try<U> {\n return tryTo<U>(f, this.value);\n }\n\n recover(f: Func<T | Try<T>, Error>): Try<T> {\n return this;\n }\n\n recoverFrom(type: Constructor<Error>, f: Func<T | Try<T>, Error>): Try<T> {\n return this;\n }\n\n accept(f: Func<void, T>): Try<T> {\n return tryTo(() => {\n f(this.value);\n return this;\n });\n }\n\n filter(predicate: Func<boolean, T>): Try<T> {\n return tryTo(() => {\n if (predicate(this.value)) return this;\n throw new Error(`Applying filter(${predicate.toString()}) failed.`);\n });\n }\n\n or(value: Get<T>): T {\n return this.value;\n }\n\n orElse(value?: Get<T>): Optional<T> {\n return this.value;\n }\n\n orThrow(_error: Construct<Error>): T {\n return this.value;\n }\n}\n\nclass Failure<T> extends Try<T> {\n constructor(readonly error: Error) {\n super();\n }\n\n get value(): T {\n throw this.error;\n }\n\n get isValid(): boolean {\n return false;\n }\n\n map<U>(f: Func<U | Try<U>, T>): Try<U> {\n return new Failure<U>(this.error);\n }\n\n recover<U>(f: Func<U | Try<U>, Error>): Try<U> {\n return tryTo<U>(f, this.error);\n }\n\n recoverFrom<U>(type: Constructor<Error>, f: Func<T | Try<T>, Error>): Try<T> {\n return tryTo(() => (this.error instanceof type ? this.recover(f) : this));\n }\n\n accept(f: Func<void, T>): Try<T> {\n return this;\n }\n\n filter(predicate: Func<boolean, T>): Try<T> {\n return this;\n }\n\n or(value: Get<T>): T {\n return ofGet(value);\n }\n\n orElse(value?: Get<T>): Optional<T> {\n return ofGet(value);\n }\n\n orThrow(error: Construct<Error>): T {\n throw ofConstruct(error);\n }\n}\n\nexport const tryTo = <T>(c: Get<T | Try<T>>, ...args: unknown[]) => Try.of<T>(c, ...args);\n","import { List, toList } from './List';\nimport { asString, Text } from './Text';\nimport { toName } from './Constructor';\nimport { entries } from './Object';\nimport { text, textValue } from './ToText';\nimport { tryTo } from './Try';\n\nexport type TemplateOptions = { typeof?: Text; property?: Text; actual?: Text; subject?: Text };\n\nexport class Template implements Text {\n private knownPrefixes = new Set(['typeof', 'property', 'actual', 'subject']);\n\n constructor(\n private readonly template: string,\n private readonly subject: unknown = {},\n private readonly options: TemplateOptions = {}\n ) {}\n\n toString = (): string => {\n return entries(this.options)\n .reduce((t, [k]) => this.option(t, k), this.object())\n .replace(' ', ' ');\n };\n\n private readonly props = (tmpl: string, key: string, result: List<string> = toList()): string[] => {\n const i1 = tmpl.indexOf(`{${key}`);\n if (i1 < 0) {\n return result;\n }\n const i2 = tmpl.indexOf('}', i1);\n return this.props(tmpl.slice(i2 + 1), key, result.add(tmpl.substring(i1 + 1, i2)));\n };\n\n private readonly object = (): string =>\n tryTo(() => this.template.replace(/\\{this\\./g, '{'))\n .map(t => t.replace(/\\{([^{}]+)}/g, (match, p) => (this.knownPrefixes.has(p.split('.')[0]) ? match : textValue(this.subject, p))))\n .or('');\n\n private readonly option = (tmpl: string, prop: string): string => {\n return this.props(tmpl, prop).reduce((t: string, p) => t.replace(`{${p}}`, textValue(this.options, p)), tmpl);\n };\n}\n\nexport function template(tmpl: Text, subject: unknown, options: TemplateOptions = {}): Text {\n return new Template(asString(tmpl), subject, {\n typeof: toName(subject),\n subject: text(JSON.stringify(subject)),\n ...options,\n });\n}\n","import { asString, capitalize, replaceAll, Text } from './Text';\nimport { toName } from './Constructor';\nimport { Optional } from './Types';\nimport { Get, ofGet } from './Get';\nimport { isEmpty, isNotEmpty } from './Is';\nimport { List, toList } from './List';\nimport { JsonValue } from './Json';\nimport { template } from './Template';\n\nexport class ToText implements Text {\n constructor(readonly subject: string) {}\n\n get cap(): ToText {\n return this.map(s => capitalize(s?.toLowerCase()));\n }\n\n get capFirst(): ToText {\n return this.map(s => capitalize(s));\n }\n\n get title(): ToText {\n return this.map(s =>\n s\n .split(' ')\n .map(w => text(w).cap)\n .join(' ')\n );\n }\n\n get pascal(): ToText {\n return this.title.replace(' ', '');\n }\n\n get lower(): ToText {\n return this.map(s => s.toLowerCase());\n }\n\n get upper(): ToText {\n return this.map(s => s.toUpperCase());\n }\n\n get camel(): ToText {\n return this.title.trim.map(s => `${s.charAt(0).toLowerCase()}${s.slice(1)}`);\n }\n\n get kebab(): ToText {\n return this.lower.replace(' ', '-');\n }\n\n get strictKebab(): ToText {\n return this.map(s => s.replace(/[^a-z\\d]+/gi, ' ').trim()).kebab;\n }\n\n get slug(): ToText {\n return this.map(s =>\n s\n .replace(/ß/g, 'ss')\n .normalize('NFKD')\n .replace(/[\\u0300-\\u036F]/g, '')\n .toLowerCase()\n .replace(/[^a-z\\d]+/g, '-')\n .replace(/(^-)|(-$)/g, '')\n );\n }\n\n get snake(): ToText {\n return this.upper.replace(' ', '_');\n }\n\n get plural(): ToText {\n return this.ifLike('') ?? this.add('s');\n }\n\n get space(): ToText {\n return this.map(s => s.replace(/([a-z0-9])([A-Z])/g, '$1 $2').replace(/[_-]/g, ' '));\n }\n\n get sentence(): ToText {\n return this.isEmpty ? this : this.map(s => `${s.charAt(0).toUpperCase()}${s.slice(1)}.`);\n }\n\n get initials(): ToText {\n return this.map(s =>\n s\n .split(' ')\n .map(w => w[0])\n .join('')\n );\n }\n\n get trim(): ToText {\n return this.map(s => s.replace(/[- ,_#]/g, ''));\n }\n\n get trimSentence(): ToText {\n return this.map(s =>\n s\n .replace(/[\\u200B-\\u200D\\uFEFF]/g, '')\n .replace(/[\\s\\u00A0]+/g, ' ')\n .replace(/\\s+([.,;:!?])/g, '$1')\n .trim()\n );\n }\n\n get isEmpty(): boolean {\n return isEmpty(this.toString());\n }\n\n parse = (subject: unknown, options = {}): ToText => text(template(this.subject, subject, { typeof: toName(subject), ...options }));\n\n is = (...others: unknown[]): boolean => others.some(o => this.toString() === text(o).toString());\n\n equals = this.is;\n\n like = (...others: unknown[]): boolean => others.some(o => this.trim.lower.toString().includes(text(o).trim.lower.toString()));\n\n isLike = (...others: unknown[]): boolean => others.some(o => this.trim.lower.is(text(o).trim.lower));\n\n ifLike = (...others: unknown[]): Optional<this> => (this.isLike(...others) ? this : undefined);\n\n endsWith = (end?: unknown): boolean => this.subject.endsWith(asString(end));\n\n startsWith = (end?: unknown): boolean => this.subject.startsWith(asString(end));\n\n first = (n: number): ToText => this.map(s => s.substring(0, n));\n\n last = (n: number): ToText => this.map(s => s.substring(s.length - n));\n\n map = (func: Get<string, string>): ToText => text(ofGet(func, this.subject));\n\n replace = (search: Text, replace: Text): ToText => this.map(s => replaceAll(s, search, replace));\n\n add = (add?: unknown, separator = ''): ToText => this.map(s => (isNotEmpty(add) ? `${s}${separator}${text(add)}` : s));\n\n with = (separator: string, ...other: unknown[]): ToText =>\n this.map(s =>\n toList(s)\n .add(...other.map(u => text(u).toString()))\n .filter(s => isNotEmpty(s))\n .join(separator)\n );\n\n split = (separator: string = ' '): List<string> => toList(this.subject.split(separator));\n\n toString(): string {\n return this.subject;\n }\n\n toJSON(): JsonValue {\n return this.subject;\n }\n}\n\nexport function text(subject?: unknown, alt = ''): ToText {\n const sub = subject ? asString(subject) : alt;\n return new ToText(sub !== '[object Object]' ? sub : '');\n}\n\nexport function textValue(subject: any, prop: string): string {\n const p = prop.split('.');\n const root = subject?.[p[0]];\n const initial = typeof root === 'object' && root !== null ? root : text(root);\n return (\n p\n .splice(1)\n .reduce((t, s) => (typeof t === 'object' && t !== null ? t : text(t))?.[s], initial)\n ?.toString() ?? ''\n );\n}\n","import { Uuid } from './Uuid';\nimport { Identity } from './Identity';\nimport { Optional } from './Types';\n\nimport { text } from './ToText';\n\nexport interface EnvContext {\n readonly domain: string;\n readonly name: string;\n readonly host: string;\n readonly port: number;\n readonly app: string;\n\n get(key: string, alt?: string): Optional<string>;\n}\n\nexport class DotEnvContext implements EnvContext {\n readonly domain = process.env.DOMAIN ?? 'easy';\n readonly name = process.env.ENVIRONMENT_NAME ?? '';\n readonly host = process.env.HOST ?? '';\n readonly port = Number.parseInt(process.env.PORT ?? '8080');\n readonly app = process.env.APP ?? '';\n\n readonly get = (key: string, alt?: string): Optional<string> => {\n const k = text(key)\n .map(k => k.replace(/([a-z])([A-Z])/g, '$1 $2'))\n .snake.toString();\n return process.env[k] ?? alt;\n };\n}\n\nexport interface RequestContext {\n token?: any;\n identity?: Identity;\n jwt: string;\n correlationId?: Uuid;\n lastError?: string;\n lastErrorStack?: string;\n create: (f: () => void) => void;\n\n get<T>(key: string): T;\n\n set<T>(key: string, value: T): T;\n\n wrap<T>(f: () => Promise<T>): Promise<T>;\n}\n\nexport class BaseRequestContext implements RequestContext {\n private state: any = {};\n\n get token(): any {\n return this.get('token');\n }\n\n set token(token: any) {\n this.set('token', token);\n }\n\n get identity(): Identity {\n return this.token as Identity;\n }\n\n get jwt(): string {\n return this.get('jwt');\n }\n\n set jwt(jwt: string) {\n this.set('jwt', jwt);\n }\n\n get correlationId(): Uuid {\n return this.get('correlationId');\n }\n\n set correlationId(id: Uuid) {\n this.set('correlationId', id);\n }\n\n get lastError(): Optional<string> {\n return this.get('lastError');\n }\n\n set lastError(error: Optional<string>) {\n this.set('lastError', error);\n }\n\n public get<T>(key: string): T {\n return this.state[key] as T;\n }\n\n public set<T>(key: string, value: T): T {\n return (this.state[key] = value);\n }\n\n public readonly create = (f: () => void): void => f();\n\n public readonly wrap = <T>(f: () => Promise<T>): Promise<T> => f();\n}\n\n/**\n * @deprecated Renamed to BaseRequestContext\n */\nexport class BaseContext extends BaseRequestContext {}\n\nexport interface Contexts {\n env?: EnvContext;\n request?: RequestContext;\n other?: any;\n}\n\nexport class Context {\n constructor(protected state: Contexts = {}) {\n this.state = {\n ...{\n env: new DotEnvContext(),\n request: new BaseRequestContext(),\n other: {},\n },\n ...this.state,\n };\n }\n\n get env(): EnvContext {\n return this.state.env as EnvContext;\n }\n\n set env(env: EnvContext) {\n this.state.env = env;\n }\n\n get request(): RequestContext {\n return this.state.request as RequestContext;\n }\n\n set request(request: RequestContext) {\n this.state.request = request;\n }\n\n get other(): any {\n return this.state.other;\n }\n}\n\nexport const ctx = new Context();\n","import { isA } from './IsA';\nimport { Text } from './Text';\nimport { ctx } from './Context';\nimport { TypeGuard } from './TypeGuard';\n\nexport type Result = { message: string; location?: string; domain?: string };\n\nexport const toResult = (message: Text, location?: Text, domain: Text = ctx.env.domain): Result => ({\n message: message.toString(),\n location: location?.toString(),\n domain: domain?.toString(),\n});\n\nexport const isResult: TypeGuard<Result> = (r?: unknown): r is Result => isA<Result>(r, 'message');\n","import { Text } from './Text';\nimport { isResult, Result, toResult } from './Result';\nimport { Validatable } from './Validatable';\nimport { isDefined } from './Is';\nimport { toArray } from './Array';\n\nconst parse = (...rs: (Text | Result)[]): Result[] => toArray(...rs).map(r => (isResult(r) ? r : toResult(r)));\n\nexport class Results implements Validatable {\n public readonly results: Result[];\n\n constructor(...rs: (Text | Result)[]) {\n this.results = parse(...rs);\n }\n\n get length(): number {\n return this.results.length;\n }\n\n get isValid(): boolean {\n return this.results.length === 0;\n }\n\n add = (...rs: (Text | Result)[]): Results => toResults(...this.results, ...parse(...rs));\n}\n\nexport const toResults = (...r: (Text | Result)[]): Results => new Results(...r);\n\nexport const isResults = (r?: unknown): r is Results => isDefined(r) && r instanceof Results;\n","import { Get, ofGet, Predicate } from './Get';\nimport { TypeGuard } from './TypeGuard';\nimport { Func } from './Func';\nimport { isDefined, isEmpty } from './Is';\nimport { validate } from '../validation/Validate';\nimport { tryTo } from './Try';\n\nclass CaseBuilder<V> {\n is = {\n true: <T>(pred: Predicate<V>, out: Get<T, V>): Case<T, V> => this.case(pred, out),\n false: <T>(pred: Predicate<V>, out: Get<T, V>): Case<T, V> => this.case(!ofGet(pred, this.v), out),\n truthy: <T>(prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => this.case(!!prop(this.v), out),\n falsy: <T>(prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => this.case(!prop(this.v), out),\n defined: <T>(prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => this.case(isDefined(prop(this.v)), out),\n empty: <T>(prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => this.case(isEmpty(prop(this.v)), out),\n valid: <T>(prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => this.case(validate(prop(this.v)).isValid, out),\n in: <T>(prop: Get<Array<V>, V>, out: Get<T, V>): Case<T, V> => this.case(ofGet(prop, this.v).includes(this.v), out),\n type: <T, U = unknown>(guard: TypeGuard<U>, out: Func<T, U>): Case<T, V> => this.type<T, U>(guard, out),\n not: {\n true: <T>(pred: Predicate<V>, out: Get<T, V>): Case<T, V> => this.case(!ofGet(pred, this.v), out),\n false: <T>(pred: Predicate<V>, out: Get<T, V>): Case<T, V> => this.case(pred, out),\n truthy: <T>(prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => this.case(!prop(this.v), out),\n falsy: <T>(prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => this.case(!!prop(this.v), out),\n defined: <T>(prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => this.case(!isDefined(prop(this.v)), out),\n empty: <T>(prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => this.case(!isEmpty(prop(this.v)), out),\n valid: <T>(prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => this.case(!validate(prop(this.v)).isValid, out),\n in: <T>(prop: Get<Array<V>, V>, out: Get<T, V>): Case<T, V> => this.case(!ofGet(prop, this.v).includes(this.v), out),\n type: <T, U = unknown>(guard: TypeGuard<U>, out: Get<T, V>): Case<T, V> => this.case(v => !guard(v as unknown), out),\n },\n };\n if = this.is;\n\n constructor(readonly v: V) {}\n\n case<T>(pred: Predicate<V>, out: Get<T, V>): Case<T, V> {\n return new Case<T, V>(this.v).case(pred, out);\n }\n\n type<T, U = unknown>(guard: TypeGuard<U>, out: Func<T, U>): Case<T, V> {\n return new Case<T, V>(this.v).type<U>(guard, out);\n }\n\n equals<T>(value: V, out: Get<T, V>): Case<T, V> {\n return new Case<T, V>(this.v).equals(value, out);\n }\n}\n\nclass Case<T, V = unknown> {\n is = {\n true: (pred: Predicate<V>, out: Get<T, V>): Case<T, V> => this.case(pred, out),\n false: (pred: Predicate<V>, out: Get<T, V>): Case<T, V> => this.case(!ofGet(pred, this.value), out),\n truthy: (prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => this.case(!!prop(this.value), out),\n falsy: (prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => this.case(!prop(this.value), out),\n defined: (prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => this.case(isDefined(prop(this.value)), out),\n empty: (prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => this.case(isEmpty(prop(this.value)), out),\n valid: (prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => this.case(validate(prop(this.value)).isValid, out),\n in: (prop: Get<Array<V>, V>, out: Get<T, V>): Case<T, V> => this.case(ofGet(prop, this.value).includes(this.value), out),\n type: <U>(guard: TypeGuard<U>, out: Func<T, U>): Case<T, V> => this.type<U>(guard, out),\n not: {\n true: (pred: Predicate<V>, out: Get<T, V>): Case<T, V> => this.case(!ofGet(pred, this.value), out),\n false: (pred: Predicate<V>, out: Get<T, V>): Case<T, V> => this.case(pred, out),\n truthy: (prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => this.case(!prop(this.value), out),\n falsy: (prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => this.case(!!prop(this.value), out),\n defined: (prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => this.case(!isDefined(prop(this.value)), out),\n empty: (prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => this.case(!isEmpty(prop(this.value)), out),\n valid: (prop: Func<unknown, V>, out: Get<T, V>): Case<T, V> => this.case(!validate(prop(this.value)).isValid, out),\n in: (prop: Get<Array<V>, V>, out: Get<T, V>): Case<T, V> => this.case(!ofGet(prop, this.value).includes(this.value), out),\n type: <U>(guard: TypeGuard<U>, out: Get<T, V>): Case<T, V> => this.case(v => !guard(v as unknown), out),\n },\n };\n if = this.is;\n\n constructor(\n protected value: V,\n protected outcome?: T\n ) {}\n\n case(pred: Predicate<V>, out: Get<T, V>): Case<T, V> {\n return tryTo(pred, this.value)\n .is.true()\n .map(() => ofGet(out, this.value))\n .map(res => new Found(this.value, res) as Case<T, V>)\n .or(this);\n }\n\n type<U>(guard: TypeGuard<U>, out: Func<T, U>): Case<T, V> {\n return tryTo(guard, this.value)\n .is.true()\n .map(() => out(this.value as unknown as U))\n .map(res => new Found(this.value, res) as Case<T, V>)\n .or(this);\n }\n\n equals(value: V, out: Get<T, V>): Case<T, V> {\n return this.case(this.value === value, out);\n }\n\n else(alt: Get<T, V>): T {\n return ofGet<T, V>(alt, this.value);\n }\n}\n\nclass Found<T, V> extends Case<T, V> {\n constructor(\n protected value: V,\n protected outcome: T\n ) {\n super(value, outcome);\n }\n\n case(pred: Predicate<V>, out: Get<T, V>): this {\n return this;\n }\n\n type<U>(guard: TypeGuard<U>, out: Func<T, U>): Case<T, V> {\n return this;\n }\n\n equals(value: V, out: Get<T, V>): Case<T, V> {\n return this;\n }\n\n else(alt: Get<T, V>): T {\n return this.outcome;\n }\n}\n\nexport const choose = <V>(value: V) => new CaseBuilder<V>(value);\n","import { Constraint } from './Contraints';\nimport { when } from './When';\nimport type { TemplateOptions } from '../types/Template';\nimport { isResults, Results, toResults } from '../types/Results';\nimport { toName } from '../types/Constructor';\nimport { toResult } from '../types/Result';\nimport { List, toList } from '../types/List';\nimport { meta } from '../types/Meta';\nimport { isArray, isFunction } from '../types/Is';\nimport type { Text } from '../types/Text';\nimport { asString } from '../types/Text';\nimport { choose } from '../types/Case';\nimport { isEnum } from '../types/Enum';\nimport { isValue } from '../types/Value';\nimport { isValidatable } from '../types/Validatable';\nimport { text } from '../types/ToText';\n\nexport type Validator = { property: string | symbol; constraint: Constraint; text: Text; actual?: Text };\n\nexport const asResults = (subject: unknown, template: Text, options: TemplateOptions = {}): Results =>\n toResults(toResult(text(template).parse(subject, options), toName(subject)));\n\nconst validators = (subject: unknown): List<Validator> =>\n meta(subject)\n .keys<List<Validator>>('constraint')\n .reduce((list, vs) => list.add(vs), toList<Validator>());\n\nconst runValidator = (v: Validator, subject?: unknown): Results => {\n try {\n const actual = isFunction((subject as any)[v.property]) ? (subject as any)[v.property]() : (subject as any)[v.property];\n const constraint = v.constraint(actual);\n return isResults(constraint)\n ? constraint\n : !constraint\n ? asResults(subject, v.text, {\n ...v,\n actual,\n })\n : toResults();\n } catch (e) {\n return asResults(subject, asString(e));\n }\n};\n\nconst constraints = (subject?: unknown): Results =>\n validators(subject)\n .map(vs => runValidator(vs, subject))\n .reduce((rs, r) => rs.add(...r.results), toResults());\n\nexport const validate = (subject?: unknown): Results =>\n choose(subject)\n .is.not.defined(\n s => s,\n () => toResults('Subject is not defined.')\n )\n .type(isEnum, e => (e.isValid ? toResults() : asResults(e, 'This is not a valid {typeof}.')))\n .type(isValue, v => (v.isValid ? toResults() : asResults(v, 'This is not a valid {typeof}.')))\n .type(isArray, a => a.map(i => validate(i)).reduce((rs, r) => rs.add(...r.results), toResults()))\n .type(isValidatable, v => constraints(v))\n .else(toResults());\n\nexport const validateReject = <T>(subject: T): Promise<T> => when(subject).not.isValid.reject();\n\nexport const isValid = <T>(t: T): boolean => validate(t).isValid;\n","import { asString, Text } from './Text';\nimport { Enum } from './Enum';\nimport { isDefined } from './Is';\nimport { Id } from './Id';\n\nimport { text } from './ToText';\n\nexport class Exception extends Enum {\n static readonly AlreadyExists = new Exception('Subject already exists');\n static readonly DoesNotExist = new Exception('Does not exist');\n static readonly IsMissingId = new Exception('Subject is missing an id');\n static readonly IsNotImplemented = new Exception('Is not implemented');\n static readonly IsNotValid = new Exception('Is not valid');\n static readonly Unknown = new Exception('Unknown error');\n\n constructor(\n readonly message: string,\n id?: Id,\n readonly reason?: Text\n ) {\n super(message, id ?? text(message).pascal.toString());\n }\n\n static readonly CouldNotExecute = (target: Text): Exception => new Exception(`Could not execute ${target}.`, 'CouldNotExecute');\n\n static readonly CouldNotValidate = (target: Text): Exception => new Exception(`Could not validate ${target}.`, 'CouldNotValidate');\n\n static readonly EnvironmentVariableNotFound = (variable: Text): Exception =>\n new Exception(`Environment variable ${text(variable).upper} could not be found.`, 'EnvironmentVariableNotFound');\n\n because = (reason: Text): Exception => new Exception(this.message, this.id, reason);\n}\n\nexport const isException = (e?: unknown, t?: Text): e is Exception => e instanceof Exception && (isDefined(t) ? e.equals(asString(t)) : true);\nexport const isDoesNotExist = (e?: unknown): e is Exception => e instanceof Exception && Exception.DoesNotExist.equals(e);\n","import { validate } from './Validate';\nimport { Results } from '../types/Results';\nimport { Constructor } from '../types/Constructor';\nimport { Get, ofGet, Predicate } from '../types/Get';\nimport { isDefined, isEmpty, isIn } from '../types/Is';\nimport { toArray } from '../types/Array';\nimport { ErrorOrigin } from '../types/ErrorOrigin';\nimport { reject, resolve } from '../utils/Promise';\nimport { Exception } from '../types/Exception';\n\nexport class When<W> {\n constructor(\n readonly subject: W,\n readonly valid = true,\n private results?: Results\n ) {}\n\n get not(): When<W> {\n return this.clone(!this.valid);\n }\n\n get and(): When<W> {\n return this.clone(this.valid);\n }\n\n get isDefined(): When<W> {\n return this.clone(this.valid === isDefined(this.subject));\n }\n\n get isEmpty(): When<W> {\n return this.clone(this.valid === isEmpty(this.subject));\n }\n\n get isTrue(): When<W> {\n return this.clone(this.valid === !!this.subject);\n }\n\n get isValid(): When<W> {\n this.results = validate(this.subject);\n return this.clone(this.valid === this.results.isValid);\n }\n\n isInstance = <U>(c: Constructor<U>): When<W> => this.clone(this.valid === this.subject instanceof c);\n\n with = (pred: Predicate<W>): When<W> => this.clone(this.valid === ofGet(pred, this.subject));\n\n contains = (property: (w: W) => unknown): When<W> => this.clone(this.valid === isDefined(ofGet(property, this.subject)));\n\n in = (...items: W[]): When<W> => this.clone(this.valid === isIn(this.subject, toArray(...items)));\n\n is = (item: W): When<W> => this.clone(this.valid === (this.subject === item));\n\n reject = (error?: Get<ErrorOrigin, W>): Promise<NonNullable<W>> =>\n !this.valid ? resolve(this.subject as NonNullable<W>) : reject(ofGet(error, this.subject) ?? this.results ?? Exception.Unknown);\n\n recover = (f: (item: W) => W | Promise<W>): Promise<W> => resolve(!this.valid ? this.subject : f(this.subject));\n\n protected clone = (result = true): When<W> => new When(this.subject, result, this.results);\n}\n\nexport const when = <T>(subject: T): When<T> => new When<T>(subject);\n"],"mappings":"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","names":["template","s","k","template"]}
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-QZTS3WY5.mjs";
4
4
  import {
5
5
  json
6
- } from "./chunk-DLL5JW5M.mjs";
6
+ } from "./chunk-YXAXW4CU.mjs";
7
7
  import {
8
8
  isDefined
9
9
  } from "./chunk-DEJ7A5PY.mjs";
@@ -50,4 +50,4 @@ export {
50
50
  toCondition,
51
51
  isSortCondition
52
52
  };
53
- //# sourceMappingURL=chunk-H662YXBM.mjs.map
53
+ //# sourceMappingURL=chunk-WT6TNFBH.mjs.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  rest
3
- } from "./chunk-TBC7JYW7.mjs";
3
+ } from "./chunk-7QHZIOLI.mjs";
4
4
  import {
5
5
  toHttpStatus
6
- } from "./chunk-3Y76ZQ46.mjs";
6
+ } from "./chunk-ZUUMN5JN.mjs";
7
7
 
8
8
  // src/http/toResponse.ts
9
9
  function toResponse(status, body, headers) {
@@ -17,4 +17,4 @@ function toResponse(status, body, headers) {
17
17
  export {
18
18
  toResponse
19
19
  };
20
- //# sourceMappingURL=chunk-5MRHONF6.mjs.map
20
+ //# sourceMappingURL=chunk-X36DYYCE.mjs.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  SqlQuery
3
- } from "./chunk-MKAQMXAZ.mjs";
3
+ } from "./chunk-DFYAOK6M.mjs";
4
4
  import {
5
5
  toList
6
- } from "./chunk-JDXXXRIC.mjs";
6
+ } from "./chunk-YTNVFND2.mjs";
7
7
  import {
8
8
  ifGet
9
9
  } from "./chunk-SJGQU3OG.mjs";
@@ -51,4 +51,4 @@ var Select = class extends SqlQuery {
51
51
  export {
52
52
  Select
53
53
  };
54
- //# sourceMappingURL=chunk-3VXBRJE3.mjs.map
54
+ //# sourceMappingURL=chunk-XL5HGL2Q.mjs.map
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  seconds
3
- } from "./chunk-346UESSY.mjs";
3
+ } from "./chunk-4BMUPWAJ.mjs";
4
4
  import {
5
5
  isDate
6
6
  } from "./chunk-ADJAEGCT.mjs";
7
7
  import {
8
8
  choose,
9
9
  tryTo
10
- } from "./chunk-HI4ZKGVP.mjs";
10
+ } from "./chunk-W44K6LRU.mjs";
11
11
  import {
12
12
  Value
13
13
  } from "./chunk-4262V2GR.mjs";
14
14
  import {
15
15
  ifDefined
16
- } from "./chunk-JDXXXRIC.mjs";
16
+ } from "./chunk-YTNVFND2.mjs";
17
17
  import {
18
18
  isA
19
19
  } from "./chunk-ZHXKBOK2.mjs";
@@ -139,4 +139,4 @@ export {
139
139
  isDateTime,
140
140
  dt
141
141
  };
142
- //# sourceMappingURL=chunk-UPF75QBA.mjs.map
142
+ //# sourceMappingURL=chunk-YGS6ZIIN.mjs.map
@@ -1,9 +1,9 @@
1
- import {
2
- traverse
3
- } from "./chunk-SSROJBD5.mjs";
4
1
  import {
5
2
  toArray
6
3
  } from "./chunk-CO2AFYVD.mjs";
4
+ import {
5
+ traverse
6
+ } from "./chunk-SSROJBD5.mjs";
7
7
  import {
8
8
  equals
9
9
  } from "./chunk-TOERQZRP.mjs";
@@ -28,6 +28,26 @@ import {
28
28
  isTrue
29
29
  } from "./chunk-DEJ7A5PY.mjs";
30
30
 
31
+ // src/utils/If.ts
32
+ function ifTrue(o, f, alt) {
33
+ return isTrue(o) ? ofConstruct(f, o) : ofConstruct(alt, o);
34
+ }
35
+ function ifFalse(o, f, alt) {
36
+ return !isTrue(o) ? ofConstruct(f, o) : ofConstruct(alt, o);
37
+ }
38
+ function ifDefined(o, f, alt) {
39
+ return isDefined(o) ? ofConstruct(f, o) : ofConstruct(alt);
40
+ }
41
+ function ifNotEmpty(o, f = (o2) => o2, alt) {
42
+ return isNotEmpty(o) ? ofConstruct(f, o) : ofConstruct(alt, o);
43
+ }
44
+ function ifEither(os, f = (o) => o, alt) {
45
+ return use(
46
+ toList(os).first((o) => isPresent(o)),
47
+ (o) => isDefined(o) ? ofConstruct(f, o) : ofConstruct(alt, o)
48
+ );
49
+ }
50
+
31
51
  // src/types/List.ts
32
52
  var List = class extends Array {
33
53
  get ids() {
@@ -274,37 +294,17 @@ var asList = (c, items = []) => toList(toArray(items).map((i) => new c(i)));
274
294
  var maxValue = (l, key) => l.desc(key).first()?.[key];
275
295
  var minValue = (l, key) => l.asc(key).first()?.[key];
276
296
 
277
- // src/utils/If.ts
278
- function ifTrue(o, f, alt) {
279
- return isTrue(o) ? ofConstruct(f, o) : ofConstruct(alt, o);
280
- }
281
- function ifFalse(o, f, alt) {
282
- return !isTrue(o) ? ofConstruct(f, o) : ofConstruct(alt, o);
283
- }
284
- function ifDefined(o, f, alt) {
285
- return isDefined(o) ? ofConstruct(f, o) : ofConstruct(alt);
286
- }
287
- function ifNotEmpty(o, f = (o2) => o2, alt) {
288
- return isNotEmpty(o) ? ofConstruct(f, o) : ofConstruct(alt, o);
289
- }
290
- function ifEither(os, f = (o) => o, alt) {
291
- return use(
292
- toList(os).first((o) => isPresent(o)),
293
- (o) => isDefined(o) ? ofConstruct(f, o) : ofConstruct(alt, o)
294
- );
295
- }
296
-
297
297
  export {
298
- ifTrue,
299
- ifFalse,
300
- ifDefined,
301
- ifNotEmpty,
302
- ifEither,
303
298
  List,
304
299
  toList,
305
300
  isList,
306
301
  asList,
307
302
  maxValue,
308
- minValue
303
+ minValue,
304
+ ifTrue,
305
+ ifFalse,
306
+ ifDefined,
307
+ ifNotEmpty,
308
+ ifEither
309
309
  };
310
- //# sourceMappingURL=chunk-JDXXXRIC.mjs.map
310
+ //# sourceMappingURL=chunk-YTNVFND2.mjs.map