const fs = require('fs'); const path = require('path'); const releasesDir = path.resolve(__dirname, '..', 'docs', 'releases'); const manifestPath = path.join(releasesDir, 'releases-manifest.json'); function toTitle(fileName) { return path.basename(fileName, path.extname(fileName)); } function getReleaseEntries() { if (!fs.existsSync(releasesDir)) { return []; } return fs.readdirSync(releasesDir, { withFileTypes: true }) .filter((entry) => entry.isFile() && path.extname(entry.name).toLowerCase() === '.md') .map((entry) => entry.name) .sort((left, right) => right.localeCompare(left, undefined, { numeric: true, sensitivity: 'base' })) .map((fileName) => ({ fileName, title: toTitle(fileName) })); } function main() { fs.mkdirSync(releasesDir, { recursive: true }); const manifest = { revisions: getReleaseEntries() }; fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\n', 'utf8'); } main();