'use strict'; var glob = require('glob'); function parsePlatform(pagefile) { return pagefile.split(/\//)[1]; } function parsePagename(pagefile) { return pagefile.split(/\//)[2].replace(/\.md$/, ''); } function buildShortPagesIndex(files) { var reducer = function (index, file) { var os = parsePlatform(file); var page = parsePagename(file); if (index[page]) { index[page].push(os); } else { index[page] = [os]; } return index; }; return files.reduce(reducer, {}); } function buildPagesIndex(shortIndex) { return Object.keys(shortIndex) .sort() .map(function (page) { return { name: page, platform: shortIndex[page] }; }); } function saveIndex(index) { var indexFile = { commands: index }; console.log(JSON.stringify(indexFile)); } glob('pages/**/*.md', function (er, files) { var shortIndex = buildShortPagesIndex(files); var index = buildPagesIndex(shortIndex); saveIndex(index); });