{
  "version": 3,
  "sources": ["../../../../src/packages/lockfile.utils/extendProjectsWithTargetDirs.ts"],
  "sourcesContent": ["import path from 'node:path';\nimport type { LockfileObject } from '../lockfile.types/index.ts';\nimport { depPathToFilename } from '../dependency-path/index.ts';\nimport type { ProjectId, DepPath } from '../types/index.ts';\nimport { packageIdFromSnapshot } from './packageIdFromSnapshot.ts';\nimport { nameVerFromPkgSnapshot } from './nameVerFromPkgSnapshot.ts';\n\ntype GetLocalLocations = (depPath: DepPath, pkgName: string) => string[];\n\nexport function extendProjectsWithTargetDirs<T>(\n  projects: Array<T & { id: ProjectId }>,\n  lockfile: LockfileObject,\n  ctx: {\n    virtualStoreDir: string;\n    pkgLocationsByDepPath?: Record<DepPath, string[]> | undefined;\n    virtualStoreDirMaxLength: number;\n  }\n): Array<T & { id: ProjectId; stages: string[]; targetDirs: string[] }> {\n  const getLocalLocations: GetLocalLocations =\n    typeof ctx.pkgLocationsByDepPath === 'undefined'\n      ? (depPath: DepPath, pkgName: string): string[] => {\n          return [\n            path.join(\n              ctx.virtualStoreDir,\n              depPathToFilename(depPath, ctx.virtualStoreDirMaxLength),\n              'node_modules',\n              pkgName\n            ),\n          ];\n        }\n      : (depPath: DepPath): string[] => {\n          return ctx.pkgLocationsByDepPath?.[depPath] ?? [];\n        };\n\n  const projectsById: Record<\n    ProjectId,\n    T & { id: ProjectId; targetDirs: string[]; stages?: string[] }\n  > = Object.fromEntries(\n    projects.map(\n      (\n        project: T & {\n          id: ProjectId;\n        }\n      ): [\n        ProjectId,\n        T & {\n          targetDirs: string[];\n          id: ProjectId;\n        },\n      ] => {\n        return [project.id, { ...project, targetDirs: [] as string[] }];\n      }\n    )\n  );\n\n  for (const [depPath, pkg] of Object.entries(lockfile.packages ?? {})) {\n    if (\n      typeof pkg.resolution === 'undefined' ||\n      !('type' in pkg.resolution) ||\n      pkg.resolution.type !== 'directory'\n    ) {\n      continue;\n    }\n\n    const pkgId = packageIdFromSnapshot(depPath as DepPath, pkg);\n\n    const { name: pkgName } = nameVerFromPkgSnapshot(depPath, pkg);\n\n    const importerId = pkgId.replace(/^file:/, '') as ProjectId;\n\n    if (projectsById[importerId] == null) {\n      continue;\n    }\n\n    const localLocations = getLocalLocations(depPath as DepPath, pkgName);\n\n    if (!Array.isArray(localLocations) || localLocations.length === 0) {\n      continue;\n    }\n\n    projectsById[importerId].targetDirs.push(...localLocations);\n\n    projectsById[importerId].stages = [\n      'preinstall',\n      'install',\n      'postinstall',\n      'prepare',\n      'prepublishOnly',\n    ];\n  }\n\n  return Object.values(projectsById) as Array<\n    T & { id: ProjectId; stages: string[]; targetDirs: string[] }\n  >;\n}\n"],
  "mappings": "AAAA,OAAO,UAAU;AAEjB,SAAS,yBAAyB;AAElC,SAAS,6BAA6B;AACtC,SAAS,8BAA8B;AAIhC,SAAS,6BACd,UACA,UACA,KAKsE;AACtE,QAAM,oBACJ,OAAO,IAAI,0BAA0B,cACjC,CAAC,SAAkB,YAA8B;AAC/C,WAAO;AAAA,MACL,KAAK;AAAA,QACH,IAAI;AAAA,QACJ,kBAAkB,SAAS,IAAI,wBAAwB;AAAA,QACvD;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,IACA,CAAC,YAA+B;AAC9B,WAAO,IAAI,wBAAwB,OAAO,KAAK,CAAC;AAAA,EAClD;AAEN,QAAM,eAGF,OAAO;AAAA,IACT,SAAS;AAAA,MACP,CACE,YASG;AACH,eAAO,CAAC,QAAQ,IAAI,EAAE,GAAG,SAAS,YAAY,CAAC,EAAc,CAAC;AAAA,MAChE;AAAA,IACF;AAAA,EACF;AAEA,aAAW,CAAC,SAAS,GAAG,KAAK,OAAO,QAAQ,SAAS,YAAY,CAAC,CAAC,GAAG;AACpE,QACE,OAAO,IAAI,eAAe,eAC1B,EAAE,UAAU,IAAI,eAChB,IAAI,WAAW,SAAS,aACxB;AACA;AAAA,IACF;AAEA,UAAM,QAAQ,sBAAsB,SAAoB,GAAG;AAE3D,UAAM,EAAE,MAAM,QAAQ,IAAI,uBAAuB,SAAS,GAAG;AAE7D,UAAM,aAAa,MAAM,QAAQ,UAAU,EAAE;AAE7C,QAAI,aAAa,UAAU,KAAK,MAAM;AACpC;AAAA,IACF;AAEA,UAAM,iBAAiB,kBAAkB,SAAoB,OAAO;AAEpE,QAAI,CAAC,MAAM,QAAQ,cAAc,KAAK,eAAe,WAAW,GAAG;AACjE;AAAA,IACF;AAEA,iBAAa,UAAU,EAAE,WAAW,KAAK,GAAG,cAAc;AAE1D,iBAAa,UAAU,EAAE,SAAS;AAAA,MAChC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO,OAAO,OAAO,YAAY;AAGnC;",
  "names": []
}
