@thisisagile/easy 15.10.2 → 15.10.3
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/domain/values/DateTime.d.ts +11 -5
- package/dist/domain/values/DateTime.js +4 -4
- package/dist/domain/values/DateTime.js.map +1 -1
- package/dist/domain/values/DateTime.mjs +8 -5
- package/dist/domain/values/DateTime.mjs.map +1 -1
- package/package.json +2 -2
- package/src/domain/values/DateTime.ts +33 -19
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { JsonValue, Optional, Value } from
|
|
2
|
-
import { DateTime as LuxonDateTime, DateTimeUnit as LuxonDateTimeUnit } from
|
|
1
|
+
import { JsonValue, Optional, Value } from "../../types";
|
|
2
|
+
import { DateTime as LuxonDateTime, DateTimeUnit as LuxonDateTimeUnit, DurationUnit as LuxonDurationUnit } from "luxon";
|
|
3
3
|
export type DateTimeUnit = LuxonDateTimeUnit;
|
|
4
|
+
export type DurationUnit = LuxonDurationUnit;
|
|
5
|
+
export type Duration = Partial<Record<DurationUnit, number>>;
|
|
4
6
|
export type DiffOptions = {
|
|
5
|
-
rounding:
|
|
7
|
+
rounding: "floor" | "ceil" | "round";
|
|
6
8
|
};
|
|
7
9
|
export declare class DateTime extends Value<Optional<string>> {
|
|
8
10
|
constructor(value?: string | number | Date, format?: string);
|
|
@@ -17,8 +19,12 @@ export declare class DateTime extends Value<Optional<string>> {
|
|
|
17
19
|
isAfter(dt: DateTime): boolean;
|
|
18
20
|
isBefore(dt: DateTime): boolean;
|
|
19
21
|
equals(dt: DateTime): boolean;
|
|
20
|
-
add(n: number
|
|
21
|
-
|
|
22
|
+
add(n: number): DateTime;
|
|
23
|
+
add(n: number, unit: DurationUnit): DateTime;
|
|
24
|
+
add(duration: Duration): DateTime;
|
|
25
|
+
subtract(n: number): DateTime;
|
|
26
|
+
subtract(n: number, unit: DurationUnit): DateTime;
|
|
27
|
+
subtract(duration: Duration): DateTime;
|
|
22
28
|
diff(other: DateTime, unit?: DateTimeUnit, opts?: DiffOptions): number;
|
|
23
29
|
startOf(unit?: DateTimeUnit): DateTime;
|
|
24
30
|
endOf(unit?: DateTimeUnit): DateTime;
|
|
@@ -69,11 +69,11 @@ class DateTime extends import_types.Value {
|
|
|
69
69
|
equals(dt2) {
|
|
70
70
|
return this.utc.hasSame(dt2.utc, "millisecond");
|
|
71
71
|
}
|
|
72
|
-
add(n, unit
|
|
73
|
-
return new DateTime(this.luxon.plus({ [unit]: n }).toISO());
|
|
72
|
+
add(n, unit) {
|
|
73
|
+
return new DateTime(this.luxon.plus((0, import_types.isNumber)(n) ? { [unit ?? "day"]: n } : n).toISO());
|
|
74
74
|
}
|
|
75
|
-
subtract(n, unit
|
|
76
|
-
return new DateTime(this.luxon.minus({ [unit]: n }).toISO());
|
|
75
|
+
subtract(n, unit) {
|
|
76
|
+
return new DateTime(this.luxon.minus((0, import_types.isNumber)(n) ? { [unit ?? "day"]: n } : n).toISO());
|
|
77
77
|
}
|
|
78
78
|
diff(other, unit = "day", opts) {
|
|
79
79
|
return Math[opts?.rounding ?? "floor"](this.utc.diff(other.utc).as(unit));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/domain/values/DateTime.ts"],"sourcesContent":["import { choose, isA, isDate, isDefined, isNumber, isString, JsonValue, Optional, Value } from
|
|
1
|
+
{"version":3,"sources":["../../../src/domain/values/DateTime.ts"],"sourcesContent":["import { choose, isA, isDate, isDefined, isNumber, isString, JsonValue, Optional, Value } from \"../../types\";\nimport {\n DateTime as LuxonDateTime,\n DateTimeUnit as LuxonDateTimeUnit,\n DurationUnit as LuxonDurationUnit,\n Settings\n} from \"luxon\";\nimport { ifDefined } from \"../../utils\";\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, format?: string) {\n super(\n choose(value)\n .type(isString, v => (format ? LuxonDateTime.fromFormat(v, format, { setZone: true }) : LuxonDateTime.fromISO(v, { setZone: true })).toISO())\n .type(isNumber, v => LuxonDateTime.fromMillis(v).toISO())\n .type(isDate, v => LuxonDateTime.fromJSDate(v).toISO())\n .else(undefined 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 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\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":["LuxonDateTime","dt"]}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import "../../chunk-4N72FQFX.mjs";
|
|
2
2
|
import { choose, isA, isDate, isDefined, isNumber, isString, Value } from "../../types";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
DateTime as LuxonDateTime,
|
|
5
|
+
Settings
|
|
6
|
+
} from "luxon";
|
|
4
7
|
import { ifDefined } from "../../utils";
|
|
5
8
|
Settings.defaultZone = "utc";
|
|
6
9
|
class DateTime extends Value {
|
|
@@ -45,11 +48,11 @@ class DateTime extends Value {
|
|
|
45
48
|
equals(dt2) {
|
|
46
49
|
return this.utc.hasSame(dt2.utc, "millisecond");
|
|
47
50
|
}
|
|
48
|
-
add(n, unit
|
|
49
|
-
return new DateTime(this.luxon.plus({ [unit]: n }).toISO());
|
|
51
|
+
add(n, unit) {
|
|
52
|
+
return new DateTime(this.luxon.plus(isNumber(n) ? { [unit ?? "day"]: n } : n).toISO());
|
|
50
53
|
}
|
|
51
|
-
subtract(n, unit
|
|
52
|
-
return new DateTime(this.luxon.minus({ [unit]: n }).toISO());
|
|
54
|
+
subtract(n, unit) {
|
|
55
|
+
return new DateTime(this.luxon.minus(isNumber(n) ? { [unit ?? "day"]: n } : n).toISO());
|
|
53
56
|
}
|
|
54
57
|
diff(other, unit = "day", opts) {
|
|
55
58
|
return Math[opts?.rounding ?? "floor"](this.utc.diff(other.utc).as(unit));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/domain/values/DateTime.ts"],"sourcesContent":["import { choose, isA, isDate, isDefined, isNumber, isString, JsonValue, Optional, Value } from
|
|
1
|
+
{"version":3,"sources":["../../../src/domain/values/DateTime.ts"],"sourcesContent":["import { choose, isA, isDate, isDefined, isNumber, isString, JsonValue, Optional, Value } from \"../../types\";\nimport {\n DateTime as LuxonDateTime,\n DateTimeUnit as LuxonDateTimeUnit,\n DurationUnit as LuxonDurationUnit,\n Settings\n} from \"luxon\";\nimport { ifDefined } from \"../../utils\";\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, format?: string) {\n super(\n choose(value)\n .type(isString, v => (format ? LuxonDateTime.fromFormat(v, format, { setZone: true }) : LuxonDateTime.fromISO(v, { setZone: true })).toISO())\n .type(isNumber, v => LuxonDateTime.fromMillis(v).toISO())\n .type(isDate, v => LuxonDateTime.fromJSDate(v).toISO())\n .else(undefined 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 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\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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thisisagile/easy",
|
|
3
|
-
"version": "15.10.
|
|
3
|
+
"version": "15.10.3",
|
|
4
4
|
"description": "Straightforward library for building domain-driven microservice architectures",
|
|
5
5
|
"author": "Sander Hoogendoorn",
|
|
6
6
|
"license": "MIT",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"access": "public"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@thisisagile/easy-test": "15.10.
|
|
36
|
+
"@thisisagile/easy-test": "15.10.3",
|
|
37
37
|
"@types/form-urlencoded": "^4.4.0",
|
|
38
38
|
"@types/jsonwebtoken": "^9.0.2",
|
|
39
39
|
"@types/luxon": "3.2.0",
|
|
@@ -1,12 +1,20 @@
|
|
|
1
|
-
import { choose, isA, isDate, isDefined, isNumber, isString, JsonValue, Optional, Value } from
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { choose, isA, isDate, isDefined, isNumber, isString, JsonValue, Optional, Value } from "../../types";
|
|
2
|
+
import {
|
|
3
|
+
DateTime as LuxonDateTime,
|
|
4
|
+
DateTimeUnit as LuxonDateTimeUnit,
|
|
5
|
+
DurationUnit as LuxonDurationUnit,
|
|
6
|
+
Settings
|
|
7
|
+
} from "luxon";
|
|
8
|
+
import { ifDefined } from "../../utils";
|
|
4
9
|
|
|
5
|
-
Settings.defaultZone =
|
|
10
|
+
Settings.defaultZone = "utc";
|
|
6
11
|
|
|
7
12
|
export type DateTimeUnit = LuxonDateTimeUnit;
|
|
13
|
+
export type DurationUnit = LuxonDurationUnit;
|
|
14
|
+
export type Duration = Partial<Record<DurationUnit, number>>;
|
|
15
|
+
|
|
8
16
|
export type DiffOptions = {
|
|
9
|
-
rounding:
|
|
17
|
+
rounding: "floor" | "ceil" | "round";
|
|
10
18
|
};
|
|
11
19
|
|
|
12
20
|
export class DateTime extends Value<Optional<string>> {
|
|
@@ -36,7 +44,7 @@ export class DateTime extends Value<Optional<string>> {
|
|
|
36
44
|
}
|
|
37
45
|
|
|
38
46
|
protected get utc(): LuxonDateTime {
|
|
39
|
-
return this.luxon.setZone(
|
|
47
|
+
return this.luxon.setZone("utc");
|
|
40
48
|
}
|
|
41
49
|
|
|
42
50
|
protected get luxon(): LuxonDateTime {
|
|
@@ -51,7 +59,7 @@ export class DateTime extends Value<Optional<string>> {
|
|
|
51
59
|
|
|
52
60
|
from(param?: string | DateTime, other?: string): string {
|
|
53
61
|
const date: Optional<DateTime> = isA<DateTime>(param) ? param : undefined;
|
|
54
|
-
const locale: string = isString(param) ? param : undefined ?? other ??
|
|
62
|
+
const locale: string = isString(param) ? param : undefined ?? other ?? "en";
|
|
55
63
|
return ifDefined(
|
|
56
64
|
date,
|
|
57
65
|
d => this.utc.setLocale(locale).toRelative({ base: d.utc }),
|
|
@@ -68,26 +76,32 @@ export class DateTime extends Value<Optional<string>> {
|
|
|
68
76
|
}
|
|
69
77
|
|
|
70
78
|
equals(dt: DateTime): boolean {
|
|
71
|
-
return this.utc.hasSame(dt.utc,
|
|
79
|
+
return this.utc.hasSame(dt.utc, "millisecond");
|
|
72
80
|
}
|
|
73
81
|
|
|
74
|
-
add(n: number
|
|
75
|
-
|
|
82
|
+
add(n: number): DateTime;
|
|
83
|
+
add(n: number, unit: DurationUnit): DateTime;
|
|
84
|
+
add(duration: Duration): DateTime;
|
|
85
|
+
add(n: number | Duration, unit?: DurationUnit): DateTime {
|
|
86
|
+
return new DateTime(this.luxon.plus(isNumber(n) ? { [unit ?? 'day' as string]: n } : n).toISO());
|
|
76
87
|
}
|
|
77
88
|
|
|
78
|
-
subtract(n: number
|
|
79
|
-
|
|
89
|
+
subtract(n: number): DateTime;
|
|
90
|
+
subtract(n: number, unit: DurationUnit): DateTime;
|
|
91
|
+
subtract(duration: Duration): DateTime;
|
|
92
|
+
subtract(n: number | Duration, unit?: DurationUnit): DateTime {
|
|
93
|
+
return new DateTime(this.luxon.minus(isNumber(n) ? { [unit ?? 'day' as string]: n } : n).toISO());
|
|
80
94
|
}
|
|
81
95
|
|
|
82
|
-
diff(other: DateTime, unit: DateTimeUnit =
|
|
83
|
-
return Math[opts?.rounding ??
|
|
96
|
+
diff(other: DateTime, unit: DateTimeUnit = "day", opts?: DiffOptions): number {
|
|
97
|
+
return Math[opts?.rounding ?? "floor"](this.utc.diff(other.utc).as(unit));
|
|
84
98
|
}
|
|
85
99
|
|
|
86
|
-
startOf(unit: DateTimeUnit =
|
|
100
|
+
startOf(unit: DateTimeUnit = "day"): DateTime {
|
|
87
101
|
return new DateTime(this.luxon.startOf(unit).toISO());
|
|
88
102
|
}
|
|
89
103
|
|
|
90
|
-
endOf(unit: DateTimeUnit =
|
|
104
|
+
endOf(unit: DateTimeUnit = "day"): DateTime {
|
|
91
105
|
return new DateTime(this.luxon.endOf(unit).toISO());
|
|
92
106
|
}
|
|
93
107
|
|
|
@@ -96,7 +110,7 @@ export class DateTime extends Value<Optional<string>> {
|
|
|
96
110
|
}
|
|
97
111
|
|
|
98
112
|
toString(): string {
|
|
99
|
-
return this.value ??
|
|
113
|
+
return this.value ?? "";
|
|
100
114
|
}
|
|
101
115
|
|
|
102
116
|
toJSON(): JsonValue {
|
|
@@ -107,12 +121,12 @@ export class DateTime extends Value<Optional<string>> {
|
|
|
107
121
|
return this.luxon.toFormat(format);
|
|
108
122
|
}
|
|
109
123
|
|
|
110
|
-
toLocale(locale =
|
|
124
|
+
toLocale(locale = "nl-NL", format = "D"): string {
|
|
111
125
|
return this.luxon.setLocale(locale).toFormat(format);
|
|
112
126
|
}
|
|
113
127
|
|
|
114
128
|
toFull(locale?: string): string {
|
|
115
|
-
return this.toLocale(locale,
|
|
129
|
+
return this.toLocale(locale, "DDD");
|
|
116
130
|
}
|
|
117
131
|
|
|
118
132
|
toDate(): Optional<Date> {
|