feat: Show the build date on the loading banner of unreleased builds (#2659)
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
/**
|
||||
* Vite plugin: writes the date of the build into the card.
|
||||
*/
|
||||
|
||||
// Strict length requirement: See below.
|
||||
export const BUILD_DATE_PLACEHOLDER = '__BUILD_DATE_SENTINEL___';
|
||||
|
||||
/**
|
||||
* The date cannot be handed to the bundler as a substituted name, because the
|
||||
* build configuration is evaluated once and `vite build --watch` reuses it.
|
||||
* As such, every rebuild would report the time the watcher started rather than
|
||||
* the actual build time. Output is generated afresh for each build, so the date
|
||||
* is written here instead.
|
||||
*
|
||||
* @type {() => import('vite').Plugin}
|
||||
*/
|
||||
export const buildDate = () => ({
|
||||
name: 'build-date',
|
||||
|
||||
renderChunk(code) {
|
||||
if (!code.includes(BUILD_DATE_PLACEHOLDER)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const date = new Date().toISOString();
|
||||
if (date.length !== BUILD_DATE_PLACEHOLDER.length) {
|
||||
this.error(
|
||||
'The build date must be exactly as long as the placeholder it replaces.',
|
||||
);
|
||||
}
|
||||
|
||||
return {
|
||||
code: code.replaceAll(BUILD_DATE_PLACEHOLDER, date),
|
||||
|
||||
// The replacement is exactly as long as what it replaces, so the existing
|
||||
// sourcemap still describes the code.
|
||||
map: null,
|
||||
};
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user