@schorts/shared-kernel 2.5.6 → 2.5.8

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.
Files changed (31) hide show
  1. package/CHANGELOG +12 -0
  2. package/dist/cjs/value-objects/array-value.js +2 -2
  3. package/dist/cjs/value-objects/float-valuet.js +0 -1
  4. package/dist/cjs/value-objects/float-valuet.js.map +1 -1
  5. package/dist/cjs/value-objects/index.js +3 -1
  6. package/dist/cjs/value-objects/index.js.map +1 -1
  7. package/dist/cjs/value-objects/integer-value.js +0 -1
  8. package/dist/cjs/value-objects/integer-value.js.map +1 -1
  9. package/dist/cjs/value-objects/object-value.js +67 -0
  10. package/dist/cjs/value-objects/object-value.js.map +1 -0
  11. package/dist/esm/value-objects/array-value.js +2 -2
  12. package/dist/esm/value-objects/float-valuet.js +0 -1
  13. package/dist/esm/value-objects/float-valuet.js.map +1 -1
  14. package/dist/esm/value-objects/index.js +3 -1
  15. package/dist/esm/value-objects/index.js.map +1 -1
  16. package/dist/esm/value-objects/integer-value.js +0 -1
  17. package/dist/esm/value-objects/integer-value.js.map +1 -1
  18. package/dist/esm/value-objects/object-value.js +67 -0
  19. package/dist/esm/value-objects/object-value.js.map +1 -0
  20. package/dist/types/value-objects/float-valuet.d.ts.map +1 -1
  21. package/dist/types/value-objects/index.d.ts +1 -0
  22. package/dist/types/value-objects/index.d.ts.map +1 -1
  23. package/dist/types/value-objects/integer-value.d.ts.map +1 -1
  24. package/dist/types/value-objects/object-value.d.ts +34 -0
  25. package/dist/types/value-objects/object-value.d.ts.map +1 -0
  26. package/package.json +1 -1
  27. package/src/value-objects/array-value.ts +2 -2
  28. package/src/value-objects/float-valuet.ts +0 -2
  29. package/src/value-objects/index.ts +1 -0
  30. package/src/value-objects/integer-value.ts +0 -2
  31. package/src/value-objects/object-value.ts +84 -0
package/CHANGELOG CHANGED
@@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [2.5.8] - 2025-10-14
9
+
10
+ ### Fixed
11
+
12
+ - Remove `Object.freeze` from `IntegerValue` and `FloatValue` to prevent errors when assigning the `attributeName` on subclasses.
13
+
14
+ ## [2.5.7] - 2025-10-13
15
+
16
+ ### Added
17
+
18
+ - Added `ObjectValue`.
19
+
8
20
  ## [2.5.6] - 2025-10-13
9
21
 
10
22
  ### Added
