Precedence maps
Graphing and ordered maps for scheduling execution of tasks, fast.
Installation
npm install precedence-maps
then in your code:
precedence =
Usage
First we need to define a graph for our application.
var graphDefinitions = "man": incoming: "god" outgoing: "animal" "god": outgoing: "animal""man" // outgoing means things that come after "animal": incoming: "god""man" // and incoming for things that come beforeprecedence;precedence; // [ 'god', 'man', 'animal' ]
The order will be flagged for refresh whenever setGraph is called for the specific graph. You can make several changes in the graph definitions, setGraph with/or without options(setting options refresh the configuration), and calculation will only take place when getOrder() is called or internally in the stores as needed.
var store = precedence // Create a store where keys match properties in graphDefinitions // We declared Array to be the default constructor so that's what we get on new symbols.;;;;;;// Calling store with no arguments returns an array orders by the graph;/*[ 'loki', 'thor' ][ 'mike', 'bill', 'kate' ][ 'rat', 'pig' ]*/
Parsing the graph definitions can also be customized by providing/overriding two methods. Enumerate(graph) which must return an unordered array of graph symbols and collect(graph, symbolName) which will run per symbol and must return either an object like
incoming: "symbolNameBefore1""symbolNameBefore2"... outgoing: "symbolNameAfter1"...
or a false value to omit this symbol from sorting.
API
precedence.setGraph(name, options)
- name {String} Unique name to refer to this graph.
- config {Object} Configurations for this graph.
precedence.getOrder(name)
- name {String} name of the graph we want to get the order from
Returns: {Array} a list of names, sorted in the order of precedence
precedence.newStore(name, template)
- name {String} name of the graph we want to order the map with.
- template {Function} Optional, a constructor to create instances of when a new key is accessed.
Tests
Run the tests with node test.js
.
Legal
MIT License