/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import type { IIdCompressor } from "@fluidframework/id-compressor";
import type { ICodecFamily, ICodecOptions } from "../codec/index.js";
import { type ChangeEncodingContext, type ChangeFamily, type ChangeRebaser, type DeltaDetachedNodeId, type RevisionMetadataSource, type RevisionTag, type RevisionTagCodec, type TaggedChange } from "../core/index.js";
import { type FieldBatchCodec, type ModularChangeset, type TreeChunk, type TreeCompressionStrategy } from "../feature-libraries/index.js";
import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
import { SharedTreeEditBuilder } from "./sharedTreeEditBuilder.js";
/**
 * Implementation of {@link ChangeFamily} that combines edits to fields and schema changes.
 *
 * @sealed
 */
export declare class SharedTreeChangeFamily implements ChangeFamily<SharedTreeEditBuilder, SharedTreeChange>, ChangeRebaser<SharedTreeChange> {
    private readonly idCompressor?;
    static readonly emptyChange: SharedTreeChange;
    readonly codecs: ICodecFamily<SharedTreeChange, ChangeEncodingContext>;
    private readonly modularChangeFamily;
    constructor(revisionTagCodec: RevisionTagCodec, fieldBatchCodec: FieldBatchCodec, codecOptions: ICodecOptions, chunkCompressionStrategy?: TreeCompressionStrategy, idCompressor?: IIdCompressor | undefined);
    buildEditor(mintRevisionTag: () => RevisionTag, changeReceiver: (change: TaggedChange<SharedTreeChange>) => void): SharedTreeEditBuilder;
    compose(changes: TaggedChange<SharedTreeChange>[]): SharedTreeChange;
    invert(change: TaggedChange<SharedTreeChange>, isRollback: boolean, revision: RevisionTag): SharedTreeChange;
    rebase(change: TaggedChange<SharedTreeChange>, over: TaggedChange<SharedTreeChange>, revisionMetadata: RevisionMetadataSource): SharedTreeChange;
    changeRevision(change: SharedTreeChange, newRevision: RevisionTag | undefined, rollbackOf?: RevisionTag): SharedTreeChange;
    get rebaser(): ChangeRebaser<SharedTreeChange>;
}
export declare function hasSchemaChange(change: SharedTreeChange): boolean;
/**
 * Produces an equivalent change with an updated set of appropriate refreshers.
 * @param change - The change to compute refreshers for. Not mutated.
 * @param getDetachedNode - retrieves a {@link TreeChunk} for the corresponding detached node id.
 * Is expected to read from a forest in a state that corresponds to the input context of the given change.
 * @returns An equivalent change with an updated set of appropriate refreshers.
 */
export declare function updateRefreshers(change: SharedTreeChange, getDetachedNode: (id: DeltaDetachedNodeId) => TreeChunk | undefined, relevantRemovedRootsFromDataChange: (taggedChange: ModularChangeset) => Iterable<DeltaDetachedNodeId>, updateDataChangeRefreshers: (change: ModularChangeset, getDetachedNode: (id: DeltaDetachedNodeId) => TreeChunk | undefined, removedRoots: Iterable<DeltaDetachedNodeId>, requireRefreshers: boolean) => ModularChangeset): SharedTreeChange;
//# sourceMappingURL=sharedTreeChangeFamily.d.ts.map