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
@@ -0,0 +1,262 @@
1
+ import type { Config, MultipartError, PartInfo } from "../../MultipartParser.ts"
2
+ import * as CT from "./contentType.ts"
3
+ import * as HP from "./headers.ts"
4
+ import * as Search from "./search.ts"
5
+
6
+ const State = {
7
+ headers: 0,
8
+ body: 1
9
+ } as const
10
+ type State = (typeof State)[keyof typeof State]
11
+
12
+ const errInvalidDisposition: MultipartError = { _tag: "InvalidDisposition" }
13
+ const errEndNotReached: MultipartError = { _tag: "EndNotReached" }
14
+ const errMaxParts: MultipartError = { _tag: "ReachedLimit", limit: "MaxParts" }
15
+ const errMaxTotalSize: MultipartError = {
16
+ _tag: "ReachedLimit",
17
+ limit: "MaxTotalSize"
18
+ }
19
+ const errMaxPartSize: MultipartError = {
20
+ _tag: "ReachedLimit",
21
+ limit: "MaxPartSize"
22
+ }
23
+ const errMaxFieldSize: MultipartError = {
24
+ _tag: "ReachedLimit",
25
+ limit: "MaxFieldSize"
26
+ }
27
+
28
+ const constCR = new TextEncoder().encode("\r\n")
29
+
30
+ export function defaultIsFile(info: PartInfo) {
31
+ return (
32
+ info.filename !== undefined ||
33
+ info.contentType === "application/octet-stream"
34
+ )
35
+ }
36
+
37
+ function parseBoundary(headers: Record<string, string>) {
38
+ const contentType = CT.parse(headers["content-type"])
39
+ return contentType.parameters.boundary
40
+ }
41
+
42
+ function noopOnChunk(_chunk: Uint8Array | null) {}
43
+
44
+ export function make({
45
+ headers,
46
+ onFile: onPart,
47
+ onField,
48
+ onError,
49
+ onDone,
50
+ isFile = defaultIsFile,
51
+ maxParts = Infinity,
52
+ maxTotalSize = Infinity,
53
+ maxPartSize = Infinity,
54
+ maxFieldSize = 1024 * 1024
55
+ }: Config) {
56
+ const boundary = parseBoundary(headers)
57
+ if (boundary === undefined) {
58
+ onError({ _tag: "InvalidBoundary" })
59
+ return {
60
+ write: noopOnChunk,
61
+ end() {}
62
+ }
63
+ }
64
+
65
+ const state = {
66
+ state: State.headers as State,
67
+ index: 0,
68
+ parts: 0,
69
+ onChunk: noopOnChunk,
70
+ info: undefined as any as PartInfo,
71
+ headerSkip: 0,
72
+ partSize: 0,
73
+ totalSize: 0,
74
+ isFile: false,
75
+ fieldChunks: [] as Array<Uint8Array>,
76
+ fieldSize: 0,
77
+ done: false
78
+ }
79
+
80
+ function skipBody() {
81
+ state.state = State.body
82
+ state.isFile = true
83
+ state.onChunk = noopOnChunk
84
+ }
85
+
86
+ const headerParser = HP.make()
87
+
88
+ const split = Search.make(
89
+ `\r\n--${boundary}`,
90
+ function(index, chunk) {
91
+ if (index === 0) {
92
+ // data before the first boundary
93
+ skipBody()
94
+ return
95
+ } else if (index !== state.index) {
96
+ if (state.index > 0) {
97
+ if (state.isFile) {
98
+ state.onChunk(null)
99
+ } else {
100
+ if (state.fieldChunks.length === 1) {
101
+ onField(state.info, state.fieldChunks[0])
102
+ } else {
103
+ const buf = new Uint8Array(state.fieldSize)
104
+ let offset = 0
105
+ for (let i = 0; i < state.fieldChunks.length; i++) {
106
+ const chunk = state.fieldChunks[i]
107
+ buf.set(chunk, offset)
108
+ offset += chunk.length
109
+ }
110
+ onField(state.info, buf)
111
+ }
112
+ state.fieldSize = 0
113
+ state.fieldChunks = []
114
+ }
115
+ }
116
+ state.partSize = 0
117
+
118
+ state.state = State.headers
119
+ state.index = index
120
+ state.headerSkip = 2 // skip the first \r\n
121
+
122
+ // trailing --
123
+ if (chunk[0] === 45 && chunk[1] === 45) {
124
+ state.done = true
125
+ return onDone()
126
+ }
127
+
128
+ state.parts++
129
+ if (state.parts > maxParts) {
130
+ onError(errMaxParts)
131
+ }
132
+ }
133
+
134
+ if ((state.partSize += chunk.length) > maxPartSize) {
135
+ onError(errMaxPartSize)
136
+ }
137
+
138
+ if (state.state === State.headers) {
139
+ const result = headerParser(chunk, state.headerSkip)
140
+ state.headerSkip = 0
141
+
142
+ if (result._tag === "Continue") {
143
+ return
144
+ } else if (result._tag === "Failure") {
145
+ skipBody()
146
+ return onError({ _tag: "BadHeaders", error: result })
147
+ }
148
+
149
+ const contentType = CT.parse(result.headers["content-type"] as string)
150
+ const contentDisposition = CT.parse(
151
+ result.headers["content-disposition"] as string,
152
+ true
153
+ )
154
+
155
+ if (
156
+ "form-data" === contentDisposition.value &&
157
+ !("name" in contentDisposition.parameters)
158
+ ) {
159
+ skipBody()
160
+ return onError(errInvalidDisposition)
161
+ }
162
+
163
+ let encodedFilename: string | undefined
164
+ if ("filename*" in contentDisposition.parameters) {
165
+ const parts = contentDisposition.parameters["filename*"].split("''")
166
+ if (parts.length === 2) {
167
+ try {
168
+ encodedFilename = decodeURIComponent(parts[1])
169
+ } catch {
170
+ encodedFilename = parts[1]
171
+ }
172
+ }
173
+ }
174
+
175
+ state.info = {
176
+ name: contentDisposition.parameters.name ?? "",
177
+ filename: encodedFilename ?? contentDisposition.parameters.filename,
178
+ contentType: contentType.value === ""
179
+ ? contentDisposition.parameters.filename !== undefined
180
+ ? "application/octet-stream"
181
+ : "text/plain"
182
+ : contentType.value,
183
+ contentTypeParameters: contentType.parameters,
184
+ contentDisposition: contentDisposition.value,
185
+ contentDispositionParameters: contentDisposition.parameters as any,
186
+ headers: result.headers
187
+ }
188
+
189
+ state.state = State.body
190
+ state.isFile = isFile(state.info)
191
+
192
+ if (state.isFile) {
193
+ state.onChunk = onPart(state.info)
194
+ }
195
+
196
+ if (result.endPosition < chunk.length) {
197
+ if (state.isFile) {
198
+ state.onChunk(chunk.subarray(result.endPosition))
199
+ } else {
200
+ const buf = chunk.subarray(result.endPosition)
201
+ if ((state.fieldSize += buf.length) > maxFieldSize) {
202
+ onError(errMaxFieldSize)
203
+ }
204
+ state.fieldChunks.push(buf)
205
+ }
206
+ }
207
+ } else if (state.isFile) {
208
+ state.onChunk(chunk)
209
+ } else {
210
+ if ((state.fieldSize += chunk.length) > maxFieldSize) {
211
+ onError(errMaxFieldSize)
212
+ }
213
+ state.fieldChunks.push(chunk)
214
+ }
215
+ },
216
+ constCR,
217
+ 2
218
+ )
219
+
220
+ return {
221
+ write(chunk: Uint8Array) {
222
+ if ((state.totalSize += chunk.length) > maxTotalSize) {
223
+ return onError(errMaxTotalSize)
224
+ }
225
+ return split.write(chunk)
226
+ },
227
+ end() {
228
+ split.end()
229
+ if (!state.done) {
230
+ onError(errEndNotReached)
231
+ }
232
+
233
+ state.state = State.headers
234
+ state.index = 0
235
+ state.parts = 0
236
+ state.onChunk = noopOnChunk
237
+ state.info = undefined as any as PartInfo
238
+ state.totalSize = 0
239
+ state.partSize = 0
240
+ state.fieldChunks = []
241
+ state.fieldSize = 0
242
+ state.done = false
243
+ }
244
+ } as const
245
+ }
246
+
247
+ const utf8Decoder = new TextDecoder("utf-8")
248
+ function getDecoder(charset: string) {
249
+ if (charset === "utf-8" || charset === "utf8" || charset === "") {
250
+ return utf8Decoder
251
+ }
252
+
253
+ try {
254
+ return new TextDecoder(charset)
255
+ } catch (error) {
256
+ return utf8Decoder
257
+ }
258
+ }
259
+
260
+ export function decodeField(info: PartInfo, value: Uint8Array): string {
261
+ return getDecoder(info.contentTypeParameters.charset ?? "utf-8").decode(value)
262
+ }
@@ -0,0 +1,167 @@
1
+ interface SearchState {
2
+ readonly needle: Uint8Array
3
+ readonly needleLength: number
4
+ readonly indexes: Record<number, ReadonlyArray<number>>
5
+ readonly firstByte: number
6
+
7
+ previousChunk: Uint8Array | undefined
8
+ previousChunkLength: number
9
+ matchIndex: number
10
+ }
11
+
12
+ function makeState(needle_: string): SearchState {
13
+ const needle = new TextEncoder().encode(needle_)
14
+ const needleLength = needle.length
15
+
16
+ const indexes: Record<number, Array<number>> = {}
17
+ for (let i = 0; i < needleLength; i++) {
18
+ const b = needle[i]
19
+ if (indexes[b] === undefined) indexes[b] = []
20
+ indexes[b].push(i)
21
+ }
22
+
23
+ return {
24
+ needle,
25
+ needleLength,
26
+ indexes,
27
+ firstByte: needle[0],
28
+ previousChunk: undefined,
29
+ previousChunkLength: 0,
30
+ matchIndex: 0
31
+ }
32
+ }
33
+
34
+ export function make(
35
+ needle: string,
36
+ callback: (index: number, chunk: Uint8Array) => void,
37
+ seed?: Uint8Array,
38
+ minimumChunkLength?: number
39
+ ) {
40
+ const state = makeState(needle)
41
+ const minChunkLength = minimumChunkLength ?? state.needleLength
42
+ if (seed !== undefined) {
43
+ state.previousChunk = seed
44
+ state.previousChunkLength = seed.length
45
+ }
46
+
47
+ function makeIndexOf(): (
48
+ chunk: Uint8Array,
49
+ needle: Uint8Array,
50
+ fromIndex: number
51
+ ) => number {
52
+ // on node.js use the Buffer api
53
+ if (
54
+ "Buffer" in globalThis &&
55
+ !("Bun" in globalThis || "Deno" in globalThis)
56
+ ) {
57
+ return function(chunk, needle, fromIndex) {
58
+ return Buffer.prototype.indexOf.call(chunk, needle, fromIndex)
59
+ }
60
+ }
61
+
62
+ const skipTable = new Uint8Array(256).fill(state.needle.length)
63
+ for (let i = 0, lastIndex = state.needle.length - 1; i < lastIndex; ++i) {
64
+ skipTable[state.needle[i]] = lastIndex - i
65
+ }
66
+
67
+ return function(chunk, needle, fromIndex) {
68
+ const lengthTotal = chunk.length
69
+ let i = fromIndex + state.needleLength - 1
70
+
71
+ while (i < lengthTotal) {
72
+ for (
73
+ let j = state.needleLength - 1, k = i;
74
+ j >= 0 && chunk[k] === needle[j];
75
+ j--, k--
76
+ ) {
77
+ if (j === 0) return k
78
+ }
79
+ i += skipTable[chunk[i]]
80
+ }
81
+
82
+ return -1
83
+ }
84
+ }
85
+
86
+ const indexOf = makeIndexOf()
87
+
88
+ function write(chunk: Uint8Array): void {
89
+ let chunkLength = chunk.length
90
+
91
+ if (state.previousChunk !== undefined) {
92
+ const newChunk = new Uint8Array(state.previousChunkLength + chunkLength)
93
+ newChunk.set(state.previousChunk)
94
+ newChunk.set(chunk, state.previousChunkLength)
95
+ chunk = newChunk
96
+ chunkLength = state.previousChunkLength + chunkLength
97
+ state.previousChunk = undefined
98
+ }
99
+
100
+ let pos = 0
101
+ while (pos < chunkLength) {
102
+ const remaining = chunkLength - pos
103
+ if (remaining < minChunkLength) {
104
+ state.previousChunk = chunk.subarray(pos)
105
+ state.previousChunkLength = remaining
106
+ return
107
+ }
108
+
109
+ const match = indexOf(chunk, state.needle, pos)
110
+
111
+ if (match > -1) {
112
+ if (match > pos) {
113
+ callback(state.matchIndex, chunk.subarray(pos, match))
114
+ }
115
+ state.matchIndex += 1
116
+ pos = match + state.needleLength
117
+ continue
118
+ } else if (chunk[chunkLength - 1] in state.indexes) {
119
+ const indexes = state.indexes[chunk[chunkLength - 1]]
120
+ let earliestIndex = -1
121
+ for (let i = 0, len = indexes.length; i < len; i++) {
122
+ const index = indexes[i]
123
+ if (
124
+ chunk[chunkLength - 1 - index] === state.firstByte &&
125
+ i > earliestIndex
126
+ ) {
127
+ earliestIndex = index
128
+ }
129
+ }
130
+ if (earliestIndex === -1) {
131
+ if (pos === 0) {
132
+ callback(state.matchIndex, chunk)
133
+ } else {
134
+ callback(state.matchIndex, chunk.subarray(pos))
135
+ }
136
+ } else {
137
+ if (chunkLength - 1 - earliestIndex > pos) {
138
+ callback(
139
+ state.matchIndex,
140
+ chunk.subarray(pos, chunkLength - 1 - earliestIndex)
141
+ )
142
+ }
143
+ state.previousChunk = chunk.subarray(chunkLength - 1 - earliestIndex)
144
+ state.previousChunkLength = earliestIndex + 1
145
+ }
146
+ } else if (pos === 0) {
147
+ callback(state.matchIndex, chunk)
148
+ } else {
149
+ callback(state.matchIndex, chunk.subarray(pos))
150
+ }
151
+
152
+ break
153
+ }
154
+ }
155
+
156
+ function end(): void {
157
+ if (state.previousChunk !== undefined && state.previousChunk !== seed) {
158
+ callback(state.matchIndex, state.previousChunk)
159
+ }
160
+
161
+ state.previousChunk = seed
162
+ state.previousChunkLength = seed?.length ?? 0
163
+ state.matchIndex = 0
164
+ }
165
+
166
+ return { write, end } as const
167
+ }
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Low-level parser for HTTP `multipart/form-data` bodies.
3
+ *
4
+ * @since 4.0.0
5
+ */
6
+ import type * as HeadersParser from "./MultipartParser/HeadersParser.ts"
7
+ import * as internal from "./MultipartParser/internal/multipart.ts"
8
+
9
+ /**
10
+ * Metadata describing a multipart form part.
11
+ *
12
+ * @category models
13
+ * @since 4.0.0
14
+ */
15
+ export interface PartInfo {
16
+ readonly name: string
17
+ readonly filename?: string | undefined
18
+ readonly contentType: string
19
+ readonly contentTypeParameters: Record<string, string>
20
+ readonly contentDisposition: string
21
+ readonly contentDispositionParameters: Record<string, string>
22
+ readonly headers: Record<string, string | Array<string>>
23
+ }
24
+
25
+ /**
26
+ * An error produced while parsing a multipart body.
27
+ *
28
+ * @category errors
29
+ * @since 4.0.0
30
+ */
31
+ export type MultipartError =
32
+ | {
33
+ readonly _tag: "InvalidBoundary"
34
+ }
35
+ | {
36
+ readonly _tag: "BadHeaders"
37
+ readonly error: HeadersParser.Failure
38
+ }
39
+ | {
40
+ readonly _tag: "InvalidDisposition"
41
+ }
42
+ | {
43
+ readonly _tag: "ReachedLimit"
44
+ readonly limit:
45
+ | "MaxParts"
46
+ | "MaxTotalSize"
47
+ | "MaxPartSize"
48
+ | "MaxFieldSize"
49
+ }
50
+ | {
51
+ readonly _tag: "EndNotReached"
52
+ }
53
+
54
+ /**
55
+ * Shared multipart parser configuration.
56
+ *
57
+ * @category models
58
+ * @since 4.0.0
59
+ */
60
+ export type BaseConfig = {
61
+ readonly headers: Record<string, string>
62
+ readonly isFile?: ((info: PartInfo) => boolean) | undefined
63
+ readonly maxParts?: number | undefined
64
+ readonly maxTotalSize?: number | undefined
65
+ readonly maxPartSize?: number | undefined
66
+ readonly maxFieldSize?: number | undefined
67
+ }
68
+
69
+ /**
70
+ * Multipart parser configuration with event callbacks.
71
+ *
72
+ * @category models
73
+ * @since 4.0.0
74
+ */
75
+ export type Config = BaseConfig & {
76
+ readonly onField: (info: PartInfo, value: Uint8Array) => void
77
+ readonly onFile: (info: PartInfo) => (chunk: Uint8Array | null) => void
78
+ readonly onError: (error: MultipartError) => void
79
+ readonly onDone: () => void
80
+ }
81
+
82
+ /**
83
+ * A streaming multipart parser.
84
+ *
85
+ * @category models
86
+ * @since 4.0.0
87
+ */
88
+ export interface Parser {
89
+ readonly write: (chunk: Uint8Array) => void
90
+ readonly end: () => void
91
+ }
92
+
93
+ /**
94
+ * Creates a streaming multipart parser.
95
+ *
96
+ * @category constructors
97
+ * @since 4.0.0
98
+ */
99
+ export const make: (options: Config) => Parser = internal.make
100
+
101
+ /**
102
+ * Determines whether a multipart part should be treated as a file.
103
+ *
104
+ * @category utilities
105
+ * @since 4.0.0
106
+ */
107
+ export const defaultIsFile: (info: PartInfo) => boolean = internal.defaultIsFile
108
+
109
+ /**
110
+ * Decodes a multipart field using its declared character set.
111
+ *
112
+ * @category utilities
113
+ * @since 4.0.0
114
+ */
115
+ export const decodeField: (info: PartInfo, value: Uint8Array) => string = internal.decodeField
@@ -215,11 +215,12 @@ export function stream<A extends ReadonlyArray<InterpolatedWithStream>>(
215
215
  buffer = ""
216
216
  }
