https://github.com/jalal246/packagesorter
  
  
    🔄 Dependencies sorting algorithm. It sorts, retrieves unsortable, and returns sorting history for each package 
    https://github.com/jalal246/packagesorter
  
array-sort devops extracts helper json json-sort json-sorting monorepo move-position package-manager package-sorter position recursive recursive-functions sort sort-algorithm sort-algorithms sort-array sort-array-js utility
        Last synced: 7 months ago 
        JSON representation
    
🔄 Dependencies sorting algorithm. It sorts, retrieves unsortable, and returns sorting history for each package
- Host: GitHub
- URL: https://github.com/jalal246/packagesorter
- Owner: jalal246
- License: gpl-3.0
- Created: 2020-01-22T13:48:26.000Z (almost 6 years ago)
- Default Branch: main
- Last Pushed: 2022-08-28T13:55:46.000Z (about 3 years ago)
- Last Synced: 2025-03-27T19:40:12.402Z (7 months ago)
- Topics: array-sort, devops, extracts, helper, json, json-sort, json-sorting, monorepo, move-position, package-manager, package-sorter, position, recursive, recursive-functions, sort, sort-algorithm, sort-algorithms, sort-array, sort-array-js, utility
- Language: JavaScript
- Homepage: https://jalal246.github.io/packageSorter/
- Size: 201 KB
- Stars: 10
- Watchers: 2
- Forks: 0
- Open Issues: 0
- 
            Metadata Files:
            - Readme: README.md
- License: LICENSE
 
Awesome Lists containing this project
README
          # Package Sorter
> 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`
```bash
npm install package-sorter
```
## API
```js
packageSorter(packages? Array, coreDependency? string)
```
Returns result object:
- `sorted: Array ` - all sorted packages in order.
- `sortingMap: Array `- map of package sorting contains:
  - `form: number` - original package index before sorting.
  - `to: number` - current package index after sorting.
- `unSorted: Array ` - unsortable package that's missing dependency.
```js
const { sorted, sortingMap, unSorted } = packageSorter(
  packages,
  coreDependency
);
```
If `coreDependency` is not passed, `package-sorter` will extract it following
monorepo naming pattern as: `@coreDep/`
### Example (1) - All Sorted
```js
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 = [];
```
### Example (2) - Mixed Packages
```js
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 = [];
```
### Example (3) - Some Unsorted
```js
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];
```
## Test
```sh
npm test
```
## License
This project is licensed under the [GPL-3.0 License](https://github.com/jalal246/packageSorter/blob/master/LICENSE)
### Related projects
- [move-position](https://github.com/jalal246/move-position) - Moves element
  index in given array from position A to B.
- [builderz](https://github.com/jalal246/builderz) - Zero Configuration JS bundler.
- [corename](https://github.com/jalal246/corename) - Extracts package name.
- [get-info](https://github.com/jalal246/get-info) - Utility functions for
  projects production.
- [textics](https://github.com/jalal246/textics) &
  [textics-stream](https://github.com/jalal246/textics-stream) - Counts lines,
  words, chars and spaces for a given string.
- [folo](https://github.com/jalal246/folo) - Form & Layout Components Built with React.