/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import { IChannelAttributes, IChannelFactory, IChannelServices, IFluidDataStoreRuntime } from "@fluidframework/datastore-definitions";
import { ISharedObjectKind } from "@fluidframework/shared-object-base";
import { SharedTreeOptions } from "./shared-tree/index.js";
import { ITree } from "./simple-tree/index.js";
/**
 * A channel factory that creates an {@link ITree}.
 */
export declare class TreeFactory implements IChannelFactory<ITree> {
    private readonly options;
    static readonly type = "https://graph.microsoft.com/types/tree";
    static readonly attributes: IChannelAttributes;
    readonly type = "https://graph.microsoft.com/types/tree";
    readonly attributes: IChannelAttributes;
    constructor(options: SharedTreeOptions);
    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 strongly typed JSON-like trees
 * of objects, arrays, and other data types.
 * @public
 */
export declare const SharedTree: ISharedObjectKind<ITree>;
/**
 * {@link SharedTree} but allowing a non-default configuration.
 * @remarks
 * This is useful for debugging and testing to opt into extra validation or see if opting out of some optimizations fixes an issue.
 * @example
 * ```typescript
 * import {
 * 	ForestType,
 * 	TreeCompressionStrategy,
 * 	configuredSharedTree,
 * 	typeboxValidator,
 * 	// eslint-disable-next-line import/no-internal-modules
 * } from "@fluidframework/tree/internal";
 * const SharedTree = configuredSharedTree({
 * 	forest: ForestType.Reference,
 * 	jsonValidator: typeboxValidator,
 * 	treeEncodeType: TreeCompressionStrategy.Uncompressed,
 * });
 * ```
 * @privateRemarks
 * TODO:
 * Expose Ajv validator for better error message quality somehow.
 * Maybe as part of a test utils or dev-tool package?
 * @internal
 */
export declare function configuredSharedTree(options: SharedTreeOptions): ISharedObjectKind<ITree>;
//# sourceMappingURL=treeFactory.d.ts.map