-
Notifications
You must be signed in to change notification settings - Fork 47
Expand file tree
/
Copy pathcheck-urls.js
More file actions
95 lines (83 loc) · 2.94 KB
/
Copy pathcheck-urls.js
File metadata and controls
95 lines (83 loc) · 2.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
const fs = require("fs");
const https = require("https");
const metadataFile = "./src/data/component-metadata.json";
const metadata = JSON.parse(fs.readFileSync(metadataFile, "utf8"));
// Function to check URL status
function checkUrl(url) {
return new Promise((resolve) => {
https
.get(url, { timeout: 5000 }, (res) => {
resolve({ url, status: res.statusCode });
})
.on("error", (err) => {
resolve({ url, status: "ERROR", error: err.message });
})
.on("timeout", () => {
resolve({ url, status: "TIMEOUT" });
});
});
}
async function checkAllUrls() {
const urlsToCheck = [];
const componentUrls = new Map();
// Collect all URLs
Object.entries(metadata).forEach(([componentName, componentData]) => {
if (componentData["ds-component"]) {
const dsComponent = componentData["ds-component"];
if (Array.isArray(dsComponent)) {
dsComponent.forEach((ds, index) => {
if (ds.url) {
urlsToCheck.push(ds.url);
if (!componentUrls.has(ds.url)) {
componentUrls.set(ds.url, []);
}
componentUrls.get(ds.url).push(`${componentName}[${index}]`);
}
});
} else if (dsComponent.url) {
urlsToCheck.push(dsComponent.url);
if (!componentUrls.has(dsComponent.url)) {
componentUrls.set(dsComponent.url, []);
}
componentUrls.get(dsComponent.url).push(componentName);
}
}
});
const uniqueUrls = [...new Set(urlsToCheck)];
console.log(`Checking ${uniqueUrls.length} unique URLs...\n`);
const results = [];
for (const url of uniqueUrls) {
const result = await checkUrl(url);
results.push(result);
const components = componentUrls.get(url).join(", ");
if (result.status === 404) {
console.log(`❌ 404: ${url}`);
console.log(` Components: ${components}\n`);
} else if (result.status === "ERROR" || result.status === "TIMEOUT") {
console.log(`⚠️ ${result.status}: ${url}`);
console.log(` Components: ${components}\n`);
} else if (result.status >= 200 && result.status < 300) {
console.log(`✅ ${result.status}: ${url}`);
} else {
console.log(`⚠️ ${result.status}: ${url}`);
console.log(` Components: ${components}\n`);
}
// Small delay to avoid overwhelming the server
await new Promise((resolve) => setTimeout(resolve, 200));
}
// Summary
const notFoundUrls = results.filter((r) => r.status === 404);
console.log("\n" + "=".repeat(80));
console.log(`\nSummary:`);
console.log(`Total URLs checked: ${uniqueUrls.length}`);
console.log(`404 Not Found: ${notFoundUrls.length}`);
if (notFoundUrls.length > 0) {
console.log(`\n404 URLs:`);
notFoundUrls.forEach((r) => {
const components = componentUrls.get(r.url).join(", ");
console.log(` - ${r.url}`);
console.log(` (${components})`);
});
}
}
checkAllUrls().catch(console.error);