Produce pretty representations of tree-structured objects
JavaScript
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
test
.gitignore
.npmignore
.travis.yml
CHANGELOG.md
README.md
package.json
topiary.js

README.md

Topiary

npm status build status dependency status coverage status

Topiary is a utility that shapes tree structures into a prettified format ala npm list. It is used by npm-graph.

Usage

Given a tree structure and a key to recurse on, call topiary on that object:

var topiary = require('topiary');

var tree = {
  name: "root",
  deps: [
    {
      name : 'sub1',
      deps : []
    },
    {
      name : 'sub2',
      deps : [ { name : 'sub2sub', deps : [] } ]
    },
    {
      name : 'sub3',
      deps : []
    }
  ]
};
console.log(topiary(tree, 'deps'));

Output:

root
 ├──sub1
 ├─┬sub2
 │ └──sub2sub
 └──sub3

The 'deps' string is the key to recurse on, expected to hold an array of objects of the same structure.

Options

A third options object can be supplied to topiary with the following key/value combinations:

name

If labelling by the default name key is not working, you can supply your own labeller:

var namer = function (obj) {
  return '#' + obj.name; // combine stuff from object into a sensible string
};
console.log(topiary(tree, 'deps', { name: namer }));
root
 ├──#sub1
 ├─┬#sub2
 │ └──#sub2sub
 └──#sub3

filter

You can optionally pass in a function to help filter certain branches or leaf nodes:

var isNotSub2 = function (el) {
  return (el.name !== 'sub2');
};
console.log(topiary(tree, 'deps', { filter: isNotSub2 }));

Output:

root
 ├──sub1
 └──sub3

sort

You can ask topiary to sort the recurseName array before starting to work on it. This solves non-deterministic outputs sometimes produced if it is generated in a non-deterministic manner:

console.log(topiary(tree, 'deps', { label: namer, sort: true }));

Note that sorting is done lexicographically based on the labels output by the label functions.

Installation

$ npm install topiary

License

MIT-Licensed. See LICENSE file for details.