alchemy 2.0.0-beta.44 → 2.0.0-beta.46

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 (443) hide show
  1. package/bin/exec.js +67 -8
  2. package/bin/exec.js.map +1 -1
  3. package/lib/AWS/Lambda/Function.d.ts +17 -0
  4. package/lib/AWS/Lambda/Function.d.ts.map +1 -1
  5. package/lib/AWS/Lambda/Function.js +61 -16
  6. package/lib/AWS/Lambda/Function.js.map +1 -1
  7. package/lib/AWS/Providers.d.ts +2 -1
  8. package/lib/AWS/Providers.d.ts.map +1 -1
  9. package/lib/AWS/Providers.js +3 -1
  10. package/lib/AWS/Providers.js.map +1 -1
  11. package/lib/AlchemyContext.d.ts +0 -1
  12. package/lib/AlchemyContext.d.ts.map +1 -1
  13. package/lib/AlchemyContext.js.map +1 -1
  14. package/lib/Apply.js +17 -1
  15. package/lib/Apply.js.map +1 -1
  16. package/lib/Auth/AuthProvider.d.ts.map +1 -1
  17. package/lib/Auth/AuthProvider.js +24 -6
  18. package/lib/Auth/AuthProvider.js.map +1 -1
  19. package/lib/Auth/Credentials.d.ts.map +1 -1
  20. package/lib/Auth/Credentials.js +3 -3
  21. package/lib/Auth/Credentials.js.map +1 -1
  22. package/lib/Cli/commands/_shared.d.ts +13 -1
  23. package/lib/Cli/commands/_shared.d.ts.map +1 -1
  24. package/lib/Cli/commands/_shared.js +33 -2
  25. package/lib/Cli/commands/_shared.js.map +1 -1
  26. package/lib/Cli/commands/cloudflare.d.ts.map +1 -1
  27. package/lib/Cli/commands/cloudflare.js +5 -1
  28. package/lib/Cli/commands/cloudflare.js.map +1 -1
  29. package/lib/Cli/commands/dev.d.ts.map +1 -1
  30. package/lib/Cli/commands/dev.js +10 -1
  31. package/lib/Cli/commands/dev.js.map +1 -1
  32. package/lib/Cli/commands/login.d.ts.map +1 -1
  33. package/lib/Cli/commands/login.js +19 -5
  34. package/lib/Cli/commands/login.js.map +1 -1
  35. package/lib/Cli/commands/profile.d.ts.map +1 -1
  36. package/lib/Cli/commands/profile.js +7 -27
  37. package/lib/Cli/commands/profile.js.map +1 -1
  38. package/lib/Cli/main.d.ts.map +1 -1
  39. package/lib/Cli/main.js +0 -2
  40. package/lib/Cli/main.js.map +1 -1
  41. package/lib/Cloudflare/AiGateway/AiGateway.d.ts +0 -2
  42. package/lib/Cloudflare/AiGateway/AiGateway.d.ts.map +1 -1
  43. package/lib/Cloudflare/AiGateway/AiGateway.js +2 -4
  44. package/lib/Cloudflare/AiGateway/AiGateway.js.map +1 -1
  45. package/lib/Cloudflare/BrowserRendering/BrowserRendering.d.ts +116 -0
  46. package/lib/Cloudflare/BrowserRendering/BrowserRendering.d.ts.map +1 -0
  47. package/lib/Cloudflare/BrowserRendering/BrowserRendering.js +92 -0
  48. package/lib/Cloudflare/BrowserRendering/BrowserRendering.js.map +1 -0
  49. package/lib/Cloudflare/BrowserRendering/BrowserRenderingBinding.d.ts +55 -0
  50. package/lib/Cloudflare/BrowserRendering/BrowserRenderingBinding.d.ts.map +1 -0
  51. package/lib/Cloudflare/BrowserRendering/BrowserRenderingBinding.js +55 -0
  52. package/lib/Cloudflare/BrowserRendering/BrowserRenderingBinding.js.map +1 -0
  53. package/lib/Cloudflare/BrowserRendering/index.d.ts +3 -0
  54. package/lib/Cloudflare/BrowserRendering/index.d.ts.map +1 -0
  55. package/lib/Cloudflare/BrowserRendering/index.js +3 -0
  56. package/lib/Cloudflare/BrowserRendering/index.js.map +1 -0
  57. package/lib/Cloudflare/Container/Container.d.ts +3 -3
  58. package/lib/Cloudflare/Container/Container.js +3 -3
  59. package/lib/Cloudflare/Container/StartContainer.d.ts.map +1 -1
  60. package/lib/Cloudflare/Container/StartContainer.js.map +1 -1
  61. package/lib/Cloudflare/D1/D1Database.d.ts +1 -0
  62. package/lib/Cloudflare/D1/D1Database.d.ts.map +1 -1
  63. package/lib/Cloudflare/D1/D1Database.js +2 -1
  64. package/lib/Cloudflare/D1/D1Database.js.map +1 -1
  65. package/lib/Cloudflare/D1/D1DatabaseBinding.js +1 -1
  66. package/lib/Cloudflare/D1/D1DatabaseBinding.js.map +1 -1
  67. package/lib/Cloudflare/Fetcher.d.ts.map +1 -1
  68. package/lib/Cloudflare/Fetcher.js +0 -2
  69. package/lib/Cloudflare/Fetcher.js.map +1 -1
  70. package/lib/Cloudflare/Hyperdrive/Hyperdrive.d.ts +1 -0
  71. package/lib/Cloudflare/Hyperdrive/Hyperdrive.d.ts.map +1 -1
  72. package/lib/Cloudflare/Hyperdrive/Hyperdrive.js +3 -0
  73. package/lib/Cloudflare/Hyperdrive/Hyperdrive.js.map +1 -1
  74. package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.d.ts +3 -2
  75. package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.d.ts.map +1 -1
  76. package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.js +32 -33
  77. package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.js.map +1 -1
  78. package/lib/Cloudflare/KV/KVNamespace.d.ts +1 -0
  79. package/lib/Cloudflare/KV/KVNamespace.d.ts.map +1 -1
  80. package/lib/Cloudflare/KV/KVNamespace.js +2 -0
  81. package/lib/Cloudflare/KV/KVNamespace.js.map +1 -1
  82. package/lib/Cloudflare/Local.js +1 -1
  83. package/lib/Cloudflare/Local.js.map +1 -1
  84. package/lib/Cloudflare/Providers.d.ts +2 -1
  85. package/lib/Cloudflare/Providers.d.ts.map +1 -1
  86. package/lib/Cloudflare/Providers.js +25 -17
  87. package/lib/Cloudflare/Providers.js.map +1 -1
  88. package/lib/Cloudflare/Queue/Queue.d.ts +1 -0
  89. package/lib/Cloudflare/Queue/Queue.d.ts.map +1 -1
  90. package/lib/Cloudflare/Queue/Queue.js +1 -0
  91. package/lib/Cloudflare/Queue/Queue.js.map +1 -1
  92. package/lib/Cloudflare/Queue/QueueConsumer.d.ts +2 -1
  93. package/lib/Cloudflare/Queue/QueueConsumer.d.ts.map +1 -1
  94. package/lib/Cloudflare/Queue/QueueConsumer.js +10 -3
  95. package/lib/Cloudflare/Queue/QueueConsumer.js.map +1 -1
  96. package/lib/Cloudflare/Queue/QueueEventSource.d.ts +30 -4
  97. package/lib/Cloudflare/Queue/QueueEventSource.d.ts.map +1 -1
  98. package/lib/Cloudflare/Queue/QueueEventSource.js +22 -1
  99. package/lib/Cloudflare/Queue/QueueEventSource.js.map +1 -1
  100. package/lib/Cloudflare/R2/R2Bucket.d.ts +1 -0
  101. package/lib/Cloudflare/R2/R2Bucket.d.ts.map +1 -1
  102. package/lib/Cloudflare/R2/R2Bucket.js +18 -0
  103. package/lib/Cloudflare/R2/R2Bucket.js.map +1 -1
  104. package/lib/Cloudflare/SecretsStore/Secret.d.ts.map +1 -1
  105. package/lib/Cloudflare/SecretsStore/Secret.js +13 -34
  106. package/lib/Cloudflare/SecretsStore/Secret.js.map +1 -1
  107. package/lib/Cloudflare/SecretsStore/SecretBinding.d.ts +3 -2
  108. package/lib/Cloudflare/SecretsStore/SecretBinding.d.ts.map +1 -1
  109. package/lib/Cloudflare/SecretsStore/SecretBinding.js +3 -2
  110. package/lib/Cloudflare/SecretsStore/SecretBinding.js.map +1 -1
  111. package/lib/Cloudflare/StateStore/Api.d.ts +5 -13
  112. package/lib/Cloudflare/StateStore/Api.d.ts.map +1 -1
  113. package/lib/Cloudflare/StateStore/Api.js +14 -8
  114. package/lib/Cloudflare/StateStore/Api.js.map +1 -1
  115. package/lib/Cloudflare/StateStore/State.d.ts +11 -65
  116. package/lib/Cloudflare/StateStore/State.d.ts.map +1 -1
  117. package/lib/Cloudflare/StateStore/State.js +320 -343
  118. package/lib/Cloudflare/StateStore/State.js.map +1 -1
  119. package/lib/Cloudflare/StateStore/Store.d.ts.map +1 -1
  120. package/lib/Cloudflare/StateStore/Store.js +21 -31
  121. package/lib/Cloudflare/StateStore/Store.js.map +1 -1
  122. package/lib/Cloudflare/Vectorize/VectorizeIndex.d.ts +114 -0
  123. package/lib/Cloudflare/Vectorize/VectorizeIndex.d.ts.map +1 -0
  124. package/lib/Cloudflare/Vectorize/VectorizeIndex.js +157 -0
  125. package/lib/Cloudflare/Vectorize/VectorizeIndex.js.map +1 -0
  126. package/lib/Cloudflare/Vectorize/VectorizeIndexBinding.d.ts +38 -0
  127. package/lib/Cloudflare/Vectorize/VectorizeIndexBinding.d.ts.map +1 -0
  128. package/lib/Cloudflare/Vectorize/VectorizeIndexBinding.js +44 -0
  129. package/lib/Cloudflare/Vectorize/VectorizeIndexBinding.js.map +1 -0
  130. package/lib/Cloudflare/Vectorize/VectorizeMetadataIndex.d.ts +72 -0
  131. package/lib/Cloudflare/Vectorize/VectorizeMetadataIndex.d.ts.map +1 -0
  132. package/lib/Cloudflare/Vectorize/VectorizeMetadataIndex.js +131 -0
  133. package/lib/Cloudflare/Vectorize/VectorizeMetadataIndex.js.map +1 -0
  134. package/lib/Cloudflare/Vectorize/index.d.ts +4 -0
  135. package/lib/Cloudflare/Vectorize/index.d.ts.map +1 -0
  136. package/lib/Cloudflare/Vectorize/index.js +4 -0
  137. package/lib/Cloudflare/Vectorize/index.js.map +1 -0
  138. package/lib/Cloudflare/VpcService/VpcService.d.ts +2 -2
  139. package/lib/Cloudflare/VpcService/VpcService.d.ts.map +1 -1
  140. package/lib/Cloudflare/Website/StaticSite.d.ts +5 -5
  141. package/lib/Cloudflare/Website/StaticSite.d.ts.map +1 -1
  142. package/lib/Cloudflare/Website/StaticSite.js +3 -0
  143. package/lib/Cloudflare/Website/StaticSite.js.map +1 -1
  144. package/lib/Cloudflare/Website/Vite.d.ts +5 -5
  145. package/lib/Cloudflare/Website/Vite.d.ts.map +1 -1
  146. package/lib/Cloudflare/Website/Vite.js.map +1 -1
  147. package/lib/Cloudflare/Workers/Assets.d.ts.map +1 -1
  148. package/lib/Cloudflare/Workers/Assets.js +1 -1
  149. package/lib/Cloudflare/Workers/Assets.js.map +1 -1
  150. package/lib/Cloudflare/Workers/DurableObjectBridge.d.ts.map +1 -1
  151. package/lib/Cloudflare/Workers/DurableObjectBridge.js +4 -2
  152. package/lib/Cloudflare/Workers/DurableObjectBridge.js.map +1 -1
  153. package/lib/Cloudflare/Workers/DurableObjectNamespace.d.ts +183 -6
  154. package/lib/Cloudflare/Workers/DurableObjectNamespace.d.ts.map +1 -1
  155. package/lib/Cloudflare/Workers/DurableObjectNamespace.js +279 -76
  156. package/lib/Cloudflare/Workers/DurableObjectNamespace.js.map +1 -1
  157. package/lib/Cloudflare/Workers/HttpServer.d.ts +6 -4
  158. package/lib/Cloudflare/Workers/HttpServer.d.ts.map +1 -1
  159. package/lib/Cloudflare/Workers/HttpServer.js +20 -15
  160. package/lib/Cloudflare/Workers/HttpServer.js.map +1 -1
  161. package/lib/Cloudflare/Workers/InferEnv.d.ts +3 -2
  162. package/lib/Cloudflare/Workers/InferEnv.d.ts.map +1 -1
  163. package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts +4 -7
  164. package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts.map +1 -1
  165. package/lib/Cloudflare/Workers/LocalWorkerProvider.js +111 -66
  166. package/lib/Cloudflare/Workers/LocalWorkerProvider.js.map +1 -1
  167. package/lib/Cloudflare/Workers/Rpc.d.ts +16 -0
  168. package/lib/Cloudflare/Workers/Rpc.d.ts.map +1 -1
  169. package/lib/Cloudflare/Workers/Rpc.js +22 -0
  170. package/lib/Cloudflare/Workers/Rpc.js.map +1 -1
  171. package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.d.ts +285 -0
  172. package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.d.ts.map +1 -0
  173. package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.js +288 -0
  174. package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.js.map +1 -0
  175. package/lib/Cloudflare/Workers/RpcWorker.d.ts +305 -0
  176. package/lib/Cloudflare/Workers/RpcWorker.d.ts.map +1 -0
  177. package/lib/Cloudflare/Workers/RpcWorker.js +350 -0
  178. package/lib/Cloudflare/Workers/RpcWorker.js.map +1 -0
  179. package/lib/Cloudflare/Workers/Vite.d.ts +1 -1
  180. package/lib/Cloudflare/Workers/Vite.d.ts.map +1 -1
  181. package/lib/Cloudflare/Workers/Vite.js +2 -1
  182. package/lib/Cloudflare/Workers/Vite.js.map +1 -1
  183. package/lib/Cloudflare/Workers/Worker.d.ts +69 -24
  184. package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
  185. package/lib/Cloudflare/Workers/Worker.js +168 -47
  186. package/lib/Cloudflare/Workers/Worker.js.map +1 -1
  187. package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts +1 -1
  188. package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts.map +1 -1
  189. package/lib/Cloudflare/Workers/WorkerAsyncBindings.js +166 -97
  190. package/lib/Cloudflare/Workers/WorkerAsyncBindings.js.map +1 -1
  191. package/lib/Cloudflare/Workers/WorkerBinding.d.ts +12 -23
  192. package/lib/Cloudflare/Workers/WorkerBinding.d.ts.map +1 -1
  193. package/lib/Cloudflare/Workers/WorkerBinding.js +3 -0
  194. package/lib/Cloudflare/Workers/WorkerBinding.js.map +1 -1
  195. package/lib/Cloudflare/Workers/WorkerBridge.d.ts.map +1 -1
  196. package/lib/Cloudflare/Workers/WorkerBridge.js +5 -2
  197. package/lib/Cloudflare/Workers/WorkerBridge.js.map +1 -1
  198. package/lib/Cloudflare/Workers/WorkerBundle.d.ts.map +1 -1
  199. package/lib/Cloudflare/Workers/WorkerBundle.js +4 -1
  200. package/lib/Cloudflare/Workers/WorkerBundle.js.map +1 -1
  201. package/lib/Cloudflare/Workers/WorkerRuntimeContext.d.ts.map +1 -1
  202. package/lib/Cloudflare/Workers/WorkerRuntimeContext.js +9 -10
  203. package/lib/Cloudflare/Workers/WorkerRuntimeContext.js.map +1 -1
  204. package/lib/Cloudflare/Workers/Workflow.d.ts +5 -3
  205. package/lib/Cloudflare/Workers/Workflow.d.ts.map +1 -1
  206. package/lib/Cloudflare/Workers/Workflow.js +19 -1
  207. package/lib/Cloudflare/Workers/Workflow.js.map +1 -1
  208. package/lib/Cloudflare/Workers/index.d.ts +2 -0
  209. package/lib/Cloudflare/Workers/index.d.ts.map +1 -1
  210. package/lib/Cloudflare/Workers/index.js +2 -0
  211. package/lib/Cloudflare/Workers/index.js.map +1 -1
  212. package/lib/Cloudflare/index.d.ts +2 -0
  213. package/lib/Cloudflare/index.d.ts.map +1 -1
  214. package/lib/Cloudflare/index.js +2 -0
  215. package/lib/Cloudflare/index.js.map +1 -1
  216. package/lib/Dependencies.d.ts +10 -0
  217. package/lib/Dependencies.d.ts.map +1 -0
  218. package/lib/Dependencies.js +1 -0
  219. package/lib/Dependencies.js.map +1 -0
  220. package/lib/Deploy.d.ts +2 -1
  221. package/lib/Deploy.d.ts.map +1 -1
  222. package/lib/Deploy.js +2 -2
  223. package/lib/Deploy.js.map +1 -1
  224. package/lib/Diff.d.ts +11 -0
  225. package/lib/Diff.d.ts.map +1 -1
  226. package/lib/Diff.js +11 -0
  227. package/lib/Diff.js.map +1 -1
  228. package/lib/Input.d.ts +2 -1
  229. package/lib/Input.d.ts.map +1 -1
  230. package/lib/KeyPair.d.ts +77 -0
  231. package/lib/KeyPair.d.ts.map +1 -0
  232. package/lib/KeyPair.js +102 -0
  233. package/lib/KeyPair.js.map +1 -0
  234. package/lib/Local/RpcProvider.d.ts +3 -1
  235. package/lib/Local/RpcProvider.d.ts.map +1 -1
  236. package/lib/Local/RpcProvider.js +28 -2
  237. package/lib/Local/RpcProvider.js.map +1 -1
  238. package/lib/Local/RpcServerEnvironment.js +1 -1
  239. package/lib/Local/RpcServerEnvironment.js.map +1 -1
  240. package/lib/Neon/Project.d.ts.map +1 -1
  241. package/lib/Neon/Project.js +14 -3
  242. package/lib/Neon/Project.js.map +1 -1
  243. package/lib/Output.d.ts.map +1 -1
  244. package/lib/Output.js +9 -2
  245. package/lib/Output.js.map +1 -1
  246. package/lib/Phase.d.ts +2 -1
  247. package/lib/Phase.d.ts.map +1 -1
  248. package/lib/Phase.js +6 -1
  249. package/lib/Phase.js.map +1 -1
  250. package/lib/Plan.d.ts.map +1 -1
  251. package/lib/Plan.js +14 -3
  252. package/lib/Plan.js.map +1 -1
  253. package/lib/Platform.d.ts +8 -6
  254. package/lib/Platform.d.ts.map +1 -1
  255. package/lib/Platform.js +33 -3
  256. package/lib/Platform.js.map +1 -1
  257. package/lib/Random.d.ts.map +1 -1
  258. package/lib/Random.js +9 -14
  259. package/lib/Random.js.map +1 -1
  260. package/lib/RuntimeContext.d.ts +21 -1
  261. package/lib/RuntimeContext.d.ts.map +1 -1
  262. package/lib/RuntimeContext.js +12 -0
  263. package/lib/RuntimeContext.js.map +1 -1
  264. package/lib/Stack.d.ts +3 -3
  265. package/lib/Stack.d.ts.map +1 -1
  266. package/lib/Stack.js.map +1 -1
  267. package/lib/State/HttpStateApi.d.ts +2 -2
  268. package/lib/State/HttpStateStore.d.ts +4 -0
  269. package/lib/State/HttpStateStore.d.ts.map +1 -1
  270. package/lib/State/HttpStateStore.js +13 -0
  271. package/lib/State/HttpStateStore.js.map +1 -1
  272. package/lib/State/StateEncoding.d.ts +8 -0
  273. package/lib/State/StateEncoding.d.ts.map +1 -1
  274. package/lib/State/StateEncoding.js +55 -5
  275. package/lib/State/StateEncoding.js.map +1 -1
  276. package/lib/Test/Bun.d.ts.map +1 -1
  277. package/lib/Test/Bun.js +0 -2
  278. package/lib/Test/Bun.js.map +1 -1
  279. package/lib/Test/Vitest.d.ts.map +1 -1
  280. package/lib/Test/Vitest.js +0 -2
  281. package/lib/Test/Vitest.js.map +1 -1
  282. package/lib/Util/Duration.d.ts +14 -0
  283. package/lib/Util/Duration.d.ts.map +1 -0
  284. package/lib/Util/Duration.js +18 -0
  285. package/lib/Util/Duration.js.map +1 -0
  286. package/lib/Util/index.d.ts +0 -6
  287. package/lib/Util/index.d.ts.map +1 -1
  288. package/lib/Util/index.js +0 -6
  289. package/lib/Util/index.js.map +1 -1
  290. package/lib/Util/poll.d.ts +30 -0
  291. package/lib/Util/poll.d.ts.map +1 -0
  292. package/lib/Util/poll.js +26 -0
  293. package/lib/Util/poll.js.map +1 -0
  294. package/lib/Util/types.d.ts +3 -1
  295. package/lib/Util/types.d.ts.map +1 -1
  296. package/lib/Util/types.js +5 -1
  297. package/lib/Util/types.js.map +1 -1
  298. package/lib/index.d.ts +2 -3
  299. package/lib/index.d.ts.map +1 -1
  300. package/lib/index.js +1 -3
  301. package/lib/index.js.map +1 -1
  302. package/lib/tsconfig.test.tsbuildinfo +1 -1
  303. package/package.json +20 -19
  304. package/src/AWS/Lambda/Function.ts +87 -34
  305. package/src/AWS/Providers.ts +3 -0
  306. package/src/AlchemyContext.ts +0 -1
  307. package/src/Apply.ts +18 -1
  308. package/src/Auth/AuthProvider.ts +25 -5
  309. package/src/Auth/Credentials.ts +8 -7
  310. package/src/Cli/commands/_shared.ts +47 -4
  311. package/src/Cli/commands/cloudflare.ts +5 -3
  312. package/src/Cli/commands/dev.ts +13 -1
  313. package/src/Cli/commands/login.ts +20 -4
  314. package/src/Cli/commands/profile.ts +24 -34
  315. package/src/Cli/main.ts +0 -3
  316. package/src/Cloudflare/AiGateway/AiGateway.ts +2 -6
  317. package/src/Cloudflare/BrowserRendering/BrowserRendering.ts +132 -0
  318. package/src/Cloudflare/BrowserRendering/BrowserRenderingBinding.ts +137 -0
  319. package/src/Cloudflare/BrowserRendering/index.ts +11 -0
  320. package/src/Cloudflare/Container/Container.ts +3 -3
  321. package/src/Cloudflare/Container/StartContainer.ts +1 -2
  322. package/src/Cloudflare/D1/D1Database.ts +4 -1
  323. package/src/Cloudflare/D1/D1DatabaseBinding.ts +1 -1
  324. package/src/Cloudflare/Fetcher.ts +0 -2
  325. package/src/Cloudflare/Hyperdrive/Hyperdrive.ts +5 -0
  326. package/src/Cloudflare/Hyperdrive/HyperdriveBinding.ts +41 -43
  327. package/src/Cloudflare/KV/KVNamespace.ts +4 -0
  328. package/src/Cloudflare/Local.ts +1 -1
  329. package/src/Cloudflare/Providers.ts +32 -16
  330. package/src/Cloudflare/Queue/Queue.ts +3 -0
  331. package/src/Cloudflare/Queue/QueueConsumer.ts +21 -8
  332. package/src/Cloudflare/Queue/QueueEventSource.ts +33 -5
  333. package/src/Cloudflare/R2/R2Bucket.ts +26 -0
  334. package/src/Cloudflare/SecretsStore/Secret.ts +14 -41
  335. package/src/Cloudflare/SecretsStore/SecretBinding.ts +11 -11
  336. package/src/Cloudflare/StateStore/Api.ts +15 -15
  337. package/src/Cloudflare/StateStore/State.ts +468 -468
  338. package/src/Cloudflare/StateStore/Store.ts +27 -37
  339. package/src/Cloudflare/Vectorize/VectorizeIndex.ts +261 -0
  340. package/src/Cloudflare/Vectorize/VectorizeIndexBinding.ts +103 -0
  341. package/src/Cloudflare/Vectorize/VectorizeMetadataIndex.ts +208 -0
  342. package/src/Cloudflare/Vectorize/index.ts +3 -0
  343. package/src/Cloudflare/VpcService/VpcService.ts +2 -2
  344. package/src/Cloudflare/Website/StaticSite.ts +8 -10
  345. package/src/Cloudflare/Website/Vite.ts +4 -7
  346. package/src/Cloudflare/Workers/Assets.ts +1 -1
  347. package/src/Cloudflare/Workers/DurableObjectBridge.ts +7 -4
  348. package/src/Cloudflare/Workers/DurableObjectNamespace.ts +380 -121
  349. package/src/Cloudflare/Workers/HttpServer.ts +31 -25
  350. package/src/Cloudflare/Workers/InferEnv.ts +15 -8
  351. package/src/Cloudflare/Workers/LocalWorkerProvider.ts +139 -78
  352. package/src/Cloudflare/Workers/Rpc.ts +50 -0
  353. package/src/Cloudflare/Workers/RpcDurableObjectNamespace.ts +502 -0
  354. package/src/Cloudflare/Workers/RpcWorker.ts +562 -0
  355. package/src/Cloudflare/Workers/Vite.ts +2 -0
  356. package/src/Cloudflare/Workers/Worker.ts +274 -93
  357. package/src/Cloudflare/Workers/WorkerAsyncBindings.ts +165 -103
  358. package/src/Cloudflare/Workers/WorkerBinding.ts +12 -0
  359. package/src/Cloudflare/Workers/WorkerBridge.ts +7 -4
  360. package/src/Cloudflare/Workers/WorkerBundle.ts +4 -1
  361. package/src/Cloudflare/Workers/WorkerRuntimeContext.ts +8 -15
  362. package/src/Cloudflare/Workers/Workflow.ts +22 -3
  363. package/src/Cloudflare/Workers/index.ts +2 -0
  364. package/src/Cloudflare/index.ts +2 -0
  365. package/src/Dependencies.ts +10 -0
  366. package/src/Deploy.ts +3 -1
  367. package/src/Diff.ts +13 -0
  368. package/src/Input.ts +2 -0
  369. package/src/KeyPair.ts +146 -0
  370. package/src/Local/RpcProvider.ts +45 -1
  371. package/src/Local/RpcServerEnvironment.ts +1 -1
  372. package/src/Neon/Project.ts +16 -3
  373. package/src/Output.ts +8 -2
  374. package/src/Phase.ts +8 -0
  375. package/src/Plan.ts +16 -3
  376. package/src/Platform.ts +74 -27
  377. package/src/Random.ts +22 -27
  378. package/src/RuntimeContext.ts +23 -1
  379. package/src/Stack.ts +3 -3
  380. package/src/State/HttpStateStore.ts +28 -0
  381. package/src/State/StateEncoding.ts +58 -7
  382. package/src/Test/Bun.ts +0 -3
  383. package/src/Test/Vitest.ts +0 -3
  384. package/src/Util/Duration.ts +21 -0
  385. package/src/Util/index.ts +0 -6
  386. package/src/Util/poll.ts +47 -0
  387. package/src/Util/types.ts +9 -2
  388. package/src/index.ts +2 -3
  389. package/lib/Secret.d.ts +0 -50
  390. package/lib/Secret.d.ts.map +0 -1
  391. package/lib/Secret.js +0 -23
  392. package/lib/Secret.js.map +0 -1
  393. package/lib/Trait.d.ts +0 -43
  394. package/lib/Trait.d.ts.map +0 -1
  395. package/lib/Trait.js +0 -17
  396. package/lib/Trait.js.map +0 -1
  397. package/lib/Util/LocalhostDns.d.ts +0 -23
  398. package/lib/Util/LocalhostDns.d.ts.map +0 -1
  399. package/lib/Util/LocalhostDns.js +0 -46
  400. package/lib/Util/LocalhostDns.js.map +0 -1
  401. package/lib/Util/assert-never.d.ts +0 -12
  402. package/lib/Util/assert-never.d.ts.map +0 -1
  403. package/lib/Util/assert-never.js +0 -11
  404. package/lib/Util/assert-never.js.map +0 -1
  405. package/lib/Util/class.d.ts +0 -3
  406. package/lib/Util/class.d.ts.map +0 -1
  407. package/lib/Util/class.js +0 -1
  408. package/lib/Util/class.js.map +0 -1
  409. package/lib/Util/ignore.d.ts +0 -40
  410. package/lib/Util/ignore.d.ts.map +0 -1
  411. package/lib/Util/ignore.js +0 -591
  412. package/lib/Util/ignore.js.map +0 -1
  413. package/lib/Util/instance.d.ts +0 -4
  414. package/lib/Util/instance.d.ts.map +0 -1
  415. package/lib/Util/instance.js +0 -1
  416. package/lib/Util/instance.js.map +0 -1
  417. package/lib/Util/pointer.d.ts +0 -5
  418. package/lib/Util/pointer.d.ts.map +0 -1
  419. package/lib/Util/pointer.js +0 -1
  420. package/lib/Util/pointer.js.map +0 -1
  421. package/lib/Util/schema-to-type.d.ts +0 -42
  422. package/lib/Util/schema-to-type.d.ts.map +0 -1
  423. package/lib/Util/schema-to-type.js +0 -364
  424. package/lib/Util/schema-to-type.js.map +0 -1
  425. package/lib/Util/todo.d.ts +0 -3
  426. package/lib/Util/todo.d.ts.map +0 -1
  427. package/lib/Util/todo.js +0 -3
  428. package/lib/Util/todo.js.map +0 -1
  429. package/lib/Variable.d.ts +0 -29
  430. package/lib/Variable.d.ts.map +0 -1
  431. package/lib/Variable.js +0 -9
  432. package/lib/Variable.js.map +0 -1
  433. package/src/Secret.ts +0 -87
  434. package/src/Trait.ts +0 -105
  435. package/src/Util/LocalhostDns.ts +0 -52
  436. package/src/Util/assert-never.ts +0 -18
  437. package/src/Util/class.ts +0 -7
  438. package/src/Util/ignore.ts +0 -815
  439. package/src/Util/instance.ts +0 -9
  440. package/src/Util/pointer.ts +0 -5
  441. package/src/Util/schema-to-type.ts +0 -456
  442. package/src/Util/todo.ts +0 -4
  443. package/src/Variable.ts +0 -44
