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
@@ -1,12 +1,28 @@
1
1
  /**
2
2
  * @since 4.0.0
3
3
  */
4
+ import * as Effect from "../../Effect.ts"
4
5
  import * as ErrorReporter from "../../ErrorReporter.ts"
5
6
  import { identity } from "../../Function.ts"
6
7
  import * as Schema from "../../Schema.ts"
7
8
  import * as Transformation from "../../SchemaTransformation.ts"
9
+ import * as HttpServerRespondable from "../http/HttpServerRespondable.ts"
10
+ import * as HttpServerResponse from "../http/HttpServerResponse.ts"
8
11
  import * as HttpApiSchema from "./HttpApiSchema.ts"
9
12
 
13
+ const badRequestResponse = HttpServerResponse.empty({ status: 400 })
14
+ const unauthorizedResponse = HttpServerResponse.empty({ status: 401 })
15
+ const forbiddenResponse = HttpServerResponse.empty({ status: 403 })
16
+ const notFoundResponse = HttpServerResponse.empty({ status: 404 })
17
+ const methodNotAllowedResponse = HttpServerResponse.empty({ status: 405 })
18
+ const notAcceptableResponse = HttpServerResponse.empty({ status: 406 })
19
+ const requestTimeoutResponse = HttpServerResponse.empty({ status: 408 })
20
+ const conflictResponse = HttpServerResponse.empty({ status: 409 })
21
+ const goneResponse = HttpServerResponse.empty({ status: 410 })
22
+ const internalServerErrorResponse = HttpServerResponse.empty({ status: 500 })
23
+ const notImplementedResponse = HttpServerResponse.empty({ status: 501 })
24
+ const serviceUnavailableResponse = HttpServerResponse.empty({ status: 503 })
25
+
10
26
  /**
11
27
  * @category Built-in errors
12
28
  * @since 4.0.0
@@ -17,7 +33,10 @@ export class BadRequest extends Schema.ErrorClass<BadRequest>("effect/HttpApiErr
17
33
  description: "BadRequest",
18
34
  httpApiStatus: 400
19
35
  }) {
20
- override readonly [ErrorReporter.ignore] = true
36
+ override readonly [ErrorReporter.ignore] = true;
37
+ [HttpServerRespondable.symbol]() {
38
+ return Effect.succeed(badRequestResponse)
39
+ }
21
40
  static readonly singleton = new BadRequest()
22
41
  }
23
42
 
@@ -59,7 +78,10 @@ export class Unauthorized extends Schema.ErrorClass<Unauthorized>("effect/HttpAp
59
78
  description: "Unauthorized",
60
79
  httpApiStatus: 401
61
80
  }) {
62
- override readonly [ErrorReporter.ignore] = true
81
+ override readonly [ErrorReporter.ignore] = true;
82
+ [HttpServerRespondable.symbol]() {
83
+ return Effect.succeed(unauthorizedResponse)
84
+ }
63
85
  }
64
86
 
65
87
  /**
@@ -80,7 +102,10 @@ export class Forbidden extends Schema.ErrorClass<Forbidden>("effect/HttpApiError
80
102
  description: "Forbidden",
81
103
  httpApiStatus: 403
82
104
  }) {
83
- override readonly [ErrorReporter.ignore] = true
105
+ override readonly [ErrorReporter.ignore] = true;
106
+ [HttpServerRespondable.symbol]() {
107
+ return Effect.succeed(forbiddenResponse)
108
+ }
84
109
  }
85
110
 
86
111
  /**
@@ -101,7 +126,10 @@ export class NotFound extends Schema.ErrorClass<NotFound>("effect/HttpApiError/N
101
126
  description: "NotFound",
102
127
  httpApiStatus: 404
103
128
  }) {
104
- override readonly [ErrorReporter.ignore] = true
129
+ override readonly [ErrorReporter.ignore] = true;
130
+ [HttpServerRespondable.symbol]() {
131
+ return Effect.succeed(notFoundResponse)
132
+ }
105
133
  }
106
134
 
107
135
  /**
@@ -122,7 +150,10 @@ export class MethodNotAllowed extends Schema.ErrorClass<MethodNotAllowed>("effec
122
150
  description: "MethodNotAllowed",
123
151
  httpApiStatus: 405
124
152
  }) {
125
- override readonly [ErrorReporter.ignore] = true
153
+ override readonly [ErrorReporter.ignore] = true;
154
+ [HttpServerRespondable.symbol]() {
155
+ return Effect.succeed(methodNotAllowedResponse)
156
+ }
126
157
  }
127
158
 
128
159
  /**
@@ -143,7 +174,10 @@ export class NotAcceptable extends Schema.ErrorClass<NotAcceptable>("effect/Http
143
174
  description: "NotAcceptable",
144
175
  httpApiStatus: 406
145
176
  }) {
146
- override readonly [ErrorReporter.ignore] = true
177
+ override readonly [ErrorReporter.ignore] = true;
178
+ [HttpServerRespondable.symbol]() {
179
+ return Effect.succeed(notAcceptableResponse)
180
+ }
147
181
  }
148
182
 
149
183
  /**
@@ -164,7 +198,10 @@ export class RequestTimeout extends Schema.ErrorClass<RequestTimeout>("effect/Ht
164
198
  description: "RequestTimeout",
165
199
  httpApiStatus: 408
166
200
  }) {
167
- override readonly [ErrorReporter.ignore] = true
201
+ override readonly [ErrorReporter.ignore] = true;
202
+ [HttpServerRespondable.symbol]() {
203
+ return Effect.succeed(requestTimeoutResponse)
204
+ }
168
205
  }
169
206
 
170
207
  /**
@@ -185,7 +222,10 @@ export class Conflict extends Schema.ErrorClass<Conflict>("effect/HttpApiError/C
185
222
  description: "Conflict",
186
223
  httpApiStatus: 409
187
224
  }) {
188
- override readonly [ErrorReporter.ignore] = true
225
+ override readonly [ErrorReporter.ignore] = true;
226
+ [HttpServerRespondable.symbol]() {
227
+ return Effect.succeed(conflictResponse)
228
+ }
189
229
  }
190
230
 
191
231
  /**
@@ -206,7 +246,10 @@ export class Gone extends Schema.ErrorClass<Gone>("effect/HttpApiError/Gone")({
206
246
  description: "Gone",
207
247
  httpApiStatus: 410
208
248
  }) {
209
- override readonly [ErrorReporter.ignore] = true
249
+ override readonly [ErrorReporter.ignore] = true;
250
+ [HttpServerRespondable.symbol]() {
251
+ return Effect.succeed(goneResponse)
252
+ }
210
253
  }
211
254
 
212
255
  /**
@@ -228,7 +271,11 @@ export class InternalServerError
228
271
  description: "InternalServerError",
229
272
  httpApiStatus: 500
230
273
  })
231
- {}
274
+ {
275
+ [HttpServerRespondable.symbol]() {
276
+ return Effect.succeed(internalServerErrorResponse)
277
+ }
278
+ }
232
279
 
233
280
  /**
234
281
  * @category NoContent errors
@@ -247,7 +294,11 @@ export class NotImplemented extends Schema.ErrorClass<NotImplemented>("effect/Ht
247
294
  }, {
248
295
  description: "NotImplemented",
249
296
  httpApiStatus: 501
250
- }) {}
297
+ }) {
298
+ [HttpServerRespondable.symbol]() {
299
+ return Effect.succeed(notImplementedResponse)
300
+ }
301
+ }
251
302
 
252
303
  /**
253
304
  * @category NoContent errors
@@ -268,7 +319,11 @@ export class ServiceUnavailable
268
319
  description: "ServiceUnavailable",
269
320
  httpApiStatus: 503
270
321
  })
271
- {}
322
+ {
323
+ [HttpServerRespondable.symbol]() {
324
+ return Effect.succeed(serviceUnavailableResponse)
325
+ }
326
+ }
272
327
 
273
328
  /**
274
329
  * @category NoContent errors
@@ -6,10 +6,10 @@ import * as Duration from "../../Duration.ts"
6
6
  import * as Effect from "../../Effect.ts"
7
7
  import * as Fiber from "../../Fiber.ts"
8
8
  import * as Num from "../../Number.ts"
9
+ import * as Option from "../../Option.ts"
9
10
  import * as Schedule from "../../Schedule.ts"
10
11
  import * as Scope from "../../Scope.ts"
11
12
  import * as ServiceMap from "../../ServiceMap.ts"
12
- import * as UndefinedOr from "../../UndefinedOr.ts"
13
13
  import * as Headers from "../../unstable/http/Headers.ts"
14
14
  import * as HttpClient from "../../unstable/http/HttpClient.ts"
15
15
  import * as HttpClientError from "../../unstable/http/HttpClientError.ts"
@@ -24,7 +24,10 @@ const policy = Schedule.forever.pipe(
24
24
  && error.reason._tag === "StatusCodeError"
25
25
  && error.reason.response.status === 429
26
26
  ) {
27
- const retryAfter = UndefinedOr.map(error.reason.response.headers["retry-after"], Num.parse) ?? 5
27
+ const retryAfter = Option.fromUndefinedOr(error.reason.response.headers["retry-after"]).pipe(
28
+ Option.flatMap(Num.parse),
29
+ Option.getOrElse(() => 5)
30
+ )
28
31
  return Effect.succeed(Duration.seconds(retryAfter))
29
32
  }
30
33
  return Effect.succeed(Duration.seconds(1))
@@ -7,6 +7,7 @@ import * as Effect from "../../Effect.ts"
7
7
  import type * as Exit from "../../Exit.ts"
8
8
  import { flow } from "../../Function.ts"
9
9
  import * as Layer from "../../Layer.ts"
10
+ import * as Option from "../../Option.ts"
10
11
  import type * as Scope from "../../Scope.ts"
11
12
  import type * as ServiceMap from "../../ServiceMap.ts"
12
13
  import * as Tracer from "../../Tracer.ts"
@@ -150,7 +151,7 @@ type RemainingSpanImpl = Omit<Tracer.Span, (keyof typeof SpanProto) | "traceId"
150
151
 
151
152
  const makeSpan = (options: {
152
153
  readonly name: string
153
- readonly parent: Tracer.AnySpan | undefined
154
+ readonly parent: Option.Option<Tracer.AnySpan>
154
155
  readonly annotations: ServiceMap.ServiceMap<never>
155
156
  readonly status: Tracer.SpanStatus
156
157
  readonly attributes: ReadonlyMap<string, unknown>
@@ -163,8 +164,8 @@ const makeSpan = (options: {
163
164
  Object.create(SpanProto),
164
165
  options satisfies RemainingSpanImpl
165
166
  )
166
- if (self.parent) {
167
- self.traceId = self.parent.traceId
167
+ if (Option.isSome(self.parent)) {
168
+ self.traceId = self.parent.value.traceId
168
169
  } else {
169
170
  self.traceId = generateId(32)
170
171
  }
@@ -249,7 +250,10 @@ const makeOtlpSpan = (self: SpanImpl): OtlpSpan => {
249
250
  return {
250
251
  traceId: self.traceId,
251
252
  spanId: self.spanId,
252
- parentSpanId: self.parent ? self.parent.spanId : undefined,
253
+ parentSpanId: Option.match(self.parent, {
254
+ onNone: () => undefined,
255
+ onSome: (parent) => parent.spanId
256
+ }),
253
257
  name: self.name,
254
258
  kind: SpanKind[self.kind],
255
259
  startTimeUnixNano: String(status.startTime),
@@ -607,11 +607,8 @@ function runCallbackSync<R, A, E, ER = never>(
607
607
  return undefined
608
608
  }
609
609
  const runFork = Effect.runForkWith(services)
610
- const scheduler = ServiceMap.get(services, Scheduler.Scheduler)
611
610
  const fiber = runFork(effect)
612
- if ("flush" in scheduler) {
613
- ;(scheduler as Scheduler.MixedScheduler).flush()
614
- }
611
+ fiber.currentDispatcher?.flush()
615
612
  const result = fiber.pollUnsafe()
616
613
  if (result) {
617
614
  onExit(result)
@@ -9,7 +9,7 @@ import * as Layer from "../../Layer.ts"
9
9
  import * as Option from "../../Option.ts"
10
10
  import { hasProperty } from "../../Predicate.ts"
11
11
  import * as Queue from "../../Queue.ts"
12
- import type { Scheduler } from "../../Scheduler.ts"
12
+ import type { Scheduler, SchedulerDispatcher } from "../../Scheduler.ts"
13
13
  import { MixedScheduler } from "../../Scheduler.ts"
14
14
  import * as Scope from "../../Scope.ts"
15
15
  import * as ServiceMap from "../../ServiceMap.ts"
@@ -296,6 +296,7 @@ class RegistryImpl implements AtomRegistry {
296
296
  readonly defaultIdleTTL: number | undefined
297
297
  readonly scheduler: Scheduler
298
298
  readonly schedulerAsync: Scheduler
299
+ readonly dispatcher: SchedulerDispatcher
299
300
  onNodeAdded?: ((node: Node<any>) => void) | undefined
300
301
  onNodeRemoved?: ((node: Node<any>) => void) | undefined
301
302
 
@@ -308,6 +309,7 @@ class RegistryImpl implements AtomRegistry {
308
309
  this[TypeId] = TypeId
309
310
  this.scheduler = new MixedScheduler("sync", scheduleTask)
310
311
  this.schedulerAsync = new MixedScheduler("async", scheduleTask)
312
+ this.dispatcher = this.schedulerAsync.makeDispatcher()
311
313
  this.defaultIdleTTL = defaultIdleTTL
312
314
 
313
315
  if (timeoutResolution === undefined && defaultIdleTTL !== undefined) {
@@ -427,7 +429,7 @@ class RegistryImpl implements AtomRegistry {
427
429
  }
428
430
 
429
431
  scheduleAtomRemoval(atom: Atom.Atom<any>): void {
430
- this.schedulerAsync.scheduleTask(() => {
432
+ this.dispatcher.scheduleTask(() => {
431
433
  const node = this.nodes.get(atomKey(atom))
432
434
  if (node !== undefined && node.canBeRemoved) {
433
435
  this.removeNode(node)
@@ -436,7 +438,7 @@ class RegistryImpl implements AtomRegistry {
436
438
  }
437
439
 
438
440
  scheduleNodeRemoval(node: NodeImpl<any>): void {
439
- this.schedulerAsync.scheduleTask(() => {
441
+ this.dispatcher.scheduleTask(() => {
440
442
  if (node.canBeRemoved) {
441
443
  this.removeNode(node)
442
444
  }
@@ -4,6 +4,7 @@
4
4
  import type * as Cause from "../../Cause.ts"
5
5
  import type { Effect } from "../../Effect.ts"
6
6
  import type { Exit as Exit_ } from "../../Exit.ts"
7
+ import * as Option from "../../Option.ts"
7
8
  import { type Pipeable, pipeArguments } from "../../Pipeable.ts"
8
9
  import * as Predicate from "../../Predicate.ts"
9
10
  import * as PrimaryKey from "../../PrimaryKey.ts"
@@ -780,14 +781,14 @@ export const exitSchema = <R extends Any>(
780
781
  const rpc = self as any as AnyWithProps
781
782
  const failures = new Set<Schema.Top>([rpc.errorSchema])
782
783
  const streamSchemas = RpcSchema.getStreamSchemas(rpc.successSchema)
783
- if (streamSchemas) {
784
- failures.add(streamSchemas.error)
784
+ if (Option.isSome(streamSchemas)) {
785
+ failures.add(streamSchemas.value.error)
785
786
  }
786
787
  for (const middleware of rpc.middlewares) {
787
788
  failures.add(middleware.error)
788
789
  }
789
790
  const schema = Schema.Exit(
790
- streamSchemas ? Schema.Void : rpc.successSchema,
791
+ Option.isSome(streamSchemas) ? Schema.Void : rpc.successSchema,
791
792
  Schema.Union([...failures]),
792
793
  rpc.defectSchema
793
794
  )
@@ -366,7 +366,7 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any, E, const Flatten extend
366
366
  resume(exit) {
367
367
  resume(exit)
368
368
  if (fiber && !fiber.pollUnsafe()) {
369
- parentFiber.currentScheduler.scheduleTask(() => {
369
+ parentFiber.currentDispatcher.scheduleTask(() => {
370
370
  fiber.interruptUnsafe(parentFiber.id)
371
371
  }, 0)
372
372
  }
@@ -683,8 +683,8 @@ export const make: <Rpcs extends Rpc.Any, const Flatten extends boolean = false>
683
683
  case "Chunk": {
684
684
  const requestId = RequestId(message.requestId)
685
685
  const entry = entries.get(requestId)
686
- if (!entry || !entry.schemas.decodeChunk) return Effect.void
687
- return entry.schemas.decodeChunk(message.values).pipe(
686
+ if (!entry || Option.isNone(entry.schemas.decodeChunk)) return Effect.void
687
+ return entry.schemas.decodeChunk.value(message.values).pipe(
688
688
  Effect.provideServices(entry.context),
689
689
  Effect.orDie,
690
690
  Effect.flatMap((chunk) =>
@@ -738,9 +738,9 @@ export const make: <Rpcs extends Rpc.Any, const Flatten extends boolean = false>
738
738
  })
739
739
 
740
740
  interface RpcSchemas {
741
- readonly decodeChunk:
742
- | ((chunk: ReadonlyArray<unknown>) => Effect.Effect<NonEmptyReadonlyArray<any>, Schema.SchemaError, unknown>)
743
- | undefined
741
+ readonly decodeChunk: Option.Option<
742
+ (chunk: ReadonlyArray<unknown>) => Effect.Effect<NonEmptyReadonlyArray<any>, Schema.SchemaError, unknown>
743
+ >
744
744
  readonly encodePayload: (payload: any) => Effect.Effect<any, Schema.SchemaError, unknown>
745
745
  readonly decodeExit: (encoded: unknown) => Effect.Effect<Exit.Exit<any, any>, Schema.SchemaError, unknown>
746
746
  }
@@ -752,9 +752,10 @@ const rpcSchemas = (rpc: Rpc.AnyWithProps) => {
752
752
  }
753
753
  const streamSchemas = RpcSchema.getStreamSchemas(rpc.successSchema)
754
754
  entry = {
755
- decodeChunk: streamSchemas ?
756
- Schema.decodeUnknownEffect(Schema.toCodecJson(Schema.NonEmptyArray(streamSchemas.success))) :
757
- undefined,
755
+ decodeChunk: Option.map(
756
+ streamSchemas,
757
+ (streamSchemas) => Schema.decodeUnknownEffect(Schema.toCodecJson(Schema.NonEmptyArray(streamSchemas.success)))
758
+ ),
758
759
  encodePayload: Schema.encodeEffect(Schema.toCodecJson(rpc.payloadSchema)),
759
760
  decodeExit: Schema.decodeUnknownEffect(Schema.toCodecJson(Rpc.exitSchema(rpc as any)))
760
761
  }
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import * as Cause from "../../Cause.ts"
5
5
  import { constUndefined } from "../../Function.ts"
6
+ import * as Option from "../../Option.ts"
6
7
  import * as Predicate from "../../Predicate.ts"
7
8
  import * as Schema from "../../Schema.ts"
8
9
  import type * as AST from "../../SchemaAST.ts"
@@ -20,16 +21,16 @@ export function isStreamSchema(schema: Schema.Top): schema is Stream<Schema.Top,
20
21
  }
21
22
 
22
23
  /** @internal */
