@thisisagile/easy 8.14.0 → 8.15.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.
@@ -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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thisisagile/easy",
3
- "version": "8.14.0",
3
+ "version": "8.15.0",
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.14.0",
34
+ "@thisisagile/easy-test": "8.15.0",
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';