'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) { console.log(JSON.stringify(index)); } glob("pages/**/*.md", function (er, files) { var shortIndex = buildShortPagesIndex(files); var index = buildPagesIndex(shortIndex); saveIndex(index); });