alchemy 2.0.0-beta.84 → 2.0.0-beta.85
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/THIRD_PARTY_LICENSES.md +2 -2
- package/bin/cli.js +14 -6
- package/bin/register-oxc.js +16 -12
- package/lib/AdoptPolicy.d.ts +73 -0
- package/lib/AdoptPolicy.d.ts.map +1 -1
- package/lib/AdoptPolicy.js +54 -0
- package/lib/AdoptPolicy.js.map +1 -1
- package/lib/Alchemist/AuthRegistry.d.ts +31 -0
- package/lib/Alchemist/AuthRegistry.d.ts.map +1 -0
- package/lib/Alchemist/AuthRegistry.js +95 -0
- package/lib/Alchemist/AuthRegistry.js.map +1 -0
- package/lib/Alchemist/Drift.d.ts +70 -0
- package/lib/Alchemist/Drift.d.ts.map +1 -0
- package/lib/Alchemist/Drift.js +54 -0
- package/lib/Alchemist/Drift.js.map +1 -0
- package/lib/Alchemist/Entrypoint.d.ts +27 -3
- package/lib/Alchemist/Entrypoint.d.ts.map +1 -1
- package/lib/Alchemist/Entrypoint.js +34 -3
- package/lib/Alchemist/Entrypoint.js.map +1 -1
- package/lib/Alchemist/Errors.d.ts +1 -1
- package/lib/Alchemist/Errors.d.ts.map +1 -1
- package/lib/Alchemist/Errors.js +1 -1
- package/lib/Alchemist/Errors.js.map +1 -1
- package/lib/Alchemist/Logs.d.ts +46 -0
- package/lib/Alchemist/Logs.d.ts.map +1 -0
- package/lib/Alchemist/{routes/logs.js → Logs.js} +21 -26
- package/lib/Alchemist/Logs.js.map +1 -0
- package/lib/Alchemist/Nuke.d.ts +69 -0
- package/lib/Alchemist/Nuke.d.ts.map +1 -0
- package/lib/Alchemist/Nuke.js +35 -0
- package/lib/Alchemist/Nuke.js.map +1 -0
- package/lib/Alchemist/Operations.d.ts +168 -0
- package/lib/Alchemist/Operations.d.ts.map +1 -0
- package/lib/Alchemist/Operations.js +165 -0
- package/lib/Alchemist/Operations.js.map +1 -0
- package/lib/Alchemist/Profile.d.ts +132 -0
- package/lib/Alchemist/Profile.d.ts.map +1 -0
- package/lib/Alchemist/{routes/profile.js → Profile.js} +20 -21
- package/lib/Alchemist/Profile.js.map +1 -0
- package/lib/Alchemist/{routes/provider.d.ts → Provider.d.ts} +4 -4
- package/lib/Alchemist/Provider.d.ts.map +1 -0
- package/lib/Alchemist/{routes/provider.js → Provider.js} +7 -6
- package/lib/Alchemist/Provider.js.map +1 -0
- package/lib/Alchemist/Runtime.d.ts +10 -6
- package/lib/Alchemist/Runtime.d.ts.map +1 -1
- package/lib/Alchemist/Runtime.js +38 -2
- package/lib/Alchemist/Runtime.js.map +1 -1
- package/lib/Alchemist/{routes/state.d.ts → State.d.ts} +36 -16
- package/lib/Alchemist/State.d.ts.map +1 -0
- package/lib/Alchemist/{routes/state.js → State.js} +50 -15
- package/lib/Alchemist/State.js.map +1 -0
- package/lib/Alchemist/index.d.ts +11 -10
- package/lib/Alchemist/index.d.ts.map +1 -1
- package/lib/Alchemist/index.js +10 -9
- package/lib/Alchemist/index.js.map +1 -1
- package/lib/Apply.d.ts +2 -8
- package/lib/Apply.d.ts.map +1 -1
- package/lib/Apply.js +364 -184
- package/lib/Apply.js.map +1 -1
- package/lib/Auth/AuthProvider.d.ts +24 -11
- package/lib/Auth/AuthProvider.d.ts.map +1 -1
- package/lib/Auth/AuthProvider.js +28 -12
- package/lib/Auth/AuthProvider.js.map +1 -1
- package/lib/Auth/BrowserOAuth.d.ts +6 -8
- package/lib/Auth/BrowserOAuth.d.ts.map +1 -1
- package/lib/Auth/BrowserOAuth.js +25 -41
- package/lib/Auth/BrowserOAuth.js.map +1 -1
- package/lib/Auth/Credentials.d.ts.map +1 -1
- package/lib/Auth/Credentials.js +2 -2
- package/lib/Auth/Credentials.js.map +1 -1
- package/lib/Auth/Demand.d.ts +4 -4
- package/lib/Auth/Demand.d.ts.map +1 -1
- package/lib/Auth/Demand.js +16 -10
- package/lib/Auth/Demand.js.map +1 -1
- package/lib/Auth/Env.d.ts +2 -1
- package/lib/Auth/Env.d.ts.map +1 -1
- package/lib/Auth/Env.js +4 -2
- package/lib/Auth/Env.js.map +1 -1
- package/lib/Auth/Inspect.d.ts +2 -2
- package/lib/Auth/Inspect.d.ts.map +1 -1
- package/lib/Auth/Inspect.js +3 -1
- package/lib/Auth/Inspect.js.map +1 -1
- package/lib/Auth/Lock.d.ts.map +1 -1
- package/lib/Auth/Lock.js +4 -8
- package/lib/Auth/Lock.js.map +1 -1
- package/lib/Auth/OAuthFlow.d.ts +3 -12
- package/lib/Auth/OAuthFlow.d.ts.map +1 -1
- package/lib/Auth/OAuthFlow.js +7 -17
- package/lib/Auth/OAuthFlow.js.map +1 -1
- package/lib/Auth/Paths.d.ts +2 -1
- package/lib/Auth/Paths.d.ts.map +1 -1
- package/lib/Auth/Paths.js +3 -2
- package/lib/Auth/Paths.js.map +1 -1
- package/lib/Auth/Profile.d.ts +10 -0
- package/lib/Auth/Profile.d.ts.map +1 -1
- package/lib/Auth/Profile.js +19 -2
- package/lib/Auth/Profile.js.map +1 -1
- package/lib/Auth/Registry.d.ts +20 -0
- package/lib/Auth/Registry.d.ts.map +1 -0
- package/lib/Auth/Registry.js +17 -0
- package/lib/Auth/Registry.js.map +1 -0
- package/lib/Auth/Resolve.d.ts +34 -2
- package/lib/Auth/Resolve.d.ts.map +1 -1
- package/lib/Auth/Resolve.js +51 -3
- package/lib/Auth/Resolve.js.map +1 -1
- package/lib/Auth/StoredAuthProvider.d.ts +1 -1
- package/lib/Auth/StoredAuthProvider.d.ts.map +1 -1
- package/lib/Auth/StoredAuthProvider.js +1 -2
- package/lib/Auth/StoredAuthProvider.js.map +1 -1
- package/lib/Binding.d.ts.map +1 -1
- package/lib/Binding.js +3 -1
- package/lib/Binding.js.map +1 -1
- package/lib/Bundle/Bundle.d.ts +5 -0
- package/lib/Bundle/Bundle.d.ts.map +1 -1
- package/lib/Bundle/Bundle.js +36 -6
- package/lib/Bundle/Bundle.js.map +1 -1
- package/lib/Bundle/NamespaceImportPlugin.d.ts +55 -0
- package/lib/Bundle/NamespaceImportPlugin.d.ts.map +1 -0
- package/lib/Bundle/NamespaceImportPlugin.js +226 -0
- package/lib/Bundle/NamespaceImportPlugin.js.map +1 -0
- package/lib/Bundle/index.d.ts +1 -0
- package/lib/Bundle/index.d.ts.map +1 -1
- package/lib/Bundle/index.js +1 -0
- package/lib/Bundle/index.js.map +1 -1
- package/lib/Cli/Format.d.ts.map +1 -1
- package/lib/Cli/Format.js +2 -1
- package/lib/Cli/Format.js.map +1 -1
- package/lib/Cli/GlobalLog.d.ts +72 -26
- package/lib/Cli/GlobalLog.d.ts.map +1 -1
- package/lib/Cli/GlobalLog.js +151 -59
- package/lib/Cli/GlobalLog.js.map +1 -1
- package/lib/Cli/LoggingCli.d.ts.map +1 -1
- package/lib/Cli/LoggingCli.js +24 -18
- package/lib/Cli/LoggingCli.js.map +1 -1
- package/lib/Cli/PlainCliFormatter.d.ts.map +1 -1
- package/lib/Cli/PlainCliFormatter.js +4 -1
- package/lib/Cli/PlainCliFormatter.js.map +1 -1
- package/lib/Cli/Present.d.ts +14 -0
- package/lib/Cli/Present.d.ts.map +1 -0
- package/lib/Cli/Present.js +22 -0
- package/lib/Cli/Present.js.map +1 -0
- package/lib/Cli/SigilRenderer.d.ts +58 -0
- package/lib/Cli/SigilRenderer.d.ts.map +1 -0
- package/lib/Cli/SigilRenderer.js +39 -0
- package/lib/Cli/SigilRenderer.js.map +1 -0
- package/lib/Cli/checkVersion.d.ts +11 -14
- package/lib/Cli/checkVersion.d.ts.map +1 -1
- package/lib/Cli/checkVersion.js +19 -77
- package/lib/Cli/checkVersion.js.map +1 -1
- package/lib/Cli/commands/confirm.d.ts +2 -2
- package/lib/Cli/commands/confirm.d.ts.map +1 -1
- package/lib/Cli/commands/confirm.js +3 -3
- package/lib/Cli/commands/confirm.js.map +1 -1
- package/lib/Cli/commands/deploy.d.ts +4 -4
- package/lib/Cli/commands/deploy.d.ts.map +1 -1
- package/lib/Cli/commands/deploy.js +40 -39
- package/lib/Cli/commands/deploy.js.map +1 -1
- package/lib/Cli/commands/dev.d.ts.map +1 -1
- package/lib/Cli/commands/dev.js +41 -3
- package/lib/Cli/commands/dev.js.map +1 -1
- package/lib/Cli/commands/drift.d.ts +2 -2
- package/lib/Cli/commands/drift.d.ts.map +1 -1
- package/lib/Cli/commands/drift.js +14 -13
- package/lib/Cli/commands/drift.js.map +1 -1
- package/lib/Cli/commands/errors.d.ts.map +1 -1
- package/lib/Cli/commands/errors.js +2 -1
- package/lib/Cli/commands/errors.js.map +1 -1
- package/lib/Cli/commands/instrument.d.ts +15 -5
- package/lib/Cli/commands/instrument.d.ts.map +1 -1
- package/lib/Cli/commands/instrument.js +33 -8
- package/lib/Cli/commands/instrument.js.map +1 -1
- package/lib/Cli/commands/logs.d.ts +1 -1
- package/lib/Cli/commands/logs.d.ts.map +1 -1
- package/lib/Cli/commands/logs.js +22 -22
- package/lib/Cli/commands/logs.js.map +1 -1
- package/lib/Cli/commands/nuke.d.ts +3 -2
- package/lib/Cli/commands/nuke.d.ts.map +1 -1
- package/lib/Cli/commands/nuke.js +19 -17
- package/lib/Cli/commands/nuke.js.map +1 -1
- package/lib/Cli/commands/profile/commands.d.ts +3 -2
- package/lib/Cli/commands/profile/commands.d.ts.map +1 -1
- package/lib/Cli/commands/profile/commands.js +26 -27
- package/lib/Cli/commands/profile/commands.js.map +1 -1
- package/lib/Cli/commands/profile/flows.d.ts +6 -5
- package/lib/Cli/commands/profile/flows.d.ts.map +1 -1
- package/lib/Cli/commands/profile/flows.js +19 -17
- package/lib/Cli/commands/profile/flows.js.map +1 -1
- package/lib/Cli/commands/profile/hub.d.ts +1 -2
- package/lib/Cli/commands/profile/hub.d.ts.map +1 -1
- package/lib/Cli/commands/profile/hub.js +15 -17
- package/lib/Cli/commands/profile/hub.js.map +1 -1
- package/lib/Cli/commands/provider.d.ts +3 -1
- package/lib/Cli/commands/provider.d.ts.map +1 -1
- package/lib/Cli/commands/provider.js +4 -4
- package/lib/Cli/commands/provider.js.map +1 -1
- package/lib/Cli/commands/render.d.ts +2 -4
- package/lib/Cli/commands/render.d.ts.map +1 -1
- package/lib/Cli/commands/render.js +33 -56
- package/lib/Cli/commands/render.js.map +1 -1
- package/lib/Cli/commands/state.d.ts +1 -2
- package/lib/Cli/commands/state.d.ts.map +1 -1
- package/lib/Cli/commands/state.js +74 -27
- package/lib/Cli/commands/state.js.map +1 -1
- package/lib/Cli/components/capabilities.d.ts +4 -0
- package/lib/Cli/components/capabilities.d.ts.map +1 -0
- package/lib/Cli/components/capabilities.js +18 -0
- package/lib/Cli/components/capabilities.js.map +1 -0
- package/lib/Cli/components/types.d.ts +2 -81
- package/lib/Cli/components/types.d.ts.map +1 -1
- package/lib/Cli/components/types.js +1 -3
- package/lib/Cli/components/types.js.map +1 -1
- package/lib/Cli/components/ui/Environment.d.ts +3 -3
- package/lib/Cli/components/ui/Environment.d.ts.map +1 -1
- package/lib/Cli/components/ui/Environment.js.map +1 -1
- package/lib/Cli/components/ui/Interactive.d.ts +17 -4
- package/lib/Cli/components/ui/Interactive.d.ts.map +1 -1
- package/lib/Cli/components/ui/Interactive.js +7 -11
- package/lib/Cli/components/ui/Interactive.js.map +1 -1
- package/lib/Cli/components/ui/Layout.d.ts +1 -1
- package/lib/Cli/components/ui/Layout.d.ts.map +1 -1
- package/lib/Cli/components/ui/Layout.js +1 -1
- package/lib/Cli/components/ui/Layout.js.map +1 -1
- package/lib/Cli/components/ui/Typography.d.ts +1 -1
- package/lib/Cli/components/ui/Typography.d.ts.map +1 -1
- package/lib/Cli/components/ui/Typography.js +1 -1
- package/lib/Cli/components/ui/Typography.js.map +1 -1
- package/lib/Cli/components/ui/index.d.ts +2 -2
- package/lib/Cli/components/ui/index.js +2 -2
- package/lib/Cli/components/view/ApprovePlan.d.ts +1 -1
- package/lib/Cli/components/view/ApprovePlan.d.ts.map +1 -1
- package/lib/Cli/components/view/ApprovePlan.js +2 -1
- package/lib/Cli/components/view/ApprovePlan.js.map +1 -1
- package/lib/Cli/components/view/Format.d.ts +5 -0
- package/lib/Cli/components/view/Format.d.ts.map +1 -0
- package/lib/Cli/components/view/Format.js +39 -0
- package/lib/Cli/components/view/Format.js.map +1 -0
- package/lib/Cli/components/view/Help.d.ts +2 -2
- package/lib/Cli/components/view/Help.d.ts.map +1 -1
- package/lib/Cli/components/view/Help.js +7 -5
- package/lib/Cli/components/view/Help.js.map +1 -1
- package/lib/Cli/components/view/Logo.js +1 -1
- package/lib/Cli/components/view/Logo.js.map +1 -1
- package/lib/Cli/components/view/Nuke.d.ts +8 -9
- package/lib/Cli/components/view/Nuke.d.ts.map +1 -1
- package/lib/Cli/components/view/Nuke.js +49 -52
- package/lib/Cli/components/view/Nuke.js.map +1 -1
- package/lib/Cli/components/view/PlanDecision.d.ts +1 -1
- package/lib/Cli/components/view/PlanDecision.d.ts.map +1 -1
- package/lib/Cli/components/view/PlanDecision.js +1 -1
- package/lib/Cli/components/view/PlanDecision.js.map +1 -1
- package/lib/Cli/components/view/PlanRow.js +1 -1
- package/lib/Cli/components/view/PlanRow.js.map +1 -1
- package/lib/Cli/components/view/PlanTree.d.ts +1 -1
- package/lib/Cli/components/view/PlanTree.d.ts.map +1 -1
- package/lib/Cli/components/view/PlanTree.js +1 -1
- package/lib/Cli/components/view/PlanView.js +1 -1
- package/lib/Cli/components/view/PlanView.js.map +1 -1
- package/lib/Cli/components/view/Profile.d.ts +1 -1
- package/lib/Cli/components/view/Profile.js +2 -2
- package/lib/Cli/components/view/Profile.js.map +1 -1
- package/lib/Cli/components/view/ProfileDashboard.d.ts +4 -4
- package/lib/Cli/components/view/ProfileDashboard.d.ts.map +1 -1
- package/lib/Cli/components/view/ProfileDashboard.js +9 -8
- package/lib/Cli/components/view/ProfileDashboard.js.map +1 -1
- package/lib/Cli/components/view/Prompts.d.ts +3 -3
- package/lib/Cli/components/view/Prompts.d.ts.map +1 -1
- package/lib/Cli/components/view/Prompts.js +11 -18
- package/lib/Cli/components/view/Prompts.js.map +1 -1
- package/lib/Cli/components/view/Runtime.d.ts +5 -5
- package/lib/Cli/components/view/Runtime.d.ts.map +1 -1
- package/lib/Cli/components/view/Runtime.js +136 -219
- package/lib/Cli/components/view/Runtime.js.map +1 -1
- package/lib/Cli/components/view/SigilCli.d.ts +2 -2
- package/lib/Cli/components/view/SigilCli.d.ts.map +1 -1
- package/lib/Cli/components/view/SigilCli.js +7 -7
- package/lib/Cli/components/view/SigilCli.js.map +1 -1
- package/lib/Cli/components/view/StateExplorer.d.ts +1 -1
- package/lib/Cli/components/view/StateExplorer.d.ts.map +1 -1
- package/lib/Cli/components/view/StateExplorer.js +2 -1
- package/lib/Cli/components/view/StateExplorer.js.map +1 -1
- package/lib/Cli/components/view/statusStyle.d.ts +2 -2
- package/lib/Cli/components/view/statusStyle.d.ts.map +1 -1
- package/lib/Cli/components/view/statusStyle.js +1 -1
- package/lib/Cli/components/view/statusStyle.js.map +1 -1
- package/lib/Cli/exec.d.ts +6 -1
- package/lib/Cli/exec.d.ts.map +1 -1
- package/lib/Cli/exec.js +29 -34
- package/lib/Cli/exec.js.map +1 -1
- package/lib/Cli/main.d.ts.map +1 -1
- package/lib/Cli/main.js +35 -26
- package/lib/Cli/main.js.map +1 -1
- package/lib/Cli/selectCli.d.ts +2 -2
- package/lib/Cli/selectCli.d.ts.map +1 -1
- package/lib/Cli/selectCli.js +2 -2
- package/lib/Cli/selectCli.js.map +1 -1
- package/lib/Command/Command.js +1 -1
- package/lib/Command/Command.js.map +1 -1
- package/lib/Command/Dev.d.ts +58 -4
- package/lib/Command/Dev.d.ts.map +1 -1
- package/lib/Command/Dev.js +87 -30
- package/lib/Command/Dev.js.map +1 -1
- package/lib/Command/Local.d.ts +1 -1
- package/lib/Command/Memo.js +1 -1
- package/lib/Command/Memo.js.map +1 -1
- package/lib/Command/Providers.d.ts +1 -1
- package/lib/Command/Providers.d.ts.map +1 -1
- package/lib/Contributions.d.ts +2 -3
- package/lib/Contributions.d.ts.map +1 -1
- package/lib/Contributions.js +38 -6
- package/lib/Contributions.js.map +1 -1
- package/lib/DNS/Adapter.d.ts +204 -0
- package/lib/DNS/Adapter.d.ts.map +1 -0
- package/lib/DNS/Adapter.js +112 -0
- package/lib/DNS/Adapter.js.map +1 -0
- package/lib/DNS/index.d.ts +2 -0
- package/lib/DNS/index.d.ts.map +1 -0
- package/lib/DNS/index.js +2 -0
- package/lib/DNS/index.js.map +1 -0
- package/lib/Deploy.d.ts +7 -2
- package/lib/Deploy.d.ts.map +1 -1
- package/lib/Deploy.js +8 -3
- package/lib/Deploy.js.map +1 -1
- package/lib/Destroy.d.ts +5 -8
- package/lib/Destroy.d.ts.map +1 -1
- package/lib/Destroy.js +10 -7
- package/lib/Destroy.js.map +1 -1
- package/lib/Diff.d.ts.map +1 -1
- package/lib/Diff.js +14 -4
- package/lib/Diff.js.map +1 -1
- package/lib/Drift.d.ts +7 -7
- package/lib/Drift.d.ts.map +1 -1
- package/lib/Drift.js +184 -101
- package/lib/Drift.js.map +1 -1
- package/lib/EvalStack.d.ts +23 -0
- package/lib/EvalStack.d.ts.map +1 -0
- package/lib/EvalStack.js +47 -0
- package/lib/EvalStack.js.map +1 -0
- package/lib/Events.d.ts +210 -0
- package/lib/Events.d.ts.map +1 -0
- package/lib/Events.js +244 -0
- package/lib/Events.js.map +1 -0
- package/lib/Interaction.d.ts +159 -48
- package/lib/Interaction.d.ts.map +1 -1
- package/lib/Interaction.js +139 -58
- package/lib/Interaction.js.map +1 -1
- package/lib/Local/LocalProvider.d.ts.map +1 -1
- package/lib/Local/LocalProvider.js +31 -9
- package/lib/Local/LocalProvider.js.map +1 -1
- package/lib/Local/RpcProvider.d.ts.map +1 -1
- package/lib/Local/RpcProvider.js +10 -1
- package/lib/Local/RpcProvider.js.map +1 -1
- package/lib/Local/RpcProviderProxy.d.ts +16 -0
- package/lib/Local/RpcProviderProxy.d.ts.map +1 -1
- package/lib/Local/RpcProviderProxy.js +19 -10
- package/lib/Local/RpcProviderProxy.js.map +1 -1
- package/lib/Local/RpcSerialization.d.ts +3 -2
- package/lib/Local/RpcSerialization.d.ts.map +1 -1
- package/lib/Local/RpcSerialization.js +13 -10
- package/lib/Local/RpcSerialization.js.map +1 -1
- package/lib/Local/RpcServer.d.ts +2 -1
- package/lib/Local/RpcServer.d.ts.map +1 -1
- package/lib/Local/RpcServer.js +19 -14
- package/lib/Local/RpcServer.js.map +1 -1
- package/lib/Local/RpcServerBun.d.ts.map +1 -1
- package/lib/Local/RpcServerBun.js +8 -4
- package/lib/Local/RpcServerBun.js.map +1 -1
- package/lib/Local/RpcServerEnvironment.d.ts +2 -3
- package/lib/Local/RpcServerEnvironment.d.ts.map +1 -1
- package/lib/Local/RpcServerEnvironment.js +2 -2
- package/lib/Local/RpcServerEnvironment.js.map +1 -1
- package/lib/Local/RpcServerNode.d.ts.map +1 -1
- package/lib/Local/RpcServerNode.js +5 -1
- package/lib/Local/RpcServerNode.js.map +1 -1
- package/lib/Local/RpcServerSession.d.ts +1 -1
- package/lib/Local/RpcServerSession.d.ts.map +1 -1
- package/lib/Local/RpcServerSession.js.map +1 -1
- package/lib/Local/RpcSpawner.d.ts +6 -8
- package/lib/Local/RpcSpawner.d.ts.map +1 -1
- package/lib/Local/RpcSpawner.js +45 -36
- package/lib/Local/RpcSpawner.js.map +1 -1
- package/lib/Local/Sidecar.d.ts +23 -0
- package/lib/Local/Sidecar.d.ts.map +1 -1
- package/lib/Local/Sidecar.js +14 -9
- package/lib/Local/Sidecar.js.map +1 -1
- package/lib/Nuke.d.ts +5 -23
- package/lib/Nuke.d.ts.map +1 -1
- package/lib/Nuke.js +48 -13
- package/lib/Nuke.js.map +1 -1
- package/lib/Output.d.ts +19 -1
- package/lib/Output.d.ts.map +1 -1
- package/lib/Output.js +96 -3
- package/lib/Output.js.map +1 -1
- package/lib/Plan.d.ts +5 -1
- package/lib/Plan.d.ts.map +1 -1
- package/lib/Plan.js +111 -33
- package/lib/Plan.js.map +1 -1
- package/lib/Platform.d.ts.map +1 -1
- package/lib/Platform.js +31 -7
- package/lib/Platform.js.map +1 -1
- package/lib/Provider.d.ts +45 -0
- package/lib/Provider.d.ts.map +1 -1
- package/lib/Provider.js +2 -2
- package/lib/Provider.js.map +1 -1
- package/lib/Report.d.ts +17 -195
- package/lib/Report.d.ts.map +1 -1
- package/lib/Report.js +39 -12
- package/lib/Report.js.map +1 -1
- package/lib/Runtime/ManagedHttpShutdown.d.ts +17 -0
- package/lib/Runtime/ManagedHttpShutdown.d.ts.map +1 -1
- package/lib/Runtime/ManagedHttpShutdown.js +11 -2
- package/lib/Runtime/ManagedHttpShutdown.js.map +1 -1
- package/lib/RuntimeContext.js +1 -1
- package/lib/RuntimeContext.js.map +1 -1
- package/lib/Stack.d.ts +49 -29
- package/lib/Stack.d.ts.map +1 -1
- package/lib/Stack.js +25 -31
- package/lib/Stack.js.map +1 -1
- package/lib/State/BucketState.d.ts.map +1 -1
- package/lib/State/BucketState.js +43 -14
- package/lib/State/BucketState.js.map +1 -1
- package/lib/State/LocalState.d.ts.map +1 -1
- package/lib/State/LocalState.js +3 -3
- package/lib/State/LocalState.js.map +1 -1
- package/lib/State/Provisioning.d.ts +5 -0
- package/lib/State/Provisioning.d.ts.map +1 -1
- package/lib/State/Provisioning.js +3 -1
- package/lib/State/Provisioning.js.map +1 -1
- package/lib/State/ResourceState.d.ts +2 -0
- package/lib/State/ResourceState.d.ts.map +1 -1
- package/lib/State/State.d.ts +26 -0
- package/lib/State/State.d.ts.map +1 -1
- package/lib/State/StateEncoding.d.ts +7 -0
- package/lib/State/StateEncoding.d.ts.map +1 -1
- package/lib/State/StateEncoding.js +19 -0
- package/lib/State/StateEncoding.js.map +1 -1
- package/lib/State/index.js +2 -2
- package/lib/State/index.js.map +1 -1
- package/lib/Telemetry/Layer.d.ts +2 -5
- package/lib/Telemetry/Layer.d.ts.map +1 -1
- package/lib/Telemetry/Layer.js +3 -23
- package/lib/Telemetry/Layer.js.map +1 -1
- package/lib/Telemetry/Metrics.d.ts +1 -1
- package/lib/Telemetry/Metrics.d.ts.map +1 -1
- package/lib/TelemetryRelay.js +1 -1
- package/lib/TelemetryRelay.js.map +1 -1
- package/lib/TelemetryRuntime.d.ts +1 -1
- package/lib/TelemetryRuntime.d.ts.map +1 -1
- package/lib/TelemetryRuntime.js +4 -3
- package/lib/TelemetryRuntime.js.map +1 -1
- package/lib/Util/ConsoleSink.d.ts +23 -2
- package/lib/Util/ConsoleSink.d.ts.map +1 -1
- package/lib/Util/ConsoleSink.js +54 -14
- package/lib/Util/ConsoleSink.js.map +1 -1
- package/lib/Util/LogAnnotation.d.ts +19 -0
- package/lib/Util/LogAnnotation.d.ts.map +1 -0
- package/lib/Util/LogAnnotation.js +19 -0
- package/lib/Util/LogAnnotation.js.map +1 -0
- package/lib/Util/LogRecord.d.ts +281 -0
- package/lib/Util/LogRecord.d.ts.map +1 -0
- package/lib/Util/LogRecord.js +267 -0
- package/lib/Util/LogRecord.js.map +1 -0
- package/lib/Util/Node.d.ts +9 -0
- package/lib/Util/Node.d.ts.map +1 -1
- package/lib/Util/Node.js +10 -6
- package/lib/Util/Node.js.map +1 -1
- package/lib/Util/PlatformServices.d.ts +3 -2
- package/lib/Util/PlatformServices.d.ts.map +1 -1
- package/lib/Util/PlatformServices.js +6 -2
- package/lib/Util/PlatformServices.js.map +1 -1
- package/lib/Util/ResourceOutput.d.ts +18 -10
- package/lib/Util/ResourceOutput.d.ts.map +1 -1
- package/lib/Util/ResourceOutput.js +22 -23
- package/lib/Util/ResourceOutput.js.map +1 -1
- package/lib/Util/Shutdown.d.ts +10 -0
- package/lib/Util/Shutdown.d.ts.map +1 -0
- package/lib/Util/Shutdown.js +32 -0
- package/lib/Util/Shutdown.js.map +1 -0
- package/lib/Util/Terminal.d.ts +2 -4
- package/lib/Util/Terminal.d.ts.map +1 -1
- package/lib/Util/Terminal.js +3 -11
- package/lib/Util/Terminal.js.map +1 -1
- package/lib/Util/TraceParent.d.ts +32 -0
- package/lib/Util/TraceParent.d.ts.map +1 -0
- package/lib/Util/TraceParent.js +42 -0
- package/lib/Util/TraceParent.js.map +1 -0
- package/lib/Util/base64.d.ts +7 -0
- package/lib/Util/base64.d.ts.map +1 -0
- package/lib/Util/base64.js +24 -0
- package/lib/Util/base64.js.map +1 -0
- package/lib/Util/cached-function.d.ts +5 -0
- package/lib/Util/cached-function.d.ts.map +1 -1
- package/lib/Util/cached-function.js +13 -8
- package/lib/Util/cached-function.js.map +1 -1
- package/lib/Util/data.d.ts +1 -1
- package/lib/Util/data.d.ts.map +1 -1
- package/lib/Util/data.js +1 -1
- package/lib/Util/data.js.map +1 -1
- package/lib/Util/equal.d.ts.map +1 -1
- package/lib/Util/equal.js +3 -2
- package/lib/Util/equal.js.map +1 -1
- package/lib/Util/extraFiles.d.ts.map +1 -1
- package/lib/Util/extraFiles.js +5 -5
- package/lib/Util/extraFiles.js.map +1 -1
- package/lib/Util/interactive.js +1 -1
- package/lib/Website/AstroOutput.d.ts +42 -0
- package/lib/Website/AstroOutput.d.ts.map +1 -0
- package/lib/Website/AstroOutput.js +34 -0
- package/lib/Website/AstroOutput.js.map +1 -0
- package/lib/Website/FrontendCore.d.ts +1 -1
- package/lib/Workflows.d.ts +9 -0
- package/lib/Workflows.d.ts.map +1 -1
- package/lib/Workflows.js +8 -0
- package/lib/Workflows.js.map +1 -1
- 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/package.json +21 -28
- package/src/AdoptPolicy.ts +76 -0
- package/src/Alchemist/AuthRegistry.ts +164 -0
- package/src/Alchemist/Drift.ts +103 -0
- package/src/Alchemist/Entrypoint.ts +51 -3
- package/src/Alchemist/Errors.ts +1 -1
- package/src/Alchemist/{routes/logs.ts → Logs.ts} +28 -30
- package/src/Alchemist/Nuke.ts +90 -0
- package/src/Alchemist/Operations.ts +309 -0
- package/src/Alchemist/{routes/profile.ts → Profile.ts} +22 -22
- package/src/Alchemist/{routes/provider.ts → Provider.ts} +7 -6
- package/src/Alchemist/Runtime.ts +46 -12
- package/src/Alchemist/{routes/state.ts → State.ts} +78 -21
- package/src/Alchemist/index.ts +32 -15
- package/src/Apply.ts +513 -274
- package/src/Auth/AuthProvider.ts +76 -23
- package/src/Auth/BrowserOAuth.ts +37 -60
- package/src/Auth/Credentials.ts +2 -4
- package/src/Auth/Demand.ts +27 -18
- package/src/Auth/Env.ts +13 -8
- package/src/Auth/Inspect.ts +5 -2
- package/src/Auth/Lock.ts +4 -8
- package/src/Auth/OAuthFlow.ts +12 -26
- package/src/Auth/Paths.ts +3 -2
- package/src/Auth/Profile.ts +30 -2
- package/src/Auth/Registry.ts +27 -0
- package/src/Auth/Resolve.ts +75 -3
- package/src/Auth/StoredAuthProvider.ts +1 -2
- package/src/Binding.ts +3 -4
- package/src/Bundle/Bundle.ts +58 -7
- package/src/Bundle/NamespaceImportPlugin.ts +259 -0
- package/src/Bundle/index.ts +1 -0
- package/src/Cli/Format.ts +2 -1
- package/src/Cli/GlobalLog.ts +206 -68
- package/src/Cli/LoggingCli.ts +33 -20
- package/src/Cli/PlainCliFormatter.ts +4 -1
- package/src/Cli/Present.ts +34 -0
- package/src/Cli/SigilRenderer.ts +75 -0
- package/src/Cli/checkVersion.ts +25 -78
- package/src/Cli/commands/confirm.ts +3 -3
- package/src/Cli/commands/deploy.ts +53 -44
- package/src/Cli/commands/dev.ts +65 -7
- package/src/Cli/commands/drift.ts +20 -16
- package/src/Cli/commands/errors.ts +2 -3
- package/src/Cli/commands/instrument.ts +39 -8
- package/src/Cli/commands/logs.ts +22 -30
- package/src/Cli/commands/nuke.ts +25 -26
- package/src/Cli/commands/profile/commands.ts +34 -34
- package/src/Cli/commands/profile/flows.ts +26 -20
- package/src/Cli/commands/profile/hub.ts +16 -18
- package/src/Cli/commands/provider.ts +4 -4
- package/src/Cli/commands/render.ts +43 -71
- package/src/Cli/commands/state.ts +113 -33
- package/src/Cli/components/capabilities.ts +20 -0
- package/src/Cli/components/types.ts +13 -99
- package/src/Cli/components/ui/Environment.tsx +5 -5
- package/src/Cli/components/ui/Interactive.tsx +24 -15
- package/src/Cli/components/ui/Layout.tsx +1 -1
- package/src/Cli/components/ui/Typography.tsx +1 -1
- package/src/Cli/components/ui/index.ts +2 -2
- package/src/Cli/components/view/ApprovePlan.tsx +2 -1
- package/src/Cli/components/view/Format.tsx +58 -0
- package/src/Cli/components/view/Help.tsx +14 -17
- package/src/Cli/components/view/Logo.tsx +1 -1
- package/src/Cli/components/view/Nuke.tsx +74 -49
- package/src/Cli/components/view/PlanDecision.tsx +1 -1
- package/src/Cli/components/view/PlanRow.tsx +1 -1
- package/src/Cli/components/view/PlanTree.ts +2 -2
- package/src/Cli/components/view/PlanView.tsx +2 -2
- package/src/Cli/components/view/Profile.tsx +2 -2
- package/src/Cli/components/view/ProfileDashboard.tsx +12 -11
- package/src/Cli/components/view/Prompts.tsx +37 -75
- package/src/Cli/components/view/Runtime.tsx +132 -238
- package/src/Cli/components/view/SigilCli.tsx +12 -12
- package/src/Cli/components/view/StateExplorer.tsx +2 -1
- package/src/Cli/components/view/statusStyle.ts +2 -2
- package/src/Cli/exec.ts +48 -41
- package/src/Cli/main.ts +52 -33
- package/src/Cli/selectCli.ts +3 -3
- package/src/Command/Command.ts +1 -1
- package/src/Command/Dev.ts +129 -36
- package/src/Command/Memo.ts +1 -1
- package/src/Contributions.ts +42 -8
- package/src/DNS/Adapter.ts +289 -0
- package/src/DNS/index.ts +1 -0
- package/src/Deploy.ts +11 -3
- package/src/Destroy.ts +19 -13
- package/src/Diff.ts +17 -4
- package/src/Drift.ts +256 -127
- package/src/EvalStack.ts +97 -0
- package/src/Events.ts +296 -0
- package/src/Interaction.ts +332 -97
- package/src/Local/LocalProvider.ts +40 -9
- package/src/Local/RpcProvider.ts +11 -1
- package/src/Local/RpcProviderProxy.ts +29 -21
- package/src/Local/RpcSerialization.ts +32 -17
- package/src/Local/RpcServer.ts +25 -17
- package/src/Local/RpcServerBun.ts +10 -6
- package/src/Local/RpcServerEnvironment.ts +2 -2
- package/src/Local/RpcServerNode.ts +8 -1
- package/src/Local/RpcServerSession.ts +2 -2
- package/src/Local/RpcSpawner.ts +61 -37
- package/src/Local/Sidecar.ts +10 -1
- package/src/Nuke.ts +66 -43
- package/src/Output.ts +120 -7
- package/src/Plan.ts +140 -52
- package/src/Platform.ts +47 -18
- package/src/Provider.ts +48 -3
- package/src/Report.ts +77 -275
- package/src/Runtime/ManagedHttpShutdown.ts +21 -4
- package/src/RuntimeContext.ts +1 -1
- package/src/Stack.ts +113 -135
- package/src/State/BucketState.ts +53 -21
- package/src/State/LocalState.ts +7 -9
- package/src/State/Provisioning.ts +8 -1
- package/src/State/ResourceState.ts +2 -0
- package/src/State/State.ts +30 -0
- package/src/State/StateEncoding.ts +22 -0
- package/src/State/index.ts +2 -2
- package/src/Telemetry/Layer.ts +3 -24
- package/src/Telemetry/Metrics.ts +1 -1
- package/src/TelemetryRelay.ts +1 -1
- package/src/TelemetryRuntime.ts +8 -8
- package/src/Util/ConsoleSink.ts +76 -13
- package/src/Util/LogAnnotation.ts +18 -0
- package/src/Util/LogRecord.ts +386 -0
- package/src/Util/Node.ts +20 -6
- package/src/Util/PlatformServices.ts +17 -4
- package/src/Util/ResourceOutput.ts +26 -25
- package/src/Util/Shutdown.ts +52 -0
- package/src/Util/Terminal.ts +3 -20
- package/src/Util/TraceParent.ts +70 -0
- package/src/Util/base64.ts +22 -0
- package/src/Util/cached-function.ts +30 -19
- package/src/Util/data.ts +2 -2
- package/src/Util/equal.ts +3 -2
- package/src/Util/extraFiles.ts +9 -8
- package/src/Util/interactive.ts +1 -1
- package/src/Website/AstroOutput.ts +83 -0
- package/src/Workflows.ts +11 -0
- package/src/index.ts +1 -0
- package/lib/Alchemist/Progress.d.ts +0 -16
- package/lib/Alchemist/Progress.d.ts.map +0 -1
- package/lib/Alchemist/Progress.js +0 -123
- package/lib/Alchemist/Progress.js.map +0 -1
- package/lib/Alchemist/Session.d.ts +0 -116
- package/lib/Alchemist/Session.d.ts.map +0 -1
- package/lib/Alchemist/Session.js +0 -212
- package/lib/Alchemist/Session.js.map +0 -1
- package/lib/Alchemist/routes/drift.d.ts +0 -55
- package/lib/Alchemist/routes/drift.d.ts.map +0 -1
- package/lib/Alchemist/routes/drift.js +0 -52
- package/lib/Alchemist/routes/drift.js.map +0 -1
- package/lib/Alchemist/routes/logs.d.ts +0 -41
- package/lib/Alchemist/routes/logs.d.ts.map +0 -1
- package/lib/Alchemist/routes/logs.js.map +0 -1
- package/lib/Alchemist/routes/nuke.d.ts +0 -46
- package/lib/Alchemist/routes/nuke.d.ts.map +0 -1
- package/lib/Alchemist/routes/nuke.js +0 -80
- package/lib/Alchemist/routes/nuke.js.map +0 -1
- package/lib/Alchemist/routes/profile.d.ts +0 -133
- package/lib/Alchemist/routes/profile.d.ts.map +0 -1
- package/lib/Alchemist/routes/profile.js.map +0 -1
- package/lib/Alchemist/routes/provider.d.ts.map +0 -1
- package/lib/Alchemist/routes/provider.js.map +0 -1
- package/lib/Alchemist/routes/stack.d.ts +0 -95
- package/lib/Alchemist/routes/stack.d.ts.map +0 -1
- package/lib/Alchemist/routes/stack.js +0 -73
- package/lib/Alchemist/routes/stack.js.map +0 -1
- package/lib/Alchemist/routes/state.d.ts.map +0 -1
- package/lib/Alchemist/routes/state.js.map +0 -1
- package/lib/Cli/CliKit/CliKit.d.ts +0 -92
- package/lib/Cli/CliKit/CliKit.d.ts.map +0 -1
- package/lib/Cli/CliKit/CliKit.js +0 -27
- package/lib/Cli/CliKit/CliKit.js.map +0 -1
- package/lib/Cli/CliKit/index.d.ts +0 -9
- package/lib/Cli/CliKit/index.d.ts.map +0 -1
- package/lib/Cli/CliKit/index.js +0 -9
- package/lib/Cli/CliKit/index.js.map +0 -1
- package/lib/Cli/CliKit/interaction.d.ts +0 -13
- package/lib/Cli/CliKit/interaction.d.ts.map +0 -1
- package/lib/Cli/CliKit/interaction.js +0 -17
- package/lib/Cli/CliKit/interaction.js.map +0 -1
- package/lib/Cli/CliKit/layer.d.ts +0 -7
- package/lib/Cli/CliKit/layer.d.ts.map +0 -1
- package/lib/Cli/CliKit/layer.js +0 -33
- package/lib/Cli/CliKit/layer.js.map +0 -1
- package/lib/Local/DevLog.d.ts +0 -32
- package/lib/Local/DevLog.d.ts.map +0 -1
- package/lib/Local/DevLog.js +0 -112
- package/lib/Local/DevLog.js.map +0 -1
- package/lib/Test/Alchemy.d.ts +0 -79
- package/lib/Test/Alchemy.d.ts.map +0 -1
- package/lib/Test/Alchemy.js +0 -193
- package/lib/Test/Alchemy.js.map +0 -1
- package/lib/Test/Bun.d.ts +0 -69
- package/lib/Test/Bun.d.ts.map +0 -1
- package/lib/Test/Bun.js +0 -126
- package/lib/Test/Bun.js.map +0 -1
- package/lib/Test/Core.d.ts +0 -277
- package/lib/Test/Core.d.ts.map +0 -1
- package/lib/Test/Core.js +0 -362
- package/lib/Test/Core.js.map +0 -1
- package/lib/Test/Http.d.ts +0 -109
- package/lib/Test/Http.d.ts.map +0 -1
- package/lib/Test/Http.js +0 -123
- package/lib/Test/Http.js.map +0 -1
- package/lib/Test/TestState.d.ts +0 -12
- package/lib/Test/TestState.d.ts.map +0 -1
- package/lib/Test/TestState.js +0 -15
- package/lib/Test/TestState.js.map +0 -1
- package/lib/Test/Vitest.d.ts +0 -60
- package/lib/Test/Vitest.d.ts.map +0 -1
- package/lib/Test/Vitest.js +0 -132
- package/lib/Test/Vitest.js.map +0 -1
- package/lib/Test/index.d.ts +0 -3
- package/lib/Test/index.d.ts.map +0 -1
- package/lib/Test/index.js +0 -3
- package/lib/Test/index.js.map +0 -1
- package/lib/Util/FileLogger.d.ts +0 -7
- package/lib/Util/FileLogger.d.ts.map +0 -1
- package/lib/Util/FileLogger.js +0 -16
- package/lib/Util/FileLogger.js.map +0 -1
- package/src/Alchemist/Progress.ts +0 -167
- package/src/Alchemist/Session.ts +0 -415
- package/src/Alchemist/routes/drift.ts +0 -87
- package/src/Alchemist/routes/nuke.ts +0 -131
- package/src/Alchemist/routes/stack.ts +0 -173
- package/src/Cli/CliKit/CliKit.ts +0 -159
- package/src/Cli/CliKit/index.ts +0 -41
- package/src/Cli/CliKit/interaction.ts +0 -19
- package/src/Cli/CliKit/layer.ts +0 -44
- package/src/Local/DevLog.ts +0 -122
- package/src/Test/Alchemy.ts +0 -334
- package/src/Test/Bun.ts +0 -230
- package/src/Test/Core.ts +0 -785
- package/src/Test/Http.ts +0 -201
- package/src/Test/TestState.ts +0 -35
- package/src/Test/Vitest.ts +0 -239
- package/src/Test/index.ts +0 -2
- package/src/Util/FileLogger.ts +0 -20
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import * as Cause from "effect/Cause";
|
|
2
|
+
import * as Context from "effect/Context";
|
|
3
|
+
import * as Duration from "effect/Duration";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import * as FileSystem from "effect/FileSystem";
|
|
6
|
+
import * as Layer from "effect/Layer";
|
|
7
|
+
import * as Option from "effect/Option";
|
|
8
|
+
import type { PlatformError } from "effect/PlatformError";
|
|
9
|
+
import * as Schema from "effect/Schema";
|
|
10
|
+
import * as Scope from "effect/Scope";
|
|
11
|
+
import { AuthError, AuthProviders } from "../Auth/AuthProvider.ts";
|
|
12
|
+
import { SuppressMissingProviderConfig } from "../Auth/Profile.ts";
|
|
13
|
+
import * as Contributions from "../Contributions.ts";
|
|
14
|
+
import type { ContributionError } from "../Contributions.ts";
|
|
15
|
+
import { makeCachedFunction } from "../Util/cached-function.ts";
|
|
16
|
+
import { DEFAULT_ENTRYPOINT, importStack } from "./Entrypoint.ts";
|
|
17
|
+
import * as Operations from "./Operations.ts";
|
|
18
|
+
import type { Services } from "./Runtime.ts";
|
|
19
|
+
|
|
20
|
+
// Every auth provider a project can reach: what `alchemy profile` and
|
|
21
|
+
// `alchemy provider check-env` list and configure. Collected by building the
|
|
22
|
+
// installed providers' auth and the project's providers into one registry.
|
|
23
|
+
|
|
24
|
+
/** What collecting an auth registry can fail with. */
|
|
25
|
+
export type CollectAuthProvidersError = AuthError | ContributionError | PlatformError;
|
|
26
|
+
|
|
27
|
+
/** What collecting an auth registry runs under. */
|
|
28
|
+
export type CollectAuthProvidersServices = Services | Scope.Scope;
|
|
29
|
+
|
|
30
|
+
type CollectAuthProviders = (
|
|
31
|
+
options: CollectAuthProvidersOptions,
|
|
32
|
+
) => Effect.Effect<
|
|
33
|
+
AuthProviders["Service"],
|
|
34
|
+
CollectAuthProvidersError,
|
|
35
|
+
CollectAuthProvidersServices
|
|
36
|
+
>;
|
|
37
|
+
|
|
38
|
+
export interface CollectAuthProvidersOptions {
|
|
39
|
+
readonly main: string;
|
|
40
|
+
readonly envFile: Option.Option<string>;
|
|
41
|
+
readonly profile: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Every provider's auth provider, merged into one registering layer. One
|
|
46
|
+
* provider whose auth fails to load is skipped with a warning, so it can't
|
|
47
|
+
* take every other provider's auth down with it.
|
|
48
|
+
*/
|
|
49
|
+
const contributedAuth = Effect.gen(function* () {
|
|
50
|
+
const layers = yield* Effect.forEach(
|
|
51
|
+
yield* Contributions.load(),
|
|
52
|
+
(provider) =>
|
|
53
|
+
provider.auth
|
|
54
|
+
? Contributions.resolve(provider, "auth", provider.auth).pipe(
|
|
55
|
+
Effect.catch((error) => Effect.as(Effect.logWarning(error.message), Layer.empty)),
|
|
56
|
+
)
|
|
57
|
+
: Effect.succeed(Layer.empty),
|
|
58
|
+
{ concurrency: "unbounded" },
|
|
59
|
+
);
|
|
60
|
+
return Layer.mergeAll(Layer.empty, ...layers);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
/** Register every installed provider's auth into the ambient registry. */
|
|
64
|
+
const registerContributedAuth = Effect.fn("registerContributedAuth")(function* (options: {
|
|
65
|
+
readonly envFile: Option.Option<string>;
|
|
66
|
+
readonly profile: string;
|
|
67
|
+
}) {
|
|
68
|
+
const shared = yield* Operations.configServices({
|
|
69
|
+
...options,
|
|
70
|
+
envFile: Option.getOrUndefined(options.envFile),
|
|
71
|
+
});
|
|
72
|
+
yield* Layer.build(Layer.provide(yield* contributedAuth, shared));
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
const isMissingProviderConfig = Schema.is(
|
|
76
|
+
Schema.Struct({ _tag: Schema.Literals(["MissingProviderConfig"]) }),
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Every auth provider reachable from the current project: the built-ins, plus
|
|
81
|
+
* whatever the user's stack module registers when it is importable.
|
|
82
|
+
*/
|
|
83
|
+
const collectAuthProvidersUncached = Effect.fn("collectAuthProvidersUncached")(
|
|
84
|
+
function* (options: CollectAuthProvidersOptions) {
|
|
85
|
+
// Everything built below registers into this one registry: the
|
|
86
|
+
// registry layers reuse an ambient registry instead of starting fresh.
|
|
87
|
+
const authProviders: AuthProviders["Service"] = {};
|
|
88
|
+
const collect = Effect.provideService(AuthProviders, authProviders);
|
|
89
|
+
yield* registerContributedAuth(options).pipe(collect);
|
|
90
|
+
|
|
91
|
+
const fs = yield* FileSystem.FileSystem;
|
|
92
|
+
const entrypointExists = yield* fs.exists(options.main);
|
|
93
|
+
const missingDefault = options.main === DEFAULT_ENTRYPOINT && !entrypointExists;
|
|
94
|
+
if (!entrypointExists && !missingDefault) {
|
|
95
|
+
return yield* AuthError.make({
|
|
96
|
+
message: `Stack entrypoint '${options.main}' does not exist.`,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
if (!missingDefault) {
|
|
100
|
+
yield* importStack(options.main).pipe(
|
|
101
|
+
Effect.flatMap((stack) =>
|
|
102
|
+
Operations.buildProviders(stack, {
|
|
103
|
+
profile: options.profile,
|
|
104
|
+
envFile: Option.getOrUndefined(options.envFile),
|
|
105
|
+
}),
|
|
106
|
+
),
|
|
107
|
+
collect,
|
|
108
|
+
Effect.timeoutOption(Duration.seconds(15)),
|
|
109
|
+
Effect.catchCause((cause) => {
|
|
110
|
+
const suppressed = cause.reasons.some((reason) => {
|
|
111
|
+
const error = Cause.isFailReason(reason)
|
|
112
|
+
? reason.error
|
|
113
|
+
: Cause.isDieReason(reason)
|
|
114
|
+
? reason.defect
|
|
115
|
+
: undefined;
|
|
116
|
+
return isMissingProviderConfig(error);
|
|
117
|
+
});
|
|
118
|
+
return suppressed
|
|
119
|
+
? Effect.void
|
|
120
|
+
: Effect.fail(
|
|
121
|
+
AuthError.make({
|
|
122
|
+
message: `Could not load auth providers from '${options.main}'.`,
|
|
123
|
+
cause,
|
|
124
|
+
}),
|
|
125
|
+
);
|
|
126
|
+
}),
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
return authProviders;
|
|
130
|
+
},
|
|
131
|
+
Effect.provideService(SuppressMissingProviderConfig, true),
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Collects auth registries. Uncached by default; {@link authRegistryLayer}
|
|
136
|
+
* memoizes them for its own lifetime.
|
|
137
|
+
*/
|
|
138
|
+
const AuthRegistry = Context.Reference<CollectAuthProviders>("Alchemy/Alchemist/AuthRegistry", {
|
|
139
|
+
defaultValue: () => collectAuthProvidersUncached,
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Memoize auth registries for one command or API runtime: profile flows
|
|
144
|
+
* collect them repeatedly, and concurrent collections of the same project
|
|
145
|
+
* share one. Registries are built in this layer's scope, so a cached one
|
|
146
|
+
* never outlives the services its providers captured. Failures are not
|
|
147
|
+
* cached.
|
|
148
|
+
*/
|
|
149
|
+
export const authRegistryLayer = Layer.effect(
|
|
150
|
+
AuthRegistry,
|
|
151
|
+
Effect.map(Effect.scope, (scope) =>
|
|
152
|
+
makeCachedFunction(
|
|
153
|
+
(options: CollectAuthProvidersOptions) =>
|
|
154
|
+
collectAuthProvidersUncached(options).pipe(Scope.provide(scope)),
|
|
155
|
+
{
|
|
156
|
+
key: ([options]) =>
|
|
157
|
+
JSON.stringify([options.main, Option.getOrNull(options.envFile), options.profile]),
|
|
158
|
+
},
|
|
159
|
+
),
|
|
160
|
+
),
|
|
161
|
+
);
|
|
162
|
+
|
|
163
|
+
export const collectAuthProviders = (options: CollectAuthProvidersOptions) =>
|
|
164
|
+
Effect.flatMap(AuthRegistry, (collect) => collect(options));
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import type * as Context from "effect/Context";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as EngineDrift from "../Drift.ts";
|
|
4
|
+
import { emit } from "../Events.ts";
|
|
5
|
+
import type { Plan } from "../Plan.ts";
|
|
6
|
+
import type { ConfiguredStack } from "../Stack.ts";
|
|
7
|
+
import type { State } from "../State/State.ts";
|
|
8
|
+
import {
|
|
9
|
+
buildWithoutProgram,
|
|
10
|
+
summarize,
|
|
11
|
+
type BuildOptions,
|
|
12
|
+
type PlanSummary,
|
|
13
|
+
} from "./Operations.ts";
|
|
14
|
+
|
|
15
|
+
export interface DriftedResource {
|
|
16
|
+
readonly fqn: string;
|
|
17
|
+
readonly logicalId: string;
|
|
18
|
+
readonly resourceType: string;
|
|
19
|
+
/** `skipped`: not checked (no `read`, or an interrupted deploy); see `reason`. */
|
|
20
|
+
readonly status: "in-sync" | "drifted" | "missing" | "skipped";
|
|
21
|
+
readonly reason?: string;
|
|
22
|
+
readonly actual?: unknown;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** A drift check and the repair it proposes; only {@link execute} runs it. */
|
|
26
|
+
export interface DriftScan {
|
|
27
|
+
readonly stack: { readonly name: string; readonly stage: string };
|
|
28
|
+
readonly resources: ReadonlyArray<DriftedResource>;
|
|
29
|
+
/** What the repair would change. */
|
|
30
|
+
readonly summary: PlanSummary;
|
|
31
|
+
/**
|
|
32
|
+
* The repair as an engine plan, for renderers.
|
|
33
|
+
* @internal its shape may change.
|
|
34
|
+
*/
|
|
35
|
+
readonly native: Plan;
|
|
36
|
+
/**
|
|
37
|
+
* The stack services drift was checked under.
|
|
38
|
+
* @internal {@link execute} runs in them.
|
|
39
|
+
*/
|
|
40
|
+
readonly context: Context.Context<State>;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface ScanOptions extends BuildOptions {
|
|
44
|
+
readonly stack: ConfiguredStack<unknown, unknown>;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** Whether the drift check found anything worth repairing. */
|
|
48
|
+
export const hasDrift = (scan: DriftScan): boolean =>
|
|
49
|
+
scan.resources.some((resource) => resource.status === "drifted" || resource.status === "missing");
|
|
50
|
+
|
|
51
|
+
const status = (action: string): DriftedResource["status"] =>
|
|
52
|
+
action === "unchanged"
|
|
53
|
+
? "in-sync"
|
|
54
|
+
: action === "missing" || action === "skipped"
|
|
55
|
+
? action
|
|
56
|
+
: "drifted";
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Compare deployed state against the real cloud and plan the repair. Drift
|
|
60
|
+
* reads state and providers only, so the stack's program never runs.
|
|
61
|
+
*/
|
|
62
|
+
export const scan = Effect.fn("Alchemist.Drift.scan")(function* (input: ScanOptions) {
|
|
63
|
+
const built = yield* buildWithoutProgram(input.stack, input);
|
|
64
|
+
const identity = {
|
|
65
|
+
name: built.stack.name,
|
|
66
|
+
stage: built.stack.stage,
|
|
67
|
+
};
|
|
68
|
+
// The engine's phase and per-resource observation events flow through the
|
|
69
|
+
// log as events; drift-flavored wording is the renderer's job
|
|
70
|
+
// (renderPlanning's computingLabel).
|
|
71
|
+
const { result, plan } = yield* EngineDrift.plan(identity).pipe(Effect.provide(built.context));
|
|
72
|
+
yield* emit({ type: "plan.phase", phase: "plan-ready" });
|
|
73
|
+
return {
|
|
74
|
+
stack: identity,
|
|
75
|
+
resources: Object.values(result.resources).map((resource) => ({
|
|
76
|
+
fqn: resource.fqn,
|
|
77
|
+
logicalId: resource.logicalId,
|
|
78
|
+
resourceType: resource.resourceType,
|
|
79
|
+
status: status(resource.action),
|
|
80
|
+
reason: resource.reason,
|
|
81
|
+
actual: resource.attr,
|
|
82
|
+
})),
|
|
83
|
+
summary: summarize(plan),
|
|
84
|
+
native: plan,
|
|
85
|
+
context: built.context,
|
|
86
|
+
} satisfies DriftScan;
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Repair the drift `scan` found: reconcile each drifted or missing resource
|
|
91
|
+
* back to its last-deployed desired state. Only those resources are touched;
|
|
92
|
+
* they are re-read first, so one that is back in sync is left alone, and
|
|
93
|
+
* drift that appeared after the scan waits for the next one.
|
|
94
|
+
*/
|
|
95
|
+
export const execute = Effect.fn("Alchemist.Drift.execute")(function* (scan: DriftScan) {
|
|
96
|
+
const only = scan.resources
|
|
97
|
+
.filter((resource) => resource.status === "drifted" || resource.status === "missing")
|
|
98
|
+
.map((resource) => resource.fqn);
|
|
99
|
+
return yield* Effect.provide(
|
|
100
|
+
EngineDrift.repair({ name: scan.stack.name, stage: scan.stack.stage }, { only }),
|
|
101
|
+
scan.context,
|
|
102
|
+
);
|
|
103
|
+
});
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
+
import { pathToFileURL } from "node:url";
|
|
2
|
+
import * as Context from "effect/Context";
|
|
1
3
|
import * as Data from "effect/Data";
|
|
2
4
|
import * as Effect from "effect/Effect";
|
|
3
5
|
import * as FileSystem from "effect/FileSystem";
|
|
4
6
|
import * as Path from "effect/Path";
|
|
7
|
+
import * as Predicate from "effect/Predicate";
|
|
8
|
+
import { emit } from "../Events.ts";
|
|
9
|
+
import type { ConfiguredStack } from "../Stack.ts";
|
|
5
10
|
import { UserFacingError } from "../UserFacingError.ts";
|
|
6
11
|
|
|
7
12
|
export class StackEntrypointError extends Data.TaggedError("StackEntrypointError")<{
|
|
@@ -14,9 +19,8 @@ export const DEFAULT_ENTRYPOINT = "alchemy.run.ts";
|
|
|
14
19
|
|
|
15
20
|
/**
|
|
16
21
|
* The absolute path of the stack entrypoint, or the user-facing error for
|
|
17
|
-
* a missing one. Kept
|
|
18
|
-
*
|
|
19
|
-
* loading the engine that module carries.
|
|
22
|
+
* a missing one. Kept free of the engine so the `alchemy dev` supervisor can
|
|
23
|
+
* check the entry before it starts an exec child.
|
|
20
24
|
*/
|
|
21
25
|
export const resolveStackEntrypoint = Effect.fn(function* (main: string) {
|
|
22
26
|
const fs = yield* FileSystem.FileSystem;
|
|
@@ -29,3 +33,47 @@ export const resolveStackEntrypoint = Effect.fn(function* (main: string) {
|
|
|
29
33
|
}
|
|
30
34
|
return absolutePath;
|
|
31
35
|
});
|
|
36
|
+
|
|
37
|
+
export interface StackModuleLoader {
|
|
38
|
+
readonly import: (url: string) => Promise<{ readonly default?: unknown }>;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export const StackModuleLoader = Context.Reference<StackModuleLoader>(
|
|
42
|
+
"Alchemy/Alchemist/StackModuleLoader",
|
|
43
|
+
{ defaultValue: () => ({ import: (url) => import(url) }) },
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Import a stack entrypoint and return its default export, the stack value
|
|
48
|
+
* every stack operation takes.
|
|
49
|
+
*/
|
|
50
|
+
export const importStack = Effect.fn("Alchemist.importStack")(function* (main: string) {
|
|
51
|
+
yield* emit({ type: "plan.phase", phase: "importing-module" });
|
|
52
|
+
const absolutePath = yield* resolveStackEntrypoint(main);
|
|
53
|
+
const loader = yield* StackModuleLoader;
|
|
54
|
+
const module = yield* Effect.promise(() => loader.import(pathToFileURL(absolutePath).href));
|
|
55
|
+
if (
|
|
56
|
+
!Effect.isEffect(module.default) ||
|
|
57
|
+
!Predicate.hasProperty(module.default, "stackName") ||
|
|
58
|
+
typeof module.default.stackName !== "string"
|
|
59
|
+
) {
|
|
60
|
+
return yield* new StackEntrypointError({
|
|
61
|
+
message: `Stack entrypoint '${main}' must export a default stack definition (export default Alchemy.Stack({...})).`,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
// oxlint-disable-next-line effecttsgo/unsafe-effect-type-assertion -- default export shape validated at runtime above
|
|
65
|
+
return module.default as ConfiguredStack<unknown, unknown>;
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Which project and credentials an operation acts under. The optional fields
|
|
70
|
+
* fall back to the same defaults the CLI uses.
|
|
71
|
+
*/
|
|
72
|
+
export interface Target {
|
|
73
|
+
/** Stack entrypoint. @default "alchemy.run.ts" */
|
|
74
|
+
readonly entrypoint?: string;
|
|
75
|
+
/** Profile whose credentials the run uses. Falls back to the active profile. */
|
|
76
|
+
readonly profile?: string;
|
|
77
|
+
/** `.env` file layered under the process environment. */
|
|
78
|
+
readonly envFile?: string;
|
|
79
|
+
}
|
package/src/Alchemist/Errors.ts
CHANGED
|
@@ -13,7 +13,7 @@ export interface Diagnostic {
|
|
|
13
13
|
// `InvalidInput` — and these errors travel in unions with cloud errors,
|
|
14
14
|
// where `catchTag` discriminates by tag alone.
|
|
15
15
|
|
|
16
|
-
/** The caller sent something the
|
|
16
|
+
/** The caller sent something the operation cannot act on. */
|
|
17
17
|
export class AlchemistInvalidInput extends Data.TaggedError("AlchemistInvalidInput")<{
|
|
18
18
|
readonly message: string;
|
|
19
19
|
readonly field?: string;
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import * as Context from "effect/Context";
|
|
2
1
|
import * as Effect from "effect/Effect";
|
|
3
|
-
import * as Layer from "effect/Layer";
|
|
4
2
|
import * as Stream from "effect/Stream";
|
|
5
|
-
import { findProviderByType } from "
|
|
6
|
-
import { stampedMode } from "
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
3
|
+
import { findProviderByType } from "../Provider.ts";
|
|
4
|
+
import { stampedMode } from "../ProviderMode.ts";
|
|
5
|
+
import type { ConfiguredStack } from "../Stack.ts";
|
|
6
|
+
import * as State from "../State/index.ts";
|
|
7
|
+
import { AlchemistInvalidInput } from "./Errors.ts";
|
|
8
|
+
import { buildStack, type BuildOptions } from "./Operations.ts";
|
|
10
9
|
|
|
11
10
|
export interface ResourceIdentity {
|
|
12
11
|
readonly fqn: string;
|
|
@@ -25,32 +24,29 @@ export interface LogEntry {
|
|
|
25
24
|
readonly message: string;
|
|
26
25
|
}
|
|
27
26
|
|
|
28
|
-
export interface
|
|
29
|
-
readonly
|
|
27
|
+
export interface LogOptions extends BuildOptions {
|
|
28
|
+
readonly stack: ConfiguredStack<unknown, unknown>;
|
|
30
29
|
/** Logical IDs to include. Empty or omitted means every resource. */
|
|
31
30
|
readonly resources?: ReadonlyArray<string>;
|
|
32
31
|
}
|
|
33
32
|
|
|
34
|
-
export interface
|
|
33
|
+
export interface QueryOptions extends LogOptions {
|
|
35
34
|
readonly limit?: number;
|
|
36
35
|
readonly since?: Date;
|
|
37
36
|
}
|
|
38
37
|
|
|
39
38
|
/**
|
|
40
|
-
*
|
|
39
|
+
* Build the stack and pair every deployed resource with the provider that
|
|
41
40
|
* can speak for it. `entries` and `tail` differ only in which provider hook
|
|
42
|
-
* they then call, so the selection lives here once.
|
|
41
|
+
* they then call, so the selection lives here once. The build lives in the
|
|
42
|
+
* ambient `Scope`; each public function closes its own.
|
|
43
43
|
*/
|
|
44
|
-
const select = Effect.fn(function* (input:
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
// store wins where it configures one: a project may only wire a remote
|
|
48
|
-
// store at deploy time, and `alchemy logs` still has to resolve what was
|
|
49
|
-
// deployed.
|
|
50
|
-
const context = Context.merge(yield* Layer.build(State.localState()), session.context);
|
|
44
|
+
const select = Effect.fn(function* (input: LogOptions) {
|
|
45
|
+
const built = yield* buildStack(input.stack, input);
|
|
46
|
+
const context = built.context;
|
|
51
47
|
const selected = new Set(input.resources ?? []);
|
|
52
48
|
const available = [
|
|
53
|
-
...new Set(Object.values(
|
|
49
|
+
...new Set(Object.values(built.stack.resources).map((resource) => resource.LogicalId)),
|
|
54
50
|
].sort();
|
|
55
51
|
const unknown = [...selected].find((name) => !available.includes(name));
|
|
56
52
|
if (unknown !== undefined) {
|
|
@@ -61,15 +57,15 @@ const select = Effect.fn(function* (input: LogInput) {
|
|
|
61
57
|
}
|
|
62
58
|
const rows = yield* Effect.provide(
|
|
63
59
|
Effect.gen(function* () {
|
|
64
|
-
const state = yield*
|
|
65
|
-
return yield* Effect.forEach(Object.entries(
|
|
60
|
+
const state = yield* Effect.flatten(State.State);
|
|
61
|
+
return yield* Effect.forEach(Object.entries(built.stack.resources), ([fqn, resource]) =>
|
|
66
62
|
Effect.gen(function* () {
|
|
67
63
|
if (selected.size > 0 && !selected.has(resource.LogicalId)) {
|
|
68
64
|
return [];
|
|
69
65
|
}
|
|
70
66
|
const stored = yield* state.get({
|
|
71
|
-
stack:
|
|
72
|
-
stage:
|
|
67
|
+
stack: built.stack.name,
|
|
68
|
+
stage: built.stack.stage,
|
|
73
69
|
fqn,
|
|
74
70
|
});
|
|
75
71
|
if (!State.isResourceState(stored) || stored.attr === undefined) {
|
|
@@ -101,17 +97,19 @@ const select = Effect.fn(function* (input: LogInput) {
|
|
|
101
97
|
});
|
|
102
98
|
|
|
103
99
|
/** Every deployed resource, with the log capabilities its provider offers. */
|
|
104
|
-
export const resources = Effect.fn("Alchemist.
|
|
105
|
-
|
|
100
|
+
export const resources = Effect.fn("Alchemist.Logs.resources")(function* (
|
|
101
|
+
options: BuildOptions & { readonly stack: ConfiguredStack<unknown, unknown> },
|
|
102
|
+
) {
|
|
103
|
+
const { rows } = yield* select(options);
|
|
106
104
|
return rows.map(({ resource, provider }): LogResource => ({
|
|
107
105
|
...resource,
|
|
108
106
|
supportsQuery: provider.logs !== undefined,
|
|
109
107
|
supportsTail: provider.tail !== undefined,
|
|
110
108
|
}));
|
|
111
|
-
});
|
|
109
|
+
}, Effect.scoped);
|
|
112
110
|
|
|
113
111
|
/** Query past log entries across the selected resources, oldest first. */
|
|
114
|
-
export const entries = Effect.fn("Alchemist.
|
|
112
|
+
export const entries = Effect.fn("Alchemist.Logs.entries")(function* (input: QueryOptions) {
|
|
115
113
|
const { context, rows } = yield* select(input);
|
|
116
114
|
const entries = yield* Effect.provide(
|
|
117
115
|
Effect.forEach(rows, ({ resource, provider, request }) =>
|
|
@@ -138,10 +136,10 @@ export const entries = Effect.fn("Alchemist.logs.entries")(function* (input: Que
|
|
|
138
136
|
context,
|
|
139
137
|
);
|
|
140
138
|
return entries.flat().sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
|
|
141
|
-
});
|
|
139
|
+
}, Effect.scoped);
|
|
142
140
|
|
|
143
141
|
/** Live-stream log entries from every selected resource that supports it. */
|
|
144
|
-
export const tail = (input:
|
|
142
|
+
export const tail = (input: LogOptions) =>
|
|
145
143
|
Stream.unwrap(
|
|
146
144
|
Effect.gen(function* () {
|
|
147
145
|
const { context, rows } = yield* select(input);
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type * as Context from "effect/Context";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Nuke from "../Nuke.ts";
|
|
4
|
+
import type { ProviderMode } from "../ProviderMode.ts";
|
|
5
|
+
import type { ConfiguredStack } from "../Stack.ts";
|
|
6
|
+
import { buildProviders, type ConfigOptions } from "./Operations.ts";
|
|
7
|
+
|
|
8
|
+
export interface ScanOptions extends ConfigOptions {
|
|
9
|
+
/** The stack whose providers are scanned; nothing reads its state. */
|
|
10
|
+
readonly stack: ConfiguredStack<unknown, unknown>;
|
|
11
|
+
/** Scan the emulators `alchemy dev` runs instead of the real cloud. */
|
|
12
|
+
readonly dev?: boolean;
|
|
13
|
+
/** Provider-id globs to include. Omitted means every provider. */
|
|
14
|
+
readonly include?: ReadonlyArray<string>;
|
|
15
|
+
/** Provider-id globs to exclude. Applied after `include`. */
|
|
16
|
+
readonly exclude?: ReadonlyArray<string>;
|
|
17
|
+
/** Providers scanned in parallel. @default 16 */
|
|
18
|
+
readonly concurrency?: number | "unbounded";
|
|
19
|
+
/** Timeout for each provider's `list`. @default 120 */
|
|
20
|
+
readonly providerTimeoutSeconds?: number;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** One discovered cloud object, bound to the provider that can delete it. */
|
|
24
|
+
export type Resource = Nuke.Target;
|
|
25
|
+
|
|
26
|
+
/** Everything a stack's providers can see; only {@link execute} deletes it. */
|
|
27
|
+
export interface NukeScan {
|
|
28
|
+
/** `local` when the scan ran with `dev: true`, otherwise `live`. */
|
|
29
|
+
readonly mode: ProviderMode;
|
|
30
|
+
readonly resources: ReadonlyArray<Resource>;
|
|
31
|
+
/** Providers whose `list` failed; they contribute no resources. */
|
|
32
|
+
readonly failures: ReadonlyArray<Nuke.ProviderFailure>;
|
|
33
|
+
/**
|
|
34
|
+
* The built provider context; lives in the caller's `Scope`.
|
|
35
|
+
* @internal {@link execute} deletes under it.
|
|
36
|
+
*/
|
|
37
|
+
readonly context: Context.Context<never>;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* List everything the stack's registered providers can see in the account.
|
|
42
|
+
* The stack is imported only for its providers: nothing here reads state or
|
|
43
|
+
* is scoped to a stage.
|
|
44
|
+
*/
|
|
45
|
+
export const scan = Effect.fn("Alchemist.Nuke.scan")(function* (options: ScanOptions) {
|
|
46
|
+
const mode: ProviderMode = options.dev ? "local" : "live";
|
|
47
|
+
const context = yield* buildProviders(options.stack, options);
|
|
48
|
+
const { resources, failures } = yield* Nuke.list({
|
|
49
|
+
context,
|
|
50
|
+
mode,
|
|
51
|
+
include: options.include,
|
|
52
|
+
exclude: options.exclude,
|
|
53
|
+
concurrency: options.concurrency,
|
|
54
|
+
timeoutSeconds: options.providerTimeoutSeconds,
|
|
55
|
+
});
|
|
56
|
+
return { mode, resources, failures, context } satisfies NukeScan;
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
export interface ExecuteOptions {
|
|
60
|
+
/** The scan whose resources are deleted. */
|
|
61
|
+
readonly scan: NukeScan;
|
|
62
|
+
/** The subset of `scan.resources` to delete. @default every planned resource */
|
|
63
|
+
readonly resources?: ReadonlyArray<Resource>;
|
|
64
|
+
/**
|
|
65
|
+
* `coordinated` deletes in passes until one makes no progress;
|
|
66
|
+
* `independent` retries each resource on its own.
|
|
67
|
+
* @default { type: "coordinated" }
|
|
68
|
+
*/
|
|
69
|
+
readonly strategy?: Nuke.Strategy;
|
|
70
|
+
/** Providers deleted in parallel. @default 16 */
|
|
71
|
+
readonly concurrency?: number | "unbounded";
|
|
72
|
+
/** Timeout for each `delete`. @default 120 */
|
|
73
|
+
readonly providerTimeoutSeconds?: number;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export type Result = Nuke.Result;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Permanently delete scanned resources. Progress is emitted through
|
|
80
|
+
* events: `apply.resource.status` and `nuke.*` events.
|
|
81
|
+
*/
|
|
82
|
+
export const execute = Effect.fn("Alchemist.Nuke.execute")(function* (options: ExecuteOptions) {
|
|
83
|
+
return yield* Nuke.destroy({
|
|
84
|
+
targets: options.resources ?? options.scan.resources,
|
|
85
|
+
context: options.scan.context,
|
|
86
|
+
strategy: options.strategy ?? { type: "coordinated" },
|
|
87
|
+
concurrency: options.concurrency,
|
|
88
|
+
timeoutSeconds: options.providerTimeoutSeconds,
|
|
89
|
+
});
|
|
90
|
+
});
|