Skip to content

Instantly share code, notes, and snippets.

@bradzacher
Last active August 31, 2023 01:13
Show Gist options
  • Save bradzacher/43ff3e0a882a7c91b25a623f9cbbe8d3 to your computer and use it in GitHub Desktop.
Save bradzacher/43ff3e0a882a7c91b25a623f9cbbe8d3 to your computer and use it in GitHub Desktop.
breakdown NPM downloads by major version
const majors = {};
const minors = {};
let total = 0;
const table = document.querySelectorAll('div > ul.list.ml0.pl0')[1];
for (const row of table.childNodes.values()) {
const downloadsCell = row.querySelector('.downloads');
if (!downloadsCell) { continue; }
const version = row.childNodes[0].innerText.split('.');
const count = parseInt(row.querySelector('.downloads').innerText.replace(/,/g, ''));
const major = version[0];
const minor = version[1];
majors[major] = majors[major] ?? 0;
majors[major] += count;
const minorKey = `${major}.${minor}.x`;
minors[minorKey] = minors[minorKey] ?? 0;
minors[minorKey] += count;
total += count;
}
let majorStr = `\
| Major | Weekly DL # | User % |
| ----- | ----------- | ------ |
`;
for (const [v, c, p] of Object.entries(majors).map(([v, c]) => [v, c, (c / total) * 100])) {
majorStr += `| ${v} | ${c.toLocaleString()} | ${Math.round(p * 100) / 100}% |\n`;
}
console.log(majorStr);
let minorStr = `\
| Minor | Weekly DL # | User % |
| ----- | ----------- | ------ |
`;
for (const [v, c, p] of Object.entries(minors).map(([v, c]) => [v, c, (c / total) * 100])) {
minorStr += `| ${v} | ${c.toLocaleString()} | ${Math.round(p * 100) / 100}% |\n`;
}
console.log(minorStr);
@bradzacher
Copy link
Author

note - open the version tab before pasting this script in

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment