effect 4.0.6 → 4.0.7

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 (480) hide show
  1. package/dist/Arbitrary.d.ts +10 -2
  2. package/dist/Arbitrary.d.ts.map +1 -1
  3. package/dist/Arbitrary.js +2 -1
  4. package/dist/Arbitrary.js.map +1 -1
  5. package/dist/Channel.d.ts.map +1 -1
  6. package/dist/Channel.js +21 -6
  7. package/dist/Channel.js.map +1 -1
  8. package/dist/Data.d.ts +54 -235
  9. package/dist/Data.d.ts.map +1 -1
  10. package/dist/Data.js.map +1 -1
  11. package/dist/Effect.d.ts +1 -1
  12. package/dist/Effect.js +1 -1
  13. package/dist/Equal.d.ts.map +1 -1
  14. package/dist/Equal.js +8 -1
  15. package/dist/Equal.js.map +1 -1
  16. package/dist/Exit.d.ts +3 -3
  17. package/dist/Exit.d.ts.map +1 -1
  18. package/dist/Exit.js.map +1 -1
  19. package/dist/Formatter.d.ts.map +1 -1
  20. package/dist/Formatter.js +27 -13
  21. package/dist/Formatter.js.map +1 -1
  22. package/dist/Hash.d.ts.map +1 -1
  23. package/dist/Hash.js +4 -1
  24. package/dist/Hash.js.map +1 -1
  25. package/dist/JsonPatch.js +4 -0
  26. package/dist/JsonPatch.js.map +1 -1
  27. package/dist/JsonSchema.d.ts.map +1 -1
  28. package/dist/JsonSchema.js +13 -40
  29. package/dist/JsonSchema.js.map +1 -1
  30. package/dist/Metric.d.ts +3 -3
  31. package/dist/MutableList.d.ts +5 -2
  32. package/dist/MutableList.d.ts.map +1 -1
  33. package/dist/MutableList.js +7 -5
  34. package/dist/MutableList.js.map +1 -1
  35. package/dist/MutableRef.d.ts.map +1 -1
  36. package/dist/MutableRef.js +7 -0
  37. package/dist/MutableRef.js.map +1 -1
  38. package/dist/PartitionedSemaphore.d.ts +2 -1
  39. package/dist/PartitionedSemaphore.d.ts.map +1 -1
  40. package/dist/PartitionedSemaphore.js +22 -12
  41. package/dist/PartitionedSemaphore.js.map +1 -1
  42. package/dist/Pool.d.ts.map +1 -1
  43. package/dist/Pool.js +77 -27
  44. package/dist/Pool.js.map +1 -1
  45. package/dist/PubSub.d.ts.map +1 -1
  46. package/dist/PubSub.js +5 -6
  47. package/dist/PubSub.js.map +1 -1
  48. package/dist/Ref.d.ts.map +1 -1
  49. package/dist/Ref.js +8 -0
  50. package/dist/Ref.js.map +1 -1
  51. package/dist/Schedule.js +1 -1
  52. package/dist/Schedule.js.map +1 -1
  53. package/dist/Schema.d.ts +24 -8
  54. package/dist/Schema.d.ts.map +1 -1
  55. package/dist/Schema.js +37 -28
  56. package/dist/Schema.js.map +1 -1
  57. package/dist/SchemaAST.d.ts +4 -2
  58. package/dist/SchemaAST.d.ts.map +1 -1
  59. package/dist/SchemaAST.js +14 -17
  60. package/dist/SchemaAST.js.map +1 -1
  61. package/dist/SchemaParser.d.ts.map +1 -1
  62. package/dist/SchemaParser.js +48 -22
  63. package/dist/SchemaParser.js.map +1 -1
  64. package/dist/SchemaRepresentation.d.ts +19 -10
  65. package/dist/SchemaRepresentation.d.ts.map +1 -1
  66. package/dist/SchemaRepresentation.js +23 -13
  67. package/dist/SchemaRepresentation.js.map +1 -1
  68. package/dist/SchemaTransformation.d.ts +4 -1
  69. package/dist/SchemaTransformation.d.ts.map +1 -1
  70. package/dist/SchemaTransformation.js +9 -2
  71. package/dist/SchemaTransformation.js.map +1 -1
  72. package/dist/Semaphore.d.ts.map +1 -1
  73. package/dist/Semaphore.js +54 -35
  74. package/dist/Semaphore.js.map +1 -1
  75. package/dist/Sink.d.ts.map +1 -1
  76. package/dist/Sink.js +7 -2
  77. package/dist/Sink.js.map +1 -1
  78. package/dist/Stream.d.ts.map +1 -1
  79. package/dist/Stream.js +22 -10
  80. package/dist/Stream.js.map +1 -1
  81. package/dist/String.d.ts +3 -0
  82. package/dist/String.d.ts.map +1 -1
  83. package/dist/String.js +3 -0
  84. package/dist/String.js.map +1 -1
  85. package/dist/Tracer.d.ts +11 -1
  86. package/dist/Tracer.d.ts.map +1 -1
  87. package/dist/Tracer.js +6 -1
  88. package/dist/Tracer.js.map +1 -1
  89. package/dist/ai/LanguageModel.d.ts.map +1 -1
  90. package/dist/ai/LanguageModel.js +9 -0
  91. package/dist/ai/LanguageModel.js.map +1 -1
  92. package/dist/ai/McpSchema.d.ts +110 -110
  93. package/dist/ai/McpSchema.d.ts.map +1 -1
  94. package/dist/ai/McpServer.d.ts.map +1 -1
  95. package/dist/ai/McpServer.js +21 -15
  96. package/dist/ai/McpServer.js.map +1 -1
  97. package/dist/ai/Prompt.d.ts +52 -0
  98. package/dist/ai/Prompt.d.ts.map +1 -1
  99. package/dist/ai/Prompt.js +38 -0
  100. package/dist/ai/Prompt.js.map +1 -1
  101. package/dist/ai/Response.d.ts +16 -3
  102. package/dist/ai/Response.d.ts.map +1 -1
  103. package/dist/ai/Response.js +4 -0
  104. package/dist/ai/Response.js.map +1 -1
  105. package/dist/ai/Tool.d.ts +24 -0
  106. package/dist/ai/Tool.d.ts.map +1 -1
  107. package/dist/ai/Tool.js +5 -2
  108. package/dist/ai/Tool.js.map +1 -1
  109. package/dist/ai/Toolkit.d.ts.map +1 -1
  110. package/dist/ai/Toolkit.js +8 -1
  111. package/dist/ai/Toolkit.js.map +1 -1
  112. package/dist/cli/Argument.d.ts +15 -0
  113. package/dist/cli/Argument.d.ts.map +1 -1
  114. package/dist/cli/Argument.js +5 -0
  115. package/dist/cli/Argument.js.map +1 -1
  116. package/dist/cli/CliError.d.ts +78 -0
  117. package/dist/cli/CliError.d.ts.map +1 -1
  118. package/dist/cli/CliError.js +65 -3
  119. package/dist/cli/CliError.js.map +1 -1
  120. package/dist/cli/CliOutput.d.ts +155 -6
  121. package/dist/cli/CliOutput.d.ts.map +1 -1
  122. package/dist/cli/CliOutput.js +62 -6
  123. package/dist/cli/CliOutput.js.map +1 -1
  124. package/dist/cli/Command.d.ts +24 -16
  125. package/dist/cli/Command.d.ts.map +1 -1
  126. package/dist/cli/Command.js +59 -29
  127. package/dist/cli/Command.js.map +1 -1
  128. package/dist/cli/Completions.d.ts +58 -0
  129. package/dist/cli/Completions.d.ts.map +1 -1
  130. package/dist/cli/Completions.js +49 -9
  131. package/dist/cli/Completions.js.map +1 -1
  132. package/dist/cli/Flag.d.ts +15 -0
  133. package/dist/cli/Flag.d.ts.map +1 -1
  134. package/dist/cli/Flag.js +5 -0
  135. package/dist/cli/Flag.js.map +1 -1
  136. package/dist/cli/GlobalFlag.d.ts.map +1 -1
  137. package/dist/cli/GlobalFlag.js +15 -7
  138. package/dist/cli/GlobalFlag.js.map +1 -1
  139. package/dist/cli/Param.d.ts +9 -0
  140. package/dist/cli/Param.d.ts.map +1 -1
  141. package/dist/cli/Param.js +21 -2
  142. package/dist/cli/Param.js.map +1 -1
  143. package/dist/cli/TerminalCapabilities.d.ts +3 -2
  144. package/dist/cli/TerminalCapabilities.d.ts.map +1 -1
  145. package/dist/cli/TerminalCapabilities.js +3 -1
  146. package/dist/cli/TerminalCapabilities.js.map +1 -1
  147. package/dist/cli/internal/completions/bash.js +73 -27
  148. package/dist/cli/internal/completions/bash.js.map +1 -1
  149. package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  150. package/dist/cluster/ClusterWorkflowEngine.js +45 -10
  151. package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
  152. package/dist/cluster/MessageStorage.d.ts +23 -45
  153. package/dist/cluster/MessageStorage.d.ts.map +1 -1
  154. package/dist/cluster/MessageStorage.js +6 -7
  155. package/dist/cluster/MessageStorage.js.map +1 -1
  156. package/dist/cluster/Sharding.d.ts.map +1 -1
  157. package/dist/cluster/Sharding.js +61 -21
  158. package/dist/cluster/Sharding.js.map +1 -1
  159. package/dist/cluster/ShardingConfig.d.ts +10 -0
  160. package/dist/cluster/ShardingConfig.d.ts.map +1 -1
  161. package/dist/cluster/ShardingConfig.js.map +1 -1
  162. package/dist/cluster/Snowflake.d.ts.map +1 -1
  163. package/dist/cluster/Snowflake.js +3 -7
  164. package/dist/cluster/Snowflake.js.map +1 -1
  165. package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
  166. package/dist/cluster/SqlRunnerStorage.js +87 -39
  167. package/dist/cluster/SqlRunnerStorage.js.map +1 -1
  168. package/dist/cluster/internal/entityManager.js +54 -20
  169. package/dist/cluster/internal/entityManager.js.map +1 -1
  170. package/dist/devtools/DevToolsClient.d.ts.map +1 -1
  171. package/dist/devtools/DevToolsClient.js +2 -0
  172. package/dist/devtools/DevToolsClient.js.map +1 -1
  173. package/dist/encoding/Base64.js +36 -0
  174. package/dist/encoding/Base64.js.map +1 -1
  175. package/dist/encoding/Sse.d.ts.map +1 -1
  176. package/dist/encoding/Sse.js +3 -3
  177. package/dist/encoding/Sse.js.map +1 -1
  178. package/dist/encoding/Toml.d.ts.map +1 -1
  179. package/dist/encoding/Toml.js +21 -16
  180. package/dist/encoding/Toml.js.map +1 -1
  181. package/dist/eventlog/SqlEventJournal.d.ts.map +1 -1
  182. package/dist/eventlog/SqlEventJournal.js +47 -27
  183. package/dist/eventlog/SqlEventJournal.js.map +1 -1
  184. package/dist/eventlog/internal/conflicts.d.ts +0 -1
  185. package/dist/eventlog/internal/conflicts.d.ts.map +1 -1
  186. package/dist/eventlog/internal/conflicts.js +0 -3
  187. package/dist/eventlog/internal/conflicts.js.map +1 -1
  188. package/dist/http/Cookies.d.ts.map +1 -1
  189. package/dist/http/Cookies.js +10 -9
  190. package/dist/http/Cookies.js.map +1 -1
  191. package/dist/http/HttpClient.d.ts +423 -0
  192. package/dist/http/HttpClient.d.ts.map +1 -1
  193. package/dist/http/HttpClient.js +231 -7
  194. package/dist/http/HttpClient.js.map +1 -1
  195. package/dist/http/HttpClientError.d.ts +8 -1
  196. package/dist/http/HttpClientError.d.ts.map +1 -1
  197. package/dist/http/HttpClientError.js +37 -1
  198. package/dist/http/HttpClientError.js.map +1 -1
  199. package/dist/http/HttpClientRequest.d.ts.map +1 -1
  200. package/dist/http/HttpClientRequest.js +1 -1
  201. package/dist/http/HttpClientRequest.js.map +1 -1
  202. package/dist/http/HttpMiddleware.d.ts +1 -1
  203. package/dist/http/HttpMiddleware.d.ts.map +1 -1
  204. package/dist/http/HttpMiddleware.js +14 -16
  205. package/dist/http/HttpMiddleware.js.map +1 -1
  206. package/dist/http/HttpRouter.d.ts.map +1 -1
  207. package/dist/http/HttpRouter.js +2 -1
  208. package/dist/http/HttpRouter.js.map +1 -1
  209. package/dist/http/HttpServerError.js +2 -2
  210. package/dist/http/HttpServerError.js.map +1 -1
  211. package/dist/http/HttpServerRequest.d.ts +6 -1
  212. package/dist/http/HttpServerRequest.d.ts.map +1 -1
  213. package/dist/http/HttpServerRequest.js +73 -10
  214. package/dist/http/HttpServerRequest.js.map +1 -1
  215. package/dist/http/HttpStaticServer.d.ts.map +1 -1
  216. package/dist/http/HttpStaticServer.js +48 -21
  217. package/dist/http/HttpStaticServer.js.map +1 -1
  218. package/dist/http/MultipartParser/internal/contentType.js +3 -3
  219. package/dist/http/UrlParams.d.ts +3 -1
  220. package/dist/http/UrlParams.d.ts.map +1 -1
  221. package/dist/http/UrlParams.js +4 -2
  222. package/dist/http/UrlParams.js.map +1 -1
  223. package/dist/http/internal/compression.js +4 -5
  224. package/dist/http/internal/compression.js.map +1 -1
  225. package/dist/http/internal/decompression.js +3 -0
  226. package/dist/http/internal/decompression.js.map +1 -1
  227. package/dist/http/internal/httpBody.js +8 -1
  228. package/dist/http/internal/httpBody.js.map +1 -1
  229. package/dist/http/internal/urlParams.js +25 -0
  230. package/dist/http/internal/urlParams.js.map +1 -1
  231. package/dist/http-api/HttpApi.d.ts +3 -6
  232. package/dist/http-api/HttpApi.d.ts.map +1 -1
  233. package/dist/http-api/HttpApi.js +3 -6
  234. package/dist/http-api/HttpApi.js.map +1 -1
  235. package/dist/http-api/HttpApiBuilder.d.ts.map +1 -1
  236. package/dist/http-api/HttpApiBuilder.js +27 -11
  237. package/dist/http-api/HttpApiBuilder.js.map +1 -1
  238. package/dist/http-api/HttpApiClient.d.ts +77 -7
  239. package/dist/http-api/HttpApiClient.d.ts.map +1 -1
  240. package/dist/http-api/HttpApiClient.js +142 -44
  241. package/dist/http-api/HttpApiClient.js.map +1 -1
  242. package/dist/http-api/HttpApiEndpoint.d.ts +24 -7
  243. package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
  244. package/dist/http-api/HttpApiEndpoint.js +109 -27
  245. package/dist/http-api/HttpApiEndpoint.js.map +1 -1
  246. package/dist/http-api/HttpApiSchema.d.ts +76 -29
  247. package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
  248. package/dist/http-api/HttpApiSchema.js +70 -59
  249. package/dist/http-api/HttpApiSchema.js.map +1 -1
  250. package/dist/http-api/HttpApiTest.d.ts.map +1 -1
  251. package/dist/http-api/HttpApiTest.js +3 -2
  252. package/dist/http-api/HttpApiTest.js.map +1 -1
  253. package/dist/http-api/OpenApi.d.ts.map +1 -1
  254. package/dist/http-api/OpenApi.js +25 -16
  255. package/dist/http-api/OpenApi.js.map +1 -1
  256. package/dist/http-api/internal/toCodecHttpProperties.d.ts +2 -0
  257. package/dist/http-api/internal/toCodecHttpProperties.d.ts.map +1 -0
  258. package/dist/http-api/internal/toCodecHttpProperties.js +38 -0
  259. package/dist/http-api/internal/toCodecHttpProperties.js.map +1 -0
  260. package/dist/internal/arbitrary/runner.d.ts.map +1 -1
  261. package/dist/internal/arbitrary/runner.js +120 -44
  262. package/dist/internal/arbitrary/runner.js.map +1 -1
  263. package/dist/internal/core.js +2 -0
  264. package/dist/internal/core.js.map +1 -1
  265. package/dist/internal/effect.js +21 -13
  266. package/dist/internal/effect.js.map +1 -1
  267. package/dist/internal/equal.js +14 -0
  268. package/dist/internal/equal.js.map +1 -1
  269. package/dist/internal/jsonSchema.d.ts +2 -0
  270. package/dist/internal/jsonSchema.d.ts.map +1 -0
  271. package/dist/internal/jsonSchema.js +28 -0
  272. package/dist/internal/jsonSchema.js.map +1 -0
  273. package/dist/internal/matcher.js +1 -1
  274. package/dist/internal/matcher.js.map +1 -1
  275. package/dist/internal/schema/compilerRegistry.js +4 -1
  276. package/dist/internal/schema/compilerRegistry.js.map +1 -1
  277. package/dist/internal/schema/content.d.ts +2 -0
  278. package/dist/internal/schema/content.d.ts.map +1 -0
  279. package/dist/internal/schema/content.js +13 -0
  280. package/dist/internal/schema/content.js.map +1 -0
  281. package/dist/internal/schema/fromJsonSchemaDocument.js +173 -185
  282. package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
  283. package/dist/internal/schema/fromRepresentation.js +2 -1
  284. package/dist/internal/schema/fromRepresentation.js.map +1 -1
  285. package/dist/internal/schema/standardSchema.js +8 -2
  286. package/dist/internal/schema/standardSchema.js.map +1 -1
  287. package/dist/internal/schema/toCodeDocument.js +3 -3
  288. package/dist/internal/schema/toCodeDocument.js.map +1 -1
  289. package/dist/internal/schema/toCodec.js +21 -24
  290. package/dist/internal/schema/toCodec.js.map +1 -1
  291. package/dist/internal/schema/toJsonSchemaDocument.js +205 -140
  292. package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
  293. package/dist/internal/schema/toRepresentation.js +107 -129
  294. package/dist/internal/schema/toRepresentation.js.map +1 -1
  295. package/dist/internal/sql.d.ts +2 -0
  296. package/dist/internal/sql.d.ts.map +1 -0
  297. package/dist/internal/sql.js +13 -0
  298. package/dist/internal/sql.js.map +1 -0
  299. package/dist/internal/version.js +1 -1
  300. package/dist/observability/OtlpProxy.d.ts +154 -0
  301. package/dist/observability/OtlpProxy.d.ts.map +1 -0
  302. package/dist/observability/OtlpProxy.js +235 -0
  303. package/dist/observability/OtlpProxy.js.map +1 -0
  304. package/dist/observability/OtlpTracer.d.ts.map +1 -1
  305. package/dist/observability/OtlpTracer.js +4 -0
  306. package/dist/observability/OtlpTracer.js.map +1 -1
  307. package/dist/observability/index.d.ts +5 -0
  308. package/dist/observability/index.d.ts.map +1 -1
  309. package/dist/observability/index.js +5 -0
  310. package/dist/observability/index.js.map +1 -1
  311. package/dist/persistence/CircuitBreaker.d.ts +897 -0
  312. package/dist/persistence/CircuitBreaker.d.ts.map +1 -0
  313. package/dist/persistence/CircuitBreaker.js +1165 -0
  314. package/dist/persistence/CircuitBreaker.js.map +1 -0
  315. package/dist/persistence/Redis.d.ts +78 -2
  316. package/dist/persistence/Redis.d.ts.map +1 -1
  317. package/dist/persistence/Redis.js +62 -7
  318. package/dist/persistence/Redis.js.map +1 -1
  319. package/dist/persistence/index.d.ts +5 -0
  320. package/dist/persistence/index.d.ts.map +1 -1
  321. package/dist/persistence/index.js +5 -0
  322. package/dist/persistence/index.js.map +1 -1
  323. package/dist/process/ChildProcess.d.ts +30 -4
  324. package/dist/process/ChildProcess.d.ts.map +1 -1
  325. package/dist/process/ChildProcess.js.map +1 -1
  326. package/dist/process/ChildProcessSpawner.d.ts +30 -0
  327. package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
  328. package/dist/process/ChildProcessSpawner.js +5 -2
  329. package/dist/process/ChildProcessSpawner.js.map +1 -1
  330. package/dist/reactivity/AsyncResult.d.ts +1 -1
  331. package/dist/reactivity/AsyncResult.d.ts.map +1 -1
  332. package/dist/rpc/RpcClient.d.ts.map +1 -1
  333. package/dist/rpc/RpcClient.js +9 -8
  334. package/dist/rpc/RpcClient.js.map +1 -1
  335. package/dist/rpc/RpcSerialization.d.ts +14 -0
  336. package/dist/rpc/RpcSerialization.d.ts.map +1 -1
  337. package/dist/rpc/RpcSerialization.js +20 -8
  338. package/dist/rpc/RpcSerialization.js.map +1 -1
  339. package/dist/rpc/RpcServer.d.ts.map +1 -1
  340. package/dist/rpc/RpcServer.js +11 -1
  341. package/dist/rpc/RpcServer.js.map +1 -1
  342. package/dist/rpc/RpcTest.d.ts +1 -0
  343. package/dist/rpc/RpcTest.d.ts.map +1 -1
  344. package/dist/rpc/RpcTest.js +1 -0
  345. package/dist/rpc/RpcTest.js.map +1 -1
  346. package/dist/sql/Migrator.d.ts +2 -1
  347. package/dist/sql/Migrator.d.ts.map +1 -1
  348. package/dist/sql/Migrator.js +11 -8
  349. package/dist/sql/Migrator.js.map +1 -1
  350. package/dist/sql/SqlClient.d.ts +9 -4
  351. package/dist/sql/SqlClient.d.ts.map +1 -1
  352. package/dist/sql/SqlClient.js +8 -1
  353. package/dist/sql/SqlClient.js.map +1 -1
  354. package/dist/sql/SqlResolver.d.ts +4 -0
  355. package/dist/sql/SqlResolver.d.ts.map +1 -1
  356. package/dist/sql/SqlResolver.js +18 -4
  357. package/dist/sql/SqlResolver.js.map +1 -1
  358. package/dist/sql/Statement.d.ts +7 -0
  359. package/dist/sql/Statement.d.ts.map +1 -1
  360. package/dist/sql/Statement.js +21 -2
  361. package/dist/sql/Statement.js.map +1 -1
  362. package/dist/workflow/DurableDeferred.d.ts.map +1 -1
  363. package/dist/workflow/DurableDeferred.js +21 -2
  364. package/dist/workflow/DurableDeferred.js.map +1 -1
  365. package/package.json +1 -1
  366. package/src/Arbitrary.ts +10 -2
  367. package/src/Channel.ts +47 -18
  368. package/src/Data.ts +60 -265
  369. package/src/Effect.ts +1 -1
  370. package/src/Equal.ts +8 -1
  371. package/src/Exit.ts +3 -3
  372. package/src/Formatter.ts +28 -13
  373. package/src/Hash.ts +4 -1
  374. package/src/JsonPatch.ts +4 -0
  375. package/src/JsonSchema.ts +12 -40
  376. package/src/Metric.ts +3 -3
  377. package/src/MutableList.ts +7 -5
  378. package/src/MutableRef.ts +8 -1
  379. package/src/PartitionedSemaphore.ts +24 -13
  380. package/src/Pool.ts +109 -37
  381. package/src/PubSub.ts +5 -6
  382. package/src/Ref.ts +8 -0
  383. package/src/Schedule.ts +1 -1
  384. package/src/Schema.ts +48 -25
  385. package/src/SchemaAST.ts +20 -20
  386. package/src/SchemaParser.ts +51 -18
  387. package/src/SchemaRepresentation.ts +31 -34
  388. package/src/SchemaTransformation.ts +9 -2
  389. package/src/Semaphore.ts +67 -40
  390. package/src/Sink.ts +15 -2
  391. package/src/Stream.ts +33 -16
  392. package/src/String.ts +3 -0
  393. package/src/Tracer.ts +15 -1
  394. package/src/ai/LanguageModel.ts +9 -0
  395. package/src/ai/McpServer.ts +14 -13
  396. package/src/ai/Prompt.ts +65 -0
  397. package/src/ai/Response.ts +34 -9
  398. package/src/ai/Tool.ts +38 -2
  399. package/src/ai/Toolkit.ts +4 -1
  400. package/src/cli/Argument.ts +15 -0
  401. package/src/cli/CliError.ts +90 -3
  402. package/src/cli/CliOutput.ts +183 -6
  403. package/src/cli/Command.ts +53 -41
  404. package/src/cli/Completions.ts +51 -0
  405. package/src/cli/Flag.ts +15 -0
  406. package/src/cli/GlobalFlag.ts +6 -7
  407. package/src/cli/Param.ts +29 -6
  408. package/src/cli/TerminalCapabilities.ts +6 -3
  409. package/src/cli/internal/completions/bash.ts +79 -29
  410. package/src/cluster/ClusterWorkflowEngine.ts +46 -16
  411. package/src/cluster/MessageStorage.ts +19 -14
  412. package/src/cluster/Sharding.ts +83 -21
  413. package/src/cluster/ShardingConfig.ts +5 -0
  414. package/src/cluster/Snowflake.ts +3 -7
  415. package/src/cluster/SqlRunnerStorage.ts +110 -47
  416. package/src/cluster/internal/entityManager.ts +75 -22
  417. package/src/devtools/DevToolsClient.ts +2 -0
  418. package/src/encoding/Base64.ts +38 -0
  419. package/src/encoding/Sse.ts +4 -3
  420. package/src/encoding/Toml.ts +33 -16
  421. package/src/eventlog/SqlEventJournal.ts +68 -45
  422. package/src/eventlog/internal/conflicts.ts +0 -4
  423. package/src/http/Cookies.ts +10 -11
  424. package/src/http/HttpClient.ts +547 -7
  425. package/src/http/HttpClientError.ts +35 -1
  426. package/src/http/HttpClientRequest.ts +9 -1
  427. package/src/http/HttpMiddleware.ts +15 -18
  428. package/src/http/HttpRouter.ts +2 -1
  429. package/src/http/HttpServerError.ts +2 -2
  430. package/src/http/HttpServerRequest.ts +102 -16
  431. package/src/http/HttpStaticServer.ts +51 -22
  432. package/src/http/MultipartParser/internal/contentType.ts +3 -3
  433. package/src/http/UrlParams.ts +6 -1
  434. package/src/http/internal/compression.ts +4 -5
  435. package/src/http/internal/decompression.ts +6 -0
  436. package/src/http/internal/httpBody.ts +10 -2
  437. package/src/http/internal/urlParams.ts +29 -0
  438. package/src/http-api/HttpApi.ts +3 -6
  439. package/src/http-api/HttpApiBuilder.ts +45 -15
  440. package/src/http-api/HttpApiClient.ts +218 -72
  441. package/src/http-api/HttpApiEndpoint.ts +121 -30
  442. package/src/http-api/HttpApiSchema.ts +141 -48
  443. package/src/http-api/HttpApiTest.ts +3 -2
  444. package/src/http-api/OpenApi.ts +20 -17
  445. package/src/http-api/internal/toCodecHttpProperties.ts +56 -0
  446. package/src/internal/arbitrary/runner.ts +133 -36
  447. package/src/internal/core.ts +2 -0
  448. package/src/internal/effect.ts +24 -16
  449. package/src/internal/equal.ts +17 -0
  450. package/src/internal/jsonSchema.ts +27 -0
  451. package/src/internal/matcher.ts +1 -1
  452. package/src/internal/schema/compilerRegistry.ts +6 -1
  453. package/src/internal/schema/content.ts +18 -0
  454. package/src/internal/schema/fromJsonSchemaDocument.ts +228 -190
  455. package/src/internal/schema/fromRepresentation.ts +2 -1
  456. package/src/internal/schema/standardSchema.ts +2 -2
  457. package/src/internal/schema/toCodeDocument.ts +4 -4
  458. package/src/internal/schema/toCodec.ts +26 -22
  459. package/src/internal/schema/toJsonSchemaDocument.ts +189 -167
  460. package/src/internal/schema/toRepresentation.ts +122 -140
  461. package/src/internal/sql.ts +14 -0
  462. package/src/internal/version.ts +1 -1
  463. package/src/observability/OtlpProxy.ts +314 -0
  464. package/src/observability/OtlpTracer.ts +4 -0
  465. package/src/observability/index.ts +6 -0
  466. package/src/persistence/CircuitBreaker.ts +1678 -0
  467. package/src/persistence/Redis.ts +129 -8
  468. package/src/persistence/index.ts +6 -0
  469. package/src/process/ChildProcess.ts +30 -4
  470. package/src/process/ChildProcessSpawner.ts +41 -2
  471. package/src/reactivity/AsyncResult.ts +1 -1
  472. package/src/rpc/RpcClient.ts +13 -10
  473. package/src/rpc/RpcSerialization.ts +32 -9
  474. package/src/rpc/RpcServer.ts +16 -1
  475. package/src/rpc/RpcTest.ts +3 -0
  476. package/src/sql/Migrator.ts +12 -7
  477. package/src/sql/SqlClient.ts +11 -4
  478. package/src/sql/SqlResolver.ts +23 -9
  479. package/src/sql/Statement.ts +30 -2
  480. package/src/workflow/DurableDeferred.ts +23 -6
