@beemo/dependency-graph
Version:
Generate a dependency graph for a list of packages, based on their defined `dependencies` and `peerDependencies`.
83 lines (65 loc) • 2.13 kB
Markdown
# Dependency Graph
[](https://github.com/beemojs/beemo/actions?query=branch%3Amaster)
[](https://www.npmjs.com/package/@beemo/dependency-graph)
[](https://www.npmjs.com/package/@beemo/dependency-graph)
Generate a dependency graph for a list of packages, based on their defined `dependencies` and
`peerDependencies`.
## Installation
```
yarn add @beemo/dependency-graph
// Or
npm install @beemo/dependency-graph --save
```
## Documentation
To begin, instantiate an instance of `Graph`, which accepts a list of optional `package.json`
objects as the first argument.
```ts
import Graph from '@beemo/dependency-graph';
const graph = new Graph([
{
name: '@beemo/core',
},
{
name: '@beemo/cli',
dependencies: {
'@beemo/core': '^1.0.0',
},
},
]);
```
Alternatively, `package.json` objects can be added dynamically using `Graph#addPackage` or
`Graph#addPackages`.
```ts
graph.addPackage({
name: '@beemo/driver-jest',
peerDependencies: {
'@beemo/core': '^1.0.0',
'@beemo/driver-babel': '^1.0.0',
},
});
```
Once all packages have been defined, we can generate a graph using these `Graph` methods:
- `resolveList` - Returns an array of packages in order of most depended on.
- `resolveBatchList` - Like the previous, but returns the array batched based on depth.
- `resolveTree` - Returns a tree of nodes based on the graph.
```ts
// List of packages
graph.resolveList().forEach((pkg) => {
console.log(pkg.name);
});
// List of list of packages
graph.resolveBatchList().forEach((pkgs) => {
pkgs.forEach((pkg) => {
console.log(pkg.name);
});
});
// Tree of nodes
graph.resolveTree().nodes.forEach((node) => {
console.log(node.package.name);
if (node.nodes) {
// Dependents
}
});
```
> Will only resolve and return packages that have been defined. Will _not_ return non-defined
> packages found in `dependencies` and `peerDependencies`.