/**
 * Generic function value lowering for variable declarations
 *
 * Handles conversion of generic arrow/function expressions assigned to
 * variables into function declarations, and resolution of generic
 * function alias chains:
 * - resolveGenericFunctionValueReturnType
 * - isSupportedGenericFunctionValueDeclaration
 * - resolveSymbol
 * - resolveGenericFunctionAliasTargetFromSymbol
 * - isSupportedGenericFunctionAliasDeclaration
 * - createTypeParameterTypeArgs
 * - createIdentifierArgumentsForParameters
 * - convertGenericFunctionValueDeclaration
 * - convertGenericFunctionValueAliasDeclaration
 */
import * as ts from "typescript";
import { IrArrowFunctionExpression, IrFunctionDeclaration, IrFunctionExpression, IrType } from "../../../types.js";
import type { ProgramContext } from "../../../program-context.js";
import { type GenericFunctionValueNode } from "../../../../generic-function-values.js";
export declare const resolveGenericFunctionValueReturnType: (initializer: IrArrowFunctionExpression | IrFunctionExpression) => IrType | undefined;
export declare const isSupportedGenericFunctionValueDeclaration: (decl: ts.VariableDeclaration, checker: ts.TypeChecker, writtenSymbols: ReadonlySet<ts.Symbol>) => decl is ts.VariableDeclaration & {
    readonly name: ts.Identifier;
    readonly initializer: GenericFunctionValueNode;
};
export declare const resolveSymbol: (checker: ts.TypeChecker, node: ts.Node) => ts.Symbol | undefined;
export type GenericFunctionAliasTarget = {
    readonly kind: "genericValue";
    readonly name: string;
    readonly initializer: GenericFunctionValueNode;
} | {
    readonly kind: "functionDeclaration";
    readonly declaration: ts.FunctionDeclaration & {
        readonly name: ts.Identifier;
    };
};
export declare const resolveGenericFunctionAliasTargetFromSymbol: (symbol: ts.Symbol, checker: ts.TypeChecker, seen: Set<ts.Symbol>) => GenericFunctionAliasTarget | undefined;
export declare const isSupportedGenericFunctionAliasDeclaration: (decl: ts.VariableDeclaration, checker: ts.TypeChecker, writtenSymbols: ReadonlySet<ts.Symbol>, supportedSymbols: ReadonlySet<ts.Symbol>) => decl is ts.VariableDeclaration & {
    readonly name: ts.Identifier;
    readonly initializer: ts.Identifier;
};
export declare const convertGenericFunctionValueDeclaration: (node: ts.VariableStatement, decl: ts.VariableDeclaration & {
    readonly name: ts.Identifier;
    readonly initializer: GenericFunctionValueNode;
}, ctx: ProgramContext) => IrFunctionDeclaration | null;
export declare const convertGenericFunctionValueAliasDeclaration: (node: ts.VariableStatement, decl: ts.VariableDeclaration & {
    readonly name: ts.Identifier;
    readonly initializer: ts.Identifier;
}, ctx: ProgramContext) => IrFunctionDeclaration | null;
//# sourceMappingURL=variable-generic-lowering.d.ts.map