217
217
 
218
- return Stream.flatMap(
219
- Stream.fromIterable(chunks),
220
- (chunk) =>
221
- typeof chunk === "string" ? Stream.succeed(chunk) : Effect.isEffect(chunk) ? Stream.fromEffect(chunk) : chunk,
222
- { concurrency: "unbounded" }
218
+ return Stream.fromIterable(chunks).pipe(
219
+ Stream.mapEffect(
220
+ (chunk) => Effect.isEffect(chunk) ? chunk : Effect.succeed(chunk),
221
+ { concurrency: "unbounded" }
222
+ ),
223
+ Stream.flatMap((chunk) => typeof chunk === "string" ? Stream.succeed(chunk) : chunk)
223
224
  )
224
225
  }
225
226
 
@@ -127,7 +127,7 @@ export * as Multipart from "./Multipart.ts"
127
127
  /**
128
128
  * @since 4.0.0
129
129
  */
130
- export * as Multipasta from "./Multipasta.ts"
130
+ export * as MultipartParser from "./MultipartParser.ts"
131
131
 
132
132
  /**
133
133
  * @since 4.0.0
@@ -0,0 +1,15 @@
1
+ import * as Headers from "../Headers.ts"
2
+ import type * as HttpBody from "../HttpBody.ts"
3
+
4
+ /** @internal */
5
+ export const updateHeaders = (headers: Headers.Headers, body: HttpBody.HttpBody): Headers.Headers => {
6
+ if (body._tag === "Empty" || body._tag === "FormData") {
7
+ return Headers.remove(Headers.remove(headers, "content-type"), "content-length")
8
+ }
9
+ headers = body.contentType === undefined
10
+ ? Headers.remove(headers, "content-type")
11
+ : Headers.set(headers, "content-type", body.contentType)
12
+ return body.contentLength === undefined
13
+ ? Headers.remove(headers, "content-length")
14
+ : Headers.set(headers, "content-length", body.contentLength.toString())
15
+ }
@@ -15,7 +15,6 @@ import { type Pipeable, pipeArguments } from "../../Pipeable.ts"
15
15
  import * as Predicate from "../../Predicate.ts"
