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.
45 lines
1.0 KiB
45 lines
1.0 KiB
2 years ago
|
const fs = require('fs');
|
||
|
const path = require('path');
|
||
|
|
||
|
const roadmapId = process.argv[2];
|
||
|
if (!roadmapId) {
|
||
|
console.error('Error: roadmapId is required');
|
||
|
}
|
||
|
|
||
2 years ago
|
const fullPath = path.join(__dirname, `../src/data/roadmaps/${roadmapId}`);
|
||
2 years ago
|
if (!fs.existsSync(fullPath)) {
|
||
|
console.error(`Error: path not found: ${fullPath}!`);
|
||
|
process.exit(1);
|
||
|
}
|
||
|
|
||
|
function readFiles(folderPath) {
|
||
|
const stats = fs.lstatSync(folderPath);
|
||
|
|
||
|
if (stats.isFile()) {
|
||
|
return [folderPath];
|
||
|
}
|
||
|
|
||
|
const folderContent = fs.readdirSync(folderPath);
|
||
|
let files = [];
|
||
|
|
||
|
for (const file of folderContent) {
|
||
|
const filePath = path.join(folderPath, file);
|
||
|
|
||
|
files = [...files, ...readFiles(filePath)];
|
||
|
}
|
||
|
|
||
|
return files;
|
||
|
}
|
||
|
|
||
|
const files = readFiles(fullPath);
|
||
|
let allLinks = [];
|
||
|
|
||
|
files.forEach((file) => {
|
||
|
const fileContent = fs.readFileSync(file, 'utf-8');
|
||
|
const matches = [...fileContent.matchAll(/\[[^\]]+]\((https?:\/\/[^)]+)\)/g)];
|
||
|
|
||
|
allLinks = [...allLinks, ...matches.map((match) => match[1])];
|
||
|
});
|
||
|
|
||
|
allLinks.map((link) => console.log(link));
|