Skip to content

Commit 947f1ac

Browse files
committed
refactor
1 parent 4866cb0 commit 947f1ac

File tree

11 files changed

+116
-64
lines changed

11 files changed

+116
-64
lines changed

packages/core/src/client/standalone/App.vue

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { markRaw, useTemplateRef } from 'vue'
55
import DockEntries from '../webcomponents/components/DockEntries.vue'
66
import VitePlus from '../webcomponents/components/icons/VitePlus.vue'
77
import ViewEntry from '../webcomponents/components/ViewEntry.vue'
8-
import { useStateHandlers } from '../webcomponents/state/__todo-refactor'
98
import { createDocksContext } from '../webcomponents/state/context'
109
import { PresistedDomViewsManager } from '../webcomponents/utils/PresistedDomViewsManager'
1110
@@ -24,8 +23,6 @@ const context: DocksContext = await createDocksContext(
2423
)
2524
2625
context.docks.selectedId ||= context.docks.entries[0]?.id ?? null
27-
28-
const { selectDockEntry } = useStateHandlers(context)
2926
</script>
3027

3128
<template>
@@ -39,7 +36,7 @@ const { selectDockEntry } = useStateHandlers(context)
3936
class="transition duration-200 p2"
4037
:is-vertical="false"
4138
:selected="context.docks.selected"
42-
@select="selectDockEntry"
39+
@select="(e) => context.docks.switchEntry(e.id)"
4340
/>
4441
</div>
4542
<div>

