{
  "version": 3,
  "sources": ["../../../../src/packages/list/renderParseable.ts"],
  "sourcesContent": ["import type { PackageNode } from '../reviewing.dependencies-hierarchy/index.ts';\nimport sortBy from 'ramda/src/sortBy';\nimport prop from 'ramda/src/prop';\nimport type { PackageDependencyHierarchy } from './types.ts';\n\nconst sortPackages = sortBy.default(prop.default('name'));\n\nexport async function renderParseable(\n  pkgs: PackageDependencyHierarchy[],\n  opts: {\n    long?: boolean | undefined;\n    depth?: number | undefined;\n    alwaysPrintRootPackage?: boolean | undefined;\n    search: boolean;\n  }\n): Promise<string> {\n  const depPaths = new Set<string>();\n\n  return pkgs\n    .map(renderParseableForPackage.bind(null, depPaths, opts))\n    .filter((p: string): boolean => {\n      return p.length !== 0;\n    })\n    .join('\\n');\n}\n\nfunction renderParseableForPackage(\n  depPaths: Set<string>,\n  opts: {\n    long?: boolean | undefined;\n    depth?: number | undefined;\n    alwaysPrintRootPackage?: boolean | undefined;\n    search: boolean;\n  },\n  pkg: PackageDependencyHierarchy\n): string {\n  const pkgs = sortPackages(\n    flatten(depPaths, [\n      ...(pkg.optionalDependencies ?? []),\n      ...(pkg.dependencies ?? []),\n      ...(pkg.devDependencies ?? []),\n      ...(pkg.unsavedDependencies ?? []),\n    ])\n  );\n\n  if (opts.alwaysPrintRootPackage !== true && pkgs.length === 0) {\n    return '';\n  }\n\n  if (opts.long === true) {\n    let firstLine = pkg.path;\n\n    if (typeof pkg.name === 'string') {\n      firstLine += `:${pkg.name}`;\n\n      if (typeof pkg.version === 'string') {\n        firstLine += `@${pkg.version}`;\n      }\n\n      if (pkg.private === true) {\n        firstLine += ':PRIVATE';\n      }\n    }\n\n    return [\n      firstLine,\n      ...pkgs.map((pkg) => `${pkg.path}:${pkg.name}@${pkg.version}`),\n    ].join('\\n');\n  }\n\n  return [pkg.path, ...pkgs.map((pkg) => pkg.path)].join('\\n');\n}\n\ntype PackageInfo = {\n  name: string;\n  version: string;\n  path: string;\n};\n\nfunction flatten(depPaths: Set<string>, nodes: PackageNode[]): PackageInfo[] {\n  let packages: PackageInfo[] = [];\n\n  for (const node of nodes) {\n    // The content output by renderParseable is flat,\n    // so we can deduplicate packages that are repeatedly dependent on multiple packages.\n    if (depPaths.has(node.path) !== true) {\n      depPaths.add(node.path);\n      packages.push(node);\n    }\n\n    if (\n      typeof node.dependencies?.length === 'number' &&\n      node.dependencies.length > 0\n    ) {\n      packages = packages.concat(flatten(depPaths, node.dependencies));\n    }\n  }\n\n  return packages;\n}\n"],
  "mappings": "AACA,OAAO,YAAY;AACnB,OAAO,UAAU;AAGjB,MAAM,eAAe,OAAO,QAAQ,KAAK,QAAQ,MAAM,CAAC;AAExD,eAAsB,gBACpB,MACA,MAMiB;AACjB,QAAM,WAAW,oBAAI,IAAY;AAEjC,SAAO,KACJ,IAAI,0BAA0B,KAAK,MAAM,UAAU,IAAI,CAAC,EACxD,OAAO,CAAC,MAAuB;AAC9B,WAAO,EAAE,WAAW;AAAA,EACtB,CAAC,EACA,KAAK,IAAI;AACd;AAEA,SAAS,0BACP,UACA,MAMA,KACQ;AACR,QAAM,OAAO;AAAA,IACX,QAAQ,UAAU;AAAA,MAChB,GAAI,IAAI,wBAAwB,CAAC;AAAA,MACjC,GAAI,IAAI,gBAAgB,CAAC;AAAA,MACzB,GAAI,IAAI,mBAAmB,CAAC;AAAA,MAC5B,GAAI,IAAI,uBAAuB,CAAC;AAAA,IAClC,CAAC;AAAA,EACH;AAEA,MAAI,KAAK,2BAA2B,QAAQ,KAAK,WAAW,GAAG;AAC7D,WAAO;AAAA,EACT;AAEA,MAAI,KAAK,SAAS,MAAM;AACtB,QAAI,YAAY,IAAI;AAEpB,QAAI,OAAO,IAAI,SAAS,UAAU;AAChC,mBAAa,IAAI,IAAI,IAAI;AAEzB,UAAI,OAAO,IAAI,YAAY,UAAU;AACnC,qBAAa,IAAI,IAAI,OAAO;AAAA,MAC9B;AAEA,UAAI,IAAI,YAAY,MAAM;AACxB,qBAAa;AAAA,MACf;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACA,GAAG,KAAK,IAAI,CAACA,SAAQ,GAAGA,KAAI,IAAI,IAAIA,KAAI,IAAI,IAAIA,KAAI,OAAO,EAAE;AAAA,IAC/D,EAAE,KAAK,IAAI;AAAA,EACb;AAEA,SAAO,CAAC,IAAI,MAAM,GAAG,KAAK,IAAI,CAACA,SAAQA,KAAI,IAAI,CAAC,EAAE,KAAK,IAAI;AAC7D;AAQA,SAAS,QAAQ,UAAuB,OAAqC;AAC3E,MAAI,WAA0B,CAAC;AAE/B,aAAW,QAAQ,OAAO;AAGxB,QAAI,SAAS,IAAI,KAAK,IAAI,MAAM,MAAM;AACpC,eAAS,IAAI,KAAK,IAAI;AACtB,eAAS,KAAK,IAAI;AAAA,IACpB;AAEA,QACE,OAAO,KAAK,cAAc,WAAW,YACrC,KAAK,aAAa,SAAS,GAC3B;AACA,iBAAW,SAAS,OAAO,QAAQ,UAAU,KAAK,YAAY,CAAC;AAAA,IACjE;AAAA,EACF;AAEA,SAAO;AACT;",
  "names": ["pkg"]
}
