import * as chokidar from 'chokidar';
import type * as Dockerode from 'dockerode';
import type { Composition } from '@balena/compose/dist/parse';
import type { BuildTask } from '@balena/compose/dist/multibuild';
import Logger = require('../logger');
import type DeviceAPI from './api';
import type { DeviceDeployOptions } from './deploy';
type StageImageIDs = Dictionary<string[]>;
export interface LivepushOpts {
    buildContext: string;
    composition: Composition;
    buildTasks: BuildTask[];
    docker: Dockerode;
    api: DeviceAPI;
    logger: Logger;
    imageIds: StageImageIDs;
    deployOpts: DeviceDeployOptions;
}
export declare class LivepushManager {
    private lastDeviceStatus;
    private containers;
    private dockerfilePaths;
    private deviceInfo;
    private deployOpts;
    private buildContext;
    private composition;
    private buildTasks;
    private docker;
    private api;
    private logger;
    private imageIds;
    private updateEventsWaiting;
    private deleteEventsWaiting;
    private rebuildsRunning;
    private rebuildRunningIds;
    private rebuildsCancelled;
    constructor(opts: LivepushOpts);
    init(): Promise<void>;
    cleanup(): Promise<void>;
    protected setupFilesystemWatcher(serviceName: string, rootContext: string, serviceContext: string, changedPathHandler: (serviceName: string, changedPath: string) => void, dockerignoreByService: {
        [serviceName: string]: import('@balena/dockerignore').Ignore;
    }, multiDockerignore: boolean): chokidar.FSWatcher;
    close(): void;
    static preprocessDockerfile(content: string): string;
    private awaitDeviceStateSettle;
    private handleFSEvents;
    private handleServiceRebuild;
    private cancelRebuild;
    private assignLivepushOutputHandlers;
    private getDockerfilePathFromTask;
    private getDebouncedEventHandler;
}
export default LivepushManager;
