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.
- package/bin/exec.js +488 -69
- package/bin/exec.js.map +1 -1
- package/lib/AWS/AutoScaling/LaunchTemplate.d.ts +1 -1
- package/lib/AWS/CloudWatch/common.d.ts +1 -1
- package/lib/AWS/Credentials.d.ts.map +1 -1
- package/lib/AWS/Credentials.js +1 -2
- package/lib/AWS/Credentials.js.map +1 -1
- package/lib/AWS/DynamoDB/Stream.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/Stream.js +1 -1
- package/lib/AWS/DynamoDB/Stream.js.map +1 -1
- package/lib/AWS/EC2/Instance.d.ts +1 -1
- package/lib/AWS/EC2/hosted.d.ts +1 -1
- package/lib/AWS/EC2/hosted.d.ts.map +1 -1
- package/lib/AWS/EC2/hosted.js +3 -5
- package/lib/AWS/EC2/hosted.js.map +1 -1
- package/lib/AWS/ECS/Task.d.ts +1 -1
- package/lib/AWS/ECS/Task.d.ts.map +1 -1
- package/lib/AWS/ECS/Task.js +3 -5
- package/lib/AWS/ECS/Task.js.map +1 -1
- package/lib/AWS/Endpoint.d.ts.map +1 -1
- package/lib/AWS/Endpoint.js +1 -2
- package/lib/AWS/Endpoint.js.map +1 -1
- package/lib/AWS/Environment.d.ts +2 -2
- package/lib/AWS/EventBridge/EventSource.d.ts.map +1 -1
- package/lib/AWS/EventBridge/EventSource.js +1 -1
- package/lib/AWS/EventBridge/EventSource.js.map +1 -1
- package/lib/AWS/Kinesis/StreamEventSource.d.ts.map +1 -1
- package/lib/AWS/Kinesis/StreamEventSource.js +1 -1
- package/lib/AWS/Kinesis/StreamEventSource.js.map +1 -1
- package/lib/AWS/Lambda/BucketEventSource.d.ts +1 -1
- package/lib/AWS/Lambda/EventBridgeEventSource.d.ts +1 -1
- package/lib/AWS/Lambda/Function.d.ts +1 -1
- package/lib/AWS/Lambda/Function.d.ts.map +1 -1
- package/lib/AWS/Lambda/Function.js +7 -11
- package/lib/AWS/Lambda/Function.js.map +1 -1
- package/lib/AWS/Lambda/QueueEventSource.d.ts +1 -1
- package/lib/AWS/Lambda/StreamEventSource.d.ts +1 -1
- package/lib/AWS/Lambda/TableEventSource.d.ts +1 -1
- package/lib/AWS/Lambda/TopicEventSource.d.ts +1 -1
- package/lib/AWS/Organizations/common.d.ts +1 -1
- package/lib/AWS/Providers.d.ts.map +1 -1
- package/lib/AWS/Providers.js +21 -3
- package/lib/AWS/Providers.js.map +1 -1
- package/lib/AWS/Region.d.ts +1 -1
- package/lib/AWS/Region.d.ts.map +1 -1
- package/lib/AWS/Region.js +2 -3
- package/lib/AWS/Region.js.map +1 -1
- package/lib/AWS/S3/Bucket.d.ts.map +1 -1
- package/lib/AWS/S3/Bucket.js +5 -2
- package/lib/AWS/S3/Bucket.js.map +1 -1
- package/lib/AWS/S3/BucketNotifications.d.ts.map +1 -1
- package/lib/AWS/S3/BucketNotifications.js +1 -1
- package/lib/AWS/S3/BucketNotifications.js.map +1 -1
- package/lib/AWS/SNS/TopicEventSource.d.ts.map +1 -1
- package/lib/AWS/SNS/TopicEventSource.js +1 -1
- package/lib/AWS/SNS/TopicEventSource.js.map +1 -1
- package/lib/AWS/SQS/Queue.d.ts.map +1 -1
- package/lib/AWS/SQS/Queue.js +23 -5
- package/lib/AWS/SQS/Queue.js.map +1 -1
- package/lib/Action.d.ts +77 -0
- package/lib/Action.d.ts.map +1 -0
- package/lib/Action.js +89 -0
- package/lib/Action.js.map +1 -0
- package/lib/AlchemyContext.d.ts +1 -1
- package/lib/Apply.d.ts.map +1 -1
- package/lib/Apply.js +222 -3
- package/lib/Apply.js.map +1 -1
- package/lib/Artifacts.d.ts +1 -1
- package/lib/Artifacts.d.ts.map +1 -1
- package/lib/Artifacts.js +1 -1
- package/lib/Artifacts.js.map +1 -1
- package/lib/Auth/AuthProvider.js +1 -1
- package/lib/Auth/AuthProvider.js.map +1 -1
- package/lib/Auth/Env.d.ts.map +1 -1
- package/lib/Auth/Env.js +4 -12
- package/lib/Auth/Env.js.map +1 -1
- package/lib/Binding.d.ts.map +1 -1
- package/lib/Binding.js +5 -5
- package/lib/Binding.js.map +1 -1
- package/lib/Build/Command.d.ts +1 -1
- package/lib/Build/Memo.d.ts +1 -1
- package/lib/Bundle/Docker.d.ts +3 -3
- package/lib/Bundle/Docker.js +1 -1
- package/lib/Bundle/Docker.js.map +1 -1
- package/lib/Bundle/TempRoot.d.ts +3 -3
- package/lib/Cli/Event.d.ts +1 -1
- package/lib/Cli/Event.d.ts.map +1 -1
- package/lib/Cli/NamespaceTree.d.ts +11 -5
- package/lib/Cli/NamespaceTree.d.ts.map +1 -1
- package/lib/Cli/NamespaceTree.js +28 -1
- package/lib/Cli/NamespaceTree.js.map +1 -1
- package/lib/Cli/commands/_shared.d.ts +1 -1
- package/lib/Cli/commands/_shared.js +2 -2
- package/lib/Cli/commands/_shared.js.map +1 -1
- package/lib/Cli/commands/aws.d.ts +1 -1
- package/lib/Cli/commands/cloudflare.d.ts +2 -2
- package/lib/Cli/commands/cloudflare.d.ts.map +1 -1
- package/lib/Cli/commands/deploy.d.ts +9 -9
- package/lib/Cli/commands/deploy.js +1 -1
- package/lib/Cli/commands/deploy.js.map +1 -1
- package/lib/Cli/commands/login.d.ts +1 -1
- package/lib/Cli/commands/logs.d.ts +1 -1
- package/lib/Cli/commands/logs.js.map +1 -1
- package/lib/Cli/commands/profile.d.ts +1 -3
- package/lib/Cli/commands/profile.d.ts.map +1 -1
- package/lib/Cli/commands/state.d.ts +1 -1
- package/lib/Cli/commands/state.d.ts.map +1 -1
- package/lib/Cli/commands/tail.d.ts +1 -1
- package/lib/Cli/commands/tail.js.map +1 -1
- package/lib/Cli/tui/components/Plan.d.ts.map +1 -1
- package/lib/Cli/tui/components/Plan.js +27 -13
- package/lib/Cli/tui/components/Plan.js.map +1 -1
- package/lib/Cli/tui/components/PlanProgress.d.ts +8 -1
- package/lib/Cli/tui/components/PlanProgress.d.ts.map +1 -1
- package/lib/Cli/tui/components/PlanProgress.js +95 -16
- package/lib/Cli/tui/components/PlanProgress.js.map +1 -1
- package/lib/Cloudflare/Access.js +0 -1
- package/lib/Cloudflare/Access.js.map +1 -1
- package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.js +1 -1
- package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.js.map +1 -1
- package/lib/Cloudflare/Artifacts/ArtifactsBinding.js +1 -1
- package/lib/Cloudflare/Artifacts/ArtifactsBinding.js.map +1 -1
- package/lib/Cloudflare/CloudflareEnvironment.d.ts +1 -1
- package/lib/Cloudflare/Container/Container.js +0 -1
- package/lib/Cloudflare/Container/Container.js.map +1 -1
- package/lib/Cloudflare/Container/ContainerApplication.d.ts +1 -1
- package/lib/Cloudflare/Container/ContainerApplication.d.ts.map +1 -1
- package/lib/Cloudflare/Container/ContainerApplication.js +4 -6
- package/lib/Cloudflare/Container/ContainerApplication.js.map +1 -1
- package/lib/Cloudflare/Container/ContainerBinding.js +2 -2
- package/lib/Cloudflare/Container/ContainerBinding.js.map +1 -1
- package/lib/Cloudflare/D1/D1Database.d.ts +1 -1
- package/lib/Cloudflare/D1/D1SqlFile.d.ts +2 -2
- package/lib/Cloudflare/Email/EmailAddress.d.ts +45 -0
- package/lib/Cloudflare/Email/EmailAddress.d.ts.map +1 -0
- package/lib/Cloudflare/Email/EmailAddress.js +99 -0
- package/lib/Cloudflare/Email/EmailAddress.js.map +1 -0
- package/lib/Cloudflare/Email/EmailRouting.d.ts +42 -0
- package/lib/Cloudflare/Email/EmailRouting.d.ts.map +1 -0
- package/lib/Cloudflare/Email/EmailRouting.js +89 -0
- package/lib/Cloudflare/Email/EmailRouting.js.map +1 -0
- package/lib/Cloudflare/Email/EmailRule.d.ts +80 -0
- package/lib/Cloudflare/Email/EmailRule.d.ts.map +1 -0
- package/lib/Cloudflare/Email/EmailRule.js +110 -0
- package/lib/Cloudflare/Email/EmailRule.js.map +1 -0
- package/lib/Cloudflare/Email/SendEmail.d.ts +74 -0
- package/lib/Cloudflare/Email/SendEmail.d.ts.map +1 -0
- package/lib/Cloudflare/Email/SendEmail.js +19 -0
- package/lib/Cloudflare/Email/SendEmail.js.map +1 -0
- package/lib/Cloudflare/Email/SendEmailBinding.d.ts +64 -0
- package/lib/Cloudflare/Email/SendEmailBinding.d.ts.map +1 -0
- package/lib/Cloudflare/Email/SendEmailBinding.js +54 -0
- package/lib/Cloudflare/Email/SendEmailBinding.js.map +1 -0
- package/lib/Cloudflare/Email/index.d.ts +6 -0
- package/lib/Cloudflare/Email/index.d.ts.map +1 -0
- package/lib/Cloudflare/Email/index.js +6 -0
- package/lib/Cloudflare/Email/index.js.map +1 -0
- package/lib/Cloudflare/Hyperdrive/Hyperdrive.d.ts +1 -1
- package/lib/Cloudflare/Images/ImagesBinding.js +1 -1
- package/lib/Cloudflare/Images/ImagesBinding.js.map +1 -1
- package/lib/Cloudflare/KV/KVNamespaceBinding.js +1 -1
- package/lib/Cloudflare/KV/KVNamespaceBinding.js.map +1 -1
- package/lib/Cloudflare/Local/Sidecar.d.ts +1 -1
- package/lib/Cloudflare/Local/SidecarHandlers.d.ts +1 -1
- package/lib/Cloudflare/Local/SidecarServer.js +1 -1
- package/lib/Cloudflare/Local/SidecarServer.js.map +1 -1
- package/lib/Cloudflare/Providers.d.ts.map +1 -1
- package/lib/Cloudflare/Providers.js +6 -1
- package/lib/Cloudflare/Providers.js.map +1 -1
- package/lib/Cloudflare/Queue/QueueBinding.js +1 -1
- package/lib/Cloudflare/Queue/QueueBinding.js.map +1 -1
- package/lib/Cloudflare/R2/R2BucketBinding.js +1 -1
- package/lib/Cloudflare/R2/R2BucketBinding.js.map +1 -1
- package/lib/Cloudflare/SecretsStore/SecretBinding.js +1 -1
- package/lib/Cloudflare/SecretsStore/SecretBinding.js.map +1 -1
- package/lib/Cloudflare/StateStore/Api.d.ts +1 -1
- package/lib/Cloudflare/StateStore/State.d.ts +2 -2
- package/lib/Cloudflare/Workers/Assets.d.ts +2 -2
- package/lib/Cloudflare/Workers/Assets.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Assets.js +5 -4
- package/lib/Cloudflare/Workers/Assets.js.map +1 -1
- package/lib/Cloudflare/Workers/HttpServer.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/HttpServer.js +25 -3
- package/lib/Cloudflare/Workers/HttpServer.js.map +1 -1
- package/lib/Cloudflare/Workers/InferEnv.d.ts +1 -1
- package/lib/Cloudflare/Workers/InferEnv.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Worker.d.ts +4 -3
- package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Worker.js +67 -32
- package/lib/Cloudflare/Workers/Worker.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBundle.d.ts +1 -1
- package/lib/Cloudflare/Workers/WorkerBundle.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBundle.js +4 -6
- package/lib/Cloudflare/Workers/WorkerBundle.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerName.d.ts +1 -1
- package/lib/Cloudflare/Workers/Workflow.js +2 -2
- package/lib/Cloudflare/Workers/Workflow.js.map +1 -1
- package/lib/Cloudflare/index.d.ts +1 -0
- package/lib/Cloudflare/index.d.ts.map +1 -1
- package/lib/Cloudflare/index.js +1 -0
- package/lib/Cloudflare/index.js.map +1 -1
- package/lib/Construct.d.ts +3 -3
- package/lib/Construct.d.ts.map +1 -1
- package/lib/Construct.js.map +1 -1
- package/lib/Deploy.d.ts +1 -1
- package/lib/Destroy.d.ts +1 -1
- package/lib/Destroy.d.ts.map +1 -1
- package/lib/Destroy.js +1 -0
- package/lib/Destroy.js.map +1 -1
- package/lib/Drizzle/Providers.d.ts +1 -1
- package/lib/Drizzle/Schema.d.ts +1 -1
- package/lib/GitHub/Providers.d.ts +1 -1
- package/lib/Http.d.ts +1 -1
- package/lib/Http.d.ts.map +1 -1
- package/lib/Http.js +1 -1
- package/lib/Http.js.map +1 -1
- package/lib/Namespace.d.ts.map +1 -1
- package/lib/Namespace.js +3 -4
- package/lib/Namespace.js.map +1 -1
- package/lib/Neon/Branch.d.ts +2 -2
- package/lib/Neon/Branch.d.ts.map +1 -1
- package/lib/Neon/Branch.js +59 -27
- package/lib/Neon/Branch.js.map +1 -1
- package/lib/Neon/Credentials.d.ts +2 -2
- package/lib/Neon/Credentials.d.ts.map +1 -1
- package/lib/Neon/Credentials.js +2 -2
- package/lib/Neon/Credentials.js.map +1 -1
- package/lib/Neon/NeonEnvironment.d.ts +1 -1
- package/lib/Neon/Project.d.ts +25 -1
- package/lib/Neon/Project.d.ts.map +1 -1
- package/lib/Neon/Project.js +121 -42
- package/lib/Neon/Project.js.map +1 -1
- package/lib/Neon/Providers.d.ts +1 -1
- package/lib/Neon/SqlFile.d.ts +2 -2
- package/lib/Output.d.ts +3 -4
- package/lib/Output.d.ts.map +1 -1
- package/lib/Output.js +7 -4
- package/lib/Output.js.map +1 -1
- package/lib/PhysicalName.d.ts +1 -1
- package/lib/Plan.d.ts +36 -1
- package/lib/Plan.d.ts.map +1 -1
- package/lib/Plan.js +197 -31
- package/lib/Plan.js.map +1 -1
- package/lib/Platform.js +6 -6
- package/lib/Platform.js.map +1 -1
- package/lib/Provider.d.ts +1 -1
- package/lib/Provider.d.ts.map +1 -1
- package/lib/Provider.js +1 -1
- package/lib/Provider.js.map +1 -1
- package/lib/Random.d.ts +1 -1
- package/lib/Random.d.ts.map +1 -1
- package/lib/Random.js +1 -1
- package/lib/Random.js.map +1 -1
- package/lib/Resource.d.ts.map +1 -1
- package/lib/Resource.js +2 -25
- package/lib/Resource.js.map +1 -1
- package/lib/Runtime.d.ts +24 -0
- package/lib/Runtime.d.ts.map +1 -0
- package/lib/Runtime.js +31 -0
- package/lib/Runtime.js.map +1 -0
- package/lib/Secret.js +1 -1
- package/lib/Secret.js.map +1 -1
- package/lib/Sidecar/RpcClient.d.ts +1 -1
- package/lib/Sidecar/RpcPaths.d.ts +1 -1
- package/lib/Sidecar/RpcServer.d.ts +1 -1
- package/lib/Sidecar/RpcServices.d.ts +1 -1
- package/lib/Stack.d.ts +7 -2
- package/lib/Stack.d.ts.map +1 -1
- package/lib/Stack.js +4 -4
- package/lib/Stack.js.map +1 -1
- package/lib/State/ActionState.d.ts +48 -0
- package/lib/State/ActionState.d.ts.map +1 -0
- package/lib/State/ActionState.js +1 -0
- package/lib/State/ActionState.js.map +1 -0
- package/lib/State/HttpStateStore.d.ts.map +1 -1
- package/lib/State/HttpStateStore.js +1 -1
- package/lib/State/HttpStateStore.js.map +1 -1
- package/lib/State/InMemoryState.d.ts.map +1 -1
- package/lib/State/InMemoryState.js.map +1 -1
- package/lib/State/LocalState.d.ts +2 -2
- package/lib/State/ResourceState.d.ts +5 -0
- package/lib/State/ResourceState.d.ts.map +1 -1
- package/lib/State/State.d.ts +10 -2
- package/lib/State/State.d.ts.map +1 -1
- package/lib/State/State.js +2 -0
- package/lib/State/State.js.map +1 -1
- package/lib/State/index.d.ts +1 -0
- package/lib/State/index.d.ts.map +1 -1
- package/lib/State/index.js +1 -0
- package/lib/State/index.js.map +1 -1
- package/lib/Test/Core.d.ts +2 -2
- package/lib/Test/Core.d.ts.map +1 -1
- package/lib/Test/Core.js +4 -1
- package/lib/Test/Core.js.map +1 -1
- package/lib/Util/FileLogger.d.ts +1 -1
- package/lib/Util/effect.js +4 -4
- package/lib/Util/effect.js.map +1 -1
- package/lib/Util/exec.d.ts.map +1 -0
- package/lib/Util/exec.js.map +1 -0
- package/lib/Util/hash.d.ts +8 -0
- package/lib/Util/hash.d.ts.map +1 -0
- package/lib/Util/hash.js +11 -0
- package/lib/Util/hash.js.map +1 -0
- package/lib/Util/ignore.d.ts +40 -0
- package/lib/Util/ignore.d.ts.map +1 -0
- package/lib/Util/ignore.js +591 -0
- package/lib/Util/ignore.js.map +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +22 -28
- package/src/AWS/Credentials.ts +1 -2
- package/src/AWS/DynamoDB/Stream.ts +1 -4
- package/src/AWS/EC2/hosted.ts +14 -16
- package/src/AWS/ECS/Task.ts +14 -16
- package/src/AWS/Endpoint.ts +2 -5
- package/src/AWS/EventBridge/EventSource.ts +1 -4
- package/src/AWS/Kinesis/StreamEventSource.ts +1 -4
- package/src/AWS/Lambda/Function.ts +31 -35
- package/src/AWS/Providers.ts +22 -3
- package/src/AWS/Region.ts +2 -3
- package/src/AWS/S3/Bucket.ts +7 -2
- package/src/AWS/S3/BucketNotifications.ts +1 -4
- package/src/AWS/SNS/TopicEventSource.ts +1 -4
- package/src/AWS/SQS/Queue.ts +40 -6
- package/src/Action.ts +280 -0
- package/src/Apply.ts +351 -23
- package/src/Artifacts.ts +2 -4
- package/src/Auth/AuthProvider.ts +1 -1
- package/src/Auth/Env.ts +12 -20
- package/src/Binding.ts +5 -9
- package/src/Bundle/Docker.ts +1 -1
- package/src/Cli/Event.ts +4 -0
- package/src/Cli/NamespaceTree.ts +52 -5
- package/src/Cli/commands/_shared.ts +2 -2
- package/src/Cli/commands/deploy.ts +1 -1
- package/src/Cli/commands/logs.ts +4 -4
- package/src/Cli/commands/tail.ts +4 -4
- package/src/Cli/tui/components/Plan.tsx +65 -17
- package/src/Cli/tui/components/PlanProgress.tsx +142 -32
- package/src/Cloudflare/Access.ts +1 -1
- package/src/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.ts +1 -1
- package/src/Cloudflare/Artifacts/ArtifactsBinding.ts +1 -1
- package/src/Cloudflare/Container/Container.ts +1 -1
- package/src/Cloudflare/Container/ContainerApplication.ts +4 -6
- package/src/Cloudflare/Container/ContainerBinding.ts +2 -2
- package/src/Cloudflare/Email/EmailAddress.ts +155 -0
- package/src/Cloudflare/Email/EmailRouting.ts +138 -0
- package/src/Cloudflare/Email/EmailRule.ts +210 -0
- package/src/Cloudflare/Email/SendEmail.ts +95 -0
- package/src/Cloudflare/Email/SendEmailBinding.ts +124 -0
- package/src/Cloudflare/Email/index.ts +5 -0
- package/src/Cloudflare/Images/ImagesBinding.ts +1 -1
- package/src/Cloudflare/KV/KVNamespaceBinding.ts +1 -1
- package/src/Cloudflare/Local/SidecarServer.ts +1 -1
- package/src/Cloudflare/Providers.ts +9 -0
- package/src/Cloudflare/Queue/QueueBinding.ts +1 -1
- package/src/Cloudflare/R2/R2BucketBinding.ts +1 -1
- package/src/Cloudflare/SecretsStore/SecretBinding.ts +1 -1
- package/src/Cloudflare/Workers/Assets.ts +5 -6
- package/src/Cloudflare/Workers/HttpServer.ts +37 -5
- package/src/Cloudflare/Workers/InferEnv.ts +15 -11
- package/src/Cloudflare/Workers/Worker.ts +78 -36
- package/src/Cloudflare/Workers/WorkerBundle.ts +4 -6
- package/src/Cloudflare/Workers/Workflow.ts +2 -2
- package/src/Cloudflare/index.ts +1 -0
- package/src/Construct.ts +3 -7
- package/src/Destroy.ts +1 -0
- package/src/Http.ts +1 -1
- package/src/Namespace.ts +4 -4
- package/src/Neon/Branch.ts +93 -59
- package/src/Neon/Credentials.ts +2 -2
- package/src/Neon/Project.ts +193 -64
- package/src/Output.ts +9 -7
- package/src/Plan.ts +303 -53
- package/src/Platform.ts +7 -7
- package/src/Provider.ts +8 -3
- package/src/Random.ts +1 -1
- package/src/Resource.ts +2 -25
- package/src/Runtime.ts +38 -0
- package/src/Secret.ts +1 -1
- package/src/Stack.ts +10 -6
- package/src/State/ActionState.ts +51 -0
- package/src/State/HttpStateStore.ts +6 -2
- package/src/State/InMemoryState.ts +3 -3
- package/src/State/ResourceState.ts +5 -0
- package/src/State/State.ts +17 -2
- package/src/State/index.ts +1 -0
- package/src/Test/Core.ts +4 -3
- package/src/Util/effect.ts +4 -4
- package/src/Util/hash.ts +14 -0
- package/src/Util/ignore.ts +815 -0
- package/src/index.ts +6 -0
- package/lib/Agent/Agent.d.ts +0 -9
- package/lib/Agent/Agent.d.ts.map +0 -1
- package/lib/Agent/Agent.js +0 -10
- package/lib/Agent/Agent.js.map +0 -1
- package/lib/Agent/Aspect.d.ts +0 -51
- package/lib/Agent/Aspect.d.ts.map +0 -1
- package/lib/Agent/Aspect.js +0 -45
- package/lib/Agent/Aspect.js.map +0 -1
- package/lib/Agent/AspectGraph.d.ts +0 -45
- package/lib/Agent/AspectGraph.d.ts.map +0 -1
- package/lib/Agent/AspectGraph.js +0 -39
- package/lib/Agent/AspectGraph.js.map +0 -1
- package/lib/Agent/ContextPlugin.d.ts +0 -8
- package/lib/Agent/ContextPlugin.d.ts.map +0 -1
- package/lib/Agent/ContextPlugin.js +0 -3
- package/lib/Agent/ContextPlugin.js.map +0 -1
- package/lib/Agent/Plugin.d.ts +0 -18
- package/lib/Agent/Plugin.d.ts.map +0 -1
- package/lib/Agent/Plugin.js +0 -8
- package/lib/Agent/Plugin.js.map +0 -1
- package/lib/Agent/chat/channel.d.ts +0 -9
- package/lib/Agent/chat/channel.d.ts.map +0 -1
- package/lib/Agent/chat/channel.js +0 -10
- package/lib/Agent/chat/channel.js.map +0 -1
- package/lib/Agent/chat/event.d.ts +0 -32
- package/lib/Agent/chat/event.d.ts.map +0 -1
- package/lib/Agent/chat/event.js +0 -32
- package/lib/Agent/chat/event.js.map +0 -1
- package/lib/Agent/chat/message.d.ts +0 -22
- package/lib/Agent/chat/message.d.ts.map +0 -1
- package/lib/Agent/chat/message.js +0 -31
- package/lib/Agent/chat/message.js.map +0 -1
- package/lib/Agent/chat/service.d.ts +0 -102
- package/lib/Agent/chat/service.d.ts.map +0 -1
- package/lib/Agent/chat/service.js +0 -79
- package/lib/Agent/chat/service.js.map +0 -1
- package/lib/Agent/chat/thread.d.ts +0 -13
- package/lib/Agent/chat/thread.d.ts.map +0 -1
- package/lib/Agent/chat/thread.js +0 -16
- package/lib/Agent/chat/thread.js.map +0 -1
- package/lib/Agent/coding/bash.d.ts +0 -36
- package/lib/Agent/coding/bash.d.ts.map +0 -1
- package/lib/Agent/coding/bash.js +0 -170
- package/lib/Agent/coding/bash.js.map +0 -1
- package/lib/Agent/coding/edit.d.ts +0 -31
- package/lib/Agent/coding/edit.d.ts.map +0 -1
- package/lib/Agent/coding/edit.js +0 -90
- package/lib/Agent/coding/edit.js.map +0 -1
- package/lib/Agent/coding/glob.d.ts +0 -23
- package/lib/Agent/coding/glob.d.ts.map +0 -1
- package/lib/Agent/coding/glob.js +0 -78
- package/lib/Agent/coding/glob.js.map +0 -1
- package/lib/Agent/coding/grep.d.ts +0 -26
- package/lib/Agent/coding/grep.d.ts.map +0 -1
- package/lib/Agent/coding/grep.js +0 -105
- package/lib/Agent/coding/grep.js.map +0 -1
- package/lib/Agent/coding/index.d.ts +0 -8
- package/lib/Agent/coding/index.d.ts.map +0 -1
- package/lib/Agent/coding/index.js +0 -8
- package/lib/Agent/coding/index.js.map +0 -1
- package/lib/Agent/coding/read.d.ts +0 -27
- package/lib/Agent/coding/read.d.ts.map +0 -1
- package/lib/Agent/coding/read.js +0 -89
- package/lib/Agent/coding/read.js.map +0 -1
- package/lib/Agent/coding/readlints.d.ts +0 -19
- package/lib/Agent/coding/readlints.d.ts.map +0 -1
- package/lib/Agent/coding/readlints.js +0 -53
- package/lib/Agent/coding/readlints.js.map +0 -1
- package/lib/Agent/coding/write.d.ts +0 -22
- package/lib/Agent/coding/write.d.ts.map +0 -1
- package/lib/Agent/coding/write.js +0 -53
- package/lib/Agent/coding/write.js.map +0 -1
- package/lib/Agent/fs/file.d.ts +0 -12
- package/lib/Agent/fs/file.d.ts.map +0 -1
- package/lib/Agent/fs/file.js +0 -8
- package/lib/Agent/fs/file.js.map +0 -1
- package/lib/Agent/fs/folder.d.ts +0 -5
- package/lib/Agent/fs/folder.d.ts.map +0 -1
- package/lib/Agent/fs/folder.js +0 -3
- package/lib/Agent/fs/folder.js.map +0 -1
- package/lib/Agent/index.d.ts +0 -9
- package/lib/Agent/index.d.ts.map +0 -1
- package/lib/Agent/index.js +0 -9
- package/lib/Agent/index.js.map +0 -1
- package/lib/Agent/llm/error.d.ts +0 -208
- package/lib/Agent/llm/error.d.ts.map +0 -1
- package/lib/Agent/llm/error.js +0 -209
- package/lib/Agent/llm/error.js.map +0 -1
- package/lib/Agent/llm/index.d.ts +0 -5
- package/lib/Agent/llm/index.d.ts.map +0 -1
- package/lib/Agent/llm/index.js +0 -5
- package/lib/Agent/llm/index.js.map +0 -1
- package/lib/Agent/llm/llm.d.ts +0 -32
- package/lib/Agent/llm/llm.d.ts.map +0 -1
- package/lib/Agent/llm/llm.js +0 -74
- package/lib/Agent/llm/llm.js.map +0 -1
- package/lib/Agent/llm/stream-collectors.d.ts +0 -46
- package/lib/Agent/llm/stream-collectors.d.ts.map +0 -1
- package/lib/Agent/llm/stream-collectors.js +0 -33
- package/lib/Agent/llm/stream-collectors.js.map +0 -1
- package/lib/Agent/llm/stream-text-part.d.ts +0 -5
- package/lib/Agent/llm/stream-text-part.d.ts.map +0 -1
- package/lib/Agent/llm/stream-text-part.js +0 -4
- package/lib/Agent/llm/stream-text-part.js.map +0 -1
- package/lib/Agent/lsp/client.d.ts +0 -122
- package/lib/Agent/lsp/client.d.ts.map +0 -1
- package/lib/Agent/lsp/client.js +0 -180
- package/lib/Agent/lsp/client.js.map +0 -1
- package/lib/Agent/lsp/diagnostics.d.ts +0 -16
- package/lib/Agent/lsp/diagnostics.d.ts.map +0 -1
- package/lib/Agent/lsp/diagnostics.js +0 -48
- package/lib/Agent/lsp/diagnostics.js.map +0 -1
- package/lib/Agent/lsp/jsonrpc.d.ts +0 -90
- package/lib/Agent/lsp/jsonrpc.d.ts.map +0 -1
- package/lib/Agent/lsp/jsonrpc.js +0 -178
- package/lib/Agent/lsp/jsonrpc.js.map +0 -1
- package/lib/Agent/lsp/manager.d.ts +0 -38
- package/lib/Agent/lsp/manager.d.ts.map +0 -1
- package/lib/Agent/lsp/manager.js +0 -98
- package/lib/Agent/lsp/manager.js.map +0 -1
- package/lib/Agent/lsp/servers.d.ts +0 -28
- package/lib/Agent/lsp/servers.d.ts.map +0 -1
- package/lib/Agent/lsp/servers.js +0 -21
- package/lib/Agent/lsp/servers.js.map +0 -1
- package/lib/Agent/process/driver.d.ts +0 -10
- package/lib/Agent/process/driver.d.ts.map +0 -1
- package/lib/Agent/process/driver.js +0 -153
- package/lib/Agent/process/driver.js.map +0 -1
- package/lib/Agent/process/issue-service.d.ts +0 -44
- package/lib/Agent/process/issue-service.d.ts.map +0 -1
- package/lib/Agent/process/issue-service.js +0 -28
- package/lib/Agent/process/issue-service.js.map +0 -1
- package/lib/Agent/process/issue-tools.d.ts +0 -28
- package/lib/Agent/process/issue-tools.d.ts.map +0 -1
- package/lib/Agent/process/issue-tools.js +0 -28
- package/lib/Agent/process/issue-tools.js.map +0 -1
- package/lib/Agent/process/issue.d.ts +0 -16
- package/lib/Agent/process/issue.d.ts.map +0 -1
- package/lib/Agent/process/issue.js +0 -17
- package/lib/Agent/process/issue.js.map +0 -1
- package/lib/Agent/process/organization.d.ts +0 -4
- package/lib/Agent/process/organization.d.ts.map +0 -1
- package/lib/Agent/process/organization.js +0 -3
- package/lib/Agent/process/organization.js.map +0 -1
- package/lib/Agent/process/process.d.ts +0 -5
- package/lib/Agent/process/process.d.ts.map +0 -1
- package/lib/Agent/process/process.js +0 -3
- package/lib/Agent/process/process.js.map +0 -1
- package/lib/Agent/process/reply.d.ts +0 -16
- package/lib/Agent/process/reply.d.ts.map +0 -1
- package/lib/Agent/process/reply.js +0 -18
- package/lib/Agent/process/reply.js.map +0 -1
- package/lib/Agent/process/task.d.ts +0 -25
- package/lib/Agent/process/task.d.ts.map +0 -1
- package/lib/Agent/process/task.js +0 -26
- package/lib/Agent/process/task.js.map +0 -1
- package/lib/Agent/tool/index.d.ts +0 -4
- package/lib/Agent/tool/index.d.ts.map +0 -1
- package/lib/Agent/tool/index.js +0 -4
- package/lib/Agent/tool/index.js.map +0 -1
- package/lib/Agent/tool/parameter.d.ts +0 -12
- package/lib/Agent/tool/parameter.d.ts.map +0 -1
- package/lib/Agent/tool/parameter.js +0 -6
- package/lib/Agent/tool/parameter.js.map +0 -1
- package/lib/Agent/tool/result.d.ts +0 -17
- package/lib/Agent/tool/result.d.ts.map +0 -1
- package/lib/Agent/tool/result.js +0 -6
- package/lib/Agent/tool/result.js.map +0 -1
- package/lib/Agent/tool/tool.d.ts +0 -32
- package/lib/Agent/tool/tool.d.ts.map +0 -1
- package/lib/Agent/tool/tool.js +0 -16
- package/lib/Agent/tool/tool.js.map +0 -1
- package/lib/Agent/util/command-validator.d.ts +0 -12
- package/lib/Agent/util/command-validator.d.ts.map +0 -1
- package/lib/Agent/util/command-validator.js +0 -74
- package/lib/Agent/util/command-validator.js.map +0 -1
- package/lib/Agent/util/exec.d.ts.map +0 -1
- package/lib/Agent/util/exec.js.map +0 -1
- package/lib/Agent/util/parser.d.ts +0 -5
- package/lib/Agent/util/parser.d.ts.map +0 -1
- package/lib/Agent/util/parser.js +0 -41
- package/lib/Agent/util/parser.js.map +0 -1
- package/lib/Agent/util/replace.d.ts +0 -38
- package/lib/Agent/util/replace.d.ts.map +0 -1
- package/lib/Agent/util/replace.js +0 -458
- package/lib/Agent/util/replace.js.map +0 -1
- package/lib/Agent/util/ripgrep.d.ts +0 -109
- package/lib/Agent/util/ripgrep.d.ts.map +0 -1
- package/lib/Agent/util/ripgrep.js +0 -221
- package/lib/Agent/util/ripgrep.js.map +0 -1
- package/lib/Neon/api.d.ts +0 -258
- package/lib/Neon/api.d.ts.map +0 -1
- package/lib/Neon/api.js +0 -215
- package/lib/Neon/api.js.map +0 -1
- package/src/Agent/Agent.ts +0 -26
- package/src/Agent/Aspect.ts +0 -173
- package/src/Agent/AspectGraph.ts +0 -98
- package/src/Agent/ContextPlugin.ts +0 -18
- package/src/Agent/Plugin.ts +0 -29
- package/src/Agent/chat/channel.ts +0 -26
- package/src/Agent/chat/event.ts +0 -43
- package/src/Agent/chat/message.ts +0 -35
- package/src/Agent/chat/service.ts +0 -133
- package/src/Agent/chat/thread.ts +0 -17
- package/src/Agent/coding/bash.ts +0 -197
- package/src/Agent/coding/edit.ts +0 -152
- package/src/Agent/coding/glob.ts +0 -96
- package/src/Agent/coding/grep.ts +0 -143
- package/src/Agent/coding/index.ts +0 -7
- package/src/Agent/coding/read.ts +0 -119
- package/src/Agent/coding/readlints.ts +0 -78
- package/src/Agent/coding/write.ts +0 -79
- package/src/Agent/fs/file.ts +0 -22
- package/src/Agent/fs/folder.ts +0 -16
- package/src/Agent/index.ts +0 -9
- package/src/Agent/llm/error.ts +0 -330
- package/src/Agent/llm/index.ts +0 -4
- package/src/Agent/llm/llm.ts +0 -131
- package/src/Agent/llm/stream-collectors.ts +0 -58
- package/src/Agent/llm/stream-text-part.ts +0 -7
- package/src/Agent/lsp/client.ts +0 -293
- package/src/Agent/lsp/diagnostics.ts +0 -64
- package/src/Agent/lsp/jsonrpc.ts +0 -317
- package/src/Agent/lsp/manager.ts +0 -213
- package/src/Agent/lsp/servers.ts +0 -37
- package/src/Agent/process/driver.ts +0 -168
- package/src/Agent/process/issue-service.ts +0 -48
- package/src/Agent/process/issue-tools.ts +0 -33
- package/src/Agent/process/issue.ts +0 -22
- package/src/Agent/process/organization.ts +0 -16
- package/src/Agent/process/process.ts +0 -16
- package/src/Agent/process/reply.ts +0 -21
- package/src/Agent/process/task.ts +0 -34
- package/src/Agent/tool/index.ts +0 -3
- package/src/Agent/tool/parameter.ts +0 -35
- package/src/Agent/tool/result.ts +0 -51
- package/src/Agent/tool/tool.ts +0 -74
- package/src/Agent/util/command-validator.ts +0 -98
- package/src/Agent/util/parser.ts +0 -39
- package/src/Agent/util/replace.ts +0 -559
- package/src/Agent/util/ripgrep.ts +0 -256
- package/src/Neon/api.ts +0 -579
- /package/lib/{Agent/util → Util}/exec.d.ts +0 -0
- /package/lib/{Agent/util → Util}/exec.js +0 -0
- /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
|
|
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;
|
|
@@ -369,7 +439,7 @@ export const make = <A>(
|
|
|
369
439
|
}),
|
|
370
440
|
);
|
|
371
441
|
}
|
|
372
|
-
return refState.attr;
|
|
442
|
+
return (refState as any).attr ?? (refState as any).output;
|
|
373
443
|
} else if (Output.isStackRefExpr(expr)) {
|
|
374
444
|
const refStack = expr.stack;
|
|
375
445
|
const refStage = expr.stage ?? stage;
|
|
@@ -409,16 +479,30 @@ export const make = <A>(
|
|
|
409
479
|
|
|
410
480
|
// Build a set of FQNs for the new resources to detect orphans
|
|
411
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]);
|
|
412
485
|
|
|
413
|
-
// 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.
|
|
414
488
|
const newUpstreamDependencies: {
|
|
415
489
|
[fqn: string]: string[];
|
|
416
|
-
} = Object.fromEntries(
|
|
417
|
-
resources.map(
|
|
418
|
-
resource
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
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
|
+
]);
|
|
422
506
|
|
|
423
507
|
// Map FQN -> list of upstream FQNs from bindings
|
|
424
508
|
const bindingUpstreamDependencies: {
|
|
@@ -437,33 +521,44 @@ export const make = <A>(
|
|
|
437
521
|
// tell whether any surviving resource still points at an orphan.
|
|
438
522
|
const rawUpstreamDependencies: {
|
|
439
523
|
[fqn: string]: string[];
|
|
440
|
-
} = Object.fromEntries(
|
|
441
|
-
resources.map((resource) => {
|
|
524
|
+
} = Object.fromEntries<string[]>([
|
|
525
|
+
...resources.map((resource): [string, string[]] => {
|
|
442
526
|
const fqn = resource.FQN;
|
|
443
527
|
const propDeps = newUpstreamDependencies[fqn] ?? [];
|
|
444
528
|
const bindDeps = bindingUpstreamDependencies[fqn] ?? [];
|
|
445
529
|
return [fqn, [...new Set([...propDeps, ...bindDeps])]];
|
|
446
530
|
}),
|
|
447
|
-
|
|
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
|
+
]);
|
|
448
537
|
|
|
449
|
-
// Combined prop + binding upstream, filtered to resources in this
|
|
450
|
-
// scheduling and cycle detection.
|
|
538
|
+
// Combined prop + binding upstream, filtered to resources/tasks in this
|
|
539
|
+
// graph for scheduling and cycle detection.
|
|
451
540
|
const allUpstreamDependencies: {
|
|
452
541
|
[fqn: string]: string[];
|
|
453
|
-
} = Object.fromEntries(
|
|
454
|
-
resources.map((resource) => {
|
|
542
|
+
} = Object.fromEntries([
|
|
543
|
+
...resources.map((resource) => {
|
|
455
544
|
const fqn = resource.FQN;
|
|
456
545
|
const deps = rawUpstreamDependencies[fqn] ?? [];
|
|
457
|
-
return [fqn, deps.filter((dep) =>
|
|
546
|
+
return [fqn, deps.filter((dep) => newNodeFqns.has(dep))] as const;
|
|
458
547
|
}),
|
|
459
|
-
|
|
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
|
+
]);
|
|
460
554
|
|
|
461
555
|
// Resources that participate in a cycle when both prop and binding
|
|
462
556
|
// edges are considered. Used below to decide whether an acyclic
|
|
463
557
|
// binding edge should also become a downstream edge.
|
|
464
558
|
const combinedCycleMembers = findCycleMembers(allUpstreamDependencies);
|
|
465
559
|
|
|
466
|
-
// Map FQN -> list of downstream FQNs (resources that depend on
|
|
560
|
+
// Map FQN -> list of downstream FQNs (resources/actions that depend on
|
|
561
|
+
// this one).
|
|
467
562
|
//
|
|
468
563
|
// Prop edges always become downstream edges — they can't form cycles
|
|
469
564
|
// (the resource graph is a DAG by construction once props are fully
|
|
@@ -481,37 +576,46 @@ export const make = <A>(
|
|
|
481
576
|
// removed. Without the binding edge in `downstream`, the two delete
|
|
482
577
|
// concurrently and the upstream delete fails with
|
|
483
578
|
// `ServiceBindingConflict`.
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
)
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
if (isPropEdge) {
|
|
499
|
-
downstream.push(downFqn);
|
|
500
|
-
continue;
|
|
501
|
-
}
|
|
502
|
-
// Binding-only edge — exclude when both endpoints sit inside
|
|
503
|
-
// the same SCC of the combined graph.
|
|
504
|
-
if (
|
|
505
|
-
combinedCycleMembers.has(upFqn) &&
|
|
506
|
-
combinedCycleMembers.has(downFqn)
|
|
507
|
-
) {
|
|
508
|
-
continue;
|
|
509
|
-
}
|
|
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) {
|
|
510
593
|
downstream.push(downFqn);
|
|
594
|
+
continue;
|
|
511
595
|
}
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
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
|
+
};
|
|
608
|
+
|
|
609
|
+
const newDownstreamDependencies: {
|
|
610
|
+
[fqn: string]: string[];
|
|
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
|
+
]);
|
|
515
619
|
|
|
516
620
|
const resourceGraph = Object.fromEntries(
|
|
517
621
|
(yield* Effect.all(
|
|
@@ -526,11 +630,17 @@ export const make = <A>(
|
|
|
526
630
|
const newBindings: ResourceBinding[] = yield* resolveInput(
|
|
527
631
|
stack.bindings[fqn] ?? [],
|
|
528
632
|
);
|
|
529
|
-
|
|
633
|
+
const persisted = yield* state.get({
|
|
530
634
|
stack: stackName,
|
|
531
635
|
stage: stage,
|
|
532
636
|
fqn,
|
|
533
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);
|
|
534
644
|
|
|
535
645
|
// Engine-level adoption. When there is no prior state, always
|
|
536
646
|
// consult `provider.read` (if implemented) so the engine — not
|
|
@@ -877,6 +987,71 @@ export const make = <A>(
|
|
|
877
987
|
)).map((update) => [update.resource.FQN, update]),
|
|
878
988
|
) as Plan["resources"];
|
|
879
989
|
|
|
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
|
+
|
|
880
1055
|
// SCC membership of the combined upstream graph. Apply uses it to
|
|
881
1056
|
// decide whether an update node must publish its prior attr early to
|
|
882
1057
|
// break a cycle, or can simply wait for upstreams like a DAG node
|
|
@@ -944,18 +1119,61 @@ export const make = <A>(
|
|
|
944
1119
|
}
|
|
945
1120
|
}
|
|
946
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
|
+
|
|
947
1162
|
const deletions = Object.fromEntries(
|
|
948
1163
|
(yield* Effect.all(
|
|
949
1164
|
(yield* state.list({ stack: stackName, stage: stage })).map(
|
|
950
1165
|
Effect.fn("plan.diff.deletion")(function* (fqn) {
|
|
951
|
-
if (newResourceFqns.has(fqn)) {
|
|
1166
|
+
if (newResourceFqns.has(fqn) || newActionFqns.has(fqn)) {
|
|
952
1167
|
return;
|
|
953
1168
|
}
|
|
954
|
-
const
|
|
1169
|
+
const persisted = yield* state.get({
|
|
955
1170
|
stack: stackName,
|
|
956
1171
|
stage: stage,
|
|
957
1172
|
fqn,
|
|
958
1173
|
});
|
|
1174
|
+
// Tasks are routed through `actionDeletions` above.
|
|
1175
|
+
if (isActionState(persisted)) return;
|
|
1176
|
+
const oldState = persisted as ResourceState | undefined;
|
|
959
1177
|
let attr: any = oldState?.attr;
|
|
960
1178
|
if (oldState) {
|
|
961
1179
|
const { logicalId } = parseFqn(fqn);
|
|
@@ -1025,7 +1243,9 @@ export const make = <A>(
|
|
|
1025
1243
|
|
|
1026
1244
|
return {
|
|
1027
1245
|
resources: resourceGraph,
|
|
1246
|
+
actions: actionGraph,
|
|
1028
1247
|
deletions,
|
|
1248
|
+
actionDeletions,
|
|
1029
1249
|
output: stack.output,
|
|
1030
1250
|
cycleMembers,
|
|
1031
1251
|
} satisfies Plan<A> as Plan<A>;
|
|
@@ -1125,7 +1345,10 @@ export const printPlan = (plan: Plan): string => {
|
|
|
1125
1345
|
"╠════════════════════════════════════════════════════════════════╣",
|
|
1126
1346
|
);
|
|
1127
1347
|
lines.push(
|
|
1128
|
-
"║ Legend: + create, ~ update, - delete, ± replace, = noop
|
|
1348
|
+
"║ Legend: + create, ~ update, - delete, ± replace, = noop, ║",
|
|
1349
|
+
);
|
|
1350
|
+
lines.push(
|
|
1351
|
+
"║ λ run task, · skip task ║",
|
|
1129
1352
|
);
|
|
1130
1353
|
lines.push(
|
|
1131
1354
|
"╚════════════════════════════════════════════════════════════════╝",
|
|
@@ -1154,6 +1377,28 @@ export const printPlan = (plan: Plan): string => {
|
|
|
1154
1377
|
);
|
|
1155
1378
|
lines.push("");
|
|
1156
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
|
+
|
|
1157
1402
|
// Print deletions section
|
|
1158
1403
|
lines.push(
|
|
1159
1404
|
"┌─ Deletions ────────────────────────────────────────────────────┐",
|
|
@@ -1167,7 +1412,12 @@ export const printPlan = (plan: Plan): string => {
|
|
|
1167
1412
|
: "";
|
|
1168
1413
|
lines.push(`│ [-] ${id} (${type})${downstream}`);
|
|
1169
1414
|
}
|
|
1170
|
-
|
|
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) {
|
|
1171
1421
|
lines.push("│ (none)");
|
|
1172
1422
|
}
|
|
1173
1423
|
lines.push(
|
package/src/Platform.ts
CHANGED
|
@@ -270,7 +270,7 @@ export const Platform = <
|
|
|
270
270
|
asEffect,
|
|
271
271
|
// @ts-expect-error
|
|
272
272
|
pipe: (...args: any[]) => asEffect().pipe(...args),
|
|
273
|
-
[Symbol.iterator]: () => new SingleShotGen(
|
|
273
|
+
[Symbol.iterator]: () => new SingleShotGen(asEffect()),
|
|
274
274
|
},
|
|
275
275
|
);
|
|
276
276
|
} else {
|
|
@@ -289,18 +289,18 @@ export const Platform = <
|
|
|
289
289
|
`Platform<${type}<${id}>>`,
|
|
290
290
|
);
|
|
291
291
|
static [Symbol.iterator](): Iterator<
|
|
292
|
-
Effect.
|
|
292
|
+
Effect.Effect<void, never, Self>,
|
|
293
293
|
Resource,
|
|
294
294
|
void
|
|
295
295
|
> {
|
|
296
|
-
return new SingleShotGen(this) as any;
|
|
296
|
+
return new SingleShotGen(this.asEffect()) as any;
|
|
297
297
|
}
|
|
298
298
|
static asEffect() {
|
|
299
|
-
return this.Self
|
|
299
|
+
return this.Self;
|
|
300
300
|
}
|
|
301
301
|
static pipe(...args: any[]) {
|
|
302
302
|
// @ts-expect-error
|
|
303
|
-
return pipe(this
|
|
303
|
+
return pipe(this, ...args);
|
|
304
304
|
}
|
|
305
305
|
static of = (shape: any) => shape;
|
|
306
306
|
static make = (impl: Impl) => {
|
|
@@ -375,7 +375,7 @@ export const Platform = <
|
|
|
375
375
|
}),
|
|
376
376
|
),
|
|
377
377
|
);
|
|
378
|
-
const self = Self
|
|
378
|
+
const self = Self as any; // TODO(sam): why do we need to cast?
|
|
379
379
|
|
|
380
380
|
return Layer.provideMerge(
|
|
381
381
|
Layer.mergeAll(
|
|
@@ -395,7 +395,7 @@ export const Platform = <
|
|
|
395
395
|
|
|
396
396
|
const instance = Object.assign(constructor, resource, {
|
|
397
397
|
Platform: Platform,
|
|
398
|
-
asEffect: () => resource.Self
|
|
398
|
+
asEffect: () => resource.Self,
|
|
399
399
|
...methods,
|
|
400
400
|
}) as any;
|
|
401
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<
|
|
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.
|
|
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<
|
|
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.
|
|
23
|
+
Random(id, props).pipe(Effect.map((rand) => rand.text));
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* A deterministic-in-state random secret generator.
|
package/src/Resource.ts
CHANGED
|
@@ -237,29 +237,6 @@ export function Resource<R extends ResourceLike>(
|
|
|
237
237
|
[Symbol.toPrimitive](this: typeof target, hint: string) {
|
|
238
238
|
return hint === "number" ? NaN : this.toString();
|
|
239
239
|
},
|
|
240
|
-
// TODO(sam): figure out a better way to log things in cloudflare, this breaks indentation and is bloated
|
|
241
|
-
// [nodeInspect](
|
|
242
|
-
// depth: number,
|
|
243
|
-
// options: { depth?: number | null } & Record<string, unknown>,
|
|
244
|
-
// inspect: (value: unknown, opts?: unknown) => string,
|
|
245
|
-
// ) {
|
|
246
|
-
// if (depth < 0) {
|
|
247
|
-
// return target.toString();
|
|
248
|
-
// }
|
|
249
|
-
// const nextDepth =
|
|
250
|
-
// options.depth == null ? null : Math.max(0, options.depth - 1);
|
|
251
|
-
// return inspect(
|
|
252
|
-
// {
|
|
253
|
-
// Type: target.Type,
|
|
254
|
-
// Namespace: target.Namespace,
|
|
255
|
-
// FQN: target.FQN,
|
|
256
|
-
// LogicalId: target.LogicalId,
|
|
257
|
-
// Props: target.Props,
|
|
258
|
-
// RemovalPolicy: target.RemovalPolicy,
|
|
259
|
-
// },
|
|
260
|
-
// { ...options, depth: nextDepth },
|
|
261
|
-
// );
|
|
262
|
-
// },
|
|
263
240
|
};
|
|
264
241
|
|
|
265
242
|
const Resource: R = (stack.resources[fqn] = new Proxy(target, {
|
|
@@ -285,10 +262,10 @@ export function Resource<R extends ResourceLike>(
|
|
|
285
262
|
|
|
286
263
|
const Service = {
|
|
287
264
|
[Symbol.iterator]() {
|
|
288
|
-
return new SingleShotGen(this);
|
|
265
|
+
return new SingleShotGen(this.asEffect());
|
|
289
266
|
},
|
|
290
267
|
pipe() {
|
|
291
|
-
return pipeArguments(this
|
|
268
|
+
return pipeArguments(this, arguments);
|
|
292
269
|
},
|
|
293
270
|
asEffect() {
|
|
294
271
|
return Effect.succeed((id: string, props: R["Props"]) =>
|