Skip to content

Commit de60f1e

Browse files
authored
perf(transformRequest): fast-path watch and sourcemap handling (#16170)
1 parent 50caf67 commit de60f1e

2 files changed

Lines changed: 45 additions & 24 deletions

File tree

‎packages/vite/src/node/server/sourcemap.ts‎

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
importpathfrom'node:path'
22
importfspfrom'node:fs/promises'
3+
importconvertSourceMapfrom'convert-source-map'
34
importtype{ExistingRawSourceMap,SourceMap}from'rollup'
45
importtype{Logger}from'../logger'
5-
import{createDebugger}from'../utils'
6+
import{blankReplacer,createDebugger}from'../utils'
67

78
constdebug=createDebugger('vite:sourcemap',{
89
onlyWhenFocused: true,
@@ -143,3 +144,32 @@ export function applySourcemapIgnoreList(
143144
if(!map.x_google_ignoreList)map.x_google_ignoreList=x_google_ignoreList
144145
}
145146
}
147+
148+
exportasyncfunctionextractSourcemapFromFile(
149+
code: string,
150+
filePath: string,
151+
): Promise<{code: string;map: SourceMap}|undefined>{
152+
constmap=(
153+
convertSourceMap.fromSource(code)||
154+
(awaitconvertSourceMap.fromMapFileSource(
155+
code,
156+
createConvertSourceMapReadMap(filePath),
157+
))
158+
)?.toObject()
159+
160+
if(map){
161+
return{
162+
code: code.replace(convertSourceMap.mapFileCommentRegex,blankReplacer),
163+
map,
164+
}
165+
}
166+
}
167+
168+
functioncreateConvertSourceMapReadMap(originalFileName: string){
169+
return(filename: string)=>{
170+
returnfsp.readFile(
171+
path.resolve(path.dirname(originalFileName),filename),
172+
'utf-8',
173+
)
174+
}
175+
}

‎packages/vite/src/node/server/transformRequest.ts‎

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@ import fsp from 'node:fs/promises'
22
importpathfrom'node:path'
33
import{performance}from'node:perf_hooks'
44
importgetEtagfrom'etag'
5-
importconvertSourceMapfrom'convert-source-map'
65
importMagicStringfrom'magic-string'
76
import{init,parseasparseImports}from'es-module-lexer'
87
importtype{PartialResolvedId,SourceDescription,SourceMap}from'rollup'
98
importcolorsfrom'picocolors'
109
importtype{ModuleNode,ViteDevServer}from'..'
1110
import{
12-
blankReplacer,
1311
createDebugger,
1412
ensureWatchedFile,
1513
injectQuery,
@@ -24,7 +22,11 @@ import { checkPublicFile } from '../publicDir'
2422
import{isDepsOptimizerEnabled}from'../config'
2523
import{getDepsOptimizer,initDevSsrDepsOptimizer}from'../optimizer'
2624
import{cleanUrl,unwrapId}from'../../shared/utils'
27-
import{applySourcemapIgnoreList,injectSourcesContent}from'./sourcemap'
25+
import{
26+
applySourcemapIgnoreList,
27+
extractSourcemapFromFile,
28+
injectSourcesContent,
29+
}from'./sourcemap'
2830
import{isFileServingAllowed}from'./middlewares/static'
2931
import{throwClosedServerError}from'./pluginContainer'
3032

@@ -263,21 +265,19 @@ async function loadAndTransform(
263265
throwe
264266
}
265267
}
266-
ensureWatchedFile(server.watcher,file,config.root)
268+
if(code!=null){
269+
ensureWatchedFile(server.watcher,file,config.root)
270+
}
267271
}
268272
if(code){
269273
try{
270-
map=(
271-
convertSourceMap.fromSource(code)||
272-
(awaitconvertSourceMap.fromMapFileSource(
273-
code,
274-
createConvertSourceMapReadMap(file),
275-
))
276-
)?.toObject()
277-
278-
code=code.replace(convertSourceMap.mapFileCommentRegex,blankReplacer)
274+
constextracted=awaitextractSourcemapFromFile(code,file)
275+
if(extracted){
276+
code=extracted.code
277+
map=extracted.map
278+
}
279279
}catch(e){
280-
logger.warn(`Failed to load source map for ${url}.`,{
280+
logger.warn(`Failed to load source map for ${file}.\n${e}`,{
281281
timestamp: true,
282282
})
283283
}
@@ -406,15 +406,6 @@ async function loadAndTransform(
406406
returnresult
407407
}
408408

409-
functioncreateConvertSourceMapReadMap(originalFileName: string){
410-
return(filename: string)=>{
411-
returnfsp.readFile(
412-
path.resolve(path.dirname(originalFileName),filename),
413-
'utf-8',
414-
)
415-
}
416-
}
417-
418409
/**
419410
* When a module is soft-invalidated, we can preserve its previous `transformResult` and
420411
* return similar code to before:

0 commit comments

Comments
 (0)