alchemy 2.0.0-beta.44 → 2.0.0-beta.45

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 (404) 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/Apply.js +17 -1
  12. package/lib/Apply.js.map +1 -1
  13. package/lib/Auth/AuthProvider.d.ts.map +1 -1
  14. package/lib/Auth/AuthProvider.js +24 -6
  15. package/lib/Auth/AuthProvider.js.map +1 -1
  16. package/lib/Auth/Credentials.d.ts.map +1 -1
  17. package/lib/Auth/Credentials.js +3 -3
  18. package/lib/Auth/Credentials.js.map +1 -1
  19. package/lib/Cli/commands/_shared.d.ts +13 -1
  20. package/lib/Cli/commands/_shared.d.ts.map +1 -1
  21. package/lib/Cli/commands/_shared.js +33 -2
  22. package/lib/Cli/commands/_shared.js.map +1 -1
  23. package/lib/Cli/commands/dev.d.ts.map +1 -1
  24. package/lib/Cli/commands/dev.js +10 -1
  25. package/lib/Cli/commands/dev.js.map +1 -1
  26. package/lib/Cli/commands/login.d.ts.map +1 -1
  27. package/lib/Cli/commands/login.js +19 -5
  28. package/lib/Cli/commands/login.js.map +1 -1
  29. package/lib/Cli/commands/profile.d.ts.map +1 -1
  30. package/lib/Cli/commands/profile.js +7 -27
  31. package/lib/Cli/commands/profile.js.map +1 -1
  32. package/lib/Cli/main.d.ts.map +1 -1
  33. package/lib/Cli/main.js +0 -2
  34. package/lib/Cli/main.js.map +1 -1
  35. package/lib/Cloudflare/AiGateway/AiGateway.d.ts +0 -2
  36. package/lib/Cloudflare/AiGateway/AiGateway.d.ts.map +1 -1
  37. package/lib/Cloudflare/AiGateway/AiGateway.js +2 -4
  38. package/lib/Cloudflare/AiGateway/AiGateway.js.map +1 -1
  39. package/lib/Cloudflare/BrowserRendering/BrowserRendering.d.ts +116 -0
  40. package/lib/Cloudflare/BrowserRendering/BrowserRendering.d.ts.map +1 -0
  41. package/lib/Cloudflare/BrowserRendering/BrowserRendering.js +92 -0
  42. package/lib/Cloudflare/BrowserRendering/BrowserRendering.js.map +1 -0
  43. package/lib/Cloudflare/BrowserRendering/BrowserRenderingBinding.d.ts +55 -0
  44. package/lib/Cloudflare/BrowserRendering/BrowserRenderingBinding.d.ts.map +1 -0
  45. package/lib/Cloudflare/BrowserRendering/BrowserRenderingBinding.js +55 -0
  46. package/lib/Cloudflare/BrowserRendering/BrowserRenderingBinding.js.map +1 -0
  47. package/lib/Cloudflare/BrowserRendering/index.d.ts +3 -0
  48. package/lib/Cloudflare/BrowserRendering/index.d.ts.map +1 -0
  49. package/lib/Cloudflare/BrowserRendering/index.js +3 -0
  50. package/lib/Cloudflare/BrowserRendering/index.js.map +1 -0
  51. package/lib/Cloudflare/Container/Container.d.ts +3 -3
  52. package/lib/Cloudflare/Container/Container.js +3 -3
  53. package/lib/Cloudflare/Container/StartContainer.d.ts.map +1 -1
  54. package/lib/Cloudflare/Container/StartContainer.js.map +1 -1
  55. package/lib/Cloudflare/D1/D1Database.d.ts +1 -0
  56. package/lib/Cloudflare/D1/D1Database.d.ts.map +1 -1
  57. package/lib/Cloudflare/D1/D1Database.js +2 -1
  58. package/lib/Cloudflare/D1/D1Database.js.map +1 -1
  59. package/lib/Cloudflare/D1/D1DatabaseBinding.js +1 -1
  60. package/lib/Cloudflare/D1/D1DatabaseBinding.js.map +1 -1
  61. package/lib/Cloudflare/Fetcher.d.ts.map +1 -1
  62. package/lib/Cloudflare/Fetcher.js +0 -2
  63. package/lib/Cloudflare/Fetcher.js.map +1 -1
  64. package/lib/Cloudflare/Hyperdrive/Hyperdrive.d.ts +1 -0
  65. package/lib/Cloudflare/Hyperdrive/Hyperdrive.d.ts.map +1 -1
  66. package/lib/Cloudflare/Hyperdrive/Hyperdrive.js +3 -0
  67. package/lib/Cloudflare/Hyperdrive/Hyperdrive.js.map +1 -1
  68. package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.d.ts +3 -2
  69. package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.d.ts.map +1 -1
  70. package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.js +32 -33
  71. package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.js.map +1 -1
  72. package/lib/Cloudflare/KV/KVNamespace.d.ts +1 -0
  73. package/lib/Cloudflare/KV/KVNamespace.d.ts.map +1 -1
  74. package/lib/Cloudflare/KV/KVNamespace.js +2 -0
  75. package/lib/Cloudflare/KV/KVNamespace.js.map +1 -1
  76. package/lib/Cloudflare/Local.js +1 -1
  77. package/lib/Cloudflare/Local.js.map +1 -1
  78. package/lib/Cloudflare/Providers.d.ts +2 -1
  79. package/lib/Cloudflare/Providers.d.ts.map +1 -1
  80. package/lib/Cloudflare/Providers.js +21 -17
  81. package/lib/Cloudflare/Providers.js.map +1 -1
  82. package/lib/Cloudflare/Queue/Queue.d.ts +1 -0
  83. package/lib/Cloudflare/Queue/Queue.d.ts.map +1 -1
  84. package/lib/Cloudflare/Queue/Queue.js +1 -0
  85. package/lib/Cloudflare/Queue/Queue.js.map +1 -1
  86. package/lib/Cloudflare/Queue/QueueConsumer.d.ts +2 -1
  87. package/lib/Cloudflare/Queue/QueueConsumer.d.ts.map +1 -1
  88. package/lib/Cloudflare/Queue/QueueConsumer.js +11 -3
  89. package/lib/Cloudflare/Queue/QueueConsumer.js.map +1 -1
  90. package/lib/Cloudflare/Queue/QueueEventSource.d.ts +30 -4
  91. package/lib/Cloudflare/Queue/QueueEventSource.d.ts.map +1 -1
  92. package/lib/Cloudflare/Queue/QueueEventSource.js +22 -1
  93. package/lib/Cloudflare/Queue/QueueEventSource.js.map +1 -1
  94. package/lib/Cloudflare/R2/R2Bucket.d.ts +1 -0
  95. package/lib/Cloudflare/R2/R2Bucket.d.ts.map +1 -1
  96. package/lib/Cloudflare/R2/R2Bucket.js +18 -0
  97. package/lib/Cloudflare/R2/R2Bucket.js.map +1 -1
  98. package/lib/Cloudflare/SecretsStore/Secret.d.ts.map +1 -1
  99. package/lib/Cloudflare/SecretsStore/Secret.js +13 -34
  100. package/lib/Cloudflare/SecretsStore/Secret.js.map +1 -1
  101. package/lib/Cloudflare/SecretsStore/SecretBinding.d.ts +3 -2
  102. package/lib/Cloudflare/SecretsStore/SecretBinding.d.ts.map +1 -1
  103. package/lib/Cloudflare/SecretsStore/SecretBinding.js +3 -2
  104. package/lib/Cloudflare/SecretsStore/SecretBinding.js.map +1 -1
  105. package/lib/Cloudflare/StateStore/Api.d.ts +5 -13
  106. package/lib/Cloudflare/StateStore/Api.d.ts.map +1 -1
  107. package/lib/Cloudflare/StateStore/Api.js +14 -8
  108. package/lib/Cloudflare/StateStore/Api.js.map +1 -1
  109. package/lib/Cloudflare/StateStore/State.d.ts.map +1 -1
  110. package/lib/Cloudflare/StateStore/State.js +45 -9
  111. package/lib/Cloudflare/StateStore/State.js.map +1 -1
  112. package/lib/Cloudflare/StateStore/Store.d.ts.map +1 -1
  113. package/lib/Cloudflare/StateStore/Store.js +5 -2
  114. package/lib/Cloudflare/StateStore/Store.js.map +1 -1
  115. package/lib/Cloudflare/VpcService/VpcService.d.ts +2 -2
  116. package/lib/Cloudflare/VpcService/VpcService.d.ts.map +1 -1
  117. package/lib/Cloudflare/Website/StaticSite.d.ts +5 -5
  118. package/lib/Cloudflare/Website/StaticSite.d.ts.map +1 -1
  119. package/lib/Cloudflare/Website/StaticSite.js +3 -0
  120. package/lib/Cloudflare/Website/StaticSite.js.map +1 -1
  121. package/lib/Cloudflare/Website/Vite.d.ts +5 -5
  122. package/lib/Cloudflare/Website/Vite.d.ts.map +1 -1
  123. package/lib/Cloudflare/Website/Vite.js.map +1 -1
  124. package/lib/Cloudflare/Workers/Assets.d.ts.map +1 -1
  125. package/lib/Cloudflare/Workers/Assets.js +1 -1
  126. package/lib/Cloudflare/Workers/Assets.js.map +1 -1
  127. package/lib/Cloudflare/Workers/DurableObjectBridge.d.ts.map +1 -1
  128. package/lib/Cloudflare/Workers/DurableObjectBridge.js +4 -2
  129. package/lib/Cloudflare/Workers/DurableObjectBridge.js.map +1 -1
  130. package/lib/Cloudflare/Workers/DurableObjectNamespace.d.ts +183 -6
  131. package/lib/Cloudflare/Workers/DurableObjectNamespace.d.ts.map +1 -1
  132. package/lib/Cloudflare/Workers/DurableObjectNamespace.js +279 -76
  133. package/lib/Cloudflare/Workers/DurableObjectNamespace.js.map +1 -1
  134. package/lib/Cloudflare/Workers/HttpServer.d.ts +6 -4
  135. package/lib/Cloudflare/Workers/HttpServer.d.ts.map +1 -1
  136. package/lib/Cloudflare/Workers/HttpServer.js +20 -15
  137. package/lib/Cloudflare/Workers/HttpServer.js.map +1 -1
  138. package/lib/Cloudflare/Workers/InferEnv.d.ts +3 -2
  139. package/lib/Cloudflare/Workers/InferEnv.d.ts.map +1 -1
  140. package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts +4 -7
  141. package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts.map +1 -1
  142. package/lib/Cloudflare/Workers/LocalWorkerProvider.js +111 -66
  143. package/lib/Cloudflare/Workers/LocalWorkerProvider.js.map +1 -1
  144. package/lib/Cloudflare/Workers/Rpc.d.ts +16 -0
  145. package/lib/Cloudflare/Workers/Rpc.d.ts.map +1 -1
  146. package/lib/Cloudflare/Workers/Rpc.js +22 -0
  147. package/lib/Cloudflare/Workers/Rpc.js.map +1 -1
  148. package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.d.ts +285 -0
  149. package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.d.ts.map +1 -0
  150. package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.js +288 -0
  151. package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.js.map +1 -0
  152. package/lib/Cloudflare/Workers/RpcWorker.d.ts +305 -0
  153. package/lib/Cloudflare/Workers/RpcWorker.d.ts.map +1 -0
  154. package/lib/Cloudflare/Workers/RpcWorker.js +350 -0
  155. package/lib/Cloudflare/Workers/RpcWorker.js.map +1 -0
  156. package/lib/Cloudflare/Workers/Vite.d.ts +1 -1
  157. package/lib/Cloudflare/Workers/Vite.d.ts.map +1 -1
  158. package/lib/Cloudflare/Workers/Vite.js +2 -1
  159. package/lib/Cloudflare/Workers/Vite.js.map +1 -1
  160. package/lib/Cloudflare/Workers/Worker.d.ts +69 -24
  161. package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
  162. package/lib/Cloudflare/Workers/Worker.js +168 -47
  163. package/lib/Cloudflare/Workers/Worker.js.map +1 -1
  164. package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts +1 -1
  165. package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts.map +1 -1
  166. package/lib/Cloudflare/Workers/WorkerAsyncBindings.js +158 -97
  167. package/lib/Cloudflare/Workers/WorkerAsyncBindings.js.map +1 -1
  168. package/lib/Cloudflare/Workers/WorkerBinding.d.ts +11 -23
  169. package/lib/Cloudflare/Workers/WorkerBinding.d.ts.map +1 -1
  170. package/lib/Cloudflare/Workers/WorkerBinding.js +3 -0
  171. package/lib/Cloudflare/Workers/WorkerBinding.js.map +1 -1
  172. package/lib/Cloudflare/Workers/WorkerBridge.d.ts.map +1 -1
  173. package/lib/Cloudflare/Workers/WorkerBridge.js +5 -2
  174. package/lib/Cloudflare/Workers/WorkerBridge.js.map +1 -1
  175. package/lib/Cloudflare/Workers/WorkerBundle.d.ts.map +1 -1
  176. package/lib/Cloudflare/Workers/WorkerBundle.js +4 -1
  177. package/lib/Cloudflare/Workers/WorkerBundle.js.map +1 -1
  178. package/lib/Cloudflare/Workers/WorkerRuntimeContext.d.ts.map +1 -1
  179. package/lib/Cloudflare/Workers/WorkerRuntimeContext.js +9 -10
  180. package/lib/Cloudflare/Workers/WorkerRuntimeContext.js.map +1 -1
  181. package/lib/Cloudflare/Workers/Workflow.d.ts +5 -3
  182. package/lib/Cloudflare/Workers/Workflow.d.ts.map +1 -1
  183. package/lib/Cloudflare/Workers/Workflow.js +19 -1
  184. package/lib/Cloudflare/Workers/Workflow.js.map +1 -1
  185. package/lib/Cloudflare/Workers/index.d.ts +2 -0
  186. package/lib/Cloudflare/Workers/index.d.ts.map +1 -1
  187. package/lib/Cloudflare/Workers/index.js +2 -0
  188. package/lib/Cloudflare/Workers/index.js.map +1 -1
  189. package/lib/Cloudflare/index.d.ts +1 -0
  190. package/lib/Cloudflare/index.d.ts.map +1 -1
  191. package/lib/Cloudflare/index.js +1 -0
  192. package/lib/Cloudflare/index.js.map +1 -1
  193. package/lib/Dependencies.d.ts +10 -0
  194. package/lib/Dependencies.d.ts.map +1 -0
  195. package/lib/Dependencies.js +1 -0
  196. package/lib/Dependencies.js.map +1 -0
  197. package/lib/Deploy.d.ts +2 -1
  198. package/lib/Deploy.d.ts.map +1 -1
  199. package/lib/Deploy.js +2 -2
  200. package/lib/Deploy.js.map +1 -1
  201. package/lib/Diff.d.ts +11 -0
  202. package/lib/Diff.d.ts.map +1 -1
  203. package/lib/Diff.js +11 -0
  204. package/lib/Diff.js.map +1 -1
  205. package/lib/Input.d.ts +2 -1
  206. package/lib/Input.d.ts.map +1 -1
  207. package/lib/KeyPair.d.ts +77 -0
  208. package/lib/KeyPair.d.ts.map +1 -0
  209. package/lib/KeyPair.js +102 -0
  210. package/lib/KeyPair.js.map +1 -0
  211. package/lib/Local/RpcProvider.d.ts +3 -1
  212. package/lib/Local/RpcProvider.d.ts.map +1 -1
  213. package/lib/Local/RpcProvider.js +28 -2
  214. package/lib/Local/RpcProvider.js.map +1 -1
  215. package/lib/Local/RpcServerEnvironment.js +1 -1
  216. package/lib/Local/RpcServerEnvironment.js.map +1 -1
  217. package/lib/Neon/Project.d.ts.map +1 -1
  218. package/lib/Neon/Project.js +14 -3
  219. package/lib/Neon/Project.js.map +1 -1
  220. package/lib/Output.d.ts.map +1 -1
  221. package/lib/Output.js +9 -2
  222. package/lib/Output.js.map +1 -1
  223. package/lib/Phase.d.ts +2 -1
  224. package/lib/Phase.d.ts.map +1 -1
  225. package/lib/Phase.js +6 -1
  226. package/lib/Phase.js.map +1 -1
  227. package/lib/Plan.d.ts.map +1 -1
  228. package/lib/Plan.js +14 -3
  229. package/lib/Plan.js.map +1 -1
  230. package/lib/Platform.d.ts +8 -6
  231. package/lib/Platform.d.ts.map +1 -1
  232. package/lib/Platform.js +33 -3
  233. package/lib/Platform.js.map +1 -1
  234. package/lib/Random.d.ts.map +1 -1
  235. package/lib/Random.js +9 -14
  236. package/lib/Random.js.map +1 -1
  237. package/lib/RuntimeContext.d.ts +21 -1
  238. package/lib/RuntimeContext.d.ts.map +1 -1
  239. package/lib/RuntimeContext.js +12 -0
  240. package/lib/RuntimeContext.js.map +1 -1
  241. package/lib/Stack.d.ts +3 -3
  242. package/lib/Stack.d.ts.map +1 -1
  243. package/lib/Stack.js.map +1 -1
  244. package/lib/State/HttpStateApi.d.ts +2 -2
  245. package/lib/State/StateEncoding.d.ts +8 -0
  246. package/lib/State/StateEncoding.d.ts.map +1 -1
  247. package/lib/State/StateEncoding.js +55 -5
  248. package/lib/State/StateEncoding.js.map +1 -1
  249. package/lib/Test/Bun.d.ts.map +1 -1
  250. package/lib/Test/Bun.js +0 -2
  251. package/lib/Test/Bun.js.map +1 -1
  252. package/lib/Test/Vitest.d.ts.map +1 -1
  253. package/lib/Test/Vitest.js +0 -2
  254. package/lib/Test/Vitest.js.map +1 -1
  255. package/lib/Util/Duration.d.ts +14 -0
  256. package/lib/Util/Duration.d.ts.map +1 -0
  257. package/lib/Util/Duration.js +18 -0
  258. package/lib/Util/Duration.js.map +1 -0
  259. package/lib/Util/index.d.ts +0 -6
  260. package/lib/Util/index.d.ts.map +1 -1
  261. package/lib/Util/index.js +0 -6
  262. package/lib/Util/index.js.map +1 -1
  263. package/lib/Util/types.d.ts +3 -1
  264. package/lib/Util/types.d.ts.map +1 -1
  265. package/lib/Util/types.js +5 -1
  266. package/lib/Util/types.js.map +1 -1
  267. package/lib/index.d.ts +2 -3
  268. package/lib/index.d.ts.map +1 -1
  269. package/lib/index.js +1 -3
  270. package/lib/index.js.map +1 -1
  271. package/lib/tsconfig.test.tsbuildinfo +1 -1
  272. package/package.json +20 -19
  273. package/src/AWS/Lambda/Function.ts +87 -34
  274. package/src/AWS/Providers.ts +3 -0
  275. package/src/Apply.ts +18 -1
  276. package/src/Auth/AuthProvider.ts +25 -5
  277. package/src/Auth/Credentials.ts +8 -7
  278. package/src/Cli/commands/_shared.ts +47 -4
  279. package/src/Cli/commands/dev.ts +13 -1
  280. package/src/Cli/commands/login.ts +20 -4
  281. package/src/Cli/commands/profile.ts +24 -34
  282. package/src/Cli/main.ts +0 -3
  283. package/src/Cloudflare/AiGateway/AiGateway.ts +2 -6
  284. package/src/Cloudflare/BrowserRendering/BrowserRendering.ts +132 -0
  285. package/src/Cloudflare/BrowserRendering/BrowserRenderingBinding.ts +137 -0
  286. package/src/Cloudflare/BrowserRendering/index.ts +11 -0
  287. package/src/Cloudflare/Container/Container.ts +3 -3
  288. package/src/Cloudflare/Container/StartContainer.ts +1 -2
  289. package/src/Cloudflare/D1/D1Database.ts +4 -1
  290. package/src/Cloudflare/D1/D1DatabaseBinding.ts +1 -1
  291. package/src/Cloudflare/Fetcher.ts +0 -2
  292. package/src/Cloudflare/Hyperdrive/Hyperdrive.ts +5 -0
  293. package/src/Cloudflare/Hyperdrive/HyperdriveBinding.ts +41 -43
  294. package/src/Cloudflare/KV/KVNamespace.ts +4 -0
  295. package/src/Cloudflare/Local.ts +1 -1
  296. package/src/Cloudflare/Providers.ts +25 -16
  297. package/src/Cloudflare/Queue/Queue.ts +3 -0
  298. package/src/Cloudflare/Queue/QueueConsumer.ts +23 -8
  299. package/src/Cloudflare/Queue/QueueEventSource.ts +33 -5
  300. package/src/Cloudflare/R2/R2Bucket.ts +26 -0
  301. package/src/Cloudflare/SecretsStore/Secret.ts +14 -41
  302. package/src/Cloudflare/SecretsStore/SecretBinding.ts +11 -11
  303. package/src/Cloudflare/StateStore/Api.ts +15 -15
  304. package/src/Cloudflare/StateStore/State.ts +68 -6
  305. package/src/Cloudflare/StateStore/Store.ts +5 -2
  306. package/src/Cloudflare/VpcService/VpcService.ts +2 -2
  307. package/src/Cloudflare/Website/StaticSite.ts +8 -10
  308. package/src/Cloudflare/Website/Vite.ts +4 -7
  309. package/src/Cloudflare/Workers/Assets.ts +1 -1
  310. package/src/Cloudflare/Workers/DurableObjectBridge.ts +7 -4
  311. package/src/Cloudflare/Workers/DurableObjectNamespace.ts +380 -121
  312. package/src/Cloudflare/Workers/HttpServer.ts +31 -25
  313. package/src/Cloudflare/Workers/InferEnv.ts +15 -8
  314. package/src/Cloudflare/Workers/LocalWorkerProvider.ts +139 -78
  315. package/src/Cloudflare/Workers/Rpc.ts +50 -0
  316. package/src/Cloudflare/Workers/RpcDurableObjectNamespace.ts +502 -0
  317. package/src/Cloudflare/Workers/RpcWorker.ts +562 -0
  318. package/src/Cloudflare/Workers/Vite.ts +2 -0
  319. package/src/Cloudflare/Workers/Worker.ts +274 -93
  320. package/src/Cloudflare/Workers/WorkerAsyncBindings.ts +158 -103
  321. package/src/Cloudflare/Workers/WorkerBinding.ts +10 -0
  322. package/src/Cloudflare/Workers/WorkerBridge.ts +7 -4
  323. package/src/Cloudflare/Workers/WorkerBundle.ts +4 -1
  324. package/src/Cloudflare/Workers/WorkerRuntimeContext.ts +8 -15
  325. package/src/Cloudflare/Workers/Workflow.ts +22 -3
  326. package/src/Cloudflare/Workers/index.ts +2 -0
  327. package/src/Cloudflare/index.ts +1 -0
  328. package/src/Dependencies.ts +10 -0
  329. package/src/Deploy.ts +3 -1
  330. package/src/Diff.ts +13 -0
  331. package/src/Input.ts +2 -0
  332. package/src/KeyPair.ts +146 -0
  333. package/src/Local/RpcProvider.ts +45 -1
  334. package/src/Local/RpcServerEnvironment.ts +1 -1
  335. package/src/Neon/Project.ts +16 -3
  336. package/src/Output.ts +8 -2
  337. package/src/Phase.ts +8 -0
  338. package/src/Plan.ts +16 -3
  339. package/src/Platform.ts +74 -27
  340. package/src/Random.ts +22 -27
  341. package/src/RuntimeContext.ts +23 -1
  342. package/src/Stack.ts +3 -3
  343. package/src/State/StateEncoding.ts +58 -7
  344. package/src/Test/Bun.ts +0 -3
  345. package/src/Test/Vitest.ts +0 -3
  346. package/src/Util/Duration.ts +21 -0
  347. package/src/Util/index.ts +0 -6
  348. package/src/Util/types.ts +9 -2
  349. package/src/index.ts +2 -3
  350. package/lib/Secret.d.ts +0 -50
  351. package/lib/Secret.d.ts.map +0 -1
  352. package/lib/Secret.js +0 -23
  353. package/lib/Secret.js.map +0 -1
  354. package/lib/Trait.d.ts +0 -43
  355. package/lib/Trait.d.ts.map +0 -1
  356. package/lib/Trait.js +0 -17
  357. package/lib/Trait.js.map +0 -1
  358. package/lib/Util/LocalhostDns.d.ts +0 -23
  359. package/lib/Util/LocalhostDns.d.ts.map +0 -1
  360. package/lib/Util/LocalhostDns.js +0 -46
  361. package/lib/Util/LocalhostDns.js.map +0 -1
  362. package/lib/Util/assert-never.d.ts +0 -12
  363. package/lib/Util/assert-never.d.ts.map +0 -1
  364. package/lib/Util/assert-never.js +0 -11
  365. package/lib/Util/assert-never.js.map +0 -1
  366. package/lib/Util/class.d.ts +0 -3
  367. package/lib/Util/class.d.ts.map +0 -1
  368. package/lib/Util/class.js +0 -1
  369. package/lib/Util/class.js.map +0 -1
  370. package/lib/Util/ignore.d.ts +0 -40
  371. package/lib/Util/ignore.d.ts.map +0 -1
  372. package/lib/Util/ignore.js +0 -591
  373. package/lib/Util/ignore.js.map +0 -1
  374. package/lib/Util/instance.d.ts +0 -4
  375. package/lib/Util/instance.d.ts.map +0 -1
  376. package/lib/Util/instance.js +0 -1
  377. package/lib/Util/instance.js.map +0 -1
  378. package/lib/Util/pointer.d.ts +0 -5
  379. package/lib/Util/pointer.d.ts.map +0 -1
  380. package/lib/Util/pointer.js +0 -1
  381. package/lib/Util/pointer.js.map +0 -1
  382. package/lib/Util/schema-to-type.d.ts +0 -42
  383. package/lib/Util/schema-to-type.d.ts.map +0 -1
  384. package/lib/Util/schema-to-type.js +0 -364
  385. package/lib/Util/schema-to-type.js.map +0 -1
  386. package/lib/Util/todo.d.ts +0 -3
  387. package/lib/Util/todo.d.ts.map +0 -1
  388. package/lib/Util/todo.js +0 -3
  389. package/lib/Util/todo.js.map +0 -1
  390. package/lib/Variable.d.ts +0 -29
  391. package/lib/Variable.d.ts.map +0 -1
  392. package/lib/Variable.js +0 -9
  393. package/lib/Variable.js.map +0 -1
  394. package/src/Secret.ts +0 -87
  395. package/src/Trait.ts +0 -105
  396. package/src/Util/LocalhostDns.ts +0 -52
  397. package/src/Util/assert-never.ts +0 -18
  398. package/src/Util/class.ts +0 -7
  399. package/src/Util/ignore.ts +0 -815
  400. package/src/Util/instance.ts +0 -9
  401. package/src/Util/pointer.ts +0 -5
  402. package/src/Util/schema-to-type.ts +0 -456
  403. package/src/Util/todo.ts +0 -4
  404. package/src/Variable.ts +0 -44
