computer-scienceangular-roadmapbackend-roadmapblockchain-roadmapdba-roadmapdeveloper-roadmapdevops-roadmapfrontend-roadmapgo-roadmaphactoberfestjava-roadmapjavascript-roadmapnodejs-roadmappython-roadmapqa-roadmapreact-roadmaproadmapstudy-planvue-roadmapweb3-roadmap
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.
72 lines
2.0 KiB
72 lines
2.0 KiB
import fs from 'node:fs/promises'; |
|
import path from 'node:path'; |
|
import { fileURLToPath } from 'node:url'; |
|
import type { Node } from '@xyflow/react'; |
|
import matter from 'gray-matter'; |
|
import type { RoadmapFrontmatter } from '../src/lib/roadmap'; |
|
|
|
const __filename = fileURLToPath(import.meta.url); |
|
const __dirname = path.dirname(__filename); |
|
|
|
// Directory containing the roadmaps |
|
const ROADMAP_CONTENT_DIR = path.join(__dirname, '../src/data/roadmaps'); |
|
const allRoadmaps = await fs.readdir(ROADMAP_CONTENT_DIR); |
|
|
|
const editorRoadmapIds = new Set<string>(); |
|
for (const roadmapId of allRoadmaps) { |
|
const roadmapFrontmatterDir = path.join( |
|
ROADMAP_CONTENT_DIR, |
|
roadmapId, |
|
`${roadmapId}.md`, |
|
); |
|
const roadmapFrontmatterRaw = await fs.readFile( |
|
roadmapFrontmatterDir, |
|
'utf-8', |
|
); |
|
const { data } = matter(roadmapFrontmatterRaw); |
|
|
|
const roadmapFrontmatter = data as RoadmapFrontmatter; |
|
if (roadmapFrontmatter.renderer === 'editor') { |
|
editorRoadmapIds.add(roadmapId); |
|
} |
|
} |
|
|
|
for (const roadmapId of editorRoadmapIds) { |
|
const roadmapJSONDir = path.join( |
|
ROADMAP_CONTENT_DIR, |
|
roadmapId, |
|
`${roadmapId}.json`, |
|
); |
|
|
|
const roadmapJSONRaw = await fs.readFile(roadmapJSONDir, 'utf-8'); |
|
const roadmapJSON = JSON.parse(roadmapJSONRaw); |
|
|
|
const roadmapNodes = roadmapJSON.nodes as Node[]; |
|
const updatedNodes = roadmapNodes.map((node) => { |
|
const width = node?.width || node?.style?.width || 0; |
|
const height = node?.height || node?.style?.height || 0; |
|
|
|
if (['legend', 'title', 'label', 'linksgroup'].includes(node.type!)) { |
|
delete node?.width; |
|
delete node?.height; |
|
delete node?.style?.width; |
|
delete node?.style?.height; |
|
} |
|
|
|
return { |
|
...node, |
|
measured: { |
|
width, |
|
height, |
|
}, |
|
}; |
|
}); |
|
|
|
const updatedRoadmapJSON = { |
|
...roadmapJSON, |
|
nodes: updatedNodes, |
|
}; |
|
|
|
const updatedRoadmapJSONString = JSON.stringify(updatedRoadmapJSON, null, 2); |
|
await fs.writeFile(roadmapJSONDir, updatedRoadmapJSONString, 'utf-8'); |
|
}
|
|
|