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
@@ -35,6 +35,7 @@ import * as HttpIncomingMessage from "./HttpIncomingMessage.ts"
35
35
  import { hasBody, type HttpMethod } from "./HttpMethod.ts"
36
36
  import { HttpServerError, type RequestError, RequestParseError } from "./HttpServerError.ts"
37
37
  import * as bodyInternal from "./internal/httpBody.ts"
38
+ import * as lazyStream from "./internal/lazyStream.ts"
38
39
  import * as Multipart from "./Multipart.ts"
39
40
  import * as UrlParams from "./UrlParams.ts"
40
41
 
@@ -72,8 +73,11 @@ export const TypeId = "~effect/http/HttpServerRequest"
72
73
  * **Details**
73
74
  *
74
75
  * It extends `HttpIncomingMessage` with request metadata, parsed cookies,
75
- * multipart accessors, WebSocket upgrade support, and a `modify` method for
76
- * creating adjusted request views.
76
+ * multipart accessors, connection upgrades, and a `modify` method for
77
+ * creating adjusted request views. `upgrade` completes a WebSocket handshake
78
+ * for `Upgrade: websocket`. Platforms that can hand over the connection, such
79
+ * as Node, answer other protocols with `101 Switching Protocols` and expose
80
+ * the raw connection.
77
81
  *
78
82
  * @stability unstable
79
83
  * @category models
@@ -96,11 +100,26 @@ export interface HttpServerRequest extends HttpIncomingMessage.HttpIncomingMessa
96
100
 
97
101
  readonly upgrade: Effect.Effect<Socket.Socket, HttpServerError>
98
102
 
103
+ /**
104
+ * Address of the directly connected peer. Trusted proxy middleware replaces
105
+ * `remoteAddress` with the forwarded client address and keeps the previous
106
+ * value here; otherwise it equals `remoteAddress`.
107
+ */
108
+ readonly peerAddress: Option.Option<string>
109
+
110
+ /**
111
+ * Scheme validated by trusted proxy middleware. `toURL` prefers it over the
112
+ * scheme of the transport connection.
113
+ */
114
+ readonly protocol: "http" | "https" | undefined
115
+
99
116
  readonly modify: (
100
117
  options: {
101
118
  readonly url?: string
102
119
  readonly headers?: Headers.Headers
103
120
  readonly remoteAddress?: Option.Option<string>
121
+ readonly peerAddress?: Option.Option<string>
122
+ readonly protocol?: "http" | "https"
104
123
  }
105
124
  ) => HttpServerRequest
106
125
  }
