import { Pathy } from '@bscotch/pathy';
import { type AudioSourceConfig, type SourceConfig, type ConfigFile, GroupedSourceConfig } from './assetSource.types.js';
export declare class AssetSourceConfig<T extends SourceConfig = SourceConfig> {
    readonly dir: Pathy;
    protected config: T;
    constructor(dir: Pathy, config: T);
    get id(): string;
    get type(): T['type'];
    get files(): T['files'];
    set files(files: T['files']);
    absoluteFilePath(file: T['files'][number]): Pathy;
    grouped(): GroupedSourceConfig<T>;
    toJSON(): T;
    compareFiles(a: T['files'][number], b: T['files'][number]): number;
}
export declare class AssetSourcesConfig {
    readonly path: Pathy<ConfigFile>;
    constructor(path: string | Pathy<any>);
    get dir(): Pathy<unknown>;
    listAudioSources(): Promise<AssetSourceConfig<AudioSourceConfig>[]>;
    listSources(options?: {
        filter: (sources: AssetSourceConfig) => any;
    }): Promise<AssetSourceConfig[]>;
    findAudioSource(id: string, config?: ConfigFile): Promise<[AssetSourceConfig<AudioSourceConfig>, number]>;
    findSource(id: string, config?: ConfigFile): Promise<[source: AssetSourceConfig, idx: number]>;
    addAudioSource(info?: Partial<AudioSourceConfig>): Promise<AssetSourceConfig<AudioSourceConfig>>;
    removeSource(id: string): Promise<void>;
    updateAudioSource(id: string, info: Partial<Omit<AudioSourceConfig, 'id' | 'files'>>): Promise<AudioSourceConfig>;
    /**
     * Update the config file to reflect the current state
     * of all described files.
     */
    refreshAudioSource(id: string): Promise<AssetSourceConfig<AudioSourceConfig>>;
    toggleImportables(sourceId: string, fileIds: string[], importable: boolean): Promise<void>;
    toggleImportable(sourceId: string, fileId: string, importable: boolean): Promise<void>;
    load(): Promise<ConfigFile>;
    protected write(config: ConfigFile): Promise<void>;
    static readonly basename = "stitch.src.json";
    static from(path: string | Pathy): AssetSourcesConfig;
}
//# sourceMappingURL=AssetSourcesConfig.d.ts.map