{
  "version": 3,
  "sources": ["../../../../src/packages/list/renderJson.ts"],
  "sourcesContent": ["import { DEPENDENCIES_FIELDS, type DependenciesField } from '../types/index.ts';\nimport type { PackageNode } from '../reviewing.dependencies-hierarchy/index.ts';\nimport sortBy from 'ramda/src/sortBy';\nimport path from 'ramda/src/path';\nimport type { Ord } from 'ramda';\nimport { getPkgInfo, type PkgInfo } from './getPkgInfo.ts';\nimport type { PackageDependencyHierarchy } from './types.ts';\n\nconst sortPackages = sortBy.default(\n  path.default(['pkg', 'alias']) as (pkg: PackageNode) => Ord\n);\n\ntype RenderJsonResultItem = Pick<\n  PackageDependencyHierarchy,\n  'name' | 'version' | 'path'\n> &\n  Required<Pick<PackageDependencyHierarchy, 'private'>> & {\n    dependencies?: Record<string, PackageJsonListItem> | undefined;\n    devDependencies?: Record<string, PackageJsonListItem> | undefined;\n    optionalDependencies?: Record<string, PackageJsonListItem> | undefined;\n    unsavedDependencies?: Record<string, PackageJsonListItem> | undefined;\n  };\n\nexport async function renderJson(\n  pkgs: PackageDependencyHierarchy[],\n  opts: {\n    depth?: number | undefined;\n    long?: boolean | undefined;\n    search: boolean;\n  }\n): Promise<string> {\n  const jsonArr = await Promise.all(\n    pkgs.map(\n      async (\n        pkg: PackageDependencyHierarchy\n      ): Promise<RenderJsonResultItem> => {\n        const jsonObj: RenderJsonResultItem = {\n          name: pkg.name,\n          version: pkg.version,\n          path: pkg.path,\n          private: pkg.private,\n        };\n\n        Object.assign(\n          jsonObj,\n          Object.fromEntries(\n            await Promise.all(\n              ([...DEPENDENCIES_FIELDS.sort(), 'unsavedDependencies'] as const)\n                .filter(\n                  (\n                    dependenciesField: DependenciesField | 'unsavedDependencies'\n                  ): boolean => {\n                    const p = pkg[dependenciesField as keyof typeof pkg];\n\n                    return Array.isArray(p) && p.length > 0;\n                  }\n                )\n                .map(\n                  async (\n                    dependenciesField: DependenciesField | 'unsavedDependencies'\n                  ): Promise<\n                    readonly [\n                      DependenciesField | 'unsavedDependencies',\n                      Record<string, PackageJsonListItem>,\n                    ]\n                  > => {\n                    return [\n                      dependenciesField,\n                      await toJsonResult(\n                        // Argument of type 'string | boolean | undefined' is not assignable to parameter of type 'PackageNode[]'.\n                        // Type 'undefined' is not assignable to type 'PackageNode[]'.ts(2345)\n                        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                        // @ts-expect-error\n                        pkg[dependenciesField as keyof typeof pkg],\n                        {\n                          long: opts.long,\n                        }\n                      ),\n                    ] as const;\n                  }\n                )\n            )\n          )\n        );\n\n        return jsonObj;\n      }\n    )\n  );\n\n  return JSON.stringify(jsonArr, null, 2);\n}\n\nexport async function toJsonResult(\n  entryNodes: PackageNode[],\n  opts: {\n    long: boolean;\n  }\n): Promise<Record<string, PackageJsonListItem>> {\n  const dependencies: Record<string, PackageJsonListItem> = {};\n\n  await Promise.all(\n    sortPackages(entryNodes).map(async (node: PackageNode): Promise<void> => {\n      const subDependencies = await toJsonResult(node.dependencies ?? [], opts);\n\n      const dep: PackageJsonListItem = opts.long\n        ? await getPkgInfo(node)\n        : {\n            alias: node.alias as string | undefined,\n            from: node.name,\n            version: node.version,\n            resolved: node.resolved,\n            path: node.path,\n          };\n\n      if (Object.keys(subDependencies).length > 0) {\n        dep.dependencies = subDependencies;\n      }\n\n      if (typeof dep.resolved === 'undefined' || dep.resolved === '') {\n        // biome-ignore lint/performance/noDelete: <explanation>\n        delete dep.resolved;\n      }\n\n      // biome-ignore lint/performance/noDelete: <explanation>\n      delete dep.alias;\n\n      dependencies[node.alias] = dep;\n    })\n  );\n\n  return dependencies;\n}\n\ninterface PackageJsonListItem extends PkgInfo {\n  dependencies?: Record<string, PackageJsonListItem> | undefined;\n}\n"],
  "mappings": "AAAA,SAAS,2BAAmD;AAE5D,OAAO,YAAY;AACnB,OAAO,UAAU;AAEjB,SAAS,kBAAgC;AAGzC,MAAM,eAAe,OAAO;AAAA,EAC1B,KAAK,QAAQ,CAAC,OAAO,OAAO,CAAC;AAC/B;AAaA,eAAsB,WACpB,MACA,MAKiB;AACjB,QAAM,UAAU,MAAM,QAAQ;AAAA,IAC5B,KAAK;AAAA,MACH,OACE,QACkC;AAClC,cAAM,UAAgC;AAAA,UACpC,MAAM,IAAI;AAAA,UACV,SAAS,IAAI;AAAA,UACb,MAAM,IAAI;AAAA,UACV,SAAS,IAAI;AAAA,QACf;AAEA,eAAO;AAAA,UACL;AAAA,UACA,OAAO;AAAA,YACL,MAAM,QAAQ;AAAA,cACX,CAAC,GAAG,oBAAoB,KAAK,GAAG,qBAAqB,EACnD;AAAA,gBACC,CACE,sBACY;AACZ,wBAAM,IAAI,IAAI,iBAAqC;AAEnD,yBAAO,MAAM,QAAQ,CAAC,KAAK,EAAE,SAAS;AAAA,gBACxC;AAAA,cACF,EACC;AAAA,gBACC,OACE,sBAMG;AACH,yBAAO;AAAA,oBACL;AAAA,oBACA,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,sBAKJ,IAAI,iBAAqC;AAAA,sBACzC;AAAA,wBACE,MAAM,KAAK;AAAA,sBACb;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACJ;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,SAAO,KAAK,UAAU,SAAS,MAAM,CAAC;AACxC;AAEA,eAAsB,aACpB,YACA,MAG8C;AAC9C,QAAM,eAAoD,CAAC;AAE3D,QAAM,QAAQ;AAAA,IACZ,aAAa,UAAU,EAAE,IAAI,OAAO,SAAqC;AACvE,YAAM,kBAAkB,MAAM,aAAa,KAAK,gBAAgB,CAAC,GAAG,IAAI;AAExE,YAAM,MAA2B,KAAK,OAClC,MAAM,WAAW,IAAI,IACrB;AAAA,QACE,OAAO,KAAK;AAAA,QACZ,MAAM,KAAK;AAAA,QACX,SAAS,KAAK;AAAA,QACd,UAAU,KAAK;AAAA,QACf,MAAM,KAAK;AAAA,MACb;AAEJ,UAAI,OAAO,KAAK,eAAe,EAAE,SAAS,GAAG;AAC3C,YAAI,eAAe;AAAA,MACrB;AAEA,UAAI,OAAO,IAAI,aAAa,eAAe,IAAI,aAAa,IAAI;AAE9D,eAAO,IAAI;AAAA,MACb;AAGA,aAAO,IAAI;AAEX,mBAAa,KAAK,KAAK,IAAI;AAAA,IAC7B,CAAC;AAAA,EACH;AAEA,SAAO;AACT;",
  "names": []
}
