{"version":3,"file":"joinByField.cjs","sources":["../../../../src/transformations/transformers/joinByField.ts"],"sourcesContent":["import { map } from 'rxjs/operators';\n\nimport { DataFrame } from '../../types/dataFrame';\nimport { DataTransformContext, FieldMatcher, SynchronousDataTransformerInfo } from '../../types/transformations';\nimport { fieldMatchers } from '../matchers';\nimport { FieldMatcherID } from '../matchers/ids';\n\nimport { DataTransformerID } from './ids';\nimport { joinDataFrames } from './joinDataFrames';\n\nexport enum JoinMode {\n  outer = 'outer', // best for time series, non duplicated join on values\n  inner = 'inner',\n  outerTabular = 'outerTabular', // best for tabular data where the join on value can be duplicated\n}\n\nexport interface JoinByFieldOptions {\n  byField?: string; // empty will pick the field automatically\n  mode?: JoinMode;\n}\n\nexport const joinByFieldTransformer: SynchronousDataTransformerInfo<JoinByFieldOptions> = {\n  id: DataTransformerID.joinByField,\n  aliasIds: [DataTransformerID.seriesToColumns],\n  name: 'Join by field',\n  description:\n    'Combine rows from two or more tables, based on a related field between them.  This can be used to outer join multiple time series on the _time_ field to show many time series in one table.',\n  defaultOptions: {\n    byField: undefined, // DEFAULT_KEY_FIELD,\n    mode: JoinMode.outer,\n  },\n\n  operator: (options, ctx) => (source) =>\n    source.pipe(map((data) => joinByFieldTransformer.transformer(options, ctx)(data))),\n\n  transformer: (options: JoinByFieldOptions, ctx: DataTransformContext) => {\n    let joinBy: FieldMatcher | undefined = undefined;\n    return (data: DataFrame[]) => {\n      if (data.length > 1) {\n        if (options.byField && !joinBy) {\n          joinBy = fieldMatchers.get(FieldMatcherID.byName).get(options.byField);\n        }\n        const joined = joinDataFrames({ frames: data, joinBy, mode: options.mode });\n        if (joined) {\n          joined.refId = `${DataTransformerID.joinByField}-${data.map((frame) => frame.refId).join('-')}`;\n          return [joined];\n        }\n      }\n      return data;\n    };\n  },\n};\n"],"names":["JoinMode","DataTransformerID","map","fieldMatchers","FieldMatcherID","joinDataFrames"],"mappings":";;;;;;;;;;;AAUO,IAAK,QAAA,qBAAAA,SAAAA,KAAL;AACL,EAAAA,UAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,UAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,UAAA,cAAA,CAAA,GAAe,cAAA;AAHL,EAAA,OAAAA,SAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA;AAWL,MAAM,sBAAA,GAA6E;AAAA,EACxF,IAAIC,uBAAA,CAAkB,WAAA;AAAA,EACtB,QAAA,EAAU,CAACA,uBAAA,CAAkB,eAAe,CAAA;AAAA,EAC5C,IAAA,EAAM,eAAA;AAAA,EACN,WAAA,EACE,8LAAA;AAAA,EACF,cAAA,EAAgB;AAAA,IACd,OAAA,EAAS,KAAA,CAAA;AAAA;AAAA,IACT,IAAA,EAAM,OAAA;AAAA,GACR;AAAA,EAEA,UAAU,CAAC,OAAA,EAAS,QAAQ,CAAC,MAAA,KAC3B,OAAO,IAAA,CAAKC,aAAA,CAAI,CAAC,IAAA,KAAS,uBAAuB,WAAA,CAAY,OAAA,EAAS,GAAG,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA;AAAA,EAEnF,WAAA,EAAa,CAAC,OAAA,EAA6B,GAAA,KAA8B;AACvE,IAAA,IAAI,MAAA,GAAmC,KAAA,CAAA;AACvC,IAAA,OAAO,CAAC,IAAA,KAAsB;AAC5B,MAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,QAAA,IAAI,OAAA,CAAQ,OAAA,IAAW,CAAC,MAAA,EAAQ;AAC9B,UAAA,MAAA,GAASC,uBAAc,GAAA,CAAIC,kBAAA,CAAe,MAAM,CAAA,CAAE,GAAA,CAAI,QAAQ,OAAO,CAAA;AAAA,QACvE;AACA,QAAA,MAAM,MAAA,GAASC,8BAAe,EAAE,MAAA,EAAQ,MAAM,MAAA,EAAQ,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM,CAAA;AAC1E,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,MAAA,CAAO,KAAA,GAAQ,CAAA,EAAGJ,uBAAA,CAAkB,WAAW,IAAI,IAAA,CAAK,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,KAAK,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAC7F,UAAA,OAAO,CAAC,MAAM,CAAA;AAAA,QAChB;AAAA,MACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,EACF;AACF;;;;;"}