awesome-uses/scripts/data-validate.js
2020-11-23 08:50:34 +00:00

48 lines
1.1 KiB
JavaScript

const { Schema, getStatusCode } = require('./utils.js');
const srcData = require('../src/data.js');
async function main(masterData = []) {
const masterDataUrls = masterData.map(d => d.url);
// so here data will be an array with all users
const data = srcData.filter(d => !masterDataUrls.includes(d.url));
const errors = data
.map(person =>
Schema.validate(person, {
abortEarly: false,
})
)
.filter(v => v.error)
.map(v => v.error);
const errorMsgs = [];
errors.forEach(e => {
e.details.forEach(d =>
errorMsgs.push(`${e._original.name || e._original.url}: ${d.message}`)
);
});
/**
* @type {{url: string, statusCode?: number, error?: Error}[]}
*/
const failedUrls = [];
for (const { url } of data) {
try {
const statusCode = await getStatusCode(url);
if (statusCode < 200 || statusCode >= 400) {
failedUrls.push({ url, statusCode });
}
} catch (e) {
failedUrls.push({ url, error: e });
}
}
return {
failedUrls,
errorMsgs,
data,
};
}
module.exports = main;