@thisisagile/easy 17.4.5 → 17.4.8

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 (157) hide show
  1. package/dist/{chunk-JV3PEYHS.mjs → chunk-24WJGYH4.mjs} +2 -2
  2. package/dist/{chunk-3PPC4YMQ.mjs → chunk-2V3F4LJ5.mjs} +2 -2
  3. package/dist/{chunk-OGMTD753.mjs → chunk-3BXPK7FX.mjs} +2 -2
  4. package/dist/{chunk-QLM2AYD4.mjs → chunk-3DAZTFKD.mjs} +7 -7
  5. package/dist/{chunk-2JX2SSPQ.mjs → chunk-3EYCIHXW.mjs} +3 -3
  6. package/dist/{chunk-DS6NSJUW.mjs → chunk-4KB2NPKQ.mjs} +2 -2
  7. package/dist/chunk-4NI3O7DE.mjs +26 -0
  8. package/dist/chunk-4NI3O7DE.mjs.map +1 -0
  9. package/dist/{chunk-KA3TZADE.mjs → chunk-55B7FIAE.mjs} +2 -2
  10. package/dist/{chunk-WBEMXVO6.mjs → chunk-5GALY24M.mjs} +6 -6
  11. package/dist/{chunk-V7EJJWVX.mjs → chunk-6DL5IBFE.mjs} +3 -3
  12. package/dist/{chunk-L4T4Z7PG.mjs → chunk-6TJC3RI3.mjs} +9 -9
  13. package/dist/chunk-BKA7GVXL.mjs +29 -0
  14. package/dist/chunk-BKA7GVXL.mjs.map +1 -0
  15. package/dist/{chunk-JCINHOMG.mjs → chunk-CHNRVP7J.mjs} +2 -2
  16. package/dist/{chunk-KAYSE6PM.mjs → chunk-CLIM3GJ7.mjs} +3 -3
  17. package/dist/{chunk-4KJZ4LNQ.mjs → chunk-DEESTSMV.mjs} +3 -3
  18. package/dist/{chunk-VRLSZ2MW.mjs → chunk-FZBUEEQB.mjs} +2 -2
  19. package/dist/{chunk-EG3KSNQZ.mjs → chunk-GKDMM6XO.mjs} +3 -3
  20. package/dist/{chunk-2BTY2F3A.mjs → chunk-H6WLTQXF.mjs} +4 -4
  21. package/dist/{chunk-SRFFQJLL.mjs → chunk-H7TRIY7A.mjs} +2 -2
  22. package/dist/{chunk-3LASXEE5.mjs → chunk-HE6MAJDE.mjs} +3 -3
  23. package/dist/{chunk-PJXWZFLD.mjs → chunk-ILJV7234.mjs} +2 -2
  24. package/dist/{chunk-24OSK3DS.mjs → chunk-IXUCBTR3.mjs} +7 -7
  25. package/dist/{chunk-WI2ICJHX.mjs → chunk-JEIESGLS.mjs} +3 -3
  26. package/dist/{chunk-TNOOLHK7.mjs → chunk-KK66VUSS.mjs} +2 -2
  27. package/dist/{chunk-IVX4I3NC.mjs → chunk-L5TIL3QC.mjs} +2 -2
  28. package/dist/{chunk-X3C5CS4X.mjs → chunk-NE6FVUU7.mjs} +4 -4
  29. package/dist/{chunk-PRN25GXK.mjs → chunk-NFZZGGEV.mjs} +2 -2
  30. package/dist/{chunk-T5VZORPQ.mjs → chunk-OJW2KVY7.mjs} +2 -2
  31. package/dist/{chunk-F4XMHKOR.mjs → chunk-PWYWE7H7.mjs} +4 -4
  32. package/dist/{chunk-63OA3RR6.mjs → chunk-QKWQIRUO.mjs} +4 -4
  33. package/dist/{chunk-Q3TL43R2.mjs → chunk-R43LAFNS.mjs} +6 -2
  34. package/dist/{chunk-Q3TL43R2.mjs.map → chunk-R43LAFNS.mjs.map} +1 -1
  35. package/dist/{chunk-5M76X6J5.mjs → chunk-SJJ4E4HD.mjs} +8 -2
  36. package/dist/chunk-SJJ4E4HD.mjs.map +1 -0
  37. package/dist/{chunk-RSOPHC7S.mjs → chunk-STPFSN7K.mjs} +2 -2
  38. package/dist/{chunk-YK65IKP2.mjs → chunk-VVWELITO.mjs} +2 -2
  39. package/dist/{chunk-ZDBXA2D4.mjs → chunk-XQ4KXG5O.mjs} +2 -2
  40. package/dist/{chunk-QB3ZLR7S.mjs → chunk-Y4RD46AM.mjs} +5 -5
  41. package/dist/{chunk-IX2TMY6X.mjs → chunk-YNOOWA75.mjs} +2 -2
  42. package/dist/{chunk-GVJWRPOP.mjs → chunk-YUFKMTUP.mjs} +2 -2
  43. package/dist/{chunk-INO2742F.mjs → chunk-Z7CGMLOT.mjs} +4 -4
  44. package/dist/data/Condition.mjs +3 -3
  45. package/dist/data/Database.mjs +4 -4
  46. package/dist/data/Field.mjs +3 -3
  47. package/dist/data/InMemoryGateway.mjs +11 -11
  48. package/dist/domain/Audit.mjs +15 -14
  49. package/dist/domain/Child.mjs +12 -12
  50. package/dist/domain/DateTime.d.ts +1 -0
  51. package/dist/domain/DateTime.mjs +11 -10
  52. package/dist/domain/Entity.mjs +15 -14
  53. package/dist/domain/Entity.mjs.map +1 -1
  54. package/dist/domain/Repo.mjs +11 -11
  55. package/dist/domain/Struct.mjs +11 -11
  56. package/dist/domain/Typo.mjs +10 -10
  57. package/dist/http/CacheControl.mjs +11 -11
  58. package/dist/http/ContentType.mjs +4 -4
  59. package/dist/http/HttpStatus.mjs +4 -4
  60. package/dist/http/HttpVerb.mjs +4 -4
  61. package/dist/http/LocalRequestStore.mjs +3 -3
  62. package/dist/http/RequestOptions.mjs +7 -7
  63. package/dist/http/RestResult.mjs +11 -11
  64. package/dist/http/toResponse.mjs +12 -12
  65. package/dist/index.js +49 -26
  66. package/dist/index.js.map +1 -1
  67. package/dist/process/App.mjs +5 -5
  68. package/dist/process/Manage.mjs +11 -11
  69. package/dist/process/Scope.mjs +5 -5
  70. package/dist/process/Search.mjs +11 -11
  71. package/dist/process/UseCase.mjs +4 -4
  72. package/dist/resources/Req.mjs +10 -10
  73. package/dist/services/Api.mjs +19 -19
  74. package/dist/services/ApiGateway.mjs +22 -22
  75. package/dist/services/AxiosProvider.mjs +17 -17
  76. package/dist/services/MappedRouteGateway.mjs +25 -25
  77. package/dist/services/RouteGateway.mjs +23 -23
  78. package/dist/services/ViewRouteGateway.mjs +27 -27
  79. package/dist/sql/Column.mjs +10 -10
  80. package/dist/sql/Table.mjs +13 -13
  81. package/dist/sql/TableGateway.mjs +11 -11
  82. package/dist/types/Cache.mjs +2 -2
  83. package/dist/types/CacheAge.mjs +11 -11
  84. package/dist/types/Case.mjs +9 -9
  85. package/dist/types/Context.mjs +3 -3
  86. package/dist/types/Enum.mjs +3 -3
  87. package/dist/types/Environment.mjs +3 -3
  88. package/dist/types/Exception.mjs +5 -5
  89. package/dist/types/Gateway.mjs +6 -6
  90. package/dist/types/IsEqual.mjs +10 -10
  91. package/dist/types/Json.mjs +2 -2
  92. package/dist/types/Meta.mjs +2 -2
  93. package/dist/types/Number.mjs +10 -10
  94. package/dist/types/Object.d.ts +3 -0
  95. package/dist/types/Object.mjs +3 -1
  96. package/dist/types/PageList.mjs +10 -10
  97. package/dist/types/Parser.mjs +9 -9
  98. package/dist/types/Repository.mjs +6 -6
  99. package/dist/types/Result.mjs +4 -4
  100. package/dist/types/Results.mjs +5 -5
  101. package/dist/types/Tag.mjs +2 -2
  102. package/dist/types/Template.mjs +2 -2
  103. package/dist/types/Try.mjs +9 -9
  104. package/dist/types/Uri.mjs +9 -9
  105. package/dist/utils/Mapper.mjs +4 -4
  106. package/dist/utils/Seconds.mjs +4 -25
  107. package/dist/utils/Seconds.mjs.map +1 -1
  108. package/dist/utils/Sentence.mjs +2 -2
  109. package/dist/utils/Traverse.d.ts +3 -0
  110. package/dist/utils/Traverse.mjs +7 -3
  111. package/dist/utils/View.mjs +14 -14
  112. package/dist/validation/Contraints.mjs +10 -10
  113. package/dist/validation/Validate.mjs +9 -9
  114. package/dist/validation/When.mjs +9 -9
  115. package/package.json +2 -2
  116. package/src/domain/DateTime.ts +5 -0
  117. package/src/types/Object.ts +4 -0
  118. package/src/utils/Seconds.ts +2 -7
  119. package/src/utils/Traverse.ts +21 -0
  120. package/dist/chunk-5M76X6J5.mjs.map +0 -1
  121. package/dist/chunk-DICMUQFL.mjs +0 -11
  122. package/dist/chunk-DICMUQFL.mjs.map +0 -1
  123. /package/dist/{chunk-JV3PEYHS.mjs.map → chunk-24WJGYH4.mjs.map} +0 -0
  124. /package/dist/{chunk-3PPC4YMQ.mjs.map → chunk-2V3F4LJ5.mjs.map} +0 -0
  125. /package/dist/{chunk-OGMTD753.mjs.map → chunk-3BXPK7FX.mjs.map} +0 -0
  126. /package/dist/{chunk-QLM2AYD4.mjs.map → chunk-3DAZTFKD.mjs.map} +0 -0
  127. /package/dist/{chunk-2JX2SSPQ.mjs.map → chunk-3EYCIHXW.mjs.map} +0 -0
  128. /package/dist/{chunk-DS6NSJUW.mjs.map → chunk-4KB2NPKQ.mjs.map} +0 -0
  129. /package/dist/{chunk-KA3TZADE.mjs.map → chunk-55B7FIAE.mjs.map} +0 -0
  130. /package/dist/{chunk-WBEMXVO6.mjs.map → chunk-5GALY24M.mjs.map} +0 -0
  131. /package/dist/{chunk-V7EJJWVX.mjs.map → chunk-6DL5IBFE.mjs.map} +0 -0
  132. /package/dist/{chunk-L4T4Z7PG.mjs.map → chunk-6TJC3RI3.mjs.map} +0 -0
  133. /package/dist/{chunk-JCINHOMG.mjs.map → chunk-CHNRVP7J.mjs.map} +0 -0
  134. /package/dist/{chunk-KAYSE6PM.mjs.map → chunk-CLIM3GJ7.mjs.map} +0 -0
  135. /package/dist/{chunk-4KJZ4LNQ.mjs.map → chunk-DEESTSMV.mjs.map} +0 -0
  136. /package/dist/{chunk-VRLSZ2MW.mjs.map → chunk-FZBUEEQB.mjs.map} +0 -0
  137. /package/dist/{chunk-EG3KSNQZ.mjs.map → chunk-GKDMM6XO.mjs.map} +0 -0
  138. /package/dist/{chunk-2BTY2F3A.mjs.map → chunk-H6WLTQXF.mjs.map} +0 -0
  139. /package/dist/{chunk-SRFFQJLL.mjs.map → chunk-H7TRIY7A.mjs.map} +0 -0
  140. /package/dist/{chunk-3LASXEE5.mjs.map → chunk-HE6MAJDE.mjs.map} +0 -0
  141. /package/dist/{chunk-PJXWZFLD.mjs.map → chunk-ILJV7234.mjs.map} +0 -0
  142. /package/dist/{chunk-24OSK3DS.mjs.map → chunk-IXUCBTR3.mjs.map} +0 -0
  143. /package/dist/{chunk-WI2ICJHX.mjs.map → chunk-JEIESGLS.mjs.map} +0 -0
  144. /package/dist/{chunk-TNOOLHK7.mjs.map → chunk-KK66VUSS.mjs.map} +0 -0
  145. /package/dist/{chunk-IVX4I3NC.mjs.map → chunk-L5TIL3QC.mjs.map} +0 -0
  146. /package/dist/{chunk-X3C5CS4X.mjs.map → chunk-NE6FVUU7.mjs.map} +0 -0
  147. /package/dist/{chunk-PRN25GXK.mjs.map → chunk-NFZZGGEV.mjs.map} +0 -0
  148. /package/dist/{chunk-T5VZORPQ.mjs.map → chunk-OJW2KVY7.mjs.map} +0 -0
  149. /package/dist/{chunk-F4XMHKOR.mjs.map → chunk-PWYWE7H7.mjs.map} +0 -0
  150. /package/dist/{chunk-63OA3RR6.mjs.map → chunk-QKWQIRUO.mjs.map} +0 -0
  151. /package/dist/{chunk-RSOPHC7S.mjs.map → chunk-STPFSN7K.mjs.map} +0 -0
  152. /package/dist/{chunk-YK65IKP2.mjs.map → chunk-VVWELITO.mjs.map} +0 -0
  153. /package/dist/{chunk-ZDBXA2D4.mjs.map → chunk-XQ4KXG5O.mjs.map} +0 -0
  154. /package/dist/{chunk-QB3ZLR7S.mjs.map → chunk-Y4RD46AM.mjs.map} +0 -0
  155. /package/dist/{chunk-IX2TMY6X.mjs.map → chunk-YNOOWA75.mjs.map} +0 -0
  156. /package/dist/{chunk-GVJWRPOP.mjs.map → chunk-YUFKMTUP.mjs.map} +0 -0
  157. /package/dist/{chunk-INO2742F.mjs.map → chunk-Z7CGMLOT.mjs.map} +0 -0
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  ctx
3
- } from "../chunk-TNOOLHK7.mjs";
4
- import "../chunk-KA3TZADE.mjs";
5
- import "../chunk-Q3TL43R2.mjs";
3
+ } from "../chunk-KK66VUSS.mjs";
4
+ import "../chunk-55B7FIAE.mjs";
5
+ import "../chunk-R43LAFNS.mjs";
6
6
  import "../chunk-EX7OK25Y.mjs";
