From 27b7f90ce2aa9de4290a8422b899d2d718a8c7d7 Mon Sep 17 00:00:00 2001 From: Alec Larson <1925840+aleclarson@users.noreply.github.com> Date: Mon, 1 Nov 2021 20:50:33 -0400 Subject: [PATCH] fix(server): use `options` argument in caching of `transformRequest` calls (#5391) --- packages/vite/src/node/server/index.ts | 4 ++-- .../vite/src/node/server/transformRequest.ts | 21 +++++++------------ 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index 90f6af4ad00939..3e06ec732e8157 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -324,7 +324,7 @@ export interface ViteDevServer { /** * @internal */ - _pendingRequests: Record | null> + _pendingRequests: Map> } export async function createServer( @@ -432,7 +432,7 @@ export async function createServer( _isRunningOptimizer: false, _registerMissingImport: null, _pendingReload: null, - _pendingRequests: Object.create(null) + _pendingRequests: new Map() } server.transformIndexHtml = createDevHtmlTransformFn(server) diff --git a/packages/vite/src/node/server/transformRequest.ts b/packages/vite/src/node/server/transformRequest.ts index cf4762cc4b0ff3..4381529dba1c8e 100644 --- a/packages/vite/src/node/server/transformRequest.ts +++ b/packages/vite/src/node/server/transformRequest.ts @@ -43,20 +43,15 @@ export function transformRequest( server: ViteDevServer, options: TransformOptions = {} ): Promise { - const pending = server._pendingRequests[url] - if (pending) { - debugTransform( - `[reuse pending] for ${prettifyUrl(url, server.config.root)}` - ) - return pending + const cacheKey = (options.ssr ? 'ssr:' : options.html ? 'html:' : '') + url + let request = server._pendingRequests.get(cacheKey) + if (!request) { + request = doTransform(url, server, options) + server._pendingRequests.set(cacheKey, request) + const done = () => server._pendingRequests.delete(cacheKey) + request.then(done, done) } - const result = doTransform(url, server, options) - server._pendingRequests[url] = result - const onDone = () => { - server._pendingRequests[url] = null - } - result.then(onDone, onDone) - return result + return request } async function doTransform(