@@ -1,7 +1,7 @@
1
1
  import { type CloudflareVitePluginOptions } from "@distilled.cloud/cloudflare-vite-plugin";
2
2
  import * as Effect from "effect/Effect";
3
3
  import type * as vite from "vite";
4
- export declare const viteDev: (rootDir: string | undefined, env: Record<string, unknown>, pluginOptions: CloudflareVitePluginOptions) => Effect.Effect<vite.ViteDevServer, never, import("effect/Scope").Scope>;
4
+ export declare const viteDev: (rootDir: string | undefined, env: Record<string, unknown>, pluginOptions: CloudflareVitePluginOptions, serverOptions: vite.ServerOptions) => Effect.Effect<vite.ViteDevServer, never, import("effect/Scope").Scope>;
5
5
  export declare const viteBuild: (rootDir: string | undefined, env: Record<string, unknown>, pluginOptions: CloudflareVitePluginOptions) => Effect.Effect<{
6
6
  serverBundle: vite.Rolldown.OutputBundle | undefined;
7
7
  assetsDirectory: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Vite.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/Workers/Vite.ts"],"names":[],"mappings":"AAAA,OAAmB,EACjB,KAAK,2BAA2B,EACjC,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAKxC,OAAO,KAAK,KAAK,IAAI,MAAM,MAAM,CAAC;AAElC,eAAO,MAAM,OAAO,GAClB,SAAS,MAAM,YAAgB,EAC/B,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,eAAe,2BAA2B,2EAiBzC,CAAC;AAEJ,eAAO,MAAM,SAAS,GACpB,SAAS,MAAM,YAAgB,EAC/B,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,eAAe,2BAA2B;;;gBA0CxC,CAAC"}
1
+ {"version":3,"file":"Vite.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/Workers/Vite.ts"],"names":[],"mappings":"AAAA,OAAmB,EACjB,KAAK,2BAA2B,EACjC,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAKxC,OAAO,KAAK,KAAK,IAAI,MAAM,MAAM,CAAC;AAElC,eAAO,MAAM,OAAO,GAClB,SAAS,MAAM,YAAgB,EAC/B,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,eAAe,2BAA2B,EAC1C,eAAe,IAAI,CAAC,aAAa,2EAkBhC,CAAC;AAEJ,eAAO,MAAM,SAAS,GACpB,SAAS,MAAM,YAAgB,EAC/B,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,eAAe,2BAA2B;;;gBA0CxC,CAAC"}
@@ -12,12 +12,13 @@ import * as Redacted from "effect/Redacted";
12
12
  import { createRequire } from "node:module";
