UNPKG

@tanstack/solid-router

Version:

Modern and scalable routing for Solid applications

266 lines (265 loc) 12 kB
const require_runtime = require("./_virtual/_rolldown/runtime.cjs"); const require_nonRouteComponentContext = require("./nonRouteComponentContext.cjs"); const require_CatchBoundary = require("./CatchBoundary.cjs"); const require_ClientOnly = require("./ClientOnly.cjs"); const require_useRouter = require("./useRouter.cjs"); const require_matchContext = require("./matchContext.cjs"); const require_SafeFragment = require("./SafeFragment.cjs"); const require_not_found = require("./not-found.cjs"); const require_renderRouteNotFound = require("./renderRouteNotFound.cjs"); const require_scroll_restoration = require("./scroll-restoration.cjs"); let _tanstack_router_core = require("@tanstack/router-core"); let solid_js_web = require("solid-js/web"); let solid_js = require("solid-js"); solid_js = require_runtime.__toESM(solid_js, 1); let _tanstack_router_core_isServer = require("@tanstack/router-core/isServer"); //#region src/Match.tsx var renderScrollRestoration = _tanstack_router_core_isServer.isServer === false ? void 0 : (router, route) => (_tanstack_router_core_isServer.isServer ?? router.isServer) && route.parentRoute?.id === _tanstack_router_core.rootRouteId && router.options.scrollRestoration ? (0, solid_js_web.createComponent)(require_scroll_restoration.ScrollRestoration, {}) : null; var Match = (props) => { const router = require_useRouter.useRouter(); const currentMatch = solid_js.createMemo(() => router.stores.byRoute.get(props.routeId).get()); const nearestMatch = [() => props.routeId, currentMatch]; const route = router.routesById[props.routeId]; const routeOptions = _tanstack_router_core_isServer.isServer ?? router.isServer ? () => route.options : () => { currentMatch(); return route.options; }; const resolvePendingComponent = () => routeOptions().pendingComponent ?? router.options.defaultPendingComponent; const routeErrorComponent = () => routeOptions().errorComponent ?? router.options.defaultErrorComponent; const routeNotFoundComponent = () => route.isRoot ? routeOptions().notFoundComponent ?? router.options.notFoundRoute?.options.component : routeOptions().notFoundComponent; const resolvedNoSsr = () => currentMatch().ssr === false || currentMatch().ssr === "data-only"; const shouldSkipSuspenseFallback = () => _tanstack_router_core_isServer.isServer ?? router.isServer ? resolvedNoSsr() : currentMatch().ssr === "data-only"; const ShellComponent = route.isRoot ? route.options.shellComponent ?? require_SafeFragment.SafeFragment : require_SafeFragment.SafeFragment; const MatchContent = () => (0, solid_js_web.createComponent)(solid_js.Show, { get when() { return currentMatch().status !== "pending"; }, get fallback() { if (process.env.NODE_ENV !== "production") return require_nonRouteComponentContext.renderInNonRouteComponentContext(() => (0, solid_js_web.createComponent)(solid_js_web.Dynamic, { get component() { return resolvePendingComponent(); } }), "pendingComponent"); return (0, solid_js_web.createComponent)(solid_js_web.Dynamic, { get component() { return resolvePendingComponent(); } }); }, get children() { return (0, solid_js_web.createComponent)(MatchInner, {}); } }); return (0, solid_js_web.createComponent)(ShellComponent, { get children() { return [(0, solid_js_web.createComponent)(require_matchContext.nearestMatchContext.Provider, { value: nearestMatch, get children() { return (0, solid_js_web.createComponent)(solid_js.Suspense, { get fallback() { if (shouldSkipSuspenseFallback()) return; if (process.env.NODE_ENV !== "production") return require_nonRouteComponentContext.renderInNonRouteComponentContext(() => (0, solid_js_web.createComponent)(solid_js_web.Dynamic, { get component() { return resolvePendingComponent(); } }), "pendingComponent"); return (0, solid_js_web.createComponent)(solid_js_web.Dynamic, { get component() { return resolvePendingComponent(); } }); }, get children() { return (0, solid_js_web.createComponent)(solid_js_web.Dynamic, { get component() { return routeErrorComponent() ? require_CatchBoundary.CatchBoundary : require_SafeFragment.SafeFragment; }, getResetKey: currentMatch, get errorComponent() { return routeErrorComponent(); }, onCatch: (error) => { const notFoundError = require_not_found.getNotFound(error); if (notFoundError) { notFoundError.routeId ??= currentMatch().routeId; throw notFoundError; } if (process.env.NODE_ENV !== "production") console.warn(`Warning: Error in route match: ${currentMatch().routeId}`); (route.options.onCatch ?? router.options.defaultOnCatch)?.(error); }, get children() { return (0, solid_js_web.createComponent)(solid_js_web.Dynamic, { get component() { return routeNotFoundComponent() ? require_not_found.CatchNotFound : require_SafeFragment.SafeFragment; }, fallback: (error) => { const notFoundError = require_not_found.getNotFound(error) ?? error; notFoundError.routeId ??= currentMatch().routeId; if (notFoundError.routeId !== currentMatch().routeId) throw notFoundError; return process.env.NODE_ENV !== "production" ? require_nonRouteComponentContext.renderInNonRouteComponentContext(() => (0, solid_js_web.createComponent)(solid_js_web.Dynamic, (0, solid_js_web.mergeProps)({ get component() { return routeNotFoundComponent(); } }, notFoundError)), "notFoundComponent") : (0, solid_js_web.createComponent)(solid_js_web.Dynamic, (0, solid_js_web.mergeProps)({ get component() { return routeNotFoundComponent(); } }, notFoundError)); }, get children() { return (0, solid_js_web.createComponent)(solid_js.Switch, { get children() { return [(0, solid_js_web.createComponent)(solid_js.Match, { get when() { return resolvedNoSsr(); }, get children() { return (0, solid_js_web.createComponent)(require_ClientOnly.ClientOnly, { get fallback() { if (process.env.NODE_ENV !== "production") return require_nonRouteComponentContext.renderInNonRouteComponentContext(() => (0, solid_js_web.createComponent)(solid_js_web.Dynamic, { get component() { return resolvePendingComponent(); } }), "pendingComponent"); return (0, solid_js_web.createComponent)(solid_js_web.Dynamic, { get component() { return resolvePendingComponent(); } }); }, get children() { return (0, solid_js_web.createComponent)(MatchContent, {}); } }); } }), (0, solid_js_web.createComponent)(solid_js.Match, { get when() { return !resolvedNoSsr(); }, get children() { return (0, solid_js_web.createComponent)(MatchContent, {}); } })]; } }); } }); } }); } }); } }), (0, solid_js_web.memo)(() => renderScrollRestoration?.(router, route))]; } }); }; var MatchInner = () => { const router = require_useRouter.useRouter(); const nearestMatch = solid_js.useContext(require_matchContext.nearestMatchContext); const match = nearestMatch[1]; const routeId = nearestMatch[0]; const route = router.routesById[routeId()]; const currentMatch = () => match(); const componentKey = () => { const current = currentMatch(); const remount = route.options.remountDeps ?? router.options.defaultRemountDeps; if (!remount) return routeId(); const deps = remount({ routeId: routeId(), loaderDeps: current.loaderDeps, params: current._strictParams, search: current._strictSearch }); return JSON.stringify(deps) ?? routeId(); }; const out = () => { const Comp = route.options.component ?? router.options.defaultComponent; if (Comp) return (0, solid_js_web.createComponent)(Comp, {}); return (0, solid_js_web.createComponent)(Outlet, {}); }; const keyedOut = () => (0, solid_js_web.createComponent)(solid_js.Show, { get when() { return componentKey(); }, keyed: true, children: (_key) => out() }); return (0, solid_js_web.createComponent)(solid_js.Switch, { get children() { return [ (0, solid_js_web.createComponent)(solid_js.Match, { get when() { return currentMatch().status === "notFound"; }, children: (_) => require_renderRouteNotFound.renderRouteNotFound(router, route, currentMatch().error) }), (0, solid_js_web.createComponent)(solid_js.Match, { get when() { return currentMatch().status === "error"; }, children: (_) => { if (_tanstack_router_core_isServer.isServer ?? router.isServer) { const RouteErrorComponent = (route.options.errorComponent ?? router.options.defaultErrorComponent) || require_CatchBoundary.ErrorComponent; return process.env.NODE_ENV !== "production" ? require_nonRouteComponentContext.renderInNonRouteComponentContext(() => (0, solid_js_web.createComponent)(RouteErrorComponent, { get error() { return currentMatch().error; }, info: { componentStack: "" } }), "errorComponent") : (0, solid_js_web.createComponent)(RouteErrorComponent, { get error() { return currentMatch().error; }, info: { componentStack: "" } }); } throw currentMatch().error; } }), (0, solid_js_web.createComponent)(solid_js.Match, { get when() { return currentMatch().status === "success"; }, get children() { return keyedOut(); } }) ]; } }); }; var Outlet = () => { if (process.env.NODE_ENV !== "production") { const nonRouteComponent = solid_js.useContext(require_nonRouteComponentContext.nonRouteComponentContext); if (nonRouteComponent) console.warn(`Warning: An <Outlet /> was rendered inside a ${nonRouteComponent}. <Outlet /> should only be rendered inside a route component.`); } const router = require_useRouter.useRouter(); const nearestParentMatch = solid_js.useContext(require_matchContext.nearestMatchContext); const parentMatch = nearestParentMatch[1]; const routeId = nearestParentMatch[0]; const route = router.routesById[routeId()]; const childRouteId = () => { if (parentMatch()._notFound) return; const ids = router.stores.ids.get(); return ids[ids.indexOf(routeId()) + 1]; }; return (0, solid_js_web.createComponent)(solid_js.Show, { get when() { return childRouteId(); }, keyed: true, get fallback() { return (0, solid_js_web.memo)(() => !!parentMatch()._notFound)() ? require_renderRouteNotFound.renderRouteNotFound(router, route, parentMatch().error) : void 0; }, children: (_routeKey) => { return (0, solid_js_web.createComponent)(solid_js.Show, { get when() { return routeId() === _tanstack_router_core.rootRouteId; }, get fallback() { return (0, solid_js_web.createComponent)(Match, { get routeId() { return childRouteId(); } }); }, get children() { return (0, solid_js_web.createComponent)(solid_js.Suspense, { get fallback() { if (process.env.NODE_ENV !== "production") return require_nonRouteComponentContext.renderInNonRouteComponentContext(() => (0, solid_js_web.createComponent)(solid_js_web.Dynamic, { get component() { return router.options.defaultPendingComponent; } }), "pendingComponent"); return (0, solid_js_web.createComponent)(solid_js_web.Dynamic, { get component() { return router.options.defaultPendingComponent; } }); }, get children() { return (0, solid_js_web.createComponent)(Match, { get routeId() { return childRouteId(); } }); } }); } }); } }); }; //#endregion exports.Match = Match; exports.Outlet = Outlet; //# sourceMappingURL=Match.cjs.map