mirror of
https://github.com/Axorax/awesome-free-apps.git
synced 2025-12-29 16:14:53 +00:00
Add: more apps
This commit is contained in:
80
validate.js
Normal file
80
validate.js
Normal file
@@ -0,0 +1,80 @@
|
||||
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();
|
||||
Reference in New Issue
Block a user