Date sitemap lastmod from the build pipeline; warn on skipped pages
- bunext build records when each page's client bundle hash last changed
in .bunext/page-lastmod.json (sitemap.lastmod_file to relocate). The
hash covers the page's whole import graph, so component edits re-date
every page that uses them. The sitemap uses these dates as lastmod
- Add sitemap.default_lastmod
- BREAKING: use_file_lastmod now defaults to false (file mtimes are reset
by checkouts); it is a fallback after the build record
- Warn when a page or __root.tsx is skipped because its default export
is not at the start of a line (e.g. export { Page as default })
- Replace leaking module mocks in tests (log, grab-root-file-path) with
spies and fixtures
Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
Vendored
+13
@@ -4,6 +4,7 @@ import grabDirNames from "../../utils/grab-dir-names";
|
||||
import { rmSync, writeFileSync } from "fs";
|
||||
import bunextInit from "../../functions/bunext-init";
|
||||
import { v4 } from "uuid";
|
||||
import { updatePageLastmodRecord } from "../../utils/page-lastmod-record";
|
||||
const { HYDRATION_DST_DIR, BUNX_CWD_PAGES_REWRITE_DIR, BUNDLER_CTX_MAP_JSON, SSR_BUNDLER_CTX_MAP_JSON, BUNX_CWD_MODULE_CACHE_DIR, BUILD_INFO_JSON, } = grabDirNames();
|
||||
export default function () {
|
||||
return new Command("build")
|
||||
@@ -39,6 +40,18 @@ export default function () {
|
||||
build_date_unix: Date.now(),
|
||||
build_date: Date(),
|
||||
};
|
||||
if (global.BUNEXT_BUNDLER_CTX_MAP) {
|
||||
try {
|
||||
updatePageLastmodRecord({
|
||||
ctx_map: global.BUNEXT_BUNDLER_CTX_MAP,
|
||||
build_date: new Date(build_data.build_date_unix),
|
||||
});
|
||||
}
|
||||
catch (error) {
|
||||
// Only sitemap dates depend on this; never fail the build.
|
||||
log.warn(`Could not update page lastmod record: ${error?.message || error}`);
|
||||
}
|
||||
}
|
||||
writeFileSync(BUILD_INFO_JSON, JSON.stringify(build_data, null, 4), "utf-8");
|
||||
log.success("Modules Built Successfully!");
|
||||
process.exit();
|
||||
|
||||
Vendored
+5
@@ -6,6 +6,7 @@ import grabDirNames from "../../utils/grab-dir-names";
|
||||
import grabConfig from "../../functions/grab-config";
|
||||
import grabConstants from "../../utils/grab-constants";
|
||||
import { generateSitemapFiles } from "../../utils/generate-sitemap";
|
||||
import { grabPageLastmodFile } from "../../utils/page-lastmod-record";
|
||||
import generateRobotsTxt, { RobotsTxtGeneratedMarker, } from "../../utils/generate-robots-txt";
|
||||
export default function () {
|
||||
return new Command("sitemap")
|
||||
@@ -18,6 +19,10 @@ export default function () {
|
||||
global.BUNEXT_CONFIG = (await grabConfig()) || {};
|
||||
global.BUNEXT_CONSTANTS = grabConstants();
|
||||
const { output, chunk_size, chunks_dir, ...sitemap_config } = global.BUNEXT_CONFIG.sitemap || {};
|
||||
if (!existsSync(grabPageLastmodFile(sitemap_config.lastmod_file))) {
|
||||
log.warn(`No page lastmod record found. Run \`bunext build\` first ` +
|
||||
`so pages get lastmod dates.`);
|
||||
}
|
||||
let sitemap_file;
|
||||
try {
|
||||
const output_path = options.output || output;
|
||||
|
||||
Reference in New Issue
Block a user