Bugfix: Refactor SSR bundler. Fix stale cache SSR modules.

This commit is contained in:
2026-04-09 23:50:58 +01:00
parent 40fc7778a8
commit 7fb1784b95
28 changed files with 434 additions and 85 deletions
-2
View File
@@ -5,8 +5,6 @@ import cleanupArtifacts from "./cleanup-artifacts";
export default async function rebuildBundler(params) {
try {
global.ROUTER.reload();
// await global.BUNDLER_CTX?.dispose();
// global.BUNDLER_CTX = undefined;
const new_artifacts = await allPagesBunBundler({
page_file_paths: params?.target_file_paths,
});
-8
View File
@@ -1,10 +1,6 @@
import _ from "lodash";
import grabPageComponent from "./web-pages/grab-page-component";
import initPages from "../bundler/init-pages";
export default async function serverPostBuildFn() {
// if (!global.IS_FIRST_BUNDLE_READY) {
// global.IS_FIRST_BUNDLE_READY = true;
// }
if (!global.HMR_CONTROLLERS?.[0] || !global.BUNDLER_CTX_MAP) {
return;
}
@@ -45,9 +41,5 @@ export default async function serverPostBuildFn() {
catch {
global.HMR_CONTROLLERS.splice(i, 1);
}
global.REACT_DOM_MODULE_CACHE.delete(target_artifact.local_path);
initPages({
target_page_file: target_artifact.local_path,
});
}
}
+3 -3
View File
@@ -4,7 +4,6 @@ import grabDirNames from "../../utils/grab-dir-names";
import { log } from "../../utils/log";
import allPagesESBuildContextBundler from "../bundler/all-pages-esbuild-context-bundler";
import serverPostBuildFn from "./server-post-build-fn";
import initPages from "../bundler/init-pages";
const { ROOT_DIR } = grabDirNames();
export default async function watcherEsbuildCTX() {
const pages_src_watcher = watch(ROOT_DIR, {
@@ -101,6 +100,9 @@ async function fullRebuild(params) {
await global.BUNDLER_CTX?.dispose();
global.BUNDLER_CTX = undefined;
global.BUNDLER_CTX_MAP = {};
await global.SSR_BUNDLER_CTX?.dispose();
global.SSR_BUNDLER_CTX = undefined;
global.SSR_BUNDLER_CTX_MAP = {};
allPagesESBuildContextBundler({
post_build_fn: serverPostBuildFn,
});
@@ -112,12 +114,10 @@ async function fullRebuild(params) {
global.PAGES_SRC_WATCHER.close();
watcherEsbuildCTX();
}
initPages();
}
function reloadWatcher() {
if (global.PAGES_SRC_WATCHER) {
global.PAGES_SRC_WATCHER.close();
watcherEsbuildCTX();
}
initPages();
}
@@ -2,8 +2,16 @@ import grabPageReactComponentString from "./grab-page-react-component-string";
import grabTsxStringModule from "./grab-tsx-string-module";
import { log } from "../../../utils/log";
import grabRootFilePath from "./grab-root-file-path";
import path from "path";
import grabDirNames from "../../../utils/grab-dir-names";
const { ROOT_DIR } = grabDirNames();
export default async function grabPageBundledReactComponent({ file_path, return_tsx_only, }) {
try {
if (global.SSR_BUNDLER_CTX_MAP?.[file_path]) {
const mod = await import(path.join(ROOT_DIR, global.SSR_BUNDLER_CTX_MAP[file_path].path));
const Main = mod.default;
return { component: Main };
}
const { root_file_path } = grabRootFilePath();
let tsx = grabPageReactComponentString({
file_path,
@@ -1,19 +1,12 @@
import EJSON from "../../../utils/ejson";
import { log } from "../../../utils/log";
export default function grabPageReactComponentString({ file_path, root_file_path,
// server_res,
}) {
export default function grabPageReactComponentString({ file_path, root_file_path, }) {
try {
let tsx = ``;
// const server_res_json = JSON.stringify(
// EJSON.stringify(server_res || {}) ?? "{}",
// );
if (root_file_path) {
tsx += `import Root from "${root_file_path}"\n`;
}
tsx += `import Page from "${file_path}"\n`;
tsx += `export default function Main({...props}) {\n\n`;
// tsx += `const props = JSON.parse(${server_res_json})\n\n`;
tsx += ` return (\n`;
if (root_file_path) {
tsx += ` <Root {...props}><Page {...props} /></Root>\n`;