import {Encoding} from '../encoding.js'; import {GenericMarkDef, getMarkType} from '../mark.js'; import {NonFacetUnitNormalizer, Normalize, NormalizerParams} from '../normalize/base.js'; import {GenericSpec} from '../spec/index.js'; import {GenericLayerSpec, NormalizedLayerSpec} from '../spec/layer.js'; import {GenericUnitSpec, isUnitSpec, NormalizedUnitSpec} from '../spec/unit.js'; import {FieldName} from '../channeldef.js'; // TODO: replace string with Mark export type CompositeMarkUnitSpec = GenericUnitSpec>; export class CompositeMarkNormalizer implements NonFacetUnitNormalizer> { constructor( public name: string, public run: ( spec: CompositeMarkUnitSpec, params: NormalizerParams, normalize: Normalize< // Input of the normalize method GenericUnitSpec, M> | GenericLayerSpec, // Output of the normalize method NormalizedLayerSpec | NormalizedUnitSpec >, ) => NormalizedLayerSpec | NormalizedUnitSpec, ) {} public hasMatchingType(spec: GenericSpec): spec is CompositeMarkUnitSpec { if (isUnitSpec(spec)) { return getMarkType(spec.mark) === this.name; } return false; } }