/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import { TreeNavigationResult, ITreeSubscriptionCursor } from "../../core";
import { disposeSymbol, IDisposable } from "../../util";
import { Context } from "./context";
import { Tree, TreeStatus, boxedIterator } from "./editableTreeTypes";
/**
 * Declare an enumerable own property on `T` under the key `key` using the implementation of one on `from`.
 */
export declare function makePropertyEnumerableOwn<T extends object>(target: T, key: keyof T, from: object): void;
/**
 * Modify a property on `T` under the key `key` to be not-enumerable
 */
export declare function makePropertyNotEnumerable<T extends object>(target: T, key: keyof T): void;
/**
 * Like {@link makePropertyNotEnumerable}, but less type safe so it works on private properties.
 */
export declare function makePrivatePropertyNotEnumerable(target: object, key: string | symbol | number): void;
export declare const prepareForEditSymbol: unique symbol;
export declare const isFreedSymbol: unique symbol;
export declare const tryMoveCursorToAnchorSymbol: unique symbol;
export declare const forgetAnchorSymbol: unique symbol;
export declare const cursorSymbol: unique symbol;
export declare const anchorSymbol: unique symbol;
/**
 * This is a base class for lazy (cursor based) UntypedEntity implementations, which uniformly handles cursors and anchors.
 */
export declare abstract class LazyEntity<TSchema = unknown, TAnchor = unknown> implements Tree<TSchema>, IDisposable {
    #private;
    readonly context: Context;
    readonly schema: TSchema;
    readonly [anchorSymbol]: TAnchor;
    protected constructor(context: Context, schema: TSchema, cursor: ITreeSubscriptionCursor, anchor: TAnchor);
    abstract [boxedIterator](): IterableIterator<Tree>;
    abstract treeStatus(): TreeStatus;
    [disposeSymbol](): void;
    [prepareForEditSymbol](): void;
    [isFreedSymbol](): boolean;
    get [cursorSymbol](): ITreeSubscriptionCursor;
    protected abstract [tryMoveCursorToAnchorSymbol](anchor: TAnchor, cursor: ITreeSubscriptionCursor): TreeNavigationResult;
    /**
     * Called when disposing of this target, iff it has an anchor.
     */
    protected abstract [forgetAnchorSymbol](anchor: TAnchor): void;
}
//# sourceMappingURL=lazyEntity.d.ts.map