effect 4.0.5 → 4.0.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 (1177) hide show
  1. package/ai-docs/package.json +1 -1
  2. package/ai-docs/src/06_schedule/10_schedules.ts +5 -4
  3. package/ai-docs/tsconfig.json +3 -1
  4. package/dist/Arbitrary.d.ts +10 -2
  5. package/dist/Arbitrary.d.ts.map +1 -1
  6. package/dist/Arbitrary.js +2 -1
  7. package/dist/Arbitrary.js.map +1 -1
  8. package/dist/Array.d.ts +117 -52
  9. package/dist/Array.d.ts.map +1 -1
  10. package/dist/Array.js +41 -20
  11. package/dist/Array.js.map +1 -1
  12. package/dist/Bytes.d.ts +79 -0
  13. package/dist/Bytes.d.ts.map +1 -0
  14. package/dist/Bytes.js +109 -0
  15. package/dist/Bytes.js.map +1 -0
  16. package/dist/Channel.d.ts +181 -13
  17. package/dist/Channel.d.ts.map +1 -1
  18. package/dist/Channel.js +144 -34
  19. package/dist/Channel.js.map +1 -1
  20. package/dist/ChannelSchema.d.ts.map +1 -1
  21. package/dist/ChannelSchema.js.map +1 -1
  22. package/dist/Chunk.d.ts +39 -21
  23. package/dist/Chunk.d.ts.map +1 -1
  24. package/dist/Chunk.js +26 -17
  25. package/dist/Chunk.js.map +1 -1
  26. package/dist/Config.d.ts.map +1 -1
  27. package/dist/Config.js +8 -3
  28. package/dist/Config.js.map +1 -1
  29. package/dist/ConfigProvider.d.ts.map +1 -1
  30. package/dist/ConfigProvider.js +2 -1
  31. package/dist/ConfigProvider.js.map +1 -1
  32. package/dist/Cron.d.ts +2 -2
  33. package/dist/Cron.d.ts.map +1 -1
  34. package/dist/Cron.js +6 -3
  35. package/dist/Cron.js.map +1 -1
  36. package/dist/Data.d.ts +54 -235
  37. package/dist/Data.d.ts.map +1 -1
  38. package/dist/Data.js.map +1 -1
  39. package/dist/Duration.d.ts.map +1 -1
  40. package/dist/Duration.js +56 -16
  41. package/dist/Duration.js.map +1 -1
  42. package/dist/Effect.d.ts +488 -164
  43. package/dist/Effect.d.ts.map +1 -1
  44. package/dist/Effect.js +204 -38
  45. package/dist/Effect.js.map +1 -1
  46. package/dist/Equal.d.ts.map +1 -1
  47. package/dist/Equal.js +8 -1
  48. package/dist/Equal.js.map +1 -1
  49. package/dist/Equivalence.d.ts +2 -1
  50. package/dist/Equivalence.d.ts.map +1 -1
  51. package/dist/Equivalence.js +12 -8
  52. package/dist/Equivalence.js.map +1 -1
  53. package/dist/Exit.d.ts +27 -12
  54. package/dist/Exit.d.ts.map +1 -1
  55. package/dist/Exit.js +8 -3
  56. package/dist/Exit.js.map +1 -1
  57. package/dist/FiberHandle.d.ts +2 -0
  58. package/dist/FiberHandle.d.ts.map +1 -1
  59. package/dist/FiberHandle.js +9 -4
  60. package/dist/FiberHandle.js.map +1 -1
  61. package/dist/FiberMap.d.ts +2 -0
  62. package/dist/FiberMap.d.ts.map +1 -1
  63. package/dist/FiberMap.js +5 -2
  64. package/dist/FiberMap.js.map +1 -1
  65. package/dist/FileSystem.d.ts +5 -0
  66. package/dist/FileSystem.d.ts.map +1 -1
  67. package/dist/FileSystem.js +3 -0
  68. package/dist/FileSystem.js.map +1 -1
  69. package/dist/Formatter.d.ts.map +1 -1
  70. package/dist/Formatter.js +27 -13
  71. package/dist/Formatter.js.map +1 -1
  72. package/dist/Graph.d.ts.map +1 -1
  73. package/dist/Graph.js.map +1 -1
  74. package/dist/Hash.d.ts.map +1 -1
  75. package/dist/Hash.js +4 -1
  76. package/dist/Hash.js.map +1 -1
  77. package/dist/HashSet.d.ts.map +1 -1
  78. package/dist/HashSet.js.map +1 -1
  79. package/dist/Iterable.d.ts.map +1 -1
  80. package/dist/Iterable.js +18 -17
  81. package/dist/Iterable.js.map +1 -1
  82. package/dist/JsonPatch.js +4 -0
  83. package/dist/JsonPatch.js.map +1 -1
  84. package/dist/JsonSchema.d.ts +9 -3
  85. package/dist/JsonSchema.d.ts.map +1 -1
  86. package/dist/JsonSchema.js +32 -43
  87. package/dist/JsonSchema.js.map +1 -1
  88. package/dist/Layer.d.ts.map +1 -1
  89. package/dist/Layer.js +2 -2
  90. package/dist/Layer.js.map +1 -1
  91. package/dist/ManagedRuntime.d.ts +19 -1
  92. package/dist/ManagedRuntime.d.ts.map +1 -1
  93. package/dist/ManagedRuntime.js +62 -6
  94. package/dist/ManagedRuntime.js.map +1 -1
  95. package/dist/Metric.d.ts +135 -3
  96. package/dist/Metric.d.ts.map +1 -1
  97. package/dist/Metric.js +197 -25
  98. package/dist/Metric.js.map +1 -1
  99. package/dist/MutableHashMap.d.ts.map +1 -1
  100. package/dist/MutableHashMap.js.map +1 -1
  101. package/dist/MutableList.d.ts +5 -2
  102. package/dist/MutableList.d.ts.map +1 -1
  103. package/dist/MutableList.js +7 -5
  104. package/dist/MutableList.js.map +1 -1
  105. package/dist/MutableRef.d.ts.map +1 -1
  106. package/dist/MutableRef.js +7 -0
  107. package/dist/MutableRef.js.map +1 -1
  108. package/dist/Number.js +2 -2
  109. package/dist/Number.js.map +1 -1
  110. package/dist/Optic.d.ts.map +1 -1
  111. package/dist/Optic.js.map +1 -1
  112. package/dist/PartitionedSemaphore.d.ts +2 -1
  113. package/dist/PartitionedSemaphore.d.ts.map +1 -1
  114. package/dist/PartitionedSemaphore.js +22 -12
  115. package/dist/PartitionedSemaphore.js.map +1 -1
  116. package/dist/Path.d.ts.map +1 -1
  117. package/dist/Path.js +8 -1
  118. package/dist/Path.js.map +1 -1
  119. package/dist/Pool.d.ts.map +1 -1
  120. package/dist/Pool.js +77 -27
  121. package/dist/Pool.js.map +1 -1
  122. package/dist/PubSub.d.ts.map +1 -1
  123. package/dist/PubSub.js +17 -13
  124. package/dist/PubSub.js.map +1 -1
  125. package/dist/Queue.d.ts +4 -1
  126. package/dist/Queue.d.ts.map +1 -1
  127. package/dist/Queue.js +4 -1
  128. package/dist/Queue.js.map +1 -1
  129. package/dist/Random.d.ts.map +1 -1
  130. package/dist/Random.js +1 -1
  131. package/dist/Random.js.map +1 -1
  132. package/dist/RcMap.d.ts +12 -7
  133. package/dist/RcMap.d.ts.map +1 -1
  134. package/dist/RcMap.js +9 -6
  135. package/dist/RcMap.js.map +1 -1
  136. package/dist/Record.d.ts +51 -0
  137. package/dist/Record.d.ts.map +1 -1
  138. package/dist/Record.js +17 -0
  139. package/dist/Record.js.map +1 -1
  140. package/dist/Ref.d.ts.map +1 -1
  141. package/dist/Ref.js +8 -0
  142. package/dist/Ref.js.map +1 -1
  143. package/dist/References.d.ts +5 -4
  144. package/dist/References.d.ts.map +1 -1
  145. package/dist/References.js +5 -4
  146. package/dist/References.js.map +1 -1
  147. package/dist/RequestResolver.d.ts +31 -1
  148. package/dist/RequestResolver.d.ts.map +1 -1
  149. package/dist/RequestResolver.js +39 -4
  150. package/dist/RequestResolver.js.map +1 -1
  151. package/dist/Resource.js +1 -1
  152. package/dist/Resource.js.map +1 -1
  153. package/dist/Runtime.d.ts +3 -3
  154. package/dist/Runtime.d.ts.map +1 -1
  155. package/dist/Runtime.js +18 -15
  156. package/dist/Runtime.js.map +1 -1
  157. package/dist/Schedule.d.ts.map +1 -1
  158. package/dist/Schedule.js +1 -1
  159. package/dist/Schedule.js.map +1 -1
  160. package/dist/Schema.d.ts +408 -340
  161. package/dist/Schema.d.ts.map +1 -1
  162. package/dist/Schema.js +370 -47
  163. package/dist/Schema.js.map +1 -1
  164. package/dist/SchemaAST.d.ts +9 -7
  165. package/dist/SchemaAST.d.ts.map +1 -1
  166. package/dist/SchemaAST.js +38 -25
  167. package/dist/SchemaAST.js.map +1 -1
  168. package/dist/SchemaGetter.d.ts +8 -3
  169. package/dist/SchemaGetter.d.ts.map +1 -1
  170. package/dist/SchemaGetter.js +15 -5
  171. package/dist/SchemaGetter.js.map +1 -1
  172. package/dist/SchemaIssue.d.ts +4 -4
  173. package/dist/SchemaIssue.d.ts.map +1 -1
  174. package/dist/SchemaIssue.js +29 -51
  175. package/dist/SchemaIssue.js.map +1 -1
  176. package/dist/SchemaParser.d.ts.map +1 -1
  177. package/dist/SchemaParser.js +48 -22
  178. package/dist/SchemaParser.js.map +1 -1
  179. package/dist/SchemaRepresentation.d.ts +75 -11
  180. package/dist/SchemaRepresentation.d.ts.map +1 -1
  181. package/dist/SchemaRepresentation.js +41 -13
  182. package/dist/SchemaRepresentation.js.map +1 -1
  183. package/dist/SchemaTransformation.d.ts +5 -2
  184. package/dist/SchemaTransformation.d.ts.map +1 -1
  185. package/dist/SchemaTransformation.js +10 -3
  186. package/dist/SchemaTransformation.js.map +1 -1
  187. package/dist/Scope.d.ts +12 -2
  188. package/dist/Scope.d.ts.map +1 -1
  189. package/dist/Scope.js +5 -0
  190. package/dist/Scope.js.map +1 -1
  191. package/dist/ScopedCache.d.ts +10 -7
  192. package/dist/ScopedCache.d.ts.map +1 -1
  193. package/dist/ScopedCache.js +9 -5
  194. package/dist/ScopedCache.js.map +1 -1
  195. package/dist/SemVer.d.ts +1196 -0
  196. package/dist/SemVer.d.ts.map +1 -0
  197. package/dist/SemVer.js +756 -0
  198. package/dist/SemVer.js.map +1 -0
  199. package/dist/SemVerRange.d.ts +559 -0
  200. package/dist/SemVerRange.d.ts.map +1 -0
  201. package/dist/SemVerRange.js +551 -0
  202. package/dist/SemVerRange.js.map +1 -0
  203. package/dist/Semaphore.d.ts.map +1 -1
  204. package/dist/Semaphore.js +54 -35
  205. package/dist/Semaphore.js.map +1 -1
  206. package/dist/Sink.d.ts.map +1 -1
  207. package/dist/Sink.js +13 -4
  208. package/dist/Sink.js.map +1 -1
  209. package/dist/Stream.d.ts +235 -8
  210. package/dist/Stream.d.ts.map +1 -1
  211. package/dist/Stream.js +167 -70
  212. package/dist/Stream.js.map +1 -1
  213. package/dist/String.d.ts +7 -2
  214. package/dist/String.d.ts.map +1 -1
  215. package/dist/String.js +11 -6
  216. package/dist/String.js.map +1 -1
  217. package/dist/TextDiff.d.ts +399 -0
  218. package/dist/TextDiff.d.ts.map +1 -0
  219. package/dist/TextDiff.js +634 -0
  220. package/dist/TextDiff.js.map +1 -0
  221. package/dist/Tracer.d.ts +11 -1
  222. package/dist/Tracer.d.ts.map +1 -1
  223. package/dist/Tracer.js +6 -1
  224. package/dist/Tracer.js.map +1 -1
  225. package/dist/TxHashMap.d.ts.map +1 -1
  226. package/dist/TxHashMap.js.map +1 -1
  227. package/dist/TxHashSet.d.ts.map +1 -1
  228. package/dist/TxHashSet.js.map +1 -1
  229. package/dist/ai/AiError.d.ts +68 -4
  230. package/dist/ai/AiError.d.ts.map +1 -1
  231. package/dist/ai/AiError.js +50 -2
  232. package/dist/ai/AiError.js.map +1 -1
  233. package/dist/ai/Chat.d.ts +1 -2
  234. package/dist/ai/Chat.d.ts.map +1 -1
  235. package/dist/ai/Chat.js +6 -3
  236. package/dist/ai/Chat.js.map +1 -1
  237. package/dist/ai/Decision.d.ts +46 -1
  238. package/dist/ai/Decision.d.ts.map +1 -1
  239. package/dist/ai/Decision.js.map +1 -1
  240. package/dist/ai/DecisionModel.d.ts +129 -11
  241. package/dist/ai/DecisionModel.d.ts.map +1 -1
  242. package/dist/ai/DecisionModel.js +182 -94
  243. package/dist/ai/DecisionModel.js.map +1 -1
  244. package/dist/ai/EmbeddingModel.d.ts +10 -0
  245. package/dist/ai/EmbeddingModel.d.ts.map +1 -1
  246. package/dist/ai/EmbeddingModel.js +21 -7
  247. package/dist/ai/EmbeddingModel.js.map +1 -1
  248. package/dist/ai/LanguageModel.d.ts.map +1 -1
  249. package/dist/ai/LanguageModel.js +9 -0
  250. package/dist/ai/LanguageModel.js.map +1 -1
  251. package/dist/ai/McpClient.d.ts +289 -0
  252. package/dist/ai/McpClient.d.ts.map +1 -0
  253. package/dist/ai/McpClient.js +819 -0
  254. package/dist/ai/McpClient.js.map +1 -0
  255. package/dist/ai/McpClientError.d.ts +254 -0
  256. package/dist/ai/McpClientError.d.ts.map +1 -0
  257. package/dist/ai/McpClientError.js +260 -0
  258. package/dist/ai/McpClientError.js.map +1 -0
  259. package/dist/ai/McpProtocol.d.ts +2 -2
  260. package/dist/ai/McpProtocol.d.ts.map +1 -1
  261. package/dist/ai/McpSchema.d.ts +258 -125
  262. package/dist/ai/McpSchema.d.ts.map +1 -1
  263. package/dist/ai/McpSchema.js +94 -24
  264. package/dist/ai/McpSchema.js.map +1 -1
  265. package/dist/ai/McpServer.d.ts.map +1 -1
  266. package/dist/ai/McpServer.js +46 -37
  267. package/dist/ai/McpServer.js.map +1 -1
  268. package/dist/ai/Prompt.d.ts +74 -20
  269. package/dist/ai/Prompt.d.ts.map +1 -1
  270. package/dist/ai/Prompt.js +61 -1
  271. package/dist/ai/Prompt.js.map +1 -1
  272. package/dist/ai/Response.d.ts +160 -3
  273. package/dist/ai/Response.d.ts.map +1 -1
  274. package/dist/ai/Response.js +39 -37
  275. package/dist/ai/Response.js.map +1 -1
  276. package/dist/ai/Tool.d.ts +36 -4
  277. package/dist/ai/Tool.d.ts.map +1 -1
  278. package/dist/ai/Tool.js +5 -2
  279. package/dist/ai/Tool.js.map +1 -1
  280. package/dist/ai/Toolkit.d.ts +48 -1
  281. package/dist/ai/Toolkit.d.ts.map +1 -1
  282. package/dist/ai/Toolkit.js +73 -13
  283. package/dist/ai/Toolkit.js.map +1 -1
  284. package/dist/ai/index.d.ts +10 -0
  285. package/dist/ai/index.d.ts.map +1 -1
  286. package/dist/ai/index.js +10 -0
  287. package/dist/ai/index.js.map +1 -1
  288. package/dist/ai/internal/mcpCore.js.map +1 -1
  289. package/dist/ai/internal/mcpProtocol/v2024_11_05.js +1 -1
  290. package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
  291. package/dist/ai/internal/mcpProtocol/v2025_03_26.js +1 -1
  292. package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
  293. package/dist/ai/internal/mcpProtocol/v2025_06_18.js +2 -2
  294. package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
  295. package/dist/ai/internal/mcpProtocol/v2025_11_25.js +2 -2
  296. package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
  297. package/dist/ai/internal/mcpProtocol/v2026_07_28.js +4 -7
  298. package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
  299. package/dist/ai/internal/mcpProtocol.js +16 -2
  300. package/dist/ai/internal/mcpProtocol.js.map +1 -1
  301. package/dist/ai/internal/mcpRuntime.js +3 -4
  302. package/dist/ai/internal/mcpRuntime.js.map +1 -1
  303. package/dist/ai/internal/mcpSchema/v2024_11_05.js +19 -13
  304. package/dist/ai/internal/mcpSchema/v2024_11_05.js.map +1 -1
  305. package/dist/ai/internal/mcpSchema/v2025_03_26.js +3 -2
  306. package/dist/ai/internal/mcpSchema/v2025_03_26.js.map +1 -1
  307. package/dist/ai/internal/mcpSchema/v2025_06_18.js +7 -7
  308. package/dist/ai/internal/mcpSchema/v2025_06_18.js.map +1 -1
  309. package/dist/ai/internal/mcpSchema/v2025_11_25.js +8 -8
  310. package/dist/ai/internal/mcpSchema/v2025_11_25.js.map +1 -1
  311. package/dist/ai/internal/mcpSchema/v2026_07_28.js +43 -42
  312. package/dist/ai/internal/mcpSchema/v2026_07_28.js.map +1 -1
  313. package/dist/cli/Argument.d.ts +15 -0
  314. package/dist/cli/Argument.d.ts.map +1 -1
  315. package/dist/cli/Argument.js +5 -0
  316. package/dist/cli/Argument.js.map +1 -1
  317. package/dist/cli/CliError.d.ts +120 -2
  318. package/dist/cli/CliError.d.ts.map +1 -1
  319. package/dist/cli/CliError.js +106 -5
  320. package/dist/cli/CliError.js.map +1 -1
  321. package/dist/cli/CliOutput.d.ts +155 -6
  322. package/dist/cli/CliOutput.d.ts.map +1 -1
  323. package/dist/cli/CliOutput.js +62 -6
  324. package/dist/cli/CliOutput.js.map +1 -1
  325. package/dist/cli/Command.d.ts +310 -18
  326. package/dist/cli/Command.d.ts.map +1 -1
  327. package/dist/cli/Command.js +164 -33
  328. package/dist/cli/Command.js.map +1 -1
  329. package/dist/cli/Completions.d.ts +63 -0
  330. package/dist/cli/Completions.d.ts.map +1 -1
  331. package/dist/cli/Completions.js +49 -9
  332. package/dist/cli/Completions.js.map +1 -1
  333. package/dist/cli/Flag.d.ts +130 -0
  334. package/dist/cli/Flag.d.ts.map +1 -1
  335. package/dist/cli/Flag.js +61 -0
  336. package/dist/cli/Flag.js.map +1 -1
  337. package/dist/cli/GlobalFlag.d.ts.map +1 -1
  338. package/dist/cli/GlobalFlag.js +14 -6
  339. package/dist/cli/GlobalFlag.js.map +1 -1
  340. package/dist/cli/Param.d.ts +116 -0
  341. package/dist/cli/Param.d.ts.map +1 -1
  342. package/dist/cli/Param.js +77 -2
  343. package/dist/cli/Param.js.map +1 -1
  344. package/dist/cli/TerminalCapabilities.d.ts +85 -0
  345. package/dist/cli/TerminalCapabilities.d.ts.map +1 -0
  346. package/dist/cli/TerminalCapabilities.js +124 -0
  347. package/dist/cli/TerminalCapabilities.js.map +1 -0
  348. package/dist/cli/index.d.ts +5 -0
  349. package/dist/cli/index.d.ts.map +1 -1
  350. package/dist/cli/index.js +5 -0
  351. package/dist/cli/index.js.map +1 -1
  352. package/dist/cli/internal/command.d.ts +2 -1
  353. package/dist/cli/internal/command.d.ts.map +1 -1
  354. package/dist/cli/internal/command.js +5 -2
  355. package/dist/cli/internal/command.js.map +1 -1
  356. package/dist/cli/internal/completions/bash.js +77 -30
  357. package/dist/cli/internal/completions/bash.js.map +1 -1
  358. package/dist/cli/internal/completions/descriptor.js +9 -1
  359. package/dist/cli/internal/completions/descriptor.js.map +1 -1
  360. package/dist/cli/internal/completions/fish.js +10 -8
  361. package/dist/cli/internal/completions/fish.js.map +1 -1
  362. package/dist/cli/internal/completions/powershell.js +18 -9
  363. package/dist/cli/internal/completions/powershell.js.map +1 -1
  364. package/dist/cli/internal/completions/zsh.js +8 -5
  365. package/dist/cli/internal/completions/zsh.js.map +1 -1
  366. package/dist/cli/internal/formatter.d.ts +2 -0
  367. package/dist/cli/internal/formatter.d.ts.map +1 -0
  368. package/dist/cli/internal/formatter.js +15 -0
  369. package/dist/cli/internal/formatter.js.map +1 -0
  370. package/dist/cli/internal/lexer.js +24 -10
  371. package/dist/cli/internal/lexer.js.map +1 -1
  372. package/dist/cli/internal/parser.js +24 -12
  373. package/dist/cli/internal/parser.js.map +1 -1
  374. package/dist/cluster/ClusterCron.d.ts +29 -1
  375. package/dist/cluster/ClusterCron.d.ts.map +1 -1
  376. package/dist/cluster/ClusterCron.js +64 -32
  377. package/dist/cluster/ClusterCron.js.map +1 -1
  378. package/dist/cluster/ClusterMetrics.d.ts +143 -7
  379. package/dist/cluster/ClusterMetrics.d.ts.map +1 -1
  380. package/dist/cluster/ClusterMetrics.js +151 -7
  381. package/dist/cluster/ClusterMetrics.js.map +1 -1
  382. package/dist/cluster/ClusterWorkflowEngine.d.ts +1 -1
  383. package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  384. package/dist/cluster/ClusterWorkflowEngine.js +82 -21
  385. package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
  386. package/dist/cluster/Entity.d.ts +2 -0
  387. package/dist/cluster/Entity.d.ts.map +1 -1
  388. package/dist/cluster/Entity.js.map +1 -1
  389. package/dist/cluster/MessageStorage.d.ts +44 -45
  390. package/dist/cluster/MessageStorage.d.ts.map +1 -1
  391. package/dist/cluster/MessageStorage.js +6 -7
  392. package/dist/cluster/MessageStorage.js.map +1 -1
  393. package/dist/cluster/Runners.d.ts.map +1 -1
  394. package/dist/cluster/Runners.js +54 -15
  395. package/dist/cluster/Runners.js.map +1 -1
  396. package/dist/cluster/Sharding.d.ts +1 -0
  397. package/dist/cluster/Sharding.d.ts.map +1 -1
  398. package/dist/cluster/Sharding.js +155 -52
  399. package/dist/cluster/Sharding.js.map +1 -1
  400. package/dist/cluster/ShardingConfig.d.ts +30 -0
  401. package/dist/cluster/ShardingConfig.d.ts.map +1 -1
  402. package/dist/cluster/ShardingConfig.js +4 -0
  403. package/dist/cluster/ShardingConfig.js.map +1 -1
  404. package/dist/cluster/Snowflake.d.ts.map +1 -1
  405. package/dist/cluster/Snowflake.js +3 -7
  406. package/dist/cluster/Snowflake.js.map +1 -1
  407. package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
  408. package/dist/cluster/SqlMessageStorage.js +40 -50
  409. package/dist/cluster/SqlMessageStorage.js.map +1 -1
  410. package/dist/cluster/SqlRunnerStorage.d.ts +2 -2
  411. package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
  412. package/dist/cluster/SqlRunnerStorage.js +97 -43
  413. package/dist/cluster/SqlRunnerStorage.js.map +1 -1
  414. package/dist/cluster/internal/entityManager.js +119 -28
  415. package/dist/cluster/internal/entityManager.js.map +1 -1
  416. package/dist/devtools/DevTools.d.ts +3 -2
  417. package/dist/devtools/DevTools.d.ts.map +1 -1
  418. package/dist/devtools/DevTools.js +3 -2
  419. package/dist/devtools/DevTools.js.map +1 -1
  420. package/dist/devtools/DevToolsClient.d.ts +11 -0
  421. package/dist/devtools/DevToolsClient.d.ts.map +1 -1
  422. package/dist/devtools/DevToolsClient.js +33 -4
  423. package/dist/devtools/DevToolsClient.js.map +1 -1
  424. package/dist/encoding/Base64.js +36 -0
  425. package/dist/encoding/Base64.js.map +1 -1
  426. package/dist/encoding/Base64Url.d.ts +29 -0
  427. package/dist/encoding/Base64Url.d.ts.map +1 -1
  428. package/dist/encoding/Base64Url.js +29 -0
  429. package/dist/encoding/Base64Url.js.map +1 -1
  430. package/dist/encoding/Ini.d.ts.map +1 -1
  431. package/dist/encoding/Ini.js +3 -0
  432. package/dist/encoding/Ini.js.map +1 -1
  433. package/dist/encoding/JsonArray.d.ts +270 -0
  434. package/dist/encoding/JsonArray.d.ts.map +1 -0
  435. package/dist/encoding/JsonArray.js +691 -0
  436. package/dist/encoding/JsonArray.js.map +1 -0
  437. package/dist/encoding/Ndjson.d.ts +43 -4
  438. package/dist/encoding/Ndjson.d.ts.map +1 -1
  439. package/dist/encoding/Ndjson.js +169 -18
  440. package/dist/encoding/Ndjson.js.map +1 -1
  441. package/dist/encoding/SchemaBinary.d.ts +9 -1
  442. package/dist/encoding/SchemaBinary.d.ts.map +1 -1
  443. package/dist/encoding/SchemaBinary.js +12 -19
  444. package/dist/encoding/SchemaBinary.js.map +1 -1
  445. package/dist/encoding/Sse.d.ts.map +1 -1
  446. package/dist/encoding/Sse.js +3 -3
  447. package/dist/encoding/Sse.js.map +1 -1
  448. package/dist/encoding/Tar.d.ts +309 -0
  449. package/dist/encoding/Tar.d.ts.map +1 -0
  450. package/dist/encoding/Tar.js +1182 -0
  451. package/dist/encoding/Tar.js.map +1 -0
  452. package/dist/encoding/Toml.d.ts.map +1 -1
  453. package/dist/encoding/Toml.js +24 -19
  454. package/dist/encoding/Toml.js.map +1 -1
  455. package/dist/encoding/Xml.d.ts +464 -0
  456. package/dist/encoding/Xml.d.ts.map +1 -0
  457. package/dist/encoding/Xml.js +1619 -0
  458. package/dist/encoding/Xml.js.map +1 -0
  459. package/dist/encoding/Yaml.d.ts +6 -2
  460. package/dist/encoding/Yaml.d.ts.map +1 -1
  461. package/dist/encoding/Yaml.js +97 -34
  462. package/dist/encoding/Yaml.js.map +1 -1
  463. package/dist/encoding/Zip.d.ts +413 -0
  464. package/dist/encoding/Zip.d.ts.map +1 -0
  465. package/dist/encoding/Zip.js +1255 -0
  466. package/dist/encoding/Zip.js.map +1 -0
  467. package/dist/encoding/index.d.ts +20 -0
  468. package/dist/encoding/index.d.ts.map +1 -1
  469. package/dist/encoding/index.js +20 -0
  470. package/dist/encoding/index.js.map +1 -1
  471. package/dist/eventlog/EventJournal.d.ts +90 -5
  472. package/dist/eventlog/EventJournal.d.ts.map +1 -1
  473. package/dist/eventlog/EventJournal.js +488 -228
  474. package/dist/eventlog/EventJournal.js.map +1 -1
  475. package/dist/eventlog/EventLog.d.ts +180 -12
  476. package/dist/eventlog/EventLog.d.ts.map +1 -1
  477. package/dist/eventlog/EventLog.js +394 -146
  478. package/dist/eventlog/EventLog.js.map +1 -1
  479. package/dist/eventlog/EventLogEncryption.d.ts +36 -30
  480. package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
  481. package/dist/eventlog/EventLogEncryption.js +97 -38
  482. package/dist/eventlog/EventLogEncryption.js.map +1 -1
  483. package/dist/eventlog/EventLogMessage.d.ts +74 -34
  484. package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
  485. package/dist/eventlog/EventLogMessage.js +45 -11
  486. package/dist/eventlog/EventLogMessage.js.map +1 -1
  487. package/dist/eventlog/EventLogRemote.d.ts +45 -8
  488. package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
  489. package/dist/eventlog/EventLogRemote.js +51 -14
  490. package/dist/eventlog/EventLogRemote.js.map +1 -1
  491. package/dist/eventlog/EventLogServer.d.ts +46 -3
  492. package/dist/eventlog/EventLogServer.d.ts.map +1 -1
  493. package/dist/eventlog/EventLogServer.js +119 -19
  494. package/dist/eventlog/EventLogServer.js.map +1 -1
  495. package/dist/eventlog/EventLogServerEncrypted.d.ts +23 -33
  496. package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
  497. package/dist/eventlog/EventLogServerEncrypted.js +97 -70
  498. package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
  499. package/dist/eventlog/EventLogServerUnencrypted.d.ts +39 -5
  500. package/dist/eventlog/EventLogServerUnencrypted.d.ts.map +1 -1
  501. package/dist/eventlog/EventLogServerUnencrypted.js +151 -69
  502. package/dist/eventlog/EventLogServerUnencrypted.js.map +1 -1
  503. package/dist/eventlog/EventRow.d.ts +288 -0
  504. package/dist/eventlog/EventRow.d.ts.map +1 -0
  505. package/dist/eventlog/EventRow.js +435 -0
  506. package/dist/eventlog/EventRow.js.map +1 -0
  507. package/dist/eventlog/SqlEventJournal.d.ts +18 -18
  508. package/dist/eventlog/SqlEventJournal.d.ts.map +1 -1
  509. package/dist/eventlog/SqlEventJournal.js +417 -169
  510. package/dist/eventlog/SqlEventJournal.js.map +1 -1
  511. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +10 -18
  512. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
  513. package/dist/eventlog/SqlEventLogServerEncrypted.js +179 -69
  514. package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
  515. package/dist/eventlog/SqlEventLogServerUnencrypted.d.ts +23 -3
  516. package/dist/eventlog/SqlEventLogServerUnencrypted.d.ts.map +1 -1
  517. package/dist/eventlog/SqlEventLogServerUnencrypted.js +102 -51
  518. package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
  519. package/dist/eventlog/index.d.ts +5 -0
  520. package/dist/eventlog/index.d.ts.map +1 -1
  521. package/dist/eventlog/index.js +5 -0
  522. package/dist/eventlog/index.js.map +1 -1
  523. package/dist/eventlog/internal/conflicts.d.ts +46 -0
  524. package/dist/eventlog/internal/conflicts.d.ts.map +1 -0
  525. package/dist/eventlog/internal/conflicts.js +89 -0
  526. package/dist/eventlog/internal/conflicts.js.map +1 -0
  527. package/dist/graphql/GraphQLClientError.d.ts +2 -2
  528. package/dist/graphql/GraphQLClientError.d.ts.map +1 -1
  529. package/dist/graphql/GraphQLClientError.js +4 -18
  530. package/dist/graphql/GraphQLClientError.js.map +1 -1
  531. package/dist/graphql/GraphQLProtocol.d.ts +12 -9
  532. package/dist/graphql/GraphQLProtocol.d.ts.map +1 -1
  533. package/dist/graphql/GraphQLProtocol.js +4 -3
  534. package/dist/graphql/GraphQLProtocol.js.map +1 -1
  535. package/dist/graphql/GraphQLResolver.d.ts +2 -0
  536. package/dist/graphql/GraphQLResolver.d.ts.map +1 -1
  537. package/dist/graphql/GraphQLResolver.js +74 -32
  538. package/dist/graphql/GraphQLResolver.js.map +1 -1
  539. package/dist/http/Cookies.d.ts.map +1 -1
  540. package/dist/http/Cookies.js +10 -9
  541. package/dist/http/Cookies.js.map +1 -1
  542. package/dist/http/FetchHttpClient.d.ts +8 -1
  543. package/dist/http/FetchHttpClient.d.ts.map +1 -1
  544. package/dist/http/FetchHttpClient.js +51 -4
  545. package/dist/http/FetchHttpClient.js.map +1 -1
  546. package/dist/http/FindMyWay/internal/router.js +10 -0
  547. package/dist/http/FindMyWay/internal/router.js.map +1 -1
  548. package/dist/http/Headers.d.ts +227 -0
  549. package/dist/http/Headers.d.ts.map +1 -1
  550. package/dist/http/Headers.js +261 -0
  551. package/dist/http/Headers.js.map +1 -1
  552. package/dist/http/HttpClient.d.ts +516 -0
  553. package/dist/http/HttpClient.d.ts.map +1 -1
  554. package/dist/http/HttpClient.js +286 -23
  555. package/dist/http/HttpClient.js.map +1 -1
  556. package/dist/http/HttpClientError.d.ts +8 -1
  557. package/dist/http/HttpClientError.d.ts.map +1 -1
  558. package/dist/http/HttpClientError.js +37 -1
  559. package/dist/http/HttpClientError.js.map +1 -1
  560. package/dist/http/HttpClientRequest.d.ts +127 -3
  561. package/dist/http/HttpClientRequest.d.ts.map +1 -1
  562. package/dist/http/HttpClientRequest.js +45 -3
  563. package/dist/http/HttpClientRequest.js.map +1 -1
  564. package/dist/http/HttpClientResponse.d.ts +53 -0
  565. package/dist/http/HttpClientResponse.d.ts.map +1 -1
  566. package/dist/http/HttpClientResponse.js +47 -0
  567. package/dist/http/HttpClientResponse.js.map +1 -1
  568. package/dist/http/HttpEffect.d.ts +6 -2
  569. package/dist/http/HttpEffect.d.ts.map +1 -1
  570. package/dist/http/HttpEffect.js +21 -17
  571. package/dist/http/HttpEffect.js.map +1 -1
  572. package/dist/http/HttpIncomingMessage.d.ts +2 -1
  573. package/dist/http/HttpIncomingMessage.d.ts.map +1 -1
  574. package/dist/http/HttpIncomingMessage.js +3 -23
  575. package/dist/http/HttpIncomingMessage.js.map +1 -1
  576. package/dist/http/HttpMiddleware.d.ts +119 -2
  577. package/dist/http/HttpMiddleware.d.ts.map +1 -1
  578. package/dist/http/HttpMiddleware.js +173 -29
  579. package/dist/http/HttpMiddleware.js.map +1 -1
  580. package/dist/http/HttpRouter.d.ts.map +1 -1
  581. package/dist/http/HttpRouter.js +9 -3
  582. package/dist/http/HttpRouter.js.map +1 -1
  583. package/dist/http/HttpServerError.d.ts +5 -2
  584. package/dist/http/HttpServerError.d.ts.map +1 -1
  585. package/dist/http/HttpServerError.js +7 -5
  586. package/dist/http/HttpServerError.js.map +1 -1
  587. package/dist/http/HttpServerRequest.d.ts +30 -5
  588. package/dist/http/HttpServerRequest.d.ts.map +1 -1
  589. package/dist/http/HttpServerRequest.js +109 -20
  590. package/dist/http/HttpServerRequest.js.map +1 -1
  591. package/dist/http/HttpServerResponse.d.ts +17 -8
  592. package/dist/http/HttpServerResponse.d.ts.map +1 -1
  593. package/dist/http/HttpServerResponse.js +37 -21
  594. package/dist/http/HttpServerResponse.js.map +1 -1
  595. package/dist/http/HttpStaticServer.d.ts +0 -12
  596. package/dist/http/HttpStaticServer.d.ts.map +1 -1
  597. package/dist/http/HttpStaticServer.js +65 -24
  598. package/dist/http/HttpStaticServer.js.map +1 -1
  599. package/dist/http/MultipartParser/internal/contentType.d.ts +15 -1
  600. package/dist/http/MultipartParser/internal/contentType.d.ts.map +1 -1
  601. package/dist/http/MultipartParser/internal/contentType.js +89 -7
  602. package/dist/http/MultipartParser/internal/contentType.js.map +1 -1
  603. package/dist/http/MultipartParser/internal/headers.d.ts.map +1 -1
  604. package/dist/http/MultipartParser/internal/headers.js +4 -12
  605. package/dist/http/MultipartParser/internal/headers.js.map +1 -1
  606. package/dist/http/MultipartParser/internal/multipart.d.ts.map +1 -1
  607. package/dist/http/MultipartParser/internal/multipart.js +6 -27
  608. package/dist/http/MultipartParser/internal/multipart.js.map +1 -1
  609. package/dist/http/Url.d.ts.map +1 -1
  610. package/dist/http/Url.js +6 -1
  611. package/dist/http/Url.js.map +1 -1
  612. package/dist/http/UrlParams.d.ts +3 -1
  613. package/dist/http/UrlParams.d.ts.map +1 -1
  614. package/dist/http/UrlParams.js +4 -2
  615. package/dist/http/UrlParams.js.map +1 -1
  616. package/dist/http/internal/compression.js +4 -5
  617. package/dist/http/internal/compression.js.map +1 -1
  618. package/dist/http/internal/decompression.js +20 -11
  619. package/dist/http/internal/decompression.js.map +1 -1
  620. package/dist/http/internal/httpBody.js +8 -1
  621. package/dist/http/internal/httpBody.js.map +1 -1
  622. package/dist/http/internal/lazyStream.d.ts +2 -0
  623. package/dist/http/internal/lazyStream.d.ts.map +1 -0
  624. package/dist/http/internal/lazyStream.js +18 -0
  625. package/dist/http/internal/lazyStream.js.map +1 -0
  626. package/dist/http/internal/requestState.d.ts +2 -0
  627. package/dist/http/internal/requestState.d.ts.map +1 -0
  628. package/dist/http/internal/requestState.js +28 -0
  629. package/dist/http/internal/requestState.js.map +1 -0
  630. package/dist/http/internal/urlParams.js +25 -0
  631. package/dist/http/internal/urlParams.js.map +1 -1
  632. package/dist/http/internal/webResponse.d.ts +2 -0
  633. package/dist/http/internal/webResponse.d.ts.map +1 -0
  634. package/dist/http/internal/webResponse.js +12 -0
  635. package/dist/http/internal/webResponse.js.map +1 -0
  636. package/dist/http-api/HttpApi.d.ts +3 -6
  637. package/dist/http-api/HttpApi.d.ts.map +1 -1
  638. package/dist/http-api/HttpApi.js +4 -7
  639. package/dist/http-api/HttpApi.js.map +1 -1
  640. package/dist/http-api/HttpApiBuilder.d.ts.map +1 -1
  641. package/dist/http-api/HttpApiBuilder.js +142 -23
  642. package/dist/http-api/HttpApiBuilder.js.map +1 -1
  643. package/dist/http-api/HttpApiClient.d.ts +99 -4
  644. package/dist/http-api/HttpApiClient.d.ts.map +1 -1
  645. package/dist/http-api/HttpApiClient.js +218 -60
  646. package/dist/http-api/HttpApiClient.js.map +1 -1
  647. package/dist/http-api/HttpApiEndpoint.d.ts +72 -29
  648. package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
  649. package/dist/http-api/HttpApiEndpoint.js +140 -14
  650. package/dist/http-api/HttpApiEndpoint.js.map +1 -1
  651. package/dist/http-api/HttpApiError.d.ts +58 -0
  652. package/dist/http-api/HttpApiError.d.ts.map +1 -1
  653. package/dist/http-api/HttpApiError.js +38 -12
  654. package/dist/http-api/HttpApiError.js.map +1 -1
  655. package/dist/http-api/HttpApiScalar.d.ts +2 -1
  656. package/dist/http-api/HttpApiScalar.d.ts.map +1 -1
  657. package/dist/http-api/HttpApiScalar.js +6 -3
  658. package/dist/http-api/HttpApiScalar.js.map +1 -1
  659. package/dist/http-api/HttpApiSchema.d.ts +242 -13
  660. package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
  661. package/dist/http-api/HttpApiSchema.js +149 -5
  662. package/dist/http-api/HttpApiSchema.js.map +1 -1
  663. package/dist/http-api/HttpApiSwagger.d.ts +5 -0
  664. package/dist/http-api/HttpApiSwagger.d.ts.map +1 -1
  665. package/dist/http-api/HttpApiSwagger.js +14 -4
  666. package/dist/http-api/HttpApiSwagger.js.map +1 -1
  667. package/dist/http-api/HttpApiTest.d.ts +13 -2
  668. package/dist/http-api/HttpApiTest.d.ts.map +1 -1
  669. package/dist/http-api/HttpApiTest.js +33 -11
  670. package/dist/http-api/HttpApiTest.js.map +1 -1
  671. package/dist/http-api/OpenApi.d.ts +17 -3
  672. package/dist/http-api/OpenApi.d.ts.map +1 -1
  673. package/dist/http-api/OpenApi.js +81 -47
  674. package/dist/http-api/OpenApi.js.map +1 -1
  675. package/dist/http-api/internal/path.js +35 -10
  676. package/dist/http-api/internal/path.js.map +1 -1
  677. package/dist/http-api/internal/toCodecHttpProperties.d.ts +2 -0
  678. package/dist/http-api/internal/toCodecHttpProperties.d.ts.map +1 -0
  679. package/dist/http-api/internal/toCodecHttpProperties.js +38 -0
  680. package/dist/http-api/internal/toCodecHttpProperties.js.map +1 -0
  681. package/dist/index.d.ts +20 -0
  682. package/dist/index.d.ts.map +1 -1
  683. package/dist/index.js +20 -0
  684. package/dist/index.js.map +1 -1
  685. package/dist/internal/arbitrary/runner.d.ts.map +1 -1
  686. package/dist/internal/arbitrary/runner.js +120 -44
  687. package/dist/internal/arbitrary/runner.js.map +1 -1
  688. package/dist/internal/core.js +3 -1
  689. package/dist/internal/core.js.map +1 -1
  690. package/dist/internal/dateTime.js +19 -7
  691. package/dist/internal/dateTime.js.map +1 -1
  692. package/dist/internal/effect.js +106 -87
  693. package/dist/internal/effect.js.map +1 -1
  694. package/dist/internal/equal.js +14 -0
  695. package/dist/internal/equal.js.map +1 -1
  696. package/dist/internal/hashMap.js +2 -2
  697. package/dist/internal/hashMap.js.map +1 -1
  698. package/dist/internal/hydration.d.ts +2 -0
  699. package/dist/internal/hydration.d.ts.map +1 -0
  700. package/dist/internal/hydration.js +15 -0
  701. package/dist/internal/hydration.js.map +1 -0
  702. package/dist/internal/inflate.d.ts +2 -0
  703. package/dist/internal/inflate.d.ts.map +1 -0
  704. package/dist/internal/inflate.js +680 -0
  705. package/dist/internal/inflate.js.map +1 -0
  706. package/dist/internal/jsonSchema.d.ts +2 -0
  707. package/dist/internal/jsonSchema.d.ts.map +1 -0
  708. package/dist/internal/jsonSchema.js +28 -0
  709. package/dist/internal/jsonSchema.js.map +1 -0
  710. package/dist/internal/matcher.js +1 -1
  711. package/dist/internal/matcher.js.map +1 -1
  712. package/dist/internal/record.js +6 -0
  713. package/dist/internal/record.js.map +1 -1
  714. package/dist/internal/request.js +20 -7
  715. package/dist/internal/request.js.map +1 -1
  716. package/dist/internal/schedule.js +17 -22
  717. package/dist/internal/schedule.js.map +1 -1
  718. package/dist/internal/schema/compilerRegistry.js +4 -1
  719. package/dist/internal/schema/compilerRegistry.js.map +1 -1
  720. package/dist/internal/schema/content.d.ts +2 -0
  721. package/dist/internal/schema/content.d.ts.map +1 -0
  722. package/dist/internal/schema/content.js +13 -0
  723. package/dist/internal/schema/content.js.map +1 -0
  724. package/dist/internal/schema/fromJsonSchemaDocument.js +253 -255
  725. package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
  726. package/dist/internal/schema/fromRepresentation.js +2 -1
  727. package/dist/internal/schema/fromRepresentation.js.map +1 -1
  728. package/dist/internal/schema/interpreter.js +51 -36
  729. package/dist/internal/schema/interpreter.js.map +1 -1
  730. package/dist/internal/schema/standardSchema.js +42 -35
  731. package/dist/internal/schema/standardSchema.js.map +1 -1
  732. package/dist/internal/schema/toCodeDocument.js +10 -5
  733. package/dist/internal/schema/toCodeDocument.js.map +1 -1
  734. package/dist/internal/schema/toCodec.js +99 -17
  735. package/dist/internal/schema/toCodec.js.map +1 -1
  736. package/dist/internal/schema/toFormatter.js +5 -5
  737. package/dist/internal/schema/toFormatter.js.map +1 -1
  738. package/dist/internal/schema/toJsonSchemaDocument.js +257 -170
  739. package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
  740. package/dist/internal/schema/toRepresentation.js +107 -129
  741. package/dist/internal/schema/toRepresentation.js.map +1 -1
  742. package/dist/internal/sql.d.ts +2 -0
  743. package/dist/internal/sql.d.ts.map +1 -0
  744. package/dist/internal/sql.js +13 -0
  745. package/dist/internal/sql.js.map +1 -0
  746. package/dist/internal/trie.js +1 -3
  747. package/dist/internal/trie.js.map +1 -1
  748. package/dist/internal/uuid.js +7 -3
  749. package/dist/internal/uuid.js.map +1 -1
  750. package/dist/internal/version.js +1 -1
  751. package/dist/net/NetAddress.d.ts.map +1 -1
  752. package/dist/net/NetAddress.js +2 -8
  753. package/dist/net/NetAddress.js.map +1 -1
  754. package/dist/observability/OtlpExporter.d.ts.map +1 -1
  755. package/dist/observability/OtlpExporter.js +5 -12
  756. package/dist/observability/OtlpExporter.js.map +1 -1
  757. package/dist/observability/OtlpMetrics.d.ts.map +1 -1
  758. package/dist/observability/OtlpMetrics.js +5 -3
  759. package/dist/observability/OtlpMetrics.js.map +1 -1
  760. package/dist/observability/OtlpProxy.d.ts +154 -0
  761. package/dist/observability/OtlpProxy.d.ts.map +1 -0
  762. package/dist/observability/OtlpProxy.js +235 -0
  763. package/dist/observability/OtlpProxy.js.map +1 -0
  764. package/dist/observability/OtlpResource.d.ts +3 -1
  765. package/dist/observability/OtlpResource.d.ts.map +1 -1
  766. package/dist/observability/OtlpResource.js +11 -4
  767. package/dist/observability/OtlpResource.js.map +1 -1
  768. package/dist/observability/OtlpSerialization.d.ts +5 -0
  769. package/dist/observability/OtlpSerialization.d.ts.map +1 -1
  770. package/dist/observability/OtlpSerialization.js +14 -3
  771. package/dist/observability/OtlpSerialization.js.map +1 -1
  772. package/dist/observability/OtlpTracer.d.ts.map +1 -1
  773. package/dist/observability/OtlpTracer.js +4 -0
  774. package/dist/observability/OtlpTracer.js.map +1 -1
  775. package/dist/observability/index.d.ts +5 -0
  776. package/dist/observability/index.d.ts.map +1 -1
  777. package/dist/observability/index.js +5 -0
  778. package/dist/observability/index.js.map +1 -1
  779. package/dist/observability/internal/protobuf.d.ts +0 -9
  780. package/dist/observability/internal/protobuf.d.ts.map +1 -1
  781. package/dist/observability/internal/protobuf.js +2 -10
  782. package/dist/observability/internal/protobuf.js.map +1 -1
  783. package/dist/persistence/CircuitBreaker.d.ts +897 -0
  784. package/dist/persistence/CircuitBreaker.d.ts.map +1 -0
  785. package/dist/persistence/CircuitBreaker.js +1165 -0
  786. package/dist/persistence/CircuitBreaker.js.map +1 -0
  787. package/dist/persistence/PersistedCache.d.ts.map +1 -1
  788. package/dist/persistence/PersistedCache.js +1 -1
  789. package/dist/persistence/PersistedCache.js.map +1 -1
  790. package/dist/persistence/PersistedQueue.d.ts +6 -2
  791. package/dist/persistence/PersistedQueue.d.ts.map +1 -1
  792. package/dist/persistence/PersistedQueue.js +162 -84
  793. package/dist/persistence/PersistedQueue.js.map +1 -1
  794. package/dist/persistence/Persistence.d.ts +28 -0
  795. package/dist/persistence/Persistence.d.ts.map +1 -1
  796. package/dist/persistence/Persistence.js +36 -8
  797. package/dist/persistence/Persistence.js.map +1 -1
  798. package/dist/persistence/RateLimiter.d.ts.map +1 -1
  799. package/dist/persistence/RateLimiter.js +8 -12
  800. package/dist/persistence/RateLimiter.js.map +1 -1
  801. package/dist/persistence/Redis.d.ts +78 -2
  802. package/dist/persistence/Redis.d.ts.map +1 -1
  803. package/dist/persistence/Redis.js +62 -7
  804. package/dist/persistence/Redis.js.map +1 -1
  805. package/dist/persistence/UserDirectories.d.ts +129 -0
  806. package/dist/persistence/UserDirectories.d.ts.map +1 -0
  807. package/dist/persistence/UserDirectories.js +178 -0
  808. package/dist/persistence/UserDirectories.js.map +1 -0
  809. package/dist/persistence/index.d.ts +10 -0
  810. package/dist/persistence/index.d.ts.map +1 -1
  811. package/dist/persistence/index.js +10 -0
  812. package/dist/persistence/index.js.map +1 -1
  813. package/dist/process/ChildProcess.d.ts +32 -5
  814. package/dist/process/ChildProcess.d.ts.map +1 -1
  815. package/dist/process/ChildProcess.js.map +1 -1
  816. package/dist/process/ChildProcessSpawner.d.ts +30 -0
  817. package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
  818. package/dist/process/ChildProcessSpawner.js +5 -2
  819. package/dist/process/ChildProcessSpawner.js.map +1 -1
  820. package/dist/reactivity/AsyncResult.d.ts +1 -1
  821. package/dist/reactivity/AsyncResult.d.ts.map +1 -1
  822. package/dist/reactivity/AsyncResult.js +1 -1
  823. package/dist/reactivity/AsyncResult.js.map +1 -1
  824. package/dist/reactivity/Atom.d.ts +69 -30
  825. package/dist/reactivity/Atom.d.ts.map +1 -1
  826. package/dist/reactivity/Atom.js +40 -15
  827. package/dist/reactivity/Atom.js.map +1 -1
  828. package/dist/reactivity/AtomHttpApi.d.ts +5 -5
  829. package/dist/reactivity/AtomHttpApi.d.ts.map +1 -1
  830. package/dist/reactivity/AtomHttpApi.js +1 -1
  831. package/dist/reactivity/AtomHttpApi.js.map +1 -1
  832. package/dist/reactivity/AtomRegistry.d.ts +2 -2
  833. package/dist/reactivity/AtomRegistry.d.ts.map +1 -1
  834. package/dist/reactivity/AtomRegistry.js +44 -9
  835. package/dist/reactivity/AtomRegistry.js.map +1 -1
  836. package/dist/reactivity/AtomRpc.d.ts +3 -3
  837. package/dist/reactivity/AtomRpc.d.ts.map +1 -1
  838. package/dist/reactivity/AtomRpc.js +1 -1
  839. package/dist/reactivity/AtomRpc.js.map +1 -1
  840. package/dist/reactivity/Hydration.d.ts.map +1 -1
  841. package/dist/reactivity/Hydration.js +46 -12
  842. package/dist/reactivity/Hydration.js.map +1 -1
  843. package/dist/reactivity/Reactivity.d.ts +71 -7
  844. package/dist/reactivity/Reactivity.d.ts.map +1 -1
  845. package/dist/reactivity/Reactivity.js +21 -12
  846. package/dist/reactivity/Reactivity.js.map +1 -1
  847. package/dist/rpc/Rpc.d.ts +18 -0
  848. package/dist/rpc/Rpc.d.ts.map +1 -1
  849. package/dist/rpc/Rpc.js +20 -0
  850. package/dist/rpc/Rpc.js.map +1 -1
  851. package/dist/rpc/RpcClient.d.ts +26 -2
  852. package/dist/rpc/RpcClient.d.ts.map +1 -1
  853. package/dist/rpc/RpcClient.js +198 -61
  854. package/dist/rpc/RpcClient.js.map +1 -1
  855. package/dist/rpc/RpcSerialization.d.ts +29 -0
  856. package/dist/rpc/RpcSerialization.d.ts.map +1 -1
  857. package/dist/rpc/RpcSerialization.js +41 -13
  858. package/dist/rpc/RpcSerialization.js.map +1 -1
  859. package/dist/rpc/RpcServer.d.ts.map +1 -1
  860. package/dist/rpc/RpcServer.js +20 -19
  861. package/dist/rpc/RpcServer.js.map +1 -1
  862. package/dist/rpc/RpcTest.d.ts +1 -0
  863. package/dist/rpc/RpcTest.d.ts.map +1 -1
  864. package/dist/rpc/RpcTest.js +1 -0
  865. package/dist/rpc/RpcTest.js.map +1 -1
  866. package/dist/schema/Model.d.ts +1 -1
  867. package/dist/schema/VariantSchema.d.ts +22 -3
  868. package/dist/schema/VariantSchema.d.ts.map +1 -1
  869. package/dist/schema/VariantSchema.js +32 -18
  870. package/dist/schema/VariantSchema.js.map +1 -1
  871. package/dist/socket/Socket.d.ts +23 -1
  872. package/dist/socket/Socket.d.ts.map +1 -1
  873. package/dist/socket/Socket.js +36 -3
  874. package/dist/socket/Socket.js.map +1 -1
  875. package/dist/sql/Migrator.d.ts +2 -1
  876. package/dist/sql/Migrator.d.ts.map +1 -1
  877. package/dist/sql/Migrator.js +21 -6
  878. package/dist/sql/Migrator.js.map +1 -1
  879. package/dist/sql/SqlClient.d.ts +148 -5
  880. package/dist/sql/SqlClient.d.ts.map +1 -1
  881. package/dist/sql/SqlClient.js +155 -27
  882. package/dist/sql/SqlClient.js.map +1 -1
  883. package/dist/sql/SqlResolver.d.ts +13 -0
  884. package/dist/sql/SqlResolver.d.ts.map +1 -1
  885. package/dist/sql/SqlResolver.js +27 -4
  886. package/dist/sql/SqlResolver.js.map +1 -1
  887. package/dist/sql/Statement.d.ts +10 -1
  888. package/dist/sql/Statement.d.ts.map +1 -1
  889. package/dist/sql/Statement.js +45 -7
  890. package/dist/sql/Statement.js.map +1 -1
  891. package/dist/testing/TestClock.d.ts.map +1 -1
  892. package/dist/testing/TestClock.js +4 -2
  893. package/dist/testing/TestClock.js.map +1 -1
  894. package/dist/testing/TestSchema.d.ts +7 -1
  895. package/dist/testing/TestSchema.d.ts.map +1 -1
  896. package/dist/testing/TestSchema.js +9 -3
  897. package/dist/testing/TestSchema.js.map +1 -1
  898. package/dist/workflow/DurableDeferred.d.ts.map +1 -1
  899. package/dist/workflow/DurableDeferred.js +21 -2
  900. package/dist/workflow/DurableDeferred.js.map +1 -1
  901. package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
  902. package/dist/workflow/WorkflowEngine.js +18 -4
  903. package/dist/workflow/WorkflowEngine.js.map +1 -1
  904. package/package.json +13 -3
  905. package/src/Arbitrary.ts +10 -2
  906. package/src/Array.ts +128 -55
  907. package/src/Bytes.ts +111 -0
  908. package/src/Channel.ts +308 -452
  909. package/src/ChannelSchema.ts +1 -49
  910. package/src/Chunk.ts +55 -61
  911. package/src/Config.ts +12 -86
  912. package/src/ConfigProvider.ts +2 -1
  913. package/src/Cron.ts +6 -3
  914. package/src/Data.ts +60 -265
  915. package/src/Duration.ts +66 -16
  916. package/src/Effect.ts +503 -168
  917. package/src/Equal.ts +8 -1
  918. package/src/Equivalence.ts +7 -4
  919. package/src/Exit.ts +27 -12
  920. package/src/FiberHandle.ts +10 -9
  921. package/src/FiberMap.ts +13 -66
  922. package/src/FileSystem.ts +10 -0
  923. package/src/Formatter.ts +28 -13
  924. package/src/Graph.ts +171 -1263
  925. package/src/Hash.ts +4 -1
  926. package/src/HashSet.ts +0 -60
  927. package/src/Iterable.ts +15 -14
  928. package/src/JsonPatch.ts +4 -0
  929. package/src/JsonSchema.ts +40 -43
  930. package/src/Layer.ts +2 -2
  931. package/src/ManagedRuntime.ts +72 -6
  932. package/src/Metric.ts +252 -510
  933. package/src/MutableHashMap.ts +4 -473
  934. package/src/MutableList.ts +7 -5
  935. package/src/MutableRef.ts +8 -1
  936. package/src/Number.ts +2 -2
  937. package/src/Optic.ts +17 -332
  938. package/src/PartitionedSemaphore.ts +24 -13
  939. package/src/Path.ts +9 -1
  940. package/src/Pool.ts +109 -37
  941. package/src/PubSub.ts +17 -13
  942. package/src/Queue.ts +5 -37
  943. package/src/Random.ts +1 -1
  944. package/src/RcMap.ts +14 -8
  945. package/src/Record.ts +51 -0
  946. package/src/Ref.ts +15 -104
  947. package/src/References.ts +5 -4
  948. package/src/RequestResolver.ts +46 -87
  949. package/src/Resource.ts +1 -1
  950. package/src/Runtime.ts +19 -18
  951. package/src/Schedule.ts +3 -95
  952. package/src/Schema.ts +639 -381
  953. package/src/SchemaAST.ts +40 -29
  954. package/src/SchemaGetter.ts +22 -5
  955. package/src/SchemaIssue.ts +44 -53
  956. package/src/SchemaParser.ts +51 -18
  957. package/src/SchemaRepresentation.ts +95 -35
  958. package/src/SchemaTransformation.ts +10 -3
  959. package/src/Scope.ts +12 -2
  960. package/src/ScopedCache.ts +17 -142
  961. package/src/SemVer.ts +1528 -0
  962. package/src/SemVerRange.ts +883 -0
  963. package/src/Semaphore.ts +67 -40
  964. package/src/Sink.ts +21 -4
  965. package/src/Stream.ts +367 -1027
  966. package/src/String.ts +11 -8
  967. package/src/TextDiff.ts +766 -0
  968. package/src/Tracer.ts +15 -1
  969. package/src/TxHashMap.ts +1 -103
  970. package/src/TxHashSet.ts +48 -753
  971. package/src/ai/AiError.ts +66 -4
  972. package/src/ai/Chat.ts +10 -5
  973. package/src/ai/Decision.ts +49 -1
  974. package/src/ai/DecisionModel.ts +264 -108
  975. package/src/ai/EmbeddingModel.ts +25 -13
  976. package/src/ai/LanguageModel.ts +9 -0
  977. package/src/ai/McpClient.ts +1211 -0
  978. package/src/ai/McpClientError.ts +329 -0
  979. package/src/ai/McpProtocol.ts +2 -2
  980. package/src/ai/McpSchema.ts +153 -35
  981. package/src/ai/McpServer.ts +231 -233
  982. package/src/ai/Prompt.ts +114 -35
  983. package/src/ai/Response.ts +220 -65
  984. package/src/ai/Tool.ts +50 -6
  985. package/src/ai/Toolkit.ts +82 -11
  986. package/src/ai/index.ts +12 -0
  987. package/src/ai/internal/mcpCore.ts +13 -14
  988. package/src/ai/internal/mcpProtocol/v2024_11_05.ts +1 -1
  989. package/src/ai/internal/mcpProtocol/v2025_03_26.ts +1 -1
  990. package/src/ai/internal/mcpProtocol/v2025_06_18.ts +3 -3
  991. package/src/ai/internal/mcpProtocol/v2025_11_25.ts +3 -3
  992. package/src/ai/internal/mcpProtocol/v2026_07_28.ts +12 -14
  993. package/src/ai/internal/mcpProtocol.ts +22 -2
  994. package/src/ai/internal/mcpRuntime.ts +3 -4
  995. package/src/ai/internal/mcpSchema/v2024_11_05.ts +20 -13
  996. package/src/ai/internal/mcpSchema/v2025_03_26.ts +4 -2
  997. package/src/ai/internal/mcpSchema/v2025_06_18.ts +7 -7
  998. package/src/ai/internal/mcpSchema/v2025_11_25.ts +8 -8
  999. package/src/ai/internal/mcpSchema/v2026_07_28.ts +44 -42
  1000. package/src/cli/Argument.ts +15 -0
  1001. package/src/cli/CliError.ts +136 -4
  1002. package/src/cli/CliOutput.ts +183 -6
  1003. package/src/cli/Command.ts +367 -48
  1004. package/src/cli/Completions.ts +56 -0
  1005. package/src/cli/Flag.ts +132 -0
  1006. package/src/cli/GlobalFlag.ts +5 -6
  1007. package/src/cli/Param.ts +151 -6
  1008. package/src/cli/TerminalCapabilities.ts +159 -0
  1009. package/src/cli/index.ts +6 -0
  1010. package/src/cli/internal/command.ts +8 -3
  1011. package/src/cli/internal/completions/bash.ts +83 -32
  1012. package/src/cli/internal/completions/descriptor.ts +11 -1
  1013. package/src/cli/internal/completions/fish.ts +10 -8
  1014. package/src/cli/internal/completions/powershell.ts +23 -14
  1015. package/src/cli/internal/completions/zsh.ts +8 -5
  1016. package/src/cli/internal/formatter.ts +18 -0
  1017. package/src/cli/internal/lexer.ts +12 -5
  1018. package/src/cli/internal/parser.ts +31 -11
  1019. package/src/cluster/ClusterCron.ts +94 -35
  1020. package/src/cluster/ClusterMetrics.ts +149 -7
  1021. package/src/cluster/ClusterWorkflowEngine.ts +130 -57
  1022. package/src/cluster/Entity.ts +4 -0
  1023. package/src/cluster/MessageStorage.ts +26 -14
  1024. package/src/cluster/Runners.ts +76 -25
  1025. package/src/cluster/Sharding.ts +200 -58
  1026. package/src/cluster/ShardingConfig.ts +20 -0
  1027. package/src/cluster/Snowflake.ts +3 -7
  1028. package/src/cluster/SqlMessageStorage.ts +58 -55
  1029. package/src/cluster/SqlRunnerStorage.ts +120 -51
  1030. package/src/cluster/internal/entityManager.ts +155 -32
  1031. package/src/devtools/DevTools.ts +3 -2
  1032. package/src/devtools/DevToolsClient.ts +29 -10
  1033. package/src/encoding/Base64.ts +38 -0
  1034. package/src/encoding/Base64Url.ts +31 -0
  1035. package/src/encoding/Ini.ts +3 -0
  1036. package/src/encoding/JsonArray.ts +849 -0
  1037. package/src/encoding/Ndjson.ts +211 -20
  1038. package/src/encoding/SchemaBinary.ts +14 -48
  1039. package/src/encoding/Sse.ts +4 -3
  1040. package/src/encoding/Tar.ts +1417 -0
  1041. package/src/encoding/Toml.ts +36 -19
  1042. package/src/encoding/Xml.ts +2037 -0
  1043. package/src/encoding/Yaml.ts +108 -36
  1044. package/src/encoding/Zip.ts +1558 -0
  1045. package/src/encoding/index.ts +24 -0
  1046. package/src/eventlog/EventJournal.ts +611 -227
  1047. package/src/eventlog/EventLog.ts +496 -196
  1048. package/src/eventlog/EventLogEncryption.ts +128 -43
  1049. package/src/eventlog/EventLogMessage.ts +62 -11
  1050. package/src/eventlog/EventLogRemote.ts +77 -21
  1051. package/src/eventlog/EventLogServer.ts +162 -20
  1052. package/src/eventlog/EventLogServerEncrypted.ts +121 -80
  1053. package/src/eventlog/EventLogServerUnencrypted.ts +180 -77
  1054. package/src/eventlog/EventRow.ts +706 -0
  1055. package/src/eventlog/SqlEventJournal.ts +496 -193
  1056. package/src/eventlog/SqlEventLogServerEncrypted.ts +212 -83
  1057. package/src/eventlog/SqlEventLogServerUnencrypted.ts +141 -62
  1058. package/src/eventlog/index.ts +6 -0
  1059. package/src/eventlog/internal/conflicts.ts +119 -0
  1060. package/src/graphql/GraphQLClientError.ts +5 -12
  1061. package/src/graphql/GraphQLProtocol.ts +12 -9
  1062. package/src/graphql/GraphQLResolver.ts +90 -239
  1063. package/src/http/Cookies.ts +10 -11
  1064. package/src/http/FetchHttpClient.ts +56 -6
  1065. package/src/http/FindMyWay/internal/router.ts +11 -0
  1066. package/src/http/Headers.ts +337 -154
  1067. package/src/http/HttpClient.ts +673 -142
  1068. package/src/http/HttpClientError.ts +35 -1
  1069. package/src/http/HttpClientRequest.ts +151 -5
  1070. package/src/http/HttpClientResponse.ts +71 -0
  1071. package/src/http/HttpEffect.ts +25 -33
  1072. package/src/http/HttpIncomingMessage.ts +3 -23
  1073. package/src/http/HttpMiddleware.ts +194 -40
  1074. package/src/http/HttpRouter.ts +10 -3
  1075. package/src/http/HttpServerError.ts +8 -5
  1076. package/src/http/HttpServerRequest.ts +172 -27
  1077. package/src/http/HttpServerResponse.ts +49 -23
  1078. package/src/http/HttpStaticServer.ts +71 -26
  1079. package/src/http/MultipartParser/internal/contentType.ts +109 -8
  1080. package/src/http/MultipartParser/internal/headers.ts +4 -16
  1081. package/src/http/MultipartParser/internal/multipart.ts +10 -32
  1082. package/src/http/Url.ts +6 -1
  1083. package/src/http/UrlParams.ts +6 -1
  1084. package/src/http/internal/compression.ts +4 -5
  1085. package/src/http/internal/decompression.ts +32 -17
  1086. package/src/http/internal/httpBody.ts +10 -2
  1087. package/src/http/internal/lazyStream.ts +25 -0
  1088. package/src/http/internal/requestState.ts +33 -0
  1089. package/src/http/internal/urlParams.ts +29 -0
  1090. package/src/http/internal/webResponse.ts +20 -0
  1091. package/src/http-api/HttpApi.ts +4 -7
  1092. package/src/http-api/HttpApiBuilder.ts +190 -32
  1093. package/src/http-api/HttpApiClient.ts +364 -90
  1094. package/src/http-api/HttpApiEndpoint.ts +248 -46
  1095. package/src/http-api/HttpApiError.ts +55 -0
  1096. package/src/http-api/HttpApiScalar.ts +4 -3
  1097. package/src/http-api/HttpApiSchema.ts +373 -18
  1098. package/src/http-api/HttpApiSwagger.ts +11 -4
  1099. package/src/http-api/HttpApiTest.ts +36 -11
  1100. package/src/http-api/OpenApi.ts +103 -58
  1101. package/src/http-api/internal/path.ts +40 -12
  1102. package/src/http-api/internal/toCodecHttpProperties.ts +56 -0
  1103. package/src/index.ts +24 -0
  1104. package/src/internal/arbitrary/runner.ts +133 -36
  1105. package/src/internal/core.ts +3 -1
  1106. package/src/internal/dateTime.ts +20 -7
  1107. package/src/internal/effect.ts +144 -100
  1108. package/src/internal/equal.ts +17 -0
  1109. package/src/internal/hashMap.ts +2 -2
  1110. package/src/internal/hydration.ts +15 -0
  1111. package/src/internal/inflate.ts +710 -0
  1112. package/src/internal/jsonSchema.ts +27 -0
  1113. package/src/internal/matcher.ts +1 -1
  1114. package/src/internal/record.ts +6 -0
  1115. package/src/internal/request.ts +21 -6
  1116. package/src/internal/schedule.ts +20 -39
  1117. package/src/internal/schema/compilerRegistry.ts +6 -1
  1118. package/src/internal/schema/content.ts +18 -0
  1119. package/src/internal/schema/fromJsonSchemaDocument.ts +458 -351
  1120. package/src/internal/schema/fromRepresentation.ts +2 -1
  1121. package/src/internal/schema/interpreter.ts +58 -45
  1122. package/src/internal/schema/standardSchema.ts +34 -32
  1123. package/src/internal/schema/toCodeDocument.ts +12 -7
  1124. package/src/internal/schema/toCodec.ts +134 -15
  1125. package/src/internal/schema/toFormatter.ts +6 -6
  1126. package/src/internal/schema/toJsonSchemaDocument.ts +246 -194
  1127. package/src/internal/schema/toRepresentation.ts +122 -140
  1128. package/src/internal/sql.ts +14 -0
  1129. package/src/internal/trie.ts +1 -3
  1130. package/src/internal/uuid.ts +15 -10
  1131. package/src/internal/version.ts +1 -1
  1132. package/src/net/NetAddress.ts +2 -9
  1133. package/src/observability/OtlpExporter.ts +5 -12
  1134. package/src/observability/OtlpMetrics.ts +5 -3
  1135. package/src/observability/OtlpProxy.ts +314 -0
  1136. package/src/observability/OtlpResource.ts +16 -6
  1137. package/src/observability/OtlpSerialization.ts +17 -3
  1138. package/src/observability/OtlpTracer.ts +4 -0
  1139. package/src/observability/index.ts +6 -0
  1140. package/src/observability/internal/protobuf.ts +2 -10
  1141. package/src/persistence/CircuitBreaker.ts +1678 -0
  1142. package/src/persistence/PersistedCache.ts +3 -1
  1143. package/src/persistence/PersistedQueue.ts +223 -153
  1144. package/src/persistence/Persistence.ts +64 -30
  1145. package/src/persistence/RateLimiter.ts +18 -21
  1146. package/src/persistence/Redis.ts +129 -8
  1147. package/src/persistence/UserDirectories.ts +273 -0
  1148. package/src/persistence/index.ts +12 -0
  1149. package/src/process/ChildProcess.ts +32 -5
  1150. package/src/process/ChildProcessSpawner.ts +41 -2
  1151. package/src/reactivity/AsyncResult.ts +5 -39
  1152. package/src/reactivity/Atom.ts +134 -166
  1153. package/src/reactivity/AtomHttpApi.ts +10 -16
  1154. package/src/reactivity/AtomRegistry.ts +50 -29
  1155. package/src/reactivity/AtomRpc.ts +6 -22
  1156. package/src/reactivity/Hydration.ts +53 -12
  1157. package/src/reactivity/Reactivity.ts +97 -39
  1158. package/src/rpc/Rpc.ts +21 -0
  1159. package/src/rpc/RpcClient.ts +283 -104
  1160. package/src/rpc/RpcSerialization.ts +53 -14
  1161. package/src/rpc/RpcServer.ts +27 -21
  1162. package/src/rpc/RpcTest.ts +3 -0
  1163. package/src/schema/VariantSchema.ts +86 -22
  1164. package/src/socket/Socket.ts +45 -20
  1165. package/src/sql/Migrator.ts +26 -11
  1166. package/src/sql/SqlClient.ts +273 -29
  1167. package/src/sql/SqlResolver.ts +32 -9
  1168. package/src/sql/Statement.ts +65 -10
  1169. package/src/testing/TestClock.ts +4 -1
  1170. package/src/testing/TestSchema.ts +9 -3
  1171. package/src/workflow/DurableDeferred.ts +23 -6
  1172. package/src/workflow/WorkflowEngine.ts +34 -10
  1173. package/dist/http/internal/preResponseHandler.d.ts +0 -2
  1174. package/dist/http/internal/preResponseHandler.d.ts.map +0 -1
  1175. package/dist/http/internal/preResponseHandler.js +0 -14
  1176. package/dist/http/internal/preResponseHandler.js.map +0 -1
  1177. package/src/http/internal/preResponseHandler.ts +0 -19
