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/Test/Http.ts
DELETED
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
import * as Data from "effect/Data";
|
|
2
|
-
import * as Effect from "effect/Effect";
|
|
3
|
-
import * as FetchHttpClient from "effect/http/FetchHttpClient";
|
|
4
|
-
import * as HttpClient from "effect/http/HttpClient";
|
|
5
|
-
import { DecodeError, HttpClientError } from "effect/http/HttpClientError";
|
|
6
|
-
import * as HttpClientRequest from "effect/http/HttpClientRequest";
|
|
7
|
-
import type { HttpClientResponse } from "effect/http/HttpClientResponse";
|
|
8
|
-
import * as Layer from "effect/Layer";
|
|
9
|
-
import * as RpcClient from "effect/rpc/RpcClient";
|
|
10
|
-
import * as RpcSerialization from "effect/rpc/RpcSerialization";
|
|
11
|
-
import * as Schedule from "effect/Schedule";
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* A freshly-deployed Cloudflare Worker is not instantly reachable over HTTP.
|
|
15
|
-
* Its `workers.dev` route, the script, and each binding (R2 / D1 / DO / Secrets
|
|
16
|
-
* Store) propagate to the edge independently and asynchronously, so the first
|
|
17
|
-
* requests to a new URL can transiently return:
|
|
18
|
-
*
|
|
19
|
-
* - `404` while the `workers.dev` subdomain / route is still propagating
|
|
20
|
-
* (Cloudflare serves its "There is nothing here yet" placeholder), or
|
|
21
|
-
* - `5xx` while the script is up but a binding it depends on isn't ready yet.
|
|
22
|
-
*
|
|
23
|
-
* This is ordinary eventual consistency that belongs at the call site, not in
|
|
24
|
-
* the resource provider — the provider returning before every edge PoP has
|
|
25
|
-
* converged is correct. Consumers ride out the window by retrying the request.
|
|
26
|
-
*/
|
|
27
|
-
export class WorkerNotReady extends Data.TaggedError("WorkerNotReady")<{ status: number }> {}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Status codes that indicate the edge hasn't finished converging on a fresh
|
|
31
|
-
* deploy. Deliberate client errors (`401`, `403`, `400`, …) are NOT in this
|
|
32
|
-
* set, so assertions on those statuses still observe them immediately rather
|
|
33
|
-
* than being retried away.
|
|
34
|
-
*/
|
|
35
|
-
const isColdStartStatus = (status: number): boolean => status === 404 || status >= 500;
|
|
36
|
-
|
|
37
|
-
export interface WhenReadyOptions {
|
|
38
|
-
/** Max retry attempts before surfacing {@link WorkerNotReady}. Default `20`. */
|
|
39
|
-
times?: number;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Execute an arbitrary {@link HttpClientRequest.HttpClientRequest}, retrying
|
|
44
|
-
* through the Cloudflare cold-start window ({@link isColdStartStatus}) until the
|
|
45
|
-
* Worker serves a non-transient response. The returned response can carry any
|
|
46
|
-
* non-cold-start status (e.g. `200`, `202`, `401`) for the caller to assert on.
|
|
47
|
-
*/
|
|
48
|
-
export const executeWhenReady = (
|
|
49
|
-
request: HttpClientRequest.HttpClientRequest,
|
|
50
|
-
options?: WhenReadyOptions,
|
|
51
|
-
): Effect.Effect<HttpClientResponse, unknown, HttpClient.HttpClient> =>
|
|
52
|
-
Effect.gen(function* () {
|
|
53
|
-
const client = yield* HttpClient.HttpClient;
|
|
54
|
-
return yield* client.execute(request).pipe(
|
|
55
|
-
Effect.flatMap((response) =>
|
|
56
|
-
isColdStartStatus(response.status)
|
|
57
|
-
? Effect.fail(new WorkerNotReady({ status: response.status }))
|
|
58
|
-
: Effect.succeed(response),
|
|
59
|
-
),
|
|
60
|
-
Effect.retry({
|
|
61
|
-
while: (error) => error instanceof WorkerNotReady,
|
|
62
|
-
schedule: Schedule.max([
|
|
63
|
-
Schedule.exponential("500 millis"),
|
|
64
|
-
Schedule.recurs(options?.times ?? 20),
|
|
65
|
-
]),
|
|
66
|
-
}),
|
|
67
|
-
);
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Convenience wrapper over {@link executeWhenReady} for a plain `GET`.
|
|
72
|
-
*/
|
|
73
|
-
export const getWhenReady = (
|
|
74
|
-
url: string,
|
|
75
|
-
options?: WhenReadyOptions,
|
|
76
|
-
): Effect.Effect<HttpClientResponse, unknown, HttpClient.HttpClient> =>
|
|
77
|
-
executeWhenReady(HttpClientRequest.get(url), options);
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Options for the edge-transient response guard applied by
|
|
81
|
-
* {@link guardContentType} / {@link rpcClientLayer}. Pass per suite via
|
|
82
|
-
* `Test.make({ http: { ... } })` or per call site.
|
|
83
|
-
*/
|
|
84
|
-
export interface EdgeGuardOptions {
|
|
85
|
-
/**
|
|
86
|
-
* Retry schedule for edge-transient responses (and transport errors).
|
|
87
|
-
* Default: exponential from 500ms capped at 3s.
|
|
88
|
-
*/
|
|
89
|
-
schedule?: Schedule.Schedule<unknown, unknown>;
|
|
90
|
-
/** Max transport-level retry attempts. Default `5`. */
|
|
91
|
-
times?: number;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
const defaultGuardSchedule = Schedule.min([
|
|
95
|
-
Schedule.exponential("500 millis"),
|
|
96
|
-
Schedule.spaced("3 seconds"),
|
|
97
|
-
]);
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Guard an `HttpClient` against edge-generated bodies on a freshly deployed
|
|
101
|
-
* Worker URL.
|
|
102
|
-
*
|
|
103
|
-
* Protocol clients like effect RPC's `layerProtocolHttp` never inspect the
|
|
104
|
-
* response status or content-type — they pipe the raw body straight into the
|
|
105
|
-
* serialization parser, so every edge-generated HTML page (the workers.dev
|
|
106
|
-
* placeholder, which serves with HTTP **200**; 1101/1102 error pages;
|
|
107
|
-
* 429/1015 rate limits) surfaces as an opaque decode defect (e.g.
|
|
108
|
-
* `RpcClientDefect: Error decoding HTTP response`).
|
|
109
|
-
*
|
|
110
|
-
* This transform rejects any response whose `content-type` doesn't match the
|
|
111
|
-
* expected one as a typed `HttpClientError` that records the status + a body
|
|
112
|
-
* snippet — so a failure names its cause — and retries the request through a
|
|
113
|
-
* bounded schedule so callers ride out the cold-start window
|
|
114
|
-
* ({@link WorkerNotReady} documents why this belongs at the call site).
|
|
115
|
-
*/
|
|
116
|
-
export const guardContentType =
|
|
117
|
-
(contentType: string, options?: EdgeGuardOptions) =>
|
|
118
|
-
(client: HttpClient.HttpClient): HttpClient.HttpClient =>
|
|
119
|
-
client.pipe(
|
|
120
|
-
HttpClient.transform((effect, request) =>
|
|
121
|
-
Effect.flatMap(effect, (response) => {
|
|
122
|
-
const observed = response.headers["content-type"] ?? "";
|
|
123
|
-
if (observed.includes(contentType)) {
|
|
124
|
-
return Effect.succeed(response);
|
|
125
|
-
}
|
|
126
|
-
return response.text.pipe(
|
|
127
|
-
Effect.orElseSucceed(() => "<unreadable body>"),
|
|
128
|
-
Effect.flatMap((body) =>
|
|
129
|
-
Effect.fail(
|
|
130
|
-
new HttpClientError({
|
|
131
|
-
reason: new DecodeError({
|
|
132
|
-
request,
|
|
133
|
-
response,
|
|
134
|
-
description: `expected "${contentType}", got "${observed}" (status ${response.status}): ${body.slice(0, 200)}`,
|
|
135
|
-
}),
|
|
136
|
-
}),
|
|
137
|
-
),
|
|
138
|
-
),
|
|
139
|
-
);
|
|
140
|
-
}),
|
|
141
|
-
),
|
|
142
|
-
HttpClient.retry({
|
|
143
|
-
schedule: options?.schedule ?? defaultGuardSchedule,
|
|
144
|
-
times: options?.times ?? 5,
|
|
145
|
-
}),
|
|
146
|
-
);
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* A fetch-backed `HttpClient` layer wrapped with {@link guardContentType}.
|
|
150
|
-
*
|
|
151
|
-
* Deliberately a standalone layer rather than a transform of the ambient
|
|
152
|
-
* test `HttpClient`: the ambient client also serves the engine's own cloud
|
|
153
|
-
* API calls during `deploy`/`destroy` and distilled SDK calls in
|
|
154
|
-
* `test.provider` bodies, which must NOT be subjected to this guard.
|
|
155
|
-
*/
|
|
156
|
-
export const guardedFetchLayer = (
|
|
157
|
-
contentType: string,
|
|
158
|
-
options?: EdgeGuardOptions,
|
|
159
|
-
): Layer.Layer<HttpClient.HttpClient> =>
|
|
160
|
-
Layer.effect(HttpClient.HttpClient)(
|
|
161
|
-
Effect.gen(function* () {
|
|
162
|
-
const client = yield* HttpClient.HttpClient;
|
|
163
|
-
return guardContentType(contentType, options)(client);
|
|
164
|
-
}),
|
|
165
|
-
).pipe(Layer.provide(FetchHttpClient.layer));
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* Complete RPC-over-HTTP client transport for driving a deployed Worker:
|
|
169
|
-
* `RpcClient.layerProtocolHttp` + the given serialization (ndjson by
|
|
170
|
-
* default) + a {@link guardedFetchLayer} expecting that serialization's
|
|
171
|
-
* content-type.
|
|
172
|
-
*
|
|
173
|
-
* ```ts
|
|
174
|
-
* const client = yield* RpcClient.make(WorkerRpcs);
|
|
175
|
-
* // ...
|
|
176
|
-
* }).pipe(Effect.scoped, Effect.provide(Test.Http.rpcClientLayer(url)));
|
|
177
|
-
* ```
|
|
178
|
-
*/
|
|
179
|
-
export const rpcClientLayer = (
|
|
180
|
-
url: string,
|
|
181
|
-
options?: EdgeGuardOptions & {
|
|
182
|
-
/** RPC wire serialization. Default {@link RpcSerialization.ndjson}. */
|
|
183
|
-
serialization?: RpcSerialization.RpcSerialization["Service"];
|
|
184
|
-
/**
|
|
185
|
-
* Set `false` to skip the edge guard entirely and use a plain fetch
|
|
186
|
-
* transport — e.g. for a test that asserts on the raw edge behavior
|
|
187
|
-
* itself. Default `true`.
|
|
188
|
-
*/
|
|
189
|
-
guard?: boolean;
|
|
190
|
-
},
|
|
191
|
-
): Layer.Layer<RpcClient.Protocol> => {
|
|
192
|
-
const serialization = options?.serialization ?? RpcSerialization.ndjson;
|
|
193
|
-
return RpcClient.layerProtocolHttp({ url }).pipe(
|
|
194
|
-
Layer.provide(
|
|
195
|
-
options?.guard === false
|
|
196
|
-
? FetchHttpClient.layer
|
|
197
|
-
: guardedFetchLayer(serialization.contentType, options),
|
|
198
|
-
),
|
|
199
|
-
Layer.provide(Layer.succeed(RpcSerialization.RpcSerialization, serialization)),
|
|
200
|
-
);
|
|
201
|
-
};
|
package/src/Test/TestState.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import * as Layer from "effect/Layer";
|
|
2
|
-
import { Stack } from "../Stack.ts";
|
|
3
|
-
import * as State from "../State/index.ts";
|
|
4
|
-
|
|
5
|
-
export const state = (resources: Record<string, State.ResourceState> = {}) =>
|
|
6
|
-
Layer.effect(
|
|
7
|
-
State.State,
|
|
8
|
-
Stack.useSync((stack) =>
|
|
9
|
-
State.InMemoryService({
|
|
10
|
-
[stack.name]: {
|
|
11
|
-
[stack.stage]: resources,
|
|
12
|
-
},
|
|
13
|
-
}),
|
|
14
|
-
),
|
|
15
|
-
);
|
|
16
|
-
|
|
17
|
-
export const defaultState = (
|
|
18
|
-
resources: Record<string, State.ResourceState> = {},
|
|
19
|
-
other?: {
|
|
20
|
-
[stack: string]: {
|
|
21
|
-
[stage: string]: {
|
|
22
|
-
[resourceId: string]: State.ResourceState;
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
},
|
|
26
|
-
) =>
|
|
27
|
-
Layer.succeed(
|
|
28
|
-
State.State,
|
|
29
|
-
State.InMemoryService({
|
|
30
|
-
["test-app"]: {
|
|
31
|
-
["test-stage"]: resources,
|
|
32
|
-
},
|
|
33
|
-
...other,
|
|
34
|
-
}),
|
|
35
|
-
);
|
package/src/Test/Vitest.ts
DELETED
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
/** @effect-diagnostics anyUnknownInErrorContext:off */
|
|
2
|
-
import { it } from "@effect/vitest";
|
|
3
|
-
import * as Effect from "effect/Effect";
|
|
4
|
-
import * as Exit from "effect/Exit";
|
|
5
|
-
import * as Scope from "effect/Scope";
|
|
6
|
-
import {
|
|
7
|
-
afterAll as vitestAfterAll,
|
|
8
|
-
afterEach as vitestAfterEach,
|
|
9
|
-
beforeAll as vitestBeforeAll,
|
|
10
|
-
beforeEach as vitestBeforeEach,
|
|
11
|
-
} from "vitest";
|
|
12
|
-
import type { AlchemyContext } from "../AlchemyContext.ts";
|
|
13
|
-
import type { CompiledStack } from "../Stack.ts";
|
|
14
|
-
import type { Stage } from "../Stage.ts";
|
|
15
|
-
import * as Core from "./Core.ts";
|
|
16
|
-
|
|
17
|
-
export {
|
|
18
|
-
executeWhenReady,
|
|
19
|
-
getWhenReady,
|
|
20
|
-
guardContentType,
|
|
21
|
-
guardedFetchLayer,
|
|
22
|
-
rpcClientLayer,
|
|
23
|
-
WorkerNotReady,
|
|
24
|
-
type EdgeGuardOptions,
|
|
25
|
-
type WhenReadyOptions,
|
|
26
|
-
} from "./Http.ts";
|
|
27
|
-
|
|
28
|
-
export type MakeOptions<ROut = any> = Core.MakeOptions<ROut>;
|
|
29
|
-
export type ScratchStack = Core.ScratchStack;
|
|
30
|
-
export type TestEffect<A, R = never> = Core.TestEffect<A, R>;
|
|
31
|
-
export const defaultStage = Core.defaultStage;
|
|
32
|
-
export const resolveStage = Core.resolveStage;
|
|
33
|
-
|
|
34
|
-
type TestOptions = number | { timeout?: number };
|
|
35
|
-
|
|
36
|
-
const timeoutOf = (opts: TestOptions | undefined): number | undefined =>
|
|
37
|
-
typeof opts === "number" ? opts : opts?.timeout;
|
|
38
|
-
|
|
39
|
-
interface TestFn {
|
|
40
|
-
(name: string, eff: TestEffect<void>, options?: TestOptions): void;
|
|
41
|
-
skip: (name: string, eff: TestEffect<void>, options?: TestOptions) => void;
|
|
42
|
-
skipIf: (
|
|
43
|
-
condition: boolean,
|
|
44
|
-
) => (name: string, eff: TestEffect<void>, options?: TestOptions) => void;
|
|
45
|
-
only: (name: string, eff: TestEffect<void>, options?: TestOptions) => void;
|
|
46
|
-
todo: (name: string, eff: TestEffect<void>, options?: TestOptions) => void;
|
|
47
|
-
provider: ProviderFn;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
interface ProviderFn {
|
|
51
|
-
(
|
|
52
|
-
name: string,
|
|
53
|
-
fn: (stack: ScratchStack) => Effect.Effect<void, any, any>,
|
|
54
|
-
options?: TestOptions,
|
|
55
|
-
): void;
|
|
56
|
-
skip: (
|
|
57
|
-
name: string,
|
|
58
|
-
fn: (stack: ScratchStack) => Effect.Effect<void, any, any>,
|
|
59
|
-
options?: TestOptions,
|
|
60
|
-
) => void;
|
|
61
|
-
skipIf: (
|
|
62
|
-
condition: boolean,
|
|
63
|
-
) => (
|
|
64
|
-
name: string,
|
|
65
|
-
fn: (stack: ScratchStack) => Effect.Effect<void, any, any>,
|
|
66
|
-
options?: TestOptions,
|
|
67
|
-
) => void;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
interface BeforeAllFn {
|
|
71
|
-
<A>(eff: TestEffect<A>, options?: TestOptions): Effect.Effect<A>;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
interface BeforeEachFn {
|
|
75
|
-
(eff: TestEffect<void>, options?: TestOptions): void;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
interface AfterAllFn {
|
|
79
|
-
(eff: TestEffect<any>, options?: TestOptions): void;
|
|
80
|
-
skipIf: (predicate: boolean) => (eff: TestEffect<any>, options?: TestOptions) => void;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
interface AfterEachFn {
|
|
84
|
-
(eff: TestEffect<void>, options?: TestOptions): void;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
export interface TestApi {
|
|
88
|
-
test: TestFn;
|
|
89
|
-
beforeAll: BeforeAllFn;
|
|
90
|
-
beforeEach: BeforeEachFn;
|
|
91
|
-
afterAll: AfterAllFn;
|
|
92
|
-
afterEach: AfterEachFn;
|
|
93
|
-
deploy: Core.Deploy;
|
|
94
|
-
destroy: (
|
|
95
|
-
stack: TestEffect<CompiledStack, Stage | AlchemyContext>,
|
|
96
|
-
options?: { stage?: string; include?: never; exclude?: never },
|
|
97
|
-
) => ReturnType<typeof Core.destroy>;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
const DEFAULT_TIMEOUT = 120_000;
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Build the per-file test API. See {@link "./Bun.ts"} for the same shape
|
|
104
|
-
* over `bun:test`. Vitest variant uses `@effect/vitest`'s `it.live` so
|
|
105
|
-
* Effect-aware tests stay first-class.
|
|
106
|
-
*/
|
|
107
|
-
export const make = <ROut = any>(options: MakeOptions<ROut>): TestApi => {
|
|
108
|
-
// See `Test/Bun.ts` for the rationale: the dev sidecar must outlive a
|
|
109
|
-
// single `runPromise` boundary, so all hooks share one scope that's only
|
|
110
|
-
// closed after `destroy(...)` runs.
|
|
111
|
-
const sharedScope = Scope.makeUnsafe("sequential");
|
|
112
|
-
// In dev mode, run local providers behind one file-scoped RPC sidecar
|
|
113
|
-
// (the `alchemy dev` topology). Lives in its own scope — NOT sharedScope,
|
|
114
|
-
// which `destroy(Stack)` closes mid-file in self-contained tests — and is
|
|
115
|
-
// closed by the fallback afterAll below.
|
|
116
|
-
const sidecar = Core.makeSidecarHandle(options);
|
|
117
|
-
const wrap = <A>(eff: TestEffect<A>) => Core.toEffect(eff, options, sharedScope, sidecar);
|
|
118
|
-
const runEff = <A>(eff: TestEffect<A>) => Core.run(eff, options, sharedScope, sidecar);
|
|
119
|
-
|
|
120
|
-
const test = ((name, eff, opts) => {
|
|
121
|
-
it.live(name, () => wrap(eff), timeoutOf(opts));
|
|
122
|
-
}) as TestFn;
|
|
123
|
-
|
|
124
|
-
test.skip = (name, _eff, opts) => {
|
|
125
|
-
it.skip(name, () => {}, timeoutOf(opts));
|
|
126
|
-
};
|
|
127
|
-
test.skipIf = (condition) => (name, eff, opts) => {
|
|
128
|
-
if (condition) {
|
|
129
|
-
it.skip(name, () => {}, timeoutOf(opts));
|
|
130
|
-
} else {
|
|
131
|
-
it.live(name, () => wrap(eff), timeoutOf(opts));
|
|
132
|
-
}
|
|
133
|
-
};
|
|
134
|
-
test.only = (name, eff, opts) => {
|
|
135
|
-
it.live.only(name, () => wrap(eff), timeoutOf(opts));
|
|
136
|
-
};
|
|
137
|
-
test.todo = (name, _eff, _opts) => {
|
|
138
|
-
it.todo(name);
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
const wrapProvider = (
|
|
142
|
-
name: string,
|
|
143
|
-
fn: (stack: ScratchStack) => Effect.Effect<void, any, any>,
|
|
144
|
-
) => {
|
|
145
|
-
const scratch = Core.scratchStack(options, name);
|
|
146
|
-
// Guarantee teardown. `test.provider` has no built-in cleanup, so a body
|
|
147
|
-
// that fails (assertion, API error like a 409/Unauthorized) or is
|
|
148
|
-
// interrupted (vitest timeout) BEFORE its trailing `stack.destroy()` would
|
|
149
|
-
// otherwise leak every cloud resource it deployed: the scratch's in-memory
|
|
150
|
-
// state is discarded with the process, so no later run can reclaim the
|
|
151
|
-
// orphan (only an account-wide `nuke` can). `scratch.destroy()` is
|
|
152
|
-
// idempotent (empty-plan apply against the shared scratch state) — a no-op
|
|
153
|
-
// when the body already destroyed, and it reclaims the orphans otherwise.
|
|
154
|
-
// `Effect.ensuring` runs the finalizer on success, failure, AND interruption.
|
|
155
|
-
const body = Core.withProviders(fn(scratch), options, scratch.name).pipe(
|
|
156
|
-
Effect.ensuring(scratch.destroy().pipe(Effect.ignore)),
|
|
157
|
-
);
|
|
158
|
-
return Core.toEffect(body, { ...options, state: scratch.state }, sharedScope, sidecar);
|
|
159
|
-
};
|
|
160
|
-
|
|
161
|
-
const provider = ((name, fn, opts) => {
|
|
162
|
-
it.live(name, () => wrapProvider(name, fn), timeoutOf(opts));
|
|
163
|
-
}) as ProviderFn;
|
|
164
|
-
provider.skip = (name, _fn, opts) => {
|
|
165
|
-
it.skip(name, () => {}, timeoutOf(opts));
|
|
166
|
-
};
|
|
167
|
-
provider.skipIf = (condition) => (name, fn, opts) => {
|
|
168
|
-
if (condition) {
|
|
169
|
-
it.skip(name, () => {}, timeoutOf(opts));
|
|
170
|
-
} else {
|
|
171
|
-
it.live(name, () => wrapProvider(name, fn), timeoutOf(opts));
|
|
172
|
-
}
|
|
173
|
-
};
|
|
174
|
-
test.provider = provider;
|
|
175
|
-
|
|
176
|
-
const beforeAll: BeforeAllFn = <A>(eff: TestEffect<A>, hookOptions?: TestOptions) => {
|
|
177
|
-
let result: A;
|
|
178
|
-
vitestBeforeAll(
|
|
179
|
-
() => runEff(eff).then((v) => (result = v)),
|
|
180
|
-
timeoutOf(hookOptions) ?? DEFAULT_TIMEOUT,
|
|
181
|
-
);
|
|
182
|
-
return Effect.sync(() => result);
|
|
183
|
-
};
|
|
184
|
-
|
|
185
|
-
const beforeEach: BeforeEachFn = (eff, hookOptions) => {
|
|
186
|
-
vitestBeforeEach(() => runEff(eff), timeoutOf(hookOptions));
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
const afterAll = ((eff, hookOptions) => {
|
|
190
|
-
vitestAfterAll(() => runEff(eff), timeoutOf(hookOptions) ?? DEFAULT_TIMEOUT);
|
|
191
|
-
}) as AfterAllFn;
|
|
192
|
-
afterAll.skipIf = (predicate) => (eff, hookOptions) => {
|
|
193
|
-
if (predicate) return;
|
|
194
|
-
vitestAfterAll(() => runEff(eff), timeoutOf(hookOptions) ?? DEFAULT_TIMEOUT);
|
|
195
|
-
};
|
|
196
|
-
|
|
197
|
-
const afterEach: AfterEachFn = (eff, hookOptions) => {
|
|
198
|
-
vitestAfterEach(() => runEff(eff), timeoutOf(hookOptions));
|
|
199
|
-
};
|
|
200
|
-
|
|
201
|
-
// `destroy(Stack)` needs the dev sidecar alive so it can call `sidecar.stop`.
|
|
202
|
-
// `Scope.close` on an already-closed scope is a no-op, so the destroy
|
|
203
|
-
// wrapper AND the fallback cleanup hook below can both call it safely.
|
|
204
|
-
const closeScope = Effect.suspend(() => Scope.close(sharedScope, Exit.void)).pipe(Effect.ignore);
|
|
205
|
-
|
|
206
|
-
// Fallback cleanup: if the user never calls `destroy(Stack)` (e.g.
|
|
207
|
-
// `NO_DESTROY=1`), nothing else closes the shared scope and the sidecar
|
|
208
|
-
// child process leaks past the test process. The RPC sidecar lives in its
|
|
209
|
-
// own scope so that mid-file `destroy(Stack)` calls can't kill it for later
|
|
210
|
-
// tests.
|
|
211
|
-
//
|
|
212
|
-
// The cleanup must run after every user `afterAll` (including
|
|
213
|
-
// `destroy(Stack)`, which needs the sidecar). Vitest's default
|
|
214
|
-
// `sequence.hooks: "stack"` runs `afterAll` hooks in reverse registration
|
|
215
|
-
// order and `"list"` runs them in registration order, so register the
|
|
216
|
-
// cleanup both before (now) and after (next microtask) the file's
|
|
217
|
-
// `afterAll` calls, and only close on the second invocation: whichever
|
|
218
|
-
// order is configured, that one runs last.
|
|
219
|
-
const closeAll = sidecar ? Effect.andThen(closeScope, sidecar.close) : closeScope;
|
|
220
|
-
let cleanupCalls = 0;
|
|
221
|
-
const cleanup = () => (++cleanupCalls === 2 ? Effect.runPromise(closeAll) : undefined);
|
|
222
|
-
vitestAfterAll(cleanup, DEFAULT_TIMEOUT);
|
|
223
|
-
queueMicrotask(() => {
|
|
224
|
-
vitestAfterAll(cleanup, DEFAULT_TIMEOUT);
|
|
225
|
-
});
|
|
226
|
-
|
|
227
|
-
return {
|
|
228
|
-
test,
|
|
229
|
-
beforeAll,
|
|
230
|
-
beforeEach,
|
|
231
|
-
afterAll,
|
|
232
|
-
afterEach,
|
|
233
|
-
deploy: Core.makeDeploy(options, sharedScope),
|
|
234
|
-
destroy: (stack, callOpts) =>
|
|
235
|
-
Core.destroy(options, stack, { ...callOpts, scope: sharedScope }).pipe(
|
|
236
|
-
Effect.ensuring(closeScope),
|
|
237
|
-
),
|
|
238
|
-
};
|
|
239
|
-
};
|
package/src/Test/index.ts
DELETED
package/src/Util/FileLogger.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import * as Effect from "effect/Effect";
|
|
2
|
-
import * as FileSystem from "effect/FileSystem";
|
|
3
|
-
import * as Logger from "effect/Logger";
|
|
4
|
-
import { Path } from "effect/Path";
|
|
5
|
-
import { AlchemyContext } from "../AlchemyContext.ts";
|
|
6
|
-
|
|
7
|
-
export const fileLogger = Effect.fn(function* (...segments: ReadonlyArray<string>) {
|
|
8
|
-
const { dotAlchemy } = yield* AlchemyContext;
|
|
9
|
-
const fs = yield* FileSystem.FileSystem;
|
|
10
|
-
const path = yield* Path;
|
|
11
|
-
const logFile = path.join(dotAlchemy, "log", ...segments);
|
|
12
|
-
|
|
13
|
-
yield* fs.makeDirectory(path.dirname(logFile), { recursive: true });
|
|
14
|
-
|
|
15
|
-
return yield* Logger.formatLogFmt.pipe(
|
|
16
|
-
Logger.toFile(logFile, {
|
|
17
|
-
flag: "a",
|
|
18
|
-
}),
|
|
19
|
-
);
|
|
20
|
-
});
|