@thisisagile/easy 10.15.2 → 11.0.0

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.
@@ -1,16 +1,16 @@
1
- import { Value } from '../../types';
2
- import { Moment } from 'moment';
3
- import 'moment/min/locales';
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(locales?: string | string[]): string;
12
- from(date?: DateTime, locales?: string | string[]): string;
13
- protected get utc(): Moment;
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
- toLocale: (locales?: string | string[], format?: string) => string;
24
- toFull: (...locales: string[]) => string;
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 moment_1 = __importDefault(require("moment"));
9
- const utils_1 = require("../../utils");
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.tryTo)(value)
14
- .is.defined()
15
- .map(v => moment_1.default.utc(v, format, true).toISOString())
16
- .orElse());
17
- this.add = (n, unit = 'days') => new DateTime(this.utc.add(n, unit).toISOString());
18
- this.subtract = (n, unit = 'days') => new DateTime(this.utc.subtract(n, unit).toISOString());
19
- this.diff = (other, unit = 'days') => this.utc.diff(other.utc, unit);
20
- this.startOf = (unit = 'day') => new DateTime(this.utc.startOf(unit).toISOString());
21
- this.endOf = (unit = 'day') => new DateTime(this.utc.endOf(unit).toISOString());
22
- this.toLocale = (locales = 'nl-NL', format = 'L') => this.utc.locale(locales).format(format);
23
- this.toFull = (...locales) => this.toLocale((0, utils_1.ifNotEmpty)(locales, locales), 'LL');
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(moment_1.default.utc().toISOString());
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 locales = (0, types_1.isString)(param) || (0, types_1.isArray)(param) ? param : (0, types_1.isString)(other) || (0, types_1.isArray)(other) ? other : 'en';
37
- return (0, types_1.isDefined)(date) ? this.utc.locale(locales).from(date.utc) : this.utc.locale(locales).fromNow();
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 moment_1.default.utc(this.value);
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.isAfter(moment_1.default.utc(dt.value));
44
+ return this.utc > dt.utc;
44
45
  }
45
46
  isBefore(dt) {
46
- return this.utc.isBefore(moment_1.default.utc(dt.value));
47
+ return this.utc < dt.utc;
47
48
  }
48
49
  equals(dt) {
49
- return this.utc.isSame(moment_1.default.utc(dt.value));
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.toDate() : undefined;
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":"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"}
1
+ {"version":3,"file":"DateTime.js","sourceRoot":"","sources":["../../../src/domain/values/DateTime.ts"],"names":[],"mappings":"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"}
@@ -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>;
@@ -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,iCAAsC;AACtC,+CAAuD;AAQhD,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"}
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": "10.15.2",
3
+ "version": "11.0.0",
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": "10.15.2",
34
+ "@thisisagile/easy-test": "11.0.0",
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
- "moment": "^2.29.3",
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, isArray, isDefined, isString, tryTo, Value } from '../../types';
2
- import moment, { Moment } from 'moment';
3
- import { ifNotEmpty } from '../../utils';
4
- import 'moment/min/locales';
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
- tryTo(value)
39
- .is.defined()
40
- .map(v => moment.utc(v, format, true).toISOString())
41
- .orElse()
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(moment.utc().toISOString());
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(locales?: string | string[]): string;
62
- from(date?: DateTime, locales?: string | string[]): string;
63
- from(param?: string | string[] | DateTime, other?: string | string[]): 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 locales: string | string[] = isString(param) || isArray<string>(param) ? param : isString(other) || isArray<string>(other) ? other : 'en';
66
- return isDefined(date) ? this.utc.locale(locales).from(date.utc) : this.utc.locale(locales).fromNow();
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 utc(): Moment {
70
- return moment.utc(this.value);
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.isAfter(moment.utc(dt.value));
52
+ return this.utc > dt.utc;
75
53
  }
76
54
 
77
55
  isBefore(dt: DateTime): boolean {
78
- return this.utc.isBefore(moment.utc(dt.value));
56
+ return this.utc < dt.utc;
79
57
  }
80
58
 
81
59
  equals(dt: DateTime): boolean {
82
- return this.utc.isSame(moment.utc(dt.value));
60
+ return this.utc.hasSame(dt.utc, 'millisecond');
83
61
  }
84
62
 
85
- add = (n: number, unit: DateTimeUnit = 'days'): DateTime => new DateTime(this.utc.add(n, unit).toISOString());
63
+ add = (n: number, unit: DateTimeUnit = 'day'): DateTime => new DateTime(this.luxon.plus({ [unit]: n }).toISO());
86
64
 
87
- subtract = (n: number, unit: DateTimeUnit = 'days'): DateTime => new DateTime(this.utc.subtract(n, unit).toISOString());
65
+ subtract = (n: number, unit: DateTimeUnit = 'day'): DateTime => new DateTime(this.luxon.minus({ [unit]: n }).toISO());
88
66
 
89
- diff = (other: DateTime, unit: DateTimeUnit = 'days'): number => this.utc.diff(other.utc, unit);
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.utc.startOf(unit).toISOString());
69
+ startOf = (unit: DateTimeUnit = 'day'): DateTime => new DateTime(this.luxon.startOf(unit).toISO());
92
70
 
93
- endOf = (unit: DateTimeUnit = 'day'): DateTime => new DateTime(this.utc.endOf(unit).toISOString());
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
- toLocale = (locales: string | string[] = 'nl-NL', format = 'L'): string => this.utc.locale(locales).format(format);
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 = (...locales: string[]): string => this.toLocale(ifNotEmpty(locales, locales), 'LL');
85
+ toFull = (locale?: string): string => this.toLocale(locale, 'DDD');
102
86
 
103
87
  toDate(): Date | undefined {
104
- return this.isValid ? this.utc.toDate() : undefined;
88
+ return this.isValid ? this.utc.toJSDate() : undefined;
105
89
  }
106
90
  }
107
91
 
@@ -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
+