effect 4.0.5 → 4.0.6

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 (985) 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/Array.d.ts +117 -52
  5. package/dist/Array.d.ts.map +1 -1
  6. package/dist/Array.js +41 -20
  7. package/dist/Array.js.map +1 -1
  8. package/dist/Bytes.d.ts +79 -0
  9. package/dist/Bytes.d.ts.map +1 -0
  10. package/dist/Bytes.js +109 -0
  11. package/dist/Bytes.js.map +1 -0
  12. package/dist/Channel.d.ts +181 -13
  13. package/dist/Channel.d.ts.map +1 -1
  14. package/dist/Channel.js +125 -30
  15. package/dist/Channel.js.map +1 -1
  16. package/dist/ChannelSchema.d.ts.map +1 -1
  17. package/dist/ChannelSchema.js.map +1 -1
  18. package/dist/Chunk.d.ts +39 -21
  19. package/dist/Chunk.d.ts.map +1 -1
  20. package/dist/Chunk.js +26 -17
  21. package/dist/Chunk.js.map +1 -1
  22. package/dist/Config.d.ts.map +1 -1
  23. package/dist/Config.js +8 -3
  24. package/dist/Config.js.map +1 -1
  25. package/dist/ConfigProvider.d.ts.map +1 -1
  26. package/dist/ConfigProvider.js +2 -1
  27. package/dist/ConfigProvider.js.map +1 -1
  28. package/dist/Cron.d.ts +2 -2
  29. package/dist/Cron.d.ts.map +1 -1
  30. package/dist/Cron.js +6 -3
  31. package/dist/Cron.js.map +1 -1
  32. package/dist/Duration.d.ts.map +1 -1
  33. package/dist/Duration.js +56 -16
  34. package/dist/Duration.js.map +1 -1
  35. package/dist/Effect.d.ts +487 -163
  36. package/dist/Effect.d.ts.map +1 -1
  37. package/dist/Effect.js +203 -37
  38. package/dist/Effect.js.map +1 -1
  39. package/dist/Equivalence.d.ts +2 -1
  40. package/dist/Equivalence.d.ts.map +1 -1
  41. package/dist/Equivalence.js +12 -8
  42. package/dist/Equivalence.js.map +1 -1
  43. package/dist/Exit.d.ts +24 -9
  44. package/dist/Exit.d.ts.map +1 -1
  45. package/dist/Exit.js +8 -3
  46. package/dist/Exit.js.map +1 -1
  47. package/dist/FiberHandle.d.ts +2 -0
  48. package/dist/FiberHandle.d.ts.map +1 -1
  49. package/dist/FiberHandle.js +9 -4
  50. package/dist/FiberHandle.js.map +1 -1
  51. package/dist/FiberMap.d.ts +2 -0
  52. package/dist/FiberMap.d.ts.map +1 -1
  53. package/dist/FiberMap.js +5 -2
  54. package/dist/FiberMap.js.map +1 -1
  55. package/dist/FileSystem.d.ts +5 -0
  56. package/dist/FileSystem.d.ts.map +1 -1
  57. package/dist/FileSystem.js +3 -0
  58. package/dist/FileSystem.js.map +1 -1
  59. package/dist/Graph.d.ts.map +1 -1
  60. package/dist/Graph.js.map +1 -1
  61. package/dist/HashSet.d.ts.map +1 -1
  62. package/dist/HashSet.js.map +1 -1
  63. package/dist/Iterable.d.ts.map +1 -1
  64. package/dist/Iterable.js +18 -17
  65. package/dist/Iterable.js.map +1 -1
  66. package/dist/JsonSchema.d.ts +9 -3
  67. package/dist/JsonSchema.d.ts.map +1 -1
  68. package/dist/JsonSchema.js +19 -3
  69. package/dist/JsonSchema.js.map +1 -1
  70. package/dist/Layer.d.ts.map +1 -1
  71. package/dist/Layer.js +2 -2
  72. package/dist/Layer.js.map +1 -1
  73. package/dist/ManagedRuntime.d.ts +19 -1
  74. package/dist/ManagedRuntime.d.ts.map +1 -1
  75. package/dist/ManagedRuntime.js +62 -6
  76. package/dist/ManagedRuntime.js.map +1 -1
  77. package/dist/Metric.d.ts +132 -0
  78. package/dist/Metric.d.ts.map +1 -1
  79. package/dist/Metric.js +197 -25
  80. package/dist/Metric.js.map +1 -1
  81. package/dist/MutableHashMap.d.ts.map +1 -1
  82. package/dist/MutableHashMap.js.map +1 -1
  83. package/dist/Number.js +2 -2
  84. package/dist/Number.js.map +1 -1
  85. package/dist/Optic.d.ts.map +1 -1
  86. package/dist/Optic.js.map +1 -1
  87. package/dist/Path.d.ts.map +1 -1
  88. package/dist/Path.js +8 -1
  89. package/dist/Path.js.map +1 -1
  90. package/dist/PubSub.d.ts.map +1 -1
  91. package/dist/PubSub.js +12 -7
  92. package/dist/PubSub.js.map +1 -1
  93. package/dist/Queue.d.ts +4 -1
  94. package/dist/Queue.d.ts.map +1 -1
  95. package/dist/Queue.js +4 -1
  96. package/dist/Queue.js.map +1 -1
  97. package/dist/Random.d.ts.map +1 -1
  98. package/dist/Random.js +1 -1
  99. package/dist/Random.js.map +1 -1
  100. package/dist/RcMap.d.ts +12 -7
  101. package/dist/RcMap.d.ts.map +1 -1
  102. package/dist/RcMap.js +9 -6
  103. package/dist/RcMap.js.map +1 -1
  104. package/dist/Record.d.ts +51 -0
  105. package/dist/Record.d.ts.map +1 -1
  106. package/dist/Record.js +17 -0
  107. package/dist/Record.js.map +1 -1
  108. package/dist/Ref.d.ts.map +1 -1
  109. package/dist/Ref.js.map +1 -1
  110. package/dist/References.d.ts +5 -4
  111. package/dist/References.d.ts.map +1 -1
  112. package/dist/References.js +5 -4
  113. package/dist/References.js.map +1 -1
  114. package/dist/RequestResolver.d.ts +31 -1
  115. package/dist/RequestResolver.d.ts.map +1 -1
  116. package/dist/RequestResolver.js +39 -4
  117. package/dist/RequestResolver.js.map +1 -1
  118. package/dist/Resource.js +1 -1
  119. package/dist/Resource.js.map +1 -1
  120. package/dist/Runtime.d.ts +3 -3
  121. package/dist/Runtime.d.ts.map +1 -1
  122. package/dist/Runtime.js +18 -15
  123. package/dist/Runtime.js.map +1 -1
  124. package/dist/Schedule.d.ts.map +1 -1
  125. package/dist/Schedule.js.map +1 -1
  126. package/dist/Schema.d.ts +384 -332
  127. package/dist/Schema.d.ts.map +1 -1
  128. package/dist/Schema.js +333 -19
  129. package/dist/Schema.js.map +1 -1
  130. package/dist/SchemaAST.d.ts +5 -5
  131. package/dist/SchemaAST.d.ts.map +1 -1
  132. package/dist/SchemaAST.js +24 -8
  133. package/dist/SchemaAST.js.map +1 -1
  134. package/dist/SchemaGetter.d.ts +8 -3
  135. package/dist/SchemaGetter.d.ts.map +1 -1
  136. package/dist/SchemaGetter.js +15 -5
  137. package/dist/SchemaGetter.js.map +1 -1
  138. package/dist/SchemaIssue.d.ts +4 -4
  139. package/dist/SchemaIssue.d.ts.map +1 -1
  140. package/dist/SchemaIssue.js +29 -51
  141. package/dist/SchemaIssue.js.map +1 -1
  142. package/dist/SchemaRepresentation.d.ts +56 -1
  143. package/dist/SchemaRepresentation.d.ts.map +1 -1
  144. package/dist/SchemaRepresentation.js +18 -0
  145. package/dist/SchemaRepresentation.js.map +1 -1
  146. package/dist/SchemaTransformation.d.ts +1 -1
  147. package/dist/SchemaTransformation.js +1 -1
  148. package/dist/Scope.d.ts +12 -2
  149. package/dist/Scope.d.ts.map +1 -1
  150. package/dist/Scope.js +5 -0
  151. package/dist/Scope.js.map +1 -1
  152. package/dist/ScopedCache.d.ts +10 -7
  153. package/dist/ScopedCache.d.ts.map +1 -1
  154. package/dist/ScopedCache.js +9 -5
  155. package/dist/ScopedCache.js.map +1 -1
  156. package/dist/SemVer.d.ts +1196 -0
  157. package/dist/SemVer.d.ts.map +1 -0
  158. package/dist/SemVer.js +756 -0
  159. package/dist/SemVer.js.map +1 -0
  160. package/dist/SemVerRange.d.ts +559 -0
  161. package/dist/SemVerRange.d.ts.map +1 -0
  162. package/dist/SemVerRange.js +551 -0
  163. package/dist/SemVerRange.js.map +1 -0
  164. package/dist/Sink.d.ts.map +1 -1
  165. package/dist/Sink.js +6 -2
  166. package/dist/Sink.js.map +1 -1
  167. package/dist/Stream.d.ts +235 -8
  168. package/dist/Stream.d.ts.map +1 -1
  169. package/dist/Stream.js +145 -60
  170. package/dist/Stream.js.map +1 -1
  171. package/dist/String.d.ts +4 -2
  172. package/dist/String.d.ts.map +1 -1
  173. package/dist/String.js +8 -6
  174. package/dist/String.js.map +1 -1
  175. package/dist/TextDiff.d.ts +399 -0
  176. package/dist/TextDiff.d.ts.map +1 -0
  177. package/dist/TextDiff.js +634 -0
  178. package/dist/TextDiff.js.map +1 -0
  179. package/dist/TxHashMap.d.ts.map +1 -1
  180. package/dist/TxHashMap.js.map +1 -1
  181. package/dist/TxHashSet.d.ts.map +1 -1
  182. package/dist/TxHashSet.js.map +1 -1
  183. package/dist/ai/AiError.d.ts +68 -4
  184. package/dist/ai/AiError.d.ts.map +1 -1
  185. package/dist/ai/AiError.js +50 -2
  186. package/dist/ai/AiError.js.map +1 -1
  187. package/dist/ai/Chat.d.ts +1 -2
  188. package/dist/ai/Chat.d.ts.map +1 -1
  189. package/dist/ai/Chat.js +6 -3
  190. package/dist/ai/Chat.js.map +1 -1
  191. package/dist/ai/Decision.d.ts +46 -1
  192. package/dist/ai/Decision.d.ts.map +1 -1
  193. package/dist/ai/Decision.js.map +1 -1
  194. package/dist/ai/DecisionModel.d.ts +129 -11
  195. package/dist/ai/DecisionModel.d.ts.map +1 -1
  196. package/dist/ai/DecisionModel.js +182 -94
  197. package/dist/ai/DecisionModel.js.map +1 -1
  198. package/dist/ai/EmbeddingModel.d.ts +10 -0
  199. package/dist/ai/EmbeddingModel.d.ts.map +1 -1
  200. package/dist/ai/EmbeddingModel.js +21 -7
  201. package/dist/ai/EmbeddingModel.js.map +1 -1
  202. package/dist/ai/McpClient.d.ts +289 -0
  203. package/dist/ai/McpClient.d.ts.map +1 -0
  204. package/dist/ai/McpClient.js +819 -0
  205. package/dist/ai/McpClient.js.map +1 -0
  206. package/dist/ai/McpClientError.d.ts +254 -0
  207. package/dist/ai/McpClientError.d.ts.map +1 -0
  208. package/dist/ai/McpClientError.js +260 -0
  209. package/dist/ai/McpClientError.js.map +1 -0
  210. package/dist/ai/McpProtocol.d.ts +2 -2
  211. package/dist/ai/McpProtocol.d.ts.map +1 -1
  212. package/dist/ai/McpSchema.d.ts +368 -235
  213. package/dist/ai/McpSchema.d.ts.map +1 -1
  214. package/dist/ai/McpSchema.js +94 -24
  215. package/dist/ai/McpSchema.js.map +1 -1
  216. package/dist/ai/McpServer.d.ts.map +1 -1
  217. package/dist/ai/McpServer.js +25 -22
  218. package/dist/ai/McpServer.js.map +1 -1
  219. package/dist/ai/Prompt.d.ts +22 -20
  220. package/dist/ai/Prompt.d.ts.map +1 -1
  221. package/dist/ai/Prompt.js +23 -1
  222. package/dist/ai/Prompt.js.map +1 -1
  223. package/dist/ai/Response.d.ts +147 -3
  224. package/dist/ai/Response.d.ts.map +1 -1
  225. package/dist/ai/Response.js +35 -37
  226. package/dist/ai/Response.js.map +1 -1
  227. package/dist/ai/Tool.d.ts +12 -4
  228. package/dist/ai/Tool.d.ts.map +1 -1
  229. package/dist/ai/Tool.js.map +1 -1
  230. package/dist/ai/Toolkit.d.ts +48 -1
  231. package/dist/ai/Toolkit.d.ts.map +1 -1
  232. package/dist/ai/Toolkit.js +65 -12
  233. package/dist/ai/Toolkit.js.map +1 -1
  234. package/dist/ai/index.d.ts +10 -0
  235. package/dist/ai/index.d.ts.map +1 -1
  236. package/dist/ai/index.js +10 -0
  237. package/dist/ai/index.js.map +1 -1
  238. package/dist/ai/internal/mcpCore.js.map +1 -1
  239. package/dist/ai/internal/mcpProtocol/v2024_11_05.js +1 -1
  240. package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
  241. package/dist/ai/internal/mcpProtocol/v2025_03_26.js +1 -1
  242. package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
  243. package/dist/ai/internal/mcpProtocol/v2025_06_18.js +2 -2
  244. package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
  245. package/dist/ai/internal/mcpProtocol/v2025_11_25.js +2 -2
  246. package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
  247. package/dist/ai/internal/mcpProtocol/v2026_07_28.js +4 -7
  248. package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
  249. package/dist/ai/internal/mcpProtocol.js +16 -2
  250. package/dist/ai/internal/mcpProtocol.js.map +1 -1
  251. package/dist/ai/internal/mcpRuntime.js +3 -4
  252. package/dist/ai/internal/mcpRuntime.js.map +1 -1
  253. package/dist/ai/internal/mcpSchema/v2024_11_05.js +19 -13
  254. package/dist/ai/internal/mcpSchema/v2024_11_05.js.map +1 -1
  255. package/dist/ai/internal/mcpSchema/v2025_03_26.js +3 -2
  256. package/dist/ai/internal/mcpSchema/v2025_03_26.js.map +1 -1
  257. package/dist/ai/internal/mcpSchema/v2025_06_18.js +7 -7
  258. package/dist/ai/internal/mcpSchema/v2025_06_18.js.map +1 -1
  259. package/dist/ai/internal/mcpSchema/v2025_11_25.js +8 -8
  260. package/dist/ai/internal/mcpSchema/v2025_11_25.js.map +1 -1
  261. package/dist/ai/internal/mcpSchema/v2026_07_28.js +43 -42
  262. package/dist/ai/internal/mcpSchema/v2026_07_28.js.map +1 -1
  263. package/dist/cli/CliError.d.ts +42 -2
  264. package/dist/cli/CliError.d.ts.map +1 -1
  265. package/dist/cli/CliError.js +44 -5
  266. package/dist/cli/CliError.js.map +1 -1
  267. package/dist/cli/Command.d.ts +286 -2
  268. package/dist/cli/Command.d.ts.map +1 -1
  269. package/dist/cli/Command.js +107 -6
  270. package/dist/cli/Command.js.map +1 -1
  271. package/dist/cli/Completions.d.ts +5 -0
  272. package/dist/cli/Completions.d.ts.map +1 -1
  273. package/dist/cli/Completions.js.map +1 -1
  274. package/dist/cli/Flag.d.ts +115 -0
  275. package/dist/cli/Flag.d.ts.map +1 -1
  276. package/dist/cli/Flag.js +56 -0
  277. package/dist/cli/Flag.js.map +1 -1
  278. package/dist/cli/GlobalFlag.d.ts.map +1 -1
  279. package/dist/cli/GlobalFlag.js +3 -3
  280. package/dist/cli/GlobalFlag.js.map +1 -1
  281. package/dist/cli/Param.d.ts +107 -0
  282. package/dist/cli/Param.d.ts.map +1 -1
  283. package/dist/cli/Param.js +56 -0
  284. package/dist/cli/Param.js.map +1 -1
  285. package/dist/cli/TerminalCapabilities.d.ts +84 -0
  286. package/dist/cli/TerminalCapabilities.d.ts.map +1 -0
  287. package/dist/cli/TerminalCapabilities.js +122 -0
  288. package/dist/cli/TerminalCapabilities.js.map +1 -0
  289. package/dist/cli/index.d.ts +5 -0
  290. package/dist/cli/index.d.ts.map +1 -1
  291. package/dist/cli/index.js +5 -0
  292. package/dist/cli/index.js.map +1 -1
  293. package/dist/cli/internal/command.d.ts +2 -1
  294. package/dist/cli/internal/command.d.ts.map +1 -1
  295. package/dist/cli/internal/command.js +5 -2
  296. package/dist/cli/internal/command.js.map +1 -1
  297. package/dist/cli/internal/completions/bash.js +4 -3
  298. package/dist/cli/internal/completions/bash.js.map +1 -1
  299. package/dist/cli/internal/completions/descriptor.js +9 -1
  300. package/dist/cli/internal/completions/descriptor.js.map +1 -1
  301. package/dist/cli/internal/completions/fish.js +10 -8
  302. package/dist/cli/internal/completions/fish.js.map +1 -1
  303. package/dist/cli/internal/completions/powershell.js +18 -9
  304. package/dist/cli/internal/completions/powershell.js.map +1 -1
  305. package/dist/cli/internal/completions/zsh.js +8 -5
  306. package/dist/cli/internal/completions/zsh.js.map +1 -1
  307. package/dist/cli/internal/formatter.d.ts +2 -0
  308. package/dist/cli/internal/formatter.d.ts.map +1 -0
  309. package/dist/cli/internal/formatter.js +15 -0
  310. package/dist/cli/internal/formatter.js.map +1 -0
  311. package/dist/cli/internal/lexer.js +24 -10
  312. package/dist/cli/internal/lexer.js.map +1 -1
  313. package/dist/cli/internal/parser.js +24 -12
  314. package/dist/cli/internal/parser.js.map +1 -1
  315. package/dist/cluster/ClusterCron.d.ts +29 -1
  316. package/dist/cluster/ClusterCron.d.ts.map +1 -1
  317. package/dist/cluster/ClusterCron.js +64 -32
  318. package/dist/cluster/ClusterCron.js.map +1 -1
  319. package/dist/cluster/ClusterMetrics.d.ts +143 -7
  320. package/dist/cluster/ClusterMetrics.d.ts.map +1 -1
  321. package/dist/cluster/ClusterMetrics.js +151 -7
  322. package/dist/cluster/ClusterMetrics.js.map +1 -1
  323. package/dist/cluster/ClusterWorkflowEngine.d.ts +1 -1
  324. package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  325. package/dist/cluster/ClusterWorkflowEngine.js +37 -11
  326. package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
  327. package/dist/cluster/Entity.d.ts +2 -0
  328. package/dist/cluster/Entity.d.ts.map +1 -1
  329. package/dist/cluster/Entity.js.map +1 -1
  330. package/dist/cluster/MessageStorage.d.ts +21 -0
  331. package/dist/cluster/MessageStorage.d.ts.map +1 -1
  332. package/dist/cluster/MessageStorage.js.map +1 -1
  333. package/dist/cluster/Runners.d.ts.map +1 -1
  334. package/dist/cluster/Runners.js +54 -15
  335. package/dist/cluster/Runners.js.map +1 -1
  336. package/dist/cluster/Sharding.d.ts +1 -0
  337. package/dist/cluster/Sharding.d.ts.map +1 -1
  338. package/dist/cluster/Sharding.js +95 -32
  339. package/dist/cluster/Sharding.js.map +1 -1
  340. package/dist/cluster/ShardingConfig.d.ts +20 -0
  341. package/dist/cluster/ShardingConfig.d.ts.map +1 -1
  342. package/dist/cluster/ShardingConfig.js +4 -0
  343. package/dist/cluster/ShardingConfig.js.map +1 -1
  344. package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
  345. package/dist/cluster/SqlMessageStorage.js +40 -50
  346. package/dist/cluster/SqlMessageStorage.js.map +1 -1
  347. package/dist/cluster/SqlRunnerStorage.d.ts +2 -2
  348. package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
  349. package/dist/cluster/SqlRunnerStorage.js +10 -4
  350. package/dist/cluster/SqlRunnerStorage.js.map +1 -1
  351. package/dist/cluster/internal/entityManager.js +65 -8
  352. package/dist/cluster/internal/entityManager.js.map +1 -1
  353. package/dist/devtools/DevTools.d.ts +3 -2
  354. package/dist/devtools/DevTools.d.ts.map +1 -1
  355. package/dist/devtools/DevTools.js +3 -2
  356. package/dist/devtools/DevTools.js.map +1 -1
  357. package/dist/devtools/DevToolsClient.d.ts +11 -0
  358. package/dist/devtools/DevToolsClient.d.ts.map +1 -1
  359. package/dist/devtools/DevToolsClient.js +31 -4
  360. package/dist/devtools/DevToolsClient.js.map +1 -1
  361. package/dist/encoding/Base64Url.d.ts +29 -0
  362. package/dist/encoding/Base64Url.d.ts.map +1 -1
  363. package/dist/encoding/Base64Url.js +29 -0
  364. package/dist/encoding/Base64Url.js.map +1 -1
  365. package/dist/encoding/Ini.d.ts.map +1 -1
  366. package/dist/encoding/Ini.js +3 -0
  367. package/dist/encoding/Ini.js.map +1 -1
  368. package/dist/encoding/JsonArray.d.ts +270 -0
  369. package/dist/encoding/JsonArray.d.ts.map +1 -0
  370. package/dist/encoding/JsonArray.js +691 -0
  371. package/dist/encoding/JsonArray.js.map +1 -0
  372. package/dist/encoding/Ndjson.d.ts +43 -4
  373. package/dist/encoding/Ndjson.d.ts.map +1 -1
  374. package/dist/encoding/Ndjson.js +169 -18
  375. package/dist/encoding/Ndjson.js.map +1 -1
  376. package/dist/encoding/SchemaBinary.d.ts +9 -1
  377. package/dist/encoding/SchemaBinary.d.ts.map +1 -1
  378. package/dist/encoding/SchemaBinary.js +12 -19
  379. package/dist/encoding/SchemaBinary.js.map +1 -1
  380. package/dist/encoding/Tar.d.ts +309 -0
  381. package/dist/encoding/Tar.d.ts.map +1 -0
  382. package/dist/encoding/Tar.js +1182 -0
  383. package/dist/encoding/Tar.js.map +1 -0
  384. package/dist/encoding/Toml.js +3 -3
  385. package/dist/encoding/Toml.js.map +1 -1
  386. package/dist/encoding/Xml.d.ts +464 -0
  387. package/dist/encoding/Xml.d.ts.map +1 -0
  388. package/dist/encoding/Xml.js +1619 -0
  389. package/dist/encoding/Xml.js.map +1 -0
  390. package/dist/encoding/Yaml.d.ts +6 -2
  391. package/dist/encoding/Yaml.d.ts.map +1 -1
  392. package/dist/encoding/Yaml.js +97 -34
  393. package/dist/encoding/Yaml.js.map +1 -1
  394. package/dist/encoding/Zip.d.ts +413 -0
  395. package/dist/encoding/Zip.d.ts.map +1 -0
  396. package/dist/encoding/Zip.js +1255 -0
  397. package/dist/encoding/Zip.js.map +1 -0
  398. package/dist/encoding/index.d.ts +20 -0
  399. package/dist/encoding/index.d.ts.map +1 -1
  400. package/dist/encoding/index.js +20 -0
  401. package/dist/encoding/index.js.map +1 -1
  402. package/dist/eventlog/EventJournal.d.ts +90 -5
  403. package/dist/eventlog/EventJournal.d.ts.map +1 -1
  404. package/dist/eventlog/EventJournal.js +488 -228
  405. package/dist/eventlog/EventJournal.js.map +1 -1
  406. package/dist/eventlog/EventLog.d.ts +180 -12
  407. package/dist/eventlog/EventLog.d.ts.map +1 -1
  408. package/dist/eventlog/EventLog.js +394 -146
  409. package/dist/eventlog/EventLog.js.map +1 -1
  410. package/dist/eventlog/EventLogEncryption.d.ts +36 -30
  411. package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
  412. package/dist/eventlog/EventLogEncryption.js +97 -38
  413. package/dist/eventlog/EventLogEncryption.js.map +1 -1
  414. package/dist/eventlog/EventLogMessage.d.ts +74 -34
  415. package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
  416. package/dist/eventlog/EventLogMessage.js +45 -11
  417. package/dist/eventlog/EventLogMessage.js.map +1 -1
  418. package/dist/eventlog/EventLogRemote.d.ts +45 -8
  419. package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
  420. package/dist/eventlog/EventLogRemote.js +51 -14
  421. package/dist/eventlog/EventLogRemote.js.map +1 -1
  422. package/dist/eventlog/EventLogServer.d.ts +46 -3
  423. package/dist/eventlog/EventLogServer.d.ts.map +1 -1
  424. package/dist/eventlog/EventLogServer.js +119 -19
  425. package/dist/eventlog/EventLogServer.js.map +1 -1
  426. package/dist/eventlog/EventLogServerEncrypted.d.ts +23 -33
  427. package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
  428. package/dist/eventlog/EventLogServerEncrypted.js +97 -70
  429. package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
  430. package/dist/eventlog/EventLogServerUnencrypted.d.ts +39 -5
  431. package/dist/eventlog/EventLogServerUnencrypted.d.ts.map +1 -1
  432. package/dist/eventlog/EventLogServerUnencrypted.js +151 -69
  433. package/dist/eventlog/EventLogServerUnencrypted.js.map +1 -1
  434. package/dist/eventlog/EventRow.d.ts +288 -0
  435. package/dist/eventlog/EventRow.d.ts.map +1 -0
  436. package/dist/eventlog/EventRow.js +435 -0
  437. package/dist/eventlog/EventRow.js.map +1 -0
  438. package/dist/eventlog/SqlEventJournal.d.ts +18 -18
  439. package/dist/eventlog/SqlEventJournal.d.ts.map +1 -1
  440. package/dist/eventlog/SqlEventJournal.js +387 -159
  441. package/dist/eventlog/SqlEventJournal.js.map +1 -1
  442. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +10 -18
  443. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
  444. package/dist/eventlog/SqlEventLogServerEncrypted.js +179 -69
  445. package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
  446. package/dist/eventlog/SqlEventLogServerUnencrypted.d.ts +23 -3
  447. package/dist/eventlog/SqlEventLogServerUnencrypted.d.ts.map +1 -1
  448. package/dist/eventlog/SqlEventLogServerUnencrypted.js +102 -51
  449. package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
  450. package/dist/eventlog/index.d.ts +5 -0
  451. package/dist/eventlog/index.d.ts.map +1 -1
  452. package/dist/eventlog/index.js +5 -0
  453. package/dist/eventlog/index.js.map +1 -1
  454. package/dist/eventlog/internal/conflicts.d.ts +47 -0
  455. package/dist/eventlog/internal/conflicts.d.ts.map +1 -0
  456. package/dist/eventlog/internal/conflicts.js +92 -0
  457. package/dist/eventlog/internal/conflicts.js.map +1 -0
  458. package/dist/graphql/GraphQLClientError.d.ts +2 -2
  459. package/dist/graphql/GraphQLClientError.d.ts.map +1 -1
  460. package/dist/graphql/GraphQLClientError.js +4 -18
  461. package/dist/graphql/GraphQLClientError.js.map +1 -1
  462. package/dist/graphql/GraphQLProtocol.d.ts +12 -9
  463. package/dist/graphql/GraphQLProtocol.d.ts.map +1 -1
  464. package/dist/graphql/GraphQLProtocol.js +4 -3
  465. package/dist/graphql/GraphQLProtocol.js.map +1 -1
  466. package/dist/graphql/GraphQLResolver.d.ts +2 -0
  467. package/dist/graphql/GraphQLResolver.d.ts.map +1 -1
  468. package/dist/graphql/GraphQLResolver.js +74 -32
  469. package/dist/graphql/GraphQLResolver.js.map +1 -1
  470. package/dist/http/FetchHttpClient.d.ts +8 -1
  471. package/dist/http/FetchHttpClient.d.ts.map +1 -1
  472. package/dist/http/FetchHttpClient.js +51 -4
  473. package/dist/http/FetchHttpClient.js.map +1 -1
  474. package/dist/http/FindMyWay/internal/router.js +10 -0
  475. package/dist/http/FindMyWay/internal/router.js.map +1 -1
  476. package/dist/http/Headers.d.ts +227 -0
  477. package/dist/http/Headers.d.ts.map +1 -1
  478. package/dist/http/Headers.js +261 -0
  479. package/dist/http/Headers.js.map +1 -1
  480. package/dist/http/HttpClient.d.ts +93 -0
  481. package/dist/http/HttpClient.d.ts.map +1 -1
  482. package/dist/http/HttpClient.js +55 -16
  483. package/dist/http/HttpClient.js.map +1 -1
  484. package/dist/http/HttpClientRequest.d.ts +127 -3
  485. package/dist/http/HttpClientRequest.d.ts.map +1 -1
  486. package/dist/http/HttpClientRequest.js +44 -2
  487. package/dist/http/HttpClientRequest.js.map +1 -1
  488. package/dist/http/HttpClientResponse.d.ts +53 -0
  489. package/dist/http/HttpClientResponse.d.ts.map +1 -1
  490. package/dist/http/HttpClientResponse.js +47 -0
  491. package/dist/http/HttpClientResponse.js.map +1 -1
  492. package/dist/http/HttpEffect.d.ts +6 -2
  493. package/dist/http/HttpEffect.d.ts.map +1 -1
  494. package/dist/http/HttpEffect.js +21 -17
  495. package/dist/http/HttpEffect.js.map +1 -1
  496. package/dist/http/HttpIncomingMessage.d.ts +2 -1
  497. package/dist/http/HttpIncomingMessage.d.ts.map +1 -1
  498. package/dist/http/HttpIncomingMessage.js +3 -23
  499. package/dist/http/HttpIncomingMessage.js.map +1 -1
  500. package/dist/http/HttpMiddleware.d.ts +119 -2
  501. package/dist/http/HttpMiddleware.d.ts.map +1 -1
  502. package/dist/http/HttpMiddleware.js +159 -13
  503. package/dist/http/HttpMiddleware.js.map +1 -1
  504. package/dist/http/HttpRouter.d.ts.map +1 -1
  505. package/dist/http/HttpRouter.js +7 -2
  506. package/dist/http/HttpRouter.js.map +1 -1
  507. package/dist/http/HttpServerError.d.ts +5 -2
  508. package/dist/http/HttpServerError.d.ts.map +1 -1
  509. package/dist/http/HttpServerError.js +5 -3
  510. package/dist/http/HttpServerError.js.map +1 -1
  511. package/dist/http/HttpServerRequest.d.ts +25 -5
  512. package/dist/http/HttpServerRequest.d.ts.map +1 -1
  513. package/dist/http/HttpServerRequest.js +36 -10
  514. package/dist/http/HttpServerRequest.js.map +1 -1
  515. package/dist/http/HttpServerResponse.d.ts +17 -8
  516. package/dist/http/HttpServerResponse.d.ts.map +1 -1
  517. package/dist/http/HttpServerResponse.js +37 -21
  518. package/dist/http/HttpServerResponse.js.map +1 -1
  519. package/dist/http/HttpStaticServer.d.ts +0 -12
  520. package/dist/http/HttpStaticServer.d.ts.map +1 -1
  521. package/dist/http/HttpStaticServer.js +21 -7
  522. package/dist/http/HttpStaticServer.js.map +1 -1
  523. package/dist/http/MultipartParser/internal/contentType.d.ts +15 -1
  524. package/dist/http/MultipartParser/internal/contentType.d.ts.map +1 -1
  525. package/dist/http/MultipartParser/internal/contentType.js +87 -5
  526. package/dist/http/MultipartParser/internal/contentType.js.map +1 -1
  527. package/dist/http/MultipartParser/internal/headers.d.ts.map +1 -1
  528. package/dist/http/MultipartParser/internal/headers.js +4 -12
  529. package/dist/http/MultipartParser/internal/headers.js.map +1 -1
  530. package/dist/http/MultipartParser/internal/multipart.d.ts.map +1 -1
  531. package/dist/http/MultipartParser/internal/multipart.js +6 -27
  532. package/dist/http/MultipartParser/internal/multipart.js.map +1 -1
  533. package/dist/http/Url.d.ts.map +1 -1
  534. package/dist/http/Url.js +6 -1
  535. package/dist/http/Url.js.map +1 -1
  536. package/dist/http/internal/decompression.js +17 -11
  537. package/dist/http/internal/decompression.js.map +1 -1
  538. package/dist/http/internal/lazyStream.d.ts +2 -0
  539. package/dist/http/internal/lazyStream.d.ts.map +1 -0
  540. package/dist/http/internal/lazyStream.js +18 -0
  541. package/dist/http/internal/lazyStream.js.map +1 -0
  542. package/dist/http/internal/requestState.d.ts +2 -0
  543. package/dist/http/internal/requestState.d.ts.map +1 -0
  544. package/dist/http/internal/requestState.js +28 -0
  545. package/dist/http/internal/requestState.js.map +1 -0
  546. package/dist/http/internal/webResponse.d.ts +2 -0
  547. package/dist/http/internal/webResponse.d.ts.map +1 -0
  548. package/dist/http/internal/webResponse.js +12 -0
  549. package/dist/http/internal/webResponse.js.map +1 -0
  550. package/dist/http-api/HttpApi.js +1 -1
  551. package/dist/http-api/HttpApi.js.map +1 -1
  552. package/dist/http-api/HttpApiBuilder.d.ts.map +1 -1
  553. package/dist/http-api/HttpApiBuilder.js +121 -18
  554. package/dist/http-api/HttpApiBuilder.js.map +1 -1
  555. package/dist/http-api/HttpApiClient.d.ts +29 -4
  556. package/dist/http-api/HttpApiClient.d.ts.map +1 -1
  557. package/dist/http-api/HttpApiClient.js +83 -23
  558. package/dist/http-api/HttpApiClient.js.map +1 -1
  559. package/dist/http-api/HttpApiEndpoint.d.ts +55 -29
  560. package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
  561. package/dist/http-api/HttpApiEndpoint.js +49 -5
  562. package/dist/http-api/HttpApiEndpoint.js.map +1 -1
  563. package/dist/http-api/HttpApiError.d.ts +58 -0
  564. package/dist/http-api/HttpApiError.d.ts.map +1 -1
  565. package/dist/http-api/HttpApiError.js +38 -12
  566. package/dist/http-api/HttpApiError.js.map +1 -1
  567. package/dist/http-api/HttpApiScalar.d.ts +2 -1
  568. package/dist/http-api/HttpApiScalar.d.ts.map +1 -1
  569. package/dist/http-api/HttpApiScalar.js +6 -3
  570. package/dist/http-api/HttpApiScalar.js.map +1 -1
  571. package/dist/http-api/HttpApiSchema.d.ts +191 -9
  572. package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
  573. package/dist/http-api/HttpApiSchema.js +137 -4
  574. package/dist/http-api/HttpApiSchema.js.map +1 -1
  575. package/dist/http-api/HttpApiSwagger.d.ts +5 -0
  576. package/dist/http-api/HttpApiSwagger.d.ts.map +1 -1
  577. package/dist/http-api/HttpApiSwagger.js +14 -4
  578. package/dist/http-api/HttpApiSwagger.js.map +1 -1
  579. package/dist/http-api/HttpApiTest.d.ts +13 -2
  580. package/dist/http-api/HttpApiTest.d.ts.map +1 -1
  581. package/dist/http-api/HttpApiTest.js +30 -9
  582. package/dist/http-api/HttpApiTest.js.map +1 -1
  583. package/dist/http-api/OpenApi.d.ts +17 -3
  584. package/dist/http-api/OpenApi.d.ts.map +1 -1
  585. package/dist/http-api/OpenApi.js +57 -32
  586. package/dist/http-api/OpenApi.js.map +1 -1
  587. package/dist/http-api/internal/path.js +35 -10
  588. package/dist/http-api/internal/path.js.map +1 -1
  589. package/dist/index.d.ts +20 -0
  590. package/dist/index.d.ts.map +1 -1
  591. package/dist/index.js +20 -0
  592. package/dist/index.js.map +1 -1
  593. package/dist/internal/core.js +1 -1
  594. package/dist/internal/core.js.map +1 -1
  595. package/dist/internal/dateTime.js +19 -7
  596. package/dist/internal/dateTime.js.map +1 -1
  597. package/dist/internal/effect.js +85 -74
  598. package/dist/internal/effect.js.map +1 -1
  599. package/dist/internal/hashMap.js +2 -2
  600. package/dist/internal/hashMap.js.map +1 -1
  601. package/dist/internal/hydration.d.ts +2 -0
  602. package/dist/internal/hydration.d.ts.map +1 -0
  603. package/dist/internal/hydration.js +15 -0
  604. package/dist/internal/hydration.js.map +1 -0
  605. package/dist/internal/inflate.d.ts +2 -0
  606. package/dist/internal/inflate.d.ts.map +1 -0
  607. package/dist/internal/inflate.js +680 -0
  608. package/dist/internal/inflate.js.map +1 -0
  609. package/dist/internal/record.js +6 -0
  610. package/dist/internal/record.js.map +1 -1
  611. package/dist/internal/request.js +20 -7
  612. package/dist/internal/request.js.map +1 -1
  613. package/dist/internal/schedule.js +17 -22
  614. package/dist/internal/schedule.js.map +1 -1
  615. package/dist/internal/schema/fromJsonSchemaDocument.js +136 -126
  616. package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
  617. package/dist/internal/schema/interpreter.js +51 -36
  618. package/dist/internal/schema/interpreter.js.map +1 -1
  619. package/dist/internal/schema/standardSchema.js +34 -33
  620. package/dist/internal/schema/standardSchema.js.map +1 -1
  621. package/dist/internal/schema/toCodeDocument.js +7 -2
  622. package/dist/internal/schema/toCodeDocument.js.map +1 -1
  623. package/dist/internal/schema/toCodec.js +86 -1
  624. package/dist/internal/schema/toCodec.js.map +1 -1
  625. package/dist/internal/schema/toFormatter.js +5 -5
  626. package/dist/internal/schema/toFormatter.js.map +1 -1
  627. package/dist/internal/schema/toJsonSchemaDocument.js +60 -38
  628. package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
  629. package/dist/internal/trie.js +1 -3
  630. package/dist/internal/trie.js.map +1 -1
  631. package/dist/internal/uuid.js +7 -3
  632. package/dist/internal/uuid.js.map +1 -1
  633. package/dist/internal/version.js +1 -1
  634. package/dist/net/NetAddress.d.ts.map +1 -1
  635. package/dist/net/NetAddress.js +2 -8
  636. package/dist/net/NetAddress.js.map +1 -1
  637. package/dist/observability/OtlpExporter.d.ts.map +1 -1
  638. package/dist/observability/OtlpExporter.js +5 -12
  639. package/dist/observability/OtlpExporter.js.map +1 -1
  640. package/dist/observability/OtlpMetrics.d.ts.map +1 -1
  641. package/dist/observability/OtlpMetrics.js +5 -3
  642. package/dist/observability/OtlpMetrics.js.map +1 -1
  643. package/dist/observability/OtlpResource.d.ts +3 -1
  644. package/dist/observability/OtlpResource.d.ts.map +1 -1
  645. package/dist/observability/OtlpResource.js +11 -4
  646. package/dist/observability/OtlpResource.js.map +1 -1
  647. package/dist/observability/OtlpSerialization.d.ts +5 -0
  648. package/dist/observability/OtlpSerialization.d.ts.map +1 -1
  649. package/dist/observability/OtlpSerialization.js +14 -3
  650. package/dist/observability/OtlpSerialization.js.map +1 -1
  651. package/dist/observability/internal/protobuf.d.ts +0 -9
  652. package/dist/observability/internal/protobuf.d.ts.map +1 -1
  653. package/dist/observability/internal/protobuf.js +2 -10
  654. package/dist/observability/internal/protobuf.js.map +1 -1
  655. package/dist/persistence/PersistedCache.d.ts.map +1 -1
  656. package/dist/persistence/PersistedCache.js +1 -1
  657. package/dist/persistence/PersistedCache.js.map +1 -1
  658. package/dist/persistence/PersistedQueue.d.ts +6 -2
  659. package/dist/persistence/PersistedQueue.d.ts.map +1 -1
  660. package/dist/persistence/PersistedQueue.js +162 -84
  661. package/dist/persistence/PersistedQueue.js.map +1 -1
  662. package/dist/persistence/Persistence.d.ts +28 -0
  663. package/dist/persistence/Persistence.d.ts.map +1 -1
  664. package/dist/persistence/Persistence.js +36 -8
  665. package/dist/persistence/Persistence.js.map +1 -1
  666. package/dist/persistence/RateLimiter.d.ts.map +1 -1
  667. package/dist/persistence/RateLimiter.js +8 -12
  668. package/dist/persistence/RateLimiter.js.map +1 -1
  669. package/dist/persistence/UserDirectories.d.ts +129 -0
  670. package/dist/persistence/UserDirectories.d.ts.map +1 -0
  671. package/dist/persistence/UserDirectories.js +178 -0
  672. package/dist/persistence/UserDirectories.js.map +1 -0
  673. package/dist/persistence/index.d.ts +5 -0
  674. package/dist/persistence/index.d.ts.map +1 -1
  675. package/dist/persistence/index.js +5 -0
  676. package/dist/persistence/index.js.map +1 -1
  677. package/dist/process/ChildProcess.d.ts +2 -1
  678. package/dist/process/ChildProcess.d.ts.map +1 -1
  679. package/dist/process/ChildProcess.js.map +1 -1
  680. package/dist/reactivity/AsyncResult.d.ts.map +1 -1
  681. package/dist/reactivity/AsyncResult.js +1 -1
  682. package/dist/reactivity/AsyncResult.js.map +1 -1
  683. package/dist/reactivity/Atom.d.ts +69 -30
  684. package/dist/reactivity/Atom.d.ts.map +1 -1
  685. package/dist/reactivity/Atom.js +40 -15
  686. package/dist/reactivity/Atom.js.map +1 -1
  687. package/dist/reactivity/AtomHttpApi.d.ts +5 -5
  688. package/dist/reactivity/AtomHttpApi.d.ts.map +1 -1
  689. package/dist/reactivity/AtomHttpApi.js +1 -1
  690. package/dist/reactivity/AtomHttpApi.js.map +1 -1
  691. package/dist/reactivity/AtomRegistry.d.ts +2 -2
  692. package/dist/reactivity/AtomRegistry.d.ts.map +1 -1
  693. package/dist/reactivity/AtomRegistry.js +44 -9
  694. package/dist/reactivity/AtomRegistry.js.map +1 -1
  695. package/dist/reactivity/AtomRpc.d.ts +3 -3
  696. package/dist/reactivity/AtomRpc.d.ts.map +1 -1
  697. package/dist/reactivity/AtomRpc.js +1 -1
  698. package/dist/reactivity/AtomRpc.js.map +1 -1
  699. package/dist/reactivity/Hydration.d.ts.map +1 -1
  700. package/dist/reactivity/Hydration.js +46 -12
  701. package/dist/reactivity/Hydration.js.map +1 -1
  702. package/dist/reactivity/Reactivity.d.ts +71 -7
  703. package/dist/reactivity/Reactivity.d.ts.map +1 -1
  704. package/dist/reactivity/Reactivity.js +21 -12
  705. package/dist/reactivity/Reactivity.js.map +1 -1
  706. package/dist/rpc/Rpc.d.ts +18 -0
  707. package/dist/rpc/Rpc.d.ts.map +1 -1
  708. package/dist/rpc/Rpc.js +20 -0
  709. package/dist/rpc/Rpc.js.map +1 -1
  710. package/dist/rpc/RpcClient.d.ts +26 -2
  711. package/dist/rpc/RpcClient.d.ts.map +1 -1
  712. package/dist/rpc/RpcClient.js +196 -60
  713. package/dist/rpc/RpcClient.js.map +1 -1
  714. package/dist/rpc/RpcSerialization.d.ts +15 -0
  715. package/dist/rpc/RpcSerialization.d.ts.map +1 -1
  716. package/dist/rpc/RpcSerialization.js +21 -5
  717. package/dist/rpc/RpcSerialization.js.map +1 -1
  718. package/dist/rpc/RpcServer.d.ts.map +1 -1
  719. package/dist/rpc/RpcServer.js +9 -18
  720. package/dist/rpc/RpcServer.js.map +1 -1
  721. package/dist/schema/Model.d.ts +1 -1
  722. package/dist/schema/VariantSchema.d.ts +22 -3
  723. package/dist/schema/VariantSchema.d.ts.map +1 -1
  724. package/dist/schema/VariantSchema.js +32 -18
  725. package/dist/schema/VariantSchema.js.map +1 -1
  726. package/dist/socket/Socket.d.ts +23 -1
  727. package/dist/socket/Socket.d.ts.map +1 -1
  728. package/dist/socket/Socket.js +36 -3
  729. package/dist/socket/Socket.js.map +1 -1
  730. package/dist/sql/Migrator.d.ts.map +1 -1
  731. package/dist/sql/Migrator.js +15 -3
  732. package/dist/sql/Migrator.js.map +1 -1
  733. package/dist/sql/SqlClient.d.ts +143 -5
  734. package/dist/sql/SqlClient.d.ts.map +1 -1
  735. package/dist/sql/SqlClient.js +148 -27
  736. package/dist/sql/SqlClient.js.map +1 -1
  737. package/dist/sql/SqlResolver.d.ts +9 -0
  738. package/dist/sql/SqlResolver.d.ts.map +1 -1
  739. package/dist/sql/SqlResolver.js +9 -0
  740. package/dist/sql/SqlResolver.js.map +1 -1
  741. package/dist/sql/Statement.d.ts +3 -1
  742. package/dist/sql/Statement.d.ts.map +1 -1
  743. package/dist/sql/Statement.js +24 -5
  744. package/dist/sql/Statement.js.map +1 -1
  745. package/dist/testing/TestClock.d.ts.map +1 -1
  746. package/dist/testing/TestClock.js +4 -2
  747. package/dist/testing/TestClock.js.map +1 -1
  748. package/dist/testing/TestSchema.d.ts +7 -1
  749. package/dist/testing/TestSchema.d.ts.map +1 -1
  750. package/dist/testing/TestSchema.js +9 -3
  751. package/dist/testing/TestSchema.js.map +1 -1
  752. package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
  753. package/dist/workflow/WorkflowEngine.js +18 -4
  754. package/dist/workflow/WorkflowEngine.js.map +1 -1
  755. package/package.json +13 -3
  756. package/src/Array.ts +128 -55
  757. package/src/Bytes.ts +111 -0
  758. package/src/Channel.ts +263 -436
  759. package/src/ChannelSchema.ts +1 -49
  760. package/src/Chunk.ts +55 -61
  761. package/src/Config.ts +12 -86
  762. package/src/ConfigProvider.ts +2 -1
  763. package/src/Cron.ts +6 -3
  764. package/src/Duration.ts +66 -16
  765. package/src/Effect.ts +502 -167
  766. package/src/Equivalence.ts +7 -4
  767. package/src/Exit.ts +24 -9
  768. package/src/FiberHandle.ts +10 -9
  769. package/src/FiberMap.ts +13 -66
  770. package/src/FileSystem.ts +10 -0
  771. package/src/Graph.ts +171 -1263
  772. package/src/HashSet.ts +0 -60
  773. package/src/Iterable.ts +15 -14
  774. package/src/JsonSchema.ts +28 -3
  775. package/src/Layer.ts +2 -2
  776. package/src/ManagedRuntime.ts +72 -6
  777. package/src/Metric.ts +249 -507
  778. package/src/MutableHashMap.ts +4 -473
  779. package/src/Number.ts +2 -2
  780. package/src/Optic.ts +17 -332
  781. package/src/Path.ts +9 -1
  782. package/src/PubSub.ts +12 -7
  783. package/src/Queue.ts +5 -37
  784. package/src/Random.ts +1 -1
  785. package/src/RcMap.ts +14 -8
  786. package/src/Record.ts +51 -0
  787. package/src/Ref.ts +7 -104
  788. package/src/References.ts +5 -4
  789. package/src/RequestResolver.ts +46 -87
  790. package/src/Resource.ts +1 -1
  791. package/src/Runtime.ts +19 -18
  792. package/src/Schedule.ts +2 -94
  793. package/src/Schema.ts +591 -356
  794. package/src/SchemaAST.ts +20 -9
  795. package/src/SchemaGetter.ts +22 -5
  796. package/src/SchemaIssue.ts +44 -53
  797. package/src/SchemaRepresentation.ts +64 -1
  798. package/src/SchemaTransformation.ts +1 -1
  799. package/src/Scope.ts +12 -2
  800. package/src/ScopedCache.ts +17 -142
  801. package/src/SemVer.ts +1528 -0
  802. package/src/SemVerRange.ts +883 -0
  803. package/src/Sink.ts +6 -2
  804. package/src/Stream.ts +334 -1011
  805. package/src/String.ts +8 -8
  806. package/src/TextDiff.ts +766 -0
  807. package/src/TxHashMap.ts +1 -103
  808. package/src/TxHashSet.ts +48 -753
  809. package/src/ai/AiError.ts +66 -4
  810. package/src/ai/Chat.ts +10 -5
  811. package/src/ai/Decision.ts +49 -1
  812. package/src/ai/DecisionModel.ts +264 -108
  813. package/src/ai/EmbeddingModel.ts +25 -13
  814. package/src/ai/McpClient.ts +1211 -0
  815. package/src/ai/McpClientError.ts +329 -0
  816. package/src/ai/McpProtocol.ts +2 -2
  817. package/src/ai/McpSchema.ts +153 -35
  818. package/src/ai/McpServer.ts +217 -220
  819. package/src/ai/Prompt.ts +49 -35
  820. package/src/ai/Response.ts +195 -65
  821. package/src/ai/Tool.ts +12 -4
  822. package/src/ai/Toolkit.ts +78 -10
  823. package/src/ai/index.ts +12 -0
  824. package/src/ai/internal/mcpCore.ts +13 -14
  825. package/src/ai/internal/mcpProtocol/v2024_11_05.ts +1 -1
  826. package/src/ai/internal/mcpProtocol/v2025_03_26.ts +1 -1
  827. package/src/ai/internal/mcpProtocol/v2025_06_18.ts +3 -3
  828. package/src/ai/internal/mcpProtocol/v2025_11_25.ts +3 -3
  829. package/src/ai/internal/mcpProtocol/v2026_07_28.ts +12 -14
  830. package/src/ai/internal/mcpProtocol.ts +22 -2
  831. package/src/ai/internal/mcpRuntime.ts +3 -4
  832. package/src/ai/internal/mcpSchema/v2024_11_05.ts +20 -13
  833. package/src/ai/internal/mcpSchema/v2025_03_26.ts +4 -2
  834. package/src/ai/internal/mcpSchema/v2025_06_18.ts +7 -7
  835. package/src/ai/internal/mcpSchema/v2025_11_25.ts +8 -8
  836. package/src/ai/internal/mcpSchema/v2026_07_28.ts +44 -42
  837. package/src/cli/CliError.ts +49 -4
  838. package/src/cli/Command.ts +316 -9
  839. package/src/cli/Completions.ts +5 -0
  840. package/src/cli/Flag.ts +117 -0
  841. package/src/cli/GlobalFlag.ts +3 -3
  842. package/src/cli/Param.ts +122 -0
  843. package/src/cli/TerminalCapabilities.ts +156 -0
  844. package/src/cli/index.ts +6 -0
  845. package/src/cli/internal/command.ts +8 -3
  846. package/src/cli/internal/completions/bash.ts +4 -3
  847. package/src/cli/internal/completions/descriptor.ts +11 -1
  848. package/src/cli/internal/completions/fish.ts +10 -8
  849. package/src/cli/internal/completions/powershell.ts +23 -14
  850. package/src/cli/internal/completions/zsh.ts +8 -5
  851. package/src/cli/internal/formatter.ts +18 -0
  852. package/src/cli/internal/lexer.ts +12 -5
  853. package/src/cli/internal/parser.ts +31 -11
  854. package/src/cluster/ClusterCron.ts +94 -35
  855. package/src/cluster/ClusterMetrics.ts +149 -7
  856. package/src/cluster/ClusterWorkflowEngine.ts +84 -41
  857. package/src/cluster/Entity.ts +4 -0
  858. package/src/cluster/MessageStorage.ts +7 -0
  859. package/src/cluster/Runners.ts +76 -25
  860. package/src/cluster/Sharding.ts +118 -38
  861. package/src/cluster/ShardingConfig.ts +15 -0
  862. package/src/cluster/SqlMessageStorage.ts +58 -55
  863. package/src/cluster/SqlRunnerStorage.ts +10 -4
  864. package/src/cluster/internal/entityManager.ts +80 -10
  865. package/src/devtools/DevTools.ts +3 -2
  866. package/src/devtools/DevToolsClient.ts +27 -10
  867. package/src/encoding/Base64Url.ts +31 -0
  868. package/src/encoding/Ini.ts +3 -0
  869. package/src/encoding/JsonArray.ts +849 -0
  870. package/src/encoding/Ndjson.ts +211 -20
  871. package/src/encoding/SchemaBinary.ts +14 -48
  872. package/src/encoding/Tar.ts +1417 -0
  873. package/src/encoding/Toml.ts +3 -3
  874. package/src/encoding/Xml.ts +2037 -0
  875. package/src/encoding/Yaml.ts +108 -36
  876. package/src/encoding/Zip.ts +1558 -0
  877. package/src/encoding/index.ts +24 -0
  878. package/src/eventlog/EventJournal.ts +611 -227
  879. package/src/eventlog/EventLog.ts +496 -196
  880. package/src/eventlog/EventLogEncryption.ts +128 -43
  881. package/src/eventlog/EventLogMessage.ts +62 -11
  882. package/src/eventlog/EventLogRemote.ts +77 -21
  883. package/src/eventlog/EventLogServer.ts +162 -20
  884. package/src/eventlog/EventLogServerEncrypted.ts +121 -80
  885. package/src/eventlog/EventLogServerUnencrypted.ts +180 -77
  886. package/src/eventlog/EventRow.ts +706 -0
  887. package/src/eventlog/SqlEventJournal.ts +453 -173
  888. package/src/eventlog/SqlEventLogServerEncrypted.ts +212 -83
  889. package/src/eventlog/SqlEventLogServerUnencrypted.ts +141 -62
  890. package/src/eventlog/index.ts +6 -0
  891. package/src/eventlog/internal/conflicts.ts +123 -0
  892. package/src/graphql/GraphQLClientError.ts +5 -12
  893. package/src/graphql/GraphQLProtocol.ts +12 -9
  894. package/src/graphql/GraphQLResolver.ts +90 -239
  895. package/src/http/FetchHttpClient.ts +56 -6
  896. package/src/http/FindMyWay/internal/router.ts +11 -0
  897. package/src/http/Headers.ts +337 -154
  898. package/src/http/HttpClient.ts +126 -135
  899. package/src/http/HttpClientRequest.ts +142 -4
  900. package/src/http/HttpClientResponse.ts +71 -0
  901. package/src/http/HttpEffect.ts +25 -33
  902. package/src/http/HttpIncomingMessage.ts +3 -23
  903. package/src/http/HttpMiddleware.ts +180 -23
  904. package/src/http/HttpRouter.ts +8 -2
  905. package/src/http/HttpServerError.ts +6 -3
  906. package/src/http/HttpServerRequest.ts +71 -12
  907. package/src/http/HttpServerResponse.ts +49 -23
  908. package/src/http/HttpStaticServer.ts +25 -9
  909. package/src/http/MultipartParser/internal/contentType.ts +107 -6
  910. package/src/http/MultipartParser/internal/headers.ts +4 -16
  911. package/src/http/MultipartParser/internal/multipart.ts +10 -32
  912. package/src/http/Url.ts +6 -1
  913. package/src/http/internal/decompression.ts +26 -17
  914. package/src/http/internal/lazyStream.ts +25 -0
  915. package/src/http/internal/requestState.ts +33 -0
  916. package/src/http/internal/webResponse.ts +20 -0
  917. package/src/http-api/HttpApi.ts +1 -1
  918. package/src/http-api/HttpApiBuilder.ts +151 -23
  919. package/src/http-api/HttpApiClient.ts +158 -30
  920. package/src/http-api/HttpApiEndpoint.ts +144 -33
  921. package/src/http-api/HttpApiError.ts +55 -0
  922. package/src/http-api/HttpApiScalar.ts +4 -3
  923. package/src/http-api/HttpApiSchema.ts +275 -13
  924. package/src/http-api/HttpApiSwagger.ts +11 -4
  925. package/src/http-api/HttpApiTest.ts +33 -9
  926. package/src/http-api/OpenApi.ts +84 -42
  927. package/src/http-api/internal/path.ts +40 -12
  928. package/src/index.ts +24 -0
  929. package/src/internal/core.ts +1 -1
  930. package/src/internal/dateTime.ts +20 -7
  931. package/src/internal/effect.ts +120 -84
  932. package/src/internal/hashMap.ts +2 -2
  933. package/src/internal/hydration.ts +15 -0
  934. package/src/internal/inflate.ts +710 -0
  935. package/src/internal/record.ts +6 -0
  936. package/src/internal/request.ts +21 -6
  937. package/src/internal/schedule.ts +20 -39
  938. package/src/internal/schema/fromJsonSchemaDocument.ts +262 -193
  939. package/src/internal/schema/interpreter.ts +58 -45
  940. package/src/internal/schema/standardSchema.ts +32 -30
  941. package/src/internal/schema/toCodeDocument.ts +8 -3
  942. package/src/internal/schema/toCodec.ts +116 -1
  943. package/src/internal/schema/toFormatter.ts +6 -6
  944. package/src/internal/schema/toJsonSchemaDocument.ts +69 -39
  945. package/src/internal/trie.ts +1 -3
  946. package/src/internal/uuid.ts +15 -10
  947. package/src/internal/version.ts +1 -1
  948. package/src/net/NetAddress.ts +2 -9
  949. package/src/observability/OtlpExporter.ts +5 -12
  950. package/src/observability/OtlpMetrics.ts +5 -3
  951. package/src/observability/OtlpResource.ts +16 -6
  952. package/src/observability/OtlpSerialization.ts +17 -3
  953. package/src/observability/internal/protobuf.ts +2 -10
  954. package/src/persistence/PersistedCache.ts +3 -1
  955. package/src/persistence/PersistedQueue.ts +223 -153
  956. package/src/persistence/Persistence.ts +64 -30
  957. package/src/persistence/RateLimiter.ts +18 -21
  958. package/src/persistence/UserDirectories.ts +273 -0
  959. package/src/persistence/index.ts +6 -0
  960. package/src/process/ChildProcess.ts +2 -1
  961. package/src/reactivity/AsyncResult.ts +4 -38
  962. package/src/reactivity/Atom.ts +134 -166
  963. package/src/reactivity/AtomHttpApi.ts +10 -16
  964. package/src/reactivity/AtomRegistry.ts +50 -29
  965. package/src/reactivity/AtomRpc.ts +6 -22
  966. package/src/reactivity/Hydration.ts +53 -12
  967. package/src/reactivity/Reactivity.ts +97 -39
  968. package/src/rpc/Rpc.ts +21 -0
  969. package/src/rpc/RpcClient.ts +279 -103
  970. package/src/rpc/RpcSerialization.ts +21 -5
  971. package/src/rpc/RpcServer.ts +11 -20
  972. package/src/schema/VariantSchema.ts +86 -22
  973. package/src/socket/Socket.ts +45 -20
  974. package/src/sql/Migrator.ts +19 -9
  975. package/src/sql/SqlClient.ts +266 -29
  976. package/src/sql/SqlResolver.ts +9 -0
  977. package/src/sql/Statement.ts +35 -8
  978. package/src/testing/TestClock.ts +4 -1
  979. package/src/testing/TestSchema.ts +9 -3
  980. package/src/workflow/WorkflowEngine.ts +34 -10
  981. package/dist/http/internal/preResponseHandler.d.ts +0 -2
  982. package/dist/http/internal/preResponseHandler.d.ts.map +0 -1
  983. package/dist/http/internal/preResponseHandler.js +0 -14
  984. package/dist/http/internal/preResponseHandler.js.map +0 -1
  985. package/src/http/internal/preResponseHandler.ts +0 -19
