{
  "version": 3,
  "sources": ["../../../../src/packages/deps.graph-builder/lockfileToDepGraph.ts"],
  "sourcesContent": ["import path from 'node:path';\nimport { WANTED_LOCKFILE } from '../constants/index.ts';\nimport { progressLogger } from '../core-loggers/index.ts';\nimport {\n  nameVerFromPkgSnapshot,\n  packageIdFromSnapshot,\n  pkgSnapshotToResolution,\n} from '../lockfile.utils/index.ts';\nimport { logger } from '../logger/index.ts';\nimport type { IncludedDependencies } from '../modules-yaml/index.ts';\nimport { packageIsInstallable } from '../package-is-installable/index.ts';\nimport { getPatchInfo } from '../patching.config/index.ts';\nimport type { PatchGroupRecord, PatchInfo } from '../patching.types/index.ts';\nimport type {\n  DepPath,\n  SupportedArchitectures,\n  Registries,\n  PkgIdWithPatchHash,\n  ProjectId,\n  ModulesDir,\n} from '../types/index.ts';\nimport type {\n  StoreController,\n  PackageResponse,\n  PkgRequestFetchResult,\n} from '../store-controller-types/index.ts';\nimport * as dp from '../dependency-path/index.ts';\nimport { pathExists } from 'path-exists';\nimport equals from 'ramda/src/equals';\nimport isEmpty from 'ramda/src/isEmpty';\nimport type {\n  LockfileObject,\n  PackageSnapshot,\n} from '../lockfile.types/index.ts';\n\nconst brokenModulesLogger = logger('_broken_node_modules');\n\n// PkgRequestFetchResult<unknown>\n\n// {\n//   files: {\n//     unprocessed: boolean;\n//     resolvedFrom: 'store' | 'local-dir' | 'remote';\n//     filesIndex: PackageFiles;\n//     packageImportMethod?:\n//       | 'auto'\n//       | 'hardlink'\n//       | 'copy'\n//       | 'clone'\n//       | 'clone-or-copy'\n//       | undefined;\n//     requiresBuild: boolean;\n//     sideEffects?: SideEffects | undefined;\n//   };\n//   bundledManifest: BundledManifest | undefined;\n// }\n\nexport type DependenciesGraphNode = {\n  alias?: string | undefined; // this is populated in HoistedDepGraphOnly\n  hasBundledDependencies: boolean;\n  modules: ModulesDir;\n  name: string;\n  fetching?: (() => Promise<PkgRequestFetchResult<unknown>>) | undefined;\n  dir: string;\n  children: Record<string, string>;\n  optionalDependencies: Set<string>;\n  optional: boolean;\n  depPath: DepPath; // this option is only needed for saving pendingBuild when running with --ignore-scripts flag\n  pkgIdWithPatchHash: PkgIdWithPatchHash;\n  isBuilt: boolean;\n  requiresBuild?: boolean | undefined;\n  hasBin: boolean;\n  filesIndexFile?: string | undefined;\n  patch?: PatchInfo | undefined;\n};\n\nexport type DependenciesGraph = {\n  [depPath: string]: DependenciesGraphNode;\n};\n\nexport type LockfileToDepGraphOptions = {\n  autoInstallPeers: boolean;\n  engineStrict: boolean;\n  force: boolean;\n  importerIds: ProjectId[];\n  include: IncludedDependencies;\n  ignoreScripts: boolean;\n  lockfileDir: string;\n  nodeVersion?: string | undefined;\n  pnpmVersion?: string | undefined;\n  patchedDependencies?: PatchGroupRecord | undefined;\n  registries: Registries;\n  sideEffectsCacheRead: boolean;\n  skipped: Set<DepPath>;\n\n  storeController: StoreController<\n    PackageResponse,\n    PackageResponse,\n    {\n      isBuilt: boolean;\n      importMethod?: string | undefined;\n    }\n  >;\n  storeDir: string;\n  virtualStoreDir: string;\n  supportedArchitectures?: SupportedArchitectures | undefined;\n  virtualStoreDirMaxLength: number;\n};\n\nexport type DirectDependenciesByImporterId = {\n  [importerId: string]: { [alias: string]: string };\n};\n\nexport type DepHierarchy = {\n  [depPath: string]: Record<string, DepHierarchy>;\n};\n\nexport type LockfileToDepGraphResult = {\n  directDependenciesByImporterId: DirectDependenciesByImporterId;\n  graph: DependenciesGraph;\n  hierarchy?: DepHierarchy | undefined;\n  hoistedLocations?: Record<string, string[]> | undefined;\n  symlinkedDirectDependenciesByImporterId: DirectDependenciesByImporterId;\n  prevGraph?: DependenciesGraph | undefined;\n  pkgLocationsByDepPath?: Record<string, string[]> | undefined;\n};\n\nexport async function lockfileToDepGraph(\n  lockfile: LockfileObject,\n  currentLockfile: LockfileObject | null,\n  opts: LockfileToDepGraphOptions\n): Promise<{\n  graph: DependenciesGraph;\n  directDependenciesByImporterId: DirectDependenciesByImporterId;\n}> {\n  const currentPackages = currentLockfile?.packages ?? {};\n\n  const graph: DependenciesGraph = {};\n\n  const directDependenciesByImporterId: DirectDependenciesByImporterId = {};\n\n  if (typeof lockfile.packages !== 'undefined') {\n    const pkgSnapshotByLocation: Record<string, PackageSnapshot> = {};\n\n    const _getPatchInfo = getPatchInfo.bind(null, opts.patchedDependencies);\n\n    await Promise.all(\n      (\n        Object.entries(lockfile.packages) as Array<[DepPath, PackageSnapshot]>\n      ).map(\n        async ([depPath, pkgSnapshot]: [\n          DepPath,\n          PackageSnapshot,\n        ]): Promise<void> => {\n          if (opts.skipped.has(depPath)) {\n            return;\n          }\n\n          // TODO: optimize. This info can be already returned by pkgSnapshotToResolution()\n          const { name: pkgName, version: pkgVersion } = nameVerFromPkgSnapshot(\n            depPath,\n            pkgSnapshot\n          );\n\n          const modules = path.join(\n            opts.virtualStoreDir,\n            dp.depPathToFilename(depPath, opts.virtualStoreDirMaxLength),\n            'node_modules'\n          ) as ModulesDir;\n\n          const packageId = packageIdFromSnapshot(depPath, pkgSnapshot);\n\n          const pkgIdWithPatchHash = dp.getPkgIdWithPatchHash(depPath);\n\n          const pkg = {\n            name: pkgName,\n            version: pkgVersion,\n            engines: pkgSnapshot.engines,\n            cpu: pkgSnapshot.cpu,\n            os: pkgSnapshot.os,\n            libc: pkgSnapshot.libc,\n          };\n\n          if (\n            !opts.force &&\n            (await packageIsInstallable(packageId, pkg, {\n              engineStrict: opts.engineStrict,\n              lockfileDir: opts.lockfileDir,\n              nodeVersion: opts.nodeVersion,\n              optional: pkgSnapshot.optional === true,\n              supportedArchitectures: opts.supportedArchitectures,\n            })) === false\n          ) {\n            opts.skipped.add(depPath);\n\n            return;\n          }\n\n          const dir = path.join(modules, pkgName);\n\n          const depIsPresent =\n            !(\n              typeof pkgSnapshot.resolution !== 'undefined' &&\n              'directory' in pkgSnapshot.resolution &&\n              typeof pkgSnapshot.resolution.directory === 'string'\n            ) &&\n            currentPackages[depPath] &&\n            equals.default(\n              currentPackages[depPath].dependencies,\n              lockfile.packages?.[depPath]?.dependencies\n            );\n\n          let dirExists: boolean | undefined;\n\n          if (\n            depIsPresent === true &&\n            isEmpty.default(\n              currentPackages[depPath]?.optionalDependencies ?? {}\n            ) &&\n            isEmpty.default(\n              lockfile.packages?.[depPath]?.optionalDependencies ?? {}\n            )\n          ) {\n            dirExists = await pathExists(dir);\n\n            if (dirExists) {\n              return;\n            }\n\n            brokenModulesLogger.debug({\n              missing: dir,\n            });\n          }\n\n          let fetchResponse: Partial<PackageResponse> | undefined;\n\n          if (\n            depIsPresent === true &&\n            equals.default(\n              currentPackages[depPath]?.optionalDependencies,\n              lockfile.packages?.[depPath]?.optionalDependencies\n            )\n          ) {\n            if (dirExists ?? (await pathExists(dir))) {\n              fetchResponse = {};\n            } else {\n              brokenModulesLogger.debug({\n                missing: dir,\n              });\n            }\n          }\n\n          if (typeof fetchResponse === 'undefined') {\n            const resolution = pkgSnapshotToResolution(\n              depPath,\n              pkgSnapshot,\n              opts.registries\n            );\n\n            progressLogger.debug({\n              packageId,\n              requester: opts.lockfileDir,\n              status: 'resolved',\n            });\n\n            try {\n              const fr = opts.storeController.fetchPackage({\n                force: false,\n                lockfileDir: opts.lockfileDir,\n                ignoreScripts: opts.ignoreScripts,\n                pkg: {\n                  id: packageId,\n                  resolution,\n                },\n                expectedPkg: {\n                  name: pkgName,\n                  version: pkgVersion,\n                },\n              });\n\n              fetchResponse = fr instanceof Promise ? await fr : fr;\n            } catch (err: unknown) {\n              if (pkgSnapshot.optional === true) {\n                return;\n              }\n\n              throw err;\n            }\n          }\n\n          graph[dir] = {\n            isBuilt: false,\n            children: {},\n            pkgIdWithPatchHash,\n            depPath,\n            dir,\n            fetching: fetchResponse.fetching,\n            filesIndexFile: fetchResponse.filesIndexFile,\n            hasBin: pkgSnapshot.hasBin === true,\n            hasBundledDependencies: pkgSnapshot.bundledDependencies != null,\n            modules,\n            name: pkgName,\n            optional: pkgSnapshot.optional === true,\n            optionalDependencies: new Set(\n              Object.keys(pkgSnapshot.optionalDependencies ?? {})\n            ),\n            patch: _getPatchInfo(pkgName, pkgVersion),\n          };\n\n          pkgSnapshotByLocation[dir] = pkgSnapshot;\n        }\n      )\n    );\n\n    const ctx = {\n      force: opts.force,\n      graph,\n      lockfileDir: opts.lockfileDir,\n      pkgSnapshotsByDepPaths: lockfile.packages,\n      registries: opts.registries,\n      sideEffectsCacheRead: opts.sideEffectsCacheRead,\n      skipped: opts.skipped,\n      storeController: opts.storeController,\n      storeDir: opts.storeDir,\n      virtualStoreDir: opts.virtualStoreDir,\n      virtualStoreDirMaxLength: opts.virtualStoreDirMaxLength,\n    };\n\n    for (const [dir, node] of Object.entries(graph)) {\n      const pkgSnapshot = pkgSnapshotByLocation[dir];\n\n      const allDeps = {\n        ...pkgSnapshot?.dependencies,\n        ...(opts.include.optionalDependencies\n          ? pkgSnapshot?.optionalDependencies\n          : {}),\n      };\n\n      const peerDeps = pkgSnapshot?.peerDependencies\n        ? new Set(Object.keys(pkgSnapshot.peerDependencies))\n        : null;\n      node.children = getChildrenPaths(ctx, allDeps, peerDeps, '.');\n    }\n\n    for (const importerId of opts.importerIds) {\n      const projectSnapshot = lockfile.importers?.[importerId];\n\n      const rootDeps = {\n        ...(opts.include.devDependencies\n          ? projectSnapshot?.devDependencies\n          : {}),\n        ...(opts.include.dependencies ? projectSnapshot?.dependencies : {}),\n        ...(opts.include.optionalDependencies\n          ? projectSnapshot?.optionalDependencies\n          : {}),\n      };\n\n      directDependenciesByImporterId[importerId] = getChildrenPaths(\n        ctx,\n        rootDeps,\n        null,\n        importerId\n      );\n    }\n  }\n\n  return { graph, directDependenciesByImporterId };\n}\n\nfunction getChildrenPaths<IP>(\n  ctx: {\n    graph: DependenciesGraph;\n    force: boolean;\n    registries: Registries;\n    virtualStoreDir: string;\n    storeDir: string;\n    skipped: Set<DepPath>;\n    pkgSnapshotsByDepPaths: Record<DepPath, PackageSnapshot>;\n    lockfileDir: string;\n    sideEffectsCacheRead: boolean;\n    storeController: StoreController<PackageResponse, PackageResponse, IP>;\n    virtualStoreDirMaxLength: number;\n  },\n  allDeps: { [alias: string]: string },\n  peerDeps: Set<string> | null,\n  importerId: string\n): { [alias: string]: string } {\n  const children: { [alias: string]: string } = {};\n\n  for (const [alias, ref] of Object.entries(allDeps)) {\n    const childDepPath = dp.refToRelative(ref, alias);\n\n    if (childDepPath === null) {\n      children[alias] = path.resolve(ctx.lockfileDir, importerId, ref.slice(5));\n\n      continue;\n    }\n\n    const childRelDepPath = dp.refToRelative(ref, alias);\n\n    if (typeof childRelDepPath === 'string') {\n      const childPkgSnapshot = ctx.pkgSnapshotsByDepPaths[childRelDepPath];\n\n      if (ctx.graph[childRelDepPath]) {\n        children[alias] = ctx.graph[childRelDepPath].dir;\n      } else if (childPkgSnapshot) {\n        if (ctx.skipped.has(childRelDepPath)) continue;\n\n        const pkgName = nameVerFromPkgSnapshot(\n          childRelDepPath,\n          childPkgSnapshot\n        ).name;\n\n        children[alias] = path.join(\n          ctx.virtualStoreDir,\n          dp.depPathToFilename(childRelDepPath, ctx.virtualStoreDirMaxLength),\n          'node_modules',\n          pkgName\n        );\n      } else if (ref.indexOf('file:') === 0) {\n        children[alias] = path.resolve(ctx.lockfileDir, ref.slice(5));\n      } else if (\n        !ctx.skipped.has(childRelDepPath) &&\n        (peerDeps == null || !peerDeps.has(alias))\n      ) {\n        throw new Error(`${childRelDepPath} not found in ${WANTED_LOCKFILE}`);\n      }\n    }\n  }\n\n  return children;\n}\n"],
  "mappings": "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",
  "names": []
}
