![Oracle Drags Its Feet in the JavaScript Trademark Dispute](https://cdn.sanity.io/images/cgdhsj6q/production/919c3b22c24f93884c548d60cbb338e819ff2435-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
generouted
Advanced tools
Generated file-based routes for Vite
I enjoyed using file-based routing since I tried Next.js (pages directory). After applying the same concept with Vite and client-side applications, I started writing blog posts covering the implementation of client-side file-based routing with React Router which was packaged later as generouted
.
Today generouted
brings many features, supports multiple frameworks and routers, and inspires ideas and conventions from Next.js, Remix, Expo, Docusaurus, SvelteKit and more.
generouted
uses Vite's glob import API to list the routes within the src/pages
directory and generates the routes tree and modals based on generouted
's conventions.
There are also Vite plugins available for some integrations to provide type-safe components/hooks/utils through code-generation.
react-router-dom
or @tanstack/router
๐งช or @tanstack/react-location
๐จ@solidjs/router
@mdx-js/rollup
generouted
's interactive playground via StackBlitzsrc/pages/
files and see your changes reflectingIn case you don't have a Vite project with React and TypeScript, check Vite documentation to start a new project.
pnpm add @generouted/react-router react-router-dom
// vite.config.ts
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import generouted from '@generouted/react-router/plugin'
export default defineConfig({ plugins: [react(), generouted()] })
// src/main.tsx
import { createRoot } from 'react-dom/client'
import { Routes } from '@generouted/react-router'
createRoot(document.getElementById('root')!).render(<Routes />)
Add the home page by creating a new file src/pages/index.tsx
โ /
, then export a default component:
export default function Home() {
return <h1>Home</h1>
}
Check the routing conventions section below.
You can find more details about type-safe navigation and global modals at @generouted/react-router
docs.
In case you don't have a Vite project with Solid and TypeScript, check Vite documentation to start a new project.
pnpm add @generouted/solid-router @solidjs/router
// vite.config.ts
import { defineConfig } from 'vite'
import solid from 'vite-plugin-solid'
import generouted from '@generouted/solid-router/plugin'
export default defineConfig({ plugins: [solid(), generouted()] })
// src/main.tsx
import { render } from 'solid-js/web'
import { Routes } from '@generouted/solid-router'
render(Routes, document.getElementById('root')!)
Add the home page by creating a new file src/pages/index.tsx
โ /
, then export a default component:
export default function Home() {
return <h1>Home</h1>
}
See more about generouted
routing conventions below.
You can find more details about type-safe navigation and global modals at @generouted/solid-router
docs.
In case you don't have a Vite project with React and TypeScript, check Vite documentation to start a new project.
pnpm add generouted @tanstack/react-location
// src/main.tsx
import { createRoot } from 'react-dom/client'
import { Routes } from 'generouted/react-location'
createRoot(document.getElementById('root')!).render(<Routes />)
Add the home page by creating a new file src/pages/index.tsx
โ /
, then export a default component:
export default function Home() {
return <h1>Home</h1>
}
src/pages
.tsx
, .jsx
and .mdx
file extensionssrc/pages/_app.tsx
for an app level layoutsrc/pages/404.tsx
for a custom not-found pagesrc/pages/index.tsx
โ /
src/pages/posts/index.tsx
โ /posts
src/pages/posts/2022/index.tsx
โ /posts/2022
src/pages/posts/2022/resolutions.tsx
โ /posts/2022/resolutions
src/pages/posts/[slug].tsx
โ /posts/:slug
src/pages/posts/[slug]/tags.tsx
โ /posts/:slug/tags
src/pages/posts/[...all].tsx
โ /posts/*
_layout.tsx
in any nested directory โ src/pages/posts/_layout.tsx
<Outlet />
component to render layout childrensrc/pages/posts/
directory in this case, will be wrapped with that layout.
between the segments to be converted to forward slashessrc/pages/posts.nested.as.url.not.layout.tsx
โ /posts/nested/as/url/not/layout
()
src/pages/(auth)/_layout.tsx
src/pages/(auth)/login.tsx
โ /login
+
(thinking the modal is an extra route overlaying the current route)useModals()
hooksrc/pages/+info.tsx
โ /info
src/pages/+checkout/+details.tsx
โ /checkout/details
src/pages/+checkout/+payment.tsx
โ /checkout/payment
-
(thinking the segment can be subtracted or removed from the route path)src/pages/-en/about.tsx
โ /en?/about
โ /en/about
, /about
src/pages/-[lang]/about.tsx
โ /:lang?/about
โ /en/about
, /fr/about
, /about
_
will be ignoredsrc/pages/_ignored.tsx
src/pages/posts/_components/button.tsx
src/pages/posts/_components/link.tsx
export default Component() {...}
export const Loader = () => {...}
export const Action = () => {...}
export const Catch = () => {...}
src/pages
โโโ (auth)
โ โโโ _layout.tsx
โ โโโ login.tsx
โ โโโ register.tsx
โโโ blog
โ โโโ _components
โ โ โโโ button.tsx
โ โ โโโ comments.tsx
โ โโโ [...all].tsx
โ โโโ [slug].tsx
โ โโโ _layout.tsx
โ โโโ index.tsx
โ โโโ tags.tsx
โโโ docs
โ โโโ -[lang]
โ โ โโโ index.tsx
โ โ โโโ resources.tsx
โ โโโ -en
โ โโโ contributors.tsx
โโโ +info.tsx
โโโ 404.tsx
โโโ _app.tsx
โโโ _ignored.tsx
โโโ about.tsx
โโโ blog.w.o.layout.tsx
โโโ index.tsx
File | Path | Convention |
---|---|---|
(auth)/_layout.tsx | Pathless Layout group | |
(auth)/login.tsx | /login | Regular route |
(auth)/register.tsx | /register | Regular route |
blog/_components/button.tsx | Ignored route by an ignored directory | |
blog/_components/comments.tsx | Ignored route by an ignored directory | |
blog/[...all].tsx | /blog/* | Dynamic catch-all route |
blog/[slug].tsx | /blog/:slug | Dynamic route |
blog/_layout.tsx | Layout for /blog routes | |
blog/index.tsx | /blog | Index route |
blog/tags.tsx | /blog/tags | Regular route |
docs/-[lang]/index.tsx | /docs/:lang?/index | Optional dynamic route segment |
docs/-[lang]/resources.tsx | /docs/:lang?/resources | Optional dynamic route segment |
docs/-en/contributors.tsx | /docs/en?/contributors | Optional static route segment |
+info.tsx | /info | Modal route |
404.tsx | * | Custom 404 (optional) |
_app.tsx | Custom app layout (optional) | |
_ignored.tsx | Ignored route | |
about.tsx | /about | Regular route |
blog.w.o.layout.tsx | /blog/w/o/layout | Route without /blog layout |
index.tsx | / | Index route |
Via @generouted/react-router
or @generouted/solid-router
<Routes />
โ file-based routing component to be render in the app entry<Modals />
โ optional file-based modals component to be render in the _app.tsx
layoutroutes
โ file-based routes tree/object used by default at <Routes />
componentVia @generouted/react-router/lazy
or @generouted/solid-router/lazy
@generouted/react-router
or @generouted/solid-router
to enable lazy-loadingsrc/pages/_app.tsx
<Routes />
, <Modals />
and routes
exportsVia @generouted/react-router/plugin
or @generouted/solid-router/plugin
src/router.ts
file<Link>
, <Navigate>
, useModals()
, useNavigate()
, useParams()
, redirect()
, etc.@generouted/react-router
docs or @generouted/solid-router
docs for more detailsVia @generouted/react-router/core
or @generouted/solid-router/core
<Routes/>
componentMIT
FAQs
Generated client-side file-based routes for Vite
The npm package generouted receives a total of 13,674 weekly downloads. As such, generouted popularity was classified as popular.
We found that generouted demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.ย It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.