You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

35 lines
1.3 KiB

const fs = require('fs-extra');
const path = require('path');
const fm = require('gray-matter');
const globby = require('globby');
/**
* This script ensures that every file in the docs folder is named corresponding
* to its respective frontmatter permalink. In the old site, the path of the page was set by
* the `permalink` in markdown frontmatter, and not the name of the file itself or it's id.
* In the new Next.js site, with its filesystem router, the name of the file must
* match exactly to its `permalink`.
*/
Promise.resolve()
.then(async () => {
const pages = await globby('src/pages/docs/**/*.{md,mdx}');
for (let sourcePath of pages.sort()) {
const rawStr = await fs.readFile(sourcePath, 'utf8');
const {data, content} = fm(rawStr);
const currentPath = sourcePath
.replace('src/pages/', '')
.replace('.md', '');
const permalink = data.permalink.replace('.html', '');
if (permalink !== currentPath) {
const destPath = 'src/pages/' + permalink + '.md';
try {
await fs.move(sourcePath, destPath);
console.log(`MOVED: ${sourcePath} --> ${destPath}`);
} catch (error) {
console.error(`ERROR: ${sourcePath} --> ${destPath}`);
console.error(error);
}
}
}
})
.catch(console.error);