aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/docs/components/pages/pack-home/DocsBenchmarkStat.tsx
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);
}