packages/core/src/client/webcomponents/components/Dock.vue

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import type { DocksContext } from '@vitejs/devtools-kit/client'
33
import { useEventListener, useScreenSafeArea } from '@vueuse/core'
44
import { computed, onMounted, reactive, ref, useTemplateRef, watchEffect } from 'vue'
5-
import { useStateHandlers } from '../state/__todo-refactor'
65
import DockEntries from './DockEntries.vue'
76
import BracketLeft from './icons/BracketLeft.vue'
87
import BracketRight from './icons/BracketRight.vue'
@@ -220,8 +219,6 @@ const panelStyle = computed(() => {
220219
return style
221220
})
222221
223-
const { selectDockEntry } = useStateHandlers(context)
224-
225222
onMounted(() => {
226223
bringUp()
227224
recalculateCounter.value++
@@ -277,7 +274,7 @@ onMounted(() => {
277274
:class="isMinimized ? 'opacity-0 pointer-events-none' : 'opacity-100'"
278275
:is-vertical="context.panel.isVertical"
279276
:selected="context.docks.selected"
280-
@select="selectDockEntry"
277+
@select="(e) => context.docks.switchEntry(e.id)"
281278
/>
282279
</div>
283280
</div>

packages/core/src/client/webcomponents/components/DockEntries.vue

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
<script setup lang="ts">
2-
import type { DevToolsDockEntry } from '@vitejs/devtools-kit'
2+
import type { DevToolsDockEntryWithBuiltin } from '@vitejs/devtools-kit'
33
import { toRefs } from 'vue'
44
import DockEntry from './DockEntry.vue'
55
66
const props = defineProps<{
7-
entries: DevToolsDockEntry[]
8-
selected: DevToolsDockEntry | null
7+
entries: DevToolsDockEntryWithBuiltin[]
8+
selected: DevToolsDockEntryWithBuiltin | null
99
isVertical: boolean
1010
}>()
1111
1212
const emit = defineEmits<{
13-
(e: 'select', entry: DevToolsDockEntry): void
13+
(e: 'select', entry: DevToolsDockEntryWithBuiltin): void
1414
}>()
1515
1616
const { selected, isVertical, entries } = toRefs(props)
1717
18-
function toggleDockEntry(dock: DevToolsDockEntry) {
18+
function toggleDockEntry(dock: DevToolsDockEntryWithBuiltin) {
1919
if (selected.value?.id === dock.id)
2020
emit('select', undefined!)
2121
else

packages/core/src/client/webcomponents/components/DockEntry.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
<script setup lang="ts">
2-
import type { DevToolsDockEntry } from '@vitejs/devtools-kit'
2+
import type { DevToolsDockEntryBase } from '@vitejs/devtools-kit'
33
import { useEventListener } from '@vueuse/core'
44
import { useTemplateRef } from 'vue'
55
import { setFloatingTooltip } from '../state/floating-tooltip'
66
import DockIcon from './DockIcon.vue'
77
88
const props = defineProps<{
9-
dock: DevToolsDockEntry
9+
dock: DevToolsDockEntryBase
1010
isSelected?: boolean
1111
isDimmed?: boolean
1212
isVertical?: boolean
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<script setup lang="ts">
2+
import type { DocksContext } from '@vitejs/devtools-kit/client'
3+
import { useTerminals } from '../state/terminals'
4+
5+
const props = defineProps<{
6+
context: DocksContext
7+
}>()
8+
9+
const terminals = useTerminals(props.context)
10+
</script>
11+
12+
<template>
13+
<div>
14+
{{ terminals }}
15+
</div>
16+
</template>

packages/core/src/client/webcomponents/state/__todo-refactor.ts

Lines changed: 0 additions & 43 deletions
This file was deleted.

packages/core/src/client/webcomponents/state/context.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import type { ClientRpcReturn, DockEntryState, DockPanelStorage, DocksContext } from '@vitejs/devtools-kit/client'
1+
import type { ClientRpcReturn, DockClientScriptContext, DockEntryState, DockPanelStorage, DocksContext } from '@vitejs/devtools-kit/client'
22
import type { Ref } from 'vue'
3-
import { computed, markRaw, reactive, ref, watchEffect } from 'vue'
3+
import { computed, markRaw, reactive, ref, toRefs, watchEffect } from 'vue'
44
import { createDockEntryState, DEFAULT_DOCK_PANEL_STORE, useDocksEntries } from './docks'
5+
import { executeSetupScript } from './setup-script'
56

67
let _docksContext: DocksContext | undefined
78
export async function createDocksContext(
@@ -55,7 +56,23 @@ export async function createDocksContext(
5556
if (!entry)
5657
return false
5758
selectedId.value = entry.id
58-
// TODO: run action
59+
60+
// If has import script, run it
61+
if (
62+
(entry.type === 'action')
63+
|| (entry.type === 'custom-render')
64+
|| (entry.type === 'iframe' && entry.clientScript)
65+
) {
66+
const current = dockEntryStateMap.get(id)!
67+
const scriptContext: DockClientScriptContext = reactive({
68+
...toRefs(_docksContext!) as any,
69+
current,
70+
})
71+
await executeSetupScript(entry, scriptContext)
72+
}
73+
74+
selectedId.value = entry.id
75+
panelStore.value.open = true
5976
return true
6077
},
6178
},
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import type { DevToolsRpcClientFunctions } from '@vitejs/devtools-kit'
2+
import type { DocksContext } from '@vitejs/devtools-kit/client'
3+
import type { Ref, ShallowRef } from 'vue'
4+
import type { DevToolsTerminalSessionBase } from '../../../../../kit/src'
5+
import { shallowRef } from 'vue'
6+
7+
export interface TerminalState {
8+
info: DevToolsTerminalSessionBase
9+
buffer?: string[] | null
10+
}
11+
12+
let _terminalsRef: ShallowRef<TerminalState[]> | undefined
13+
export async function useTerminals(context: DocksContext): Promise<Ref<TerminalState[]>> {
14+
if (_terminalsRef) {
15+
return _terminalsRef
16+
}
17+
const terminals = _terminalsRef = shallowRef<TerminalState[]>([])
18+
async function udpateTerminals() {
19+
terminals.value = (await context.rpc.$call('vite:internal:terminals:list'))
20+
.map((info) => {
21+
return {
22+
info: Object.freeze(info),
23+
buffer: null,
24+
}
25+
})
26+
// eslint-disable-next-line no-console
27+
console.log('[VITE DEVTOOLS] Terminals Updated', [...terminals.value])
28+
}
29+
context.clientRpc.register({
30+
name: 'vite:internal:terminals:updated' satisfies keyof DevToolsRpcClientFunctions,
31+
type: 'action',
32+
handler: () => udpateTerminals(),
33+
})
34+
await udpateTerminals()
35+
return terminals
36+
}

packages/core/src/node/rpc/index.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,23 @@ import { docksList } from './internal/docks-list'
33
import { docksOnLaunch } from './internal/docks-on-launch'
44
import { rpcServerList } from './internal/rpc-server-list'
55
import { terminalsList } from './internal/terminals-list'
6+
import { terminalsRead } from './internal/terminals-read'
67
import { openInEditor } from './public/open-in-editor'
78
import { openInFinder } from './public/open-in-finder'
89

10+
// @keep-sorted
911
export const builtinPublicRpcDecalrations = [
1012
openInEditor,
1113
openInFinder,
1214
] as const
1315

16+
// @keep-sorted
1417
export const builtinInternalRpcDecalrations = [
15-
rpcServerList,
1618
docksList,
17-
terminalsList,
1819
docksOnLaunch,
20+
rpcServerList,
21+
terminalsList,
22+
terminalsRead,
1923
] as const
2024

2125
export const builtinRpcDecalrations = [
@@ -36,9 +40,10 @@ export type BuiltinServerFunctionsDump = {
3640
declare module '@vitejs/devtools-kit' {
3741
export interface DevToolsRpcServerFunctions extends BuiltinServerFunctions {}
3842

43+
// @keep-sorted
3944
export interface DevToolsRpcClientFunctions {
4045
'vite:internal:docks:updated': () => Promise<void>
41-
'vite:internal:terminals:updated': () => Promise<void>
4246
'vite:internal:terminals:stream-chunk': (data: DevToolsTerminalSessionStreamChunkEvent) => Promise<void>
47+
'vite:internal:terminals:updated': () => Promise<void>
4348
}
4449
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { defineRpcFunction } from '@vitejs/devtools-kit'
2+
3+
export const terminalsRead = defineRpcFunction({
4+
name: 'vite:internal:terminals:read',
5+
type: 'query',
6+
setup: (context) => {
7+
return {
8+
async handler(id: string) {
9+
const seesion = context.terminals.sessions.get(id)
10+
if (!seesion) {
11+
throw new Error(`Terminal session with id "${id}" not found`)
12+
}
13+
return {
14+
buffer: (seesion.buffer ?? []),
15+
ts: Date.now(),
16+
}
17+
},
18+
}
19+
},
20+
})

0 commit comments

Comments
 (0)