/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import { TreeStoredSchema, ValueSchema, FieldStoredSchema, TreeTypeSet, SchemaData } from "../../core";
import { FullSchemaPolicy } from "./fieldKind";
/**
 * @returns true iff `superset` is a superset of `original`.
 *
 * This does not require a strict (aka proper) superset: equivalent schema will return true.
 *
 * `undefined` TreeStoredSchema means the schema is not present (and thus treated as a NeverTree).
 */
export declare function allowsTreeSuperset(policy: FullSchemaPolicy, originalData: SchemaData, original: TreeStoredSchema | undefined, superset: TreeStoredSchema | undefined): boolean;
/**
 * @returns true iff `superset` is a superset of `original`.
 *
 * This does not require a strict (aka proper) superset: equivalent schema will return true.
 */
export declare function allowsValueSuperset(original: ValueSchema | undefined, superset: ValueSchema | undefined): boolean;
/**
 * @returns true iff `superset` is a superset of `original`.
 *
 * This does not require a strict (aka proper) superset: equivalent schema will return true.
 */
export declare function allowsFieldSuperset(policy: FullSchemaPolicy, originalData: SchemaData, original: FieldStoredSchema, superset: FieldStoredSchema): boolean;
/**
 * @returns true iff `superset` is a superset of `original`.
 *
 * This does not require a strict (aka proper) superset: equivalent schema will return true.
 */
export declare function allowsTreeSchemaIdentifierSuperset(original: TreeTypeSet, superset: TreeTypeSet): boolean;
/**
 * @returns true iff `superset` is a superset of `original`.
 *
 * This does not require a strict (aka proper) superset: equivalent schema will return true.
 *
 * A version of this that assumes a specific root field could be slightly more permissive in some simple cases,
 * however if any extra fields and fields with unconstrained types are reachable,
 * it would have to compare everything anyway.
 */
export declare function allowsRepoSuperset(policy: FullSchemaPolicy, original: SchemaData, superset: SchemaData): boolean;
/**
 * @public
 */
export declare function isNeverField(policy: FullSchemaPolicy, originalData: SchemaData, field: FieldStoredSchema): boolean;
export declare function isNeverFieldRecursive(policy: FullSchemaPolicy, originalData: SchemaData, field: FieldStoredSchema, parentTypeStack: Set<TreeStoredSchema>): boolean;
/**
 * Returns true iff there are no possible trees that could meet this schema.
 * Trees which are infinite (like endless linked lists) are considered impossible.
 *
 * `undefined` means the schema is not present and thus a NeverTree.
 */
export declare function isNeverTree(policy: FullSchemaPolicy, originalData: SchemaData, tree: TreeStoredSchema | undefined): boolean;
/**
 * Returns true iff there are no possible trees that could meet this schema.
 * Trees which are infinite (like endless linked lists) are considered impossible.
 *
 * `undefined` means the schema is not present and thus a NeverTree.
 */
export declare function isNeverTreeRecursive(policy: FullSchemaPolicy, originalData: SchemaData, tree: TreeStoredSchema | undefined, parentTypeStack: Set<TreeStoredSchema>): boolean;
export declare function normalizeField(schema: FieldStoredSchema | undefined): FieldStoredSchema;
//# sourceMappingURL=comparison.d.ts.map