@@ -15,6 +15,7 @@ import type { NonEmptyReadonlyArray } from "../Array.ts"
15
15
  import * as Cause from "../Cause.ts"
16
16
  import * as Clock from "../Clock.ts"
17
17
  import * as Context from "../Context.ts"
18
+ import * as Deferred from "../Deferred.ts"
18
19
  import * as Duration from "../Duration.ts"
19
20
  import * as Effect from "../Effect.ts"
20
21
  import * as Exit from "../Exit.ts"
@@ -47,7 +48,14 @@ import * as RpcTracing from "./internal/tracing.ts"
47
48
  import * as Rpc from "./Rpc.ts"
48
49
  import { RpcClientDefect, RpcClientError } from "./RpcClientError.ts"
49
50
  import type * as RpcGroup from "./RpcGroup.ts"
50
- import type { FromClient, FromClientEncoded, FromServer, FromServerEncoded, Request } from "./RpcMessage.ts"
51
+ import type {
52
+ FromClient,
53
+ FromClientEncoded,
54
+ FromServer,
55
+ FromServerEncoded,
56
+ Request,
57
+ RequestEncoded
58
+ } from "./RpcMessage.ts"
51
59
  import { constPing, isTerminalResponse, RequestId } from "./RpcMessage.ts"
52
60
  import type * as RpcMiddleware from "./RpcMiddleware.ts"
