topiary

Prettify and shape tree structures for printing

Topiary

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

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.

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

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

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

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.

$ npm install topiary
$ npm test

MIT-Licensed. See LICENSE file for details.