import { Ticker } from './utils/ticker';
/**
 * {@link FlushPolicy}.{@link FlushPolicy.intervalOrBufferSize}に指定するコンフィグです。
 * @category Flush Policy
 */
export interface IntervalOnlyConfig {
    /**
     * フラッシュインターバル（秒）。
     * @default {@link FlushPolicy}.{@link FlushPolicy.DEFAULT_INTERVAL}
     */
    interval?: number;
}
/**
 * {@link FlushPolicy}.{@link FlushPolicy.bufferSizeOnly}に指定するコンフィグです。
 * @category Flush Policy
 */
export interface BufferSizeOnlyConfig {
    /**
     * バッファサイズ（Byte）。
     * @default {@link FlushPolicy}.{@link FlushPolicy.DEFAULT_BUFFER_SIZE}
     */
    bufferSize?: number;
}
/**
 * {@link FlushPolicy}.{@link FlushPolicy.bufferSizeOnly}に指定するコンフィグです。
 * @category Flush Policy
 */
export interface IntervalOrBufferSizeConfig {
    /**
     * フラッシュインターバル（秒）。
     * @default {@link FlushPolicy}.{@link FlushPolicy.DEFAULT_INTERVAL}
     */
    interval?: number;
    /**
     * バッファサイズ（Byte）。
     * @default {@link FlushPolicy}.{@link FlushPolicy.DEFAULT_BUFFER_SIZE}
     */
    bufferSize?: number;
}
export type FlushPolicyConfig = {
    oneofKind: (typeof FlushPolicy.TYPE)['IMMEDIATELY'];
} | {
    oneofKind: (typeof FlushPolicy.TYPE)['INTERVAL_ONLY'];
    config: Required<IntervalOnlyConfig>;
} | {
    oneofKind: (typeof FlushPolicy.TYPE)['BUFFER_SIZE_ONLY'];
    config: Required<BufferSizeOnlyConfig>;
} | {
    oneofKind: (typeof FlushPolicy.TYPE)['INTERVAL_OR_BUFFER_SIZE'];
    config: Required<IntervalOrBufferSizeConfig>;
} | {
    oneofKind: (typeof FlushPolicy.TYPE)['NO_FLUSH'];
};
/**
 * Upstreamのフラッシュの方法について定義します。
 * @category Flush Policy
 */
export declare class FlushPolicy {
    #private;
    /** バッファサイズのデフォルト値です（Byte）。*/
    static readonly DEFAULT_BUFFER_SIZE = 100000;
    /** インターバルのデフォルト値です（秒）。*/
    static readonly DEFAULT_INTERVAL = 1;
    /**
     * @internal
     */
    static TYPE: {
        readonly IMMEDIATELY: "Immediately";
        readonly INTERVAL_ONLY: "IntervalOnly";
        readonly BUFFER_SIZE_ONLY: "BufferSizeOnly";
        readonly INTERVAL_OR_BUFFER_SIZE: "IntervalOrBufferSize";
        readonly NO_FLUSH: "NoFlush";
    };
    /**
     * 即時フラッシュを行う{@link FlushPolicy}を作成します。
     */
    static immediately(): FlushPolicy;
    /**
     * インターバルによるフラッシュを行う{@link FlushPolicy}を作成します。
     * @param interval フラッシュインターバル（秒）。引数を省略、または `undefined` を指定した時は、{@link FlushPolicy}.{@link FlushPolicy.DEFAULT_INTERVAL}が使用されます。
     */
    static intervalOnly(interval?: number): FlushPolicy;
    /**
     * バッファサイズによるフラッシュを行う{@link FlushPolicy}を作成します。
     * @param bufferSize バッファサイズ（Byte）。引数を省略、または `undefined` を指定した時は、{@link FlushPolicy}.{@link FlushPolicy.DEFAULT_BUFFER_SIZE}が使用されます。
     */
    static bufferSizeOnly(bufferSize?: number): FlushPolicy;
    /**
     * インターバル、またはバッファサイズによるフラッシュを行う{@link FlushPolicy}を作成します。
     * @param interval フラッシュインターバル（秒）。 引数を省略、または `undefined` を指定した時は、{@link FlushPolicy}.{@link FlushPolicy.DEFAULT_INTERVAL}が使用されます。
     * @param bufferSize バッファサイズ（Byte）。引数を省略、または `undefined` を指定した時は、{@link FlushPolicy}.{@link FlushPolicy.DEFAULT_BUFFER_SIZE}が使用されます。
     */
    static intervalOrBufferSize(interval?: number, bufferSize?: number): FlushPolicy;
    /**
     * フラッシュを行わない{@link FlushPolicy}を作成します。
     * このFlushPolicyを指定した場合は、明示的にフラッシュを行う必要があります。
     */
    static noFlush(): FlushPolicy;
    /**
     * @internal
     */
    constructor(config: FlushPolicyConfig);
    /**
     * @hidden
     */
    getConfig(): FlushPolicyConfig;
}
/**
 * @internal
 */
export declare class FlushPolicyHelper {
    static isFlush(flushPolicy: FlushPolicy, bufferSize: number): boolean;
    static ticker(flushPolicy: FlushPolicy, signal: AbortSignal): ReturnType<(typeof Ticker)['of']> | undefined;
}
