alchemy 2.0.0-beta.36 → 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 (741) hide show
  1. package/bin/exec.js +646 -104
  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 +29 -13
  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 +228 -4
  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/AnalyticsEngineDataset.d.ts +54 -0
  120. package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDataset.d.ts.map +1 -0
  121. package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDataset.js +17 -0
  122. package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDataset.js.map +1 -0
  123. package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.d.ts +37 -0
  124. package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.d.ts.map +1 -0
  125. package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.js +45 -0
  126. package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.js.map +1 -0
  127. package/lib/Cloudflare/AnalyticsEngine/index.d.ts +3 -0
  128. package/lib/Cloudflare/AnalyticsEngine/index.d.ts.map +1 -0
  129. package/lib/Cloudflare/AnalyticsEngine/index.js +3 -0
  130. package/lib/Cloudflare/AnalyticsEngine/index.js.map +1 -0
  131. package/lib/Cloudflare/Artifacts/ArtifactsBinding.js +1 -1
  132. package/lib/Cloudflare/Artifacts/ArtifactsBinding.js.map +1 -1
  133. package/lib/Cloudflare/CloudflareEnvironment.d.ts +1 -1
  134. package/lib/Cloudflare/Container/Container.js +0 -1
  135. package/lib/Cloudflare/Container/Container.js.map +1 -1
  136. package/lib/Cloudflare/Container/ContainerApplication.d.ts +1 -1
  137. package/lib/Cloudflare/Container/ContainerApplication.d.ts.map +1 -1
  138. package/lib/Cloudflare/Container/ContainerApplication.js +4 -6
  139. package/lib/Cloudflare/Container/ContainerApplication.js.map +1 -1
  140. package/lib/Cloudflare/Container/ContainerBinding.js +2 -2
  141. package/lib/Cloudflare/Container/ContainerBinding.js.map +1 -1
  142. package/lib/Cloudflare/D1/D1Connection.d.ts +47 -3
  143. package/lib/Cloudflare/D1/D1Connection.d.ts.map +1 -1
  144. package/lib/Cloudflare/D1/D1Connection.js +62 -5
  145. package/lib/Cloudflare/D1/D1Connection.js.map +1 -1
  146. package/lib/Cloudflare/D1/D1Database.d.ts +1 -1
  147. package/lib/Cloudflare/D1/D1SqlFile.d.ts +2 -2
  148. package/lib/Cloudflare/Email/EmailAddress.d.ts +45 -0
  149. package/lib/Cloudflare/Email/EmailAddress.d.ts.map +1 -0
  150. package/lib/Cloudflare/Email/EmailAddress.js +99 -0
  151. package/lib/Cloudflare/Email/EmailAddress.js.map +1 -0
  152. package/lib/Cloudflare/Email/EmailRouting.d.ts +42 -0
  153. package/lib/Cloudflare/Email/EmailRouting.d.ts.map +1 -0
  154. package/lib/Cloudflare/Email/EmailRouting.js +89 -0
  155. package/lib/Cloudflare/Email/EmailRouting.js.map +1 -0
  156. package/lib/Cloudflare/Email/EmailRule.d.ts +80 -0
  157. package/lib/Cloudflare/Email/EmailRule.d.ts.map +1 -0
  158. package/lib/Cloudflare/Email/EmailRule.js +110 -0
  159. package/lib/Cloudflare/Email/EmailRule.js.map +1 -0
  160. package/lib/Cloudflare/Email/SendEmail.d.ts +74 -0
  161. package/lib/Cloudflare/Email/SendEmail.d.ts.map +1 -0
  162. package/lib/Cloudflare/Email/SendEmail.js +19 -0
  163. package/lib/Cloudflare/Email/SendEmail.js.map +1 -0
  164. package/lib/Cloudflare/Email/SendEmailBinding.d.ts +64 -0
  165. package/lib/Cloudflare/Email/SendEmailBinding.d.ts.map +1 -0
  166. package/lib/Cloudflare/Email/SendEmailBinding.js +54 -0
  167. package/lib/Cloudflare/Email/SendEmailBinding.js.map +1 -0
  168. package/lib/Cloudflare/Email/index.d.ts +6 -0
  169. package/lib/Cloudflare/Email/index.d.ts.map +1 -0
  170. package/lib/Cloudflare/Email/index.js +6 -0
  171. package/lib/Cloudflare/Email/index.js.map +1 -0
  172. package/lib/Cloudflare/Hyperdrive/Hyperdrive.d.ts +1 -1
  173. package/lib/Cloudflare/Images/ImagesBinding.js +1 -1
  174. package/lib/Cloudflare/Images/ImagesBinding.js.map +1 -1
  175. package/lib/Cloudflare/KV/KVNamespaceBinding.js +1 -1
  176. package/lib/Cloudflare/KV/KVNamespaceBinding.js.map +1 -1
  177. package/lib/Cloudflare/Local/Sidecar.d.ts +1 -1
  178. package/lib/Cloudflare/Local/SidecarHandlers.d.ts +1 -1
  179. package/lib/Cloudflare/Local/SidecarHandlers.js +9 -1
  180. package/lib/Cloudflare/Local/SidecarHandlers.js.map +1 -1
  181. package/lib/Cloudflare/Local/SidecarServer.js +1 -1
  182. package/lib/Cloudflare/Local/SidecarServer.js.map +1 -1
  183. package/lib/Cloudflare/Providers.d.ts.map +1 -1
  184. package/lib/Cloudflare/Providers.js +9 -1
  185. package/lib/Cloudflare/Providers.js.map +1 -1
  186. package/lib/Cloudflare/Queue/QueueBinding.js +1 -1
  187. package/lib/Cloudflare/Queue/QueueBinding.js.map +1 -1
  188. package/lib/Cloudflare/R2/R2Bucket.d.ts.map +1 -1
  189. package/lib/Cloudflare/R2/R2Bucket.js +16 -0
  190. package/lib/Cloudflare/R2/R2Bucket.js.map +1 -1
  191. package/lib/Cloudflare/R2/R2BucketBinding.js +1 -1
  192. package/lib/Cloudflare/R2/R2BucketBinding.js.map +1 -1
  193. package/lib/Cloudflare/SecretsStore/SecretBinding.js +1 -1
  194. package/lib/Cloudflare/SecretsStore/SecretBinding.js.map +1 -1
  195. package/lib/Cloudflare/StateStore/Api.d.ts +7 -2
  196. package/lib/Cloudflare/StateStore/Api.d.ts.map +1 -1
  197. package/lib/Cloudflare/StateStore/Api.js +23 -1
  198. package/lib/Cloudflare/StateStore/Api.js.map +1 -1
  199. package/lib/Cloudflare/StateStore/State.d.ts +2 -2
  200. package/lib/Cloudflare/StateStore/Store.d.ts +16 -1
  201. package/lib/Cloudflare/StateStore/Store.d.ts.map +1 -1
  202. package/lib/Cloudflare/StateStore/Store.js +22 -5
  203. package/lib/Cloudflare/StateStore/Store.js.map +1 -1
  204. package/lib/Cloudflare/Workers/Assets.d.ts +2 -2
  205. package/lib/Cloudflare/Workers/Assets.d.ts.map +1 -1
  206. package/lib/Cloudflare/Workers/Assets.js +5 -4
  207. package/lib/Cloudflare/Workers/Assets.js.map +1 -1
  208. package/lib/Cloudflare/Workers/CronEventSource.d.ts +35 -0
  209. package/lib/Cloudflare/Workers/CronEventSource.d.ts.map +1 -0
  210. package/lib/Cloudflare/Workers/CronEventSource.js +55 -0
  211. package/lib/Cloudflare/Workers/CronEventSource.js.map +1 -0
  212. package/lib/Cloudflare/Workers/InferEnv.d.ts +37 -2
  213. package/lib/Cloudflare/Workers/InferEnv.d.ts.map +1 -1
  214. package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts.map +1 -1
  215. package/lib/Cloudflare/Workers/LocalWorkerProvider.js +2 -1
  216. package/lib/Cloudflare/Workers/LocalWorkerProvider.js.map +1 -1
  217. package/lib/Cloudflare/Workers/Rpc.d.ts +76 -3
  218. package/lib/Cloudflare/Workers/Rpc.d.ts.map +1 -1
  219. package/lib/Cloudflare/Workers/Rpc.js +197 -13
  220. package/lib/Cloudflare/Workers/Rpc.js.map +1 -1
  221. package/lib/Cloudflare/Workers/Worker.d.ts +24 -4
  222. package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
  223. package/lib/Cloudflare/Workers/Worker.js +187 -45
  224. package/lib/Cloudflare/Workers/Worker.js.map +1 -1
  225. package/lib/Cloudflare/Workers/WorkerBundle.d.ts +1 -1
  226. package/lib/Cloudflare/Workers/WorkerBundle.d.ts.map +1 -1
  227. package/lib/Cloudflare/Workers/WorkerBundle.js +19 -11
  228. package/lib/Cloudflare/Workers/WorkerBundle.js.map +1 -1
  229. package/lib/Cloudflare/Workers/WorkerName.d.ts +1 -1
  230. package/lib/Cloudflare/Workers/Workflow.d.ts +50 -47
  231. package/lib/Cloudflare/Workers/Workflow.d.ts.map +1 -1
  232. package/lib/Cloudflare/Workers/Workflow.js +43 -37
  233. package/lib/Cloudflare/Workers/Workflow.js.map +1 -1
  234. package/lib/Cloudflare/Workers/index.d.ts +1 -0
  235. package/lib/Cloudflare/Workers/index.d.ts.map +1 -1
  236. package/lib/Cloudflare/Workers/index.js +1 -0
  237. package/lib/Cloudflare/Workers/index.js.map +1 -1
  238. package/lib/Cloudflare/index.d.ts +2 -0
  239. package/lib/Cloudflare/index.d.ts.map +1 -1
  240. package/lib/Cloudflare/index.js +2 -0
  241. package/lib/Cloudflare/index.js.map +1 -1
  242. package/lib/Construct.d.ts +3 -3
  243. package/lib/Construct.d.ts.map +1 -1
  244. package/lib/Construct.js.map +1 -1
  245. package/lib/Deploy.d.ts +5 -2
  246. package/lib/Deploy.d.ts.map +1 -1
  247. package/lib/Deploy.js +2 -2
  248. package/lib/Deploy.js.map +1 -1
  249. package/lib/Destroy.d.ts +5 -2
  250. package/lib/Destroy.d.ts.map +1 -1
  251. package/lib/Destroy.js +3 -2
  252. package/lib/Destroy.js.map +1 -1
  253. package/lib/Drizzle/Providers.d.ts +1 -1
  254. package/lib/Drizzle/Schema.d.ts +1 -1
  255. package/lib/GitHub/Providers.d.ts +1 -1
  256. package/lib/Http.d.ts +1 -1
  257. package/lib/Http.d.ts.map +1 -1
  258. package/lib/Http.js +1 -1
  259. package/lib/Http.js.map +1 -1
  260. package/lib/Namespace.d.ts.map +1 -1
  261. package/lib/Namespace.js +3 -4
  262. package/lib/Namespace.js.map +1 -1
  263. package/lib/Neon/Branch.d.ts +2 -2
  264. package/lib/Neon/Branch.d.ts.map +1 -1
  265. package/lib/Neon/Branch.js +59 -27
  266. package/lib/Neon/Branch.js.map +1 -1
  267. package/lib/Neon/Credentials.d.ts +2 -2
  268. package/lib/Neon/Credentials.d.ts.map +1 -1
  269. package/lib/Neon/Credentials.js +2 -2
  270. package/lib/Neon/Credentials.js.map +1 -1
  271. package/lib/Neon/NeonEnvironment.d.ts +1 -1
  272. package/lib/Neon/Project.d.ts +25 -1
  273. package/lib/Neon/Project.d.ts.map +1 -1
  274. package/lib/Neon/Project.js +121 -42
  275. package/lib/Neon/Project.js.map +1 -1
  276. package/lib/Neon/Providers.d.ts +1 -1
  277. package/lib/Neon/SqlFile.d.ts +2 -2
  278. package/lib/Output.d.ts +47 -8
  279. package/lib/Output.d.ts.map +1 -1
  280. package/lib/Output.js +106 -7
  281. package/lib/Output.js.map +1 -1
  282. package/lib/PhysicalName.d.ts +1 -1
  283. package/lib/Plan.d.ts +36 -1
  284. package/lib/Plan.d.ts.map +1 -1
  285. package/lib/Plan.js +284 -37
  286. package/lib/Plan.js.map +1 -1
  287. package/lib/Platform.d.ts.map +1 -1
  288. package/lib/Platform.js +22 -9
  289. package/lib/Platform.js.map +1 -1
  290. package/lib/Provider.d.ts +1 -1
  291. package/lib/Provider.d.ts.map +1 -1
  292. package/lib/Provider.js +1 -1
  293. package/lib/Provider.js.map +1 -1
  294. package/lib/Random.d.ts +1 -1
  295. package/lib/Random.d.ts.map +1 -1
  296. package/lib/Random.js +1 -1
  297. package/lib/Random.js.map +1 -1
  298. package/lib/Ref.d.ts +4 -1
  299. package/lib/Ref.d.ts.map +1 -1
  300. package/lib/Ref.js +1 -1
  301. package/lib/Ref.js.map +1 -1
  302. package/lib/Resource.d.ts +8 -0
  303. package/lib/Resource.d.ts.map +1 -1
  304. package/lib/Resource.js +12 -25
  305. package/lib/Resource.js.map +1 -1
  306. package/lib/Runtime.d.ts +24 -0
  307. package/lib/Runtime.d.ts.map +1 -0
  308. package/lib/Runtime.js +31 -0
  309. package/lib/Runtime.js.map +1 -0
  310. package/lib/RuntimeContext.d.ts +3 -1
  311. package/lib/RuntimeContext.d.ts.map +1 -1
  312. package/lib/RuntimeContext.js.map +1 -1
  313. package/lib/Secret.d.ts +50 -0
  314. package/lib/Secret.d.ts.map +1 -0
  315. package/lib/Secret.js +23 -0
  316. package/lib/Secret.js.map +1 -0
  317. package/lib/Serverless/Function.d.ts +9 -1
  318. package/lib/Serverless/Function.d.ts.map +1 -1
  319. package/lib/Sidecar/RpcClient.d.ts +1 -1
  320. package/lib/Sidecar/RpcPaths.d.ts +1 -1
  321. package/lib/Sidecar/RpcServer.d.ts +1 -1
  322. package/lib/Sidecar/RpcServices.d.ts +1 -1
  323. package/lib/Stack.d.ts +20 -6
  324. package/lib/Stack.d.ts.map +1 -1
  325. package/lib/Stack.js +35 -23
  326. package/lib/Stack.js.map +1 -1
  327. package/lib/State/ActionState.d.ts +48 -0
  328. package/lib/State/ActionState.d.ts.map +1 -0
  329. package/lib/State/ActionState.js +1 -0
  330. package/lib/State/ActionState.js.map +1 -0
  331. package/lib/State/HttpStateApi.d.ts +15 -1
  332. package/lib/State/HttpStateApi.d.ts.map +1 -1
  333. package/lib/State/HttpStateApi.js +11 -0
  334. package/lib/State/HttpStateApi.js.map +1 -1
  335. package/lib/State/HttpStateStore.d.ts.map +1 -1
  336. package/lib/State/HttpStateStore.js +12 -1
  337. package/lib/State/HttpStateStore.js.map +1 -1
  338. package/lib/State/InMemoryState.d.ts +2 -2
  339. package/lib/State/InMemoryState.d.ts.map +1 -1
  340. package/lib/State/InMemoryState.js +12 -6
  341. package/lib/State/InMemoryState.js.map +1 -1
  342. package/lib/State/LocalState.d.ts +2 -2
  343. package/lib/State/LocalState.d.ts.map +1 -1
  344. package/lib/State/LocalState.js +11 -2
  345. package/lib/State/LocalState.js.map +1 -1
  346. package/lib/State/ResourceState.d.ts +5 -0
  347. package/lib/State/ResourceState.d.ts.map +1 -1
  348. package/lib/State/State.d.ts +31 -2
  349. package/lib/State/State.d.ts.map +1 -1
  350. package/lib/State/State.js +2 -0
  351. package/lib/State/State.js.map +1 -1
  352. package/lib/State/index.d.ts +1 -0
  353. package/lib/State/index.d.ts.map +1 -1
  354. package/lib/State/index.js +1 -0
  355. package/lib/State/index.js.map +1 -1
  356. package/lib/Test/Bun.d.ts.map +1 -1
  357. package/lib/Test/Bun.js +30 -7
  358. package/lib/Test/Bun.js.map +1 -1
  359. package/lib/Test/Core.d.ts +19 -4
  360. package/lib/Test/Core.d.ts.map +1 -1
  361. package/lib/Test/Core.js +33 -12
  362. package/lib/Test/Core.js.map +1 -1
  363. package/lib/Test/Vitest.d.ts.map +1 -1
  364. package/lib/Test/Vitest.js +24 -5
  365. package/lib/Test/Vitest.js.map +1 -1
  366. package/lib/Util/FileLogger.d.ts +1 -1
  367. package/lib/Util/LocalhostDns.d.ts +14 -10
  368. package/lib/Util/LocalhostDns.d.ts.map +1 -1
  369. package/lib/Util/LocalhostDns.js +27 -36
  370. package/lib/Util/LocalhostDns.js.map +1 -1
  371. package/lib/Util/effect.d.ts +7 -0
  372. package/lib/Util/effect.d.ts.map +1 -1
  373. package/lib/Util/effect.js +10 -4
  374. package/lib/Util/effect.js.map +1 -1
  375. package/lib/Util/exec.d.ts.map +1 -0
  376. package/lib/Util/exec.js.map +1 -0
  377. package/lib/Util/hash.d.ts +8 -0
  378. package/lib/Util/hash.d.ts.map +1 -0
  379. package/lib/Util/hash.js +11 -0
  380. package/lib/Util/hash.js.map +1 -0
  381. package/lib/Util/ignore.d.ts +40 -0
  382. package/lib/Util/ignore.d.ts.map +1 -0
  383. package/lib/Util/ignore.js +591 -0
  384. package/lib/Util/ignore.js.map +1 -0
  385. package/lib/Variable.d.ts +29 -0
  386. package/lib/Variable.d.ts.map +1 -0
  387. package/lib/Variable.js +9 -0
  388. package/lib/Variable.js.map +1 -0
  389. package/lib/index.d.ts +4 -0
  390. package/lib/index.d.ts.map +1 -1
  391. package/lib/index.js +4 -0
  392. package/lib/index.js.map +1 -1
  393. package/lib/tsconfig.test.tsbuildinfo +1 -1
  394. package/package.json +22 -29
  395. package/src/AWS/Credentials.ts +1 -2
  396. package/src/AWS/DynamoDB/Stream.ts +1 -4
  397. package/src/AWS/EC2/hosted.ts +14 -16
  398. package/src/AWS/ECS/Task.ts +14 -16
  399. package/src/AWS/Endpoint.ts +2 -5
  400. package/src/AWS/EventBridge/EventSource.ts +1 -4
  401. package/src/AWS/Kinesis/StreamEventSource.ts +1 -4
  402. package/src/AWS/Lambda/Function.ts +47 -23
  403. package/src/AWS/Providers.ts +22 -3
  404. package/src/AWS/Region.ts +2 -3
  405. package/src/AWS/S3/Bucket.ts +7 -2
  406. package/src/AWS/S3/BucketNotifications.ts +1 -4
  407. package/src/AWS/SNS/TopicEventSource.ts +1 -4
  408. package/src/AWS/SQS/Queue.ts +40 -6
  409. package/src/Action.ts +280 -0
  410. package/src/Apply.ts +359 -24
  411. package/src/Artifacts.ts +2 -4
  412. package/src/Auth/AuthProvider.ts +1 -1
  413. package/src/Auth/Env.ts +12 -20
  414. package/src/Binding.ts +5 -9
  415. package/src/Bundle/Docker.ts +1 -1
  416. package/src/Cli/Event.ts +4 -0
  417. package/src/Cli/NamespaceTree.ts +52 -5
  418. package/src/Cli/commands/_shared.ts +2 -2
  419. package/src/Cli/commands/deploy.ts +1 -1
  420. package/src/Cli/commands/logs.ts +4 -4
  421. package/src/Cli/commands/tail.ts +4 -4
  422. package/src/Cli/tui/components/Plan.tsx +65 -17
  423. package/src/Cli/tui/components/PlanProgress.tsx +142 -32
  424. package/src/Cloudflare/Access.ts +1 -1
  425. package/src/Cloudflare/AnalyticsEngine/AnalyticsEngineDataset.ts +82 -0
  426. package/src/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.ts +106 -0
  427. package/src/Cloudflare/AnalyticsEngine/index.ts +2 -0
  428. package/src/Cloudflare/Artifacts/ArtifactsBinding.ts +1 -1
  429. package/src/Cloudflare/Container/Container.ts +1 -1
  430. package/src/Cloudflare/Container/ContainerApplication.ts +4 -6
  431. package/src/Cloudflare/Container/ContainerBinding.ts +2 -2
  432. package/src/Cloudflare/D1/D1Connection.ts +95 -12
  433. package/src/Cloudflare/Email/EmailAddress.ts +155 -0
  434. package/src/Cloudflare/Email/EmailRouting.ts +138 -0
  435. package/src/Cloudflare/Email/EmailRule.ts +210 -0
  436. package/src/Cloudflare/Email/SendEmail.ts +95 -0
  437. package/src/Cloudflare/Email/SendEmailBinding.ts +124 -0
  438. package/src/Cloudflare/Email/index.ts +5 -0
  439. package/src/Cloudflare/Images/ImagesBinding.ts +1 -1
  440. package/src/Cloudflare/KV/KVNamespaceBinding.ts +1 -1
  441. package/src/Cloudflare/Local/SidecarHandlers.ts +9 -1
  442. package/src/Cloudflare/Local/SidecarServer.ts +1 -1
  443. package/src/Cloudflare/Providers.ts +14 -0
  444. package/src/Cloudflare/Queue/QueueBinding.ts +1 -1
  445. package/src/Cloudflare/R2/R2Bucket.ts +31 -0
  446. package/src/Cloudflare/R2/R2BucketBinding.ts +1 -1
  447. package/src/Cloudflare/SecretsStore/SecretBinding.ts +1 -1
  448. package/src/Cloudflare/StateStore/Api.ts +34 -1
  449. package/src/Cloudflare/StateStore/Store.ts +40 -10
  450. package/src/Cloudflare/Workers/Assets.ts +5 -6
  451. package/src/Cloudflare/Workers/CronEventSource.ts +89 -0
  452. package/src/Cloudflare/Workers/InferEnv.ts +94 -20
  453. package/src/Cloudflare/Workers/LocalWorkerProvider.ts +9 -1
  454. package/src/Cloudflare/Workers/Rpc.ts +227 -18
  455. package/src/Cloudflare/Workers/Worker.ts +294 -65
  456. package/src/Cloudflare/Workers/WorkerBundle.ts +19 -11
  457. package/src/Cloudflare/Workers/Workflow.ts +76 -72
  458. package/src/Cloudflare/Workers/index.ts +1 -0
  459. package/src/Cloudflare/index.ts +2 -0
  460. package/src/Construct.ts +3 -7
  461. package/src/Deploy.ts +5 -1
  462. package/src/Destroy.ts +6 -1
  463. package/src/Http.ts +1 -1
  464. package/src/Namespace.ts +4 -4
  465. package/src/Neon/Branch.ts +93 -59
  466. package/src/Neon/Credentials.ts +2 -2
  467. package/src/Neon/Project.ts +193 -64
  468. package/src/Output.ts +129 -18
  469. package/src/Plan.ts +375 -36
  470. package/src/Platform.ts +26 -11
  471. package/src/Provider.ts +8 -3
  472. package/src/Random.ts +1 -1
  473. package/src/Ref.ts +10 -5
  474. package/src/Resource.ts +24 -25
  475. package/src/Runtime.ts +38 -0
  476. package/src/RuntimeContext.ts +1 -0
  477. package/src/Secret.ts +87 -0
  478. package/src/Serverless/Function.ts +10 -1
  479. package/src/Stack.ts +62 -35
  480. package/src/State/ActionState.ts +51 -0
  481. package/src/State/HttpStateApi.ts +21 -0
  482. package/src/State/HttpStateStore.ts +27 -2
  483. package/src/State/InMemoryState.ts +31 -10
  484. package/src/State/LocalState.ts +28 -4
  485. package/src/State/ResourceState.ts +5 -0
  486. package/src/State/State.ts +38 -2
  487. package/src/State/index.ts +1 -0
  488. package/src/Test/Bun.ts +43 -7
  489. package/src/Test/Core.ts +33 -11
  490. package/src/Test/Vitest.ts +33 -4
  491. package/src/Util/LocalhostDns.ts +30 -36
  492. package/src/Util/effect.ts +29 -4
  493. package/src/Util/hash.ts +14 -0
  494. package/src/Util/ignore.ts +815 -0
  495. package/src/Variable.ts +44 -0
  496. package/src/index.ts +9 -0
  497. package/lib/Agent/Agent.d.ts +0 -9
  498. package/lib/Agent/Agent.d.ts.map +0 -1
  499. package/lib/Agent/Agent.js +0 -10
  500. package/lib/Agent/Agent.js.map +0 -1
  501. package/lib/Agent/Aspect.d.ts +0 -51
  502. package/lib/Agent/Aspect.d.ts.map +0 -1
  503. package/lib/Agent/Aspect.js +0 -45
  504. package/lib/Agent/Aspect.js.map +0 -1
  505. package/lib/Agent/AspectGraph.d.ts +0 -45
  506. package/lib/Agent/AspectGraph.d.ts.map +0 -1
  507. package/lib/Agent/AspectGraph.js +0 -39
  508. package/lib/Agent/AspectGraph.js.map +0 -1
  509. package/lib/Agent/ContextPlugin.d.ts +0 -8
  510. package/lib/Agent/ContextPlugin.d.ts.map +0 -1
  511. package/lib/Agent/ContextPlugin.js +0 -3
  512. package/lib/Agent/ContextPlugin.js.map +0 -1
  513. package/lib/Agent/Plugin.d.ts +0 -18
  514. package/lib/Agent/Plugin.d.ts.map +0 -1
  515. package/lib/Agent/Plugin.js +0 -8
  516. package/lib/Agent/Plugin.js.map +0 -1
  517. package/lib/Agent/chat/channel.d.ts +0 -9
  518. package/lib/Agent/chat/channel.d.ts.map +0 -1
  519. package/lib/Agent/chat/channel.js +0 -10
  520. package/lib/Agent/chat/channel.js.map +0 -1
  521. package/lib/Agent/chat/event.d.ts +0 -32
  522. package/lib/Agent/chat/event.d.ts.map +0 -1
  523. package/lib/Agent/chat/event.js +0 -32
  524. package/lib/Agent/chat/event.js.map +0 -1
  525. package/lib/Agent/chat/message.d.ts +0 -22
  526. package/lib/Agent/chat/message.d.ts.map +0 -1
  527. package/lib/Agent/chat/message.js +0 -31
  528. package/lib/Agent/chat/message.js.map +0 -1
  529. package/lib/Agent/chat/service.d.ts +0 -102
  530. package/lib/Agent/chat/service.d.ts.map +0 -1
  531. package/lib/Agent/chat/service.js +0 -79
  532. package/lib/Agent/chat/service.js.map +0 -1
  533. package/lib/Agent/chat/thread.d.ts +0 -13
  534. package/lib/Agent/chat/thread.d.ts.map +0 -1
  535. package/lib/Agent/chat/thread.js +0 -16
  536. package/lib/Agent/chat/thread.js.map +0 -1
  537. package/lib/Agent/coding/bash.d.ts +0 -36
  538. package/lib/Agent/coding/bash.d.ts.map +0 -1
  539. package/lib/Agent/coding/bash.js +0 -170
  540. package/lib/Agent/coding/bash.js.map +0 -1
  541. package/lib/Agent/coding/edit.d.ts +0 -31
  542. package/lib/Agent/coding/edit.d.ts.map +0 -1
  543. package/lib/Agent/coding/edit.js +0 -90
  544. package/lib/Agent/coding/edit.js.map +0 -1
  545. package/lib/Agent/coding/glob.d.ts +0 -23
  546. package/lib/Agent/coding/glob.d.ts.map +0 -1
  547. package/lib/Agent/coding/glob.js +0 -78
  548. package/lib/Agent/coding/glob.js.map +0 -1
  549. package/lib/Agent/coding/grep.d.ts +0 -26
  550. package/lib/Agent/coding/grep.d.ts.map +0 -1
  551. package/lib/Agent/coding/grep.js +0 -105
  552. package/lib/Agent/coding/grep.js.map +0 -1
  553. package/lib/Agent/coding/index.d.ts +0 -8
  554. package/lib/Agent/coding/index.d.ts.map +0 -1
  555. package/lib/Agent/coding/index.js +0 -8
  556. package/lib/Agent/coding/index.js.map +0 -1
  557. package/lib/Agent/coding/read.d.ts +0 -27
  558. package/lib/Agent/coding/read.d.ts.map +0 -1
  559. package/lib/Agent/coding/read.js +0 -89
  560. package/lib/Agent/coding/read.js.map +0 -1
  561. package/lib/Agent/coding/readlints.d.ts +0 -19
  562. package/lib/Agent/coding/readlints.d.ts.map +0 -1
  563. package/lib/Agent/coding/readlints.js +0 -53
  564. package/lib/Agent/coding/readlints.js.map +0 -1
  565. package/lib/Agent/coding/write.d.ts +0 -22
  566. package/lib/Agent/coding/write.d.ts.map +0 -1
  567. package/lib/Agent/coding/write.js +0 -53
  568. package/lib/Agent/coding/write.js.map +0 -1
  569. package/lib/Agent/fs/file.d.ts +0 -12
  570. package/lib/Agent/fs/file.d.ts.map +0 -1
  571. package/lib/Agent/fs/file.js +0 -8
  572. package/lib/Agent/fs/file.js.map +0 -1
  573. package/lib/Agent/fs/folder.d.ts +0 -5
  574. package/lib/Agent/fs/folder.d.ts.map +0 -1
  575. package/lib/Agent/fs/folder.js +0 -3
  576. package/lib/Agent/fs/folder.js.map +0 -1
  577. package/lib/Agent/index.d.ts +0 -9
  578. package/lib/Agent/index.d.ts.map +0 -1
  579. package/lib/Agent/index.js +0 -9
  580. package/lib/Agent/index.js.map +0 -1
  581. package/lib/Agent/llm/error.d.ts +0 -208
  582. package/lib/Agent/llm/error.d.ts.map +0 -1
  583. package/lib/Agent/llm/error.js +0 -209
  584. package/lib/Agent/llm/error.js.map +0 -1
  585. package/lib/Agent/llm/index.d.ts +0 -5
  586. package/lib/Agent/llm/index.d.ts.map +0 -1
  587. package/lib/Agent/llm/index.js +0 -5
  588. package/lib/Agent/llm/index.js.map +0 -1
  589. package/lib/Agent/llm/llm.d.ts +0 -32
  590. package/lib/Agent/llm/llm.d.ts.map +0 -1
  591. package/lib/Agent/llm/llm.js +0 -74
  592. package/lib/Agent/llm/llm.js.map +0 -1
  593. package/lib/Agent/llm/stream-collectors.d.ts +0 -46
  594. package/lib/Agent/llm/stream-collectors.d.ts.map +0 -1
  595. package/lib/Agent/llm/stream-collectors.js +0 -33
  596. package/lib/Agent/llm/stream-collectors.js.map +0 -1
  597. package/lib/Agent/llm/stream-text-part.d.ts +0 -5
  598. package/lib/Agent/llm/stream-text-part.d.ts.map +0 -1
  599. package/lib/Agent/llm/stream-text-part.js +0 -4
  600. package/lib/Agent/llm/stream-text-part.js.map +0 -1
  601. package/lib/Agent/lsp/client.d.ts +0 -122
  602. package/lib/Agent/lsp/client.d.ts.map +0 -1
  603. package/lib/Agent/lsp/client.js +0 -180
  604. package/lib/Agent/lsp/client.js.map +0 -1
  605. package/lib/Agent/lsp/diagnostics.d.ts +0 -16
  606. package/lib/Agent/lsp/diagnostics.d.ts.map +0 -1
  607. package/lib/Agent/lsp/diagnostics.js +0 -48
  608. package/lib/Agent/lsp/diagnostics.js.map +0 -1
  609. package/lib/Agent/lsp/jsonrpc.d.ts +0 -90
  610. package/lib/Agent/lsp/jsonrpc.d.ts.map +0 -1
  611. package/lib/Agent/lsp/jsonrpc.js +0 -178
  612. package/lib/Agent/lsp/jsonrpc.js.map +0 -1
  613. package/lib/Agent/lsp/manager.d.ts +0 -38
  614. package/lib/Agent/lsp/manager.d.ts.map +0 -1
  615. package/lib/Agent/lsp/manager.js +0 -98
  616. package/lib/Agent/lsp/manager.js.map +0 -1
  617. package/lib/Agent/lsp/servers.d.ts +0 -28
  618. package/lib/Agent/lsp/servers.d.ts.map +0 -1
  619. package/lib/Agent/lsp/servers.js +0 -21
  620. package/lib/Agent/lsp/servers.js.map +0 -1
  621. package/lib/Agent/process/driver.d.ts +0 -10
  622. package/lib/Agent/process/driver.d.ts.map +0 -1
  623. package/lib/Agent/process/driver.js +0 -153
  624. package/lib/Agent/process/driver.js.map +0 -1
  625. package/lib/Agent/process/issue-service.d.ts +0 -44
  626. package/lib/Agent/process/issue-service.d.ts.map +0 -1
  627. package/lib/Agent/process/issue-service.js +0 -28
  628. package/lib/Agent/process/issue-service.js.map +0 -1
  629. package/lib/Agent/process/issue-tools.d.ts +0 -28
  630. package/lib/Agent/process/issue-tools.d.ts.map +0 -1
  631. package/lib/Agent/process/issue-tools.js +0 -28
  632. package/lib/Agent/process/issue-tools.js.map +0 -1
  633. package/lib/Agent/process/issue.d.ts +0 -16
  634. package/lib/Agent/process/issue.d.ts.map +0 -1
  635. package/lib/Agent/process/issue.js +0 -17
  636. package/lib/Agent/process/issue.js.map +0 -1
  637. package/lib/Agent/process/organization.d.ts +0 -4
  638. package/lib/Agent/process/organization.d.ts.map +0 -1
  639. package/lib/Agent/process/organization.js +0 -3
  640. package/lib/Agent/process/organization.js.map +0 -1
  641. package/lib/Agent/process/process.d.ts +0 -5
  642. package/lib/Agent/process/process.d.ts.map +0 -1
  643. package/lib/Agent/process/process.js +0 -3
  644. package/lib/Agent/process/process.js.map +0 -1
  645. package/lib/Agent/process/reply.d.ts +0 -16
  646. package/lib/Agent/process/reply.d.ts.map +0 -1
  647. package/lib/Agent/process/reply.js +0 -18
  648. package/lib/Agent/process/reply.js.map +0 -1
  649. package/lib/Agent/process/task.d.ts +0 -25
  650. package/lib/Agent/process/task.d.ts.map +0 -1
  651. package/lib/Agent/process/task.js +0 -26
  652. package/lib/Agent/process/task.js.map +0 -1
  653. package/lib/Agent/tool/index.d.ts +0 -4
  654. package/lib/Agent/tool/index.d.ts.map +0 -1
  655. package/lib/Agent/tool/index.js +0 -4
  656. package/lib/Agent/tool/index.js.map +0 -1
  657. package/lib/Agent/tool/parameter.d.ts +0 -12
  658. package/lib/Agent/tool/parameter.d.ts.map +0 -1
  659. package/lib/Agent/tool/parameter.js +0 -6
  660. package/lib/Agent/tool/parameter.js.map +0 -1
  661. package/lib/Agent/tool/result.d.ts +0 -17
  662. package/lib/Agent/tool/result.d.ts.map +0 -1
  663. package/lib/Agent/tool/result.js +0 -6
  664. package/lib/Agent/tool/result.js.map +0 -1
  665. package/lib/Agent/tool/tool.d.ts +0 -32
  666. package/lib/Agent/tool/tool.d.ts.map +0 -1
  667. package/lib/Agent/tool/tool.js +0 -16
  668. package/lib/Agent/tool/tool.js.map +0 -1
  669. package/lib/Agent/util/command-validator.d.ts +0 -12
  670. package/lib/Agent/util/command-validator.d.ts.map +0 -1
  671. package/lib/Agent/util/command-validator.js +0 -74
  672. package/lib/Agent/util/command-validator.js.map +0 -1
  673. package/lib/Agent/util/exec.d.ts.map +0 -1
  674. package/lib/Agent/util/exec.js.map +0 -1
  675. package/lib/Agent/util/parser.d.ts +0 -5
  676. package/lib/Agent/util/parser.d.ts.map +0 -1
  677. package/lib/Agent/util/parser.js +0 -41
  678. package/lib/Agent/util/parser.js.map +0 -1
  679. package/lib/Agent/util/replace.d.ts +0 -38
  680. package/lib/Agent/util/replace.d.ts.map +0 -1
  681. package/lib/Agent/util/replace.js +0 -458
  682. package/lib/Agent/util/replace.js.map +0 -1
  683. package/lib/Agent/util/ripgrep.d.ts +0 -109
  684. package/lib/Agent/util/ripgrep.d.ts.map +0 -1
  685. package/lib/Agent/util/ripgrep.js +0 -221
  686. package/lib/Agent/util/ripgrep.js.map +0 -1
  687. package/lib/Neon/api.d.ts +0 -258
  688. package/lib/Neon/api.d.ts.map +0 -1
  689. package/lib/Neon/api.js +0 -215
  690. package/lib/Neon/api.js.map +0 -1
  691. package/src/Agent/Agent.ts +0 -26
  692. package/src/Agent/Aspect.ts +0 -173
  693. package/src/Agent/AspectGraph.ts +0 -98
  694. package/src/Agent/ContextPlugin.ts +0 -18
  695. package/src/Agent/Plugin.ts +0 -29
  696. package/src/Agent/chat/channel.ts +0 -26
  697. package/src/Agent/chat/event.ts +0 -43
  698. package/src/Agent/chat/message.ts +0 -35
  699. package/src/Agent/chat/service.ts +0 -133
  700. package/src/Agent/chat/thread.ts +0 -17
  701. package/src/Agent/coding/bash.ts +0 -197
  702. package/src/Agent/coding/edit.ts +0 -152
  703. package/src/Agent/coding/glob.ts +0 -96
  704. package/src/Agent/coding/grep.ts +0 -143
  705. package/src/Agent/coding/index.ts +0 -7
  706. package/src/Agent/coding/read.ts +0 -119
  707. package/src/Agent/coding/readlints.ts +0 -78
  708. package/src/Agent/coding/write.ts +0 -79
  709. package/src/Agent/fs/file.ts +0 -22
  710. package/src/Agent/fs/folder.ts +0 -16
  711. package/src/Agent/index.ts +0 -9
  712. package/src/Agent/llm/error.ts +0 -330
  713. package/src/Agent/llm/index.ts +0 -4
  714. package/src/Agent/llm/llm.ts +0 -131
  715. package/src/Agent/llm/stream-collectors.ts +0 -58
  716. package/src/Agent/llm/stream-text-part.ts +0 -7
  717. package/src/Agent/lsp/client.ts +0 -293
  718. package/src/Agent/lsp/diagnostics.ts +0 -64
  719. package/src/Agent/lsp/jsonrpc.ts +0 -317
  720. package/src/Agent/lsp/manager.ts +0 -213
  721. package/src/Agent/lsp/servers.ts +0 -37
  722. package/src/Agent/process/driver.ts +0 -168
  723. package/src/Agent/process/issue-service.ts +0 -48
  724. package/src/Agent/process/issue-tools.ts +0 -33
  725. package/src/Agent/process/issue.ts +0 -22
  726. package/src/Agent/process/organization.ts +0 -16
  727. package/src/Agent/process/process.ts +0 -16
  728. package/src/Agent/process/reply.ts +0 -21
  729. package/src/Agent/process/task.ts +0 -34
  730. package/src/Agent/tool/index.ts +0 -3
  731. package/src/Agent/tool/parameter.ts +0 -35
  732. package/src/Agent/tool/result.ts +0 -51
  733. package/src/Agent/tool/tool.ts +0 -74
  734. package/src/Agent/util/command-validator.ts +0 -98
  735. package/src/Agent/util/parser.ts +0 -39
  736. package/src/Agent/util/replace.ts +0 -559
  737. package/src/Agent/util/ripgrep.ts +0 -256
  738. package/src/Neon/api.ts +0 -579
  739. /package/lib/{Agent/util → Util}/exec.d.ts +0 -0
  740. /package/lib/{Agent/util → Util}/exec.js +0 -0
  741. /package/src/{Agent/util → Util}/exec.ts +0 -0