7
7
  import "../chunk-JSON7A4X.mjs";
8
8
  import "../chunk-X7FZPY3P.mjs";
@@ -2,15 +2,15 @@ import {
2
2
  RequestOptions,
3
3
  isRequestOptions,
4
4
  toPageOptions
5
- } from "../chunk-2BTY2F3A.mjs";
5
+ } from "../chunk-H6WLTQXF.mjs";
6
6
  import "../chunk-LXQQ5N6S.mjs";
7
- import "../chunk-GVJWRPOP.mjs";
7
+ import "../chunk-YUFKMTUP.mjs";
8
8
  import "../chunk-SW2OCUH3.mjs";
9
- import "../chunk-TNOOLHK7.mjs";
10
- import "../chunk-KA3TZADE.mjs";
11
- import "../chunk-SRFFQJLL.mjs";
12
- import "../chunk-IVX4I3NC.mjs";
13
- import "../chunk-Q3TL43R2.mjs";
9
+ import "../chunk-KK66VUSS.mjs";
10
+ import "../chunk-55B7FIAE.mjs";
11
+ import "../chunk-H7TRIY7A.mjs";
12
+ import "../chunk-L5TIL3QC.mjs";
13
+ import "../chunk-R43LAFNS.mjs";
14
14
  import "../chunk-EX7OK25Y.mjs";
