Thanks to visit codestin.com
Credit goes to Github.com

Skip to content

πŸ”„ Dependencies sorting algorithm. It sorts, retrieves unsortable, and returns sorting history for each package

License

Notifications You must be signed in to change notification settings

jalal246/packageSorter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

128 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

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

npm install package-sorter

API

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/

Example (1) - All Sorted

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

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

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

npm test

License

This project is licensed under the GPL-3.0 License

Related projects

  • 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.