effect 4.0.0-beta.103 → 4.0.0-beta.104

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 (523) hide show
  1. package/dist/Cache.js +1 -1
  2. package/dist/Cache.js.map +1 -1
  3. package/dist/Channel.d.ts +1 -1
  4. package/dist/Channel.d.ts.map +1 -1
  5. package/dist/Channel.js.map +1 -1
  6. package/dist/Config.d.ts.map +1 -1
  7. package/dist/Config.js +28 -7
  8. package/dist/Config.js.map +1 -1
  9. package/dist/ConfigProvider.d.ts.map +1 -1
  10. package/dist/ConfigProvider.js +2 -1
  11. package/dist/ConfigProvider.js.map +1 -1
  12. package/dist/Context.d.ts +2 -2
  13. package/dist/Context.d.ts.map +1 -1
  14. package/dist/Context.js.map +1 -1
  15. package/dist/Crypto.d.ts.map +1 -1
  16. package/dist/Crypto.js +13 -5
  17. package/dist/Crypto.js.map +1 -1
  18. package/dist/Duration.d.ts.map +1 -1
  19. package/dist/Duration.js +12 -1
  20. package/dist/Duration.js.map +1 -1
  21. package/dist/Effect.d.ts +132 -14
  22. package/dist/Effect.d.ts.map +1 -1
  23. package/dist/Effect.js +38 -0
  24. package/dist/Effect.js.map +1 -1
  25. package/dist/Equal.d.ts.map +1 -1
  26. package/dist/Equal.js +10 -2
  27. package/dist/Equal.js.map +1 -1
  28. package/dist/ExecutionPlan.d.ts +73 -0
  29. package/dist/ExecutionPlan.d.ts.map +1 -1
  30. package/dist/ExecutionPlan.js +1 -1
  31. package/dist/ExecutionPlan.js.map +1 -1
  32. package/dist/FiberSet.js +1 -1
  33. package/dist/FileSystem.d.ts +2 -2
  34. package/dist/Function.d.ts +4 -3
  35. package/dist/Function.d.ts.map +1 -1
  36. package/dist/Function.js +5 -5
  37. package/dist/Function.js.map +1 -1
  38. package/dist/Iterable.d.ts.map +1 -1
  39. package/dist/Iterable.js +11 -10
  40. package/dist/Iterable.js.map +1 -1
  41. package/dist/Layer.d.ts.map +1 -1
  42. package/dist/Layer.js +7 -5
  43. package/dist/Layer.js.map +1 -1
  44. package/dist/Schedule.d.ts +8 -8
  45. package/dist/Schedule.d.ts.map +1 -1
  46. package/dist/Schedule.js +4 -4
  47. package/dist/Schedule.js.map +1 -1
  48. package/dist/Schema.d.ts +32 -32
  49. package/dist/Schema.d.ts.map +1 -1
  50. package/dist/Schema.js +23 -18
  51. package/dist/Schema.js.map +1 -1
  52. package/dist/SchemaAST.d.ts +3 -3
  53. package/dist/SchemaAST.d.ts.map +1 -1
  54. package/dist/SchemaAST.js +47 -31
  55. package/dist/SchemaAST.js.map +1 -1
  56. package/dist/SchemaParser.d.ts.map +1 -1
  57. package/dist/SchemaParser.js +35 -53
  58. package/dist/SchemaParser.js.map +1 -1
  59. package/dist/ScopedCache.js +1 -1
  60. package/dist/ScopedCache.js.map +1 -1
  61. package/dist/Sink.d.ts +1 -1
  62. package/dist/Sink.d.ts.map +1 -1
  63. package/dist/Stream.d.ts +27 -4
  64. package/dist/Stream.d.ts.map +1 -1
  65. package/dist/Stream.js +27 -2
  66. package/dist/Stream.js.map +1 -1
  67. package/dist/SynchronizedRef.js +1 -1
  68. package/dist/SynchronizedRef.js.map +1 -1
  69. package/dist/Terminal.js +1 -1
  70. package/dist/Terminal.js.map +1 -1
  71. package/dist/Tuple.d.ts +6 -4
  72. package/dist/Tuple.d.ts.map +1 -1
  73. package/dist/Tuple.js.map +1 -1
  74. package/dist/TxReentrantLock.d.ts +0 -56
  75. package/dist/TxReentrantLock.d.ts.map +1 -1
  76. package/dist/TxReentrantLock.js +8 -8
  77. package/dist/TxReentrantLock.js.map +1 -1
  78. package/dist/internal/dateTime.js +1 -1
  79. package/dist/internal/dateTime.js.map +1 -1
  80. package/dist/internal/executionPlan.js +51 -3
  81. package/dist/internal/executionPlan.js.map +1 -1
  82. package/dist/internal/hashMap.js +12 -8
  83. package/dist/internal/hashMap.js.map +1 -1
  84. package/dist/internal/matcher.js +1 -1
  85. package/dist/internal/matcher.js.map +1 -1
  86. package/dist/internal/schedule.js.map +1 -1
  87. package/dist/internal/schema/annotations.js +2 -0
  88. package/dist/internal/schema/annotations.js.map +1 -1
  89. package/dist/internal/schema/toArbitrary.js +1 -1
  90. package/dist/internal/schema/toArbitrary.js.map +1 -1
  91. package/dist/internal/trie.js +13 -3
  92. package/dist/internal/trie.js.map +1 -1
  93. package/dist/testing/TestClock.d.ts.map +1 -1
  94. package/dist/testing/TestClock.js +11 -1
  95. package/dist/testing/TestClock.js.map +1 -1
  96. package/dist/testing/TestSchema.d.ts +1 -1
  97. package/dist/testing/TestSchema.d.ts.map +1 -1
  98. package/dist/unstable/ai/AiError.js +19 -19
  99. package/dist/unstable/ai/AiError.js.map +1 -1
  100. package/dist/unstable/ai/Chat.js +1 -1
  101. package/dist/unstable/ai/Chat.js.map +1 -1
  102. package/dist/unstable/ai/LanguageModel.js +4 -2
  103. package/dist/unstable/ai/LanguageModel.js.map +1 -1
  104. package/dist/unstable/ai/McpSchema.d.ts +132 -132
  105. package/dist/unstable/ai/McpSchema.d.ts.map +1 -1
  106. package/dist/unstable/ai/McpSchema.js +8 -8
  107. package/dist/unstable/ai/McpSchema.js.map +1 -1
  108. package/dist/unstable/ai/McpServer.js +1 -1
  109. package/dist/unstable/ai/McpServer.js.map +1 -1
  110. package/dist/unstable/ai/Prompt.d.ts +15 -3
  111. package/dist/unstable/ai/Prompt.d.ts.map +1 -1
  112. package/dist/unstable/ai/Prompt.js +6 -3
  113. package/dist/unstable/ai/Prompt.js.map +1 -1
  114. package/dist/unstable/cli/CliError.d.ts +3 -3
  115. package/dist/unstable/cli/CliError.js +11 -11
  116. package/dist/unstable/cli/CliError.js.map +1 -1
  117. package/dist/unstable/cli/Command.d.ts +9 -9
  118. package/dist/unstable/cli/Command.d.ts.map +1 -1
  119. package/dist/unstable/cli/Command.js +8 -6
  120. package/dist/unstable/cli/Command.js.map +1 -1
  121. package/dist/unstable/cli/Param.d.ts +7 -5
  122. package/dist/unstable/cli/Param.d.ts.map +1 -1
  123. package/dist/unstable/cli/Param.js +15 -11
  124. package/dist/unstable/cli/Param.js.map +1 -1
  125. package/dist/unstable/cli/Primitive.d.ts.map +1 -1
  126. package/dist/unstable/cli/Primitive.js +31 -24
  127. package/dist/unstable/cli/Primitive.js.map +1 -1
  128. package/dist/unstable/cli/Prompt.d.ts.map +1 -1
  129. package/dist/unstable/cli/Prompt.js +31 -17
  130. package/dist/unstable/cli/Prompt.js.map +1 -1
  131. package/dist/unstable/cli/internal/ansi.js +2 -2
  132. package/dist/unstable/cli/internal/ansi.js.map +1 -1
  133. package/dist/unstable/cli/internal/command.d.ts +2 -2
  134. package/dist/unstable/cli/internal/command.d.ts.map +1 -1
  135. package/dist/unstable/cli/internal/command.js +10 -9
  136. package/dist/unstable/cli/internal/command.js.map +1 -1
  137. package/dist/unstable/cli/internal/completions/bash.js +69 -9
  138. package/dist/unstable/cli/internal/completions/bash.js.map +1 -1
  139. package/dist/unstable/cli/internal/completions/descriptor.js +24 -18
  140. package/dist/unstable/cli/internal/completions/descriptor.js.map +1 -1
  141. package/dist/unstable/cli/internal/completions/fish.js +5 -5
  142. package/dist/unstable/cli/internal/completions/fish.js.map +1 -1
  143. package/dist/unstable/cli/internal/help.d.ts.map +1 -1
  144. package/dist/unstable/cli/internal/help.js +4 -2
  145. package/dist/unstable/cli/internal/help.js.map +1 -1
  146. package/dist/unstable/cli/internal/parser.js +3 -3
  147. package/dist/unstable/cli/internal/parser.js.map +1 -1
  148. package/dist/unstable/cli/internal/wizard.js +2 -2
  149. package/dist/unstable/cli/internal/wizard.js.map +1 -1
  150. package/dist/unstable/cluster/ClusterError.js +7 -7
  151. package/dist/unstable/cluster/ClusterError.js.map +1 -1
  152. package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  153. package/dist/unstable/cluster/ClusterWorkflowEngine.js +1 -1
  154. package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
  155. package/dist/unstable/cluster/MessageStorage.d.ts.map +1 -1
  156. package/dist/unstable/cluster/MessageStorage.js +8 -1
  157. package/dist/unstable/cluster/MessageStorage.js.map +1 -1
  158. package/dist/unstable/cluster/Reply.d.ts +8 -0
  159. package/dist/unstable/cluster/Reply.d.ts.map +1 -1
  160. package/dist/unstable/cluster/Reply.js +12 -0
  161. package/dist/unstable/cluster/Reply.js.map +1 -1
  162. package/dist/unstable/cluster/RunnerServer.d.ts.map +1 -1
  163. package/dist/unstable/cluster/RunnerServer.js +4 -2
  164. package/dist/unstable/cluster/RunnerServer.js.map +1 -1
  165. package/dist/unstable/cluster/RunnerStorage.d.ts +1 -2
  166. package/dist/unstable/cluster/RunnerStorage.d.ts.map +1 -1
  167. package/dist/unstable/cluster/RunnerStorage.js +7 -6
  168. package/dist/unstable/cluster/RunnerStorage.js.map +1 -1
  169. package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
  170. package/dist/unstable/cluster/Sharding.js +22 -4
  171. package/dist/unstable/cluster/Sharding.js.map +1 -1
  172. package/dist/unstable/cluster/internal/entityManager.js +1 -1
  173. package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
  174. package/dist/unstable/cluster/internal/resourceMap.js +2 -2
  175. package/dist/unstable/cluster/internal/resourceMap.js.map +1 -1
  176. package/dist/unstable/cluster/internal/resourceRef.js +17 -0
  177. package/dist/unstable/cluster/internal/resourceRef.js.map +1 -1
  178. package/dist/unstable/devtools/DevToolsClient.d.ts.map +1 -1
  179. package/dist/unstable/devtools/DevToolsClient.js +7 -2
  180. package/dist/unstable/devtools/DevToolsClient.js.map +1 -1
  181. package/dist/unstable/encoding/Ini.d.ts +20 -0
  182. package/dist/unstable/encoding/Ini.d.ts.map +1 -0
  183. package/dist/unstable/encoding/Ini.js +153 -0
  184. package/dist/unstable/encoding/Ini.js.map +1 -0
  185. package/dist/unstable/encoding/Msgpack.d.ts +2 -1
  186. package/dist/unstable/encoding/Msgpack.d.ts.map +1 -1
  187. package/dist/unstable/encoding/Msgpack.js +21 -7
  188. package/dist/unstable/encoding/Msgpack.js.map +1 -1
  189. package/dist/unstable/encoding/Ndjson.d.ts.map +1 -1
  190. package/dist/unstable/encoding/Ndjson.js +7 -1
  191. package/dist/unstable/encoding/Ndjson.js.map +1 -1
  192. package/dist/unstable/encoding/Sse.d.ts.map +1 -1
  193. package/dist/unstable/encoding/Sse.js +14 -23
  194. package/dist/unstable/encoding/Sse.js.map +1 -1
  195. package/dist/unstable/encoding/Toml.d.ts +19 -0
  196. package/dist/unstable/encoding/Toml.d.ts.map +1 -0
  197. package/dist/unstable/encoding/Toml.js +434 -0
  198. package/dist/unstable/encoding/Toml.js.map +1 -0
  199. package/dist/unstable/encoding/Yaml.d.ts +19 -0
  200. package/dist/unstable/encoding/Yaml.d.ts.map +1 -0
  201. package/dist/unstable/encoding/Yaml.js +461 -0
  202. package/dist/unstable/encoding/Yaml.js.map +1 -0
  203. package/dist/unstable/encoding/index.d.ts +12 -0
  204. package/dist/unstable/encoding/index.d.ts.map +1 -1
  205. package/dist/unstable/encoding/index.js +12 -0
  206. package/dist/unstable/encoding/index.js.map +1 -1
  207. package/dist/unstable/eventlog/EventJournal.d.ts +1 -1
  208. package/dist/unstable/eventlog/EventJournal.d.ts.map +1 -1
  209. package/dist/unstable/eventlog/EventJournal.js +13 -5
  210. package/dist/unstable/eventlog/EventJournal.js.map +1 -1
  211. package/dist/unstable/eventlog/EventLogMessage.js +1 -1
  212. package/dist/unstable/eventlog/EventLogMessage.js.map +1 -1
  213. package/dist/unstable/eventlog/EventLogServerUnencrypted.js +1 -1
  214. package/dist/unstable/eventlog/EventLogServerUnencrypted.js.map +1 -1
  215. package/dist/unstable/eventlog/SqlEventJournal.d.ts.map +1 -1
  216. package/dist/unstable/eventlog/SqlEventJournal.js +1 -4
  217. package/dist/unstable/eventlog/SqlEventJournal.js.map +1 -1
  218. package/dist/unstable/http/FindMyWay/internal/queryString.d.ts +11 -0
  219. package/dist/unstable/http/FindMyWay/internal/queryString.d.ts.map +1 -0
  220. package/dist/unstable/http/FindMyWay/internal/queryString.js +259 -0
  221. package/dist/unstable/http/FindMyWay/internal/queryString.js.map +1 -0
  222. package/dist/unstable/http/FindMyWay/internal/router.d.ts +2 -0
  223. package/dist/unstable/http/FindMyWay/internal/router.d.ts.map +1 -0
  224. package/dist/unstable/http/FindMyWay/internal/router.js +665 -0
  225. package/dist/unstable/http/FindMyWay/internal/router.js.map +1 -0
  226. package/dist/unstable/http/FindMyWay.d.ts +33 -8
  227. package/dist/unstable/http/FindMyWay.d.ts.map +1 -1
  228. package/dist/unstable/http/FindMyWay.js +4 -7
  229. package/dist/unstable/http/FindMyWay.js.map +1 -1
  230. package/dist/unstable/http/HttpClientError.js +1 -1
  231. package/dist/unstable/http/HttpClientError.js.map +1 -1
  232. package/dist/unstable/http/HttpClientRequest.d.ts.map +1 -1
  233. package/dist/unstable/http/HttpClientRequest.js +2 -14
  234. package/dist/unstable/http/HttpClientRequest.js.map +1 -1
  235. package/dist/unstable/http/HttpClientResponse.js +1 -16
  236. package/dist/unstable/http/HttpClientResponse.js.map +1 -1
  237. package/dist/unstable/http/HttpPlatform.d.ts.map +1 -1
  238. package/dist/unstable/http/HttpPlatform.js +21 -3
  239. package/dist/unstable/http/HttpPlatform.js.map +1 -1
  240. package/dist/unstable/http/HttpServerRequest.d.ts.map +1 -1
  241. package/dist/unstable/http/HttpServerRequest.js +7 -6
  242. package/dist/unstable/http/HttpServerRequest.js.map +1 -1
  243. package/dist/unstable/http/HttpServerResponse.d.ts.map +1 -1
  244. package/dist/unstable/http/HttpServerResponse.js +8 -6
  245. package/dist/unstable/http/HttpServerResponse.js.map +1 -1
  246. package/dist/unstable/http/Multipart.d.ts +1 -1
  247. package/dist/unstable/http/Multipart.d.ts.map +1 -1
  248. package/dist/unstable/http/Multipart.js +9 -2
  249. package/dist/unstable/http/Multipart.js.map +1 -1
  250. package/dist/unstable/http/MultipartParser/HeadersParser.d.ts +53 -0
  251. package/dist/unstable/http/MultipartParser/HeadersParser.d.ts.map +1 -0
  252. package/dist/unstable/http/MultipartParser/HeadersParser.js +14 -0
  253. package/dist/unstable/http/MultipartParser/HeadersParser.js.map +1 -0
  254. package/dist/unstable/http/MultipartParser/Search.d.ts +11 -0
  255. package/dist/unstable/http/MultipartParser/Search.d.ts.map +1 -0
  256. package/dist/unstable/http/MultipartParser/Search.js +14 -0
  257. package/dist/unstable/http/MultipartParser/Search.js.map +1 -0
  258. package/dist/unstable/http/MultipartParser/internal/contentType.d.ts +5 -0
  259. package/dist/unstable/http/MultipartParser/internal/contentType.d.ts.map +1 -0
  260. package/dist/unstable/http/MultipartParser/internal/contentType.js +82 -0
  261. package/dist/unstable/http/MultipartParser/internal/contentType.js.map +1 -0
  262. package/dist/unstable/http/MultipartParser/internal/headers.d.ts +3 -0
  263. package/dist/unstable/http/MultipartParser/internal/headers.d.ts.map +1 -0
  264. package/dist/unstable/http/MultipartParser/internal/headers.js +194 -0
  265. package/dist/unstable/http/MultipartParser/internal/headers.js.map +1 -0
  266. package/dist/unstable/http/MultipartParser/internal/multipart.d.ts +8 -0
  267. package/dist/unstable/http/MultipartParser/internal/multipart.d.ts.map +1 -0
  268. package/dist/unstable/http/MultipartParser/internal/multipart.js +226 -0
  269. package/dist/unstable/http/MultipartParser/internal/multipart.js.map +1 -0
  270. package/dist/unstable/http/MultipartParser/internal/search.d.ts +5 -0
  271. package/dist/unstable/http/MultipartParser/internal/search.d.ts.map +1 -0
  272. package/dist/unstable/http/MultipartParser/internal/search.js +120 -0
  273. package/dist/unstable/http/MultipartParser/internal/search.js.map +1 -0
  274. package/dist/unstable/http/MultipartParser.d.ts +98 -0
  275. package/dist/unstable/http/MultipartParser.d.ts.map +1 -0
  276. package/dist/unstable/http/MultipartParser.js +23 -0
  277. package/dist/unstable/http/MultipartParser.js.map +1 -0
  278. package/dist/unstable/http/Template.d.ts.map +1 -1
  279. package/dist/unstable/http/Template.js +2 -2
  280. package/dist/unstable/http/Template.js.map +1 -1
  281. package/dist/unstable/http/index.d.ts +1 -1
  282. package/dist/unstable/http/index.d.ts.map +1 -1
  283. package/dist/unstable/http/index.js +1 -1
  284. package/dist/unstable/http/index.js.map +1 -1
  285. package/dist/unstable/http/internal/httpBody.d.ts +2 -0
  286. package/dist/unstable/http/internal/httpBody.d.ts.map +1 -0
  287. package/dist/unstable/http/internal/httpBody.js +10 -0
  288. package/dist/unstable/http/internal/httpBody.js.map +1 -0
  289. package/dist/unstable/httpapi/HttpApi.d.ts.map +1 -1
  290. package/dist/unstable/httpapi/HttpApi.js +5 -5
  291. package/dist/unstable/httpapi/HttpApi.js.map +1 -1
  292. package/dist/unstable/httpapi/HttpApiBuilder.js +68 -15
  293. package/dist/unstable/httpapi/HttpApiBuilder.js.map +1 -1
  294. package/dist/unstable/httpapi/HttpApiClient.d.ts +1 -1
  295. package/dist/unstable/httpapi/HttpApiClient.d.ts.map +1 -1
  296. package/dist/unstable/httpapi/HttpApiClient.js +65 -25
  297. package/dist/unstable/httpapi/HttpApiClient.js.map +1 -1
  298. package/dist/unstable/httpapi/HttpApiEndpoint.d.ts +6 -4
  299. package/dist/unstable/httpapi/HttpApiEndpoint.d.ts.map +1 -1
  300. package/dist/unstable/httpapi/HttpApiEndpoint.js +73 -16
  301. package/dist/unstable/httpapi/HttpApiEndpoint.js.map +1 -1
  302. package/dist/unstable/httpapi/HttpApiError.d.ts +5 -5
  303. package/dist/unstable/httpapi/HttpApiError.d.ts.map +1 -1
  304. package/dist/unstable/httpapi/HttpApiError.js +17 -17
  305. package/dist/unstable/httpapi/HttpApiError.js.map +1 -1
  306. package/dist/unstable/httpapi/HttpApiMiddleware.d.ts +1 -1
  307. package/dist/unstable/httpapi/HttpApiMiddleware.js +1 -1
  308. package/dist/unstable/httpapi/HttpApiSchema.d.ts +219 -0
  309. package/dist/unstable/httpapi/HttpApiSchema.d.ts.map +1 -1
  310. package/dist/unstable/httpapi/HttpApiSchema.js +170 -0
  311. package/dist/unstable/httpapi/HttpApiSchema.js.map +1 -1
  312. package/dist/unstable/httpapi/OpenApi.d.ts +8 -0
  313. package/dist/unstable/httpapi/OpenApi.d.ts.map +1 -1
  314. package/dist/unstable/httpapi/OpenApi.js +45 -18
  315. package/dist/unstable/httpapi/OpenApi.js.map +1 -1
  316. package/dist/unstable/observability/OtlpExporter.d.ts +1 -1
  317. package/dist/unstable/observability/OtlpExporter.d.ts.map +1 -1
  318. package/dist/unstable/observability/OtlpExporter.js +2 -1
  319. package/dist/unstable/observability/OtlpExporter.js.map +1 -1
  320. package/dist/unstable/observability/OtlpLogger.d.ts.map +1 -1
  321. package/dist/unstable/observability/OtlpLogger.js +2 -2
  322. package/dist/unstable/observability/OtlpLogger.js.map +1 -1
  323. package/dist/unstable/observability/OtlpMetrics.d.ts +2 -2
  324. package/dist/unstable/observability/OtlpMetrics.d.ts.map +1 -1
  325. package/dist/unstable/observability/OtlpMetrics.js +28 -15
  326. package/dist/unstable/observability/OtlpMetrics.js.map +1 -1
  327. package/dist/unstable/observability/OtlpTracer.js +1 -1
  328. package/dist/unstable/observability/OtlpTracer.js.map +1 -1
  329. package/dist/unstable/persistence/PersistedQueue.d.ts.map +1 -1
  330. package/dist/unstable/persistence/PersistedQueue.js +9 -9
  331. package/dist/unstable/persistence/PersistedQueue.js.map +1 -1
  332. package/dist/unstable/persistence/Persistence.d.ts.map +1 -1
  333. package/dist/unstable/persistence/Persistence.js +17 -7
  334. package/dist/unstable/persistence/Persistence.js.map +1 -1
  335. package/dist/unstable/persistence/RateLimiter.d.ts +22 -12
  336. package/dist/unstable/persistence/RateLimiter.d.ts.map +1 -1
  337. package/dist/unstable/persistence/RateLimiter.js +15 -42
  338. package/dist/unstable/persistence/RateLimiter.js.map +1 -1
  339. package/dist/unstable/persistence/Redis.js +1 -1
  340. package/dist/unstable/persistence/Redis.js.map +1 -1
  341. package/dist/unstable/rpc/RpcClient.d.ts +14 -0
  342. package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
  343. package/dist/unstable/rpc/RpcClient.js +18 -9
  344. package/dist/unstable/rpc/RpcClient.js.map +1 -1
  345. package/dist/unstable/rpc/RpcClientError.js +2 -2
  346. package/dist/unstable/rpc/RpcClientError.js.map +1 -1
  347. package/dist/unstable/rpc/RpcSerialization.js +3 -1
  348. package/dist/unstable/rpc/RpcSerialization.js.map +1 -1
  349. package/dist/unstable/schema/Model.d.ts +1 -1
  350. package/dist/unstable/schema/Model.d.ts.map +1 -1
  351. package/dist/unstable/schema/VariantSchema.d.ts +5 -5
  352. package/dist/unstable/schema/VariantSchema.d.ts.map +1 -1
  353. package/dist/unstable/schema/VariantSchema.js +17 -9
  354. package/dist/unstable/schema/VariantSchema.js.map +1 -1
  355. package/dist/unstable/socket/Socket.d.ts.map +1 -1
  356. package/dist/unstable/socket/Socket.js +28 -12
  357. package/dist/unstable/socket/Socket.js.map +1 -1
  358. package/dist/unstable/sql/SqlClient.d.ts.map +1 -1
  359. package/dist/unstable/sql/SqlClient.js +7 -3
  360. package/dist/unstable/sql/SqlClient.js.map +1 -1
  361. package/dist/unstable/sql/SqlError.js +13 -13
  362. package/dist/unstable/sql/SqlError.js.map +1 -1
  363. package/dist/unstable/sql/SqlResolver.js +8 -6
  364. package/dist/unstable/sql/SqlResolver.js.map +1 -1
  365. package/dist/unstable/sql/Statement.d.ts.map +1 -1
  366. package/dist/unstable/sql/Statement.js +8 -6
  367. package/dist/unstable/sql/Statement.js.map +1 -1
  368. package/dist/unstable/workers/WorkerError.js +5 -5
  369. package/dist/unstable/workers/WorkerError.js.map +1 -1
  370. package/dist/unstable/workflow/WorkflowEngine.d.ts +1 -1
  371. package/dist/unstable/workflow/WorkflowEngine.d.ts.map +1 -1
  372. package/dist/unstable/workflow/WorkflowEngine.js +3 -3
  373. package/dist/unstable/workflow/WorkflowEngine.js.map +1 -1
  374. package/package.json +2 -8
  375. package/src/Cache.ts +1 -1
  376. package/src/Channel.ts +1 -1
  377. package/src/Config.ts +28 -7
  378. package/src/ConfigProvider.ts +4 -1
  379. package/src/Context.ts +5 -5
  380. package/src/Crypto.ts +17 -8
  381. package/src/Duration.ts +16 -2
  382. package/src/Effect.ts +141 -17
  383. package/src/Equal.ts +10 -2
  384. package/src/ExecutionPlan.ts +78 -1
  385. package/src/FiberSet.ts +1 -1
  386. package/src/FileSystem.ts +2 -2
  387. package/src/Function.ts +6 -6
  388. package/src/Iterable.ts +11 -10
  389. package/src/Layer.ts +7 -5
  390. package/src/Schedule.ts +13 -13
  391. package/src/Schema.ts +50 -41
  392. package/src/SchemaAST.ts +69 -37
  393. package/src/SchemaParser.ts +75 -69
  394. package/src/ScopedCache.ts +1 -1
  395. package/src/Sink.ts +1 -1
  396. package/src/Stream.ts +77 -10
  397. package/src/SynchronizedRef.ts +1 -1
  398. package/src/Terminal.ts +1 -1
  399. package/src/Tuple.ts +7 -4
  400. package/src/TxReentrantLock.ts +39 -35
  401. package/src/internal/dateTime.ts +1 -1
  402. package/src/internal/executionPlan.ts +105 -10
  403. package/src/internal/hashMap.ts +20 -14
  404. package/src/internal/matcher.ts +2 -2
  405. package/src/internal/schedule.ts +4 -4
  406. package/src/internal/schema/annotations.ts +3 -0
  407. package/src/internal/schema/toArbitrary.ts +3 -1
  408. package/src/internal/trie.ts +12 -2
  409. package/src/testing/TestClock.ts +13 -1
  410. package/src/testing/TestSchema.ts +1 -1
  411. package/src/unstable/ai/AiError.ts +19 -19
  412. package/src/unstable/ai/Chat.ts +1 -1
  413. package/src/unstable/ai/LanguageModel.ts +4 -2
  414. package/src/unstable/ai/McpSchema.ts +17 -16
  415. package/src/unstable/ai/McpServer.ts +1 -1
  416. package/src/unstable/ai/Prompt.ts +21 -6
  417. package/src/unstable/cli/CliError.ts +12 -12
  418. package/src/unstable/cli/Command.ts +12 -10
  419. package/src/unstable/cli/Param.ts +41 -19
  420. package/src/unstable/cli/Primitive.ts +11 -5
  421. package/src/unstable/cli/Prompt.ts +36 -20
  422. package/src/unstable/cli/internal/ansi.ts +2 -2
  423. package/src/unstable/cli/internal/command.ts +15 -10
  424. package/src/unstable/cli/internal/completions/bash.ts +59 -9
  425. package/src/unstable/cli/internal/completions/descriptor.ts +14 -20
  426. package/src/unstable/cli/internal/completions/fish.ts +5 -7
  427. package/src/unstable/cli/internal/help.ts +4 -2
  428. package/src/unstable/cli/internal/parser.ts +3 -3
  429. package/src/unstable/cli/internal/wizard.ts +2 -2
  430. package/src/unstable/cluster/ClusterError.ts +7 -7
  431. package/src/unstable/cluster/ClusterWorkflowEngine.ts +4 -1
  432. package/src/unstable/cluster/MessageStorage.ts +9 -5
  433. package/src/unstable/cluster/Reply.ts +21 -0
  434. package/src/unstable/cluster/RunnerServer.ts +4 -10
  435. package/src/unstable/cluster/RunnerStorage.ts +9 -7
  436. package/src/unstable/cluster/Sharding.ts +35 -7
  437. package/src/unstable/cluster/internal/entityManager.ts +1 -1
  438. package/src/unstable/cluster/internal/resourceMap.ts +5 -2
  439. package/src/unstable/cluster/internal/resourceRef.ts +27 -5
  440. package/src/unstable/devtools/DevToolsClient.ts +3 -2
  441. package/src/unstable/encoding/Ini.ts +174 -0
  442. package/src/unstable/encoding/Msgpack.ts +47 -28
  443. package/src/unstable/encoding/Ndjson.ts +9 -1
  444. package/src/unstable/encoding/Sse.ts +11 -21
  445. package/src/unstable/encoding/Toml.ts +504 -0
  446. package/src/unstable/encoding/Yaml.ts +541 -0
  447. package/src/unstable/encoding/index.ts +15 -0
  448. package/src/unstable/eventlog/EventJournal.ts +14 -6
  449. package/src/unstable/eventlog/EventLogMessage.ts +1 -1
  450. package/src/unstable/eventlog/EventLogServerUnencrypted.ts +1 -1
  451. package/src/unstable/eventlog/SqlEventJournal.ts +6 -4
  452. package/src/unstable/http/FindMyWay/internal/queryString.ts +420 -0
  453. package/src/unstable/http/FindMyWay/internal/router.ts +950 -0
  454. package/src/unstable/http/FindMyWay.ts +65 -6
  455. package/src/unstable/http/HttpClientError.ts +1 -1
  456. package/src/unstable/http/HttpClientRequest.ts +2 -14
  457. package/src/unstable/http/HttpClientResponse.ts +1 -17
  458. package/src/unstable/http/HttpPlatform.ts +34 -6
  459. package/src/unstable/http/HttpServerRequest.ts +14 -6
  460. package/src/unstable/http/HttpServerResponse.ts +9 -7
  461. package/src/unstable/http/Multipart.ts +9 -2
  462. package/src/unstable/http/MultipartParser/HeadersParser.ts +68 -0
  463. package/src/unstable/http/MultipartParser/Search.ts +17 -0
  464. package/src/unstable/http/MultipartParser/internal/contentType.ts +103 -0
  465. package/src/unstable/http/MultipartParser/internal/headers.ts +615 -0
  466. package/src/unstable/http/MultipartParser/internal/multipart.ts +262 -0
  467. package/src/unstable/http/MultipartParser/internal/search.ts +167 -0
  468. package/src/unstable/http/MultipartParser.ts +115 -0
  469. package/src/unstable/http/Template.ts +6 -5
  470. package/src/unstable/http/index.ts +1 -1
  471. package/src/unstable/http/internal/httpBody.ts +15 -0
  472. package/src/unstable/httpapi/HttpApi.ts +6 -7
  473. package/src/unstable/httpapi/HttpApiBuilder.ts +119 -21
  474. package/src/unstable/httpapi/HttpApiClient.ts +104 -41
  475. package/src/unstable/httpapi/HttpApiEndpoint.ts +117 -29
  476. package/src/unstable/httpapi/HttpApiError.ts +33 -39
  477. package/src/unstable/httpapi/HttpApiMiddleware.ts +1 -1
  478. package/src/unstable/httpapi/HttpApiSchema.ts +353 -0
  479. package/src/unstable/httpapi/OpenApi.ts +70 -20
  480. package/src/unstable/observability/OtlpExporter.ts +4 -2
  481. package/src/unstable/observability/OtlpLogger.ts +3 -1
  482. package/src/unstable/observability/OtlpMetrics.ts +32 -18
  483. package/src/unstable/observability/OtlpTracer.ts +1 -1
  484. package/src/unstable/persistence/PersistedQueue.ts +12 -9
  485. package/src/unstable/persistence/Persistence.ts +27 -7
  486. package/src/unstable/persistence/RateLimiter.ts +54 -31
  487. package/src/unstable/persistence/Redis.ts +1 -1
  488. package/src/unstable/rpc/RpcClient.ts +38 -12
  489. package/src/unstable/rpc/RpcClientError.ts +2 -2
  490. package/src/unstable/rpc/RpcSerialization.ts +1 -1
  491. package/src/unstable/schema/VariantSchema.ts +36 -18
  492. package/src/unstable/socket/Socket.ts +24 -14
  493. package/src/unstable/sql/SqlClient.ts +65 -56
  494. package/src/unstable/sql/SqlError.ts +13 -13
  495. package/src/unstable/sql/SqlResolver.ts +8 -6
  496. package/src/unstable/sql/Statement.ts +13 -8
  497. package/src/unstable/workers/WorkerError.ts +5 -5
  498. package/src/unstable/workflow/WorkflowEngine.ts +8 -3
  499. package/dist/unstable/http/Multipasta/HeadersParser.d.ts +0 -14
  500. package/dist/unstable/http/Multipasta/HeadersParser.d.ts.map +0 -1
  501. package/dist/unstable/http/Multipasta/HeadersParser.js +0 -14
  502. package/dist/unstable/http/Multipasta/HeadersParser.js.map +0 -1
  503. package/dist/unstable/http/Multipasta/Node.d.ts +0 -14
  504. package/dist/unstable/http/Multipasta/Node.d.ts.map +0 -1
  505. package/dist/unstable/http/Multipasta/Node.js +0 -14
  506. package/dist/unstable/http/Multipasta/Node.js.map +0 -1
  507. package/dist/unstable/http/Multipasta/Search.d.ts +0 -14
  508. package/dist/unstable/http/Multipasta/Search.d.ts.map +0 -1
  509. package/dist/unstable/http/Multipasta/Search.js +0 -14
  510. package/dist/unstable/http/Multipasta/Search.js.map +0 -1
  511. package/dist/unstable/http/Multipasta/Web.d.ts +0 -14
  512. package/dist/unstable/http/Multipasta/Web.d.ts.map +0 -1
  513. package/dist/unstable/http/Multipasta/Web.js +0 -14
  514. package/dist/unstable/http/Multipasta/Web.js.map +0 -1
  515. package/dist/unstable/http/Multipasta.d.ts +0 -15
  516. package/dist/unstable/http/Multipasta.d.ts.map +0 -1
  517. package/dist/unstable/http/Multipasta.js +0 -15
  518. package/dist/unstable/http/Multipasta.js.map +0 -1
  519. package/src/unstable/http/Multipasta/HeadersParser.ts +0 -14
  520. package/src/unstable/http/Multipasta/Node.ts +0 -14
  521. package/src/unstable/http/Multipasta/Search.ts +0 -14
  522. package/src/unstable/http/Multipasta/Web.ts +0 -14
  523. package/src/unstable/http/Multipasta.ts +0 -15
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Built-in error schemas for common HTTP API failure responses.
3
3
  *
4
- * This module provides reusable `Schema.ErrorClass` values for common HTTP
4
+ * This module provides reusable `Schema.Error` values for common HTTP
5
5
  * status codes, plus `HttpApiSchemaError` for request decoding failures raised
6
6
  * by the HTTP API runtime. The status errors can be used in endpoint or
7
7
  * middleware error declarations and are understood by builders, generated
@@ -39,7 +39,7 @@ const serviceUnavailableResponse = HttpServerResponse.empty({ status: 503 })
39
39
  * @category errors
40
40
  * @since 4.0.0
41
41
  */
42
- export class BadRequest extends Schema.ErrorClass<BadRequest>("effect/HttpApiError/BadRequest")({
42
+ export class BadRequest extends Schema.Error<BadRequest>("effect/HttpApiError/BadRequest")({
43
43
  _tag: Schema.tag("BadRequest")
44
44
  }, {
45
45
  description: "BadRequest",
@@ -70,7 +70,7 @@ export const BadRequestNoContent = BadRequest.pipe(HttpApiSchema.asNoContent({
70
70
  * @category errors
71
71
  * @since 4.0.0
72
72
  */
73
- export class Unauthorized extends Schema.ErrorClass<Unauthorized>("effect/HttpApiError/Unauthorized")({
73
+ export class Unauthorized extends Schema.Error<Unauthorized>("effect/HttpApiError/Unauthorized")({
74
74
  _tag: Schema.tag("Unauthorized")
75
75
  }, {
76
76
  description: "Unauthorized",
@@ -100,7 +100,7 @@ export const UnauthorizedNoContent = Unauthorized.pipe(HttpApiSchema.asNoContent
100
100
  * @category errors
101
101
  * @since 4.0.0
102
102
  */
103
- export class Forbidden extends Schema.ErrorClass<Forbidden>("effect/HttpApiError/Forbidden")({
103
+ export class Forbidden extends Schema.Error<Forbidden>("effect/HttpApiError/Forbidden")({
104
104
  _tag: Schema.tag("Forbidden")
105
105
  }, {
106
106
  description: "Forbidden",
@@ -130,7 +130,7 @@ export const ForbiddenNoContent = Forbidden.pipe(HttpApiSchema.asNoContent({
130
130
  * @category errors
131
131
  * @since 4.0.0
132
132
  */
133
- export class NotFound extends Schema.ErrorClass<NotFound>("effect/HttpApiError/NotFound")({
133
+ export class NotFound extends Schema.Error<NotFound>("effect/HttpApiError/NotFound")({
134
134
  _tag: Schema.tag("NotFound")
135
135
  }, {
136
136
  description: "NotFound",
@@ -160,7 +160,7 @@ export const NotFoundNoContent = NotFound.pipe(HttpApiSchema.asNoContent({
160
160
  * @category errors
161
161
  * @since 4.0.0
162
162
  */
163
- export class MethodNotAllowed extends Schema.ErrorClass<MethodNotAllowed>("effect/HttpApiError/MethodNotAllowed")({
163
+ export class MethodNotAllowed extends Schema.Error<MethodNotAllowed>("effect/HttpApiError/MethodNotAllowed")({
164
164
  _tag: Schema.tag("MethodNotAllowed")
165
165
  }, {
166
166
  description: "MethodNotAllowed",
@@ -190,7 +190,7 @@ export const MethodNotAllowedNoContent = MethodNotAllowed.pipe(HttpApiSchema.asN
190
190
  * @category errors
191
191
  * @since 4.0.0
192
192
  */
193
- export class NotAcceptable extends Schema.ErrorClass<NotAcceptable>("effect/HttpApiError/NotAcceptable")({
193
+ export class NotAcceptable extends Schema.Error<NotAcceptable>("effect/HttpApiError/NotAcceptable")({
194
194
  _tag: Schema.tag("NotAcceptable")
195
195
  }, {
196
196
  description: "NotAcceptable",
@@ -220,7 +220,7 @@ export const NotAcceptableNoContent = NotAcceptable.pipe(HttpApiSchema.asNoConte
220
220
  * @category errors
221
221
  * @since 4.0.0
222
222
  */
223
- export class RequestTimeout extends Schema.ErrorClass<RequestTimeout>("effect/HttpApiError/RequestTimeout")({
223
+ export class RequestTimeout extends Schema.Error<RequestTimeout>("effect/HttpApiError/RequestTimeout")({
224
224
  _tag: Schema.tag("RequestTimeout")
225
225
  }, {
226
226
  description: "RequestTimeout",
@@ -250,7 +250,7 @@ export const RequestTimeoutNoContent = RequestTimeout.pipe(HttpApiSchema.asNoCon
250
250
  * @category errors
251
251
  * @since 4.0.0
252
252
  */
253
- export class Conflict extends Schema.ErrorClass<Conflict>("effect/HttpApiError/Conflict")({
253
+ export class Conflict extends Schema.Error<Conflict>("effect/HttpApiError/Conflict")({
254
254
  _tag: Schema.tag("Conflict")
255
255
  }, {
256
256
  description: "Conflict",
@@ -280,7 +280,7 @@ export const ConflictNoContent = Conflict.pipe(HttpApiSchema.asNoContent({
280
280
  * @category errors
281
281
  * @since 4.0.0
282
282
  */
283
- export class Gone extends Schema.ErrorClass<Gone>("effect/HttpApiError/Gone")({
283
+ export class Gone extends Schema.Error<Gone>("effect/HttpApiError/Gone")({
284
284
  _tag: Schema.tag("Gone")
285
285
  }, {
286
286
  description: "Gone",
@@ -310,14 +310,12 @@ export const GoneNoContent = Gone.pipe(HttpApiSchema.asNoContent({
310
310
  * @category errors
311
311
  * @since 4.0.0
312
312
  */
313
- export class UnprocessableEntity
314
- extends Schema.ErrorClass<UnprocessableEntity>("effect/HttpApiError/UnprocessableEntity")({
315
- _tag: Schema.tag("UnprocessableEntity")
316
- }, {
317
- description: "UnprocessableEntity",
318
- httpApiStatus: 422
319
- })
320
- {
313
+ export class UnprocessableEntity extends Schema.Error<UnprocessableEntity>("effect/HttpApiError/UnprocessableEntity")({
314
+ _tag: Schema.tag("UnprocessableEntity")
315
+ }, {
316
+ description: "UnprocessableEntity",
317
+ httpApiStatus: 422
318
+ }) {
321
319
  override readonly [ErrorReporter.ignore] = true;
322
320
  [HttpServerRespondable.symbol]() {
323
321
  return Effect.succeed(unprocessableEntityResponse)
@@ -342,14 +340,12 @@ export const UnprocessableEntityNoContent = UnprocessableEntity.pipe(HttpApiSche
342
340
  * @category errors
343
341
  * @since 4.0.0
344
342
  */
345
- export class InternalServerError
346
- extends Schema.ErrorClass<InternalServerError>("effect/HttpApiError/InternalServerError")({
347
- _tag: Schema.tag("InternalServerError")
348
- }, {
349
- description: "InternalServerError",
350
- httpApiStatus: 500
351
- })
352
- {
343
+ export class InternalServerError extends Schema.Error<InternalServerError>("effect/HttpApiError/InternalServerError")({
344
+ _tag: Schema.tag("InternalServerError")
345
+ }, {
346
+ description: "InternalServerError",
347
+ httpApiStatus: 500
348
+ }) {
353
349
  [HttpServerRespondable.symbol]() {
354
350
  return Effect.succeed(internalServerErrorResponse)
355
351
  }
@@ -373,7 +369,7 @@ export const InternalServerErrorNoContent = InternalServerError.pipe(HttpApiSche
373
369
  * @category errors
374
370
  * @since 4.0.0
375
371
  */
376
- export class NotImplemented extends Schema.ErrorClass<NotImplemented>("effect/HttpApiError/NotImplemented")({
372
+ export class NotImplemented extends Schema.Error<NotImplemented>("effect/HttpApiError/NotImplemented")({
377
373
  _tag: Schema.tag("NotImplemented")
378
374
  }, {
379
375
  description: "NotImplemented",
@@ -402,14 +398,12 @@ export const NotImplementedNoContent = NotImplemented.pipe(HttpApiSchema.asNoCon
402
398
  * @category errors
403
399
  * @since 4.0.0
404
400
  */
405
- export class ServiceUnavailable
406
- extends Schema.ErrorClass<ServiceUnavailable>("effect/HttpApiError/ServiceUnavailable")({
407
- _tag: Schema.tag("ServiceUnavailable")
408
- }, {
409
- description: "ServiceUnavailable",
410
- httpApiStatus: 503
411
- })
412
- {
401
+ export class ServiceUnavailable extends Schema.Error<ServiceUnavailable>("effect/HttpApiError/ServiceUnavailable")({
402
+ _tag: Schema.tag("ServiceUnavailable")
403
+ }, {
404
+ description: "ServiceUnavailable",
405
+ httpApiStatus: 503
406
+ }) {
413
407
  [HttpServerRespondable.symbol]() {
414
408
  return Effect.succeed(serviceUnavailableResponse)
415
409
  }
@@ -443,15 +437,15 @@ export type HttpApiSchemaErrorTypeId = "~effect/httpapi/HttpApiError/HttpApiSche
443
437
  export const HttpApiSchemaErrorTypeId: HttpApiSchemaErrorTypeId = "~effect/httpapi/HttpApiError/HttpApiSchemaError"
444
438
 
445
439
  /**
446
- * Error raised when an HTTP API request component fails schema decoding. It records
447
- * which component failed and responds as an empty `400 Bad Request` when rendered
448
- * as a server response.
440
+ * Error raised when an HTTP API request or response component fails schema
441
+ * decoding or encoding. It records which component failed and responds as an
442
+ * empty `400 Bad Request` when rendered as a server response.
449
443
  *
450
444
  * @category errors
451
445
  * @since 4.0.0
452
446
  */
453
447
  export class HttpApiSchemaError extends Data.TaggedClass("HttpApiSchemaError")<{
454
- readonly kind: "Params" | "Headers" | "Query" | "Body" | "Payload"
448
+ readonly kind: "Params" | "Headers" | "Query" | "Body" | "Payload" | "ResponseHeaders"
455
449
  readonly cause: Schema.SchemaError
456
450
  }> {
457
451
  readonly [HttpApiSchemaErrorTypeId]: HttpApiSchemaErrorTypeId = HttpApiSchemaErrorTypeId
@@ -404,7 +404,7 @@ function getError(error: ErrorConstraint | undefined): ReadonlySet<Schema.Top> {
404
404
  * HttpApiMiddleware
405
405
  * } from "effect/unstable/httpapi"
406
406
  *
407
- * class CustomError extends Schema.TaggedErrorClass<CustomError>()("CustomError", {}) {}
407
+ * class CustomError extends Schema.TaggedError<CustomError>()("CustomError", {}) {}
408
408
  *
409
409
  * class ErrorHandler extends HttpApiMiddleware.Service<ErrorHandler>()("api/ErrorHandler", {
410
410
  * error: CustomError
@@ -29,10 +29,27 @@ declare module "../../Schema.ts" {
29
29
  * @internal
30
30
  */
31
31
  readonly "~httpApiEncoding"?: Encoding | undefined
32
+ /**
33
+ * Marks schemas produced by `encodeToWithHeaders`, carrying the body and
34
+ * headers schemas so integrations can split the encoded pair.
35
+ * @internal
36
+ */
37
+ readonly "~httpApiWithHeaders"?: WithHeadersAnnotation | undefined
32
38
  }
33
39
  }
34
40
  }
35
41
 
42
+ /**
43
+ * Annotation payload attached by `encodeToWithHeaders`.
44
+ *
45
+ * @internal
46
+ */
47
+ export interface WithHeadersAnnotation {
48
+ readonly body: Schema.Top
49
+ readonly headers: Schema.Top
50
+ readonly headersCodec: Schema.Top
51
+ }
52
+
36
53
  /**
37
54
  * HTTP API body encoding metadata used by payloads and responses.
38
55
  *
@@ -483,6 +500,315 @@ function defaultStreamContentType(mode: StreamMode): string {
483
500
  }
484
501
  }
485
502
 
503
+ /**
504
+ * Runtime brand key used to mark `WithHeaders` response schemas.
505
+ *
506
+ * @category type IDs
507
+ * @since 4.0.0
508
+ */
509
+ export const WithHeadersTypeId = "~effect/httpapi/HttpApiSchema/WithHeaders"
510
+
511
+ /**
512
+ * Type-level brand identifier used by `WithHeaders`.
513
+ *
514
+ * @category type IDs
515
+ * @since 4.0.0
516
+ */
517
+ export type WithHeadersTypeId = typeof WithHeadersTypeId
518
+
519
+ /**
520
+ * Runtime brand key used to mark `WithHeaders` response values.
521
+ *
522
+ * @category type IDs
523
+ * @since 4.0.0
524
+ */
525
+ export const WithHeadersValueTypeId = "~effect/httpapi/HttpApiSchema/WithHeadersValue"
526
+
527
+ /**
528
+ * Type-level brand identifier used by `WithHeaders` response values.
529
+ *
530
+ * @category type IDs
531
+ * @since 4.0.0
532
+ */
533
+ export type WithHeadersValueTypeId = typeof WithHeadersValueTypeId
534
+
535
+ /**
536
+ * A response schema wrapping a body schema together with a response headers
537
+ * schema.
538
+ *
539
+ * **Details**
540
+ *
541
+ * `WithHeaders` is a branded declaration schema: it carries the inner success
542
+ * schema and the headers schema as properties, and server, client, and OpenAPI
543
+ * integrations detect the brand and handle body and headers separately. It is
544
+ * supported for error responses, though {@link encodeToWithHeaders} is usually
545
+ * more convenient there because handlers can fail with the domain error value.
546
+ *
547
+ * - `schema` is the inner response schema. Success responses may wrap
548
+ * `StreamSse` and `StreamUint8Array`; error responses remain non-streaming.
549
+ * Nesting `WithHeaders` is rejected at construction.
550
+ * - `headers` is any schema; endpoint construction applies
551
+ * `Schema.toCodecStringTree` unless codecs are disabled, so leaves become
552
+ * `string | undefined` on the wire and `undefined` leaves are omitted from the response.
553
+ * - Status and response-encoding annotations are resolved from the wrapper
554
+ * first, falling through to the inner schema.
555
+ * - A header-carrying response cannot share its status and content type with
556
+ * another response in the same success or error union. Endpoint construction
557
+ * rejects ambiguous declarations, including those made with
558
+ * {@link encodeToWithHeaders}.
559
+ * - `Rebuild` preserves the brand and both parts, so `.annotate` keeps the
560
+ * wrapper intact.
561
+ *
562
+ * @category models
563
+ * @since 4.0.0
564
+ */
565
+ export interface WithHeaders<S extends Schema.Top, H extends Schema.Top> extends
566
+ Schema.Bottom<
567
+ withHeaders<S["Type"], H["Type"]>,
568
+ withHeaders<S["Encoded"], Schema.StringTree>,
569
+ S["DecodingServices"] | H["DecodingServices"],
570
+ S["EncodingServices"] | H["EncodingServices"],
571
+ SchemaAST.Declaration,
572
+ WithHeaders<S, H>
573
+ >
574
+ {
575
+ readonly "Rebuild": WithHeaders<S, H>
576
+ readonly [WithHeadersTypeId]: typeof WithHeadersTypeId
577
+ readonly schema: S
578
+ readonly headers: H
579
+ }
580
+
581
+ /**
582
+ * The Type of a `WithHeaders` schema: what handlers return and what the
583
+ * client resolves to, constructed via {@link withHeaders}.
584
+ *
585
+ * `body` is the inner success value. For stream success schemas it is the
586
+ * `Stream` itself, so headers are decided before the body starts streaming.
587
+ *
588
+ * @category models
589
+ * @since 4.0.0
590
+ */
591
+ export interface withHeaders<A, H> {
592
+ readonly [WithHeadersValueTypeId]: WithHeadersValueTypeId
593
+ readonly body: A
594
+ readonly headers: H
595
+ }
596
+
597
+ /** @internal */
598
+ export const isWithHeadersValue = (u: unknown): u is withHeaders<unknown, unknown> =>
599
+ Predicate.hasProperty(u, WithHeadersValueTypeId)
600
+
601
+ const withHeadersValueSchema = Schema.declare(isWithHeadersValue)
602
+
603
+ /**
604
+ * Wraps a success schema with a response headers schema.
605
+ *
606
+ * Headers accept either a schema or a fields shorthand, mirroring the
607
+ * request-side headers option.
608
+ *
609
+ * ```ts import.meta.vitest
610
+ * import { Schema } from "effect"
611
+ * import { HttpApiSchema } from "effect/unstable/httpapi"
612
+ *
613
+ * const schema = HttpApiSchema.WithHeaders(Schema.String, {
614
+ * "x-total-count": Schema.FiniteFromString
615
+ * })
616
+ * const response: typeof schema.Type = HttpApiSchema.withHeaders({
617
+ * body: "created",
618
+ * headers: { "x-total-count": 1 }
619
+ * })
620
+ *
621
+ * HttpApiSchema.isWithHeaders(schema) // => true
622
+ * response.body // => "created"
623
+ * response.headers // => { "x-total-count": 1 }
624
+ * ```
625
+ *
626
+ * @category constructors
627
+ * @since 4.0.0
628
+ */
629
+ export function WithHeaders<S extends Schema.Top, H extends Schema.Struct.Fields>(
630
+ schema: S,
631
+ headers: H
632
+ ): WithHeaders<S, Schema.Struct<H>>
633
+ export function WithHeaders<S extends Schema.Top, H extends Schema.Top>(
634
+ schema: S,
635
+ headers: H
636
+ ): WithHeaders<S, H>
637
+ export function WithHeaders(
638
+ schema: Schema.Top,
639
+ headers: Schema.Top | Schema.Struct.Fields
640
+ ): WithHeaders<Schema.Top, Schema.Top> {
641
+ if (isWithHeaders(schema)) {
642
+ throw new Error("WithHeaders schemas cannot be nested")
643
+ }
644
+ return Schema.make<WithHeaders<Schema.Top, Schema.Top>>(withHeadersValueSchema.ast, {
645
+ [WithHeadersTypeId]: WithHeadersTypeId,
646
+ schema,
647
+ headers: Schema.isSchema(headers) ? headers : Schema.Struct(headers)
648
+ })
649
+ }
650
+
651
+ /**
652
+ * Constructs a `WithHeaders` response value from a body and headers.
653
+ *
654
+ * The returned value is branded so servers and clients can detect it exactly,
655
+ * including in mixed success unions. The same shape is used on both sides: a
656
+ * value received from a client can be returned from another handler unchanged.
657
+ *
658
+ * See {@link WithHeaders} for an example that constructs a schema and its
659
+ * corresponding response value.
660
+ *
661
+ * @category constructors
662
+ * @since 4.0.0
663
+ */
664
+ export const withHeaders = <A, H>(options: {
665
+ readonly body: A
666
+ readonly headers: H
667
+ }): withHeaders<A, H> => ({
668
+ [WithHeadersValueTypeId]: WithHeadersValueTypeId,
669
+ body: options.body,
670
+ headers: options.headers
671
+ })
672
+
673
+ /**
674
+ * Returns `true` when a schema is a `WithHeaders` response schema.
675
+ *
676
+ * ```ts import.meta.vitest
677
+ * import { Schema } from "effect"
678
+ * import { HttpApiSchema } from "effect/unstable/httpapi"
679
+ *
680
+ * const schema = HttpApiSchema.WithHeaders(Schema.String, {
681
+ * "x-request-id": Schema.String
682
+ * })
683
+ *
684
+ * HttpApiSchema.isWithHeaders(schema) // => true
685
+ * HttpApiSchema.isWithHeaders(Schema.String) // => false
686
+ * ```
687
+ *
688
+ * @category predicates
689
+ * @since 4.0.0
690
+ */
691
+ export const isWithHeaders = (u: unknown): u is WithHeaders<Schema.Top, Schema.Top> =>
692
+ Schema.isSchema(u) && Predicate.hasProperty(u, WithHeadersTypeId)
693
+
694
+ /** @internal */
695
+ export function rebuildWithHeaders(
696
+ self: WithHeaders<Schema.Top, Schema.Top>,
697
+ schema: Schema.Top,
698
+ headers: Schema.Top
699
+ ): WithHeaders<Schema.Top, Schema.Top> {
700
+ return Schema.make<WithHeaders<Schema.Top, Schema.Top>>(self.ast, {
701
+ [WithHeadersTypeId]: WithHeadersTypeId,
702
+ schema,
703
+ headers
704
+ })
705
+ }
706
+
707
+ /**
708
+ * Schema type returned by `encodeToWithHeaders`, encoding as a `{ body, headers }`
709
+ * pair while decoding to the source schema type.
710
+ *
711
+ * @category schemas
712
+ * @since 4.0.0
713
+ */
714
+ export interface encodeToWithHeaders<
715
+ S extends Schema.Top,
716
+ Body extends Schema.Top,
717
+ Headers extends Schema.Struct.Fields
718
+ > extends
719
+ Schema.decodeTo<
720
+ Schema.toType<S>,
721
+ Schema.Struct<{
722
+ readonly body: Body
723
+ readonly headers: Schema.Struct<Headers>
724
+ }>
725
+ >
726
+ {}
727
+
728
+ /**
729
+ * Encodes a schema as a `{ body, headers }` pair, folding response headers into
730
+ * an opaque domain type such as an error class.
731
+ *
732
+ * **Details**
733
+ *
734
+ * The encoded side is the pair of the body schema and the headers fields; the
735
+ * Type stays the source schema's Type. The body schema is authoritative for
736
+ * everything wire-level: status, content type, and response encoding resolve
737
+ * from the body schema's annotations.
738
+ *
739
+ * The mappings are pure total functions: validation lives in the body and
740
+ * header schemas, the mappings only reshape valid data.
741
+ *
742
+ * Streams used as the body schema turn mid-stream transport errors into
743
+ * defects on the client. Stream responses should use {@link WithHeaders},
744
+ * which preserves the body stream's error channel in the generated client.
745
+ *
746
+ * ```ts import.meta.vitest
747
+ * import { Schema } from "effect"
748
+ * import { HttpApiSchema } from "effect/unstable/httpapi"
749
+ *
750
+ * class UserNotFound extends Schema.TaggedError<UserNotFound>()("UserNotFound", {
751
+ * userId: Schema.Int
752
+ * }) {}
753
+ *
754
+ * const UserNotFoundWithHeaders = UserNotFound.pipe(
755
+ * HttpApiSchema.encodeToWithHeaders({
756
+ * body: HttpApiSchema.Empty(404),
757
+ * headers: {
758
+ * "x-user-id": Schema.Int
759
+ * }
760
+ * }, {
761
+ * decode: ({ headers }) => new UserNotFound({ userId: headers["x-user-id"] }),
762
+ * encode: (error) => ({
763
+ * headers: { "x-user-id": error.userId },
764
+ * body: undefined
765
+ * })
766
+ * })
767
+ * )
768
+ *
769
+ * const encoded = Schema.encodeSync(UserNotFoundWithHeaders)(new UserNotFound({ userId: 123 }))
770
+ * encoded // => { body: undefined, headers: { "x-user-id": 123 } }
771
+ * ```
772
+ *
773
+ * @see {@link WithHeaders} for the structural wrapper recommended for success
774
+ * responses, including streams.
775
+ *
776
+ * @category encoding
777
+ * @since 4.0.0
778
+ */
779
+ export function encodeToWithHeaders<
780
+ S extends Schema.Top,
781
+ Body extends Schema.Top,
782
+ Headers extends Schema.Struct.Fields
783
+ >(options: {
784
+ readonly body: Body
785
+ readonly headers: Headers
786
+ }, transformation: {
787
+ readonly decode: (
788
+ value: Schema.Struct.Type<{ readonly body: Body; readonly headers: Schema.Struct<Headers> }>
789
+ ) => S["Type"]
790
+ readonly encode: (
791
+ value: S["Type"]
792
+ ) => Schema.Struct.Type<{ readonly body: Body; readonly headers: Schema.Struct<Headers> }>
793
+ }) {
794
+ return (self: S): encodeToWithHeaders<S, Body, Headers> => {
795
+ const body = options.body
796
+ const headers = Schema.Struct(options.headers)
797
+ const status = resolveHttpApiStatus(body.ast)
798
+ const encoding = resolveHttpApiEncoding(body.ast)
799
+ return Schema.Struct({ body, headers }).pipe(
800
+ Schema.decodeTo(
801
+ Schema.toType(self),
802
+ SchemaTransformation.transform(transformation)
803
+ )
804
+ ).annotate({
805
+ "~httpApiWithHeaders": { body, headers, headersCodec: Schema.toEncoded(headers) },
806
+ ...(status !== undefined ? { httpApiStatus: status } : undefined),
807
+ ...(encoding !== undefined ? { "~httpApiEncoding": encoding } : undefined)
808
+ })
809
+ }
810
+ }
811
+
486
812
  /**
487
813
  * Runtime brand key used to mark schemas as buffered multipart payloads.
488
814
  *
@@ -683,6 +1009,9 @@ export const isNoContent = (ast: SchemaAST.AST): boolean => {
683
1009
 
684
1010
  const resolveHttpApiEncoding = SchemaAST.resolveAt<Encoding>("~httpApiEncoding")
685
1011
 
1012
+ /** @internal */
1013
+ export const getWithHeadersAnnotation = SchemaAST.resolveAt<WithHeadersAnnotation>("~httpApiWithHeaders")
1014
+
686
1015
  const resolveHttpApiStatus = SchemaAST.resolveAt<number>("httpApiStatus")
687
1016
 
688
1017
  const defaultJsonEncoding: Encoding = {
@@ -719,6 +1048,22 @@ export function getStatusSuccess(self: SchemaAST.AST): number {
719
1048
  return resolveHttpApiStatus(self) ?? 200
720
1049
  }
721
1050
 
1051
+ /** @internal */
1052
+ export function getStatusSuccessSchema(schema: Schema.Constraint): number {
1053
+ if (isWithHeaders(schema)) {
1054
+ return resolveHttpApiStatus(schema.ast) ?? getStatusSuccess(schema.schema.ast)
1055
+ }
1056
+ return getStatusSuccess(schema.ast)
1057
+ }
1058
+
1059
+ /** @internal */
1060
+ export function getResponseEncodingSchema(schema: Schema.Constraint): ResponseEncoding {
1061
+ if (isWithHeaders(schema) && resolveHttpApiEncoding(schema.ast) === undefined) {
1062
+ return getResponseEncoding(schema.schema.ast)
1063
+ }
1064
+ return getResponseEncoding(schema.ast)
1065
+ }
1066
+
722
1067
  /** @internal */
723
1068
  export function getStatusStream(self: StreamSchema): number {
724
1069
  return getStatusSuccess(self.ast)
@@ -728,3 +1073,11 @@ export function getStatusStream(self: StreamSchema): number {
728
1073
  export function getStatusError(self: SchemaAST.AST): number {
729
1074
  return resolveHttpApiStatus(self) ?? 500
730
1075
  }
1076
+
1077
+ /** @internal */
1078
+ export function getStatusErrorSchema(schema: Schema.Constraint): number {
1079
+ if (isWithHeaders(schema)) {
1080
+ return resolveHttpApiStatus(schema.ast) ?? getStatusError(schema.schema.ast)
1081
+ }
1082
+ return getStatusError(schema.ast)
1083
+ }