import { Context, Effect, Layer } from "effect";
import { type Executor, type ExecutorConfig } from "./executor";
import type { FumaDb } from "./fuma-runtime";
import { type AnyPlugin } from "./plugin";
import { Scope } from "./scope";
import type { SqliteTestFumaDb } from "./sqlite-test-db";
export type TestDatabaseBackend = "sqlite";
export type TestFumaDb = Pick<SqliteTestFumaDb, "db" | "close"> & {
    readonly warm: () => Promise<void>;
};
export type TestConfigOptions<TPlugins extends readonly AnyPlugin[] = readonly []> = {
    readonly scopeName?: string;
    readonly scopes?: readonly Scope[];
    readonly plugins?: TPlugins;
    readonly backend?: TestDatabaseBackend;
    readonly dataDir?: string;
};
export declare const makeTestConfig: <const TPlugins extends readonly AnyPlugin[] = readonly []>(options?: TestConfigOptions<TPlugins>) => Omit<ExecutorConfig<TPlugins>, "db"> & {
    readonly db: FumaDb;
    readonly testDb: TestFumaDb;
};
export interface TestWorkspaceHarness<TPlugins extends readonly AnyPlugin[] = readonly AnyPlugin[]> {
    readonly config: ExecutorConfig<TPlugins> & {
        readonly testDb: TestFumaDb;
    };
    readonly executor: Executor<TPlugins>;
    readonly testDb: TestFumaDb;
    readonly scopes: readonly Scope[];
}
declare const TestWorkspace_base: Context.ServiceClass<TestWorkspace, "executor-sdk/TestWorkspace", TestWorkspaceHarness<readonly AnyPlugin[]>>;
export declare class TestWorkspace extends TestWorkspace_base {
    static readonly current: <const TPlugins extends readonly AnyPlugin[] = readonly AnyPlugin[]>() => Effect.Effect<TestWorkspaceHarness<TPlugins>, never, TestWorkspace>;
}
export declare const makeTestWorkspaceHarness: <const TPlugins extends readonly AnyPlugin[] = readonly []>(options?: TestConfigOptions<TPlugins>) => Effect.Effect<{
    readonly config: Omit<ExecutorConfig<TPlugins>, "db"> & {
        readonly db: FumaDb;
        readonly testDb: TestFumaDb;
    };
    readonly executor: Executor<TPlugins>;
    readonly testDb: TestFumaDb;
    readonly scopes: readonly {
        readonly name: string;
        readonly id: string & import("effect/Brand").Brand<"ScopeId">;
        readonly createdAt: Date;
    }[];
}, import("./fuma-runtime").StorageFailure, import("effect/Scope").Scope>;
export declare const makeTestWorkspaceLayer: <const TPlugins extends readonly AnyPlugin[] = readonly []>(options?: TestConfigOptions<TPlugins>) => Layer.Layer<TestWorkspace, import("./fuma-runtime").StorageFailure, never>;
export declare const makeTestExecutor: <const TPlugins extends readonly AnyPlugin[] = readonly []>(options?: TestConfigOptions<TPlugins>) => Effect.Effect<Executor<TPlugins>, import("./fuma-runtime").StorageFailure, import("effect/Scope").Scope>;
export declare const memorySecretsPlugin: import("./plugin").ConfiguredPlugin<"memory-secrets", object, {}, {}, undefined, undefined, Layer.Layer<unknown, never, never>, import("effect/unstable/httpapi/HttpApiGroup").Any>;
export {};
//# sourceMappingURL=test-config.d.ts.map