1
0
mirror of synced 2025-12-22 19:34:15 -05:00
Files
docs/script/content-migrations/update-headers.js
Kevin Heis 42e785b0a8 Migrate CommonJS to ESM (#20301)
* First run of script

* Get the app running --- ish

* Get NextJS working

* Remove `node:`

* Get more tests passing in unit directory

* Update FailBot test to use nock

* Update test.yml

* Update Dockerfile

* tests/content fixes

* Update page.js

* Update build-changelog.js

* updating tests/routing

* Update orphan-tests.js

* updating tests/rendering

* Update .eslintrc.js

* Update .eslintrc.js

* Install jest/globals

* "linting" tests

* staging update to server.mjs

* Change '.github/allowed-actions.js' to a ESM export

* Lint

* Fixes for the main package.json

* Move Jest to be last in the npm test command so we can pass args

* Just use 'npm run lint' in the npm test command

* update algolia label script

* update openapi script

* update require on openapi

* Update enterprise-algolia-label.js

* forgot JSON.parse

* Update lunr-search-index.js

* Always explicitly include process.cwd() for JSON file reads pathed from project root

* update graphql/update-files.js script

* Update other npm scripts using jest to pass ESM NODE_OPTIONS

* Update check-for-enterprise-issues-by-label.js for ESM

* Update create-enterprise-issue.js for ESM

* Import jest global for browser tests

* Convert 'script/deploy' to ESM

Co-authored-by: Grace Park <gracepark@github.com>
Co-authored-by: James M. Greene <jamesmgreene@github.com>
2021-07-14 13:49:18 -07:00

98 lines
2.9 KiB
JavaScript
Executable File

#!/usr/bin/env node
import { fileURLToPath } from 'url'
import path from 'path'
import fs from 'fs'
import walk from 'walk-sync'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
// [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 re = /^#.*\n/gm
async function updateMdHeaders (dir) {
walk(dir, { includeBasePath: true, directories: false })
.filter(file => !file.endsWith('README.md') && !file.includes('content/rest/reference'))
.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 (firstHeader) {
for (let index = 1; index < matchHeader.length; index++) {
const nextHeader = matchHeader[index].split(' ')[0]
if (nextHeader.length < firstHeader.length && nextHeader.length >= 3) {
console.log(file)
break
}
}
}
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(/^miniTocMaxHeadingLevel: 4/gm, 'miniTocMaxHeadingLevel: 3')
.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'))