alchemy 2.0.0-beta.37 → 2.0.0-beta.38

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 (633) 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/Worker.d.ts +2 -2
  183. package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
  184. package/lib/Cloudflare/Workers/Worker.js +15 -4
  185. package/lib/Cloudflare/Workers/Worker.js.map +1 -1
  186. package/lib/Cloudflare/Workers/WorkerBundle.d.ts +1 -1
  187. package/lib/Cloudflare/Workers/WorkerBundle.d.ts.map +1 -1
  188. package/lib/Cloudflare/Workers/WorkerBundle.js +4 -6
  189. package/lib/Cloudflare/Workers/WorkerBundle.js.map +1 -1
  190. package/lib/Cloudflare/Workers/WorkerName.d.ts +1 -1
  191. package/lib/Cloudflare/Workers/Workflow.js +2 -2
  192. package/lib/Cloudflare/Workers/Workflow.js.map +1 -1
  193. package/lib/Cloudflare/index.d.ts +1 -0
  194. package/lib/Cloudflare/index.d.ts.map +1 -1
  195. package/lib/Cloudflare/index.js +1 -0
  196. package/lib/Cloudflare/index.js.map +1 -1
  197. package/lib/Construct.d.ts +3 -3
  198. package/lib/Construct.d.ts.map +1 -1
  199. package/lib/Construct.js.map +1 -1
  200. package/lib/Deploy.d.ts +1 -1
  201. package/lib/Destroy.d.ts +1 -1
  202. package/lib/Destroy.d.ts.map +1 -1
  203. package/lib/Destroy.js +1 -0
  204. package/lib/Destroy.js.map +1 -1
  205. package/lib/Drizzle/Providers.d.ts +1 -1
  206. package/lib/Drizzle/Schema.d.ts +1 -1
  207. package/lib/GitHub/Providers.d.ts +1 -1
  208. package/lib/Http.d.ts +1 -1
  209. package/lib/Http.d.ts.map +1 -1
  210. package/lib/Http.js +1 -1
  211. package/lib/Http.js.map +1 -1
  212. package/lib/Namespace.d.ts.map +1 -1
  213. package/lib/Namespace.js +3 -4
  214. package/lib/Namespace.js.map +1 -1
  215. package/lib/Neon/Branch.d.ts +2 -2
  216. package/lib/Neon/Branch.d.ts.map +1 -1
  217. package/lib/Neon/Branch.js +59 -27
  218. package/lib/Neon/Branch.js.map +1 -1
  219. package/lib/Neon/Credentials.d.ts +2 -2
  220. package/lib/Neon/Credentials.d.ts.map +1 -1
  221. package/lib/Neon/Credentials.js +2 -2
  222. package/lib/Neon/Credentials.js.map +1 -1
  223. package/lib/Neon/NeonEnvironment.d.ts +1 -1
  224. package/lib/Neon/Project.d.ts +25 -1
  225. package/lib/Neon/Project.d.ts.map +1 -1
  226. package/lib/Neon/Project.js +121 -42
  227. package/lib/Neon/Project.js.map +1 -1
  228. package/lib/Neon/Providers.d.ts +1 -1
  229. package/lib/Neon/SqlFile.d.ts +2 -2
  230. package/lib/Output.d.ts +3 -4
  231. package/lib/Output.d.ts.map +1 -1
  232. package/lib/Output.js +7 -4
  233. package/lib/Output.js.map +1 -1
  234. package/lib/PhysicalName.d.ts +1 -1
  235. package/lib/Plan.d.ts +36 -1
  236. package/lib/Plan.d.ts.map +1 -1
  237. package/lib/Plan.js +197 -31
  238. package/lib/Plan.js.map +1 -1
  239. package/lib/Platform.js +6 -6
  240. package/lib/Platform.js.map +1 -1
  241. package/lib/Provider.d.ts +1 -1
  242. package/lib/Provider.d.ts.map +1 -1
  243. package/lib/Provider.js +1 -1
  244. package/lib/Provider.js.map +1 -1
  245. package/lib/Random.d.ts +1 -1
  246. package/lib/Random.d.ts.map +1 -1
  247. package/lib/Random.js +1 -1
  248. package/lib/Random.js.map +1 -1
  249. package/lib/Resource.d.ts.map +1 -1
  250. package/lib/Resource.js +2 -25
  251. package/lib/Resource.js.map +1 -1
  252. package/lib/Runtime.d.ts +24 -0
  253. package/lib/Runtime.d.ts.map +1 -0
  254. package/lib/Runtime.js +31 -0
  255. package/lib/Runtime.js.map +1 -0
  256. package/lib/Secret.js +1 -1
  257. package/lib/Secret.js.map +1 -1
  258. package/lib/Sidecar/RpcClient.d.ts +1 -1
  259. package/lib/Sidecar/RpcPaths.d.ts +1 -1
  260. package/lib/Sidecar/RpcServer.d.ts +1 -1
  261. package/lib/Sidecar/RpcServices.d.ts +1 -1
  262. package/lib/Stack.d.ts +7 -2
  263. package/lib/Stack.d.ts.map +1 -1
  264. package/lib/Stack.js +4 -4
  265. package/lib/Stack.js.map +1 -1
  266. package/lib/State/ActionState.d.ts +48 -0
  267. package/lib/State/ActionState.d.ts.map +1 -0
  268. package/lib/State/ActionState.js +1 -0
  269. package/lib/State/ActionState.js.map +1 -0
  270. package/lib/State/HttpStateStore.d.ts.map +1 -1
  271. package/lib/State/HttpStateStore.js +1 -1
  272. package/lib/State/HttpStateStore.js.map +1 -1
  273. package/lib/State/InMemoryState.d.ts.map +1 -1
  274. package/lib/State/InMemoryState.js.map +1 -1
  275. package/lib/State/LocalState.d.ts +2 -2
  276. package/lib/State/ResourceState.d.ts +5 -0
  277. package/lib/State/ResourceState.d.ts.map +1 -1
  278. package/lib/State/State.d.ts +10 -2
  279. package/lib/State/State.d.ts.map +1 -1
  280. package/lib/State/State.js +2 -0
  281. package/lib/State/State.js.map +1 -1
  282. package/lib/State/index.d.ts +1 -0
  283. package/lib/State/index.d.ts.map +1 -1
  284. package/lib/State/index.js +1 -0
  285. package/lib/State/index.js.map +1 -1
  286. package/lib/Test/Core.d.ts +2 -2
  287. package/lib/Test/Core.d.ts.map +1 -1
  288. package/lib/Test/Core.js +4 -1
  289. package/lib/Test/Core.js.map +1 -1
  290. package/lib/Util/FileLogger.d.ts +1 -1
  291. package/lib/Util/effect.js +4 -4
  292. package/lib/Util/effect.js.map +1 -1
  293. package/lib/Util/exec.d.ts.map +1 -0
  294. package/lib/Util/exec.js.map +1 -0
  295. package/lib/Util/hash.d.ts +8 -0
  296. package/lib/Util/hash.d.ts.map +1 -0
  297. package/lib/Util/hash.js +11 -0
  298. package/lib/Util/hash.js.map +1 -0
  299. package/lib/Util/ignore.d.ts +40 -0
  300. package/lib/Util/ignore.d.ts.map +1 -0
  301. package/lib/Util/ignore.js +591 -0
  302. package/lib/Util/ignore.js.map +1 -0
  303. package/lib/index.d.ts +1 -0
  304. package/lib/index.d.ts.map +1 -1
  305. package/lib/index.js +1 -0
  306. package/lib/index.js.map +1 -1
  307. package/lib/tsconfig.test.tsbuildinfo +1 -1
  308. package/package.json +22 -28
  309. package/src/AWS/Credentials.ts +1 -2
  310. package/src/AWS/DynamoDB/Stream.ts +1 -4
  311. package/src/AWS/EC2/hosted.ts +14 -16
  312. package/src/AWS/ECS/Task.ts +14 -16
  313. package/src/AWS/Endpoint.ts +2 -5
  314. package/src/AWS/EventBridge/EventSource.ts +1 -4
  315. package/src/AWS/Kinesis/StreamEventSource.ts +1 -4
  316. package/src/AWS/Lambda/Function.ts +31 -35
  317. package/src/AWS/Providers.ts +22 -3
  318. package/src/AWS/Region.ts +2 -3
  319. package/src/AWS/S3/Bucket.ts +7 -2
  320. package/src/AWS/S3/BucketNotifications.ts +1 -4
  321. package/src/AWS/SNS/TopicEventSource.ts +1 -4
  322. package/src/AWS/SQS/Queue.ts +40 -6
  323. package/src/Action.ts +280 -0
  324. package/src/Apply.ts +351 -23
  325. package/src/Artifacts.ts +2 -4
  326. package/src/Auth/AuthProvider.ts +1 -1
  327. package/src/Auth/Env.ts +12 -20
  328. package/src/Binding.ts +5 -9
  329. package/src/Bundle/Docker.ts +1 -1
  330. package/src/Cli/Event.ts +4 -0
  331. package/src/Cli/NamespaceTree.ts +52 -5
  332. package/src/Cli/commands/_shared.ts +2 -2
  333. package/src/Cli/commands/deploy.ts +1 -1
  334. package/src/Cli/commands/logs.ts +4 -4
  335. package/src/Cli/commands/tail.ts +4 -4
  336. package/src/Cli/tui/components/Plan.tsx +65 -17
  337. package/src/Cli/tui/components/PlanProgress.tsx +142 -32
  338. package/src/Cloudflare/Access.ts +1 -1
  339. package/src/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.ts +1 -1
  340. package/src/Cloudflare/Artifacts/ArtifactsBinding.ts +1 -1
  341. package/src/Cloudflare/Container/Container.ts +1 -1
  342. package/src/Cloudflare/Container/ContainerApplication.ts +4 -6
  343. package/src/Cloudflare/Container/ContainerBinding.ts +2 -2
  344. package/src/Cloudflare/Email/EmailAddress.ts +155 -0
  345. package/src/Cloudflare/Email/EmailRouting.ts +138 -0
  346. package/src/Cloudflare/Email/EmailRule.ts +210 -0
  347. package/src/Cloudflare/Email/SendEmail.ts +95 -0
  348. package/src/Cloudflare/Email/SendEmailBinding.ts +124 -0
  349. package/src/Cloudflare/Email/index.ts +5 -0
  350. package/src/Cloudflare/Images/ImagesBinding.ts +1 -1
  351. package/src/Cloudflare/KV/KVNamespaceBinding.ts +1 -1
  352. package/src/Cloudflare/Local/SidecarServer.ts +1 -1
  353. package/src/Cloudflare/Providers.ts +9 -0
  354. package/src/Cloudflare/Queue/QueueBinding.ts +1 -1
  355. package/src/Cloudflare/R2/R2BucketBinding.ts +1 -1
  356. package/src/Cloudflare/SecretsStore/SecretBinding.ts +1 -1
  357. package/src/Cloudflare/Workers/Assets.ts +5 -6
  358. package/src/Cloudflare/Workers/Worker.ts +19 -4
  359. package/src/Cloudflare/Workers/WorkerBundle.ts +4 -6
  360. package/src/Cloudflare/Workers/Workflow.ts +2 -2
  361. package/src/Cloudflare/index.ts +1 -0
  362. package/src/Construct.ts +3 -7
  363. package/src/Destroy.ts +1 -0
  364. package/src/Http.ts +1 -1
  365. package/src/Namespace.ts +4 -4
  366. package/src/Neon/Branch.ts +93 -59
  367. package/src/Neon/Credentials.ts +2 -2
  368. package/src/Neon/Project.ts +193 -64
  369. package/src/Output.ts +9 -7
  370. package/src/Plan.ts +303 -53
  371. package/src/Platform.ts +7 -7
  372. package/src/Provider.ts +8 -3
  373. package/src/Random.ts +1 -1
  374. package/src/Resource.ts +2 -25
  375. package/src/Runtime.ts +38 -0
  376. package/src/Secret.ts +1 -1
  377. package/src/Stack.ts +10 -6
  378. package/src/State/ActionState.ts +51 -0
  379. package/src/State/HttpStateStore.ts +6 -2
  380. package/src/State/InMemoryState.ts +3 -3
  381. package/src/State/ResourceState.ts +5 -0
  382. package/src/State/State.ts +17 -2
  383. package/src/State/index.ts +1 -0
  384. package/src/Test/Core.ts +4 -3
  385. package/src/Util/effect.ts +4 -4
  386. package/src/Util/hash.ts +14 -0
  387. package/src/Util/ignore.ts +815 -0
  388. package/src/index.ts +6 -0
  389. package/lib/Agent/Agent.d.ts +0 -9
  390. package/lib/Agent/Agent.d.ts.map +0 -1
  391. package/lib/Agent/Agent.js +0 -10
  392. package/lib/Agent/Agent.js.map +0 -1
  393. package/lib/Agent/Aspect.d.ts +0 -51
  394. package/lib/Agent/Aspect.d.ts.map +0 -1
  395. package/lib/Agent/Aspect.js +0 -45
  396. package/lib/Agent/Aspect.js.map +0 -1
  397. package/lib/Agent/AspectGraph.d.ts +0 -45
  398. package/lib/Agent/AspectGraph.d.ts.map +0 -1
  399. package/lib/Agent/AspectGraph.js +0 -39
  400. package/lib/Agent/AspectGraph.js.map +0 -1
  401. package/lib/Agent/ContextPlugin.d.ts +0 -8
  402. package/lib/Agent/ContextPlugin.d.ts.map +0 -1
  403. package/lib/Agent/ContextPlugin.js +0 -3
  404. package/lib/Agent/ContextPlugin.js.map +0 -1
  405. package/lib/Agent/Plugin.d.ts +0 -18
  406. package/lib/Agent/Plugin.d.ts.map +0 -1
  407. package/lib/Agent/Plugin.js +0 -8
  408. package/lib/Agent/Plugin.js.map +0 -1
  409. package/lib/Agent/chat/channel.d.ts +0 -9
  410. package/lib/Agent/chat/channel.d.ts.map +0 -1
  411. package/lib/Agent/chat/channel.js +0 -10
  412. package/lib/Agent/chat/channel.js.map +0 -1
  413. package/lib/Agent/chat/event.d.ts +0 -32
  414. package/lib/Agent/chat/event.d.ts.map +0 -1
  415. package/lib/Agent/chat/event.js +0 -32
  416. package/lib/Agent/chat/event.js.map +0 -1
  417. package/lib/Agent/chat/message.d.ts +0 -22
  418. package/lib/Agent/chat/message.d.ts.map +0 -1
  419. package/lib/Agent/chat/message.js +0 -31
  420. package/lib/Agent/chat/message.js.map +0 -1
  421. package/lib/Agent/chat/service.d.ts +0 -102
  422. package/lib/Agent/chat/service.d.ts.map +0 -1
  423. package/lib/Agent/chat/service.js +0 -79
  424. package/lib/Agent/chat/service.js.map +0 -1
  425. package/lib/Agent/chat/thread.d.ts +0 -13
  426. package/lib/Agent/chat/thread.d.ts.map +0 -1
  427. package/lib/Agent/chat/thread.js +0 -16
  428. package/lib/Agent/chat/thread.js.map +0 -1
  429. package/lib/Agent/coding/bash.d.ts +0 -36
  430. package/lib/Agent/coding/bash.d.ts.map +0 -1
  431. package/lib/Agent/coding/bash.js +0 -170
  432. package/lib/Agent/coding/bash.js.map +0 -1
  433. package/lib/Agent/coding/edit.d.ts +0 -31
  434. package/lib/Agent/coding/edit.d.ts.map +0 -1
  435. package/lib/Agent/coding/edit.js +0 -90
  436. package/lib/Agent/coding/edit.js.map +0 -1
  437. package/lib/Agent/coding/glob.d.ts +0 -23
  438. package/lib/Agent/coding/glob.d.ts.map +0 -1
  439. package/lib/Agent/coding/glob.js +0 -78
  440. package/lib/Agent/coding/glob.js.map +0 -1
  441. package/lib/Agent/coding/grep.d.ts +0 -26
  442. package/lib/Agent/coding/grep.d.ts.map +0 -1
  443. package/lib/Agent/coding/grep.js +0 -105
  444. package/lib/Agent/coding/grep.js.map +0 -1
  445. package/lib/Agent/coding/index.d.ts +0 -8
  446. package/lib/Agent/coding/index.d.ts.map +0 -1
  447. package/lib/Agent/coding/index.js +0 -8
  448. package/lib/Agent/coding/index.js.map +0 -1
  449. package/lib/Agent/coding/read.d.ts +0 -27
  450. package/lib/Agent/coding/read.d.ts.map +0 -1
  451. package/lib/Agent/coding/read.js +0 -89
  452. package/lib/Agent/coding/read.js.map +0 -1
  453. package/lib/Agent/coding/readlints.d.ts +0 -19
  454. package/lib/Agent/coding/readlints.d.ts.map +0 -1
  455. package/lib/Agent/coding/readlints.js +0 -53
  456. package/lib/Agent/coding/readlints.js.map +0 -1
  457. package/lib/Agent/coding/write.d.ts +0 -22
  458. package/lib/Agent/coding/write.d.ts.map +0 -1
  459. package/lib/Agent/coding/write.js +0 -53
  460. package/lib/Agent/coding/write.js.map +0 -1
  461. package/lib/Agent/fs/file.d.ts +0 -12
  462. package/lib/Agent/fs/file.d.ts.map +0 -1
  463. package/lib/Agent/fs/file.js +0 -8
  464. package/lib/Agent/fs/file.js.map +0 -1
  465. package/lib/Agent/fs/folder.d.ts +0 -5
  466. package/lib/Agent/fs/folder.d.ts.map +0 -1
  467. package/lib/Agent/fs/folder.js +0 -3
  468. package/lib/Agent/fs/folder.js.map +0 -1
  469. package/lib/Agent/index.d.ts +0 -9
  470. package/lib/Agent/index.d.ts.map +0 -1
  471. package/lib/Agent/index.js +0 -9
  472. package/lib/Agent/index.js.map +0 -1
  473. package/lib/Agent/llm/error.d.ts +0 -208
  474. package/lib/Agent/llm/error.d.ts.map +0 -1
  475. package/lib/Agent/llm/error.js +0 -209
  476. package/lib/Agent/llm/error.js.map +0 -1
  477. package/lib/Agent/llm/index.d.ts +0 -5
  478. package/lib/Agent/llm/index.d.ts.map +0 -1
  479. package/lib/Agent/llm/index.js +0 -5
  480. package/lib/Agent/llm/index.js.map +0 -1
  481. package/lib/Agent/llm/llm.d.ts +0 -32
  482. package/lib/Agent/llm/llm.d.ts.map +0 -1
  483. package/lib/Agent/llm/llm.js +0 -74
  484. package/lib/Agent/llm/llm.js.map +0 -1
  485. package/lib/Agent/llm/stream-collectors.d.ts +0 -46
  486. package/lib/Agent/llm/stream-collectors.d.ts.map +0 -1
  487. package/lib/Agent/llm/stream-collectors.js +0 -33
  488. package/lib/Agent/llm/stream-collectors.js.map +0 -1
  489. package/lib/Agent/llm/stream-text-part.d.ts +0 -5
  490. package/lib/Agent/llm/stream-text-part.d.ts.map +0 -1
  491. package/lib/Agent/llm/stream-text-part.js +0 -4
  492. package/lib/Agent/llm/stream-text-part.js.map +0 -1
  493. package/lib/Agent/lsp/client.d.ts +0 -122
  494. package/lib/Agent/lsp/client.d.ts.map +0 -1
  495. package/lib/Agent/lsp/client.js +0 -180
  496. package/lib/Agent/lsp/client.js.map +0 -1
  497. package/lib/Agent/lsp/diagnostics.d.ts +0 -16
  498. package/lib/Agent/lsp/diagnostics.d.ts.map +0 -1
  499. package/lib/Agent/lsp/diagnostics.js +0 -48
  500. package/lib/Agent/lsp/diagnostics.js.map +0 -1
  501. package/lib/Agent/lsp/jsonrpc.d.ts +0 -90
  502. package/lib/Agent/lsp/jsonrpc.d.ts.map +0 -1
  503. package/lib/Agent/lsp/jsonrpc.js +0 -178
  504. package/lib/Agent/lsp/jsonrpc.js.map +0 -1
  505. package/lib/Agent/lsp/manager.d.ts +0 -38
  506. package/lib/Agent/lsp/manager.d.ts.map +0 -1
  507. package/lib/Agent/lsp/manager.js +0 -98
  508. package/lib/Agent/lsp/manager.js.map +0 -1
  509. package/lib/Agent/lsp/servers.d.ts +0 -28
  510. package/lib/Agent/lsp/servers.d.ts.map +0 -1
  511. package/lib/Agent/lsp/servers.js +0 -21
  512. package/lib/Agent/lsp/servers.js.map +0 -1
  513. package/lib/Agent/process/driver.d.ts +0 -10
  514. package/lib/Agent/process/driver.d.ts.map +0 -1
  515. package/lib/Agent/process/driver.js +0 -153
  516. package/lib/Agent/process/driver.js.map +0 -1
  517. package/lib/Agent/process/issue-service.d.ts +0 -44
  518. package/lib/Agent/process/issue-service.d.ts.map +0 -1
  519. package/lib/Agent/process/issue-service.js +0 -28
  520. package/lib/Agent/process/issue-service.js.map +0 -1
  521. package/lib/Agent/process/issue-tools.d.ts +0 -28
  522. package/lib/Agent/process/issue-tools.d.ts.map +0 -1
  523. package/lib/Agent/process/issue-tools.js +0 -28
  524. package/lib/Agent/process/issue-tools.js.map +0 -1
  525. package/lib/Agent/process/issue.d.ts +0 -16
  526. package/lib/Agent/process/issue.d.ts.map +0 -1
  527. package/lib/Agent/process/issue.js +0 -17
  528. package/lib/Agent/process/issue.js.map +0 -1
  529. package/lib/Agent/process/organization.d.ts +0 -4
  530. package/lib/Agent/process/organization.d.ts.map +0 -1
  531. package/lib/Agent/process/organization.js +0 -3
  532. package/lib/Agent/process/organization.js.map +0 -1
  533. package/lib/Agent/process/process.d.ts +0 -5
  534. package/lib/Agent/process/process.d.ts.map +0 -1
  535. package/lib/Agent/process/process.js +0 -3
  536. package/lib/Agent/process/process.js.map +0 -1
  537. package/lib/Agent/process/reply.d.ts +0 -16
  538. package/lib/Agent/process/reply.d.ts.map +0 -1
  539. package/lib/Agent/process/reply.js +0 -18
  540. package/lib/Agent/process/reply.js.map +0 -1
  541. package/lib/Agent/process/task.d.ts +0 -25
  542. package/lib/Agent/process/task.d.ts.map +0 -1
  543. package/lib/Agent/process/task.js +0 -26
  544. package/lib/Agent/process/task.js.map +0 -1
  545. package/lib/Agent/tool/index.d.ts +0 -4
  546. package/lib/Agent/tool/index.d.ts.map +0 -1
  547. package/lib/Agent/tool/index.js +0 -4
  548. package/lib/Agent/tool/index.js.map +0 -1
  549. package/lib/Agent/tool/parameter.d.ts +0 -12
  550. package/lib/Agent/tool/parameter.d.ts.map +0 -1
  551. package/lib/Agent/tool/parameter.js +0 -6
  552. package/lib/Agent/tool/parameter.js.map +0 -1
  553. package/lib/Agent/tool/result.d.ts +0 -17
  554. package/lib/Agent/tool/result.d.ts.map +0 -1
  555. package/lib/Agent/tool/result.js +0 -6
  556. package/lib/Agent/tool/result.js.map +0 -1
  557. package/lib/Agent/tool/tool.d.ts +0 -32
  558. package/lib/Agent/tool/tool.d.ts.map +0 -1
  559. package/lib/Agent/tool/tool.js +0 -16
  560. package/lib/Agent/tool/tool.js.map +0 -1
  561. package/lib/Agent/util/command-validator.d.ts +0 -12
  562. package/lib/Agent/util/command-validator.d.ts.map +0 -1
  563. package/lib/Agent/util/command-validator.js +0 -74
  564. package/lib/Agent/util/command-validator.js.map +0 -1
  565. package/lib/Agent/util/exec.d.ts.map +0 -1
  566. package/lib/Agent/util/exec.js.map +0 -1
  567. package/lib/Agent/util/parser.d.ts +0 -5
  568. package/lib/Agent/util/parser.d.ts.map +0 -1
  569. package/lib/Agent/util/parser.js +0 -41
  570. package/lib/Agent/util/parser.js.map +0 -1
  571. package/lib/Agent/util/replace.d.ts +0 -38
  572. package/lib/Agent/util/replace.d.ts.map +0 -1
  573. package/lib/Agent/util/replace.js +0 -458
  574. package/lib/Agent/util/replace.js.map +0 -1
  575. package/lib/Agent/util/ripgrep.d.ts +0 -109
  576. package/lib/Agent/util/ripgrep.d.ts.map +0 -1
  577. package/lib/Agent/util/ripgrep.js +0 -221
  578. package/lib/Agent/util/ripgrep.js.map +0 -1
  579. package/lib/Neon/api.d.ts +0 -258
  580. package/lib/Neon/api.d.ts.map +0 -1
  581. package/lib/Neon/api.js +0 -215
  582. package/lib/Neon/api.js.map +0 -1
  583. package/src/Agent/Agent.ts +0 -26
  584. package/src/Agent/Aspect.ts +0 -173
  585. package/src/Agent/AspectGraph.ts +0 -98
  586. package/src/Agent/ContextPlugin.ts +0 -18
  587. package/src/Agent/Plugin.ts +0 -29
  588. package/src/Agent/chat/channel.ts +0 -26
  589. package/src/Agent/chat/event.ts +0 -43
  590. package/src/Agent/chat/message.ts +0 -35
  591. package/src/Agent/chat/service.ts +0 -133
  592. package/src/Agent/chat/thread.ts +0 -17
  593. package/src/Agent/coding/bash.ts +0 -197
  594. package/src/Agent/coding/edit.ts +0 -152
  595. package/src/Agent/coding/glob.ts +0 -96
  596. package/src/Agent/coding/grep.ts +0 -143
  597. package/src/Agent/coding/index.ts +0 -7
  598. package/src/Agent/coding/read.ts +0 -119
  599. package/src/Agent/coding/readlints.ts +0 -78
  600. package/src/Agent/coding/write.ts +0 -79
  601. package/src/Agent/fs/file.ts +0 -22
  602. package/src/Agent/fs/folder.ts +0 -16
  603. package/src/Agent/index.ts +0 -9
  604. package/src/Agent/llm/error.ts +0 -330
  605. package/src/Agent/llm/index.ts +0 -4
  606. package/src/Agent/llm/llm.ts +0 -131
  607. package/src/Agent/llm/stream-collectors.ts +0 -58
  608. package/src/Agent/llm/stream-text-part.ts +0 -7
  609. package/src/Agent/lsp/client.ts +0 -293
  610. package/src/Agent/lsp/diagnostics.ts +0 -64
  611. package/src/Agent/lsp/jsonrpc.ts +0 -317
  612. package/src/Agent/lsp/manager.ts +0 -213
  613. package/src/Agent/lsp/servers.ts +0 -37
  614. package/src/Agent/process/driver.ts +0 -168
  615. package/src/Agent/process/issue-service.ts +0 -48
  616. package/src/Agent/process/issue-tools.ts +0 -33
  617. package/src/Agent/process/issue.ts +0 -22
  618. package/src/Agent/process/organization.ts +0 -16
  619. package/src/Agent/process/process.ts +0 -16
  620. package/src/Agent/process/reply.ts +0 -21
  621. package/src/Agent/process/task.ts +0 -34
  622. package/src/Agent/tool/index.ts +0 -3
  623. package/src/Agent/tool/parameter.ts +0 -35
  624. package/src/Agent/tool/result.ts +0 -51
  625. package/src/Agent/tool/tool.ts +0 -74
  626. package/src/Agent/util/command-validator.ts +0 -98
  627. package/src/Agent/util/parser.ts +0 -39
  628. package/src/Agent/util/replace.ts +0 -559
  629. package/src/Agent/util/ripgrep.ts +0 -256
  630. package/src/Neon/api.ts +0 -579
  631. /package/lib/{Agent/util → Util}/exec.d.ts +0 -0
  632. /package/lib/{Agent/util → Util}/exec.js +0 -0
  633. /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",
