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
@@ -18,8 +18,9 @@ import { identity } from "../Function.ts"
18
18
  import * as Option from "../Option.ts"
19
19
  import { hasProperty } from "../Predicate.ts"
20
20
  import type * as Queue from "../Queue.ts"
21
- import { Reactivity } from "../reactivity/Reactivity.ts"
21
+ import { type KeysInput, Reactivity } from "../reactivity/Reactivity.ts"
22
22
  import type { ReadonlyRecord } from "../Record.ts"
23
+ import { UnhandledLogLevel } from "../References.ts"
23
24
  import * as Scope from "../Scope.ts"
24
25
  import * as Semaphore from "../Semaphore.ts"
25
26
  import * as Stream from "../Stream.ts"
@@ -55,8 +56,39 @@ export interface SqlClient extends Constructor {
55
56
 
56
57
  readonly reserve: Effect.Effect<Connection.Connection, SqlError, Scope.Scope>
57
58
 
59
+ /**
60
+ * Identifies the driver that created this client.
61
+ *
62
+ * **Details**
63
+ *
64
+ * Effect drivers use their package name without the `@effect/sql-` prefix,
65
+ * such as `"pg"`, `"pglite"` or `"sqlite-node"`. Unlike the compiler
66
+ * dialect, it distinguishes drivers that share a SQL dialect but manage
67
+ * connections differently.
68
+ */
69
+ readonly driver: string
70
+
58
71
  /**
59
72
  * With the given effect, ensure all sql queries are run in a transaction.
73
+ *
74
+ * **Details**
75
+ *
76
+ * Inside the transaction, `Reactivity.invalidate` and `Reactivity.mutation`
77
+ * invalidate once the outermost transaction commits, and not at all if it
78
+ * rolls back.
79
+ *
80
+ * To start a top-level transaction with a statement other than the
81
+ * client's, such as one that sets its isolation level, provide
82
+ * `BeginTransaction`.
83
+ *
84
+ * **Gotchas**
85
+ *
86
+ * Deferred invalidations run individually after the commit and don't join an
87
+ * enclosing `Reactivity.withBatch`. Only the `Reactivity` service read from
88
+ * the transaction's context defers, and a fiber that outlives the
89
+ * transaction can't defer through it, as with `afterCommit`. Transactions
90
+ * that don't go through `makeWithTransaction`, such as those of
91
+ * `@effect/sql-sqlite-do`, invalidate immediately.
60
92
  */
61
93
  readonly withTransaction: <R, E, A>(
62
94
  self: Effect.Effect<A, E, R>
@@ -67,11 +99,53 @@ export interface SqlClient extends Constructor {
67
99
  */
68
100
  readonly transactionService: Context.Service<TransactionConnection, TransactionConnection.Service>
69
101
 
102
+ /**
103
+ * Runs `effect` once the outermost transaction of this client commits, or
104
+ * immediately, and interruptibly, when no transaction is open.
105
+ *
106
+ * **When to use**
107
+ *
108
+ * Use to signal committed changes, such as waking workers, invalidating
109
+ * caches or notifying subscribers.
110
+ *
111
+ * **Details**
112
+ *
113
+ * Callbacks are discarded if the transaction rolls back or its `COMMIT`
114
+ * fails, and callbacks registered in a savepoint that rolls back are
115
+ * discarded even if the outer transaction commits. After a successful
116
+ * `COMMIT`, callbacks run once releasing the connection has been attempted,
117
+ * before `withTransaction` returns.
118
+ *
119
+ * A callback runs with the services that were in scope when it was
120
+ * registered, minus this client's transaction, so a callback that queries
121
+ * uses a new connection. A callback that dies is logged at
122
+ * `References.UnhandledLogLevel` and the rest still run.
123
+ *
124
+ * Callbacks run in registration order within a transaction or savepoint,
125
+ * and a committed savepoint's callbacks follow those already registered in
126
+ * the enclosing level. Callbacks registered concurrently from several
127
+ * fibers are not guaranteed to run in registration order.
128
+ *
129
+ * **Gotchas**
130
+ *
131
+ * Callbacks are lost if the process exits before they run or the outcome of
132
+ * `COMMIT` is unknown, so work that must happen belongs in a table written
133
+ * in the same transaction. After `COMMIT`, callbacks run uninterruptibly,
134
+ * even if the fiber was interrupted or releasing the connection failed, and
135
+ * `withTransaction` waits for them, so keep them short and fork
136
+ * long-running work.
137
+ * Registering after the transaction has ended is a defect.
138
+ *
139
+ * Transactions that don't go through `makeWithTransaction`, such as those
140
+ * of `@effect/sql-sqlite-do`, run callbacks immediately.
141
+ */
142
+ readonly afterCommit: <R>(effect: Effect.Effect<void, never, R>) => Effect.Effect<void, never, R>
143
+
70
144
  /**
71
145
  * Use the Reactivity service to create a reactive query.
72
146
  */
73
147
  readonly reactive: <A, E, R>(
74
- keys: ReadonlyArray<unknown> | ReadonlyRecord<string, ReadonlyArray<unknown>>,
148
+ keys: KeysInput,
75
149
  effect: Effect.Effect<A, E, R>
76
150
  ) => Stream.Stream<A, E, R>
77
151
 
@@ -80,7 +154,7 @@ export interface SqlClient extends Constructor {
80
154
  * query.
81
155
  */
82
156
  readonly reactiveMailbox: <A, E, R>(
83
- keys: ReadonlyArray<unknown> | ReadonlyRecord<string, ReadonlyArray<unknown>>,
157
+ keys: KeysInput,
84
158
  effect: Effect.Effect<A, E, R>
85
159
  ) => Effect.Effect<Queue.Dequeue<A, E>, never, R | Scope.Scope>
86
160
  }
@@ -126,6 +200,10 @@ export declare namespace SqlClient {
126
200
  readonly borrower?: Connection.Borrower | undefined
127
201
  readonly compiler: Compiler
128
202
  readonly transactionAcquirer?: Connection.Acquirer
203
+ /**
204
+ * Identifies the driver creating the client, exposed as `SqlClient.driver`.
205
+ */
206
+ readonly driver: string
129
207
  readonly spanAttributes: ReadonlyArray<readonly [string, unknown]>
130
208
  readonly transactionService?: Context.Service<TransactionConnection, TransactionConnection.Service>
131
209
  /**
@@ -147,6 +225,11 @@ export declare namespace SqlClient {
147
225
  readonly commit?: string | ((conn: Connection.Connection) => Effect.Effect<void, SqlError>) | undefined
148
226
  /** Cleanup on the same connection when COMMIT fails. Omit when the driver already ends the transaction. */
149
227
  readonly onCommitFailure?: ((conn: Connection.Connection) => Effect.Effect<void, SqlError>) | undefined
228
+ /**
229
+ * Reports whether a transaction is open. If false, rollback and savepoint
230
+ * cleanup are skipped.
231
+ */
232
+ readonly isTransaction?: ((conn: Connection.Connection) => boolean) | undefined
150
233
  readonly savepoint?: ((name: string) => string) | undefined
151
234
  /**
152
235
  * SQL to release a nested savepoint after success or a successful rollback.
@@ -195,28 +278,29 @@ export const make = Effect.fnUntraced(function*(options: SqlClient.MakeOptions)
195
278
  const control = options.prepareTransactionControls === true
196
279
  ? (conn: Connection.Connection, sql: string) => conn.execute(sql, [], undefined)
197
280
  : (conn: Connection.Connection, sql: string) => conn.executeUnprepared(sql, [], undefined)
281
+ const isTransaction = options.isTransaction
282
+ const cleanup = isTransaction
283
+ ? (conn: Connection.Connection, sql: string) => isTransaction(conn) ? control(conn, sql) : Effect.void
284
+ : control
198
285
  const withTransaction = makeWithTransaction({
199
286
  transactionService,
200
287
  spanAttributes: options.spanAttributes,
201
- acquireConnection: Effect.flatMap(
202
- Scope.make(),
203
- (scope) =>
204
- Scope.provide(transactionAcquirer!, scope).pipe(
205
- Effect.onError((cause) => Scope.close(scope, Exit.failCause(cause))),
206
- Effect.map((conn) => [scope, conn] as const)
207
- )
208
- ),
209
- begin: (conn) => control(conn, beginTransaction),
288
+ acquireConnection: (restore) => restore(transactionAcquirer!),
289
+ // Unlike the client's own, a provided statement isn't fixed, so it isn't prepared.
290
+ begin: (conn, statement) =>
291
+ statement === undefined ? control(conn, beginTransaction) : conn.executeUnprepared(statement, [], undefined),
210
292
  savepoint: (conn, id) => control(conn, savepoint(`effect_sql_${id}`)),
211
293
  releaseSavepoint: releaseSavepoint
212
- ? (conn, id) => control(conn, releaseSavepoint(`effect_sql_${id}`))
294
+ ? (conn, id) => cleanup(conn, releaseSavepoint(`effect_sql_${id}`))
213
295
  : undefined,
214
296
  commit: typeof commit === "string" ? (conn) => control(conn, commit) : commit,
215
297
  onCommitFailure: options.onCommitFailure,
216
- rollback: (conn) => control(conn, rollback),
217
- rollbackSavepoint: (conn, id) => control(conn, rollbackSavepoint(`effect_sql_${id}`))
298
+ rollback: (conn) => cleanup(conn, rollback),
299
+ rollbackSavepoint: (conn, id) => cleanup(conn, rollbackSavepoint(`effect_sql_${id}`))
218
300
  })
219
301
 
302
+ const afterCommit = makeAfterCommit(transactionService)
303
+
220
304
  const reactivity = yield* Reactivity
221
305
  // A statement inside a transaction has to run on that transaction's
222
306
  // connection, so borrowing is only for statements that reach the pool.
@@ -236,7 +320,9 @@ export const make = Effect.fnUntraced(function*(options: SqlClient.MakeOptions)
236
320
  safe: undefined as any,
237
321
  withTransaction,
238
322
  transactionService,
323
+ afterCommit,
239
324
  reserve: transactionAcquirer,
325
+ driver: options.driver,
240
326
  withoutTransforms(): any {
241
327
  if (options.transformRows === undefined) {
242
328
  return this
@@ -310,6 +396,7 @@ export const makeSqliteAcquirers = <C extends Connection.Connection>(options: {
310
396
  readonly borrower: Connection.Borrower
311
397
  readonly transactionAcquirer: Effect.Effect<C, SqlError, Scope.Scope>
312
398
  readonly onCommitFailure: (conn: Connection.Connection) => Effect.Effect<void, SqlError>
399
+ readonly isTransaction: ((conn: Connection.Connection) => boolean) | undefined
313
400
  } => {
314
401
  const { isTransaction, semaphore } = options
315
402
  let poisoned: SqlError | undefined
@@ -355,7 +442,8 @@ export const makeSqliteAcquirers = <C extends Connection.Connection>(options: {
355
442
  acquirer: lease,
356
443
  borrower: (f) => semaphore.withPermit(Effect.flatMap(available, f)),
357
444
  transactionAcquirer: lease,
358
- onCommitFailure: (conn) => Effect.tapCause(rollback(conn as C), (cause) => Effect.sync(() => poison(cause)))
445
+ onCommitFailure: (conn) => Effect.tapCause(rollback(conn as C), (cause) => Effect.sync(() => poison(cause))),
446
+ isTransaction: isTransaction && ((conn) => isTransaction(conn as C))
359
447
  }
360
448
  }
361
449
 
@@ -381,6 +469,56 @@ const failuresToDefects = <E>(cause: Cause.Cause<E>): Cause.Cause<never> =>
381
469
  : reason
382
470
  ))
383
471
 
472
+ /**
473
+ * Callbacks registered with `afterCommit` in one transaction level. A
474
+ * committed savepoint hands its callbacks to its parent, and the outermost
475
+ * level runs them after it commits.
476
+ */
477
+ interface AfterCommitBuffer {
478
+ readonly callbacks: Array<Effect.Effect<void>>
479
+ readonly parent: AfterCommitBuffer | undefined
480
+ open: boolean
481
+ }
482
+
483
+ /**
484
+ * Keyed by the transaction service value of each level, so removing the
485
+ * transaction service also hides its buffer, and a transaction that
486
+ * `makeWithTransaction` didn't start has none.
487
+ */
488
+ const afterCommitBuffers = new WeakMap<object, AfterCommitBuffer>()
489
+
490
+ const runAfterCommit = <R>(effect: Effect.Effect<void, never, R>): Effect.Effect<void, never, R> =>
491
+ Effect.catchCause(effect, (cause) =>
492
+ Effect.withFiber((fiber) => {
493
+ const unhandledLogLevel = fiber.getRef(UnhandledLogLevel)
494
+ if (unhandledLogLevel) {
495
+ return Effect.logWithLevel(unhandledLogLevel)("Unhandled error in SqlClient.afterCommit callback", cause)
496
+ }
497
+ return Effect.void
498
+ }))
499
+
500
+ const makeAfterCommit =
501
+ (transactionService: Context.Key<any, any>) =>
502
+ <R>(effect: Effect.Effect<void, never, R>): Effect.Effect<void, never, R> =>
503
+ Effect.withFiber((fiber) => {
504
+ const transaction = Context.getOrUndefined(fiber.context, transactionService)
505
+ const buffer = transaction && afterCommitBuffers.get(transaction)
506
+ // Outside a transaction, or in one that doesn't buffer callbacks.
507
+ if (buffer === undefined) {
508
+ return runAfterCommit(effect)
509
+ }
510
+ for (let current: AfterCommitBuffer | undefined = buffer; current !== undefined; current = current.parent) {
511
+ if (!current.open) {
512
+ return Effect.die(new Error("SqlClient.afterCommit: the transaction has already ended"))
513
+ }
514
+ }
515
+ // Runs later with the services in scope now, without the transaction.
516
+ buffer.callbacks.push(
517
+ Effect.provideContext(effect, Context.omit(transactionService)(fiber.context) as Context.Context<R>)
518
+ )
519
+ return Effect.void
520
+ })
521
+
384
522
  /**
385
523
  * Builds a transaction wrapper that begins top-level transactions, uses
386
524
  * savepoints for nested transactions, commits on success, and rolls back on
@@ -394,8 +532,22 @@ const failuresToDefects = <E>(cause: Cause.Cause<E>): Cause.Cause<never> =>
394
532
  export const makeWithTransaction = <I, S>(options: {
395
533
  readonly transactionService: Context.Key<I, readonly [conn: S, counter: number]>
396
534
  readonly spanAttributes: ReadonlyArray<readonly [string, unknown]>
397
- readonly acquireConnection: Effect.Effect<readonly [Scope.Closeable | undefined, S], SqlError>
398
- readonly begin: (conn: NoInfer<S>) => Effect.Effect<void, SqlError>
535
+ /**
536
+ * Acquires the connection for a top-level transaction. Runs under the
537
+ * transaction's uninterruptible mask; wrap the wait for a connection in
538
+ * `restore` so a queued transaction can be interrupted, and register
539
+ * releases on the provided scope. The scope closes with the transaction, or
540
+ * immediately when acquisition fails or is interrupted.
541
+ */
542
+ readonly acquireConnection: (
543
+ restore: <XA, XE, XR>(effect: Effect.Effect<XA, XE, XR>) => Effect.Effect<XA, XE, XR>
544
+ ) => Effect.Effect<S, SqlError, Scope.Scope>
545
+ /**
546
+ * Starts a top-level transaction. `statement` is the `BeginTransaction`
547
+ * provided to the transaction, if any; a driver that doesn't start
548
+ * transactions with a SQL statement ignores it.
549
+ */
550
+ readonly begin: (conn: NoInfer<S>, statement: string | undefined) => Effect.Effect<void, SqlError>
399
551
  readonly savepoint: (conn: NoInfer<S>, id: number) => Effect.Effect<void, SqlError>
400
552
  /**
401
553
  * Releases a nested savepoint after success or a successful rollback.
@@ -412,6 +564,12 @@ export const makeWithTransaction = <I, S>(options: {
412
564
  const transactionSemaphore = Context.Service<Semaphore.Semaphore>(
413
565
  `effect/sql/SqlClient/TransactionSemaphore/${transactionSemaphoreIdCounter++}`
414
566
  )
567
+ const afterCommit = makeAfterCommit(options.transactionService)
568
+ const deferInvalidations = (reactivity: Reactivity): Reactivity => {
569
+ const invalidate = (keys: Parameters<Reactivity["invalidate"]>[0]) =>
570
+ afterCommit(Effect.sync(() => reactivity.invalidateUnsafe(keys)))
571
+ return { ...reactivity, invalidate, mutation: (keys, effect) => Effect.tap(effect, invalidate(keys)) }
572
+ }
415
573
  return <R, E, A>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, E | SqlError, R> =>
416
574
  Effect.uninterruptibleMask((restore) =>
417
575
  Effect.useSpan(
@@ -423,24 +581,38 @@ export const makeWithTransaction = <I, S>(options: {
423
581
  span.attribute(key, value)
424
582
  }
425
583
  const services = fiber.context
584
+ const reactivity = Context.getOrUndefined(services, Reactivity)
426
585
  const clock = fiber.getRef(Clock)
427
586
  const connOption = Context.getOption(services, options.transactionService)
428
- const conn = connOption._tag === "Some"
587
+ const conn: Effect.Effect<readonly [Scope.Closeable | undefined, S], SqlError> = connOption._tag === "Some"
429
588
  ? Effect.succeed([undefined, connOption.value[0]] as const)
430
- : options.acquireConnection
589
+ : Effect.flatMap(Scope.make(), (scope) =>
590
+ Scope.provide(options.acquireConnection(restore), scope).pipe(
591
+ Effect.map((conn) => [scope, conn] as const),
592
+ Effect.onError((cause) => Scope.close(scope, Exit.failCause(cause)))
593
+ ))
431
594
  const id = connOption._tag === "Some" ? connOption.value[1] + 1 : 0
595
+ const buffer: AfterCommitBuffer = {
596
+ callbacks: [],
597
+ parent: connOption._tag === "Some" ? afterCommitBuffers.get(connOption.value) : undefined,
598
+ open: true
599
+ }
600
+ let committed = false
432
601
  const transaction = Effect.flatMap(
433
602
  conn,
434
603
  (
435
604
  [scope, conn]
436
605
  ) =>
437
- (id === 0 ? options.begin(conn) : options.savepoint(conn, id)).pipe(
438
- Effect.flatMap(() =>
439
- Effect.onExitPrimitive(
606
+ (id === 0 ? options.begin(conn, fiber.getRef(BeginTransaction)) : options.savepoint(conn, id)).pipe(
607
+ Effect.flatMap(() => {
608
+ const level = [conn, id] as const
609
+ afterCommitBuffers.set(level, buffer)
610
+ return Effect.onExitPrimitive(
440
611
  Effect.provideContext(
441
612
  restore(effect),
442
613
  services.pipe(
443
- Context.add(options.transactionService, [conn, id]),
614
+ Context.add(options.transactionService, level),
615
+ reactivity ? Context.add(Reactivity, deferInvalidations(reactivity)) : identity,
444
616
  Context.add(transactionSemaphore, Semaphore.makeUnsafe(1)),
445
617
  Context.add(Tracer.ParentSpan, span)
446
618
  )
@@ -474,17 +646,34 @@ export const makeWithTransaction = <I, S>(options: {
474
646
  if (id > 0 && options.releaseSavepoint) {
475
647
  effect = Effect.andThen(effect, Effect.orDie(options.releaseSavepoint(conn, id)))
476
648
  }
477
- return Effect.flatMap(effect, () => exit)
649
+ return Effect.flatMap(effect, () => {
650
+ committed = Exit.isSuccess(exit)
651
+ return exit
652
+ })
478
653
  },
479
654
  true
480
655
  )
481
- ),
482
- scope ? (eff) => Effect.onExitPrimitive(eff, (exit) => Scope.close(scope, exit), true) : identity
656
+ }),
657
+ scope
658
+ ? (eff) => Effect.onExitPrimitive(eff, (exit) => Scope.close(scope, exit), true)
659
+ : identity
483
660
  )
484
661
  )
662
+ // Runs once the connection is released, whether or not that succeeded.
663
+ const settled = Effect.onExitPrimitive(transaction, () => {
664
+ buffer.open = false
665
+ if (!committed || buffer.callbacks.length === 0) {
666
+ return undefined
667
+ }
668
+ if (buffer.parent !== undefined) {
669
+ buffer.parent.callbacks.push(...buffer.callbacks)
670
+ return undefined
671
+ }
672
+ return Effect.forEach(buffer.callbacks, runAfterCommit, { discard: true })
673
+ }, true)
485
674
  return id === 0
486
- ? transaction
487
- : Context.getUnsafe(services, transactionSemaphore).withPermit(transaction)
675
+ ? settled
676
+ : Context.getUnsafe(services, transactionSemaphore).withPermit(settled)
488
677
  })
489
678
  )
490
679
  )
@@ -544,3 +733,51 @@ export const TransactionConnection = (
544
733
  export const SafeIntegers = Context.Reference<boolean>("effect/sql/SqlClient/SafeIntegers", {
545
734
  defaultValue: () => false
546
735
  })
736
+
737
+ /**
738
+ * Context reference holding the statement that starts a top-level
739
+ * transaction in place of the client's `BEGIN`; defaults to `undefined`, which
740
+ * keeps the client's.
741
+ *
742
+ * **When to use**
743
+ *
744
+ * Use when one transaction needs its own isolation level or access mode, as
745
+ * in `BEGIN ISOLATION LEVEL SERIALIZABLE` on PostgreSQL, rather than following
746
+ * the client's `BEGIN` with a `SET TRANSACTION`, which costs another round
747
+ * trip.
748
+ *
749
+ * **Details**
750
+ *
751
+ * The statement runs unprepared. Nested transactions ignore it and keep their
752
+ * savepoints.
753
+ *
754
+ * **Gotchas**
755
+ *
756
+ * It applies to every top-level transaction started while it is provided,
757
+ * including in forked fibers, so provide it around the single
758
+ * `withTransaction` it is meant for. `@effect/sql-libsql`, `@effect/sql-mssql`
759
+ * and `@effect/sql-sqlite-do` don't start transactions with a SQL statement
760
+ * and ignore it. The statement is sent as raw SQL, so never build it from
761
+ * untrusted input.
762
+ *
763
+ * **Example** (Starting a serializable transaction)
764
+ *
765
+ * ```ts
766
+ * import { Effect } from "effect"
767
+ * import { SqlClient } from "effect/sql"
768
+ *
769
+ * const program = Effect.gen(function*() {
770
+ * const sql = yield* SqlClient.SqlClient
771
+ * return yield* sql.withTransaction(sql`SELECT 1`).pipe(
772
+ * Effect.provideService(SqlClient.BeginTransaction, "BEGIN ISOLATION LEVEL SERIALIZABLE")
773
+ * )
774
+ * })
775
+ * ```
776
+ *
777
+ * @stability unstable
778
+ * @category services
779
+ * @since 4.0.6
780
+ */
781
+ export const BeginTransaction = Context.Reference<string | undefined>("effect/sql/SqlClient/BeginTransaction", {
782
+ defaultValue: () => undefined
783
+ })
@@ -8,6 +8,15 @@
8
8
  * grouped, id-based, and side-effect-only resolver constructors, and keeps
9
9
  * batches separated by the active SQL transaction connection.
10
10
  *
11
+ * Only the transaction connection separates batches. Other differences in
12
+ * caller services do not: `execute` and result decoding are provided with the
13
+ * first entry's context, while request encoding uses each entry's own context.
14
+ * In particular, callers outside a transaction can share one batch even when
15
+ * they provide different tenant or authorization services. Do not rely on
16
+ * per-caller services to isolate such SQL operations; use separate resolver
17
+ * instances for different tenants or authorization settings, or include those
18
+ * values in the request payload and handle them explicitly in `execute`.
19
+ *
11
20
  * @stability unstable
12
21
  * @since 4.0.0
13
22
  */
@@ -115,7 +115,9 @@ export const CurrentTransformer = Context.Reference<Transformer | undefined>("ef
115
115
 
116
116
  /**
117
117
  * Parents driver spans under the statement span for every client in the current scope,
118
- * including acquisition and stream pulls. Defaults to `false`; ignored when tracing is disabled.
118
+ * including acquisition and stream pulls, and records how long each statement
119
+ * waited for a connection as `db.client.connection.wait_time_ms`. Defaults to
120
+ * `false`; ignored when tracing is disabled.
119
121
  *
120
122
  * @stability unstable
121
123
  * @category services
@@ -1328,6 +1330,7 @@ export const spanName = (spanAttributes: ReadonlyArray<readonly [string, unknown
1328
1330
  // internal
1329
1331
 
1330
1332
  const ATTR_DB_QUERY_TEXT = "db.query.text"
1333
+ const ATTR_DB_CLIENT_CONNECTION_WAIT_TIME = "db.client.connection.wait_time_ms"
1331
1334
  const ATTR_SQL_METHOD = "effect.sql.method"
1332
1335
 
1333
1336
  // the last value wins, matching the order the attributes are applied to spans
@@ -1435,12 +1438,19 @@ const StatementProto: Omit<
1435
1438
  }
1436
1439
  span.attribute(ATTR_SQL_METHOD, operation)
1437
1440
  span.attribute(ATTR_DB_QUERY_TEXT, sql)
1441
+ const propagate = fiber.cache.tracerEnabled && fiber.getRef(SpanPropagationEnabled)
1442
+ const clock = propagate ? waitClock(fiber) : undefined
1443
+ const run = clock === undefined
1444
+ ? (connection: Connection) => f(connection, sql, params)
1445
+ : (connection: Connection) =>
1446
+ Effect.suspend(() => {
1447
+ recordConnectionWait(span, clock)
1448
+ return f(connection, sql, params)
1449
+ })
1438
1450
  const execute = this.borrower === undefined
1439
- ? Effect.scoped(Effect.flatMap(this.acquirer, (_) => f(_, sql, params)))
1440
- : this.borrower((connection: Connection) => f(connection, sql, params))
1441
- return fiber.cache.tracerEnabled && fiber.getRef(SpanPropagationEnabled)
1442
- ? Effect.provideService(execute, Tracer.ParentSpan, span)
1443
- : execute
1451
+ ? Effect.scoped(Effect.flatMap(this.acquirer, run))
1452
+ : this.borrower(run)
1453
+ return propagate ? Effect.provideService(execute, Tracer.ParentSpan, span) : execute
1444
1454
  })
1445
1455
  },
1446
1456
 
@@ -1472,8 +1482,13 @@ const StatementProto: Omit<
1472
1482
  }
1473
1483
  span.attribute(ATTR_SQL_METHOD, "executeStream")
1474
1484
  span.attribute(ATTR_DB_QUERY_TEXT, sql)
1475
- const acquire = Effect.map(self.acquirer, (_) => _.executeStream(sql, params, self.transformRows))
1476
- return fiber.cache.tracerEnabled && fiber.getRef(SpanPropagationEnabled)
1485
+ const propagate = fiber.cache.tracerEnabled && fiber.getRef(SpanPropagationEnabled)
1486
+ const clock = propagate ? waitClock(fiber) : undefined
1487
+ const acquire = Effect.map(self.acquirer, (connection) => {
1488
+ if (clock !== undefined) recordConnectionWait(span, clock)
1489
+ return connection.executeStream(sql, params, self.transformRows)
1490
+ })
1491
+ return propagate
1477
1492
  ? Effect.succeed(Stream.provideService(Stream.unwrap(acquire), Tracer.ParentSpan, span))
1478
1493
  : acquire
1479
1494
  })
@@ -1540,6 +1555,18 @@ const StatementProto: Omit<
1540
1555
  }
1541
1556
  }
1542
1557
 
1558
+ // Without span timing, the span has no start time to measure from.
1559
+ const waitClock = (fiber: Fiber.Fiber<unknown, unknown>): Clock | undefined =>
1560
+ fiber.getRef(TracerTimingEnabled) ? fiber.getRef(Clock) : undefined
1561
+
1562
+ // Measured from the statement span's start to the connection hand-off, so it
1563
+ // also covers compiling the statement and any `CurrentTransformer` run first.
1564
+ const recordConnectionWait = (span: Tracer.Span, clock: Clock): void =>
1565
+ span.attribute(
1566
+ ATTR_DB_CLIENT_CONNECTION_WAIT_TIME,
1567
+ Number(clock.currentTimeNanosUnsafe() - span.status.startTime) / 1e6
1568
+ )
1569
+
1543
1570
  const withStatement = <A, X, E, R>(
1544
1571
  self: StatementImpl<A>,
1545
1572
  span: Tracer.Span,
@@ -13,6 +13,7 @@
13
13
  */
14
14
  import * as Arr from "../Array.ts"
15
15
  import * as Clock from "../Clock.ts"
16
+ import * as Console from "../Console.ts"
16
17
  import * as Context from "../Context.ts"
17
18
  import * as Data from "../Data.ts"
18
19
  import * as Duration from "../Duration.ts"
@@ -286,6 +287,7 @@ const makeWithScheduler = Effect.fnUntraced(function*(
286
287
  }> = []
287
288
  const currentClock = yield* Clock.clockWith(Effect.succeed)
288
289
  const liveClock = liveClocks.get(currentClock) ?? currentClock
290
+ const liveConsole = yield* Console.Console
289
291
  const warningSemaphore = yield* Semaphore.make(1)
290
292
  const parentScheduler = yield* Scheduler.Scheduler
291
293
 
@@ -322,6 +324,7 @@ const makeWithScheduler = Effect.fnUntraced(function*(
322
324
  Effect.suspend(() => {
323
325
  if (warningState._tag === "Start") {
324
326
  return Effect.logWarning(warningMessage).pipe(
327
+ Effect.provideService(Console.Console, liveConsole),
325
328
  Effect.delay(config.warningDelay),
326
329
  withLive,
327
330
  Effect.forkChild,
@@ -447,7 +450,7 @@ const makeWithScheduler = Effect.fnUntraced(function*(
447
450
  }).pipe(
448
451
  Effect.timeoutOrElse({
449
452
  duration: config.warningDelay,
450
- orElse: () => Effect.logWarning(busyWarningMessage)
453
+ orElse: () => Effect.provideService(Effect.logWarning(busyWarningMessage), Console.Console, liveConsole)
451
454
  }),
452
455
  withLive,
453
456
  Effect.andThen(Effect.yieldNow)
@@ -15,7 +15,6 @@
15
15
  * @since 4.0.0
16
16
  */
17
17
  import * as assert from "node:assert"
18
- import { isDeepStrictEqual } from "node:util"
19
18
  import * as Arbitrary from "../Arbitrary.ts"
20
19
  import * as Cause from "../Cause.ts"
21
20
  import type * as Context from "../Context.ts"
@@ -242,7 +241,7 @@ export class Asserts<S extends Schema.Constraint> {
242
241
  }
243
242
  }
244
243
  /**
245
- * Runs a property-based test that encodes arbitrary values and then decodes them, asserting the decoded value equals the original.
244
+ * Runs a property-based test that encodes arbitrary values and then decodes them, asserting the decoded value is equivalent to the original.
246
245
  *
247
246
  * **When to use**
248
247
  *
@@ -254,6 +253,9 @@ export class Asserts<S extends Schema.Constraint> {
254
253
  * The native Schema arbitrary generates values matching the schema's `Type`. The assertion fails with the minimized
255
254
  * shrunk input and replay token if any generated value does not round-trip.
256
255
  *
256
+ * Uses {@link Schema.toEquivalence}, including custom equivalence annotations,
257
+ * to compare each decoded value with the original.
258
+ *
257
259
  * **Example** (Verifying round trips)
258
260
  *
259
261
  * ```ts import.meta.vitest
@@ -284,6 +286,9 @@ export class Asserts<S extends Schema.Constraint> {
284
286
  *
285
287
  * **Details**
286
288
  *
289
+ * Uses {@link Schema.toEquivalence}, including custom equivalence annotations,
290
+ * to compare each decoded value with the original.
291
+ *
287
292
  * Assertion mismatches are defects containing the shrunk input and replay token.
288
293
  * Schema defects and interruption propagate without becoming assertion failures.
289
294
  *
@@ -310,6 +315,7 @@ export class Asserts<S extends Schema.Constraint> {
310
315
  return Effect.suspend(() => {
311
316
  const decodeUnknownEffect = SchemaParser.decodeUnknownEffect(this.schema)
312
317
  const encodeEffect = SchemaParser.encodeEffect(this.schema)
318
+ const equivalence = Schema.toEquivalence(this.schema as unknown as Schema.Schema<S["Type"]>)
313
319
  const arbitrary = Arbitrary.schema(this.schema)
314
320
  return Arbitrary.checkEffect(
315
321
  arbitrary,
@@ -317,7 +323,7 @@ export class Asserts<S extends Schema.Constraint> {
317
323
  Effect.suspend(() => encodeEffect(value)).pipe(
318
324
  Effect.flatMapEager((encoded) => decodeUnknownEffect(encoded)),
319
325
  schemaResult,
320
- Effect.mapEager((result) => isDeepStrictEqual(result, Result.succeed(value)))
326
+ Effect.mapEager((result) => Result.isSuccess(result) && equivalence(result.success, value))
321
327
  ),
322
328
  options
323
329
  ).pipe(Effect.mapEager(assertPropertyPassed))