|
1 | 1 | import path from 'node:path'; |
2 | 2 | import { promises as fs } from 'node:fs'; |
3 | 3 |
|
| 4 | +import { createLogger } from 'vite'; |
4 | 5 | import MagicString from 'magic-string'; |
5 | 6 | import { parse as htmlParse } from 'node-html-parser'; |
6 | 7 | import { SourceMapConsumer } from 'source-map'; |
7 | 8 | import { parse as StackTraceParse } from 'stack-trace'; |
8 | 9 | import { createCodeFrame } from 'simple-code-frame'; |
| 10 | +import * as kl from 'kolorist'; |
9 | 11 |
|
10 | 12 | /** |
11 | 13 | * @typedef {import('vite').Rollup.OutputChunk} OutputChunk |
12 | 14 | * @typedef {import('vite').Rollup.OutputAsset} OutputAsset |
13 | 15 | */ |
14 | 16 |
|
| 17 | +/** |
| 18 | + * @param {import('./types.d.ts').PrerenderedRoute[]} routes |
| 19 | + */ |
| 20 | +export function prerenderedRoutes(routes) { |
| 21 | + return routes.reduce((s, r) => { |
| 22 | + s += `\n ${r.url}`; |
| 23 | + if (r._discoveredBy) s += kl.dim(` [from ${r._discoveredBy.url}]`); |
| 24 | + return s; |
| 25 | + }, ''); |
| 26 | +} |
| 27 | + |
15 | 28 | /** |
16 | 29 | * @param {string} str |
17 | 30 | */ |
@@ -62,6 +75,9 @@ export function prerenderPlugin({ prerenderScript, renderTarget, additionalPrere |
62 | 75 | let viteConfig = {}; |
63 | 76 | let userEnabledSourceMaps; |
64 | 77 |
|
| 78 | + /** @type {import('./types.d.ts').PrerenderedRoute[]} */ |
| 79 | + let routes = []; |
| 80 | + |
65 | 81 | renderTarget ||= 'body'; |
66 | 82 | additionalPrerenderRoutes ||= []; |
67 | 83 |
|
@@ -113,6 +129,28 @@ export function prerenderPlugin({ prerenderScript, renderTarget, additionalPrere |
113 | 129 | config(config) { |
114 | 130 | userEnabledSourceMaps = !!config.build?.sourcemap; |
115 | 131 |
|
| 132 | + if (!config.customLogger) { |
| 133 | + const logger = createLogger(config.logLevel || 'info'); |
| 134 | + const loggerInfo = logger.info; |
| 135 | + |
| 136 | + config.customLogger = { |
| 137 | + ...logger, |
| 138 | + info: (msg, options) => { |
| 139 | + loggerInfo(msg, options); |
| 140 | + if (msg.includes('built in')) { |
| 141 | + loggerInfo( |
| 142 | + kl.bold( |
| 143 | + `Prerendered ${routes.length} ${ |
| 144 | + routes.length > 1 ? 'pages' : 'page' |
| 145 | + }:`, |
| 146 | + ) + prerenderedRoutes(routes), |
| 147 | + options, |
| 148 | + ); |
| 149 | + } |
| 150 | + }, |
| 151 | + }; |
| 152 | + } |
| 153 | + |
116 | 154 | // Enable sourcemaps for generating more actionable error messages |
117 | 155 | config.build ??= {}; |
118 | 156 | config.build.sourcemap = true; |
@@ -345,8 +383,7 @@ export function prerenderPlugin({ prerenderScript, renderTarget, additionalPrere |
345 | 383 | // Links discovered during pre-rendering get pushed into the list of routes. |
346 | 384 | const seen = new Set(['/', ...additionalPrerenderRoutes]); |
347 | 385 |
|
348 | | - /** @type {import('./types.d.ts').PrerenderedRoute[]} */ |
349 | | - let routes = [...seen].map((link) => ({ url: link })); |
| 386 | + routes = [...seen].map((link) => ({ url: link })); |
350 | 387 |
|
351 | 388 | for (const route of routes) { |
352 | 389 | if (!route.url) continue; |
|
0 commit comments