import { NapiResolveOptions, ResolverFactory } from 'oxc-resolver';

interface RspackTransformerOptions {
	/** only take effect when there are multiple configurations */
	merge?: boolean;
	/** only take effect when there are multiple configurations */
	configName?: string;
}
declare function transformRspackConfig(path: string, _options?: RspackTransformerOptions): Promise<NapiResolveOptions>;

interface ViteTranformerOptions {}
declare function transformViteConfig(path: string): Promise<NapiResolveOptions>;

interface WebpackTransformerOptions {
	/** only take effect when there are multiple configurations */
	merge?: boolean;
	/** only take effect when there are multiple configurations */
	configName?: string;
}
declare function transformWebpackConfig(path: string, _options?: WebpackTransformerOptions): Promise<NapiResolveOptions>;

interface ImportResolver {
	interfaceVersion: 3;
	name: string;
	resolve: (source: string, file: string) => {
		found: boolean
		path: string | null | undefined
	};
}
interface BundlerTransformerOptions {
	vite: ViteTranformerOptions;
	webpack: WebpackTransformerOptions;
	rspack: RspackTransformerOptions;
}
type SupportedBundler = "vite" | "webpack" | "rspack";
type BundlerOption<T extends SupportedBundler = SupportedBundler> = { [K in SupportedBundler] : {
	type?: K
	path?: string
	options?: BundlerTransformerOptions[K]
} }[T];
interface OxcResolverOptions extends NapiResolveOptions {
	/** @experimental detect bundler's resolve config */
	bundlerConfig?: string | BundlerOption;
}

declare function resolve(source: string, file: string, options?: OxcResolverOptions | null, resolver?: ResolverFactory | null): {
	found: boolean
	path: string | null | undefined
};
declare const interfaceVersion = 2;
declare function createOxcImportResolver(options?: NapiResolveOptions): ImportResolver;
declare function createOxcImportResolver(options?: OxcResolverOptions): Promise<ImportResolver>;
declare function createOxcImportResolverAsync(options: OxcResolverOptions): Promise<ImportResolver>;

export { type BundlerOption, type ImportResolver, type OxcResolverOptions, type SupportedBundler, createOxcImportResolver, createOxcImportResolverAsync, interfaceVersion, resolve, transformRspackConfig, transformViteConfig, transformWebpackConfig };
