UNPKG

md-tree

Version:

Markdown tree generator

116 lines (84 loc) 2.79 kB
var fs = require('fs'); var crypto = require('crypto'); var md5 = function (str) { var md5sum = crypto.createHash('md5'); md5sum.update(str); return md5sum.digest('hex'); } var generateTree = function(opts) { if (opts['depth'] == undefined) { opts['depth'] = 0; } if (opts['prefix'] == undefined) { opts['prefix'] = ''; } if (out == undefined) { var out = ''; } var dir = opts['dir']; var depth = opts['depth']; var prefix = opts['prefix']; var scan = fs.readdirSync(dir); var last = scan.pop(); for (var i=0;i<scan.length;i++) { var f = scan[i]; var fulldir = dir + '/' + f; var fulldirStats = fs.lstatSync(fulldir); if (fulldirStats.isDirectory()) { for(j=1;j<=depth;j++) { out +="┃\t"; } out += (last != f ? "┣ " : "┗ ") + f + '/' + "\n"; out += generateTree({dir:fulldir, depth: depth + 1, prefix: prefix+f+"/"}); } else { var endname = dir + f + " => " + depth; for(j=1;j<=depth;j++) { out += "┃\t"; } out += (last != f ? "┣ " : "┗ ") + f + "\n"; } } return out; }; var buildReadmeTree = function(dir, title, wrap) { dirkey = md5(dir); markdownStart = "<!-- [START "+dirkey+"] -->\n"; markdownEnd = "\n<!-- [END "+dirkey+"] -->\n"; tree = generateTree({dir:dir}); tree = markdownStart+title+wrap+tree+wrap+markdownEnd; dst = './README.md'; fileContent = fs.readFileSync(dst, "utf-8"); newBuffer = ''; forward = true; find = false; var hash1 = md5(fileContent); var lines = fileContent.split("\n"); var lastLine = lines.pop(); for (var i=0;i<lines.length;i++) { var buffer = lines[i]; if (buffer.trim() == markdownStart.trim()) { forward = false; find = true; } if (forward) { newBuffer += buffer + "\n"; } if (buffer.trim() == markdownEnd.trim()) { newBuffer += tree; forward = true; } } if (!find) { newBuffer += tree; } hash2 = md5(newBuffer); if (hash1 != hash2) { fs.writeFileSync(dst, newBuffer); } } module.exports = { generateTree: function(opts) { return generateTree(opts); }, buildReadmeTree: function(dir, title, wrap) { buildReadmeTree(dir, title, wrap); }, buildTrees: function(treemap) { for (var i=0;i<treemap.length;i++) { treemapElem = treemap[i]; buildReadmeTree(treemapElem.dir, treemapElem.title, treemapElem.wrap); } } };