import type { Fqn } from '@likec4/core';
import type { DocumentCache, LangiumDocuments, Stream } from 'langium';
import { MultiMap } from 'langium';
import { type DeploymentAstNodeDescription, type LikeC4LangiumDocument, ast } from '../ast';
import type { LikeC4Services } from '../module';
import type { LikeC4NameProvider } from '../references';
export declare class DeploymentsIndex {
    private services;
    protected Names: LikeC4NameProvider;
    protected langiumDocuments: LangiumDocuments;
    protected documentCache: DocumentCache<string, DocumentDeploymentsIndex>;
    constructor(services: LikeC4Services);
    private documents;
    get(document: LikeC4LangiumDocument): DocumentDeploymentsIndex;
    /**
     * Nested elements (nodes/artifacts) of the node
     * @param nodeName Name of the deployment node
     * @returns Stream of artifacts
     */
    nested(node: ast.DeploymentNode): Stream<DeploymentAstNodeDescription>;
    byFqn(fqnName: string): Stream<DeploymentAstNodeDescription>;
    getFqn(node: ast.DeploymentElement): Fqn;
    createDocumentIndex(document: LikeC4LangiumDocument): DocumentDeploymentsIndex;
}
/**
 * Index of deployment elements in the document
 */
export declare class DocumentDeploymentsIndex {
    private _rootNodes;
    /**
     * Nested of a deployment node
     */
    private _nested;
    /**
     * All elements by FQN
     */
    private _byfqn;
    static readonly EMPTY: DocumentDeploymentsIndex;
    constructor(_rootNodes: Array<DeploymentAstNodeDescription>, 
    /**
     * Nested of a deployment node
     */
    _nested: MultiMap<string, DeploymentAstNodeDescription>, 
    /**
     * All elements by FQN
     */
    _byfqn: MultiMap<string, DeploymentAstNodeDescription>);
    rootNodes(): readonly DeploymentAstNodeDescription[];
    byFqn(fqnName: string): readonly DeploymentAstNodeDescription[];
    /**
     * Returns artifacts of a deployment node
     * @param nodeName Name of the deployment node
     * @returns Stream of artifacts
     */
    nested(nodeName: string): readonly DeploymentAstNodeDescription[];
    /**
     * Returns all deployment elements in the document,
     * with unique combination "type and name"
     */
    unique(): readonly DeploymentAstNodeDescription[];
}
