diff --git a/vite-plugin-sigpro.js b/vite-plugin-sigpro.js new file mode 100644 index 0000000..bf183e6 --- /dev/null +++ b/vite-plugin-sigpro.js @@ -0,0 +1 @@ +import fs from"fs";import path from"path";export default function sigproRouter(){const e="virtual:sigpro-routes",t="\0"+e;function r(e){let t=[];if(!fs.existsSync(e))return t;return fs.readdirSync(e).forEach((n=>{const o=path.resolve(e,n),s=fs.statSync(o);s&&s.isDirectory()?t=t.concat(r(o)):n.endsWith(".js")&&t.push(o)})),t}return{name:"sigpro-router",resolveId(r){if(r===e)return t},load(e){if(e===t){const e=path.resolve(process.cwd(),"src/pages");let t=r(e);t=t.sort(((e,t)=>{const r=e.includes("[");return r!==t.includes("[")?r?1:-1:e.length-t.length}));let n="",o="export const routes = [\n";return console.log("\nšŸš€ [SigPro Router] Generated route map:"),t.forEach(((t,r)=>{const s=path.relative(e,t).replace(/\\/g,"/"),c=`Page_${r}`;let a="/"+s.replace(".js","").toLowerCase();a.endsWith("/index")&&(a=a.replace("/index","")||"/");const l=a.includes("[")&&a.includes("]");let i=`'${a}'`,p=null;if(l){const e=a.match(/\[([^\]]+)\]/);p=e?e[1]:"id";i=`new RegExp("^${a.replace(/\//g,"\\/").replace(/\[([^\]]+)\]/,"(?<$1>[^/]+)")}$")`}console.log(` ${l?"šŸ”—":"šŸ“„"} ${a.padEnd(20)} -> ${s}`),n+=`import ${c} from './src/pages/${s}';\n`,o+=` { path: ${i}, component: ${c}, isDynamic: ${l}, paramName: ${p?`'${p}'`:"null"} },\n`})),o+="];",`${n}\n${o}`}}}}