{"version":3,"file":"FieldCache.cjs","sources":["../../../src/dataframe/FieldCache.ts"],"sourcesContent":["import { DataFrame, Field, FieldType } from '../types/dataFrame';\n\nimport { guessFieldTypeForField } from './processDataFrame';\n\nexport interface FieldWithIndex extends Field {\n  index: number;\n}\n\nexport class FieldCache {\n  fields: FieldWithIndex[] = [];\n\n  private fieldByName: { [key: string]: FieldWithIndex } = {};\n  private fieldByType: { [key: string]: FieldWithIndex[] } = {};\n\n  constructor(data: DataFrame) {\n    this.fields = data.fields.map((field, idx) => ({\n      ...field,\n      index: idx,\n    }));\n\n    for (let i = 0; i < data.fields.length; i++) {\n      const field = data.fields[i];\n      // Make sure it has a type\n      if (field.type === FieldType.other) {\n        const t = guessFieldTypeForField(field);\n        if (t) {\n          field.type = t;\n        }\n      }\n      if (!this.fieldByType[field.type]) {\n        this.fieldByType[field.type] = [];\n      }\n      this.fieldByType[field.type].push({\n        ...field,\n        index: i,\n      });\n\n      if (this.fieldByName[field.name]) {\n        console.warn('Duplicate field names in DataFrame: ', field.name);\n      } else {\n        this.fieldByName[field.name] = { ...field, index: i };\n      }\n    }\n  }\n\n  getFields(type?: FieldType): FieldWithIndex[] {\n    if (!type) {\n      return [...this.fields]; // All fields\n    }\n    const fields = this.fieldByType[type];\n    if (fields) {\n      return [...fields];\n    }\n    return [];\n  }\n\n  hasFieldOfType(type: FieldType): boolean {\n    const types = this.fieldByType[type];\n    return types && types.length > 0;\n  }\n\n  getFirstFieldOfType(type: FieldType, includeHidden = false): FieldWithIndex | undefined {\n    const fields = this.fieldByType[type];\n    const firstField = fields?.find((field) => includeHidden || !field.config.custom?.hidden);\n    return firstField;\n  }\n\n  hasFieldNamed(name: string): boolean {\n    return !!this.fieldByName[name];\n  }\n\n  hasFieldWithNameAndType(name: string, type: FieldType): boolean {\n    return !!this.fieldByName[name] && this.fieldByType[type].filter((field) => field.name === name).length > 0;\n  }\n\n  /**\n   * Returns the first field with the given name.\n   */\n  getFieldByName(name: string): FieldWithIndex | undefined {\n    return this.fieldByName[name];\n  }\n\n  /**\n   * Returns the fields with the given label.\n   */\n  getFieldsByLabel(label: string, value: string): FieldWithIndex[] {\n    return Object.values(this.fieldByName).filter((f) => {\n      return f.labels && f.labels[label] === value;\n    });\n  }\n}\n"],"names":["FieldType","guessFieldTypeForField"],"mappings":"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"}