@thisisagile/easy 17.12.0 → 17.12.2
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-F7AZRLIK.mjs → chunk-7Q6635HA.mjs} +2 -2
- package/dist/{chunk-45AKKIFU.mjs → chunk-MNTKAUHO.mjs} +17 -19
- package/dist/chunk-MNTKAUHO.mjs.map +1 -0
- package/dist/domain/Audit.mjs +2 -2
- package/dist/domain/DateTime.d.ts +5 -7
- package/dist/domain/DateTime.mjs +1 -1
- package/dist/domain/Entity.mjs +2 -2
- package/dist/index.js +16 -18
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/domain/DateTime.ts +30 -34
- package/dist/chunk-45AKKIFU.mjs.map +0 -1
- /package/dist/{chunk-F7AZRLIK.mjs.map → chunk-7Q6635HA.mjs.map} +0 -0
package/package.json
CHANGED
package/src/domain/DateTime.ts
CHANGED
|
@@ -22,20 +22,25 @@ export type DiffOptions = {
|
|
|
22
22
|
type DatetimeInput = string | number | Date | DateTime | null;
|
|
23
23
|
|
|
24
24
|
export class DateTime extends Value<Optional<string>> {
|
|
25
|
+
protected readonly luxon: LuxonDateTime;
|
|
26
|
+
|
|
27
|
+
constructor(value?: DatetimeInput);
|
|
28
|
+
constructor(value?: string, format?: string);
|
|
25
29
|
constructor(value?: DatetimeInput, format?: string) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
);
|
|
30
|
+
const luxon = choose(value)
|
|
31
|
+
.type(isString, v => (format ? LuxonDateTime.fromFormat(v, format, { setZone: true }) : LuxonDateTime.fromISO(v, { setZone: true })))
|
|
32
|
+
.type(isNumber, v => LuxonDateTime.fromMillis(v))
|
|
33
|
+
.type(isDate, v => LuxonDateTime.fromJSDate(v))
|
|
34
|
+
.type(isDateTime, v => v.luxon)
|
|
35
|
+
// Allow constructing with LuxonDateTime without exposing types
|
|
36
|
+
.else(value instanceof LuxonDateTime ? value : LuxonDateTime.fromISO(undefined as any));
|
|
37
|
+
|
|
38
|
+
super(luxon.toISO() ?? undefined);
|
|
39
|
+
this.luxon = luxon;
|
|
35
40
|
}
|
|
36
41
|
|
|
37
42
|
static get now(): DateTime {
|
|
38
|
-
return new DateTime(LuxonDateTime.utc()
|
|
43
|
+
return new DateTime(LuxonDateTime.utc() as any);
|
|
39
44
|
}
|
|
40
45
|
|
|
41
46
|
get isValid(): boolean {
|
|
@@ -53,24 +58,16 @@ export class DateTime extends Value<Optional<string>> {
|
|
|
53
58
|
return this.luxon.setZone('utc');
|
|
54
59
|
}
|
|
55
60
|
|
|
56
|
-
protected get luxon(): LuxonDateTime {
|
|
57
|
-
return LuxonDateTime.fromISO(this.value as string, { setZone: true });
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
from(date?: DateTime): string;
|
|
61
|
-
|
|
62
61
|
from(locale?: string): string;
|
|
63
|
-
|
|
64
62
|
from(date?: DateTime, locale?: string): string;
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
const
|
|
68
|
-
const locale: string = (isString(param) ? param : undefined) ?? other ?? 'en';
|
|
63
|
+
from(dateOrLocale?: string | DateTime, maybeLocale?: string): string {
|
|
64
|
+
const date: Optional<DateTime> = isA<DateTime>(dateOrLocale) ? dateOrLocale : undefined;
|
|
65
|
+
const locale: string = (isString(dateOrLocale) ? dateOrLocale : undefined) ?? maybeLocale ?? 'en';
|
|
69
66
|
return ifDefined(
|
|
70
67
|
date,
|
|
71
68
|
d => this.utc.setLocale(locale).toRelative({ base: d.utc }),
|
|
72
69
|
() => this.utc.setLocale(locale).toRelative()
|
|
73
|
-
)
|
|
70
|
+
) ?? "";
|
|
74
71
|
}
|
|
75
72
|
|
|
76
73
|
isAfter(dt: DateTime): boolean {
|
|
@@ -85,18 +82,16 @@ export class DateTime extends Value<Optional<string>> {
|
|
|
85
82
|
return this.utc.hasSame(dt.utc, 'millisecond');
|
|
86
83
|
}
|
|
87
84
|
|
|
88
|
-
add(n: number): DateTime;
|
|
89
|
-
add(n: number, unit: DurationUnit): DateTime;
|
|
85
|
+
add(n: number, unit?: DurationUnit): DateTime;
|
|
90
86
|
add(duration: Duration): DateTime;
|
|
91
|
-
add(n: number | Duration, unit
|
|
92
|
-
return new DateTime(this.luxon.plus(isNumber(n) ? { [unit
|
|
87
|
+
add(n: number | Duration, unit: DurationUnit = 'day'): DateTime {
|
|
88
|
+
return new DateTime(this.luxon.plus(isNumber(n) ? { [unit]: n } : n) as any);
|
|
93
89
|
}
|
|
94
90
|
|
|
95
|
-
subtract(n: number): DateTime;
|
|
96
|
-
subtract(n: number, unit: DurationUnit): DateTime;
|
|
91
|
+
subtract(n: number, unit?: DurationUnit): DateTime;
|
|
97
92
|
subtract(duration: Duration): DateTime;
|
|
98
|
-
subtract(n: number | Duration, unit
|
|
99
|
-
return new DateTime(this.luxon.minus(isNumber(n) ? { [unit
|
|
93
|
+
subtract(n: number | Duration, unit: DurationUnit = 'day'): DateTime {
|
|
94
|
+
return new DateTime(this.luxon.minus(isNumber(n) ? { [unit]: n } : n) as any);
|
|
100
95
|
}
|
|
101
96
|
|
|
102
97
|
diff(other: DateTime, unit: DateTimeUnit = 'day', opts?: DiffOptions): number {
|
|
@@ -104,11 +99,11 @@ export class DateTime extends Value<Optional<string>> {
|
|
|
104
99
|
}
|
|
105
100
|
|
|
106
101
|
startOf(unit: DateTimeUnit = 'day'): DateTime {
|
|
107
|
-
return new DateTime(this.luxon.startOf(unit)
|
|
102
|
+
return new DateTime(this.luxon.startOf(unit) as any);
|
|
108
103
|
}
|
|
109
104
|
|
|
110
105
|
endOf(unit: DateTimeUnit = 'day'): DateTime {
|
|
111
|
-
return new DateTime(this.luxon.endOf(unit)
|
|
106
|
+
return new DateTime(this.luxon.endOf(unit) as any);
|
|
112
107
|
}
|
|
113
108
|
|
|
114
109
|
isWeekend(): boolean {
|
|
@@ -116,7 +111,7 @@ export class DateTime extends Value<Optional<string>> {
|
|
|
116
111
|
}
|
|
117
112
|
|
|
118
113
|
withZone(zone: string): DateTime {
|
|
119
|
-
return new DateTime(this.
|
|
114
|
+
return new DateTime(this.luxon.setZone(zone) as any);
|
|
120
115
|
}
|
|
121
116
|
|
|
122
117
|
toString(): string {
|
|
@@ -124,7 +119,7 @@ export class DateTime extends Value<Optional<string>> {
|
|
|
124
119
|
}
|
|
125
120
|
|
|
126
121
|
toJSON(): JsonValue {
|
|
127
|
-
return this.utc.toISO()
|
|
122
|
+
return this.utc.toISO();
|
|
128
123
|
}
|
|
129
124
|
|
|
130
125
|
toFormat(format: string): string {
|
|
@@ -155,3 +150,4 @@ export class DateTime extends Value<Optional<string>> {
|
|
|
155
150
|
export const isDateTime = (dt?: unknown): dt is DateTime => isDefined(dt) && dt instanceof DateTime;
|
|
156
151
|
|
|
157
152
|
export const dt = (dt?: DatetimeInput): DateTime => new DateTime(dt);
|
|
153
|
+
|
|
@@ -1 +0,0 @@
|
|
|
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\ntype DatetimeInput = string | number | Date | DateTime | null;\n\nexport class DateTime extends Value<Optional<string>> {\n constructor(value?: DatetimeInput, 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 toEpoch(): number {\n return this.luxon.toMillis();\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?: DatetimeInput): DateTime => new DateTime(dt);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,YAAY,eAAqF,gBAAgB;AAW1H,SAAS,cAAc;AAYhB,IAAM,WAAN,MAAM,kBAAiB,MAAwB;AAAA,EACpD,YAAY,OAAuB,QAAiB;AAClD;AAAA,MACE,OAAO,KAAK,EACT,KAAK,UAAU,OAAM,SAAS,cAAc,WAAW,GAAG,QAAQ,EAAE,SAAS,KAAK,CAAC,IAAI,cAAc,QAAQ,GAAG,EAAE,SAAS,KAAK,CAAC,CAAE,EACnI,KAAK,UAAU,OAAK,cAAc,WAAW,CAAC,CAAC,EAC/C,KAAK,QAAQ,OAAK,cAAc,WAAW,CAAC,CAAC,EAC7C,KAAK,YAAY,OAAK,cAAc,QAAQ,EAAE,SAAS,CAAC,CAAC,EACzD,KAAK,MAAqC,GACzC,MAAM;AAAA,IACZ;AAAA,EACF;AAAA,EAEA,WAAW,MAAgB;AACzB,WAAO,IAAI,UAAS,cAAc,IAAI,EAAE,MAAM,CAAC;AAAA,EACjD;AAAA,EAEA,IAAI,UAAmB;AACrB,WAAO,UAAU,KAAK,KAAK,KAAK,KAAK,IAAI;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,UAAkB;AACpB,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,IAAc,MAAqB;AACjC,WAAO,KAAK,MAAM,QAAQ,KAAK;AAAA,EACjC;AAAA,EAEA,IAAc,QAAuB;AACnC,WAAO,cAAc,QAAQ,KAAK,OAAiB,EAAE,SAAS,KAAK,CAAC;AAAA,EACtE;AAAA,EAQA,KAAK,OAA2B,OAAwB;AACtD,UAAM,OAA2B,IAAc,KAAK,IAAI,QAAQ;AAChE,UAAM,UAAkB,SAAS,KAAK,IAAI,QAAQ,WAAc,SAAS;AACzE,WAAO;AAAA,MACL;AAAA,MACA,OAAK,KAAK,IAAI,UAAU,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC;AAAA,MAC1D,MAAM,KAAK,IAAI,UAAU,MAAM,EAAE,WAAW;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,QAAQA,KAAuB;AAC7B,WAAO,KAAK,MAAMA,IAAG;AAAA,EACvB;AAAA,EAEA,SAASA,KAAuB;AAC9B,WAAO,KAAK,MAAMA,IAAG;AAAA,EACvB;AAAA,EAEA,OAAOA,KAAuB;AAC5B,WAAO,KAAK,IAAI,QAAQA,IAAG,KAAK,aAAa;AAAA,EAC/C;AAAA,EAKA,IAAI,GAAsB,MAA+B;AACvD,WAAO,IAAI,UAAS,KAAK,MAAM,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC,QAAS,KAAgB,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC;AAAA,EACnG;AAAA,EAKA,SAAS,GAAsB,MAA+B;AAC5D,WAAO,IAAI,UAAS,KAAK,MAAM,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC,QAAS,KAAgB,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC;AAAA,EACpG;AAAA,EAEA,KAAK,OAAiB,OAAqB,OAAO,MAA4B;AAC5E,WAAO,KAAK,MAAM,YAAY,OAAO,EAAE,KAAK,IAAI,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC;AAAA,EAC1E;AAAA,EAEA,QAAQ,OAAqB,OAAiB;AAC5C,WAAO,IAAI,UAAS,KAAK,MAAM,QAAQ,IAAI,EAAE,MAAM,CAAC;AAAA,EACtD;AAAA,EAEA,MAAM,OAAqB,OAAiB;AAC1C,WAAO,IAAI,UAAS,KAAK,MAAM,MAAM,IAAI,EAAE,MAAM,CAAC;AAAA,EACpD;AAAA,EAEA,YAAqB;AACnB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,SAAS,MAAwB;AAC/B,WAAO,IAAI,UAAS,KAAK,IAAI,QAAQ,IAAI,EAAE,MAAM,CAAC;AAAA,EACpD;AAAA,EAEA,WAAmB;AACjB,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEA,SAAoB;AAClB,WAAO,KAAK,IAAI,MAAM;AAAA,EACxB;AAAA,EAEA,SAAS,QAAwB;AAC/B,WAAO,KAAK,MAAM,SAAS,MAAM;AAAA,EACnC;AAAA,EAEA,SAAS,SAAS,SAAS,SAAS,KAAa;AAC/C,WAAO,KAAK,MAAM,UAAU,MAAM,EAAE,SAAS,MAAM;AAAA,EACrD;AAAA,EAEA,OAAO,QAAyB;AAC9B,WAAO,KAAK,SAAS,QAAQ,KAAK;AAAA,EACpC;AAAA,EAEA,SAAyB;AACvB,WAAO,KAAK,UAAU,KAAK,IAAI,SAAS,IAAI;AAAA,EAC9C;AAAA,EAEA,UAAkB;AAChB,WAAO,KAAK,MAAM,SAAS;AAAA,EAC7B;AAAA,EAEA,IAAI,MAAgB,UAAS,KAAa;AACxC,WAAO,QAAQ,OAAO,IAAI,KAAK,MAAM,QAAQ,CAAC;AAAA,EAChD;AACF;AAEO,IAAM,aAAa,CAACA,QAAiC,UAAUA,GAAE,KAAKA,eAAc;AAEpF,IAAM,KAAK,CAACA,QAAiC,IAAI,SAASA,GAAE;","names":["dt"]}
|
|
File without changes
|