import type { AssetManifest, IManifestEntry } from '@aws-cdk/cdk-assets-lib';
import type * as cxapi from '@aws-cdk/cloud-assembly-api';
export declare enum DeploymentState {
    PENDING = "pending",
    QUEUED = "queued",
    DEPLOYING = "deploying",
    COMPLETED = "completed",
    FAILED = "failed",
    SKIPPED = "skipped"
}
export type WorkNode = StackNode | AssetBuildNode | AssetPublishNode | MarkerNode;
export interface WorkNodeCommon {
    readonly id: string;
    readonly dependencies: Set<string>;
    deploymentState: DeploymentState;
    /** Some readable information to attach to the id, which may be unreadable */
    readonly note?: string;
    /** Sort by priority when picking up work, higher is earlier */
    readonly priority?: number;
}
export interface StackNode extends WorkNodeCommon {
    readonly type: 'stack';
    readonly stack: cxapi.CloudFormationStackArtifact;
}
export interface AssetBuildNode extends WorkNodeCommon {
    readonly type: 'asset-build';
    /** The asset manifest this asset resides in (artifact) */
    readonly assetManifestArtifact: cxapi.AssetManifestArtifact;
    /** The asset manifest this asset resides in */
    readonly assetManifest: AssetManifest;
    /** The stack this asset was defined in (used for environment settings) */
    readonly parentStack: cxapi.CloudFormationStackArtifact;
    /** The asset that needs to be built */
    readonly asset: IManifestEntry;
}
export interface AssetPublishNode extends WorkNodeCommon {
    readonly type: 'asset-publish';
    /** The asset manifest this asset resides in (artifact) */
    readonly assetManifestArtifact: cxapi.AssetManifestArtifact;
    /** The asset manifest this asset resides in */
    readonly assetManifest: AssetManifest;
    /** The stack this asset was defined in (used for environment settings) */
    readonly parentStack: cxapi.CloudFormationStackArtifact;
    /** The asset that needs to be published */
    readonly asset: IManifestEntry;
}
/**
 * A node that represents a message to the IoHost to be emitted at a certain point in the graph execution.
 *
 * These are used to bookend certain parts of the graph.
 */
export interface MarkerNode extends WorkNodeCommon {
    readonly type: 'marker';
    /** The event to emit when this node is reached. */
    readonly marker: {
        type: 'start-asset';
        asset: IManifestEntry;
    } | {
        type: 'end-asset';
        asset: IManifestEntry;
    };
}
//# sourceMappingURL=work-graph-types.d.ts.map