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
@@ -548,10 +548,13 @@ function makeOpenApi<Id extends string, Groups extends HttpApiGroup.Constraint>(
548
548
  if (!HttpApiMiddleware.isSecurity(middleware)) {
549
549
  return
550
550
  }
551
- for (const [name, security] of Object.entries(middleware.security)) {
552
- processHttpApiSecurity(name, security)
553
- op.security.push({ [name]: [] })
551
+ const names = Object.keys(middleware.security)
552
+ for (const name of names) {
553
+ processHttpApiSecurity(name, middleware.security[name])
554
554
  }
555
+ // Stacked middleware must all pass (AND); schemes within one middleware are alternatives (OR).
556
+ const requirements = op.security.length === 0 ? [{}] : op.security
557
+ op.security = requirements.flatMap((requirement) => names.map((name) => ({ ...requirement, [name]: [] })))
555
558
  })
556
559
 
557
560
  function processHttpApiSecurity(
@@ -585,7 +588,9 @@ function makeOpenApi<Id extends string, Groups extends HttpApiGroup.Constraint>(
585
588
  for (const schema of HttpApiEndpoint.getPayloadSchemas(endpoint)) {
586
589
  if (HttpApiSchema.isStreamSchema(schema)) {
587
590
  // Endpoint construction rejects a buffered payload sharing a streaming payload's media type.
588
- schemasByContentType.set(schema.contentType, schema)
591
+ for (const contentType of schema.contentTypes) {
592
+ schemasByContentType.set(contentType, schema)
593
+ }
589
594
  continue
590
595
  }
591
596
  if (HttpApiSchema.isNoContent(schema.ast)) continue
@@ -825,6 +830,9 @@ function selectReferences(
825
830
 
826
831
  pushChecks(representation.checks)
827
832
  switch (representation._tag) {
833
+ case "String":
834
+ if (representation.content?.schema !== undefined) stack.push(representation.content.schema)
835
+ break
828
836
  case "Declaration":
829
837
  stack.push(...representation.typeParameters)
830
838
  break
@@ -899,6 +907,7 @@ function extractResponseBodies(
899
907
  map.get(status)!.headers.push(
900
908
  Schema.Struct({ connection: Schema.Literal("Upgrade"), upgrade: Schema.Literal(body.protocol) })
901
909
  )
910
+ if (body.headers !== undefined) map.get(status)!.headers.push(body.headers)
902
911
  } else if (HttpApiSchema.isStreamSchema(body)) {
903
912
  addStreamContent(body, status)
904
913
  } else if (HttpApiSchema.isNoContent(ast)) {
@@ -975,20 +984,14 @@ function extractResponseBodies(
975
984
  stream: HttpApiSchema.StreamSchema,
976
985
  status: number
977
986
  ) {
978
- const statusMap = map.get(status)
987
+ let statusMap = map.get(status)
979
988
  if (statusMap === undefined) {
980
- map.set(status, {
981
- descriptions: new Set(),
982
- content: undefined,
983
- headers: [],
984
- streamContent: new Map([[stream.contentType, stream]])
985
- })
986
- } else {
987
- if (statusMap.streamContent === undefined) {
988
- statusMap.streamContent = new Map([[stream.contentType, stream]])
989
- } else {
990
- statusMap.streamContent.set(stream.contentType, stream)
991
- }
989
+ statusMap = { descriptions: new Set(), content: undefined, headers: [], streamContent: undefined }
990
+ map.set(status, statusMap)
991
+ }
992
+ const streamContent = statusMap.streamContent ??= new Map()
993
+ for (const contentType of stream.contentTypes) {
994
+ streamContent.set(contentType, stream)
992
995
  }
993
996
  }
994
997
  }
@@ -0,0 +1,56 @@
1
+ import { memoize } from "../../Function.ts"
2
+ import * as Option from "../../Option.ts"
3
+ import * as Predicate from "../../Predicate.ts"
4
+ import * as Schema from "../../Schema.ts"
5
+ import * as SchemaAST from "../../SchemaAST.ts"
6
+ import * as SchemaGetter from "../../SchemaGetter.ts"
7
+ import * as SchemaTransformation from "../../SchemaTransformation.ts"
8
+
9
+ /** @internal */
10
+ export function toCodecHttpProperties<S extends Schema.Constraint>(schema: S): Schema.toCodecStringTree<S> {
11
+ const codec = Schema.toCodecStringTree(schema)
12
+ return codec.rebuild(normalizeProperties(codec.ast))
13
+ }
14
+
15
+ const omitUndefined = new SchemaTransformation.Transformation(
16
+ SchemaGetter.passthrough(),
17
+ SchemaGetter.transformOptional(Option.filter(Predicate.isNotUndefined))
18
+ )
19
+
20
+ // Only descend through unions and suspensions, leaving nested values alone.
21
+ const present = memoize((ast: SchemaAST.AST): SchemaAST.AST => {
22
+ if (ast._tag === "Undefined") return new SchemaAST.Never(ast.annotations, undefined, undefined, ast.context)
23
+ if (ast._tag === "Suspend") return ast.recur(present)
24
+ if (ast._tag !== "Union") return ast
25
+
26
+ const members = SchemaAST.mapOrSame(ast.types, present)
27
+ if (members === ast.types) return ast
28
+ const types = members.filter((member) => member._tag !== "Never")
29
+ if (types.length === 1 && ast.checks === undefined && ast.annotations === undefined) {
30
+ return SchemaAST.replaceContext(types[0], ast.context)
31
+ }
32
+ return new SchemaAST.Union(types, ast.options, ast.annotations, ast.checks, undefined, ast.context)
33
+ })
34
+
35
+ const normalizeProperties = SchemaAST.applyToSelfOrLastLinkEncodingIdempotent((ast) => {
36
+ if (ast._tag === "Union" || ast._tag === "Suspend") return ast.recur(normalizeProperties)
37
+ if (ast._tag !== "Objects") return ast
38
+
39
+ const properties = SchemaAST.mapOrSame(ast.propertySignatures, (ps) => {
40
+ const encoded = SchemaAST.toEncoded(ps.type)
41
+ if (!SchemaAST.isOptional(encoded)) return ps
42
+ const wire = present(encoded)
43
+ return wire === encoded
44
+ ? ps
45
+ : new SchemaAST.PropertySignature(ps.name, SchemaAST.decodeTo(wire, ps.type, omitUndefined))
46
+ })
47
+ return properties === ast.propertySignatures ? ast : new SchemaAST.Objects(
48
+ properties,
49
+ ast.indexSignatures,
50
+ ast.annotations,
51
+ ast.checks,
52
+ undefined,
53
+ ast.context,
54
+ ast.encodingChecks
55
+ )
56
+ })
@@ -3,7 +3,9 @@ import type {
3
3
  ArrayOptions,
4
4
  CheckOptions,
5
5
  CheckResult,
6
+ Exhausted,
6
7
  GlobalOptions,
8
+ Passed,
7
9
  PropertyError,
8
10
  PropertyFailure,
9
11
  Replay,
@@ -13,12 +15,16 @@ import type {
13
15
  SchemaOptions
14
16
  } from "../../Arbitrary.ts"
15
17
  import * as Effect from "../../Effect.ts"
18
+ import * as Fiber from "../../Fiber.ts"
16
19
  import * as Option from "../../Option.ts"
17
20
  import { pipeArguments } from "../../Pipeable.ts"
21
+ import * as Queue from "../../Queue.ts"
18
22
  import * as Random from "../../Random.ts"
19
23
  import type * as Result from "../../Result.ts"
20
24
  import * as Scheduler from "../../Scheduler.ts"
21
25
  import type * as Schema from "../../Schema.ts"
26
+ import * as Scope from "../../Scope.ts"
27
+ import * as Semaphore from "../../Semaphore.ts"
22
28
  import { done } from "../core.ts"
23
29
  import * as InternalRecord from "../record.ts"
24
30
  import * as Arrays from "./array.ts"
@@ -582,6 +588,111 @@ const followReplay = Effect.fnUntraced(function*<A, E, R>(
582
588
  return { _tag: "Replayed", current, failure } as const
583
589
  })
584
590
 
591
+ interface SearchOptions {
592
+ readonly runs: number
593
+ readonly size: number
594
+ readonly maxDiscards: number
595
+ readonly seed: string | number
596
+ readonly maxOpsBeforeYield: number
597
+ }
598
+
599
+ interface SearchCase<A> {
600
+ readonly sample: Model.Sample<A>
601
+ readonly attempt: number
602
+ readonly size: number
603
+ readonly runs: number
604
+ readonly discards: number
605
+ }
606
+
607
+ interface Found<A, E> extends SearchCase<A> {
608
+ readonly _tag: "Found"
609
+ readonly failure: PropertyFailure<E>
610
+ }
611
+
612
+ type SearchResult<A, E> = Passed | Exhausted | Found<A, E>
613
+
614
+ // Only the search advances this cursor. Each generated case advances size, while discards retain it.
615
+ // This gives both search strategies the sequential seed and size schedule, independently of evaluation timing.
616
+ const makeSearch = <A>(self: Arbitrary<A>, options: SearchOptions) => {
617
+ const seed = hashSeed(options.seed)
618
+ let runs = 0
619
+ let discards = 0
620
+ let attemptIndex = 0
621
+ return Effect.gen(function*(): Effect.fn.Return<SearchCase<A> | Exhausted> {
622
+ const size = options.runs === 1 ? options.size : Math.round(runs * options.size / (options.runs - 1))
623
+ while (true) {
624
+ const index = attemptIndex++
625
+ const sample = yield* generateAttempt(self.gen, seed, index, size, true)
626
+ if (sample._tag === "Generated") {
627
+ return { sample, attempt: index, size, runs: ++runs, discards }
628
+ }
629
+ if (++discards > options.maxDiscards) return { _tag: "Exhausted", runs, discards, seed: options.seed }
630
+ if (options.maxOpsBeforeYield <= 1 || discards % options.maxOpsBeforeYield === 0) yield* Effect.yieldNow
631
+ }
632
+ })
633
+ }
634
+
635
+ const searchSequential = Effect.fnUntraced(function*<A, E, R>(
636
+ next: Effect.Effect<SearchCase<A> | Exhausted>,
637
+ property: (value: A) => boolean | Effect.Effect<boolean, E, R>,
638
+ runs: number
639
+ ): Effect.fn.Return<SearchResult<A, E>, never, R> {
640
+ while (true) {
641
+ const current = yield* next
642
+ if ("_tag" in current) return current
643
+ const outcome = yield* evaluateProperty(property, current.sample.value)
644
+ if (outcome._tag !== "Passed") return { ...current, _tag: "Found", failure: outcome }
645
+ if (current.runs === runs) return { _tag: "Passed", runs, discards: current.discards }
646
+ }
647
+ })
648
+
649
+ const searchConcurrent = Effect.fnUntraced(function*<A, E, R>(
650
+ next: Effect.Effect<SearchCase<A> | Exhausted>,
651
+ property: (value: A) => boolean | Effect.Effect<boolean, E, R>,
652
+ runs: number,
653
+ concurrency: number
654
+ ): Effect.fn.Return<SearchResult<A, E>, never, R> {
655
+ interface Pending extends SearchCase<A> {
656
+ readonly fiber: Fiber.Fiber<typeof passedProperty | PropertyFailure<E>>
657
+ }
658
+ const queue = yield* Queue.make<Pending | Exhausted>()
659
+ const window = yield* Semaphore.make(concurrency)
660
+ const scope = yield* Scope.make("parallel")
661
+ const produce = Effect.gen(function*() {
662
+ for (let index = 0; index < runs; index++) {
663
+ // Hold each permit until its result is consumed, bounding both work and buffered results.
664
+ yield* window.take(1)
665
+ const current = yield* next
666
+ if ("_tag" in current) {
667
+ yield* Queue.offer(queue, current)
668
+ return
669
+ }
670
+ const fiber = yield* Effect.forkIn(Effect.suspend(() => evaluateProperty(property, current.sample.value)), scope)
671
+ yield* Queue.offer(queue, { ...current, fiber })
672
+ }
673
+ }).pipe(
674
+ // Queue failure follows already queued cases, so speculative generation defects cannot overtake them.
675
+ Effect.catchCause((cause) => Queue.failCause(queue, cause)),
676
+ Effect.awaitAllChildren
677
+ )
678
+ return yield* Effect.acquireUseRelease(
679
+ Effect.forkIn(produce, scope),
680
+ () =>
681
+ Effect.gen(function*(): Effect.fn.Return<SearchResult<A, E>, never, R> {
682
+ while (true) {
683
+ const current = yield* Queue.take(queue)
684
+ if ("_tag" in current) return current
685
+ const outcome = yield* Fiber.join(current.fiber)
686
+ if (outcome._tag !== "Passed") return { ...current, _tag: "Found", failure: outcome }
687
+ if (current.runs === runs) return { _tag: "Passed", runs, discards: current.discards }
688
+ yield* window.release(1)
689
+ }
690
+ }),
691
+ // Generator and evaluation finalizers can depend on each other, so interrupt them independently before awaiting.
692
+ (_, exit) => Scope.close(scope, exit)
693
+ )
694
+ })
695
+
585
696
  /** @internal */
586
697
  export const checkEffect = Effect.fnUntraced(function*<A, E, R>(
587
698
  self: Arbitrary<A>,
@@ -612,6 +723,7 @@ export const checkEffect = Effect.fnUntraced(function*<A, E, R>(
612
723
 
613
724
  const defaults = globalOptions.check
614
725
  const runsTarget = positive(options?.runs ?? defaults?.runs, 100, "runs")
726
+ const concurrency = positive(options?.concurrency ?? defaults?.concurrency, 1, "concurrency")
615
727
  const size = natural(options?.size ?? defaults?.size, 10, "size")
616
728
  const maxDiscards = natural(
617
729
  options?.maxDiscards ?? defaults?.maxDiscards,
@@ -622,41 +734,26 @@ export const checkEffect = Effect.fnUntraced(function*<A, E, R>(
622
734
  const seedOption = options?.seed ?? defaults?.seed
623
735
  const maxOpsBeforeYield = yield* Scheduler.MaxOpsBeforeYield
624
736
  const seed = yield* resolveMasterSeed(seedOption)
625
- const seedState = hashSeed(seed)
626
- let runs = 0
627
- let discards = 0
628
- let attemptIndex = 0
629
- while (runs < runsTarget) {
630
- const currentAttempt = attemptIndex++
631
- const currentSize = runsTarget === 1 ? size : Math.round(runs * size / (runsTarget - 1))
632
- const attempt = yield* generateAttempt(self.gen, seedState, currentAttempt, currentSize, true)
633
- if (attempt._tag === "Discarded") {
634
- if (++discards > maxDiscards) return { _tag: "Exhausted", runs, discards, seed }
635
- if (maxOpsBeforeYield <= 1 || discards % maxOpsBeforeYield === 0) yield* Effect.yieldNow
636
- continue
637
- }
638
- const outcome = yield* evaluateProperty(property, attempt.value)
639
- if (outcome._tag === "Passed") {
640
- runs++
641
- continue
642
- }
643
- const minimized = yield* shrink(attempt, outcome, property, maxShrinks)
644
- return {
645
- _tag: "Falsified",
646
- initialInput: attempt.value,
647
- shrunkInput: minimized.current.value,
648
- failure: minimized.failure,
649
- runs: runs + 1,
650
- discards,
651
- shrinks: minimized.shrinks,
652
- replay: makeReplay({
653
- seed,
654
- attempt: currentAttempt,
655
- size: currentSize,
656
- path: minimized.path,
657
- failureTag: outcome._tag
658
- })
659
- }
737
+ const next = makeSearch(self, { runs: runsTarget, size, maxDiscards, seed, maxOpsBeforeYield })
738
+ const result = yield* concurrency === 1
739
+ ? searchSequential(next, property, runsTarget)
740
+ : searchConcurrent(next, property, runsTarget, concurrency)
741
+ if (result._tag !== "Found") return result
742
+ const minimized = yield* shrink(result.sample, result.failure, property, maxShrinks)
743
+ return {
744
+ _tag: "Falsified",
745
+ initialInput: result.sample.value,
746
+ shrunkInput: minimized.current.value,
747
+ failure: minimized.failure,
748
+ runs: result.runs,
749
+ discards: result.discards,
750
+ shrinks: minimized.shrinks,
751
+ replay: makeReplay({
752
+ seed,
753
+ attempt: result.attempt,
754
+ size: result.size,
755
+ path: minimized.path,
756
+ failureTag: result.failure._tag
757
+ })
660
758
  }
661
- return { _tag: "Passed", runs, discards }
662
759
  })
@@ -216,6 +216,8 @@ export abstract class ReasonBase<Tag extends string> implements Cause.Cause.Reas
216
216
  if (options?.overwrite !== true && newAnnotations.has(key)) return
217
217
  newAnnotations.set(key, value)
218
218
  })
219
+ // Keep the reason when nothing was added, so interrupts still match by identity.
220
+ if (options?.overwrite !== true && newAnnotations.size === this.annotations.size) return this
219
221
  const self = Object.assign(Object.create(Object.getPrototypeOf(this)), this)
220
222
  self.annotations = newAnnotations
221
223
  return self
@@ -1005,7 +1005,10 @@ export const fail: <E>(error: E) => Effect.Effect<never, E> = exitFail
1005
1005
  export const sync: <A>(thunk: LazyArg<A>) => Effect.Effect<A> = makePrimitive({
1006
1006
  op: "Sync",
1007
1007
  [evaluate](fiber): Primitive | Yield {
1008
- const value = this[args]()
1008
+ // call the thunk without a receiver, so V8 does not name its frame after
1009
+ // the args property, which the stack cleaner cuts at
1010
+ const thunk = this[args]
1011
+ const value = thunk()
1009
1012
  const cont = fiber.getCont(contA)
1010
1013
  return cont ? cont[contA](value, fiber) : fiber.yieldWith(exitSucceed(value))
1011
1014
  }
@@ -1017,7 +1020,9 @@ export const suspend: <A, E, R>(
1017
1020
  ) => Effect.Effect<A, E, R> = makePrimitive({
1018
1021
  op: "Suspend",
1019
1022
  [evaluate](_fiber) {
1020
- return this[args]()
1023
+ // see Sync
1024
+ const thunk = this[args]
1025
+ return thunk()
1021
1026
  }
1022
1027
  })
1023
1028
 
@@ -1353,6 +1358,17 @@ const makeFn = (
1353
1358
  : (pipeables.shift()!).bind(bodyOrOptions.self)
1354
1359
  const definitionName = `${name} (definition)`
1355
1360
  const definitionStack = defError ? fnStackCleaner(() => defError.stack) : constUndefined
1361
+ // Built outside the traced function so the frame cannot capture its `arguments`,
1362
+ // which forked fibers inheriting the frame would otherwise keep alive.
1363
+ const makeCallFrame = (callError: Error | undefined) => (prev: StackFrame | undefined): StackFrame => ({
1364
+ name,
1365
+ stack: callError ? fnStackCleaner(() => callError.stack) : constUndefined,
1366
+ parent: {
1367
+ name: definitionName,
1368
+ stack: definitionStack,
1369
+ parent: prev
1370
+ }
1371
+ })
1356
1372
 
1357
1373
  return defineFunctionLength(body.length, function(this: any, ...args: Array<any>) {
1358
1374
  let result = suspend(() => {
@@ -1377,15 +1393,7 @@ const makeFn = (
1377
1393
  useSpan(name, spanOptions!, (span) => provideParentSpan(result, span)) :
1378
1394
  result,
1379
1395
  CurrentStackFrame,
1380
- (prev) => ({
1381
- name,
1382
- stack: callError ? fnStackCleaner(() => callError.stack) : constUndefined,
1383
- parent: {
1384
- name: definitionName,
1385
- stack: definitionStack,
1386
- parent: prev
1387
- }
1388
- })
1396
+ makeCallFrame(callError)
1389
1397
  )
1390
1398
  })
1391
1399
  }
@@ -2057,17 +2065,17 @@ export const exitFindDefect = Filter.composePassthrough(
2057
2065
  /** @internal */
2058
2066
  export const exitHasInterrupts = <A, E>(
2059
2067
  self: Exit.Exit<A, E>
2060
- ): self is Exit.Failure<A, E> => self._tag === "Failure" && hasInterrupts(self.cause)
2068
+ ): boolean => self._tag === "Failure" && hasInterrupts(self.cause)
2061
2069
 
2062
2070
  /** @internal */
2063
2071
  export const exitHasDies = <A, E>(
2064
2072
  self: Exit.Exit<A, E>
2065
- ): self is Exit.Failure<A, E> => self._tag === "Failure" && hasDies(self.cause)
2073
+ ): boolean => self._tag === "Failure" && hasDies(self.cause)
2066
2074
 
2067
2075
  /** @internal */
2068
2076
  export const exitHasFails = <A, E>(
2069
2077
  self: Exit.Exit<A, E>
2070
- ): self is Exit.Failure<A, E> => self._tag === "Failure" && hasFails(self.cause)
2078
+ ): boolean => self._tag === "Failure" && hasFails(self.cause)
2071
2079
 
2072
2080
  /** @internal */
2073
2081
  export const exitVoid: Exit.Exit<void> = exitSucceed(void 0)
@@ -6307,7 +6315,7 @@ export const annotateCurrentSpan: {
6307
6315
  } = (...args: [Record<string, unknown>] | [key: string, value: unknown]) =>
6308
6316
  withFiber((fiber) => {
6309
6317
  const span = fiber.currentSpanLocal
6310
- if (span) {
6318
+ if (span && span.status._tag !== "Ended") {
6311
6319
  if (args.length === 1) {
6312
6320
  for (const [key, value] of Object.entries(args[0])) {
6313
6321
  span.attribute(key, value)
@@ -6950,7 +6958,7 @@ export const tracerLogger = loggerMake<unknown, void>(({ cause, fiber, logLevel,
6950
6958
  const clock = fiber.getRef(ClockRef)
6951
6959
  const annotations = fiber.getRef(CurrentLogAnnotations)
6952
6960
  const span = fiber.cache.span
6953
- if (span === undefined || span._tag === "ExternalSpan") return
6961
+ if (span === undefined || span._tag === "ExternalSpan" || span.status._tag === "Ended") return
6954
6962
  const attributes: Record<string, unknown> = {}
6955
6963
  for (const [key, value] of Object.entries(annotations)) {
6956
6964
  InternalRecord.assignProperty(attributes, key, value)
@@ -29,3 +29,20 @@ export const byReferenceInstances = new WeakSet<object>()
29
29
 
30
30
  /** @internal */
31
31
  export const viewBytes = (view: DataView): Uint8Array => new Uint8Array(view.buffer, view.byteOffset, view.byteLength)
32
+
33
+ /** @internal */
34
+ export const isArrayBufferLike = (u: unknown): u is ArrayBufferLike =>
35
+ u instanceof ArrayBuffer || (typeof SharedArrayBuffer !== "undefined" && u instanceof SharedArrayBuffer)
36
+
37
+ /**
38
+ * Returns `undefined` for detached buffers, which can no longer be read.
39
+ *
40
+ * @internal
41
+ */
42
+ export const bufferBytes = (buffer: ArrayBufferLike): Uint8Array | undefined => {
43
+ try {
44
+ return new Uint8Array(buffer)
45
+ } catch {
46
+ return undefined
47
+ }
48
+ }
@@ -0,0 +1,27 @@
1
+ /** @internal */
2
+ export function getSubschemaKind(keyword: string): "schema" | "map" | "array" | undefined {
3
+ switch (keyword) {
4
+ case "$defs":
5
+ case "properties":
6
+ case "patternProperties":
7
+ case "dependentSchemas":
8
+ return "map"
9
+ case "allOf":
10
+ case "anyOf":
11
+ case "oneOf":
12
+ case "prefixItems":
13
+ return "array"
14
+ case "not":
15
+ case "additionalProperties":
16
+ case "propertyNames":
17
+ case "unevaluatedProperties":
18
+ case "items":
19
+ case "contains":
20
+ case "unevaluatedItems":
21
+ case "if":
22
+ case "then":
23
+ case "else":
24
+ case "contentSchema":
25
+ return "schema"
26
+ }
27
+ }
@@ -140,7 +140,7 @@ const makePredicate = (pattern: unknown): Predicate.Predicate<unknown> => {
140
140
  const len = predicates.length
141
141
 
142
142
  return (u: unknown) => {
143
- if (!Array.isArray(u)) {
143
+ if (!Array.isArray(u) || u.length < len) {
144
144
  return false
145
145
  }
146
146
 
@@ -58,6 +58,7 @@ export interface Entry {
58
58
  readonly is?: Is | undefined
59
59
  readonly decode?: Decode | undefined
60
60
  readonly make?: Make | undefined
61
+ readonly compiledMakeEffect?: Parser | undefined
61
62
  readonly decodeEffect: Parser
62
63
  readonly parser: Parser
63
64
  readonly makeEffect: Parser
@@ -117,6 +118,10 @@ class CompilerEntry extends InterpretedEntry {
117
118
  return this.save("make", this.operation("make"))
118
119
  }
119
120
 
121
+ get compiledMakeEffect(): Parser | undefined {
122
+ return this.save("compiledMakeEffect", this.operation("makeEffect"))
123
+ }
124
+
120
125
  override get decodeEffect(): Parser {
121
126
  return this.save(
122
127
  "decodeEffect",
@@ -132,7 +137,7 @@ class CompilerEntry extends InterpretedEntry {
132
137
  }
133
138
 
134
139
  override get makeEffect(): Parser {
135
- const makeEffect = this.operation("makeEffect")
140
+ const makeEffect = this.compiledMakeEffect
136
141
  if (makeEffect !== undefined) return this.save("makeEffect", makeEffect)
137
142
  const child = (ast: SchemaAST.AST): Parser => lazyParser(this.resolve, ast, "makeEffect")
138
143
  return this.save(
@@ -0,0 +1,18 @@
1
+ const ContentTypeId = Symbol.for("~effect/Schema/content")
2
+
3
+ /** @internal */
4
+ export interface Content {
5
+ readonly mediaType: string
6
+ readonly preserveSchema: boolean
7
+ }
8
+
9
+ /** @internal */
10
+ export function setContent<A extends object>(operation: A, content: Content): A {
11
+ Object.defineProperty(operation, ContentTypeId, { value: content })
12
+ return operation
13
+ }
14
+
15
+ /** @internal */
16
+ export function getContent(operation: object): Content | undefined {
17
+ return (operation as { readonly [ContentTypeId]?: Content })[ContentTypeId]
18
+ }