import { Document } from '../../../core/models/Document';
import { Node } from '../../../core/models/Node';
import { IReferenceResolver } from '../../../core/util/IReferenceResolver';
/**
 * Setup the dereferencer execution.
 *
 * @param {Document} source   original {@link Document}
 * @param {*} resolver provide a custom resolver, otherwise the common {@link io.apicurio.datamodels.core.util.ReferenceResolverChain}
 * is used.
 * @param {boolean} strict   If true, and there are any references that cannot be resolved, raise an exception.
 * Defaults to false.
 * @class
 * @author Jakub Senko <jsenko@redhat.com>
 */
export declare class Dereferencer {
    source: Document;
    resolver: IReferenceResolver;
    strict: boolean;
    unresolvable: Array<string>;
    constructor(source?: any, resolver?: any, strict?: any);
    /**
     * Execute the algorithm.
     *
     * @return {Document} dereferenced clone of the source document.
     * @throws java.lang.RuntimeException if strict and some references could not be dereferenced
     */
    dereference(): Document;
    getResolver(): IReferenceResolver;
    isStrict(): boolean;
    /**
     * After {@link #dereference()} is executed and strict is false,
     *
     * @return {string[]} a possibly non-empty set of unresolved references
     */
    getUnresolvableReferences(): Array<string>;
}
export declare namespace Dereferencer {
    /**
     * State for each recursive step
     * @class
     */
    class Context {
        __parent: any;
        parentRef: string;
        node: Node;
        constructor(__parent: any, parentRef: string, node: Node);
        /**
         *
         * @param {*} o
         * @return {boolean}
         */
        equals(o: any): boolean;
        /**
         *
         * @return {number}
         */
        hashCode(): number;
    }
}
