Files
mintel.me/apps/web/scripts/convert-to-plain-prop.ts

47 lines
1.5 KiB
TypeScript

import * as fs from 'fs';
import * as path from 'path';
const MDX_DIR = path.join(process.cwd(), 'content/blog');
/**
* Convert graph={"..."} to graph="..." (plain string prop without JSX expression wrapper).
* MDXRemote RSC strips JSX expression props but keeps plain string props.
*
* But we also need the escape sequences to go through.
* The plain string prop `graph="graph TD\nA-->B"` will have the \n treated as
* literal characters by MDX's parser, not as a newline. The Mermaid component
* then unescapes them.
*/
function convertToPlainStringProps(content: string): string {
// Match graph={" ... "} and convert to graph="..."
// The content inside should already have escaped newlines and quotes
const pattern = /graph=\{"((?:[^"\\]|\\.)*)"\}/g;
return content.replace(pattern, (match, graphContent) => {
return `graph="${graphContent}"`;
});
}
function processFiles() {
const files = fs.readdirSync(MDX_DIR).filter(f => f.endsWith('.mdx'));
let fixCount = 0;
for (const file of files) {
const filePath = path.join(MDX_DIR, file);
const content = fs.readFileSync(filePath, 'utf8');
const fixed = convertToPlainStringProps(content);
if (content !== fixed) {
fs.writeFileSync(filePath, fixed);
fixCount++;
console.log(`✅ Converted: ${file}`);
} else {
console.log(`- ${file} (no changes needed)`);
}
}
console.log(`\nTotal converted: ${fixCount}`);
}
processFiles();