@teambit/objects 0.0.713 → 0.0.715

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.
@@ -1,4 +1,4 @@
1
- import type { LockfilePackageInfo } from '@pnpm/lockfile.types';
1
+ import type { LockfilePackageInfo, LockfileSettings } from '@pnpm/lockfile.types';
2
2
  export type PackagesMap = Map<string, PackageAttributes>;
3
3
  export type PackageAttributes = LockfilePackageInfo & {
4
4
  component?: {
@@ -38,11 +38,28 @@ export declare class DependenciesGraph {
38
38
  * existed don't have it.
39
39
  */
40
40
  pnpmfileChecksum?: string;
41
- constructor({ packages, edges, schemaVersion, pnpmfileChecksum, }: {
41
+ /**
42
+ * The `settings` block of the lockfile the graph was created from: the
43
+ * resolution settings (dedupePeers, injectWorkspacePackages, ...) the
44
+ * dependencies were resolved under. A lockfile restored from the graph
45
+ * carries them, so pnpm can install the restored resolution without
46
+ * resolving again while the install's settings still match. Graphs created
47
+ * before this field existed don't have it, and pnpm resolves them again.
48
+ */
49
+ lockfileSettings?: LockfileSettings;
50
+ /**
51
+ * The `overrides` of the lockfile the graph was created from. A lockfile
52
+ * restored from the graph carries them, so pnpm trusts the restored
53
+ * resolution only while the install's overrides are the same.
54
+ */
55
+ overrides?: Record<string, string>;
56
+ constructor({ packages, edges, schemaVersion, pnpmfileChecksum, lockfileSettings, overrides, }: {
42
57
  packages: PackagesMap;
43
58
  edges: DependencyEdge[];
44
59
  schemaVersion?: string;
45
60
  pnpmfileChecksum?: string;
61
+ lockfileSettings?: LockfileSettings;
62
+ overrides?: Record<string, string>;
46
63
  });
47
64
  serialize(): string;
48
65
  static deserialize(data: string): DependenciesGraph | undefined;
@@ -18,12 +18,29 @@ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object
18
18
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
19
19
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
20
20
  const DEPENDENCIES_GRAPH_SCHEMA_VERSION = '2.0';
21
+
22
+ /**
23
+ * The `pnpmfileChecksum` of graphs resolved with Bit's readPackage hooks. Those
24
+ * hooks removed `@teambit/legacy` and `@teambit/harmony` from every dependency.
25
+ * Bit now passes no hooks and removes them with the overrides below instead
26
+ * (`removedCoreDependencyOverrides` in the pnpm aspect), so such a graph holds
27
+ * the resolution those overrides produce. A workspace that forced a harmony
28
+ * version kept harmony, but it also recorded a harmony override, which no
29
+ * restored lockfile carried, so its graphs were never reused either way.
30
+ */
31
+ const READ_PACKAGE_HOOKS_CHECKSUM = 'bit-1';
32
+ const READ_PACKAGE_HOOKS_OVERRIDES = {
33
+ '@teambit/legacy@*': '-',
34
+ '@teambit/harmony@*': '-'
35
+ };
21
36
  class DependenciesGraph {
22
37
  constructor({
23
38
  packages,
24
39
  edges,
25
40
  schemaVersion,
26
- pnpmfileChecksum
41
+ pnpmfileChecksum,
42
+ lockfileSettings,
43
+ overrides
27
44
  }) {
28
45
  _defineProperty(this, "schemaVersion", void 0);
29
46
  _defineProperty(this, "packages", void 0);
@@ -36,18 +53,41 @@ class DependenciesGraph {
36
53
  * existed don't have it.
37
54
  */
38
55
  _defineProperty(this, "pnpmfileChecksum", void 0);
56
+ /**
57
+ * The `settings` block of the lockfile the graph was created from: the
58
+ * resolution settings (dedupePeers, injectWorkspacePackages, ...) the
59
+ * dependencies were resolved under. A lockfile restored from the graph
60
+ * carries them, so pnpm can install the restored resolution without
61
+ * resolving again while the install's settings still match. Graphs created
62
+ * before this field existed don't have it, and pnpm resolves them again.
63
+ */
64
+ _defineProperty(this, "lockfileSettings", void 0);
65
+ /**
66
+ * The `overrides` of the lockfile the graph was created from. A lockfile
67
+ * restored from the graph carries them, so pnpm trusts the restored
68
+ * resolution only while the install's overrides are the same.
69
+ */
70
+ _defineProperty(this, "overrides", void 0);
39
71
  this.packages = packages;
40
72
  this.edges = edges;
41
73
  this.schemaVersion = schemaVersion ?? DEPENDENCIES_GRAPH_SCHEMA_VERSION;
42
- this.pnpmfileChecksum = pnpmfileChecksum;
74
+ if (pnpmfileChecksum === READ_PACKAGE_HOOKS_CHECKSUM && overrides == null) {
75
+ this.overrides = _objectSpread({}, READ_PACKAGE_HOOKS_OVERRIDES);
76
+ } else {
77
+ this.pnpmfileChecksum = pnpmfileChecksum;
78
+ this.overrides = overrides;
79
+ }
80
+ this.lockfileSettings = lockfileSettings;
43
81
  }
44
82
  serialize() {
45
83
  return JSON.stringify({
46
84
  schemaVersion: this.schemaVersion,
47
85
  packages: Object.fromEntries(this.packages.entries()),
48
86
  edges: this.edges,
49
- // JSON.stringify omits it when undefined.
50
- pnpmfileChecksum: this.pnpmfileChecksum
87
+ // JSON.stringify omits these when undefined.
88
+ pnpmfileChecksum: this.pnpmfileChecksum,
89
+ lockfileSettings: this.lockfileSettings,
90
+ overrides: this.overrides
51
91
  });
52
92
  }
53
93
  static deserialize(data) {
@@ -60,11 +100,15 @@ class DependenciesGraph {
60
100
  schemaVersion: parsed.schemaVersion,
61
101
  edges: parsed.edges,
62
102
  packages: new Map(Object.entries(parsed.packages)),
63
- pnpmfileChecksum: parsed.pnpmfileChecksum
103
+ pnpmfileChecksum: parsed.pnpmfileChecksum,
104
+ lockfileSettings: parsed.lockfileSettings,
105
+ overrides: parsed.overrides
64
106
  });
65
107
  }
66
108
  merge(graph) {
67
109
  this.pnpmfileChecksum = mergePnpmfileChecksums(this, graph);
110
+ this.lockfileSettings = mergeLockfileSettings(this, graph);
111
+ this.overrides = mergeOverrides(this, graph);
68
112
  const rootEdge = this.findRootEdge();
69
113
  const incomingRootEdge = graph.findRootEdge();
70
114
  const directDependencies = incomingRootEdge?.neighbours;
@@ -276,6 +320,31 @@ function mergePnpmfileChecksums(graph1, graph2) {
276
320
  if (!graph1.hasResolutions()) return graph2.pnpmfileChecksum;
277
321
  return graph1.pnpmfileChecksum === graph2.pnpmfileChecksum ? graph1.pnpmfileChecksum : undefined;
278
322
  }
323
+
324
+ /**
325
+ * A merged graph mixes resolutions from both graphs, so it can only claim the
326
+ * settings both were resolved under.
327
+ */
328
+ function mergeLockfileSettings(graph1, graph2) {
329
+ if (!graph2.hasResolutions()) return graph1.lockfileSettings;
330
+ if (!graph1.hasResolutions()) return graph2.lockfileSettings;
331
+ return sameRecords(graph1.lockfileSettings, graph2.lockfileSettings) ? graph1.lockfileSettings : undefined;
332
+ }
333
+
334
+ /**
335
+ * A merged graph mixes resolutions from both graphs, so it can only claim the
336
+ * overrides both were resolved with.
337
+ */
338
+ function mergeOverrides(graph1, graph2) {
339
+ if (!graph2.hasResolutions()) return graph1.overrides;
340
+ if (!graph1.hasResolutions()) return graph2.overrides;
341
+ return sameRecords(graph1.overrides, graph2.overrides) ? graph1.overrides : undefined;
342
+ }
343
+ function sameRecords(record1, record2) {
344
+ if (record1 == null || record2 == null) return record1 === record2;
345
+ const keys = new Set([...Object.keys(record1), ...Object.keys(record2)]);
346
+ return [...keys].every(key => record1[key] === record2[key]);
347
+ }
279
348
  function isSameDirectDependency(dep1, dep2) {
280
349
  if (!dep1.name || !dep2.name) return dep1.id === dep2.id;
281
350
  if (dep1.name !== dep2.name) return false;
@@ -1 +1 @@
1
- {"version":3,"names":["_semver","data","_interopRequireDefault","require","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","DEPENDENCIES_GRAPH_SCHEMA_VERSION","DependenciesGraph","constructor","packages","edges","schemaVersion","pnpmfileChecksum","serialize","JSON","stringify","fromEntries","entries","deserialize","parsed","parse","undefined","Map","merge","graph","mergePnpmfileChecksums","rootEdge","findRootEdge","incomingRootEdge","directDependencies","neighbours","directDep","existingDirectDep","find","existingDep","isSameDirectDependency","isWildcardSpecifier","specifier","id","nodeIdLessThan","newPkgId","newPkgAttr","set","ROOT_EDGE_ID","normalizePeerProviderVersions","pruneUnreachableFromRoot","isEmpty","size","hasResolutions","some","edgesById","edge","reachableEdges","Set","reachablePackages","visited","stack","map","neighbour","nodeId","pop","has","add","nodeIdWithoutPeerSuffix","peerId","splitPeerIds","isPatchHashSegment","get","attr","pkgId","Array","from","values","delete","versionsByPackageName","collectVersionsByPackageName","getBestCompatiblePeer","name","range","version","semver","satisfies","includePrerelease","getHighestPeer","rewritePeerId","peerDependencies","parsedPeer","parsePkgId","nestedPeerDependencies","peerIds","nestedPeerId","rewrittenBase","bestPeer","createPeerSuffix","rewritePeerDep","depId","peerIdsByName","parsedDep","rewriteNodeId","changed","rewrittenPeerIds","rewrittenPeerId","rewriteNeighbour","rewrittenId","rewrittenEdge","existingEdge","mergeNeighbours","addVersion","valid","versions","sort","version1","version2","rcompare","exports","graph1","graph2","dep1","dep2","nodeId1","nodeId2","getVersionFromNodeId","lt","existingNeighbours","newNeighbours","newNeighbour","existingNeighbour","depPathWithoutPeerSuffix","versionStart","lastIndexOf","slice","suffixStart","indexOf","depth","peerStart","index","char","patchSegments","peerSegments","join","segment","startsWith","coerce"],"sources":["dependencies-graph.ts"],"sourcesContent":["import semver from 'semver';\nimport type { LockfilePackageInfo } from '@pnpm/lockfile.types';\n\nexport type PackagesMap = Map<string, PackageAttributes>;\n\nexport type PackageAttributes = LockfilePackageInfo & {\n component?: {\n scope: string;\n name: string;\n };\n requiresBuild?: boolean;\n};\n\nexport type DependencyEdge = {\n id: string;\n neighbours: DependencyNeighbour[];\n attr?: {\n pkgId?: string;\n transitivePeerDependencies?: string[];\n };\n};\n\nexport type DependencyNeighbour = {\n id: string;\n /**\n * This is true when the dependency is from optionalDependencies.\n */\n optional?: boolean;\n name?: string;\n specifier?: string;\n lifecycle?: 'runtime' | 'dev';\n};\n\nconst DEPENDENCIES_GRAPH_SCHEMA_VERSION = '2.0';\n\nexport class DependenciesGraph {\n static ROOT_EDGE_ID = '.';\n\n schemaVersion: string;\n packages: PackagesMap;\n edges: DependencyEdge[];\n /**\n * The `pnpmfileChecksum` of the lockfile the graph was created from: an id of\n * the readPackage hooks the dependencies were resolved with. A lockfile\n * restored from the graph carries it, so pnpm trusts the restored resolution\n * only while Bit's hooks are still the same. Graphs created before this field\n * existed don't have it.\n */\n pnpmfileChecksum?: string;\n\n constructor({\n packages,\n edges,\n schemaVersion,\n pnpmfileChecksum,\n }: {\n packages: PackagesMap;\n edges: DependencyEdge[];\n schemaVersion?: string;\n pnpmfileChecksum?: string;\n }) {\n this.packages = packages;\n this.edges = edges;\n this.schemaVersion = schemaVersion ?? DEPENDENCIES_GRAPH_SCHEMA_VERSION;\n this.pnpmfileChecksum = pnpmfileChecksum;\n }\n\n serialize(): string {\n return JSON.stringify({\n schemaVersion: this.schemaVersion,\n packages: Object.fromEntries(this.packages.entries()),\n edges: this.edges,\n // JSON.stringify omits it when undefined.\n pnpmfileChecksum: this.pnpmfileChecksum,\n });\n }\n\n static deserialize(data: string): DependenciesGraph | undefined {\n const parsed = JSON.parse(data);\n // If the schema version is not supported, then we just ignore the data\n if (parsed.schemaVersion !== DEPENDENCIES_GRAPH_SCHEMA_VERSION) {\n return undefined;\n }\n return new DependenciesGraph({\n schemaVersion: parsed.schemaVersion,\n edges: parsed.edges,\n packages: new Map(Object.entries(parsed.packages)),\n pnpmfileChecksum: parsed.pnpmfileChecksum,\n });\n }\n\n merge(graph: DependenciesGraph): void {\n this.pnpmfileChecksum = mergePnpmfileChecksums(this, graph);\n const rootEdge = this.findRootEdge();\n const incomingRootEdge = graph.findRootEdge();\n const directDependencies = incomingRootEdge?.neighbours;\n if (directDependencies && rootEdge) {\n for (const directDep of directDependencies) {\n const existingDirectDep = rootEdge.neighbours.find((existingDep) =>\n isSameDirectDependency(existingDep, directDep)\n );\n if (existingDirectDep == null) {\n rootEdge.neighbours.push(directDep);\n } else {\n if (isWildcardSpecifier(existingDirectDep.specifier) && !isWildcardSpecifier(directDep.specifier)) {\n existingDirectDep.specifier = directDep.specifier;\n }\n if (existingDirectDep.id !== directDep.id && nodeIdLessThan(existingDirectDep.id, directDep.id)) {\n existingDirectDep.id = directDep.id;\n }\n }\n }\n } else if (incomingRootEdge) {\n this.edges.push(incomingRootEdge);\n }\n for (const [newPkgId, newPkgAttr] of graph.packages.entries()) {\n this.packages.set(newPkgId, newPkgAttr);\n }\n this.edges.push(...graph.edges.filter(({ id }) => id !== DependenciesGraph.ROOT_EDGE_ID));\n this.normalizePeerProviderVersions();\n this.pruneUnreachableFromRoot();\n }\n\n isEmpty(): boolean {\n return this.packages.size === 0 && this.edges.length === 0;\n }\n\n /**\n * Whether the graph holds any resolved dependency. A component without\n * dependencies has only an empty root edge.\n */\n hasResolutions(): boolean {\n return (\n this.packages.size > 0 ||\n this.edges.some(({ id, neighbours }) => id !== DependenciesGraph.ROOT_EDGE_ID || neighbours.length > 0)\n );\n }\n\n /**\n * Returns the edge related to the root component\n */\n findRootEdge(): DependencyEdge | undefined {\n return this.edges.find(({ id }) => id === DependenciesGraph.ROOT_EDGE_ID);\n }\n\n private pruneUnreachableFromRoot(): void {\n const rootEdge = this.findRootEdge();\n if (!rootEdge) return;\n const edgesById = new Map<string, DependencyEdge>();\n for (const edge of this.edges) {\n if (edge.id !== DependenciesGraph.ROOT_EDGE_ID) {\n edgesById.set(edge.id, edge);\n }\n }\n const reachableEdges = new Set<string>();\n const reachablePackages = new Set<string>();\n // An explicit stack: deep dependency chains would overflow the call\n // stack with a recursive walk. Every node id is processed once — the\n // guard must sit before the suffix pushes, or a node referenced by M\n // edges re-pushes its suffix ids M times and nested suffixes multiply\n // that per level.\n const visited = new Set<string>();\n const stack = rootEdge.neighbours.map((neighbour) => neighbour.id);\n while (stack.length > 0) {\n const nodeId = stack.pop()!;\n if (visited.has(nodeId)) continue;\n visited.add(nodeId);\n reachablePackages.add(nodeIdWithoutPeerSuffix(nodeId));\n for (const peerId of splitPeerIds(nodeId)) {\n if (!isPatchHashSegment(peerId)) stack.push(peerId);\n }\n const edge = edgesById.get(nodeId);\n if (!edge) continue;\n reachableEdges.add(nodeId);\n if (edge.attr?.pkgId) reachablePackages.add(edge.attr.pkgId);\n for (const neighbour of edge.neighbours) {\n stack.push(neighbour.id);\n }\n }\n this.edges = [rootEdge, ...Array.from(edgesById.values()).filter((edge) => reachableEdges.has(edge.id))];\n for (const pkgId of this.packages.keys()) {\n if (!reachablePackages.has(pkgId)) {\n this.packages.delete(pkgId);\n }\n }\n }\n\n private normalizePeerProviderVersions(): void {\n const versionsByPackageName = this.collectVersionsByPackageName();\n const getBestCompatiblePeer = (name: string, range: string) =>\n versionsByPackageName\n .get(name)\n ?.find(({ version }) => semver.satisfies(version, range, { includePrerelease: true }));\n const getHighestPeer = (name: string) => versionsByPackageName.get(name)?.[0];\n const rewritePeerId = (peerId: string, peerDependencies?: Record<string, string>): string => {\n const parsedPeer = parsePkgId(peerId);\n const nestedPeerDependencies = this.packages.get(nodeIdWithoutPeerSuffix(peerId))?.peerDependencies;\n const peerIds = splitPeerIds(peerId).map((nestedPeerId) => rewritePeerId(nestedPeerId, nestedPeerDependencies));\n let rewrittenBase = nodeIdWithoutPeerSuffix(peerId);\n if (parsedPeer) {\n const range = peerDependencies?.[parsedPeer.name];\n const bestPeer = range ? getBestCompatiblePeer(parsedPeer.name, range) : getHighestPeer(parsedPeer.name);\n if (bestPeer) rewrittenBase = `${parsedPeer.name}@${bestPeer.version}`;\n }\n return `${rewrittenBase}${createPeerSuffix(peerIds)}`;\n };\n const rewritePeerDep = (\n depId: string,\n peerDependencies?: Record<string, string>,\n peerIdsByName?: Map<string, string>\n ) => {\n const peerId = peerIdsByName?.get(parsePkgId(depId)?.name ?? '');\n if (peerId) return peerId;\n if (!peerDependencies) return depId;\n const parsedDep = parsePkgId(depId);\n if (!parsedDep) return depId;\n const range = peerDependencies[parsedDep.name];\n if (!range) return depId;\n const bestPeer = getBestCompatiblePeer(parsedDep.name, range);\n if (!bestPeer) return depId;\n return `${parsedDep.name}@${bestPeer.version}`;\n };\n const rewriteNodeId = (nodeId: string) => {\n const pkgId = nodeIdWithoutPeerSuffix(nodeId);\n const peerDependencies = this.packages.get(pkgId)?.peerDependencies;\n const peerIds = splitPeerIds(nodeId);\n if (peerIds.length === 0) return nodeId;\n let changed = false;\n const rewrittenPeerIds = peerIds.map((peerId) => {\n const rewrittenPeerId = rewritePeerId(peerId, peerDependencies);\n if (rewrittenPeerId === peerId) return peerId;\n changed = true;\n return rewrittenPeerId;\n });\n if (!changed) return nodeId;\n return `${pkgId}${createPeerSuffix(rewrittenPeerIds)}`;\n };\n const rewriteNeighbour = (\n neighbour: DependencyNeighbour,\n peerDependencies?: Record<string, string>,\n peerIdsByName?: Map<string, string>\n ) => {\n const rewrittenId = rewriteNodeId(rewritePeerDep(neighbour.id, peerDependencies, peerIdsByName));\n return rewrittenId === neighbour.id ? neighbour : { ...neighbour, id: rewrittenId };\n };\n const edgesById = new Map<string, DependencyEdge>();\n for (const edge of this.edges) {\n const peerDependencies =\n edge.id === DependenciesGraph.ROOT_EDGE_ID\n ? undefined\n : this.packages.get(edge.attr?.pkgId ?? nodeIdWithoutPeerSuffix(edge.id))?.peerDependencies;\n const peerIdsByName = new Map<string, string>();\n for (const peerId of splitPeerIds(edge.id)) {\n const rewrittenPeerId = rewritePeerId(peerId, peerDependencies);\n const parsedPeer = parsePkgId(rewrittenPeerId);\n if (parsedPeer) peerIdsByName.set(parsedPeer.name, rewrittenPeerId);\n }\n const rewrittenEdge: DependencyEdge = {\n ...edge,\n id: edge.id === DependenciesGraph.ROOT_EDGE_ID ? edge.id : rewriteNodeId(edge.id),\n neighbours: edge.neighbours.map((neighbour) => rewriteNeighbour(neighbour, peerDependencies, peerIdsByName)),\n };\n const existingEdge = edgesById.get(rewrittenEdge.id);\n if (existingEdge) {\n mergeNeighbours(existingEdge.neighbours, rewrittenEdge.neighbours);\n } else {\n edgesById.set(rewrittenEdge.id, rewrittenEdge);\n }\n }\n this.edges = Array.from(edgesById.values());\n }\n\n private collectVersionsByPackageName(): Map<string, Array<{ version: string }>> {\n const versionsByPackageName = new Map<string, Array<{ version: string }>>();\n const addVersion = (pkgId: string) => {\n const parsed = parsePkgId(pkgId);\n if (!parsed || !semver.valid(parsed.version)) return;\n const versions = versionsByPackageName.get(parsed.name) ?? [];\n versions.push({ version: parsed.version });\n versionsByPackageName.set(parsed.name, versions);\n for (const peerId of splitPeerIds(pkgId)) {\n addVersion(peerId);\n }\n };\n for (const pkgId of this.packages.keys()) {\n addVersion(pkgId);\n }\n for (const edge of this.edges) {\n addVersion(edge.id);\n for (const neighbour of edge.neighbours) {\n addVersion(neighbour.id);\n }\n }\n for (const versions of versionsByPackageName.values()) {\n versions.sort((version1, version2) => semver.rcompare(version1.version, version2.version));\n }\n return versionsByPackageName;\n }\n}\n\n/**\n * The merged graph mixes resolutions from both graphs. It can only claim a set\n * of readPackage hooks when both were resolved with the same ones; otherwise\n * it is left unset, so pnpm resolves again instead of trusting it. A graph\n * without resolutions has nothing to vouch for, so it doesn't count.\n */\nfunction mergePnpmfileChecksums(graph1: DependenciesGraph, graph2: DependenciesGraph): string | undefined {\n if (!graph2.hasResolutions()) return graph1.pnpmfileChecksum;\n if (!graph1.hasResolutions()) return graph2.pnpmfileChecksum;\n return graph1.pnpmfileChecksum === graph2.pnpmfileChecksum ? graph1.pnpmfileChecksum : undefined;\n}\n\nfunction isSameDirectDependency(dep1: DependencyNeighbour, dep2: DependencyNeighbour): boolean {\n if (!dep1.name || !dep2.name) return dep1.id === dep2.id;\n if (dep1.name !== dep2.name) return false;\n return (\n dep1.specifier === dep2.specifier || isWildcardSpecifier(dep1.specifier) || isWildcardSpecifier(dep2.specifier)\n );\n}\n\nfunction isWildcardSpecifier(specifier?: string): boolean {\n return specifier === '*' || specifier == null || specifier === '';\n}\n\nfunction nodeIdLessThan(nodeId1: string, nodeId2: string): boolean {\n const version1 = getVersionFromNodeId(nodeId1);\n if (!version1) return false;\n const version2 = getVersionFromNodeId(nodeId2);\n if (!version2) return false;\n return semver.lt(version1, version2);\n}\n\nfunction mergeNeighbours(existingNeighbours: DependencyNeighbour[], newNeighbours: DependencyNeighbour[]): void {\n for (const newNeighbour of newNeighbours) {\n const existingNeighbour = existingNeighbours.find((neighbour) => neighbour.id === newNeighbour.id);\n if (!existingNeighbour) existingNeighbours.push(newNeighbour);\n }\n}\n\nfunction parsePkgId(pkgId: string): { name: string; version: string } | undefined {\n const depPathWithoutPeerSuffix = nodeIdWithoutPeerSuffix(pkgId);\n const versionStart = depPathWithoutPeerSuffix.lastIndexOf('@');\n if (versionStart <= 0) return undefined;\n const name = depPathWithoutPeerSuffix.slice(0, versionStart);\n const version = depPathWithoutPeerSuffix.slice(versionStart + 1);\n if (!name || !version) return undefined;\n return { name, version };\n}\n\nfunction splitPeerIds(nodeId: string): string[] {\n const suffixStart = nodeId.indexOf('(');\n if (suffixStart === -1) return [];\n const peerIds: string[] = [];\n let depth = 0;\n let peerStart: number | undefined;\n for (let index = suffixStart; index < nodeId.length; index += 1) {\n const char = nodeId[index];\n if (char === '(') {\n if (depth === 0) peerStart = index + 1;\n depth += 1;\n } else if (char === ')') {\n depth -= 1;\n if (depth === 0 && peerStart != null) {\n peerIds.push(nodeId.slice(peerStart, index));\n peerStart = undefined;\n }\n }\n }\n return peerIds;\n}\n\nfunction createPeerSuffix(peerIds: string[]): string {\n const patchSegments = peerIds.filter(isPatchHashSegment);\n const peerSegments = peerIds.filter((peerId) => !isPatchHashSegment(peerId)).sort();\n return [...patchSegments, ...peerSegments].map((peerId) => `(${peerId})`).join('');\n}\n\nfunction isPatchHashSegment(segment: string): boolean {\n return segment.startsWith('patch_hash=');\n}\n\nfunction getVersionFromNodeId(nodeId: string): string | undefined {\n const depPathWithoutPeerSuffix = nodeIdWithoutPeerSuffix(nodeId);\n const versionStart = depPathWithoutPeerSuffix.lastIndexOf('@');\n if (versionStart === -1) return undefined;\n const version = depPathWithoutPeerSuffix.slice(versionStart + 1);\n return semver.valid(version) ?? semver.coerce(version)?.version;\n}\n\nfunction nodeIdWithoutPeerSuffix(nodeId: string): string {\n const suffixStart = nodeId.indexOf('(');\n return suffixStart === -1 ? nodeId : nodeId.slice(0, suffixStart);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_semver","data","_interopRequireDefault","require","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","DEPENDENCIES_GRAPH_SCHEMA_VERSION","READ_PACKAGE_HOOKS_CHECKSUM","READ_PACKAGE_HOOKS_OVERRIDES","DependenciesGraph","constructor","packages","edges","schemaVersion","pnpmfileChecksum","lockfileSettings","overrides","serialize","JSON","stringify","fromEntries","entries","deserialize","parsed","parse","undefined","Map","merge","graph","mergePnpmfileChecksums","mergeLockfileSettings","mergeOverrides","rootEdge","findRootEdge","incomingRootEdge","directDependencies","neighbours","directDep","existingDirectDep","find","existingDep","isSameDirectDependency","isWildcardSpecifier","specifier","id","nodeIdLessThan","newPkgId","newPkgAttr","set","ROOT_EDGE_ID","normalizePeerProviderVersions","pruneUnreachableFromRoot","isEmpty","size","hasResolutions","some","edgesById","edge","reachableEdges","Set","reachablePackages","visited","stack","map","neighbour","nodeId","pop","has","add","nodeIdWithoutPeerSuffix","peerId","splitPeerIds","isPatchHashSegment","get","attr","pkgId","Array","from","values","delete","versionsByPackageName","collectVersionsByPackageName","getBestCompatiblePeer","name","range","version","semver","satisfies","includePrerelease","getHighestPeer","rewritePeerId","peerDependencies","parsedPeer","parsePkgId","nestedPeerDependencies","peerIds","nestedPeerId","rewrittenBase","bestPeer","createPeerSuffix","rewritePeerDep","depId","peerIdsByName","parsedDep","rewriteNodeId","changed","rewrittenPeerIds","rewrittenPeerId","rewriteNeighbour","rewrittenId","rewrittenEdge","existingEdge","mergeNeighbours","addVersion","valid","versions","sort","version1","version2","rcompare","exports","graph1","graph2","sameRecords","record1","record2","every","key","dep1","dep2","nodeId1","nodeId2","getVersionFromNodeId","lt","existingNeighbours","newNeighbours","newNeighbour","existingNeighbour","depPathWithoutPeerSuffix","versionStart","lastIndexOf","slice","suffixStart","indexOf","depth","peerStart","index","char","patchSegments","peerSegments","join","segment","startsWith","coerce"],"sources":["dependencies-graph.ts"],"sourcesContent":["import semver from 'semver';\nimport type { LockfilePackageInfo, LockfileSettings } from '@pnpm/lockfile.types';\n\nexport type PackagesMap = Map<string, PackageAttributes>;\n\nexport type PackageAttributes = LockfilePackageInfo & {\n component?: {\n scope: string;\n name: string;\n };\n requiresBuild?: boolean;\n};\n\nexport type DependencyEdge = {\n id: string;\n neighbours: DependencyNeighbour[];\n attr?: {\n pkgId?: string;\n transitivePeerDependencies?: string[];\n };\n};\n\nexport type DependencyNeighbour = {\n id: string;\n /**\n * This is true when the dependency is from optionalDependencies.\n */\n optional?: boolean;\n name?: string;\n specifier?: string;\n lifecycle?: 'runtime' | 'dev';\n};\n\nconst DEPENDENCIES_GRAPH_SCHEMA_VERSION = '2.0';\n\n/**\n * The `pnpmfileChecksum` of graphs resolved with Bit's readPackage hooks. Those\n * hooks removed `@teambit/legacy` and `@teambit/harmony` from every dependency.\n * Bit now passes no hooks and removes them with the overrides below instead\n * (`removedCoreDependencyOverrides` in the pnpm aspect), so such a graph holds\n * the resolution those overrides produce. A workspace that forced a harmony\n * version kept harmony, but it also recorded a harmony override, which no\n * restored lockfile carried, so its graphs were never reused either way.\n */\nconst READ_PACKAGE_HOOKS_CHECKSUM = 'bit-1';\nconst READ_PACKAGE_HOOKS_OVERRIDES: Record<string, string> = {\n '@teambit/legacy@*': '-',\n '@teambit/harmony@*': '-',\n};\n\nexport class DependenciesGraph {\n static ROOT_EDGE_ID = '.';\n\n schemaVersion: string;\n packages: PackagesMap;\n edges: DependencyEdge[];\n /**\n * The `pnpmfileChecksum` of the lockfile the graph was created from: an id of\n * the readPackage hooks the dependencies were resolved with. A lockfile\n * restored from the graph carries it, so pnpm trusts the restored resolution\n * only while Bit's hooks are still the same. Graphs created before this field\n * existed don't have it.\n */\n pnpmfileChecksum?: string;\n /**\n * The `settings` block of the lockfile the graph was created from: the\n * resolution settings (dedupePeers, injectWorkspacePackages, ...) the\n * dependencies were resolved under. A lockfile restored from the graph\n * carries them, so pnpm can install the restored resolution without\n * resolving again while the install's settings still match. Graphs created\n * before this field existed don't have it, and pnpm resolves them again.\n */\n lockfileSettings?: LockfileSettings;\n /**\n * The `overrides` of the lockfile the graph was created from. A lockfile\n * restored from the graph carries them, so pnpm trusts the restored\n * resolution only while the install's overrides are the same.\n */\n overrides?: Record<string, string>;\n\n constructor({\n packages,\n edges,\n schemaVersion,\n pnpmfileChecksum,\n lockfileSettings,\n overrides,\n }: {\n packages: PackagesMap;\n edges: DependencyEdge[];\n schemaVersion?: string;\n pnpmfileChecksum?: string;\n lockfileSettings?: LockfileSettings;\n overrides?: Record<string, string>;\n }) {\n this.packages = packages;\n this.edges = edges;\n this.schemaVersion = schemaVersion ?? DEPENDENCIES_GRAPH_SCHEMA_VERSION;\n if (pnpmfileChecksum === READ_PACKAGE_HOOKS_CHECKSUM && overrides == null) {\n this.overrides = { ...READ_PACKAGE_HOOKS_OVERRIDES };\n } else {\n this.pnpmfileChecksum = pnpmfileChecksum;\n this.overrides = overrides;\n }\n this.lockfileSettings = lockfileSettings;\n }\n\n serialize(): string {\n return JSON.stringify({\n schemaVersion: this.schemaVersion,\n packages: Object.fromEntries(this.packages.entries()),\n edges: this.edges,\n // JSON.stringify omits these when undefined.\n pnpmfileChecksum: this.pnpmfileChecksum,\n lockfileSettings: this.lockfileSettings,\n overrides: this.overrides,\n });\n }\n\n static deserialize(data: string): DependenciesGraph | undefined {\n const parsed = JSON.parse(data);\n // If the schema version is not supported, then we just ignore the data\n if (parsed.schemaVersion !== DEPENDENCIES_GRAPH_SCHEMA_VERSION) {\n return undefined;\n }\n return new DependenciesGraph({\n schemaVersion: parsed.schemaVersion,\n edges: parsed.edges,\n packages: new Map(Object.entries(parsed.packages)),\n pnpmfileChecksum: parsed.pnpmfileChecksum,\n lockfileSettings: parsed.lockfileSettings,\n overrides: parsed.overrides,\n });\n }\n\n merge(graph: DependenciesGraph): void {\n this.pnpmfileChecksum = mergePnpmfileChecksums(this, graph);\n this.lockfileSettings = mergeLockfileSettings(this, graph);\n this.overrides = mergeOverrides(this, graph);\n const rootEdge = this.findRootEdge();\n const incomingRootEdge = graph.findRootEdge();\n const directDependencies = incomingRootEdge?.neighbours;\n if (directDependencies && rootEdge) {\n for (const directDep of directDependencies) {\n const existingDirectDep = rootEdge.neighbours.find((existingDep) =>\n isSameDirectDependency(existingDep, directDep)\n );\n if (existingDirectDep == null) {\n rootEdge.neighbours.push(directDep);\n } else {\n if (isWildcardSpecifier(existingDirectDep.specifier) && !isWildcardSpecifier(directDep.specifier)) {\n existingDirectDep.specifier = directDep.specifier;\n }\n if (existingDirectDep.id !== directDep.id && nodeIdLessThan(existingDirectDep.id, directDep.id)) {\n existingDirectDep.id = directDep.id;\n }\n }\n }\n } else if (incomingRootEdge) {\n this.edges.push(incomingRootEdge);\n }\n for (const [newPkgId, newPkgAttr] of graph.packages.entries()) {\n this.packages.set(newPkgId, newPkgAttr);\n }\n this.edges.push(...graph.edges.filter(({ id }) => id !== DependenciesGraph.ROOT_EDGE_ID));\n this.normalizePeerProviderVersions();\n this.pruneUnreachableFromRoot();\n }\n\n isEmpty(): boolean {\n return this.packages.size === 0 && this.edges.length === 0;\n }\n\n /**\n * Whether the graph holds any resolved dependency. A component without\n * dependencies has only an empty root edge.\n */\n hasResolutions(): boolean {\n return (\n this.packages.size > 0 ||\n this.edges.some(({ id, neighbours }) => id !== DependenciesGraph.ROOT_EDGE_ID || neighbours.length > 0)\n );\n }\n\n /**\n * Returns the edge related to the root component\n */\n findRootEdge(): DependencyEdge | undefined {\n return this.edges.find(({ id }) => id === DependenciesGraph.ROOT_EDGE_ID);\n }\n\n private pruneUnreachableFromRoot(): void {\n const rootEdge = this.findRootEdge();\n if (!rootEdge) return;\n const edgesById = new Map<string, DependencyEdge>();\n for (const edge of this.edges) {\n if (edge.id !== DependenciesGraph.ROOT_EDGE_ID) {\n edgesById.set(edge.id, edge);\n }\n }\n const reachableEdges = new Set<string>();\n const reachablePackages = new Set<string>();\n // An explicit stack: deep dependency chains would overflow the call\n // stack with a recursive walk. Every node id is processed once — the\n // guard must sit before the suffix pushes, or a node referenced by M\n // edges re-pushes its suffix ids M times and nested suffixes multiply\n // that per level.\n const visited = new Set<string>();\n const stack = rootEdge.neighbours.map((neighbour) => neighbour.id);\n while (stack.length > 0) {\n const nodeId = stack.pop()!;\n if (visited.has(nodeId)) continue;\n visited.add(nodeId);\n reachablePackages.add(nodeIdWithoutPeerSuffix(nodeId));\n for (const peerId of splitPeerIds(nodeId)) {\n if (!isPatchHashSegment(peerId)) stack.push(peerId);\n }\n const edge = edgesById.get(nodeId);\n if (!edge) continue;\n reachableEdges.add(nodeId);\n if (edge.attr?.pkgId) reachablePackages.add(edge.attr.pkgId);\n for (const neighbour of edge.neighbours) {\n stack.push(neighbour.id);\n }\n }\n this.edges = [rootEdge, ...Array.from(edgesById.values()).filter((edge) => reachableEdges.has(edge.id))];\n for (const pkgId of this.packages.keys()) {\n if (!reachablePackages.has(pkgId)) {\n this.packages.delete(pkgId);\n }\n }\n }\n\n private normalizePeerProviderVersions(): void {\n const versionsByPackageName = this.collectVersionsByPackageName();\n const getBestCompatiblePeer = (name: string, range: string) =>\n versionsByPackageName\n .get(name)\n ?.find(({ version }) => semver.satisfies(version, range, { includePrerelease: true }));\n const getHighestPeer = (name: string) => versionsByPackageName.get(name)?.[0];\n const rewritePeerId = (peerId: string, peerDependencies?: Record<string, string>): string => {\n const parsedPeer = parsePkgId(peerId);\n const nestedPeerDependencies = this.packages.get(nodeIdWithoutPeerSuffix(peerId))?.peerDependencies;\n const peerIds = splitPeerIds(peerId).map((nestedPeerId) => rewritePeerId(nestedPeerId, nestedPeerDependencies));\n let rewrittenBase = nodeIdWithoutPeerSuffix(peerId);\n if (parsedPeer) {\n const range = peerDependencies?.[parsedPeer.name];\n const bestPeer = range ? getBestCompatiblePeer(parsedPeer.name, range) : getHighestPeer(parsedPeer.name);\n if (bestPeer) rewrittenBase = `${parsedPeer.name}@${bestPeer.version}`;\n }\n return `${rewrittenBase}${createPeerSuffix(peerIds)}`;\n };\n const rewritePeerDep = (\n depId: string,\n peerDependencies?: Record<string, string>,\n peerIdsByName?: Map<string, string>\n ) => {\n const peerId = peerIdsByName?.get(parsePkgId(depId)?.name ?? '');\n if (peerId) return peerId;\n if (!peerDependencies) return depId;\n const parsedDep = parsePkgId(depId);\n if (!parsedDep) return depId;\n const range = peerDependencies[parsedDep.name];\n if (!range) return depId;\n const bestPeer = getBestCompatiblePeer(parsedDep.name, range);\n if (!bestPeer) return depId;\n return `${parsedDep.name}@${bestPeer.version}`;\n };\n const rewriteNodeId = (nodeId: string) => {\n const pkgId = nodeIdWithoutPeerSuffix(nodeId);\n const peerDependencies = this.packages.get(pkgId)?.peerDependencies;\n const peerIds = splitPeerIds(nodeId);\n if (peerIds.length === 0) return nodeId;\n let changed = false;\n const rewrittenPeerIds = peerIds.map((peerId) => {\n const rewrittenPeerId = rewritePeerId(peerId, peerDependencies);\n if (rewrittenPeerId === peerId) return peerId;\n changed = true;\n return rewrittenPeerId;\n });\n if (!changed) return nodeId;\n return `${pkgId}${createPeerSuffix(rewrittenPeerIds)}`;\n };\n const rewriteNeighbour = (\n neighbour: DependencyNeighbour,\n peerDependencies?: Record<string, string>,\n peerIdsByName?: Map<string, string>\n ) => {\n const rewrittenId = rewriteNodeId(rewritePeerDep(neighbour.id, peerDependencies, peerIdsByName));\n return rewrittenId === neighbour.id ? neighbour : { ...neighbour, id: rewrittenId };\n };\n const edgesById = new Map<string, DependencyEdge>();\n for (const edge of this.edges) {\n const peerDependencies =\n edge.id === DependenciesGraph.ROOT_EDGE_ID\n ? undefined\n : this.packages.get(edge.attr?.pkgId ?? nodeIdWithoutPeerSuffix(edge.id))?.peerDependencies;\n const peerIdsByName = new Map<string, string>();\n for (const peerId of splitPeerIds(edge.id)) {\n const rewrittenPeerId = rewritePeerId(peerId, peerDependencies);\n const parsedPeer = parsePkgId(rewrittenPeerId);\n if (parsedPeer) peerIdsByName.set(parsedPeer.name, rewrittenPeerId);\n }\n const rewrittenEdge: DependencyEdge = {\n ...edge,\n id: edge.id === DependenciesGraph.ROOT_EDGE_ID ? edge.id : rewriteNodeId(edge.id),\n neighbours: edge.neighbours.map((neighbour) => rewriteNeighbour(neighbour, peerDependencies, peerIdsByName)),\n };\n const existingEdge = edgesById.get(rewrittenEdge.id);\n if (existingEdge) {\n mergeNeighbours(existingEdge.neighbours, rewrittenEdge.neighbours);\n } else {\n edgesById.set(rewrittenEdge.id, rewrittenEdge);\n }\n }\n this.edges = Array.from(edgesById.values());\n }\n\n private collectVersionsByPackageName(): Map<string, Array<{ version: string }>> {\n const versionsByPackageName = new Map<string, Array<{ version: string }>>();\n const addVersion = (pkgId: string) => {\n const parsed = parsePkgId(pkgId);\n if (!parsed || !semver.valid(parsed.version)) return;\n const versions = versionsByPackageName.get(parsed.name) ?? [];\n versions.push({ version: parsed.version });\n versionsByPackageName.set(parsed.name, versions);\n for (const peerId of splitPeerIds(pkgId)) {\n addVersion(peerId);\n }\n };\n for (const pkgId of this.packages.keys()) {\n addVersion(pkgId);\n }\n for (const edge of this.edges) {\n addVersion(edge.id);\n for (const neighbour of edge.neighbours) {\n addVersion(neighbour.id);\n }\n }\n for (const versions of versionsByPackageName.values()) {\n versions.sort((version1, version2) => semver.rcompare(version1.version, version2.version));\n }\n return versionsByPackageName;\n }\n}\n\n/**\n * The merged graph mixes resolutions from both graphs. It can only claim a set\n * of readPackage hooks when both were resolved with the same ones; otherwise\n * it is left unset, so pnpm resolves again instead of trusting it. A graph\n * without resolutions has nothing to vouch for, so it doesn't count.\n */\nfunction mergePnpmfileChecksums(graph1: DependenciesGraph, graph2: DependenciesGraph): string | undefined {\n if (!graph2.hasResolutions()) return graph1.pnpmfileChecksum;\n if (!graph1.hasResolutions()) return graph2.pnpmfileChecksum;\n return graph1.pnpmfileChecksum === graph2.pnpmfileChecksum ? graph1.pnpmfileChecksum : undefined;\n}\n\n/**\n * A merged graph mixes resolutions from both graphs, so it can only claim the\n * settings both were resolved under.\n */\nfunction mergeLockfileSettings(graph1: DependenciesGraph, graph2: DependenciesGraph): LockfileSettings | undefined {\n if (!graph2.hasResolutions()) return graph1.lockfileSettings;\n if (!graph1.hasResolutions()) return graph2.lockfileSettings;\n return sameRecords(graph1.lockfileSettings, graph2.lockfileSettings) ? graph1.lockfileSettings : undefined;\n}\n\n/**\n * A merged graph mixes resolutions from both graphs, so it can only claim the\n * overrides both were resolved with.\n */\nfunction mergeOverrides(graph1: DependenciesGraph, graph2: DependenciesGraph): Record<string, string> | undefined {\n if (!graph2.hasResolutions()) return graph1.overrides;\n if (!graph1.hasResolutions()) return graph2.overrides;\n return sameRecords(graph1.overrides, graph2.overrides) ? graph1.overrides : undefined;\n}\n\nfunction sameRecords(record1?: object, record2?: object): boolean {\n if (record1 == null || record2 == null) return record1 === record2;\n const keys = new Set([...Object.keys(record1), ...Object.keys(record2)]);\n return [...keys].every((key) => record1[key] === record2[key]);\n}\n\nfunction isSameDirectDependency(dep1: DependencyNeighbour, dep2: DependencyNeighbour): boolean {\n if (!dep1.name || !dep2.name) return dep1.id === dep2.id;\n if (dep1.name !== dep2.name) return false;\n return (\n dep1.specifier === dep2.specifier || isWildcardSpecifier(dep1.specifier) || isWildcardSpecifier(dep2.specifier)\n );\n}\n\nfunction isWildcardSpecifier(specifier?: string): boolean {\n return specifier === '*' || specifier == null || specifier === '';\n}\n\nfunction nodeIdLessThan(nodeId1: string, nodeId2: string): boolean {\n const version1 = getVersionFromNodeId(nodeId1);\n if (!version1) return false;\n const version2 = getVersionFromNodeId(nodeId2);\n if (!version2) return false;\n return semver.lt(version1, version2);\n}\n\nfunction mergeNeighbours(existingNeighbours: DependencyNeighbour[], newNeighbours: DependencyNeighbour[]): void {\n for (const newNeighbour of newNeighbours) {\n const existingNeighbour = existingNeighbours.find((neighbour) => neighbour.id === newNeighbour.id);\n if (!existingNeighbour) existingNeighbours.push(newNeighbour);\n }\n}\n\nfunction parsePkgId(pkgId: string): { name: string; version: string } | undefined {\n const depPathWithoutPeerSuffix = nodeIdWithoutPeerSuffix(pkgId);\n const versionStart = depPathWithoutPeerSuffix.lastIndexOf('@');\n if (versionStart <= 0) return undefined;\n const name = depPathWithoutPeerSuffix.slice(0, versionStart);\n const version = depPathWithoutPeerSuffix.slice(versionStart + 1);\n if (!name || !version) return undefined;\n return { name, version };\n}\n\nfunction splitPeerIds(nodeId: string): string[] {\n const suffixStart = nodeId.indexOf('(');\n if (suffixStart === -1) return [];\n const peerIds: string[] = [];\n let depth = 0;\n let peerStart: number | undefined;\n for (let index = suffixStart; index < nodeId.length; index += 1) {\n const char = nodeId[index];\n if (char === '(') {\n if (depth === 0) peerStart = index + 1;\n depth += 1;\n } else if (char === ')') {\n depth -= 1;\n if (depth === 0 && peerStart != null) {\n peerIds.push(nodeId.slice(peerStart, index));\n peerStart = undefined;\n }\n }\n }\n return peerIds;\n}\n\nfunction createPeerSuffix(peerIds: string[]): string {\n const patchSegments = peerIds.filter(isPatchHashSegment);\n const peerSegments = peerIds.filter((peerId) => !isPatchHashSegment(peerId)).sort();\n return [...patchSegments, ...peerSegments].map((peerId) => `(${peerId})`).join('');\n}\n\nfunction isPatchHashSegment(segment: string): boolean {\n return segment.startsWith('patch_hash=');\n}\n\nfunction getVersionFromNodeId(nodeId: string): string | undefined {\n const depPathWithoutPeerSuffix = nodeIdWithoutPeerSuffix(nodeId);\n const versionStart = depPathWithoutPeerSuffix.lastIndexOf('@');\n if (versionStart === -1) return undefined;\n const version = depPathWithoutPeerSuffix.slice(versionStart + 1);\n return semver.valid(version) ?? semver.coerce(version)?.version;\n}\n\nfunction nodeIdWithoutPeerSuffix(nodeId: string): string {\n const suffixStart = nodeId.indexOf('(');\n return suffixStart === -1 ? nodeId : nodeId.slice(0, suffixStart);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -14,6 +14,11 @@ function _dependenciesGraph() {
14
14
  };
15
15
  return data;
16
16
  }
17
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
18
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
19
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
20
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
21
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
17
22
  describe('DependenciesGraph.merge', () => {
18
23
  it('adopts the more specific specifier when a wildcard direct dep merges with a manifest spec', () => {
19
24
  const base = createGraph([rootEdge([{
@@ -102,9 +107,9 @@ describe('DependenciesGraph.merge', () => {
102
107
  describe('DependenciesGraph pnpmfileChecksum', () => {
103
108
  it('survives serialize and deserialize', () => {
104
109
  const graph = createGraph([rootEdge([])], []);
105
- graph.pnpmfileChecksum = 'bit-1';
110
+ graph.pnpmfileChecksum = 'hooks-1';
106
111
  const restored = _dependenciesGraph().DependenciesGraph.deserialize(graph.serialize());
107
- (0, _chai().expect)(restored?.pnpmfileChecksum).to.equal('bit-1');
112
+ (0, _chai().expect)(restored?.pnpmfileChecksum).to.equal('hooks-1');
108
113
  });
109
114
  it('is omitted from the serialized graph when unset', () => {
110
115
  const graph = createGraph([rootEdge([])], []);
@@ -124,11 +129,11 @@ describe('DependenciesGraph pnpmfileChecksum', () => {
124
129
  });
125
130
  it('is kept by merge when both graphs have the same value', () => {
126
131
  const base = createGraph([rootEdge([])], []);
127
- base.pnpmfileChecksum = 'bit-1';
132
+ base.pnpmfileChecksum = 'hooks-1';
128
133
  const incoming = createGraph([rootEdge([])], []);
129
- incoming.pnpmfileChecksum = 'bit-1';
134
+ incoming.pnpmfileChecksum = 'hooks-1';
130
135
  base.merge(incoming);
131
- (0, _chai().expect)(base.pnpmfileChecksum).to.equal('bit-1');
136
+ (0, _chai().expect)(base.pnpmfileChecksum).to.equal('hooks-1');
132
137
  });
133
138
  it('is dropped by merge when the graphs have different values', () => {
134
139
  const base = createGraph([rootEdge([{
@@ -136,13 +141,13 @@ describe('DependenciesGraph pnpmfileChecksum', () => {
136
141
  name: 'foo',
137
142
  specifier: '1.0.0'
138
143
  }])], ['foo@1.0.0']);
139
- base.pnpmfileChecksum = 'bit-1';
144
+ base.pnpmfileChecksum = 'hooks-1';
140
145
  const incoming = createGraph([rootEdge([{
141
146
  id: 'bar@1.0.0',
142
147
  name: 'bar',
143
148
  specifier: '1.0.0'
144
149
  }])], ['bar@1.0.0']);
145
- incoming.pnpmfileChecksum = 'bit-2';
150
+ incoming.pnpmfileChecksum = 'hooks-2';
146
151
  base.merge(incoming);
147
152
  (0, _chai().expect)(base.pnpmfileChecksum).to.equal(undefined);
148
153
  });
@@ -152,7 +157,7 @@ describe('DependenciesGraph pnpmfileChecksum', () => {
152
157
  name: 'foo',
153
158
  specifier: '1.0.0'
154
159
  }])], ['foo@1.0.0']);
155
- base.pnpmfileChecksum = 'bit-1';
160
+ base.pnpmfileChecksum = 'hooks-1';
156
161
  base.merge(createGraph([rootEdge([{
157
162
  id: 'bar@1.0.0',
158
163
  name: 'bar',
@@ -166,9 +171,9 @@ describe('DependenciesGraph pnpmfileChecksum', () => {
166
171
  name: 'foo',
167
172
  specifier: '1.0.0'
168
173
  }])], ['foo@1.0.0']);
169
- base.pnpmfileChecksum = 'bit-1';
174
+ base.pnpmfileChecksum = 'hooks-1';
170
175
  base.merge(createGraph([rootEdge([])], []));
171
- (0, _chai().expect)(base.pnpmfileChecksum).to.equal('bit-1');
176
+ (0, _chai().expect)(base.pnpmfileChecksum).to.equal('hooks-1');
172
177
  });
173
178
  it('is taken from the incoming graph when the base has no dependencies', () => {
174
179
  const base = createGraph([rootEdge([])], []);
@@ -177,9 +182,9 @@ describe('DependenciesGraph pnpmfileChecksum', () => {
177
182
  name: 'foo',
178
183
  specifier: '1.0.0'
179
184
  }])], ['foo@1.0.0']);
180
- incoming.pnpmfileChecksum = 'bit-1';
185
+ incoming.pnpmfileChecksum = 'hooks-1';
181
186
  base.merge(incoming);
182
- (0, _chai().expect)(base.pnpmfileChecksum).to.equal('bit-1');
187
+ (0, _chai().expect)(base.pnpmfileChecksum).to.equal('hooks-1');
183
188
  });
184
189
  });
185
190
  function createGraph(edges, packageIds) {
@@ -201,5 +206,131 @@ function edge(id, neighbours = []) {
201
206
  neighbours
202
207
  };
203
208
  }
209
+ describe('DependenciesGraph overrides', () => {
210
+ const overrides = {
211
+ '@teambit/legacy@*': '-',
212
+ react: '19.1.0'
213
+ };
214
+ it('survives serialize and deserialize', () => {
215
+ const graph = createGraph([rootEdge([])], []);
216
+ graph.overrides = overrides;
217
+ (0, _chai().expect)(_dependenciesGraph().DependenciesGraph.deserialize(graph.serialize())?.overrides).to.eql(overrides);
218
+ });
219
+ it("stand in for the checksum of Bit's readPackage hooks, which the overrides replaced", () => {
220
+ const restored = _dependenciesGraph().DependenciesGraph.deserialize(JSON.stringify({
221
+ schemaVersion: '2.0',
222
+ packages: {},
223
+ edges: [rootEdge([])],
224
+ pnpmfileChecksum: 'bit-1'
225
+ }));
226
+ (0, _chai().expect)(restored?.pnpmfileChecksum).to.equal(undefined);
227
+ (0, _chai().expect)(restored?.overrides).to.eql({
228
+ '@teambit/legacy@*': '-',
229
+ '@teambit/harmony@*': '-'
230
+ });
231
+ });
232
+ it('are kept by merge when both graphs have the same ones', () => {
233
+ const base = createGraph([rootEdge([{
234
+ id: 'foo@1.0.0',
235
+ name: 'foo',
236
+ specifier: '1.0.0'
237
+ }])], ['foo@1.0.0']);
238
+ base.overrides = overrides;
239
+ const incoming = createGraph([rootEdge([{
240
+ id: 'bar@1.0.0',
241
+ name: 'bar',
242
+ specifier: '1.0.0'
243
+ }])], ['bar@1.0.0']);
244
+ incoming.overrides = _objectSpread({}, overrides);
245
+ base.merge(incoming);
246
+ (0, _chai().expect)(base.overrides).to.eql(overrides);
247
+ });
248
+ it('are dropped by merge when the graphs have different ones', () => {
249
+ const base = createGraph([rootEdge([{
250
+ id: 'foo@1.0.0',
251
+ name: 'foo',
252
+ specifier: '1.0.0'
253
+ }])], ['foo@1.0.0']);
254
+ base.overrides = overrides;
255
+ const incoming = createGraph([rootEdge([{
256
+ id: 'bar@1.0.0',
257
+ name: 'bar',
258
+ specifier: '1.0.0'
259
+ }])], ['bar@1.0.0']);
260
+ incoming.overrides = _objectSpread(_objectSpread({}, overrides), {}, {
261
+ react: '18.3.1'
262
+ });
263
+ base.merge(incoming);
264
+ (0, _chai().expect)(base.overrides).to.equal(undefined);
265
+ });
266
+ });
267
+ describe('DependenciesGraph lockfileSettings', () => {
268
+ const settings = {
269
+ autoInstallPeers: true,
270
+ dedupePeers: true,
271
+ injectWorkspacePackages: true
272
+ };
273
+ it('survives serialize and deserialize', () => {
274
+ const graph = createGraph([rootEdge([])], []);
275
+ graph.lockfileSettings = settings;
276
+ (0, _chai().expect)(_dependenciesGraph().DependenciesGraph.deserialize(graph.serialize())?.lockfileSettings).to.eql(settings);
277
+ });
278
+ it('is unset on a graph serialized before the field existed', () => {
279
+ const restored = _dependenciesGraph().DependenciesGraph.deserialize(JSON.stringify({
280
+ schemaVersion: '2.0',
281
+ packages: {},
282
+ edges: [rootEdge([])]
283
+ }));
284
+ (0, _chai().expect)(restored?.lockfileSettings).to.equal(undefined);
285
+ });
286
+ it('is kept by merge when both graphs were resolved under the same settings', () => {
287
+ const base = createGraph([rootEdge([{
288
+ id: 'foo@1.0.0',
289
+ name: 'foo',
290
+ specifier: '1.0.0'
291
+ }])], ['foo@1.0.0']);
292
+ base.lockfileSettings = settings;
293
+ const incoming = createGraph([rootEdge([{
294
+ id: 'bar@1.0.0',
295
+ name: 'bar',
296
+ specifier: '1.0.0'
297
+ }])], ['bar@1.0.0']);
298
+ incoming.lockfileSettings = _objectSpread({}, settings);
299
+ base.merge(incoming);
300
+ (0, _chai().expect)(base.lockfileSettings).to.eql(settings);
301
+ });
302
+ it('is dropped by merge when the graphs were resolved under different settings', () => {
303
+ const base = createGraph([rootEdge([{
304
+ id: 'foo@1.0.0',
305
+ name: 'foo',
306
+ specifier: '1.0.0'
307
+ }])], ['foo@1.0.0']);
308
+ base.lockfileSettings = settings;
309
+ const incoming = createGraph([rootEdge([{
310
+ id: 'bar@1.0.0',
311
+ name: 'bar',
312
+ specifier: '1.0.0'
313
+ }])], ['bar@1.0.0']);
314
+ incoming.lockfileSettings = _objectSpread(_objectSpread({}, settings), {}, {
315
+ dedupePeers: false
316
+ });
317
+ base.merge(incoming);
318
+ (0, _chai().expect)(base.lockfileSettings).to.equal(undefined);
319
+ });
320
+ it('is dropped by merge when only one graph has them', () => {
321
+ const base = createGraph([rootEdge([{
322
+ id: 'foo@1.0.0',
323
+ name: 'foo',
324
+ specifier: '1.0.0'
325
+ }])], ['foo@1.0.0']);
326
+ base.lockfileSettings = settings;
327
+ base.merge(createGraph([rootEdge([{
328
+ id: 'bar@1.0.0',
329
+ name: 'bar',
330
+ specifier: '1.0.0'
331
+ }])], ['bar@1.0.0']));
332
+ (0, _chai().expect)(base.lockfileSettings).to.equal(undefined);
333
+ });
334
+ });
204
335
 
205
336
  //# sourceMappingURL=dependencies-graph.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_chai","data","require","_dependenciesGraph","describe","it","base","createGraph","rootEdge","id","name","specifier","edge","incoming","merge","foo","findRootEdge","neighbours","find","neighbour","expect","to","equal","packages","set","peerDependencies","typescript","plugin","has","bar","depth","edges","packageIds","i","push","graph","size","pnpmfileChecksum","restored","DependenciesGraph","deserialize","serialize","JSON","parse","not","have","property","stringify","schemaVersion","undefined","Map","map","ROOT_EDGE_ID"],"sources":["dependencies-graph.spec.ts"],"sourcesContent":["import { expect } from 'chai';\nimport type { DependencyEdge, PackagesMap } from './dependencies-graph';\nimport { DependenciesGraph } from './dependencies-graph';\n\ndescribe('DependenciesGraph.merge', () => {\n it('adopts the more specific specifier when a wildcard direct dep merges with a manifest spec', () => {\n const base = createGraph(\n [rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '*' }]), edge('foo@1.0.0')],\n ['foo@1.0.0']\n );\n const incoming = createGraph(\n [rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '^1.0.0' }]), edge('foo@1.0.0')],\n ['foo@1.0.0']\n );\n\n base.merge(incoming);\n\n const foo = base.findRootEdge()?.neighbours.find((neighbour) => neighbour.name === 'foo');\n expect(foo?.specifier).to.equal('^1.0.0');\n });\n\n it('rewrites nested peer providers within their parent provider peer ranges', () => {\n const base = createGraph(\n [\n rootEdge([{ id: 'plugin@1.0.0(parser@1.0.0(typescript@5.0.0))', name: 'plugin', specifier: '1.0.0' }]),\n edge('plugin@1.0.0(parser@1.0.0(typescript@5.0.0))'),\n edge('parser@1.0.0(typescript@5.0.0)'),\n edge('typescript@5.0.0'),\n ],\n ['plugin@1.0.0', 'typescript@5.0.0']\n );\n base.packages.set('parser@1.0.0', { peerDependencies: { typescript: '^5.0.0' } } as any);\n const incoming = createGraph(\n [rootEdge([{ id: 'typescript@6.0.0', name: 'typescript', specifier: '6.0.0' }]), edge('typescript@6.0.0')],\n ['typescript@6.0.0']\n );\n\n base.merge(incoming);\n\n const plugin = base.findRootEdge()?.neighbours.find((neighbour) => neighbour.name === 'plugin');\n expect(plugin?.id).to.equal(\n 'plugin@1.0.0(parser@1.0.0(typescript@5.0.0))',\n 'typescript@6.0.0 does not satisfy parser@1.0.0 peer range ^5.0.0'\n );\n });\n\n it('keeps a peer provider that is referenced only inside a depPath suffix', () => {\n const base = createGraph(\n [\n rootEdge([{ id: 'consumer@1.0.0(peer@2.0.0)', name: 'consumer', specifier: '1.0.0' }]),\n edge('consumer@1.0.0(peer@2.0.0)'),\n ],\n ['consumer@1.0.0', 'peer@2.0.0']\n );\n\n base.merge(createGraph([], []));\n\n expect(base.packages.has('peer@2.0.0')).to.equal(true);\n });\n\n it('keeps the patch_hash segment in front of sorted peer segments', () => {\n const base = createGraph(\n [\n rootEdge([{ id: 'foo@1.0.0(patch_hash=abc)(bar@1.0.0)', name: 'foo', specifier: '1.0.0' }]),\n edge('foo@1.0.0(patch_hash=abc)(bar@1.0.0)'),\n edge('bar@1.0.0'),\n ],\n ['foo@1.0.0', 'bar@1.0.0']\n );\n base.packages.set('foo@1.0.0', { peerDependencies: { bar: '^1.0.0' } } as any);\n const incoming = createGraph(\n [rootEdge([{ id: 'bar@1.0.0', name: 'bar', specifier: '1.0.0' }]), edge('bar@1.0.0')],\n ['bar@1.0.0']\n );\n\n base.merge(incoming);\n\n const foo = base.findRootEdge()?.neighbours.find((neighbour) => neighbour.name === 'foo');\n expect(foo?.id).to.equal('foo@1.0.0(patch_hash=abc)(bar@1.0.0)');\n });\n\n it('does not overflow the stack on a deep dependency chain', () => {\n const depth = 50000;\n const edges: DependencyEdge[] = [rootEdge([{ id: 'pkg0@1.0.0', name: 'pkg0', specifier: '1.0.0' }])];\n const packageIds: string[] = [];\n for (let i = 0; i < depth; i += 1) {\n const id = `pkg${i}@1.0.0`;\n packageIds.push(id);\n edges.push(edge(id, i + 1 < depth ? [{ id: `pkg${i + 1}@1.0.0` }] : []));\n }\n const graph = createGraph(edges, packageIds);\n\n graph.merge(createGraph([], []));\n\n expect(graph.packages.size).to.equal(depth);\n });\n});\n\ndescribe('DependenciesGraph pnpmfileChecksum', () => {\n it('survives serialize and deserialize', () => {\n const graph = createGraph([rootEdge([])], []);\n graph.pnpmfileChecksum = 'bit-1';\n\n const restored = DependenciesGraph.deserialize(graph.serialize());\n\n expect(restored?.pnpmfileChecksum).to.equal('bit-1');\n });\n\n it('is omitted from the serialized graph when unset', () => {\n const graph = createGraph([rootEdge([])], []);\n\n expect(JSON.parse(graph.serialize())).not.to.have.property('pnpmfileChecksum');\n });\n\n it('deserializes a graph serialized before the field existed', () => {\n const restored = DependenciesGraph.deserialize(\n JSON.stringify({ schemaVersion: '2.0', packages: { 'foo@1.0.0': {} }, edges: [rootEdge([])] })\n );\n\n expect(restored).not.to.equal(undefined);\n expect(restored?.packages.has('foo@1.0.0')).to.equal(true);\n expect(restored?.pnpmfileChecksum).to.equal(undefined);\n });\n\n it('is kept by merge when both graphs have the same value', () => {\n const base = createGraph([rootEdge([])], []);\n base.pnpmfileChecksum = 'bit-1';\n const incoming = createGraph([rootEdge([])], []);\n incoming.pnpmfileChecksum = 'bit-1';\n\n base.merge(incoming);\n\n expect(base.pnpmfileChecksum).to.equal('bit-1');\n });\n\n it('is dropped by merge when the graphs have different values', () => {\n const base = createGraph([rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '1.0.0' }])], ['foo@1.0.0']);\n base.pnpmfileChecksum = 'bit-1';\n const incoming = createGraph([rootEdge([{ id: 'bar@1.0.0', name: 'bar', specifier: '1.0.0' }])], ['bar@1.0.0']);\n incoming.pnpmfileChecksum = 'bit-2';\n\n base.merge(incoming);\n\n expect(base.pnpmfileChecksum).to.equal(undefined);\n });\n\n it('is dropped by merge when only one graph has it', () => {\n const base = createGraph([rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '1.0.0' }])], ['foo@1.0.0']);\n base.pnpmfileChecksum = 'bit-1';\n\n base.merge(createGraph([rootEdge([{ id: 'bar@1.0.0', name: 'bar', specifier: '1.0.0' }])], ['bar@1.0.0']));\n\n expect(base.pnpmfileChecksum).to.equal(undefined);\n });\n\n it('is not affected by merging a graph without dependencies', () => {\n const base = createGraph([rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '1.0.0' }])], ['foo@1.0.0']);\n base.pnpmfileChecksum = 'bit-1';\n\n base.merge(createGraph([rootEdge([])], []));\n\n expect(base.pnpmfileChecksum).to.equal('bit-1');\n });\n\n it('is taken from the incoming graph when the base has no dependencies', () => {\n const base = createGraph([rootEdge([])], []);\n const incoming = createGraph([rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '1.0.0' }])], ['foo@1.0.0']);\n incoming.pnpmfileChecksum = 'bit-1';\n\n base.merge(incoming);\n\n expect(base.pnpmfileChecksum).to.equal('bit-1');\n });\n});\n\nfunction createGraph(edges: DependencyEdge[], packageIds: string[]): DependenciesGraph {\n const packages: PackagesMap = new Map(packageIds.map((id) => [id, {} as any]));\n return new DependenciesGraph({ packages, edges });\n}\n\nfunction rootEdge(neighbours: DependencyEdge['neighbours']): DependencyEdge {\n return { id: DependenciesGraph.ROOT_EDGE_ID, neighbours };\n}\n\nfunction edge(id: string, neighbours: DependencyEdge['neighbours'] = []): DependencyEdge {\n return { id, neighbours };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_chai","data","require","_dependenciesGraph","ownKeys","e","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","describe","it","base","createGraph","rootEdge","id","name","specifier","edge","incoming","merge","foo","findRootEdge","neighbours","find","neighbour","expect","to","equal","packages","set","peerDependencies","typescript","plugin","has","bar","depth","edges","packageIds","graph","size","pnpmfileChecksum","restored","DependenciesGraph","deserialize","serialize","JSON","parse","not","have","property","stringify","schemaVersion","undefined","Map","map","ROOT_EDGE_ID","overrides","react","eql","settings","autoInstallPeers","dedupePeers","injectWorkspacePackages","lockfileSettings"],"sources":["dependencies-graph.spec.ts"],"sourcesContent":["import { expect } from 'chai';\nimport type { DependencyEdge, PackagesMap } from './dependencies-graph';\nimport { DependenciesGraph } from './dependencies-graph';\n\ndescribe('DependenciesGraph.merge', () => {\n it('adopts the more specific specifier when a wildcard direct dep merges with a manifest spec', () => {\n const base = createGraph(\n [rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '*' }]), edge('foo@1.0.0')],\n ['foo@1.0.0']\n );\n const incoming = createGraph(\n [rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '^1.0.0' }]), edge('foo@1.0.0')],\n ['foo@1.0.0']\n );\n\n base.merge(incoming);\n\n const foo = base.findRootEdge()?.neighbours.find((neighbour) => neighbour.name === 'foo');\n expect(foo?.specifier).to.equal('^1.0.0');\n });\n\n it('rewrites nested peer providers within their parent provider peer ranges', () => {\n const base = createGraph(\n [\n rootEdge([{ id: 'plugin@1.0.0(parser@1.0.0(typescript@5.0.0))', name: 'plugin', specifier: '1.0.0' }]),\n edge('plugin@1.0.0(parser@1.0.0(typescript@5.0.0))'),\n edge('parser@1.0.0(typescript@5.0.0)'),\n edge('typescript@5.0.0'),\n ],\n ['plugin@1.0.0', 'typescript@5.0.0']\n );\n base.packages.set('parser@1.0.0', { peerDependencies: { typescript: '^5.0.0' } } as any);\n const incoming = createGraph(\n [rootEdge([{ id: 'typescript@6.0.0', name: 'typescript', specifier: '6.0.0' }]), edge('typescript@6.0.0')],\n ['typescript@6.0.0']\n );\n\n base.merge(incoming);\n\n const plugin = base.findRootEdge()?.neighbours.find((neighbour) => neighbour.name === 'plugin');\n expect(plugin?.id).to.equal(\n 'plugin@1.0.0(parser@1.0.0(typescript@5.0.0))',\n 'typescript@6.0.0 does not satisfy parser@1.0.0 peer range ^5.0.0'\n );\n });\n\n it('keeps a peer provider that is referenced only inside a depPath suffix', () => {\n const base = createGraph(\n [\n rootEdge([{ id: 'consumer@1.0.0(peer@2.0.0)', name: 'consumer', specifier: '1.0.0' }]),\n edge('consumer@1.0.0(peer@2.0.0)'),\n ],\n ['consumer@1.0.0', 'peer@2.0.0']\n );\n\n base.merge(createGraph([], []));\n\n expect(base.packages.has('peer@2.0.0')).to.equal(true);\n });\n\n it('keeps the patch_hash segment in front of sorted peer segments', () => {\n const base = createGraph(\n [\n rootEdge([{ id: 'foo@1.0.0(patch_hash=abc)(bar@1.0.0)', name: 'foo', specifier: '1.0.0' }]),\n edge('foo@1.0.0(patch_hash=abc)(bar@1.0.0)'),\n edge('bar@1.0.0'),\n ],\n ['foo@1.0.0', 'bar@1.0.0']\n );\n base.packages.set('foo@1.0.0', { peerDependencies: { bar: '^1.0.0' } } as any);\n const incoming = createGraph(\n [rootEdge([{ id: 'bar@1.0.0', name: 'bar', specifier: '1.0.0' }]), edge('bar@1.0.0')],\n ['bar@1.0.0']\n );\n\n base.merge(incoming);\n\n const foo = base.findRootEdge()?.neighbours.find((neighbour) => neighbour.name === 'foo');\n expect(foo?.id).to.equal('foo@1.0.0(patch_hash=abc)(bar@1.0.0)');\n });\n\n it('does not overflow the stack on a deep dependency chain', () => {\n const depth = 50000;\n const edges: DependencyEdge[] = [rootEdge([{ id: 'pkg0@1.0.0', name: 'pkg0', specifier: '1.0.0' }])];\n const packageIds: string[] = [];\n for (let i = 0; i < depth; i += 1) {\n const id = `pkg${i}@1.0.0`;\n packageIds.push(id);\n edges.push(edge(id, i + 1 < depth ? [{ id: `pkg${i + 1}@1.0.0` }] : []));\n }\n const graph = createGraph(edges, packageIds);\n\n graph.merge(createGraph([], []));\n\n expect(graph.packages.size).to.equal(depth);\n });\n});\n\ndescribe('DependenciesGraph pnpmfileChecksum', () => {\n it('survives serialize and deserialize', () => {\n const graph = createGraph([rootEdge([])], []);\n graph.pnpmfileChecksum = 'hooks-1';\n\n const restored = DependenciesGraph.deserialize(graph.serialize());\n\n expect(restored?.pnpmfileChecksum).to.equal('hooks-1');\n });\n\n it('is omitted from the serialized graph when unset', () => {\n const graph = createGraph([rootEdge([])], []);\n\n expect(JSON.parse(graph.serialize())).not.to.have.property('pnpmfileChecksum');\n });\n\n it('deserializes a graph serialized before the field existed', () => {\n const restored = DependenciesGraph.deserialize(\n JSON.stringify({ schemaVersion: '2.0', packages: { 'foo@1.0.0': {} }, edges: [rootEdge([])] })\n );\n\n expect(restored).not.to.equal(undefined);\n expect(restored?.packages.has('foo@1.0.0')).to.equal(true);\n expect(restored?.pnpmfileChecksum).to.equal(undefined);\n });\n\n it('is kept by merge when both graphs have the same value', () => {\n const base = createGraph([rootEdge([])], []);\n base.pnpmfileChecksum = 'hooks-1';\n const incoming = createGraph([rootEdge([])], []);\n incoming.pnpmfileChecksum = 'hooks-1';\n\n base.merge(incoming);\n\n expect(base.pnpmfileChecksum).to.equal('hooks-1');\n });\n\n it('is dropped by merge when the graphs have different values', () => {\n const base = createGraph([rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '1.0.0' }])], ['foo@1.0.0']);\n base.pnpmfileChecksum = 'hooks-1';\n const incoming = createGraph([rootEdge([{ id: 'bar@1.0.0', name: 'bar', specifier: '1.0.0' }])], ['bar@1.0.0']);\n incoming.pnpmfileChecksum = 'hooks-2';\n\n base.merge(incoming);\n\n expect(base.pnpmfileChecksum).to.equal(undefined);\n });\n\n it('is dropped by merge when only one graph has it', () => {\n const base = createGraph([rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '1.0.0' }])], ['foo@1.0.0']);\n base.pnpmfileChecksum = 'hooks-1';\n\n base.merge(createGraph([rootEdge([{ id: 'bar@1.0.0', name: 'bar', specifier: '1.0.0' }])], ['bar@1.0.0']));\n\n expect(base.pnpmfileChecksum).to.equal(undefined);\n });\n\n it('is not affected by merging a graph without dependencies', () => {\n const base = createGraph([rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '1.0.0' }])], ['foo@1.0.0']);\n base.pnpmfileChecksum = 'hooks-1';\n\n base.merge(createGraph([rootEdge([])], []));\n\n expect(base.pnpmfileChecksum).to.equal('hooks-1');\n });\n\n it('is taken from the incoming graph when the base has no dependencies', () => {\n const base = createGraph([rootEdge([])], []);\n const incoming = createGraph([rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '1.0.0' }])], ['foo@1.0.0']);\n incoming.pnpmfileChecksum = 'hooks-1';\n\n base.merge(incoming);\n\n expect(base.pnpmfileChecksum).to.equal('hooks-1');\n });\n});\n\nfunction createGraph(edges: DependencyEdge[], packageIds: string[]): DependenciesGraph {\n const packages: PackagesMap = new Map(packageIds.map((id) => [id, {} as any]));\n return new DependenciesGraph({ packages, edges });\n}\n\nfunction rootEdge(neighbours: DependencyEdge['neighbours']): DependencyEdge {\n return { id: DependenciesGraph.ROOT_EDGE_ID, neighbours };\n}\n\nfunction edge(id: string, neighbours: DependencyEdge['neighbours'] = []): DependencyEdge {\n return { id, neighbours };\n}\n\ndescribe('DependenciesGraph overrides', () => {\n const overrides = { '@teambit/legacy@*': '-', react: '19.1.0' };\n\n it('survives serialize and deserialize', () => {\n const graph = createGraph([rootEdge([])], []);\n graph.overrides = overrides;\n\n expect(DependenciesGraph.deserialize(graph.serialize())?.overrides).to.eql(overrides);\n });\n\n it(\"stand in for the checksum of Bit's readPackage hooks, which the overrides replaced\", () => {\n const restored = DependenciesGraph.deserialize(\n JSON.stringify({ schemaVersion: '2.0', packages: {}, edges: [rootEdge([])], pnpmfileChecksum: 'bit-1' })\n );\n\n expect(restored?.pnpmfileChecksum).to.equal(undefined);\n expect(restored?.overrides).to.eql({ '@teambit/legacy@*': '-', '@teambit/harmony@*': '-' });\n });\n\n it('are kept by merge when both graphs have the same ones', () => {\n const base = createGraph([rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '1.0.0' }])], ['foo@1.0.0']);\n base.overrides = overrides;\n const incoming = createGraph([rootEdge([{ id: 'bar@1.0.0', name: 'bar', specifier: '1.0.0' }])], ['bar@1.0.0']);\n incoming.overrides = { ...overrides };\n\n base.merge(incoming);\n\n expect(base.overrides).to.eql(overrides);\n });\n\n it('are dropped by merge when the graphs have different ones', () => {\n const base = createGraph([rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '1.0.0' }])], ['foo@1.0.0']);\n base.overrides = overrides;\n const incoming = createGraph([rootEdge([{ id: 'bar@1.0.0', name: 'bar', specifier: '1.0.0' }])], ['bar@1.0.0']);\n incoming.overrides = { ...overrides, react: '18.3.1' };\n\n base.merge(incoming);\n\n expect(base.overrides).to.equal(undefined);\n });\n});\n\ndescribe('DependenciesGraph lockfileSettings', () => {\n const settings = { autoInstallPeers: true, dedupePeers: true, injectWorkspacePackages: true };\n\n it('survives serialize and deserialize', () => {\n const graph = createGraph([rootEdge([])], []);\n graph.lockfileSettings = settings;\n\n expect(DependenciesGraph.deserialize(graph.serialize())?.lockfileSettings).to.eql(settings);\n });\n\n it('is unset on a graph serialized before the field existed', () => {\n const restored = DependenciesGraph.deserialize(\n JSON.stringify({ schemaVersion: '2.0', packages: {}, edges: [rootEdge([])] })\n );\n\n expect(restored?.lockfileSettings).to.equal(undefined);\n });\n\n it('is kept by merge when both graphs were resolved under the same settings', () => {\n const base = createGraph([rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '1.0.0' }])], ['foo@1.0.0']);\n base.lockfileSettings = settings;\n const incoming = createGraph([rootEdge([{ id: 'bar@1.0.0', name: 'bar', specifier: '1.0.0' }])], ['bar@1.0.0']);\n incoming.lockfileSettings = { ...settings };\n\n base.merge(incoming);\n\n expect(base.lockfileSettings).to.eql(settings);\n });\n\n it('is dropped by merge when the graphs were resolved under different settings', () => {\n const base = createGraph([rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '1.0.0' }])], ['foo@1.0.0']);\n base.lockfileSettings = settings;\n const incoming = createGraph([rootEdge([{ id: 'bar@1.0.0', name: 'bar', specifier: '1.0.0' }])], ['bar@1.0.0']);\n incoming.lockfileSettings = { ...settings, dedupePeers: false };\n\n base.merge(incoming);\n\n expect(base.lockfileSettings).to.equal(undefined);\n });\n\n it('is dropped by merge when only one graph has them', () => {\n const base = createGraph([rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '1.0.0' }])], ['foo@1.0.0']);\n base.lockfileSettings = settings;\n\n base.merge(createGraph([rootEdge([{ id: 'bar@1.0.0', name: 'bar', specifier: '1.0.0' }])], ['bar@1.0.0']));\n\n expect(base.lockfileSettings).to.equal(undefined);\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -99,11 +99,11 @@ describe('DependenciesGraph.merge', () => {
99
99
  describe('DependenciesGraph pnpmfileChecksum', () => {
100
100
  it('survives serialize and deserialize', () => {
101
101
  const graph = createGraph([rootEdge([])], []);
102
- graph.pnpmfileChecksum = 'bit-1';
102
+ graph.pnpmfileChecksum = 'hooks-1';
103
103
 
104
104
  const restored = DependenciesGraph.deserialize(graph.serialize());
105
105
 
106
- expect(restored?.pnpmfileChecksum).to.equal('bit-1');
106
+ expect(restored?.pnpmfileChecksum).to.equal('hooks-1');
107
107
  });
108
108
 
109
109
  it('is omitted from the serialized graph when unset', () => {
@@ -124,20 +124,20 @@ describe('DependenciesGraph pnpmfileChecksum', () => {
124
124
 
125
125
  it('is kept by merge when both graphs have the same value', () => {
126
126
  const base = createGraph([rootEdge([])], []);
127
- base.pnpmfileChecksum = 'bit-1';
127
+ base.pnpmfileChecksum = 'hooks-1';
128
128
  const incoming = createGraph([rootEdge([])], []);
129
- incoming.pnpmfileChecksum = 'bit-1';
129
+ incoming.pnpmfileChecksum = 'hooks-1';
130
130
 
131
131
  base.merge(incoming);
132
132
 
133
- expect(base.pnpmfileChecksum).to.equal('bit-1');
133
+ expect(base.pnpmfileChecksum).to.equal('hooks-1');
134
134
  });
135
135
 
136
136
  it('is dropped by merge when the graphs have different values', () => {
137
137
  const base = createGraph([rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '1.0.0' }])], ['foo@1.0.0']);
138
- base.pnpmfileChecksum = 'bit-1';
138
+ base.pnpmfileChecksum = 'hooks-1';
139
139
  const incoming = createGraph([rootEdge([{ id: 'bar@1.0.0', name: 'bar', specifier: '1.0.0' }])], ['bar@1.0.0']);
140
- incoming.pnpmfileChecksum = 'bit-2';
140
+ incoming.pnpmfileChecksum = 'hooks-2';
141
141
 
142
142
  base.merge(incoming);
143
143
 
@@ -146,7 +146,7 @@ describe('DependenciesGraph pnpmfileChecksum', () => {
146
146
 
147
147
  it('is dropped by merge when only one graph has it', () => {
148
148
  const base = createGraph([rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '1.0.0' }])], ['foo@1.0.0']);
149
- base.pnpmfileChecksum = 'bit-1';
149
+ base.pnpmfileChecksum = 'hooks-1';
150
150
 
151
151
  base.merge(createGraph([rootEdge([{ id: 'bar@1.0.0', name: 'bar', specifier: '1.0.0' }])], ['bar@1.0.0']));
152
152
 
@@ -155,21 +155,21 @@ describe('DependenciesGraph pnpmfileChecksum', () => {
155
155
 
156
156
  it('is not affected by merging a graph without dependencies', () => {
157
157
  const base = createGraph([rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '1.0.0' }])], ['foo@1.0.0']);
158
- base.pnpmfileChecksum = 'bit-1';
158
+ base.pnpmfileChecksum = 'hooks-1';
159
159
 
160
160
  base.merge(createGraph([rootEdge([])], []));
161
161
 
162
- expect(base.pnpmfileChecksum).to.equal('bit-1');
162
+ expect(base.pnpmfileChecksum).to.equal('hooks-1');
163
163
  });
164
164
 
165
165
  it('is taken from the incoming graph when the base has no dependencies', () => {
166
166
  const base = createGraph([rootEdge([])], []);
167
167
  const incoming = createGraph([rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '1.0.0' }])], ['foo@1.0.0']);
168
- incoming.pnpmfileChecksum = 'bit-1';
168
+ incoming.pnpmfileChecksum = 'hooks-1';
169
169
 
170
170
  base.merge(incoming);
171
171
 
172
- expect(base.pnpmfileChecksum).to.equal('bit-1');
172
+ expect(base.pnpmfileChecksum).to.equal('hooks-1');
173
173
  });
174
174
  });
175
175
 
@@ -185,3 +185,95 @@ function rootEdge(neighbours: DependencyEdge['neighbours']): DependencyEdge {
185
185
  function edge(id: string, neighbours: DependencyEdge['neighbours'] = []): DependencyEdge {
186
186
  return { id, neighbours };
187
187
  }
188
+
189
+ describe('DependenciesGraph overrides', () => {
190
+ const overrides = { '@teambit/legacy@*': '-', react: '19.1.0' };
191
+
192
+ it('survives serialize and deserialize', () => {
193
+ const graph = createGraph([rootEdge([])], []);
194
+ graph.overrides = overrides;
195
+
196
+ expect(DependenciesGraph.deserialize(graph.serialize())?.overrides).to.eql(overrides);
197
+ });
198
+
199
+ it("stand in for the checksum of Bit's readPackage hooks, which the overrides replaced", () => {
200
+ const restored = DependenciesGraph.deserialize(
201
+ JSON.stringify({ schemaVersion: '2.0', packages: {}, edges: [rootEdge([])], pnpmfileChecksum: 'bit-1' })
202
+ );
203
+
204
+ expect(restored?.pnpmfileChecksum).to.equal(undefined);
205
+ expect(restored?.overrides).to.eql({ '@teambit/legacy@*': '-', '@teambit/harmony@*': '-' });
206
+ });
207
+
208
+ it('are kept by merge when both graphs have the same ones', () => {
209
+ const base = createGraph([rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '1.0.0' }])], ['foo@1.0.0']);
210
+ base.overrides = overrides;
211
+ const incoming = createGraph([rootEdge([{ id: 'bar@1.0.0', name: 'bar', specifier: '1.0.0' }])], ['bar@1.0.0']);
212
+ incoming.overrides = { ...overrides };
213
+
214
+ base.merge(incoming);
215
+
216
+ expect(base.overrides).to.eql(overrides);
217
+ });
218
+
219
+ it('are dropped by merge when the graphs have different ones', () => {
220
+ const base = createGraph([rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '1.0.0' }])], ['foo@1.0.0']);
221
+ base.overrides = overrides;
222
+ const incoming = createGraph([rootEdge([{ id: 'bar@1.0.0', name: 'bar', specifier: '1.0.0' }])], ['bar@1.0.0']);
223
+ incoming.overrides = { ...overrides, react: '18.3.1' };
224
+
225
+ base.merge(incoming);
226
+
227
+ expect(base.overrides).to.equal(undefined);
228
+ });
229
+ });
230
+
231
+ describe('DependenciesGraph lockfileSettings', () => {
232
+ const settings = { autoInstallPeers: true, dedupePeers: true, injectWorkspacePackages: true };
233
+
234
+ it('survives serialize and deserialize', () => {
235
+ const graph = createGraph([rootEdge([])], []);
236
+ graph.lockfileSettings = settings;
237
+
238
+ expect(DependenciesGraph.deserialize(graph.serialize())?.lockfileSettings).to.eql(settings);
239
+ });
240
+
241
+ it('is unset on a graph serialized before the field existed', () => {
242
+ const restored = DependenciesGraph.deserialize(
243
+ JSON.stringify({ schemaVersion: '2.0', packages: {}, edges: [rootEdge([])] })
244
+ );
245
+
246
+ expect(restored?.lockfileSettings).to.equal(undefined);
247
+ });
248
+
249
+ it('is kept by merge when both graphs were resolved under the same settings', () => {
250
+ const base = createGraph([rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '1.0.0' }])], ['foo@1.0.0']);
251
+ base.lockfileSettings = settings;
252
+ const incoming = createGraph([rootEdge([{ id: 'bar@1.0.0', name: 'bar', specifier: '1.0.0' }])], ['bar@1.0.0']);
253
+ incoming.lockfileSettings = { ...settings };
254
+
255
+ base.merge(incoming);
256
+
257
+ expect(base.lockfileSettings).to.eql(settings);
258
+ });
259
+
260
+ it('is dropped by merge when the graphs were resolved under different settings', () => {
261
+ const base = createGraph([rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '1.0.0' }])], ['foo@1.0.0']);
262
+ base.lockfileSettings = settings;
263
+ const incoming = createGraph([rootEdge([{ id: 'bar@1.0.0', name: 'bar', specifier: '1.0.0' }])], ['bar@1.0.0']);
264
+ incoming.lockfileSettings = { ...settings, dedupePeers: false };
265
+
266
+ base.merge(incoming);
267
+
268
+ expect(base.lockfileSettings).to.equal(undefined);
269
+ });
270
+
271
+ it('is dropped by merge when only one graph has them', () => {
272
+ const base = createGraph([rootEdge([{ id: 'foo@1.0.0', name: 'foo', specifier: '1.0.0' }])], ['foo@1.0.0']);
273
+ base.lockfileSettings = settings;
274
+
275
+ base.merge(createGraph([rootEdge([{ id: 'bar@1.0.0', name: 'bar', specifier: '1.0.0' }])], ['bar@1.0.0']));
276
+
277
+ expect(base.lockfileSettings).to.equal(undefined);
278
+ });
279
+ });
@@ -1,5 +1,5 @@
1
1
  import semver from 'semver';
2
- import type { LockfilePackageInfo } from '@pnpm/lockfile.types';
2
+ import type { LockfilePackageInfo, LockfileSettings } from '@pnpm/lockfile.types';
3
3
 
4
4
  export type PackagesMap = Map<string, PackageAttributes>;
5
5
 
@@ -33,6 +33,21 @@ export type DependencyNeighbour = {
33
33
 
34
34
  const DEPENDENCIES_GRAPH_SCHEMA_VERSION = '2.0';
35
35
 
36
+ /**
37
+ * The `pnpmfileChecksum` of graphs resolved with Bit's readPackage hooks. Those
38
+ * hooks removed `@teambit/legacy` and `@teambit/harmony` from every dependency.
39
+ * Bit now passes no hooks and removes them with the overrides below instead
40
+ * (`removedCoreDependencyOverrides` in the pnpm aspect), so such a graph holds
41
+ * the resolution those overrides produce. A workspace that forced a harmony
42
+ * version kept harmony, but it also recorded a harmony override, which no
43
+ * restored lockfile carried, so its graphs were never reused either way.
44
+ */
45
+ const READ_PACKAGE_HOOKS_CHECKSUM = 'bit-1';
46
+ const READ_PACKAGE_HOOKS_OVERRIDES: Record<string, string> = {
47
+ '@teambit/legacy@*': '-',
48
+ '@teambit/harmony@*': '-',
49
+ };
50
+
36
51
  export class DependenciesGraph {
37
52
  static ROOT_EDGE_ID = '.';
38
53
 
@@ -47,22 +62,47 @@ export class DependenciesGraph {
47
62
  * existed don't have it.
48
63
  */
49
64
  pnpmfileChecksum?: string;
65
+ /**
66
+ * The `settings` block of the lockfile the graph was created from: the
67
+ * resolution settings (dedupePeers, injectWorkspacePackages, ...) the
68
+ * dependencies were resolved under. A lockfile restored from the graph
69
+ * carries them, so pnpm can install the restored resolution without
70
+ * resolving again while the install's settings still match. Graphs created
71
+ * before this field existed don't have it, and pnpm resolves them again.
72
+ */
73
+ lockfileSettings?: LockfileSettings;
74
+ /**
75
+ * The `overrides` of the lockfile the graph was created from. A lockfile
76
+ * restored from the graph carries them, so pnpm trusts the restored
77
+ * resolution only while the install's overrides are the same.
78
+ */
79
+ overrides?: Record<string, string>;
50
80
 
51
81
  constructor({
52
82
  packages,
53
83
  edges,
54
84
  schemaVersion,
55
85
  pnpmfileChecksum,
86
+ lockfileSettings,
87
+ overrides,
56
88
  }: {
57
89
  packages: PackagesMap;
58
90
  edges: DependencyEdge[];
59
91
  schemaVersion?: string;
60
92
  pnpmfileChecksum?: string;
93
+ lockfileSettings?: LockfileSettings;
94
+ overrides?: Record<string, string>;
61
95
  }) {
62
96
  this.packages = packages;
63
97
  this.edges = edges;
64
98
  this.schemaVersion = schemaVersion ?? DEPENDENCIES_GRAPH_SCHEMA_VERSION;
65
- this.pnpmfileChecksum = pnpmfileChecksum;
99
+ if (pnpmfileChecksum === READ_PACKAGE_HOOKS_CHECKSUM && overrides == null) {
100
+ this.overrides = { ...READ_PACKAGE_HOOKS_OVERRIDES };
101
+ } else {
102
+ this.pnpmfileChecksum = pnpmfileChecksum;
103
+ this.overrides = overrides;
104
+ }
105
+ this.lockfileSettings = lockfileSettings;
66
106
  }
67
107
 
68
108
  serialize(): string {
@@ -70,8 +110,10 @@ export class DependenciesGraph {
70
110
  schemaVersion: this.schemaVersion,
71
111
  packages: Object.fromEntries(this.packages.entries()),
72
112
  edges: this.edges,
73
- // JSON.stringify omits it when undefined.
113
+ // JSON.stringify omits these when undefined.
74
114
  pnpmfileChecksum: this.pnpmfileChecksum,
115
+ lockfileSettings: this.lockfileSettings,
116
+ overrides: this.overrides,
75
117
  });
76
118
  }
77
119
 
@@ -86,11 +128,15 @@ export class DependenciesGraph {
86
128
  edges: parsed.edges,
87
129
  packages: new Map(Object.entries(parsed.packages)),
88
130
  pnpmfileChecksum: parsed.pnpmfileChecksum,
131
+ lockfileSettings: parsed.lockfileSettings,
132
+ overrides: parsed.overrides,
89
133
  });
90
134
  }
91
135
 
92
136
  merge(graph: DependenciesGraph): void {
93
137
  this.pnpmfileChecksum = mergePnpmfileChecksums(this, graph);
138
+ this.lockfileSettings = mergeLockfileSettings(this, graph);
139
+ this.overrides = mergeOverrides(this, graph);
94
140
  const rootEdge = this.findRootEdge();
95
141
  const incomingRootEdge = graph.findRootEdge();
96
142
  const directDependencies = incomingRootEdge?.neighbours;
@@ -310,6 +356,32 @@ function mergePnpmfileChecksums(graph1: DependenciesGraph, graph2: DependenciesG
310
356
  return graph1.pnpmfileChecksum === graph2.pnpmfileChecksum ? graph1.pnpmfileChecksum : undefined;
311
357
  }
312
358
 
359
+ /**
360
+ * A merged graph mixes resolutions from both graphs, so it can only claim the
361
+ * settings both were resolved under.
362
+ */
363
+ function mergeLockfileSettings(graph1: DependenciesGraph, graph2: DependenciesGraph): LockfileSettings | undefined {
364
+ if (!graph2.hasResolutions()) return graph1.lockfileSettings;
365
+ if (!graph1.hasResolutions()) return graph2.lockfileSettings;
366
+ return sameRecords(graph1.lockfileSettings, graph2.lockfileSettings) ? graph1.lockfileSettings : undefined;
367
+ }
368
+
369
+ /**
370
+ * A merged graph mixes resolutions from both graphs, so it can only claim the
371
+ * overrides both were resolved with.
372
+ */
373
+ function mergeOverrides(graph1: DependenciesGraph, graph2: DependenciesGraph): Record<string, string> | undefined {
374
+ if (!graph2.hasResolutions()) return graph1.overrides;
375
+ if (!graph1.hasResolutions()) return graph2.overrides;
376
+ return sameRecords(graph1.overrides, graph2.overrides) ? graph1.overrides : undefined;
377
+ }
378
+
379
+ function sameRecords(record1?: object, record2?: object): boolean {
380
+ if (record1 == null || record2 == null) return record1 === record2;
381
+ const keys = new Set([...Object.keys(record1), ...Object.keys(record2)]);
382
+ return [...keys].every((key) => record1[key] === record2[key]);
383
+ }
384
+
313
385
  function isSameDirectDependency(dep1: DependencyNeighbour, dep2: DependencyNeighbour): boolean {
314
386
  if (!dep1.name || !dep2.name) return dep1.id === dep2.id;
315
387
  if (dep1.name !== dep2.name) return false;
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/objects",
3
- "version": "0.0.713",
3
+ "version": "0.0.715",
4
4
  "homepage": "https://bit.cloud/teambit/scope/objects",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.scope",
8
8
  "name": "objects",
9
- "version": "0.0.713"
9
+ "version": "0.0.715"
10
10
  },
11
11
  "dependencies": {
12
12
  "@pnpm/lockfile.types": "1100.0.19",
package/.npmignore DELETED
@@ -1,18 +0,0 @@
1
- dist/tsconfig.tsbuildinfo
2
- dist/tsconfig.json
3
- /tsconfig.json
4
-
5
- package-tar/
6
- .bit-capsule-ready
7
- /*.ts
8
- artifacts/*
9
- !artifacts/env-template
10
- !artifacts/ui-bundle
11
- !artifacts/preview-bundle
12
- package-tar/
13
- .bit-capsule-ready
14
- /*.ts
15
- artifacts/*
16
- !artifacts/env-template
17
- !artifacts/ui-bundle
18
- !artifacts/preview-bundle