effect 4.0.0-beta.94 → 4.0.0-beta.98

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 (532) hide show
  1. package/dist/Array.d.ts.map +1 -1
  2. package/dist/BigDecimal.d.ts.map +1 -1
  3. package/dist/BigDecimal.js.map +1 -1
  4. package/dist/BigInt.d.ts.map +1 -1
  5. package/dist/Boolean.d.ts.map +1 -1
  6. package/dist/Brand.d.ts.map +1 -1
  7. package/dist/Cache.d.ts.map +1 -1
  8. package/dist/Cause.d.ts.map +1 -1
  9. package/dist/Channel.d.ts.map +1 -1
  10. package/dist/ChannelSchema.d.ts.map +1 -1
  11. package/dist/Chunk.d.ts.map +1 -1
  12. package/dist/Combiner.d.ts.map +1 -1
  13. package/dist/Config.d.ts.map +1 -1
  14. package/dist/Config.js.map +1 -1
  15. package/dist/ConfigProvider.d.ts +44 -6
  16. package/dist/ConfigProvider.d.ts.map +1 -1
  17. package/dist/ConfigProvider.js +63 -24
  18. package/dist/ConfigProvider.js.map +1 -1
  19. package/dist/Console.d.ts.map +1 -1
  20. package/dist/Context.d.ts.map +1 -1
  21. package/dist/Cron.d.ts +4 -1
  22. package/dist/Cron.d.ts.map +1 -1
  23. package/dist/Cron.js +98 -53
  24. package/dist/Cron.js.map +1 -1
  25. package/dist/Crypto.d.ts.map +1 -1
  26. package/dist/Data.d.ts.map +1 -1
  27. package/dist/DateTime.d.ts +12 -12
  28. package/dist/DateTime.d.ts.map +1 -1
  29. package/dist/Deferred.d.ts.map +1 -1
  30. package/dist/Duration.d.ts.map +1 -1
  31. package/dist/Effect.d.ts.map +1 -1
  32. package/dist/Effectable.d.ts.map +1 -1
  33. package/dist/Encoding.d.ts.map +1 -1
  34. package/dist/Equal.d.ts.map +1 -1
  35. package/dist/Equivalence.d.ts.map +1 -1
  36. package/dist/ErrorReporter.d.ts.map +1 -1
  37. package/dist/ExecutionPlan.d.ts +2 -2
  38. package/dist/ExecutionPlan.d.ts.map +1 -1
  39. package/dist/Fiber.d.ts.map +1 -1
  40. package/dist/FiberHandle.d.ts +8 -8
  41. package/dist/FiberHandle.d.ts.map +1 -1
  42. package/dist/FiberMap.d.ts +8 -8
  43. package/dist/FiberMap.d.ts.map +1 -1
  44. package/dist/FiberSet.d.ts +4 -4
  45. package/dist/FiberSet.d.ts.map +1 -1
  46. package/dist/FileSystem.d.ts.map +1 -1
  47. package/dist/Filter.d.ts.map +1 -1
  48. package/dist/Function.d.ts.map +1 -1
  49. package/dist/Graph.d.ts.map +1 -1
  50. package/dist/Graph.js.map +1 -1
  51. package/dist/Hash.d.ts.map +1 -1
  52. package/dist/HashMap.d.ts.map +1 -1
  53. package/dist/HashRing.d.ts.map +1 -1
  54. package/dist/Inspectable.d.ts.map +1 -1
  55. package/dist/Inspectable.js.map +1 -1
  56. package/dist/Iterable.d.ts.map +1 -1
  57. package/dist/Latch.d.ts.map +1 -1
  58. package/dist/Layer.d.ts.map +1 -1
  59. package/dist/LayerMap.d.ts.map +1 -1
  60. package/dist/LayerRef.d.ts +5 -7
  61. package/dist/LayerRef.d.ts.map +1 -1
  62. package/dist/LayerRef.js +4 -6
  63. package/dist/LayerRef.js.map +1 -1
  64. package/dist/LogLevel.d.ts.map +1 -1
  65. package/dist/Logger.d.ts.map +1 -1
  66. package/dist/ManagedRuntime.d.ts.map +1 -1
  67. package/dist/Metric.d.ts.map +1 -1
  68. package/dist/MutableHashMap.d.ts.map +1 -1
  69. package/dist/MutableHashSet.d.ts.map +1 -1
  70. package/dist/MutableList.d.ts.map +1 -1
  71. package/dist/MutableRef.d.ts.map +1 -1
  72. package/dist/NonEmptyIterable.d.ts.map +1 -1
  73. package/dist/Number.d.ts.map +1 -1
  74. package/dist/Number.js +28 -10
  75. package/dist/Number.js.map +1 -1
  76. package/dist/Optic.d.ts.map +1 -1
  77. package/dist/Option.d.ts.map +1 -1
  78. package/dist/Order.d.ts.map +1 -1
  79. package/dist/Ordering.d.ts.map +1 -1
  80. package/dist/PartitionedSemaphore.d.ts.map +1 -1
  81. package/dist/Pipeable.d.ts.map +1 -1
  82. package/dist/PlatformError.d.ts.map +1 -1
  83. package/dist/Pool.d.ts.map +1 -1
  84. package/dist/PrimaryKey.d.ts.map +1 -1
  85. package/dist/PubSub.d.ts.map +1 -1
  86. package/dist/Pull.d.ts.map +1 -1
  87. package/dist/Queue.d.ts.map +1 -1
  88. package/dist/Random.d.ts.map +1 -1
  89. package/dist/RcMap.d.ts.map +1 -1
  90. package/dist/Record.d.ts.map +1 -1
  91. package/dist/Redactable.d.ts.map +1 -1
  92. package/dist/Redacted.d.ts.map +1 -1
  93. package/dist/Ref.d.ts.map +1 -1
  94. package/dist/RegExp.d.ts.map +1 -1
  95. package/dist/Request.d.ts +1 -1
  96. package/dist/Request.d.ts.map +1 -1
  97. package/dist/RequestResolver.d.ts.map +1 -1
  98. package/dist/Resource.d.ts.map +1 -1
  99. package/dist/Result.d.ts.map +1 -1
  100. package/dist/Runtime.d.ts.map +1 -1
  101. package/dist/Schedule.d.ts +1206 -4013
  102. package/dist/Schedule.d.ts.map +1 -1
  103. package/dist/Schedule.js +244 -1348
  104. package/dist/Schedule.js.map +1 -1
  105. package/dist/Scheduler.d.ts.map +1 -1
  106. package/dist/Scheduler.js.map +1 -1
  107. package/dist/Schema.d.ts +71 -22
  108. package/dist/Schema.d.ts.map +1 -1
  109. package/dist/Schema.js +76 -33
  110. package/dist/Schema.js.map +1 -1
  111. package/dist/SchemaAST.d.ts.map +1 -1
  112. package/dist/SchemaAST.js +25 -10
  113. package/dist/SchemaAST.js.map +1 -1
  114. package/dist/SchemaError.d.ts +53 -0
  115. package/dist/SchemaError.d.ts.map +1 -0
  116. package/dist/SchemaError.js +61 -0
  117. package/dist/SchemaError.js.map +1 -0
  118. package/dist/SchemaGetter.d.ts.map +1 -1
  119. package/dist/SchemaGetter.js +17 -12
  120. package/dist/SchemaGetter.js.map +1 -1
  121. package/dist/SchemaIssue.d.ts.map +1 -1
  122. package/dist/SchemaIssue.js.map +1 -1
  123. package/dist/SchemaParser.d.ts.map +1 -1
  124. package/dist/SchemaRepresentation.d.ts +106 -106
  125. package/dist/SchemaRepresentation.d.ts.map +1 -1
  126. package/dist/SchemaRepresentation.js +186 -224
  127. package/dist/SchemaRepresentation.js.map +1 -1
  128. package/dist/SchemaTransformation.d.ts +38 -2
  129. package/dist/SchemaTransformation.d.ts.map +1 -1
  130. package/dist/SchemaTransformation.js +38 -2
  131. package/dist/SchemaTransformation.js.map +1 -1
  132. package/dist/ScopedCache.d.ts.map +1 -1
  133. package/dist/ScopedRef.d.ts.map +1 -1
  134. package/dist/Semaphore.d.ts.map +1 -1
  135. package/dist/Sink.d.ts.map +1 -1
  136. package/dist/Stdio.d.ts.map +1 -1
  137. package/dist/Stream.d.ts +2 -2
  138. package/dist/Stream.d.ts.map +1 -1
  139. package/dist/Stream.js +1 -1
  140. package/dist/String.d.ts.map +1 -1
  141. package/dist/String.js.map +1 -1
  142. package/dist/Struct.d.ts.map +1 -1
  143. package/dist/SubscriptionRef.d.ts.map +1 -1
  144. package/dist/SynchronizedRef.d.ts.map +1 -1
  145. package/dist/Take.d.ts.map +1 -1
  146. package/dist/Terminal.d.ts.map +1 -1
  147. package/dist/Tracer.d.ts.map +1 -1
  148. package/dist/Trie.d.ts.map +1 -1
  149. package/dist/Tuple.d.ts.map +1 -1
  150. package/dist/TxChunk.d.ts.map +1 -1
  151. package/dist/TxDeferred.d.ts.map +1 -1
  152. package/dist/TxHashMap.d.ts.map +1 -1
  153. package/dist/TxHashSet.d.ts.map +1 -1
  154. package/dist/TxPriorityQueue.d.ts.map +1 -1
  155. package/dist/TxPubSub.d.ts.map +1 -1
  156. package/dist/TxQueue.d.ts.map +1 -1
  157. package/dist/TxReentrantLock.d.ts.map +1 -1
  158. package/dist/TxRef.d.ts.map +1 -1
  159. package/dist/TxSemaphore.d.ts.map +1 -1
  160. package/dist/TxSubscriptionRef.d.ts.map +1 -1
  161. package/dist/Types.d.ts +1 -1
  162. package/dist/Types.d.ts.map +1 -1
  163. package/dist/UndefinedOr.d.ts.map +1 -1
  164. package/dist/Utils.d.ts.map +1 -1
  165. package/dist/index.d.ts +8 -0
  166. package/dist/index.d.ts.map +1 -1
  167. package/dist/index.js +8 -0
  168. package/dist/index.js.map +1 -1
  169. package/dist/internal/effect.js +26 -8
  170. package/dist/internal/effect.js.map +1 -1
  171. package/dist/internal/schema/equivalence.js +1 -2
  172. package/dist/internal/schema/equivalence.js.map +1 -1
  173. package/dist/internal/schema/representation.js +1 -3
  174. package/dist/internal/schema/representation.js.map +1 -1
  175. package/dist/internal/schema/schema.d.ts +0 -13
  176. package/dist/internal/schema/schema.d.ts.map +1 -1
  177. package/dist/internal/schema/schema.js +4 -29
  178. package/dist/internal/schema/schema.js.map +1 -1
  179. package/dist/testing/TestClock.d.ts.map +1 -1
  180. package/dist/testing/TestConsole.d.ts.map +1 -1
  181. package/dist/testing/TestSchema.d.ts.map +1 -1
  182. package/dist/unstable/ai/AiError.d.ts +1 -1
  183. package/dist/unstable/ai/AiError.d.ts.map +1 -1
  184. package/dist/unstable/ai/Chat.d.ts +1 -1
  185. package/dist/unstable/ai/Chat.d.ts.map +1 -1
  186. package/dist/unstable/ai/IdGenerator.d.ts.map +1 -1
  187. package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
  188. package/dist/unstable/ai/McpSchema.d.ts +278 -278
  189. package/dist/unstable/ai/McpSchema.d.ts.map +1 -1
  190. package/dist/unstable/ai/McpServer.d.ts.map +1 -1
  191. package/dist/unstable/ai/Model.d.ts.map +1 -1
  192. package/dist/unstable/ai/Prompt.d.ts.map +1 -1
  193. package/dist/unstable/ai/Response.d.ts.map +1 -1
  194. package/dist/unstable/ai/Telemetry.d.ts.map +1 -1
  195. package/dist/unstable/ai/Tokenizer.d.ts.map +1 -1
  196. package/dist/unstable/ai/Tool.d.ts.map +1 -1
  197. package/dist/unstable/ai/Toolkit.d.ts.map +1 -1
  198. package/dist/unstable/cli/Argument.d.ts.map +1 -1
  199. package/dist/unstable/cli/CliError.d.ts +8 -16
  200. package/dist/unstable/cli/CliError.d.ts.map +1 -1
  201. package/dist/unstable/cli/CliError.js +8 -16
  202. package/dist/unstable/cli/CliError.js.map +1 -1
  203. package/dist/unstable/cli/CliOutput.d.ts.map +1 -1
  204. package/dist/unstable/cli/Command.d.ts +4 -3
  205. package/dist/unstable/cli/Command.d.ts.map +1 -1
  206. package/dist/unstable/cli/Command.js +3 -3
  207. package/dist/unstable/cli/Command.js.map +1 -1
  208. package/dist/unstable/cli/Completions.d.ts.map +1 -1
  209. package/dist/unstable/cli/Flag.d.ts.map +1 -1
  210. package/dist/unstable/cli/GlobalFlag.d.ts +6 -8
  211. package/dist/unstable/cli/GlobalFlag.d.ts.map +1 -1
  212. package/dist/unstable/cli/GlobalFlag.js +6 -6
  213. package/dist/unstable/cli/GlobalFlag.js.map +1 -1
  214. package/dist/unstable/cli/Param.d.ts.map +1 -1
  215. package/dist/unstable/cli/Primitive.d.ts.map +1 -1
  216. package/dist/unstable/cli/Prompt.d.ts.map +1 -1
  217. package/dist/unstable/cli/Prompt.js.map +1 -1
  218. package/dist/unstable/cli/internal/ansi.d.ts.map +1 -1
  219. package/dist/unstable/cli/internal/ansi.js.map +1 -1
  220. package/dist/unstable/cli/internal/command.d.ts.map +1 -1
  221. package/dist/unstable/cli/internal/help.d.ts.map +1 -1
  222. package/dist/unstable/cli/internal/parser.js.map +1 -1
  223. package/dist/unstable/cluster/ClusterCron.d.ts.map +1 -1
  224. package/dist/unstable/cluster/ClusterCron.js +1 -1
  225. package/dist/unstable/cluster/ClusterCron.js.map +1 -1
  226. package/dist/unstable/cluster/ClusterError.d.ts.map +1 -1
  227. package/dist/unstable/cluster/ClusterSchema.d.ts +1 -1
  228. package/dist/unstable/cluster/ClusterSchema.d.ts.map +1 -1
  229. package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts +1 -1
  230. package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  231. package/dist/unstable/cluster/ClusterWorkflowEngine.js +1 -1
  232. package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
  233. package/dist/unstable/cluster/DeliverAt.d.ts.map +1 -1
  234. package/dist/unstable/cluster/Entity.d.ts.map +1 -1
  235. package/dist/unstable/cluster/EntityAddress.d.ts.map +1 -1
  236. package/dist/unstable/cluster/EntityId.d.ts.map +1 -1
  237. package/dist/unstable/cluster/EntityProxy.d.ts.map +1 -1
  238. package/dist/unstable/cluster/EntityProxyServer.d.ts +1 -1
  239. package/dist/unstable/cluster/EntityProxyServer.d.ts.map +1 -1
  240. package/dist/unstable/cluster/EntityProxyServer.js +2 -4
  241. package/dist/unstable/cluster/EntityProxyServer.js.map +1 -1
  242. package/dist/unstable/cluster/EntityType.d.ts.map +1 -1
  243. package/dist/unstable/cluster/Envelope.d.ts.map +1 -1
  244. package/dist/unstable/cluster/HttpRunner.d.ts.map +1 -1
  245. package/dist/unstable/cluster/MachineId.d.ts.map +1 -1
  246. package/dist/unstable/cluster/Message.d.ts.map +1 -1
  247. package/dist/unstable/cluster/MessageStorage.d.ts +25 -29
  248. package/dist/unstable/cluster/MessageStorage.d.ts.map +1 -1
  249. package/dist/unstable/cluster/Reply.d.ts.map +1 -1
  250. package/dist/unstable/cluster/Runner.d.ts.map +1 -1
  251. package/dist/unstable/cluster/RunnerAddress.d.ts.map +1 -1
  252. package/dist/unstable/cluster/RunnerHealth.d.ts.map +1 -1
  253. package/dist/unstable/cluster/RunnerServer.d.ts +1 -1
  254. package/dist/unstable/cluster/RunnerStorage.d.ts.map +1 -1
  255. package/dist/unstable/cluster/Runners.d.ts +8 -8
  256. package/dist/unstable/cluster/ShardId.d.ts.map +1 -1
  257. package/dist/unstable/cluster/Sharding.js +3 -4
  258. package/dist/unstable/cluster/Sharding.js.map +1 -1
  259. package/dist/unstable/cluster/ShardingConfig.d.ts.map +1 -1
  260. package/dist/unstable/cluster/ShardingRegistrationEvent.d.ts +6 -8
  261. package/dist/unstable/cluster/ShardingRegistrationEvent.d.ts.map +1 -1
  262. package/dist/unstable/cluster/SingleRunner.d.ts.map +1 -1
  263. package/dist/unstable/cluster/Singleton.d.ts.map +1 -1
  264. package/dist/unstable/cluster/SingletonAddress.d.ts.map +1 -1
  265. package/dist/unstable/cluster/Snowflake.d.ts +1 -1
  266. package/dist/unstable/cluster/Snowflake.d.ts.map +1 -1
  267. package/dist/unstable/cluster/Snowflake.js +1 -1
  268. package/dist/unstable/cluster/Snowflake.js.map +1 -1
  269. package/dist/unstable/cluster/SqlMessageStorage.d.ts.map +1 -1
  270. package/dist/unstable/cluster/SqlRunnerStorage.d.ts +1 -1
  271. package/dist/unstable/cluster/SqlRunnerStorage.d.ts.map +1 -1
  272. package/dist/unstable/cluster/internal/entityManager.js +26 -24
  273. package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
  274. package/dist/unstable/devtools/DevTools.d.ts.map +1 -1
  275. package/dist/unstable/encoding/Msgpack.d.ts.map +1 -1
  276. package/dist/unstable/encoding/Ndjson.d.ts.map +1 -1
  277. package/dist/unstable/encoding/Sse.d.ts.map +1 -1
  278. package/dist/unstable/eventlog/Event.d.ts.map +1 -1
  279. package/dist/unstable/eventlog/EventGroup.d.ts.map +1 -1
  280. package/dist/unstable/eventlog/EventJournal.d.ts.map +1 -1
  281. package/dist/unstable/eventlog/EventJournal.js.map +1 -1
  282. package/dist/unstable/eventlog/EventLog.d.ts.map +1 -1
  283. package/dist/unstable/eventlog/EventLog.js +2 -2
  284. package/dist/unstable/eventlog/EventLog.js.map +1 -1
  285. package/dist/unstable/eventlog/EventLogEncryption.d.ts.map +1 -1
  286. package/dist/unstable/eventlog/EventLogMessage.d.ts.map +1 -1
  287. package/dist/unstable/eventlog/EventLogRemote.d.ts +21 -21
  288. package/dist/unstable/eventlog/EventLogServer.d.ts.map +1 -1
  289. package/dist/unstable/eventlog/EventLogServerEncrypted.d.ts +1 -1
  290. package/dist/unstable/eventlog/EventLogServerUnencrypted.d.ts +3 -4
  291. package/dist/unstable/eventlog/EventLogServerUnencrypted.d.ts.map +1 -1
  292. package/dist/unstable/eventlog/EventLogSessionAuth.d.ts.map +1 -1
  293. package/dist/unstable/eventlog/SqlEventJournal.d.ts.map +1 -1
  294. package/dist/unstable/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
  295. package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.d.ts.map +1 -1
  296. package/dist/unstable/http/Cookies.d.ts +1 -1
  297. package/dist/unstable/http/Cookies.d.ts.map +1 -1
  298. package/dist/unstable/http/Etag.d.ts.map +1 -1
  299. package/dist/unstable/http/Headers.d.ts.map +1 -1
  300. package/dist/unstable/http/HttpBody.d.ts.map +1 -1
  301. package/dist/unstable/http/HttpClient.d.ts.map +1 -1
  302. package/dist/unstable/http/HttpClientError.d.ts +1 -1
  303. package/dist/unstable/http/HttpClientError.d.ts.map +1 -1
  304. package/dist/unstable/http/HttpClientRequest.d.ts.map +1 -1
  305. package/dist/unstable/http/HttpClientResponse.d.ts.map +1 -1
  306. package/dist/unstable/http/HttpEffect.d.ts.map +1 -1
  307. package/dist/unstable/http/HttpIncomingMessage.d.ts.map +1 -1
  308. package/dist/unstable/http/HttpMethod.d.ts.map +1 -1
  309. package/dist/unstable/http/HttpMiddleware.d.ts +1 -1
  310. package/dist/unstable/http/HttpMiddleware.d.ts.map +1 -1
  311. package/dist/unstable/http/HttpRouter.d.ts.map +1 -1
  312. package/dist/unstable/http/HttpServer.d.ts.map +1 -1
  313. package/dist/unstable/http/HttpServerError.d.ts +1 -1
  314. package/dist/unstable/http/HttpServerError.d.ts.map +1 -1
  315. package/dist/unstable/http/HttpServerRequest.d.ts +2 -2
  316. package/dist/unstable/http/HttpServerRequest.d.ts.map +1 -1
  317. package/dist/unstable/http/HttpServerRespondable.d.ts.map +1 -1
  318. package/dist/unstable/http/HttpServerResponse.d.ts.map +1 -1
  319. package/dist/unstable/http/HttpStaticServer.d.ts.map +1 -1
  320. package/dist/unstable/http/HttpTraceContext.d.ts.map +1 -1
  321. package/dist/unstable/http/Multipart.d.ts +2 -1
  322. package/dist/unstable/http/Multipart.d.ts.map +1 -1
  323. package/dist/unstable/http/Url.d.ts.map +1 -1
  324. package/dist/unstable/http/UrlParams.d.ts.map +1 -1
  325. package/dist/unstable/httpapi/HttpApi.d.ts +36 -15
  326. package/dist/unstable/httpapi/HttpApi.d.ts.map +1 -1
  327. package/dist/unstable/httpapi/HttpApi.js +19 -20
  328. package/dist/unstable/httpapi/HttpApi.js.map +1 -1
  329. package/dist/unstable/httpapi/HttpApiBuilder.d.ts +51 -62
  330. package/dist/unstable/httpapi/HttpApiBuilder.d.ts.map +1 -1
  331. package/dist/unstable/httpapi/HttpApiBuilder.js +68 -58
  332. package/dist/unstable/httpapi/HttpApiBuilder.js.map +1 -1
  333. package/dist/unstable/httpapi/HttpApiClient.d.ts +53 -53
  334. package/dist/unstable/httpapi/HttpApiClient.d.ts.map +1 -1
  335. package/dist/unstable/httpapi/HttpApiClient.js +40 -30
  336. package/dist/unstable/httpapi/HttpApiClient.js.map +1 -1
  337. package/dist/unstable/httpapi/HttpApiEndpoint.d.ts +171 -170
  338. package/dist/unstable/httpapi/HttpApiEndpoint.d.ts.map +1 -1
  339. package/dist/unstable/httpapi/HttpApiEndpoint.js +31 -19
  340. package/dist/unstable/httpapi/HttpApiEndpoint.js.map +1 -1
  341. package/dist/unstable/httpapi/HttpApiError.d.ts +23 -1
  342. package/dist/unstable/httpapi/HttpApiError.d.ts.map +1 -1
  343. package/dist/unstable/httpapi/HttpApiError.js +31 -0
  344. package/dist/unstable/httpapi/HttpApiError.js.map +1 -1
  345. package/dist/unstable/httpapi/HttpApiGroup.d.ts +55 -30
  346. package/dist/unstable/httpapi/HttpApiGroup.d.ts.map +1 -1
  347. package/dist/unstable/httpapi/HttpApiGroup.js +22 -29
  348. package/dist/unstable/httpapi/HttpApiGroup.js.map +1 -1
  349. package/dist/unstable/httpapi/HttpApiMiddleware.d.ts +8 -8
  350. package/dist/unstable/httpapi/HttpApiMiddleware.d.ts.map +1 -1
  351. package/dist/unstable/httpapi/HttpApiMiddleware.js.map +1 -1
  352. package/dist/unstable/httpapi/HttpApiScalar.d.ts +2 -2
  353. package/dist/unstable/httpapi/HttpApiScalar.d.ts.map +1 -1
  354. package/dist/unstable/httpapi/HttpApiScalar.js +4 -3
  355. package/dist/unstable/httpapi/HttpApiScalar.js.map +1 -1
  356. package/dist/unstable/httpapi/HttpApiSchema.d.ts +8 -0
  357. package/dist/unstable/httpapi/HttpApiSchema.d.ts.map +1 -1
  358. package/dist/unstable/httpapi/HttpApiSchema.js.map +1 -1
  359. package/dist/unstable/httpapi/HttpApiSecurity.d.ts.map +1 -1
  360. package/dist/unstable/httpapi/HttpApiSwagger.d.ts +1 -1
  361. package/dist/unstable/httpapi/HttpApiSwagger.d.ts.map +1 -1
  362. package/dist/unstable/httpapi/HttpApiSwagger.js.map +1 -1
  363. package/dist/unstable/httpapi/HttpApiTest.d.ts +4 -4
  364. package/dist/unstable/httpapi/HttpApiTest.d.ts.map +1 -1
  365. package/dist/unstable/httpapi/HttpApiTest.js +9 -8
  366. package/dist/unstable/httpapi/HttpApiTest.js.map +1 -1
  367. package/dist/unstable/httpapi/OpenApi.d.ts +1 -1
  368. package/dist/unstable/httpapi/OpenApi.d.ts.map +1 -1
  369. package/dist/unstable/httpapi/OpenApi.js +77 -37
  370. package/dist/unstable/httpapi/OpenApi.js.map +1 -1
  371. package/dist/unstable/httpapi/internal/html.js +6 -2
  372. package/dist/unstable/httpapi/internal/html.js.map +1 -1
  373. package/dist/unstable/httpapi/internal/mediaType.d.ts +2 -0
  374. package/dist/unstable/httpapi/internal/mediaType.d.ts.map +1 -0
  375. package/dist/unstable/httpapi/internal/mediaType.js +7 -0
  376. package/dist/unstable/httpapi/internal/mediaType.js.map +1 -0
  377. package/dist/unstable/observability/Otlp.d.ts.map +1 -1
  378. package/dist/unstable/observability/OtlpExporter.js +3 -1
  379. package/dist/unstable/observability/OtlpExporter.js.map +1 -1
  380. package/dist/unstable/observability/OtlpLogger.d.ts.map +1 -1
  381. package/dist/unstable/observability/OtlpMetrics.d.ts.map +1 -1
  382. package/dist/unstable/observability/OtlpResource.d.ts.map +1 -1
  383. package/dist/unstable/observability/OtlpTracer.d.ts.map +1 -1
  384. package/dist/unstable/observability/PrometheusMetrics.d.ts.map +1 -1
  385. package/dist/unstable/observability/internal/otlpEnv.d.ts.map +1 -1
  386. package/dist/unstable/persistence/KeyValueStore.d.ts.map +1 -1
  387. package/dist/unstable/persistence/KeyValueStore.js.map +1 -1
  388. package/dist/unstable/persistence/Persistable.d.ts.map +1 -1
  389. package/dist/unstable/persistence/PersistedQueue.d.ts +1 -1
  390. package/dist/unstable/persistence/PersistedQueue.d.ts.map +1 -1
  391. package/dist/unstable/persistence/PersistedQueue.js +16 -12
  392. package/dist/unstable/persistence/PersistedQueue.js.map +1 -1
  393. package/dist/unstable/persistence/Persistence.d.ts.map +1 -1
  394. package/dist/unstable/persistence/RateLimiter.d.ts.map +1 -1
  395. package/dist/unstable/persistence/Redis.d.ts.map +1 -1
  396. package/dist/unstable/process/ChildProcess.d.ts.map +1 -1
  397. package/dist/unstable/process/ChildProcess.js.map +1 -1
  398. package/dist/unstable/process/ChildProcessSpawner.d.ts.map +1 -1
  399. package/dist/unstable/reactivity/AsyncResult.d.ts +2 -2
  400. package/dist/unstable/reactivity/AsyncResult.d.ts.map +1 -1
  401. package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
  402. package/dist/unstable/reactivity/Atom.js +1 -1
  403. package/dist/unstable/reactivity/Atom.js.map +1 -1
  404. package/dist/unstable/reactivity/AtomHttpApi.d.ts +7 -7
  405. package/dist/unstable/reactivity/AtomHttpApi.d.ts.map +1 -1
  406. package/dist/unstable/reactivity/AtomHttpApi.js +3 -2
  407. package/dist/unstable/reactivity/AtomHttpApi.js.map +1 -1
  408. package/dist/unstable/reactivity/AtomRef.d.ts.map +1 -1
  409. package/dist/unstable/reactivity/AtomRegistry.d.ts +2 -2
  410. package/dist/unstable/reactivity/AtomRegistry.d.ts.map +1 -1
  411. package/dist/unstable/reactivity/AtomRegistry.js +28 -37
  412. package/dist/unstable/reactivity/AtomRegistry.js.map +1 -1
  413. package/dist/unstable/reactivity/AtomRpc.d.ts.map +1 -1
  414. package/dist/unstable/reactivity/Hydration.d.ts.map +1 -1
  415. package/dist/unstable/reactivity/Reactivity.d.ts.map +1 -1
  416. package/dist/unstable/rpc/Rpc.d.ts.map +1 -1
  417. package/dist/unstable/rpc/RpcClient.d.ts +2 -1
  418. package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
  419. package/dist/unstable/rpc/RpcClient.js +5 -5
  420. package/dist/unstable/rpc/RpcClient.js.map +1 -1
  421. package/dist/unstable/rpc/RpcGroup.d.ts.map +1 -1
  422. package/dist/unstable/rpc/RpcMessage.d.ts +7 -7
  423. package/dist/unstable/rpc/RpcMessage.d.ts.map +1 -1
  424. package/dist/unstable/rpc/RpcMessage.js +2 -2
  425. package/dist/unstable/rpc/RpcMessage.js.map +1 -1
  426. package/dist/unstable/rpc/RpcMiddleware.d.ts.map +1 -1
  427. package/dist/unstable/rpc/RpcSchema.d.ts +1 -1
  428. package/dist/unstable/rpc/RpcSerialization.d.ts.map +1 -1
  429. package/dist/unstable/rpc/RpcSerialization.js +8 -8
  430. package/dist/unstable/rpc/RpcSerialization.js.map +1 -1
  431. package/dist/unstable/rpc/RpcServer.d.ts +5 -3
  432. package/dist/unstable/rpc/RpcServer.d.ts.map +1 -1
  433. package/dist/unstable/rpc/RpcServer.js +11 -8
  434. package/dist/unstable/rpc/RpcServer.js.map +1 -1
  435. package/dist/unstable/rpc/RpcWorker.d.ts.map +1 -1
  436. package/dist/unstable/rpc/Utils.d.ts.map +1 -1
  437. package/dist/unstable/schema/Model.d.ts +24 -38
  438. package/dist/unstable/schema/Model.d.ts.map +1 -1
  439. package/dist/unstable/schema/VariantSchema.d.ts +1 -1
  440. package/dist/unstable/schema/VariantSchema.d.ts.map +1 -1
  441. package/dist/unstable/socket/Socket.d.ts +1 -1
  442. package/dist/unstable/socket/Socket.d.ts.map +1 -1
  443. package/dist/unstable/socket/SocketServer.d.ts.map +1 -1
  444. package/dist/unstable/sql/Migrator.d.ts.map +1 -1
  445. package/dist/unstable/sql/SqlClient.d.ts.map +1 -1
  446. package/dist/unstable/sql/SqlError.d.ts +2 -2
  447. package/dist/unstable/sql/SqlError.d.ts.map +1 -1
  448. package/dist/unstable/sql/SqlError.js.map +1 -1
  449. package/dist/unstable/sql/SqlModel.d.ts.map +1 -1
  450. package/dist/unstable/sql/SqlResolver.d.ts.map +1 -1
  451. package/dist/unstable/sql/SqlSchema.d.ts.map +1 -1
  452. package/dist/unstable/sql/SqlStream.d.ts.map +1 -1
  453. package/dist/unstable/sql/Statement.d.ts.map +1 -1
  454. package/dist/unstable/workers/Transferable.d.ts.map +1 -1
  455. package/dist/unstable/workers/Worker.d.ts.map +1 -1
  456. package/dist/unstable/workers/WorkerError.d.ts.map +1 -1
  457. package/dist/unstable/workflow/Activity.d.ts +1 -1
  458. package/dist/unstable/workflow/Activity.d.ts.map +1 -1
  459. package/dist/unstable/workflow/Activity.js +1 -1
  460. package/dist/unstable/workflow/Activity.js.map +1 -1
  461. package/dist/unstable/workflow/DurableClock.d.ts.map +1 -1
  462. package/dist/unstable/workflow/DurableDeferred.d.ts.map +1 -1
  463. package/dist/unstable/workflow/DurableDeferred.js +1 -1
  464. package/dist/unstable/workflow/DurableDeferred.js.map +1 -1
  465. package/dist/unstable/workflow/DurableQueue.d.ts.map +1 -1
  466. package/dist/unstable/workflow/DurableQueue.js +1 -1
  467. package/dist/unstable/workflow/DurableQueue.js.map +1 -1
  468. package/dist/unstable/workflow/Workflow.d.ts.map +1 -1
  469. package/dist/unstable/workflow/WorkflowEngine.d.ts.map +1 -1
  470. package/dist/unstable/workflow/WorkflowEngine.js +1 -1
  471. package/dist/unstable/workflow/WorkflowEngine.js.map +1 -1
  472. package/dist/unstable/workflow/WorkflowProxy.d.ts.map +1 -1
  473. package/dist/unstable/workflow/WorkflowProxyServer.d.ts +1 -1
  474. package/dist/unstable/workflow/WorkflowProxyServer.d.ts.map +1 -1
  475. package/dist/unstable/workflow/WorkflowProxyServer.js +1 -2
  476. package/dist/unstable/workflow/WorkflowProxyServer.js.map +1 -1
  477. package/package.json +11 -12
  478. package/src/ConfigProvider.ts +79 -27
  479. package/src/Cron.ts +109 -57
  480. package/src/LayerRef.ts +4 -6
  481. package/src/Number.ts +29 -10
  482. package/src/Schedule.ts +1437 -4445
  483. package/src/Schema.ts +95 -34
  484. package/src/SchemaAST.ts +25 -13
  485. package/src/SchemaError.ts +64 -0
  486. package/src/SchemaGetter.ts +22 -16
  487. package/src/SchemaRepresentation.ts +165 -202
  488. package/src/SchemaTransformation.ts +42 -2
  489. package/src/Stream.ts +1 -1
  490. package/src/index.ts +10 -0
  491. package/src/internal/effect.ts +39 -22
  492. package/src/internal/schema/equivalence.ts +1 -2
  493. package/src/internal/schema/representation.ts +4 -4
  494. package/src/internal/schema/schema.ts +4 -37
  495. package/src/unstable/cli/CliError.ts +24 -16
  496. package/src/unstable/cli/Command.ts +8 -8
  497. package/src/unstable/cli/GlobalFlag.ts +22 -33
  498. package/src/unstable/cluster/ClusterCron.ts +4 -3
  499. package/src/unstable/cluster/ClusterWorkflowEngine.ts +4 -3
  500. package/src/unstable/cluster/EntityProxyServer.ts +15 -17
  501. package/src/unstable/cluster/Sharding.ts +4 -4
  502. package/src/unstable/cluster/Snowflake.ts +2 -2
  503. package/src/unstable/cluster/internal/entityManager.ts +61 -47
  504. package/src/unstable/eventlog/EventLog.ts +4 -3
  505. package/src/unstable/httpapi/HttpApi.ts +72 -47
  506. package/src/unstable/httpapi/HttpApiBuilder.ts +320 -217
  507. package/src/unstable/httpapi/HttpApiClient.ts +196 -151
  508. package/src/unstable/httpapi/HttpApiEndpoint.ts +251 -447
  509. package/src/unstable/httpapi/HttpApiError.ts +33 -0
  510. package/src/unstable/httpapi/HttpApiGroup.ts +95 -74
  511. package/src/unstable/httpapi/HttpApiMiddleware.ts +10 -7
  512. package/src/unstable/httpapi/HttpApiScalar.ts +15 -12
  513. package/src/unstable/httpapi/HttpApiSchema.ts +8 -0
  514. package/src/unstable/httpapi/HttpApiSwagger.ts +2 -2
  515. package/src/unstable/httpapi/HttpApiTest.ts +15 -14
  516. package/src/unstable/httpapi/OpenApi.ts +74 -36
  517. package/src/unstable/httpapi/internal/html.ts +9 -2
  518. package/src/unstable/httpapi/internal/mediaType.ts +6 -0
  519. package/src/unstable/observability/OtlpExporter.ts +1 -1
  520. package/src/unstable/persistence/PersistedQueue.ts +16 -14
  521. package/src/unstable/reactivity/Atom.ts +1 -1
  522. package/src/unstable/reactivity/AtomHttpApi.ts +164 -162
  523. package/src/unstable/reactivity/AtomRegistry.ts +35 -44
  524. package/src/unstable/rpc/RpcClient.ts +10 -9
  525. package/src/unstable/rpc/RpcMessage.ts +8 -9
  526. package/src/unstable/rpc/RpcSerialization.ts +16 -16
  527. package/src/unstable/rpc/RpcServer.ts +15 -9
  528. package/src/unstable/workflow/Activity.ts +6 -5
  529. package/src/unstable/workflow/DurableDeferred.ts +1 -1
  530. package/src/unstable/workflow/DurableQueue.ts +4 -3
  531. package/src/unstable/workflow/WorkflowEngine.ts +4 -3
  532. package/src/unstable/workflow/WorkflowProxyServer.ts +11 -12
