{
  "version": 3,
  "sources": ["../../../../src/packages/lockfile.fs/lockfileFormatConverters.ts"],
  "sourcesContent": ["import { removeSuffix } from '../dependency-path/index.ts';\nimport type {\n  LockfileObject,\n  ProjectSnapshot,\n  LockfilePackageSnapshot,\n  ResolvedDependencies,\n  LockfileFile,\n  LockfileFileProjectSnapshot,\n  LockfileFileProjectResolvedDependencies,\n  LockfilePackageInfo,\n  PackageSnapshots,\n} from '../lockfile.types/index.ts';\nimport { type DepPath, DEPENDENCIES_FIELDS } from '../types/index.ts';\nimport isEmpty from 'ramda/src/isEmpty';\nimport _mapValues from 'ramda/src/map';\nimport omit from 'ramda/src/omit';\nimport pickBy from 'ramda/src/pickBy';\nimport pick from 'ramda/src/pick';\nimport { LOCKFILE_VERSION } from '../constants/index.ts';\n\nexport function convertToLockfileFile(lockfile: LockfileObject): LockfileFile {\n  const packages: Record<string, LockfilePackageInfo> = {};\n  const snapshots: Record<string, LockfilePackageSnapshot> = {};\n  for (const [depPath, pkg] of Object.entries(lockfile.packages ?? {})) {\n    snapshots[depPath] = pick.default(\n      [\n        'dependencies',\n        'optionalDependencies',\n        'transitivePeerDependencies',\n        'optional',\n        'id',\n      ],\n      pkg\n    );\n\n    const pkgId = removeSuffix(depPath);\n\n    if (!packages[pkgId]) {\n      packages[pkgId] = pick.default(\n        [\n          'bundledDependencies',\n          'cpu',\n          'deprecated',\n          'engines',\n          'hasBin',\n          'libc',\n          'name',\n          'os',\n          'peerDependencies',\n          'peerDependenciesMeta',\n          'resolution',\n          'version',\n        ],\n        pkg\n      );\n    }\n  }\n\n  const newLockfile = {\n    ...lockfile,\n    snapshots,\n    packages,\n    lockfileVersion: LOCKFILE_VERSION,\n    importers: mapValues(\n      lockfile.importers ?? {},\n      convertProjectSnapshotToInlineSpecifiersFormat\n    ),\n  };\n\n  if (newLockfile.settings?.peersSuffixMaxLength === 1000) {\n    newLockfile.settings = omit.default(\n      ['peersSuffixMaxLength'],\n      newLockfile.settings\n    );\n  }\n\n  if (newLockfile.settings?.injectWorkspacePackages === false) {\n    // biome-ignore lint/performance/noDelete: <explanation>\n    delete newLockfile.settings.injectWorkspacePackages;\n  }\n\n  return normalizeLockfile(newLockfile);\n}\n\nfunction normalizeLockfile(lockfile: LockfileFile): LockfileFile {\n  const lockfileToSave = {\n    ...lockfile,\n    importers: _mapValues.default((importer) => {\n      const normalizedImporter: Partial<LockfileFileProjectSnapshot> = {};\n\n      if (\n        importer.dependenciesMeta != null &&\n        !isEmpty.default(importer.dependenciesMeta)\n      ) {\n        normalizedImporter.dependenciesMeta = importer.dependenciesMeta;\n      }\n\n      for (const depType of DEPENDENCIES_FIELDS) {\n        if (!isEmpty.default(importer[depType] ?? {})) {\n          normalizedImporter[depType] = importer[depType];\n        }\n      }\n\n      if (typeof importer.publishDirectory === 'string') {\n        normalizedImporter.publishDirectory = importer.publishDirectory;\n      }\n\n      return normalizedImporter as LockfileFileProjectSnapshot;\n    }, lockfile.importers ?? {}),\n  };\n\n  if (\n    isEmpty.default(lockfileToSave.packages) ||\n    lockfileToSave.packages == null\n  ) {\n    // biome-ignore lint/performance/noDelete: <explanation>\n    delete lockfileToSave.packages;\n  }\n\n  if (\n    isEmpty.default(lockfileToSave.snapshots) ||\n    lockfileToSave.snapshots == null\n  ) {\n    // biome-ignore lint/performance/noDelete: <explanation>\n    delete lockfileToSave.snapshots;\n  }\n\n  if (lockfileToSave.time) {\n    lockfileToSave.time = pruneTimeInLockfile(\n      lockfileToSave.time,\n      lockfile.importers ?? {}\n    );\n  }\n\n  if (\n    lockfileToSave.catalogs != null &&\n    isEmpty.default(lockfileToSave.catalogs)\n  ) {\n    // biome-ignore lint/performance/noDelete: <explanation>\n    delete lockfileToSave.catalogs;\n  }\n\n  if (\n    lockfileToSave.overrides != null &&\n    isEmpty.default(lockfileToSave.overrides)\n  ) {\n    // biome-ignore lint/performance/noDelete: <explanation>\n    delete lockfileToSave.overrides;\n  }\n\n  if (\n    lockfileToSave.patchedDependencies != null &&\n    isEmpty.default(lockfileToSave.patchedDependencies)\n  ) {\n    // biome-ignore lint/performance/noDelete: <explanation>\n    delete lockfileToSave.patchedDependencies;\n  }\n\n  if (\n    typeof lockfileToSave.packageExtensionsChecksum === 'undefined' ||\n    lockfileToSave.packageExtensionsChecksum === ''\n  ) {\n    // biome-ignore lint/performance/noDelete: <explanation>\n    delete lockfileToSave.packageExtensionsChecksum;\n  }\n\n  if (\n    typeof lockfileToSave.ignoredOptionalDependencies === 'undefined' ||\n    lockfileToSave.ignoredOptionalDependencies.length === 0\n  ) {\n    // biome-ignore lint/performance/noDelete: <explanation>\n    delete lockfileToSave.ignoredOptionalDependencies;\n  }\n\n  if (\n    typeof lockfileToSave.pnpmfileChecksum === 'undefined' ||\n    lockfileToSave.pnpmfileChecksum === ''\n  ) {\n    // biome-ignore lint/performance/noDelete: <explanation>\n    delete lockfileToSave.pnpmfileChecksum;\n  }\n\n  return lockfileToSave;\n}\n\nfunction pruneTimeInLockfile(\n  time: Record<string, string>,\n  importers: Record<string, LockfileFileProjectSnapshot>\n): Record<string, string> {\n  const rootDepPaths = new Set<string>();\n\n  for (const importer of Object.values(importers)) {\n    for (const depType of DEPENDENCIES_FIELDS) {\n      for (const [depName, ref] of Object.entries(importer[depType] ?? {})) {\n        const suffixStart = ref.version.indexOf('(');\n\n        const refWithoutPeerSuffix =\n          suffixStart === -1 ? ref.version : ref.version.slice(0, suffixStart);\n\n        const depPath = refToRelative(refWithoutPeerSuffix, depName);\n\n        if (depPath === null || depPath === '') {\n          continue;\n        }\n\n        rootDepPaths.add(depPath);\n      }\n    }\n  }\n  return pickBy.default((_, depPath) => rootDepPaths.has(depPath), time);\n}\n\nfunction refToRelative(reference: string, pkgName: string): string | null {\n  if (reference.startsWith('link:')) {\n    return null;\n  }\n  if (reference.startsWith('file:')) {\n    return reference;\n  }\n  if (\n    !reference.includes('/') ||\n    !reference.replace(/(?:\\([^)]+\\))+$/, '').includes('/')\n  ) {\n    return `/${pkgName}@${reference}`;\n  }\n  return reference;\n}\n\nexport function convertToLockfileObject(\n  lockfile: LockfileFile\n): LockfileObject {\n  const { importers, ...rest } = lockfile;\n\n  const packages: PackageSnapshots = {};\n  for (const [depPath, pkg] of Object.entries(lockfile.snapshots ?? {})) {\n    const pkgId = removeSuffix(depPath);\n    packages[depPath as DepPath] = Object.assign(\n      pkg,\n      lockfile.packages?.[pkgId]\n    );\n  }\n  return {\n    ...omit.default(['snapshots'], rest),\n    packages,\n    importers: mapValues(importers ?? {}, revertProjectSnapshot),\n  };\n}\n\nfunction convertProjectSnapshotToInlineSpecifiersFormat(\n  projectSnapshot: ProjectSnapshot\n): LockfileFileProjectSnapshot {\n  const { specifiers, ...rest } = projectSnapshot;\n\n  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n  if (specifiers == null) {\n    return projectSnapshot as LockfileFileProjectSnapshot;\n  }\n\n  const convertBlock = (\n    block?: ResolvedDependencies | undefined\n  ): LockfileFileProjectResolvedDependencies | undefined => {\n    return block != null\n      ? convertResolvedDependenciesToInlineSpecifiersFormat(block, {\n          specifiers,\n        })\n      : block;\n  };\n\n  return {\n    ...rest,\n    dependencies: convertBlock(projectSnapshot.dependencies ?? {}),\n    optionalDependencies: convertBlock(\n      projectSnapshot.optionalDependencies ?? {}\n    ),\n    devDependencies: convertBlock(projectSnapshot.devDependencies ?? {}),\n  };\n}\n\nfunction convertResolvedDependenciesToInlineSpecifiersFormat(\n  resolvedDependencies: ResolvedDependencies,\n  { specifiers }: { specifiers: ResolvedDependencies }\n): LockfileFileProjectResolvedDependencies {\n  return mapValues(resolvedDependencies, (version, depName) => {\n    return {\n      specifier: specifiers[depName as keyof typeof specifiers] ?? '',\n      version,\n    };\n  });\n}\n\nfunction revertProjectSnapshot(\n  from: LockfileFileProjectSnapshot\n): ProjectSnapshot {\n  const specifiers: ResolvedDependencies = {};\n\n  function moveSpecifiers(\n    from: LockfileFileProjectResolvedDependencies\n  ): ResolvedDependencies {\n    const resolvedDependencies: ResolvedDependencies = {};\n    for (const [depName, { specifier, version }] of Object.entries(from)) {\n      const existingValue = specifiers[depName];\n      if (existingValue != null && existingValue !== specifier) {\n        throw new Error(\n          `Project snapshot lists the same dependency more than once with conflicting versions: ${depName}`\n        );\n      }\n\n      specifiers[depName] = specifier;\n      resolvedDependencies[depName] = version;\n    }\n    return resolvedDependencies;\n  }\n\n  const dependencies =\n    from.dependencies == null\n      ? from.dependencies\n      : moveSpecifiers(from.dependencies);\n  const devDependencies =\n    from.devDependencies == null\n      ? from.devDependencies\n      : moveSpecifiers(from.devDependencies);\n  const optionalDependencies =\n    from.optionalDependencies == null\n      ? from.optionalDependencies\n      : moveSpecifiers(from.optionalDependencies);\n\n  return {\n    ...from,\n    specifiers,\n    dependencies,\n    devDependencies,\n    optionalDependencies,\n  };\n}\n\nfunction mapValues<T, U>(\n  obj: Record<string, T>,\n  mapper: (val: T, key: string) => U\n): Record<string, U> {\n  const result: Record<string, U> = {};\n  for (const [key, value] of Object.entries(obj)) {\n    result[key] = mapper(value, key);\n  }\n  return result;\n}\n"],
  "mappings": "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",
  "names": ["from"]
}
