1
0
mirror of synced 2025-12-20 10:28:40 -05:00
Files
docs/script/content-migrations/update-headers.js
2021-05-27 12:57:38 -07:00

86 lines
2.4 KiB
JavaScript
Executable File

#!/usr/bin/env node
// [start-readme]
//
// Run this one time script to update headers for accessibility
// Changing H3 to H2, H4 to H3, H5 to H4, and H6 to H5
//
// [end-readme]
const fs = require('fs')
const path = require('path')
const walk = require('walk-sync')
const re = /^#.*\n/gm
async function updateMdHeaders (dir) {
walk(dir, { includeBasePath: true, directories: false })
.filter(file => !file.endsWith('README.md'))
.forEach(file => {
fs.readFile(file, 'utf8', (err, data) => {
if (err) return console.error(err)
const matchHeader = data.match(re)
let firstHeader = (matchHeader) ? matchHeader[0].split(' ')[0] : null
if (file.includes('data/reusables/')) {
if (!file.endsWith('data/reusables/actions/actions-group-concurrency.md') && !file.endsWith('data/reusables/github-actions/actions-on-examples.md')) {
firstHeader = 'reusable-' + firstHeader
}
}
let result
switch (firstHeader) {
case '#':
return
case '##':
return
case '###':
result = data
.replace(/^### /gm, '## ')
.replace(/^#### /gm, '### ')
.replace(/^##### /gm, '#### ')
.replace(/^###### /gm, '##### ')
break
case '####':
result = data
.replace(/^#### /gm, '## ')
.replace(/^##### /gm, '### ')
.replace(/^###### /gm, '#### ')
break
case 'reusable-####':
result = data
.replace(/^#### /gm, '### ')
.replace(/^##### /gm, '#### ')
break
case 'reusable-#####':
result = data
.replace(/^##### /gm, '#### ')
break
case '#####':
result = data
.replace(/^##### /gm, '### ')
.replace(/^###### /gm, '#### ')
break
default:
return
}
fs.writeFile(file, result, 'utf8', function (err) {
if (err) return console.log(err)
})
})
})
}
async function main () {
const mdDirPaths = [
path.join(__dirname, '../../content'),
path.join(__dirname, '../../data/reusables')
]
for (const dir of mdDirPaths) {
await updateMdHeaders(dir)
}
}
main()
.catch(console.error)
.finally(() => console.log('Done'))