@@ -18,7 +18,6 @@ import * as Schema from "../../../Schema.ts"
18
18
  import * as SchemaIssue from "../../../SchemaIssue.ts"
19
19
  import * as Scope from "../../../Scope.ts"
20
20
  import type * as Rpc from "../../rpc/Rpc.ts"
21
- import { RequestId } from "../../rpc/RpcMessage.ts"
22
21
  import * as RpcServer from "../../rpc/RpcServer.ts"
23
22
  import { AlreadyProcessingMessage, EntityNotAssignedToRunner, MailboxFull, MalformedMessage } from "../ClusterError.ts"
24
23
  import * as ClusterMetrics from "../ClusterMetrics.ts"
@@ -67,7 +66,7 @@ export interface EntityManager {
67
66
  export type EntityState = {
68
67
  readonly address: EntityAddress
69
68
  readonly scope: Scope.Scope
70
- readonly activeRequests: Map<bigint, {
69
+ readonly activeRequests: Map<Snowflake.Snowflake, {
71
70
  readonly rpc: Rpc.AnyWithProps
72
71
  readonly message: Message.IncomingRequestLocal<any>
73
72
  sentReply: boolean
@@ -145,7 +144,7 @@ export const make = Effect.fnUntraced(function*<
145
144
  )
146
145
 
147
146
  const activeRequests: EntityState["activeRequests"] = new Map()
148
- let defectRequestIds = new Set<bigint>()
147
+ let defectRequestIds = new Set<Snowflake.Snowflake>()
149
148
  let isRestartingDueToDefect = false
150
149
 
151
150
  // the server is stored in a ref, so if there is a defect, we can
@@ -184,7 +183,7 @@ export const make = Effect.fnUntraced(function*<
184
183
  onFromServer(response): Effect.Effect<void> {
185
184
  switch (response._tag) {
186
185
  case "Exit": {
187
- const request = activeRequests.get(response.requestId)
186
+ const request = activeRequests.get(Snowflake.Snowflake(response.requestId))
188
187
  if (!request) return Effect.void
189
188
 
190
189
  request.sentReply = true
@@ -192,7 +191,7 @@ export const make = Effect.fnUntraced(function*<
192
191
  if (
193
192
  isShuttingDown &&
194
193
  Exit.hasInterrupts(response.exit) &&
195
- defectRequestIds.has(response.requestId)
194
+ defectRequestIds.has(Snowflake.Snowflake(response.requestId))
196
195
  ) {
197
196
  return Effect.void
198
197
  }
@@ -208,19 +207,25 @@ export const make = Effect.fnUntraced(function*<
208
207
  (isShuttingDown || isUninterruptibleForServer(request.message.annotations))
209
208
  ) {
210
209
  if (!isShuttingDown) {
211
- return server.write(0, {
212
- ...request.message.envelope,
213
- id: RequestId(request.message.envelope.requestId),
214
- tag: request.message.envelope.tag as any,
215
- payload: new Request({
210
+ return server.write(
211
+ 0,
212
+ {
216
213
  ...request.message.envelope,
217
- lastSentChunk: request.lastSentChunk
218
- } as any) as any
219
- }).pipe(
214
+ id: request.message.envelope.requestId as any,
215
+ tag: request.message.envelope.tag as any,
216
+ payload: new Request({
217
+ ...request.message.envelope,
218
+ lastSentChunk: request.lastSentChunk
219
+ } as any) as any
220
+ },
221
+ Context.get(request.rpc.annotations, WithTransaction)
222
+ ? { onRequest: options.storage.withTransaction }
223
+ : undefined
224
+ ).pipe(
220
225
  Effect.forkIn(scope)
221
226
  )
222
227
  }
223
- activeRequests.delete(response.requestId)
228
+ activeRequests.delete(Snowflake.Snowflake(response.requestId))
224
229
  return options.storage.unregisterReplyHandler(request.message.envelope.requestId)
225
230
  }
226
231
  return retryRespond(
@@ -237,7 +242,7 @@ export const make = Effect.fnUntraced(function*<
237
242
  ).pipe(
238
243
  Effect.flatMap(() => {
239
244
  processedRequestIds.add(request.message.envelope.requestId)
240
- activeRequests.delete(response.requestId)
245
+ activeRequests.delete(Snowflake.Snowflake(response.requestId))
241
246
 
242
247
  // ensure that the reaper does not remove the entity as we haven't
243
248
  // been "idle" yet
@@ -251,7 +256,7 @@ export const make = Effect.fnUntraced(function*<
251
256
  )
252
257
  }
253
258
  case "Chunk": {
254
- const request = activeRequests.get(response.requestId)
259
+ const request = activeRequests.get(Snowflake.Snowflake(response.requestId))
255
260
  if (!request) return Effect.void
256
261
  const sequence = request.sequence
257
262
  request.sequence++
@@ -296,16 +301,22 @@ export const make = Effect.fnUntraced(function*<
296
301
  for (const id of defectRequestIds) {
297
302
  const request = activeRequests.get(id)
298
303
  if (!request) continue
299
- const { lastSentChunk, message } = request
300
- yield* server.write(0, {
301
- ...message.envelope,
302
- id: RequestId(message.envelope.requestId),
303
- tag: message.envelope.tag as any,
304
- payload: new Request({
304
+ const { lastSentChunk, message, rpc } = request
305
+ yield* server.write(
306
+ 0,
307
+ {
305
308
  ...message.envelope,
306
- lastSentChunk
307
- } as any) as any
308
- })
309
+ id: message.envelope.requestId as any,
310
+ tag: message.envelope.tag as any,
311
+ payload: new Request({
312
+ ...message.envelope,
313
+ lastSentChunk
314
+ } as any) as any
315
+ },
316
+ Context.get(rpc.annotations, WithTransaction)
317
+ ? { onRequest: options.storage.withTransaction }
318
+ : undefined
319
+ )
309
320
  }
310
321
  defectRequestIds.clear()
311
322
  }
@@ -342,11 +353,11 @@ export const make = Effect.fnUntraced(function*<
342
353
  const state: EntityState = {
343
354
  scope,
344
355
  address,
345
- write(clientId, message) {
356
+ write(clientId, message, writeOptions) {
346
357
  if (writeRef.state.current._tag !== "Acquired") {
347
- return Effect.flatMap(writeRef.await, (write) => write(clientId, message))
358
+ return Effect.flatMap(writeRef.await, (write) => write(clientId, message, writeOptions))
348
359
  }
349
- return writeRef.state.current.value(clientId, message)
360
+ return writeRef.state.current.value(clientId, message, writeOptions)
350
361
  },
351
362
  activeRequests,
352
363
  lastActiveCheck: clock.currentTimeMillisUnsafe(),
@@ -473,21 +484,23 @@ export const make = Effect.fnUntraced(function*<
473
484
  })
474
485
  }
475
486
  server.activeRequests.set(message.envelope.requestId, entry)
476
- let write = server.write(0, {
477
- ...message.envelope,
478
- id: RequestId(message.envelope.requestId),
479
- payload: new Request({
487
+ return server.write(
488
+ 0,
489
+ {
480
490
  ...message.envelope,
481
- lastSentChunk: Option.filter(
482
- message.lastSentReply,
483
- (reply): reply is Reply.Chunk<R> => reply._tag === "Chunk"
484
- )
485
- })
486
- })
487
- if (Context.get(message.annotations, WithTransaction)) {
488
- write = options.storage.withTransaction(write)
489
- }
490
- return write
491
+ id: message.envelope.requestId as any,
492
+ payload: new Request({
493
+ ...message.envelope,
494
+ lastSentChunk: Option.filter(
495
+ message.lastSentReply,
496
+ (reply): reply is Reply.Chunk<R> => reply._tag === "Chunk"
497
+ )
498
+ })
499
+ },
500
+ Context.get(message.annotations, WithTransaction)
501
+ ? { onRequest: options.storage.withTransaction }
502
+ : undefined
503
+ )
491
504
  }
492
505
  case "IncomingEnvelope": {
493
506
  const entry = server.activeRequests.get(message.envelope.requestId)
@@ -503,10 +516,10 @@ export const make = Effect.fnUntraced(function*<
503
516
  return server.write(
504
517
  0,
505
518
  message.envelope._tag === "AckChunk"
506
- ? { _tag: "Ack", requestId: RequestId(message.envelope.requestId) }
519
+ ? { _tag: "Ack", requestId: message.envelope.requestId as any }
507
520
  : {
508
521
  _tag: "Interrupt",
509
- requestId: RequestId(message.envelope.requestId),
522
+ requestId: message.envelope.requestId as any,
510
523
  interruptors: []
511
524
  }
512
525
  )
@@ -611,9 +624,10 @@ export const make = Effect.fnUntraced(function*<
611
624
  })
612
625
  })
613
626
 
614
- const defaultRetryPolicy = Schedule.exponential(500, 1.5).pipe(
615
- Schedule.either(Schedule.spaced("10 seconds"))
616
- )
627
+ const defaultRetryPolicy = Schedule.min([
628
+ Schedule.exponential(500, 1.5),
629
+ Schedule.spaced("10 seconds")
630
+ ])
617
631
 
618
632
  const makeMessageDecode = <Type extends string, Rpcs extends Rpc.Any>(
619
633
  entity: Entity<Type, Rpcs>,
@@ -854,9 +854,10 @@ const make = Effect.gen(function*() {
854
854
  Effect.scoped,
855
855
  Effect.catchCause(Effect.logError),
856
856
  Effect.repeat(
857
- Schedule.exponential(200, 1.5).pipe(
858
- Schedule.either(Schedule.spaced({ seconds: 10 }))
859
- )
857
+ Schedule.min([
858
+ Schedule.exponential(200, 1.5),
859
+ Schedule.spaced({ seconds: 10 })
860
+ ])
860
861
  ),
861
862
  Effect.annotateLogs({
862
863
  service: "EventLog",
@@ -10,12 +10,12 @@
10
10
  */
11
11
  import type { NonEmptyReadonlyArray } from "../../Array.ts"
12
12
  import * as Context from "../../Context.ts"
13
+ import * as internalRecord from "../../internal/record.ts"
13
14
  import { type Pipeable, pipeArguments } from "../../Pipeable.ts"
14
15
  import * as Predicate from "../../Predicate.ts"
15
16
  import * as Record from "../../Record.ts"
16
17
  import type * as Schema from "../../Schema.ts"
17
18
  import type * as SchemaAST from "../../SchemaAST.ts"
18
- import type { Mutable } from "../../Types.ts"
19
19
  import type { PathInput } from "../http/HttpRouter.ts"
20
20
  import * as HttpApiEndpoint from "./HttpApiEndpoint.ts"
21
21
  import type * as HttpApiGroup from "./HttpApiGroup.ts"
@@ -30,7 +30,14 @@ const TypeId = "~effect/httpapi/HttpApi"
30
30
  * @category guards
31
31
  * @since 4.0.0
32
32
  */
33
- export const isHttpApi = (u: unknown): u is Any => Predicate.hasProperty(u, TypeId)
33
+ export const isHttpApi = (u: unknown): u is Top => Predicate.hasProperty(u, TypeId)
34
+
35
+ /**
36
+ * Groups indexed by their identifier.
37
+ */
38
+ type GroupMap<Groups> = {
39
+ readonly [Group in Groups as HttpApiGroup.Identifier<Group>]: Group
40
+ }
34
41
 
35
42
  /**
36
43
  * An `HttpApi` is a collection of HTTP API groups and endpoints that represents a
@@ -46,23 +53,38 @@ export const isHttpApi = (u: unknown): u is Any => Predicate.hasProperty(u, Type
46
53
  */
47
54
  export interface HttpApi<
48
55
  out Id extends string,
49
- out Groups extends HttpApiGroup.Any = never
56
+ in out Groups extends HttpApiGroup.Constraint = never
50
57
  > extends Pipeable {
51
58
  new(_: never): {}
52
59
  readonly [TypeId]: typeof TypeId
53
60
  readonly identifier: Id
54
- readonly groups: Record.ReadonlyRecord<string, Groups>
61
+ readonly groups: GroupMap<Groups>
55
62
  readonly annotations: Context.Context<never>
56
63
 
57
64
  /**
58
65
  * Add a `HttpApiGroup` to the `HttpApi`.
59
66
  */
60
- add<const A extends NonEmptyReadonlyArray<HttpApiGroup.Any>>(...groups: A): HttpApi<Id, Groups | A[number]>
67
+ add<const A extends NonEmptyReadonlyArray<HttpApiGroup.Constraint>>(...groups: A): HttpApi<Id, Groups | A[number]>
61
68
 
62
69
  /**
63
- * Add another `HttpApi` to the `HttpApi`.
70
+ * Adds every group from another `HttpApi` while preserving its annotation scope.
71
+ *
72
+ * **When to use**
73
+ *
74
+ * Use when you want to compose an API from groups declared and annotated under another API.
75
+ *
76
+ * **Details**
77
+ *
78
+ * The added API is flattened into this API rather than retained as a nested value. Each added group
79
+ * is copied with the added API's annotations, leaving the added API unchanged. Annotation precedence
80
+ * from least to most specific is this API, the added API, the group, and then the endpoint.
81
+ *
82
+ * **Gotchas**
83
+ *
84
+ * Annotations from the added API do not become top-level annotations of the result and do not affect
85
+ * groups already present in this API. They remain scoped to the groups and endpoints being added.
64
86
  */
65
- addHttpApi<Id2 extends string, Groups2 extends HttpApiGroup.Any>(
87
+ addHttpApi<Id2 extends string, Groups2 extends HttpApiGroup.Constraint>(
66
88
  api: HttpApi<Id2, Groups2>
67
89
  ): HttpApi<Id, Groups | Groups2>
68
90
 
@@ -99,7 +121,7 @@ export interface HttpApi<
99
121
  * @category models
100
122
  * @since 4.0.0
101
123
  */
102
- export interface Any {
124
+ export interface Constraint {
103
125
  readonly [TypeId]: typeof TypeId
104
126
  }
105
127
 
@@ -110,7 +132,7 @@ export interface Any {
110
132
  * @category models
111
133
  * @since 4.0.0
112
134
  */
113
- export type AnyWithProps = HttpApi<string, HttpApiGroup.AnyWithProps>
135
+ export interface Top extends HttpApi<string, HttpApiGroup.Top> {}
114
136
 
115
137
  const Proto = {
116
138
  [TypeId]: TypeId,
@@ -118,69 +140,72 @@ const Proto = {
118
140
  return pipeArguments(this, arguments)
119
141
  },
120
142
  add(
121
- this: AnyWithProps,
122
- ...toAdd: NonEmptyReadonlyArray<HttpApiGroup.AnyWithProps>
143
+ this: Top,
144
+ ...toAdd: NonEmptyReadonlyArray<HttpApiGroup.Top>
123
145
  ) {
124
146
  const groups = { ...this.groups }
125
147
  for (const group of toAdd) {
126
- groups[group.identifier] = group
148
+ internalRecord.set(groups, group.identifier, group)
127
149
  }
128
150
  return makeProto({
129
- identifier: this.identifier,
130
- groups,
131
- annotations: this.annotations
151
+ ...optionsFromApi(this),
152
+ groups
132
153
  })
133
154
  },
134
155
  addHttpApi(
135
- this: AnyWithProps,
136
- api: AnyWithProps
156
+ this: Top,
157
+ api: Top
137
158
  ) {
138
159
  const newGroups = { ...this.groups }
139
160
  for (const key in api.groups) {
140
- const newGroup: Mutable<HttpApiGroup.AnyWithProps> = api.groups[key]
141
- newGroup.annotations = Context.merge(api.annotations, newGroup.annotations)
142
- newGroups[key] = newGroup as any
161
+ const group = api.groups[key]
162
+ internalRecord.set(
163
+ newGroups,
164
+ key,
165
+ group.annotateMerge(Context.merge(api.annotations, group.annotations))
166
+ )
143
167
  }
144
168
  return makeProto({
145
- identifier: this.identifier,
146
- groups: newGroups,
147
- annotations: this.annotations
169
+ ...optionsFromApi(this),
170
+ groups: newGroups
148
171
  })
149
172
  },
150
- prefix(this: AnyWithProps, prefix: PathInput) {
173
+ prefix(this: Top, prefix: PathInput) {
151
174
  return makeProto({
152
- identifier: this.identifier,
153
- groups: Record.map(this.groups, (group) => group.prefix(prefix)),
154
- annotations: this.annotations
175
+ ...optionsFromApi(this),
176
+ groups: Record.map(this.groups, (group) => group.prefix(prefix))
155
177
  })
156
178
  },
157
- middleware(this: AnyWithProps, tag: HttpApiMiddleware.AnyService) {
179
+ middleware(this: Top, tag: HttpApiMiddleware.AnyService) {
158
180
  return makeProto({
159
- identifier: this.identifier,
160
- groups: Record.map(this.groups, (group) => group.middleware(tag as any)),
161
- annotations: this.annotations
181
+ ...optionsFromApi(this),
182
+ groups: Record.map(this.groups, (group) => group.middleware(tag as any))
162
183
  })
163
184
  },
164
- annotate(this: AnyWithProps, key: Context.Key<any, any>, value: any) {
185
+ annotate(this: Top, key: Context.Key<any, any>, value: any) {
165
186
  return makeProto({
166
- identifier: this.identifier,
167
- groups: this.groups,
187
+ ...optionsFromApi(this),
168
188
  annotations: Context.add(this.annotations, key, value)
169
189
  })
170
190
  },
171
- annotateMerge(this: AnyWithProps, annotations: Context.Context<never>) {
191
+ annotateMerge(this: Top, annotations: Context.Context<never>) {
172
192
  return makeProto({
173
- identifier: this.identifier,
174
- groups: this.groups,
193
+ ...optionsFromApi(this),
175
194
  annotations: Context.merge(this.annotations, annotations)
176
195
  })
177
196
  }
178
197
  }
179
198
 
180
- const makeProto = <Id extends string, Groups extends HttpApiGroup.Any>(
199
+ const optionsFromApi = (api: Top) => ({
200
+ identifier: api.identifier,
201
+ groups: api.groups,
202
+ annotations: api.annotations
203
+ })
204
+
205
+ const makeProto = <Id extends string, Groups extends HttpApiGroup.Constraint>(
181
206
  options: {
182
207
  readonly identifier: Id
183
- readonly groups: Record.ReadonlyRecord<string, Groups>
208
+ readonly groups: Record.ReadonlyRecord<string, HttpApiGroup.Constraint>
184
209
  readonly annotations: Context.Context<never>
185
210
  }
186
211
  ): HttpApi<Id, Groups> => {
@@ -219,22 +244,22 @@ export const make = <const Id extends string>(identifier: Id): HttpApi<Id, never
219
244
  * @category reflection
220
245
  * @since 4.0.0
221
246
  */
222
- export const reflect = <Id extends string, Groups extends HttpApiGroup.Any>(
247
+ export const reflect = <Id extends string, Groups extends HttpApiGroup.Constraint>(
223
248
  self: HttpApi<Id, Groups>,
224
249
  options: {
225
250
  readonly predicate?:
226
251
  | Predicate.Predicate<{
227
- readonly endpoint: HttpApiEndpoint.AnyWithProps
228
- readonly group: HttpApiGroup.AnyWithProps
252
+ readonly endpoint: HttpApiEndpoint.Top
253
+ readonly group: HttpApiGroup.Top
229
254
  }>
230
255
  | undefined
231
256
  readonly onGroup: (options: {
232
- readonly group: HttpApiGroup.AnyWithProps
257
+ readonly group: HttpApiGroup.Top
233
258
  readonly mergedAnnotations: Context.Context<never>
234
259
  }) => void
235
260
  readonly onEndpoint: (options: {
236
- readonly group: HttpApiGroup.AnyWithProps
237
- readonly endpoint: HttpApiEndpoint.AnyWithProps
261
+ readonly group: HttpApiGroup.Top
262
+ readonly endpoint: HttpApiEndpoint.Top
238
263
  readonly mergedAnnotations: Context.Context<never>
239
264
  readonly middleware: ReadonlySet<HttpApiMiddleware.AnyService>
240
265
  readonly successes: ReadonlyMap<number, readonly [Schema.Top, ...Array<Schema.Top>]>
@@ -242,14 +267,14 @@ export const reflect = <Id extends string, Groups extends HttpApiGroup.Any>(
242
267
  }) => void
243
268
  }
244
269
  ) => {
245
- const groups = Object.values(self.groups) as any as Array<HttpApiGroup.AnyWithProps>
270
+ const groups = Object.values(self.groups) as any as Array<HttpApiGroup.Top>
246
271
  for (const group of groups) {
247
272
  const groupAnnotations = Context.merge(self.annotations, group.annotations)
248
273
  options.onGroup({
249
274
  group,
250
275
  mergedAnnotations: groupAnnotations
251
276
  })
252
- const endpoints = Object.values(group.endpoints) as Iterable<HttpApiEndpoint.AnyWithProps>
277
+ const endpoints = Object.values(group.endpoints) as Iterable<HttpApiEndpoint.Top>
253
278
  for (const endpoint of endpoints) {
254
279
  if (
255
280
  options.predicate && !options.predicate({