{"version":3,"file":"ArrayDataFrame.cjs","sources":["../../../src/dataframe/ArrayDataFrame.ts"],"sourcesContent":["import { QueryResultMeta } from '../types/data';\nimport { Field, FieldType, DataFrame, TIME_SERIES_VALUE_FIELD_NAME } from '../types/dataFrame';\n\nimport { guessFieldTypeForField } from './processDataFrame';\n\n/**\n * The ArrayDataFrame takes an array of objects and presents it as a DataFrame\n *\n * @deprecated use arrayToDataFrame\n */\nexport class ArrayDataFrame implements DataFrame {\n  fields: Field[] = [];\n  length = 0;\n  name?: string;\n  refId?: string;\n  meta?: QueryResultMeta;\n\n  constructor(source: unknown[], names?: string[]) {\n    return arrayToDataFrame(source, names); // returns a standard DataFrame\n  }\n}\n\n/**\n * arrayToDataFrame will convert any array into a DataFrame.\n * @param source - can be an array of objects or an array of simple values.\n * @param names - will be used for ordering of fields. Source needs to be array of objects if names are provided.\n *\n * @public\n */\nexport function arrayToDataFrame(source: unknown[], names?: string[]): DataFrame {\n  const df: DataFrame = {\n    fields: [],\n    length: source.length,\n  };\n  if (!source?.length) {\n    return df;\n  }\n\n  // If names are provided then we assume the source is an array of objects with the names as keys (field names). This\n  // makes ordering of the fields predictable.\n  if (names) {\n    if (!isObjectArray(source)) {\n      throw new Error('source is not an array of objects');\n    }\n\n    for (const name of names) {\n      df.fields.push(\n        makeFieldFromValues(\n          name,\n          source.map((v) => (v ? v[name] : v))\n        )\n      );\n    }\n    return df;\n  }\n\n  const firstDefined = source.find((v) => v); // first not null|undefined\n  // This means if the source is lots of null/undefined values we throw that away and return empty dataFrame. This is\n  // different to how we preserve null/undefined values if there is some defined rows. Not sure this inconsistency\n  // is by design or not.\n  if (firstDefined === null) {\n    return df;\n  }\n\n  // If is an array of objects we use the keys as field names.\n  if (isObjectArray(source)) {\n    // We need to do this to please TS. We know source is array of objects and that there is some object in there but\n    // TS still thinks it can all be undefined|nulls.\n    const first = source.find((v) => v);\n    df.fields = Object.keys(first || {}).map((name) => {\n      return makeFieldFromValues(\n        name,\n        source.map((v) => (v ? v[name] : v))\n      );\n    });\n  } else {\n    // Otherwise source should be an array of simple values, so we create single field data frame.\n    df.fields.push(makeFieldFromValues(TIME_SERIES_VALUE_FIELD_NAME, source));\n  }\n  return df;\n}\n\nfunction makeFieldFromValues(name: string, values: unknown[]): Field {\n  const f = { name, config: {}, values, type: FieldType.other };\n  f.type = guessFieldTypeForField(f) ?? FieldType.other;\n  return f;\n}\n\nfunction isObjectArray(arr: unknown[]): arr is Array<Record<string, unknown> | null | undefined> {\n  const first = arr.find((v) => v); // first not null|undefined\n  return arr.length > 0 && typeof first === 'object';\n}\n"],"names":["TIME_SERIES_VALUE_FIELD_NAME","FieldType","guessFieldTypeForField"],"mappings":";;;;;;;;AAUO,MAAM,cAAA,CAAoC;AAAA,EAO/C,WAAA,CAAY,QAAmB,KAAA,EAAkB;AANjD,IAAA,IAAA,CAAA,MAAA,GAAkB,EAAC;AACnB,IAAA,IAAA,CAAA,MAAA,GAAS,CAAA;AAMP,IAAA,OAAO,gBAAA,CAAiB,QAAQ,KAAK,CAAA;AAAA,EACvC;AACF;AASO,SAAS,gBAAA,CAAiB,QAAmB,KAAA,EAA6B;AAC/E,EAAA,MAAM,EAAA,GAAgB;AAAA,IACpB,QAAQ,EAAC;AAAA,IACT,QAAQ,MAAA,CAAO;AAAA,GACjB;AACA,EAAA,IAAI,EAAC,iCAAQ,MAAA,CAAA,EAAQ;AACnB,IAAA,OAAO,EAAA;AAAA,EACT;AAIA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,IAAI,CAAC,aAAA,CAAc,MAAM,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,IACrD;AAEA,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,EAAA,CAAG,MAAA,CAAO,IAAA;AAAA,QACR,mBAAA;AAAA,UACE,IAAA;AAAA,UACA,MAAA,CAAO,IAAI,CAAC,CAAA,KAAO,IAAI,CAAA,CAAE,IAAI,IAAI,CAAE;AAAA;AACrC,OACF;AAAA,IACF;AACA,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,IAAA,CAAK,CAAC,MAAM,CAAC,CAAA;AAIzC,EAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,IAAA,OAAO,EAAA;AAAA,EACT;AAGA,EAAA,IAAI,aAAA,CAAc,MAAM,CAAA,EAAG;AAGzB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,MAAM,CAAC,CAAA;AAClC,IAAA,EAAA,CAAG,MAAA,GAAS,OAAO,IAAA,CAAK,KAAA,IAAS,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS;AACjD,MAAA,OAAO,mBAAA;AAAA,QACL,IAAA;AAAA,QACA,MAAA,CAAO,IAAI,CAAC,CAAA,KAAO,IAAI,CAAA,CAAE,IAAI,IAAI,CAAE;AAAA,OACrC;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA,MAAO;AAEL,IAAA,EAAA,CAAG,MAAA,CAAO,IAAA,CAAK,mBAAA,CAAoBA,sCAAA,EAA8B,MAAM,CAAC,CAAA;AAAA,EAC1E;AACA,EAAA,OAAO,EAAA;AACT;AAEA,SAAS,mBAAA,CAAoB,MAAc,MAAA,EAA0B;AAlFrE,EAAA,IAAA,EAAA;AAmFE,EAAA,MAAM,CAAA,GAAI,EAAE,IAAA,EAAM,MAAA,EAAQ,EAAC,EAAG,MAAA,EAAQ,IAAA,EAAMC,mBAAA,CAAU,KAAA,EAAM;AAC5D,EAAA,CAAA,CAAE,IAAA,GAAA,CAAO,EAAA,GAAAC,uCAAA,CAAuB,CAAC,CAAA,KAAxB,YAA6BD,mBAAA,CAAU,KAAA;AAChD,EAAA,OAAO,CAAA;AACT;AAEA,SAAS,cAAc,GAAA,EAA0E;AAC/F,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,IAAA,CAAK,CAAC,MAAM,CAAC,CAAA;AAC/B,EAAA,OAAO,GAAA,CAAI,MAAA,GAAS,CAAA,IAAK,OAAO,KAAA,KAAU,QAAA;AAC5C;;;;;"}