import { Entity } from '../engine/entity';
import { CompositeDefinition } from './proto/gen/composite.gen';
/**
 * @public
 */
export type CompositeResource = {
    src: string;
    composite: CompositeDefinition;
};
/**
 * @param src - the source path of the composite
 * @public
 */
export type CompositeProvider = {
    getCompositeOrNull(src: string): CompositeResource | null;
    loadComposite?: (src: string) => Promise<CompositeResource>;
    schemas?: Iterable<{
        name: string;
        jsonSchema: any;
    }>;
};
/** @public */
export declare enum EntityMappingMode {
    EMM_NONE = 0,
    EMM_NEXT_AVAILABLE = 1,
    EMM_DIRECT_MAPPING = 2
}
/** @public  */
export type InstanceCompositeOptions = {
    entityMapping?: {
        type: EntityMappingMode.EMM_NEXT_AVAILABLE;
        getNextAvailableEntity: () => Entity | null;
    } | {
        type: EntityMappingMode.EMM_DIRECT_MAPPING;
        getCompositeEntity: (compositeEntity: Entity | number) => Entity;
    };
    rootEntity?: Entity;
    alreadyRequestedSrc?: Set<string>;
};
