alchemy 2.0.0-beta.37 → 2.0.0-beta.39

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 (640) hide show
  1. package/bin/exec.js +488 -69
  2. package/bin/exec.js.map +1 -1
  3. package/lib/AWS/AutoScaling/LaunchTemplate.d.ts +1 -1
  4. package/lib/AWS/CloudWatch/common.d.ts +1 -1
  5. package/lib/AWS/Credentials.d.ts.map +1 -1
  6. package/lib/AWS/Credentials.js +1 -2
  7. package/lib/AWS/Credentials.js.map +1 -1
  8. package/lib/AWS/DynamoDB/Stream.d.ts.map +1 -1
  9. package/lib/AWS/DynamoDB/Stream.js +1 -1
  10. package/lib/AWS/DynamoDB/Stream.js.map +1 -1
  11. package/lib/AWS/EC2/Instance.d.ts +1 -1
  12. package/lib/AWS/EC2/hosted.d.ts +1 -1
  13. package/lib/AWS/EC2/hosted.d.ts.map +1 -1
  14. package/lib/AWS/EC2/hosted.js +3 -5
  15. package/lib/AWS/EC2/hosted.js.map +1 -1
  16. package/lib/AWS/ECS/Task.d.ts +1 -1
  17. package/lib/AWS/ECS/Task.d.ts.map +1 -1
  18. package/lib/AWS/ECS/Task.js +3 -5
  19. package/lib/AWS/ECS/Task.js.map +1 -1
  20. package/lib/AWS/Endpoint.d.ts.map +1 -1
  21. package/lib/AWS/Endpoint.js +1 -2
  22. package/lib/AWS/Endpoint.js.map +1 -1
  23. package/lib/AWS/Environment.d.ts +2 -2
  24. package/lib/AWS/EventBridge/EventSource.d.ts.map +1 -1
  25. package/lib/AWS/EventBridge/EventSource.js +1 -1
  26. package/lib/AWS/EventBridge/EventSource.js.map +1 -1
  27. package/lib/AWS/Kinesis/StreamEventSource.d.ts.map +1 -1
  28. package/lib/AWS/Kinesis/StreamEventSource.js +1 -1
  29. package/lib/AWS/Kinesis/StreamEventSource.js.map +1 -1
  30. package/lib/AWS/Lambda/BucketEventSource.d.ts +1 -1
  31. package/lib/AWS/Lambda/EventBridgeEventSource.d.ts +1 -1
  32. package/lib/AWS/Lambda/Function.d.ts +1 -1
  33. package/lib/AWS/Lambda/Function.d.ts.map +1 -1
  34. package/lib/AWS/Lambda/Function.js +7 -11
  35. package/lib/AWS/Lambda/Function.js.map +1 -1
  36. package/lib/AWS/Lambda/QueueEventSource.d.ts +1 -1
  37. package/lib/AWS/Lambda/StreamEventSource.d.ts +1 -1
  38. package/lib/AWS/Lambda/TableEventSource.d.ts +1 -1
  39. package/lib/AWS/Lambda/TopicEventSource.d.ts +1 -1
  40. package/lib/AWS/Organizations/common.d.ts +1 -1
  41. package/lib/AWS/Providers.d.ts.map +1 -1
  42. package/lib/AWS/Providers.js +21 -3
  43. package/lib/AWS/Providers.js.map +1 -1
  44. package/lib/AWS/Region.d.ts +1 -1
  45. package/lib/AWS/Region.d.ts.map +1 -1
  46. package/lib/AWS/Region.js +2 -3
  47. package/lib/AWS/Region.js.map +1 -1
  48. package/lib/AWS/S3/Bucket.d.ts.map +1 -1
  49. package/lib/AWS/S3/Bucket.js +5 -2
  50. package/lib/AWS/S3/Bucket.js.map +1 -1
  51. package/lib/AWS/S3/BucketNotifications.d.ts.map +1 -1
  52. package/lib/AWS/S3/BucketNotifications.js +1 -1
  53. package/lib/AWS/S3/BucketNotifications.js.map +1 -1
  54. package/lib/AWS/SNS/TopicEventSource.d.ts.map +1 -1
  55. package/lib/AWS/SNS/TopicEventSource.js +1 -1
  56. package/lib/AWS/SNS/TopicEventSource.js.map +1 -1
  57. package/lib/AWS/SQS/Queue.d.ts.map +1 -1
  58. package/lib/AWS/SQS/Queue.js +23 -5
  59. package/lib/AWS/SQS/Queue.js.map +1 -1
  60. package/lib/Action.d.ts +77 -0
  61. package/lib/Action.d.ts.map +1 -0
  62. package/lib/Action.js +89 -0
  63. package/lib/Action.js.map +1 -0
  64. package/lib/AlchemyContext.d.ts +1 -1
  65. package/lib/Apply.d.ts.map +1 -1
  66. package/lib/Apply.js +222 -3
  67. package/lib/Apply.js.map +1 -1
  68. package/lib/Artifacts.d.ts +1 -1
  69. package/lib/Artifacts.d.ts.map +1 -1
  70. package/lib/Artifacts.js +1 -1
  71. package/lib/Artifacts.js.map +1 -1
  72. package/lib/Auth/AuthProvider.js +1 -1
  73. package/lib/Auth/AuthProvider.js.map +1 -1
  74. package/lib/Auth/Env.d.ts.map +1 -1
  75. package/lib/Auth/Env.js +4 -12
  76. package/lib/Auth/Env.js.map +1 -1
  77. package/lib/Binding.d.ts.map +1 -1
  78. package/lib/Binding.js +5 -5
  79. package/lib/Binding.js.map +1 -1
  80. package/lib/Build/Command.d.ts +1 -1
  81. package/lib/Build/Memo.d.ts +1 -1
  82. package/lib/Bundle/Docker.d.ts +3 -3
  83. package/lib/Bundle/Docker.js +1 -1
  84. package/lib/Bundle/Docker.js.map +1 -1
  85. package/lib/Bundle/TempRoot.d.ts +3 -3
  86. package/lib/Cli/Event.d.ts +1 -1
  87. package/lib/Cli/Event.d.ts.map +1 -1
  88. package/lib/Cli/NamespaceTree.d.ts +11 -5
  89. package/lib/Cli/NamespaceTree.d.ts.map +1 -1
  90. package/lib/Cli/NamespaceTree.js +28 -1
  91. package/lib/Cli/NamespaceTree.js.map +1 -1
  92. package/lib/Cli/commands/_shared.d.ts +1 -1
  93. package/lib/Cli/commands/_shared.js +2 -2
  94. package/lib/Cli/commands/_shared.js.map +1 -1
  95. package/lib/Cli/commands/aws.d.ts +1 -1
  96. package/lib/Cli/commands/cloudflare.d.ts +2 -2
  97. package/lib/Cli/commands/cloudflare.d.ts.map +1 -1
  98. package/lib/Cli/commands/deploy.d.ts +9 -9
  99. package/lib/Cli/commands/deploy.js +1 -1
  100. package/lib/Cli/commands/deploy.js.map +1 -1
  101. package/lib/Cli/commands/login.d.ts +1 -1
  102. package/lib/Cli/commands/logs.d.ts +1 -1
  103. package/lib/Cli/commands/logs.js.map +1 -1
  104. package/lib/Cli/commands/profile.d.ts +1 -3
  105. package/lib/Cli/commands/profile.d.ts.map +1 -1
  106. package/lib/Cli/commands/state.d.ts +1 -1
  107. package/lib/Cli/commands/state.d.ts.map +1 -1
  108. package/lib/Cli/commands/tail.d.ts +1 -1
  109. package/lib/Cli/commands/tail.js.map +1 -1
  110. package/lib/Cli/tui/components/Plan.d.ts.map +1 -1
  111. package/lib/Cli/tui/components/Plan.js +27 -13
  112. package/lib/Cli/tui/components/Plan.js.map +1 -1
  113. package/lib/Cli/tui/components/PlanProgress.d.ts +8 -1
  114. package/lib/Cli/tui/components/PlanProgress.d.ts.map +1 -1
  115. package/lib/Cli/tui/components/PlanProgress.js +95 -16
  116. package/lib/Cli/tui/components/PlanProgress.js.map +1 -1
  117. package/lib/Cloudflare/Access.js +0 -1
  118. package/lib/Cloudflare/Access.js.map +1 -1
  119. package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.js +1 -1
  120. package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.js.map +1 -1
  121. package/lib/Cloudflare/Artifacts/ArtifactsBinding.js +1 -1
  122. package/lib/Cloudflare/Artifacts/ArtifactsBinding.js.map +1 -1
  123. package/lib/Cloudflare/CloudflareEnvironment.d.ts +1 -1
  124. package/lib/Cloudflare/Container/Container.js +0 -1
  125. package/lib/Cloudflare/Container/Container.js.map +1 -1
  126. package/lib/Cloudflare/Container/ContainerApplication.d.ts +1 -1
  127. package/lib/Cloudflare/Container/ContainerApplication.d.ts.map +1 -1
  128. package/lib/Cloudflare/Container/ContainerApplication.js +4 -6
  129. package/lib/Cloudflare/Container/ContainerApplication.js.map +1 -1
  130. package/lib/Cloudflare/Container/ContainerBinding.js +2 -2
  131. package/lib/Cloudflare/Container/ContainerBinding.js.map +1 -1
  132. package/lib/Cloudflare/D1/D1Database.d.ts +1 -1
  133. package/lib/Cloudflare/D1/D1SqlFile.d.ts +2 -2
  134. package/lib/Cloudflare/Email/EmailAddress.d.ts +45 -0
  135. package/lib/Cloudflare/Email/EmailAddress.d.ts.map +1 -0
  136. package/lib/Cloudflare/Email/EmailAddress.js +99 -0
  137. package/lib/Cloudflare/Email/EmailAddress.js.map +1 -0
  138. package/lib/Cloudflare/Email/EmailRouting.d.ts +42 -0
  139. package/lib/Cloudflare/Email/EmailRouting.d.ts.map +1 -0
  140. package/lib/Cloudflare/Email/EmailRouting.js +89 -0
  141. package/lib/Cloudflare/Email/EmailRouting.js.map +1 -0
  142. package/lib/Cloudflare/Email/EmailRule.d.ts +80 -0
  143. package/lib/Cloudflare/Email/EmailRule.d.ts.map +1 -0
  144. package/lib/Cloudflare/Email/EmailRule.js +110 -0
  145. package/lib/Cloudflare/Email/EmailRule.js.map +1 -0
  146. package/lib/Cloudflare/Email/SendEmail.d.ts +74 -0
  147. package/lib/Cloudflare/Email/SendEmail.d.ts.map +1 -0
  148. package/lib/Cloudflare/Email/SendEmail.js +19 -0
  149. package/lib/Cloudflare/Email/SendEmail.js.map +1 -0
  150. package/lib/Cloudflare/Email/SendEmailBinding.d.ts +64 -0
  151. package/lib/Cloudflare/Email/SendEmailBinding.d.ts.map +1 -0
  152. package/lib/Cloudflare/Email/SendEmailBinding.js +54 -0
  153. package/lib/Cloudflare/Email/SendEmailBinding.js.map +1 -0
  154. package/lib/Cloudflare/Email/index.d.ts +6 -0
  155. package/lib/Cloudflare/Email/index.d.ts.map +1 -0
  156. package/lib/Cloudflare/Email/index.js +6 -0
  157. package/lib/Cloudflare/Email/index.js.map +1 -0
  158. package/lib/Cloudflare/Hyperdrive/Hyperdrive.d.ts +1 -1
  159. package/lib/Cloudflare/Images/ImagesBinding.js +1 -1
  160. package/lib/Cloudflare/Images/ImagesBinding.js.map +1 -1
  161. package/lib/Cloudflare/KV/KVNamespaceBinding.js +1 -1
  162. package/lib/Cloudflare/KV/KVNamespaceBinding.js.map +1 -1
  163. package/lib/Cloudflare/Local/Sidecar.d.ts +1 -1
  164. package/lib/Cloudflare/Local/SidecarHandlers.d.ts +1 -1
  165. package/lib/Cloudflare/Local/SidecarServer.js +1 -1
  166. package/lib/Cloudflare/Local/SidecarServer.js.map +1 -1
  167. package/lib/Cloudflare/Providers.d.ts.map +1 -1
  168. package/lib/Cloudflare/Providers.js +6 -1
  169. package/lib/Cloudflare/Providers.js.map +1 -1
  170. package/lib/Cloudflare/Queue/QueueBinding.js +1 -1
  171. package/lib/Cloudflare/Queue/QueueBinding.js.map +1 -1
  172. package/lib/Cloudflare/R2/R2BucketBinding.js +1 -1
  173. package/lib/Cloudflare/R2/R2BucketBinding.js.map +1 -1
  174. package/lib/Cloudflare/SecretsStore/SecretBinding.js +1 -1
  175. package/lib/Cloudflare/SecretsStore/SecretBinding.js.map +1 -1
  176. package/lib/Cloudflare/StateStore/Api.d.ts +1 -1
  177. package/lib/Cloudflare/StateStore/State.d.ts +2 -2
  178. package/lib/Cloudflare/Workers/Assets.d.ts +2 -2
  179. package/lib/Cloudflare/Workers/Assets.d.ts.map +1 -1
  180. package/lib/Cloudflare/Workers/Assets.js +5 -4
  181. package/lib/Cloudflare/Workers/Assets.js.map +1 -1
  182. package/lib/Cloudflare/Workers/HttpServer.d.ts.map +1 -1
  183. package/lib/Cloudflare/Workers/HttpServer.js +25 -3
  184. package/lib/Cloudflare/Workers/HttpServer.js.map +1 -1
  185. package/lib/Cloudflare/Workers/InferEnv.d.ts +1 -1
  186. package/lib/Cloudflare/Workers/InferEnv.d.ts.map +1 -1
  187. package/lib/Cloudflare/Workers/Worker.d.ts +4 -3
  188. package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
  189. package/lib/Cloudflare/Workers/Worker.js +67 -32
  190. package/lib/Cloudflare/Workers/Worker.js.map +1 -1
  191. package/lib/Cloudflare/Workers/WorkerBundle.d.ts +1 -1
  192. package/lib/Cloudflare/Workers/WorkerBundle.d.ts.map +1 -1
  193. package/lib/Cloudflare/Workers/WorkerBundle.js +4 -6
  194. package/lib/Cloudflare/Workers/WorkerBundle.js.map +1 -1
  195. package/lib/Cloudflare/Workers/WorkerName.d.ts +1 -1
  196. package/lib/Cloudflare/Workers/Workflow.js +2 -2
  197. package/lib/Cloudflare/Workers/Workflow.js.map +1 -1
  198. package/lib/Cloudflare/index.d.ts +1 -0
  199. package/lib/Cloudflare/index.d.ts.map +1 -1
  200. package/lib/Cloudflare/index.js +1 -0
  201. package/lib/Cloudflare/index.js.map +1 -1
  202. package/lib/Construct.d.ts +3 -3
  203. package/lib/Construct.d.ts.map +1 -1
  204. package/lib/Construct.js.map +1 -1
  205. package/lib/Deploy.d.ts +1 -1
  206. package/lib/Destroy.d.ts +1 -1
  207. package/lib/Destroy.d.ts.map +1 -1
  208. package/lib/Destroy.js +1 -0
  209. package/lib/Destroy.js.map +1 -1
  210. package/lib/Drizzle/Providers.d.ts +1 -1
  211. package/lib/Drizzle/Schema.d.ts +1 -1
  212. package/lib/GitHub/Providers.d.ts +1 -1
  213. package/lib/Http.d.ts +1 -1
  214. package/lib/Http.d.ts.map +1 -1
  215. package/lib/Http.js +1 -1
  216. package/lib/Http.js.map +1 -1
  217. package/lib/Namespace.d.ts.map +1 -1
  218. package/lib/Namespace.js +3 -4
  219. package/lib/Namespace.js.map +1 -1
  220. package/lib/Neon/Branch.d.ts +2 -2
  221. package/lib/Neon/Branch.d.ts.map +1 -1
  222. package/lib/Neon/Branch.js +59 -27
  223. package/lib/Neon/Branch.js.map +1 -1
  224. package/lib/Neon/Credentials.d.ts +2 -2
  225. package/lib/Neon/Credentials.d.ts.map +1 -1
  226. package/lib/Neon/Credentials.js +2 -2
  227. package/lib/Neon/Credentials.js.map +1 -1
  228. package/lib/Neon/NeonEnvironment.d.ts +1 -1
  229. package/lib/Neon/Project.d.ts +25 -1
  230. package/lib/Neon/Project.d.ts.map +1 -1
  231. package/lib/Neon/Project.js +121 -42
  232. package/lib/Neon/Project.js.map +1 -1
  233. package/lib/Neon/Providers.d.ts +1 -1
  234. package/lib/Neon/SqlFile.d.ts +2 -2
  235. package/lib/Output.d.ts +3 -4
  236. package/lib/Output.d.ts.map +1 -1
  237. package/lib/Output.js +7 -4
  238. package/lib/Output.js.map +1 -1
  239. package/lib/PhysicalName.d.ts +1 -1
  240. package/lib/Plan.d.ts +36 -1
  241. package/lib/Plan.d.ts.map +1 -1
  242. package/lib/Plan.js +197 -31
  243. package/lib/Plan.js.map +1 -1
  244. package/lib/Platform.js +6 -6
  245. package/lib/Platform.js.map +1 -1
  246. package/lib/Provider.d.ts +1 -1
  247. package/lib/Provider.d.ts.map +1 -1
  248. package/lib/Provider.js +1 -1
  249. package/lib/Provider.js.map +1 -1
  250. package/lib/Random.d.ts +1 -1
  251. package/lib/Random.d.ts.map +1 -1
  252. package/lib/Random.js +1 -1
  253. package/lib/Random.js.map +1 -1
  254. package/lib/Resource.d.ts.map +1 -1
  255. package/lib/Resource.js +2 -25
  256. package/lib/Resource.js.map +1 -1
  257. package/lib/Runtime.d.ts +24 -0
  258. package/lib/Runtime.d.ts.map +1 -0
  259. package/lib/Runtime.js +31 -0
  260. package/lib/Runtime.js.map +1 -0
  261. package/lib/Secret.js +1 -1
  262. package/lib/Secret.js.map +1 -1
  263. package/lib/Sidecar/RpcClient.d.ts +1 -1
  264. package/lib/Sidecar/RpcPaths.d.ts +1 -1
  265. package/lib/Sidecar/RpcServer.d.ts +1 -1
  266. package/lib/Sidecar/RpcServices.d.ts +1 -1
  267. package/lib/Stack.d.ts +7 -2
  268. package/lib/Stack.d.ts.map +1 -1
  269. package/lib/Stack.js +4 -4
  270. package/lib/Stack.js.map +1 -1
  271. package/lib/State/ActionState.d.ts +48 -0
  272. package/lib/State/ActionState.d.ts.map +1 -0
  273. package/lib/State/ActionState.js +1 -0
  274. package/lib/State/ActionState.js.map +1 -0
  275. package/lib/State/HttpStateStore.d.ts.map +1 -1
  276. package/lib/State/HttpStateStore.js +1 -1
  277. package/lib/State/HttpStateStore.js.map +1 -1
  278. package/lib/State/InMemoryState.d.ts.map +1 -1
  279. package/lib/State/InMemoryState.js.map +1 -1
  280. package/lib/State/LocalState.d.ts +2 -2
  281. package/lib/State/ResourceState.d.ts +5 -0
  282. package/lib/State/ResourceState.d.ts.map +1 -1
  283. package/lib/State/State.d.ts +10 -2
  284. package/lib/State/State.d.ts.map +1 -1
  285. package/lib/State/State.js +2 -0
  286. package/lib/State/State.js.map +1 -1
  287. package/lib/State/index.d.ts +1 -0
  288. package/lib/State/index.d.ts.map +1 -1
  289. package/lib/State/index.js +1 -0
  290. package/lib/State/index.js.map +1 -1
  291. package/lib/Test/Core.d.ts +2 -2
  292. package/lib/Test/Core.d.ts.map +1 -1
  293. package/lib/Test/Core.js +4 -1
  294. package/lib/Test/Core.js.map +1 -1
  295. package/lib/Util/FileLogger.d.ts +1 -1
  296. package/lib/Util/effect.js +4 -4
  297. package/lib/Util/effect.js.map +1 -1
  298. package/lib/Util/exec.d.ts.map +1 -0
  299. package/lib/Util/exec.js.map +1 -0
  300. package/lib/Util/hash.d.ts +8 -0
  301. package/lib/Util/hash.d.ts.map +1 -0
  302. package/lib/Util/hash.js +11 -0
  303. package/lib/Util/hash.js.map +1 -0
  304. package/lib/Util/ignore.d.ts +40 -0
  305. package/lib/Util/ignore.d.ts.map +1 -0
  306. package/lib/Util/ignore.js +591 -0
  307. package/lib/Util/ignore.js.map +1 -0
  308. package/lib/index.d.ts +1 -0
  309. package/lib/index.d.ts.map +1 -1
  310. package/lib/index.js +1 -0
  311. package/lib/index.js.map +1 -1
  312. package/lib/tsconfig.test.tsbuildinfo +1 -1
  313. package/package.json +22 -28
  314. package/src/AWS/Credentials.ts +1 -2
  315. package/src/AWS/DynamoDB/Stream.ts +1 -4
  316. package/src/AWS/EC2/hosted.ts +14 -16
  317. package/src/AWS/ECS/Task.ts +14 -16
  318. package/src/AWS/Endpoint.ts +2 -5
  319. package/src/AWS/EventBridge/EventSource.ts +1 -4
  320. package/src/AWS/Kinesis/StreamEventSource.ts +1 -4
  321. package/src/AWS/Lambda/Function.ts +31 -35
  322. package/src/AWS/Providers.ts +22 -3
  323. package/src/AWS/Region.ts +2 -3
  324. package/src/AWS/S3/Bucket.ts +7 -2
  325. package/src/AWS/S3/BucketNotifications.ts +1 -4
  326. package/src/AWS/SNS/TopicEventSource.ts +1 -4
  327. package/src/AWS/SQS/Queue.ts +40 -6
  328. package/src/Action.ts +280 -0
  329. package/src/Apply.ts +351 -23
  330. package/src/Artifacts.ts +2 -4
  331. package/src/Auth/AuthProvider.ts +1 -1
  332. package/src/Auth/Env.ts +12 -20
  333. package/src/Binding.ts +5 -9
  334. package/src/Bundle/Docker.ts +1 -1
  335. package/src/Cli/Event.ts +4 -0
  336. package/src/Cli/NamespaceTree.ts +52 -5
  337. package/src/Cli/commands/_shared.ts +2 -2
  338. package/src/Cli/commands/deploy.ts +1 -1
  339. package/src/Cli/commands/logs.ts +4 -4
  340. package/src/Cli/commands/tail.ts +4 -4
  341. package/src/Cli/tui/components/Plan.tsx +65 -17
  342. package/src/Cli/tui/components/PlanProgress.tsx +142 -32
  343. package/src/Cloudflare/Access.ts +1 -1
  344. package/src/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.ts +1 -1
  345. package/src/Cloudflare/Artifacts/ArtifactsBinding.ts +1 -1
  346. package/src/Cloudflare/Container/Container.ts +1 -1
  347. package/src/Cloudflare/Container/ContainerApplication.ts +4 -6
  348. package/src/Cloudflare/Container/ContainerBinding.ts +2 -2
  349. package/src/Cloudflare/Email/EmailAddress.ts +155 -0
  350. package/src/Cloudflare/Email/EmailRouting.ts +138 -0
  351. package/src/Cloudflare/Email/EmailRule.ts +210 -0
  352. package/src/Cloudflare/Email/SendEmail.ts +95 -0
  353. package/src/Cloudflare/Email/SendEmailBinding.ts +124 -0
  354. package/src/Cloudflare/Email/index.ts +5 -0
  355. package/src/Cloudflare/Images/ImagesBinding.ts +1 -1
  356. package/src/Cloudflare/KV/KVNamespaceBinding.ts +1 -1
  357. package/src/Cloudflare/Local/SidecarServer.ts +1 -1
  358. package/src/Cloudflare/Providers.ts +9 -0
  359. package/src/Cloudflare/Queue/QueueBinding.ts +1 -1
  360. package/src/Cloudflare/R2/R2BucketBinding.ts +1 -1
  361. package/src/Cloudflare/SecretsStore/SecretBinding.ts +1 -1
  362. package/src/Cloudflare/Workers/Assets.ts +5 -6
  363. package/src/Cloudflare/Workers/HttpServer.ts +37 -5
  364. package/src/Cloudflare/Workers/InferEnv.ts +15 -11
  365. package/src/Cloudflare/Workers/Worker.ts +78 -36
  366. package/src/Cloudflare/Workers/WorkerBundle.ts +4 -6
  367. package/src/Cloudflare/Workers/Workflow.ts +2 -2
  368. package/src/Cloudflare/index.ts +1 -0
  369. package/src/Construct.ts +3 -7
  370. package/src/Destroy.ts +1 -0
  371. package/src/Http.ts +1 -1
  372. package/src/Namespace.ts +4 -4
  373. package/src/Neon/Branch.ts +93 -59
  374. package/src/Neon/Credentials.ts +2 -2
  375. package/src/Neon/Project.ts +193 -64
  376. package/src/Output.ts +9 -7
  377. package/src/Plan.ts +303 -53
  378. package/src/Platform.ts +7 -7
  379. package/src/Provider.ts +8 -3
  380. package/src/Random.ts +1 -1
  381. package/src/Resource.ts +2 -25
  382. package/src/Runtime.ts +38 -0
  383. package/src/Secret.ts +1 -1
  384. package/src/Stack.ts +10 -6
  385. package/src/State/ActionState.ts +51 -0
  386. package/src/State/HttpStateStore.ts +6 -2
  387. package/src/State/InMemoryState.ts +3 -3
  388. package/src/State/ResourceState.ts +5 -0
  389. package/src/State/State.ts +17 -2
  390. package/src/State/index.ts +1 -0
  391. package/src/Test/Core.ts +4 -3
  392. package/src/Util/effect.ts +4 -4
  393. package/src/Util/hash.ts +14 -0
  394. package/src/Util/ignore.ts +815 -0
  395. package/src/index.ts +6 -0
  396. package/lib/Agent/Agent.d.ts +0 -9
  397. package/lib/Agent/Agent.d.ts.map +0 -1
  398. package/lib/Agent/Agent.js +0 -10
  399. package/lib/Agent/Agent.js.map +0 -1
  400. package/lib/Agent/Aspect.d.ts +0 -51
  401. package/lib/Agent/Aspect.d.ts.map +0 -1
  402. package/lib/Agent/Aspect.js +0 -45
  403. package/lib/Agent/Aspect.js.map +0 -1
  404. package/lib/Agent/AspectGraph.d.ts +0 -45
  405. package/lib/Agent/AspectGraph.d.ts.map +0 -1
  406. package/lib/Agent/AspectGraph.js +0 -39
  407. package/lib/Agent/AspectGraph.js.map +0 -1
  408. package/lib/Agent/ContextPlugin.d.ts +0 -8
  409. package/lib/Agent/ContextPlugin.d.ts.map +0 -1
  410. package/lib/Agent/ContextPlugin.js +0 -3
  411. package/lib/Agent/ContextPlugin.js.map +0 -1
  412. package/lib/Agent/Plugin.d.ts +0 -18
  413. package/lib/Agent/Plugin.d.ts.map +0 -1
  414. package/lib/Agent/Plugin.js +0 -8
  415. package/lib/Agent/Plugin.js.map +0 -1
  416. package/lib/Agent/chat/channel.d.ts +0 -9
  417. package/lib/Agent/chat/channel.d.ts.map +0 -1
  418. package/lib/Agent/chat/channel.js +0 -10
  419. package/lib/Agent/chat/channel.js.map +0 -1
  420. package/lib/Agent/chat/event.d.ts +0 -32
  421. package/lib/Agent/chat/event.d.ts.map +0 -1
  422. package/lib/Agent/chat/event.js +0 -32
  423. package/lib/Agent/chat/event.js.map +0 -1
  424. package/lib/Agent/chat/message.d.ts +0 -22
  425. package/lib/Agent/chat/message.d.ts.map +0 -1
  426. package/lib/Agent/chat/message.js +0 -31
  427. package/lib/Agent/chat/message.js.map +0 -1
  428. package/lib/Agent/chat/service.d.ts +0 -102
  429. package/lib/Agent/chat/service.d.ts.map +0 -1
  430. package/lib/Agent/chat/service.js +0 -79
  431. package/lib/Agent/chat/service.js.map +0 -1
  432. package/lib/Agent/chat/thread.d.ts +0 -13
  433. package/lib/Agent/chat/thread.d.ts.map +0 -1
  434. package/lib/Agent/chat/thread.js +0 -16
  435. package/lib/Agent/chat/thread.js.map +0 -1
  436. package/lib/Agent/coding/bash.d.ts +0 -36
  437. package/lib/Agent/coding/bash.d.ts.map +0 -1
  438. package/lib/Agent/coding/bash.js +0 -170
  439. package/lib/Agent/coding/bash.js.map +0 -1
  440. package/lib/Agent/coding/edit.d.ts +0 -31
  441. package/lib/Agent/coding/edit.d.ts.map +0 -1
  442. package/lib/Agent/coding/edit.js +0 -90
  443. package/lib/Agent/coding/edit.js.map +0 -1
  444. package/lib/Agent/coding/glob.d.ts +0 -23
  445. package/lib/Agent/coding/glob.d.ts.map +0 -1
  446. package/lib/Agent/coding/glob.js +0 -78
  447. package/lib/Agent/coding/glob.js.map +0 -1
  448. package/lib/Agent/coding/grep.d.ts +0 -26
  449. package/lib/Agent/coding/grep.d.ts.map +0 -1
  450. package/lib/Agent/coding/grep.js +0 -105
  451. package/lib/Agent/coding/grep.js.map +0 -1
  452. package/lib/Agent/coding/index.d.ts +0 -8
  453. package/lib/Agent/coding/index.d.ts.map +0 -1
  454. package/lib/Agent/coding/index.js +0 -8
  455. package/lib/Agent/coding/index.js.map +0 -1
  456. package/lib/Agent/coding/read.d.ts +0 -27
  457. package/lib/Agent/coding/read.d.ts.map +0 -1
  458. package/lib/Agent/coding/read.js +0 -89
  459. package/lib/Agent/coding/read.js.map +0 -1
  460. package/lib/Agent/coding/readlints.d.ts +0 -19
  461. package/lib/Agent/coding/readlints.d.ts.map +0 -1
  462. package/lib/Agent/coding/readlints.js +0 -53
  463. package/lib/Agent/coding/readlints.js.map +0 -1
  464. package/lib/Agent/coding/write.d.ts +0 -22
  465. package/lib/Agent/coding/write.d.ts.map +0 -1
  466. package/lib/Agent/coding/write.js +0 -53
  467. package/lib/Agent/coding/write.js.map +0 -1
  468. package/lib/Agent/fs/file.d.ts +0 -12
  469. package/lib/Agent/fs/file.d.ts.map +0 -1
  470. package/lib/Agent/fs/file.js +0 -8
  471. package/lib/Agent/fs/file.js.map +0 -1
  472. package/lib/Agent/fs/folder.d.ts +0 -5
  473. package/lib/Agent/fs/folder.d.ts.map +0 -1
  474. package/lib/Agent/fs/folder.js +0 -3
  475. package/lib/Agent/fs/folder.js.map +0 -1
  476. package/lib/Agent/index.d.ts +0 -9
  477. package/lib/Agent/index.d.ts.map +0 -1
  478. package/lib/Agent/index.js +0 -9
  479. package/lib/Agent/index.js.map +0 -1
  480. package/lib/Agent/llm/error.d.ts +0 -208
  481. package/lib/Agent/llm/error.d.ts.map +0 -1
  482. package/lib/Agent/llm/error.js +0 -209
  483. package/lib/Agent/llm/error.js.map +0 -1
  484. package/lib/Agent/llm/index.d.ts +0 -5
  485. package/lib/Agent/llm/index.d.ts.map +0 -1
  486. package/lib/Agent/llm/index.js +0 -5
  487. package/lib/Agent/llm/index.js.map +0 -1
  488. package/lib/Agent/llm/llm.d.ts +0 -32
  489. package/lib/Agent/llm/llm.d.ts.map +0 -1
  490. package/lib/Agent/llm/llm.js +0 -74
  491. package/lib/Agent/llm/llm.js.map +0 -1
  492. package/lib/Agent/llm/stream-collectors.d.ts +0 -46
  493. package/lib/Agent/llm/stream-collectors.d.ts.map +0 -1
  494. package/lib/Agent/llm/stream-collectors.js +0 -33
  495. package/lib/Agent/llm/stream-collectors.js.map +0 -1
  496. package/lib/Agent/llm/stream-text-part.d.ts +0 -5
  497. package/lib/Agent/llm/stream-text-part.d.ts.map +0 -1
  498. package/lib/Agent/llm/stream-text-part.js +0 -4
  499. package/lib/Agent/llm/stream-text-part.js.map +0 -1
  500. package/lib/Agent/lsp/client.d.ts +0 -122
  501. package/lib/Agent/lsp/client.d.ts.map +0 -1
  502. package/lib/Agent/lsp/client.js +0 -180
  503. package/lib/Agent/lsp/client.js.map +0 -1
  504. package/lib/Agent/lsp/diagnostics.d.ts +0 -16
  505. package/lib/Agent/lsp/diagnostics.d.ts.map +0 -1
  506. package/lib/Agent/lsp/diagnostics.js +0 -48
  507. package/lib/Agent/lsp/diagnostics.js.map +0 -1
  508. package/lib/Agent/lsp/jsonrpc.d.ts +0 -90
  509. package/lib/Agent/lsp/jsonrpc.d.ts.map +0 -1
  510. package/lib/Agent/lsp/jsonrpc.js +0 -178
  511. package/lib/Agent/lsp/jsonrpc.js.map +0 -1
  512. package/lib/Agent/lsp/manager.d.ts +0 -38
  513. package/lib/Agent/lsp/manager.d.ts.map +0 -1
  514. package/lib/Agent/lsp/manager.js +0 -98
  515. package/lib/Agent/lsp/manager.js.map +0 -1
  516. package/lib/Agent/lsp/servers.d.ts +0 -28
  517. package/lib/Agent/lsp/servers.d.ts.map +0 -1
  518. package/lib/Agent/lsp/servers.js +0 -21
  519. package/lib/Agent/lsp/servers.js.map +0 -1
  520. package/lib/Agent/process/driver.d.ts +0 -10
  521. package/lib/Agent/process/driver.d.ts.map +0 -1
  522. package/lib/Agent/process/driver.js +0 -153
  523. package/lib/Agent/process/driver.js.map +0 -1
  524. package/lib/Agent/process/issue-service.d.ts +0 -44
  525. package/lib/Agent/process/issue-service.d.ts.map +0 -1
  526. package/lib/Agent/process/issue-service.js +0 -28
  527. package/lib/Agent/process/issue-service.js.map +0 -1
  528. package/lib/Agent/process/issue-tools.d.ts +0 -28
  529. package/lib/Agent/process/issue-tools.d.ts.map +0 -1
  530. package/lib/Agent/process/issue-tools.js +0 -28
  531. package/lib/Agent/process/issue-tools.js.map +0 -1
  532. package/lib/Agent/process/issue.d.ts +0 -16
  533. package/lib/Agent/process/issue.d.ts.map +0 -1
  534. package/lib/Agent/process/issue.js +0 -17
  535. package/lib/Agent/process/issue.js.map +0 -1
  536. package/lib/Agent/process/organization.d.ts +0 -4
  537. package/lib/Agent/process/organization.d.ts.map +0 -1
  538. package/lib/Agent/process/organization.js +0 -3
  539. package/lib/Agent/process/organization.js.map +0 -1
  540. package/lib/Agent/process/process.d.ts +0 -5
  541. package/lib/Agent/process/process.d.ts.map +0 -1
  542. package/lib/Agent/process/process.js +0 -3
  543. package/lib/Agent/process/process.js.map +0 -1
  544. package/lib/Agent/process/reply.d.ts +0 -16
  545. package/lib/Agent/process/reply.d.ts.map +0 -1
  546. package/lib/Agent/process/reply.js +0 -18
  547. package/lib/Agent/process/reply.js.map +0 -1
  548. package/lib/Agent/process/task.d.ts +0 -25
  549. package/lib/Agent/process/task.d.ts.map +0 -1
  550. package/lib/Agent/process/task.js +0 -26
  551. package/lib/Agent/process/task.js.map +0 -1
  552. package/lib/Agent/tool/index.d.ts +0 -4
  553. package/lib/Agent/tool/index.d.ts.map +0 -1
  554. package/lib/Agent/tool/index.js +0 -4
  555. package/lib/Agent/tool/index.js.map +0 -1
  556. package/lib/Agent/tool/parameter.d.ts +0 -12
  557. package/lib/Agent/tool/parameter.d.ts.map +0 -1
  558. package/lib/Agent/tool/parameter.js +0 -6
  559. package/lib/Agent/tool/parameter.js.map +0 -1
  560. package/lib/Agent/tool/result.d.ts +0 -17
  561. package/lib/Agent/tool/result.d.ts.map +0 -1
  562. package/lib/Agent/tool/result.js +0 -6
  563. package/lib/Agent/tool/result.js.map +0 -1
  564. package/lib/Agent/tool/tool.d.ts +0 -32
  565. package/lib/Agent/tool/tool.d.ts.map +0 -1
  566. package/lib/Agent/tool/tool.js +0 -16
  567. package/lib/Agent/tool/tool.js.map +0 -1
  568. package/lib/Agent/util/command-validator.d.ts +0 -12
  569. package/lib/Agent/util/command-validator.d.ts.map +0 -1
  570. package/lib/Agent/util/command-validator.js +0 -74
  571. package/lib/Agent/util/command-validator.js.map +0 -1
  572. package/lib/Agent/util/exec.d.ts.map +0 -1
  573. package/lib/Agent/util/exec.js.map +0 -1
  574. package/lib/Agent/util/parser.d.ts +0 -5
  575. package/lib/Agent/util/parser.d.ts.map +0 -1
  576. package/lib/Agent/util/parser.js +0 -41
  577. package/lib/Agent/util/parser.js.map +0 -1
  578. package/lib/Agent/util/replace.d.ts +0 -38
  579. package/lib/Agent/util/replace.d.ts.map +0 -1
  580. package/lib/Agent/util/replace.js +0 -458
  581. package/lib/Agent/util/replace.js.map +0 -1
  582. package/lib/Agent/util/ripgrep.d.ts +0 -109
  583. package/lib/Agent/util/ripgrep.d.ts.map +0 -1
  584. package/lib/Agent/util/ripgrep.js +0 -221
  585. package/lib/Agent/util/ripgrep.js.map +0 -1
  586. package/lib/Neon/api.d.ts +0 -258
  587. package/lib/Neon/api.d.ts.map +0 -1
  588. package/lib/Neon/api.js +0 -215
  589. package/lib/Neon/api.js.map +0 -1
  590. package/src/Agent/Agent.ts +0 -26
  591. package/src/Agent/Aspect.ts +0 -173
  592. package/src/Agent/AspectGraph.ts +0 -98
  593. package/src/Agent/ContextPlugin.ts +0 -18
  594. package/src/Agent/Plugin.ts +0 -29
  595. package/src/Agent/chat/channel.ts +0 -26
  596. package/src/Agent/chat/event.ts +0 -43
  597. package/src/Agent/chat/message.ts +0 -35
  598. package/src/Agent/chat/service.ts +0 -133
  599. package/src/Agent/chat/thread.ts +0 -17
  600. package/src/Agent/coding/bash.ts +0 -197
  601. package/src/Agent/coding/edit.ts +0 -152
  602. package/src/Agent/coding/glob.ts +0 -96
  603. package/src/Agent/coding/grep.ts +0 -143
  604. package/src/Agent/coding/index.ts +0 -7
  605. package/src/Agent/coding/read.ts +0 -119
  606. package/src/Agent/coding/readlints.ts +0 -78
  607. package/src/Agent/coding/write.ts +0 -79
  608. package/src/Agent/fs/file.ts +0 -22
  609. package/src/Agent/fs/folder.ts +0 -16
  610. package/src/Agent/index.ts +0 -9
  611. package/src/Agent/llm/error.ts +0 -330
  612. package/src/Agent/llm/index.ts +0 -4
  613. package/src/Agent/llm/llm.ts +0 -131
  614. package/src/Agent/llm/stream-collectors.ts +0 -58
  615. package/src/Agent/llm/stream-text-part.ts +0 -7
  616. package/src/Agent/lsp/client.ts +0 -293
  617. package/src/Agent/lsp/diagnostics.ts +0 -64
  618. package/src/Agent/lsp/jsonrpc.ts +0 -317
  619. package/src/Agent/lsp/manager.ts +0 -213
  620. package/src/Agent/lsp/servers.ts +0 -37
  621. package/src/Agent/process/driver.ts +0 -168
  622. package/src/Agent/process/issue-service.ts +0 -48
  623. package/src/Agent/process/issue-tools.ts +0 -33
  624. package/src/Agent/process/issue.ts +0 -22
  625. package/src/Agent/process/organization.ts +0 -16
  626. package/src/Agent/process/process.ts +0 -16
  627. package/src/Agent/process/reply.ts +0 -21
  628. package/src/Agent/process/task.ts +0 -34
  629. package/src/Agent/tool/index.ts +0 -3
  630. package/src/Agent/tool/parameter.ts +0 -35
  631. package/src/Agent/tool/result.ts +0 -51
  632. package/src/Agent/tool/tool.ts +0 -74
  633. package/src/Agent/util/command-validator.ts +0 -98
  634. package/src/Agent/util/parser.ts +0 -39
  635. package/src/Agent/util/replace.ts +0 -559
  636. package/src/Agent/util/ripgrep.ts +0 -256
  637. package/src/Neon/api.ts +0 -579
  638. /package/lib/{Agent/util → Util}/exec.d.ts +0 -0
  639. /package/lib/{Agent/util → Util}/exec.js +0 -0
  640. /package/src/{Agent/util → Util}/exec.ts +0 -0
