// Generated by dts-bundle-generator v9.5.1

declare class FixtureSetupBucket {
	private readonly fixtureResultCache;
	fixtureResultOf<T extends FixtureInterface<unknown>>(type: Type<T>): FixtureResult<T>;
	onFixtureResult<T extends FixtureInterface<unknown>>(type: Type<T>, value: unknown): void;
}
export type Type<T> = new (...args: any[]) => T;
export type UnPromisify<T> = T extends Promise<infer U> ? U : T;
export type FixtureResult<FixtureType extends FixtureInterface<unknown>> = UnPromisify<ReturnType<FixtureType["install"]>>;
export declare class FixtureBucket {
	private readonly fixtureSetupBucket;
	constructor(fixtureSetupBucket: FixtureSetupBucket);
	fixtureResultOf<T extends FixtureInterface<unknown>>(type: Type<T>): FixtureResult<T>;
}
export type LoadAllResult = {
	readonly fixtureBucket: FixtureBucket;
	readonly loadedResults: readonly unknown[];
};
export type FixtureLoadFilters = {
	readonly rootDir: string;
	readonly filePatterns: readonly string[];
	readonly tags?: readonly string[] | undefined;
};
export declare class FixtureContainer {
	private readonly importer;
	private readonly manager;
	constructor(serviceContainer?: ServiceContainerInterface | undefined, importer?: FixtureImporterInterface | undefined);
	installFixtures(options: FixtureLoadFilters): Promise<LoadAllResult>;
}
export interface FixtureImporterInterface {
	import(rootDir: string | undefined, filePatterns: readonly string[]): Promise<readonly unknown[]>;
}
export interface InjectDependency<T = unknown> extends Function {
	new (...args: readonly any[]): T;
}
export interface DependencyInjectable {
	getInjectDependencies(): readonly InjectDependency[];
}
export interface ServiceContainerInterface {
	getService<TInput = unknown, TResult = TInput>(typeOrToken: InjectDependency<TInput> | string): TResult;
}
export type FixtureDependency = FixtureConstructor;
export interface DependentFixtureInterface {
	getFixtureDependencies(): readonly FixtureConstructor[];
}
export type SaveOnTagsMathFn = () => Promise<unknown>;
export type FixtureConstructor = new (...args: any[]) => FixtureInterface<unknown>;
export type FixtureInstallOptions = {
	readonly saveOnTagMath: (fn: SaveOnTagsMathFn) => void;
};
export interface FixtureInterface<ResultType> {
	install(fixtureBucket: FixtureBucket, options: FixtureInstallOptions): Promise<ResultType>;
}
export interface TaggableInterface {
	getTags(): readonly string[];
}

export {};
