/**
 * @since 2.0.0
 */
import type * as FiberId from "./FiberId.js";
import type * as FiberRef from "./FiberRef.js";
import type * as FiberRefs from "./FiberRefs.js";
/**
 * A `FiberRefsPatch` captures the changes in `FiberRef` values made by a single
 * fiber as a value. This allows fibers to apply the changes made by a workflow
 * without inheriting all the `FiberRef` values of the fiber that executed the
 * workflow.
 *
 * @since 2.0.0
 * @category models
 */
export type FiberRefsPatch = Empty | Add | Remove | Update | AndThen;
/**
 * @since 2.0.0
 * @category models
 */
export interface Empty {
    readonly _tag: "Empty";
}
/**
 * @since 2.0.0
 * @category models
 */
export interface Add {
    readonly _tag: "Add";
    readonly fiberRef: FiberRef.FiberRef<unknown>;
    readonly value: unknown;
}
/**
 * @since 2.0.0
 * @category models
 */
export interface Remove {
    readonly _tag: "Remove";
    readonly fiberRef: FiberRef.FiberRef<unknown>;
}
/**
 * @since 2.0.0
 * @category models
 */
export interface Update {
    readonly _tag: "Update";
    readonly fiberRef: FiberRef.FiberRef<unknown>;
    readonly patch: unknown;
}
/**
 * @since 2.0.0
 * @category models
 */
export interface AndThen {
    readonly _tag: "AndThen";
    readonly first: FiberRefsPatch;
    readonly second: FiberRefsPatch;
}
/**
 * @since 2.0.0
 * @category constructors
 */
export declare const empty: FiberRefsPatch;
/**
 * Constructs a patch that describes the changes between the specified
 * collections of `FiberRef`
 *
 * @since 2.0.0
 * @category constructors
 */
export declare const diff: (oldValue: FiberRefs.FiberRefs, newValue: FiberRefs.FiberRefs) => FiberRefsPatch;
/**
 * Combines this patch and the specified patch to create a new patch that
 * describes applying the changes from this patch and the specified patch
 * sequentially.
 *
 * @since 2.0.0
 * @category constructors
 */
export declare const combine: {
    /**
     * Combines this patch and the specified patch to create a new patch that
     * describes applying the changes from this patch and the specified patch
     * sequentially.
     *
     * @since 2.0.0
     * @category constructors
     */
    (that: FiberRefsPatch): (self: FiberRefsPatch) => FiberRefsPatch;
    /**
     * Combines this patch and the specified patch to create a new patch that
     * describes applying the changes from this patch and the specified patch
     * sequentially.
     *
     * @since 2.0.0
     * @category constructors
     */
    (self: FiberRefsPatch, that: FiberRefsPatch): FiberRefsPatch;
};
/**
 * Applies the changes described by this patch to the specified collection
 * of `FiberRef` values.
 *
 * @since 2.0.0
 * @category destructors
 */
export declare const patch: {
    /**
     * Applies the changes described by this patch to the specified collection
     * of `FiberRef` values.
     *
     * @since 2.0.0
     * @category destructors
     */
    (fiberId: FiberId.Runtime, oldValue: FiberRefs.FiberRefs): (self: FiberRefsPatch) => FiberRefs.FiberRefs;
    /**
     * Applies the changes described by this patch to the specified collection
     * of `FiberRef` values.
     *
     * @since 2.0.0
     * @category destructors
     */
    (self: FiberRefsPatch, fiberId: FiberId.Runtime, oldValue: FiberRefs.FiberRefs): FiberRefs.FiberRefs;
};
//# sourceMappingURL=FiberRefsPatch.d.ts.map