/**
 * Unified Type Universe
 *
 * Merges source-authored types (from TypeRegistry) and assembly-authored
 * types (from ClrCatalog) into a single unified lookup table.
 *
 * INVARIANT INV-CLR: This is THE source of truth for all type queries.
 * No fallback paths allowed. If a type isn't in this catalog, it doesn't exist.
 *
 * Design:
 * - Source types get stableIds generated as "{ownerIdentity}:{fullyQualifiedName}"
 * - Assembly types keep their original stableIds from tsbindgen bindings
 * - Lookups by tsName, clrName, or stableId all work uniformly
 */
import type { IrType } from "../../../types/index.js";
import type { TypeId, MemberEntry, AssemblyTypeCatalog, UnifiedTypeCatalog } from "./types.js";
import type { TypeRegistry } from "../type-registry.js";
/**
 * Build a unified type catalog from source and assembly catalogs.
 *
 * @param sourceRegistry - TypeRegistry containing source-authored types
 * @param assemblyCatalog - AssemblyTypeCatalog containing CLR metadata types
 * @param projectName - Fallback owner identity for local project source types
 * @returns UnifiedTypeCatalog with merged type information
 */
export declare const buildUnifiedUniverse: (sourceRegistry: TypeRegistry | undefined, assemblyCatalog: AssemblyTypeCatalog, projectName?: string) => UnifiedTypeCatalog;
/**
 * Normalize a primitive IrType to its canonical nominal TypeId.
 *
 * This is the key function for unifying primitive types with their CLR counterparts:
 * - primitiveType("string") → TypeId for System.String
 * - primitiveType("int") → TypeId for System.Int32
 * - primitiveType("number") → TypeId for System.Double
 * - primitiveType("boolean") → TypeId for System.Boolean
 *
 * @param type - The IrType to normalize
 * @param catalog - The unified catalog to look up TypeIds
 * @returns The TypeId if this is a primitive that maps to a nominal, undefined otherwise
 */
export declare const normalizePrimitiveToTypeId: (type: IrType, catalog: UnifiedTypeCatalog) => TypeId | undefined;
/**
 * Get the TypeId for an IrType, normalizing primitives as needed.
 *
 * @param type - The IrType to get a TypeId for
 * @param catalog - The unified catalog
 * @returns The TypeId if this type has one, undefined for structural types
 */
export declare const getTypeId: (type: IrType, catalog: UnifiedTypeCatalog) => TypeId | undefined;
/**
 * Look up a member on a type, walking the inheritance chain if necessary.
 *
 * @param typeId - The type to start from
 * @param memberName - The member name (TS name)
 * @param catalog - The unified catalog
 * @returns The member entry if found, undefined otherwise
 */
export declare const lookupMemberWithInheritance: (typeId: TypeId, memberName: string, catalog: UnifiedTypeCatalog) => MemberEntry | undefined;
/**
 * Get the declared type of a member, normalizing primitives.
 *
 * This is the primary entry point for type queries about members.
 * Returns the IrType of the member, with primitives normalized.
 *
 * @param receiverType - The type of the receiver (object being accessed)
 * @param memberName - The member name (TS name)
 * @param catalog - The unified catalog
 * @returns The member's IrType if found, undefined otherwise
 */
export declare const getMemberDeclaredType: (receiverType: IrType, memberName: string, catalog: UnifiedTypeCatalog) => IrType | undefined;
//# sourceMappingURL=unified-universe.d.ts.map