@teambit/pnpm 1.0.1297 → 1.0.1299
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lockfile-deps-graph-converter.d.ts +19 -2
- package/dist/lockfile-deps-graph-converter.js +126 -41
- package/dist/lockfile-deps-graph-converter.js.map +1 -1
- package/dist/lockfile-deps-graph-converter.spec.js +157 -2
- package/dist/lockfile-deps-graph-converter.spec.js.map +1 -1
- package/dist/pnpm.package-manager.js +3 -1
- package/dist/pnpm.package-manager.js.map +1 -1
- package/dist/{preview-1793027286168.js → preview-1793039364231.js} +2 -2
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_path","data","_interopRequireDefault","require","_lodash","_semver","_bitError","_componentPackageVersion","_objects","_normalizePath","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","dp","parseOverrides","loading","ensureInitialized","Error","init","loadEsm","m","getLockfileImporterId","lockfileDir","projectDir","normalizePath","path","relative","scrubOwnComponentFromLockfile","lockfile","pkgName","prefix","snapshots","snapshotsCopied","ensureSnapshotsCopy","depPath","startsWith","slice","packages","packagesCopied","pkgId","snapshot","entries","snapshotCopied","currentSnapshot","depType","deps","nextDeps","convertLockfileToGraphFromCapsule","componentRelativeDir","componentIdByPkgName","replaceFileVersion","narrowToComponentImporter","narrowedLockfile","filterLockfileByImporters","componentImporter","importers","directDependencies","lifecycle","optional","importerDepsToNeighbours","_convertLockfileToGraph","importerDependencies","neighbours","name","version","specifier","id","refToRelative","convertLockfileToGraph","componentRootDir","rootImporterDeps","dependencies","lockedFileVersion","lockedPkgDepPath","lockedPkg","componentDevImporter","devDependencies","removeSuffix","values","createFileVersionReplacer","graph","DependenciesGraph","edges","buildEdges","buildPackages","pnpmfileChecksum","lockfileSettings","settings","overrides","dropOrphanFilePkgs","extractDependenciesFromSnapshot","replacedDepPath","edge","attr","transitivePeerDependencies","dep","ROOT_EDGE_ID","depTypeField","ref","subDepPath","depsRequiringBuild","bit","depsRequiringBuildSet","Set","undefined","Map","pkg","graphPkg","pick","resolution","type","replacedPkgId","parsed","parse","has","compId","get","component","fullName","scope","requiresBuild","set","size","s","replacements","escapedNames","componentId","snapToSemver","replace","pattern","RegExp","join","includes","_","importerIds","importersOverride","getImporter","reachablePackages","reachableSnapshots","stack","visit","current","pop","add","importerId","importer","filteredPackages","filteredSnapshots","optionalDependencies","filteredImporters","convertGraphToLockfile","_graph","manifests","rootDir","resolve","graphString","serialize","deserialize","dropOrphanNeighbours","allEdgeIds","map","optionalDeps","prodDeps","partition","convertToDeps","assign","convertGraphPackageToLockfilePackage","sort","lockfileVersion","rootEdge","findRootEdge","manifest","projectId","substring","edgeId","find","directDep","depPathToRef","dedupeSnapshotDepsToRootManifest","dropUnreachableLockfileEntries","pkgsToResolve","getPkgsToResolve","failedWorkspaceComponentPkgs","Promise","all","pkgToResolve","resolveResult","alias","bareSpecifier","preferredVersions","err","code","integrity","scrubPkgsFromLockfile","BitError","pkgsInTheWorkspaces","rootManifest","overridden","overriddenPackageNames","rootDeps","nonOptionalDependencies","peers","peerDependencies","dropSnapshotDeps","rootVersionWins","override","targetPkg","shouldDrop","rootSpecifier","isPeer","lockedVersion","rootVersion","semver","valid","patchHash","peerDepGraphHash","isFilePkgId","nonSemverVersion","orphanPkgIds","delete","some","n","edgeIds","isOrphan","pkgIds","matches","pkgAttr"],"sources":["lockfile-deps-graph-converter.ts"],"sourcesContent":["import path from 'path';\nimport { type ProjectManifest } from '@pnpm/types';\nimport { type LockfileFileProjectResolvedDependencies, type LockfileFileProjectSnapshot } from '@pnpm/lockfile.types';\nimport type * as Dp from '@pnpm/deps.path';\nimport { pick, partition } from 'lodash';\nimport type * as ParseOverridesModule from '@pnpm/config.parse-overrides';\nimport semver from 'semver';\nimport { BitError } from '@teambit/bit-error';\nimport { snapToSemver } from '@teambit/component-package-version';\nimport {\n DependenciesGraph,\n type PackagesMap,\n type PackageAttributes,\n type DependencyEdge,\n type DependencyNeighbour,\n} from '@teambit/objects';\nimport {\n type CalcDepsGraphOptions,\n type CalcDepsGraphForComponentOptions,\n type ComponentIdByPkgName,\n} from '@teambit/dependency-resolver';\nimport normalizePath from 'normalize-path';\nimport { type BitLockfileFile } from './lynx';\n\n/**\n * Minimal structural signature of the `resolve` function returned by\n * `generateResolverAndFetcher` in `./lynx` (backed by `@pnpm/napi`'s\n * `resolveDependency`). Only the parts this module consumes are typed.\n */\ntype ResolveFunction = (\n wantedDependency: { alias?: string; bareSpecifier?: string },\n opts: { lockfileDir?: string; projectDir?: string; preferredVersions?: Record<string, unknown> }\n) => Promise<{ resolution?: Record<string, unknown> }>;\n\n// @pnpm/deps.path is ESM-only; load it through a .cjs shim so the require()\n// chain in the build capsule's mocha runner doesn't trip on the transitive ESM\n// import. Call `init()` once before invoking the public converters; helpers\n// reach for this module-level slot synchronously.\nlet dp!: typeof Dp;\nlet parseOverrides!: typeof ParseOverridesModule.parseOverrides;\nlet loading: Promise<void> | undefined;\n\nfunction ensureInitialized(): void {\n if (!dp) {\n throw new Error('lockfile-deps-graph-converter: await init() before calling the converters');\n }\n}\n\nexport function init(): Promise<void> {\n loading ??= (async () => {\n const { loadEsm } = require('./load-pnpm-esm.cjs') as {\n loadEsm: () => Promise<{ dp: typeof Dp; parseOverrides: typeof ParseOverridesModule.parseOverrides }>;\n };\n const m = await loadEsm();\n dp = m.dp;\n parseOverrides = m.parseOverrides;\n })();\n return loading;\n}\n\n/**\n * The lockfile's id for the importer at `projectDir`: its POSIX-normalized\n * path relative to the lockfile root, or `.` for the root project itself.\n */\nfunction getLockfileImporterId(lockfileDir: string, projectDir: string): string {\n return normalizePath(path.relative(lockfileDir, projectDir)) || '.';\n}\n\nfunction scrubOwnComponentFromLockfile(lockfile: BitLockfileFile, pkgName?: string): BitLockfileFile {\n if (!pkgName) return lockfile;\n const prefix = `${pkgName}@`;\n let snapshots: BitLockfileFile['snapshots'] = lockfile.snapshots;\n let snapshotsCopied = false;\n const ensureSnapshotsCopy = () => {\n if (!snapshotsCopied && snapshots) {\n snapshots = { ...snapshots };\n snapshotsCopied = true;\n }\n };\n for (const depPath of Object.keys(snapshots ?? {})) {\n if (depPath.startsWith(prefix) && depPath.slice(prefix.length).startsWith('file:')) {\n ensureSnapshotsCopy();\n delete snapshots![depPath];\n }\n }\n let packages: BitLockfileFile['packages'] = lockfile.packages;\n let packagesCopied = false;\n for (const pkgId of Object.keys(packages ?? {})) {\n if (pkgId.startsWith(prefix) && pkgId.slice(prefix.length).startsWith('file:')) {\n if (!packagesCopied && packages) {\n packages = { ...packages };\n packagesCopied = true;\n }\n delete packages![pkgId];\n }\n }\n for (const [depPath, snapshot] of Object.entries(snapshots ?? {})) {\n let snapshotCopied = false;\n let currentSnapshot = snapshot;\n for (const depType of ['dependencies', 'optionalDependencies'] as const) {\n const deps = currentSnapshot[depType];\n if (deps && deps[pkgName]?.startsWith('file:')) {\n ensureSnapshotsCopy();\n if (!snapshotCopied) {\n currentSnapshot = { ...currentSnapshot };\n snapshots![depPath] = currentSnapshot;\n snapshotCopied = true;\n }\n const nextDeps = { ...deps };\n delete nextDeps[pkgName];\n if (Object.keys(nextDeps).length === 0) {\n delete currentSnapshot[depType];\n } else {\n currentSnapshot[depType] = nextDeps;\n }\n }\n }\n }\n if (!snapshotsCopied && !packagesCopied) return lockfile;\n return {\n ...lockfile,\n snapshots,\n packages,\n };\n}\n\nfunction convertLockfileToGraphFromCapsule(\n lockfile: BitLockfileFile,\n {\n pkgName,\n componentRelativeDir,\n componentIdByPkgName,\n replaceFileVersion,\n narrowToComponentImporter = false,\n }: Pick<\n CalcDepsGraphOptions & CalcDepsGraphForComponentOptions,\n 'pkgName' | 'componentRelativeDir' | 'componentIdByPkgName'\n > & {\n replaceFileVersion?: (s: string) => string;\n narrowToComponentImporter?: boolean;\n }\n): DependenciesGraph {\n const narrowedLockfile = scrubOwnComponentFromLockfile(\n narrowToComponentImporter ? filterLockfileByImporters(lockfile, [componentRelativeDir]) : lockfile,\n pkgName\n );\n const componentImporter = narrowedLockfile.importers![componentRelativeDir];\n const directDependencies: DependencyNeighbour[] = [];\n for (const depType of ['dependencies' as const, 'optionalDependencies' as const, 'devDependencies' as const]) {\n if (componentImporter[depType] != null) {\n const lifecycle = depType === 'devDependencies' ? 'dev' : 'runtime';\n const optional = depType === 'optionalDependencies';\n directDependencies.push(...importerDepsToNeighbours(componentImporter[depType]!, lifecycle, optional));\n }\n }\n return _convertLockfileToGraph(narrowedLockfile, { componentIdByPkgName, directDependencies, replaceFileVersion });\n}\n\nfunction importerDepsToNeighbours(\n importerDependencies: LockfileFileProjectResolvedDependencies,\n lifecycle: 'dev' | 'runtime',\n optional: boolean\n): DependencyNeighbour[] {\n const neighbours: DependencyNeighbour[] = [];\n for (const [name, { version, specifier }] of Object.entries(importerDependencies) as any) {\n // `refToRelative` yields null for non-registry refs (`link:` and\n // friends) — those are workspace wiring, not graph nodes.\n const id = dp.refToRelative(version, name);\n if (id == null) continue;\n neighbours.push({ name, specifier, id, lifecycle, optional });\n }\n return neighbours;\n}\n\nexport function convertLockfileToGraph(\n lockfile: BitLockfileFile,\n {\n pkgName,\n componentRootDir,\n componentRelativeDir,\n componentIdByPkgName,\n replaceFileVersion,\n }: Omit<CalcDepsGraphOptions & CalcDepsGraphForComponentOptions, 'rootDir' | 'components' | 'component'> & {\n replaceFileVersion?: (s: string) => string;\n }\n): DependenciesGraph {\n ensureInitialized();\n if (componentRootDir == null || pkgName == null) {\n return convertLockfileToGraphFromCapsule(lockfile, {\n pkgName,\n componentRelativeDir,\n componentIdByPkgName,\n replaceFileVersion,\n });\n }\n const rootImporterDeps = lockfile.importers![componentRootDir]?.dependencies?.[pkgName];\n if (rootImporterDeps == null) {\n return convertLockfileToGraphFromCapsule(lockfile, {\n pkgName,\n componentRelativeDir,\n componentIdByPkgName,\n replaceFileVersion,\n narrowToComponentImporter: lockfile.importers?.[componentRootDir] != null,\n });\n }\n const lockedFileVersion = rootImporterDeps.version;\n const lockedPkgDepPath = `${pkgName}@${lockedFileVersion}`;\n const lockedPkg = lockfile.snapshots?.[lockedPkgDepPath];\n if (lockedPkg == null) {\n return convertLockfileToGraphFromCapsule(lockfile, {\n pkgName,\n componentRelativeDir,\n componentIdByPkgName,\n replaceFileVersion,\n narrowToComponentImporter: lockfile.importers?.[componentRootDir] != null,\n });\n }\n const componentDevImporter = lockfile.importers![componentRelativeDir];\n const directDependencies: DependencyNeighbour[] = [];\n if (componentDevImporter.devDependencies != null) {\n directDependencies.push(...importerDepsToNeighbours(componentDevImporter.devDependencies, 'dev', false));\n }\n for (const depType of ['dependencies' as const, 'optionalDependencies' as const]) {\n const optional = depType === 'optionalDependencies';\n for (const [name, version] of Object.entries(lockedPkg[depType] ?? {})) {\n const id = dp.refToRelative(version, name);\n if (id == null) continue;\n directDependencies.push({\n name,\n specifier: componentDevImporter[depType]?.[name]?.specifier ?? '*',\n id,\n lifecycle: 'runtime',\n optional,\n });\n }\n }\n delete lockfile.snapshots![lockedPkgDepPath];\n delete lockfile.packages![dp.removeSuffix(lockedPkgDepPath)];\n // Scrub back-edges from a circular workspace dep (another workspace\n // component depending on the one we're processing). Otherwise the\n // back-edge survives buildEdges but its target — the just-deleted\n // pkgId — has no entry in buildPackages, leaving a dangling neighbour.\n // convertGraphToLockfile would later materialise that neighbour as an\n // empty packages entry and ask the registry for the workspace\n // snap-version, which may never have been published.\n for (const snapshot of Object.values(lockfile.snapshots ?? {})) {\n for (const depType of ['dependencies', 'optionalDependencies'] as const) {\n const deps = snapshot[depType];\n if (deps?.[pkgName] === lockedFileVersion) {\n delete deps[pkgName];\n if (Object.keys(deps).length === 0) delete snapshot[depType];\n }\n }\n }\n return _convertLockfileToGraph(lockfile, { componentIdByPkgName, directDependencies, replaceFileVersion });\n}\n\nfunction _convertLockfileToGraph(\n lockfile: BitLockfileFile,\n {\n componentIdByPkgName,\n directDependencies,\n replaceFileVersion = createFileVersionReplacer(componentIdByPkgName),\n }: {\n componentIdByPkgName: ComponentIdByPkgName;\n directDependencies: DependencyNeighbour[];\n replaceFileVersion?: (s: string) => string;\n }\n): DependenciesGraph {\n const graph = new DependenciesGraph({\n edges: buildEdges(lockfile, { directDependencies, replaceFileVersion }),\n packages: buildPackages(lockfile, { componentIdByPkgName, replaceFileVersion }),\n pnpmfileChecksum: lockfile.pnpmfileChecksum,\n lockfileSettings: lockfile.settings,\n overrides: lockfile.overrides,\n });\n dropOrphanFilePkgs(graph);\n return graph;\n}\n\nfunction buildEdges(\n lockfile: BitLockfileFile,\n {\n directDependencies,\n replaceFileVersion,\n }: {\n directDependencies: DependencyNeighbour[];\n replaceFileVersion: (s: string) => string;\n }\n): DependencyEdge[] {\n const edges: DependencyEdge[] = [];\n for (const [depPath, snapshot] of Object.entries(lockfile.snapshots ?? {})) {\n const neighbours = extractDependenciesFromSnapshot(snapshot, replaceFileVersion);\n const replacedDepPath = replaceFileVersion(depPath);\n const edge: DependencyEdge = {\n id: replacedDepPath,\n neighbours,\n };\n const pkgId = dp.removeSuffix(replacedDepPath);\n if (pkgId !== replacedDepPath) {\n edge.attr = { pkgId };\n }\n if (snapshot.transitivePeerDependencies) {\n edge.attr = {\n ...edge.attr,\n transitivePeerDependencies: snapshot.transitivePeerDependencies,\n };\n }\n if (edge.neighbours.length > 0 || edge.id !== pkgId) {\n edges.push(edge);\n }\n }\n for (const dep of directDependencies) {\n dep.id = replaceFileVersion(dep.id);\n }\n edges.push({\n id: DependenciesGraph.ROOT_EDGE_ID,\n neighbours: directDependencies,\n });\n return edges;\n}\n\nfunction extractDependenciesFromSnapshot(\n snapshot: any,\n replaceFileVersion: (s: string) => string\n): DependencyNeighbour[] {\n const dependencies: DependencyNeighbour[] = [];\n\n for (const { depTypeField, optional } of [\n { depTypeField: 'dependencies', optional: false },\n { depTypeField: 'optionalDependencies', optional: true },\n ]) {\n for (const [name, ref] of Object.entries((snapshot[depTypeField] ?? {}) as Record<string, string>)) {\n const subDepPath = dp.refToRelative(ref, name);\n if (subDepPath != null) {\n dependencies.push({ id: replaceFileVersion(subDepPath), optional });\n }\n }\n }\n\n return dependencies;\n}\n\nfunction buildPackages(\n lockfile: BitLockfileFile,\n {\n componentIdByPkgName,\n replaceFileVersion,\n }: {\n componentIdByPkgName: ComponentIdByPkgName;\n replaceFileVersion: (s: string) => string;\n }\n): PackagesMap {\n const depsRequiringBuild = lockfile.bit?.depsRequiringBuild;\n const depsRequiringBuildSet = depsRequiringBuild ? new Set(depsRequiringBuild) : undefined;\n const packages: PackagesMap = new Map();\n for (const [pkgId, pkg] of Object.entries(lockfile.packages ?? {})) {\n const graphPkg = pick(pkg, [\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 ]) as any;\n if (graphPkg.resolution.type === 'directory') {\n delete graphPkg.resolution;\n }\n const replacedPkgId = replaceFileVersion(pkgId);\n const parsed = dp.parse(replacedPkgId);\n if (parsed.name && componentIdByPkgName.has(parsed.name)) {\n const compId = componentIdByPkgName.get(parsed.name)!;\n graphPkg.component = {\n name: compId.fullName,\n scope: compId.scope,\n };\n }\n if (depsRequiringBuildSet?.has(pkgId)) {\n graphPkg.requiresBuild = true;\n }\n packages.set(replacedPkgId, graphPkg);\n }\n return packages;\n}\n\nexport function createFileVersionReplacer(componentIdByPkgName: ComponentIdByPkgName): (s: string) => string {\n if (componentIdByPkgName.size === 0) return (s) => s;\n\n const replacements = new Map<string, string>();\n const escapedNames: string[] = [];\n for (const [pkgName, componentId] of componentIdByPkgName.entries()) {\n replacements.set(pkgName, `${pkgName}@${snapToSemver(componentId.version)}`);\n escapedNames.push(pkgName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'));\n }\n const pattern = new RegExp(`(${escapedNames.join('|')})@file:[^'\"(]+`, 'g');\n\n return (s: string) => {\n if (!s.includes('@file:')) return s;\n return s.replace(pattern, (_, name) => replacements.get(name)!);\n };\n}\n\n/**\n * Narrow a lockfile in-memory to the transitive closure of what `importerIds`\n * reaches, without crossing the N-API boundary or cloning the full lockfile.\n */\nexport function filterLockfileByImporters(\n lockfile: BitLockfileFile,\n importerIds: string[],\n importersOverride?: Record<string, LockfileFileProjectSnapshot>\n): BitLockfileFile {\n ensureInitialized();\n const getImporter = (id: string) => importersOverride?.[id] ?? lockfile.importers?.[id];\n const reachablePackages = new Set<string>();\n const reachableSnapshots = new Set<string>();\n const stack: string[] = [];\n\n const visit = (depPath: string) => {\n stack.push(depPath);\n while (stack.length > 0) {\n const current = stack.pop()!;\n if (reachableSnapshots.has(current)) continue;\n const pkgId = dp.removeSuffix(current);\n if (lockfile.packages?.[pkgId] != null) {\n reachablePackages.add(pkgId);\n }\n const snapshot = lockfile.snapshots?.[current];\n if (!snapshot) continue;\n reachableSnapshots.add(current);\n for (const depType of ['dependencies', 'optionalDependencies'] as const) {\n for (const [name, ref] of Object.entries(snapshot[depType] ?? {}) as Array<[string, string]>) {\n const subDepPath = dp.refToRelative(ref, name);\n if (subDepPath != null) {\n stack.push(subDepPath);\n }\n }\n }\n }\n };\n\n for (const importerId of importerIds) {\n const importer = getImporter(importerId);\n if (!importer) continue;\n for (const depType of ['dependencies', 'devDependencies', 'optionalDependencies'] as const) {\n for (const [name, dep] of Object.entries(importer[depType] ?? {}) as Array<[string, { version?: string }]>) {\n if (!dep?.version) continue;\n const depPath = dp.refToRelative(dep.version, name);\n if (depPath != null) {\n visit(depPath);\n }\n }\n }\n }\n\n const filteredPackages: NonNullable<BitLockfileFile['packages']> = {};\n for (const pkgId of reachablePackages) {\n filteredPackages[pkgId] = { ...lockfile.packages![pkgId] };\n }\n\n const filteredSnapshots: NonNullable<BitLockfileFile['snapshots']> = {};\n for (const depPath of reachableSnapshots) {\n const snapshot = lockfile.snapshots![depPath];\n filteredSnapshots[depPath] = {\n ...snapshot,\n ...(snapshot.dependencies ? { dependencies: { ...snapshot.dependencies } } : {}),\n ...(snapshot.optionalDependencies ? { optionalDependencies: { ...snapshot.optionalDependencies } } : {}),\n };\n }\n\n const filteredImporters: NonNullable<BitLockfileFile['importers']> = {};\n for (const importerId of importerIds) {\n const importer = getImporter(importerId);\n if (importer != null) {\n filteredImporters[importerId] = importer;\n }\n }\n\n return {\n ...lockfile,\n importers: filteredImporters,\n packages: filteredPackages,\n snapshots: filteredSnapshots,\n };\n}\n\nexport async function convertGraphToLockfile(\n _graph: DependenciesGraph,\n {\n manifests,\n rootDir,\n resolve,\n }: {\n manifests: Record<string, ProjectManifest>;\n rootDir: string;\n resolve: ResolveFunction;\n }\n): Promise<BitLockfileFile> {\n await init();\n const graphString = _graph.serialize();\n const graph = DependenciesGraph.deserialize(graphString)!;\n dropOrphanFilePkgs(graph);\n dropOrphanNeighbours(graph);\n const packages = {};\n const snapshots = {};\n const allEdgeIds = new Set(graph.edges.map(({ id }) => id));\n\n for (const edge of graph.edges) {\n if (edge.id === DependenciesGraph.ROOT_EDGE_ID) continue;\n const pkgId = edge.attr?.pkgId ?? edge.id;\n snapshots[edge.id] = {};\n packages[pkgId] = {};\n const [optionalDeps, prodDeps] = partition(edge.neighbours, (dep) => dep.optional);\n if (prodDeps.length) {\n snapshots[edge.id].dependencies = convertToDeps(prodDeps);\n }\n if (optionalDeps.length) {\n snapshots[edge.id].optionalDependencies = convertToDeps(optionalDeps);\n }\n const graphPkg = graph.packages.get(pkgId);\n if (graphPkg != null) {\n Object.assign(packages[pkgId], convertGraphPackageToLockfilePackage(graphPkg));\n }\n }\n for (const [pkgId, graphPkg] of graph.packages.entries()) {\n if (packages[pkgId] == null) {\n packages[pkgId] = convertGraphPackageToLockfilePackage(graphPkg);\n snapshots[pkgId] = {};\n }\n }\n const depsRequiringBuild: string[] = [];\n for (const [pkgId, { requiresBuild }] of graph.packages.entries()) {\n if (requiresBuild) {\n depsRequiringBuild.push(pkgId);\n }\n }\n depsRequiringBuild.sort();\n const lockfile: BitLockfileFile & Required<Pick<BitLockfileFile, 'packages'>> = {\n lockfileVersion: '9.0',\n packages,\n snapshots,\n importers: {},\n bit: { depsRequiringBuild },\n };\n // Carry the readPackage hooks checksum the graph was resolved with, if any,\n // so pnpm accepts the restored resolution only while the hooks are the same.\n // Bit passes no hooks anymore, and the graph model translates the checksum of\n // its last hooks into the overrides that replaced them.\n //\n // A graph saved before the graph recorded the checksum has none, and gets\n // none here: pnpm then resolves its dependencies again. Stamping the current\n // checksum on it would be wrong, because the hooks changed what they do to\n // dependency manifests while such graphs were being saved (e.g. stripping\n // `@teambit/harmony` from every dependency was added after graphs started\n // being stored), so an old graph may hold resolutions the current hooks\n // would not produce.\n if (graph.pnpmfileChecksum != null) {\n lockfile.pnpmfileChecksum = graph.pnpmfileChecksum;\n }\n // Carry the resolution settings the graph was resolved under as well. pnpm\n // compares them with the install's settings, and a lockfile without them\n // reads as resolved with dedupePeers and injectWorkspacePackages off, which\n // Bit's installs never match, so every restored lockfile was resolved again.\n if (graph.lockfileSettings != null) {\n lockfile.settings = graph.lockfileSettings;\n }\n // And the overrides, which pnpm compares with the install's the same way.\n if (graph.overrides != null) {\n lockfile.overrides = graph.overrides;\n }\n const rootEdge = graph.findRootEdge();\n if (rootEdge) {\n for (const [projectDir, manifest] of Object.entries(manifests)) {\n const projectId = getLockfileImporterId(rootDir, projectDir);\n lockfile.importers![projectId] = {\n dependencies: {},\n devDependencies: {},\n optionalDependencies: {},\n };\n for (const depType of ['dependencies', 'devDependencies', 'optionalDependencies']) {\n for (const [name, specifier] of Object.entries(manifest[depType] ?? {}) as Array<[string, string]>) {\n if (specifier.startsWith('link:')) {\n const version = `link:${normalizePath(path.relative(projectDir, specifier.substring(5)))}`;\n lockfile.importers![projectId][depType][name] = { version, specifier };\n } else {\n const edgeId = rootEdge.neighbours.find(\n (directDep) =>\n directDep.name === name &&\n (directDep.specifier === specifier || dp.removeSuffix(directDep.id) === `${name}@${specifier}`)\n )?.id;\n if (edgeId) {\n const parsed = dp.parse(edgeId);\n const ref = depPathToRef(parsed);\n lockfile.importers![projectId][depType][name] = { version: ref, specifier };\n }\n }\n }\n }\n }\n }\n dedupeSnapshotDepsToRootManifest(lockfile, manifests[rootDir]);\n dropUnreachableLockfileEntries(lockfile);\n const pkgsToResolve = getPkgsToResolve(lockfile, manifests);\n const failedWorkspaceComponentPkgs = new Set<string>();\n await Promise.all(\n pkgsToResolve.map(async (pkgToResolve) => {\n if (lockfile.packages[pkgToResolve.pkgId].resolution == null) {\n let resolveResult;\n try {\n resolveResult = await resolve(\n {\n alias: pkgToResolve.name,\n bareSpecifier: pkgToResolve.version,\n },\n {\n lockfileDir: rootDir,\n projectDir: rootDir,\n preferredVersions: {},\n }\n );\n } catch (err) {\n // A workspace-component package with a missing resolution whose\n // snap-version was never published surfaces here as pnpm's\n // ERR_PNPM_NO_MATCHING_VERSION. The graph itself is unusable for\n // this pkgId, but pnpm can re-resolve the dep from the installing\n // manifest's specifier — so scrub the pkgId from the generated\n // lockfile and continue. Re-throw every other error code (network,\n // auth, 5xx, even FETCH_404 since some registries return 404 on\n // auth failures) so real install failures aren't silently masked.\n if (\n (err as { code?: string }).code === 'ERR_PNPM_NO_MATCHING_VERSION' &&\n graph.packages.get(pkgToResolve.pkgId)?.component != null\n ) {\n failedWorkspaceComponentPkgs.add(pkgToResolve.pkgId);\n return;\n }\n throw err;\n }\n const { resolution } = resolveResult;\n if (resolution != null && 'integrity' in resolution && resolution.integrity) {\n lockfile.packages[pkgToResolve.pkgId].resolution = {\n integrity: resolution.integrity as string,\n };\n }\n }\n })\n );\n // A workspace-component snap can still be missing a resolution here even\n // when resolve() never threw ERR_PNPM_NO_MATCHING_VERSION. Its directory\n // resolution was stripped at graph-build time (see buildPackages), and the\n // resolve pass above leaves it null in two cases the throw-handler doesn't\n // see: getPkgsToResolve skips any pkgId whose name+version matches a\n // manifest in the sign/capsule set (so the resolver is never called for a\n // component that is itself a seeder being signed), and a resolver can also\n // return a resolution that carries no integrity. Either way the snap-version\n // was never published, so it can't carry a valid lockfile entry. Sweep every\n // still-resolution-less workspace-component pkg into the scrub set so pnpm\n // re-resolves the dep from the installing manifest's specifier (linking the\n // workspace component) instead of failing validation and aborting the whole\n // install. Non-component registry pkgs with no resolution are left to fail\n // validation below — that path means the graph itself is genuinely broken.\n for (const [pkgId, pkg] of Object.entries(lockfile.packages)) {\n if (\n (pkg.resolution == null || Object.keys(pkg.resolution).length === 0) &&\n graph.packages.get(pkgId)?.component != null\n ) {\n failedWorkspaceComponentPkgs.add(pkgId);\n }\n }\n if (failedWorkspaceComponentPkgs.size > 0) {\n scrubPkgsFromLockfile(lockfile, failedWorkspaceComponentPkgs);\n }\n dropUnreachableLockfileEntries(lockfile);\n // Validate the generated lockfile\n for (const [depPath, pkg] of Object.entries(lockfile.packages)) {\n if (pkg.resolution == null || Object.keys(pkg.resolution).length === 0) {\n throw new BitError(\n `Failed to generate a valid lockfile. The \"packages['${depPath}']\" entry doesn't have a \"resolution\" field.`\n );\n }\n }\n return lockfile;\n\n function convertToDeps(neighbours: DependencyNeighbour[]) {\n const deps = {};\n for (const { id } of neighbours) {\n const parsed = dp.parse(id);\n deps[parsed.name!] = depPathToRef(parsed);\n if (!allEdgeIds.has(id)) {\n snapshots[id] = {};\n packages[id] = convertGraphPackageToLockfilePackage(graph.packages.get(id)!);\n }\n }\n return deps;\n }\n}\n\ninterface PkgToResolve {\n name: string;\n version: string;\n pkgId: string;\n}\n\nfunction getPkgsToResolve(lockfile: BitLockfileFile, manifests: Record<string, ProjectManifest>): PkgToResolve[] {\n const pkgsToResolve: PkgToResolve[] = [];\n const pkgsInTheWorkspaces = new Map<string, string>();\n for (const { name, version } of Object.values(manifests)) {\n if (name && version) {\n pkgsInTheWorkspaces.set(name, version);\n }\n }\n for (const [pkgId, pkg] of Object.entries(lockfile.packages ?? {})) {\n if (pkg.resolution == null || ('type' in pkg.resolution && pkg.resolution.type === 'directory')) {\n const parsed = dp.parse(pkgId);\n if (\n parsed.name &&\n parsed.version &&\n (!pkgsInTheWorkspaces.has(parsed.name) || pkgsInTheWorkspaces.get(parsed.name) !== parsed.version)\n ) {\n pkgsToResolve.push({\n name: parsed.name,\n version: parsed.version,\n pkgId,\n });\n }\n }\n }\n return pkgsToResolve;\n}\n\nfunction dropUnreachableLockfileEntries(lockfile: BitLockfileFile): void {\n const reachablePackages = new Set<string>();\n const reachableSnapshots = new Set<string>();\n // An explicit stack: deep dependency chains would overflow the call\n // stack with a recursive walk.\n const stack: string[] = [];\n const visit = (depPath: string) => {\n stack.push(depPath);\n while (stack.length > 0) {\n const current = stack.pop()!;\n if (reachableSnapshots.has(current)) continue;\n reachableSnapshots.add(current);\n reachablePackages.add(dp.removeSuffix(current));\n const snapshot = lockfile.snapshots?.[current];\n if (!snapshot) continue;\n for (const depType of ['dependencies', 'optionalDependencies'] as const) {\n for (const [name, ref] of Object.entries(snapshot[depType] ?? {})) {\n if (ref.startsWith('link:') || ref.startsWith('file:')) continue;\n stack.push(`${name}@${ref}`);\n }\n }\n }\n };\n for (const importer of Object.values(lockfile.importers ?? {})) {\n for (const depType of ['dependencies', 'devDependencies', 'optionalDependencies'] as const) {\n for (const [name, { version }] of Object.entries(importer[depType] ?? {})) {\n if (version.startsWith('link:') || version.startsWith('file:')) continue;\n visit(`${name}@${version}`);\n }\n }\n }\n for (const pkgId of Object.keys(lockfile.packages ?? {})) {\n if (!reachablePackages.has(pkgId)) {\n delete lockfile.packages![pkgId];\n }\n }\n for (const depPath of Object.keys(lockfile.snapshots ?? {})) {\n if (!reachableSnapshots.has(depPath)) {\n delete lockfile.snapshots![depPath];\n }\n }\n if (lockfile.bit?.depsRequiringBuild) {\n lockfile.bit.depsRequiringBuild = lockfile.bit.depsRequiringBuild.filter((depPath) =>\n reachablePackages.has(dp.removeSuffix(depPath))\n );\n }\n}\n\nfunction dedupeSnapshotDepsToRootManifest(lockfile: BitLockfileFile, rootManifest: ProjectManifest | undefined): void {\n const overridden = new Set(overriddenPackageNames(lockfile.overrides));\n const rootDeps = new Map(\n Object.entries(nonOptionalDependencies(rootManifest)).filter(([name]) => !overridden.has(name))\n );\n if (rootDeps.size === 0) return;\n for (const [depPath, snapshot] of Object.entries(lockfile.snapshots ?? {})) {\n const peers = new Set(Object.keys(lockfile.packages?.[dp.removeSuffix(depPath)]?.peerDependencies ?? {}));\n dropSnapshotDeps(\n snapshot,\n (name, ref) => rootDeps.has(name) && rootVersionWins(name, ref, rootDeps.get(name)!, peers.has(name))\n );\n }\n}\n\nfunction nonOptionalDependencies(manifest: ProjectManifest | undefined): Record<string, string> {\n return { ...manifest?.devDependencies, ...manifest?.dependencies };\n}\n\nfunction overriddenPackageNames(overrides: Record<string, string> | undefined): string[] {\n return parseOverrides(overrides ?? {}).map((override) => override.targetPkg.name);\n}\n\nfunction dropSnapshotDeps(\n snapshot: NonNullable<BitLockfileFile['snapshots']>[string],\n shouldDrop: (name: string, ref: string) => boolean\n): void {\n for (const depType of ['dependencies', 'optionalDependencies'] as const) {\n const deps = snapshot[depType];\n if (!deps) continue;\n for (const [name, ref] of Object.entries(deps)) {\n if (shouldDrop(name, ref)) delete deps[name];\n }\n }\n}\n\nfunction rootVersionWins(name: string, ref: string, rootSpecifier: string, isPeer: boolean): boolean {\n const lockedVersion = dp.parse(`${name}@${ref}`).version;\n if (lockedVersion == null) return false;\n const rootVersion = semver.valid(rootSpecifier);\n if (rootVersion != null) return lockedVersion !== rootVersion;\n return isPeer;\n}\n\nfunction depPathToRef(depPath: Dp.DependencyPath): string {\n return `${depPath.version}${depPath.patchHash ?? ''}${depPath.peerDepGraphHash ?? ''}`;\n}\n\nfunction isFilePkgId(pkgId: string): boolean {\n return dp.parse(pkgId).nonSemverVersion?.startsWith('file:') ?? false;\n}\n\n/**\n * Strip orphan \"@file:\" entries from the graph (mutates in place).\n *\n * The \"@file:\" pkgIds in pnpm's lockfile are workspace components linked as\n * directory deps. buildPackages is supposed to rewrite them to\n * \"name@<semverVersion>\" via componentIdByPkgName, but if a name is missing\n * from that map (older bit, partial isolation, a component renamed/removed\n * between install and tag) the orphan leaks through with its resolution\n * stripped (directory type). We can't recover an integrity for it later —\n * getPkgsToResolve won't try because dp.parse shoves \"file:...\" into\n * nonSemverVersion, leaving parsed.version undefined, and at install time\n * the component is either a workspace project pnpm wires through importers\n * (so it doesn't belong in the packages map) or no longer in the workspace\n * at all. Either way the orphan entry is unusable, so drop it both at graph\n * creation (don't persist broken graphs) and at lockfile generation\n * (recover graphs already saved in the model).\n */\nfunction dropOrphanFilePkgs(graph: DependenciesGraph): void {\n const orphanPkgIds = new Set<string>();\n for (const pkgId of graph.packages.keys()) {\n if (isFilePkgId(pkgId)) {\n orphanPkgIds.add(pkgId);\n }\n }\n for (const edge of graph.edges) {\n const pkgId = edge.attr?.pkgId ?? edge.id;\n if (isFilePkgId(pkgId) || isFilePkgId(edge.id)) {\n orphanPkgIds.add(pkgId);\n orphanPkgIds.add(edge.id);\n }\n }\n if (orphanPkgIds.size === 0) return;\n for (const id of orphanPkgIds) {\n graph.packages.delete(id);\n }\n graph.edges = graph.edges\n .filter((edge) => !orphanPkgIds.has(edge.id) && !orphanPkgIds.has(edge.attr?.pkgId ?? edge.id))\n .map((edge) => {\n if (!edge.neighbours.some((n) => orphanPkgIds.has(n.id))) return edge;\n return {\n ...edge,\n neighbours: edge.neighbours.filter((n) => !orphanPkgIds.has(n.id)),\n };\n });\n}\n\n/**\n * Drop neighbours that reference a pkgId with no edge AND no packages entry.\n *\n * Recovers graphs saved by bits older than #10361 (the back-edge fix). Those\n * older bits, when snapping a component with a circular workspace dep, deleted\n * the component's own snapshot/package entry but left back-references to it on\n * other snapshots intact. The orphan neighbour now has no edge (its snapshot\n * was removed) and no packages entry (its package was removed), so the loop\n * below would synthesise an empty packages entry and getPkgsToResolve would\n * ask the registry for a workspace snap-version that was never published —\n * surfacing as ERR_PNPM_NO_MATCHING_VERSION at install time. Scrubbing the\n * dangling neighbour here means already-saved broken graphs install cleanly\n * without requiring the affected component to be re-snapped on a newer client.\n */\nfunction dropOrphanNeighbours(graph: DependenciesGraph): void {\n const edgeIds = new Set(graph.edges.map((edge) => edge.id));\n const isOrphan = (n: DependencyNeighbour): boolean =>\n !edgeIds.has(n.id) && !graph.packages.has(dp.removeSuffix(n.id));\n graph.edges = graph.edges.map((edge) => {\n if (!edge.neighbours.some(isOrphan)) return edge;\n return {\n ...edge,\n neighbours: edge.neighbours.filter((n) => !isOrphan(n)),\n };\n });\n}\n\n/**\n * Remove the given pkgIds (and everything that references them) from a\n * lockfile in place. Used when a workspace-component snap-version baked into\n * the graph turns out to be unpublishable at install time — leaving it in the\n * lockfile would fail validation and abort the whole install. Stripping it\n * means pnpm falls back to resolving the dep from the installing manifest's\n * specifier, which is the same path as a graph-less install for that one dep.\n */\nfunction scrubPkgsFromLockfile(lockfile: BitLockfileFile, pkgIds: Set<string>): void {\n const matches = (depPath: string): boolean => pkgIds.has(dp.removeSuffix(depPath));\n for (const pkgId of pkgIds) {\n delete lockfile.packages![pkgId];\n }\n for (const depPath of Object.keys(lockfile.snapshots ?? {})) {\n if (matches(depPath)) {\n delete lockfile.snapshots![depPath];\n }\n }\n for (const snapshot of Object.values(lockfile.snapshots ?? {})) {\n for (const depType of ['dependencies', 'optionalDependencies'] as const) {\n const deps = snapshot[depType];\n if (!deps) continue;\n for (const [name, ref] of Object.entries(deps)) {\n if (matches(`${name}@${ref}`)) {\n delete deps[name];\n }\n }\n if (Object.keys(deps).length === 0) delete snapshot[depType];\n }\n }\n for (const importer of Object.values(lockfile.importers ?? {})) {\n for (const depType of ['dependencies', 'devDependencies', 'optionalDependencies'] as const) {\n const deps = importer[depType];\n if (!deps) continue;\n for (const [name, { version }] of Object.entries(deps)) {\n if (version.startsWith('link:') || version.startsWith('file:')) continue;\n if (matches(`${name}@${version}`)) {\n delete deps[name];\n }\n }\n }\n }\n}\n\nfunction convertGraphPackageToLockfilePackage(pkgAttr: PackageAttributes) {\n return pick(pkgAttr, [\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}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_path","data","_interopRequireDefault","require","_lodash","_semver","_bitError","_componentPackageVersion","_objects","_normalizePath","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","dp","parseOverrides","loading","ensureInitialized","Error","init","loadEsm","m","getLockfileImporterId","lockfileDir","projectDir","normalizePath","path","relative","scrubOwnComponentFromLockfile","lockfile","pkgName","prefix","snapshots","snapshotsCopied","ensureSnapshotsCopy","depPath","startsWith","slice","packages","packagesCopied","pkgId","snapshot","entries","snapshotCopied","currentSnapshot","depType","deps","nextDeps","createLockfileToGraphCache","edges","WeakMap","getCacheContextKey","componentIdByPkgName","depsRequiringBuild","key","compId","scope","fullName","version","join","convertLockfileToGraphFromCapsule","componentRelativeDir","replaceFileVersion","narrowToComponentImporter","cache","narrowedLockfile","filterLockfileByImporters","componentImporter","importers","directDependencies","lifecycle","optional","importerDepsToNeighbours","_convertLockfileToGraph","importerDependencies","neighbours","name","specifier","id","refToRelative","convertLockfileToGraph","componentRootDir","rootImporterDeps","dependencies","lockedFileVersion","lockedPkgDepPath","lockedPkg","componentDevImporter","devDependencies","removeSuffix","resolvedReplacer","bit","isContextChanged","contextKey","undefined","createFileVersionReplacer","graph","DependenciesGraph","buildEdges","edgesCache","buildPackages","packagesCache","pnpmfileChecksum","lockfileSettings","settings","overrides","dropOrphanFilePkgs","cached","get","edge","extractDependenciesFromSnapshot","replacedDepPath","candidate","attr","transitivePeerDependencies","set","dep","ROOT_EDGE_ID","depTypeField","ref","subDepPath","depsRequiringBuildSet","Set","Map","pkg","replacedPkgId","graphPkg","pick","resolution","type","parsed","parse","has","component","requiresBuild","size","s","replacements","escapedNames","componentId","snapToSemver","replace","pattern","RegExp","includes","_","importerIds","importersOverride","getImporter","reachablePackages","reachableSnapshots","stack","visit","current","pop","add","importerId","importer","filteredPackages","filteredSnapshots","filteredImporters","convertGraphToLockfile","_graph","manifests","rootDir","resolve","graphString","serialize","deserialize","dropOrphanNeighbours","allEdgeIds","map","optionalDeps","prodDeps","partition","convertToDeps","optionalDependencies","assign","convertGraphPackageToLockfilePackage","sort","lockfileVersion","rootEdge","findRootEdge","manifest","projectId","substring","edgeId","find","directDep","depPathToRef","dedupeSnapshotDepsToRootManifest","dropUnreachableLockfileEntries","pkgsToResolve","getPkgsToResolve","failedWorkspaceComponentPkgs","Promise","all","pkgToResolve","resolveResult","alias","bareSpecifier","preferredVersions","err","code","integrity","scrubPkgsFromLockfile","BitError","pkgsInTheWorkspaces","values","rootManifest","overridden","overriddenPackageNames","rootDeps","nonOptionalDependencies","peers","peerDependencies","dropSnapshotDeps","rootVersionWins","override","targetPkg","shouldDrop","rootSpecifier","isPeer","lockedVersion","rootVersion","semver","valid","patchHash","peerDepGraphHash","isFilePkgId","nonSemverVersion","orphanPkgIds","delete","some","n","edgeIds","isOrphan","pkgIds","matches","pkgAttr"],"sources":["lockfile-deps-graph-converter.ts"],"sourcesContent":["import path from 'path';\nimport { type ProjectManifest } from '@pnpm/types';\nimport { type LockfileFileProjectResolvedDependencies, type LockfileFileProjectSnapshot } from '@pnpm/lockfile.types';\nimport type * as Dp from '@pnpm/deps.path';\nimport { pick, partition } from 'lodash';\nimport type * as ParseOverridesModule from '@pnpm/config.parse-overrides';\nimport semver from 'semver';\nimport { BitError } from '@teambit/bit-error';\nimport { snapToSemver } from '@teambit/component-package-version';\nimport {\n DependenciesGraph,\n type PackagesMap,\n type PackageAttributes,\n type DependencyEdge,\n type DependencyNeighbour,\n} from '@teambit/objects';\nimport {\n type CalcDepsGraphOptions,\n type CalcDepsGraphForComponentOptions,\n type ComponentIdByPkgName,\n} from '@teambit/dependency-resolver';\nimport normalizePath from 'normalize-path';\nimport { type BitLockfileFile } from './lynx';\n\n/**\n * Minimal structural signature of the `resolve` function returned by\n * `generateResolverAndFetcher` in `./lynx` (backed by `@pnpm/napi`'s\n * `resolveDependency`). Only the parts this module consumes are typed.\n */\ntype ResolveFunction = (\n wantedDependency: { alias?: string; bareSpecifier?: string },\n opts: { lockfileDir?: string; projectDir?: string; preferredVersions?: Record<string, unknown> }\n) => Promise<{ resolution?: Record<string, unknown> }>;\n\n// @pnpm/deps.path is ESM-only; load it through a .cjs shim so the require()\n// chain in the build capsule's mocha runner doesn't trip on the transitive ESM\n// import. Call `init()` once before invoking the public converters; helpers\n// reach for this module-level slot synchronously.\nlet dp!: typeof Dp;\nlet parseOverrides!: typeof ParseOverridesModule.parseOverrides;\nlet loading: Promise<void> | undefined;\n\nfunction ensureInitialized(): void {\n if (!dp) {\n throw new Error('lockfile-deps-graph-converter: await init() before calling the converters');\n }\n}\n\nexport function init(): Promise<void> {\n loading ??= (async () => {\n const { loadEsm } = require('./load-pnpm-esm.cjs') as {\n loadEsm: () => Promise<{ dp: typeof Dp; parseOverrides: typeof ParseOverridesModule.parseOverrides }>;\n };\n const m = await loadEsm();\n dp = m.dp;\n parseOverrides = m.parseOverrides;\n })();\n return loading;\n}\n\n/**\n * The lockfile's id for the importer at `projectDir`: its POSIX-normalized\n * path relative to the lockfile root, or `.` for the root project itself.\n */\nfunction getLockfileImporterId(lockfileDir: string, projectDir: string): string {\n return normalizePath(path.relative(lockfileDir, projectDir)) || '.';\n}\n\nfunction scrubOwnComponentFromLockfile(lockfile: BitLockfileFile, pkgName?: string): BitLockfileFile {\n if (!pkgName) return lockfile;\n const prefix = `${pkgName}@`;\n let snapshots: BitLockfileFile['snapshots'] = lockfile.snapshots;\n let snapshotsCopied = false;\n const ensureSnapshotsCopy = () => {\n if (!snapshotsCopied && snapshots) {\n snapshots = { ...snapshots };\n snapshotsCopied = true;\n }\n };\n for (const depPath of Object.keys(snapshots ?? {})) {\n if (depPath.startsWith(prefix) && depPath.slice(prefix.length).startsWith('file:')) {\n ensureSnapshotsCopy();\n delete snapshots![depPath];\n }\n }\n let packages: BitLockfileFile['packages'] = lockfile.packages;\n let packagesCopied = false;\n for (const pkgId of Object.keys(packages ?? {})) {\n if (pkgId.startsWith(prefix) && pkgId.slice(prefix.length).startsWith('file:')) {\n if (!packagesCopied && packages) {\n packages = { ...packages };\n packagesCopied = true;\n }\n delete packages![pkgId];\n }\n }\n for (const [depPath, snapshot] of Object.entries(snapshots ?? {})) {\n let snapshotCopied = false;\n let currentSnapshot = snapshot;\n for (const depType of ['dependencies', 'optionalDependencies'] as const) {\n const deps = currentSnapshot[depType];\n if (deps && deps[pkgName]?.startsWith('file:')) {\n ensureSnapshotsCopy();\n if (!snapshotCopied) {\n currentSnapshot = { ...currentSnapshot };\n snapshots![depPath] = currentSnapshot;\n snapshotCopied = true;\n }\n const nextDeps = { ...deps };\n delete nextDeps[pkgName];\n if (Object.keys(nextDeps).length === 0) {\n delete currentSnapshot[depType];\n } else {\n currentSnapshot[depType] = nextDeps;\n }\n }\n }\n }\n if (!snapshotsCopied && !packagesCopied) return lockfile;\n return {\n ...lockfile,\n snapshots,\n packages,\n };\n}\n\nexport interface LockfileToGraphCache {\n edges: WeakMap<object, { depPath: string; edge: DependencyEdge | null }>;\n packages: WeakMap<object, { pkgId: string; replacedPkgId: string; graphPkg: PackageAttributes }>;\n componentIdByPkgName?: ComponentIdByPkgName;\n depsRequiringBuild?: string[];\n contextKey?: string;\n replaceFileVersion?: (s: string) => string;\n}\n\nexport function createLockfileToGraphCache(): LockfileToGraphCache {\n return {\n edges: new WeakMap(),\n packages: new WeakMap(),\n };\n}\n\nfunction getCacheContextKey(componentIdByPkgName: ComponentIdByPkgName, depsRequiringBuild?: string[]): string {\n let key = '';\n for (const [pkgName, compId] of componentIdByPkgName.entries()) {\n key += `${pkgName}:${compId.scope}/${compId.fullName}@${compId.version};`;\n }\n if (depsRequiringBuild?.length) {\n key += `|build:${depsRequiringBuild.join(',')}`;\n }\n return key;\n}\n\nfunction convertLockfileToGraphFromCapsule(\n lockfile: BitLockfileFile,\n {\n pkgName,\n componentRelativeDir,\n componentIdByPkgName,\n replaceFileVersion,\n narrowToComponentImporter = false,\n cache,\n }: Pick<\n CalcDepsGraphOptions & CalcDepsGraphForComponentOptions,\n 'pkgName' | 'componentRelativeDir' | 'componentIdByPkgName'\n > & {\n replaceFileVersion?: (s: string) => string;\n narrowToComponentImporter?: boolean;\n cache?: LockfileToGraphCache;\n }\n): DependenciesGraph {\n const narrowedLockfile = scrubOwnComponentFromLockfile(\n narrowToComponentImporter ? filterLockfileByImporters(lockfile, [componentRelativeDir]) : lockfile,\n pkgName\n );\n const componentImporter = narrowedLockfile.importers![componentRelativeDir];\n const directDependencies: DependencyNeighbour[] = [];\n for (const depType of ['dependencies' as const, 'optionalDependencies' as const, 'devDependencies' as const]) {\n if (componentImporter[depType] != null) {\n const lifecycle = depType === 'devDependencies' ? 'dev' : 'runtime';\n const optional = depType === 'optionalDependencies';\n directDependencies.push(...importerDepsToNeighbours(componentImporter[depType]!, lifecycle, optional));\n }\n }\n return _convertLockfileToGraph(narrowedLockfile, {\n componentIdByPkgName,\n directDependencies,\n replaceFileVersion,\n cache,\n });\n}\n\nfunction importerDepsToNeighbours(\n importerDependencies: LockfileFileProjectResolvedDependencies,\n lifecycle: 'dev' | 'runtime',\n optional: boolean\n): DependencyNeighbour[] {\n const neighbours: DependencyNeighbour[] = [];\n for (const [name, { version, specifier }] of Object.entries(importerDependencies) as any) {\n // `refToRelative` yields null for non-registry refs (`link:` and\n // friends) — those are workspace wiring, not graph nodes.\n const id = dp.refToRelative(version, name);\n if (id == null) continue;\n neighbours.push({ name, specifier, id, lifecycle, optional });\n }\n return neighbours;\n}\n\nexport function convertLockfileToGraph(\n lockfile: BitLockfileFile,\n {\n pkgName,\n componentRootDir,\n componentRelativeDir,\n componentIdByPkgName,\n replaceFileVersion,\n cache,\n }: Omit<CalcDepsGraphOptions & CalcDepsGraphForComponentOptions, 'rootDir' | 'components' | 'component'> & {\n replaceFileVersion?: (s: string) => string;\n cache?: LockfileToGraphCache;\n }\n): DependenciesGraph {\n ensureInitialized();\n if (componentRootDir == null || pkgName == null) {\n return convertLockfileToGraphFromCapsule(lockfile, {\n pkgName,\n componentRelativeDir,\n componentIdByPkgName,\n replaceFileVersion,\n cache,\n });\n }\n const rootImporterDeps = lockfile.importers![componentRootDir]?.dependencies?.[pkgName];\n if (rootImporterDeps == null) {\n return convertLockfileToGraphFromCapsule(lockfile, {\n pkgName,\n componentRelativeDir,\n componentIdByPkgName,\n replaceFileVersion,\n narrowToComponentImporter: lockfile.importers?.[componentRootDir] != null,\n cache,\n });\n }\n const lockedFileVersion = rootImporterDeps.version;\n const lockedPkgDepPath = `${pkgName}@${lockedFileVersion}`;\n const lockedPkg = lockfile.snapshots?.[lockedPkgDepPath];\n if (lockedPkg == null) {\n return convertLockfileToGraphFromCapsule(lockfile, {\n pkgName,\n componentRelativeDir,\n componentIdByPkgName,\n replaceFileVersion,\n narrowToComponentImporter: lockfile.importers?.[componentRootDir] != null,\n cache,\n });\n }\n const componentDevImporter = lockfile.importers![componentRelativeDir];\n const directDependencies: DependencyNeighbour[] = [];\n if (componentDevImporter.devDependencies != null) {\n directDependencies.push(...importerDepsToNeighbours(componentDevImporter.devDependencies, 'dev', false));\n }\n for (const depType of ['dependencies' as const, 'optionalDependencies' as const]) {\n const optional = depType === 'optionalDependencies';\n for (const [name, version] of Object.entries(lockedPkg[depType] ?? {})) {\n const id = dp.refToRelative(version, name);\n if (id == null) continue;\n directDependencies.push({\n name,\n specifier: componentDevImporter[depType]?.[name]?.specifier ?? '*',\n id,\n lifecycle: 'runtime',\n optional,\n });\n }\n }\n const snapshots = { ...lockfile.snapshots };\n const packages = { ...lockfile.packages };\n delete snapshots[lockedPkgDepPath];\n delete packages[dp.removeSuffix(lockedPkgDepPath)];\n // Scrub back-edges from a circular workspace dep (another workspace\n // component depending on the one we're processing). Otherwise the\n // back-edge survives buildEdges but its target — the just-deleted\n // pkgId — has no entry in buildPackages, leaving a dangling neighbour.\n // convertGraphToLockfile would later materialise that neighbour as an\n // empty packages entry and ask the registry for the workspace\n // snap-version, which may never have been published.\n for (const [depPath, snapshot] of Object.entries(snapshots)) {\n let snapshotCopied = false;\n let currentSnapshot = snapshot;\n for (const depType of ['dependencies', 'optionalDependencies'] as const) {\n const deps = currentSnapshot[depType];\n if (deps?.[pkgName] === lockedFileVersion) {\n if (!snapshotCopied) {\n currentSnapshot = { ...currentSnapshot };\n snapshots[depPath] = currentSnapshot;\n snapshotCopied = true;\n }\n const nextDeps = { ...deps };\n delete nextDeps[pkgName];\n if (Object.keys(nextDeps).length === 0) {\n delete currentSnapshot[depType];\n } else {\n currentSnapshot[depType] = nextDeps;\n }\n }\n }\n }\n return _convertLockfileToGraph(\n { ...lockfile, snapshots, packages },\n { componentIdByPkgName, directDependencies, replaceFileVersion, cache }\n );\n}\n\nfunction _convertLockfileToGraph(\n lockfile: BitLockfileFile,\n {\n componentIdByPkgName,\n directDependencies,\n replaceFileVersion,\n cache,\n }: {\n componentIdByPkgName: ComponentIdByPkgName;\n directDependencies: DependencyNeighbour[];\n replaceFileVersion?: (s: string) => string;\n cache?: LockfileToGraphCache;\n }\n): DependenciesGraph {\n let resolvedReplacer = replaceFileVersion;\n if (cache) {\n const depsRequiringBuild = lockfile.bit?.depsRequiringBuild;\n let isContextChanged =\n replaceFileVersion != null && cache.replaceFileVersion != null && cache.replaceFileVersion !== replaceFileVersion;\n if (cache.componentIdByPkgName !== componentIdByPkgName || cache.depsRequiringBuild !== depsRequiringBuild) {\n const contextKey = getCacheContextKey(componentIdByPkgName, depsRequiringBuild);\n if (cache.contextKey !== contextKey) {\n isContextChanged = true;\n cache.contextKey = contextKey;\n }\n cache.componentIdByPkgName = componentIdByPkgName;\n cache.depsRequiringBuild = depsRequiringBuild;\n }\n if (isContextChanged) {\n cache.edges = new WeakMap();\n cache.packages = new WeakMap();\n cache.replaceFileVersion = undefined;\n }\n resolvedReplacer ??= cache.replaceFileVersion ?? createFileVersionReplacer(componentIdByPkgName);\n cache.replaceFileVersion = resolvedReplacer;\n } else {\n resolvedReplacer ??= createFileVersionReplacer(componentIdByPkgName);\n }\n const graph = new DependenciesGraph({\n edges: buildEdges(lockfile, {\n directDependencies,\n replaceFileVersion: resolvedReplacer,\n edgesCache: cache?.edges,\n }),\n packages: buildPackages(lockfile, {\n componentIdByPkgName,\n replaceFileVersion: resolvedReplacer,\n packagesCache: cache?.packages,\n }),\n pnpmfileChecksum: lockfile.pnpmfileChecksum,\n lockfileSettings: lockfile.settings,\n overrides: lockfile.overrides,\n });\n dropOrphanFilePkgs(graph);\n return graph;\n}\n\nfunction buildEdges(\n lockfile: BitLockfileFile,\n {\n directDependencies,\n replaceFileVersion,\n edgesCache,\n }: {\n directDependencies: DependencyNeighbour[];\n replaceFileVersion: (s: string) => string;\n edgesCache?: LockfileToGraphCache['edges'];\n }\n): DependencyEdge[] {\n const edges: DependencyEdge[] = [];\n for (const [depPath, snapshot] of Object.entries(lockfile.snapshots ?? {})) {\n const cached = edgesCache?.get(snapshot);\n let edge: DependencyEdge | null;\n if (cached && cached.depPath === depPath) {\n edge = cached.edge;\n } else {\n const neighbours = extractDependenciesFromSnapshot(snapshot, replaceFileVersion);\n const replacedDepPath = replaceFileVersion(depPath);\n const candidate: DependencyEdge = {\n id: replacedDepPath,\n neighbours,\n };\n const pkgId = dp.removeSuffix(replacedDepPath);\n if (pkgId !== replacedDepPath) {\n candidate.attr = { pkgId };\n }\n if (snapshot.transitivePeerDependencies) {\n candidate.attr = {\n ...candidate.attr,\n transitivePeerDependencies: snapshot.transitivePeerDependencies,\n };\n }\n edge = candidate.neighbours.length > 0 || candidate.id !== pkgId ? candidate : null;\n edgesCache?.set(snapshot, { depPath, edge });\n }\n if (edge) {\n edges.push(edge);\n }\n }\n for (const dep of directDependencies) {\n dep.id = replaceFileVersion(dep.id);\n }\n edges.push({\n id: DependenciesGraph.ROOT_EDGE_ID,\n neighbours: directDependencies,\n });\n return edges;\n}\n\nfunction extractDependenciesFromSnapshot(\n snapshot: any,\n replaceFileVersion: (s: string) => string\n): DependencyNeighbour[] {\n const dependencies: DependencyNeighbour[] = [];\n\n for (const { depTypeField, optional } of [\n { depTypeField: 'dependencies', optional: false },\n { depTypeField: 'optionalDependencies', optional: true },\n ]) {\n for (const [name, ref] of Object.entries((snapshot[depTypeField] ?? {}) as Record<string, string>)) {\n const subDepPath = dp.refToRelative(ref, name);\n if (subDepPath != null) {\n dependencies.push({ id: replaceFileVersion(subDepPath), optional });\n }\n }\n }\n\n return dependencies;\n}\n\nfunction buildPackages(\n lockfile: BitLockfileFile,\n {\n componentIdByPkgName,\n replaceFileVersion,\n packagesCache,\n }: {\n componentIdByPkgName: ComponentIdByPkgName;\n replaceFileVersion: (s: string) => string;\n packagesCache?: LockfileToGraphCache['packages'];\n }\n): PackagesMap {\n const depsRequiringBuild = lockfile.bit?.depsRequiringBuild;\n const depsRequiringBuildSet = depsRequiringBuild ? new Set(depsRequiringBuild) : undefined;\n const packages: PackagesMap = new Map();\n for (const [pkgId, pkg] of Object.entries(lockfile.packages ?? {})) {\n const cached = packagesCache?.get(pkg);\n if (cached && cached.pkgId === pkgId) {\n packages.set(cached.replacedPkgId, cached.graphPkg);\n continue;\n }\n const graphPkg = pick(pkg, [\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 ]) as any;\n if (graphPkg.resolution.type === 'directory') {\n delete graphPkg.resolution;\n }\n const replacedPkgId = replaceFileVersion(pkgId);\n const parsed = dp.parse(replacedPkgId);\n if (parsed.name && componentIdByPkgName.has(parsed.name)) {\n const compId = componentIdByPkgName.get(parsed.name)!;\n graphPkg.component = {\n name: compId.fullName,\n scope: compId.scope,\n };\n }\n if (depsRequiringBuildSet?.has(pkgId)) {\n graphPkg.requiresBuild = true;\n }\n packagesCache?.set(pkg, { pkgId, replacedPkgId, graphPkg });\n packages.set(replacedPkgId, graphPkg);\n }\n return packages;\n}\n\nexport function createFileVersionReplacer(componentIdByPkgName: ComponentIdByPkgName): (s: string) => string {\n if (componentIdByPkgName.size === 0) return (s) => s;\n\n const replacements = new Map<string, string>();\n const escapedNames: string[] = [];\n for (const [pkgName, componentId] of componentIdByPkgName.entries()) {\n replacements.set(pkgName, `${pkgName}@${snapToSemver(componentId.version)}`);\n escapedNames.push(pkgName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'));\n }\n const pattern = new RegExp(`(${escapedNames.join('|')})@file:[^'\"(]+`, 'g');\n\n return (s: string) => {\n if (!s.includes('@file:')) return s;\n return s.replace(pattern, (_, name) => replacements.get(name)!);\n };\n}\n\n/**\n * Narrow a lockfile in-memory to the transitive closure of what `importerIds`\n * reaches, without crossing the N-API boundary or cloning the full lockfile.\n */\nexport function filterLockfileByImporters(\n lockfile: BitLockfileFile,\n importerIds: string[],\n importersOverride?: Record<string, LockfileFileProjectSnapshot>\n): BitLockfileFile {\n ensureInitialized();\n const getImporter = (id: string) => importersOverride?.[id] ?? lockfile.importers?.[id];\n const reachablePackages = new Set<string>();\n const reachableSnapshots = new Set<string>();\n const stack: string[] = [];\n\n const visit = (depPath: string) => {\n stack.push(depPath);\n while (stack.length > 0) {\n const current = stack.pop()!;\n if (reachableSnapshots.has(current)) continue;\n const pkgId = dp.removeSuffix(current);\n if (lockfile.packages?.[pkgId] != null) {\n reachablePackages.add(pkgId);\n }\n const snapshot = lockfile.snapshots?.[current];\n if (!snapshot) continue;\n reachableSnapshots.add(current);\n for (const depType of ['dependencies', 'optionalDependencies'] as const) {\n for (const [name, ref] of Object.entries(snapshot[depType] ?? {}) as Array<[string, string]>) {\n const subDepPath = dp.refToRelative(ref, name);\n if (subDepPath != null) {\n stack.push(subDepPath);\n }\n }\n }\n }\n };\n\n for (const importerId of importerIds) {\n const importer = getImporter(importerId);\n if (!importer) continue;\n for (const depType of ['dependencies', 'devDependencies', 'optionalDependencies'] as const) {\n for (const [name, dep] of Object.entries(importer[depType] ?? {}) as Array<[string, { version?: string }]>) {\n if (!dep?.version) continue;\n const depPath = dp.refToRelative(dep.version, name);\n if (depPath != null) {\n visit(depPath);\n }\n }\n }\n }\n\n const filteredPackages: NonNullable<BitLockfileFile['packages']> = {};\n for (const pkgId of reachablePackages) {\n filteredPackages[pkgId] = lockfile.packages![pkgId];\n }\n\n const filteredSnapshots: NonNullable<BitLockfileFile['snapshots']> = {};\n for (const depPath of reachableSnapshots) {\n filteredSnapshots[depPath] = lockfile.snapshots![depPath];\n }\n\n const filteredImporters: NonNullable<BitLockfileFile['importers']> = {};\n for (const importerId of importerIds) {\n const importer = getImporter(importerId);\n if (importer != null) {\n filteredImporters[importerId] = importer;\n }\n }\n\n return {\n ...lockfile,\n importers: filteredImporters,\n packages: filteredPackages,\n snapshots: filteredSnapshots,\n };\n}\n\nexport async function convertGraphToLockfile(\n _graph: DependenciesGraph,\n {\n manifests,\n rootDir,\n resolve,\n }: {\n manifests: Record<string, ProjectManifest>;\n rootDir: string;\n resolve: ResolveFunction;\n }\n): Promise<BitLockfileFile> {\n await init();\n const graphString = _graph.serialize();\n const graph = DependenciesGraph.deserialize(graphString)!;\n dropOrphanFilePkgs(graph);\n dropOrphanNeighbours(graph);\n const packages = {};\n const snapshots = {};\n const allEdgeIds = new Set(graph.edges.map(({ id }) => id));\n\n for (const edge of graph.edges) {\n if (edge.id === DependenciesGraph.ROOT_EDGE_ID) continue;\n const pkgId = edge.attr?.pkgId ?? edge.id;\n snapshots[edge.id] = {};\n packages[pkgId] = {};\n const [optionalDeps, prodDeps] = partition(edge.neighbours, (dep) => dep.optional);\n if (prodDeps.length) {\n snapshots[edge.id].dependencies = convertToDeps(prodDeps);\n }\n if (optionalDeps.length) {\n snapshots[edge.id].optionalDependencies = convertToDeps(optionalDeps);\n }\n const graphPkg = graph.packages.get(pkgId);\n if (graphPkg != null) {\n Object.assign(packages[pkgId], convertGraphPackageToLockfilePackage(graphPkg));\n }\n }\n for (const [pkgId, graphPkg] of graph.packages.entries()) {\n if (packages[pkgId] == null) {\n packages[pkgId] = convertGraphPackageToLockfilePackage(graphPkg);\n snapshots[pkgId] = {};\n }\n }\n const depsRequiringBuild: string[] = [];\n for (const [pkgId, { requiresBuild }] of graph.packages.entries()) {\n if (requiresBuild) {\n depsRequiringBuild.push(pkgId);\n }\n }\n depsRequiringBuild.sort();\n const lockfile: BitLockfileFile & Required<Pick<BitLockfileFile, 'packages'>> = {\n lockfileVersion: '9.0',\n packages,\n snapshots,\n importers: {},\n bit: { depsRequiringBuild },\n };\n // Carry the readPackage hooks checksum the graph was resolved with, if any,\n // so pnpm accepts the restored resolution only while the hooks are the same.\n // Bit passes no hooks anymore, and the graph model translates the checksum of\n // its last hooks into the overrides that replaced them.\n //\n // A graph saved before the graph recorded the checksum has none, and gets\n // none here: pnpm then resolves its dependencies again. Stamping the current\n // checksum on it would be wrong, because the hooks changed what they do to\n // dependency manifests while such graphs were being saved (e.g. stripping\n // `@teambit/harmony` from every dependency was added after graphs started\n // being stored), so an old graph may hold resolutions the current hooks\n // would not produce.\n if (graph.pnpmfileChecksum != null) {\n lockfile.pnpmfileChecksum = graph.pnpmfileChecksum;\n }\n // Carry the resolution settings the graph was resolved under as well. pnpm\n // compares them with the install's settings, and a lockfile without them\n // reads as resolved with dedupePeers and injectWorkspacePackages off, which\n // Bit's installs never match, so every restored lockfile was resolved again.\n if (graph.lockfileSettings != null) {\n lockfile.settings = graph.lockfileSettings;\n }\n // And the overrides, which pnpm compares with the install's the same way.\n if (graph.overrides != null) {\n lockfile.overrides = graph.overrides;\n }\n const rootEdge = graph.findRootEdge();\n if (rootEdge) {\n for (const [projectDir, manifest] of Object.entries(manifests)) {\n const projectId = getLockfileImporterId(rootDir, projectDir);\n lockfile.importers![projectId] = {\n dependencies: {},\n devDependencies: {},\n optionalDependencies: {},\n };\n for (const depType of ['dependencies', 'devDependencies', 'optionalDependencies']) {\n for (const [name, specifier] of Object.entries(manifest[depType] ?? {}) as Array<[string, string]>) {\n if (specifier.startsWith('link:')) {\n const version = `link:${normalizePath(path.relative(projectDir, specifier.substring(5)))}`;\n lockfile.importers![projectId][depType][name] = { version, specifier };\n } else {\n const edgeId = rootEdge.neighbours.find(\n (directDep) =>\n directDep.name === name &&\n (directDep.specifier === specifier || dp.removeSuffix(directDep.id) === `${name}@${specifier}`)\n )?.id;\n if (edgeId) {\n const parsed = dp.parse(edgeId);\n const ref = depPathToRef(parsed);\n lockfile.importers![projectId][depType][name] = { version: ref, specifier };\n }\n }\n }\n }\n }\n }\n dedupeSnapshotDepsToRootManifest(lockfile, manifests[rootDir]);\n dropUnreachableLockfileEntries(lockfile);\n const pkgsToResolve = getPkgsToResolve(lockfile, manifests);\n const failedWorkspaceComponentPkgs = new Set<string>();\n await Promise.all(\n pkgsToResolve.map(async (pkgToResolve) => {\n if (lockfile.packages[pkgToResolve.pkgId].resolution == null) {\n let resolveResult;\n try {\n resolveResult = await resolve(\n {\n alias: pkgToResolve.name,\n bareSpecifier: pkgToResolve.version,\n },\n {\n lockfileDir: rootDir,\n projectDir: rootDir,\n preferredVersions: {},\n }\n );\n } catch (err) {\n // A workspace-component package with a missing resolution whose\n // snap-version was never published surfaces here as pnpm's\n // ERR_PNPM_NO_MATCHING_VERSION. The graph itself is unusable for\n // this pkgId, but pnpm can re-resolve the dep from the installing\n // manifest's specifier — so scrub the pkgId from the generated\n // lockfile and continue. Re-throw every other error code (network,\n // auth, 5xx, even FETCH_404 since some registries return 404 on\n // auth failures) so real install failures aren't silently masked.\n if (\n (err as { code?: string }).code === 'ERR_PNPM_NO_MATCHING_VERSION' &&\n graph.packages.get(pkgToResolve.pkgId)?.component != null\n ) {\n failedWorkspaceComponentPkgs.add(pkgToResolve.pkgId);\n return;\n }\n throw err;\n }\n const { resolution } = resolveResult;\n if (resolution != null && 'integrity' in resolution && resolution.integrity) {\n lockfile.packages[pkgToResolve.pkgId].resolution = {\n integrity: resolution.integrity as string,\n };\n }\n }\n })\n );\n // A workspace-component snap can still be missing a resolution here even\n // when resolve() never threw ERR_PNPM_NO_MATCHING_VERSION. Its directory\n // resolution was stripped at graph-build time (see buildPackages), and the\n // resolve pass above leaves it null in two cases the throw-handler doesn't\n // see: getPkgsToResolve skips any pkgId whose name+version matches a\n // manifest in the sign/capsule set (so the resolver is never called for a\n // component that is itself a seeder being signed), and a resolver can also\n // return a resolution that carries no integrity. Either way the snap-version\n // was never published, so it can't carry a valid lockfile entry. Sweep every\n // still-resolution-less workspace-component pkg into the scrub set so pnpm\n // re-resolves the dep from the installing manifest's specifier (linking the\n // workspace component) instead of failing validation and aborting the whole\n // install. Non-component registry pkgs with no resolution are left to fail\n // validation below — that path means the graph itself is genuinely broken.\n for (const [pkgId, pkg] of Object.entries(lockfile.packages)) {\n if (\n (pkg.resolution == null || Object.keys(pkg.resolution).length === 0) &&\n graph.packages.get(pkgId)?.component != null\n ) {\n failedWorkspaceComponentPkgs.add(pkgId);\n }\n }\n if (failedWorkspaceComponentPkgs.size > 0) {\n scrubPkgsFromLockfile(lockfile, failedWorkspaceComponentPkgs);\n }\n dropUnreachableLockfileEntries(lockfile);\n // Validate the generated lockfile\n for (const [depPath, pkg] of Object.entries(lockfile.packages)) {\n if (pkg.resolution == null || Object.keys(pkg.resolution).length === 0) {\n throw new BitError(\n `Failed to generate a valid lockfile. The \"packages['${depPath}']\" entry doesn't have a \"resolution\" field.`\n );\n }\n }\n return lockfile;\n\n function convertToDeps(neighbours: DependencyNeighbour[]) {\n const deps = {};\n for (const { id } of neighbours) {\n const parsed = dp.parse(id);\n deps[parsed.name!] = depPathToRef(parsed);\n if (!allEdgeIds.has(id)) {\n snapshots[id] = {};\n packages[id] = convertGraphPackageToLockfilePackage(graph.packages.get(id)!);\n }\n }\n return deps;\n }\n}\n\ninterface PkgToResolve {\n name: string;\n version: string;\n pkgId: string;\n}\n\nfunction getPkgsToResolve(lockfile: BitLockfileFile, manifests: Record<string, ProjectManifest>): PkgToResolve[] {\n const pkgsToResolve: PkgToResolve[] = [];\n const pkgsInTheWorkspaces = new Map<string, string>();\n for (const { name, version } of Object.values(manifests)) {\n if (name && version) {\n pkgsInTheWorkspaces.set(name, version);\n }\n }\n for (const [pkgId, pkg] of Object.entries(lockfile.packages ?? {})) {\n if (pkg.resolution == null || ('type' in pkg.resolution && pkg.resolution.type === 'directory')) {\n const parsed = dp.parse(pkgId);\n if (\n parsed.name &&\n parsed.version &&\n (!pkgsInTheWorkspaces.has(parsed.name) || pkgsInTheWorkspaces.get(parsed.name) !== parsed.version)\n ) {\n pkgsToResolve.push({\n name: parsed.name,\n version: parsed.version,\n pkgId,\n });\n }\n }\n }\n return pkgsToResolve;\n}\n\nfunction dropUnreachableLockfileEntries(lockfile: BitLockfileFile): void {\n const reachablePackages = new Set<string>();\n const reachableSnapshots = new Set<string>();\n // An explicit stack: deep dependency chains would overflow the call\n // stack with a recursive walk.\n const stack: string[] = [];\n const visit = (depPath: string) => {\n stack.push(depPath);\n while (stack.length > 0) {\n const current = stack.pop()!;\n if (reachableSnapshots.has(current)) continue;\n reachableSnapshots.add(current);\n reachablePackages.add(dp.removeSuffix(current));\n const snapshot = lockfile.snapshots?.[current];\n if (!snapshot) continue;\n for (const depType of ['dependencies', 'optionalDependencies'] as const) {\n for (const [name, ref] of Object.entries(snapshot[depType] ?? {})) {\n if (ref.startsWith('link:') || ref.startsWith('file:')) continue;\n stack.push(`${name}@${ref}`);\n }\n }\n }\n };\n for (const importer of Object.values(lockfile.importers ?? {})) {\n for (const depType of ['dependencies', 'devDependencies', 'optionalDependencies'] as const) {\n for (const [name, { version }] of Object.entries(importer[depType] ?? {})) {\n if (version.startsWith('link:') || version.startsWith('file:')) continue;\n visit(`${name}@${version}`);\n }\n }\n }\n for (const pkgId of Object.keys(lockfile.packages ?? {})) {\n if (!reachablePackages.has(pkgId)) {\n delete lockfile.packages![pkgId];\n }\n }\n for (const depPath of Object.keys(lockfile.snapshots ?? {})) {\n if (!reachableSnapshots.has(depPath)) {\n delete lockfile.snapshots![depPath];\n }\n }\n if (lockfile.bit?.depsRequiringBuild) {\n lockfile.bit.depsRequiringBuild = lockfile.bit.depsRequiringBuild.filter((depPath) =>\n reachablePackages.has(dp.removeSuffix(depPath))\n );\n }\n}\n\nfunction dedupeSnapshotDepsToRootManifest(lockfile: BitLockfileFile, rootManifest: ProjectManifest | undefined): void {\n const overridden = new Set(overriddenPackageNames(lockfile.overrides));\n const rootDeps = new Map(\n Object.entries(nonOptionalDependencies(rootManifest)).filter(([name]) => !overridden.has(name))\n );\n if (rootDeps.size === 0) return;\n for (const [depPath, snapshot] of Object.entries(lockfile.snapshots ?? {})) {\n const peers = new Set(Object.keys(lockfile.packages?.[dp.removeSuffix(depPath)]?.peerDependencies ?? {}));\n dropSnapshotDeps(\n snapshot,\n (name, ref) => rootDeps.has(name) && rootVersionWins(name, ref, rootDeps.get(name)!, peers.has(name))\n );\n }\n}\n\nfunction nonOptionalDependencies(manifest: ProjectManifest | undefined): Record<string, string> {\n return { ...manifest?.devDependencies, ...manifest?.dependencies };\n}\n\nfunction overriddenPackageNames(overrides: Record<string, string> | undefined): string[] {\n return parseOverrides(overrides ?? {}).map((override) => override.targetPkg.name);\n}\n\nfunction dropSnapshotDeps(\n snapshot: NonNullable<BitLockfileFile['snapshots']>[string],\n shouldDrop: (name: string, ref: string) => boolean\n): void {\n for (const depType of ['dependencies', 'optionalDependencies'] as const) {\n const deps = snapshot[depType];\n if (!deps) continue;\n for (const [name, ref] of Object.entries(deps)) {\n if (shouldDrop(name, ref)) delete deps[name];\n }\n }\n}\n\nfunction rootVersionWins(name: string, ref: string, rootSpecifier: string, isPeer: boolean): boolean {\n const lockedVersion = dp.parse(`${name}@${ref}`).version;\n if (lockedVersion == null) return false;\n const rootVersion = semver.valid(rootSpecifier);\n if (rootVersion != null) return lockedVersion !== rootVersion;\n return isPeer;\n}\n\nfunction depPathToRef(depPath: Dp.DependencyPath): string {\n return `${depPath.version}${depPath.patchHash ?? ''}${depPath.peerDepGraphHash ?? ''}`;\n}\n\nfunction isFilePkgId(pkgId: string): boolean {\n return dp.parse(pkgId).nonSemverVersion?.startsWith('file:') ?? false;\n}\n\n/**\n * Strip orphan \"@file:\" entries from the graph (mutates in place).\n *\n * The \"@file:\" pkgIds in pnpm's lockfile are workspace components linked as\n * directory deps. buildPackages is supposed to rewrite them to\n * \"name@<semverVersion>\" via componentIdByPkgName, but if a name is missing\n * from that map (older bit, partial isolation, a component renamed/removed\n * between install and tag) the orphan leaks through with its resolution\n * stripped (directory type). We can't recover an integrity for it later —\n * getPkgsToResolve won't try because dp.parse shoves \"file:...\" into\n * nonSemverVersion, leaving parsed.version undefined, and at install time\n * the component is either a workspace project pnpm wires through importers\n * (so it doesn't belong in the packages map) or no longer in the workspace\n * at all. Either way the orphan entry is unusable, so drop it both at graph\n * creation (don't persist broken graphs) and at lockfile generation\n * (recover graphs already saved in the model).\n */\nfunction dropOrphanFilePkgs(graph: DependenciesGraph): void {\n const orphanPkgIds = new Set<string>();\n for (const pkgId of graph.packages.keys()) {\n if (isFilePkgId(pkgId)) {\n orphanPkgIds.add(pkgId);\n }\n }\n for (const edge of graph.edges) {\n const pkgId = edge.attr?.pkgId ?? edge.id;\n if (isFilePkgId(pkgId) || isFilePkgId(edge.id)) {\n orphanPkgIds.add(pkgId);\n orphanPkgIds.add(edge.id);\n }\n }\n if (orphanPkgIds.size === 0) return;\n for (const id of orphanPkgIds) {\n graph.packages.delete(id);\n }\n graph.edges = graph.edges\n .filter((edge) => !orphanPkgIds.has(edge.id) && !orphanPkgIds.has(edge.attr?.pkgId ?? edge.id))\n .map((edge) => {\n if (!edge.neighbours.some((n) => orphanPkgIds.has(n.id))) return edge;\n return {\n ...edge,\n neighbours: edge.neighbours.filter((n) => !orphanPkgIds.has(n.id)),\n };\n });\n}\n\n/**\n * Drop neighbours that reference a pkgId with no edge AND no packages entry.\n *\n * Recovers graphs saved by bits older than #10361 (the back-edge fix). Those\n * older bits, when snapping a component with a circular workspace dep, deleted\n * the component's own snapshot/package entry but left back-references to it on\n * other snapshots intact. The orphan neighbour now has no edge (its snapshot\n * was removed) and no packages entry (its package was removed), so the loop\n * below would synthesise an empty packages entry and getPkgsToResolve would\n * ask the registry for a workspace snap-version that was never published —\n * surfacing as ERR_PNPM_NO_MATCHING_VERSION at install time. Scrubbing the\n * dangling neighbour here means already-saved broken graphs install cleanly\n * without requiring the affected component to be re-snapped on a newer client.\n */\nfunction dropOrphanNeighbours(graph: DependenciesGraph): void {\n const edgeIds = new Set(graph.edges.map((edge) => edge.id));\n const isOrphan = (n: DependencyNeighbour): boolean =>\n !edgeIds.has(n.id) && !graph.packages.has(dp.removeSuffix(n.id));\n graph.edges = graph.edges.map((edge) => {\n if (!edge.neighbours.some(isOrphan)) return edge;\n return {\n ...edge,\n neighbours: edge.neighbours.filter((n) => !isOrphan(n)),\n };\n });\n}\n\n/**\n * Remove the given pkgIds (and everything that references them) from a\n * lockfile in place. Used when a workspace-component snap-version baked into\n * the graph turns out to be unpublishable at install time — leaving it in the\n * lockfile would fail validation and abort the whole install. Stripping it\n * means pnpm falls back to resolving the dep from the installing manifest's\n * specifier, which is the same path as a graph-less install for that one dep.\n */\nfunction scrubPkgsFromLockfile(lockfile: BitLockfileFile, pkgIds: Set<string>): void {\n const matches = (depPath: string): boolean => pkgIds.has(dp.removeSuffix(depPath));\n for (const pkgId of pkgIds) {\n delete lockfile.packages![pkgId];\n }\n for (const depPath of Object.keys(lockfile.snapshots ?? {})) {\n if (matches(depPath)) {\n delete lockfile.snapshots![depPath];\n }\n }\n for (const snapshot of Object.values(lockfile.snapshots ?? {})) {\n for (const depType of ['dependencies', 'optionalDependencies'] as const) {\n const deps = snapshot[depType];\n if (!deps) continue;\n for (const [name, ref] of Object.entries(deps)) {\n if (matches(`${name}@${ref}`)) {\n delete deps[name];\n }\n }\n if (Object.keys(deps).length === 0) delete snapshot[depType];\n }\n }\n for (const importer of Object.values(lockfile.importers ?? {})) {\n for (const depType of ['dependencies', 'devDependencies', 'optionalDependencies'] as const) {\n const deps = importer[depType];\n if (!deps) continue;\n for (const [name, { version }] of Object.entries(deps)) {\n if (version.startsWith('link:') || version.startsWith('file:')) continue;\n if (matches(`${name}@${version}`)) {\n delete deps[name];\n }\n }\n }\n }\n}\n\nfunction convertGraphPackageToLockfilePackage(pkgAttr: PackageAttributes) {\n return pick(pkgAttr, [\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}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1052,9 +1052,11 @@ describe('filterLockfileByImporters', () => {
|
|
|
1052
1052
|
(0, _chai().expect)(Object.keys(filtered.snapshots).sort()).to.eql(['bar@1.0.0', 'baz@1.0.0', 'foo@1.0.0(bar@1.0.0)']);
|
|
1053
1053
|
(0, _chai().expect)(Object.keys(filtered.importers)).to.eql(['comps/comp1']);
|
|
1054
1054
|
|
|
1055
|
-
// Mutating filtered snapshots/packages must not mutate the original lockfile
|
|
1056
|
-
delete filtered.snapshots['foo@1.0.0(bar@1.0.0)']
|
|
1055
|
+
// Mutating the top-level filtered snapshots/packages map must not mutate the original lockfile
|
|
1056
|
+
delete filtered.snapshots['foo@1.0.0(bar@1.0.0)'];
|
|
1057
|
+
delete filtered.packages['foo@1.0.0'];
|
|
1057
1058
|
(0, _chai().expect)(lockfile.snapshots['foo@1.0.0(bar@1.0.0)'].dependencies.bar).to.equal('1.0.0');
|
|
1059
|
+
(0, _chai().expect)(lockfile.packages['foo@1.0.0']).to.not.equal(undefined);
|
|
1058
1060
|
});
|
|
1059
1061
|
it('should retain package metadata for a reached dependency even when its snapshot is absent', () => {
|
|
1060
1062
|
const lockfile = {
|
|
@@ -2394,5 +2396,158 @@ describe('lockfile settings', () => {
|
|
|
2394
2396
|
(0, _chai().expect)(lockfile).not.to.have.property('settings');
|
|
2395
2397
|
});
|
|
2396
2398
|
});
|
|
2399
|
+
describe('createLockfileToGraphCache', () => {
|
|
2400
|
+
const lockfile = {
|
|
2401
|
+
bit: {
|
|
2402
|
+
depsRequiringBuild: []
|
|
2403
|
+
},
|
|
2404
|
+
lockfileVersion: '9.0',
|
|
2405
|
+
importers: {
|
|
2406
|
+
'.': {},
|
|
2407
|
+
'node_modules/.bit_roots/env': {
|
|
2408
|
+
dependencies: {
|
|
2409
|
+
comp1: {
|
|
2410
|
+
version: 'file:comps/comp1(foo@1.0.0)',
|
|
2411
|
+
specifier: '*'
|
|
2412
|
+
},
|
|
2413
|
+
comp2: {
|
|
2414
|
+
version: 'file:comps/comp2(foo@1.0.0)',
|
|
2415
|
+
specifier: '*'
|
|
2416
|
+
}
|
|
2417
|
+
}
|
|
2418
|
+
},
|
|
2419
|
+
'comps/comp1': {
|
|
2420
|
+
dependencies: {
|
|
2421
|
+
comp2: {
|
|
2422
|
+
version: 'file:comps/comp2(foo@1.0.0)',
|
|
2423
|
+
specifier: '*'
|
|
2424
|
+
},
|
|
2425
|
+
foo: {
|
|
2426
|
+
version: '1.0.0',
|
|
2427
|
+
specifier: '^1.0.0'
|
|
2428
|
+
}
|
|
2429
|
+
}
|
|
2430
|
+
},
|
|
2431
|
+
'comps/comp2': {
|
|
2432
|
+
dependencies: {
|
|
2433
|
+
comp1: {
|
|
2434
|
+
version: 'file:comps/comp1(foo@1.0.0)',
|
|
2435
|
+
specifier: '*'
|
|
2436
|
+
},
|
|
2437
|
+
foo: {
|
|
2438
|
+
version: '1.0.0',
|
|
2439
|
+
specifier: '^1.0.0'
|
|
2440
|
+
}
|
|
2441
|
+
}
|
|
2442
|
+
}
|
|
2443
|
+
},
|
|
2444
|
+
snapshots: {
|
|
2445
|
+
'comp1@file:comps/comp1(foo@1.0.0)': {
|
|
2446
|
+
dependencies: {
|
|
2447
|
+
comp2: 'file:comps/comp2(foo@1.0.0)',
|
|
2448
|
+
foo: '1.0.0'
|
|
2449
|
+
}
|
|
2450
|
+
},
|
|
2451
|
+
'comp2@file:comps/comp2(foo@1.0.0)': {
|
|
2452
|
+
dependencies: {
|
|
2453
|
+
comp1: 'file:comps/comp1(foo@1.0.0)',
|
|
2454
|
+
foo: '1.0.0'
|
|
2455
|
+
}
|
|
2456
|
+
},
|
|
2457
|
+
'foo@1.0.0': {
|
|
2458
|
+
dependencies: {
|
|
2459
|
+
bar: '2.0.0'
|
|
2460
|
+
}
|
|
2461
|
+
},
|
|
2462
|
+
'bar@2.0.0': {}
|
|
2463
|
+
},
|
|
2464
|
+
packages: {
|
|
2465
|
+
'comp1@file:comps/comp1': {
|
|
2466
|
+
resolution: {
|
|
2467
|
+
directory: 'comps/comp1',
|
|
2468
|
+
type: 'directory'
|
|
2469
|
+
}
|
|
2470
|
+
},
|
|
2471
|
+
'comp2@file:comps/comp2': {
|
|
2472
|
+
resolution: {
|
|
2473
|
+
directory: 'comps/comp2',
|
|
2474
|
+
type: 'directory'
|
|
2475
|
+
}
|
|
2476
|
+
},
|
|
2477
|
+
'foo@1.0.0': {
|
|
2478
|
+
resolution: {
|
|
2479
|
+
integrity: 'sha512-foo'
|
|
2480
|
+
}
|
|
2481
|
+
},
|
|
2482
|
+
'bar@2.0.0': {
|
|
2483
|
+
resolution: {
|
|
2484
|
+
integrity: 'sha512-bar'
|
|
2485
|
+
}
|
|
2486
|
+
}
|
|
2487
|
+
}
|
|
2488
|
+
};
|
|
2489
|
+
it('should reuse unmodified package and edge entries across components while isolating circular back-edge scrubbing', () => {
|
|
2490
|
+
const componentIdByPkgName = new Map([['comp1', _component().ComponentID.fromString('my-scope/comp1@1.0.0')], ['comp2', _component().ComponentID.fromString('my-scope/comp2@1.0.0')]]);
|
|
2491
|
+
const cache = (0, _lockfileDepsGraphConverter().createLockfileToGraphCache)();
|
|
2492
|
+
const filtered1 = (0, _lockfileDepsGraphConverter().filterLockfileByImporters)(lockfile, ['comps/comp1', 'node_modules/.bit_roots/env']);
|
|
2493
|
+
const graph1 = (0, _lockfileDepsGraphConverter().convertLockfileToGraph)(filtered1, {
|
|
2494
|
+
pkgName: 'comp1',
|
|
2495
|
+
componentRelativeDir: 'comps/comp1',
|
|
2496
|
+
componentRootDir: 'node_modules/.bit_roots/env',
|
|
2497
|
+
componentIdByPkgName,
|
|
2498
|
+
cache
|
|
2499
|
+
});
|
|
2500
|
+
const filtered2 = (0, _lockfileDepsGraphConverter().filterLockfileByImporters)(lockfile, ['comps/comp2', 'node_modules/.bit_roots/env']);
|
|
2501
|
+
const graph2 = (0, _lockfileDepsGraphConverter().convertLockfileToGraph)(filtered2, {
|
|
2502
|
+
pkgName: 'comp2',
|
|
2503
|
+
componentRelativeDir: 'comps/comp2',
|
|
2504
|
+
componentRootDir: 'node_modules/.bit_roots/env',
|
|
2505
|
+
componentIdByPkgName,
|
|
2506
|
+
cache
|
|
2507
|
+
});
|
|
2508
|
+
|
|
2509
|
+
// Shared non-mutated package and edge objects are reused by reference
|
|
2510
|
+
(0, _chai().expect)(graph1.packages.get('foo@1.0.0')).to.equal(graph2.packages.get('foo@1.0.0'));
|
|
2511
|
+
const fooEdge1 = graph1.edges.find(e => e.id === 'foo@1.0.0');
|
|
2512
|
+
const fooEdge2 = graph2.edges.find(e => e.id === 'foo@1.0.0');
|
|
2513
|
+
(0, _chai().expect)(fooEdge1).to.not.equal(undefined);
|
|
2514
|
+
(0, _chai().expect)(fooEdge1).to.equal(fooEdge2);
|
|
2515
|
+
|
|
2516
|
+
// Circular back-edges are scrubbed per component without mutating the original lockfile
|
|
2517
|
+
(0, _chai().expect)(graph1.packages.has('comp1@1.0.0')).to.equal(false);
|
|
2518
|
+
(0, _chai().expect)(graph1.packages.has('comp2@1.0.0')).to.equal(true);
|
|
2519
|
+
(0, _chai().expect)(graph1.edges.some(e => e.neighbours.some(n => n.id.startsWith('comp1@')))).to.equal(false);
|
|
2520
|
+
(0, _chai().expect)(graph2.packages.has('comp2@1.0.0')).to.equal(false);
|
|
2521
|
+
(0, _chai().expect)(graph2.packages.has('comp1@1.0.0')).to.equal(true);
|
|
2522
|
+
(0, _chai().expect)(graph2.edges.some(e => e.neighbours.some(n => n.id.startsWith('comp2@')))).to.equal(false);
|
|
2523
|
+
});
|
|
2524
|
+
it('should invalidate cached entries when reused with a different componentIdByPkgName mapping', () => {
|
|
2525
|
+
const cache = (0, _lockfileDepsGraphConverter().createLockfileToGraphCache)();
|
|
2526
|
+
const filtered1 = (0, _lockfileDepsGraphConverter().filterLockfileByImporters)(lockfile, ['comps/comp1', 'node_modules/.bit_roots/env']);
|
|
2527
|
+
const graph1 = (0, _lockfileDepsGraphConverter().convertLockfileToGraph)(filtered1, {
|
|
2528
|
+
pkgName: 'comp1',
|
|
2529
|
+
componentRelativeDir: 'comps/comp1',
|
|
2530
|
+
componentRootDir: 'node_modules/.bit_roots/env',
|
|
2531
|
+
componentIdByPkgName: new Map([['comp1', _component().ComponentID.fromString('my-scope/comp1@1.0.0')], ['comp2', _component().ComponentID.fromString('my-scope/comp2@1.0.0')]]),
|
|
2532
|
+
cache
|
|
2533
|
+
});
|
|
2534
|
+
(0, _chai().expect)(graph1.packages.has('comp2@1.0.0')).to.equal(true);
|
|
2535
|
+
(0, _chai().expect)(graph1.edges.some(e => e.id === 'comp2@1.0.0(foo@1.0.0)')).to.equal(true);
|
|
2536
|
+
|
|
2537
|
+
// Reuse the same cache and lockfile objects with an updated version mapping for comp2
|
|
2538
|
+
const filtered2 = (0, _lockfileDepsGraphConverter().filterLockfileByImporters)(lockfile, ['comps/comp1', 'node_modules/.bit_roots/env']);
|
|
2539
|
+
const graph2 = (0, _lockfileDepsGraphConverter().convertLockfileToGraph)(filtered2, {
|
|
2540
|
+
pkgName: 'comp1',
|
|
2541
|
+
componentRelativeDir: 'comps/comp1',
|
|
2542
|
+
componentRootDir: 'node_modules/.bit_roots/env',
|
|
2543
|
+
componentIdByPkgName: new Map([['comp1', _component().ComponentID.fromString('my-scope/comp1@2.0.0')], ['comp2', _component().ComponentID.fromString('my-scope/comp2@2.0.0')]]),
|
|
2544
|
+
cache
|
|
2545
|
+
});
|
|
2546
|
+
(0, _chai().expect)(graph2.packages.has('comp2@2.0.0')).to.equal(true);
|
|
2547
|
+
(0, _chai().expect)(graph2.packages.has('comp2@1.0.0')).to.equal(false);
|
|
2548
|
+
(0, _chai().expect)(graph2.edges.some(e => e.id === 'comp2@2.0.0(foo@1.0.0)')).to.equal(true);
|
|
2549
|
+
(0, _chai().expect)(graph2.edges.some(e => e.id === 'comp2@1.0.0(foo@1.0.0)')).to.equal(false);
|
|
2550
|
+
});
|
|
2551
|
+
});
|
|
2397
2552
|
|
|
2398
2553
|
//# sourceMappingURL=lockfile-deps-graph-converter.spec.js.map
|