@thisisagile/easy 15.10.0 → 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/dist/resources/Req.d.ts +6 -6
- package/dist/resources/Req.js +3 -1
- package/dist/resources/Req.js.map +1 -1
- package/dist/resources/Req.mjs +3 -1
- package/dist/resources/Req.mjs.map +1 -1
- package/dist/utils/Base64.d.ts +2 -0
- package/dist/utils/Base64.js +2 -1
- package/dist/utils/Base64.js.map +1 -1
- package/dist/utils/Base64.mjs +2 -1
- package/dist/utils/Base64.mjs.map +1 -1
- package/package.json +2 -2
- package/src/domain/values/DateTime.ts +33 -19
- package/src/resources/Req.ts +5 -4
- package/src/utils/Base64.ts +4 -1
|
@@ -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/dist/resources/Req.d.ts
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
import { Id, Json, JsonValue, OneOrMore, Optional, PageOptions, Text } from '../types';
|
|
2
|
-
export declare class Req implements Omit<PageOptions, 'sort'> {
|
|
2
|
+
export declare class Req<T = unknown> implements Omit<PageOptions, 'sort'> {
|
|
3
3
|
readonly path: Json;
|
|
4
4
|
readonly query: Json;
|
|
5
|
-
readonly body:
|
|
5
|
+
readonly body: T;
|
|
6
6
|
readonly headers: Record<string, OneOrMore<string>>;
|
|
7
7
|
readonly skip: Optional<number>;
|
|
8
8
|
readonly take: Optional<number>;
|
|
9
|
-
constructor(path: Json, query: Json, body:
|
|
9
|
+
constructor(path: Json, query: Json, body: T, headers: Record<string, OneOrMore<string>>);
|
|
10
10
|
get id(): Id;
|
|
11
11
|
get q(): JsonValue;
|
|
12
12
|
get: (key: Text) => any;
|
|
13
13
|
}
|
|
14
|
-
export declare
|
|
14
|
+
export declare function toReq<T = unknown>(req: {
|
|
15
15
|
params?: {
|
|
16
16
|
id?: unknown;
|
|
17
17
|
};
|
|
18
18
|
query?: {
|
|
19
19
|
q?: unknown;
|
|
20
20
|
};
|
|
21
|
-
body?:
|
|
21
|
+
body?: T;
|
|
22
22
|
headers?: unknown;
|
|
23
|
-
})
|
|
23
|
+
}): Req;
|
package/dist/resources/Req.js
CHANGED
|
@@ -43,7 +43,9 @@ class Req {
|
|
|
43
43
|
}
|
|
44
44
|
get = (key) => this.path[key.toString()] ?? this.query[key.toString()];
|
|
45
45
|
}
|
|
46
|
-
|
|
46
|
+
function toReq(req) {
|
|
47
|
+
return new Req(req.params, req.query, req.body, req.headers);
|
|
48
|
+
}
|
|
47
49
|
// Annotate the CommonJS export names for ESM import in node:
|
|
48
50
|
0 && (module.exports = {
|
|
49
51
|
Req,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/resources/Req.ts"],"sourcesContent":["import { asNumber, Id, Json, JsonValue, OneOrMore, Optional, PageOptions, Text } from '../types';\nimport { ifDefined } from '../utils';\n\nexport class Req implements Omit<PageOptions, 'sort'> {\n readonly skip: Optional<number>;\n readonly take: Optional<number>;\n constructor(readonly path: Json = {}, readonly query: Json = {}, readonly body:
|
|
1
|
+
{"version":3,"sources":["../../src/resources/Req.ts"],"sourcesContent":["import { asNumber, Id, Json, JsonValue, OneOrMore, Optional, PageOptions, Text } from '../types';\nimport { ifDefined } from '../utils';\n\nexport class Req<T = unknown> implements Omit<PageOptions, 'sort'> {\n readonly skip: Optional<number>;\n readonly take: Optional<number>;\n constructor(readonly path: Json = {}, readonly query: Json = {}, readonly body: T, readonly headers: Record<string, OneOrMore<string>>) {\n this.skip = ifDefined(query.skip, s => asNumber(s));\n this.take = ifDefined(query.take, t => asNumber(t));\n }\n\n get id(): Id {\n return this.get('id');\n }\n\n get q(): JsonValue {\n return this.get('q');\n }\n\n get = (key: Text): any => this.path[key.toString()] ?? this.query[key.toString()];\n}\n\nexport function toReq<T = unknown>(req: { params?: { id?: unknown }; query?: { q?: unknown }; body?: T; headers?: unknown }): Req {\n return new Req(req.params as Json, req.query as Json, req.body as Json, req.headers as Record<string, OneOrMore<string>>);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAsF;AACtF,mBAA0B;AAEnB,MAAM,IAAsD;AAAA,EAGjE,YAAqB,OAAa,CAAC,GAAY,QAAc,CAAC,GAAY,MAAkB,SAA4C;AAAnH;AAA0B;AAA2B;AAAkB;AAC1F,SAAK,WAAO,wBAAU,MAAM,MAAM,WAAK,uBAAS,CAAC,CAAC;AAClD,SAAK,WAAO,wBAAU,MAAM,MAAM,WAAK,uBAAS,CAAC,CAAC;AAAA,EACpD;AAAA,EALS;AAAA,EACA;AAAA,EAMT,IAAI,KAAS;AACX,WAAO,KAAK,IAAI,IAAI;AAAA,EACtB;AAAA,EAEA,IAAI,IAAe;AACjB,WAAO,KAAK,IAAI,GAAG;AAAA,EACrB;AAAA,EAEA,MAAM,CAAC,QAAmB,KAAK,KAAK,IAAI,SAAS,CAAC,KAAK,KAAK,MAAM,IAAI,SAAS,CAAC;AAClF;AAEO,SAAS,MAAmB,KAA+F;AAChI,SAAO,IAAI,IAAI,IAAI,QAAgB,IAAI,OAAe,IAAI,MAAc,IAAI,OAA4C;AAC1H;","names":[]}
|
package/dist/resources/Req.mjs
CHANGED
|
@@ -20,7 +20,9 @@ class Req {
|
|
|
20
20
|
}
|
|
21
21
|
get = (key) => this.path[key.toString()] ?? this.query[key.toString()];
|
|
22
22
|
}
|
|
23
|
-
|
|
23
|
+
function toReq(req) {
|
|
24
|
+
return new Req(req.params, req.query, req.body, req.headers);
|
|
25
|
+
}
|
|
24
26
|
export {
|
|
25
27
|
Req,
|
|
26
28
|
toReq
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/resources/Req.ts"],"sourcesContent":["import { asNumber, Id, Json, JsonValue, OneOrMore, Optional, PageOptions, Text } from '../types';\nimport { ifDefined } from '../utils';\n\nexport class Req implements Omit<PageOptions, 'sort'> {\n readonly skip: Optional<number>;\n readonly take: Optional<number>;\n constructor(readonly path: Json = {}, readonly query: Json = {}, readonly body:
|
|
1
|
+
{"version":3,"sources":["../../src/resources/Req.ts"],"sourcesContent":["import { asNumber, Id, Json, JsonValue, OneOrMore, Optional, PageOptions, Text } from '../types';\nimport { ifDefined } from '../utils';\n\nexport class Req<T = unknown> implements Omit<PageOptions, 'sort'> {\n readonly skip: Optional<number>;\n readonly take: Optional<number>;\n constructor(readonly path: Json = {}, readonly query: Json = {}, readonly body: T, readonly headers: Record<string, OneOrMore<string>>) {\n this.skip = ifDefined(query.skip, s => asNumber(s));\n this.take = ifDefined(query.take, t => asNumber(t));\n }\n\n get id(): Id {\n return this.get('id');\n }\n\n get q(): JsonValue {\n return this.get('q');\n }\n\n get = (key: Text): any => this.path[key.toString()] ?? this.query[key.toString()];\n}\n\nexport function toReq<T = unknown>(req: { params?: { id?: unknown }; query?: { q?: unknown }; body?: T; headers?: unknown }): Req {\n return new Req(req.params as Json, req.query as Json, req.body as Json, req.headers as Record<string, OneOrMore<string>>);\n}\n"],"mappings":";AAAA,SAAS,gBAA6E;AACtF,SAAS,iBAAiB;AAEnB,MAAM,IAAsD;AAAA,EAGjE,YAAqB,OAAa,CAAC,GAAY,QAAc,CAAC,GAAY,MAAkB,SAA4C;AAAnH;AAA0B;AAA2B;AAAkB;AAC1F,SAAK,OAAO,UAAU,MAAM,MAAM,OAAK,SAAS,CAAC,CAAC;AAClD,SAAK,OAAO,UAAU,MAAM,MAAM,OAAK,SAAS,CAAC,CAAC;AAAA,EACpD;AAAA,EALS;AAAA,EACA;AAAA,EAMT,IAAI,KAAS;AACX,WAAO,KAAK,IAAI,IAAI;AAAA,EACtB;AAAA,EAEA,IAAI,IAAe;AACjB,WAAO,KAAK,IAAI,GAAG;AAAA,EACrB;AAAA,EAEA,MAAM,CAAC,QAAmB,KAAK,KAAK,IAAI,SAAS,CAAC,KAAK,KAAK,MAAM,IAAI,SAAS,CAAC;AAClF;AAEO,SAAS,MAAmB,KAA+F;AAChI,SAAO,IAAI,IAAI,IAAI,QAAgB,IAAI,OAAe,IAAI,MAAc,IAAI,OAA4C;AAC1H;","names":[]}
|
package/dist/utils/Base64.d.ts
CHANGED
package/dist/utils/Base64.js
CHANGED
|
@@ -23,7 +23,8 @@ __export(Base64_exports, {
|
|
|
23
23
|
module.exports = __toCommonJS(Base64_exports);
|
|
24
24
|
const base64 = {
|
|
25
25
|
decode: (data) => Buffer.from(data, "base64").toString("utf-8"),
|
|
26
|
-
encode: (data) => Buffer.from(data, "utf-8").toString("base64")
|
|
26
|
+
encode: (data) => Buffer.from(data, "utf-8").toString("base64"),
|
|
27
|
+
toJson: (data) => JSON.parse(base64.decode(data))
|
|
27
28
|
};
|
|
28
29
|
// Annotate the CommonJS export names for ESM import in node:
|
|
29
30
|
0 && (module.exports = {
|
package/dist/utils/Base64.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/Base64.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../src/utils/Base64.ts"],"sourcesContent":["import { Json } from \"../types\";\n\nexport const base64 = {\n decode: (data: string): string => Buffer.from(data, \"base64\").toString(\"utf-8\"),\n encode: (data: string): string => Buffer.from(data, \"utf-8\").toString(\"base64\"),\n toJson: (data: string): Json => JSON.parse(base64.decode(data))\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,MAAM,SAAS;AAAA,EACpB,QAAQ,CAAC,SAAyB,OAAO,KAAK,MAAM,QAAQ,EAAE,SAAS,OAAO;AAAA,EAC9E,QAAQ,CAAC,SAAyB,OAAO,KAAK,MAAM,OAAO,EAAE,SAAS,QAAQ;AAAA,EAC9E,QAAQ,CAAC,SAAuB,KAAK,MAAM,OAAO,OAAO,IAAI,CAAC;AAChE;","names":[]}
|
package/dist/utils/Base64.mjs
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import "../chunk-4N72FQFX.mjs";
|
|
2
2
|
const base64 = {
|
|
3
3
|
decode: (data) => Buffer.from(data, "base64").toString("utf-8"),
|
|
4
|
-
encode: (data) => Buffer.from(data, "utf-8").toString("base64")
|
|
4
|
+
encode: (data) => Buffer.from(data, "utf-8").toString("base64"),
|
|
5
|
+
toJson: (data) => JSON.parse(base64.decode(data))
|
|
5
6
|
};
|
|
6
7
|
export {
|
|
7
8
|
base64
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/Base64.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../src/utils/Base64.ts"],"sourcesContent":["import { Json } from \"../types\";\n\nexport const base64 = {\n decode: (data: string): string => Buffer.from(data, \"base64\").toString(\"utf-8\"),\n encode: (data: string): string => Buffer.from(data, \"utf-8\").toString(\"base64\"),\n toJson: (data: string): Json => JSON.parse(base64.decode(data))\n};\n"],"mappings":";AAEO,MAAM,SAAS;AAAA,EACpB,QAAQ,CAAC,SAAyB,OAAO,KAAK,MAAM,QAAQ,EAAE,SAAS,OAAO;AAAA,EAC9E,QAAQ,CAAC,SAAyB,OAAO,KAAK,MAAM,OAAO,EAAE,SAAS,QAAQ;AAAA,EAC9E,QAAQ,CAAC,SAAuB,KAAK,MAAM,OAAO,OAAO,IAAI,CAAC;AAChE;","names":[]}
|
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> {
|
package/src/resources/Req.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { asNumber, Id, Json, JsonValue, OneOrMore, Optional, PageOptions, Text } from '../types';
|
|
2
2
|
import { ifDefined } from '../utils';
|
|
3
3
|
|
|
4
|
-
export class Req implements Omit<PageOptions, 'sort'> {
|
|
4
|
+
export class Req<T = unknown> implements Omit<PageOptions, 'sort'> {
|
|
5
5
|
readonly skip: Optional<number>;
|
|
6
6
|
readonly take: Optional<number>;
|
|
7
|
-
constructor(readonly path: Json = {}, readonly query: Json = {}, readonly body:
|
|
7
|
+
constructor(readonly path: Json = {}, readonly query: Json = {}, readonly body: T, readonly headers: Record<string, OneOrMore<string>>) {
|
|
8
8
|
this.skip = ifDefined(query.skip, s => asNumber(s));
|
|
9
9
|
this.take = ifDefined(query.take, t => asNumber(t));
|
|
10
10
|
}
|
|
@@ -20,5 +20,6 @@ export class Req implements Omit<PageOptions, 'sort'> {
|
|
|
20
20
|
get = (key: Text): any => this.path[key.toString()] ?? this.query[key.toString()];
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
export
|
|
24
|
-
new Req(req.params as Json, req.query as Json, req.body as Json, req.headers as Record<string, OneOrMore<string>>);
|
|
23
|
+
export function toReq<T = unknown>(req: { params?: { id?: unknown }; query?: { q?: unknown }; body?: T; headers?: unknown }): Req {
|
|
24
|
+
return new Req(req.params as Json, req.query as Json, req.body as Json, req.headers as Record<string, OneOrMore<string>>);
|
|
25
|
+
}
|
package/src/utils/Base64.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import { Json } from "../types";
|
|
2
|
+
|
|
1
3
|
export const base64 = {
|
|
2
4
|
decode: (data: string): string => Buffer.from(data, "base64").toString("utf-8"),
|
|
3
|
-
encode: (data: string): string => Buffer.from(data, "utf-8").toString("base64")
|
|
5
|
+
encode: (data: string): string => Buffer.from(data, "utf-8").toString("base64"),
|
|
6
|
+
toJson: (data: string): Json => JSON.parse(base64.decode(data))
|
|
4
7
|
};
|