53
61
  import * as RpcSchema from "./RpcSchema.ts"
@@ -301,8 +309,11 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any, E, const Flatten extend
301
309
  )
302
310
 
303
311
  const clearEntries = Effect.fnUntraced(function*(exit: Exit.Exit<never>) {
304
- for (const [id, entry] of entries) {
305
- entries.delete(id)
312
+ // Resuming callers can synchronously start new requests.
313
+ const pending = Array.from(entries.values())
314
+ entries.clear()
315
+ // Once detached, every entry must complete even if delivery is interrupted.
316
+ for (const entry of pending) {
306
317
  if (entry._tag === "Queue") {
307
318
  yield* (exit._tag === "Success"
308
319
  ? Queue.end(entry.queue as any)
@@ -311,7 +322,7 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any, E, const Flatten extend
311
322
  entry.resume(exit)
312
323
  }
313
324
  }
314
- })
325
+ }, Effect.uninterruptible)
315
326
 
316
327
  const onRequest = (rpc: Rpc.AnyWithProps) => {
317
328
  const isStream = RpcSchema.isStreamSchema(rpc.successSchema)
@@ -420,6 +431,7 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any, E, const Flatten extend
420
431
  )
421
432
  fiber.addObserver((exit) => {
422
433
  if (exit._tag === "Failure") {
434
+ entries.delete(id)
423
435
  return resume(exit)
424
436
  }
425
437
  })
