@haskou/value-objects 4.1.0 → 5.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 +78 -176
- package/dist/errors/InvalidPasswordError.d.ts +5 -0
- package/dist/errors/InvalidPasswordError.d.ts.map +1 -0
- package/dist/errors/InvalidPasswordError.js +11 -0
- package/dist/errors/InvalidPasswordError.js.map +1 -0
- package/dist/errors/index.d.ts +1 -2
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +1 -2
- package/dist/errors/index.js.map +1 -1
- package/dist/interfaces/PrimitiveOf.d.ts +5 -1
- package/dist/interfaces/PrimitiveOf.d.ts.map +1 -1
- package/dist/patterns/Assert.d.ts +1 -1
- package/dist/patterns/Assert.d.ts.map +1 -1
- package/dist/types/Primitive.d.ts +1 -1
- package/dist/types/Primitive.d.ts.map +1 -1
- package/dist/value-objects/Email.d.ts +1 -0
- package/dist/value-objects/Email.d.ts.map +1 -1
- package/dist/value-objects/Email.js +2 -1
- package/dist/value-objects/Email.js.map +1 -1
- package/dist/value-objects/Enum.d.ts +1 -1
- package/dist/value-objects/Enum.d.ts.map +1 -1
- package/dist/value-objects/Enum.js.map +1 -1
- package/dist/value-objects/NumberValueObject.js +1 -1
- package/dist/value-objects/NumberValueObject.js.map +1 -1
- package/dist/value-objects/Password.d.ts +8 -0
- package/dist/value-objects/Password.d.ts.map +1 -0
- package/dist/value-objects/Password.js +28 -0
- package/dist/value-objects/Password.js.map +1 -0
- package/dist/value-objects/UniqueObjectArray.d.ts.map +1 -1
- package/dist/value-objects/coordinates/Latitude.d.ts.map +1 -1
- package/dist/value-objects/coordinates/Latitude.js +5 -4
- package/dist/value-objects/coordinates/Latitude.js.map +1 -1
- package/dist/value-objects/coordinates/Longitude.d.ts.map +1 -1
- package/dist/value-objects/coordinates/Longitude.js +5 -4
- package/dist/value-objects/coordinates/Longitude.js.map +1 -1
- package/dist/value-objects/hashes/MD5Hash.d.ts +0 -3
- package/dist/value-objects/hashes/MD5Hash.d.ts.map +1 -1
- package/dist/value-objects/hashes/MD5Hash.js +0 -4
- package/dist/value-objects/hashes/MD5Hash.js.map +1 -1
- package/dist/value-objects/hashes/SHA256Hash.d.ts +0 -3
- package/dist/value-objects/hashes/SHA256Hash.d.ts.map +1 -1
- package/dist/value-objects/hashes/SHA256Hash.js +0 -4
- package/dist/value-objects/hashes/SHA256Hash.js.map +1 -1
- package/dist/value-objects/hashes/SHA512Hash.d.ts +0 -3
- package/dist/value-objects/hashes/SHA512Hash.d.ts.map +1 -1
- package/dist/value-objects/hashes/SHA512Hash.js +0 -4
- package/dist/value-objects/hashes/SHA512Hash.js.map +1 -1
- package/dist/value-objects/ids/ShortId.d.ts +2 -0
- package/dist/value-objects/ids/ShortId.d.ts.map +1 -1
- package/dist/value-objects/ids/ShortId.js +12 -3
- package/dist/value-objects/ids/ShortId.js.map +1 -1
- package/dist/value-objects/ids/UUID.d.ts +3 -0
- package/dist/value-objects/ids/UUID.d.ts.map +1 -1
- package/dist/value-objects/ids/UUID.js +23 -4
- package/dist/value-objects/ids/UUID.js.map +1 -1
- package/dist/value-objects/index.d.ts +1 -1
- package/dist/value-objects/index.d.ts.map +1 -1
- package/dist/value-objects/index.js +1 -1
- package/dist/value-objects/index.js.map +1 -1
- package/dist/value-objects/media/Media.d.ts +2 -0
- package/dist/value-objects/media/Media.d.ts.map +1 -1
- package/dist/value-objects/media/Media.js +14 -1
- package/dist/value-objects/media/Media.js.map +1 -1
- package/dist/value-objects/time/CalendarDay.d.ts +2 -1
- package/dist/value-objects/time/CalendarDay.d.ts.map +1 -1
- package/dist/value-objects/time/CalendarDay.js +25 -11
- package/dist/value-objects/time/CalendarDay.js.map +1 -1
- package/dist/value-objects/time/DayOfWeek.d.ts.map +1 -1
- package/dist/value-objects/time/DayOfWeek.js +2 -3
- package/dist/value-objects/time/DayOfWeek.js.map +1 -1
- package/dist/value-objects/time/Duration.js +2 -2
- package/dist/value-objects/time/Duration.js.map +1 -1
- package/dist/value-objects/time/Hour.d.ts +3 -0
- package/dist/value-objects/time/Hour.d.ts.map +1 -1
- package/dist/value-objects/time/Hour.js +30 -31
- package/dist/value-objects/time/Hour.js.map +1 -1
- package/dist/value-objects/time/Timestamp.d.ts +3 -0
- package/dist/value-objects/time/Timestamp.d.ts.map +1 -1
- package/dist/value-objects/time/Timestamp.js +50 -6
- package/dist/value-objects/time/Timestamp.js.map +1 -1
- package/dist/value-objects/time/TimestampInterval.d.ts +2 -4
- package/dist/value-objects/time/TimestampInterval.d.ts.map +1 -1
- package/dist/value-objects/time/TimestampInterval.js +0 -10
- package/dist/value-objects/time/TimestampInterval.js.map +1 -1
- package/package.json +50 -33
- package/dist/errors/InvalidKeyError.d.ts +0 -5
- package/dist/errors/InvalidKeyError.d.ts.map +0 -1
- package/dist/errors/InvalidKeyError.js +0 -11
- package/dist/errors/InvalidKeyError.js.map +0 -1
- package/dist/errors/InvalidSignatureError.d.ts +0 -5
- package/dist/errors/InvalidSignatureError.d.ts.map +0 -1
- package/dist/errors/InvalidSignatureError.js +0 -11
- package/dist/errors/InvalidSignatureError.js.map +0 -1
- package/dist/value-objects/crypto/CryptoAdapter.d.ts +0 -30
- package/dist/value-objects/crypto/CryptoAdapter.d.ts.map +0 -1
- package/dist/value-objects/crypto/CryptoAdapter.js +0 -96
- package/dist/value-objects/crypto/CryptoAdapter.js.map +0 -1
- package/dist/value-objects/crypto/CryptoPayload.d.ts +0 -5
- package/dist/value-objects/crypto/CryptoPayload.d.ts.map +0 -1
- package/dist/value-objects/crypto/CryptoPayload.js +0 -3
- package/dist/value-objects/crypto/CryptoPayload.js.map +0 -1
- package/dist/value-objects/crypto/EncryptedKeyPair.d.ts +0 -25
- package/dist/value-objects/crypto/EncryptedKeyPair.d.ts.map +0 -1
- package/dist/value-objects/crypto/EncryptedKeyPair.js +0 -42
- package/dist/value-objects/crypto/EncryptedKeyPair.js.map +0 -1
- package/dist/value-objects/crypto/EncryptedPayload.d.ts +0 -4
- package/dist/value-objects/crypto/EncryptedPayload.d.ts.map +0 -1
- package/dist/value-objects/crypto/EncryptedPayload.js +0 -8
- package/dist/value-objects/crypto/EncryptedPayload.js.map +0 -1
- package/dist/value-objects/crypto/EncryptedPrivateKey.d.ts +0 -11
- package/dist/value-objects/crypto/EncryptedPrivateKey.d.ts.map +0 -1
- package/dist/value-objects/crypto/EncryptedPrivateKey.js +0 -37
- package/dist/value-objects/crypto/EncryptedPrivateKey.js.map +0 -1
- package/dist/value-objects/crypto/Key.d.ts +0 -4
- package/dist/value-objects/crypto/Key.d.ts.map +0 -1
- package/dist/value-objects/crypto/Key.js +0 -8
- package/dist/value-objects/crypto/Key.js.map +0 -1
- package/dist/value-objects/crypto/KeyPair.d.ts +0 -26
- package/dist/value-objects/crypto/KeyPair.d.ts.map +0 -1
- package/dist/value-objects/crypto/KeyPair.js +0 -45
- package/dist/value-objects/crypto/KeyPair.js.map +0 -1
- package/dist/value-objects/crypto/PrivateKey.d.ts +0 -19
- package/dist/value-objects/crypto/PrivateKey.d.ts.map +0 -1
- package/dist/value-objects/crypto/PrivateKey.js +0 -56
- package/dist/value-objects/crypto/PrivateKey.js.map +0 -1
- package/dist/value-objects/crypto/PublicKey.d.ts +0 -15
- package/dist/value-objects/crypto/PublicKey.d.ts.map +0 -1
- package/dist/value-objects/crypto/PublicKey.js +0 -54
- package/dist/value-objects/crypto/PublicKey.js.map +0 -1
- package/dist/value-objects/crypto/Signature.d.ts +0 -11
- package/dist/value-objects/crypto/Signature.d.ts.map +0 -1
- package/dist/value-objects/crypto/Signature.js +0 -26
- package/dist/value-objects/crypto/Signature.js.map +0 -1
- package/dist/value-objects/crypto/encrypted-private-key/CryptoDerivation.d.ts +0 -21
- package/dist/value-objects/crypto/encrypted-private-key/CryptoDerivation.d.ts.map +0 -1
- package/dist/value-objects/crypto/encrypted-private-key/CryptoDerivation.js +0 -56
- package/dist/value-objects/crypto/encrypted-private-key/CryptoDerivation.js.map +0 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyLegacy.d.ts +0 -14
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyLegacy.d.ts.map +0 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyLegacy.js +0 -33
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyLegacy.js.map +0 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.d.ts +0 -20
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.d.ts.map +0 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.js +0 -69
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.js.map +0 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyVersion.d.ts +0 -8
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyVersion.d.ts.map +0 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyVersion.js +0 -10
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyVersion.js.map +0 -1
- package/dist/value-objects/crypto/index.d.ts +0 -9
- package/dist/value-objects/crypto/index.d.ts.map +0 -1
- package/dist/value-objects/crypto/index.js +0 -12
- package/dist/value-objects/crypto/index.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,212 +1,114 @@
|
|
|
1
|
-
|
|
1
|
+
# @haskou/value-objects
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://github.com/haskou/value-objects/actions/workflows/ci.yml?query=branch%3Amaster)
|
|
4
|
+
[](https://codecov.io/gh/haskou/value-objects)
|
|
5
|
+
[](https://www.npmjs.com/package/@haskou/value-objects)
|
|
6
|
+
[](https://docs.renovatebot.com/)
|
|
7
|
+
[](LICENSE.txt)
|
|
4
8
|
|
|
5
|
-
A TypeScript
|
|
6
|
-
and validated **Value Objects**. Perfect for applications that require **Domain-Driven Design (DDD)** and **type safety**.
|
|
9
|
+
A TypeScript library for validated, immutable primitive wrappers and small utility value objects.
|
|
7
10
|
|
|
8
|
-
|
|
11
|
+
It provides ready-to-use objects for strings, numbers, identifiers, dates, coordinates, hashes, media, and collections. Validation happens when an object is created, so code receiving one of these objects can rely on its shape.
|
|
9
12
|
|
|
10
|
-
|
|
11
|
-
npm install @haskou/value-objects
|
|
12
|
-
```
|
|
13
|
+
Cryptographic operations are intentionally outside this package. Pigeon Swarm-specific cryptography lives in `@haskou/pigeon-swarm-crypto`; dependency direction is one-way, with the crypto package allowed to consume generic value-object representations and never the reverse.
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
import { Email, PositiveNumber, Color, Hour } from 'value-objects';
|
|
15
|
+
## Documentation
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
const email = new Email('user@example.com'); // Valid
|
|
19
|
-
const price = new PositiveNumber(29.99); // Valid
|
|
20
|
-
const color = new Color('#FF0000'); // Valid
|
|
21
|
-
const hour = new Hour('09:30'); // Valid
|
|
17
|
+
Full documentation is available at **https://haskou.github.io/value-objects/**.
|
|
22
18
|
|
|
23
|
-
|
|
24
|
-
const badEmail = new Email('not-an-email'); // Error!
|
|
25
|
-
const badPrice = new PositiveNumber(-5); // Error!
|
|
26
|
-
```
|
|
19
|
+
The documentation includes installation, quick start, examples, error handling, serialization notes, and one reference page per exported class.
|
|
27
20
|
|
|
28
|
-
|
|
21
|
+
Reusable agent instructions and engineering skills are available at **https://github.com/haskou/ddd-engineer-skills**.
|
|
29
22
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
if (!email.includes('@')) throw new Error('Invalid email');
|
|
35
|
-
if (age <= 0) throw new Error('Invalid age');
|
|
36
|
-
// Creation stuff
|
|
37
|
-
}
|
|
23
|
+
## Installation
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install @haskou/value-objects
|
|
38
27
|
```
|
|
39
28
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
function createUser(email: Email, age: PositiveNumber): void {
|
|
43
|
-
// If we get here, values ARE valid
|
|
44
|
-
// Creation stuff
|
|
45
|
-
}
|
|
29
|
+
```bash
|
|
30
|
+
yarn add @haskou/value-objects
|
|
46
31
|
```
|
|
47
32
|
|
|
48
|
-
|
|
49
|
-
since it implements Null Object pattern (see technical documentation).
|
|
50
|
-
Also value-objects can be modified easily keeping the same logic along
|
|
51
|
-
your application.
|
|
52
|
-
|
|
53
|
-
## 📦 Available Value Objects
|
|
54
|
-
|
|
55
|
-
### 🔤 Basic
|
|
56
|
-
- **`StringValueObject`** - Strings with length validation
|
|
57
|
-
- **`NumberValueObject`** - Numbers with math operations
|
|
58
|
-
- **`Integer`** - Whole numbers
|
|
59
|
-
- **`PositiveNumber`** - Positive numbers (> 0)
|
|
60
|
-
|
|
61
|
-
### 🆔 Identifiers
|
|
62
|
-
- **`ShortId`** - MongoDB ObjectId strings (24‑character hex)
|
|
63
|
-
- **`UUID`** - Universally Unique Identifier (v4)
|
|
64
|
-
|
|
65
|
-
### ✨ Specialized
|
|
66
|
-
- **`Email`** - Email addresses with automatic validation
|
|
67
|
-
- **`Color`** - Hex colors (#FF0000)
|
|
68
|
-
|
|
69
|
-
### 🕒 Time
|
|
70
|
-
- **`Hour`** - Time in 24h format (09:30)
|
|
71
|
-
- **`Year`** - Years with leap year calculations
|
|
72
|
-
- **`CalendarDay`** - Calendar days
|
|
73
|
-
- **`Day`** - Days of month (1-31)
|
|
74
|
-
- **`DayOfWeek`** - Days of the week
|
|
75
|
-
- **`Month`** - Months (1-12)
|
|
76
|
-
- **`MonthOfYear`** - Month/year combinations
|
|
77
|
-
- **`Timestamp`** - Timestamps with operations
|
|
78
|
-
- **`TimestampInterval`** - Time intervals
|
|
79
|
-
- **`Duration`** - Duration in milliseconds
|
|
80
|
-
|
|
81
|
-
### 🌍 Coordinates
|
|
82
|
-
- **`Latitude`** - Latitude (-90 to 90)
|
|
83
|
-
- **`Longitude`** - Longitude (-180 to 180)
|
|
84
|
-
- **`Coordinates`** - Coordinate pairs
|
|
85
|
-
|
|
86
|
-
### 🔐 Cryptography
|
|
87
|
-
- **`KeyPair`** - Ed25519 key pair generation, signing, and verification
|
|
88
|
-
- **`PrivateKey`** - Ed25519 private key (PEM format) with signing
|
|
89
|
-
- **`PublicKey`** - Ed25519 public key (PEM format) with signature verification
|
|
90
|
-
- **`Signature`** - Base64-encoded ed25519 digital signature
|
|
91
|
-
- **`EncryptedPrivateKey`** - AES-256-GCM encrypted private key (scrypt-based, password-protected)
|
|
92
|
-
- **`EncryptedKeyPair`** - Key pair with encrypted private key
|
|
93
|
-
|
|
94
|
-
### 📎 Media
|
|
95
|
-
- **`Media`** - Binary/string content with Buffer, size, and Base64 helpers
|
|
96
|
-
|
|
97
|
-
### #️ Hashes
|
|
98
|
-
- **`MD5Hash`** - MD5 hashes with helpers
|
|
99
|
-
- **`SHA256Hash`** - SHA‑256 hashes with helpers
|
|
100
|
-
- **`SHA512Hash`** - SHA‑512 hashes with helpers
|
|
101
|
-
|
|
102
|
-
### 📝 Other
|
|
103
|
-
- **`Enum`** - Base class for typed enumerations
|
|
104
|
-
- **`UniqueObjectArray`** - Iterable collection that keeps comparable items unique
|
|
105
|
-
|
|
106
|
-
## 💡 Basic Examples
|
|
33
|
+
## Quick start
|
|
107
34
|
|
|
108
35
|
```typescript
|
|
109
|
-
|
|
110
|
-
const name = new StringValueObject('John Doe');
|
|
111
|
-
const code = new StringValueObject('ABC', 3); // max 3 characters
|
|
112
|
-
|
|
113
|
-
// Numbers with operations
|
|
114
|
-
const price = new NumberValueObject(29.99);
|
|
115
|
-
const discount = new NumberValueObject(5.00);
|
|
116
|
-
const total = price.subtract(discount); // 24.99
|
|
36
|
+
import { Color, Email, Hour, PositiveNumber } from '@haskou/value-objects';
|
|
117
37
|
|
|
118
|
-
// Emails
|
|
119
38
|
const email = new Email('user@example.com');
|
|
120
|
-
|
|
39
|
+
const price = new PositiveNumber(29.99);
|
|
40
|
+
const color = new Color('#FF0000');
|
|
41
|
+
const hour = new Hour('09:30');
|
|
121
42
|
|
|
122
|
-
//
|
|
123
|
-
|
|
124
|
-
|
|
43
|
+
console.log(email.valueOf()); // 'user@example.com'
|
|
44
|
+
console.log(price.valueOf()); // 29.99
|
|
45
|
+
console.log(color.toString()); // '#FF0000'
|
|
46
|
+
console.log(hour.addMinutes(45).toString()); // '10:15'
|
|
47
|
+
```
|
|
125
48
|
|
|
126
|
-
|
|
127
|
-
const latitude = new Latitude(40.7128); // New York
|
|
128
|
-
const longitude = new Longitude(-74.0060);
|
|
129
|
-
const coords = new Coordinates(latitude, longitude);
|
|
49
|
+
Invalid values throw specific errors.
|
|
130
50
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
const md5 = MD5Hash.from('hello'); // 5d41402abc4b2a76b9719d911017c592
|
|
142
|
-
const sha256 = SHA256Hash.from('hello'); // 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
|
|
143
|
-
const sha512 = SHA512Hash.from('hello'); // 9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043
|
|
144
|
-
console.log(md5.toBase64());
|
|
145
|
-
|
|
146
|
-
// Crypto
|
|
147
|
-
const keyPair = KeyPair.generate(); // Ed25519 key pair
|
|
148
|
-
const signature = keyPair.sign('hello world'); // Sign a message
|
|
149
|
-
keyPair.isValidSignature('hello world', signature); // true
|
|
150
|
-
|
|
151
|
-
// Encrypted key pairs
|
|
152
|
-
const encrypted = await keyPair.encryptKeyPair('my-password');
|
|
153
|
-
const sig = encrypted.sign('message', 'my-password');
|
|
154
|
-
encrypted.isValidSignature('message', sig); // true
|
|
155
|
-
|
|
156
|
-
// Media
|
|
157
|
-
const media = new Media('hello world');
|
|
158
|
-
console.log(media.getSize()); // 11
|
|
159
|
-
console.log(media.getBase64()); // 'aGVsbG8gd29ybGQ='
|
|
160
|
-
console.log(media.getBuffer()); // <Buffer 68 65 6c 6c 6f ...>
|
|
161
|
-
|
|
162
|
-
// Unique collections
|
|
163
|
-
const weekdays = UniqueObjectArray.fromArray([
|
|
164
|
-
DayOfWeek.MONDAY,
|
|
165
|
-
DayOfWeek.TUESDAY,
|
|
166
|
-
DayOfWeek.MONDAY,
|
|
167
|
-
]);
|
|
168
|
-
console.log(weekdays.length()); // 2
|
|
169
|
-
console.log(weekdays.toArray().map((day) => day.toString())); // ['monday', 'tuesday']
|
|
51
|
+
```typescript
|
|
52
|
+
import { Email, InvalidEmailError } from '@haskou/value-objects';
|
|
53
|
+
|
|
54
|
+
try {
|
|
55
|
+
new Email('not-an-email');
|
|
56
|
+
} catch (error) {
|
|
57
|
+
if (error instanceof InvalidEmailError) {
|
|
58
|
+
console.error('Invalid email');
|
|
59
|
+
}
|
|
60
|
+
}
|
|
170
61
|
```
|
|
171
62
|
|
|
172
|
-
##
|
|
173
|
-
|
|
174
|
-
Need more details? Check the complete documentation:
|
|
63
|
+
## Available categories
|
|
175
64
|
|
|
176
|
-
|
|
65
|
+
| Category | Examples |
|
|
66
|
+
| --- | --- |
|
|
67
|
+
| Base | `ValueObject`, `NullObject`, `Enum` |
|
|
68
|
+
| Strings | `StringValueObject`, `Password`, `Email`, `Color` |
|
|
69
|
+
| Numbers | `NumberValueObject`, `Integer`, `PositiveNumber` |
|
|
70
|
+
| IDs | `ShortId`, `UUID` |
|
|
71
|
+
| Time | `Timestamp`, `CalendarDay`, `Hour`, `Duration`, `MonthOfYear` |
|
|
72
|
+
| Coordinates | `Latitude`, `Longitude`, `Coordinates` |
|
|
73
|
+
| Hashes | `MD5Hash`, `SHA256Hash`, `SHA512Hash` |
|
|
74
|
+
| Media | `Media` |
|
|
75
|
+
| Collections | `UniqueObjectArray` |
|
|
177
76
|
|
|
178
|
-
|
|
179
|
-
- ✅ Complete API for all Value Objects
|
|
180
|
-
- ✅ Advanced usage examples
|
|
181
|
-
- ✅ Error handling
|
|
182
|
-
- ✅ Design principles (immutability, null safety, etc.)
|
|
183
|
-
- ✅ Composition and extensibility patterns
|
|
77
|
+
See the complete API reference in the documentation: https://haskou.github.io/value-objects/reference/
|
|
184
78
|
|
|
185
|
-
##
|
|
79
|
+
## Documentation development
|
|
186
80
|
|
|
187
81
|
```bash
|
|
188
|
-
#
|
|
189
|
-
|
|
82
|
+
# Start local docs server
|
|
83
|
+
yarn docs:dev
|
|
84
|
+
|
|
85
|
+
# Build static documentation
|
|
86
|
+
yarn docs:build
|
|
190
87
|
|
|
191
|
-
#
|
|
192
|
-
|
|
88
|
+
# Preview the built site
|
|
89
|
+
yarn docs:preview
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Package development
|
|
193
93
|
|
|
194
|
-
|
|
195
|
-
|
|
94
|
+
```bash
|
|
95
|
+
yarn install
|
|
96
|
+
yarn test
|
|
97
|
+
yarn build
|
|
196
98
|
```
|
|
197
99
|
|
|
198
|
-
##
|
|
100
|
+
## Release branches
|
|
199
101
|
|
|
200
|
-
|
|
201
|
-
2. Create a branch: `git checkout -b my-feature`
|
|
202
|
-
3. Make your changes and add tests
|
|
203
|
-
4. Run tests: `npm test`
|
|
204
|
-
5. Submit a pull request
|
|
102
|
+
Publishing is handled by CI when a pull request is merged into the default branch.
|
|
205
103
|
|
|
206
|
-
|
|
104
|
+
| Branch prefix | npm bump |
|
|
105
|
+
| --- | --- |
|
|
106
|
+
| `fix/*` | Patch |
|
|
107
|
+
| `feat/*` | Minor |
|
|
108
|
+
| `break/*` | Major |
|
|
207
109
|
|
|
208
|
-
|
|
110
|
+
Branches without one of these prefixes still run CI, but they do not publish to npm.
|
|
209
111
|
|
|
210
|
-
|
|
112
|
+
## License
|
|
211
113
|
|
|
212
|
-
|
|
114
|
+
MIT. See [LICENSE.txt](LICENSE.txt).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InvalidPasswordError.d.ts","sourceRoot":"","sources":["../../src/errors/InvalidPasswordError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,qBAAa,oBAAqB,SAAQ,WAAW;gBACvC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAKjD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InvalidPasswordError = void 0;
|
|
4
|
+
const DomainError_1 = require("./DomainError");
|
|
5
|
+
class InvalidPasswordError extends DomainError_1.DomainError {
|
|
6
|
+
constructor(minLength, maxLength) {
|
|
7
|
+
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.`);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.InvalidPasswordError = InvalidPasswordError;
|
|
11
|
+
//# sourceMappingURL=InvalidPasswordError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InvalidPasswordError.js","sourceRoot":"","sources":["../../src/errors/InvalidPasswordError.ts"],"names":[],"mappings":";;;AAAA,+CAA4C;AAE5C,MAAa,oBAAqB,SAAQ,yBAAW;IACnD,YAAY,SAAiB,EAAE,SAAiB;QAC9C,KAAK,CACH,4BAA4B,SAAS,QAAQ,SAAS,8GAA8G,CACrK,CAAC;IACJ,CAAC;CACF;AAND,oDAMC"}
|
package/dist/errors/index.d.ts
CHANGED
|
@@ -13,12 +13,11 @@ export * from './InvalidLongitudeError';
|
|
|
13
13
|
export * from './InvalidEmailError';
|
|
14
14
|
export * from './InvalidMinutesError';
|
|
15
15
|
export * from './InvalidNumberError';
|
|
16
|
+
export * from './InvalidPasswordError';
|
|
16
17
|
export * from './InvalidPositiveNumberError';
|
|
17
18
|
export * from './InvalidStringLengthError';
|
|
18
19
|
export * from './InvalidTimestampIntervalError';
|
|
19
|
-
export * from './InvalidKeyError';
|
|
20
20
|
export * from './InvalidLengthError';
|
|
21
|
-
export * from './InvalidSignatureError';
|
|
22
21
|
export * from './NullObjectError';
|
|
23
22
|
export * from './ValueNotInEnumError';
|
|
24
23
|
//# 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,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,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,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC"}
|
package/dist/errors/index.js
CHANGED
|
@@ -16,12 +16,11 @@ tslib_1.__exportStar(require("./InvalidLongitudeError"), exports);
|
|
|
16
16
|
tslib_1.__exportStar(require("./InvalidEmailError"), exports);
|
|
17
17
|
tslib_1.__exportStar(require("./InvalidMinutesError"), exports);
|
|
18
18
|
tslib_1.__exportStar(require("./InvalidNumberError"), exports);
|
|
19
|
+
tslib_1.__exportStar(require("./InvalidPasswordError"), exports);
|
|
19
20
|
tslib_1.__exportStar(require("./InvalidPositiveNumberError"), exports);
|
|
20
21
|
tslib_1.__exportStar(require("./InvalidStringLengthError"), exports);
|
|
21
22
|
tslib_1.__exportStar(require("./InvalidTimestampIntervalError"), exports);
|
|
22
|
-
tslib_1.__exportStar(require("./InvalidKeyError"), exports);
|
|
23
23
|
tslib_1.__exportStar(require("./InvalidLengthError"), exports);
|
|
24
|
-
tslib_1.__exportStar(require("./InvalidSignatureError"), exports);
|
|
25
24
|
tslib_1.__exportStar(require("./NullObjectError"), exports);
|
|
26
25
|
tslib_1.__exportStar(require("./ValueNotInEnumError"), exports);
|
|
27
26
|
//# sourceMappingURL=index.js.map
|
package/dist/errors/index.js.map
CHANGED
|
@@ -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,uEAA6C;AAC7C,qEAA2C;AAC3C,0EAAgD;AAChD
|
|
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,5 +1,9 @@
|
|
|
1
1
|
import { Primitive } from '../types/Primitive';
|
|
2
|
+
type SerializedValue = Primitive | SerializedValue[] | {
|
|
3
|
+
[key: string]: SerializedValue;
|
|
4
|
+
};
|
|
2
5
|
export type PrimitiveOf<T extends {
|
|
3
|
-
toPrimitives():
|
|
6
|
+
toPrimitives(): SerializedValue;
|
|
4
7
|
}> = ReturnType<T['toPrimitives']>;
|
|
8
|
+
export {};
|
|
5
9
|
//# sourceMappingURL=PrimitiveOf.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrimitiveOf.d.ts","sourceRoot":"","sources":["../../src/interfaces/PrimitiveOf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,
|
|
1
|
+
{"version":3,"file":"PrimitiveOf.d.ts","sourceRoot":"","sources":["../../src/interfaces/PrimitiveOf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,KAAK,eAAe,GAChB,SAAS,GACT,eAAe,EAAE,GACjB;IACE,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAC;CAChC,CAAC;AAEN,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS;IAAE,YAAY,IAAI,eAAe,CAAA;CAAE,IACnE,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BaseError } from '../errors/BaseError';
|
|
2
2
|
import { DomainError } from '../errors/DomainError';
|
|
3
3
|
export type Errors = Error | BaseError | DomainError | string;
|
|
4
|
-
export declare function assert(condition: boolean | unknown | undefined, error: string | Errors):
|
|
4
|
+
export declare function assert(condition: boolean | unknown | undefined, error: string | Errors): asserts condition;
|
|
5
5
|
//# sourceMappingURL=Assert.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Assert.d.ts","sourceRoot":"","sources":["../../src/patterns/Assert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC;AAE9D,wBAAgB,MAAM,CACpB,SAAS,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,EACxC,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB,
|
|
1
|
+
{"version":3,"file":"Assert.d.ts","sourceRoot":"","sources":["../../src/patterns/Assert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC;AAE9D,wBAAgB,MAAM,CACpB,SAAS,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,EACxC,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB,OAAO,CAAC,SAAS,CAMnB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export type Primitive = string | number | boolean | bigint | symbol |
|
|
1
|
+
export type Primitive = string | number | boolean | bigint | symbol | null | undefined;
|
|
2
2
|
//# sourceMappingURL=Primitive.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Primitive.d.ts","sourceRoot":"","sources":["../../src/types/Primitive.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"Primitive.d.ts","sourceRoot":"","sources":["../../src/types/Primitive.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACnB,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Email.d.ts","sourceRoot":"","sources":["../../src/value-objects/Email.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,qBAAa,KAAM,SAAQ,iBAAiB;
|
|
1
|
+
{"version":3,"file":"Email.d.ts","sourceRoot":"","sources":["../../src/value-objects/Email.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,qBAAa,KAAM,SAAQ,iBAAiB;IAC1C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CACwE;gBAE3F,KAAK,EAAE,MAAM,GAAG,iBAAiB;IAU7C,OAAO,CAAC,kBAAkB;CAG3B"}
|
|
@@ -6,6 +6,7 @@ const Assert_1 = require("../patterns/Assert");
|
|
|
6
6
|
const NullObject_1 = require("./NullObject");
|
|
7
7
|
const StringValueObject_1 = require("./StringValueObject");
|
|
8
8
|
class Email extends StringValueObject_1.StringValueObject {
|
|
9
|
+
static PATTERN = /^[\w+\-.!#$%&'*/=?^`{|}~]+@(?:[\w-]+\.)+(?:[a-z]{2,63}|xn--[a-z0-9](?:[a-z0-9-]{0,57}[a-z0-9])?)$/i;
|
|
9
10
|
constructor(value) {
|
|
10
11
|
super(value?.valueOf());
|
|
11
12
|
if (NullObject_1.NullObject.isNullObject(this)) {
|
|
@@ -14,7 +15,7 @@ class Email extends StringValueObject_1.StringValueObject {
|
|
|
14
15
|
this.ensureIsValidEmail(this.value);
|
|
15
16
|
}
|
|
16
17
|
ensureIsValidEmail(value) {
|
|
17
|
-
(0, Assert_1.assert)(
|
|
18
|
+
(0, Assert_1.assert)(Email.PATTERN.test(value), new InvalidEmailError_1.InvalidEmailError(value));
|
|
18
19
|
}
|
|
19
20
|
}
|
|
20
21
|
exports.Email = Email;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Email.js","sourceRoot":"","sources":["../../src/value-objects/Email.ts"],"names":[],"mappings":";;;AAAA,mEAAgE;AAChE,+CAA4C;AAC5C,6CAA0C;AAC1C,2DAAwD;AAExD,MAAa,KAAM,SAAQ,qCAAiB;
|
|
1
|
+
{"version":3,"file":"Email.js","sourceRoot":"","sources":["../../src/value-objects/Email.ts"],"names":[],"mappings":";;;AAAA,mEAAgE;AAChE,+CAA4C;AAC5C,6CAA0C;AAC1C,2DAAwD;AAExD,MAAa,KAAM,SAAQ,qCAAiB;IAClC,MAAM,CAAU,OAAO,GAC7B,oGAAoG,CAAC;IAEvG,YAAY,KAAiC;QAC3C,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAExB,IAAI,uBAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAEO,kBAAkB,CAAC,KAAa;QACtC,IAAA,eAAM,EAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,qCAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,CAAC;;AAhBH,sBAiBC"}
|
|
@@ -3,7 +3,7 @@ import { ValueObject } from './ValueObject';
|
|
|
3
3
|
export declare abstract class Enum<T extends Primitive = Primitive> extends ValueObject<T> {
|
|
4
4
|
protected readonly value: T;
|
|
5
5
|
constructor(value: T);
|
|
6
|
-
private ensureIsValidValue;
|
|
7
6
|
abstract getValues(): T[];
|
|
7
|
+
private ensureIsValidValue;
|
|
8
8
|
}
|
|
9
9
|
//# sourceMappingURL=Enum.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Enum.d.ts","sourceRoot":"","sources":["../../src/value-objects/Enum.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,8BAAsB,IAAI,CACxB,CAAC,SAAS,SAAS,GAAG,SAAS,CAC/B,SAAQ,WAAW,CAAC,CAAC,CAAC;IACV,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAAR,KAAK,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"Enum.d.ts","sourceRoot":"","sources":["../../src/value-objects/Enum.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,8BAAsB,IAAI,CACxB,CAAC,SAAS,SAAS,GAAG,SAAS,CAC/B,SAAQ,WAAW,CAAC,CAAC,CAAC;IACV,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAAR,KAAK,EAAE,CAAC;aAUvB,SAAS,IAAI,CAAC,EAAE;IAEhC,OAAO,CAAC,kBAAkB;CAS3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Enum.js","sourceRoot":"","sources":["../../src/value-objects/Enum.ts"],"names":[],"mappings":";;;AAAA,uEAAoE;AACpE,+CAA4C;AAE5C,6CAA0C;AAC1C,+CAA4C;AAE5C,MAAsB,IAEpB,SAAQ,yBAAc;IACS;IAA/B,YAA+B,KAAQ;QACrC,KAAK,CAAC,KAAK,CAAC,CAAC;QADgB,UAAK,GAAL,KAAK,CAAG;QAGrC,IAAI,uBAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;
|
|
1
|
+
{"version":3,"file":"Enum.js","sourceRoot":"","sources":["../../src/value-objects/Enum.ts"],"names":[],"mappings":";;;AAAA,uEAAoE;AACpE,+CAA4C;AAE5C,6CAA0C;AAC1C,+CAA4C;AAE5C,MAAsB,IAEpB,SAAQ,yBAAc;IACS;IAA/B,YAA+B,KAAQ;QACrC,KAAK,CAAC,KAAK,CAAC,CAAC;QADgB,UAAK,GAAL,KAAK,CAAG;QAGrC,IAAI,uBAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAIO,kBAAkB;QACxB,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CACxD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CACxB,CAAC;QACF,IAAA,eAAM,EACJ,aAAa,EACb,IAAI,yCAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAC1D,CAAC;IACJ,CAAC;CACF;AAxBD,oBAwBC"}
|
|
@@ -14,7 +14,7 @@ class NumberValueObject extends ValueObject_1.ValueObject {
|
|
|
14
14
|
(0, Assert_1.assert)(this.isValidNumber(this.value), new InvalidNumberError_1.InvalidNumberError(this.value));
|
|
15
15
|
}
|
|
16
16
|
isValidNumber(value) {
|
|
17
|
-
return
|
|
17
|
+
return Number.isFinite(value.valueOf());
|
|
18
18
|
}
|
|
19
19
|
isZero() {
|
|
20
20
|
return this.value === 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberValueObject.js","sourceRoot":"","sources":["../../src/value-objects/NumberValueObject.ts"],"names":[],"mappings":";;;AAAA,qEAAkE;AAClE,+CAA4C;AAC5C,6CAA0C;AAC1C,+CAA4C;AAE5C,MAAa,iBAAkB,SAAQ,yBAAmB;IACxD,YAAY,KAAiC;QAC3C,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAExB,IAAI,uBAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAA,eAAM,EAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,uCAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7E,CAAC;IAEO,aAAa,CAAC,KAAa;QACjC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"NumberValueObject.js","sourceRoot":"","sources":["../../src/value-objects/NumberValueObject.ts"],"names":[],"mappings":";;;AAAA,qEAAkE;AAClE,+CAA4C;AAC5C,6CAA0C;AAC1C,+CAA4C;AAE5C,MAAa,iBAAkB,SAAQ,yBAAmB;IACxD,YAAY,KAAiC;QAC3C,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAExB,IAAI,uBAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAA,eAAM,EAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,uCAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7E,CAAC;IAEO,aAAa,CAAC,KAAa;QACjC,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC;IAEM,MAAM;QACX,OAAO,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;IAC1B,CAAC;IAEM,aAAa,CAAC,KAAiC;QACpD,OAAO,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IACtC,CAAC;IAEM,oBAAoB,CAAC,KAAiC;QAC3D,OAAO,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;IACvC,CAAC;IAEM,UAAU,CAAC,KAAiC;QACjD,OAAO,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IACtC,CAAC;IAEM,iBAAiB,CAAC,KAAiC;QACxD,OAAO,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;IACvC,CAAC;IAEM,GAAG,CAAC,KAAiC;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;IAEM,QAAQ,CAAC,KAAiC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;IAEM,QAAQ,CAAC,KAAiC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;IAEM,MAAM,CAAC,KAAiC;QAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;CACF;AAlDD,8CAkDC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { StringValueObject } from './StringValueObject';
|
|
2
|
+
export declare class Password extends StringValueObject {
|
|
3
|
+
private static readonly MAX_LENGTH;
|
|
4
|
+
private static readonly MIN_LENGTH;
|
|
5
|
+
constructor(value: string | StringValueObject);
|
|
6
|
+
private isValidPassword;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=Password.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Password.d.ts","sourceRoot":"","sources":["../../src/value-objects/Password.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,qBAAa,QAAS,SAAQ,iBAAiB;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAO;IACzC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAM;gBAE5B,KAAK,EAAE,MAAM,GAAG,iBAAiB;IAa7C,OAAO,CAAC,eAAe;CAUxB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Password = void 0;
|
|
4
|
+
const InvalidPasswordError_1 = require("../errors/InvalidPasswordError");
|
|
5
|
+
const patterns_1 = require("../patterns");
|
|
6
|
+
const NullObject_1 = require("./NullObject");
|
|
7
|
+
const StringValueObject_1 = require("./StringValueObject");
|
|
8
|
+
class Password extends StringValueObject_1.StringValueObject {
|
|
9
|
+
static MAX_LENGTH = 256;
|
|
10
|
+
static MIN_LENGTH = 12;
|
|
11
|
+
constructor(value) {
|
|
12
|
+
super(value);
|
|
13
|
+
if (NullObject_1.NullObject.isNullObject(this)) {
|
|
14
|
+
return this;
|
|
15
|
+
}
|
|
16
|
+
(0, patterns_1.assert)(this.isValidPassword(), new InvalidPasswordError_1.InvalidPasswordError(Password.MIN_LENGTH, Password.MAX_LENGTH));
|
|
17
|
+
}
|
|
18
|
+
isValidPassword() {
|
|
19
|
+
return (this.value.length >= Password.MIN_LENGTH &&
|
|
20
|
+
this.value.length <= Password.MAX_LENGTH &&
|
|
21
|
+
/[A-Z]/.test(this.value) &&
|
|
22
|
+
/[a-z]/.test(this.value) &&
|
|
23
|
+
/[0-9]/.test(this.value) &&
|
|
24
|
+
/[^A-Za-z0-9]/.test(this.value));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.Password = Password;
|
|
28
|
+
//# sourceMappingURL=Password.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Password.js","sourceRoot":"","sources":["../../src/value-objects/Password.ts"],"names":[],"mappings":";;;AAAA,yEAAsE;AACtE,0CAAqC;AACrC,6CAA0C;AAC1C,2DAAwD;AAExD,MAAa,QAAS,SAAQ,qCAAiB;IACrC,MAAM,CAAU,UAAU,GAAG,GAAG,CAAC;IACjC,MAAM,CAAU,UAAU,GAAG,EAAE,CAAC;IAExC,YAAY,KAAiC;QAC3C,KAAK,CAAC,KAAK,CAAC,CAAC;QAEb,IAAI,uBAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAA,iBAAM,EACJ,IAAI,CAAC,eAAe,EAAE,EACtB,IAAI,2CAAoB,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,CACnE,CAAC;IACJ,CAAC;IAEO,eAAe;QACrB,OAAO,CACL,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU;YACxC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU;YACxC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YACxB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAChC,CAAC;IACJ,CAAC;;AA1BH,4BA2BC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UniqueObjectArray.d.ts","sourceRoot":"","sources":["../../src/value-objects/UniqueObjectArray.ts"],"names":[],"mappings":"AAAA,UAAU,cAAc;IACtB,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;CACjC;AACD,qBAAa,iBAAiB,
|
|
1
|
+
{"version":3,"file":"UniqueObjectArray.d.ts","sourceRoot":"","sources":["../../src/value-objects/UniqueObjectArray.ts"],"names":[],"mappings":"AAAA,UAAU,cAAc;IACtB,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;CACjC;AACD,qBAAa,iBAAiB,CAC5B,CAAC,SAAS,cAAc,CACxB,YAAW,QAAQ,CAAC,CAAC,CAAC;IACtB,OAAO,CAAC,KAAK,CAAW;WAEV,SAAS,CAAC,CAAC,SAAS,cAAc,EAC9C,KAAK,EAAE,CAAC,EAAE,GACT,iBAAiB,CAAC,CAAC,CAAC;IAShB,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;IAI1B,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;IAUtB,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;IAYxB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;IAIhC,MAAM,IAAI,MAAM;IAIhB,OAAO,IAAI,CAAC,EAAE;CAGtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Latitude.d.ts","sourceRoot":"","sources":["../../../src/value-objects/coordinates/Latitude.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,qBAAa,QAAS,SAAQ,iBAAiB;IAC7C,OAAO,CAAC,MAAM,CAAC,SAAS,CAA8B;IACtD,OAAO,CAAC,MAAM,CAAC,SAAS,CAA6B;IAErD,OAAO,CAAC,MAAM,CAAC,OAAO;
|
|
1
|
+
{"version":3,"file":"Latitude.d.ts","sourceRoot":"","sources":["../../../src/value-objects/coordinates/Latitude.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,qBAAa,QAAS,SAAQ,iBAAiB;IAC7C,OAAO,CAAC,MAAM,CAAC,SAAS,CAA8B;IACtD,OAAO,CAAC,MAAM,CAAC,SAAS,CAA6B;IAErD,OAAO,CAAC,MAAM,CAAC,OAAO;gBAUV,KAAK,EAAE,MAAM,GAAG,iBAAiB;CAI9C"}
|
|
@@ -8,13 +8,14 @@ class Latitude extends NumberValueObject_1.NumberValueObject {
|
|
|
8
8
|
static MIN_VALUE = new NumberValueObject_1.NumberValueObject(-90);
|
|
9
9
|
static MAX_VALUE = new NumberValueObject_1.NumberValueObject(90);
|
|
10
10
|
static isValid(value) {
|
|
11
|
-
const
|
|
12
|
-
return (
|
|
13
|
-
|
|
11
|
+
const primitive = value.valueOf();
|
|
12
|
+
return (Number.isFinite(primitive) &&
|
|
13
|
+
primitive >= this.MIN_VALUE.valueOf() &&
|
|
14
|
+
primitive <= this.MAX_VALUE.valueOf());
|
|
14
15
|
}
|
|
15
16
|
constructor(value) {
|
|
16
|
-
super(value.valueOf());
|
|
17
17
|
(0, Assert_1.assert)(Latitude.isValid(value), new InvalidLatitudeError_1.InvalidLatitudeError(value.valueOf()));
|
|
18
|
+
super(value.valueOf());
|
|
18
19
|
}
|
|
19
20
|
}
|
|
20
21
|
exports.Latitude = Latitude;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Latitude.js","sourceRoot":"","sources":["../../../src/value-objects/coordinates/Latitude.ts"],"names":[],"mappings":";;;AAAA,4EAAyE;AACzE,kDAA+C;AAC/C,4DAAyD;AAEzD,MAAa,QAAS,SAAQ,qCAAiB;IACrC,MAAM,CAAC,SAAS,GAAG,IAAI,qCAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9C,MAAM,CAAC,SAAS,GAAG,IAAI,qCAAiB,CAAC,EAAE,CAAC,CAAC;IAE7C,MAAM,CAAC,OAAO,CAAC,KAAiC;QACtD,MAAM,
|
|
1
|
+
{"version":3,"file":"Latitude.js","sourceRoot":"","sources":["../../../src/value-objects/coordinates/Latitude.ts"],"names":[],"mappings":";;;AAAA,4EAAyE;AACzE,kDAA+C;AAC/C,4DAAyD;AAEzD,MAAa,QAAS,SAAQ,qCAAiB;IACrC,MAAM,CAAC,SAAS,GAAG,IAAI,qCAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9C,MAAM,CAAC,SAAS,GAAG,IAAI,qCAAiB,CAAC,EAAE,CAAC,CAAC;IAE7C,MAAM,CAAC,OAAO,CAAC,KAAiC;QACtD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAElC,OAAO,CACL,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC1B,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;YACrC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CACtC,CAAC;IACJ,CAAC;IAED,YAAY,KAAiC;QAC3C,IAAA,eAAM,EAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,2CAAoB,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC3E,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACzB,CAAC;;AAjBH,4BAkBC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Longitude.d.ts","sourceRoot":"","sources":["../../../src/value-objects/coordinates/Longitude.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,qBAAa,SAAU,SAAQ,iBAAiB;IAC9C,OAAO,CAAC,MAAM,CAAC,SAAS,CAA+B;IACvD,OAAO,CAAC,MAAM,CAAC,SAAS,CAA8B;IAEtD,OAAO,CAAC,MAAM,CAAC,OAAO;
|
|
1
|
+
{"version":3,"file":"Longitude.d.ts","sourceRoot":"","sources":["../../../src/value-objects/coordinates/Longitude.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,qBAAa,SAAU,SAAQ,iBAAiB;IAC9C,OAAO,CAAC,MAAM,CAAC,SAAS,CAA+B;IACvD,OAAO,CAAC,MAAM,CAAC,SAAS,CAA8B;IAEtD,OAAO,CAAC,MAAM,CAAC,OAAO;gBAUV,KAAK,EAAE,MAAM,GAAG,iBAAiB;CAO9C"}
|
|
@@ -8,13 +8,14 @@ class Longitude extends NumberValueObject_1.NumberValueObject {
|
|
|
8
8
|
static MIN_VALUE = new NumberValueObject_1.NumberValueObject(-180);
|
|
9
9
|
static MAX_VALUE = new NumberValueObject_1.NumberValueObject(180);
|
|
10
10
|
static isValid(value) {
|
|
11
|
-
const
|
|
12
|
-
return (
|
|
13
|
-
|
|
11
|
+
const primitive = value.valueOf();
|
|
12
|
+
return (Number.isFinite(primitive) &&
|
|
13
|
+
primitive >= this.MIN_VALUE.valueOf() &&
|
|
14
|
+
primitive <= this.MAX_VALUE.valueOf());
|
|
14
15
|
}
|
|
15
16
|
constructor(value) {
|
|
16
|
-
super(value.valueOf());
|
|
17
17
|
(0, Assert_1.assert)(Longitude.isValid(value), new InvalidLongitudeError_1.InvalidLongitudeError(value.valueOf()));
|
|
18
|
+
super(value.valueOf());
|
|
18
19
|
}
|
|
19
20
|
}
|
|
20
21
|
exports.Longitude = Longitude;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Longitude.js","sourceRoot":"","sources":["../../../src/value-objects/coordinates/Longitude.ts"],"names":[],"mappings":";;;AAAA,8EAA2E;AAC3E,kDAA+C;AAC/C,4DAAyD;AAEzD,MAAa,SAAU,SAAQ,qCAAiB;IACtC,MAAM,CAAC,SAAS,GAAG,IAAI,qCAAiB,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,CAAC,SAAS,GAAG,IAAI,qCAAiB,CAAC,GAAG,CAAC,CAAC;IAE9C,MAAM,CAAC,OAAO,CAAC,KAAiC;QACtD,MAAM,
|
|
1
|
+
{"version":3,"file":"Longitude.js","sourceRoot":"","sources":["../../../src/value-objects/coordinates/Longitude.ts"],"names":[],"mappings":";;;AAAA,8EAA2E;AAC3E,kDAA+C;AAC/C,4DAAyD;AAEzD,MAAa,SAAU,SAAQ,qCAAiB;IACtC,MAAM,CAAC,SAAS,GAAG,IAAI,qCAAiB,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,CAAC,SAAS,GAAG,IAAI,qCAAiB,CAAC,GAAG,CAAC,CAAC;IAE9C,MAAM,CAAC,OAAO,CAAC,KAAiC;QACtD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAElC,OAAO,CACL,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC1B,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;YACrC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CACtC,CAAC;IACJ,CAAC;IAED,YAAY,KAAiC;QAC3C,IAAA,eAAM,EACJ,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EACxB,IAAI,6CAAqB,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAC3C,CAAC;QACF,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACzB,CAAC;;AApBH,8BAqBC"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import { Buffer } from 'buffer';
|
|
2
|
-
import { Media } from '../media/Media';
|
|
3
1
|
import { StringValueObject } from '../StringValueObject';
|
|
4
2
|
import { Hash } from './Hash';
|
|
5
3
|
export declare class MD5Hash extends Hash {
|
|
6
4
|
static isValid(hash: string | StringValueObject): boolean;
|
|
7
|
-
static from(buffer: string | StringValueObject | Media | Buffer): MD5Hash;
|
|
8
5
|
constructor(source: string | StringValueObject);
|
|
9
6
|
}
|
|
10
7
|
//# sourceMappingURL=MD5Hash.d.ts.map
|