A topologically ordered map of key/value pairs with a simple API for adding constraints.
Used for ordering initializers in Ember. Has a flexible constraint syntax that can add before/after contraints that can forward reference things yet to be added.
// import DAGMap from "dag-map";
const DAGMap = require("dag-map").default;
let map = new DAGMap();
// map a key value pair
// #add(
// key: string, value: any,
// before?: string[] | string | undefined,
// after?: string[] | string | undefined
// )
map.add('eat', 'Eat Dinner');
// add a key value pair with before and after constraints
map.add('serve', 'Serve the food', 'eat', 'set');
// keys can be added after a key has been referenced
map.add('set', 'Set the table');
// graph now is eat -> serve -> set
// constraints can be an array
map.add('cook', 'Cook the roast and veggies', 'serve', ['prep', 'buy']);
map.add('wash', 'Wash the veggies', 'prep', 'buy');
map.add('buy', 'Buy roast and veggies');
map.add('prep', 'Prep veggies', undefined, 'wash');
// log in order (multiple valid spots for set the table).
map.each((key, val) => console.log(`${key}: ${val}`));
// set: Set the table
// buy: Buy roast and veggies
// wash: Wash the veggies
// prep: Prep veggies
// cook: Cook the roast and veggies
// serve: Serve the food
// eat: Eat Dinner
add is aliased as addEdges for backwards compat. each is aliased as topsort for backwards compat.
npm install
npm test
runs the tests headlessnpm run build
rebuildnpm run docs
documentation# dag-map [![Build Status](https://travis-ci.org/krisselden/dag-map.png?branch=master)](https://travis-ci.org/krisselden/dag-map) A topologically ordered map of key/value pairs with a simple API for adding constraints. Used for ordering initializers in Ember. Has a flexible constraint syntax that can add before/after contraints that can forward reference things yet to be added. ## API ```js // import DAGMap from "dag-map"; const DAGMap = require("dag-map").default; let map = new DAGMap(); // map a key value pair // #add( // key: string, value: any, // before?: string[] | string | undefined, // after?: string[] | string | undefined // ) map.add('eat', 'Eat Dinner'); // add a key value pair with before and after constraints map.add('serve', 'Serve the food', 'eat', 'set'); // keys can be added after a key has been referenced map.add('set', 'Set the table'); // graph now is eat -> serve -> set // constraints can be an array map.add('cook', 'Cook the roast and veggies', 'serve', ['prep', 'buy']); map.add('wash', 'Wash the veggies', 'prep', 'buy'); map.add('buy', 'Buy roast and veggies'); map.add('prep', 'Prep veggies', undefined, 'wash'); // log in order (multiple valid spots for set the table). map.each((key, val) => console.log(`${key}: ${val}`)); // set: Set the table // buy: Buy roast and veggies // wash: Wash the veggies // prep: Prep veggies // cook: Cook the roast and veggies // serve: Serve the food // eat: Eat Dinner ``` ### Notes add is aliased as addEdges for backwards compat. each is aliased as topsort for backwards compat. ## Developing * `npm install` * `npm test` runs the tests headless * `npm run build` rebuild * `npm run docs` documentation