{
  "version": 3,
  "sources": ["../../../../../src/packages/default-reporter/reporterForClient/reportProgress.ts"],
  "sourcesContent": ["import type { ProgressLog, StageLog } from '../../core-loggers/index.ts';\nimport * as Rx from 'rxjs';\nimport { filter, map, mapTo, takeWhile, startWith, take } from 'rxjs/operators';\nimport { hlValue } from './outputConstants.ts';\nimport { zoomOut } from './utils/zooming.ts';\n\ntype ProgressStats = {\n  fetched: number;\n  imported: number;\n  resolved: number;\n  reused: number;\n};\n\ntype ModulesInstallProgress = {\n  importingDone$: Rx.Observable<boolean>;\n  progress$: Rx.Observable<ProgressStats>;\n  requirer: string;\n};\n\nexport type StatusMessage = {\n  msg: string;\n  fixed: boolean;\n  done?: boolean | undefined;\n};\n\nexport function reportProgress(\n  log$: {\n    progress: Rx.Observable<ProgressLog>;\n    stage: Rx.Observable<StageLog>;\n  },\n  opts: {\n    cwd: string;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    throttle?: Rx.OperatorFunction<any, any> | undefined;\n    hideAddedPkgsProgress?: boolean | undefined;\n    hideProgressPrefix?: boolean | undefined;\n  }\n): Rx.Observable<Rx.Observable<StatusMessage>> {\n  const progressOutput = throttledProgressOutput.bind(null, opts);\n\n  return getModulesInstallProgress$(log$.stage, log$.progress).pipe(\n    map(\n      opts.hideProgressPrefix === true\n        ? ({ importingDone$, progress$ }) =>\n            progressOutput(importingDone$, progress$)\n        : ({ importingDone$, progress$, requirer }) => {\n            const output$ = progressOutput(importingDone$, progress$);\n\n            if (requirer === opts.cwd) {\n              return output$;\n            }\n            return output$.pipe(\n              map((msg) => {\n                msg['msg'] = zoomOut(opts.cwd, requirer, msg['msg']);\n                return msg;\n              })\n            );\n          }\n    )\n  );\n}\n\nfunction throttledProgressOutput(\n  opts: {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    throttle?: Rx.OperatorFunction<any, any> | undefined;\n    hideAddedPkgsProgress?: boolean | undefined;\n  },\n  importingDone$: Rx.Observable<boolean>,\n  progress$: Rx.Observable<ProgressStats>\n): Rx.Observable<StatusMessage> {\n  const progress =\n    opts.throttle != null ? progress$.pipe(opts.throttle) : progress$;\n\n  const combinedProgress = Rx.combineLatest(progress, importingDone$)\n    // Avoid logs after all resolved packages were downloaded.\n    // Fixing issue: https://github.com/pnpm/pnpm/issues/1028#issuecomment-364782901\n    .pipe(takeWhile(([, importingDone]) => !importingDone, true));\n  return combinedProgress.pipe(\n    map(\n      opts.hideAddedPkgsProgress === true\n        ? createStatusMessageWithoutAdded\n        : createStatusMessage\n    )\n  );\n}\n\nfunction getModulesInstallProgress$(\n  stage$: Rx.Observable<StageLog>,\n  progress$: Rx.Observable<ProgressLog>\n): Rx.Observable<ModulesInstallProgress> {\n  const modulesInstallProgressPushStream =\n    new Rx.Subject<ModulesInstallProgress>();\n  const progressStatsPushStreamByRequirer =\n    getProgressStatsPushStreamByRequirer(progress$);\n\n  const stagePushStreamByRequirer: {\n    [requirer: string]: Rx.Subject<StageLog>;\n  } = {};\n  // biome-ignore lint/complexity/noForEach: <explanation>\n  stage$\n    .forEach((log: StageLog) => {\n      if (!stagePushStreamByRequirer[log.prefix]) {\n        stagePushStreamByRequirer[log.prefix] = new Rx.Subject<StageLog>();\n        if (!progressStatsPushStreamByRequirer[log.prefix]) {\n          progressStatsPushStreamByRequirer[log.prefix] = new Rx.Subject();\n        }\n\n        modulesInstallProgressPushStream.next({\n          importingDone$: stage$ToImportingDone$(\n            Rx.from(stagePushStreamByRequirer[log.prefix] ?? [])\n          ),\n          progress$: Rx.from(\n            progressStatsPushStreamByRequirer[log.prefix] ?? []\n          ),\n          requirer: log.prefix,\n        });\n      }\n\n      const stagePushStream = stagePushStreamByRequirer[log.prefix];\n\n      if (stagePushStream) {\n        stagePushStream.next(log);\n\n        if (log.stage === 'importing_done') {\n          const progressStatsPushStream =\n            progressStatsPushStreamByRequirer[log.prefix];\n\n          if (progressStatsPushStream) {\n            progressStatsPushStream.complete();\n          }\n\n          stagePushStream.complete();\n        }\n      }\n    })\n    .catch(() => {});\n\n  return Rx.from(modulesInstallProgressPushStream);\n}\n\nfunction stage$ToImportingDone$(\n  stage$: Rx.Observable<StageLog>\n): Rx.Observable<boolean> {\n  return stage$.pipe(\n    filter((log: StageLog) => log.stage === 'importing_done'),\n    mapTo(true),\n    take(1),\n    startWith(false)\n  );\n}\n\nfunction getProgressStatsPushStreamByRequirer(\n  progress$: Rx.Observable<ProgressLog>\n): { [requirer: string]: Rx.Subject<ProgressStats> } {\n  const progressStatsPushStreamByRequirer: {\n    [requirer: string]: Rx.Subject<ProgressStats>;\n  } = {};\n\n  const previousProgressStatsByRequirer: { [requirer: string]: ProgressStats } =\n    {};\n  // biome-ignore lint/complexity/noForEach: <explanation>\n  progress$\n    .forEach((log: ProgressLog): void => {\n      if (!previousProgressStatsByRequirer[log.requester]) {\n        previousProgressStatsByRequirer[log.requester] = {\n          fetched: 0,\n          imported: 0,\n          resolved: 0,\n          reused: 0,\n        };\n      }\n\n      const previousProgressStats =\n        previousProgressStatsByRequirer[log.requester];\n\n      if (typeof previousProgressStats !== 'undefined') {\n        switch (log.status) {\n          case 'resolved': {\n            previousProgressStats.resolved++;\n            break;\n          }\n          case 'fetched': {\n            previousProgressStats.fetched++;\n            break;\n          }\n          case 'found_in_store': {\n            previousProgressStats.reused++;\n            break;\n          }\n          case 'imported': {\n            previousProgressStats.imported++;\n            break;\n          }\n        }\n      }\n\n      if (!progressStatsPushStreamByRequirer[log.requester]) {\n        progressStatsPushStreamByRequirer[log.requester] =\n          new Rx.Subject<ProgressStats>();\n      }\n\n      if (typeof previousProgressStats !== 'undefined') {\n        const progressStatsPushStream =\n          progressStatsPushStreamByRequirer[log.requester];\n\n        if (typeof progressStatsPushStream !== 'undefined') {\n          progressStatsPushStream.next(previousProgressStats);\n        }\n      }\n    })\n    .catch(() => {});\n\n  return progressStatsPushStreamByRequirer;\n}\n\nfunction createStatusMessage([progress, importingDone]: [\n  ProgressStats,\n  boolean,\n]): StatusMessage {\n  const msg = `Progress: resolved ${hlValue(\n    progress.resolved.toString()\n  )}, reused ${hlValue(progress.reused.toString())}, downloaded ${hlValue(\n    progress.fetched.toString()\n  )}, added ${hlValue(progress.imported.toString())}`;\n  if (importingDone) {\n    return {\n      done: true,\n      fixed: false,\n      msg: `${msg}, done`,\n    };\n  }\n  return {\n    fixed: true,\n    msg,\n  };\n}\n\nfunction createStatusMessageWithoutAdded([progress, importingDone]: [\n  ProgressStats,\n  boolean,\n]): StatusMessage {\n  const msg = `Progress: resolved ${hlValue(\n    progress.resolved.toString()\n  )}, reused ${hlValue(progress.reused.toString())}, downloaded ${hlValue(\n    progress.fetched.toString()\n  )}`;\n  if (importingDone) {\n    return {\n      done: true,\n      fixed: false,\n      msg: `${msg}, done`,\n    };\n  }\n  return {\n    fixed: true,\n    msg,\n  };\n}\n"],
  "mappings": "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",
  "names": []
}
