import { TriggerContextMapping } from '../../../ui_actions/public' ; export interface VisualizationListItem { editUrl : string ; editApp ? : string ; error ? : string ; icon : string ; id : string ; stage : 'experimental' | 'beta' | 'production' ; savedObjectType : string ; title : string ; description ? : string ; getSupportedTriggers ? : ( ) => Array < keyof TriggerContextMapping > ; typeTitle : string ; image ? : string ; } export interface VisualizationsAppExtension { docTypes : string [ ] ; searchFields ? : string [ ] ; toListItem : ( savedObject : { id : string ; type : string ; attributes : object ; } ) => VisualizationListItem ; } export interface VisTypeAliasPromotion { description : string ; buttonText : string ; } export interface VisTypeAlias { aliasPath : string ; aliasApp : string ; name : string ; title : string ; icon : string ; promotion ? : VisTypeAliasPromotion ; description : string ; getSupportedTriggers ? : ( ) => Array < keyof TriggerContextMapping > ; stage : 'experimental' | 'beta' | 'production' ; appExtensions ? : { visualizations : VisualizationsAppExtension ; [ appName ] : unknown ; } ; } const registry = [ ] ; interface VisTypeAliasRegistry { get : ( ) => VisTypeAlias [ ] ; add : ( newVisTypeAlias : VisTypeAlias ) => void ; } export const visTypeAliasRegistry = { get : ( ) => [ ... registry ] , add : ( newVisTypeAlias ) => { if ( registry . find ( ( visTypeAlias ) => visTypeAlias . name === newVisTypeAlias . name ) ) { throw new Error ( `${ newVisTypeAlias . name } already registered` ) ; } registry . push ( newVisTypeAlias ) ; } , } ;