@devlusoft/devix 0.4.1 → 0.4.2-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/dev-server.js
CHANGED
|
@@ -256,7 +256,7 @@ export type PageParams = NonNullable<Parameters<typeof loader>[0]>["params"]
|
|
|
256
256
|
`:`// auto-generado por devix - no editar
|
|
257
257
|
export type PageData = undefined
|
|
258
258
|
export type PageParams = Record<string, string>
|
|
259
|
-
`}function b(e,t){let r=x(t,e),o=ee(r,"utf-8"),n=Fe(o,r),a=x(t,".devix","pages",e.replace(/\.(tsx?|jsx?)$/,"")),d=x(a,"$types.d.ts"),y=r.replace(/\.(tsx?|jsx?)$/,""),f=re(a,y).replace(/\\/g,"/"),u=Ue(f,n);te(d)&&ee(d,"utf-8")===u||(Ce(a,{recursive:!0}),Le(d,u,"utf-8"))}function ne(e,t){let r=x(t,".devix","pages",e.replace(/\.(tsx?|jsx?)$/,"")),o=x(r,"$types.d.ts");te(o)&&Me(o)}function j(e,t){let r=x(t,e,"pages"),o;try{o=oe(r,t)}catch{return}for(let n of o)try{b(n,t)}catch{}}var S=qe(Ne(import.meta.url)),F="virtual:devix/entry-client",U="virtual:devix/client-routes",T="virtual:devix/render",$="virtual:devix/api",k="virtual:devix/context",H="virtual:devix/server-entry",ie=new Set(["loader","guard","generateStaticParams","headers"]);function se(e){let t=e.appDir??"app",r=`${t}/pages`,o=(e.css??[]).map(i=>i.startsWith("/")?i:`/${i.replace(/^\.\//,"")}`),n=p(S,"../server/render.js").replace(/\\/g,"/"),a=p(S,"../server/api.js").replace(/\\/g,"/"),d=p(S,"../runtime/client-router.js").replace(/\\/g,"/"),y=p(S,"../server/routes.js").replace(/\\/g,"/"),f=p(S,"../utils/env.js").replace(/\\/g,"/"),u=We(import.meta.url),_=u.resolve("@hono/node-server").replace(/\\/g,"/"),A=u.resolve("@hono/node-server/serve-static").replace(/\\/g,"/"),ye=u.resolve("hono").replace(/\\/g,"/"),xe={name:"devix",enforce:"pre",resolveId(i){if(i===F)return`\0${F}`;if(i===U)return`\0${U}`;if(i===T)return`\0${T}`;if(i===$)return`\0${$}`;if(i===k)return`\0${k}`;if(i===H)return`\0${H}`},load(i){if(i===`\0${F}`)return q({cssUrls:o});if(i===`\0${U}`)return V({pagesDir:r,matcherPath:d});if(i===`\0${T}`)return W({pagesDir:r,renderPath:n});if(i===`\0${$}`)return B({apiPath:a,appDir:t});if(i===`\0${k}`)return J();if(i===`\0${H}`)return Q({routesPath:y,envPath:f,honoServerPath:_,honoServerStaticPath:A,honoPath:ye})},transform(i,c,E){if(E?.ssr)return;let w=p(process.cwd(),r);if(!c.startsWith(w))return;let P=Be(c,i,{sourceType:"module"}),g=[];for(let l of P.program.body){if(l.type!=="ExportNamedDeclaration"||!l.declaration)continue;let h=l.declaration;if(h.type==="FunctionDeclaration"&&h.id&&ie.has(h.id.name)&&g.push({start:l.start,end:l.end,name:h.id.name}),h.type==="VariableDeclaration"){let D=new Set;for(let C of h.declarations)C.id.type==="Identifier"&&ie.has(C.id.name)&&(D.has(l.start)||(D.add(l.start),g.push({start:l.start,end:l.end,name:C.id.name})))}}if(g.length===0)return;g.sort((l,h)=>h.start-l.start);let s=i;for(let{start:l,end:h,name:D}of g)s=s.slice(0,l)+`export const ${D} = undefined`+s.slice(h);return{code:s,map:null}},buildStart(){let i=process.cwd(),c=O(t,i);L(I(c,`${t}/api`),i),j(t,i)},configureServer(i){let c=process.cwd();j(t,c);let E=()=>{let s=O(t,c);L(I(s,`${t}/api`),c)},w=s=>s.startsWith(p(c,r))&&!s.endsWith("layout.tsx")&&!s.endsWith("error.tsx"),P=s=>Ve(c,s).replace(/\\/g,"/"),g=s=>{let l=i.moduleGraph.getModuleById(`\0${s}`);l&&i.moduleGraph.invalidateModule(l)};i.watcher.add(p(c,"devix.config.ts")),i.watcher.on("change",s=>{s===p(c,"devix.config.ts")&&(console.log("[devix] Config changed, restarting..."),process.exit(75))}),i.watcher.on("add",s=>{s.startsWith(p(c,r))&&g(T),w(s)&&b(P(s),c),s.includes(`${t}/api`)&&(g($),E())}),i.watcher.on("unlink",s=>{s.startsWith(p(c,r))&&g(T),w(s)&&ne(P(s),c),s.includes(`${t}/api`)&&(g($),E())}),i.watcher.on("change",s=>{w(s)&&b(P(s),c),s.includes(`${t}/api`)&&!s.endsWith("middleware.ts")&&E()})}},ve={plugins:[He(),xe],publicDir:p(process.cwd(),e.publicDir??"public"),ssr:{noExternal:["@devlusoft/devix"]},...e.envPrefix?{envPrefix:e.envPrefix}:{}};return ke(ve,e.vite??{})}function ae(e,{apiModule:t,renderModule:r,loaderTimeout:o}){e.all("/api/*",async n=>{try{return await t.handleApiRequest(n.req.url,n.req.raw)}catch(a){return console.error(a),n.json({error:"internal error"},500)}}),e.get("/_data/*",async n=>{try{let{pathname:a,search:d}=new URL(n.req.url,"http://localhost"),y=a.replace(/^\/_data/,"")+d,f=await r.runLoader(y,n.req.raw,{loaderTimeout:o});if(f.error)return n.json({error:"internal error"},500);if("loaderError"in f){let{statusCode:u,message:_,data:A}=f.loaderError;return n.json({statusCode:u,message:_,data:A},u)}return n.json(f)}catch(a){return console.error(a),n.json({error:"internal error"},500)}})}import m from"picocolors";import{networkInterfaces as Je}from"node:os";function Ge(e){let t=Je();for(let r of Object.values(t))for(let o of r??[])if(o.family==="IPv4"&&!o.internal)return`http://${o.address}:${e}/`;return null}function ce(e){let t="0.4.1",r=Ge(e);console.log(),console.log(` ${m.bold(m.yellow("devix"))} ${m.dim(`v${t}`)}`),console.log(),console.log(` ${m.green("\u279C")} ${m.bold("Local:")} ${m.cyan(`http://localhost:${e}/`)}`),console.log(r?` ${m.green("\u279C")} ${m.bold("Network:")} ${m.cyan(r)}`:` ${m.green("\u279C")} ${m.bold("Network:")} ${m.dim("use --host to expose")}`),console.log()}async function le(e){let t=new Set;for(let[,r]of e.moduleGraph.idToModuleMap)r.id&&(r.id.endsWith(".css")||r.id.includes(".css?"))&&r.url.startsWith("/")&&t.add(r.url);return[...t]}function ue(e){if(typeof e=="number")return e;let t=e.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h)?$/);if(!t)throw new Error(`[devix] Invalid duration: "${e}". Use a number (ms) or a string like "5s", "2m", "500ms".`);let r=parseFloat(t[1]);switch(t[2]){case"h":return r*36e5;case"m":return r*6e4;case"s":return r*1e3;default:return r}}import{loadEnv as Xe}from"vite";function de(e){let t=Xe(e,process.cwd(),"");for(let[r,o]of Object.entries(t))process.env[r]===void 0&&(process.env[r]=o)}import{build as Ye}from"esbuild";import{join as pe}from"node:path";import{unlinkSync as ze,writeFileSync as Ze}from"node:fs";import{pathToFileURL as Ke}from"node:url";async function me(e){let t=await Ye({entryPoints:[pe(e,"devix.config.ts")],bundle:!0,write:!1,format:"esm",platform:"node",packages:"external"}),r=pe(e,`.devix-config-${Date.now()}.mjs`);Ze(r,t.outputFiles[0].text);try{return(await import(Ke(r).href)).default}finally{ze(r)}}de("development");var fe="virtual:devix/render",ot="virtual:devix/api",R=await me(process.cwd()),ge=Number(process.env.PORT)||R.port||3e3,nt=typeof R.host=="string"?R.host:R.host?"0.0.0.0":"localhost",v=await et({...se(R),configFile:!1,appType:"custom",server:{middlewareMode:!0}}),he={render:async(...e)=>(await v.ssrLoadModule(fe)).render(...e),runLoader:async(...e)=>(await v.ssrLoadModule(fe)).runLoader(...e)},it={handleApiRequest:async(...e)=>(await v.ssrLoadModule(ot)).handleApiRequest(...e)},N=new rt;ae(N,{renderModule:he,apiModule:it});N.get("*",async e=>{try{let{html:t,statusCode:r,headers:o}=await he.render(e.req.url,e.req.raw,{loaderTimeout:ue(R.loaderTimeout??1e4)}),a=(await le(v)).map(u=>`<link rel="stylesheet" href="${u}">`).join(`
|
|
259
|
+
`}function b(e,t){let r=x(t,e),o=ee(r,"utf-8"),n=Fe(o,r),a=x(t,".devix","pages",e.replace(/\.(tsx?|jsx?)$/,"")),d=x(a,"$types.d.ts"),y=r.replace(/\.(tsx?|jsx?)$/,""),f=re(a,y).replace(/\\/g,"/"),u=Ue(f,n);te(d)&&ee(d,"utf-8")===u||(Ce(a,{recursive:!0}),Le(d,u,"utf-8"))}function ne(e,t){let r=x(t,".devix","pages",e.replace(/\.(tsx?|jsx?)$/,"")),o=x(r,"$types.d.ts");te(o)&&Me(o)}function j(e,t){let r=x(t,e,"pages"),o;try{o=oe(r,t)}catch{return}for(let n of o)try{b(n,t)}catch{}}var S=qe(Ne(import.meta.url)),F="virtual:devix/entry-client",U="virtual:devix/client-routes",T="virtual:devix/render",$="virtual:devix/api",k="virtual:devix/context",H="virtual:devix/server-entry",ie=new Set(["loader","guard","generateStaticParams","headers"]);function se(e){let t=e.appDir??"app",r=`${t}/pages`,o=(e.css??[]).map(i=>i.startsWith("/")?i:`/${i.replace(/^\.\//,"")}`),n=p(S,"../server/render.js").replace(/\\/g,"/"),a=p(S,"../server/api.js").replace(/\\/g,"/"),d=p(S,"../runtime/client-router.js").replace(/\\/g,"/"),y=p(S,"../server/routes.js").replace(/\\/g,"/"),f=p(S,"../utils/env.js").replace(/\\/g,"/"),u=We(import.meta.url),_=u.resolve("@hono/node-server").replace(/\\/g,"/"),A=u.resolve("@hono/node-server/serve-static").replace(/\\/g,"/"),ye=u.resolve("hono").replace(/\\/g,"/"),xe={name:"devix",enforce:"pre",resolveId(i){if(i===F)return`\0${F}`;if(i===U)return`\0${U}`;if(i===T)return`\0${T}`;if(i===$)return`\0${$}`;if(i===k)return`\0${k}`;if(i===H)return`\0${H}`},load(i){if(i===`\0${F}`)return q({cssUrls:o});if(i===`\0${U}`)return V({pagesDir:r,matcherPath:d});if(i===`\0${T}`)return W({pagesDir:r,renderPath:n});if(i===`\0${$}`)return B({apiPath:a,appDir:t});if(i===`\0${k}`)return J();if(i===`\0${H}`)return Q({routesPath:y,envPath:f,honoServerPath:_,honoServerStaticPath:A,honoPath:ye})},transform(i,c,E){if(E?.ssr)return;let w=p(process.cwd(),r);if(!c.startsWith(w))return;let P=Be(c,i,{sourceType:"module"}),g=[];for(let l of P.program.body){if(l.type!=="ExportNamedDeclaration"||!l.declaration)continue;let h=l.declaration;if(h.type==="FunctionDeclaration"&&h.id&&ie.has(h.id.name)&&g.push({start:l.start,end:l.end,name:h.id.name}),h.type==="VariableDeclaration"){let D=new Set;for(let C of h.declarations)C.id.type==="Identifier"&&ie.has(C.id.name)&&(D.has(l.start)||(D.add(l.start),g.push({start:l.start,end:l.end,name:C.id.name})))}}if(g.length===0)return;g.sort((l,h)=>h.start-l.start);let s=i;for(let{start:l,end:h,name:D}of g)s=s.slice(0,l)+`export const ${D} = undefined`+s.slice(h);return{code:s,map:null}},buildStart(){let i=process.cwd(),c=O(t,i);L(I(c,`${t}/api`),i),j(t,i)},configureServer(i){let c=process.cwd();j(t,c);let E=()=>{let s=O(t,c);L(I(s,`${t}/api`),c)},w=s=>s.startsWith(p(c,r))&&!s.endsWith("layout.tsx")&&!s.endsWith("error.tsx"),P=s=>Ve(c,s).replace(/\\/g,"/"),g=s=>{let l=i.moduleGraph.getModuleById(`\0${s}`);l&&i.moduleGraph.invalidateModule(l)};i.watcher.add(p(c,"devix.config.ts")),i.watcher.on("change",s=>{s===p(c,"devix.config.ts")&&(console.log("[devix] Config changed, restarting..."),process.exit(75))}),i.watcher.on("add",s=>{s.startsWith(p(c,r))&&g(T),w(s)&&b(P(s),c),s.includes(`${t}/api`)&&(g($),E())}),i.watcher.on("unlink",s=>{s.startsWith(p(c,r))&&g(T),w(s)&&ne(P(s),c),s.includes(`${t}/api`)&&(g($),E())}),i.watcher.on("change",s=>{w(s)&&b(P(s),c),s.includes(`${t}/api`)&&!s.endsWith("middleware.ts")&&E()})}},ve={plugins:[He(),xe],publicDir:p(process.cwd(),e.publicDir??"public"),ssr:{noExternal:["@devlusoft/devix"]},...e.envPrefix?{envPrefix:e.envPrefix}:{}};return ke(ve,e.vite??{})}function ae(e,{apiModule:t,renderModule:r,loaderTimeout:o}){e.all("/api/*",async n=>{try{return await t.handleApiRequest(n.req.url,n.req.raw)}catch(a){return console.error(a),n.json({error:"internal error"},500)}}),e.get("/_data/*",async n=>{try{let{pathname:a,search:d}=new URL(n.req.url,"http://localhost"),y=a.replace(/^\/_data/,"")+d,f=await r.runLoader(y,n.req.raw,{loaderTimeout:o});if(f.error)return n.json({error:"internal error"},500);if("loaderError"in f){let{statusCode:u,message:_,data:A}=f.loaderError;return n.json({statusCode:u,message:_,data:A},u)}return n.json(f)}catch(a){return console.error(a),n.json({error:"internal error"},500)}})}import m from"picocolors";import{networkInterfaces as Je}from"node:os";function Ge(e){let t=Je();for(let r of Object.values(t))for(let o of r??[])if(o.family==="IPv4"&&!o.internal)return`http://${o.address}:${e}/`;return null}function ce(e){let t="0.4.2-beta.1",r=Ge(e);console.log(),console.log(` ${m.bold(m.yellow("devix"))} ${m.dim(`v${t}`)}`),console.log(),console.log(` ${m.green("\u279C")} ${m.bold("Local:")} ${m.cyan(`http://localhost:${e}/`)}`),console.log(r?` ${m.green("\u279C")} ${m.bold("Network:")} ${m.cyan(r)}`:` ${m.green("\u279C")} ${m.bold("Network:")} ${m.dim("use --host to expose")}`),console.log()}async function le(e){let t=new Set;for(let[,r]of e.moduleGraph.idToModuleMap)r.id&&(r.id.endsWith(".css")||r.id.includes(".css?"))&&r.url.startsWith("/")&&t.add(r.url);return[...t]}function ue(e){if(typeof e=="number")return e;let t=e.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h)?$/);if(!t)throw new Error(`[devix] Invalid duration: "${e}". Use a number (ms) or a string like "5s", "2m", "500ms".`);let r=parseFloat(t[1]);switch(t[2]){case"h":return r*36e5;case"m":return r*6e4;case"s":return r*1e3;default:return r}}import{loadEnv as Xe}from"vite";function de(e){let t=Xe(e,process.cwd(),"");for(let[r,o]of Object.entries(t))process.env[r]===void 0&&(process.env[r]=o)}import{build as Ye}from"esbuild";import{join as pe}from"node:path";import{unlinkSync as ze,writeFileSync as Ze}from"node:fs";import{pathToFileURL as Ke}from"node:url";async function me(e){let t=await Ye({entryPoints:[pe(e,"devix.config.ts")],bundle:!0,write:!1,format:"esm",platform:"node",packages:"external"}),r=pe(e,`.devix-config-${Date.now()}.mjs`);Ze(r,t.outputFiles[0].text);try{return(await import(Ke(r).href)).default}finally{ze(r)}}de("development");var fe="virtual:devix/render",ot="virtual:devix/api",R=await me(process.cwd()),ge=Number(process.env.PORT)||R.port||3e3,nt=typeof R.host=="string"?R.host:R.host?"0.0.0.0":"localhost",v=await et({...se(R),configFile:!1,appType:"custom",server:{middlewareMode:!0}}),he={render:async(...e)=>(await v.ssrLoadModule(fe)).render(...e),runLoader:async(...e)=>(await v.ssrLoadModule(fe)).runLoader(...e)},it={handleApiRequest:async(...e)=>(await v.ssrLoadModule(ot)).handleApiRequest(...e)},N=new rt;ae(N,{renderModule:he,apiModule:it});N.get("*",async e=>{try{let{html:t,statusCode:r,headers:o}=await he.render(e.req.url,e.req.raw,{loaderTimeout:ue(R.loaderTimeout??1e4)}),a=(await le(v)).map(u=>`<link rel="stylesheet" href="${u}">`).join(`
|
|
260
260
|
`),d=a?t.replace("</head>",`${a}
|
|
261
261
|
</head>`):t,y=await v.transformIndexHtml(e.req.url,`<!DOCTYPE html>${d}`),f=e.html(y,r);for(let[u,_]of Object.entries(o))f.headers.set(u,_);return f}catch(t){return v.ssrFixStacktrace(t),console.error(t),e.text("Internal Server Error",500)}});var st=tt(N.fetch);Qe(async(e,t)=>{await new Promise(r=>v.middlewares(e,t,r)),t.writableEnded||await st(e,t)}).listen(ge,nt,()=>{ce(ge)});
|
|
262
262
|
//# sourceMappingURL=dev-server.js.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/cli/dev-server.ts", "../../src/vite/index.ts", "../../src/vite/codegen/entry-client.ts", "../../src/vite/codegen/client-routes.ts", "../../src/vite/codegen/render.ts", "../../src/vite/codegen/api.ts", "../../src/vite/codegen/context.ts", "../../src/vite/codegen/scan-api.ts", "../../src/vite/codegen/extract-methods.ts", "../../src/utils/patterns.ts", "../../src/server/api-router.ts", "../../src/vite/codegen/routes-dts.ts", "../../src/vite/codegen/write-routes-dts.ts", "../../src/vite/codegen/server-entry.ts", "../../src/vite/codegen/page-types.ts", "../../src/server/routes.ts", "../../src/utils/banner.ts", "../../src/server/collect-css.ts", "../../src/utils/duration.ts", "../../src/utils/env.ts", "../../src/utils/load-config.ts"],
|
|
4
4
|
"sourcesContent": ["import { createServer } from 'node:http'\nimport { createServer as createViteServer } from 'vite'\nimport { getRequestListener } from '@hono/node-server'\nimport { Hono } from 'hono'\nimport { devix } from '../vite'\nimport { registerApiRoutes } from '../server/routes'\nimport { printDevBanner } from \"../utils/banner\"\nimport { collectCss } from \"../server/collect-css\"\nimport { parseDuration } from \"../utils/duration\"\nimport { loadDotenv } from \"../utils/env\"\nimport {loadConfig} from \"../utils/load-config\";\n\nloadDotenv('development')\n\nconst VIRTUAL_RENDER = 'virtual:devix/render'\nconst VIRTUAL_API = 'virtual:devix/api'\n\nconst config = await loadConfig(process.cwd())\nconst port = Number(process.env.PORT) || config.port || 3000\nconst host = typeof config.host === 'string' ? config.host : config.host ? '0.0.0.0' : 'localhost'\n\nconst vite = await createViteServer({\n ...devix(config),\n configFile: false,\n appType: 'custom',\n server: { middlewareMode: true },\n})\n\nconst renderModule = {\n render: async (...args: any[]) => (await vite.ssrLoadModule(VIRTUAL_RENDER)).render(...args),\n runLoader: async (...args: any[]) => (await vite.ssrLoadModule(VIRTUAL_RENDER)).runLoader(...args),\n}\nconst apiModule = {\n handleApiRequest: async (...args: any[]) => (await\n vite.ssrLoadModule(VIRTUAL_API)).handleApiRequest(...args),\n}\n\nconst app = new Hono()\nregisterApiRoutes(app, { renderModule, apiModule })\n\napp.get('*', async (c) => {\n try {\n const { html, statusCode, headers } = await renderModule.render(c.req.url, c.req.raw, {\n loaderTimeout:\n parseDuration(config.loaderTimeout ?? 10_000)\n })\n const cssUrls = await collectCss(vite)\n const cssLinks = cssUrls.map(url => `<link rel=\"stylesheet\" href=\"${url}\">`).join('\\n')\n const htmlWithCss = cssLinks ? html.replace('</head>', `${cssLinks}\\n</head>`) : html\n const transformed = await vite.transformIndexHtml(c.req.url, `<!DOCTYPE html>${htmlWithCss}`)\n const res = c.html(transformed, statusCode)\n for (const [key, value] of Object.entries(headers as Record<string, string>)) {\n res.headers.set(key, value)\n }\n return res\n } catch (e) {\n vite.ssrFixStacktrace(e as Error)\n console.error(e)\n return c.text('Internal Server Error', 500)\n }\n})\n\nconst honoHandler = getRequestListener(app.fetch)\ncreateServer(async (req, res) => {\n await new Promise<void>(resolve => vite.middlewares(req, res, resolve))\n if (!res.writableEnded) await honoHandler(req, res)\n}).listen(port, host, () => {\n printDevBanner(port)\n})\n\nexport { } ", "import {UserConfig, Plugin, mergeConfig} from 'vite'\nimport type {DevixConfig} from '../config'\nimport react from '@vitejs/plugin-react'\nimport {fileURLToPath} from 'node:url'\nimport {dirname, relative, resolve} from 'node:path'\nimport {createRequire} from 'node:module'\nimport {generateEntryClient} from './codegen/entry-client'\nimport {generateClientRoutes} from './codegen/client-routes'\nimport {generateRender} from './codegen/render'\nimport {generateApi} from './codegen/api'\nimport {generateContext} from \"./codegen/context\";\nimport {scanApiFiles} from \"./codegen/scan-api\";\nimport {generateRoutesDts} from \"./codegen/routes-dts\";\nimport {writeRoutesDts} from \"./codegen/write-routes-dts\";\nimport {parseSync} from 'oxc-parser'\nimport {generateServerEntry} from \"./codegen/server-entry\";\nimport {deletePageTypes, scanAndWritePageTypes, writePageTypes} from \"./codegen/page-types\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\n\nconst VIRTUAL_ENTRY_CLIENT = 'virtual:devix/entry-client'\nconst VIRTUAL_CLIENT_ROUTES = 'virtual:devix/client-routes'\nconst VIRTUAL_RENDER = 'virtual:devix/render'\nconst VIRTUAL_API = 'virtual:devix/api'\nconst VIRTUAL_CONTEXT = 'virtual:devix/context'\nconst VIRTUAL_SERVER_ENTRY = 'virtual:devix/server-entry'\n\nconst SERVER_EXPORTS = new Set(['loader', 'guard', 'generateStaticParams', 'headers'])\n\nexport function devix(config: DevixConfig): UserConfig {\n const appDir = config.appDir ?? 'app'\n const pagesDir = `${appDir}/pages`\n const cssUrls = (config.css ?? []).map(u => u.startsWith('/') ? u : `/${u.replace(/^\\.\\//, '')}`)\n\n const renderPath = resolve(__dirname, '../server/render.js').replace(/\\\\/g, '/')\n const apiPath = resolve(__dirname, '../server/api.js').replace(/\\\\/g, '/')\n const matcherPath = resolve(__dirname, '../runtime/client-router.js').replace(/\\\\/g, '/')\n const routesPath = resolve(__dirname, '../server/routes.js').replace(/\\\\/g, '/')\n const envPath = resolve(__dirname, '../utils/env.js').replace(/\\\\/g, '/')\n\n const _require = createRequire(import.meta.url)\n const honoServerPath = _require.resolve('@hono/node-server').replace(/\\\\/g, '/')\n const honoServerStaticPath = _require.resolve('@hono/node-server/serve-static').replace(/\\\\/g, '/')\n const honoPath = _require.resolve('hono').replace(/\\\\/g, '/')\n\n const virtualPlugin: Plugin = {\n name: 'devix',\n enforce: 'pre',\n\n resolveId(id) {\n if (id === VIRTUAL_ENTRY_CLIENT) return `\\0${VIRTUAL_ENTRY_CLIENT}`\n if (id === VIRTUAL_CLIENT_ROUTES) return `\\0${VIRTUAL_CLIENT_ROUTES}`\n if (id === VIRTUAL_RENDER) return `\\0${VIRTUAL_RENDER}`\n if (id === VIRTUAL_API) return `\\0${VIRTUAL_API}`\n if (id === VIRTUAL_CONTEXT) return `\\0${VIRTUAL_CONTEXT}`\n if (id === VIRTUAL_SERVER_ENTRY) return `\\0${VIRTUAL_SERVER_ENTRY}`\n },\n\n load(id) {\n if (id === `\\0${VIRTUAL_ENTRY_CLIENT}`)\n return generateEntryClient({cssUrls})\n if (id === `\\0${VIRTUAL_CLIENT_ROUTES}`)\n return generateClientRoutes({pagesDir, matcherPath})\n if (id === `\\0${VIRTUAL_RENDER}`)\n return generateRender({pagesDir, renderPath})\n if (id === `\\0${VIRTUAL_API}`)\n return generateApi({apiPath, appDir})\n if (id === `\\0${VIRTUAL_CONTEXT}`)\n return generateContext()\n if (id === `\\0${VIRTUAL_SERVER_ENTRY}`)\n return generateServerEntry({routesPath, envPath, honoServerPath, honoServerStaticPath, honoPath})\n },\n\n\n transform(code, id, options) {\n if (options?.ssr) return\n\n const resolvedPagesDir = resolve(process.cwd(), pagesDir)\n if (!id.startsWith(resolvedPagesDir)) return\n\n const ast = parseSync(id, code, {sourceType: 'module'})\n\n const replacements: { start: number; end: number; name: string }[] = []\n\n for (const node of ast.program.body) {\n if (node.type !== 'ExportNamedDeclaration' || !node.declaration) continue\n\n const decl = node.declaration\n\n if (decl.type === 'FunctionDeclaration' && decl.id && SERVER_EXPORTS.has(decl.id.name)) {\n replacements.push({start: node.start, end: node.end, name: decl.id.name})\n }\n\n if (decl.type === 'VariableDeclaration') {\n const seen = new Set<number>()\n for (const declarator of decl.declarations) {\n if (declarator.id.type === 'Identifier' && SERVER_EXPORTS.has(declarator.id.name)) {\n if (!seen.has(node.start)) {\n seen.add(node.start)\n replacements.push({start: node.start, end: node.end, name: declarator.id.name})\n }\n }\n }\n }\n }\n\n if (replacements.length === 0) return\n\n replacements.sort((a, b) => b.start - a.start)\n\n let result = code\n for (const {start, end, name} of replacements) {\n result = result.slice(0, start) + `export const ${name} = undefined` + result.slice(end)\n }\n\n return {code: result, map: null}\n },\n\n buildStart() {\n const root = process.cwd()\n const entries = scanApiFiles(appDir, root)\n writeRoutesDts(generateRoutesDts(entries, `${appDir}/api`), root)\n scanAndWritePageTypes(appDir, root)\n },\n\n configureServer(server) {\n const root = process.cwd()\n\n scanAndWritePageTypes(appDir, root)\n\n const regenerateDts = () => {\n const entries = scanApiFiles(appDir, root)\n writeRoutesDts(generateRoutesDts(entries, `${appDir}/api`), root)\n }\n\n const isPageFile = (file: string) => file.startsWith(resolve(root, pagesDir)) && !file.endsWith('layout.tsx') && !file.endsWith('error.tsx')\n\n const pageRelPath = (file: string) => relative(root, file).replace(/\\\\/g, '/')\n\n const invalidateVirtualModule = (id: string) => {\n const mod = server.moduleGraph.getModuleById(`\\0${id}`)\n if (mod) server.moduleGraph.invalidateModule(mod)\n }\n\n server.watcher.add(resolve(root, 'devix.config.ts'))\n server.watcher.on('change', (file) => {\n if (file === resolve(root, 'devix.config.ts')) {\n console.log('[devix] Config changed, restarting...')\n process.exit(75)\n }\n })\n\n server.watcher.on('add', (file) => {\n if (file.startsWith(resolve(root, pagesDir))) invalidateVirtualModule(VIRTUAL_RENDER)\n if (isPageFile(file)) writePageTypes(pageRelPath(file), root)\n if (file.includes(`${appDir}/api`)) {\n invalidateVirtualModule(VIRTUAL_API)\n regenerateDts()\n }\n })\n server.watcher.on('unlink', (file) => {\n if (file.startsWith(resolve(root, pagesDir))) invalidateVirtualModule(VIRTUAL_RENDER)\n if (isPageFile(file)) deletePageTypes(pageRelPath(file), root)\n if (file.includes(`${appDir}/api`)) {\n invalidateVirtualModule(VIRTUAL_API)\n regenerateDts()\n }\n })\n server.watcher.on('change', (file) => {\n if (isPageFile(file)) writePageTypes(pageRelPath(file), root)\n if (file.includes(`${appDir}/api`) && !file.endsWith('middleware.ts')) {\n regenerateDts()\n }\n })\n },\n }\n\n const base: UserConfig = {\n plugins: [react(), virtualPlugin],\n publicDir: resolve(process.cwd(), config.publicDir ?? 'public'),\n ssr: {noExternal: ['@devlusoft/devix']},\n ...(config.envPrefix ? {envPrefix: config.envPrefix} : {}),\n }\n\n return mergeConfig(base, config.vite ?? {})\n}", "interface EntryClientOptions {\n cssUrls: string[]\n}\n\nexport function generateEntryClient({ cssUrls }: EntryClientOptions): string {\n const cssImports = cssUrls.map(u => `import '${u}'`).join('\\n')\n\n return `\n${cssImports}\nimport \"@vitejs/plugin-react/preamble\"\nimport React from \"react\"\nimport {hydrateRoot, createRoot} from 'react-dom/client'\nimport {matchClientRoute, loadErrorPage, getDefaultErrorPage} from 'virtual:devix/client-routes'\nimport {RouterProvider} from '@devlusoft/devix'\n\nconst root = document.getElementById('devix-root')\n\nif (!window.__DEVIX__) {\n const ErrorPage = getDefaultErrorPage()\n createRoot(root).render(React.createElement(ErrorPage, {statusCode: 500, message: 'Server error'}))\n} else {\n const {metadata, viewport, clientEntry} = window.__DEVIX__\n const loaderData = window.__LOADER_DATA__\n const layoutsData = window.__LAYOUTS_DATA__ ?? []\n\n const matched = matchClientRoute(window.location.pathname)\n\n if (window.__LOADER_ERROR__) {\n const {statusCode, message, data} = window.__LOADER_ERROR__\n const ErrorPage = await loadErrorPage() ?? getDefaultErrorPage()\n createRoot(root).render(\n React.createElement(RouterProvider, {\n clientEntry,\n initialData: null,\n initialParams: {},\n initialPage: () => null,\n initialError: {statusCode, message, data},\n initialErrorPage: ErrorPage,\n })\n )\n } else if (matched) {\n const [pageMod, ...layoutMods] = await Promise.all([\n matched.load(),\n ...matched.loadLayouts.map(l => l()),\n ])\n hydrateRoot(\n root,\n React.createElement(RouterProvider, {\n clientEntry,\n initialData: loaderData,\n initialParams: matched.params,\n initialPage: pageMod.default,\n initialLayouts: layoutMods.map(m => m.default),\n initialLayoutsData: layoutsData,\n initialMeta: metadata,\n initialViewport: viewport,\n })\n )\n\n if (window.location.hash) { \n const id = window.location.hash.slice(1) \n const scrollBehavior = getComputedStyle(document.documentElement).scrollBehavior \n requestAnimationFrame(() => { \n document.getElementById(id)?.scrollIntoView({ behavior: scrollBehavior }) \n }) \n } \n } else {\n const ErrorPage = await loadErrorPage() ?? getDefaultErrorPage()\n createRoot(root).render(\n React.createElement(RouterProvider, {\n clientEntry,\n initialData: null,\n initialParams: {},\n initialPage: () => null,\n initialLayouts: [],\n initialLayoutsData: [],\n initialMeta: null,\n initialError: {statusCode: 404, message: 'Not found'},\n initialErrorPage: ErrorPage,\n })\n )\n }\n}\n`\n}", "interface ClientRoutesOptions {\n pagesDir: string\n matcherPath: string\n}\n\nexport function generateClientRoutes({pagesDir, matcherPath}: ClientRoutesOptions) {\n return `\nimport React from 'react'\nimport { createMatcher } from '${matcherPath}'\nconst pageFiles = import.meta.glob(['/${pagesDir}/**/*.tsx', '!**/error.tsx', '!**/layout.tsx'])\nconst layoutFiles = import.meta.glob('/${pagesDir}/**/layout.tsx')\nconst errorFiles = import.meta.glob('/${pagesDir}/**/error.tsx')\n\nexport const matchClientRoute = createMatcher(pageFiles, layoutFiles)\n\nexport async function loadErrorPage() {\n const key = Object.keys(errorFiles)[0]\n if (!key) return null\n const mod = await errorFiles[key]()\n return mod?.default ?? null\n}\n\nexport function getDefaultErrorPage() {\n return function DefaultError({ statusCode, message }) {\n return React.createElement('main', {\n style: { minHeight: '100dvh', display: 'flex', flexDirection: 'column', \n alignItems: 'center', justifyContent: 'center', gap: '8px',\n fontFamily: 'system-ui, sans-serif' }\n },\n React.createElement('h1', {style: {fontSize: '4rem', fontWeight: 700}}, statusCode),\n React.createElement('p', {style: {color: '#666'}}, message ?? 'An unexpected error occurred'),\n )\n }\n}\n`\n}", "interface RenderOptions {\n pagesDir: string\n renderPath: string\n}\n\nexport function generateRender({pagesDir, renderPath}: RenderOptions): string {\n return `\nimport { render as _render, runLoader as _runLoader, getStaticRoutes as _getStaticRoutes } from '${renderPath}'\n\nconst _pages = import.meta.glob(['/${pagesDir}/**/*.tsx', '!**/error.tsx', '!**/layout.tsx'])\nconst _layouts = import.meta.glob('/${pagesDir}/**/layout.tsx')\n\nconst _glob = {\n pages: _pages,\n layouts: _layouts,\n pagesDir: '/${pagesDir}',\n}\n\nexport function render(url, request, options) {\n return _render(url, request, _glob, options)\n}\n\nexport function runLoader(url, request, options) {\n return _runLoader(url, request, _glob, options)\n}\n\nexport function getStaticRoutes() {\n return _getStaticRoutes(_glob)\n}\n`\n}\n", "interface ApiOptions {\n apiPath: string\n appDir: string\n}\n\nexport function generateApi({apiPath, appDir}: ApiOptions): string {\n return `\nimport { handleApiRequest as _handleApiRequest } from '${apiPath}'\n\nconst _routes = import.meta.glob(['/${appDir}/api/**/*.ts', '!**/middleware.ts'])\nconst _middlewares = import.meta.glob('/${appDir}/api/**/middleware.ts')\n\nconst _glob = {\n routes: _routes,\n middlewares: _middlewares,\n apiDir: '/${appDir}/api',\n}\n\nexport function handleApiRequest(url, request) {\n return _handleApiRequest(url, request, _glob)\n}\n`\n}\n", "export function generateContext(): string {\n return `\nexport {RouterContext} from '@devlusoft/devix/runtime/context'\n`\n}", "import {readFileSync, readdirSync, statSync} from 'node:fs'\nimport {join, relative} from 'node:path'\nimport {extractHttpMethods} from './extract-methods'\nimport {buildRouteEntry} from './routes-dts'\nimport type {RouteEntry} from './routes-dts'\n\nfunction walkDir(dir: string, root: string): string[] {\n const entries: string[] = []\n for (const name of readdirSync(dir)) {\n const full = join(dir, name)\n if (statSync(full).isDirectory()) {\n entries.push(...walkDir(full, root))\n } else if (/\\.(ts|tsx)$/.test(name)) {\n entries.push(relative(root, full).replace(/\\\\/g, '/'))\n }\n }\n return entries\n}\n\nexport function scanApiFiles(appDir: string, projectRoot: string): RouteEntry[] {\n const apiDir = join(projectRoot, appDir, 'api')\n\n let files: string[]\n try {\n files = walkDir(apiDir, projectRoot)\n } catch {\n return []\n }\n\n return files\n .filter(f => !f.endsWith('middleware.ts') && !f.endsWith('middleware.tsx'))\n .flatMap(filePath => {\n try {\n const content = readFileSync(join(projectRoot, filePath), 'utf-8')\n const methods = extractHttpMethods(content)\n if (methods.length === 0) return []\n return [buildRouteEntry(filePath, `${appDir}/api`, methods)]\n } catch {\n return []\n }\n })\n}\n", "const HTTP_METHODS = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'] as const\nexport type HttpMethod = (typeof HTTP_METHODS)[number]\n\nconst METHOD_EXPORT_RE = /export\\s+(?:const|async\\s+function|function)\\s+(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\\b/g\n\nfunction stripComments(content: string): string {\n return content\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, '')\n .replace(/\\/\\/.*$/gm, '')\n}\n\nexport function extractHttpMethods(content: string): HttpMethod[] {\n const found = new Set<HttpMethod>()\n for (const match of stripComments(content).matchAll(METHOD_EXPORT_RE)) {\n found.add(match[1] as HttpMethod)\n }\n return [...found]\n}\n", "export function routePattern(rel: string): string {\n return rel\n .replace(/\\.(tsx|ts|jsx|js)$/, '')\n .replace(/\\(.*?\\)\\//g, '')\n .replace(/^index$|\\/index$/, '')\n .replace(/\\[([^\\]]+)]/g, ':$1')\n || '/'\n}", "import {routePattern} from \"../utils/patterns\";\n\nexport interface ApiRoute {\n path: string\n key: string\n params: string[]\n regex: RegExp\n}\n\nexport interface ApiMiddleware {\n dir: string\n key: string\n}\n\nexport interface ApiResult {\n routes: ApiRoute[]\n middlewares: ApiMiddleware[]\n}\n\nexport function keyToRoutePattern(key: string, apiDir: string): string {\n const rel = key.slice(apiDir.length + 1).replace(/\\\\/g, '/')\n const pattern = routePattern(rel)\n return pattern === '/' ? '/api' : `/api/${pattern}`.replace('/api//', '/api/')\n}\n\nfunction keyToDir(key: string): string {\n return key.slice(0, key.lastIndexOf('/'))\n}\n\nexport function buildRoutes(routeKeys: string[], middlewareKeys: string[], apiDir: string): ApiResult {\n const routes: ApiRoute[] = []\n const middlewares: ApiMiddleware[] = []\n\n for (const key of middlewareKeys) {\n middlewares.push({dir: keyToDir(key), key})\n }\n\n for (const key of routeKeys) {\n const pattern = keyToRoutePattern(key, apiDir)\n const params = [...pattern.matchAll(/:([^/]+)/g)].map(m => m[1])\n const regexStr = pattern\n .replace(/:[^/]+/g, '([^/]+)')\n .replace(/\\//g, '\\\\/')\n routes.push({path: pattern, key, params, regex: new RegExp(`^${regexStr}$`)})\n }\n routes.sort((a, b) => {\n const aScore = (a.path.match(/:/g) || []).length\n const bScore = (b.path.match(/:/g) || []).length\n if (aScore !== bScore) return aScore - bScore\n return b.path.length - a.path.length\n })\n\n return {routes, middlewares}\n}\n\nexport function collectMiddlewareChain(routeKey: string, middlewares: ApiMiddleware[]): ApiMiddleware[] {\n const routeDir = keyToDir(routeKey)\n\n return middlewares\n .filter(mw => routeDir.startsWith(mw.dir))\n .sort((a, b) => a.dir.split('/').length - b.dir.split('/').length)\n}\n\nexport function matchRoute(\n pathname: string,\n routes: ApiRoute[]\n): { route: ApiRoute; params: Record<string, string> } | null {\n for (const route of routes) {\n const match = pathname.match(route.regex)\n if (match) {\n const params: Record<string, string> = {}\n route.params.forEach((name, i) => {\n params[name] = decodeURIComponent(match[i + 1])\n })\n return {route, params}\n }\n }\n return null\n}\n", "import { keyToRoutePattern } from '../../server/api-router'\nimport type { HttpMethod } from './extract-methods'\n\nexport interface RouteEntry {\n filePath: string\n urlPattern: string\n identifier: string\n methods: HttpMethod[]\n}\n\nexport function filePathToIdentifier(filePath: string, apiDir: string): string {\n return '_api_' + filePath\n .slice(`${apiDir}/`.length)\n .replace(/\\.(ts|tsx)$/, '')\n .replace(/[^a-zA-Z0-9]/g, '_')\n}\n\nexport function buildRouteEntry(filePath: string, apiDir: string, methods: HttpMethod[]): RouteEntry {\n return {\n filePath,\n urlPattern: keyToRoutePattern(filePath, apiDir),\n identifier: filePathToIdentifier(filePath, apiDir),\n methods,\n }\n}\n\nexport function generateRoutesDts(entries: RouteEntry[], apiDir: string): string {\n if (entries.length === 0) {\n return `// auto-generado por devix \u2014 no editar\\nexport {}\\ndeclare module '@devlusoft/devix' {\\n interface ApiRoutes {}\\n}\\n`\n }\n\n const imports = entries\n .map(e => {\n const importPath = '../' + e.filePath.replace(/\\.(ts|tsx)$/, '')\n return `import type * as ${e.identifier} from '${importPath}'`\n })\n .join('\\n')\n\n const routeLines = entries.flatMap(e =>\n e.methods.map(m =>\n ` '${m} ${e.urlPattern}': InferRoute<(typeof ${e.identifier})['${m}']>`\n )\n ).join('\\n')\n\n return `// auto-generado por devix \u2014 no editar\n${imports}\n\ntype JsonResponse<T, S extends number = number> = Response & { readonly __body: T; readonly __status: S }\ntype Is2xx<S extends number> = [number] extends [S] ? boolean : S extends 200 | 201 | 202 | 203 | 204 | 205 | 206 ? true : false\ntype UnwrapSuccessJson<T> = T extends JsonResponse<infer U, infer S> ? Is2xx<S> extends false ? never : U : never\ntype UnwrapErrorJson<T> = T extends JsonResponse<infer U, infer S> ? Is2xx<S> extends true ? never : U : never\ntype InferFnSuccess<T> = T extends (...args: any[]) => any ? UnwrapSuccessJson<Awaited<ReturnType<T>>> : never\ntype InferFnErrors<T> = T extends (...args: any[]) => any ? UnwrapErrorJson<Awaited<ReturnType<T>>> : never\ntype InferRoute<T> =\n T extends { readonly __return?: infer TReturn; readonly __body?: infer TBody }\n ? {\n __body: [TBody] extends [undefined] ? never : Exclude<TBody, undefined>\n __response: InferFnSuccess<() => TReturn>\n __errors: InferFnErrors<() => TReturn>\n }\n : InferFnSuccess<T>\n\ndeclare module '@devlusoft/devix' {\n interface ApiRoutes {\n${routeLines}\n }\n}\n`\n}\n", "import {mkdirSync, readFileSync, writeFileSync, existsSync} from 'node:fs'\nimport {join} from 'node:path'\n\nexport function writeRoutesDts(content: string, projectRoot: string): boolean {\n const devixDir = join(projectRoot, '.devix')\n const outPath = join(devixDir, 'routes.d.ts')\n\n mkdirSync(devixDir, {recursive: true})\n\n if (existsSync(outPath) && readFileSync(outPath, 'utf-8') === content) {\n return false\n }\n\n writeFileSync(outPath, content, 'utf-8')\n return true\n}\n", "interface ServerEntryOptions {\n routesPath: string\n envPath: string\n honoServerPath: string\n honoServerStaticPath: string\n honoPath: string\n}\n\nexport function generateServerEntry({ routesPath, envPath, honoServerPath, honoServerStaticPath, honoPath }: ServerEntryOptions): string {\n return `\nimport { readFileSync } from 'node:fs'\n import { serve } from '${honoServerPath}'\n import { serveStatic } from '${honoServerStaticPath}'\n import { Hono } from '${honoPath}'\n import { resolve, join, dirname } from 'node:path'\n import { pathToFileURL } from 'node:url'\n import { registerApiRoutes, registerSsrRoute } from '${routesPath}' \n import { loadDotenv } from '${envPath}'\n \n loadDotenv('production')\n \n const __dir = dirname(process.argv[1])\n\n let renderModule, apiModule, manifest, runtimeConfig \n \n try { \n runtimeConfig = JSON.parse(readFileSync(resolve(__dir, '../devix.config.json'), 'utf-8'))\n if (runtimeConfig.output !== 'static') { \n renderModule = await import(pathToFileURL(resolve(__dir, 'render.js')).href)\n apiModule = await import(pathToFileURL(resolve(__dir, 'api.js')).href) \n } \n manifest = JSON.parse(readFileSync(resolve(__dir, '../client/.vite/manifest.json'), 'utf-8')) \n } catch { \n console.error('[devix] Build not found. Run \"devix build\" first.')\n process.exit(1) \n } \n \n const port = Number(process.env.PORT) || runtimeConfig.port || 3000 \n const host = typeof runtimeConfig.host === 'string'\n ? runtimeConfig.host \n : runtimeConfig.host ? '0.0.0.0' : (process.env.HOST || '0.0.0.0') \n \n const clientRoot = resolve(__dir, '../client') \n const app = new Hono()\n \n if (runtimeConfig.output === 'static') {\n app.get('/_data/*', (c) => {\n const pathname = c.req.path.replace(/^\\\\/_data/, '') || '/' \n const filePath = pathname === '/' \n ? join(clientRoot, '_data/index.json') \n : join(clientRoot, '_data', pathname + '.json') \n try { \n return c.json(JSON.parse(readFileSync(filePath, 'utf-8')))\n } catch { \n return c.json({ error: 'not found' }, 404)\n } \n }) \n }\n\n app.use('/*', serveStatic({ \n root: clientRoot,\n onFound: (_path, c) => { \n c.header('Cache-Control', _path.includes('/assets/') \n ? 'public, immutable, max-age=31536000'\n : 'no-cache') \n } \n })) \n \n if (runtimeConfig.output === 'static') {\n console.log('[devix] Static mode \u2014 serving pre-generated files from dist/client')\n } else { \n registerApiRoutes(app, { renderModule, apiModule, manifest })\n registerSsrRoute(app, { renderModule, apiModule, manifest, loaderTimeout: runtimeConfig.loaderTimeout })\n } \n \n const server = serve({ fetch: app.fetch, port, hostname: host }, (info) => \n console.log(\\`http://\\${info.address}:\\${info.port}\\`))\n\nprocess.on('SIGTERM', () => server.close())\nprocess.on('SIGINT', () => server.close())\n`\n}", "import {existsSync, mkdirSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync} from \"node:fs\";\nimport {join, relative} from \"node:path\";\nimport {parseSync} from \"oxc-parser\";\n\nfunction walkPages(dir: string, root: string): string[] {\n const entries: string[] = []\n for (const name of readdirSync(dir)) {\n const full = join(dir, name)\n if (statSync(full).isDirectory()) {\n entries.push(...walkPages(full, root))\n } else if (/\\.(ts|tsx)$/.test(name) && name !== 'layout.tsx' && name !== 'error.tsx') {\n entries.push(relative(root, full).replace(/\\\\/g, '/'))\n }\n }\n return entries\n}\n\nexport function hasLoaderExport(code: string, filePath: string): boolean {\n const ast = parseSync(filePath, code, {sourceType: 'module'})\n for (const node of ast.program.body) {\n if (node.type !== 'ExportNamedDeclaration') continue\n const decl = node.declaration\n if (decl?.type === 'FunctionDeclaration' && decl.id?.name === 'loader') return true\n if (decl?.type === 'VariableDeclaration') {\n for (const d of decl.declarations) {\n if (d.id.type === 'Identifier' && d.id.name === 'loader') return true\n }\n }\n for (const spec of (node.specifiers ?? [])) {\n if (spec.exported.type === 'Identifier' && spec.exported.name === 'loader') return true\n }\n }\n return false\n}\n\nexport function generatePageTypesDts(importPath: string, withLoader: boolean): string {\n if (!withLoader) {\n return '// auto-generado por devix - no editar\\nexport type PageData = undefined\\nexport type PageParams = Record<string, string>\\n'\n }\n return `// auto-generado por devix \u2014 no editar\\nimport type { loader } from \"${importPath}\"\\nimport type { Redirect } from \"@devlusoft/devix\"\\n\\nexport type PageData = Exclude<\\n Awaited<ReturnType<NonNullable<typeof loader>>>,\\n Redirect | void | undefined\\n>\\nexport type PageParams = NonNullable<Parameters<typeof loader>[0]>[\"params\"]\\n`\n}\n\nexport function writePageTypes(pageRelPath: string, root: string): void {\n const fullPath = join(root, pageRelPath)\n const code = readFileSync(fullPath, 'utf-8')\n const withLoader = hasLoaderExport(code, fullPath)\n\n const typesDir = join(root, '.devix', 'pages', pageRelPath.replace(/\\.(tsx?|jsx?)$/, ''))\n const outPath = join(typesDir, '$types.d.ts')\n\n const pageAbsNoExt = fullPath.replace(/\\.(tsx?|jsx?)$/, '')\n const importPath = relative(typesDir, pageAbsNoExt).replace(/\\\\/g, '/')\n\n const content = generatePageTypesDts(importPath, withLoader)\n\n if (existsSync(outPath) && readFileSync(outPath, 'utf-8') === content) return\n\n mkdirSync(typesDir, {recursive: true})\n writeFileSync(outPath, content, 'utf-8')\n}\n\nexport function deletePageTypes(pageRelPath: string, root: string): void {\n const typesDir = join(root, '.devix', 'pages', pageRelPath.replace(/\\.(tsx?|jsx?)$/, ''))\n const outPath = join(typesDir, '$types.d.ts')\n if (existsSync(outPath)) rmSync(outPath)\n}\n\nexport function scanAndWritePageTypes(appDir: string, root: string): void {\n const pagesDir = join(root, appDir, 'pages')\n let files: string[]\n try {\n files = walkPages(pagesDir, root)\n } catch {\n return\n }\n for (const file of files) {\n try {\n writePageTypes(file, root)\n } catch {\n /* ignorar archivos no procesables */\n }\n }\n}", "import type {Hono} from 'hono'\nimport type {Manifest} from 'vite'\n\ninterface ServerOptions {\n renderModule: any\n apiModule: any\n manifest?: Manifest\n loaderTimeout?: number\n}\n\nexport function registerApiRoutes(app: Hono, {apiModule, renderModule, loaderTimeout}: ServerOptions) {\n app.all('/api/*', async (c) => {\n try {\n return await apiModule.handleApiRequest(c.req.url, c.req.raw)\n } catch (e) {\n console.error(e)\n return c.json({error: 'internal error'}, 500)\n }\n })\n\n app.get('/_data/*', async (c) => {\n try {\n const {pathname, search} = new URL(c.req.url, 'http://localhost')\n const url = pathname.replace(/^\\/_data/, '') + search\n\n const data = await renderModule.runLoader(url, c.req.raw, {loaderTimeout})\n if (data.error) return c.json({error: 'internal error'}, 500)\n if ('loaderError' in data) {\n const {statusCode, message, data: errorData} = data.loaderError\n return c.json({statusCode, message, data: errorData}, statusCode)\n }\n return c.json(data)\n } catch (e) {\n console.error(e)\n return c.json({error: 'internal error'}, 500)\n }\n })\n}\n\nexport function registerSsrRoute(app: Hono, {renderModule, manifest, loaderTimeout}: ServerOptions) {\n app.get('*', async (c) => {\n try {\n const {html, statusCode, headers} = await renderModule.render(c.req.url, c.req.raw, {manifest, loaderTimeout})\n const res = c.html(`<!DOCTYPE html>${html}`, statusCode)\n for (const [key, value] of Object.entries(headers as Record<string, string>)) {\n res.headers.set(key, value)\n }\n return res\n } catch (e) {\n console.error(e)\n return c.text('Internal Server Error', 500)\n }\n })\n}", "import pc from 'picocolors'\nimport {networkInterfaces} from 'node:os'\n\ndeclare const __DEVIX_VERSION__: string\n\nfunction getNetworkUrl(port: number): string | null {\n const nets = networkInterfaces()\n for (const interfaces of Object.values(nets)) {\n for (const net of interfaces ?? []) {\n if (net.family === 'IPv4' && !net.internal) {\n return `http://${net.address}:${port}/`\n }\n }\n }\n return null\n}\n\nexport function printDevBanner(port: number) {\n const version = __DEVIX_VERSION__\n const networkUrl = getNetworkUrl(port)\n\n console.log()\n console.log(` ${pc.bold(pc.yellow('devix'))} ${pc.dim(`v${version}`)}`)\n console.log()\n console.log(` ${pc.green('\u279C')} ${pc.bold('Local:')} ${pc.cyan(`http://localhost:${port}/`)}`)\n if (networkUrl) {\n console.log(` ${pc.green('\u279C')} ${pc.bold('Network:')} ${pc.cyan(networkUrl)}`)\n } else {\n console.log(` ${pc.green('\u279C')} ${pc.bold('Network:')} ${pc.dim('use --host to expose')}`)\n }\n console.log()\n}", "import type {ViteDevServer} from 'vite'\n\nexport async function collectCss(vite: ViteDevServer): Promise<string[]> {\n const cssUrls = new Set<string>()\n\n for (const [, mod] of vite.moduleGraph.idToModuleMap) {\n if (!mod.id) continue\n if ((mod.id.endsWith('.css') || mod.id.includes('.css?')) && mod.url.startsWith('/')) {\n cssUrls.add(mod.url)\n }\n }\n\n return [...cssUrls]\n}", "export function parseDuration(value: number | string): number {\n if (typeof value === 'number') return value\n const match = value.trim().match(/^(\\d+(?:\\.\\d+)?)\\s*(ms|s|m|h)?$/)\n if (!match) throw new Error(`[devix] Invalid duration: \"${value}\". Use a number (ms) or a string like \"5s\", \"2m\", \"500ms\".`)\n const n = parseFloat(match[1])\n switch (match[2]) {\n case 'h': return n * 3_600_000\n case 'm': return n * 60_000\n case 's': return n * 1_000\n case 'ms':\n default: return n\n }\n}\n", "import {loadEnv} from 'vite'\n\nexport function loadDotenv(mode: string) {\n const env = loadEnv(mode, process.cwd(), '')\n for (const [key, value] of Object.entries(env)) {\n if (process.env[key] === undefined) {\n process.env[key] = value\n }\n }\n}\n", "import {build} from 'esbuild'\nimport type {DevixConfig} from \"../config\"\nimport {join} from \"node:path\"\nimport {unlinkSync, writeFileSync} from \"node:fs\";\nimport {pathToFileURL} from \"node:url\";\n\nexport async function loadConfig(cwd: string): Promise<DevixConfig> {\n const result = await build({\n entryPoints: [join(cwd, 'devix.config.ts')],\n bundle: true,\n write: false,\n format: 'esm',\n platform: 'node',\n packages: 'external',\n })\n\n const tmpFile = join(cwd, `.devix-config-${Date.now()}.mjs`)\n writeFileSync(tmpFile, result.outputFiles[0].text)\n\n try {\n const mod = await import(pathToFileURL(tmpFile).href)\n return mod.default\n } finally {\n unlinkSync(tmpFile)\n }\n}"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["createServer", "createViteServer", "getRequestListener", "Hono", "mergeConfig", "react", "fileURLToPath", "dirname", "relative", "resolve", "createRequire", "generateEntryClient", "cssUrls", "u", "generateClientRoutes", "pagesDir", "matcherPath", "generateRender", "pagesDir", "renderPath", "generateApi", "apiPath", "appDir", "generateContext", "readFileSync", "readdirSync", "statSync", "join", "relative", "METHOD_EXPORT_RE", "stripComments", "content", "extractHttpMethods", "found", "match", "routePattern", "rel", "keyToRoutePattern", "key", "apiDir", "rel", "pattern", "routePattern", "filePathToIdentifier", "filePath", "apiDir", "buildRouteEntry", "methods", "keyToRoutePattern", "generateRoutesDts", "entries", "imports", "e", "importPath", "routeLines", "m", "walkDir", "dir", "root", "entries", "name", "readdirSync", "full", "join", "statSync", "relative", "scanApiFiles", "appDir", "projectRoot", "apiDir", "files", "f", "filePath", "content", "readFileSync", "methods", "extractHttpMethods", "buildRouteEntry", "mkdirSync", "readFileSync", "writeFileSync", "existsSync", "join", "writeRoutesDts", "content", "projectRoot", "devixDir", "outPath", "parseSync", "generateServerEntry", "routesPath", "envPath", "honoServerPath", "honoServerStaticPath", "honoPath", "existsSync", "mkdirSync", "readdirSync", "readFileSync", "rmSync", "statSync", "writeFileSync", "join", "relative", "parseSync", "walkPages", "dir", "root", "entries", "name", "full", "hasLoaderExport", "code", "filePath", "ast", "node", "decl", "d", "spec", "generatePageTypesDts", "importPath", "withLoader", "writePageTypes", "pageRelPath", "fullPath", "typesDir", "outPath", "pageAbsNoExt", "content", "deletePageTypes", "scanAndWritePageTypes", "appDir", "pagesDir", "files", "file", "__dirname", "dirname", "fileURLToPath", "VIRTUAL_ENTRY_CLIENT", "VIRTUAL_CLIENT_ROUTES", "VIRTUAL_RENDER", "VIRTUAL_API", "VIRTUAL_CONTEXT", "VIRTUAL_SERVER_ENTRY", "SERVER_EXPORTS", "devix", "config", "appDir", "pagesDir", "cssUrls", "u", "renderPath", "resolve", "apiPath", "matcherPath", "routesPath", "envPath", "_require", "createRequire", "honoServerPath", "honoServerStaticPath", "honoPath", "virtualPlugin", "id", "generateEntryClient", "generateClientRoutes", "generateRender", "generateApi", "generateContext", "generateServerEntry", "code", "options", "resolvedPagesDir", "ast", "parseSync", "replacements", "node", "decl", "seen", "declarator", "a", "b", "result", "start", "end", "name", "root", "entries", "scanApiFiles", "writeRoutesDts", "generateRoutesDts", "scanAndWritePageTypes", "server", "regenerateDts", "isPageFile", "file", "pageRelPath", "relative", "invalidateVirtualModule", "mod", "writePageTypes", "deletePageTypes", "base", "react", "mergeConfig", "registerApiRoutes", "app", "apiModule", "renderModule", "loaderTimeout", "c", "e", "pathname", "search", "url", "data", "statusCode", "message", "errorData", "pc", "networkInterfaces", "getNetworkUrl", "port", "nets", "interfaces", "net", "printDevBanner", "version", "networkUrl", "collectCss", "vite", "cssUrls", "mod", "parseDuration", "value", "match", "n", "loadEnv", "loadDotenv", "mode", "env", "key", "value", "build", "join", "unlinkSync", "writeFileSync", "pathToFileURL", "loadConfig", "cwd", "result", "tmpFile", "loadDotenv", "VIRTUAL_RENDER", "VIRTUAL_API", "config", "loadConfig", "port", "host", "vite", "createViteServer", "devix", "renderModule", "args", "apiModule", "app", "Hono", "registerApiRoutes", "c", "html", "statusCode", "headers", "parseDuration", "cssLinks", "collectCss", "url", "htmlWithCss", "transformed", "res", "key", "value", "e", "honoHandler", "getRequestListener", "createServer", "req", "resolve", "printDevBanner"]
|
|
7
7
|
}
|
package/dist/cli/index.js
CHANGED
|
@@ -257,7 +257,7 @@ export type PageParams = NonNullable<Parameters<typeof loader>[0]>["params"]
|
|
|
257
257
|
`:`// auto-generado por devix - no editar
|
|
258
258
|
export type PageData = undefined
|
|
259
259
|
export type PageParams = Record<string, string>
|
|
260
|
-
`}function O(e,t){let r=y(t,e),n=be(r,"utf-8"),o=$t(n,r),a=y(t,".devix","pages",e.replace(/\.(tsx?|jsx?)$/,"")),d=y(a,"$types.d.ts"),x=r.replace(/\.(tsx?|jsx?)$/,""),m=Ce(a,x).replace(/\\/g,"/"),f=bt(m,o);De(d)&&be(d,"utf-8")===f||(wt(a,{recursive:!0}),Pt(d,f,"utf-8"))}function Oe(e,t){let r=y(t,".devix","pages",e.replace(/\.(tsx?|jsx?)$/,"")),n=y(r,"$types.d.ts");De(n)&&St(n)}function H(e,t){let r=y(t,e,"pages"),n;try{n=Ae(r,t)}catch{return}for(let o of n)try{O(o,t)}catch{}}var je=c(()=>{"use strict"});import{mergeConfig as Dt}from"vite";import Ct from"@vitejs/plugin-react";import{fileURLToPath as At}from"node:url";import{dirname as Ot,relative as jt,resolve as p}from"node:path";import{createRequire as Mt}from"node:module";import{parseSync as Ft}from"oxc-parser";function Fe(e){let t=e.appDir??"app",r=`${t}/pages`,n=(e.css??[]).map(i=>i.startsWith("/")?i:`/${i.replace(/^\.\//,"")}`),o=p(P,"../server/render.js").replace(/\\/g,"/"),a=p(P,"../server/api.js").replace(/\\/g,"/"),d=p(P,"../runtime/client-router.js").replace(/\\/g,"/"),x=p(P,"../server/routes.js").replace(/\\/g,"/"),m=p(P,"../utils/env.js").replace(/\\/g,"/"),f=Mt(import.meta.url),w=f.resolve("@hono/node-server").replace(/\\/g,"/"),M=f.resolve("@hono/node-server/serve-static").replace(/\\/g,"/"),tt=f.resolve("hono").replace(/\\/g,"/"),rt={name:"devix",enforce:"pre",resolveId(i){if(i===q)return`\0${q}`;if(i===V)return`\0${V}`;if(i===T)return`\0${T}`;if(i===$)return`\0${$}`;if(i===J)return`\0${J}`;if(i===W)return`\0${W}`},load(i){if(i===`\0${q}`)return ie({cssUrls:n});if(i===`\0${V}`)return ae({pagesDir:r,matcherPath:d});if(i===`\0${T}`)return le({pagesDir:r,renderPath:o});if(i===`\0${$}`)return de({apiPath:a,appDir:t});if(i===`\0${J}`)return me();if(i===`\0${W}`)return Te({routesPath:x,envPath:m,honoServerPath:w,honoServerStaticPath:M,honoPath:tt})},transform(i,l,_){if(_?.ssr)return;let S=p(process.cwd(),r);if(!l.startsWith(S))return;let E=Ft(l,i,{sourceType:"module"}),g=[];for(let u of E.program.body){if(u.type!=="ExportNamedDeclaration"||!u.declaration)continue;let h=u.declaration;if(h.type==="FunctionDeclaration"&&h.id&&Me.has(h.id.name)&&g.push({start:u.start,end:u.end,name:h.id.name}),h.type==="VariableDeclaration"){let A=new Set;for(let F of h.declarations)F.id.type==="Identifier"&&Me.has(F.id.name)&&(A.has(u.start)||(A.add(u.start),g.push({start:u.start,end:u.end,name:F.id.name})))}}if(g.length===0)return;g.sort((u,h)=>h.start-u.start);let s=i;for(let{start:u,end:h,name:A}of g)s=s.slice(0,u)+`export const ${A} = undefined`+s.slice(h);return{code:s,map:null}},buildStart(){let i=process.cwd(),l=k(t,i);N(I(l,`${t}/api`),i),H(t,i)},configureServer(i){let l=process.cwd();H(t,l);let _=()=>{let s=k(t,l);N(I(s,`${t}/api`),l)},S=s=>s.startsWith(p(l,r))&&!s.endsWith("layout.tsx")&&!s.endsWith("error.tsx"),E=s=>jt(l,s).replace(/\\/g,"/"),g=s=>{let u=i.moduleGraph.getModuleById(`\0${s}`);u&&i.moduleGraph.invalidateModule(u)};i.watcher.add(p(l,"devix.config.ts")),i.watcher.on("change",s=>{s===p(l,"devix.config.ts")&&(console.log("[devix] Config changed, restarting..."),process.exit(75))}),i.watcher.on("add",s=>{s.startsWith(p(l,r))&&g(T),S(s)&&O(E(s),l),s.includes(`${t}/api`)&&(g($),_())}),i.watcher.on("unlink",s=>{s.startsWith(p(l,r))&&g(T),S(s)&&Oe(E(s),l),s.includes(`${t}/api`)&&(g($),_())}),i.watcher.on("change",s=>{S(s)&&O(E(s),l),s.includes(`${t}/api`)&&!s.endsWith("middleware.ts")&&_()})}},ot={plugins:[Ct(),rt],publicDir:p(process.cwd(),e.publicDir??"public"),ssr:{noExternal:["@devlusoft/devix"]},...e.envPrefix?{envPrefix:e.envPrefix}:{}};return Dt(ot,e.vite??{})}var P,q,V,T,$,J,W,Me,Ie=c(()=>{"use strict";se();ce();ue();pe();fe();Se();L();Pe();$e();je();P=Ot(At(import.meta.url)),q="virtual:devix/entry-client",V="virtual:devix/client-routes",T="virtual:devix/render",$="virtual:devix/api",J="virtual:devix/context",W="virtual:devix/server-entry",Me=new Set(["loader","guard","generateStaticParams","headers"])});function Le(e){if(typeof e=="number")return e;let t=e.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h)?$/);if(!t)throw new Error(`[devix] Invalid duration: "${e}". Use a number (ms) or a string like "5s", "2m", "500ms".`);let r=parseFloat(t[1]);switch(t[2]){case"h":return r*36e5;case"m":return r*6e4;case"s":return r*1e3;default:return r}}var Ue=c(()=>{"use strict"});import{build as It}from"esbuild";import{join as ke}from"node:path";import{unlinkSync as Lt,writeFileSync as Ut}from"node:fs";import{pathToFileURL as kt}from"node:url";async function j(e){let t=await It({entryPoints:[ke(e,"devix.config.ts")],bundle:!0,write:!1,format:"esm",platform:"node",packages:"external"}),r=ke(e,`.devix-config-${Date.now()}.mjs`);Ut(r,t.outputFiles[0].text);try{return(await import(kt(r).href)).default}finally{Lt(r)}}var B=c(()=>{"use strict"});var Ne={};import{writeFileSync as Nt}from"node:fs";import{resolve as Ht}from"node:path";import{build as G}from"vite";var b,X,qt,Y=c(async()=>{"use strict";Ie();Ue();B();b=await j(process.cwd()),X=Fe(b);await G({...X,configFile:!1,build:{outDir:"dist/client",manifest:!0,rolldownOptions:{input:"virtual:devix/entry-client"}}});await G({...X,configFile:!1,build:{ssr:!0,outDir:"dist/server",copyPublicDir:!1,rolldownOptions:{input:{render:"virtual:devix/render",api:"virtual:devix/api"}}}});await G({...X,configFile:!1,build:{ssr:!0,outDir:"dist/server",emptyOutDir:!1,copyPublicDir:!1,rolldownOptions:{input:{index:"virtual:devix/server-entry"}}}});qt={port:b.port??3e3,host:b.host??!1,loaderTimeout:Le(b.loaderTimeout??1e4),output:b.output??"server"};Nt(Ht(process.cwd(),"dist/devix.config.json"),JSON.stringify(qt,null,2),"utf-8")});var Gt={};import{readFileSync as Vt,mkdirSync as He,writeFileSync as qe,rmSync as Jt}from"node:fs";import{resolve as K,join as R}from"node:path";import{pathToFileURL as Wt}from"node:url";var Je,Bt,z,Ve,Z,We=c(async()=>{"use strict";B();Je=await j(process.cwd());Je.output!=="static"&&console.warn('[devix] Tip: set output: "static" in devix.config.ts to skip the SSR server at runtime.');await Y().then(()=>Ne);Bt=Date.now(),z=await import(Wt(K(process.cwd(),"dist/server/render.js")).href+`?t=${Bt}`),Ve=JSON.parse(Vt(K(process.cwd(),"dist/client/.vite/manifest.json"),"utf-8")),Z=await z.getStaticRoutes();console.log(`[devix] Generating ${Z.length} static page${Z.length===1?"":"s"}...`);for(let e of Z){let t=`http://localhost${e}`,{html:r,statusCode:n}=await z.render(t,new Request(t),{manifest:Ve});if(n!==200){console.warn(`[devix] Skipping ${e} \u2014 status ${n}`);continue}let o=e==="/"?R(process.cwd(),"dist/client/index.html"):R(process.cwd(),"dist/client",e,"index.html");He(R(o,".."),{recursive:!0}),qe(o,`<!DOCTYPE html>${r}`,"utf-8");let a=await z.runLoader(t,new Request(t),{manifest:Ve}),d=e==="/"?R(process.cwd(),"dist/client/_data/index.json"):R(process.cwd(),"dist/client/_data",`${e}.json`);He(R(d,".."),{recursive:!0}),qe(d,JSON.stringify(a),"utf-8"),console.log(` \u2713 ${e}`)}console.log("[devix] Generation complete.");Je.output==="static"&&(Jt(K(process.cwd(),"dist/server"),{recursive:!0,force:!0}),console.log("[devix] Removed dist/server (not needed in static mode)"))});function Be(e,{apiModule:t,renderModule:r,loaderTimeout:n}){e.all("/api/*",async o=>{try{return await t.handleApiRequest(o.req.url,o.req.raw)}catch(a){return console.error(a),o.json({error:"internal error"},500)}}),e.get("/_data/*",async o=>{try{let{pathname:a,search:d}=new URL(o.req.url,"http://localhost"),x=a.replace(/^\/_data/,"")+d,m=await r.runLoader(x,o.req.raw,{loaderTimeout:n});if(m.error)return o.json({error:"internal error"},500);if("loaderError"in m){let{statusCode:f,message:w,data:M}=m.loaderError;return o.json({statusCode:f,message:w,data:M},f)}return o.json(m)}catch(a){return console.error(a),o.json({error:"internal error"},500)}})}function Ge(e,{renderModule:t,manifest:r,loaderTimeout:n}){e.get("*",async o=>{try{let{html:a,statusCode:d,headers:x}=await t.render(o.req.url,o.req.raw,{manifest:r,loaderTimeout:n}),m=o.html(`<!DOCTYPE html>${a}`,d);for(let[f,w]of Object.entries(x))m.headers.set(f,w);return m}catch(a){return console.error(a),o.text("Internal Server Error",500)}})}var Xe=c(()=>{"use strict"});import{loadEnv as Xt}from"vite";function Ye(e){let t=Xt(e,process.cwd(),"");for(let[r,n]of Object.entries(t))process.env[r]===void 0&&(process.env[r]=n)}var ze=c(()=>{"use strict"});var er={};import{readFileSync as Q}from"node:fs";import{serve as Yt}from"@hono/node-server";import{serveStatic as zt}from"@hono/node-server/serve-static";import{Hono as Zt}from"hono";import{resolve as Ze,join as D}from"node:path";import{pathToFileURL as Ke}from"node:url";var ee,te,re,v,Kt,Qt,C,oe,Qe=c(async()=>{"use strict";Xe();ze();Ye("production");try{v=JSON.parse(Q(D(process.cwd(),"dist/devix.config.json"),"utf-8")),v.output!=="static"&&(ee=await import(Ke(Ze(process.cwd(),"dist/server/render.js")).href),te=await import(Ke(Ze(process.cwd(),"dist/server/api.js")).href)),re=JSON.parse(Q(D(process.cwd(),"dist/client/.vite/manifest.json"),"utf-8"))}catch{console.error('[devix] Build not found. Run "devix build" first.'),process.exit(1)}Kt=Number(process.env.PORT)||v.port||3e3,Qt=typeof v.host=="string"?v.host:v.host?"0.0.0.0":process.env.HOST||"0.0.0.0",C=new Zt,oe=D(process.cwd(),"dist/client");v.output==="static"&&C.get("/_data/*",e=>{let t=e.req.path.replace(/^\/_data/,"")||"/",r=t==="/"?D(oe,"_data/index.json"):D(oe,"_data",`${t}.json`);try{let n=Q(r,"utf-8");return e.json(JSON.parse(n))}catch{return e.json({error:"not found"},404)}});C.use("/*",zt({root:oe,onFound:(e,t)=>{t.header("Cache-Control",e.includes("/assets/")?"public, immutable, max-age=31536000":"no-cache")}}));v.output==="static"?console.log("[devix] Static mode \u2014 serving pre-generated files from dist/client"):(Be(C,{renderModule:ee,apiModule:te,manifest:re}),Ge(C,{renderModule:ee,apiModule:te,manifest:re,loaderTimeout:v.loaderTimeout}));Yt({fetch:C.fetch,port:Kt,hostname:Qt},e=>console.log(`http://${e.address}:${e.port}`))});var et=process.argv[2];switch(et){case"dev":await Promise.resolve().then(()=>(ne(),lt));break;case"build":await Y().then(()=>Ne);break;case"generate":await We().then(()=>Gt);break;case"start":await Qe().then(()=>er);break;case"--version":case"-v":{console.log("0.4.1");break}case"--help":case"-h":console.log(`
|
|
260
|
+
`}function O(e,t){let r=y(t,e),n=be(r,"utf-8"),o=$t(n,r),a=y(t,".devix","pages",e.replace(/\.(tsx?|jsx?)$/,"")),d=y(a,"$types.d.ts"),x=r.replace(/\.(tsx?|jsx?)$/,""),m=Ce(a,x).replace(/\\/g,"/"),f=bt(m,o);De(d)&&be(d,"utf-8")===f||(wt(a,{recursive:!0}),Pt(d,f,"utf-8"))}function Oe(e,t){let r=y(t,".devix","pages",e.replace(/\.(tsx?|jsx?)$/,"")),n=y(r,"$types.d.ts");De(n)&&St(n)}function H(e,t){let r=y(t,e,"pages"),n;try{n=Ae(r,t)}catch{return}for(let o of n)try{O(o,t)}catch{}}var je=c(()=>{"use strict"});import{mergeConfig as Dt}from"vite";import Ct from"@vitejs/plugin-react";import{fileURLToPath as At}from"node:url";import{dirname as Ot,relative as jt,resolve as p}from"node:path";import{createRequire as Mt}from"node:module";import{parseSync as Ft}from"oxc-parser";function Fe(e){let t=e.appDir??"app",r=`${t}/pages`,n=(e.css??[]).map(i=>i.startsWith("/")?i:`/${i.replace(/^\.\//,"")}`),o=p(P,"../server/render.js").replace(/\\/g,"/"),a=p(P,"../server/api.js").replace(/\\/g,"/"),d=p(P,"../runtime/client-router.js").replace(/\\/g,"/"),x=p(P,"../server/routes.js").replace(/\\/g,"/"),m=p(P,"../utils/env.js").replace(/\\/g,"/"),f=Mt(import.meta.url),w=f.resolve("@hono/node-server").replace(/\\/g,"/"),M=f.resolve("@hono/node-server/serve-static").replace(/\\/g,"/"),tt=f.resolve("hono").replace(/\\/g,"/"),rt={name:"devix",enforce:"pre",resolveId(i){if(i===q)return`\0${q}`;if(i===V)return`\0${V}`;if(i===T)return`\0${T}`;if(i===$)return`\0${$}`;if(i===J)return`\0${J}`;if(i===W)return`\0${W}`},load(i){if(i===`\0${q}`)return ie({cssUrls:n});if(i===`\0${V}`)return ae({pagesDir:r,matcherPath:d});if(i===`\0${T}`)return le({pagesDir:r,renderPath:o});if(i===`\0${$}`)return de({apiPath:a,appDir:t});if(i===`\0${J}`)return me();if(i===`\0${W}`)return Te({routesPath:x,envPath:m,honoServerPath:w,honoServerStaticPath:M,honoPath:tt})},transform(i,l,_){if(_?.ssr)return;let S=p(process.cwd(),r);if(!l.startsWith(S))return;let E=Ft(l,i,{sourceType:"module"}),g=[];for(let u of E.program.body){if(u.type!=="ExportNamedDeclaration"||!u.declaration)continue;let h=u.declaration;if(h.type==="FunctionDeclaration"&&h.id&&Me.has(h.id.name)&&g.push({start:u.start,end:u.end,name:h.id.name}),h.type==="VariableDeclaration"){let A=new Set;for(let F of h.declarations)F.id.type==="Identifier"&&Me.has(F.id.name)&&(A.has(u.start)||(A.add(u.start),g.push({start:u.start,end:u.end,name:F.id.name})))}}if(g.length===0)return;g.sort((u,h)=>h.start-u.start);let s=i;for(let{start:u,end:h,name:A}of g)s=s.slice(0,u)+`export const ${A} = undefined`+s.slice(h);return{code:s,map:null}},buildStart(){let i=process.cwd(),l=k(t,i);N(I(l,`${t}/api`),i),H(t,i)},configureServer(i){let l=process.cwd();H(t,l);let _=()=>{let s=k(t,l);N(I(s,`${t}/api`),l)},S=s=>s.startsWith(p(l,r))&&!s.endsWith("layout.tsx")&&!s.endsWith("error.tsx"),E=s=>jt(l,s).replace(/\\/g,"/"),g=s=>{let u=i.moduleGraph.getModuleById(`\0${s}`);u&&i.moduleGraph.invalidateModule(u)};i.watcher.add(p(l,"devix.config.ts")),i.watcher.on("change",s=>{s===p(l,"devix.config.ts")&&(console.log("[devix] Config changed, restarting..."),process.exit(75))}),i.watcher.on("add",s=>{s.startsWith(p(l,r))&&g(T),S(s)&&O(E(s),l),s.includes(`${t}/api`)&&(g($),_())}),i.watcher.on("unlink",s=>{s.startsWith(p(l,r))&&g(T),S(s)&&Oe(E(s),l),s.includes(`${t}/api`)&&(g($),_())}),i.watcher.on("change",s=>{S(s)&&O(E(s),l),s.includes(`${t}/api`)&&!s.endsWith("middleware.ts")&&_()})}},ot={plugins:[Ct(),rt],publicDir:p(process.cwd(),e.publicDir??"public"),ssr:{noExternal:["@devlusoft/devix"]},...e.envPrefix?{envPrefix:e.envPrefix}:{}};return Dt(ot,e.vite??{})}var P,q,V,T,$,J,W,Me,Ie=c(()=>{"use strict";se();ce();ue();pe();fe();Se();L();Pe();$e();je();P=Ot(At(import.meta.url)),q="virtual:devix/entry-client",V="virtual:devix/client-routes",T="virtual:devix/render",$="virtual:devix/api",J="virtual:devix/context",W="virtual:devix/server-entry",Me=new Set(["loader","guard","generateStaticParams","headers"])});function Le(e){if(typeof e=="number")return e;let t=e.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h)?$/);if(!t)throw new Error(`[devix] Invalid duration: "${e}". Use a number (ms) or a string like "5s", "2m", "500ms".`);let r=parseFloat(t[1]);switch(t[2]){case"h":return r*36e5;case"m":return r*6e4;case"s":return r*1e3;default:return r}}var Ue=c(()=>{"use strict"});import{build as It}from"esbuild";import{join as ke}from"node:path";import{unlinkSync as Lt,writeFileSync as Ut}from"node:fs";import{pathToFileURL as kt}from"node:url";async function j(e){let t=await It({entryPoints:[ke(e,"devix.config.ts")],bundle:!0,write:!1,format:"esm",platform:"node",packages:"external"}),r=ke(e,`.devix-config-${Date.now()}.mjs`);Ut(r,t.outputFiles[0].text);try{return(await import(kt(r).href)).default}finally{Lt(r)}}var B=c(()=>{"use strict"});var Ne={};import{writeFileSync as Nt}from"node:fs";import{resolve as Ht}from"node:path";import{build as G}from"vite";var b,X,qt,Y=c(async()=>{"use strict";Ie();Ue();B();b=await j(process.cwd()),X=Fe(b);await G({...X,configFile:!1,build:{outDir:"dist/client",manifest:!0,rolldownOptions:{input:"virtual:devix/entry-client"}}});await G({...X,configFile:!1,build:{ssr:!0,outDir:"dist/server",copyPublicDir:!1,rolldownOptions:{input:{render:"virtual:devix/render",api:"virtual:devix/api"}}}});await G({...X,configFile:!1,build:{ssr:!0,outDir:"dist/server",emptyOutDir:!1,copyPublicDir:!1,rolldownOptions:{input:{index:"virtual:devix/server-entry"}}}});qt={port:b.port??3e3,host:b.host??!1,loaderTimeout:Le(b.loaderTimeout??1e4),output:b.output??"server"};Nt(Ht(process.cwd(),"dist/devix.config.json"),JSON.stringify(qt,null,2),"utf-8")});var Gt={};import{readFileSync as Vt,mkdirSync as He,writeFileSync as qe,rmSync as Jt}from"node:fs";import{resolve as K,join as R}from"node:path";import{pathToFileURL as Wt}from"node:url";var Je,Bt,z,Ve,Z,We=c(async()=>{"use strict";B();Je=await j(process.cwd());Je.output!=="static"&&console.warn('[devix] Tip: set output: "static" in devix.config.ts to skip the SSR server at runtime.');await Y().then(()=>Ne);Bt=Date.now(),z=await import(Wt(K(process.cwd(),"dist/server/render.js")).href+`?t=${Bt}`),Ve=JSON.parse(Vt(K(process.cwd(),"dist/client/.vite/manifest.json"),"utf-8")),Z=await z.getStaticRoutes();console.log(`[devix] Generating ${Z.length} static page${Z.length===1?"":"s"}...`);for(let e of Z){let t=`http://localhost${e}`,{html:r,statusCode:n}=await z.render(t,new Request(t),{manifest:Ve});if(n!==200){console.warn(`[devix] Skipping ${e} \u2014 status ${n}`);continue}let o=e==="/"?R(process.cwd(),"dist/client/index.html"):R(process.cwd(),"dist/client",e,"index.html");He(R(o,".."),{recursive:!0}),qe(o,`<!DOCTYPE html>${r}`,"utf-8");let a=await z.runLoader(t,new Request(t),{manifest:Ve}),d=e==="/"?R(process.cwd(),"dist/client/_data/index.json"):R(process.cwd(),"dist/client/_data",`${e}.json`);He(R(d,".."),{recursive:!0}),qe(d,JSON.stringify(a),"utf-8"),console.log(` \u2713 ${e}`)}console.log("[devix] Generation complete.");Je.output==="static"&&(Jt(K(process.cwd(),"dist/server"),{recursive:!0,force:!0}),console.log("[devix] Removed dist/server (not needed in static mode)"))});function Be(e,{apiModule:t,renderModule:r,loaderTimeout:n}){e.all("/api/*",async o=>{try{return await t.handleApiRequest(o.req.url,o.req.raw)}catch(a){return console.error(a),o.json({error:"internal error"},500)}}),e.get("/_data/*",async o=>{try{let{pathname:a,search:d}=new URL(o.req.url,"http://localhost"),x=a.replace(/^\/_data/,"")+d,m=await r.runLoader(x,o.req.raw,{loaderTimeout:n});if(m.error)return o.json({error:"internal error"},500);if("loaderError"in m){let{statusCode:f,message:w,data:M}=m.loaderError;return o.json({statusCode:f,message:w,data:M},f)}return o.json(m)}catch(a){return console.error(a),o.json({error:"internal error"},500)}})}function Ge(e,{renderModule:t,manifest:r,loaderTimeout:n}){e.get("*",async o=>{try{let{html:a,statusCode:d,headers:x}=await t.render(o.req.url,o.req.raw,{manifest:r,loaderTimeout:n}),m=o.html(`<!DOCTYPE html>${a}`,d);for(let[f,w]of Object.entries(x))m.headers.set(f,w);return m}catch(a){return console.error(a),o.text("Internal Server Error",500)}})}var Xe=c(()=>{"use strict"});import{loadEnv as Xt}from"vite";function Ye(e){let t=Xt(e,process.cwd(),"");for(let[r,n]of Object.entries(t))process.env[r]===void 0&&(process.env[r]=n)}var ze=c(()=>{"use strict"});var er={};import{readFileSync as Q}from"node:fs";import{serve as Yt}from"@hono/node-server";import{serveStatic as zt}from"@hono/node-server/serve-static";import{Hono as Zt}from"hono";import{resolve as Ze,join as D}from"node:path";import{pathToFileURL as Ke}from"node:url";var ee,te,re,v,Kt,Qt,C,oe,Qe=c(async()=>{"use strict";Xe();ze();Ye("production");try{v=JSON.parse(Q(D(process.cwd(),"dist/devix.config.json"),"utf-8")),v.output!=="static"&&(ee=await import(Ke(Ze(process.cwd(),"dist/server/render.js")).href),te=await import(Ke(Ze(process.cwd(),"dist/server/api.js")).href)),re=JSON.parse(Q(D(process.cwd(),"dist/client/.vite/manifest.json"),"utf-8"))}catch{console.error('[devix] Build not found. Run "devix build" first.'),process.exit(1)}Kt=Number(process.env.PORT)||v.port||3e3,Qt=typeof v.host=="string"?v.host:v.host?"0.0.0.0":process.env.HOST||"0.0.0.0",C=new Zt,oe=D(process.cwd(),"dist/client");v.output==="static"&&C.get("/_data/*",e=>{let t=e.req.path.replace(/^\/_data/,"")||"/",r=t==="/"?D(oe,"_data/index.json"):D(oe,"_data",`${t}.json`);try{let n=Q(r,"utf-8");return e.json(JSON.parse(n))}catch{return e.json({error:"not found"},404)}});C.use("/*",zt({root:oe,onFound:(e,t)=>{t.header("Cache-Control",e.includes("/assets/")?"public, immutable, max-age=31536000":"no-cache")}}));v.output==="static"?console.log("[devix] Static mode \u2014 serving pre-generated files from dist/client"):(Be(C,{renderModule:ee,apiModule:te,manifest:re}),Ge(C,{renderModule:ee,apiModule:te,manifest:re,loaderTimeout:v.loaderTimeout}));Yt({fetch:C.fetch,port:Kt,hostname:Qt},e=>console.log(`http://${e.address}:${e.port}`))});var et=process.argv[2];switch(et){case"dev":await Promise.resolve().then(()=>(ne(),lt));break;case"build":await Y().then(()=>Ne);break;case"generate":await We().then(()=>Gt);break;case"start":await Qe().then(()=>er);break;case"--version":case"-v":{console.log("0.4.2-beta.1");break}case"--help":case"-h":console.log(`
|
|
261
261
|
devix \u2014 a lightweight SSR framework
|
|
262
262
|
|
|
263
263
|
Usage:
|
package/dist/cli/index.js.map
CHANGED
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/cli/dev.ts", "../../src/vite/codegen/entry-client.ts", "../../src/vite/codegen/client-routes.ts", "../../src/vite/codegen/render.ts", "../../src/vite/codegen/api.ts", "../../src/vite/codegen/context.ts", "../../src/vite/codegen/extract-methods.ts", "../../src/utils/patterns.ts", "../../src/server/api-router.ts", "../../src/vite/codegen/routes-dts.ts", "../../src/vite/codegen/scan-api.ts", "../../src/vite/codegen/write-routes-dts.ts", "../../src/vite/codegen/server-entry.ts", "../../src/vite/codegen/page-types.ts", "../../src/vite/index.ts", "../../src/utils/duration.ts", "../../src/utils/load-config.ts", "../../src/cli/build.ts", "../../src/cli/generate.ts", "../../src/server/routes.ts", "../../src/utils/env.ts", "../../src/cli/start.ts", "../../src/cli/index.ts"],
|
|
4
4
|
"sourcesContent": ["import { spawnSync } from 'node:child_process'\nimport { fileURLToPath } from 'node:url'\nimport { dirname, resolve } from 'node:path'\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\n\nwhile (true) {\n const result = spawnSync(process.execPath, [resolve(__dirname, 'dev-server.js')], {\n stdio: 'inherit',\n env: process.env,\n })\n if (result.status !== 75) break\n}\n\nexport { }", "interface EntryClientOptions {\n cssUrls: string[]\n}\n\nexport function generateEntryClient({ cssUrls }: EntryClientOptions): string {\n const cssImports = cssUrls.map(u => `import '${u}'`).join('\\n')\n\n return `\n${cssImports}\nimport \"@vitejs/plugin-react/preamble\"\nimport React from \"react\"\nimport {hydrateRoot, createRoot} from 'react-dom/client'\nimport {matchClientRoute, loadErrorPage, getDefaultErrorPage} from 'virtual:devix/client-routes'\nimport {RouterProvider} from '@devlusoft/devix'\n\nconst root = document.getElementById('devix-root')\n\nif (!window.__DEVIX__) {\n const ErrorPage = getDefaultErrorPage()\n createRoot(root).render(React.createElement(ErrorPage, {statusCode: 500, message: 'Server error'}))\n} else {\n const {metadata, viewport, clientEntry} = window.__DEVIX__\n const loaderData = window.__LOADER_DATA__\n const layoutsData = window.__LAYOUTS_DATA__ ?? []\n\n const matched = matchClientRoute(window.location.pathname)\n\n if (window.__LOADER_ERROR__) {\n const {statusCode, message, data} = window.__LOADER_ERROR__\n const ErrorPage = await loadErrorPage() ?? getDefaultErrorPage()\n createRoot(root).render(\n React.createElement(RouterProvider, {\n clientEntry,\n initialData: null,\n initialParams: {},\n initialPage: () => null,\n initialError: {statusCode, message, data},\n initialErrorPage: ErrorPage,\n })\n )\n } else if (matched) {\n const [pageMod, ...layoutMods] = await Promise.all([\n matched.load(),\n ...matched.loadLayouts.map(l => l()),\n ])\n hydrateRoot(\n root,\n React.createElement(RouterProvider, {\n clientEntry,\n initialData: loaderData,\n initialParams: matched.params,\n initialPage: pageMod.default,\n initialLayouts: layoutMods.map(m => m.default),\n initialLayoutsData: layoutsData,\n initialMeta: metadata,\n initialViewport: viewport,\n })\n )\n\n if (window.location.hash) { \n const id = window.location.hash.slice(1) \n const scrollBehavior = getComputedStyle(document.documentElement).scrollBehavior \n requestAnimationFrame(() => { \n document.getElementById(id)?.scrollIntoView({ behavior: scrollBehavior }) \n }) \n } \n } else {\n const ErrorPage = await loadErrorPage() ?? getDefaultErrorPage()\n createRoot(root).render(\n React.createElement(RouterProvider, {\n clientEntry,\n initialData: null,\n initialParams: {},\n initialPage: () => null,\n initialLayouts: [],\n initialLayoutsData: [],\n initialMeta: null,\n initialError: {statusCode: 404, message: 'Not found'},\n initialErrorPage: ErrorPage,\n })\n )\n }\n}\n`\n}", "interface ClientRoutesOptions {\n pagesDir: string\n matcherPath: string\n}\n\nexport function generateClientRoutes({pagesDir, matcherPath}: ClientRoutesOptions) {\n return `\nimport React from 'react'\nimport { createMatcher } from '${matcherPath}'\nconst pageFiles = import.meta.glob(['/${pagesDir}/**/*.tsx', '!**/error.tsx', '!**/layout.tsx'])\nconst layoutFiles = import.meta.glob('/${pagesDir}/**/layout.tsx')\nconst errorFiles = import.meta.glob('/${pagesDir}/**/error.tsx')\n\nexport const matchClientRoute = createMatcher(pageFiles, layoutFiles)\n\nexport async function loadErrorPage() {\n const key = Object.keys(errorFiles)[0]\n if (!key) return null\n const mod = await errorFiles[key]()\n return mod?.default ?? null\n}\n\nexport function getDefaultErrorPage() {\n return function DefaultError({ statusCode, message }) {\n return React.createElement('main', {\n style: { minHeight: '100dvh', display: 'flex', flexDirection: 'column', \n alignItems: 'center', justifyContent: 'center', gap: '8px',\n fontFamily: 'system-ui, sans-serif' }\n },\n React.createElement('h1', {style: {fontSize: '4rem', fontWeight: 700}}, statusCode),\n React.createElement('p', {style: {color: '#666'}}, message ?? 'An unexpected error occurred'),\n )\n }\n}\n`\n}", "interface RenderOptions {\n pagesDir: string\n renderPath: string\n}\n\nexport function generateRender({pagesDir, renderPath}: RenderOptions): string {\n return `\nimport { render as _render, runLoader as _runLoader, getStaticRoutes as _getStaticRoutes } from '${renderPath}'\n\nconst _pages = import.meta.glob(['/${pagesDir}/**/*.tsx', '!**/error.tsx', '!**/layout.tsx'])\nconst _layouts = import.meta.glob('/${pagesDir}/**/layout.tsx')\n\nconst _glob = {\n pages: _pages,\n layouts: _layouts,\n pagesDir: '/${pagesDir}',\n}\n\nexport function render(url, request, options) {\n return _render(url, request, _glob, options)\n}\n\nexport function runLoader(url, request, options) {\n return _runLoader(url, request, _glob, options)\n}\n\nexport function getStaticRoutes() {\n return _getStaticRoutes(_glob)\n}\n`\n}\n", "interface ApiOptions {\n apiPath: string\n appDir: string\n}\n\nexport function generateApi({apiPath, appDir}: ApiOptions): string {\n return `\nimport { handleApiRequest as _handleApiRequest } from '${apiPath}'\n\nconst _routes = import.meta.glob(['/${appDir}/api/**/*.ts', '!**/middleware.ts'])\nconst _middlewares = import.meta.glob('/${appDir}/api/**/middleware.ts')\n\nconst _glob = {\n routes: _routes,\n middlewares: _middlewares,\n apiDir: '/${appDir}/api',\n}\n\nexport function handleApiRequest(url, request) {\n return _handleApiRequest(url, request, _glob)\n}\n`\n}\n", "export function generateContext(): string {\n return `\nexport {RouterContext} from '@devlusoft/devix/runtime/context'\n`\n}", "const HTTP_METHODS = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'] as const\nexport type HttpMethod = (typeof HTTP_METHODS)[number]\n\nconst METHOD_EXPORT_RE = /export\\s+(?:const|async\\s+function|function)\\s+(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\\b/g\n\nfunction stripComments(content: string): string {\n return content\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, '')\n .replace(/\\/\\/.*$/gm, '')\n}\n\nexport function extractHttpMethods(content: string): HttpMethod[] {\n const found = new Set<HttpMethod>()\n for (const match of stripComments(content).matchAll(METHOD_EXPORT_RE)) {\n found.add(match[1] as HttpMethod)\n }\n return [...found]\n}\n", "export function routePattern(rel: string): string {\n return rel\n .replace(/\\.(tsx|ts|jsx|js)$/, '')\n .replace(/\\(.*?\\)\\//g, '')\n .replace(/^index$|\\/index$/, '')\n .replace(/\\[([^\\]]+)]/g, ':$1')\n || '/'\n}", "import {routePattern} from \"../utils/patterns\";\n\nexport interface ApiRoute {\n path: string\n key: string\n params: string[]\n regex: RegExp\n}\n\nexport interface ApiMiddleware {\n dir: string\n key: string\n}\n\nexport interface ApiResult {\n routes: ApiRoute[]\n middlewares: ApiMiddleware[]\n}\n\nexport function keyToRoutePattern(key: string, apiDir: string): string {\n const rel = key.slice(apiDir.length + 1).replace(/\\\\/g, '/')\n const pattern = routePattern(rel)\n return pattern === '/' ? '/api' : `/api/${pattern}`.replace('/api//', '/api/')\n}\n\nfunction keyToDir(key: string): string {\n return key.slice(0, key.lastIndexOf('/'))\n}\n\nexport function buildRoutes(routeKeys: string[], middlewareKeys: string[], apiDir: string): ApiResult {\n const routes: ApiRoute[] = []\n const middlewares: ApiMiddleware[] = []\n\n for (const key of middlewareKeys) {\n middlewares.push({dir: keyToDir(key), key})\n }\n\n for (const key of routeKeys) {\n const pattern = keyToRoutePattern(key, apiDir)\n const params = [...pattern.matchAll(/:([^/]+)/g)].map(m => m[1])\n const regexStr = pattern\n .replace(/:[^/]+/g, '([^/]+)')\n .replace(/\\//g, '\\\\/')\n routes.push({path: pattern, key, params, regex: new RegExp(`^${regexStr}$`)})\n }\n routes.sort((a, b) => {\n const aScore = (a.path.match(/:/g) || []).length\n const bScore = (b.path.match(/:/g) || []).length\n if (aScore !== bScore) return aScore - bScore\n return b.path.length - a.path.length\n })\n\n return {routes, middlewares}\n}\n\nexport function collectMiddlewareChain(routeKey: string, middlewares: ApiMiddleware[]): ApiMiddleware[] {\n const routeDir = keyToDir(routeKey)\n\n return middlewares\n .filter(mw => routeDir.startsWith(mw.dir))\n .sort((a, b) => a.dir.split('/').length - b.dir.split('/').length)\n}\n\nexport function matchRoute(\n pathname: string,\n routes: ApiRoute[]\n): { route: ApiRoute; params: Record<string, string> } | null {\n for (const route of routes) {\n const match = pathname.match(route.regex)\n if (match) {\n const params: Record<string, string> = {}\n route.params.forEach((name, i) => {\n params[name] = decodeURIComponent(match[i + 1])\n })\n return {route, params}\n }\n }\n return null\n}\n", "import { keyToRoutePattern } from '../../server/api-router'\nimport type { HttpMethod } from './extract-methods'\n\nexport interface RouteEntry {\n filePath: string\n urlPattern: string\n identifier: string\n methods: HttpMethod[]\n}\n\nexport function filePathToIdentifier(filePath: string, apiDir: string): string {\n return '_api_' + filePath\n .slice(`${apiDir}/`.length)\n .replace(/\\.(ts|tsx)$/, '')\n .replace(/[^a-zA-Z0-9]/g, '_')\n}\n\nexport function buildRouteEntry(filePath: string, apiDir: string, methods: HttpMethod[]): RouteEntry {\n return {\n filePath,\n urlPattern: keyToRoutePattern(filePath, apiDir),\n identifier: filePathToIdentifier(filePath, apiDir),\n methods,\n }\n}\n\nexport function generateRoutesDts(entries: RouteEntry[], apiDir: string): string {\n if (entries.length === 0) {\n return `// auto-generado por devix \u2014 no editar\\nexport {}\\ndeclare module '@devlusoft/devix' {\\n interface ApiRoutes {}\\n}\\n`\n }\n\n const imports = entries\n .map(e => {\n const importPath = '../' + e.filePath.replace(/\\.(ts|tsx)$/, '')\n return `import type * as ${e.identifier} from '${importPath}'`\n })\n .join('\\n')\n\n const routeLines = entries.flatMap(e =>\n e.methods.map(m =>\n ` '${m} ${e.urlPattern}': InferRoute<(typeof ${e.identifier})['${m}']>`\n )\n ).join('\\n')\n\n return `// auto-generado por devix \u2014 no editar\n${imports}\n\ntype JsonResponse<T, S extends number = number> = Response & { readonly __body: T; readonly __status: S }\ntype Is2xx<S extends number> = [number] extends [S] ? boolean : S extends 200 | 201 | 202 | 203 | 204 | 205 | 206 ? true : false\ntype UnwrapSuccessJson<T> = T extends JsonResponse<infer U, infer S> ? Is2xx<S> extends false ? never : U : never\ntype UnwrapErrorJson<T> = T extends JsonResponse<infer U, infer S> ? Is2xx<S> extends true ? never : U : never\ntype InferFnSuccess<T> = T extends (...args: any[]) => any ? UnwrapSuccessJson<Awaited<ReturnType<T>>> : never\ntype InferFnErrors<T> = T extends (...args: any[]) => any ? UnwrapErrorJson<Awaited<ReturnType<T>>> : never\ntype InferRoute<T> =\n T extends { readonly __return?: infer TReturn; readonly __body?: infer TBody }\n ? {\n __body: [TBody] extends [undefined] ? never : Exclude<TBody, undefined>\n __response: InferFnSuccess<() => TReturn>\n __errors: InferFnErrors<() => TReturn>\n }\n : InferFnSuccess<T>\n\ndeclare module '@devlusoft/devix' {\n interface ApiRoutes {\n${routeLines}\n }\n}\n`\n}\n", "import {readFileSync, readdirSync, statSync} from 'node:fs'\nimport {join, relative} from 'node:path'\nimport {extractHttpMethods} from './extract-methods'\nimport {buildRouteEntry} from './routes-dts'\nimport type {RouteEntry} from './routes-dts'\n\nfunction walkDir(dir: string, root: string): string[] {\n const entries: string[] = []\n for (const name of readdirSync(dir)) {\n const full = join(dir, name)\n if (statSync(full).isDirectory()) {\n entries.push(...walkDir(full, root))\n } else if (/\\.(ts|tsx)$/.test(name)) {\n entries.push(relative(root, full).replace(/\\\\/g, '/'))\n }\n }\n return entries\n}\n\nexport function scanApiFiles(appDir: string, projectRoot: string): RouteEntry[] {\n const apiDir = join(projectRoot, appDir, 'api')\n\n let files: string[]\n try {\n files = walkDir(apiDir, projectRoot)\n } catch {\n return []\n }\n\n return files\n .filter(f => !f.endsWith('middleware.ts') && !f.endsWith('middleware.tsx'))\n .flatMap(filePath => {\n try {\n const content = readFileSync(join(projectRoot, filePath), 'utf-8')\n const methods = extractHttpMethods(content)\n if (methods.length === 0) return []\n return [buildRouteEntry(filePath, `${appDir}/api`, methods)]\n } catch {\n return []\n }\n })\n}\n", "import {mkdirSync, readFileSync, writeFileSync, existsSync} from 'node:fs'\nimport {join} from 'node:path'\n\nexport function writeRoutesDts(content: string, projectRoot: string): boolean {\n const devixDir = join(projectRoot, '.devix')\n const outPath = join(devixDir, 'routes.d.ts')\n\n mkdirSync(devixDir, {recursive: true})\n\n if (existsSync(outPath) && readFileSync(outPath, 'utf-8') === content) {\n return false\n }\n\n writeFileSync(outPath, content, 'utf-8')\n return true\n}\n", "interface ServerEntryOptions {\n routesPath: string\n envPath: string\n honoServerPath: string\n honoServerStaticPath: string\n honoPath: string\n}\n\nexport function generateServerEntry({ routesPath, envPath, honoServerPath, honoServerStaticPath, honoPath }: ServerEntryOptions): string {\n return `\nimport { readFileSync } from 'node:fs'\n import { serve } from '${honoServerPath}'\n import { serveStatic } from '${honoServerStaticPath}'\n import { Hono } from '${honoPath}'\n import { resolve, join, dirname } from 'node:path'\n import { pathToFileURL } from 'node:url'\n import { registerApiRoutes, registerSsrRoute } from '${routesPath}' \n import { loadDotenv } from '${envPath}'\n \n loadDotenv('production')\n \n const __dir = dirname(process.argv[1])\n\n let renderModule, apiModule, manifest, runtimeConfig \n \n try { \n runtimeConfig = JSON.parse(readFileSync(resolve(__dir, '../devix.config.json'), 'utf-8'))\n if (runtimeConfig.output !== 'static') { \n renderModule = await import(pathToFileURL(resolve(__dir, 'render.js')).href)\n apiModule = await import(pathToFileURL(resolve(__dir, 'api.js')).href) \n } \n manifest = JSON.parse(readFileSync(resolve(__dir, '../client/.vite/manifest.json'), 'utf-8')) \n } catch { \n console.error('[devix] Build not found. Run \"devix build\" first.')\n process.exit(1) \n } \n \n const port = Number(process.env.PORT) || runtimeConfig.port || 3000 \n const host = typeof runtimeConfig.host === 'string'\n ? runtimeConfig.host \n : runtimeConfig.host ? '0.0.0.0' : (process.env.HOST || '0.0.0.0') \n \n const clientRoot = resolve(__dir, '../client') \n const app = new Hono()\n \n if (runtimeConfig.output === 'static') {\n app.get('/_data/*', (c) => {\n const pathname = c.req.path.replace(/^\\\\/_data/, '') || '/' \n const filePath = pathname === '/' \n ? join(clientRoot, '_data/index.json') \n : join(clientRoot, '_data', pathname + '.json') \n try { \n return c.json(JSON.parse(readFileSync(filePath, 'utf-8')))\n } catch { \n return c.json({ error: 'not found' }, 404)\n } \n }) \n }\n\n app.use('/*', serveStatic({ \n root: clientRoot,\n onFound: (_path, c) => { \n c.header('Cache-Control', _path.includes('/assets/') \n ? 'public, immutable, max-age=31536000'\n : 'no-cache') \n } \n })) \n \n if (runtimeConfig.output === 'static') {\n console.log('[devix] Static mode \u2014 serving pre-generated files from dist/client')\n } else { \n registerApiRoutes(app, { renderModule, apiModule, manifest })\n registerSsrRoute(app, { renderModule, apiModule, manifest, loaderTimeout: runtimeConfig.loaderTimeout })\n } \n \n const server = serve({ fetch: app.fetch, port, hostname: host }, (info) => \n console.log(\\`http://\\${info.address}:\\${info.port}\\`))\n\nprocess.on('SIGTERM', () => server.close())\nprocess.on('SIGINT', () => server.close())\n`\n}", "import {existsSync, mkdirSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync} from \"node:fs\";\nimport {join, relative} from \"node:path\";\nimport {parseSync} from \"oxc-parser\";\n\nfunction walkPages(dir: string, root: string): string[] {\n const entries: string[] = []\n for (const name of readdirSync(dir)) {\n const full = join(dir, name)\n if (statSync(full).isDirectory()) {\n entries.push(...walkPages(full, root))\n } else if (/\\.(ts|tsx)$/.test(name) && name !== 'layout.tsx' && name !== 'error.tsx') {\n entries.push(relative(root, full).replace(/\\\\/g, '/'))\n }\n }\n return entries\n}\n\nexport function hasLoaderExport(code: string, filePath: string): boolean {\n const ast = parseSync(filePath, code, {sourceType: 'module'})\n for (const node of ast.program.body) {\n if (node.type !== 'ExportNamedDeclaration') continue\n const decl = node.declaration\n if (decl?.type === 'FunctionDeclaration' && decl.id?.name === 'loader') return true\n if (decl?.type === 'VariableDeclaration') {\n for (const d of decl.declarations) {\n if (d.id.type === 'Identifier' && d.id.name === 'loader') return true\n }\n }\n for (const spec of (node.specifiers ?? [])) {\n if (spec.exported.type === 'Identifier' && spec.exported.name === 'loader') return true\n }\n }\n return false\n}\n\nexport function generatePageTypesDts(importPath: string, withLoader: boolean): string {\n if (!withLoader) {\n return '// auto-generado por devix - no editar\\nexport type PageData = undefined\\nexport type PageParams = Record<string, string>\\n'\n }\n return `// auto-generado por devix \u2014 no editar\\nimport type { loader } from \"${importPath}\"\\nimport type { Redirect } from \"@devlusoft/devix\"\\n\\nexport type PageData = Exclude<\\n Awaited<ReturnType<NonNullable<typeof loader>>>,\\n Redirect | void | undefined\\n>\\nexport type PageParams = NonNullable<Parameters<typeof loader>[0]>[\"params\"]\\n`\n}\n\nexport function writePageTypes(pageRelPath: string, root: string): void {\n const fullPath = join(root, pageRelPath)\n const code = readFileSync(fullPath, 'utf-8')\n const withLoader = hasLoaderExport(code, fullPath)\n\n const typesDir = join(root, '.devix', 'pages', pageRelPath.replace(/\\.(tsx?|jsx?)$/, ''))\n const outPath = join(typesDir, '$types.d.ts')\n\n const pageAbsNoExt = fullPath.replace(/\\.(tsx?|jsx?)$/, '')\n const importPath = relative(typesDir, pageAbsNoExt).replace(/\\\\/g, '/')\n\n const content = generatePageTypesDts(importPath, withLoader)\n\n if (existsSync(outPath) && readFileSync(outPath, 'utf-8') === content) return\n\n mkdirSync(typesDir, {recursive: true})\n writeFileSync(outPath, content, 'utf-8')\n}\n\nexport function deletePageTypes(pageRelPath: string, root: string): void {\n const typesDir = join(root, '.devix', 'pages', pageRelPath.replace(/\\.(tsx?|jsx?)$/, ''))\n const outPath = join(typesDir, '$types.d.ts')\n if (existsSync(outPath)) rmSync(outPath)\n}\n\nexport function scanAndWritePageTypes(appDir: string, root: string): void {\n const pagesDir = join(root, appDir, 'pages')\n let files: string[]\n try {\n files = walkPages(pagesDir, root)\n } catch {\n return\n }\n for (const file of files) {\n try {\n writePageTypes(file, root)\n } catch {\n /* ignorar archivos no procesables */\n }\n }\n}", "import {UserConfig, Plugin, mergeConfig} from 'vite'\nimport type {DevixConfig} from '../config'\nimport react from '@vitejs/plugin-react'\nimport {fileURLToPath} from 'node:url'\nimport {dirname, relative, resolve} from 'node:path'\nimport {createRequire} from 'node:module'\nimport {generateEntryClient} from './codegen/entry-client'\nimport {generateClientRoutes} from './codegen/client-routes'\nimport {generateRender} from './codegen/render'\nimport {generateApi} from './codegen/api'\nimport {generateContext} from \"./codegen/context\";\nimport {scanApiFiles} from \"./codegen/scan-api\";\nimport {generateRoutesDts} from \"./codegen/routes-dts\";\nimport {writeRoutesDts} from \"./codegen/write-routes-dts\";\nimport {parseSync} from 'oxc-parser'\nimport {generateServerEntry} from \"./codegen/server-entry\";\nimport {deletePageTypes, scanAndWritePageTypes, writePageTypes} from \"./codegen/page-types\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\n\nconst VIRTUAL_ENTRY_CLIENT = 'virtual:devix/entry-client'\nconst VIRTUAL_CLIENT_ROUTES = 'virtual:devix/client-routes'\nconst VIRTUAL_RENDER = 'virtual:devix/render'\nconst VIRTUAL_API = 'virtual:devix/api'\nconst VIRTUAL_CONTEXT = 'virtual:devix/context'\nconst VIRTUAL_SERVER_ENTRY = 'virtual:devix/server-entry'\n\nconst SERVER_EXPORTS = new Set(['loader', 'guard', 'generateStaticParams', 'headers'])\n\nexport function devix(config: DevixConfig): UserConfig {\n const appDir = config.appDir ?? 'app'\n const pagesDir = `${appDir}/pages`\n const cssUrls = (config.css ?? []).map(u => u.startsWith('/') ? u : `/${u.replace(/^\\.\\//, '')}`)\n\n const renderPath = resolve(__dirname, '../server/render.js').replace(/\\\\/g, '/')\n const apiPath = resolve(__dirname, '../server/api.js').replace(/\\\\/g, '/')\n const matcherPath = resolve(__dirname, '../runtime/client-router.js').replace(/\\\\/g, '/')\n const routesPath = resolve(__dirname, '../server/routes.js').replace(/\\\\/g, '/')\n const envPath = resolve(__dirname, '../utils/env.js').replace(/\\\\/g, '/')\n\n const _require = createRequire(import.meta.url)\n const honoServerPath = _require.resolve('@hono/node-server').replace(/\\\\/g, '/')\n const honoServerStaticPath = _require.resolve('@hono/node-server/serve-static').replace(/\\\\/g, '/')\n const honoPath = _require.resolve('hono').replace(/\\\\/g, '/')\n\n const virtualPlugin: Plugin = {\n name: 'devix',\n enforce: 'pre',\n\n resolveId(id) {\n if (id === VIRTUAL_ENTRY_CLIENT) return `\\0${VIRTUAL_ENTRY_CLIENT}`\n if (id === VIRTUAL_CLIENT_ROUTES) return `\\0${VIRTUAL_CLIENT_ROUTES}`\n if (id === VIRTUAL_RENDER) return `\\0${VIRTUAL_RENDER}`\n if (id === VIRTUAL_API) return `\\0${VIRTUAL_API}`\n if (id === VIRTUAL_CONTEXT) return `\\0${VIRTUAL_CONTEXT}`\n if (id === VIRTUAL_SERVER_ENTRY) return `\\0${VIRTUAL_SERVER_ENTRY}`\n },\n\n load(id) {\n if (id === `\\0${VIRTUAL_ENTRY_CLIENT}`)\n return generateEntryClient({cssUrls})\n if (id === `\\0${VIRTUAL_CLIENT_ROUTES}`)\n return generateClientRoutes({pagesDir, matcherPath})\n if (id === `\\0${VIRTUAL_RENDER}`)\n return generateRender({pagesDir, renderPath})\n if (id === `\\0${VIRTUAL_API}`)\n return generateApi({apiPath, appDir})\n if (id === `\\0${VIRTUAL_CONTEXT}`)\n return generateContext()\n if (id === `\\0${VIRTUAL_SERVER_ENTRY}`)\n return generateServerEntry({routesPath, envPath, honoServerPath, honoServerStaticPath, honoPath})\n },\n\n\n transform(code, id, options) {\n if (options?.ssr) return\n\n const resolvedPagesDir = resolve(process.cwd(), pagesDir)\n if (!id.startsWith(resolvedPagesDir)) return\n\n const ast = parseSync(id, code, {sourceType: 'module'})\n\n const replacements: { start: number; end: number; name: string }[] = []\n\n for (const node of ast.program.body) {\n if (node.type !== 'ExportNamedDeclaration' || !node.declaration) continue\n\n const decl = node.declaration\n\n if (decl.type === 'FunctionDeclaration' && decl.id && SERVER_EXPORTS.has(decl.id.name)) {\n replacements.push({start: node.start, end: node.end, name: decl.id.name})\n }\n\n if (decl.type === 'VariableDeclaration') {\n const seen = new Set<number>()\n for (const declarator of decl.declarations) {\n if (declarator.id.type === 'Identifier' && SERVER_EXPORTS.has(declarator.id.name)) {\n if (!seen.has(node.start)) {\n seen.add(node.start)\n replacements.push({start: node.start, end: node.end, name: declarator.id.name})\n }\n }\n }\n }\n }\n\n if (replacements.length === 0) return\n\n replacements.sort((a, b) => b.start - a.start)\n\n let result = code\n for (const {start, end, name} of replacements) {\n result = result.slice(0, start) + `export const ${name} = undefined` + result.slice(end)\n }\n\n return {code: result, map: null}\n },\n\n buildStart() {\n const root = process.cwd()\n const entries = scanApiFiles(appDir, root)\n writeRoutesDts(generateRoutesDts(entries, `${appDir}/api`), root)\n scanAndWritePageTypes(appDir, root)\n },\n\n configureServer(server) {\n const root = process.cwd()\n\n scanAndWritePageTypes(appDir, root)\n\n const regenerateDts = () => {\n const entries = scanApiFiles(appDir, root)\n writeRoutesDts(generateRoutesDts(entries, `${appDir}/api`), root)\n }\n\n const isPageFile = (file: string) => file.startsWith(resolve(root, pagesDir)) && !file.endsWith('layout.tsx') && !file.endsWith('error.tsx')\n\n const pageRelPath = (file: string) => relative(root, file).replace(/\\\\/g, '/')\n\n const invalidateVirtualModule = (id: string) => {\n const mod = server.moduleGraph.getModuleById(`\\0${id}`)\n if (mod) server.moduleGraph.invalidateModule(mod)\n }\n\n server.watcher.add(resolve(root, 'devix.config.ts'))\n server.watcher.on('change', (file) => {\n if (file === resolve(root, 'devix.config.ts')) {\n console.log('[devix] Config changed, restarting...')\n process.exit(75)\n }\n })\n\n server.watcher.on('add', (file) => {\n if (file.startsWith(resolve(root, pagesDir))) invalidateVirtualModule(VIRTUAL_RENDER)\n if (isPageFile(file)) writePageTypes(pageRelPath(file), root)\n if (file.includes(`${appDir}/api`)) {\n invalidateVirtualModule(VIRTUAL_API)\n regenerateDts()\n }\n })\n server.watcher.on('unlink', (file) => {\n if (file.startsWith(resolve(root, pagesDir))) invalidateVirtualModule(VIRTUAL_RENDER)\n if (isPageFile(file)) deletePageTypes(pageRelPath(file), root)\n if (file.includes(`${appDir}/api`)) {\n invalidateVirtualModule(VIRTUAL_API)\n regenerateDts()\n }\n })\n server.watcher.on('change', (file) => {\n if (isPageFile(file)) writePageTypes(pageRelPath(file), root)\n if (file.includes(`${appDir}/api`) && !file.endsWith('middleware.ts')) {\n regenerateDts()\n }\n })\n },\n }\n\n const base: UserConfig = {\n plugins: [react(), virtualPlugin],\n publicDir: resolve(process.cwd(), config.publicDir ?? 'public'),\n ssr: {noExternal: ['@devlusoft/devix']},\n ...(config.envPrefix ? {envPrefix: config.envPrefix} : {}),\n }\n\n return mergeConfig(base, config.vite ?? {})\n}", "export function parseDuration(value: number | string): number {\n if (typeof value === 'number') return value\n const match = value.trim().match(/^(\\d+(?:\\.\\d+)?)\\s*(ms|s|m|h)?$/)\n if (!match) throw new Error(`[devix] Invalid duration: \"${value}\". Use a number (ms) or a string like \"5s\", \"2m\", \"500ms\".`)\n const n = parseFloat(match[1])\n switch (match[2]) {\n case 'h': return n * 3_600_000\n case 'm': return n * 60_000\n case 's': return n * 1_000\n case 'ms':\n default: return n\n }\n}\n", "import {build} from 'esbuild'\nimport type {DevixConfig} from \"../config\"\nimport {join} from \"node:path\"\nimport {unlinkSync, writeFileSync} from \"node:fs\";\nimport {pathToFileURL} from \"node:url\";\n\nexport async function loadConfig(cwd: string): Promise<DevixConfig> {\n const result = await build({\n entryPoints: [join(cwd, 'devix.config.ts')],\n bundle: true,\n write: false,\n format: 'esm',\n platform: 'node',\n packages: 'external',\n })\n\n const tmpFile = join(cwd, `.devix-config-${Date.now()}.mjs`)\n writeFileSync(tmpFile, result.outputFiles[0].text)\n\n try {\n const mod = await import(pathToFileURL(tmpFile).href)\n return mod.default\n } finally {\n unlinkSync(tmpFile)\n }\n}", "import {writeFileSync} from 'node:fs'\nimport {resolve} from 'node:path'\nimport {build} from 'vite'\nimport {devix} from '../vite'\nimport {parseDuration} from '../utils/duration'\nimport {loadConfig} from \"../utils/load-config\";\n\nconst config = await loadConfig(process.cwd())\nconst baseConfig = devix(config)\n\nawait build({\n ...baseConfig,\n configFile: false,\n build: {\n outDir: 'dist/client',\n manifest: true,\n rolldownOptions: {\n input: 'virtual:devix/entry-client',\n },\n },\n})\n\nawait build({\n ...baseConfig,\n configFile: false,\n build: {\n ssr: true,\n outDir: 'dist/server',\n copyPublicDir: false,\n rolldownOptions: {\n input: {\n render: 'virtual:devix/render',\n api: 'virtual:devix/api',\n },\n },\n },\n})\n\nawait build({\n ...baseConfig,\n configFile: false,\n build: {\n ssr: true,\n outDir: 'dist/server',\n emptyOutDir: false,\n copyPublicDir: false,\n rolldownOptions: {\n input: { index: 'virtual:devix/server-entry' },\n },\n },\n})\n\nconst runtimeConfig = {\n port: config.port ?? 3000,\n host: config.host ?? false,\n loaderTimeout: parseDuration(config.loaderTimeout ?? 10_000),\n output: config.output ?? 'server',\n}\n\nwriteFileSync(\n resolve(process.cwd(), 'dist/devix.config.json'),\n JSON.stringify(runtimeConfig, null, 2),\n 'utf-8'\n)\n\n\nexport {}", "import {readFileSync, mkdirSync, writeFileSync, rmSync} from 'node:fs'\nimport {resolve, join} from 'node:path'\nimport type {Manifest} from 'vite'\nimport { pathToFileURL } from \"node:url\"\nimport {loadConfig} from \"../utils/load-config\";\n\nconst userConfig = await loadConfig(process.cwd())\nif (userConfig.output !== 'static') {\n console.warn('[devix] Tip: set output: \"static\" in devix.config.ts to skip the SSR server at runtime.')\n}\n\nawait import('./build.js')\n\nconst t = Date.now()\nconst renderModule = await import(pathToFileURL(resolve(process.cwd(), 'dist/server/render.js')).href + `?t=${t}`)\n\nconst manifest: Manifest = JSON.parse(\n readFileSync(resolve(process.cwd(), 'dist/client/.vite/manifest.json'), 'utf-8')\n)\n\nconst urls: string[] = await renderModule.getStaticRoutes()\n\nconsole.log(`[devix] Generating ${urls.length} static page${urls.length === 1 ? '' : 's'}...`)\n\nfor (const url of urls) {\n const fullUrl = `http://localhost${url}`\n const {html, statusCode} = await renderModule.render(fullUrl, new Request(fullUrl), {manifest})\n\n if (statusCode !== 200) {\n console.warn(`[devix] Skipping ${url} \u2014 status ${statusCode}`)\n continue\n }\n\n const outPath = url === '/'\n ? join(process.cwd(), 'dist/client/index.html')\n : join(process.cwd(), 'dist/client', url, 'index.html')\n\n mkdirSync(join(outPath, '..'), {recursive: true})\n writeFileSync(outPath, `<!DOCTYPE html>${html}`, 'utf-8')\n\n const data = await renderModule.runLoader(fullUrl, new Request(fullUrl), {manifest})\n const dataPath = url === '/'\n ? join(process.cwd(), 'dist/client/_data/index.json')\n : join(process.cwd(), 'dist/client/_data', `${url}.json`)\n \n mkdirSync(join(dataPath, '..'), {recursive: true})\n writeFileSync(dataPath, JSON.stringify(data), 'utf-8')\n\n console.log(` \u2713 ${url}`)\n}\n\nconsole.log('[devix] Generation complete.')\n\nif (userConfig.output === 'static') {\n rmSync(resolve(process.cwd(), 'dist/server'), { recursive: true, force: true })\n console.log('[devix] Removed dist/server (not needed in static mode)')\n}\n\nexport {}\n", "import type {Hono} from 'hono'\nimport type {Manifest} from 'vite'\n\ninterface ServerOptions {\n renderModule: any\n apiModule: any\n manifest?: Manifest\n loaderTimeout?: number\n}\n\nexport function registerApiRoutes(app: Hono, {apiModule, renderModule, loaderTimeout}: ServerOptions) {\n app.all('/api/*', async (c) => {\n try {\n return await apiModule.handleApiRequest(c.req.url, c.req.raw)\n } catch (e) {\n console.error(e)\n return c.json({error: 'internal error'}, 500)\n }\n })\n\n app.get('/_data/*', async (c) => {\n try {\n const {pathname, search} = new URL(c.req.url, 'http://localhost')\n const url = pathname.replace(/^\\/_data/, '') + search\n\n const data = await renderModule.runLoader(url, c.req.raw, {loaderTimeout})\n if (data.error) return c.json({error: 'internal error'}, 500)\n if ('loaderError' in data) {\n const {statusCode, message, data: errorData} = data.loaderError\n return c.json({statusCode, message, data: errorData}, statusCode)\n }\n return c.json(data)\n } catch (e) {\n console.error(e)\n return c.json({error: 'internal error'}, 500)\n }\n })\n}\n\nexport function registerSsrRoute(app: Hono, {renderModule, manifest, loaderTimeout}: ServerOptions) {\n app.get('*', async (c) => {\n try {\n const {html, statusCode, headers} = await renderModule.render(c.req.url, c.req.raw, {manifest, loaderTimeout})\n const res = c.html(`<!DOCTYPE html>${html}`, statusCode)\n for (const [key, value] of Object.entries(headers as Record<string, string>)) {\n res.headers.set(key, value)\n }\n return res\n } catch (e) {\n console.error(e)\n return c.text('Internal Server Error', 500)\n }\n })\n}", "import {loadEnv} from 'vite'\n\nexport function loadDotenv(mode: string) {\n const env = loadEnv(mode, process.cwd(), '')\n for (const [key, value] of Object.entries(env)) {\n if (process.env[key] === undefined) {\n process.env[key] = value\n }\n }\n}\n", "import { readFileSync } from 'node:fs'\nimport { serve } from '@hono/node-server'\nimport { serveStatic } from '@hono/node-server/serve-static'\nimport { Hono } from 'hono'\nimport { resolve, join } from 'node:path'\nimport type { Manifest } from 'vite'\nimport { registerApiRoutes, registerSsrRoute } from '../server/routes'\nimport { loadDotenv } from '../utils/env'\nimport {pathToFileURL} from \"node:url\"\n\nloadDotenv('production')\n\nlet renderModule: any\nlet apiModule: any\nlet manifest: Manifest\nlet runtimeConfig: { port: number, host: string | boolean, loaderTimeout: number, output: 'server' | 'static' }\n\ntry {\n runtimeConfig = JSON.parse(readFileSync(join(process.cwd(), 'dist/devix.config.json'), 'utf-8'))\n if (runtimeConfig.output !== 'static') {\n renderModule = await import(pathToFileURL(resolve(process.cwd(), 'dist/server/render.js')).href)\n apiModule = await import(pathToFileURL(resolve(process.cwd(), 'dist/server/api.js')).href)\n }\n manifest = JSON.parse(readFileSync(join(process.cwd(), 'dist/client/.vite/manifest.json'), 'utf-8'))\n} catch {\n console.error('[devix] Build not found. Run \"devix build\" first.')\n process.exit(1)\n}\n\nconst port = Number(process.env.PORT) || runtimeConfig!.port || 3000\nconst host = typeof runtimeConfig!.host === 'string'\n ? runtimeConfig!.host\n : runtimeConfig!.host ? '0.0.0.0' : (process.env.HOST || '0.0.0.0')\n\nconst app = new Hono()\n\nconst clientRoot = join(process.cwd(), 'dist/client')\n\nif (runtimeConfig!.output === 'static') {\n app.get('/_data/*', (c) => {\n const pathname = c.req.path.replace(/^\\/_data/, '') || '/'\n const filePath = pathname === '/'\n ? join(clientRoot, '_data/index.json')\n : join(clientRoot, '_data', `${pathname}.json`)\n\n try {\n const data = readFileSync(filePath, 'utf-8')\n return c.json(JSON.parse(data))\n } catch {\n return c.json({ error: 'not found' }, 404)\n }\n })\n}\n\napp.use('/*', serveStatic({\n root: clientRoot,\n onFound: (_path, c) => {\n c.header('Cache-Control', _path.includes('/assets/')\n ? 'public, immutable, max-age=31536000'\n : 'no-cache')\n }\n}))\n\nif (runtimeConfig!.output === 'static') {\n console.log('[devix] Static mode \u2014 serving pre-generated files from dist/client')\n} else {\n registerApiRoutes(app, { renderModule, apiModule, manifest })\n registerSsrRoute(app, { renderModule, apiModule, manifest, loaderTimeout: runtimeConfig!.loaderTimeout })\n}\n\nserve({ fetch: app.fetch, port, hostname: host }, (info) => console.log(`http://${info.address}:${info.port}`))\n\nexport { }", "#!/usr/bin/env node\ndeclare const __DEVIX_VERSION__: string\n\nconst command = process.argv[2]\n\nswitch (command) {\n case 'dev':\n await import(\"./dev.js\")\n break\n case \"build\":\n await import(\"./build.js\")\n break\n case \"generate\":\n await import(\"./generate.js\")\n break\n case \"start\":\n await import(\"./start.js\")\n break\n case '--version':\n case '-v': {\n console.log(__DEVIX_VERSION__)\n break\n }\n case '--help':\n case '-h':\n console.log(`\ndevix \u2014 a lightweight SSR framework\n\nUsage:\n devix dev Start development server\n devix build Build for production\n devix generate Build and generate static HTML (SSG)\n devix start Start production server\n\nOptions:\n -v, --version Show version\n -h, --help Show this help\n\nOutput modes (set in devix.config.ts):\n output: \"server\" SSR mode \u2014 devix start handles requests dynamically (default)\n output: \"static\" SSG mode \u2014 devix generate pre-renders all pages; devix start serves static files only\n `.trim())\n break\n default:\n console.error(`Unknown command: ${command}`)\n console.error('Usage: devix <dev|build|generate|start>')\n process.exit(1)\n}\n\nexport {}"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["dev_exports", "spawnSync", "fileURLToPath", "dirname", "resolve", "__dirname", "init_dev", "__esmMin", "generateEntryClient", "cssUrls", "u", "init_entry_client", "__esmMin", "generateClientRoutes", "pagesDir", "matcherPath", "init_client_routes", "__esmMin", "generateRender", "pagesDir", "renderPath", "init_render", "__esmMin", "generateApi", "apiPath", "appDir", "init_api", "__esmMin", "generateContext", "init_context", "__esmMin", "stripComments", "content", "extractHttpMethods", "found", "match", "METHOD_EXPORT_RE", "init_extract_methods", "__esmMin", "routePattern", "rel", "init_patterns", "__esmMin", "keyToRoutePattern", "key", "apiDir", "rel", "pattern", "routePattern", "init_api_router", "__esmMin", "init_patterns", "filePathToIdentifier", "filePath", "apiDir", "buildRouteEntry", "methods", "keyToRoutePattern", "generateRoutesDts", "entries", "imports", "e", "importPath", "routeLines", "m", "init_routes_dts", "__esmMin", "init_api_router", "readFileSync", "readdirSync", "statSync", "join", "relative", "walkDir", "dir", "root", "entries", "name", "full", "scanApiFiles", "appDir", "projectRoot", "apiDir", "files", "f", "filePath", "content", "methods", "extractHttpMethods", "buildRouteEntry", "init_scan_api", "__esmMin", "init_extract_methods", "init_routes_dts", "mkdirSync", "readFileSync", "writeFileSync", "existsSync", "join", "writeRoutesDts", "content", "projectRoot", "devixDir", "outPath", "init_write_routes_dts", "__esmMin", "generateServerEntry", "routesPath", "envPath", "honoServerPath", "honoServerStaticPath", "honoPath", "init_server_entry", "__esmMin", "existsSync", "mkdirSync", "readdirSync", "readFileSync", "rmSync", "statSync", "writeFileSync", "join", "relative", "parseSync", "walkPages", "dir", "root", "entries", "name", "full", "hasLoaderExport", "code", "filePath", "ast", "node", "decl", "d", "spec", "generatePageTypesDts", "importPath", "withLoader", "writePageTypes", "pageRelPath", "fullPath", "typesDir", "outPath", "pageAbsNoExt", "content", "deletePageTypes", "scanAndWritePageTypes", "appDir", "pagesDir", "files", "file", "init_page_types", "__esmMin", "mergeConfig", "react", "fileURLToPath", "dirname", "relative", "resolve", "createRequire", "parseSync", "devix", "config", "appDir", "pagesDir", "cssUrls", "u", "renderPath", "__dirname", "apiPath", "matcherPath", "routesPath", "envPath", "_require", "honoServerPath", "honoServerStaticPath", "honoPath", "virtualPlugin", "id", "VIRTUAL_ENTRY_CLIENT", "VIRTUAL_CLIENT_ROUTES", "VIRTUAL_RENDER", "VIRTUAL_API", "VIRTUAL_CONTEXT", "VIRTUAL_SERVER_ENTRY", "generateEntryClient", "generateClientRoutes", "generateRender", "generateApi", "generateContext", "generateServerEntry", "code", "options", "resolvedPagesDir", "ast", "replacements", "node", "decl", "SERVER_EXPORTS", "seen", "declarator", "a", "b", "result", "start", "end", "name", "root", "entries", "scanApiFiles", "writeRoutesDts", "generateRoutesDts", "scanAndWritePageTypes", "server", "regenerateDts", "isPageFile", "file", "pageRelPath", "invalidateVirtualModule", "mod", "writePageTypes", "deletePageTypes", "base", "init_vite", "__esmMin", "init_entry_client", "init_client_routes", "init_render", "init_api", "init_context", "init_scan_api", "init_routes_dts", "init_write_routes_dts", "init_server_entry", "init_page_types", "parseDuration", "value", "match", "n", "init_duration", "__esmMin", "build", "join", "unlinkSync", "writeFileSync", "pathToFileURL", "loadConfig", "cwd", "result", "tmpFile", "init_load_config", "__esmMin", "build_exports", "writeFileSync", "resolve", "build", "config", "baseConfig", "runtimeConfig", "init_build", "__esmMin", "init_vite", "init_duration", "init_load_config", "loadConfig", "devix", "parseDuration", "generate_exports", "readFileSync", "mkdirSync", "writeFileSync", "rmSync", "resolve", "join", "pathToFileURL", "userConfig", "t", "renderModule", "manifest", "urls", "init_generate", "__esmMin", "init_load_config", "loadConfig", "url", "fullUrl", "html", "statusCode", "outPath", "data", "dataPath", "registerApiRoutes", "app", "apiModule", "renderModule", "loaderTimeout", "c", "e", "pathname", "search", "url", "data", "statusCode", "message", "errorData", "registerSsrRoute", "manifest", "html", "headers", "res", "key", "value", "init_routes", "__esmMin", "loadEnv", "loadDotenv", "mode", "env", "key", "value", "init_env", "__esmMin", "start_exports", "readFileSync", "serve", "serveStatic", "Hono", "resolve", "join", "pathToFileURL", "renderModule", "apiModule", "manifest", "runtimeConfig", "port", "host", "app", "clientRoot", "init_start", "__esmMin", "init_routes", "init_env", "loadDotenv", "c", "pathname", "filePath", "data", "_path", "registerApiRoutes", "registerSsrRoute", "info", "command"]
|
|
7
7
|
}
|
package/dist/types.d.ts
CHANGED
|
@@ -41,7 +41,7 @@ export interface LoaderContext<TParams = Record<string, string>> {
|
|
|
41
41
|
}
|
|
42
42
|
import type { Redirect } from './utils/response';
|
|
43
43
|
export type LoaderFunction<TData = unknown, TParams = Record<string, string>> = (ctx: LoaderContext<TParams>) => Promise<TData | Redirect | void> | TData | Redirect | void;
|
|
44
|
-
export type GuardFunction<TParams = Record<string, string>> = (ctx: LoaderContext<TParams>) => Promise<string | Redirect |
|
|
44
|
+
export type GuardFunction<TParams = Record<string, string>> = (ctx: LoaderContext<TParams>) => Promise<string | Redirect | object | null> | string | Redirect | object | null;
|
|
45
45
|
type GuardData<TGuard> = TGuard extends (...args: any[]) => infer R ? Exclude<Awaited<R>, string | Redirect | null | undefined> : unknown;
|
|
46
46
|
export type LoaderContextWithGuard<TGuard extends GuardFunction | undefined = undefined, TParams = Record<string, string>> = LoaderContext<TParams> & {
|
|
47
47
|
guardData: GuardData<TGuard>;
|
package/dist/utils/banner.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import o from"picocolors";import{networkInterfaces as r}from"node:os";function s(e){let l=r();for(let n of Object.values(l))for(let t of n??[])if(t.family==="IPv4"&&!t.internal)return`http://${t.address}:${e}/`;return null}function $(e){let l="0.4.1",n=s(e);console.log(),console.log(` ${o.bold(o.yellow("devix"))} ${o.dim(`v${l}`)}`),console.log(),console.log(` ${o.green("\u279C")} ${o.bold("Local:")} ${o.cyan(`http://localhost:${e}/`)}`),console.log(n?` ${o.green("\u279C")} ${o.bold("Network:")} ${o.cyan(n)}`:` ${o.green("\u279C")} ${o.bold("Network:")} ${o.dim("use --host to expose")}`),console.log()}export{$ as printDevBanner};
|
|
1
|
+
import o from"picocolors";import{networkInterfaces as r}from"node:os";function s(e){let l=r();for(let n of Object.values(l))for(let t of n??[])if(t.family==="IPv4"&&!t.internal)return`http://${t.address}:${e}/`;return null}function $(e){let l="0.4.2-beta.1",n=s(e);console.log(),console.log(` ${o.bold(o.yellow("devix"))} ${o.dim(`v${l}`)}`),console.log(),console.log(` ${o.green("\u279C")} ${o.bold("Local:")} ${o.cyan(`http://localhost:${e}/`)}`),console.log(n?` ${o.green("\u279C")} ${o.bold("Network:")} ${o.cyan(n)}`:` ${o.green("\u279C")} ${o.bold("Network:")} ${o.dim("use --host to expose")}`),console.log()}export{$ as printDevBanner};
|
|
2
2
|
//# sourceMappingURL=banner.js.map
|
package/dist/utils/banner.js.map
CHANGED
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/banner.ts"],
|
|
4
4
|
"sourcesContent": ["import pc from 'picocolors'\nimport {networkInterfaces} from 'node:os'\n\ndeclare const __DEVIX_VERSION__: string\n\nfunction getNetworkUrl(port: number): string | null {\n const nets = networkInterfaces()\n for (const interfaces of Object.values(nets)) {\n for (const net of interfaces ?? []) {\n if (net.family === 'IPv4' && !net.internal) {\n return `http://${net.address}:${port}/`\n }\n }\n }\n return null\n}\n\nexport function printDevBanner(port: number) {\n const version = __DEVIX_VERSION__\n const networkUrl = getNetworkUrl(port)\n\n console.log()\n console.log(` ${pc.bold(pc.yellow('devix'))} ${pc.dim(`v${version}`)}`)\n console.log()\n console.log(` ${pc.green('\u279C')} ${pc.bold('Local:')} ${pc.cyan(`http://localhost:${port}/`)}`)\n if (networkUrl) {\n console.log(` ${pc.green('\u279C')} ${pc.bold('Network:')} ${pc.cyan(networkUrl)}`)\n } else {\n console.log(` ${pc.green('\u279C')} ${pc.bold('Network:')} ${pc.dim('use --host to expose')}`)\n }\n console.log()\n}"],
|
|
5
|
-
"mappings": "AAAA,OAAOA,MAAQ,aACf,OAAQ,qBAAAC,MAAwB,UAIhC,SAASC,EAAcC,EAA6B,CAChD,IAAMC,EAAOH,EAAkB,EAC/B,QAAWI,KAAc,OAAO,OAAOD,CAAI,EACvC,QAAWE,KAAOD,GAAc,CAAC,EAC7B,GAAIC,EAAI,SAAW,QAAU,CAACA,EAAI,SAC9B,MAAO,UAAUA,EAAI,OAAO,IAAIH,CAAI,IAIhD,OAAO,IACX,CAEO,SAASI,EAAeJ,EAAc,CACzC,IAAMK,EAAU,
|
|
5
|
+
"mappings": "AAAA,OAAOA,MAAQ,aACf,OAAQ,qBAAAC,MAAwB,UAIhC,SAASC,EAAcC,EAA6B,CAChD,IAAMC,EAAOH,EAAkB,EAC/B,QAAWI,KAAc,OAAO,OAAOD,CAAI,EACvC,QAAWE,KAAOD,GAAc,CAAC,EAC7B,GAAIC,EAAI,SAAW,QAAU,CAACA,EAAI,SAC9B,MAAO,UAAUA,EAAI,OAAO,IAAIH,CAAI,IAIhD,OAAO,IACX,CAEO,SAASI,EAAeJ,EAAc,CACzC,IAAMK,EAAU,eACVC,EAAaP,EAAcC,CAAI,EAErC,QAAQ,IAAI,EACZ,QAAQ,IAAI,KAAKH,EAAG,KAAKA,EAAG,OAAO,OAAO,CAAC,CAAC,IAAIA,EAAG,IAAI,IAAIQ,CAAO,EAAE,CAAC,EAAE,EACvE,QAAQ,IAAI,EACZ,QAAQ,IAAI,KAAKR,EAAG,MAAM,QAAG,CAAC,KAAKA,EAAG,KAAK,QAAQ,CAAC,MAAMA,EAAG,KAAK,oBAAoBG,CAAI,GAAG,CAAC,EAAE,EAE5F,QAAQ,IADRM,EACY,KAAKT,EAAG,MAAM,QAAG,CAAC,KAAKA,EAAG,KAAK,UAAU,CAAC,IAAIA,EAAG,KAAKS,CAAU,CAAC,GAEjE,KAAKT,EAAG,MAAM,QAAG,CAAC,KAAKA,EAAG,KAAK,UAAU,CAAC,IAAIA,EAAG,IAAI,sBAAsB,CAAC,EAFT,EAInF,QAAQ,IAAI,CAChB",
|
|
6
6
|
"names": ["pc", "networkInterfaces", "getNetworkUrl", "port", "nets", "interfaces", "net", "printDevBanner", "version", "networkUrl"]
|
|
7
7
|
}
|