mirror of
https://github.com/Axorax/awesome-free-apps.git
synced 2025-12-17 17:55:26 +00:00
81 lines
2.4 KiB
JavaScript
81 lines
2.4 KiB
JavaScript
|
|
const fs = require('fs');
|
||
|
|
const http = require('http');
|
||
|
|
const https = require('https');
|
||
|
|
|
||
|
|
const RED = "\x1b[31m";
|
||
|
|
const GREEN = "\x1b[32m";
|
||
|
|
const RESET = "\x1b[0m";
|
||
|
|
|
||
|
|
function extractLinks(markdown) {
|
||
|
|
const linkRegex = /\[.*?\]\((https?:\/\/.*?)\)/g;
|
||
|
|
const links = [];
|
||
|
|
let match;
|
||
|
|
while ((match = linkRegex.exec(markdown)) !== null) {
|
||
|
|
links.push(match[1]);
|
||
|
|
}
|
||
|
|
return links;
|
||
|
|
}
|
||
|
|
|
||
|
|
function checkLink(url) {
|
||
|
|
return new Promise((resolve) => {
|
||
|
|
const client = url.startsWith('https') ? https : http;
|
||
|
|
client
|
||
|
|
.get(url, (res) => {
|
||
|
|
resolve({ url, statusCode: res.statusCode });
|
||
|
|
})
|
||
|
|
.on('error', () => {
|
||
|
|
resolve({ url, statusCode: 404 });
|
||
|
|
});
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
async function main() {
|
||
|
|
try {
|
||
|
|
const markdown = fs.readFileSync('README.md', 'utf-8');
|
||
|
|
const links = extractLinks(markdown);
|
||
|
|
console.log(`Found ${links.length} links in README.md.`);
|
||
|
|
|
||
|
|
const failedLinks = [];
|
||
|
|
|
||
|
|
for (const link of links) {
|
||
|
|
const { url, statusCode } = await checkLink(link);
|
||
|
|
if (statusCode === 404) {
|
||
|
|
console.log(`${RED}404 Not Found:${RESET} ${url}`);
|
||
|
|
failedLinks.push(url);
|
||
|
|
} else {
|
||
|
|
console.log(`${GREEN}200 OK:${RESET} ${url}`);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (failedLinks.length > 0) {
|
||
|
|
console.log("\n-----------------------------\n");
|
||
|
|
console.log("Double-checking failed links...");
|
||
|
|
|
||
|
|
const doubleCheckedFailedLinks = [];
|
||
|
|
for (const link of failedLinks) {
|
||
|
|
const { url, statusCode } = await checkLink(link);
|
||
|
|
if (statusCode === 404) {
|
||
|
|
doubleCheckedFailedLinks.push(url);
|
||
|
|
} else {
|
||
|
|
console.log(`${GREEN}200 OK (after retry):${RESET} ${url}`);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (doubleCheckedFailedLinks.length > 0) {
|
||
|
|
console.log("\n-----------------------------\n");
|
||
|
|
console.log("The following links failed after double-checking:");
|
||
|
|
doubleCheckedFailedLinks.forEach((url) => {
|
||
|
|
console.log(`${RED}${url}${RESET}`);
|
||
|
|
});
|
||
|
|
} else {
|
||
|
|
console.log("\nAll links are working!");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
} catch (err) {
|
||
|
|
console.error('Error:', err.message);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
main();
|