effect 4.0.0-beta.31 → 4.0.0-beta.32

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 (464) hide show
  1. package/dist/Array.d.ts +87 -86
  2. package/dist/Array.d.ts.map +1 -1
  3. package/dist/Array.js +47 -40
  4. package/dist/Array.js.map +1 -1
  5. package/dist/BigDecimal.d.ts +46 -45
  6. package/dist/BigDecimal.d.ts.map +1 -1
  7. package/dist/BigDecimal.js +35 -38
  8. package/dist/BigDecimal.js.map +1 -1
  9. package/dist/BigInt.d.ts +39 -32
  10. package/dist/BigInt.d.ts.map +1 -1
  11. package/dist/BigInt.js +32 -29
  12. package/dist/BigInt.js.map +1 -1
  13. package/dist/Chunk.d.ts +58 -57
  14. package/dist/Chunk.d.ts.map +1 -1
  15. package/dist/Chunk.js +20 -21
  16. package/dist/Chunk.js.map +1 -1
  17. package/dist/Config.d.ts.map +1 -1
  18. package/dist/Config.js +4 -1
  19. package/dist/Config.js.map +1 -1
  20. package/dist/Cron.d.ts +3 -6
  21. package/dist/Cron.d.ts.map +1 -1
  22. package/dist/Cron.js +8 -15
  23. package/dist/Cron.js.map +1 -1
  24. package/dist/DateTime.d.ts +16 -15
  25. package/dist/DateTime.d.ts.map +1 -1
  26. package/dist/DateTime.js +8 -8
  27. package/dist/DateTime.js.map +1 -1
  28. package/dist/Deferred.d.ts +7 -5
  29. package/dist/Deferred.d.ts.map +1 -1
  30. package/dist/Deferred.js +7 -5
  31. package/dist/Deferred.js.map +1 -1
  32. package/dist/Duration.d.ts +26 -24
  33. package/dist/Duration.d.ts.map +1 -1
  34. package/dist/Duration.js +23 -22
  35. package/dist/Duration.js.map +1 -1
  36. package/dist/Effect.d.ts.map +1 -1
  37. package/dist/Effect.js +3 -4
  38. package/dist/Effect.js.map +1 -1
  39. package/dist/Fiber.d.ts +2 -1
  40. package/dist/Fiber.d.ts.map +1 -1
  41. package/dist/Fiber.js.map +1 -1
  42. package/dist/FiberHandle.d.ts +9 -8
  43. package/dist/FiberHandle.d.ts.map +1 -1
  44. package/dist/FiberHandle.js +8 -7
  45. package/dist/FiberHandle.js.map +1 -1
  46. package/dist/FiberMap.d.ts +20 -19
  47. package/dist/FiberMap.d.ts.map +1 -1
  48. package/dist/FiberMap.js +6 -6
  49. package/dist/FiberMap.js.map +1 -1
  50. package/dist/FileSystem.d.ts +17 -16
  51. package/dist/FileSystem.d.ts.map +1 -1
  52. package/dist/FileSystem.js +10 -7
  53. package/dist/FileSystem.js.map +1 -1
  54. package/dist/Graph.d.ts +64 -64
  55. package/dist/Graph.d.ts.map +1 -1
  56. package/dist/Graph.js +53 -53
  57. package/dist/Graph.js.map +1 -1
  58. package/dist/HashMap.d.ts +11 -5
  59. package/dist/HashMap.d.ts.map +1 -1
  60. package/dist/HashMap.js +3 -1
  61. package/dist/HashMap.js.map +1 -1
  62. package/dist/Iterable.d.ts +11 -11
  63. package/dist/Iterable.d.ts.map +1 -1
  64. package/dist/Iterable.js +12 -12
  65. package/dist/Iterable.js.map +1 -1
  66. package/dist/Latch.d.ts +69 -3
  67. package/dist/Latch.d.ts.map +1 -1
  68. package/dist/Latch.js +58 -0
  69. package/dist/Latch.js.map +1 -1
  70. package/dist/Layer.d.ts +84 -0
  71. package/dist/Layer.d.ts.map +1 -1
  72. package/dist/Layer.js +27 -0
  73. package/dist/Layer.js.map +1 -1
  74. package/dist/Number.d.ts +74 -18
  75. package/dist/Number.d.ts.map +1 -1
  76. package/dist/Number.js +34 -15
  77. package/dist/Number.js.map +1 -1
  78. package/dist/Option.d.ts +2 -0
  79. package/dist/Option.d.ts.map +1 -1
  80. package/dist/Option.js.map +1 -1
  81. package/dist/PartitionedSemaphore.d.ts +183 -0
  82. package/dist/PartitionedSemaphore.d.ts.map +1 -0
  83. package/dist/PartitionedSemaphore.js +231 -0
  84. package/dist/PartitionedSemaphore.js.map +1 -0
  85. package/dist/PubSub.d.ts +5 -4
  86. package/dist/PubSub.d.ts.map +1 -1
  87. package/dist/PubSub.js +6 -5
  88. package/dist/PubSub.js.map +1 -1
  89. package/dist/Queue.d.ts +3 -3
  90. package/dist/Queue.d.ts.map +1 -1
  91. package/dist/Queue.js +2 -2
  92. package/dist/Queue.js.map +1 -1
  93. package/dist/Record.d.ts +40 -40
  94. package/dist/Record.d.ts.map +1 -1
  95. package/dist/Record.js +16 -15
  96. package/dist/Record.js.map +1 -1
  97. package/dist/Scheduler.d.ts +25 -123
  98. package/dist/Scheduler.d.ts.map +1 -1
  99. package/dist/Scheduler.js +20 -123
  100. package/dist/Scheduler.js.map +1 -1
  101. package/dist/Schema.d.ts +30 -0
  102. package/dist/Schema.d.ts.map +1 -1
  103. package/dist/Schema.js +28 -1
  104. package/dist/Schema.js.map +1 -1
  105. package/dist/SchemaGetter.js +6 -4
  106. package/dist/SchemaGetter.js.map +1 -1
  107. package/dist/SchemaTransformation.d.ts.map +1 -1
  108. package/dist/SchemaTransformation.js +32 -27
  109. package/dist/SchemaTransformation.js.map +1 -1
  110. package/dist/Semaphore.d.ts +149 -53
  111. package/dist/Semaphore.d.ts.map +1 -1
  112. package/dist/Semaphore.js +137 -117
  113. package/dist/Semaphore.js.map +1 -1
  114. package/dist/ServiceMap.d.ts +26 -0
  115. package/dist/ServiceMap.d.ts.map +1 -1
  116. package/dist/ServiceMap.js +36 -21
  117. package/dist/ServiceMap.js.map +1 -1
  118. package/dist/Stream.js +1 -1
  119. package/dist/Stream.js.map +1 -1
  120. package/dist/String.d.ts +114 -47
  121. package/dist/String.d.ts.map +1 -1
  122. package/dist/String.js +29 -47
  123. package/dist/String.js.map +1 -1
  124. package/dist/SubscriptionRef.d.ts +1 -2
  125. package/dist/SubscriptionRef.d.ts.map +1 -1
  126. package/dist/SubscriptionRef.js +81 -115
  127. package/dist/SubscriptionRef.js.map +1 -1
  128. package/dist/Terminal.d.ts +2 -1
  129. package/dist/Terminal.d.ts.map +1 -1
  130. package/dist/Terminal.js.map +1 -1
  131. package/dist/Tracer.d.ts +5 -4
  132. package/dist/Tracer.d.ts.map +1 -1
  133. package/dist/Tracer.js +2 -1
  134. package/dist/Tracer.js.map +1 -1
  135. package/dist/Trie.d.ts +26 -14
  136. package/dist/Trie.d.ts.map +1 -1
  137. package/dist/Trie.js +8 -4
  138. package/dist/Trie.js.map +1 -1
  139. package/dist/TxHashMap.d.ts +77 -59
  140. package/dist/TxHashMap.d.ts.map +1 -1
  141. package/dist/TxHashMap.js +25 -19
  142. package/dist/TxHashMap.js.map +1 -1
  143. package/dist/TxSemaphore.d.ts +162 -2
  144. package/dist/TxSemaphore.d.ts.map +1 -1
  145. package/dist/TxSemaphore.js +16 -2
  146. package/dist/TxSemaphore.js.map +1 -1
  147. package/dist/index.d.ts +88 -32
  148. package/dist/index.d.ts.map +1 -1
  149. package/dist/index.js +88 -32
  150. package/dist/index.js.map +1 -1
  151. package/dist/internal/dateTime.js +9 -9
  152. package/dist/internal/dateTime.js.map +1 -1
  153. package/dist/internal/effect.js +20 -89
  154. package/dist/internal/effect.js.map +1 -1
  155. package/dist/internal/hashMap.js +2 -1
  156. package/dist/internal/hashMap.js.map +1 -1
  157. package/dist/internal/option.js +6 -0
  158. package/dist/internal/option.js.map +1 -1
  159. package/dist/internal/trie.js +3 -3
  160. package/dist/internal/trie.js.map +1 -1
  161. package/dist/unstable/ai/AiError.js +1 -1
  162. package/dist/unstable/ai/AiError.js.map +1 -1
  163. package/dist/unstable/ai/AnthropicStructuredOutput.d.ts.map +1 -1
  164. package/dist/unstable/ai/AnthropicStructuredOutput.js +4 -0
  165. package/dist/unstable/ai/AnthropicStructuredOutput.js.map +1 -1
  166. package/dist/unstable/ai/Chat.d.ts.map +1 -1
  167. package/dist/unstable/ai/Chat.js +2 -2
  168. package/dist/unstable/ai/Chat.js.map +1 -1
  169. package/dist/unstable/ai/OpenAiStructuredOutput.d.ts.map +1 -1
  170. package/dist/unstable/ai/OpenAiStructuredOutput.js +4 -0
  171. package/dist/unstable/ai/OpenAiStructuredOutput.js.map +1 -1
  172. package/dist/unstable/ai/Tool.d.ts +14 -0
  173. package/dist/unstable/ai/Tool.d.ts.map +1 -1
  174. package/dist/unstable/ai/Tool.js +13 -0
  175. package/dist/unstable/ai/Tool.js.map +1 -1
  176. package/dist/unstable/cli/Argument.d.ts +2 -4
  177. package/dist/unstable/cli/Argument.d.ts.map +1 -1
  178. package/dist/unstable/cli/Argument.js +1 -3
  179. package/dist/unstable/cli/Argument.js.map +1 -1
  180. package/dist/unstable/cli/CliOutput.d.ts +3 -2
  181. package/dist/unstable/cli/CliOutput.d.ts.map +1 -1
  182. package/dist/unstable/cli/CliOutput.js +4 -3
  183. package/dist/unstable/cli/CliOutput.js.map +1 -1
  184. package/dist/unstable/cli/Command.d.ts +3 -2
  185. package/dist/unstable/cli/Command.d.ts.map +1 -1
  186. package/dist/unstable/cli/Command.js +3 -3
  187. package/dist/unstable/cli/Command.js.map +1 -1
  188. package/dist/unstable/cli/Flag.d.ts +2 -2
  189. package/dist/unstable/cli/Flag.d.ts.map +1 -1
  190. package/dist/unstable/cli/Flag.js +1 -1
  191. package/dist/unstable/cli/Flag.js.map +1 -1
  192. package/dist/unstable/cli/HelpDoc.d.ts +14 -12
  193. package/dist/unstable/cli/HelpDoc.d.ts.map +1 -1
  194. package/dist/unstable/cli/Param.d.ts +4 -4
  195. package/dist/unstable/cli/Param.d.ts.map +1 -1
  196. package/dist/unstable/cli/Param.js +7 -7
  197. package/dist/unstable/cli/Param.js.map +1 -1
  198. package/dist/unstable/cli/Primitive.d.ts +1 -1
  199. package/dist/unstable/cli/Primitive.d.ts.map +1 -1
  200. package/dist/unstable/cli/Primitive.js.map +1 -1
  201. package/dist/unstable/cli/Prompt.js +71 -67
  202. package/dist/unstable/cli/Prompt.js.map +1 -1
  203. package/dist/unstable/cli/internal/completions/CommandDescriptor.js +9 -2
  204. package/dist/unstable/cli/internal/completions/CommandDescriptor.js.map +1 -1
  205. package/dist/unstable/cli/internal/parser.js +8 -3
  206. package/dist/unstable/cli/internal/parser.js.map +1 -1
  207. package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts +3 -2
  208. package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  209. package/dist/unstable/cluster/ClusterWorkflowEngine.js +25 -23
  210. package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
  211. package/dist/unstable/cluster/Entity.d.ts +3 -2
  212. package/dist/unstable/cluster/Entity.d.ts.map +1 -1
  213. package/dist/unstable/cluster/Entity.js +7 -7
  214. package/dist/unstable/cluster/Entity.js.map +1 -1
  215. package/dist/unstable/cluster/Message.d.ts +4 -3
  216. package/dist/unstable/cluster/Message.d.ts.map +1 -1
  217. package/dist/unstable/cluster/Message.js +3 -2
  218. package/dist/unstable/cluster/Message.js.map +1 -1
  219. package/dist/unstable/cluster/MessageStorage.d.ts +10 -10
  220. package/dist/unstable/cluster/MessageStorage.d.ts.map +1 -1
  221. package/dist/unstable/cluster/MessageStorage.js +12 -12
  222. package/dist/unstable/cluster/MessageStorage.js.map +1 -1
  223. package/dist/unstable/cluster/Reply.d.ts +2 -1
  224. package/dist/unstable/cluster/Reply.d.ts.map +1 -1
  225. package/dist/unstable/cluster/Reply.js +4 -3
  226. package/dist/unstable/cluster/Reply.js.map +1 -1
  227. package/dist/unstable/cluster/RunnerServer.d.ts.map +1 -1
  228. package/dist/unstable/cluster/RunnerServer.js +9 -8
  229. package/dist/unstable/cluster/RunnerServer.js.map +1 -1
  230. package/dist/unstable/cluster/Runners.d.ts +2 -1
  231. package/dist/unstable/cluster/Runners.d.ts.map +1 -1
  232. package/dist/unstable/cluster/Runners.js +7 -6
  233. package/dist/unstable/cluster/Runners.js.map +1 -1
  234. package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
  235. package/dist/unstable/cluster/Sharding.js +19 -13
  236. package/dist/unstable/cluster/Sharding.js.map +1 -1
  237. package/dist/unstable/cluster/ShardingConfig.d.ts +5 -4
  238. package/dist/unstable/cluster/ShardingConfig.d.ts.map +1 -1
  239. package/dist/unstable/cluster/ShardingConfig.js +4 -4
  240. package/dist/unstable/cluster/ShardingConfig.js.map +1 -1
  241. package/dist/unstable/cluster/SqlMessageStorage.d.ts.map +1 -1
  242. package/dist/unstable/cluster/SqlMessageStorage.js +19 -18
  243. package/dist/unstable/cluster/SqlMessageStorage.js.map +1 -1
  244. package/dist/unstable/cluster/internal/entityManager.js +9 -10
  245. package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
  246. package/dist/unstable/devtools/DevToolsSchema.d.ts +2 -1
  247. package/dist/unstable/devtools/DevToolsSchema.d.ts.map +1 -1
  248. package/dist/unstable/devtools/DevToolsSchema.js +1 -4
  249. package/dist/unstable/devtools/DevToolsSchema.js.map +1 -1
  250. package/dist/unstable/http/Cookies.d.ts +5 -4
  251. package/dist/unstable/http/Cookies.d.ts.map +1 -1
  252. package/dist/unstable/http/Cookies.js +3 -4
  253. package/dist/unstable/http/Cookies.js.map +1 -1
  254. package/dist/unstable/http/Etag.d.ts.map +1 -1
  255. package/dist/unstable/http/Etag.js +5 -1
  256. package/dist/unstable/http/Etag.js.map +1 -1
  257. package/dist/unstable/http/Headers.d.ts +3 -2
  258. package/dist/unstable/http/Headers.d.ts.map +1 -1
  259. package/dist/unstable/http/Headers.js +2 -1
  260. package/dist/unstable/http/Headers.js.map +1 -1
  261. package/dist/unstable/http/HttpClient.d.ts.map +1 -1
  262. package/dist/unstable/http/HttpClient.js +2 -1
  263. package/dist/unstable/http/HttpClient.js.map +1 -1
  264. package/dist/unstable/http/HttpClientRequest.d.ts +4 -3
  265. package/dist/unstable/http/HttpClientRequest.d.ts.map +1 -1
  266. package/dist/unstable/http/HttpClientRequest.js +8 -6
  267. package/dist/unstable/http/HttpClientRequest.js.map +1 -1
  268. package/dist/unstable/http/HttpClientResponse.d.ts.map +1 -1
  269. package/dist/unstable/http/HttpClientResponse.js +2 -1
  270. package/dist/unstable/http/HttpClientResponse.js.map +1 -1
  271. package/dist/unstable/http/HttpIncomingMessage.d.ts +2 -1
  272. package/dist/unstable/http/HttpIncomingMessage.d.ts.map +1 -1
  273. package/dist/unstable/http/HttpIncomingMessage.js.map +1 -1
  274. package/dist/unstable/http/HttpMiddleware.d.ts.map +1 -1
  275. package/dist/unstable/http/HttpMiddleware.js +16 -15
  276. package/dist/unstable/http/HttpMiddleware.js.map +1 -1
  277. package/dist/unstable/http/HttpPlatform.d.ts.map +1 -1
  278. package/dist/unstable/http/HttpPlatform.js +3 -2
  279. package/dist/unstable/http/HttpPlatform.js.map +1 -1
  280. package/dist/unstable/http/HttpRouter.d.ts +2 -1
  281. package/dist/unstable/http/HttpRouter.d.ts.map +1 -1
  282. package/dist/unstable/http/HttpRouter.js +7 -7
  283. package/dist/unstable/http/HttpRouter.js.map +1 -1
  284. package/dist/unstable/http/HttpServer.d.ts.map +1 -1
  285. package/dist/unstable/http/HttpServer.js +2 -2
  286. package/dist/unstable/http/HttpServer.js.map +1 -1
  287. package/dist/unstable/http/HttpServerError.d.ts +2 -1
  288. package/dist/unstable/http/HttpServerError.d.ts.map +1 -1
  289. package/dist/unstable/http/HttpServerError.js +2 -1
  290. package/dist/unstable/http/HttpServerError.js.map +1 -1
  291. package/dist/unstable/http/HttpServerRequest.d.ts +3 -2
  292. package/dist/unstable/http/HttpServerRequest.d.ts.map +1 -1
  293. package/dist/unstable/http/HttpServerRequest.js +14 -10
  294. package/dist/unstable/http/HttpServerRequest.js.map +1 -1
  295. package/dist/unstable/http/HttpServerResponse.d.ts.map +1 -1
  296. package/dist/unstable/http/HttpServerResponse.js +4 -3
  297. package/dist/unstable/http/HttpServerResponse.js.map +1 -1
  298. package/dist/unstable/http/HttpTraceContext.d.ts +3 -2
  299. package/dist/unstable/http/HttpTraceContext.d.ts.map +1 -1
  300. package/dist/unstable/http/HttpTraceContext.js +27 -15
  301. package/dist/unstable/http/HttpTraceContext.js.map +1 -1
  302. package/dist/unstable/http/UrlParams.d.ts +5 -4
  303. package/dist/unstable/http/UrlParams.d.ts.map +1 -1
  304. package/dist/unstable/http/UrlParams.js +5 -6
  305. package/dist/unstable/http/UrlParams.js.map +1 -1
  306. package/dist/unstable/httpapi/HttpApiBuilder.d.ts.map +1 -1
  307. package/dist/unstable/httpapi/HttpApiBuilder.js +4 -2
  308. package/dist/unstable/httpapi/HttpApiBuilder.js.map +1 -1
  309. package/dist/unstable/httpapi/HttpApiError.d.ts +15 -0
  310. package/dist/unstable/httpapi/HttpApiError.d.ts.map +1 -1
  311. package/dist/unstable/httpapi/HttpApiError.js +81 -3
  312. package/dist/unstable/httpapi/HttpApiError.js.map +1 -1
  313. package/dist/unstable/observability/OtlpExporter.d.ts.map +1 -1
  314. package/dist/unstable/observability/OtlpExporter.js +2 -2
  315. package/dist/unstable/observability/OtlpExporter.js.map +1 -1
  316. package/dist/unstable/observability/OtlpTracer.d.ts.map +1 -1
  317. package/dist/unstable/observability/OtlpTracer.js +7 -3
  318. package/dist/unstable/observability/OtlpTracer.js.map +1 -1
  319. package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
  320. package/dist/unstable/reactivity/Atom.js +1 -5
  321. package/dist/unstable/reactivity/Atom.js.map +1 -1
  322. package/dist/unstable/reactivity/AtomRegistry.d.ts.map +1 -1
  323. package/dist/unstable/reactivity/AtomRegistry.js +4 -2
  324. package/dist/unstable/reactivity/AtomRegistry.js.map +1 -1
  325. package/dist/unstable/rpc/Rpc.d.ts.map +1 -1
  326. package/dist/unstable/rpc/Rpc.js +4 -3
  327. package/dist/unstable/rpc/Rpc.js.map +1 -1
  328. package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
  329. package/dist/unstable/rpc/RpcClient.js +4 -4
  330. package/dist/unstable/rpc/RpcClient.js.map +1 -1
  331. package/dist/unstable/rpc/RpcSchema.d.ts.map +1 -1
  332. package/dist/unstable/rpc/RpcSchema.js +3 -2
  333. package/dist/unstable/rpc/RpcSchema.js.map +1 -1
  334. package/dist/unstable/rpc/RpcSerialization.d.ts.map +1 -1
  335. package/dist/unstable/rpc/RpcSerialization.js +4 -1
  336. package/dist/unstable/rpc/RpcSerialization.js.map +1 -1
  337. package/dist/unstable/rpc/RpcServer.d.ts +1 -1
  338. package/dist/unstable/rpc/RpcServer.d.ts.map +1 -1
  339. package/dist/unstable/rpc/RpcServer.js +3 -2
  340. package/dist/unstable/rpc/RpcServer.js.map +1 -1
  341. package/dist/unstable/socket/Socket.d.ts.map +1 -1
  342. package/dist/unstable/socket/Socket.js +2 -1
  343. package/dist/unstable/socket/Socket.js.map +1 -1
  344. package/dist/unstable/sql/SqlClient.d.ts.map +1 -1
  345. package/dist/unstable/sql/SqlClient.js +1 -1
  346. package/dist/unstable/sql/SqlClient.js.map +1 -1
  347. package/dist/unstable/workflow/DurableDeferred.js +6 -6
  348. package/dist/unstable/workflow/DurableDeferred.js.map +1 -1
  349. package/dist/unstable/workflow/Workflow.d.ts +2 -1
  350. package/dist/unstable/workflow/Workflow.d.ts.map +1 -1
  351. package/dist/unstable/workflow/WorkflowEngine.d.ts +5 -4
  352. package/dist/unstable/workflow/WorkflowEngine.d.ts.map +1 -1
  353. package/dist/unstable/workflow/WorkflowEngine.js +19 -14
  354. package/dist/unstable/workflow/WorkflowEngine.js.map +1 -1
  355. package/package.json +1 -1
  356. package/src/Array.ts +112 -105
  357. package/src/BigDecimal.ts +63 -66
  358. package/src/BigInt.ts +49 -41
  359. package/src/Chunk.ts +68 -63
  360. package/src/Config.ts +4 -1
  361. package/src/Cron.ts +10 -15
  362. package/src/DateTime.ts +16 -15
  363. package/src/Deferred.ts +8 -6
  364. package/src/Duration.ts +34 -33
  365. package/src/Effect.ts +3 -4
  366. package/src/Fiber.ts +2 -1
  367. package/src/FiberHandle.ts +10 -9
  368. package/src/FiberMap.ts +22 -22
  369. package/src/FileSystem.ts +25 -22
  370. package/src/Graph.ts +105 -105
  371. package/src/HashMap.ts +11 -5
  372. package/src/Iterable.ts +13 -13
  373. package/src/Latch.ts +85 -3
  374. package/src/Layer.ts +121 -0
  375. package/src/Number.ts +85 -26
  376. package/src/Option.ts +2 -0
  377. package/src/PartitionedSemaphore.ts +414 -0
  378. package/src/PubSub.ts +7 -6
  379. package/src/Queue.ts +5 -5
  380. package/src/Record.ts +52 -47
  381. package/src/Scheduler.ts +37 -126
  382. package/src/Schema.ts +49 -1
  383. package/src/SchemaGetter.ts +4 -4
  384. package/src/SchemaTransformation.ts +27 -27
  385. package/src/Semaphore.ts +271 -183
  386. package/src/ServiceMap.ts +83 -31
  387. package/src/Stream.ts +1 -1
  388. package/src/String.ts +122 -69
  389. package/src/SubscriptionRef.ts +96 -117
  390. package/src/Terminal.ts +2 -1
  391. package/src/Tracer.ts +6 -5
  392. package/src/Trie.ts +26 -14
  393. package/src/TxHashMap.ts +78 -60
  394. package/src/TxSemaphore.ts +186 -11
  395. package/src/index.ts +89 -33
  396. package/src/internal/dateTime.ts +14 -14
  397. package/src/internal/effect.ts +29 -121
  398. package/src/internal/hashMap.ts +4 -3
  399. package/src/internal/option.ts +7 -0
  400. package/src/internal/trie.ts +6 -6
  401. package/src/unstable/ai/AiError.ts +1 -1
  402. package/src/unstable/ai/AnthropicStructuredOutput.ts +4 -0
  403. package/src/unstable/ai/Chat.ts +6 -2
  404. package/src/unstable/ai/OpenAiStructuredOutput.ts +4 -0
  405. package/src/unstable/ai/Tool.ts +20 -0
  406. package/src/unstable/cli/Argument.ts +2 -4
  407. package/src/unstable/cli/CliOutput.ts +7 -5
  408. package/src/unstable/cli/Command.ts +5 -5
  409. package/src/unstable/cli/Flag.ts +2 -2
  410. package/src/unstable/cli/HelpDoc.ts +14 -12
  411. package/src/unstable/cli/Param.ts +15 -11
  412. package/src/unstable/cli/Primitive.ts +1 -1
  413. package/src/unstable/cli/Prompt.ts +81 -83
  414. package/src/unstable/cli/internal/completions/CommandDescriptor.ts +3 -2
  415. package/src/unstable/cli/internal/parser.ts +7 -4
  416. package/src/unstable/cluster/ClusterWorkflowEngine.ts +35 -30
  417. package/src/unstable/cluster/Entity.ts +13 -12
  418. package/src/unstable/cluster/Message.ts +6 -5
  419. package/src/unstable/cluster/MessageStorage.ts +26 -25
  420. package/src/unstable/cluster/Reply.ts +7 -4
  421. package/src/unstable/cluster/RunnerServer.ts +10 -13
  422. package/src/unstable/cluster/Runners.ts +8 -7
  423. package/src/unstable/cluster/Sharding.ts +24 -17
  424. package/src/unstable/cluster/ShardingConfig.ts +6 -6
  425. package/src/unstable/cluster/SqlMessageStorage.ts +21 -18
  426. package/src/unstable/cluster/internal/entityManager.ts +27 -21
  427. package/src/unstable/devtools/DevToolsSchema.ts +3 -2
  428. package/src/unstable/http/Cookies.ts +7 -8
  429. package/src/unstable/http/Etag.ts +5 -3
  430. package/src/unstable/http/Headers.ts +6 -5
  431. package/src/unstable/http/HttpClient.ts +2 -1
  432. package/src/unstable/http/HttpClientRequest.ts +11 -9
  433. package/src/unstable/http/HttpClientResponse.ts +3 -2
  434. package/src/unstable/http/HttpIncomingMessage.ts +2 -1
  435. package/src/unstable/http/HttpMiddleware.ts +16 -15
  436. package/src/unstable/http/HttpPlatform.ts +3 -2
  437. package/src/unstable/http/HttpRouter.ts +9 -9
  438. package/src/unstable/http/HttpServer.ts +3 -9
  439. package/src/unstable/http/HttpServerError.ts +3 -2
  440. package/src/unstable/http/HttpServerRequest.ts +25 -21
  441. package/src/unstable/http/HttpServerResponse.ts +5 -4
  442. package/src/unstable/http/HttpTraceContext.ts +31 -17
  443. package/src/unstable/http/UrlParams.ts +11 -14
  444. package/src/unstable/httpapi/HttpApiBuilder.ts +9 -3
  445. package/src/unstable/httpapi/HttpApiError.ts +67 -12
  446. package/src/unstable/observability/OtlpExporter.ts +5 -2
  447. package/src/unstable/observability/OtlpTracer.ts +8 -4
  448. package/src/unstable/reactivity/Atom.ts +1 -4
  449. package/src/unstable/reactivity/AtomRegistry.ts +5 -3
  450. package/src/unstable/rpc/Rpc.ts +4 -3
  451. package/src/unstable/rpc/RpcClient.ts +10 -9
  452. package/src/unstable/rpc/RpcSchema.ts +6 -5
  453. package/src/unstable/rpc/RpcSerialization.ts +4 -1
  454. package/src/unstable/rpc/RpcServer.ts +3 -3
  455. package/src/unstable/socket/Socket.ts +2 -1
  456. package/src/unstable/sql/SqlClient.ts +5 -3
  457. package/src/unstable/workflow/DurableDeferred.ts +6 -6
  458. package/src/unstable/workflow/Workflow.ts +1 -1
  459. package/src/unstable/workflow/WorkflowEngine.ts +29 -20
  460. package/dist/NullOr.d.ts +0 -149
  461. package/dist/NullOr.d.ts.map +0 -1
  462. package/dist/NullOr.js +0 -152
  463. package/dist/NullOr.js.map +0 -1
  464. package/src/NullOr.ts +0 -204
