@thisisagile/easy 17.4.5 → 17.4.7
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-4NI3O7DE.mjs +26 -0
- package/dist/chunk-4NI3O7DE.mjs.map +1 -0
- package/dist/chunk-BKA7GVXL.mjs +29 -0
- package/dist/chunk-BKA7GVXL.mjs.map +1 -0
- package/dist/{chunk-24OSK3DS.mjs → chunk-O7SPVDR7.mjs} +2 -2
- package/dist/{chunk-WBEMXVO6.mjs → chunk-TJXM2374.mjs} +2 -2
- package/dist/{chunk-5M76X6J5.mjs → chunk-VZ4Q5DDN.mjs} +7 -1
- package/dist/chunk-VZ4Q5DDN.mjs.map +1 -0
- package/dist/domain/Audit.mjs +3 -2
- package/dist/domain/DateTime.d.ts +1 -0
- package/dist/domain/DateTime.mjs +2 -1
- package/dist/domain/Entity.mjs +3 -2
- package/dist/domain/Entity.mjs.map +1 -1
- package/dist/index.js +38 -20
- package/dist/index.js.map +1 -1
- package/dist/services/ViewRouteGateway.mjs +2 -2
- package/dist/utils/Seconds.mjs +4 -25
- package/dist/utils/Seconds.mjs.map +1 -1
- package/dist/utils/Traverse.d.ts +3 -0
- package/dist/utils/Traverse.mjs +7 -3
- package/dist/utils/View.mjs +2 -2
- package/package.json +2 -2
- package/src/domain/DateTime.ts +5 -0
- package/src/utils/Seconds.ts +2 -7
- package/src/utils/Traverse.ts +21 -0
- package/dist/chunk-5M76X6J5.mjs.map +0 -1
- package/dist/chunk-DICMUQFL.mjs +0 -11
- package/dist/chunk-DICMUQFL.mjs.map +0 -1
- /package/dist/{chunk-24OSK3DS.mjs.map → chunk-O7SPVDR7.mjs.map} +0 -0
- /package/dist/{chunk-WBEMXVO6.mjs.map → chunk-TJXM2374.mjs.map} +0 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import {
|
|
2
|
+
toList
|
|
3
|
+
} from "./chunk-EX7OK25Y.mjs";
|
|
4
|
+
import {
|
|
5
|
+
ifTrue
|
|
6
|
+
} from "./chunk-JSON7A4X.mjs";
|
|
7
|
+
|
|
8
|
+
// src/utils/Seconds.ts
|
|
9
|
+
var seconds = {
|
|
10
|
+
toDuration: (s) => {
|
|
11
|
+
const seconds2 = s % 60;
|
|
12
|
+
const minutes = Math.floor(s / 60) % 60;
|
|
13
|
+
const hours = Math.floor(s / 3600) % 24;
|
|
14
|
+
const days = Math.floor(s / 86400);
|
|
15
|
+
return { days, hours, minutes, seconds: seconds2 };
|
|
16
|
+
},
|
|
17
|
+
toText: (s) => {
|
|
18
|
+
const { days, hours, minutes, seconds: secs } = seconds.toDuration(s);
|
|
19
|
+
return toList(ifTrue(days, `${days}d`), ifTrue(hours, `${hours}h`), ifTrue(minutes, `${minutes}m`), ifTrue(days + hours + minutes === 0, `${secs}s`)).mapDefined((s2) => s2).join(" ");
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export {
|
|
24
|
+
seconds
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=chunk-4NI3O7DE.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/Seconds.ts"],"sourcesContent":["import { ifTrue } from './If';\nimport { toList } from '../types/List';\n\nexport const seconds = {\n toDuration: (s: number) => {\n const seconds = s % 60;\n const minutes = Math.floor(s / 60) % 60;\n const hours = Math.floor(s / 3600) % 24;\n const days = Math.floor(s / 86400);\n return { days, hours, minutes, seconds };\n },\n\n toText: (s: number): string => {\n const { days, hours, minutes, seconds: secs } = seconds.toDuration(s);\n return toList(ifTrue(days, `${days}d`), ifTrue(hours, `${hours}h`), ifTrue(minutes, `${minutes}m`), ifTrue(days + hours + minutes === 0, `${secs}s`))\n .mapDefined(s => s)\n .join(' ');\n },\n};\n"],"mappings":";;;;;;;;AAGO,IAAM,UAAU;AAAA,EACrB,YAAY,CAAC,MAAc;AACzB,UAAMA,WAAU,IAAI;AACpB,UAAM,UAAU,KAAK,MAAM,IAAI,EAAE,IAAI;AACrC,UAAM,QAAQ,KAAK,MAAM,IAAI,IAAI,IAAI;AACrC,UAAM,OAAO,KAAK,MAAM,IAAI,KAAK;AACjC,WAAO,EAAE,MAAM,OAAO,SAAS,SAAAA,SAAQ;AAAA,EACzC;AAAA,EAEA,QAAQ,CAAC,MAAsB;AAC7B,UAAM,EAAE,MAAM,OAAO,SAAS,SAAS,KAAK,IAAI,QAAQ,WAAW,CAAC;AACpE,WAAO,OAAO,OAAO,MAAM,GAAG,IAAI,GAAG,GAAG,OAAO,OAAO,GAAG,KAAK,GAAG,GAAG,OAAO,SAAS,GAAG,OAAO,GAAG,GAAG,OAAO,OAAO,QAAQ,YAAY,GAAG,GAAG,IAAI,GAAG,CAAC,EACjJ,WAAW,CAAAC,OAAKA,EAAC,EACjB,KAAK,GAAG;AAAA,EACb;AACF;","names":["seconds","s"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// src/utils/Traverse.ts
|
|
2
|
+
var traverse = (subject = {}, property = "") => {
|
|
3
|
+
const props = property.split(".");
|
|
4
|
+
const p = props.shift();
|
|
5
|
+
return props.length === 0 ? subject[p] : traverse(subject[p], props.join("."));
|
|
6
|
+
};
|
|
7
|
+
var traverseSet = (subject, property, value) => {
|
|
8
|
+
const props = property.split(".");
|
|
9
|
+
const p = props.shift();
|
|
10
|
+
return {
|
|
11
|
+
...subject,
|
|
12
|
+
[p]: props.length === 0 ? value : traverseSet(subject[p], props.join("."), value)
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
var accumulate = (items, ...keys) => items.map((t, i, arr) => {
|
|
16
|
+
const acc = keys.reduce(
|
|
17
|
+
(acc2, v) => traverseSet(acc2, v, i === 0 ? traverse(t, v) : traverse(arr[i - 1], v) + traverse(t, v)),
|
|
18
|
+
t
|
|
19
|
+
);
|
|
20
|
+
arr[i] = acc;
|
|
21
|
+
return acc;
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
export {
|
|
25
|
+
traverse,
|
|
26
|
+
traverseSet,
|
|
27
|
+
accumulate
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=chunk-BKA7GVXL.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/Traverse.ts"],"sourcesContent":["import { AnyKey } from '../types/AnyKey';\n\nexport const traverse = (subject: unknown = {}, property = ''): unknown => {\n const props = property.split('.');\n const p = props.shift() as string;\n return props.length === 0 ? (subject as any)[p] : traverse((subject as any)[p], props.join('.'));\n};\n\nexport const traverseSet = <T>(subject: T, property: AnyKey<T>, value: unknown): unknown => {\n const props = property.split('.');\n const p = props.shift() as string;\n return {\n ...(subject as any),\n [p]: props.length === 0 ? value : traverseSet((subject as any)[p], props.join('.'), value),\n } as T;\n};\n\nexport const accumulate = <T>(items: T[], ...keys: AnyKey<T>[]): T[] =>\n items.map((t, i, arr) => {\n const acc = keys.reduce(\n (acc, v) => traverseSet(acc, v, i === 0 ? traverse(t, v) : (traverse(arr[i - 1], v) as number) + (traverse(t, v) as number)) as T,\n t\n );\n arr[i] = acc;\n return acc;\n });\n"],"mappings":";AAEO,IAAM,WAAW,CAAC,UAAmB,CAAC,GAAG,WAAW,OAAgB;AACzE,QAAM,QAAQ,SAAS,MAAM,GAAG;AAChC,QAAM,IAAI,MAAM,MAAM;AACtB,SAAO,MAAM,WAAW,IAAK,QAAgB,CAAC,IAAI,SAAU,QAAgB,CAAC,GAAG,MAAM,KAAK,GAAG,CAAC;AACjG;AAEO,IAAM,cAAc,CAAI,SAAY,UAAqB,UAA4B;AAC1F,QAAM,QAAQ,SAAS,MAAM,GAAG;AAChC,QAAM,IAAI,MAAM,MAAM;AACtB,SAAO;AAAA,IACL,GAAI;AAAA,IACJ,CAAC,CAAC,GAAG,MAAM,WAAW,IAAI,QAAQ,YAAa,QAAgB,CAAC,GAAG,MAAM,KAAK,GAAG,GAAG,KAAK;AAAA,EAC3F;AACF;AAEO,IAAM,aAAa,CAAI,UAAe,SAC3C,MAAM,IAAI,CAAC,GAAG,GAAG,QAAQ;AACvB,QAAM,MAAM,KAAK;AAAA,IACf,CAACA,MAAK,MAAM,YAAYA,MAAK,GAAG,MAAM,IAAI,SAAS,GAAG,CAAC,IAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,IAAgB,SAAS,GAAG,CAAC,CAAY;AAAA,IAC3H;AAAA,EACF;AACA,MAAI,CAAC,IAAI;AACT,SAAO;AACT,CAAC;","names":["acc"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
traverse
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-BKA7GVXL.mjs";
|
|
4
4
|
import {
|
|
5
5
|
isEqual
|
|
6
6
|
} from "./chunk-T5VZORPQ.mjs";
|
|
@@ -88,4 +88,4 @@ export {
|
|
|
88
88
|
view,
|
|
89
89
|
views
|
|
90
90
|
};
|
|
91
|
-
//# sourceMappingURL=chunk-
|
|
91
|
+
//# sourceMappingURL=chunk-O7SPVDR7.mjs.map
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
} from "./chunk-WI2ICJHX.mjs";
|
|
8
8
|
import {
|
|
9
9
|
DateTime
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-VZ4Q5DDN.mjs";
|
|
11
11
|
import {
|
|
12
12
|
choose
|
|
13
13
|
} from "./chunk-QLM2AYD4.mjs";
|
|
@@ -47,4 +47,4 @@ __decorateClass([
|
|
|
47
47
|
export {
|
|
48
48
|
Audit
|
|
49
49
|
};
|
|
50
|
-
//# sourceMappingURL=chunk-
|
|
50
|
+
//# sourceMappingURL=chunk-TJXM2374.mjs.map
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import {
|
|
2
|
+
seconds
|
|
3
|
+
} from "./chunk-4NI3O7DE.mjs";
|
|
1
4
|
import {
|
|
2
5
|
isDate
|
|
3
6
|
} from "./chunk-ADJAEGCT.mjs";
|
|
@@ -103,6 +106,9 @@ var DateTime = class _DateTime extends Value {
|
|
|
103
106
|
toDate() {
|
|
104
107
|
return this.isValid ? this.utc.toJSDate() : void 0;
|
|
105
108
|
}
|
|
109
|
+
ago(end = _DateTime.now) {
|
|
110
|
+
return seconds.toText(end.diff(this, "second"));
|
|
111
|
+
}
|
|
106
112
|
};
|
|
107
113
|
var isDateTime = (dt2) => isDefined(dt2) && dt2 instanceof DateTime;
|
|
108
114
|
var dt = (dt2) => isString(dt2) || isNumber(dt2) || dt2 instanceof Date ? new DateTime(dt2) : new DateTime();
|
|
@@ -112,4 +118,4 @@ export {
|
|
|
112
118
|
isDateTime,
|
|
113
119
|
dt
|
|
114
120
|
};
|
|
115
|
-
//# sourceMappingURL=chunk-
|
|
121
|
+
//# sourceMappingURL=chunk-VZ4Q5DDN.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/domain/DateTime.ts"],"sourcesContent":["import { DateTime as LuxonDateTime, DateTimeUnit as LuxonDateTimeUnit, DurationUnit as LuxonDurationUnit, Settings } from 'luxon';\nimport { Value } from '../types/Value';\nimport { Optional } from '../types/Types';\nimport { choose } from '../types/Case';\nimport { isDefined, isNumber, isString } from '../types/Is';\nimport { isDate } from '../types/IsDate';\nimport { isA } from '../types/IsA';\nimport { ifDefined } from '../utils/If';\nimport { JsonValue } from '../types/Json';\nimport { seconds } from '../utils/Seconds';\n\nSettings.defaultZone = 'utc';\n\nexport type DateTimeUnit = LuxonDateTimeUnit;\nexport type DurationUnit = LuxonDurationUnit;\nexport type Duration = Partial<Record<DurationUnit, number>>;\n\nexport type DiffOptions = {\n rounding: 'floor' | 'ceil' | 'round';\n};\n\nexport class DateTime extends Value<Optional<string>> {\n constructor(value?: string | number | Date | DateTime | null, format?: string) {\n super(\n choose(value)\n .type(isString, v => (format ? LuxonDateTime.fromFormat(v, format, { setZone: true }) : LuxonDateTime.fromISO(v, { setZone: true })))\n .type(isNumber, v => LuxonDateTime.fromMillis(v))\n .type(isDate, v => LuxonDateTime.fromJSDate(v))\n .type(isDateTime, v => LuxonDateTime.fromISO(v.toString()))\n .else(undefined as unknown as LuxonDateTime)\n ?.toISO() as unknown as string\n );\n }\n\n static get now(): DateTime {\n return new DateTime(LuxonDateTime.utc().toISO());\n }\n\n get isValid(): boolean {\n return isDefined(this.value) && this.utc.isValid;\n }\n\n /**\n * @deprecated Deprecated in favor for DateTime.from as that also accepts locales and another DateTime\n */\n get fromNow(): string {\n return this.from();\n }\n\n protected get utc(): LuxonDateTime {\n return this.luxon.setZone('utc');\n }\n\n protected get luxon(): LuxonDateTime {\n return LuxonDateTime.fromISO(this.value as string, { setZone: true });\n }\n\n from(date?: DateTime): string;\n\n from(locale?: string): string;\n\n from(date?: DateTime, locale?: string): string;\n\n from(param?: string | DateTime, other?: string): string {\n const date: Optional<DateTime> = isA<DateTime>(param) ? param : undefined;\n const locale: string = (isString(param) ? param : undefined) ?? other ?? 'en';\n return ifDefined(\n date,\n d => this.utc.setLocale(locale).toRelative({ base: d.utc }),\n () => this.utc.setLocale(locale).toRelative()\n ) as string;\n }\n\n isAfter(dt: DateTime): boolean {\n return this.utc > dt.utc;\n }\n\n isBefore(dt: DateTime): boolean {\n return this.utc < dt.utc;\n }\n\n equals(dt: DateTime): boolean {\n return this.utc.hasSame(dt.utc, 'millisecond');\n }\n\n add(n: number): DateTime;\n add(n: number, unit: DurationUnit): DateTime;\n add(duration: Duration): DateTime;\n add(n: number | Duration, unit?: DurationUnit): DateTime {\n return new DateTime(this.luxon.plus(isNumber(n) ? { [unit ?? ('day' as string)]: n } : n).toISO());\n }\n\n subtract(n: number): DateTime;\n subtract(n: number, unit: DurationUnit): DateTime;\n subtract(duration: Duration): DateTime;\n subtract(n: number | Duration, unit?: DurationUnit): DateTime {\n return new DateTime(this.luxon.minus(isNumber(n) ? { [unit ?? ('day' as string)]: n } : n).toISO());\n }\n\n diff(other: DateTime, unit: DateTimeUnit = 'day', opts?: DiffOptions): number {\n return Math[opts?.rounding ?? 'floor'](this.utc.diff(other.utc).as(unit));\n }\n\n startOf(unit: DateTimeUnit = 'day'): DateTime {\n return new DateTime(this.luxon.startOf(unit).toISO());\n }\n\n endOf(unit: DateTimeUnit = 'day'): DateTime {\n return new DateTime(this.luxon.endOf(unit).toISO());\n }\n\n isWeekend(): boolean {\n return this.luxon.isWeekend;\n }\n\n withZone(zone: string): DateTime {\n return new DateTime(this.utc.setZone(zone).toISO());\n }\n\n toString(): string {\n return this.value ?? '';\n }\n\n toJSON(): JsonValue {\n return this.utc.toISO() as unknown as JsonValue;\n }\n\n toFormat(format: string): string {\n return this.luxon.toFormat(format);\n }\n\n toLocale(locale = 'nl-NL', format = 'D'): string {\n return this.luxon.setLocale(locale).toFormat(format);\n }\n\n toFull(locale?: string): string {\n return this.toLocale(locale, 'DDD');\n }\n\n toDate(): Optional<Date> {\n return this.isValid ? this.utc.toJSDate() : undefined;\n }\n\n ago(end: DateTime = DateTime.now): string {\n return seconds.toText(end.diff(this, 'second'));\n }\n}\n\nexport const isDateTime = (dt?: unknown): dt is DateTime => isDefined(dt) && dt instanceof DateTime;\n\nexport const dt = (dt?: unknown): DateTime => (isString(dt) || isNumber(dt) || dt instanceof Date ? new DateTime(dt) : new DateTime());\n"],"mappings":"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","names":["dt"]}
|
package/dist/domain/Audit.mjs
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Audit
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-TJXM2374.mjs";
|
|
4
4
|
import "../chunk-INO2742F.mjs";
|
|
5
5
|
import "../chunk-WI2ICJHX.mjs";
|
|
6
|
-
import "../chunk-
|
|
6
|
+
import "../chunk-VZ4Q5DDN.mjs";
|
|
7
|
+
import "../chunk-4NI3O7DE.mjs";
|
|
7
8
|
import "../chunk-ADJAEGCT.mjs";
|
|
8
9
|
import "../chunk-JCINHOMG.mjs";
|
|
9
10
|
import "../chunk-QLM2AYD4.mjs";
|
|
@@ -38,6 +38,7 @@ export declare class DateTime extends Value<Optional<string>> {
|
|
|
38
38
|
toLocale(locale?: string, format?: string): string;
|
|
39
39
|
toFull(locale?: string): string;
|
|
40
40
|
toDate(): Optional<Date>;
|
|
41
|
+
ago(end?: DateTime): string;
|
|
41
42
|
}
|
|
42
43
|
export declare const isDateTime: (dt?: unknown) => dt is DateTime;
|
|
43
44
|
export declare const dt: (dt?: unknown) => DateTime;
|
package/dist/domain/DateTime.mjs
CHANGED
package/dist/domain/Entity.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Audit
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-TJXM2374.mjs";
|
|
4
4
|
import {
|
|
5
5
|
toId
|
|
6
6
|
} from "../chunk-5YM5CLOG.mjs";
|
|
@@ -10,7 +10,8 @@ import {
|
|
|
10
10
|
import {
|
|
11
11
|
Struct
|
|
12
12
|
} from "../chunk-WI2ICJHX.mjs";
|
|
13
|
-
import "../chunk-
|
|
13
|
+
import "../chunk-VZ4Q5DDN.mjs";
|
|
14
|
+
import "../chunk-4NI3O7DE.mjs";
|
|
14
15
|
import "../chunk-ADJAEGCT.mjs";
|
|
15
16
|
import "../chunk-LXQQ5N6S.mjs";
|
|
16
17
|
import {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/domain/Entity.ts"],"sourcesContent":["import { Struct } from './Struct';\nimport { Audit } from './Audit';\nimport { required } from '../validation/Contraints';\nimport { Id, toId } from '../types/Id';\nimport { json, Json } from '../types/Json';\n\nexport abstract class Entity extends Struct {\n @required() readonly id: Id = this.state.id ?? toId();\n @required() readonly created: Audit = new Audit(this.state.created);\n @required() readonly lastModified: Audit = new Audit(this.state.lastModified);\n\n protected merge(a: unknown): Json {\n return json.merge(this, a, {\n id: this.id,\n created: this.created,\n lastModified: new Audit(),\n });\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/domain/Entity.ts"],"sourcesContent":["import { Struct } from './Struct';\nimport { Audit } from './Audit';\nimport { required } from '../validation/Contraints';\nimport { Id, toId } from '../types/Id';\nimport { json, Json } from '../types/Json';\n\nexport abstract class Entity extends Struct {\n @required() readonly id: Id = this.state.id ?? toId();\n @required() readonly created: Audit = new Audit(this.state.created);\n @required() readonly lastModified: Audit = new Audit(this.state.lastModified);\n\n protected merge(a: unknown): Json {\n return json.merge(this, a, {\n id: this.id,\n created: this.created,\n lastModified: new Audit(),\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMO,IAAe,SAAf,cAA8B,OAAO;AAAA,EACrB,KAAS,KAAK,MAAM,MAAM,KAAK;AAAA,EAC/B,UAAiB,IAAI,MAAM,KAAK,MAAM,OAAO;AAAA,EAC7C,eAAsB,IAAI,MAAM,KAAK,MAAM,YAAY;AAAA,EAElE,MAAM,GAAkB;AAChC,WAAO,KAAK,MAAM,MAAM,GAAG;AAAA,MACzB,IAAI,KAAK;AAAA,MACT,SAAS,KAAK;AAAA,MACd,cAAc,IAAI,MAAM;AAAA,IAC1B,CAAC;AAAA,EACH;AACF;AAXuB;AAAA,EAApB,SAAS;AAAA,GADU,OACC;AACA;AAAA,EAApB,SAAS;AAAA,GAFU,OAEC;AACA;AAAA,EAApB,SAAS;AAAA,GAHU,OAGC;","names":[]}
|
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,
|
|
@@ -261,6 +262,7 @@ __export(src_exports, {
|
|
|
261
262
|
toViewer: () => toViewer,
|
|
262
263
|
toWords: () => toWords,
|
|
263
264
|
traverse: () => traverse,
|
|
265
|
+
traverseSet: () => traverseSet,
|
|
264
266
|
tryTo: () => tryTo,
|
|
265
267
|
tuple: () => tuple,
|
|
266
268
|
tuple2: () => tuple2,
|
|
@@ -1601,6 +1603,21 @@ var days = {
|
|
|
1601
1603
|
var inPast = (o) => isDate(o) && o <= days.today();
|
|
1602
1604
|
var inFuture = (o) => isDate(o) && o > days.today();
|
|
1603
1605
|
|
|
1606
|
+
// src/utils/Seconds.ts
|
|
1607
|
+
var seconds = {
|
|
1608
|
+
toDuration: (s) => {
|
|
1609
|
+
const seconds2 = s % 60;
|
|
1610
|
+
const minutes = Math.floor(s / 60) % 60;
|
|
1611
|
+
const hours = Math.floor(s / 3600) % 24;
|
|
1612
|
+
const days2 = Math.floor(s / 86400);
|
|
1613
|
+
return { days: days2, hours, minutes, seconds: seconds2 };
|
|
1614
|
+
},
|
|
1615
|
+
toText: (s) => {
|
|
1616
|
+
const { days: days2, hours, minutes, seconds: secs } = seconds.toDuration(s);
|
|
1617
|
+
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(" ");
|
|
1618
|
+
}
|
|
1619
|
+
};
|
|
1620
|
+
|
|
1604
1621
|
// src/domain/DateTime.ts
|
|
1605
1622
|
import_luxon.Settings.defaultZone = "utc";
|
|
1606
1623
|
var DateTime = class _DateTime extends Value {
|
|
@@ -1684,6 +1701,9 @@ var DateTime = class _DateTime extends Value {
|
|
|
1684
1701
|
toDate() {
|
|
1685
1702
|
return this.isValid ? this.utc.toJSDate() : void 0;
|
|
1686
1703
|
}
|
|
1704
|
+
ago(end = _DateTime.now) {
|
|
1705
|
+
return seconds.toText(end.diff(this, "second"));
|
|
1706
|
+
}
|
|
1687
1707
|
};
|
|
1688
1708
|
var isDateTime = (dt2) => isDefined(dt2) && dt2 instanceof DateTime;
|
|
1689
1709
|
var dt = (dt2) => isString(dt2) || isNumber(dt2) || dt2 instanceof Date ? new DateTime(dt2) : new DateTime();
|
|
@@ -2668,6 +2688,22 @@ var traverse = (subject = {}, property = "") => {
|
|
|
2668
2688
|
const p = props.shift();
|
|
2669
2689
|
return props.length === 0 ? subject[p] : traverse(subject[p], props.join("."));
|
|
2670
2690
|
};
|
|
2691
|
+
var traverseSet = (subject, property, value) => {
|
|
2692
|
+
const props = property.split(".");
|
|
2693
|
+
const p = props.shift();
|
|
2694
|
+
return {
|
|
2695
|
+
...subject,
|
|
2696
|
+
[p]: props.length === 0 ? value : traverseSet(subject[p], props.join("."), value)
|
|
2697
|
+
};
|
|
2698
|
+
};
|
|
2699
|
+
var accumulate = (items, ...keys) => items.map((t, i, arr) => {
|
|
2700
|
+
const acc = keys.reduce(
|
|
2701
|
+
(acc2, v) => traverseSet(acc2, v, i === 0 ? traverse(t, v) : traverse(arr[i - 1], v) + traverse(t, v)),
|
|
2702
|
+
t
|
|
2703
|
+
);
|
|
2704
|
+
arr[i] = acc;
|
|
2705
|
+
return acc;
|
|
2706
|
+
});
|
|
2671
2707
|
|
|
2672
2708
|
// src/types/IsEqual.ts
|
|
2673
2709
|
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 +3231,6 @@ function dir(t) {
|
|
|
3195
3231
|
return t;
|
|
3196
3232
|
}
|
|
3197
3233
|
|
|
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
3234
|
// src/utils/Sentence.ts
|
|
3219
3235
|
var Sentence = class {
|
|
3220
3236
|
constructor(word, pre, sentence = (pre?.sentence ?? []).concat(word)) {
|
|
@@ -3350,6 +3366,7 @@ var wait = (millis) => Wait.wait(millis);
|
|
|
3350
3366
|
ViewRouteGateway,
|
|
3351
3367
|
Wait,
|
|
3352
3368
|
When,
|
|
3369
|
+
accumulate,
|
|
3353
3370
|
any,
|
|
3354
3371
|
api,
|
|
3355
3372
|
array,
|
|
@@ -3500,6 +3517,7 @@ var wait = (millis) => Wait.wait(millis);
|
|
|
3500
3517
|
toViewer,
|
|
3501
3518
|
toWords,
|
|
3502
3519
|
traverse,
|
|
3520
|
+
traverseSet,
|
|
3503
3521
|
tryTo,
|
|
3504
3522
|
tuple,
|
|
3505
3523
|
tuple2,
|