import type { EnvPick } from 'env-struct';
import type { env } from '../../envVars';
import { PersistencePluginRegistry } from '../PersistencePlugin';
import type { EnvPersistence } from './EnvPersistence';
import { EnvPersistenceVolatile } from './EnvPersistenceVolatile';
/**
 * Provides access to the ordered stack of {@link EnvPersistence} layers that
 * back the Donobu flow environment data system.
 *
 * Layers are ordered by `PERSISTENCE_PRIORITY` (e.g. `["LOCAL", "RAM"]`).
 * Consumers - primarily {@link EnvDataManager} - iterate the stack to resolve
 * reads (first hit wins) and fan out writes (all layers receive every write).
 */
export interface EnvPersistenceRegistry {
    /** Returns a list of all valid persistence layers. Note that the returned list may be empty! */
    getAll(): Promise<EnvPersistence[]>;
}
/**
 * A factory class for creating EnvPersistence instances. Persistence layers are constructed
 * eagerly at creation time and reused across all subsequent calls.
 *
 * Note that "Env" in this particular context is not talking about this
 * process's NodeJS environment variables, but rather, the environment variables for Donobu flows.
 */
export declare class EnvPersistenceRegistryImpl implements EnvPersistenceRegistry {
    private readonly layers;
    /**
     * Creates an instance with pre-built persistence layers.
     */
    constructor(layers: EnvPersistence[]);
    /**
     * Creates an instance by reading environment variables and eagerly constructing
     * all applicable persistence layers.
     *
     * When {@link envPersistenceVolatile} is non-null it is always included in
     * the resulting layer list - even if `PERSISTENCE_PRIORITY` does not contain
     * `"RAM"`. If `"RAM"` *is* present in the priority list the volatile layer
     * occupies that position; otherwise it is appended as a trailing fallback.
     * This guarantees that env vars sourced from the host process (e.g. a
     * `process.env` snapshot) remain accessible to flows regardless of how the
     * caller configured persistence priority.
     */
    static fromEnvironment(envPersistenceVolatile: EnvPersistenceVolatile | null, environ: EnvPick<typeof env, 'PERSISTENCE_PRIORITY'>, persistencePlugins?: PersistencePluginRegistry): Promise<EnvPersistenceRegistryImpl>;
    /** Returns all persistence layers. Note that the returned list may be empty! */
    getAll(): Promise<EnvPersistence[]>;
}
//# sourceMappingURL=EnvPersistenceRegistry.d.ts.map