UNPKG

rasengan

Version:

The modern React Framework

81 lines (80 loc) 2.99 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { DefaultLayout } from '../components/template.js'; /** * This function adds metadata to a router * @param option * @returns */ export const defineRouter = (option) => { const { imports, layout, pages, loaderComponent, notFoundComponent, useParentLayout, } = option; return async (Router) => { // Create router const router = new Router(); // List of pages component const pageComponentList = []; for (let p of pages ?? []) { // Check if p is an array if (Array.isArray(p)) { for (let page of p) { if (page.source) { pageComponentList.push(page); continue; } // When p is a MDXPageComponent // the "type" property holds the "MDXPageComponent" value, coming from @rasenganjs/mdx plugin if (isMDXPage(page)) { const Page = await convertMDXPageToPageComponent(page); pageComponentList.push(Page); } else { pageComponentList.push(page); } } continue; } if (p.source) { pageComponentList.push(p); continue; } // When p is a MDXPageComponent // type property holds the "MDXPageComponent" value, coming from @rasenganjs/mdx plugin if (isMDXPage(p)) { const Page = await convertMDXPageToPageComponent(p); pageComponentList.push(Page); } else { pageComponentList.push(p); } } let routers = await Promise.all(imports ?? []); // Set properties router.routers = routers; router.layout = layout || DefaultLayout; router.pages = pageComponentList; router.loaderComponent = loaderComponent || (() => null); router.notFoundComponent = notFoundComponent; router.useParentLayout = useParentLayout ?? true; return router; }; }; /** * This function helps to convert the data provided by @rasenganjs/mdx into a PageComponent component * The MDXPage arg has to follow exactly the type returned by the @rasenganjs/mdx plugin * @param MDXPage * @returns */ export const convertMDXPageToPageComponent = async (MDXPage) => { const Page = () => { return (_jsx(MDXPage.Renderer, { config: MDXPage.config, toc: MDXPage.toc, raw: MDXPage.raw, children: MDXPage.Content })); }; Page.path = MDXPage.metadata.path; Page.metadata = MDXPage.metadata.metadata; return Page; }; export const isMDXPage = (page) => { // Check if page is a MDX Page Component or not if (page.type === 'MDXPageComponent') { return true; } return false; };