import { Plugin } from 'vite';

interface Context {
    helpers: {
        /**
         * A helper function to help to determine whether the passed string parameter equals the
         * current transforming module ID with normalization of paths capabilities and
         * cross platform / OS compatibilities.
         *
         * @param equalsWith - String to equal with
         * @returns boolean
         */
        idEquals: (equalsWith: string) => boolean;
        /**
         * A helper function to help to determine whether the passed string parameter startsWith the
         * current transforming module ID with normalization of paths capabilities and
         * cross platform / OS compatibilities.
         *
         * @param startsWith - String to start with
         * @returns boolean
         */
        idStartsWith: (startsWith: string) => boolean;
        /**
         * A helper function to help to determine whether the passed string parameter endsWith the
         * current transforming module ID with normalization of paths capabilities and
         * cross platform / OS compatibilities.
         *
         * @param endsWith - String to end with
         * @returns boolean
         */
        idEndsWith: (endsWith: string) => boolean;
        /**
         * A helper function to help to determine whether the passed first path parameter
         * equals the second passed string with normalization of paths capabilities and
         * cross platform / OS compatibilities.
         *
         * @param path - Path to be compared with
         * @param equalsWith - String to equal with
         * @returns boolean
         */
        pathEquals: (path: string, equalsWith: string) => boolean;
        /**
         * A helper function to help to determine whether the passed first path parameter
         * startsWith the second passed string with normalization of paths capabilities and
         * cross platform / OS compatibilities.
         *
         * @param path - Path to be compared with
         * @param startsWith - String to start with
         * @returns boolean
         */
        pathStartsWith: (path: string, startsWith: string) => boolean;
        /**
         * A helper function to help to determine whether the passed first path parameter
         * endsWith the second passed string with normalization of paths capabilities and
         * cross platform / OS compatibilities.
         *
         * @param path - Path to be compared with
         * @param endsWith - String to end with
         * @returns boolean
         */
        pathEndsWith: (path: string, endsWith: string) => boolean;
    };
}
interface PagePropertiesMarkdownSectionOptions {
    /**
     * The list of file names to exclude from the transformation
     *
     * @default ['index.md']
     */
    excludes?: string[];
    /**
     * The function to exclude the file from the transformation
     *
     * @param id - the current transforming module ID (comes from vite when transform hook is called)
     * @param context - the context object, contains several helper functions
     * @returns boolean
     * @default () => false
     */
    exclude?: (id: string, context: Context) => boolean;
}
declare function PagePropertiesMarkdownSection(options?: PagePropertiesMarkdownSectionOptions): Plugin;

interface LanguageHandler {
    regex: RegExp;
    wordsPerMinute: number;
}
interface ReadingTimeStats {
    readingTime: number;
    wordsCount: number;
}

declare function PageProperties(): Plugin;

export { PageProperties, PagePropertiesMarkdownSection };
export type { Context, LanguageHandler, PagePropertiesMarkdownSectionOptions, ReadingTimeStats as ReadingTimeResult };