package/src/Plan.ts CHANGED
@@ -42,12 +42,17 @@ import {
42
42
  State,
43
43
  type CreatedResourceState,
44
44
  type CreatingResourceState,
45
+ isActionState,
46
+ type RanActionState,
45
47
  type ReplacedResourceState,
46
48
  type ReplacingResourceState,
47
49
  type ResourceState,
50
+ type ActionState,
48
51
  type UpdatedResourceState,
49
52
  type UpdatingReourceState,
50
53
  } from "./State/index.ts";
54
+ import { isAction, type ActionLike } from "./Action.ts";
55
+ import { hashInput } from "./Util/hash.ts";
51
56
  import { findCycleMembers } from "./Util/scc.ts";
52
57
 
53
58
  export type PlanError = never;
@@ -148,13 +153,66 @@ export interface Replace<
148
153
  | ReplacedResourceState;
149
154
  }
150
155
 
156
+ // ── Tasks ──────────────────────────────────────────────────────────────────
157
+ //
158
+ // Tasks live in the same FQN namespace as resources and participate in the
159
+ // same DAG (downstream/upstream edges, cycle detection). Their plan nodes
160
+ // have a different shape because they have no provider lifecycle.
161
+
162
+ export type ActionApply<T extends ActionLike = ActionLike> =
163
+ | ActionRun<T>
164
+ | ActionNoop<T>;
165
+
166
+ export interface ActionNodeBase<T extends ActionLike = ActionLike> {
167
+ readonly kind: "action";
168
+ def: T;
169
+ downstream: string[];
170
+ }
171
+
172
+ export interface ActionRun<
173
+ T extends ActionLike = ActionLike,
174
+ > extends ActionNodeBase<T> {
175
+ action: "run";
176
+ /** Input expression — resolved against tracker outputs during apply. */
177
+ input: T["Input"];
178
+ /** Previous state, if any. `undefined` on the first run. */
179
+ state: ActionState | undefined;
180
+ /** True when `--force` triggered the re-run regardless of input drift. */
181
+ forced: boolean;
182
+ }
183
+
184
+ export interface ActionNoop<
185
+ T extends ActionLike = ActionLike,
186
+ > extends ActionNodeBase<T> {
187
+ action: "noop";
188
+ state: RanActionState;
189
+ }
190
+
191
+ export interface ActionDelete<
192
+ T extends ActionLike = ActionLike,
193
+ > extends ActionNodeBase<T> {
194
+ action: "delete";
195
+ state: ActionState;
196
+ }
197
+
151
198
  export type Plan<Output = any> = {
152
199
  resources: {
153
200
  [id in string]: Apply<any>;
154
201
  };
202
+ /**
203
+ * Tasks scheduled for this apply. Keyed by FQN, same namespace as
204
+ * `resources` — Apply's scheduler merges both into a single DAG.
205
+ */
206
+ actions: {
207
+ [id in string]: ActionApply;
208
+ };
155
209
  deletions: {
156
210
  [id in string]?: Delete<ResourceLike>;
157
211
  };
212
+ /** Tasks whose state should be dropped (no body invoked on removal). */
213
+ actionDeletions: {
214
+ [id in string]?: ActionDelete;
215
+ };
158
216
  output: Output;
159
217
  /**
160
218
  * FQNs of resources that participate in a strongly-connected component
@@ -179,6 +237,7 @@ export const make = <A>(
179
237
  const state = yield* State;
180
238
 
181
239
  const resources = Object.values(stack.resources);
240
+ const actions = Object.values(stack.actions ?? {});
182
241
 
183
242
  // TODO(sam): rename terminology to Stack
184
243
  const stackName = stack.name;
@@ -215,6 +274,12 @@ export const make = <A>(
215
274
  resourceExpr: Output.ResourceExpr<any, any>,
216
275
  ): Effect.Effect<any> =>
217
276
  Effect.gen(function* () {
277
+ // Tasks share the ResourceExpr machinery but have no provider /
278
+ // stable-properties story at plan time. Leave the expression
279
+ // unsubstituted — Apply resolves it from the tracker at run time.
280
+ if (isAction(resourceExpr.src as any)) {
281
+ return resourceExpr;
282
+ }
218
283
  // @ts-expect-error
219
284
  return yield* (resolvedResources[resourceExpr.src.FQN] ??=
220
285
  yield* Effect.cached(
@@ -223,11 +288,16 @@ export const make = <A>(
223
288
 
224
289
  const provider = yield* findProviderByType(resource.Type);
225
290
  const props = yield* resolveInput(resource.Props);
226
- const oldState = yield* state.get({
291
+ const persisted = yield* state.get({
227
292
  stack: stackName,
228
293
  stage: stage,
229
294
  fqn: resource.FQN,
230
295
  });
296
+ const oldState: ResourceState | undefined = isActionState(
297
+ persisted,
298
+ )
299
+ ? undefined
300
+ : (persisted as ResourceState | undefined);
231
301
 
232
302
  if (!oldState || oldState.status === "creating") {
233
303
  return resourceExpr;
@@ -349,8 +419,53 @@ export const make = <A>(
349
419
  });
350
420
  } else if (Output.isLiteralExpr(expr)) {
351
421
  return expr.value;
422
+ } else if (Output.isRefExpr(expr)) {
423
+ const refStack = expr.stack ?? stackName;
424
+ const refStage = expr.stage ?? stage;
425
+ const refState = yield* state
426
+ .get({
427
+ stack: refStack,
428
+ stage: refStage,
429
+ fqn: expr.resourceId,
430
+ })
431
+ .pipe(Effect.orDie);
432
+ if (!refState) {
433
+ return yield* Effect.die(
434
+ new Output.InvalidReferenceError({
435
+ message: `Reference to '${expr.resourceId}' in stack '${refStack}' and stage '${refStage}' not found. Have you deployed '${refStage}' of '${refStack}'?`,
436
+ stack: refStack,
437
+ stage: refStage,
438
+ resourceId: expr.resourceId,
439
+ }),
440
+ );
441
+ }
442
+ return (refState as any).attr ?? (refState as any).output;
443
+ } else if (Output.isStackRefExpr(expr)) {
444
+ const refStack = expr.stack;
445
+ const refStage = expr.stage ?? stage;
446
+ const output = yield* state
447
+ .getOutput({
448
+ stack: refStack,
449
+ stage: refStage,
450
+ })
451
+ .pipe(Effect.orDie);
452
+ if (output == null) {
453
+ return yield* Effect.die(
454
+ new Output.InvalidReferenceError({
455
+ message: `Reference to stack '${refStack}' at stage '${refStage}' not found. Have you deployed stage '${refStage}' of '${refStack}'?`,
456
+ stack: refStack,
457
+ stage: refStage,
458
+ resourceId: refStack,
459
+ }),
460
+ );
461
+ }
462
+ return output;
463
+ } else if (Output.isNamedExpr(expr)) {
464
+ return yield* resolveOutput(expr.expr);
352
465
  }
353
- return yield* Effect.die(new Error("Not implemented yet"));
466
+ return yield* Effect.die(
467
+ new Error("Not implemented yet" + (expr as any).kind),
468
+ );
354
469
  });
355
470
 
356
471
  // map of resource FQN -> its downstream dependencies (resources that depend on it)
@@ -364,16 +479,30 @@ export const make = <A>(
364
479
 
365
480
  // Build a set of FQNs for the new resources to detect orphans
366
481
  const newResourceFqns = new Set(resources.map((r) => r.FQN));
482
+ const newActionFqns = new Set(actions.map((t) => t.FQN));
483
+ // Unified set used wherever the DAG must include both kinds.
484
+ const newNodeFqns = new Set<string>([...newResourceFqns, ...newActionFqns]);
367
485
 
368
- // Map FQN -> list of upstream FQNs (resources this one depends on via props)
486
+ // Map FQN -> list of upstream FQNs (resources this one depends on via props).
487
+ // Tasks contribute upstream edges through their `Input` expression.
369
488
  const newUpstreamDependencies: {
370
489
  [fqn: string]: string[];
371
- } = Object.fromEntries(
372
- resources.map((resource) => [
373
- resource.FQN,
374
- Object.values(Output.upstreamAny(resource.Props)).map((r) => r.FQN),
375
- ]),
376
- );
490
+ } = Object.fromEntries([
491
+ ...resources.map(
492
+ (resource) =>
493
+ [
494
+ resource.FQN,
495
+ Object.values(Output.upstreamAny(resource.Props)).map((r) => r.FQN),
496
+ ] as const,
497
+ ),
498
+ ...actions.map(
499
+ (action) =>
500
+ [
501
+ action.FQN,
502
+ Object.values(Output.upstreamAny(action.Input)).map((r) => r.FQN),
503
+ ] as const,
504
+ ),
505
+ ]);
377
506
 
378
507
  // Map FQN -> list of upstream FQNs from bindings
379
508
  const bindingUpstreamDependencies: {
@@ -392,38 +521,101 @@ export const make = <A>(
392
521
  // tell whether any surviving resource still points at an orphan.
393
522
  const rawUpstreamDependencies: {
394
523
  [fqn: string]: string[];
395
- } = Object.fromEntries(
396
- resources.map((resource) => {
524
+ } = Object.fromEntries<string[]>([
525
+ ...resources.map((resource): [string, string[]] => {
397
526
  const fqn = resource.FQN;
398
527
  const propDeps = newUpstreamDependencies[fqn] ?? [];
399
528
  const bindDeps = bindingUpstreamDependencies[fqn] ?? [];
400
529
  return [fqn, [...new Set([...propDeps, ...bindDeps])]];
401
530
  }),
402
- );
531
+ // Actions have no bindings — their upstream is purely their input.
532
+ ...actions.map((action): [string, string[]] => {
533
+ const fqn = action.FQN;
534
+ return [fqn, newUpstreamDependencies[fqn] ?? []];
535
+ }),
536
+ ]);
403
537
 
404
- // Combined prop + binding upstream, filtered to resources in this graph for
405
- // scheduling and cycle detection.
538
+ // Combined prop + binding upstream, filtered to resources/tasks in this
539
+ // graph for scheduling and cycle detection.
406
540
  const allUpstreamDependencies: {
407
541
  [fqn: string]: string[];
408
- } = Object.fromEntries(
409
- resources.map((resource) => {
542
+ } = Object.fromEntries([
543
+ ...resources.map((resource) => {
410
544
  const fqn = resource.FQN;
411
545
  const deps = rawUpstreamDependencies[fqn] ?? [];
412
- return [fqn, deps.filter((dep) => newResourceFqns.has(dep))];
546
+ return [fqn, deps.filter((dep) => newNodeFqns.has(dep))] as const;
413
547
  }),
414
- );
548
+ ...actions.map((action) => {
549
+ const fqn = action.FQN;
550
+ const deps = newUpstreamDependencies[fqn] ?? [];
551
+ return [fqn, deps.filter((dep) => newNodeFqns.has(dep))] as const;
552
+ }),
553
+ ]);
554
+
555
+ // Resources that participate in a cycle when both prop and binding
556
+ // edges are considered. Used below to decide whether an acyclic
557
+ // binding edge should also become a downstream edge.
558
+ const combinedCycleMembers = findCycleMembers(allUpstreamDependencies);
559
+
560
+ // Map FQN -> list of downstream FQNs (resources/actions that depend on
561
+ // this one).
562
+ //
563
+ // Prop edges always become downstream edges — they can't form cycles
564
+ // (the resource graph is a DAG by construction once props are fully
565
+ // resolved). Binding edges become downstream edges too, except when
566
+ // they participate in a cycle in the combined graph: mutual bindings
567
+ // (A binds to B's data, B binds to A's data) intentionally do not
568
+ // create downstream edges, so deletion does not deadlock waiting on
569
+ // each other (see the "binding-only cycles inside a construct" test
570
+ // in `plan.test.ts`).
571
+ //
572
+ // Including acyclic binding edges is required for cloud APIs that
573
+ // enforce the binding at the provider level — e.g. a Cloudflare
574
+ // Worker with a `service` binding to another Worker cannot delete
575
+ // the upstream worker until the downstream worker's binding has been
576
+ // removed. Without the binding edge in `downstream`, the two delete
577
+ // concurrently and the upstream delete fails with
578
+ // `ServiceBindingConflict`.
579
+ //
580
+ // Actions don't have bindings, so for action upstreams we use only
581
+ // prop edges (which collapse to `newUpstreamDependencies` lookups).
582
+ const computeDownstream = (upFqn: string): string[] => {
583
+ const downstream: string[] = [];
584
+ for (const [downFqn, upstreams] of Object.entries(
585
+ rawUpstreamDependencies,
586
+ )) {
587
+ if (downFqn === upFqn) continue;
588
+ if (!upstreams.includes(upFqn)) continue;
589
+ const isPropEdge = (newUpstreamDependencies[downFqn] ?? []).includes(
590
+ upFqn,
591
+ );
592
+ if (isPropEdge) {
593
+ downstream.push(downFqn);
594
+ continue;
595
+ }
596
+ // Binding-only edge — exclude when both endpoints sit inside
597
+ // the same SCC of the combined graph.
598
+ if (
599
+ combinedCycleMembers.has(upFqn) &&
600
+ combinedCycleMembers.has(downFqn)
601
+ ) {
602
+ continue;
603
+ }
604
+ downstream.push(downFqn);
605
+ }
606
+ return downstream;
607
+ };
415
608
 
416
- // Map FQN -> list of downstream FQNs (resources that depend on this one)
417
609
  const newDownstreamDependencies: {
418
610
  [fqn: string]: string[];
419
- } = Object.fromEntries(
420
- resources.map((resource) => [
421
- resource.FQN,
422
- Object.entries(newUpstreamDependencies)
423
- .filter(([_, upstream]) => upstream.includes(resource.FQN))
424
- .map(([depFqn]) => depFqn),
425
- ]),
426
- );
611
+ } = Object.fromEntries([
612
+ ...resources.map(
613
+ (resource) => [resource.FQN, computeDownstream(resource.FQN)] as const,
614
+ ),
615
+ ...actions.map(
616
+ (action) => [action.FQN, computeDownstream(action.FQN)] as const,
617
+ ),
618
+ ]);
427
619
 
428
620
  const resourceGraph = Object.fromEntries(
429
621
  (yield* Effect.all(
@@ -438,11 +630,17 @@ export const make = <A>(
438
630
  const newBindings: ResourceBinding[] = yield* resolveInput(
439
631
  stack.bindings[fqn] ?? [],
440
632
  );
441
- let oldState = yield* state.get({
633
+ const persisted = yield* state.get({
442
634
  stack: stackName,
443
635
  stage: stage,
444
636
  fqn,
445
637
  });
638
+ // A Task previously held this FQN. Treat as if there were no
639
+ // prior state — the Task's row will be reaped by `actionDeletions`
640
+ // below and the resource starts from scratch.
641
+ let oldState: ResourceState | undefined = isActionState(persisted)
642
+ ? undefined
643
+ : (persisted as ResourceState | undefined);
446
644
 
447
645
  // Engine-level adoption. When there is no prior state, always
448
646
  // consult `provider.read` (if implemented) so the engine — not
@@ -789,10 +987,76 @@ export const make = <A>(
789
987
  )).map((update) => [update.resource.FQN, update]),
790
988
  ) as Plan["resources"];
791
989
 
792
- // Compute SCC membership once. Apply uses it to decide whether an
793
- // update node must publish its prior attr early to break a cycle, or
794
- // can simply wait for upstreams like a DAG node (the common case).
795
- const cycleMembers = findCycleMembers(allUpstreamDependencies);
990
+ // ── Action plan nodes ────────────────────────────────────────────────
991
+ const actionGraph = Object.fromEntries(
992
+ (yield* Effect.all(
993
+ actions.map(
994
+ Effect.fn("plan.diff.action")(function* (action) {
995
+ const fqn = action.FQN;
996
+ const downstream = newDownstreamDependencies[fqn] ?? [];
997
+ const resolvedInput = yield* resolveInput(action.Input);
998
+ const inputHash = yield* hashInput(resolvedInput);
999
+ const oldState = yield* state.get({
1000
+ stack: stackName,
1001
+ stage,
1002
+ fqn,
1003
+ });
1004
+
1005
+ if (oldState && !isActionState(oldState)) {
1006
+ // FQN collision with a resource — surface as a fatal error so
1007
+ // the user resolves it before we touch anything.
1008
+ return [
1009
+ fqn,
1010
+ {
1011
+ kind: "action",
1012
+ action: "run",
1013
+ def: action,
1014
+ input: action.Input,
1015
+ state: undefined,
1016
+ downstream,
1017
+ forced: false,
1018
+ } satisfies ActionRun,
1019
+ ] as const;
1020
+ }
1021
+
1022
+ const prior = oldState as ActionState | undefined;
1023
+ const sameInput =
1024
+ prior?.status === "ran" && prior.inputHash === inputHash;
1025
+ if (sameInput && !options.force) {
1026
+ return [
1027
+ fqn,
1028
+ {
1029
+ kind: "action",
1030
+ action: "noop",
1031
+ def: action,
1032
+ state: prior as RanActionState,
1033
+ downstream,
1034
+ } satisfies ActionNoop,
1035
+ ] as const;
1036
+ }
1037
+ return [
1038
+ fqn,
1039
+ {
1040
+ kind: "action",
1041
+ action: "run",
1042
+ def: action,
1043
+ input: action.Input,
1044
+ state: prior,
1045
+ downstream,
1046
+ forced: !!options.force,
1047
+ } satisfies ActionRun,
1048
+ ] as const;
1049
+ }),
1050
+ ),
1051
+ { concurrency: "unbounded" },
1052
+ )) as ReadonlyArray<readonly [string, ActionApply]>,
1053
+ ) as Plan["actions"];
1054
+
1055
+ // SCC membership of the combined upstream graph. Apply uses it to
1056
+ // decide whether an update node must publish its prior attr early to
1057
+ // break a cycle, or can simply wait for upstreams like a DAG node
1058
+ // (the common case). Computed once, above, for the downstream graph.
1059
+ const cycleMembers = combinedCycleMembers;
796
1060
 
797
1061
  // Detect unsatisfiable dependency cycles among create/replace nodes.
798
1062
  // Update/noop nodes signal their Deferred before waitForDeps when in a
@@ -855,18 +1119,61 @@ export const make = <A>(
855
1119
  }
856
1120
  }
857
1121
 
1122
+ // Task deletions: state rows previously written by tasks that no
1123
+ // longer appear in the stack. The body is NOT invoked — we just drop
1124
+ // the row.
1125
+ const actionDeletions: Plan["actionDeletions"] = Object.fromEntries(
1126
+ (yield* Effect.all(
1127
+ (yield* state.list({ stack: stackName, stage })).map(
1128
+ Effect.fn("plan.diff.actionDeletion")(function* (fqn) {
1129
+ if (newActionFqns.has(fqn) || newResourceFqns.has(fqn)) return;
1130
+ const persisted = yield* state.get({
1131
+ stack: stackName,
1132
+ stage,
1133
+ fqn,
1134
+ });
1135
+ if (!isActionState(persisted)) return;
1136
+ const { logicalId } = parseFqn(fqn);
1137
+ return [
1138
+ fqn,
1139
+ {
1140
+ kind: "action",
1141
+ action: "delete",
1142
+ state: persisted,
1143
+ downstream: persisted.downstream ?? [],
1144
+ def: {
1145
+ Kind: "action",
1146
+ Namespace: persisted.namespace,
1147
+ FQN: fqn,
1148
+ LogicalId: logicalId,
1149
+ Type: persisted.actionType,
1150
+ Input: persisted.input,
1151
+ Run: () => undefined as any,
1152
+ Output: undefined as any,
1153
+ } satisfies ActionLike,
1154
+ } satisfies ActionDelete,
1155
+ ] as const;
1156
+ }),
1157
+ ),
1158
+ { concurrency: "unbounded" },
1159
+ )).filter((v): v is NonNullable<typeof v> => !!v),
1160
+ );
1161
+
858
1162
  const deletions = Object.fromEntries(
859
1163
  (yield* Effect.all(
860
1164
  (yield* state.list({ stack: stackName, stage: stage })).map(
861
1165
  Effect.fn("plan.diff.deletion")(function* (fqn) {
862
- if (newResourceFqns.has(fqn)) {
1166
+ if (newResourceFqns.has(fqn) || newActionFqns.has(fqn)) {
863
1167
  return;
864
1168
  }
865
- const oldState = yield* state.get({
1169
+ const persisted = yield* state.get({
866
1170
  stack: stackName,
867
1171
  stage: stage,
868
1172
  fqn,
869
1173
  });
1174
+ // Tasks are routed through `actionDeletions` above.
1175
+ if (isActionState(persisted)) return;
1176
+ const oldState = persisted as ResourceState | undefined;
870
1177
  let attr: any = oldState?.attr;
871
1178
  if (oldState) {
872
1179
  const { logicalId } = parseFqn(fqn);
@@ -936,7 +1243,9 @@ export const make = <A>(
936
1243
 
937
1244
  return {
938
1245
  resources: resourceGraph,
1246
+ actions: actionGraph,
939
1247
  deletions,
1248
+ actionDeletions,
940
1249
  output: stack.output,
941
1250
  cycleMembers,
942
1251
  } satisfies Plan<A> as Plan<A>;
@@ -1036,7 +1345,10 @@ export const printPlan = (plan: Plan): string => {
1036
1345
  "╠════════════════════════════════════════════════════════════════╣",
1037
1346
  );
1038
1347
  lines.push(
1039
- "║ Legend: + create, ~ update, - delete, ± replace, = noop ║",
1348
+ "║ Legend: + create, ~ update, - delete, ± replace, = noop, ║",
1349
+ );
1350
+ lines.push(
1351
+ "║ λ run task, · skip task ║",
1040
1352
  );
1041
1353
  lines.push(
1042
1354
  "╚════════════════════════════════════════════════════════════════╝",
@@ -1065,6 +1377,28 @@ export const printPlan = (plan: Plan): string => {
1065
1377
  );
1066
1378
  lines.push("");
1067
1379
 
1380
+ // Print tasks section
1381
+ lines.push(
1382
+ "┌─ Tasks ────────────────────────────────────────────────────────┐",
1383
+ );
1384
+ const taskIds = Object.keys(plan.actions ?? {}).sort();
1385
+ for (const id of taskIds) {
1386
+ const node = plan.actions[id];
1387
+ const symbol = node.action === "run" ? "λ" : "·";
1388
+ const type = node.def.Type;
1389
+ const downstream = node.downstream.length
1390
+ ? ` → [${node.downstream.join(", ")}]`
1391
+ : "";
1392
+ lines.push(`│ [${symbol}] ${id} (${type})${downstream}`);
1393
+ }
1394
+ if (taskIds.length === 0) {
1395
+ lines.push("│ (none)");
1396
+ }
1397
+ lines.push(
1398
+ "└────────────────────────────────────────────────────────────────┘",
1399
+ );
1400
+ lines.push("");
1401
+
1068
1402
  // Print deletions section
1069
1403
  lines.push(
1070
1404
  "┌─ Deletions ────────────────────────────────────────────────────┐",
@@ -1078,7 +1412,12 @@ export const printPlan = (plan: Plan): string => {
1078
1412
  : "";
1079
1413
  lines.push(`│ [-] ${id} (${type})${downstream}`);
1080
1414
  }
1081
- if (deletionIds.length === 0) {
1415
+ const taskDeletionIds = Object.keys(plan.actionDeletions ?? {}).sort();
1416
+ for (const id of taskDeletionIds) {
1417
+ const node = plan.actionDeletions[id]!;
1418
+ lines.push(`│ [-] ${id} (${node.def.Type}) [action]`);
1419
+ }
1420
+ if (deletionIds.length === 0 && taskDeletionIds.length === 0) {
1082
1421
  lines.push("│ (none)");
1083
1422
  }
1084
1423
  lines.push(
package/src/Platform.ts CHANGED
@@ -242,8 +242,18 @@ export const Platform = <
242
242
  }),
243
243
  )
244
244
  ).pipe(
245
- Effect.tap(
246
- (resource) => hooks.onCreate?.(resource as R, props) ?? Effect.void,
245
+ Effect.tap((resource) =>
246
+ hooks.onCreate
247
+ ? Effect.flatMap(
248
+ // `props` may itself be an Effect (e.g. when wrapped by
249
+ // `Cloudflare.Vite` via `Effect.map`); resolve it before
250
+ // handing it to the hook so `onCreate` always sees the
251
+ // plain props object — the second call site (in
252
+ // `cls.make`) already does this.
253
+ Effect.isEffect(props) ? props : Effect.succeed(props ?? {}),
254
+ (resolved) => hooks.onCreate!(resource as R, resolved),
255
+ )
256
+ : Effect.void,
247
257
  ),
248
258
  );
249
259
  return Object.assign(
@@ -260,7 +270,7 @@ export const Platform = <
260
270
  asEffect,
261
271
  // @ts-expect-error
262
272
  pipe: (...args: any[]) => asEffect().pipe(...args),
263
- [Symbol.iterator]: () => new SingleShotGen({ asEffect }),
273
+ [Symbol.iterator]: () => new SingleShotGen(asEffect()),
264
274
  },
265
275
  );
266
276
  } else {
@@ -279,18 +289,18 @@ export const Platform = <
279
289
  `Platform<${type}<${id}>>`,
280
290
  );
281
291
  static [Symbol.iterator](): Iterator<
282
- Effect.Yieldable<any, void, never, Self>,
292
+ Effect.Effect<void, never, Self>,
283
293
  Resource,
284
294
  void
285
295
  > {
286
- return new SingleShotGen(this) as any;
296
+ return new SingleShotGen(this.asEffect()) as any;
287
297
  }
288
298
  static asEffect() {
289
- return this.Self.asEffect();
299
+ return this.Self;
290
300
  }
291
301
  static pipe(...args: any[]) {
292
302
  // @ts-expect-error
293
- return pipe(this.asEffect(), ...args);
303
+ return pipe(this, ...args);
294
304
  }
295
305
  static of = (shape: any) => shape;
296
306
  static make = (impl: Impl) => {
@@ -324,8 +334,13 @@ export const Platform = <
324
334
  yield* impl.pipe(
325
335
  Effect.flatMap((impl) =>
326
336
  impl?.fetch
327
- ? (runtimeContext.serve?.(impl.fetch) ??
328
- Effect.die("No serve handler"))
337
+ ? // Hand the full impl to `serve` so the runtime can
338
+ // expose any non-handler methods on the impl shape
339
+ // (e.g. RPC methods on a Cloudflare Worker) alongside
340
+ // the standard `fetch` handler.
341
+ (runtimeContext.serve?.(impl.fetch, {
342
+ shape: impl as Record<string, unknown>,
343
+ }) ?? Effect.die("No serve handler"))
329
344
  : Effect.void,
330
345
  ),
331
346
  Effect.provide(
@@ -360,7 +375,7 @@ export const Platform = <
360
375
  }),
361
376
  ),
362
377
  );
363
- const self = Self.asEffect() as any; // TODO(sam): why do we need to cast?
378
+ const self = Self as any; // TODO(sam): why do we need to cast?
364
379
 
365
380
  return Layer.provideMerge(
366
381
  Layer.mergeAll(
@@ -380,7 +395,7 @@ export const Platform = <
380
395
 
381
396
  const instance = Object.assign(constructor, resource, {
382
397
  Platform: Platform,
383
- asEffect: () => resource.Self.asEffect(),
398
+ asEffect: () => resource.Self,
384
399
  ...methods,
385
400
  }) as any;
386
401
  return instance;
package/src/Provider.ts CHANGED
@@ -16,7 +16,9 @@ import type {
16
16
  ResourceLike,
17
17
  } from "./Resource.ts";
18
18
 
19
- export interface Provider<R extends ResourceLike = ResourceLike> {
19
+ export interface Provider<
20
+ R extends ResourceLike = ResourceLike,
21
+ > extends Effect.Effect<ProviderService<R>, never, Provider<R>> {
20
22
  asEffect: () => Effect.Effect<ProviderService<R>, never, Provider<R>>;
21
23
  [Symbol.iterator]: () => Effect.EffectIterator<Provider<R>>;
22
24
  of: <
@@ -316,7 +318,7 @@ export const collection = <
316
318
  yield* Effect.all(
317
319
  resources.map((resource) =>
318
320
  "Provider" in resource
319
- ? resource.Provider.asEffect().pipe(
321
+ ? resource.Provider.pipe(
320
322
  Effect.map((provider) => [resource.Type, provider] as const),
321
323
  )
322
324
  : Effect.succeed([
@@ -372,7 +374,10 @@ export const tryFindProviderByType: {
372
374
  } = Effect.fnUntraced(function* <R extends ResourceLike>(
373
375
  resourceType: R["Type"],
374
376
  ) {
375
- const Tag = Provider<R>(resourceType) as Context.Service<Provider<R>, any>;
377
+ const Tag = Provider<R>(resourceType) as unknown as Context.Service<
378
+ Provider<R>,
379
+ any
380
+ >;
376
381
  const direct = yield* Effect.serviceOption(Tag);
377
382
  if (Option.isSome(direct)) {
378
383
  return direct;
package/src/Random.ts CHANGED
@@ -20,7 +20,7 @@ export type Random = Resource<
20
20
  >;
21
21
 
22
22
  export const makeRandom = (id: string, props?: RandomProps) =>
23
- Random(id, props).pipe(Effect.flatMap((rand) => rand.text.asEffect()));
23
+ Random(id, props).pipe(Effect.map((rand) => rand.text));
24
24
 
25
25
  /**
26
26
  * A deterministic-in-state random secret generator.