13
13
  import path from "node:path";
14
14
  import { pathToFileURL } from "node:url";
15
- export const viteDev = (rootDir = process.cwd(), env, pluginOptions) => Effect.acquireRelease(Effect.promise(async () => {
15
+ export const viteDev = (rootDir = process.cwd(), env, pluginOptions, serverOptions) => Effect.acquireRelease(Effect.promise(async () => {
16
16
  const vite = await loadVite(rootDir);
17
17
  const devServer = await vite.createServer({
18
18
  root: rootDir,
19
19
  define: getDefine(env),
20
20
  plugins: [cloudflare(pluginOptions)],
21
+ server: serverOptions,
21
22
  });
22
23
  await devServer.listen();
23
24
  return devServer;
@@ -1 +1 @@
1
- {"version":3,"file":"Vite.js","sourceRoot":"","sources":["../../../src/Cloudflare/Workers/Vite.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,UAAU,EAAE,EAElB,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,UAAkB,OAAO,CAAC,GAAG,EAAE,EAC/B,GAA4B,EAC5B,aAA0C,EAC1C,EAAE,CACF,MAAM,CAAC,cAAc,CACnB,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;IACxB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC;QACxC,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC;QACtB,OAAO,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;KACrC,CAAC,CAAC;IACH,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC;IACzB,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC,EACF,CAAC,SAAS,EAAE,EAAE,CACZ,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;IACxB,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;AAC1B,CAAC,CAAC,CACL,CAAC;AAEJ,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,UAAkB,OAAO,CAAC,GAAG,EAAE,EAC/B,GAA4B,EAC5B,aAA0C,EAC1C,EAAE,CACF,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;IACxB,IAAI,YAAoD,CAAC;IACzD,IAAI,eAAmC,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CACtC;QACE,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC;QACtB,OAAO,EAAE;YACP,UAAU,CAAC,aAAa,CAAC;YACzB;gBACE,IAAI,EAAE,YAAY;gBAClB,kBAAkB,CAAC,WAAW;oBAC5B,OAAO,WAAW,CAAC,IAAI,KAAK,KAAK,CAAC;gBACpC,CAAC;gBACD,cAAc,CAAC,cAAc,EAAE,MAAM;oBACnC,YAAY,GAAG,MAAM,CAAC;gBACxB,CAAC;aACF;YACD;gBACE,IAAI,EAAE,eAAe;gBACrB,kBAAkB,CAAC,WAAW;oBAC5B,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ,CAAC;gBACvC,CAAC;gBACD,cAAc,CAAC,aAAa;oBAC1B,eAAe,GAAG,aAAa,CAAC,GAAG,CAAC;gBACtC,CAAC;aACF;SACF;KACF;IACD,uFAAuF;IACvF,sFAAsF;IACtF,kHAAkH;IAClH,IAAI,CACL,CAAC;IACF,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;IACzB,OAAO;QACL,YAAY;QACZ,eAAe;KAChB,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,2DAA2D;AAC3D,2DAA2D;AAC3D,2DAA2D;AAC3D,2DAA2D;AAC3D,+BAA+B;AAC/B,MAAM,SAAS,GAAG,CAAC,GAA4B,EAAE,EAAE,CACjD,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;IACzC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACnE,OAAO,CAAC,CAAC,mBAAmB,GAAG,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAU,CAAC,CAAC;AACtE,CAAC,CAAC,CACH,CAAC;AAIJ;;;GAGG;AACH,KAAK,UAAU,QAAQ,CACrB,cAAsB,OAAO,CAAC,GAAG,EAAE;IAEnC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACzC,oEAAoE;QACpE,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxC,OAAO,MAAM,MAAM,kCAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,4FAA4F;QAC5F,oDAAoD;QACpD,OAAO,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"Vite.js","sourceRoot":"","sources":["../../../src/Cloudflare/Workers/Vite.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,16 @@
1
1
  import type * as cf from "@cloudflare/workers-types";
2
2
  import * as workers from "@distilled.cloud/cloudflare/workers";
3
+ import * as Config from "effect/Config";
3
4
  import * as Context from "effect/Context";
4
5
  import * as Effect from "effect/Effect";
5
6
  import * as Layer from "effect/Layer";
6
- import * as Path from "effect/Path";
7
7
  import * as Redacted from "effect/Redacted";
8
- import { AlchemyContext } from "../../AlchemyContext.ts";
9
8
  import { type MemoOptions } from "../../Build/Memo.ts";
10
9
  import * as Bundle from "../../Bundle/Bundle.ts";
11
10
  import type { InputProps } from "../../Input.ts";
12
11
  import { Platform, type Main, type PlatformProps } from "../../Platform.ts";
13
12
  import * as Provider from "../../Provider.ts";
14
13
  import { Resource } from "../../Resource.ts";
15
- import { Stack } from "../../Stack.ts";
16
- import { CloudflareEnvironment } from "../CloudflareEnvironment.ts";
17
14
  import type { HyperdriveDevOrigin } from "../Hyperdrive/Hyperdrive.ts";
18
15
  import type { Providers } from "../Providers.ts";
19
16
  import { type Assets, type AssetsConfig, type AssetsProps } from "./Assets.ts";
@@ -74,12 +71,12 @@ export type WorkerBindingProps = {
74
71
  [bindingName in string]: WorkerBindingResource | Effect.Effect<WorkerBindingResource, any, any>;
75
72
  };
76
73
  type NormalizedBindings<Bindings extends WorkerBindingProps = {}, AssetsConfig extends WorkerAssetsConfig | undefined = undefined> = {
77
- [B in keyof Bindings]: Bindings[B] extends Effect.Effect<infer T extends WorkerBindingResource, any, any> ? T : Extract<Bindings[B], WorkerBindingResource>;
74
+ [B in keyof Bindings]: Bindings[B] extends Effect.Effect<infer T extends WorkerBindingResource, any, any> ? T extends Redacted.Redacted<infer T> | Config.Config<infer T> ? T : T : Extract<Bindings[B], WorkerBindingResource>;
78
75
  } & (undefined extends AssetsConfig ? {} : {
79
76
  ASSETS: Assets;
80
77
  });
81
78
  export type WorkerAssetsConfig = string | AssetsProps | AssetsWithHash;
82
- export interface WorkerProps<Bindings extends WorkerBindingProps = any, Env extends WorkerEnv = WorkerEnv, Assets extends WorkerAssetsConfig | undefined = WorkerAssetsConfig | undefined> extends PlatformProps {
79
+ export interface WorkerProps<Bindings extends WorkerBindingProps = any, Assets extends WorkerAssetsConfig | undefined = WorkerAssetsConfig | undefined> extends PlatformProps {
83
80
  /**
84
81
  * Worker name override. If omitted, Alchemy derives a deterministic physical
85
82
  * name from the stack, stage, and logical ID.
@@ -118,16 +115,46 @@ export interface WorkerProps<Bindings extends WorkerBindingProps = any, Env exte
118
115
  */
119
116
  observability?: WorkerObservability;
120
117
  tags?: string[];
121
- main: string;
118
+ /**
119
+ * Path to the Worker's entry module. Bundled with rolldown before
120
+ * upload. Mutually exclusive with {@link script} — provide exactly one.
121
+ */
122
+ main?: string;
123
+ /**
124
+ * Raw module source for the Worker. When provided, bundling is bypassed
125
+ * entirely and this string is uploaded as a single ESM module
126
+ * (`main.js`). Useful for tiny inline workers (tests, fixtures,
127
+ * one-offs) and any case where you've already produced the final
128
+ * bundle elsewhere. Mutually exclusive with {@link main}.
129
+ */
130
+ script?: string;
122
131
  compatibility?: {
123
132
  date?: string;
124
133
  flags?: ("nodejs_compat" | "nodejs_als" | (string & {}))[];
125
134
  };
126
135
  limits?: WorkerLimits;
127
136
  placement?: WorkerPlacement;
128
- env?: Env;
129
137
  exports?: string[];
130
- bindings?: Bindings;
138
+ /**
139
+ * Environment variables and native Cloudflare Bindings to bind to
140
+ * the Worker. Accepts:
141
+ *
142
+ * - Resource references (R2 bucket, KV namespace, D1 database,
143
+ * another Worker, Durable Object, etc.) — emitted as the
144
+ * corresponding native binding.
145
+ * - `effect/Config` values (`Config.redacted`, `Config.string`,
146
+ * `Config.number`, …) — resolved at deploy time and bound as
147
+ * `secret_text` on Cloudflare regardless of the `Config`
148
+ * constructor used. See
149
+ * {@link https://v2.alchemy.run/concepts/secrets | Concepts › Secrets and Variables}.
150
+ * - Literal values — routed by shape: `Redacted<string>` →
151
+ * `secret_text`, `string` → `plain_text`, anything else → `json`.
152
+ *
153
+ * In Effect-native Workers you can alternatively `yield*` a
154
+ * `Config` in the Init phase to register the binding implicitly;
155
+ * `env` is the only option for async (non-Effect) Workers.
156
+ */
157
+ env?: Bindings;
131
158
  /**
132
159
  * Cron expressions that trigger the Worker's scheduled handler.
133
160
  *
@@ -145,6 +172,29 @@ export interface WorkerProps<Bindings extends WorkerBindingProps = any, Env exte
145
172
  * options used to build this Worker. See {@link Bundle.BundleExtraOptions}.
146
173
  */
147
174
  build?: Bundle.BundleExtraOptions;
175
+ /**
176
+ * Options for the local dev server that runs this Worker under `alchemy dev`.
177
+ * Each Worker is served on its own port.
178
+ */
179
+ dev?: {
180
+ /**
181
+ * Host the local dev server binds to.
182
+ * @default "localhost"
183
+ */
184
+ host?: string;
185
+ /**
186
+ * Port the local dev server listens on. If the port is unavailable, the
187
+ * next free port is used unless {@link strictPort} is `true`.
188
+ * @default 1337
189
+ */
190
+ port?: number;
191
+ /**
192
+ * When `true`, fail instead of falling back to another port if {@link port}
193
+ * is already in use.
194
+ * @default false
195
+ */
196
+ strictPort?: boolean;
197
+ };
148
198
  }
149
199
  export type Worker<Bindings extends WorkerBindings = any> = Resource<WorkerTypeId, WorkerProps<Bindings>, {
150
200
  workerId: string;
@@ -154,11 +204,7 @@ export type Worker<Bindings extends WorkerBindings = any> = Resource<WorkerTypeI
154
204
  tags: string[] | undefined;
155
205
  durableObjectNamespaces: Record<string, string>;
156
206
  accountId: string;
157
- domains: {
158
- hostname: string;
159
- id: string;
160
- zoneId: string;
161
- }[];
207
+ domains: string[];
162
208
  crons: string[];
163
209
  hash?: {
164
210
  assets: string | undefined;
@@ -212,9 +258,10 @@ export type Worker<Bindings extends WorkerBindings = any> = Resource<WorkerTypeI
212
258
  * as-is. Your handler is a plain `async fetch` — no Effect runtime
213
259
  * is included in the bundle.
214
260
  *
215
- * Use the `bindings` prop to declare which resources are available
216
- * at runtime, and `Cloudflare.InferEnv` to extract a fully typed
217
- * `env` object from those bindings.
261
+ * Use the `env` prop to declare which resources, `Config` values,
262
+ * and literal env vars are available at runtime, and
263
+ * `Cloudflare.InferEnv` to extract a fully typed `env` object from
264
+ * them.
218
265
  *
219
266
  * See the {@link https://alchemy.run/guides/async-worker | Async Workers Guide}
220
267
  * for a comprehensive walkthrough of all binding types (R2, D1,
@@ -230,7 +277,7 @@ export type Worker<Bindings extends WorkerBindings = any> = Resource<WorkerTypeI
230
277
  *
231
278
  * export const Worker = Cloudflare.Worker("Worker", {
232
279
  * main: "./src/worker.ts",
233
- * bindings: { db, bucket },
280
+ * env: { db, bucket },
234
281
  * });
235
282
  * ```
236
283
  *
@@ -487,7 +534,7 @@ export type Worker<Bindings extends WorkerBindings = any> = Resource<WorkerTypeI
487
534
  * const sandbox = yield* Cloudflare.Container.bind(Sandbox);
488
535
  *
489
536
  * return Effect.gen(function* () {
490
- * const container = yield* Cloudflare.start(sandbox);
537
+ * const container = yield* Cloudflare.start(sandbox, { enableInternet: true });
491
538
  *
492
539
  * return {
493
540
  * exec: (cmd: string) => container.exec(cmd),
@@ -531,13 +578,11 @@ export type Worker<Bindings extends WorkerBindings = any> = Resource<WorkerTypeI
531
578
  * ```
532
579
  */
533
580
  export declare const Worker: Platform<Worker, WorkerServices, WorkerShape, WorkerRuntimeContext> & {
534
- <const Bindings extends WorkerBindingProps = {}, const Env extends WorkerEnv = {}, const Assets extends WorkerAssetsConfig | undefined = undefined, Req = never>(id: string, props: InputProps<WorkerProps<Bindings, Env, Assets>> | Effect.Effect<InputProps<WorkerProps<Bindings, Env, Assets>>, never, Req>): Effect.Effect<Worker<{
581
+ <const Bindings extends WorkerBindingProps = {}, const Assets extends WorkerAssetsConfig | undefined = undefined, Req = never>(id: string, props: InputProps<WorkerProps<Bindings, Assets>> | Effect.Effect<InputProps<WorkerProps<Bindings, Assets>>, never, Req>): Effect.Effect<Worker<{
535
582
  [binding in keyof NormalizedBindings<Bindings, Assets>]: NormalizedBindings<Bindings, Assets>[binding];
536
- } & {
537
- [K in keyof Env]: Env[K] extends Redacted.Redacted<infer T> ? T : Env[K];
538
583
  }>, never, Req | Providers>;
539
584
  };
540
- export declare const WorkerProvider: () => Layer.Layer<Provider.Provider<Worker<any>>, import("effect/Config").ConfigError | import("effect/PlatformError").PlatformError | import("@distilled.cloud/cloudflare-runtime").ConfigError | import("@distilled.cloud/cloudflare-runtime").SystemError, import("effect/Scope").Scope | import("effect/unstable/process/ChildProcessSpawner").ChildProcessSpawner | import("effect/FileSystem").FileSystem | Path.Path | import("effect/unstable/http/HttpClient").HttpClient | AlchemyContext | import("../../Stage.ts").Stage | Stack | import("@distilled.cloud/cloudflare").Credentials | CloudflareEnvironment>;
541
- export declare const LiveWorkerProvider: () => Layer.Layer<Provider.Provider<Worker<any>>, never, import("effect/FileSystem").FileSystem | Path.Path | import("effect/unstable/http/HttpClient").HttpClient | import("../../Stage.ts").Stage | Stack | import("@distilled.cloud/cloudflare").Credentials | CloudflareEnvironment>;
585
+ export declare const WorkerProvider: () => Layer.Layer<Provider.Provider<Worker<any>>, Config.ConfigError | import("effect/PlatformError").PlatformError | import("@distilled.cloud/cloudflare-runtime").SystemError, any>;
586
+ export declare const LiveWorkerProvider: () => Layer.Layer<Provider.Provider<Worker<any>>, never, any>;
542
587
  export {};
543
588
  //# sourceMappingURL=Worker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Worker.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/Workers/Worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Worker.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/Workers/Worker.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import * as workers from "@distilled.cloud/cloudflare/workers";
2
2
  import * as zones from "@distilled.cloud/cloudflare/zones";
3
+ import * as Config from "effect/Config";
3
4
  import * as Context from "effect/Context";
4
5
  import * as Data from "effect/Data";
5
6
  import * as Effect from "effect/Effect";
@@ -7,6 +8,7 @@ import * as Layer from "effect/Layer";
7
8
  import * as Path from "effect/Path";
8
9
  import * as Redacted from "effect/Redacted";
9
10
  import * as Schedule from "effect/Schedule";
11
+ import * as crypto from "node:crypto";
10
12
  import { Unowned } from "../../AdoptPolicy.js";
11
13
  import { AlchemyContext } from "../../AlchemyContext.js";
12
14
  import * as Artifacts from "../../Artifacts.js";
@@ -88,9 +90,10 @@ export const ExportedHandlerMethods = [
88
90
  * as-is. Your handler is a plain `async fetch` — no Effect runtime
89
91
  * is included in the bundle.
90
92
  *
91
- * Use the `bindings` prop to declare which resources are available
92
- * at runtime, and `Cloudflare.InferEnv` to extract a fully typed
93
- * `env` object from those bindings.
93
+ * Use the `env` prop to declare which resources, `Config` values,
94
+ * and literal env vars are available at runtime, and
95
+ * `Cloudflare.InferEnv` to extract a fully typed `env` object from
96
+ * them.
94
97
  *
95
98
  * See the {@link https://alchemy.run/guides/async-worker | Async Workers Guide}
96
99
  * for a comprehensive walkthrough of all binding types (R2, D1,
@@ -106,7 +109,7 @@ export const ExportedHandlerMethods = [
106
109
  *
107
110
  * export const Worker = Cloudflare.Worker("Worker", {
108
111
  * main: "./src/worker.ts",
109
- * bindings: { db, bucket },
112
+ * env: { db, bucket },
110
113
  * });
111
114
  * ```
112
115
  *
@@ -363,7 +366,7 @@ export const ExportedHandlerMethods = [
363
366
  * const sandbox = yield* Cloudflare.Container.bind(Sandbox);
364
367
  *
365
368
  * return Effect.gen(function* () {
366
- * const container = yield* Cloudflare.start(sandbox);
369
+ * const container = yield* Cloudflare.start(sandbox, { enableInternet: true });
367
370
  *
368
371
  * return {
369
372
  * exec: (cmd: string) => container.exec(cmd),
@@ -522,7 +525,7 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
522
525
  return yield* Effect.die(`Could not infer Cloudflare Zone for hostname "${hostname}". ` +
523
526
  "Ensure the parent zone exists in this account.");
524
527
  });
525
- const reconcileDomains = (scriptName, desired, _previous) => Effect.gen(function* () {
528
+ const reconcileDomains = (scriptName, desired) => Effect.gen(function* () {
526
529
  // Always query the live state of domains attached to *this*
527
530
  // Worker rather than trusting `_previous` from local state.
528
531
  // State may have been wiped, populated by another machine, or
@@ -619,7 +622,10 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
619
622
  : []));
620
623
  return namespaces;
621
624
  };
622
- const getExpectedDurableObjectClassNames = (bindings) => Array.from(new Set(bindings?.flatMap((binding) => binding.type === "durable_object_namespace" && binding.className
625
+ const getExpectedDurableObjectClassNames = (bindings, workerName) => Array.from(new Set(bindings?.flatMap((binding) => binding.type === "durable_object_namespace" &&
626
+ binding.className &&
627
+ (binding.scriptName === undefined ||
628
+ binding.scriptName === workerName)
623
629
  ? [binding.className]
624
630
  : []) ?? []));
625
631
  const getWorkerSettingsWithDurableObjects = Effect.fnUntraced(function* (scriptName, expectedClassNames) {
@@ -676,9 +682,22 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
676
682
  extraOptions: props.build,
677
683
  })
678
684
  .pipe(Artifacts.cached("build"));
685
+ const hashScript = (script) => Effect.sync(() => crypto.createHash("sha256").update(script).digest("hex"));
679
686
  const viteBuild = Effect.fnUntraced(function* (props) {
680
687
  const compatibility = getCompatibility(props);
681
- const { assetsDirectory, serverBundle } = yield* Vite.viteBuild(props.vite?.rootDir, props.env ?? {}, {
688
+ const { assetsDirectory, serverBundle } = yield* Vite.viteBuild(props.vite?.rootDir, Object.fromEntries((yield* Effect.all(Object.entries(props.env ?? {}).map(Effect.fnUntraced(function* ([key, value]) {
689
+ return [
690
+ key,
691
+ typeof value === "string"
692
+ ? value
693
+ : Redacted.isRedacted(value) &&
694
+ typeof Redacted.value(value) === "string"
695
+ ? Redacted.value(value)
696
+ : Config.isConfig(value) || Effect.isEffect(value)
697
+ ? yield* value
698
+ : undefined,
699
+ ];
700
+ })))).filter(([_, value]) => value !== undefined)), {
682
701
  compatibilityDate: compatibility.date,
683
702
  compatibilityFlags: compatibility.flags,
684
703
  });
@@ -701,6 +720,21 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
701
720
  return { assets, bundle };
702
721
  });
703
722
  const prepareAssetsAndBundle = (id, props, opts = {}) => Effect.gen(function* () {
723
+ if (props.script !== undefined) {
724
+ const [assets, bundleHash] = yield* Effect.all([
725
+ opts.skipAssetsRead
726
+ ? Effect.succeed(undefined)
727
+ : prepareAssets(props.assets),
728
+ hashScript(props.script),
729
+ ], { concurrency: "unbounded" });
730
+ return {
731
+ assets,
732
+ bundle: {
733
+ files: [{ path: "main.js", content: props.script }],
734
+ hash: bundleHash,
735
+ },
736
+ };
737
+ }
704
738
  if (props.vite) {
705
739
  const [{ assets, bundle }, input] = yield* Effect.all([
706
740
  viteBuild(props),
@@ -773,7 +807,7 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
773
807
  assets: precomputedAssetsHash ?? preparedHash.assets,
774
808
  };
775
809
  const metadataBindings = bindings.flatMap((b) => b.data.bindings ?? []);
776
- const expectedDurableObjectClassNames = getExpectedDurableObjectClassNames(metadataBindings);
810
+ const expectedDurableObjectClassNames = getExpectedDurableObjectClassNames(metadataBindings, name);
777
811
  let metadataAssets;
778
812
  let keepAssets = false;
779
813
  if (skipAssetsRead) {
@@ -816,6 +850,10 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
816
850
  });
817
851
  }
818
852
  metadataBindings.push({
853
+ type: "plain_text",
854
+ name: "ALCHEMY_PHASE",
855
+ text: "runtime",
856
+ }, {
819
857
  type: "plain_text",
820
858
  name: "ALCHEMY_STACK_NAME",
821
859
  text: stack.name,
@@ -829,11 +867,16 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
829
867
  for (const [key, value] of Object.entries(news.env)) {
830
868
  if (value === undefined)
831
869
  continue;
870
+ if (metadataBindings.some((b) => b.name === key))
871
+ continue;
832
872
  if (Redacted.isRedacted(value)) {
873
+ const unredacted = Redacted.value(value);
833
874
  metadataBindings.push({
834
875
  type: "secret_text",
835
876
  name: key,
836
- text: Redacted.value(value),
877
+ text: typeof unredacted === "string"
878
+ ? unredacted
879
+ : JSON.stringify(unredacted),
837
880
  });
838
881
  }
839
882
  else if (typeof value === "string") {
@@ -888,15 +931,17 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
888
931
  }
889
932
  }
890
933
  // Backward compatibility for old workers that have DO bindings but no
891
- // alchemy:do tags yet.
934
+ // alchemy:do tags yet. Cross-script bindings (`scriptName` set to
935
+ // anything other than this worker) are NEVER candidates for
936
+ // delete-class migrations — the class lives on the foreign script
937
+ // and we don't own its lifecycle.
892
938
  if (Object.keys(oldDoClassNameByLogicalId).length === 0) {
893
939
  for (const oldBinding of oldBindings) {
940
+ const ownedLocally = !("scriptName" in oldBinding) || oldBinding.scriptName === name;
894
941
  if (oldBinding.type === "durable_object_namespace" &&
895
942
  "className" in oldBinding &&
896
943
  oldBinding.className &&
897
- (!("scriptName" in oldBinding) ||
898
- !oldBinding.scriptName ||
899
- oldBinding.scriptName === name) &&
944
+ ownedLocally &&
900
945
  !currentDoBindings.some((binding) => binding.bindingName === oldBinding.name)) {
901
946
  deletedClasses.push(oldBinding.className);
902
947
  }
@@ -1022,20 +1067,28 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
1022
1067
  // Cloudflare currently has it (disabled by default, or whatever
1023
1068
  // a previous failed/external action left it as).
1024
1069
  const desiredSubdomainEnabled = news.url !== false;
1025
- const observedSubdomainEnabled = yield* getScriptSubdomain({
1070
+ const observedSubdomain = yield* getScriptSubdomain({
1026
1071
  accountId,
1027
1072
  scriptName: name,
1028
- }).pipe(Effect.map((s) => s.enabled === true), Effect.catch(() => Effect.succeed(false)));
1029
- if (desiredSubdomainEnabled !== observedSubdomainEnabled) {
1073
+ }).pipe(Effect.orElseSucceed(() => ({
1074
+ enabled: false,
1075
+ previewsEnabled: false,
1076
+ })));
1077
+ if (desiredSubdomainEnabled !== observedSubdomain.enabled ||
1078
+ desiredSubdomainEnabled !== observedSubdomain.previewsEnabled) {
1030
1079
  yield* session.note(`${desiredSubdomainEnabled ? "Enabling" : "Disabling"} workers.dev subdomain...`);
1031
1080
  // Cloudflare's script registry is eventually consistent — for the
1032
1081
  // first few hundred ms after `putScript` returns, POST /subdomain
1033
1082
  // can still get back `WorkerNotFound` (a generic "unknown error"
1034
- // body). Bigger uploads race harder. Retry the subdomain toggle on
1035
- // that specific tag with a short exponential backoff; same pattern
1036
- // we use elsewhere in this provider for DO-namespace propagation.
1083
+ // body), or a bare 500 surfaced as `InternalServerError` /
1084
+ // `UnknownCloudflareError` (code 10013). Bigger uploads race harder.
1085
+ // Retry the subdomain toggle on those transient tags with a short
1086
+ // exponential backoff; same pattern we use elsewhere in this
1087
+ // provider for DO-namespace propagation and for `putScript` itself.
1037
1088
  yield* setWorkerSubdomain(name, desiredSubdomainEnabled).pipe(Effect.retry({
1038
- while: (error) => error?._tag === "WorkerNotFound",
1089
+ while: (error) => error?._tag === "WorkerNotFound" ||
1090
+ error?._tag === "InternalServerError" ||
1091
+ error?._tag === "UnknownCloudflareError",
1039
1092
  schedule: Schedule.exponential(200).pipe(Schedule.both(Schedule.recurs(15))),
1040
1093
  }));
1041
1094
  }
@@ -1044,15 +1097,20 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
1044
1097
  if (desiredDomains.length > 0 || previousDomains.length > 0) {
1045
1098
  yield* session.note(`Reconciling custom domains (${desiredDomains.length}) ...`);
1046
1099
  }
1047
- const domains = yield* reconcileDomains(name, desiredDomains, previousDomains);
1100
+ const reconciled = yield* reconcileDomains(name, desiredDomains);
1101
+ const workersDevUrl = news.url !== false
1102
+ ? `https://${name}.${yield* getAccountSubdomain(accountId)}.workers.dev`
1103
+ : undefined;
1104
+ const domains = [
1105
+ ...reconciled.map((d) => `https://${d.hostname}`),
1106
+ ...(workersDevUrl ? [workersDevUrl] : []),
1107
+ ];
1048
1108
  const crons = yield* reconcileCrons(name, normalizeCrons([...getCronBindings(bindings), ...(news.crons ?? [])]), output?.crons ?? [], session);
1049
1109
  return {
1050
1110
  workerId: worker.id ?? name,
1051
1111
  workerName: name,
1052
1112
  logpush: worker.logpush ?? undefined,
1053
- url: news.url !== false
1054
- ? `https://${name}.${yield* getAccountSubdomain(accountId)}.workers.dev`
1055
- : undefined,
1113
+ url: domains[0],
1056
1114
  tags: settings.tags ?? metadata.tags,
1057
1115
  durableObjectNamespaces,
1058
1116
  accountId,
@@ -1062,6 +1120,24 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
1062
1120
  };
1063
1121
  });
1064
1122
  const hasChanged = Effect.fnUntraced(function* (id, props, output) {
1123
+ if (props.script !== undefined) {
1124
+ const scriptHash = yield* hashScript(props.script);
1125
+ if (scriptHash !== output.hash?.bundle) {
1126
+ return true;
1127
+ }
1128
+ if (!props.assets) {
1129
+ return false;
1130
+ }
1131
+ const assetsHash = typeof props.assets === "object" &&
1132
+ "path" in props.assets &&
1133
+ "hash" in props.assets
1134
+ ? props.assets.hash
1135
+ : undefined;
1136
+ if (assetsHash === undefined) {
1137
+ return true;
1138
+ }
1139
+ return assetsHash !== output.hash?.assets;
1140
+ }
1065
1141
  if (props.vite) {
1066
1142
  const input = yield* hashDirectory({
1067
1143
  cwd: props.vite.rootDir,
@@ -1120,9 +1196,11 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
1120
1196
  if (!output) {
1121
1197
  return;
1122
1198
  }
1123
- const newDomains = normalizeDomains(news.domain).sort();
1199
+ const newDomains = normalizeDomains(news.domain)
1200
+ .map((h) => `https://${h}`)
1201
+ .sort();
1124
1202
  const oldDomains = (output?.domains ?? [])
1125
- .map((d) => d.hostname)
1203
+ .filter((u) => !u.endsWith(".workers.dev"))
1126
1204
  .sort();
1127
1205
  const domainsChanged = newDomains.length !== oldDomains.length ||
1128
1206
  newDomains.some((d, i) => d !== oldDomains[i]);
@@ -1278,6 +1356,25 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
1278
1356
  service: workerName,
1279
1357
  }).pipe(Effect.map((r) => r.result ?? [])),
1280
1358
  ]);
1359
+ // Preserve the order the user provided in `olds.domain`. The
1360
+ // Cloudflare API returns domains in non-deterministic order,
1361
+ // which would cause downstream `worker.domains[0]` reads to flip
1362
+ // between deploys. Drift (domains we don't know about) is
1363
+ // appended after the user-ordered ones.
1364
+ const userOrder = normalizeDomains(olds?.domain);
1365
+ const orderedHostnames = [
1366
+ ...userOrder.flatMap((h) => domainsList.find((d) => d.hostname === h)?.hostname ?? []),
1367
+ ...domainsList.flatMap((d) => d.hostname && !userOrder.includes(d.hostname)
1368
+ ? [d.hostname]
1369
+ : []),
1370
+ ];
1371
+ const workersDevUrl = subdomain.enabled
1372
+ ? `https://${workerName}.${yield* getAccountSubdomain(accountId)}.workers.dev`
1373
+ : undefined;
1374
+ const domains = [
1375
+ ...orderedHostnames.map((h) => `https://${h}`),
1376
+ ...(workersDevUrl ? [workersDevUrl] : []),
1377
+ ];
1281
1378
  const crons = yield* getWorkerCrons(workerName);
1282
1379
  yield* Effect.logInfo(`Cloudflare Worker read: found ${workerName}`);
1283
1380
  const attrs = {
@@ -1285,14 +1382,10 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
1285
1382
  workerId: workerName,
1286
1383
  workerName,
1287
1384
  logpush: settings.logpush ?? undefined,
1288
- url: subdomain.enabled
1289
- ? `https://${workerName}.${yield* getAccountSubdomain(accountId)}.workers.dev`
1290
- : undefined,
1385
+ url: domains[0],
1291
1386
  tags: settings.tags ?? undefined,
1292
1387
  durableObjectNamespaces: getDurableObjectNamespaces(settings.bindings),
1293
- domains: domainsList.flatMap((d) => d.id && d.hostname && d.zoneId
1294
- ? [{ id: d.id, hostname: d.hostname, zoneId: d.zoneId }]
1295
- : []),
1388
+ domains,
1296
1389
  crons,
1297
1390
  };
1298
1391
  // Centralized ownership decision: the engine routes `read`'s
@@ -1328,11 +1421,23 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
1328
1421
  }),
1329
1422
  delete: Effect.fnUntraced(function* ({ output }) {
1330
1423
  yield* Effect.logInfo(`Cloudflare Worker delete: deleting ${output.workerName}`);
1331
- if (output.domains?.length) {
1332
- yield* Effect.all(output.domains.map((d) => deleteDomain({
1333
- accountId: output.accountId,
1334
- domainId: d.id,
1335
- }).pipe(Effect.catchTag("DomainNotFound", () => Effect.void))), { concurrency: "unbounded" });
1424
+ // Look up live domain IDs rather than trusting persisted state.
1425
+ // We no longer track `{ id, zoneId }` on the output; fetching
1426
+ // straight from Cloudflare handles both the normal case and
1427
+ // adopted workers whose domains we never recorded.
1428
+ const liveDomains = yield* listDomains({
1429
+ accountId: output.accountId,
1430
+ service: output.workerName,
1431
+ }).pipe(Effect.map((r) => r.result ?? []), Effect.catch(() => Effect.succeed([])));
1432
+ if (liveDomains.length) {
1433
+ yield* Effect.all(liveDomains.flatMap((d) => d.id
1434
+ ? [
1435
+ deleteDomain({
1436
+ accountId: output.accountId,
1437
+ domainId: d.id,
1438
+ }).pipe(Effect.catchTag("DomainNotFound", () => Effect.void)),
1439
+ ]
1440
+ : []), { concurrency: "unbounded" });
1336
1441
  }
1337
1442
  yield* deleteScript({
1338
1443
  accountId: output.accountId,
@@ -1394,20 +1499,36 @@ function bumpMigrationTagVersion(oldTag) {
1394
1499
  return `alchemy:v${parseInt(version, 10) + 1}`;
1395
1500
  }
1396
1501
  function getDurableObjectBindings(bindings, workerName) {
1397
- return bindings.flatMap((binding) => (binding.data.bindings ?? []).flatMap((item) => item.type === "durable_object_namespace" &&
1398
- "className" in item &&
1399
- item.className &&
1400
- (!("scriptName" in item) ||
1401
- !item.scriptName ||
1402
- item.scriptName === workerName)
1403
- ? [
1502
+ // Resource authors (and the `make`/`yield* Tag`/plan-vs-apply machinery)
1503
+ // can register the same DO binding multiple times under the same logical
1504
+ // id — `binding()` is a plain `worker.bind` and intentionally has no
1505
+ // dedup. Collapse duplicates here so each `(logicalId, bindingName,
1506
+ // className)` tuple appears at most once. We also exclude cross-script
1507
+ // references: a `scriptName` pointing to *another* worker means this
1508
+ // worker just references a foreign class — ship the binding to
1509
+ // Cloudflare, but don't drive class migrations for it.
1510
+ const seen = new Set();
1511
+ return bindings.flatMap((binding) => (binding.data.bindings ?? []).flatMap((item) => {
1512
+ if (item.type !== "durable_object_namespace" ||
1513
+ !("className" in item) ||
1514
+ !item.className) {
1515
+ return [];
1516
+ }
1517
+ if (item.scriptName !== undefined && item.scriptName !== workerName) {
1518
+ return [];
1519
+ }
1520
+ const dedupKey = `${binding.sid}::${item.name}::${item.className}`;
1521
+ if (seen.has(dedupKey))
1522
+ return [];
1523
+ seen.add(dedupKey);
1524
+ return [
1404
1525
  {
1405
1526
  logicalId: binding.sid,
1406
1527
  bindingName: item.name,
1407
1528
  className: item.className,
1408
1529
  },
1409
- ]
1410
- : []));
1530
+ ];
1531
+ }));
1411
1532
  }
1412
1533
  function getDurableObjectTagMap(tags) {
1413
1534
  return Object.fromEntries(tags.flatMap((tag) => {