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
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
  }),
@@ -1,5 +1,5 @@
1
- import { Credentials } from "@distilled.cloud/neon/Credentials";
2
1
  import { ConfigError } from "@distilled.cloud/core/errors";
2
+ import { Credentials } from "@distilled.cloud/neon";
3
3
  import * as Config from "effect/Config";
4
4
  import * as Effect from "effect/Effect";
5
5
  import * as Layer from "effect/Layer";
@@ -11,7 +11,7 @@ import {
11
11
  type NeonResolvedCredentials,
12
12
  } from "./AuthProvider.ts";
13
13
 
14
- export { Credentials } from "@distilled.cloud/neon/Credentials";
14
+ export { Credentials } from "@distilled.cloud/neon";
15
15
 
16
16
  const DEFAULT_BASE_URL = "https://console.neon.tech/api/v2";
17
17
 
@@ -1,15 +1,148 @@
1
+ import {
2
+ type CreateProjectOutput,
3
+ deleteProject,
4
+ getConnectionURI,
5
+ getProject,
6
+ getProjectOperation,
7
+ listProjectBranchDatabases,
8
+ listProjectBranches,
9
+ type ListProjectsOutput,
10
+ listProjects,
11
+ createProject as sdkCreateProject,
12
+ updateProject,
13
+ } from "@distilled.cloud/neon";
14
+ import * as Data from "effect/Data";
15
+ import * as Duration from "effect/Duration";
1
16
  import * as Effect from "effect/Effect";
2
17
  import * as Redacted from "effect/Redacted";
18
+ import * as Schedule from "effect/Schedule";
3
19
  import { isResolved } from "../Diff.ts";
4
20
  import { createPhysicalName } from "../PhysicalName.ts";
5
21
  import * as Provider from "../Provider.ts";
6
22
  import { Resource } from "../Resource.ts";
7
- import * as api from "./api.ts";
8
23
  import { applyMigrations, runSql } from "./Migrations.ts";
9
24
  import { parsePostgresOrigin, type PostgresOrigin } from "./PostgresOrigin.ts";
10
25
  import type { Providers } from "./Providers.ts";
11
26
  import { listSqlFiles, readSqlFile } from "./SqlFile.ts";
12
27
 
28
+ type NeonOperationStatus =
29
+ | "scheduling"
30
+ | "running"
31
+ | "finished"
32
+ | "failed"
33
+ | "error"
34
+ | "cancelling"
35
+ | "cancelled"
36
+ | "skipped";
37
+
38
+ export class OperationFailed extends Data.TaggedError("OperationFailed")<{
39
+ operationId: string;
40
+ action: string;
41
+ status: NeonOperationStatus;
42
+ error?: string;
43
+ }> {}
44
+
45
+ class OperationPending extends Data.TaggedError("OperationPending")<{
46
+ operationId: string;
47
+ }> {}
48
+
49
+ const isOperationComplete = (status: NeonOperationStatus): boolean =>
50
+ status === "finished" ||
51
+ status === "failed" ||
52
+ status === "error" ||
53
+ status === "cancelled" ||
54
+ status === "skipped";
55
+
56
+ /**
57
+ * Wait for the given operations to reach a terminal state. Polls every
58
+ * 500ms with exponential backoff up to ~30s per operation.
59
+ */
60
+ export const waitForOperations = (
61
+ operations: ReadonlyArray<{
62
+ readonly id: string;
63
+ readonly project_id: string;
64
+ readonly action: string;
65
+ readonly status: NeonOperationStatus;
66
+ readonly error?: string;
67
+ }>,
68
+ ) =>
69
+ Effect.gen(function* () {
70
+ for (const op of operations) {
71
+ if (isOperationComplete(op.status)) {
72
+ if (op.status === "failed" || op.status === "error") {
73
+ return yield* new OperationFailed({
74
+ operationId: op.id,
75
+ action: op.action,
76
+ status: op.status,
77
+ error: op.error,
78
+ });
79
+ }
80
+ continue;
81
+ }
82
+ yield* getProjectOperation({
83
+ project_id: op.project_id,
84
+ operation_id: op.id,
85
+ }).pipe(
86
+ Effect.flatMap(
87
+ ({
88
+ operation,
89
+ }): Effect.Effect<void, OperationFailed | OperationPending> => {
90
+ const status = operation.status as NeonOperationStatus;
91
+ if (status === "failed" || status === "error") {
92
+ return Effect.fail(
93
+ new OperationFailed({
94
+ operationId: operation.id,
95
+ action: operation.action,
96
+ status,
97
+ error: operation.error,
98
+ }),
99
+ );
100
+ }
101
+ if (!isOperationComplete(status)) {
102
+ return Effect.fail(new OperationPending({ operationId: op.id }));
103
+ }
104
+ return Effect.void;
105
+ },
106
+ ),
107
+ Effect.retry({
108
+ while: (e: unknown) => {
109
+ const tag = (e as { _tag?: string })._tag;
110
+ return (
111
+ tag === "OperationPending" ||
112
+ tag === "TooManyRequests" ||
113
+ tag === "ServiceUnavailable" ||
114
+ tag === "InternalServerError" ||
115
+ tag === "BadGateway" ||
116
+ tag === "GatewayTimeout"
117
+ );
118
+ },
119
+ schedule: Schedule.both(
120
+ Schedule.exponential(Duration.millis(500), 1.5),
121
+ Schedule.recurs(60),
122
+ ),
123
+ }),
124
+ Effect.catchTag("OperationPending", () => Effect.void),
125
+ );
126
+ }
127
+ });
128
+
129
+ const findProjectByName = (name: string) =>
130
+ Effect.gen(function* () {
131
+ const matches: ListProjectsOutput["projects"][number][] = [];
132
+ let cursor: string | undefined;
133
+ do {
134
+ const page = yield* listProjects({
135
+ search: name,
136
+ ...(cursor !== undefined ? { cursor } : {}),
137
+ });
138
+ for (const p of page.projects) {
139
+ if (p.name === name) matches.push(p);
140
+ }
141
+ cursor = page.pagination?.cursor;
142
+ } while (cursor);
143
+ return matches;
144
+ });
145
+
13
146
  export type NeonRegion =
