import type { AgAggregationFunction } from '../api/agAggregationFunction'; import type { DataType } from '../api/agDataType'; import type { AgFieldIdentifier } from '../api/agField'; import type { EngineFieldExpression } from './engineField'; import type { FieldKey, SourceId } from './fieldKey'; import type { HydratedField } from './query/hydrated'; /** * Per-property metadata maps keyed by `FieldKey`. Populated at plan-build time; * consumed by the execution engine and planner for field metadata lookups. */ export declare class FieldMetadataRegistry { readonly dataTypes: Map; readonly sourceIds: Map; readonly fieldIds: Map; readonly aggregations: Map; readonly expressions: Map; readonly sourceAliases: Map; readonly sourceFieldKeys: Map; register(field: HydratedField): void; registerExpression(key: FieldKey, expression: EngineFieldExpression): void; registerSourceFieldKey(key: FieldKey, sourceFieldKey: FieldKey): void; registerAll(fields: Iterable): void; /** Register a plan field that may carry expression and sourceField metadata from the compiler. */ registerPlanField(field: HydratedField & { expression?: EngineFieldExpression; sourceField?: HydratedField; }): void; registerAllPlanFields(fields: Iterable): void; getDataType(key: FieldKey): DataType; getSourceId(key: FieldKey): SourceId; getFieldId(key: FieldKey): AgFieldIdentifier; getAggregation(key: FieldKey): AgAggregationFunction | undefined; getSourceAlias(key: FieldKey): string | undefined; getExpression(key: FieldKey): EngineFieldExpression | undefined; getSourceFieldKey(key: FieldKey): FieldKey | undefined; /** Register if not already present — avoids overwriting authoritative entries from plan fields. */ registerIfAbsent(key: FieldKey, fieldId: AgFieldIdentifier, sourceId: SourceId, dataType: DataType, aggregation?: AgAggregationFunction, sourceAlias?: string): void; has(key: FieldKey): boolean; get size(): number; clear(): void; }