@tanstack/solid-router
Version:
Modern and scalable routing for Solid applications
50 lines (49 loc) • 1.46 kB
JavaScript
import { isModuleNotFoundError } from "@tanstack/router-core";
import { Dynamic, createComponent, mergeProps } from "solid-js/web";
import { createResource } from "solid-js";
//#region src/lazyRouteComponent.tsx
function lazyRouteComponent(importer, exportName) {
let loadPromise;
let comp;
let error;
const load = () => {
if (!loadPromise) loadPromise = importer().then((res) => {
loadPromise = void 0;
comp = res[exportName ?? "default"];
return comp;
}).catch((err) => {
error = err;
});
return loadPromise;
};
const lazyComp = function Lazy(props) {
if (error) {
if (isModuleNotFoundError(error)) {
if (error instanceof Error && typeof window !== "undefined" && typeof sessionStorage !== "undefined") {
const storageKey = `tanstack_router_reload:${error.message}`;
if (!sessionStorage.getItem(storageKey)) {
sessionStorage.setItem(storageKey, "1");
window.location.reload();
return { default: () => null };
}
}
}
throw error;
}
if (!comp) {
const [compResource] = createResource(load, {
initialValue: comp,
ssrLoadFrom: "initial"
});
return createComponent(Dynamic, mergeProps({ get component() {
return compResource();
} }, props));
}
return createComponent(Dynamic, mergeProps({ component: comp }, props));
};
lazyComp.preload = load;
return lazyComp;
}
//#endregion
export { lazyRouteComponent };
//# sourceMappingURL=lazyRouteComponent.js.map