const events = require("./index");
|
const axios = require("axios");
|
const cheerio = require("cheerio");
|
const ora = require("ora");
|
const fs = require("fs");
|
|
const BASE_URL = "https://developer.mozilla.org/en-US/docs/Web/Events";
|
|
function parseText(val) {
|
if (val.match(/Yes/)) {
|
return true;
|
} else if (val.match(/No/)) {
|
return false;
|
}
|
}
|
|
function getValue($, name) {
|
const text = $("dt, td")
|
.filter(function() {
|
return $(this).text() === name;
|
})
|
.next()
|
.text();
|
return parseText(text);
|
}
|
|
function writeToFile(val) {
|
fs.writeFileSync(
|
require.resolve("./dom-event-types.json"),
|
JSON.stringify(val, null, 2)
|
);
|
}
|
|
const obj = { ...events };
|
|
async function getInfo(event) {
|
let res;
|
try {
|
res = await axios.get(`${BASE_URL}/${event}`);
|
} catch (err) {
|
return;
|
}
|
|
const $ = cheerio.load(res.data);
|
|
const bubblesVal = getValue($, "Bubbles");
|
const cancelableVal = getValue($, "Cancelable");
|
|
if (bubblesVal === undefined) {
|
delete obj[event].bubbles;
|
}
|
if (cancelableVal === undefined) {
|
delete obj[event].cancelable;
|
}
|
}
|
|
(async () => {
|
const spinner = ora("Scraping MDN").start();
|
for (const event of Object.keys(events)) {
|
await getInfo(event);
|
}
|
spinner.stop();
|
console.log("Scraping complete");
|
writeToFile(obj);
|
})();
|