Skip to content

Instantly share code, notes, and snippets.

@ddbeck
Created August 13, 2018 16:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ddbeck/b20a8e56d53452ea1e363a89ea2baddf to your computer and use it in GitHub Desktop.
Save ddbeck/b20a8e56d53452ea1e363a89ea2baddf to your computer and use it in GitHub Desktop.
const fs = require('fs');
const request = require('request');
const properties = 'css/properties.json';
const urlTemplate = 'https://developer.mozilla.org/docs/Web/CSS/{{replaceme}}';
const urlRegex = new RegExp('{{replaceme}}');
function main() {
const obj = parseJSONFile(properties);
let lookups = {};
let pendingRequests = [];
for (let key in obj) {
let url = makeMDNURL(key);
pendingRequests.push(head(url).then((result) => {
lookups[key] = {
'name': key,
'url': url,
'statusCode': result.statusCode,
'newurl': result.request.uri.href
};
}));
}
Promise.all(pendingRequests).then(() => {
for (let item in lookups) {
console.error(`Checking ${lookups[item].name}`);
let statusCode = lookups[item].statusCode;
if (statusCode == 404 || statusCode == 429) {
console.error(`ERROR: ${lookups[item].url} -- URL was not found [${statusCode}]`);
}
else {
if (isRedirected(lookups[item].url, lookups[item].newurl)) {
console.error(`WARNING: ${lookups[item].url} -- URL was redirected`);
}
console.error(`Adding ${lookups[item].url}`);
obj[item]['mdn_url'] = lookups[item].url;
}
}
console.log(JSON.stringify(obj, null, 2));
});
}
function isRedirected(url, newurl) {
let delocalized = newurl.replace('en-us/');
return delocalized == url;
}
function parseJSONFile(filepath) {
return JSON.parse(fs.readFileSync(filepath, 'utf-8'));
}
function makeMDNURL(name) {
return urlTemplate.replace(urlRegex, name);
}
function head(url) {
return new Promise((resolve, reject) => {
request.head(url)
.on('response', (response) => {
resolve(response);
})
.on('error', (err) => { reject(err); });
});
}
main();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment