@teambit/graph 1.0.540 → 1.0.542
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/component-id-graph.js +1 -1
- package/dist/component-id-graph.js.map +1 -1
- package/dist/graph-cmd.d.ts +11 -8
- package/dist/graph-cmd.js +54 -89
- package/dist/graph-cmd.js.map +1 -1
- package/dist/graph.main.runtime.d.ts +8 -0
- package/dist/graph.main.runtime.js +61 -1
- package/dist/graph.main.runtime.js.map +1 -1
- package/dist/{preview-1739217052105.js → preview-1739330417900.js} +2 -2
- package/package.json +11 -12
@@ -171,7 +171,7 @@ class ComponentIdGraph extends _graph().Graph {
|
|
171
171
|
/**
|
172
172
|
* overrides the super class to eliminate non-seeders components
|
173
173
|
*/
|
174
|
-
findCycles(graph, includeDeps = false) {
|
174
|
+
findCycles(graph = this, includeDeps = false) {
|
175
175
|
const cycles = super.findCycles(graph);
|
176
176
|
// reverse the order to show a more intuitive cycle order. from the dependent to the dependency.
|
177
177
|
cycles.forEach(cycle => cycle.reverse());
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_componentId","data","require","_graph","_graphlib","_interopRequireDefault","_lodash","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ComponentIdGraph","Graph","constructor","nodes","edges","graphLib","_graphLib","GraphLib","forEach","node","setNode","id","toString","edge","setEdge","sourceId","targetId","attr","create","findIdsFromSourcesToTargets","sources","targets","through","removeVerFromIdStr","idStr","split","sourcesStr","map","s","toStringWithoutVersion","targetsStr","allFlattened","source","successors","flat","allFlattenedIds","uniq","f","results","idWithNoVer","includes","allSuccessors","allSuccessorsWithNoVersion","find","push","componentIds","getNodes","n","length","resultsWithThrough","throughStr","allGraph","subgraph","allGraphWithNoVersion","every","findAllPathsFromSourcesToTargets","findAllPathsBFS","start","end","paths","visited","Set","queue","path","shift","add","outEdges","successor","has","allPaths","filter","pathWithVer","pathWithoutVer","p","filtered","firstDep","sort","a","b","findCycles","graph","includeDeps","cycles","cycle","reverse","shouldLimitToSeedersOnly","seederIdsStr","seederIds","cyclesWithSeeders","some","cycleIdStr","buildFromCleargraph","runtimeOnly","successorsSubgraph","edgeFilter","getDependenciesInfo","dijkstraResults","alg","dijkstra","dependencies","keys","distance","Infinity","predecessor","dependencyType","depth","parent","getDependenciesAsObjectTree","depsInfo","ComponentID","fromString","populateTreeItems","treeItems","children","depInfo","child","compId","label","currentNodes","tree","exports"],"sources":["component-id-graph.ts"],"sourcesContent":["import { ComponentID } from '@teambit/component-id';\nimport { Graph, Node, Edge } from '@teambit/graph.cleargraph';\nimport type { DependenciesInfo } from '@teambit/legacy.dependency-graph';\nimport GraphLib from 'graphlib';\nimport { uniq } from 'lodash';\n\nexport type DepEdgeType = 'prod' | 'dev' | 'ext' | 'peer';\n\ntype ComponentIdNode = Node<ComponentID>;\ntype DependencyEdge = Edge<DepEdgeType>;\nexport type CompIdGraph = Graph<ComponentID, DepEdgeType>;\n\nexport class ComponentIdGraph extends Graph<ComponentID, DepEdgeType> {\n private _graphLib: GraphLib.Graph;\n seederIds: ComponentID[] = []; // component IDs that started the graph. (if from workspace, the .bitmap ids normally)\n constructor(nodes: ComponentIdNode[] = [], edges: DependencyEdge[] = []) {\n super(nodes, edges);\n }\n\n get graphLib() {\n if (!this._graphLib) {\n // convert clearGraph to graphLib\n this._graphLib = new GraphLib.Graph();\n this.nodes.forEach((node) => {\n this._graphLib.setNode(node.id.toString());\n });\n this.edges.forEach((edge) => {\n this._graphLib.setEdge(edge.sourceId.toString(), edge.targetId.toString(), edge.attr);\n });\n }\n return this._graphLib;\n }\n\n protected create(nodes: ComponentIdNode[] = [], edges: DependencyEdge[] = []): this {\n return new ComponentIdGraph(nodes, edges) as this;\n }\n\n /**\n * check all the routes from the sources to targets and return the components found during this traversal.\n * e.g.\n * A -> B -> C -> N.\n * A -> E -> N.\n * B -> F -> G.\n * given source: A, targets: N. The results will be: [B, C, E].\n *\n * if through is provided, it will only return the components that are connected to the through components.\n * with the example above, if through is B, the results will be: [B, C].\n */\n findIdsFromSourcesToTargets(sources: ComponentID[], targets: ComponentID[], through?: ComponentID[]): ComponentID[] {\n const removeVerFromIdStr = (idStr: string) => idStr.split('@')[0];\n const sourcesStr = sources.map((s) => s.toStringWithoutVersion());\n const targetsStr = targets.map((t) => t.toStringWithoutVersion());\n const allFlattened = sources.map((source) => this.successors(source.toString())).flat();\n const allFlattenedIds = uniq(allFlattened.map((f) => f.id));\n const results: string[] = [];\n allFlattenedIds.forEach((id) => {\n const idWithNoVer = removeVerFromIdStr(id);\n if (sourcesStr.includes(idWithNoVer) || targetsStr.includes(idWithNoVer)) return;\n const allSuccessors = this.successors(id);\n const allSuccessorsWithNoVersion = allSuccessors.map((s) => removeVerFromIdStr(s.id));\n if (allSuccessorsWithNoVersion.find((s) => targetsStr.includes(s))) results.push(id);\n });\n const componentIds = this.getNodes(results).map((n) => n.attr);\n\n if (!through?.length) {\n return componentIds;\n }\n\n const resultsWithThrough: ComponentID[] = [];\n const throughStr = through.map((t) => t.toStringWithoutVersion());\n componentIds.forEach((id) => {\n const allGraph = this.subgraph(id.toString()).nodes.map((n) => n.id); // successors and predecessors\n const allGraphWithNoVersion = allGraph.map((s) => removeVerFromIdStr(s));\n if (throughStr.every((t) => allGraphWithNoVersion.includes(t))) resultsWithThrough.push(id);\n });\n\n return resultsWithThrough;\n }\n\n /**\n * check all the routes from the sources to targets and return the components found during this traversal.\n * e.g.\n * A -> B -> C -> N.\n * A -> E -> N.\n * B -> F -> G.\n * given source: A, targets: N. The results will be: [B, C, E].\n *\n * if through is provided, it will only return the components that are connected to the through components.\n * with the example above, if through is B, the results will be: [B, C].\n */\n findAllPathsFromSourcesToTargets(\n sources: ComponentID[],\n targets: ComponentID[],\n through?: ComponentID[]\n ): string[][] {\n const removeVerFromIdStr = (idStr: string) => idStr.split('@')[0];\n\n const findAllPathsBFS = (start: string[], end: string[]): string[][] => {\n const paths: string[][] = [];\n const visited = new Set<string>();\n const queue: { node: string; path: string[] }[] = [];\n start.forEach((s) => queue.push({ node: s, path: [s] }));\n while (queue.length) {\n const { node, path } = queue.shift()!;\n if (end.includes(removeVerFromIdStr(node))) {\n paths.push([...path]);\n } else {\n visited.add(node);\n const successors = this.outEdges(node).map((e) => e.targetId);\n for (const successor of successors) {\n if (!visited.has(successor)) {\n queue.push({ node: successor, path: [...path, successor] });\n }\n }\n }\n }\n return paths;\n };\n\n const targetsStr = targets.map((t) => t.toStringWithoutVersion());\n const sourcesStr = sources.map((s) => s.toString());\n\n let allPaths = findAllPathsBFS(sourcesStr, targetsStr);\n\n if (through?.length) {\n allPaths = allPaths.filter((pathWithVer) => {\n const pathWithoutVer = pathWithVer.map((p) => removeVerFromIdStr(p));\n return through.every((t) => pathWithoutVer.includes(t.toStringWithoutVersion()));\n });\n }\n\n const filtered = allPaths.filter((path) => {\n if (path.length < 3) {\n // if length is 1, the source and target are the same.\n // if length is 2, the target is a direct dependency of the source. we don't care about it.\n return false;\n }\n const [, firstDep] = path;\n if (sourcesStr.includes(firstDep)) {\n // the first item is the source. the second item \"firstDep\" can be a direct dependency of one of the sources.\n // if this is the case, we have already an exact path without this firstDep.\n return true;\n }\n return true;\n });\n\n return filtered.sort((a, b) => a.length - b.length);\n }\n\n /**\n * overrides the super class to eliminate non-seeders components\n */\n findCycles(graph?: this, includeDeps = false): string[][] {\n const cycles = super.findCycles(graph);\n // reverse the order to show a more intuitive cycle order. from the dependent to the dependency.\n cycles.forEach((cycle) => cycle.reverse());\n if (!this.shouldLimitToSeedersOnly() || includeDeps) {\n return cycles;\n }\n const seederIdsStr = this.seederIds.map((id) => id.toString());\n const cyclesWithSeeders = cycles.filter((cycle) => {\n return cycle.some((cycleIdStr) => seederIdsStr.includes(cycleIdStr));\n });\n return cyclesWithSeeders;\n }\n\n buildFromCleargraph(graph: Graph<ComponentID, DepEdgeType>): ComponentIdGraph {\n return this.create(graph.nodes, graph.edges);\n }\n\n runtimeOnly(componentIds: string[]) {\n return this.successorsSubgraph(componentIds, {\n edgeFilter: (edge: DependencyEdge) => edge.attr === 'prod',\n });\n }\n\n getDependenciesInfo(id: ComponentID): DependenciesInfo[] {\n const dijkstraResults = GraphLib.alg.dijkstra(this.graphLib, id.toString());\n const dependencies: DependenciesInfo[] = [];\n Object.keys(dijkstraResults).forEach((idStr) => {\n const distance = dijkstraResults[idStr].distance;\n if (distance === Infinity || distance === 0) {\n // there is no dependency or it's the same component (distance zero)\n return;\n }\n const predecessor = dijkstraResults[idStr].predecessor;\n const dependencyType = this.edge(predecessor, idStr);\n dependencies.push({\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n id: this.node(idStr)!.attr,\n depth: distance,\n parent: predecessor,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n dependencyType: dependencyType!.attr,\n });\n });\n dependencies.sort((a, b) => a.depth - b.depth);\n return dependencies;\n }\n\n getDependenciesAsObjectTree(idStr: string): Record<string, any> {\n const depsInfo = this.getDependenciesInfo(ComponentID.fromString(idStr));\n const populateTreeItems = (id: string, treeItems: Array<{ label: string; nodes?: Array<Record<string, any>> }>) => {\n const children = depsInfo.filter((depInfo) => depInfo.parent === id);\n if (!children || children.length === 0) {\n return;\n }\n children.forEach((child) => {\n const { id: compId } = child;\n const label = compId.toString();\n const currentNodes = [];\n treeItems.push({ label, nodes: currentNodes });\n populateTreeItems(label, currentNodes);\n });\n };\n\n const currentNodes = [];\n const tree = { label: idStr, nodes: currentNodes };\n populateTreeItems(idStr, currentNodes);\n return tree;\n }\n\n private shouldLimitToSeedersOnly() {\n return this.seederIds.length;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
1
|
+
{"version":3,"names":["_componentId","data","require","_graph","_graphlib","_interopRequireDefault","_lodash","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ComponentIdGraph","Graph","constructor","nodes","edges","graphLib","_graphLib","GraphLib","forEach","node","setNode","id","toString","edge","setEdge","sourceId","targetId","attr","create","findIdsFromSourcesToTargets","sources","targets","through","removeVerFromIdStr","idStr","split","sourcesStr","map","s","toStringWithoutVersion","targetsStr","allFlattened","source","successors","flat","allFlattenedIds","uniq","f","results","idWithNoVer","includes","allSuccessors","allSuccessorsWithNoVersion","find","push","componentIds","getNodes","n","length","resultsWithThrough","throughStr","allGraph","subgraph","allGraphWithNoVersion","every","findAllPathsFromSourcesToTargets","findAllPathsBFS","start","end","paths","visited","Set","queue","path","shift","add","outEdges","successor","has","allPaths","filter","pathWithVer","pathWithoutVer","p","filtered","firstDep","sort","a","b","findCycles","graph","includeDeps","cycles","cycle","reverse","shouldLimitToSeedersOnly","seederIdsStr","seederIds","cyclesWithSeeders","some","cycleIdStr","buildFromCleargraph","runtimeOnly","successorsSubgraph","edgeFilter","getDependenciesInfo","dijkstraResults","alg","dijkstra","dependencies","keys","distance","Infinity","predecessor","dependencyType","depth","parent","getDependenciesAsObjectTree","depsInfo","ComponentID","fromString","populateTreeItems","treeItems","children","depInfo","child","compId","label","currentNodes","tree","exports"],"sources":["component-id-graph.ts"],"sourcesContent":["import { ComponentID } from '@teambit/component-id';\nimport { Graph, Node, Edge } from '@teambit/graph.cleargraph';\nimport type { DependenciesInfo } from '@teambit/legacy.dependency-graph';\nimport GraphLib from 'graphlib';\nimport { uniq } from 'lodash';\n\nexport type DepEdgeType = 'prod' | 'dev' | 'ext' | 'peer';\n\ntype ComponentIdNode = Node<ComponentID>;\ntype DependencyEdge = Edge<DepEdgeType>;\nexport type CompIdGraph = Graph<ComponentID, DepEdgeType>;\n\nexport class ComponentIdGraph extends Graph<ComponentID, DepEdgeType> {\n private _graphLib: GraphLib.Graph;\n seederIds: ComponentID[] = []; // component IDs that started the graph. (if from workspace, the .bitmap ids normally)\n constructor(nodes: ComponentIdNode[] = [], edges: DependencyEdge[] = []) {\n super(nodes, edges);\n }\n\n get graphLib() {\n if (!this._graphLib) {\n // convert clearGraph to graphLib\n this._graphLib = new GraphLib.Graph();\n this.nodes.forEach((node) => {\n this._graphLib.setNode(node.id.toString());\n });\n this.edges.forEach((edge) => {\n this._graphLib.setEdge(edge.sourceId.toString(), edge.targetId.toString(), edge.attr);\n });\n }\n return this._graphLib;\n }\n\n protected create(nodes: ComponentIdNode[] = [], edges: DependencyEdge[] = []): this {\n return new ComponentIdGraph(nodes, edges) as this;\n }\n\n /**\n * check all the routes from the sources to targets and return the components found during this traversal.\n * e.g.\n * A -> B -> C -> N.\n * A -> E -> N.\n * B -> F -> G.\n * given source: A, targets: N. The results will be: [B, C, E].\n *\n * if through is provided, it will only return the components that are connected to the through components.\n * with the example above, if through is B, the results will be: [B, C].\n */\n findIdsFromSourcesToTargets(sources: ComponentID[], targets: ComponentID[], through?: ComponentID[]): ComponentID[] {\n const removeVerFromIdStr = (idStr: string) => idStr.split('@')[0];\n const sourcesStr = sources.map((s) => s.toStringWithoutVersion());\n const targetsStr = targets.map((t) => t.toStringWithoutVersion());\n const allFlattened = sources.map((source) => this.successors(source.toString())).flat();\n const allFlattenedIds = uniq(allFlattened.map((f) => f.id));\n const results: string[] = [];\n allFlattenedIds.forEach((id) => {\n const idWithNoVer = removeVerFromIdStr(id);\n if (sourcesStr.includes(idWithNoVer) || targetsStr.includes(idWithNoVer)) return;\n const allSuccessors = this.successors(id);\n const allSuccessorsWithNoVersion = allSuccessors.map((s) => removeVerFromIdStr(s.id));\n if (allSuccessorsWithNoVersion.find((s) => targetsStr.includes(s))) results.push(id);\n });\n const componentIds = this.getNodes(results).map((n) => n.attr);\n\n if (!through?.length) {\n return componentIds;\n }\n\n const resultsWithThrough: ComponentID[] = [];\n const throughStr = through.map((t) => t.toStringWithoutVersion());\n componentIds.forEach((id) => {\n const allGraph = this.subgraph(id.toString()).nodes.map((n) => n.id); // successors and predecessors\n const allGraphWithNoVersion = allGraph.map((s) => removeVerFromIdStr(s));\n if (throughStr.every((t) => allGraphWithNoVersion.includes(t))) resultsWithThrough.push(id);\n });\n\n return resultsWithThrough;\n }\n\n /**\n * check all the routes from the sources to targets and return the components found during this traversal.\n * e.g.\n * A -> B -> C -> N.\n * A -> E -> N.\n * B -> F -> G.\n * given source: A, targets: N. The results will be: [B, C, E].\n *\n * if through is provided, it will only return the components that are connected to the through components.\n * with the example above, if through is B, the results will be: [B, C].\n */\n findAllPathsFromSourcesToTargets(\n sources: ComponentID[],\n targets: ComponentID[],\n through?: ComponentID[]\n ): string[][] {\n const removeVerFromIdStr = (idStr: string) => idStr.split('@')[0];\n\n const findAllPathsBFS = (start: string[], end: string[]): string[][] => {\n const paths: string[][] = [];\n const visited = new Set<string>();\n const queue: { node: string; path: string[] }[] = [];\n start.forEach((s) => queue.push({ node: s, path: [s] }));\n while (queue.length) {\n const { node, path } = queue.shift()!;\n if (end.includes(removeVerFromIdStr(node))) {\n paths.push([...path]);\n } else {\n visited.add(node);\n const successors = this.outEdges(node).map((e) => e.targetId);\n for (const successor of successors) {\n if (!visited.has(successor)) {\n queue.push({ node: successor, path: [...path, successor] });\n }\n }\n }\n }\n return paths;\n };\n\n const targetsStr = targets.map((t) => t.toStringWithoutVersion());\n const sourcesStr = sources.map((s) => s.toString());\n\n let allPaths = findAllPathsBFS(sourcesStr, targetsStr);\n\n if (through?.length) {\n allPaths = allPaths.filter((pathWithVer) => {\n const pathWithoutVer = pathWithVer.map((p) => removeVerFromIdStr(p));\n return through.every((t) => pathWithoutVer.includes(t.toStringWithoutVersion()));\n });\n }\n\n const filtered = allPaths.filter((path) => {\n if (path.length < 3) {\n // if length is 1, the source and target are the same.\n // if length is 2, the target is a direct dependency of the source. we don't care about it.\n return false;\n }\n const [, firstDep] = path;\n if (sourcesStr.includes(firstDep)) {\n // the first item is the source. the second item \"firstDep\" can be a direct dependency of one of the sources.\n // if this is the case, we have already an exact path without this firstDep.\n return true;\n }\n return true;\n });\n\n return filtered.sort((a, b) => a.length - b.length);\n }\n\n /**\n * overrides the super class to eliminate non-seeders components\n */\n findCycles(graph = this, includeDeps = false): string[][] {\n const cycles = super.findCycles(graph);\n // reverse the order to show a more intuitive cycle order. from the dependent to the dependency.\n cycles.forEach((cycle) => cycle.reverse());\n if (!this.shouldLimitToSeedersOnly() || includeDeps) {\n return cycles;\n }\n const seederIdsStr = this.seederIds.map((id) => id.toString());\n const cyclesWithSeeders = cycles.filter((cycle) => {\n return cycle.some((cycleIdStr) => seederIdsStr.includes(cycleIdStr));\n });\n return cyclesWithSeeders;\n }\n\n buildFromCleargraph(graph: Graph<ComponentID, DepEdgeType>): ComponentIdGraph {\n return this.create(graph.nodes, graph.edges);\n }\n\n runtimeOnly(componentIds: string[]) {\n return this.successorsSubgraph(componentIds, {\n edgeFilter: (edge: DependencyEdge) => edge.attr === 'prod',\n });\n }\n\n getDependenciesInfo(id: ComponentID): DependenciesInfo[] {\n const dijkstraResults = GraphLib.alg.dijkstra(this.graphLib, id.toString());\n const dependencies: DependenciesInfo[] = [];\n Object.keys(dijkstraResults).forEach((idStr) => {\n const distance = dijkstraResults[idStr].distance;\n if (distance === Infinity || distance === 0) {\n // there is no dependency or it's the same component (distance zero)\n return;\n }\n const predecessor = dijkstraResults[idStr].predecessor;\n const dependencyType = this.edge(predecessor, idStr);\n dependencies.push({\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n id: this.node(idStr)!.attr,\n depth: distance,\n parent: predecessor,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n dependencyType: dependencyType!.attr,\n });\n });\n dependencies.sort((a, b) => a.depth - b.depth);\n return dependencies;\n }\n\n getDependenciesAsObjectTree(idStr: string): Record<string, any> {\n const depsInfo = this.getDependenciesInfo(ComponentID.fromString(idStr));\n const populateTreeItems = (id: string, treeItems: Array<{ label: string; nodes?: Array<Record<string, any>> }>) => {\n const children = depsInfo.filter((depInfo) => depInfo.parent === id);\n if (!children || children.length === 0) {\n return;\n }\n children.forEach((child) => {\n const { id: compId } = child;\n const label = compId.toString();\n const currentNodes = [];\n treeItems.push({ label, nodes: currentNodes });\n populateTreeItems(label, currentNodes);\n });\n };\n\n const currentNodes = [];\n const tree = { label: idStr, nodes: currentNodes };\n populateTreeItems(idStr, currentNodes);\n return tree;\n }\n\n private shouldLimitToSeedersOnly() {\n return this.seederIds.length;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/dist/graph-cmd.d.ts
CHANGED
@@ -1,14 +1,17 @@
|
|
1
1
|
import { Command, CommandOptions } from '@teambit/cli';
|
2
2
|
import { ComponentMain } from '@teambit/component';
|
3
|
-
|
4
|
-
|
3
|
+
import { GraphMain } from './graph.main.runtime';
|
4
|
+
export type GraphOpt = {
|
5
5
|
remote?: string;
|
6
|
-
allVersions?: boolean;
|
7
6
|
layout?: string;
|
7
|
+
cycles?: boolean;
|
8
|
+
png?: boolean;
|
8
9
|
json?: boolean;
|
10
|
+
includeLocalOnly?: boolean;
|
9
11
|
};
|
10
12
|
export declare class GraphCmd implements Command {
|
11
13
|
private componentAspect;
|
14
|
+
private graph;
|
12
15
|
name: string;
|
13
16
|
description: string;
|
14
17
|
extendedDescription: 'black arrow is a runtime dependency. red arrow is either dev or peer';
|
@@ -16,9 +19,9 @@ export declare class GraphCmd implements Command {
|
|
16
19
|
alias: string;
|
17
20
|
options: CommandOptions;
|
18
21
|
remoteOp: boolean;
|
19
|
-
constructor(componentAspect: ComponentMain);
|
20
|
-
report([id]: [string],
|
21
|
-
|
22
|
-
|
22
|
+
constructor(componentAspect: ComponentMain, graph: GraphMain);
|
23
|
+
report([id]: [string], graphOpts: GraphOpt): Promise<string>;
|
24
|
+
json([id]: [string], { remote }: GraphOpt): Promise<any>;
|
25
|
+
private getWorkspaceIfExist;
|
26
|
+
private generateGraphFromRemote;
|
23
27
|
}
|
24
|
-
export {};
|
package/dist/graph-cmd.js
CHANGED
@@ -11,20 +11,6 @@ function _chalk() {
|
|
11
11
|
};
|
12
12
|
return data;
|
13
13
|
}
|
14
|
-
function _os() {
|
15
|
-
const data = _interopRequireDefault(require("os"));
|
16
|
-
_os = function () {
|
17
|
-
return data;
|
18
|
-
};
|
19
|
-
return data;
|
20
|
-
}
|
21
|
-
function path() {
|
22
|
-
const data = _interopRequireWildcard(require("path"));
|
23
|
-
path = function () {
|
24
|
-
return data;
|
25
|
-
};
|
26
|
-
return data;
|
27
|
-
}
|
28
14
|
function _graphlib() {
|
29
15
|
const data = _interopRequireDefault(require("graphlib"));
|
30
16
|
_graphlib = function () {
|
@@ -39,13 +25,6 @@ function _componentId() {
|
|
39
25
|
};
|
40
26
|
return data;
|
41
27
|
}
|
42
|
-
function _toolboxString() {
|
43
|
-
const data = require("@teambit/toolbox.string.random");
|
44
|
-
_toolboxString = function () {
|
45
|
-
return data;
|
46
|
-
};
|
47
|
-
return data;
|
48
|
-
}
|
49
28
|
function _legacy() {
|
50
29
|
const data = require("@teambit/legacy.dependency-graph");
|
51
30
|
_legacy = function () {
|
@@ -60,92 +39,78 @@ function _scope() {
|
|
60
39
|
};
|
61
40
|
return data;
|
62
41
|
}
|
63
|
-
function _workspace() {
|
64
|
-
const data = require("@teambit/workspace");
|
65
|
-
_workspace = function () {
|
66
|
-
return data;
|
67
|
-
};
|
68
|
-
return data;
|
69
|
-
}
|
70
|
-
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
71
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
72
42
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
73
43
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
74
44
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
75
45
|
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); }
|
76
46
|
class GraphCmd {
|
77
|
-
constructor(componentAspect) {
|
47
|
+
constructor(componentAspect, graph) {
|
78
48
|
this.componentAspect = componentAspect;
|
49
|
+
this.graph = graph;
|
79
50
|
_defineProperty(this, "name", 'graph [id]');
|
80
|
-
_defineProperty(this, "description", "generate an image file with the
|
51
|
+
_defineProperty(this, "description", "generate an SVG image file with the components' dependencies graph");
|
81
52
|
_defineProperty(this, "extendedDescription", void 0);
|
82
53
|
_defineProperty(this, "group", 'discover');
|
83
54
|
_defineProperty(this, "alias", '');
|
84
|
-
_defineProperty(this, "options", [['
|
55
|
+
_defineProperty(this, "options", [['r', 'remote [remoteName]', 'remote name (name is optional, leave empty when id is specified)'], ['', 'layout <name>', 'GraphVis layout. default to "dot". options are [circo, dot, fdp, neato, osage, patchwork, sfdp, twopi]'], ['', 'png', 'save the graph as a png file instead of svg. requires "graphviz" to be installed'], ['', 'cycles', 'generate a graph of cycles only'], ['', 'include-local-only', 'include only the components in the workspace (or local scope)'], ['j', 'json', 'json format']]);
|
85
56
|
_defineProperty(this, "remoteOp", true);
|
86
57
|
}
|
87
|
-
async report([id], {
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
const
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
image = image || path().join(_os().default.tmpdir(), `${(0, _toolboxString().generateRandomStr)()}.png`);
|
101
|
-
const result = await visualDependencyGraph.image(image);
|
102
|
-
return _chalk().default.green(`image created at ${result}`);
|
103
|
-
}
|
104
|
-
async generateGraph(workspace, id, remote, allVersions) {
|
105
|
-
if (!workspace && !remote) throw new (_workspace().OutsideWorkspaceError)();
|
106
|
-
const getBitId = () => {
|
107
|
-
if (!id) return undefined;
|
108
|
-
if (remote) return _componentId().ComponentID.fromString(id); // user used --remote so we know it has a scope
|
109
|
-
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
|
110
|
-
return consumer.getParsedId(id);
|
111
|
-
};
|
112
|
-
const bitId = getBitId();
|
113
|
-
if (remote) {
|
114
|
-
if (id) {
|
115
|
-
// @ts-ignore scope must be set as it came from a remote
|
116
|
-
const scopeName = typeof remote === 'string' ? remote : bitId.scope;
|
117
|
-
const remoteScope = await (0, _scope().getRemoteByName)(scopeName, workspace?.consumer);
|
118
|
-
const componentDepGraph = await remoteScope.graph(bitId);
|
119
|
-
return componentDepGraph.graph;
|
58
|
+
async report([id], graphOpts) {
|
59
|
+
const {
|
60
|
+
remote,
|
61
|
+
layout,
|
62
|
+
png
|
63
|
+
} = graphOpts;
|
64
|
+
const host = this.componentAspect.getHost();
|
65
|
+
const getVisualGraph = async () => {
|
66
|
+
if (remote) {
|
67
|
+
const config = {};
|
68
|
+
if (layout) config.layout = layout;
|
69
|
+
const graph = await this.generateGraphFromRemote(remote, id);
|
70
|
+
return _legacy().VisualDependencyGraph.loadFromGraphlib(graph, config);
|
120
71
|
}
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
}
|
128
|
-
const onlyLatest = !allVersions;
|
129
|
-
// @ts-ignore workspace must be set here
|
130
|
-
const workspaceGraph = await _legacy().DependencyGraph.buildGraphFromWorkspace(workspace, onlyLatest);
|
131
|
-
const dependencyGraph = new (_legacy().DependencyGraph)(workspaceGraph);
|
132
|
-
if (id) {
|
133
|
-
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
|
134
|
-
const componentGraph = dependencyGraph.getSubGraphOfConnectedComponents(bitId);
|
135
|
-
const componentDepGraph = new (_legacy().DependencyGraph)(componentGraph);
|
136
|
-
return componentDepGraph.graph;
|
137
|
-
}
|
138
|
-
return dependencyGraph.graph;
|
72
|
+
const compId = id ? await host.resolveComponentId(id) : undefined;
|
73
|
+
const compIds = compId ? [compId] : undefined;
|
74
|
+
return this.graph.getVisualGraphIds(compIds, graphOpts);
|
75
|
+
};
|
76
|
+
const visualDependencyGraph = await getVisualGraph();
|
77
|
+
const result = await visualDependencyGraph.render(png ? 'png' : 'svg');
|
78
|
+
return _chalk().default.green(`image created at ${result}`);
|
139
79
|
}
|
140
80
|
async json([id], {
|
141
|
-
remote
|
142
|
-
allVersions
|
81
|
+
remote
|
143
82
|
}) {
|
144
|
-
const
|
145
|
-
if (!
|
146
|
-
|
83
|
+
const host = this.componentAspect.getHost();
|
84
|
+
if (!remote) {
|
85
|
+
const graph = await this.graph.getGraphIds(id ? [await host.resolveComponentId(id)] : undefined);
|
86
|
+
return graph.toJson();
|
87
|
+
}
|
88
|
+
const graph = await this.generateGraphFromRemote(remote, id);
|
147
89
|
return _graphlib().default.json.write(graph);
|
148
90
|
}
|
91
|
+
getWorkspaceIfExist() {
|
92
|
+
try {
|
93
|
+
return this.componentAspect.getHost('teambit.workspace/workspace');
|
94
|
+
} catch {
|
95
|
+
return undefined;
|
96
|
+
}
|
97
|
+
}
|
98
|
+
async generateGraphFromRemote(remote, id) {
|
99
|
+
const workspace = this.getWorkspaceIfExist();
|
100
|
+
const compId = id ? _componentId().ComponentID.fromString(id) : undefined;
|
101
|
+
if (compId) {
|
102
|
+
const scopeName = typeof remote === 'string' ? remote : compId.scope;
|
103
|
+
const remoteScope = await (0, _scope().getRemoteByName)(scopeName, workspace?.consumer);
|
104
|
+
const componentDepGraph = await remoteScope.graph(compId);
|
105
|
+
return componentDepGraph.graph;
|
106
|
+
}
|
107
|
+
if (typeof remote !== 'string') {
|
108
|
+
throw new Error('please specify remote scope name or enter an id');
|
109
|
+
}
|
110
|
+
const remoteScope = await (0, _scope().getRemoteByName)(remote, workspace?.consumer);
|
111
|
+
const componentDepGraph = await remoteScope.graph();
|
112
|
+
return componentDepGraph.graph;
|
113
|
+
}
|
149
114
|
}
|
150
115
|
exports.GraphCmd = GraphCmd;
|
151
116
|
|
package/dist/graph-cmd.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_chalk","data","_interopRequireDefault","require","_os","path","_interopRequireWildcard","_graphlib","_componentId","_toolboxString","_legacy","_scope","_workspace","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_defineProperty","_toPropertyKey","value","enumerable","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","GraphCmd","constructor","componentAspect","report","id","remote","allVersions","layout","image","workspace","getHost","OutsideWorkspaceError","graph","generateGraph","config","visualDependencyGraph","VisualDependencyGraph","loadFromGraphlib","join","os","tmpdir","generateRandomStr","result","chalk","green","getBitId","undefined","ComponentID","fromString","consumer","getParsedId","bitId","scopeName","scope","remoteScope","getRemoteByName","componentDepGraph","Error","onlyLatest","workspaceGraph","DependencyGraph","buildGraphFromWorkspace","dependencyGraph","componentGraph","getSubGraphOfConnectedComponents","json","GraphLib","write","exports"],"sources":["graph-cmd.ts"],"sourcesContent":["import chalk from 'chalk';\nimport os from 'os';\nimport * as path from 'path';\nimport GraphLib from 'graphlib';\nimport { Command, CommandOptions } from '@teambit/cli';\nimport { ComponentID } from '@teambit/component-id';\nimport { generateRandomStr } from '@teambit/toolbox.string.random';\nimport { DependencyGraph, VisualDependencyGraph } from '@teambit/legacy.dependency-graph';\nimport { getRemoteByName } from '@teambit/scope.remotes';\nimport { ComponentMain } from '@teambit/component';\nimport { OutsideWorkspaceError, Workspace } from '@teambit/workspace';\n\ntype GraphOpt = {\n image?: string;\n remote?: string;\n allVersions?: boolean;\n layout?: string;\n json?: boolean;\n};\n\nexport class GraphCmd implements Command {\n name = 'graph [id]';\n description = \"generate an image file with the workspace components' dependencies graph\";\n extendedDescription: 'black arrow is a runtime dependency. red arrow is either dev or peer';\n group = 'discover';\n alias = '';\n options = [\n ['i', 'image <image>', 'image path and format. use one of the following extensions: [gif, png, svg, pdf]'],\n ['r', 'remote [remoteName]', 'remote name (name is optional, leave empty when id is specified)'],\n ['', 'all-versions', 'enter all components versions into the graph, not only latest'],\n [\n '',\n 'layout <name>',\n 'GraphVis layout. default to \"dot\". options are [circo, dot, fdp, neato, osage, patchwork, sfdp, twopi]',\n ],\n ['j', 'json', 'json format'],\n ] as CommandOptions;\n remoteOp = true;\n\n constructor(private componentAspect: ComponentMain) {}\n\n async report([id]: [string], { remote, allVersions, layout, image }: GraphOpt): Promise<string> {\n const workspace = this.componentAspect.getHost('teambit.workspace/workspace') as Workspace;\n if (!workspace && !remote) throw new OutsideWorkspaceError();\n\n const graph = await this.generateGraph(workspace, id, remote, allVersions);\n\n const config = {};\n // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!\n if (layout) config.layout = layout;\n const visualDependencyGraph = await VisualDependencyGraph.loadFromGraphlib(graph, config);\n\n image = image || path.join(os.tmpdir(), `${generateRandomStr()}.png`);\n const result = await visualDependencyGraph.image(image);\n\n return chalk.green(`image created at ${result}`);\n }\n\n private async generateGraph(\n workspace?: Workspace,\n id?: string,\n remote?: string,\n allVersions?: boolean\n ): Promise<GraphLib.Graph> {\n if (!workspace && !remote) throw new OutsideWorkspaceError();\n const getBitId = (): ComponentID | undefined => {\n if (!id) return undefined;\n if (remote) return ComponentID.fromString(id); // user used --remote so we know it has a scope\n // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!\n return consumer.getParsedId(id);\n };\n const bitId = getBitId();\n if (remote) {\n if (id) {\n // @ts-ignore scope must be set as it came from a remote\n const scopeName: string = typeof remote === 'string' ? remote : bitId.scope;\n const remoteScope = await getRemoteByName(scopeName, workspace?.consumer);\n const componentDepGraph = await remoteScope.graph(bitId);\n return componentDepGraph.graph;\n }\n if (typeof remote !== 'string') {\n throw new Error('please specify remote scope name or enter an id');\n }\n const remoteScope = await getRemoteByName(remote, workspace?.consumer);\n const componentDepGraph = await remoteScope.graph();\n return componentDepGraph.graph;\n }\n\n const onlyLatest = !allVersions;\n // @ts-ignore workspace must be set here\n const workspaceGraph = await DependencyGraph.buildGraphFromWorkspace(workspace, onlyLatest);\n const dependencyGraph = new DependencyGraph(workspaceGraph);\n if (id) {\n // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!\n const componentGraph = dependencyGraph.getSubGraphOfConnectedComponents(bitId);\n const componentDepGraph = new DependencyGraph(componentGraph);\n return componentDepGraph.graph;\n }\n return dependencyGraph.graph;\n }\n\n async json([id]: [string], { remote, allVersions }: GraphOpt) {\n const workspace = this.componentAspect.getHost('teambit.workspace/workspace') as Workspace;\n if (!workspace && !remote) throw new OutsideWorkspaceError();\n\n const graph = await this.generateGraph(workspace, id, remote, allVersions);\n return GraphLib.json.write(graph);\n }\n}\n"],"mappings":";;;;;;AAAA,SAAAA,OAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,MAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAG,IAAA;EAAA,MAAAH,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAC,GAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAI,KAAA;EAAA,MAAAJ,IAAA,GAAAK,uBAAA,CAAAH,OAAA;EAAAE,IAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAM,UAAA;EAAA,MAAAN,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAI,SAAA,YAAAA,CAAA;IAAA,OAAAN,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAO,aAAA;EAAA,MAAAP,IAAA,GAAAE,OAAA;EAAAK,YAAA,YAAAA,CAAA;IAAA,OAAAP,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAQ,eAAA;EAAA,MAAAR,IAAA,GAAAE,OAAA;EAAAM,cAAA,YAAAA,CAAA;IAAA,OAAAR,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAS,QAAA;EAAA,MAAAT,IAAA,GAAAE,OAAA;EAAAO,OAAA,YAAAA,CAAA;IAAA,OAAAT,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAU,OAAA;EAAA,MAAAV,IAAA,GAAAE,OAAA;EAAAQ,MAAA,YAAAA,CAAA;IAAA,OAAAV,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAW,WAAA;EAAA,MAAAX,IAAA,GAAAE,OAAA;EAAAS,UAAA,YAAAA,CAAA;IAAA,OAAAX,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAsE,SAAAY,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAR,wBAAAQ,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAAA,SAAApB,uBAAAY,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAI,UAAA,GAAAJ,CAAA,KAAAK,OAAA,EAAAL,CAAA;AAAA,SAAAmB,gBAAAnB,CAAA,EAAAE,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAkB,cAAA,CAAAlB,CAAA,MAAAF,CAAA,GAAAW,MAAA,CAAAC,cAAA,CAAAZ,CAAA,EAAAE,CAAA,IAAAmB,KAAA,EAAAlB,CAAA,EAAAmB,UAAA,MAAAC,YAAA,MAAAC,QAAA,UAAAxB,CAAA,CAAAE,CAAA,IAAAC,CAAA,EAAAH,CAAA;AAAA,SAAAoB,eAAAjB,CAAA,QAAAc,CAAA,GAAAQ,YAAA,CAAAtB,CAAA,uCAAAc,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAQ,aAAAtB,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAH,CAAA,GAAAG,CAAA,CAAAuB,MAAA,CAAAC,WAAA,kBAAA3B,CAAA,QAAAiB,CAAA,GAAAjB,CAAA,CAAAgB,IAAA,CAAAb,CAAA,EAAAD,CAAA,uCAAAe,CAAA,SAAAA,CAAA,YAAAW,SAAA,yEAAA1B,CAAA,GAAA2B,MAAA,GAAAC,MAAA,EAAA3B,CAAA;AAU/D,MAAM4B,QAAQ,CAAoB;EAmBvCC,WAAWA,CAASC,eAA8B,EAAE;IAAA,KAAhCA,eAA8B,GAA9BA,eAA8B;IAAAd,eAAA,eAlB3C,YAAY;IAAAA,eAAA,sBACL,0EAA0E;IAAAA,eAAA;IAAAA,eAAA,gBAEhF,UAAU;IAAAA,eAAA,gBACV,EAAE;IAAAA,eAAA,kBACA,CACR,CAAC,GAAG,EAAE,eAAe,EAAE,kFAAkF,CAAC,EAC1G,CAAC,GAAG,EAAE,qBAAqB,EAAE,kEAAkE,CAAC,EAChG,CAAC,EAAE,EAAE,cAAc,EAAE,+DAA+D,CAAC,EACrF,CACE,EAAE,EACF,eAAe,EACf,wGAAwG,CACzG,EACD,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,CAC7B;IAAAA,eAAA,mBACU,IAAI;EAEsC;EAErD,MAAMe,MAAMA,CAAC,CAACC,EAAE,CAAW,EAAE;IAAEC,MAAM;IAAEC,WAAW;IAAEC,MAAM;IAAEC;EAAgB,CAAC,EAAmB;IAC9F,MAAMC,SAAS,GAAG,IAAI,CAACP,eAAe,CAACQ,OAAO,CAAC,6BAA6B,CAAc;IAC1F,IAAI,CAACD,SAAS,IAAI,CAACJ,MAAM,EAAE,MAAM,KAAIM,kCAAqB,EAAC,CAAC;IAE5D,MAAMC,KAAK,GAAG,MAAM,IAAI,CAACC,aAAa,CAACJ,SAAS,EAAEL,EAAE,EAAEC,MAAM,EAAEC,WAAW,CAAC;IAE1E,MAAMQ,MAAM,GAAG,CAAC,CAAC;IACjB;IACA,IAAIP,MAAM,EAAEO,MAAM,CAACP,MAAM,GAAGA,MAAM;IAClC,MAAMQ,qBAAqB,GAAG,MAAMC,+BAAqB,CAACC,gBAAgB,CAACL,KAAK,EAAEE,MAAM,CAAC;IAEzFN,KAAK,GAAGA,KAAK,IAAIhD,IAAI,CAAD,CAAC,CAAC0D,IAAI,CAACC,aAAE,CAACC,MAAM,CAAC,CAAC,EAAE,GAAG,IAAAC,kCAAiB,EAAC,CAAC,MAAM,CAAC;IACrE,MAAMC,MAAM,GAAG,MAAMP,qBAAqB,CAACP,KAAK,CAACA,KAAK,CAAC;IAEvD,OAAOe,gBAAK,CAACC,KAAK,CAAC,oBAAoBF,MAAM,EAAE,CAAC;EAClD;EAEA,MAAcT,aAAaA,CACzBJ,SAAqB,EACrBL,EAAW,EACXC,MAAe,EACfC,WAAqB,EACI;IACzB,IAAI,CAACG,SAAS,IAAI,CAACJ,MAAM,EAAE,MAAM,KAAIM,kCAAqB,EAAC,CAAC;IAC5D,MAAMc,QAAQ,GAAGA,CAAA,KAA+B;MAC9C,IAAI,CAACrB,EAAE,EAAE,OAAOsB,SAAS;MACzB,IAAIrB,MAAM,EAAE,OAAOsB,0BAAW,CAACC,UAAU,CAACxB,EAAE,CAAC,CAAC,CAAC;MAC/C;MACA,OAAOyB,QAAQ,CAACC,WAAW,CAAC1B,EAAE,CAAC;IACjC,CAAC;IACD,MAAM2B,KAAK,GAAGN,QAAQ,CAAC,CAAC;IACxB,IAAIpB,MAAM,EAAE;MACV,IAAID,EAAE,EAAE;QACN;QACA,MAAM4B,SAAiB,GAAG,OAAO3B,MAAM,KAAK,QAAQ,GAAGA,MAAM,GAAG0B,KAAK,CAACE,KAAK;QAC3E,MAAMC,WAAW,GAAG,MAAM,IAAAC,wBAAe,EAACH,SAAS,EAAEvB,SAAS,EAAEoB,QAAQ,CAAC;QACzE,MAAMO,iBAAiB,GAAG,MAAMF,WAAW,CAACtB,KAAK,CAACmB,KAAK,CAAC;QACxD,OAAOK,iBAAiB,CAACxB,KAAK;MAChC;MACA,IAAI,OAAOP,MAAM,KAAK,QAAQ,EAAE;QAC9B,MAAM,IAAIgC,KAAK,CAAC,iDAAiD,CAAC;MACpE;MACA,MAAMH,WAAW,GAAG,MAAM,IAAAC,wBAAe,EAAC9B,MAAM,EAAEI,SAAS,EAAEoB,QAAQ,CAAC;MACtE,MAAMO,iBAAiB,GAAG,MAAMF,WAAW,CAACtB,KAAK,CAAC,CAAC;MACnD,OAAOwB,iBAAiB,CAACxB,KAAK;IAChC;IAEA,MAAM0B,UAAU,GAAG,CAAChC,WAAW;IAC/B;IACA,MAAMiC,cAAc,GAAG,MAAMC,yBAAe,CAACC,uBAAuB,CAAChC,SAAS,EAAE6B,UAAU,CAAC;IAC3F,MAAMI,eAAe,GAAG,KAAIF,yBAAe,EAACD,cAAc,CAAC;IAC3D,IAAInC,EAAE,EAAE;MACN;MACA,MAAMuC,cAAc,GAAGD,eAAe,CAACE,gCAAgC,CAACb,KAAK,CAAC;MAC9E,MAAMK,iBAAiB,GAAG,KAAII,yBAAe,EAACG,cAAc,CAAC;MAC7D,OAAOP,iBAAiB,CAACxB,KAAK;IAChC;IACA,OAAO8B,eAAe,CAAC9B,KAAK;EAC9B;EAEA,MAAMiC,IAAIA,CAAC,CAACzC,EAAE,CAAW,EAAE;IAAEC,MAAM;IAAEC;EAAsB,CAAC,EAAE;IAC5D,MAAMG,SAAS,GAAG,IAAI,CAACP,eAAe,CAACQ,OAAO,CAAC,6BAA6B,CAAc;IAC1F,IAAI,CAACD,SAAS,IAAI,CAACJ,MAAM,EAAE,MAAM,KAAIM,kCAAqB,EAAC,CAAC;IAE5D,MAAMC,KAAK,GAAG,MAAM,IAAI,CAACC,aAAa,CAACJ,SAAS,EAAEL,EAAE,EAAEC,MAAM,EAAEC,WAAW,CAAC;IAC1E,OAAOwC,mBAAQ,CAACD,IAAI,CAACE,KAAK,CAACnC,KAAK,CAAC;EACnC;AACF;AAACoC,OAAA,CAAAhD,QAAA,GAAAA,QAAA","ignoreList":[]}
|
1
|
+
{"version":3,"names":["_chalk","data","_interopRequireDefault","require","_graphlib","_componentId","_legacy","_scope","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","GraphCmd","constructor","componentAspect","graph","report","id","graphOpts","remote","layout","png","host","getHost","getVisualGraph","config","generateGraphFromRemote","VisualDependencyGraph","loadFromGraphlib","compId","resolveComponentId","undefined","compIds","getVisualGraphIds","visualDependencyGraph","result","render","chalk","green","json","getGraphIds","toJson","GraphLib","write","getWorkspaceIfExist","workspace","ComponentID","fromString","scopeName","scope","remoteScope","getRemoteByName","consumer","componentDepGraph","Error","exports"],"sources":["graph-cmd.ts"],"sourcesContent":["import chalk from 'chalk';\nimport GraphLib from 'graphlib';\nimport { Command, CommandOptions } from '@teambit/cli';\nimport { ComponentID } from '@teambit/component-id';\nimport { GraphConfig, VisualDependencyGraph } from '@teambit/legacy.dependency-graph';\nimport { getRemoteByName } from '@teambit/scope.remotes';\nimport { ComponentMain } from '@teambit/component';\nimport type { Workspace } from '@teambit/workspace';\nimport { GraphMain } from './graph.main.runtime';\n\nexport type GraphOpt = {\n remote?: string;\n layout?: string;\n cycles?: boolean;\n png?: boolean;\n json?: boolean;\n includeLocalOnly?: boolean;\n};\n\nexport class GraphCmd implements Command {\n name = 'graph [id]';\n description = \"generate an SVG image file with the components' dependencies graph\";\n extendedDescription: 'black arrow is a runtime dependency. red arrow is either dev or peer';\n group = 'discover';\n alias = '';\n options = [\n ['r', 'remote [remoteName]', 'remote name (name is optional, leave empty when id is specified)'],\n [\n '',\n 'layout <name>',\n 'GraphVis layout. default to \"dot\". options are [circo, dot, fdp, neato, osage, patchwork, sfdp, twopi]',\n ],\n ['', 'png', 'save the graph as a png file instead of svg. requires \"graphviz\" to be installed'],\n ['', 'cycles', 'generate a graph of cycles only'],\n ['', 'include-local-only', 'include only the components in the workspace (or local scope)'],\n ['j', 'json', 'json format'],\n ] as CommandOptions;\n remoteOp = true;\n\n constructor(private componentAspect: ComponentMain, private graph: GraphMain) {}\n\n async report([id]: [string], graphOpts: GraphOpt): Promise<string> {\n const { remote, layout, png } = graphOpts;\n const host = this.componentAspect.getHost();\n\n const getVisualGraph = async (): Promise<VisualDependencyGraph> => {\n if (remote) {\n const config: GraphConfig = {};\n if (layout) config.layout = layout;\n const graph = await this.generateGraphFromRemote(remote, id);\n return VisualDependencyGraph.loadFromGraphlib(graph, config);\n }\n const compId = id ? await host.resolveComponentId(id) : undefined;\n const compIds = compId ? [compId] : undefined\n return this.graph.getVisualGraphIds(compIds, graphOpts);\n }\n\n const visualDependencyGraph = await getVisualGraph();\n const result = await visualDependencyGraph.render(png ? 'png' : 'svg');\n\n return chalk.green(`image created at ${result}`);\n }\n\n async json([id]: [string], { remote }: GraphOpt) {\n const host = this.componentAspect.getHost();\n if (!remote) {\n const graph = await this.graph.getGraphIds(id ? [await host.resolveComponentId(id)] : undefined);\n return graph.toJson();\n }\n const graph = await this.generateGraphFromRemote(remote!, id);\n return GraphLib.json.write(graph);\n }\n\n private getWorkspaceIfExist(): Workspace | undefined {\n try {\n return this.componentAspect.getHost('teambit.workspace/workspace') as Workspace | undefined;\n } catch {\n return undefined;\n }\n }\n\n private async generateGraphFromRemote(\n remote: string | boolean,\n id?: string,\n ): Promise<GraphLib.Graph> {\n const workspace = this.getWorkspaceIfExist();\n const compId = id ? ComponentID.fromString(id) : undefined;\n if (compId) {\n const scopeName: string = typeof remote === 'string' ? remote : compId.scope;\n const remoteScope = await getRemoteByName(scopeName, workspace?.consumer);\n const componentDepGraph = await remoteScope.graph(compId);\n return componentDepGraph.graph;\n }\n if (typeof remote !== 'string') {\n throw new Error('please specify remote scope name or enter an id');\n }\n const remoteScope = await getRemoteByName(remote, workspace?.consumer);\n const componentDepGraph = await remoteScope.graph();\n return componentDepGraph.graph;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
@@ -3,8 +3,10 @@ import { ComponentMain, ComponentID } from '@teambit/component';
|
|
3
3
|
import { GraphqlMain } from '@teambit/graphql';
|
4
4
|
import { Logger, LoggerMain } from '@teambit/logger';
|
5
5
|
import { GetGraphOpts } from './graph-builder';
|
6
|
+
import { GraphOpt } from './graph-cmd';
|
6
7
|
import { ComponentGraph } from './component-graph';
|
7
8
|
import { ComponentIdGraph } from './component-id-graph';
|
9
|
+
import { VisualDependencyGraph } from '@teambit/legacy.dependency-graph';
|
8
10
|
export declare class GraphMain {
|
9
11
|
private componentAspect;
|
10
12
|
private logger;
|
@@ -14,6 +16,12 @@ export declare class GraphMain {
|
|
14
16
|
*/
|
15
17
|
getGraph(ids?: ComponentID[], opts?: GetGraphOpts): Promise<ComponentGraph>;
|
16
18
|
getGraphIds(ids?: ComponentID[], opts?: GetGraphOpts): Promise<ComponentIdGraph>;
|
19
|
+
/**
|
20
|
+
* this visual graph-ids can render the graph as a SVG/png and other formats.
|
21
|
+
*/
|
22
|
+
getVisualGraphIds(ids?: ComponentID[], opts?: GraphOpt): Promise<VisualDependencyGraph>;
|
23
|
+
private getVisualCyclesFromGraph;
|
24
|
+
private getIdsWithVersions;
|
17
25
|
static slots: never[];
|
18
26
|
static dependencies: import("@teambit/harmony").Aspect[];
|
19
27
|
static runtime: import("@teambit/harmony").RuntimeDefinition;
|
@@ -32,6 +32,13 @@ function _logger() {
|
|
32
32
|
};
|
33
33
|
return data;
|
34
34
|
}
|
35
|
+
function _lodash() {
|
36
|
+
const data = require("lodash");
|
37
|
+
_lodash = function () {
|
38
|
+
return data;
|
39
|
+
};
|
40
|
+
return data;
|
41
|
+
}
|
35
42
|
function _graphBuilder() {
|
36
43
|
const data = require("./graph-builder");
|
37
44
|
_graphBuilder = function () {
|
@@ -60,6 +67,13 @@ function _graphCmd() {
|
|
60
67
|
};
|
61
68
|
return data;
|
62
69
|
}
|
70
|
+
function _legacy() {
|
71
|
+
const data = require("@teambit/legacy.dependency-graph");
|
72
|
+
_legacy = function () {
|
73
|
+
return data;
|
74
|
+
};
|
75
|
+
return data;
|
76
|
+
}
|
63
77
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
64
78
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
65
79
|
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); }
|
@@ -80,12 +94,58 @@ class GraphMain {
|
|
80
94
|
const graphBuilder = new (_graphBuilder().GraphBuilder)(this.componentAspect);
|
81
95
|
return graphBuilder.getGraphIds(ids, opts);
|
82
96
|
}
|
97
|
+
|
98
|
+
/**
|
99
|
+
* this visual graph-ids can render the graph as a SVG/png and other formats.
|
100
|
+
*/
|
101
|
+
async getVisualGraphIds(ids, opts = {}) {
|
102
|
+
this.logger.setStatusLine('loading graph');
|
103
|
+
const {
|
104
|
+
layout,
|
105
|
+
includeLocalOnly,
|
106
|
+
cycles
|
107
|
+
} = opts;
|
108
|
+
const graphVizOpts = {};
|
109
|
+
if (layout) graphVizOpts.layout = layout;
|
110
|
+
const graphIdsAll = await this.getGraphIds(ids);
|
111
|
+
const host = this.componentAspect.getHost();
|
112
|
+
const list = await host.listIds();
|
113
|
+
const idsWithVersion = await this.getIdsWithVersions(ids);
|
114
|
+
const listStr = list.map(id => id.toString());
|
115
|
+
const graphIds = includeLocalOnly ? graphIdsAll.successorsSubgraph(idsWithVersion || listStr, {
|
116
|
+
nodeFilter: node => listStr.includes(node.id),
|
117
|
+
edgeFilter: edge => listStr.includes(edge.targetId) && listStr.includes(edge.sourceId)
|
118
|
+
}) : graphIdsAll;
|
119
|
+
this.logger.setStatusLine('rendering graph');
|
120
|
+
if (cycles) {
|
121
|
+
return this.getVisualCyclesFromGraph(graphIds, idsWithVersion, graphVizOpts);
|
122
|
+
}
|
123
|
+
return _legacy().VisualDependencyGraph.loadFromClearGraph(graphIds, graphVizOpts, idsWithVersion);
|
124
|
+
}
|
125
|
+
async getVisualCyclesFromGraph(graphIds, idsWithVersion, graphVizOpts = {}) {
|
126
|
+
const cyclesGraph = graphIds.findCycles();
|
127
|
+
const multipleCycles = cyclesGraph.map(cycle => {
|
128
|
+
if (idsWithVersion && (0, _lodash().intersection)(idsWithVersion, cycle).length < 1) return undefined;
|
129
|
+
return graphIds.subgraph(cycle, {
|
130
|
+
nodeFilter: node => cycle.includes(node.id),
|
131
|
+
edgeFilter: edge => cycle.includes(edge.targetId)
|
132
|
+
});
|
133
|
+
});
|
134
|
+
return _legacy().VisualDependencyGraph.loadFromMultipleClearGraphs((0, _lodash().compact)(multipleCycles), graphVizOpts, idsWithVersion);
|
135
|
+
}
|
136
|
+
async getIdsWithVersions(ids) {
|
137
|
+
const host = this.componentAspect.getHost();
|
138
|
+
if (!ids) return undefined;
|
139
|
+
const comps = await host.getMany(ids);
|
140
|
+
if (comps.length) return comps.map(comp => comp.id.toString());
|
141
|
+
return undefined;
|
142
|
+
}
|
83
143
|
static async provider([graphql, componentAspect, cli, loggerMain]) {
|
84
144
|
const logger = loggerMain.createLogger(_graph2().GraphAspect.id);
|
85
145
|
const graphBuilder = new (_graphBuilder().GraphBuilder)(componentAspect);
|
86
146
|
graphql.register((0, _graph().graphSchema)(graphBuilder, componentAspect));
|
87
147
|
const graphMain = new GraphMain(componentAspect, logger);
|
88
|
-
cli.register(new (_graphCmd().GraphCmd)(componentAspect));
|
148
|
+
cli.register(new (_graphCmd().GraphCmd)(componentAspect, graphMain));
|
89
149
|
return graphMain;
|
90
150
|
}
|
91
151
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_cli","data","require","_component","_graphql","_logger","_graphBuilder","_graph","_graph2","_graphCmd","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","GraphMain","constructor","componentAspect","logger","getGraph","ids","opts","graphBuilder","GraphBuilder","getGraphIds","provider","graphql","cli","loggerMain","createLogger","GraphAspect","id","register","graphSchema","graphMain","GraphCmd","exports","GraphqlAspect","ComponentAspect","CLIAspect","LoggerAspect","MainRuntime","addRuntime"],"sources":["graph.main.runtime.ts"],"sourcesContent":["import { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { ComponentMain, ComponentAspect, ComponentID } from '@teambit/component';\nimport { GraphqlAspect, GraphqlMain } from '@teambit/graphql';\nimport { Logger, LoggerAspect, LoggerMain } from '@teambit/logger';\nimport { GetGraphOpts, GraphBuilder } from './graph-builder';\nimport { graphSchema } from './graph.graphql';\nimport { GraphAspect } from './graph.aspect';\nimport { GraphCmd } from './graph-cmd';\nimport { ComponentGraph } from './component-graph';\nimport { ComponentIdGraph } from './component-id-graph';\n\nexport class GraphMain {\n constructor(\n private componentAspect: ComponentMain,\n private logger: Logger\n ) {}\n\n /**\n * important - prefer using `getGraphIds()` it's way better in terms of performance.\n */\n async getGraph(ids?: ComponentID[], opts: GetGraphOpts = {}): Promise<ComponentGraph> {\n const graphBuilder = new GraphBuilder(this.componentAspect);\n return graphBuilder.getGraph(ids, opts);\n }\n\n async getGraphIds(ids?: ComponentID[], opts: GetGraphOpts = {}): Promise<ComponentIdGraph> {\n const graphBuilder = new GraphBuilder(this.componentAspect);\n return graphBuilder.getGraphIds(ids, opts);\n }\n\n static slots = [];\n static dependencies = [GraphqlAspect, ComponentAspect, CLIAspect, LoggerAspect];\n static runtime = MainRuntime;\n static async provider([graphql, componentAspect, cli, loggerMain]: [\n GraphqlMain,\n ComponentMain,\n CLIMain,\n LoggerMain,\n ]) {\n const logger = loggerMain.createLogger(GraphAspect.id);\n\n const graphBuilder = new GraphBuilder(componentAspect);\n graphql.register(graphSchema(graphBuilder, componentAspect));\n\n const graphMain = new GraphMain(componentAspect, logger);\n cli.register(new GraphCmd(componentAspect));\n\n return graphMain;\n }\n}\n\nGraphAspect.addRuntime(GraphMain);\n"],"mappings":"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","ignoreList":[]}
|
1
|
+
{"version":3,"names":["_cli","data","require","_component","_graphql","_logger","_lodash","_graphBuilder","_graph","_graph2","_graphCmd","_legacy","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","GraphMain","constructor","componentAspect","logger","getGraph","ids","opts","graphBuilder","GraphBuilder","getGraphIds","getVisualGraphIds","setStatusLine","layout","includeLocalOnly","cycles","graphVizOpts","graphIdsAll","host","getHost","list","listIds","idsWithVersion","getIdsWithVersions","listStr","map","id","toString","graphIds","successorsSubgraph","nodeFilter","node","includes","edgeFilter","edge","targetId","sourceId","getVisualCyclesFromGraph","VisualDependencyGraph","loadFromClearGraph","cyclesGraph","findCycles","multipleCycles","cycle","intersection","length","undefined","subgraph","loadFromMultipleClearGraphs","compact","comps","getMany","comp","provider","graphql","cli","loggerMain","createLogger","GraphAspect","register","graphSchema","graphMain","GraphCmd","exports","GraphqlAspect","ComponentAspect","CLIAspect","LoggerAspect","MainRuntime","addRuntime"],"sources":["graph.main.runtime.ts"],"sourcesContent":["import { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { ComponentMain, ComponentAspect, ComponentID } from '@teambit/component';\nimport { GraphqlAspect, GraphqlMain } from '@teambit/graphql';\nimport { Logger, LoggerAspect, LoggerMain } from '@teambit/logger';\nimport { compact, intersection } from \"lodash\";\nimport { GetGraphOpts, GraphBuilder } from './graph-builder';\nimport { graphSchema } from './graph.graphql';\nimport { GraphAspect } from './graph.aspect';\nimport { GraphCmd, GraphOpt } from './graph-cmd';\nimport { ComponentGraph } from './component-graph';\nimport { ComponentIdGraph } from './component-id-graph';\nimport { GraphConfig, VisualDependencyGraph } from '@teambit/legacy.dependency-graph';\n\nexport class GraphMain {\n constructor(\n private componentAspect: ComponentMain,\n private logger: Logger\n ) {}\n\n /**\n * important - prefer using `getGraphIds()` it's way better in terms of performance.\n */\n async getGraph(ids?: ComponentID[], opts: GetGraphOpts = {}): Promise<ComponentGraph> {\n const graphBuilder = new GraphBuilder(this.componentAspect);\n return graphBuilder.getGraph(ids, opts);\n }\n\n async getGraphIds(ids?: ComponentID[], opts: GetGraphOpts = {}): Promise<ComponentIdGraph> {\n const graphBuilder = new GraphBuilder(this.componentAspect);\n return graphBuilder.getGraphIds(ids, opts);\n }\n\n /**\n * this visual graph-ids can render the graph as a SVG/png and other formats.\n */\n async getVisualGraphIds(ids?: ComponentID[], opts: GraphOpt = {}): Promise<VisualDependencyGraph> {\n this.logger.setStatusLine('loading graph');\n const { layout, includeLocalOnly, cycles } = opts;\n const graphVizOpts: GraphConfig = {}\n if (layout) graphVizOpts.layout = layout;\n const graphIdsAll = await this.getGraphIds(ids);\n\n const host = this.componentAspect.getHost();\n const list = await host.listIds();\n const idsWithVersion = await this.getIdsWithVersions(ids);\n const listStr = list.map((id) => id.toString());\n const graphIds = includeLocalOnly ? graphIdsAll.successorsSubgraph(idsWithVersion || listStr, {\n nodeFilter: (node) => listStr.includes(node.id),\n edgeFilter: (edge) => listStr.includes(edge.targetId) && listStr.includes(edge.sourceId)\n }) : graphIdsAll;\n this.logger.setStatusLine('rendering graph');\n if (cycles) {\n return this.getVisualCyclesFromGraph(graphIds, idsWithVersion, graphVizOpts);\n }\n return VisualDependencyGraph.loadFromClearGraph(graphIds, graphVizOpts, idsWithVersion);\n }\n\n private async getVisualCyclesFromGraph(graphIds: ComponentIdGraph, idsWithVersion?: string[],\n graphVizOpts: GraphConfig = {}\n ): Promise<VisualDependencyGraph> {\n const cyclesGraph = graphIds.findCycles();\n const multipleCycles = cyclesGraph.map((cycle) => {\n\n if (idsWithVersion && intersection(idsWithVersion, cycle).length < 1) return undefined;\n return graphIds.subgraph(cycle,\n {\n nodeFilter: (node) => cycle.includes(node.id),\n edgeFilter: (edge) => cycle.includes(edge.targetId)\n },\n );\n });\n return VisualDependencyGraph.loadFromMultipleClearGraphs(compact(multipleCycles), graphVizOpts, idsWithVersion);\n }\n\n private async getIdsWithVersions(ids?: ComponentID[]): Promise<string[] | undefined> {\n const host = this.componentAspect.getHost();\n if (!ids) return undefined;\n const comps = await host.getMany(ids);\n if (comps.length) return comps.map(comp => comp.id.toString());\n return undefined;\n }\n\n static slots = [];\n static dependencies = [GraphqlAspect, ComponentAspect, CLIAspect, LoggerAspect];\n static runtime = MainRuntime;\n static async provider([graphql, componentAspect, cli, loggerMain]: [\n GraphqlMain,\n ComponentMain,\n CLIMain,\n LoggerMain,\n ]) {\n const logger = loggerMain.createLogger(GraphAspect.id);\n\n const graphBuilder = new GraphBuilder(componentAspect);\n graphql.register(graphSchema(graphBuilder, componentAspect));\n\n const graphMain = new GraphMain(componentAspect, logger);\n cli.register(new GraphCmd(componentAspect, graphMain));\n\n return graphMain;\n }\n}\n\nGraphAspect.addRuntime(GraphMain);\n"],"mappings":";;;;;;AAAA,SAAAA,KAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,IAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,WAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,UAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAG,SAAA;EAAA,MAAAH,IAAA,GAAAC,OAAA;EAAAE,QAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAI,QAAA;EAAA,MAAAJ,IAAA,GAAAC,OAAA;EAAAG,OAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAK,QAAA;EAAA,MAAAL,IAAA,GAAAC,OAAA;EAAAI,OAAA,YAAAA,CAAA;IAAA,OAAAL,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAM,cAAA;EAAA,MAAAN,IAAA,GAAAC,OAAA;EAAAK,aAAA,YAAAA,CAAA;IAAA,OAAAN,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAO,OAAA;EAAA,MAAAP,IAAA,GAAAC,OAAA;EAAAM,MAAA,YAAAA,CAAA;IAAA,OAAAP,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAQ,QAAA;EAAA,MAAAR,IAAA,GAAAC,OAAA;EAAAO,OAAA,YAAAA,CAAA;IAAA,OAAAR,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAS,UAAA;EAAA,MAAAT,IAAA,GAAAC,OAAA;EAAAQ,SAAA,YAAAA,CAAA;IAAA,OAAAT,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAGA,SAAAU,QAAA;EAAA,MAAAV,IAAA,GAAAC,OAAA;EAAAS,OAAA,YAAAA,CAAA;IAAA,OAAAV,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAsF,SAAAW,gBAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAE,cAAA,CAAAF,CAAA,MAAAD,CAAA,GAAAI,MAAA,CAAAC,cAAA,CAAAL,CAAA,EAAAC,CAAA,IAAAK,KAAA,EAAAJ,CAAA,EAAAK,UAAA,MAAAC,YAAA,MAAAC,QAAA,UAAAT,CAAA,CAAAC,CAAA,IAAAC,CAAA,EAAAF,CAAA;AAAA,SAAAG,eAAAD,CAAA,QAAAQ,CAAA,GAAAC,YAAA,CAAAT,CAAA,uCAAAQ,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAT,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAF,CAAA,GAAAE,CAAA,CAAAU,MAAA,CAAAC,WAAA,kBAAAb,CAAA,QAAAU,CAAA,GAAAV,CAAA,CAAAc,IAAA,CAAAZ,CAAA,EAAAD,CAAA,uCAAAS,CAAA,SAAAA,CAAA,YAAAK,SAAA,yEAAAd,CAAA,GAAAe,MAAA,GAAAC,MAAA,EAAAf,CAAA;AAE/E,MAAMgB,SAAS,CAAC;EACrBC,WAAWA,CACDC,eAA8B,EAC9BC,MAAc,EACtB;IAAA,KAFQD,eAA8B,GAA9BA,eAA8B;IAAA,KAC9BC,MAAc,GAAdA,MAAc;EACrB;;EAEH;AACF;AACA;EACE,MAAMC,QAAQA,CAACC,GAAmB,EAAEC,IAAkB,GAAG,CAAC,CAAC,EAA2B;IACpF,MAAMC,YAAY,GAAG,KAAIC,4BAAY,EAAC,IAAI,CAACN,eAAe,CAAC;IAC3D,OAAOK,YAAY,CAACH,QAAQ,CAACC,GAAG,EAAEC,IAAI,CAAC;EACzC;EAEA,MAAMG,WAAWA,CAACJ,GAAmB,EAAEC,IAAkB,GAAG,CAAC,CAAC,EAA6B;IACzF,MAAMC,YAAY,GAAG,KAAIC,4BAAY,EAAC,IAAI,CAACN,eAAe,CAAC;IAC3D,OAAOK,YAAY,CAACE,WAAW,CAACJ,GAAG,EAAEC,IAAI,CAAC;EAC5C;;EAEA;AACF;AACA;EACE,MAAMI,iBAAiBA,CAACL,GAAmB,EAAEC,IAAc,GAAG,CAAC,CAAC,EAAkC;IAChG,IAAI,CAACH,MAAM,CAACQ,aAAa,CAAC,eAAe,CAAC;IAC1C,MAAM;MAAEC,MAAM;MAAEC,gBAAgB;MAAEC;IAAO,CAAC,GAAGR,IAAI;IACjD,MAAMS,YAAyB,GAAG,CAAC,CAAC;IACpC,IAAIH,MAAM,EAAEG,YAAY,CAACH,MAAM,GAAGA,MAAM;IACxC,MAAMI,WAAW,GAAG,MAAM,IAAI,CAACP,WAAW,CAACJ,GAAG,CAAC;IAE/C,MAAMY,IAAI,GAAG,IAAI,CAACf,eAAe,CAACgB,OAAO,CAAC,CAAC;IAC3C,MAAMC,IAAI,GAAG,MAAMF,IAAI,CAACG,OAAO,CAAC,CAAC;IACjC,MAAMC,cAAc,GAAG,MAAM,IAAI,CAACC,kBAAkB,CAACjB,GAAG,CAAC;IACzD,MAAMkB,OAAO,GAAGJ,IAAI,CAACK,GAAG,CAAEC,EAAE,IAAKA,EAAE,CAACC,QAAQ,CAAC,CAAC,CAAC;IAC/C,MAAMC,QAAQ,GAAGd,gBAAgB,GAAGG,WAAW,CAACY,kBAAkB,CAACP,cAAc,IAAIE,OAAO,EAAE;MAC5FM,UAAU,EAAGC,IAAI,IAAKP,OAAO,CAACQ,QAAQ,CAACD,IAAI,CAACL,EAAE,CAAC;MAC/CO,UAAU,EAAGC,IAAI,IAAKV,OAAO,CAACQ,QAAQ,CAACE,IAAI,CAACC,QAAQ,CAAC,IAAIX,OAAO,CAACQ,QAAQ,CAACE,IAAI,CAACE,QAAQ;IACzF,CAAC,CAAC,GAAGnB,WAAW;IAChB,IAAI,CAACb,MAAM,CAACQ,aAAa,CAAC,iBAAiB,CAAC;IAC5C,IAAIG,MAAM,EAAE;MACV,OAAO,IAAI,CAACsB,wBAAwB,CAACT,QAAQ,EAAEN,cAAc,EAAEN,YAAY,CAAC;IAC9E;IACA,OAAOsB,+BAAqB,CAACC,kBAAkB,CAACX,QAAQ,EAAEZ,YAAY,EAAEM,cAAc,CAAC;EACzF;EAEA,MAAce,wBAAwBA,CAACT,QAA0B,EAAEN,cAAyB,EAC1FN,YAAyB,GAAG,CAAC,CAAC,EACE;IAChC,MAAMwB,WAAW,GAAGZ,QAAQ,CAACa,UAAU,CAAC,CAAC;IACzC,MAAMC,cAAc,GAAGF,WAAW,CAACf,GAAG,CAAEkB,KAAK,IAAK;MAEhD,IAAIrB,cAAc,IAAI,IAAAsB,sBAAY,EAACtB,cAAc,EAAEqB,KAAK,CAAC,CAACE,MAAM,GAAG,CAAC,EAAE,OAAOC,SAAS;MACtF,OAAOlB,QAAQ,CAACmB,QAAQ,CAACJ,KAAK,EAC5B;QACEb,UAAU,EAAGC,IAAI,IAAKY,KAAK,CAACX,QAAQ,CAACD,IAAI,CAACL,EAAE,CAAC;QAC7CO,UAAU,EAAGC,IAAI,IAAKS,KAAK,CAACX,QAAQ,CAACE,IAAI,CAACC,QAAQ;MACpD,CACF,CAAC;IACH,CAAC,CAAC;IACF,OAAOG,+BAAqB,CAACU,2BAA2B,CAAC,IAAAC,iBAAO,EAACP,cAAc,CAAC,EAAE1B,YAAY,EAAEM,cAAc,CAAC;EACjH;EAEA,MAAcC,kBAAkBA,CAACjB,GAAmB,EAAiC;IACnF,MAAMY,IAAI,GAAG,IAAI,CAACf,eAAe,CAACgB,OAAO,CAAC,CAAC;IAC3C,IAAI,CAACb,GAAG,EAAE,OAAOwC,SAAS;IAC1B,MAAMI,KAAK,GAAG,MAAMhC,IAAI,CAACiC,OAAO,CAAC7C,GAAG,CAAC;IACrC,IAAI4C,KAAK,CAACL,MAAM,EAAE,OAAOK,KAAK,CAACzB,GAAG,CAAC2B,IAAI,IAAIA,IAAI,CAAC1B,EAAE,CAACC,QAAQ,CAAC,CAAC,CAAC;IAC9D,OAAOmB,SAAS;EAClB;EAKA,aAAaO,QAAQA,CAAC,CAACC,OAAO,EAAEnD,eAAe,EAAEoD,GAAG,EAAEC,UAAU,CAK/D,EAAE;IACD,MAAMpD,MAAM,GAAGoD,UAAU,CAACC,YAAY,CAACC,qBAAW,CAAChC,EAAE,CAAC;IAEtD,MAAMlB,YAAY,GAAG,KAAIC,4BAAY,EAACN,eAAe,CAAC;IACtDmD,OAAO,CAACK,QAAQ,CAAC,IAAAC,oBAAW,EAACpD,YAAY,EAAEL,eAAe,CAAC,CAAC;IAE5D,MAAM0D,SAAS,GAAG,IAAI5D,SAAS,CAACE,eAAe,EAAEC,MAAM,CAAC;IACxDmD,GAAG,CAACI,QAAQ,CAAC,KAAIG,oBAAQ,EAAC3D,eAAe,EAAE0D,SAAS,CAAC,CAAC;IAEtD,OAAOA,SAAS;EAClB;AACF;AAACE,OAAA,CAAA9D,SAAA,GAAAA,SAAA;AAAAnB,eAAA,CAxFYmB,SAAS,WAqEL,EAAE;AAAAnB,eAAA,CArENmB,SAAS,kBAsEE,CAAC+D,wBAAa,EAAEC,4BAAe,EAAEC,gBAAS,EAAEC,sBAAY,CAAC;AAAArF,eAAA,CAtEpEmB,SAAS,aAuEHmE,kBAAW;AAmB9BV,qBAAW,CAACW,UAAU,CAACpE,SAAS,CAAC","ignoreList":[]}
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.component_graph@1.0.
|
2
|
-
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.component_graph@1.0.
|
1
|
+
import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.component_graph@1.0.542/dist/graph.composition.js';
|
2
|
+
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.component_graph@1.0.542/dist/graph.docs.md';
|
3
3
|
|
4
4
|
export const compositions = [compositions_0];
|
5
5
|
export const overview = [overview_0];
|
package/package.json
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
{
|
2
2
|
"name": "@teambit/graph",
|
3
|
-
"version": "1.0.
|
3
|
+
"version": "1.0.542",
|
4
4
|
"homepage": "https://bit.cloud/teambit/component/graph",
|
5
5
|
"main": "dist/index.js",
|
6
6
|
"componentId": {
|
7
7
|
"scope": "teambit.component",
|
8
8
|
"name": "graph",
|
9
|
-
"version": "1.0.
|
9
|
+
"version": "1.0.542"
|
10
10
|
},
|
11
11
|
"dependencies": {
|
12
12
|
"graphlib": "2.1.8",
|
@@ -33,17 +33,16 @@
|
|
33
33
|
"@teambit/design.ui.pages.not-found": "0.0.371",
|
34
34
|
"@teambit/design.ui.pages.server-error": "0.0.368",
|
35
35
|
"@teambit/ui-foundation.ui.react-router.use-query": "0.0.505",
|
36
|
-
"@teambit/legacy.dependency-graph": "0.0.
|
37
|
-
"@teambit/component": "1.0.
|
38
|
-
"@teambit/cli": "0.0.
|
39
|
-
"@teambit/scope.remotes": "0.0.
|
40
|
-
"@teambit/
|
41
|
-
"@teambit/workspace": "1.0.540",
|
36
|
+
"@teambit/legacy.dependency-graph": "0.0.34",
|
37
|
+
"@teambit/component": "1.0.542",
|
38
|
+
"@teambit/cli": "0.0.1119",
|
39
|
+
"@teambit/scope.remotes": "0.0.31",
|
40
|
+
"@teambit/workspace": "1.0.542",
|
42
41
|
"@teambit/component.ui.component-compare.models.component-compare-props": "0.0.119",
|
43
|
-
"@teambit/graphql": "1.0.
|
44
|
-
"@teambit/logger": "0.0.
|
45
|
-
"@teambit/component-compare": "1.0.
|
46
|
-
"@teambit/ui": "1.0.
|
42
|
+
"@teambit/graphql": "1.0.542",
|
43
|
+
"@teambit/logger": "0.0.1212",
|
44
|
+
"@teambit/component-compare": "1.0.542",
|
45
|
+
"@teambit/ui": "1.0.542",
|
47
46
|
"@teambit/component.modules.component-url": "0.0.173",
|
48
47
|
"@teambit/envs.ui.env-icon": "0.0.506",
|
49
48
|
"@teambit/component.ui.component-compare.context": "0.0.122"
|