/// <reference types="node" resolution-mode="require"/>
import { ExtensionsPayloadStore } from './payload/store.js';
import { ExtensionDevOptions } from '../extension.js';
import { AppInterface } from '../../../models/app/app.js';
import { ExtensionInstance } from '../../../models/extensions/extension-instance.js';
import { ExtensionBuildOptions } from '../../build/extension.js';
import { AbortSignal } from '@shopify/cli-kit/node/abort';
import { Writable } from 'stream';
export interface WatchEvent {
    path: string;
    type: 'build' | 'localization';
}
export interface FileWatcherOptions {
    devOptions: ExtensionDevOptions;
    payloadStore: ExtensionsPayloadStore;
}
export interface FileWatcher {
    close: () => void;
}
export declare function setupBundlerAndFileWatcher(options: FileWatcherOptions): Promise<{
    close: () => void;
}>;
export interface SetupExtensionWatcherOptions {
    extension: ExtensionInstance;
    app: AppInterface;
    url: string;
    stdout: Writable;
    stderr: Writable;
    signal: AbortSignal;
    onChange: () => Promise<void>;
}
export declare function setupExtensionWatcher({ extension, app, url, stdout, stderr, signal, onChange, }: SetupExtensionWatcherOptions): Promise<void>;
export declare function reloadAndbuildIfNecessary(extension: ExtensionInstance, build: boolean, options: ExtensionBuildOptions): Promise<void>;
