@vltpkg/graph 0.0.0-0.1730239248325
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/LICENSE +15 -0
- package/README.md +33 -0
- package/dist/esm/actual/load.d.ts +54 -0
- package/dist/esm/actual/load.d.ts.map +1 -0
- package/dist/esm/actual/load.js +243 -0
- package/dist/esm/actual/load.js.map +1 -0
- package/dist/esm/browser.d.ts +9 -0
- package/dist/esm/browser.d.ts.map +1 -0
- package/dist/esm/browser.js +11 -0
- package/dist/esm/browser.js.map +1 -0
- package/dist/esm/dependencies.d.ts +69 -0
- package/dist/esm/dependencies.d.ts.map +1 -0
- package/dist/esm/dependencies.js +71 -0
- package/dist/esm/dependencies.js.map +1 -0
- package/dist/esm/diff.d.ts +49 -0
- package/dist/esm/diff.d.ts.map +1 -0
- package/dist/esm/diff.js +123 -0
- package/dist/esm/diff.js.map +1 -0
- package/dist/esm/edge.d.ts +41 -0
- package/dist/esm/edge.d.ts.map +1 -0
- package/dist/esm/edge.js +66 -0
- package/dist/esm/edge.js.map +1 -0
- package/dist/esm/graph.d.ts +123 -0
- package/dist/esm/graph.d.ts.map +1 -0
- package/dist/esm/graph.js +301 -0
- package/dist/esm/graph.js.map +1 -0
- package/dist/esm/ideal/add-nodes.d.ts +19 -0
- package/dist/esm/ideal/add-nodes.d.ts.map +1 -0
- package/dist/esm/ideal/add-nodes.js +28 -0
- package/dist/esm/ideal/add-nodes.js.map +1 -0
- package/dist/esm/ideal/append-nodes.d.ts +9 -0
- package/dist/esm/ideal/append-nodes.d.ts.map +1 -0
- package/dist/esm/ideal/append-nodes.js +121 -0
- package/dist/esm/ideal/append-nodes.js.map +1 -0
- package/dist/esm/ideal/build-ideal-from-starting-graph.d.ts +15 -0
- package/dist/esm/ideal/build-ideal-from-starting-graph.d.ts.map +1 -0
- package/dist/esm/ideal/build-ideal-from-starting-graph.js +28 -0
- package/dist/esm/ideal/build-ideal-from-starting-graph.js.map +1 -0
- package/dist/esm/ideal/build.d.ts +32 -0
- package/dist/esm/ideal/build.d.ts.map +1 -0
- package/dist/esm/ideal/build.js +42 -0
- package/dist/esm/ideal/build.js.map +1 -0
- package/dist/esm/ideal/get-importer-specs.d.ts +13 -0
- package/dist/esm/ideal/get-importer-specs.d.ts.map +1 -0
- package/dist/esm/ideal/get-importer-specs.js +76 -0
- package/dist/esm/ideal/get-importer-specs.js.map +1 -0
- package/dist/esm/ideal/remove-nodes.d.ts +7 -0
- package/dist/esm/ideal/remove-nodes.d.ts.map +1 -0
- package/dist/esm/ideal/remove-nodes.js +19 -0
- package/dist/esm/ideal/remove-nodes.js.map +1 -0
- package/dist/esm/ideal/remove-satisfied-specs.d.ts +8 -0
- package/dist/esm/ideal/remove-satisfied-specs.d.ts.map +1 -0
- package/dist/esm/ideal/remove-satisfied-specs.js +35 -0
- package/dist/esm/ideal/remove-satisfied-specs.js.map +1 -0
- package/dist/esm/ideal/types.d.ts +35 -0
- package/dist/esm/ideal/types.d.ts.map +1 -0
- package/dist/esm/ideal/types.js +2 -0
- package/dist/esm/ideal/types.js.map +1 -0
- package/dist/esm/index.d.ts +31 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +26 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lockfile/load-edges.d.ts +5 -0
- package/dist/esm/lockfile/load-edges.d.ts.map +1 -0
- package/dist/esm/lockfile/load-edges.js +40 -0
- package/dist/esm/lockfile/load-edges.js.map +1 -0
- package/dist/esm/lockfile/load-nodes.d.ts +4 -0
- package/dist/esm/lockfile/load-nodes.d.ts.map +1 -0
- package/dist/esm/lockfile/load-nodes.js +28 -0
- package/dist/esm/lockfile/load-nodes.js.map +1 -0
- package/dist/esm/lockfile/load.d.ts +33 -0
- package/dist/esm/lockfile/load.d.ts.map +1 -0
- package/dist/esm/lockfile/load.js +53 -0
- package/dist/esm/lockfile/load.js.map +1 -0
- package/dist/esm/lockfile/save.d.ts +18 -0
- package/dist/esm/lockfile/save.d.ts.map +1 -0
- package/dist/esm/lockfile/save.js +128 -0
- package/dist/esm/lockfile/save.js.map +1 -0
- package/dist/esm/lockfile/types.d.ts +60 -0
- package/dist/esm/lockfile/types.d.ts.map +1 -0
- package/dist/esm/lockfile/types.js +13 -0
- package/dist/esm/lockfile/types.js.map +1 -0
- package/dist/esm/node.d.ts +144 -0
- package/dist/esm/node.d.ts.map +1 -0
- package/dist/esm/node.js +266 -0
- package/dist/esm/node.js.map +1 -0
- package/dist/esm/non-empty-list.d.ts +3 -0
- package/dist/esm/non-empty-list.d.ts.map +1 -0
- package/dist/esm/non-empty-list.js +3 -0
- package/dist/esm/non-empty-list.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/reify/add-edge.d.ts +11 -0
- package/dist/esm/reify/add-edge.d.ts.map +1 -0
- package/dist/esm/reify/add-edge.js +43 -0
- package/dist/esm/reify/add-edge.js.map +1 -0
- package/dist/esm/reify/add-edges.d.ts +6 -0
- package/dist/esm/reify/add-edges.d.ts.map +1 -0
- package/dist/esm/reify/add-edges.js +13 -0
- package/dist/esm/reify/add-edges.js.map +1 -0
- package/dist/esm/reify/add-nodes.d.ts +7 -0
- package/dist/esm/reify/add-nodes.d.ts.map +1 -0
- package/dist/esm/reify/add-nodes.js +37 -0
- package/dist/esm/reify/add-nodes.js.map +1 -0
- package/dist/esm/reify/bin-paths.d.ts +4 -0
- package/dist/esm/reify/bin-paths.d.ts.map +1 -0
- package/dist/esm/reify/bin-paths.js +23 -0
- package/dist/esm/reify/bin-paths.js.map +1 -0
- package/dist/esm/reify/build.d.ts +5 -0
- package/dist/esm/reify/build.d.ts.map +1 -0
- package/dist/esm/reify/build.js +90 -0
- package/dist/esm/reify/build.js.map +1 -0
- package/dist/esm/reify/delete-edge.d.ts +5 -0
- package/dist/esm/reify/delete-edge.d.ts.map +1 -0
- package/dist/esm/reify/delete-edge.js +29 -0
- package/dist/esm/reify/delete-edge.js.map +1 -0
- package/dist/esm/reify/delete-edges.d.ts +5 -0
- package/dist/esm/reify/delete-edges.d.ts.map +1 -0
- package/dist/esm/reify/delete-edges.js +14 -0
- package/dist/esm/reify/delete-edges.js.map +1 -0
- package/dist/esm/reify/delete-nodes.d.ts +5 -0
- package/dist/esm/reify/delete-nodes.d.ts.map +1 -0
- package/dist/esm/reify/delete-nodes.js +12 -0
- package/dist/esm/reify/delete-nodes.js.map +1 -0
- package/dist/esm/reify/index.d.ts +16 -0
- package/dist/esm/reify/index.d.ts.map +1 -0
- package/dist/esm/reify/index.js +85 -0
- package/dist/esm/reify/index.js.map +1 -0
- package/dist/esm/reify/optional-fail.d.ts +16 -0
- package/dist/esm/reify/optional-fail.d.ts.map +1 -0
- package/dist/esm/reify/optional-fail.js +16 -0
- package/dist/esm/reify/optional-fail.js.map +1 -0
- package/dist/esm/reify/rollback.d.ts +5 -0
- package/dist/esm/reify/rollback.d.ts.map +1 -0
- package/dist/esm/reify/rollback.js +24 -0
- package/dist/esm/reify/rollback.js.map +1 -0
- package/dist/esm/reify/update-importers-package-json.d.ts +36 -0
- package/dist/esm/reify/update-importers-package-json.d.ts.map +1 -0
- package/dist/esm/reify/update-importers-package-json.js +95 -0
- package/dist/esm/reify/update-importers-package-json.js.map +1 -0
- package/dist/esm/remove-optional-subgraph.d.ts +34 -0
- package/dist/esm/remove-optional-subgraph.d.ts.map +1 -0
- package/dist/esm/remove-optional-subgraph.js +48 -0
- package/dist/esm/remove-optional-subgraph.js.map +1 -0
- package/dist/esm/stringify-node.d.ts +3 -0
- package/dist/esm/stringify-node.d.ts.map +1 -0
- package/dist/esm/stringify-node.js +24 -0
- package/dist/esm/stringify-node.js.map +1 -0
- package/dist/esm/types.d.ts +39 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/visualization/human-readable-output.d.ts +25 -0
- package/dist/esm/visualization/human-readable-output.d.ts.map +1 -0
- package/dist/esm/visualization/human-readable-output.js +132 -0
- package/dist/esm/visualization/human-readable-output.js.map +1 -0
- package/dist/esm/visualization/json-output.d.ts +37 -0
- package/dist/esm/visualization/json-output.d.ts.map +1 -0
- package/dist/esm/visualization/json-output.js +28 -0
- package/dist/esm/visualization/json-output.js.map +1 -0
- package/dist/esm/visualization/mermaid-output.d.ts +11 -0
- package/dist/esm/visualization/mermaid-output.d.ts.map +1 -0
- package/dist/esm/visualization/mermaid-output.js +68 -0
- package/dist/esm/visualization/mermaid-output.js.map +1 -0
- package/dist/esm/visualization/object-like-output.d.ts +3 -0
- package/dist/esm/visualization/object-like-output.d.ts.map +1 -0
- package/dist/esm/visualization/object-like-output.js +49 -0
- package/dist/esm/visualization/object-like-output.js.map +1 -0
- package/package.json +86 -0
package/dist/esm/diff.js
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { error } from '@vltpkg/error-cause';
|
|
2
|
+
// XXX should file deps *always* be considered changed?
|
|
3
|
+
// unless the thing containing it wasn't possibly changed because it's inside
|
|
4
|
+
// a dep that didn't change?
|
|
5
|
+
// Same with remote deps
|
|
6
|
+
const kCustomInspect = Symbol.for('nodejs.util.inspect.custom');
|
|
7
|
+
/**
|
|
8
|
+
* A Diff object is a representation of a set of changes from one
|
|
9
|
+
* graph to another, typically from the actual graph as it is reified
|
|
10
|
+
* on disk, to an intended ideal graph.
|
|
11
|
+
*
|
|
12
|
+
* The naming convention can get a bit confusing here, because it's a
|
|
13
|
+
* set of directed changes from one set of directed objects to another.
|
|
14
|
+
*
|
|
15
|
+
* Within the context the Diff object, `from` is the Graph we're coming from,
|
|
16
|
+
* and `to` is the Graph we're trying to create.
|
|
17
|
+
*/
|
|
18
|
+
export class Diff {
|
|
19
|
+
from;
|
|
20
|
+
to;
|
|
21
|
+
projectRoot;
|
|
22
|
+
/**
|
|
23
|
+
* If changes need to be made later for failures of optional nodes,
|
|
24
|
+
* set this flag so that we know to call graph.gc() at the appropriate time.
|
|
25
|
+
*/
|
|
26
|
+
hadOptionalFailures = false;
|
|
27
|
+
/**
|
|
28
|
+
* Collection of nodes to add and delete
|
|
29
|
+
*/
|
|
30
|
+
nodes = {
|
|
31
|
+
/** Nodes in the `to` graph that are not in the `from` graph */
|
|
32
|
+
add: new Set(),
|
|
33
|
+
/** Nodes in the `from` graph that are not in the `to` graph */
|
|
34
|
+
delete: new Set(),
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Collection of nodes to add and delete
|
|
38
|
+
*/
|
|
39
|
+
edges = {
|
|
40
|
+
/** Edges in the `to` graph that are not found in the `from` graph */
|
|
41
|
+
add: new Set(),
|
|
42
|
+
/** Edges in the `from` graph that are not found in the `to` graph */
|
|
43
|
+
delete: new Set(),
|
|
44
|
+
};
|
|
45
|
+
get [Symbol.toStringTag]() {
|
|
46
|
+
return '@vltpkg/graph.Diff';
|
|
47
|
+
}
|
|
48
|
+
constructor(from, to) {
|
|
49
|
+
this.from = from;
|
|
50
|
+
this.to = to;
|
|
51
|
+
this.projectRoot = from.projectRoot;
|
|
52
|
+
if (to.projectRoot !== from.projectRoot) {
|
|
53
|
+
throw error('projectRoot mismatch in Graph diff', {
|
|
54
|
+
wanted: from.projectRoot,
|
|
55
|
+
found: to.projectRoot,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
for (const [id, node] of this.from.nodes) {
|
|
59
|
+
if (!this.to.nodes.get(id)?.equals(node)) {
|
|
60
|
+
this.nodes.delete.add(node);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
for (const [id, node] of this.to.nodes) {
|
|
64
|
+
if (!this.from.nodes.get(id)?.equals(node)) {
|
|
65
|
+
this.nodes.add.add(node);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
for (const edge of this.to.edges) {
|
|
69
|
+
// the node with this dep, in the from graph
|
|
70
|
+
const fromNode = this.from.nodes.get(edge.from.id);
|
|
71
|
+
const fromEdge = fromNode?.edgesOut.get(edge.spec.name);
|
|
72
|
+
if (fromEdge?.to?.id === edge.to?.id)
|
|
73
|
+
continue;
|
|
74
|
+
if (fromEdge?.to)
|
|
75
|
+
this.edges.delete.add(fromEdge);
|
|
76
|
+
if (edge.to)
|
|
77
|
+
this.edges.add.add(edge);
|
|
78
|
+
}
|
|
79
|
+
for (const edge of this.from.edges) {
|
|
80
|
+
// the node with this dep, in the to graph
|
|
81
|
+
const toNode = this.to.nodes.get(edge.from.id);
|
|
82
|
+
const toEdge = toNode?.edgesOut.get(edge.spec.name);
|
|
83
|
+
if (toEdge?.to?.id === edge.to?.id)
|
|
84
|
+
continue;
|
|
85
|
+
if (edge.to)
|
|
86
|
+
this.edges.delete.add(edge);
|
|
87
|
+
if (toEdge?.to)
|
|
88
|
+
this.edges.add.add(toEdge);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
[kCustomInspect](_, options) {
|
|
92
|
+
const red = options?.colors ? ['\x1b[31m', '\x1b[m'] : ['', ''];
|
|
93
|
+
const green = options?.colors ? ['\x1b[32m', '\x1b[m'] : ['', ''];
|
|
94
|
+
const lines = [];
|
|
95
|
+
for (const node of this.nodes.add) {
|
|
96
|
+
lines.push(`+ ${node.id}`);
|
|
97
|
+
}
|
|
98
|
+
for (const node of this.nodes.delete) {
|
|
99
|
+
lines.push(`- ${node.id}`);
|
|
100
|
+
}
|
|
101
|
+
for (const edge of this.edges.add) {
|
|
102
|
+
/* c8 ignore next */
|
|
103
|
+
const to = edge.to?.id ?? '';
|
|
104
|
+
lines.push(`+ ${edge.from.id} ${edge.type} ${edge.spec} ${to}`.trim());
|
|
105
|
+
}
|
|
106
|
+
for (const edge of this.edges.delete) {
|
|
107
|
+
/* c8 ignore next */
|
|
108
|
+
const to = edge.to?.id ?? '';
|
|
109
|
+
lines.push(`- ${edge.from.id} ${edge.type} ${edge.spec} ${to}`.trim());
|
|
110
|
+
}
|
|
111
|
+
const wrap = (s, c) => c.join(s);
|
|
112
|
+
const color = options?.colors ?
|
|
113
|
+
(s) => wrap(s, s.startsWith('+') ? green : red)
|
|
114
|
+
: (s) => s;
|
|
115
|
+
return `${this[Symbol.toStringTag]} {
|
|
116
|
+
${lines
|
|
117
|
+
.sort((a, b) => a.substring(1).localeCompare(b.substring(1), 'en'))
|
|
118
|
+
.map(s => ' ' + color(s))
|
|
119
|
+
.join('\n')}
|
|
120
|
+
}`;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAM3C,uDAAuD;AACvD,6EAA6E;AAC7E,4BAA4B;AAC5B,wBAAwB;AAExB,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;AAE/D;;;;;;;;;;GAUG;AACH,MAAM,OAAO,IAAI;IACf,IAAI,CAAO;IACX,EAAE,CAAO;IAET,WAAW,CAAQ;IAEnB;;;OAGG;IACH,mBAAmB,GAAG,KAAK,CAAA;IAE3B;;OAEG;IACH,KAAK,GAAG;QACN,+DAA+D;QAC/D,GAAG,EAAE,IAAI,GAAG,EAAQ;QACpB,+DAA+D;QAC/D,MAAM,EAAE,IAAI,GAAG,EAAQ;KACxB,CAAA;IAED;;OAEG;IACH,KAAK,GAAG;QACN,qEAAqE;QACrE,GAAG,EAAE,IAAI,GAAG,EAAQ;QACpB,qEAAqE;QACrE,MAAM,EAAE,IAAI,GAAG,EAAQ;KACxB,CAAA;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtB,OAAO,oBAAoB,CAAA;IAC7B,CAAC;IAED,YAAY,IAAW,EAAE,EAAS;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QACZ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACnC,IAAI,EAAE,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,MAAM,KAAK,CAAC,oCAAoC,EAAE;gBAChD,MAAM,EAAE,IAAI,CAAC,WAAW;gBACxB,KAAK,EAAE,EAAE,CAAC,WAAW;aACtB,CAAC,CAAA;QACJ,CAAC;QAED,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC7B,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC1B,CAAC;QACH,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YACjC,6CAA6C;YAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAClD,MAAM,QAAQ,GAAG,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACvD,IAAI,QAAQ,EAAE,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE,EAAE;gBAAE,SAAQ;YAC9C,IAAI,QAAQ,EAAE,EAAE;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACjD,IAAI,IAAI,CAAC,EAAE;gBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACvC,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACnC,0CAA0C;YAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC9C,MAAM,MAAM,GAAG,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACnD,IAAI,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE,EAAE;gBAAE,SAAQ;YAC5C,IAAI,IAAI,CAAC,EAAE;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACxC,IAAI,MAAM,EAAE,EAAE;gBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;IAED,CAAC,cAAc,CAAC,CAAC,CAAS,EAAE,OAAwB;QAClD,MAAM,GAAG,GACP,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QACrD,MAAM,KAAK,GACT,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QACrD,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;QAC5B,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;QAC5B,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YAClC,oBAAoB;YACpB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;YAC5B,KAAK,CAAC,IAAI,CACR,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAC3D,CAAA;QACH,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACrC,oBAAoB;YACpB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;YAC5B,KAAK,CAAC,IAAI,CACR,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAC3D,CAAA;QACH,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1D,MAAM,KAAK,GACT,OAAO,EAAE,MAAM,CAAC,CAAC;YACf,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;YACzD,CAAC,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAA;QAEpB,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;EACpC,KAAK;aACJ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;aAClE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;aACzB,IAAI,CAAC,IAAI,CAAC;EACX,CAAA;IACA,CAAC;CACF","sourcesContent":["import { error } from '@vltpkg/error-cause'\nimport { InspectOptions } from 'node:util'\nimport { Edge } from './edge.js'\nimport { Graph } from './graph.js'\nimport { Node } from './node.js'\n\n// XXX should file deps *always* be considered changed?\n// unless the thing containing it wasn't possibly changed because it's inside\n// a dep that didn't change?\n// Same with remote deps\n\nconst kCustomInspect = Symbol.for('nodejs.util.inspect.custom')\n\n/**\n * A Diff object is a representation of a set of changes from one\n * graph to another, typically from the actual graph as it is reified\n * on disk, to an intended ideal graph.\n *\n * The naming convention can get a bit confusing here, because it's a\n * set of directed changes from one set of directed objects to another.\n *\n * Within the context the Diff object, `from` is the Graph we're coming from,\n * and `to` is the Graph we're trying to create.\n */\nexport class Diff {\n from: Graph\n to: Graph\n\n projectRoot: string\n\n /**\n * If changes need to be made later for failures of optional nodes,\n * set this flag so that we know to call graph.gc() at the appropriate time.\n */\n hadOptionalFailures = false\n\n /**\n * Collection of nodes to add and delete\n */\n nodes = {\n /** Nodes in the `to` graph that are not in the `from` graph */\n add: new Set<Node>(),\n /** Nodes in the `from` graph that are not in the `to` graph */\n delete: new Set<Node>(),\n }\n\n /**\n * Collection of nodes to add and delete\n */\n edges = {\n /** Edges in the `to` graph that are not found in the `from` graph */\n add: new Set<Edge>(),\n /** Edges in the `from` graph that are not found in the `to` graph */\n delete: new Set<Edge>(),\n }\n\n get [Symbol.toStringTag]() {\n return '@vltpkg/graph.Diff'\n }\n\n constructor(from: Graph, to: Graph) {\n this.from = from\n this.to = to\n this.projectRoot = from.projectRoot\n if (to.projectRoot !== from.projectRoot) {\n throw error('projectRoot mismatch in Graph diff', {\n wanted: from.projectRoot,\n found: to.projectRoot,\n })\n }\n\n for (const [id, node] of this.from.nodes) {\n if (!this.to.nodes.get(id)?.equals(node)) {\n this.nodes.delete.add(node)\n }\n }\n\n for (const [id, node] of this.to.nodes) {\n if (!this.from.nodes.get(id)?.equals(node)) {\n this.nodes.add.add(node)\n }\n }\n\n for (const edge of this.to.edges) {\n // the node with this dep, in the from graph\n const fromNode = this.from.nodes.get(edge.from.id)\n const fromEdge = fromNode?.edgesOut.get(edge.spec.name)\n if (fromEdge?.to?.id === edge.to?.id) continue\n if (fromEdge?.to) this.edges.delete.add(fromEdge)\n if (edge.to) this.edges.add.add(edge)\n }\n for (const edge of this.from.edges) {\n // the node with this dep, in the to graph\n const toNode = this.to.nodes.get(edge.from.id)\n const toEdge = toNode?.edgesOut.get(edge.spec.name)\n if (toEdge?.to?.id === edge.to?.id) continue\n if (edge.to) this.edges.delete.add(edge)\n if (toEdge?.to) this.edges.add.add(toEdge)\n }\n }\n\n [kCustomInspect](_: number, options?: InspectOptions): string {\n const red: [string, string] =\n options?.colors ? ['\\x1b[31m', '\\x1b[m'] : ['', '']\n const green: [string, string] =\n options?.colors ? ['\\x1b[32m', '\\x1b[m'] : ['', '']\n const lines: string[] = []\n for (const node of this.nodes.add) {\n lines.push(`+ ${node.id}`)\n }\n for (const node of this.nodes.delete) {\n lines.push(`- ${node.id}`)\n }\n for (const edge of this.edges.add) {\n /* c8 ignore next */\n const to = edge.to?.id ?? ''\n lines.push(\n `+ ${edge.from.id} ${edge.type} ${edge.spec} ${to}`.trim(),\n )\n }\n for (const edge of this.edges.delete) {\n /* c8 ignore next */\n const to = edge.to?.id ?? ''\n lines.push(\n `- ${edge.from.id} ${edge.type} ${edge.spec} ${to}`.trim(),\n )\n }\n const wrap = (s: string, c: [string, string]) => c.join(s)\n const color =\n options?.colors ?\n (s: string) => wrap(s, s.startsWith('+') ? green : red)\n : (s: string) => s\n\n return `${this[Symbol.toStringTag]} {\n${lines\n .sort((a, b) => a.substring(1).localeCompare(b.substring(1), 'en'))\n .map(s => ' ' + color(s))\n .join('\\n')}\n}`\n }\n}\n"]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Spec } from '@vltpkg/spec';
|
|
2
|
+
import { InspectOptions } from 'util';
|
|
3
|
+
import { DependencyTypeShort } from './dependencies.js';
|
|
4
|
+
import { Node } from './node.js';
|
|
5
|
+
import { EdgeLike } from './types.js';
|
|
6
|
+
declare const kCustomInspect: unique symbol;
|
|
7
|
+
export declare class Edge implements EdgeLike {
|
|
8
|
+
get [Symbol.toStringTag](): string;
|
|
9
|
+
[kCustomInspect](_: number, options: InspectOptions): string;
|
|
10
|
+
/**
|
|
11
|
+
* The Node this Edge is connecting from, this is usually the dependent.
|
|
12
|
+
*/
|
|
13
|
+
from: Node;
|
|
14
|
+
/**
|
|
15
|
+
* The node this Edge is connecting to, this is usually a direct dependency.
|
|
16
|
+
*/
|
|
17
|
+
to?: Node;
|
|
18
|
+
/**
|
|
19
|
+
* What type of dependency relationship `from` and `to` nodes have.
|
|
20
|
+
*/
|
|
21
|
+
type: DependencyTypeShort;
|
|
22
|
+
/**
|
|
23
|
+
* The defined spec value for `to` as parsed from the dependent metadata.
|
|
24
|
+
*/
|
|
25
|
+
spec: Spec;
|
|
26
|
+
constructor(type: DependencyTypeShort, spec: Spec, from: Node, to?: Node);
|
|
27
|
+
/**
|
|
28
|
+
* The name of the dependency `to` as defined in the dependent metadata.
|
|
29
|
+
*/
|
|
30
|
+
get name(): string;
|
|
31
|
+
/**
|
|
32
|
+
* This edge was defined as part of a `devDependencies` in `package.json`
|
|
33
|
+
*/
|
|
34
|
+
get dev(): boolean;
|
|
35
|
+
get optional(): boolean;
|
|
36
|
+
get peer(): boolean;
|
|
37
|
+
get peerOptional(): boolean;
|
|
38
|
+
valid(): boolean;
|
|
39
|
+
}
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=edge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge.d.ts","sourceRoot":"","sources":["../../src/edge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,EAAW,cAAc,EAAE,MAAM,MAAM,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,QAAA,MAAM,cAAc,eAA2C,CAAA;AAE/D,qBAAa,IAAK,YAAW,QAAQ;IACnC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAEvB;IAED,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc;IAanD;;OAEG;IACH,IAAI,EAAE,IAAI,CAAA;IAEV;;OAEG;IACH,EAAE,CAAC,EAAE,IAAI,CAAA;IAET;;OAEG;IACH,IAAI,EAAE,mBAAmB,CAAA;IAEzB;;OAEG;IACH,IAAI,EAAE,IAAI,CAAA;gBAGR,IAAI,EAAE,mBAAmB,EACzB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,EACV,EAAE,CAAC,EAAE,IAAI;IAQX;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,GAAG,IAAI,OAAO,CAEjB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,IAAI,IAAI,OAAO,CAElB;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,KAAK,IAAI,OAAO;CAUjB"}
|
package/dist/esm/edge.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { satisfies } from '@vltpkg/satisfies';
|
|
2
|
+
import { inspect } from 'util';
|
|
3
|
+
const kCustomInspect = Symbol.for('nodejs.util.inspect.custom');
|
|
4
|
+
export class Edge {
|
|
5
|
+
get [Symbol.toStringTag]() {
|
|
6
|
+
return '@vltpkg/graph.Edge';
|
|
7
|
+
}
|
|
8
|
+
[kCustomInspect](_, options) {
|
|
9
|
+
const str = inspect({
|
|
10
|
+
from: this.from.id,
|
|
11
|
+
type: this.type,
|
|
12
|
+
spec: String(this.spec),
|
|
13
|
+
to: this.to?.id,
|
|
14
|
+
}, options);
|
|
15
|
+
return `${this[Symbol.toStringTag]} ${str}`;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The Node this Edge is connecting from, this is usually the dependent.
|
|
19
|
+
*/
|
|
20
|
+
from;
|
|
21
|
+
/**
|
|
22
|
+
* The node this Edge is connecting to, this is usually a direct dependency.
|
|
23
|
+
*/
|
|
24
|
+
to;
|
|
25
|
+
/**
|
|
26
|
+
* What type of dependency relationship `from` and `to` nodes have.
|
|
27
|
+
*/
|
|
28
|
+
type;
|
|
29
|
+
/**
|
|
30
|
+
* The defined spec value for `to` as parsed from the dependent metadata.
|
|
31
|
+
*/
|
|
32
|
+
spec;
|
|
33
|
+
constructor(type, spec, from, to) {
|
|
34
|
+
this.from = from;
|
|
35
|
+
this.to = to;
|
|
36
|
+
this.type = type;
|
|
37
|
+
this.spec = spec;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The name of the dependency `to` as defined in the dependent metadata.
|
|
41
|
+
*/
|
|
42
|
+
get name() {
|
|
43
|
+
return this.spec.name;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* This edge was defined as part of a `devDependencies` in `package.json`
|
|
47
|
+
*/
|
|
48
|
+
get dev() {
|
|
49
|
+
return this.type === 'dev';
|
|
50
|
+
}
|
|
51
|
+
get optional() {
|
|
52
|
+
return this.type === 'peerOptional' || this.type === 'optional';
|
|
53
|
+
}
|
|
54
|
+
get peer() {
|
|
55
|
+
return this.type === 'peer' || this.type === 'peerOptional';
|
|
56
|
+
}
|
|
57
|
+
get peerOptional() {
|
|
58
|
+
return this.type === 'peerOptional';
|
|
59
|
+
}
|
|
60
|
+
valid() {
|
|
61
|
+
return !this.to ?
|
|
62
|
+
this.optional
|
|
63
|
+
: satisfies(this.to.id, this.spec, this.from.location, this.from.projectRoot);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=edge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge.js","sourceRoot":"","sources":["../../src/edge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE7C,OAAO,EAAE,OAAO,EAAkB,MAAM,MAAM,CAAA;AAK9C,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;AAE/D,MAAM,OAAO,IAAI;IACf,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtB,OAAO,oBAAoB,CAAA;IAC7B,CAAC;IAED,CAAC,cAAc,CAAC,CAAC,CAAS,EAAE,OAAuB;QACjD,MAAM,GAAG,GAAG,OAAO,CACjB;YACE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;YAClB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACvB,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE;SAChB,EACD,OAAO,CACR,CAAA;QACD,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,GAAG,EAAE,CAAA;IAC7C,CAAC;IAED;;OAEG;IACH,IAAI,CAAM;IAEV;;OAEG;IACH,EAAE,CAAO;IAET;;OAEG;IACH,IAAI,CAAqB;IAEzB;;OAEG;IACH,IAAI,CAAM;IAEV,YACE,IAAyB,EACzB,IAAU,EACV,IAAU,EACV,EAAS;QAET,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QACZ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,CAAA;IAC5B,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,IAAI,KAAK,cAAc,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAA;IACjE,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,CAAA;IAC7D,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,IAAI,KAAK,cAAc,CAAA;IACrC,CAAC;IAED,KAAK;QACH,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACb,IAAI,CAAC,QAAQ;YACf,CAAC,CAAC,SAAS,CACP,IAAI,CAAC,EAAE,CAAC,EAAE,EACV,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,IAAI,CAAC,QAAQ,EAClB,IAAI,CAAC,IAAI,CAAC,WAAW,CACtB,CAAA;IACP,CAAC;CACF","sourcesContent":["import { satisfies } from '@vltpkg/satisfies'\nimport { Spec } from '@vltpkg/spec'\nimport { inspect, InspectOptions } from 'util'\nimport { DependencyTypeShort } from './dependencies.js'\nimport { Node } from './node.js'\nimport { EdgeLike } from './types.js'\n\nconst kCustomInspect = Symbol.for('nodejs.util.inspect.custom')\n\nexport class Edge implements EdgeLike {\n get [Symbol.toStringTag]() {\n return '@vltpkg/graph.Edge'\n }\n\n [kCustomInspect](_: number, options: InspectOptions) {\n const str = inspect(\n {\n from: this.from.id,\n type: this.type,\n spec: String(this.spec),\n to: this.to?.id,\n },\n options,\n )\n return `${this[Symbol.toStringTag]} ${str}`\n }\n\n /**\n * The Node this Edge is connecting from, this is usually the dependent.\n */\n from: Node\n\n /**\n * The node this Edge is connecting to, this is usually a direct dependency.\n */\n to?: Node\n\n /**\n * What type of dependency relationship `from` and `to` nodes have.\n */\n type: DependencyTypeShort\n\n /**\n * The defined spec value for `to` as parsed from the dependent metadata.\n */\n spec: Spec\n\n constructor(\n type: DependencyTypeShort,\n spec: Spec,\n from: Node,\n to?: Node,\n ) {\n this.from = from\n this.to = to\n this.type = type\n this.spec = spec\n }\n\n /**\n * The name of the dependency `to` as defined in the dependent metadata.\n */\n get name() {\n return this.spec.name\n }\n\n /**\n * This edge was defined as part of a `devDependencies` in `package.json`\n */\n get dev(): boolean {\n return this.type === 'dev'\n }\n\n get optional(): boolean {\n return this.type === 'peerOptional' || this.type === 'optional'\n }\n\n get peer(): boolean {\n return this.type === 'peer' || this.type === 'peerOptional'\n }\n\n get peerOptional(): boolean {\n return this.type === 'peerOptional'\n }\n\n valid(): boolean {\n return !this.to ?\n this.optional\n : satisfies(\n this.to.id,\n this.spec,\n this.from.location,\n this.from.projectRoot,\n )\n }\n}\n"]}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { type DepID } from '@vltpkg/dep-id';
|
|
2
|
+
import { Spec, type SpecOptions } from '@vltpkg/spec';
|
|
3
|
+
import { type Manifest } from '@vltpkg/types';
|
|
4
|
+
import { Monorepo } from '@vltpkg/workspaces';
|
|
5
|
+
import { InspectOptions } from 'util';
|
|
6
|
+
import { DependencyTypeShort } from './dependencies.js';
|
|
7
|
+
import { type Edge } from './edge.js';
|
|
8
|
+
import { Node } from './node.js';
|
|
9
|
+
import { GraphLike, NodeLike } from './types.js';
|
|
10
|
+
declare const kCustomInspect: unique symbol;
|
|
11
|
+
export type ManifestInventory = Map<DepID, Manifest>;
|
|
12
|
+
export type GraphOptions = SpecOptions & {
|
|
13
|
+
/**
|
|
14
|
+
* The main importer manifest info.
|
|
15
|
+
*/
|
|
16
|
+
mainManifest: Manifest;
|
|
17
|
+
/**
|
|
18
|
+
* An inventory of seen manifests.
|
|
19
|
+
*/
|
|
20
|
+
manifests?: ManifestInventory;
|
|
21
|
+
/**
|
|
22
|
+
* A {@link Monorepo} object, for managing workspaces
|
|
23
|
+
*/
|
|
24
|
+
monorepo?: Monorepo;
|
|
25
|
+
/**
|
|
26
|
+
* Root of the project this graph represents
|
|
27
|
+
*/
|
|
28
|
+
projectRoot: string;
|
|
29
|
+
};
|
|
30
|
+
export declare class Graph implements GraphLike {
|
|
31
|
+
#private;
|
|
32
|
+
get [Symbol.toStringTag](): string;
|
|
33
|
+
/**
|
|
34
|
+
* A {@link Monorepo} instance, used for managing workspaces.
|
|
35
|
+
*/
|
|
36
|
+
monorepo?: Monorepo;
|
|
37
|
+
/**
|
|
38
|
+
* An inventory with all manifests related to an install.
|
|
39
|
+
*/
|
|
40
|
+
manifests: ManifestInventory;
|
|
41
|
+
/**
|
|
42
|
+
* A set of all edges in this graph.
|
|
43
|
+
*/
|
|
44
|
+
edges: Set<Edge>;
|
|
45
|
+
/**
|
|
46
|
+
* Map registered dep ids to the node that represent them in the graph.
|
|
47
|
+
*/
|
|
48
|
+
nodes: Map<DepID, Node>;
|
|
49
|
+
/**
|
|
50
|
+
* Map of nodes by their name
|
|
51
|
+
*/
|
|
52
|
+
nodesByName: Map<string, Set<Node>>;
|
|
53
|
+
/**
|
|
54
|
+
* Cached resolutions for spec lookups
|
|
55
|
+
*/
|
|
56
|
+
resolutions: Map<string, Node>;
|
|
57
|
+
/**
|
|
58
|
+
* Reverse map of resolutions
|
|
59
|
+
*/
|
|
60
|
+
resolutionsReverse: Map<Node, Set<string>>;
|
|
61
|
+
/**
|
|
62
|
+
* A set of importer nodes in this graph.
|
|
63
|
+
*/
|
|
64
|
+
importers: Set<Node>;
|
|
65
|
+
/**
|
|
66
|
+
* The {@link Node} that represents the project root `package.json`.
|
|
67
|
+
*/
|
|
68
|
+
mainImporter: Node;
|
|
69
|
+
/**
|
|
70
|
+
* A set of extraneous dependencies found when building the graph.
|
|
71
|
+
*/
|
|
72
|
+
extraneousDependencies: Set<Edge>;
|
|
73
|
+
/**
|
|
74
|
+
* The root of the project this graph represents
|
|
75
|
+
*/
|
|
76
|
+
projectRoot: string;
|
|
77
|
+
constructor(options: GraphOptions);
|
|
78
|
+
/**
|
|
79
|
+
* Delete all nodes that are unreachable from the importers.
|
|
80
|
+
* The collection of deleted nodes is returned.
|
|
81
|
+
*
|
|
82
|
+
* NOTE: This can be extremely slow for large graphs, and is almost always
|
|
83
|
+
* unnecessary! Only call when it is known that some unreachable nodes may
|
|
84
|
+
* have been created, for example when deleting the unneeded subgraph when an
|
|
85
|
+
* optional node fails to resolve/install.
|
|
86
|
+
*/
|
|
87
|
+
gc(): Map<DepID, Node>;
|
|
88
|
+
/**
|
|
89
|
+
* Create a new edge between two nodes of the graph in case both exist,
|
|
90
|
+
* in case the destination node does not exists, then a dangling edge,
|
|
91
|
+
* pointing to nothing will be created to represent that missing dependency.
|
|
92
|
+
*/
|
|
93
|
+
addEdge(type: DependencyTypeShort, spec: Spec, from: NodeLike, to?: NodeLike): Edge;
|
|
94
|
+
/**
|
|
95
|
+
* Find an existing node to satisfy a dependency
|
|
96
|
+
*/
|
|
97
|
+
findResolution(spec: Spec, fromNode: Node): Node | undefined;
|
|
98
|
+
/**
|
|
99
|
+
* Create a new node in the graph.
|
|
100
|
+
*/
|
|
101
|
+
addNode(id?: DepID, manifest?: Manifest, spec?: Spec, name?: string, version?: string): Node;
|
|
102
|
+
/**
|
|
103
|
+
* Place a new package into the graph representation, creating the new
|
|
104
|
+
* edges and possibly new nodes that are to be expected when traversing
|
|
105
|
+
* the graph in a top-down direction, e.g: from importers to leafs.
|
|
106
|
+
*
|
|
107
|
+
* For different uses that are not a direct top-down traversal of the graph
|
|
108
|
+
* consider using `addNode()` and `addEdge()` instead.
|
|
109
|
+
*/
|
|
110
|
+
placePackage(fromNode: Node, depType: DependencyTypeShort, spec: Spec, manifest?: Manifest, id?: DepID): Node | undefined;
|
|
111
|
+
/**
|
|
112
|
+
* Removes a node and its relevant edges from the graph.
|
|
113
|
+
*
|
|
114
|
+
* If a replacement is provided, then any edges that were previously
|
|
115
|
+
* pointing to the removed node will be directed to the replacement,
|
|
116
|
+
* if it is valid to do so.
|
|
117
|
+
*/
|
|
118
|
+
removeNode(node: Node, replacement?: Node): void;
|
|
119
|
+
toJSON(): import("./index.js").LockfileData;
|
|
120
|
+
[kCustomInspect](_: number, options: InspectOptions): string;
|
|
121
|
+
}
|
|
122
|
+
export {};
|
|
123
|
+
//# sourceMappingURL=graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAGlE,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAW,cAAc,EAAE,MAAM,MAAM,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,WAAW,CAAA;AAErC,OAAO,EAAE,IAAI,EAAe,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAEhD,QAAA,MAAM,cAAc,eAA2C,CAAA;AAM/D,MAAM,MAAM,iBAAiB,GAAG,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;AAEpD,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG;IACvC;;OAEG;IACH,YAAY,EAAE,QAAQ,CAAA;IACtB;;OAEG;IACH,SAAS,CAAC,EAAE,iBAAiB,CAAA;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,qBAAa,KAAM,YAAW,SAAS;;IACrC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAEvB;IAMD;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAA;IAEnB;;OAEG;IACH,SAAS,EAAE,iBAAiB,CAAA;IAE5B;;OAEG;IACH,KAAK,YAAkB;IAEvB;;OAEG;IACH,KAAK,mBAAyB;IAE9B;;OAEG;IACH,WAAW,yBAA+B;IAE1C;;OAEG;IACH,WAAW,oBAA0B;IAErC;;OAEG;IACH,kBAAkB,yBAA+B;IAEjD;;OAEG;IACH,SAAS,YAAkB;IAE3B;;OAEG;IACH,YAAY,EAAE,IAAI,CAAA;IAElB;;OAEG;IACH,sBAAsB,YAAkB;IAExC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;gBAEP,OAAO,EAAE,YAAY;IA+CjC;;;;;;;;OAQG;IACH,EAAE;IAqBF;;;;OAIG;IACH,OAAO,CACL,IAAI,EAAE,mBAAmB,EACzB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,QAAQ,EACd,EAAE,CAAC,EAAE,QAAQ;IAmCf;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI;IA4BzC;;OAEG;IACH,OAAO,CACL,EAAE,CAAC,EAAE,KAAK,EACV,QAAQ,CAAC,EAAE,QAAQ,EACnB,IAAI,CAAC,EAAE,IAAI,EACX,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM;IA+BlB;;;;;;;OAOG;IACH,YAAY,CACV,QAAQ,EAAE,IAAI,EACd,OAAO,EAAE,mBAAmB,EAC5B,IAAI,EAAE,IAAI,EACV,QAAQ,CAAC,EAAE,QAAQ,EACnB,EAAE,CAAC,EAAE,KAAK;IAkDZ;;;;;;OAMG;IACH,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,IAAI;IAgCzC,MAAM;IAQN,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc;CAIpD"}
|