effect 4.0.0-beta.0 → 4.0.0-beta.10

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 (571) hide show
  1. package/dist/Cache.d.ts +2 -2
  2. package/dist/Cache.d.ts.map +1 -1
  3. package/dist/Cache.js +1 -1
  4. package/dist/Cache.js.map +1 -1
  5. package/dist/Cause.d.ts +1 -1
  6. package/dist/Cause.d.ts.map +1 -1
  7. package/dist/Channel.d.ts.map +1 -1
  8. package/dist/Channel.js +6 -4
  9. package/dist/Channel.js.map +1 -1
  10. package/dist/Combiner.d.ts +280 -13
  11. package/dist/Combiner.d.ts.map +1 -1
  12. package/dist/Combiner.js +198 -7
  13. package/dist/Combiner.js.map +1 -1
  14. package/dist/Config.d.ts +3 -3
  15. package/dist/Config.js +3 -3
  16. package/dist/Config.js.map +1 -1
  17. package/dist/ConfigProvider.d.ts +1 -1
  18. package/dist/Cron.d.ts +1 -1
  19. package/dist/Data.d.ts +534 -365
  20. package/dist/Data.d.ts.map +1 -1
  21. package/dist/Data.js +132 -79
  22. package/dist/Data.js.map +1 -1
  23. package/dist/DateTime.d.ts +23 -161
  24. package/dist/DateTime.d.ts.map +1 -1
  25. package/dist/DateTime.js +6 -51
  26. package/dist/DateTime.js.map +1 -1
  27. package/dist/Duration.d.ts +12 -12
  28. package/dist/Duration.d.ts.map +1 -1
  29. package/dist/Duration.js +12 -12
  30. package/dist/Duration.js.map +1 -1
  31. package/dist/Effect.d.ts +175 -240
  32. package/dist/Effect.d.ts.map +1 -1
  33. package/dist/Effect.js +73 -119
  34. package/dist/Effect.js.map +1 -1
  35. package/dist/Encoding.d.ts +194 -0
  36. package/dist/Encoding.d.ts.map +1 -0
  37. package/dist/Encoding.js +352 -0
  38. package/dist/Encoding.js.map +1 -0
  39. package/dist/Equal.d.ts +276 -109
  40. package/dist/Equal.d.ts.map +1 -1
  41. package/dist/Equal.js +124 -48
  42. package/dist/Equal.js.map +1 -1
  43. package/dist/FileSystem.d.ts +1 -1
  44. package/dist/FileSystem.d.ts.map +1 -1
  45. package/dist/FileSystem.js +5 -5
  46. package/dist/FileSystem.js.map +1 -1
  47. package/dist/Filter.d.ts +30 -1
  48. package/dist/Filter.d.ts.map +1 -1
  49. package/dist/Filter.js +15 -0
  50. package/dist/Filter.js.map +1 -1
  51. package/dist/Formatter.d.ts +131 -47
  52. package/dist/Formatter.d.ts.map +1 -1
  53. package/dist/Formatter.js +229 -51
  54. package/dist/Formatter.js.map +1 -1
  55. package/dist/Graph.d.ts +1 -1
  56. package/dist/Graph.d.ts.map +1 -1
  57. package/dist/Graph.js +2 -2
  58. package/dist/Graph.js.map +1 -1
  59. package/dist/JsonSchema.d.ts +299 -10
  60. package/dist/JsonSchema.d.ts.map +1 -1
  61. package/dist/JsonSchema.js +323 -4
  62. package/dist/JsonSchema.js.map +1 -1
  63. package/dist/Latch.d.ts +109 -0
  64. package/dist/Latch.d.ts.map +1 -0
  65. package/dist/Latch.js +72 -0
  66. package/dist/Latch.js.map +1 -0
  67. package/dist/LayerMap.d.ts +4 -4
  68. package/dist/LayerMap.d.ts.map +1 -1
  69. package/dist/LogLevel.d.ts +27 -0
  70. package/dist/LogLevel.d.ts.map +1 -1
  71. package/dist/LogLevel.js +28 -100
  72. package/dist/LogLevel.js.map +1 -1
  73. package/dist/Logger.d.ts +4 -4
  74. package/dist/Logger.d.ts.map +1 -1
  75. package/dist/Metric.d.ts +2 -2
  76. package/dist/Metric.d.ts.map +1 -1
  77. package/dist/Metric.js +1 -1
  78. package/dist/Metric.js.map +1 -1
  79. package/dist/Optic.d.ts +947 -18
  80. package/dist/Optic.d.ts.map +1 -1
  81. package/dist/Optic.js +454 -5
  82. package/dist/Optic.js.map +1 -1
  83. package/dist/Pipeable.d.ts +17 -0
  84. package/dist/Pipeable.d.ts.map +1 -1
  85. package/dist/Pipeable.js +19 -1
  86. package/dist/Pipeable.js.map +1 -1
  87. package/dist/PlatformError.d.ts +10 -9
  88. package/dist/PlatformError.d.ts.map +1 -1
  89. package/dist/PlatformError.js +2 -2
  90. package/dist/PlatformError.js.map +1 -1
  91. package/dist/Pool.d.ts +6 -4
  92. package/dist/Pool.d.ts.map +1 -1
  93. package/dist/Pool.js +7 -5
  94. package/dist/Pool.js.map +1 -1
  95. package/dist/PubSub.d.ts +3 -2
  96. package/dist/PubSub.d.ts.map +1 -1
  97. package/dist/PubSub.js +3 -2
  98. package/dist/PubSub.js.map +1 -1
  99. package/dist/Random.d.ts +18 -1
  100. package/dist/Random.d.ts.map +1 -1
  101. package/dist/Random.js +29 -12
  102. package/dist/Random.js.map +1 -1
  103. package/dist/RcMap.d.ts +2 -2
  104. package/dist/RcMap.d.ts.map +1 -1
  105. package/dist/RcMap.js +1 -1
  106. package/dist/RcMap.js.map +1 -1
  107. package/dist/RcRef.d.ts +1 -1
  108. package/dist/RcRef.d.ts.map +1 -1
  109. package/dist/Reducer.d.ts +166 -7
  110. package/dist/Reducer.d.ts.map +1 -1
  111. package/dist/Reducer.js +135 -1
  112. package/dist/Reducer.js.map +1 -1
  113. package/dist/Request.d.ts +1 -1
  114. package/dist/Request.d.ts.map +1 -1
  115. package/dist/Request.js +2 -1
  116. package/dist/Request.js.map +1 -1
  117. package/dist/RequestResolver.d.ts +6 -26
  118. package/dist/RequestResolver.d.ts.map +1 -1
  119. package/dist/RequestResolver.js +0 -20
  120. package/dist/RequestResolver.js.map +1 -1
  121. package/dist/Result.d.ts +12 -0
  122. package/dist/Result.d.ts.map +1 -1
  123. package/dist/Result.js +12 -0
  124. package/dist/Result.js.map +1 -1
  125. package/dist/Schedule.d.ts +33 -14
  126. package/dist/Schedule.d.ts.map +1 -1
  127. package/dist/Schedule.js +65 -24
  128. package/dist/Schedule.js.map +1 -1
  129. package/dist/Schema.d.ts +199 -49
  130. package/dist/Schema.d.ts.map +1 -1
  131. package/dist/Schema.js +386 -72
  132. package/dist/Schema.js.map +1 -1
  133. package/dist/SchemaGetter.d.ts +2 -2
  134. package/dist/SchemaGetter.d.ts.map +1 -1
  135. package/dist/SchemaGetter.js +12 -14
  136. package/dist/SchemaGetter.js.map +1 -1
  137. package/dist/SchemaRepresentation.d.ts +44 -43
  138. package/dist/SchemaRepresentation.d.ts.map +1 -1
  139. package/dist/SchemaRepresentation.js +43 -24
  140. package/dist/SchemaRepresentation.js.map +1 -1
  141. package/dist/SchemaTransformation.d.ts +37 -0
  142. package/dist/SchemaTransformation.d.ts.map +1 -1
  143. package/dist/SchemaTransformation.js +80 -0
  144. package/dist/SchemaTransformation.js.map +1 -1
  145. package/dist/ScopedCache.d.ts +2 -2
  146. package/dist/ScopedCache.d.ts.map +1 -1
  147. package/dist/ScopedCache.js +1 -1
  148. package/dist/ScopedCache.js.map +1 -1
  149. package/dist/Semaphore.d.ts +211 -0
  150. package/dist/Semaphore.d.ts.map +1 -0
  151. package/dist/{PartitionedSemaphore.js → Semaphore.js} +97 -13
  152. package/dist/Semaphore.js.map +1 -0
  153. package/dist/Stream.d.ts +19 -19
  154. package/dist/Stream.d.ts.map +1 -1
  155. package/dist/Stream.js +12 -11
  156. package/dist/Stream.js.map +1 -1
  157. package/dist/Struct.d.ts +16 -0
  158. package/dist/Struct.d.ts.map +1 -1
  159. package/dist/Struct.js +22 -0
  160. package/dist/Struct.js.map +1 -1
  161. package/dist/SubscriptionRef.d.ts +2 -1
  162. package/dist/SubscriptionRef.d.ts.map +1 -1
  163. package/dist/SubscriptionRef.js +2 -1
  164. package/dist/SubscriptionRef.js.map +1 -1
  165. package/dist/SynchronizedRef.d.ts +2 -1
  166. package/dist/SynchronizedRef.d.ts.map +1 -1
  167. package/dist/SynchronizedRef.js +2 -1
  168. package/dist/SynchronizedRef.js.map +1 -1
  169. package/dist/Types.d.ts +14 -6
  170. package/dist/Types.d.ts.map +1 -1
  171. package/dist/index.d.ts +499 -19
  172. package/dist/index.d.ts.map +1 -1
  173. package/dist/index.js +499 -19
  174. package/dist/index.js.map +1 -1
  175. package/dist/internal/core.js +11 -3
  176. package/dist/internal/core.js.map +1 -1
  177. package/dist/internal/dateTime.js +3 -11
  178. package/dist/internal/dateTime.js.map +1 -1
  179. package/dist/internal/effect.js +37 -22
  180. package/dist/internal/effect.js.map +1 -1
  181. package/dist/internal/random.d.ts +2 -0
  182. package/dist/internal/random.d.ts.map +1 -0
  183. package/dist/internal/random.js +13 -0
  184. package/dist/internal/random.js.map +1 -0
  185. package/dist/internal/rcRef.js +3 -2
  186. package/dist/internal/rcRef.js.map +1 -1
  187. package/dist/testing/TestClock.d.ts +7 -6
  188. package/dist/testing/TestClock.d.ts.map +1 -1
  189. package/dist/testing/TestClock.js +6 -4
  190. package/dist/testing/TestClock.js.map +1 -1
  191. package/dist/testing/TestSchema.d.ts +6 -6
  192. package/dist/testing/TestSchema.d.ts.map +1 -1
  193. package/dist/unstable/ai/AiError.d.ts +48 -48
  194. package/dist/unstable/ai/AiError.d.ts.map +1 -1
  195. package/dist/unstable/ai/Chat.d.ts +3 -3
  196. package/dist/unstable/ai/Chat.d.ts.map +1 -1
  197. package/dist/unstable/ai/Chat.js +4 -3
  198. package/dist/unstable/ai/Chat.js.map +1 -1
  199. package/dist/unstable/ai/LanguageModel.d.ts +2 -2
  200. package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
  201. package/dist/unstable/ai/McpSchema.d.ts +51 -51
  202. package/dist/unstable/ai/McpServer.d.ts +1 -1
  203. package/dist/unstable/ai/McpServer.d.ts.map +1 -1
  204. package/dist/unstable/ai/McpServer.js.map +1 -1
  205. package/dist/unstable/ai/Prompt.d.ts +20 -20
  206. package/dist/unstable/ai/Prompt.d.ts.map +1 -1
  207. package/dist/unstable/ai/Response.d.ts +26 -26
  208. package/dist/unstable/ai/Response.d.ts.map +1 -1
  209. package/dist/unstable/ai/Response.js +1 -1
  210. package/dist/unstable/ai/Response.js.map +1 -1
  211. package/dist/unstable/cli/CliError.d.ts +5 -5
  212. package/dist/unstable/cli/Prompt.js +2 -2
  213. package/dist/unstable/cli/Prompt.js.map +1 -1
  214. package/dist/unstable/cluster/ClusterCron.d.ts +1 -1
  215. package/dist/unstable/cluster/ClusterCron.d.ts.map +1 -1
  216. package/dist/unstable/cluster/ClusterCron.js +1 -1
  217. package/dist/unstable/cluster/ClusterCron.js.map +1 -1
  218. package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  219. package/dist/unstable/cluster/ClusterWorkflowEngine.js +2 -1
  220. package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
  221. package/dist/unstable/cluster/Entity.d.ts +5 -4
  222. package/dist/unstable/cluster/Entity.d.ts.map +1 -1
  223. package/dist/unstable/cluster/Entity.js.map +1 -1
  224. package/dist/unstable/cluster/EntityResource.d.ts +2 -2
  225. package/dist/unstable/cluster/EntityResource.d.ts.map +1 -1
  226. package/dist/unstable/cluster/Envelope.d.ts +1 -1
  227. package/dist/unstable/cluster/K8sHttpClient.d.ts +1 -1
  228. package/dist/unstable/cluster/K8sHttpClient.js +1 -1
  229. package/dist/unstable/cluster/K8sHttpClient.js.map +1 -1
  230. package/dist/unstable/cluster/Message.d.ts +10 -10
  231. package/dist/unstable/cluster/MessageStorage.d.ts.map +1 -1
  232. package/dist/unstable/cluster/MessageStorage.js +2 -1
  233. package/dist/unstable/cluster/MessageStorage.js.map +1 -1
  234. package/dist/unstable/cluster/Reply.d.ts +6 -6
  235. package/dist/unstable/cluster/Runner.d.ts +1 -1
  236. package/dist/unstable/cluster/Runners.d.ts.map +1 -1
  237. package/dist/unstable/cluster/Runners.js +4 -3
  238. package/dist/unstable/cluster/Runners.js.map +1 -1
  239. package/dist/unstable/cluster/Sharding.d.ts +2 -2
  240. package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
  241. package/dist/unstable/cluster/Sharding.js +8 -6
  242. package/dist/unstable/cluster/Sharding.js.map +1 -1
  243. package/dist/unstable/cluster/ShardingConfig.d.ts +21 -21
  244. package/dist/unstable/cluster/ShardingConfig.d.ts.map +1 -1
  245. package/dist/unstable/cluster/ShardingConfig.js.map +1 -1
  246. package/dist/unstable/cluster/SqlRunnerStorage.js +1 -1
  247. package/dist/unstable/cluster/SqlRunnerStorage.js.map +1 -1
  248. package/dist/unstable/cluster/internal/entityManager.js +5 -4
  249. package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
  250. package/dist/unstable/cluster/internal/entityReaper.js +2 -1
  251. package/dist/unstable/cluster/internal/entityReaper.js.map +1 -1
  252. package/dist/unstable/cluster/internal/resourceRef.js +2 -1
  253. package/dist/unstable/cluster/internal/resourceRef.js.map +1 -1
  254. package/dist/unstable/devtools/DevToolsSchema.d.ts +36 -36
  255. package/dist/unstable/encoding/Msgpack.d.ts +1 -1
  256. package/dist/unstable/encoding/Ndjson.d.ts +1 -1
  257. package/dist/unstable/encoding/Sse.d.ts +4 -4
  258. package/dist/unstable/encoding/Sse.d.ts.map +1 -1
  259. package/dist/unstable/encoding/Sse.js.map +1 -1
  260. package/dist/unstable/eventlog/EventJournal.d.ts +2 -2
  261. package/dist/unstable/eventlog/EventLog.d.ts.map +1 -1
  262. package/dist/unstable/eventlog/EventLog.js +2 -1
  263. package/dist/unstable/eventlog/EventLog.js.map +1 -1
  264. package/dist/unstable/eventlog/EventLogRemote.d.ts +6 -6
  265. package/dist/unstable/http/Cookies.d.ts +3 -3
  266. package/dist/unstable/http/Cookies.d.ts.map +1 -1
  267. package/dist/unstable/http/Cookies.js +2 -2
  268. package/dist/unstable/http/Cookies.js.map +1 -1
  269. package/dist/unstable/http/HttpBody.d.ts +17 -2
  270. package/dist/unstable/http/HttpBody.d.ts.map +1 -1
  271. package/dist/unstable/http/HttpBody.js +28 -1
  272. package/dist/unstable/http/HttpBody.js.map +1 -1
  273. package/dist/unstable/http/HttpClient.d.ts +11 -11
  274. package/dist/unstable/http/HttpClient.d.ts.map +1 -1
  275. package/dist/unstable/http/HttpClient.js +4 -4
  276. package/dist/unstable/http/HttpClient.js.map +1 -1
  277. package/dist/unstable/http/HttpClientError.d.ts +7 -7
  278. package/dist/unstable/http/HttpClientRequest.d.ts +27 -11
  279. package/dist/unstable/http/HttpClientRequest.d.ts.map +1 -1
  280. package/dist/unstable/http/HttpClientRequest.js +15 -3
  281. package/dist/unstable/http/HttpClientRequest.js.map +1 -1
  282. package/dist/unstable/http/HttpEffect.d.ts.map +1 -1
  283. package/dist/unstable/http/HttpEffect.js +18 -26
  284. package/dist/unstable/http/HttpEffect.js.map +1 -1
  285. package/dist/unstable/http/HttpMethod.d.ts +4 -4
  286. package/dist/unstable/http/HttpMethod.d.ts.map +1 -1
  287. package/dist/unstable/http/HttpMethod.js +3 -3
  288. package/dist/unstable/http/HttpMethod.js.map +1 -1
  289. package/dist/unstable/http/HttpMiddleware.d.ts +1 -6
  290. package/dist/unstable/http/HttpMiddleware.d.ts.map +1 -1
  291. package/dist/unstable/http/HttpMiddleware.js +4 -9
  292. package/dist/unstable/http/HttpMiddleware.js.map +1 -1
  293. package/dist/unstable/http/HttpServerError.d.ts +6 -6
  294. package/dist/unstable/http/HttpServerResponse.js +1 -1
  295. package/dist/unstable/http/HttpServerResponse.js.map +1 -1
  296. package/dist/unstable/http/Multipart.d.ts +3 -3
  297. package/dist/unstable/http/UrlParams.d.ts +14 -6
  298. package/dist/unstable/http/UrlParams.d.ts.map +1 -1
  299. package/dist/unstable/http/UrlParams.js +1 -1
  300. package/dist/unstable/http/UrlParams.js.map +1 -1
  301. package/dist/unstable/httpapi/HttpApiBuilder.js +5 -5
  302. package/dist/unstable/httpapi/HttpApiBuilder.js.map +1 -1
  303. package/dist/unstable/httpapi/HttpApiClient.js +3 -3
  304. package/dist/unstable/httpapi/HttpApiClient.js.map +1 -1
  305. package/dist/unstable/httpapi/HttpApiEndpoint.d.ts +21 -39
  306. package/dist/unstable/httpapi/HttpApiEndpoint.d.ts.map +1 -1
  307. package/dist/unstable/httpapi/HttpApiEndpoint.js +15 -24
  308. package/dist/unstable/httpapi/HttpApiEndpoint.js.map +1 -1
  309. package/dist/unstable/httpapi/HttpApiScalar.d.ts +6 -0
  310. package/dist/unstable/httpapi/HttpApiScalar.d.ts.map +1 -1
  311. package/dist/unstable/httpapi/HttpApiScalar.js.map +1 -1
  312. package/dist/unstable/httpapi/OpenApi.d.ts.map +1 -1
  313. package/dist/unstable/httpapi/OpenApi.js +18 -16
  314. package/dist/unstable/httpapi/OpenApi.js.map +1 -1
  315. package/dist/unstable/observability/Otlp.d.ts +12 -12
  316. package/dist/unstable/observability/Otlp.d.ts.map +1 -1
  317. package/dist/unstable/observability/OtlpExporter.d.ts +2 -2
  318. package/dist/unstable/observability/OtlpExporter.d.ts.map +1 -1
  319. package/dist/unstable/observability/OtlpExporter.js +1 -1
  320. package/dist/unstable/observability/OtlpExporter.js.map +1 -1
  321. package/dist/unstable/observability/OtlpLogger.d.ts +4 -4
  322. package/dist/unstable/observability/OtlpLogger.d.ts.map +1 -1
  323. package/dist/unstable/observability/OtlpMetrics.d.ts +4 -4
  324. package/dist/unstable/observability/OtlpMetrics.d.ts.map +1 -1
  325. package/dist/unstable/observability/OtlpTracer.d.ts +4 -4
  326. package/dist/unstable/observability/OtlpTracer.d.ts.map +1 -1
  327. package/dist/unstable/persistence/KeyValueStore.d.ts +1 -1
  328. package/dist/unstable/persistence/KeyValueStore.js +6 -6
  329. package/dist/unstable/persistence/KeyValueStore.js.map +1 -1
  330. package/dist/unstable/persistence/Persistable.d.ts +2 -2
  331. package/dist/unstable/persistence/Persistable.d.ts.map +1 -1
  332. package/dist/unstable/persistence/PersistedCache.d.ts +6 -5
  333. package/dist/unstable/persistence/PersistedCache.d.ts.map +1 -1
  334. package/dist/unstable/persistence/PersistedCache.js +2 -1
  335. package/dist/unstable/persistence/PersistedCache.js.map +1 -1
  336. package/dist/unstable/persistence/PersistedQueue.d.ts +12 -12
  337. package/dist/unstable/persistence/PersistedQueue.d.ts.map +1 -1
  338. package/dist/unstable/persistence/PersistedQueue.js +12 -11
  339. package/dist/unstable/persistence/PersistedQueue.js.map +1 -1
  340. package/dist/unstable/persistence/Persistence.d.ts +1 -1
  341. package/dist/unstable/persistence/Persistence.d.ts.map +1 -1
  342. package/dist/unstable/persistence/Persistence.js +2 -2
  343. package/dist/unstable/persistence/Persistence.js.map +1 -1
  344. package/dist/unstable/persistence/RateLimiter.d.ts +3 -3
  345. package/dist/unstable/persistence/RateLimiter.d.ts.map +1 -1
  346. package/dist/unstable/persistence/RateLimiter.js +1 -1
  347. package/dist/unstable/persistence/RateLimiter.js.map +1 -1
  348. package/dist/unstable/process/ChildProcess.d.ts +2 -2
  349. package/dist/unstable/process/ChildProcess.d.ts.map +1 -1
  350. package/dist/unstable/process/ChildProcessSpawner.d.ts +6 -0
  351. package/dist/unstable/process/ChildProcessSpawner.d.ts.map +1 -1
  352. package/dist/unstable/process/ChildProcessSpawner.js.map +1 -1
  353. package/dist/unstable/reactivity/Atom.d.ts +6 -6
  354. package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
  355. package/dist/unstable/reactivity/Atom.js +15 -12
  356. package/dist/unstable/reactivity/Atom.js.map +1 -1
  357. package/dist/unstable/reactivity/AtomHttpApi.d.ts +6 -6
  358. package/dist/unstable/reactivity/AtomHttpApi.d.ts.map +1 -1
  359. package/dist/unstable/reactivity/AtomHttpApi.js +3 -3
  360. package/dist/unstable/reactivity/AtomHttpApi.js.map +1 -1
  361. package/dist/unstable/reactivity/AtomRpc.d.ts +1 -1
  362. package/dist/unstable/reactivity/AtomRpc.d.ts.map +1 -1
  363. package/dist/unstable/reactivity/AtomRpc.js +1 -1
  364. package/dist/unstable/reactivity/AtomRpc.js.map +1 -1
  365. package/dist/unstable/reactivity/Hydration.d.ts +39 -0
  366. package/dist/unstable/reactivity/Hydration.d.ts.map +1 -0
  367. package/dist/unstable/reactivity/Hydration.js +76 -0
  368. package/dist/unstable/reactivity/Hydration.js.map +1 -0
  369. package/dist/unstable/reactivity/index.d.ts +4 -0
  370. package/dist/unstable/reactivity/index.d.ts.map +1 -1
  371. package/dist/unstable/reactivity/index.js +4 -0
  372. package/dist/unstable/reactivity/index.js.map +1 -1
  373. package/dist/unstable/rpc/Rpc.d.ts +2 -2
  374. package/dist/unstable/rpc/Rpc.d.ts.map +1 -1
  375. package/dist/unstable/rpc/RpcClient.d.ts +5 -26
  376. package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
  377. package/dist/unstable/rpc/RpcClient.js +6 -13
  378. package/dist/unstable/rpc/RpcClient.js.map +1 -1
  379. package/dist/unstable/rpc/RpcServer.d.ts.map +1 -1
  380. package/dist/unstable/rpc/RpcServer.js +5 -3
  381. package/dist/unstable/rpc/RpcServer.js.map +1 -1
  382. package/dist/unstable/rpc/Utils.d.ts.map +1 -1
  383. package/dist/unstable/rpc/Utils.js +2 -1
  384. package/dist/unstable/rpc/Utils.js.map +1 -1
  385. package/dist/unstable/schema/Model.d.ts +4 -4
  386. package/dist/unstable/schema/Model.d.ts.map +1 -1
  387. package/dist/unstable/schema/VariantSchema.d.ts +2 -2
  388. package/dist/unstable/schema/VariantSchema.d.ts.map +1 -1
  389. package/dist/unstable/schema/VariantSchema.js +13 -2
  390. package/dist/unstable/schema/VariantSchema.js.map +1 -1
  391. package/dist/unstable/socket/Socket.d.ts +4 -4
  392. package/dist/unstable/socket/Socket.d.ts.map +1 -1
  393. package/dist/unstable/socket/Socket.js +3 -2
  394. package/dist/unstable/socket/Socket.js.map +1 -1
  395. package/dist/unstable/socket/SocketServer.d.ts +3 -3
  396. package/dist/unstable/sql/Migrator.d.ts +1 -1
  397. package/dist/unstable/sql/SqlError.d.ts +2 -2
  398. package/dist/unstable/sql/SqlModel.d.ts +2 -2
  399. package/dist/unstable/sql/SqlModel.d.ts.map +1 -1
  400. package/dist/unstable/sql/SqlSchema.d.ts +24 -1
  401. package/dist/unstable/sql/SqlSchema.d.ts.map +1 -1
  402. package/dist/unstable/sql/SqlSchema.js +24 -3
  403. package/dist/unstable/sql/SqlSchema.js.map +1 -1
  404. package/dist/unstable/sql/Statement.js +0 -1
  405. package/dist/unstable/sql/Statement.js.map +1 -1
  406. package/dist/unstable/workers/Worker.d.ts.map +1 -1
  407. package/dist/unstable/workers/Worker.js +2 -1
  408. package/dist/unstable/workers/Worker.js.map +1 -1
  409. package/dist/unstable/workflow/DurableClock.d.ts +3 -3
  410. package/dist/unstable/workflow/DurableClock.d.ts.map +1 -1
  411. package/dist/unstable/workflow/DurableClock.js +3 -3
  412. package/dist/unstable/workflow/DurableClock.js.map +1 -1
  413. package/dist/unstable/workflow/DurableDeferred.js +2 -2
  414. package/dist/unstable/workflow/DurableDeferred.js.map +1 -1
  415. package/dist/unstable/workflow/Workflow.d.ts +2 -2
  416. package/dist/unstable/workflow/WorkflowEngine.d.ts +2 -1
  417. package/dist/unstable/workflow/WorkflowEngine.d.ts.map +1 -1
  418. package/dist/unstable/workflow/WorkflowEngine.js +2 -1
  419. package/dist/unstable/workflow/WorkflowEngine.js.map +1 -1
  420. package/package.json +2 -2
  421. package/src/Cache.ts +3 -3
  422. package/src/Cause.ts +1 -1
  423. package/src/Channel.ts +6 -4
  424. package/src/Combiner.ts +280 -13
  425. package/src/Config.ts +3 -3
  426. package/src/Data.ts +538 -374
  427. package/src/DateTime.ts +24 -164
  428. package/src/Duration.ts +15 -15
  429. package/src/Effect.ts +202 -261
  430. package/src/Encoding.ts +879 -0
  431. package/src/Equal.ts +278 -111
  432. package/src/FileSystem.ts +7 -8
  433. package/src/Filter.ts +48 -1
  434. package/src/Formatter.ts +253 -51
  435. package/src/Graph.ts +8 -5
  436. package/src/JsonSchema.ts +383 -10
  437. package/src/Latch.ts +112 -0
  438. package/src/LayerMap.ts +5 -5
  439. package/src/LogLevel.ts +31 -0
  440. package/src/Logger.ts +5 -5
  441. package/src/Metric.ts +4 -4
  442. package/src/Optic.ts +948 -19
  443. package/src/Pipeable.ts +32 -1
  444. package/src/PlatformError.ts +5 -5
  445. package/src/Pool.ts +13 -11
  446. package/src/PubSub.ts +10 -9
  447. package/src/Random.ts +33 -14
  448. package/src/RcMap.ts +5 -5
  449. package/src/RcRef.ts +1 -1
  450. package/src/Reducer.ts +166 -7
  451. package/src/Request.ts +3 -2
  452. package/src/RequestResolver.ts +9 -29
  453. package/src/Result.ts +13 -0
  454. package/src/Schedule.ts +279 -140
  455. package/src/Schema.ts +575 -113
  456. package/src/SchemaGetter.ts +12 -14
  457. package/src/SchemaRepresentation.ts +43 -24
  458. package/src/SchemaTransformation.ts +104 -0
  459. package/src/ScopedCache.ts +3 -3
  460. package/src/Semaphore.ts +356 -0
  461. package/src/Stream.ts +43 -42
  462. package/src/Struct.ts +26 -0
  463. package/src/SubscriptionRef.ts +3 -2
  464. package/src/SynchronizedRef.ts +3 -2
  465. package/src/Types.ts +12 -2
  466. package/src/index.ts +502 -20
  467. package/src/internal/core.ts +12 -5
  468. package/src/internal/dateTime.ts +9 -30
  469. package/src/internal/effect.ts +70 -37
  470. package/src/internal/random.ts +20 -0
  471. package/src/internal/rcRef.ts +4 -3
  472. package/src/testing/TestClock.ts +13 -11
  473. package/src/testing/TestSchema.ts +8 -8
  474. package/src/unstable/ai/AiError.ts +2 -2
  475. package/src/unstable/ai/Chat.ts +12 -11
  476. package/src/unstable/ai/LanguageModel.ts +3 -3
  477. package/src/unstable/ai/McpServer.ts +2 -2
  478. package/src/unstable/ai/Prompt.ts +37 -37
  479. package/src/unstable/ai/Response.ts +25 -25
  480. package/src/unstable/cli/Prompt.ts +2 -2
  481. package/src/unstable/cluster/ClusterCron.ts +2 -2
  482. package/src/unstable/cluster/ClusterWorkflowEngine.ts +3 -2
  483. package/src/unstable/cluster/Entity.ts +7 -6
  484. package/src/unstable/cluster/EntityResource.ts +4 -4
  485. package/src/unstable/cluster/Envelope.ts +1 -1
  486. package/src/unstable/cluster/K8sHttpClient.ts +1 -1
  487. package/src/unstable/cluster/MessageStorage.ts +3 -5
  488. package/src/unstable/cluster/Runners.ts +6 -5
  489. package/src/unstable/cluster/Sharding.ts +11 -9
  490. package/src/unstable/cluster/ShardingConfig.ts +10 -11
  491. package/src/unstable/cluster/SqlRunnerStorage.ts +1 -1
  492. package/src/unstable/cluster/internal/entityManager.ts +9 -8
  493. package/src/unstable/cluster/internal/entityReaper.ts +2 -1
  494. package/src/unstable/cluster/internal/resourceRef.ts +2 -1
  495. package/src/unstable/encoding/Sse.ts +2 -4
  496. package/src/unstable/eventlog/EventLog.ts +2 -1
  497. package/src/unstable/http/Cookies.ts +3 -3
  498. package/src/unstable/http/HttpBody.ts +42 -1
  499. package/src/unstable/http/HttpClient.ts +19 -19
  500. package/src/unstable/http/HttpClientRequest.ts +38 -13
  501. package/src/unstable/http/HttpEffect.ts +17 -25
  502. package/src/unstable/http/HttpMethod.ts +16 -4
  503. package/src/unstable/http/HttpMiddleware.ts +5 -10
  504. package/src/unstable/http/HttpServerResponse.ts +1 -1
  505. package/src/unstable/http/Multipart.ts +2 -2
  506. package/src/unstable/http/UrlParams.ts +20 -5
  507. package/src/unstable/httpapi/HttpApiBuilder.ts +5 -5
  508. package/src/unstable/httpapi/HttpApiClient.ts +3 -3
  509. package/src/unstable/httpapi/HttpApiEndpoint.ts +47 -72
  510. package/src/unstable/httpapi/HttpApiScalar.ts +6 -0
  511. package/src/unstable/httpapi/OpenApi.ts +18 -16
  512. package/src/unstable/observability/Otlp.ts +12 -12
  513. package/src/unstable/observability/OtlpExporter.ts +3 -3
  514. package/src/unstable/observability/OtlpLogger.ts +4 -4
  515. package/src/unstable/observability/OtlpMetrics.ts +4 -4
  516. package/src/unstable/observability/OtlpTracer.ts +4 -4
  517. package/src/unstable/persistence/KeyValueStore.ts +6 -6
  518. package/src/unstable/persistence/Persistable.ts +2 -2
  519. package/src/unstable/persistence/PersistedCache.ts +20 -9
  520. package/src/unstable/persistence/PersistedQueue.ts +25 -24
  521. package/src/unstable/persistence/Persistence.ts +3 -3
  522. package/src/unstable/persistence/RateLimiter.ts +4 -4
  523. package/src/unstable/process/ChildProcess.ts +2 -2
  524. package/src/unstable/process/ChildProcessSpawner.ts +6 -0
  525. package/src/unstable/reactivity/Atom.ts +20 -18
  526. package/src/unstable/reactivity/AtomHttpApi.ts +19 -18
  527. package/src/unstable/reactivity/AtomRpc.ts +3 -3
  528. package/src/unstable/reactivity/Hydration.ts +112 -0
  529. package/src/unstable/reactivity/index.ts +5 -0
  530. package/src/unstable/rpc/Rpc.ts +3 -3
  531. package/src/unstable/rpc/RpcClient.ts +12 -54
  532. package/src/unstable/rpc/RpcServer.ts +6 -4
  533. package/src/unstable/rpc/Utils.ts +2 -1
  534. package/src/unstable/schema/VariantSchema.ts +36 -7
  535. package/src/unstable/socket/Socket.ts +7 -6
  536. package/src/unstable/sql/SqlModel.ts +2 -2
  537. package/src/unstable/sql/SqlSchema.ts +62 -13
  538. package/src/unstable/sql/Statement.ts +0 -1
  539. package/src/unstable/workers/Worker.ts +2 -1
  540. package/src/unstable/workflow/DurableClock.ts +8 -8
  541. package/src/unstable/workflow/DurableDeferred.ts +2 -2
  542. package/src/unstable/workflow/WorkflowEngine.ts +3 -2
  543. package/dist/PartitionedSemaphore.d.ts +0 -52
  544. package/dist/PartitionedSemaphore.d.ts.map +0 -1
  545. package/dist/PartitionedSemaphore.js.map +0 -1
  546. package/dist/encoding/Base64.d.ts +0 -67
  547. package/dist/encoding/Base64.d.ts.map +0 -1
  548. package/dist/encoding/Base64.js +0 -146
  549. package/dist/encoding/Base64.js.map +0 -1
  550. package/dist/encoding/Base64Url.d.ts +0 -60
  551. package/dist/encoding/Base64Url.d.ts.map +0 -1
  552. package/dist/encoding/Base64Url.js +0 -89
  553. package/dist/encoding/Base64Url.js.map +0 -1
  554. package/dist/encoding/EncodingError.d.ts +0 -31
  555. package/dist/encoding/EncodingError.d.ts.map +0 -1
  556. package/dist/encoding/EncodingError.js +0 -22
  557. package/dist/encoding/EncodingError.js.map +0 -1
  558. package/dist/encoding/Hex.d.ts +0 -61
  559. package/dist/encoding/Hex.d.ts.map +0 -1
  560. package/dist/encoding/Hex.js +0 -115
  561. package/dist/encoding/Hex.js.map +0 -1
  562. package/dist/encoding/index.d.ts +0 -26
  563. package/dist/encoding/index.d.ts.map +0 -1
  564. package/dist/encoding/index.js +0 -27
  565. package/dist/encoding/index.js.map +0 -1
  566. package/src/PartitionedSemaphore.ts +0 -182
  567. package/src/encoding/Base64.ts +0 -366
  568. package/src/encoding/Base64Url.ts +0 -104
  569. package/src/encoding/EncodingError.ts +0 -35
  570. package/src/encoding/Hex.ts +0 -390
  571. package/src/encoding/index.ts +0 -31
