/**
 * CLR name helpers, type parameter extraction, member extraction from
 * declarations/aliased object types, callable interface conversion,
 * method signature conversion, and heritage clause extraction.
 *
 * Split from registry-helpers.ts for file-size compliance (< 500 LOC).
 */
import * as ts from "typescript";
import type { IrType } from "../../types/index.js";
import type { ConvertTypeFn, MemberInfo, HeritageInfo, TypeParameterEntry } from "./type-registry.js";
import { convertMethodToSignature, convertMethodSignatureToIr } from "./registry-helpers-inference.js";
/**
 * Check if a source file is from a well-known Tsonic library.
 * Only CLR-authored libraries should canonicalize global wrapper names to
 * their System.* identities.
 *
 * First-party source packages like `@tsonic/js` and `@tsonic/nodejs` are
 * authoritative semantic surfaces and must retain their own namespaces
 * (`js.Array`, `js.String`, etc.) instead of collapsing onto `System.*`.
 */
export declare const isWellKnownLibrary: (fileName: string) => boolean;
/**
 * Get the canonical CLR FQ name for a type from a well-known library.
 * Returns undefined if the type should use its default FQ name.
 *
 * Handles:
 * - Global types: String → System.String, Array → System.Array
 * - $instance companions: String$instance → System.String$instance
 * - Core primitives: int → System.Int32, etc. (handled via type aliases)
 */
export declare const getCanonicalClrFQName: (simpleName: string, isFromWellKnownLib: boolean) => string | undefined;
/**
 * Extract type parameters from a declaration
 */
export declare const extractTypeParameters: (typeParams: ts.NodeArray<ts.TypeParameterDeclaration> | undefined, convertType: ConvertTypeFn) => readonly TypeParameterEntry[];
/**
 * Get the name from a TypeNode (for heritage clauses)
 */
export declare const getTypeNodeName: (typeNode: ts.TypeNode) => string | undefined;
/**
 * Resolve a heritage clause type name to the same fully-qualified form used by
 * TypeRegistry entries.
 *
 * This is required so UnifiedUniverse can build correct stableIds for inheritance
 * edges (projectName:fullyQualifiedName), enabling NominalEnv substitution through
 * inheritance chains.
 *
 * DETERMINISTIC: Uses symbol resolution only (no ts.Type queries).
 */
export declare const resolveHeritageTypeName: (typeNode: ts.ExpressionWithTypeArguments, checker: ts.TypeChecker, sourceRoot: string, rootNamespace: string) => string | undefined;
/**
 * Extract member information from a class or interface - PURE IR version
 */
export declare const extractMembers: (members: ts.NodeArray<ts.ClassElement> | ts.NodeArray<ts.TypeElement>, convertType: ConvertTypeFn) => ReadonlyMap<string, MemberInfo>;
/**
 * Extract members from an already-converted object type.
 *
 * This is used for object-like type aliases that expand deterministically to
 * `IrObjectType` during registration (e.g., `type StatusMap = Record<...>`).
 * Registering these members enables TypeSystem member lookups on aliased types.
 */
export declare const extractMembersFromAliasedObjectType: (aliased: IrType) => ReadonlyMap<string, MemberInfo>;
export declare const convertCallableInterfaceOnlyType: (node: ts.InterfaceDeclaration, convertType: ConvertTypeFn) => IrType | undefined;
export { convertMethodToSignature, convertMethodSignatureToIr };
/**
 * Extract heritage clauses - PURE IR version
 */
export declare const extractHeritage: (clauses: ts.NodeArray<ts.HeritageClause> | undefined, checker: ts.TypeChecker, sourceRoot: string, rootNamespace: string, convertType: ConvertTypeFn, canonicalize?: (name: string) => string) => readonly HeritageInfo[];
//# sourceMappingURL=registry-helpers-extraction.d.ts.map