effect 4.0.0-beta.5 → 4.0.0-beta.7

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 (482) 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/Config.d.ts +3 -3
  11. package/dist/Config.js +3 -3
  12. package/dist/Config.js.map +1 -1
  13. package/dist/Data.d.ts +3 -2
  14. package/dist/Data.d.ts.map +1 -1
  15. package/dist/Data.js +9 -8
  16. package/dist/Data.js.map +1 -1
  17. package/dist/DateTime.d.ts +23 -161
  18. package/dist/DateTime.d.ts.map +1 -1
  19. package/dist/DateTime.js +6 -51
  20. package/dist/DateTime.js.map +1 -1
  21. package/dist/Duration.d.ts +12 -12
  22. package/dist/Duration.d.ts.map +1 -1
  23. package/dist/Duration.js +12 -12
  24. package/dist/Duration.js.map +1 -1
  25. package/dist/Effect.d.ts +13 -239
  26. package/dist/Effect.d.ts.map +1 -1
  27. package/dist/Effect.js +1 -119
  28. package/dist/Effect.js.map +1 -1
  29. package/dist/Encoding.d.ts +194 -0
  30. package/dist/Encoding.d.ts.map +1 -0
  31. package/dist/Encoding.js +352 -0
  32. package/dist/Encoding.js.map +1 -0
  33. package/dist/Equal.js.map +1 -1
  34. package/dist/FileSystem.js +2 -2
  35. package/dist/FileSystem.js.map +1 -1
  36. package/dist/Formatter.d.ts +131 -47
  37. package/dist/Formatter.d.ts.map +1 -1
  38. package/dist/Formatter.js +229 -51
  39. package/dist/Formatter.js.map +1 -1
  40. package/dist/Graph.d.ts.map +1 -1
  41. package/dist/Graph.js +2 -2
  42. package/dist/Graph.js.map +1 -1
  43. package/dist/JsonSchema.d.ts +299 -10
  44. package/dist/JsonSchema.d.ts.map +1 -1
  45. package/dist/JsonSchema.js +323 -4
  46. package/dist/JsonSchema.js.map +1 -1
  47. package/dist/Latch.d.ts +109 -0
  48. package/dist/Latch.d.ts.map +1 -0
  49. package/dist/Latch.js +72 -0
  50. package/dist/Latch.js.map +1 -0
  51. package/dist/LayerMap.d.ts +4 -4
  52. package/dist/LayerMap.d.ts.map +1 -1
  53. package/dist/LogLevel.d.ts +27 -0
  54. package/dist/LogLevel.d.ts.map +1 -1
  55. package/dist/LogLevel.js +28 -100
  56. package/dist/LogLevel.js.map +1 -1
  57. package/dist/Logger.d.ts +4 -4
  58. package/dist/Logger.d.ts.map +1 -1
  59. package/dist/Metric.d.ts +2 -2
  60. package/dist/Metric.d.ts.map +1 -1
  61. package/dist/Metric.js +1 -1
  62. package/dist/Metric.js.map +1 -1
  63. package/dist/Pipeable.d.ts +17 -0
  64. package/dist/Pipeable.d.ts.map +1 -1
  65. package/dist/Pipeable.js +19 -1
  66. package/dist/Pipeable.js.map +1 -1
  67. package/dist/Pool.d.ts +6 -4
  68. package/dist/Pool.d.ts.map +1 -1
  69. package/dist/Pool.js +7 -5
  70. package/dist/Pool.js.map +1 -1
  71. package/dist/PubSub.d.ts +3 -2
  72. package/dist/PubSub.d.ts.map +1 -1
  73. package/dist/PubSub.js +3 -2
  74. package/dist/PubSub.js.map +1 -1
  75. package/dist/Random.d.ts +1 -1
  76. package/dist/Random.d.ts.map +1 -1
  77. package/dist/Random.js +3 -12
  78. package/dist/Random.js.map +1 -1
  79. package/dist/RcMap.d.ts +2 -2
  80. package/dist/RcMap.d.ts.map +1 -1
  81. package/dist/RcMap.js +1 -1
  82. package/dist/RcMap.js.map +1 -1
  83. package/dist/RcRef.d.ts +1 -1
  84. package/dist/RcRef.d.ts.map +1 -1
  85. package/dist/Request.d.ts +1 -1
  86. package/dist/Request.d.ts.map +1 -1
  87. package/dist/Request.js +2 -1
  88. package/dist/Request.js.map +1 -1
  89. package/dist/RequestResolver.d.ts +6 -26
  90. package/dist/RequestResolver.d.ts.map +1 -1
  91. package/dist/RequestResolver.js +0 -20
  92. package/dist/RequestResolver.js.map +1 -1
  93. package/dist/Schedule.d.ts +22 -13
  94. package/dist/Schedule.d.ts.map +1 -1
  95. package/dist/Schedule.js +53 -25
  96. package/dist/Schedule.js.map +1 -1
  97. package/dist/Schema.d.ts +196 -46
  98. package/dist/Schema.d.ts.map +1 -1
  99. package/dist/Schema.js +385 -71
  100. package/dist/Schema.js.map +1 -1
  101. package/dist/SchemaGetter.d.ts +2 -2
  102. package/dist/SchemaGetter.d.ts.map +1 -1
  103. package/dist/SchemaGetter.js +12 -14
  104. package/dist/SchemaGetter.js.map +1 -1
  105. package/dist/SchemaRepresentation.d.ts +44 -43
  106. package/dist/SchemaRepresentation.d.ts.map +1 -1
  107. package/dist/SchemaRepresentation.js +5 -2
  108. package/dist/SchemaRepresentation.js.map +1 -1
  109. package/dist/SchemaTransformation.d.ts +37 -0
  110. package/dist/SchemaTransformation.d.ts.map +1 -1
  111. package/dist/SchemaTransformation.js +80 -0
  112. package/dist/SchemaTransformation.js.map +1 -1
  113. package/dist/ScopedCache.d.ts +2 -2
  114. package/dist/ScopedCache.d.ts.map +1 -1
  115. package/dist/ScopedCache.js +1 -1
  116. package/dist/ScopedCache.js.map +1 -1
  117. package/dist/Semaphore.d.ts +211 -0
  118. package/dist/Semaphore.d.ts.map +1 -0
  119. package/dist/{PartitionedSemaphore.js → Semaphore.js} +97 -13
  120. package/dist/Semaphore.js.map +1 -0
  121. package/dist/Stream.d.ts +19 -19
  122. package/dist/Stream.d.ts.map +1 -1
  123. package/dist/Stream.js +12 -11
  124. package/dist/Stream.js.map +1 -1
  125. package/dist/Struct.d.ts +16 -0
  126. package/dist/Struct.d.ts.map +1 -1
  127. package/dist/Struct.js +22 -0
  128. package/dist/Struct.js.map +1 -1
  129. package/dist/SubscriptionRef.d.ts +2 -1
  130. package/dist/SubscriptionRef.d.ts.map +1 -1
  131. package/dist/SubscriptionRef.js +2 -1
  132. package/dist/SubscriptionRef.js.map +1 -1
  133. package/dist/SynchronizedRef.d.ts +2 -1
  134. package/dist/SynchronizedRef.d.ts.map +1 -1
  135. package/dist/SynchronizedRef.js +2 -1
  136. package/dist/SynchronizedRef.js.map +1 -1
  137. package/dist/Types.d.ts +8 -0
  138. package/dist/Types.d.ts.map +1 -1
  139. package/dist/index.d.ts +148 -5
  140. package/dist/index.d.ts.map +1 -1
  141. package/dist/index.js +148 -5
  142. package/dist/index.js.map +1 -1
  143. package/dist/internal/core.js +11 -3
  144. package/dist/internal/core.js.map +1 -1
  145. package/dist/internal/dateTime.js +3 -11
  146. package/dist/internal/dateTime.js.map +1 -1
  147. package/dist/internal/effect.js +2 -2
  148. package/dist/internal/effect.js.map +1 -1
  149. package/dist/internal/random.d.ts +2 -0
  150. package/dist/internal/random.d.ts.map +1 -0
  151. package/dist/internal/random.js +13 -0
  152. package/dist/internal/random.js.map +1 -0
  153. package/dist/internal/rcRef.js +3 -2
  154. package/dist/internal/rcRef.js.map +1 -1
  155. package/dist/testing/TestClock.d.ts +7 -6
  156. package/dist/testing/TestClock.d.ts.map +1 -1
  157. package/dist/testing/TestClock.js +6 -4
  158. package/dist/testing/TestClock.js.map +1 -1
  159. package/dist/testing/TestSchema.d.ts +6 -6
  160. package/dist/testing/TestSchema.d.ts.map +1 -1
  161. package/dist/unstable/ai/AiError.d.ts +48 -48
  162. package/dist/unstable/ai/AiError.d.ts.map +1 -1
  163. package/dist/unstable/ai/Chat.d.ts +3 -3
  164. package/dist/unstable/ai/Chat.d.ts.map +1 -1
  165. package/dist/unstable/ai/Chat.js +4 -3
  166. package/dist/unstable/ai/Chat.js.map +1 -1
  167. package/dist/unstable/ai/LanguageModel.d.ts +2 -2
  168. package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
  169. package/dist/unstable/ai/McpSchema.d.ts +51 -51
  170. package/dist/unstable/ai/McpServer.d.ts +1 -1
  171. package/dist/unstable/ai/McpServer.d.ts.map +1 -1
  172. package/dist/unstable/ai/McpServer.js.map +1 -1
  173. package/dist/unstable/ai/Prompt.d.ts +20 -20
  174. package/dist/unstable/ai/Prompt.d.ts.map +1 -1
  175. package/dist/unstable/ai/Response.d.ts +26 -26
  176. package/dist/unstable/ai/Response.d.ts.map +1 -1
  177. package/dist/unstable/ai/Response.js +1 -1
  178. package/dist/unstable/ai/Response.js.map +1 -1
  179. package/dist/unstable/cli/CliError.d.ts +5 -5
  180. package/dist/unstable/cluster/ClusterCron.d.ts +1 -1
  181. package/dist/unstable/cluster/ClusterCron.d.ts.map +1 -1
  182. package/dist/unstable/cluster/ClusterCron.js +1 -1
  183. package/dist/unstable/cluster/ClusterCron.js.map +1 -1
  184. package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  185. package/dist/unstable/cluster/ClusterWorkflowEngine.js +2 -1
  186. package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
  187. package/dist/unstable/cluster/Entity.d.ts +5 -4
  188. package/dist/unstable/cluster/Entity.d.ts.map +1 -1
  189. package/dist/unstable/cluster/Entity.js.map +1 -1
  190. package/dist/unstable/cluster/EntityResource.d.ts +2 -2
  191. package/dist/unstable/cluster/EntityResource.d.ts.map +1 -1
  192. package/dist/unstable/cluster/Envelope.d.ts +1 -1
  193. package/dist/unstable/cluster/K8sHttpClient.d.ts +1 -1
  194. package/dist/unstable/cluster/K8sHttpClient.js +1 -1
  195. package/dist/unstable/cluster/K8sHttpClient.js.map +1 -1
  196. package/dist/unstable/cluster/Message.d.ts +5 -5
  197. package/dist/unstable/cluster/MessageStorage.d.ts.map +1 -1
  198. package/dist/unstable/cluster/MessageStorage.js +2 -1
  199. package/dist/unstable/cluster/MessageStorage.js.map +1 -1
  200. package/dist/unstable/cluster/Reply.d.ts +3 -3
  201. package/dist/unstable/cluster/Runner.d.ts +1 -1
  202. package/dist/unstable/cluster/Runners.d.ts.map +1 -1
  203. package/dist/unstable/cluster/Runners.js +4 -3
  204. package/dist/unstable/cluster/Runners.js.map +1 -1
  205. package/dist/unstable/cluster/Sharding.d.ts +2 -2
  206. package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
  207. package/dist/unstable/cluster/Sharding.js +8 -6
  208. package/dist/unstable/cluster/Sharding.js.map +1 -1
  209. package/dist/unstable/cluster/ShardingConfig.d.ts +21 -21
  210. package/dist/unstable/cluster/ShardingConfig.d.ts.map +1 -1
  211. package/dist/unstable/cluster/ShardingConfig.js.map +1 -1
  212. package/dist/unstable/cluster/SqlRunnerStorage.js +1 -1
  213. package/dist/unstable/cluster/SqlRunnerStorage.js.map +1 -1
  214. package/dist/unstable/cluster/internal/entityManager.js +5 -4
  215. package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
  216. package/dist/unstable/cluster/internal/entityReaper.js +2 -1
  217. package/dist/unstable/cluster/internal/entityReaper.js.map +1 -1
  218. package/dist/unstable/cluster/internal/resourceRef.js +2 -1
  219. package/dist/unstable/cluster/internal/resourceRef.js.map +1 -1
  220. package/dist/unstable/devtools/DevToolsSchema.d.ts +36 -36
  221. package/dist/unstable/encoding/Sse.d.ts +3 -3
  222. package/dist/unstable/encoding/Sse.d.ts.map +1 -1
  223. package/dist/unstable/encoding/Sse.js.map +1 -1
  224. package/dist/unstable/eventlog/EventJournal.d.ts +1 -1
  225. package/dist/unstable/eventlog/EventLog.d.ts.map +1 -1
  226. package/dist/unstable/eventlog/EventLog.js +2 -1
  227. package/dist/unstable/eventlog/EventLog.js.map +1 -1
  228. package/dist/unstable/eventlog/EventLogRemote.d.ts +5 -5
  229. package/dist/unstable/http/Cookies.d.ts +2 -2
  230. package/dist/unstable/http/Cookies.d.ts.map +1 -1
  231. package/dist/unstable/http/Cookies.js +2 -2
  232. package/dist/unstable/http/Cookies.js.map +1 -1
  233. package/dist/unstable/http/HttpClient.d.ts +4 -4
  234. package/dist/unstable/http/HttpClient.d.ts.map +1 -1
  235. package/dist/unstable/http/HttpClientRequest.d.ts +11 -11
  236. package/dist/unstable/http/HttpClientRequest.d.ts.map +1 -1
  237. package/dist/unstable/http/HttpClientRequest.js +8 -1
  238. package/dist/unstable/http/HttpClientRequest.js.map +1 -1
  239. package/dist/unstable/http/HttpEffect.d.ts.map +1 -1
  240. package/dist/unstable/http/HttpEffect.js +18 -26
  241. package/dist/unstable/http/HttpEffect.js.map +1 -1
  242. package/dist/unstable/http/HttpMethod.d.ts +4 -4
  243. package/dist/unstable/http/HttpMethod.d.ts.map +1 -1
  244. package/dist/unstable/http/HttpMethod.js +3 -3
  245. package/dist/unstable/http/HttpMethod.js.map +1 -1
  246. package/dist/unstable/http/Multipart.d.ts +2 -2
  247. package/dist/unstable/http/UrlParams.d.ts +1 -1
  248. package/dist/unstable/httpapi/HttpApiBuilder.js +2 -2
  249. package/dist/unstable/httpapi/HttpApiBuilder.js.map +1 -1
  250. package/dist/unstable/httpapi/HttpApiScalar.d.ts +6 -0
  251. package/dist/unstable/httpapi/HttpApiScalar.d.ts.map +1 -1
  252. package/dist/unstable/httpapi/HttpApiScalar.js.map +1 -1
  253. package/dist/unstable/observability/Otlp.d.ts +12 -12
  254. package/dist/unstable/observability/Otlp.d.ts.map +1 -1
  255. package/dist/unstable/observability/OtlpExporter.d.ts +2 -2
  256. package/dist/unstable/observability/OtlpExporter.d.ts.map +1 -1
  257. package/dist/unstable/observability/OtlpExporter.js +1 -1
  258. package/dist/unstable/observability/OtlpExporter.js.map +1 -1
  259. package/dist/unstable/observability/OtlpLogger.d.ts +4 -4
  260. package/dist/unstable/observability/OtlpLogger.d.ts.map +1 -1
  261. package/dist/unstable/observability/OtlpMetrics.d.ts +4 -4
  262. package/dist/unstable/observability/OtlpMetrics.d.ts.map +1 -1
  263. package/dist/unstable/observability/OtlpTracer.d.ts +4 -4
  264. package/dist/unstable/observability/OtlpTracer.d.ts.map +1 -1
  265. package/dist/unstable/persistence/KeyValueStore.js +4 -4
  266. package/dist/unstable/persistence/KeyValueStore.js.map +1 -1
  267. package/dist/unstable/persistence/Persistable.d.ts +2 -2
  268. package/dist/unstable/persistence/Persistable.d.ts.map +1 -1
  269. package/dist/unstable/persistence/PersistedCache.d.ts +6 -5
  270. package/dist/unstable/persistence/PersistedCache.d.ts.map +1 -1
  271. package/dist/unstable/persistence/PersistedCache.js +2 -1
  272. package/dist/unstable/persistence/PersistedCache.js.map +1 -1
  273. package/dist/unstable/persistence/PersistedQueue.d.ts +12 -12
  274. package/dist/unstable/persistence/PersistedQueue.d.ts.map +1 -1
  275. package/dist/unstable/persistence/PersistedQueue.js +12 -11
  276. package/dist/unstable/persistence/PersistedQueue.js.map +1 -1
  277. package/dist/unstable/persistence/Persistence.d.ts +1 -1
  278. package/dist/unstable/persistence/Persistence.d.ts.map +1 -1
  279. package/dist/unstable/persistence/Persistence.js +2 -2
  280. package/dist/unstable/persistence/Persistence.js.map +1 -1
  281. package/dist/unstable/persistence/RateLimiter.d.ts +3 -3
  282. package/dist/unstable/persistence/RateLimiter.d.ts.map +1 -1
  283. package/dist/unstable/persistence/RateLimiter.js +1 -1
  284. package/dist/unstable/persistence/RateLimiter.js.map +1 -1
  285. package/dist/unstable/process/ChildProcess.d.ts +1 -1
  286. package/dist/unstable/process/ChildProcess.d.ts.map +1 -1
  287. package/dist/unstable/process/ChildProcessSpawner.d.ts +6 -0
  288. package/dist/unstable/process/ChildProcessSpawner.d.ts.map +1 -1
  289. package/dist/unstable/process/ChildProcessSpawner.js.map +1 -1
  290. package/dist/unstable/reactivity/Atom.d.ts +6 -6
  291. package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
  292. package/dist/unstable/reactivity/Atom.js +3 -3
  293. package/dist/unstable/reactivity/Atom.js.map +1 -1
  294. package/dist/unstable/reactivity/AtomHttpApi.d.ts +1 -1
  295. package/dist/unstable/reactivity/AtomHttpApi.d.ts.map +1 -1
  296. package/dist/unstable/reactivity/AtomHttpApi.js +1 -1
  297. package/dist/unstable/reactivity/AtomHttpApi.js.map +1 -1
  298. package/dist/unstable/reactivity/AtomRpc.d.ts +1 -1
  299. package/dist/unstable/reactivity/AtomRpc.d.ts.map +1 -1
  300. package/dist/unstable/reactivity/AtomRpc.js +1 -1
  301. package/dist/unstable/reactivity/AtomRpc.js.map +1 -1
  302. package/dist/unstable/reactivity/index.d.ts +2 -2
  303. package/dist/unstable/reactivity/index.d.ts.map +1 -1
  304. package/dist/unstable/reactivity/index.js +2 -2
  305. package/dist/unstable/reactivity/index.js.map +1 -1
  306. package/dist/unstable/rpc/Rpc.d.ts +2 -2
  307. package/dist/unstable/rpc/Rpc.d.ts.map +1 -1
  308. package/dist/unstable/rpc/RpcClient.d.ts +5 -26
  309. package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
  310. package/dist/unstable/rpc/RpcClient.js +6 -13
  311. package/dist/unstable/rpc/RpcClient.js.map +1 -1
  312. package/dist/unstable/rpc/RpcServer.d.ts.map +1 -1
  313. package/dist/unstable/rpc/RpcServer.js +5 -3
  314. package/dist/unstable/rpc/RpcServer.js.map +1 -1
  315. package/dist/unstable/rpc/Utils.d.ts.map +1 -1
  316. package/dist/unstable/rpc/Utils.js +2 -1
  317. package/dist/unstable/rpc/Utils.js.map +1 -1
  318. package/dist/unstable/socket/Socket.d.ts +4 -4
  319. package/dist/unstable/socket/Socket.d.ts.map +1 -1
  320. package/dist/unstable/socket/Socket.js +3 -2
  321. package/dist/unstable/socket/Socket.js.map +1 -1
  322. package/dist/unstable/sql/SqlModel.d.ts +2 -2
  323. package/dist/unstable/sql/SqlModel.d.ts.map +1 -1
  324. package/dist/unstable/sql/SqlModel.js +3 -3
  325. package/dist/unstable/sql/SqlModel.js.map +1 -1
  326. package/dist/unstable/sql/SqlSchema.d.ts +16 -5
  327. package/dist/unstable/sql/SqlSchema.d.ts.map +1 -1
  328. package/dist/unstable/sql/SqlSchema.js +17 -7
  329. package/dist/unstable/sql/SqlSchema.js.map +1 -1
  330. package/dist/unstable/sql/Statement.js +0 -1
  331. package/dist/unstable/sql/Statement.js.map +1 -1
  332. package/dist/unstable/workers/Worker.d.ts.map +1 -1
  333. package/dist/unstable/workers/Worker.js +2 -1
  334. package/dist/unstable/workers/Worker.js.map +1 -1
  335. package/dist/unstable/workflow/DurableClock.d.ts +3 -3
  336. package/dist/unstable/workflow/DurableClock.d.ts.map +1 -1
  337. package/dist/unstable/workflow/DurableClock.js +3 -3
  338. package/dist/unstable/workflow/DurableClock.js.map +1 -1
  339. package/dist/unstable/workflow/DurableDeferred.js +2 -2
  340. package/dist/unstable/workflow/DurableDeferred.js.map +1 -1
  341. package/dist/unstable/workflow/Workflow.d.ts +1 -1
  342. package/dist/unstable/workflow/WorkflowEngine.d.ts +2 -1
  343. package/dist/unstable/workflow/WorkflowEngine.d.ts.map +1 -1
  344. package/dist/unstable/workflow/WorkflowEngine.js +2 -1
  345. package/dist/unstable/workflow/WorkflowEngine.js.map +1 -1
  346. package/package.json +1 -2
  347. package/src/Cache.ts +3 -3
  348. package/src/Cause.ts +1 -1
  349. package/src/Channel.ts +6 -4
  350. package/src/Config.ts +3 -3
  351. package/src/Data.ts +10 -9
  352. package/src/DateTime.ts +24 -164
  353. package/src/Duration.ts +15 -15
  354. package/src/Effect.ts +15 -261
  355. package/src/Encoding.ts +879 -0
  356. package/src/Equal.ts +2 -2
  357. package/src/FileSystem.ts +4 -4
  358. package/src/Formatter.ts +253 -51
  359. package/src/Graph.ts +8 -5
  360. package/src/JsonSchema.ts +383 -10
  361. package/src/Latch.ts +112 -0
  362. package/src/LayerMap.ts +5 -5
  363. package/src/LogLevel.ts +31 -0
  364. package/src/Logger.ts +5 -5
  365. package/src/Metric.ts +4 -4
  366. package/src/Pipeable.ts +32 -1
  367. package/src/Pool.ts +13 -11
  368. package/src/PubSub.ts +10 -9
  369. package/src/Random.ts +5 -14
  370. package/src/RcMap.ts +5 -5
  371. package/src/RcRef.ts +1 -1
  372. package/src/Request.ts +3 -2
  373. package/src/RequestResolver.ts +9 -29
  374. package/src/Schedule.ts +261 -140
  375. package/src/Schema.ts +571 -109
  376. package/src/SchemaGetter.ts +12 -14
  377. package/src/SchemaRepresentation.ts +5 -2
  378. package/src/SchemaTransformation.ts +104 -0
  379. package/src/ScopedCache.ts +3 -3
  380. package/src/Semaphore.ts +356 -0
  381. package/src/Stream.ts +43 -42
  382. package/src/Struct.ts +26 -0
  383. package/src/SubscriptionRef.ts +3 -2
  384. package/src/SynchronizedRef.ts +3 -2
  385. package/src/Types.ts +9 -0
  386. package/src/index.ts +151 -6
  387. package/src/internal/core.ts +10 -2
  388. package/src/internal/dateTime.ts +9 -30
  389. package/src/internal/effect.ts +24 -23
  390. package/src/internal/random.ts +20 -0
  391. package/src/internal/rcRef.ts +4 -3
  392. package/src/testing/TestClock.ts +13 -11
  393. package/src/testing/TestSchema.ts +8 -8
  394. package/src/unstable/ai/AiError.ts +2 -2
  395. package/src/unstable/ai/Chat.ts +12 -11
  396. package/src/unstable/ai/LanguageModel.ts +3 -3
  397. package/src/unstable/ai/McpServer.ts +2 -2
  398. package/src/unstable/ai/Prompt.ts +37 -37
  399. package/src/unstable/ai/Response.ts +25 -25
  400. package/src/unstable/cluster/ClusterCron.ts +2 -2
  401. package/src/unstable/cluster/ClusterWorkflowEngine.ts +3 -2
  402. package/src/unstable/cluster/Entity.ts +7 -6
  403. package/src/unstable/cluster/EntityResource.ts +4 -4
  404. package/src/unstable/cluster/Envelope.ts +1 -1
  405. package/src/unstable/cluster/K8sHttpClient.ts +1 -1
  406. package/src/unstable/cluster/MessageStorage.ts +3 -5
  407. package/src/unstable/cluster/Runners.ts +6 -5
  408. package/src/unstable/cluster/Sharding.ts +11 -9
  409. package/src/unstable/cluster/ShardingConfig.ts +10 -11
  410. package/src/unstable/cluster/SqlRunnerStorage.ts +1 -1
  411. package/src/unstable/cluster/internal/entityManager.ts +9 -8
  412. package/src/unstable/cluster/internal/entityReaper.ts +2 -1
  413. package/src/unstable/cluster/internal/resourceRef.ts +2 -1
  414. package/src/unstable/encoding/Sse.ts +2 -4
  415. package/src/unstable/eventlog/EventLog.ts +2 -1
  416. package/src/unstable/http/Cookies.ts +3 -3
  417. package/src/unstable/http/HttpClient.ts +4 -4
  418. package/src/unstable/http/HttpClientRequest.ts +15 -11
  419. package/src/unstable/http/HttpEffect.ts +17 -25
  420. package/src/unstable/http/HttpMethod.ts +16 -4
  421. package/src/unstable/http/Multipart.ts +2 -2
  422. package/src/unstable/http/UrlParams.ts +1 -1
  423. package/src/unstable/httpapi/HttpApiBuilder.ts +2 -2
  424. package/src/unstable/httpapi/HttpApiScalar.ts +6 -0
  425. package/src/unstable/observability/Otlp.ts +12 -12
  426. package/src/unstable/observability/OtlpExporter.ts +3 -3
  427. package/src/unstable/observability/OtlpLogger.ts +4 -4
  428. package/src/unstable/observability/OtlpMetrics.ts +4 -4
  429. package/src/unstable/observability/OtlpTracer.ts +4 -4
  430. package/src/unstable/persistence/KeyValueStore.ts +4 -4
  431. package/src/unstable/persistence/Persistable.ts +2 -2
  432. package/src/unstable/persistence/PersistedCache.ts +20 -9
  433. package/src/unstable/persistence/PersistedQueue.ts +25 -24
  434. package/src/unstable/persistence/Persistence.ts +3 -3
  435. package/src/unstable/persistence/RateLimiter.ts +4 -4
  436. package/src/unstable/process/ChildProcess.ts +1 -1
  437. package/src/unstable/process/ChildProcessSpawner.ts +6 -0
  438. package/src/unstable/reactivity/Atom.ts +13 -13
  439. package/src/unstable/reactivity/AtomHttpApi.ts +3 -3
  440. package/src/unstable/reactivity/AtomRpc.ts +3 -3
  441. package/src/unstable/reactivity/index.ts +2 -2
  442. package/src/unstable/rpc/Rpc.ts +3 -3
  443. package/src/unstable/rpc/RpcClient.ts +12 -54
  444. package/src/unstable/rpc/RpcServer.ts +6 -4
  445. package/src/unstable/rpc/Utils.ts +2 -1
  446. package/src/unstable/socket/Socket.ts +7 -6
  447. package/src/unstable/sql/SqlModel.ts +5 -5
  448. package/src/unstable/sql/SqlSchema.ts +41 -25
  449. package/src/unstable/sql/Statement.ts +0 -1
  450. package/src/unstable/workers/Worker.ts +2 -1
  451. package/src/unstable/workflow/DurableClock.ts +8 -8
  452. package/src/unstable/workflow/DurableDeferred.ts +2 -2
  453. package/src/unstable/workflow/WorkflowEngine.ts +3 -2
  454. package/dist/PartitionedSemaphore.d.ts +0 -52
  455. package/dist/PartitionedSemaphore.d.ts.map +0 -1
  456. package/dist/PartitionedSemaphore.js.map +0 -1
  457. package/dist/encoding/Base64.d.ts +0 -67
  458. package/dist/encoding/Base64.d.ts.map +0 -1
  459. package/dist/encoding/Base64.js +0 -146
  460. package/dist/encoding/Base64.js.map +0 -1
  461. package/dist/encoding/Base64Url.d.ts +0 -60
  462. package/dist/encoding/Base64Url.d.ts.map +0 -1
  463. package/dist/encoding/Base64Url.js +0 -89
  464. package/dist/encoding/Base64Url.js.map +0 -1
  465. package/dist/encoding/EncodingError.d.ts +0 -31
  466. package/dist/encoding/EncodingError.d.ts.map +0 -1
  467. package/dist/encoding/EncodingError.js +0 -22
  468. package/dist/encoding/EncodingError.js.map +0 -1
  469. package/dist/encoding/Hex.d.ts +0 -61
  470. package/dist/encoding/Hex.d.ts.map +0 -1
  471. package/dist/encoding/Hex.js +0 -115
  472. package/dist/encoding/Hex.js.map +0 -1
  473. package/dist/encoding/index.d.ts +0 -26
  474. package/dist/encoding/index.d.ts.map +0 -1
  475. package/dist/encoding/index.js +0 -27
  476. package/dist/encoding/index.js.map +0 -1
  477. package/src/PartitionedSemaphore.ts +0 -182
  478. package/src/encoding/Base64.ts +0 -366
  479. package/src/encoding/Base64Url.ts +0 -104
  480. package/src/encoding/EncodingError.ts +0 -35
  481. package/src/encoding/Hex.ts +0 -390
  482. package/src/encoding/index.ts +0 -31
