{"version":3,"file":"getPanelDataSummary.cjs","sources":["../../../../src/panel/suggestions/getPanelDataSummary.ts"],"sourcesContent":["import { PreferredVisualisationType } from '../../types/data';\nimport { DataFrame, FieldType } from '../../types/dataFrame';\nimport { DataFrameType } from '../../types/dataFrameTypes';\n\nexport interface PanelDataSummary {\n  hasData?: boolean;\n  rowCountTotal: number;\n  /** max number of rows in any given dataframe in the panel data */\n  rowCountMax: number;\n  frameCount: number;\n  fieldCount: number;\n  /** max number of fields in any given dataframe in the panel data */\n  fieldCountMax: number;\n  /** given a field type, return the number of fields across all dataframes which match this type */\n  fieldCountByType: (type: FieldType) => number;\n  /** returns true if any fields in any frames match the field type */\n  hasFieldType: (type: FieldType) => boolean;\n  /* returns true if any of the frames in this panel data summary have the type */\n  hasDataFrameType: (type: DataFrameType) => boolean;\n  /* returns true if any of the frames in this panel data summary have the type */\n  hasPreferredVisualisationType: (type: PreferredVisualisationType) => boolean;\n  /** true if time fields exist on the dataframe and the dataframe only contains a single time value */\n  isInstant?: boolean;\n\n  /** pass along a reference to the DataFrame array in case it's needed by the plugin */\n  rawFrames?: DataFrame[];\n\n  /* --- DEPRECATED FIELDS BELOW --- */\n  /** @deprecated use PanelDataSummary.fieldCountByType(FieldType.number) */\n  numberFieldCount: number;\n  /** @deprecated use PanelDataSummary.fieldCountByType(FieldType.time) */\n  timeFieldCount: number;\n  /** @deprecated use PanelDataSummary.fieldCountByType(FieldType.string) */\n  stringFieldCount: number;\n  /** @deprecated use PanelDataSummary.hasFieldType(FieldType.number) */\n  hasTimeField?: boolean;\n  /** @deprecated use PanelDataSummary.hasFieldType(FieldType.time) */\n  hasNumberField?: boolean;\n  /** @deprecated use PanelDataSummary.hasFieldType(FieldType.string) */\n  hasStringField?: boolean;\n}\n\n/**\n * @alpha\n */\nclass PanelDataSummaryImpl implements PanelDataSummary {\n  public rowCountTotal = 0;\n  /** max number of rows in any single dataframe in the panel data */\n  public rowCountMax = 0;\n  public fieldCount = 0;\n  /** max number of fields in any single dataframe in the panel data */\n  public fieldCountMax = 0;\n\n  public isInstant: boolean | undefined = undefined;\n\n  private countByType: Partial<Record<FieldType, number>> = {};\n  private preferredVisualisationTypes: Set<PreferredVisualisationType> = new Set<PreferredVisualisationType>();\n  private dataFrameTypes: Set<DataFrameType> = new Set<DataFrameType>();\n\n  public get hasData(): boolean {\n    return this.rowCountTotal > 0;\n  }\n\n  public get frameCount(): number {\n    return this.rawFrames?.length ?? 0;\n  }\n\n  constructor(public rawFrames?: DataFrame[]) {\n    this._processFrames();\n  }\n\n  private _processFrames() {\n    let firstTimeEncountered: number | null = null;\n    for (const frame of this.rawFrames ?? []) {\n      this.rowCountTotal += frame.length;\n\n      if (frame.meta?.preferredVisualisationType) {\n        this.preferredVisualisationTypes.add(frame.meta.preferredVisualisationType);\n      }\n      if (frame.meta?.type) {\n        this.dataFrameTypes.add(frame.meta.type);\n      }\n\n      for (const field of frame.fields) {\n        this.fieldCount++;\n        this.countByType[field.type] = (this.countByType[field.type] || 0) + 1;\n        if (field.type === FieldType.time) {\n          firstTimeEncountered ??= field.values.find((v) => v != null);\n          this.isInstant =\n            this.isInstant !== false && field.values.every((v) => v == null || v === firstTimeEncountered);\n        }\n      }\n\n      if (frame.length > this.rowCountMax) {\n        this.rowCountMax = frame.length;\n      }\n      if (frame.fields.length > this.fieldCountMax) {\n        this.fieldCountMax = frame.fields.length;\n      }\n    }\n  }\n\n  public fieldCountByType(type: FieldType): number {\n    return this.countByType[type] ?? 0;\n  }\n\n  public hasFieldType(type: FieldType): boolean {\n    return this.fieldCountByType(type) > 0;\n  }\n\n  public hasPreferredVisualisationType(type: PreferredVisualisationType): boolean {\n    return this.preferredVisualisationTypes.has(type);\n  }\n\n  public hasDataFrameType(type: DataFrameType): boolean {\n    return this.dataFrameTypes.has(type);\n  }\n\n  /**** DEPRECATED ****/\n  /** @deprecated use PanelDataSummary.fieldCountByType(FieldType.number) */\n  public get numberFieldCount(): number {\n    return this.fieldCountByType(FieldType.number);\n  }\n  /** @deprecated use PanelDataSummary.fieldCountByType(FieldType.time) */\n  public get timeFieldCount(): number {\n    return this.fieldCountByType(FieldType.time);\n  }\n  /** @deprecated use PanelDataSummary.fieldCountByType(FieldType.string) */\n  public get stringFieldCount() {\n    return this.fieldCountByType(FieldType.string);\n  }\n  /** @deprecated use PanelDataSummary.hasFieldType(FieldType.number) */\n  public get hasTimeField() {\n    return this.fieldCountByType(FieldType.time) > 0;\n  }\n  /** @deprecated use PanelDataSummary.hasFieldType(FieldType.time) */\n  public get hasNumberField() {\n    return this.fieldCountByType(FieldType.number) > 0;\n  }\n  /** @deprecated use PanelDataSummary.hasFieldType(FieldType.string) */\n  public get hasStringField() {\n    return this.fieldCountByType(FieldType.string) > 0;\n  }\n}\n\n/**\n * @alpha\n * given a list of dataframes, summarize attributes of those frames for features like suggestions.\n * @param frames - dataframes to summarize\n * @returns summary of the dataframes\n */\nexport function getPanelDataSummary(frames?: DataFrame[]): PanelDataSummary {\n  return new PanelDataSummaryImpl(frames);\n}\n"],"names":["FieldType"],"mappings":"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"}