@@ -10,6 +10,8 @@
10
10
  * @stability unstable
11
11
  * @since 4.0.0
12
12
  */
13
+ import * as Arr from "../Array.ts"
14
+ import * as Cause from "../Cause.ts"
13
15
  import * as Context from "../Context.ts"
14
16
  import * as Effect from "../Effect.ts"
15
17
  import * as FiberMap from "../FiberMap.ts"
@@ -25,6 +27,8 @@ import { Reactivity } from "../reactivity/Reactivity.ts"
25
27
  import * as ReactivityLayer from "../reactivity/Reactivity.ts"
26
28
  import type * as Record from "../Record.ts"
27
29
  import * as Redacted from "../Redacted.ts"
30
+ import { CurrentLogAnnotations } from "../References.ts"
31
+ import * as Result from "../Result.ts"
28
32
  import * as Schedule from "../Schedule.ts"
29
33
  import * as Schema from "../Schema.ts"
30
34
  import * as SchemaGetter from "../SchemaGetter.ts"
@@ -36,6 +40,7 @@ import { Entry, EventJournal, type EventJournalError, makeEntryIdUnsafe, type Re
36
40
  import * as EventLogEncryption from "./EventLogEncryption.ts"
37
41
  import { StoreId } from "./EventLogMessage.ts"
38
42
  import type { EventLogRemote } from "./EventLogRemote.ts"
43
+ import { setAnchor } from "./internal/conflicts.ts"
39
44
 
40
45
  /**
41
46
  * Service for writing typed event-log events through registered handlers.
@@ -59,6 +64,27 @@ export class EventLog extends Context.Service<EventLog, {
59
64
  Event.SuccessWithTag<EventGroup.Events<Groups>, Tag>,
60
65
  Event.ErrorWithTag<EventGroup.Events<Groups>, Tag> | EventJournalError
61
66
  >
67
+ /**
68
+ * Write several events under one journal lock and one `HandlerTransaction`,
69
+ * returning each handler's result in input order. If any handler fails,
70
+ * none of the events are committed.
71
+ */
72
+ readonly writeMany: <
73
+ Groups extends EventGroup.Any,
74
+ // Pairs each event tag with its own payload.
75
+ Item extends {
76
+ readonly [Tag in Event.Tag<EventGroup.Events<Groups>>]: {
77
+ readonly event: Tag
78
+ readonly payload: Event.PayloadWithTag<EventGroup.Events<Groups>, Tag>
79
+ }
80
+ }[Event.Tag<EventGroup.Events<Groups>>]
81
+ >(options: {
82
+ readonly schema: EventLogSchema<Groups>
83
+ readonly events: Arr.NonEmptyReadonlyArray<Item>
84
+ }) => Effect.Effect<
85
+ Arr.NonEmptyArray<Event.SuccessWithTag<EventGroup.Events<Groups>, Item["event"]>>,
86
+ Event.ErrorWithTag<EventGroup.Events<Groups>, Item["event"]> | EventJournalError
87
+ >
62
88
  readonly entries: Effect.Effect<ReadonlyArray<Entry>, EventJournalError>
63
89
  readonly destroy: Effect.Effect<void, EventJournalError>
64
90
  }>()("effect/eventlog/EventLog") {}
