0.0.1 • Published 21 days ago

@n1ru4l/toposort v0.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
21 days ago

@n1ru4l/toposort

TypeScript npm npm bundle size Dependencies NPM

Why?

All toposort libraries I found where either JavaScript only, had a lot of dependencies, were cumbersome to deal with or did not produce dependency list that allowed detecting which tasks could be executed in parallel.

This library is basically a port of batching-toposort to TypeScript that uses modern ECMA structures such as Map and Set, as well as providing a utility toposortReverse function that I needed most of the time, when dealing with dependency lists.

This library also provides CommonJS and ES Module builds.

Install

yarn install -E @n1ru4l/toposort

Usage

toposort

Sort list of tasks.

import { toposort } from "@n1ru4l/toposort";

const tasks = new Map([
  // after wakeUp is done we can do drinkCoffee and eatBreakfast
  ["wakeUp", ["drinkCoffee", "eatBreakfast"]],
  ["drinkCoffee", ["brushTeeth"]],
  ["eatBreakfast", ["brushTeeth"]],
  ["brushTeeth", ["floss"]],
  // after flossing is done no further task must be done
  ["floss", []],
]);

const sorted = toposort(tasks);
console.log(sorted);
// [
//   Set(1) { 'wakeUp' },
//   Set(2) { 'drinkCoffee', 'eatBreakfast' },
//   Set(1) { 'brushTeeth' },
//   Set(1) { 'floss' }
// ]

toposortReverse

Most of the time I needed this instead of toposort. It is easier to grasp for my mind that task a depends on task b and c instead of declaring it the other way around. I am not sure about the naming. If you think a better naming is possible please send a pull request.

import { toposortReverse } from "@n1ru4l/toposort";

const graph = new Map([
  // before we can drinkCoffee, we need to wakeUp
  ["drinkCoffee", ["wakeUp"]],
  // before we can eatBreakfast, we need to wakeUp
  ["eatBreakfast", ["wakeUp"]],
  // before we can brushTeeth, we need to drinkCoffee and eatBreakfast
  ["brushTeeth", ["drinkCoffee", "eatBreakfast"]],
  // before we can floss, we need to brushTeeth
  ["floss", ["brushTeeth"]],
  // wakeUp can be done without any dependencies
  ["wakeUp", []],
]);

const sorted = toposortReverse(graph);
// [
//   Set(1) { 'wakeUp' },
//   Set(2) { 'drinkCoffee', 'eatBreakfast' },
//   Set(1) { 'brushTeeth' },
//   Set(1) { 'floss' }
// ]
0.0.2-64baa048.0

21 days ago

0.0.2-aeefe5ad.0

27 days ago

0.0.2-6d93e257.0

1 month ago

0.0.2-579317ad.0

2 months ago

0.0.2-d07e1ae3.0

3 months ago

0.0.2-4a0a8683.0

3 months ago

0.0.2-8b8fe0ea.0

5 months ago

0.0.2-86f1d839.0

5 months ago

0.0.2-8e57227e.0

9 months ago

0.0.2-b232661b.0

8 months ago

0.0.2-804a80a0.0

5 months ago

0.0.2-dde167af.0

6 months ago

0.0.2-99b42abf.0

9 months ago

0.0.2-d5e24273.0

5 months ago

0.0.2-bc0683fe.0

10 months ago

0.0.2-1b402ee1.0

10 months ago

0.0.2-a84bd73e.0

12 months ago

0.0.2-ea943b5f.0

12 months ago

0.0.2-9d7b17ed.0

12 months ago

0.0.2-bb5845f9.0

12 months ago

0.0.2-af0408a5.0

12 months ago

0.0.2-9de0dc8b.0

12 months ago

0.0.2-81082c9e.0

12 months ago

0.0.2-5ac12065.0

12 months ago

0.0.2-57a716bc.0

12 months ago

0.0.2-04ab81b6.0

12 months ago

0.0.2-db45249a.0

12 months ago

0.0.2-766b154c.0

12 months ago

0.0.2-3ca3b87f.0

12 months ago

0.0.2-6823f7b3.0

12 months ago

0.0.2-cc8a4231.0

12 months ago

0.0.2-ec907af6.0

12 months ago

