{"version":3,"file":"MutableDataFrame.cjs","sources":["../../../src/dataframe/MutableDataFrame.ts"],"sourcesContent":["import { isString } from 'lodash';\n\nimport { QueryResultMeta } from '../types/data';\nimport { Field, DataFrame, DataFrameDTO, FieldDTO, FieldType } from '../types/dataFrame';\nimport { makeFieldParser } from '../utils/fieldParser';\nimport { FunctionalVector } from '../vector/FunctionalVector';\n\nimport { guessFieldTypeFromValue, guessFieldTypeForField, toDataFrameDTO } from './processDataFrame';\n\n/** @deprecated */\nexport type MutableField<T = any> = Field<T>;\n\n/** @deprecated */\ntype MutableVectorCreator = (buffer?: unknown[]) => unknown[];\n\ntype Parser = (v: string) => unknown;\n\nexport const MISSING_VALUE = undefined; // Treated as connected in new graph panel\n\n/**\n * MutableDataFrame is a complex wrapper around the DataFrame interface\n *\n * @deprecated use standard DataFrame, or create one with PartialDataFrame\n */\nexport class MutableDataFrame<T = any> extends FunctionalVector<T> implements DataFrame {\n  name?: string;\n  refId?: string;\n  meta?: QueryResultMeta;\n  fields: MutableField[] = [];\n\n  private first: any[] = [];\n  private creator: MutableVectorCreator;\n\n  constructor(source?: DataFrame | DataFrameDTO, creator?: MutableVectorCreator) {\n    super();\n\n    // This creates the underlying storage buffers\n    this.creator = creator\n      ? creator\n      : (buffer?: any[]) => {\n          return buffer ?? [];\n        };\n\n    // Copy values from\n    if (source) {\n      const { name, refId, meta, fields } = source;\n      if (name) {\n        this.name = name;\n      }\n      if (refId) {\n        this.refId = refId;\n      }\n      if (meta) {\n        this.meta = meta;\n      }\n      if (fields) {\n        for (const f of fields) {\n          this.addField(f);\n        }\n      }\n    }\n\n    // Get Length to show up if you use spread\n    Object.defineProperty(this, 'length', {\n      enumerable: true,\n      get: () => {\n        return this.first.length;\n      },\n    });\n  }\n\n  // Defined for Vector interface\n  get length() {\n    return this.first.length;\n  }\n\n  addFieldFor(value: unknown, name?: string): Field {\n    return this.addField({\n      name: name || '', // Will be filled in\n      type: guessFieldTypeFromValue(value),\n    });\n  }\n\n  addField(f: Field | FieldDTO, startLength?: number): Field {\n    let buffer: any[] | undefined = undefined;\n\n    if (f.values) {\n      buffer = f.values;\n    }\n\n    let type = f.type;\n\n    if (!type && ('time' === f.name || 'Time' === f.name)) {\n      type = FieldType.time;\n    } else {\n      if (!type && buffer && buffer.length) {\n        type = guessFieldTypeFromValue(buffer[0]);\n      }\n      if (!type) {\n        type = FieldType.other;\n      }\n    }\n\n    // Make sure it has a name\n    let name = f.name;\n    if (!name) {\n      name = `Field ${this.fields.length + 1}`;\n    }\n\n    const field: Field = {\n      ...f,\n      name,\n      type,\n      config: f.config || {},\n      values: this.creator(buffer),\n    };\n\n    if (type === FieldType.other) {\n      type = guessFieldTypeForField(field);\n      if (type) {\n        field.type = type;\n      }\n    }\n\n    this.fields.push(field);\n    this.first = this.fields[0].values;\n\n    // Make sure the field starts with a given length\n    if (startLength) {\n      while (field.values.length < startLength) {\n        field.values.push(MISSING_VALUE);\n      }\n    } else {\n      this.validate();\n    }\n\n    return field;\n  }\n\n  validate() {\n    // Make sure all arrays are the same length\n    const length = this.fields.reduce((v: number, f) => {\n      return Math.max(v, f.values.length);\n    }, 0);\n\n    // Add empty elements until everything matches\n    for (const field of this.fields) {\n      while (field.values.length !== length) {\n        field.values.push(MISSING_VALUE);\n      }\n    }\n  }\n\n  private parsers: Map<Field, Parser> | undefined = undefined;\n\n  /**\n   * @deprecated unclear if this is actually used\n   */\n  setParser(field: Field, parser: Parser) {\n    if (!this.parsers) {\n      this.parsers = new Map<Field, Parser>();\n    }\n    this.parsers.set(field, parser);\n    return parser;\n  }\n\n  private parseValue(field: Field, v: string) {\n    let p = this.parsers?.get(field);\n    if (!p) {\n      p = this.setParser(field, makeFieldParser(v, field));\n    }\n    return p(v);\n  }\n\n  /**\n   * This will add each value to the corresponding column\n   */\n  appendRow(row: unknown[]) {\n    // Add any extra columns\n    for (let i = this.fields.length; i < row.length; i++) {\n      this.addField({\n        name: `Field ${i + 1}`,\n        type: guessFieldTypeFromValue(row[i]),\n      });\n    }\n\n    // The first line may change the field types\n    if (this.length < 1) {\n      for (let i = 0; i < this.fields.length; i++) {\n        const f = this.fields[i];\n        if (!f.type || f.type === FieldType.other) {\n          f.type = guessFieldTypeFromValue(row[i]);\n        }\n      }\n    }\n\n    for (let i = 0; i < this.fields.length; i++) {\n      const f = this.fields[i];\n      let v = row[i];\n      if (f.type !== FieldType.string && isString(v)) {\n        v = this.parseValue(f, v);\n      }\n      f.values.push(v);\n    }\n  }\n\n  /** support standard array push syntax */\n  push(...vals: T[]): number {\n    for (const v of vals) {\n      this.add(v);\n    }\n    return this.length;\n  }\n\n  reverse() {\n    for (const field of this.fields) {\n      field.values.reverse();\n    }\n    return this;\n  }\n\n  /**\n   * Add values from an object to corresponding fields. Similar to appendRow but does not create new fields.\n   */\n  add(value: T): void {\n    // Will add one value for every field\n    const obj: any = value;\n    for (const field of this.fields) {\n      let val = obj[field.name];\n\n      if (field.type !== FieldType.string && isString(val)) {\n        val = this.parseValue(field, val);\n      }\n\n      if (val === undefined) {\n        val = MISSING_VALUE;\n      }\n\n      field.values.push(val);\n    }\n  }\n\n  set(index: number, value: T) {\n    if (index > this.length) {\n      throw new Error('Unable to set value beyond current length');\n    }\n\n    const obj: Record<string, unknown> = value || {};\n    for (const field of this.fields) {\n      field.values[index] = obj[field.name];\n    }\n  }\n\n  /**\n   * Get an object with a property for each field in the DataFrame\n   */\n  get(idx: number): T {\n    const v: Record<string, unknown> = {};\n    for (const field of this.fields) {\n      v[field.name] = field.values[idx];\n    }\n    return v as T;\n  }\n\n  /**\n   * The simplified JSON values used in JSON.stringify()\n   */\n  toJSON() {\n    return toDataFrameDTO(this);\n  }\n}\n"],"names":["FunctionalVector","guessFieldTypeFromValue","FieldType","guessFieldTypeForField","makeFieldParser","isString","toDataFrameDTO"],"mappings":"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"}