UNPKG

@generouted/react-router

Version:

Generated file-based routes for React Router and Vite

51 lines (49 loc) 2.28 kB
import { generateModalRoutes, generatePreservedRoutes, generateRegularRoutes } from "./chunk-2IW5HX64.js"; import "./chunk-DZAGGWNQ.js"; // ../generouted/src/react-router-lazy.tsx import { Fragment, Suspense } from "react"; import { createBrowserRouter, Outlet, RouterProvider, useLocation } from "react-router-dom"; import { jsx } from "react/jsx-runtime"; var PRESERVED = import.meta.glob("/src/pages/(_app|404).{jsx,tsx}", { eager: true }); var MODALS = import.meta.glob("/src/pages/**/[+]*.{jsx,tsx}", { eager: true }); var ROUTES = import.meta.glob(["/src/pages/**/[\\w[-]*.{jsx,tsx,mdx}", "!**/(_app|404).*"]); var preservedRoutes = generatePreservedRoutes(PRESERVED); var modalRoutes = generateModalRoutes(MODALS); var regularRoutes = generateRegularRoutes(ROUTES, (module, key) => { const index = /index\.(jsx|tsx|mdx)$/.test(key) && !key.includes("pages/index") ? { index: true } : {}; return { ...index, lazy: async () => { const Element2 = (await module())?.default || Fragment; const Pending = (await module())?.Pending; const Page = () => Pending ? /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(Pending, {}), children: /* @__PURE__ */ jsx(Element2, {}) }) : /* @__PURE__ */ jsx(Element2, {}); return { Component: Page, ErrorBoundary: (await module())?.Catch, loader: (await module())?.Loader, action: (await module())?.Action }; } }; }); var _app = preservedRoutes?.["_app"]; var _404 = preservedRoutes?.["404"]; var Element = _app?.default || Fragment; var App = () => _app?.Pending ? /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(_app.Pending, {}), children: /* @__PURE__ */ jsx(Element, {}) }) : /* @__PURE__ */ jsx(Element, {}); var app = { Component: _app?.default ? App : Outlet, ErrorBoundary: _app?.Catch, loader: _app?.Loader }; var fallback = { path: "*", Component: _404?.default || Fragment }; var routes = [{ ...app, children: [...regularRoutes, fallback] }]; var Routes = () => /* @__PURE__ */ jsx(RouterProvider, { router: createBrowserRouter(routes) }); var Modals = () => { const Modal = modalRoutes[useLocation().state?.modal] || Fragment; return /* @__PURE__ */ jsx(Modal, {}); }; export { Modals, Routes, routes };