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
package/src/Contributions.ts
CHANGED
|
@@ -15,7 +15,6 @@ import type { ArtifactStore } from "./Artifacts.ts";
|
|
|
15
15
|
import type { AuthProviders } from "./Auth/AuthProvider.ts";
|
|
16
16
|
import type { CredentialsStore } from "./Auth/Credentials.ts";
|
|
17
17
|
import type { ProfileStore } from "./Auth/Profile.ts";
|
|
18
|
-
import type { CliKit } from "./Cli/CliKit/CliKit.ts";
|
|
19
18
|
import type { Interaction } from "./Interaction.ts";
|
|
20
19
|
import type { State } from "./State/State.ts";
|
|
21
20
|
import { UserFacingError } from "./UserFacingError.ts";
|
|
@@ -87,8 +86,8 @@ export type HostServices =
|
|
|
87
86
|
/** What auth layers and state stores run under: the host's services and the auth registry. */
|
|
88
87
|
export type ContributionServices = HostServices | AuthProviders;
|
|
89
88
|
|
|
90
|
-
/** What a CLI command runs under: the host's services
|
|
91
|
-
export type CliServices = HostServices
|
|
89
|
+
/** What a CLI command runs under: the host's services, `Interaction` included. */
|
|
90
|
+
export type CliServices = HostServices;
|
|
92
91
|
|
|
93
92
|
/** A provider's own failure: any tagged error with a message for the user. */
|
|
94
93
|
export type ContributionFailure = { readonly _tag: string; readonly message: string };
|
|
@@ -223,7 +222,7 @@ const Manifest = Schema.Struct({
|
|
|
223
222
|
dependencies: Schema.optional(Schema.Record(Schema.String, Schema.String)),
|
|
224
223
|
devDependencies: Schema.optional(Schema.Record(Schema.String, Schema.String)),
|
|
225
224
|
alchemy: Schema.optional(
|
|
226
|
-
Schema.Struct({ contributes: Schema.
|
|
225
|
+
Schema.Struct({ contributes: Schema.String.pipe(Schema.Array, Schema.optional) }),
|
|
227
226
|
),
|
|
228
227
|
});
|
|
229
228
|
|
|
@@ -282,6 +281,31 @@ const candidatePackages = Effect.fn(function* (dir: string) {
|
|
|
282
281
|
}
|
|
283
282
|
});
|
|
284
283
|
|
|
284
|
+
/** The root `package.json` name of alchemy's own monorepo. */
|
|
285
|
+
const MONOREPO_NAME = "@alchemy.run/monorepo";
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* The `package.json` of every sibling package when alchemy runs from its own
|
|
289
|
+
* monorepo checkout (`packages/alchemy` under a root named
|
|
290
|
+
* {@link MONOREPO_NAME}). Empty for every installed copy of alchemy.
|
|
291
|
+
*/
|
|
292
|
+
const monorepoManifests = Effect.gen(function* () {
|
|
293
|
+
const fs = yield* FileSystem.FileSystem;
|
|
294
|
+
const path = yield* Path.Path;
|
|
295
|
+
const own = path.dirname(yield* path.fromFileUrl(new URL("../package.json", import.meta.url)));
|
|
296
|
+
const packages = path.dirname(own);
|
|
297
|
+
const root = yield* readManifest(path.join(path.dirname(packages), "package.json")).pipe(
|
|
298
|
+
Effect.orElseSucceed(() => undefined),
|
|
299
|
+
);
|
|
300
|
+
if (root?.name !== MONOREPO_NAME) return [];
|
|
301
|
+
const files: string[] = [];
|
|
302
|
+
for (const entry of yield* fs.readDirectory(packages)) {
|
|
303
|
+
const file = path.join(packages, entry, "package.json");
|
|
304
|
+
if (path.join(packages, entry) !== own && (yield* fs.exists(file))) files.push(file);
|
|
305
|
+
}
|
|
306
|
+
return files.sort();
|
|
307
|
+
});
|
|
308
|
+
|
|
285
309
|
/** The npm scope of alchemy's own provider packages. */
|
|
286
310
|
const PACKAGE_SCOPE = "@alchemy.run";
|
|
287
311
|
|
|
@@ -408,12 +432,10 @@ const discover = Effect.fn("Contributions.discover")(function* (cwd: string) {
|
|
|
408
432
|
// The project's packages that declare providers, before alchemy's own: the
|
|
409
433
|
// first provider with a name wins, so a provider that moved into its own
|
|
410
434
|
// package replaces the copy still inside alchemy.
|
|
411
|
-
const
|
|
412
|
-
for (const name of dependencies) {
|
|
413
|
-
const file = yield* findDependencyManifest(cwd, name);
|
|
414
|
-
if (file === undefined) continue;
|
|
435
|
+
const declare = Effect.fn(function* (file: string, fallback = false) {
|
|
415
436
|
const manifest = yield* readManifest(file);
|
|
416
437
|
for (const specifier of manifest?.alchemy?.contributes ?? []) {
|
|
438
|
+
if (fallback && declared.has(specifier)) continue;
|
|
417
439
|
declared.set(specifier, {
|
|
418
440
|
specifier,
|
|
419
441
|
manifest: {
|
|
@@ -425,6 +447,18 @@ const discover = Effect.fn("Contributions.discover")(function* (cwd: string) {
|
|
|
425
447
|
},
|
|
426
448
|
});
|
|
427
449
|
}
|
|
450
|
+
});
|
|
451
|
+
const dependencies = [...(yield* candidatePackages(cwd))].filter((name) => name !== own?.name);
|
|
452
|
+
for (const name of dependencies) {
|
|
453
|
+
const file = yield* findDependencyManifest(cwd, name);
|
|
454
|
+
if (file !== undefined) yield* declare(file);
|
|
455
|
+
}
|
|
456
|
+
// Developing alchemy itself: every package in the monorepo, so the CLI sees
|
|
457
|
+
// all providers without the root installing them. Installed copies win.
|
|
458
|
+
for (const file of yield* monorepoManifests) {
|
|
459
|
+
yield* declare(file, true).pipe(
|
|
460
|
+
Effect.catch((error) => Effect.logDebug(`Skipping ${file}: ${error.message}`)),
|
|
461
|
+
);
|
|
428
462
|
}
|
|
429
463
|
// alchemy's own: the providers that still live in this package.
|
|
430
464
|
for (const specifier of own?.alchemy?.contributes ?? []) declared.set(specifier, { specifier });
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pluggable DNS for custom domains.
|
|
3
|
+
*
|
|
4
|
+
* A custom domain has two independent halves: the platform that SERVES the
|
|
5
|
+
* hostname (CloudFront, an ALB, API Gateway, a Worker, a Fly App, …) and the
|
|
6
|
+
* DNS host that PUBLISHES its records (Route 53, Cloudflare, Hetzner DNS, …).
|
|
7
|
+
* `domain.dns` names the DNS host.
|
|
8
|
+
*
|
|
9
|
+
* The prop value is a {@link DnsConfig}: plain, serializable data
|
|
10
|
+
* (`{ type: "Cloudflare.DNS", zone?, options? }`) that is safe in any
|
|
11
|
+
* Resource or Platform prop, in state, and across the `alchemy dev` sidecar.
|
|
12
|
+
* Each DNS host contributes:
|
|
13
|
+
*
|
|
14
|
+
* - a data constructor (`Cloudflare.DNS.Adapter()`,
|
|
15
|
+
* `AWS.Route53.Adapter()`, `Hetzner.DNS.Adapter()`), and
|
|
16
|
+
* - a {@link DnsAdapter} — functions that declare its record resources —
|
|
17
|
+
* registered with {@link adapterLayer} from its own `providers()` layer.
|
|
18
|
+
*
|
|
19
|
+
* A composite (or a Platform's `transformProps` hook) resolves the adapter
|
|
20
|
+
* with {@link resolve} while the stack program is being built, and the
|
|
21
|
+
* adapter DECLARES ordinary record resources of its own cloud. No
|
|
22
|
+
* reconciler ever calls an adapter, so destroy and orphan cleanup work from
|
|
23
|
+
* state alone, and the platform packages never import each other.
|
|
24
|
+
*/
|
|
25
|
+
import * as Context from "effect/Context";
|
|
26
|
+
import * as Data from "effect/Data";
|
|
27
|
+
import * as Effect from "effect/Effect";
|
|
28
|
+
import * as Layer from "effect/Layer";
|
|
29
|
+
import * as Option from "effect/Option";
|
|
30
|
+
import type { Input } from "../Input.ts";
|
|
31
|
+
import * as Output from "../Output.ts";
|
|
32
|
+
import type { Resource, ResourceLike } from "../Resource.ts";
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Which DNS host publishes a custom domain's records. Returned by a DNS
|
|
36
|
+
* host's adapter constructor, e.g. `Cloudflare.DNS.Adapter()`.
|
|
37
|
+
*/
|
|
38
|
+
export interface DnsConfig<Type extends string = string> {
|
|
39
|
+
/**
|
|
40
|
+
* The adapter implementation to resolve (e.g. `"Cloudflare.DNS"`,
|
|
41
|
+
* `"AWS.Route53"`, `"Hetzner.DNS"`). Registered by the DNS host's
|
|
42
|
+
* `providers()` layer.
|
|
43
|
+
*/
|
|
44
|
+
readonly type: Type;
|
|
45
|
+
/**
|
|
46
|
+
* The zone that owns the records, interpreted by the DNS host: a
|
|
47
|
+
* Cloudflare zone id or name, a Route 53 hosted zone id, a Hetzner zone
|
|
48
|
+
* id or name. Inferred from each hostname when omitted.
|
|
49
|
+
*/
|
|
50
|
+
readonly zone?: Input<string> | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* Host-specific options, e.g. `{ proxied: true }` for Cloudflare.
|
|
53
|
+
*/
|
|
54
|
+
readonly options?: { readonly [key: string]: unknown } | undefined;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** Record types a DNS adapter publishes. */
|
|
58
|
+
export type DnsRecordType = "A" | "AAAA" | "CNAME" | "TXT";
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* One record to publish — typically computed from another resource's
|
|
62
|
+
* outputs (ACM validation CNAMEs, a platform's ownership TXT, …).
|
|
63
|
+
*/
|
|
64
|
+
export interface DnsRecord {
|
|
65
|
+
/** Fully qualified record name (a trailing dot is ignored). */
|
|
66
|
+
name: string;
|
|
67
|
+
/** Record type. */
|
|
68
|
+
type: DnsRecordType;
|
|
69
|
+
/** Record value (a trailing dot on hostnames is ignored). */
|
|
70
|
+
value: string;
|
|
71
|
+
/**
|
|
72
|
+
* TTL in seconds. Hosts with an "automatic" setting use it when omitted.
|
|
73
|
+
*/
|
|
74
|
+
ttl?: number;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* A hostname target: a CNAME to `hostname`, or — on Route 53 — an alias
|
|
79
|
+
* record when `route53Alias` is set.
|
|
80
|
+
*/
|
|
81
|
+
export interface DnsHostnameTarget {
|
|
82
|
+
/** Hostname to point at, e.g. `d123.cloudfront.net`. */
|
|
83
|
+
hostname: Input<string>;
|
|
84
|
+
/**
|
|
85
|
+
* Route 53 alias details of an AWS target (CloudFront, ELB, API
|
|
86
|
+
* Gateway). Used by the Route 53 adapter to write an `A` (+ `AAAA`)
|
|
87
|
+
* alias record; other hosts write a `CNAME` to {@link hostname}.
|
|
88
|
+
*/
|
|
89
|
+
route53Alias?: {
|
|
90
|
+
/** Route 53 hosted zone id of the AWS target. */
|
|
91
|
+
hostedZoneId: Input<string>;
|
|
92
|
+
/** Route 53 alias `EvaluateTargetHealth`. */
|
|
93
|
+
evaluateTargetHealth?: boolean;
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** An address target: `A` / `AAAA` records. */
|
|
98
|
+
export interface DnsAddressTarget {
|
|
99
|
+
/** IPv4 addresses (`A` records). */
|
|
100
|
+
ipv4?: Input<string[]>;
|
|
101
|
+
/** IPv6 addresses (`AAAA` records). */
|
|
102
|
+
ipv6?: Input<string[]>;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Where an alias hostname points. The target's KIND (hostname vs.
|
|
107
|
+
* addresses) must be known while the program is built; its values may be
|
|
108
|
+
* Outputs.
|
|
109
|
+
*/
|
|
110
|
+
export type DnsAliasTarget = DnsHostnameTarget | DnsAddressTarget;
|
|
111
|
+
|
|
112
|
+
/** Whether a target is a hostname (CNAME / Route 53 alias) target. */
|
|
113
|
+
export const isHostnameTarget = (target: DnsAliasTarget): target is DnsHostnameTarget =>
|
|
114
|
+
"hostname" in target && target.hostname !== undefined;
|
|
115
|
+
|
|
116
|
+
/** Binding contract of an {@link DnsAdapter.aliasSet} record set. */
|
|
117
|
+
export type DnsAliasSetBinding = {
|
|
118
|
+
/** Additional hostnames pointed at the set's target. */
|
|
119
|
+
names?: string[];
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* A record set other composites bind hostnames onto via `{ names }` (see
|
|
124
|
+
* `AWS.Website.Router`'s `bindTargets.records`).
|
|
125
|
+
*/
|
|
126
|
+
export type DnsAliasSet = ResourceLike<string, any, any, DnsAliasSetBinding, any> &
|
|
127
|
+
Pick<Resource<string, any, any, DnsAliasSetBinding, any>, "bind">;
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* A DNS host cannot publish the requested records, e.g. a `CNAME` at a zone
|
|
131
|
+
* apex on a host without CNAME flattening. Raised (as a defect, like any
|
|
132
|
+
* other invalid configuration) while the stack program is being built,
|
|
133
|
+
* before anything is deployed.
|
|
134
|
+
*/
|
|
135
|
+
export class DnsAdapterError extends Data.TaggedError("DnsAdapterError")<{
|
|
136
|
+
readonly message: string;
|
|
137
|
+
}> {}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* `domain.dns` names a DNS host whose adapter is not registered: the host's
|
|
141
|
+
* `providers()` layer is missing from the stack. Raised as a defect while
|
|
142
|
+
* the stack program is being built, like a missing resource provider.
|
|
143
|
+
*/
|
|
144
|
+
export class DnsAdapterNotRegistered extends Data.TaggedError("DnsAdapterNotRegistered")<{
|
|
145
|
+
readonly type: string;
|
|
146
|
+
}> {
|
|
147
|
+
override get message() {
|
|
148
|
+
const provider = this.type.split(".")[0];
|
|
149
|
+
return (
|
|
150
|
+
`No DNS adapter is registered for "${this.type}". ` +
|
|
151
|
+
`Add ${provider}.providers() to the stack's providers layer.`
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Where an adapter method writes: the zone and host-specific options from
|
|
158
|
+
* the user's {@link DnsConfig}. {@link resolve} fills these in, so callers
|
|
159
|
+
* never pass them.
|
|
160
|
+
*/
|
|
161
|
+
export interface DnsZone {
|
|
162
|
+
/** Zone id or name (Route 53: hosted zone id). Inferred per hostname when omitted. */
|
|
163
|
+
zone?: Input<string> | undefined;
|
|
164
|
+
/** Host-specific options from the adapter constructor, e.g. `{ proxied: true }`. */
|
|
165
|
+
options?: { readonly [key: string]: unknown };
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* A DNS adapter: functions that declare a DNS host's record resources. They
|
|
170
|
+
* perform no I/O — composites call them while the stack program is built —
|
|
171
|
+
* so they behave the same under `alchemy deploy`, `alchemy dev`, and tests.
|
|
172
|
+
*
|
|
173
|
+
* `R` is the host's provider requirement (e.g. `Cloudflare.Providers`):
|
|
174
|
+
* return the resource constructors' Effects as they are.
|
|
175
|
+
*/
|
|
176
|
+
export interface DnsAdapter<R = never> {
|
|
177
|
+
/**
|
|
178
|
+
* Point one hostname at `target`. `ipv6` also publishes IPv6 for a
|
|
179
|
+
* hostname target where the host needs a separate record (Route 53
|
|
180
|
+
* `AAAA` alias); a CNAME already covers both.
|
|
181
|
+
*/
|
|
182
|
+
alias(
|
|
183
|
+
id: string,
|
|
184
|
+
args: DnsZone & { name: string; target: DnsAliasTarget; ipv6?: boolean },
|
|
185
|
+
): Effect.Effect<unknown, never, R>;
|
|
186
|
+
/**
|
|
187
|
+
* A (possibly empty) set of hostnames pointed at a hostname target that
|
|
188
|
+
* other composites extend by binding `{ names }` onto it (used by
|
|
189
|
+
* `AWS.Website.Router`, whose attached sites add their hostnames).
|
|
190
|
+
*/
|
|
191
|
+
aliasSet(
|
|
192
|
+
id: string,
|
|
193
|
+
args: DnsZone & { names?: string[]; target: DnsHostnameTarget },
|
|
194
|
+
): Effect.Effect<DnsAliasSet, never, R>;
|
|
195
|
+
/**
|
|
196
|
+
* Publish explicit records whose values come from another resource
|
|
197
|
+
* (certificate validation, ownership verification). Records are always
|
|
198
|
+
* DNS-only (never proxied). `retain` keeps them when the resource is
|
|
199
|
+
* destroyed — used for ACM validation CNAMEs, which ACM reuses across
|
|
200
|
+
* every certificate for a name.
|
|
201
|
+
*/
|
|
202
|
+
records(
|
|
203
|
+
id: string,
|
|
204
|
+
args: DnsZone & { records: Input<DnsRecord[]>; retain?: boolean },
|
|
205
|
+
): Effect.Effect<unknown, never, R>;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
const adapterService = (type: string) =>
|
|
209
|
+
Context.Service<DnsAdapter<any>>(`alchemy/DNS/Adapter/${type}`);
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Register a DNS adapter under the {@link DnsConfig.type} its constructor
|
|
213
|
+
* returns. Merge the layer into the DNS host's `providers()` layer, which
|
|
214
|
+
* also registers the providers of the resources the adapter declares.
|
|
215
|
+
*/
|
|
216
|
+
export const adapterLayer = <R>(
|
|
217
|
+
type: string,
|
|
218
|
+
adapter: DnsAdapter<R>,
|
|
219
|
+
): Layer.Layer<DnsAdapter<any>> => Layer.succeed(adapterService(type), adapter);
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Fill in `zone` / `options` from a {@link DnsConfig} on every call.
|
|
223
|
+
*/
|
|
224
|
+
export const bind = <R>(adapter: DnsAdapter<R>, config: DnsConfig): DnsAdapter<R> => {
|
|
225
|
+
const zone: DnsZone = {
|
|
226
|
+
...(config.zone === undefined ? {} : { zone: config.zone }),
|
|
227
|
+
...(config.options === undefined ? {} : { options: config.options }),
|
|
228
|
+
};
|
|
229
|
+
return {
|
|
230
|
+
alias: (id, args) => adapter.alias(id, { ...zone, ...args }),
|
|
231
|
+
aliasSet: (id, args) => adapter.aliasSet(id, { ...zone, ...args }),
|
|
232
|
+
records: (id, args) => adapter.records(id, { ...zone, ...args }),
|
|
233
|
+
};
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* The adapter registered for `config.type`, with `config`'s zone and
|
|
238
|
+
* options filled in. Dies with {@link DnsAdapterNotRegistered} when the DNS
|
|
239
|
+
* host's `providers()` layer is not part of the stack.
|
|
240
|
+
*
|
|
241
|
+
* `domain.dns` picks the host by a runtime string, so the host's provider
|
|
242
|
+
* requirement can't be named statically here and the returned adapter is
|
|
243
|
+
* typed without it. That is safe: the requirement is type-level only
|
|
244
|
+
* (declaring a resource never reads its provider), and the adapter is only
|
|
245
|
+
* registered by the host's `providers()` layer, which also registers the
|
|
246
|
+
* providers of the resources it declares.
|
|
247
|
+
*/
|
|
248
|
+
export const resolve = (config: DnsConfig): Effect.Effect<DnsAdapter> =>
|
|
249
|
+
Effect.serviceOption(adapterService(config.type)).pipe(
|
|
250
|
+
Effect.flatMap(
|
|
251
|
+
Option.match({
|
|
252
|
+
onNone: () => Effect.die(new DnsAdapterNotRegistered({ type: config.type })),
|
|
253
|
+
onSome: (adapter) => Effect.succeed(bind(adapter as DnsAdapter, config)),
|
|
254
|
+
}),
|
|
255
|
+
),
|
|
256
|
+
);
|
|
257
|
+
|
|
258
|
+
/** Normalize a DNS name: lowercase, no trailing dot. */
|
|
259
|
+
export const normalizeDnsName = (name: string) => name.replace(/\.$/, "").toLowerCase();
|
|
260
|
+
|
|
261
|
+
/** `A` / `AAAA` records for an address target (values may be Outputs). */
|
|
262
|
+
export const addressRecords = (
|
|
263
|
+
name: string,
|
|
264
|
+
ipv4: Input<string[]> | undefined,
|
|
265
|
+
ipv6: Input<string[]> | undefined,
|
|
266
|
+
): Input<DnsRecord[]> => {
|
|
267
|
+
const toRecords = (v4: string[], v6: string[]): DnsRecord[] => [
|
|
268
|
+
...v4.map((value) => ({ name, type: "A" as const, value })),
|
|
269
|
+
...v6.map((value) => ({ name, type: "AAAA" as const, value })),
|
|
270
|
+
];
|
|
271
|
+
if (!Output.isOutput(ipv4) && !Output.isOutput(ipv6)) {
|
|
272
|
+
return toRecords((ipv4 ?? []) as string[], (ipv6 ?? []) as string[]);
|
|
273
|
+
}
|
|
274
|
+
const lift = (value: Input<string[]> | undefined): any =>
|
|
275
|
+
Output.isOutput(value) ? value : Output.literal((value ?? []) as string[]);
|
|
276
|
+
return Output.map(Output.all(lift(ipv4) as any, lift(ipv6) as any), ([v4, v6]: any) =>
|
|
277
|
+
toRecords(v4 as string[], v6 as string[]),
|
|
278
|
+
) as unknown as Input<DnsRecord[]>;
|
|
279
|
+
};
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* The records that point `name` at `target`: a `CNAME` to a hostname
|
|
283
|
+
* target, or `A` / `AAAA` records for an address target. A convenience for
|
|
284
|
+
* adapters whose `alias` publishes through a list-of-records resource.
|
|
285
|
+
*/
|
|
286
|
+
export const aliasRecords = (name: string, target: DnsAliasTarget): Input<DnsRecord[]> =>
|
|
287
|
+
isHostnameTarget(target)
|
|
288
|
+
? [{ name, type: "CNAME", value: target.hostname as string }]
|
|
289
|
+
: addressRecords(name, target.ipv4, target.ipv6);
|
package/src/DNS/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./Adapter.ts";
|
package/src/Deploy.ts
CHANGED
|
@@ -3,10 +3,12 @@ import * as Effect from "effect/Effect";
|
|
|
3
3
|
import type * as Scope from "effect/Scope";
|
|
4
4
|
import { AlchemyContext } from "./AlchemyContext.ts";
|
|
5
5
|
import * as Apply from "./Apply.ts";
|
|
6
|
+
import { evalStack } from "./EvalStack.ts";
|
|
6
7
|
import type { Input } from "./Input.ts";
|
|
7
8
|
import * as Plan from "./Plan.ts";
|
|
9
|
+
import { renderApply } from "./Report.ts";
|
|
8
10
|
import type { ResourceSelection, SelectionOutput } from "./ResourceSelection.ts";
|
|
9
|
-
import {
|
|
11
|
+
import type { CompiledStack, StackEffect } from "./Stack.ts";
|
|
10
12
|
import { Stage } from "./Stage.ts";
|
|
11
13
|
|
|
12
14
|
export interface DeployOptions<A> extends Plan.MakePlanOptions {
|
|
@@ -38,6 +40,13 @@ export function deploy<A>(options: FilteredDeployOptions<A>) {
|
|
|
38
40
|
return deployStack(options);
|
|
39
41
|
}
|
|
40
42
|
|
|
43
|
+
/**
|
|
44
|
+
* Apply `plan`, drawing its progress through the ambient `Cli` when there
|
|
45
|
+
* is one. The engine only emits events; this is where they are rendered.
|
|
46
|
+
*/
|
|
47
|
+
export const applyAndRender = <P extends Plan.Plan>(plan: P) =>
|
|
48
|
+
Apply.apply(plan).pipe(renderApply(plan));
|
|
49
|
+
|
|
41
50
|
const deployStack = <A>({
|
|
42
51
|
stack,
|
|
43
52
|
stage,
|
|
@@ -52,8 +61,7 @@ const deployStack = <A>({
|
|
|
52
61
|
(stack) =>
|
|
53
62
|
Effect.gen(function* () {
|
|
54
63
|
const plan = yield* Plan.make(stack, { force, include, exclude });
|
|
55
|
-
|
|
56
|
-
return output;
|
|
64
|
+
return yield* applyAndRender(plan);
|
|
57
65
|
}),
|
|
58
66
|
{ stage, dev, scope },
|
|
59
67
|
);
|
package/src/Destroy.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
-
import
|
|
2
|
+
import * as Context from "effect/Context";
|
|
3
3
|
import type * as Scope from "effect/Scope";
|
|
4
|
-
import
|
|
5
|
-
import
|
|
4
|
+
import { applyAndRender } from "./Deploy.ts";
|
|
5
|
+
import { evalStack } from "./EvalStack.ts";
|
|
6
6
|
import * as Plan from "./Plan.ts";
|
|
7
|
-
import type {
|
|
8
|
-
import {
|
|
9
|
-
import type { Stage } from "./Stage.ts";
|
|
7
|
+
import type { StackDefinition } from "./Stack.ts";
|
|
8
|
+
import { build, Stack } from "./Stack.ts";
|
|
10
9
|
|
|
11
|
-
export const destroy = ({
|
|
10
|
+
export const destroy = <ROut>({
|
|
12
11
|
stack,
|
|
13
12
|
stage,
|
|
14
13
|
dev,
|
|
@@ -16,7 +15,8 @@ export const destroy = ({
|
|
|
16
15
|
include,
|
|
17
16
|
exclude,
|
|
18
17
|
}: {
|
|
19
|
-
stack
|
|
18
|
+
/** The stack to tear down; its program is never run. */
|
|
19
|
+
stack: StackDefinition<ROut>;
|
|
20
20
|
stage: string;
|
|
21
21
|
dev?: boolean;
|
|
22
22
|
/** See {@link evalStack} — when set, scoped resources outlive `destroy`. */
|
|
@@ -29,8 +29,14 @@ export const destroy = ({
|
|
|
29
29
|
? Effect.die(
|
|
30
30
|
new Plan.InvalidResourceSelection({ message: "Filtered destroy is not supported." }),
|
|
31
31
|
)
|
|
32
|
-
: evalStack(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
: evalStack(
|
|
33
|
+
build({
|
|
34
|
+
name: stack.stackName,
|
|
35
|
+
providers: stack.providers,
|
|
36
|
+
state: stack.state,
|
|
37
|
+
secrets: stack.secrets,
|
|
38
|
+
}).pipe(Effect.map((services) => ({ services }))),
|
|
39
|
+
({ services }) =>
|
|
40
|
+
Plan.destroy(Context.get(services, Stack)).pipe(Effect.flatMap(applyAndRender)),
|
|
41
|
+
{ stage, dev, scope },
|
|
42
|
+
);
|
package/src/Diff.ts
CHANGED
|
@@ -5,6 +5,7 @@ import type { Input } from "./Input.ts";
|
|
|
5
5
|
import * as Output from "./Output.ts";
|
|
6
6
|
import type { BindingNode } from "./Plan.ts";
|
|
7
7
|
import type { ResourceBinding } from "./Resource.ts";
|
|
8
|
+
import { bytesToBase64 } from "./Util/base64.ts";
|
|
8
9
|
import { isPlainData, isPrimitive, mapPlainData } from "./Util/data.ts";
|
|
9
10
|
|
|
10
11
|
export type Diff = NoopDiff | UpdateDiff | ReplaceDiff;
|
|
@@ -92,9 +93,14 @@ const _stripUnresolved = (
|
|
|
92
93
|
if (value == null || isPrimitive(value)) return value;
|
|
93
94
|
if (Output.isExpr(value) || Effect.isEffect(value)) return undefined;
|
|
94
95
|
// Serializable leaves — the only class instances persisted state may
|
|
95
|
-
// carry (StateEncoding knows Redacted/Duration
|
|
96
|
-
//
|
|
97
|
-
if (
|
|
96
|
+
// carry (StateEncoding knows Redacted/Duration/Date/bytes). Rebuilding
|
|
97
|
+
// them structurally would strip their prototype.
|
|
98
|
+
if (
|
|
99
|
+
Redacted.isRedacted(value) ||
|
|
100
|
+
Duration.isDuration(value) ||
|
|
101
|
+
value instanceof Date ||
|
|
102
|
+
value instanceof Uint8Array
|
|
103
|
+
) {
|
|
98
104
|
return value;
|
|
99
105
|
}
|
|
100
106
|
if (isPlainData(value)) {
|
|
@@ -131,7 +137,12 @@ const _stripEffects = (
|
|
|
131
137
|
// yieldable and would otherwise be misclassified as plain Effects.
|
|
132
138
|
if (Output.isExpr(value)) return value;
|
|
133
139
|
if (Effect.isEffect(value)) return undefined;
|
|
134
|
-
if (
|
|
140
|
+
if (
|
|
141
|
+
Redacted.isRedacted(value) ||
|
|
142
|
+
Duration.isDuration(value) ||
|
|
143
|
+
value instanceof Date ||
|
|
144
|
+
value instanceof Uint8Array
|
|
145
|
+
) {
|
|
135
146
|
return value;
|
|
136
147
|
}
|
|
137
148
|
if (isPlainData(value)) {
|
|
@@ -229,6 +240,8 @@ const canonicalize = (
|
|
|
229
240
|
// JSON-safe leaves compare by their serialized form (Duration/Date have
|
|
230
241
|
// toJSON).
|
|
231
242
|
if (Duration.isDuration(value) || value instanceof Date) return value;
|
|
243
|
+
// Bytes compare by content.
|
|
244
|
+
if (value instanceof Uint8Array) return { __bytes__: bytesToBase64(value) };
|
|
232
245
|
if (isPlainData(value)) {
|
|
233
246
|
const rebuilt = mapPlainData(value, ancestors, (child) =>
|
|
234
247
|
canonicalize(child, stripNullish, ancestors),
|