@thisisagile/easy 8.13.0 → 8.15.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.
@@ -0,0 +1,15 @@
1
+ import { Struct } from '../Struct';
2
+ import { Dimension } from './Dimension';
3
+ export declare class Box extends Struct {
4
+ readonly l: Dimension;
5
+ readonly w: Dimension;
6
+ readonly h: Dimension;
7
+ private sorted;
8
+ lowestDim: Dimension;
9
+ medianDim: Dimension;
10
+ maxDim: Dimension;
11
+ get isValid(): boolean;
12
+ static with: (l: Dimension, w: Dimension, h: Dimension) => Box;
13
+ stack: (qty: number) => Box;
14
+ fits: (contents: Box, qty?: number) => boolean;
15
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.Box = void 0;
13
+ const Struct_1 = require("../Struct");
14
+ const validation_1 = require("../../validation");
15
+ const Dimension_1 = require("./Dimension");
16
+ class Box extends Struct_1.Struct {
17
+ constructor() {
18
+ super(...arguments);
19
+ this.l = new Dimension_1.Dimension(this.state.l);
20
+ this.w = new Dimension_1.Dimension(this.state.w);
21
+ this.h = new Dimension_1.Dimension(this.state.h);
22
+ this.sorted = [this.l, this.w, this.h].sort((n1, n2) => n1.sizeInMM() - n2.sizeInMM());
23
+ this.lowestDim = this.sorted[0];
24
+ this.medianDim = this.sorted[1];
25
+ this.maxDim = this.sorted[2];
26
+ this.stack = (qty) => Box.with(this.maxDim, this.medianDim, Dimension_1.Dimension.with(this.lowestDim.value * qty, this.lowestDim.uom));
27
+ this.fits = (contents, qty = 1) => {
28
+ const stackedContent = contents.stack(qty);
29
+ return this.lowestDim.gte(stackedContent.lowestDim) &&
30
+ this.medianDim.gte(stackedContent.medianDim) &&
31
+ this.maxDim.gte(stackedContent.maxDim);
32
+ };
33
+ }
34
+ get isValid() {
35
+ return super.isValid && this.l.isValid && this.w.isValid && this.h.isValid;
36
+ }
37
+ }
38
+ Box.with = (l, w, h) => new Box({ l, w, h });
39
+ __decorate([
40
+ (0, validation_1.required)(),
41
+ __metadata("design:type", Dimension_1.Dimension)
42
+ ], Box.prototype, "l", void 0);
43
+ __decorate([
44
+ (0, validation_1.required)(),
45
+ __metadata("design:type", Dimension_1.Dimension)
46
+ ], Box.prototype, "w", void 0);
47
+ __decorate([
48
+ (0, validation_1.required)(),
49
+ __metadata("design:type", Dimension_1.Dimension)
50
+ ], Box.prototype, "h", void 0);
51
+ exports.Box = Box;
52
+ //# sourceMappingURL=Box.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Box.js","sourceRoot":"","sources":["../../../src/domain/structs/Box.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sCAAmC;AACnC,iDAA4C;AAC5C,2CAAwC;AAExC,MAAa,GAAI,SAAQ,eAAM;IAA/B;;QACuB,MAAC,GAAc,IAAI,qBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAC,GAAc,IAAI,qBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAC,GAAc,IAAI,qBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAExD,WAAM,GAAgB,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvG,cAAS,GAAc,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACtC,cAAS,GAAc,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACtC,WAAM,GAAc,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAQnC,UAAK,GAAG,CAAC,GAAW,EAAO,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,qBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAEpI,SAAI,GAAG,CAAC,QAAa,EAAE,GAAG,GAAG,CAAC,EAAW,EAAE;YACzC,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAE,cAAc,CAAC,SAAS,CAAC;gBAClD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC;gBAC5C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAE,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC,CAAC;IAGJ,CAAC;IAhBC,IAAI,OAAO;QACT,OAAO,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7E,CAAC;;AAEM,QAAI,GAAG,CAAC,CAAY,EAAE,CAAY,EAAE,CAAY,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAbrE;IAAX,IAAA,qBAAQ,GAAE;8BAAa,qBAAS;8BAA+B;AACpD;IAAX,IAAA,qBAAQ,GAAE;8BAAa,qBAAS;8BAA+B;AACpD;IAAX,IAAA,qBAAQ,GAAE;8BAAa,qBAAS;8BAA+B;AAHlE,kBA0BC"}
@@ -1,10 +1,9 @@
1
1
  import { Struct } from '../Struct';
2
2
  import { UnitOfMeasurement } from '../enums';
3
3
  export declare class Dimension extends Struct {
4
- readonly length: number;
5
- readonly lengthUOM: UnitOfMeasurement;
6
- readonly width: number;
7
- readonly widthUOM: UnitOfMeasurement;
8
- readonly height: number;
9
- readonly heightUOM: UnitOfMeasurement;
4
+ readonly value: number;
5
+ readonly uom: UnitOfMeasurement;
6
+ static with: (value: number, uom?: UnitOfMeasurement) => Dimension;
7
+ sizeInMM: () => number;
8
+ gte: (dim: Dimension) => boolean;
10
9
  }
@@ -16,25 +16,16 @@ const enums_1 = require("../enums");
16
16
  class Dimension extends Struct_1.Struct {
17
17
  constructor() {
18
18
  super(...arguments);
19
- this.length = this.state.length;
20
- this.lengthUOM = enums_1.UnitOfMeasurement.byId(this.state.lengthUOM, enums_1.UnitOfMeasurement.MM);
21
- this.width = this.state.width;
22
- this.widthUOM = enums_1.UnitOfMeasurement.byId(this.state.widthUOM, enums_1.UnitOfMeasurement.MM);
23
- this.height = this.state.height;
24
- this.heightUOM = enums_1.UnitOfMeasurement.byId(this.state.heightUOM, enums_1.UnitOfMeasurement.MM);
19
+ this.value = this.state.value;
20
+ this.uom = enums_1.UnitOfMeasurement.byId(this.state.uom, enums_1.UnitOfMeasurement.MM);
21
+ this.sizeInMM = () => this.value * this.uom.mmMultiplier;
22
+ this.gte = (dim) => this.sizeInMM() >= dim.sizeInMM();
25
23
  }
26
24
  }
25
+ Dimension.with = (value, uom = enums_1.UnitOfMeasurement.MM) => new Dimension({ value, uom });
27
26
  __decorate([
28
27
  (0, validation_1.required)(),
29
28
  __metadata("design:type", Number)
30
- ], Dimension.prototype, "length", void 0);
31
- __decorate([
32
- (0, validation_1.required)(),
33
- __metadata("design:type", Number)
34
- ], Dimension.prototype, "width", void 0);
35
- __decorate([
36
- (0, validation_1.required)(),
37
- __metadata("design:type", Number)
38
- ], Dimension.prototype, "height", void 0);
29
+ ], Dimension.prototype, "value", void 0);
39
30
  exports.Dimension = Dimension;
