From 19aca537cf1b0bddc6dc48834d4800b5468be604 Mon Sep 17 00:00:00 2001 From: natxocc Date: Sun, 22 Mar 2026 00:48:52 +0100 Subject: [PATCH] vite --- vite/index.js | 4 ++++ vite/router.js | 36 +++++++++++++++++++++++++++++++----- 2 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 vite/index.js diff --git a/vite/index.js b/vite/index.js new file mode 100644 index 0000000..b7efde7 --- /dev/null +++ b/vite/index.js @@ -0,0 +1,4 @@ +// src/vite/index.js +import sigproRouterPlugin from './sigproRouter.js'; +export const sigproRouter = sigproRouterPlugin; +export default sigproRouterPlugin; \ No newline at end of file diff --git a/vite/router.js b/vite/router.js index e68fe16..a17b6e2 100644 --- a/vite/router.js +++ b/vite/router.js @@ -5,7 +5,28 @@ export default function sigproRouter() { const virtualModuleId = 'virtual:sigpro-routes'; const resolvedVirtualModuleId = '\0' + virtualModuleId; - // ... (tus funciones getFiles y pathToUrl se quedan igual) + const getFiles = (dir) => { + if (!fs.existsSync(dir)) return []; + return fs.readdirSync(dir, { recursive: true }) + .filter(file => /\.(js|jsx)$/.test(file) && !path.basename(file).startsWith('_')) + .map(file => path.resolve(dir, file)); + }; + + const pathToUrl = (pagesDir, filePath) => { + let relative = path.relative(pagesDir, filePath) + .replace(/\\/g, '/') + .replace(/\.(js|jsx)$/, '') + .replace(/\/index$/, '') + .replace(/^index$/, ''); + + let url = '/' + relative; + + return url + .replace(/\/+/g, '/') + .replace(/\[\.\.\.([^\]]+)\]/g, '*') + .replace(/\[([^\]]+)\]/g, ':$1') + .replace(/\/$/, '') || '/'; + }; return { name: 'sigpro-router', @@ -16,19 +37,24 @@ export default function sigproRouter() { if (id !== resolvedVirtualModuleId) return; const pagesDir = path.resolve(process.cwd(), 'src/pages'); - const files = getFiles(pagesDir).sort((a, b) => b.length - a.length); + const files = getFiles(pagesDir).sort((a, b) => { + const urlA = pathToUrl(pagesDir, a); + const urlB = pathToUrl(pagesDir, b); + if (urlA.includes(':') && !urlB.includes(':')) return 1; + if (!urlA.includes(':') && urlB.includes(':')) return -1; + return urlB.length - urlA.length; + }); let routeEntries = ''; - files.forEach((fullPath, i) => { + files.forEach((fullPath) => { const urlPath = pathToUrl(pagesDir, fullPath); const importPath = fullPath.replace(/\\/g, '/'); - routeEntries += ` { path: '${urlPath}', component: () => import('${importPath}') },\n`; }); if (!routeEntries.includes("path: '*'")) { - routeEntries += ` { path: '*', component: () => h1('404 - Not Found') },\n`; + routeEntries += ` { path: '*', component: () => span('404 - Not Found') },\n`; } return `export const routes = [\n${routeEntries}];`;