blob: 5b8dcf6fe2dee859e30c2995b14a3712b7bc4959 (
plain) (
blame)
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
|
import benchmarkData from "./benchmark-data/data.json";
type StatFunc = (data: typeof benchmarkData) => string;
/**
* Replace with satisfies keyword when TS 4.9 drops
*/
const satisfies =
<T,>() =>
<U extends T>(t: U) =>
t;
const formatToSeconds = (seconds: number) => `${seconds.toFixed(1)}s`;
const formatPercentage = (percentage: number) => `${percentage.toFixed(1)}x`;
const stats = satisfies<Record<string, StatFunc>>()({
"next12-cold-1000": (data) => formatToSeconds(data.cold[1000].next12),
"turbopack-cold-1000": (data) => formatToSeconds(data.cold[1000].next13),
"turbopack-cold-vs-next12": (data) =>
formatPercentage(data.cold[1000].next12 / data.cold[1000].next13),
"turbopack-cold-vs-next12-30000": (data) =>
formatPercentage(data.cold[30000].next12 / data.cold[30000].next13),
"turbopack-update-vs-next12": (data) =>
formatPercentage(
data.file_change[1000].next12 / data.file_change[1000].next13
),
"turbopack-update-vs-next12-30000": (data) =>
formatPercentage(
data.file_change[30000].next12 / data.file_change[30000].next13
),
"vite-cold-1000": (data) => formatToSeconds(data.cold[1000].vite),
"turbopack-cold-vs-vite": (data) =>
formatPercentage(data.cold[1000].vite / data.cold[1000].next13),
"turbopack-cold-vs-vite-30000": (data) =>
formatPercentage(data.cold[30000].vite / data.cold[30000].next13),
"turbopack-update-vs-vite": (data) =>
formatPercentage(
data.file_change[1000].vite / data.file_change[1000].next13
),
"turbopack-update-vs-vite-30000": (data) =>
formatPercentage(
data.file_change[30000].vite / data.file_change[30000].next13
),
});
type Stat = keyof typeof stats;
export function DocsBenchmarkStat(props: { stat: Stat }) {
if (!stats[props.stat]) {
throw new Error(`Invalid stat: ${props.stat}`);
}
return stats[props.stat](benchmarkData);
}
|