UNPKG

@tanstack/solid-router

Version:

Modern and scalable routing for Solid applications

58 lines (57 loc) 1.74 kB
import { isModuleNotFoundError } from "@tanstack/router-core"; import { Dynamic, createComponent, mergeProps } from "solid-js/web"; import { lazy } from "solid-js"; import { isServer } from "@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 (!(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 createComponent(Loadable, props); } function render(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 null; } } } throw error; } return createComponent(Dynamic, mergeProps({ component: comp }, props)); } const Loadable = 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 export { lazyRouteComponent }; //# sourceMappingURL=lazyRouteComponent.js.map