effect 4.0.6 → 4.1.0

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 (978) hide show
  1. package/README.md +1 -1
  2. package/dist/Arbitrary.d.ts +10 -2
  3. package/dist/Arbitrary.d.ts.map +1 -1
  4. package/dist/Arbitrary.js +2 -1
  5. package/dist/Arbitrary.js.map +1 -1
  6. package/dist/BigDecimal.d.ts.map +1 -1
  7. package/dist/BigDecimal.js +3 -0
  8. package/dist/BigDecimal.js.map +1 -1
  9. package/dist/Channel.d.ts +12 -6
  10. package/dist/Channel.d.ts.map +1 -1
  11. package/dist/Channel.js +30 -9
  12. package/dist/Channel.js.map +1 -1
  13. package/dist/Config.d.ts +7 -1
  14. package/dist/Config.d.ts.map +1 -1
  15. package/dist/Config.js.map +1 -1
  16. package/dist/Context.d.ts +18 -1
  17. package/dist/Context.d.ts.map +1 -1
  18. package/dist/Context.js +27 -8
  19. package/dist/Context.js.map +1 -1
  20. package/dist/Cron.d.ts +81 -11
  21. package/dist/Cron.d.ts.map +1 -1
  22. package/dist/Cron.js +101 -26
  23. package/dist/Cron.js.map +1 -1
  24. package/dist/Data.d.ts +54 -235
  25. package/dist/Data.d.ts.map +1 -1
  26. package/dist/Data.js.map +1 -1
  27. package/dist/Duration.d.ts +78 -0
  28. package/dist/Duration.d.ts.map +1 -1
  29. package/dist/Duration.js +123 -0
  30. package/dist/Duration.js.map +1 -1
  31. package/dist/Effect.d.ts +165 -8
  32. package/dist/Effect.d.ts.map +1 -1
  33. package/dist/Effect.js +12 -2
  34. package/dist/Effect.js.map +1 -1
  35. package/dist/Equal.d.ts.map +1 -1
  36. package/dist/Equal.js +8 -1
  37. package/dist/Equal.js.map +1 -1
  38. package/dist/Exit.d.ts +3 -3
  39. package/dist/Exit.d.ts.map +1 -1
  40. package/dist/Exit.js.map +1 -1
  41. package/dist/FileSystem.d.ts +59 -4
  42. package/dist/FileSystem.d.ts.map +1 -1
  43. package/dist/FileSystem.js +9 -2
  44. package/dist/FileSystem.js.map +1 -1
  45. package/dist/Formatter.d.ts.map +1 -1
  46. package/dist/Formatter.js +27 -13
  47. package/dist/Formatter.js.map +1 -1
  48. package/dist/Glob.d.ts +165 -0
  49. package/dist/Glob.d.ts.map +1 -0
  50. package/dist/Glob.js +127 -0
  51. package/dist/Glob.js.map +1 -0
  52. package/dist/Hash.d.ts.map +1 -1
  53. package/dist/Hash.js +4 -1
  54. package/dist/Hash.js.map +1 -1
  55. package/dist/JsonPatch.js +4 -0
  56. package/dist/JsonPatch.js.map +1 -1
  57. package/dist/JsonSchema.d.ts.map +1 -1
  58. package/dist/JsonSchema.js +13 -40
  59. package/dist/JsonSchema.js.map +1 -1
  60. package/dist/Match.d.ts +86 -0
  61. package/dist/Match.d.ts.map +1 -1
  62. package/dist/Match.js +72 -0
  63. package/dist/Match.js.map +1 -1
  64. package/dist/Metric.d.ts +3 -3
  65. package/dist/MutableList.d.ts +5 -2
  66. package/dist/MutableList.d.ts.map +1 -1
  67. package/dist/MutableList.js +7 -5
  68. package/dist/MutableList.js.map +1 -1
  69. package/dist/MutableRef.d.ts.map +1 -1
  70. package/dist/MutableRef.js +7 -0
  71. package/dist/MutableRef.js.map +1 -1
  72. package/dist/PartitionedSemaphore.d.ts +2 -1
  73. package/dist/PartitionedSemaphore.d.ts.map +1 -1
  74. package/dist/PartitionedSemaphore.js +22 -12
  75. package/dist/PartitionedSemaphore.js.map +1 -1
  76. package/dist/Pool.d.ts +51 -0
  77. package/dist/Pool.d.ts.map +1 -1
  78. package/dist/Pool.js +136 -36
  79. package/dist/Pool.js.map +1 -1
  80. package/dist/PubSub.d.ts.map +1 -1
  81. package/dist/PubSub.js +5 -6
  82. package/dist/PubSub.js.map +1 -1
  83. package/dist/Random.d.ts.map +1 -1
  84. package/dist/Random.js +3 -3
  85. package/dist/Random.js.map +1 -1
  86. package/dist/RcMap.d.ts.map +1 -1
  87. package/dist/RcMap.js +8 -2
  88. package/dist/RcMap.js.map +1 -1
  89. package/dist/Ref.d.ts.map +1 -1
  90. package/dist/Ref.js +8 -0
  91. package/dist/Ref.js.map +1 -1
  92. package/dist/Schedule.d.ts +18 -1
  93. package/dist/Schedule.d.ts.map +1 -1
  94. package/dist/Schedule.js +8 -3
  95. package/dist/Schedule.js.map +1 -1
  96. package/dist/Schema.d.ts +690 -49
  97. package/dist/Schema.d.ts.map +1 -1
  98. package/dist/Schema.js +687 -28
  99. package/dist/Schema.js.map +1 -1
  100. package/dist/SchemaAST.d.ts +4 -2
  101. package/dist/SchemaAST.d.ts.map +1 -1
  102. package/dist/SchemaAST.js +14 -17
  103. package/dist/SchemaAST.js.map +1 -1
  104. package/dist/SchemaGetter.d.ts +6 -1
  105. package/dist/SchemaGetter.d.ts.map +1 -1
  106. package/dist/SchemaGetter.js +22 -11
  107. package/dist/SchemaGetter.js.map +1 -1
  108. package/dist/SchemaParser.d.ts.map +1 -1
  109. package/dist/SchemaParser.js +48 -22
  110. package/dist/SchemaParser.js.map +1 -1
  111. package/dist/SchemaRepresentation.d.ts +33 -10
  112. package/dist/SchemaRepresentation.d.ts.map +1 -1
  113. package/dist/SchemaRepresentation.js +39 -13
  114. package/dist/SchemaRepresentation.js.map +1 -1
  115. package/dist/SchemaTransformation.d.ts +12 -4
  116. package/dist/SchemaTransformation.d.ts.map +1 -1
  117. package/dist/SchemaTransformation.js +15 -5
  118. package/dist/SchemaTransformation.js.map +1 -1
  119. package/dist/ScopedCache.d.ts.map +1 -1
  120. package/dist/ScopedCache.js +5 -7
  121. package/dist/ScopedCache.js.map +1 -1
  122. package/dist/Semaphore.d.ts +130 -0
  123. package/dist/Semaphore.d.ts.map +1 -1
  124. package/dist/Semaphore.js +94 -35
  125. package/dist/Semaphore.js.map +1 -1
  126. package/dist/Sink.d.ts.map +1 -1
  127. package/dist/Sink.js +7 -2
  128. package/dist/Sink.js.map +1 -1
  129. package/dist/Stream.d.ts +13 -4
  130. package/dist/Stream.d.ts.map +1 -1
  131. package/dist/Stream.js +31 -10
  132. package/dist/Stream.js.map +1 -1
  133. package/dist/String.d.ts +3 -0
  134. package/dist/String.d.ts.map +1 -1
  135. package/dist/String.js +3 -0
  136. package/dist/String.js.map +1 -1
  137. package/dist/Terminal.d.ts +18 -1
  138. package/dist/Terminal.d.ts.map +1 -1
  139. package/dist/Terminal.js +1 -1
  140. package/dist/Terminal.js.map +1 -1
  141. package/dist/Tracer.d.ts +11 -1
  142. package/dist/Tracer.d.ts.map +1 -1
  143. package/dist/Tracer.js +6 -1
  144. package/dist/Tracer.js.map +1 -1
  145. package/dist/ai/AiError.d.ts +43 -116
  146. package/dist/ai/AiError.d.ts.map +1 -1
  147. package/dist/ai/AiError.js +53 -72
  148. package/dist/ai/AiError.js.map +1 -1
  149. package/dist/ai/Decision.d.ts +196 -15
  150. package/dist/ai/Decision.d.ts.map +1 -1
  151. package/dist/ai/Decision.js +130 -0
  152. package/dist/ai/Decision.js.map +1 -1
  153. package/dist/ai/DecisionModel.d.ts +54 -13
  154. package/dist/ai/DecisionModel.d.ts.map +1 -1
  155. package/dist/ai/DecisionModel.js +123 -12
  156. package/dist/ai/DecisionModel.js.map +1 -1
  157. package/dist/ai/LanguageModel.d.ts.map +1 -1
  158. package/dist/ai/LanguageModel.js +9 -0
  159. package/dist/ai/LanguageModel.js.map +1 -1
  160. package/dist/ai/McpSchema.d.ts +110 -110
  161. package/dist/ai/McpSchema.d.ts.map +1 -1
  162. package/dist/ai/McpServer.d.ts +630 -29
  163. package/dist/ai/McpServer.d.ts.map +1 -1
  164. package/dist/ai/McpServer.js +583 -131
  165. package/dist/ai/McpServer.js.map +1 -1
  166. package/dist/ai/McpTest.d.ts +130 -0
  167. package/dist/ai/McpTest.d.ts.map +1 -0
  168. package/dist/ai/McpTest.js +237 -0
  169. package/dist/ai/McpTest.js.map +1 -0
  170. package/dist/ai/Prompt.d.ts +52 -0
  171. package/dist/ai/Prompt.d.ts.map +1 -1
  172. package/dist/ai/Prompt.js +38 -0
  173. package/dist/ai/Prompt.js.map +1 -1
  174. package/dist/ai/Response.d.ts +17 -28
  175. package/dist/ai/Response.d.ts.map +1 -1
  176. package/dist/ai/Response.js +5 -10
  177. package/dist/ai/Response.js.map +1 -1
  178. package/dist/ai/Tool.d.ts +43 -1
  179. package/dist/ai/Tool.d.ts.map +1 -1
  180. package/dist/ai/Tool.js +5 -2
  181. package/dist/ai/Tool.js.map +1 -1
  182. package/dist/ai/Toolkit.d.ts.map +1 -1
  183. package/dist/ai/Toolkit.js +8 -1
  184. package/dist/ai/Toolkit.js.map +1 -1
  185. package/dist/ai/index.d.ts +5 -0
  186. package/dist/ai/index.d.ts.map +1 -1
  187. package/dist/ai/index.js +5 -0
  188. package/dist/ai/index.js.map +1 -1
  189. package/dist/ai/internal/mcpCore.js +17 -12
  190. package/dist/ai/internal/mcpCore.js.map +1 -1
  191. package/dist/ai/internal/mcpProtocol/v2024_11_05.js +4 -5
  192. package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
  193. package/dist/ai/internal/mcpProtocol/v2025_03_26.js +4 -5
  194. package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
  195. package/dist/ai/internal/mcpProtocol/v2025_06_18.js +4 -5
  196. package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
  197. package/dist/ai/internal/mcpProtocol/v2025_11_25.js +4 -5
  198. package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
  199. package/dist/ai/internal/mcpProtocol/v2026_07_28.js +18 -10
  200. package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
  201. package/dist/ai/internal/mcpProtocol.js +13 -0
  202. package/dist/ai/internal/mcpProtocol.js.map +1 -1
  203. package/dist/ai/internal/mcpRuntime.js +5 -3
  204. package/dist/ai/internal/mcpRuntime.js.map +1 -1
  205. package/dist/ai/internal/mcpStatefulRuntime.js +6 -1
  206. package/dist/ai/internal/mcpStatefulRuntime.js.map +1 -1
  207. package/dist/cli/Argument.d.ts +21 -0
  208. package/dist/cli/Argument.d.ts.map +1 -1
  209. package/dist/cli/Argument.js +7 -0
  210. package/dist/cli/Argument.js.map +1 -1
  211. package/dist/cli/CliError.d.ts +78 -0
  212. package/dist/cli/CliError.d.ts.map +1 -1
  213. package/dist/cli/CliError.js +65 -3
  214. package/dist/cli/CliError.js.map +1 -1
  215. package/dist/cli/CliOutput.d.ts +220 -7
  216. package/dist/cli/CliOutput.d.ts.map +1 -1
  217. package/dist/cli/CliOutput.js +156 -43
  218. package/dist/cli/CliOutput.js.map +1 -1
  219. package/dist/cli/Command.d.ts +47 -16
  220. package/dist/cli/Command.d.ts.map +1 -1
  221. package/dist/cli/Command.js +67 -29
  222. package/dist/cli/Command.js.map +1 -1
  223. package/dist/cli/Completions.d.ts +58 -0
  224. package/dist/cli/Completions.d.ts.map +1 -1
  225. package/dist/cli/Completions.js +49 -9
  226. package/dist/cli/Completions.js.map +1 -1
  227. package/dist/cli/Flag.d.ts +122 -0
  228. package/dist/cli/Flag.d.ts.map +1 -1
  229. package/dist/cli/Flag.js +42 -0
  230. package/dist/cli/Flag.js.map +1 -1
  231. package/dist/cli/GlobalFlag.d.ts.map +1 -1
  232. package/dist/cli/GlobalFlag.js +15 -7
  233. package/dist/cli/GlobalFlag.js.map +1 -1
  234. package/dist/cli/HelpDoc.d.ts +15 -1
  235. package/dist/cli/HelpDoc.d.ts.map +1 -1
  236. package/dist/cli/Param.d.ts +15 -0
  237. package/dist/cli/Param.d.ts.map +1 -1
  238. package/dist/cli/Param.js +23 -2
  239. package/dist/cli/Param.js.map +1 -1
  240. package/dist/cli/Primitive.d.ts +14 -0
  241. package/dist/cli/Primitive.d.ts.map +1 -1
  242. package/dist/cli/Primitive.js +15 -1
  243. package/dist/cli/Primitive.js.map +1 -1
  244. package/dist/cli/Prompt.d.ts +1 -0
  245. package/dist/cli/Prompt.d.ts.map +1 -1
  246. package/dist/cli/Prompt.js +1 -0
  247. package/dist/cli/Prompt.js.map +1 -1
  248. package/dist/cli/TerminalCapabilities.d.ts +3 -2
  249. package/dist/cli/TerminalCapabilities.d.ts.map +1 -1
  250. package/dist/cli/TerminalCapabilities.js +3 -1
  251. package/dist/cli/TerminalCapabilities.js.map +1 -1
  252. package/dist/cli/internal/completions/bash.js +73 -27
  253. package/dist/cli/internal/completions/bash.js.map +1 -1
  254. package/dist/cli/internal/help.d.ts.map +1 -1
  255. package/dist/cli/internal/help.js +17 -10
  256. package/dist/cli/internal/help.js.map +1 -1
  257. package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  258. package/dist/cluster/ClusterWorkflowEngine.js +45 -10
  259. package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
  260. package/dist/cluster/MessageStorage.d.ts +23 -45
  261. package/dist/cluster/MessageStorage.d.ts.map +1 -1
  262. package/dist/cluster/MessageStorage.js +6 -7
  263. package/dist/cluster/MessageStorage.js.map +1 -1
  264. package/dist/cluster/Sharding.d.ts.map +1 -1
  265. package/dist/cluster/Sharding.js +151 -49
  266. package/dist/cluster/Sharding.js.map +1 -1
  267. package/dist/cluster/ShardingConfig.d.ts +76 -0
  268. package/dist/cluster/ShardingConfig.d.ts.map +1 -1
  269. package/dist/cluster/ShardingConfig.js +4 -0
  270. package/dist/cluster/ShardingConfig.js.map +1 -1
  271. package/dist/cluster/SingleRunner.d.ts +3 -3
  272. package/dist/cluster/SingleRunner.d.ts.map +1 -1
  273. package/dist/cluster/SingleRunner.js +1 -1
  274. package/dist/cluster/Snowflake.d.ts.map +1 -1
  275. package/dist/cluster/Snowflake.js +3 -7
  276. package/dist/cluster/Snowflake.js.map +1 -1
  277. package/dist/cluster/SqlMessageStorage.d.ts +37 -6
  278. package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
  279. package/dist/cluster/SqlMessageStorage.js +34 -7
  280. package/dist/cluster/SqlMessageStorage.js.map +1 -1
  281. package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
  282. package/dist/cluster/SqlRunnerStorage.js +109 -46
  283. package/dist/cluster/SqlRunnerStorage.js.map +1 -1
  284. package/dist/cluster/internal/entityManager.js +54 -20
  285. package/dist/cluster/internal/entityManager.js.map +1 -1
  286. package/dist/crypto/Aead.d.ts +322 -0
  287. package/dist/crypto/Aead.d.ts.map +1 -0
  288. package/dist/crypto/Aead.js +331 -0
  289. package/dist/crypto/Aead.js.map +1 -0
  290. package/dist/crypto/Cipher.d.ts +235 -0
  291. package/dist/crypto/Cipher.d.ts.map +1 -0
  292. package/dist/crypto/Cipher.js +233 -0
  293. package/dist/crypto/Cipher.js.map +1 -0
  294. package/dist/crypto/CryptoError.d.ts +212 -0
  295. package/dist/crypto/CryptoError.d.ts.map +1 -0
  296. package/dist/crypto/CryptoError.js +202 -0
  297. package/dist/crypto/CryptoError.js.map +1 -0
  298. package/dist/crypto/Digest.d.ts +143 -0
  299. package/dist/crypto/Digest.d.ts.map +1 -0
  300. package/dist/crypto/Digest.js +146 -0
  301. package/dist/crypto/Digest.js.map +1 -0
  302. package/dist/crypto/Kdf.d.ts +220 -0
  303. package/dist/crypto/Kdf.d.ts.map +1 -0
  304. package/dist/crypto/Kdf.js +212 -0
  305. package/dist/crypto/Kdf.js.map +1 -0
  306. package/dist/crypto/KeyAgreement.d.ts +323 -0
  307. package/dist/crypto/KeyAgreement.d.ts.map +1 -0
  308. package/dist/crypto/KeyAgreement.js +303 -0
  309. package/dist/crypto/KeyAgreement.js.map +1 -0
  310. package/dist/crypto/KeyFormat.d.ts +309 -0
  311. package/dist/crypto/KeyFormat.d.ts.map +1 -0
  312. package/dist/crypto/KeyFormat.js +556 -0
  313. package/dist/crypto/KeyFormat.js.map +1 -0
  314. package/dist/crypto/KeyWrap.d.ts +389 -0
  315. package/dist/crypto/KeyWrap.d.ts.map +1 -0
  316. package/dist/crypto/KeyWrap.js +381 -0
  317. package/dist/crypto/KeyWrap.js.map +1 -0
  318. package/dist/crypto/Mac.d.ts +277 -0
  319. package/dist/crypto/Mac.d.ts.map +1 -0
  320. package/dist/crypto/Mac.js +288 -0
  321. package/dist/crypto/Mac.js.map +1 -0
  322. package/dist/crypto/SecureRandom.d.ts +340 -0
  323. package/dist/crypto/SecureRandom.d.ts.map +1 -0
  324. package/dist/crypto/SecureRandom.js +257 -0
  325. package/dist/crypto/SecureRandom.js.map +1 -0
  326. package/dist/crypto/Signature.d.ts +448 -0
  327. package/dist/crypto/Signature.d.ts.map +1 -0
  328. package/dist/crypto/Signature.js +484 -0
  329. package/dist/crypto/Signature.js.map +1 -0
  330. package/dist/crypto/WebCrypto.d.ts +61 -0
  331. package/dist/crypto/WebCrypto.d.ts.map +1 -0
  332. package/dist/crypto/WebCrypto.js +63 -0
  333. package/dist/crypto/WebCrypto.js.map +1 -0
  334. package/dist/crypto/index.d.ts +65 -0
  335. package/dist/crypto/index.d.ts.map +1 -0
  336. package/dist/crypto/index.js +66 -0
  337. package/dist/crypto/index.js.map +1 -0
  338. package/dist/crypto/internal/asymmetric.d.ts +2 -0
  339. package/dist/crypto/internal/asymmetric.d.ts.map +1 -0
  340. package/dist/crypto/internal/asymmetric.js +210 -0
  341. package/dist/crypto/internal/asymmetric.js.map +1 -0
  342. package/dist/crypto/internal/chacha.d.ts +46 -0
  343. package/dist/crypto/internal/chacha.d.ts.map +1 -0
  344. package/dist/crypto/internal/chacha.js +885 -0
  345. package/dist/crypto/internal/chacha.js.map +1 -0
  346. package/dist/crypto/internal/der.d.ts +6 -0
  347. package/dist/crypto/internal/der.d.ts.map +1 -0
  348. package/dist/crypto/internal/der.js +86 -0
  349. package/dist/crypto/internal/der.js.map +1 -0
  350. package/dist/crypto/internal/digest.d.ts +2 -0
  351. package/dist/crypto/internal/digest.d.ts.map +1 -0
  352. package/dist/crypto/internal/digest.js +15 -0
  353. package/dist/crypto/internal/digest.js.map +1 -0
  354. package/dist/crypto/internal/key.d.ts +2 -0
  355. package/dist/crypto/internal/key.d.ts.map +1 -0
  356. package/dist/crypto/internal/key.js +170 -0
  357. package/dist/crypto/internal/key.js.map +1 -0
  358. package/dist/crypto/internal/md5.d.ts +39 -0
  359. package/dist/crypto/internal/md5.d.ts.map +1 -0
  360. package/dist/crypto/internal/md5.js +179 -0
  361. package/dist/crypto/internal/md5.js.map +1 -0
  362. package/dist/crypto/internal/webCrypto.d.ts +2 -0
  363. package/dist/crypto/internal/webCrypto.d.ts.map +1 -0
  364. package/dist/crypto/internal/webCrypto.js +111 -0
  365. package/dist/crypto/internal/webCrypto.js.map +1 -0
  366. package/dist/devtools/DevToolsClient.d.ts.map +1 -1
  367. package/dist/devtools/DevToolsClient.js +2 -0
  368. package/dist/devtools/DevToolsClient.js.map +1 -1
  369. package/dist/encoding/Base64.js +36 -0
  370. package/dist/encoding/Base64.js.map +1 -1
  371. package/dist/encoding/Base64Url.d.ts.map +1 -1
  372. package/dist/encoding/Base64Url.js +3 -2
  373. package/dist/encoding/Base64Url.js.map +1 -1
  374. package/dist/encoding/Csv.d.ts +608 -0
  375. package/dist/encoding/Csv.d.ts.map +1 -0
  376. package/dist/encoding/Csv.js +718 -0
  377. package/dist/encoding/Csv.js.map +1 -0
  378. package/dist/encoding/Hex.d.ts +3 -2
  379. package/dist/encoding/Hex.d.ts.map +1 -1
  380. package/dist/encoding/Hex.js +3 -2
  381. package/dist/encoding/Hex.js.map +1 -1
  382. package/dist/encoding/SchemaBinary.d.ts.map +1 -1
  383. package/dist/encoding/SchemaBinary.js +42 -4
  384. package/dist/encoding/SchemaBinary.js.map +1 -1
  385. package/dist/encoding/Sse.d.ts.map +1 -1
  386. package/dist/encoding/Sse.js +3 -3
  387. package/dist/encoding/Sse.js.map +1 -1
  388. package/dist/encoding/Toml.d.ts +17 -3
  389. package/dist/encoding/Toml.d.ts.map +1 -1
  390. package/dist/encoding/Toml.js +124 -31
  391. package/dist/encoding/Toml.js.map +1 -1
  392. package/dist/encoding/Yaml.d.ts +8 -1
  393. package/dist/encoding/Yaml.d.ts.map +1 -1
  394. package/dist/encoding/Yaml.js +54 -18
  395. package/dist/encoding/Yaml.js.map +1 -1
  396. package/dist/encoding/index.d.ts +5 -0
  397. package/dist/encoding/index.d.ts.map +1 -1
  398. package/dist/encoding/index.js +5 -0
  399. package/dist/encoding/index.js.map +1 -1
  400. package/dist/eventlog/EventJournal.d.ts.map +1 -1
  401. package/dist/eventlog/EventJournal.js +6 -3
  402. package/dist/eventlog/EventJournal.js.map +1 -1
  403. package/dist/eventlog/EventLog.d.ts +119 -4
  404. package/dist/eventlog/EventLog.d.ts.map +1 -1
  405. package/dist/eventlog/EventLog.js +200 -12
  406. package/dist/eventlog/EventLog.js.map +1 -1
  407. package/dist/eventlog/EventLogEncryption.d.ts +41 -4
  408. package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
  409. package/dist/eventlog/EventLogEncryption.js +83 -64
  410. package/dist/eventlog/EventLogEncryption.js.map +1 -1
  411. package/dist/eventlog/EventLogMessage.d.ts +279 -0
  412. package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
  413. package/dist/eventlog/EventLogMessage.js +217 -1
  414. package/dist/eventlog/EventLogMessage.js.map +1 -1
  415. package/dist/eventlog/EventLogRemote.d.ts +200 -28
  416. package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
  417. package/dist/eventlog/EventLogRemote.js +186 -16
  418. package/dist/eventlog/EventLogRemote.js.map +1 -1
  419. package/dist/eventlog/EventLogServer.d.ts +3 -0
  420. package/dist/eventlog/EventLogServer.d.ts.map +1 -1
  421. package/dist/eventlog/EventLogServer.js +18 -10
  422. package/dist/eventlog/EventLogServer.js.map +1 -1
  423. package/dist/eventlog/EventLogServerEncrypted.d.ts +326 -5
  424. package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
  425. package/dist/eventlog/EventLogServerEncrypted.js +769 -14
  426. package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
  427. package/dist/eventlog/EventLogSessionAuth.d.ts +5 -3
  428. package/dist/eventlog/EventLogSessionAuth.d.ts.map +1 -1
  429. package/dist/eventlog/EventLogSessionAuth.js +41 -64
  430. package/dist/eventlog/EventLogSessionAuth.js.map +1 -1
  431. package/dist/eventlog/EventRow.d.ts +4 -0
  432. package/dist/eventlog/EventRow.d.ts.map +1 -1
  433. package/dist/eventlog/EventRow.js +12 -2
  434. package/dist/eventlog/EventRow.js.map +1 -1
  435. package/dist/eventlog/SqlEventJournal.d.ts.map +1 -1
  436. package/dist/eventlog/SqlEventJournal.js +47 -27
  437. package/dist/eventlog/SqlEventJournal.js.map +1 -1
  438. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +21 -5
  439. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
  440. package/dist/eventlog/SqlEventLogServerEncrypted.js +1048 -113
  441. package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
  442. package/dist/eventlog/SqlEventLogServerUnencrypted.js +2 -2
  443. package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
  444. package/dist/eventlog/internal/batches.d.ts +12 -0
  445. package/dist/eventlog/internal/batches.d.ts.map +1 -0
  446. package/dist/eventlog/internal/batches.js +26 -0
  447. package/dist/eventlog/internal/batches.js.map +1 -0
  448. package/dist/eventlog/internal/compaction.d.ts +38 -0
  449. package/dist/eventlog/internal/compaction.d.ts.map +1 -0
  450. package/dist/eventlog/internal/compaction.js +33 -0
  451. package/dist/eventlog/internal/compaction.js.map +1 -0
  452. package/dist/eventlog/internal/conflicts.d.ts +0 -1
  453. package/dist/eventlog/internal/conflicts.d.ts.map +1 -1
  454. package/dist/eventlog/internal/conflicts.js +0 -3
  455. package/dist/eventlog/internal/conflicts.js.map +1 -1
  456. package/dist/eventlog/internal/identityRootSecretDerivation.js +66 -67
  457. package/dist/eventlog/internal/identityRootSecretDerivation.js.map +1 -1
  458. package/dist/eventlog/internal/remoteCompaction.d.ts +31 -0
  459. package/dist/eventlog/internal/remoteCompaction.d.ts.map +1 -0
  460. package/dist/eventlog/internal/remoteCompaction.js +76 -0
  461. package/dist/eventlog/internal/remoteCompaction.js.map +1 -0
  462. package/dist/http/Cookies.d.ts +172 -0
  463. package/dist/http/Cookies.d.ts.map +1 -1
  464. package/dist/http/Cookies.js +153 -10
  465. package/dist/http/Cookies.js.map +1 -1
  466. package/dist/http/FetchHttpClient.d.ts +26 -2
  467. package/dist/http/FetchHttpClient.d.ts.map +1 -1
  468. package/dist/http/FetchHttpClient.js +78 -15
  469. package/dist/http/FetchHttpClient.js.map +1 -1
  470. package/dist/http/HttpClient.d.ts +502 -8
  471. package/dist/http/HttpClient.d.ts.map +1 -1
  472. package/dist/http/HttpClient.js +296 -12
  473. package/dist/http/HttpClient.js.map +1 -1
  474. package/dist/http/HttpClientError.d.ts +8 -1
  475. package/dist/http/HttpClientError.d.ts.map +1 -1
  476. package/dist/http/HttpClientError.js +37 -1
  477. package/dist/http/HttpClientError.js.map +1 -1
  478. package/dist/http/HttpClientRequest.d.ts +9 -5
  479. package/dist/http/HttpClientRequest.d.ts.map +1 -1
  480. package/dist/http/HttpClientRequest.js +3 -4
  481. package/dist/http/HttpClientRequest.js.map +1 -1
  482. package/dist/http/HttpClientResponse.d.ts.map +1 -1
  483. package/dist/http/HttpClientResponse.js +3 -2
  484. package/dist/http/HttpClientResponse.js.map +1 -1
  485. package/dist/http/HttpMethod.d.ts +7 -1
  486. package/dist/http/HttpMethod.d.ts.map +1 -1
  487. package/dist/http/HttpMethod.js +3 -8
  488. package/dist/http/HttpMethod.js.map +1 -1
  489. package/dist/http/HttpMiddleware.d.ts +1 -1
  490. package/dist/http/HttpMiddleware.d.ts.map +1 -1
  491. package/dist/http/HttpMiddleware.js +14 -16
  492. package/dist/http/HttpMiddleware.js.map +1 -1
  493. package/dist/http/HttpRouter.d.ts.map +1 -1
  494. package/dist/http/HttpRouter.js +2 -1
  495. package/dist/http/HttpRouter.js.map +1 -1
  496. package/dist/http/HttpServerError.js +2 -2
  497. package/dist/http/HttpServerError.js.map +1 -1
  498. package/dist/http/HttpServerRequest.d.ts +11 -3
  499. package/dist/http/HttpServerRequest.d.ts.map +1 -1
  500. package/dist/http/HttpServerRequest.js +77 -25
  501. package/dist/http/HttpServerRequest.js.map +1 -1
  502. package/dist/http/HttpServerResponse.d.ts.map +1 -1
  503. package/dist/http/HttpServerResponse.js +3 -2
  504. package/dist/http/HttpServerResponse.js.map +1 -1
  505. package/dist/http/HttpStaticServer.d.ts.map +1 -1
  506. package/dist/http/HttpStaticServer.js +48 -21
  507. package/dist/http/HttpStaticServer.js.map +1 -1
  508. package/dist/http/HttpTraceContext.d.ts +2 -1
  509. package/dist/http/HttpTraceContext.d.ts.map +1 -1
  510. package/dist/http/HttpTraceContext.js +7 -5
  511. package/dist/http/HttpTraceContext.js.map +1 -1
  512. package/dist/http/MultipartParser/internal/contentType.js +3 -3
  513. package/dist/http/ProblemDetails.d.ts +96 -0
  514. package/dist/http/ProblemDetails.d.ts.map +1 -0
  515. package/dist/http/ProblemDetails.js +98 -0
  516. package/dist/http/ProblemDetails.js.map +1 -0
  517. package/dist/http/UrlParams.d.ts +3 -1
  518. package/dist/http/UrlParams.d.ts.map +1 -1
  519. package/dist/http/UrlParams.js +4 -2
  520. package/dist/http/UrlParams.js.map +1 -1
  521. package/dist/http/index.d.ts +5 -0
  522. package/dist/http/index.d.ts.map +1 -1
  523. package/dist/http/index.js +5 -0
  524. package/dist/http/index.js.map +1 -1
  525. package/dist/http/internal/compression.js +4 -5
  526. package/dist/http/internal/compression.js.map +1 -1
  527. package/dist/http/internal/decompression.js +6 -2
  528. package/dist/http/internal/decompression.js.map +1 -1
  529. package/dist/http/internal/httpBody.js +8 -1
  530. package/dist/http/internal/httpBody.js.map +1 -1
  531. package/dist/http/internal/urlParams.js +33 -0
  532. package/dist/http/internal/urlParams.js.map +1 -1
  533. package/dist/http-api/HttpApi.d.ts +3 -6
  534. package/dist/http-api/HttpApi.d.ts.map +1 -1
  535. package/dist/http-api/HttpApi.js +3 -6
  536. package/dist/http-api/HttpApi.js.map +1 -1
  537. package/dist/http-api/HttpApiBuilder.d.ts.map +1 -1
  538. package/dist/http-api/HttpApiBuilder.js +43 -13
  539. package/dist/http-api/HttpApiBuilder.js.map +1 -1
  540. package/dist/http-api/HttpApiClient.d.ts +140 -7
  541. package/dist/http-api/HttpApiClient.d.ts.map +1 -1
  542. package/dist/http-api/HttpApiClient.js +193 -44
  543. package/dist/http-api/HttpApiClient.js.map +1 -1
  544. package/dist/http-api/HttpApiEndpoint.d.ts +24 -7
  545. package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
  546. package/dist/http-api/HttpApiEndpoint.js +123 -32
  547. package/dist/http-api/HttpApiEndpoint.js.map +1 -1
  548. package/dist/http-api/HttpApiError.d.ts +185 -13
  549. package/dist/http-api/HttpApiError.d.ts.map +1 -1
  550. package/dist/http-api/HttpApiError.js +128 -0
  551. package/dist/http-api/HttpApiError.js.map +1 -1
  552. package/dist/http-api/HttpApiMiddleware.d.ts +64 -17
  553. package/dist/http-api/HttpApiMiddleware.d.ts.map +1 -1
  554. package/dist/http-api/HttpApiMiddleware.js +85 -1
  555. package/dist/http-api/HttpApiMiddleware.js.map +1 -1
  556. package/dist/http-api/HttpApiSchema.d.ts +142 -33
  557. package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
  558. package/dist/http-api/HttpApiSchema.js +123 -59
  559. package/dist/http-api/HttpApiSchema.js.map +1 -1
  560. package/dist/http-api/HttpApiTest.d.ts.map +1 -1
  561. package/dist/http-api/HttpApiTest.js +3 -2
  562. package/dist/http-api/HttpApiTest.js.map +1 -1
  563. package/dist/http-api/OpenApi.d.ts.map +1 -1
  564. package/dist/http-api/OpenApi.js +25 -16
  565. package/dist/http-api/OpenApi.js.map +1 -1
  566. package/dist/http-api/internal/toCodecHttpProperties.d.ts +2 -0
  567. package/dist/http-api/internal/toCodecHttpProperties.d.ts.map +1 -0
  568. package/dist/http-api/internal/toCodecHttpProperties.js +38 -0
  569. package/dist/http-api/internal/toCodecHttpProperties.js.map +1 -0
  570. package/dist/index.d.ts +5 -5
  571. package/dist/index.d.ts.map +1 -1
  572. package/dist/index.js +5 -5
  573. package/dist/index.js.map +1 -1
  574. package/dist/internal/arbitrary/runner.d.ts.map +1 -1
  575. package/dist/internal/arbitrary/runner.js +120 -44
  576. package/dist/internal/arbitrary/runner.js.map +1 -1
  577. package/dist/internal/core.js +2 -0
  578. package/dist/internal/core.js.map +1 -1
  579. package/dist/internal/effect.js +46 -27
  580. package/dist/internal/effect.js.map +1 -1
  581. package/dist/internal/equal.js +14 -0
  582. package/dist/internal/equal.js.map +1 -1
  583. package/dist/internal/glob.d.ts +2 -0
  584. package/dist/internal/glob.d.ts.map +1 -0
  585. package/dist/internal/glob.js +630 -0
  586. package/dist/internal/glob.js.map +1 -0
  587. package/dist/internal/jsonSchema.d.ts +2 -0
  588. package/dist/internal/jsonSchema.d.ts.map +1 -0
  589. package/dist/internal/jsonSchema.js +28 -0
  590. package/dist/internal/jsonSchema.js.map +1 -0
  591. package/dist/internal/matcher.js +11 -1
  592. package/dist/internal/matcher.js.map +1 -1
  593. package/dist/internal/persistence.js +9 -0
  594. package/dist/internal/persistence.js.map +1 -1
  595. package/dist/internal/rcRef.js +4 -1
  596. package/dist/internal/rcRef.js.map +1 -1
  597. package/dist/internal/schema/compilerRegistry.js +4 -1
  598. package/dist/internal/schema/compilerRegistry.js.map +1 -1
  599. package/dist/internal/schema/content.d.ts +2 -0
  600. package/dist/internal/schema/content.d.ts.map +1 -0
  601. package/dist/internal/schema/content.js +13 -0
  602. package/dist/internal/schema/content.js.map +1 -0
  603. package/dist/internal/schema/fromJsonSchemaDocument.js +173 -185
  604. package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
  605. package/dist/internal/schema/fromRepresentation.js +2 -1
  606. package/dist/internal/schema/fromRepresentation.js.map +1 -1
  607. package/dist/internal/schema/standardSchema.js +8 -2
  608. package/dist/internal/schema/standardSchema.js.map +1 -1
  609. package/dist/internal/schema/toCodeDocument.js +9 -6
  610. package/dist/internal/schema/toCodeDocument.js.map +1 -1
  611. package/dist/internal/schema/toCodec.js +21 -24
  612. package/dist/internal/schema/toCodec.js.map +1 -1
  613. package/dist/internal/schema/toJsonSchemaDocument.js +205 -140
  614. package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
  615. package/dist/internal/schema/toRepresentation.js +107 -129
  616. package/dist/internal/schema/toRepresentation.js.map +1 -1
  617. package/dist/internal/sql.d.ts +2 -0
  618. package/dist/internal/sql.d.ts.map +1 -0
  619. package/dist/internal/sql.js +13 -0
  620. package/dist/internal/sql.js.map +1 -0
  621. package/dist/internal/trie.js +42 -13
  622. package/dist/internal/trie.js.map +1 -1
  623. package/dist/internal/ulid.js +41 -0
  624. package/dist/internal/ulid.js.map +1 -1
  625. package/dist/internal/uuid.js +52 -8
  626. package/dist/internal/uuid.js.map +1 -1
  627. package/dist/internal/version.js +1 -1
  628. package/dist/observability/Otlp.d.ts +15 -4
  629. package/dist/observability/Otlp.d.ts.map +1 -1
  630. package/dist/observability/Otlp.js +10 -0
  631. package/dist/observability/Otlp.js.map +1 -1
  632. package/dist/observability/OtlpProxy.d.ts +154 -0
  633. package/dist/observability/OtlpProxy.d.ts.map +1 -0
  634. package/dist/observability/OtlpProxy.js +235 -0
  635. package/dist/observability/OtlpProxy.js.map +1 -0
  636. package/dist/observability/OtlpResource.d.ts +7 -0
  637. package/dist/observability/OtlpResource.d.ts.map +1 -1
  638. package/dist/observability/OtlpResource.js +11 -1
  639. package/dist/observability/OtlpResource.js.map +1 -1
  640. package/dist/observability/OtlpTracer.d.ts.map +1 -1
  641. package/dist/observability/OtlpTracer.js +4 -0
  642. package/dist/observability/OtlpTracer.js.map +1 -1
  643. package/dist/observability/index.d.ts +5 -0
  644. package/dist/observability/index.d.ts.map +1 -1
  645. package/dist/observability/index.js +5 -0
  646. package/dist/observability/index.js.map +1 -1
  647. package/dist/persistence/CircuitBreaker.d.ts +897 -0
  648. package/dist/persistence/CircuitBreaker.d.ts.map +1 -0
  649. package/dist/persistence/CircuitBreaker.js +1165 -0
  650. package/dist/persistence/CircuitBreaker.js.map +1 -0
  651. package/dist/persistence/KeyValueStore.d.ts +47 -2
  652. package/dist/persistence/KeyValueStore.d.ts.map +1 -1
  653. package/dist/persistence/KeyValueStore.js +129 -18
  654. package/dist/persistence/KeyValueStore.js.map +1 -1
  655. package/dist/persistence/PersistedQueue.d.ts +9 -0
  656. package/dist/persistence/PersistedQueue.d.ts.map +1 -1
  657. package/dist/persistence/PersistedQueue.js +94 -52
  658. package/dist/persistence/PersistedQueue.js.map +1 -1
  659. package/dist/persistence/Persistence.d.ts +10 -4
  660. package/dist/persistence/Persistence.d.ts.map +1 -1
  661. package/dist/persistence/Persistence.js +18 -11
  662. package/dist/persistence/Persistence.js.map +1 -1
  663. package/dist/persistence/Redis.d.ts +78 -2
  664. package/dist/persistence/Redis.d.ts.map +1 -1
  665. package/dist/persistence/Redis.js +62 -7
  666. package/dist/persistence/Redis.js.map +1 -1
  667. package/dist/persistence/index.d.ts +5 -0
  668. package/dist/persistence/index.d.ts.map +1 -1
  669. package/dist/persistence/index.js +5 -0
  670. package/dist/persistence/index.js.map +1 -1
  671. package/dist/process/ChildProcess.d.ts +237 -71
  672. package/dist/process/ChildProcess.d.ts.map +1 -1
  673. package/dist/process/ChildProcess.js +56 -158
  674. package/dist/process/ChildProcess.js.map +1 -1
  675. package/dist/process/ChildProcessSpawner.d.ts +35 -0
  676. package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
  677. package/dist/process/ChildProcessSpawner.js +5 -2
  678. package/dist/process/ChildProcessSpawner.js.map +1 -1
  679. package/dist/process/CommandLine.d.ts +294 -0
  680. package/dist/process/CommandLine.d.ts.map +1 -0
  681. package/dist/process/CommandLine.js +481 -0
  682. package/dist/process/CommandLine.js.map +1 -0
  683. package/dist/process/index.d.ts +5 -0
  684. package/dist/process/index.d.ts.map +1 -1
  685. package/dist/process/index.js +5 -0
  686. package/dist/process/index.js.map +1 -1
  687. package/dist/reactivity/AsyncResult.d.ts +1 -1
  688. package/dist/reactivity/AsyncResult.d.ts.map +1 -1
  689. package/dist/reactivity/Atom.d.ts +2 -1
  690. package/dist/reactivity/Atom.d.ts.map +1 -1
  691. package/dist/reactivity/Atom.js +3 -4
  692. package/dist/reactivity/Atom.js.map +1 -1
  693. package/dist/reactivity/AtomRegistry.js.map +1 -1
  694. package/dist/rpc/RpcClient.d.ts +16 -1
  695. package/dist/rpc/RpcClient.d.ts.map +1 -1
  696. package/dist/rpc/RpcClient.js +59 -24
  697. package/dist/rpc/RpcClient.js.map +1 -1
  698. package/dist/rpc/RpcMessage.d.ts +10 -1
  699. package/dist/rpc/RpcMessage.d.ts.map +1 -1
  700. package/dist/rpc/RpcMessage.js +1 -0
  701. package/dist/rpc/RpcMessage.js.map +1 -1
  702. package/dist/rpc/RpcSerialization.d.ts +14 -0
  703. package/dist/rpc/RpcSerialization.d.ts.map +1 -1
  704. package/dist/rpc/RpcSerialization.js +26 -8
  705. package/dist/rpc/RpcSerialization.js.map +1 -1
  706. package/dist/rpc/RpcServer.d.ts +31 -0
  707. package/dist/rpc/RpcServer.d.ts.map +1 -1
  708. package/dist/rpc/RpcServer.js +139 -56
  709. package/dist/rpc/RpcServer.js.map +1 -1
  710. package/dist/rpc/RpcTest.d.ts +1 -0
  711. package/dist/rpc/RpcTest.d.ts.map +1 -1
  712. package/dist/rpc/RpcTest.js +1 -0
  713. package/dist/rpc/RpcTest.js.map +1 -1
  714. package/dist/schema/Model.d.ts +14 -0
  715. package/dist/schema/Model.d.ts.map +1 -1
  716. package/dist/schema/Model.js +18 -3
  717. package/dist/schema/Model.js.map +1 -1
  718. package/dist/sql/Migrator.d.ts +2 -20
  719. package/dist/sql/Migrator.d.ts.map +1 -1
  720. package/dist/sql/Migrator.js +13 -55
  721. package/dist/sql/Migrator.js.map +1 -1
  722. package/dist/sql/MigratorFileSystem.d.ts +21 -0
  723. package/dist/sql/MigratorFileSystem.d.ts.map +1 -0
  724. package/dist/sql/MigratorFileSystem.js +57 -0
  725. package/dist/sql/MigratorFileSystem.js.map +1 -0
  726. package/dist/sql/SqlClient.d.ts +9 -4
  727. package/dist/sql/SqlClient.d.ts.map +1 -1
  728. package/dist/sql/SqlClient.js +13 -10
  729. package/dist/sql/SqlClient.js.map +1 -1
  730. package/dist/sql/SqlResolver.d.ts +4 -0
  731. package/dist/sql/SqlResolver.d.ts.map +1 -1
  732. package/dist/sql/SqlResolver.js +18 -4
  733. package/dist/sql/SqlResolver.js.map +1 -1
  734. package/dist/sql/Statement.d.ts +27 -6
  735. package/dist/sql/Statement.d.ts.map +1 -1
  736. package/dist/sql/Statement.js +21 -15
  737. package/dist/sql/Statement.js.map +1 -1
  738. package/dist/sql/index.js +1 -1
  739. package/dist/testing/index.d.ts +0 -5
  740. package/dist/testing/index.d.ts.map +1 -1
  741. package/dist/testing/index.js +0 -5
  742. package/dist/testing/index.js.map +1 -1
  743. package/dist/workflow/DurableDeferred.d.ts.map +1 -1
  744. package/dist/workflow/DurableDeferred.js +21 -2
  745. package/dist/workflow/DurableDeferred.js.map +1 -1
  746. package/dist/workflow/internal/crypto.js +9 -8
  747. package/dist/workflow/internal/crypto.js.map +1 -1
  748. package/package.json +3 -1
  749. package/src/Arbitrary.ts +10 -2
  750. package/src/BigDecimal.ts +3 -0
  751. package/src/Channel.ts +64 -29
  752. package/src/Config.ts +7 -1
  753. package/src/Context.ts +34 -10
  754. package/src/Cron.ts +178 -29
  755. package/src/Data.ts +60 -265
  756. package/src/Duration.ts +140 -0
  757. package/src/Effect.ts +915 -86
  758. package/src/Equal.ts +8 -1
  759. package/src/Exit.ts +3 -3
  760. package/src/FileSystem.ts +65 -4
  761. package/src/Formatter.ts +28 -13
  762. package/src/Glob.ts +205 -0
  763. package/src/Hash.ts +4 -1
  764. package/src/JsonPatch.ts +4 -0
  765. package/src/JsonSchema.ts +12 -40
  766. package/src/Match.ts +127 -0
  767. package/src/Metric.ts +3 -3
  768. package/src/MutableList.ts +7 -5
  769. package/src/MutableRef.ts +8 -1
  770. package/src/PartitionedSemaphore.ts +24 -13
  771. package/src/Pool.ts +182 -52
  772. package/src/PubSub.ts +5 -6
  773. package/src/Random.ts +3 -3
  774. package/src/RcMap.ts +5 -1
  775. package/src/Ref.ts +8 -0
  776. package/src/Schedule.ts +27 -4
  777. package/src/Schema.ts +1237 -87
  778. package/src/SchemaAST.ts +20 -20
  779. package/src/SchemaGetter.ts +27 -11
  780. package/src/SchemaParser.ts +51 -18
  781. package/src/SchemaRepresentation.ts +50 -34
  782. package/src/SchemaTransformation.ts +17 -5
  783. package/src/ScopedCache.ts +5 -9
  784. package/src/Semaphore.ts +208 -40
  785. package/src/Sink.ts +15 -2
  786. package/src/Stream.ts +48 -22
  787. package/src/String.ts +3 -0
  788. package/src/Terminal.ts +19 -1
  789. package/src/Tracer.ts +15 -1
  790. package/src/ai/AiError.ts +56 -80
  791. package/src/ai/Decision.ts +257 -6
  792. package/src/ai/DecisionModel.ts +171 -28
  793. package/src/ai/LanguageModel.ts +9 -0
  794. package/src/ai/McpServer.ts +1283 -299
  795. package/src/ai/McpTest.ts +380 -0
  796. package/src/ai/Prompt.ts +65 -0
  797. package/src/ai/Response.ts +36 -31
  798. package/src/ai/Tool.ts +65 -10
  799. package/src/ai/Toolkit.ts +4 -1
  800. package/src/ai/index.ts +6 -0
  801. package/src/ai/internal/mcpCore.ts +78 -44
  802. package/src/ai/internal/mcpProtocol/v2024_11_05.ts +4 -7
  803. package/src/ai/internal/mcpProtocol/v2025_03_26.ts +4 -7
  804. package/src/ai/internal/mcpProtocol/v2025_06_18.ts +4 -7
  805. package/src/ai/internal/mcpProtocol/v2025_11_25.ts +4 -7
  806. package/src/ai/internal/mcpProtocol/v2026_07_28.ts +15 -10
  807. package/src/ai/internal/mcpProtocol.ts +29 -0
  808. package/src/ai/internal/mcpRuntime.ts +9 -5
  809. package/src/ai/internal/mcpStatefulRuntime.ts +14 -2
  810. package/src/cli/Argument.ts +21 -0
  811. package/src/cli/CliError.ts +90 -3
  812. package/src/cli/CliOutput.ts +300 -55
  813. package/src/cli/Command.ts +76 -41
  814. package/src/cli/Completions.ts +51 -0
  815. package/src/cli/Flag.ts +122 -0
  816. package/src/cli/GlobalFlag.ts +6 -7
  817. package/src/cli/HelpDoc.ts +18 -1
  818. package/src/cli/Param.ts +35 -6
  819. package/src/cli/Primitive.ts +16 -1
  820. package/src/cli/Prompt.ts +1 -0
  821. package/src/cli/TerminalCapabilities.ts +6 -3
  822. package/src/cli/internal/completions/bash.ts +79 -29
  823. package/src/cli/internal/help.ts +21 -9
  824. package/src/cluster/ClusterWorkflowEngine.ts +46 -16
  825. package/src/cluster/MessageStorage.ts +19 -14
  826. package/src/cluster/Sharding.ts +176 -47
  827. package/src/cluster/ShardingConfig.ts +43 -0
  828. package/src/cluster/SingleRunner.ts +3 -3
  829. package/src/cluster/Snowflake.ts +3 -7
  830. package/src/cluster/SqlMessageStorage.ts +49 -17
  831. package/src/cluster/SqlRunnerStorage.ts +143 -70
  832. package/src/cluster/internal/entityManager.ts +75 -22
  833. package/src/crypto/Aead.ts +517 -0
  834. package/src/crypto/Cipher.ts +326 -0
  835. package/src/crypto/CryptoError.ts +242 -0
  836. package/src/crypto/Digest.ts +167 -0
  837. package/src/crypto/Kdf.ts +315 -0
  838. package/src/crypto/KeyAgreement.ts +489 -0
  839. package/src/crypto/KeyFormat.ts +712 -0
  840. package/src/crypto/KeyWrap.ts +639 -0
  841. package/src/crypto/Mac.ts +386 -0
  842. package/src/crypto/SecureRandom.ts +459 -0
  843. package/src/crypto/Signature.ts +673 -0
  844. package/src/crypto/WebCrypto.ts +64 -0
  845. package/src/crypto/index.ts +78 -0
  846. package/src/crypto/internal/asymmetric.ts +329 -0
  847. package/src/crypto/internal/chacha.ts +1088 -0
  848. package/src/crypto/internal/der.ts +110 -0
  849. package/src/crypto/internal/digest.ts +16 -0
  850. package/src/crypto/internal/key.ts +235 -0
  851. package/src/crypto/internal/md5.ts +170 -0
  852. package/src/crypto/internal/webCrypto.ts +150 -0
  853. package/src/devtools/DevToolsClient.ts +2 -0
  854. package/src/encoding/Base64.ts +38 -0
  855. package/src/encoding/Base64Url.ts +5 -2
  856. package/src/encoding/Csv.ts +1298 -0
  857. package/src/encoding/Hex.ts +3 -2
  858. package/src/encoding/SchemaBinary.ts +40 -4
  859. package/src/encoding/Sse.ts +4 -3
  860. package/src/encoding/Toml.ts +117 -35
  861. package/src/encoding/Yaml.ts +61 -18
  862. package/src/encoding/index.ts +6 -0
  863. package/src/eventlog/EventJournal.ts +4 -3
  864. package/src/eventlog/EventLog.ts +340 -15
  865. package/src/eventlog/EventLogEncryption.ts +118 -110
  866. package/src/eventlog/EventLogMessage.ts +273 -1
  867. package/src/eventlog/EventLogRemote.ts +367 -23
  868. package/src/eventlog/EventLogServer.ts +23 -8
  869. package/src/eventlog/EventLogServerEncrypted.ts +1130 -67
  870. package/src/eventlog/EventLogSessionAuth.ts +56 -70
  871. package/src/eventlog/EventRow.ts +12 -3
  872. package/src/eventlog/SqlEventJournal.ts +68 -45
  873. package/src/eventlog/SqlEventLogServerEncrypted.ts +1244 -136
  874. package/src/eventlog/SqlEventLogServerUnencrypted.ts +2 -2
  875. package/src/eventlog/internal/batches.ts +30 -0
  876. package/src/eventlog/internal/compaction.ts +64 -0
  877. package/src/eventlog/internal/conflicts.ts +0 -4
  878. package/src/eventlog/internal/identityRootSecretDerivation.ts +93 -123
  879. package/src/eventlog/internal/remoteCompaction.ts +92 -0
  880. package/src/http/Cookies.ts +291 -12
  881. package/src/http/FetchHttpClient.ts +88 -16
  882. package/src/http/HttpClient.ts +636 -29
  883. package/src/http/HttpClientError.ts +35 -1
  884. package/src/http/HttpClientRequest.ts +21 -10
  885. package/src/http/HttpClientResponse.ts +3 -2
  886. package/src/http/HttpMethod.ts +10 -2
  887. package/src/http/HttpMiddleware.ts +15 -18
  888. package/src/http/HttpRouter.ts +2 -1
  889. package/src/http/HttpServerError.ts +2 -2
  890. package/src/http/HttpServerRequest.ts +101 -30
  891. package/src/http/HttpServerResponse.ts +3 -2
  892. package/src/http/HttpStaticServer.ts +51 -22
  893. package/src/http/HttpTraceContext.ts +7 -4
  894. package/src/http/MultipartParser/internal/contentType.ts +3 -3
  895. package/src/http/ProblemDetails.ts +149 -0
  896. package/src/http/UrlParams.ts +6 -1
  897. package/src/http/index.ts +6 -0
  898. package/src/http/internal/compression.ts +4 -5
  899. package/src/http/internal/decompression.ts +10 -4
  900. package/src/http/internal/httpBody.ts +10 -2
  901. package/src/http/internal/urlParams.ts +37 -0
  902. package/src/http-api/HttpApi.ts +3 -6
  903. package/src/http-api/HttpApiBuilder.ts +61 -19
  904. package/src/http-api/HttpApiClient.ts +284 -72
  905. package/src/http-api/HttpApiEndpoint.ts +135 -35
  906. package/src/http-api/HttpApiError.ts +250 -0
  907. package/src/http-api/HttpApiMiddleware.ts +95 -1
  908. package/src/http-api/HttpApiSchema.ts +236 -52
  909. package/src/http-api/HttpApiTest.ts +3 -2
  910. package/src/http-api/OpenApi.ts +20 -17
  911. package/src/http-api/internal/toCodecHttpProperties.ts +56 -0
  912. package/src/index.ts +6 -6
  913. package/src/internal/arbitrary/runner.ts +133 -36
  914. package/src/internal/core.ts +2 -0
  915. package/src/internal/effect.ts +58 -34
  916. package/src/internal/equal.ts +17 -0
  917. package/src/internal/glob.ts +736 -0
  918. package/src/internal/jsonSchema.ts +27 -0
  919. package/src/internal/matcher.ts +18 -1
  920. package/src/internal/persistence.ts +11 -0
  921. package/src/internal/rcRef.ts +4 -1
  922. package/src/internal/schema/compilerRegistry.ts +6 -1
  923. package/src/internal/schema/content.ts +18 -0
  924. package/src/internal/schema/fromJsonSchemaDocument.ts +228 -190
  925. package/src/internal/schema/fromRepresentation.ts +2 -1
  926. package/src/internal/schema/standardSchema.ts +2 -2
  927. package/src/internal/schema/toCodeDocument.ts +11 -7
  928. package/src/internal/schema/toCodec.ts +26 -22
  929. package/src/internal/schema/toJsonSchemaDocument.ts +189 -167
  930. package/src/internal/schema/toRepresentation.ts +122 -140
  931. package/src/internal/sql.ts +14 -0
  932. package/src/internal/trie.ts +43 -14
  933. package/src/internal/ulid.ts +44 -0
  934. package/src/internal/uuid.ts +57 -16
  935. package/src/internal/version.ts +1 -1
  936. package/src/observability/Otlp.ts +21 -4
  937. package/src/observability/OtlpProxy.ts +314 -0
  938. package/src/observability/OtlpResource.ts +9 -1
  939. package/src/observability/OtlpTracer.ts +4 -0
  940. package/src/observability/index.ts +6 -0
  941. package/src/persistence/CircuitBreaker.ts +1678 -0
  942. package/src/persistence/KeyValueStore.ts +219 -22
  943. package/src/persistence/PersistedQueue.ts +128 -59
  944. package/src/persistence/Persistence.ts +20 -13
  945. package/src/persistence/Redis.ts +129 -8
  946. package/src/persistence/index.ts +6 -0
  947. package/src/process/ChildProcess.ts +285 -264
  948. package/src/process/ChildProcessSpawner.ts +46 -2
  949. package/src/process/CommandLine.ts +630 -0
  950. package/src/process/index.ts +6 -0
  951. package/src/reactivity/AsyncResult.ts +1 -1
  952. package/src/reactivity/Atom.ts +5 -5
  953. package/src/reactivity/AtomRegistry.ts +1 -1
  954. package/src/rpc/RpcClient.ts +75 -36
  955. package/src/rpc/RpcMessage.ts +10 -1
  956. package/src/rpc/RpcSerialization.ts +35 -9
  957. package/src/rpc/RpcServer.ts +176 -63
  958. package/src/rpc/RpcTest.ts +3 -0
  959. package/src/schema/Model.ts +26 -3
  960. package/src/sql/Migrator.ts +15 -69
  961. package/src/sql/MigratorFileSystem.ts +71 -0
  962. package/src/sql/SqlClient.ts +13 -20
  963. package/src/sql/SqlResolver.ts +23 -9
  964. package/src/sql/Statement.ts +38 -9
  965. package/src/sql/index.ts +1 -1
  966. package/src/testing/index.ts +0 -6
  967. package/src/workflow/DurableDeferred.ts +23 -6
  968. package/src/workflow/internal/crypto.ts +15 -11
  969. package/dist/Crypto.d.ts +0 -244
  970. package/dist/Crypto.d.ts.map +0 -1
  971. package/dist/Crypto.js +0 -139
  972. package/dist/Crypto.js.map +0 -1
  973. package/dist/testing/TestCrypto.d.ts +0 -73
  974. package/dist/testing/TestCrypto.d.ts.map +0 -1
  975. package/dist/testing/TestCrypto.js +0 -87
  976. package/dist/testing/TestCrypto.js.map +0 -1
  977. package/src/Crypto.ts +0 -347
  978. package/src/testing/TestCrypto.ts +0 -94
