import { x } from 'unhoax';
import type { GenerateFixtureFromSchema } from './internal/GenerateFixtureFromSchema';
/** @internal Fixture Factory */
export type FixtureFactory = typeof createFixtureFactory;
/** @category Fixture Factory */
export type GenerateFixture<T> = (seedOrChance?: number | Chance.Chance) => T;
/** @category Fixture Factory */
export type Overrides<T> = T extends Record<PropertyKey, unknown> ? {
    [Key in keyof T]?: GenerateFixtureFromSchema<T[Key]>;
} : never;
/**
 * @category Fixture Factory
 * @example From object schema
 * ```ts
 * import { x } from 'unhoax'
 * import { createFixtureFactory } from 'unhoax-chance'
 *
 * const userSchema = x.object({ id: x.string, … })
 * const createRandomUser = createFixtureFactory(userSchema)
 * const createRandomUser: (seed?: number) => User
 *
 * // overriding generators for specific properties:
 * const createRandomUser = createFixtureFactory(userSchema, {
 *   id: (chance) => chance.guid(),
 * })
 *
 *
 * const user = createRandomUser()
 * const user = createRandomUser(42) // with seed
 * ```
 *
 * @example From array/Set/Map schema
 * ```ts
 * import { x } from 'unhoax'
 * import { createFixtureFactory } from 'unhoax-chance'
 *
 * const users = x.array(userSchema)
 * const users = x.mapOf(x.string, userSchema) // Map<id, user>
 * const users = x.setOf(userSchema)
 *
 * const createRandomUsers = createFixtureFactory(userSchema)
 * ```
 * <br>
 * @example From Primitive
 * ```ts
 * import { x } from 'unhoax'
 * import { createFixtureFactory } from 'unhoax-chance'
 *
 * const createRandomString = createFixtureFactory(x.string)
 * const result = createRandomString()
 * const result = createRandomString(42) // seed: 42
 * result: string
 *
 * const createRandomNumber = createFixtureFactory(x.number)
 * const result = createRandomNumber()
 * const result = createRandomNumber(42) // seed: 42
 * result: number
 * ```
 */
export declare function createFixtureFactory<T>(schema: x.BaseSchema<T>, overrides?: Overrides<T>): GenerateFixture<T>;
