import type {SignalRef} from 'vega'; import {FieldName} from '../channeldef.js'; import {Config} from '../config.js'; import {Encoding} from '../encoding.js'; import {ParameterPredicate} from '../predicate.js'; import {ExprRef} from '../expr.js'; import {Projection} from '../projection.js'; import {TopLevelSelectionParameter} from '../selection.js'; import {GenericSpec, NormalizedSpec} from '../spec/index.js'; import {GenericLayerSpec, NormalizedLayerSpec} from '../spec/layer.js'; import {GenericUnitSpec, NormalizedUnitSpec} from '../spec/unit.js'; import {Dict} from '../util.js'; import {RepeaterValue} from './repeater.js'; export type Normalize, NS extends NormalizedSpec> = ( spec: S, params: NormalizerParams, ) => NS; export interface ExtraNormalizer< S extends GenericSpec, // Input type O extends NormalizedSpec, // Output Type SN extends GenericSpec = S, // input to additional normalization > { name: string; hasMatchingType: (spec: GenericSpec, config: Config) => spec is S; run(spec: S, params: NormalizerParams, normalize: Normalize): O; } export type NonFacetUnitNormalizer> = ExtraNormalizer< S, NormalizedUnitSpec | NormalizedLayerSpec, GenericUnitSpec | GenericLayerSpec >; export type NormalizeLayerOrUnit = Normalize< GenericUnitSpec | GenericLayerSpec, NormalizedUnitSpec | NormalizedLayerSpec >; export interface NormalizerParams { config: Config; parentEncoding?: Encoding; parentProjection?: Projection; repeater?: RepeaterValue; repeaterPrefix?: string; selections?: TopLevelSelectionParameter[]; emptySelections?: Dict; selectionPredicates?: Dict; path?: string[]; }