{
  "version": 3,
  "sources": ["../../../../src/packages/plugin-commands-outdated/recursive.ts"],
  "sourcesContent": ["import { TABLE_OPTIONS } from '../cli-utils/index.ts';\nimport { PnpmError } from '../error/index.ts';\nimport {\n  outdatedDepsOfProjects,\n  type OutdatedPackage,\n} from '../outdated/index.ts';\nimport type {\n  DependenciesField,\n  IncludedDependencies,\n  ProjectManifest,\n  ProjectRootDir,\n} from '../types/index.ts';\nimport { table } from '@zkochan/table';\nimport chalk from 'chalk';\nimport isEmpty from 'ramda/src/isEmpty';\nimport sortWith from 'ramda/src/sortWith';\nimport {\n  getCellWidth,\n  type OutdatedCommandOptions,\n  type OutdatedPackageJSONOutput,\n  renderCurrent,\n  renderDetails,\n  renderLatest,\n  renderPackageName,\n  toOutdatedWithVersionDiff,\n} from './outdated.ts';\nimport { DEFAULT_COMPARATORS, type OutdatedWithVersionDiff } from './utils.ts';\n\nconst DEP_PRIORITY: Record<DependenciesField, number> = {\n  dependencies: 1,\n  devDependencies: 2,\n  optionalDependencies: 0,\n};\n\nconst COMPARATORS = [\n  ...DEFAULT_COMPARATORS,\n  (o1: OutdatedInWorkspace, o2: OutdatedInWorkspace) =>\n    DEP_PRIORITY[o1.belongsTo] - DEP_PRIORITY[o2.belongsTo],\n];\n\ninterface OutdatedInWorkspace extends OutdatedPackage {\n  belongsTo: DependenciesField;\n  current?: string | undefined;\n  dependentPkgs: Array<{ location: string; manifest: ProjectManifest }>;\n  latest?: string | undefined;\n  packageName: string;\n  wanted: string;\n}\n\nexport async function outdatedRecursive(\n  pkgs: Array<{ rootDir: ProjectRootDir; manifest: ProjectManifest }>,\n  params: string[],\n  opts: OutdatedCommandOptions & { include: IncludedDependencies }\n): Promise<{ output: string; exitCode: number }> {\n  const outdatedMap = {} as Record<string, OutdatedInWorkspace>;\n\n  const rootManifest = pkgs.find(\n    ({\n      rootDir,\n    }: {\n      rootDir: ProjectRootDir;\n      manifest: ProjectManifest;\n    }): boolean => {\n      return (rootDir as string) === opts.lockfileDir;\n    }\n  );\n\n  const outdatedPackagesByProject = await outdatedDepsOfProjects(pkgs, params, {\n    ...opts,\n    fullMetadata: opts.long ?? false,\n    ignoreDependencies:\n      rootManifest?.manifest.pnpm?.updateConfig?.ignoreDependencies,\n    retry: {\n      factor: opts.fetchRetryFactor ?? 3,\n      maxTimeout: opts.fetchRetryMaxtimeout ?? 60_000,\n      minTimeout: opts.fetchRetryMintimeout ?? 1_000,\n      retries: opts.fetchRetries ?? 3,\n    },\n    timeout: opts.fetchTimeout,\n  });\n  for (let i = 0; i < outdatedPackagesByProject.length; i++) {\n    const pkg = pkgs[i];\n\n    if (typeof pkg === 'undefined') {\n      continue;\n    }\n\n    const { rootDir, manifest } = pkg;\n\n    for (const outdatedPkg of outdatedPackagesByProject[i] ?? []) {\n      const key = JSON.stringify([\n        outdatedPkg.packageName,\n        outdatedPkg.current,\n        outdatedPkg.belongsTo,\n      ]);\n\n      if (!outdatedMap[key]) {\n        outdatedMap[key] = { ...outdatedPkg, dependentPkgs: [] };\n      }\n\n      outdatedMap[key].dependentPkgs.push({ location: rootDir, manifest });\n    }\n  }\n\n  let output!: string;\n\n  switch (opts.format ?? 'table') {\n    case 'table': {\n      output = renderOutdatedTable(outdatedMap, opts);\n\n      break;\n    }\n\n    case 'list': {\n      output = renderOutdatedList(outdatedMap, opts);\n\n      break;\n    }\n\n    case 'json': {\n      output = renderOutdatedJSON(outdatedMap, opts);\n\n      break;\n    }\n\n    default: {\n      throw new PnpmError(\n        'BAD_OUTDATED_FORMAT',\n        `Unsupported format: ${opts.format?.toString() ?? 'undefined'}`\n      );\n    }\n  }\n  return {\n    output,\n    exitCode: isEmpty.default(outdatedMap) ? 0 : 1,\n  };\n}\n\nfunction renderOutdatedTable(\n  outdatedMap: Record<string, OutdatedInWorkspace>,\n  opts: { long?: boolean | undefined }\n): string {\n  if (isEmpty.default(outdatedMap)) return '';\n  const columnNames = ['Package', 'Current', 'Latest', 'Dependents'];\n\n  const columnFns = [\n    renderPackageName,\n    renderCurrent,\n    renderLatest,\n    dependentPackages,\n  ];\n\n  if (opts.long === true) {\n    columnNames.push('Details');\n    columnFns.push(renderDetails);\n  }\n\n  // Avoid the overhead of allocating a new array caused by calling `array.map()`\n  for (let i = 0; i < columnNames.length; i++)\n    columnNames[i] = chalk.blueBright(columnNames[i]);\n\n  const data = [\n    columnNames,\n    ...sortOutdatedPackages(Object.values(outdatedMap)).map((outdatedPkg) =>\n      columnFns.map((fn) => fn(outdatedPkg))\n    ),\n  ];\n  return table(data, {\n    ...TABLE_OPTIONS,\n    columns: {\n      ...TABLE_OPTIONS.columns,\n      // Dependents column:\n      3: {\n        width: getCellWidth(data, 3, 30),\n        wrapWord: true,\n      },\n    },\n  });\n}\n\nfunction renderOutdatedList(\n  outdatedMap: Record<string, OutdatedInWorkspace>,\n  opts: { long?: boolean | undefined }\n): string {\n  if (isEmpty.default(outdatedMap)) return '';\n  return (\n    // biome-ignore lint/style/useTemplate: <explanation>\n    sortOutdatedPackages(Object.values(outdatedMap))\n      .map((outdatedPkg: SortedOutdatedPackage): string => {\n        let info = `${chalk.bold(renderPackageName(outdatedPkg))} ${renderCurrent(outdatedPkg)} ${chalk.grey('=>')} ${renderLatest(outdatedPkg)}`;\n\n        const dependents = dependentPackages(outdatedPkg);\n\n        if (dependents) {\n          info += `\\n${chalk.bold(\n            outdatedPkg.dependentPkgs.length > 1 ? 'Dependents:' : 'Dependent:'\n          )} ${dependents}`;\n        }\n\n        if (opts.long === true) {\n          const details = renderDetails(outdatedPkg);\n\n          if (details) {\n            info += `\\n${details}`;\n          }\n        }\n\n        return info;\n      })\n      .join('\\n\\n') + '\\n'\n  );\n}\n\nexport interface OutdatedPackageInWorkspaceJSONOutput\n  extends OutdatedPackageJSONOutput {\n  dependentPackages: Array<{ name: string; location: string }>;\n}\n\nfunction renderOutdatedJSON(\n  outdatedMap: Record<string, OutdatedInWorkspace>,\n  opts: { long?: boolean | undefined }\n): string {\n  const outdatedPackagesJSON: Record<\n    string,\n    OutdatedPackageInWorkspaceJSONOutput\n  > = sortOutdatedPackages(Object.values(outdatedMap)).reduce(\n    (\n      acc: Record<string, OutdatedPackageInWorkspaceJSONOutput>,\n      outdatedPkg: SortedOutdatedPackage\n    ): Record<string, OutdatedPackageInWorkspaceJSONOutput> => {\n      acc[outdatedPkg.packageName] = {\n        current: outdatedPkg.current,\n        latest: outdatedPkg.latestManifest?.version,\n        wanted: outdatedPkg.wanted,\n        isDeprecated: Boolean(outdatedPkg.latestManifest?.deprecated),\n        dependencyType: outdatedPkg.belongsTo,\n        dependentPackages: outdatedPkg.dependentPkgs.map(\n          ({\n            manifest,\n            location,\n          }: {\n            location: string;\n            manifest: ProjectManifest;\n          }): { name: string; location: string } => {\n            return { name: manifest.name, location };\n          }\n        ),\n      };\n\n      const curr = acc[outdatedPkg.packageName];\n\n      if (opts.long === true && typeof curr !== 'undefined') {\n        curr.latestManifest = outdatedPkg.latestManifest;\n      }\n\n      return acc;\n    },\n    {}\n  );\n\n  return JSON.stringify(outdatedPackagesJSON, null, 2);\n}\n\nfunction dependentPackages({ dependentPkgs }: OutdatedInWorkspace): string {\n  return dependentPkgs\n    .map(\n      ({\n        manifest,\n        location,\n      }: {\n        location: string;\n        manifest: ProjectManifest;\n      }): string => {\n        return manifest.name || location;\n      }\n    )\n    .sort()\n    .join(', ');\n}\n\ninterface SortedOutdatedPackage\n  extends OutdatedInWorkspace,\n    OutdatedWithVersionDiff {}\n\nfunction sortOutdatedPackages(\n  outdatedPackages: readonly OutdatedInWorkspace[]\n): SortedOutdatedPackage[] {\n  return sortWith.default(\n    COMPARATORS,\n    outdatedPackages.map(toOutdatedWithVersionDiff)\n  );\n}\n"],
  "mappings": "AAAA,SAAS,qBAAqB;AAC9B,SAAS,iBAAiB;AAC1B;AAAA,EACE;AAAA,OAEK;AAOP,SAAS,aAAa;AACtB,OAAO,WAAW;AAClB,OAAO,aAAa;AACpB,OAAO,cAAc;AACrB;AAAA,EACE;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,2BAAyD;AAElE,MAAM,eAAkD;AAAA,EACtD,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,sBAAsB;AACxB;AAEA,MAAM,cAAc;AAAA,EAClB,GAAG;AAAA,EACH,CAAC,IAAyB,OACxB,aAAa,GAAG,SAAS,IAAI,aAAa,GAAG,SAAS;AAC1D;AAWA,eAAsB,kBACpB,MACA,QACA,MAC+C;AAC/C,QAAM,cAAc,CAAC;AAErB,QAAM,eAAe,KAAK;AAAA,IACxB,CAAC;AAAA,MACC;AAAA,IACF,MAGe;AACb,aAAQ,YAAuB,KAAK;AAAA,IACtC;AAAA,EACF;AAEA,QAAM,4BAA4B,MAAM,uBAAuB,MAAM,QAAQ;AAAA,IAC3E,GAAG;AAAA,IACH,cAAc,KAAK,QAAQ;AAAA,IAC3B,oBACE,cAAc,SAAS,MAAM,cAAc;AAAA,IAC7C,OAAO;AAAA,MACL,QAAQ,KAAK,oBAAoB;AAAA,MACjC,YAAY,KAAK,wBAAwB;AAAA,MACzC,YAAY,KAAK,wBAAwB;AAAA,MACzC,SAAS,KAAK,gBAAgB;AAAA,IAChC;AAAA,IACA,SAAS,KAAK;AAAA,EAChB,CAAC;AACD,WAAS,IAAI,GAAG,IAAI,0BAA0B,QAAQ,KAAK;AACzD,UAAM,MAAM,KAAK,CAAC;AAElB,QAAI,OAAO,QAAQ,aAAa;AAC9B;AAAA,IACF;AAEA,UAAM,EAAE,SAAS,SAAS,IAAI;AAE9B,eAAW,eAAe,0BAA0B,CAAC,KAAK,CAAC,GAAG;AAC5D,YAAM,MAAM,KAAK,UAAU;AAAA,QACzB,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,YAAY;AAAA,MACd,CAAC;AAED,UAAI,CAAC,YAAY,GAAG,GAAG;AACrB,oBAAY,GAAG,IAAI,EAAE,GAAG,aAAa,eAAe,CAAC,EAAE;AAAA,MACzD;AAEA,kBAAY,GAAG,EAAE,cAAc,KAAK,EAAE,UAAU,SAAS,SAAS,CAAC;AAAA,IACrE;AAAA,EACF;AAEA,MAAI;AAEJ,UAAQ,KAAK,UAAU,SAAS;AAAA,IAC9B,KAAK,SAAS;AACZ,eAAS,oBAAoB,aAAa,IAAI;AAE9C;AAAA,IACF;AAAA,IAEA,KAAK,QAAQ;AACX,eAAS,mBAAmB,aAAa,IAAI;AAE7C;AAAA,IACF;AAAA,IAEA,KAAK,QAAQ;AACX,eAAS,mBAAmB,aAAa,IAAI;AAE7C;AAAA,IACF;AAAA,IAEA,SAAS;AACP,YAAM,IAAI;AAAA,QACR;AAAA,QACA,uBAAuB,KAAK,QAAQ,SAAS,KAAK,WAAW;AAAA,MAC/D;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,IACL;AAAA,IACA,UAAU,QAAQ,QAAQ,WAAW,IAAI,IAAI;AAAA,EAC/C;AACF;AAEA,SAAS,oBACP,aACA,MACQ;AACR,MAAI,QAAQ,QAAQ,WAAW,EAAG,QAAO;AACzC,QAAM,cAAc,CAAC,WAAW,WAAW,UAAU,YAAY;AAEjE,QAAM,YAAY;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,MAAM;AACtB,gBAAY,KAAK,SAAS;AAC1B,cAAU,KAAK,aAAa;AAAA,EAC9B;AAGA,WAAS,IAAI,GAAG,IAAI,YAAY,QAAQ;AACtC,gBAAY,CAAC,IAAI,MAAM,WAAW,YAAY,CAAC,CAAC;AAElD,QAAM,OAAO;AAAA,IACX;AAAA,IACA,GAAG,qBAAqB,OAAO,OAAO,WAAW,CAAC,EAAE;AAAA,MAAI,CAAC,gBACvD,UAAU,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC;AAAA,IACvC;AAAA,EACF;AACA,SAAO,MAAM,MAAM;AAAA,IACjB,GAAG;AAAA,IACH,SAAS;AAAA,MACP,GAAG,cAAc;AAAA;AAAA,MAEjB,GAAG;AAAA,QACD,OAAO,aAAa,MAAM,GAAG,EAAE;AAAA,QAC/B,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,SAAS,mBACP,aACA,MACQ;AACR,MAAI,QAAQ,QAAQ,WAAW,EAAG,QAAO;AACzC;AAAA;AAAA,IAEE,qBAAqB,OAAO,OAAO,WAAW,CAAC,EAC5C,IAAI,CAAC,gBAA+C;AACnD,UAAI,OAAO,GAAG,MAAM,KAAK,kBAAkB,WAAW,CAAC,CAAC,IAAI,cAAc,WAAW,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,IAAI,aAAa,WAAW,CAAC;AAEvI,YAAM,aAAa,kBAAkB,WAAW;AAEhD,UAAI,YAAY;AACd,gBAAQ;AAAA,EAAK,MAAM;AAAA,UACjB,YAAY,cAAc,SAAS,IAAI,gBAAgB;AAAA,QACzD,CAAC,IAAI,UAAU;AAAA,MACjB;AAEA,UAAI,KAAK,SAAS,MAAM;AACtB,cAAM,UAAU,cAAc,WAAW;AAEzC,YAAI,SAAS;AACX,kBAAQ;AAAA,EAAK,OAAO;AAAA,QACtB;AAAA,MACF;AAEA,aAAO;AAAA,IACT,CAAC,EACA,KAAK,MAAM,IAAI;AAAA;AAEtB;AAOA,SAAS,mBACP,aACA,MACQ;AACR,QAAM,uBAGF,qBAAqB,OAAO,OAAO,WAAW,CAAC,EAAE;AAAA,IACnD,CACE,KACA,gBACyD;AACzD,UAAI,YAAY,WAAW,IAAI;AAAA,QAC7B,SAAS,YAAY;AAAA,QACrB,QAAQ,YAAY,gBAAgB;AAAA,QACpC,QAAQ,YAAY;AAAA,QACpB,cAAc,QAAQ,YAAY,gBAAgB,UAAU;AAAA,QAC5D,gBAAgB,YAAY;AAAA,QAC5B,mBAAmB,YAAY,cAAc;AAAA,UAC3C,CAAC;AAAA,YACC;AAAA,YACA;AAAA,UACF,MAG0C;AACxC,mBAAO,EAAE,MAAM,SAAS,MAAM,SAAS;AAAA,UACzC;AAAA,QACF;AAAA,MACF;AAEA,YAAM,OAAO,IAAI,YAAY,WAAW;AAExC,UAAI,KAAK,SAAS,QAAQ,OAAO,SAAS,aAAa;AACrD,aAAK,iBAAiB,YAAY;AAAA,MACpC;AAEA,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AAEA,SAAO,KAAK,UAAU,sBAAsB,MAAM,CAAC;AACrD;AAEA,SAAS,kBAAkB,EAAE,cAAc,GAAgC;AACzE,SAAO,cACJ;AAAA,IACC,CAAC;AAAA,MACC;AAAA,MACA;AAAA,IACF,MAGc;AACZ,aAAO,SAAS,QAAQ;AAAA,IAC1B;AAAA,EACF,EACC,KAAK,EACL,KAAK,IAAI;AACd;AAMA,SAAS,qBACP,kBACyB;AACzB,SAAO,SAAS;AAAA,IACd;AAAA,IACA,iBAAiB,IAAI,yBAAyB;AAAA,EAChD;AACF;",
  "names": []
}