@@ -0,0 +1,502 @@
1
+ import * as Context from "effect/Context";
2
+ import * as Effect from "effect/Effect";
3
+ import type * as Layer from "effect/Layer";
4
+ import type { Rpc, RpcGroup } from "effect/unstable/rpc";
5
+ import * as RpcClient from "effect/unstable/rpc/RpcClient";
6
+ import * as RpcClientError from "effect/unstable/rpc/RpcClientError";
7
+ import type { Dependencies } from "../../Dependencies.ts";
8
+ import type { HttpEffect } from "../../Http.ts";
9
+ import type { Input } from "../../Input.ts";
10
+ import { effectClass, taggedFunction } from "../../Util/effect.ts";
11
+ import {
12
+ DurableObjectNamespace,
13
+ type DurableObjectNamespaceLike,
14
+ type DurableObjectNamespaceProps,
15
+ type DurableObjectNamespace as DurableObjectNamespaceType,
16
+ type DurableObjectServices,
17
+ } from "./DurableObjectNamespace.ts";
18
+ import type { DurableObjectState } from "./DurableObjectState.ts";
19
+ import { bindEffectRpc } from "./Rpc.ts";
20
+ import type { Worker as WorkerService } from "./Worker.ts";
21
+
22
+ /**
23
+ * The runtime value bound to a typed rpc Durable Object namespace.
24
+ * Same shape as the underlying {@link DurableObjectNamespaceType} for
25
+ * binding metadata (name, namespaceId, kind), but `getByName(id)`
26
+ * returns a typed Effect `RpcClient` over the rpc server living on
27
+ * the DO's `fetch` handler.
28
+ */
29
+ export interface RpcDurableObjectNamespace<
30
+ Self,
31
+ Rpcs extends Rpc.Any = Rpc.Any,
32
+ > extends Omit<
33
+ DurableObjectNamespaceType<{ fetch: HttpEffect<DurableObjectState> }>,
34
+ "getByName" | "get" | "Shape"
35
+ > {
36
+ /** @internal phantom — keeps `Self` reachable through the inferred type */
37
+ Self?: Self;
38
+ readonly getByName: (
39
+ id: string,
40
+ ) => Effect.Effect<
41
+ RpcClient.RpcClient<Rpcs, RpcClientError.RpcClientError>,
42
+ never,
43
+ Rpc.MiddlewareClient<Rpcs>
44
+ >;
45
+ }
46
+
47
+ // Context tag carrying the surrounding `RpcDurableObjectNamespace`
48
+ // inside an rpc DO impl. Yield it from within a DO handler to refer
49
+ // back to the surrounding namespace (e.g. to fan a call out to
50
+ // sibling instances). Documented as part of the main
51
+ // `RpcDurableObjectNamespace` JSDoc below.
52
+ export class RpcDurableObjectNamespaceScope extends Context.Service<
53
+ RpcDurableObjectNamespaceScope,
54
+ RpcDurableObjectNamespace<unknown>
55
+ >()("Cloudflare.RpcDurableObjectNamespace") {}
56
+
57
+ export interface RpcDurableObjectNamespaceClass extends Effect.Effect<
58
+ RpcDurableObjectNamespace<unknown>,
59
+ never,
60
+ RpcDurableObjectNamespaceScope
61
+ > {
62
+ /**
63
+ * Class-based forms: `class Counter extends RpcDurableObjectNamespace<Counter>()(...)`.
64
+ *
65
+ * Modular (no impl):
66
+ * ```ts
67
+ * class Counter extends RpcDurableObjectNamespace<Counter>()(
68
+ * "Counter",
69
+ * { schema: CounterRpcs },
70
+ * ) {}
71
+ * export const CounterLive = Counter.make(/* impl *\/);
72
+ * ```
73
+ * Inline impl:
74
+ * ```ts
75
+ * class Counter extends RpcDurableObjectNamespace<Counter>()(
76
+ * "Counter",
77
+ * { schema: CounterRpcs },
78
+ * Effect.gen(function* () { ... }),
79
+ * ) {}
80
+ * ```
81
+ */
82
+ <Self>(): {
83
+ /** Modular form: separate `static make(impl)` + `static from(scriptName | Worker)`. */
84
+ <Rpcs extends Rpc.Any>(
85
+ name: string,
86
+ props: { readonly schema: RpcGroup.RpcGroup<Rpcs> },
87
+ ): Effect.Effect<
88
+ RpcDurableObjectNamespace<Self, Rpcs>,
89
+ never,
90
+ WorkerService | Self
91
+ > & {
92
+ new (_: never): {};
93
+ from(
94
+ scriptName: Input<string>,
95
+ ): Effect.Effect<
96
+ RpcDurableObjectNamespace<Self, Rpcs>,
97
+ never,
98
+ WorkerService
99
+ >;
100
+ from<Req = never>(
101
+ worker:
102
+ | Dependencies<Self>
103
+ | Effect.Effect<Dependencies<Self>, never, Req>,
104
+ ): Effect.Effect<
105
+ RpcDurableObjectNamespace<Self, Rpcs>,
106
+ never,
107
+ WorkerService | Req
108
+ >;
109
+ make<InnerR = never, InitReq = never>(
110
+ impl: Effect.Effect<
111
+ Effect.Effect<
112
+ Effect.Effect<HttpEffect<InnerR>, never, InnerR>,
113
+ never,
114
+ DurableObjectServices
115
+ >,
116
+ never,
117
+ InitReq
118
+ >,
119
+ ): Layer.Layer<
120
+ Self,
121
+ never,
122
+ WorkerService | Exclude<InitReq | InnerR, DurableObjectServices>
123
+ >;
124
+ };
125
+ /** Inline-impl form. */
126
+ <Rpcs extends Rpc.Any, InnerR = never, InitReq = never>(
127
+ name: string,
128
+ props: { readonly schema: RpcGroup.RpcGroup<Rpcs> },
129
+ impl: Effect.Effect<
130
+ Effect.Effect<
131
+ Effect.Effect<HttpEffect<InnerR>, never, InnerR>,
132
+ never,
133
+ DurableObjectServices
134
+ >,
135
+ never,
136
+ InitReq
137
+ >,
138
+ ): Effect.Effect<
139
+ RpcDurableObjectNamespace<Self, Rpcs>,
140
+ never,
141
+ WorkerService | Exclude<InitReq | InnerR, DurableObjectServices>
142
+ > & {
143
+ new (_: never): {};
144
+ };
145
+ };
146
+ /** Descriptor-only form, for `worker.bind` declarations */
147
+ <Rpcs extends Rpc.Any>(
148
+ name: string,
149
+ props: {
150
+ readonly schema: RpcGroup.RpcGroup<Rpcs>;
151
+ } & Partial<DurableObjectNamespaceProps>,
152
+ ): DurableObjectNamespaceLike<{ fetch: HttpEffect<DurableObjectState> }>;
153
+ /** Bare form: `(name, { schema }, impl)` */
154
+ <Rpcs extends Rpc.Any, InnerR = never, InitReq = never>(
155
+ name: string,
156
+ props: { readonly schema: RpcGroup.RpcGroup<Rpcs> },
157
+ impl: Effect.Effect<
158
+ Effect.Effect<
159
+ Effect.Effect<HttpEffect<InnerR>, never, InnerR>,
160
+ never,
161
+ DurableObjectServices
162
+ >,
163
+ never,
164
+ InitReq
165
+ >,
166
+ ): Effect.Effect<
167
+ RpcDurableObjectNamespace<unknown, Rpcs>,
168
+ never,
169
+ WorkerService | Exclude<InitReq | InnerR, DurableObjectServices>
170
+ >;
171
+ }
172
+
173
+ /**
174
+ * `RpcDurableObjectNamespace` is sugar over {@link DurableObjectNamespace}
175
+ * for Durable Objects whose surface is a typed Effect `RpcGroup`. The
176
+ * DO serves an `RpcServer.toHttpEffect(group)` on its own `fetch`, and
177
+ * consumers see `namespace.getByName(id)` as a typed `RpcClient`
178
+ * directly — no manual client wiring.
179
+ *
180
+ * Use this over alchemy's built-in DO method bridge whenever values
181
+ * crossing the DO boundary contain `Schema.Class` instances. The
182
+ * built-in bridge `JSON.stringify`s every method return value, which
183
+ * strips class identity (e.g. an `effect/ai` `Response.Usage` instance
184
+ * becomes a plain struct on the consumer side). With
185
+ * `RpcDurableObjectNamespace`, both ends go through the same
186
+ * `RpcSerialization` codec, so `Schema.decode` reconstructs class
187
+ * instances correctly.
188
+ *
189
+ * @resource
190
+ *
191
+ * @section Defining the rpc group
192
+ * @example DO-scoped rpc schemas
193
+ * The DO instance *is* the session, so the group payloads typically
194
+ * don't include any per-session identifier — only the per-call inputs.
195
+ * ```typescript
196
+ * import * as Schema from "effect/Schema";
197
+ * import { Rpc, RpcGroup } from "effect/unstable/rpc";
198
+ *
199
+ * const setTitle = Rpc.make("setTitle", {
200
+ * success: Schema.Void,
201
+ * payload: { title: Schema.String },
202
+ * });
203
+ *
204
+ * const getTitle = Rpc.make("getTitle", {
205
+ * success: Schema.String,
206
+ * payload: {},
207
+ * });
208
+ *
209
+ * export class CounterRpcs extends RpcGroup.make(setTitle, getTitle) {}
210
+ * ```
211
+ *
212
+ * @section Implementing the Durable Object
213
+ * @example Class form (recommended)
214
+ * Mirrors `Cloudflare.DurableObjectNamespace<Self>()(...)` — same
215
+ * outer/inner Effect pattern. The outer Effect resolves shared deps;
216
+ * the per-instance inner Effect returns the
217
+ * `RpcServer.toHttpEffect(schema)`-piped Effect directly.
218
+ * ```typescript
219
+ * import * as Cloudflare from "alchemy/Cloudflare";
220
+ * import * as Effect from "effect/Effect";
221
+ * import * as Layer from "effect/Layer";
222
+ * import { RpcSerialization, RpcServer } from "effect/unstable/rpc";
223
+ * import { CounterRpcs } from "./rpcs.ts";
224
+ *
225
+ * export default class Counter extends Cloudflare.RpcDurableObjectNamespace<Counter>()(
226
+ * "Counter",
227
+ * { schema: CounterRpcs },
228
+ * Effect.gen(function* () {
229
+ * // outer init: shared deps for all instances
230
+ * return Effect.gen(function* () {
231
+ * // per-instance init: state + handlers
232
+ * const state = yield* Cloudflare.DurableObjectState;
233
+ * const handlers = CounterRpcs.toLayer({
234
+ * setTitle: ({ title }) => state.storage.put("title", title),
235
+ * getTitle: () =>
236
+ * Effect.map(state.storage.get<string>("title"), (t) => t ?? ""),
237
+ * });
238
+ * return RpcServer.toHttpEffect(CounterRpcs).pipe(
239
+ * Effect.provide(Layer.mergeAll(handlers, RpcSerialization.layerNdjson)),
240
+ * );
241
+ * });
242
+ * }),
243
+ * ) {}
244
+ * ```
245
+ *
246
+ * @section Calling the DO from a Worker
247
+ * @example Typed rpc client at the call site
248
+ * `yield* Counter` resolves to a value whose `getByName(id)` returns
249
+ * an `Effect<RpcClient<CounterRpcs>>`. Each rpc method is a typed
250
+ * Effect/Stream factory — no `RpcClient.make` setup needed. Yield
251
+ * the client inside a per-request `Effect.scoped` handler so it's
252
+ * freed with the request.
253
+ * ```typescript
254
+ * import Counter from "./counter.ts";
255
+ *
256
+ * Effect.gen(function* () {
257
+ * const counters = yield* Counter;
258
+ * const client = yield* counters.getByName("global");
259
+ * yield* client.setTitle({ title: "Hello" });
260
+ * const title = yield* client.getTitle({});
261
+ * return title;
262
+ * }).pipe(Effect.scoped);
263
+ * ```
264
+ *
265
+ * @section Modular form: separate the class from its runtime
266
+ * @example Class declaration with no impl + `static make(impl)`
267
+ * The inline class form above bundles the runtime into the class
268
+ * declaration. The two-arg form `(name, { schema })` declares the
269
+ * class as a pure tagged identifier; provide the runtime separately
270
+ * via `Class.make(impl)`. Consumer Workers can import the class for
271
+ * binding (`Counter.from(HostWorker)`) without pulling the runtime
272
+ * into their bundle.
273
+ * ```typescript
274
+ * import * as Cloudflare from "alchemy/Cloudflare";
275
+ * import * as Effect from "effect/Effect";
276
+ * import * as Layer from "effect/Layer";
277
+ * import { RpcSerialization, RpcServer } from "effect/unstable/rpc";
278
+ * import { CounterRpcs } from "./rpcs.ts";
279
+ *
280
+ * export class Counter extends Cloudflare.RpcDurableObjectNamespace<Counter>()(
281
+ * "Counter",
282
+ * { schema: CounterRpcs },
283
+ * ) {}
284
+ *
285
+ * // Only the host script imports this default export.
286
+ * export default Counter.make(
287
+ * Effect.gen(function* () {
288
+ * return Effect.gen(function* () {
289
+ * const state = yield* Cloudflare.DurableObjectState;
290
+ * const handlers = CounterRpcs.toLayer({
291
+ * setTitle: ({ title }) => state.storage.put("title", title),
292
+ * getTitle: () =>
293
+ * Effect.map(state.storage.get<string>("title"), (t) => t ?? ""),
294
+ * });
295
+ * return RpcServer.toHttpEffect(CounterRpcs).pipe(
296
+ * Effect.provide(Layer.mergeAll(handlers, RpcSerialization.layerNdjson)),
297
+ * );
298
+ * });
299
+ * }),
300
+ * );
301
+ * ```
302
+ *
303
+ * @section Cross-script binding via `Counter.from(Worker)`
304
+ * @example Hosting on WorkerA, binding from WorkerB
305
+ * The host Worker declares `Counter` in its `Deps` (third type
306
+ * arg of `Worker<Self, Bindings, Deps>` or second of
307
+ * `RpcWorker<Self, Deps>`) and provides `CounterLive`. Any other
308
+ * Worker uses `Counter.from(HostWorker)` to bind to the same DO
309
+ * instances — writes through `HostWorker.getByName(name)` are
310
+ * visible from `Counter.from(HostWorker).getByName(name)`.
311
+ * ```typescript
312
+ * // host worker (declares + provides Counter)
313
+ * import CounterLive, { Counter } from "./counter.ts";
314
+ *
315
+ * export class WorkerA extends Cloudflare.Worker<WorkerA, {}, Counter>()(
316
+ * "WorkerA",
317
+ * { main: import.meta.filename },
318
+ * ) {}
319
+ *
320
+ * export default WorkerA.make(
321
+ * Effect.gen(function* () {
322
+ * const counters = yield* Counter; // local host binding
323
+ * // ... fetch handler ...
324
+ * }).pipe(Effect.provide(CounterLive)),
325
+ * );
326
+ *
327
+ * // consumer worker (binds via .from)
328
+ * export default class WorkerB extends Cloudflare.Worker<WorkerB>()(
329
+ * "WorkerB",
330
+ * { main: import.meta.filename },
331
+ * Effect.gen(function* () {
332
+ * const counters = yield* Counter.from(WorkerA);
333
+ * return {
334
+ * fetch: Effect.gen(function* () {
335
+ * const client = yield* counters.getByName("shared");
336
+ * yield* client.setTitle({ title: "via WorkerB" });
337
+ * return HttpServerResponse.text("ok");
338
+ * }).pipe(Effect.scoped),
339
+ * };
340
+ * }),
341
+ * ) {}
342
+ * ```
343
+ *
344
+ * @example Self-hosted isolated namespace
345
+ * A Worker that declares `Counter` in its own `Deps` and provides
346
+ * `CounterLive` hosts its own isolated namespace — instances under
347
+ * it are separate from any other host's. Use `Counter.from(Self)`
348
+ * inside the host to be explicit about which script's namespace
349
+ * you're binding to.
350
+ * ```typescript
351
+ * export class WorkerC extends Cloudflare.Worker<WorkerC, {}, Counter>()(
352
+ * "WorkerC",
353
+ * { main: import.meta.filename },
354
+ * ) {}
355
+ *
356
+ * export default WorkerC.make(
357
+ * Effect.gen(function* () {
358
+ * const counters = yield* Counter.from(WorkerC); // explicit self
359
+ * // ... fetch handler ...
360
+ * }).pipe(Effect.provide(CounterLive)),
361
+ * );
362
+ * ```
363
+ *
364
+ * @section Yielding the surrounding namespace from inside a DO
365
+ * @example `yield* RpcDurableObjectNamespace` inside the DO impl
366
+ * Lets a DO instance refer to its own namespace — e.g. to fan a call
367
+ * out to sibling instances. Mirrors `yield* DurableObjectNamespace`
368
+ * on the regular `DurableObjectNamespace`.
369
+ * ```typescript
370
+ * Effect.gen(function* () {
371
+ * const self = yield* Cloudflare.RpcDurableObjectNamespace;
372
+ * const peer = yield* self.getByName("peer-1");
373
+ * yield* peer.setTitle({ title: "Sibling call" });
374
+ * }).pipe(Effect.scoped);
375
+ * ```
376
+ */
377
+ export const RpcDurableObjectNamespace: RpcDurableObjectNamespaceClass =
378
+ taggedFunction(RpcDurableObjectNamespaceScope, (...args: any[]) => {
379
+ // Class-form: zero args returns the inner builder. Inner-arg arity
380
+ // distinguishes modular (`(name, { schema })`, no impl — `static
381
+ // from`/`static make` provide the runtime) from inline-impl
382
+ // (`(name, { schema }, impl)`).
383
+ if (args.length === 0) {
384
+ return (...inner: any[]) => {
385
+ if (inner.length === 2) {
386
+ const [name, props] = inner as [
387
+ string,
388
+ { readonly schema: RpcGroup.RpcGroup<any> },
389
+ ];
390
+ return buildModular(name, props.schema);
391
+ }
392
+ const [name, props, impl] = inner as [
393
+ string,
394
+ { readonly schema: RpcGroup.RpcGroup<any> },
395
+ Effect.Effect<Effect.Effect<any>>,
396
+ ];
397
+ return build(name, props, impl);
398
+ };
399
+ }
400
+ // Descriptor-only form: `(name, { schema })` — no impl.
401
+ if (args.length === 2) {
402
+ const [name, props] = args as [
403
+ string,
404
+ {
405
+ readonly schema: RpcGroup.RpcGroup<any>;
406
+ } & Partial<DurableObjectNamespaceProps>,
407
+ ];
408
+ return {
409
+ kind: "Cloudflare.DurableObjectNamespace" as const,
410
+ name,
411
+ className: props?.className,
412
+ } satisfies DurableObjectNamespaceLike<any>;
413
+ }
414
+ // Bare form: `(name, { schema }, impl)`.
415
+ const [name, props, impl] = args as [
416
+ string,
417
+ { readonly schema: RpcGroup.RpcGroup<any> },
418
+ Effect.Effect<Effect.Effect<any>>,
419
+ ];
420
+ return build(name, props, impl);
421
+ }) as any;
422
+
423
+ // Wrap a raw `DurableObjectNamespace` so its `getByName` returns a typed
424
+ // Effect `RpcClient` (via `bindEffectRpc`) instead of the built-in
425
+ // method-bridge stub. Used in every branch that produces a yieldable
426
+ // `RpcDurableObjectNamespace` value.
427
+ const rpcWrap = (
428
+ rawNs: DurableObjectNamespaceType<any>,
429
+ schema: RpcGroup.RpcGroup<any>,
430
+ ): RpcDurableObjectNamespace<any> => {
431
+ const rpcView = bindEffectRpc(rawNs as any, schema);
432
+ return Object.assign({}, rawNs, {
433
+ getByName: rpcView.getByName,
434
+ }) as unknown as RpcDurableObjectNamespace<any>;
435
+ };
436
+
437
+ // The user's inner Effect resolves to `Effect<HttpEffect>`; the
438
+ // underlying `DurableObjectNamespace` expects `Effect<{ fetch:
439
+ // HttpEffect }>` (a `DurableObjectShape`). Map through both layers to
440
+ // box the http effect in the `{ fetch }` shape.
441
+ const wrapImpl = (impl: Effect.Effect<Effect.Effect<any>>) =>
442
+ impl.pipe(
443
+ Effect.map((inner) =>
444
+ inner.pipe(Effect.map((fetch: HttpEffect<any>) => ({ fetch }))),
445
+ ),
446
+ ) as Effect.Effect<Effect.Effect<any>>;
447
+
448
+ const build = (
449
+ name: string,
450
+ props: { readonly schema: RpcGroup.RpcGroup<any> },
451
+ impl: Effect.Effect<Effect.Effect<any>>,
452
+ ) => {
453
+ // Inline-impl class form: delegate to `DurableObjectNamespace`'s
454
+ // inline class form, then expose the rpc-wrapped view at yield
455
+ // time. No `static from`/`static make` because the impl is provided
456
+ // eagerly here (consumers wanting cross-script binding use the
457
+ // modular form below).
458
+ const underlying = (DurableObjectNamespace as any)()(name, wrapImpl(impl));
459
+ const underlyingEff: Effect.Effect<
460
+ DurableObjectNamespaceType<any>,
461
+ never,
462
+ any
463
+ > = (underlying as { asEffect(): Effect.Effect<any, never, any> }).asEffect();
464
+ const rpcBound = underlyingEff.pipe(
465
+ Effect.map((rawNs) => rpcWrap(rawNs, props.schema)),
466
+ ) as unknown as Effect.Effect<RpcDurableObjectNamespace<any>>;
467
+ return effectClass(rpcBound);
468
+ };
469
+
470
+ const buildModular = (name: string, schema: RpcGroup.RpcGroup<any>) => {
471
+ // Delegate to `DurableObjectNamespace<Self>()(name)` (no-impl class
472
+ // form) so we inherit its Self-tag plumbing for free:
473
+ // - yielding the class resolves to the live namespace via the tag
474
+ // (populated by `static make(impl)`'s Layer)
475
+ // - `static from(scriptName | Worker)` registers a foreign-script
476
+ // binding on the surrounding worker and yields a fresh handle
477
+ // We just rpc-wrap each output so consumers see a typed `getByName`.
478
+ const Underlying: any = (DurableObjectNamespace as any)()(name);
479
+ const underlyingEff: Effect.Effect<
480
+ DurableObjectNamespaceType<any>,
481
+ never,
482
+ any
483
+ > = (Underlying as { asEffect(): Effect.Effect<any, never, any> }).asEffect();
484
+
485
+ return class extends effectClass(
486
+ underlyingEff.pipe(
487
+ Effect.map((rawNs) => rpcWrap(rawNs, schema)),
488
+ ) as unknown as Effect.Effect<RpcDurableObjectNamespace<any>>,
489
+ ) {
490
+ static make = (impl: Effect.Effect<Effect.Effect<any>>) =>
491
+ Underlying.make(wrapImpl(impl));
492
+
493
+ static from = (
494
+ worker: string | object | Effect.Effect<any, any, any>,
495
+ ): Effect.Effect<RpcDurableObjectNamespace<any>, any, any> =>
496
+ Underlying.from(worker).pipe(
497
+ Effect.map((rawNs: DurableObjectNamespaceType<any>) =>
498
+ rpcWrap(rawNs, schema),
499
+ ),
500
+ );
501
+ };
502
+ };