{"version":3,"file":"DataFrameView.cjs","sources":["../../../src/dataframe/DataFrameView.ts"],"sourcesContent":["import { DataFrame, Field } from '../types/dataFrame';\nimport { DisplayProcessor } from '../types/displayValue';\nimport { FunctionalVector } from '../vector/FunctionalVector';\n\n/**\n * This abstraction will present the contents of a DataFrame as if\n * it were a well typed javascript object Vector.\n *\n * @remarks\n * The {@link DataFrameView.get} is optimized for use in a loop and will return same object.\n * See function for more details.\n *\n * @typeParam T - Type of object stored in the DataFrame.\n * @beta\n */\nexport class DataFrameView<T extends object = any> extends FunctionalVector<T> {\n  private index = 0;\n  private obj: T;\n  readonly fields: {\n    readonly [Property in keyof T]: Field<T[Property]>;\n  };\n\n  constructor(private data: DataFrame) {\n    super();\n    const obj = {} as T;\n    const fields: any = {};\n\n    for (let i = 0; i < data.fields.length; i++) {\n      const field = data.fields[i];\n      if (!field.name) {\n        continue; // unsupported\n      }\n\n      fields[field.name] = field;\n      const getter = () => field.values.get(this.index); // .get() to support all Vector types\n\n      if (!obj.hasOwnProperty(field.name)) {\n        Object.defineProperty(obj, field.name, {\n          enumerable: true, // Shows up as enumerable property\n          get: getter,\n        });\n      }\n\n      if (!obj.hasOwnProperty(i.toString())) {\n        Object.defineProperty(obj, i, {\n          enumerable: false, // Don't enumerate array index\n          get: getter,\n        });\n      }\n    }\n\n    this.obj = obj;\n    this.fields = fields;\n  }\n\n  get dataFrame() {\n    return this.data;\n  }\n\n  get length() {\n    return this.data.length;\n  }\n\n  /**\n   * Helper function to return the {@link DisplayProcessor} for a given field column.\n   * @param colIndex - the field column index for the data frame.\n   */\n  getFieldDisplayProcessor(colIndex: number): DisplayProcessor | undefined {\n    if (!this.dataFrame || !this.dataFrame.fields) {\n      return undefined;\n    }\n\n    const field = this.dataFrame.fields[colIndex];\n\n    if (!field || !field.display) {\n      return undefined;\n    }\n\n    return field.display;\n  }\n\n  /**\n   * The contents of the object returned from this function\n   * are optimized for use in a loop. All calls return the same object\n   * but the index has changed.\n   *\n   * @example\n   * ```typescript\n   *   // `first`, `second` and `third` will all point to the same contents at index 2:\n   *   const first = view.get(0);\n   *   const second = view.get(1);\n   *   const third = view.get(2);\n   *\n   *   // If you need three different objects, consider something like:\n   *   const first = { ...view.get(0) };\n   *   const second = { ...view.get(1) };\n   *   const third = { ...view.get(2) };\n   * ```\n   * @param idx - The index of the object you currently are inspecting\n   */\n  get(idx: number) {\n    this.index = idx;\n    return this.obj;\n  }\n\n  toArray(): T[] {\n    return new Array(this.data.length)\n      .fill(0) // Needs to make a full copy\n      .map((_, i) => ({ ...this.get(i) }));\n  }\n}\n"],"names":["FunctionalVector"],"mappings":";;;;;;;AAeO,MAAM,sBAA8CA,iCAAA,CAAoB;AAAA,EAO7E,YAAoB,IAAA,EAAiB;AACnC,IAAA,KAAA,EAAM;AADY,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AANpB,IAAA,IAAA,CAAQ,KAAA,GAAQ,CAAA;AAQd,IAAA,MAAM,MAAM,EAAC;AACb,IAAA,MAAM,SAAc,EAAC;AAErB,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AAC3C,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA;AAC3B,MAAA,IAAI,CAAC,MAAM,IAAA,EAAM;AACf,QAAA;AAAA,MACF;AAEA,MAAA,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA;AACrB,MAAA,MAAM,SAAS,MAAM,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,KAAK,KAAK,CAAA;AAEhD,MAAA,IAAI,CAAC,GAAA,CAAI,cAAA,CAAe,KAAA,CAAM,IAAI,CAAA,EAAG;AACnC,QAAA,MAAA,CAAO,cAAA,CAAe,GAAA,EAAK,KAAA,CAAM,IAAA,EAAM;AAAA,UACrC,UAAA,EAAY,IAAA;AAAA;AAAA,UACZ,GAAA,EAAK;AAAA,SACN,CAAA;AAAA,MACH;AAEA,MAAA,IAAI,CAAC,GAAA,CAAI,cAAA,CAAe,CAAA,CAAE,QAAA,EAAU,CAAA,EAAG;AACrC,QAAA,MAAA,CAAO,cAAA,CAAe,KAAK,CAAA,EAAG;AAAA,UAC5B,UAAA,EAAY,KAAA;AAAA;AAAA,UACZ,GAAA,EAAK;AAAA,SACN,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,GAAA,GAAM,GAAA;AACX,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA,EAEA,IAAI,SAAA,GAAY;AACd,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA,EAEA,IAAI,MAAA,GAAS;AACX,IAAA,OAAO,KAAK,IAAA,CAAK,MAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,yBAAyB,QAAA,EAAgD;AACvE,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,IAAa,CAAC,IAAA,CAAK,UAAU,MAAA,EAAQ;AAC7C,MAAA,OAAO,KAAA,CAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA;AAE5C,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,KAAA,CAAM,OAAA,EAAS;AAC5B,MAAA,OAAO,KAAA,CAAA;AAAA,IACT;AAEA,IAAA,OAAO,KAAA,CAAM,OAAA;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,IAAI,GAAA,EAAa;AACf,IAAA,IAAA,CAAK,KAAA,GAAQ,GAAA;AACb,IAAA,OAAO,IAAA,CAAK,GAAA;AAAA,EACd;AAAA,EAEA,OAAA,GAAe;AACb,IAAA,OAAO,IAAI,KAAA,CAAM,IAAA,CAAK,KAAK,MAAM,CAAA,CAC9B,KAAK,CAAC,CAAA,CACN,IAAI,CAAC,CAAA,EAAG,OAAO,EAAE,GAAG,KAAK,GAAA,CAAI,CAAC,GAAE,CAAE,CAAA;AAAA,EACvC;AACF;;;;"}