Skip to content

Commit f161229

Browse files
wbinnssmithicyJoseph
authored andcommitted
bundle-analyzer: Show compressed sizes (#87093)
1 parent 10a2163 commit f161229

15 files changed

Lines changed: 1054 additions & 343 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/bundle-analyzer/app/page.tsx

Lines changed: 52 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
'use client'
22

33
import type React from 'react'
4+
import { SizeMode } from '@/lib/treemap-layout'
5+
46
import { useEffect, useMemo, useState } from 'react'
57
import useSWR from 'swr'
68
import { ErrorState } from '@/components/error-state'
@@ -17,12 +19,17 @@ import { computeActiveEntries, computeModuleDepthMap } from '@/lib/module-graph'
1719
import { fetchStrict } from '@/lib/utils'
1820
import { formatBytes } from '@/lib/utils'
1921

22+
enum Environment {
23+
Client = 'client',
24+
Server = 'server',
25+
}
26+
2027
export default function Home() {
2128
const [selectedRoute, setSelectedRoute] = useState<string | null>(null)
22-
const [environmentFilter, setEnvironmentFilter] = useState<
23-
'client' | 'server'
24-
>('client')
25-
const [typeFilter, setTypeFilter] = useState<string[]>(['js', 'css', 'json'])
29+
const [environmentFilter, setEnvironmentFilter] = useState<Environment>(
30+
Environment.Client
31+
)
32+
const [typeFilter, setTypeFilter] = useState(['js', 'css', 'json'])
2633
const [selectedSourceIndex, setSelectedSourceIndex] = useState<number | null>(
2734
null
2835
)
@@ -69,6 +76,7 @@ export default function Home() {
6976
client?: boolean
7077
} | null>(null)
7178
const [searchQuery, setSearchQuery] = useState('')
79+
const [sizeMode, setSizeMode] = useState(SizeMode.Compressed)
7280

7381
useEffect(() => {
7482
const handleKeyDown = (e: KeyboardEvent) => {
@@ -100,15 +108,15 @@ export default function Home() {
100108
}, [modulesData, analyzeData])
101109

102110
const filterSource = useMemo(() => {
103-
if (!analyzeData) return undefined
111+
if (!analyzeData) return () => true
104112

105113
return (sourceIndex: number) => {
106114
const flags = analyzeData.getSourceFlags(sourceIndex)
107115

108116
// Check environment filter
109117
const hasEnvironment =
110-
(environmentFilter === 'client' && flags.client) ||
111-
(environmentFilter === 'server' && flags.server)
118+
(environmentFilter === Environment.Client && flags.client) ||
119+
(environmentFilter === Environment.Server && flags.server)
112120

113121
// Check type filter
114122
const hasType =
@@ -157,25 +165,47 @@ export default function Home() {
157165
/>
158166
</div>
159167

160-
<div className="basis-2/3 flex justify-end">
168+
<div className="basis-2/3 flex justify-end items-center space-x-4">
161169
{analyzeData && (
162170
<>
163171
<ToggleGroup
164172
type="single"
165-
className="mr-4"
173+
value={sizeMode}
174+
onValueChange={(value) => {
175+
if (value) setSizeMode(value as SizeMode)
176+
}}
177+
size="sm"
178+
>
179+
<ToggleGroupItem value={SizeMode.Uncompressed}>
180+
Uncompressed
181+
</ToggleGroupItem>
182+
<ToggleGroupItem value={SizeMode.Compressed}>
183+
Compressed
184+
</ToggleGroupItem>
185+
</ToggleGroup>
186+
187+
<ControlDivider />
188+
189+
<ToggleGroup
190+
type="single"
166191
value={environmentFilter}
167192
onValueChange={(value) => {
168-
if (value) setEnvironmentFilter(value as 'client' | 'server')
193+
if (value) setEnvironmentFilter(value as Environment)
169194
}}
170195
size="sm"
171196
>
172-
<ToggleGroupItem value="client">Client</ToggleGroupItem>
173-
<ToggleGroupItem value="server">Server</ToggleGroupItem>
197+
<ToggleGroupItem value={Environment.Client}>
198+
Client
199+
</ToggleGroupItem>
200+
<ToggleGroupItem value={Environment.Server}>
201+
Server
202+
</ToggleGroupItem>
174203
</ToggleGroup>
175204

205+
<ControlDivider />
206+
176207
<ToggleGroup
177208
type="multiple"
178-
className="mr-4"
179209
value={typeFilter}
180210
onValueChange={(value) => {
181211
if (value.length > 0) setTypeFilter(value)
@@ -188,6 +218,8 @@ export default function Home() {
188218
<ToggleGroupItem value="asset">Asset</ToggleGroupItem>
189219
</ToggleGroup>
190220

221+
<ControlDivider />
222+
191223
<FileSearch value={searchQuery} onChange={setSearchQuery} />
192224
</>
193225
)}
@@ -235,6 +267,7 @@ export default function Home() {
235267
onHoveredNodeChange={setHoveredNodeInfo}
236268
searchQuery={searchQuery}
237269
filterSource={filterSource}
270+
sizeMode={sizeMode}
238271
/>
239272
</div>
240273

@@ -252,6 +285,7 @@ export default function Home() {
252285
selectedSourceIndex={selectedSourceIndex}
253286
moduleDepthMap={moduleDepthMap}
254287
environmentFilter={environmentFilter}
288+
filterSource={filterSource}
255289
/>
256290
</>
257291
) : null}
@@ -266,7 +300,7 @@ export default function Home() {
266300
{hoveredNodeInfo.name}
267301
</span>
268302
<span className="ml-2 text-muted-foreground">
269-
{formatBytes(hoveredNodeInfo.size)}
303+
{`${formatBytes(hoveredNodeInfo.size)} ${sizeMode}`}
270304
</span>
271305
{(hoveredNodeInfo.server || hoveredNodeInfo.client) && (
272306
<span className="ml-2 inline-flex gap-1">
@@ -289,6 +323,10 @@ export default function Home() {
289323
)
290324
}
291325

326+
function ControlDivider() {
327+
return <span className="h-6 w-px bg-muted-foreground/30" />
328+
}
329+
292330
function getRootSourceIndex(analyzeData: AnalyzeData | undefined): number {
293331
if (!analyzeData) return 0
294332
const sourceRoots = analyzeData.sourceRoots()

0 commit comments

Comments
 (0)