{
  "version": 3,
  "sources": ["../../../../src/packages/get-context/readLockfiles.ts"],
  "sourcesContent": ["import { LOCKFILE_VERSION, WANTED_LOCKFILE } from '../constants/index.ts';\nimport {\n  createLockfileObject,\n  existsNonEmptyWantedLockfile,\n  isEmptyLockfile,\n  readCurrentLockfile,\n  readWantedLockfile,\n  readWantedLockfileAndAutofixConflicts,\n} from '../lockfile.fs/index.ts';\nimport type { LockfileObject } from '../lockfile.types/index.ts';\nimport { logger } from '../logger/index.ts';\nimport type {\n  GlobalPkgDir,\n  LockFileDir,\n  ProjectId,\n  ProjectRootDir,\n  ProjectRootDirRealPath,\n  WorkspaceDir,\n} from '../types/index.ts';\nimport { isCI } from 'ci-info';\nimport clone from 'ramda/src/clone';\nimport equals from 'ramda/src/equals';\n\nexport type PnpmContext = {\n  currentLockfile: LockfileObject;\n  existsCurrentLockfile: boolean;\n  existsWantedLockfile: boolean;\n  existsNonEmptyWantedLockfile: boolean;\n  wantedLockfile: LockfileObject;\n};\n\nexport async function readLockfiles(opts: {\n  autoInstallPeers?: boolean | undefined;\n  excludeLinksFromLockfile?: boolean | undefined;\n  peersSuffixMaxLength?: number | undefined;\n  force?: boolean | undefined;\n  frozenLockfile: boolean;\n  projects: Array<{\n    id: ProjectId;\n    rootDir:\n      | ProjectRootDir\n      | ProjectRootDirRealPath\n      | GlobalPkgDir\n      | WorkspaceDir\n      | LockFileDir;\n  }>;\n  lockfileDir:\n    | LockFileDir\n    | ProjectRootDir\n    | ProjectRootDirRealPath\n    | GlobalPkgDir\n    | WorkspaceDir;\n  registry: string;\n  useLockfile: boolean;\n  useGitBranchLockfile?: boolean | undefined;\n  mergeGitBranchLockfiles?: boolean | undefined;\n  virtualStoreDir: string;\n}): Promise<{\n  currentLockfile: LockfileObject;\n  currentLockfileIsUpToDate: boolean;\n  existsCurrentLockfile: boolean;\n  existsWantedLockfile: boolean;\n  existsNonEmptyWantedLockfile: boolean;\n  wantedLockfile: LockfileObject;\n  wantedLockfileIsModified: boolean;\n  lockfileHadConflicts: boolean;\n}> {\n  const wantedLockfileVersion = LOCKFILE_VERSION;\n  // ignore `pnpm-lock.yaml` on CI servers\n  // a latest pnpm should not break all the builds\n  const lockfileOpts = {\n    ignoreIncompatible: opts.force ?? isCI,\n    wantedVersions: [LOCKFILE_VERSION],\n    useGitBranchLockfile: opts.useGitBranchLockfile,\n    mergeGitBranchLockfiles: opts.mergeGitBranchLockfiles,\n  };\n\n  const fileReads: Array<Promise<LockfileObject | undefined | null>> = [];\n\n  let lockfileHadConflicts = false;\n\n  if (opts.useLockfile) {\n    if (opts.frozenLockfile === true) {\n      fileReads.push(readWantedLockfile(opts.lockfileDir, lockfileOpts));\n    } else {\n      fileReads.push(\n        (async (): Promise<LockfileObject | null | undefined> => {\n          try {\n            const { lockfile, hadConflicts } =\n              await readWantedLockfileAndAutofixConflicts(\n                opts.lockfileDir,\n                lockfileOpts\n              );\n\n            lockfileHadConflicts = hadConflicts;\n\n            return lockfile;\n\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n          } catch (err: any) {\n            logger.warn({\n              message: `Ignoring broken lockfile at ${opts.lockfileDir}: ${err.message as string}`,\n              prefix: opts.lockfileDir,\n            });\n\n            return undefined;\n          }\n        })()\n      );\n    }\n  } else {\n    if (await existsNonEmptyWantedLockfile(opts.lockfileDir, lockfileOpts)) {\n      logger.warn({\n        message: `A ${WANTED_LOCKFILE} file exists. The current configuration prohibits to read or write a lockfile`,\n        prefix: opts.lockfileDir,\n      });\n    }\n\n    fileReads.push(Promise.resolve(undefined));\n  }\n\n  fileReads.push(\n    (async (): Promise<LockfileObject | null | undefined> => {\n      try {\n        return await readCurrentLockfile(opts.virtualStoreDir, lockfileOpts);\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      } catch (err: any) {\n        logger.warn({\n          message: `Ignoring broken lockfile at ${opts.virtualStoreDir}: ${err.message as string}`,\n          prefix: opts.lockfileDir,\n        });\n\n        return undefined;\n      }\n    })()\n  );\n\n  const files = await Promise.all<LockfileObject | null | undefined>(fileReads);\n\n  const sopts = {\n    autoInstallPeers: opts.autoInstallPeers,\n    excludeLinksFromLockfile: opts.excludeLinksFromLockfile,\n    lockfileVersion: wantedLockfileVersion,\n    peersSuffixMaxLength: opts.peersSuffixMaxLength,\n  };\n\n  const importerIds = opts.projects.map(\n    (importer: {\n      id: ProjectId;\n      rootDir:\n        | ProjectRootDir\n        | ProjectRootDirRealPath\n        | GlobalPkgDir\n        | WorkspaceDir\n        | LockFileDir;\n    }): ProjectId => {\n      return importer.id;\n    }\n  );\n\n  const currentLockfile = files[1] ?? createLockfileObject(importerIds, sopts);\n\n  for (const importerId of importerIds) {\n    if (\n      typeof currentLockfile.importers !== 'undefined' &&\n      typeof currentLockfile.importers[importerId] === 'undefined'\n    ) {\n      currentLockfile.importers[importerId] = {\n        specifiers: {},\n      };\n    }\n  }\n\n  const wantedLockfile =\n    files[0] ??\n    (typeof currentLockfile === 'undefined'\n      ? createLockfileObject(importerIds, sopts)\n      : clone.default(currentLockfile));\n\n  let wantedLockfileIsModified = false;\n\n  for (const importerId of importerIds) {\n    if (\n      typeof wantedLockfile.importers !== 'undefined' &&\n      typeof wantedLockfile.importers[importerId] === 'undefined'\n    ) {\n      wantedLockfileIsModified = true;\n\n      wantedLockfile.importers[importerId] = {\n        specifiers: {},\n      };\n    }\n  }\n\n  const existsWantedLockfile = files[0] != null;\n\n  return {\n    currentLockfile,\n    currentLockfileIsUpToDate: equals.default(currentLockfile, wantedLockfile),\n    existsCurrentLockfile: files[1] != null,\n    existsWantedLockfile,\n    existsNonEmptyWantedLockfile:\n      existsWantedLockfile && !isEmptyLockfile(wantedLockfile),\n    wantedLockfile,\n    wantedLockfileIsModified,\n    lockfileHadConflicts,\n  };\n}\n"],
  "mappings": "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",
  "names": []
}