@@ -493,12 +512,16 @@ class ServerRequestImpl extends Inspectable.Class implements HttpServerRequest {
493
512
  readonly url: string
494
513
  public headersOverride?: Headers.Headers | undefined
495
514
  private remoteAddressOverride?: Option.Option<string> | undefined
515
+ private peerAddressOverride?: Option.Option<string> | undefined
516
+ readonly protocol: "http" | "https" | undefined
496
517
 
497
518
  constructor(
498
519
  source: Request,
499
520
  url: string,
500
521
  headersOverride?: Headers.Headers,
501
- remoteAddressOverride?: Option.Option<string>
522
+ remoteAddressOverride?: Option.Option<string>,
523
+ peerAddressOverride?: Option.Option<string>,
524
+ protocol?: "http" | "https"
502
525
  ) {
503
526
  super()
504
527
  this[TypeId] = TypeId
@@ -507,6 +530,8 @@ class ServerRequestImpl extends Inspectable.Class implements HttpServerRequest {
507
530
  this.url = url
508
531
  this.headersOverride = headersOverride
509
532
  this.remoteAddressOverride = remoteAddressOverride
533
+ this.peerAddressOverride = peerAddressOverride
534
+ this.protocol = protocol
510
535
  }
511
536
  toJSON(): unknown {
512
537
  return HttpIncomingMessage.inspect(this, {
@@ -520,13 +545,17 @@ class ServerRequestImpl extends Inspectable.Class implements HttpServerRequest {
520
545
  readonly url?: string | undefined
521
546
  readonly headers?: Headers.Headers | undefined
522
547
  readonly remoteAddress?: Option.Option<string> | undefined
548
+ readonly peerAddress?: Option.Option<string> | undefined
549
+ readonly protocol?: "http" | "https" | undefined
523
550
  }
524
551
  ) {
525
552
  return new ServerRequestImpl(
526
553
  this.source,
527
554
  options.url ?? this.url,
528
555
  options.headers ?? this.headersOverride,
529
- "remoteAddress" in options ? options.remoteAddress : this.remoteAddressOverride
556
+ "remoteAddress" in options ? options.remoteAddress : this.remoteAddressOverride,
557
+ options.peerAddress ?? this.peerAddressOverride,
558
+ options.protocol ?? this.protocol
530
559
  )
531
560
  }
532
561
  get method(): HttpMethod {
@@ -538,6 +567,9 @@ class ServerRequestImpl extends Inspectable.Class implements HttpServerRequest {
538
567
  get remoteAddress(): Option.Option<string> {
539
568
  return this.remoteAddressOverride ?? Option.none()
540
569
  }
570
+ get peerAddress(): Option.Option<string> {
571
+ return this.peerAddressOverride ?? this.remoteAddress
572
+ }
541
573
  get headers(): Headers.Headers {
542
574
  this.headersOverride ??= Headers.fromInput(this.source.headers as any)
543
575
  return this.headersOverride
@@ -688,6 +720,8 @@ class ClientRequestImpl extends Inspectable.Class implements HttpServerRequest {
688
720
  public originalUrl: string
689
721
  public headersOverride?: Headers.Headers | undefined
690
722
  private remoteAddressOverride?: Option.Option<string> | undefined
723
+ private peerAddressOverride?: Option.Option<string> | undefined
724
+ readonly protocol: "http" | "https" | undefined
691
725
  private urlOverride?: string | undefined
692
726
 
693
727
  constructor(
@@ -695,7 +729,9 @@ class ClientRequestImpl extends Inspectable.Class implements HttpServerRequest {
695
729
  originalUrl: string,
696
730
  urlOverride?: string,
697
731
  headersOverride?: Headers.Headers,
698
- remoteAddressOverride?: Option.Option<string>
732
+ remoteAddressOverride?: Option.Option<string>,
733
+ peerAddressOverride?: Option.Option<string>,
734
+ protocol?: "http" | "https"
699
735
  ) {
700
736
  super()
701
737
  this[TypeId] = TypeId
@@ -705,6 +741,8 @@ class ClientRequestImpl extends Inspectable.Class implements HttpServerRequest {
705
741
  this.urlOverride = urlOverride
706
742
  this.headersOverride = headersOverride
707
743
  this.remoteAddressOverride = remoteAddressOverride
744
+ this.peerAddressOverride = peerAddressOverride
745
+ this.protocol = protocol
708
746
  }
709
747
 
710
748
  toJSON(): unknown {
@@ -720,6 +758,8 @@ class ClientRequestImpl extends Inspectable.Class implements HttpServerRequest {
720
758
  readonly url?: string | undefined
721
759
  readonly headers?: Headers.Headers | undefined
722
760
  readonly remoteAddress?: Option.Option<string> | undefined
761
+ readonly peerAddress?: Option.Option<string> | undefined
762
+ readonly protocol?: "http" | "https" | undefined
723
763
  }
724
764
  ) {
725
765
  return new ClientRequestImpl(
@@ -727,7 +767,9 @@ class ClientRequestImpl extends Inspectable.Class implements HttpServerRequest {
727
767
  this.originalUrl,
728
768
  options.url ?? this.url,
729
769
  options.headers ?? this.headersOverride,
730
- "remoteAddress" in options ? options.remoteAddress : this.remoteAddressOverride
770
+ "remoteAddress" in options ? options.remoteAddress : this.remoteAddressOverride,
771
+ options.peerAddress ?? this.peerAddressOverride,
772
+ options.protocol ?? this.protocol
731
773
  )
732
774
  }
733
775
 
@@ -743,6 +785,10 @@ class ClientRequestImpl extends Inspectable.Class implements HttpServerRequest {
743
785
  return this.remoteAddressOverride ?? Option.none()
744
786
  }
745
787
 
788
+ get peerAddress(): Option.Option<string> {
789
+ return this.peerAddressOverride ?? this.remoteAddress
790
+ }
791
+
746
792
  get headers(): Headers.Headers {
747
793
  return this.headersOverride ??= this.source.headers
748
794
  }
@@ -1039,9 +1085,13 @@ const textDecoder = new TextDecoder()
1039
1085
  *
1040
1086
  * **Details**
1041
1087
  *
1042
- * The host comes from the `host` header, defaulting to `localhost`, and the
1043
- * protocol is `https` only when `x-forwarded-proto` is `https`; invalid URLs
1044
- * return `Option.none`.
1088
+ * Uses `host` (defaulting to `localhost`) and the request `protocol` set by
1089
+ * trusted proxy middleware. Otherwise, infers HTTPS from a case-insensitive
1090
+ * `https:` prefix in `originalUrl`, defaulting to HTTP. Forwarding headers such
1091
+ * as `x-forwarded-proto` are never read directly; use
1092
+ * `HttpMiddleware.xForwardedHeaders` behind a TLS-terminating proxy. An
1093
+ * absolute `url` keeps its own protocol and host. Invalid URLs return
1094
+ * `Option.none`.
1045
1095
  *
1046
1096
  * @stability unstable
1047
1097
  * @category converting
@@ -1049,9 +1099,10 @@ const textDecoder = new TextDecoder()
1049
1099
  */
1050
1100
  export const toURL = (self: HttpServerRequest): Option.Option<URL> => {
1051
1101
  const host = self.headers.host ?? "localhost"
1052
- const protocol = self.headers["x-forwarded-proto"] === "https" ? "https" : "http"
1102
+ const protocol = self.protocol ?? (/^https:/i.test(self.originalUrl) ? "https" : "http")
1053
1103
  try {
1054
- return Option.some(new URL(self.url, `${protocol}://${host}`))
1104
+ // Prefix paths with `.` so leading `//` cannot replace the host.
1105
+ return Option.some(new URL(self.url.startsWith("/") ? `.${self.url}` : self.url, `${protocol}://${host}`))
1055
1106
  } catch {
1056
1107
  return Option.none()
1057
1108
  }
@@ -1094,7 +1145,15 @@ export const toWebResult = (self: HttpServerRequest, options?: {
1094
1145
  requestInit.signal = options.signal
1095
1146
  }
1096
1147
  if (hasBody(self.method)) {
1097
- requestInit.body = Stream.toReadableStreamWith(self.stream, options?.context ?? Context.empty())
1148
+ // Opening on the first pull with a zero high-water mark reads the body only
1149
+ // when the Web body is read, so converting a request leaves it readable.
1150
+ requestInit.body = Stream.toReadableStreamWith(
1151
+ lazyStream.openOnFirstPull(self.stream),
1152
+ options?.context ?? Context.empty(),
1153
+ {
1154
+ strategy: { highWaterMark: 0 }
1155
+ }
1156
+ )
1098
1157
  ;(requestInit as any).duplex = "half"
1099
1158
  }
1100
1159
  return Result.succeed(new Request(url.value, requestInit))
@@ -25,6 +25,7 @@ import { hasProperty } from "../Predicate.ts"
25
25
  import { redact } from "../Redactable.ts"
26
26
  import type * as Schema from "../Schema.ts"
27
27
  import type { ParseOptions } from "../SchemaAST.ts"
28
+ import type * as Socket from "../socket/Socket.ts"
28
29
  import * as Stream from "../Stream.ts"
29
30
  import type { Mutable } from "../Types.ts"
30
31
  import * as Cookies from "./Cookies.ts"
@@ -76,6 +77,9 @@ export interface Options {
76
77
  readonly headers?: Headers.Input | undefined
77
78
  readonly cookies?: Cookies.Cookies | undefined
78
79
  readonly contentType?: string | undefined
80
+ /**
81
+ * Sent as `content-length`, so it must equal the body's byte length.
82
+ */
79
83
  readonly contentLength?: number | undefined
80
84
  }
81
85
 
@@ -1346,6 +1350,9 @@ export const setStatus: {
1346
1350
  export const omitsBody = (response: HttpServerResponse, withoutBody = false): boolean =>
1347
1351
  withoutBody || response.status === 204 || response.status === 205 || response.status === 304
1348
1352
 
1353
+ // HEAD and 304 retain the representation length; 204 and 205 omit it.
1354
+ const omitsContentLength = (status: number): boolean => status === 204 || status === 205
1355
+
1349
1356
  const mergeHeaders = (target: globalThis.Headers, headers: globalThis.Headers): globalThis.Headers => {
1350
1357
  for (const [key, value] of headers as any) {
1351
1358
  if (key === "set-cookie") {
@@ -1366,15 +1373,15 @@ const mergeHeaders = (target: globalThis.Headers, headers: globalThis.Headers):
1366
1373
  * the supplied context, and are interrupted when `signal` aborts.
1367
1374
  *
1368
1375
  * Bodies are omitted for statuses 204, 205, and 304, or when `withoutBody` is true
1369
- * (for example, for HEAD responses). Omitted raw `ReadableStream` bodies are
1370
- * cancelled without awaiting completion, and cancellation errors are ignored.
1376
+ * (for example, for HEAD responses). Statuses 204 and 205 also omit
1377
+ * `content-length`. Omitted raw `ReadableStream` bodies are cancelled without
1378
+ * awaiting completion, and cancellation errors are ignored.
1371
1379
  *
1372
- * A raw `Response` is returned as-is when there are no outer headers or cookies
1373
- * to merge. Otherwise, they are merged into a copy without modifying the raw
1374
- * response: outer headers replace native ones, and cookies are appended. When
1375
- * its body is omitted, the bodyless `Response` keeps those merged
1376
- * headers and uses the outer status for 204, 205 and 304, or the raw `Response`
1377
- * status otherwise.
1380
+ * A raw `Response` is returned as-is unless its body or `content-length` must
1381
+ * be omitted, or outer headers or cookies must be merged. Copies leave the
1382
+ * original unchanged: outer headers replace native ones, and cookies append.
1383
+ * Bodyless copies use the outer status for 204, 205 and 304; otherwise they keep
1384
+ * the raw status.
1378
1385
  *
1379
1386
  * @stability unstable
1380
1387
  * @category converting
@@ -1400,27 +1407,28 @@ export const toWeb = (
1400
1407
  const withoutBody = outerOmitsBody || options?.withoutBody === true
1401
1408
  if (body._tag === "Raw" && body.body instanceof Response) {
1402
1409
  const raw = body.body
1403
- if (!withoutBody) {
1404
- if (headers.keys().next().done) {
1405
- return raw
1406
- }
1407
- const copy = new Response(raw.body, raw)
1408
- mergeHeaders(copy.headers, headers)
1409
- return copy
1410
- }
1411
- // A bodyless outer status is what the caller chose to send; otherwise the
1412
- // body is only omitted for HEAD and the raw Response describes the resource.
1410
+ // HEAD preserves the raw status; an explicit bodyless status overrides it.
1413
1411
  const source = outerOmitsBody ? response : raw
1414
- return new Response(undefined, {
1415
- status: source.status,
1416
- statusText: source.statusText as string,
1417
- headers: mergeHeaders(new globalThis.Headers(raw.headers), headers)
1418
- })
1412
+ const omitContentLength = omitsContentLength(source.status)
1413
+ if (!withoutBody && headers.keys().next().done && !(omitContentLength && raw.headers.has("content-length"))) {
1414
+ return raw
1415
+ }
1416
+ const copy = withoutBody
1417
+ ? new Response(undefined, {
1418
+ status: source.status,
1419
+ statusText: source.statusText as string,
1420
+ headers: raw.headers
1421
+ })
1422
+ : new Response(raw.body, raw)
1423
+ mergeHeaders(copy.headers, headers)
1424
+ if (omitContentLength) copy.headers.delete("content-length")
1425
+ return copy
1419
1426
  }
1420
1427
  if (withoutBody) {
1421
1428
  if (body._tag === "Raw" && isReadableStream(body.body)) {
1422
1429
  body.body.cancel().catch(constVoid)
1423
1430
  }
1431
+ if (omitsContentLength(response.status)) headers.delete("content-length")
1424
1432
  return new Response(undefined, {
1425
1433
  status: response.status,
1426
1434
  statusText: response.statusText as string,
@@ -1696,6 +1704,18 @@ class ServerHttpClientResponse extends Inspectable.Class implements HttpClientRe
1696
1704
  return this.formDataResponse ??= new Response((this.response.body as Body.FormData).formData)
1697
1705
  }
1698
1706
 
1707
+ get upgrade(): Effect.Effect<Socket.Socket, HttpClientError.HttpClientError> {
1708
+ return Effect.fail(
1709
+ new HttpClientError.HttpClientError({
1710
+ reason: new HttpClientError.StatusCodeError({
1711
+ request: this.request,
1712
+ response: this,
1713
+ description: "a server response has no connection to hand over"
1714
+ })
1715
+ })
1716
+ )
1717
+ }
1718
+
1699
1719
  pipe() {
1700
1720
  return pipeArguments(this, arguments)
1701
1721
  }
@@ -1804,6 +1824,12 @@ const makeResponse = (options: {
1804
1824
  * `Set-Cookie` headers are parsed into the response cookie collection and removed
1805
1825
  * from the header map. A present Web body is exposed as a stream body.
1806
1826
  *
1827
+ * **Gotchas**
1828
+ *
1829
+ * Preserves `content-length`, which must match the body. When proxying a
1830
+ * compressed response decoded by `fetch`, remove the stale length from a copy
1831
+ * (`new Response(response.body, response)`) before converting it.
1832
+ *
1807
1833
  * @stability unstable
1808
1834
  * @category converting
1809
1835
  * @since 4.0.0
@@ -10,12 +10,15 @@
10
10
  * @stability unstable
11
11
  * @since 4.0.0
12
12
  */
13
+ import * as DateTime from "../DateTime.ts"
13
14
  import * as Effect from "../Effect.ts"
14
15
  import * as FileSystem from "../FileSystem.ts"
15
16
  import * as Layer from "../Layer.ts"
16
17
  import * as Option from "../Option.ts"
17
18
  import * as Path from "../Path.ts"
18
19
  import type { PlatformError } from "../PlatformError.ts"
20
+ import * as Result from "../Result.ts"
21
+ import * as Headers from "./Headers.ts"
19
22
  import * as HttpPlatform from "./HttpPlatform.ts"
20
23
  import * as HttpRouter from "./HttpRouter.ts"
21
24
  import * as HttpServerError from "./HttpServerError.ts"
@@ -207,12 +210,26 @@ export const make: (options: {
207
210
  return serveFile(request, resolvedPath, info.size)
208
211
  }
209
212
  if (info.type === "Directory" && index !== undefined) {
213
+ let originalUrl = request.originalUrl
214
+ if (!originalUrl.startsWith("/")) {
215
+ const url = new URL(originalUrl)
216
+ originalUrl = url.pathname + url.search
217
+ }
218
+ const pathname = stripQueryString(originalUrl)
219
+ if (!pathname.endsWith("/")) {
220
+ // Keep the redirect local even when the path starts with multiple separators.
221
+ const location = pathname.replace(/^\/+/, "/").replace(/\\/g, "%5C")
222
+ return Effect.succeed(HttpServerResponse.redirect(
223
+ `${location}/${originalUrl.slice(pathname.length)}`,
224
+ { status: 301 }
225
+ ))
226
+ }
210
227
  return serveFile(request, path.join(resolvedPath, index))
211
228
  }
212
229
  return Effect.fail(toRouteNotFoundError(request))
213
230
  }
214
- })
215
- })
231
+ });
232
+ });
216
233
  })
217
234
 
218
235
  /**
@@ -446,19 +463,18 @@ const matchesIfNoneMatch = (ifNoneMatch: string, etag: string | undefined): bool
446
463
  return false
447
464
  }
448
465
 
466
+ // An invalid date on either side disables the precondition (RFC 9110 §13.1.3).
449
467
  const isNotModifiedSince = (ifModifiedSince: string, lastModified: string | undefined): boolean => {
450
468
  if (lastModified === undefined) {
451
469
  return false
452
470
  }
453
- const ifModifiedSinceMs = Date.parse(ifModifiedSince)
454
- if (Number.isNaN(ifModifiedSinceMs)) {
455
- return false
456
- }
457
- const lastModifiedMs = Date.parse(lastModified)
458
- if (Number.isNaN(lastModifiedMs)) {
471
+ const ifModifiedSinceDate = Headers.parseHttpDate(ifModifiedSince)
472
+ if (Result.isFailure(ifModifiedSinceDate)) {
459
473
  return false
460
474
  }
461
- return lastModifiedMs <= ifModifiedSinceMs
475
+ const lastModifiedDate = Headers.parseHttpDate(lastModified)
476
+ return Result.isSuccess(lastModifiedDate) &&
477
+ DateTime.toEpochMillis(lastModifiedDate.success) <= DateTime.toEpochMillis(ifModifiedSinceDate.success)
462
478
  }
463
479
 
464
480
  // Only a strong entity-tag can match (RFC 9110 §13.1.5). Weak tags start
@@ -18,6 +18,13 @@
18
18
  const paramRE =
19
19
  /; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u{10ffff}]|\\[\v\u0020-\u{10ffff}])*"|[!#$%&'*+.^\w`|~-]+) */gu
20
20
 
21
+ /**
22
+ * RegExp to match *( ";" disposition-parm ) in RFC 6266 sec 4.1, which allows
23
+ * optional whitespace around separators
24
+ */
25
+ const dispositionParamRE =
26
+ /;[ \t]*([!#$%&'*+.^\w`|~-]+)[ \t]*=[ \t]*("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u{10ffff}]|\\[\v\u0020-\u{10ffff}])*"|[!#$%&'*+.^\w`|~-]+)[ \t]*/gu
27
+
21
28
  /**
22
29
  * RegExp to match quoted-pair in RFC 7230 sec 3.2.6
23
30
  *
@@ -34,14 +41,13 @@ const quotedPairRE = /\\([\v\u0020-\u{10ffff}])/gu
34
41
  * subtype = token
35
42
  */
36
43
  const mediaTypeRE = /^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u
37
- const mediaTypeRENoSlash = /^[!#$%&'*+.^\w|~-]+$/u
44
+ const dispositionTypeRE = /^[!#$%&'*+.^\w|~-]+$/u
38
45
 
39
46
  // default ContentType to prevent repeated object creation
40
47
  const defaultContentType = { value: "", parameters: Object.create(null) }
41
48
 
42
49
  export function parse(
43
- header: string | undefined,
44
- withoutSlash = false
50
+ header: string | undefined
45
51
  ): {
46
52
  readonly value: string
47
53
  readonly parameters: Record<string, string>
@@ -52,9 +58,8 @@ export function parse(
52
58
 
53
59
  let index = header.indexOf(";")
54
60
  const type = index !== -1 ? header.slice(0, index).trim() : header.trim()
55
- const mediaRE = withoutSlash ? mediaTypeRENoSlash : mediaTypeRE
56
61
 
57
- if (mediaRE.test(type) === false) {
62
+ if (mediaTypeRE.test(type) === false) {
58
63
  return defaultContentType
59
64
  }
60
65
 
@@ -87,7 +92,7 @@ export function parse(
87
92
  // remove quotes and escapes
88
93
  value = value.slice(1, value.length - 1)
89
94
 
90
- if (!withoutSlash && quotedPairRE.test(value)) {
95
+ if (quotedPairRE.test(value)) {
91
96
  value = value.replace(quotedPairRE, "$1")
92
97
  }
93
98
  }
@@ -101,3 +106,99 @@ export function parse(
101
106
 
102
107
  return result
103
108
  }
109
+
110
+ // RFC 8187 ext-value: charset "'" [ language ] "'" value-chars
111
+ const extValueRE = /^(utf-8|iso-8859-1)'[a-z0-9-]*'((?:%[0-9a-f]{2}|[!#$&+.^_`|~\w-])*)$/i
112
+ const pctEncodedRE = /%([0-9a-f]{2})/gi
113
+
114
+ /**
115
+ * Decodes an RFC 8187 ext-value, returning `undefined` when it is malformed.
116
+ * ISO-8859-1 is decoded byte by byte because `TextDecoder` treats it as
117
+ * windows-1252.
118
+ */
119
+ function decodeExtValue(value: string): string | undefined {
120
+ const match = extValueRE.exec(value)
121
+ if (match === null) {
122
+ return undefined
123
+ }
124
+ if (match[1].toLowerCase() === "iso-8859-1") {
125
+ return match[2].replace(pctEncodedRE, (_, hex: string) => String.fromCharCode(parseInt(hex, 16)))
126
+ }
127
+ try {
128
+ return decodeURIComponent(match[2])
129
+ } catch {
130
+ return undefined
131
+ }
132
+ }
133
+
134
+ export interface ContentDisposition {
135
+ readonly value: string
136
+ readonly parameters: Record<string, string>
137
+ /** `filename*` decoded per RFC 8187, falling back to `filename` */
138
+ readonly filename: string | undefined
139
+ }
140
+
141
+ // default ContentDisposition to prevent repeated object creation
142
+ const defaultContentDisposition: ContentDisposition = { ...defaultContentType, filename: undefined }
143
+
144
+ /**
145
+ * Parses a Content-Disposition header according to RFC 6266, returning
146
+ * `undefined` when it is malformed, repeats a parameter or carries an
147
+ * undecodable `filename*`.
148
+ *
149
+ * Quoted-pairs are left as-is, so unescaped backslashes in file paths survive.
150
+ */
151
+ export function parseDisposition(
152
+ header: string | ReadonlyArray<string> | undefined
153
+ ): ContentDisposition | undefined {
154
+ if (header === undefined) {
155
+ return defaultContentDisposition
156
+ } else if (typeof header !== "string") {
157
+ return undefined
158
+ }
159
+
160
+ let index = header.indexOf(";")
161
+ const type = index !== -1 ? header.slice(0, index).trim() : header.trim()
162
+
163
+ if (dispositionTypeRE.test(type) === false) {
164
+ return undefined
165
+ }
166
+
167
+ const parameters: Record<string, string> = Object.create(null)
168
+
169
+ if (index !== -1) {
170
+ let match: RegExpExecArray | null
171
+
172
+ dispositionParamRE.lastIndex = index
173
+
174
+ while ((match = dispositionParamRE.exec(header))) {
175
+ if (match.index !== index) {
176
+ return undefined
177
+ }
178
+
179
+ index += match[0].length
180
+ const key = match[1].toLowerCase()
181
+ const value = match[2]
182
+
183
+ if (key in parameters) {
184
+ return undefined
185
+ }
186
+
187
+ parameters[key] = value[0] === "\"" ? value.slice(1, value.length - 1) : value
188
+ }
189
+
190
+ if (index !== header.length) {
191
+ return undefined
192
+ }
193
+ }
194
+
195
+ let filename: string | undefined = parameters.filename
196
+ if ("filename*" in parameters) {
197
+ filename = decodeExtValue(parameters["filename*"])
198
+ if (filename === undefined) {
199
+ return undefined
200
+ }
201
+ }
202
+
203
+ return { value: type.toLowerCase(), parameters, filename }
204
+ }
@@ -1,3 +1,4 @@
1
+ import * as Bytes from "../../../Bytes.ts"
1
2
  import type { Continue, FailureReason, ReturnValue } from "../HeadersParser.ts"
2
3
 
3
4
  const constMaxPairs = 100
@@ -55,13 +56,6 @@ export function make() {
55
56
  return value
56
57
  }
57
58
 
58
- function concatUint8Array(a: Uint8Array, b: Uint8Array): Uint8Array {
59
- const newUint8Array = new Uint8Array(a.length + b.length)
60
- newUint8Array.set(a)
61
- newUint8Array.set(b, a.length)
62
- return newUint8Array
63
- }
64
-
65
59
  function error(reason: FailureReason) {
66
60
  return reset({ _tag: "Failure", reason, headers: state.headers })
67
61
  }
@@ -73,11 +67,8 @@ export function make() {
73
67
  endOffset = state.previousChunk.length
74
68
  previousCursor = endOffset
75
69
 
76
- const newChunk = new Uint8Array(chunk.length + endOffset)
77
- newChunk.set(state.previousChunk)
78
- newChunk.set(chunk, endOffset)
70
+ chunk = Bytes.concat([state.previousChunk, chunk])
79
71
  state.previousChunk = undefined
80
- chunk = newChunk
81
72
  }
82
73
  const end = chunk.length
83
74
 
@@ -182,10 +173,7 @@ export function make() {
182
173
  } else if (state.crlf >= 2) {
183
174
  state.value = state.value === undefined
184
175
  ? chunk.subarray(start, i - state.crlf)
185
- : concatUint8Array(
186
- state.value,
187
- chunk.subarray(start, i - state.crlf)
188
- )
176
+ : Bytes.concat([state.value, chunk.subarray(start, i - state.crlf)])
189
177
  const value = decoder.decode(state.value)
190
178
  if (state.headers[state.key] === undefined) {
191
179
  state.headers[state.key] = value
@@ -229,7 +217,7 @@ export function make() {
229
217
  if (i === end) {
230
218
  state.value = state.value === undefined
231
219
  ? chunk.subarray(start, end)
232
- : concatUint8Array(state.value, chunk.subarray(start, end))
220
+ : Bytes.concat([state.value, chunk.subarray(start, end)])
233
221
  return constContinue
234
222
  }
235
223
  }
@@ -1,3 +1,4 @@
1
+ import * as Bytes from "../../../Bytes.ts"
1
2
  import * as ByteSize from "../../../ByteSize.ts"
2
3
  import type { Config, MultipartError, PartInfo } from "../../MultipartParser.ts"
3
4
  import * as CT from "./contentType.ts"
@@ -117,18 +118,10 @@ export function make({
117
118
  if (state.isFile) {
118
119
  state.onChunk(null)
119
120
  } else {
120
- if (state.fieldChunks.length === 1) {
121
- onField(state.info, state.fieldChunks[0])
122
- } else {
123
- const buf = new Uint8Array(state.fieldSize)
124
- let offset = 0
125
- for (let i = 0; i < state.fieldChunks.length; i++) {
126
- const chunk = state.fieldChunks[i]
127
- buf.set(chunk, offset)
128
- offset += chunk.length
129
- }
130
- onField(state.info, buf)
131
- }
121
+ onField(
122
+ state.info,
123
+ state.fieldChunks.length === 1 ? state.fieldChunks[0] : Bytes.concat(state.fieldChunks)
124
+ )
132
125
  state.fieldSize = 0
133
126
  state.fieldChunks = []
134
127
  }
@@ -167,36 +160,21 @@ export function make({
167
160
  }
168
161
 
169
162
  const contentType = CT.parse(result.headers["content-type"] as string)
170
- const contentDisposition = CT.parse(
171
- result.headers["content-disposition"] as string,
172
- true
173
- )
163
+ const contentDisposition = CT.parseDisposition(result.headers["content-disposition"])
174
164
 
175
165
  if (
176
- "form-data" === contentDisposition.value &&
177
- !("name" in contentDisposition.parameters)
166
+ contentDisposition === undefined ||
167
+ ("form-data" === contentDisposition.value && !("name" in contentDisposition.parameters))
178
168
  ) {
179
169
  skipBody()
180
170
  return onError(errInvalidDisposition)
181
171
  }
182
172
 
183
- let encodedFilename: string | undefined
184
- if ("filename*" in contentDisposition.parameters) {
185
- const parts = contentDisposition.parameters["filename*"].split("''")
186
- if (parts.length === 2) {
187
- try {
188
- encodedFilename = decodeURIComponent(parts[1])
189
- } catch {
190
- encodedFilename = parts[1]
191
- }
192
- }
193
- }
194
-
195
173
  state.info = {
196
174
  name: contentDisposition.parameters.name ?? "",
197
- filename: encodedFilename ?? contentDisposition.parameters.filename,
175
+ filename: contentDisposition.filename,
198
176
  contentType: contentType.value === ""
199
- ? contentDisposition.parameters.filename !== undefined
177
+ ? contentDisposition.filename !== undefined
200
178
  ? "application/octet-stream"
201
179
  : "text/plain"
202
180
  : contentType.value,