import { MetadataXml, SourceAdapter } from '../types';
import { ForceIgnore } from '../forceIgnore';
import { NodeFSTreeContainer, TreeContainer } from '../treeContainers';
import { SourceComponent } from '../sourceComponent';
import { SourcePath } from '../../common/types';
import { MetadataType } from '../../registry/types';
import { RegistryAccess } from '../../registry/registryAccess';
export declare abstract class BaseSourceAdapter implements SourceAdapter {
    protected type: MetadataType;
    protected registry: RegistryAccess;
    protected forceIgnore: ForceIgnore;
    protected tree: TreeContainer;
    /**
     * Whether or not an adapter should expect a component to be in its own, self-named
     * folder, including its root metadata xml file.
     */
    protected ownFolder: boolean;
    protected metadataWithContent: boolean;
    constructor(type: MetadataType, registry?: RegistryAccess, forceIgnore?: ForceIgnore, tree?: NodeFSTreeContainer);
    getComponent(path: SourcePath, isResolvingSource?: boolean): SourceComponent | undefined;
    /**
     * Control whether metadata and content metadata files are allowed for an adapter.
     */
    allowMetadataWithContent(): boolean;
    /**
     * If the path given to `getComponent` is the root metadata xml file for a component,
     * parse the name and return it. This is an optimization to not make a child adapter do
     * anymore work to find it.
     *
     * @param path File path of a metadata component
     */
    protected parseAsRootMetadataXml(path: SourcePath): MetadataXml | undefined;
    protected parseMetadataXml(path: SourcePath): MetadataXml | undefined;
    /**
     * Determine the related root metadata xml when the path given to `getComponent` isn't one.
     *
     * @param trigger Path that `getComponent` was called with
     */
    protected abstract getRootMetadataXmlPath(trigger: SourcePath): SourcePath | undefined;
    /**
     * Populate additional properties on a SourceComponent, such as source files and child components.
     * The component passed to `populate` has its fullName, xml, and type properties already set.
     *
     * @param component Component to populate properties on
     * @param trigger Path that `getComponent` was called with
     */
    protected abstract populate(trigger: SourcePath, component?: SourceComponent, isResolvingSource?: boolean): SourceComponent | undefined;
}
