/**
 * Internal Handle Types — NOT FOR PUBLIC EXPORT
 *
 * ALICE'S SPEC: These types are INTERNAL ONLY.
 * They may contain raw TypeNodes (as unknown) for internal use.
 * They must NOT be exported from type-system/index.ts.
 *
 * Allowed importers:
 * - ir/type-system/**
 * - ir/binding/**
 */
import type { DeclId, SignatureId, MemberId, TypeSyntaxId, ParameterMode } from "../types.js";
/**
 * Handle registry — maps opaque handles to their underlying data.
 *
 * INTERNAL ONLY. Not exported from public API.
 */
export type HandleRegistry = {
    getDecl(id: DeclId): DeclInfo | undefined;
    getSignature(id: SignatureId): SignatureInfo | undefined;
    getMember(id: MemberId): MemberInfo | undefined;
    getTypeSyntax(id: TypeSyntaxId): TypeSyntaxInfo | undefined;
};
/**
 * Type syntax info stored in the handle registry.
 */
export type TypeSyntaxInfo = {
    readonly typeNode: unknown;
    readonly referenceDeclId?: DeclId;
};
/**
 * Captured class member names for override detection.
 * Pure data — no TS nodes.
 */
export type ClassMemberNames = {
    readonly typeParameters: readonly string[];
    readonly methods: ReadonlySet<string>;
    readonly properties: ReadonlySet<string>;
    readonly methodSignatures: ReadonlyMap<string, readonly CapturedClassMethodSignature[]>;
    readonly propertyTypeNodes: ReadonlyMap<string, unknown | undefined>;
};
export type CapturedClassMethodSignature = {
    readonly parameters: readonly CapturedClassMethodParameter[];
};
export type CapturedClassMethodParameter = {
    readonly typeNode?: unknown;
    readonly isRest: boolean;
};
/**
 * Declaration info stored in the handle registry.
 */
export type DeclInfo = {
    readonly typeNode?: unknown;
    readonly kind: DeclKind;
    readonly fqName?: string;
    readonly declNode?: unknown;
    /**
     * When a symbol merges a value and a type declaration under the same name
     * (common in tsbindgen facades), Binding stores both so type conversion can
     * prefer the correct declaration in type contexts.
     */
    readonly typeDeclNode?: unknown;
    readonly valueDeclNode?: unknown;
    readonly classMemberNames?: ClassMemberNames;
};
export type DeclKind = "variable" | "function" | "class" | "interface" | "typeAlias" | "enum" | "parameter" | "property" | "method";
/**
 * Signature info stored in the handle registry.
 */
export type SignatureInfo = {
    readonly parameters: readonly ParameterNode[];
    readonly resolvedParameters?: readonly ParameterNode[];
    /** Type node of a TypeScript `this:` parameter (if present). Excluded from `parameters`. */
    readonly thisTypeNode?: unknown;
    readonly returnTypeNode?: unknown;
    readonly typeParameters?: readonly TypeParameterNode[];
    /**
     * Declaring type simple TS name (e.g., "Box" not "Test.Box").
     * TypeSystem uses UnifiedTypeCatalog.resolveTsName() to get CLR FQ name.
     */
    readonly declaringTypeTsName?: string;
    readonly declaringTypeParameterNames?: readonly string[];
    readonly declaringMemberName?: string;
    readonly typePredicate?: SignatureTypePredicate;
};
/**
 * Type predicate extracted from signature's return type.
 */
export type SignatureTypePredicate = {
    readonly kind: "param";
    readonly parameterName: string;
    readonly parameterIndex: number;
    readonly targetTypeNode: unknown;
} | {
    readonly kind: "this";
    readonly targetTypeNode: unknown;
};
export type ParameterNode = {
    readonly name: string;
    readonly typeNode?: unknown;
    readonly isOptional: boolean;
    readonly isRest: boolean;
    readonly mode?: ParameterMode;
};
export type TypeParameterNode = {
    readonly name: string;
    readonly constraintNode?: unknown;
    readonly defaultNode?: unknown;
};
/**
 * Member info stored in the handle registry.
 */
export type MemberInfo = {
    readonly name: string;
    readonly declNode?: unknown;
    readonly typeNode?: unknown;
    readonly isOptional: boolean;
    readonly isReadonly: boolean;
};
//# sourceMappingURL=handle-types.d.ts.map