import type { BaseQueryFormat, BaseQueryResult, BasicQueryData } from '../../base-query-format';
import type { NodeId } from '../../../r-bridge/lang-4.x/ast/model/processing/node-id';
import Joi from 'joi';
import { executeDependenciesQuery } from './dependencies-query-executor';
import type { FunctionInfo } from './function-info/function-info';
import type { CallContextQueryResult } from '../call-context-query/call-context-query-format';
import type { Range } from 'semver';
import type { AsyncOrSync, MarkOptional } from 'ts-essentials';
import type { NamespaceInfo } from '../../../project/plugins/file-plugins/files/flowr-namespace-file';
export declare const Unknown = "unknown";
export interface DependencyCategorySettings {
    queryDisplayName?: string;
    functions: FunctionInfo[];
    /** this describes the global default value for this category, e.g., 'stdout' for write operations, please be aware, that this can be overwritten by a by-function default value */
    defaultValue?: string;
    /**
     * An optional additional analysis step that is executed after the main function-based analysis has been performed.
     * To add or modify dependency info entries, simply modify the `result` array.
     * @param data  - The basic query data.
     * @param ignoreDefault - Whether the default functions were ignored.
     * @param functions - The functions used for this category.
     * @param queryResults - The results of the call context query.
     * @param result - The current result array to which additional dependency info can be added.
     */
    additionalAnalysis?: (data: BasicQueryData, ignoreDefault: boolean, functions: FunctionInfo[], queryResults: CallContextQueryResult, result: DependencyInfo[]) => AsyncOrSync<void>;
}
export declare const DefaultDependencyCategories: {
    readonly library: {
        readonly queryDisplayName: "Libraries";
        readonly functions: FunctionInfo[];
        readonly defaultValue: "unknown";
        readonly additionalAnalysis: (data: BasicQueryData, ignoreDefault: boolean, _functions: FunctionInfo[], _queryResults: CallContextQueryResult, result: DependencyInfo[]) => Promise<void>;
    };
    readonly source: {
        readonly queryDisplayName: "Sourced Files";
        readonly functions: FunctionInfo[];
        readonly defaultValue: "unknown";
    };
    readonly read: {
        readonly queryDisplayName: "Read Data";
        readonly functions: FunctionInfo[];
        readonly defaultValue: "unknown";
    };
    readonly write: {
        readonly queryDisplayName: "Written Data";
        readonly functions: FunctionInfo[];
        readonly defaultValue: "stdout";
    };
    readonly visualize: {
        readonly queryDisplayName: "Visualizations";
        readonly functions: FunctionInfo[];
    };
    readonly test: {
        readonly queryDisplayName: "Tests";
        readonly functions: FunctionInfo[];
    };
};
export type DefaultDependencyCategoryName = keyof typeof DefaultDependencyCategories;
export type DependencyCategoryName = DefaultDependencyCategoryName | string;
export interface DependenciesQuery extends BaseQueryFormat, Partial<Record<`${DefaultDependencyCategoryName}Functions`, FunctionInfo[]>> {
    readonly type: 'dependencies';
    readonly enabledCategories?: DependencyCategoryName[];
    readonly ignoreDefaultFunctions?: boolean;
    readonly additionalCategories?: Record<string, MarkOptional<DependencyCategorySettings, 'additionalAnalysis'>>;
}
export type DependenciesQueryResult = BaseQueryResult & {
    [C in DefaultDependencyCategoryName]: DependencyInfo[];
} & {
    [S in string]?: DependencyInfo[];
};
export interface DependencyInfo extends Record<string, unknown> {
    nodeId: NodeId;
    functionName: string;
    linkedIds?: readonly NodeId[];
    /** the lexeme is presented whenever the specific info is of {@link Unknown} */
    lexemeOfArgument?: string;
    /** The library name, file, source, destination etc. being sourced, read from, or written to. */
    value?: string;
    versionConstraints?: Range[];
    derivedVersion?: Range;
    namespaceInfo?: NamespaceInfo;
}
/**
 * Gets all dependency categories, including user-defined additional categories.
 */
export declare function getAllCategories(queries: readonly DependenciesQuery[]): Record<DependencyCategoryName, DependencyCategorySettings>;
export declare const DependenciesQueryDefinition: {
    readonly executor: typeof executeDependenciesQuery;
    readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[], queries: readonly import("../../query").Query[]) => true;
    readonly schema: Joi.ObjectSchema<any>;
    readonly flattenInvolvedNodes: (queryResults: BaseQueryResult, query: readonly import("../../query").Query[]) => NodeId[];
};