23
- export function getStreamSchemas(schema: Schema.Top): {
24
+ export function getStreamSchemas(schema: Schema.Top): Option.Option<{
24
25
  readonly success: Schema.Top
25
26
  readonly error: Schema.Top
26
- } | undefined {
27
+ }> {
27
28
  return isStreamSchema(schema) ?
28
- {
29
+ Option.some({
29
30
  success: schema.success,
30
31
  error: schema.error
31
- } :
32
- undefined
32
+ }) :
33
+ Option.none()
33
34
  }
34
35
 
35
36
  /**
@@ -37,7 +37,10 @@ export const json: RpcSerialization["Service"] = RpcSerialization.of({
37
37
  makeUnsafe: () => {
38
38
  const decoder = new TextDecoder()
39
39
  return {
40
- decode: (bytes) => [JSON.parse(typeof bytes === "string" ? bytes : decoder.decode(bytes))],
40
+ decode: (bytes) => {
41
+ const decoded = JSON.parse(typeof bytes === "string" ? bytes : decoder.decode(bytes))
42
+ return Array.isArray(decoded) ? decoded : [decoded]
43
+ },
41
44
  encode: (response) => JSON.stringify(response)
42
45
  }
43
46
  }
@@ -11,7 +11,7 @@ import { constant, constTrue, constVoid, identity } from "../../Function.ts"
11
11
  import { reportCauseUnsafe } from "../../internal/effect.ts"
12
12
  import * as Latch from "../../Latch.ts"
13
13
  import * as Layer from "../../Layer.ts"
14
- import type * as Option from "../../Option.ts"
14
+ import * as Option from "../../Option.ts"
15
15
  import * as Predicate from "../../Predicate.ts"
16
16
  import * as Pull from "../../Pull.ts"
17
17
  import * as Queue from "../../Queue.ts"
@@ -547,7 +547,7 @@ export const make: <Rpcs extends Rpc.Any>(
547
547
  decode: Schema.decodeUnknownEffect(Schema.toCodecJson(rpc.payloadSchema)) as any,
548
548
  encodeChunk: Schema.encodeUnknownEffect(
549
549
  Schema.toCodecJson(
550
- Schema.Array(streamSchemas ? streamSchemas.success : Schema.Any)
550
+ Schema.Array(Option.isSome(streamSchemas) ? streamSchemas.value.success : Schema.Any)
551
551
  )
552
552
  ) as any,
553
553
  encodeExit: Schema.encodeUnknownEffect(Schema.toCodecJson(Rpc.exitSchema(rpc as any))) as any,
@@ -1245,7 +1245,7 @@ export const makeProtocolWorkerRunner: Effect.Effect<
1245
1245
  Effect.tapCause(Effect.logError),
1246
1246
  Effect.onExit(() =>
1247
1247
  Effect.sync(() => {
1248
- fiber.currentScheduler.scheduleTask(() => fiber.interruptUnsafe(fiber.id), 0)
1248
+ fiber.currentDispatcher.scheduleTask(() => fiber.interruptUnsafe(fiber.id), 0)
1249
1249
  })
1250
1250
  ),
1251
1251
  Effect.forkScoped
@@ -500,6 +500,7 @@ export const fromWebSocket = <RO>(
500
500
  )
501
501
  }
502
502
  function onClose(event: globalThis.CloseEvent) {
503
+ const code = typeof event.code === "number" ? event.code : 1001
503
504
  ws.removeEventListener("message", onMessage)
504
505
  ws.removeEventListener("error", onError)
505
506
  Deferred.doneUnsafe(
@@ -507,7 +508,7 @@ export const fromWebSocket = <RO>(
507
508
  Effect.fail(
508
509
  new SocketError({
509
510
  reason: new SocketCloseError({
510
- code: event.code,
511
+ code,
511
512
  closeReason: event.reason
512
513
  })
513
514
  })
@@ -215,9 +215,11 @@ export const makeWithTransaction = <I, S>(options: {
215
215
  Effect.flatMap(() =>
216
216
  Effect.provideServices(
217
217
  restore(effect),
218
- ServiceMap.add(services, options.transactionService, [conn, id]).pipe(
219
- ServiceMap.add(Tracer.ParentSpan, span)
220
- )
218
+ ServiceMap.mutate(services, (services) =>
219
+ services.pipe(
220
+ ServiceMap.add(options.transactionService, [conn, id]),
221
+ ServiceMap.add(Tracer.ParentSpan, span)
222
+ ))
221
223
  )
222
224
  ),
223
225
  Effect.exit,
@@ -8,7 +8,7 @@ import * as Effect from "../../Effect.ts"
8
8
  import * as Encoding from "../../Encoding.ts"
9
9
  import * as Exit from "../../Exit.ts"
10
10
  import { dual } from "../../Function.ts"
11
- import * as Predicate from "../../Predicate.ts"
11
+ import * as Option from "../../Option.ts"
12
12
  import * as Schema from "../../Schema.ts"
13
13
  import * as Getter from "../../SchemaGetter.ts"
14
14
  import * as ServiceMap from "../../ServiceMap.ts"
@@ -124,12 +124,12 @@ const await_: <Success extends Schema.Top, Error extends Schema.Top>(
124
124
  const instance = yield* InstanceTag
125
125
  const exit = yield* Workflow.wrapActivityResult(
126
126
  engine.deferredResult(self),
127
- Predicate.isUndefined
127
+ Option.isNone
128
128
  )
129
- if (exit === undefined) {
129
+ if (Option.isNone(exit)) {
130
130
  return yield* Workflow.suspend(instance)
131
131
  }
132
- return yield* exit as Exit.Exit<any, any>
132
+ return yield* exit.value as Exit.Exit<any, any>
133
133
  })
134
134
 
135
135
  export {
@@ -241,8 +241,8 @@ export const raceAll = <
241
241
  return Effect.gen(function*() {
242
242
  const engine = yield* EngineTag
243
243
  const exit = yield* engine.deferredResult(deferred)
244
- if (exit !== undefined) {
245
- return yield* Effect.flatten(exit) as Effect.Effect<any, any, any>
244
+ if (Option.isSome(exit)) {
245
+ return yield* Effect.flatten(exit.value) as Effect.Effect<any, any, any>
246
246
  }
247
247
  return yield* into(Effect.raceAll(options.effects), deferred)
248
248
  })
@@ -78,7 +78,7 @@ export interface Workflow<
78
78
  readonly poll: (
79
79
  executionId: string
80
80
  ) => Effect.Effect<
81
- Result<Success["Type"], Error["Type"]> | undefined,
81
+ Option.Option<Result<Success["Type"], Error["Type"]>>,
82
82
  never,
83
83
  WorkflowEngine | Success["DecodingServices"] | Error["DecodingServices"]
84
84
  >
@@ -98,7 +98,7 @@ export class WorkflowEngine extends ServiceMap.Service<
98
98
  workflow: Workflow.Workflow<Name, Payload, Success, Error>,
99
99
  executionId: string
100
100
  ) => Effect.Effect<
101
- Workflow.Result<Success["Type"], Error["Type"]> | undefined,
101
+ Option.Option<Workflow.Result<Success["Type"], Error["Type"]>>,
102
102
  never,
103
103
  Success["DecodingServices"] | Error["DecodingServices"]
104
104
  >
@@ -147,7 +147,7 @@ export class WorkflowEngine extends ServiceMap.Service<
147
147
  >(
148
148
  deferred: DurableDeferred.DurableDeferred<Success, Error>
149
149
  ) => Effect.Effect<
150
- Exit.Exit<Success["Type"], Error["Type"]> | undefined,
150
+ Option.Option<Exit.Exit<Success["Type"], Error["Type"]>>,
151
151
  never,
152
152
  WorkflowInstance
153
153
  >
@@ -277,7 +277,7 @@ export interface Encoded {
277
277
  readonly poll: (
278
278
  workflow: Workflow.Any,
279
279
  executionId: string
280
- ) => Effect.Effect<Workflow.Result<unknown, unknown> | undefined>
280
+ ) => Effect.Effect<Option.Option<Workflow.Result<unknown, unknown>>>
281
281
  readonly interrupt: (
282
282
  workflow: Workflow.Any,
283
283
  executionId: string
@@ -297,7 +297,7 @@ export interface Encoded {
297
297
  readonly deferredResult: (
298
298
  deferred: DurableDeferred.Any
299
299
  ) => Effect.Effect<
300
- Exit.Exit<unknown, unknown> | undefined,
300
+ Option.Option<Exit.Exit<unknown, unknown>>,
301
301
  never,
302
302
  WorkflowInstance
303
303
  >
@@ -354,14 +354,14 @@ export const makeUnsafe = (options: Encoded): WorkflowEngine["Service"] =>
354
354
  const executionId = opts.executionId
355
355
  const suspendedRetrySchedule = opts.suspendedRetrySchedule ?? defaultRetrySchedule
356
356
  yield* Effect.annotateCurrentSpan({ executionId })
357
- let result: Workflow.Result<Success["Type"], Error["Type"]> | undefined
357
+ let result = Option.none<Workflow.Result<Success["Type"], Error["Type"]>>()
358
358
 
359
359
  // link interruption with parent workflow
360
360
  const parentInstance = yield* Effect.serviceOption(WorkflowInstance)
361
361
  if (Option.isSome(parentInstance)) {
362
362
  const instance = parentInstance.value
363
363
  yield* Effect.addFinalizer(() => {
364
- if (!instance.interrupted || result?._tag === "Complete") {
364
+ if (!instance.interrupted || (Option.isSome(result) && result.value._tag === "Complete")) {
365
365
  return Effect.void
366
366
  }
367
367
  return options.interrupt(self, executionId)
@@ -384,21 +384,23 @@ export const makeUnsafe = (options: Encoded): WorkflowEngine["Service"] =>
384
384
  parent: Option.getOrUndefined(parentInstance)
385
385
  })
386
386
  if (Option.isSome(parentInstance)) {
387
- result = yield* Workflow.wrapActivityResult(
387
+ const wrapped = yield* Workflow.wrapActivityResult(
388
388
  run,
389
389
  (result) => result._tag === "Suspended"
390
390
  )
391
- if (result._tag === "Suspended") {
391
+ result = Option.some(wrapped)
392
+ if (wrapped._tag === "Suspended") {
392
393
  return yield* Workflow.suspend(parentInstance.value)
393
394
  }
394
- return yield* result.exit
395
+ return yield* wrapped.exit
395
396
  }
396
397
 
397
398
  let sleep: Effect.Effect<any> | undefined
398
399
  while (true) {
399
- result = yield* run
400
- if (result._tag === "Complete") {
401
- return yield* result.exit as Exit.Exit<any>
400
+ const wrapped = yield* run
401
+ result = Option.some(wrapped)
402
+ if (wrapped._tag === "Complete") {
403
+ return yield* wrapped.exit as Exit.Exit<any>
402
404
  }
403
405
  sleep ??= (yield* Schedule.toStepWithSleep(suspendedRetrySchedule))(
404
406
  void 0
@@ -438,12 +440,14 @@ export const makeUnsafe = (options: Encoded): WorkflowEngine["Service"] =>
438
440
  executionId: instance.executionId
439
441
  })
440
442
  const exit = yield* options.deferredResult(deferred)
441
- if (exit === undefined) {
442
- return exit
443
+ if (Option.isNone(exit)) {
444
+ return Option.none()
443
445
  }
444
- return yield* Effect.orDie(
445
- Schema.decodeEffect(deferred.exitSchema)(toJsonExit(exit))
446
- ) as Effect.Effect<Exit.Exit<Success["Type"], Error["Type"]>>
446
+ return Option.some(
447
+ yield* Effect.orDie(
448
+ Schema.decodeEffect(deferred.exitSchema)(toJsonExit(exit.value))
449
+ ) as Effect.Effect<Exit.Exit<Success["Type"], Error["Type"]>>
450
+ )
447
451
  },
448
452
  Effect.withSpan(
449
453
  "WorkflowEngine.deferredResult",
@@ -646,15 +650,20 @@ export const layerMemory: Layer.Layer<WorkflowEngine> = Layer.effect(WorkflowEng
646
650
  Effect.suspend(() => {
647
651
  const state = executions.get(executionId)
648
652
  if (!state) {
649
- return Effect.succeed(undefined)
653
+ return Effect.succeedNone
650
654
  }
651
655
  const exit = state.fiber?.pollUnsafe()
652
- return exit ?? Effect.succeed(undefined)
656
+ if (!exit) {
657
+ return Effect.succeedNone
658
+ }
659
+ return exit._tag === "Success"
660
+ ? Effect.succeedSome(exit.value)
661
+ : Effect.die(exit.cause)
653
662
  }),
654
663
  deferredResult: Effect.fnUntraced(function*(deferred) {
655
664
  const instance = yield* WorkflowInstance
656
665
  const id = `${instance.executionId}/${deferred.name}`
657
- return deferredResults.get(id)
666
+ return Option.fromNullishOr(deferredResults.get(id))
658
667
  }),
659
668
  deferredDone: (options) =>
660
669
  Effect.suspend(() => {