/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import { Adapters, TreeSchemaIdentifier } from "../../core";
import { FullSchemaPolicy } from "../modular-schema";
import { SchemaLibraryData, SchemaLintConfiguration, TypedSchemaCollection } from "./schemaBuilder";
import { FieldSchema, TreeSchema } from "./typedTreeSchema";
/**
 * Build and validate a SchemaCollection.
 *
 * As much as possible tries to detect anything that might be a mistake made by the schema author.
 * This will error on some valid but probably never intended to be used patterns
 * (like libraries with the same name, nodes which are impossible to create etc).
 */
export declare function buildViewSchemaCollection(lintConfiguration: SchemaLintConfiguration, libraries: Iterable<SchemaLibraryData>): TypedSchemaCollection;
/**
 * View Schema information collected from a SchemaBuilder.
 * Internal type for unifying document schema and libraries for use in validation and conversion.
 */
export interface ViewSchemaCollection {
    readonly rootFieldSchema?: FieldSchema;
    readonly treeSchema: ReadonlyMap<TreeSchemaIdentifier, TreeSchema>;
    readonly policy: FullSchemaPolicy;
    readonly adapters: Adapters;
}
/**
 * Returns an array of descriptions of errors in the collection.
 *
 * As much as possible tries to detect anything that might be a mistake made by the schema author.
 * This will error on some valid but probably never intended to be used patterns (like never nodes).
 */
export declare function validateViewSchemaCollection(lintConfiguration: SchemaLintConfiguration, collection: ViewSchemaCollection): string[];
export declare function validateRootField(lintConfiguration: SchemaLintConfiguration, collection: ViewSchemaCollection, field: FieldSchema, errors: string[]): void;
export declare function validateField(lintConfiguration: SchemaLintConfiguration, collection: ViewSchemaCollection, field: FieldSchema, describeField: () => string, errors: string[]): void;
/**
 * Reserved field names to avoid collisions with the API.
 */
export declare const bannedFieldNames: Set<string>;
/**
 * Field names starting with these must not be followed by an upper case letter
 */
export declare const fieldApiPrefixes: Set<string>;
export declare function validateStructFieldName(name: string, describeField: () => string, errors: string[]): void;
//# sourceMappingURL=buildViewSchemaCollection.d.ts.map