package/src/Pipeable.ts CHANGED
@@ -554,8 +554,39 @@ export const pipeArguments = <A>(self: A, args: IArguments): unknown => {
554
554
  /**
555
555
  * @since 4.0.0
556
556
  */
557
- export const Class: new() => Pipeable = class {
557
+ export const Prototype: Pipeable = {
558
558
  pipe() {
559
559
  return pipeArguments(this, arguments)
560
560
  }
561
561
  }
562
+
563
+ /**
564
+ * @since 4.0.0
565
+ * @category constructors
566
+ */
567
+ export const Class: new() => Pipeable = (function() {
568
+ function PipeableBase() {}
569
+ PipeableBase.prototype = Prototype
570
+ return PipeableBase as any
571
+ })()
572
+
573
+ /**
574
+ * @since 4.0.0
575
+ * @category models
576
+ */
577
+ export interface PipeableConstructor {
578
+ new(...args: ReadonlyArray<any>): Pipeable
579
+ }
580
+
581
+ /**
582
+ * @since 4.0.0
583
+ * @category constructors
584
+ */
585
+ export const Mixin = <TBase extends new(...args: ReadonlyArray<any>) => any>(
586
+ klass: TBase
587
+ ): TBase & PipeableConstructor =>
588
+ (class extends klass {
589
+ pipe() {
590
+ return pipeArguments(this, arguments)
591
+ }
592
+ })
@@ -27,7 +27,7 @@ export class BadArgument extends Data.TaggedError("BadArgument")<{
27
27
  * @since 4.0.0
28
28
  * @category Model
29
29
  */
30
- export type SystemErrorKind =
30
+ export type SystemErrorTag =
31
31
  | "AlreadyExists"
32
32
  | "BadResource"
33
33
  | "Busy"
@@ -44,8 +44,8 @@ export type SystemErrorKind =
44
44
  * @since 4.0.0
45
45
  * @category models
46
46
  */
47
- export class SystemError extends Data.TaggedError("SystemError")<{
48
- kind: SystemErrorKind
47
+ export class SystemError extends Data.Error<{
48
+ _tag: SystemErrorTag
49
49
  module: string
50
50
  method: string
51
51
  description?: string | undefined
@@ -57,7 +57,7 @@ export class SystemError extends Data.TaggedError("SystemError")<{
57
57
  * @since 4.0.0
58
58
  */
59
59
  override get message(): string {
60
- return `${this.kind}: ${this.module}.${this.method}${
60
+ return `${this._tag}: ${this.module}.${this.method}${
61
61
  this.pathOrDescriptor !== undefined ? ` (${this.pathOrDescriptor})` : ""
62
62
  }${this.description ? `: ${this.description}` : ""}`
63
63
  }
@@ -93,7 +93,7 @@ export class PlatformError extends Data.TaggedError("PlatformError")<{
93
93
  * @category constructors
94
94
  */
95
95
  export const systemError = (options: {
96
- readonly kind: SystemErrorKind
96
+ readonly _tag: SystemErrorTag
97
97
  readonly module: string
98
98
  readonly method: string
99
99
  readonly description?: string | undefined
package/src/Pool.ts CHANGED
@@ -9,11 +9,13 @@ import type * as Exit from "./Exit.ts"
9
9
  import * as Fiber from "./Fiber.ts"
10
10
  import { dual, identity } from "./Function.ts"
11
11
  import * as Iterable from "./Iterable.ts"
12
+ import * as Latch from "./Latch.ts"
12
13
  import { type Pipeable, pipeArguments } from "./Pipeable.ts"
13
14
  import { hasProperty } from "./Predicate.ts"
14
15
  import * as Queue from "./Queue.ts"
15
16
  import { UnhandledLogLevel } from "./References.ts"
16
17
  import * as Scope from "./Scope.ts"
18
+ import * as Semaphore from "./Semaphore.ts"
17
19
  import * as ServiceMap from "./ServiceMap.ts"
18
20
 
19
21
  const TypeId = "~effect/Pool"
@@ -52,11 +54,11 @@ export interface Config<A, E> {
52
54
  export interface State<A, E> {
53
55
  readonly scope: Scope.Scope
54
56
  isShuttingDown: boolean
55
- readonly semaphore: Effect.Semaphore
56
- readonly resizeSemaphore: Effect.Semaphore
57
+ readonly semaphore: Semaphore.Semaphore
58
+ readonly resizeSemaphore: Semaphore.Semaphore
57
59
  readonly items: Set<PoolItem<A, E>>
58
60
  readonly available: Set<PoolItem<A, E>>
59
- readonly availableLatch: Effect.Latch
61
+ readonly availableLatch: Latch.Latch
60
62
  readonly invalidated: Set<PoolItem<A, E>>
61
63
  waiters: number
62
64
  }
@@ -170,7 +172,7 @@ export const makeWithTTL = <A, E, R>(options: {
170
172
  readonly max: number
171
173
  readonly concurrency?: number | undefined
172
174
  readonly targetUtilization?: number | undefined
173
- readonly timeToLive: Duration.DurationInput
175
+ readonly timeToLive: Duration.Input
174
176
  readonly timeToLiveStrategy?: "creation" | "usage" | undefined
175
177
  }): Effect.Effect<Pool<A, E>, never, R | Scope.Scope> =>
176
178
  Effect.flatMap(
@@ -212,11 +214,11 @@ export const makeWithStrategy = <A, E, R>(options: {
212
214
  const state: State<A, E> = {
213
215
  scope,
214
216
  isShuttingDown: false,
215
- semaphore: Effect.makeSemaphoreUnsafe(concurrency * options.max),
216
- resizeSemaphore: Effect.makeSemaphoreUnsafe(1),
217
+ semaphore: Semaphore.makeUnsafe(concurrency * options.max),
218
+ resizeSemaphore: Semaphore.makeUnsafe(1),
217
219
  items: new Set(),
218
220
  available: new Set(),
219
- availableLatch: Effect.makeLatchUnsafe(false),
221
+ availableLatch: Latch.makeUnsafe(false),
220
222
  invalidated: new Set(),
221
223
  waiters: 0
222
224
  }
@@ -244,7 +246,7 @@ const shutdown = Effect.fnUntraced(function*<A, E>(self: Pool<A, E>) {
244
246
  if (self.state.isShuttingDown) return
245
247
  self.state.isShuttingDown = true
246
248
  const size = self.state.items.size
247
- const semaphore = Effect.makeSemaphoreUnsafe(size)
249
+ const semaphore = Semaphore.makeUnsafe(size)
248
250
  for (const item of self.state.items) {
249
251
  if (item.refCount > 0) {
250
252
  item.finalizer = Effect.tap(item.finalizer, semaphore.release(1))
@@ -471,10 +473,10 @@ const strategyNoop = <A, E>(): Strategy<A, E> => ({
471
473
  reclaim: (_) => Effect.undefined
472
474
  })
473
475
 
474
- const strategyCreationTTL = Effect.fnUntraced(function*<A, E>(ttl: Duration.DurationInput) {
476
+ const strategyCreationTTL = Effect.fnUntraced(function*<A, E>(ttl: Duration.Input) {
475
477
  const clock = yield* Clock
476
478
  const queue = yield* Queue.unbounded<PoolItem<A, E>>()
477
- const ttlMillis = Duration.toMillis(Duration.fromDurationInputUnsafe(ttl))
479
+ const ttlMillis = Duration.toMillis(Duration.fromInputUnsafe(ttl))
478
480
  const creationTimes = new WeakMap<PoolItem<A, E>, number>()
479
481
  return identity<Strategy<A, E>>({
480
482
  run: (pool) => {
@@ -504,7 +506,7 @@ const strategyCreationTTL = Effect.fnUntraced(function*<A, E>(ttl: Duration.Dura
504
506
  })
505
507
  })
506
508
 
507
- const strategyUsageTTL = Effect.fnUntraced(function*<A, E>(ttl: Duration.DurationInput) {
509
+ const strategyUsageTTL = Effect.fnUntraced(function*<A, E>(ttl: Duration.Input) {
508
510
  const queue = yield* Queue.unbounded<PoolItem<A, E>>()
509
511
  return identity<Strategy<A, E>>({
510
512
  run: (pool) => {
package/src/PubSub.ts CHANGED
@@ -34,6 +34,7 @@ import * as Effect from "./Effect.ts"
34
34
  import * as Exit from "./Exit.ts"
35
35
  import type { LazyArg } from "./Function.ts"
36
36
  import { dual, identity } from "./Function.ts"
37
+ import * as Latch from "./Latch.ts"
37
38
  import * as MutableList from "./MutableList.ts"
38
39
  import * as MutableRef from "./MutableRef.ts"
39
40
  import { nextPow2 } from "./Number.ts"
@@ -81,7 +82,7 @@ export interface PubSub<in out A> extends Pipeable {
81
82
  readonly pubsub: PubSub.Atomic<A>
82
83
  readonly subscribers: PubSub.Subscribers<A>
83
84
  readonly scope: Scope.Closeable
84
- readonly shutdownHook: Effect.Latch
85
+ readonly shutdownHook: Latch.Latch
85
86
  readonly shutdownFlag: MutableRef.MutableRef<boolean>
86
87
  readonly strategy: PubSub.Strategy<A>
87
88
  }
@@ -242,7 +243,7 @@ export interface Subscription<out A> extends Pipeable {
242
243
  readonly subscribers: PubSub.Subscribers<any>
243
244
  readonly subscription: PubSub.BackingSubscription<A>
244
245
  readonly pollers: MutableList.MutableList<Deferred.Deferred<any>>
245
- readonly shutdownHook: Effect.Latch
246
+ readonly shutdownHook: Latch.Latch
246
247
  readonly shutdownFlag: MutableRef.MutableRef<boolean>
247
248
  readonly strategy: PubSub.Strategy<any>
248
249
  readonly replayWindow: PubSub.ReplayWindow<A>
@@ -282,7 +283,7 @@ export const make = <A>(
282
283
  options.atomicPubSub(),
283
284
  new Map(),
284
285
  Scope.makeUnsafe(),
285
- Effect.makeLatchUnsafe(false),
286
+ Latch.makeUnsafe(false),
286
287
  MutableRef.make(false),
287
288
  options.strategy()
288
289
  )
@@ -1701,7 +1702,7 @@ const makeSubscriptionUnsafe = <A>(
1701
1702
  subscribers,
1702
1703
  pubsub.subscribe(),
1703
1704
  MutableList.make<Deferred.Deferred<A>>(),
1704
- Effect.makeLatchUnsafe(false),
1705
+ Latch.makeUnsafe(false),
1705
1706
  MutableRef.make(false),
1706
1707
  strategy,
1707
1708
  pubsub.replayWindow()
@@ -2446,7 +2447,7 @@ class SubscriptionImpl<in out A> implements Subscription<A> {
2446
2447
  readonly subscribers: PubSub.Subscribers<A>
2447
2448
  readonly subscription: PubSub.BackingSubscription<A>
2448
2449
  readonly pollers: MutableList.MutableList<Deferred.Deferred<A>>
2449
- readonly shutdownHook: Effect.Latch
2450
+ readonly shutdownHook: Latch.Latch
2450
2451
  readonly shutdownFlag: MutableRef.MutableRef<boolean>
2451
2452
  readonly strategy: PubSub.Strategy<A>
2452
2453
  readonly replayWindow: PubSub.ReplayWindow<A>
@@ -2456,7 +2457,7 @@ class SubscriptionImpl<in out A> implements Subscription<A> {
2456
2457
  subscribers: PubSub.Subscribers<A>,
2457
2458
  subscription: PubSub.BackingSubscription<A>,
2458
2459
  pollers: MutableList.MutableList<Deferred.Deferred<A>>,
2459
- shutdownHook: Effect.Latch,
2460
+ shutdownHook: Latch.Latch,
2460
2461
  shutdownFlag: MutableRef.MutableRef<boolean>,
2461
2462
  strategy: PubSub.Strategy<A>,
2462
2463
  replayWindow: PubSub.ReplayWindow<A>
@@ -2484,7 +2485,7 @@ class PubSubImpl<in out A> implements PubSub<A> {
2484
2485
  readonly pubsub: PubSub.Atomic<A>
2485
2486
  readonly subscribers: PubSub.Subscribers<A>
2486
2487
  readonly scope: Scope.Closeable
2487
- readonly shutdownHook: Effect.Latch
2488
+ readonly shutdownHook: Latch.Latch
2488
2489
  readonly shutdownFlag: MutableRef.MutableRef<boolean>
2489
2490
  readonly strategy: PubSub.Strategy<A>
2490
2491
 
@@ -2492,7 +2493,7 @@ class PubSubImpl<in out A> implements PubSub<A> {
2492
2493
  pubsub: PubSub.Atomic<A>,
2493
2494
  subscribers: PubSub.Subscribers<A>,
2494
2495
  scope: Scope.Closeable,
2495
- shutdownHook: Effect.Latch,
2496
+ shutdownHook: Latch.Latch,
2496
2497
  shutdownFlag: MutableRef.MutableRef<boolean>,
2497
2498
  strategy: PubSub.Strategy<A>
2498
2499
  ) {
@@ -2513,7 +2514,7 @@ const makePubSubUnsafe = <A>(
2513
2514
  pubsub: PubSub.Atomic<A>,
2514
2515
  subscribers: PubSub.Subscribers<A>,
2515
2516
  scope: Scope.Closeable,
2516
- shutdownHook: Effect.Latch,
2517
+ shutdownHook: Latch.Latch,
2517
2518
  shutdownFlag: MutableRef.MutableRef<boolean>,
2518
2519
  strategy: PubSub.Strategy<A>
2519
2520
  ): PubSub<A> => new PubSubImpl(pubsub, subscribers, scope, shutdownHook, shutdownFlag, strategy)
package/src/Random.ts CHANGED
@@ -23,8 +23,9 @@
23
23
  */
24
24
  import * as Effect from "./Effect.ts"
25
25
  import { dual } from "./Function.ts"
26
+ import * as random from "./internal/random.ts"
26
27
  import * as Predicate from "./Predicate.ts"
27
- import * as ServiceMap from "./ServiceMap.ts"
28
+ import type * as ServiceMap from "./ServiceMap.ts"
28
29
 
29
30
  /**
30
31
  * Represents a service for generating random numbers.
@@ -49,23 +50,13 @@ import * as ServiceMap from "./ServiceMap.ts"
49
50
  * @since 4.0.0
50
51
  * @category Random Number Generators
51
52
  */
52
- export const Random = ServiceMap.Reference<{
53
+ export const Random: ServiceMap.Reference<{
53
54
  nextIntUnsafe(): number
54
55
  nextDoubleUnsafe(): number
55
- }>("effect/Random", {
56
- defaultValue: () => ({
57
- nextIntUnsafe() {
58
- return Math.floor(Math.random() * (Number.MAX_SAFE_INTEGER - Number.MIN_SAFE_INTEGER + 1)) +
59
- Number.MIN_SAFE_INTEGER
60
- },
61
- nextDoubleUnsafe() {
62
- return Math.random()
63
- }
64
- })
65
- })
56
+ }> = random.Random
66
57
 
67
58
  const randomWith = <A>(f: (random: typeof Random["Service"]) => A): Effect.Effect<A> =>
68
- Effect.withFiber((fiber) => Effect.succeed(f(ServiceMap.get(fiber.services, Random))))
59
+ Effect.withFiber((fiber) => Effect.succeed(f(fiber.getRef(Random))))
69
60
 
70
61
  /**
71
62
  * Generates a random number between 0 (inclusive) and 1 (inclusive).
@@ -156,6 +147,34 @@ export const nextIntBetween = (min: number, max: number, options?: {
156
147
  })
157
148
  }
158
149
 
150
+ /**
151
+ * Uses the pseudo-random number generator to shuffle the specified iterable.
152
+ *
153
+ * @example
154
+ * ```ts
155
+ * import { Effect, Random } from "effect"
156
+ *
157
+ * const program = Effect.gen(function*() {
158
+ * const values = yield* Random.shuffle([1, 2, 3, 4, 5])
159
+ * console.log(values)
160
+ * })
161
+ * ```
162
+ *
163
+ * @since 4.0.0
164
+ * @category Random Number Generators
165
+ */
166
+ export const shuffle = <A>(elements: Iterable<A>): Effect.Effect<Array<A>> =>
167
+ randomWith((r) => {
168
+ const buffer = Array.from(elements)
169
+ for (let i = buffer.length - 1; i >= 1; i = i - 1) {
170
+ const index = Math.min(i, Math.floor(r.nextDoubleUnsafe() * (i + 1)))
171
+ const value = buffer[i]!
172
+ buffer[i] = buffer[index]!
173
+ buffer[index] = value
174
+ }
175
+ return buffer
176
+ })
177
+
159
178
  /**
160
179
  * Generates a random UUID (v4) string.
161
180
  *
package/src/RcMap.ts CHANGED
@@ -292,7 +292,7 @@ export const make: {
292
292
  <K, A, E, R>(
293
293
  options: {
294
294
  readonly lookup: (key: K) => Effect.Effect<A, E, R>
295
- readonly idleTimeToLive?: Duration.DurationInput | ((key: K) => Duration.DurationInput) | undefined
295
+ readonly idleTimeToLive?: Duration.Input | ((key: K) => Duration.Input) | undefined
296
296
  readonly capacity?: undefined
297
297
  }
298
298
  ): Effect.Effect<RcMap<K, A, E>, never, Scope.Scope | R>
@@ -335,13 +335,13 @@ export const make: {
335
335
  <K, A, E, R>(
336
336
  options: {
337
337
  readonly lookup: (key: K) => Effect.Effect<A, E, R>
338
- readonly idleTimeToLive?: Duration.DurationInput | ((key: K) => Duration.DurationInput) | undefined
338
+ readonly idleTimeToLive?: Duration.Input | ((key: K) => Duration.Input) | undefined
339
339
  readonly capacity: number
340
340
  }
341
341
  ): Effect.Effect<RcMap<K, A, E | Cause.ExceededCapacityError>, never, Scope.Scope | R>
342
342
  } = <K, A, E, R>(options: {
343
343
  readonly lookup: (key: K) => Effect.Effect<A, E, R>
344
- readonly idleTimeToLive?: Duration.DurationInput | ((key: K) => Duration.DurationInput) | undefined
344
+ readonly idleTimeToLive?: Duration.Input | ((key: K) => Duration.Input) | undefined
345
345
  readonly capacity?: number | undefined
346
346
  }) =>
347
347
  Effect.withFiber<RcMap<K, A, E>, never, R | Scope.Scope>((fiber) => {
@@ -352,8 +352,8 @@ export const make: {
352
352
  services,
353
353
  scope,
354
354
  idleTimeToLive: typeof options.idleTimeToLive === "function"
355
- ? flow(options.idleTimeToLive, Duration.fromDurationInputUnsafe)
356
- : constant(Duration.fromDurationInputUnsafe(options.idleTimeToLive ?? Duration.zero)),
355
+ ? flow(options.idleTimeToLive, Duration.fromInputUnsafe)
356
+ : constant(Duration.fromInputUnsafe(options.idleTimeToLive ?? Duration.zero)),
357
357
  capacity: Math.max(options.capacity ?? Number.POSITIVE_INFINITY, 0)
358
358
  })
359
359
  return Effect.as(
package/src/RcRef.ts CHANGED
@@ -120,7 +120,7 @@ export const make: <A, E, R>(
120
120
  * When the reference count reaches zero, the resource will be released
121
121
  * after this duration.
122
122
  */
123
- readonly idleTimeToLive?: Duration.DurationInput | undefined
123
+ readonly idleTimeToLive?: Duration.Input | undefined
124
124
  }
125
125
  ) => Effect.Effect<RcRef<A, E>, never, R | Scope> = internal.make
126
126
 
package/src/Reducer.ts CHANGED
@@ -1,17 +1,107 @@
1
1
  /**
2
+ * A module for reducing collections of values into a single result.
3
+ *
4
+ * A `Reducer<A>` extends {@link Combiner.Combiner} by adding an
5
+ * `initialValue` (identity element) and a `combineAll` method that folds an
6
+ * entire collection. Think `Array.prototype.reduce`, but packaged as a
7
+ * reusable, composable value.
8
+ *
9
+ * ## Mental model
10
+ *
11
+ * - **Reducer** – a {@link Combiner.Combiner} plus an `initialValue` and a
12
+ * `combineAll` method.
13
+ * - **initialValue** – the neutral/identity element. Combining any value with
14
+ * `initialValue` should return the original value unchanged (e.g. `0` for
15
+ * addition, `""` for string concatenation).
16
+ * - **combineAll** – folds an `Iterable<A>` starting from `initialValue`.
17
+ * When omitted from {@link make}, a default left-to-right fold is used.
18
+ * - **Purity** – all reducers produced by this module are pure; they never
19
+ * mutate their arguments.
20
+ * - **Composability** – reducers can be lifted into `Option`, `Struct`,
21
+ * `Tuple`, `Record`, and other container types via helpers in those modules.
22
+ * - **Subtype of Combiner** – every `Reducer` is also a valid
23
+ * `Combiner`, so you can pass a `Reducer` anywhere a `Combiner` is
24
+ * expected.
25
+ *
26
+ * ## Common tasks
27
+ *
28
+ * - Create a reducer from a combine function and initial value → {@link make}
29
+ * - Swap argument order → {@link flip}
30
+ * - Combine two values without an initial value → use {@link Combiner.Combiner}
31
+ * instead
32
+ *
33
+ * ## Gotchas
34
+ *
35
+ * - `combineAll` on an empty iterable returns `initialValue`, not an error.
36
+ * - The default `combineAll` folds left-to-right. If your `combine` is not
37
+ * associative, order matters. Pass a custom `combineAll` to {@link make} if
38
+ * you need different traversal or short-circuiting.
39
+ * - A `Reducer` is also a valid `Combiner` — but a `Combiner` is *not* a
40
+ * `Reducer` (it lacks `initialValue`).
41
+ *
42
+ * ## Quickstart
43
+ *
44
+ * **Example** (summing a list of numbers)
45
+ *
46
+ * ```ts
47
+ * import { Reducer } from "effect"
48
+ *
49
+ * const Sum = Reducer.make<number>((a, b) => a + b, 0)
50
+ *
51
+ * console.log(Sum.combine(3, 4))
52
+ * // Output: 7
53
+ *
54
+ * console.log(Sum.combineAll([1, 2, 3, 4]))
55
+ * // Output: 10
56
+ *
57
+ * console.log(Sum.combineAll([]))
58
+ * // Output: 0
59
+ * ```
60
+ *
61
+ * ## See also
62
+ *
63
+ * - {@link make} – the primary constructor
64
+ * - {@link Reducer} – the core interface
65
+ * - {@link Combiner.Combiner} – the parent interface (no `initialValue`)
66
+ *
2
67
  * @since 4.0.0
3
68
  */
4
69
 
5
70
  import type * as Combiner from "./Combiner.ts"
6
71
 
7
72
  /**
8
- * A `Reducer` is a `Combiner` with an `initialValue` and a way to
9
- * combine a whole collection. Think `Array.prototype.reduce`, but reusable.
73
+ * Represents a strategy for reducing a collection of values of type `A` into
74
+ * a single result.
75
+ *
76
+ * Extends {@link Combiner.Combiner} with:
77
+ * - `initialValue` – the identity/neutral element for `combine`.
78
+ * - `combineAll` – folds an entire `Iterable<A>` from `initialValue`.
79
+ *
80
+ * When to use:
81
+ * - You need to fold/reduce a collection into a single value.
82
+ * - You want a reusable reducing strategy that can be passed to library
83
+ * functions like `Struct.makeReducer`, `Option.makeReducer`, or
84
+ * `Record.makeReducerUnion`.
85
+ * - You need both the combining logic *and* a known starting value.
86
+ *
87
+ * Many modules ship pre-built reducers:
88
+ * - `Number.ReducerSum`, `Number.ReducerMultiply`
89
+ * - `String.ReducerConcat`
90
+ * - `Boolean.ReducerAnd`, `Boolean.ReducerOr`
10
91
  *
11
- * Common initial values:
12
- * - numbers with addition: `0`
13
- * - strings with concatenation: `""`
14
- * - arrays with concatenation: `[]`
92
+ * **Example** (string concatenation reducer)
93
+ *
94
+ * ```ts
95
+ * import { Reducer } from "effect"
96
+ *
97
+ * const Concat = Reducer.make<string>((a, b) => a + b, "")
98
+ *
99
+ * console.log(Concat.combineAll(["hello", " ", "world"]))
100
+ * // Output: "hello world"
101
+ * ```
102
+ *
103
+ * @see {@link make} – create a `Reducer` from a function and initial value
104
+ * @see {@link Combiner.Combiner} – parent interface without `initialValue`
15
105
  *
16
106
  * @category model
17
107
  * @since 4.0.0
@@ -27,7 +117,44 @@ export interface Reducer<A> extends Combiner.Combiner<A> {
27
117
  /**
28
118
  * Creates a `Reducer` from a `combine` function and an `initialValue`.
29
119
  *
30
- * If `combineAll` is omitted, a default implementation reduces left-to-right.
120
+ * When to use:
121
+ * - You have a custom reducing operation not covered by a pre-built reducer.
122
+ * - You want to provide an optimized `combineAll` (e.g. short-circuiting on
123
+ * a known absorbing element like `0` for multiplication).
124
+ *
125
+ * Behavior:
126
+ * - If `combineAll` is omitted, a default left-to-right fold starting from
127
+ * `initialValue` is used.
128
+ * - If `combineAll` is provided, it completely replaces the default fold.
129
+ * - Pure – the returned reducer does not mutate its arguments.
130
+ *
131
+ * **Example** (multiplication with short-circuit)
132
+ *
133
+ * ```ts
134
+ * import { Reducer } from "effect"
135
+ *
136
+ * const Product = Reducer.make<number>(
137
+ * (a, b) => a * b,
138
+ * 1,
139
+ * (collection) => {
140
+ * let acc = 1
141
+ * for (const n of collection) {
142
+ * if (n === 0) return 0
143
+ * acc *= n
144
+ * }
145
+ * return acc
146
+ * }
147
+ * )
148
+ *
149
+ * console.log(Product.combineAll([2, 3, 4]))
150
+ * // Output: 24
151
+ *
152
+ * console.log(Product.combineAll([2, 0, 4]))
153
+ * // Output: 0
154
+ * ```
155
+ *
156
+ * @see {@link Reducer} – the interface this creates
157
+ * @see {@link flip} – reverse the argument order
31
158
  *
32
159
  * @since 4.0.0
33
160
  */
@@ -51,6 +178,38 @@ export function make<A>(
51
178
  }
52
179
 
53
180
  /**
181
+ * Reverses the argument order of a reducer's `combine` method.
182
+ *
183
+ * When to use:
184
+ * - You need the "right" value to act as the accumulator side.
185
+ * - You want to reverse the natural direction of a non-commutative reducer
186
+ * (e.g. string concatenation becomes prepend).
187
+ *
188
+ * Behavior:
189
+ * - Returns a new `Reducer` where `combine(self, that)` calls the original
190
+ * reducer as `combine(that, self)`.
191
+ * - The `initialValue` is preserved from the original reducer.
192
+ * - The `combineAll` is re-derived from the flipped `combine` (using the
193
+ * default left-to-right fold), not carried over from the original.
194
+ * - Does not mutate the input reducer.
195
+ *
196
+ * **Example** (reversing string concatenation)
197
+ *
198
+ * ```ts
199
+ * import { Reducer, String } from "effect"
200
+ *
201
+ * const Prepend = Reducer.flip(String.ReducerConcat)
202
+ *
203
+ * console.log(Prepend.combine("a", "b"))
204
+ * // Output: "ba"
205
+ *
206
+ * console.log(Prepend.combineAll(["a", "b", "c"]))
207
+ * // Output: "cba"
208
+ * ```
209
+ *
210
+ * @see {@link make}
211
+ * @see {@link Combiner.flip} – the same operation on a plain `Combiner`
212
+ *
54
213
  * @since 4.0.0
55
214
  */
56
215
  export function flip<A>(reducer: Reducer<A>): Reducer<A> {
package/src/Request.ts CHANGED
@@ -88,7 +88,7 @@ export interface Variance<out A, out E, out R> {
88
88
  * @category models
89
89
  */
90
90
  export interface Constructor<R extends Request<any, any, any>, T extends keyof R = never> {
91
- (args: Omit<R, T | keyof (Variance<any, any, any>)>): R
91
+ (args: Types.VoidIfEmpty<Types.Simplify<Omit<R, T | keyof (Variance<any, any, any>)>>>): R
92
92
  }
93
93
 
94
94
  /**
@@ -285,7 +285,8 @@ export const tagged = <R extends Request<any, any, any> & { _tag: string }>(
285
285
  tag: R["_tag"]
286
286
  ): Constructor<R, "_tag"> =>
287
287
  (args) => {
288
- const request = Object.assign(Object.create(RequestPrototype), args)
288
+ const request = Object.create(RequestPrototype)
289
+ if (args) Object.assign(request, args)
289
290
  request._tag = tag
290
291
  return request
291
292
  }