41 lines
1.1 KiB
JavaScript
41 lines
1.1 KiB
JavaScript
/**
|
|
* 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,
|
|
};
|
|
},
|
|
});
|