All files server/types/metadata.ts

0% Statements 0/0
0% Branches 0/0
0% Functions 0/0
0% Lines 0/0

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124                                                                                                                                                                                                                                                       
/**
 * Metadata and annotation types for API responses
 * Used for UI rendering and query result annotations
 */
 
import type { MeasureType, MeasureFormat, DimensionFormat, TimeGranularity } from './core'
 
/**
 * Cube relationship metadata for ERD visualization
 */
export interface CubeRelationshipMetadata {
  targetCube: string
  relationship: 'belongsTo' | 'hasOne' | 'hasMany' | 'belongsToMany'
  joinFields: Array<{
    sourceField: string
    targetField: string
  }>
}
 
/**
 * Cube metadata for API responses
 */
export interface CubeMetadata {
  name: string
  title: string
  description?: string
  /**
   * Example questions that can be answered using this cube
   * Used by AI agents to understand cube capabilities
   */
  exampleQuestions?: string[]
  measures: MeasureMetadata[]
  dimensions: DimensionMetadata[]
  segments: any[]
  relationships?: CubeRelationshipMetadata[]
  /**
   * Hierarchies for structured drill-down paths
   * Enables navigation through dimension levels (e.g., country -> region -> city)
   */
  hierarchies?: HierarchyMetadata[]
  /** Additional cube metadata (e.g., eventStream configuration for funnel queries) */
  meta?: Record<string, any>
}
 
/**
 * Measure metadata for API responses
 */
export interface MeasureMetadata {
  name: string
  title: string
  shortTitle: string
  type: MeasureType
  format?: MeasureFormat
  description?: string
  /**
   * Alternative names for this measure
   * Used by AI agents for natural language matching
   */
  synonyms?: string[]
  /**
   * Dimension names shown when drilling into this measure
   * Full names like "CubeName.dimensionName" for cross-cube support
   * If not specified, drilling is disabled for this measure
   */
  drillMembers?: string[]
}
 
/**
 * Dimension metadata for API responses
 */
export interface DimensionMetadata {
  name: string
  title: string
  shortTitle: string
  type: string
  format?: DimensionFormat
  description?: string
  /**
   * Alternative names for this dimension
   * Used by AI agents for natural language matching
   */
  synonyms?: string[]
  /**
   * Supported granularities for time dimensions
   * Only present when type is 'time'
   * Used for time-based drill-down (year -> quarter -> month -> week -> day)
   */
  granularities?: TimeGranularity[]
}
 
/**
 * Hierarchy metadata for structured drill-down paths
 */
export interface HierarchyMetadata {
  /** Unique identifier for the hierarchy */
  name: string
  /** Display title for the hierarchy */
  title: string
  /** Cube name this hierarchy belongs to */
  cubeName: string
  /**
   * Full dimension names in order from least to most granular
   * Format: "CubeName.dimensionName"
   */
  levels: string[]
}
 
/**
 * Pre-aggregation configuration
 */
export interface SemanticPreAggregation {
  name: string
  measures: string[]
  dimensions: string[]
  timeDimension?: {
    dimension: string
    granularity: TimeGranularity[]
  }
  refreshKey?: {
    every: string
    sql?: string
  }
  indexes?: Record<string, string[]>
}