Determines the dependency order in which to build packages.
- Use
buildOrder
to get a singlestring[]
of builds in series. - Use
getBuildTracker
to get a tracker that tracks which packages become available to build when others complete.
buildOrder
takes in settings object providing an Object
or Map
member named paths
linking package names to their folder or package.json
paths.
It returns a Promise
for the order in which the packages should be built.
For example, if second
has a dependency on first
in its package.json
, the order would be ["first", "second"]
.
import { buildOrder } from "package-build-order";
Passing a traditional Object
:
const order = await buildOrder({
paths: {
first: "./path/to/first",
second: "./path/to/second"
}
});
Passing a Map
:
const order = await buildOrder({
paths: new Map([
["first", "./path/to/first"],
["second", "./path/to/second"]
]
}))
buildOrder
takes in settings object providing an Object
or Map
member named paths
linking package names to their folder or package.json
paths.
It returns a Promise
for a tracker object with two methods:
-
getAvailablePackages
- Returns astring[]
with all packages that are able to build. -
markCompleted
- Marks a package as completed and returns astring[]
of any packages that are now available to build.
If markCompleted
returns an empty []
, that indicates all possible packages have been completed.
import { getBuildTracker } from "package-build-order";
const tracker = await getBuildTracker({
paths: {
first: "./path/to/first", // dependencies: []
second: "./path/to/second" // dependencies: ["first"]
}
});
tracker.getAvailablePackages(); // ["first"]
tracker.markCompleted("first"); // ["second"]
tracker.getAvailablePackages(); // ["first", "second"]
You can also pass direct references to .json
files, provided they provide "dependencies"
as an array of project names.
const order = await buildOrder({
paths: {
first: "./path/to/first/package.json",
second: "./path/to/second/custom-settings.json"
}
});
Requires Node >= 7