MCPcopy Create free account
hub / github.com/TanStack/router / prerenderPages

Function prerenderPages

packages/start-plugin-core/src/prerender.ts:89–243  ·  view source on GitHub ↗
({ outputDir }: { outputDir: string })

Source from the content-addressed store, hash-verified

87 }
88
89 async function prerenderPages({ outputDir }: { outputDir: string }) {
90 const seen = new Set<string>()
91 const prerendered = new Set<string>()
92 const retriesByPath = new Map<string, number>()
93 const concurrency = startConfig.prerender?.concurrency ?? os.cpus().length
94 logger.info(`Concurrency: ${concurrency}`)
95 const queue = new Queue({ concurrency })
96
97 startConfig.pages = validateAndNormalizePrerenderPages(
98 startConfig.pages,
99 routerBaseUrl,
100 )
101
102 startConfig.pages.forEach((page) => addCrawlPageTask(page))
103
104 if (queue.isSettled()) {
105 logger.info('No pages matched prerender filter; skipping.')
106 return Array.from(prerendered)
107 }
108
109 await queue.start()
110
111 return Array.from(prerendered)
112
113 function addCrawlPageTask(page: Page) {
114 if (seen.has(page.path)) return
115
116 seen.add(page.path)
117
118 if (page.fromCrawl) {
119 startConfig.pages.push(page)
120 }
121
122 if (!(page.prerender?.enabled ?? true)) return
123
124 if (
125 startConfig.prerender?.filter &&
126 !startConfig.prerender.filter(page)
127 ) {
128 return
129 }
130
131 const prerenderOptions = {
132 ...startConfig.prerender,
133 ...page.prerender,
134 }
135
136 queue.add(async () => {
137 logger.info(`Crawling: ${page.path}`)
138 const retries = retriesByPath.get(page.path) || 0
139
140 try {
141 const res = await requestWithRedirects(
142 withTrailingSlash(withBase(page.path, routerBasePath)),
143 {
144 headers: {
145 ...(prerenderOptions.headers ?? {}),
146 },

Callers 1

prerenderFunction · 0.85

Calls 5

isSettledMethod · 0.95
startMethod · 0.95
addCrawlPageTaskFunction · 0.85
infoMethod · 0.65

Tested by

no test coverage detected