14
147
  | "aws-us-east-1"
15
148
  | "aws-us-east-2"
@@ -184,22 +317,12 @@ export type Project = Resource<
184
317
  */
185
318
  export const Project = Resource<Project>("Neon.Project");
186
319
 
187
- const getRoleName = (creation: api.CreateProjectOutput) =>
320
+ const getRoleName = (creation: CreateProjectOutput) =>
188
321
  creation.roles.find((r) => !r.protected)?.name ?? creation.roles[0]?.name;
189
322
 
190
- const getDatabaseName = (creation: api.CreateProjectOutput) =>
323
+ const getDatabaseName = (creation: CreateProjectOutput) =>
191
324
  creation.databases[0]?.name ?? "neondb";
192
325
 
193
- const buildConnectionUri = (
194
- uri: string,
195
- pooledHost: string,
196
- ): { uri: string; pooled: string } => {
197
- const url = new URL(uri);
198
- const pooledUrl = new URL(uri);
199
- pooledUrl.host = pooledHost;
200
- return { uri: url.toString(), pooled: pooledUrl.toString() };
201
- };
202
-
203
326
  const resolveConnection = (
204
327
  projectId: string,
205
328
  branchId: string,
@@ -207,13 +330,15 @@ const resolveConnection = (
207
330
  roleName: string,
208
331
  ) =>
209
332
  Effect.gen(function* () {
210
- const direct = yield* api.getConnectionUri(projectId, {
333
+ const direct = yield* getConnectionURI({
334
+ project_id: projectId,
211
335
  branch_id: branchId,
212
336
  database_name: databaseName,
213
337
  role_name: roleName,
214
338
  pooled: false,
215
339
  });
216
- const pooled = yield* api.getConnectionUri(projectId, {
340
+ const pooled = yield* getConnectionURI({
341
+ project_id: projectId,
217
342
  branch_id: branchId,
218
343
  database_name: databaseName,
219
344
  role_name: roleName,
@@ -286,7 +411,7 @@ export const ProjectProvider = () =>
286
411
  }),
287
412
  read: Effect.fn(function* ({ id, output, olds }) {
288
413
  if (output?.projectId) {
289
- return yield* api.getProject(output.projectId).pipe(
414
+ return yield* getProject({ project_id: output.projectId }).pipe(
290
415
  Effect.map(({ project }) => ({
291
416
  ...output,
292
417
  projectName: project.name,
@@ -294,25 +419,24 @@ export const ProjectProvider = () =>
294
419
  enableLogicalReplication:
295
420
  project.settings?.enable_logical_replication === true,
296
421
  })),
297
- Effect.catchTag("ProjectNotFound", () =>
298
- Effect.succeed(undefined),
299
- ),
422
+ Effect.catchTag("NotFound", () => Effect.succeed(undefined)),
300
423
  );
301
424
  }
302
425
  const name = yield* createProjectName(id, olds?.name);
303
- const matches = yield* api.findProjectByName(name);
426
+ const matches = yield* findProjectByName(name);
304
427
  const match = matches[0];
305
428
  if (!match) return undefined;
306
- const branches = yield* api.listProjectBranches(match.id, {
429
+ const branches = yield* listProjectBranches({
430
+ project_id: match.id,
307
431
  search: olds?.defaultBranchName ?? "main",
308
432
  });
309
433
  const defaultBranch =
310
434
  branches.branches.find((b) => b.default) ?? branches.branches[0];
311
435
  if (!defaultBranch) return undefined;
312
- const databases = yield* api.listProjectBranchDatabases(
313
- match.id,
314
- defaultBranch.id,
315
- );
436
+ const databases = yield* listProjectBranchDatabases({
437
+ project_id: match.id,
438
+ branch_id: defaultBranch.id,
439
+ });
316
440
  const db = databases.databases[0];
317
441
  if (!db) return undefined;
318
442
  const conn = yield* resolveConnection(
@@ -333,7 +457,7 @@ export const ProjectProvider = () =>
333
457
  connectionUri: conn.uri,
334
458
  pooledConnectionUri: conn.pooled,
335
459
  origin: parsePostgresOrigin(conn.uri),
336
- historyRetentionSeconds: match.history_retention_seconds,
460
+ historyRetentionSeconds: match.history_retention_seconds ?? 86400,
337
461
  enableLogicalReplication:
338
462
  match.settings?.enable_logical_replication === true,
339
463
  migrationsDir: olds?.migrationsDir,
@@ -347,8 +471,9 @@ export const ProjectProvider = () =>
347
471
  // (and let `read` upstream decide adoption); otherwise update
348
472
  // the mutable scalar fields on the existing project.
349
473
  const projectInfo = output
350
- ? yield* api
351
- .updateProject(output.projectId, {
474
+ ? yield* updateProject({
475
+ project_id: output.projectId,
476
+ project: {
352
477
  name: news.name,
353
478
  history_retention_seconds: news.historyRetentionSeconds,
354
479
  settings:
@@ -359,45 +484,47 @@ export const ProjectProvider = () =>
359
484
  news.enableLogicalReplication ?? false,
360
485
  }
361
486
  : undefined,
362
- })
363
- .pipe(
364
- Effect.map((r) => ({
365
- projectId: output.projectId,
366
- projectName: r.project.name,
367
- region: output.region,
368
- pgVersion: output.pgVersion,
369
- defaultBranchId: output.defaultBranchId,
370
- defaultBranchName: output.defaultBranchName,
371
- databaseName: output.databaseName,
372
- roleName: output.roleName,
373
- connectionUri: output.connectionUri,
374
- pooledConnectionUri: output.pooledConnectionUri,
375
- origin: output.origin,
376
- historyRetentionSeconds:
377
- r.project.history_retention_seconds ??
378
- output.historyRetentionSeconds,
379
- enableLogicalReplication:
380
- r.project.settings?.enable_logical_replication === true,
381
- })),
382
- )
487
+ },
488
+ }).pipe(
489
+ Effect.map((r) => ({
490
+ projectId: output.projectId,
491
+ projectName: r.project.name,
492
+ region: output.region,
493
+ pgVersion: output.pgVersion,
494
+ defaultBranchId: output.defaultBranchId,
495
+ defaultBranchName: output.defaultBranchName,
496
+ databaseName: output.databaseName,
497
+ roleName: output.roleName,
498
+ connectionUri: output.connectionUri,
499
+ pooledConnectionUri: output.pooledConnectionUri,
500
+ origin: output.origin,
501
+ historyRetentionSeconds:
502
+ r.project.history_retention_seconds ??
503
+ output.historyRetentionSeconds,
504
+ enableLogicalReplication:
505
+ r.project.settings?.enable_logical_replication === true,
506
+ })),
507
+ )
383
508
  : yield* Effect.gen(function* () {
384
509
  const name = yield* createProjectName(id, news.name);
385
- const created = yield* api.createProject({
386
- name,
387
- region_id: news.region,
388
- pg_version: news.pgVersion,
389
- default_branch: {
390
- name: news.defaultBranchName,
391
- role_name: news.roleName,
392
- database_name: news.databaseName,
510
+ const created = yield* sdkCreateProject({
511
+ project: {
512
+ name,
513
+ region_id: news.region,
514
+ pg_version: news.pgVersion,
515
+ branch: {
516
+ name: news.defaultBranchName,
517
+ role_name: news.roleName,
518
+ database_name: news.databaseName,
519
+ },
520
+ history_retention_seconds: news.historyRetentionSeconds,
521
+ org_id: news.orgId,
522
+ settings: news.enableLogicalReplication
523
+ ? { enable_logical_replication: true }
524
+ : undefined,
393
525
  },
394
- history_retention_seconds: news.historyRetentionSeconds,
395
- org_id: news.orgId,
396
- settings: news.enableLogicalReplication
397
- ? { enable_logical_replication: true }
398
- : undefined,
399
526
  });
400
- yield* api.waitForOperations(created.operations);
527
+ yield* waitForOperations(created.operations);
401
528
 
402
529
  const branchId = created.branch.id;
403
530
  const databaseName = getDatabaseName(created);
@@ -458,7 +585,9 @@ export const ProjectProvider = () =>
458
585
  };
459
586
  }),
460
587
  delete: Effect.fn(function* ({ output }) {
461
- yield* api.deleteProject(output.projectId);
588
+ yield* deleteProject({ project_id: output.projectId }).pipe(
589
+ Effect.catchTag("NotFound", () => Effect.void),
590
+ );
462
591
  }),
463
592
  };
464
593
  }),
package/src/Output.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import * as Data from "effect/Data";
2
- import type { Yieldable } from "effect/Effect";
3
2
  import * as Effect from "effect/Effect";
4
3
  import { pipe } from "effect/Function";
5
4
  import type { Pipeable } from "effect/Pipeable";
@@ -48,7 +47,7 @@ export interface Output<A = any, Req = any> extends Pipeable {
48
47
  readonly req: Req;
49
48
  /** @internal phantom */
50
49
  [Symbol.iterator](): Iterator<
51
- Yieldable<any, void, never, Req>,
50
+ Effect.Effect<void, never, Req>,
52
51
  Accessor<A>,
53
52
  void
54
53
  >;
@@ -100,12 +99,12 @@ export abstract class BaseExpr<A = any, Req = any> implements Output<A, Req> {
100
99
  }
101
100
 
102
101
  [Symbol.iterator](): Iterator<
103
- Yieldable<any, void, never, Req>,
102
+ Effect.Effect<void, never, Req>,
104
103
  Accessor<A>,
105
104
  void
106
105
  > {
107
106
  // @ts-expect-error - TODO(sam): fix this (works at runtime, but maybe indicates a bad assumption)
108
- return new SingleShotGen(this);
107
+ return new SingleShotGen(this.asEffect());
109
108
  }
110
109
 
111
110
  asEffect(): any {
@@ -113,7 +112,7 @@ export abstract class BaseExpr<A = any, Req = any> implements Output<A, Req> {
113
112
  }
114
113
 
115
114
  public bind(id: string): any {
116
- return RuntimeContext.asEffect().pipe(
115
+ return RuntimeContext.pipe(
117
116
  Effect.flatMap((ctx) =>
118
117
  Effect.map(ctx.set(id, this), (key) => ctx.get<A>(key)),
119
118
  ),
@@ -264,7 +263,7 @@ export const isNamedExpr = <A = any, Req = any>(
264
263
  /**
265
264
  * Wraps another `Expr` and overrides its `toString()` / inspect output.
266
265
  *
267
- * `BaseExpr.asEffect()` derives the binding id from `this.toString()`, so
266
+ * `BaseExpr` derives the binding id from `this.toString()`, so
268
267
  * wrapping an expression in `NamedExpr` makes that derived id stable and
269
268
  * caller-controlled (e.g. an env var name like `"API_KEY"`).
270
269
  */
@@ -565,7 +564,10 @@ export const evaluate: <A, Req = never>(
565
564
  }),
566
565
  );
567
566
  }
568
- return resource.attr;
567
+ // RefExpr targets persisted resources; tasks aren't cross-stack
568
+ // referenceable. Return the resource's output attrs, otherwise the
569
+ // task's output value, otherwise undefined.
570
+ return (resource as any).attr ?? (resource as any).output;
569
571
  } else if (isStackRefExpr(expr)) {
570
572
  const state = yield* State.State;
571
573
  const stack = expr.stack;