package/src/Stream.ts CHANGED
@@ -20,6 +20,7 @@ import * as internalExecutionPlan from "./internal/executionPlan.ts"
20
20
  import * as internal from "./internal/stream.ts"
21
21
  import { addSpanStackTrace } from "./internal/tracer.ts"
22
22
  import * as Iterable from "./Iterable.ts"
23
+ import * as Latch from "./Latch.ts"
23
24
  import type * as Layer from "./Layer.ts"
24
25
  import type { LogLevel } from "./LogLevel.ts"
25
26
  import * as MutableHashMap from "./MutableHashMap.ts"
@@ -471,7 +472,7 @@ export const fromEffectSchedule = <A, E, R, X, AS extends A, ES, RS>(
471
472
  * @since 2.0.0
472
473
  * @category Constructors
473
474
  */
474
- export const tick = (interval: Duration.DurationInput): Stream<void> =>
475
+ export const tick = (interval: Duration.Input): Stream<void> =>
475
476
  fromPull(Effect.sync(() => {
476
477
  let first = true
477
478
  const effect = Effect.succeed(Arr.of<void>(undefined))
@@ -2648,8 +2649,8 @@ export const tapSink: {
2648
2649
  transformPullBracket(
2649
2650
  self,
2650
2651
  Effect.fnUntraced(function*(pull, _, scope) {
2651
- const upstreamLatch = Effect.makeLatchUnsafe()
2652
- const sinkLatch = Effect.makeLatchUnsafe()
2652
+ const upstreamLatch = Latch.makeUnsafe()
2653
+ const sinkLatch = Latch.makeUnsafe()
2653
2654
  let chunk: Arr.NonEmptyReadonlyArray<A> | undefined = undefined
2654
2655
  let causeSink: Cause.Cause<E2> | undefined = undefined
2655
2656
  let sinkDone = false
@@ -3316,7 +3317,7 @@ export const timeout: {
3316
3317
  * @since 2.0.0
3317
3318
  * @category Rate Limiting
3318
3319
  */
3319
- (duration: Duration.DurationInput): <A, E, R>(self: Stream<A, E, R>) => Stream<A, E, R>
3320
+ (duration: Duration.Input): <A, E, R>(self: Stream<A, E, R>) => Stream<A, E, R>
3320
3321
  /**
3321
3322
  * Ends the stream if it does not produce a value within the specified duration.
3322
3323
  *
@@ -3340,10 +3341,10 @@ export const timeout: {
3340
3341
  * @since 2.0.0
3341
3342
  * @category Rate Limiting
3342
3343
  */
3343
- <A, E, R>(self: Stream<A, E, R>, duration: Duration.DurationInput): Stream<A, E, R>
3344
+ <A, E, R>(self: Stream<A, E, R>, duration: Duration.Input): Stream<A, E, R>
3344
3345
  } = dual(
3345
3346
  2,
3346
- <A, E, R>(self: Stream<A, E, R>, duration: Duration.DurationInput): Stream<A, E, R> =>
3347
+ <A, E, R>(self: Stream<A, E, R>, duration: Duration.Input): Stream<A, E, R> =>
3347
3348
  transformPull(self, (pull, _scope) =>
3348
3349
  Effect.succeed(Effect.timeoutOrElse(pull, {
3349
3350
  duration,
@@ -5341,7 +5342,7 @@ export const zipLatestAll = <T extends ReadonlyArray<Stream<any, any, any>>>(
5341
5342
  fromChannel(Channel.suspend(() => {
5342
5343
  const latest: Array<any> = []
5343
5344
  const emitted = new Set<number>()
5344
- const readyLatch = Effect.makeLatchUnsafe()
5345
+ const readyLatch = Latch.makeUnsafe()
5345
5346
  return Channel.mergeAll(
5346
5347
  Channel.fromArray(
5347
5348
  streams.map((s, i) =>
@@ -12174,7 +12175,7 @@ export const debounce: {
12174
12175
  * @since 2.0.0
12175
12176
  * @category Rate Limiting
12176
12177
  */
12177
- (duration: Duration.DurationInput): <A, E, R>(self: Stream<A, E, R>) => Stream<A, E, R>
12178
+ (duration: Duration.Input): <A, E, R>(self: Stream<A, E, R>) => Stream<A, E, R>
12178
12179
  /**
12179
12180
  * Drops earlier elements within the debounce window and emits only the latest element after the pause.
12180
12181
  *
@@ -12198,21 +12199,21 @@ export const debounce: {
12198
12199
  * @since 2.0.0
12199
12200
  * @category Rate Limiting
12200
12201
  */
12201
- <A, E, R>(self: Stream<A, E, R>, duration: Duration.DurationInput): Stream<A, E, R>
12202
+ <A, E, R>(self: Stream<A, E, R>, duration: Duration.Input): Stream<A, E, R>
12202
12203
  } = dual(
12203
12204
  2,
12204
- <A, E, R>(self: Stream<A, E, R>, duration: Duration.DurationInput): Stream<A, E, R> =>
12205
+ <A, E, R>(self: Stream<A, E, R>, duration: Duration.Input): Stream<A, E, R> =>
12205
12206
  transformPull(
12206
12207
  self,
12207
12208
  Effect.fnUntraced(function*(pull, scope) {
12208
12209
  const clock = yield* Clock
12209
- const durationMs = Duration.toMillis(Duration.fromDurationInputUnsafe(duration))
12210
+ const durationMs = Duration.toMillis(Duration.fromInputUnsafe(duration))
12210
12211
  let lastArr: Arr.NonEmptyReadonlyArray<A> | undefined
12211
12212
  let cause: Cause.Cause<Cause.Done | E> | undefined
12212
12213
  let emitAtMs = Infinity
12213
- const pullLatch = Effect.makeLatchUnsafe()
12214
- const emitLatch = Effect.makeLatchUnsafe()
12215
- const endLatch = Effect.makeLatchUnsafe()
12214
+ const pullLatch = Latch.makeUnsafe()
12215
+ const emitLatch = Latch.makeUnsafe()
12216
+ const endLatch = Latch.makeUnsafe()
12216
12217
 
12217
12218
  yield* pull.pipe(
12218
12219
  pullLatch.whenOpen,
@@ -12346,7 +12347,7 @@ export const throttleEffect: {
12346
12347
  options: {
12347
12348
  readonly cost: (arr: Arr.NonEmptyReadonlyArray<A>) => Effect.Effect<number, E2, R2>
12348
12349
  readonly units: number
12349
- readonly duration: Duration.DurationInput
12350
+ readonly duration: Duration.Input
12350
12351
  readonly burst?: number | undefined
12351
12352
  readonly strategy?: "enforce" | "shape" | undefined
12352
12353
  }
@@ -12392,7 +12393,7 @@ export const throttleEffect: {
12392
12393
  options: {
12393
12394
  readonly cost: (arr: Arr.NonEmptyReadonlyArray<A>) => Effect.Effect<number, E2, R2>
12394
12395
  readonly units: number
12395
- readonly duration: Duration.DurationInput
12396
+ readonly duration: Duration.Input
12396
12397
  readonly burst?: number | undefined
12397
12398
  readonly strategy?: "enforce" | "shape" | undefined
12398
12399
  }
@@ -12404,7 +12405,7 @@ export const throttleEffect: {
12404
12405
  options: {
12405
12406
  readonly cost: (arr: Arr.NonEmptyReadonlyArray<A>) => Effect.Effect<number, E2, R2>
12406
12407
  readonly units: number
12407
- readonly duration: Duration.DurationInput
12408
+ readonly duration: Duration.Input
12408
12409
  readonly burst?: number | undefined
12409
12410
  readonly strategy?: "enforce" | "shape" | undefined
12410
12411
  }
@@ -12421,12 +12422,12 @@ const throttleEnforceEffect = <A, E, R, E2, R2>(
12421
12422
  self: Stream<A, E, R>,
12422
12423
  cost: (arr: Arr.NonEmptyReadonlyArray<A>) => Effect.Effect<number, E2, R2>,
12423
12424
  units: number,
12424
- duration: Duration.DurationInput,
12425
+ duration: Duration.Input,
12425
12426
  burst: number
12426
12427
  ): Stream<A, E | E2, R | R2> =>
12427
12428
  transformPull(self, (pull) =>
12428
12429
  Effect.clockWith((clock) => {
12429
- const durationMs = Duration.toMillis(Duration.fromDurationInputUnsafe(duration))
12430
+ const durationMs = Duration.toMillis(Duration.fromInputUnsafe(duration))
12430
12431
  const max = units + burst < 0 ? Number.POSITIVE_INFINITY : units + burst
12431
12432
  let tokens = units
12432
12433
  let timestampMs = clock.currentTimeMillisUnsafe()
@@ -12457,12 +12458,12 @@ const throttleShapeEffect = <A, E, R, E2, R2>(
12457
12458
  self: Stream<A, E, R>,
12458
12459
  cost: (arr: Arr.NonEmptyReadonlyArray<A>) => Effect.Effect<number, E2, R2>,
12459
12460
  units: number,
12460
- duration: Duration.DurationInput,
12461
+ duration: Duration.Input,
12461
12462
  burst: number
12462
12463
  ): Stream<A, E | E2, R | R2> =>
12463
12464
  transformPull(self, (pull) =>
12464
12465
  Effect.clockWith((clock) => {
12465
- const durationMs = Duration.toMillis(Duration.fromDurationInputUnsafe(duration))
12466
+ const durationMs = Duration.toMillis(Duration.fromInputUnsafe(duration))
12466
12467
  const max = units + burst < 0 ? Number.POSITIVE_INFINITY : units + burst
12467
12468
  let tokens = units
12468
12469
  let timestampMs = clock.currentTimeMillisUnsafe()
@@ -12575,7 +12576,7 @@ export const throttle: {
12575
12576
  options: {
12576
12577
  readonly cost: (arr: Arr.NonEmptyReadonlyArray<A>) => number
12577
12578
  readonly units: number
12578
- readonly duration: Duration.DurationInput
12579
+ readonly duration: Duration.Input
12579
12580
  readonly burst?: number | undefined
12580
12581
  readonly strategy?: "enforce" | "shape" | undefined
12581
12582
  }
@@ -12620,7 +12621,7 @@ export const throttle: {
12620
12621
  options: {
12621
12622
  readonly cost: (arr: Arr.NonEmptyReadonlyArray<A>) => number
12622
12623
  readonly units: number
12623
- readonly duration: Duration.DurationInput
12624
+ readonly duration: Duration.Input
12624
12625
  readonly burst?: number | undefined
12625
12626
  readonly strategy?: "enforce" | "shape" | undefined
12626
12627
  }
@@ -12632,7 +12633,7 @@ export const throttle: {
12632
12633
  options: {
12633
12634
  readonly cost: (arr: Arr.NonEmptyReadonlyArray<A>) => number
12634
12635
  readonly units: number
12635
- readonly duration: Duration.DurationInput
12636
+ readonly duration: Duration.Input
12636
12637
  readonly burst?: number | undefined
12637
12638
  readonly strategy?: "enforce" | "shape" | undefined
12638
12639
  }
@@ -12770,7 +12771,7 @@ export const groupedWithin: {
12770
12771
  * @since 2.0.0
12771
12772
  * @category Grouping
12772
12773
  */
12773
- (chunkSize: number, duration: Duration.DurationInput): <A, E, R>(self: Stream<A, E, R>) => Stream<Array<A>, E, R>
12774
+ (chunkSize: number, duration: Duration.Input): <A, E, R>(self: Stream<A, E, R>) => Stream<Array<A>, E, R>
12774
12775
  /**
12775
12776
  * Partitions the stream into arrays, emitting when the chunk size is reached
12776
12777
  * or the duration passes.
@@ -12794,11 +12795,11 @@ export const groupedWithin: {
12794
12795
  * @since 2.0.0
12795
12796
  * @category Grouping
12796
12797
  */
12797
- <A, E, R>(self: Stream<A, E, R>, chunkSize: number, duration: Duration.DurationInput): Stream<Array<A>, E, R>
12798
+ <A, E, R>(self: Stream<A, E, R>, chunkSize: number, duration: Duration.Input): Stream<Array<A>, E, R>
12798
12799
  } = dual(3, <A, E, R>(
12799
12800
  self: Stream<A, E, R>,
12800
12801
  chunkSize: number,
12801
- duration: Duration.DurationInput
12802
+ duration: Duration.Input
12802
12803
  ): Stream<Array<A>, E, R> =>
12803
12804
  aggregateWithin(
12804
12805
  self,
@@ -12873,7 +12874,7 @@ export const groupBy: {
12873
12874
  f: (a: NoInfer<A>) => Effect.Effect<readonly [K, V], E2, R2>,
12874
12875
  options?: {
12875
12876
  readonly bufferSize?: number | undefined
12876
- readonly idleTimeToLive?: Duration.DurationInput | undefined
12877
+ readonly idleTimeToLive?: Duration.Input | undefined
12877
12878
  }
12878
12879
  ): <E, R>(self: Stream<A, E, R>) => Stream<readonly [K, Stream<V>], E | E2, R | R2>
12879
12880
  /**
@@ -12912,7 +12913,7 @@ export const groupBy: {
12912
12913
  f: (a: NoInfer<A>) => Effect.Effect<readonly [K, V], E2, R2>,
12913
12914
  options?: {
12914
12915
  readonly bufferSize?: number | undefined
12915
- readonly idleTimeToLive?: Duration.DurationInput | undefined
12916
+ readonly idleTimeToLive?: Duration.Input | undefined
12916
12917
  }
12917
12918
  ): Stream<readonly [K, Stream<V>], E | E2, R | R2>
12918
12919
  } = dual((args) => isStream(args[0]), <A, E, R, K, V, E2, R2>(
@@ -12920,7 +12921,7 @@ export const groupBy: {
12920
12921
  f: (a: NoInfer<A>) => Effect.Effect<readonly [K, V], E2, R2>,
12921
12922
  options?: {
12922
12923
  readonly bufferSize?: number | undefined
12923
- readonly idleTimeToLive?: Duration.DurationInput | undefined
12924
+ readonly idleTimeToLive?: Duration.Input | undefined
12924
12925
  }
12925
12926
  ): Stream<readonly [K, Stream<V>], E | E2, R | R2> =>
12926
12927
  groupByImpl(
@@ -13002,7 +13003,7 @@ export const groupByKey: {
13002
13003
  f: (a: NoInfer<A>) => K,
13003
13004
  options?: {
13004
13005
  readonly bufferSize?: number | undefined
13005
- readonly idleTimeToLive?: Duration.DurationInput | undefined
13006
+ readonly idleTimeToLive?: Duration.Input | undefined
13006
13007
  }
13007
13008
  ): <E, R>(self: Stream<A, E, R>) => Stream<readonly [K, Stream<A>], E, R>
13008
13009
  /**
@@ -13039,7 +13040,7 @@ export const groupByKey: {
13039
13040
  f: (a: NoInfer<A>) => K,
13040
13041
  options?: {
13041
13042
  readonly bufferSize?: number | undefined
13042
- readonly idleTimeToLive?: Duration.DurationInput | undefined
13043
+ readonly idleTimeToLive?: Duration.Input | undefined
13043
13044
  }
13044
13045
  ): Stream<readonly [K, Stream<A>], E, R>
13045
13046
  } = dual((args) => isStream(args[0]), <A, E, R, K>(
@@ -13047,7 +13048,7 @@ export const groupByKey: {
13047
13048
  f: (a: NoInfer<A>) => K,
13048
13049
  options?: {
13049
13050
  readonly bufferSize?: number | undefined
13050
- readonly idleTimeToLive?: Duration.DurationInput | undefined
13051
+ readonly idleTimeToLive?: Duration.Input | undefined
13051
13052
  }
13052
13053
  ): Stream<readonly [K, Stream<A>], E, R> =>
13053
13054
  suspend(() => {
@@ -13145,7 +13146,7 @@ const groupByImpl = <A, E, R, K, V, E2, R2>(
13145
13146
  ) => Effect.Effect<void, E2, R2>,
13146
13147
  options?: {
13147
13148
  readonly bufferSize?: number | undefined
13148
- readonly idleTimeToLive?: Duration.DurationInput | undefined
13149
+ readonly idleTimeToLive?: Duration.Input | undefined
13149
13150
  }
13150
13151
  ): Stream<readonly [K, Stream<V>], E | E2, R | R2> =>
13151
13152
  transformPullBracket(
@@ -13537,7 +13538,7 @@ export const aggregateWithin: {
13537
13538
  fromChannel(Channel.fromTransformBracket(Effect.fnUntraced(function*(_upstream, _, scope) {
13538
13539
  const pull = yield* Channel.toPullScoped(self.channel, _)
13539
13540
 
13540
- const pullLatch = Effect.makeLatchUnsafe(false)
13541
+ const pullLatch = Latch.makeUnsafe(false)
13541
13542
  const scheduleStep = Symbol()
13542
13543
  const buffer = yield* Queue.make</**
13543
13544
  * Aggregates elements with a sink, emitting each result when the sink completes or the schedule triggers.
@@ -13879,12 +13880,12 @@ export const share: {
13879
13880
  options: {
13880
13881
  readonly capacity: "unbounded"
13881
13882
  readonly replay?: number | undefined
13882
- readonly idleTimeToLive?: Duration.DurationInput | undefined
13883
+ readonly idleTimeToLive?: Duration.Input | undefined
13883
13884
  } | {
13884
13885
  readonly capacity: number
13885
13886
  readonly strategy?: "sliding" | "dropping" | "suspend" | undefined
13886
13887
  readonly replay?: number | undefined
13887
- readonly idleTimeToLive?: Duration.DurationInput | undefined
13888
+ readonly idleTimeToLive?: Duration.Input | undefined
13888
13889
  }
13889
13890
  ): <A, E, R>(self: Stream<A, E, R>) => Effect.Effect<Stream<A, E>, never, Scope.Scope | R>
13890
13891
  /**
@@ -13923,12 +13924,12 @@ export const share: {
13923
13924
  options: {
13924
13925
  readonly capacity: "unbounded"
13925
13926
  readonly replay?: number | undefined
13926
- readonly idleTimeToLive?: Duration.DurationInput | undefined
13927
+ readonly idleTimeToLive?: Duration.Input | undefined
13927
13928
  } | {
13928
13929
  readonly capacity: number
13929
13930
  readonly strategy?: "sliding" | "dropping" | "suspend" | undefined
13930
13931
  readonly replay?: number | undefined
13931
- readonly idleTimeToLive?: Duration.DurationInput | undefined
13932
+ readonly idleTimeToLive?: Duration.Input | undefined
13932
13933
  }
13933
13934
  ): Effect.Effect<Stream<A, E>, never, Scope.Scope | R>
13934
13935
  } = dual(2, <A, E, R>(
@@ -13936,12 +13937,12 @@ export const share: {
13936
13937
  options: {
13937
13938
  readonly capacity: "unbounded"
13938
13939
  readonly replay?: number | undefined
13939
- readonly idleTimeToLive?: Duration.DurationInput | undefined
13940
+ readonly idleTimeToLive?: Duration.Input | undefined
13940
13941
  } | {
13941
13942
  readonly capacity: number
13942
13943
  readonly strategy?: "sliding" | "dropping" | "suspend" | undefined
13943
13944
  readonly replay?: number | undefined
13944
- readonly idleTimeToLive?: Duration.DurationInput | undefined
13945
+ readonly idleTimeToLive?: Duration.Input | undefined
13945
13946
  }
13946
13947
  ): Effect.Effect<Stream<A, E>, never, Scope.Scope | R> =>
13947
13948
  Effect.map(
@@ -17747,7 +17748,7 @@ export const toReadableStreamWith = dual<
17747
17748
  ): ReadableStream<A> => {
17748
17749
  let currentResolve: (() => void) | undefined = undefined
17749
17750
  let fiber: Fiber.Fiber<void, E> | undefined = undefined
17750
- const latch = Effect.makeLatchUnsafe(false)
17751
+ const latch = Latch.makeUnsafe(false)
17751
17752
 
17752
17753
  return new ReadableStream<A>({
17753
17754
  start(controller) {
package/src/Struct.ts CHANGED
@@ -1513,3 +1513,29 @@ export function makeReducer<A>(
1513
1513
  }
1514
1514
  return Reducer.make(combine, initialValue)
1515
1515
  }
1516
+
1517
+ /**
1518
+ * Creates a record with the given keys and value.
1519
+ *
1520
+ * **Example** (Creating a record)
1521
+ *
1522
+ * ```ts
1523
+ * import { Struct } from "effect"
1524
+ *
1525
+ * const record = Struct.Record(["a", "b"], "value")
1526
+ * console.log(record) // { a: "value", b: "value" }
1527
+ * ```
1528
+ *
1529
+ * @category Constructors
1530
+ * @since 4.0.0
1531
+ */
1532
+ export function Record<const Keys extends ReadonlyArray<string | symbol>, Value>(
1533
+ keys: Keys,
1534
+ value: Value
1535
+ ): Record<Keys[number], Value> {
1536
+ const out: any = {}
1537
+ for (const key of keys) {
1538
+ out[key] = value
1539
+ }
1540
+ return out
1541
+ }
@@ -8,6 +8,7 @@ import * as Option from "./Option.ts"
8
8
  import type { Pipeable } from "./Pipeable.ts"
9
9
  import * as PubSub from "./PubSub.ts"
10
10
  import * as Ref from "./Ref.ts"
11
+ import * as Semaphore from "./Semaphore.ts"
11
12
  import * as Stream from "./Stream.ts"
12
13
  import type { Invariant } from "./Types.ts"
13
14
 
@@ -19,7 +20,7 @@ const TypeId = "~effect/SubscriptionRef"
19
20
  */
20
21
  export interface SubscriptionRef<in out A> extends SubscriptionRef.Variance<A>, Pipeable {
21
22
  readonly backing: Ref.Ref<A>
22
- readonly semaphore: Effect.Semaphore
23
+ readonly semaphore: Semaphore.Semaphore
23
24
  readonly pubsub: PubSub.PubSub<A>
24
25
  }
25
26
 
@@ -70,7 +71,7 @@ const Proto = {
70
71
  export const make = <A>(value: A): Effect.Effect<SubscriptionRef<A>> =>
71
72
  Effect.map(PubSub.unbounded<A>({ replay: 1 }), (pubsub) => {
72
73
  const self = Object.create(Proto)
73
- self.semaphore = Effect.makeSemaphoreUnsafe(1)
74
+ self.semaphore = Semaphore.makeUnsafe(1)
74
75
  self.backing = Ref.makeUnsafe(value)
75
76
  self.pubsub = pubsub
76
77
  PubSub.publishUnsafe(self.pubsub, value)
@@ -6,6 +6,7 @@ import { dual } from "./Function.ts"
6
6
  import { PipeInspectableProto } from "./internal/core.ts"
7
7
  import * as Option from "./Option.ts"
8
8
  import * as Ref from "./Ref.ts"
9
+ import * as Semaphore from "./Semaphore.ts"
9
10
 
10
11
  const TypeId = "~effect/SynchronizedRef"
11
12
 
@@ -16,7 +17,7 @@ const TypeId = "~effect/SynchronizedRef"
16
17
  export interface SynchronizedRef<in out A> extends Ref.Ref<A> {
17
18
  readonly [TypeId]: typeof TypeId
18
19
  readonly backing: Ref.Ref<A>
19
- readonly semaphore: Effect.Semaphore
20
+ readonly semaphore: Semaphore.Semaphore
20
21
  }
21
22
 
22
23
  const Proto = {
@@ -36,7 +37,7 @@ const Proto = {
36
37
  */
37
38
  export const makeUnsafe = <A>(value: A): SynchronizedRef<A> => {
38
39
  const self = Object.create(Proto)
39
- self.semaphore = Effect.makeSemaphoreUnsafe(1)
40
+ self.semaphore = Semaphore.makeUnsafe(1)
40
41
  self.backing = Ref.makeUnsafe(value)
41
42
  return self
42
43
  }
package/src/Types.ts CHANGED
@@ -729,6 +729,15 @@ export declare namespace Contravariant {
729
729
  */
730
730
  export type MatchRecord<S, onTrue, onFalse> = {} extends S ? onTrue : onFalse
731
731
 
732
+ /**
733
+ * Conditional type that returns `void` if `S` is an empty object type,
734
+ * otherwise returns `S`.
735
+ *
736
+ * @since 4.0.0
737
+ * @category types
738
+ */
739
+ export type VoidIfEmpty<S> = MatchRecord<S, void, S>
740
+
732
741
  /**
733
742
  * Excludes function types from a union, keeping only non-function members.
734
743
  *
package/src/index.ts CHANGED
@@ -865,6 +865,13 @@ export * as Duration from "./Duration.ts"
865
865
  */
866
866
  export * as Effect from "./Effect.ts"
867
867
 
868
+ /**
869
+ * Encoding & decoding for Base64 (RFC4648), Base64Url, and Hex.
870
+ *
871
+ * @since 4.0.0
872
+ */
873
+ export * as Encoding from "./Encoding.ts"
874
+
868
875
  /**
869
876
  * This module provides functionality for defining and working with equality between values.
870
877
  * It includes the `Equal` interface for types that can determine equality with other values
@@ -1130,6 +1137,57 @@ export * as FileSystem from "./FileSystem.ts"
1130
1137
  export * as Filter from "./Filter.ts"
1131
1138
 
1132
1139
  /**
1140
+ * Utilities for converting arbitrary JavaScript values into human-readable
1141
+ * strings, with support for circular references, redaction, and common JS
1142
+ * types that `JSON.stringify` handles poorly.
1143
+ *
1144
+ * Mental model:
1145
+ * - A `Formatter<Value, Format>` is a callable `(value: Value) => Format`.
1146
+ * - {@link format} is the general-purpose pretty-printer: it handles
1147
+ * primitives, arrays, objects, `BigInt`, `Symbol`, `Date`, `RegExp`,
1148
+ * `Set`, `Map`, class instances, and circular references.
1149
+ * - {@link formatJson} is a safe `JSON.stringify` wrapper that silently
1150
+ * drops circular references and applies redaction.
1151
+ * - Both functions accept a `space` option for indentation control.
1152
+ *
1153
+ * Common tasks:
1154
+ * - Pretty-print any value for debugging / logging -> {@link format}
1155
+ * - Serialize to JSON safely (no circular throws) -> {@link formatJson}
1156
+ * - Format a single object property key -> {@link formatPropertyKey}
1157
+ * - Format a property path like `["a"]["b"]` -> {@link formatPath}
1158
+ * - Format a `Date` to ISO string safely -> {@link formatDate}
1159
+ *
1160
+ * Gotchas:
1161
+ * - {@link format} output is **not** valid JSON; use {@link formatJson} when
1162
+ * you need parseable JSON.
1163
+ * - {@link format} calls `toString()` on objects by default; pass
1164
+ * `ignoreToString: true` to disable.
1165
+ * - {@link formatJson} silently omits circular references (the key is
1166
+ * dropped from the output).
1167
+ * - Values implementing the `Redactable` protocol are automatically
1168
+ * redacted by both {@link format} and {@link formatJson}.
1169
+ *
1170
+ * **Example** (Pretty-print a value)
1171
+ *
1172
+ * ```ts
1173
+ * import { Formatter } from "effect"
1174
+ *
1175
+ * const obj = { name: "Alice", scores: [100, 97] }
1176
+ * console.log(Formatter.format(obj))
1177
+ * // {"name":"Alice","scores":[100,97]}
1178
+ *
1179
+ * console.log(Formatter.format(obj, { space: 2 }))
1180
+ * // {
1181
+ * // "name": "Alice",
1182
+ * // "scores": [
1183
+ * // 100,
1184
+ * // 97
1185
+ * // ]
1186
+ * // }
1187
+ * ```
1188
+ *
1189
+ * See also: {@link Formatter}, {@link format}, {@link formatJson}
1190
+ *
1133
1191
  * @since 4.0.0
1134
1192
  */
1135
1193
  export * as Formatter from "./Formatter.ts"
@@ -1394,10 +1452,98 @@ export * as JsonPatch from "./JsonPatch.ts"
1394
1452
  export * as JsonPointer from "./JsonPointer.ts"
1395
1453
 
1396
1454
  /**
1455
+ * Convert JSON Schema documents between dialects (Draft-07, Draft-2020-12,
1456
+ * OpenAPI 3.0, OpenAPI 3.1). All dialects are normalized to an internal
1457
+ * `Document<"draft-2020-12">` representation before optional conversion to
1458
+ * an output dialect.
1459
+ *
1460
+ * ## Mental model
1461
+ *
1462
+ * - **JsonSchema** — a plain object with string keys; represents any single
1463
+ * JSON Schema node.
1464
+ * - **Dialect** — one of `"draft-07"`, `"draft-2020-12"`, `"openapi-3.1"`,
1465
+ * or `"openapi-3.0"`.
1466
+ * - **Document** — a structured container holding a root `schema`, its
1467
+ * companion `definitions`, and the target `dialect`. Definitions are
1468
+ * stored separately from the root schema so they can be relocated when
1469
+ * converting between dialects.
1470
+ * - **MultiDocument** — same as `Document` but carries multiple root
1471
+ * schemas (at least one). Useful when generating several schemas that
1472
+ * share a single definitions pool.
1473
+ * - **Definitions** — a `Record<string, JsonSchema>` keyed by definition
1474
+ * name. The ref pointer prefix depends on the dialect.
1475
+ * - **`from*` functions** — parse a raw JSON Schema object into the
1476
+ * canonical `Document<"draft-2020-12">`.
1477
+ * - **`to*` functions** — convert from the canonical representation to a
1478
+ * specific output dialect.
1479
+ *
1480
+ * ## Common tasks
1481
+ *
1482
+ * - Parse a Draft-07 schema → {@link fromSchemaDraft07}
1483
+ * - Parse a Draft-2020-12 schema → {@link fromSchemaDraft2020_12}
1484
+ * - Parse an OpenAPI 3.1 schema → {@link fromSchemaOpenApi3_1}
1485
+ * - Parse an OpenAPI 3.0 schema → {@link fromSchemaOpenApi3_0}
1486
+ * - Convert to Draft-07 output → {@link toDocumentDraft07}
1487
+ * - Convert to OpenAPI 3.1 output → {@link toMultiDocumentOpenApi3_1}
1488
+ * - Resolve a `$ref` against definitions → {@link resolve$ref}
1489
+ * - Inline the root `$ref` of a document → {@link resolveTopLevel$ref}
1490
+ *
1491
+ * ## Gotchas
1492
+ *
1493
+ * - All `from*` functions normalize to `Document<"draft-2020-12">`
1494
+ * regardless of the input dialect.
1495
+ * - Unsupported or unrecognized JSON Schema keywords are silently dropped
1496
+ * during conversion.
1497
+ * - Draft-07 tuple syntax (`items` as array + `additionalItems`) is
1498
+ * converted to 2020-12 form (`prefixItems` + `items`), and vice-versa.
1499
+ * - OpenAPI 3.0 `nullable: true` is expanded into `type` arrays or
1500
+ * `anyOf` unions. The `nullable` keyword is removed.
1501
+ * - OpenAPI 3.0 singular `example` is converted to `examples` (array).
1502
+ * - {@link resolve$ref} only looks up the last segment of the ref path in
1503
+ * the definitions map; it does not follow arbitrary JSON Pointer paths.
1504
+ *
1505
+ * ## Quickstart
1506
+ *
1507
+ * **Example** (Parse a Draft-07 schema and convert to Draft-07 output)
1508
+ *
1509
+ * ```ts
1510
+ * import { JsonSchema } from "effect"
1511
+ *
1512
+ * const raw: JsonSchema.JsonSchema = {
1513
+ * type: "object",
1514
+ * properties: {
1515
+ * name: { type: "string" }
1516
+ * },
1517
+ * required: ["name"]
1518
+ * }
1519
+ *
1520
+ * // Parse into canonical form
1521
+ * const doc = JsonSchema.fromSchemaDraft07(raw)
1522
+ *
1523
+ * // Convert back to Draft-07
1524
+ * const draft07 = JsonSchema.toDocumentDraft07(doc)
1525
+ *
1526
+ * console.log(draft07.dialect) // "draft-07"
1527
+ * console.log(draft07.schema) // { type: "object", properties: { name: { type: "string" } }, required: ["name"] }
1528
+ * ```
1529
+ *
1530
+ * ## See also
1531
+ *
1532
+ * - {@link Document}
1533
+ * - {@link MultiDocument}
1534
+ * - {@link fromSchemaDraft07}
1535
+ * - {@link toDocumentDraft07}
1536
+ * - {@link resolve$ref}
1537
+ *
1397
1538
  * @since 4.0.0
1398
1539
  */
1399
1540
  export * as JsonSchema from "./JsonSchema.ts"
1400
1541
 
1542
+ /**
1543
+ * @since 3.8.0
1544
+ */
1545
+ export * as Latch from "./Latch.ts"
1546
+
1401
1547
  /**
1402
1548
  * A `Layer<ROut, E, RIn>` describes how to build one or more services in your
1403
1549
  * application. Services can be injected into effects via
@@ -2269,12 +2415,6 @@ export * as Order from "./Order.ts"
2269
2415
  */
2270
2416
  export * as Ordering from "./Ordering.ts"
2271
2417
 
2272
- /**
2273
- * @since 3.19.4
2274
- * @experimental
2275
- */
2276
- export * as PartitionedSemaphore from "./PartitionedSemaphore.ts"
2277
-
2278
2418
  /**
2279
2419
  * @since 4.0.0
2280
2420
  */
@@ -3137,6 +3277,11 @@ export * as ScopedCache from "./ScopedCache.ts"
3137
3277
  */
3138
3278
  export * as ScopedRef from "./ScopedRef.ts"
3139
3279
 
3280
+ /**
3281
+ * @since 2.0.0
3282
+ */
3283
+ export * as Semaphore from "./Semaphore.ts"
3284
+
3140
3285
  /**
3141
3286
  * This module provides a data structure called `ServiceMap` that can be used
3142
3287
  * for dependency injection in effectful programs. It is essentially a table
@@ -70,7 +70,7 @@ export const PipeInspectableProto = {
70
70
  return { ...this }
71
71
  },
72
72
  toString() {
73
- return format(this, { ignoreToString: true })
73
+ return format(this.toJSON(), { ignoreToString: true, space: 2 })
74
74
  },
75
75
  [NodeInspectSymbol]() {
76
76
  return this.toJSON()
@@ -102,6 +102,14 @@ export const YieldableProto = {
102
102
  }
103
103
  }
104
104
 
105
+ /** @internal */
106
+ export const YieldableErrorProto = {
107
+ ...YieldableProto,
108
+ pipe() {
109
+ return pipeArguments(this, arguments)
110
+ }
111
+ }
112
+
105
113
  /** @internal */
106
114
  export const EffectProto = {
107
115
  [EffectTypeId]: effectVariance,
@@ -581,7 +589,7 @@ export const YieldableError: new(
581
589
  return exitFail(this)
582
590
  }
583
591
  }
584
- Object.assign(YieldableError.prototype, YieldableProto)
592
+ Object.assign(YieldableError.prototype, YieldableErrorProto)
585
593
  return YieldableError as any
586
594
  })()
587
595