@haskou/value-objects 6.1.2 → 7.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.
- package/README.md +4 -0
- package/dist/index.cjs +1244 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +538 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +1 -0
- package/dist/index.mjs +2 -0
- package/package.json +17 -11
- package/dist/errors/BaseError.d.ts +0 -8
- package/dist/errors/BaseError.d.ts.map +0 -1
- package/dist/errors/BaseError.js +0 -22
- package/dist/errors/BaseError.js.map +0 -1
- package/dist/errors/DomainError.d.ts +0 -7
- package/dist/errors/DomainError.d.ts.map +0 -1
- package/dist/errors/DomainError.js +0 -15
- package/dist/errors/DomainError.js.map +0 -1
- package/dist/errors/InvalidColorError.d.ts +0 -5
- package/dist/errors/InvalidColorError.d.ts.map +0 -1
- package/dist/errors/InvalidColorError.js +0 -11
- package/dist/errors/InvalidColorError.js.map +0 -1
- package/dist/errors/InvalidDayError.d.ts +0 -5
- package/dist/errors/InvalidDayError.d.ts.map +0 -1
- package/dist/errors/InvalidDayError.js +0 -11
- package/dist/errors/InvalidDayError.js.map +0 -1
- package/dist/errors/InvalidDayFormatError.d.ts +0 -5
- package/dist/errors/InvalidDayFormatError.d.ts.map +0 -1
- package/dist/errors/InvalidDayFormatError.js +0 -11
- package/dist/errors/InvalidDayFormatError.js.map +0 -1
- package/dist/errors/InvalidEmailError.d.ts +0 -5
- package/dist/errors/InvalidEmailError.d.ts.map +0 -1
- package/dist/errors/InvalidEmailError.js +0 -11
- package/dist/errors/InvalidEmailError.js.map +0 -1
- package/dist/errors/InvalidFormatError.d.ts +0 -5
- package/dist/errors/InvalidFormatError.d.ts.map +0 -1
- package/dist/errors/InvalidFormatError.js +0 -11
- package/dist/errors/InvalidFormatError.js.map +0 -1
- package/dist/errors/InvalidHashError.d.ts +0 -5
- package/dist/errors/InvalidHashError.d.ts.map +0 -1
- package/dist/errors/InvalidHashError.js +0 -11
- package/dist/errors/InvalidHashError.js.map +0 -1
- package/dist/errors/InvalidHourError.d.ts +0 -5
- package/dist/errors/InvalidHourError.d.ts.map +0 -1
- package/dist/errors/InvalidHourError.js +0 -11
- package/dist/errors/InvalidHourError.js.map +0 -1
- package/dist/errors/InvalidIntegerError.d.ts +0 -5
- package/dist/errors/InvalidIntegerError.d.ts.map +0 -1
- package/dist/errors/InvalidIntegerError.js +0 -11
- package/dist/errors/InvalidIntegerError.js.map +0 -1
- package/dist/errors/InvalidLatitudeError.d.ts +0 -5
- package/dist/errors/InvalidLatitudeError.d.ts.map +0 -1
- package/dist/errors/InvalidLatitudeError.js +0 -11
- package/dist/errors/InvalidLatitudeError.js.map +0 -1
- package/dist/errors/InvalidLengthError.d.ts +0 -5
- package/dist/errors/InvalidLengthError.d.ts.map +0 -1
- package/dist/errors/InvalidLengthError.js +0 -11
- package/dist/errors/InvalidLengthError.js.map +0 -1
- package/dist/errors/InvalidLongitudeError.d.ts +0 -5
- package/dist/errors/InvalidLongitudeError.d.ts.map +0 -1
- package/dist/errors/InvalidLongitudeError.js +0 -11
- package/dist/errors/InvalidLongitudeError.js.map +0 -1
- package/dist/errors/InvalidMinutesError.d.ts +0 -5
- package/dist/errors/InvalidMinutesError.d.ts.map +0 -1
- package/dist/errors/InvalidMinutesError.js +0 -11
- package/dist/errors/InvalidMinutesError.js.map +0 -1
- package/dist/errors/InvalidNumberError.d.ts +0 -5
- package/dist/errors/InvalidNumberError.d.ts.map +0 -1
- package/dist/errors/InvalidNumberError.js +0 -11
- package/dist/errors/InvalidNumberError.js.map +0 -1
- package/dist/errors/InvalidPasswordError.d.ts +0 -5
- package/dist/errors/InvalidPasswordError.d.ts.map +0 -1
- package/dist/errors/InvalidPasswordError.js +0 -11
- package/dist/errors/InvalidPasswordError.js.map +0 -1
- package/dist/errors/InvalidPositiveNumberError.d.ts +0 -5
- package/dist/errors/InvalidPositiveNumberError.d.ts.map +0 -1
- package/dist/errors/InvalidPositiveNumberError.js +0 -11
- package/dist/errors/InvalidPositiveNumberError.js.map +0 -1
- package/dist/errors/InvalidStringLengthError.d.ts +0 -5
- package/dist/errors/InvalidStringLengthError.d.ts.map +0 -1
- package/dist/errors/InvalidStringLengthError.js +0 -11
- package/dist/errors/InvalidStringLengthError.js.map +0 -1
- package/dist/errors/InvalidTimestampIntervalError.d.ts +0 -6
- package/dist/errors/InvalidTimestampIntervalError.d.ts.map +0 -1
- package/dist/errors/InvalidTimestampIntervalError.js +0 -11
- package/dist/errors/InvalidTimestampIntervalError.js.map +0 -1
- package/dist/errors/NullObjectCreationDisabledError.d.ts +0 -5
- package/dist/errors/NullObjectCreationDisabledError.d.ts.map +0 -1
- package/dist/errors/NullObjectCreationDisabledError.js +0 -12
- package/dist/errors/NullObjectCreationDisabledError.js.map +0 -1
- package/dist/errors/NullObjectError.d.ts +0 -5
- package/dist/errors/NullObjectError.d.ts.map +0 -1
- package/dist/errors/NullObjectError.js +0 -12
- package/dist/errors/NullObjectError.js.map +0 -1
- package/dist/errors/ValueNotInEnumError.d.ts +0 -5
- package/dist/errors/ValueNotInEnumError.d.ts.map +0 -1
- package/dist/errors/ValueNotInEnumError.js +0 -11
- package/dist/errors/ValueNotInEnumError.js.map +0 -1
- package/dist/errors/index.d.ts +0 -24
- package/dist/errors/index.d.ts.map +0 -1
- package/dist/errors/index.js +0 -27
- package/dist/errors/index.js.map +0 -1
- package/dist/index.d.ts +0 -6
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -9
- package/dist/index.js.map +0 -1
- package/dist/interfaces/PrimitiveOf.d.ts +0 -9
- package/dist/interfaces/PrimitiveOf.d.ts.map +0 -1
- package/dist/interfaces/PrimitiveOf.js +0 -3
- package/dist/interfaces/PrimitiveOf.js.map +0 -1
- package/dist/interfaces/index.d.ts +0 -2
- package/dist/interfaces/index.d.ts.map +0 -1
- package/dist/interfaces/index.js +0 -5
- package/dist/interfaces/index.js.map +0 -1
- package/dist/patterns/Assert.d.ts +0 -5
- package/dist/patterns/Assert.d.ts.map +0 -1
- package/dist/patterns/Assert.js +0 -11
- package/dist/patterns/Assert.js.map +0 -1
- package/dist/patterns/index.d.ts +0 -2
- package/dist/patterns/index.d.ts.map +0 -1
- package/dist/patterns/index.js +0 -5
- package/dist/patterns/index.js.map +0 -1
- package/dist/types/Nullish.d.ts +0 -2
- package/dist/types/Nullish.d.ts.map +0 -1
- package/dist/types/Nullish.js +0 -3
- package/dist/types/Nullish.js.map +0 -1
- package/dist/types/Primitive.d.ts +0 -2
- package/dist/types/Primitive.d.ts.map +0 -1
- package/dist/types/Primitive.js +0 -3
- package/dist/types/Primitive.js.map +0 -1
- package/dist/types/index.d.ts +0 -3
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -6
- package/dist/types/index.js.map +0 -1
- package/dist/value-objects/Color.d.ts +0 -19
- package/dist/value-objects/Color.d.ts.map +0 -1
- package/dist/value-objects/Color.js +0 -40
- package/dist/value-objects/Color.js.map +0 -1
- package/dist/value-objects/Email.d.ts +0 -7
- package/dist/value-objects/Email.d.ts.map +0 -1
- package/dist/value-objects/Email.js +0 -22
- package/dist/value-objects/Email.js.map +0 -1
- package/dist/value-objects/Enum.d.ts +0 -9
- package/dist/value-objects/Enum.d.ts.map +0 -1
- package/dist/value-objects/Enum.js +0 -24
- package/dist/value-objects/Enum.js.map +0 -1
- package/dist/value-objects/Integer.d.ts +0 -6
- package/dist/value-objects/Integer.d.ts.map +0 -1
- package/dist/value-objects/Integer.js +0 -21
- package/dist/value-objects/Integer.js.map +0 -1
- package/dist/value-objects/NullObject.d.ts +0 -8
- package/dist/value-objects/NullObject.d.ts.map +0 -1
- package/dist/value-objects/NullObject.js +0 -43
- package/dist/value-objects/NullObject.js.map +0 -1
- package/dist/value-objects/NumberValueObject.d.ts +0 -15
- package/dist/value-objects/NumberValueObject.d.ts.map +0 -1
- package/dist/value-objects/NumberValueObject.js +0 -48
- package/dist/value-objects/NumberValueObject.js.map +0 -1
- package/dist/value-objects/Password.d.ts +0 -8
- package/dist/value-objects/Password.d.ts.map +0 -1
- package/dist/value-objects/Password.js +0 -28
- package/dist/value-objects/Password.js.map +0 -1
- package/dist/value-objects/PositiveNumber.d.ts +0 -6
- package/dist/value-objects/PositiveNumber.d.ts.map +0 -1
- package/dist/value-objects/PositiveNumber.js +0 -21
- package/dist/value-objects/PositiveNumber.js.map +0 -1
- package/dist/value-objects/StringValueObject.d.ts +0 -7
- package/dist/value-objects/StringValueObject.d.ts.map +0 -1
- package/dist/value-objects/StringValueObject.js +0 -24
- package/dist/value-objects/StringValueObject.js.map +0 -1
- package/dist/value-objects/UniqueObjectArray.d.ts +0 -15
- package/dist/value-objects/UniqueObjectArray.d.ts.map +0 -1
- package/dist/value-objects/UniqueObjectArray.js +0 -42
- package/dist/value-objects/UniqueObjectArray.js.map +0 -1
- package/dist/value-objects/ValueObject.d.ts +0 -16
- package/dist/value-objects/ValueObject.d.ts.map +0 -1
- package/dist/value-objects/ValueObject.js +0 -50
- package/dist/value-objects/ValueObject.js.map +0 -1
- package/dist/value-objects/coordinates/Coordinates.d.ts +0 -12
- package/dist/value-objects/coordinates/Coordinates.d.ts.map +0 -1
- package/dist/value-objects/coordinates/Coordinates.js +0 -28
- package/dist/value-objects/coordinates/Coordinates.js.map +0 -1
- package/dist/value-objects/coordinates/Latitude.d.ts +0 -8
- package/dist/value-objects/coordinates/Latitude.d.ts.map +0 -1
- package/dist/value-objects/coordinates/Latitude.js +0 -22
- package/dist/value-objects/coordinates/Latitude.js.map +0 -1
- package/dist/value-objects/coordinates/Longitude.d.ts +0 -8
- package/dist/value-objects/coordinates/Longitude.d.ts.map +0 -1
- package/dist/value-objects/coordinates/Longitude.js +0 -22
- package/dist/value-objects/coordinates/Longitude.js.map +0 -1
- package/dist/value-objects/coordinates/index.d.ts +0 -4
- package/dist/value-objects/coordinates/index.d.ts.map +0 -1
- package/dist/value-objects/coordinates/index.js +0 -7
- package/dist/value-objects/coordinates/index.js.map +0 -1
- package/dist/value-objects/hashes/Hash.d.ts +0 -7
- package/dist/value-objects/hashes/Hash.d.ts.map +0 -1
- package/dist/value-objects/hashes/Hash.js +0 -20
- package/dist/value-objects/hashes/Hash.js.map +0 -1
- package/dist/value-objects/hashes/MD5Hash.d.ts +0 -7
- package/dist/value-objects/hashes/MD5Hash.d.ts.map +0 -1
- package/dist/value-objects/hashes/MD5Hash.js +0 -21
- package/dist/value-objects/hashes/MD5Hash.js.map +0 -1
- package/dist/value-objects/hashes/SHA256Hash.d.ts +0 -8
- package/dist/value-objects/hashes/SHA256Hash.d.ts.map +0 -1
- package/dist/value-objects/hashes/SHA256Hash.js +0 -26
- package/dist/value-objects/hashes/SHA256Hash.js.map +0 -1
- package/dist/value-objects/hashes/SHA512Hash.d.ts +0 -8
- package/dist/value-objects/hashes/SHA512Hash.d.ts.map +0 -1
- package/dist/value-objects/hashes/SHA512Hash.js +0 -26
- package/dist/value-objects/hashes/SHA512Hash.js.map +0 -1
- package/dist/value-objects/hashes/index.d.ts +0 -5
- package/dist/value-objects/hashes/index.d.ts.map +0 -1
- package/dist/value-objects/hashes/index.js +0 -8
- package/dist/value-objects/hashes/index.js.map +0 -1
- package/dist/value-objects/ids/ShortId.d.ts +0 -11
- package/dist/value-objects/ids/ShortId.d.ts.map +0 -1
- package/dist/value-objects/ids/ShortId.js +0 -39
- package/dist/value-objects/ids/ShortId.js.map +0 -1
- package/dist/value-objects/ids/UUID.d.ts +0 -11
- package/dist/value-objects/ids/UUID.d.ts.map +0 -1
- package/dist/value-objects/ids/UUID.js +0 -30
- package/dist/value-objects/ids/UUID.js.map +0 -1
- package/dist/value-objects/ids/index.d.ts +0 -3
- package/dist/value-objects/ids/index.d.ts.map +0 -1
- package/dist/value-objects/ids/index.js +0 -6
- package/dist/value-objects/ids/index.js.map +0 -1
- package/dist/value-objects/index.d.ts +0 -17
- package/dist/value-objects/index.d.ts.map +0 -1
- package/dist/value-objects/index.js +0 -20
- package/dist/value-objects/index.js.map +0 -1
- package/dist/value-objects/media/Media.d.ts +0 -11
- package/dist/value-objects/media/Media.d.ts.map +0 -1
- package/dist/value-objects/media/Media.js +0 -38
- package/dist/value-objects/media/Media.js.map +0 -1
- package/dist/value-objects/media/index.d.ts +0 -2
- package/dist/value-objects/media/index.d.ts.map +0 -1
- package/dist/value-objects/media/index.js +0 -5
- package/dist/value-objects/media/index.js.map +0 -1
- package/dist/value-objects/time/CalendarDay.d.ts +0 -26
- package/dist/value-objects/time/CalendarDay.d.ts.map +0 -1
- package/dist/value-objects/time/CalendarDay.js +0 -88
- package/dist/value-objects/time/CalendarDay.js.map +0 -1
- package/dist/value-objects/time/Day.d.ts +0 -7
- package/dist/value-objects/time/Day.d.ts.map +0 -1
- package/dist/value-objects/time/Day.js +0 -18
- package/dist/value-objects/time/Day.js.map +0 -1
- package/dist/value-objects/time/DayOfWeek.d.ts +0 -34
- package/dist/value-objects/time/DayOfWeek.d.ts.map +0 -1
- package/dist/value-objects/time/DayOfWeek.js +0 -51
- package/dist/value-objects/time/DayOfWeek.js.map +0 -1
- package/dist/value-objects/time/Duration.d.ts +0 -23
- package/dist/value-objects/time/Duration.d.ts.map +0 -1
- package/dist/value-objects/time/Duration.js +0 -79
- package/dist/value-objects/time/Duration.js.map +0 -1
- package/dist/value-objects/time/Hour.d.ts +0 -18
- package/dist/value-objects/time/Hour.d.ts.map +0 -1
- package/dist/value-objects/time/Hour.js +0 -80
- package/dist/value-objects/time/Hour.js.map +0 -1
- package/dist/value-objects/time/Month.d.ts +0 -18
- package/dist/value-objects/time/Month.d.ts.map +0 -1
- package/dist/value-objects/time/Month.js +0 -41
- package/dist/value-objects/time/Month.js.map +0 -1
- package/dist/value-objects/time/MonthOfYear.d.ts +0 -17
- package/dist/value-objects/time/MonthOfYear.d.ts.map +0 -1
- package/dist/value-objects/time/MonthOfYear.js +0 -45
- package/dist/value-objects/time/MonthOfYear.js.map +0 -1
- package/dist/value-objects/time/Timestamp.d.ts +0 -53
- package/dist/value-objects/time/Timestamp.d.ts.map +0 -1
- package/dist/value-objects/time/Timestamp.js +0 -197
- package/dist/value-objects/time/Timestamp.js.map +0 -1
- package/dist/value-objects/time/TimestampInterval.d.ts +0 -24
- package/dist/value-objects/time/TimestampInterval.d.ts.map +0 -1
- package/dist/value-objects/time/TimestampInterval.js +0 -78
- package/dist/value-objects/time/TimestampInterval.js.map +0 -1
- package/dist/value-objects/time/Year.d.ts +0 -10
- package/dist/value-objects/time/Year.d.ts.map +0 -1
- package/dist/value-objects/time/Year.js +0 -26
- package/dist/value-objects/time/Year.js.map +0 -1
- package/dist/value-objects/time/index.d.ts +0 -11
- package/dist/value-objects/time/index.d.ts.map +0 -1
- package/dist/value-objects/time/index.js +0 -14
- package/dist/value-objects/time/index.js.map +0 -1
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,1244 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
let buffer = require("buffer");
|
|
3
|
+
let uuid = require("uuid");
|
|
4
|
+
//#region src/errors/BaseError.ts
|
|
5
|
+
var BaseError = class BaseError extends Error {
|
|
6
|
+
isBaseError = true;
|
|
7
|
+
static isBaseError(error) {
|
|
8
|
+
return !!error.isBaseError;
|
|
9
|
+
}
|
|
10
|
+
constructor(message, prototype = BaseError.prototype) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = this.constructor.name;
|
|
13
|
+
Object.setPrototypeOf(this, prototype);
|
|
14
|
+
}
|
|
15
|
+
toString() {
|
|
16
|
+
return `[${this.name}]: ${this.message}`;
|
|
17
|
+
}
|
|
18
|
+
getStack() {
|
|
19
|
+
return this.stack || "";
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region src/errors/DomainError.ts
|
|
24
|
+
var DomainError = class extends BaseError {
|
|
25
|
+
isDomainError = true;
|
|
26
|
+
static isDomainError(error) {
|
|
27
|
+
return !!error.isDomainError;
|
|
28
|
+
}
|
|
29
|
+
constructor(message) {
|
|
30
|
+
super(message, new.target.prototype);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
//#endregion
|
|
34
|
+
//#region src/errors/InvalidColorError.ts
|
|
35
|
+
var InvalidColorError = class extends DomainError {
|
|
36
|
+
constructor(value) {
|
|
37
|
+
super(`Invalid color value: ${value}. Must be a valid hex color code.`);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
//#endregion
|
|
41
|
+
//#region src/errors/InvalidDayError.ts
|
|
42
|
+
var InvalidDayError = class extends DomainError {
|
|
43
|
+
constructor(invalidDay) {
|
|
44
|
+
super(`Invalid day ${String(invalidDay)}`);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
//#endregion
|
|
48
|
+
//#region src/errors/InvalidDayFormatError.ts
|
|
49
|
+
var InvalidDayFormatError = class extends DomainError {
|
|
50
|
+
constructor(invalidDate) {
|
|
51
|
+
super(`Invalid day ${invalidDate}. Expected YYYY-MM-DD. `);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
//#endregion
|
|
55
|
+
//#region src/errors/InvalidHourError.ts
|
|
56
|
+
var InvalidHourError = class extends DomainError {
|
|
57
|
+
constructor() {
|
|
58
|
+
super(`Invalid hour`);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
//#endregion
|
|
62
|
+
//#region src/errors/InvalidEmailError.ts
|
|
63
|
+
var InvalidEmailError = class extends DomainError {
|
|
64
|
+
constructor(value) {
|
|
65
|
+
super(`Invalid email format: ${value}`);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
//#endregion
|
|
69
|
+
//#region src/errors/InvalidFormatError.ts
|
|
70
|
+
var InvalidFormatError = class extends DomainError {
|
|
71
|
+
constructor(value) {
|
|
72
|
+
super(`Invalid Format Error with value: '${value}'`);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
//#endregion
|
|
76
|
+
//#region src/errors/InvalidHashError.ts
|
|
77
|
+
var InvalidHashError = class extends DomainError {
|
|
78
|
+
constructor(type, value) {
|
|
79
|
+
super(`Invalid ${type} hash: ${value}`);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
//#endregion
|
|
83
|
+
//#region src/errors/InvalidIntegerError.ts
|
|
84
|
+
var InvalidIntegerError = class extends DomainError {
|
|
85
|
+
constructor(value) {
|
|
86
|
+
super(`Invalid integer value ${value}`);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
//#endregion
|
|
90
|
+
//#region src/errors/InvalidLatitudeError.ts
|
|
91
|
+
var InvalidLatitudeError = class extends DomainError {
|
|
92
|
+
constructor(value) {
|
|
93
|
+
super(`Invalid latitude: ${value}. Must be between -90 and 90`);
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
//#endregion
|
|
97
|
+
//#region src/errors/InvalidLongitudeError.ts
|
|
98
|
+
var InvalidLongitudeError = class extends DomainError {
|
|
99
|
+
constructor(value) {
|
|
100
|
+
super(`Invalid longitude: ${value}. Must be between -180 and 180`);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
//#endregion
|
|
104
|
+
//#region src/errors/InvalidMinutesError.ts
|
|
105
|
+
var InvalidMinutesError = class extends DomainError {
|
|
106
|
+
constructor() {
|
|
107
|
+
super(`Invalid minutes`);
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
//#endregion
|
|
111
|
+
//#region src/errors/InvalidNumberError.ts
|
|
112
|
+
var InvalidNumberError = class extends DomainError {
|
|
113
|
+
constructor(invalidNumber) {
|
|
114
|
+
super(`Invalid number ${String(invalidNumber)}`);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
//#endregion
|
|
118
|
+
//#region src/errors/InvalidPasswordError.ts
|
|
119
|
+
var InvalidPasswordError = class extends DomainError {
|
|
120
|
+
constructor(minLength, maxLength) {
|
|
121
|
+
super(`Password must be between ${minLength} and ${maxLength} characters long and include at least one uppercase letter, one lowercase letter, one number and one symbol.`);
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
//#endregion
|
|
125
|
+
//#region src/errors/InvalidPositiveNumberError.ts
|
|
126
|
+
var InvalidPositiveNumberError = class extends DomainError {
|
|
127
|
+
constructor() {
|
|
128
|
+
super(`Value must be greater or equal than 0`);
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
//#endregion
|
|
132
|
+
//#region src/errors/InvalidStringLengthError.ts
|
|
133
|
+
var InvalidStringLengthError = class extends DomainError {
|
|
134
|
+
constructor(value, length) {
|
|
135
|
+
super(`String length '${value.length}' exceeds the expected length: '${length}'`);
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
//#endregion
|
|
139
|
+
//#region src/errors/InvalidTimestampIntervalError.ts
|
|
140
|
+
var InvalidTimestampIntervalError = class extends DomainError {
|
|
141
|
+
constructor(start, end) {
|
|
142
|
+
super(`Invalid TimestampInterval, start (${start.valueOf()}) must be before the end (${end.valueOf()})`);
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
//#endregion
|
|
146
|
+
//#region src/errors/InvalidLengthError.ts
|
|
147
|
+
var InvalidLengthError = class extends DomainError {
|
|
148
|
+
constructor(value, length) {
|
|
149
|
+
super(`Invalid Length Error with value: '${value}' expected length: '${length}'`);
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
//#endregion
|
|
153
|
+
//#region src/errors/NullObjectCreationDisabledError.ts
|
|
154
|
+
var NullObjectCreationDisabledError = class NullObjectCreationDisabledError extends DomainError {
|
|
155
|
+
constructor(valueObjectName) {
|
|
156
|
+
super(`[NullObjectCreationDisabledError]: ${valueObjectName} received null or undefined while automatic NullObject creation is disabled`);
|
|
157
|
+
Object.setPrototypeOf(this, NullObjectCreationDisabledError.prototype);
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
//#endregion
|
|
161
|
+
//#region src/errors/NullObjectError.ts
|
|
162
|
+
var NullObjectError = class NullObjectError extends DomainError {
|
|
163
|
+
constructor(message) {
|
|
164
|
+
super(`[NullObjectError]: ${message} is NullObject`);
|
|
165
|
+
Object.setPrototypeOf(this, NullObjectError.prototype);
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
//#endregion
|
|
169
|
+
//#region src/errors/ValueNotInEnumError.ts
|
|
170
|
+
var ValueNotInEnumError = class extends DomainError {
|
|
171
|
+
constructor(value, enumerate) {
|
|
172
|
+
super(`${Object.values(enumerate).join(",")} enum does not include value: ${value}`);
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
//#endregion
|
|
176
|
+
//#region src/patterns/Assert.ts
|
|
177
|
+
function assert(condition, error) {
|
|
178
|
+
if (condition) return;
|
|
179
|
+
throw typeof error === "string" ? new DomainError(error) : error;
|
|
180
|
+
}
|
|
181
|
+
//#endregion
|
|
182
|
+
//#region src/value-objects/NullObject.ts
|
|
183
|
+
var NullObject = class NullObject {
|
|
184
|
+
static setFakeProps(nullObject, klass) {
|
|
185
|
+
const visited = /* @__PURE__ */ new Set();
|
|
186
|
+
let proto = klass.prototype;
|
|
187
|
+
while (proto && proto !== Object.prototype) {
|
|
188
|
+
const props = Object.getOwnPropertyNames(proto);
|
|
189
|
+
for (const prop of props) {
|
|
190
|
+
if (prop === "constructor" || prop === "isNullObject" || prop === "valueOf" || visited.has(prop)) continue;
|
|
191
|
+
visited.add(prop);
|
|
192
|
+
nullObject[prop] = () => {
|
|
193
|
+
throw new NullObjectError(klass.name);
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
proto = Object.getPrototypeOf(proto);
|
|
197
|
+
}
|
|
198
|
+
Object.setPrototypeOf(nullObject, NullObject.prototype);
|
|
199
|
+
}
|
|
200
|
+
static new(klass) {
|
|
201
|
+
const nullObject = {
|
|
202
|
+
isNullObject: true,
|
|
203
|
+
valueOf: () => {}
|
|
204
|
+
};
|
|
205
|
+
NullObject.setFakeProps(nullObject, klass);
|
|
206
|
+
return nullObject;
|
|
207
|
+
}
|
|
208
|
+
static isNullObject(nullable) {
|
|
209
|
+
return !!nullable?.isNullObject;
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
//#endregion
|
|
213
|
+
//#region src/value-objects/ValueObject.ts
|
|
214
|
+
var ValueObject = class ValueObject {
|
|
215
|
+
static nullObjectCreationEnabled = true;
|
|
216
|
+
value;
|
|
217
|
+
static disableNullObjectCreation() {
|
|
218
|
+
ValueObject.nullObjectCreationEnabled = false;
|
|
219
|
+
}
|
|
220
|
+
static enableNullObjectCreation() {
|
|
221
|
+
ValueObject.nullObjectCreationEnabled = true;
|
|
222
|
+
}
|
|
223
|
+
constructor(value) {
|
|
224
|
+
if (this.isNullish(value)) {
|
|
225
|
+
if (ValueObject.nullObjectCreationEnabled === false) throw new NullObjectCreationDisabledError(new.target.name);
|
|
226
|
+
return NullObject.new(new.target);
|
|
227
|
+
}
|
|
228
|
+
this.value = value;
|
|
229
|
+
}
|
|
230
|
+
isNullish(value) {
|
|
231
|
+
return value === null || value === void 0;
|
|
232
|
+
}
|
|
233
|
+
clone(value) {
|
|
234
|
+
return new this.constructor(this.isNullish(value) ? this.value : value);
|
|
235
|
+
}
|
|
236
|
+
hasValue(other) {
|
|
237
|
+
const otherValue = other instanceof ValueObject ? other.valueOf() : other;
|
|
238
|
+
return this.value === otherValue;
|
|
239
|
+
}
|
|
240
|
+
isEqual(other) {
|
|
241
|
+
return other instanceof ValueObject && this.constructor === other.constructor && this.hasValue(other);
|
|
242
|
+
}
|
|
243
|
+
isNotEqual(other) {
|
|
244
|
+
return this.isEqual(other) === false;
|
|
245
|
+
}
|
|
246
|
+
valueOf() {
|
|
247
|
+
return this.value;
|
|
248
|
+
}
|
|
249
|
+
toString() {
|
|
250
|
+
return this.value.toString();
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
//#endregion
|
|
254
|
+
//#region src/value-objects/StringValueObject.ts
|
|
255
|
+
var StringValueObject = class extends ValueObject {
|
|
256
|
+
constructor(value, maxLength = 512) {
|
|
257
|
+
super(value?.valueOf());
|
|
258
|
+
if (NullObject.isNullObject(this)) return this;
|
|
259
|
+
this.ensureDoesNotExceedsMaxLength(maxLength);
|
|
260
|
+
}
|
|
261
|
+
ensureDoesNotExceedsMaxLength(maxLength) {
|
|
262
|
+
assert(this.value.length <= maxLength, new InvalidStringLengthError(this.value, maxLength));
|
|
263
|
+
}
|
|
264
|
+
isEmpty() {
|
|
265
|
+
return !this.value;
|
|
266
|
+
}
|
|
267
|
+
};
|
|
268
|
+
//#endregion
|
|
269
|
+
//#region src/value-objects/NumberValueObject.ts
|
|
270
|
+
var NumberValueObject = class extends ValueObject {
|
|
271
|
+
constructor(value) {
|
|
272
|
+
super(value?.valueOf());
|
|
273
|
+
if (NullObject.isNullObject(this)) return this;
|
|
274
|
+
assert(this.isValidNumber(this.value), new InvalidNumberError(this.value));
|
|
275
|
+
}
|
|
276
|
+
isValidNumber(value) {
|
|
277
|
+
return Number.isFinite(value.valueOf());
|
|
278
|
+
}
|
|
279
|
+
isZero() {
|
|
280
|
+
return this.value === 0;
|
|
281
|
+
}
|
|
282
|
+
isGreaterThan(other) {
|
|
283
|
+
return this.value > other.valueOf();
|
|
284
|
+
}
|
|
285
|
+
isGreaterOrEqualThan(other) {
|
|
286
|
+
return this.value >= other.valueOf();
|
|
287
|
+
}
|
|
288
|
+
isLessThan(other) {
|
|
289
|
+
return this.value < other.valueOf();
|
|
290
|
+
}
|
|
291
|
+
isLessOrEqualThan(other) {
|
|
292
|
+
return this.value <= other.valueOf();
|
|
293
|
+
}
|
|
294
|
+
add(other) {
|
|
295
|
+
return this.clone(this.value + other.valueOf());
|
|
296
|
+
}
|
|
297
|
+
subtract(other) {
|
|
298
|
+
return this.clone(this.value - other.valueOf());
|
|
299
|
+
}
|
|
300
|
+
multiply(other) {
|
|
301
|
+
return this.clone(this.value * other.valueOf());
|
|
302
|
+
}
|
|
303
|
+
divide(other) {
|
|
304
|
+
return this.clone(this.value / other.valueOf());
|
|
305
|
+
}
|
|
306
|
+
};
|
|
307
|
+
//#endregion
|
|
308
|
+
//#region src/value-objects/coordinates/Latitude.ts
|
|
309
|
+
var Latitude = class Latitude extends NumberValueObject {
|
|
310
|
+
static MIN_VALUE = new NumberValueObject(-90);
|
|
311
|
+
static MAX_VALUE = new NumberValueObject(90);
|
|
312
|
+
static isValid(value) {
|
|
313
|
+
const primitive = value.valueOf();
|
|
314
|
+
return Number.isFinite(primitive) && primitive >= this.MIN_VALUE.valueOf() && primitive <= this.MAX_VALUE.valueOf();
|
|
315
|
+
}
|
|
316
|
+
constructor(value) {
|
|
317
|
+
assert(Latitude.isValid(value), new InvalidLatitudeError(value.valueOf()));
|
|
318
|
+
super(value.valueOf());
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
//#endregion
|
|
322
|
+
//#region src/value-objects/coordinates/Longitude.ts
|
|
323
|
+
var Longitude = class Longitude extends NumberValueObject {
|
|
324
|
+
static MIN_VALUE = new NumberValueObject(-180);
|
|
325
|
+
static MAX_VALUE = new NumberValueObject(180);
|
|
326
|
+
static isValid(value) {
|
|
327
|
+
const primitive = value.valueOf();
|
|
328
|
+
return Number.isFinite(primitive) && primitive >= this.MIN_VALUE.valueOf() && primitive <= this.MAX_VALUE.valueOf();
|
|
329
|
+
}
|
|
330
|
+
constructor(value) {
|
|
331
|
+
assert(Longitude.isValid(value), new InvalidLongitudeError(value.valueOf()));
|
|
332
|
+
super(value.valueOf());
|
|
333
|
+
}
|
|
334
|
+
};
|
|
335
|
+
//#endregion
|
|
336
|
+
//#region src/value-objects/coordinates/Coordinates.ts
|
|
337
|
+
var Coordinates = class Coordinates extends StringValueObject {
|
|
338
|
+
latitude;
|
|
339
|
+
longitude;
|
|
340
|
+
static fromString(value) {
|
|
341
|
+
const latitude = parseFloat(value.split(",")[0]);
|
|
342
|
+
const longitude = parseFloat(value.split(",")[1]);
|
|
343
|
+
return new Coordinates(latitude, longitude);
|
|
344
|
+
}
|
|
345
|
+
constructor(latitude, longitude) {
|
|
346
|
+
super(latitude?.valueOf() + "," + longitude?.valueOf());
|
|
347
|
+
this.latitude = new Latitude(latitude.valueOf());
|
|
348
|
+
this.longitude = new Longitude(longitude.valueOf());
|
|
349
|
+
}
|
|
350
|
+
getLatitude() {
|
|
351
|
+
return this.latitude;
|
|
352
|
+
}
|
|
353
|
+
getLongitude() {
|
|
354
|
+
return this.longitude;
|
|
355
|
+
}
|
|
356
|
+
};
|
|
357
|
+
//#endregion
|
|
358
|
+
//#region src/value-objects/hashes/Hash.ts
|
|
359
|
+
var Hash = class extends ValueObject {
|
|
360
|
+
constructor(source) {
|
|
361
|
+
super(source?.valueOf());
|
|
362
|
+
if (NullObject.isNullObject(this)) return this;
|
|
363
|
+
}
|
|
364
|
+
toBase64() {
|
|
365
|
+
return new StringValueObject(buffer.Buffer.from(this.valueOf(), "hex").toString("base64"));
|
|
366
|
+
}
|
|
367
|
+
};
|
|
368
|
+
//#endregion
|
|
369
|
+
//#region src/value-objects/hashes/MD5Hash.ts
|
|
370
|
+
var MD5Hash = class MD5Hash extends Hash {
|
|
371
|
+
static isValid(hash) {
|
|
372
|
+
return !!hash.valueOf().match(/^[a-f0-9]{32}$/);
|
|
373
|
+
}
|
|
374
|
+
constructor(source) {
|
|
375
|
+
super(source?.valueOf());
|
|
376
|
+
if (NullObject.isNullObject(this)) return this;
|
|
377
|
+
assert(MD5Hash.isValid(this.valueOf()), new InvalidHashError("MD5", source.valueOf()));
|
|
378
|
+
}
|
|
379
|
+
};
|
|
380
|
+
//#endregion
|
|
381
|
+
//#region src/value-objects/hashes/SHA256Hash.ts
|
|
382
|
+
var SHA256Hash = class SHA256Hash extends ValueObject {
|
|
383
|
+
static isValid(hash) {
|
|
384
|
+
return !!hash.valueOf().match(/^[a-f0-9]{64}$/i);
|
|
385
|
+
}
|
|
386
|
+
constructor(source) {
|
|
387
|
+
super(source?.valueOf());
|
|
388
|
+
if (NullObject.isNullObject(this)) return this;
|
|
389
|
+
assert(SHA256Hash.isValid(this.valueOf()), new InvalidHashError("SHA256", source.valueOf()));
|
|
390
|
+
}
|
|
391
|
+
toBase64() {
|
|
392
|
+
return new StringValueObject(buffer.Buffer.from(this.valueOf(), "hex").toString("base64"));
|
|
393
|
+
}
|
|
394
|
+
};
|
|
395
|
+
//#endregion
|
|
396
|
+
//#region src/value-objects/hashes/SHA512Hash.ts
|
|
397
|
+
var SHA512Hash = class SHA512Hash extends ValueObject {
|
|
398
|
+
static isValid(hash) {
|
|
399
|
+
return !!hash.valueOf().match(/^[a-f0-9]{128}$/i);
|
|
400
|
+
}
|
|
401
|
+
constructor(source) {
|
|
402
|
+
super(source?.valueOf());
|
|
403
|
+
if (NullObject.isNullObject(this)) return this;
|
|
404
|
+
assert(SHA512Hash.isValid(this.valueOf()), new InvalidHashError("SHA512", source.valueOf()));
|
|
405
|
+
}
|
|
406
|
+
toBase64() {
|
|
407
|
+
return new StringValueObject(buffer.Buffer.from(this.valueOf(), "hex").toString("base64"));
|
|
408
|
+
}
|
|
409
|
+
};
|
|
410
|
+
//#endregion
|
|
411
|
+
//#region src/value-objects/ids/ShortId.ts
|
|
412
|
+
var ShortId = class ShortId extends ValueObject {
|
|
413
|
+
static LENGTH = 24;
|
|
414
|
+
static PATTERN = new RegExp(`[a-zA-Z0-9]{${this.LENGTH}}$`);
|
|
415
|
+
static generateObjectIdHex() {
|
|
416
|
+
const random = (0, uuid.parse)((0, uuid.v4)());
|
|
417
|
+
const bytes = buffer.Buffer.alloc(12);
|
|
418
|
+
bytes.writeUInt32BE(Math.floor(Date.now() / 1e3), 0);
|
|
419
|
+
bytes.set(random.subarray(0, 6), 4);
|
|
420
|
+
bytes.set(random.subarray(9, 11), 10);
|
|
421
|
+
return bytes.toString("hex");
|
|
422
|
+
}
|
|
423
|
+
static generate() {
|
|
424
|
+
return new ShortId(ShortId.generateObjectIdHex());
|
|
425
|
+
}
|
|
426
|
+
constructor(value) {
|
|
427
|
+
super(value?.valueOf());
|
|
428
|
+
if (NullObject.isNullObject(this)) return this;
|
|
429
|
+
this.ensureIsShortId(this.value);
|
|
430
|
+
}
|
|
431
|
+
ensureIsShortId(value) {
|
|
432
|
+
assert(value.length === ShortId.LENGTH, new InvalidLengthError(this.value, ShortId.LENGTH));
|
|
433
|
+
assert(ShortId.PATTERN.test(value), new InvalidFormatError(this.value));
|
|
434
|
+
}
|
|
435
|
+
};
|
|
436
|
+
//#endregion
|
|
437
|
+
//#region src/value-objects/ids/UUID.ts
|
|
438
|
+
var UUID = class UUID extends ValueObject {
|
|
439
|
+
static LENGTH = 36;
|
|
440
|
+
static PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
441
|
+
static SENTINEL_PATTERN = /^(?:00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;
|
|
442
|
+
static generate() {
|
|
443
|
+
return new UUID((0, uuid.v4)());
|
|
444
|
+
}
|
|
445
|
+
constructor(value) {
|
|
446
|
+
super(value?.valueOf());
|
|
447
|
+
if (NullObject.isNullObject(this)) return this;
|
|
448
|
+
this.ensureIsUUID(this.value);
|
|
449
|
+
}
|
|
450
|
+
ensureIsUUID(value) {
|
|
451
|
+
assert(value.length === UUID.LENGTH, new InvalidLengthError(this.value, UUID.LENGTH));
|
|
452
|
+
assert(UUID.PATTERN.test(value) || UUID.SENTINEL_PATTERN.test(value), new InvalidFormatError(this.value));
|
|
453
|
+
}
|
|
454
|
+
};
|
|
455
|
+
//#endregion
|
|
456
|
+
//#region src/value-objects/media/Media.ts
|
|
457
|
+
var Media = class Media extends ValueObject {
|
|
458
|
+
buffer;
|
|
459
|
+
constructor(value) {
|
|
460
|
+
super(value?.toString());
|
|
461
|
+
if (NullObject.isNullObject(this)) return this;
|
|
462
|
+
this.buffer = buffer.Buffer.isBuffer(value) ? buffer.Buffer.from(value) : void 0;
|
|
463
|
+
}
|
|
464
|
+
getBuffer() {
|
|
465
|
+
return this.buffer === void 0 ? buffer.Buffer.from(this.value) : buffer.Buffer.from(this.buffer);
|
|
466
|
+
}
|
|
467
|
+
getSize() {
|
|
468
|
+
return this.getBuffer().length;
|
|
469
|
+
}
|
|
470
|
+
getBase64() {
|
|
471
|
+
return this.getBuffer().toString("base64");
|
|
472
|
+
}
|
|
473
|
+
hasValue(other) {
|
|
474
|
+
if (other instanceof Media) return this.getBuffer().equals(other.getBuffer());
|
|
475
|
+
if (buffer.Buffer.isBuffer(other)) return this.getBuffer().equals(other);
|
|
476
|
+
return super.hasValue(other);
|
|
477
|
+
}
|
|
478
|
+
};
|
|
479
|
+
//#endregion
|
|
480
|
+
//#region src/value-objects/Integer.ts
|
|
481
|
+
var Integer = class extends NumberValueObject {
|
|
482
|
+
constructor(value) {
|
|
483
|
+
super(value?.valueOf());
|
|
484
|
+
if (NullObject.isNullObject(this)) return this;
|
|
485
|
+
this.ensureIsInteger();
|
|
486
|
+
}
|
|
487
|
+
ensureIsInteger() {
|
|
488
|
+
assert(this.value.valueOf() % 1 === 0, new InvalidIntegerError(this.value.valueOf()));
|
|
489
|
+
}
|
|
490
|
+
};
|
|
491
|
+
//#endregion
|
|
492
|
+
//#region src/value-objects/time/Day.ts
|
|
493
|
+
var Day = class extends Integer {
|
|
494
|
+
constructor(value) {
|
|
495
|
+
super(value.valueOf());
|
|
496
|
+
this.ensureIsValidDay();
|
|
497
|
+
}
|
|
498
|
+
ensureIsValidDay() {
|
|
499
|
+
assert(this.isGreaterOrEqualThan(1), new InvalidDayError(this.value));
|
|
500
|
+
assert(this.isLessOrEqualThan(31), new InvalidDayError(this.value));
|
|
501
|
+
}
|
|
502
|
+
};
|
|
503
|
+
//#endregion
|
|
504
|
+
//#region src/value-objects/Enum.ts
|
|
505
|
+
var Enum = class extends ValueObject {
|
|
506
|
+
value;
|
|
507
|
+
constructor(value) {
|
|
508
|
+
super(value);
|
|
509
|
+
this.value = value;
|
|
510
|
+
if (NullObject.isNullObject(this)) return this;
|
|
511
|
+
this.ensureIsValidValue();
|
|
512
|
+
}
|
|
513
|
+
ensureIsValidValue() {
|
|
514
|
+
assert(this.getValues().some((enumValue) => this.hasValue(enumValue)), new ValueNotInEnumError(this.valueOf(), this.getValues()));
|
|
515
|
+
}
|
|
516
|
+
};
|
|
517
|
+
//#endregion
|
|
518
|
+
//#region src/value-objects/time/DayOfWeek.ts
|
|
519
|
+
let EDaysOfWeek = /* @__PURE__ */ function(EDaysOfWeek) {
|
|
520
|
+
EDaysOfWeek["MONDAY"] = "monday";
|
|
521
|
+
EDaysOfWeek["TUESDAY"] = "tuesday";
|
|
522
|
+
EDaysOfWeek["WEDNESDAY"] = "wednesday";
|
|
523
|
+
EDaysOfWeek["THURSDAY"] = "thursday";
|
|
524
|
+
EDaysOfWeek["FRIDAY"] = "friday";
|
|
525
|
+
EDaysOfWeek["SATURDAY"] = "saturday";
|
|
526
|
+
EDaysOfWeek["SUNDAY"] = "sunday";
|
|
527
|
+
return EDaysOfWeek;
|
|
528
|
+
}({});
|
|
529
|
+
const timeStampDayToDaysMap = {
|
|
530
|
+
["friday"]: 5,
|
|
531
|
+
["monday"]: 1,
|
|
532
|
+
["saturday"]: 6,
|
|
533
|
+
["sunday"]: 0,
|
|
534
|
+
["thursday"]: 4,
|
|
535
|
+
["tuesday"]: 2,
|
|
536
|
+
["wednesday"]: 3
|
|
537
|
+
};
|
|
538
|
+
var DayOfWeek = class DayOfWeek extends Enum {
|
|
539
|
+
static MONDAY = new DayOfWeek("monday");
|
|
540
|
+
static TUESDAY = new DayOfWeek("tuesday");
|
|
541
|
+
static WEDNESDAY = new DayOfWeek("wednesday");
|
|
542
|
+
static THURSDAY = new DayOfWeek("thursday");
|
|
543
|
+
static FRIDAY = new DayOfWeek("friday");
|
|
544
|
+
static SATURDAY = new DayOfWeek("saturday");
|
|
545
|
+
static SUNDAY = new DayOfWeek("sunday");
|
|
546
|
+
static fromNumber(day) {
|
|
547
|
+
const [eDay] = Object.entries(timeStampDayToDaysMap).find(([, value]) => value === day) || [];
|
|
548
|
+
assert(eDay, new InvalidDayError(eDay));
|
|
549
|
+
return new DayOfWeek(eDay);
|
|
550
|
+
}
|
|
551
|
+
static fromTimestamp(timestamp) {
|
|
552
|
+
const dayOfWeekNumber = timestamp.getDayOfWeek();
|
|
553
|
+
return DayOfWeek.fromNumber(dayOfWeekNumber);
|
|
554
|
+
}
|
|
555
|
+
getValues() {
|
|
556
|
+
return Object.values(EDaysOfWeek);
|
|
557
|
+
}
|
|
558
|
+
toNumber() {
|
|
559
|
+
return timeStampDayToDaysMap[this.value];
|
|
560
|
+
}
|
|
561
|
+
};
|
|
562
|
+
//#endregion
|
|
563
|
+
//#region src/value-objects/time/Month.ts
|
|
564
|
+
var MonthEnum = /* @__PURE__ */ function(MonthEnum) {
|
|
565
|
+
MonthEnum[MonthEnum["JANUARY"] = 1] = "JANUARY";
|
|
566
|
+
MonthEnum[MonthEnum["FEBRUARY"] = 2] = "FEBRUARY";
|
|
567
|
+
MonthEnum[MonthEnum["MARCH"] = 3] = "MARCH";
|
|
568
|
+
MonthEnum[MonthEnum["APRIL"] = 4] = "APRIL";
|
|
569
|
+
MonthEnum[MonthEnum["MAY"] = 5] = "MAY";
|
|
570
|
+
MonthEnum[MonthEnum["JUNE"] = 6] = "JUNE";
|
|
571
|
+
MonthEnum[MonthEnum["JULY"] = 7] = "JULY";
|
|
572
|
+
MonthEnum[MonthEnum["AUGUST"] = 8] = "AUGUST";
|
|
573
|
+
MonthEnum[MonthEnum["SEPTEMBER"] = 9] = "SEPTEMBER";
|
|
574
|
+
MonthEnum[MonthEnum["OCTOBER"] = 10] = "OCTOBER";
|
|
575
|
+
MonthEnum[MonthEnum["NOVEMBER"] = 11] = "NOVEMBER";
|
|
576
|
+
MonthEnum[MonthEnum["DECEMBER"] = 12] = "DECEMBER";
|
|
577
|
+
return MonthEnum;
|
|
578
|
+
}(MonthEnum || {});
|
|
579
|
+
var Month = class Month extends Enum {
|
|
580
|
+
static JANUARY = new Month(1);
|
|
581
|
+
static FEBRUARY = new Month(2);
|
|
582
|
+
static MARCH = new Month(3);
|
|
583
|
+
static APRIL = new Month(4);
|
|
584
|
+
static MAY = new Month(5);
|
|
585
|
+
static JUNE = new Month(6);
|
|
586
|
+
static JULY = new Month(7);
|
|
587
|
+
static AUGUST = new Month(8);
|
|
588
|
+
static SEPTEMBER = new Month(9);
|
|
589
|
+
static OCTOBER = new Month(10);
|
|
590
|
+
static NOVEMBER = new Month(11);
|
|
591
|
+
static DECEMBER = new Month(12);
|
|
592
|
+
getValues() {
|
|
593
|
+
return Object.values(MonthEnum);
|
|
594
|
+
}
|
|
595
|
+
getIndex() {
|
|
596
|
+
return Number(this.valueOf()) - 1;
|
|
597
|
+
}
|
|
598
|
+
};
|
|
599
|
+
//#endregion
|
|
600
|
+
//#region src/value-objects/time/Year.ts
|
|
601
|
+
var Year = class Year extends Integer {
|
|
602
|
+
static YEAR_DAYS = 365;
|
|
603
|
+
static LEAP_YEAR_DAYS = 366;
|
|
604
|
+
constructor(value) {
|
|
605
|
+
super(value?.valueOf());
|
|
606
|
+
if (NullObject.isNullObject(this)) return this;
|
|
607
|
+
}
|
|
608
|
+
isLeapYear() {
|
|
609
|
+
return this.getNumberOfDays() === Year.LEAP_YEAR_DAYS;
|
|
610
|
+
}
|
|
611
|
+
getNumberOfDays() {
|
|
612
|
+
return this.value % 4 === 0 && this.value % 100 !== 0 || this.value % 400 === 0 ? Year.LEAP_YEAR_DAYS : Year.YEAR_DAYS;
|
|
613
|
+
}
|
|
614
|
+
};
|
|
615
|
+
//#endregion
|
|
616
|
+
//#region src/value-objects/time/Timestamp.ts
|
|
617
|
+
var Timestamp = class Timestamp extends ValueObject {
|
|
618
|
+
static FACTORS = {
|
|
619
|
+
DAYS: 864e5,
|
|
620
|
+
HOURS: 36e5,
|
|
621
|
+
MINUTES: 6e4,
|
|
622
|
+
SECONDS: 1e3,
|
|
623
|
+
WEEKS: 6048e5
|
|
624
|
+
};
|
|
625
|
+
static valueMilliseconds(value) {
|
|
626
|
+
if (value instanceof Timestamp || value instanceof Date) return value.valueOf();
|
|
627
|
+
if (typeof value === "number") return value;
|
|
628
|
+
if (typeof value === "string") return new Date(value).valueOf();
|
|
629
|
+
return Date.now().valueOf();
|
|
630
|
+
}
|
|
631
|
+
static getLastDayOfUtcMonth(year, month) {
|
|
632
|
+
const normalizedYear = year + Math.floor(month / 12);
|
|
633
|
+
const normalizedMonth = (month % 12 + 12) % 12;
|
|
634
|
+
return [
|
|
635
|
+
31,
|
|
636
|
+
new Year(normalizedYear).isLeapYear() ? 29 : 28,
|
|
637
|
+
31,
|
|
638
|
+
30,
|
|
639
|
+
31,
|
|
640
|
+
30,
|
|
641
|
+
31,
|
|
642
|
+
31,
|
|
643
|
+
30,
|
|
644
|
+
31,
|
|
645
|
+
30,
|
|
646
|
+
31
|
|
647
|
+
][normalizedMonth];
|
|
648
|
+
}
|
|
649
|
+
static ensureCalendarDelta(value) {
|
|
650
|
+
assert(Number.isInteger(value), new InvalidIntegerError(value));
|
|
651
|
+
}
|
|
652
|
+
static createUtcCalendarValue(sourceValue, year, month, day) {
|
|
653
|
+
const integerValue = Math.floor(sourceValue);
|
|
654
|
+
const fractionalMilliseconds = sourceValue - integerValue;
|
|
655
|
+
const source = new Date(integerValue);
|
|
656
|
+
const target = /* @__PURE__ */ new Date(0);
|
|
657
|
+
target.setUTCFullYear(year, month, day);
|
|
658
|
+
target.setUTCHours(source.getUTCHours(), source.getUTCMinutes(), source.getUTCSeconds(), source.getUTCMilliseconds());
|
|
659
|
+
return target.valueOf() + fractionalMilliseconds;
|
|
660
|
+
}
|
|
661
|
+
static new(value) {
|
|
662
|
+
return new Timestamp(value);
|
|
663
|
+
}
|
|
664
|
+
static now() {
|
|
665
|
+
return new Timestamp();
|
|
666
|
+
}
|
|
667
|
+
static fromSeconds(seconds) {
|
|
668
|
+
return new Timestamp(seconds.valueOf() * Timestamp.FACTORS.SECONDS);
|
|
669
|
+
}
|
|
670
|
+
constructor(value) {
|
|
671
|
+
super(Timestamp.valueMilliseconds(value));
|
|
672
|
+
assert(Number.isFinite(new Date(this.value).valueOf()), new InvalidNumberError(this.value));
|
|
673
|
+
}
|
|
674
|
+
toExactHour() {
|
|
675
|
+
const date = new Date(this.valueOf());
|
|
676
|
+
date.setSeconds(0);
|
|
677
|
+
date.setMinutes(0);
|
|
678
|
+
date.setMilliseconds(0);
|
|
679
|
+
const value = Timestamp.new(date.getTime()).value;
|
|
680
|
+
return this.clone(value);
|
|
681
|
+
}
|
|
682
|
+
toMilliseconds() {
|
|
683
|
+
return this.value;
|
|
684
|
+
}
|
|
685
|
+
toSeconds() {
|
|
686
|
+
return Math.round(this.value / Timestamp.FACTORS.SECONDS);
|
|
687
|
+
}
|
|
688
|
+
toDate() {
|
|
689
|
+
return new Date(this.value);
|
|
690
|
+
}
|
|
691
|
+
toString() {
|
|
692
|
+
return `${this.valueOf()}`;
|
|
693
|
+
}
|
|
694
|
+
isBefore(other) {
|
|
695
|
+
return this.value < other.valueOf();
|
|
696
|
+
}
|
|
697
|
+
isAfter(other) {
|
|
698
|
+
return this.value > other.valueOf();
|
|
699
|
+
}
|
|
700
|
+
isBeforeOrEqual(other) {
|
|
701
|
+
return this.value <= other.valueOf();
|
|
702
|
+
}
|
|
703
|
+
isAfterOrEqual(other) {
|
|
704
|
+
return this.value >= other.valueOf();
|
|
705
|
+
}
|
|
706
|
+
addMilliseconds(milliseconds) {
|
|
707
|
+
const value = this.value + milliseconds.valueOf();
|
|
708
|
+
return this.clone(value);
|
|
709
|
+
}
|
|
710
|
+
addSeconds(seconds) {
|
|
711
|
+
const value = this.value + seconds.valueOf() * Timestamp.FACTORS.SECONDS;
|
|
712
|
+
return this.clone(value);
|
|
713
|
+
}
|
|
714
|
+
addMinutes(minutes) {
|
|
715
|
+
const value = this.value + minutes.valueOf() * Timestamp.FACTORS.MINUTES;
|
|
716
|
+
return this.clone(value);
|
|
717
|
+
}
|
|
718
|
+
addHours(hours) {
|
|
719
|
+
const value = this.value + hours.valueOf() * Timestamp.FACTORS.HOURS;
|
|
720
|
+
return this.clone(value);
|
|
721
|
+
}
|
|
722
|
+
addDays(days) {
|
|
723
|
+
const value = this.value + days.valueOf() * Timestamp.FACTORS.DAYS;
|
|
724
|
+
return this.clone(value);
|
|
725
|
+
}
|
|
726
|
+
addWeeks(weeks) {
|
|
727
|
+
const value = this.value + weeks.valueOf() * Timestamp.FACTORS.WEEKS;
|
|
728
|
+
return this.clone(value);
|
|
729
|
+
}
|
|
730
|
+
addMonths(months) {
|
|
731
|
+
const delta = months.valueOf();
|
|
732
|
+
Timestamp.ensureCalendarDelta(delta);
|
|
733
|
+
const source = new Date(Math.floor(this.value));
|
|
734
|
+
const totalMonths = source.getUTCFullYear() * 12 + source.getUTCMonth() + delta;
|
|
735
|
+
const targetYear = Math.floor(totalMonths / 12);
|
|
736
|
+
const targetMonth = totalMonths - targetYear * 12;
|
|
737
|
+
const targetDay = Math.min(source.getUTCDate(), Timestamp.getLastDayOfUtcMonth(targetYear, targetMonth));
|
|
738
|
+
return this.clone(Timestamp.createUtcCalendarValue(this.value, targetYear, targetMonth, targetDay));
|
|
739
|
+
}
|
|
740
|
+
addYears(years) {
|
|
741
|
+
const delta = years.valueOf();
|
|
742
|
+
Timestamp.ensureCalendarDelta(delta);
|
|
743
|
+
const source = new Date(Math.floor(this.value));
|
|
744
|
+
const targetYear = source.getUTCFullYear() + delta;
|
|
745
|
+
const targetMonth = source.getUTCMonth();
|
|
746
|
+
const targetDay = Math.min(source.getUTCDate(), Timestamp.getLastDayOfUtcMonth(targetYear, targetMonth));
|
|
747
|
+
return this.clone(Timestamp.createUtcCalendarValue(this.value, targetYear, targetMonth, targetDay));
|
|
748
|
+
}
|
|
749
|
+
addDuration(duration) {
|
|
750
|
+
const value = this.value + duration.valueOf();
|
|
751
|
+
return this.clone(value);
|
|
752
|
+
}
|
|
753
|
+
isSameDay(other) {
|
|
754
|
+
return this.getCalendarDay().isEqual(other.getCalendarDay());
|
|
755
|
+
}
|
|
756
|
+
isSameMonth(other) {
|
|
757
|
+
return this.getMonthOfYear().isEqual(other.getMonthOfYear());
|
|
758
|
+
}
|
|
759
|
+
isSameYear(other) {
|
|
760
|
+
return this.getYear().isEqual(other.getYear());
|
|
761
|
+
}
|
|
762
|
+
getCalendarDay() {
|
|
763
|
+
return new CalendarDay(this);
|
|
764
|
+
}
|
|
765
|
+
getDay() {
|
|
766
|
+
return new Day(this.toDate().getUTCDate());
|
|
767
|
+
}
|
|
768
|
+
getMonth() {
|
|
769
|
+
return new Month(this.toDate().getUTCMonth() + 1);
|
|
770
|
+
}
|
|
771
|
+
getYear() {
|
|
772
|
+
return new Year(this.toDate().getUTCFullYear());
|
|
773
|
+
}
|
|
774
|
+
getHours() {
|
|
775
|
+
return this.toDate().getUTCHours();
|
|
776
|
+
}
|
|
777
|
+
getMinutes() {
|
|
778
|
+
return this.toDate().getUTCMinutes();
|
|
779
|
+
}
|
|
780
|
+
getSeconds() {
|
|
781
|
+
return this.toDate().getUTCSeconds();
|
|
782
|
+
}
|
|
783
|
+
getMilliseconds() {
|
|
784
|
+
return this.toDate().getUTCMilliseconds();
|
|
785
|
+
}
|
|
786
|
+
getDayOfWeek() {
|
|
787
|
+
return this.toDate().getUTCDay();
|
|
788
|
+
}
|
|
789
|
+
getMonthOfYear() {
|
|
790
|
+
return new MonthOfYear(this.getMonth(), this.getYear());
|
|
791
|
+
}
|
|
792
|
+
};
|
|
793
|
+
//#endregion
|
|
794
|
+
//#region src/value-objects/PositiveNumber.ts
|
|
795
|
+
var PositiveNumber = class extends NumberValueObject {
|
|
796
|
+
constructor(value) {
|
|
797
|
+
super(value?.valueOf());
|
|
798
|
+
if (NullObject.isNullObject(this)) return this;
|
|
799
|
+
this.ensureIsPositive(this.value);
|
|
800
|
+
}
|
|
801
|
+
ensureIsPositive(value) {
|
|
802
|
+
assert(value >= 0, new InvalidPositiveNumberError());
|
|
803
|
+
}
|
|
804
|
+
};
|
|
805
|
+
//#endregion
|
|
806
|
+
//#region src/value-objects/time/Duration.ts
|
|
807
|
+
var Duration = class Duration extends NumberValueObject {
|
|
808
|
+
static MILLISECOND_FACTOR = 1e3;
|
|
809
|
+
static SECOND_UNITS = {
|
|
810
|
+
DAYS: 86400,
|
|
811
|
+
HOURS: 3600,
|
|
812
|
+
MINUTES: 60,
|
|
813
|
+
MONTHS: 2592e3,
|
|
814
|
+
SECONDS: 1,
|
|
815
|
+
WEEKS: 604800,
|
|
816
|
+
YEARS: 31536e3
|
|
817
|
+
};
|
|
818
|
+
static millisecondFactors = {
|
|
819
|
+
DAYS: new NumberValueObject(this.SECOND_UNITS.DAYS * this.MILLISECOND_FACTOR),
|
|
820
|
+
HOURS: new NumberValueObject(this.SECOND_UNITS.HOURS * this.MILLISECOND_FACTOR),
|
|
821
|
+
MINUTES: new NumberValueObject(this.SECOND_UNITS.MINUTES * this.MILLISECOND_FACTOR),
|
|
822
|
+
MONTHS: new NumberValueObject(this.SECOND_UNITS.MONTHS * this.MILLISECOND_FACTOR),
|
|
823
|
+
SECONDS: new NumberValueObject(this.SECOND_UNITS.SECONDS * this.MILLISECOND_FACTOR),
|
|
824
|
+
WEEKS: new NumberValueObject(this.SECOND_UNITS.WEEKS * this.MILLISECOND_FACTOR),
|
|
825
|
+
YEARS: new NumberValueObject(this.SECOND_UNITS.YEARS * this.MILLISECOND_FACTOR)
|
|
826
|
+
};
|
|
827
|
+
static fromDays(days) {
|
|
828
|
+
return new Duration(new NumberValueObject(days.valueOf()).multiply(this.millisecondFactors.DAYS));
|
|
829
|
+
}
|
|
830
|
+
static fromHours(hours) {
|
|
831
|
+
return new Duration(new NumberValueObject(hours.valueOf()).multiply(this.millisecondFactors.HOURS));
|
|
832
|
+
}
|
|
833
|
+
static fromMinutes(minutes) {
|
|
834
|
+
return new Duration(new NumberValueObject(minutes.valueOf()).multiply(this.millisecondFactors.MINUTES));
|
|
835
|
+
}
|
|
836
|
+
static fromSeconds(seconds) {
|
|
837
|
+
return new Duration(new NumberValueObject(seconds.valueOf()).multiply(this.millisecondFactors.SECONDS));
|
|
838
|
+
}
|
|
839
|
+
static fromMilliseconds(milliseconds) {
|
|
840
|
+
return new Duration(new NumberValueObject(milliseconds.valueOf()));
|
|
841
|
+
}
|
|
842
|
+
constructor(milliseconds) {
|
|
843
|
+
super(milliseconds.valueOf());
|
|
844
|
+
}
|
|
845
|
+
getTotalDays() {
|
|
846
|
+
return new Duration(this).divide(Duration.millisecondFactors.DAYS);
|
|
847
|
+
}
|
|
848
|
+
getTotalHours() {
|
|
849
|
+
return new Duration(this).divide(Duration.millisecondFactors.HOURS);
|
|
850
|
+
}
|
|
851
|
+
getTotalMinutes() {
|
|
852
|
+
return new Duration(this).divide(Duration.millisecondFactors.MINUTES);
|
|
853
|
+
}
|
|
854
|
+
getTotalSeconds() {
|
|
855
|
+
return new Duration(this).divide(Duration.millisecondFactors.SECONDS);
|
|
856
|
+
}
|
|
857
|
+
getTotalMilliseconds() {
|
|
858
|
+
return new NumberValueObject(this.valueOf());
|
|
859
|
+
}
|
|
860
|
+
getDays() {
|
|
861
|
+
return new NumberValueObject(Math.floor(new Duration(this).divide(Duration.millisecondFactors.DAYS).valueOf()));
|
|
862
|
+
}
|
|
863
|
+
getHours() {
|
|
864
|
+
return new NumberValueObject(Math.floor(new Duration(this).divide(Duration.millisecondFactors.HOURS).valueOf()) % 24);
|
|
865
|
+
}
|
|
866
|
+
getMinutes() {
|
|
867
|
+
return new NumberValueObject(Math.floor(new Duration(this).divide(Duration.millisecondFactors.MINUTES).valueOf()) % Duration.SECOND_UNITS.MINUTES);
|
|
868
|
+
}
|
|
869
|
+
getSeconds() {
|
|
870
|
+
return new NumberValueObject(Math.floor(new Duration(this).divide(Duration.millisecondFactors.SECONDS).valueOf()) % Duration.SECOND_UNITS.MINUTES);
|
|
871
|
+
}
|
|
872
|
+
getMilliseconds() {
|
|
873
|
+
return new NumberValueObject(Math.floor(new Duration(this).valueOf()) % Duration.MILLISECOND_FACTOR);
|
|
874
|
+
}
|
|
875
|
+
};
|
|
876
|
+
//#endregion
|
|
877
|
+
//#region src/value-objects/time/TimestampInterval.ts
|
|
878
|
+
var TimestampInterval = class TimestampInterval extends ValueObject {
|
|
879
|
+
start;
|
|
880
|
+
end;
|
|
881
|
+
static fromPrimitives(primitives) {
|
|
882
|
+
return new TimestampInterval(new Timestamp(primitives.start), new Timestamp(primitives.end));
|
|
883
|
+
}
|
|
884
|
+
constructor(start, end) {
|
|
885
|
+
super(`${start.valueOf()}-${end.valueOf()}`);
|
|
886
|
+
this.start = start;
|
|
887
|
+
this.end = end;
|
|
888
|
+
assert(start.isBeforeOrEqual(end), new InvalidTimestampIntervalError(start, end));
|
|
889
|
+
}
|
|
890
|
+
toPrimitives() {
|
|
891
|
+
return {
|
|
892
|
+
end: this.end.valueOf(),
|
|
893
|
+
start: this.start.valueOf()
|
|
894
|
+
};
|
|
895
|
+
}
|
|
896
|
+
getStart() {
|
|
897
|
+
return this.start;
|
|
898
|
+
}
|
|
899
|
+
getEnd() {
|
|
900
|
+
return this.end;
|
|
901
|
+
}
|
|
902
|
+
getDuration() {
|
|
903
|
+
return new Duration(new PositiveNumber(this.end.valueOf() - this.start.valueOf()));
|
|
904
|
+
}
|
|
905
|
+
getTotalDaysOfWeek(dayOfWeek) {
|
|
906
|
+
const daysToCheck = Math.trunc(this.getDuration().valueOf() / 864e5);
|
|
907
|
+
let count = 0;
|
|
908
|
+
for (let daysChecked = 0; daysChecked <= daysToCheck; daysChecked++) if (new Timestamp(this.start).addDays(daysChecked).getDayOfWeek() === dayOfWeek.toNumber()) count++;
|
|
909
|
+
return count;
|
|
910
|
+
}
|
|
911
|
+
getDaysBetweenInterval() {
|
|
912
|
+
const days = [];
|
|
913
|
+
let iteratorTimestamp = new Timestamp(this.getStart());
|
|
914
|
+
const endTimestamp = new Timestamp(this.getEnd());
|
|
915
|
+
while (iteratorTimestamp.isBeforeOrEqual(endTimestamp)) {
|
|
916
|
+
days.push(new CalendarDay(iteratorTimestamp));
|
|
917
|
+
iteratorTimestamp = iteratorTimestamp.addDays(1);
|
|
918
|
+
}
|
|
919
|
+
return days;
|
|
920
|
+
}
|
|
921
|
+
getOverlappingInterval(searchInterval) {
|
|
922
|
+
const start = this.start.isAfter(searchInterval.getStart()) ? this.start : searchInterval.getStart();
|
|
923
|
+
const end = this.end.isBefore(searchInterval.getEnd()) ? this.end : searchInterval.getEnd();
|
|
924
|
+
if (start.isAfterOrEqual(end)) return null;
|
|
925
|
+
return new TimestampInterval(start, end);
|
|
926
|
+
}
|
|
927
|
+
includes(timestamp) {
|
|
928
|
+
return timestamp.isAfterOrEqual(this.start) && timestamp.isBeforeOrEqual(this.end);
|
|
929
|
+
}
|
|
930
|
+
};
|
|
931
|
+
//#endregion
|
|
932
|
+
//#region src/value-objects/time/MonthOfYear.ts
|
|
933
|
+
var MonthOfYear = class MonthOfYear extends ValueObject {
|
|
934
|
+
month;
|
|
935
|
+
year;
|
|
936
|
+
static fromTimestamp(timestamp) {
|
|
937
|
+
return new MonthOfYear(timestamp.getMonth(), timestamp.getYear());
|
|
938
|
+
}
|
|
939
|
+
static fromString(value) {
|
|
940
|
+
const [year, month] = value.split("/").map(Number);
|
|
941
|
+
return new MonthOfYear(month, year);
|
|
942
|
+
}
|
|
943
|
+
constructor(month, year) {
|
|
944
|
+
super(year.valueOf().toString() + "/" + month.valueOf().toString().padStart(2, "0"));
|
|
945
|
+
this.month = new Month(month.valueOf());
|
|
946
|
+
this.year = new Year(year.valueOf());
|
|
947
|
+
}
|
|
948
|
+
getMonth() {
|
|
949
|
+
return new Month(this.month.valueOf());
|
|
950
|
+
}
|
|
951
|
+
getYear() {
|
|
952
|
+
return new Year(this.year);
|
|
953
|
+
}
|
|
954
|
+
getNumberOfDays() {
|
|
955
|
+
return new Date(this.year.valueOf(), this.month.valueOf(), 0).getDate();
|
|
956
|
+
}
|
|
957
|
+
getTimestampInterval() {
|
|
958
|
+
const firstMonthDay = "01";
|
|
959
|
+
const month = this.month.valueOf().toString().padStart(2, "0");
|
|
960
|
+
const lastDay = this.getNumberOfDays().toString();
|
|
961
|
+
return new TimestampInterval(new Timestamp(`${this.year}-${month}-${firstMonthDay}`), new Timestamp(`${this.year}-${month}-${lastDay}`));
|
|
962
|
+
}
|
|
963
|
+
};
|
|
964
|
+
//#endregion
|
|
965
|
+
//#region src/value-objects/time/CalendarDay.ts
|
|
966
|
+
var CalendarDay = class CalendarDay extends ValueObject {
|
|
967
|
+
year;
|
|
968
|
+
month;
|
|
969
|
+
day;
|
|
970
|
+
static ensureIsValidString(value) {
|
|
971
|
+
assert(value.match(/^\d{4}-\d{1,2}-\d{1,2}$/), new InvalidDayFormatError(value));
|
|
972
|
+
}
|
|
973
|
+
static generateStringValue(timestamp) {
|
|
974
|
+
const paddedMonth = timestamp.getMonth().toString().padStart(2, "0");
|
|
975
|
+
const paddedDay = timestamp.getDay().toString().padStart(2, "0");
|
|
976
|
+
return `${timestamp.getYear().toString()}-${paddedMonth}-${paddedDay}`;
|
|
977
|
+
}
|
|
978
|
+
static ensureIsValidDate(value) {
|
|
979
|
+
assert(Number.isFinite(value.valueOf()), new InvalidDayError(value));
|
|
980
|
+
}
|
|
981
|
+
static timestampFromString(value) {
|
|
982
|
+
CalendarDay.ensureIsValidString(value);
|
|
983
|
+
const [year, month, day] = value.split("-").map(Number);
|
|
984
|
+
const date = /* @__PURE__ */ new Date(0);
|
|
985
|
+
date.setUTCHours(0, 0, 0, 0);
|
|
986
|
+
date.setUTCFullYear(year, month - 1, day);
|
|
987
|
+
assert(date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day, new InvalidDayError(value));
|
|
988
|
+
return new Timestamp(date);
|
|
989
|
+
}
|
|
990
|
+
static timestampFromValue(value) {
|
|
991
|
+
if (typeof value === "string") return CalendarDay.timestampFromString(value);
|
|
992
|
+
CalendarDay.ensureIsValidDate(value);
|
|
993
|
+
return new Timestamp(value);
|
|
994
|
+
}
|
|
995
|
+
constructor(value) {
|
|
996
|
+
let timestamp;
|
|
997
|
+
if (value !== void 0) timestamp = CalendarDay.timestampFromValue(value);
|
|
998
|
+
else timestamp = new Timestamp();
|
|
999
|
+
super(CalendarDay.generateStringValue(timestamp));
|
|
1000
|
+
this.year = timestamp.getYear().valueOf();
|
|
1001
|
+
this.month = timestamp.getMonth().getIndex() + 1;
|
|
1002
|
+
this.day = timestamp.getDay().valueOf();
|
|
1003
|
+
}
|
|
1004
|
+
isAfter(date) {
|
|
1005
|
+
return this.valueOf() > date.valueOf();
|
|
1006
|
+
}
|
|
1007
|
+
isBefore(date) {
|
|
1008
|
+
return this.valueOf() < date.valueOf();
|
|
1009
|
+
}
|
|
1010
|
+
getYear() {
|
|
1011
|
+
return this.year;
|
|
1012
|
+
}
|
|
1013
|
+
getMonth() {
|
|
1014
|
+
return new Month(this.month);
|
|
1015
|
+
}
|
|
1016
|
+
getMonthOfYear() {
|
|
1017
|
+
return new MonthOfYear(this.month, this.year);
|
|
1018
|
+
}
|
|
1019
|
+
getDay() {
|
|
1020
|
+
return new Day(this.day);
|
|
1021
|
+
}
|
|
1022
|
+
getDayOfWeek() {
|
|
1023
|
+
return DayOfWeek.fromNumber(this.toTimestamp().getDayOfWeek());
|
|
1024
|
+
}
|
|
1025
|
+
toTimestamp() {
|
|
1026
|
+
const date = /* @__PURE__ */ new Date(0);
|
|
1027
|
+
date.setUTCHours(0, 0, 0, 0);
|
|
1028
|
+
date.setUTCFullYear(this.year, this.month - 1, this.day);
|
|
1029
|
+
return new Timestamp(date);
|
|
1030
|
+
}
|
|
1031
|
+
};
|
|
1032
|
+
//#endregion
|
|
1033
|
+
//#region src/value-objects/time/Hour.ts
|
|
1034
|
+
var Hour = class Hour extends StringValueObject {
|
|
1035
|
+
minutes;
|
|
1036
|
+
hours;
|
|
1037
|
+
static addTrailZero(value) {
|
|
1038
|
+
return value < 10 ? `0${value}` : value.toString();
|
|
1039
|
+
}
|
|
1040
|
+
static normalizeMinutes(totalMinutes) {
|
|
1041
|
+
const minutesPerDay = 1440;
|
|
1042
|
+
return (totalMinutes % minutesPerDay + minutesPerDay) % minutesPerDay;
|
|
1043
|
+
}
|
|
1044
|
+
static parseFromNumber(value, minutes) {
|
|
1045
|
+
assert(Number.isInteger(value) && value >= 0 && value <= 23, new InvalidHourError());
|
|
1046
|
+
assert(Number.isInteger(minutes) && minutes >= 0 && minutes <= 59, new InvalidMinutesError());
|
|
1047
|
+
return [Hour.addTrailZero(value), Hour.addTrailZero(minutes)];
|
|
1048
|
+
}
|
|
1049
|
+
static parseFromString(value) {
|
|
1050
|
+
const parts = value.split(":");
|
|
1051
|
+
assert(parts.length === 2 && parts[1] !== "", new InvalidHourError());
|
|
1052
|
+
const [hours, minutes] = parts;
|
|
1053
|
+
assert(/^\d{1,2}$/.test(hours), new InvalidHourError());
|
|
1054
|
+
assert(/^\d{1,2}$/.test(minutes), new InvalidMinutesError());
|
|
1055
|
+
const parsedHours = Number(hours);
|
|
1056
|
+
const parsedMinutes = Number(minutes);
|
|
1057
|
+
assert(parsedHours >= 0 && parsedHours <= 23, new InvalidHourError());
|
|
1058
|
+
assert(parsedMinutes >= 0 && parsedMinutes <= 59, new InvalidMinutesError());
|
|
1059
|
+
return [Hour.addTrailZero(parsedHours), Hour.addTrailZero(parsedMinutes)];
|
|
1060
|
+
}
|
|
1061
|
+
constructor(value, minutes) {
|
|
1062
|
+
const [parsedHours, parsedMinutes] = typeof value === "number" && minutes !== void 0 ? Hour.parseFromNumber(value, minutes) : Hour.parseFromString(value);
|
|
1063
|
+
super(`${parsedHours}:${parsedMinutes}`);
|
|
1064
|
+
this.hours = parsedHours;
|
|
1065
|
+
this.minutes = parsedMinutes;
|
|
1066
|
+
}
|
|
1067
|
+
addMinutes(minutes) {
|
|
1068
|
+
const currentMinutes = Number(this.hours) * 60 + Number(this.minutes);
|
|
1069
|
+
const normalizedMinutes = Hour.normalizeMinutes(currentMinutes + minutes);
|
|
1070
|
+
const newHour = Math.floor(normalizedMinutes / 60);
|
|
1071
|
+
const newMinutes = normalizedMinutes % 60;
|
|
1072
|
+
return new Hour(newHour, newMinutes);
|
|
1073
|
+
}
|
|
1074
|
+
diffInMinutes(other) {
|
|
1075
|
+
let endHour = Number(other.hours);
|
|
1076
|
+
if (other.hours < this.hours || other.hours === this.hours && other.minutes < this.minutes) endHour += 24;
|
|
1077
|
+
return (endHour - Number(this.hours)) * 60 + (Number(other.minutes) - Number(this.minutes));
|
|
1078
|
+
}
|
|
1079
|
+
getMinutes() {
|
|
1080
|
+
return Number(this.minutes);
|
|
1081
|
+
}
|
|
1082
|
+
getHours() {
|
|
1083
|
+
return Number(this.hours);
|
|
1084
|
+
}
|
|
1085
|
+
isGreaterThan(hour) {
|
|
1086
|
+
if (this.hours === hour.hours) return Number(this.minutes) > Number(hour.minutes);
|
|
1087
|
+
return Number(this.hours) > Number(hour.hours);
|
|
1088
|
+
}
|
|
1089
|
+
isLessThan(hour) {
|
|
1090
|
+
if (this.hours === hour.hours) return Number(this.minutes) < Number(hour.minutes);
|
|
1091
|
+
return Number(this.hours) < Number(hour.hours);
|
|
1092
|
+
}
|
|
1093
|
+
};
|
|
1094
|
+
//#endregion
|
|
1095
|
+
//#region src/value-objects/Color.ts
|
|
1096
|
+
var Color = class Color extends StringValueObject {
|
|
1097
|
+
static RED = new Color("#FF0000");
|
|
1098
|
+
static GREEN = new Color("#00FF00");
|
|
1099
|
+
static BLUE = new Color("#0000FF");
|
|
1100
|
+
static BLACK = new Color("#000000");
|
|
1101
|
+
static WHITE = new Color("#FFFFFF");
|
|
1102
|
+
static YELLOW = new Color("#FFFF00");
|
|
1103
|
+
static CYAN = new Color("#00FFFF");
|
|
1104
|
+
static MAGENTA = new Color("#FF00FF");
|
|
1105
|
+
static ORANGE = new Color("#FFA500");
|
|
1106
|
+
static PURPLE = new Color("#800080");
|
|
1107
|
+
static PINK = new Color("#FFC0CB");
|
|
1108
|
+
static BROWN = new Color("#A52A2A");
|
|
1109
|
+
constructor(value) {
|
|
1110
|
+
super(value?.valueOf());
|
|
1111
|
+
if (NullObject.isNullObject(this)) return this;
|
|
1112
|
+
this.ensureIsValidColor();
|
|
1113
|
+
}
|
|
1114
|
+
ensureIsValidColor() {
|
|
1115
|
+
assert(/^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/.test(this.value), new InvalidColorError(this.value));
|
|
1116
|
+
}
|
|
1117
|
+
hasValue(other) {
|
|
1118
|
+
const otherValue = other instanceof ValueObject ? other.valueOf() : other;
|
|
1119
|
+
return typeof otherValue === "string" && this.value.toLowerCase() === otherValue.toLowerCase();
|
|
1120
|
+
}
|
|
1121
|
+
};
|
|
1122
|
+
//#endregion
|
|
1123
|
+
//#region src/value-objects/Email.ts
|
|
1124
|
+
var Email = class Email extends StringValueObject {
|
|
1125
|
+
static PATTERN = /^[\w+\-.!#$%&'*/=?^`{|}~]+@(?:[\w-]+\.)+(?:[a-z]{2,63}|xn--[a-z0-9](?:[a-z0-9-]{0,57}[a-z0-9])?)$/i;
|
|
1126
|
+
constructor(value) {
|
|
1127
|
+
super(value?.valueOf());
|
|
1128
|
+
if (NullObject.isNullObject(this)) return this;
|
|
1129
|
+
this.ensureIsValidEmail(this.value);
|
|
1130
|
+
}
|
|
1131
|
+
ensureIsValidEmail(value) {
|
|
1132
|
+
assert(Email.PATTERN.test(value), new InvalidEmailError(value));
|
|
1133
|
+
}
|
|
1134
|
+
};
|
|
1135
|
+
//#endregion
|
|
1136
|
+
//#region src/value-objects/Password.ts
|
|
1137
|
+
var Password = class Password extends StringValueObject {
|
|
1138
|
+
static MAX_LENGTH = 256;
|
|
1139
|
+
static MIN_LENGTH = 12;
|
|
1140
|
+
constructor(value) {
|
|
1141
|
+
super(value);
|
|
1142
|
+
if (NullObject.isNullObject(this)) return this;
|
|
1143
|
+
assert(this.isValidPassword(), new InvalidPasswordError(Password.MIN_LENGTH, Password.MAX_LENGTH));
|
|
1144
|
+
}
|
|
1145
|
+
isValidPassword() {
|
|
1146
|
+
return this.value.length >= Password.MIN_LENGTH && this.value.length <= Password.MAX_LENGTH && /[A-Z]/.test(this.value) && /[a-z]/.test(this.value) && /[0-9]/.test(this.value) && /[^A-Za-z0-9]/.test(this.value);
|
|
1147
|
+
}
|
|
1148
|
+
};
|
|
1149
|
+
//#endregion
|
|
1150
|
+
//#region src/value-objects/UniqueObjectArray.ts
|
|
1151
|
+
var UniqueObjectArray = class UniqueObjectArray {
|
|
1152
|
+
items = [];
|
|
1153
|
+
static fromArray(array) {
|
|
1154
|
+
const uniqueArray = new UniqueObjectArray();
|
|
1155
|
+
for (const item of array) uniqueArray.push(item);
|
|
1156
|
+
return uniqueArray;
|
|
1157
|
+
}
|
|
1158
|
+
includes(item) {
|
|
1159
|
+
return this.items.some((one) => one.isEqual(item));
|
|
1160
|
+
}
|
|
1161
|
+
push(item) {
|
|
1162
|
+
if (!this.includes(item)) {
|
|
1163
|
+
this.items.push(item);
|
|
1164
|
+
return true;
|
|
1165
|
+
}
|
|
1166
|
+
return false;
|
|
1167
|
+
}
|
|
1168
|
+
remove(item) {
|
|
1169
|
+
const index = this.items.findIndex((one) => one.isEqual(item));
|
|
1170
|
+
if (index !== -1) {
|
|
1171
|
+
this.items.splice(index, 1);
|
|
1172
|
+
return true;
|
|
1173
|
+
}
|
|
1174
|
+
return false;
|
|
1175
|
+
}
|
|
1176
|
+
[Symbol.iterator]() {
|
|
1177
|
+
return this.items[Symbol.iterator]();
|
|
1178
|
+
}
|
|
1179
|
+
length() {
|
|
1180
|
+
return this.items.length;
|
|
1181
|
+
}
|
|
1182
|
+
toArray() {
|
|
1183
|
+
return Array.from(this.items);
|
|
1184
|
+
}
|
|
1185
|
+
};
|
|
1186
|
+
//#endregion
|
|
1187
|
+
exports.BaseError = BaseError;
|
|
1188
|
+
exports.CalendarDay = CalendarDay;
|
|
1189
|
+
exports.Color = Color;
|
|
1190
|
+
exports.Coordinates = Coordinates;
|
|
1191
|
+
exports.Day = Day;
|
|
1192
|
+
exports.DayOfWeek = DayOfWeek;
|
|
1193
|
+
exports.DomainError = DomainError;
|
|
1194
|
+
exports.Duration = Duration;
|
|
1195
|
+
exports.EDaysOfWeek = EDaysOfWeek;
|
|
1196
|
+
exports.Email = Email;
|
|
1197
|
+
exports.Enum = Enum;
|
|
1198
|
+
exports.Hash = Hash;
|
|
1199
|
+
exports.Hour = Hour;
|
|
1200
|
+
exports.Integer = Integer;
|
|
1201
|
+
exports.InvalidColorError = InvalidColorError;
|
|
1202
|
+
exports.InvalidDayError = InvalidDayError;
|
|
1203
|
+
exports.InvalidDayFormatError = InvalidDayFormatError;
|
|
1204
|
+
exports.InvalidEmailError = InvalidEmailError;
|
|
1205
|
+
exports.InvalidFormatError = InvalidFormatError;
|
|
1206
|
+
exports.InvalidHashError = InvalidHashError;
|
|
1207
|
+
exports.InvalidHourError = InvalidHourError;
|
|
1208
|
+
exports.InvalidIntegerError = InvalidIntegerError;
|
|
1209
|
+
exports.InvalidLatitudeError = InvalidLatitudeError;
|
|
1210
|
+
exports.InvalidLengthError = InvalidLengthError;
|
|
1211
|
+
exports.InvalidLongitudeError = InvalidLongitudeError;
|
|
1212
|
+
exports.InvalidMinutesError = InvalidMinutesError;
|
|
1213
|
+
exports.InvalidNumberError = InvalidNumberError;
|
|
1214
|
+
exports.InvalidPasswordError = InvalidPasswordError;
|
|
1215
|
+
exports.InvalidPositiveNumberError = InvalidPositiveNumberError;
|
|
1216
|
+
exports.InvalidStringLengthError = InvalidStringLengthError;
|
|
1217
|
+
exports.InvalidTimestampIntervalError = InvalidTimestampIntervalError;
|
|
1218
|
+
exports.Latitude = Latitude;
|
|
1219
|
+
exports.Longitude = Longitude;
|
|
1220
|
+
exports.MD5Hash = MD5Hash;
|
|
1221
|
+
exports.Media = Media;
|
|
1222
|
+
exports.Month = Month;
|
|
1223
|
+
exports.MonthOfYear = MonthOfYear;
|
|
1224
|
+
exports.NullObject = NullObject;
|
|
1225
|
+
exports.NullObjectCreationDisabledError = NullObjectCreationDisabledError;
|
|
1226
|
+
exports.NullObjectError = NullObjectError;
|
|
1227
|
+
exports.NumberValueObject = NumberValueObject;
|
|
1228
|
+
exports.Password = Password;
|
|
1229
|
+
exports.PositiveNumber = PositiveNumber;
|
|
1230
|
+
exports.SHA256Hash = SHA256Hash;
|
|
1231
|
+
exports.SHA512Hash = SHA512Hash;
|
|
1232
|
+
exports.ShortId = ShortId;
|
|
1233
|
+
exports.StringValueObject = StringValueObject;
|
|
1234
|
+
exports.Timestamp = Timestamp;
|
|
1235
|
+
exports.TimestampInterval = TimestampInterval;
|
|
1236
|
+
exports.UUID = UUID;
|
|
1237
|
+
exports.UniqueObjectArray = UniqueObjectArray;
|
|
1238
|
+
exports.ValueNotInEnumError = ValueNotInEnumError;
|
|
1239
|
+
exports.ValueObject = ValueObject;
|
|
1240
|
+
exports.Year = Year;
|
|
1241
|
+
exports.assert = assert;
|
|
1242
|
+
exports.timeStampDayToDaysMap = timeStampDayToDaysMap;
|
|
1243
|
+
|
|
1244
|
+
//# sourceMappingURL=index.cjs.map
|