This README provides detailed information about the SigPro Router Plugin for Vite, including features, installation instructions, usage examples, and limitations.
SigPro Router Plugin for Vite
A Vite plugin that automatically generates routes from your file structure in src/pages/, similar to Next.js file-based routing but for any JavaScript project.
Features
- 📁 File-based routing: Automatically creates routes from your
src/pagesdirectory - 🔗 Dynamic routes: Supports parameterized routes using
[param]syntax - 🧭 Path-to-regexp conversion: Dynamic routes are converted to RegExp with named capture groups
- 📊 Route map generation: Console output shows all detected routes at build time
- 🎯 Virtual module: Access your routes via
virtual:sigpro-routes
Installation
-
Save the plugin code in your project, for example as
plugins/sigpro-router.js -
Add it to your Vite configuration:
// vite.config.js
import { defineConfig } from 'vite';
import sigproRouter from './plugins/sigpro-router';
export default defineConfig({
plugins: [sigproRouter()]
});
Usage
1. Create Pages
Create .js files in your src/pages directory. Each file becomes a route:
src/pages/
├── index.js -> /
├── about.js -> /about
├── blog/
│ ├── index.js -> /blog
│ └── [id].js -> /blog/:id (dynamic)
└── users/
└── [userId].js -> /users/:userId (dynamic)
2. Access Routes in Your Application
The plugin exposes a virtual module virtual:sigpro-routes that exports a routes array:
// In your router or main application file
import { routes } from 'virtual:sigpro-routes';
// The routes array structure:
// [
// { path: '/', component: PageComponent, isDynamic: false, paramName: null },
// { path: /^\/blog\/(?<id>[^/]+)$/, component: PageComponent, isDynamic: true, paramName: 'id' },
// { path: /^\/users\/(?<userId>[^/]+)$/, component: PageComponent, isDynamic: true, paramName: 'userId' },
// ]
// Example usage with a simple router
function renderRoute(path) {
for (const route of routes) {
if (!route.isDynamic && route.path === path) {
return route.component();
} else if (route.isDynamic) {
const match = path.match(route.path);
if (match) {
// Access params via match.groups
const params = match.groups;
return route.component(params);
}
}
}
return '<h1>404 Not Found</h1>';
}
3. Build Time Output
When you run your Vite dev server or build, you'll see a route map in the console:
🚀 [SigPro Router] Mapa de rutas generado:
📄 / -> index.js
📄 /about -> about.js
📄 /blog -> blog/index.js
🔗 /blog/[id] -> blog/[id].js
🔗 /users/[userId] -> users/[userId].js
Route Priority
Routes are automatically prioritized:
- Static routes (non-dynamic) are matched before dynamic routes
- Routes are sorted by path length (shorter paths first)
Route Object Properties
Each route in the routes array contains:
| Property | Type | Description |
|---|---|---|
path |
string | RegExp |
Static path string or RegExp for dynamic routes |
component |
Function |
The imported page component/module |
isDynamic |
boolean |
Whether the route has parameters |
paramName |
string | null |
The parameter name for dynamic routes |
Dynamic Route Parameters
For dynamic routes like blog/[id].js:
- The route path becomes:
new RegExp("^\\/blog\\/(?<id>[^/]+)$") - Parameters can be accessed via
match.groupswhen matching the route
Example:
const match = '/blog/123'.match(/^\/blog\/(?<id>[^/]+)$/);
console.log(match.groups.id); // '123'
Limitations
- Only scans
.jsfiles (no JSX/TS support by default - modify the plugin if needed) - Requires a
src/pagesdirectory in your project root - Dynamic parameters are matched as single path segments (no catch-all routes)
Customization
You can modify the plugin to:
- Support other file extensions (.jsx, .ts, .tsx)
- Change the pages directory location
- Add custom route sorting logic
- Implement nested dynamic routes
Built for SigPro applications with Vite.