@@ -199,6 +199,7 @@ interface EntityManagerState {
199
199
 
200
200
  const make = Effect.gen(function*() {
201
201
  const config = yield* ShardingConfig
202
+ const getRunnerAddress = () => Option.getOrUndefined(config.runnerAddress)
202
203
  const clock = yield* Clock
203
204
 
204
205
  const runnersService = yield* Runners
@@ -228,7 +229,10 @@ const make = Effect.gen(function*() {
228
229
  const events = yield* PubSub.unbounded<ShardingRegistrationEvent>()
229
230
  const getRegistrationEvents: Stream.Stream<ShardingRegistrationEvent> = Stream.fromPubSub(events)
230
231
 
231
- const isLocalRunner = (address: RunnerAddress) => Equal.equals(address, config.runnerAddress)
232
+ const isLocalRunner = (address: RunnerAddress) => {
233
+ const runnerAddress = getRunnerAddress()
234
+ return runnerAddress !== undefined && Equal.equals(address, runnerAddress)
235
+ }
232
236
 
233
237
  function getShardId(entityId: EntityId, group: string): ShardId {
234
238
  const id = Math.abs(hashString(entityId) % config.shardsPerGroup) + 1
@@ -254,8 +258,9 @@ const make = Effect.gen(function*() {
254
258
  // allow them to move to another runner.
255
259
 
256
260
  const releasingShards = MutableHashSet.empty<ShardId>()
257
- if (config.runnerAddress) {
258
- const selfAddress = config.runnerAddress
261
+ const initialRunnerAddress = getRunnerAddress()
262
+ if (initialRunnerAddress) {
263
+ const selfAddress = initialRunnerAddress
259
264
  yield* Scope.addFinalizerExit(shardingScope, () => {
260
265
  // the locks expire over time, so if this fails we ignore it
261
266
  return Effect.ignore(runnerStorage.releaseAll(selfAddress))
@@ -437,8 +442,8 @@ const make = Effect.gen(function*() {
437
442
  const storageReadLock = Semaphore.makeUnsafe(1)
438
443
  const withStorageReadLock = storageReadLock.withPermits(1)
439
444
 
440
- if (storageEnabled && config.runnerAddress) {
441
- const selfAddress = config.runnerAddress
445
+ if (storageEnabled && initialRunnerAddress) {
446
+ const selfAddress = initialRunnerAddress
442
447
  const entityRegistrationTimeoutMillis = Duration.toMillis(
443
448
  Duration.fromInputUnsafe(config.entityRegistrationTimeout)
444
449
  )
@@ -824,7 +829,7 @@ const make = Effect.gen(function*() {
824
829
  if (isPersisted) {
825
830
  return runnerIsLocal
826
831
  ? notifyLocal(message, discard)
827
- : runnersService.notify({ address: Option.getOrUndefined(maybeRunner), message, discard })
832
+ : runnersService.notify({ address: maybeRunner, message, discard })
828
833
  } else if (Option.isNone(maybeRunner)) {
829
834
  return Effect.fail(new EntityNotAssignedToRunner({ address }))
830
835
  }
@@ -860,9 +865,9 @@ const make = Effect.gen(function*() {
860
865
  // shard assignments for outgoing messages (they could still be in use by
861
866
  // entities that are shutting down).
862
867
 
863
- const selfRunner = config.runnerAddress ?
868
+ const selfRunner = initialRunnerAddress ?
864
869
  new Runner({
865
- address: config.runnerAddress,
870
+ address: initialRunnerAddress,
866
871
  groups: config.shardGroups,
867
872
  weight: config.runnerShardWeight
868
873
  }) :
@@ -985,7 +990,7 @@ const make = Effect.gen(function*() {
985
990
  Effect.annotateLogs({
986
991
  module: "effect/cluster/Sharding",
987
992
  fiber: "RunnerStorage sync",
988
- runner: config.runnerAddress
993
+ runner: initialRunnerAddress
989
994
  }),
990
995
  Effect.forkIn(shardingScope)
991
996
  )
@@ -1046,7 +1051,7 @@ const make = Effect.gen(function*() {
1046
1051
  spanId: options.message.spanId,
1047
1052
  sampled: options.message.sampled
1048
1053
  }),
1049
- lastReceivedReply: undefined,
1054
+ lastReceivedReply: Option.none(),
1050
1055
  rpc,
1051
1056
  services: fiber.services as ServiceMap.ServiceMap<any>,
1052
1057
  respond
@@ -1259,7 +1264,8 @@ const make = Effect.gen(function*() {
1259
1264
 
1260
1265
  const registerEntity: Sharding["Service"]["registerEntity"] = Effect.fnUntraced(
1261
1266
  function*(entity, build, options) {
1262
- if (!config.runnerAddress || entityManagers.has(entity.type)) return
1267
+ const runnerAddress = getRunnerAddress()
1268
+ if (!runnerAddress || entityManagers.has(entity.type)) return
1263
1269
  const scope = yield* Effect.scope
1264
1270
  yield* Scope.addFinalizer(
1265
1271
  scope,
@@ -1270,14 +1276,15 @@ const make = Effect.gen(function*() {
1270
1276
  const manager = yield* EntityManager.make(entity, build, {
1271
1277
  ...options,
1272
1278
  storage,
1273
- runnerAddress: config.runnerAddress,
1279
+ runnerAddress,
1274
1280
  sharding
1275
1281
  }).pipe(
1276
- Effect.provideServices(services.pipe(
1277
- ServiceMap.add(EntityReaper, reaper),
1278
- ServiceMap.add(Scope.Scope, scope),
1279
- ServiceMap.add(Snowflake.Generator, snowflakeGen)
1280
- ))
1282
+ Effect.provideServices(ServiceMap.mutate(services, (services) =>
1283
+ services.pipe(
1284
+ ServiceMap.add(EntityReaper, reaper),
1285
+ ServiceMap.add(Scope.Scope, scope),
1286
+ ServiceMap.add(Snowflake.Generator, snowflakeGen)
1287
+ )))
1281
1288
  ) as Effect.Effect<EntityManager.EntityManager>
1282
1289
  const state: EntityManagerState = {
1283
1290
  entity,
@@ -25,13 +25,13 @@ export class ShardingConfig extends ServiceMap.Service<ShardingConfig, {
25
25
  * If `None`, the runner is not part of the cluster and will be in a client-only
26
26
  * mode.
27
27
  */
28
- readonly runnerAddress: RunnerAddress | undefined
28
+ readonly runnerAddress: Option.Option<RunnerAddress>
29
29
  /**
30
30
  * The listen address for the current runner.
31
31
  *
32
32
  * Defaults to the `runnerAddress`.
33
33
  */
34
- readonly runnerListenAddress: RunnerAddress | undefined
34
+ readonly runnerListenAddress: Option.Option<RunnerAddress>
35
35
  /**
36
36
  * A number that determines how many shards this runner will be assigned
37
37
  * relative to other runners.
@@ -129,8 +129,8 @@ const defaultRunnerAddress = RunnerAddress.makeUnsafe({ host: "localhost", port:
129
129
  * @category defaults
130
130
  */
131
131
  export const defaults: ShardingConfig["Service"] = {
132
- runnerAddress: defaultRunnerAddress,
133
- runnerListenAddress: undefined,
132
+ runnerAddress: Option.some(defaultRunnerAddress),
133
+ runnerListenAddress: Option.none(),
134
134
  runnerShardWeight: 1,
135
135
  shardsPerGroup: 300,
136
136
  shardGroups: ["default"],
@@ -177,7 +177,7 @@ export const config: Config.Config<ShardingConfig["Service"]> = Config.all({
177
177
  Config.withDefault(defaultRunnerAddress.port)
178
178
  // Config.withDescription("The port used for inter-runner communication.")
179
179
  )
180
- }).pipe(Config.map((options) => RunnerAddress.makeUnsafe(options)), Config.option, Config.map(Option.getOrUndefined)),
180
+ }).pipe(Config.map((options) => RunnerAddress.makeUnsafe(options)), Config.option),
181
181
  runnerListenAddress: Config.all({
182
182
  host: Config.string("listenHost"),
183
183
  // Config.withDescription("The host to listen on.")
@@ -185,7 +185,7 @@ export const config: Config.Config<ShardingConfig["Service"]> = Config.all({
185
185
  Config.withDefault(defaultRunnerAddress.port)
186
186
  // Config.withDescription("The port to listen on.")
187
187
  )
188
- }).pipe(Config.map((options) => RunnerAddress.makeUnsafe(options)), Config.option, Config.map(Option.getOrUndefined)),
188
+ }).pipe(Config.map((options) => RunnerAddress.makeUnsafe(options)), Config.option),
189
189
  runnerShardWeight: Config.int("runnerShardWeight").pipe(
190
190
  Config.withDefault(defaults.runnerShardWeight)
191
191
  // Config.withDescription("A number that determines how many shards this runner will be assigned relative to other runners.")
@@ -4,8 +4,8 @@
4
4
  import * as Arr from "../../Array.ts"
5
5
  import * as Effect from "../../Effect.ts"
6
6
  import * as Layer from "../../Layer.ts"
7
+ import * as Option from "../../Option.ts"
7
8
  import * as Schedule from "../../Schedule.ts"
8
- import * as UndefinedOr from "../../UndefinedOr.ts"
9
9
  import * as Migrator from "../sql/Migrator.ts"
10
10
  import * as SqlClient from "../sql/SqlClient.ts"
11
11
  import type { Row } from "../sql/SqlConnection.ts"
@@ -138,7 +138,7 @@ export const make: (options?: {
138
138
 
139
139
  const messageFromRow = (row: MessageRow & ReplyJoinRow): {
140
140
  readonly envelope: Envelope.Encoded
141
- readonly lastSentReply: Reply.Encoded | undefined
141
+ readonly lastSentReply: Option.Option<Reply.Encoded>
142
142
  } => {
143
143
  switch (Number(row.kind) as 0 | 1 | 2) {
144
144
  case 0:
@@ -163,14 +163,14 @@ export const make: (options?: {
163
163
  undefined)
164
164
  },
165
165
  lastSentReply: row.reply_reply_id ?
166
- {
166
+ Option.some({
167
167
  _tag: "Chunk",
168
168
  id: String(row.reply_reply_id),
169
169
  requestId: String(row.request_id),
170
170
  sequence: Number(row.reply_sequence!),
171
171
  values: JSON.parse(row.reply_payload!)
172
- } :
173
- undefined
172
+ }) :
173
+ Option.none()
174
174
  }
175
175
  case 1:
176
176
  return {
@@ -185,7 +185,7 @@ export const make: (options?: {
185
185
  entityId: row.entity_id
186
186
  }
187
187
  },
188
- lastSentReply: undefined
188
+ lastSentReply: Option.none()
189
189
  }
190
190
  case 2:
191
191
  return {
@@ -199,7 +199,7 @@ export const make: (options?: {
199
199
  entityId: row.entity_id
200
200
  }
201
201
  },
202
- lastSentReply: undefined
202
+ lastSentReply: Option.none()
203
203
  }
204
204
  }
205
205
  }
@@ -395,24 +395,27 @@ export const make: (options?: {
395
395
  }
396
396
  const row = rows[0]
397
397
  const replyKindNum = typeof row.reply_kind === "bigint" ? Number(row.reply_kind) : row.reply_kind
398
- return SaveResultEncoded.Duplicate({
399
- originalId: Snowflake.Snowflake(row.id as any),
400
- lastReceivedReply: row.reply_id ?
401
- replyKindNum === replyKind.WithExit ?
402
- {
398
+ const lastReceivedReply: Option.Option<Reply.Encoded> = row.reply_id
399
+ ? Option.some(
400
+ replyKindNum === replyKind.WithExit
401
+ ? {
403
402
  id: String(row.reply_id),
404
403
  requestId: String(row.id),
405
404
  _tag: "WithExit",
406
405
  exit: JSON.parse(row.reply_payload as string)
407
- } :
408
- {
406
+ }
407
+ : {
409
408
  id: String(row.reply_id),
410
409
  requestId: String(row.id),
411
410
  _tag: "Chunk",
412
411
  sequence: Number(row.reply_sequence),
413
412
  values: JSON.parse(row.reply_payload as string)
414
- } :
415
- undefined
413
+ }
414
+ )
415
+ : Option.none()
416
+ return SaveResultEncoded.Duplicate({
417
+ originalId: Snowflake.Snowflake(row.id as any),
418
+ lastReceivedReply
416
419
  })
417
420
  })
418
421
  )
@@ -455,7 +458,7 @@ export const make: (options?: {
455
458
 
456
459
  requestIdForPrimaryKey: (primaryKey) =>
457
460
  sql<{ id: string | bigint }>`SELECT id FROM ${messagesTableSql} WHERE message_id = ${primaryKey}`.pipe(
458
- Effect.map((rows) => UndefinedOr.map(rows[0]?.id, Snowflake.Snowflake)),
461
+ Effect.map((rows) => Option.map(Option.fromNullishOr(rows[0]?.id), Snowflake.Snowflake)),
459
462
  Effect.provideService(SqlClient.SafeIntegers, true),
460
463
  PersistenceError.refail,
461
464
  withTracerDisabled
@@ -506,7 +509,7 @@ export const make: (options?: {
506
509
  }
507
510
  const messages: Array<{
508
511
  readonly envelope: Envelope.Encoded
509
- readonly lastSentReply: Reply.Encoded | undefined
512
+ readonly lastSentReply: Option.Option<Reply.Encoded>
510
513
  }> = new Array(rows.length)
511
514
  const ids = new Array<string>(rows.length)
512
515
  for (let i = 0; i < rows.length; i++) {
@@ -17,7 +17,6 @@ import * as Schema from "../../../Schema.ts"
17
17
  import * as Issue from "../../../SchemaIssue.ts"
18
18
  import * as Scope from "../../../Scope.ts"
19
19
  import * as ServiceMap from "../../../ServiceMap.ts"
20
- import * as UndefinedOr from "../../../UndefinedOr.ts"
21
20
  import type * as Rpc from "../../rpc/Rpc.ts"
22
21
  import { RequestId } from "../../rpc/RpcMessage.ts"
23
22
  import * as RpcServer from "../../rpc/RpcServer.ts"
@@ -71,7 +70,7 @@ export type EntityState = {
71
70
  readonly rpc: Rpc.AnyWithProps
72
71
  readonly message: Message.IncomingRequestLocal<any>
73
72
  sentReply: boolean
74
- lastSentChunk: Reply.Chunk<Rpc.Any> | undefined
73
+ lastSentChunk: Option.Option<Reply.Chunk<Rpc.Any>>
75
74
  sequence: number
76
75
  }>
77
76
  lastActiveCheck: number
@@ -156,12 +155,13 @@ export const make = Effect.fnUntraced(function*<
156
155
  // Initiate the behavior for the entity
157
156
  const handlers = yield* (entity.protocol.toHandlers(buildHandlers as any).pipe(
158
157
  Effect.provideService(CurrentLogAnnotations, {}),
159
- Effect.provideServices(services.pipe(
160
- ServiceMap.add(CurrentAddress, address),
161
- ServiceMap.add(CurrentRunnerAddress, options.runnerAddress),
162
- ServiceMap.add(KeepAliveLatch, keepAliveLatch),
163
- ServiceMap.add(Scope.Scope, scope)
164
- ))
158
+ Effect.provideServices(ServiceMap.mutate(services, (services) =>
159
+ services.pipe(
160
+ ServiceMap.add(CurrentAddress, address),
161
+ ServiceMap.add(CurrentRunnerAddress, options.runnerAddress),
162
+ ServiceMap.add(KeepAliveLatch, keepAliveLatch),
163
+ ServiceMap.add(Scope.Scope, scope)
164
+ )))
165
165
  ) as Effect.Effect<ServiceMap.ServiceMap<Rpc.ToHandler<Rpcs>>>)
166
166
 
167
167
  const server = yield* RpcServer.makeNoSerialization(entity.protocol, {
@@ -251,7 +251,7 @@ export const make = Effect.fnUntraced(function*<
251
251
  sequence,
252
252
  values: response.values
253
253
  })
254
- request.lastSentChunk = reply
254
+ request.lastSentChunk = Option.some(reply)
255
255
  return request.message.respond(reply)
256
256
  })
257
257
  ))
@@ -438,10 +438,13 @@ export const make = Effect.fnUntraced(function*<
438
438
  rpc,
439
439
  message,
440
440
  sentReply: false,
441
- lastSentChunk: message.lastSentReply as Reply.Chunk<Rpc.Any> | undefined,
442
- sequence: UndefinedOr.match(message.lastSentReply, {
443
- onUndefined: () => 0,
444
- onDefined: (reply) => reply._tag === "Chunk" ? reply.sequence + 1 : 0
441
+ lastSentChunk: Option.filter(
442
+ message.lastSentReply,
443
+ (reply): reply is Reply.Chunk<Rpc.Any> => reply._tag === "Chunk"
444
+ ),
445
+ sequence: Option.match(message.lastSentReply, {
446
+ onNone: () => 0,
447
+ onSome: (reply) => reply._tag === "Chunk" ? reply.sequence + 1 : 0
445
448
  })
446
449
  }
447
450
  server.activeRequests.set(message.envelope.requestId, entry)
@@ -450,7 +453,10 @@ export const make = Effect.fnUntraced(function*<
450
453
  id: RequestId(message.envelope.requestId),
451
454
  payload: new Request({
452
455
  ...message.envelope,
453
- lastSentChunk: message.lastSentReply as Reply.Chunk<R> | undefined
456
+ lastSentChunk: Option.filter(
457
+ message.lastSentReply,
458
+ (reply): reply is Reply.Chunk<R> => reply._tag === "Chunk"
459
+ )
454
460
  })
455
461
  })
456
462
  }
@@ -460,8 +466,8 @@ export const make = Effect.fnUntraced(function*<
460
466
  return Effect.void
461
467
  } else if (
462
468
  message.envelope._tag === "AckChunk" &&
463
- entry.lastSentChunk !== undefined &&
464
- message.envelope.replyId !== entry.lastSentChunk.id
469
+ Option.isSome(entry.lastSentChunk) &&
470
+ message.envelope.replyId !== entry.lastSentChunk.value.id
465
471
  ) {
466
472
  return Effect.void
467
473
  }
@@ -585,9 +591,9 @@ const makeMessageDecode = <Type extends string, Rpcs extends Rpc.Any>(
585
591
  rpc: Rpc.AnyWithProps
586
592
  ) {
587
593
  const payload = yield* Schema.decodeEffect(Schema.toCodecJson(rpc.payloadSchema))(message.envelope.payload)
588
- const lastSentReply = message.lastSentReply !== undefined
589
- ? yield* Schema.decodeEffect(Reply.Reply(rpc))(message.lastSentReply)
590
- : undefined
594
+ const lastSentReply = Option.isNone(message.lastSentReply) ?
595
+ message.lastSentReply :
596
+ Option.some(yield* Schema.decodeEffect(Reply.Reply(rpc))(message.lastSentReply.value))
591
597
  return {
592
598
  _tag: "IncomingRequest",
593
599
  envelope: {
@@ -602,7 +608,7 @@ const makeMessageDecode = <Type extends string, Rpcs extends Rpc.Any>(
602
608
  {
603
609
  readonly _tag: "IncomingRequest"
604
610
  readonly envelope: Envelope.Request.Any
605
- readonly lastSentReply: Reply.Reply<Rpcs> | undefined
611
+ readonly lastSentReply: Option.Option<Reply.Reply<Rpcs>>
606
612
  } | {
607
613
  readonly _tag: "IncomingEnvelope"
608
614
  readonly envelope: Envelope.AckChunk | Envelope.Interrupt
@@ -627,7 +633,7 @@ const makeMessageDecode = <Type extends string, Rpcs extends Rpc.Any>(
627
633
  {
628
634
  readonly _tag: "IncomingRequest"
629
635
  readonly envelope: Envelope.Request.Any
630
- readonly lastSentReply: Reply.Reply<Rpcs> | undefined
636
+ readonly lastSentReply: Option.Option<Reply.Reply<Rpcs>>
631
637
  },
632
638
  Schema.SchemaError,
633
639
  Rpc.ServicesServer<Rpcs>
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * @since 4.0.0
3
3
  */
4
+ import type * as Option from "../../Option.ts"
4
5
  import * as Schema from "../../Schema.ts"
5
6
 
6
7
  /**
@@ -80,7 +81,7 @@ export interface Span {
80
81
  readonly sampled: boolean
81
82
  readonly attributes: ReadonlyMap<string, unknown>
82
83
  readonly status: SpanStatus
83
- readonly parent: ParentSpan | undefined
84
+ readonly parent: Option.Option<ParentSpan>
84
85
  }
85
86
 
86
87
  /**
@@ -95,7 +96,7 @@ export const Span: Schema.Codec<Span> = Schema.Struct({
95
96
  sampled: Schema.Boolean,
96
97
  attributes: Schema.ReadonlyMap(Schema.String, Schema.Any),
97
98
  status: SpanStatus,
98
- parent: Schema.UndefinedOr(Schema.suspend(() => ParentSpan))
99
+ parent: Schema.Option(Schema.suspend(() => ParentSpan))
99
100
  })
100
101
 
101
102
  /**
@@ -5,6 +5,7 @@ import * as Data from "../../Data.ts"
5
5
  import * as Duration from "../../Duration.ts"
6
6
  import { dual } from "../../Function.ts"
7
7
  import * as Inspectable from "../../Inspectable.ts"
8
+ import * as Option from "../../Option.ts"
8
9
  import { type Pipeable, pipeArguments } from "../../Pipeable.ts"
9
10
  import * as Predicate from "../../Predicate.ts"
10
11
  import * as Record from "../../Record.ts"
@@ -566,17 +567,17 @@ export const get: {
566
567
  * @since 4.0.0
567
568
  * @category combinators
568
569
  */
569
- (name: string): (self: Cookies) => Cookie | undefined
570
+ (name: string): (self: Cookies) => Option.Option<Cookie>
570
571
  /**
571
572
  * Get a cookie from a Cookies object
572
573
  *
573
574
  * @since 4.0.0
574
575
  * @category combinators
575
576
  */
576
- (self: Cookies, name: string): Cookie | undefined
577
+ (self: Cookies, name: string): Option.Option<Cookie>
577
578
  } = dual(
578
579
  (args) => isCookies(args[0]),
579
- (self: Cookies, name: string): Cookie | undefined => self.cookies[name]
580
+ (self: Cookies, name: string): Option.Option<Cookie> => Option.fromUndefinedOr(self.cookies[name])
580
581
  )
581
582
 
582
583
  /**
@@ -592,19 +593,17 @@ export const getValue: {
592
593
  * @since 4.0.0
593
594
  * @category combinators
594
595
  */
595
- (name: string): (self: Cookies) => string | undefined
596
+ (name: string): (self: Cookies) => Option.Option<string>
596
597
  /**
597
598
  * Get a cookie from a Cookies object
598
599
  *
599
600
  * @since 4.0.0
600
601
  * @category combinators
601
602
  */
602
- (self: Cookies, name: string): string | undefined
603
+ (self: Cookies, name: string): Option.Option<string>
603
604
  } = dual(
604
605
  (args) => isCookies(args[0]),
605
- (self: Cookies, name: string): string | undefined => {
606
- return self.cookies[name]?.value
607
- }
606
+ (self: Cookies, name: string): Option.Option<string> => Option.map(get(self, name), (cookie) => cookie.value)
608
607
  )
609
608
 
610
609
  /**
@@ -4,6 +4,7 @@
4
4
  import * as Effect from "../../Effect.ts"
5
5
  import type * as FileSystem from "../../FileSystem.ts"
6
6
  import * as Layer from "../../Layer.ts"
7
+ import * as Option from "../../Option.ts"
7
8
  import * as ServiceMap from "../../ServiceMap.ts"
8
9
  import type * as Body from "./HttpBody.ts"
9
10
 
@@ -54,9 +55,10 @@ export class Generator extends ServiceMap.Service<Generator, {
54
55
  }>()("effect/http/Etag/Generator") {}
55
56
 
56
57
  const fromFileInfo = (info: FileSystem.File.Info) => {
57
- const mtime = info.mtime
58
- ? info.mtime.getTime().toString(16)
59
- : "0"
58
+ const mtime = Option.match(info.mtime, {
59
+ onNone: () => "0",
60
+ onSome: (mtime) => mtime.getTime().toString(16)
61
+ })
60
62
  return `${info.size.toString(16)}-${mtime}`
61
63
  }
62
64
 
@@ -6,6 +6,7 @@ import * as Equ from "../../Equivalence.ts"
6
6
  import { dual } from "../../Function.ts"
7
7
  import * as Hash from "../../Hash.ts"
8
8
  import * as Inspectable from "../../Inspectable.ts"
9
+ import * as Option from "../../Option.ts"
9
10
  import * as Predicate from "../../Predicate.ts"
10
11
  import * as Record from "../../Record.ts"
11
12
  import * as Redactable from "../../Redactable.ts"
@@ -205,24 +206,24 @@ export const get: {
205
206
  * @since 4.0.0
206
207
  * @category combinators
207
208
  */
208
- (key: string): (self: Headers) => string | undefined
209
+ (key: string): (self: Headers) => Option.Option<string>
209
210
  /**
210
211
  * @since 4.0.0
211
212
  * @category combinators
212
213
  */
213
- (self: Headers, key: string): string | undefined
214
+ (self: Headers, key: string): Option.Option<string>
214
215
  } = dual<
215
216
  /**
216
217
  * @since 4.0.0
217
218
  * @category combinators
218
219
  */
219
- (key: string) => (self: Headers) => string | undefined,
220
+ (key: string) => (self: Headers) => Option.Option<string>,
220
221
  /**
221
222
  * @since 4.0.0
222
223
  * @category combinators
223
224
  */
224
- (self: Headers, key: string) => string | undefined
225
- >(2, (self, key) => self[key.toLowerCase()])
225
+ (self: Headers, key: string) => Option.Option<string>
226
+ >(2, (self, key) => Option.fromUndefinedOr(self[key.toLowerCase()]))
226
227
 
227
228
  /**
228
229
  * @since 4.0.0
@@ -10,6 +10,7 @@ import * as Fiber from "../../Fiber.ts"
10
10
  import { constant, constFalse, constTrue, dual, flow, identity } from "../../Function.ts"
11
11
  import * as Inspectable from "../../Inspectable.ts"
12
12
  import * as Layer from "../../Layer.ts"
13
+ import * as Option from "../../Option.ts"
13
14
  import { type Pipeable, pipeArguments } from "../../Pipeable.ts"
14
15
  import * as Predicate from "../../Predicate.ts"
15
16
  import * as Ref from "../../Ref.ts"
@@ -640,7 +641,7 @@ export const make = (
640
641
  Effect.withFiber((fiber) => {
641
642
  const scopedController = scopedRequests.get(request)
642
643
  const controller = scopedController ?? new AbortController()
643
- const urlResult = UrlParams.makeUrl(request.url, request.urlParams, request.hash)
644
+ const urlResult = UrlParams.makeUrl(request.url, request.urlParams, Option.getOrUndefined(request.hash))
644
645
  if (Result.isFailure(urlResult)) {
645
646
  return Effect.fail(
646
647
  new Error.HttpClientError({
@@ -6,6 +6,7 @@ import type * as FileSystem from "../../FileSystem.ts"
6
6
  import { dual } from "../../Function.ts"
7
7
  import * as Inspectable from "../../Inspectable.ts"
8
8
  import { stringOrRedacted } from "../../internal/redacted.ts"
9
+ import * as Option from "../../Option.ts"
9
10
  import { type Pipeable, pipeArguments } from "../../Pipeable.ts"
10
11
  import type * as PlatformError from "../../PlatformError.ts"
11
12
  import { hasProperty } from "../../Predicate.ts"
@@ -37,7 +38,7 @@ export interface HttpClientRequest extends Inspectable.Inspectable, Pipeable {
37
38
  readonly method: HttpMethod
38
39
  readonly url: string
39
40
  readonly urlParams: UrlParams.UrlParams
40
- readonly hash: string | undefined
41
+ readonly hash: Option.Option<string>
41
42
  readonly headers: Headers.Headers
42
43
  readonly body: HttpBody.HttpBody
43
44
  }
@@ -95,7 +96,7 @@ export function makeWith(
95
96
  method: HttpMethod,
96
97
  url: string,
97
98
  urlParams: UrlParams.UrlParams,
98
- hash: string | undefined,
99
+ hash: Option.Option<string>,
99
100
  headers: Headers.Headers,
100
101
  body: HttpBody.HttpBody
101
102
  ): HttpClientRequest {
@@ -117,7 +118,7 @@ export const empty: HttpClientRequest = makeWith(
117
118
  "GET",
118
119
  "",
119
120
  UrlParams.empty,
120
- undefined,
121
+ Option.none(),
121
122
  Headers.empty,
122
123
  HttpBody.empty
123
124
  )
@@ -409,7 +410,7 @@ export const setUrl: {
409
410
  }
410
411
  const clone = new URL(url.toString())
411
412
  const urlParams = UrlParams.fromInput(clone.searchParams)
412
- const hash = clone.hash ? clone.hash.slice(1) : undefined
413
+ const hash = Option.fromNullishOr(clone.hash === "" ? undefined : clone.hash.slice(1))
413
414
  clone.search = ""
414
415
  clone.hash = ""
415
416
  return makeWith(
@@ -633,7 +634,7 @@ export const setHash: {
633
634
  self.method,
634
635
  self.url,
635
636
  self.urlParams,
636
- hash,
637
+ Option.some(hash),
637
638
  self.headers,
638
639
  self.body
639
640
  ))
@@ -647,7 +648,7 @@ export const removeHash = (self: HttpClientRequest): HttpClientRequest =>
647
648
  self.method,
648
649
  self.url,
649
650
  self.urlParams,
650
- undefined,
651
+ Option.none(),
651
652
  self.headers,
652
653
  self.body
653
654
  )
@@ -946,9 +947,10 @@ export const bodyFile: {
946
947
  * @since 4.0.0
947
948
  * @category combinators
948
949
  */
949
- export function toUrl(self: HttpClientRequest): URL | undefined {
950
- const r = UrlParams.makeUrl(self.url, self.urlParams, self.hash)
950
+ export function toUrl(self: HttpClientRequest): Option.Option<URL> {
951
+ const r = UrlParams.makeUrl(self.url, self.urlParams, Option.getOrUndefined(self.hash))
951
952
  if (Result.isSuccess(r)) {
952
- return r.success
953
+ return Option.some(r.success)
953
954
  }
955
+ return Option.none()
954
956
  }
@@ -4,6 +4,7 @@
4
4
  import * as Effect from "../../Effect.ts"
5
5
  import { dual } from "../../Function.ts"
6
6
  import * as Inspectable from "../../Inspectable.ts"
7
+ import * as Option from "../../Option.ts"
7
8
  import { type Pipeable, pipeArguments } from "../../Pipeable.ts"
8
9
  import * as Schema from "../../Schema.ts"
9
10
  import type { ParseOptions } from "../../SchemaAST.ts"
@@ -270,8 +271,8 @@ class WebHttpClientResponse extends Inspectable.Class implements HttpClientRespo
270
271
  return this.cachedCookies = Cookies.fromSetCookie(this.source.headers.getSetCookie())
271
272
  }
272
273
 
273
- get remoteAddress(): string | undefined {
274
- return undefined
274
+ get remoteAddress(): Option.Option<string> {
275
+ return Option.none()
275
276
  }
276
277
 
277
278
  get stream(): Stream.Stream<Uint8Array, Error.HttpClientError> {
@@ -4,6 +4,7 @@
4
4
  import * as Effect from "../../Effect.ts"
5
5
  import type * as FileSystem from "../../FileSystem.ts"
6
6
  import type * as Inspectable from "../../Inspectable.ts"
7
+ import type * as Option from "../../Option.ts"
7
8
  import { hasProperty } from "../../Predicate.ts"
8
9
  import { redact } from "../../Redactable.ts"
9
10
  import * as Schema from "../../Schema.ts"
@@ -32,7 +33,7 @@ export const isHttpIncomingMessage = (u: unknown): u is HttpIncomingMessage => h
32
33
  export interface HttpIncomingMessage<E = unknown> extends Inspectable.Inspectable {
33
34
  readonly [TypeId]: typeof TypeId
34
35
  readonly headers: Headers.Headers
35
- readonly remoteAddress: string | undefined
36
+ readonly remoteAddress: Option.Option<string>
36
37
  readonly json: Effect.Effect<Schema.Json, E>
37
38
  readonly text: Effect.Effect<string, E>
38
39
  readonly urlParamsBody: Effect.Effect<UrlParams.UrlParams, E>