@thisisagile/easy 10.15.2 → 11.1.1
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 -9
- package/dist/domain/values/DateTime.js +30 -26
- package/dist/domain/values/DateTime.js.map +1 -1
- package/dist/types/PageList.d.ts +1 -0
- package/dist/types/PageList.js +4 -1
- package/dist/types/PageList.js.map +1 -1
- package/package.json +4 -3
- package/src/domain/values/DateTime.ts +41 -57
- package/src/types/PageList.ts +5 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { Value } from '../../types';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
export declare type DateTimeUnit = 'year' | 'years' | 'y' | 'quarter' | 'quarters' | 'Q' | 'month' | 'months' | 'M' | 'week' | 'weeks' | 'w' | 'day' | 'days' | 'd' | 'hour' | 'hours' | 'h' | 'minute' | 'minutes' | 'm' | 'second' | 'seconds' | 's' | 'millisecond' | 'milliseconds' | 'ms';
|
|
1
|
+
import { JsonValue, Value } from '../../types';
|
|
2
|
+
import { DateTime as LuxonDateTime, DateTimeUnit as LuxonDateTimeUnit } from 'luxon';
|
|
3
|
+
export declare type DateTimeUnit = LuxonDateTimeUnit;
|
|
5
4
|
export declare class DateTime extends Value<string | undefined> {
|
|
6
5
|
constructor(value?: string | number | Date, format?: string);
|
|
7
6
|
static get now(): DateTime;
|
|
8
7
|
get isValid(): boolean;
|
|
9
8
|
get fromNow(): string;
|
|
10
9
|
from(date?: DateTime): string;
|
|
11
|
-
from(
|
|
12
|
-
from(date?: DateTime,
|
|
13
|
-
protected get utc():
|
|
10
|
+
from(locale?: string): string;
|
|
11
|
+
from(date?: DateTime, locale?: string): string;
|
|
12
|
+
protected get utc(): LuxonDateTime;
|
|
13
|
+
protected get luxon(): LuxonDateTime;
|
|
14
14
|
isAfter(dt: DateTime): boolean;
|
|
15
15
|
isBefore(dt: DateTime): boolean;
|
|
16
16
|
equals(dt: DateTime): boolean;
|
|
@@ -19,9 +19,11 @@ export declare class DateTime extends Value<string | undefined> {
|
|
|
19
19
|
diff: (other: DateTime, unit?: DateTimeUnit) => number;
|
|
20
20
|
startOf: (unit?: DateTimeUnit) => DateTime;
|
|
21
21
|
endOf: (unit?: DateTimeUnit) => DateTime;
|
|
22
|
+
withZone: (zone: string) => DateTime;
|
|
22
23
|
toString(): string;
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
toJSON(): JsonValue;
|
|
25
|
+
toLocale: (locale?: string, format?: string) => string;
|
|
26
|
+
toFull: (locale?: string) => string;
|
|
25
27
|
toDate(): Date | undefined;
|
|
26
28
|
}
|
|
27
29
|
export declare const isDateTime: (dt?: unknown) => dt is DateTime;
|
|
@@ -1,58 +1,62 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.isDateTime = exports.DateTime = void 0;
|
|
7
4
|
const types_1 = require("../../types");
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
require("moment/min/locales");
|
|
5
|
+
const luxon_1 = require("luxon");
|
|
6
|
+
luxon_1.Settings.defaultZone = 'utc';
|
|
11
7
|
class DateTime extends types_1.Value {
|
|
12
8
|
constructor(value, format) {
|
|
13
|
-
super((0, types_1.
|
|
14
|
-
.
|
|
15
|
-
.
|
|
16
|
-
.
|
|
17
|
-
|
|
18
|
-
this.
|
|
19
|
-
this.
|
|
20
|
-
this.
|
|
21
|
-
this.
|
|
22
|
-
this.
|
|
23
|
-
this.
|
|
9
|
+
super((0, types_1.choose)(value)
|
|
10
|
+
.type(types_1.isString, v => (format ? luxon_1.DateTime.fromFormat(v, format, { setZone: true }) : luxon_1.DateTime.fromISO(v, { setZone: true })).toISO())
|
|
11
|
+
.type(types_1.isNumber, v => luxon_1.DateTime.fromMillis(v).toISO())
|
|
12
|
+
.type(types_1.isDate, v => luxon_1.DateTime.fromJSDate(v).toISO())
|
|
13
|
+
.else(undefined));
|
|
14
|
+
this.add = (n, unit = 'day') => new DateTime(this.luxon.plus({ [unit]: n }).toISO());
|
|
15
|
+
this.subtract = (n, unit = 'day') => new DateTime(this.luxon.minus({ [unit]: n }).toISO());
|
|
16
|
+
this.diff = (other, unit = 'day') => Math.floor(this.utc.diff(other.utc).as(unit));
|
|
17
|
+
this.startOf = (unit = 'day') => new DateTime(this.luxon.startOf(unit).toISO());
|
|
18
|
+
this.endOf = (unit = 'day') => new DateTime(this.luxon.endOf(unit).toISO());
|
|
19
|
+
this.withZone = (zone) => new DateTime(this.utc.setZone(zone).toISO());
|
|
20
|
+
this.toLocale = (locale = 'nl-NL', format = 'D') => this.luxon.setLocale(locale).toFormat(format);
|
|
21
|
+
this.toFull = (locale) => this.toLocale(locale, 'DDD');
|
|
24
22
|
}
|
|
25
23
|
static get now() {
|
|
26
|
-
return new DateTime(
|
|
24
|
+
return new DateTime(luxon_1.DateTime.utc().toISO());
|
|
27
25
|
}
|
|
28
26
|
get isValid() {
|
|
29
|
-
return (0, types_1.isDefined)(this.value) && this.utc.isValid
|
|
27
|
+
return (0, types_1.isDefined)(this.value) && this.utc.isValid;
|
|
30
28
|
}
|
|
31
29
|
get fromNow() {
|
|
32
30
|
return this.from();
|
|
33
31
|
}
|
|
34
32
|
from(param, other) {
|
|
35
33
|
const date = (0, types_1.isA)(param) ? param : undefined;
|
|
36
|
-
const
|
|
37
|
-
return (0, types_1.isDefined)(date) ? this.utc.locale
|
|
34
|
+
const locale = (0, types_1.isString)(param) ? param : undefined ?? other ?? 'en';
|
|
35
|
+
return (0, types_1.isDefined)(date) ? this.utc.setLocale(locale).toRelative({ base: date.utc }) : this.utc.setLocale(locale).toRelative();
|
|
38
36
|
}
|
|
39
37
|
get utc() {
|
|
40
|
-
return
|
|
38
|
+
return this.luxon.setZone('utc');
|
|
39
|
+
}
|
|
40
|
+
get luxon() {
|
|
41
|
+
return luxon_1.DateTime.fromISO(this.value, { setZone: true });
|
|
41
42
|
}
|
|
42
43
|
isAfter(dt) {
|
|
43
|
-
return this.utc.
|
|
44
|
+
return this.utc > dt.utc;
|
|
44
45
|
}
|
|
45
46
|
isBefore(dt) {
|
|
46
|
-
return this.utc.
|
|
47
|
+
return this.utc < dt.utc;
|
|
47
48
|
}
|
|
48
49
|
equals(dt) {
|
|
49
|
-
return this.utc.
|
|
50
|
+
return this.utc.hasSame(dt.utc, 'millisecond');
|
|
50
51
|
}
|
|
51
52
|
toString() {
|
|
52
53
|
return this.value ?? '';
|
|
53
54
|
}
|
|
55
|
+
toJSON() {
|
|
56
|
+
return this.utc.toISO();
|
|
57
|
+
}
|
|
54
58
|
toDate() {
|
|
55
|
-
return this.isValid ? this.utc.
|
|
59
|
+
return this.isValid ? this.utc.toJSDate() : undefined;
|
|
56
60
|
}
|
|
57
61
|
}
|
|
58
62
|
exports.DateTime = DateTime;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateTime.js","sourceRoot":"","sources":["../../../src/domain/values/DateTime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DateTime.js","sourceRoot":"","sources":["../../../src/domain/values/DateTime.ts"],"names":[],"mappings":"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"}
|
package/dist/types/PageList.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export declare type PageOptions = {
|
|
|
12
12
|
export declare type PageList<T> = List<T> & Omit<PageOptions, 'sort'> & {
|
|
13
13
|
total?: number;
|
|
14
14
|
};
|
|
15
|
+
export declare const isPageList: <T>(l?: T[] | undefined) => l is PageList<T>;
|
|
15
16
|
export declare const toPageList: <T>(items?: T[] | undefined, options?: Omit<PageOptions, 'sort'> & {
|
|
16
17
|
total?: number;
|
|
17
18
|
}) => PageList<T>;
|
package/dist/types/PageList.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.asPageList = exports.toPageList = void 0;
|
|
3
|
+
exports.asPageList = exports.toPageList = exports.isPageList = void 0;
|
|
4
4
|
const List_1 = require("./List");
|
|
5
5
|
const Constructor_1 = require("./Constructor");
|
|
6
|
+
const IsA_1 = require("./IsA");
|
|
7
|
+
const isPageList = (l) => (0, List_1.isList)(l) && (0, IsA_1.isA)(l, 'total');
|
|
8
|
+
exports.isPageList = isPageList;
|
|
6
9
|
const toPageList = (items, options) => {
|
|
7
10
|
const list = (0, List_1.toList)(...(items ?? []));
|
|
8
11
|
list.take = options?.take ?? 250;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageList.js","sourceRoot":"","sources":["../../src/types/PageList.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"PageList.js","sourceRoot":"","sources":["../../src/types/PageList.ts"],"names":[],"mappings":";;;AAAA,iCAA8C;AAC9C,+CAAuD;AACvD,+BAA4B;AAQrB,MAAM,UAAU,GAAG,CAAI,CAAO,EAAoB,EAAE,CAAC,IAAA,aAAM,EAAI,CAAC,CAAC,IAAI,IAAA,SAAG,EAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAA/E,QAAA,UAAU,cAAqE;AAErF,MAAM,UAAU,GAAG,CAAI,KAAW,EAAE,OAAwD,EAAe,EAAE;IAClH,MAAM,IAAI,GAAG,IAAA,aAAM,EAAI,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAQ,CAAC;IAChD,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,GAAG,CAAC;IACjC,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,CAAC;IAC5B,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AANW,QAAA,UAAU,cAMrB;AAEK,MAAM,UAAU,GAAG,CAAO,CAAe,EAAE,QAAQ,IAAA,kBAAU,GAAK,EAAe,EAAE,CACxF,IAAA,kBAAU,EACR,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,yBAAW,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACjC,KAAK,CACN,CAAC;AAJS,QAAA,UAAU,cAInB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thisisagile/easy",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "11.1.1",
|
|
4
4
|
"description": "Straightforward library for building domain-driven microservice architectures",
|
|
5
5
|
"author": "Sander Hoogendoorn",
|
|
6
6
|
"license": "MIT",
|
|
@@ -31,9 +31,10 @@
|
|
|
31
31
|
"access": "public"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@thisisagile/easy-test": "
|
|
34
|
+
"@thisisagile/easy-test": "11.1.1",
|
|
35
35
|
"@types/form-urlencoded": "^4.4.0",
|
|
36
36
|
"@types/jsonwebtoken": "^8.5.8",
|
|
37
|
+
"@types/luxon": "2.3.2",
|
|
37
38
|
"@types/validator": "^13.7.2"
|
|
38
39
|
},
|
|
39
40
|
"dependencies": {
|
|
@@ -41,7 +42,7 @@
|
|
|
41
42
|
"axios": "^0.27.2",
|
|
42
43
|
"form-urlencoded": "^6.0.6",
|
|
43
44
|
"jsonwebtoken": "^8.5.1",
|
|
44
|
-
"
|
|
45
|
+
"luxon": "^2.4.0",
|
|
45
46
|
"reflect-metadata": "^0.1.13",
|
|
46
47
|
"uuid": "^8.3.2",
|
|
47
48
|
"validator": "^13.7.0"
|
|
@@ -1,53 +1,27 @@
|
|
|
1
|
-
import { isA,
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export type DateTimeUnit =
|
|
7
|
-
| 'year'
|
|
8
|
-
| 'years'
|
|
9
|
-
| 'y'
|
|
10
|
-
| 'quarter'
|
|
11
|
-
| 'quarters'
|
|
12
|
-
| 'Q'
|
|
13
|
-
| 'month'
|
|
14
|
-
| 'months'
|
|
15
|
-
| 'M'
|
|
16
|
-
| 'week'
|
|
17
|
-
| 'weeks'
|
|
18
|
-
| 'w'
|
|
19
|
-
| 'day'
|
|
20
|
-
| 'days'
|
|
21
|
-
| 'd'
|
|
22
|
-
| 'hour'
|
|
23
|
-
| 'hours'
|
|
24
|
-
| 'h'
|
|
25
|
-
| 'minute'
|
|
26
|
-
| 'minutes'
|
|
27
|
-
| 'm'
|
|
28
|
-
| 'second'
|
|
29
|
-
| 'seconds'
|
|
30
|
-
| 's'
|
|
31
|
-
| 'millisecond'
|
|
32
|
-
| 'milliseconds'
|
|
33
|
-
| 'ms';
|
|
1
|
+
import { choose, isA, isDate, isDefined, isNumber, isString, JsonValue, Value } from '../../types';
|
|
2
|
+
import { DateTime as LuxonDateTime, DateTimeUnit as LuxonDateTimeUnit, Settings } from 'luxon';
|
|
3
|
+
|
|
4
|
+
Settings.defaultZone = 'utc';
|
|
5
|
+
|
|
6
|
+
export type DateTimeUnit = LuxonDateTimeUnit;
|
|
34
7
|
|
|
35
8
|
export class DateTime extends Value<string | undefined> {
|
|
36
9
|
constructor(value?: string | number | Date, format?: string) {
|
|
37
10
|
super(
|
|
38
|
-
|
|
39
|
-
.
|
|
40
|
-
.
|
|
41
|
-
.
|
|
11
|
+
choose(value)
|
|
12
|
+
.type(isString, v => (format ? LuxonDateTime.fromFormat(v, format, { setZone: true }) : LuxonDateTime.fromISO(v, { setZone: true })).toISO())
|
|
13
|
+
.type(isNumber, v => LuxonDateTime.fromMillis(v).toISO())
|
|
14
|
+
.type(isDate, v => LuxonDateTime.fromJSDate(v).toISO())
|
|
15
|
+
.else(undefined as unknown as string)
|
|
42
16
|
);
|
|
43
17
|
}
|
|
44
18
|
|
|
45
19
|
static get now(): DateTime {
|
|
46
|
-
return new DateTime(
|
|
20
|
+
return new DateTime(LuxonDateTime.utc().toISO());
|
|
47
21
|
}
|
|
48
22
|
|
|
49
23
|
get isValid(): boolean {
|
|
50
|
-
return isDefined(this.value) && this.utc.isValid
|
|
24
|
+
return isDefined(this.value) && this.utc.isValid;
|
|
51
25
|
}
|
|
52
26
|
|
|
53
27
|
/**
|
|
@@ -58,50 +32,60 @@ export class DateTime extends Value<string | undefined> {
|
|
|
58
32
|
}
|
|
59
33
|
|
|
60
34
|
from(date?: DateTime): string;
|
|
61
|
-
from(
|
|
62
|
-
from(date?: DateTime,
|
|
63
|
-
from(param?: string |
|
|
35
|
+
from(locale?: string): string;
|
|
36
|
+
from(date?: DateTime, locale?: string): string;
|
|
37
|
+
from(param?: string | DateTime, other?: string): string {
|
|
64
38
|
const date: DateTime | undefined = isA<DateTime>(param) ? param : undefined;
|
|
65
|
-
const
|
|
66
|
-
return isDefined(date) ? this.utc.locale
|
|
39
|
+
const locale: string = isString(param) ? param : undefined ?? other ?? 'en';
|
|
40
|
+
return isDefined(date) ? (this.utc.setLocale(locale).toRelative({ base: date.utc }) as string) : (this.utc.setLocale(locale).toRelative() as string);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
protected get utc(): LuxonDateTime {
|
|
44
|
+
return this.luxon.setZone('utc');
|
|
67
45
|
}
|
|
68
46
|
|
|
69
|
-
protected get
|
|
70
|
-
return
|
|
47
|
+
protected get luxon(): LuxonDateTime {
|
|
48
|
+
return LuxonDateTime.fromISO(this.value as string, { setZone: true });
|
|
71
49
|
}
|
|
72
50
|
|
|
73
51
|
isAfter(dt: DateTime): boolean {
|
|
74
|
-
return this.utc.
|
|
52
|
+
return this.utc > dt.utc;
|
|
75
53
|
}
|
|
76
54
|
|
|
77
55
|
isBefore(dt: DateTime): boolean {
|
|
78
|
-
return this.utc.
|
|
56
|
+
return this.utc < dt.utc;
|
|
79
57
|
}
|
|
80
58
|
|
|
81
59
|
equals(dt: DateTime): boolean {
|
|
82
|
-
return this.utc.
|
|
60
|
+
return this.utc.hasSame(dt.utc, 'millisecond');
|
|
83
61
|
}
|
|
84
62
|
|
|
85
|
-
add = (n: number, unit: DateTimeUnit = '
|
|
63
|
+
add = (n: number, unit: DateTimeUnit = 'day'): DateTime => new DateTime(this.luxon.plus({ [unit]: n }).toISO());
|
|
86
64
|
|
|
87
|
-
subtract = (n: number, unit: DateTimeUnit = '
|
|
65
|
+
subtract = (n: number, unit: DateTimeUnit = 'day'): DateTime => new DateTime(this.luxon.minus({ [unit]: n }).toISO());
|
|
88
66
|
|
|
89
|
-
diff = (other: DateTime, unit: DateTimeUnit = '
|
|
67
|
+
diff = (other: DateTime, unit: DateTimeUnit = 'day'): number => Math.floor(this.utc.diff(other.utc).as(unit));
|
|
90
68
|
|
|
91
|
-
startOf = (unit: DateTimeUnit = 'day'): DateTime => new DateTime(this.
|
|
69
|
+
startOf = (unit: DateTimeUnit = 'day'): DateTime => new DateTime(this.luxon.startOf(unit).toISO());
|
|
92
70
|
|
|
93
|
-
endOf = (unit: DateTimeUnit = 'day'): DateTime => new DateTime(this.
|
|
71
|
+
endOf = (unit: DateTimeUnit = 'day'): DateTime => new DateTime(this.luxon.endOf(unit).toISO());
|
|
72
|
+
|
|
73
|
+
withZone = (zone: string): DateTime => new DateTime(this.utc.setZone(zone).toISO());
|
|
94
74
|
|
|
95
75
|
toString(): string {
|
|
96
76
|
return this.value ?? '';
|
|
97
77
|
}
|
|
98
78
|
|
|
99
|
-
|
|
79
|
+
toJSON(): JsonValue {
|
|
80
|
+
return this.utc.toISO() as unknown as JsonValue;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
toLocale = (locale = 'nl-NL', format = 'D'): string => this.luxon.setLocale(locale).toFormat(format);
|
|
100
84
|
|
|
101
|
-
toFull = (
|
|
85
|
+
toFull = (locale?: string): string => this.toLocale(locale, 'DDD');
|
|
102
86
|
|
|
103
87
|
toDate(): Date | undefined {
|
|
104
|
-
return this.isValid ? this.utc.
|
|
88
|
+
return this.isValid ? this.utc.toJSDate() : undefined;
|
|
105
89
|
}
|
|
106
90
|
}
|
|
107
91
|
|
package/src/types/PageList.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { List, toList } from './List';
|
|
1
|
+
import { isList, List, toList } from './List';
|
|
2
2
|
import { Construct, ofConstruct } from './Constructor';
|
|
3
|
+
import { isA } from './IsA';
|
|
3
4
|
|
|
4
5
|
export type Sort = { key: string; value: -1 | 1 };
|
|
5
6
|
|
|
@@ -7,6 +8,8 @@ export type PageOptions = { take?: number; skip?: number; sort?: Sort[] };
|
|
|
7
8
|
|
|
8
9
|
export type PageList<T> = List<T> & Omit<PageOptions, 'sort'> & { total?: number };
|
|
9
10
|
|
|
11
|
+
export const isPageList = <T>(l?: T[]): l is PageList<T> => isList<T>(l) && isA(l, 'total');
|
|
12
|
+
|
|
10
13
|
export const toPageList = <T>(items?: T[], options?: Omit<PageOptions, 'sort'> & { total?: number }): PageList<T> => {
|
|
11
14
|
const list = toList<T>(...(items ?? [])) as any;
|
|
12
15
|
list.take = options?.take ?? 250;
|
|
@@ -20,3 +23,4 @@ export const asPageList = <T, U>(c: Construct<T>, items = toPageList<U>()): Page
|
|
|
20
23
|
items.map(i => ofConstruct(c, i)),
|
|
21
24
|
items
|
|
22
25
|
);
|
|
26
|
+
|