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