import * as Context from "effect/Context"; import * as Effect from "effect/Effect"; import type { ActionState } from "./ActionState.ts"; import type { ReplacedResourceState, ResourceState } from "./ResourceState.ts"; /** * Anything persistable under an FQN. Resources are discriminated by status * strings ("creating", "created", …) and Tasks by `kind: "action"`. */ export type PersistedState = ResourceState | ActionState; export declare const isActionState: (s: PersistedState | undefined) => s is ActionState; export declare const isResourceState: (s: PersistedState | undefined) => s is ResourceState; declare const StateStoreError_base: new = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & { readonly _tag: "StateStoreError"; } & Readonly; export declare class StateStoreError extends StateStoreError_base<{ message: string; cause?: Error; }> { } declare const State_base: Context.ServiceClass>; export declare class State extends State_base { } /** * State service interface. * * Resources are keyed by FQN (namespace-qualified key) which includes * the full namespace path plus the logical ID. The FQN is used as the * storage key while logicalId remains available in the persisted state * for provider operations. */ export interface StateService { /** * Stable identifier for the State store implementation, used for * telemetry tagging (`alchemy.state_store.id`) so we can answer * "which backends are people using" without hard-coding a closed * union. Examples: `"local"`, `"inmemory"`, `"http"`, * `"cloudflare-http"`. Third-party state stores should pick a short, * stable, kebab-case slug. */ readonly id: string; /** * Wire / behavioural contract version of this state-store * implementation. For local / in-process stores this is the * `STATE_STORE_VERSION` the CLI was built against; for HTTP-backed * stores it is the version reported by the deployed `/version` * probe. */ getVersion(): Effect.Effect; listStacks(): Effect.Effect; listStages(stack: string): Effect.Effect; /** * Get a resource by its FQN (namespace-qualified key). */ get(request: { stack: string; stage: string; fqn: string; }): Effect.Effect; /** * List top-level resources that are still in replacement cleanup. * * Any additional backlog from repeated replacements is stored recursively * in the returned state's `old` chain. */ getReplacedResources(request: { stack: string; stage: string; }): Effect.Effect, StateStoreError, never>; /** * Set a resource by its FQN (namespace-qualified key). */ set(request: { stack: string; stage: string; fqn: string; value: V; }): Effect.Effect; /** * Delete a resource by its FQN (namespace-qualified key). */ delete(request: { stack: string; stage: string; fqn: string; }): Effect.Effect; /** * Delete an entire stack, or a single stage when `stage` is provided. */ deleteStack(request: { stack: string; stage?: string; }): Effect.Effect; /** * List all resource FQNs in a stack/stage. */ list(request: { stack: string; stage: string; }): Effect.Effect; /** * Read the persisted stack output for `(stack, stage)`. Returns * `undefined` when the stack has not been deployed (or has been * destroyed) at this stage. * * Stack outputs are written by `apply` once the deploy succeeds and * read by cross-stack references (`yield* OtherStack` / * `OtherStack.stage.` / `Output.stackRef(...)`). */ getOutput(request: { stack: string; stage: string; }): Effect.Effect; /** * Persist the resolved stack output for `(stack, stage)`. */ setOutput(request: { stack: string; stage: string; value: unknown; }): Effect.Effect; } export {}; //# sourceMappingURL=State.d.ts.map