From 9e27cabcbfededdd3d8a812e5ae04a16aed8fec4 Mon Sep 17 00:00:00 2001 From: Schalk Bower Date: Sun, 4 Jul 2021 00:17:32 +1000 Subject: [PATCH] feat: expose pendingReload to consumers --- .../vite/src/node/optimizer/registerMissing.ts | 4 ++-- packages/vite/src/node/server/index.ts | 15 +++++++++------ .../vite/src/node/server/middlewares/transform.ts | 4 ++-- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/packages/vite/src/node/optimizer/registerMissing.ts b/packages/vite/src/node/optimizer/registerMissing.ts index e6f1b95d595421..2f8c7f892dc2a7 100644 --- a/packages/vite/src/node/optimizer/registerMissing.ts +++ b/packages/vite/src/node/optimizer/registerMissing.ts @@ -71,7 +71,7 @@ export function createMissingImporterRegisterFn( } finally { server._isRunningOptimizer = false pendingResolve && pendingResolve() - server._pendingReload = pendingResolve = null + server.pendingReload = pendingResolve = null } // Cached transform results have stale imports (resolved to @@ -94,7 +94,7 @@ export function createMissingImporterRegisterFn( currentMissing[id] = resolved if (handle) clearTimeout(handle) handle = setTimeout(() => rerun(ssr), debounceMs) - server._pendingReload = new Promise((r) => { + server.pendingReload = new Promise((r) => { pendingResolve = r }) } diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index 80b84498fc91d6..b96a1e1d6e08df 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -219,6 +219,13 @@ export interface ViteDevServer { * and hmr state. */ moduleGraph: ModuleGraph + /** + * A promise which will resolve once a reload is complete. A reload is + * pending as a result of optimizing missing dependencies. + * + * When no reload is pending it will be null. + */ + pendingReload: Promise | null /** * Programmatically resolve, load and transform a URL and get the result * without going through the http request pipeline. @@ -293,10 +300,6 @@ export interface ViteDevServer { _registerMissingImport: | ((id: string, resolved: string, ssr: boolean | undefined) => void) | null - /** - * @internal - */ - _pendingReload: Promise | null } export async function createServer( @@ -348,6 +351,7 @@ export async function createServer( pluginContainer: container, ws, moduleGraph, + pendingReload: null, transformWithEsbuild, transformRequest(url, options) { return transformRequest(url, server, options) @@ -390,8 +394,7 @@ export async function createServer( _ssrExternals: null, _globImporters: {}, _isRunningOptimizer: false, - _registerMissingImport: null, - _pendingReload: null + _registerMissingImport: null } server.transformIndexHtml = createDevHtmlTransformFn(server) diff --git a/packages/vite/src/node/server/middlewares/transform.ts b/packages/vite/src/node/server/middlewares/transform.ts index 963d11cd76ec45..1d22517bd5bb3b 100644 --- a/packages/vite/src/node/server/middlewares/transform.ts +++ b/packages/vite/src/node/server/middlewares/transform.ts @@ -65,13 +65,13 @@ export function transformMiddleware( } if ( - server._pendingReload && + server.pendingReload && // always allow vite client requests so that it can trigger page reload !req.url?.startsWith(CLIENT_PUBLIC_PATH) && !req.url?.includes('vite/dist/client') ) { // missing dep pending reload, hold request until reload happens - server._pendingReload.then(() => + server.pendingReload.then(() => // If the refresh has not happened after timeout, Vite considers // something unexpected has happened. In this case, Vite // returns an empty response that will error.