@@ -83,7 +109,9 @@ export class Registry extends Context.Service<Registry, {
83
109
  readonly events: ReadonlyArray<string>
84
110
  readonly effect: (options: {
85
111
  readonly entries: ReadonlyArray<Entry>
86
- readonly write: (entry: Entry) => Effect.Effect<void>
112
+ // Pass an input entry as source to anchor replacements during remote replay.
113
+ // Without it, matching IDs retain their position; new IDs use the group start.
114
+ readonly write: (entry: Entry, source?: Entry) => Effect.Effect<void>
87
115
  }) => Effect.Effect<void>
88
116
  }) => Effect.Effect<void, never, Scope.Scope>
89
117
 
@@ -91,7 +119,7 @@ export class Registry extends Context.Service<Registry, {
91
119
  readonly events: ReadonlySet<string>
92
120
  readonly effect: (options: {
93
121
  readonly entries: ReadonlyArray<Entry>
94
- readonly write: (entry: Entry) => Effect.Effect<void>
122
+ readonly write: (entry: Entry, source?: Entry) => Effect.Effect<void>
95
123
  }) => Effect.Effect<void>
96
124
  }>
97
125
 
@@ -119,7 +147,7 @@ export const layerRegistry = Layer.effect(
119
147
  readonly events: ReadonlySet<string>
120
148
  readonly effect: (options: {
121
149
  readonly entries: ReadonlyArray<Entry>
122
- readonly write: (entry: Entry) => Effect.Effect<void>
150
+ readonly write: (entry: Entry, source?: Entry) => Effect.Effect<void>
123
151
  }) => Effect.Effect<void>
124
152
  }>()
125
153
 
@@ -437,6 +465,68 @@ export class CurrentStoreId extends Context.Reference<StoreId>("effect/eventlog/
437
465
  defaultValue: constant(StoreId.make("default"))
438
466
  }) {}
439
467
 
468
+ /**
469
+ * Context reference for a transaction that wraps the event handlers of each
470
+ * batch replayed from a remote and of each local `write` or `writeMany`.
471
+ *
472
+ * **When to use**
473
+ *
474
+ * Use when handlers project into a store with transactions, such as
475
+ * `sql.withTransaction` or an IndexedDB transaction over the projection
476
+ * tables, so a batch of N events commits once instead of N times.
477
+ *
478
+ * **Details**
479
+ *
480
+ * The journal performs no I/O while the transaction is open: it reads replay
481
+ * conflicts before the transaction starts and commits the batch after it
482
+ * completes. Defaults to running the handlers without a transaction.
483
+ *
484
+ * If the transaction fails, the journal commits nothing from the batch. For a
485
+ * replayed batch, the remote is subscribed again after a backoff of up to 10
486
+ * seconds and the batch is delivered again, so later batches from that remote
487
+ * wait until it succeeds; local writes and other remotes are not blocked. A
488
+ * local write fails with the error and is not retried.
489
+ *
490
+ * **Gotchas**
491
+ *
492
+ * - A replayed entry that fails to decode, or whose handler fails or dies,
493
+ * fails the whole batch, which is retried as above. A failure that repeats
494
+ * on every attempt, such as a payload written by a newer schema, stops sync
495
+ * from that remote until the app is updated to handle it.
496
+ * - In a local write, an error returned by a handler fails the transaction
497
+ * and the write, and the journal commits none of its events.
498
+ * - Failures that abort the underlying transaction fail the whole batch, even
499
+ * when the handler recovers from them. In IndexedDB, any failed request that
500
+ * is not prevented aborts the whole transaction, and in PostgreSQL so does a
501
+ * failed statement outside a savepoint.
502
+ * - Failing the batch does not undo side effects of handlers that already ran.
503
+ * Only changes made inside a transaction that rolls back are undone.
504
+ * - Replay handlers must tolerate running more than once for the same entry.
505
+ * - Unless the transaction and the journal share a database connection, the
506
+ * transaction commits before the journal does, and the two commits are not
507
+ * atomic. A crash between them replays a remote batch on restart, but a
508
+ * local write is lost from the journal while its projection changes remain.
509
+ * - An IndexedDB transaction commits once it has no pending requests and
510
+ * control returns to the event loop. A custom wrapper must stop the fiber
511
+ * from yielding to the scheduler while it is open, by providing
512
+ * `References.PreventSchedulerYield` as `withTransaction` from
513
+ * `@effect/platform-browser` does. Otherwise it can commit partway through a
514
+ * batch, and the remaining handlers fail.
515
+ * - The transaction stays open for the whole batch, so other read-write
516
+ * transactions on the same tables wait for it.
517
+ * - The transaction must not change the error or success of the wrapped
518
+ * effect. Convert its own failures into defects.
519
+ *
520
+ * @stability unstable
521
+ * @category services
522
+ * @since 4.0.6
523
+ */
524
+ export class HandlerTransaction extends Context.Reference<
525
+ <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>
526
+ >("effect/eventlog/EventLog/HandlerTransaction", {
527
+ defaultValue: constant(identity)
528
+ }) {}
529
+
440
530
  const RedactedUint8Array = Schema.Uint8ArrayFromBase64.pipe(
441
531
  Schema.decodeTo(Schema.Redacted(Schema.Uint8Array), {
442
532
  decode: SchemaGetter.transform((value) => Redacted.make(value)),
@@ -581,28 +671,19 @@ export const group = <Events extends Event.Any, Return>(
581
671
  })
582
672
  ) as any
583
673
 
584
- /**
585
- * Registers a compaction handler for an event group.
586
- *
587
- * **Details**
588
- *
589
- * During remote replay, matching entries are decoded, grouped by primary key, and
590
- * passed to the compaction effect, which may write replacement entries.
591
- *
592
- * @stability unstable
593
- * @category compaction
594
- * @since 4.0.0
595
- */
596
- export const groupCompaction = <Events extends Event.Any, R>(
674
+ const registerBatchCompaction = <Events extends Event.Any, R>(
597
675
  group: EventGroup.EventGroup<Events>,
598
676
  effect: (options: {
599
- readonly primaryKey: string
600
- readonly entries: ReadonlyArray<Entry>
601
- readonly events: ReadonlyArray<Event.TaggedPayload<Events>>
602
- readonly write: <Tag extends Event.Tag<Events>>(
677
+ readonly entries: ReadonlyArray<{
678
+ readonly entry: Entry
679
+ readonly event: Event.TaggedPayload<Events> | undefined
680
+ }>
681
+ readonly writeFrom: <Tag extends Event.Tag<Events>>(
682
+ source: Entry,
603
683
  tag: Tag,
604
684
  payload: Event.PayloadWithTag<Events, Tag>
605
685
  ) => Effect.Effect<void, never, Event.PayloadSchemaWithTag<Events, Tag>["EncodingServices"]>
686
+ readonly forward: (entry: Entry) => Effect.Effect<void>
606
687
  }) => Effect.Effect<void, never, R>
607
688
  ): Layer.Layer<never, never, R | Event.PayloadSchema<Events>["DecodingServices"] | Registry> =>
608
689
  Layer.effectDiscard(
@@ -616,70 +697,197 @@ export const groupCompaction = <Events extends Event.Any, R>(
616
697
  const isEventTag = (tag: string): tag is Event.Tag<Events> => Object.hasOwn(group.events, tag)
617
698
  const decodePayload = <Tag extends Event.Tag<Events>>(tag: Tag, payload: Uint8Array) =>
618
699
  Schema.decodeUnknownEffect(group.events[tag].payloadSchemaBinary)(payload).pipe(
619
- Effect.updateContext((input) => Context.merge(services, input)),
620
- Effect.orDie
621
- ) as unknown as Effect.Effect<Event.PayloadWithTag<Events, Tag>>
622
- const writePayload = Effect.fnUntraced(function*<Tag extends Event.Tag<Events>>(
623
- timestamp: number,
700
+ Effect.updateContext((input) => Context.merge(services, input))
701
+ ) as unknown as Effect.Effect<Event.PayloadWithTag<Events, Tag>, Schema.SchemaError>
702
+ const writeFrom = Effect.fnUntraced(function*<Tag extends Event.Tag<Events>>(
703
+ source: Entry,
624
704
  tag: Tag,
625
705
  payload: Event.PayloadWithTag<Events, Tag>
626
706
  ): Effect.fn.Return<void, never, Event.PayloadSchemaWithTag<Events, Tag>["EncodingServices"]> {
627
707
  const event = Object.hasOwn(group.events, tag) ? group.events[tag] : undefined!
628
708
  const entry = new Entry({
629
- id: makeEntryIdUnsafe({ msecs: timestamp }),
709
+ id: makeEntryIdUnsafe({ msecs: source.createdAtMillis }),
630
710
  event: tag,
631
711
  payload: yield* Schema.encodeUnknownEffect(event.payloadSchemaBinary)(payload).pipe(
632
712
  Effect.orDie
633
713
  ) as any,
634
714
  primaryKey: event.primaryKey(payload)
635
715
  }, { disableChecks: true })
636
- yield* write(entry)
716
+ yield* write(entry, source)
637
717
  })
718
+ const forward = (entry: Entry) => write(entry)
638
719
 
639
- const byPrimaryKey = new Map<
640
- string,
641
- {
642
- readonly entries: Array<Entry>
643
- readonly taggedPayloads: Array<Event.TaggedPayload<Events>>
644
- }
645
- >()
720
+ const batch: Array<{
721
+ readonly entry: Entry
722
+ readonly event: Event.TaggedPayload<Events> | undefined
723
+ }> = []
646
724
  for (const entry of entries) {
647
725
  if (!isEventTag(entry.event)) {
648
726
  continue
649
727
  }
650
- const payload = yield* decodePayload(entry.event, entry.payload)
651
- const record = byPrimaryKey.get(entry.primaryKey)
652
- const taggedPayload = { _tag: entry.event, payload } as unknown as Event.TaggedPayload<Events>
653
- if (record) {
654
- record.entries.push(entry)
655
- record.taggedPayloads.push(taggedPayload)
656
- } else {
657
- byPrimaryKey.set(entry.primaryKey, {
658
- entries: [entry],
659
- taggedPayloads: [taggedPayload]
660
- })
661
- }
728
+ const payload = yield* Effect.result(decodePayload(entry.event, entry.payload))
729
+ batch.push({
730
+ entry,
731
+ event: Result.isFailure(payload)
732
+ ? undefined
733
+ : { _tag: entry.event, payload: payload.success } as unknown as Event.TaggedPayload<Events>
734
+ })
662
735
  }
663
736
 
664
- for (const [primaryKey, { entries, taggedPayloads }] of byPrimaryKey) {
665
- yield* Effect.orDie(
666
- effect({
667
- primaryKey,
668
- entries,
669
- events: taggedPayloads,
670
- write(tag, payload) {
671
- return Effect.orDie(writePayload(entries[0].createdAtMillis, tag, payload))
672
- }
673
- }).pipe(
674
- Effect.updateContext((input) => Context.merge(services, input))
675
- )
676
- ) as any
677
- }
737
+ yield* Effect.orDie(
738
+ effect({ entries: batch, writeFrom, forward }).pipe(
739
+ Effect.updateContext((input) => Context.merge(services, input))
740
+ )
741
+ ) as any
678
742
  })
679
743
  })
680
744
  })
