interface TestEnvConfig { kv?: string[]; d1?: string[]; r2?: string[]; queue?: string[]; do?: string[]; vars?: Record; } /** Maps binding names from each config category to their mock types. */ type EnvBindings = { [K in T["kv"] extends readonly string[] ? T["kv"][number] : never] : KVNamespace } & { [K in T["d1"] extends readonly string[] ? T["d1"][number] : never] : D1Database } & { [K in T["r2"] extends readonly string[] ? T["r2"][number] : never] : R2Bucket } & { [K in T["queue"] extends readonly string[] ? T["queue"][number] : never] : Queue } & { [K in T["do"] extends readonly string[] ? T["do"][number] : never] : DurableObjectStorage } & { [K in keyof T["vars"] & string] : T["vars"] extends Record ? V : never }; /** * One-call environment factory for Cloudflare Workers tests. * Creates named mocks for each binding type and returns a typed env object. * * @param config - Binding names for each category (kv, d1, r2, queue, do) plus plain vars. * @returns An object mapping each binding name to its mock instance. * * @example * ```ts * const env = createTestEnv({ * kv: ['CACHE'] as const, * d1: ['DB'] as const, * vars: { API_URL: 'http://localhost' }, * }) * // env.CACHE is KVNamespace, env.DB is D1Database, env.API_URL is string * ``` */ declare function createTestEnv(config: T): EnvBindings; export { createTestEnv };