package/src/Match.ts CHANGED
@@ -37,6 +37,31 @@ type ValueTagHandlers<I> = {
37
37
  readonly [Tag in Types.Tags<"_tag", I> & string]: (_: Extract<I, { readonly _tag: Tag }>) => any
38
38
  }
39
39
 
40
+ // Members of `R` that a literal record can dispatch on: finite string / number
41
+ // literals whose runtime key no other string / number member can produce.
42
+ // Widened `string` / `number` and template literals add no keys, and a literal
43
+ // is dropped when another member spells the same key (`1` with `"1"` or
44
+ // `string`, `"1"` or `"NaN"` with `number`).
45
+ type LiteralKeys<R, All = Extract<R, string | number>> = R extends string | number
46
+ ? {} extends Record<R, unknown> ? never
47
+ : R extends number ? `${R}` extends All ? never : R
48
+ : R extends `${infer N extends number}` ? N extends All ? never : R
49
+ : R extends "NaN" | "Infinity" | "-Infinity" ? number extends All ? never : R
50
+ : R
51
+ : never
52
+
53
+ type LiteralHandlers<R, Ret> = [Exclude<R, LiteralKeys<R>>] extends [never] ? {
54
+ readonly [K in LiteralKeys<R>]: (_: K) => Ret
55
+ }
56
+ : never
57
+
58
+ type PartialLiteralHandlers<R, Ret> = {
59
+ readonly [K in LiteralKeys<R>]?: ((_: K) => Ret) | undefined
60
+ }
61
+
62
+ // Only keys with a defined handler remove a literal from the remaining input.
63
+ type HandledLiterals<P> = { readonly [K in keyof P]-?: undefined extends P[K] ? never : K }[keyof P]
64
+
40
65
  /**
41
66
  * Marker used by `Matcher` to distinguish matchers created with `Match.value`.
42
67
  *
@@ -1391,6 +1416,108 @@ export const tagsExhaustive: <
1391
1416
  ) => [Pr] extends [never] ? (u: I) => Unify<A | ReturnType<P[keyof P]>> : Unify<A | ReturnType<P[keyof P]>> =
1392
1417
  internal.tagsExhaustive
1393
1418
 
1419
+ /**
1420
+ * Matches string and number literal values, mapping each literal to a
1421
+ * corresponding handler.
1422
+ *
1423
+ * **Details**
1424
+ *
1425
+ * Each handler receives the matched literal. Handled literals are removed from
1426
+ * the remaining input, while unhandled literals and any other members (such as
1427
+ * `null`, objects, or widened `string` / `number` types) are left for later
1428
+ * cases. Keys must be finite string or number literals of the remaining input;
1429
+ * unions containing both a number and its string spelling, such as
1430
+ * `1 | "1"`, are rejected because both share the same runtime key.
1431
+ *
1432
+ * **Example** (Mapping literal handlers)
1433
+ *
1434
+ * ```ts import.meta.vitest
1435
+ * import { Match } from "effect"
1436
+ *
1437
+ * type Status = "draft" | "review" | "published"
1438
+ *
1439
+ * const isEditable = Match.type<Status>().pipe(
1440
+ * Match.literals({ draft: () => true, review: () => true }),
1441
+ * Match.orElse(() => false)
1442
+ * )
1443
+ *
1444
+ * isEditable("review") // => true
1445
+ * isEditable("published") // => false
1446
+ * ```
1447
+ *
1448
+ * @see {@link literalsExhaustive} for handling every literal and finalizing the matcher
1449
+ *
1450
+ * @stability unstable
1451
+ * @category defining patterns
1452
+ * @since 4.1.0
1453
+ */
1454
+ export const literals: <
1455
+ R,
1456
+ Ret,
1457
+ P extends
1458
+ & PartialLiteralHandlers<R, Ret>
1459
+ & { readonly [K in Exclude<keyof P, LiteralKeys<R>>]: never }
1460
+ >(
1461
+ fields: Contextual<P, PartialLiteralHandlers<R, Ret>>
1462
+ ) => <I, F, A, Pr>(
1463
+ self: Matcher<I, F, R, A, Pr, Ret>
1464
+ ) => Matcher<
1465
+ I,
1466
+ Types.AddWithout<F, Extract<R, HandledLiterals<P>>>,
1467
+ Types.ApplyFilters<I, Types.AddWithout<F, Extract<R, HandledLiterals<P>>>>,
1468
+ A | ReturnType<P[keyof P] & {}>,
1469
+ Pr,
1470
+ Ret
1471
+ > = internal.literals
1472
+
1473
+ /**
1474
+ * Matches string and number literal values and requires handling of all
1475
+ * remaining cases.
1476
+ *
1477
+ * **Details**
1478
+ *
1479
+ * This is the exhaustive variant of {@link literals}. Every remaining member
1480
+ * must be a finite string or number literal with a corresponding handler, so a
1481
+ * missing literal, a widened `string` / `number` type, or any other unhandled
1482
+ * member is reported by TypeScript.
1483
+ *
1484
+ * **Example** (Handling all literal cases)
1485
+ *
1486
+ * ```ts import.meta.vitest
1487
+ * import { Match } from "effect"
1488
+ *
1489
+ * type Status = "draft" | "review" | "published"
1490
+ *
1491
+ * const label = Match.type<Status>().pipe(
1492
+ * Match.literalsExhaustive({
1493
+ * draft: () => "Draft",
1494
+ * review: () => "In review",
1495
+ * published: () => "Live"
1496
+ * })
1497
+ * )
1498
+ *
1499
+ * label("review") // => "In review"
1500
+ * ```
1501
+ *
1502
+ * @see {@link literals} for defining literal handlers without finalizing the matcher
1503
+ *
1504
+ * @stability unstable
1505
+ * @category defining patterns
1506
+ * @since 4.1.0
1507
+ */
1508
+ export const literalsExhaustive: <
1509
+ R,
1510
+ Ret,
1511
+ P extends
1512
+ & LiteralHandlers<R, Ret>
1513
+ & { readonly [K in Exclude<keyof P, LiteralKeys<R>>]: never }
1514
+ >(
1515
+ fields: Contextual<P, LiteralHandlers<R, Ret>>
1516
+ ) => <I, F, A, Pr>(
1517
+ self: Matcher<I, F, R, A, Pr, Ret>
1518
+ ) => [Pr] extends [never] ? (u: I) => Unify<A | ReturnType<P[keyof P]>> : Unify<A | ReturnType<P[keyof P]>> =
1519
+ internal.literalsExhaustive
1520
+
1394
1521
  /**
1395
1522
  * Creates a pattern that excludes a specific value while allowing all others.
1396
1523
  *
package/src/Metric.ts CHANGED
@@ -576,7 +576,7 @@ export interface GaugeState<in Input extends number | bigint> {
576
576
  * start: 1,
577
577
  * factor: 2,
578
578
  * count: 10
579
- * }) // 1, 2, 4, 8, ..., 512
579
+ * }) // 1, 2, 4, 8, ..., 256, Infinity
580
580
  * }
581
581
  * )
582
582
  *
@@ -696,8 +696,8 @@ export interface Histogram<Input> extends Metric<Input, HistogramState> {}
696
696
  * totalRequests: state.count, // 5
697
697
  * fastestResponse: state.min, // 50
698
698
  * slowestResponse: state.max, // 750
699
- * averageResponse: state.sum / state.count, // 268
700
- * totalTime: state.sum, // 1340
699
+ * averageResponse: state.sum / state.count, // 259
700
+ * totalTime: state.sum, // 1295
701
701
  * distribution: bucketAnalysis
702
702
  * // Example distribution:
703
703
  * // [{ range: "0-100ms", count: 2, percentage: 40.0 },
@@ -9,7 +9,6 @@
9
9
  * @stability stable
10
10
  * @since 4.0.0
11
11
  */
