Skip to content

jalal246/packageSorter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

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.

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy