import type { FileArtifact, PathParams, TransformerInput, TransformerOutput, TransformerIOSpec } from "../types.ts";
export declare abstract class FileTransformer<Src extends TransformerIOSpec, Dest extends TransformerIOSpec> {
    readonly spec: Readonly<{
        src: Src;
        dest: Dest;
    }>;
    constructor(src: Src, dest: Dest);
    abstract transform(src: TransformerInput<Src>): Promise<TransformerOutput<Dest>>;
}
type MatcherResult<P> = {
    matched: true;
    params: P;
} | {
    matched: false;
};
export declare const matchPath: <T extends string>(pattern: T) => (path: string) => MatcherResult<PathParams<T>>;
type MultiPathParams<T extends readonly string[]> = T extends readonly [
    infer First,
    ...infer Rest
] ? First extends string ? Rest extends readonly string[] ? PathParams<First> | MultiPathParams<Rest> : PathParams<First> : never : never;
export declare const matchMultiplePaths: <T extends readonly string[]>(...patterns: T) => (path: string) => MatcherResult<MultiPathParams<T>>;
export declare const renderPath: typeof _renderPath;
declare function _renderPath<T extends string>(path: T, params: PathParams<T>): string;
export declare const applyFileTransformations: typeof _applyFileTransformations;
declare function _applyFileTransformations(files: FileArtifact[], transformers: FileTransformer<TransformerIOSpec, TransformerIOSpec>[]): Promise<FileArtifact[]>;
export {};
//# sourceMappingURL=shared.d.ts.map