@@ -13,6 +13,9 @@ final class ResolvedDomain implements ResolvedDomainName
13
13
private readonly DomainName $ registrableDomain ;
14
14
private readonly DomainName $ subDomain ;
15
15
16
+ /**
17
+ * @throws CannotProcessHost
18
+ */
16
19
private function __construct (
17
20
private readonly DomainName $ domain ,
18
21
private readonly EffectiveTopLevelDomain $ suffix
@@ -24,28 +27,40 @@ private function __construct(
24
27
] = $ this ->parse ();
25
28
}
26
29
27
- public static function fromICANN (int |DomainNameProvider |Host |string |Stringable |null $ domain , int $ suffixLength ): self
30
+ /**
31
+ * @throws CannotProcessHost
32
+ */
33
+ public static function fromICANN (DomainNameProvider |Host |Stringable |string |int |null $ domain , int $ suffixLength ): self
28
34
{
29
35
$ domain = self ::setDomainName ($ domain );
30
36
31
37
return new self ($ domain , Suffix::fromICANN ($ domain ->slice (0 , $ suffixLength )));
32
38
}
33
39
34
- public static function fromPrivate (int |DomainNameProvider |Host |string |Stringable |null $ domain , int $ suffixLength ): self
40
+ /**
41
+ * @throws CannotProcessHost
42
+ */
43
+ public static function fromPrivate (DomainNameProvider |Host |Stringable |string |int |null $ domain , int $ suffixLength ): self
35
44
{
36
45
$ domain = self ::setDomainName ($ domain );
37
46
38
47
return new self ($ domain , Suffix::fromPrivate ($ domain ->slice (0 , $ suffixLength )));
39
48
}
40
49
41
- public static function fromIANA (int |DomainNameProvider |Host |string |Stringable |null $ domain ): self
50
+ /**
51
+ * @throws CannotProcessHost
52
+ */
53
+ public static function fromIANA (DomainNameProvider |Host |Stringable |string |int |null $ domain ): self
42
54
{
43
55
$ domain = self ::setDomainName ($ domain );
44
56
45
57
return new self ($ domain , Suffix::fromIANA ($ domain ->label (0 )));
46
58
}
47
59
48
- public static function fromUnknown (int |DomainNameProvider |Host |string |Stringable |null $ domain , int $ suffixLength = 0 ): self
60
+ /**
61
+ * @throws CannotProcessHost
62
+ */
63
+ public static function fromUnknown (DomainNameProvider |Host |Stringable |string |int |null $ domain , int $ suffixLength = 0 ): self
49
64
{
50
65
$ domain = self ::setDomainName ($ domain );
51
66
@@ -60,19 +75,19 @@ public static function __set_state(array $properties): self
60
75
return new self ($ properties ['domain ' ], $ properties ['suffix ' ]);
61
76
}
62
77
63
- private static function setDomainName (int | DomainNameProvider |Host |string |Stringable |null $ domain ): DomainName
78
+ private static function setDomainName (DomainNameProvider |Host |Stringable | string |int |null $ domain ): DomainName
64
79
{
65
80
return match (true ) {
66
81
$ domain instanceof DomainNameProvider => $ domain ->domain (),
67
82
$ domain instanceof DomainName => $ domain ,
68
- default => Domain ::fromIDNA2008 ($ domain ),
83
+ default => RegisteredName ::fromIDNA2008 ($ domain ),
69
84
};
70
85
}
71
86
72
87
/**
73
88
* Make sure the Value Object is always in a valid state.
74
89
*
75
- * @throws UnableToResolveDomain If the suffix can not be attached to the domain
90
+ * @throws UnableToResolveDomain|CannotProcessHost If the suffix can not be attached to the domain
76
91
*
77
92
* @return array{registrableDomain: DomainName, secondLevelDomain: DomainName, subDomain: DomainName}
78
93
*/
@@ -116,39 +131,39 @@ public function domain(): DomainName
116
131
return $ this ->domain ;
117
132
}
118
133
119
- public function jsonSerialize (): ? string
134
+ public function registrableDomain (): DomainName
120
135
{
121
- return $ this ->domain -> jsonSerialize () ;
136
+ return $ this ->registrableDomain ;
122
137
}
123
138
124
- public function value (): ? string
139
+ public function secondLevelDomain (): DomainName
125
140
{
126
- return $ this ->domain -> value () ;
141
+ return $ this ->secondLevelDomain ;
127
142
}
128
143
129
- public function toString (): string
144
+ public function subDomain (): DomainName
130
145
{
131
- return $ this ->domain -> toString () ;
146
+ return $ this ->subDomain ;
132
147
}
133
148
134
- public function registrableDomain (): DomainName
149
+ public function suffix (): EffectiveTopLevelDomain
135
150
{
136
- return $ this ->registrableDomain ;
151
+ return $ this ->suffix ;
137
152
}
138
153
139
- public function secondLevelDomain (): DomainName
154
+ public function jsonSerialize (): ? string
140
155
{
141
- return $ this ->secondLevelDomain ;
156
+ return $ this ->domain -> jsonSerialize () ;
142
157
}
143
158
144
- public function subDomain (): DomainName
159
+ public function value (): ? string
145
160
{
146
- return $ this ->subDomain ;
161
+ return $ this ->domain -> value () ;
147
162
}
148
163
149
- public function suffix (): EffectiveTopLevelDomain
164
+ public function toString (): string
150
165
{
151
- return $ this ->suffix ;
166
+ return $ this ->domain -> toString () ;
152
167
}
153
168
154
169
public function toAscii (): self
@@ -161,7 +176,7 @@ public function toUnicode(): self
161
176
return new self ($ this ->domain ->toUnicode (), $ this ->suffix ->toUnicode ());
162
177
}
163
178
164
- public function withSuffix (int | DomainNameProvider |Host |string |Stringable |null $ suffix ): self
179
+ public function withSuffix (DomainNameProvider |Host |Stringable | string |int |null $ suffix ): self
165
180
{
166
181
if (!$ suffix instanceof EffectiveTopLevelDomain) {
167
182
$ suffix = Suffix::fromUnknown ($ suffix );
@@ -173,30 +188,27 @@ public function withSuffix(int|DomainNameProvider|Host|string|Stringable|null $s
173
188
);
174
189
}
175
190
176
- public function withSubDomain (int | DomainNameProvider |Host |string |Stringable |null $ subDomain ): self
191
+ public function withSubDomain (DomainNameProvider |Host |Stringable | string |int |null $ subDomain ): self
177
192
{
178
193
if (null === $ this ->suffix ->value ()) {
179
194
throw UnableToResolveDomain::dueToMissingRegistrableDomain ($ this ->domain );
180
195
}
181
196
182
- $ subDomain = $ this -> domain -> clear ()-> append ( self :: setDomainName ($ subDomain) );
197
+ $ subDomain = RegisteredName:: fromIDNA2008 ($ subDomain );
183
198
if ($ this ->subDomain ->value () === $ subDomain ->value ()) {
184
199
return $ this ;
185
200
}
186
201
187
202
return new self ($ this ->registrableDomain ->prepend ($ subDomain ), $ this ->suffix );
188
203
}
189
204
190
- /**
191
- * @param int|DomainNameProvider|Host|string|Stringable|null $label the second level domain
192
- */
193
- public function withSecondLevelDomain ($ label ): self
205
+ public function withSecondLevelDomain (DomainNameProvider |Host |Stringable |string |int |null $ label ): self
194
206
{
195
207
if (null === $ this ->suffix ->value ()) {
196
208
throw UnableToResolveDomain::dueToMissingRegistrableDomain ($ this ->domain );
197
209
}
198
210
199
- $ label = self :: setDomainName ($ label );
211
+ $ label = RegisteredName:: fromIDNA2008 ($ label );
200
212
if (1 !== count ($ label )) {
201
213
throw UnableToResolveDomain::dueToInvalidSecondLevelDomain ($ label );
202
214
}
0 commit comments