16
16
  import * as Record from "../../Record.ts"
17
17
  import type * as Schema from "../../Schema.ts"
18
- import type * as SchemaAST from "../../SchemaAST.ts"
19
18
  import type { PathInput } from "../http/HttpRouter.ts"
20
19
  import * as HttpApiEndpoint from "./HttpApiEndpoint.ts"
21
20
  import type * as HttpApiGroup from "./HttpApiGroup.ts"
@@ -290,11 +289,11 @@ export const reflect = <Id extends string, Groups extends HttpApiGroup.Constrain
290
289
  mergedAnnotations: Context.merge(groupAnnotations, endpoint.annotations),
291
290
  successes: extractResponseContent(
292
291
  HttpApiEndpoint.getSuccessSchemas(endpoint),
293
- HttpApiSchema.getStatusSuccess
292
+ HttpApiSchema.getStatusSuccessSchema
294
293
  ),
295
294
  errors: extractResponseContent(
296
295
  HttpApiEndpoint.getErrorSchemas(endpoint),
297
- HttpApiSchema.getStatusError
296
+ HttpApiSchema.getStatusErrorSchema
298
297
  )
299
298
  })
300
299
  }
@@ -305,7 +304,7 @@ export const reflect = <Id extends string, Groups extends HttpApiGroup.Constrain
305
304
 
306
305
  const extractResponseContent = (
307
306
  schemas: Array<Schema.Top>,
308
- getStatus: (ast: SchemaAST.AST) => number
307
+ getStatus: (schema: Schema.Constraint) => number
309
308
  ): ReadonlyMap<number, [Schema.Top, ...Array<Schema.Top>]> => {
310
309
  const map = new Map<number, [Schema.Top, ...Array<Schema.Top>]>()
311
310
 
@@ -314,9 +313,9 @@ const extractResponseContent = (
314
313
  return map
315
314
 
316
315
  function add(schema: Schema.Top) {
317
- if (HttpApiSchema.isStreamSchema(schema)) return
318
- const ast = schema.ast
319
- const status = getStatus(ast)
316
+ const body = HttpApiSchema.isWithHeaders(schema) ? schema.schema : schema
317
+ if (HttpApiSchema.isStreamSchema(body)) return
318
+ const status = getStatus(schema)
320
319
  const schemas = map.get(status)
321
320
  if (schemas === undefined) {
322
321
  map.set(status, [schema])