import type { File } from '../utils/virtual-module';
export type FindPages = (pagesDir: string, helpers: PageHelpers) => void | Promise<void>;
export interface PageHelpers extends PageAPIs {
    /**
     * Read the static data from a file.
     */
    readonly extractStaticData: (file: File) => Promise<{
        readonly [key: string]: any;
        readonly sourceType: string;
    }>;
    /**
     * Scan the fileSystem and
     * set page data in the file handler.
     * File deletion will be handled automatically
     */
    readonly watchFiles: WatchFilesHelper;
}
export interface WatchFilesHelper {
    /** Watch all files within a directory (except node_modules and .git) */
    (baseDir: string, fileHandler?: FileHandler): void;
    /** Watch files matching the given glob */
    (baseDir: string, glob: string, fileHandler?: FileHandler): void;
    /** Watch files matching one of the given globs */
    (baseDir: string, globs: string[], fileHandler?: FileHandler): void;
}
export type FileHandler = (file: File, api: PageAPIs) => void | Promise<void> | DataPiece | Promise<DataPiece>;
export interface PageAPIs {
    /**
     * Get a mutable data object of runtimeData
     */
    getRuntimeData: (pageId: string) => {
        [key: string]: string;
    };
    /**
     * Get a mutable data object of staticData
     */
    getStaticData: (pageId: string) => {
        [key: string]: any;
    };
    /**
     * Add page data.
     * If the data already exists, overwrite it.
     */
    addPageData: (pageData: DataPiece) => void;
}
export interface DataPiece {
    /**
     * The page route path.
     * User can register multiple page data with same pageId,
     * as long as they have different keys.
     * Page data with same pageId will be merged.
     *
     * @example '/posts/hello-world'
     */
    readonly pageId: string;
    /**
     * The data key.
     * For a same page, users can register multiple data pieces,
     * each with its own key. (Composed Page Data)
     *
     * @default 'main'
     */
    readonly key?: string;
    /**
     * The path to the runtime data module.
     * It will be registered with the `key`.
     */
    readonly dataPath?: string;
    /**
     * The value of static data.
     * It will be registered with the `key`.
     */
    readonly staticData?: any;
    /**
     * when multiple data pieces have same key (conflict),
     * the data piece with highest priority will win
     * @default 1
     */
    readonly priority?: number;
}
//# sourceMappingURL=types.doc.d.ts.map