15
15
  import "../chunk-JSON7A4X.mjs";
16
16
  import "../chunk-X7FZPY3P.mjs";
@@ -1,21 +1,21 @@
1
1
  import {
2
2
  isRestResult,
3
3
  rest
4
- } from "../chunk-QB3ZLR7S.mjs";
4
+ } from "../chunk-Y4RD46AM.mjs";
5
5
  import "../chunk-UYDZZAEK.mjs";
6
- import "../chunk-JV3PEYHS.mjs";
7
- import "../chunk-QLM2AYD4.mjs";
6
+ import "../chunk-24WJGYH4.mjs";
7
+ import "../chunk-3DAZTFKD.mjs";
8
8
  import "../chunk-OFGI5FLG.mjs";
9
- import "../chunk-YK65IKP2.mjs";
10
- import "../chunk-VRLSZ2MW.mjs";
9
+ import "../chunk-VVWELITO.mjs";
10
+ import "../chunk-FZBUEEQB.mjs";
11
11
  import "../chunk-ISLR7BKT.mjs";
12
- import "../chunk-KAYSE6PM.mjs";
12
+ import "../chunk-CLIM3GJ7.mjs";
13
13
  import "../chunk-CAHTK3AT.mjs";
14
- import "../chunk-TNOOLHK7.mjs";
15
- import "../chunk-KA3TZADE.mjs";
16
- import "../chunk-SRFFQJLL.mjs";
17
- import "../chunk-IVX4I3NC.mjs";
18
- import "../chunk-Q3TL43R2.mjs";
14
+ import "../chunk-KK66VUSS.mjs";
15
+ import "../chunk-55B7FIAE.mjs";
16
+ import "../chunk-H7TRIY7A.mjs";
17
+ import "../chunk-L5TIL3QC.mjs";
18
+ import "../chunk-R43LAFNS.mjs";
19
19
  import "../chunk-EX7OK25Y.mjs";
