effect 4.0.0-beta.100 → 4.0.0-beta.102

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 (502) hide show
  1. package/dist/Array.d.ts.map +1 -1
  2. package/dist/Array.js +81 -5
  3. package/dist/Array.js.map +1 -1
  4. package/dist/Channel.d.ts.map +1 -1
  5. package/dist/Channel.js +27 -9
  6. package/dist/Channel.js.map +1 -1
  7. package/dist/Config.d.ts +1 -1
  8. package/dist/Config.d.ts.map +1 -1
  9. package/dist/Config.js +6 -5
  10. package/dist/Config.js.map +1 -1
  11. package/dist/ConfigProvider.js +7 -7
  12. package/dist/ConfigProvider.js.map +1 -1
  13. package/dist/Data.d.ts.map +1 -1
  14. package/dist/Data.js +2 -1
  15. package/dist/Data.js.map +1 -1
  16. package/dist/Effect.d.ts +61 -100
  17. package/dist/Effect.d.ts.map +1 -1
  18. package/dist/Effect.js +66 -39
  19. package/dist/Effect.js.map +1 -1
  20. package/dist/FiberHandle.d.ts.map +1 -1
  21. package/dist/FiberHandle.js +3 -2
  22. package/dist/FiberHandle.js.map +1 -1
  23. package/dist/Iterable.d.ts.map +1 -1
  24. package/dist/Iterable.js +2 -1
  25. package/dist/Iterable.js.map +1 -1
  26. package/dist/JsonPatch.d.ts.map +1 -1
  27. package/dist/JsonPatch.js +4 -3
  28. package/dist/JsonPatch.js.map +1 -1
  29. package/dist/JsonSchema.d.ts.map +1 -1
  30. package/dist/JsonSchema.js +9 -11
  31. package/dist/JsonSchema.js.map +1 -1
  32. package/dist/Logger.d.ts.map +1 -1
  33. package/dist/Logger.js +3 -2
  34. package/dist/Logger.js.map +1 -1
  35. package/dist/ManagedRuntime.d.ts +9 -0
  36. package/dist/ManagedRuntime.d.ts.map +1 -1
  37. package/dist/ManagedRuntime.js +3 -0
  38. package/dist/ManagedRuntime.js.map +1 -1
  39. package/dist/Metric.d.ts.map +1 -1
  40. package/dist/Metric.js +4 -3
  41. package/dist/Metric.js.map +1 -1
  42. package/dist/MutableList.d.ts.map +1 -1
  43. package/dist/MutableList.js +4 -0
  44. package/dist/MutableList.js.map +1 -1
  45. package/dist/Optic.d.ts.map +1 -1
  46. package/dist/Optic.js +5 -4
  47. package/dist/Optic.js.map +1 -1
  48. package/dist/Option.d.ts.map +1 -1
  49. package/dist/Option.js +2 -1
  50. package/dist/Option.js.map +1 -1
  51. package/dist/PartitionedSemaphore.d.ts.map +1 -1
  52. package/dist/PartitionedSemaphore.js +1 -4
  53. package/dist/PartitionedSemaphore.js.map +1 -1
  54. package/dist/Record.d.ts +93 -1
  55. package/dist/Record.d.ts.map +1 -1
  56. package/dist/Record.js +57 -19
  57. package/dist/Record.js.map +1 -1
  58. package/dist/References.d.ts +0 -45
  59. package/dist/References.d.ts.map +1 -1
  60. package/dist/References.js +0 -45
  61. package/dist/References.js.map +1 -1
  62. package/dist/Request.d.ts.map +1 -1
  63. package/dist/Request.js +9 -6
  64. package/dist/Request.js.map +1 -1
  65. package/dist/Result.d.ts.map +1 -1
  66. package/dist/Result.js +2 -1
  67. package/dist/Result.js.map +1 -1
  68. package/dist/Schema.d.ts +1269 -496
  69. package/dist/Schema.d.ts.map +1 -1
  70. package/dist/Schema.js +2308 -614
  71. package/dist/Schema.js.map +1 -1
  72. package/dist/SchemaAST.d.ts +2 -2
  73. package/dist/SchemaAST.d.ts.map +1 -1
  74. package/dist/SchemaAST.js +189 -130
  75. package/dist/SchemaAST.js.map +1 -1
  76. package/dist/SchemaError.js +1 -1
  77. package/dist/SchemaError.js.map +1 -1
  78. package/dist/SchemaGetter.d.ts +13 -11
  79. package/dist/SchemaGetter.d.ts.map +1 -1
  80. package/dist/SchemaGetter.js +34 -24
  81. package/dist/SchemaGetter.js.map +1 -1
  82. package/dist/SchemaIssue.js +1 -1
  83. package/dist/SchemaIssue.js.map +1 -1
  84. package/dist/SchemaParser.d.ts.map +1 -1
  85. package/dist/SchemaParser.js +1 -12
  86. package/dist/SchemaParser.js.map +1 -1
  87. package/dist/SchemaRepresentation.d.ts +403 -1504
  88. package/dist/SchemaRepresentation.d.ts.map +1 -1
  89. package/dist/SchemaRepresentation.js +294 -2852
  90. package/dist/SchemaRepresentation.js.map +1 -1
  91. package/dist/SchemaTransformation.d.ts +2 -2
  92. package/dist/SchemaTransformation.js +3 -3
  93. package/dist/SchemaTransformation.js.map +1 -1
  94. package/dist/Semaphore.d.ts +5 -3
  95. package/dist/Semaphore.d.ts.map +1 -1
  96. package/dist/Semaphore.js.map +1 -1
  97. package/dist/Stream.d.ts +15 -9
  98. package/dist/Stream.d.ts.map +1 -1
  99. package/dist/Stream.js +46 -16
  100. package/dist/Stream.js.map +1 -1
  101. package/dist/Struct.d.ts.map +1 -1
  102. package/dist/Struct.js +5 -4
  103. package/dist/Struct.js.map +1 -1
  104. package/dist/Types.d.ts +1 -3
  105. package/dist/Types.d.ts.map +1 -1
  106. package/dist/index.d.ts +0 -4
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +0 -4
  109. package/dist/index.js.map +1 -1
  110. package/dist/internal/core.js +3 -2
  111. package/dist/internal/core.js.map +1 -1
  112. package/dist/internal/effect.js +119 -53
  113. package/dist/internal/effect.js.map +1 -1
  114. package/dist/internal/matcher.js +1 -1
  115. package/dist/internal/matcher.js.map +1 -1
  116. package/dist/internal/record.d.ts +0 -3
  117. package/dist/internal/record.d.ts.map +1 -1
  118. package/dist/internal/record.js +10 -5
  119. package/dist/internal/record.js.map +1 -1
  120. package/dist/internal/references.js +0 -4
  121. package/dist/internal/references.js.map +1 -1
  122. package/dist/internal/schema/annotations.js +12 -0
  123. package/dist/internal/schema/annotations.js.map +1 -1
  124. package/dist/internal/schema/fromJsonSchemaDocument.d.ts +2 -0
  125. package/dist/internal/schema/fromJsonSchemaDocument.d.ts.map +1 -0
  126. package/dist/internal/schema/fromJsonSchemaDocument.js +743 -0
  127. package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -0
  128. package/dist/internal/schema/fromRepresentation.d.ts +2 -0
  129. package/dist/internal/schema/fromRepresentation.d.ts.map +1 -0
  130. package/dist/internal/schema/fromRepresentation.js +252 -0
  131. package/dist/internal/schema/fromRepresentation.js.map +1 -0
  132. package/dist/internal/schema/schema.js +28 -40
  133. package/dist/internal/schema/schema.js.map +1 -1
  134. package/dist/internal/schema/{arbitrary.d.ts → toArbitrary.d.ts} +1 -1
  135. package/dist/internal/schema/toArbitrary.d.ts.map +1 -0
  136. package/dist/internal/schema/{arbitrary.js → toArbitrary.js} +8 -9
  137. package/dist/internal/schema/toArbitrary.js.map +1 -0
  138. package/dist/internal/schema/toCodeDocument.d.ts +2 -0
  139. package/dist/internal/schema/toCodeDocument.d.ts.map +1 -0
  140. package/dist/internal/schema/toCodeDocument.js +438 -0
  141. package/dist/internal/schema/toCodeDocument.js.map +1 -0
  142. package/dist/internal/schema/toEquivalence.d.ts +2 -0
  143. package/dist/internal/schema/toEquivalence.d.ts.map +1 -0
  144. package/dist/internal/schema/{equivalence.js → toEquivalence.js} +15 -13
  145. package/dist/internal/schema/toEquivalence.js.map +1 -0
  146. package/dist/internal/schema/toJsonSchemaDocument.d.ts +2 -0
  147. package/dist/internal/schema/toJsonSchemaDocument.d.ts.map +1 -0
  148. package/dist/internal/schema/toJsonSchemaDocument.js +466 -0
  149. package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -0
  150. package/dist/internal/schema/toRepresentation.d.ts +2 -0
  151. package/dist/internal/schema/toRepresentation.d.ts.map +1 -0
  152. package/dist/internal/schema/toRepresentation.js +369 -0
  153. package/dist/internal/schema/toRepresentation.js.map +1 -0
  154. package/dist/internal/stackTraceLimit.js +3 -6
  155. package/dist/internal/stackTraceLimit.js.map +1 -1
  156. package/dist/testing/TestClock.js +4 -1
  157. package/dist/testing/TestClock.js.map +1 -1
  158. package/dist/unstable/ai/AiError.d.ts +26 -26
  159. package/dist/unstable/ai/AiError.d.ts.map +1 -1
  160. package/dist/unstable/ai/AiError.js +5 -4
  161. package/dist/unstable/ai/AiError.js.map +1 -1
  162. package/dist/unstable/ai/AnthropicStructuredOutput.d.ts +21 -6
  163. package/dist/unstable/ai/AnthropicStructuredOutput.d.ts.map +1 -1
  164. package/dist/unstable/ai/AnthropicStructuredOutput.js +86 -316
  165. package/dist/unstable/ai/AnthropicStructuredOutput.js.map +1 -1
  166. package/dist/unstable/ai/EmbeddingModel.d.ts +1 -1
  167. package/dist/unstable/ai/EmbeddingModel.js +1 -1
  168. package/dist/unstable/ai/EmbeddingModel.js.map +1 -1
  169. package/dist/unstable/ai/LanguageModel.d.ts +4 -1
  170. package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
  171. package/dist/unstable/ai/LanguageModel.js +19 -17
  172. package/dist/unstable/ai/LanguageModel.js.map +1 -1
  173. package/dist/unstable/ai/McpSchema.d.ts +197 -197
  174. package/dist/unstable/ai/McpSchema.d.ts.map +1 -1
  175. package/dist/unstable/ai/McpSchema.js +13 -13
  176. package/dist/unstable/ai/McpSchema.js.map +1 -1
  177. package/dist/unstable/ai/McpServer.d.ts +4 -4
  178. package/dist/unstable/ai/McpServer.d.ts.map +1 -1
  179. package/dist/unstable/ai/McpServer.js +116 -49
  180. package/dist/unstable/ai/McpServer.js.map +1 -1
  181. package/dist/unstable/ai/OpenAiStructuredOutput.d.ts +32 -10
  182. package/dist/unstable/ai/OpenAiStructuredOutput.d.ts.map +1 -1
  183. package/dist/unstable/ai/OpenAiStructuredOutput.js +193 -377
  184. package/dist/unstable/ai/OpenAiStructuredOutput.js.map +1 -1
  185. package/dist/unstable/ai/Response.d.ts +19 -19
  186. package/dist/unstable/ai/Response.d.ts.map +1 -1
  187. package/dist/unstable/ai/Response.js +14 -14
  188. package/dist/unstable/ai/Response.js.map +1 -1
  189. package/dist/unstable/ai/Tool.d.ts +4 -0
  190. package/dist/unstable/ai/Tool.d.ts.map +1 -1
  191. package/dist/unstable/ai/Tool.js +11 -3
  192. package/dist/unstable/ai/Tool.js.map +1 -1
  193. package/dist/unstable/ai/Toolkit.d.ts +9 -1
  194. package/dist/unstable/ai/Toolkit.d.ts.map +1 -1
  195. package/dist/unstable/ai/Toolkit.js +14 -10
  196. package/dist/unstable/ai/Toolkit.js.map +1 -1
  197. package/dist/unstable/ai/internal/codec-transformer.js +15 -12
  198. package/dist/unstable/ai/internal/codec-transformer.js.map +1 -1
  199. package/dist/unstable/ai/internal/structured-output.d.ts +2 -0
  200. package/dist/unstable/ai/internal/structured-output.d.ts.map +1 -0
  201. package/dist/unstable/ai/internal/structured-output.js +316 -0
  202. package/dist/unstable/ai/internal/structured-output.js.map +1 -0
  203. package/dist/unstable/cli/CliError.d.ts +40 -2
  204. package/dist/unstable/cli/CliError.d.ts.map +1 -1
  205. package/dist/unstable/cli/CliError.js +45 -6
  206. package/dist/unstable/cli/CliError.js.map +1 -1
  207. package/dist/unstable/cli/Command.js +14 -5
  208. package/dist/unstable/cli/Command.js.map +1 -1
  209. package/dist/unstable/cli/Param.js +3 -3
  210. package/dist/unstable/cli/Param.js.map +1 -1
  211. package/dist/unstable/cli/Primitive.js +1 -1
  212. package/dist/unstable/cli/Primitive.js.map +1 -1
  213. package/dist/unstable/cli/internal/command.d.ts +3 -1
  214. package/dist/unstable/cli/internal/command.d.ts.map +1 -1
  215. package/dist/unstable/cli/internal/command.js +11 -4
  216. package/dist/unstable/cli/internal/command.js.map +1 -1
  217. package/dist/unstable/cli/internal/config.d.ts +0 -48
  218. package/dist/unstable/cli/internal/config.d.ts.map +1 -1
  219. package/dist/unstable/cli/internal/config.js +8 -10
  220. package/dist/unstable/cli/internal/config.js.map +1 -1
  221. package/dist/unstable/cluster/ClusterWorkflowEngine.js +1 -1
  222. package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
  223. package/dist/unstable/cluster/Entity.js +1 -1
  224. package/dist/unstable/cluster/Entity.js.map +1 -1
  225. package/dist/unstable/cluster/Envelope.d.ts.map +1 -1
  226. package/dist/unstable/cluster/Envelope.js +2 -1
  227. package/dist/unstable/cluster/Envelope.js.map +1 -1
  228. package/dist/unstable/cluster/Reply.js +1 -1
  229. package/dist/unstable/cluster/Reply.js.map +1 -1
  230. package/dist/unstable/cluster/Runner.d.ts +1 -1
  231. package/dist/unstable/cluster/Runner.js +1 -1
  232. package/dist/unstable/cluster/Runner.js.map +1 -1
  233. package/dist/unstable/cluster/RunnerAddress.d.ts +1 -1
  234. package/dist/unstable/cluster/RunnerAddress.js +1 -1
  235. package/dist/unstable/cluster/RunnerAddress.js.map +1 -1
  236. package/dist/unstable/cluster/ShardId.js +1 -1
  237. package/dist/unstable/cluster/ShardId.js.map +1 -1
  238. package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
  239. package/dist/unstable/cluster/Sharding.js +125 -24
  240. package/dist/unstable/cluster/Sharding.js.map +1 -1
  241. package/dist/unstable/cluster/ShardingConfig.d.ts +10 -2
  242. package/dist/unstable/cluster/ShardingConfig.d.ts.map +1 -1
  243. package/dist/unstable/cluster/ShardingConfig.js.map +1 -1
  244. package/dist/unstable/cluster/SingleRunner.d.ts +4 -2
  245. package/dist/unstable/cluster/SingleRunner.d.ts.map +1 -1
  246. package/dist/unstable/cluster/SingleRunner.js +2 -1
  247. package/dist/unstable/cluster/SingleRunner.js.map +1 -1
  248. package/dist/unstable/cluster/SqlMessageStorage.d.ts +7 -4
  249. package/dist/unstable/cluster/SqlMessageStorage.d.ts.map +1 -1
  250. package/dist/unstable/cluster/SqlMessageStorage.js +55 -24
  251. package/dist/unstable/cluster/SqlMessageStorage.js.map +1 -1
  252. package/dist/unstable/cluster/SqlRunnerStorage.d.ts.map +1 -1
  253. package/dist/unstable/cluster/SqlRunnerStorage.js +109 -62
  254. package/dist/unstable/cluster/SqlRunnerStorage.js.map +1 -1
  255. package/dist/unstable/cluster/internal/entityManager.js +19 -7
  256. package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
  257. package/dist/unstable/cluster/internal/shardLock.d.ts +2 -0
  258. package/dist/unstable/cluster/internal/shardLock.d.ts.map +1 -0
  259. package/dist/unstable/cluster/internal/shardLock.js +4 -0
  260. package/dist/unstable/cluster/internal/shardLock.js.map +1 -0
  261. package/dist/unstable/devtools/DevToolsSchema.d.ts +20 -20
  262. package/dist/unstable/devtools/DevToolsSchema.d.ts.map +1 -1
  263. package/dist/unstable/devtools/DevToolsSchema.js +8 -5
  264. package/dist/unstable/devtools/DevToolsSchema.js.map +1 -1
  265. package/dist/unstable/eventlog/EventJournal.d.ts +1 -1
  266. package/dist/unstable/eventlog/EventJournal.js +1 -1
  267. package/dist/unstable/eventlog/EventJournal.js.map +1 -1
  268. package/dist/unstable/eventlog/EventLog.d.ts.map +1 -1
  269. package/dist/unstable/eventlog/EventLog.js +15 -11
  270. package/dist/unstable/eventlog/EventLog.js.map +1 -1
  271. package/dist/unstable/eventlog/EventLogEncryption.d.ts +1 -1
  272. package/dist/unstable/eventlog/EventLogEncryption.js +1 -1
  273. package/dist/unstable/eventlog/EventLogEncryption.js.map +1 -1
  274. package/dist/unstable/eventlog/EventLogMessage.d.ts +26 -26
  275. package/dist/unstable/eventlog/EventLogMessage.d.ts.map +1 -1
  276. package/dist/unstable/eventlog/EventLogMessage.js +8 -3
  277. package/dist/unstable/eventlog/EventLogMessage.js.map +1 -1
  278. package/dist/unstable/eventlog/EventLogRemote.d.ts +1 -1
  279. package/dist/unstable/eventlog/SqlEventJournal.js +2 -2
  280. package/dist/unstable/eventlog/SqlEventJournal.js.map +1 -1
  281. package/dist/unstable/eventlog/SqlEventLogServerEncrypted.js +1 -1
  282. package/dist/unstable/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
  283. package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.js +3 -3
  284. package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
  285. package/dist/unstable/http/Cookies.d.ts.map +1 -1
  286. package/dist/unstable/http/Cookies.js +24 -22
  287. package/dist/unstable/http/Cookies.js.map +1 -1
  288. package/dist/unstable/http/Headers.js +8 -8
  289. package/dist/unstable/http/Headers.js.map +1 -1
  290. package/dist/unstable/http/HttpClientRequest.d.ts +44 -0
  291. package/dist/unstable/http/HttpClientRequest.d.ts.map +1 -1
  292. package/dist/unstable/http/HttpClientRequest.js +14 -0
  293. package/dist/unstable/http/HttpClientRequest.js.map +1 -1
  294. package/dist/unstable/http/HttpRouter.d.ts +2 -2
  295. package/dist/unstable/http/HttpRouter.d.ts.map +1 -1
  296. package/dist/unstable/http/HttpRouter.js.map +1 -1
  297. package/dist/unstable/http/HttpServerRequest.d.ts.map +1 -1
  298. package/dist/unstable/http/HttpServerRequest.js +5 -4
  299. package/dist/unstable/http/HttpServerRequest.js.map +1 -1
  300. package/dist/unstable/http/Multipart.d.ts.map +1 -1
  301. package/dist/unstable/http/Multipart.js +17 -15
  302. package/dist/unstable/http/Multipart.js.map +1 -1
  303. package/dist/unstable/http/Template.js +1 -1
  304. package/dist/unstable/http/Template.js.map +1 -1
  305. package/dist/unstable/http/UrlParams.d.ts.map +1 -1
  306. package/dist/unstable/http/UrlParams.js +17 -14
  307. package/dist/unstable/http/UrlParams.js.map +1 -1
  308. package/dist/unstable/httpapi/HttpApi.js +3 -3
  309. package/dist/unstable/httpapi/HttpApi.js.map +1 -1
  310. package/dist/unstable/httpapi/HttpApiClient.js +5 -5
  311. package/dist/unstable/httpapi/HttpApiClient.js.map +1 -1
  312. package/dist/unstable/httpapi/HttpApiGroup.js +1 -1
  313. package/dist/unstable/httpapi/HttpApiGroup.js.map +1 -1
  314. package/dist/unstable/httpapi/OpenApi.d.ts.map +1 -1
  315. package/dist/unstable/httpapi/OpenApi.js +37 -24
  316. package/dist/unstable/httpapi/OpenApi.js.map +1 -1
  317. package/dist/unstable/observability/OtlpExporter.d.ts +72 -1
  318. package/dist/unstable/observability/OtlpExporter.d.ts.map +1 -1
  319. package/dist/unstable/observability/OtlpExporter.js +69 -4
  320. package/dist/unstable/observability/OtlpExporter.js.map +1 -1
  321. package/dist/unstable/observability/OtlpLogger.d.ts +4 -3
  322. package/dist/unstable/observability/OtlpLogger.d.ts.map +1 -1
  323. package/dist/unstable/observability/OtlpLogger.js +2 -2
  324. package/dist/unstable/observability/OtlpLogger.js.map +1 -1
  325. package/dist/unstable/observability/OtlpMetrics.d.ts +7 -3
  326. package/dist/unstable/observability/OtlpMetrics.d.ts.map +1 -1
  327. package/dist/unstable/observability/OtlpMetrics.js +5 -2
  328. package/dist/unstable/observability/OtlpMetrics.js.map +1 -1
  329. package/dist/unstable/observability/OtlpTracer.d.ts +4 -3
  330. package/dist/unstable/observability/OtlpTracer.d.ts.map +1 -1
  331. package/dist/unstable/observability/OtlpTracer.js +2 -2
  332. package/dist/unstable/observability/OtlpTracer.js.map +1 -1
  333. package/dist/unstable/persistence/Persistable.d.ts.map +1 -1
  334. package/dist/unstable/persistence/Persistable.js +2 -1
  335. package/dist/unstable/persistence/Persistable.js.map +1 -1
  336. package/dist/unstable/persistence/RateLimiter.d.ts +2 -2
  337. package/dist/unstable/persistence/RateLimiter.js +2 -2
  338. package/dist/unstable/persistence/RateLimiter.js.map +1 -1
  339. package/dist/unstable/persistence/Redis.d.ts.map +1 -1
  340. package/dist/unstable/persistence/Redis.js +2 -2
  341. package/dist/unstable/persistence/Redis.js.map +1 -1
  342. package/dist/unstable/process/ChildProcessSpawner.js +3 -1
  343. package/dist/unstable/process/ChildProcessSpawner.js.map +1 -1
  344. package/dist/unstable/reactivity/AsyncResult.d.ts.map +1 -1
  345. package/dist/unstable/reactivity/AsyncResult.js +4 -3
  346. package/dist/unstable/reactivity/AsyncResult.js.map +1 -1
  347. package/dist/unstable/reactivity/Atom.d.ts +83 -0
  348. package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
  349. package/dist/unstable/reactivity/Atom.js +31 -0
  350. package/dist/unstable/reactivity/Atom.js.map +1 -1
  351. package/dist/unstable/reactivity/AtomRegistry.js +1 -1
  352. package/dist/unstable/reactivity/AtomRegistry.js.map +1 -1
  353. package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
  354. package/dist/unstable/rpc/RpcClient.js +2 -1
  355. package/dist/unstable/rpc/RpcClient.js.map +1 -1
  356. package/dist/unstable/schema/VariantSchema.d.ts +1 -2
  357. package/dist/unstable/schema/VariantSchema.d.ts.map +1 -1
  358. package/dist/unstable/schema/VariantSchema.js +13 -10
  359. package/dist/unstable/schema/VariantSchema.js.map +1 -1
  360. package/dist/unstable/socket/Socket.d.ts +1 -1
  361. package/dist/unstable/socket/Socket.js +1 -1
  362. package/dist/unstable/socket/Socket.js.map +1 -1
  363. package/dist/unstable/sql/SqlError.d.ts +2 -2
  364. package/dist/unstable/sql/SqlError.js +2 -2
  365. package/dist/unstable/sql/SqlError.js.map +1 -1
  366. package/dist/unstable/sql/Statement.d.ts.map +1 -1
  367. package/dist/unstable/sql/Statement.js +7 -6
  368. package/dist/unstable/sql/Statement.js.map +1 -1
  369. package/package.json +1 -1
  370. package/src/Array.ts +86 -25
  371. package/src/Channel.ts +32 -14
  372. package/src/Config.ts +6 -5
  373. package/src/ConfigProvider.ts +7 -7
  374. package/src/Data.ts +3 -2
  375. package/src/Effect.ts +70 -116
  376. package/src/FiberHandle.ts +3 -2
  377. package/src/Iterable.ts +2 -1
  378. package/src/JsonPatch.ts +4 -3
  379. package/src/JsonSchema.ts +9 -11
  380. package/src/Logger.ts +3 -2
  381. package/src/ManagedRuntime.ts +13 -0
  382. package/src/Metric.ts +4 -3
  383. package/src/MutableList.ts +4 -0
  384. package/src/Optic.ts +5 -4
  385. package/src/Option.ts +2 -1
  386. package/src/PartitionedSemaphore.ts +1 -4
  387. package/src/Record.ts +119 -22
  388. package/src/References.ts +0 -46
  389. package/src/Request.ts +5 -7
  390. package/src/Result.ts +2 -1
  391. package/src/Schema.ts +2538 -987
  392. package/src/SchemaAST.ts +228 -149
  393. package/src/SchemaError.ts +1 -1
  394. package/src/SchemaGetter.ts +36 -29
  395. package/src/SchemaIssue.ts +1 -1
  396. package/src/SchemaParser.ts +1 -25
  397. package/src/SchemaRepresentation.ts +697 -3398
  398. package/src/SchemaTransformation.ts +3 -3
  399. package/src/Semaphore.ts +5 -3
  400. package/src/Stream.ts +63 -19
  401. package/src/Struct.ts +5 -4
  402. package/src/Types.ts +1 -3
  403. package/src/index.ts +0 -5
  404. package/src/internal/core.ts +4 -3
  405. package/src/internal/effect.ts +132 -70
  406. package/src/internal/matcher.ts +1 -1
  407. package/src/internal/record.ts +11 -7
  408. package/src/internal/references.ts +0 -5
  409. package/src/internal/schema/annotations.ts +44 -0
  410. package/src/internal/schema/fromJsonSchemaDocument.ts +957 -0
  411. package/src/internal/schema/fromRepresentation.ts +345 -0
  412. package/src/internal/schema/schema.ts +45 -46
  413. package/src/internal/schema/{arbitrary.ts → toArbitrary.ts} +8 -10
  414. package/src/internal/schema/toCodeDocument.ts +572 -0
  415. package/src/internal/schema/{equivalence.ts → toEquivalence.ts} +12 -7
  416. package/src/internal/schema/toJsonSchemaDocument.ts +475 -0
  417. package/src/internal/schema/toRepresentation.ts +401 -0
  418. package/src/internal/stackTraceLimit.ts +3 -7
  419. package/src/testing/TestClock.ts +1 -1
  420. package/src/unstable/ai/AiError.ts +5 -4
  421. package/src/unstable/ai/AnthropicStructuredOutput.ts +102 -333
  422. package/src/unstable/ai/EmbeddingModel.ts +1 -1
  423. package/src/unstable/ai/LanguageModel.ts +30 -28
  424. package/src/unstable/ai/McpSchema.ts +15 -15
  425. package/src/unstable/ai/McpServer.ts +172 -56
  426. package/src/unstable/ai/OpenAiStructuredOutput.ts +230 -395
  427. package/src/unstable/ai/Response.ts +24 -24
  428. package/src/unstable/ai/Tool.ts +22 -4
  429. package/src/unstable/ai/Toolkit.ts +19 -7
  430. package/src/unstable/ai/internal/codec-transformer.ts +13 -7
  431. package/src/unstable/ai/internal/structured-output.ts +458 -0
  432. package/src/unstable/cli/CliError.ts +51 -5
  433. package/src/unstable/cli/Command.ts +4 -4
  434. package/src/unstable/cli/Param.ts +3 -3
  435. package/src/unstable/cli/Primitive.ts +1 -1
  436. package/src/unstable/cli/internal/command.ts +13 -5
  437. package/src/unstable/cli/internal/config.ts +8 -10
  438. package/src/unstable/cluster/ClusterWorkflowEngine.ts +3 -3
  439. package/src/unstable/cluster/Entity.ts +1 -1
  440. package/src/unstable/cluster/Envelope.ts +2 -1
  441. package/src/unstable/cluster/Reply.ts +1 -1
  442. package/src/unstable/cluster/Runner.ts +1 -1
  443. package/src/unstable/cluster/RunnerAddress.ts +1 -1
  444. package/src/unstable/cluster/ShardId.ts +1 -1
  445. package/src/unstable/cluster/Sharding.ts +161 -34
  446. package/src/unstable/cluster/ShardingConfig.ts +5 -1
  447. package/src/unstable/cluster/SingleRunner.ts +4 -2
  448. package/src/unstable/cluster/SqlMessageStorage.ts +83 -35
  449. package/src/unstable/cluster/SqlRunnerStorage.ts +186 -116
  450. package/src/unstable/cluster/internal/entityManager.ts +31 -10
  451. package/src/unstable/cluster/internal/shardLock.ts +9 -0
  452. package/src/unstable/devtools/DevToolsSchema.ts +10 -5
  453. package/src/unstable/eventlog/EventJournal.ts +1 -1
  454. package/src/unstable/eventlog/EventLog.ts +21 -11
  455. package/src/unstable/eventlog/EventLogEncryption.ts +1 -1
  456. package/src/unstable/eventlog/EventLogMessage.ts +10 -3
  457. package/src/unstable/eventlog/SqlEventJournal.ts +2 -2
  458. package/src/unstable/eventlog/SqlEventLogServerEncrypted.ts +1 -1
  459. package/src/unstable/eventlog/SqlEventLogServerUnencrypted.ts +6 -3
  460. package/src/unstable/http/Cookies.ts +29 -24
  461. package/src/unstable/http/Headers.ts +8 -8
  462. package/src/unstable/http/HttpClientRequest.ts +57 -0
  463. package/src/unstable/http/HttpRouter.ts +6 -3
  464. package/src/unstable/http/HttpServerRequest.ts +5 -4
  465. package/src/unstable/http/Multipart.ts +16 -13
  466. package/src/unstable/http/Template.ts +1 -1
  467. package/src/unstable/http/UrlParams.ts +17 -14
  468. package/src/unstable/httpapi/HttpApi.ts +3 -3
  469. package/src/unstable/httpapi/HttpApiClient.ts +5 -5
  470. package/src/unstable/httpapi/HttpApiGroup.ts +1 -1
  471. package/src/unstable/httpapi/OpenApi.ts +52 -28
  472. package/src/unstable/observability/OtlpExporter.ts +109 -5
  473. package/src/unstable/observability/OtlpLogger.ts +5 -5
  474. package/src/unstable/observability/OtlpMetrics.ts +8 -4
  475. package/src/unstable/observability/OtlpTracer.ts +8 -4
  476. package/src/unstable/persistence/Persistable.ts +3 -2
  477. package/src/unstable/persistence/RateLimiter.ts +2 -2
  478. package/src/unstable/persistence/Redis.ts +2 -2
  479. package/src/unstable/process/ChildProcessSpawner.ts +1 -1
  480. package/src/unstable/reactivity/AsyncResult.ts +4 -3
  481. package/src/unstable/reactivity/Atom.ts +92 -0
  482. package/src/unstable/reactivity/AtomRegistry.ts +1 -1
  483. package/src/unstable/rpc/RpcClient.ts +2 -1
  484. package/src/unstable/schema/VariantSchema.ts +14 -24
  485. package/src/unstable/socket/Socket.ts +1 -1
  486. package/src/unstable/sql/SqlError.ts +2 -2
  487. package/src/unstable/sql/Statement.ts +7 -6
  488. package/dist/SchemaUtils.d.ts +0 -28
  489. package/dist/SchemaUtils.d.ts.map +0 -1
  490. package/dist/SchemaUtils.js +0 -45
  491. package/dist/SchemaUtils.js.map +0 -1
  492. package/dist/internal/schema/arbitrary.d.ts.map +0 -1
  493. package/dist/internal/schema/arbitrary.js.map +0 -1
  494. package/dist/internal/schema/equivalence.d.ts +0 -2
  495. package/dist/internal/schema/equivalence.d.ts.map +0 -1
  496. package/dist/internal/schema/equivalence.js.map +0 -1
  497. package/dist/internal/schema/representation.d.ts +0 -2
  498. package/dist/internal/schema/representation.d.ts.map +0 -1
  499. package/dist/internal/schema/representation.js +0 -865
  500. package/dist/internal/schema/representation.js.map +0 -1
  501. package/src/SchemaUtils.ts +0 -51
  502. package/src/internal/schema/representation.ts +0 -795
