effect 4.0.0-beta.1 → 4.0.0-beta.11

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 (641) 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 +7 -7
  8. package/dist/Channel.d.ts.map +1 -1
  9. package/dist/Channel.js +6 -4
  10. package/dist/Channel.js.map +1 -1
  11. package/dist/Combiner.d.ts +280 -13
  12. package/dist/Combiner.d.ts.map +1 -1
  13. package/dist/Combiner.js +198 -7
  14. package/dist/Combiner.js.map +1 -1
  15. package/dist/Config.d.ts +3 -3
  16. package/dist/Config.js +3 -3
  17. package/dist/Config.js.map +1 -1
  18. package/dist/ConfigProvider.d.ts +1 -1
  19. package/dist/Cron.d.ts +1 -1
  20. package/dist/Data.d.ts +534 -365
  21. package/dist/Data.d.ts.map +1 -1
  22. package/dist/Data.js +132 -79
  23. package/dist/Data.js.map +1 -1
  24. package/dist/DateTime.d.ts +23 -161
  25. package/dist/DateTime.d.ts.map +1 -1
  26. package/dist/DateTime.js +6 -51
  27. package/dist/DateTime.js.map +1 -1
  28. package/dist/Duration.d.ts +12 -12
  29. package/dist/Duration.d.ts.map +1 -1
  30. package/dist/Duration.js +12 -12
  31. package/dist/Duration.js.map +1 -1
  32. package/dist/Effect.d.ts +342 -248
  33. package/dist/Effect.d.ts.map +1 -1
  34. package/dist/Effect.js +119 -119
  35. package/dist/Effect.js.map +1 -1
  36. package/dist/Encoding.d.ts +194 -0
  37. package/dist/Encoding.d.ts.map +1 -0
  38. package/dist/Encoding.js +352 -0
  39. package/dist/Encoding.js.map +1 -0
  40. package/dist/Equal.d.ts +276 -109
  41. package/dist/Equal.d.ts.map +1 -1
  42. package/dist/Equal.js +124 -48
  43. package/dist/Equal.js.map +1 -1
  44. package/dist/ErrorReporter.d.ts +376 -0
  45. package/dist/ErrorReporter.d.ts.map +1 -0
  46. package/dist/ErrorReporter.js +246 -0
  47. package/dist/ErrorReporter.js.map +1 -0
  48. package/dist/FileSystem.d.ts +1 -1
  49. package/dist/FileSystem.d.ts.map +1 -1
  50. package/dist/FileSystem.js +5 -5
  51. package/dist/FileSystem.js.map +1 -1
  52. package/dist/Filter.d.ts +30 -1
  53. package/dist/Filter.d.ts.map +1 -1
  54. package/dist/Filter.js +15 -0
  55. package/dist/Filter.js.map +1 -1
  56. package/dist/Formatter.d.ts +131 -47
  57. package/dist/Formatter.d.ts.map +1 -1
  58. package/dist/Formatter.js +229 -51
  59. package/dist/Formatter.js.map +1 -1
  60. package/dist/Graph.d.ts +1 -1
  61. package/dist/Graph.d.ts.map +1 -1
  62. package/dist/Graph.js +2 -2
  63. package/dist/Graph.js.map +1 -1
  64. package/dist/JsonSchema.d.ts +299 -10
  65. package/dist/JsonSchema.d.ts.map +1 -1
  66. package/dist/JsonSchema.js +323 -4
  67. package/dist/JsonSchema.js.map +1 -1
  68. package/dist/Latch.d.ts +109 -0
  69. package/dist/Latch.d.ts.map +1 -0
  70. package/dist/Latch.js +72 -0
  71. package/dist/Latch.js.map +1 -0
  72. package/dist/LayerMap.d.ts +4 -4
  73. package/dist/LayerMap.d.ts.map +1 -1
  74. package/dist/LogLevel.d.ts +32 -0
  75. package/dist/LogLevel.d.ts.map +1 -1
  76. package/dist/LogLevel.js +28 -100
  77. package/dist/LogLevel.js.map +1 -1
  78. package/dist/Logger.d.ts +29 -95
  79. package/dist/Logger.d.ts.map +1 -1
  80. package/dist/Logger.js +2 -3
  81. package/dist/Logger.js.map +1 -1
  82. package/dist/Metric.d.ts +2 -2
  83. package/dist/Metric.d.ts.map +1 -1
  84. package/dist/Metric.js +1 -1
  85. package/dist/Metric.js.map +1 -1
  86. package/dist/Optic.d.ts +947 -18
  87. package/dist/Optic.d.ts.map +1 -1
  88. package/dist/Optic.js +454 -5
  89. package/dist/Optic.js.map +1 -1
  90. package/dist/Pipeable.d.ts +17 -0
  91. package/dist/Pipeable.d.ts.map +1 -1
  92. package/dist/Pipeable.js +19 -1
  93. package/dist/Pipeable.js.map +1 -1
  94. package/dist/PlatformError.d.ts +10 -9
  95. package/dist/PlatformError.d.ts.map +1 -1
  96. package/dist/PlatformError.js +2 -2
  97. package/dist/PlatformError.js.map +1 -1
  98. package/dist/Pool.d.ts +6 -4
  99. package/dist/Pool.d.ts.map +1 -1
  100. package/dist/Pool.js +7 -5
  101. package/dist/Pool.js.map +1 -1
  102. package/dist/PubSub.d.ts +3 -2
  103. package/dist/PubSub.d.ts.map +1 -1
  104. package/dist/PubSub.js +3 -2
  105. package/dist/PubSub.js.map +1 -1
  106. package/dist/Queue.d.ts.map +1 -1
  107. package/dist/Queue.js +0 -1
  108. package/dist/Queue.js.map +1 -1
  109. package/dist/Random.d.ts +18 -1
  110. package/dist/Random.d.ts.map +1 -1
  111. package/dist/Random.js +29 -12
  112. package/dist/Random.js.map +1 -1
  113. package/dist/RcMap.d.ts +2 -2
  114. package/dist/RcMap.d.ts.map +1 -1
  115. package/dist/RcMap.js +1 -1
  116. package/dist/RcMap.js.map +1 -1
  117. package/dist/RcRef.d.ts +1 -1
  118. package/dist/RcRef.d.ts.map +1 -1
  119. package/dist/Reducer.d.ts +166 -7
  120. package/dist/Reducer.d.ts.map +1 -1
  121. package/dist/Reducer.js +135 -1
  122. package/dist/Reducer.js.map +1 -1
  123. package/dist/References.d.ts +3 -3
  124. package/dist/References.d.ts.map +1 -1
  125. package/dist/Request.d.ts +1 -1
  126. package/dist/Request.d.ts.map +1 -1
  127. package/dist/Request.js +2 -1
  128. package/dist/Request.js.map +1 -1
  129. package/dist/RequestResolver.d.ts +6 -26
  130. package/dist/RequestResolver.d.ts.map +1 -1
  131. package/dist/RequestResolver.js +0 -20
  132. package/dist/RequestResolver.js.map +1 -1
  133. package/dist/Result.d.ts +12 -0
  134. package/dist/Result.d.ts.map +1 -1
  135. package/dist/Result.js +12 -0
  136. package/dist/Result.js.map +1 -1
  137. package/dist/Schedule.d.ts +33 -14
  138. package/dist/Schedule.d.ts.map +1 -1
  139. package/dist/Schedule.js +65 -24
  140. package/dist/Schedule.js.map +1 -1
  141. package/dist/Schema.d.ts +199 -49
  142. package/dist/Schema.d.ts.map +1 -1
  143. package/dist/Schema.js +386 -72
  144. package/dist/Schema.js.map +1 -1
  145. package/dist/SchemaAST.d.ts.map +1 -1
  146. package/dist/SchemaAST.js +2 -1
  147. package/dist/SchemaAST.js.map +1 -1
  148. package/dist/SchemaGetter.d.ts +2 -2
  149. package/dist/SchemaGetter.d.ts.map +1 -1
  150. package/dist/SchemaGetter.js +12 -14
  151. package/dist/SchemaGetter.js.map +1 -1
  152. package/dist/SchemaRepresentation.d.ts +44 -43
  153. package/dist/SchemaRepresentation.d.ts.map +1 -1
  154. package/dist/SchemaRepresentation.js +43 -24
  155. package/dist/SchemaRepresentation.js.map +1 -1
  156. package/dist/SchemaTransformation.d.ts +37 -0
  157. package/dist/SchemaTransformation.d.ts.map +1 -1
  158. package/dist/SchemaTransformation.js +80 -0
  159. package/dist/SchemaTransformation.js.map +1 -1
  160. package/dist/ScopedCache.d.ts +2 -2
  161. package/dist/ScopedCache.d.ts.map +1 -1
  162. package/dist/ScopedCache.js +1 -1
  163. package/dist/ScopedCache.js.map +1 -1
  164. package/dist/Semaphore.d.ts +211 -0
  165. package/dist/Semaphore.d.ts.map +1 -0
  166. package/dist/{PartitionedSemaphore.js → Semaphore.js} +97 -13
  167. package/dist/Semaphore.js.map +1 -0
  168. package/dist/Stream.d.ts +24 -24
  169. package/dist/Stream.d.ts.map +1 -1
  170. package/dist/Stream.js +12 -11
  171. package/dist/Stream.js.map +1 -1
  172. package/dist/Struct.d.ts +16 -0
  173. package/dist/Struct.d.ts.map +1 -1
  174. package/dist/Struct.js +22 -0
  175. package/dist/Struct.js.map +1 -1
  176. package/dist/SubscriptionRef.d.ts +2 -1
  177. package/dist/SubscriptionRef.d.ts.map +1 -1
  178. package/dist/SubscriptionRef.js +2 -1
  179. package/dist/SubscriptionRef.js.map +1 -1
  180. package/dist/SynchronizedRef.d.ts +2 -1
  181. package/dist/SynchronizedRef.d.ts.map +1 -1
  182. package/dist/SynchronizedRef.js +2 -1
  183. package/dist/SynchronizedRef.js.map +1 -1
  184. package/dist/Types.d.ts +14 -6
  185. package/dist/Types.d.ts.map +1 -1
  186. package/dist/index.d.ts +503 -19
  187. package/dist/index.d.ts.map +1 -1
  188. package/dist/index.js +503 -19
  189. package/dist/index.js.map +1 -1
  190. package/dist/internal/core.js +11 -3
  191. package/dist/internal/core.js.map +1 -1
  192. package/dist/internal/dateTime.js +3 -11
  193. package/dist/internal/dateTime.js.map +1 -1
  194. package/dist/internal/effect.js +85 -26
  195. package/dist/internal/effect.js.map +1 -1
  196. package/dist/internal/hashMap.js +2 -2
  197. package/dist/internal/hashMap.js.map +1 -1
  198. package/dist/internal/random.d.ts +2 -0
  199. package/dist/internal/random.d.ts.map +1 -0
  200. package/dist/internal/random.js +13 -0
  201. package/dist/internal/random.js.map +1 -0
  202. package/dist/internal/rcRef.js +3 -2
  203. package/dist/internal/rcRef.js.map +1 -1
  204. package/dist/testing/TestClock.d.ts +7 -6
  205. package/dist/testing/TestClock.d.ts.map +1 -1
  206. package/dist/testing/TestClock.js +6 -4
  207. package/dist/testing/TestClock.js.map +1 -1
  208. package/dist/testing/TestSchema.d.ts +6 -6
  209. package/dist/testing/TestSchema.d.ts.map +1 -1
  210. package/dist/unstable/ai/AiError.d.ts +48 -48
  211. package/dist/unstable/ai/AiError.d.ts.map +1 -1
  212. package/dist/unstable/ai/Chat.d.ts +3 -3
  213. package/dist/unstable/ai/Chat.d.ts.map +1 -1
  214. package/dist/unstable/ai/Chat.js +4 -3
  215. package/dist/unstable/ai/Chat.js.map +1 -1
  216. package/dist/unstable/ai/LanguageModel.d.ts +2 -2
  217. package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
  218. package/dist/unstable/ai/LanguageModel.js +41 -0
  219. package/dist/unstable/ai/LanguageModel.js.map +1 -1
  220. package/dist/unstable/ai/McpSchema.d.ts +51 -51
  221. package/dist/unstable/ai/McpServer.d.ts +1 -1
  222. package/dist/unstable/ai/McpServer.d.ts.map +1 -1
  223. package/dist/unstable/ai/McpServer.js.map +1 -1
  224. package/dist/unstable/ai/Prompt.d.ts +20 -20
  225. package/dist/unstable/ai/Prompt.d.ts.map +1 -1
  226. package/dist/unstable/ai/Response.d.ts +26 -26
  227. package/dist/unstable/ai/Response.d.ts.map +1 -1
  228. package/dist/unstable/ai/Response.js +1 -1
  229. package/dist/unstable/ai/Response.js.map +1 -1
  230. package/dist/unstable/cli/CliError.d.ts +5 -5
  231. package/dist/unstable/cli/CliOutput.js +37 -6
  232. package/dist/unstable/cli/CliOutput.js.map +1 -1
  233. package/dist/unstable/cli/Command.d.ts +199 -7
  234. package/dist/unstable/cli/Command.d.ts.map +1 -1
  235. package/dist/unstable/cli/Command.js +116 -6
  236. package/dist/unstable/cli/Command.js.map +1 -1
  237. package/dist/unstable/cli/HelpDoc.d.ts +60 -2
  238. package/dist/unstable/cli/HelpDoc.d.ts.map +1 -1
  239. package/dist/unstable/cli/internal/command.d.ts +11 -1
  240. package/dist/unstable/cli/internal/command.d.ts.map +1 -1
  241. package/dist/unstable/cli/internal/command.js +33 -8
  242. package/dist/unstable/cli/internal/command.js.map +1 -1
  243. package/dist/unstable/cli/internal/completions/CommandDescriptor.js +7 -2
  244. package/dist/unstable/cli/internal/completions/CommandDescriptor.js.map +1 -1
  245. package/dist/unstable/cli/internal/parser.js +10 -2
  246. package/dist/unstable/cli/internal/parser.js.map +1 -1
  247. package/dist/unstable/cluster/ClusterCron.d.ts +1 -1
  248. package/dist/unstable/cluster/ClusterCron.d.ts.map +1 -1
  249. package/dist/unstable/cluster/ClusterCron.js +1 -1
  250. package/dist/unstable/cluster/ClusterCron.js.map +1 -1
  251. package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  252. package/dist/unstable/cluster/ClusterWorkflowEngine.js +2 -1
  253. package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
  254. package/dist/unstable/cluster/Entity.d.ts +5 -4
  255. package/dist/unstable/cluster/Entity.d.ts.map +1 -1
  256. package/dist/unstable/cluster/Entity.js.map +1 -1
  257. package/dist/unstable/cluster/EntityResource.d.ts +2 -2
  258. package/dist/unstable/cluster/EntityResource.d.ts.map +1 -1
  259. package/dist/unstable/cluster/Envelope.d.ts +1 -1
  260. package/dist/unstable/cluster/K8sHttpClient.d.ts +1 -1
  261. package/dist/unstable/cluster/K8sHttpClient.js +1 -1
  262. package/dist/unstable/cluster/K8sHttpClient.js.map +1 -1
  263. package/dist/unstable/cluster/Message.d.ts +10 -10
  264. package/dist/unstable/cluster/MessageStorage.d.ts.map +1 -1
  265. package/dist/unstable/cluster/MessageStorage.js +2 -1
  266. package/dist/unstable/cluster/MessageStorage.js.map +1 -1
  267. package/dist/unstable/cluster/Reply.d.ts +6 -6
  268. package/dist/unstable/cluster/Runner.d.ts +1 -1
  269. package/dist/unstable/cluster/Runners.d.ts.map +1 -1
  270. package/dist/unstable/cluster/Runners.js +4 -3
  271. package/dist/unstable/cluster/Runners.js.map +1 -1
  272. package/dist/unstable/cluster/Sharding.d.ts +2 -2
  273. package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
  274. package/dist/unstable/cluster/Sharding.js +8 -6
  275. package/dist/unstable/cluster/Sharding.js.map +1 -1
  276. package/dist/unstable/cluster/ShardingConfig.d.ts +21 -21
  277. package/dist/unstable/cluster/ShardingConfig.d.ts.map +1 -1
  278. package/dist/unstable/cluster/ShardingConfig.js.map +1 -1
  279. package/dist/unstable/cluster/SqlRunnerStorage.js +1 -1
  280. package/dist/unstable/cluster/SqlRunnerStorage.js.map +1 -1
  281. package/dist/unstable/cluster/internal/entityManager.js +5 -4
  282. package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
  283. package/dist/unstable/cluster/internal/entityReaper.js +2 -1
  284. package/dist/unstable/cluster/internal/entityReaper.js.map +1 -1
  285. package/dist/unstable/cluster/internal/resourceRef.js +2 -1
  286. package/dist/unstable/cluster/internal/resourceRef.js.map +1 -1
  287. package/dist/unstable/devtools/DevToolsSchema.d.ts +36 -36
  288. package/dist/unstable/encoding/Msgpack.d.ts +1 -1
  289. package/dist/unstable/encoding/Ndjson.d.ts +1 -1
  290. package/dist/unstable/encoding/Sse.d.ts +4 -4
  291. package/dist/unstable/encoding/Sse.d.ts.map +1 -1
  292. package/dist/unstable/encoding/Sse.js.map +1 -1
  293. package/dist/unstable/eventlog/EventJournal.d.ts +2 -2
  294. package/dist/unstable/eventlog/EventLog.d.ts.map +1 -1
  295. package/dist/unstable/eventlog/EventLog.js +2 -1
  296. package/dist/unstable/eventlog/EventLog.js.map +1 -1
  297. package/dist/unstable/eventlog/EventLogRemote.d.ts +6 -6
  298. package/dist/unstable/http/Cookies.d.ts +3 -3
  299. package/dist/unstable/http/Cookies.d.ts.map +1 -1
  300. package/dist/unstable/http/Cookies.js +2 -2
  301. package/dist/unstable/http/Cookies.js.map +1 -1
  302. package/dist/unstable/http/Headers.d.ts.map +1 -1
  303. package/dist/unstable/http/Headers.js +27 -10
  304. package/dist/unstable/http/Headers.js.map +1 -1
  305. package/dist/unstable/http/HttpBody.d.ts +17 -2
  306. package/dist/unstable/http/HttpBody.d.ts.map +1 -1
  307. package/dist/unstable/http/HttpBody.js +28 -1
  308. package/dist/unstable/http/HttpBody.js.map +1 -1
  309. package/dist/unstable/http/HttpClient.d.ts +11 -11
  310. package/dist/unstable/http/HttpClient.d.ts.map +1 -1
  311. package/dist/unstable/http/HttpClient.js +4 -4
  312. package/dist/unstable/http/HttpClient.js.map +1 -1
  313. package/dist/unstable/http/HttpClientError.d.ts +7 -7
  314. package/dist/unstable/http/HttpClientRequest.d.ts +27 -11
  315. package/dist/unstable/http/HttpClientRequest.d.ts.map +1 -1
  316. package/dist/unstable/http/HttpClientRequest.js +15 -3
  317. package/dist/unstable/http/HttpClientRequest.js.map +1 -1
  318. package/dist/unstable/http/HttpEffect.d.ts.map +1 -1
  319. package/dist/unstable/http/HttpEffect.js +30 -33
  320. package/dist/unstable/http/HttpEffect.js.map +1 -1
  321. package/dist/unstable/http/HttpMethod.d.ts +4 -4
  322. package/dist/unstable/http/HttpMethod.d.ts.map +1 -1
  323. package/dist/unstable/http/HttpMethod.js +3 -3
  324. package/dist/unstable/http/HttpMethod.js.map +1 -1
  325. package/dist/unstable/http/HttpMiddleware.d.ts +1 -6
  326. package/dist/unstable/http/HttpMiddleware.d.ts.map +1 -1
  327. package/dist/unstable/http/HttpMiddleware.js +4 -9
  328. package/dist/unstable/http/HttpMiddleware.js.map +1 -1
  329. package/dist/unstable/http/HttpServerError.d.ts +14 -32
  330. package/dist/unstable/http/HttpServerError.d.ts.map +1 -1
  331. package/dist/unstable/http/HttpServerError.js +11 -27
  332. package/dist/unstable/http/HttpServerError.js.map +1 -1
  333. package/dist/unstable/http/HttpServerRespondable.d.ts +2 -2
  334. package/dist/unstable/http/HttpServerRespondable.d.ts.map +1 -1
  335. package/dist/unstable/http/HttpServerRespondable.js +5 -5
  336. package/dist/unstable/http/HttpServerRespondable.js.map +1 -1
  337. package/dist/unstable/http/HttpServerResponse.d.ts +2 -1
  338. package/dist/unstable/http/HttpServerResponse.d.ts.map +1 -1
  339. package/dist/unstable/http/HttpServerResponse.js +3 -1
  340. package/dist/unstable/http/HttpServerResponse.js.map +1 -1
  341. package/dist/unstable/http/Multipart.d.ts +3 -3
  342. package/dist/unstable/http/UrlParams.d.ts +14 -6
  343. package/dist/unstable/http/UrlParams.d.ts.map +1 -1
  344. package/dist/unstable/http/UrlParams.js +1 -1
  345. package/dist/unstable/http/UrlParams.js.map +1 -1
  346. package/dist/unstable/httpapi/HttpApiBuilder.js +6 -6
  347. package/dist/unstable/httpapi/HttpApiBuilder.js.map +1 -1
  348. package/dist/unstable/httpapi/HttpApiClient.js +3 -3
  349. package/dist/unstable/httpapi/HttpApiClient.js.map +1 -1
  350. package/dist/unstable/httpapi/HttpApiEndpoint.d.ts +21 -39
  351. package/dist/unstable/httpapi/HttpApiEndpoint.d.ts.map +1 -1
  352. package/dist/unstable/httpapi/HttpApiEndpoint.js +15 -24
  353. package/dist/unstable/httpapi/HttpApiEndpoint.js.map +1 -1
  354. package/dist/unstable/httpapi/HttpApiError.d.ts +11 -0
  355. package/dist/unstable/httpapi/HttpApiError.d.ts.map +1 -1
  356. package/dist/unstable/httpapi/HttpApiError.js +29 -9
  357. package/dist/unstable/httpapi/HttpApiError.js.map +1 -1
  358. package/dist/unstable/httpapi/HttpApiScalar.d.ts +6 -0
  359. package/dist/unstable/httpapi/HttpApiScalar.d.ts.map +1 -1
  360. package/dist/unstable/httpapi/HttpApiScalar.js.map +1 -1
  361. package/dist/unstable/httpapi/OpenApi.d.ts.map +1 -1
  362. package/dist/unstable/httpapi/OpenApi.js +18 -16
  363. package/dist/unstable/httpapi/OpenApi.js.map +1 -1
  364. package/dist/unstable/observability/Otlp.d.ts +12 -12
  365. package/dist/unstable/observability/Otlp.d.ts.map +1 -1
  366. package/dist/unstable/observability/OtlpExporter.d.ts +2 -2
  367. package/dist/unstable/observability/OtlpExporter.d.ts.map +1 -1
  368. package/dist/unstable/observability/OtlpExporter.js +1 -1
  369. package/dist/unstable/observability/OtlpExporter.js.map +1 -1
  370. package/dist/unstable/observability/OtlpLogger.d.ts +4 -4
  371. package/dist/unstable/observability/OtlpLogger.d.ts.map +1 -1
  372. package/dist/unstable/observability/OtlpLogger.js +7 -4
  373. package/dist/unstable/observability/OtlpLogger.js.map +1 -1
  374. package/dist/unstable/observability/OtlpMetrics.d.ts +4 -4
  375. package/dist/unstable/observability/OtlpMetrics.d.ts.map +1 -1
  376. package/dist/unstable/observability/OtlpTracer.d.ts +4 -4
  377. package/dist/unstable/observability/OtlpTracer.d.ts.map +1 -1
  378. package/dist/unstable/persistence/KeyValueStore.d.ts +1 -1
  379. package/dist/unstable/persistence/KeyValueStore.js +6 -6
  380. package/dist/unstable/persistence/KeyValueStore.js.map +1 -1
  381. package/dist/unstable/persistence/Persistable.d.ts +2 -2
  382. package/dist/unstable/persistence/Persistable.d.ts.map +1 -1
  383. package/dist/unstable/persistence/PersistedCache.d.ts +6 -5
  384. package/dist/unstable/persistence/PersistedCache.d.ts.map +1 -1
  385. package/dist/unstable/persistence/PersistedCache.js +2 -1
  386. package/dist/unstable/persistence/PersistedCache.js.map +1 -1
  387. package/dist/unstable/persistence/PersistedQueue.d.ts +12 -12
  388. package/dist/unstable/persistence/PersistedQueue.d.ts.map +1 -1
  389. package/dist/unstable/persistence/PersistedQueue.js +12 -11
  390. package/dist/unstable/persistence/PersistedQueue.js.map +1 -1
  391. package/dist/unstable/persistence/Persistence.d.ts +1 -1
  392. package/dist/unstable/persistence/Persistence.d.ts.map +1 -1
  393. package/dist/unstable/persistence/Persistence.js +2 -2
  394. package/dist/unstable/persistence/Persistence.js.map +1 -1
  395. package/dist/unstable/persistence/RateLimiter.d.ts +3 -3
  396. package/dist/unstable/persistence/RateLimiter.d.ts.map +1 -1
  397. package/dist/unstable/persistence/RateLimiter.js +1 -1
  398. package/dist/unstable/persistence/RateLimiter.js.map +1 -1
  399. package/dist/unstable/process/ChildProcess.d.ts +2 -2
  400. package/dist/unstable/process/ChildProcess.d.ts.map +1 -1
  401. package/dist/unstable/process/ChildProcessSpawner.d.ts +6 -0
  402. package/dist/unstable/process/ChildProcessSpawner.d.ts.map +1 -1
  403. package/dist/unstable/process/ChildProcessSpawner.js.map +1 -1
  404. package/dist/unstable/reactivity/Atom.d.ts +6 -6
  405. package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
  406. package/dist/unstable/reactivity/Atom.js +15 -12
  407. package/dist/unstable/reactivity/Atom.js.map +1 -1
  408. package/dist/unstable/reactivity/AtomHttpApi.d.ts +6 -6
  409. package/dist/unstable/reactivity/AtomHttpApi.d.ts.map +1 -1
  410. package/dist/unstable/reactivity/AtomHttpApi.js +3 -3
  411. package/dist/unstable/reactivity/AtomHttpApi.js.map +1 -1
  412. package/dist/unstable/reactivity/AtomRegistry.d.ts +6 -0
  413. package/dist/unstable/reactivity/AtomRegistry.d.ts.map +1 -1
  414. package/dist/unstable/reactivity/AtomRegistry.js +22 -1
  415. package/dist/unstable/reactivity/AtomRegistry.js.map +1 -1
  416. package/dist/unstable/reactivity/AtomRpc.d.ts +1 -1
  417. package/dist/unstable/reactivity/AtomRpc.d.ts.map +1 -1
  418. package/dist/unstable/reactivity/AtomRpc.js +1 -1
  419. package/dist/unstable/reactivity/AtomRpc.js.map +1 -1
  420. package/dist/unstable/reactivity/Hydration.d.ts +39 -0
  421. package/dist/unstable/reactivity/Hydration.d.ts.map +1 -0
  422. package/dist/unstable/reactivity/Hydration.js +76 -0
  423. package/dist/unstable/reactivity/Hydration.js.map +1 -0
  424. package/dist/unstable/reactivity/index.d.ts +4 -0
  425. package/dist/unstable/reactivity/index.d.ts.map +1 -1
  426. package/dist/unstable/reactivity/index.js +4 -0
  427. package/dist/unstable/reactivity/index.js.map +1 -1
  428. package/dist/unstable/rpc/Rpc.d.ts +2 -2
  429. package/dist/unstable/rpc/Rpc.d.ts.map +1 -1
  430. package/dist/unstable/rpc/RpcClient.d.ts +5 -26
  431. package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
  432. package/dist/unstable/rpc/RpcClient.js +6 -13
  433. package/dist/unstable/rpc/RpcClient.js.map +1 -1
  434. package/dist/unstable/rpc/RpcServer.d.ts.map +1 -1
  435. package/dist/unstable/rpc/RpcServer.js +9 -3
  436. package/dist/unstable/rpc/RpcServer.js.map +1 -1
  437. package/dist/unstable/rpc/Utils.d.ts.map +1 -1
  438. package/dist/unstable/rpc/Utils.js +2 -1
  439. package/dist/unstable/rpc/Utils.js.map +1 -1
  440. package/dist/unstable/schema/Model.d.ts +4 -4
  441. package/dist/unstable/schema/Model.d.ts.map +1 -1
  442. package/dist/unstable/schema/VariantSchema.d.ts +2 -2
  443. package/dist/unstable/schema/VariantSchema.d.ts.map +1 -1
  444. package/dist/unstable/schema/VariantSchema.js +13 -2
  445. package/dist/unstable/schema/VariantSchema.js.map +1 -1
  446. package/dist/unstable/socket/Socket.d.ts +4 -4
  447. package/dist/unstable/socket/Socket.d.ts.map +1 -1
  448. package/dist/unstable/socket/Socket.js +3 -2
  449. package/dist/unstable/socket/Socket.js.map +1 -1
  450. package/dist/unstable/socket/SocketServer.d.ts +3 -3
  451. package/dist/unstable/sql/Migrator.d.ts +1 -1
  452. package/dist/unstable/sql/SqlError.d.ts +2 -2
  453. package/dist/unstable/sql/SqlModel.d.ts +2 -2
  454. package/dist/unstable/sql/SqlModel.d.ts.map +1 -1
  455. package/dist/unstable/sql/SqlSchema.d.ts +24 -1
  456. package/dist/unstable/sql/SqlSchema.d.ts.map +1 -1
  457. package/dist/unstable/sql/SqlSchema.js +24 -3
  458. package/dist/unstable/sql/SqlSchema.js.map +1 -1
  459. package/dist/unstable/sql/Statement.js +0 -1
  460. package/dist/unstable/sql/Statement.js.map +1 -1
  461. package/dist/unstable/workers/Worker.d.ts.map +1 -1
  462. package/dist/unstable/workers/Worker.js +2 -1
  463. package/dist/unstable/workers/Worker.js.map +1 -1
  464. package/dist/unstable/workflow/DurableClock.d.ts +3 -3
  465. package/dist/unstable/workflow/DurableClock.d.ts.map +1 -1
  466. package/dist/unstable/workflow/DurableClock.js +3 -3
  467. package/dist/unstable/workflow/DurableClock.js.map +1 -1
  468. package/dist/unstable/workflow/DurableDeferred.js +2 -2
  469. package/dist/unstable/workflow/DurableDeferred.js.map +1 -1
  470. package/dist/unstable/workflow/Workflow.d.ts +2 -2
  471. package/dist/unstable/workflow/WorkflowEngine.d.ts +8 -1
  472. package/dist/unstable/workflow/WorkflowEngine.d.ts.map +1 -1
  473. package/dist/unstable/workflow/WorkflowEngine.js +133 -1
  474. package/dist/unstable/workflow/WorkflowEngine.js.map +1 -1
  475. package/package.json +2 -2
  476. package/src/Cache.ts +3 -3
  477. package/src/Cause.ts +1 -1
  478. package/src/Channel.ts +15 -13
  479. package/src/Combiner.ts +280 -13
  480. package/src/Config.ts +3 -3
  481. package/src/Data.ts +538 -374
  482. package/src/DateTime.ts +24 -164
  483. package/src/Duration.ts +15 -15
  484. package/src/Effect.ts +378 -269
  485. package/src/Encoding.ts +879 -0
  486. package/src/Equal.ts +278 -111
  487. package/src/ErrorReporter.ts +459 -0
  488. package/src/FileSystem.ts +7 -8
  489. package/src/Filter.ts +48 -1
  490. package/src/Formatter.ts +253 -51
  491. package/src/Graph.ts +8 -5
  492. package/src/JsonSchema.ts +383 -10
  493. package/src/Latch.ts +112 -0
  494. package/src/LayerMap.ts +5 -5
  495. package/src/LogLevel.ts +37 -0
  496. package/src/Logger.ts +33 -100
  497. package/src/Metric.ts +4 -4
  498. package/src/Optic.ts +948 -19
  499. package/src/Pipeable.ts +32 -1
  500. package/src/PlatformError.ts +5 -5
  501. package/src/Pool.ts +13 -11
  502. package/src/PubSub.ts +10 -9
  503. package/src/Queue.ts +0 -1
  504. package/src/Random.ts +33 -14
  505. package/src/RcMap.ts +5 -5
  506. package/src/RcRef.ts +1 -1
  507. package/src/Reducer.ts +166 -7
  508. package/src/References.ts +4 -4
  509. package/src/Request.ts +3 -2
  510. package/src/RequestResolver.ts +9 -29
  511. package/src/Result.ts +13 -0
  512. package/src/Schedule.ts +279 -140
  513. package/src/Schema.ts +575 -113
  514. package/src/SchemaAST.ts +2 -1
  515. package/src/SchemaGetter.ts +12 -14
  516. package/src/SchemaRepresentation.ts +43 -24
  517. package/src/SchemaTransformation.ts +104 -0
  518. package/src/ScopedCache.ts +3 -3
  519. package/src/Semaphore.ts +356 -0
  520. package/src/Stream.ts +50 -49
  521. package/src/Struct.ts +26 -0
  522. package/src/SubscriptionRef.ts +3 -2
  523. package/src/SynchronizedRef.ts +3 -2
  524. package/src/Types.ts +12 -2
  525. package/src/index.ts +507 -20
  526. package/src/internal/core.ts +12 -5
  527. package/src/internal/dateTime.ts +9 -30
  528. package/src/internal/effect.ts +194 -51
  529. package/src/internal/hashMap.ts +2 -2
  530. package/src/internal/random.ts +20 -0
  531. package/src/internal/rcRef.ts +4 -3
  532. package/src/testing/TestClock.ts +13 -11
  533. package/src/testing/TestSchema.ts +8 -8
  534. package/src/unstable/ai/AiError.ts +2 -2
  535. package/src/unstable/ai/Chat.ts +12 -11
  536. package/src/unstable/ai/LanguageModel.ts +74 -3
  537. package/src/unstable/ai/McpServer.ts +2 -2
  538. package/src/unstable/ai/Prompt.ts +37 -37
  539. package/src/unstable/ai/Response.ts +25 -25
  540. package/src/unstable/cli/CliOutput.ts +45 -6
  541. package/src/unstable/cli/Command.ts +298 -11
  542. package/src/unstable/cli/HelpDoc.ts +68 -2
  543. package/src/unstable/cli/internal/command.ts +47 -11
  544. package/src/unstable/cli/internal/completions/CommandDescriptor.ts +7 -2
  545. package/src/unstable/cli/internal/parser.ts +11 -3
  546. package/src/unstable/cluster/ClusterCron.ts +2 -2
  547. package/src/unstable/cluster/ClusterWorkflowEngine.ts +3 -2
  548. package/src/unstable/cluster/Entity.ts +7 -6
  549. package/src/unstable/cluster/EntityResource.ts +4 -4
  550. package/src/unstable/cluster/Envelope.ts +1 -1
  551. package/src/unstable/cluster/K8sHttpClient.ts +1 -1
  552. package/src/unstable/cluster/MessageStorage.ts +3 -5
  553. package/src/unstable/cluster/Runners.ts +6 -5
  554. package/src/unstable/cluster/Sharding.ts +11 -9
  555. package/src/unstable/cluster/ShardingConfig.ts +10 -11
  556. package/src/unstable/cluster/SqlRunnerStorage.ts +1 -1
  557. package/src/unstable/cluster/internal/entityManager.ts +9 -8
  558. package/src/unstable/cluster/internal/entityReaper.ts +2 -1
  559. package/src/unstable/cluster/internal/resourceRef.ts +2 -1
  560. package/src/unstable/encoding/Sse.ts +2 -4
  561. package/src/unstable/eventlog/EventLog.ts +2 -1
  562. package/src/unstable/http/Cookies.ts +3 -3
  563. package/src/unstable/http/Headers.ts +28 -13
  564. package/src/unstable/http/HttpBody.ts +42 -1
  565. package/src/unstable/http/HttpClient.ts +19 -19
  566. package/src/unstable/http/HttpClientRequest.ts +38 -13
  567. package/src/unstable/http/HttpEffect.ts +27 -30
  568. package/src/unstable/http/HttpMethod.ts +16 -4
  569. package/src/unstable/http/HttpMiddleware.ts +5 -10
  570. package/src/unstable/http/HttpServerError.ts +13 -27
  571. package/src/unstable/http/HttpServerRespondable.ts +6 -6
  572. package/src/unstable/http/HttpServerResponse.ts +4 -2
  573. package/src/unstable/http/Multipart.ts +2 -2
  574. package/src/unstable/http/UrlParams.ts +20 -5
  575. package/src/unstable/httpapi/HttpApiBuilder.ts +6 -5
  576. package/src/unstable/httpapi/HttpApiClient.ts +3 -3
  577. package/src/unstable/httpapi/HttpApiEndpoint.ts +47 -72
  578. package/src/unstable/httpapi/HttpApiError.ts +30 -9
  579. package/src/unstable/httpapi/HttpApiScalar.ts +6 -0
  580. package/src/unstable/httpapi/OpenApi.ts +18 -16
  581. package/src/unstable/observability/Otlp.ts +12 -12
  582. package/src/unstable/observability/OtlpExporter.ts +3 -3
  583. package/src/unstable/observability/OtlpLogger.ts +13 -9
  584. package/src/unstable/observability/OtlpMetrics.ts +4 -4
  585. package/src/unstable/observability/OtlpTracer.ts +4 -4
  586. package/src/unstable/persistence/KeyValueStore.ts +6 -6
  587. package/src/unstable/persistence/Persistable.ts +2 -2
  588. package/src/unstable/persistence/PersistedCache.ts +20 -9
  589. package/src/unstable/persistence/PersistedQueue.ts +25 -24
  590. package/src/unstable/persistence/Persistence.ts +3 -3
  591. package/src/unstable/persistence/RateLimiter.ts +4 -4
  592. package/src/unstable/process/ChildProcess.ts +2 -2
  593. package/src/unstable/process/ChildProcessSpawner.ts +6 -0
  594. package/src/unstable/reactivity/Atom.ts +20 -18
  595. package/src/unstable/reactivity/AtomHttpApi.ts +19 -18
  596. package/src/unstable/reactivity/AtomRegistry.ts +29 -1
  597. package/src/unstable/reactivity/AtomRpc.ts +3 -3
  598. package/src/unstable/reactivity/Hydration.ts +112 -0
  599. package/src/unstable/reactivity/index.ts +5 -0
  600. package/src/unstable/rpc/Rpc.ts +3 -3
  601. package/src/unstable/rpc/RpcClient.ts +12 -54
  602. package/src/unstable/rpc/RpcServer.ts +10 -4
  603. package/src/unstable/rpc/Utils.ts +2 -1
  604. package/src/unstable/schema/VariantSchema.ts +36 -7
  605. package/src/unstable/socket/Socket.ts +7 -6
  606. package/src/unstable/sql/SqlModel.ts +2 -2
  607. package/src/unstable/sql/SqlSchema.ts +62 -13
  608. package/src/unstable/sql/Statement.ts +0 -1
  609. package/src/unstable/workers/Worker.ts +2 -1
  610. package/src/unstable/workflow/DurableClock.ts +8 -8
  611. package/src/unstable/workflow/DurableDeferred.ts +2 -2
  612. package/src/unstable/workflow/WorkflowEngine.ts +181 -2
  613. package/dist/PartitionedSemaphore.d.ts +0 -52
  614. package/dist/PartitionedSemaphore.d.ts.map +0 -1
  615. package/dist/PartitionedSemaphore.js.map +0 -1
  616. package/dist/encoding/Base64.d.ts +0 -67
  617. package/dist/encoding/Base64.d.ts.map +0 -1
  618. package/dist/encoding/Base64.js +0 -146
  619. package/dist/encoding/Base64.js.map +0 -1
  620. package/dist/encoding/Base64Url.d.ts +0 -60
  621. package/dist/encoding/Base64Url.d.ts.map +0 -1
  622. package/dist/encoding/Base64Url.js +0 -89
  623. package/dist/encoding/Base64Url.js.map +0 -1
  624. package/dist/encoding/EncodingError.d.ts +0 -31
  625. package/dist/encoding/EncodingError.d.ts.map +0 -1
  626. package/dist/encoding/EncodingError.js +0 -22
  627. package/dist/encoding/EncodingError.js.map +0 -1
  628. package/dist/encoding/Hex.d.ts +0 -61
  629. package/dist/encoding/Hex.d.ts.map +0 -1
  630. package/dist/encoding/Hex.js +0 -115
  631. package/dist/encoding/Hex.js.map +0 -1
  632. package/dist/encoding/index.d.ts +0 -26
  633. package/dist/encoding/index.d.ts.map +0 -1
  634. package/dist/encoding/index.js +0 -27
  635. package/dist/encoding/index.js.map +0 -1
  636. package/src/PartitionedSemaphore.ts +0 -182
  637. package/src/encoding/Base64.ts +0 -366
  638. package/src/encoding/Base64Url.ts +0 -104
  639. package/src/encoding/EncodingError.ts +0 -35
  640. package/src/encoding/Hex.ts +0 -390
  641. package/src/encoding/index.ts +0 -31
