Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quarto-dev
GitHub Repository: quarto-dev/quarto-cli
Path: blob/main/src/resources/scripts/check-usage.ts
12921 views
1
import { readLines } from "https://deno.land/[email protected]/io/bufio.ts";
2
3
if (import.meta.main) {
4
const patterns: RegExp[] = Deno.args.map((arg) => new RegExp(arg));
5
const sizedEntries: Record<string, number> = {};
6
for await (const entry of readLines(Deno.stdin)) {
7
if (entry.trim() === "") {
8
continue;
9
}
10
let [url, size] = entry.split(" ");
11
size = size.slice(1, -1);
12
// heuristic: all urls we care about can be trimmed to the right of the first @
13
// for a simple group-by
14
url = url.split("@")[0];
15
let sizeNo = 0;
16
if (size.endsWith("KB")) {
17
sizeNo = Number(size.slice(0, -2)) * 1024;
18
} else if (size.endsWith("B")) {
19
sizeNo = Number(size.slice(0, -1));
20
} else {
21
console.log(`Don't know how to read ${size}`);
22
continue;
23
}
24
if (
25
patterns.length &&
26
!patterns.some((pattern: RegExp) => entry.match(pattern))
27
) {
28
continue;
29
}
30
sizedEntries[url] = (sizedEntries[url] || 0) + ~~sizeNo;
31
}
32
33
const sizedEntriesArray = Object.entries(sizedEntries);
34
sizedEntriesArray.sort((a, b) => a[1] - b[1]);
35
let sum = 0;
36
for (const entry of sizedEntriesArray) {
37
console.log(`${entry[0]} ${entry[1]}`);
38
sum += entry[1];
39
}
40
console.log(`Overall: ${sum}`);
41
}
42
43