@tanstack/solid-router
Version:
Modern and scalable routing for Solid applications
266 lines (265 loc) • 12 kB
JavaScript
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