{
  "version": 3,
  "sources": ["../../../../src/packages/default-reporter/mergeOutputs.ts"],
  "sourcesContent": ["import * as Rx from 'rxjs';\nimport { filter, map, mergeAll, scan } from 'rxjs/operators';\nimport { EOL } from './constants.ts';\n\nexport function mergeOutputs(\n  outputs: Array<Rx.Observable<Rx.Observable<{ msg: string }>>>\n): Rx.Observable<string> {\n  let blockNo = 0;\n\n  let fixedBlockNo = 0;\n\n  let started = false;\n\n  let previousOutput: string | null = null;\n\n  return Rx.merge(...outputs).pipe(\n    map((log: Rx.Observable<{ msg: string; fixed?: boolean }>) => {\n      let currentBlockNo = -1;\n\n      let currentFixedBlockNo = -1;\n\n      return log.pipe(\n        map((msg) => {\n          if (msg.fixed === true) {\n            if (currentFixedBlockNo === -1) {\n              currentFixedBlockNo = fixedBlockNo++;\n            }\n\n            return {\n              blockNo: currentFixedBlockNo,\n              fixed: true,\n              msg: msg.msg,\n            };\n          }\n\n          if (currentBlockNo === -1) {\n            currentBlockNo = blockNo++;\n          }\n\n          return {\n            blockNo: currentBlockNo,\n            fixed: false,\n            msg: typeof msg === 'string' ? msg : msg.msg,\n            prevFixedBlockNo: currentFixedBlockNo,\n          };\n        })\n      );\n    }),\n    mergeAll(),\n    scan(\n      (acc, log): { fixedBlocks: string[]; blocks: string[] } => {\n        if (log.fixed) {\n          acc.fixedBlocks[log.blockNo] = log.msg;\n        } else {\n          delete acc.fixedBlocks[log.prevFixedBlockNo as number];\n          acc.blocks[log.blockNo] = log.msg;\n        }\n        return acc;\n      },\n      { fixedBlocks: [], blocks: [] } as {\n        fixedBlocks: string[];\n        blocks: string[];\n      }\n    ),\n    map(\n      (sections: {\n        fixedBlocks: string[];\n        blocks: string[];\n      }): string => {\n        const fixedBlocks = sections.fixedBlocks.filter(Boolean);\n\n        const nonFixedPart = sections.blocks.filter(Boolean).join(EOL);\n\n        if (fixedBlocks.length === 0) {\n          return nonFixedPart;\n        }\n\n        const fixedPart = fixedBlocks.join(EOL);\n\n        if (!nonFixedPart) {\n          return fixedPart;\n        }\n\n        return `${nonFixedPart}${EOL}${fixedPart}`;\n      }\n    ),\n    filter((msg: string): boolean => {\n      if (started) {\n        return true;\n      }\n\n      if (msg === '') {\n        return false;\n      }\n\n      started = true;\n\n      return true;\n    }),\n    filter((msg: string): boolean => {\n      if (msg !== previousOutput) {\n        previousOutput = msg;\n        return true;\n      }\n\n      return false;\n    })\n  );\n}\n"],
  "mappings": "AAAA,YAAY,QAAQ;AACpB,SAAS,QAAQ,KAAK,UAAU,YAAY;AAC5C,SAAS,WAAW;AAEb,SAAS,aACd,SACuB;AACvB,MAAI,UAAU;AAEd,MAAI,eAAe;AAEnB,MAAI,UAAU;AAEd,MAAI,iBAAgC;AAEpC,SAAO,GAAG,MAAM,GAAG,OAAO,EAAE;AAAA,IAC1B,IAAI,CAAC,QAAyD;AAC5D,UAAI,iBAAiB;AAErB,UAAI,sBAAsB;AAE1B,aAAO,IAAI;AAAA,QACT,IAAI,CAAC,QAAQ;AACX,cAAI,IAAI,UAAU,MAAM;AACtB,gBAAI,wBAAwB,IAAI;AAC9B,oCAAsB;AAAA,YACxB;AAEA,mBAAO;AAAA,cACL,SAAS;AAAA,cACT,OAAO;AAAA,cACP,KAAK,IAAI;AAAA,YACX;AAAA,UACF;AAEA,cAAI,mBAAmB,IAAI;AACzB,6BAAiB;AAAA,UACnB;AAEA,iBAAO;AAAA,YACL,SAAS;AAAA,YACT,OAAO;AAAA,YACP,KAAK,OAAO,QAAQ,WAAW,MAAM,IAAI;AAAA,YACzC,kBAAkB;AAAA,UACpB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,IACD,SAAS;AAAA,IACT;AAAA,MACE,CAAC,KAAK,QAAqD;AACzD,YAAI,IAAI,OAAO;AACb,cAAI,YAAY,IAAI,OAAO,IAAI,IAAI;AAAA,QACrC,OAAO;AACL,iBAAO,IAAI,YAAY,IAAI,gBAA0B;AACrD,cAAI,OAAO,IAAI,OAAO,IAAI,IAAI;AAAA,QAChC;AACA,eAAO;AAAA,MACT;AAAA,MACA,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE;AAAA,IAIhC;AAAA,IACA;AAAA,MACE,CAAC,aAGa;AACZ,cAAM,cAAc,SAAS,YAAY,OAAO,OAAO;AAEvD,cAAM,eAAe,SAAS,OAAO,OAAO,OAAO,EAAE,KAAK,GAAG;AAE7D,YAAI,YAAY,WAAW,GAAG;AAC5B,iBAAO;AAAA,QACT;AAEA,cAAM,YAAY,YAAY,KAAK,GAAG;AAEtC,YAAI,CAAC,cAAc;AACjB,iBAAO;AAAA,QACT;AAEA,eAAO,GAAG,YAAY,GAAG,GAAG,GAAG,SAAS;AAAA,MAC1C;AAAA,IACF;AAAA,IACA,OAAO,CAAC,QAAyB;AAC/B,UAAI,SAAS;AACX,eAAO;AAAA,MACT;AAEA,UAAI,QAAQ,IAAI;AACd,eAAO;AAAA,MACT;AAEA,gBAAU;AAEV,aAAO;AAAA,IACT,CAAC;AAAA,IACD,OAAO,CAAC,QAAyB;AAC/B,UAAI,QAAQ,gBAAgB;AAC1B,yBAAiB;AACjB,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF;",
  "names": []
}
