{
  "version": 3,
  "sources": ["../../../../src/packages/list/index.ts"],
  "sourcesContent": ["import path from 'node:path';\nimport { safeReadProjectManifestOnly } from '../read-project-manifest/index.ts';\nimport type { DependenciesField, Registries } from '../types/index.ts';\nimport {\n  type PackageNode,\n  buildDependenciesHierarchy,\n  type DependenciesHierarchy,\n  createPackagesSearcher,\n} from '../reviewing.dependencies-hierarchy/index.ts';\nimport { renderJson } from './renderJson.ts';\nimport { renderParseable } from './renderParseable.ts';\nimport { renderTree } from './renderTree.ts';\nimport type { PackageDependencyHierarchy } from './types.ts';\nimport { pruneDependenciesTrees } from './pruneTree.ts';\n\nexport type { PackageNode } from '../reviewing.dependencies-hierarchy/index.ts';\n\nexport {\n  renderJson,\n  renderParseable,\n  renderTree,\n  type PackageDependencyHierarchy,\n};\n\nconst DEFAULTS = {\n  alwaysPrintRootPackage: true,\n  depth: 0,\n  long: false,\n  registries: undefined,\n  reportAs: 'tree' as const,\n  showExtraneous: true,\n};\n\nexport interface FlattenedSearchPackage extends PackageDependencyHierarchy {\n  depPath: string;\n}\n\nexport function flattenSearchedPackages(\n  pkgs: PackageDependencyHierarchy[],\n  opts: {\n    lockfileDir: string;\n  }\n): FlattenedSearchPackage[] {\n  const flattedPkgs: FlattenedSearchPackage[] = [];\n\n  for (const pkg of pkgs) {\n    _walker(\n      [\n        ...(pkg.optionalDependencies ?? []),\n        ...(pkg.dependencies ?? []),\n        ...(pkg.devDependencies ?? []),\n        ...(pkg.unsavedDependencies ?? []),\n      ],\n      path.relative(opts.lockfileDir, pkg.path) || '.'\n    );\n  }\n\n  return flattedPkgs;\n\n  function _walker(packages: PackageNode[], depPath: string): void {\n    for (const pkg of packages) {\n      const nextDepPath = `${depPath} > ${pkg.name}@${pkg.version}`;\n\n      if (typeof pkg.dependencies?.length === 'number') {\n        _walker(pkg.dependencies, nextDepPath);\n      } else {\n        flattedPkgs.push({\n          depPath: nextDepPath,\n          ...pkg,\n        });\n      }\n    }\n  }\n}\n\nexport async function searchForPackages(\n  packages: string[],\n  projectPaths: string[],\n  opts: {\n    depth?: number | undefined;\n    excludePeerDependencies?: boolean;\n    lockfileDir: string;\n    include?: { [dependenciesField in DependenciesField]: boolean } | undefined;\n    onlyProjects?: boolean | undefined;\n    registries?: Registries | undefined;\n    modulesDir?: string | undefined;\n    virtualStoreDirMaxLength: number;\n  }\n): Promise<PackageDependencyHierarchy[]> {\n  const search = createPackagesSearcher(packages);\n\n  return Promise.all(\n    Object.entries(\n      await buildDependenciesHierarchy(projectPaths, {\n        depth: opts.depth,\n        excludePeerDependencies: opts.excludePeerDependencies,\n        include: opts.include,\n        lockfileDir: opts.lockfileDir,\n        onlyProjects: opts.onlyProjects,\n        registries: opts.registries,\n        search,\n        modulesDir: opts.modulesDir,\n        virtualStoreDirMaxLength: opts.virtualStoreDirMaxLength,\n      })\n    ).map(\n      async ([projectPath, buildDependenciesHierarchy]): Promise<{\n        dependencies?: PackageNode[] | undefined;\n        devDependencies?: PackageNode[] | undefined;\n        optionalDependencies?: PackageNode[] | undefined;\n        unsavedDependencies?: PackageNode[] | undefined;\n        name: string;\n        version: string;\n        private: boolean | undefined;\n        path: string;\n      } | null> => {\n        const entryPkg = await safeReadProjectManifestOnly(projectPath);\n\n        if (entryPkg === null) {\n          return null;\n        }\n\n        return {\n          name: entryPkg.name,\n          version: entryPkg.version,\n          private: entryPkg.private,\n\n          path: projectPath,\n          ...buildDependenciesHierarchy,\n        };\n      }\n    )\n  ).then((pkgs) => {\n    return pkgs.filter(Boolean);\n  });\n}\n\nexport async function listForPackages(\n  packages: string[],\n  projectPaths: string[],\n  maybeOpts: {\n    alwaysPrintRootPackage?: boolean | undefined;\n    depth?: number | undefined;\n    lockfileDir: string;\n    long?: boolean | undefined;\n    include?: { [dependenciesField in DependenciesField]: boolean } | undefined;\n    onlyProjects?: boolean | undefined;\n    reportAs?: 'parseable' | 'tree' | 'json';\n    registries?: Registries | undefined;\n    modulesDir?: string | undefined;\n    virtualStoreDirMaxLength: number;\n  }\n): Promise<string> {\n  const opts = { ...DEFAULTS, ...maybeOpts };\n\n  const pkgs = await searchForPackages(packages, projectPaths, opts);\n\n  const prunedPkgs = pruneDependenciesTrees(pkgs, 10);\n\n  const print = getPrinter(opts.reportAs);\n\n  return print(prunedPkgs, {\n    alwaysPrintRootPackage: opts.alwaysPrintRootPackage,\n    depth: opts.depth,\n    long: opts.long,\n    search: Boolean(packages.length),\n    showExtraneous: opts.showExtraneous,\n  });\n}\n\nexport async function list(\n  projectPaths: string[],\n  maybeOpts: {\n    alwaysPrintRootPackage?: boolean | undefined;\n    depth?: number | undefined;\n    excludePeerDependencies?: boolean | undefined;\n    lockfileDir: string;\n    long?: boolean | undefined;\n    include?: { [dependenciesField in DependenciesField]: boolean } | undefined;\n    onlyProjects?: boolean | undefined;\n    reportAs: 'parseable' | 'tree' | 'json';\n    registries?: Registries | undefined;\n    showExtraneous?: boolean | undefined;\n    modulesDir?: string | undefined;\n    virtualStoreDirMaxLength: number;\n  }\n): Promise<string> {\n  const opts = { ...DEFAULTS, ...maybeOpts };\n\n  const pkgs = await Promise.all(\n    Object.entries(\n      opts.depth === -1\n        ? projectPaths.reduce(\n            (acc, projectPath) => {\n              acc[projectPath] = {};\n              return acc;\n            },\n            {} as Record<string, DependenciesHierarchy>\n          )\n        : await buildDependenciesHierarchy(projectPaths, {\n            depth: opts.depth,\n            excludePeerDependencies: maybeOpts.excludePeerDependencies,\n            include: maybeOpts.include,\n            lockfileDir: maybeOpts.lockfileDir,\n            onlyProjects: maybeOpts.onlyProjects,\n            registries: opts.registries,\n            modulesDir: opts.modulesDir,\n            virtualStoreDirMaxLength: opts.virtualStoreDirMaxLength,\n          })\n    ).map(\n      async ([projectPath, dependenciesHierarchy]: [\n        string,\n        DependenciesHierarchy,\n      ]): Promise<PackageDependencyHierarchy | null> => {\n        const entryPkg = await safeReadProjectManifestOnly(projectPath);\n\n        if (entryPkg === null) {\n          return null;\n        }\n\n        return {\n          name: entryPkg.name,\n          version: entryPkg.version,\n          private: entryPkg.private,\n\n          path: projectPath,\n          ...dependenciesHierarchy,\n        } as PackageDependencyHierarchy;\n      }\n    )\n  ).then((pkgs) => {\n    return pkgs.filter(Boolean);\n  });\n\n  const print = getPrinter(opts.reportAs);\n  return print(pkgs, {\n    alwaysPrintRootPackage: opts.alwaysPrintRootPackage,\n    depth: opts.depth,\n    long: opts.long,\n    search: false,\n    showExtraneous: opts.showExtraneous ?? false,\n  });\n}\n\ntype Printer = (\n  packages: PackageDependencyHierarchy[],\n  opts: {\n    alwaysPrintRootPackage?: boolean | undefined;\n    depth?: number | undefined;\n    long?: boolean | undefined;\n    search: boolean;\n    showExtraneous: boolean;\n  }\n) => Promise<string>;\n\nfunction getPrinter(reportAs: 'parseable' | 'tree' | 'json'): Printer {\n  switch (reportAs) {\n    case 'parseable':\n      return renderParseable;\n    case 'json':\n      return renderJson;\n    case 'tree':\n      return renderTree;\n  }\n}\n"],
  "mappings": "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",
  "names": ["buildDependenciesHierarchy", "pkgs"]
}