@@ -0,0 +1,124 @@
1
+ import type * as runtime from "@cloudflare/workers-types";
2
+ import * as Data from "effect/Data";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Layer from "effect/Layer";
5
+ import * as Binding from "../../Binding.ts";
6
+ import type { ResourceLike } from "../../Resource.ts";
7
+ import { isWorker, WorkerEnvironment } from "../Workers/Worker.ts";
8
+ import type { SendEmail } from "./SendEmail.ts";
9
+
10
+ /**
11
+ * Email body shape for the builder-form `send` call. Either `text`, `html`,
12
+ * or both must be provided.
13
+ */
14
+ export interface SendEmailMessage {
15
+ from: string | runtime.EmailAddress;
16
+ to: string | string[];
17
+ subject: string;
18
+ replyTo?: string | runtime.EmailAddress;
19
+ cc?: string | string[];
20
+ bcc?: string | string[];
21
+ headers?: Record<string, string>;
22
+ text?: string;
23
+ html?: string;
24
+ attachments?: runtime.EmailAttachment[];
25
+ }
26
+
27
+ export class SendEmailError extends Data.TaggedError("SendEmailError")<{
28
+ message: string;
29
+ cause?: unknown;
30
+ }> {}
31
+
32
+ export interface SendEmailClient {
33
+ /**
34
+ * The raw runtime `SendEmail` binding. Use this when you need direct
35
+ * access to the Cloudflare object (e.g. to send a pre-built
36
+ * `EmailMessage` from `cloudflare:email`).
37
+ */
38
+ raw: Effect.Effect<runtime.SendEmail, never, WorkerEnvironment>;
39
+ /**
40
+ * Send an email using the builder form. Equivalent to calling
41
+ * `env.<name>.send({ from, to, subject, text, html, ... })`.
42
+ */
43
+ send(
44
+ message: SendEmailMessage,
45
+ ): Effect.Effect<runtime.EmailSendResult, SendEmailError, WorkerEnvironment>;
46
+ /**
47
+ * Send a raw `EmailMessage` (constructed via `cloudflare:email`).
48
+ */
49
+ sendRaw(
50
+ message: runtime.EmailMessage,
51
+ ): Effect.Effect<runtime.EmailSendResult, SendEmailError, WorkerEnvironment>;
52
+ }
53
+
54
+ /**
55
+ * A typed runtime accessor for a Cloudflare `send_email` Worker binding.
56
+ *
57
+ * @binding
58
+ */
59
+ export class SendEmailBinding extends Binding.Service<
60
+ SendEmailBinding,
61
+ (sender: SendEmail) => Effect.Effect<SendEmailClient>
62
+ >()("Cloudflare.SendEmail.Binding") {}
63
+
64
+ export const SendEmailBindingLive = Layer.effect(
65
+ SendEmailBinding,
66
+ Effect.gen(function* () {
67
+ const bind = yield* SendEmailBindingPolicy;
68
+
69
+ return Effect.fnUntraced(function* (sender: SendEmail) {
70
+ yield* bind(sender);
71
+
72
+ const raw = WorkerEnvironment.useSync(
73
+ (env) => (env as Record<string, runtime.SendEmail>)[sender.name]!,
74
+ );
75
+
76
+ const tryPromise = <T>(
77
+ fn: () => Promise<T>,
78
+ ): Effect.Effect<T, SendEmailError> =>
79
+ Effect.tryPromise({
80
+ try: fn,
81
+ catch: (error: any) =>
82
+ new SendEmailError({
83
+ message: error?.message ?? "Unknown send_email error",
84
+ cause: error,
85
+ }),
86
+ });
87
+
88
+ return {
89
+ raw,
90
+ send: (message: SendEmailMessage) =>
91
+ raw.pipe(Effect.flatMap((s) => tryPromise(() => s.send(message)))),
92
+ sendRaw: (message: runtime.EmailMessage) =>
93
+ raw.pipe(Effect.flatMap((s) => tryPromise(() => s.send(message)))),
94
+ } satisfies SendEmailClient;
95
+ });
96
+ }),
97
+ );
98
+
99
+ export class SendEmailBindingPolicy extends Binding.Policy<
100
+ SendEmailBindingPolicy,
101
+ (sender: SendEmail) => Effect.Effect<void>
102
+ >()("Cloudflare.SendEmail.Binding") {}
103
+
104
+ export const SendEmailBindingPolicyLive = SendEmailBindingPolicy.layer.succeed(
105
+ Effect.fnUntraced(function* (host: ResourceLike, sender: SendEmail) {
106
+ if (isWorker(host)) {
107
+ yield* host.bind(sender.name, {
108
+ bindings: [
109
+ {
110
+ type: "send_email",
111
+ name: sender.name,
112
+ destinationAddress: sender.destinationAddress,
113
+ allowedDestinationAddresses: sender.allowedDestinationAddresses,
114
+ allowedSenderAddresses: sender.allowedSenderAddresses,
115
+ },
116
+ ],
117
+ });
118
+ } else {
119
+ return yield* Effect.die(
120
+ new Error(`SendEmailBinding does not support runtime '${host.Type}'`),
121
+ );
122
+ }
123
+ }),
124
+ );
@@ -0,0 +1,5 @@
1
+ export * from "./EmailAddress.ts";
2
+ export * from "./EmailRouting.ts";
3
+ export * from "./EmailRule.ts";
4
+ export * from "./SendEmail.ts";
5
+ export * from "./SendEmailBinding.ts";
@@ -87,7 +87,7 @@ export const ImagesBindingLive = Layer.effect(
87
87
 
88
88
  return Effect.fn(function* (images: ImagesLike) {
89
89
  yield* Policy(images);
90
- const env = WorkerEnvironment.asEffect();
90
+ const env = WorkerEnvironment;
91
91
  const raw = env.pipe(
92
92
  Effect.map(
93
93
  (env) => (env as Record<string, cf.ImagesBinding>)[images.name]!,
@@ -229,7 +229,7 @@ export const KVNamespaceBindingLive = Layer.effect(
229
229
 
230
230
  return Effect.fn(function* (bucket: KVNamespace) {
231
231
  yield* bind(bucket);
232
- const env = WorkerEnvironment.asEffect();
232
+ const env = WorkerEnvironment;
233
233
  const raw = env.pipe(
234
234
  Effect.map(
235
235
  (env) =>
@@ -55,7 +55,7 @@ const services = Layer.provideMerge(
55
55
  PlatformServices,
56
56
  );
57
57
 
58
- RpcServer.makeRpcServer(Sidecar.asEffect(), SidecarSchema).pipe(
58
+ RpcServer.makeRpcServer(Sidecar, SidecarSchema).pipe(
59
59
  Effect.provide(services),
60
60
  Effect.scoped,
61
61
  runMain,
@@ -21,6 +21,7 @@ import * as CloudflareEnvironment from "./CloudflareEnvironment.ts";
21
21
  import * as Containers from "./Container/index.ts";
22
22
  import * as Credentials from "./Credentials.ts";
23
23
  import * as D1 from "./D1/index.ts";
24
+ import * as Email from "./Email/index.ts";
24
25
  import * as Hyperdrive from "./Hyperdrive/index.ts";
25
26
  import * as Images from "./Images/index.ts";
26
27
  import * as KV from "./KV/index.ts";
@@ -57,6 +58,10 @@ export const providers = () =>
57
58
  Containers.Container,
58
59
  D1.D1ConnectionPolicy,
59
60
  D1.D1Database,
61
+ Email.EmailAddress,
62
+ Email.EmailRouting,
63
+ Email.EmailRule,
64
+ Email.SendEmailBindingPolicy,
60
65
  Hyperdrive.Hyperdrive,
61
66
  Hyperdrive.HyperdriveBindingPolicy,
62
67
  Images.ImagesBindingPolicy,
@@ -92,6 +97,10 @@ export const providers = () =>
92
97
  Containers.ContainerProvider(),
93
98
  D1.D1ConnectionPolicyLive,
94
99
  D1.DatabaseProvider(),
100
+ Email.EmailAddressProvider(),
101
+ Email.EmailRoutingProvider(),
102
+ Email.EmailRuleProvider(),
103
+ Email.SendEmailBindingPolicyLive,
95
104
  Hyperdrive.HyperdriveBindingPolicyLive,
96
105
  Hyperdrive.HyperdriveProvider(),
97
106
  Images.ImagesBindingPolicyLive,
@@ -71,7 +71,7 @@ export const QueueBindingLive = Layer.effect(
71
71
 
72
72
  return Effect.fn(function* (queue: Queue) {
73
73
  yield* bind(queue);
74
- const env = WorkerEnvironment.asEffect();
74
+ const env = WorkerEnvironment;
75
75
  const raw = env.pipe(
76
76
  Effect.map((env) => (env as Record<string, any>)[queue.LogicalId]),
77
77
  );
@@ -146,7 +146,7 @@ export const R2BucketBindingLive = Layer.effect(
146
146
 
147
147
  return Effect.fn(function* (bucket: R2Bucket) {
148
148
  yield* bind(bucket);
149
- const env = WorkerEnvironment.asEffect();
149
+ const env = WorkerEnvironment;
150
150
  const raw = env.pipe(
151
151
  Effect.map(
152
152
  (env) => (env as Record<string, runtime.R2Bucket>)[bucket.LogicalId],
@@ -45,7 +45,7 @@ export const SecretBindingLive = Layer.effect(
45
45
 
46
46
  return Effect.fn(function* (secret: Secret) {
47
47
  yield* bind(secret);
48
- const env = WorkerEnvironment.asEffect();
48
+ const env = WorkerEnvironment;
49
49
  const raw = env.pipe(
50
50
  Effect.map(
51
51
  (env) =>
@@ -6,6 +6,7 @@ import * as Path from "effect/Path";
6
6
  import type { PlatformError } from "effect/PlatformError";
7
7
  import type { ScopedPlanStatusSession } from "../../Cli/Cli.ts";
8
8
  import { sha256, sha256Object } from "../../Util/index.ts";
9
+ import createIgnore from "../../Util/ignore.ts";
9
10
 
10
11
  const MAX_ASSET_SIZE = 1024 * 1024 * 25; // 25MB
11
12
  const MAX_ASSET_COUNT = 20_000;
@@ -97,12 +98,10 @@ const maybeReadString = Effect.fnUntraced(function* (file: string) {
97
98
  );
98
99
  });
99
100
 
100
- const createIgnoreMatcher = Effect.fnUntraced(function* (patterns: string[]) {
101
- const matcher = yield* Effect.promise(() =>
102
- import("ignore").then(({ default: ignore }) => ignore().add(patterns)),
103
- );
101
+ const createIgnoreMatcher = (patterns: string[]) => {
102
+ const matcher = createIgnore().add(patterns);
104
103
  return (file: string) => matcher.ignores(file);
105
- });
104
+ };
106
105
 
107
106
  export const readAssets = Effect.fnUntraced(function* (props: AssetsProps) {
108
107
  const fs = yield* FileSystem.FileSystem;
@@ -114,7 +113,7 @@ export const readAssets = Effect.fnUntraced(function* (props: AssetsProps) {
114
113
  maybeReadString(path.join(resolvedDirectory, "_headers")),
115
114
  maybeReadString(path.join(resolvedDirectory, "_redirects")),
116
115
  ]);
117
- const ignores = yield* createIgnoreMatcher([
116
+ const ignores = createIgnoreMatcher([
118
117
  ".assetsignore",
119
118
  "_headers",
120
119
  "_redirects",
@@ -1,9 +1,12 @@
1
1
  import type * as cf from "@cloudflare/workers-types";
2
2
  import * as Cause from "effect/Cause";
3
+ import * as Context from "effect/Context";
3
4
  import * as Effect from "effect/Effect";
4
5
  import * as Option from "effect/Option";
5
6
  import type { Scope } from "effect/Scope";
6
7
  import type { HttpBodyError } from "effect/unstable/http/HttpBody";
8
+ import * as EffectHttp from "effect/unstable/http/HttpEffect";
9
+ import { ClientAbort } from "effect/unstable/http/HttpServerError";
7
10
  import * as HttpServerError from "effect/unstable/http/HttpServerError";
8
11
  import * as HttpServerRequest from "effect/unstable/http/HttpServerRequest";
9
12
  import * as HttpServerResponse from "effect/unstable/http/HttpServerResponse";
@@ -48,6 +51,10 @@ export const serveWebRequest = <Req = never>(
48
51
  Exclude<Req, HttpServerRequest.HttpServerRequest | Scope>
49
52
  > =>
50
53
  Effect.gen(function* () {
54
+ const context =
55
+ yield* Effect.context<
56
+ Exclude<Req, HttpServerRequest.HttpServerRequest | Scope>
57
+ >();
51
58
  const request = HttpServerRequest.fromWeb(
52
59
  webRequest as any as globalThis.Request,
53
60
  ).modify({
@@ -61,9 +68,7 @@ export const serveWebRequest = <Req = never>(
61
68
  }),
62
69
  });
63
70
 
64
- const response = yield* handler.pipe(
65
- Effect.provideService(HttpServerRequest.HttpServerRequest, request),
66
- Effect.provideService(Request, webRequest as any),
71
+ const safeHandler = handler.pipe(
67
72
  Effect.catchCause((cause) => {
68
73
  const message = Option.match(Cause.findErrorOption(cause), {
69
74
  onNone: () => "Internal Server Error",
@@ -81,7 +86,34 @@ export const serveWebRequest = <Req = never>(
81
86
  }),
82
87
  );
83
88
 
84
- return HttpServerResponse.toWeb(response, {
85
- context: yield* Effect.context(),
89
+ const resolveSymbol = Symbol.for("@effect/platform/HttpApp/resolve");
90
+ const httpApp = EffectHttp.toHandled(safeHandler, (request, response) => {
91
+ response = EffectHttp.scopeTransferToStream(response);
92
+ (request as any)[resolveSymbol](
93
+ HttpServerResponse.toWeb(response, {
94
+ withoutBody: request.method === "HEAD",
95
+ context,
96
+ }),
97
+ );
98
+ return Effect.void;
99
+ });
100
+
101
+ return yield* Effect.promise(() => {
102
+ return new Promise<Response>((resolve) => {
103
+ const contextMap = new Map<string, any>(context.mapUnsafe);
104
+ contextMap.set(HttpServerRequest.HttpServerRequest.key, request);
105
+ contextMap.set(Request.key, webRequest);
106
+ (request as any)[resolveSymbol] = resolve;
107
+ const fiber = Effect.runForkWith(Context.makeUnsafe(contextMap))(
108
+ httpApp as any,
109
+ );
110
+ webRequest.signal?.addEventListener(
111
+ "abort",
112
+ () => {
113
+ fiber.interruptUnsafe(undefined, ClientAbort.annotation);
114
+ },
115
+ { once: true },
116
+ );
117
+ });
86
118
  });
87
119
  }) as any;
@@ -97,14 +97,18 @@ export type GetBindingType<T> = T extends Cloudflare.Assets
97
97
  ? Queue<unknown>
98
98
  : T extends Cloudflare.AiGateway
99
99
  ? Ai
100
- : T extends Cloudflare.AnalyticsEngineDataset
101
- ? AnalyticsEngineDataset
102
- : T extends Cloudflare.Artifacts
103
- ? Artifacts
104
- : T extends Cloudflare.Images
105
- ? ImagesBinding
106
- : T extends Cloudflare.Hyperdrive
107
- ? Hyperdrive
108
- : T extends Cloudflare.DurableObjectNamespaceLike
109
- ? DurableObjectNamespace<Exclude<T["Shape"], undefined>>
110
- : never;
100
+ : T extends Cloudflare.SendEmail
101
+ ? SendEmail
102
+ : T extends Cloudflare.AnalyticsEngineDataset
103
+ ? AnalyticsEngineDataset
104
+ : T extends Cloudflare.Artifacts
105
+ ? Artifacts
106
+ : T extends Cloudflare.Images
107
+ ? ImagesBinding
108
+ : T extends Cloudflare.Hyperdrive
109
+ ? Hyperdrive
110
+ : T extends Cloudflare.DurableObjectNamespaceLike
111
+ ? DurableObjectNamespace<
112
+ Exclude<T["Shape"], undefined>
113
+ >
114
+ : never;
@@ -35,11 +35,11 @@ import {
35
35
  type PlatformProps,
36
36
  type Rpc,
37
37
  } from "../../Platform.ts";
38
- import { isYieldableEffectLike } from "../../Util/effect.ts";
39
38
  import * as Provider from "../../Provider.ts";
40
39
  import { Resource, type ResourceBinding } from "../../Resource.ts";
41
40
  import * as Serverless from "../../Serverless/index.ts";
42
41
  import { Stack } from "../../Stack.ts";
42
+ import { isYieldableEffectLike } from "../../Util/effect.ts";
43
43
  import type { AiGateway } from "../AiGateway/AiGateway.ts";
44
44
  import {
45
45
  isAnalyticsEngineDataset,
@@ -51,7 +51,7 @@ import {
51
51
  } from "../Artifacts/Artifacts.ts";
52
52
  import { CloudflareEnvironment } from "../CloudflareEnvironment.ts";
53
53
  import { D1Database } from "../D1/D1Database.ts";
54
- import { fromCloudflareFetcher } from "../Fetcher.ts";
54
+ import { isSendEmail, type SendEmail } from "../Email/SendEmail.ts";
55
55
  import type {
56
56
  Hyperdrive,
57
57
  HyperdriveDevOrigin,
@@ -202,6 +202,7 @@ export type WorkerBindingResource =
202
202
  | CloudflareQueue
203
203
  | AiGateway
204
204
  | AnalyticsEngineDataset
205
+ | SendEmail
205
206
  | ArtifactsBinding
206
207
  | ImagesBinding
207
208
  | Hyperdrive
@@ -780,62 +781,71 @@ export const Worker: Platform<
780
781
  name: bindingName,
781
782
  dataset: binding.dataset,
782
783
  }
783
- : isDurableObjectNamespaceLike(binding)
784
+ : isSendEmail(binding)
784
785
  ? {
785
- type: "durable_object_namespace",
786
+ type: "send_email",
786
787
  name: bindingName,
787
- className: binding.className ?? binding.name,
788
+ destinationAddress: binding.destinationAddress,
789
+ allowedDestinationAddresses:
790
+ binding.allowedDestinationAddresses,
791
+ allowedSenderAddresses: binding.allowedSenderAddresses,
788
792
  }
789
- : binding.Type === "Cloudflare.D1Database"
793
+ : isDurableObjectNamespaceLike(binding)
790
794
  ? {
791
- type: "d1",
792
- id: binding.databaseId,
795
+ type: "durable_object_namespace",
793
796
  name: bindingName,
797
+ className: binding.className ?? binding.name,
794
798
  }
795
- : binding.Type === "Cloudflare.R2Bucket"
799
+ : binding.Type === "Cloudflare.D1Database"
796
800
  ? {
797
- type: "r2_bucket",
801
+ type: "d1",
802
+ id: binding.databaseId,
798
803
  name: bindingName,
799
- bucketName: binding.bucketName,
800
- jurisdiction: binding.jurisdiction.pipe(
801
- Output.map((jurisdiction) =>
802
- jurisdiction === "default"
803
- ? undefined
804
- : jurisdiction,
805
- ),
806
- ),
807
804
  }
808
- : binding.Type === "Cloudflare.KVNamespace"
805
+ : binding.Type === "Cloudflare.R2Bucket"
809
806
  ? {
810
- type: "kv_namespace",
807
+ type: "r2_bucket",
811
808
  name: bindingName,
812
- namespaceId: binding.namespaceId,
809
+ bucketName: binding.bucketName,
810
+ jurisdiction: binding.jurisdiction.pipe(
811
+ Output.map((jurisdiction) =>
812
+ jurisdiction === "default"
813
+ ? undefined
814
+ : jurisdiction,
815
+ ),
816
+ ),
813
817
  }
814
- : binding.Type === "Cloudflare.Queue"
818
+ : binding.Type === "Cloudflare.KVNamespace"
815
819
  ? {
816
- type: "queue",
820
+ type: "kv_namespace",
817
821
  name: bindingName,
818
- queueName: binding.queueName,
822
+ namespaceId: binding.namespaceId,
819
823
  }
820
- : binding.Type === "Cloudflare.AiGateway"
824
+ : binding.Type === "Cloudflare.Queue"
821
825
  ? {
822
- type: "ai",
826
+ type: "queue",
823
827
  name: bindingName,
828
+ queueName: binding.queueName,
824
829
  }
825
- : binding.Type === "Cloudflare.Hyperdrive"
830
+ : binding.Type === "Cloudflare.AiGateway"
826
831
  ? {
827
- type: "hyperdrive",
832
+ type: "ai",
828
833
  name: bindingName,
829
- id: binding.hyperdriveId,
830
834
  }
831
- : isWorker(binding)
835
+ : binding.Type === "Cloudflare.Hyperdrive"
832
836
  ? {
833
- type: "service",
837
+ type: "hyperdrive",
834
838
  name: bindingName,
835
- service: binding.workerName,
839
+ id: binding.hyperdriveId,
836
840
  }
837
- : // TODO(sam): handle others
838
- undefined;
841
+ : isWorker(binding)
842
+ ? {
843
+ type: "service",
844
+ name: bindingName,
845
+ service: binding.workerName,
846
+ }
847
+ : // TODO(sam): handle others
848
+ undefined;
839
849
 
840
850
  if (bindingMeta) {
841
851
  yield* resource.bind`${bindingName}`({
@@ -1088,7 +1098,7 @@ export const bindWorker = Effect.fnUntraced(function* <Shape, Req = never>(
1088
1098
  // cold-start). `WorkerEnvironment` only exists at exec phase on the
1089
1099
  // deployed worker, so we hand `makeRpcStub` an `Effect<stub>` that
1090
1100
  // resolves the binding lazily on each method call.
1091
- const stubEff = WorkerEnvironment.asEffect().pipe(
1101
+ const stubEff = WorkerEnvironment.pipe(
1092
1102
  Effect.map((env) => (env as Record<string, unknown>)[worker.LogicalId]),
1093
1103
  );
1094
1104
  return makeRpcStub<Shape>(stubEff);
@@ -1608,6 +1618,22 @@ export const LiveWorkerProvider = () =>
1608
1618
  const builder = await vite.createBuilder(
1609
1619
  {
1610
1620
  root: props.vite?.rootDir,
1621
+ // Emulate `vite build` env semantics for `props.env`: only
1622
+ // keys with Vite's default `VITE_` prefix are inlined into
1623
+ // the bundle as `import.meta.env.*`. `Redacted` values are
1624
+ // unwrapped — by prefixing with `VITE_` the user is opting
1625
+ // them into the public bundle.
1626
+ define: Object.fromEntries(
1627
+ Object.entries(props.env ?? {}).flatMap(([key, raw]) => {
1628
+ if (!key.startsWith("VITE_")) return [];
1629
+ const value = Redacted.isRedacted(raw)
1630
+ ? Redacted.value(raw)
1631
+ : raw;
1632
+ return [
1633
+ [`import.meta.env.${key}`, JSON.stringify(value)] as const,
1634
+ ];
1635
+ }),
1636
+ ),
1611
1637
  // Declare the ssr environment so Vite 8+ creates it.
1612
1638
  // The cloudflare-vite-plugin config hook merges its
1613
1639
  // SSR-specific settings on top of this stub.
@@ -2363,7 +2389,23 @@ export const LiveWorkerProvider = () =>
2363
2389
  type: "application/javascript+module",
2364
2390
  }),
2365
2391
  ],
2366
- });
2392
+ }).pipe(
2393
+ // Cloudflare's PUT /workers/scripts/{name} intermittently
2394
+ // returns code 10002 / "An unknown error has occurred" on the
2395
+ // first put for a fresh worker name. Surfaced as the shared
2396
+ // `InternalServerError` upstream (alchemy-run/distilled#290).
2397
+ // Also match `UnknownCloudflareError` for older
2398
+ // @distilled.cloud/cloudflare versions that haven't picked
2399
+ // up the patch yet.
2400
+ Effect.retry({
2401
+ while: (e: any) =>
2402
+ e._tag === "InternalServerError" ||
2403
+ e._tag === "UnknownCloudflareError",
2404
+ schedule: Schedule.exponential(1000).pipe(
2405
+ Schedule.both(Schedule.recurs(5)),
2406
+ ),
2407
+ }),
2408
+ );
2367
2409
  if (doClasses.length > 0) {
2368
2410
  ({ durableObjectNamespaces } =
2369
2411
  yield* getWorkerSettingsWithDurableObjects(name, doClasses));
@@ -163,14 +163,12 @@ import { MinimumLogLevel } from "effect/References";
163
163
  import { NodeServices } from "@effect/platform-node";
164
164
  import { Stack } from "alchemy/Stack";
165
165
  import { WorkerEnvironment, makeDurableObjectBridge, makeWorkerBridge${hasWfClasses ? ", makeWorkflowBridge" : ""}, ExportedHandlerMethods } from "alchemy/Cloudflare";
166
+ import { makeEntrypointLayer } from "alchemy/Runtime";
166
167
 
167
- import entry from "${importPath}";
168
+ import entrypoint from "${importPath}";
168
169
 
169
170
  const tag = Context.Service("${Self.key}")
170
- const layer =
171
- typeof entry?.build === "function"
172
- ? entry
173
- : Layer.effect(tag, typeof entry?.asEffect === "function" ? entry.asEffect() : entry);
171
+ const layer = makeEntrypointLayer(tag, entrypoint);
174
172
 
175
173
  const platform = Layer.mergeAll(
176
174
  NodeServices.layer,
@@ -189,7 +187,7 @@ const stack = Layer.succeed(
189
187
  }
190
188
  );
191
189
 
192
- const exportsEffect = tag.asEffect().pipe(
190
+ const exportsEffect = tag.pipe(
193
191
  Effect.flatMap(func => func.RuntimeContext.exports),
194
192
  Effect.provide(
195
193
  layer.pipe(
@@ -73,7 +73,7 @@ export const sleep = (
73
73
  name: string,
74
74
  duration: string | number,
75
75
  ): Effect.Effect<void, never, WorkflowStep> =>
76
- WorkflowStep.asEffect().pipe(
76
+ WorkflowStep.pipe(
77
77
  Effect.flatMap((step) => step.sleep(name, duration)),
78
78
  Effect.orDie,
79
79
  );
@@ -85,7 +85,7 @@ export const sleepUntil = (
85
85
  name: string,
86
86
  timestamp: Date | number,
87
87
  ): Effect.Effect<void, never, WorkflowStep> =>
88
- WorkflowStep.asEffect().pipe(
88
+ WorkflowStep.pipe(
89
89
  Effect.flatMap((step) => step.sleepUntil(name, timestamp)),
90
90
  Effect.orDie,
91
91
  );
@@ -6,6 +6,7 @@ export * from "./CloudflareEnvironment.ts";
6
6
  export * from "./Container/index.ts";
7
7
  export * from "./D1/index.ts";
8
8
  export * from "./EdgeSession.ts";
9
+ export * from "./Email/index.ts";
9
10
  export * from "./Hyperdrive/index.ts";
10
11
  export * from "./Images/index.ts";
11
12
  export * from "./KV/index.ts";
package/src/Construct.ts CHANGED
@@ -49,11 +49,7 @@ import * as Namespace from "./Namespace.ts";
49
49
  * ```
50
50
  */
51
51
  export const fn: {
52
- <
53
- Eff extends Effect.Yieldable<any, any, any, any>,
54
- AEff,
55
- Props extends object,
56
- >(
52
+ <Eff extends Effect.Effect<any, any, any>, AEff, Props extends object>(
57
53
  body: (id: string, props: Props) => Generator<Eff, AEff, never>,
58
54
  ): (
59
55
  id: string,
@@ -62,12 +58,12 @@ export const fn: {
62
58
  AEff,
63
59
  [Eff] extends [never]
64
60
  ? never
65
- : [Eff] extends [Effect.Yieldable<infer _S, infer _A, infer E, infer _R>]
61
+ : [Eff] extends [Effect.Effect<infer _A, infer E, infer _R>]
66
62
  ? E
67
63
  : never,
68
64
  [Eff] extends [never]
69
65
  ? never
70
- : [Eff] extends [Effect.Yieldable<infer _S, infer _A, infer _E, infer R>]
66
+ : [Eff] extends [Effect.Effect<infer _A, infer _E, infer R>]
71
67
  ? R
72
68
  : never
73
69
  >;
package/src/Destroy.ts CHANGED
@@ -28,6 +28,7 @@ export const destroy = ({
28
28
  // TODO(sam): probably better to have Plan.destroy and Plan.update
29
29
  resources: {},
30
30
  bindings: {},
31
+ actions: {},
31
32
  output: {},
32
33
  }).pipe(Effect.flatMap(Apply.apply)),
33
34
  { stage, dev, scope },
package/src/Http.ts CHANGED
@@ -80,7 +80,7 @@ export const safeHttpEffect = <Req = never>(
80
80
  export const resolvePort = (options: { port?: number } | undefined) =>
81
81
  options?.port !== undefined
82
82
  ? Effect.succeed(options.port)
83
- : Config.number("PORT").pipe(Config.withDefault(3000)).asEffect();
83
+ : Config.number("PORT").pipe(Config.withDefault(3000));
84
84
 
85
85
  export const BunHttpServer = () =>
86
86
  Layer.effect(