import type { Compiler } from '../Compiler';
export type ShareScope = string | string[];
export declare function validateShareScope(shareScope: ShareScope, enhanced: boolean, pluginName: string): void;
export type SharePluginOptions = {
    shareScope?: ShareScope;
    shared: Shared;
    enhanced: boolean;
};
export type Shared = (SharedItem | SharedObject)[] | SharedObject;
export type SharedItem = string;
export type SharedObject = {
    [k: string]: SharedConfig | SharedItem;
};
export type TreeShakingConfig = {
    usedExports?: string[];
    mode?: 'server-calc' | 'runtime-infer';
    filename?: string;
};
export type SharedConfig = {
    eager?: boolean;
    import?: false | SharedItem;
    packageName?: string;
    requiredVersion?: false | string;
    shareKey?: string;
    shareScope?: ShareScope;
    singleton?: boolean;
    strictVersion?: boolean;
    version?: false | string;
    treeShaking?: TreeShakingConfig;
};
export type NormalizedSharedOptions = [string, SharedConfig][];
export declare function normalizeSharedOptions(shared: Shared): NormalizedSharedOptions;
export declare function createProvideShareOptions(normalizedSharedOptions: NormalizedSharedOptions): {
    [x: string]: {
        shareKey: string;
        shareScope: ShareScope | undefined;
        version: string | false | undefined;
        eager: boolean | undefined;
        singleton: boolean | undefined;
        requiredVersion: string | false | undefined;
        strictVersion: boolean | undefined;
        treeShakingMode: "runtime-infer" | "server-calc" | undefined;
    };
}[];
export declare function createConsumeShareOptions(normalizedSharedOptions: NormalizedSharedOptions): {
    [x: string]: {
        import: string | false | undefined;
        shareKey: string;
        shareScope: ShareScope | undefined;
        requiredVersion: string | false | undefined;
        strictVersion: boolean | undefined;
        singleton: boolean | undefined;
        packageName: string | undefined;
        eager: boolean | undefined;
        treeShakingMode: "runtime-infer" | "server-calc" | undefined;
    };
}[];
export declare class SharePlugin {
    _shareScope: ShareScope | undefined;
    _consumes: {
        [x: string]: {
            import: string | false | undefined;
            shareKey: string;
            shareScope: ShareScope | undefined;
            requiredVersion: string | false | undefined;
            strictVersion: boolean | undefined;
            singleton: boolean | undefined;
            packageName: string | undefined;
            eager: boolean | undefined;
            treeShakingMode: "runtime-infer" | "server-calc" | undefined;
        };
    }[];
    _provides: {
        [x: string]: {
            shareKey: string;
            shareScope: ShareScope | undefined;
            version: string | false | undefined;
            eager: boolean | undefined;
            singleton: boolean | undefined;
            requiredVersion: string | false | undefined;
            strictVersion: boolean | undefined;
            treeShakingMode: "runtime-infer" | "server-calc" | undefined;
        };
    }[];
    _enhanced: boolean;
    _sharedOptions: NormalizedSharedOptions;
    constructor(options: SharePluginOptions);
    apply(compiler: Compiler): void;
}
