Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion packages/vite/src/app/app.vue
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,17 @@ useSideNav(() => {
{{ rpcConnectionState.error }}
</div>
<VisualLoading
v-else-if="!rpcConnectionState.connected"
v-else-if="!rpcConnectionState.connected || rpcConnectionState.inspectStatus === 'checking'"
text="Connecting..."
/>
<div
v-else-if="rpcConnectionState.inspectStatus === 'unavailable'"
class="h-screen flex items-center justify-center p8"
>
<p class="text-base op50">
Vite DevTools is only available in dev mode.
</p>
</div>
<div v-else class="grid grid-cols-[max-content_1fr] h-screen w-screen max-w-screen max-h-screen of-hidden">
<PanelSideNav />
<div class="of-auto h-screen max-h-screen relative">
Expand Down
21 changes: 18 additions & 3 deletions packages/vite/src/app/composables/rpc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,16 @@ export interface InspectModuleUpdatedPayload {
ids?: string[]
}

type InspectStatus = 'checking' | 'available' | 'unavailable'

export const rpcConnectionState = reactive<{
connected: boolean
error: Error | null
inspectStatus: InspectStatus
}>({
connected: false,
error: null,
inspectStatus: 'checking',
})

const rpc = shallowRef<DevToolsRpcClient>(undefined!)
Expand Down Expand Up @@ -50,6 +54,10 @@ async function subscribeInspectModuleUpdates(client: DevToolsRpcClient) {

export async function connect() {
const runtimeConfig = useRuntimeConfig()

rpcConnectionState.connected = false
rpcConnectionState.error = null
rpcConnectionState.inspectStatus = 'checking'
try {
rpc.value = await getDevToolsRpcClient({
baseURL: [
Expand All @@ -61,6 +69,7 @@ export async function connect() {
wsOptions: {
onConnected: () => {
rpcConnectionState.connected = true
rpcConnectionState.error = null
},
onError: (e) => {
rpcConnectionState.error = e
Expand All @@ -72,24 +81,30 @@ export async function connect() {
rpcOptions: {
onGeneralError: (e, name) => {
rpcConnectionState.error = e
console.error(`[vite-devtools] RPC error on executing "${name}":`)
console.error(`[vite-devtools] RPC error on executing "${name}":`, e)
},
onFunctionError: (e, name) => {
rpcConnectionState.error = e
console.error(`[vite-devtools] RPC error on executing "${name}":`)
console.error(`[vite-devtools] RPC error on executing "${name}":`, e)
},
Comment thread
webfansplz marked this conversation as resolved.
},
})
await subscribeInspectModuleUpdates(rpc.value)

const functions = await rpc.value.call('devtoolskit:internal:rpc:server:list')
rpcConnectionState.inspectStatus = 'vite:inspect:get-metadata' in functions
? 'available'
: 'unavailable'
rpc.value.cacheManager.updateOptions({
functions: Object.keys(functions).filter(name => functions[name]?.cacheable),
})

if (rpcConnectionState.inspectStatus === 'available')
await subscribeInspectModuleUpdates(rpc.value)

rpcConnectionState.connected = true
}
catch (e) {
rpcConnectionState.connected = false
rpcConnectionState.error = e as Error
}
}
Expand Down
Loading