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.
Files changed (243) hide show
  1. package/dist/Context.js +3 -3
  2. package/dist/Context.js.map +1 -1
  3. package/dist/Crypto.d.ts +33 -5
  4. package/dist/Crypto.d.ts.map +1 -1
  5. package/dist/Crypto.js +8 -2
  6. package/dist/Crypto.js.map +1 -1
  7. package/dist/DateTime.d.ts +9 -6
  8. package/dist/DateTime.d.ts.map +1 -1
  9. package/dist/DateTime.js +9 -6
  10. package/dist/DateTime.js.map +1 -1
  11. package/dist/Duration.d.ts +6 -6
  12. package/dist/Duration.d.ts.map +1 -1
  13. package/dist/Duration.js +27 -8
  14. package/dist/Duration.js.map +1 -1
  15. package/dist/FileSystem.d.ts +44 -2
  16. package/dist/FileSystem.d.ts.map +1 -1
  17. package/dist/FileSystem.js.map +1 -1
  18. package/dist/Schema.d.ts +473 -1
  19. package/dist/Schema.d.ts.map +1 -1
  20. package/dist/Schema.js +355 -4
  21. package/dist/Schema.js.map +1 -1
  22. package/dist/Stdio.d.ts +7 -1
  23. package/dist/Stdio.d.ts.map +1 -1
  24. package/dist/Stdio.js +1 -0
  25. package/dist/Stdio.js.map +1 -1
  26. package/dist/Stream.d.ts +11 -11
  27. package/dist/Stream.js +5 -5
  28. package/dist/ai/McpServer.d.ts +6 -0
  29. package/dist/ai/McpServer.d.ts.map +1 -1
  30. package/dist/ai/McpServer.js +65 -23
  31. package/dist/ai/McpServer.js.map +1 -1
  32. package/dist/ai/internal/mcpProtocol/v2026_07_28.js +5 -0
  33. package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
  34. package/dist/ai/internal/mcpProtocol.js.map +1 -1
  35. package/dist/ai/internal/mcpRuntime.js +1 -0
  36. package/dist/ai/internal/mcpRuntime.js.map +1 -1
  37. package/dist/cli/CliOutput.d.ts +27 -0
  38. package/dist/cli/CliOutput.d.ts.map +1 -1
  39. package/dist/cli/CliOutput.js +33 -10
  40. package/dist/cli/CliOutput.js.map +1 -1
  41. package/dist/cli/Command.d.ts.map +1 -1
  42. package/dist/cli/Command.js +6 -3
  43. package/dist/cli/Command.js.map +1 -1
  44. package/dist/cli/Completions.d.ts +3 -3
  45. package/dist/cli/Completions.d.ts.map +1 -1
  46. package/dist/cli/Completions.js +8 -5
  47. package/dist/cli/Completions.js.map +1 -1
  48. package/dist/cli/GlobalFlag.d.ts +5 -4
  49. package/dist/cli/GlobalFlag.d.ts.map +1 -1
  50. package/dist/cli/GlobalFlag.js +3 -3
  51. package/dist/cli/GlobalFlag.js.map +1 -1
  52. package/dist/cli/Prompt.d.ts +17 -1
  53. package/dist/cli/Prompt.d.ts.map +1 -1
  54. package/dist/cli/Prompt.js +119 -114
  55. package/dist/cli/Prompt.js.map +1 -1
  56. package/dist/cli/internal/ansi.d.ts +0 -1
  57. package/dist/cli/internal/ansi.d.ts.map +1 -1
  58. package/dist/cli/internal/ansi.js +20 -3
  59. package/dist/cli/internal/ansi.js.map +1 -1
  60. package/dist/cli/internal/completions/powershell.d.ts +2 -0
  61. package/dist/cli/internal/completions/powershell.d.ts.map +1 -0
  62. package/dist/cli/internal/completions/powershell.js +273 -0
  63. package/dist/cli/internal/completions/powershell.js.map +1 -0
  64. package/dist/cli/internal/completions/zsh.js +3 -2
  65. package/dist/cli/internal/completions/zsh.js.map +1 -1
  66. package/dist/cli/internal/wizard.d.ts +3 -3
  67. package/dist/cli/internal/wizard.d.ts.map +1 -1
  68. package/dist/cli/internal/wizard.js +21 -18
  69. package/dist/cli/internal/wizard.js.map +1 -1
  70. package/dist/cluster/ClusterSchema.d.ts +28 -0
  71. package/dist/cluster/ClusterSchema.d.ts.map +1 -1
  72. package/dist/cluster/ClusterSchema.js +30 -0
  73. package/dist/cluster/ClusterSchema.js.map +1 -1
  74. package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  75. package/dist/cluster/ClusterWorkflowEngine.js +10 -18
  76. package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
  77. package/dist/cluster/MessageStorage.d.ts +18 -3
  78. package/dist/cluster/MessageStorage.d.ts.map +1 -1
  79. package/dist/cluster/MessageStorage.js +31 -11
  80. package/dist/cluster/MessageStorage.js.map +1 -1
  81. package/dist/cluster/Runners.d.ts.map +1 -1
  82. package/dist/cluster/Runners.js +8 -2
  83. package/dist/cluster/Runners.js.map +1 -1
  84. package/dist/cluster/Sharding.d.ts.map +1 -1
  85. package/dist/cluster/Sharding.js +181 -62
  86. package/dist/cluster/Sharding.js.map +1 -1
  87. package/dist/cluster/SqlMessageStorage.d.ts +59 -19
  88. package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
  89. package/dist/cluster/SqlMessageStorage.js +84 -55
  90. package/dist/cluster/SqlMessageStorage.js.map +1 -1
  91. package/dist/cluster/SqlRunnerStorage.d.ts +68 -19
  92. package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
  93. package/dist/cluster/SqlRunnerStorage.js +191 -113
  94. package/dist/cluster/SqlRunnerStorage.js.map +1 -1
  95. package/dist/cluster/internal/entityManager.js +104 -37
  96. package/dist/cluster/internal/entityManager.js.map +1 -1
  97. package/dist/http/FindMyWay/internal/router.js +3 -6
  98. package/dist/http/FindMyWay/internal/router.js.map +1 -1
  99. package/dist/http/HttpClient.d.ts +6 -0
  100. package/dist/http/HttpClient.d.ts.map +1 -1
  101. package/dist/http/HttpClient.js +39 -2
  102. package/dist/http/HttpClient.js.map +1 -1
  103. package/dist/http/HttpTraceContext.d.ts.map +1 -1
  104. package/dist/http/HttpTraceContext.js +4 -2
  105. package/dist/http/HttpTraceContext.js.map +1 -1
  106. package/dist/internal/effect.js +12 -7
  107. package/dist/internal/effect.js.map +1 -1
  108. package/dist/internal/version.js +1 -1
  109. package/dist/net/AddressResolver.d.ts +145 -0
  110. package/dist/net/AddressResolver.d.ts.map +1 -0
  111. package/dist/net/AddressResolver.js +114 -0
  112. package/dist/net/AddressResolver.js.map +1 -0
  113. package/dist/net/Dns.d.ts +596 -0
  114. package/dist/net/Dns.d.ts.map +1 -0
  115. package/dist/net/Dns.js +549 -0
  116. package/dist/net/Dns.js.map +1 -0
  117. package/dist/net/Host.d.ts +320 -0
  118. package/dist/net/Host.d.ts.map +1 -0
  119. package/dist/net/Host.js +342 -0
  120. package/dist/net/Host.js.map +1 -0
  121. package/dist/net/IpInterface.d.ts +76 -3
  122. package/dist/net/IpInterface.d.ts.map +1 -1
  123. package/dist/net/IpInterface.js +53 -4
  124. package/dist/net/IpInterface.js.map +1 -1
  125. package/dist/net/IpNetwork.d.ts +82 -8
  126. package/dist/net/IpNetwork.d.ts.map +1 -1
  127. package/dist/net/IpNetwork.js +60 -4
  128. package/dist/net/IpNetwork.js.map +1 -1
  129. package/dist/net/NetAddress.d.ts +388 -35
  130. package/dist/net/NetAddress.d.ts.map +1 -1
  131. package/dist/net/NetAddress.js +350 -34
  132. package/dist/net/NetAddress.js.map +1 -1
  133. package/dist/net/index.d.ts +15 -0
  134. package/dist/net/index.d.ts.map +1 -1
  135. package/dist/net/index.js +15 -0
  136. package/dist/net/index.js.map +1 -1
  137. package/dist/observability/OtlpMetrics.d.ts.map +1 -1
  138. package/dist/observability/OtlpMetrics.js +15 -21
  139. package/dist/observability/OtlpMetrics.js.map +1 -1
  140. package/dist/observability/PrometheusMetrics.js +1 -0
  141. package/dist/observability/PrometheusMetrics.js.map +1 -1
  142. package/dist/persistence/PersistedQueue.d.ts +32 -3
  143. package/dist/persistence/PersistedQueue.d.ts.map +1 -1
  144. package/dist/persistence/PersistedQueue.js +75 -16
  145. package/dist/persistence/PersistedQueue.js.map +1 -1
  146. package/dist/rpc/RpcClient.d.ts +22 -6
  147. package/dist/rpc/RpcClient.d.ts.map +1 -1
  148. package/dist/rpc/RpcClient.js +12 -5
  149. package/dist/rpc/RpcClient.js.map +1 -1
  150. package/dist/rpc/RpcServer.d.ts +6 -0
  151. package/dist/rpc/RpcServer.d.ts.map +1 -1
  152. package/dist/rpc/RpcServer.js +42 -20
  153. package/dist/rpc/RpcServer.js.map +1 -1
  154. package/dist/socket/DatagramSocket.d.ts +456 -0
  155. package/dist/socket/DatagramSocket.d.ts.map +1 -0
  156. package/dist/socket/DatagramSocket.js +535 -0
  157. package/dist/socket/DatagramSocket.js.map +1 -0
  158. package/dist/socket/Socket.d.ts +14 -1
  159. package/dist/socket/Socket.d.ts.map +1 -1
  160. package/dist/socket/Socket.js +9 -1
  161. package/dist/socket/Socket.js.map +1 -1
  162. package/dist/socket/index.d.ts +5 -0
  163. package/dist/socket/index.d.ts.map +1 -1
  164. package/dist/socket/index.js +5 -0
  165. package/dist/socket/index.js.map +1 -1
  166. package/dist/sql/Migrator.d.ts.map +1 -1
  167. package/dist/sql/Migrator.js +7 -2
  168. package/dist/sql/Migrator.js.map +1 -1
  169. package/dist/sql/SqlClient.d.ts +7 -1
  170. package/dist/sql/SqlClient.d.ts.map +1 -1
  171. package/dist/sql/SqlClient.js +31 -6
  172. package/dist/sql/SqlClient.js.map +1 -1
  173. package/dist/testing/TestCrypto.d.ts +73 -0
  174. package/dist/testing/TestCrypto.d.ts.map +1 -0
  175. package/dist/testing/TestCrypto.js +87 -0
  176. package/dist/testing/TestCrypto.js.map +1 -0
  177. package/dist/testing/index.d.ts +5 -0
  178. package/dist/testing/index.d.ts.map +1 -1
  179. package/dist/testing/index.js +5 -0
  180. package/dist/testing/index.js.map +1 -1
  181. package/dist/workflow/DurableDeferred.d.ts +54 -0
  182. package/dist/workflow/DurableDeferred.d.ts.map +1 -1
  183. package/dist/workflow/DurableDeferred.js +78 -49
  184. package/dist/workflow/DurableDeferred.js.map +1 -1
  185. package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
  186. package/dist/workflow/WorkflowEngine.js +2 -1
  187. package/dist/workflow/WorkflowEngine.js.map +1 -1
  188. package/package.json +1 -1
  189. package/src/Context.ts +3 -3
  190. package/src/Crypto.ts +43 -9
  191. package/src/DateTime.ts +9 -6
  192. package/src/Duration.ts +36 -16
  193. package/src/FileSystem.ts +48 -2
  194. package/src/Schema.ts +669 -5
  195. package/src/Stdio.ts +9 -2
  196. package/src/Stream.ts +11 -11
  197. package/src/ai/McpServer.ts +63 -23
  198. package/src/ai/internal/mcpProtocol/v2026_07_28.ts +5 -0
  199. package/src/ai/internal/mcpProtocol.ts +3 -0
  200. package/src/ai/internal/mcpRuntime.ts +2 -0
  201. package/src/cli/CliOutput.ts +33 -16
  202. package/src/cli/Command.ts +4 -3
  203. package/src/cli/Completions.ts +9 -6
  204. package/src/cli/GlobalFlag.ts +19 -11
  205. package/src/cli/Prompt.ts +159 -149
  206. package/src/cli/internal/ansi.ts +26 -3
  207. package/src/cli/internal/completions/powershell.ts +322 -0
  208. package/src/cli/internal/completions/zsh.ts +4 -2
  209. package/src/cli/internal/wizard.ts +34 -26
  210. package/src/cluster/ClusterSchema.ts +32 -0
  211. package/src/cluster/ClusterWorkflowEngine.ts +13 -24
  212. package/src/cluster/MessageStorage.ts +45 -14
  213. package/src/cluster/Runners.ts +8 -2
  214. package/src/cluster/Sharding.ts +207 -49
  215. package/src/cluster/SqlMessageStorage.ts +118 -84
  216. package/src/cluster/SqlRunnerStorage.ts +224 -128
  217. package/src/cluster/internal/entityManager.ts +151 -55
  218. package/src/http/FindMyWay/internal/router.ts +4 -7
  219. package/src/http/HttpClient.ts +56 -2
  220. package/src/http/HttpTraceContext.ts +8 -2
  221. package/src/internal/effect.ts +15 -13
  222. package/src/internal/version.ts +1 -1
  223. package/src/net/AddressResolver.ts +222 -0
  224. package/src/net/Dns.ts +1035 -0
  225. package/src/net/Host.ts +472 -0
  226. package/src/net/IpInterface.ts +117 -7
  227. package/src/net/IpNetwork.ts +116 -17
  228. package/src/net/NetAddress.ts +611 -76
  229. package/src/net/index.ts +18 -0
  230. package/src/observability/OtlpMetrics.ts +12 -23
  231. package/src/observability/PrometheusMetrics.ts +1 -0
  232. package/src/persistence/PersistedQueue.ts +146 -53
  233. package/src/rpc/RpcClient.ts +41 -19
  234. package/src/rpc/RpcServer.ts +60 -25
  235. package/src/socket/DatagramSocket.ts +919 -0
  236. package/src/socket/Socket.ts +22 -2
  237. package/src/socket/index.ts +6 -0
  238. package/src/sql/Migrator.ts +21 -5
  239. package/src/sql/SqlClient.ts +39 -15
  240. package/src/testing/TestCrypto.ts +94 -0
  241. package/src/testing/index.ts +6 -0
  242. package/src/workflow/DurableDeferred.ts +123 -48
  243. package/src/workflow/WorkflowEngine.ts +2 -1
@@ -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 { NodeInspectSymbol } from "../Inspectable.ts"
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> extends Equal.Equal, Hash.Hash {
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
- ): IpAddressFamily<A> => {
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 IpAddressFamily<A>
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<IpAddressFamily<A>>, NetAddress.NetAddressError> => {
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<IpAddressFamily<A>> => fromAddressUnsafe(self.address, self.prefixLength)
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<IpAddressFamily<A>> => Result.getOrThrow(fromAddress(address, prefixLength))
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>): IpAddressFamily<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)))