/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import { type JsonCompatibleReadOnlyObject } from "../../../util/index.js";
import { NodeKind, type NodeSchemaMetadata, type ImplicitAnnotatedAllowedTypes, type TreeNodeSchemaCorePrivate } from "../../core/index.js";
import type { RecordNodeCustomizableSchema, RecordNodePojoEmulationSchema } from "./recordNodeTypes.js";
/**
 * {@link recordSchema} options.
 * @input
 */
export interface RecordSchemaOptions<TName extends string, TAllowedTypes extends ImplicitAnnotatedAllowedTypes, TImplicitlyConstructable extends boolean, TCustomMetadata = unknown> {
    /**
     * Unique identifier for this schema within this factory's scope.
     */
    readonly identifier: TName;
    readonly customizable: boolean;
    /**
     * The kinds of nodes that are allowed as children of this record.
     */
    readonly info: TAllowedTypes;
    readonly implicitlyConstructable: TImplicitlyConstructable;
    /**
     * Optional ephemeral metadata for the object node schema.
     */
    readonly metadata?: NodeSchemaMetadata<TCustomMetadata>;
    /**
     * Optional persisted metadata for the object node schema.
     */
    readonly persistedMetadata?: JsonCompatibleReadOnlyObject | undefined;
}
/**
 * Define a {@link TreeNodeSchema} for a {@link TreeRecordNode}.
 *
 * @param fields - Schema for fields of the object node's schema. Defines what children can be placed under each key.
 * @param persistedMetadata -
 */
export declare function recordSchema<TName extends string, const TAllowedTypes extends ImplicitAnnotatedAllowedTypes, const TImplicitlyConstructable extends boolean, const TCustomMetadata = unknown>(options: RecordSchemaOptions<TName, TAllowedTypes, TImplicitlyConstructable, TCustomMetadata>): RecordNodeCustomizableSchema<TName, TAllowedTypes, TImplicitlyConstructable, TCustomMetadata> & RecordNodePojoEmulationSchema<TName, TAllowedTypes, TImplicitlyConstructable, TCustomMetadata> & TreeNodeSchemaCorePrivate<string, NodeKind, never, boolean, unknown, unknown>;
//# sourceMappingURL=recordNode.d.ts.map