/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import { IChannelAttributes, IChannelFactory, IChannelServices, IFluidDataStoreRuntime } from "@fluidframework/datastore-definitions";
import { IFluidHandle, IFluidLoadable } from "@fluidframework/core-interfaces";
import { ITelemetryContext, ISummaryTreeWithStats, IExperimentalIncrementalSummaryContext, IGarbageCollectionData } from "@fluidframework/runtime-definitions";
import { SharedTreeOptions } from "./shared-tree";
import { ITree, ImplicitFieldSchema, TreeConfiguration, TreeFieldFromImplicitField, TreeView } from "./class-tree";
/**
 * Configuration to specialize a Tree DDS for a particular use.
 * @alpha
 */
export interface TreeOptions extends SharedTreeOptions {
    /**
     * Name appended to {@link @fluidframework/datastore-definitions#IChannelFactory."type"} to identify this factory configuration.
     * @privateRemarks
     * TODO: evaluate if this design is a good idea, or if "subtype" should be removed.
     * TODO: evaluate if schematize should be separated from DDS construction.
     */
    readonly subtype?: string;
}
/**
 * A channel factory that creates an {@link ITree}.
 * @alpha
 */
export declare class TreeFactory implements IChannelFactory {
    private readonly options;
    readonly type: string;
    readonly attributes: IChannelAttributes;
    constructor(options: TreeOptions);
    load(runtime: IFluidDataStoreRuntime, id: string, services: IChannelServices, channelAttributes: Readonly<IChannelAttributes>): Promise<ITree>;
    create(runtime: IFluidDataStoreRuntime, id: string): ITree;
}
/**
 * SharedTree is a hierarchical data structure for collaboratively editing JSON-like trees
 * of objects, arrays, and other data types.
 *
 * @internal
 */
export declare class SharedTree implements ITree {
    static getFactory(): TreeFactory;
    schematize<TRoot extends ImplicitFieldSchema>(config: TreeConfiguration<TRoot>): TreeView<TreeFieldFromImplicitField<TRoot>>;
    private useFactory;
    get id(): string;
    get attributes(): IChannelAttributes;
    get handle(): IFluidHandle;
    get IFluidLoadable(): IFluidLoadable;
    getAttachSummary(fullTree?: boolean | undefined, trackState?: boolean | undefined, telemetryContext?: ITelemetryContext | undefined): ISummaryTreeWithStats;
    summarize(fullTree?: boolean | undefined, trackState?: boolean | undefined, telemetryContext?: ITelemetryContext | undefined, incrementalSummaryContext?: IExperimentalIncrementalSummaryContext | undefined): Promise<ISummaryTreeWithStats>;
    isAttached(): boolean;
    connect(services: IChannelServices): void;
    getGCData(fullGC?: boolean | undefined): IGarbageCollectionData;
}
//# sourceMappingURL=treeFactory.d.ts.map