import { Store } from 'mem-fs'; import { ParamProvider, ParamProviderFactory } from '../provider/param-provider'; import { PathProvider } from '../provider/path-provider'; import { PhpProvider } from '../provider/php-provider'; export interface Step { /** * A short string describing what the step does. */ type: string; /** * Can this step be composed with other steps? * * This is the case if the step makes no changes to the disk filesystem while running. */ composable: boolean; /** * A list of names of params that this step exposes to other steps. */ exposes: string[]; run: (fs: Store, pathProvider: PathProvider, paramProvider: ParamProvider, phpProvider: PhpProvider) => Promise; /** * Return an object of exposed params. * * The pathProvider and paramProvider will be the same objects provided to the `run` method. */ getExposed(pathProvider: PathProvider, paramProvider: ParamProvider): Record; } interface ShouldRunConfig { optional?: boolean; confirmationMessage?: string; default?: boolean; } interface StoredStep { name?: string; step: Step; shouldRun: ShouldRunConfig; dependencies: StepDependency[]; } interface StepDependency { sourceStep: string; exposedName: string; consumedName?: string; dontRunIfFalsy?: boolean; } export declare class StepManager { protected steps: Array; protected namedSteps: Map; protected exposedParams: Map>; /** * A step is an incremental operation that updates the filesystem. */ step(step: Step, shouldRun?: ShouldRunConfig, dependencies?: StepDependency[]): this; namedStep(name: string, step: Step, shouldRun?: ShouldRunConfig, dependencies?: StepDependency[]): this; atomicGroup(callback: (stepManager: AtomicStepManager) => void): this; protected validateDependencies(step: Step, dependencies: StepDependency[]): void; run(pathProvider: PathProvider, paramProviderFactory: ParamProviderFactory, phpProvider: PhpProvider): Promise; protected stepShouldRun(storedStep: StoredStep, paramProviderFactory: ParamProviderFactory): Promise; protected runStep(storedStep: StoredStep, pathProvider: PathProvider, paramProviderFactory: ParamProviderFactory, phpProvider: PhpProvider): Promise; protected commit(fs: Store): Promise; } declare class AtomicStepManager extends StepManager { constructor(parentNamedSteps: Map, parentExposedParams: Map>); step(step: Step, shouldRun?: ShouldRunConfig, dependencies?: StepDependency[]): this; namedStep(name: string, step: Step, shouldRun?: ShouldRunConfig, dependencies?: StepDependency[]): this; atomicGroup(_callback: (stepManager: AtomicStepManager) => void): this; run(pathProvider: PathProvider, paramProviderFactory: ParamProviderFactory, phpProvider: PhpProvider): Promise; } export {};