0.0.2-ac18c245.0

2 years ago

0.0.2-f751b279.0

2 years ago

0.0.2-ccc200c0.0

2 years ago

0.0.2-0b4c8de5.0

2 years ago

0.0.2-d7f4bf5d.0

2 years ago

0.0.2-86969696.0

2 years ago

0.0.2-2ad3bf97.0

2 years ago

0.0.2-1f6c8cff.0

2 years ago

0.0.2-14a35284.0

2 years ago

0.0.2-24710723.0

2 years ago

0.0.2-6d4e0963.0

2 years ago

0.0.2-5b73f5aa.0

2 years ago

0.0.2-8b629f9f.0

2 years ago

0.0.2-7d753365.0

2 years ago

0.0.2-fc0ff54d.0

2 years ago

0.0.2-37a3bf5c.0

2 years ago

0.0.2-dca8b0f7.0

2 years ago

0.0.2-9f5d399c.0

2 years ago

0.0.2-f6ac54a6.0

2 years ago

0.0.2-2daee456.0

2 years ago

0.0.2-4b619903.0

2 years ago

0.0.2-8ab54a5b.0

2 years ago

0.0.2-622d5fe4.0

2 years ago

0.0.2-4cadb53d.0

2 years ago

0.0.2-cb051160.0

2 years ago

0.0.2-f4ceb740.0

2 years ago

0.0.2-fd3e095f.0

2 years ago

0.0.2-40ccf468.0

2 years ago

0.0.2-5df2abd0.0

2 years ago

0.0.2-a9352ba0.0

2 years ago

0.0.2-a59662fa.0

2 years ago

0.0.2-daf3e230.0

2 years ago

0.0.2-5801e1b1.0

2 years ago

0.0.2-308ce8e2.0

2 years ago

0.0.2-e3899625.0

2 years ago

0.0.2-a969d6ae.0

2 years ago

0.0.2-123069cc.0

2 years ago

0.0.2-ddd0f647.0

2 years ago

0.0.2-cd12e47d.0

2 years ago

0.0.2-e810c2e3.0

2 years ago

0.0.2-4e434943.0

2 years ago

0.0.2-78c511ba.0

2 years ago

0.0.2-87c29609.0

3 years ago

0.0.2-8abc2b9e.0

3 years ago

0.0.2-e1c0c057.0

3 years ago

0.0.2-93aae96a.0

3 years ago

0.0.2-c7bba0fd.0

3 years ago

0.0.2-820bdb43.0

3 years ago

0.0.2-136bed88.0

3 years ago

0.0.2-53cfa3a6.0

3 years ago

0.0.2-1d5ead03.0

3 years ago

0.0.2-62dc7eef.0

3 years ago

0.0.2-c9f84e42.0

3 years ago

0.0.2-95867630.0

3 years ago

0.0.2-b2222cc4.0

3 years ago

0.0.2-feb6cae1.0

3 years ago

0.0.2-c73c7806.0

3 years ago

0.0.2-8c009781.0

3 years ago

0.0.2-4596f75f.0

3 years ago

0.0.2-e86e3c66.0

3 years ago

0.0.2-2309055b.0

3 years ago

0.0.2-5f323b81.0

3 years ago

0.0.2-6f1d2ebe.0

3 years ago

0.0.2-32e190b5.0

3 years ago

0.0.2-e5f87003.0

3 years ago

0.0.2-dc8e2299.0

3 years ago

0.0.2-4aa1cf03.0

3 years ago

0.0.2-3ed1f9f9.0

3 years ago

0.0.2-060f5892.0

3 years ago

0.0.2-06922ab2.0

3 years ago

0.0.2-296b548a.0

3 years ago

0.0.2-0cf5e3af.0

3 years ago

0.0.2-2e00a954.0

3 years ago

0.0.2-5f686d30.0

3 years ago

0.0.2-1e97a831.0

3 years ago

0.0.2-8df21a0a.0

3 years ago

0.0.2-ead202f6.0

3 years ago

0.0.2-70cf6163.0

3 years ago

0.0.2-4f16020d.0

3 years ago

0.0.2-331daa8a.0

3 years ago

0.0.2-f5fbb2ac.0

3 years ago