681
745
  )
682
746
 
747
+ /**
748
+ * Registers a batch compaction handler for an event group.
749
+ *
750
+ * **When to use**
751
+ *
752
+ * Use when an event under one primary key affects entries under other keys.
753
+ *
754
+ * **Details**
755
+ *
756
+ * The compaction effect receives every entry for the group in batch order, with
757
+ * its decoded event or `event: undefined` if the payload cannot be decoded.
758
+ *
759
+ * Only entries that the effect outputs are kept:
760
+ *
761
+ * - `forward(entry)` keeps an input entry unchanged, with the same id, payload,
762
+ * and primary key.
763
+ * - `write(tag, payload)` encodes a replacement entry anchored to the first
764
+ * entry in the batch, with a fresh id in that entry's millisecond.
765
+ *
766
+ * Entries that are neither forwarded nor replaced are dropped, including entries
767
+ * that could not be decoded. During remote replay, kept entries are replayed in
768
+ * the id order of their anchors, then in write order, and a replacement's
769
+ * conflicts are the stored entries newer than its anchor.
770
+ *
771
+ * **Gotchas**
772
+ *
773
+ * Compaction runs before conflicts are read, so it never sees stored entries.
774
+ * Collapsing several entries into one is only safe when no stored entry for
775
+ * the same event and primary key has an id between theirs. Otherwise that
776
+ * stored entry should have applied between the collapsed ones, and replicas
777
+ * that received the entries in separate batches end up different.
778
+ *
779
+ * @see {@link groupCompaction} for compaction grouped by primary key
780
+ *
781
+ * @stability unstable
782
+ * @category compaction
783
+ * @since 4.0.0
784
+ */
785
+ export const groupBatchCompaction = <Events extends Event.Any, R>(
786
+ group: EventGroup.EventGroup<Events>,
787
+ effect: (options: {
788
+ readonly entries: ReadonlyArray<{
789
+ readonly entry: Entry
790
+ readonly event: Event.TaggedPayload<Events> | undefined
791
+ }>
792
+ readonly write: <Tag extends Event.Tag<Events>>(
793
+ tag: Tag,
794
+ payload: Event.PayloadWithTag<Events, Tag>
795
+ ) => Effect.Effect<void, never, Event.PayloadSchemaWithTag<Events, Tag>["EncodingServices"]>
796
+ readonly forward: (entry: Entry) => Effect.Effect<void>
797
+ }) => Effect.Effect<void, never, R>
798
+ ): Layer.Layer<never, never, R | Event.PayloadSchema<Events>["DecodingServices"] | Registry> =>
799
+ registerBatchCompaction(group, ({ entries, writeFrom, forward }) =>
800
+ effect({
801
+ entries,
802
+ write: (tag, payload) => writeFrom(entries[0].entry, tag, payload),
803
+ forward
804
+ }))
805
+
806
+ /**
807
+ * Registers a compaction handler for an event group.
808
+ *
809
+ * **Details**
810
+ *
811
+ * During remote replay, decoded entries are grouped by primary key and passed to
812
+ * the compaction effect, which outputs the entries to keep:
813
+ *
814
+ * - `forward(entry)` keeps an input entry unchanged, with the same id, payload,
815
+ * and primary key.
816
+ * - `write(tag, payload)` encodes a replacement entry anchored to the first
817
+ * decoded entry for the primary key, with a fresh id in that entry's
818
+ * millisecond.
819
+ *
820
+ * Entries that are neither forwarded nor replaced are dropped. Entries that
821
+ * cannot be decoded are not passed to the effect and are kept unchanged.
822
+ * During remote replay, kept entries are replayed in the id order of their
823
+ * anchors, then in write order, and a replacement's conflicts are the stored
824
+ * entries newer than its anchor.
825
+ *
826
+ * **Gotchas**
827
+ *
828
+ * Compaction runs before conflicts are read, so it never sees stored entries.
829
+ * Collapsing several entries into one is only safe when no stored entry for
830
+ * the same event and primary key has an id between theirs. Otherwise that
831
+ * stored entry should have applied between the collapsed ones, and replicas
832
+ * that received the entries in separate batches end up different.
833
+ *
834
+ * @see {@link groupBatchCompaction} for compaction across primary keys
835
+ *
836
+ * @stability unstable
837
+ * @category compaction
838
+ * @since 4.0.0
839
+ */
840
+ export const groupCompaction = <Events extends Event.Any, R>(
841
+ group: EventGroup.EventGroup<Events>,
842
+ effect: (options: {
843
+ readonly primaryKey: string
844
+ readonly entries: ReadonlyArray<Entry>
845
+ readonly events: ReadonlyArray<Event.TaggedPayload<Events>>
846
+ readonly write: <Tag extends Event.Tag<Events>>(
847
+ tag: Tag,
848
+ payload: Event.PayloadWithTag<Events, Tag>
849
+ ) => Effect.Effect<void, never, Event.PayloadSchemaWithTag<Events, Tag>["EncodingServices"]>
850
+ readonly forward: (entry: Entry) => Effect.Effect<void>
851
+ }) => Effect.Effect<void, never, R>
852
+ ): Layer.Layer<never, never, R | Event.PayloadSchema<Events>["DecodingServices"] | Registry> =>
853
+ registerBatchCompaction(
854
+ group,
855
+ Effect.fnUntraced(function*({ entries, writeFrom, forward }) {
856
+ const byPrimaryKey = new Map<
857
+ string,
858
+ {
859
+ readonly entries: Array<Entry>
860
+ readonly events: Array<Event.TaggedPayload<Events>>
861
+ }
862
+ >()
863
+ for (const { entry, event } of entries) {
864
+ if (event === undefined) {
865
+ yield* forward(entry)
866
+ continue
867
+ }
868
+ const record = byPrimaryKey.get(entry.primaryKey)
869
+ if (record) {
870
+ record.entries.push(entry)
871
+ record.events.push(event)
872
+ } else {
873
+ byPrimaryKey.set(entry.primaryKey, { entries: [entry], events: [event] })
874
+ }
875
+ }
876
+
877
+ for (const [primaryKey, { entries, events }] of byPrimaryKey) {
878
+ yield* effect({
879
+ primaryKey,
880
+ entries,
881
+ events,
882
+ write: (tag, payload) => writeFrom(entries[0], tag, payload),
883
+ forward
884
+ })
885
+ }
886
+ })
887
+ )
888
+
889
+ type ReactivityKeyName = [keyof ReactivityLayer.Keys] extends [never] ? string : keyof ReactivityLayer.Keys
890
+
683
891
  /**
684
892
  * Registers reactivity keys to invalidate when events from a group are written or
685
893
  * replayed.
@@ -695,8 +903,8 @@ export const groupCompaction = <Events extends Event.Any, R>(
695
903
  export const groupReactivity = <Events extends Event.Any>(
696
904
  group: EventGroup.EventGroup<Events>,
697
905
  keys:
698
- | { readonly [Tag in Event.Tag<Events>]?: ReadonlyArray<string> }
699
- | ReadonlyArray<string>
906
+ | { readonly [Tag in Event.Tag<Events>]?: ReadonlyArray<ReactivityKeyName> }
907
+ | ReadonlyArray<ReactivityKeyName>
700
908
  ): Layer.Layer<never, never, Registry> =>
701
909
  Effect.gen(function*() {
702
910
  const registry = yield* Registry
@@ -719,8 +927,10 @@ export const groupReactivity = <Events extends Event.Any>(
719
927
  * **Details**
720
928
  *
721
929
  * The returned handler decodes the entry and conflicts with the registered event
722
- * schema, runs the matching handler with the supplied identity and store id, logs
723
- * failures, and invalidates configured reactivity keys.
930
+ * schema, runs the matching handler with the supplied identity and store id, and
931
+ * invalidates configured reactivity keys. Decode and handler failures are logged
932
+ * and fail the effect. Invalidations are deferred until the end of an enclosing
933
+ * `Reactivity.withBatch`.
724
934
  *
725
935
  * @stability unstable
726
936
  * @category handlers
@@ -736,60 +946,128 @@ export const makeReplayFromRemote = (options: {
736
946
  readonly service: string
737
947
  readonly effect: string
738
948
  }
739
- }) =>
740
- Effect.fnUntraced(
741
- function*({ conflicts, entry }: {
742
- readonly entry: Entry
743
- readonly conflicts: ReadonlyArray<Entry>
744
- }): Effect.fn.Return<void, Schema.SchemaError> {
949
+ }) => {
950
+ const replayBatch = makeReplayBatchFromRemote(options)
951
+ return (input: ReplayInput) => replayBatch([input])
952
+ }
953
+
954
+ type ReplayInput = {
955
+ readonly entry: Entry
956
+ readonly conflicts: ReadonlyArray<Entry>
957
+ }
958
+
959
+ type DecodedConflict = { entry: Entry; payload: unknown }
960
+
961
+ type ReplayBatch = {
962
+ readonly context: Context.Context<never>
963
+ readonly handlerContexts: Map<Handlers.Item<any>, Context.Context<any>>
964
+ readonly decodedConflicts: Map<Entry, DecodedConflict>
965
+ }
966
+
967
+ /**
968
+ * Replays a batch, merging each handler's context with the batch context once
969
+ * and decoding each conflict entry shared by several entries once. The batch
970
+ * state is created per execution, so transaction retries start fresh.
971
+ */
972
+ const makeReplayBatchFromRemote = (options: Parameters<typeof makeReplayFromRemote>[0]) => {
973
+ const replayEntry = makeReplayEntryFromRemote(options)
974
+ return (batch: ReadonlyArray<ReplayInput>) =>
975
+ Effect.contextWith((context: Context.Context<never>) => {
976
+ const state: ReplayBatch = { context, handlerContexts: new Map(), decodedConflicts: new Map() }
977
+ return Effect.forEach(batch, (input) => replayEntry(input, state), { discard: true })
978
+ })
979
+ }
980
+
981
+ // An entry's context is the batch context plus its log annotations, so only
982
+ // the annotations need to be copied into the merged handler context.
983
+ const withEntryAnnotations = (context: Context.Context<any>, entryContext: Context.Context<any>) =>
984
+ Context.add(context, CurrentLogAnnotations, Context.get(entryContext, CurrentLogAnnotations))
985
+
986
+ const makeReplayEntryFromRemote = (options: Parameters<typeof makeReplayFromRemote>[0]) => {
987
+ // Decoders depend only on the event schema, so they are shared across batches.
988
+ const decoders = new WeakMap<
989
+ Handlers.Item<any>,
990
+ (input: unknown) => Effect.Effect<unknown, Schema.SchemaError, unknown>
991
+ >()
992
+ const decoderFor = (handler: Handlers.Item<any>) => {
993
+ let decoder = decoders.get(handler)
994
+ if (decoder === undefined) {
995
+ decoder = Schema.decodeUnknownEffect(handler.event.payloadSchemaBinary)
996
+ decoders.set(handler, decoder)
997
+ }
998
+ return decoder
999
+ }
1000
+ const contextFor = (batch: ReplayBatch, handler: Handlers.Item<any>) => {
1001
+ let context = batch.handlerContexts.get(handler)
1002
+ if (context === undefined) {
1003
+ context = Context.merge(handler.context, batch.context)
1004
+ batch.handlerContexts.set(handler, context)
1005
+ }
1006
+ return context
1007
+ }
1008
+
1009
+ return Effect.fnUntraced(
1010
+ function*(
1011
+ { conflicts, entry }: ReplayInput,
1012
+ batch: ReplayBatch
1013
+ ): Effect.fn.Return<void, unknown> {
745
1014
  const handler = options.handlers.get(entry.event) as Handlers.Item<any> | undefined
746
1015
  if (!handler) {
747
1016
  return yield* Effect.logDebug(`Event handler not found for: "${entry.event}"`)
748
1017
  }
749
1018
 
750
- const decodePayload = Schema.decodeUnknownEffect(handler.event.payloadSchemaBinary)
751
- const decodedConflicts: Array<{ entry: Entry; payload: unknown }> = new Array(conflicts.length)
1019
+ const decodePayload = decoderFor(handler)
1020
+ const context = contextFor(batch, handler)
1021
+ const conflictPayloads: Array<DecodedConflict> = new Array(conflicts.length)
752
1022
  for (let i = 0; i < conflicts.length; i++) {
753
- decodedConflicts[i] = {
754
- entry: conflicts[i],
755
- payload: yield* decodePayload(conflicts[i].payload).pipe(
756
- Effect.updateContext((input) => Context.merge(handler.context, input))
757
- ) as any
1023
+ const conflict = conflicts[i]
1024
+ let decoded = batch.decodedConflicts.get(conflict)
1025
+ if (!decoded) {
1026
+ decoded = {
1027
+ entry: conflict,
1028
+ payload: yield* decodePayload(conflict.payload).pipe(
1029
+ Effect.updateContext((input) => withEntryAnnotations(context, input))
1030
+ ) as any
1031
+ }
1032
+ batch.decodedConflicts.set(conflict, decoded)
758
1033
  }
1034
+ conflictPayloads[i] = decoded
759
1035
  }
760
1036
 
1037
+ // Conflicts decode with the caller's Identity; the payload and handler use the log's.
761
1038
  yield* decodePayload(entry.payload).pipe(
762
1039
  Effect.flatMap((payload) =>
763
1040
  handler.handler({
764
1041
  storeId: options.storeId,
765
1042
  payload,
766
1043
  entry,
767
- conflicts: decodedConflicts
1044
+ conflicts: conflictPayloads
768
1045
  })
769
1046
  ),
770
- Effect.provideService(Identity, options.identity),
771
- Effect.updateContext((input) => Context.merge(handler.context, input)),
1047
+ Effect.updateContext((input) => Context.add(withEntryAnnotations(context, input), Identity, options.identity)),
772
1048
  Effect.asVoid
773
1049
  ) as any
774
1050
 
775
- const keys = Object.hasOwn(options.reactivityKeys, entry.event)
776
- ? options.reactivityKeys[entry.event]
777
- : undefined
778
- if (keys) {
779
- for (const key of keys) {
780
- options.reactivity.invalidateUnsafe({
781
- [key]: [entry.primaryKey]
782
- })
783
- }
784
- }
1051
+ yield* invalidateEntry(options.reactivity, options.reactivityKeys, entry)
785
1052
  },
786
- Effect.catchCause(Effect.logError),
1053
+ Effect.tapCauseIf((cause) => !Cause.hasInterruptsOnly(cause), Effect.logError),
787
1054
  (effect, { entry }) =>
788
1055
  Effect.annotateLogs(effect, {
789
1056
  ...options.logAnnotations,
790
1057
  entryId: entry.idString
791
1058
  })
792
1059
  )
1060
+ }
1061
+
1062
+ const invalidateEntry = (
1063
+ reactivity: Reactivity,
1064
+ reactivityKeys: Record<string, ReadonlyArray<string>>,
1065
+ entry: Entry
1066
+ ): Effect.Effect<void> => {
1067
+ const keys = Object.hasOwn(reactivityKeys, entry.event) ? reactivityKeys[entry.event] : undefined
1068
+ if (!keys) return Effect.void
1069
+ return Effect.forEach(keys, (key) => reactivity.invalidate({ [key]: [entry.primaryKey] }), { discard: true })
1070
+ }
793
1071
 
794
1072
  const remoteRetrySchedule = Schedule.min([
795
1073
  Schedule.exponential(200, 1.5),
@@ -803,7 +1081,8 @@ const make = Effect.gen(function*() {
803
1081
  const registry = yield* Registry
804
1082
 
805
1083
  const reactivity = yield* Reactivity
806
- const replayFromRemote = makeReplayFromRemote({
1084
+ const handlerTransaction = yield* HandlerTransaction
1085
+ const replayFromRemote = makeReplayBatchFromRemote({
807
1086
  handlers: registry.handlers,
808
1087
  storeId,
809
1088
  identity,
@@ -816,78 +1095,80 @@ const make = Effect.gen(function*() {
816
1095
  })
817
1096
 
818
1097
  const invalidateReactivityEntries = (entries: ReadonlyArray<Entry>) =>
819
- Effect.sync(() => {
820
- for (const entry of entries) {
821
- const keys = Object.hasOwn(registry.reactivityKeys, entry.event)
822
- ? registry.reactivityKeys[entry.event]
823
- : undefined
824
- if (!keys) {
825
- continue
826
- }
827
- for (const key of keys) {
828
- reactivity.invalidateUnsafe({
829
- [key]: [entry.primaryKey]
830
- })
831
- }
832
- }
833
- })
1098
+ Effect.forEach(entries, (entry) => invalidateEntry(reactivity, registry.reactivityKeys, entry), { discard: true })
834
1099
 
835
1100
  const runRemote = Effect.fnUntraced(
836
1101
  function*(remote: EventLogRemote["Service"]) {
837
- const startSequence = yield* journal.nextRemoteSequence(remote.id)
838
-
839
1102
  yield* Effect.gen(function*() {
840
- const changes = yield* remote.changes({ identity, startSequence, storeId })
1103
+ const startSequence = yield* journal.nextRemoteSequence(remote.id)
1104
+ const changes = yield* remote.changes({
1105
+ identity,
1106
+ startSequence,
1107
+ storeId,
1108
+ knownEntries: journal.entriesById
1109
+ })
841
1110
  while (true) {
842
1111
  const entries = yield* Queue.takeAll(changes)
843
1112
  yield* journal.writeFromRemote({
844
1113
  remoteId: remote.id,
845
- entries: entries.flat(),
1114
+ entries,
846
1115
  compact: registry.compactors.size > 0
847
1116
  ? Effect.fnUntraced(function*(remoteEntries) {
848
- const finalEntries: Array<Entry> = []
1117
+ // The journal sorts the batch by anchor, so output order is irrelevant.
1118
+ const output: Array<Entry> = []
1119
+ const inputs = new Map<string, Entry>()
1120
+ const outputCounts = new Map<Entry, number>()
849
1121
  const compactable = new Map<
850
1122
  (options: {
851
1123
  readonly entries: ReadonlyArray<Entry>
852
- readonly write: (entry: Entry) => Effect.Effect<void>
1124
+ readonly write: (entry: Entry, source?: Entry) => Effect.Effect<void>
853
1125
  }) => Effect.Effect<void>,
854
1126
  Array<Entry>
855
1127
  >()
856
1128
 
857
- for (let i = 0; i < remoteEntries.length; i++) {
858
- const remoteEntry = remoteEntries[i]
859
- const entry = remoteEntry.entry
1129
+ for (const { entry } of remoteEntries) {
1130
+ inputs.set(entry.idString, entry)
860
1131
  const compactor = registry.compactors.get(entry.event)
861
1132
  if (!compactor) {
862
- finalEntries.push(entry)
1133
+ output.push(entry)
863
1134
  continue
864
1135
  }
865
- let arr = compactable.get(compactor.effect)
866
- if (!arr) {
867
- arr = []
868
- compactable.set(compactor.effect, arr)
1136
+ let group = compactable.get(compactor.effect)
1137
+ if (!group) {
1138
+ group = []
1139
+ compactable.set(compactor.effect, group)
869
1140
  }
870
- arr.push(entry)
1141
+ group.push(entry)
871
1142
  }
872
1143
 
873
1144
  for (const [compact, entries] of compactable) {
874
1145
  yield* compact({
875
1146
  entries,
876
- write(entry) {
1147
+ write(entry, source) {
877
1148
  return Effect.sync(() => {
878
- finalEntries.push(entry)
1149
+ // Each output is ordered and conflict-checked by its source,
1150
+ // then by write order, not by its own fresh id. An output
1151
+ // without a known source stands for the group's first entry.
1152
+ const anchor = inputs.get((source ?? entry).idString) ?? entries[0]
1153
+ const index = outputCounts.get(anchor) ?? 0
1154
+ outputCounts.set(anchor, index + 1)
1155
+ setAnchor(entry, anchor, index)
1156
+ output.push(entry)
879
1157
  })
880
1158
  }
881
1159
  })
882
1160
  }
883
1161
 
884
- return finalEntries.sort(Entry.Order)
1162
+ return output
885
1163
  })
886
1164
  : undefined,
887
- effect: replayFromRemote
1165
+ // A failed batch is not committed, so the remote redelivers it on retry.
1166
+ effect: (batch) => handlerTransaction(replayFromRemote(batch)).pipe(Effect.orDie)
888
1167
  }).pipe(
889
1168
  Effect.tap(({ duplicateEntries }) => invalidateReactivityEntries(duplicateEntries)),
890
- journal.withLock(storeId)
1169
+ journal.withLock(storeId),
1170
+ // Outside the lock, so queries re-run after the journal transaction commits.
1171
+ reactivity.withBatch
891
1172
  )
892
1173
  }
893
1174
  }).pipe(
@@ -901,7 +1182,19 @@ const make = Effect.gen(function*() {
901
1182
  Effect.forkScoped
902
1183
  )
903
1184
 
904
- const write = journal.withRemoteUncommited(remote.id, (entries) => remote.write({ identity, entries, storeId }))
1185
+ const write = journal.withRemoteUncommited(
1186
+ remote.id,
1187
+ (entries) =>
1188
+ remote.write({ identity, entries, storeId }).pipe(
1189
+ Effect.flatMap((acks) =>
1190
+ acks === undefined || acks.length === 0
1191
+ ? Effect.void
1192
+ : journal.writeRemoteAcks({ remoteId: remote.id, acks, firstSequence: remote.firstSequence }).pipe(
1193
+ journal.withLock(storeId)
1194
+ )
1195
+ )
1196
+ )
1197
+ )
905
1198
  const writeUntilSuccess = write.pipe(
906
1199
  Effect.tapCause(Effect.logDebug),
907
1200
  Effect.retry(remoteRetrySchedule)
@@ -926,60 +1219,49 @@ const make = Effect.gen(function*() {
926
1219
  Effect.orDie
927
1220
  )
928
1221
 
929
- const writeHandler = Effect.fnUntraced(function*(handler: Handlers.Item<any>, options: {
930
- readonly schema: EventLogSchema<any>
931
- readonly event: string
932
- readonly payload: unknown
933
- }) {
934
- const payload = yield* Schema.encodeUnknownEffect(handler.event.payloadSchemaBinary)(options.payload).pipe(
935
- Effect.orDie
936
- )
937
- return yield* journal.withLock(storeId)(journal.write({
938
- event: options.event,
939
- primaryKey: handler.event.primaryKey(options.payload as never),
940
- payload,
941
- effect: (entry) =>
942
- handler.handler({
943
- storeId,
944
- payload: options.payload,
945
- entry,
946
- conflicts: []
947
- }).pipe(
948
- Effect.updateContext((input) => Context.merge(handler.context, input)),
949
- Effect.provideService(Identity, identity),
950
- Effect.tap(() => {
951
- const keys = Object.hasOwn(registry.reactivityKeys, entry.event)
952
- ? registry.reactivityKeys[entry.event]
953
- : undefined
954
- if (keys) {
955
- for (const key of keys) {
956
- reactivity.invalidateUnsafe({
957
- [key]: [entry.primaryKey]
958
- })
959
- }
960
- }
961
- return Effect.void
962
- })
963
- )
964
- }))
965
- })
966
-
967
- const eventLogWrite = (options: {
968
- readonly schema: EventLogSchema<any>
969
- readonly event: string
970
- readonly payload: unknown
971
- }) => {
972
- const handler = registry.handlers.get(options.event) as Handlers.Item<any> | undefined
973
- if (handler === undefined) {
974
- return Effect.die(`Event handler not found for: "${options.event}"`)
975
- }
976
- return writeHandler(handler, options)
977
- }
1222
+ const writeEvents = (
1223
+ events: Arr.NonEmptyReadonlyArray<{ readonly event: string; readonly payload: unknown }>
1224
+ ): Effect.Effect<Arr.NonEmptyArray<unknown>, unknown> =>
1225
+ Effect.forEach(events, ({ event, payload }) => {
1226
+ const handler = registry.handlers.get(event) as Handlers.Item<any> | undefined
1227
+ if (handler === undefined) {
1228
+ return Effect.die(`Event handler not found for: "${event}"`)
1229
+ }
1230
+ return Schema.encodeUnknownEffect(handler.event.payloadSchemaBinary)(payload).pipe(
1231
+ Effect.orDie,
1232
+ Effect.map((encoded) => ({
1233
+ handler,
1234
+ payload,
1235
+ entry: { event, primaryKey: handler.event.primaryKey(payload as never), payload: encoded as Uint8Array }
1236
+ }))
1237
+ )
1238
+ }).pipe(
1239
+ Effect.flatMap((writes) =>
1240
+ journal.withLock(storeId)(journal.writeMany({
1241
+ entries: Arr.map(writes, (write) => write.entry),
1242
+ effect: (written) =>
1243
+ handlerTransaction(Effect.forEach(written, (entry, i) => {
1244
+ const { handler, payload } = writes[i]
1245
+ return handler.handler({ storeId, payload, entry, conflicts: [] }).pipe(
1246
+ Effect.updateContext((input) => Context.merge(handler.context, input)),
1247
+ Effect.provideService(Identity, identity),
1248
+ Effect.tap(() => invalidateEntry(reactivity, registry.reactivityKeys, entry))
1249
+ )
1250
+ }))
1251
+ }))
1252
+ ),
1253
+ // Outside the lock, so queries re-run after the handler transaction and
1254
+ // the journal commit.
1255
+ reactivity.withBatch
1256
+ ) as Effect.Effect<Arr.NonEmptyArray<unknown>, unknown>
978
1257
 
979
1258
  yield* registry.handleRemote(runRemote)
980
1259
 
981
1260
  return EventLog.of({
982
- write: eventLogWrite as EventLog["Service"]["write"],
1261
+ write: ((options: { readonly event: string; readonly payload: unknown }) =>
1262
+ Effect.map(writeEvents([options]), Arr.headNonEmpty)) as EventLog["Service"]["write"],
1263
+ writeMany: ((options: { readonly events: Arr.NonEmptyReadonlyArray<any> }) =>
1264
+ writeEvents(options.events)) as EventLog["Service"]["writeMany"],
983
1265
  entries: journal.entries,
984
1266
  destroy: journal.destroy
985
1267
  })
@@ -1049,8 +1331,27 @@ export const layer = <Groups extends EventGroup.Any, E, R>(
1049
1331
  *
1050
1332
  * **Details**
1051
1333
  *
1052
- * The returned function delegates to the `EventLog` service and preserves each
1053
- * event's success and error types.
1334
+ * The returned function takes one `{ event, payload }` object, typed so the
1335
+ * payload matches the event, as `writeMany` items are. It delegates to the
1336
+ * `EventLog` service and preserves each event's success and error types.
1337
+ *
1338
+ * **Example** (Writing events with a client)
1339
+ *
1340
+ * ```ts
1341
+ * import { Effect, Schema } from "effect"
1342
+ * import { EventGroup, EventLog } from "effect/eventlog"
1343
+ *
1344
+ * const Users = EventGroup.empty.add({
1345
+ * tag: "UserCreated",
1346
+ * primaryKey: (payload) => payload.id,
1347
+ * payload: Schema.Struct({ id: Schema.String })
1348
+ * })
1349
+ *
1350
+ * export const createUser = Effect.gen(function*() {
1351
+ * const client = yield* EventLog.makeClient(EventLog.schema(Users))
1352
+ * yield* client({ event: "UserCreated", payload: { id: "user-1" } })
1353
+ * })
1354
+ * ```
1054
1355
  *
1055
1356
  * @stability unstable
1056
1357
  * @category constructors
@@ -1059,24 +1360,23 @@ export const layer = <Groups extends EventGroup.Any, E, R>(
1059
1360
  export const makeClient = <Groups extends EventGroup.Any>(
1060
1361
  schema: EventLogSchema<Groups>
1061
1362
  ): Effect.Effect<
1062
- (<Tag extends Event.Tag<EventGroup.Events<Groups>>>(
1063
- event: Tag,
1064
- payload: Event.PayloadWithTag<EventGroup.Events<Groups>, Tag>
1065
- ) => Effect.Effect<
1066
- Event.SuccessWithTag<EventGroup.Events<Groups>, Tag>,
1067
- Event.ErrorWithTag<EventGroup.Events<Groups>, Tag> | EventJournalError
1068
- >),
1363
+ <
1364
+ // Pairs each event tag with its own payload.
1365
+ Item extends {
1366
+ readonly [Tag in Event.Tag<EventGroup.Events<Groups>>]: {
1367
+ readonly event: Tag
1368
+ readonly payload: Event.PayloadWithTag<EventGroup.Events<Groups>, Tag>
1369
+ }
1370
+ }[Event.Tag<EventGroup.Events<Groups>>]
1371
+ >(item: Item) => Effect.Effect<
1372
+ Event.SuccessWithTag<EventGroup.Events<Groups>, Item["event"]>,
1373
+ Event.ErrorWithTag<EventGroup.Events<Groups>, Item["event"]> | EventJournalError
1374
+ >,
1069
1375
  never,
1070
1376
  EventLog
1071
1377
  > =>
1072
1378
  Effect.gen(function*() {
1073
1379
  const log = yield* EventLog
1074
-
1075
- return <Tag extends Event.Tag<EventGroup.Events<Groups>>>(
1076
- event: Tag,
1077
- payload: Event.PayloadWithTag<EventGroup.Events<Groups>, Tag>
1078
- ): Effect.Effect<
1079
- Event.SuccessWithTag<EventGroup.Events<Groups>, Tag>,
1080
- Event.ErrorWithTag<EventGroup.Events<Groups>, Tag> | EventJournalError
1081
- > => log.write({ schema, event, payload })
1082
- })
1380
+ return (item: { readonly event: string; readonly payload: unknown }) =>
1381
+ log.write({ schema, event: item.event, payload: item.payload } as any)
1382
+ }) as any