/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import { Static } from "@sinclair/typebox";
import { Brand } from "../../util/index.js";
export declare const version: 1;
/**
 * Key (aka Name or Label) for a field which is scoped to a specific TreeNodeStoredSchema.
 *
 * Stable identifier, used when persisting data.
 * @internal
 */
export type FieldKey = Brand<string, "tree.FieldKey">;
/**
 * TypeBox Schema for encoding {@link FieldKey} in persisted data.
 */
export declare const FieldKeySchema: import("@sinclair/typebox").TUnsafe<FieldKey>;
/**
 * Identifier for a TreeNode schema.
 * Also known as "Definition"
 *
 * Stable identifier, used when persisting data.
 * @internal
 */
export type TreeNodeSchemaIdentifier<TName extends string = string> = Brand<TName, "tree.TreeNodeSchemaIdentifier">;
/**
 * Identifier for a FieldKind.
 * Refers to an exact stable policy (ex: specific version of a policy),
 * for how to handle (ex: edit and merge edits to) fields marked with this kind.
 * Persisted in documents as part of stored schema.
 * @internal
 */
export type FieldKindIdentifier = Brand<string, "tree.FieldKindIdentifier">;
export declare const FieldKindIdentifierSchema: import("@sinclair/typebox").TUnsafe<FieldKindIdentifier>;
/**
 * TypeBox Schema for encoding {@link TreeNodeSchemaIdentifiers} in persisted data.
 */
export declare const TreeNodeSchemaIdentifierSchema: import("@sinclair/typebox").TUnsafe<TreeNodeSchemaIdentifier<string>>;
export declare const FieldSchemaFormat: import("@sinclair/typebox").TObject<{
    kind: import("@sinclair/typebox").TUnsafe<FieldKindIdentifier>;
    types: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnsafe<TreeNodeSchemaIdentifier<string>>>>;
}>;
/**
 * Persisted version of {@link ValueSchema}.
 */
export declare enum PersistedValueSchema {
    Number = 0,
    String = 1,
    Boolean = 2,
    FluidHandle = 3,
    Null = 4
}
/**
 * Discriminated union content of tree node schema.
 *
 * See {@link DiscriminatedUnionDispatcher} for more information on this pattern.
 */
export declare const TreeNodeSchemaDataFormat: import("@sinclair/typebox").TObject<{
    /**
     * Object node union member.
     */
    object: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TObject<{
        kind: import("@sinclair/typebox").TUnsafe<FieldKindIdentifier>;
        types: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnsafe<TreeNodeSchemaIdentifier<string>>>>;
    }>>>;
    /**
     * Map node union member.
     */
    map: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
        kind: import("@sinclair/typebox").TUnsafe<FieldKindIdentifier>;
        types: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnsafe<TreeNodeSchemaIdentifier<string>>>>;
    }>>;
    /**
     * Leaf node union member.
     */
    leaf: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TEnum<typeof PersistedValueSchema>>;
}>;
export type TreeNodeSchemaDataFormat = Static<typeof TreeNodeSchemaDataFormat>;
export type FieldSchemaFormat = Static<typeof FieldSchemaFormat>;
//# sourceMappingURL=format.d.ts.map