import { MaybeGetter } from './utilities/callOrGet.js';
/**
 * Base configuration for extensions.
 *
 * @typeParam Options - Type for extension options.
 * @typeParam Storage - Type for extension storage.
 */
export interface ExtensionConfig<Options extends Record<string, unknown> = Record<string, never>, Storage extends Record<string, unknown> = Record<string, never>> {
    /** The unique name of the extension */
    name: string;
    /** Function to define extension options */
    addOptions?: MaybeGetter<Options>;
    /** Function to define extension storage */
    addStorage?: MaybeGetter<Storage>;
    /** Additional config fields - use with caution */
    [key: string]: unknown;
}
/**
 * Extension class is used to create extensions.
 */
export declare class Extension<Options extends Record<string, unknown> = Record<string, never>, Storage extends Record<string, unknown> = Record<string, never>> {
    type: "extension";
    name: string;
    options: Options;
    storage: Storage;
    config: ExtensionConfig<Options, Storage>;
    constructor(config: ExtensionConfig<Options, Storage>);
    /**
     * Static method for creating an extension.
     * @param config Configuration for the extension.
     */
    static create<O extends Record<string, unknown> = Record<string, never>, S extends Record<string, unknown> = Record<string, never>>(config: ExtensionConfig<O, S>): Extension<O, S>;
}
//# sourceMappingURL=Extension.d.ts.map