import { type ValidatorFn } from '@angular/forms';
import type { AbstractBranchSchema, AbstractComponentContainerSchema, AbstractComponentWrapperSchema, AbstractControlContainerSchema, AbstractControlSchema, AbstractControlWrapperSchema, AbstractSchema, SchemaKey, SingleSchemaKey } from '../schemas';
import { type SchemaLike, SchemaType } from '../schemas/interfaces';
import type { Indexable } from '../types';
import * as i0 from "@angular/core";
export declare class SchemaUtil {
    private readonly schemaMap;
    private readonly schemaPatchers;
    patch<T extends Indexable<AbstractSchema>>(schema: T): T;
    /**
     * Filter out top-level control/control container schemas.
     */
    filterControls(schemas: Indexable<AbstractSchema>[]): (AbstractControlSchema<SchemaKey, any> | AbstractControlContainerSchema<SingleSchemaKey>)[];
    isControlGroup(schema: SchemaLike): schema is AbstractControlContainerSchema;
    isControlArray(schema: SchemaLike): schema is AbstractControlContainerSchema;
    isControlContainer(schema: SchemaLike): schema is AbstractControlContainerSchema;
    isControlWrapper(schema: SchemaLike): schema is AbstractControlWrapperSchema;
    isControl(schema: SchemaLike): schema is AbstractControlSchema;
    isComponentContainer(schema: SchemaLike): schema is AbstractComponentContainerSchema;
    isComponentWrapper(schema: SchemaLike): schema is AbstractComponentWrapperSchema;
    isComponent(schema: SchemaLike): schema is AbstractSchema;
    /**
     * Whether it is a multi-field schema.
     */
    isMultiKeySchema(schema: SchemaLike): boolean;
    /**
     * Whether it is a path field schema.
     */
    isPathKeySchema(schema: SchemaLike): boolean;
    /**
     * Non-control schema, indicating that it or its child nodes
     * do not contain any control schemas.
     */
    isNonControl(schema: SchemaLike): schema is AbstractSchema;
    typeOf(schema: SchemaLike): SchemaType | undefined;
    validatorsOf(schema: AbstractControlSchema): ValidatorFn[];
    parsePathKey(key: string): string[];
    find(schema: Indexable<AbstractBranchSchema>, key: SingleSchemaKey): AbstractSchema | null;
    find(schema: Indexable<AbstractBranchSchema>, key: SchemaKey[]): AbstractSchema | null;
    find(schema: Indexable<AbstractBranchSchema>, path: SingleSchemaKey | SchemaKey[]): AbstractSchema | null;
    static ɵfac: i0.ɵɵFactoryDeclaration<SchemaUtil, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<SchemaUtil>;
}
