Sorting a group of packages that depends on each other
Having multiple projects in workspace depending on each other is a headache. You
have to build core first, then the project depends on it, and so on. You
probably want this step to be automated so you can use: package-sorter
npm install package-sorter
packageSorter(packages? Array, coreDependency? string)
Returns result object:
sorted: Array <sortedPkgJson>
- all sorted packages in order.sortingMap: Array <sortingMap>
- map of package sorting contains:form: number
- original package index before sorting.to: number
- current package index after sorting.
unSorted: Array <unsortedPkgJson>
- unsortable package that's missing dependency.
const { sorted, sortingMap, unSorted } = packageSorter(
packages,
coreDependency
);
If coreDependency
is not passed, package-sorter
will extract it following
monorepo naming pattern as: @coreDep/
import packageSorter from "package-sorter";
// input packages
const pkg1 = {
name: "@pkg/first",
dependencies: {},
};
const pkg2 = {
name: "@pkg/second",
dependencies: {
"@pkg/first": "^0.1.5",
},
};
const pkg3 = {
name: "@pkg/third",
dependencies: {
"@pkg/second": "^0.1.5",
},
};
const packages = [pkg3, pkg2, pkg1];
// our core dependency in this case is: @pkg.
const { sorted, sortingMap, unSorted } = packageSorter(packages, "@pkg");
// sorted = [pkg1, pkg2, pkg3];
// sortingMap = [
// { from: 2, to: 0 },
// { from: 1, to: 1 },
// { from: 0, to: 2 },
// ];
// unSorted = [];
import packageSorter from "package-sorter";
// input packages
const pkg1 = {
name: "@pkg/first",
dependencies: {},
};
const pkg2 = {
name: "@pkg/second",
dependencies: {
"@pkg/first": "^0.1.5",
},
};
const pkg3 = {
name: "unrelated",
dependencies: {},
};
const packages = [pkg3, pkg2, pkg1];
// let the function gets core dependency (@pkg) by itself
const { sorted, sortingMap, unSorted } = packageSorter(packages);
// sorted = [pkg3, pkg1, pkg2];
// sortingMap = [
// { from: 0, to: 0 },
// { from: 2, to: 1 },
// { from: 1, to: 2 },
// ];
// unSorted = [];
import packageSorter from "package-sorter";
// input packages
const pkg1 = {
name: "@pkg/first",
dependencies: {},
};
const pkg2 = {
name: "@pkg/second",
dependencies: {
"@pkg/first": "^0.1.5",
},
};
const pkg3 = {
name: "@pkg/unsortable",
dependencies: {
"@pkg/missing": "^0.1.5",
},
};
const packages = [pkg3, pkg2, pkg1];
const { sorted, sortingMap, unSorted } = packageSorter(packages);
// sorted = [pkg1, pkg2];
// sortingMap = [
// { from: 2, to: 0 },
// { from: 1, to: 1 },
// ];
// unSorted = [pkg3];
npm test
This project is licensed under the GPL-3.0 License
-
move-position - Moves element index in given array from position A to B.
-
builderz - Zero Configuration JS bundler.
-
corename - Extracts package name.
-
get-info - Utility functions for projects production.
-
textics & textics-stream - Counts lines, words, chars and spaces for a given string.
-
folo - Form & Layout Components Built with React.