@haskou/value-objects 4.0.1 → 4.1.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 +176 -79
- package/dist/errors/index.d.ts +0 -2
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +0 -2
- package/dist/errors/index.js.map +1 -1
- package/dist/interfaces/PrimitiveOf.d.ts +1 -5
- 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 +0 -1
- package/dist/value-objects/Email.d.ts.map +1 -1
- package/dist/value-objects/Email.js +1 -2
- package/dist/value-objects/Email.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/UniqueObjectArray.d.ts.map +1 -1
- package/dist/value-objects/coordinates/Latitude.d.ts.map +1 -1
- package/dist/value-objects/coordinates/Latitude.js +4 -5
- 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 +4 -5
- package/dist/value-objects/coordinates/Longitude.js.map +1 -1
- package/dist/value-objects/crypto/CryptoAdapter.d.ts +2 -3
- package/dist/value-objects/crypto/CryptoAdapter.d.ts.map +1 -1
- package/dist/value-objects/crypto/CryptoAdapter.js +4 -9
- package/dist/value-objects/crypto/CryptoAdapter.js.map +1 -1
- package/dist/value-objects/crypto/EncryptedKeyPair.d.ts +4 -4
- package/dist/value-objects/crypto/EncryptedKeyPair.d.ts.map +1 -1
- package/dist/value-objects/crypto/EncryptedKeyPair.js.map +1 -1
- package/dist/value-objects/crypto/EncryptedPayload.d.ts +0 -2
- package/dist/value-objects/crypto/EncryptedPayload.d.ts.map +1 -1
- package/dist/value-objects/crypto/EncryptedPayload.js +0 -15
- package/dist/value-objects/crypto/EncryptedPayload.js.map +1 -1
- package/dist/value-objects/crypto/EncryptedPrivateKey.d.ts +2 -3
- package/dist/value-objects/crypto/EncryptedPrivateKey.d.ts.map +1 -1
- package/dist/value-objects/crypto/EncryptedPrivateKey.js +4 -6
- package/dist/value-objects/crypto/EncryptedPrivateKey.js.map +1 -1
- package/dist/value-objects/crypto/KeyPair.d.ts +2 -2
- package/dist/value-objects/crypto/KeyPair.d.ts.map +1 -1
- package/dist/value-objects/crypto/KeyPair.js +1 -1
- package/dist/value-objects/crypto/KeyPair.js.map +1 -1
- package/dist/value-objects/crypto/PrivateKey.d.ts +0 -13
- package/dist/value-objects/crypto/PrivateKey.d.ts.map +1 -1
- package/dist/value-objects/crypto/PrivateKey.js +12 -58
- package/dist/value-objects/crypto/PrivateKey.js.map +1 -1
- package/dist/value-objects/crypto/PublicKey.d.ts +2 -6
- package/dist/value-objects/crypto/PublicKey.d.ts.map +1 -1
- package/dist/value-objects/crypto/PublicKey.js +6 -20
- package/dist/value-objects/crypto/PublicKey.js.map +1 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyLegacy.d.ts +2 -2
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyLegacy.d.ts.map +1 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyLegacy.js.map +1 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.d.ts +5 -7
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.d.ts.map +1 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.js +17 -41
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV2.js.map +1 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyVersion.d.ts +2 -2
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyVersion.d.ts.map +1 -1
- package/dist/value-objects/crypto/index.d.ts +0 -3
- package/dist/value-objects/crypto/index.d.ts.map +1 -1
- package/dist/value-objects/crypto/index.js +0 -3
- package/dist/value-objects/crypto/index.js.map +1 -1
- package/dist/value-objects/hashes/MD5Hash.d.ts.map +1 -1
- package/dist/value-objects/hashes/MD5Hash.js +1 -2
- package/dist/value-objects/hashes/MD5Hash.js.map +1 -1
- package/dist/value-objects/hashes/SHA256Hash.d.ts.map +1 -1
- package/dist/value-objects/hashes/SHA256Hash.js +1 -2
- package/dist/value-objects/hashes/SHA256Hash.js.map +1 -1
- package/dist/value-objects/hashes/SHA512Hash.d.ts.map +1 -1
- package/dist/value-objects/hashes/SHA512Hash.js +1 -2
- package/dist/value-objects/hashes/SHA512Hash.js.map +1 -1
- package/dist/value-objects/ids/ShortId.d.ts +0 -1
- package/dist/value-objects/ids/ShortId.d.ts.map +1 -1
- package/dist/value-objects/ids/ShortId.js +3 -7
- package/dist/value-objects/ids/ShortId.js.map +1 -1
- package/dist/value-objects/ids/UUID.d.ts +0 -2
- package/dist/value-objects/ids/UUID.d.ts.map +1 -1
- package/dist/value-objects/ids/UUID.js +4 -18
- package/dist/value-objects/ids/UUID.js.map +1 -1
- package/dist/value-objects/index.d.ts +0 -1
- package/dist/value-objects/index.d.ts.map +1 -1
- package/dist/value-objects/index.js +0 -1
- package/dist/value-objects/index.js.map +1 -1
- package/dist/value-objects/media/Media.d.ts +0 -2
- package/dist/value-objects/media/Media.d.ts.map +1 -1
- package/dist/value-objects/media/Media.js +1 -14
- package/dist/value-objects/media/Media.js.map +1 -1
- package/dist/value-objects/time/CalendarDay.d.ts +1 -2
- package/dist/value-objects/time/CalendarDay.d.ts.map +1 -1
- package/dist/value-objects/time/CalendarDay.js +11 -25
- 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 +3 -2
- 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 +0 -3
- package/dist/value-objects/time/Hour.d.ts.map +1 -1
- package/dist/value-objects/time/Hour.js +31 -30
- package/dist/value-objects/time/Hour.js.map +1 -1
- package/dist/value-objects/time/Timestamp.d.ts +0 -3
- package/dist/value-objects/time/Timestamp.d.ts.map +1 -1
- package/dist/value-objects/time/Timestamp.js +6 -50
- package/dist/value-objects/time/Timestamp.js.map +1 -1
- package/dist/value-objects/time/TimestampInterval.d.ts +4 -2
- package/dist/value-objects/time/TimestampInterval.d.ts.map +1 -1
- package/dist/value-objects/time/TimestampInterval.js +10 -0
- package/dist/value-objects/time/TimestampInterval.js.map +1 -1
- package/package.json +32 -57
- package/dist/errors/InvalidEncryptedPrivateKeyFormatError.d.ts +0 -5
- package/dist/errors/InvalidEncryptedPrivateKeyFormatError.d.ts.map +0 -1
- package/dist/errors/InvalidEncryptedPrivateKeyFormatError.js +0 -11
- package/dist/errors/InvalidEncryptedPrivateKeyFormatError.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/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/crypto/AsymmetricEncryptedPayload.d.ts +0 -5
- package/dist/value-objects/crypto/AsymmetricEncryptedPayload.d.ts.map +0 -1
- package/dist/value-objects/crypto/AsymmetricEncryptedPayload.js +0 -11
- package/dist/value-objects/crypto/AsymmetricEncryptedPayload.js.map +0 -1
- package/dist/value-objects/crypto/StrictBase64.d.ts +0 -15
- package/dist/value-objects/crypto/StrictBase64.d.ts.map +0 -1
- package/dist/value-objects/crypto/StrictBase64.js +0 -36
- package/dist/value-objects/crypto/StrictBase64.js.map +0 -1
- package/dist/value-objects/crypto/SymmetricEncryptedPayload.d.ts +0 -5
- package/dist/value-objects/crypto/SymmetricEncryptedPayload.d.ts.map +0 -1
- package/dist/value-objects/crypto/SymmetricEncryptedPayload.js +0 -11
- package/dist/value-objects/crypto/SymmetricEncryptedPayload.js.map +0 -1
- package/dist/value-objects/crypto/SymmetricKey.d.ts +0 -49
- package/dist/value-objects/crypto/SymmetricKey.d.ts.map +0 -1
- package/dist/value-objects/crypto/SymmetricKey.js +0 -149
- package/dist/value-objects/crypto/SymmetricKey.js.map +0 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV3.d.ts +0 -24
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV3.d.ts.map +0 -1
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV3.js +0 -105
- package/dist/value-objects/crypto/encrypted-private-key/EncryptedPrivateKeyV3.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,115 +1,212 @@
|
|
|
1
|
-
|
|
1
|
+
[](https://badge.fury.io/js/@haskou%2Fvalue-objects)
|
|
2
2
|
|
|
3
|
-
|
|
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)
|
|
3
|
+
# Value Objects
|
|
8
4
|
|
|
9
|
-
A TypeScript library for
|
|
5
|
+
A TypeScript lightweight library for creating safe, immutable,
|
|
6
|
+
and validated **Value Objects**. Perfect for applications that require **Domain-Driven Design (DDD)** and **type safety**.
|
|
10
7
|
|
|
11
|
-
|
|
8
|
+
## 🚀 Quick Start
|
|
12
9
|
|
|
10
|
+
```bash
|
|
11
|
+
npm install @haskou/value-objects
|
|
12
|
+
```
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
Full documentation is available at **https://haskou.github.io/value-objects/**.
|
|
17
|
-
|
|
18
|
-
The documentation includes installation, quick start, examples, error handling, serialization notes, and one reference page per exported class.
|
|
14
|
+
```typescript
|
|
15
|
+
import { Email, PositiveNumber, Color, Hour } from 'value-objects';
|
|
19
16
|
|
|
20
|
-
|
|
17
|
+
// ✅ Automatic validation on construction
|
|
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
|
|
21
22
|
|
|
23
|
+
// ❌ Immediate errors with invalid values
|
|
24
|
+
const badEmail = new Email('not-an-email'); // Error!
|
|
25
|
+
const badPrice = new PositiveNumber(-5); // Error!
|
|
26
|
+
```
|
|
22
27
|
|
|
23
|
-
##
|
|
28
|
+
## 🤔 Why use Value Objects?
|
|
24
29
|
|
|
25
|
-
|
|
26
|
-
|
|
30
|
+
**Without Value Objects:**
|
|
31
|
+
```typescript
|
|
32
|
+
function createUser(email: string, age: number): void {
|
|
33
|
+
// Are they valid? We don't know until runtime
|
|
34
|
+
if (!email.includes('@')) throw new Error('Invalid email');
|
|
35
|
+
if (age <= 0) throw new Error('Invalid age');
|
|
36
|
+
// Creation stuff
|
|
37
|
+
}
|
|
27
38
|
```
|
|
28
39
|
|
|
29
|
-
|
|
30
|
-
|
|
40
|
+
**With Value Objects:**
|
|
41
|
+
```typescript
|
|
42
|
+
function createUser(email: Email, age: PositiveNumber): void {
|
|
43
|
+
// If we get here, values ARE valid
|
|
44
|
+
// Creation stuff
|
|
45
|
+
}
|
|
31
46
|
```
|
|
32
47
|
|
|
33
|
-
|
|
48
|
+
This prevents defensive programming and if-else validations
|
|
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
|
|
34
107
|
|
|
35
108
|
```typescript
|
|
36
|
-
|
|
109
|
+
// Validated strings
|
|
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
|
|
37
117
|
|
|
118
|
+
// Emails
|
|
38
119
|
const email = new Email('user@example.com');
|
|
39
|
-
|
|
40
|
-
const color = new Color('#FF0000');
|
|
41
|
-
const hour = new Hour('09:30');
|
|
120
|
+
console.log(email.getDomain()); // 'example.com'
|
|
42
121
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
console.log(hour.addMinutes(45).toString()); // '10:15'
|
|
47
|
-
```
|
|
122
|
+
// Colors
|
|
123
|
+
const red = new Color('#FF0000');
|
|
124
|
+
const blue = Color.BLUE; // Predefined color
|
|
48
125
|
|
|
49
|
-
|
|
126
|
+
// Coordinates
|
|
127
|
+
const latitude = new Latitude(40.7128); // New York
|
|
128
|
+
const longitude = new Longitude(-74.0060);
|
|
129
|
+
const coords = new Coordinates(latitude, longitude);
|
|
50
130
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
131
|
+
// Time
|
|
132
|
+
const hour = new Hour('09:30');
|
|
133
|
+
const year = new Year(2024);
|
|
134
|
+
console.log(year.isLeapYear()); // true
|
|
135
|
+
|
|
136
|
+
// IDs
|
|
137
|
+
const id = ShortId.generate(); // 69ad70897364ee0d1406b1d0
|
|
138
|
+
const uuid = UUID.generate(); // 3fd4c04a-8e73-4e10-aef3-f491b32ec538
|
|
139
|
+
|
|
140
|
+
// Hashes
|
|
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']
|
|
61
170
|
```
|
|
62
171
|
|
|
63
|
-
##
|
|
64
|
-
|
|
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` |
|
|
76
|
-
| Crypto helpers | `KeyPair`, `PrivateKey`, `PublicKey`, `SymmetricKey`, encrypted payload objects |
|
|
172
|
+
## 📚 Technical Documentation
|
|
77
173
|
|
|
78
|
-
|
|
174
|
+
Need more details? Check the complete documentation:
|
|
79
175
|
|
|
80
|
-
|
|
176
|
+
**[📖 TECHNICAL_DOCUMENTATION.md](./TECHNICAL_DOCUMENTATION.md)**
|
|
81
177
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
178
|
+
Includes:
|
|
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
|
|
85
184
|
|
|
86
|
-
|
|
87
|
-
yarn docs:build
|
|
185
|
+
## 🛠️ Development
|
|
88
186
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
187
|
+
```bash
|
|
188
|
+
# Install dependencies
|
|
189
|
+
npm install
|
|
92
190
|
|
|
93
|
-
|
|
191
|
+
# Run tests
|
|
192
|
+
npm test
|
|
94
193
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
yarn test
|
|
98
|
-
yarn build
|
|
194
|
+
# Build
|
|
195
|
+
npm run build
|
|
99
196
|
```
|
|
100
197
|
|
|
101
|
-
##
|
|
198
|
+
## 🤝 Contributing
|
|
102
199
|
|
|
103
|
-
|
|
200
|
+
1. Fork the repository
|
|
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
|
|
104
205
|
|
|
105
|
-
|
|
106
|
-
| --- | --- |
|
|
107
|
-
| `fix/*` | Patch |
|
|
108
|
-
| `feat/*` | Minor |
|
|
109
|
-
| `break/*` | Major |
|
|
206
|
+
## 📄 License
|
|
110
207
|
|
|
111
|
-
|
|
208
|
+
MIT License - see the [LICENSE](LICENSE.txt) file for details.
|
|
112
209
|
|
|
113
|
-
|
|
210
|
+
---
|
|
114
211
|
|
|
115
|
-
|
|
212
|
+
**Made with ❤️ and TypeScript**
|
package/dist/errors/index.d.ts
CHANGED
|
@@ -5,7 +5,6 @@ export * from './InvalidDayError';
|
|
|
5
5
|
export * from './InvalidDayFormatError';
|
|
6
6
|
export * from './InvalidHourError';
|
|
7
7
|
export * from './InvalidEmailError';
|
|
8
|
-
export * from './InvalidEncryptedPrivateKeyFormatError';
|
|
9
8
|
export * from './InvalidFormatError';
|
|
10
9
|
export * from './InvalidHashError';
|
|
11
10
|
export * from './InvalidIntegerError';
|
|
@@ -14,7 +13,6 @@ export * from './InvalidLongitudeError';
|
|
|
14
13
|
export * from './InvalidEmailError';
|
|
15
14
|
export * from './InvalidMinutesError';
|
|
16
15
|
export * from './InvalidNumberError';
|
|
17
|
-
export * from './InvalidPasswordError';
|
|
18
16
|
export * from './InvalidPositiveNumberError';
|
|
19
17
|
export * from './InvalidStringLengthError';
|
|
20
18
|
export * from './InvalidTimestampIntervalError';
|
|
@@ -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,
|
|
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,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC"}
|
package/dist/errors/index.js
CHANGED
|
@@ -8,7 +8,6 @@ tslib_1.__exportStar(require("./InvalidDayError"), exports);
|
|
|
8
8
|
tslib_1.__exportStar(require("./InvalidDayFormatError"), exports);
|
|
9
9
|
tslib_1.__exportStar(require("./InvalidHourError"), exports);
|
|
10
10
|
tslib_1.__exportStar(require("./InvalidEmailError"), exports);
|
|
11
|
-
tslib_1.__exportStar(require("./InvalidEncryptedPrivateKeyFormatError"), exports);
|
|
12
11
|
tslib_1.__exportStar(require("./InvalidFormatError"), exports);
|
|
13
12
|
tslib_1.__exportStar(require("./InvalidHashError"), exports);
|
|
14
13
|
tslib_1.__exportStar(require("./InvalidIntegerError"), exports);
|
|
@@ -17,7 +16,6 @@ tslib_1.__exportStar(require("./InvalidLongitudeError"), exports);
|
|
|
17
16
|
tslib_1.__exportStar(require("./InvalidEmailError"), exports);
|
|
18
17
|
tslib_1.__exportStar(require("./InvalidMinutesError"), exports);
|
|
19
18
|
tslib_1.__exportStar(require("./InvalidNumberError"), exports);
|
|
20
|
-
tslib_1.__exportStar(require("./InvalidPasswordError"), exports);
|
|
21
19
|
tslib_1.__exportStar(require("./InvalidPositiveNumberError"), exports);
|
|
22
20
|
tslib_1.__exportStar(require("./InvalidStringLengthError"), exports);
|
|
23
21
|
tslib_1.__exportStar(require("./InvalidTimestampIntervalError"), exports);
|
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
|
|
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,4DAAkC;AAClC,+DAAqC;AACrC,kEAAwC;AACxC,4DAAkC;AAClC,gEAAsC"}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import { Primitive } from '../types/Primitive';
|
|
2
|
-
type SerializedValue = Primitive | SerializedValue[] | {
|
|
3
|
-
[key: string]: SerializedValue;
|
|
4
|
-
};
|
|
5
2
|
export type PrimitiveOf<T extends {
|
|
6
|
-
toPrimitives():
|
|
3
|
+
toPrimitives(): Primitive | Record<string, Primitive>;
|
|
7
4
|
}> = ReturnType<T['toPrimitives']>;
|
|
8
|
-
export {};
|
|
9
5
|
//# 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,MAAM,MAAM,WAAW,CACrB,CAAC,SAAS;IAAE,YAAY,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;CAAE,IACjE,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): void;
|
|
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,IAAI,CAMN"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export type Primitive = string | number | boolean | bigint | symbol | null | undefined;
|
|
1
|
+
export type Primitive = string | number | boolean | bigint | symbol | Record<string, unknown> | Array<unknown> | 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,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,MAAM,GACN,MAAM,GACN,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,KAAK,CAAC,OAAO,CAAC,GACd,IAAI,GACJ,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;gBAC9B,KAAK,EAAE,MAAM,GAAG,iBAAiB;IAU7C,OAAO,CAAC,kBAAkB;CAM3B"}
|
|
@@ -6,7 +6,6 @@ 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;
|
|
10
9
|
constructor(value) {
|
|
11
10
|
super(value?.valueOf());
|
|
12
11
|
if (NullObject_1.NullObject.isNullObject(this)) {
|
|
@@ -15,7 +14,7 @@ class Email extends StringValueObject_1.StringValueObject {
|
|
|
15
14
|
this.ensureIsValidEmail(this.value);
|
|
16
15
|
}
|
|
17
16
|
ensureIsValidEmail(value) {
|
|
18
|
-
(0, Assert_1.assert)(
|
|
17
|
+
(0, Assert_1.assert)(new RegExp(/^[\w+\-.]+@(?:[\w-]+\.)+[a-zA-Z]{2,13}$/).test(value), new InvalidEmailError_1.InvalidEmailError(value));
|
|
19
18
|
}
|
|
20
19
|
}
|
|
21
20
|
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;IAC1C,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,EACJ,IAAI,MAAM,CAAC,yCAAyC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EACjE,IAAI,qCAAiB,CAAC,KAAK,CAAC,CAC7B,CAAC;IACJ,CAAC;CACF;AAjBD,sBAiBC"}
|
|
@@ -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 !isNaN(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,
|
|
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,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACjC,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"}
|
|
@@ -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,CAAC,CAAC,SAAS,cAAc,CACrD,YAAW,QAAQ,CAAC,CAAC,CAAC;IAEtB,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;gBASV,KAAK,EAAE,MAAM,GAAG,iBAAiB;CAI9C"}
|
|
@@ -8,14 +8,13 @@ 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
|
-
|
|
14
|
-
primitive <= this.MAX_VALUE.valueOf());
|
|
11
|
+
const numberValue = new NumberValueObject_1.NumberValueObject(value.valueOf());
|
|
12
|
+
return (numberValue.isGreaterOrEqualThan(this.MIN_VALUE) &&
|
|
13
|
+
numberValue.isLessOrEqualThan(this.MAX_VALUE));
|
|
15
14
|
}
|
|
16
15
|
constructor(value) {
|
|
17
|
-
(0, Assert_1.assert)(Latitude.isValid(value), new InvalidLatitudeError_1.InvalidLatitudeError(value.valueOf()));
|
|
18
16
|
super(value.valueOf());
|
|
17
|
+
(0, Assert_1.assert)(Latitude.isValid(value), new InvalidLatitudeError_1.InvalidLatitudeError(value.valueOf()));
|
|
19
18
|
}
|
|
20
19
|
}
|
|
21
20
|
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,WAAW,GAAG,IAAI,qCAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAE3D,OAAO,CACL,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC;YAChD,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAC9C,CAAC;IACJ,CAAC;IAED,YAAY,KAAiC;QAC3C,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACvB,IAAA,eAAM,EAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,2CAAoB,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7E,CAAC;;AAhBH,4BAiBC"}
|
|
@@ -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;gBASV,KAAK,EAAE,MAAM,GAAG,iBAAiB;CAO9C"}
|
|
@@ -8,14 +8,13 @@ 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
|
-
|
|
14
|
-
primitive <= this.MAX_VALUE.valueOf());
|
|
11
|
+
const numberValue = new NumberValueObject_1.NumberValueObject(value.valueOf());
|
|
12
|
+
return (numberValue.isGreaterOrEqualThan(this.MIN_VALUE) &&
|
|
13
|
+
numberValue.isLessOrEqualThan(this.MAX_VALUE));
|
|
15
14
|
}
|
|
16
15
|
constructor(value) {
|
|
17
|
-
(0, Assert_1.assert)(Longitude.isValid(value), new InvalidLongitudeError_1.InvalidLongitudeError(value.valueOf()));
|
|
18
16
|
super(value.valueOf());
|
|
17
|
+
(0, Assert_1.assert)(Longitude.isValid(value), new InvalidLongitudeError_1.InvalidLongitudeError(value.valueOf()));
|
|
19
18
|
}
|
|
20
19
|
}
|
|
21
20
|
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,WAAW,GAAG,IAAI,qCAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAE3D,OAAO,CACL,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC;YAChD,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAC9C,CAAC;IACJ,CAAC;IAED,YAAY,KAAiC;QAC3C,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACvB,IAAA,eAAM,EACJ,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EACxB,IAAI,6CAAqB,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAC3C,CAAC;IACJ,CAAC;;AAnBH,8BAoBC"}
|
|
@@ -3,10 +3,9 @@ type HashAlgorithm = 'md5' | 'sha256' | 'sha512';
|
|
|
3
3
|
export declare class CryptoAdapter {
|
|
4
4
|
private static pemToDer;
|
|
5
5
|
private static wrapPem;
|
|
6
|
-
static decryptAes256Gcm(key: Uint8Array, iv: Uint8Array, cipherText: Uint8Array, tag: Uint8Array
|
|
6
|
+
static decryptAes256Gcm(key: Uint8Array, iv: Uint8Array, cipherText: Uint8Array, tag: Uint8Array): Buffer;
|
|
7
7
|
static deriveEncryptionKey(sharedSecret: Uint8Array, ephemeralPublicKey: Uint8Array): Uint8Array;
|
|
8
|
-
static
|
|
9
|
-
static encryptAes256Gcm(key: Uint8Array, iv: Uint8Array, message: Uint8Array, aad?: Uint8Array): {
|
|
8
|
+
static encryptAes256Gcm(key: Uint8Array, iv: Uint8Array, message: Uint8Array): {
|
|
10
9
|
cipherText: Uint8Array;
|
|
11
10
|
tag: Uint8Array;
|
|
12
11
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CryptoAdapter.d.ts","sourceRoot":"","sources":["../../../src/value-objects/crypto/CryptoAdapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CryptoAdapter.d.ts","sourceRoot":"","sources":["../../../src/value-objects/crypto/CryptoAdapter.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAMhC,KAAK,aAAa,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ;IASvB,OAAO,CAAC,MAAM,CAAC,OAAO;WAOR,gBAAgB,CAC5B,GAAG,EAAE,UAAU,EACf,EAAE,EAAE,UAAU,EACd,UAAU,EAAE,UAAU,EACtB,GAAG,EAAE,UAAU,GACd,MAAM;WAIK,mBAAmB,CAC/B,YAAY,EAAE,UAAU,EACxB,kBAAkB,EAAE,UAAU,GAC7B,UAAU;WAIC,gBAAgB,CAC5B,GAAG,EAAE,UAAU,EACf,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,UAAU,GAClB;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,GAAG,EAAE,UAAU,CAAA;KAAE;WAShC,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;WAM3C,IAAI,CAChB,SAAS,EAAE,aAAa,EACxB,KAAK,EAAE,MAAM,GAAG,UAAU,GACzB,MAAM;WAWK,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;WAIzC,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU;WAInD,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU;WAMrD,cAAc,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM;WAO7C,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU;WAInD,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU;WAIlD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;WAIjC,mBAAmB,IAAI,MAAM;WAI7B,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM;WAMxD,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU;WAQ/C,MAAM,CAClB,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,UAAU,EACnB,YAAY,EAAE,MAAM,GACnB,OAAO;WAQI,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU;WAInD,kBAAkB,CAC9B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,UAAU,GACpB,UAAU;WAIC,sBAAsB,IAAI,UAAU;CAGnD"}
|
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.CryptoAdapter = void 0;
|
|
4
4
|
const aes_js_1 = require("@noble/ciphers/aes.js");
|
|
5
5
|
const ed25519_js_1 = require("@noble/curves/ed25519.js");
|
|
6
|
-
const hkdf_js_1 = require("@noble/hashes/hkdf.js");
|
|
7
6
|
const legacy_js_1 = require("@noble/hashes/legacy.js");
|
|
8
7
|
const sha2_js_1 = require("@noble/hashes/sha2.js");
|
|
9
8
|
const utils_js_1 = require("@noble/hashes/utils.js");
|
|
@@ -11,7 +10,6 @@ const buffer_1 = require("buffer");
|
|
|
11
10
|
const privateKeyDerPrefix = (0, utils_js_1.hexToBytes)('302e020100300506032b657004220420');
|
|
12
11
|
const publicKeyDerPrefix = (0, utils_js_1.hexToBytes)('302a300506032b6570032100');
|
|
13
12
|
const gcmTagLength = 16;
|
|
14
|
-
const asymmetricPayloadV2Info = buffer_1.Buffer.from('@haskou/value-objects/asymmetric-payload/v2');
|
|
15
13
|
class CryptoAdapter {
|
|
16
14
|
static pemToDer(pem) {
|
|
17
15
|
const base64 = pem
|
|
@@ -23,17 +21,14 @@ class CryptoAdapter {
|
|
|
23
21
|
static wrapPem(label, der) {
|
|
24
22
|
return `-----BEGIN ${label}-----\n${buffer_1.Buffer.from(der).toString('base64')}\n-----END ${label}-----\n`;
|
|
25
23
|
}
|
|
26
|
-
static decryptAes256Gcm(key, iv, cipherText, tag
|
|
27
|
-
return buffer_1.Buffer.from((0, aes_js_1.gcm)(key, iv
|
|
24
|
+
static decryptAes256Gcm(key, iv, cipherText, tag) {
|
|
25
|
+
return buffer_1.Buffer.from((0, aes_js_1.gcm)(key, iv).decrypt((0, utils_js_1.concatBytes)(cipherText, tag)));
|
|
28
26
|
}
|
|
29
27
|
static deriveEncryptionKey(sharedSecret, ephemeralPublicKey) {
|
|
30
28
|
return (0, sha2_js_1.sha256)((0, utils_js_1.concatBytes)(sharedSecret, ephemeralPublicKey));
|
|
31
29
|
}
|
|
32
|
-
static
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
static encryptAes256Gcm(key, iv, message, aad) {
|
|
36
|
-
const encrypted = (0, aes_js_1.gcm)(key, iv, aad).encrypt(message);
|
|
30
|
+
static encryptAes256Gcm(key, iv, message) {
|
|
31
|
+
const encrypted = (0, aes_js_1.gcm)(key, iv).encrypt(message);
|
|
37
32
|
return {
|
|
38
33
|
cipherText: encrypted.subarray(0, -gcmTagLength),
|
|
39
34
|
tag: encrypted.subarray(-gcmTagLength),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CryptoAdapter.js","sourceRoot":"","sources":["../../../src/value-objects/crypto/CryptoAdapter.ts"],"names":[],"mappings":";;;AAAA,kDAA4C;AAC5C,yDAA2D;AAC3D,
|
|
1
|
+
{"version":3,"file":"CryptoAdapter.js","sourceRoot":"","sources":["../../../src/value-objects/crypto/CryptoAdapter.ts"],"names":[],"mappings":"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"}
|