Refactor routing in App component to enhance navigation and improve error handling by integrating dynamic routes and updating the NotFound route.

This commit is contained in:
becarta
2025-05-23 12:43:00 +02:00
parent f40db0f5c9
commit a544759a3b
11127 changed files with 1647032 additions and 0 deletions

View File

@@ -0,0 +1,74 @@
import {
clearRouteError,
createServerState,
setRouteError,
setServerError
} from "./server-state.js";
function createController(params) {
if ("loader" in params) {
return createLoaderController(params.loader);
} else {
return createBaseController(params);
}
}
function createBaseController({ reload }) {
const serverState = createServerState();
const onFileChange = () => {
if (serverState.state === "error") {
reload();
}
};
const onHMRError = (payload) => {
let msg = payload?.err?.message ?? "Unknown error";
let stack = payload?.err?.stack ?? "Unknown stack";
let error = new Error(msg);
Object.defineProperty(error, "stack", {
value: stack
});
setServerError(serverState, error);
};
return {
state: serverState,
onFileChange,
onHMRError
};
}
function createLoaderController(loader) {
const controller = createBaseController({
reload() {
loader.clientReload();
}
});
const baseOnFileChange = controller.onFileChange;
controller.onFileChange = (...args) => {
if (controller.state.state === "error") {
loader.eachModule((mod) => {
if (mod.ssrError) {
loader.invalidateModule(mod);
}
});
}
baseOnFileChange(...args);
};
loader.events.on("file-change", controller.onFileChange);
loader.events.on("hmr-error", controller.onHMRError);
return controller;
}
async function runWithErrorHandling({
controller: { state },
pathname,
run,
onError
}) {
try {
await run();
clearRouteError(state, pathname);
} catch (err) {
const error = onError(err);
setRouteError(state, pathname, error);
}
}
export {
createController,
runWithErrorHandling
};