package/src/Data.ts CHANGED
@@ -392,13 +392,14 @@ export declare namespace TaggedEnum {
392
392
  * @category utility types
393
393
  * @since 3.1.0
394
394
  */
395
- export type Constructor<A extends { readonly _tag: string }> = Types.Simplify<
396
- {
395
+ export type Constructor<A extends { readonly _tag: string }> =
396
+ & {
397
397
  readonly [Tag in A["_tag"]]: ConstructorFrom<
398
398
  Extract<A, { readonly _tag: Tag }>,
399
399
  "_tag"
400
400
  >
401
- } & {
401
+ }
402
+ & {
402
403
  readonly $is: <Tag extends A["_tag"]>(
403
404
  tag: Tag
404
405
  ) => (u: unknown) => u is Extract<A, { readonly _tag: Tag }>
@@ -424,7 +425,6 @@ export declare namespace TaggedEnum {
424
425
  ): Unify<ReturnType<Cases[A["_tag"]]>>
425
426
  }
426
427
  }
427
- >
428
428
 
429
429
  /**
430
430
  * Function type that constructs a tagged-union variant from its fields,
@@ -446,6 +446,61 @@ export declare namespace TaggedEnum {
446
446
  args: Types.VoidIfEmpty<{ readonly [P in keyof A as P extends Tag ? never : P]: A[P] }>
447
447
  ) => A
448
448
 
449
+ /**
450
+ * The full constructors-and-matchers object type returned by {@link taggedEnum}
451
+ * for a {@link WithGenerics} definition.
452
+ *
453
+ * **When to use**
454
+ *
455
+ * Use when you want to annotate an exported constructor bundle for a generic
456
+ * tagged enum.
457
+ *
458
+ * **Details**
459
+ *
460
+ * Includes one generic constructor per variant (keyed by tag name) plus the
461
+ * `$is` / `$match` helpers from {@link GenericMatchers}.
462
+ *
463
+ * @see {@link Constructor} — the non-generic equivalent
464
+ * @see {@link GenericCaseConstructor} — the constructor for one variant
465
+ *
466
+ * @category utility types
467
+ * @since 4.0.7
468
+ */
469
+ export type GenericConstructor<Z extends WithGenerics<1 | 2 | 3 | 4>> =
470
+ & {
471
+ readonly [Tag in Z["taggedEnum"]["_tag"]]: GenericCaseConstructor<Z, Tag>[Z["numberOfGenerics"]]
472
+ }
473
+ & GenericMatchers<Z>
474
+
475
+ /**
476
+ * The generic constructors for one variant of a {@link WithGenerics}
477
+ * definition, keyed by the number of generics.
478
+ *
479
+ * **When to use**
480
+ *
481
+ * Use to type an individual constructor for one variant of a generic tagged
482
+ * enum, by indexing with the definition's `numberOfGenerics`.
483
+ *
484
+ * @see {@link GenericConstructor} — the full constructor object type
485
+ *
486
+ * @category utility types
487
+ * @since 4.0.7
488
+ */
489
+ export interface GenericCaseConstructor<Z extends WithGenerics<number>, Tag extends Z["taggedEnum"]["_tag"]> {
490
+ readonly 1: <A>(
491
+ args: Args<Kind<Z, A>, Tag, Extract<Kind<Z, A>, { readonly _tag: Tag }>>
492
+ ) => Value<Kind<Z, A>, Tag>
493
+ readonly 2: <A, B>(
494
+ args: Args<Kind<Z, A, B>, Tag, Extract<Kind<Z, A, B>, { readonly _tag: Tag }>>
495
+ ) => Value<Kind<Z, A, B>, Tag>
496
+ readonly 3: <A, B, C>(
497
+ args: Args<Kind<Z, A, B, C>, Tag, Extract<Kind<Z, A, B, C>, { readonly _tag: Tag }>>
498
+ ) => Value<Kind<Z, A, B, C>, Tag>
499
+ readonly 4: <A, B, C, D>(
500
+ args: Args<Kind<Z, A, B, C, D>, Tag, Extract<Kind<Z, A, B, C, D>, { readonly _tag: Tag }>>
501
+ ) => Value<Kind<Z, A, B, C, D>, Tag>
502
+ }
503
+
449
504
  /**
450
505
  * Type-guard and pattern-matching interface for generic tagged enums.
451
506
  *
@@ -655,267 +710,7 @@ export const taggedEnum: {
655
710
  * @category constructors
656
711
  * @since 2.0.0
657
712
  */
658
- <Z extends TaggedEnum.WithGenerics<1>>(): Types.Simplify<
659
- {
660
- readonly [Tag in Z["taggedEnum"]["_tag"]]: <A>(
661
- args: TaggedEnum.Args<
662
- TaggedEnum.Kind<Z, A>,
663
- Tag,
664
- Extract<TaggedEnum.Kind<Z, A>, { readonly _tag: Tag }>
665
- >
666
- ) => TaggedEnum.Value<TaggedEnum.Kind<Z, A>, Tag>
667
- } & TaggedEnum.GenericMatchers<Z>
668
- >
669
-
670
- /**
671
- * Creates constructors and matchers for a `TaggedEnum` type.
672
- *
673
- * **When to use**
674
- *
675
- * Use when you model a closed union with plain data objects and want
676
- * construction, tag checks, and exhaustive matching from the same definition.
677
- *
678
- * **Details**
679
- *
680
- * Returns an object with:
681
- * - One constructor per variant (keyed by tag name)
682
- * - `$is(tag)` — returns a type-guard function that checks only the `_tag` field
683
- * - `$match` — exhaustive pattern matching (data-first or data-last)
684
- *
685
- * **Gotchas**
686
- *
687
- * - Constructors produce **plain objects**, not class instances.
688
- * - `$is(tag)` only checks the `_tag` field, not the full structure. It relies
689
- * on the tag being globally unique and the value being produced by your
690
- * constructors. For untrusted input, validate with the `Schema` module first.
691
- *
692
- * **Example** (Creating and matching tagged enum values)
693
- *
694
- * ```ts import.meta.vitest
695
- * import { Data } from "effect"
696
- *
697
- * type HttpError = Data.TaggedEnum<{
698
- * BadRequest: { readonly message: string }
699
- * NotFound: { readonly url: string }
700
- * }>
701
- *
702
- * const { BadRequest, NotFound, $is, $match } = Data.taggedEnum<HttpError>()
703
- *
704
- * const err = NotFound({ url: "/missing" })
705
- *
706
- * $is("NotFound")(err) // => true
707
- *
708
- * $match(err, {
709
- * BadRequest: (e) => e.message,
710
- * NotFound: (e) => `${e.url} not found`
711
- * }) // => "/missing not found"
712
- * ```
713
- *
714
- * **Example** (Defining a generic tagged enum)
715
- *
716
- * ```ts import.meta.vitest
717
- * import { Data } from "effect"
718
- *
719
- * type MyResult<E, A> = Data.TaggedEnum<{
720
- * Failure: { readonly error: E }
721
- * Success: { readonly value: A }
722
- * }>
723
- * interface MyResultDef extends Data.TaggedEnum.WithGenerics<2> {
724
- * readonly taggedEnum: MyResult<this["A"], this["B"]>
725
- * }
726
- * const { Failure, Success } = Data.taggedEnum<MyResultDef>()
727
- *
728
- * const ok = Success({ value: 42 })
729
- * // ok: { readonly _tag: "Success"; readonly value: number }
730
- * ok // => { value: 42, _tag: "Success" }
731
- * ```
732
- *
733
- * @see {@link TaggedEnum} — the type-level companion
734
- * @see {@link TaggedEnum.Constructor} — the returned object type
735
- * @see {@link TaggedEnum.WithGenerics} — generic enum support
736
- *
737
- * @stability stable
738
- * @category constructors
739
- * @since 2.0.0
740
- */
741
- <Z extends TaggedEnum.WithGenerics<2>>(): Types.Simplify<
742
- {
743
- readonly [Tag in Z["taggedEnum"]["_tag"]]: <A, B>(
744
- args: TaggedEnum.Args<
745
- TaggedEnum.Kind<Z, A, B>,
746
- Tag,
747
- Extract<TaggedEnum.Kind<Z, A, B>, { readonly _tag: Tag }>
748
- >
749
- ) => TaggedEnum.Value<TaggedEnum.Kind<Z, A, B>, Tag>
750
- } & TaggedEnum.GenericMatchers<Z>
751
- >
752
-
753
- /**
754
- * Creates constructors and matchers for a `TaggedEnum` type.
755
- *
756
- * **When to use**
757
- *
758
- * Use when you model a closed union with plain data objects and want
759
- * construction, tag checks, and exhaustive matching from the same definition.
760
- *
761
- * **Details**
762
- *
763
- * Returns an object with:
764
- * - One constructor per variant (keyed by tag name)
765
- * - `$is(tag)` — returns a type-guard function that checks only the `_tag` field
766
- * - `$match` — exhaustive pattern matching (data-first or data-last)
767
- *
768
- * **Gotchas**
769
- *
770
- * - Constructors produce **plain objects**, not class instances.
771
- * - `$is(tag)` only checks the `_tag` field, not the full structure. It relies
772
- * on the tag being globally unique and the value being produced by your
773
- * constructors. For untrusted input, validate with the `Schema` module first.
774
- *
775
- * **Example** (Creating and matching tagged enum values)
776
- *
777
- * ```ts import.meta.vitest
778
- * import { Data } from "effect"
779
- *
780
- * type HttpError = Data.TaggedEnum<{
781
- * BadRequest: { readonly message: string }
782
- * NotFound: { readonly url: string }
783
- * }>
784
- *
785
- * const { BadRequest, NotFound, $is, $match } = Data.taggedEnum<HttpError>()
786
- *
787
- * const err = NotFound({ url: "/missing" })
788
- *
789
- * $is("NotFound")(err) // => true
790
- *
791
- * $match(err, {
792
- * BadRequest: (e) => e.message,
793
- * NotFound: (e) => `${e.url} not found`
794
- * }) // => "/missing not found"
795
- * ```
796
- *
797
- * **Example** (Defining a generic tagged enum)
798
- *
799
- * ```ts import.meta.vitest
800
- * import { Data } from "effect"
801
- *
802
- * type MyResult<E, A> = Data.TaggedEnum<{
803
- * Failure: { readonly error: E }
804
- * Success: { readonly value: A }
805
- * }>
806
- * interface MyResultDef extends Data.TaggedEnum.WithGenerics<2> {
807
- * readonly taggedEnum: MyResult<this["A"], this["B"]>
808
- * }
809
- * const { Failure, Success } = Data.taggedEnum<MyResultDef>()
810
- *
811
- * const ok = Success({ value: 42 })
812
- * // ok: { readonly _tag: "Success"; readonly value: number }
813
- * ok // => { value: 42, _tag: "Success" }
814
- * ```
815
- *
816
- * @see {@link TaggedEnum} — the type-level companion
817
- * @see {@link TaggedEnum.Constructor} — the returned object type
818
- * @see {@link TaggedEnum.WithGenerics} — generic enum support
819
- *
820
- * @stability stable
821
- * @category constructors
822
- * @since 2.0.0
823
- */
824
- <Z extends TaggedEnum.WithGenerics<3>>(): Types.Simplify<
825
- {
826
- readonly [Tag in Z["taggedEnum"]["_tag"]]: <A, B, C>(
827
- args: TaggedEnum.Args<
828
- TaggedEnum.Kind<Z, A, B, C>,
829
- Tag,
830
- Extract<TaggedEnum.Kind<Z, A, B, C>, { readonly _tag: Tag }>
831
- >
832
- ) => TaggedEnum.Value<TaggedEnum.Kind<Z, A, B, C>, Tag>
833
- } & TaggedEnum.GenericMatchers<Z>
834
- >
835
-
836
- /**
837
- * Creates constructors and matchers for a `TaggedEnum` type.
838
- *
839
- * **When to use**
840
- *
841
- * Use when you model a closed union with plain data objects and want
842
- * construction, tag checks, and exhaustive matching from the same definition.
843
- *
844
- * **Details**
845
- *
846
- * Returns an object with:
847
- * - One constructor per variant (keyed by tag name)
848
- * - `$is(tag)` — returns a type-guard function that checks only the `_tag` field
849
- * - `$match` — exhaustive pattern matching (data-first or data-last)
850
- *
851
- * **Gotchas**
852
- *
853
- * - Constructors produce **plain objects**, not class instances.
854
- * - `$is(tag)` only checks the `_tag` field, not the full structure. It relies
855
- * on the tag being globally unique and the value being produced by your
856
- * constructors. For untrusted input, validate with the `Schema` module first.
857
- *
858
- * **Example** (Creating and matching tagged enum values)
859
- *
860
- * ```ts import.meta.vitest
861
- * import { Data } from "effect"
862
- *
863
- * type HttpError = Data.TaggedEnum<{
864
- * BadRequest: { readonly message: string }
865
- * NotFound: { readonly url: string }
866
- * }>
867
- *
868
- * const { BadRequest, NotFound, $is, $match } = Data.taggedEnum<HttpError>()
869
- *
870
- * const err = NotFound({ url: "/missing" })
871
- *
872
- * $is("NotFound")(err) // => true
873
- *
874
- * $match(err, {
875
- * BadRequest: (e) => e.message,
876
- * NotFound: (e) => `${e.url} not found`
877
- * }) // => "/missing not found"
878
- * ```
879
- *
880
- * **Example** (Defining a generic tagged enum)
881
- *
882
- * ```ts import.meta.vitest
883
- * import { Data } from "effect"
884
- *
885
- * type MyResult<E, A> = Data.TaggedEnum<{
886
- * Failure: { readonly error: E }
887
- * Success: { readonly value: A }
888
- * }>
889
- * interface MyResultDef extends Data.TaggedEnum.WithGenerics<2> {
890
- * readonly taggedEnum: MyResult<this["A"], this["B"]>
891
- * }
892
- * const { Failure, Success } = Data.taggedEnum<MyResultDef>()
893
- *
894
- * const ok = Success({ value: 42 })
895
- * // ok: { readonly _tag: "Success"; readonly value: number }
896
- * ok // => { value: 42, _tag: "Success" }
897
- * ```
898
- *
899
- * @see {@link TaggedEnum} — the type-level companion
900
- * @see {@link TaggedEnum.Constructor} — the returned object type
901
- * @see {@link TaggedEnum.WithGenerics} — generic enum support
902
- *
903
- * @stability stable
904
- * @category constructors
905
- * @since 2.0.0
906
- */
907
- <Z extends TaggedEnum.WithGenerics<4>>(): Types.Simplify<
908
- {
909
- readonly [Tag in Z["taggedEnum"]["_tag"]]: <A, B, C, D>(
910
- args: TaggedEnum.Args<
911
- TaggedEnum.Kind<Z, A, B, C, D>,
912
- Tag,
913
- Extract<TaggedEnum.Kind<Z, A, B, C, D>, { readonly _tag: Tag }>
914
- >
915
- ) => TaggedEnum.Value<TaggedEnum.Kind<Z, A, B, C, D>, Tag>
916
- } & TaggedEnum.GenericMatchers<Z>
917
- >
918
-
713
+ <Z extends TaggedEnum.WithGenerics<1 | 2 | 3 | 4>>(): TaggedEnum.GenericConstructor<Z>
919
714
  /**
920
715
  * Creates constructors and matchers for a `TaggedEnum` type.
921
716
  *
package/src/Effect.ts CHANGED
@@ -19017,7 +19017,7 @@ export const runSyncWith: <R>(
19017
19017
  * import { Cause, Effect, Exit } from "effect"
19018
19018
  *
19019
19019
  * const exit = Effect.runSyncExit(Effect.promise(() => Promise.resolve(1)))
19020
- * const isAsyncDie = Exit.hasDies(exit) && exit.cause.reasons.some(
19020
+ * const isAsyncDie = Exit.isFailure(exit) && Exit.hasDies(exit) && exit.cause.reasons.some(
19021
19021
  * (reason) => Cause.isDieReason(reason) && Cause.isAsyncFiberError(reason.defect)
19022
19022
  * )
19023
19023
  *
package/src/Equal.ts CHANGED
@@ -12,7 +12,7 @@
12
12
  */
13
13
  import type { Equivalence } from "./Equivalence.ts"
14
14
  import * as Hash from "./Hash.ts"
15
- import { byReferenceInstances, getAllObjectKeys, viewBytes } from "./internal/equal.ts"
15
+ import { bufferBytes, byReferenceInstances, getAllObjectKeys, isArrayBufferLike, viewBytes } from "./internal/equal.ts"
16
16
  import { hasProperty } from "./Predicate.ts"
17
17
 
18
18
  /**
@@ -257,6 +257,13 @@ function compareStructure(self: object, that: object): boolean {
257
257
  return false
258
258
  }
259
259
  return compareArrays(self, that)
260
+ } else if (isArrayBufferLike(self)) {
261
+ if (!isArrayBufferLike(that) || (self instanceof ArrayBuffer) !== (that instanceof ArrayBuffer)) {
262
+ return false
263
+ }
264
+ const selfBytes = bufferBytes(self)
265
+ const thatBytes = bufferBytes(that)
266
+ return selfBytes !== undefined && thatBytes !== undefined && compareTypedArrays(selfBytes, thatBytes)
260
267
  } else if (ArrayBuffer.isView(self)) {
261
268
  const selfIsDataView = self instanceof DataView
262
269
  if (
package/src/Exit.ts CHANGED
@@ -463,7 +463,7 @@ export const isFailure: <A, E>(self: Exit<A, E>) => self is Failure<A, E> = effe
463
463
  * @category guards
464
464
  * @since 4.0.0
465
465
  */
466
- export const hasFails: <A, E>(self: Exit<A, E>) => self is Failure<A, E> = effect.exitHasFails
466
+ export const hasFails: <A, E>(self: Exit<A, E>) => boolean = effect.exitHasFails
467
467
 
468
468
  /**
469
469
  * Checks whether a failed Exit contains defects (Die reasons).
@@ -494,7 +494,7 @@ export const hasFails: <A, E>(self: Exit<A, E>) => self is Failure<A, E> = effec
494
494
  * @category guards
495
495
  * @since 4.0.0
496
496
  */
497
- export const hasDies: <A, E>(self: Exit<A, E>) => self is Failure<A, E> = effect.exitHasDies
497
+ export const hasDies: <A, E>(self: Exit<A, E>) => boolean = effect.exitHasDies
498
498
 
499
499
  /**
500
500
  * Checks whether a failed Exit contains interruptions (Interrupt reasons).
@@ -525,7 +525,7 @@ export const hasDies: <A, E>(self: Exit<A, E>) => self is Failure<A, E> = effect
525
525
  * @category guards
526
526
  * @since 4.0.0
527
527
  */
528
- export const hasInterrupts: <A, E>(self: Exit<A, E>) => self is Failure<A, E> = effect.exitHasInterrupts
528
+ export const hasInterrupts: <A, E>(self: Exit<A, E>) => boolean = effect.exitHasInterrupts
529
529
 
530
530
  /**
531
531
  * Extracts the Success variant from an Exit as a Result.
package/src/Formatter.ts CHANGED
@@ -309,10 +309,11 @@ export function formatJson(input: unknown, options?: {
309
309
  readonly space?: number | string | undefined
310
310
  }): string {
311
311
  const ancestors: Array<object> = []
312
+ const sources = new WeakMap<object, object>()
312
313
  return JSON.stringify(
313
314
  input,
314
315
  function(this: object, key: string, value: unknown) {
315
- const original = Object.getOwnPropertyDescriptor(this, key)?.value
316
+ const original = Object.getOwnPropertyDescriptor(sources.get(this) ?? this, key)?.value
316
317
  const redacted = Predicate.hasProperty(original, symbolRedactable)
317
318
  ? redact(original)
318
319
  : redact(value)
@@ -339,18 +340,10 @@ export function formatJson(input: unknown, options?: {
339
340
  if (!hasGetter(current) || isJsonPrimitiveWrapper(current)) {
340
341
  return current
341
342
  }
342
- // JSON.stringify reads a getter once, then calls toJSON on the result
343
- // before the replacer sees it. Intercept that read to redact the value
344
- // first, instead of re-reading the getter in the replacer, which could
345
- // repeat side effects or return a different value.
346
- const serialized = new Proxy(current, {
347
- get(target, key) {
348
- const value = Reflect.get(target, key, target)
349
- return Object.getOwnPropertyDescriptor(target, key)?.get !== undefined ? redact(value) : value
350
- }
351
- })
352
- ancestors.push(serialized)
353
- return serialized
343
+ const view = redactingView(current)
344
+ sources.set(view, current)
345
+ ancestors.push(view)
346
+ return view
354
347
  },
355
348
  options?.space
356
349
  ) ?? "null"
@@ -365,6 +358,28 @@ function hasGetter(object: object): boolean {
365
358
  return false
366
359
  }
367
360
 
361
+ // JSON.stringify reads a getter once, then calls toJSON on the result before
362
+ // the replacer sees it, so getter results are redacted at the read. A Proxy
363
+ // would do, but not every engine has one, so each key becomes a getter that
364
+ // reads the source lazily, with the source as receiver.
365
+ function redactingView(object: object): object {
366
+ const view = Array.isArray(object) ? [] : {}
367
+ // JSON.stringify reads every array index, regardless of enumerability
368
+ const keys = Array.isArray(object)
369
+ ? Array.from({ length: object.length }, (_, i) => String(i))
370
+ : Object.keys(object)
371
+ for (const key of keys) {
372
+ Object.defineProperty(view, key, {
373
+ enumerable: true,
374
+ get: () => {
375
+ const value = Reflect.get(object, key)
376
+ return Object.getOwnPropertyDescriptor(object, key)?.get !== undefined ? redact(value) : value
377
+ }
378
+ })
379
+ }
380
+ return view
381
+ }
382
+
368
383
  function isJsonPrimitiveWrapper(object: object): boolean {
369
384
  // Built-in valueOf checks internal slots across realms without calling user code.
370
385
  for (const valueOf of [Number.prototype.valueOf, Boolean.prototype.valueOf, String.prototype.valueOf]) {
package/src/Hash.ts CHANGED
@@ -11,7 +11,7 @@
11
11
  * @since 2.0.0
12
12
  */
13
13
  import { dual } from "./Function.ts"
14
- import { byReferenceInstances, getAllObjectKeys, viewBytes } from "./internal/equal.ts"
14
+ import { bufferBytes, byReferenceInstances, getAllObjectKeys, isArrayBufferLike, viewBytes } from "./internal/equal.ts"
15
15
  import { addBackEdge, backEdges } from "./internal/hash.ts"
16
16
  import { hasProperty } from "./Predicate.ts"
17
17
 
@@ -144,6 +144,9 @@ export const hash: <A>(self: A) => number = <A>(self: A) => {
144
144
  h = (self as Hash)[symbol]()
145
145
  } else if (typeof self === "function") {
146
146
  h = random(self)
147
+ } else if (isArrayBufferLike(self)) {
148
+ const bytes = bufferBytes(self)
149
+ h = bytes === undefined ? random(self) : array(bytes)
147
150
  } else if (self instanceof DataView) {
148
151
  h = array(viewBytes(self))
149
152
  } else if (Array.isArray(self) || ArrayBuffer.isView(self)) {
package/src/JsonPatch.ts CHANGED
@@ -303,12 +303,16 @@ function isJsonObject(value: unknown): value is Schema.JsonObject {
303
303
  *
304
304
  * - `""` (empty pointer) refers to the root and returns `[]`
305
305
  * - Non-empty pointers must start with `/`
306
+ * - `~` must be followed by `0` or `1`
306
307
  */
307
308
  function tokenize(pointer: string): Array<string> {
308
309
  if (pointer === "") return []
309
310
  if (pointer.charCodeAt(0) !== 47 /* "/" */) {
310
311
  throw new Error(`Invalid JSON Pointer, it must start with "/": ${JSON.stringify(pointer)}`)
311
312
  }
313
+ if (/~(?![01])/.test(pointer)) {
314
+ throw new Error(`Invalid JSON Pointer escape: ${JSON.stringify(pointer)}`)
315
+ }
312
316
  return pointer.split("/").slice(1).map(unescapeToken)
313
317
  }
314
318
 
package/src/JsonSchema.ts CHANGED
@@ -9,6 +9,7 @@
9
9
  * @stability stable
10
10
  * @since 4.0.0
11
11
  */
12
+ import * as InternalJsonSchema from "./internal/jsonSchema.ts"
12
13
  import * as InternalRecord from "./internal/record.ts"
13
14
  import { formatUriFragment, parseUriFragment } from "./JsonPointer.ts"
14
15
  import * as Predicate from "./Predicate.ts"
@@ -725,30 +726,14 @@ function transformSchema(
725
726
  for (const key of Object.keys(node)) {
726
727
  const value = node[key]
727
728
  let transformed = value
728
- switch (key) {
729
- case "$defs":
730
- case "properties":
731
- case "patternProperties":
732
- case "dependentSchemas":
729
+ switch (InternalJsonSchema.getSubschemaKind(key)) {
730
+ case "map":
733
731
  transformed = mapObject(value, (value) => walk(value, inEmbeddedResource)) ?? value
734
732
  break
735
- case "allOf":
736
- case "anyOf":
737
- case "oneOf":
738
- case "prefixItems":
733
+ case "array":
739
734
  transformed = Array.isArray(value) ? value.map((value) => walk(value, inEmbeddedResource)) : value
740
735
  break
741
- case "not":
742
- case "additionalProperties":
743
- case "propertyNames":
744
- case "unevaluatedProperties":
745
- case "items":
746
- case "contains":
747
- case "unevaluatedItems":
748
- case "if":
749
- case "then":
750
- case "else":
751
- case "contentSchema":
736
+ case "schema":
752
737
  transformed = walk(value, inEmbeddedResource)
753
738
  }
754
739
  InternalRecord.assignProperty(out, key, transformed)
@@ -1236,6 +1221,7 @@ function draft07Adapter(source: JsonSchema, context: Context): JsonSchema {
1236
1221
  case "unevaluatedItems":
1237
1222
  unsupported(key, "Draft-07", "the target dialect has no equivalent")
1238
1223
  case "required":
1224
+ case "enum":
1239
1225
  if (Array.isArray(value) && value.length === 0) break
1240
1226
  InternalRecord.assignProperty(out, key, value)
1241
1227
  break
@@ -1261,6 +1247,8 @@ function draft07Adapter(source: JsonSchema, context: Context): JsonSchema {
1261
1247
  convertDependencies(source, out, context, "draft-07")
1262
1248
  convertLegacyId(source, out, "$id", "Draft-07")
1263
1249
 
1250
+ if (Array.isArray(source.enum) && source.enum.length === 0) appendAllOf(out, { not: {} })
1251
+
1264
1252
  convertReference(out, reference, context)
1265
1253
 
1266
1254
  return out
@@ -1559,30 +1547,14 @@ function hasSchemaIdentifier(node: unknown): boolean {
1559
1547
  if (Object.hasOwn(node, "$id") || Object.hasOwn(node, "$anchor")) return true
1560
1548
  for (const key of Object.keys(node)) {
1561
1549
  const value = node[key]
1562
- switch (key) {
1563
- case "$defs":
1564
- case "properties":
1565
- case "patternProperties":
1566
- case "dependentSchemas":
1550
+ switch (InternalJsonSchema.getSubschemaKind(key)) {
1551
+ case "map":
1567
1552
  if (Predicate.isObject(value) && Object.values(value).some(hasSchemaIdentifier)) return true
1568
1553
  break
1569
- case "allOf":
1570
- case "anyOf":
1571
- case "oneOf":
1572
- case "prefixItems":
1554
+ case "array":
1573
1555
  if (Array.isArray(value) && value.some(hasSchemaIdentifier)) return true
1574
1556
  break
1575
- case "not":
1576
- case "additionalProperties":
1577
- case "propertyNames":
1578
- case "unevaluatedProperties":
1579
- case "items":
1580
- case "contains":
1581
- case "unevaluatedItems":
1582
- case "if":
1583
- case "then":
1584
- case "else":
1585
- case "contentSchema":
1557
+ case "schema":
1586
1558
  if (hasSchemaIdentifier(value)) return true
1587
1559
  }
1588
1560
  }
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.