effect 4.0.2 → 4.0.3
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/dist/Context.js +3 -3
- package/dist/Context.js.map +1 -1
- package/dist/Crypto.d.ts +33 -5
- package/dist/Crypto.d.ts.map +1 -1
- package/dist/Crypto.js +8 -2
- package/dist/Crypto.js.map +1 -1
- package/dist/DateTime.d.ts +9 -6
- package/dist/DateTime.d.ts.map +1 -1
- package/dist/DateTime.js +9 -6
- package/dist/DateTime.js.map +1 -1
- package/dist/Duration.d.ts +6 -6
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +27 -8
- package/dist/Duration.js.map +1 -1
- package/dist/FileSystem.d.ts +44 -2
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js.map +1 -1
- package/dist/Schema.d.ts +473 -1
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +355 -4
- package/dist/Schema.js.map +1 -1
- package/dist/Stdio.d.ts +7 -1
- package/dist/Stdio.d.ts.map +1 -1
- package/dist/Stdio.js +1 -0
- package/dist/Stdio.js.map +1 -1
- package/dist/Stream.d.ts +11 -11
- package/dist/Stream.js +5 -5
- package/dist/ai/McpServer.d.ts +6 -0
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +65 -23
- package/dist/ai/McpServer.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js +5 -0
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
- package/dist/ai/internal/mcpProtocol.js.map +1 -1
- package/dist/ai/internal/mcpRuntime.js +1 -0
- package/dist/ai/internal/mcpRuntime.js.map +1 -1
- package/dist/cli/CliOutput.d.ts +27 -0
- package/dist/cli/CliOutput.d.ts.map +1 -1
- package/dist/cli/CliOutput.js +33 -10
- package/dist/cli/CliOutput.js.map +1 -1
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +6 -3
- package/dist/cli/Command.js.map +1 -1
- package/dist/cli/Completions.d.ts +3 -3
- package/dist/cli/Completions.d.ts.map +1 -1
- package/dist/cli/Completions.js +8 -5
- package/dist/cli/Completions.js.map +1 -1
- package/dist/cli/GlobalFlag.d.ts +5 -4
- package/dist/cli/GlobalFlag.d.ts.map +1 -1
- package/dist/cli/GlobalFlag.js +3 -3
- package/dist/cli/GlobalFlag.js.map +1 -1
- package/dist/cli/Prompt.d.ts +17 -1
- package/dist/cli/Prompt.d.ts.map +1 -1
- package/dist/cli/Prompt.js +119 -114
- package/dist/cli/Prompt.js.map +1 -1
- package/dist/cli/internal/ansi.d.ts +0 -1
- package/dist/cli/internal/ansi.d.ts.map +1 -1
- package/dist/cli/internal/ansi.js +20 -3
- package/dist/cli/internal/ansi.js.map +1 -1
- package/dist/cli/internal/completions/powershell.d.ts +2 -0
- package/dist/cli/internal/completions/powershell.d.ts.map +1 -0
- package/dist/cli/internal/completions/powershell.js +273 -0
- package/dist/cli/internal/completions/powershell.js.map +1 -0
- package/dist/cli/internal/completions/zsh.js +3 -2
- package/dist/cli/internal/completions/zsh.js.map +1 -1
- package/dist/cli/internal/wizard.d.ts +3 -3
- package/dist/cli/internal/wizard.d.ts.map +1 -1
- package/dist/cli/internal/wizard.js +21 -18
- package/dist/cli/internal/wizard.js.map +1 -1
- package/dist/cluster/ClusterSchema.d.ts +28 -0
- package/dist/cluster/ClusterSchema.d.ts.map +1 -1
- package/dist/cluster/ClusterSchema.js +30 -0
- package/dist/cluster/ClusterSchema.js.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.js +10 -18
- package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/cluster/MessageStorage.d.ts +18 -3
- package/dist/cluster/MessageStorage.d.ts.map +1 -1
- package/dist/cluster/MessageStorage.js +31 -11
- package/dist/cluster/MessageStorage.js.map +1 -1
- package/dist/cluster/Runners.d.ts.map +1 -1
- package/dist/cluster/Runners.js +8 -2
- package/dist/cluster/Runners.js.map +1 -1
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +181 -62
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/SqlMessageStorage.d.ts +59 -19
- package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
- package/dist/cluster/SqlMessageStorage.js +84 -55
- package/dist/cluster/SqlMessageStorage.js.map +1 -1
- package/dist/cluster/SqlRunnerStorage.d.ts +68 -19
- package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
- package/dist/cluster/SqlRunnerStorage.js +191 -113
- package/dist/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/cluster/internal/entityManager.js +104 -37
- package/dist/cluster/internal/entityManager.js.map +1 -1
- package/dist/http/FindMyWay/internal/router.js +3 -6
- package/dist/http/FindMyWay/internal/router.js.map +1 -1
- package/dist/http/HttpClient.d.ts +6 -0
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +39 -2
- package/dist/http/HttpClient.js.map +1 -1
- package/dist/http/HttpTraceContext.d.ts.map +1 -1
- package/dist/http/HttpTraceContext.js +4 -2
- package/dist/http/HttpTraceContext.js.map +1 -1
- package/dist/internal/effect.js +12 -7
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/version.js +1 -1
- package/dist/net/AddressResolver.d.ts +145 -0
- package/dist/net/AddressResolver.d.ts.map +1 -0
- package/dist/net/AddressResolver.js +114 -0
- package/dist/net/AddressResolver.js.map +1 -0
- package/dist/net/Dns.d.ts +596 -0
- package/dist/net/Dns.d.ts.map +1 -0
- package/dist/net/Dns.js +549 -0
- package/dist/net/Dns.js.map +1 -0
- package/dist/net/Host.d.ts +320 -0
- package/dist/net/Host.d.ts.map +1 -0
- package/dist/net/Host.js +342 -0
- package/dist/net/Host.js.map +1 -0
- package/dist/net/IpInterface.d.ts +76 -3
- package/dist/net/IpInterface.d.ts.map +1 -1
- package/dist/net/IpInterface.js +53 -4
- package/dist/net/IpInterface.js.map +1 -1
- package/dist/net/IpNetwork.d.ts +82 -8
- package/dist/net/IpNetwork.d.ts.map +1 -1
- package/dist/net/IpNetwork.js +60 -4
- package/dist/net/IpNetwork.js.map +1 -1
- package/dist/net/NetAddress.d.ts +388 -35
- package/dist/net/NetAddress.d.ts.map +1 -1
- package/dist/net/NetAddress.js +350 -34
- package/dist/net/NetAddress.js.map +1 -1
- package/dist/net/index.d.ts +15 -0
- package/dist/net/index.d.ts.map +1 -1
- package/dist/net/index.js +15 -0
- package/dist/net/index.js.map +1 -1
- package/dist/observability/OtlpMetrics.d.ts.map +1 -1
- package/dist/observability/OtlpMetrics.js +15 -21
- package/dist/observability/OtlpMetrics.js.map +1 -1
- package/dist/observability/PrometheusMetrics.js +1 -0
- package/dist/observability/PrometheusMetrics.js.map +1 -1
- package/dist/persistence/PersistedQueue.d.ts +32 -3
- package/dist/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/persistence/PersistedQueue.js +75 -16
- package/dist/persistence/PersistedQueue.js.map +1 -1
- package/dist/rpc/RpcClient.d.ts +22 -6
- package/dist/rpc/RpcClient.d.ts.map +1 -1
- package/dist/rpc/RpcClient.js +12 -5
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcServer.d.ts +6 -0
- package/dist/rpc/RpcServer.d.ts.map +1 -1
- package/dist/rpc/RpcServer.js +42 -20
- package/dist/rpc/RpcServer.js.map +1 -1
- package/dist/socket/DatagramSocket.d.ts +456 -0
- package/dist/socket/DatagramSocket.d.ts.map +1 -0
- package/dist/socket/DatagramSocket.js +535 -0
- package/dist/socket/DatagramSocket.js.map +1 -0
- package/dist/socket/Socket.d.ts +14 -1
- package/dist/socket/Socket.d.ts.map +1 -1
- package/dist/socket/Socket.js +9 -1
- package/dist/socket/Socket.js.map +1 -1
- package/dist/socket/index.d.ts +5 -0
- package/dist/socket/index.d.ts.map +1 -1
- package/dist/socket/index.js +5 -0
- package/dist/socket/index.js.map +1 -1
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +7 -2
- package/dist/sql/Migrator.js.map +1 -1
- package/dist/sql/SqlClient.d.ts +7 -1
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +31 -6
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/testing/TestCrypto.d.ts +73 -0
- package/dist/testing/TestCrypto.d.ts.map +1 -0
- package/dist/testing/TestCrypto.js +87 -0
- package/dist/testing/TestCrypto.js.map +1 -0
- package/dist/testing/index.d.ts +5 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +5 -0
- package/dist/testing/index.js.map +1 -1
- package/dist/workflow/DurableDeferred.d.ts +54 -0
- package/dist/workflow/DurableDeferred.d.ts.map +1 -1
- package/dist/workflow/DurableDeferred.js +78 -49
- package/dist/workflow/DurableDeferred.js.map +1 -1
- package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
- package/dist/workflow/WorkflowEngine.js +2 -1
- package/dist/workflow/WorkflowEngine.js.map +1 -1
- package/package.json +1 -1
- package/src/Context.ts +3 -3
- package/src/Crypto.ts +43 -9
- package/src/DateTime.ts +9 -6
- package/src/Duration.ts +36 -16
- package/src/FileSystem.ts +48 -2
- package/src/Schema.ts +669 -5
- package/src/Stdio.ts +9 -2
- package/src/Stream.ts +11 -11
- package/src/ai/McpServer.ts +63 -23
- package/src/ai/internal/mcpProtocol/v2026_07_28.ts +5 -0
- package/src/ai/internal/mcpProtocol.ts +3 -0
- package/src/ai/internal/mcpRuntime.ts +2 -0
- package/src/cli/CliOutput.ts +33 -16
- package/src/cli/Command.ts +4 -3
- package/src/cli/Completions.ts +9 -6
- package/src/cli/GlobalFlag.ts +19 -11
- package/src/cli/Prompt.ts +159 -149
- package/src/cli/internal/ansi.ts +26 -3
- package/src/cli/internal/completions/powershell.ts +322 -0
- package/src/cli/internal/completions/zsh.ts +4 -2
- package/src/cli/internal/wizard.ts +34 -26
- package/src/cluster/ClusterSchema.ts +32 -0
- package/src/cluster/ClusterWorkflowEngine.ts +13 -24
- package/src/cluster/MessageStorage.ts +45 -14
- package/src/cluster/Runners.ts +8 -2
- package/src/cluster/Sharding.ts +207 -49
- package/src/cluster/SqlMessageStorage.ts +118 -84
- package/src/cluster/SqlRunnerStorage.ts +224 -128
- package/src/cluster/internal/entityManager.ts +151 -55
- package/src/http/FindMyWay/internal/router.ts +4 -7
- package/src/http/HttpClient.ts +56 -2
- package/src/http/HttpTraceContext.ts +8 -2
- package/src/internal/effect.ts +15 -13
- package/src/internal/version.ts +1 -1
- package/src/net/AddressResolver.ts +222 -0
- package/src/net/Dns.ts +1035 -0
- package/src/net/Host.ts +472 -0
- package/src/net/IpInterface.ts +117 -7
- package/src/net/IpNetwork.ts +116 -17
- package/src/net/NetAddress.ts +611 -76
- package/src/net/index.ts +18 -0
- package/src/observability/OtlpMetrics.ts +12 -23
- package/src/observability/PrometheusMetrics.ts +1 -0
- package/src/persistence/PersistedQueue.ts +146 -53
- package/src/rpc/RpcClient.ts +41 -19
- package/src/rpc/RpcServer.ts +60 -25
- package/src/socket/DatagramSocket.ts +919 -0
- package/src/socket/Socket.ts +22 -2
- package/src/socket/index.ts +6 -0
- package/src/sql/Migrator.ts +21 -5
- package/src/sql/SqlClient.ts +39 -15
- package/src/testing/TestCrypto.ts +94 -0
- package/src/testing/index.ts +6 -0
- package/src/workflow/DurableDeferred.ts +123 -48
- package/src/workflow/WorkflowEngine.ts +2 -1
package/src/net/IpNetwork.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import * as Equal from "../Equal.ts"
|
|
8
8
|
import { dual } from "../Function.ts"
|
|
9
9
|
import * as Hash from "../Hash.ts"
|
|
10
|
-
import
|
|
10
|
+
import * as Inspectable from "../Inspectable.ts"
|
|
11
11
|
import { hasProperty } from "../Predicate.ts"
|
|
12
12
|
import * as Result from "../Result.ts"
|
|
13
13
|
import * as IpInterface from "./IpInterface.ts"
|
|
@@ -25,13 +25,13 @@ const TypeId = "~effect/net/IpNetwork" as const
|
|
|
25
25
|
* @category models
|
|
26
26
|
* @since 4.0.0
|
|
27
27
|
*/
|
|
28
|
-
export interface IpNetwork<out A extends NetAddress.IpAddress = NetAddress.IpAddress>
|
|
28
|
+
export interface IpNetwork<out A extends NetAddress.IpAddress = NetAddress.IpAddress>
|
|
29
|
+
extends Equal.Equal, Hash.Hash, Inspectable.Inspectable
|
|
30
|
+
{
|
|
29
31
|
readonly _tag: "IpNetwork"
|
|
30
32
|
readonly address: A
|
|
31
33
|
readonly prefixLength: number
|
|
32
34
|
readonly [TypeId]: typeof TypeId
|
|
33
|
-
toString(): string
|
|
34
|
-
toJSON(): string
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
/**
|
|
@@ -52,6 +52,45 @@ export type Ipv4Network = IpNetwork<NetAddress.Ipv4Address>
|
|
|
52
52
|
*/
|
|
53
53
|
export type Ipv6Network = IpNetwork<NetAddress.Ipv6Address>
|
|
54
54
|
|
|
55
|
+
/**
|
|
56
|
+
* A network address and prefix length, generic over the accepted address
|
|
57
|
+
* input. The address must have no host bits set.
|
|
58
|
+
*
|
|
59
|
+
* @see {@link make} for the checked constructor
|
|
60
|
+
* @stability unstable
|
|
61
|
+
* @category models
|
|
62
|
+
* @since 4.0.0
|
|
63
|
+
*/
|
|
64
|
+
export type IpNetworkParts<A extends NetAddress.IpAddressInput = NetAddress.IpAddressInput> =
|
|
65
|
+
IpInterface.IpInterfaceParts<A>
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* An IP network prefix, or a CIDR string or parts to convert to one.
|
|
69
|
+
*
|
|
70
|
+
* @stability unstable
|
|
71
|
+
* @category models
|
|
72
|
+
* @since 4.0.0
|
|
73
|
+
*/
|
|
74
|
+
export type IpNetworkInput = IpNetwork | string | IpNetworkParts
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* An IPv4 network prefix, or a CIDR string or parts to convert to one.
|
|
78
|
+
*
|
|
79
|
+
* @stability unstable
|
|
80
|
+
* @category models
|
|
81
|
+
* @since 4.0.0
|
|
82
|
+
*/
|
|
83
|
+
export type Ipv4NetworkInput = Ipv4Network | string | IpNetworkParts<NetAddress.Ipv4AddressInput>
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* An IPv6 network prefix, or a CIDR string or parts to convert to one.
|
|
87
|
+
*
|
|
88
|
+
* @stability unstable
|
|
89
|
+
* @category models
|
|
90
|
+
* @since 4.0.0
|
|
91
|
+
*/
|
|
92
|
+
export type Ipv6NetworkInput = Ipv6Network | string | IpNetworkParts<NetAddress.Ipv6AddressInput>
|
|
93
|
+
|
|
55
94
|
/**
|
|
56
95
|
* Returns `true` when a value is an IPv4 network prefix.
|
|
57
96
|
*
|
|
@@ -80,6 +119,7 @@ export const isIpv6Network = (u: unknown): u is Ipv6Network => isIpNetwork(u) &&
|
|
|
80
119
|
export const isIpNetwork = (u: unknown): u is IpNetwork => hasProperty(u, TypeId)
|
|
81
120
|
|
|
82
121
|
const IpNetworkProto = {
|
|
122
|
+
...Inspectable.BaseProto,
|
|
83
123
|
_tag: "IpNetwork",
|
|
84
124
|
[TypeId]: TypeId,
|
|
85
125
|
[Equal.symbol](this: IpNetwork, that: Equal.Equal): boolean {
|
|
@@ -93,9 +133,6 @@ const IpNetworkProto = {
|
|
|
93
133
|
},
|
|
94
134
|
toJSON(this: IpNetwork): string {
|
|
95
135
|
return this.toString()
|
|
96
|
-
},
|
|
97
|
-
[NodeInspectSymbol](this: IpNetwork): string {
|
|
98
|
-
return this.toJSON()
|
|
99
136
|
}
|
|
100
137
|
}
|
|
101
138
|
|
|
@@ -110,18 +147,14 @@ const fromInterfaceValue = <A extends NetAddress.IpAddress>(value: IpInterface.I
|
|
|
110
147
|
const toBytes = (address: NetAddress.IpAddress): ReadonlyArray<number> =>
|
|
111
148
|
NetAddress.isIpv4Address(address) ? NetAddress.ipv4ToOctets(address) : NetAddress.ipv6ToOctets(address)
|
|
112
149
|
|
|
113
|
-
type IpAddressFamily<A extends NetAddress.IpAddress> = A extends NetAddress.Ipv4Address ? NetAddress.Ipv4Address
|
|
114
|
-
: A extends NetAddress.Ipv6Address ? NetAddress.Ipv6Address
|
|
115
|
-
: never
|
|
116
|
-
|
|
117
150
|
const fromBytes = <A extends NetAddress.IpAddress>(
|
|
118
151
|
address: A,
|
|
119
152
|
bytes: ReadonlyArray<number>
|
|
120
|
-
):
|
|
153
|
+
): NetAddress.Family<A> => {
|
|
121
154
|
const array = new Uint8Array(bytes)
|
|
122
155
|
return (NetAddress.isIpv4Address(address)
|
|
123
156
|
? NetAddress.ipv4FromBytesUnsafe(array)
|
|
124
|
-
: NetAddress.ipv6FromBytesUnsafe(array)) as
|
|
157
|
+
: NetAddress.ipv6FromBytesUnsafe(array)) as NetAddress.Family<A>
|
|
125
158
|
}
|
|
126
159
|
|
|
127
160
|
const maskBytes = (bytes: ReadonlyArray<number>, prefixLength: number): Array<number> => {
|
|
@@ -177,7 +210,7 @@ export const make = <A extends NetAddress.IpAddress>(
|
|
|
177
210
|
export const fromAddress = <A extends NetAddress.IpAddress>(
|
|
178
211
|
address: A,
|
|
179
212
|
prefixLength: number
|
|
180
|
-
): Result.Result<IpNetwork<
|
|
213
|
+
): Result.Result<IpNetwork<NetAddress.Family<A>>, NetAddress.NetAddressError> => {
|
|
181
214
|
return Result.map(IpInterface.make(address, prefixLength), (value) => {
|
|
182
215
|
const masked = fromBytes(address, maskBytes(toBytes(address), prefixLength))
|
|
183
216
|
return fromInterfaceValue(IpInterface.makeUnsafe(masked, value.prefixLength))
|
|
@@ -194,7 +227,7 @@ export const fromAddress = <A extends NetAddress.IpAddress>(
|
|
|
194
227
|
*/
|
|
195
228
|
export const fromInterface = <A extends NetAddress.IpAddress>(
|
|
196
229
|
self: IpInterface.IpInterface<A>
|
|
197
|
-
): IpNetwork<
|
|
230
|
+
): IpNetwork<NetAddress.Family<A>> => fromAddressUnsafe(self.address, self.prefixLength)
|
|
198
231
|
|
|
199
232
|
/**
|
|
200
233
|
* Parses a strict IPv4 network prefix in CIDR notation.
|
|
@@ -238,6 +271,72 @@ export const fromString = (input: string): Result.Result<IpNetwork, NetAddress.N
|
|
|
238
271
|
)
|
|
239
272
|
}
|
|
240
273
|
|
|
274
|
+
const fromParts = <I extends NetAddress.IpAddressInput, A extends NetAddress.IpAddress>(
|
|
275
|
+
input: IpNetworkParts<I>,
|
|
276
|
+
toAddress: (input: I) => Result.Result<A, NetAddress.NetAddressError>
|
|
277
|
+
): Result.Result<IpNetwork<A>, NetAddress.NetAddressError> =>
|
|
278
|
+
hasProperty(input, "address") && hasProperty(input, "prefixLength")
|
|
279
|
+
? Result.flatMap(toAddress(input.address), (address) => make(address, input.prefixLength))
|
|
280
|
+
: Result.fail(new NetAddress.NetAddressError({ input, message: "expected an address and prefix length" }))
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Converts an `Ipv4NetworkInput` to an IPv4 network prefix, parsing strings
|
|
284
|
+
* like `ipv4FromString`, converting parts like `make`, and returning network
|
|
285
|
+
* prefixes unchanged.
|
|
286
|
+
*
|
|
287
|
+
* @stability unstable
|
|
288
|
+
* @category constructors
|
|
289
|
+
* @since 4.0.0
|
|
290
|
+
*/
|
|
291
|
+
export const ipv4FromInput = (input: Ipv4NetworkInput): Result.Result<Ipv4Network, NetAddress.NetAddressError> => {
|
|
292
|
+
if (isIpv4Network(input)) return Result.succeed(input)
|
|
293
|
+
if (typeof input === "string") return ipv4FromString(input)
|
|
294
|
+
return fromParts(input, NetAddress.ipv4FromInput)
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Converts an `Ipv6NetworkInput` to an IPv6 network prefix, parsing strings
|
|
299
|
+
* like `ipv6FromString`, converting parts like `make`, and returning network
|
|
300
|
+
* prefixes unchanged.
|
|
301
|
+
*
|
|
302
|
+
* @stability unstable
|
|
303
|
+
* @category constructors
|
|
304
|
+
* @since 4.0.0
|
|
305
|
+
*/
|
|
306
|
+
export const ipv6FromInput = (input: Ipv6NetworkInput): Result.Result<Ipv6Network, NetAddress.NetAddressError> => {
|
|
307
|
+
if (isIpv6Network(input)) return Result.succeed(input)
|
|
308
|
+
if (typeof input === "string") return ipv6FromString(input)
|
|
309
|
+
return fromParts(input, NetAddress.ipv6FromInput)
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Converts an `IpNetworkInput` to a network prefix, parsing strings like
|
|
314
|
+
* `fromString`, converting parts like `make`, and returning network prefixes
|
|
315
|
+
* unchanged.
|
|
316
|
+
*
|
|
317
|
+
* **Gotchas**
|
|
318
|
+
*
|
|
319
|
+
* Like `make`, an address with host bits set is rejected rather than truncated.
|
|
320
|
+
*
|
|
321
|
+
* @stability unstable
|
|
322
|
+
* @category constructors
|
|
323
|
+
* @since 4.0.0
|
|
324
|
+
*/
|
|
325
|
+
export const fromInput = (input: IpNetworkInput): Result.Result<IpNetwork, NetAddress.NetAddressError> => {
|
|
326
|
+
if (isIpNetwork(input)) return Result.succeed(input)
|
|
327
|
+
if (typeof input === "string") return fromString(input)
|
|
328
|
+
return fromParts(input, NetAddress.ipFromInput)
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* Converts a trusted `IpNetworkInput` to a network prefix, throwing on failure.
|
|
333
|
+
*
|
|
334
|
+
* @stability unstable
|
|
335
|
+
* @category unsafe
|
|
336
|
+
* @since 4.0.0
|
|
337
|
+
*/
|
|
338
|
+
export const fromInputUnsafe = (input: IpNetworkInput): IpNetwork => Result.getOrThrow(fromInput(input))
|
|
339
|
+
|
|
241
340
|
/**
|
|
242
341
|
* Creates a trusted network prefix, throwing when its address or prefix is invalid.
|
|
243
342
|
*
|
|
@@ -260,7 +359,7 @@ export const makeUnsafe = <A extends NetAddress.IpAddress>(address: A, prefixLen
|
|
|
260
359
|
export const fromAddressUnsafe = <A extends NetAddress.IpAddress>(
|
|
261
360
|
address: A,
|
|
262
361
|
prefixLength: number
|
|
263
|
-
): IpNetwork<
|
|
362
|
+
): IpNetwork<NetAddress.Family<A>> => Result.getOrThrow(fromAddress(address, prefixLength))
|
|
264
363
|
|
|
265
364
|
/**
|
|
266
365
|
* Parses a trusted network prefix in CIDR notation, throwing on failure.
|
|
@@ -298,7 +397,7 @@ export const firstAddress = <A extends NetAddress.IpAddress>(self: IpNetwork<A>)
|
|
|
298
397
|
* @category getters
|
|
299
398
|
* @since 4.0.0
|
|
300
399
|
*/
|
|
301
|
-
export const lastAddress = <A extends NetAddress.IpAddress>(self: IpNetwork<A>):
|
|
400
|
+
export const lastAddress = <A extends NetAddress.IpAddress>(self: IpNetwork<A>): NetAddress.Family<A> => {
|
|
302
401
|
const bytes = toBytes(self.address)
|
|
303
402
|
const networkMask = maskBytes(bytes.map(() => 0xff), self.prefixLength)
|
|
304
403
|
return fromBytes(self.address, bytes.map((byte, index) => byte | (networkMask[index] ^ 0xff)))
|