export declare enum PartitionStrategy {
    Hash = "HASH"
}
export declare enum ConfigurationType {
    Index = "index",
    Override = "override",
    NodeMap = "nodeMap"
}
export interface Lifecycle {
    drop?: boolean;
}
export interface Partition {
    exprs: string[];
    strategy?: PartitionStrategy;
    num_partition?: number;
}
export type PostProcessHandler = (this: IndexConfigurationBase, require: NodeRequire, process: NodeJS.Process) => void;
export interface IndexConfigurationBase {
    name?: string;
    scope?: string;
    collection?: string;
    is_primary?: boolean;
    index_key?: string | string[];
    condition?: string | null;
    partition?: Partition | null;
    manual_replica?: boolean;
    num_replica?: number;
    nodes?: string[];
    retain_deleted_xattr?: boolean;
    lifecycle?: Lifecycle;
    post_process?: string | PostProcessHandler;
}
export interface IndexConfiguration extends Omit<IndexConfigurationBase, "post_process"> {
    type?: ConfigurationType.Index;
}
export interface OverrideConfiguration extends IndexConfigurationBase {
    type: ConfigurationType.Override;
}
export interface NodeMapConfiguration {
    type: ConfigurationType.NodeMap;
    map: {
        [key: string]: string;
    };
}
export type ConfigurationItem = IndexConfiguration | OverrideConfiguration | NodeMapConfiguration;
export declare function isIndex(item: ConfigurationItem): item is IndexConfiguration;
export declare function isOverride(item: ConfigurationItem): item is OverrideConfiguration;
export declare function isNodeMap(item: ConfigurationItem): item is NodeMapConfiguration;
export declare function isSameIndex(a: IndexConfigurationBase, b: IndexConfigurationBase): boolean;
