MCPcopy
hub / github.com/vitejs/vite / indexHtmlMiddleware

Function indexHtmlMiddleware

packages/vite/src/node/server/middlewares/indexHtml.ts:451–552  ·  view source on GitHub ↗
(
  root: string,
  server: ViteDevServer | PreviewServer,
)

Source from the content-addressed store, hash-verified

449}
450
451export function indexHtmlMiddleware(
452 root: string,
453 server: ViteDevServer | PreviewServer,
454): Connect.NextHandleFunction {
455 const isDev = isDevServer(server)
456 const fullBundle = isDev && server.environments.client.bundledDev
457
458 // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`
459 return async function viteIndexHtmlMiddleware(req, res, next) {
460 if (res.writableEnded) {
461 return next()
462 }
463
464 const url = req.url && cleanUrl(req.url)
465 // htmlFallbackMiddleware appends '.html' to URLs
466 if (url?.endsWith('.html') && req.headers['sec-fetch-dest'] !== 'script') {
467 if (fullBundle) {
468 let pathname
469 try {
470 pathname = decodeURIComponent(url)
471 } catch {
472 // ignore malformed URI
473 return next()
474 }
475 const filePath = pathname.slice(1) // remove first /
476
477 let file = fullBundle.memoryFiles.get(filePath)
478 if (!file && fullBundle.memoryFiles.size !== 0) {
479 return next()
480 }
481 const secFetchDest = req.headers['sec-fetch-dest']
482 if (
483 [
484 'document',
485 'iframe',
486 'frame',
487 'fencedframe',
488 '',
489 undefined,
490 ].includes(secFetchDest) &&
491 ((await fullBundle.triggerBundleRegenerationIfStale()) ||
492 file === undefined)
493 ) {
494 file = { source: await generateFallbackHtml(server as ViteDevServer) }
495 }
496 if (!file) {
497 return next()
498 }
499
500 const html =
501 typeof file.source === 'string'
502 ? file.source
503 : Buffer.from(file.source)
504 const headers = server.config.server.headers
505 return send(req, res, html, 'html', { headers, etag: file.etag })
506 }
507
508 let filePath: string

Callers 2

previewFunction · 0.90
_createServerFunction · 0.90

Calls 14

isDevServerFunction · 0.90
cleanUrlFunction · 0.90
sendFunction · 0.90
fsPathFromIdFunction · 0.90
normalizePathFunction · 0.90
checkLoadingAccessFunction · 0.90
respondWithAccessDeniedFunction · 0.90
isParentDirectoryFunction · 0.90
nextFunction · 0.85
generateFallbackHtmlFunction · 0.85
transformIndexHtmlMethod · 0.80

Tested by

no test coverage detected