2022-02-16 21:34:32 +00:00
|
|
|
import { logger } from '@nuxt/kit'
|
2021-04-29 11:51:54 +00:00
|
|
|
import type { ViteDevServer } from 'vite'
|
|
|
|
|
2022-04-06 05:54:53 +00:00
|
|
|
export async function warmupViteServer (
|
|
|
|
server: ViteDevServer,
|
2022-08-15 16:03:00 +00:00
|
|
|
entries: string[],
|
|
|
|
isServer: boolean
|
2022-04-06 05:54:53 +00:00
|
|
|
) {
|
2021-04-29 11:51:54 +00:00
|
|
|
const warmedUrls = new Set<String>()
|
|
|
|
|
|
|
|
const warmup = async (url: string) => {
|
2022-04-06 05:54:53 +00:00
|
|
|
if (warmedUrls.has(url)) {
|
|
|
|
return
|
|
|
|
}
|
2021-04-29 11:51:54 +00:00
|
|
|
warmedUrls.add(url)
|
2021-11-08 10:34:39 +00:00
|
|
|
try {
|
2022-08-15 16:03:00 +00:00
|
|
|
await server.transformRequest(url, { ssr: isServer })
|
2021-11-08 10:34:39 +00:00
|
|
|
} catch (e) {
|
2022-02-16 21:34:32 +00:00
|
|
|
logger.debug('Warmup for %s failed with: %s', url, e)
|
2021-11-08 10:34:39 +00:00
|
|
|
}
|
2022-09-05 20:52:14 +00:00
|
|
|
const mod = await server.moduleGraph.getModuleByUrl(url, isServer)
|
2022-09-09 09:54:20 +00:00
|
|
|
const deps = mod?.ssrTransformResult?.deps /* server */ || Array.from(mod?.importedModules /* client */ || []).map(m => m.url)
|
|
|
|
await Promise.all(deps.map(m => warmup(m.replace('/@id/__x00__', '\0'))))
|
2021-04-29 11:51:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
await Promise.all(entries.map(entry => warmup(entry)))
|
|
|
|
}
|