@teambit/objects 0.0.714 → 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.
- package/dist/models/dependencies-graph.d.ts +8 -1
- package/dist/models/dependencies-graph.js +49 -9
- package/dist/models/dependencies-graph.js.map +1 -1
- package/dist/models/dependencies-graph.spec.js +70 -12
- package/dist/models/dependencies-graph.spec.js.map +1 -1
- package/models/dependencies-graph.spec.ts +54 -12
- package/models/dependencies-graph.ts +47 -6
- package/package.json +2 -2
- package/.npmignore +0 -18
- /package/dist/{preview-1791624541512.js → preview-1791664792369.js} +0 -0
|
@@ -47,12 +47,19 @@ export declare class DependenciesGraph {
|
|
|
47
47
|
* before this field existed don't have it, and pnpm resolves them again.
|
|
48
48
|
*/
|
|
49
49
|
lockfileSettings?: LockfileSettings;
|
|
50
|
-
|
|
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, }: {
|
|
51
57
|
packages: PackagesMap;
|
|
52
58
|
edges: DependencyEdge[];
|
|
53
59
|
schemaVersion?: string;
|
|
54
60
|
pnpmfileChecksum?: string;
|
|
55
61
|
lockfileSettings?: LockfileSettings;
|
|
62
|
+
overrides?: Record<string, string>;
|
|
56
63
|
});
|
|
57
64
|
serialize(): string;
|
|
58
65
|
static deserialize(data: string): DependenciesGraph | undefined;
|
|
@@ -18,13 +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
41
|
pnpmfileChecksum,
|
|
27
|
-
lockfileSettings
|
|
42
|
+
lockfileSettings,
|
|
43
|
+
overrides
|
|
28
44
|
}) {
|
|
29
45
|
_defineProperty(this, "schemaVersion", void 0);
|
|
30
46
|
_defineProperty(this, "packages", void 0);
|
|
@@ -46,10 +62,21 @@ class DependenciesGraph {
|
|
|
46
62
|
* before this field existed don't have it, and pnpm resolves them again.
|
|
47
63
|
*/
|
|
48
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);
|
|
49
71
|
this.packages = packages;
|
|
50
72
|
this.edges = edges;
|
|
51
73
|
this.schemaVersion = schemaVersion ?? DEPENDENCIES_GRAPH_SCHEMA_VERSION;
|
|
52
|
-
|
|
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
|
+
}
|
|
53
80
|
this.lockfileSettings = lockfileSettings;
|
|
54
81
|
}
|
|
55
82
|
serialize() {
|
|
@@ -59,7 +86,8 @@ class DependenciesGraph {
|
|
|
59
86
|
edges: this.edges,
|
|
60
87
|
// JSON.stringify omits these when undefined.
|
|
61
88
|
pnpmfileChecksum: this.pnpmfileChecksum,
|
|
62
|
-
lockfileSettings: this.lockfileSettings
|
|
89
|
+
lockfileSettings: this.lockfileSettings,
|
|
90
|
+
overrides: this.overrides
|
|
63
91
|
});
|
|
64
92
|
}
|
|
65
93
|
static deserialize(data) {
|
|
@@ -73,12 +101,14 @@ class DependenciesGraph {
|
|
|
73
101
|
edges: parsed.edges,
|
|
74
102
|
packages: new Map(Object.entries(parsed.packages)),
|
|
75
103
|
pnpmfileChecksum: parsed.pnpmfileChecksum,
|
|
76
|
-
lockfileSettings: parsed.lockfileSettings
|
|
104
|
+
lockfileSettings: parsed.lockfileSettings,
|
|
105
|
+
overrides: parsed.overrides
|
|
77
106
|
});
|
|
78
107
|
}
|
|
79
108
|
merge(graph) {
|
|
80
109
|
this.pnpmfileChecksum = mergePnpmfileChecksums(this, graph);
|
|
81
110
|
this.lockfileSettings = mergeLockfileSettings(this, graph);
|
|
111
|
+
this.overrides = mergeOverrides(this, graph);
|
|
82
112
|
const rootEdge = this.findRootEdge();
|
|
83
113
|
const incomingRootEdge = graph.findRootEdge();
|
|
84
114
|
const directDependencies = incomingRootEdge?.neighbours;
|
|
@@ -298,12 +328,22 @@ function mergePnpmfileChecksums(graph1, graph2) {
|
|
|
298
328
|
function mergeLockfileSettings(graph1, graph2) {
|
|
299
329
|
if (!graph2.hasResolutions()) return graph1.lockfileSettings;
|
|
300
330
|
if (!graph1.hasResolutions()) return graph2.lockfileSettings;
|
|
301
|
-
return
|
|
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;
|
|
302
342
|
}
|
|
303
|
-
function
|
|
304
|
-
if (
|
|
305
|
-
const keys = new Set([...Object.keys(
|
|
306
|
-
return [...keys].every(key =>
|
|
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]);
|
|
307
347
|
}
|
|
308
348
|
function isSameDirectDependency(dep1, dep2) {
|
|
309
349
|
if (!dep1.name || !dep2.name) return dep1.id === dep2.id;
|
|
@@ -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","lockfileSettings","serialize","JSON","stringify","fromEntries","entries","deserialize","parsed","parse","undefined","Map","merge","graph","mergePnpmfileChecksums","mergeLockfileSettings","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","sameLockfileSettings","settings1","settings2","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\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 constructor({\n packages,\n edges,\n schemaVersion,\n pnpmfileChecksum,\n lockfileSettings,\n }: {\n packages: PackagesMap;\n edges: DependencyEdge[];\n schemaVersion?: string;\n pnpmfileChecksum?: string;\n lockfileSettings?: LockfileSettings;\n }) {\n this.packages = packages;\n this.edges = edges;\n this.schemaVersion = schemaVersion ?? DEPENDENCIES_GRAPH_SCHEMA_VERSION;\n this.pnpmfileChecksum = pnpmfileChecksum;\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 });\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 });\n }\n\n merge(graph: DependenciesGraph): void {\n this.pnpmfileChecksum = mergePnpmfileChecksums(this, graph);\n this.lockfileSettings = mergeLockfileSettings(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 sameLockfileSettings(graph1.lockfileSettings, graph2.lockfileSettings) ? graph1.lockfileSettings : undefined;\n}\n\nfunction sameLockfileSettings(settings1?: LockfileSettings, settings2?: LockfileSettings): boolean {\n if (settings1 == null || settings2 == null) return settings1 === settings2;\n const keys = new Set([...Object.keys(settings1), ...Object.keys(settings2)]);\n return [...keys].every((key) => settings1[key] === settings2[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":[]}
|
|
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":[]}
|
|
@@ -107,9 +107,9 @@ describe('DependenciesGraph.merge', () => {
|
|
|
107
107
|
describe('DependenciesGraph pnpmfileChecksum', () => {
|
|
108
108
|
it('survives serialize and deserialize', () => {
|
|
109
109
|
const graph = createGraph([rootEdge([])], []);
|
|
110
|
-
graph.pnpmfileChecksum = '
|
|
110
|
+
graph.pnpmfileChecksum = 'hooks-1';
|
|
111
111
|
const restored = _dependenciesGraph().DependenciesGraph.deserialize(graph.serialize());
|
|
112
|
-
(0, _chai().expect)(restored?.pnpmfileChecksum).to.equal('
|
|
112
|
+
(0, _chai().expect)(restored?.pnpmfileChecksum).to.equal('hooks-1');
|
|
113
113
|
});
|
|
114
114
|
it('is omitted from the serialized graph when unset', () => {
|
|
115
115
|
const graph = createGraph([rootEdge([])], []);
|
|
@@ -129,11 +129,11 @@ describe('DependenciesGraph pnpmfileChecksum', () => {
|
|
|
129
129
|
});
|
|
130
130
|
it('is kept by merge when both graphs have the same value', () => {
|
|
131
131
|
const base = createGraph([rootEdge([])], []);
|
|
132
|
-
base.pnpmfileChecksum = '
|
|
132
|
+
base.pnpmfileChecksum = 'hooks-1';
|
|
133
133
|
const incoming = createGraph([rootEdge([])], []);
|
|
134
|
-
incoming.pnpmfileChecksum = '
|
|
134
|
+
incoming.pnpmfileChecksum = 'hooks-1';
|
|
135
135
|
base.merge(incoming);
|
|
136
|
-
(0, _chai().expect)(base.pnpmfileChecksum).to.equal('
|
|
136
|
+
(0, _chai().expect)(base.pnpmfileChecksum).to.equal('hooks-1');
|
|
137
137
|
});
|
|
138
138
|
it('is dropped by merge when the graphs have different values', () => {
|
|
139
139
|
const base = createGraph([rootEdge([{
|
|
@@ -141,13 +141,13 @@ describe('DependenciesGraph pnpmfileChecksum', () => {
|
|
|
141
141
|
name: 'foo',
|
|
142
142
|
specifier: '1.0.0'
|
|
143
143
|
}])], ['foo@1.0.0']);
|
|
144
|
-
base.pnpmfileChecksum = '
|
|
144
|
+
base.pnpmfileChecksum = 'hooks-1';
|
|
145
145
|
const incoming = createGraph([rootEdge([{
|
|
146
146
|
id: 'bar@1.0.0',
|
|
147
147
|
name: 'bar',
|
|
148
148
|
specifier: '1.0.0'
|
|
149
149
|
}])], ['bar@1.0.0']);
|
|
150
|
-
incoming.pnpmfileChecksum = '
|
|
150
|
+
incoming.pnpmfileChecksum = 'hooks-2';
|
|
151
151
|
base.merge(incoming);
|
|
152
152
|
(0, _chai().expect)(base.pnpmfileChecksum).to.equal(undefined);
|
|
153
153
|
});
|
|
@@ -157,7 +157,7 @@ describe('DependenciesGraph pnpmfileChecksum', () => {
|
|
|
157
157
|
name: 'foo',
|
|
158
158
|
specifier: '1.0.0'
|
|
159
159
|
}])], ['foo@1.0.0']);
|
|
160
|
-
base.pnpmfileChecksum = '
|
|
160
|
+
base.pnpmfileChecksum = 'hooks-1';
|
|
161
161
|
base.merge(createGraph([rootEdge([{
|
|
162
162
|
id: 'bar@1.0.0',
|
|
163
163
|
name: 'bar',
|
|
@@ -171,9 +171,9 @@ describe('DependenciesGraph pnpmfileChecksum', () => {
|
|
|
171
171
|
name: 'foo',
|
|
172
172
|
specifier: '1.0.0'
|
|
173
173
|
}])], ['foo@1.0.0']);
|
|
174
|
-
base.pnpmfileChecksum = '
|
|
174
|
+
base.pnpmfileChecksum = 'hooks-1';
|
|
175
175
|
base.merge(createGraph([rootEdge([])], []));
|
|
176
|
-
(0, _chai().expect)(base.pnpmfileChecksum).to.equal('
|
|
176
|
+
(0, _chai().expect)(base.pnpmfileChecksum).to.equal('hooks-1');
|
|
177
177
|
});
|
|
178
178
|
it('is taken from the incoming graph when the base has no dependencies', () => {
|
|
179
179
|
const base = createGraph([rootEdge([])], []);
|
|
@@ -182,9 +182,9 @@ describe('DependenciesGraph pnpmfileChecksum', () => {
|
|
|
182
182
|
name: 'foo',
|
|
183
183
|
specifier: '1.0.0'
|
|
184
184
|
}])], ['foo@1.0.0']);
|
|
185
|
-
incoming.pnpmfileChecksum = '
|
|
185
|
+
incoming.pnpmfileChecksum = 'hooks-1';
|
|
186
186
|
base.merge(incoming);
|
|
187
|
-
(0, _chai().expect)(base.pnpmfileChecksum).to.equal('
|
|
187
|
+
(0, _chai().expect)(base.pnpmfileChecksum).to.equal('hooks-1');
|
|
188
188
|
});
|
|
189
189
|
});
|
|
190
190
|
function createGraph(edges, packageIds) {
|
|
@@ -206,6 +206,64 @@ function edge(id, neighbours = []) {
|
|
|
206
206
|
neighbours
|
|
207
207
|
};
|
|
208
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
|
+
});
|
|
209
267
|
describe('DependenciesGraph lockfileSettings', () => {
|
|
210
268
|
const settings = {
|
|
211
269
|
autoInstallPeers: true,
|
|
@@ -1 +1 @@
|
|
|
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","settings","autoInstallPeers","dedupePeers","injectWorkspacePackages","lockfileSettings","eql"],"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\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":[]}
|
|
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 = '
|
|
102
|
+
graph.pnpmfileChecksum = 'hooks-1';
|
|
103
103
|
|
|
104
104
|
const restored = DependenciesGraph.deserialize(graph.serialize());
|
|
105
105
|
|
|
106
|
-
expect(restored?.pnpmfileChecksum).to.equal('
|
|
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 = '
|
|
127
|
+
base.pnpmfileChecksum = 'hooks-1';
|
|
128
128
|
const incoming = createGraph([rootEdge([])], []);
|
|
129
|
-
incoming.pnpmfileChecksum = '
|
|
129
|
+
incoming.pnpmfileChecksum = 'hooks-1';
|
|
130
130
|
|
|
131
131
|
base.merge(incoming);
|
|
132
132
|
|
|
133
|
-
expect(base.pnpmfileChecksum).to.equal('
|
|
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 = '
|
|
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 = '
|
|
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 = '
|
|
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 = '
|
|
158
|
+
base.pnpmfileChecksum = 'hooks-1';
|
|
159
159
|
|
|
160
160
|
base.merge(createGraph([rootEdge([])], []));
|
|
161
161
|
|
|
162
|
-
expect(base.pnpmfileChecksum).to.equal('
|
|
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 = '
|
|
168
|
+
incoming.pnpmfileChecksum = 'hooks-1';
|
|
169
169
|
|
|
170
170
|
base.merge(incoming);
|
|
171
171
|
|
|
172
|
-
expect(base.pnpmfileChecksum).to.equal('
|
|
172
|
+
expect(base.pnpmfileChecksum).to.equal('hooks-1');
|
|
173
173
|
});
|
|
174
174
|
});
|
|
175
175
|
|
|
@@ -186,6 +186,48 @@ function edge(id: string, neighbours: DependencyEdge['neighbours'] = []): Depend
|
|
|
186
186
|
return { id, neighbours };
|
|
187
187
|
}
|
|
188
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
|
+
|
|
189
231
|
describe('DependenciesGraph lockfileSettings', () => {
|
|
190
232
|
const settings = { autoInstallPeers: true, dedupePeers: true, injectWorkspacePackages: true };
|
|
191
233
|
|
|
@@ -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
|
|
|
@@ -56,6 +71,12 @@ export class DependenciesGraph {
|
|
|
56
71
|
* before this field existed don't have it, and pnpm resolves them again.
|
|
57
72
|
*/
|
|
58
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>;
|
|
59
80
|
|
|
60
81
|
constructor({
|
|
61
82
|
packages,
|
|
@@ -63,17 +84,24 @@ export class DependenciesGraph {
|
|
|
63
84
|
schemaVersion,
|
|
64
85
|
pnpmfileChecksum,
|
|
65
86
|
lockfileSettings,
|
|
87
|
+
overrides,
|
|
66
88
|
}: {
|
|
67
89
|
packages: PackagesMap;
|
|
68
90
|
edges: DependencyEdge[];
|
|
69
91
|
schemaVersion?: string;
|
|
70
92
|
pnpmfileChecksum?: string;
|
|
71
93
|
lockfileSettings?: LockfileSettings;
|
|
94
|
+
overrides?: Record<string, string>;
|
|
72
95
|
}) {
|
|
73
96
|
this.packages = packages;
|
|
74
97
|
this.edges = edges;
|
|
75
98
|
this.schemaVersion = schemaVersion ?? DEPENDENCIES_GRAPH_SCHEMA_VERSION;
|
|
76
|
-
|
|
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
|
+
}
|
|
77
105
|
this.lockfileSettings = lockfileSettings;
|
|
78
106
|
}
|
|
79
107
|
|
|
@@ -85,6 +113,7 @@ export class DependenciesGraph {
|
|
|
85
113
|
// JSON.stringify omits these when undefined.
|
|
86
114
|
pnpmfileChecksum: this.pnpmfileChecksum,
|
|
87
115
|
lockfileSettings: this.lockfileSettings,
|
|
116
|
+
overrides: this.overrides,
|
|
88
117
|
});
|
|
89
118
|
}
|
|
90
119
|
|
|
@@ -100,12 +129,14 @@ export class DependenciesGraph {
|
|
|
100
129
|
packages: new Map(Object.entries(parsed.packages)),
|
|
101
130
|
pnpmfileChecksum: parsed.pnpmfileChecksum,
|
|
102
131
|
lockfileSettings: parsed.lockfileSettings,
|
|
132
|
+
overrides: parsed.overrides,
|
|
103
133
|
});
|
|
104
134
|
}
|
|
105
135
|
|
|
106
136
|
merge(graph: DependenciesGraph): void {
|
|
107
137
|
this.pnpmfileChecksum = mergePnpmfileChecksums(this, graph);
|
|
108
138
|
this.lockfileSettings = mergeLockfileSettings(this, graph);
|
|
139
|
+
this.overrides = mergeOverrides(this, graph);
|
|
109
140
|
const rootEdge = this.findRootEdge();
|
|
110
141
|
const incomingRootEdge = graph.findRootEdge();
|
|
111
142
|
const directDependencies = incomingRootEdge?.neighbours;
|
|
@@ -332,13 +363,23 @@ function mergePnpmfileChecksums(graph1: DependenciesGraph, graph2: DependenciesG
|
|
|
332
363
|
function mergeLockfileSettings(graph1: DependenciesGraph, graph2: DependenciesGraph): LockfileSettings | undefined {
|
|
333
364
|
if (!graph2.hasResolutions()) return graph1.lockfileSettings;
|
|
334
365
|
if (!graph1.hasResolutions()) return graph2.lockfileSettings;
|
|
335
|
-
return
|
|
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;
|
|
336
377
|
}
|
|
337
378
|
|
|
338
|
-
function
|
|
339
|
-
if (
|
|
340
|
-
const keys = new Set([...Object.keys(
|
|
341
|
-
return [...keys].every((key) =>
|
|
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]);
|
|
342
383
|
}
|
|
343
384
|
|
|
344
385
|
function isSameDirectDependency(dep1: DependencyNeighbour, dep2: DependencyNeighbour): boolean {
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/objects",
|
|
3
|
-
"version": "0.0.
|
|
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.
|
|
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
|
|
File without changes
|