@@ -505,7 +517,10 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any, E, const Flatten extend
505
517
  }
506
518
  ).pipe(
507
519
  span ? Effect.withParentSpan(span, { captureStackTrace: false }) : identity,
508
- Effect.onError((cause) => Queue.failCause(queue, cause)),
520
+ Effect.onError((cause) => {
521
+ if (!Cause.hasInterruptsOnly(cause)) entries.delete(id)
522
+ return Queue.failCause(queue, cause)
523
+ }),
509
524
  Effect.interruptible,
510
525
  Effect.forkIn(scope, { startImmediately: true })
511
526
  )
@@ -674,6 +689,9 @@ export const make: <Rpcs extends Rpc.Any, const Flatten extends boolean = false>
674
689
  readonly schemas: RpcSchemas
675
690
  }
676
691
  const entries = new Map<RequestId, ClientEntry>()
692
+ // Set before the protocol stops running this client, so requests made while
693
+ // it shuts down are not handed to a transport that is being torn down.
694
+ let isClosing = false
677
695
 
678
696
  const interruptRequest = (requestId: RequestId): Effect.Effect<void, RpcClientError> => {
679
697
  if (!entries.has(requestId)) return Effect.void
@@ -702,13 +720,23 @@ export const make: <Rpcs extends Rpc.Any, const Flatten extends boolean = false>
702
720
  return entry.schemas.encodePayload(message.payload).pipe(
703
721
  Effect.provideContext(entry.context),
704
722
  Effect.orDie,
705
- Effect.flatMap((payload) =>
706
- send(clientId, {
723
+ Effect.flatMap((payload) => {
724
+ // Checked after encoding, which can suspend while the client
725
+ // starts shutting down.
726
+ if (isClosing) {
727
+ entries.delete(message.id)
728
+ return Effect.interrupt
729
+ }
730
+ return send(clientId, {
707
731
  ...message,
708
732
  id: message.id,
709
733
  payload,
710
734
  headers: Object.entries(message.headers)
711
735
  }, collector && collector.readUnsafe())
736
+ }),
737
+ // An interrupted request keeps its entry until the interrupt is sent.
738
+ Effect.onError((cause) =>
739
+ Cause.hasInterruptsOnly(cause) ? Effect.void : Effect.sync(() => entries.delete(message.id))
712
740
  )
713
741
  ) as Effect.Effect<void, RpcClientError>
714
742
  }
@@ -769,15 +797,19 @@ export const make: <Rpcs extends Rpc.Any, const Flatten extends boolean = false>
769
797
  })
770
798
  ) as Effect.Effect<void>
