diff --git a/packages/devtools/package.json b/packages/devtools/package.json index ce2e55fb4..bfb6853b3 100644 --- a/packages/devtools/package.json +++ b/packages/devtools/package.json @@ -57,6 +57,7 @@ "nypm": "^0.2.0", "pacote": "^15.1.2", "pathe": "^1.1.0", + "perfect-debounce": "^0.1.3", "picocolors": "^1.0.0", "pkg-types": "^1.0.2", "rc9": "^2.1.0", diff --git a/packages/devtools/src/server-rpc/server-routes.ts b/packages/devtools/src/server-rpc/server-routes.ts index 6a074e743..3e3149949 100644 --- a/packages/devtools/src/server-rpc/server-routes.ts +++ b/packages/devtools/src/server-rpc/server-routes.ts @@ -2,6 +2,7 @@ import type { Nitro } from 'nitropack' import { join, resolve } from 'pathe' import fg from 'fast-glob' import { withBase, withLeadingSlash, withoutTrailingSlash } from 'ufo' +import { debounce } from 'perfect-debounce' import type { NuxtDevtoolsServerContext, ServerFunctions, ServerRouteInfo } from '../types' export function setupServerRoutesRPC({ nuxt, refresh }: NuxtDevtoolsServerContext) { @@ -9,12 +10,24 @@ export function setupServerRoutesRPC({ nuxt, refresh }: NuxtDevtoolsServerContex let promiseCache: Promise | null = null + const refreshDebounced = debounce(() => { + promiseCache = null + refresh('getServerRoutes') + }, 500) + nuxt.hook('nitro:init', (_) => { nitro = _ promiseCache = null refresh('getServerRoutes') }) + nuxt.hook('ready', () => { + nitro?.storage.watch((event, key) => { + if (key.startsWith('src:api:')) + refreshDebounced() + }) + }) + function scan() { if (promiseCache) return promiseCache diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4756634fc..2e676c6a1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -148,6 +148,9 @@ importers: pathe: specifier: ^1.1.0 version: 1.1.0 + perfect-debounce: + specifier: ^0.1.3 + version: 0.1.3 picocolors: specifier: ^1.0.0 version: 1.0.0