Skip to content

Commit e712eed

Browse files
authored
feat: module asset details (#18)
1 parent 81d90f4 commit e712eed

File tree

3 files changed

+97
-21
lines changed

3 files changed

+97
-21
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<script setup lang="ts">
2+
import type { RolldownAssetInfo, RolldownChunkInfo, SessionContext } from '~~/shared/types'
3+
import { useRpc } from '#imports'
4+
import { computed, ref } from 'vue'
5+
6+
const props = defineProps<{
7+
chunks: RolldownChunkInfo[]
8+
session: SessionContext
9+
asset: RolldownAssetInfo
10+
}>()
11+
12+
const rpc = useRpc()
13+
const showSource = ref(false)
14+
const assetChunks = computed(() => props.chunks.filter(c => c.chunk_id === props.asset.chunk_id))
15+
16+
function openInEditor() {
17+
rpc.value!['vite:open-in-editor'](`${props.session.meta.dir}/${props.asset.filename}`)
18+
}
19+
</script>
20+
21+
<template>
22+
<div flex="~ col gap-3">
23+
<div flex="~ gap-4 items-center wrap">
24+
<div flex="~ gap-2 items-center">
25+
<div i-catppuccin-java-class-abstract />
26+
<div>{{ asset.filename }}</div>
27+
<DisplayFileSizeBadge :bytes="asset.size" text-sm />
28+
<DisplayBadge :text="asset.type" />
29+
</div>
30+
<div flex-auto />
31+
<div flex="~ gap-2">
32+
<button btn-action @click="openInEditor">
33+
<div i-carbon-launch />
34+
Open in editor
35+
</button>
36+
<button btn-action @click="showSource = true">
37+
<div i-ph-file-text />
38+
View source
39+
</button>
40+
</div>
41+
</div>
42+
<template v-if="showSource">
43+
<div flex="~ gap-2 items-center">
44+
<div op50>
45+
Source
46+
</div>
47+
<span flex-auto />
48+
<DisplayCloseButton @click="showSource = false" />
49+
</div>
50+
<div class="w-full of-auto px2 py1" border="~ base rounded-lg">
51+
<CodeDiffEditor
52+
:from="asset.content!"
53+
:to="asset.content!"
54+
:diff="false"
55+
:one-column="true"
56+
/>
57+
</div>
58+
</template>
59+
<div op50>
60+
Chunks
61+
</div>
62+
<div v-for="chunk of assetChunks" :key="chunk.chunk_id" border="~ base rounded-lg" px2 py1>
63+
<DataChunkDetails
64+
:chunk="chunk"
65+
:session="session"
66+
:show-modules="false"
67+
/>
68+
</div>
69+
</div>
70+
</template>

packages/devtools/src/app/components/data/ChunkDetails.vue

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@
22
import type { Chunk as ChunkInfo } from '@rolldown/debug'
33
import type { SessionContext } from '~~/shared/types'
44
5-
defineProps<{
5+
withDefaults(defineProps<{
66
chunk: ChunkInfo
77
session: SessionContext
8-
}>()
8+
showModules?: boolean
9+
}>(), {
10+
showModules: true,
11+
})
912
</script>
1013

1114
<template>
@@ -32,20 +35,22 @@ defineProps<{
3235
{{ chunk.imports }}
3336
</div> -->
3437

35-
<div op50>
36-
Modules
37-
</div>
38-
<div flex="~ col gap-1" ws-nowrap>
39-
<DisplayModuleId
40-
v-for="module of chunk.modules"
41-
:id="module"
42-
:key="module"
43-
:session
44-
:link="true"
45-
:minimal="true"
46-
hover="bg-active"
47-
border="~ base rounded" px2 py1 w-full
48-
/>
49-
</div>
38+
<template v-if="showModules">
39+
<div op50>
40+
Modules
41+
</div>
42+
<div flex="~ col gap-1" ws-nowrap>
43+
<DisplayModuleId
44+
v-for="module of chunk.modules"
45+
:id="module"
46+
:key="module"
47+
:session
48+
:link="true"
49+
:minimal="true"
50+
hover="bg-active"
51+
border="~ base rounded" px2 py1 w-full
52+
/>
53+
</div>
54+
</template>
5055
</div>
5156
</template>

packages/devtools/src/app/components/flowmap/ModuleFlow.vue

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -375,10 +375,11 @@ const codeDisplay = computed(() => {
375375
</template>
376376
<template v-else-if="selected?.type === 'asset'">
377377
<div p4>
378-
Assets Details (WIP)
379-
- Trace back to the chunk
380-
- A button to open the asset in the editor
381-
- A button to show source in the page
378+
<DataAssetDetails
379+
:asset="selected"
380+
:session="session"
381+
:chunks="info.chunks"
382+
/>
382383
</div>
383384
</template>
384385
<template v-else-if="codeDisplay?.from && codeDisplay?.to">

0 commit comments

Comments
 (0)