771
799
  }
800
+ // Clear entries before resuming callers, as they can start new requests
772
801
  case "Defect": {
802
+ entries.clear()
773
803
  return write({ _tag: "Defect", clientId: 0, defect: decodeDefect(message.defect as any) })
774
804
  }
775
805
  case "ClientProtocolError": {
776
806
  const exit = Exit.fail(message.error)
807
+ const requestIds = Array.from(entries.keys())
808
+ entries.clear()
777
809
  return Effect.forEach(
778
- Array.from(entries.keys()),
810
+ requestIds,
779
811
  (requestId) => write({ _tag: "Exit", clientId: 0, requestId, exit: exit as any })
780
- )
812
+ ).pipe(Effect.uninterruptible)
781
813
  }
782
814
  default: {
783
815
  return Effect.void
@@ -788,6 +820,12 @@ export const make: <Rpcs extends Rpc.Any, const Flatten extends boolean = false>
788
820
  Effect.interruptible,
789
821
  Effect.forkScoped
790
822
  )
823
+ // Finalizers run in reverse order, so this runs before `run` is interrupted.
824
+ yield* Effect.addFinalizer(() =>
825
+ Effect.sync(() => {
826
+ isClosing = true
827
+ })
828
+ )
791
829
 
792
830
  return client
793
831
  })
