/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import { SessionSpaceCompressedId } from "@fluidframework/runtime-definitions";
import { FieldKey, TreeNodeSchemaIdentifier } from "../../core";
import { BrandedType } from "../../util";
import { ObjectNodeSchema, TreeNodeSchema } from "../typed-schema";
import { EditableTreeEvents } from "../untypedTree";
import { TreeContext } from "./context";
import { FlexibleNodeContent, ObjectNode, ObjectNodeTyped, TreeField, TreeStatus, TypedNode, boxedIterator } from "./editableTreeTypes";
/**
 * Used to acquire the content of a raw object node.
 */
export declare const nodeContent: unique symbol;
/**
 * Creates a node that falsely pretends to satisfy the given schema while wrapping the given node content.
 * Retrieve the node content via {@link nodeContent}.
 *
 * @remarks This is useful for creating "raw" nodes: nodes which capture data about a pending insertion but are not yet inserted.
 * These raw nodes can be then used on the right-hand side of an assignment (via `=`) to the tree.
 * However, their properties and methods should not be inspected (other than `schema` and `type`) since they are not implemented; they will error.
 *
 * @privateRemarks TODO: Generate these from schema, and use them to support `=`.
 */
export declare function createRawObjectNode<TSchema extends ObjectNodeSchema>(schema: TSchema, content: FlexibleNodeContent<[TSchema]>): RawObjectNode<TSchema> & ObjectNodeTyped<TSchema>;
declare class RawObjectNode<TSchema extends ObjectNodeSchema> implements ObjectNode {
    readonly schema: TSchema;
    constructor(schema: TSchema, content: FlexibleNodeContent<[TSchema]>);
    readonly [nodeContent]: FlexibleNodeContent<[TSchema]>;
    get type(): TreeNodeSchemaIdentifier;
    get context(): TreeContext;
    get parentField(): {
        readonly parent: TreeField;
        readonly index: number;
    };
    tryGetField(key: FieldKey): TreeField | undefined;
    [boxedIterator](): IterableIterator<TreeField>;
    on<K extends keyof EditableTreeEvents>(eventName: K, listener: EditableTreeEvents[K]): () => void;
    is<TSchemaCheck extends TreeNodeSchema>(schema: TSchemaCheck): this is TypedNode<TSchemaCheck>;
    treeStatus(): TreeStatus;
    get localNodeKey(): BrandedType<SessionSpaceCompressedId, "Local Node Key"> | undefined;
}
export declare const rawObjectErrorMessage = "Newly created node must be inserted into the tree before being queried";
export {};
//# sourceMappingURL=rawObjectNode.d.ts.map