{
  "version": 3,
  "sources": ["../../../../src/packages/resolve-dependencies/updateLockfile.ts"],
  "sourcesContent": ["import { logger } from '../logger/index.ts';\nimport { pruneSharedLockfile } from '../lockfile.pruner/index.ts';\nimport type { Resolution } from '../resolver-base/index.ts';\nimport type { DepPath, Registries } from '../types/index.ts';\nimport * as dp from '../dependency-path/index.ts';\nimport getNpmTarballUrl from 'get-npm-tarball-url';\nimport type { KeyValuePair } from 'ramda';\nimport partition from 'ramda/src/partition';\nimport { depPathToRef } from './depPathToRef.ts';\nimport type { ResolvedPackage } from './resolveDependencies.ts';\nimport type { DependenciesGraph } from './index.ts';\nimport type {\n  LockfileObject,\n  PackageSnapshot,\n} from '../lockfile.types/index.ts';\nimport type { GenericDependenciesGraphWithResolvedChildren } from './resolvePeers.ts';\n\nexport type LockfileResolution =\n  | Resolution\n  | {\n      type?: never;\n      integrity: string;\n      directory?: never;\n      commit?: never;\n      repo?: never;\n      tarball?: string | undefined;\n      path?: never;\n    };\n\nexport function updateLockfile({\n  dependenciesGraph,\n  lockfile,\n  prefix,\n  registries,\n  lockfileIncludeTarballUrl,\n}: {\n  dependenciesGraph: GenericDependenciesGraphWithResolvedChildren;\n  lockfile: LockfileObject;\n  prefix: string;\n  registries: Registries;\n  lockfileIncludeTarballUrl?: boolean | undefined;\n}): LockfileObject {\n  lockfile.packages = lockfile.packages ?? {};\n  for (const [depPath, depNode] of Object.entries(dependenciesGraph)) {\n    const [updatedOptionalDeps, updatedDeps] = partition.default(\n      (child: {\n        alias: string;\n        depPath: DepPath;\n      }): boolean => {\n        return (\n          depNode.optionalDependencies.has(child.alias) === true ||\n          depNode.peerDependencies[child.alias]?.optional === true\n        );\n      },\n      Object.entries<DepPath>(depNode.children).map(([alias, depPath]) => {\n        return {\n          alias,\n          depPath,\n        };\n      })\n    );\n\n    lockfile.packages[depPath as DepPath] = toLockfileDependency(depNode, {\n      depGraph: dependenciesGraph,\n      depPath,\n      prevSnapshot: lockfile.packages[depPath as DepPath],\n      registries,\n      registry: dp.getRegistryByPackageName(registries, depNode.name),\n      updatedDeps,\n      updatedOptionalDeps,\n      lockfileIncludeTarballUrl,\n    });\n  }\n\n  function warn(message: string): void {\n    logger.warn({ message, prefix });\n  }\n\n  return pruneSharedLockfile(lockfile, { warn, dependenciesGraph });\n}\n\nfunction toLockfileDependency(\n  pkg: ResolvedPackage,\n  opts: {\n    depPath: string;\n    registry: string;\n    registries: Registries;\n    updatedDeps: Array<{ alias: string; depPath: DepPath }>;\n    updatedOptionalDeps: Array<{ alias: string; depPath: DepPath }>;\n    depGraph: DependenciesGraph;\n    prevSnapshot?: PackageSnapshot | undefined;\n    lockfileIncludeTarballUrl?: boolean | undefined;\n  }\n): PackageSnapshot {\n  const lockfileResolution = toLockfileResolution(\n    { name: pkg.name, version: pkg.version },\n    pkg.resolution,\n    opts.registry,\n    opts.lockfileIncludeTarballUrl\n  );\n\n  const newResolvedDeps = updateResolvedDeps(opts.updatedDeps, opts.depGraph);\n\n  const newResolvedOptionalDeps = updateResolvedDeps(\n    opts.updatedOptionalDeps,\n    opts.depGraph\n  );\n\n  const result: {\n    resolution: LockfileResolution;\n    version?: string | undefined;\n    dependencies?: Record<string, string> | undefined;\n    optionalDependencies?: Record<string, string> | undefined;\n    optional?: boolean | undefined;\n    transitivePeerDependencies?: string[] | undefined;\n    peerDependencies?: Record<string, string> | undefined;\n    peerDependenciesMeta?: Record<string, { optional: true }> | undefined;\n    engines?: Record<string, string> | undefined;\n    cpu?: string[] | undefined;\n    os?: string[] | undefined;\n    libc?: string[] | undefined;\n    bundledDependencies?: string[] | boolean | undefined;\n    deprecated?: string | undefined;\n    hasBin?: boolean | undefined;\n    patched?: boolean | undefined;\n  } = {\n    resolution: lockfileResolution,\n  };\n\n  if (opts.depPath.includes(':')) {\n    // There is no guarantee that a non-npmjs.org-hosted package is going to have a version field.\n    // Also, for local directory dependencies, the version is not needed.\n    if (\n      pkg.version &&\n      (!('type' in lockfileResolution) ||\n        lockfileResolution.type !== 'directory')\n    ) {\n      result.version = pkg.version;\n    }\n  }\n\n  if (Object.keys(newResolvedDeps).length > 0) {\n    result.dependencies = newResolvedDeps;\n  }\n\n  if (Object.keys(newResolvedOptionalDeps).length > 0) {\n    result.optionalDependencies = newResolvedOptionalDeps;\n  }\n\n  if (pkg.optional === true) {\n    result.optional = true;\n  }\n\n  if (pkg.transitivePeerDependencies.size) {\n    result.transitivePeerDependencies = Array.from(\n      pkg.transitivePeerDependencies\n    ).sort();\n  }\n\n  if (Object.keys(pkg.peerDependencies).length > 0) {\n    const peerPkgs: Record<string, string> = {};\n\n    const normalizedPeerDependenciesMeta: Record<string, { optional: true }> =\n      {};\n\n    for (const [peer, { version, optional }] of Object.entries(\n      pkg.peerDependencies\n    )) {\n      peerPkgs[peer] = version;\n\n      if (optional === true) {\n        normalizedPeerDependenciesMeta[peer] = { optional: true };\n      }\n    }\n\n    result.peerDependencies = peerPkgs;\n\n    if (Object.keys(normalizedPeerDependenciesMeta).length > 0) {\n      result.peerDependenciesMeta = normalizedPeerDependenciesMeta;\n    }\n  }\n\n  if (pkg.additionalInfo.engines != null) {\n    for (const [engine, version] of Object.entries(\n      pkg.additionalInfo.engines\n    )) {\n      if (version === '*') continue;\n      result.engines = result.engines || {};\n\n      if (typeof version === 'string') {\n        result.engines[engine] = version;\n      }\n    }\n  }\n\n  if (pkg.additionalInfo.cpu != null) {\n    result.cpu = pkg.additionalInfo.cpu;\n  }\n\n  if (pkg.additionalInfo.os != null) {\n    result.os = pkg.additionalInfo.os;\n  }\n\n  if (pkg.additionalInfo.libc != null) {\n    result.libc = pkg.additionalInfo.libc;\n  }\n\n  if (\n    Array.isArray(pkg.additionalInfo.bundledDependencies) ||\n    pkg.additionalInfo.bundledDependencies === true\n  ) {\n    result.bundledDependencies = pkg.additionalInfo.bundledDependencies;\n  } else if (\n    Array.isArray(pkg.additionalInfo.bundleDependencies) ||\n    pkg.additionalInfo.bundleDependencies === true\n  ) {\n    result.bundledDependencies = pkg.additionalInfo.bundleDependencies;\n  }\n\n  if (typeof pkg.additionalInfo.deprecated === 'string') {\n    result.deprecated = pkg.additionalInfo.deprecated;\n  }\n\n  if (pkg.hasBin) {\n    result.hasBin = true;\n  }\n\n  if (pkg.patch) {\n    result.patched = true;\n  }\n\n  return result;\n}\n\nfunction updateResolvedDeps(\n  updatedDeps: Array<{ alias: string; depPath: DepPath }>,\n  depGraph: DependenciesGraph\n): Record<string, string> {\n  return Object.fromEntries(\n    updatedDeps.map(\n      ({\n        alias,\n        depPath,\n      }: {\n        alias: string;\n        depPath: DepPath;\n      }): KeyValuePair<string, string> => {\n        if (depPath.startsWith('link:')) {\n          return [alias, depPath];\n        }\n\n        const depNode = depGraph[depPath];\n\n        if (typeof depNode === 'undefined') {\n          return [alias, depPath];\n        }\n\n        return [\n          alias,\n          depPathToRef(depPath, {\n            alias,\n            realName: depNode.name,\n          }),\n        ];\n      }\n    )\n  );\n}\n\nfunction toLockfileResolution(\n  pkg: {\n    name: string;\n    version: string;\n  },\n  resolution: Resolution | undefined,\n  registry: string,\n  lockfileIncludeTarballUrl?: boolean\n): LockfileResolution {\n  if (\n    typeof resolution !== 'undefined' &&\n    (('type' in resolution && typeof resolution.type !== 'undefined') ||\n      typeof resolution.integrity === 'undefined')\n  ) {\n    return resolution as LockfileResolution;\n  }\n\n  if (lockfileIncludeTarballUrl === true) {\n    return {\n      integrity: resolution?.integrity,\n      tarball: resolution?.tarball,\n    } satisfies LockfileResolution;\n  }\n\n  // Sometimes packages are hosted under non-standard tarball URLs.\n  // For instance, when they are hosted on npm Enterprise. See https://github.com/pnpm/pnpm/issues/867\n  // Or in other weird cases, like https://github.com/pnpm/pnpm/issues/1072\n  const expectedTarball = getNpmTarballUrl(pkg.name, pkg.version, { registry });\n\n  const actualTarball = resolution?.tarball?.replace('%2f', '/');\n\n  if (\n    typeof actualTarball === 'string' &&\n    removeProtocol(expectedTarball) !== removeProtocol(actualTarball)\n  ) {\n    return {\n      integrity: resolution?.integrity,\n      tarball: resolution?.tarball,\n    };\n  }\n\n  return {\n    integrity: resolution?.integrity,\n  };\n}\n\nfunction removeProtocol(url: string): string {\n  return url.split('://')[1] ?? '';\n}\n"],
  "mappings": "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",
  "names": ["depPath"]
}