20
20
  import "../chunk-JSON7A4X.mjs";
21
21
  import "../chunk-X7FZPY3P.mjs";
@@ -1,21 +1,21 @@
1
1
  import {
2
2
  toResponse
3
- } from "../chunk-2JX2SSPQ.mjs";
4
- import "../chunk-QB3ZLR7S.mjs";
3
+ } from "../chunk-3EYCIHXW.mjs";
4
+ import "../chunk-Y4RD46AM.mjs";
5
5
  import "../chunk-UYDZZAEK.mjs";
6
- import "../chunk-JV3PEYHS.mjs";
7
- import "../chunk-QLM2AYD4.mjs";
6
+ import "../chunk-24WJGYH4.mjs";
7
+ import "../chunk-3DAZTFKD.mjs";
8
8
  import "../chunk-OFGI5FLG.mjs";
9
- import "../chunk-YK65IKP2.mjs";
10
- import "../chunk-VRLSZ2MW.mjs";
9
+ import "../chunk-VVWELITO.mjs";
10
+ import "../chunk-FZBUEEQB.mjs";
11
11
  import "../chunk-ISLR7BKT.mjs";
12
- import "../chunk-KAYSE6PM.mjs";
12
+ import "../chunk-CLIM3GJ7.mjs";
13
13
  import "../chunk-CAHTK3AT.mjs";
