@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.
@@ -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":[]}
@@ -1,14 +1,17 @@
1
1
  import { Command, CommandOptions } from '@teambit/cli';
2
2
  import { ComponentMain } from '@teambit/component';
3
- type GraphOpt = {
4
- image?: string;
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], { remote, allVersions, layout, image }: GraphOpt): Promise<string>;
21
- private generateGraph;
22
- json([id]: [string], { remote, allVersions }: GraphOpt): Promise<Object>;
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 workspace components' dependencies graph");
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", [['i', 'image <image>', 'image path and format. use one of the following extensions: [gif, png, svg, pdf]'], ['r', 'remote [remoteName]', 'remote name (name is optional, leave empty when id is specified)'], ['', 'all-versions', 'enter all components versions into the graph, not only latest'], ['', 'layout <name>', 'GraphVis layout. default to "dot". options are [circo, dot, fdp, neato, osage, patchwork, sfdp, twopi]'], ['j', 'json', 'json format']]);
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
- remote,
89
- allVersions,
90
- layout,
91
- image
92
- }) {
93
- const workspace = this.componentAspect.getHost('teambit.workspace/workspace');
94
- if (!workspace && !remote) throw new (_workspace().OutsideWorkspaceError)();
95
- const graph = await this.generateGraph(workspace, id, remote, allVersions);
96
- const config = {};
97
- // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
98
- if (layout) config.layout = layout;
99
- const visualDependencyGraph = await _legacy().VisualDependencyGraph.loadFromGraphlib(graph, config);
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
- if (typeof remote !== 'string') {
122
- throw new Error('please specify remote scope name or enter an id');
123
- }
124
- const remoteScope = await (0, _scope().getRemoteByName)(remote, workspace?.consumer);
125
- const componentDepGraph = await remoteScope.graph();
126
- return componentDepGraph.graph;
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 workspace = this.componentAspect.getHost('teambit.workspace/workspace');
145
- if (!workspace && !remote) throw new (_workspace().OutsideWorkspaceError)();
146
- const graph = await this.generateGraph(workspace, id, remote, allVersions);
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
 
@@ -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":"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","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":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
- import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.component_graph@1.0.540/dist/graph.composition.js';
2
- import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.component_graph@1.0.540/dist/graph.docs.md';
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.540",
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.540"
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.32",
37
- "@teambit/component": "1.0.540",
38
- "@teambit/cli": "0.0.1117",
39
- "@teambit/scope.remotes": "0.0.29",
40
- "@teambit/toolbox.string.random": "0.0.5",
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.540",
44
- "@teambit/logger": "0.0.1210",
45
- "@teambit/component-compare": "1.0.540",
46
- "@teambit/ui": "1.0.540",
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"