/// <reference types="node" />
import { ITimerJobs, ITimerJobsOptions, TimerCallback } from './interfaces';
import { EmitLevels } from './emit-level';
import { Options } from './options';
export * from './emit-level';
export * from './interfaces';
declare type TimerPredicate = (timer: TimerJobs, index: number, timers: TimerJobs[]) => boolean;
export declare class TimerJobs implements ITimerJobs {
    busy: boolean;
    callback: Function;
    errors: Error[];
    executions: number;
    hasStarted: boolean;
    timer: NodeJS.Timeout;
    options: Options;
    private _emitter;
    private _countdown;
    private startWait;
    static timers: TimerJobs[];
    constructor(options?: ITimerJobsOptions);
    constructor(callback?: TimerCallback, options?: ITimerJobsOptions);
    static set emitter(value: any);
    static get emitter(): any;
    start(): TimerJobs;
    private emit;
    get isStopped(): boolean;
    get isStarted(): boolean;
    stop(): TimerJobs;
    restart(interval?: number): TimerJobs;
    get waitTime(): number;
    get countdown(): number;
    set countdown(value: number);
    set emitLevel(value: EmitLevels);
    get emitLevel(): EmitLevels;
    set infinite(value: boolean);
    get infinite(): boolean;
    set interval(value: number);
    get interval(): number;
    get emitter(): import("eventemitter2").EventEmitter2;
    static findTimers(predicate: TimerPredicate): TimerJobs[];
    static removeTimers(predicate: TimerPredicate): TimerJobs[];
    static removeTimer(timer: TimerJobs): void;
    dispose(): void;
    private go;
    private done;
    private _not;
    private _event;
    private _interval;
    after(interval: number, resetInterval?: boolean): TimerJobs;
    and(interval: number): TimerJobs;
    every(interval: number, resetInterval?: boolean): TimerJobs;
    level(level: EmitLevels): TimerJobs;
    times(countdown: number): TimerJobs;
    namespace(namespace: string): TimerJobs;
    namespacing(namespace: string): TimerJobs;
    reference(reference: string): TimerJobs;
    referencing(reference: string): TimerJobs;
    forever(countdown?: number): TimerJobs;
    using(emitter: any): TimerJobs;
    do(callback: TimerCallback): TimerJobs;
    execute(callback: TimerCallback): TimerJobs;
    on(event: string, callback?: Function): TimerJobs;
    get blocking(): TimerJobs;
    get blocks(): TimerJobs;
    get immediate(): TimerJobs;
    get immediately(): TimerJobs;
    get not(): TimerJobs;
    get ignore(): TimerJobs;
    get ignoring(): TimerJobs;
    get automatically(): TimerJobs;
    get automatic(): TimerJobs;
    get once(): TimerJobs;
    get twice(): TimerJobs;
    get thrice(): TimerJobs;
    get repeat(): TimerJobs;
    get repeating(): TimerJobs;
    get week(): TimerJobs;
    get weeks(): TimerJobs;
    get day(): TimerJobs;
    get days(): TimerJobs;
    get hour(): TimerJobs;
    get hours(): TimerJobs;
    get minute(): TimerJobs;
    get minutes(): TimerJobs;
    get second(): TimerJobs;
    get seconds(): TimerJobs;
    get milliseconds(): TimerJobs;
    get starting(): TimerJobs;
    get stopping(): TimerJobs;
    get restarting(): TimerJobs;
}