12
- import * as Arr from "./Array.ts"
13
12
  import * as Count from "./internal/count.ts"
14
13
 
15
14
  /**
@@ -259,7 +258,8 @@ export const prepend = <A>(self: MutableList<A>, message: A): void => {
259
258
  /**
260
259
  * Prepends all elements from an iterable to the beginning of the MutableList.
261
260
  * The elements are added in order, so the first element in the iterable becomes
262
- * the new head of the list.
261
+ * the new head of the list. The elements are copied, so the input can be reused
262
+ * afterward. Use `prependAllUnsafe` to transfer ownership of an array instead.
263
263
  *
264
264
  * **Example** (Prepending multiple elements)
265
265
  *
@@ -279,7 +279,7 @@ export const prepend = <A>(self: MutableList<A>, message: A): void => {
279
279
  * @since 4.0.0
280
280
  */
281
281
  export const prependAll = <A>(self: MutableList<A>, messages: Iterable<A>): void =>
282
- prependAllUnsafe(self, Arr.fromIterable(messages), !Array.isArray(messages))
282
+ prependAllUnsafe(self, Array.from(messages), true)
283
283
 
284
284
  /**
285
285
  * Prepends all elements from a ReadonlyArray to the beginning of the MutableList.
@@ -328,7 +328,9 @@ export const prependAllUnsafe = <A>(self: MutableList<A>, messages: ReadonlyArra
328
328
 
329
329
  /**
330
330
  * Appends all elements from an iterable to the end of the MutableList.
331
- * Returns the number of elements added.
331
+ * Returns the number of elements added. The elements are copied, so the input
332
+ * can be reused afterward. Use `appendAllUnsafe` to transfer ownership of an
333
+ * array instead.
332
334
  *
333
335
  * **Example** (Appending multiple elements)
334
336
  *
@@ -349,7 +351,7 @@ export const prependAllUnsafe = <A>(self: MutableList<A>, messages: ReadonlyArra
349
351
  * @since 4.0.0
350
352
  */