@@ -809,13 +847,15 @@ const makeRpcSchemas = (codecFor: RpcSerialization.CodecFor) => {
809
847
  return entry
810
848
  }
811
849
  const streamSchemas = RpcSchema.getStreamSchemas(rpc.successSchema)
850
+ const parseOptions = Context.get(rpc.annotations, Rpc.ParseOptions)
812
851
  entry = {
813
852
  decodeChunk: Option.map(
814
853
  streamSchemas,
815
- (streamSchemas) => Schema.decodeUnknownEffect(codecFor(Schema.NonEmptyArray(streamSchemas.success)))
854
+ (streamSchemas) =>
855
+ Schema.decodeUnknownEffect(codecFor(Schema.NonEmptyArray(streamSchemas.success)), parseOptions)
816
856
  ),
817
- encodePayload: Schema.encodeEffect(codecFor(rpc.payloadSchema)),
818
- decodeExit: Schema.decodeUnknownEffect(codecFor(Rpc.exitSchema(rpc as any)))
857
+ encodePayload: Schema.encodeEffect(codecFor(rpc.payloadSchema), parseOptions),
858
+ decodeExit: Schema.decodeUnknownEffect(codecFor(Rpc.exitSchema(rpc as any)), parseOptions)
819
859
  }
820
860
  cache.set(rpc, entry)
821
861
  return entry
@@ -913,119 +953,240 @@ export class Protocol extends Context.Service<Protocol, {
913
953
  }
914
954
 
915
955
  /**
916
- * Creates a client `Protocol` that sends each RPC request through the supplied
956
+ * Creates a client `Protocol` that sends RPC requests through the supplied
917
957
  * `HttpClient` and decodes responses with the current `RpcSerialization`.
918
958
  *
959
+ * **Details**
960
+ *
961
+ * Each request is sent as its own HTTP request unless `batch` is set. With
962
+ * `batch`, the first request for a client opens a batch. Requests from the
963
+ * same client made before `window` elapses join it, and the batch is sent once
964
+ * the window elapses or it reaches `maxSize` requests, whichever comes first.
965
+ *
919
966
  * @stability unstable
920
967
  * @category protocols
921
968
  * @since 4.0.0
922
969
  */
