{
  "version": 3,
  "sources": ["../../../../../src/packages/default-reporter/reporterForClient/pkgsDiff.ts"],
  "sourcesContent": ["import type * as logs from '../../core-loggers/index.ts';\nimport type { BaseManifest } from '../../types/index.ts';\nimport * as Rx from 'rxjs';\nimport {\n  filter,\n  map,\n  mapTo,\n  reduce,\n  scan,\n  startWith,\n  take,\n} from 'rxjs/operators';\nimport mergeRight from 'ramda/src/mergeRight';\nimport difference from 'ramda/src/difference';\n\nexport type PackageDiff = {\n  added: boolean;\n  from?: string | undefined;\n  name: string;\n  realName?: string | undefined;\n  version?: string | undefined;\n  deprecated?: boolean | undefined;\n  latest?: string | undefined;\n};\n\nexport type Map<T> = {\n  [index: string]: T;\n};\n\nexport const propertyByDependencyType = {\n  dev: 'devDependencies',\n  nodeModulesOnly: 'node_modules',\n  optional: 'optionalDependencies',\n  peer: 'peerDependencies',\n  prod: 'dependencies',\n} as const;\n\nexport type PkgsDiff = {\n  dev: Map<PackageDiff>;\n  nodeModulesOnly: Map<PackageDiff>;\n  optional: Map<PackageDiff>;\n  peer: Map<PackageDiff>;\n  prod: Map<PackageDiff>;\n};\n\nexport function getPkgsDiff(\n  log$: {\n    deprecation: Rx.Observable<logs.DeprecationLog>;\n    summary: Rx.Observable<logs.SummaryLog>;\n    root: Rx.Observable<logs.RootLog>;\n    packageManifest: Rx.Observable<logs.PackageManifestLog>;\n  },\n  opts: {\n    prefix: string;\n  }\n): Rx.Observable<PkgsDiff> {\n  const deprecationSet$ = log$.deprecation.pipe(\n    filter((log: logs.DeprecationLog): boolean => {\n      return log.prefix === opts.prefix;\n    }),\n    scan((acc: Set<string>, log: logs.DeprecationLog): Set<string> => {\n      acc.add(log.pkgId);\n      return acc;\n    }, new Set()),\n    startWith(new Set<string>())\n  );\n\n  const filterPrefix = filter(\n    (log: { prefix: string }) => log.prefix === opts.prefix\n  );\n\n  const pkgsDiff$ = Rx.combineLatest(\n    log$.root.pipe(filterPrefix),\n    deprecationSet$\n  ).pipe(\n    scan(\n      (pkgsDiff, args) => {\n        const rootLog = args[0];\n        const deprecationSet = args[1] as Set<string>;\n        let action: '-' | '+' | undefined;\n        let log: any; // eslint-disable-line\n        if ('added' in rootLog) {\n          action = '+';\n          log = rootLog['added'];\n        } else if ('removed' in rootLog) {\n          action = '-';\n          log = rootLog['removed'];\n        } else {\n          return pkgsDiff;\n        }\n        // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n        const depType = (log.dependencyType ||\n          'nodeModulesOnly') as keyof typeof pkgsDiff;\n        const oppositeKey = `${action === '-' ? '+' : '-'}${log.name as string}`;\n        const previous = pkgsDiff[depType][oppositeKey];\n        if (previous && previous.version === log.version) {\n          delete pkgsDiff[depType][oppositeKey];\n          return pkgsDiff;\n        }\n        pkgsDiff[depType][`${action}${log.name as string}`] = {\n          added: action === '+',\n          deprecated: deprecationSet.has(log.id),\n          from: log.linkedFrom,\n          latest: log.latest,\n          name: log.name,\n          realName: log.realName,\n          version: log.version,\n        };\n        return pkgsDiff;\n      },\n      {\n        dev: {},\n        nodeModulesOnly: {},\n        optional: {},\n        peer: {},\n        prod: {},\n      } as PkgsDiff\n    ),\n    startWith({\n      dev: {},\n      nodeModulesOnly: {},\n      optional: {},\n      peer: {},\n      prod: {},\n    } as PkgsDiff)\n  );\n\n  const packageManifest$ = Rx.merge(\n    log$.packageManifest.pipe(filterPrefix),\n    log$.summary.pipe(filterPrefix, mapTo({}))\n  ).pipe(\n    take(2),\n    reduce(mergeRight.default, {} as any) // eslint-disable-line @typescript-eslint/no-explicit-any\n  ) as Rx.Observable<logs.PackageManifestLog>;\n\n  return Rx.combineLatest(pkgsDiff$, packageManifest$).pipe(\n    map(\n      ([pkgsDiff, packageManifests]: [\n        PkgsDiff,\n        logs.PackageManifestLog,\n      ]): PkgsDiff => {\n        const init = packageManifests.initial;\n        const upd = packageManifests.updated;\n\n        if (typeof init === 'undefined' || typeof upd === 'undefined') {\n          return pkgsDiff;\n        }\n\n        const initialPackageManifest = removeOptionalFromProdDeps(init);\n\n        const updatedPackageManifest = removeOptionalFromProdDeps(upd);\n\n        for (const depType of ['peer', 'prod', 'optional', 'dev'] as const) {\n          const prop = propertyByDependencyType[depType];\n\n          const initialDeps = Object.keys(initialPackageManifest[prop] ?? {});\n\n          const updatedDeps = Object.keys(updatedPackageManifest[prop] ?? {});\n\n          const removedDeps = difference.default(initialDeps, updatedDeps);\n\n          for (const removedDep of removedDeps) {\n            if (!pkgsDiff[depType][`-${removedDep}`]) {\n              pkgsDiff[depType][`-${removedDep}`] = {\n                added: false,\n                name: removedDep,\n                version: initialPackageManifest[prop]?.[removedDep],\n              };\n            }\n          }\n\n          const addedDeps = difference.default(updatedDeps, initialDeps);\n\n          for (const addedDep of addedDeps) {\n            if (!pkgsDiff[depType][`+${addedDep}`]) {\n              pkgsDiff[depType][`+${addedDep}`] = {\n                added: true,\n                name: addedDep,\n                version: updatedPackageManifest[prop]?.[addedDep],\n              };\n            }\n          }\n        }\n        return pkgsDiff;\n      }\n    )\n  );\n}\n\nfunction removeOptionalFromProdDeps<Pkg extends BaseManifest>(pkg: Pkg): Pkg {\n  if (pkg.dependencies == null || pkg.optionalDependencies == null) {\n    return pkg;\n  }\n\n  for (const depName of Object.keys(pkg.dependencies)) {\n    if (typeof pkg.optionalDependencies[depName] !== 'undefined') {\n      delete pkg.dependencies[depName];\n    }\n  }\n\n  return pkg;\n}\n"],
  "mappings": "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",
  "names": []
}
