import { Entity, NormalizedEntities, EntitySchema, Schema } from './normalizer'; /** * Denormalization options */ export interface DenormalizeOptions { /** Maximum depth to denormalize (default: Infinity) */ maxDepth?: number; /** Fields to include in denormalization */ includeFields?: string[]; /** Fields to exclude from denormalization */ excludeFields?: string[]; /** Enable memoization */ memoize?: boolean; /** Circular reference handling */ circularBehavior?: 'skip' | 'id-only' | 'shallow'; } /** * Denormalize data from normalized state * * @param input - ID(s) or normalized reference * @param inputSchema * @param entities - Normalized entities * @param options - Denormalization options * @returns Denormalized data * * @example * ```typescript * // Single entity * const user = denormalize('1', userSchema, entities); * * // Multiple entities * const users = denormalize(['1', '2'], schema.array(userSchema), entities); * * // With options * const user = denormalize('1', userSchema, entities, { * maxDepth: 2, * excludeFields: ['password'], * }); * ``` */ export declare function denormalize(input: unknown, inputSchema: Schema, entities: NormalizedEntities, options?: DenormalizeOptions): T | null; /** * Denormalize a single entity by type and ID * * @param entityType - Entity type name * @param id - Entity ID * @param schema - Entity schema * @param entities - Normalized entities * @param options - Denormalization options * @returns Denormalized entity */ export declare function denormalizeEntity(entityType: string, id: string, schema: EntitySchema, entities: NormalizedEntities, options?: DenormalizeOptions): T | null; /** * Denormalize multiple entities * * @param ids - Array of entity IDs * @param schema - Entity schema * @param entities - Normalized entities * @param options - Denormalization options * @returns Array of denormalized entities */ export declare function denormalizeMany(ids: string[], schema: EntitySchema, entities: NormalizedEntities, options?: DenormalizeOptions): T[]; /** * Create a memoized denormalizer for a specific schema * * @param defaultOptions * @param inputSchema * @param defaultOptions */ export declare function createDenormalizer(inputSchema: Schema, defaultOptions?: DenormalizeOptions): (input: unknown, entities: NormalizedEntities, options?: DenormalizeOptions) => T | null; /** * Denormalize with field selection (GraphQL-like) * * @param input - ID(s) or normalized reference * @param inputSchema * @param entities - Normalized entities * @param fields - Fields to include * @returns Denormalized data with selected fields */ export declare function denormalizeSelect(input: unknown, inputSchema: Schema, entities: NormalizedEntities, fields: string[]): T | null; /** * Shallow denormalize (only first level) * * @param input - ID(s) or normalized reference * @param inputSchema * @param entities - Normalized entities * @returns Shallowly denormalized data */ export declare function denormalizeShallow(input: unknown, inputSchema: Schema, entities: NormalizedEntities): T | null; /** * Check if entities contain all required data for denormalization * * @param input - ID(s) to check * @param inputSchema * @param entities - Normalized entities * @returns Whether all required entities exist */ export declare function canDenormalize(input: unknown, inputSchema: Schema, entities: NormalizedEntities): boolean;