@@ -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,6 @@ 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";
55
54
  import type {
56
55
  Hyperdrive,
57
56
  HyperdriveDevOrigin,
@@ -1088,7 +1087,7 @@ export const bindWorker = Effect.fnUntraced(function* <Shape, Req = never>(
1088
1087
  // cold-start). `WorkerEnvironment` only exists at exec phase on the
1089
1088
  // deployed worker, so we hand `makeRpcStub` an `Effect<stub>` that
1090
1089
  // resolves the binding lazily on each method call.
1091
- const stubEff = WorkerEnvironment.asEffect().pipe(
1090
+ const stubEff = WorkerEnvironment.pipe(
1092
1091
  Effect.map((env) => (env as Record<string, unknown>)[worker.LogicalId]),
1093
1092
  );
1094
1093
  return makeRpcStub<Shape>(stubEff);
@@ -2363,7 +2362,23 @@ export const LiveWorkerProvider = () =>
2363
2362
  type: "application/javascript+module",
2364
2363
  }),
2365
2364
  ],
2366
- });
2365
+ }).pipe(
2366
+ // Cloudflare's PUT /workers/scripts/{name} intermittently
2367
+ // returns code 10002 / "An unknown error has occurred" on the
2368
+ // first put for a fresh worker name. Surfaced as the shared
2369
+ // `InternalServerError` upstream (alchemy-run/distilled#290).
2370
+ // Also match `UnknownCloudflareError` for older
2371
+ // @distilled.cloud/cloudflare versions that haven't picked
2372
+ // up the patch yet.
2373
+ Effect.retry({
2374
+ while: (e: any) =>
2375
+ e._tag === "InternalServerError" ||
2376
+ e._tag === "UnknownCloudflareError",
2377
+ schedule: Schedule.exponential(1000).pipe(
2378
+ Schedule.both(Schedule.recurs(5)),
2379
+ ),
2380
+ }),
2381
+ );
2367
2382
  if (doClasses.length > 0) {
2368
2383
  ({ durableObjectNamespaces } =
2369
2384
  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(
package/src/Namespace.ts CHANGED
@@ -40,10 +40,10 @@ export const set = (namespace: string | NamespaceNode) =>
40
40
  );
41
41
 
42
42
  export const CurrentNamespace = Effect.serviceOption(Namespace)
43
- .asEffect()
43
+
44
44
  .pipe(Effect.map(Option.getOrUndefined));
45
45
 
46
- export const CurrentChain = CurrentNamespace.asEffect().pipe(
46
+ export const CurrentChain = CurrentNamespace.pipe(
47
47
  Effect.map(function findRoot(ns): string[] {
48
48
  if (ns?.Parent) {
49
49
  return [ns.Id, ...findRoot(ns.Parent)];
@@ -52,9 +52,9 @@ export const CurrentChain = CurrentNamespace.asEffect().pipe(
52
52
  }),
53
53
  );
54
54
 
55
- export const Parent = Namespace.asEffect().pipe(Effect.map((ns) => ns?.Parent));
55
+ export const Parent = Namespace.pipe(Effect.map((ns) => ns?.Parent));
56
56
 
57
- export const Root = Namespace.asEffect().pipe(
57
+ export const Root = Namespace.pipe(
58
58
  Effect.map(function findRoot(ns) {
59
59
  if (ns.Parent) {
60
60
  return findRoot(ns.Parent);
@@ -1,16 +1,43 @@
1
+ import {
2
+ createProjectBranch,
3
+ deleteProjectBranch,
4
+ getConnectionURI,
5
+ getProjectBranch,
6
+ listProjectBranchDatabases,
7
+ listProjectBranches,
8
+ type ListProjectBranchesOutput,
9
+ updateProjectBranch,
10
+ } from "@distilled.cloud/neon";
1
11
  import * as Effect from "effect/Effect";
2
12
  import * as Redacted from "effect/Redacted";
3
13
  import { isResolved } from "../Diff.ts";
4
14
  import { createPhysicalName } from "../PhysicalName.ts";
5
15
  import * as Provider from "../Provider.ts";
6
16
  import { Resource } from "../Resource.ts";
7
- import * as api from "./api.ts";
8
17
  import { applyMigrations, runSql } from "./Migrations.ts";
9
18
  import { parsePostgresOrigin, type PostgresOrigin } from "./PostgresOrigin.ts";
10
- import type { Project } from "./Project.ts";
19
+ import { type Project, waitForOperations } from "./Project.ts";
11
20
  import type { Providers } from "./Providers.ts";
12
21
  import { listSqlFiles, readSqlFile } from "./SqlFile.ts";
13
22
 
23
+ const findBranchByName = (projectId: string, name: string) =>
24
+ Effect.gen(function* () {
25
+ const matches: ListProjectBranchesOutput["branches"][number][] = [];
26
+ let cursor: string | undefined;
27
+ do {
28
+ const page = yield* listProjectBranches({
29
+ project_id: projectId,
30
+ search: name,
31
+ ...(cursor !== undefined ? { cursor } : {}),
32
+ });
33
+ for (const b of page.branches) {
34
+ if (b.name === name) matches.push(b);
35
+ }
36
+ cursor = page.pagination?.next;
37
+ } while (cursor);
38
+ return matches;
39
+ });
40
+
14
41
  const DEFAULT_MIGRATIONS_TABLE = "neon_migrations";
15
42
 
16
43
  export type BranchSource =
@@ -202,7 +229,7 @@ const resolveParentBranchId = (
202
229
  return source.branchId as unknown as string;
203
230
  }
204
231
  if ("name" in source && source.name) {
205
- const matches = yield* api.findBranchByName(projectId, source.name);
232
+ const matches = yield* findBranchByName(projectId, source.name);
206
233
  if (matches.length === 0) {
207
234
  return yield* Effect.die(
208
235
  `Parent branch "${source.name}" not found in project ${projectId}`,
@@ -218,9 +245,7 @@ const resolveParentBranchId = (
218
245
  return undefined as string | undefined;
219
246
  });
220
247
 
221
- const buildEndpoints = (
222
- endpoints: BranchEndpointConfig[] | undefined,
223
- ): api.CreateBranchEndpoint[] => {
248
+ const buildEndpoints = (endpoints: BranchEndpointConfig[] | undefined) => {
224
249
  const list = endpoints ?? [{ type: "read_write" as const }];
225
250
  return list.map((e) => ({
226
251
  type: e.type,
@@ -237,13 +262,15 @@ const fetchConnection = (
237
262
  roleName: string,
238
263
  ) =>
239
264
  Effect.gen(function* () {
240
- const direct = yield* api.getConnectionUri(projectId, {
265
+ const direct = yield* getConnectionURI({
266
+ project_id: projectId,
241
267
  branch_id: branchId,
242
268
  database_name: databaseName,
243
269
  role_name: roleName,
244
270
  pooled: false,
245
271
  });
246
- const pooled = yield* api.getConnectionUri(projectId, {
272
+ const pooled = yield* getConnectionURI({
273
+ project_id: projectId,
247
274
  branch_id: branchId,
248
275
  database_name: databaseName,
249
276
  role_name: roleName,
@@ -318,31 +345,30 @@ export const BranchProvider = () =>
318
345
  }),
319
346
  read: Effect.fn(function* ({ id, output, olds }) {
320
347
  if (output?.branchId) {
321
- return yield* api
322
- .getProjectBranch(output.projectId, output.branchId)
323
- .pipe(
324
- Effect.map(({ branch }) => ({
325
- ...output,
326
- branchName: branch.name,
327
- protected: branch.protected,
328
- default: branch.default,
329
- expiresAt: branch.expires_at,
330
- })),
331
- Effect.catchTag("BranchNotFound", () =>
332
- Effect.succeed(undefined),
333
- ),
334
- );
348
+ return yield* getProjectBranch({
349
+ project_id: output.projectId,
350
+ branch_id: output.branchId,
351
+ }).pipe(
352
+ Effect.map(({ branch }) => ({
353
+ ...output,
354
+ branchName: branch.name,
355
+ protected: branch.protected,
356
+ default: branch.default,
357
+ expiresAt: branch.expires_at,
358
+ })),
359
+ Effect.catchTag("NotFound", () => Effect.succeed(undefined)),
360
+ );
335
361
  }
336
362
  if (!olds?.project) return undefined;
337
363
  const projectId = resolveProjectId(olds.project as BranchSource);
338
364
  const name = yield* createBranchName(id, olds.name);
339
- const matches = yield* api.findBranchByName(projectId, name);
365
+ const matches = yield* findBranchByName(projectId, name);
340
366
  const match = matches[0];
341
367
  if (!match) return undefined;
342
- const dbs = yield* api.listProjectBranchDatabases(
343
- projectId,
344
- match.id,
345
- );
368
+ const dbs = yield* listProjectBranchDatabases({
369
+ project_id: projectId,
370
+ branch_id: match.id,
371
+ });
346
372
  const db = dbs.databases[0];
347
373
  if (!db) return undefined;
348
374
  const conn = yield* fetchConnection(
@@ -383,31 +409,33 @@ export const BranchProvider = () =>
383
409
  // otherwise sync the mutable scalar fields on the existing
384
410
  // branch via updateProjectBranch.
385
411
  const branchInfo = output
386
- ? yield* api
387
- .updateProjectBranch(output.projectId, output.branchId, {
412
+ ? yield* updateProjectBranch({
413
+ project_id: output.projectId,
414
+ branch_id: output.branchId,
415
+ branch: {
388
416
  name: newName !== output.branchName ? newName : undefined,
389
417
  protected: news.protected,
390
418
  expires_at: news.expiresAt ?? null,
391
- })
392
- .pipe(
393
- Effect.map((r) => ({
394
- branchId: output.branchId,
395
- branchName: r.branch.name,
396
- projectId: output.projectId,
397
- parentBranchId: output.parentBranchId,
398
- parentLsn: output.parentLsn,
399
- parentTimestamp: output.parentTimestamp,
400
- initSource: output.initSource,
401
- protected: r.branch.protected,
402
- default: output.default,
403
- expiresAt: r.branch.expires_at,
404
- databaseName: output.databaseName,
405
- roleName: output.roleName,
406
- connectionUri: output.connectionUri,
407
- pooledConnectionUri: output.pooledConnectionUri,
408
- origin: output.origin,
409
- })),
410
- )
419
+ },
420
+ }).pipe(
421
+ Effect.map((r) => ({
422
+ branchId: output.branchId,
423
+ branchName: r.branch.name,
424
+ projectId: output.projectId,
425
+ parentBranchId: output.parentBranchId,
426
+ parentLsn: output.parentLsn,
427
+ parentTimestamp: output.parentTimestamp,
428
+ initSource: output.initSource,
429
+ protected: r.branch.protected,
430
+ default: output.default,
431
+ expiresAt: r.branch.expires_at,
432
+ databaseName: output.databaseName,
433
+ roleName: output.roleName,
434
+ connectionUri: output.connectionUri,
435
+ pooledConnectionUri: output.pooledConnectionUri,
436
+ origin: output.origin,
437
+ })),
438
+ )
411
439
  : yield* Effect.gen(function* () {
412
440
  const projectId = resolveProjectId(
413
441
  news.project as BranchSource,
@@ -416,17 +444,20 @@ export const BranchProvider = () =>
416
444
  news.parentBranch as ParentBranchSource | undefined,
417
445
  projectId,
418
446
  );
419
- const created = yield* api.createProjectBranch(projectId, {
420
- name: newName,
421
- parent_id: parentBranchId,
422
- parent_lsn: news.parentLsn,
423
- parent_timestamp: news.parentTimestamp,
424
- init_source: news.initSource,
425
- protected: news.protected,
426
- expires_at: news.expiresAt,
447
+ const created = yield* createProjectBranch({
448
+ project_id: projectId,
449
+ branch: {
450
+ name: newName,
451
+ parent_id: parentBranchId,
452
+ parent_lsn: news.parentLsn,
453
+ parent_timestamp: news.parentTimestamp,
454
+ init_source: news.initSource,
455
+ protected: news.protected,
456
+ expires_at: news.expiresAt,
457
+ },
427
458
  endpoints: buildEndpoints(news.endpoints),
428
459
  });
429
- yield* api.waitForOperations(created.operations);
460
+ yield* waitForOperations(created.operations);
430
461
 
431
462
  const db = created.databases[0];
432
463
  if (!db) {
@@ -492,7 +523,10 @@ export const BranchProvider = () =>
492
523
  };
493
524
  }),
494
525
  delete: Effect.fn(function* ({ output }) {
495
- yield* api.deleteProjectBranch(output.projectId, output.branchId);
526
+ yield* deleteProjectBranch({
527
+ project_id: output.projectId,
528
+ branch_id: output.branchId,
529
+ }).pipe(Effect.catchTag("NotFound", () => Effect.void));
496
530
  }),
497
531
  };
498
532
  }),