40
31
  //# sourceMappingURL=Dimension.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Dimension.js","sourceRoot":"","sources":["../../../src/domain/structs/Dimension.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sCAAmC;AACnC,iDAA4C;AAC5C,oCAA6C;AAE7C,MAAa,SAAU,SAAQ,eAAM;IAArC;;QACuB,WAAM,GAAW,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAC/C,cAAS,GAAsB,yBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,yBAAiB,CAAC,EAAE,CAAC,CAAC;QACtF,UAAK,GAAW,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC7C,aAAQ,GAAsB,yBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,yBAAiB,CAAC,EAAE,CAAC,CAAC;QACpF,WAAM,GAAW,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAC/C,cAAS,GAAsB,yBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,yBAAiB,CAAC,EAAE,CAAC,CAAC;IAE7G,CAAC;CAAA;AAPa;IAAX,IAAA,qBAAQ,GAAE;;yCAA6C;AAE5C;IAAX,IAAA,qBAAQ,GAAE;;wCAA2C;AAE1C;IAAX,IAAA,qBAAQ,GAAE;;yCAA6C;AAL1D,8BAQC"}
1
+ {"version":3,"file":"Dimension.js","sourceRoot":"","sources":["../../../src/domain/structs/Dimension.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sCAAmC;AACnC,iDAA4C;AAC5C,oCAA6C;AAE7C,MAAa,SAAU,SAAQ,eAAM;IAArC;;QACuB,UAAK,GAAW,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC7C,QAAG,GAAsB,yBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,yBAAiB,CAAC,EAAE,CAAC,CAAC;QAI/F,aAAQ,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;QAE5D,QAAG,GAAG,CAAC,GAAc,EAAW,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;IACvE,CAAC;;AALQ,cAAI,GAAG,CAAC,KAAa,EAAE,MAAyB,yBAAiB,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AAHlG;IAAX,IAAA,qBAAQ,GAAE;;wCAA2C;AADxD,8BASC"}
@@ -2,5 +2,5 @@ import { UnitOfWeight } from '../enums';
2
2
  import { Struct } from '../Struct';
3
3
  export declare class Weight extends Struct {
4
4
  readonly value: number;
5
- readonly UOW: UnitOfWeight;
5
+ readonly uow: UnitOfWeight;
6
6
  }
@@ -17,7 +17,7 @@ class Weight extends Struct_1.Struct {
17
17
  constructor() {
18
18
  super(...arguments);
19
19
  this.value = this.state.value;
20
- this.UOW = enums_1.UnitOfWeight.byId(this.state.UOW, enums_1.UnitOfWeight.G);
20
+ this.uow = enums_1.UnitOfWeight.byId(this.state.uow, enums_1.UnitOfWeight.G);
21
21
  }
22
22
  }
23
23
  __decorate([
@@ -1,4 +1,5 @@
1
1
  export * from './Address';
2
+ export * from './Box';
2
3
  export * from './Dimension';
3
4
  export * from './Money';
4
5
  export * from './Weight';
@@ -11,6 +11,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./Address"), exports);
14
+ __exportStar(require("./Box"), exports);
14
15
  __exportStar(require("./Dimension"), exports);
15
16
  __exportStar(require("./Money"), exports);
16
17
  __exportStar(require("./Weight"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/structs/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4CAA0B;AAC1B,8CAA4B;AAC5B,0CAAwB;AACxB,2CAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/structs/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4CAA0B;AAC1B,wCAAsB;AACtB,8CAA4B;AAC5B,0CAAwB;AACxB,2CAAyB"}
@@ -1,11 +1,15 @@
1
1
  import { Value } from '../../types';
2
2
  import { Moment } from 'moment';
3
+ import 'moment/min/locales';
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';
4
5
  export declare class DateTime extends Value<string | undefined> {
5
6
  constructor(value?: string | number | Date, format?: string);
6
7
  static get now(): DateTime;
7
8
  get isValid(): boolean;
8
9
  get fromNow(): string;
10
+ from(date?: DateTime): string;
11
+ from(locales?: string | string[]): string;
12
+ from(date?: DateTime, locales?: string | string[]): string;
9
13
  protected get utc(): Moment;
10
14
  isAfter(dt: DateTime): boolean;
11
15
  isBefore(dt: DateTime): boolean;
@@ -7,6 +7,7 @@ exports.DateTime = void 0;
7
7
  const types_1 = require("../../types");
8
8
  const moment_1 = __importDefault(require("moment"));
9
9
  const utils_1 = require("../../utils");
10
+ require("moment/min/locales");
10
11
  class DateTime extends types_1.Value {
11
12
  constructor(value, format) {
12
13
  super((0, types_1.tryTo)(value).is.defined().map(v => moment_1.default.utc(v, format, true).toISOString()).orElse());
@@ -25,7 +26,12 @@ class DateTime extends types_1.Value {
25
26
  return (0, types_1.isDefined)(this.value) && this.utc.isValid();
26
27
  }
27
28
  get fromNow() {
28
- return this.value ? this.utc.fromNow() : '';
29
+ return this.from();
30
+ }
31
+ from(param, other) {
32
+ const date = (0, types_1.isA)(param) ? param : undefined;
33
+ 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');
34
+ return (0, types_1.isDefined)(date) ? this.utc.locale(locales).from(date.utc) : this.utc.locale(locales).fromNow();
29
35
  }
30
36
  get utc() {
31
37
  return moment_1.default.utc(this.value);
@@ -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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"}
@@ -14,6 +14,7 @@ export declare abstract class Enum implements Validatable {
14
14
  static byIds<T extends Enum>(ids?: Id[]): List<T>;
15
15
  static filter<E extends Enum>(p: (value: E, index: number, array: E[]) => unknown, params?: unknown): List<E>;
16
16
  equals<E extends Enum | Id>(other: E): boolean;
17
+ isIn<E extends Enum>(...items: E[]): boolean;
17
18
  toJSON(): JsonValue;
18
19
  toString(): string;
19
20
  }
@@ -35,6 +35,7 @@ class Enum {
35
35
  equals(other) {
36
36
  return this.id === ((0, exports.isEnum)(other) ? other.id : other);
37
37
  }
38
+ isIn(...items) { return items.some(i => i.equals(this)); }
38
39
  toJSON() {
39
40
  return this.id;
40
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Enum.js","sourceRoot":"","sources":["../../src/types/Enum.ts"],"names":[],"mappings":";;;AAEA,+BAA6B;AAC7B,iCAA8B;AAC9B,6BAAiC;AAGjC,+BAAmC;AAEnC,MAAsB,IAAI;IACxB,YAA+B,IAAY,EAAW,KAAS,IAAI,CAAC,WAAW,EAAE,EAAW,OAAe,EAAE,CAAC,QAAQ,EAAE;QAAzF,SAAI,GAAJ,IAAI,CAAQ;QAAW,OAAE,GAAF,EAAE,CAAyB;QAAW,SAAI,GAAJ,IAAI,CAAwB;IAAG,CAAC;IAE5H,IAAI,OAAO;QACT,OAAO,IAAA,cAAS,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,GAAG;QACR,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC;aACd,MAAM,EAAK;aACX,MAAM,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,IAAA,cAAM,EAAC,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,IAAI,CAAiB,EAAM,EAAE,GAAqB;QACvD,OAAO,CACL,IAAA,WAAI,EAAC,IAAI,CAAC;aACP,MAAM,EAAK;aACX,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,IAAA,cAAM,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,IAAA,WAAK,EAAC,GAAG,CAAC,CAClE,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAK,CAAiB,GAAU;QACrC,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC;aACd,MAAM,EAAK;aACX,MAAM,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,IAAA,cAAM,EAAC,CAAC,CAAC,IAAI,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,CAAC,MAAM,CAAiB,CAAmD,EAAE,MAAgB;QACjG,OAAO,IAAI,CAAC,GAAG,EAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,CAAsB,KAAQ;QAClC,OAAO,IAAI,CAAC,EAAE,KAAK,CAAC,IAAA,cAAM,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC;CACF;AA1CD,oBA0CC;AAEM,MAAM,MAAM,GAAG,CAAC,CAAW,EAAa,EAAE,CAAC,IAAA,cAAS,EAAC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,IAAA,UAAI,EAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAA9G,QAAA,MAAM,UAAwG"}
1
+ {"version":3,"file":"Enum.js","sourceRoot":"","sources":["../../src/types/Enum.ts"],"names":[],"mappings":";;;AAEA,+BAA6B;AAC7B,iCAA8B;AAC9B,6BAAiC;AAGjC,+BAAmC;AAEnC,MAAsB,IAAI;IACxB,YAA+B,IAAY,EAAW,KAAS,IAAI,CAAC,WAAW,EAAE,EAAW,OAAe,EAAE,CAAC,QAAQ,EAAE;QAAzF,SAAI,GAAJ,IAAI,CAAQ;QAAW,OAAE,GAAF,EAAE,CAAyB;QAAW,SAAI,GAAJ,IAAI,CAAwB;IAAG,CAAC;IAE5H,IAAI,OAAO;QACT,OAAO,IAAA,cAAS,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,GAAG;QACR,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC;aACd,MAAM,EAAK;aACX,MAAM,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,IAAA,cAAM,EAAC,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,IAAI,CAAiB,EAAM,EAAE,GAAqB;QACvD,OAAO,CACL,IAAA,WAAI,EAAC,IAAI,CAAC;aACP,MAAM,EAAK;aACX,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,IAAA,cAAM,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,IAAA,WAAK,EAAC,GAAG,CAAC,CAClE,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAK,CAAiB,GAAU;QACrC,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC;aACd,MAAM,EAAK;aACX,MAAM,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,IAAA,cAAM,EAAC,CAAC,CAAC,IAAI,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,CAAC,MAAM,CAAiB,CAAmD,EAAE,MAAgB;QACjG,OAAO,IAAI,CAAC,GAAG,EAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,CAAsB,KAAQ;QAClC,OAAO,IAAI,CAAC,EAAE,KAAK,CAAC,IAAA,cAAM,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,CAAiB,GAAG,KAAU,IAAa,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAExF,MAAM;QACJ,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC;CACF;AA5CD,oBA4CC;AAEM,MAAM,MAAM,GAAG,CAAC,CAAW,EAAa,EAAE,CAAC,IAAA,cAAS,EAAC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,IAAA,UAAI,EAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAA9G,QAAA,MAAM,UAAwG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thisisagile/easy",
3
- "version": "8.13.0",
3
+ "version": "8.15.1",
4
4
  "description": "Straightforward library for building domain-driven microservice architectures",
5
5
  "author": "Sander Hoogendoorn",
6
6
  "license": "MIT",
@@ -31,7 +31,7 @@
31
31
  "access": "public"
32
32
  },
33
33
  "devDependencies": {
34
- "@thisisagile/easy-test": "8.13.0",
34
+ "@thisisagile/easy-test": "8.15.1",
35
35
  "@types/form-urlencoded": "^4.4.0",
36
36
  "@types/jsonwebtoken": "^8.5.6",
37
37
  "@types/validator": "^13.7.0"
@@ -0,0 +1,31 @@
1
+ import { Struct } from '../Struct';
2
+ import { required } from '../../validation';
3
+ import { Dimension } from './Dimension';
4
+
5
+ export class Box extends Struct {
6
+ @required() readonly l: Dimension = new Dimension(this.state.l);
7
+ @required() readonly w: Dimension = new Dimension(this.state.w);
8
+ @required() readonly h: Dimension = new Dimension(this.state.h);
9
+
10
+ private sorted: Dimension[] = [this.l, this.w, this.h].sort((n1, n2) => n1.sizeInMM() - n2.sizeInMM());
11
+ lowestDim: Dimension = this.sorted[0];
12
+ medianDim: Dimension = this.sorted[1];
13
+ maxDim: Dimension = this.sorted[2];
14
+
15
+ get isValid(): boolean {
16
+ return super.isValid && this.l.isValid && this.w.isValid && this.h.isValid;
17
+ }
18
+
19
+ static with = (l: Dimension, w: Dimension, h: Dimension) => new Box({ l, w, h });
20
+
21
+ stack = (qty: number): Box => Box.with(this.maxDim, this.medianDim, Dimension.with(this.lowestDim.value * qty, this.lowestDim.uom));
22
+
23
+ fits = (contents: Box, qty = 1): boolean => {
24
+ const stackedContent = contents.stack(qty);
25
+ return this.lowestDim.gte( stackedContent.lowestDim) &&
26
+ this.medianDim.gte(stackedContent.medianDim) &&
27
+ this.maxDim.gte( stackedContent.maxDim);
28
+ };
29
+
30
+
31
+ }
@@ -3,11 +3,12 @@ import { required } from '../../validation';
3
3
  import { UnitOfMeasurement } from '../enums';
4
4
 
5
5
  export class Dimension extends Struct {
6
- @required() readonly length: number = this.state.length;
7
- readonly lengthUOM: UnitOfMeasurement = UnitOfMeasurement.byId(this.state.lengthUOM, UnitOfMeasurement.MM);
8
- @required() readonly width: number = this.state.width;
9
- readonly widthUOM: UnitOfMeasurement = UnitOfMeasurement.byId(this.state.widthUOM, UnitOfMeasurement.MM);
10
- @required() readonly height: number = this.state.height;
11
- readonly heightUOM: UnitOfMeasurement = UnitOfMeasurement.byId(this.state.heightUOM, UnitOfMeasurement.MM);
12
-
13
- }
6
+ @required() readonly value: number = this.state.value;
7
+ readonly uom: UnitOfMeasurement = UnitOfMeasurement.byId(this.state.uom, UnitOfMeasurement.MM);
8
+
9
+ static with = (value: number, uom: UnitOfMeasurement = UnitOfMeasurement.MM) => new Dimension({ value, uom });
10
+
11
+ sizeInMM = (): number => this.value * this.uom.mmMultiplier;
12
+
13
+ gte = (dim: Dimension): boolean => this.sizeInMM() >= dim.sizeInMM();
14
+ }
@@ -4,5 +4,5 @@ import { Struct } from '../Struct';
4
4
 
5
5
  export class Weight extends Struct {
6
6
  @required() readonly value: number = this.state.value;
7
- readonly UOW: UnitOfWeight = UnitOfWeight.byId(this.state.UOW, UnitOfWeight.G);
7
+ readonly uow: UnitOfWeight = UnitOfWeight.byId(this.state.uow, UnitOfWeight.G);
8
8
  }
@@ -1,4 +1,5 @@
1
1
  export * from './Address';
2
+ export * from './Box';
2
3
  export * from './Dimension';
3
4
  export * from './Money';
4
5
  export * from './Weight';
@@ -1,6 +1,7 @@
1
- import { isDefined, tryTo, Value } from '../../types';
1
+ import { isA, isArray, isDefined, isString, tryTo, Value } from '../../types';
2
2
  import moment, { Moment } from 'moment';
3
3
  import { ifNotEmpty } from '../../utils';
4
+ import 'moment/min/locales';
4
5
 
5
6
  export type DateTimeUnit =
6
7
  'year' | 'years' | 'y' |
@@ -27,8 +28,20 @@ export class DateTime extends Value<string | undefined> {
27
28
  return isDefined(this.value) && this.utc.isValid();
28
29
  }
29
30
 
31
+ /**
32
+ * @deprecated Deprecated in favor for DateTime.from as that also accepts locales and another DateTime
33
+ */
30
34
  get fromNow(): string {
31
- return this.value ? this.utc.fromNow() : '';
35
+ return this.from();
36
+ }
37
+
38
+ from(date?: DateTime): string;
39
+ from(locales?: string | string[]): string;
40
+ from(date?: DateTime, locales?: string | string[]): string;
41
+ from(param?: string | string[] | DateTime, other?: string | string[]): string {
42
+ const date: DateTime | undefined = isA<DateTime>(param) ? param : undefined;
43
+ const locales: string | string[] = isString(param) || isArray<string>(param) ? param : (isString(other) || isArray<string>(other) ? other : 'en');
44
+ return isDefined(date) ? this.utc.locale(locales).from(date.utc) : this.utc.locale(locales).fromNow();
32
45
  }
33
46
 
34
47
  protected get utc(): Moment {
package/src/types/Enum.ts CHANGED
@@ -42,6 +42,8 @@ export abstract class Enum implements Validatable {
42
42
  return this.id === (isEnum(other) ? other.id : other);
43
43
  }
44
44
 
45
+ isIn<E extends Enum>(...items: E[]): boolean { return items.some(i => i.equals(this)); }
46
+
45
47
  toJSON(): JsonValue {
46
48
  return this.id;
47
49
  }