import { ExprType } from "../type/ExprType.js";
import { Expr } from "../expression/Expr.js";
import { ArgumentDocumentation, LocalizedText } from "../documentation/Documentation.js";
export type BuiltinPropertyDefinition = {
    name: string;
    kind: "property";
    valueType: ExprType;
    documentation?: LocalizedText;
};
export type BuiltinFunctionDefinition = {
    name: string;
    kind: "function";
    returnType: ExprType;
    argumentTypes: Array<ExprType>;
    documentation?: LocalizedText;
    argumentDocumentation?: Array<ArgumentDocumentation>;
};
export type BuiltinMemberDefinition = BuiltinPropertyDefinition | BuiltinFunctionDefinition;
export declare function isBuiltinPropertyDefinition(definition: BuiltinMemberDefinition | undefined): definition is BuiltinPropertyDefinition;
export declare function isBuiltinFunctionDefinition(definition: BuiltinMemberDefinition | undefined): definition is BuiltinFunctionDefinition;
export type BuiltinVariableDefinition = {
    name: string;
    type?: ExprType;
    documentation?: LocalizedText;
    members?: Array<BuiltinMemberDefinition>;
    createReferenceExpr?: () => Expr<any>;
};
export type RegisteredBuiltinVariableDefinition = {
    name: string;
    type: ExprType;
    documentation?: LocalizedText;
    members: Map<string, BuiltinMemberDefinition>;
    createReferenceExpr: () => Expr<any>;
};
export declare class BuiltinVariableRegistry {
    private static readonly defaultRegistry;
    private readonly builtinVariables;
    constructor(definitions?: Array<BuiltinVariableDefinition>);
    static getDefaultRegistry(): BuiltinVariableRegistry;
    static normalizeName(name: string): string;
    static isBuiltinVariable(name: string): boolean;
    static isReservedName(name: string): boolean;
    static getDefinition(name: string): RegisteredBuiltinVariableDefinition | undefined;
    isBuiltinVariable(name: string): boolean;
    isReservedName(name: string): boolean;
    getDefinition(name: string): RegisteredBuiltinVariableDefinition | undefined;
    getDefinitions(): Array<RegisteredBuiltinVariableDefinition>;
    private register;
    private registerMembers;
}
