/// <reference types="node" resolution-mode="require"/>
/// <reference types="node" resolution-mode="require"/>
import type { GlobbyFilterFunction } from 'globby';
import * as fs from 'node:fs';
import { App, AppConfig, ConfigType, FrontendProjectType } from './lib/apps/index.js';
import { RemoteAppCommand } from './remote-app-command.js';
type WatchFileEvent = 'change' | 'deleted' | 'new';
interface WatchingChange {
    action: 'push' | 'remove';
    appConfig: AppConfig;
    configFile: string;
}
export declare abstract class PushAppCommand extends RemoteAppCommand {
    frontendPath: string;
    hasLoggedLocalPreviewUrl: boolean;
    logWatchChanges: boolean;
    onWatchChange?: (appConfig?: AppConfig, action?: string, result?: any) => void;
    watchingChangeQueue: Map<string, WatchingChange>;
    watchingFiles: Set<string>;
    watchingIgnoreFilter: GlobbyFilterFunction | null;
    watchingTimer: NodeJS.Timeout | null;
    watchListener: (eventType: fs.WatchEventType, filename: null | string) => Promise<void>;
    protected showFrontendMigrationError(): never;
    buildFrontend(projectType?: FrontendProjectType): Promise<void>;
    chooseAppToPull(query?: any): Promise<App>;
    createAppStorefront(hasOtherStorefronts?: boolean, nonInteractive?: boolean): Promise<any>;
    deployAppFrontend(force?: boolean, log?: boolean): Promise<void>;
    deployFrontend(projectType: FrontendProjectType): Promise<string>;
    ensureAppExists(file?: string, shouldCreate?: boolean): Promise<boolean>;
    ensureLoggedIn(): Promise<void>;
    exec(command: string, cwd?: string, onOutput?: (string: string) => any | false): Promise<void>;
    execFrontend(command: string, onOutput?: (string: string) => any | false): Promise<void>;
    getAllAppStorefronts(params?: {
        type?: string;
    }): Promise<any>;
    getAllStorefronts(params?: {
        app_id?: string;
        theme_app_id?: string;
        type?: string;
    }): Promise<any>;
    getAppStorefront(params?: {
        storefront_id?: string;
        type?: string;
    }): Promise<any>;
    getAppToPull(args: {
        appId?: string;
        targetPath?: string;
    }, shouldChoose?: boolean): Promise<App | undefined>;
    getExistingApp(appId: string): Promise<App>;
    getFrontendDeploymentHash(): Promise<string | undefined>;
    getFrontendProjectType(required?: boolean): Promise<FrontendProjectType | null>;
    getStorefrontToPull(args?: {
        appId?: string;
        targetPath?: string;
    }, flags?: {
        env?: string;
        'storefront-id'?: string;
        'storefront-select'?: boolean;
    }): Promise<any>;
    getStorefrontToPush(flags?: {
        env?: string;
        'storefront-id'?: string;
        'storefront-select'?: boolean;
        yes?: boolean;
    }): Promise<any>;
    setStorefrontEnv(flags: {
        env?: string;
        'storefront-id'?: string;
        'storefront-select'?: boolean;
        yes?: boolean;
    }, defaultStorefront?: any): Promise<void>;
    handleWatchFileChange(configFile: string, configType: ConfigType, event: WatchFileEvent): Promise<void>;
    logAppFrontendUrl(): void;
    logDashboardUrl(flags: {
        [flag: string]: any;
    }): void;
    logStorefrontConnected(): void;
    logStorefrontFrontendUrl(storefront?: any, branchId?: string): void;
    pushFile(relativePath: string): Promise<void>;
    pushFilePath(relativePath: string, force?: boolean): Promise<void>;
    resolveAppPath(appId?: string, targetPath?: string): Promise<string>;
    runWatchChangeQueue(): Promise<void>;
    saveCurrentStorefront(): void;
    logLocalPreviewUrl(): void;
    setWatchingFiles(): Promise<void>;
    startProxyServer(port?: number): Promise<number>;
    updateFrontendDeployment(currentStore: string, projectType: FrontendProjectType, deploymentUrl: string, deploymentHash: string): Promise<void>;
    updateLocalProxy(proxyUrl: string | null, storefrontId?: string): Promise<void>;
    watchForChanges({ logChanges, onChange, syncAll, }?: {
        logChanges?: boolean;
        onChange?: (appConfig?: AppConfig, result?: any) => void;
        syncAll?: boolean;
    }): Promise<fs.FSWatcher>;
    wranglerDeployFrontend(_projectType: FrontendProjectType): Promise<string>;
    private confirmRemoveInstalledApp;
}
export {};