14
- import "../chunk-TNOOLHK7.mjs";
15
- import "../chunk-KA3TZADE.mjs";
16
- import "../chunk-SRFFQJLL.mjs";
17
- import "../chunk-IVX4I3NC.mjs";
18
- import "../chunk-Q3TL43R2.mjs";
14
+ import "../chunk-KK66VUSS.mjs";
15
+ import "../chunk-55B7FIAE.mjs";
16
+ import "../chunk-H7TRIY7A.mjs";
17
+ import "../chunk-L5TIL3QC.mjs";
18
+ import "../chunk-R43LAFNS.mjs";
19
19
  import "../chunk-EX7OK25Y.mjs";
20
20
  import "../chunk-JSON7A4X.mjs";
21
21
  import "../chunk-X7FZPY3P.mjs";
package/dist/index.js CHANGED
@@ -111,6 +111,7 @@ __export(src_exports, {
111
111
  ViewRouteGateway: () => ViewRouteGateway,
112
112
  Wait: () => Wait,
113
113
  When: () => When,
114
+ accumulate: () => accumulate,
114
115
  any: () => any,
115
116
  api: () => api,
116
117
  array: () => array,
@@ -207,6 +208,7 @@ __export(src_exports, {
207
208
  isValue: () => isValue,
208
209
  json: () => json,
209
210
  kebab: () => kebab,
211
+ keys: () => keys,
210
212
  log: () => log,
211
213
  lt: () => lt,
212
214
  lte: () => lte,
@@ -261,6 +263,7 @@ __export(src_exports, {
261
263
  toViewer: () => toViewer,
262
264
  toWords: () => toWords,
263
265
  traverse: () => traverse,
266
+ traverseSet: () => traverseSet,
264
267
  tryTo: () => tryTo,
265
268
  tuple: () => tuple,
266
269
  tuple2: () => tuple2,
@@ -447,9 +450,9 @@ var List = class extends Array {
447
450
  intersectByKey(others, key) {
448
451
  return this.filter((i) => others.some((o) => o[key] === i[key]));
449
452
  }
450
- accumulate(...keys) {
453
+ accumulate(...keys2) {
451
454
  return this.map((d, i, arr) => {
452
- const acc = keys.reduce((acc2, v) => {
455
+ const acc = keys2.reduce((acc2, v) => {
453
456
  acc2[v] = i === 0 ? d[v] : arr[i - 1][v] + d[v];
454
457
  return acc2;
455
458
  }, d);
@@ -593,6 +596,9 @@ function entries(subject) {
593
596
  function values(subject) {
594
597
  return toList([...Object.values(subject), ...Object.values(Object.getPrototypeOf(subject))]);
595
598
  }
599
+ function keys(subject) {
600
+ return toList([...Object.keys(subject), ...Object.keys(Object.getPrototypeOf(subject))]);
601
+ }
596
602
 
597
603
  // src/types/Json.ts
598
604
  var isJson = (subject) => isA(subject, "toJSON");
@@ -604,7 +610,7 @@ var json = {
604
610
  return subject;
605
611
  },
606
612
  set: (subject, key = "", value) => isEmpty(key) ? subject : value !== void 0 ? { ...subject, ...{ [key]: value } } : json.delete(subject, key),
607
- omit: (subject, ...keys) => keys.reduce((js, k) => json.delete(js, k), json.parse(subject)),
613
+ omit: (subject, ...keys2) => keys2.reduce((js, k) => json.delete(js, k), json.parse(subject)),
608
614
  defaults: (options = {}, defaults = {}) => json.merge(defaults, options),
609
615
  isSubset: (subject, subset) => !entries(subset).some(([k, v]) => subject[k] !== v)
610
616
  };
@@ -616,7 +622,7 @@ var Any = class {
616
622
  }
617
623
  merge = (...subjects) => any(json.merge(this.value, ...subjects));
618
624
  delete = (key) => any(json.delete(this.value, key));
619
- omit = (...keys) => any(json.omit(this.value, ...keys));
625
+ omit = (...keys2) => any(json.omit(this.value, ...keys2));
620
626
  set = (key, value) => any(json.set(this.value, key, value));
621
627
  toJSON() {
622
628
  return this.value;
@@ -1442,8 +1448,8 @@ var PageList = class extends List {
1442
1448
  filter(p, params) {
1443
1449
  return toPageList(super.filter(p, params), this);
1444
1450
  }
1445
- accumulate(...keys) {
1446
- return toPageList(super.accumulate(...keys), this);
1451
+ accumulate(...keys2) {
1452
+ return toPageList(super.accumulate(...keys2), this);
1447
1453
  }
1448
1454
  concat(...items) {
1449
1455
  return toPageList(super.concat(...items), this);
@@ -1601,6 +1607,21 @@ var days = {
1601
1607
  var inPast = (o) => isDate(o) && o <= days.today();
1602
1608
  var inFuture = (o) => isDate(o) && o > days.today();
1603
1609
 
1610
+ // src/utils/Seconds.ts
1611
+ var seconds = {
1612
+ toDuration: (s) => {
1613
+ const seconds2 = s % 60;
1614
+ const minutes = Math.floor(s / 60) % 60;
1615
+ const hours = Math.floor(s / 3600) % 24;
1616
+ const days2 = Math.floor(s / 86400);
1617
+ return { days: days2, hours, minutes, seconds: seconds2 };
1618
+ },
1619
+ toText: (s) => {
1620
+ const { days: days2, hours, minutes, seconds: secs } = seconds.toDuration(s);
1621
+ return toList(ifTrue(days2, `${days2}d`), ifTrue(hours, `${hours}h`), ifTrue(minutes, `${minutes}m`), ifTrue(days2 + hours + minutes === 0, `${secs}s`)).mapDefined((s2) => s2).join(" ");
1622
+ }
1623
+ };
1624
+
1604
1625
  // src/domain/DateTime.ts
1605
1626
  import_luxon.Settings.defaultZone = "utc";
1606
1627
  var DateTime = class _DateTime extends Value {
@@ -1684,6 +1705,9 @@ var DateTime = class _DateTime extends Value {
1684
1705
  toDate() {
1685
1706
  return this.isValid ? this.utc.toJSDate() : void 0;
1686
1707
  }
1708
+ ago(end = _DateTime.now) {
1709
+ return seconds.toText(end.diff(this, "second"));
1710
+ }
1687
1711
  };
1688
1712
  var isDateTime = (dt2) => isDefined(dt2) && dt2 instanceof DateTime;
1689
1713
  var dt = (dt2) => isString(dt2) || isNumber(dt2) || dt2 instanceof Date ? new DateTime(dt2) : new DateTime();
@@ -2668,6 +2692,22 @@ var traverse = (subject = {}, property = "") => {
2668
2692
  const p = props.shift();
2669
2693
  return props.length === 0 ? subject[p] : traverse(subject[p], props.join("."));
2670
2694
  };
2695
+ var traverseSet = (subject, property, value) => {
2696
+ const props = property.split(".");
2697
+ const p = props.shift();
2698
+ return {
2699
+ ...subject,
2700
+ [p]: props.length === 0 ? value : traverseSet(subject[p], props.join("."), value)
2701
+ };
2702
+ };
2703
+ var accumulate = (items, ...keys2) => items.map((t, i, arr) => {
2704
+ const acc = keys2.reduce(
2705
+ (acc2, v) => traverseSet(acc2, v, i === 0 ? traverse(t, v) : traverse(arr[i - 1], v) + traverse(t, v)),
2706
+ t
2707
+ );
2708
+ arr[i] = acc;
2709
+ return acc;
2710
+ });
2671
2711
 
2672
2712
  // src/types/IsEqual.ts
2673
2713
  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])));
@@ -3195,26 +3235,6 @@ function dir(t) {
3195
3235
  return t;
3196
3236
  }
3197
3237
 
3198
- // src/utils/Seconds.ts
3199
- var seconds = {
3200
- toDuration: (s) => {
3201
- const seconds2 = s % 60;
3202
- const minutes = Math.floor(s / 60) % 60;
3203
- const hours = Math.floor(s / 3600) % 24;
3204
- const days2 = Math.floor(s / 86400);
3205
- return { days: days2, hours, minutes, seconds: seconds2 };
3206
- },
3207
- toText: (s) => {
3208
- const { days: days2, hours, minutes, seconds: secs } = seconds.toDuration(s);
3209
- return toList(
3210
- ifTrue(days2, (d) => `${d}d`),
3211
- ifTrue(hours, (h) => `${h}h`),
3212
- ifTrue(minutes, (m) => `${m}m`),
3213
- ifTrue(days2 + hours + minutes === 0, `${secs}s`)
3214
- ).mapDefined((s2) => s2).join(" ");
3215
- }
3216
- };
3217
-
3218
3238
  // src/utils/Sentence.ts
3219
3239
  var Sentence = class {
3220
3240
  constructor(word, pre, sentence = (pre?.sentence ?? []).concat(word)) {
@@ -3350,6 +3370,7 @@ var wait = (millis) => Wait.wait(millis);
3350
3370
  ViewRouteGateway,
3351
3371
  Wait,
3352
3372
  When,
3373
+ accumulate,
3353
3374
  any,
3354
3375
  api,
3355
3376
  array,
@@ -3446,6 +3467,7 @@ var wait = (millis) => Wait.wait(millis);
3446
3467
  isValue,
3447
3468
  json,
3448
3469
  kebab,
3470
+ keys,
3449
3471
  log,
3450
3472
  lt,
3451
3473
  lte,
@@ -3500,6 +3522,7 @@ var wait = (millis) => Wait.wait(millis);
3500
3522
  toViewer,
3501
3523
  toWords,
3502
3524
  traverse,
3525
+ traverseSet,
3503
3526
  tryTo,
3504
3527
  tuple,
3505
3528
  tuple2,