923
- export const makeProtocolHttp = (client: HttpClient.HttpClient): Effect.Effect<
970
+ export const makeProtocolHttp = (client: HttpClient.HttpClient, options?: {
971
+ readonly batch?: {
972
+ readonly window: Duration.Input
973
+ readonly maxSize?: number | undefined
974
+ } | undefined
975
+ }): Effect.Effect<
924
976
  Protocol["Service"],
925
977
  never,
926
978
  RpcSerialization.RpcSerialization
927
- > =>
979
+ > => options?.batch ? makeProtocolHttpBatched(client, options.batch) : makeProtocolHttpUnbatched(client)
980
+
981
+ const makeProtocolHttpUnbatched = (client: HttpClient.HttpClient) =>
928
982
  Protocol.make(Effect.fnUntraced(function*(writeResponse) {
929
983
  const serialization = yield* RpcSerialization.RpcSerialization
930
- const isFramed = serialization.includesFraming
931
- const httpClientError = (cause: any) =>
932
- new RpcClientError({
933
- reason: HttpClientErrorSchema.fromHttpClientError(cause)
934
- })
935
- const protocolDefect = (message: string, cause: unknown) =>
936
- new RpcClientError({
937
- reason: new RpcClientDefect({ message, cause })
938
- })
939
- const emptyResponseError = (request: FromClientEncoded) =>
940
- protocolDefect("Received empty HTTP response from RPC server", request)
941
- const incompleteResponseError = (request: FromClientEncoded) =>
942
- protocolDefect("HTTP response ended before RPC request completed", request)
943
-
944
- const send = Effect.fnUntraced(function*(clientId: number, request: FromClientEncoded) {
945
- if (request._tag !== "Request") {
946
- return
947
- }
948
-
949
- const parser = serialization.makeUnsafe()
984
+ const exchange = makeHttpExchange(client, serialization, writeResponse)
985
+ return {
986
+ send: (clientId, request) =>
987
+ request._tag === "Request"
988
+ ? Effect.flatMap(exchange.send(clientId, [request]), (pending) => exchange.requestExit(request, pending))
989
+ : Effect.void,
990
+ supportsAck: false,
991
+ supportsTransferables: false,
992
+ codecFor: serialization.codecFor
993
+ }
994
+ }))
950
995
 
951
- const encoded = parser.encode(request)!
952
- const body = typeof encoded === "string" ?
953
- HttpBody.text(encoded, serialization.contentType) :
954
- HttpBody.uint8Array(encoded, serialization.contentType)
996
+ const makeProtocolHttpBatched = Effect.fnUntraced(function*(client: HttpClient.HttpClient, options: {
997
+ readonly window: Duration.Input
998
+ readonly maxSize?: number | undefined
999
+ }) {
1000
+ const { maxSize, window } = options
1001
+
1002
+ // Batches of a client run in its own scope, which is closed when the client
1003
+ // stops running.
1004
+ const scopes = new Map<number, Scope.Closeable>()
1005
+ const closeScope = (clientId: number) => {
1006
+ const scope = scopes.get(clientId)
1007
+ if (scope === undefined) return Effect.void
1008
+ scopes.delete(clientId)
1009
+ return Scope.close(scope, Exit.void)
1010
+ }
955
1011
 
956
- const response = yield* client.post("", { body }).pipe(Effect.mapError(httpClientError))
1012
+ const protocol = yield* Protocol.make(Effect.fnUntraced(function*(writeResponse) {
1013
+ const serialization = yield* RpcSerialization.RpcSerialization
1014
+ const exchange = makeHttpExchange(client, serialization, writeResponse)
957
1015
 
958
- if (!isFramed) {
959
- const text = yield* response.text.pipe(Effect.mapError(httpClientError))
960
- const responses = yield* Effect.try({
961
- try: () => parser.decode(text),
962
- catch: (cause) => protocolDefect("Error decoding HTTP response", cause)
1016
+ interface Batch {
1017
+ readonly requests: Array<RequestEncoded>
1018
+ readonly full: Latch.Latch
1019
+ readonly done: Deferred.Deferred<ReadonlySet<string> | undefined, RpcClientError>
1020
+ }
1021
+ const batches = new Map<number, Batch>()
1022
+ const closeBatch = (clientId: number, batch: Batch) => {
1023
+ if (batches.get(clientId) === batch) {
1024
+ batches.delete(clientId)
1025
+ }
1026
+ }
1027
+ // Runs in the client scope rather than in a caller, so interrupting one
1028
+ // caller does not cancel the HTTP request for the rest of the batch.
1029
+ const runBatch = (clientId: number, batch: Batch) =>
1030
+ Effect.raceFirst(Effect.sleep(window), batch.full.await).pipe(
1031
+ Effect.andThen(Effect.suspend(() => {
1032
+ closeBatch(clientId, batch)
1033
+ return exchange.send(clientId, batch.requests)
1034
+ })),
1035
+ Effect.onExit((exit) => {
1036
+ closeBatch(clientId, batch)
1037
+ return Deferred.done(batch.done, exit)
963
1038
  })
964
- if (!Array.isArray(responses)) {
965
- return yield* protocolDefect("Expected an array of responses", responses)
966
- }
967
- if (responses.length === 0) {
968
- return yield* emptyResponseError(request)
969
- }
970
- let completed = false
971
- for (let i = 0; i < responses.length; i++) {
972
- const response = responses[i]
973
- if (isTerminalResponse(response)) {
974
- completed = true
975
- }
976
- yield* writeResponse(clientId, response)
977
- }
978
- if (!completed) {
979
- return yield* incompleteResponseError(request)
1039
+ )
1040
+ const send = Effect.fnUntraced(function*(clientId: number, request: RequestEncoded) {
1041
+ let batch = batches.get(clientId)
1042
+ if (batch === undefined) {
1043
+ batch = { requests: [request], full: Latch.makeUnsafe(), done: Deferred.makeUnsafe() }
1044
+ batches.set(clientId, batch)
1045
+ let scope = scopes.get(clientId)
1046
+ if (scope === undefined) {
1047
+ scope = Scope.makeUnsafe()
1048
+ scopes.set(clientId, scope)
980
1049
  }
981
- return
1050
+ yield* Effect.forkIn(runBatch(clientId, batch), scope, { startImmediately: true })
1051
+ } else {
1052
+ batch.requests.push(request)
982
1053
  }
983
-
984
- let hasResponse = false
985
- let completed = false
986
- yield* Stream.runForEachArray(response.stream, (chunk) =>
987
- Effect.try({
988
- try: () => chunk.flatMap(parser.decode) as Array<FromServerEncoded>,
989
- catch: (cause) => protocolDefect("Error decoding HTTP response", cause)
990
- }).pipe(
991
- Effect.flatMap((responses) => {
992
- if (responses.length === 0) return Effect.void
993
- hasResponse = true
994
- let i = 0
995
- return Effect.whileLoop({
996
- while: () => i < responses.length,
997
- body: () => {
998
- const response = responses[i++]
999
- if (isTerminalResponse(response)) {
1000
- completed = true
1001
- }
1002
- return writeResponse(clientId, response)
1003
- },
1004
- step: constVoid
1005
- })
1006
- })
1007
- )).pipe(
1008
- Effect.mapError((cause) => isRpcClientError(cause) ? cause : httpClientError(cause))
1009
- )
1010
- if (!hasResponse) {
1011
- return yield* emptyResponseError(request)
1012
- } else if (!completed) {
1013
- return yield* incompleteResponseError(request)
1054
+ if (batch.requests.length === maxSize) {
1055
+ closeBatch(clientId, batch)
1056
+ batch.full.openUnsafe()
1014
1057
  }
1058
+ return yield* exchange.requestExit(request, yield* Deferred.await(batch.done))
1015
1059
  })
1016
1060
 
1017
1061
  return {
1018
- send,
1062
+ send: (clientId, request) => request._tag === "Request" ? send(clientId, request) : Effect.void,
1019
1063
  supportsAck: false,
1020
1064
  supportsTransferables: false,
1021
1065
  codecFor: serialization.codecFor
1022
1066
  }
1023
1067
  }))
1024
1068
 
1069
+ return Protocol.of({
1070
+ ...protocol,
1071
+ run: (clientId, f) => Effect.onExit(protocol.run(clientId, f), () => closeScope(clientId))
1072
+ })
1073
+ })
1074
+
1075
+ // Sends RPC requests in one HTTP request, shared by the batched and unbatched
1076
+ // HTTP protocols.
1077
+ const makeHttpExchange = (
1078
+ client: HttpClient.HttpClient,
1079
+ serialization: RpcSerialization.RpcSerialization["Service"],
1080
+ writeResponse: (clientId: number, response: FromServerEncoded) => Effect.Effect<void>
1081
+ ) => {
1082
+ const isFramed = serialization.includesFraming
1083
+ const httpClientError = (cause: any) =>
1084
+ new RpcClientError({
1085
+ reason: HttpClientErrorSchema.fromHttpClientError(cause)
1086
+ })
1087
+ const protocolDefect = (message: string, cause: unknown) =>
1088
+ new RpcClientError({
1089
+ reason: new RpcClientDefect({ message, cause })
1090
+ })
1091
+
1092
+ // Writes each response as it is decoded. Returns the ids of the requests left
1093
+ // without a terminal response, or `undefined` when the server sent no
1094
+ // responses.
1095
+ const send = Effect.fnUntraced(function*(
1096
+ clientId: number,
1097
+ requests: ReadonlyArray<RequestEncoded>
1098
+ ) {
1099
+ const parser = serialization.makeUnsafe()
1100
+
1101
+ const encoded = parser.encode(requests.length === 1 ? requests[0] : requests)!
1102
+ const body = typeof encoded === "string" ?
1103
+ HttpBody.text(encoded, serialization.contentType) :
1104
+ HttpBody.uint8Array(encoded, serialization.contentType)
1105
+
1106
+ const response = yield* client.post("", { body }).pipe(Effect.mapError(httpClientError))
1107
+
1108
+ const pending = new Set<string>()
1109
+ for (let i = 0; i < requests.length; i++) {
1110
+ pending.add(String(requests[i].id))
1111
+ }
1112
+ const onResponse = (response: FromServerEncoded) => {
1113
+ if (response._tag === "Exit") {
1114
+ pending.delete(String(response.requestId))
1115
+ } else if (isTerminalResponse(response)) {
1116
+ // defects and protocol errors end every request of the client
1117
+ pending.clear()
1118
+ }
1119
+ return writeResponse(clientId, response)
1120
+ }
1121
+
1122
+ if (!isFramed) {
1123
+ const text = yield* response.text.pipe(Effect.mapError(httpClientError))
1124
+ const responses = yield* Effect.try({
1125
+ try: () => parser.decode(text),
1126
+ catch: (cause) => protocolDefect("Error decoding HTTP response", cause)
1127
+ })
1128
+ if (!Array.isArray(responses)) {
1129
+ return yield* protocolDefect("Expected an array of responses", responses)
1130
+ }
1131
+ if (responses.length === 0) {
1132
+ return undefined
1133
+ }
1134
+ for (let i = 0; i < responses.length; i++) {
1135
+ yield* onResponse(responses[i])
1136
+ }
1137
+ return pending
1138
+ }
1139
+
1140
+ let hasResponse = false
1141
+ yield* Stream.runForEachArray(response.stream, (chunk) =>
1142
+ Effect.try({
1143
+ try: () => chunk.flatMap(parser.decode) as Array<FromServerEncoded>,
1144
+ catch: (cause) => protocolDefect("Error decoding HTTP response", cause)
1145
+ }).pipe(
1146
+ Effect.flatMap((responses) => {
1147
+ if (responses.length === 0) return Effect.void
1148
+ hasResponse = true
1149
+ let i = 0
1150
+ return Effect.whileLoop({
1151
+ while: () => i < responses.length,
1152
+ body: () => onResponse(responses[i++]),
1153
+ step: constVoid
1154
+ })
1155
+ })
1156
+ )).pipe(
1157
+ Effect.mapError((cause) => isRpcClientError(cause) ? cause : httpClientError(cause))
1158
+ )
1159
+ return hasResponse ? pending : undefined
1160
+ })
1161
+
1162
+ // Completes one request from the result of the exchange that carried it.
1163
+ const requestExit = (
1164
+ request: RequestEncoded,
1165
+ pending: ReadonlySet<string> | undefined
1166
+ ): Exit.Exit<void, RpcClientError> => {
1167
+ if (pending === undefined) {
1168
+ return Exit.fail(protocolDefect("Received empty HTTP response from RPC server", request))
1169
+ } else if (pending.has(String(request.id))) {
1170
+ return Exit.fail(protocolDefect("HTTP response ended before RPC request completed", request))
1171
+ }
1172
+ return Exit.void
1173
+ }
1174
+
1175
+ return { send, requestExit } as const
1176
+ }
1177
+
1025
1178
  /**
1026
1179
  * Provides a client `Protocol` backed by `HttpClient`, targeting the configured
1027
1180
  * URL and optionally transforming the client before use.
1028
1181
  *
1182
+ * **Details**
1183
+ *
1184
+ * Set `batch` to send concurrent requests from the same client in a single
1185
+ * HTTP request. The first request for a client opens a batch. Requests from
1186
+ * the same client made before `window` elapses join it, and the batch is sent
1187
+ * once the window elapses or it reaches `maxSize` requests, whichever comes
1188
+ * first.
1189
+ *
1029
1190
  * @stability unstable
1030
1191
  * @category layers
1031
1192
  * @since 4.0.0
@@ -1033,13 +1194,19 @@ export const makeProtocolHttp = (client: HttpClient.HttpClient): Effect.Effect<
1033
1194
  export const layerProtocolHttp = (options: {
1034
1195
  readonly url: string
1035
1196
  readonly transformClient?: <E, R>(client: HttpClient.HttpClient.With<E, R>) => HttpClient.HttpClient.With<E, R>
1197
+ readonly batch?: {
1198
+ readonly window: Duration.Input
1199
+ readonly maxSize?: number | undefined
1200
+ } | undefined
1036
1201
  }): Layer.Layer<Protocol, never, RpcSerialization.RpcSerialization | HttpClient.HttpClient> =>
1037
1202
  Layer.effect(Protocol)(
1038
1203
  Effect.flatMap(
1039
1204
  HttpClient.HttpClient,
1040
1205
  (client) => {
1041
1206
  client = HttpClient.mapRequest(client, HttpClientRequest.prependUrl(options.url))
1042
- return makeProtocolHttp(options.transformClient ? options.transformClient(client) : client)
1207
+ return makeProtocolHttp(options.transformClient ? options.transformClient(client) : client, {
1208
+ batch: options.batch
1209
+ })
1043
1210
  }
1044
1211
  )
1045
1212
  )
@@ -1102,8 +1269,13 @@ export const makeProtocolSocket = (options?: {
1102
1269
  })
1103
1270
  let currentError: RpcClientError | undefined
1104
1271
 
1105
- const broadcast = (response: FromServerEncoded) =>
1106
- Effect.forEach(clientIds, (clientId) => writeResponse(clientId, response))
1272
+ const broadcast = (response: FromServerEncoded) => {
1273
+ const deliver = Effect.forEach(Array.from(clientIds), (clientId) => writeResponse(clientId, response))
1274
+ if (response._tag !== "Defect" && response._tag !== "ClientProtocolError") return deliver
1275
+ // A terminal response ends every request; clear routing before callers can start new ones
1276
+ requestClientMap.clear()
1277
+ return Effect.uninterruptible(deliver)
1278
+ }
1107
1279
  const broadcastError = (error: RpcClientError) => {
1108
1280
  currentError = error
1109
1281
  return broadcast({
@@ -1218,17 +1390,21 @@ export const makeProtocolSocket = (options?: {
1218
1390
  Effect.forkScoped
1219
1391
  )
1220
1392
 
1393
+ const write = (request: FromClientEncoded) =>
1394
+ Effect.suspend(() => {
1395
+ const encoded = parser.encode(request)
1396
+ return encoded === undefined ? Effect.void : Effect.orDie(writer.write(encoded))
1397
+ })
1398
+
1221
1399
  return {
1222
1400
  send(clientId, request) {
1223
1401
  if (currentError) {
1224
1402
  return Effect.fail(currentError)
1225
1403
  }
1226
- if (request._tag === "Request") {
1227
- requestClientMap.set(request.id, clientId)
1228
- }
1229
- const encoded = parser.encode(request)
1230
- if (encoded === undefined) return Effect.void
1231
- return Effect.orDie(writer.write(encoded))
1404
+ if (request._tag === "Interrupt") requestClientMap.delete(request.requestId)
1405
+ if (request._tag !== "Request") return write(request)
1406
+ requestClientMap.set(request.id, clientId)
1407
+ return Effect.onError(write(request), () => Effect.sync(() => requestClientMap.delete(request.id)))
1232
1408
  },
1233
1409
  supportsAck: true,
1234
1410
  supportsTransferables: false,
@@ -95,6 +95,18 @@ export class MaxBufferSizeExceeded extends Data.TaggedError("MaxBufferSizeExceed
95
95
  }
96
96
  }
97
97
 
98
+ /**
99
+ * Error raised when a non-empty NDJSON frame is not valid JSON.
100
+ * The `cause` field preserves the original JSON parsing error.
101
+ *
102
+ * @stability unstable
103
+ * @category errors
104
+ * @since 4.0.0
105
+ */
106
+ export class NdjsonDecodeError extends Data.TaggedError("NdjsonDecodeError")<{
107
+ readonly cause: unknown
108
+ }> {}
109
+
98
110
  /**
99
111
  * Options shared by streaming RPC serialization formats.
100
112
  *
@@ -150,7 +162,7 @@ export const json: RpcSerialization["Service"] = RpcSerialization.of({
150
162
  export const makeNdjson = (options?: StreamOptions): RpcSerialization["Service"] => {
151
163
  const maxBufferSize = options?.maxBufferSize ?? defaultMaxBufferSize
152
164
  return RpcSerialization.of({
153
- contentType: "application/ndjson",
165
+ contentType: "application/x-ndjson",
154
166
  includesFraming: true,
155
167
  codecFor: codecForJson,
156
168
  makeUnsafe: () => {
@@ -171,11 +183,15 @@ export const makeNdjson = (options?: StreamOptions): RpcSerialization["Service"]
171
183
  if (isBufferSizeExceeded(nlIndex - position, maxBufferSize)) {
172
184
  failMaxBufferSize(maxBufferSize)
173
185
  }
174
- const line = buffer.slice(position, nlIndex)
186
+ const line = buffer.slice(position, buffer[nlIndex - 1] === "\r" ? nlIndex - 1 : nlIndex)
175
187
  position = nlIndex + 1
176
- try {
177
- items.push(JSON.parse(line))
178
- } catch {
188
+ if (line.length > 0) {
189
+ try {
190
+ items.push(JSON.parse(line))
191
+ } catch (cause) {
192
+ buffer = ""
193
+ throw new NdjsonDecodeError({ cause })
194
+ }
179
195
  }
180
196
  nlIndex = buffer.indexOf("\n", position)
181
197
  }
@@ -12,6 +12,7 @@
12
12
  * @since 4.0.0
13
13
  */
14
14
  import type { NonEmptyReadonlyArray } from "../Array.ts"
15
+ import * as Bytes from "../Bytes.ts"
15
16
  import * as Cause from "../Cause.ts"
16
17
  import * as Context from "../Context.ts"
17
18
  import * as Deferred from "../Deferred.ts"
@@ -513,14 +514,16 @@ const rpcCodecs = (codecFor: RpcSerialization.CodecFor, rpc: Rpc.AnyWithProps):
513
514
  let codecs = shared ? sharedRpcCodecs.get(rpc) : undefined
514
515
  if (codecs === undefined) {
515
516
  const streamSchemas = RpcSchema.getStreamSchemas(rpc.successSchema)
517
+ const parseOptions = Context.get(rpc.annotations, Rpc.ParseOptions)
516
518
  codecs = {
517
- decode: Schema.decodeUnknownEffect(codecFor(rpc.payloadSchema)) as any,
519
+ decode: Schema.decodeUnknownEffect(codecFor(rpc.payloadSchema), parseOptions) as any,
518
520
  encodeChunk: Schema.encodeUnknownEffect(
519
521
  codecFor(
520
522
  Schema.NonEmptyArray(Option.isSome(streamSchemas) ? streamSchemas.value.success : Schema.Any)
521
- )
523
+ ),
524
+ parseOptions
522
525
  ) as any,
523
- encodeExit: Schema.encodeUnknownEffect(codecFor(Rpc.exitSchema(rpc as any))) as any
526
+ encodeExit: Schema.encodeUnknownEffect(codecFor(Rpc.exitSchema(rpc as any)), parseOptions) as any
524
527
  }
525
528
  if (shared) sharedRpcCodecs.set(rpc, codecs)
526
529
  }
@@ -1246,8 +1249,9 @@ export const makeProtocolWithHttpEffect: (
1246
1249
 
1247
1250
  yield* writeRequest(id, constEof)
1248
1251
 
1252
+ // Allow request aborts during response waits without unmasking response construction.
1249
1253
  if (!includesFraming) {
1250
- const responses = yield* Queue.collect(queue)
1254
+ const responses = yield* Effect.interruptible(Queue.collect(queue))
1251
1255
  // Notification-only batches encode without a response body.
1252
1256
  const encoded = parser.encode(responses)
1253
1257
  return HttpServerResponse.text(encoded === undefined ? "" : encoded as string, {
@@ -1255,12 +1259,12 @@ export const makeProtocolWithHttpEffect: (
1255
1259
  })
1256
1260
  }
1257
1261
 
1258
- const initialChunk = yield* Pull.catchDone(
1262
+ const initialChunk = yield* Effect.interruptible(Pull.catchDone(
1259
1263
  Queue.takeAll(queue as Queue.Dequeue<Uint8Array, Cause.Done>),
1260
1264
  () => Effect.succeed([])
1261
- )
1265
+ ))
1262
1266
  if (queue.state._tag === "Done") {
1263
- return HttpServerResponse.uint8Array(mergeUint8Arrays(initialChunk), {
1267
+ return HttpServerResponse.uint8Array(initialChunk.length === 1 ? initialChunk[0] : Bytes.concat(initialChunk), {
1264
1268
  contentType: serialization.contentType
1265
1269
  })
1266
1270
  }
@@ -1302,19 +1306,6 @@ export const makeProtocolWithHttpEffect: (
1302
1306
  return { protocol, httpEffect } as const
1303
1307
  })
1304
1308
 
1305
- const mergeUint8Arrays = (arrays: ReadonlyArray<Uint8Array>) => {
1306
- if (arrays.length === 0) return new Uint8Array(0)
1307
- if (arrays.length === 1) return arrays[0]
1308
- const length = arrays.reduce((acc, arr) => acc + arr.length, 0)
1309
- const result = new Uint8Array(length)
1310
- let offset = 0
1311
- for (const arr of arrays) {
1312
- result.set(arr, offset)
1313
- offset += arr.length
1314
- }
1315
- return result
1316
- }
1317
-
1318
1309
  /**
1319
1310
  * Creates an HTTP server `Protocol` and registers its request handler as a POST
1320
1311
  * route on the current `HttpRouter`.