@tanstack/solid-router
Version:
Modern and scalable routing for Solid applications
58 lines (57 loc) • 1.9 kB
JavaScript
let _tanstack_router_core = require("@tanstack/router-core");
let solid_js_web = require("solid-js/web");
let solid_js = require("solid-js");
let _tanstack_router_core_isServer = require("@tanstack/router-core/isServer");
//#region src/lazyRouteComponent.tsx
function lazyRouteComponent(importer, exportName) {
let loadPromise;
let comp;
let error;
const load = () => {
if (!loadPromise) {
error = void 0;
loadPromise = importer().then((res) => {
if (!(_tanstack_router_core_isServer.isServer ?? typeof window === "undefined")) {
loadPromise = void 0;
Lazy.preload = void 0;
}
comp = res[exportName ?? "default"];
return comp;
}).catch((err) => {
loadPromise = void 0;
error = err;
});
}
return loadPromise;
};
function Lazy(props) {
if (comp || error) return render(props);
return (0, solid_js_web.createComponent)(Loadable, props);
}
function render(props) {
if (error) {
if ((0, _tanstack_router_core.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 null;
}
}
}
throw error;
}
return (0, solid_js_web.createComponent)(solid_js_web.Dynamic, (0, solid_js_web.mergeProps)({ component: comp }, props));
}
const Loadable = (0, solid_js.lazy)(async () => {
await load();
if (process.env.NODE_ENV !== "production" && !comp && !error) throw new Error(`lazyRouteComponent: export "${String(exportName ?? "default")}" not found`);
return { default: render };
});
Lazy.preload = load;
return Lazy;
}
//#endregion
exports.lazyRouteComponent = lazyRouteComponent;
//# sourceMappingURL=lazyRouteComponent.cjs.map