// SPDX-License-Identifier: MIT 'use strict'; const { glob } = require('glob'); function parsePlatform(pagefile) { return pagefile.split(/\//)[1]; } function parsePagename(pagefile) { return pagefile.split(/\//)[2].replace(/\.md$/, ''); } function parseLanguage(pagefile) { let pagesFolder = pagefile.split(/\//)[0]; return pagesFolder == 'pages' ? 'en' : pagesFolder.replace(/^pages\./, ''); } function buildPagesIndex(files) { let reducer = function (index, file) { let os = parsePlatform(file); let page = parsePagename(file); let 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); } const targets = index[page].targets; const exists = targets.some((t) => {return t.platform === os && t.language === language}); if (!exists) { targets.push({os, language}) } } else { index[page] = { name: page, platform: [os], language: [language], targets: [{os, language}] }; } return index; }; let obj = files.reduce(reducer, {}); return Object.keys(obj) .sort() .map(function(page) { return { name: page, platform: obj[page].platform, language: obj[page].language, targets: obj[page].targets }; }); } function saveIndex(index) { let indexFile = { commands: index }; console.log(JSON.stringify(indexFile)); } (async () => { const files = await glob('pages*/**/*.md'); let index = buildPagesIndex(files); saveIndex(index); })().then(() => { process.exit(0); }).catch((err) => { console.error('ERROR building index!'); console.error(er); process.exit(1); });