@@ -16,6 +16,7 @@ import { dual } from "../../Function.ts"
16
16
  import * as Hash from "../../Hash.ts"
17
17
  import type { Inspectable } from "../../Inspectable.ts"
18
18
  import { PipeInspectableProto } from "../../internal/core.ts"
19
+ import * as InternalRecord from "../../internal/record.ts"
19
20
  import * as Option from "../../Option.ts"
20
21
  import type { Pipeable } from "../../Pipeable.ts"
21
22
  import { hasProperty } from "../../Predicate.ts"
@@ -236,15 +237,15 @@ export interface UrlParamsSchema extends Schema.declare<UrlParams, ReadonlyArray
236
237
  export const UrlParamsSchema: UrlParamsSchema = Schema.declare(
237
238
  isUrlParams,
238
239
  {
239
- typeConstructor: {
240
- _tag: "effect/http/UrlParams"
241
- },
242
- generation: {
243
- runtime: `UrlParams.UrlParamsSchema`,
244
- Type: `UrlParams.UrlParams`,
245
- Encoded: `typeof UrlParams.UrlParamsSchema["Encoded"]`,
246
- importDeclaration: `import * as UrlParams from "effect/unstable/http/UrlParams"`
240
+ representation: {
241
+ id: "effect/http/UrlParams",
242
+ payload: null
247
243
  },
244
+ toCode: () => ({
245
+ runtime: "UrlParams.UrlParamsSchema",
246
+ Type: "UrlParams.UrlParams",
247
+ importDeclarations: [`import * as UrlParams from "effect/unstable/http/UrlParams"`]
248
+ }),
248
249
  expected: "UrlParams",
249
250
  toEquivalence: () => Equivalence,
250
251
  toCodec: () =>
@@ -675,13 +676,15 @@ export const toString = (input: Input): string => new URLSearchParams(fromInput(
675
676
  export const toRecord = (self: UrlParams): Record<string, string | Arr.NonEmptyArray<string>> => {
676
677
  const out: Record<string, string | Arr.NonEmptyArray<string>> = {}
677
678
  for (const [k, value] of self.params) {
678
- const curr = out[k]
679
- if (curr === undefined) {
680
- out[k] = value
681
- } else if (typeof curr === "string") {
682
- out[k] = [curr, value]
679
+ if (!Object.hasOwn(out, k)) {
680
+ InternalRecord.assignProperty(out, k, value)
683
681
  } else {
684
- curr.push(value)
682
+ const current = out[k]
683
+ if (typeof current === "string") {
684
+ InternalRecord.assignProperty(out, k, [current, value])
685
+ } else {
686
+ current.push(value)
687
+ }
685
688
  }
686
689
  }
687
690
  return out
@@ -145,7 +145,7 @@ const Proto = {
145
145
  ) {
146
146
  const groups = { ...this.groups }
147
147
  for (const group of toAdd) {
148
- InternalRecord.set(groups, group.identifier, group)
148
+ InternalRecord.assignProperty(groups, group.identifier, group)
149
149
  }
150
150
  return makeProto({
151
151
  ...optionsFromApi(this),
@@ -157,9 +157,9 @@ const Proto = {
157
157
  api: Top
158
158
  ) {
159
159
  const newGroups = { ...this.groups }
160
- for (const key in api.groups) {
160
+ for (const key of Object.keys(api.groups)) {
161
161
  const group = api.groups[key]
162
- InternalRecord.set(
162
+ InternalRecord.assignProperty(
163
163
  newGroups,
164
164
  key,
165
165
  group.annotateMerge(Context.merge(api.annotations, group.annotations))
@@ -520,10 +520,10 @@ export const makeWith = <ApiId extends string, Groups extends HttpApiGroup.Const
520
520
  ...options,
521
521
  onGroup({ group }) {
522
522
  if (group.topLevel) return
523
- InternalRecord.set(client, group.identifier, {})
523
+ InternalRecord.assignProperty(client, group.identifier, {})
524
524
  },
525
525
  onEndpoint({ endpoint, endpointFn, group }) {
526
- InternalRecord.set(
526
+ InternalRecord.assignProperty(
527
527
  group.topLevel ? client : client[group.identifier],
528
528
  endpoint.identifier,
529
529
  endpointFn
@@ -565,7 +565,7 @@ export const group = <
565
565
  ...options,
566
566
  predicate: ({ group }) => group.identifier === options.group,
567
567
  onEndpoint({ endpoint, endpointFn }) {
568
- InternalRecord.set(client, endpoint.identifier, endpointFn)
568
+ InternalRecord.assignProperty(client, endpoint.identifier, endpointFn)
569
569
  }
570
570
  }).pipe(Effect.map(() => client)) as any
571
571
  }
@@ -662,7 +662,7 @@ export const urlBuilder = <Api extends HttpApi.Constraint>(api: Api, options?: {
662
662
  HttpApi.reflect(api as unknown as HttpApi.Top, {
663
663
  onGroup({ group }) {
664
664
  if (group.topLevel) return
665
- InternalRecord.set(builder, group.identifier, {})
665
+ InternalRecord.assignProperty(builder, group.identifier, {})
666
666
  },
667
667
  onEndpoint({ group, endpoint }) {
668
668
  const makeUrl = compilePath(endpoint.path)
@@ -688,7 +688,7 @@ export const urlBuilder = <Api extends HttpApi.Constraint>(api: Api, options?: {
688
688
  const url = query === "" ? path : `${path}?${query}`
689
689
  return options?.baseUrl === undefined ? url : new URL(url, options.baseUrl.toString()).toString()
690
690
  }
691
- InternalRecord.set(
691
+ InternalRecord.assignProperty(
692
692
  group.topLevel ? builder : builder[group.identifier],
693
693
  endpoint.identifier,
694
694
  endpointBuilder
@@ -308,7 +308,7 @@ const Proto = {
308
308
  add(this: Top, ...toAdd: NonEmptyReadonlyArray<HttpApiEndpoint.Top>) {
309
309
  const endpoints = { ...this.endpoints }
310
310
  for (const endpoint of toAdd) {
311
- InternalRecord.set(endpoints, endpoint.identifier, endpoint)
311
+ InternalRecord.assignProperty(endpoints, endpoint.identifier, endpoint)
312
312
  }
313
313
  return makeProto({
314
314
  ...optionsFromGroup(this),
@@ -14,13 +14,14 @@ import * as Context from "../../Context.ts"
14
14
  import * as Equal from "../../Equal.ts"
15
15
  import { constFalse } from "../../Function.ts"
16
16
  import * as InternalRecord from "../../internal/record.ts"
17
+ import * as InternalToJsonSchemaDocument from "../../internal/schema/toJsonSchemaDocument.ts"
18
+ import * as InternalToRepresentation from "../../internal/schema/toRepresentation.ts"
17
19
  import * as JsonPatch from "../../JsonPatch.ts"
18
20
  import { escapeToken } from "../../JsonPointer.ts"
19
21
  import * as JsonSchema from "../../JsonSchema.ts"
20
22
  import * as Option from "../../Option.ts"
21
23
  import * as Schema from "../../Schema.ts"
22
24
  import * as SchemaAST from "../../SchemaAST.ts"
23
- import * as SchemaRepresentation from "../../SchemaRepresentation.ts"
24
25
  import * as HttpMethod from "../http/HttpMethod.ts"
25
26
  import * as HttpApi from "./HttpApi.ts"
26
27
  import * as HttpApiEndpoint from "./HttpApiEndpoint.ts"
@@ -212,6 +213,17 @@ export const annotations: (
212
213
 
213
214
  const apiCache = new WeakMap<HttpApi.Constraint, OpenAPISpec>()
214
215
 
216
+ type CompileSchemas = (
217
+ asts: readonly [SchemaAST.AST, ...Array<SchemaAST.AST>]
218
+ ) => JsonSchema.MultiDocument<"openapi-3.1">
219
+
220
+ const compileSchemas: CompileSchemas = (asts) =>
221
+ JsonSchema.toMultiDocumentOpenApi3_1(
222
+ InternalToJsonSchemaDocument.toJsonSchemaMultiDocument(
223
+ InternalToRepresentation.toRepresentations(Arr.map(asts, Schema.toCodecJsonAST))
224
+ )
225
+ )
226
+
215
227
  /**
216
228
  * This function checks if a given tag exists within the provided context. If
217
229
  * the tag is present, it retrieves the associated value and applies the given
@@ -251,7 +263,15 @@ function processAnnotation<Services, S, I>(
251
263
  export function fromApi<Id extends string, Groups extends HttpApiGroup.Constraint>(
252
264
  api: HttpApi.HttpApi<Id, Groups>
253
265
  ): OpenAPISpec {
254
- const cached = apiCache.get(api)
266
+ return fromApiWith(api, apiCache, compileSchemas)
267
+ }
268
+
269
+ function fromApiWith<Id extends string, Groups extends HttpApiGroup.Constraint>(
270
+ api: HttpApi.HttpApi<Id, Groups>,
271
+ cache: WeakMap<HttpApi.Constraint, OpenAPISpec>,
272
+ compileSchemas: CompileSchemas
273
+ ): OpenAPISpec {
274
+ const cached = cache.get(api)
255
275
  if (cached !== undefined) {
256
276
  return cached
257
277
  }
@@ -318,7 +338,10 @@ export function fromApi<Id extends string, Groups extends HttpApiGroup.Constrain
318
338
  tag.externalDocs = externalDocs
319
339
  })
320
340
  processAnnotation(group.annotations, Override, (override) => {
321
- Object.assign(tag, override)
341
+ // OpenAPI documents are JSON, so symbol keys are intentionally ignored.
342
+ for (const [key, value] of Object.entries(override)) {
343
+ InternalRecord.assignProperty(tag as any, key, value)
344
+ }
322
345
  })
323
346
  processAnnotation(group.annotations, Transform, (transformFn) => {
324
347
  tag = transformFn(tag) as OpenAPISpecTag
@@ -348,9 +371,9 @@ export function fromApi<Id extends string, Groups extends HttpApiGroup.Constrain
348
371
  function processResponseBodies(bodies: ResponseBodies, defaultDescription: () => string) {
349
372
  for (const [status, { content, descriptions, streamContent }] of bodies) {
350
373
  const description = descriptions.size > 0 ? Array.from(descriptions).join(" | ") : defaultDescription()
351
- op.responses[status] = {
374
+ InternalRecord.assignProperty(op.responses, status, {
352
375
  description
353
- }
376
+ })
354
377
  if (content !== undefined) {
355
378
  content.forEach((map, encoding) => {
356
379
  map.forEach((schemas, contentType) => {
@@ -363,9 +386,9 @@ export function fromApi<Id extends string, Groups extends HttpApiGroup.Constrain
363
386
  path: ["paths", path, method, "responses", String(status), "content", contentType, "schema"]
364
387
  })
365
388
  op.responses[status].content ??= {}
366
- op.responses[status].content[contentType] = {
389
+ InternalRecord.assignProperty(op.responses[status].content, contentType, {
367
390
  schema: {}
368
- }
391
+ })
369
392
  })
370
393
  })
371
394
  }
@@ -408,7 +431,7 @@ export function fromApi<Id extends string, Groups extends HttpApiGroup.Constrain
408
431
  "errorSchema"
409
432
  ]
410
433
  })
411
- op.responses[status].content[contentType] = {
434
+ InternalRecord.assignProperty(op.responses[status].content, contentType, {
412
435
  schema: {},
413
436
  "x-effect-stream": {
414
437
  encoding: "sse",
@@ -416,9 +439,9 @@ export function fromApi<Id extends string, Groups extends HttpApiGroup.Constrain
416
439
  errorSchema: {},
417
440
  failureEvent: reservedStreamFailureEvent
418
441
  }
419
- }
442
+ })
420
443
  } else {
421
- op.responses[status].content[contentType] = {
444
+ InternalRecord.assignProperty(op.responses[status].content, contentType, {
422
445
  schema: {
423
446
  type: "string",
424
447
  format: "binary"
@@ -426,7 +449,7 @@ export function fromApi<Id extends string, Groups extends HttpApiGroup.Constrain
426
449
  "x-effect-stream": {
427
450
  encoding: "uint8array"
428
451
  }
429
- }
452
+ })
430
453
  }
431
454
  })
432
455
  }
@@ -483,7 +506,7 @@ export function fromApi<Id extends string, Groups extends HttpApiGroup.Constrain
483
506
  ) {
484
507
  const scheme = makeSecurityScheme(security)
485
508
  if (!Object.hasOwn(spec.components.securitySchemes, name)) {
486
- InternalRecord.set(spec.components.securitySchemes, name, scheme)
509
+ InternalRecord.assignProperty(spec.components.securitySchemes, name, scheme)
487
510
  return
488
511
  }
489
512
  if (
@@ -522,9 +545,9 @@ export function fromApi<Id extends string, Groups extends HttpApiGroup.Constrain
522
545
  ast: toEncodingAST(ast, encoding._tag),
523
546
  path: ["paths", path, method, "requestBody", "content", contentType, "schema"]
524
547
  })
525
- content[contentType] = {
548
+ InternalRecord.assignProperty(content, contentType, {
526
549
  schema: {}
527
- }
550
+ })
528
551
  }
529
552
  op.requestBody = { content, required: true }
530
553
  }
@@ -552,7 +575,10 @@ export function fromApi<Id extends string, Groups extends HttpApiGroup.Constrain
552
575
  )
553
576
 
554
577
  processAnnotation(endpoint.annotations, Override, (override) => {
555
- Object.assign(op, override)
578
+ // OpenAPI documents are JSON, so symbol keys are intentionally ignored.
579
+ for (const [key, value] of Object.entries(override)) {
580
+ InternalRecord.assignProperty(op as any, key, value)
581
+ }
556
582
  })
557
583
  processAnnotation(endpoint.annotations, Transform, (transformFn) => {
558
584
  op = transformFn(op) as OpenAPISpecOperation
@@ -570,8 +596,8 @@ export function fromApi<Id extends string, Groups extends HttpApiGroup.Constrain
570
596
  operationIds.add(operationId)
571
597
  }
572
598
  pathOperations.add(pathOperation)
573
- if (!spec.paths[path]) {
574
- spec.paths[path] = {}
599
+ if (!Object.hasOwn(spec.paths, path)) {
600
+ InternalRecord.assignProperty(spec.paths, path, {})
575
601
  }
576
602
  spec.paths[path][method] = op
577
603
  }
@@ -581,10 +607,10 @@ export function fromApi<Id extends string, Groups extends HttpApiGroup.Constrain
581
607
  componentSchemas.forEach((componentSchema) => {
582
608
  const identifier = SchemaAST.resolveIdentifier(componentSchema.ast)
583
609
  if (identifier !== undefined) {
584
- if (identifier in spec.components.schemas) {
610
+ if (Object.hasOwn(spec.components.schemas, identifier)) {
585
611
  throw new globalThis.Error(`Duplicate component schema identifier: ${identifier}`)
586
612
  }
587
- spec.components.schemas[identifier] = {}
613
+ InternalRecord.assignProperty(spec.components.schemas, identifier, {})
588
614
  pathOps.push({
589
615
  _tag: "schema",
590
616
  ast: componentSchema.ast,
@@ -599,12 +625,7 @@ export function fromApi<Id extends string, Groups extends HttpApiGroup.Constrain
599
625
  }
600
626
 
601
627
  if (Arr.isArrayNonEmpty(pathOps)) {
602
- const multiDocument = SchemaRepresentation.fromASTs(
603
- Arr.map(pathOps, (op) => op.ast)
604
- )
605
- const jsonSchemaMultiDocument = JsonSchema.toMultiDocumentOpenApi3_1(
606
- SchemaRepresentation.toJsonSchemaMultiDocument(multiDocument)
607
- )
628
+ const jsonSchemaMultiDocument = compileSchemas(Arr.map(pathOps, (op) => op.ast))
608
629
  const patchOps: Array<JsonPatch.JsonPatchOperation> = pathOps.map((op, i) => {
609
630
  const oppath = escapePath(op.path)
610
631
  const value = jsonSchemaMultiDocument.schemas[i]
@@ -633,13 +654,16 @@ export function fromApi<Id extends string, Groups extends HttpApiGroup.Constrain
633
654
  })
634
655
 
635
656
  processAnnotation(api.annotations, Override, (override) => {
636
- Object.assign(spec, override)
657
+ // OpenAPI documents are JSON, so symbol keys are intentionally ignored.
658
+ for (const [key, value] of Object.entries(override)) {
659
+ InternalRecord.assignProperty(spec as any, key, value)
660
+ }
637
661
  })
638
662
  processAnnotation(api.annotations, Transform, (transformFn) => {
639
663
  spec = transformFn(spec) as OpenAPISpec
640
664
  })
641
665
 
642
- apiCache.set(api, spec)
666
+ cache.set(api, spec)
643
667
 
644
668
  return spec
645
669
  }
@@ -793,7 +817,7 @@ function toEncodingAST(ast: SchemaAST.AST, _tag: HttpApiSchema.Encoding["_tag"])
793
817
  function persistedFileToBinaryEncoding(ast: SchemaAST.AST): SchemaAST.AST {
794
818
  if (
795
819
  SchemaAST.isDeclaration(ast) &&
796
- ((ast.annotations as (Schema.Annotations.Declaration<unknown, readonly []> | undefined))?.typeConstructor?._tag ===
820
+ ((ast.annotations as (Schema.Annotations.Declaration<unknown, readonly []> | undefined))?.representation?.id ===
797
821
  "effect/http/PersistedFile")
798
822
  ) {
799
823
  return Uint8ArrayEncoding.ast
@@ -13,6 +13,9 @@ import * as Context from "../../Context.ts"
13
13
  import * as Duration from "../../Duration.ts"
14
14
  import * as Effect from "../../Effect.ts"
15
15
  import * as Fiber from "../../Fiber.ts"
16
+ import * as FiberSet from "../../FiberSet.ts"
17
+ import { identity } from "../../Function.ts"
18
+ import * as Layer from "../../Layer.ts"
16
19
  import * as Num from "../../Number.ts"
17
20
  import * as Option from "../../Option.ts"
18
21
  import * as Schedule from "../../Schedule.ts"
@@ -41,6 +44,97 @@ const policy = Schedule.forever.pipe(
41
44
  })
42
45
  )
43
46
 
47
+ /**
48
+ * Registry of exporter flush operations, used to manually drain buffered
49
+ * telemetry before the surrounding scope closes.
50
+ *
51
+ * **Details**
52
+ *
53
+ * Every exporter created by `make` registers its export operation here, so a
54
+ * single `flush` drains all signals sharing the registry. `flush` returns only
55
+ * after the exports it initiated have settled, cannot fail, and respects each
56
+ * exporter's temporary-disable window. Wrap it with `Effect.timeoutOption` to
57
+ * bound its duration at the call site.
58
+ *
59
+ * @category flushing
60
+ * @since 4.0.0
61
+ */
62
+ export class Flusher extends Context.Service<Flusher, {
63
+ /**
64
+ * Drains all registered exporters concurrently and cannot fail.
65
+ *
66
+ * **Details**
67
+ *
68
+ * There is no built-in timeout; use `Effect.timeoutOption` to bound the
69
+ * operation. Exporters in their 60-second `disabledUntil` window are skipped.
70
+ *
71
+ * **Example** (Flushing from a Cloudflare Worker)
72
+ *
73
+ * ```ts
74
+ * import { Effect, ManagedRuntime } from "effect"
75
+ * import { OtlpExporter, OtlpTracer } from "effect/unstable/observability"
76
+ *
77
+ * const layer = OtlpTracer.layerFromConfig()
78
+ * const runtime = ManagedRuntime.make(layer)
79
+ *
80
+ * // In the request handler:
81
+ * ctx.waitUntil(
82
+ * runtime.runPromise(
83
+ * Effect.flatMap(OtlpExporter.Flusher, (flusher) => flusher.flush)
84
+ * )
85
+ * )
86
+ * ```
87
+ */
88
+ readonly flush: Effect.Effect<void>
89
+ readonly register: (run: Effect.Effect<void>) => Effect.Effect<void, never, Scope.Scope>
90
+ }>()(
91
+ "effect/observability/OtlpExporter/Flusher"
92
+ ) {}
93
+
94
+ /**
95
+ * Provides a `Flusher` backed by a fresh registry.
96
+ *
97
+ * **Details**
98
+ *
99
+ * This is intentionally a single module-level constant rather than a factory:
100
+ * layer memoization is keyed by layer instance, so every signal layer
101
+ * referencing this same constant shares one registry per layer build, and one
102
+ * `flush` drains traces, logs and metrics together. A factory returning a new
103
+ * layer per call would silently create one registry per signal.
104
+ *
105
+ * Registration is scoped — an exporter is removed from the registry when its
106
+ * own scope closes. Flushing with an empty registry is a no-op.
107
+ *
108
+ * Note that `flush` cannot await an export that was already in flight when it
109
+ * was called (for example one started by the export interval); it only waits
110
+ * for the exports it initiates.
111
+ *
112
+ * @category flushing
113
+ * @since 4.0.0
114
+ */
115
+ export const layerFlusher: Layer.Layer<Flusher> = Layer.sync(Flusher, () => {
116
+ const registry = new Set<Effect.Effect<void>>()
117
+ return {
118
+ flush: Effect.suspend(() => {
119
+ if (registry.size === 0) {
120
+ return Effect.void
121
+ }
122
+ return Effect.forEach(registry, identity, {
123
+ concurrency: "unbounded",
124
+ discard: true
125
+ })
126
+ }),
127
+ register: (run) =>
128
+ Effect.flatMap(Scope.Scope, (scope) => {
129
+ registry.add(run)
130
+ return Scope.addFinalizer(
131
+ scope,
132
+ Effect.sync(() => registry.delete(run))
133
+ )
134
+ })
135
+ }
136
+ })
137
+
44
138
  /**
45
139
  * Creates a scoped OTLP batch exporter.
46
140
  *
@@ -67,12 +161,11 @@ export const make: (
67
161
  ) => Effect.Effect<
68
162
  { readonly push: (data: unknown) => void },
69
163
  never,
70
- HttpClient.HttpClient | Scope.Scope
164
+ Flusher | HttpClient.HttpClient | Scope.Scope
71
165
  > = Effect.fnUntraced(function*(options) {
72
166
  const services = yield* Effect.context<Scope.Scope | HttpClient.HttpClient>()
73
167
  const clock = Context.get(services, Clock)
74
168
  const scope = Context.get(services, Scope.Scope)
75
- const runFork = Effect.runForkWith(services)
76
169
  const exportInterval = Duration.max(Duration.fromInputUnsafe(options.exportInterval), Duration.zero)
77
170
  let disabledUntil: number | undefined = undefined
78
171
 
@@ -122,9 +215,19 @@ export const make: (
122
215
  })
123
216
  )
124
217
 
218
+ const exportFibers = yield* FiberSet.make<void, never>()
219
+ const runExportFork = yield* FiberSet.runtime(exportFibers)<never>()
220
+
221
+ const flusher = yield* Flusher
222
+ yield* flusher.register(runExport)
223
+
125
224
  yield* Scope.addFinalizer(
126
225
  scope,
127
- runExport.pipe(
226
+ Effect.suspend(() => {
227
+ if (disabledUntil !== undefined) return Effect.void
228
+ runExportFork(runExport)
229
+ return FiberSet.awaitEmpty(exportFibers)
230
+ }).pipe(
128
231
  Effect.ignore,
129
232
  Effect.interruptible,
130
233
  Effect.timeoutOption(options.shutdownTimeout)
@@ -132,7 +235,8 @@ export const make: (
132
235
  )
133
236
 
134
237
  yield* Effect.sleep(exportInterval).pipe(
135
- Effect.andThen(runExport),
238
+ Effect.andThen(FiberSet.run(exportFibers, runExport)),
239
+ Effect.flatMap(Fiber.await),
136
240
  Effect.forever,
137
241
  Effect.forkIn(scope)
138
242
  )
@@ -142,7 +246,7 @@ export const make: (
142
246
  if (disabledUntil !== undefined) return
143
247
  buffer.push(data)
144
248
  if (options.maxBatchSize !== "disabled" && buffer.length >= options.maxBatchSize) {
145
- Fiber.runIn(runFork(runExport), scope)
249
+ runExportFork(runExport)
146
250
  }
147
251
  }
148
252
  }
@@ -57,7 +57,7 @@ export const make: (
57
57
  ) => Effect.Effect<
58
58
  Logger.Logger<unknown, void>,
59
59
  never,
60
- OtlpSerialization | HttpClient.HttpClient | Scope.Scope
60
+ Exporter.Flusher | OtlpSerialization | HttpClient.HttpClient | Scope.Scope
61
61
  > = Effect.fnUntraced(function*(options) {
62
62
  const serialization = yield* OtlpSerialization
63
63
  const otelResource = yield* OtlpResource.fromConfig(options.resource)
@@ -116,10 +116,10 @@ export const layer = (options: {
116
116
  readonly shutdownTimeout?: Duration.Input | undefined
117
117
  readonly excludeLogSpans?: boolean | undefined
118
118
  readonly mergeWithExisting?: boolean | undefined
119
- }): Layer.Layer<never, never, HttpClient.HttpClient | OtlpSerialization> =>
119
+ }): Layer.Layer<Exporter.Flusher, never, HttpClient.HttpClient | OtlpSerialization> =>
120
120
  Logger.layer([make(options)], {
121
121
  mergeWithExisting: options.mergeWithExisting ?? true
122
- })
122
+ }).pipe(Layer.provideMerge(Exporter.layerFlusher))
123
123
 
124
124
  /**
125
125
  * Creates an OTLP logs layer from OpenTelemetry configuration.
@@ -136,7 +136,7 @@ export const layerFromConfig = (options?: {
136
136
  readonly headers?: Headers.Input | undefined
137
137
  readonly excludeLogSpans?: boolean | undefined
138
138
  readonly mergeWithExisting?: boolean | undefined
139
- }): Layer.Layer<never, never, HttpClient.HttpClient | OtlpSerialization> =>
139
+ }): Layer.Layer<Exporter.Flusher, never, HttpClient.HttpClient | OtlpSerialization> =>
140
140
  Effect.gen(function*() {
141
141
  const { disabled, endpoint, exporters } = yield* Config.all({
142
142
  disabled: Config.boolean("OTEL_SDK_DISABLED").pipe(Config.withDefault(false)),
@@ -145,7 +145,7 @@ export const layerFromConfig = (options?: {
145
145
  })
146
146
 
147
147
  if (disabled || !endpoint || !exporters.includes("otlp")) {
148
- return Layer.empty
148
+ return Exporter.layerFlusher
149
149
  }
150
150
 
151
151
  const { baseTimeout, logsTimeout, exportTimeout, scheduleDelay, maxBatchSize } = yield* Config.all({
@@ -67,6 +67,9 @@ export type AggregationTemporality = "cumulative" | "delta"
67
67
  * **Details**
68
68
  *
69
69
  * The exporter snapshots registered Effect metrics on the configured interval, serializes them with the selected aggregation temporality, and flushes during scope finalization up to `shutdownTimeout`.
70
+ * Manual flushing also triggers a snapshot. With delta temporality, each
71
+ * snapshot advances the previous-export state, so frequent flushes narrow the
72
+ * delta aggregation windows.
70
73
  *
71
74
  * @category constructors
72
75
  * @since 4.0.0
@@ -85,7 +88,7 @@ export const make: (options: {
85
88
  }) => Effect.Effect<
86
89
  void,
87
90
  never,
88
- HttpClient.HttpClient | OtlpSerialization | Scope.Scope
91
+ Exporter.Flusher | HttpClient.HttpClient | OtlpSerialization | Scope.Scope
89
92
  > = Effect.fnUntraced(function*(options) {
90
93
  const clock = yield* Clock
91
94
  const serialization = yield* OtlpSerialization
@@ -464,7 +467,8 @@ export const layer = (options: {
464
467
  readonly exportInterval?: Duration.Input | undefined
465
468
  readonly shutdownTimeout?: Duration.Input | undefined
466
469
  readonly temporality?: AggregationTemporality | undefined
467
- }): Layer.Layer<never, never, HttpClient.HttpClient | OtlpSerialization> => Layer.effectDiscard(make(options))
470
+ }): Layer.Layer<Exporter.Flusher, never, HttpClient.HttpClient | OtlpSerialization> =>
471
+ Layer.effectDiscard(make(options)).pipe(Layer.provideMerge(Exporter.layerFlusher))
468
472
 
469
473
  /**
470
474
  * Creates an OTLP metrics layer from OpenTelemetry configuration.
@@ -479,7 +483,7 @@ export const layerFromConfig = (options?: {
479
483
  readonly attributes?: Record<string, unknown>
480
484
  } | undefined
481
485
  readonly headers?: Headers.Input | undefined
482
- }): Layer.Layer<never, never, HttpClient.HttpClient | OtlpSerialization> =>
486
+ }): Layer.Layer<Exporter.Flusher, never, HttpClient.HttpClient | OtlpSerialization> =>
483
487
  Effect.gen(function*() {
484
488
  const { disabled, endpoint, exporters } = yield* Config.all({
485
489
  disabled: Config.boolean("OTEL_SDK_DISABLED").pipe(Config.withDefault(false)),
@@ -487,7 +491,7 @@ export const layerFromConfig = (options?: {
487
491
  exporters: OtlpEnv.exporters("METRICS")
488
492
  })
489
493
  if (disabled || !endpoint || !exporters.includes("otlp")) {
490
- return Layer.empty
494
+ return Exporter.layerFlusher
491
495
  }
492
496
 
493
497
  const { baseTimeout, metricsTimeout, exportTimeout, exportInterval, temporalityPreference } = yield* Config.all({
@@ -59,7 +59,7 @@ export const make: (
59
59
  ) => Effect.Effect<
60
60
  Tracer.Tracer,
61
61
  never,
62
- OtlpSerialization | HttpClient.HttpClient | Scope.Scope
62
+ Exporter.Flusher | OtlpSerialization | HttpClient.HttpClient | Scope.Scope
63
63
  > = Effect.fnUntraced(function*(options) {
64
64
  const otelResource = yield* OtlpResource.fromConfig(options.resource)
65
65
  const serialization = yield* OtlpSerialization
@@ -134,7 +134,11 @@ export const layer: (options: {
134
134
  readonly maxBatchSize?: number | undefined
135
135
  readonly context?: (<X>(primitive: Tracer.EffectPrimitive<X>, span: Tracer.AnySpan) => X) | undefined
136
136
  readonly shutdownTimeout?: Duration.Input | undefined
137
- }) => Layer.Layer<never, never, OtlpSerialization | HttpClient.HttpClient> = flow(make, Layer.effect(Tracer.Tracer))
137
+ }) => Layer.Layer<Exporter.Flusher, never, OtlpSerialization | HttpClient.HttpClient> = flow(
138
+ make,
139
+ Layer.effect(Tracer.Tracer),
140
+ Layer.provideMerge(Exporter.layerFlusher)
141
+ )
138
142
 
139
143
  /**
140
144
  * Creates an OTLP traces layer from OpenTelemetry configuration.
@@ -150,7 +154,7 @@ export const layerFromConfig = (options?: {
150
154
  } | undefined
151
155
  readonly headers?: Headers.Input | undefined
152
156
  readonly context?: (<X>(primitive: Tracer.EffectPrimitive<X>, span: Tracer.AnySpan) => X) | undefined
153
- }): Layer.Layer<never, never, HttpClient.HttpClient | OtlpSerialization> =>
157
+ }): Layer.Layer<Exporter.Flusher, never, HttpClient.HttpClient | OtlpSerialization> =>
154
158
  Effect.gen(function*() {
155
159
  const { disabled, endpoint, exporters } = yield* Config.all({
156
160
  disabled: Config.boolean("OTEL_SDK_DISABLED").pipe(Config.withDefault(false)),
@@ -159,7 +163,7 @@ export const layerFromConfig = (options?: {
159
163
  })
160
164
 
161
165
  if (disabled || !endpoint || !exporters.includes("otlp")) {
162
- return Layer.empty
166
+ return Exporter.layerFlusher
163
167
  }
164
168
 
165
169
  const { baseTimeout, tracesTimeout, exportTimeout, scheduleDelay, maxBatchSize } = yield* Config.all({
@@ -10,6 +10,7 @@
10
10
  import type * as Duration from "../../Duration.ts"
11
11
  import type * as Effect from "../../Effect.ts"
12
12
  import type * as Exit from "../../Exit.ts"
13
+ import * as InternalRecord from "../../internal/record.ts"
13
14
  import * as PrimaryKey from "../../PrimaryKey.ts"
14
15
  import * as Request from "../../Request.ts"
15
16
  import * as Schema from "../../Schema.ts"
@@ -179,10 +180,10 @@ export const Class = <
179
180
  | ("requires" extends keyof Config ? Config["requires"] : never)
180
181
  > =>
181
182
  {
182
- function Persistable(this: any, props: any) {
183
+ function Persistable(this: any, props: object | undefined) {
183
184
  this._tag = tag
184
185
  if (props) {
185
- Object.assign(this, props)
186
+ InternalRecord.assignProperties(this, props)
186
187
  }
187
188
  }
188
189
  Persistable.prototype = {
@@ -362,8 +362,8 @@ export class RateLimitExceeded extends Schema.ErrorClass<RateLimitExceeded>(
362
362
  _tag: Schema.tag("RateLimitExceeded"),
363
363
  retryAfter: Schema.DurationFromMillis,
364
364
  key: Schema.String,
365
- limit: Schema.Number,
366
- remaining: Schema.Number
365
+ limit: Schema.Finite,
366
+ remaining: Schema.Finite
367
367
  }) {
368
368
  /**
369
369
  * Public message used when the rate limiter rejects a request.
@@ -186,8 +186,8 @@ export const script = <Params extends ReadonlyArray<any>>(
186
186
  params: Params
187
187
  result: void
188
188
  }> =>
189
- Object.assign(Object.create(ScriptProto), {
189
+ Object.setPrototypeOf({
190
190
  ...options,
191
191
  params: f,
192
192
  numberOfKeys: typeof options.numberOfKeys === "number" ? constant(options.numberOfKeys) : options.numberOfKeys
193
- })
193
+ }, ScriptProto)