@@ -0,0 +1,459 @@
1
+ /**
2
+ * Pluggable error reporting for Effect programs.
3
+ *
4
+ * Reporting is triggered by `Effect.withErrorReporting`,
5
+ * `ErrorReporter.report`, or built-in reporting boundaries in the HTTP and
6
+ * RPC server modules.
7
+ *
8
+ * Each reporter receives a structured callback with the failing `Cause`, a
9
+ * pretty-printed `Error`, severity, and any extra attributes attached to the
10
+ * original error — making it straightforward to forward failures to Sentry,
11
+ * Datadog, or a custom logging backend.
12
+ *
13
+ * Use the annotation symbols (`ignore`, `severity`, `attributes`) on your
14
+ * error classes to control reporting behavior per-error.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * import { Data, Effect, ErrorReporter } from "effect"
19
+ *
20
+ * // A reporter that logs to the console
21
+ * const consoleReporter = ErrorReporter.make(({ error, severity }) => {
22
+ * console.error(`[${severity}]`, error.message)
23
+ * })
24
+ *
25
+ * // An error that should be ignored by reporters
26
+ * class NotFoundError extends Data.TaggedError("NotFoundError")<{}> {
27
+ * readonly [ErrorReporter.ignore] = true
28
+ * }
29
+ *
30
+ * // An error with custom severity and attributes
31
+ * class RateLimitError extends Data.TaggedError("RateLimitError")<{
32
+ * readonly retryAfter: number
33
+ * }> {
34
+ * readonly [ErrorReporter.severity] = "Warn" as const
35
+ * readonly [ErrorReporter.attributes] = {
36
+ * retryAfter: this.retryAfter
37
+ * }
38
+ * }
39
+ *
40
+ * // Opt in to error reporting with Effect.withErrorReporting
41
+ * const program = Effect.gen(function*() {
42
+ * yield* new RateLimitError({ retryAfter: 60 })
43
+ * }).pipe(
44
+ * Effect.withErrorReporting,
45
+ * Effect.provide(ErrorReporter.layer([consoleReporter]))
46
+ * )
47
+ * ```
48
+ *
49
+ * @since 4.0.0
50
+ */
51
+ import type * as Cause from "./Cause.ts"
52
+ import * as Effect from "./Effect.ts"
53
+ import type * as Fiber from "./Fiber.ts"
54
+ import * as effect from "./internal/effect.ts"
55
+ import * as Layer from "./Layer.ts"
56
+ import * as LogLevel from "./LogLevel.ts"
57
+ import type { Severity } from "./LogLevel.ts"
58
+ import type { ReadonlyRecord } from "./Record.ts"
59
+ import type * as Scope from "./Scope.ts"
60
+ import type * as ServiceMap from "./ServiceMap.ts"
61
+
62
+ /**
63
+ * @since 4.0.0
64
+ * @category Type Identifiers
65
+ */
66
+ export type TypeId = "~effect/ErrorReporter"
67
+
68
+ /**
69
+ * @since 4.0.0
70
+ * @category Type Identifiers
71
+ */
72
+ export const TypeId: TypeId = "~effect/ErrorReporter"
73
+
74
+ /**
75
+ * An `ErrorReporter` receives reported failures and forwards them to an
76
+ * external system (logging service, error tracker, etc.).
77
+ *
78
+ * Reporting is triggered by `Effect.withErrorReporting`,
79
+ * `ErrorReporter.report`, or built-in boundaries in the HTTP and RPC server
80
+ * modules. Use {@link make} to create a reporter — it handles deduplication
81
+ * and per-error annotation extraction automatically.
82
+ *
83
+ * @since 4.0.0
84
+ * @category Models
85
+ */
86
+ export interface ErrorReporter {
87
+ readonly [TypeId]: TypeId
88
+ report(options: {
89
+ readonly cause: Cause.Cause<unknown>
90
+ readonly fiber: Fiber.Fiber<unknown, unknown>
91
+ readonly timestamp: bigint
92
+ }): void
93
+ }
94
+
95
+ /**
96
+ * Creates an `ErrorReporter` from a callback.
97
+ *
98
+ * The returned reporter automatically deduplicates causes and individual
99
+ * errors (the same object is never reported twice), skips interruptions,
100
+ * and resolves the `ignore`, `severity`, and `attributes` annotations on
101
+ * each error before invoking your callback.
102
+ *
103
+ * @example
104
+ * ```ts
105
+ * import { ErrorReporter } from "effect"
106
+ *
107
+ * // Forward every failure to the console
108
+ * const consoleReporter = ErrorReporter.make(
109
+ * ({ error, severity, attributes }) => {
110
+ * console.error(`[${severity}]`, error.message, attributes)
111
+ * }
112
+ * )
113
+ * ```
114
+ *
115
+ * @since 4.0.0
116
+ * @category Constructors
117
+ */
118
+ export const make = (
119
+ report: (options: {
120
+ readonly cause: Cause.Cause<unknown>
121
+ readonly error: Error
122
+ readonly attributes: ReadonlyRecord<string, unknown>
123
+ readonly severity: Severity
124
+ readonly fiber: Fiber.Fiber<unknown, unknown>
125
+ readonly timestamp: bigint
126
+ }) => void
127
+ ): ErrorReporter => {
128
+ const reported = new WeakSet<Cause.Cause<unknown> | object>()
129
+ return {
130
+ [TypeId]: TypeId,
131
+ report(options) {
132
+ if (reported.has(options.cause)) return
133
+ reported.add(options.cause)
134
+ for (let i = 0; i < options.cause.reasons.length; i++) {
135
+ const reason = options.cause.reasons[i]
136
+ if (reason._tag === "Interrupt") continue
137
+ const original = reason._tag === "Fail" ? reason.error : reason.defect
138
+ const isObject = typeof original === "object" && original !== null
139
+ if (isObject) {
140
+ if (reported.has(original)) continue
141
+ reported.add(original)
142
+ }
143
+ if (isIgnored(original)) continue
144
+ const pretty = effect.causePrettyError(original as any, reason.annotations)
145
+ report({
146
+ ...options,
147
+ error: pretty,
148
+ severity: isObject ? getSeverity(original) : "Error",
149
+ attributes: isObject ? getAttributes(original) : emptyAttributes
150
+ })
151
+ }
152
+ }
153
+ }
154
+ }
155
+
156
+ /**
157
+ * A `ServiceMap.Reference` holding the set of active `ErrorReporter`s for the
158
+ * current fiber. Defaults to an empty set (no reporting).
159
+ *
160
+ * Prefer {@link layer} to configure reporters via the `Layer` API. Use this
161
+ * reference directly only when you need low-level control (e.g. reading the
162
+ * current reporters or swapping them inside a `FiberRef`).
163
+ *
164
+ * @since 4.0.0
165
+ * @category References
166
+ */
167
+ export const CurrentErrorReporters: ServiceMap.Reference<ReadonlySet<ErrorReporter>> = effect.CurrentErrorReporters
168
+
169
+ /**
170
+ * Creates a `Layer` that registers one or more `ErrorReporter`s.
171
+ *
172
+ * Reporters can be plain `ErrorReporter` values or effectful
173
+ * `Effect<ErrorReporter>` values that are resolved when the layer is built.
174
+ *
175
+ * By default the provided reporters **replace** any previously registered
176
+ * reporters. Set `mergeWithExisting: true` to add them alongside existing
177
+ * ones.
178
+ *
179
+ * @example
180
+ * ```ts
181
+ * import { Effect, ErrorReporter } from "effect"
182
+ *
183
+ * const consoleReporter = ErrorReporter.make(({ error, severity }) => {
184
+ * console.error(`[${severity}]`, error.message)
185
+ * })
186
+ *
187
+ * const metricsReporter = ErrorReporter.make(({ severity }) => {
188
+ * // increment an error counter by severity
189
+ * })
190
+ *
191
+ * // Replace all existing reporters
192
+ * const ReporterLive = ErrorReporter.layer([
193
+ * consoleReporter,
194
+ * metricsReporter
195
+ * ])
196
+ *
197
+ * // Add to existing reporters instead of replacing
198
+ * const ReporterMerged = ErrorReporter.layer(
199
+ * [metricsReporter],
200
+ * { mergeWithExisting: true }
201
+ * )
202
+ *
203
+ * const program = Effect.gen(function*() {
204
+ * yield* Effect.fail("boom")
205
+ * }).pipe(
206
+ * Effect.withErrorReporting,
207
+ * Effect.provide(ReporterLive)
208
+ * )
209
+ * ```
210
+ *
211
+ * @since 4.0.0
212
+ * @category Layers
213
+ */
214
+ export const layer = <
215
+ const Reporters extends ReadonlyArray<ErrorReporter | Effect.Effect<ErrorReporter, any, any>>
216
+ >(
217
+ reporters: Reporters,
218
+ options?: { readonly mergeWithExisting?: boolean | undefined } | undefined
219
+ ): Layer.Layer<
220
+ never,
221
+ Reporters extends readonly [] ? never : Effect.Error<Reporters[number]>,
222
+ Exclude<
223
+ Reporters extends readonly [] ? never : Effect.Services<Reporters[number]>,
224
+ Scope.Scope
225
+ >
226
+ > =>
227
+ Layer.effect(
228
+ CurrentErrorReporters,
229
+ Effect.withFiber(Effect.fnUntraced(function*(fiber) {
230
+ const currentReporters = new Set(
231
+ options?.mergeWithExisting === true ? fiber.getRef(effect.CurrentErrorReporters) : []
232
+ )
233
+ for (const reporter of reporters) {
234
+ currentReporters.add(Effect.isEffect(reporter) ? yield* reporter : reporter)
235
+ }
236
+ return currentReporters
237
+ }))
238
+ )
239
+
240
+ /**
241
+ * Manually report a `Cause` to all registered `ErrorReporter`s on the
242
+ * current fiber.
243
+ *
244
+ * This is useful when you want to report an error for observability without
245
+ * actually failing the fiber.
246
+ *
247
+ * @example
248
+ * ```ts
249
+ * import { Cause, Effect, ErrorReporter } from "effect"
250
+ *
251
+ * // Log the cause for monitoring, then continue with a fallback
252
+ * const program = Effect.gen(function*() {
253
+ * const cause = Cause.fail("something went wrong")
254
+ * yield* ErrorReporter.report(cause)
255
+ * return "fallback value"
256
+ * })
257
+ * ```
258
+ *
259
+ * @since 4.0.0
260
+ * @category Reporting
261
+ */
262
+ export const report = <E>(cause: Cause.Cause<E>): Effect.Effect<void> =>
263
+ Effect.withFiber((fiber) => {
264
+ effect.reportCauseUnsafe(fiber, cause)
265
+ return Effect.void
266
+ })
267
+
268
+ /**
269
+ * Interface that errors can implement to control reporting behavior.
270
+ *
271
+ * All three annotation properties are optional:
272
+ * - `[ErrorReporter.ignore]` — when `true`, the error is never reported
273
+ * - `[ErrorReporter.severity]` — overrides the default `"Error"` severity
274
+ * - `[ErrorReporter.attributes]` — extra key/value pairs forwarded to reporters
275
+ *
276
+ * The global `Error` interface is augmented with `Reportable`, so these
277
+ * properties are available on all `Error` instances.
278
+ *
279
+ * @since 4.0.0
280
+ * @category Annotations
281
+ */
282
+ export interface Reportable {
283
+ readonly [ignore]?: boolean
284
+ readonly [severity]?: Severity
285
+ readonly [attributes]?: ReadonlyRecord<string, unknown>
286
+ }
287
+
288
+ declare global {
289
+ interface Error extends Reportable {}
290
+ }
291
+
292
+ /**
293
+ * Symbol key used to mark an error as unreportable.
294
+ *
295
+ * Set this property to `true` on any error class to prevent it from being
296
+ * forwarded to reporters. Useful for expected errors such as HTTP 404s.
297
+ *
298
+ * @example
299
+ * ```ts
300
+ * import { Data, ErrorReporter } from "effect"
301
+ *
302
+ * class NotFoundError extends Data.TaggedError("NotFoundError")<{}> {
303
+ * readonly [ErrorReporter.ignore] = true
304
+ * }
305
+ * ```
306
+ *
307
+ * @since 4.0.0
308
+ * @category Annotations
309
+ */
310
+ export type ignore = "~effect/ErrorReporter/ignore"
311
+
312
+ /**
313
+ * Symbol key used to mark an error as unreportable.
314
+ *
315
+ * Set this property to `true` on any error class to prevent it from being
316
+ * forwarded to reporters. Useful for expected errors such as HTTP 404s.
317
+ *
318
+ * @example
319
+ * ```ts
320
+ * import { Data, ErrorReporter } from "effect"
321
+ *
322
+ * class NotFoundError extends Data.TaggedError("NotFoundError")<{}> {
323
+ * readonly [ErrorReporter.ignore] = true
324
+ * }
325
+ * ```
326
+ *
327
+ * @since 4.0.0
328
+ * @category Annotations
329
+ */
330
+ export const ignore: ignore = "~effect/ErrorReporter/ignore"
331
+
332
+ /**
333
+ * Returns `true` if the given value has the `ErrorReporter.ignore` annotation
334
+ * set to `true`.
335
+ *
336
+ * @since 4.0.0
337
+ * @category Annotations
338
+ */
339
+ export const isIgnored = (u: unknown): boolean =>
340
+ typeof u === "object" && u !== null && ignore in u && u[ignore] === true
341
+
342
+ /**
343
+ * Symbol key used to override the severity level of an error.
344
+ *
345
+ * When set, the reporter callback receives this value as `severity` instead
346
+ * of the default `"Error"`. Accepted values are the `LogLevel.Severity`
347
+ * literals: `"Trace"`, `"Debug"`, `"Info"`, `"Warn"`, `"Error"`, `"Fatal"`.
348
+ *
349
+ * @example
350
+ * ```ts
351
+ * import { Data, ErrorReporter } from "effect"
352
+ *
353
+ * class DeprecationWarning extends Data.TaggedError("DeprecationWarning")<{}> {
354
+ * readonly [ErrorReporter.severity] = "Warn" as const
355
+ * }
356
+ * ```
357
+ *
358
+ * @since 4.0.0
359
+ * @category Annotations
360
+ */
361
+ export type severity = "~effect/ErrorReporter/severity"
362
+
363
+ /**
364
+ * Symbol key used to override the severity level of an error.
365
+ *
366
+ * When set, the reporter callback receives this value as `severity` instead
367
+ * of the default `"Error"`. Accepted values are the `LogLevel.Severity`
368
+ * literals: `"Trace"`, `"Debug"`, `"Info"`, `"Warn"`, `"Error"`, `"Fatal"`.
369
+ *
370
+ * @example
371
+ * ```ts
372
+ * import { Data, ErrorReporter } from "effect"
373
+ *
374
+ * class DeprecationWarning extends Data.TaggedError("DeprecationWarning")<{}> {
375
+ * readonly [ErrorReporter.severity] = "Warn" as const
376
+ * }
377
+ * ```
378
+ *
379
+ * @since 4.0.0
380
+ * @category Annotations
381
+ */
382
+ export const severity: severity = "~effect/ErrorReporter/severity"
383
+
384
+ /**
385
+ * Reads the `ErrorReporter.severity` annotation from an error object,
386
+ * falling back to `"Error"` when unset or invalid.
387
+ *
388
+ * @since 4.0.0
389
+ * @category Annotations
390
+ */
391
+ export const getSeverity = (error: object): Severity => {
392
+ if (severity in error && LogLevel.values.includes(error[severity] as Severity)) {
393
+ return error[severity] as Severity
394
+ }
395
+ return "Error"
396
+ }
397
+
398
+ /**
399
+ * Symbol key used to attach extra key/value metadata to an error report.
400
+ *
401
+ * Reporters receive these attributes alongside the error, making it easy to
402
+ * include contextual information such as user IDs, request IDs, or any
403
+ * domain-specific data useful for debugging.
404
+ *
405
+ * @example
406
+ * ```ts
407
+ * import { Data, ErrorReporter } from "effect"
408
+ *
409
+ * class PaymentError extends Data.TaggedError("PaymentError")<{
410
+ * readonly orderId: string
411
+ * }> {
412
+ * readonly [ErrorReporter.attributes] = {
413
+ * orderId: this.orderId
414
+ * }
415
+ * }
416
+ * ```
417
+ *
418
+ * @since 4.0.0
419
+ * @category Annotations
420
+ */
421
+ export type attributes = "~effect/ErrorReporter/attributes"
422
+
423
+ /**
424
+ * Symbol key used to attach extra key/value metadata to an error report.
425
+ *
426
+ * Reporters receive these attributes alongside the error, making it easy to
427
+ * include contextual information such as user IDs, request IDs, or any
428
+ * domain-specific data useful for debugging.
429
+ *
430
+ * @example
431
+ * ```ts
432
+ * import { Data, ErrorReporter } from "effect"
433
+ *
434
+ * class PaymentError extends Data.TaggedError("PaymentError")<{
435
+ * readonly orderId: string
436
+ * }> {
437
+ * readonly [ErrorReporter.attributes] = {
438
+ * orderId: this.orderId
439
+ * }
440
+ * }
441
+ * ```
442
+ *
443
+ * @since 4.0.0
444
+ * @category Annotations
445
+ */
446
+ export const attributes: attributes = "~effect/ErrorReporter/attributes"
447
+
448
+ /**
449
+ * Reads the `ErrorReporter.attributes` annotation from an error object,
450
+ * returning an empty record when unset.
451
+ *
452
+ * @since 4.0.0
453
+ * @category Annotations
454
+ */
455
+ export const getAttributes = (error: object): ReadonlyRecord<string, unknown> => {
456
+ return attributes in error ? error[attributes] as any : emptyAttributes
457
+ }
458
+
459
+ const emptyAttributes: ReadonlyRecord<string, unknown> = {}
package/src/FileSystem.ts CHANGED
@@ -733,8 +733,7 @@ export const make = (
733
733
  Effect.as(true),
734
734
  Effect.catchTag(
735
735
  "PlatformError",
736
- (e) =>
737
- e.reason._tag === "SystemError" && e.reason.kind === "NotFound" ? Effect.succeed(false) : Effect.fail(e)
736
+ (e) => e.reason._tag === "NotFound" ? Effect.succeed(false) : Effect.fail(e)
738
737
  )
739
738
  ),
