import { CommandParser } from '@redis/client/dist/lib/client/parser';
import { RedisArgument } from '@redis/client/dist/lib/RESP/types';
import { Timestamp, TsRangeCommonOptions } from './helpers';
import { TimeSeriesBucketTimestamp } from './RANGE';
import { TimeSeriesAggregationTypeList } from './RANGE_MULTIAGGR';
/**
 * One aggregation group per key. Each group is a non-empty list of aggregators
 * emitted as a single comma-joined token (e.g. `avg,max`); the group list length
 * must equal the key list length. See RedisTimeSeries#2079.
 */
export type TimeSeriesAggregationTypeGroups = [
    TimeSeriesAggregationTypeList,
    ...Array<TimeSeriesAggregationTypeList>
];
export interface TsNRangeOptions extends TsRangeCommonOptions {
    ALIGN?: Timestamp;
    AGGREGATION?: {
        types: TimeSeriesAggregationTypeGroups;
        timeBucket: Timestamp;
        BUCKETTIMESTAMP?: TimeSeriesBucketTimestamp;
        EMPTY?: boolean;
    };
}
export declare function parseNRangeArguments(parser: CommandParser, fromTimestamp: Timestamp, toTimestamp: Timestamp, options?: TsNRangeOptions): void;
export declare function transformNRangeArguments(parser: CommandParser, keys: Array<RedisArgument>, fromTimestamp: Timestamp, toTimestamp: Timestamp, options?: TsNRangeOptions): void;
declare const _default: {
    readonly IS_READ_ONLY: true;
    readonly parseCommand: (this: void, parser: CommandParser, keys: RedisArgument[], fromTimestamp: Timestamp, toTimestamp: Timestamp, options?: TsNRangeOptions | undefined) => void;
    readonly transformReply: {
        2(reply: import("@redis/client/dist/lib/RESP/types").RespType<42, import("@redis/client/dist/lib/RESP/types").RespType<42, [import("@redis/client/dist/lib/RESP/types").NumberReply<number>, import("@redis/client/dist/lib/RESP/types").RespType<42, import("@redis/client/dist/lib/RESP/types").BlobStringReply<string>[], never, import("@redis/client/dist/lib/RESP/types").BlobStringReply<string>[]>], never, [import("@redis/client/dist/lib/RESP/types").NumberReply<number>, import("@redis/client/dist/lib/RESP/types").RespType<42, import("@redis/client/dist/lib/RESP/types").BlobStringReply<string>[], never, import("@redis/client/dist/lib/RESP/types").BlobStringReply<string>[]>]>[], never, import("@redis/client/dist/lib/RESP/types").RespType<42, [import("@redis/client/dist/lib/RESP/types").NumberReply<number>, import("@redis/client/dist/lib/RESP/types").RespType<42, import("@redis/client/dist/lib/RESP/types").BlobStringReply<string>[], never, import("@redis/client/dist/lib/RESP/types").BlobStringReply<string>[]>], never, [import("@redis/client/dist/lib/RESP/types").NumberReply<number>, import("@redis/client/dist/lib/RESP/types").RespType<42, import("@redis/client/dist/lib/RESP/types").BlobStringReply<string>[], never, import("@redis/client/dist/lib/RESP/types").BlobStringReply<string>[]>]>[]>): {
            timestamp: import("@redis/client/dist/lib/RESP/types").NumberReply<number>;
            values: number[];
        }[];
        3(reply: import("./helpers").PivotSamplesRawReply): {
            timestamp: import("@redis/client/dist/lib/RESP/types").NumberReply<number>;
            values: import("@redis/client/dist/lib/RESP/types").ArrayReply<import("@redis/client/dist/lib/RESP/types").DoubleReply<number>>;
        }[];
    };
};
export default _default;
//# sourceMappingURL=NRANGE.d.ts.map