{"version":3,"file":"limit.mjs","sources":["../../../../src/transformations/transformers/limit.ts"],"sourcesContent":["import { map } from 'rxjs/operators';\n\nimport { DataTransformerInfo } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\n\nexport interface LimitTransformerOptions {\n  limitField?: number | string;\n}\n\nconst DEFAULT_LIMIT_FIELD = 10;\n\nexport const limitTransformer: DataTransformerInfo<LimitTransformerOptions> = {\n  id: DataTransformerID.limit,\n  name: 'Limit',\n  description: 'Limit the number of items to the top N',\n  defaultOptions: {\n    limitField: DEFAULT_LIMIT_FIELD,\n  },\n\n  operator: (options, ctx) => (source) =>\n    source.pipe(\n      map((data) => {\n        let limit = DEFAULT_LIMIT_FIELD;\n        if (options.limitField !== undefined) {\n          if (typeof options.limitField === 'string') {\n            limit = parseInt(options.limitField, 10);\n          } else {\n            limit = options.limitField;\n          }\n        }\n\n        return data.map((frame) => {\n          if (frame.length > limit) {\n            return {\n              ...frame,\n              fields: frame.fields.map((f) => {\n                return {\n                  ...f,\n                  // Clear cached field calculations since applying a limit changes the dataset\n                  // and previously computed stats (min, max, mean, etc.) are no longer valid\n                  state: {\n                    ...f.state,\n                    calcs: undefined,\n                  },\n                  values:\n                    limit >= 0 ? f.values.slice(0, limit) : f.values.slice(f.values.length + limit, f.values.length),\n                };\n              }),\n              length: Math.abs(limit),\n            };\n          }\n\n          return frame;\n        });\n      })\n    ),\n};\n"],"names":[],"mappings":";;;;AAUA,MAAM,mBAAA,GAAsB,EAAA;AAErB,MAAM,gBAAA,GAAiE;AAAA,EAC5E,IAAI,iBAAA,CAAkB,KAAA;AAAA,EACtB,IAAA,EAAM,OAAA;AAAA,EACN,WAAA,EAAa,wCAAA;AAAA,EACb,cAAA,EAAgB;AAAA,IACd,UAAA,EAAY;AAAA,GACd;AAAA,EAEA,UAAU,CAAC,OAAA,EAAS,GAAA,KAAQ,CAAC,WAC3B,MAAA,CAAO,IAAA;AAAA,IACL,GAAA,CAAI,CAAC,IAAA,KAAS;AACZ,MAAA,IAAI,KAAA,GAAQ,mBAAA;AACZ,MAAA,IAAI,OAAA,CAAQ,eAAe,KAAA,CAAA,EAAW;AACpC,QAAA,IAAI,OAAO,OAAA,CAAQ,UAAA,KAAe,QAAA,EAAU;AAC1C,UAAA,KAAA,GAAQ,QAAA,CAAS,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA;AAAA,QACzC,CAAA,MAAO;AACL,UAAA,KAAA,GAAQ,OAAA,CAAQ,UAAA;AAAA,QAClB;AAAA,MACF;AAEA,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,KAAA,KAAU;AACzB,QAAA,IAAI,KAAA,CAAM,SAAS,KAAA,EAAO;AACxB,UAAA,OAAO;AAAA,YACL,GAAG,KAAA;AAAA,YACH,MAAA,EAAQ,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM;AAC9B,cAAA,OAAO;AAAA,gBACL,GAAG,CAAA;AAAA;AAAA;AAAA,gBAGH,KAAA,EAAO;AAAA,kBACL,GAAG,CAAA,CAAE,KAAA;AAAA,kBACL,KAAA,EAAO,KAAA;AAAA,iBACT;AAAA,gBACA,QACE,KAAA,IAAS,CAAA,GAAI,EAAE,MAAA,CAAO,KAAA,CAAM,GAAG,KAAK,CAAA,GAAI,CAAA,CAAE,MAAA,CAAO,MAAM,CAAA,CAAE,MAAA,CAAO,SAAS,KAAA,EAAO,CAAA,CAAE,OAAO,MAAM;AAAA,eACnG;AAAA,YACF,CAAC,CAAA;AAAA,YACD,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,KAAK;AAAA,WACxB;AAAA,QACF;AAEA,QAAA,OAAO,KAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,CAAC;AAAA;AAEP;;;;"}