740
739
  readFileString: (path, encoding) =>
@@ -757,16 +756,16 @@ export const make = (
757
756
  const bytesToRead = options?.bytesToRead !== undefined ? Size(options.bytesToRead) : undefined
758
757
  let totalBytesRead = BigInt(0)
759
758
  const chunkSize = Size(options?.chunkSize ?? 64 * 1024)
759
+ const readChunk = file.readAlloc(chunkSize)
760
760
  return Stream.fromPull(Effect.succeed(
761
761
  Effect.flatMap(
762
762
  Effect.suspend((): Pull.Pull<Uint8Array | undefined, PlatformError> => {
763
763
  if (bytesToRead !== undefined && bytesToRead <= totalBytesRead) {
764
764
  return Cause.done()
765
765
  }
766
- const toRead = bytesToRead !== undefined && (bytesToRead - totalBytesRead) < chunkSize
767
- ? bytesToRead - totalBytesRead
768
- : chunkSize
769
- return file.readAlloc(toRead)
766
+ return bytesToRead !== undefined && (bytesToRead - totalBytesRead) < chunkSize
767
+ ? file.readAlloc(bytesToRead - totalBytesRead)
768
+ : readChunk
770
769
  }),
771
770
  (buf) => {
772
771
  if (!buf) return Cause.done()
@@ -802,7 +801,7 @@ const notFound = (method: string, path: string) =>
802
801
  systemError({
803
802
  module: "FileSystem",
804
803
  method,
805
- kind: "NotFound",
804
+ _tag: "NotFound",
806
805
  description: "No such file or directory",
807
806
  pathOrDescriptor: path
808
807
  })
@@ -829,9 +828,9 @@ const notFound = (method: string, path: string) =>
829
828
  * }
830
829
  * return Effect.fail(
831
830
  * PlatformError.systemError({
831
+ * _tag: "NotFound",
832
832
  * module: "FileSystem",
833
833
  * method: "readFileString",
834
- * kind: "NotFound",
835
834
  * description: "File not found",
836
835
  * pathOrDescriptor: path
837
836
  * })
package/src/Filter.ts CHANGED
@@ -7,7 +7,7 @@ import { dual } from "./Function.ts"
7
7
  import * as Option from "./Option.ts"
8
8
  import * as Predicate from "./Predicate.ts"
9
9
  import * as Result from "./Result.ts"
10
- import type { EqualsWith, ExcludeTag, ExtractTag, Tags } from "./Types.ts"
10
+ import type { EqualsWith, ExcludeTag, ExtractReason, ExtractTag, ReasonTags, Tags } from "./Types.ts"
11
11
 
12
12
  /**
13
13
  * Represents a filter function that can transform inputs to outputs or filter them out.
@@ -456,6 +456,53 @@ const taggedImpl =
456
456
  <Input>(input: Input): Result.Result<ExtractTag<Input, Tag>, ExcludeTag<Input, Tag>> =>
457
457
  Predicate.isTagged(input, tag) ? Result.succeed(input as any) : Result.fail(input as ExcludeTag<Input, Tag>)
458
458
 
459
+ /**
460
+ * Creates a filter that extracts a reason from a tagged error.
461
+ *
462
+ * @since 4.0.0
463
+ * @category Constructors
464
+ */
465
+ export const reason: {
466
+ /**
467
+ * Creates a filter that extracts a reason from a tagged error.
468
+ *
469
+ * @since 4.0.0
470
+ * @category Constructors
471
+ */
472
+ <Input>(): <const Tag extends Tags<Input>, const ReasonTag extends ReasonTags<ExtractTag<Input, Tag>>>(
473
+ tag: Tag,
474
+ reasonTag: ReasonTag
475
+ ) => Filter<Input, ExtractReason<ExtractTag<Input, Tag>, ReasonTag>, Input>
476
+ /**
477
+ * Creates a filter that extracts a reason from a tagged error.
478
+ *
479
+ * @since 4.0.0
480
+ * @category Constructors
481
+ */
482
+ <Input, const Tag extends Tags<Input>, const ReasonTag extends ReasonTags<ExtractTag<Input, Tag>>>(tag: Tag, reasonTag: ReasonTag): Filter<Input, ExtractReason<ExtractTag<Input, Tag>, ReasonTag>, Input>
483
+ /**
484
+ * Creates a filter that extracts a reason from a tagged error.
485
+ *
486
+ * @since 4.0.0
487
+ * @category Constructors
488
+ */
489
+ <const Tag extends string, const ReasonTag extends string>(tag: Tag, reasonTag: ReasonTag): <Input>(input: Input) => Result.Result<ExtractReason<ExtractTag<Input, Tag>, ReasonTag>, Input>
490
+ } = function() {
491
+ return arguments.length === 0 ? reasonImpl : reasonImpl(arguments[0] as any, arguments[1] as any)
492
+ } as any
493
+
494
+ const reasonImpl =
495
+ <const Tag extends string, const ReasonTag extends string>(tag: Tag, reasonTag: ReasonTag) =>
496
+ <Input>(input: Input): Result.Result<ExtractTag<Input, Tag>, ExcludeTag<Input, Tag>> => {
497
+ if (
498
+ Predicate.isTagged(input, tag) && Predicate.hasProperty(input, "reason") &&
499
+ Predicate.isTagged(input.reason, reasonTag)
500
+ ) {
501
+ return Result.succeed(input.reason as any)
502
+ }
503
+ return Result.fail(input as any)
504
+ }
505
+
459
506
  /**
460
507
  * Creates a filter that only passes values equal to the specified value using structural equality.
461
508
  *