@haskou/value-objects 6.0.0 → 6.1.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.
package/README.md CHANGED
@@ -60,6 +60,22 @@ try {
60
60
  }
61
61
  ```
62
62
 
63
+ ## Nullish construction
64
+
65
+ Automatic `NullObject` creation remains enabled by default for compatibility. Applications that prefer strict construction can disable it globally:
66
+
67
+ ```typescript
68
+ import { StringValueObject, ValueObject } from '@haskou/value-objects';
69
+
70
+ ValueObject.disableNullObjectCreation();
71
+
72
+ new StringValueObject(undefined as never); // throws NullObjectCreationDisabledError
73
+
74
+ ValueObject.enableNullObjectCreation();
75
+ ```
76
+
77
+ The VitePress guide documents the default and strict modes in detail.
78
+
63
79
  ## Available categories
64
80
 
65
81
  | Category | Examples |
@@ -0,0 +1,5 @@
1
+ import { DomainError } from './DomainError';
2
+ export declare class NullObjectCreationDisabledError extends DomainError {
3
+ constructor(valueObjectName: string);
4
+ }
5
+ //# sourceMappingURL=NullObjectCreationDisabledError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NullObjectCreationDisabledError.d.ts","sourceRoot":"","sources":["../../src/errors/NullObjectCreationDisabledError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,qBAAa,+BAAgC,SAAQ,WAAW;gBAClD,eAAe,EAAE,MAAM;CAMpC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NullObjectCreationDisabledError = void 0;
4
+ const DomainError_1 = require("./DomainError");
5
+ class NullObjectCreationDisabledError extends DomainError_1.DomainError {
6
+ constructor(valueObjectName) {
7
+ super(`[NullObjectCreationDisabledError]: ${valueObjectName} received null or undefined while automatic NullObject creation is disabled`);
8
+ Object.setPrototypeOf(this, NullObjectCreationDisabledError.prototype);
9
+ }
10
+ }
11
+ exports.NullObjectCreationDisabledError = NullObjectCreationDisabledError;
12
+ //# sourceMappingURL=NullObjectCreationDisabledError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NullObjectCreationDisabledError.js","sourceRoot":"","sources":["../../src/errors/NullObjectCreationDisabledError.ts"],"names":[],"mappings":";;;AAAA,+CAA4C;AAE5C,MAAa,+BAAgC,SAAQ,yBAAW;IAC9D,YAAY,eAAuB;QACjC,KAAK,CACH,sCAAsC,eAAe,6EAA6E,CACnI,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,+BAA+B,CAAC,SAAS,CAAC,CAAC;IACzE,CAAC;CACF;AAPD,0EAOC"}
@@ -18,6 +18,7 @@ export * from './InvalidPositiveNumberError';
18
18
  export * from './InvalidStringLengthError';
19
19
  export * from './InvalidTimestampIntervalError';
20
20
  export * from './InvalidLengthError';
21
+ export * from './NullObjectCreationDisabledError';
21
22
  export * from './NullObjectError';
22
23
  export * from './ValueNotInEnumError';
23
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC"}
@@ -21,6 +21,7 @@ tslib_1.__exportStar(require("./InvalidPositiveNumberError"), exports);
21
21
  tslib_1.__exportStar(require("./InvalidStringLengthError"), exports);
22
22
  tslib_1.__exportStar(require("./InvalidTimestampIntervalError"), exports);
23
23
  tslib_1.__exportStar(require("./InvalidLengthError"), exports);
24
+ tslib_1.__exportStar(require("./NullObjectCreationDisabledError"), exports);
24
25
  tslib_1.__exportStar(require("./NullObjectError"), exports);
25
26
  tslib_1.__exportStar(require("./ValueNotInEnumError"), exports);
26
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":";;;AAAA,sDAA4B;AAC5B,wDAA8B;AAC9B,8DAAoC;AACpC,4DAAkC;AAClC,kEAAwC;AACxC,6DAAmC;AACnC,8DAAoC;AACpC,+DAAqC;AACrC,6DAAmC;AACnC,gEAAsC;AACtC,iEAAuC;AACvC,kEAAwC;AACxC,8DAAoC;AACpC,gEAAsC;AACtC,+DAAqC;AACrC,iEAAuC;AACvC,uEAA6C;AAC7C,qEAA2C;AAC3C,0EAAgD;AAChD,+DAAqC;AACrC,4DAAkC;AAClC,gEAAsC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":";;;AAAA,sDAA4B;AAC5B,wDAA8B;AAC9B,8DAAoC;AACpC,4DAAkC;AAClC,kEAAwC;AACxC,6DAAmC;AACnC,8DAAoC;AACpC,+DAAqC;AACrC,6DAAmC;AACnC,gEAAsC;AACtC,iEAAuC;AACvC,kEAAwC;AACxC,8DAAoC;AACpC,gEAAsC;AACtC,+DAAqC;AACrC,iEAAuC;AACvC,uEAA6C;AAC7C,qEAA2C;AAC3C,0EAAgD;AAChD,+DAAqC;AACrC,4EAAkD;AAClD,4DAAkC;AAClC,gEAAsC"}
@@ -1,6 +1,9 @@
1
1
  import { Primitive, Nullish } from '../types';
2
2
  export declare abstract class ValueObject<T extends Primitive = Primitive> {
3
+ private static nullObjectCreationEnabled;
3
4
  protected readonly value: T;
5
+ static disableNullObjectCreation(): void;
6
+ static enableNullObjectCreation(): void;
4
7
  constructor(value: T | Nullish);
5
8
  private isNullish;
6
9
  protected clone(value: T): this;
@@ -1 +1 @@
1
- {"version":3,"file":"ValueObject.d.ts","sourceRoot":"","sources":["../../src/value-objects/ValueObject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAG9C,8BAAsB,WAAW,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAC/D,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAG,CAAC,CAAC;gBAEjB,KAAK,EAAE,CAAC,GAAG,OAAO;IAO9B,OAAO,CAAC,SAAS;IAIjB,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAMxB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAMjC,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAQhC,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAInC,OAAO,IAAI,CAAC;IAIZ,QAAQ,IAAI,MAAM;CAG1B"}
1
+ {"version":3,"file":"ValueObject.d.ts","sourceRoot":"","sources":["../../src/value-objects/ValueObject.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAG9C,8BAAsB,WAAW,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAC/D,OAAO,CAAC,MAAM,CAAC,yBAAyB,CAAQ;IAEhD,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAG,CAAC,CAAC;WAEf,yBAAyB,IAAI,IAAI;WAIjC,wBAAwB,IAAI,IAAI;gBAIlC,KAAK,EAAE,CAAC,GAAG,OAAO;IAW9B,OAAO,CAAC,SAAS;IAIjB,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAMxB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAMjC,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAQhC,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAInC,OAAO,IAAI,CAAC;IAIZ,QAAQ,IAAI,MAAM;CAG1B"}
@@ -1,11 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ValueObject = void 0;
4
+ const errors_1 = require("../errors");
4
5
  const NullObject_1 = require("./NullObject");
5
6
  class ValueObject {
7
+ static nullObjectCreationEnabled = true;
6
8
  value;
9
+ static disableNullObjectCreation() {
10
+ ValueObject.nullObjectCreationEnabled = false;
11
+ }
12
+ static enableNullObjectCreation() {
13
+ ValueObject.nullObjectCreationEnabled = true;
14
+ }
7
15
  constructor(value) {
8
16
  if (this.isNullish(value)) {
17
+ if (ValueObject.nullObjectCreationEnabled === false) {
18
+ throw new errors_1.NullObjectCreationDisabledError(new.target.name);
19
+ }
9
20
  return NullObject_1.NullObject.new(new.target);
10
21
  }
11
22
  this.value = value;
@@ -1 +1 @@
1
- {"version":3,"file":"ValueObject.js","sourceRoot":"","sources":["../../src/value-objects/ValueObject.ts"],"names":[],"mappings":";;;AACA,6CAA0C;AAE1C,MAAsB,WAAW;IACZ,KAAK,CAAK;IAE7B,YAAY,KAAkB;QAC5B,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,uBAAU,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEO,SAAS,CAAC,KAAkB;QAClC,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;IAC/C,CAAC;IAES,KAAK,CAAC,KAAQ;QACtB,OAAO,IAAK,IAAI,CAAC,WAA8C,CAC7D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CACnC,CAAC;IACZ,CAAC;IAEM,QAAQ,CAAC,KAAc;QAC5B,MAAM,UAAU,GAAG,KAAK,YAAY,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAE1E,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC;IACnC,CAAC;IAEM,OAAO,CAAC,KAAc;QAC3B,OAAO,CACL,KAAK,YAAY,WAAW;YAC5B,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW;YACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CACrB,CAAC;IACJ,CAAC;IAEM,UAAU,CAAC,KAAc;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;IACvC,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEM,QAAQ;QACb,OAAO,IAAI,CAAC,KAAM,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;CACF;AA7CD,kCA6CC"}
1
+ {"version":3,"file":"ValueObject.js","sourceRoot":"","sources":["../../src/value-objects/ValueObject.ts"],"names":[],"mappings":";;;AAAA,sCAA4D;AAE5D,6CAA0C;AAE1C,MAAsB,WAAW;IACvB,MAAM,CAAC,yBAAyB,GAAG,IAAI,CAAC;IAE7B,KAAK,CAAK;IAEtB,MAAM,CAAC,yBAAyB;QACrC,WAAW,CAAC,yBAAyB,GAAG,KAAK,CAAC;IAChD,CAAC;IAEM,MAAM,CAAC,wBAAwB;QACpC,WAAW,CAAC,yBAAyB,GAAG,IAAI,CAAC;IAC/C,CAAC;IAED,YAAY,KAAkB;QAC5B,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,WAAW,CAAC,yBAAyB,KAAK,KAAK,EAAE,CAAC;gBACpD,MAAM,IAAI,wCAA+B,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7D,CAAC;YAED,OAAO,uBAAU,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEO,SAAS,CAAC,KAAkB;QAClC,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;IAC/C,CAAC;IAES,KAAK,CAAC,KAAQ;QACtB,OAAO,IAAK,IAAI,CAAC,WAA8C,CAC7D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CACnC,CAAC;IACZ,CAAC;IAEM,QAAQ,CAAC,KAAc;QAC5B,MAAM,UAAU,GAAG,KAAK,YAAY,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAE1E,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC;IACnC,CAAC;IAEM,OAAO,CAAC,KAAc;QAC3B,OAAO,CACL,KAAK,YAAY,WAAW;YAC5B,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW;YACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CACrB,CAAC;IACJ,CAAC;IAEM,UAAU,CAAC,KAAc;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;IACvC,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEM,QAAQ;QACb,OAAO,IAAI,CAAC,KAAM,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;;AA1DH,kCA2DC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haskou/value-objects",
3
- "version": "6.0.0",
3
+ "version": "6.1.1",
4
4
  "description": "TypeScript value objects for validated, immutable primitive values and small domain-safe data structures.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",