0.0.2-540b35ff.0

3 years ago

0.0.2-8af1af60.0

3 years ago

0.0.2-648d54b0.0

3 years ago

0.0.2-9d386c2b.0

3 years ago

0.0.2-73509be0.0

3 years ago

0.0.2-82c93e7d.0

3 years ago

0.0.2-91913503.0

3 years ago

0.0.2-56bccf87.0

3 years ago

0.0.2-3cb6dad2.0

3 years ago

0.0.2-fd09825a.0

3 years ago

0.0.2-ff161d17.0

3 years ago

0.0.2-67f89c35.0

3 years ago

0.0.2-60e47f96.0

3 years ago

0.0.2-6e21a967.0

3 years ago

0.0.2-09d9babb.0

3 years ago

0.0.2-37c48d22.0

3 years ago

0.0.2-96529970.0

3 years ago

0.0.2-66b2dd11.0

3 years ago

0.0.2-ffc3869a.0

3 years ago

0.0.2-bdb96002.0

3 years ago

0.0.2-ae4fcadf.0

3 years ago

0.0.2-97475f42.0

3 years ago

0.0.2-9ee71dd4.0

3 years ago

0.0.2-bed262e4.0

3 years ago

0.0.2-490009b6.0

3 years ago

0.0.2-9277ab21.0

3 years ago

0.0.2-fca68085.0

3 years ago

0.0.2-6ef4e173.0

3 years ago

0.0.2-0ec71803.0

3 years ago

0.0.2-f0e373fe.0

3 years ago

0.0.2-57eba650.0

3 years ago

0.0.2-3bf8a24e.0

3 years ago

0.0.2-3d7ada4c.0

3 years ago

0.0.2-bca31986.0

3 years ago

0.0.2-204ab1ba.0

3 years ago

0.0.2-a767b939.0

3 years ago

0.0.2-f16427f3.0

3 years ago

0.0.2-7b3b1bbd.0

3 years ago

0.0.2-646cddf2.0

3 years ago

0.0.2-52d96603.0

3 years ago

0.0.2-e01dc82d.0

3 years ago

0.0.2-2f8e282c.0

3 years ago

0.0.2-64064717.0

3 years ago

0.0.2-938ce14e.0

3 years ago

0.0.2-b4ba0d02.0

3 years ago

0.0.2-8b48d73c.0

3 years ago

0.0.2-e08bd919.0

3 years ago

0.0.2-412d1e12.0

3 years ago

0.0.2-eac2bc09.0

3 years ago

0.0.2-4dd7e6dd.0

3 years ago

0.0.2-f55f8c47.0

3 years ago

0.0.2-7a0fedd8.0

3 years ago

0.0.2-5966076b.0

3 years ago

0.0.2-aad501b4.0

3 years ago

0.0.2-c2e602f8.0

3 years ago

0.0.2-3bd4c97f.0

3 years ago

0.0.2-7501e86e.0

3 years ago

0.0.2-2da71b63.0

3 years ago

0.0.2-86257fab.0

3 years ago

0.0.2-b6312db8.0

3 years ago

0.0.2-7df2a2ef.0

3 years ago

0.0.2-8883405c.0

3 years ago

0.0.2-2dffb0c1.0

3 years ago

0.0.2-5f6367f9.0

3 years ago

0.0.2-7a66583f.0

3 years ago

0.0.2-728db226.0

3 years ago

0.0.2-cf60ea4a.0

3 years ago

0.0.2-d769fa1b.0

3 years ago

0.0.2-83a4e663.0

3 years ago

0.0.2-ee2381d2.0

3 years ago

0.0.2-eb43b645.0

3 years ago

0.0.2-6487c8aa.0

3 years ago

0.0.2-c4b04ccb.0

3 years ago

0.0.2-c19bd3b2.0

3 years ago

0.0.2-9ae7d747.0

3 years ago

0.0.2-9328274e.0

3 years ago

0.0.2-d689a84f.0

3 years ago

0.0.2-e56ffe3c.0

3 years ago

0.0.2-1b7a7a20.0

3 years ago

0.0.2-9a2245e7.0

3 years ago

0.0.2-fafc93ac.0

3 years ago

0.0.1

3 years ago