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
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);
})();