@@ -56,10 +56,10 @@ class ArrayValue {
56
56
  if (Array.isArray(obj)) {
57
57
  obj.forEach(item => this.deepFreeze(item));
58
58
  }
59
- else if (obj && typeof obj === 'object') {
59
+ else if (obj && typeof obj === "object") {
60
60
  Object.getOwnPropertyNames(obj).forEach(prop => {
61
61
  const value = obj[prop];
62
- if (value && typeof value === 'object') {
62
+ if (value && typeof value === "object") {
63
63
  this.deepFreeze(value);
64
64
  }
65
65
  });
@@ -12,7 +12,6 @@ class FloatValue {
12
12
  this.min = min;
13
13
  this.max = max;
14
14
  this.value = this.transform(value);
15
- Object.freeze(this);
16
15
  }
17
16
  get isValid() {
18
17
  return !isNaN(this.value)
@@ -1 +1 @@
1
- {"version":3,"file":"float-valuet.js","sourceRoot":"","sources":["../../../src/value-objects/float-valuet.ts"],"names":[],"mappings":";;;AAEA,MAAsB,UAAU;IACrB,SAAS,GAAG,OAAO,CAAC;IACpB,KAAK,CAAS;IACd,GAAG,CAAqB;IACxB,GAAG,CAAqB;IACxB,QAAQ,CAAqB;IAEtC,YAAY,KAAa,EAAE,QAAiB,EAAE,GAAY,EAAE,GAAY;QACtE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAEnC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;eACpB,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;eACxD,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,WAAoB;QACzB,IAAI,CAAC,CAAC,WAAW,YAAY,UAAU,CAAC;YAAE,OAAO,KAAK,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAExD,OAAO,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC;IAC1C,CAAC;IAIO,SAAS,CAAC,KAAa;QAC7B,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAE9C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE3C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;IAC7C,CAAC;CACF;AAtCD,gCAsCC"}
1
+ {"version":3,"file":"float-valuet.js","sourceRoot":"","sources":["../../../src/value-objects/float-valuet.ts"],"names":[],"mappings":";;;AAEA,MAAsB,UAAU;IACrB,SAAS,GAAG,OAAO,CAAC;IACpB,KAAK,CAAS;IACd,GAAG,CAAqB;IACxB,GAAG,CAAqB;IACxB,QAAQ,CAAqB;IAEtC,YAAY,KAAa,EAAE,QAAiB,EAAE,GAAY,EAAE,GAAY;QACtE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;eACpB,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;eACxD,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,WAAoB;QACzB,IAAI,CAAC,CAAC,WAAW,YAAY,UAAU,CAAC;YAAE,OAAO,KAAK,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAExD,OAAO,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC;IAC1C,CAAC;IAIO,SAAS,CAAC,KAAa;QAC7B,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAE9C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE3C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;IAC7C,CAAC;CACF;AApCD,gCAoCC"}
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.ArrayValue = exports.FloatValue = exports.DateValue = exports.BooleanValue = exports.CoordinatesValue = exports.IntegerValue = exports.SlugValue = exports.PhoneValue = exports.EmailValue = exports.EnumValue = exports.StringValue = exports.UUIDValue = void 0;
17
+ exports.ObjectValue = exports.ArrayValue = exports.FloatValue = exports.DateValue = exports.BooleanValue = exports.CoordinatesValue = exports.IntegerValue = exports.SlugValue = exports.PhoneValue = exports.EmailValue = exports.EnumValue = exports.StringValue = exports.UUIDValue = void 0;
18
18
  var uuid_value_1 = require("./uuid-value");
19
19
  Object.defineProperty(exports, "UUIDValue", { enumerable: true, get: function () { return uuid_value_1.UUIDValue; } });
20
20
  var string_value_1 = require("./string-value");
@@ -39,5 +39,7 @@ var float_valuet_1 = require("./float-valuet");
39
39
  Object.defineProperty(exports, "FloatValue", { enumerable: true, get: function () { return float_valuet_1.FloatValue; } });
40
40
  var array_value_1 = require("./array-value");
41
41
  Object.defineProperty(exports, "ArrayValue", { enumerable: true, get: function () { return array_value_1.ArrayValue; } });
42
+ var object_value_1 = require("./object-value");
43
+ Object.defineProperty(exports, "ObjectValue", { enumerable: true, get: function () { return object_value_1.ObjectValue; } });
42
44
  __exportStar(require("./exceptions"), exports);
43
45
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/value-objects/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAEA,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAClB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAClB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAClB,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA;AACzB,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAClB,+CAA4C;AAAnC,0GAAA,UAAU,OAAA;AACnB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AAEnB,+CAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/value-objects/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAEA,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAClB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAClB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAClB,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA;AACzB,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAClB,+CAA4C;AAAnC,0GAAA,UAAU,OAAA;AACnB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AAEpB,+CAA6B"}
@@ -10,7 +10,6 @@ class IntegerValue {
10
10
  this.min = min;
11
11
  this.max = max;
12
12
  this.value = value;
13
- Object.freeze(this);
14
13
  }
15
14
  get isValid() {
16
15
  return (this.min !== undefined ? this.value >= this.min : true)
@@ -1 +1 @@
1
- {"version":3,"file":"integer-value.js","sourceRoot":"","sources":["../../../src/value-objects/integer-value.ts"],"names":[],"mappings":";;;AAEA,MAAsB,YAAY;IACvB,SAAS,GAAG,SAAS,CAAC;IACtB,GAAG,CAAqB;IACxB,GAAG,CAAqB;IACxB,KAAK,CAAS;IAEvB,YAAY,KAAa,EAAE,GAAY,EAAE,GAAY;QACnD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;eAC1D,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;eACxD,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,WAAoB;QACzB,IAAI,CAAC,CAAC,WAAW,YAAY,YAAY,CAAC;YAAE,OAAO,KAAK,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAExD,OAAO,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC;IAC1C,CAAC;CAGF;AA5BD,oCA4BC"}
1
+ {"version":3,"file":"integer-value.js","sourceRoot":"","sources":["../../../src/value-objects/integer-value.ts"],"names":[],"mappings":";;;AAEA,MAAsB,YAAY;IACvB,SAAS,GAAG,SAAS,CAAC;IACtB,GAAG,CAAqB;IACxB,GAAG,CAAqB;IACxB,KAAK,CAAS;IAEvB,YAAY,KAAa,EAAE,GAAY,EAAE,GAAY;QACnD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;eAC1D,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;eACxD,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,WAAoB;QACzB,IAAI,CAAC,CAAC,WAAW,YAAY,YAAY,CAAC;YAAE,OAAO,KAAK,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAExD,OAAO,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC;IAC1C,CAAC;CAGF;AA1BD,oCA0BC"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ObjectValue = void 0;
4
+ class ObjectValue {
5
+ valueType = "Object";
6
+ value;
7
+ schema;
8
+ constructor(value, schema) {
9
+ this.value = this.deepFreeze(value);
10
+ this.schema = schema;
11
+ }
12
+ get isValid() {
13
+ return this.validateObject(this.value, this.schema);
14
+ }
15
+ equals(valueObject) {
16
+ if (!(valueObject instanceof ObjectValue))
17
+ return false;
18
+ if (!this.isValid || !valueObject.isValid)
19
+ return false;
20
+ return JSON.stringify(this.value) === JSON.stringify(valueObject.value);
21
+ }
22
+ validateObject(obj, schema) {
23
+ return Object.entries(schema).every(([key, rulesOrNested]) => {
24
+ const value = obj[key];
25
+ if (Array.isArray(rulesOrNested)) {
26
+ return rulesOrNested.every(rule => this.validateRule(value, rule));
27
+ }
28
+ if (typeof rulesOrNested === "object" && value !== null && typeof value === "object") {
29
+ return this.validateObject(value, rulesOrNested);
30
+ }
31
+ return true;
32
+ });
33
+ }
34
+ validateRule(value, rule) {
35
+ if ("required" in rule)
36
+ return value !== undefined && value !== null;
37
+ if ("greater_than" in rule)
38
+ return typeof value === "number" && value > rule.greater_than;
39
+ if ("greater_than_or_equal" in rule)
40
+ return typeof value === "number" && value >= rule.greater_than_or_equal;
41
+ if ("less_than" in rule)
42
+ return typeof value === "number" && value < rule.less_than;
43
+ if ("less_than_or_equal" in rule)
44
+ return typeof value === "number" && value <= rule.less_than_or_equal;
45
+ if ("type" in rule)
46
+ return typeof value === rule.type;
47
+ if ("custom" in rule)
48
+ return rule.custom(value);
49
+ return true;
50
+ }
51
+ deepFreeze(obj) {
52
+ if (Array.isArray(obj)) {
53
+ obj.forEach(item => this.deepFreeze(item));
54
+ }
55
+ else if (obj && typeof obj === "object") {
56
+ Object.getOwnPropertyNames(obj).forEach(prop => {
57
+ const value = obj[prop];
58
+ if (value && typeof value === "object") {
59
+ this.deepFreeze(value);
60
+ }
61
+ });
62
+ }
63
+ return Object.freeze(obj);
64
+ }
65
+ }
66
+ exports.ObjectValue = ObjectValue;
67
+ //# sourceMappingURL=object-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-value.js","sourceRoot":"","sources":["../../../src/value-objects/object-value.ts"],"names":[],"mappings":"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"}
@@ -56,10 +56,10 @@ class ArrayValue {
56
56
  if (Array.isArray(obj)) {
57
57
  obj.forEach(item => this.deepFreeze(item));
58
58
  }
59
- else if (obj && typeof obj === 'object') {
59
+ else if (obj && typeof obj === "object") {
60
60
  Object.getOwnPropertyNames(obj).forEach(prop => {
61
61
  const value = obj[prop];
62
- if (value && typeof value === 'object') {
62
+ if (value && typeof value === "object") {
63
63
  this.deepFreeze(value);
64
64
  }
65
65
  });
@@ -12,7 +12,6 @@ class FloatValue {
12
12
  this.min = min;
13
13
  this.max = max;
14
14
  this.value = this.transform(value);
15
- Object.freeze(this);
16
15
  }
17
16
  get isValid() {
18
17
  return !isNaN(this.value)
@@ -1 +1 @@
1
- {"version":3,"file":"float-valuet.js","sourceRoot":"","sources":["../../../src/value-objects/float-valuet.ts"],"names":[],"mappings":";;;AAEA,MAAsB,UAAU;IACrB,SAAS,GAAG,OAAO,CAAC;IACpB,KAAK,CAAS;IACd,GAAG,CAAqB;IACxB,GAAG,CAAqB;IACxB,QAAQ,CAAqB;IAEtC,YAAY,KAAa,EAAE,QAAiB,EAAE,GAAY,EAAE,GAAY;QACtE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAEnC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;eACpB,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;eACxD,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,WAAoB;QACzB,IAAI,CAAC,CAAC,WAAW,YAAY,UAAU,CAAC;YAAE,OAAO,KAAK,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAExD,OAAO,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC;IAC1C,CAAC;IAIO,SAAS,CAAC,KAAa;QAC7B,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAE9C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE3C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;IAC7C,CAAC;CACF;AAtCD,gCAsCC"}
1
+ {"version":3,"file":"float-valuet.js","sourceRoot":"","sources":["../../../src/value-objects/float-valuet.ts"],"names":[],"mappings":";;;AAEA,MAAsB,UAAU;IACrB,SAAS,GAAG,OAAO,CAAC;IACpB,KAAK,CAAS;IACd,GAAG,CAAqB;IACxB,GAAG,CAAqB;IACxB,QAAQ,CAAqB;IAEtC,YAAY,KAAa,EAAE,QAAiB,EAAE,GAAY,EAAE,GAAY;QACtE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;eACpB,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;eACxD,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,WAAoB;QACzB,IAAI,CAAC,CAAC,WAAW,YAAY,UAAU,CAAC;YAAE,OAAO,KAAK,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAExD,OAAO,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC;IAC1C,CAAC;IAIO,SAAS,CAAC,KAAa;QAC7B,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAE9C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE3C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;IAC7C,CAAC;CACF;AApCD,gCAoCC"}
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.ArrayValue = exports.FloatValue = exports.DateValue = exports.BooleanValue = exports.CoordinatesValue = exports.IntegerValue = exports.SlugValue = exports.PhoneValue = exports.EmailValue = exports.EnumValue = exports.StringValue = exports.UUIDValue = void 0;
17
+ exports.ObjectValue = exports.ArrayValue = exports.FloatValue = exports.DateValue = exports.BooleanValue = exports.CoordinatesValue = exports.IntegerValue = exports.SlugValue = exports.PhoneValue = exports.EmailValue = exports.EnumValue = exports.StringValue = exports.UUIDValue = void 0;
18
18
  var uuid_value_1 = require("./uuid-value");
19
19
  Object.defineProperty(exports, "UUIDValue", { enumerable: true, get: function () { return uuid_value_1.UUIDValue; } });
20
20
  var string_value_1 = require("./string-value");
@@ -39,5 +39,7 @@ var float_valuet_1 = require("./float-valuet");
39
39
  Object.defineProperty(exports, "FloatValue", { enumerable: true, get: function () { return float_valuet_1.FloatValue; } });
40
40
  var array_value_1 = require("./array-value");
41
41
  Object.defineProperty(exports, "ArrayValue", { enumerable: true, get: function () { return array_value_1.ArrayValue; } });
42
+ var object_value_1 = require("./object-value");
43
+ Object.defineProperty(exports, "ObjectValue", { enumerable: true, get: function () { return object_value_1.ObjectValue; } });
42
44
  __exportStar(require("./exceptions"), exports);
43
45
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/value-objects/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAEA,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAClB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAClB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAClB,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA;AACzB,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAClB,+CAA4C;AAAnC,0GAAA,UAAU,OAAA;AACnB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AAEnB,+CAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/value-objects/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAEA,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAClB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAClB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAClB,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA;AACzB,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAClB,+CAA4C;AAAnC,0GAAA,UAAU,OAAA;AACnB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AAEpB,+CAA6B"}
@@ -10,7 +10,6 @@ class IntegerValue {
10
10
  this.min = min;
11
11
  this.max = max;
12
12
  this.value = value;
13
- Object.freeze(this);
14
13
  }
15
14
  get isValid() {
16
15
  return (this.min !== undefined ? this.value >= this.min : true)
@@ -1 +1 @@
1
- {"version":3,"file":"integer-value.js","sourceRoot":"","sources":["../../../src/value-objects/integer-value.ts"],"names":[],"mappings":";;;AAEA,MAAsB,YAAY;IACvB,SAAS,GAAG,SAAS,CAAC;IACtB,GAAG,CAAqB;IACxB,GAAG,CAAqB;IACxB,KAAK,CAAS;IAEvB,YAAY,KAAa,EAAE,GAAY,EAAE,GAAY;QACnD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;eAC1D,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;eACxD,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,WAAoB;QACzB,IAAI,CAAC,CAAC,WAAW,YAAY,YAAY,CAAC;YAAE,OAAO,KAAK,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAExD,OAAO,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC;IAC1C,CAAC;CAGF;AA5BD,oCA4BC"}
1
+ {"version":3,"file":"integer-value.js","sourceRoot":"","sources":["../../../src/value-objects/integer-value.ts"],"names":[],"mappings":";;;AAEA,MAAsB,YAAY;IACvB,SAAS,GAAG,SAAS,CAAC;IACtB,GAAG,CAAqB;IACxB,GAAG,CAAqB;IACxB,KAAK,CAAS;IAEvB,YAAY,KAAa,EAAE,GAAY,EAAE,GAAY;QACnD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;eAC1D,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;eACxD,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,WAAoB;QACzB,IAAI,CAAC,CAAC,WAAW,YAAY,YAAY,CAAC;YAAE,OAAO,KAAK,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAExD,OAAO,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC;IAC1C,CAAC;CAGF;AA1BD,oCA0BC"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ObjectValue = void 0;
4
+ class ObjectValue {
5
+ valueType = "Object";
6
+ value;
7
+ schema;
8
+ constructor(value, schema) {
9
+ this.value = this.deepFreeze(value);
10
+ this.schema = schema;
11
+ }
12
+ get isValid() {
13
+ return this.validateObject(this.value, this.schema);
14
+ }
15
+ equals(valueObject) {
16
+ if (!(valueObject instanceof ObjectValue))
17
+ return false;
18
+ if (!this.isValid || !valueObject.isValid)
19
+ return false;
20
+ return JSON.stringify(this.value) === JSON.stringify(valueObject.value);
21
+ }
22
+ validateObject(obj, schema) {
23
+ return Object.entries(schema).every(([key, rulesOrNested]) => {
24
+ const value = obj[key];
25
+ if (Array.isArray(rulesOrNested)) {
26
+ return rulesOrNested.every(rule => this.validateRule(value, rule));
27
+ }
28
+ if (typeof rulesOrNested === "object" && value !== null && typeof value === "object") {
29
+ return this.validateObject(value, rulesOrNested);
30
+ }
31
+ return true;
32
+ });
33
+ }
34
+ validateRule(value, rule) {
35
+ if ("required" in rule)
36
+ return value !== undefined && value !== null;
37
+ if ("greater_than" in rule)
38
+ return typeof value === "number" && value > rule.greater_than;
39
+ if ("greater_than_or_equal" in rule)
40
+ return typeof value === "number" && value >= rule.greater_than_or_equal;
41
+ if ("less_than" in rule)
42
+ return typeof value === "number" && value < rule.less_than;
43
+ if ("less_than_or_equal" in rule)
44
+ return typeof value === "number" && value <= rule.less_than_or_equal;
45
+ if ("type" in rule)
46
+ return typeof value === rule.type;
47
+ if ("custom" in rule)
48
+ return rule.custom(value);
49
+ return true;
50
+ }
51
+ deepFreeze(obj) {
52
+ if (Array.isArray(obj)) {
53
+ obj.forEach(item => this.deepFreeze(item));
54
+ }
55
+ else if (obj && typeof obj === "object") {
56
+ Object.getOwnPropertyNames(obj).forEach(prop => {
57
+ const value = obj[prop];
58
+ if (value && typeof value === "object") {
59
+ this.deepFreeze(value);
60
+ }
61
+ });
62
+ }
63
+ return Object.freeze(obj);
64
+ }
65
+ }
66
+ exports.ObjectValue = ObjectValue;
67
+ //# sourceMappingURL=object-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-value.js","sourceRoot":"","sources":["../../../src/value-objects/object-value.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"float-valuet.d.ts","sourceRoot":"","sources":["../../../src/value-objects/float-valuet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,8BAAsB,UAAW,YAAW,WAAW;IACrD,QAAQ,CAAC,SAAS,WAAW;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;gBAE1B,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM;IASxE,IAAI,OAAO,IAAI,OAAO,CAIrB;IAED,MAAM,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO;IAOrC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAExC,OAAO,CAAC,SAAS;CAOlB"}
1
+ {"version":3,"file":"float-valuet.d.ts","sourceRoot":"","sources":["../../../src/value-objects/float-valuet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,8BAAsB,UAAW,YAAW,WAAW;IACrD,QAAQ,CAAC,SAAS,WAAW;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;gBAE1B,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM;IAOxE,IAAI,OAAO,IAAI,OAAO,CAIrB;IAED,MAAM,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO;IAOrC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAExC,OAAO,CAAC,SAAS;CAOlB"}
@@ -11,5 +11,6 @@ export { BooleanValue } from "./boolean-value";
11
11
  export { DateValue } from "./date-value";
12
12
  export { FloatValue } from "./float-valuet";
13
13
  export { ArrayValue } from "./array-value";
14
+ export { ObjectValue } from "./object-value";
14
15
  export * from "./exceptions";
15
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/value-objects/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/value-objects/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,cAAc,cAAc,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"integer-value.d.ts","sourceRoot":"","sources":["../../../src/value-objects/integer-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAEjC,8BAAsB,YAAa,YAAW,WAAW;IACvD,QAAQ,CAAC,SAAS,aAAa;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAEX,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM;IAQrD,IAAI,OAAO,IAAI,OAAO,CAIrB;IAED,MAAM,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO;IAOrC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CACzC"}
1
+ {"version":3,"file":"integer-value.d.ts","sourceRoot":"","sources":["../../../src/value-objects/integer-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAEjC,8BAAsB,YAAa,YAAW,WAAW;IACvD,QAAQ,CAAC,SAAS,aAAa;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAEX,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM;IAMrD,IAAI,OAAO,IAAI,OAAO,CAIrB;IAED,MAAM,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO;IAOrC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CACzC"}
@@ -0,0 +1,34 @@
1
+ import { ValueObject } from "./value-object";
2
+ type Primitive = string | number | boolean | null | undefined;
3
+ export type ValidationRule<Type> = {
4
+ required: true;
5
+ } | {
6
+ greater_than: number;
7
+ } | {
8
+ greater_than_or_equal: number;
9
+ } | {
10
+ less_than: number;
11
+ } | {
12
+ less_than_or_equal: number;
13
+ } | {
14
+ type: "string" | "number" | "boolean";
15
+ } | {
16
+ custom: (value: Type) => boolean;
17
+ };
18
+ export type ObjectSchema<Type> = {
19
+ [Key in keyof Type]?: Type[Key] extends Primitive ? ValidationRule<Type[Key]>[] : ObjectSchema<Type[Key]>;
20
+ };
21
+ export declare abstract class ObjectValue<Type = any> implements ValueObject {
22
+ readonly valueType = "Object";
23
+ readonly value: Type;
24
+ readonly schema: ObjectSchema<Type>;
25
+ abstract readonly attributeName: string;
26
+ constructor(value: Type, schema: ObjectSchema<Type>);
27
+ get isValid(): boolean;
28
+ equals(valueObject: unknown): boolean;
29
+ private validateObject;
30
+ private validateRule;
31
+ private deepFreeze;
32
+ }
33
+ export {};
34
+ //# sourceMappingURL=object-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-value.d.ts","sourceRoot":"","sources":["../../../src/value-objects/object-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAE9D,MAAM,MAAM,cAAc,CAAC,IAAI,IAC3B;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,GAClB;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,GACxB;IAAE,qBAAqB,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GACrB;IAAE,kBAAkB,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;CAAE,GACzC;IAAE,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,OAAO,CAAA;CAAE,CAAC;AAEzC,MAAM,MAAM,YAAY,CAAC,IAAI,IAAI;KAC9B,GAAG,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,SAAS,GAC7C,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAC3B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;CAC5B,CAAC;AAEF,8BAAsB,WAAW,CAAC,IAAI,GAAG,GAAG,CAAE,YAAW,WAAW;IAClE,QAAQ,CAAC,SAAS,YAAY;IAC9B,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;gBAE5B,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC;IAKnD,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,MAAM,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO;IAOrC,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,UAAU;CAcnB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schorts/shared-kernel",
3
- "version": "2.5.6",
3
+ "version": "2.5.8",
4
4
  "description": "A modular, type-safe foundation for building expressive, maintainable applications. This package provides core abstractions for domain modeling, HTTP integration, authentication, state management, and more — designed to be framework-agnostic and highly extensible.",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",
@@ -78,10 +78,10 @@ export abstract class ArrayValue<Type = any> implements ValueObject {
78
78
  private deepFreeze<Type>(obj: Type): Type {
79
79
  if (Array.isArray(obj)) {
80
80
  obj.forEach(item => this.deepFreeze(item));
81
- } else if (obj && typeof obj === 'object') {
81
+ } else if (obj && typeof obj === "object") {
82
82
  Object.getOwnPropertyNames(obj).forEach(prop => {
83
83
  const value = (obj as any)[prop];
84
- if (value && typeof value === 'object') {
84
+ if (value && typeof value === "object") {
85
85
  this.deepFreeze(value);
86
86
  }
87
87
  });
@@ -12,8 +12,6 @@ export abstract class FloatValue implements ValueObject {
12
12
  this.min = min;
13
13
  this.max = max;
14
14
  this.value = this.transform(value);
15
-
16
- Object.freeze(this);
17
15
  }
18
16
 
19
17
  get isValid(): boolean {
@@ -12,5 +12,6 @@ export { BooleanValue } from "./boolean-value";
12
12
  export { DateValue } from "./date-value";
13
13
  export { FloatValue } from "./float-valuet";
14
14
  export { ArrayValue } from "./array-value";
15
+ export { ObjectValue } from "./object-value";
15
16
 
16
17
  export * from "./exceptions";
@@ -10,8 +10,6 @@ export abstract class IntegerValue implements ValueObject {
10
10
  this.min = min;
11
11
  this.max = max;
12
12
  this.value = value;
13
-
14
- Object.freeze(this);
15
13
  }
16
14
 
17
15
  get isValid(): boolean {
@@ -0,0 +1,84 @@
1
+ import { ValueObject } from "./value-object";
2
+
3
+ type Primitive = string | number | boolean | null | undefined;
4
+
5
+ export type ValidationRule<Type> =
6
+ | { required: true }
7
+ | { greater_than: number }
8
+ | { greater_than_or_equal: number }
9
+ | { less_than: number }
10
+ | { less_than_or_equal: number }
11
+ | { type: "string" | "number" | "boolean" }
12
+ | { custom: (value: Type) => boolean };
13
+
14
+ export type ObjectSchema<Type> = {
15
+ [Key in keyof Type]?: Type[Key] extends Primitive
16
+ ? ValidationRule<Type[Key]>[]
17
+ : ObjectSchema<Type[Key]>;
18
+ };
19
+
20
+ export abstract class ObjectValue<Type = any> implements ValueObject {
21
+ readonly valueType = "Object";
22
+ readonly value: Type;
23
+ readonly schema: ObjectSchema<Type>;
24
+ abstract readonly attributeName: string;
25
+
26
+ constructor(value: Type, schema: ObjectSchema<Type>) {
27
+ this.value = this.deepFreeze(value);
28
+ this.schema = schema;
29
+ }
30
+
31
+ get isValid(): boolean {
32
+ return this.validateObject(this.value, this.schema);
33
+ }
34
+
35
+ equals(valueObject: unknown): boolean {
36
+ if (!(valueObject instanceof ObjectValue)) return false;
37
+ if (!this.isValid || !valueObject.isValid) return false;
38
+
39
+ return JSON.stringify(this.value) === JSON.stringify(valueObject.value);
40
+ }
41
+
42
+ private validateObject(obj: any, schema: ObjectSchema<any>): boolean {
43
+ return Object.entries(schema).every(([key, rulesOrNested]) => {
44
+ const value = obj[key];
45
+
46
+ if (Array.isArray(rulesOrNested)) {
47
+ return rulesOrNested.every(rule => this.validateRule(value, rule));
48
+ }
49
+
50
+ if (typeof rulesOrNested === "object" && value !== null && typeof value === "object") {
51
+ return this.validateObject(value, rulesOrNested as ObjectSchema<any>);
52
+ }
53
+
54
+ return true;
55
+ });
56
+ }
57
+
58
+ private validateRule(value: any, rule: ValidationRule<any>): boolean {
59
+ if ("required" in rule) return value !== undefined && value !== null;
60
+ if ("greater_than" in rule) return typeof value === "number" && value > rule.greater_than;
61
+ if ("greater_than_or_equal" in rule) return typeof value === "number" && value >= rule.greater_than_or_equal;
62
+ if ("less_than" in rule) return typeof value === "number" && value < rule.less_than;
63
+ if ("less_than_or_equal" in rule) return typeof value === "number" && value <= rule.less_than_or_equal;
64
+ if ("type" in rule) return typeof value === rule.type;
65
+ if ("custom" in rule) return rule.custom(value);
66
+
67
+ return true;
68
+ }
69
+
70
+ private deepFreeze<T>(obj: T): T {
71
+ if (Array.isArray(obj)) {
72
+ obj.forEach(item => this.deepFreeze(item));
73
+ } else if (obj && typeof obj === "object") {
74
+ Object.getOwnPropertyNames(obj).forEach(prop => {
75
+ const value = (obj as any)[prop];
76
+ if (value && typeof value === "object") {
77
+ this.deepFreeze(value);
78
+ }
79
+ });
80
+ }
81
+
82
+ return Object.freeze(obj);
83
+ }
84
+ }