351
353
  export const appendAll = <A>(self: MutableList<A>, messages: Iterable<A>): number =>
352
- appendAllUnsafe(self, Arr.fromIterable(messages), !Array.isArray(messages))
354
+ appendAllUnsafe(self, Array.from(messages), true)
353
355
 
354
356
  /**
355
357
  * Appends all elements from a ReadonlyArray to the end of the MutableList.
package/src/MutableRef.ts CHANGED
@@ -12,6 +12,7 @@
12
12
  */
13
13
  import * as Equal from "./Equal.ts"
14
14
  import * as Dual from "./Function.ts"
15
+ import * as Hash from "./Hash.ts"
15
16
  import { type Inspectable, toJson } from "./Inspectable.ts"
16
17
  import { PipeInspectableProto } from "./internal/core.ts"
17
18
  import type { Pipeable } from "./Pipeable.ts"
@@ -74,9 +75,15 @@ export interface MutableRef<out T> extends Pipeable, Inspectable {
74
75
  current: T
75
76
  }
76
77
 
77
- const MutableRefProto: Omit<MutableRef<unknown>, "current"> = {
78
+ const MutableRefProto: Omit<MutableRef<unknown>, "current"> & Equal.Equal = {
78
79
  [TypeId]: TypeId,
79
80
  ...PipeInspectableProto,
81
+ [Equal.symbol](that: unknown): boolean {
82
+ return this === that
83
+ },
84
+ [Hash.symbol](): number {
85
+ return Hash.random(this)
86
+ },
80
87
  toJSON<A>(this: MutableRef<A>) {
81
88
  return {
82
89
  _id: "MutableRef",
@@ -59,7 +59,8 @@ export type PartitionedTypeId = "~effect/PartitionedSemaphore"
59
59
  *
60
60
  * **Details**
61
61
  *
62
- * Waiting permits are distributed across partitions in round-robin order.
62
+ * Waiters are served across partitions in round-robin order, completing each
63
+ * waiter's permit request before moving to the next partition.
63
64
  *
64
65
  * @stability unstable
65
66
  * @category models
@@ -150,6 +151,7 @@ export const makeUnsafe = <K = unknown>(options: {
150
151
  let iterator = partitions[Symbol.iterator]()
151
152
  let releasing = false
152
153
  let pendingPermits = 0
154
+ let partial: Waiter | undefined
153
155
 
154
156
  const releaseUnsafe = (permits: number): number => {
155
157
  if (permits > 0) {
@@ -162,26 +164,32 @@ export const makeUnsafe = <K = unknown>(options: {
162
164
  releasing = true
163
165
  try {
164
166
  while (pendingPermits > 0 && waitingPermits > 0) {
165
- let state = iterator.next()
166
- if (state.done) {
167
- iterator = partitions[Symbol.iterator]()
168
- state = iterator.next()
167
+ let waiter = partial
168
+ if (waiter === undefined) {
169
+ let state = iterator.next()
169
170
  if (state.done) {
170
- break
171
+ iterator = partitions[Symbol.iterator]()
172
+ state = iterator.next()
173
+ if (state.done) {
174
+ break
175
+ }
171
176
  }
172
- }
173
177
 
174
- const waiter = state.value[1].values().next().value
175
- if (waiter === undefined) {
176
- continue
178
+ waiter = state.value[1].values().next().value
179
+ if (waiter === undefined) {
180
+ continue
181
+ }
177
182
  }
178
183
 
179
- waiter.permits -= 1
180
- waitingPermits -= 1
181
- pendingPermits -= 1
184
+ const granted = Math.min(waiter.permits, pendingPermits)
185
+ waiter.permits -= granted
186
+ waitingPermits -= granted
187
+ pendingPermits -= granted
182
188
 
183
189
  if (waiter.permits === 0) {
184
190
  waiter.resume()
191
+ } else {
192
+ partial = waiter
185
193
  }
186
194
  }
187
195
  } finally {
@@ -249,6 +257,9 @@ export const makeUnsafe = <K = unknown>(options: {
249
257
  }
250
258
 
251
259
  const cleanup = () => {
260
+ if (partial === entry) {
261
+ partial = undefined
262
+ }
252
263
  if (waiters.delete(entry) && waiters.size === 0) {
253
264
  MutableHashMap.remove(partitions, key)
254
265
  }
package/src/Pool.ts CHANGED
@@ -10,7 +10,6 @@
10
10
  * @stability stable
11
11
  * @since 2.0.0
12
12
  */
13
- import type * as Cause from "./Cause.ts"
14
13
  import { Clock } from "./Clock.ts"
15
14
  import * as Context from "./Context.ts"
16
15
  import * as Duration from "./Duration.ts"
@@ -23,7 +22,6 @@ import * as internal from "./internal/effect.ts"
23
22
  import { type Pipeable, pipeArguments } from "./Pipeable.ts"
24
23
  import { hasProperty } from "./Predicate.ts"
25
24
  import * as Queue from "./Queue.ts"
26
- import { UnhandledLogLevel } from "./References.ts"
27
25
  import * as Scope from "./Scope.ts"
28
26
  import * as Semaphore from "./Semaphore.ts"
29
27
 
@@ -96,6 +94,29 @@ export interface Config<A, E> {
96
94
  readonly targetUtilization: number
97
95
  }
98
96
 
97
+ /**
98
+ * A point-in-time count of a pool's items and waiting borrowers.
99
+ *
100
+ * **Details**
101
+ *
102
+ * `idle` and `used` count acquired items, not borrowers, so an item shared by
103
+ * several borrowers counts once. `pending` counts borrowers waiting for an
104
+ * item. `min` and `max` are the configured size bounds.
105
+ *
106
+ * @see {@link stats} for reading a snapshot
107
+ *
108
+ * @stability unstable
109
+ * @category models
110
+ * @since 4.0.0
111
+ */
112
+ export interface Stats {
113
+ readonly idle: number
114
+ readonly used: number
115
+ readonly pending: number
116
+ readonly min: number
117
+ readonly max: number
118
+ }
119
+
99
120
  /**
100
121
  * Mutable runtime state maintained by a `Pool`.
101
122
  *
@@ -463,7 +484,7 @@ export const get = <A, E>(self: Pool<A, E>): Effect.Effect<A, E, Scope.Scope> =>
463
484
  core.withFiber((fiber) => {
464
485
  const state = self.state
465
486
  if (state.isShuttingDown) return internal.interrupt
466
- if (state.availableHead?.exit._tag === "Success") {
487
+ if (state.waiters.size === 0 && state.availableHead?.exit._tag === "Success") {
467
488
  state.usage++
468
489
  if (self.config.isFixed || targetSize(self) <= activeSize(self)) {
469
490
  return leaseItem(self, state.availableHead, fiber)
@@ -570,7 +591,7 @@ export const use: {
570
591
  core.withFiber((fiber) => {
571
592
  const state = self.state
572
593
  if (state.isShuttingDown) return internal.interrupt
573
- if (state.availableHead?.exit._tag === "Success") {
594
+ if (state.waiters.size === 0 && state.availableHead?.exit._tag === "Success") {
574
595
  state.usage++
575
596
  if (self.config.isFixed || targetSize(self) <= activeSize(self)) {
576
597
  return useItem(self, state.availableHead, f, fiber)
@@ -611,12 +632,18 @@ const getSlowWith = <A, E, X, R>(
611
632
  internal.uninterruptibleMask((restore) => {
612
633
  const state = self.state
613
634
  state.usage++
635
+ const waiter = makeWaiter<A, E>()
614
636
  const wait: Effect.Effect<X, any, R> = internal.flatMap(
615
637
  internal.onError(
616
- restore(waitForItem(self)),
638
+ restore(waitForItem(self, waiter)),
617
639
  () =>
618
- internal.sync(() => {
640
+ core.withFiber((fiber) => {
619
641
  state.usage--
642
+ // Only a woken waiter is still registered here: one cancelled while
643
+ // asleep already left. It passes its wake on, so the capacity it was
644
+ // woken for is not stranded.
645
+ if (state.waiters.delete(waiter)) wakeWaiters(self, fiber, 1)
646
+ return internal.void
620
647
  })
621
648
  ),
622
649
  () => loop
@@ -626,6 +653,12 @@ const getSlowWith = <A, E, X, R>(
626
653
  state.usage--
627
654
  return internal.interrupt
628
655
  }
656
+ // A borrower that has not waited yet queues behind the borrowers already
657
+ // waiting. Waiters keep their place until they take an item, so this
658
+ // also holds while a woken waiter has yet to run.
659
+ if (state.waiters.size > 0 && !state.waiters.has(waiter)) {
660
+ return wait
661
+ }
629
662
  // Replace failed slots only when the pool cannot grow.
630
663
  const item = firstHealthyAvailable(self) ??
631
664
  (targetSize(self) <= activeSize(self) ? state.availableHead : undefined)
@@ -636,6 +669,7 @@ const getSlowWith = <A, E, X, R>(
636
669
  removeFailedItem(self, item)
637
670
  return loop
638
671
  }
672
+ state.waiters.delete(waiter)
639
673
  return lease(self, item, fiber, restore)
640
674
  })
641
675
  const loop: Effect.Effect<X, any, R> = internal.suspend(() => {
@@ -718,19 +752,49 @@ const firstHealthyAvailable = <A, E>(self: Pool<A, E>): PoolItem<A, E> | undefin
718
752
  return item
719
753
  }
720
754
 
721
- const waitForItem = <A, E>(self: Pool<A, E>): Effect.Effect<void, E> =>
755
+ /**
756
+ * A borrower's entry in `State.waiters`. It stays registered from the first
757
+ * wait until the borrower takes an item or leaves, so the borrower keeps its
758
+ * place in the queue across wakes.
759
+ *
760
+ * `resume` is set while the borrower is asleep. A registered waiter without
761
+ * one has been woken and has yet to take an item, wait again or leave.
762
+ */
763
+ interface Waiter<A, E> {
764
+ (failure?: Exit.Failure<A, E>): void
765
+ resume: ((effect: Effect.Effect<void, E>) => void) | undefined
766
+ }
767
+
768
+ const makeWaiter = <A, E>(): Waiter<A, E> => {
769
+ const waiter = ((failure?: Exit.Failure<A, E>) => {
770
+ const resume = waiter.resume
771
+ if (resume === undefined) return
772
+ waiter.resume = undefined
773
+ resume(failure ?? internal.void)
774
+ }) as Waiter<A, E>
775
+ waiter.resume = undefined
776
+ return waiter
777
+ }
778
+
779
+ const waitForItem = <A, E>(self: Pool<A, E>, waiter: Waiter<A, E>): Effect.Effect<void, E> =>
722
780
  internal.callback((resume) => {
723
781
  const state = self.state
724
- if (firstHealthyAvailable(self) !== undefined || state.isShuttingDown) {
782
+ if (
783
+ state.isShuttingDown ||
784
+ (state.waiters.size === 0 && firstHealthyAvailable(self) !== undefined)
785
+ ) {
725
786
  return resume(internal.void)
726
787
  }
727
- const observer = (failure?: Exit.Failure<A, E>) => {
728
- state.waiters.delete(observer)
729
- resume(failure ?? internal.void)
730
- }
731
- state.waiters.add(observer)
788
+ waiter.resume = resume
789
+ // Re-adding a registered waiter keeps its position.
790
+ state.waiters.add(waiter)
732
791
  return internal.sync(() => {
733
- state.waiters.delete(observer)
792
+ // Cancelled while asleep: leave at once, so no wake or failure is spent
793
+ // on it. Cancelled after a wake: stay until the wake is passed on.
794
+ if (waiter.resume !== undefined) {
795
+ waiter.resume = undefined
796
+ state.waiters.delete(waiter)
797
+ }
734
798
  })
735
799
  })
736
800
 
@@ -738,23 +802,36 @@ const wakeWaiters = <A, E>(self: Pool<A, E>, fiber: Fiber.Fiber<unknown, unknown
738
802
  const waiters = self.state.waiters
739
803
  if (waiters.size === 0) return
740
804
  fiber.currentDispatcher.scheduleTask(() => {
805
+ // Walk the live set, so a waiter that leaves during the walk does not use
806
+ // up a wake. Skip waiters already woken, and stop once nothing is left to
807
+ // take.
741
808
  let remaining = count
742
- const toWake: Array<(failure?: Exit.Failure<A, E>) => void> = []
743
809
  for (const notify of waiters) {
744
- if (remaining-- <= 0) break
745
- toWake.push(notify)
746
- }
747
- for (let i = 0; i < toWake.length; i++) {
748
- toWake[i]()
810
+ if (remaining <= 0 || self.state.availableHead === undefined) break
811
+ if ((notify as Waiter<A, E>).resume === undefined) continue
812
+ remaining--
813
+ notify()
749
814
  }
750
815
  }, 0)
751
816
  }
752
817
 
753
- const wakeAll = <A, E>(self: Pool<A, E>): Effect.Effect<void> =>
754
- core.withFiber((fiber) => {
755
- wakeWaiters(self, fiber, Number.POSITIVE_INFINITY)
756
- return internal.void
757
- })
818
+ const firstSleepingWaiter = <A, E>(self: Pool<A, E>) => {
819
+ for (const notify of self.state.waiters) {
820
+ if ((notify as Waiter<A, E>).resume !== undefined) return notify
821
+ }
822
+ return undefined
823
+ }
824
+
825
+ // Wakes every waiter so it can retry after a failed acquisition. A waiter that
826
+ // could not start a resize while another was running depends on this. Waking
827
+ // a waiter that is already awake is a no-op.
828
+ const wakeAll = <A, E>(self: Pool<A, E>, fiber: Fiber.Fiber<unknown, unknown>) => {
829
+ const waiters = self.state.waiters
830
+ if (waiters.size === 0) return
831
+ fiber.currentDispatcher.scheduleTask(() => {
832
+ for (const notify of Array.from(waiters)) notify()
833
+ }, 0)
834
+ }
758
835
 
759
836
  // Reservations prevent reuse without extending the lifetime of borrowed items.
760
837
  const reservations = new WeakMap<PoolItem<unknown, unknown>, number>()
@@ -970,6 +1047,52 @@ export const reserve: {
970
1047
  ))
971
1048
  )
972
1049
 
1050
+ /**
1051
+ * Returns a snapshot of how many items are idle or in use and how many
1052
+ * borrowers are waiting.
1053
+ *
1054
+ * **When to use**
1055
+ *
1056
+ * Use to sample pool occupancy for metrics, such as connection counts for a
1057
+ * database driver.
1058
+ *
1059
+ * **Details**
1060
+ *
1061
+ * - Only successfully acquired items are counted. Items still being acquired
1062
+ * and failed acquisitions are not.
1063
+ * - An item is used while it has a borrower or a reservation, otherwise idle.
1064
+ * - An invalidated item counts as used until its last borrower returns it.
1065
+ *
1066
+ * **Gotchas**
1067
+ *
1068
+ * The replacement for an invalidated item is acquired while the old one is
1069
+ * still borrowed, so `idle + used` can briefly exceed `max`. A borrower that
1070
+ * has been woken but has not yet taken its item is not counted as pending.
1071
+ *
1072
+ * @see {@link Stats} for the snapshot fields
1073
+ *
1074
+ * @stability unstable
1075
+ * @category getters
1076
+ * @since 4.0.0
1077
+ */
1078
+ export const stats = <A, E>(self: Pool<A, E>): Effect.Effect<Stats> =>
1079
+ Effect.sync(() => {
1080
+ let idle = 0
1081
+ let used = 0
1082
+ for (const item of self.state.items) {
1083
+ if (item.exit._tag !== "Success") continue
1084
+ if (item.refCount > 0 || reservations.has(item)) used++
1085
+ else idle++
1086
+ }
1087
+ return {
1088
+ idle,
1089
+ used,
1090
+ pending: self.state.waiters.size,
1091
+ min: self.config.minSize,
1092
+ max: self.config.maxSize
1093
+ }
1094
+ })
1095
+
973
1096
  const invalidatePoolItem = <A, E>(self: Pool<A, E>, poolItem: PoolItem<A, E>): Effect.Effect<void> =>
974
1097
  Effect.suspend(() => {
975
1098
  if (!self.state.items.has(poolItem)) {
@@ -1005,22 +1128,38 @@ const resizeLoop = <A, E>(self: Pool<A, E>): Effect.Effect<void> =>
1005
1128
  return Effect.void
1006
1129
  }
1007
1130
  const toAcquire = target - active
1008
- const acquireOne = self.config.strategy === strategyNoop
1009
- ? allocate(self)
1010
- : Effect.flatMap(
1011
- self.config.strategy.reclaim(self),
1012
- (item) => item ? Effect.succeed(item) : allocate(self)
1013
- )
1131
+ // Wake waiters as each item arrives. Waiting for the whole batch would
1132
+ // leave acquired items idle behind a slow acquisition, with every borrower
1133
+ // queued behind the waiters.
1134
+ const acquireOne = Effect.tap(
1135
+ self.config.strategy === strategyNoop
1136
+ ? allocate(self)
1137
+ : Effect.flatMap(
1138
+ self.config.strategy.reclaim(self),
1139
+ (item) =>
1140
+ item
1141
+ ? Effect.sync(() => {
1142
+ // A reclaimed item rejoins circulation like a released one.
1143
+ if (self.state.items.has(item) && !self.state.invalidated.has(item)) addAvailableFront(self, item)
1144
+ return item
1145
+ })
1146
+ : allocate(self)
1147
+ ),
1148
+ (item) =>
1149
+ core.withFiber((fiber) => {
1150
+ // A failed acquisition wakes everyone so they can retry it. A new
1151
+ // item can only serve as many waiters as it has slots.
1152
+ if (item.exit._tag === "Failure") wakeAll(self, fiber)
1153
+ else wakeWaiters(self, fiber, self.config.concurrency)
1154
+ return internal.void
1155
+ })
1156
+ )
1014
1157
  if (toAcquire === 1) {
1015
- const acquired = Effect.tap(acquireOne, wakeAll(self))
1016
1158
  return self.config.isFixed
1017
- ? Effect.asVoid(acquired)
1018
- : Effect.flatMap(acquired, (item) => item.exit._tag === "Failure" ? Effect.void : resizeLoop(self))
1159
+ ? Effect.asVoid(acquireOne)
1160
+ : Effect.flatMap(acquireOne, (item) => item.exit._tag === "Failure" ? Effect.void : resizeLoop(self))
1019
1161
  }
1020
- const acquired = acquireOne.pipe(
1021
- Effect.replicateEffect(toAcquire, { concurrency: toAcquire }),
1022
- Effect.tap(wakeAll(self))
1023
- )
1162
+ const acquired = Effect.replicateEffect(acquireOne, toAcquire, { concurrency: toAcquire })
1024
1163
  return self.config.isFixed
1025
1164
  ? Effect.asVoid(acquired)
1026
1165
  : Effect.flatMap(
@@ -1039,7 +1178,10 @@ const allocate = <A, E>(self: Pool<A, E>): Effect.Effect<PoolItem<A, E>> =>
1039
1178
  const use = Effect.flatMap(Effect.exit(impl[Acquire]), (exit) => {
1040
1179
  const item: PoolItem<A, E> = {
1041
1180
  exit,
1042
- finalizer: Effect.catchCause(Scope.close(scope, exit), reportUnhandledError),
1181
+ finalizer: Effect.ignoreCause(Scope.close(scope, exit), {
1182
+ log: "Unhandled",
1183
+ message: "Unhandled error in pool finalizer"
1184
+ }),
1043
1185
  refCount: 0,
1044
1186
  idleSince: impl[PoolClock].currentTimeMillisUnsafe(),
1045
1187
  disableReclaim: false,
@@ -1059,7 +1201,7 @@ const allocate = <A, E>(self: Pool<A, E>): Effect.Effect<PoolItem<A, E>> =>
1059
1201
  return self.config.strategy === strategyNoop ? Effect.succeed(item) : Effect.as(onAcquire, item)
1060
1202
  }
1061
1203
  // Deliver a waiting borrower its own failure; otherwise retain the slot.
1062
- const waiter = firstHealthyAvailable(self) === undefined ? self.state.waiters.values().next().value : undefined
1204
+ const waiter = firstHealthyAvailable(self) === undefined ? firstSleepingWaiter(self) : undefined
1063
1205
  if (waiter !== undefined) {
1064
1206
  waiter(exit)
1065
1207
  } else {
@@ -1163,15 +1305,3 @@ const strategyUsageTTL = Effect.fnUntraced(function*<A, E>(ttl: Duration.Input)
1163
1305
  reclaim: (_) => Effect.undefined
1164
1306
  })
1165
1307
  })
1166
-
1167
- const reportUnhandledError = <E>(cause: Cause.Cause<E>) =>
1168
- Effect.withFiber<void>((fiber) => {
1169
- const unhandledLogLevel = fiber.getRef(UnhandledLogLevel)
1170
- if (unhandledLogLevel) {
1171
- return Effect.logWithLevel(unhandledLogLevel)(
1172
- "Unhandled error in pool finalizer",
1173
- cause
1174
- )
1175
- }
1176
- return Effect.void
1177
- })
package/src/PubSub.ts CHANGED
@@ -3129,14 +3129,13 @@ export class BackPressureStrategy<in out A> implements PubSub.Strategy<A> {
3129
3129
  if (publisher === MutableList.Empty) {
3130
3130
  keepPolling = false
3131
3131
  } else {
3132
- const [value, deferred] = publisher
3132
+ const [value, deferred, last] = publisher
3133
3133
  const published = pubsub.publish(value)
3134
- if (published && publisher[2]) {
3135
- Deferred.doneUnsafe(deferred, Exit.succeed(true))
3136
- } else if (!published) {
3137
- MutableList.prepend(this.publishers, publisher)
3138
- }
3134
+ if (!published) MutableList.prepend(this.publishers, publisher)
3139
3135
  this.completeSubscribersUnsafe(pubsub, subscribers)
3136
+ // Resuming the publisher can synchronously end the PubSub, so notify
3137
+ // waiting subscribers first.
3138
+ if (published && last) Deferred.doneUnsafe(deferred, Exit.succeed(true))
3140
3139
  }
3141
3140
  }
3142
3141
  }