@bobtail.software/b-ssr 1.0.84 → 1.1.0

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.
@@ -1 +1 @@
1
- "use strict";var D=Object.create;var R=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var I=Object.getPrototypeOf,G=Object.prototype.hasOwnProperty;var P=(t,r)=>{for(var a in r)R(t,a,{get:r[a],enumerable:!0})},T=(t,r,a,l)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of b(r))!G.call(t,o)&&o!==a&&R(t,o,{get:()=>r[o],enumerable:!(l=O(r,o))||l.enumerable});return t};var S=(t,r,a)=>(a=t!=null?D(I(t)):{},T(r||!t||!t.__esModule?R(a,"default",{value:t,enumerable:!0}):a,t)),k=t=>T(R({},"__esModule",{value:!0}),t);var H={};P(H,{default:()=>_});module.exports=k(H);var $=require("@fastify/multipart"),w=S(require("fastify-plugin"),1),v=S(require("path"),1);async function E(t=24678){let r=await import("net");return new Promise((a,l)=>{let o=r.createServer();o.listen(t,"127.0.0.1",()=>{let e=o.address(),n=typeof e=="object"&&e!==null?e.port:t;o.close(()=>a(n))}),o.on("error",e=>{e.code==="EADDRINUSE"?o.close(()=>a(E(t+1))):l(e)})})}function g(t){if(t)return t}var A=async(t,r)=>{if(t.body&&typeof t.body=="object"){let a=t.body,l={};for(let o of Object.keys(a)){let e=a[o];e&&typeof e=="object"?e.type==="field"?l[o]=e.value:e.type==="file"&&(l[o]={filename:e.filename,mimetype:e.mimetype,encoding:e.encoding,fieldname:e.fieldname,file:e.file}):l[o]=e}t.body=l}},C=async(t,r)=>{let a=e=>{if(r.errorHandler){let n=r.errorHandler(e);if(n)return n}return{message:e instanceof Error?e.message:"Internal Server Error",statusCode:500}};if(t.hasDecorator("viteInitDone")&&t.viteInitDone)return;if(!t.hasDecorator("multipartErrors"))try{let e=await import("@fastify/multipart");await t.register(e.default)}catch(e){if(e.code!=="FST_ERR_DEC_ALREADY_PRESENT")throw e}let l=process.env.NODE_ENV==="production";if(l){if(r.clientDistDir)try{let e=await import("@fastify/static"),n=v.default.resolve(r.root,r.clientDistDir);await t.register(e.default,{root:n,wildcard:!1}),console.log(`\u{1F4C2} [Fastify-SSR] Serving static assets from: ${n}`)}catch(e){console.error("\u274C [Fastify-SSR] Error registering @fastify/static. Did you install it?",e)}}else{if(!t.hasDecorator("use"))try{let c=await import("@fastify/middie");await t.register(c.default,{hook:"onRequest"})}catch(c){if(c.code!=="FST_ERR_DEC_ALREADY_PRESENT")throw c}let e=await import("vite"),n=r.viteConfig||{},f;n.server?.hmr&&typeof n.server.hmr=="object"&&"port"in n.server.hmr?f=n.server.hmr.port:f=r.hmrPort??await E();let u=await e.createServer({root:r.root,appType:"custom",...n,server:{hmr:{port:f},...n.server,middlewareMode:!0}});t.use(u.middlewares),t.hasDecorator("viteServer")||t.decorate("viteServer",u),console.log("\u{1F680} [Fastify-SSR] Vite Dev Server Ready")}t.decorate("viteInitDone",!0);let o=async(e,n,f)=>{try{let u=e.raw.url,c=r.getGlobalSettings?await r.getGlobalSettings(e):void 0;if(v.default.extname(u)!==""){n.status(404).send(`File not found: ${u}`);return}let s="";!l&&t.viteServer&&(s=await t.viteServer.transformIndexHtml(u,"<html><head></head><body></body></html>"),s=s.substring(s.indexOf("<head>")+6,s.indexOf("</head>"))),s=(c?`<script>window.__GLOBAL_SETTINGS__ = ${JSON.stringify(c)}</script>`:"")+s;let m=l?await import(v.default.resolve(r.root,r.prodEntryFile)):await t.viteServer.ssrLoadModule(r.devEntryFile),i=m.render||m.default;if(typeof i!="function")throw new Error(`Entry file ${r.devEntryFile} must export a 'render' function.`);await i({req:e,reply:n,head:s,data:f,globalSettings:c})}catch(u){t.viteServer?.ssrFixStacktrace(u),console.error("[SSR Error]:",u),n.sent||n.status(500).send("Internal Server Error")}};t.decorate("addRpcRoute",function(e,n){let{handler:f,schema:u,...c}=n,s=`/rpc${e}`,p=g(u),m={...c,schema:p};n?.schema?.consumes?.includes("multipart/form-data")&&(m.preValidation=A),this.route({method:"POST",url:s,...m,handler:async(h,d)=>{try{let y=await f.call(this,h,d);return d.sent?void 0:y}catch(y){if(console.error(`[RPC Error] ${s}:`,y),!d.sent){let{statusCode:F,message:x}=a(y);d.status(F).send({error:{message:x}})}}}})}),t.decorate("addRenderRoute",function(e,n){let{handler:f,schema:u,...c}=n||{},s=g(u),p=async(m,i,h)=>{try{let d=await f?.call(this,m,i);return h?d:o(m,i,d)}catch(d){if(console.error(`[Render Error] ${e}:`,d),!i.sent){let{statusCode:y,message:F}=a(d);if(h)i.status(y).send({error:{message:F}});else return o(m,i,{ssrError:{statusCode:500,message:"Internal Error"}})}}};if(this.route({method:"GET",url:e,schema:s,...c,handler:(m,i)=>p(m,i,!1)}),e!=="*"&&e!=="/*"){this.route({method:"GET",url:`/loader${e}`,schema:s,...c,handler:(h,d)=>p(h,d,!0)});let m=e.endsWith("/")?"*":"/*",i=`${e}${m}`;this.route({method:"GET",url:i,schema:s,...c,handler:(h,d)=>p(h,d,!1)})}}),t.decorate("addLoaderRoute",function(e,n){let{handler:f,schema:u,...c}=n,s=`/api${e}`,p=g(u);this.route({method:"GET",url:s,schema:p,...c,handler:async(m,i)=>{try{let h=await f.call(this,m,i);return i.sent?void 0:h}catch(h){if(console.error(`[Loader API Error] ${s}:`,h),!i.sent){let{statusCode:d,message:y}=a(h);i.status(d).send({error:{message:y}})}}}})})},_=(0,w.default)(C,{name:"fastify-b-ssr"});
1
+ "use strict";var D=Object.create;var R=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var I=Object.getPrototypeOf,G=Object.prototype.hasOwnProperty;var P=(t,r)=>{for(var a in r)R(t,a,{get:r[a],enumerable:!0})},T=(t,r,a,l)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of b(r))!G.call(t,o)&&o!==a&&R(t,o,{get:()=>r[o],enumerable:!(l=O(r,o))||l.enumerable});return t};var S=(t,r,a)=>(a=t!=null?D(I(t)):{},T(r||!t||!t.__esModule?R(a,"default",{value:t,enumerable:!0}):a,t)),k=t=>T(R({},"__esModule",{value:!0}),t);var H={};P(H,{default:()=>_});module.exports=k(H);var $=require("@fastify/multipart"),w=S(require("fastify-plugin"),1),v=S(require("path"),1);async function E(t=24678){let r=await import("net");return new Promise((a,l)=>{let o=r.createServer();o.listen(t,"127.0.0.1",()=>{let e=o.address(),n=typeof e=="object"&&e!==null?e.port:t;o.close(()=>a(n))}),o.on("error",e=>{e.code==="EADDRINUSE"?o.close(()=>a(E(t+1))):l(e)})})}function g(t){if(t)return t}var A=async(t,r)=>{if(t.body&&typeof t.body=="object"){let a=t.body,l={};for(let o of Object.keys(a)){let e=a[o];e&&typeof e=="object"?e.type==="field"?l[o]=e.value:e.type==="file"&&(l[o]={filename:e.filename,mimetype:e.mimetype,encoding:e.encoding,fieldname:e.fieldname,file:e.file}):l[o]=e}t.body=l}},C=async(t,r)=>{let a=e=>{if(r.errorHandler){let n=r.errorHandler(e);if(n)return n}return{message:"Internal Server Error",statusCode:500}};if(t.hasDecorator("viteInitDone")&&t.viteInitDone)return;if(!t.hasDecorator("multipartErrors"))try{let e=await import("@fastify/multipart");await t.register(e.default)}catch(e){if(e.code!=="FST_ERR_DEC_ALREADY_PRESENT")throw e}let l=process.env.NODE_ENV==="production";if(l){if(r.clientDistDir)try{let e=await import("@fastify/static"),n=v.default.resolve(r.root,r.clientDistDir);await t.register(e.default,{root:n,wildcard:!1}),console.log(`\u{1F4C2} [Fastify-SSR] Serving static assets from: ${n}`)}catch(e){console.error("\u274C [Fastify-SSR] Error registering @fastify/static. Did you install it?",e)}}else{if(!t.hasDecorator("use"))try{let c=await import("@fastify/middie");await t.register(c.default,{hook:"onRequest"})}catch(c){if(c.code!=="FST_ERR_DEC_ALREADY_PRESENT")throw c}let e=await import("vite"),n=r.viteConfig||{},f;n.server?.hmr&&typeof n.server.hmr=="object"&&"port"in n.server.hmr?f=n.server.hmr.port:f=r.hmrPort??await E();let u=await e.createServer({root:r.root,appType:"custom",...n,server:{hmr:{port:f},...n.server,middlewareMode:!0}});t.use(u.middlewares),t.hasDecorator("viteServer")||t.decorate("viteServer",u),console.log("\u{1F680} [Fastify-SSR] Vite Dev Server Ready")}t.decorate("viteInitDone",!0);let o=async(e,n,f)=>{try{let u=e.raw.url,c=r.getGlobalSettings?await r.getGlobalSettings(e):void 0;if(v.default.extname(u)!==""){n.status(404).send(`File not found: ${u}`);return}let s="";!l&&t.viteServer&&(s=await t.viteServer.transformIndexHtml(u,"<html><head></head><body></body></html>"),s=s.substring(s.indexOf("<head>")+6,s.indexOf("</head>"))),s=(c?`<script>window.__GLOBAL_SETTINGS__ = ${JSON.stringify(c)}</script>`:"")+s;let m=l?await import(v.default.resolve(r.root,r.prodEntryFile)):await t.viteServer.ssrLoadModule(r.devEntryFile),i=m.render||m.default;if(typeof i!="function")throw new Error(`Entry file ${r.devEntryFile} must export a 'render' function.`);await i({req:e,reply:n,head:s,data:f,globalSettings:c})}catch(u){t.viteServer?.ssrFixStacktrace(u),console.error("[SSR Error]:",u),n.sent||n.status(500).send("Internal Server Error")}};t.decorate("addRpcRoute",function(e,n){let{handler:f,schema:u,...c}=n,s=`/rpc${e}`,p=g(u),m={...c,schema:p};n?.schema?.consumes?.includes("multipart/form-data")&&(m.preValidation=A),this.route({method:"POST",url:s,...m,handler:async(h,d)=>{try{let y=await f.call(this,h,d);return d.sent?void 0:y}catch(y){if(console.error(`[RPC Error] ${s}:`,y),!d.sent){let{statusCode:F,message:x}=a(y);d.status(F).send({error:{message:x}})}}}})}),t.decorate("addRenderRoute",function(e,n){let{handler:f,schema:u,...c}=n||{},s=g(u),p=async(m,i,h)=>{try{let d=await f?.call(this,m,i);return h?d:o(m,i,d)}catch(d){if(console.error(`[Render Error] ${e}:`,d),!i.sent){let{statusCode:y,message:F}=a(d);if(h)i.status(y).send({error:{message:F}});else return o(m,i,{ssrError:{statusCode:500,message:"Internal Error"}})}}};if(this.route({method:"GET",url:e,schema:s,...c,handler:(m,i)=>p(m,i,!1)}),e!=="*"&&e!=="/*"){this.route({method:"GET",url:`/loader${e}`,schema:s,...c,handler:(h,d)=>p(h,d,!0)});let m=e.endsWith("/")?"*":"/*",i=`${e}${m}`;this.route({method:"GET",url:i,schema:s,...c,handler:(h,d)=>p(h,d,!1)})}}),t.decorate("addLoaderRoute",function(e,n){let{handler:f,schema:u,...c}=n,s=`/api${e}`,p=g(u);this.route({method:"GET",url:s,schema:p,...c,handler:async(m,i)=>{try{let h=await f.call(this,m,i);return i.sent?void 0:h}catch(h){if(console.error(`[Loader API Error] ${s}:`,h),!i.sent){let{statusCode:d,message:y}=a(h);i.status(d).send({error:{message:y}})}}}})})},_=(0,w.default)(C,{name:"fastify-b-ssr"});
@@ -1 +1 @@
1
- import"@fastify/multipart";import T from"fastify-plugin";import R from"path";async function F(t=24678){let a=await import("net");return new Promise((f,h)=>{let u=a.createServer();u.listen(t,"127.0.0.1",()=>{let e=u.address(),r=typeof e=="object"&&e!==null?e.port:t;u.close(()=>f(r))}),u.on("error",e=>{e.code==="EADDRINUSE"?u.close(()=>f(F(t+1))):h(e)})})}function v(t){if(t)return t}var w=async(t,a)=>{if(t.body&&typeof t.body=="object"){let f=t.body,h={};for(let u of Object.keys(f)){let e=f[u];e&&typeof e=="object"?e.type==="field"?h[u]=e.value:e.type==="file"&&(h[u]={filename:e.filename,mimetype:e.mimetype,encoding:e.encoding,fieldname:e.fieldname,file:e.file}):h[u]=e}t.body=h}},E=async(t,a)=>{let f=e=>{if(a.errorHandler){let r=a.errorHandler(e);if(r)return r}return{message:e instanceof Error?e.message:"Internal Server Error",statusCode:500}};if(t.hasDecorator("viteInitDone")&&t.viteInitDone)return;if(!t.hasDecorator("multipartErrors"))try{let e=await import("@fastify/multipart");await t.register(e.default)}catch(e){if(e.code!=="FST_ERR_DEC_ALREADY_PRESENT")throw e}let h=process.env.NODE_ENV==="production";if(h){if(a.clientDistDir)try{let e=await import("@fastify/static"),r=R.resolve(a.root,a.clientDistDir);await t.register(e.default,{root:r,wildcard:!1}),console.log(`\u{1F4C2} [Fastify-SSR] Serving static assets from: ${r}`)}catch(e){console.error("\u274C [Fastify-SSR] Error registering @fastify/static. Did you install it?",e)}}else{if(!t.hasDecorator("use"))try{let s=await import("@fastify/middie");await t.register(s.default,{hook:"onRequest"})}catch(s){if(s.code!=="FST_ERR_DEC_ALREADY_PRESENT")throw s}let e=await import("vite"),r=a.viteConfig||{},l;r.server?.hmr&&typeof r.server.hmr=="object"&&"port"in r.server.hmr?l=r.server.hmr.port:l=a.hmrPort??await F();let c=await e.createServer({root:a.root,appType:"custom",...r,server:{hmr:{port:l},...r.server,middlewareMode:!0}});t.use(c.middlewares),t.hasDecorator("viteServer")||t.decorate("viteServer",c),console.log("\u{1F680} [Fastify-SSR] Vite Dev Server Ready")}t.decorate("viteInitDone",!0);let u=async(e,r,l)=>{try{let c=e.raw.url,s=a.getGlobalSettings?await a.getGlobalSettings(e):void 0;if(R.extname(c)!==""){r.status(404).send(`File not found: ${c}`);return}let n="";!h&&t.viteServer&&(n=await t.viteServer.transformIndexHtml(c,"<html><head></head><body></body></html>"),n=n.substring(n.indexOf("<head>")+6,n.indexOf("</head>"))),n=(s?`<script>window.__GLOBAL_SETTINGS__ = ${JSON.stringify(s)}</script>`:"")+n;let d=h?await import(R.resolve(a.root,a.prodEntryFile)):await t.viteServer.ssrLoadModule(a.devEntryFile),o=d.render||d.default;if(typeof o!="function")throw new Error(`Entry file ${a.devEntryFile} must export a 'render' function.`);await o({req:e,reply:r,head:n,data:l,globalSettings:s})}catch(c){t.viteServer?.ssrFixStacktrace(c),console.error("[SSR Error]:",c),r.sent||r.status(500).send("Internal Server Error")}};t.decorate("addRpcRoute",function(e,r){let{handler:l,schema:c,...s}=r,n=`/rpc${e}`,p=v(c),d={...s,schema:p};r?.schema?.consumes?.includes("multipart/form-data")&&(d.preValidation=w),this.route({method:"POST",url:n,...d,handler:async(m,i)=>{try{let y=await l.call(this,m,i);return i.sent?void 0:y}catch(y){if(console.error(`[RPC Error] ${n}:`,y),!i.sent){let{statusCode:S,message:g}=f(y);i.status(S).send({error:{message:g}})}}}})}),t.decorate("addRenderRoute",function(e,r){let{handler:l,schema:c,...s}=r||{},n=v(c),p=async(d,o,m)=>{try{let i=await l?.call(this,d,o);return m?i:u(d,o,i)}catch(i){if(console.error(`[Render Error] ${e}:`,i),!o.sent){let{statusCode:y,message:S}=f(i);if(m)o.status(y).send({error:{message:S}});else return u(d,o,{ssrError:{statusCode:500,message:"Internal Error"}})}}};if(this.route({method:"GET",url:e,schema:n,...s,handler:(d,o)=>p(d,o,!1)}),e!=="*"&&e!=="/*"){this.route({method:"GET",url:`/loader${e}`,schema:n,...s,handler:(m,i)=>p(m,i,!0)});let d=e.endsWith("/")?"*":"/*",o=`${e}${d}`;this.route({method:"GET",url:o,schema:n,...s,handler:(m,i)=>p(m,i,!1)})}}),t.decorate("addLoaderRoute",function(e,r){let{handler:l,schema:c,...s}=r,n=`/api${e}`,p=v(c);this.route({method:"GET",url:n,schema:p,...s,handler:async(d,o)=>{try{let m=await l.call(this,d,o);return o.sent?void 0:m}catch(m){if(console.error(`[Loader API Error] ${n}:`,m),!o.sent){let{statusCode:i,message:y}=f(m);o.status(i).send({error:{message:y}})}}}})})},b=T(E,{name:"fastify-b-ssr"});export{b as default};
1
+ import"@fastify/multipart";import T from"fastify-plugin";import R from"path";async function F(t=24678){let a=await import("net");return new Promise((f,h)=>{let u=a.createServer();u.listen(t,"127.0.0.1",()=>{let e=u.address(),r=typeof e=="object"&&e!==null?e.port:t;u.close(()=>f(r))}),u.on("error",e=>{e.code==="EADDRINUSE"?u.close(()=>f(F(t+1))):h(e)})})}function v(t){if(t)return t}var w=async(t,a)=>{if(t.body&&typeof t.body=="object"){let f=t.body,h={};for(let u of Object.keys(f)){let e=f[u];e&&typeof e=="object"?e.type==="field"?h[u]=e.value:e.type==="file"&&(h[u]={filename:e.filename,mimetype:e.mimetype,encoding:e.encoding,fieldname:e.fieldname,file:e.file}):h[u]=e}t.body=h}},E=async(t,a)=>{let f=e=>{if(a.errorHandler){let r=a.errorHandler(e);if(r)return r}return{message:"Internal Server Error",statusCode:500}};if(t.hasDecorator("viteInitDone")&&t.viteInitDone)return;if(!t.hasDecorator("multipartErrors"))try{let e=await import("@fastify/multipart");await t.register(e.default)}catch(e){if(e.code!=="FST_ERR_DEC_ALREADY_PRESENT")throw e}let h=process.env.NODE_ENV==="production";if(h){if(a.clientDistDir)try{let e=await import("@fastify/static"),r=R.resolve(a.root,a.clientDistDir);await t.register(e.default,{root:r,wildcard:!1}),console.log(`\u{1F4C2} [Fastify-SSR] Serving static assets from: ${r}`)}catch(e){console.error("\u274C [Fastify-SSR] Error registering @fastify/static. Did you install it?",e)}}else{if(!t.hasDecorator("use"))try{let s=await import("@fastify/middie");await t.register(s.default,{hook:"onRequest"})}catch(s){if(s.code!=="FST_ERR_DEC_ALREADY_PRESENT")throw s}let e=await import("vite"),r=a.viteConfig||{},l;r.server?.hmr&&typeof r.server.hmr=="object"&&"port"in r.server.hmr?l=r.server.hmr.port:l=a.hmrPort??await F();let c=await e.createServer({root:a.root,appType:"custom",...r,server:{hmr:{port:l},...r.server,middlewareMode:!0}});t.use(c.middlewares),t.hasDecorator("viteServer")||t.decorate("viteServer",c),console.log("\u{1F680} [Fastify-SSR] Vite Dev Server Ready")}t.decorate("viteInitDone",!0);let u=async(e,r,l)=>{try{let c=e.raw.url,s=a.getGlobalSettings?await a.getGlobalSettings(e):void 0;if(R.extname(c)!==""){r.status(404).send(`File not found: ${c}`);return}let n="";!h&&t.viteServer&&(n=await t.viteServer.transformIndexHtml(c,"<html><head></head><body></body></html>"),n=n.substring(n.indexOf("<head>")+6,n.indexOf("</head>"))),n=(s?`<script>window.__GLOBAL_SETTINGS__ = ${JSON.stringify(s)}</script>`:"")+n;let d=h?await import(R.resolve(a.root,a.prodEntryFile)):await t.viteServer.ssrLoadModule(a.devEntryFile),o=d.render||d.default;if(typeof o!="function")throw new Error(`Entry file ${a.devEntryFile} must export a 'render' function.`);await o({req:e,reply:r,head:n,data:l,globalSettings:s})}catch(c){t.viteServer?.ssrFixStacktrace(c),console.error("[SSR Error]:",c),r.sent||r.status(500).send("Internal Server Error")}};t.decorate("addRpcRoute",function(e,r){let{handler:l,schema:c,...s}=r,n=`/rpc${e}`,p=v(c),d={...s,schema:p};r?.schema?.consumes?.includes("multipart/form-data")&&(d.preValidation=w),this.route({method:"POST",url:n,...d,handler:async(m,i)=>{try{let y=await l.call(this,m,i);return i.sent?void 0:y}catch(y){if(console.error(`[RPC Error] ${n}:`,y),!i.sent){let{statusCode:S,message:g}=f(y);i.status(S).send({error:{message:g}})}}}})}),t.decorate("addRenderRoute",function(e,r){let{handler:l,schema:c,...s}=r||{},n=v(c),p=async(d,o,m)=>{try{let i=await l?.call(this,d,o);return m?i:u(d,o,i)}catch(i){if(console.error(`[Render Error] ${e}:`,i),!o.sent){let{statusCode:y,message:S}=f(i);if(m)o.status(y).send({error:{message:S}});else return u(d,o,{ssrError:{statusCode:500,message:"Internal Error"}})}}};if(this.route({method:"GET",url:e,schema:n,...s,handler:(d,o)=>p(d,o,!1)}),e!=="*"&&e!=="/*"){this.route({method:"GET",url:`/loader${e}`,schema:n,...s,handler:(m,i)=>p(m,i,!0)});let d=e.endsWith("/")?"*":"/*",o=`${e}${d}`;this.route({method:"GET",url:o,schema:n,...s,handler:(m,i)=>p(m,i,!1)})}}),t.decorate("addLoaderRoute",function(e,r){let{handler:l,schema:c,...s}=r,n=`/api${e}`,p=v(c);this.route({method:"GET",url:n,schema:p,...s,handler:async(d,o)=>{try{let m=await l.call(this,d,o);return o.sent?void 0:m}catch(m){if(console.error(`[Loader API Error] ${n}:`,m),!o.sent){let{statusCode:i,message:y}=f(m);o.status(i).send({error:{message:y}})}}}})})},b=T(E,{name:"fastify-b-ssr"});export{b as default};
@@ -1,9 +1,9 @@
1
- "use strict";var Te=Object.create;var z=Object.defineProperty;var be=Object.getOwnPropertyDescriptor;var Fe=Object.getOwnPropertyNames;var xe=Object.getPrototypeOf,Pe=Object.prototype.hasOwnProperty;var Se=(t,a)=>{for(var u in a)z(t,u,{get:a[u],enumerable:!0})},le=(t,a,u,b)=>{if(a&&typeof a=="object"||typeof a=="function")for(let f of Fe(a))!Pe.call(t,f)&&f!==u&&z(t,f,{get:()=>a[f],enumerable:!(b=be(a,f))||b.enumerable});return t};var ce=(t,a,u)=>(u=t!=null?Te(xe(t)):{},le(a||!t||!t.__esModule?z(u,"default",{value:t,enumerable:!0}):u,t)),we=t=>le(z({},"__esModule",{value:!0}),t);var je={};Se(je,{generateRpcTypes:()=>Ce});module.exports=we(je);var Y=ce(require("fast-glob"),1),v=require("fs/promises"),d=ce(require("path"),1),U=require("prettier"),r=require("ts-morph");function Ae(t){let a=t.replace(/[^a-zA-Z0-9]+(.)?/g,(u,b)=>b?b.toUpperCase():"");return a.charAt(0).toLowerCase()+a.slice(1)}function X(t,a,u){let b=d.default.basename(u,d.default.extname(u))||"Index",f=a.replace(/:[a-zA-Z0-9_]+/g,"").replace(/\//g," "),x=`${t} ${f} ${b}`;return Ae(x)}function Ee(t){let a=/([a-zA-Z_$][a-zA-Z0-9_$]*(?:\s*\|\s*)?)+/g,u=/'[^']+'/g,b=/`[^`]+`/g,f=t,x=[],i,A=t.replace(/[^'`]*/g,L=>" ".repeat(L.length));for(;(i=u.exec(t))!==null;)x.push({start:i.index,end:i.index+i[0].length,value:i[0]});for(;(i=b.exec(t))!==null;)x.push({start:i.index,end:i.index+i[0].length,value:i[0]});if(x.length>1){let L=x.map(P=>P.value).sort((P,p)=>{let F=P.replace(/['`]/g,""),K=p.replace(/['`]/g,"");return F.localeCompare(K)}),E=0,M=[...L].sort((P,p)=>{let F=P.replace(/['`]/g,""),K=p.replace(/['`]/g,"");return F.localeCompare(K)}),O="",k=0;for(let P=0;P<x.length;P++)O+=t.slice(k,x[P].start),O+=M[P],k=x[P].end;O+=t.slice(k),f=O}return f}function $e(t){let a=t.match(/^\{([\s\S]*)\}$/);if(!a)return t;let u=a[1];if(!u.includes(":"))return t;let b=u.split(/[;,]/).map(i=>i.trim()).filter(i=>i),f=[];for(let i of b){let A=i.indexOf(":");if(A===-1)continue;let L=i.slice(0,A).trim(),E=i.slice(A+1).trim();f.push({name:L,value:E})}return f.length<=1?t:(f.sort((i,A)=>i.name.localeCompare(A.name)),`{ ${f.map(i=>`${i.name}: ${i.value}`).join("; ")} }`)}function W(t){let a=Ee(t);return a=$e(a),a}async function Ce(t={}){let{routerPattern:a="src-ts/routers/**/*.mts",tsConfigFilePath:u="tsconfig.json",routerBaseDir:b="src-ts/routers",clean:f=!1}=t,x=[],i=[],A=[];try{let k=function(p){let F=[];return p.paramsType!=="unknown"&&F.push(`params: ${p.paramsType}`),p.queryType!=="unknown"&&F.push(`query: ${p.queryType}`),p.bodyType!=="unknown"&&F.push(`body: ${p.bodyType}`),F.push("signal?: AbortSignal"),F};var L=k;let E=new r.Project({tsConfigFilePath:u,skipAddingFilesFromTsConfig:!1}),M=d.default.resolve(process.cwd(),b||".");async function O(p){try{let I=function(e){return e.replace(/import\(['"](.*?)['"]\)/g,(n,s)=>{if(!d.default.isAbsolute(s))return n;let o=s;if(!d.default.extname(o)){let T=E.getSourceFile(y=>y.getFilePath().replace(/\.(mts|ts|tsx)$/,"")===s);T&&(o=T.getFilePath())}let l=d.default.relative(d.default.dirname($),o).replace(/\\/g,"/");return l.startsWith(".")||(l="./"+l),`import("${l}")`})},j=function(e,n){if(e.getSymbol()?.getName()==="Promise"){let c=e.getAwaitedType();if(c)return`Promise<${j(c,n)}>`}let s=e.getAliasSymbol()??e.getSymbol();if(s?.getName()==="__object")return W(I(e.getText(n,r.ts.TypeFormatFlags.NoTruncation|r.ts.TypeFormatFlags.UseFullyQualifiedType)));if(e.isObject()&&!s){let c=(m,g=0)=>{if(!(g>5)){if(m.isArray()){let h=m.getArrayElementType();h&&c(h,g);return}if(m.isObject()&&!m.getSymbol()&&!m.getAliasSymbol()){for(let h of m.getApparentProperties()){let N=h.getValueDeclaration();N&&c(h.getTypeAtLocation(N),g+1)}return}j(m,n)}};return c(e),W(I(e.getText(n,r.ts.TypeFormatFlags.NoTruncation|r.ts.TypeFormatFlags.UseFullyQualifiedType)))}if(!s)return W(I(e.getText(n,r.ts.TypeFormatFlags.NoTruncation)));let o=s.getDeclarations()[0];if(!o)return s.getName();if(r.Node.isImportSpecifier(o)||r.Node.isImportClause(o)){let c=o.getFirstAncestorByKind(r.SyntaxKind.ImportDeclaration);if(c){let m=c.getModuleSpecifierValue(),g=s.getName();return w.has(m)||w.set(m,new Set),w.get(m)?.add(g),g}}let l=o.getSourceFile();if(l.getFilePath()===R.getFilePath())return s.getName();if(l.isInNodeModules())return W(I(e.getText(n,r.ts.TypeFormatFlags.NoTruncation)));let T=d.default.relative(d.default.dirname($),l.getFilePath()).replace(/\\/g,"/"),C=T.startsWith(".")?T:`./${T}`,S=s.getName();return w.has(C)||w.set(C,new Set),w.get(C)?.add(S),S},ne=function(e){let n;if(r.Node.isFunctionLikeDeclaration(e)||r.Node.isArrowFunction(e)){let s=e.getDescendantsOfKind(r.SyntaxKind.ReturnStatement);for(let o of s){let l=o.getExpression();if(l?.isKind(r.SyntaxKind.SatisfiesExpression)){n=l.getTypeNode()?.getType();break}}}if(n)return j(n,e);{let s=e.getType().getCallSignatures();if(s.length>0){let o=s[0]?.getReturnType();return j(o,e)}}return"unknown"};var F=I,K=j,pe=ne;let R=E.addSourceFileAtPath(p);await R.refreshFromFileSystem(),E.resolveSourceFileDependencies();let G=R.getDescendantsOfKind(r.SyntaxKind.CallExpression),ee=G.filter(e=>e.getExpression().getText().endsWith(".addRpcRoute")),te=G.filter(e=>e.getExpression().getText().endsWith(".addRenderRoute")),re=G.filter(e=>e.getExpression().getText().endsWith(".addLoaderRoute")),ge=d.default.extname(p),$=p.substring(0,p.length-ge.length)+".universal.d.ts";if(ee.length===0&&te.length===0&&re.length===0){if(f)try{await(0,v.unlink)($),i.push($)}catch{}return!1}let V=[],w=new Map;w.has("fastify")||w.set("fastify",new Set),w.get("fastify")?.add("FastifyRequest"),w.get("fastify")?.add("FastifyReply");let ue=e=>{let n="unknown",s="unknown",o="unknown",l=!1;if(!e||!r.Node.isObjectLiteralExpression(e))return{paramsType:n,queryType:s,bodyType:o,isMultipart:l};let T=e.getProperty("schema");if(T?.isKind(r.SyntaxKind.PropertyAssignment)){let y=T.getInitializer();if(y?.isKind(r.SyntaxKind.Identifier)){let S=y.getSymbol()?.getValueDeclaration();if(S){let c=S.getFirstDescendantByKind(r.SyntaxKind.ObjectLiteralExpression);c&&(y=c)}}if(y&&r.Node.isObjectLiteralExpression(y)){let C=y.getProperty("consumes");if(C?.isKind(r.SyntaxKind.PropertyAssignment)){let c=C.getInitializer();r.Node.isArrayLiteralExpression(c)&&(l=c.getElements().some(m=>m.isKind(r.SyntaxKind.StringLiteral)&&m.getLiteralValue()==="multipart/form-data"))}let S=c=>{let m=y.getProperty(c);if(m?.isKind(r.SyntaxKind.PropertyAssignment)){let g=m.getInitializer();if(g){let h=g.getType(),N=h.getApparentType(),q=N.getProperty("_output");if(q)return j(q.getTypeAtLocation(g).getApparentType(),g);let D=h.getSymbol(),de=h.getAliasSymbol(),H=D?.getName(),J=de?.getName();if(H&&H!=="__type"&&H!=="object"||J&&J!=="__type"&&J!=="object")return j(h,g);let ie=N.getProperties();if(ie.length>0){let oe=[];for(let ae of ie){let he=ae.getTypeAtLocation(g);oe.push(`${ae.getName()}: ${he.getText(g)}`)}return`{ ${oe.join("; ")} }`}return j(h,g)}}return"unknown"};if(n=S("params"),s=S("querystring"),o=S("body"),l){let c="{ file: File }";o=o!=="unknown"&&o.trim().startsWith("{")?`(${o} & ${c})`:c}}}return{paramsType:n,queryType:s,bodyType:o,isMultipart:l}},_=d.default.relative(M,d.default.dirname(p)).split(d.default.sep).join("/"),fe=_==="."||!_?"":_.startsWith("/")?_:"/"+_,B=(e,n)=>{let[s,o]=e.getArguments();if(!s?.isKind(r.SyntaxKind.StringLiteral))return;let l=s.getLiteralValue(),T="unknown",y=fe,{paramsType:C,queryType:S,bodyType:c,isMultipart:m}=ue(o);if(o?.isKind(r.SyntaxKind.ObjectLiteralExpression)){let N=o.getProperty("prefix");if(N?.isKind(r.SyntaxKind.PropertyAssignment)){let D=N.getInitializer();D?.isKind(r.SyntaxKind.StringLiteral)&&(y=D.getLiteralValue())}let q=o.getProperty("handler");if(q?.isKind(r.SyntaxKind.PropertyAssignment)){let D=q.getInitializer();D&&(T=ne(D),T.startsWith("Promise<")||(T=`Promise<${T}>`))}}let g="",h="";n==="rpc"?(g=d.default.join(y,"rpc",l).replace(/\\/g,"/"),h=X("action",y,l)):n==="loader"?(g=d.default.join(y,"loader",l).replace(/\\/g,"/"),h=X("loader",y,l)):n==="api"&&(g=d.default.join(y,"api",l).replace(/\\/g,"/"),h=X("get",y,l)),h&&V.push({type:n,name:h,returnType:T,url:l,rpcUrl:g,loaderUrl:g,paramsType:C,queryType:S,bodyType:c,isMultipart:m})};if(ee.forEach(e=>B(e,"rpc")),te.forEach(e=>B(e,"loader")),re.forEach(e=>B(e,"api")),V.length===0){if(f)try{await(0,v.unlink)($),i.push($)}catch{}return!1}let Z=[],me=[...w.entries()].sort((e,n)=>e[0].localeCompare(n[0]));for(let[e,n]of me)Z.push(`import type { ${[...n].sort().join(", ")} } from "${e}";`);let ye=[...V].sort((e,n)=>e.name.localeCompare(n.name)),se=[];ye.forEach(e=>{let n=k(e),s="";n.length>0&&(s=`args: { ${n.join("; ")} }`),s||(s="args: { signal?: AbortSignal }"),se.push(`export declare const ${e.name}: (${s}, ssrContext?: { req?: FastifyRequest, reply?: FastifyReply }) => ${e.returnType};`)});let Q=`// AUTO-GENERATED by @bobtail.software/b-ssr. DO NOT EDIT.
1
+ "use strict";var ge=Object.create;var W=Object.defineProperty;var ue=Object.getOwnPropertyDescriptor;var fe=Object.getOwnPropertyNames;var me=Object.getPrototypeOf,ye=Object.prototype.hasOwnProperty;var de=(e,t)=>{for(var r in t)W(e,r,{get:t[r],enumerable:!0})},Y=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of fe(t))!ye.call(e,s)&&s!==r&&W(e,s,{get:()=>t[s],enumerable:!(n=ue(t,s))||n.enumerable});return e};var Z=(e,t,r)=>(r=e!=null?ge(me(e)):{},Y(t||!e||!e.__esModule?W(r,"default",{value:e,enumerable:!0}):r,e)),Te=e=>Y(W({},"__esModule",{value:!0}),e);var we={};de(we,{generateRpcTypes:()=>Se});module.exports=Te(we);var H=Z(require("fast-glob"),1),N=require("fs/promises"),w=Z(require("path"),1),A=require("ts-morph");var U=require("fs/promises"),P=Z(require("path"),1),V=require("prettier"),p=require("ts-morph");function he(e){let t=e.replace(/[^a-zA-Z0-9]+(.)?/g,(r,n)=>n?n.toUpperCase():"");return t.charAt(0).toLowerCase()+t.slice(1)}function B(e,t,r){let n=P.default.basename(r,P.default.extname(r))||"Index",s=t.replace(/:[a-zA-Z0-9_]+/g,"").replace(/\//g," "),g=`${e} ${s} ${n}`;return he(g)}function xe(e){let t=/'[^']+'/g,r=/`[^`]+`/g,n=[],s,g=/'[^']+'/g;for(;(s=g.exec(e))!==null;)n.push({start:s.index,end:s.index+s[0].length,value:s[0]});let o=/`[^`]+`/g;for(;(s=o.exec(e))!==null;)n.push({start:s.index,end:s.index+s[0].length,value:s[0]});if(n.length>1){let a=[...n].sort((m,F)=>{let f=m.value.replace(/['`]/g,""),i=F.value.replace(/['`]/g,"");return f.localeCompare(i)}),c="",T=0;for(let m=0;m<n.length;m++)c+=e.slice(T,n[m].start),c+=a[m].value,T=n[m].end;return c+=e.slice(T),c}return e}function be(e){let t=e.match(/^\{([\s\S]*)\}$/);if(!t)return e;let r=t[1];if(!r.includes(":"))return e;let n=r.split(/[;,]/).map(o=>o.trim()).filter(o=>o),s=[];for(let o of n){let a=o.indexOf(":");if(a===-1)continue;let c=o.slice(0,a).trim(),T=o.slice(a+1).trim();s.push({name:c,value:T})}return s.length<=1?e:(s.sort((o,a)=>o.name.localeCompare(a.name)),`{ ${s.map(o=>`${o.name}: ${o.value}`).join("; ")} }`)}function G(e){let t=xe(e);return t=be(t),t}async function ee(e,t){try{if(await(0,U.readFile)(e,"utf-8")===t)return!1}catch{}let r=t;try{let n=await(0,V.resolveConfig)(e)||{};r=await(0,V.format)(t,{...n,parser:"typescript",filepath:e})}catch{}try{if(await(0,U.readFile)(e,"utf-8")===r)return!1}catch{}return await(0,U.writeFile)(e,r),!0}function j(e,t,r,n,s,g){function o(i){return i.replace(/import\(['"](.*?)['"]\)/g,(l,u)=>{if(!P.default.isAbsolute(u))return l;let d=u;if(!P.default.extname(d)){let E=s.getSourceFile(x=>x.getFilePath().replace(/\.(mts|ts|tsx)$/,"")===u);E&&(d=E.getFilePath())}let h=P.default.relative(P.default.dirname(n),d).replace(/\\/g,"/");return h.startsWith(".")||(h="./"+h),`import("${h}")`})}if(e.getSymbol()?.getName()==="Promise"){let i=e.getAwaitedType();if(i)return`Promise<${j(i,t,r,n,s,g)}>`}let a=e.getAliasSymbol()??e.getSymbol();if(a?.getName()==="__object")return G(o(e.getText(t,p.ts.TypeFormatFlags.NoTruncation|p.ts.TypeFormatFlags.UseFullyQualifiedType)));if(e.isObject()&&!a){let i=(l,u=0)=>{if(!(u>5)){if(l.isArray()){let d=l.getArrayElementType();d&&i(d,u);return}if(l.isObject()&&!l.getSymbol()&&!l.getAliasSymbol()){for(let d of l.getApparentProperties()){let h=d.getValueDeclaration();h&&i(d.getTypeAtLocation(h),u+1)}return}j(l,t,r,n,s,g)}};return i(e),G(o(e.getText(t,p.ts.TypeFormatFlags.NoTruncation|p.ts.TypeFormatFlags.UseFullyQualifiedType)))}if(!a)return G(o(e.getText(t,p.ts.TypeFormatFlags.NoTruncation)));let c=a.getDeclarations()[0];if(!c)return a.getName();if(p.Node.isImportSpecifier(c)||p.Node.isImportClause(c)){let i=c.getFirstAncestorByKind(p.SyntaxKind.ImportDeclaration);if(i){let l=i.getModuleSpecifierValue(),u=a.getName();return g.has(l)||g.set(l,new Set),g.get(l)?.add(u),u}}let T=c.getSourceFile();if(T.getFilePath()===r.getFilePath())return a.getName();if(T.isInNodeModules())return G(o(e.getText(t,p.ts.TypeFormatFlags.NoTruncation)));let m=P.default.relative(P.default.dirname(n),T.getFilePath()).replace(/\\/g,"/"),F=m.startsWith(".")?m:`./${m}`,f=a.getName();return g.has(F)||g.set(F,new Set),g.get(F)?.add(f),f}function te(e,t,r,n,s){let g;if(p.Node.isFunctionLikeDeclaration(e)||p.Node.isArrowFunction(e)){let o=e.getDescendantsOfKind(p.SyntaxKind.ReturnStatement);for(let a of o){let c=a.getExpression();if(c?.isKind(p.SyntaxKind.SatisfiesExpression)){g=c.getTypeNode()?.getType();break}}}if(g)return j(g,e,t,r,n,s);{let o=e.getType().getCallSignatures();if(o.length>0){let a=o[0]?.getReturnType();return j(a,e,t,r,n,s)}}return"unknown"}function ne(e,t,r,n,s){let g="unknown",o="unknown",a="unknown",c=!1;if(!e||!p.Node.isObjectLiteralExpression(e))return{paramsType:g,queryType:o,bodyType:a,isMultipart:c};let T=e.getProperty("schema");if(T?.isKind(p.SyntaxKind.PropertyAssignment)){let m=T.getInitializer();if(m?.isKind(p.SyntaxKind.Identifier)){let f=m.getSymbol()?.getValueDeclaration();if(f){let i=f.getFirstDescendantByKind(p.SyntaxKind.ObjectLiteralExpression);i&&(m=i)}}if(m&&p.Node.isObjectLiteralExpression(m)){let F=m.getProperty("consumes");if(F?.isKind(p.SyntaxKind.PropertyAssignment)){let i=F.getInitializer();p.Node.isArrayLiteralExpression(i)&&(c=i.getElements().some(l=>l.isKind(p.SyntaxKind.StringLiteral)&&l.getLiteralValue()==="multipart/form-data"))}let f=i=>{let l=m.getProperty(i);if(l?.isKind(p.SyntaxKind.PropertyAssignment)){let u=l.getInitializer();if(u){let d=u.getType(),h=d.getApparentType(),E=h.getProperty("_output");if(E)return j(E.getTypeAtLocation(u).getApparentType(),u,t,r,n,s);let x=d.getSymbol(),v=d.getAliasSymbol(),b=x?.getName(),I=v?.getName();if(b&&b!=="__type"&&b!=="object"||I&&I!=="__type"&&I!=="object")return j(d,u,t,r,n,s);let C=h.getProperties();if(C.length>0){let _=[];for(let D of C){let k=D.getTypeAtLocation(u);_.push(`${D.getName()}: ${k.getText(u)}`)}return`{ ${_.join("; ")} }`}return j(d,u,t,r,n,s)}}return"unknown"};if(g=f("params"),o=f("querystring"),a=f("body"),c){let i="{ file: File }";a=a!=="unknown"&&a.trim().startsWith("{")?`(${a} & ${i})`:i}}}return{paramsType:g,queryType:o,bodyType:a,isMultipart:c}}function Fe(e){let t=[];return e.paramsType!=="unknown"&&t.push(`params: ${e.paramsType}`),e.queryType!=="unknown"&&t.push(`query: ${e.queryType}`),e.bodyType!=="unknown"&&t.push(`body: ${e.bodyType}`),t.push("signal?: AbortSignal"),t}function re(e){let t=Fe(e),r="";return t.length>0&&(r=`args: { ${t.join("; ")} }`),r||(r="args: { signal?: AbortSignal }"),`export declare const ${e.name}: (${r}, ssrContext?: { req?: FastifyRequest, reply?: FastifyReply }) => ${e.returnType};`}async function Se(e={}){let{routerPattern:t="src-ts/routers/**/*.mts",tsConfigFilePath:r="tsconfig.json",routerBaseDir:n="src-ts/routers",clean:s=!1}=e,g=[],o=[],a=[];try{let c=new A.Project({tsConfigFilePath:r,skipAddingFilesFromTsConfig:!1}),T=w.default.resolve(process.cwd(),n||".");async function m(f){try{let i=c.addSourceFileAtPath(f);await i.refreshFromFileSystem();let l=i.getDescendantsOfKind(A.SyntaxKind.CallExpression),u=l.filter(y=>y.getExpression().getText().endsWith(".addRpcRoute")),d=l.filter(y=>y.getExpression().getText().endsWith(".addRenderRoute")),h=l.filter(y=>y.getExpression().getText().endsWith(".addLoaderRoute")),E=w.default.extname(f),x=f.substring(0,f.length-E.length)+".universal.d.ts";if(u.length===0&&d.length===0&&h.length===0){if(s)try{await(0,N.unlink)(x),o.push(x)}catch{}return!1}let v=[],b=new Map;b.has("fastify")||b.set("fastify",new Set),b.get("fastify")?.add("FastifyRequest"),b.get("fastify")?.add("FastifyReply");let C=w.default.relative(T,w.default.dirname(f)).split(w.default.sep).join("/"),_=C==="."||!C?"":C.startsWith("/")?C:"/"+C,D=(y,S)=>{let[q,z]=y.getArguments();if(!q?.isKind(A.SyntaxKind.StringLiteral))return;let R=q.getLiteralValue(),L="unknown",$=_,{paramsType:ae,queryType:ce,bodyType:le,isMultipart:pe}=ne(z,i,x,c,b);if(z?.isKind(A.SyntaxKind.ObjectLiteralExpression)){let J=z.getProperty("prefix");if(J?.isKind(A.SyntaxKind.PropertyAssignment)){let M=J.getInitializer();M?.isKind(A.SyntaxKind.StringLiteral)&&($=M.getLiteralValue())}let X=z.getProperty("handler");if(X?.isKind(A.SyntaxKind.PropertyAssignment)){let M=X.getInitializer();M&&(L=te(M,i,x,c,b),L.startsWith("Promise<")||(L=`Promise<${L}>`))}}let K="",O="";S==="rpc"?(K=w.default.join($,"rpc",R).replace(/\\/g,"/"),O=B("action",$,R)):S==="loader"?(K=w.default.join($,"loader",R).replace(/\\/g,"/"),O=B("loader",$,R)):S==="api"&&(K=w.default.join($,"api",R).replace(/\\/g,"/"),O=B("get",$,R)),O&&v.push({type:S,name:O,returnType:L,url:R,rpcUrl:K,loaderUrl:K,paramsType:ae,queryType:ce,bodyType:le,isMultipart:pe})};if(u.forEach(y=>D(y,"rpc")),d.forEach(y=>D(y,"loader")),h.forEach(y=>D(y,"api")),v.length===0){if(s)try{await(0,N.unlink)(x),o.push(x)}catch{}return!1}let k=[],se=[...b.entries()].sort((y,S)=>y[0].localeCompare(S[0]));for(let[y,S]of se)k.push(`import type { ${[...S].sort().join(", ")} } from "${y}";`);let ie=[...v].sort((y,S)=>y.name.localeCompare(S.name)),Q=[];ie.forEach(y=>{Q.push(re(y))});let oe=`// AUTO-GENERATED by @bobtail.software/b-ssr. DO NOT EDIT.
2
2
  /* eslint-disable */
3
3
 
4
- `+(Z.length>0?Z.join(`
4
+ `+(k.length>0?k.join(`
5
5
  `)+`
6
6
 
7
- `:"")+se.join(`
7
+ `:"")+Q.join(`
8
8
 
9
- `);try{let e=await(0,U.resolveConfig)($)||{};Q=await(0,U.format)(Q,{...e,parser:"typescript",filepath:$})}catch{}return await(0,v.writeFile)($,Q),x.push($),!0}catch(R){return A.push(`Error processing ${p}: ${R instanceof Error?R.message:String(R)}`),!1}}let P=await(0,Y.default)(a,{absolute:!0});if(await Promise.all(P.map(p=>O(p))),f){let p=await(0,Y.default)(d.default.join(b,"**/*.universal.d.ts"),{absolute:!0});for(let F of p){let K=F.replace(".universal.d.ts",".mts").replace(".universal.d.ts",".ts");if(!await(0,v.access)(K).then(()=>!0).catch(()=>!1))try{await(0,v.unlink)(F),i.push(F)}catch{}}}}catch(E){A.push(`Fatal error: ${E instanceof Error?E.message:String(E)}`)}return{generated:x,cleaned:i,errors:A}}0&&(module.exports={generateRpcTypes});
9
+ `);return(await ee(x,oe)||await(0,N.access)(x).then(()=>!0).catch(()=>!1))&&g.push(x),!0}catch(i){return a.push(`Error processing ${f}: ${i instanceof Error?i.message:String(i)}`),!1}}let F=await(0,H.default)(t,{absolute:!0});if(await Promise.all(F.map(f=>m(f))),c.resolveSourceFileDependencies(),s){let f=await(0,H.default)(w.default.join(n,"**/*.universal.d.ts"),{absolute:!0});for(let i of f){let l=i.replace(".universal.d.ts",".mts").replace(".universal.d.ts",".ts");if(!await(0,N.access)(l).then(()=>!0).catch(()=>!1))try{await(0,N.unlink)(i),o.push(i)}catch{}}}}catch(c){a.push(`Fatal error: ${c instanceof Error?c.message:String(c)}`)}return{generated:g,cleaned:o,errors:a}}0&&(module.exports={generateRpcTypes});
@@ -1,9 +1,9 @@
1
- import ae from"fast-glob";import{access as de,unlink as J,writeFile as he}from"fs/promises";import f from"path";import{format as Te,resolveConfig as be}from"prettier";import{Node as D,Project as Fe,SyntaxKind as y,ts as I}from"ts-morph";function xe(c){let d=c.replace(/[^a-zA-Z0-9]+(.)?/g,(w,P)=>P?P.toUpperCase():"");return d.charAt(0).toLowerCase()+d.slice(1)}function X(c,d,w){let P=f.basename(w,f.extname(w))||"Index",T=d.replace(/:[a-zA-Z0-9_]+/g,"").replace(/\//g," "),b=`${c} ${T} ${P}`;return xe(b)}function Pe(c){let d=/([a-zA-Z_$][a-zA-Z0-9_$]*(?:\s*\|\s*)?)+/g,w=/'[^']+'/g,P=/`[^`]+`/g,T=c,b=[],n,A=c.replace(/[^'`]*/g,L=>" ".repeat(L.length));for(;(n=w.exec(c))!==null;)b.push({start:n.index,end:n.index+n[0].length,value:n[0]});for(;(n=P.exec(c))!==null;)b.push({start:n.index,end:n.index+n[0].length,value:n[0]});if(b.length>1){let L=b.map(F=>F.value).sort((F,a)=>{let h=F.replace(/['`]/g,""),K=a.replace(/['`]/g,"");return h.localeCompare(K)}),E=0,U=[...L].sort((F,a)=>{let h=F.replace(/['`]/g,""),K=a.replace(/['`]/g,"");return h.localeCompare(K)}),O="",k=0;for(let F=0;F<b.length;F++)O+=c.slice(k,b[F].start),O+=U[F],k=b[F].end;O+=c.slice(k),T=O}return T}function Se(c){let d=c.match(/^\{([\s\S]*)\}$/);if(!d)return c;let w=d[1];if(!w.includes(":"))return c;let P=w.split(/[;,]/).map(n=>n.trim()).filter(n=>n),T=[];for(let n of P){let A=n.indexOf(":");if(A===-1)continue;let L=n.slice(0,A).trim(),E=n.slice(A+1).trim();T.push({name:L,value:E})}return T.length<=1?c:(T.sort((n,A)=>n.name.localeCompare(A.name)),`{ ${T.map(n=>`${n.name}: ${n.value}`).join("; ")} }`)}function W(c){let d=Pe(c);return d=Se(d),d}async function ve(c={}){let{routerPattern:d="src-ts/routers/**/*.mts",tsConfigFilePath:w="tsconfig.json",routerBaseDir:P="src-ts/routers",clean:T=!1}=c,b=[],n=[],A=[];try{let k=function(a){let h=[];return a.paramsType!=="unknown"&&h.push(`params: ${a.paramsType}`),a.queryType!=="unknown"&&h.push(`query: ${a.queryType}`),a.bodyType!=="unknown"&&h.push(`body: ${a.bodyType}`),h.push("signal?: AbortSignal"),h};var L=k;let E=new Fe({tsConfigFilePath:w,skipAddingFilesFromTsConfig:!1}),U=f.resolve(process.cwd(),P||".");async function O(a){try{let _=function(e){return e.replace(/import\(['"](.*?)['"]\)/g,(t,r)=>{if(!f.isAbsolute(r))return t;let s=r;if(!f.extname(s)){let m=E.getSourceFile(g=>g.getFilePath().replace(/\.(mts|ts|tsx)$/,"")===r);m&&(s=m.getFilePath())}let i=f.relative(f.dirname($),s).replace(/\\/g,"/");return i.startsWith(".")||(i="./"+i),`import("${i}")`})},j=function(e,t){if(e.getSymbol()?.getName()==="Promise"){let o=e.getAwaitedType();if(o)return`Promise<${j(o,t)}>`}let r=e.getAliasSymbol()??e.getSymbol();if(r?.getName()==="__object")return W(_(e.getText(t,I.TypeFormatFlags.NoTruncation|I.TypeFormatFlags.UseFullyQualifiedType)));if(e.isObject()&&!r){let o=(p,l=0)=>{if(!(l>5)){if(p.isArray()){let u=p.getArrayElementType();u&&o(u,l);return}if(p.isObject()&&!p.getSymbol()&&!p.getAliasSymbol()){for(let u of p.getApparentProperties()){let N=u.getValueDeclaration();N&&o(u.getTypeAtLocation(N),l+1)}return}j(p,t)}};return o(e),W(_(e.getText(t,I.TypeFormatFlags.NoTruncation|I.TypeFormatFlags.UseFullyQualifiedType)))}if(!r)return W(_(e.getText(t,I.TypeFormatFlags.NoTruncation)));let s=r.getDeclarations()[0];if(!s)return r.getName();if(D.isImportSpecifier(s)||D.isImportClause(s)){let o=s.getFirstAncestorByKind(y.ImportDeclaration);if(o){let p=o.getModuleSpecifierValue(),l=r.getName();return S.has(p)||S.set(p,new Set),S.get(p)?.add(l),l}}let i=s.getSourceFile();if(i.getFilePath()===v.getFilePath())return r.getName();if(i.isInNodeModules())return W(_(e.getText(t,I.TypeFormatFlags.NoTruncation)));let m=f.relative(f.dirname($),i.getFilePath()).replace(/\\/g,"/"),C=m.startsWith(".")?m:`./${m}`,x=r.getName();return S.has(C)||S.set(C,new Set),S.get(C)?.add(x),x},re=function(e){let t;if(D.isFunctionLikeDeclaration(e)||D.isArrowFunction(e)){let r=e.getDescendantsOfKind(y.ReturnStatement);for(let s of r){let i=s.getExpression();if(i?.isKind(y.SatisfiesExpression)){t=i.getTypeNode()?.getType();break}}}if(t)return j(t,e);{let r=e.getType().getCallSignatures();if(r.length>0){let s=r[0]?.getReturnType();return j(s,e)}}return"unknown"};var h=_,K=j,le=re;let v=E.addSourceFileAtPath(a);await v.refreshFromFileSystem(),E.resolveSourceFileDependencies();let M=v.getDescendantsOfKind(y.CallExpression),Y=M.filter(e=>e.getExpression().getText().endsWith(".addRpcRoute")),ee=M.filter(e=>e.getExpression().getText().endsWith(".addRenderRoute")),te=M.filter(e=>e.getExpression().getText().endsWith(".addLoaderRoute")),ce=f.extname(a),$=a.substring(0,a.length-ce.length)+".universal.d.ts";if(Y.length===0&&ee.length===0&&te.length===0){if(T)try{await J($),n.push($)}catch{}return!1}let G=[],S=new Map;S.has("fastify")||S.set("fastify",new Set),S.get("fastify")?.add("FastifyRequest"),S.get("fastify")?.add("FastifyReply");let pe=e=>{let t="unknown",r="unknown",s="unknown",i=!1;if(!e||!D.isObjectLiteralExpression(e))return{paramsType:t,queryType:r,bodyType:s,isMultipart:i};let m=e.getProperty("schema");if(m?.isKind(y.PropertyAssignment)){let g=m.getInitializer();if(g?.isKind(y.Identifier)){let x=g.getSymbol()?.getValueDeclaration();if(x){let o=x.getFirstDescendantByKind(y.ObjectLiteralExpression);o&&(g=o)}}if(g&&D.isObjectLiteralExpression(g)){let C=g.getProperty("consumes");if(C?.isKind(y.PropertyAssignment)){let o=C.getInitializer();D.isArrayLiteralExpression(o)&&(i=o.getElements().some(p=>p.isKind(y.StringLiteral)&&p.getLiteralValue()==="multipart/form-data"))}let x=o=>{let p=g.getProperty(o);if(p?.isKind(y.PropertyAssignment)){let l=p.getInitializer();if(l){let u=l.getType(),N=u.getApparentType(),z=N.getProperty("_output");if(z)return j(z.getTypeAtLocation(l).getApparentType(),l);let R=u.getSymbol(),me=u.getAliasSymbol(),Q=R?.getName(),H=me?.getName();if(Q&&Q!=="__type"&&Q!=="object"||H&&H!=="__type"&&H!=="object")return j(u,l);let se=N.getProperties();if(se.length>0){let ie=[];for(let oe of se){let ye=oe.getTypeAtLocation(l);ie.push(`${oe.getName()}: ${ye.getText(l)}`)}return`{ ${ie.join("; ")} }`}return j(u,l)}}return"unknown"};if(t=x("params"),r=x("querystring"),s=x("body"),i){let o="{ file: File }";s=s!=="unknown"&&s.trim().startsWith("{")?`(${s} & ${o})`:o}}}return{paramsType:t,queryType:r,bodyType:s,isMultipart:i}},q=f.relative(U,f.dirname(a)).split(f.sep).join("/"),ge=q==="."||!q?"":q.startsWith("/")?q:"/"+q,V=(e,t)=>{let[r,s]=e.getArguments();if(!r?.isKind(y.StringLiteral))return;let i=r.getLiteralValue(),m="unknown",g=ge,{paramsType:C,queryType:x,bodyType:o,isMultipart:p}=pe(s);if(s?.isKind(y.ObjectLiteralExpression)){let N=s.getProperty("prefix");if(N?.isKind(y.PropertyAssignment)){let R=N.getInitializer();R?.isKind(y.StringLiteral)&&(g=R.getLiteralValue())}let z=s.getProperty("handler");if(z?.isKind(y.PropertyAssignment)){let R=z.getInitializer();R&&(m=re(R),m.startsWith("Promise<")||(m=`Promise<${m}>`))}}let l="",u="";t==="rpc"?(l=f.join(g,"rpc",i).replace(/\\/g,"/"),u=X("action",g,i)):t==="loader"?(l=f.join(g,"loader",i).replace(/\\/g,"/"),u=X("loader",g,i)):t==="api"&&(l=f.join(g,"api",i).replace(/\\/g,"/"),u=X("get",g,i)),u&&G.push({type:t,name:u,returnType:m,url:i,rpcUrl:l,loaderUrl:l,paramsType:C,queryType:x,bodyType:o,isMultipart:p})};if(Y.forEach(e=>V(e,"rpc")),ee.forEach(e=>V(e,"loader")),te.forEach(e=>V(e,"api")),G.length===0){if(T)try{await J($),n.push($)}catch{}return!1}let B=[],ue=[...S.entries()].sort((e,t)=>e[0].localeCompare(t[0]));for(let[e,t]of ue)B.push(`import type { ${[...t].sort().join(", ")} } from "${e}";`);let fe=[...G].sort((e,t)=>e.name.localeCompare(t.name)),ne=[];fe.forEach(e=>{let t=k(e),r="";t.length>0&&(r=`args: { ${t.join("; ")} }`),r||(r="args: { signal?: AbortSignal }"),ne.push(`export declare const ${e.name}: (${r}, ssrContext?: { req?: FastifyRequest, reply?: FastifyReply }) => ${e.returnType};`)});let Z=`// AUTO-GENERATED by @bobtail.software/b-ssr. DO NOT EDIT.
1
+ import te from"fast-glob";import{access as ne,unlink as V}from"fs/promises";import w from"path";import{Project as Te,SyntaxKind as k}from"ts-morph";import{writeFile as pe,readFile as q}from"fs/promises";import A from"path";import{format as ge,resolveConfig as ue}from"prettier";import{Node as $,SyntaxKind as S,ts as D}from"ts-morph";function fe(e){let t=e.replace(/[^a-zA-Z0-9]+(.)?/g,(a,n)=>n?n.toUpperCase():"");return t.charAt(0).toLowerCase()+t.slice(1)}function G(e,t,a){let n=A.basename(a,A.extname(a))||"Index",i=t.replace(/:[a-zA-Z0-9_]+/g,"").replace(/\//g," "),p=`${e} ${i} ${n}`;return fe(p)}function me(e){let t=/'[^']+'/g,a=/`[^`]+`/g,n=[],i,p=/'[^']+'/g;for(;(i=p.exec(e))!==null;)n.push({start:i.index,end:i.index+i[0].length,value:i[0]});let s=/`[^`]+`/g;for(;(i=s.exec(e))!==null;)n.push({start:i.index,end:i.index+i[0].length,value:i[0]});if(n.length>1){let o=[...n].sort((f,b)=>{let u=f.value.replace(/['`]/g,""),r=b.value.replace(/['`]/g,"");return u.localeCompare(r)}),c="",d=0;for(let f=0;f<n.length;f++)c+=e.slice(d,n[f].start),c+=o[f].value,d=n[f].end;return c+=e.slice(d),c}return e}function ye(e){let t=e.match(/^\{([\s\S]*)\}$/);if(!t)return e;let a=t[1];if(!a.includes(":"))return e;let n=a.split(/[;,]/).map(s=>s.trim()).filter(s=>s),i=[];for(let s of n){let o=s.indexOf(":");if(o===-1)continue;let c=s.slice(0,o).trim(),d=s.slice(o+1).trim();i.push({name:c,value:d})}return i.length<=1?e:(i.sort((s,o)=>s.name.localeCompare(o.name)),`{ ${i.map(s=>`${s.name}: ${s.value}`).join("; ")} }`)}function W(e){let t=me(e);return t=ye(t),t}async function J(e,t){try{if(await q(e,"utf-8")===t)return!1}catch{}let a=t;try{let n=await ue(e)||{};a=await ge(t,{...n,parser:"typescript",filepath:e})}catch{}try{if(await q(e,"utf-8")===a)return!1}catch{}return await pe(e,a),!0}function j(e,t,a,n,i,p){function s(r){return r.replace(/import\(['"](.*?)['"]\)/g,(l,g)=>{if(!A.isAbsolute(g))return l;let y=g;if(!A.extname(y)){let C=i.getSourceFile(h=>h.getFilePath().replace(/\.(mts|ts|tsx)$/,"")===g);C&&(y=C.getFilePath())}let T=A.relative(A.dirname(n),y).replace(/\\/g,"/");return T.startsWith(".")||(T="./"+T),`import("${T}")`})}if(e.getSymbol()?.getName()==="Promise"){let r=e.getAwaitedType();if(r)return`Promise<${j(r,t,a,n,i,p)}>`}let o=e.getAliasSymbol()??e.getSymbol();if(o?.getName()==="__object")return W(s(e.getText(t,D.TypeFormatFlags.NoTruncation|D.TypeFormatFlags.UseFullyQualifiedType)));if(e.isObject()&&!o){let r=(l,g=0)=>{if(!(g>5)){if(l.isArray()){let y=l.getArrayElementType();y&&r(y,g);return}if(l.isObject()&&!l.getSymbol()&&!l.getAliasSymbol()){for(let y of l.getApparentProperties()){let T=y.getValueDeclaration();T&&r(y.getTypeAtLocation(T),g+1)}return}j(l,t,a,n,i,p)}};return r(e),W(s(e.getText(t,D.TypeFormatFlags.NoTruncation|D.TypeFormatFlags.UseFullyQualifiedType)))}if(!o)return W(s(e.getText(t,D.TypeFormatFlags.NoTruncation)));let c=o.getDeclarations()[0];if(!c)return o.getName();if($.isImportSpecifier(c)||$.isImportClause(c)){let r=c.getFirstAncestorByKind(S.ImportDeclaration);if(r){let l=r.getModuleSpecifierValue(),g=o.getName();return p.has(l)||p.set(l,new Set),p.get(l)?.add(g),g}}let d=c.getSourceFile();if(d.getFilePath()===a.getFilePath())return o.getName();if(d.isInNodeModules())return W(s(e.getText(t,D.TypeFormatFlags.NoTruncation)));let f=A.relative(A.dirname(n),d.getFilePath()).replace(/\\/g,"/"),b=f.startsWith(".")?f:`./${f}`,u=o.getName();return p.has(b)||p.set(b,new Set),p.get(b)?.add(u),u}function X(e,t,a,n,i){let p;if($.isFunctionLikeDeclaration(e)||$.isArrowFunction(e)){let s=e.getDescendantsOfKind(S.ReturnStatement);for(let o of s){let c=o.getExpression();if(c?.isKind(S.SatisfiesExpression)){p=c.getTypeNode()?.getType();break}}}if(p)return j(p,e,t,a,n,i);{let s=e.getType().getCallSignatures();if(s.length>0){let o=s[0]?.getReturnType();return j(o,e,t,a,n,i)}}return"unknown"}function Y(e,t,a,n,i){let p="unknown",s="unknown",o="unknown",c=!1;if(!e||!$.isObjectLiteralExpression(e))return{paramsType:p,queryType:s,bodyType:o,isMultipart:c};let d=e.getProperty("schema");if(d?.isKind(S.PropertyAssignment)){let f=d.getInitializer();if(f?.isKind(S.Identifier)){let u=f.getSymbol()?.getValueDeclaration();if(u){let r=u.getFirstDescendantByKind(S.ObjectLiteralExpression);r&&(f=r)}}if(f&&$.isObjectLiteralExpression(f)){let b=f.getProperty("consumes");if(b?.isKind(S.PropertyAssignment)){let r=b.getInitializer();$.isArrayLiteralExpression(r)&&(c=r.getElements().some(l=>l.isKind(S.StringLiteral)&&l.getLiteralValue()==="multipart/form-data"))}let u=r=>{let l=f.getProperty(r);if(l?.isKind(S.PropertyAssignment)){let g=l.getInitializer();if(g){let y=g.getType(),T=y.getApparentType(),C=T.getProperty("_output");if(C)return j(C.getTypeAtLocation(g).getApparentType(),g,t,a,n,i);let h=y.getSymbol(),N=y.getAliasSymbol(),x=h?.getName(),I=N?.getName();if(x&&x!=="__type"&&x!=="object"||I&&I!=="__type"&&I!=="object")return j(y,g,t,a,n,i);let P=T.getProperties();if(P.length>0){let _=[];for(let v of P){let L=v.getTypeAtLocation(g);_.push(`${v.getName()}: ${L.getText(g)}`)}return`{ ${_.join("; ")} }`}return j(y,g,t,a,n,i)}}return"unknown"};if(p=u("params"),s=u("querystring"),o=u("body"),c){let r="{ file: File }";o=o!=="unknown"&&o.trim().startsWith("{")?`(${o} & ${r})`:r}}}return{paramsType:p,queryType:s,bodyType:o,isMultipart:c}}function de(e){let t=[];return e.paramsType!=="unknown"&&t.push(`params: ${e.paramsType}`),e.queryType!=="unknown"&&t.push(`query: ${e.queryType}`),e.bodyType!=="unknown"&&t.push(`body: ${e.bodyType}`),t.push("signal?: AbortSignal"),t}function ee(e){let t=de(e),a="";return t.length>0&&(a=`args: { ${t.join("; ")} }`),a||(a="args: { signal?: AbortSignal }"),`export declare const ${e.name}: (${a}, ssrContext?: { req?: FastifyRequest, reply?: FastifyReply }) => ${e.returnType};`}async function ke(e={}){let{routerPattern:t="src-ts/routers/**/*.mts",tsConfigFilePath:a="tsconfig.json",routerBaseDir:n="src-ts/routers",clean:i=!1}=e,p=[],s=[],o=[];try{let c=new Te({tsConfigFilePath:a,skipAddingFilesFromTsConfig:!1}),d=w.resolve(process.cwd(),n||".");async function f(u){try{let r=c.addSourceFileAtPath(u);await r.refreshFromFileSystem();let l=r.getDescendantsOfKind(k.CallExpression),g=l.filter(m=>m.getExpression().getText().endsWith(".addRpcRoute")),y=l.filter(m=>m.getExpression().getText().endsWith(".addRenderRoute")),T=l.filter(m=>m.getExpression().getText().endsWith(".addLoaderRoute")),C=w.extname(u),h=u.substring(0,u.length-C.length)+".universal.d.ts";if(g.length===0&&y.length===0&&T.length===0){if(i)try{await V(h),s.push(h)}catch{}return!1}let N=[],x=new Map;x.has("fastify")||x.set("fastify",new Set),x.get("fastify")?.add("FastifyRequest"),x.get("fastify")?.add("FastifyReply");let P=w.relative(d,w.dirname(u)).split(w.sep).join("/"),_=P==="."||!P?"":P.startsWith("/")?P:"/"+P,v=(m,F)=>{let[Z,z]=m.getArguments();if(!Z?.isKind(k.StringLiteral))return;let E=Z.getLiteralValue(),K="unknown",R=_,{paramsType:oe,queryType:ae,bodyType:ce,isMultipart:le}=Y(z,r,h,c,x);if(z?.isKind(k.ObjectLiteralExpression)){let H=z.getProperty("prefix");if(H?.isKind(k.PropertyAssignment)){let U=H.getInitializer();U?.isKind(k.StringLiteral)&&(R=U.getLiteralValue())}let Q=z.getProperty("handler");if(Q?.isKind(k.PropertyAssignment)){let U=Q.getInitializer();U&&(K=X(U,r,h,c,x),K.startsWith("Promise<")||(K=`Promise<${K}>`))}}let O="",M="";F==="rpc"?(O=w.join(R,"rpc",E).replace(/\\/g,"/"),M=G("action",R,E)):F==="loader"?(O=w.join(R,"loader",E).replace(/\\/g,"/"),M=G("loader",R,E)):F==="api"&&(O=w.join(R,"api",E).replace(/\\/g,"/"),M=G("get",R,E)),M&&N.push({type:F,name:M,returnType:K,url:E,rpcUrl:O,loaderUrl:O,paramsType:oe,queryType:ae,bodyType:ce,isMultipart:le})};if(g.forEach(m=>v(m,"rpc")),y.forEach(m=>v(m,"loader")),T.forEach(m=>v(m,"api")),N.length===0){if(i)try{await V(h),s.push(h)}catch{}return!1}let L=[],re=[...x.entries()].sort((m,F)=>m[0].localeCompare(F[0]));for(let[m,F]of re)L.push(`import type { ${[...F].sort().join(", ")} } from "${m}";`);let se=[...N].sort((m,F)=>m.name.localeCompare(F.name)),B=[];se.forEach(m=>{B.push(ee(m))});let ie=`// AUTO-GENERATED by @bobtail.software/b-ssr. DO NOT EDIT.
2
2
  /* eslint-disable */
3
3
 
4
- `+(B.length>0?B.join(`
4
+ `+(L.length>0?L.join(`
5
5
  `)+`
6
6
 
7
- `:"")+ne.join(`
7
+ `:"")+B.join(`
8
8
 
9
- `);try{let e=await be($)||{};Z=await Te(Z,{...e,parser:"typescript",filepath:$})}catch{}return await he($,Z),b.push($),!0}catch(v){return A.push(`Error processing ${a}: ${v instanceof Error?v.message:String(v)}`),!1}}let F=await ae(d,{absolute:!0});if(await Promise.all(F.map(a=>O(a))),T){let a=await ae(f.join(P,"**/*.universal.d.ts"),{absolute:!0});for(let h of a){let K=h.replace(".universal.d.ts",".mts").replace(".universal.d.ts",".ts");if(!await de(K).then(()=>!0).catch(()=>!1))try{await J(h),n.push(h)}catch{}}}}catch(E){A.push(`Fatal error: ${E instanceof Error?E.message:String(E)}`)}return{generated:b,cleaned:n,errors:A}}export{ve as generateRpcTypes};
9
+ `);return(await J(h,ie)||await ne(h).then(()=>!0).catch(()=>!1))&&p.push(h),!0}catch(r){return o.push(`Error processing ${u}: ${r instanceof Error?r.message:String(r)}`),!1}}let b=await te(t,{absolute:!0});if(await Promise.all(b.map(u=>f(u))),c.resolveSourceFileDependencies(),i){let u=await te(w.join(n,"**/*.universal.d.ts"),{absolute:!0});for(let r of u){let l=r.replace(".universal.d.ts",".mts").replace(".universal.d.ts",".ts");if(!await ne(l).then(()=>!0).catch(()=>!1))try{await V(r),s.push(r)}catch{}}}}catch(c){o.push(`Fatal error: ${c instanceof Error?c.message:String(c)}`)}return{generated:p,cleaned:s,errors:o}}export{ke as generateRpcTypes};
@@ -1,45 +1,45 @@
1
- "use strict";var Oe=Object.create;var ue=Object.defineProperty;var Ne=Object.getOwnPropertyDescriptor;var Le=Object.getOwnPropertyNames;var Me=Object.getPrototypeOf,qe=Object.prototype.hasOwnProperty;var ke=(t,s)=>{for(var S in s)ue(t,S,{get:s[S],enumerable:!0})},$e=(t,s,S,P)=>{if(s&&typeof s=="object"||typeof s=="function")for(let f of Le(s))!qe.call(t,f)&&f!==S&&ue(t,f,{get:()=>s[f],enumerable:!(P=Ne(s,f))||P.enumerable});return t};var ge=(t,s,S)=>(S=t!=null?Oe(Me(t)):{},$e(s||!t||!t.__esModule?ue(S,"default",{value:t,enumerable:!0}):S,t)),De=t=>$e(ue({},"__esModule",{value:!0}),t);var Ge={};ke(Ge,{generateRpcTypes:()=>Ae,rpcGeneratorPlugin:()=>ze});module.exports=De(Ge);var Re=ge(require("fast-glob"),1),se=require("fs/promises"),R=ge(require("path"),1),ye=require("prettier"),h=require("ts-morph");var we=ge(require("fast-glob"),1),Y=require("fs/promises"),q=ge(require("path"),1),fe=require("prettier"),y=require("ts-morph");function Ie(t){let s=t.replace(/[^a-zA-Z0-9]+(.)?/g,(S,P)=>P?P.toUpperCase():"");return s.charAt(0).toLowerCase()+s.slice(1)}function Pe(t,s,S){let P=q.default.basename(S,q.default.extname(S))||"Index",f=s.replace(/:[a-zA-Z0-9_]+/g,"").replace(/\//g," "),T=`${t} ${f} ${P}`;return Ie(T)}function Ke(t){let s=/([a-zA-Z_$][a-zA-Z0-9_$]*(?:\s*\|\s*)?)+/g,S=/'[^']+'/g,P=/`[^`]+`/g,f=t,T=[],i,j=t.replace(/[^'`]*/g,k=>" ".repeat(k.length));for(;(i=S.exec(t))!==null;)T.push({start:i.index,end:i.index+i[0].length,value:i[0]});for(;(i=P.exec(t))!==null;)T.push({start:i.index,end:i.index+i[0].length,value:i[0]});if(T.length>1){let k=T.map(r=>r.value).sort((r,c)=>{let o=r.replace(/['`]/g,""),C=c.replace(/['`]/g,"");return o.localeCompare(C)}),N=0,J=[...k].sort((r,c)=>{let o=r.replace(/['`]/g,""),C=c.replace(/['`]/g,"");return o.localeCompare(C)}),V="",G=0;for(let r=0;r<T.length;r++)V+=t.slice(G,T[r].start),V+=J[r],G=T[r].end;V+=t.slice(G),f=V}return f}function Ue(t){let s=t.match(/^\{([\s\S]*)\}$/);if(!s)return t;let S=s[1];if(!S.includes(":"))return t;let P=S.split(/[;,]/).map(i=>i.trim()).filter(i=>i),f=[];for(let i of P){let j=i.indexOf(":");if(j===-1)continue;let k=i.slice(0,j).trim(),N=i.slice(j+1).trim();f.push({name:k,value:N})}return f.length<=1?t:(f.sort((i,j)=>i.name.localeCompare(j.name)),`{ ${f.map(i=>`${i.name}: ${i.value}`).join("; ")} }`)}function me(t){let s=Ke(t);return s=Ue(s),s}async function Ae(t={}){let{routerPattern:s="src-ts/routers/**/*.mts",tsConfigFilePath:S="tsconfig.json",routerBaseDir:P="src-ts/routers",clean:f=!1}=t,T=[],i=[],j=[];try{let G=function(c){let o=[];return c.paramsType!=="unknown"&&o.push(`params: ${c.paramsType}`),c.queryType!=="unknown"&&o.push(`query: ${c.queryType}`),c.bodyType!=="unknown"&&o.push(`body: ${c.bodyType}`),o.push("signal?: AbortSignal"),o};var k=G;let N=new y.Project({tsConfigFilePath:S,skipAddingFilesFromTsConfig:!1}),J=q.default.resolve(process.cwd(),P||".");async function V(c){try{let B=function(n){return n.replace(/import\(['"](.*?)['"]\)/g,(d,w)=>{if(!q.default.isAbsolute(w))return d;let $=w;if(!q.default.extname($)){let l=N.getSourceFile(a=>a.getFilePath().replace(/\.(mts|ts|tsx)$/,"")===w);l&&($=l.getFilePath())}let e=q.default.relative(q.default.dirname(U),$).replace(/\\/g,"/");return e.startsWith(".")||(e="./"+e),`import("${e}")`})},D=function(n,d){if(n.getSymbol()?.getName()==="Promise"){let u=n.getAwaitedType();if(u)return`Promise<${D(u,d)}>`}let w=n.getAliasSymbol()??n.getSymbol();if(w?.getName()==="__object")return me(B(n.getText(d,y.ts.TypeFormatFlags.NoTruncation|y.ts.TypeFormatFlags.UseFullyQualifiedType)));if(n.isObject()&&!w){let u=(g,x=0)=>{if(!(x>5)){if(g.isArray()){let E=g.getArrayElementType();E&&u(E,x);return}if(g.isObject()&&!g.getSymbol()&&!g.getAliasSymbol()){for(let E of g.getApparentProperties()){let F=E.getValueDeclaration();F&&u(E.getTypeAtLocation(F),x+1)}return}D(g,d)}};return u(n),me(B(n.getText(d,y.ts.TypeFormatFlags.NoTruncation|y.ts.TypeFormatFlags.UseFullyQualifiedType)))}if(!w)return me(B(n.getText(d,y.ts.TypeFormatFlags.NoTruncation)));let $=w.getDeclarations()[0];if(!$)return w.getName();if(y.Node.isImportSpecifier($)||y.Node.isImportClause($)){let u=$.getFirstAncestorByKind(y.SyntaxKind.ImportDeclaration);if(u){let g=u.getModuleSpecifierValue(),x=w.getName();return O.has(g)||O.set(g,new Set),O.get(g)?.add(x),x}}let e=$.getSourceFile();if(e.getFilePath()===b.getFilePath())return w.getName();if(e.isInNodeModules())return me(B(n.getText(d,y.ts.TypeFormatFlags.NoTruncation)));let l=q.default.relative(q.default.dirname(U),e.getFilePath()).replace(/\\/g,"/"),p=l.startsWith(".")?l:`./${l}`,m=w.getName();return O.has(p)||O.set(p,new Set),O.get(p)?.add(m),m},ae=function(n){let d;if(y.Node.isFunctionLikeDeclaration(n)||y.Node.isArrowFunction(n)){let w=n.getDescendantsOfKind(y.SyntaxKind.ReturnStatement);for(let $ of w){let e=$.getExpression();if(e?.isKind(y.SyntaxKind.SatisfiesExpression)){d=e.getTypeNode()?.getType();break}}}if(d)return D(d,n);{let w=n.getType().getCallSignatures();if(w.length>0){let $=w[0]?.getReturnType();return D($,n)}}return"unknown"};var o=B,C=D,M=ae;let b=N.addSourceFileAtPath(c);await b.refreshFromFileSystem(),N.resolveSourceFileDependencies();let W=b.getDescendantsOfKind(y.SyntaxKind.CallExpression),I=W.filter(n=>n.getExpression().getText().endsWith(".addRpcRoute")),K=W.filter(n=>n.getExpression().getText().endsWith(".addRenderRoute")),X=W.filter(n=>n.getExpression().getText().endsWith(".addLoaderRoute")),H=q.default.extname(c),U=c.substring(0,c.length-H.length)+".universal.d.ts";if(I.length===0&&K.length===0&&X.length===0){if(f)try{await(0,Y.unlink)(U),i.push(U)}catch{}return!1}let ee=[],O=new Map;O.has("fastify")||O.set("fastify",new Set),O.get("fastify")?.add("FastifyRequest"),O.get("fastify")?.add("FastifyReply");let he=n=>{let d="unknown",w="unknown",$="unknown",e=!1;if(!n||!y.Node.isObjectLiteralExpression(n))return{paramsType:d,queryType:w,bodyType:$,isMultipart:e};let l=n.getProperty("schema");if(l?.isKind(y.SyntaxKind.PropertyAssignment)){let a=l.getInitializer();if(a?.isKind(y.SyntaxKind.Identifier)){let m=a.getSymbol()?.getValueDeclaration();if(m){let u=m.getFirstDescendantByKind(y.SyntaxKind.ObjectLiteralExpression);u&&(a=u)}}if(a&&y.Node.isObjectLiteralExpression(a)){let p=a.getProperty("consumes");if(p?.isKind(y.SyntaxKind.PropertyAssignment)){let u=p.getInitializer();y.Node.isArrayLiteralExpression(u)&&(e=u.getElements().some(g=>g.isKind(y.SyntaxKind.StringLiteral)&&g.getLiteralValue()==="multipart/form-data"))}let m=u=>{let g=a.getProperty(u);if(g?.isKind(y.SyntaxKind.PropertyAssignment)){let x=g.getInitializer();if(x){let E=x.getType(),F=E.getApparentType(),v=F.getProperty("_output");if(v)return D(v.getTypeAtLocation(x).getApparentType(),x);let A=E.getSymbol(),L=E.getAliasSymbol(),_=A?.getName(),Q=L?.getName();if(_&&_!=="__type"&&_!=="object"||Q&&Q!=="__type"&&Q!=="object")return D(E,x);let Z=F.getProperties();if(Z.length>0){let pe=[];for(let oe of Z){let ce=oe.getTypeAtLocation(x);pe.push(`${oe.getName()}: ${ce.getText(x)}`)}return`{ ${pe.join("; ")} }`}return D(E,x)}}return"unknown"};if(d=m("params"),w=m("querystring"),$=m("body"),e){let u="{ file: File }";$=$!=="unknown"&&$.trim().startsWith("{")?`(${$} & ${u})`:u}}}return{paramsType:d,queryType:w,bodyType:$,isMultipart:e}},z=q.default.relative(J,q.default.dirname(c)).split(q.default.sep).join("/"),Te=z==="."||!z?"":z.startsWith("/")?z:"/"+z,te=(n,d)=>{let[w,$]=n.getArguments();if(!w?.isKind(y.SyntaxKind.StringLiteral))return;let e=w.getLiteralValue(),l="unknown",a=Te,{paramsType:p,queryType:m,bodyType:u,isMultipart:g}=he($);if($?.isKind(y.SyntaxKind.ObjectLiteralExpression)){let F=$.getProperty("prefix");if(F?.isKind(y.SyntaxKind.PropertyAssignment)){let A=F.getInitializer();A?.isKind(y.SyntaxKind.StringLiteral)&&(a=A.getLiteralValue())}let v=$.getProperty("handler");if(v?.isKind(y.SyntaxKind.PropertyAssignment)){let A=v.getInitializer();A&&(l=ae(A),l.startsWith("Promise<")||(l=`Promise<${l}>`))}}let x="",E="";d==="rpc"?(x=q.default.join(a,"rpc",e).replace(/\\/g,"/"),E=Pe("action",a,e)):d==="loader"?(x=q.default.join(a,"loader",e).replace(/\\/g,"/"),E=Pe("loader",a,e)):d==="api"&&(x=q.default.join(a,"api",e).replace(/\\/g,"/"),E=Pe("get",a,e)),E&&ee.push({type:d,name:E,returnType:l,url:e,rpcUrl:x,loaderUrl:x,paramsType:p,queryType:m,bodyType:u,isMultipart:g})};if(I.forEach(n=>te(n,"rpc")),K.forEach(n=>te(n,"loader")),X.forEach(n=>te(n,"api")),ee.length===0){if(f)try{await(0,Y.unlink)(U),i.push(U)}catch{}return!1}let re=[],be=[...O.entries()].sort((n,d)=>n[0].localeCompare(d[0]));for(let[n,d]of be)re.push(`import type { ${[...d].sort().join(", ")} } from "${n}";`);let xe=[...ee].sort((n,d)=>n.name.localeCompare(d.name)),le=[];xe.forEach(n=>{let d=G(n),w="";d.length>0&&(w=`args: { ${d.join("; ")} }`),w||(w="args: { signal?: AbortSignal }"),le.push(`export declare const ${n.name}: (${w}, ssrContext?: { req?: FastifyRequest, reply?: FastifyReply }) => ${n.returnType};`)});let ne=`// AUTO-GENERATED by @bobtail.software/b-ssr. DO NOT EDIT.
1
+ "use strict";var Fe=Object.create;var ce=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Ce=Object.getOwnPropertyNames;var Ee=Object.getPrototypeOf,ve=Object.prototype.hasOwnProperty;var Ae=(e,n)=>{for(var l in n)ce(e,l,{get:n[l],enumerable:!0})},we=(e,n,l,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of Ce(n))!ve.call(e,i)&&i!==l&&ce(e,i,{get:()=>n[i],enumerable:!(a=Pe(n,i))||a.enumerable});return e};var re=(e,n,l)=>(l=e!=null?Fe(Ee(e)):{},we(n||!e||!e.__esModule?ce(l,"default",{value:e,enumerable:!0}):l,e)),$e=e=>we(ce({},"__esModule",{value:!0}),e);var ke={};Ae(ke,{generateRpcTypes:()=>Re,rpcGeneratorPlugin:()=>Le});module.exports=$e(ke);var Se=re(require("fast-glob"),1),se=require("fs/promises"),P=re(require("path"),1),q=require("ts-morph");var ne=require("fs/promises"),L=re(require("path"),1),pe=require("prettier"),h=require("ts-morph");function je(e){let n=e.replace(/[^a-zA-Z0-9]+(.)?/g,(l,a)=>a?a.toUpperCase():"");return n.charAt(0).toLowerCase()+n.slice(1)}function N(e,n,l){let a=L.default.basename(l,L.default.extname(l))||"Index",i=n.replace(/:[a-zA-Z0-9_]+/g,"").replace(/\//g," "),d=`${e} ${i} ${a}`;return je(d)}function Oe(e){let n=/'[^']+'/g,l=/`[^`]+`/g,a=[],i,d=/'[^']+'/g;for(;(i=d.exec(e))!==null;)a.push({start:i.index,end:i.index+i[0].length,value:i[0]});let p=/`[^`]+`/g;for(;(i=p.exec(e))!==null;)a.push({start:i.index,end:i.index+i[0].length,value:i[0]});if(a.length>1){let u=[...a].sort((b,E)=>{let x=b.value.replace(/['`]/g,""),t=E.value.replace(/['`]/g,"");return x.localeCompare(t)}),g="",S=0;for(let b=0;b<a.length;b++)g+=e.slice(S,a[b].start),g+=u[b].value,S=a[b].end;return g+=e.slice(S),g}return e}function Me(e){let n=e.match(/^\{([\s\S]*)\}$/);if(!n)return e;let l=n[1];if(!l.includes(":"))return e;let a=l.split(/[;,]/).map(p=>p.trim()).filter(p=>p),i=[];for(let p of a){let u=p.indexOf(":");if(u===-1)continue;let g=p.slice(0,u).trim(),S=p.slice(u+1).trim();i.push({name:g,value:S})}return i.length<=1?e:(i.sort((p,u)=>p.name.localeCompare(u.name)),`{ ${i.map(p=>`${p.name}: ${p.value}`).join("; ")} }`)}function le(e){let n=Oe(e);return n=Me(n),n}async function ue(e,n){try{if(await(0,ne.readFile)(e,"utf-8")===n)return!1}catch{}let l=n;try{let a=await(0,pe.resolveConfig)(e)||{};l=await(0,pe.format)(n,{...a,parser:"typescript",filepath:e})}catch{}try{if(await(0,ne.readFile)(e,"utf-8")===l)return!1}catch{}return await(0,ne.writeFile)(e,l),!0}function z(e,n,l,a,i,d){function p(t){return t.replace(/import\(['"](.*?)['"]\)/g,(s,r)=>{if(!L.default.isAbsolute(r))return s;let o=r;if(!L.default.extname(o)){let f=i.getSourceFile(w=>w.getFilePath().replace(/\.(mts|ts|tsx)$/,"")===r);f&&(o=f.getFilePath())}let m=L.default.relative(L.default.dirname(a),o).replace(/\\/g,"/");return m.startsWith(".")||(m="./"+m),`import("${m}")`})}if(e.getSymbol()?.getName()==="Promise"){let t=e.getAwaitedType();if(t)return`Promise<${z(t,n,l,a,i,d)}>`}let u=e.getAliasSymbol()??e.getSymbol();if(u?.getName()==="__object")return le(p(e.getText(n,h.ts.TypeFormatFlags.NoTruncation|h.ts.TypeFormatFlags.UseFullyQualifiedType)));if(e.isObject()&&!u){let t=(s,r=0)=>{if(!(r>5)){if(s.isArray()){let o=s.getArrayElementType();o&&t(o,r);return}if(s.isObject()&&!s.getSymbol()&&!s.getAliasSymbol()){for(let o of s.getApparentProperties()){let m=o.getValueDeclaration();m&&t(o.getTypeAtLocation(m),r+1)}return}z(s,n,l,a,i,d)}};return t(e),le(p(e.getText(n,h.ts.TypeFormatFlags.NoTruncation|h.ts.TypeFormatFlags.UseFullyQualifiedType)))}if(!u)return le(p(e.getText(n,h.ts.TypeFormatFlags.NoTruncation)));let g=u.getDeclarations()[0];if(!g)return u.getName();if(h.Node.isImportSpecifier(g)||h.Node.isImportClause(g)){let t=g.getFirstAncestorByKind(h.SyntaxKind.ImportDeclaration);if(t){let s=t.getModuleSpecifierValue(),r=u.getName();return d.has(s)||d.set(s,new Set),d.get(s)?.add(r),r}}let S=g.getSourceFile();if(S.getFilePath()===l.getFilePath())return u.getName();if(S.isInNodeModules())return le(p(e.getText(n,h.ts.TypeFormatFlags.NoTruncation)));let b=L.default.relative(L.default.dirname(a),S.getFilePath()).replace(/\\/g,"/"),E=b.startsWith(".")?b:`./${b}`,x=u.getName();return d.has(E)||d.set(E,new Set),d.get(E)?.add(x),x}function ge(e,n,l,a,i){let d;if(h.Node.isFunctionLikeDeclaration(e)||h.Node.isArrowFunction(e)){let p=e.getDescendantsOfKind(h.SyntaxKind.ReturnStatement);for(let u of p){let g=u.getExpression();if(g?.isKind(h.SyntaxKind.SatisfiesExpression)){d=g.getTypeNode()?.getType();break}}}if(d)return z(d,e,n,l,a,i);{let p=e.getType().getCallSignatures();if(p.length>0){let u=p[0]?.getReturnType();return z(u,e,n,l,a,i)}}return"unknown"}function fe(e,n,l,a,i){let d="unknown",p="unknown",u="unknown",g=!1;if(!e||!h.Node.isObjectLiteralExpression(e))return{paramsType:d,queryType:p,bodyType:u,isMultipart:g};let S=e.getProperty("schema");if(S?.isKind(h.SyntaxKind.PropertyAssignment)){let b=S.getInitializer();if(b?.isKind(h.SyntaxKind.Identifier)){let x=b.getSymbol()?.getValueDeclaration();if(x){let t=x.getFirstDescendantByKind(h.SyntaxKind.ObjectLiteralExpression);t&&(b=t)}}if(b&&h.Node.isObjectLiteralExpression(b)){let E=b.getProperty("consumes");if(E?.isKind(h.SyntaxKind.PropertyAssignment)){let t=E.getInitializer();h.Node.isArrayLiteralExpression(t)&&(g=t.getElements().some(s=>s.isKind(h.SyntaxKind.StringLiteral)&&s.getLiteralValue()==="multipart/form-data"))}let x=t=>{let s=b.getProperty(t);if(s?.isKind(h.SyntaxKind.PropertyAssignment)){let r=s.getInitializer();if(r){let o=r.getType(),m=o.getApparentType(),f=m.getProperty("_output");if(f)return z(f.getTypeAtLocation(r).getApparentType(),r,n,l,a,i);let w=o.getSymbol(),R=o.getAliasSymbol(),y=w?.getName(),$=R?.getName();if(y&&y!=="__type"&&y!=="object"||$&&$!=="__type"&&$!=="object")return z(o,r,n,l,a,i);let C=m.getProperties();if(C.length>0){let Z=[];for(let j of C){let U=j.getTypeAtLocation(r);Z.push(`${j.getName()}: ${U.getText(r)}`)}return`{ ${Z.join("; ")} }`}return z(o,r,n,l,a,i)}}return"unknown"};if(d=x("params"),p=x("querystring"),u=x("body"),g){let t="{ file: File }";u=u!=="unknown"&&u.trim().startsWith("{")?`(${u} & ${t})`:t}}}return{paramsType:d,queryType:p,bodyType:u,isMultipart:g}}function De(e){let n=[];return e.paramsType!=="unknown"&&n.push(`params: ${e.paramsType}`),e.queryType!=="unknown"&&n.push(`query: ${e.queryType}`),e.bodyType!=="unknown"&&n.push(`body: ${e.bodyType}`),n.push("signal?: AbortSignal"),n}function de(e){let n=De(e),l="";return n.length>0&&(l=`args: { ${n.join("; ")} }`),l||(l="args: { signal?: AbortSignal }"),`export declare const ${e.name}: (${l}, ssrContext?: { req?: FastifyRequest, reply?: FastifyReply }) => ${e.returnType};`}var xe=require("perf_hooks");var he=re(require("fast-glob"),1),V=require("fs/promises"),O=re(require("path"),1),k=require("ts-morph");async function Re(e={}){let{routerPattern:n="src-ts/routers/**/*.mts",tsConfigFilePath:l="tsconfig.json",routerBaseDir:a="src-ts/routers",clean:i=!1}=e,d=[],p=[],u=[];try{let g=new k.Project({tsConfigFilePath:l,skipAddingFilesFromTsConfig:!1}),S=O.default.resolve(process.cwd(),a||".");async function b(x){try{let t=g.addSourceFileAtPath(x);await t.refreshFromFileSystem();let s=t.getDescendantsOfKind(k.SyntaxKind.CallExpression),r=s.filter(T=>T.getExpression().getText().endsWith(".addRpcRoute")),o=s.filter(T=>T.getExpression().getText().endsWith(".addRenderRoute")),m=s.filter(T=>T.getExpression().getText().endsWith(".addLoaderRoute")),f=O.default.extname(x),w=x.substring(0,x.length-f.length)+".universal.d.ts";if(r.length===0&&o.length===0&&m.length===0){if(i)try{await(0,V.unlink)(w),p.push(w)}catch{}return!1}let R=[],y=new Map;y.has("fastify")||y.set("fastify",new Set),y.get("fastify")?.add("FastifyRequest"),y.get("fastify")?.add("FastifyReply");let C=O.default.relative(S,O.default.dirname(x)).split(O.default.sep).join("/"),Z=C==="."||!C?"":C.startsWith("/")?C:"/"+C,j=(T,v)=>{let[Y,G]=T.getArguments();if(!Y?.isKind(k.SyntaxKind.StringLiteral))return;let M=Y.getLiteralValue(),c="unknown",F=Z,{paramsType:_,queryType:I,bodyType:D,isMultipart:K}=fe(G,t,w,g,y);if(G?.isKind(k.SyntaxKind.ObjectLiteralExpression)){let ie=G.getProperty("prefix");if(ie?.isKind(k.SyntaxKind.PropertyAssignment)){let B=ie.getInitializer();B?.isKind(k.SyntaxKind.StringLiteral)&&(F=B.getLiteralValue())}let ae=G.getProperty("handler");if(ae?.isKind(k.SyntaxKind.PropertyAssignment)){let B=ae.getInitializer();B&&(c=ge(B,t,w,g,y),c.startsWith("Promise<")||(c=`Promise<${c}>`))}}let A="",W="";v==="rpc"?(A=O.default.join(F,"rpc",M).replace(/\\/g,"/"),W=N("action",F,M)):v==="loader"?(A=O.default.join(F,"loader",M).replace(/\\/g,"/"),W=N("loader",F,M)):v==="api"&&(A=O.default.join(F,"api",M).replace(/\\/g,"/"),W=N("get",F,M)),W&&R.push({type:v,name:W,returnType:c,url:M,rpcUrl:A,loaderUrl:A,paramsType:_,queryType:I,bodyType:D,isMultipart:K})};if(r.forEach(T=>j(T,"rpc")),o.forEach(T=>j(T,"loader")),m.forEach(T=>j(T,"api")),R.length===0){if(i)try{await(0,V.unlink)(w),p.push(w)}catch{}return!1}let U=[],Q=[...y.entries()].sort((T,v)=>T[0].localeCompare(v[0]));for(let[T,v]of Q)U.push(`import type { ${[...v].sort().join(", ")} } from "${T}";`);let X=[...R].sort((T,v)=>T.name.localeCompare(v.name)),oe=[];X.forEach(T=>{oe.push(de(T))});let me=`// AUTO-GENERATED by @bobtail.software/b-ssr. DO NOT EDIT.
2
2
  /* eslint-disable */
3
3
 
4
- `+(re.length>0?re.join(`
4
+ `+(U.length>0?U.join(`
5
5
  `)+`
6
6
 
7
- `:"")+le.join(`
7
+ `:"")+oe.join(`
8
8
 
9
- `);try{let n=await(0,fe.resolveConfig)(U)||{};ne=await(0,fe.format)(ne,{...n,parser:"typescript",filepath:U})}catch{}return await(0,Y.writeFile)(U,ne),T.push(U),!0}catch(b){return j.push(`Error processing ${c}: ${b instanceof Error?b.message:String(b)}`),!1}}let r=await(0,we.default)(s,{absolute:!0});if(await Promise.all(r.map(c=>V(c))),f){let c=await(0,we.default)(q.default.join(P,"**/*.universal.d.ts"),{absolute:!0});for(let o of c){let C=o.replace(".universal.d.ts",".mts").replace(".universal.d.ts",".ts");if(!await(0,Y.access)(C).then(()=>!0).catch(()=>!1))try{await(0,Y.unlink)(o),i.push(o)}catch{}}}}catch(N){j.push(`Fatal error: ${N instanceof Error?N.message:String(N)}`)}return{generated:T,cleaned:i,errors:j}}var ie="virtual:b-ssr-rpc-universal:";function We(t){let s=t.replace(/[^a-zA-Z0-9]+(.)?/g,(S,P)=>P?P.toUpperCase():"");return s.charAt(0).toLowerCase()+s.slice(1)}function Fe(t,s,S){let P=R.default.basename(S,R.default.extname(S))||"Index",f=s.replace(/:[a-zA-Z0-9_]+/g,"").replace(/\//g," "),T=`${t} ${f} ${P}`;return We(T)}function _e(t){let s=/'[^']+'/g,S=/`[^`]+`/g,P=[];for(;s.exec(t)!==null;);let f=/'[^']+'/g,T;for(;(T=f.exec(t))!==null;)P.push({start:T.index,end:T.index+T[0].length,value:T[0]});for(;(T=S.exec(t))!==null;)P.push({start:T.index,end:T.index+T[0].length,value:T[0]});if(P.length>1){let i=[...P].sort((N,J)=>{let V=N.value.replace(/['`]/g,""),G=J.value.replace(/['`]/g,"");return V.localeCompare(G)}),j="",k=0;for(let N=0;N<P.length;N++)j+=t.slice(k,P[N].start),j+=i[N].value,k=P[N].end;return j+=t.slice(k),j}return t}function Be(t){let s=t.match(/^\{([\s\S]*)\}$/);if(!s)return t;let S=s[1];if(!S.includes(":"))return t;let P=S.split(/[;,]/).map(i=>i.trim()).filter(i=>i),f=[];for(let i of P){let j=i.indexOf(":");if(j===-1)continue;let k=i.slice(0,j).trim(),N=i.slice(j+1).trim();f.push({name:k,value:N})}return f.length<=1?t:(f.sort((i,j)=>i.name.localeCompare(j.name)),`{ ${f.map(i=>`${i.name}: ${i.value}`).join("; ")} }`)}function de(t){let s=_e(t);return s=Be(s),s}function ze(t={}){let{routerPattern:s="src-ts/routers/**/*.mts",tsConfigFilePath:S="tsconfig.json",routerBaseDir:P="src-ts/routers"}=t,f=new Map,T=new Set,i=new h.Project({tsConfigFilePath:S,skipAddingFilesFromTsConfig:!1}),j=R.default.resolve(process.cwd(),P||".");async function k(r){try{let B=function(e){return e.replace(/import\(['"](.*?)['"]\)/g,(l,a)=>{if(!R.default.isAbsolute(a))return l;let p=a;if(!R.default.extname(p)){let u=i.getSourceFile(g=>g.getFilePath().replace(/\.(mts|ts|tsx)$/,"")===a);u&&(p=u.getFilePath())}let m=R.default.relative(R.default.dirname(H),p).replace(/\\/g,"/");return m.startsWith(".")||(m="./"+m),`import("${m}")`})},D=function(e,l){if(e.getSymbol()?.getName()==="Promise"){let F=e.getAwaitedType();if(F)return`Promise<${D(F,l)}>`}let a=e.getAliasSymbol()??e.getSymbol();if(a?.getName()==="__object")return de(B(e.getText(l,h.ts.TypeFormatFlags.NoTruncation|h.ts.TypeFormatFlags.UseFullyQualifiedType)));if(e.isObject()&&!a){let F=(v,A=0)=>{if(!(A>5)){if(v.isArray()){let L=v.getArrayElementType();L&&F(L,A);return}if(v.isObject()&&!v.getSymbol()&&!v.getAliasSymbol()){for(let L of v.getApparentProperties()){let _=L.getValueDeclaration();_&&F(L.getTypeAtLocation(_),A+1)}return}D(v,l)}};return F(e),de(B(e.getText(l,h.ts.TypeFormatFlags.NoTruncation|h.ts.TypeFormatFlags.UseFullyQualifiedType)))}if(!a)return de(B(e.getText(l,h.ts.TypeFormatFlags.NoTruncation)));let p=a.getDeclarations()[0];if(!p)return a.getName();if(h.Node.isImportSpecifier(p)||h.Node.isImportClause(p)){let F=p.getFirstAncestorByKind(h.SyntaxKind.ImportDeclaration);if(F){let v=F.getModuleSpecifierValue(),A=a.getName();return O.has(v)||O.set(v,new Set),O.get(v)?.add(A),A}}let m=p.getSourceFile();if(m.getFilePath()===M.getFilePath())return a.getName();if(m.isInNodeModules())return de(B(e.getText(l,h.ts.TypeFormatFlags.NoTruncation)));let u=R.default.relative(R.default.dirname(H),m.getFilePath()).replace(/\\/g,"/"),x=u.startsWith(".")?u:`./${u}`,E=a.getName();return O.has(x)||O.set(x,new Set),O.get(x)?.add(E),E},ae=function(e){let l;if(h.Node.isFunctionLikeDeclaration(e)||h.Node.isArrowFunction(e)){let a=e.getDescendantsOfKind(h.SyntaxKind.ReturnStatement);for(let p of a){let m=p.getExpression();if(m?.isKind(h.SyntaxKind.SatisfiesExpression)){l=m.getTypeNode()?.getType();break}}}if(l)return D(l,e);{let a=e.getType().getCallSignatures();if(a.length>0){let p=a[0]?.getReturnType();return D(p,e)}}return"unknown"};var c=B,o=D,C=ae;let M=i.addSourceFileAtPath(r);await M.refreshFromFileSystem(),i.resolveSourceFileDependencies();let b=M.getDescendantsOfKind(h.SyntaxKind.CallExpression),W=b.filter(e=>e.getExpression().getText().endsWith(".addRpcRoute")),I=b.filter(e=>e.getExpression().getText().endsWith(".addRenderRoute")),K=b.filter(e=>e.getExpression().getText().endsWith(".addLoaderRoute")),X=R.default.extname(r),H=r.substring(0,r.length-X.length)+".universal.d.ts",U=R.default.resolve(r);if(W.length===0&&I.length===0&&K.length===0){f.delete(U),T.delete(U),H!==r&&await(0,se.unlink)(H).catch(()=>{});return}T.add(U);let ee=[],O=new Map;O.has("fastify")||O.set("fastify",new Set),O.get("fastify")?.add("FastifyRequest"),O.get("fastify")?.add("FastifyReply");let he=e=>{let l="unknown",a="unknown",p="unknown",m=!1;if(!e||!h.Node.isObjectLiteralExpression(e))return{paramsType:l,queryType:a,bodyType:p,isMultipart:m};let u=e.getProperty("schema");if(u?.isKind(h.SyntaxKind.PropertyAssignment)){let g=u.getInitializer();if(g?.isKind(h.SyntaxKind.Identifier)){let E=g.getSymbol()?.getValueDeclaration();if(E){let F=E.getFirstDescendantByKind(h.SyntaxKind.ObjectLiteralExpression);F&&(g=F)}}if(g&&h.Node.isObjectLiteralExpression(g)){let x=g.getProperty("consumes");if(x?.isKind(h.SyntaxKind.PropertyAssignment)){let F=x.getInitializer();h.Node.isArrayLiteralExpression(F)&&(m=F.getElements().some(v=>v.isKind(h.SyntaxKind.StringLiteral)&&v.getLiteralValue()==="multipart/form-data"))}let E=F=>{let v=g.getProperty(F);if(v?.isKind(h.SyntaxKind.PropertyAssignment)){let A=v.getInitializer();if(A){let L=A.getType(),_=L.getApparentType(),Q=_.getProperty("_output");if(Q)return D(Q.getTypeAtLocation(A).getApparentType(),A);let Z=L.getSymbol(),pe=L.getAliasSymbol(),oe=Z?.getName(),ce=pe?.getName();if(oe&&oe!=="__type"&&oe!=="object"||ce&&ce!=="__type"&&ce!=="object")return D(L,A);let Se=_.getProperties();if(Se.length>0){let Ce=[];for(let Ee of Se){let je=Ee.getTypeAtLocation(A);Ce.push(`${Ee.getName()}: ${je.getText(A)}`)}return`{ ${Ce.join("; ")} }`}return D(L,A)}}return"unknown"};if(l=E("params"),a=E("querystring"),p=E("body"),m){let F="{ file: File }";p=p!=="unknown"&&p.trim().startsWith("{")?`(${p} & ${F})`:F}}}return{paramsType:l,queryType:a,bodyType:p,isMultipart:m}},z=R.default.relative(j,R.default.dirname(r)).split(R.default.sep).join("/"),Te=z==="."||!z?"":z.startsWith("/")?z:"/"+z,te=(e,l)=>{let[a,p]=e.getArguments();if(!a?.isKind(h.SyntaxKind.StringLiteral))return;let m=a.getLiteralValue(),u="unknown",g=Te,{paramsType:x,queryType:E,bodyType:F,isMultipart:v}=he(p);if(p?.isKind(h.SyntaxKind.ObjectLiteralExpression)){let _=p.getProperty("prefix");if(_?.isKind(h.SyntaxKind.PropertyAssignment)){let Z=_.getInitializer();Z?.isKind(h.SyntaxKind.StringLiteral)&&(g=Z.getLiteralValue())}let Q=p.getProperty("handler");if(Q?.isKind(h.SyntaxKind.PropertyAssignment)){let Z=Q.getInitializer();Z&&(u=ae(Z),u.startsWith("Promise<")||(u=`Promise<${u}>`))}}let A="",L="";l==="rpc"?(A=R.default.join(g,"rpc",m).replace(/\\/g,"/"),L=Fe("action",g,m)):l==="loader"?(A=R.default.join(g,"loader",m).replace(/\\/g,"/"),L=Fe("loader",g,m)):l==="api"&&(A=R.default.join(g,"api",m).replace(/\\/g,"/"),L=Fe("get",g,m)),L&&ee.push({type:l,name:L,returnType:u,url:m,rpcUrl:A,loaderUrl:A,paramsType:x,queryType:E,bodyType:F,isMultipart:v})};W.forEach(e=>te(e,"rpc")),I.forEach(e=>te(e,"loader")),K.forEach(e=>te(e,"api"));let re=[],be=[...O.entries()].sort((e,l)=>e[0].localeCompare(l[0]));for(let[e,l]of be)re.push(`import type { ${[...l].sort().join(", ")} } from "${e}";`);let xe=[...ee].sort((e,l)=>e.name.localeCompare(l.name)),le=[];xe.forEach(e=>{le.push(J(e))});let ne=`// AUTO-GENERATED by @bobtail.software/b-ssr. DO NOT EDIT.
9
+ `);return(await ue(w,me)||await(0,V.access)(w).then(()=>!0).catch(()=>!1))&&d.push(w),!0}catch(t){return u.push(`Error processing ${x}: ${t instanceof Error?t.message:String(t)}`),!1}}let E=await(0,he.default)(n,{absolute:!0});if(await Promise.all(E.map(x=>b(x))),g.resolveSourceFileDependencies(),i){let x=await(0,he.default)(O.default.join(a,"**/*.universal.d.ts"),{absolute:!0});for(let t of x){let s=t.replace(".universal.d.ts",".mts").replace(".universal.d.ts",".ts");if(!await(0,V.access)(s).then(()=>!0).catch(()=>!1))try{await(0,V.unlink)(t),p.push(t)}catch{}}}}catch(g){u.push(`Fatal error: ${g instanceof Error?g.message:String(g)}`)}return{generated:d,cleaned:p,errors:u}}var H="virtual:b-ssr-rpc-universal:";function Le(e={}){let{routerPattern:n="src-ts/routers/**/*.mts",tsConfigFilePath:l="tsconfig.json",routerBaseDir:a="src-ts/routers"}=e,i=new Map,d=new Set,p=new q.Project({tsConfigFilePath:l,skipAddingFilesFromTsConfig:!1}),u=P.default.resolve(process.cwd(),a||"."),g=!1;async function S(t){try{let s=p.addSourceFileAtPath(t);await s.refreshFromFileSystem(),g||p.resolveSourceFileDependencies();let r=s.getDescendantsOfKind(q.SyntaxKind.CallExpression),o=r.filter(c=>c.getExpression().getText().endsWith(".addRpcRoute")),m=r.filter(c=>c.getExpression().getText().endsWith(".addRenderRoute")),f=r.filter(c=>c.getExpression().getText().endsWith(".addLoaderRoute")),w=P.default.extname(t),R=t.substring(0,t.length-w.length)+".universal.d.ts",y=P.default.resolve(t);if(o.length===0&&m.length===0&&f.length===0){i.delete(y),d.delete(y),R!==t&&await(0,se.unlink)(R).catch(()=>{});return}d.add(y);let $=[],C=new Map;C.has("fastify")||C.set("fastify",new Set),C.get("fastify")?.add("FastifyRequest"),C.get("fastify")?.add("FastifyReply");let j=P.default.relative(u,P.default.dirname(t)).split(P.default.sep).join("/"),U=j==="."||!j?"":j.startsWith("/")?j:"/"+j,Q=(c,F)=>{let[_,I]=c.getArguments();if(!_?.isKind(q.SyntaxKind.StringLiteral))return;let D=_.getLiteralValue(),K="unknown",A=U,{paramsType:W,queryType:ie,bodyType:ae,isMultipart:B}=fe(I,s,R,p,C);if(I?.isKind(q.SyntaxKind.ObjectLiteralExpression)){let be=I.getProperty("prefix");if(be?.isKind(q.SyntaxKind.PropertyAssignment)){let te=be.getInitializer();te?.isKind(q.SyntaxKind.StringLiteral)&&(A=te.getLiteralValue())}let Te=I.getProperty("handler");if(Te?.isKind(q.SyntaxKind.PropertyAssignment)){let te=Te.getInitializer();te&&(K=ge(te,s,R,p,C),K.startsWith("Promise<")||(K=`Promise<${K}>`))}}let J="",ee="";F==="rpc"?(J=P.default.join(A,"rpc",D).replace(/\\/g,"/"),ee=N("action",A,D)):F==="loader"?(J=P.default.join(A,"loader",D).replace(/\\/g,"/"),ee=N("loader",A,D)):F==="api"&&(J=P.default.join(A,"api",D).replace(/\\/g,"/"),ee=N("get",A,D)),ee&&$.push({type:F,name:ee,returnType:K,url:D,rpcUrl:J,loaderUrl:J,paramsType:W,queryType:ie,bodyType:ae,isMultipart:B})};o.forEach(c=>Q(c,"rpc")),m.forEach(c=>Q(c,"loader")),f.forEach(c=>Q(c,"api"));let X=[],oe=[...C.entries()].sort((c,F)=>c[0].localeCompare(F[0]));for(let[c,F]of oe)X.push(`import type { ${[...F].sort().join(", ")} } from "${c}";`);let me=[...$].sort((c,F)=>c.name.localeCompare(F.name)),ye=[];me.forEach(c=>{ye.push(de(c))});let T=`// AUTO-GENERATED by @bobtail.software/b-ssr. DO NOT EDIT.
10
10
  /* eslint-disable */
11
11
 
12
- `+(re.length>0?re.join(`
12
+ `+(X.length>0?X.join(`
13
13
  `)+`
14
14
 
15
- `:"")+le.join(`
15
+ `:"")+ye.join(`
16
16
 
17
- `);try{let e=await(0,ye.resolveConfig)(H)||{};ne=await(0,ye.format)(ne,{...e,parser:"typescript",filepath:H})}catch{}await(0,se.writeFile)(H,ne);let n=[],d=[];ee.forEach(e=>{let a=e.type==="rpc"?"POST":"GET",p=e.type==="loader"?e.loaderUrl:e.rpcUrl;d.push({name:e.name,rpcUrl:p,method:a,isMultipart:!!e.isMultipart}),n.push({name:e.name,url:e.url,type:e.type,requiresArgs:!0})});let w=`
17
+ `);await ue(R,T);let v=[],Y=[];$.forEach(c=>{let _=c.type==="rpc"?"POST":"GET",I=c.type==="loader"?c.loaderUrl:c.rpcUrl;Y.push({name:c.name,rpcUrl:I,method:_,isMultipart:!!c.isMultipart}),v.push({name:c.name,url:c.url,type:c.type,requiresArgs:!0})});let G=`
18
18
  import { createClientRpc } from '@bobtail.software/b-ssr/client';
19
19
 
20
20
  if (import.meta.env.DEV) {
21
- console.debug('\u{1F6E1}\uFE0F [B-SSR Security] Loaded SAFE Client-Stub for: ${R.default.basename(r)}');
21
+ console.debug('\u{1F6E1}\uFE0F [B-SSR Security] Loaded SAFE Client-Stub for: ${P.default.basename(t)}');
22
22
  }
23
23
 
24
- ${d.map(e=>`
25
- export const ${e.name} = createClientRpc({
26
- url: '${e.rpcUrl}',
27
- method: '${e.method}',
28
- isMultipart: ${e.isMultipart}
24
+ ${Y.map(c=>`
25
+ export const ${c.name} = createClientRpc({
26
+ url: '${c.rpcUrl}',
27
+ method: '${c.method}',
28
+ isMultipart: ${c.isMultipart}
29
29
  });
30
30
  `).join(`
31
31
  `)}
32
- `,$=V(n,r);f.set(R.default.resolve(r),{client:w,server:$})}catch(M){console.error(`[rpc-generator] Error al procesar ${r}:`,{error:M})}}let N=(r,c,o)=>{if(c.includes("node_modules")||c.startsWith(ie))return null;if(o?.ssr===!0&&/\.[cm]?[jt]sx?$/.test(c)){let C=/\brequire\s*\(/.test(r),M=/\bmodule\.exports\b/.test(r),b=/\bexports\./.test(r);if(C||M||b)return"import { createRequire } from 'module';"+`
32
+ `,M=E(v,t);i.set(P.default.resolve(t),{client:G,server:M})}catch(s){console.error(`[rpc-generator] Error al procesar ${t}:`,{error:s})}}let b=(t,s,r)=>{if(s.includes("node_modules")||s.startsWith(H))return null;if(r?.ssr===!0&&/\.[cm]?[jt]sx?$/.test(s)){let o=/\brequire\s*\(/.test(t),m=/\bmodule\.exports\b/.test(t),f=/\bexports\./.test(t);if(o||m||f)return"import { createRequire } from 'module';"+`
33
33
  const require = createRequire(import.meta.url);
34
34
  const module = { exports: {} };
35
35
  const exports = module.exports;
36
- `+r+`
37
- export default module.exports;`}return null};function J(r){let c=Ve(r),o="";return c.length>0&&(o=`args: { ${c.join("; ")} }`),o||(o="args: { signal?: AbortSignal }"),`export declare const ${r.name}: (${o}, ssrContext?: { req?: FastifyRequest, reply?: FastifyReply }) => ${r.returnType};`}function V(r,c){if(r.length===0)return"";let o=R.default.relative(process.cwd(),c).replace(/\\/g,"/");return`
36
+ `+t+`
37
+ export default module.exports;`}return null};function E(t,s){if(t.length===0)return"";let r=process.cwd(),o=P.default.relative(r,s).replace(/\\/g,"/");return`
38
38
  import path from 'path';
39
39
  import { pathToFileURL } from 'url';
40
40
 
41
41
  if (typeof window !== 'undefined' && typeof document !== 'undefined') {
42
- throw new Error('\u{1F6A8} [B-SSR SECURITY ALERT] Server-side code leaked to browser: ${`./${R.default.relative(process.cwd(),c).replace(/\\/g,"/")}`}');
42
+ throw new Error('\u{1F6A8} [B-SSR SECURITY ALERT] Server-side code leaked to browser: ${`./${o}`}');
43
43
  }
44
44
 
45
45
  let initPromise;
@@ -59,7 +59,7 @@ export default module.exports;`}return null};function J(r){let c=Ve(r),o="";retu
59
59
  if (typeof globalThis.require === 'undefined') {
60
60
  try {
61
61
  const { createRequire } = await import('module');
62
- globalThis.require = createRequire(serverModulePath);
62
+ globalThis.require = createRequire(absolutePath);
63
63
  } catch (e) {}
64
64
  }
65
65
 
@@ -93,7 +93,7 @@ export default module.exports;`}return null};function J(r){let c=Ve(r),o="";retu
93
93
  try {
94
94
  await entryPoint(mockFastify);
95
95
  } catch (err) {
96
- console.error('\u274C [B-SSR CRITICAL] Error inicializando rutas backend:', serverModulePath, err);
96
+ console.error('\u274C [B-SSR CRITICAL] Error inicializando rutas backend:', absolutePath, err);
97
97
  }
98
98
  }
99
99
  })();
@@ -101,46 +101,46 @@ export default module.exports;`}return null};function J(r){let c=Ve(r),o="";retu
101
101
  return initPromise;
102
102
  }
103
103
 
104
- ${r.map(b=>{let W=[];b.requiresArgs&&W.push("args"),W.push("ssrContext");let I=b.requiresArgs?"args":"{}",K="";return b.type==="rpc"?K=`
104
+ ${t.map(f=>{let w=[];f.requiresArgs&&w.push("args"),w.push("ssrContext");let R=f.requiresArgs?"args":"{}",y="";return f.type==="rpc"?y=`
105
105
  if (fn.isMultipart) throw new Error('RPC multipart no soportado en SSR.');
106
106
  await getOptionsMaps();
107
- const options = rpcOptionsMap.get('${b.url}');
108
- if (!options?.handler) throw new Error('Handler no encontrado para RPC: ${b.name}');
109
- const augmentedReq = Object.assign(Object.create(ssrContext.req), ${I});
107
+ const options = rpcOptionsMap.get('${f.url}');
108
+ if (!options?.handler) throw new Error('Handler no encontrado para RPC: ${f.name}');
109
+ const augmentedReq = Object.assign(Object.create(ssrContext.req), ${R});
110
110
  return await options.handler.call(ssrContext.req.server, augmentedReq, ssrContext.reply);
111
- `:b.type==="api"?K=`
111
+ `:f.type==="api"?y=`
112
112
  await getOptionsMaps();
113
- const options = loaderApiOptionsMap.get('${b.url}');
113
+ const options = loaderApiOptionsMap.get('${f.url}');
114
114
  if (!options?.handler) {
115
- console.error('\u26A0\uFE0F [B-SSR Warning] Handler API no encontrado:', '${b.name}', 'URL:', '${b.url}');
115
+ console.error('\u26A0\uFE0F [B-SSR Warning] Handler API no encontrado:', '${f.name}', 'URL:', '${f.url}');
116
116
  return null;
117
117
  }
118
- const augmentedReq = Object.assign(Object.create(ssrContext.req), ${I});
118
+ const augmentedReq = Object.assign(Object.create(ssrContext.req), ${R});
119
119
  return await options.handler.call(ssrContext.req.server, augmentedReq, ssrContext.reply);
120
- `:K=`
120
+ `:y=`
121
121
  await getOptionsMaps();
122
- const options = renderOptionsMap.get('${b.url}');
122
+ const options = renderOptionsMap.get('${f.url}');
123
123
  if (!options) return {};
124
- const augmentedReq = Object.assign(Object.create(ssrContext.req), ${I});
124
+ const augmentedReq = Object.assign(Object.create(ssrContext.req), ${R});
125
125
  let customData = {};
126
126
  try {
127
127
  if (options.handler) {
128
128
  customData = (await options.handler.call(ssrContext.req.server, augmentedReq, ssrContext.reply)) || {};
129
129
  }
130
130
  } catch (handlerErr) {
131
- console.error('\u274C [B-SSR Handler Error] ${b.name}:', handlerErr);
131
+ console.error('\u274C [B-SSR Handler Error] ${f.name}:', handlerErr);
132
132
  return {};
133
133
  }
134
134
  if (ssrContext.reply.sent) return;
135
135
  return { ...customData };
136
- `,`export const ${b.name} = async (${W.join(", ")}) => {
136
+ `,`export const ${f.name} = async (${w.join(", ")}) => {
137
137
  try {
138
- if (!ssrContext?.req) throw new Error('ssrContext requerido en ${b.name} (SSR)');
139
- ${K}
138
+ if (!ssrContext?.req) throw new Error('ssrContext requerido en ${f.name} (SSR)');
139
+ ${y}
140
140
  } catch (error) {
141
- console.error('\u274C [B-SSR Error] ${b.name}:', error);
141
+ console.error('\u274C [B-SSR Error] ${f.name}:', error);
142
142
  throw error;
143
143
  }
144
144
  };`}).join(`
145
145
  `)}
146
- `}async function G(){let r=await(0,Re.default)(s,{absolute:!0});await Promise.all(r.map(c=>k(c)))}return{name:"b-ssr-vite-plugin-rpc-universal-generator",enforce:"pre",async buildStart(){await G()},configureServer(r){let c=o=>o.endsWith(".mts")||o.endsWith(".ts");r.watcher.on("add",o=>c(o)&&k(o)),r.watcher.on("change",o=>c(o)&&k(o)),r.watcher.on("unlink",o=>{if(c(o)){let C=R.default.resolve(o);f.delete(C),T.delete(C);let M=R.default.extname(o),b=o.substring(0,o.length-M.length)+".universal.d.ts";(0,se.unlink)(b).catch(()=>{})}})},async resolveId(r,c,o){if(r.startsWith(ie))return null;if(r.includes(".universal")){let C=r.split("?")[0],M=C;if(C.endsWith(".universal"))M=C;else if(C.endsWith(".universal.ts"))M=C.slice(0,-3);else if(C.endsWith(".universal.mts"))M=C.slice(0,-4);else if(C.endsWith(".universal.js"))M=C.slice(0,-3);else return null;let b=[".mts",".ts"];for(let W of b){let I=M.slice(0,-10)+W,K=await this.resolve(I,c,{skipSelf:!0});if(K){let X=o?.ssr?"?mode=ssr":"?mode=client";return ie+K.id+X}try{await(0,se.access)(I);let X=o?.ssr?"?mode=ssr":"?mode=client";return ie+I+X}catch{}}}return null},async load(r,c){if(r.startsWith(ie)){let o=r.slice(ie.length).split("?")[0],C=f.get(o);return C||(await k(o),C=f.get(o)),C?c?.ssr===!0?C.server:C.client:null}if(c?.ssr!==!0){let o=R.default.resolve(r);if(T.has(o))return`throw new Error("\u{1F6A8} [B-SSR FIREWALL] BLOCKED: Backend File imported in Client: ${R.default.basename(r)}");`}return null},transform:N}}function Ve(t){let s=[];return t.paramsType!=="unknown"&&s.push(`params: ${t.paramsType}`),t.queryType!=="unknown"&&s.push(`query: ${t.queryType}`),t.bodyType!=="unknown"&&s.push(`body: ${t.bodyType}`),s.push("signal?: AbortSignal"),s}0&&(module.exports={generateRpcTypes,rpcGeneratorPlugin});
146
+ `}async function x(){g=!0;let t=xe.performance.now(),s=await(0,Se.default)(n,{absolute:!0});await Promise.all(s.map(o=>S(o))),p.resolveSourceFileDependencies();let r=xe.performance.now();console.log(`\u{1F680} [B-SSR] RPC Generation completed in ${Math.round(r-t)}ms (${s.length} files)`),g=!1}return{name:"b-ssr-vite-plugin-rpc-universal-generator",enforce:"pre",async buildStart(){await x()},configureServer(t){let s=r=>r.endsWith(".mts")||r.endsWith(".ts");t.watcher.on("add",r=>s(r)&&S(r)),t.watcher.on("change",r=>s(r)&&S(r)),t.watcher.on("unlink",r=>{if(s(r)){let o=P.default.resolve(r);i.delete(o),d.delete(o);let m=P.default.extname(r),f=r.substring(0,r.length-m.length)+".universal.d.ts";(0,se.unlink)(f).catch(()=>{})}})},async resolveId(t,s,r){if(t.startsWith(H))return null;if(t.includes(".universal")){let o=t.split("?")[0],m=o;if(o.endsWith(".universal"))m=o;else if(o.endsWith(".universal.ts"))m=o.slice(0,-3);else if(o.endsWith(".universal.mts"))m=o.slice(0,-4);else if(o.endsWith(".universal.js"))m=o.slice(0,-3);else return null;let f=[".mts",".ts"];for(let w of f){let R=m.slice(0,-10)+w,y=await this.resolve(R,s,{skipSelf:!0});if(y){let $=r?.ssr?"?mode=ssr":"?mode=client";return H+y.id+$}try{await(0,se.access)(R);let $=r?.ssr?"?mode=ssr":"?mode=client";return H+R+$}catch{}}}return null},async load(t,s){if(t.startsWith(H)){let r=t.slice(H.length).split("?")[0],o=i.get(r);return o||(await S(r),o=i.get(r)),o?s?.ssr===!0?o.server:o.client:null}if(s?.ssr!==!0){let r=P.default.resolve(t);if(d.has(r))return`throw new Error("\u{1F6A8} [B-SSR FIREWALL] BLOCKED: Backend File imported in Client: ${P.default.basename(t)}");`}return null},transform:b}}0&&(module.exports={generateRpcTypes,rpcGeneratorPlugin});
@@ -1,45 +1,45 @@
1
- import De from"fast-glob";import{access as Ie,unlink as Ee,writeFile as Ke}from"fs/promises";import $ from"path";import{format as Ue,resolveConfig as We}from"prettier";import{Node as se,Project as _e,SyntaxKind as D,ts as ae}from"ts-morph";import Ce from"fast-glob";import{access as Re,unlink as be,writeFile as ve}from"fs/promises";import q from"path";import{format as je,resolveConfig as Oe}from"prettier";import{Node as ne,Project as Ne,SyntaxKind as k,ts as ie}from"ts-morph";function Le(o){let m=o.replace(/[^a-zA-Z0-9]+(.)?/g,(j,S)=>S?S.toUpperCase():"");return m.charAt(0).toLowerCase()+m.slice(1)}function xe(o,m,j){let S=q.basename(j,q.extname(j))||"Index",C=m.replace(/:[a-zA-Z0-9_]+/g,"").replace(/\//g," "),d=`${o} ${C} ${S}`;return Le(d)}function Me(o){let m=/([a-zA-Z_$][a-zA-Z0-9_$]*(?:\s*\|\s*)?)+/g,j=/'[^']+'/g,S=/`[^`]+`/g,C=o,d=[],s,A=o.replace(/[^'`]*/g,L=>" ".repeat(L.length));for(;(s=j.exec(o))!==null;)d.push({start:s.index,end:s.index+s[0].length,value:s[0]});for(;(s=S.exec(o))!==null;)d.push({start:s.index,end:s.index+s[0].length,value:s[0]});if(d.length>1){let L=d.map(t=>t.value).sort((t,l)=>{let n=t.replace(/['`]/g,""),x=l.replace(/['`]/g,"");return n.localeCompare(x)}),v=0,Y=[...L].sort((t,l)=>{let n=t.replace(/['`]/g,""),x=l.replace(/['`]/g,"");return n.localeCompare(x)}),V="",G=0;for(let t=0;t<d.length;t++)V+=o.slice(G,d[t].start),V+=Y[t],G=d[t].end;V+=o.slice(G),C=V}return C}function qe(o){let m=o.match(/^\{([\s\S]*)\}$/);if(!m)return o;let j=m[1];if(!j.includes(":"))return o;let S=j.split(/[;,]/).map(s=>s.trim()).filter(s=>s),C=[];for(let s of S){let A=s.indexOf(":");if(A===-1)continue;let L=s.slice(0,A).trim(),v=s.slice(A+1).trim();C.push({name:L,value:v})}return C.length<=1?o:(C.sort((s,A)=>s.name.localeCompare(A.name)),`{ ${C.map(s=>`${s.name}: ${s.value}`).join("; ")} }`)}function me(o){let m=Me(o);return m=qe(m),m}async function ke(o={}){let{routerPattern:m="src-ts/routers/**/*.mts",tsConfigFilePath:j="tsconfig.json",routerBaseDir:S="src-ts/routers",clean:C=!1}=o,d=[],s=[],A=[];try{let G=function(l){let n=[];return l.paramsType!=="unknown"&&n.push(`params: ${l.paramsType}`),l.queryType!=="unknown"&&n.push(`query: ${l.queryType}`),l.bodyType!=="unknown"&&n.push(`body: ${l.bodyType}`),n.push("signal?: AbortSignal"),n};var L=G;let v=new Ne({tsConfigFilePath:j,skipAddingFilesFromTsConfig:!1}),Y=q.resolve(process.cwd(),S||".");async function V(l){try{let B=function(r){return r.replace(/import\(['"](.*?)['"]\)/g,(f,T)=>{if(!q.isAbsolute(T))return f;let w=T;if(!q.extname(w)){let a=v.getSourceFile(i=>i.getFilePath().replace(/\.(mts|ts|tsx)$/,"")===T);a&&(w=a.getFilePath())}let e=q.relative(q.dirname(U),w).replace(/\\/g,"/");return e.startsWith(".")||(e="./"+e),`import("${e}")`})},M=function(r,f){if(r.getSymbol()?.getName()==="Promise"){let p=r.getAwaitedType();if(p)return`Promise<${M(p,f)}>`}let T=r.getAliasSymbol()??r.getSymbol();if(T?.getName()==="__object")return me(B(r.getText(f,ie.TypeFormatFlags.NoTruncation|ie.TypeFormatFlags.UseFullyQualifiedType)));if(r.isObject()&&!T){let p=(u,h=0)=>{if(!(h>5)){if(u.isArray()){let P=u.getArrayElementType();P&&p(P,h);return}if(u.isObject()&&!u.getSymbol()&&!u.getAliasSymbol()){for(let P of u.getApparentProperties()){let b=P.getValueDeclaration();b&&p(P.getTypeAtLocation(b),h+1)}return}M(u,f)}};return p(r),me(B(r.getText(f,ie.TypeFormatFlags.NoTruncation|ie.TypeFormatFlags.UseFullyQualifiedType)))}if(!T)return me(B(r.getText(f,ie.TypeFormatFlags.NoTruncation)));let w=T.getDeclarations()[0];if(!w)return T.getName();if(ne.isImportSpecifier(w)||ne.isImportClause(w)){let p=w.getFirstAncestorByKind(k.ImportDeclaration);if(p){let u=p.getModuleSpecifierValue(),h=T.getName();return R.has(u)||R.set(u,new Set),R.get(u)?.add(h),h}}let e=w.getSourceFile();if(e.getFilePath()===y.getFilePath())return T.getName();if(e.isInNodeModules())return me(B(r.getText(f,ie.TypeFormatFlags.NoTruncation)));let a=q.relative(q.dirname(U),e.getFilePath()).replace(/\\/g,"/"),c=a.startsWith(".")?a:`./${a}`,g=T.getName();return R.has(c)||R.set(c,new Set),R.get(c)?.add(g),g},ce=function(r){let f;if(ne.isFunctionLikeDeclaration(r)||ne.isArrowFunction(r)){let T=r.getDescendantsOfKind(k.ReturnStatement);for(let w of T){let e=w.getExpression();if(e?.isKind(k.SatisfiesExpression)){f=e.getTypeNode()?.getType();break}}}if(f)return M(f,r);{let T=r.getType().getCallSignatures();if(T.length>0){let w=T[0]?.getReturnType();return M(w,r)}}return"unknown"};var n=B,x=M,N=ce;let y=v.addSourceFileAtPath(l);await y.refreshFromFileSystem(),v.resolveSourceFileDependencies();let W=y.getDescendantsOfKind(k.CallExpression),I=W.filter(r=>r.getExpression().getText().endsWith(".addRpcRoute")),K=W.filter(r=>r.getExpression().getText().endsWith(".addRenderRoute")),X=W.filter(r=>r.getExpression().getText().endsWith(".addLoaderRoute")),H=q.extname(l),U=l.substring(0,l.length-H.length)+".universal.d.ts";if(I.length===0&&K.length===0&&X.length===0){if(C)try{await be(U),s.push(U)}catch{}return!1}let J=[],R=new Map;R.has("fastify")||R.set("fastify",new Set),R.get("fastify")?.add("FastifyRequest"),R.get("fastify")?.add("FastifyReply");let de=r=>{let f="unknown",T="unknown",w="unknown",e=!1;if(!r||!ne.isObjectLiteralExpression(r))return{paramsType:f,queryType:T,bodyType:w,isMultipart:e};let a=r.getProperty("schema");if(a?.isKind(k.PropertyAssignment)){let i=a.getInitializer();if(i?.isKind(k.Identifier)){let g=i.getSymbol()?.getValueDeclaration();if(g){let p=g.getFirstDescendantByKind(k.ObjectLiteralExpression);p&&(i=p)}}if(i&&ne.isObjectLiteralExpression(i)){let c=i.getProperty("consumes");if(c?.isKind(k.PropertyAssignment)){let p=c.getInitializer();ne.isArrayLiteralExpression(p)&&(e=p.getElements().some(u=>u.isKind(k.StringLiteral)&&u.getLiteralValue()==="multipart/form-data"))}let g=p=>{let u=i.getProperty(p);if(u?.isKind(k.PropertyAssignment)){let h=u.getInitializer();if(h){let P=h.getType(),b=P.getApparentType(),E=b.getProperty("_output");if(E)return M(E.getTypeAtLocation(h).getApparentType(),h);let F=P.getSymbol(),O=P.getAliasSymbol(),_=F?.getName(),Q=O?.getName();if(_&&_!=="__type"&&_!=="object"||Q&&Q!=="__type"&&Q!=="object")return M(P,h);let Z=b.getProperties();if(Z.length>0){let ge=[];for(let oe of Z){let ue=oe.getTypeAtLocation(h);ge.push(`${oe.getName()}: ${ue.getText(h)}`)}return`{ ${ge.join("; ")} }`}return M(P,h)}}return"unknown"};if(f=g("params"),T=g("querystring"),w=g("body"),e){let p="{ file: File }";w=w!=="unknown"&&w.trim().startsWith("{")?`(${w} & ${p})`:p}}}return{paramsType:f,queryType:T,bodyType:w,isMultipart:e}},z=q.relative(Y,q.dirname(l)).split(q.sep).join("/"),ye=z==="."||!z?"":z.startsWith("/")?z:"/"+z,ee=(r,f)=>{let[T,w]=r.getArguments();if(!T?.isKind(k.StringLiteral))return;let e=T.getLiteralValue(),a="unknown",i=ye,{paramsType:c,queryType:g,bodyType:p,isMultipart:u}=de(w);if(w?.isKind(k.ObjectLiteralExpression)){let b=w.getProperty("prefix");if(b?.isKind(k.PropertyAssignment)){let F=b.getInitializer();F?.isKind(k.StringLiteral)&&(i=F.getLiteralValue())}let E=w.getProperty("handler");if(E?.isKind(k.PropertyAssignment)){let F=E.getInitializer();F&&(a=ce(F),a.startsWith("Promise<")||(a=`Promise<${a}>`))}}let h="",P="";f==="rpc"?(h=q.join(i,"rpc",e).replace(/\\/g,"/"),P=xe("action",i,e)):f==="loader"?(h=q.join(i,"loader",e).replace(/\\/g,"/"),P=xe("loader",i,e)):f==="api"&&(h=q.join(i,"api",e).replace(/\\/g,"/"),P=xe("get",i,e)),P&&J.push({type:f,name:P,returnType:a,url:e,rpcUrl:h,loaderUrl:h,paramsType:c,queryType:g,bodyType:p,isMultipart:u})};if(I.forEach(r=>ee(r,"rpc")),K.forEach(r=>ee(r,"loader")),X.forEach(r=>ee(r,"api")),J.length===0){if(C)try{await be(U),s.push(U)}catch{}return!1}let te=[],he=[...R.entries()].sort((r,f)=>r[0].localeCompare(f[0]));for(let[r,f]of he)te.push(`import type { ${[...f].sort().join(", ")} } from "${r}";`);let Te=[...J].sort((r,f)=>r.name.localeCompare(f.name)),pe=[];Te.forEach(r=>{let f=G(r),T="";f.length>0&&(T=`args: { ${f.join("; ")} }`),T||(T="args: { signal?: AbortSignal }"),pe.push(`export declare const ${r.name}: (${T}, ssrContext?: { req?: FastifyRequest, reply?: FastifyReply }) => ${r.returnType};`)});let re=`// AUTO-GENERATED by @bobtail.software/b-ssr. DO NOT EDIT.
1
+ import $e from"fast-glob";import{access as je,unlink as be}from"fs/promises";import P from"path";import{Project as Oe,SyntaxKind as H}from"ts-morph";import{writeFile as we,readFile as ye}from"fs/promises";import k from"path";import{format as Re,resolveConfig as Se}from"prettier";import{Node as W,SyntaxKind as M,ts as G}from"ts-morph";function Fe(t){let o=t.replace(/[^a-zA-Z0-9]+(.)?/g,(g,a)=>a?a.toUpperCase():"");return o.charAt(0).toLowerCase()+o.slice(1)}function q(t,o,g){let a=k.basename(g,k.extname(g))||"Index",l=o.replace(/:[a-zA-Z0-9_]+/g,"").replace(/\//g," "),d=`${t} ${l} ${a}`;return Fe(d)}function Pe(t){let o=/'[^']+'/g,g=/`[^`]+`/g,a=[],l,d=/'[^']+'/g;for(;(l=d.exec(t))!==null;)a.push({start:l.index,end:l.index+l[0].length,value:l[0]});let c=/`[^`]+`/g;for(;(l=c.exec(t))!==null;)a.push({start:l.index,end:l.index+l[0].length,value:l[0]});if(a.length>1){let p=[...a].sort((x,C)=>{let h=x.value.replace(/['`]/g,""),e=C.value.replace(/['`]/g,"");return h.localeCompare(e)}),u="",R=0;for(let x=0;x<a.length;x++)u+=t.slice(R,a[x].start),u+=p[x].value,R=a[x].end;return u+=t.slice(R),u}return t}function Ce(t){let o=t.match(/^\{([\s\S]*)\}$/);if(!o)return t;let g=o[1];if(!g.includes(":"))return t;let a=g.split(/[;,]/).map(c=>c.trim()).filter(c=>c),l=[];for(let c of a){let p=c.indexOf(":");if(p===-1)continue;let u=c.slice(0,p).trim(),R=c.slice(p+1).trim();l.push({name:u,value:R})}return l.length<=1?t:(l.sort((c,p)=>c.name.localeCompare(p.name)),`{ ${l.map(c=>`${c.name}: ${c.value}`).join("; ")} }`)}function ie(t){let o=Pe(t);return o=Ce(o),o}async function ae(t,o){try{if(await ye(t,"utf-8")===o)return!1}catch{}let g=o;try{let a=await Se(t)||{};g=await Re(o,{...a,parser:"typescript",filepath:t})}catch{}try{if(await ye(t,"utf-8")===g)return!1}catch{}return await we(t,g),!0}function B(t,o,g,a,l,d){function c(e){return e.replace(/import\(['"](.*?)['"]\)/g,(n,r)=>{if(!k.isAbsolute(r))return n;let s=r;if(!k.extname(s)){let f=l.getSourceFile(T=>T.getFilePath().replace(/\.(mts|ts|tsx)$/,"")===r);f&&(s=f.getFilePath())}let m=k.relative(k.dirname(a),s).replace(/\\/g,"/");return m.startsWith(".")||(m="./"+m),`import("${m}")`})}if(t.getSymbol()?.getName()==="Promise"){let e=t.getAwaitedType();if(e)return`Promise<${B(e,o,g,a,l,d)}>`}let p=t.getAliasSymbol()??t.getSymbol();if(p?.getName()==="__object")return ie(c(t.getText(o,G.TypeFormatFlags.NoTruncation|G.TypeFormatFlags.UseFullyQualifiedType)));if(t.isObject()&&!p){let e=(n,r=0)=>{if(!(r>5)){if(n.isArray()){let s=n.getArrayElementType();s&&e(s,r);return}if(n.isObject()&&!n.getSymbol()&&!n.getAliasSymbol()){for(let s of n.getApparentProperties()){let m=s.getValueDeclaration();m&&e(s.getTypeAtLocation(m),r+1)}return}B(n,o,g,a,l,d)}};return e(t),ie(c(t.getText(o,G.TypeFormatFlags.NoTruncation|G.TypeFormatFlags.UseFullyQualifiedType)))}if(!p)return ie(c(t.getText(o,G.TypeFormatFlags.NoTruncation)));let u=p.getDeclarations()[0];if(!u)return p.getName();if(W.isImportSpecifier(u)||W.isImportClause(u)){let e=u.getFirstAncestorByKind(M.ImportDeclaration);if(e){let n=e.getModuleSpecifierValue(),r=p.getName();return d.has(n)||d.set(n,new Set),d.get(n)?.add(r),r}}let R=u.getSourceFile();if(R.getFilePath()===g.getFilePath())return p.getName();if(R.isInNodeModules())return ie(c(t.getText(o,G.TypeFormatFlags.NoTruncation)));let x=k.relative(k.dirname(a),R.getFilePath()).replace(/\\/g,"/"),C=x.startsWith(".")?x:`./${x}`,h=p.getName();return d.has(C)||d.set(C,new Set),d.get(C)?.add(h),h}function ce(t,o,g,a,l){let d;if(W.isFunctionLikeDeclaration(t)||W.isArrowFunction(t)){let c=t.getDescendantsOfKind(M.ReturnStatement);for(let p of c){let u=p.getExpression();if(u?.isKind(M.SatisfiesExpression)){d=u.getTypeNode()?.getType();break}}}if(d)return B(d,t,o,g,a,l);{let c=t.getType().getCallSignatures();if(c.length>0){let p=c[0]?.getReturnType();return B(p,t,o,g,a,l)}}return"unknown"}function le(t,o,g,a,l){let d="unknown",c="unknown",p="unknown",u=!1;if(!t||!W.isObjectLiteralExpression(t))return{paramsType:d,queryType:c,bodyType:p,isMultipart:u};let R=t.getProperty("schema");if(R?.isKind(M.PropertyAssignment)){let x=R.getInitializer();if(x?.isKind(M.Identifier)){let h=x.getSymbol()?.getValueDeclaration();if(h){let e=h.getFirstDescendantByKind(M.ObjectLiteralExpression);e&&(x=e)}}if(x&&W.isObjectLiteralExpression(x)){let C=x.getProperty("consumes");if(C?.isKind(M.PropertyAssignment)){let e=C.getInitializer();W.isArrayLiteralExpression(e)&&(u=e.getElements().some(n=>n.isKind(M.StringLiteral)&&n.getLiteralValue()==="multipart/form-data"))}let h=e=>{let n=x.getProperty(e);if(n?.isKind(M.PropertyAssignment)){let r=n.getInitializer();if(r){let s=r.getType(),m=s.getApparentType(),f=m.getProperty("_output");if(f)return B(f.getTypeAtLocation(r).getApparentType(),r,o,g,a,l);let T=s.getSymbol(),w=s.getAliasSymbol(),y=T?.getName(),A=w?.getName();if(y&&y!=="__type"&&y!=="object"||A&&A!=="__type"&&A!=="object")return B(s,r,o,g,a,l);let F=m.getProperties();if(F.length>0){let Q=[];for(let $ of F){let I=$.getTypeAtLocation(r);Q.push(`${$.getName()}: ${I.getText(r)}`)}return`{ ${Q.join("; ")} }`}return B(s,r,o,g,a,l)}}return"unknown"};if(d=h("params"),c=h("querystring"),p=h("body"),u){let e="{ file: File }";p=p!=="unknown"&&p.trim().startsWith("{")?`(${p} & ${e})`:e}}}return{paramsType:d,queryType:c,bodyType:p,isMultipart:u}}function Ee(t){let o=[];return t.paramsType!=="unknown"&&o.push(`params: ${t.paramsType}`),t.queryType!=="unknown"&&o.push(`query: ${t.queryType}`),t.bodyType!=="unknown"&&o.push(`body: ${t.bodyType}`),o.push("signal?: AbortSignal"),o}function pe(t){let o=Ee(t),g="";return o.length>0&&(g=`args: { ${o.join("; ")} }`),g||(g="args: { signal?: AbortSignal }"),`export declare const ${t.name}: (${g}, ssrContext?: { req?: FastifyRequest, reply?: FastifyReply }) => ${t.returnType};`}import{performance as Te}from"perf_hooks";import he from"fast-glob";import{access as xe,unlink as fe}from"fs/promises";import D from"path";import{Project as ve,SyntaxKind as _}from"ts-morph";async function Ae(t={}){let{routerPattern:o="src-ts/routers/**/*.mts",tsConfigFilePath:g="tsconfig.json",routerBaseDir:a="src-ts/routers",clean:l=!1}=t,d=[],c=[],p=[];try{let u=new ve({tsConfigFilePath:g,skipAddingFilesFromTsConfig:!1}),R=D.resolve(process.cwd(),a||".");async function x(h){try{let e=u.addSourceFileAtPath(h);await e.refreshFromFileSystem();let n=e.getDescendantsOfKind(_.CallExpression),r=n.filter(b=>b.getExpression().getText().endsWith(".addRpcRoute")),s=n.filter(b=>b.getExpression().getText().endsWith(".addRenderRoute")),m=n.filter(b=>b.getExpression().getText().endsWith(".addLoaderRoute")),f=D.extname(h),T=h.substring(0,h.length-f.length)+".universal.d.ts";if(r.length===0&&s.length===0&&m.length===0){if(l)try{await fe(T),c.push(T)}catch{}return!1}let w=[],y=new Map;y.has("fastify")||y.set("fastify",new Set),y.get("fastify")?.add("FastifyRequest"),y.get("fastify")?.add("FastifyReply");let F=D.relative(R,D.dirname(h)).split(D.sep).join("/"),Q=F==="."||!F?"":F.startsWith("/")?F:"/"+F,$=(b,E)=>{let[J,z]=b.getArguments();if(!J?.isKind(_.StringLiteral))return;let j=J.getLiteralValue(),i="unknown",S=Q,{paramsType:V,queryType:L,bodyType:O,isMultipart:N}=le(z,e,T,u,y);if(z?.isKind(_.ObjectLiteralExpression)){let se=z.getProperty("prefix");if(se?.isKind(_.PropertyAssignment)){let K=se.getInitializer();K?.isKind(_.StringLiteral)&&(S=K.getLiteralValue())}let oe=z.getProperty("handler");if(oe?.isKind(_.PropertyAssignment)){let K=oe.getInitializer();K&&(i=ce(K,e,T,u,y),i.startsWith("Promise<")||(i=`Promise<${i}>`))}}let v="",U="";E==="rpc"?(v=D.join(S,"rpc",j).replace(/\\/g,"/"),U=q("action",S,j)):E==="loader"?(v=D.join(S,"loader",j).replace(/\\/g,"/"),U=q("loader",S,j)):E==="api"&&(v=D.join(S,"api",j).replace(/\\/g,"/"),U=q("get",S,j)),U&&w.push({type:E,name:U,returnType:i,url:j,rpcUrl:v,loaderUrl:v,paramsType:V,queryType:L,bodyType:O,isMultipart:N})};if(r.forEach(b=>$(b,"rpc")),s.forEach(b=>$(b,"loader")),m.forEach(b=>$(b,"api")),w.length===0){if(l)try{await fe(T),c.push(T)}catch{}return!1}let I=[],X=[...y.entries()].sort((b,E)=>b[0].localeCompare(E[0]));for(let[b,E]of X)I.push(`import type { ${[...E].sort().join(", ")} } from "${b}";`);let Y=[...w].sort((b,E)=>b.name.localeCompare(E.name)),ne=[];Y.forEach(b=>{ne.push(pe(b))});let ue=`// AUTO-GENERATED by @bobtail.software/b-ssr. DO NOT EDIT.
2
2
  /* eslint-disable */
3
3
 
4
- `+(te.length>0?te.join(`
4
+ `+(I.length>0?I.join(`
5
5
  `)+`
6
6
 
7
- `:"")+pe.join(`
7
+ `:"")+ne.join(`
8
8
 
9
- `);try{let r=await Oe(U)||{};re=await je(re,{...r,parser:"typescript",filepath:U})}catch{}return await ve(U,re),d.push(U),!0}catch(y){return A.push(`Error processing ${l}: ${y instanceof Error?y.message:String(y)}`),!1}}let t=await Ce(m,{absolute:!0});if(await Promise.all(t.map(l=>V(l))),C){let l=await Ce(q.join(S,"**/*.universal.d.ts"),{absolute:!0});for(let n of l){let x=n.replace(".universal.d.ts",".mts").replace(".universal.d.ts",".ts");if(!await Re(x).then(()=>!0).catch(()=>!1))try{await be(n),s.push(n)}catch{}}}}catch(v){A.push(`Fatal error: ${v instanceof Error?v.message:String(v)}`)}return{generated:d,cleaned:s,errors:A}}var le="virtual:b-ssr-rpc-universal:";function Be(o){let m=o.replace(/[^a-zA-Z0-9]+(.)?/g,(j,S)=>S?S.toUpperCase():"");return m.charAt(0).toLowerCase()+m.slice(1)}function Pe(o,m,j){let S=$.basename(j,$.extname(j))||"Index",C=m.replace(/:[a-zA-Z0-9_]+/g,"").replace(/\//g," "),d=`${o} ${C} ${S}`;return Be(d)}function ze(o){let m=/'[^']+'/g,j=/`[^`]+`/g,S=[];for(;m.exec(o)!==null;);let C=/'[^']+'/g,d;for(;(d=C.exec(o))!==null;)S.push({start:d.index,end:d.index+d[0].length,value:d[0]});for(;(d=j.exec(o))!==null;)S.push({start:d.index,end:d.index+d[0].length,value:d[0]});if(S.length>1){let s=[...S].sort((v,Y)=>{let V=v.value.replace(/['`]/g,""),G=Y.value.replace(/['`]/g,"");return V.localeCompare(G)}),A="",L=0;for(let v=0;v<S.length;v++)A+=o.slice(L,S[v].start),A+=s[v].value,L=S[v].end;return A+=o.slice(L),A}return o}function Ve(o){let m=o.match(/^\{([\s\S]*)\}$/);if(!m)return o;let j=m[1];if(!j.includes(":"))return o;let S=j.split(/[;,]/).map(s=>s.trim()).filter(s=>s),C=[];for(let s of S){let A=s.indexOf(":");if(A===-1)continue;let L=s.slice(0,A).trim(),v=s.slice(A+1).trim();C.push({name:L,value:v})}return C.length<=1?o:(C.sort((s,A)=>s.name.localeCompare(A.name)),`{ ${C.map(s=>`${s.name}: ${s.value}`).join("; ")} }`)}function fe(o){let m=ze(o);return m=Ve(m),m}function at(o={}){let{routerPattern:m="src-ts/routers/**/*.mts",tsConfigFilePath:j="tsconfig.json",routerBaseDir:S="src-ts/routers"}=o,C=new Map,d=new Set,s=new _e({tsConfigFilePath:j,skipAddingFilesFromTsConfig:!1}),A=$.resolve(process.cwd(),S||".");async function L(t){try{let B=function(e){return e.replace(/import\(['"](.*?)['"]\)/g,(a,i)=>{if(!$.isAbsolute(i))return a;let c=i;if(!$.extname(c)){let p=s.getSourceFile(u=>u.getFilePath().replace(/\.(mts|ts|tsx)$/,"")===i);p&&(c=p.getFilePath())}let g=$.relative($.dirname(H),c).replace(/\\/g,"/");return g.startsWith(".")||(g="./"+g),`import("${g}")`})},M=function(e,a){if(e.getSymbol()?.getName()==="Promise"){let b=e.getAwaitedType();if(b)return`Promise<${M(b,a)}>`}let i=e.getAliasSymbol()??e.getSymbol();if(i?.getName()==="__object")return fe(B(e.getText(a,ae.TypeFormatFlags.NoTruncation|ae.TypeFormatFlags.UseFullyQualifiedType)));if(e.isObject()&&!i){let b=(E,F=0)=>{if(!(F>5)){if(E.isArray()){let O=E.getArrayElementType();O&&b(O,F);return}if(E.isObject()&&!E.getSymbol()&&!E.getAliasSymbol()){for(let O of E.getApparentProperties()){let _=O.getValueDeclaration();_&&b(O.getTypeAtLocation(_),F+1)}return}M(E,a)}};return b(e),fe(B(e.getText(a,ae.TypeFormatFlags.NoTruncation|ae.TypeFormatFlags.UseFullyQualifiedType)))}if(!i)return fe(B(e.getText(a,ae.TypeFormatFlags.NoTruncation)));let c=i.getDeclarations()[0];if(!c)return i.getName();if(se.isImportSpecifier(c)||se.isImportClause(c)){let b=c.getFirstAncestorByKind(D.ImportDeclaration);if(b){let E=b.getModuleSpecifierValue(),F=i.getName();return R.has(E)||R.set(E,new Set),R.get(E)?.add(F),F}}let g=c.getSourceFile();if(g.getFilePath()===N.getFilePath())return i.getName();if(g.isInNodeModules())return fe(B(e.getText(a,ae.TypeFormatFlags.NoTruncation)));let p=$.relative($.dirname(H),g.getFilePath()).replace(/\\/g,"/"),h=p.startsWith(".")?p:`./${p}`,P=i.getName();return R.has(h)||R.set(h,new Set),R.get(h)?.add(P),P},ce=function(e){let a;if(se.isFunctionLikeDeclaration(e)||se.isArrowFunction(e)){let i=e.getDescendantsOfKind(D.ReturnStatement);for(let c of i){let g=c.getExpression();if(g?.isKind(D.SatisfiesExpression)){a=g.getTypeNode()?.getType();break}}}if(a)return M(a,e);{let i=e.getType().getCallSignatures();if(i.length>0){let c=i[0]?.getReturnType();return M(c,e)}}return"unknown"};var l=B,n=M,x=ce;let N=s.addSourceFileAtPath(t);await N.refreshFromFileSystem(),s.resolveSourceFileDependencies();let y=N.getDescendantsOfKind(D.CallExpression),W=y.filter(e=>e.getExpression().getText().endsWith(".addRpcRoute")),I=y.filter(e=>e.getExpression().getText().endsWith(".addRenderRoute")),K=y.filter(e=>e.getExpression().getText().endsWith(".addLoaderRoute")),X=$.extname(t),H=t.substring(0,t.length-X.length)+".universal.d.ts",U=$.resolve(t);if(W.length===0&&I.length===0&&K.length===0){C.delete(U),d.delete(U),H!==t&&await Ee(H).catch(()=>{});return}d.add(U);let J=[],R=new Map;R.has("fastify")||R.set("fastify",new Set),R.get("fastify")?.add("FastifyRequest"),R.get("fastify")?.add("FastifyReply");let de=e=>{let a="unknown",i="unknown",c="unknown",g=!1;if(!e||!se.isObjectLiteralExpression(e))return{paramsType:a,queryType:i,bodyType:c,isMultipart:g};let p=e.getProperty("schema");if(p?.isKind(D.PropertyAssignment)){let u=p.getInitializer();if(u?.isKind(D.Identifier)){let P=u.getSymbol()?.getValueDeclaration();if(P){let b=P.getFirstDescendantByKind(D.ObjectLiteralExpression);b&&(u=b)}}if(u&&se.isObjectLiteralExpression(u)){let h=u.getProperty("consumes");if(h?.isKind(D.PropertyAssignment)){let b=h.getInitializer();se.isArrayLiteralExpression(b)&&(g=b.getElements().some(E=>E.isKind(D.StringLiteral)&&E.getLiteralValue()==="multipart/form-data"))}let P=b=>{let E=u.getProperty(b);if(E?.isKind(D.PropertyAssignment)){let F=E.getInitializer();if(F){let O=F.getType(),_=O.getApparentType(),Q=_.getProperty("_output");if(Q)return M(Q.getTypeAtLocation(F).getApparentType(),F);let Z=O.getSymbol(),ge=O.getAliasSymbol(),oe=Z?.getName(),ue=ge?.getName();if(oe&&oe!=="__type"&&oe!=="object"||ue&&ue!=="__type"&&ue!=="object")return M(O,F);let we=_.getProperties();if(we.length>0){let Fe=[];for(let Se of we){let Ae=Se.getTypeAtLocation(F);Fe.push(`${Se.getName()}: ${Ae.getText(F)}`)}return`{ ${Fe.join("; ")} }`}return M(O,F)}}return"unknown"};if(a=P("params"),i=P("querystring"),c=P("body"),g){let b="{ file: File }";c=c!=="unknown"&&c.trim().startsWith("{")?`(${c} & ${b})`:b}}}return{paramsType:a,queryType:i,bodyType:c,isMultipart:g}},z=$.relative(A,$.dirname(t)).split($.sep).join("/"),ye=z==="."||!z?"":z.startsWith("/")?z:"/"+z,ee=(e,a)=>{let[i,c]=e.getArguments();if(!i?.isKind(D.StringLiteral))return;let g=i.getLiteralValue(),p="unknown",u=ye,{paramsType:h,queryType:P,bodyType:b,isMultipart:E}=de(c);if(c?.isKind(D.ObjectLiteralExpression)){let _=c.getProperty("prefix");if(_?.isKind(D.PropertyAssignment)){let Z=_.getInitializer();Z?.isKind(D.StringLiteral)&&(u=Z.getLiteralValue())}let Q=c.getProperty("handler");if(Q?.isKind(D.PropertyAssignment)){let Z=Q.getInitializer();Z&&(p=ce(Z),p.startsWith("Promise<")||(p=`Promise<${p}>`))}}let F="",O="";a==="rpc"?(F=$.join(u,"rpc",g).replace(/\\/g,"/"),O=Pe("action",u,g)):a==="loader"?(F=$.join(u,"loader",g).replace(/\\/g,"/"),O=Pe("loader",u,g)):a==="api"&&(F=$.join(u,"api",g).replace(/\\/g,"/"),O=Pe("get",u,g)),O&&J.push({type:a,name:O,returnType:p,url:g,rpcUrl:F,loaderUrl:F,paramsType:h,queryType:P,bodyType:b,isMultipart:E})};W.forEach(e=>ee(e,"rpc")),I.forEach(e=>ee(e,"loader")),K.forEach(e=>ee(e,"api"));let te=[],he=[...R.entries()].sort((e,a)=>e[0].localeCompare(a[0]));for(let[e,a]of he)te.push(`import type { ${[...a].sort().join(", ")} } from "${e}";`);let Te=[...J].sort((e,a)=>e.name.localeCompare(a.name)),pe=[];Te.forEach(e=>{pe.push(Y(e))});let re=`// AUTO-GENERATED by @bobtail.software/b-ssr. DO NOT EDIT.
9
+ `);return(await ae(T,ue)||await xe(T).then(()=>!0).catch(()=>!1))&&d.push(T),!0}catch(e){return p.push(`Error processing ${h}: ${e instanceof Error?e.message:String(e)}`),!1}}let C=await he(o,{absolute:!0});if(await Promise.all(C.map(h=>x(h))),u.resolveSourceFileDependencies(),l){let h=await he(D.join(a,"**/*.universal.d.ts"),{absolute:!0});for(let e of h){let n=e.replace(".universal.d.ts",".mts").replace(".universal.d.ts",".ts");if(!await xe(n).then(()=>!0).catch(()=>!1))try{await fe(e),c.push(e)}catch{}}}}catch(u){p.push(`Fatal error: ${u instanceof Error?u.message:String(u)}`)}return{generated:d,cleaned:c,errors:p}}var Z="virtual:b-ssr-rpc-universal:";function rt(t={}){let{routerPattern:o="src-ts/routers/**/*.mts",tsConfigFilePath:g="tsconfig.json",routerBaseDir:a="src-ts/routers"}=t,l=new Map,d=new Set,c=new Oe({tsConfigFilePath:g,skipAddingFilesFromTsConfig:!1}),p=P.resolve(process.cwd(),a||"."),u=!1;async function R(e){try{let n=c.addSourceFileAtPath(e);await n.refreshFromFileSystem(),u||c.resolveSourceFileDependencies();let r=n.getDescendantsOfKind(H.CallExpression),s=r.filter(i=>i.getExpression().getText().endsWith(".addRpcRoute")),m=r.filter(i=>i.getExpression().getText().endsWith(".addRenderRoute")),f=r.filter(i=>i.getExpression().getText().endsWith(".addLoaderRoute")),T=P.extname(e),w=e.substring(0,e.length-T.length)+".universal.d.ts",y=P.resolve(e);if(s.length===0&&m.length===0&&f.length===0){l.delete(y),d.delete(y),w!==e&&await be(w).catch(()=>{});return}d.add(y);let A=[],F=new Map;F.has("fastify")||F.set("fastify",new Set),F.get("fastify")?.add("FastifyRequest"),F.get("fastify")?.add("FastifyReply");let $=P.relative(p,P.dirname(e)).split(P.sep).join("/"),I=$==="."||!$?"":$.startsWith("/")?$:"/"+$,X=(i,S)=>{let[V,L]=i.getArguments();if(!V?.isKind(H.StringLiteral))return;let O=V.getLiteralValue(),N="unknown",v=I,{paramsType:U,queryType:se,bodyType:oe,isMultipart:K}=le(L,n,w,c,F);if(L?.isKind(H.ObjectLiteralExpression)){let de=L.getProperty("prefix");if(de?.isKind(H.PropertyAssignment)){let re=de.getInitializer();re?.isKind(H.StringLiteral)&&(v=re.getLiteralValue())}let me=L.getProperty("handler");if(me?.isKind(H.PropertyAssignment)){let re=me.getInitializer();re&&(N=ce(re,n,w,c,F),N.startsWith("Promise<")||(N=`Promise<${N}>`))}}let ee="",te="";S==="rpc"?(ee=P.join(v,"rpc",O).replace(/\\/g,"/"),te=q("action",v,O)):S==="loader"?(ee=P.join(v,"loader",O).replace(/\\/g,"/"),te=q("loader",v,O)):S==="api"&&(ee=P.join(v,"api",O).replace(/\\/g,"/"),te=q("get",v,O)),te&&A.push({type:S,name:te,returnType:N,url:O,rpcUrl:ee,loaderUrl:ee,paramsType:U,queryType:se,bodyType:oe,isMultipart:K})};s.forEach(i=>X(i,"rpc")),m.forEach(i=>X(i,"loader")),f.forEach(i=>X(i,"api"));let Y=[],ne=[...F.entries()].sort((i,S)=>i[0].localeCompare(S[0]));for(let[i,S]of ne)Y.push(`import type { ${[...S].sort().join(", ")} } from "${i}";`);let ue=[...A].sort((i,S)=>i.name.localeCompare(S.name)),ge=[];ue.forEach(i=>{ge.push(pe(i))});let b=`// AUTO-GENERATED by @bobtail.software/b-ssr. DO NOT EDIT.
10
10
  /* eslint-disable */
11
11
 
12
- `+(te.length>0?te.join(`
12
+ `+(Y.length>0?Y.join(`
13
13
  `)+`
14
14
 
15
- `:"")+pe.join(`
15
+ `:"")+ge.join(`
16
16
 
17
- `);try{let e=await We(H)||{};re=await Ue(re,{...e,parser:"typescript",filepath:H})}catch{}await Ke(H,re);let r=[],f=[];J.forEach(e=>{let i=e.type==="rpc"?"POST":"GET",c=e.type==="loader"?e.loaderUrl:e.rpcUrl;f.push({name:e.name,rpcUrl:c,method:i,isMultipart:!!e.isMultipart}),r.push({name:e.name,url:e.url,type:e.type,requiresArgs:!0})});let T=`
17
+ `);await ae(w,b);let E=[],J=[];A.forEach(i=>{let V=i.type==="rpc"?"POST":"GET",L=i.type==="loader"?i.loaderUrl:i.rpcUrl;J.push({name:i.name,rpcUrl:L,method:V,isMultipart:!!i.isMultipart}),E.push({name:i.name,url:i.url,type:i.type,requiresArgs:!0})});let z=`
18
18
  import { createClientRpc } from '@bobtail.software/b-ssr/client';
19
19
 
20
20
  if (import.meta.env.DEV) {
21
- console.debug('\u{1F6E1}\uFE0F [B-SSR Security] Loaded SAFE Client-Stub for: ${$.basename(t)}');
21
+ console.debug('\u{1F6E1}\uFE0F [B-SSR Security] Loaded SAFE Client-Stub for: ${P.basename(e)}');
22
22
  }
23
23
 
24
- ${f.map(e=>`
25
- export const ${e.name} = createClientRpc({
26
- url: '${e.rpcUrl}',
27
- method: '${e.method}',
28
- isMultipart: ${e.isMultipart}
24
+ ${J.map(i=>`
25
+ export const ${i.name} = createClientRpc({
26
+ url: '${i.rpcUrl}',
27
+ method: '${i.method}',
28
+ isMultipart: ${i.isMultipart}
29
29
  });
30
30
  `).join(`
31
31
  `)}
32
- `,w=V(r,t);C.set($.resolve(t),{client:T,server:w})}catch(N){console.error(`[rpc-generator] Error al procesar ${t}:`,{error:N})}}let v=(t,l,n)=>{if(l.includes("node_modules")||l.startsWith(le))return null;if(n?.ssr===!0&&/\.[cm]?[jt]sx?$/.test(l)){let x=/\brequire\s*\(/.test(t),N=/\bmodule\.exports\b/.test(t),y=/\bexports\./.test(t);if(x||N||y)return"import { createRequire } from 'module';"+`
32
+ `,j=C(E,e);l.set(P.resolve(e),{client:z,server:j})}catch(n){console.error(`[rpc-generator] Error al procesar ${e}:`,{error:n})}}let x=(e,n,r)=>{if(n.includes("node_modules")||n.startsWith(Z))return null;if(r?.ssr===!0&&/\.[cm]?[jt]sx?$/.test(n)){let s=/\brequire\s*\(/.test(e),m=/\bmodule\.exports\b/.test(e),f=/\bexports\./.test(e);if(s||m||f)return"import { createRequire } from 'module';"+`
33
33
  const require = createRequire(import.meta.url);
34
34
  const module = { exports: {} };
35
35
  const exports = module.exports;
36
- `+t+`
37
- export default module.exports;`}return null};function Y(t){let l=Ge(t),n="";return l.length>0&&(n=`args: { ${l.join("; ")} }`),n||(n="args: { signal?: AbortSignal }"),`export declare const ${t.name}: (${n}, ssrContext?: { req?: FastifyRequest, reply?: FastifyReply }) => ${t.returnType};`}function V(t,l){if(t.length===0)return"";let n=$.relative(process.cwd(),l).replace(/\\/g,"/");return`
36
+ `+e+`
37
+ export default module.exports;`}return null};function C(e,n){if(e.length===0)return"";let r=process.cwd(),s=P.relative(r,n).replace(/\\/g,"/");return`
38
38
  import path from 'path';
39
39
  import { pathToFileURL } from 'url';
40
40
 
41
41
  if (typeof window !== 'undefined' && typeof document !== 'undefined') {
42
- throw new Error('\u{1F6A8} [B-SSR SECURITY ALERT] Server-side code leaked to browser: ${`./${$.relative(process.cwd(),l).replace(/\\/g,"/")}`}');
42
+ throw new Error('\u{1F6A8} [B-SSR SECURITY ALERT] Server-side code leaked to browser: ${`./${s}`}');
43
43
  }
44
44
 
45
45
  let initPromise;
@@ -53,13 +53,13 @@ export default module.exports;`}return null};function Y(t){let l=Ge(t),n="";retu
53
53
  renderOptionsMap = new Map();
54
54
  loaderApiOptionsMap = new Map();
55
55
  const projectRoot = process.cwd();
56
- const absolutePath = path.resolve(projectRoot, '${n}');
56
+ const absolutePath = path.resolve(projectRoot, '${s}');
57
57
  const serverModuleUrl = pathToFileURL(absolutePath).href;
58
58
 
59
59
  if (typeof globalThis.require === 'undefined') {
60
60
  try {
61
61
  const { createRequire } = await import('module');
62
- globalThis.require = createRequire(serverModulePath);
62
+ globalThis.require = createRequire(absolutePath);
63
63
  } catch (e) {}
64
64
  }
65
65
 
@@ -93,7 +93,7 @@ export default module.exports;`}return null};function Y(t){let l=Ge(t),n="";retu
93
93
  try {
94
94
  await entryPoint(mockFastify);
95
95
  } catch (err) {
96
- console.error('\u274C [B-SSR CRITICAL] Error inicializando rutas backend:', serverModulePath, err);
96
+ console.error('\u274C [B-SSR CRITICAL] Error inicializando rutas backend:', absolutePath, err);
97
97
  }
98
98
  }
99
99
  })();
@@ -101,46 +101,46 @@ export default module.exports;`}return null};function Y(t){let l=Ge(t),n="";retu
101
101
  return initPromise;
102
102
  }
103
103
 
104
- ${t.map(y=>{let W=[];y.requiresArgs&&W.push("args"),W.push("ssrContext");let I=y.requiresArgs?"args":"{}",K="";return y.type==="rpc"?K=`
104
+ ${e.map(f=>{let T=[];f.requiresArgs&&T.push("args"),T.push("ssrContext");let w=f.requiresArgs?"args":"{}",y="";return f.type==="rpc"?y=`
105
105
  if (fn.isMultipart) throw new Error('RPC multipart no soportado en SSR.');
106
106
  await getOptionsMaps();
107
- const options = rpcOptionsMap.get('${y.url}');
108
- if (!options?.handler) throw new Error('Handler no encontrado para RPC: ${y.name}');
109
- const augmentedReq = Object.assign(Object.create(ssrContext.req), ${I});
107
+ const options = rpcOptionsMap.get('${f.url}');
108
+ if (!options?.handler) throw new Error('Handler no encontrado para RPC: ${f.name}');
109
+ const augmentedReq = Object.assign(Object.create(ssrContext.req), ${w});
110
110
  return await options.handler.call(ssrContext.req.server, augmentedReq, ssrContext.reply);
111
- `:y.type==="api"?K=`
111
+ `:f.type==="api"?y=`
112
112
  await getOptionsMaps();
113
- const options = loaderApiOptionsMap.get('${y.url}');
113
+ const options = loaderApiOptionsMap.get('${f.url}');
114
114
  if (!options?.handler) {
115
- console.error('\u26A0\uFE0F [B-SSR Warning] Handler API no encontrado:', '${y.name}', 'URL:', '${y.url}');
115
+ console.error('\u26A0\uFE0F [B-SSR Warning] Handler API no encontrado:', '${f.name}', 'URL:', '${f.url}');
116
116
  return null;
117
117
  }
118
- const augmentedReq = Object.assign(Object.create(ssrContext.req), ${I});
118
+ const augmentedReq = Object.assign(Object.create(ssrContext.req), ${w});
119
119
  return await options.handler.call(ssrContext.req.server, augmentedReq, ssrContext.reply);
120
- `:K=`
120
+ `:y=`
121
121
  await getOptionsMaps();
122
- const options = renderOptionsMap.get('${y.url}');
122
+ const options = renderOptionsMap.get('${f.url}');
123
123
  if (!options) return {};
124
- const augmentedReq = Object.assign(Object.create(ssrContext.req), ${I});
124
+ const augmentedReq = Object.assign(Object.create(ssrContext.req), ${w});
125
125
  let customData = {};
126
126
  try {
127
127
  if (options.handler) {
128
128
  customData = (await options.handler.call(ssrContext.req.server, augmentedReq, ssrContext.reply)) || {};
129
129
  }
130
130
  } catch (handlerErr) {
131
- console.error('\u274C [B-SSR Handler Error] ${y.name}:', handlerErr);
131
+ console.error('\u274C [B-SSR Handler Error] ${f.name}:', handlerErr);
132
132
  return {};
133
133
  }
134
134
  if (ssrContext.reply.sent) return;
135
135
  return { ...customData };
136
- `,`export const ${y.name} = async (${W.join(", ")}) => {
136
+ `,`export const ${f.name} = async (${T.join(", ")}) => {
137
137
  try {
138
- if (!ssrContext?.req) throw new Error('ssrContext requerido en ${y.name} (SSR)');
139
- ${K}
138
+ if (!ssrContext?.req) throw new Error('ssrContext requerido en ${f.name} (SSR)');
139
+ ${y}
140
140
  } catch (error) {
141
- console.error('\u274C [B-SSR Error] ${y.name}:', error);
141
+ console.error('\u274C [B-SSR Error] ${f.name}:', error);
142
142
  throw error;
143
143
  }
144
144
  };`}).join(`
145
145
  `)}
146
- `}async function G(){let t=await De(m,{absolute:!0});await Promise.all(t.map(l=>L(l)))}return{name:"b-ssr-vite-plugin-rpc-universal-generator",enforce:"pre",async buildStart(){await G()},configureServer(t){let l=n=>n.endsWith(".mts")||n.endsWith(".ts");t.watcher.on("add",n=>l(n)&&L(n)),t.watcher.on("change",n=>l(n)&&L(n)),t.watcher.on("unlink",n=>{if(l(n)){let x=$.resolve(n);C.delete(x),d.delete(x);let N=$.extname(n),y=n.substring(0,n.length-N.length)+".universal.d.ts";Ee(y).catch(()=>{})}})},async resolveId(t,l,n){if(t.startsWith(le))return null;if(t.includes(".universal")){let x=t.split("?")[0],N=x;if(x.endsWith(".universal"))N=x;else if(x.endsWith(".universal.ts"))N=x.slice(0,-3);else if(x.endsWith(".universal.mts"))N=x.slice(0,-4);else if(x.endsWith(".universal.js"))N=x.slice(0,-3);else return null;let y=[".mts",".ts"];for(let W of y){let I=N.slice(0,-10)+W,K=await this.resolve(I,l,{skipSelf:!0});if(K){let X=n?.ssr?"?mode=ssr":"?mode=client";return le+K.id+X}try{await Ie(I);let X=n?.ssr?"?mode=ssr":"?mode=client";return le+I+X}catch{}}}return null},async load(t,l){if(t.startsWith(le)){let n=t.slice(le.length).split("?")[0],x=C.get(n);return x||(await L(n),x=C.get(n)),x?l?.ssr===!0?x.server:x.client:null}if(l?.ssr!==!0){let n=$.resolve(t);if(d.has(n))return`throw new Error("\u{1F6A8} [B-SSR FIREWALL] BLOCKED: Backend File imported in Client: ${$.basename(t)}");`}return null},transform:v}}function Ge(o){let m=[];return o.paramsType!=="unknown"&&m.push(`params: ${o.paramsType}`),o.queryType!=="unknown"&&m.push(`query: ${o.queryType}`),o.bodyType!=="unknown"&&m.push(`body: ${o.bodyType}`),m.push("signal?: AbortSignal"),m}export{ke as generateRpcTypes,at as rpcGeneratorPlugin};
146
+ `}async function h(){u=!0;let e=Te.now(),n=await $e(o,{absolute:!0});await Promise.all(n.map(s=>R(s))),c.resolveSourceFileDependencies();let r=Te.now();console.log(`\u{1F680} [B-SSR] RPC Generation completed in ${Math.round(r-e)}ms (${n.length} files)`),u=!1}return{name:"b-ssr-vite-plugin-rpc-universal-generator",enforce:"pre",async buildStart(){await h()},configureServer(e){let n=r=>r.endsWith(".mts")||r.endsWith(".ts");e.watcher.on("add",r=>n(r)&&R(r)),e.watcher.on("change",r=>n(r)&&R(r)),e.watcher.on("unlink",r=>{if(n(r)){let s=P.resolve(r);l.delete(s),d.delete(s);let m=P.extname(r),f=r.substring(0,r.length-m.length)+".universal.d.ts";be(f).catch(()=>{})}})},async resolveId(e,n,r){if(e.startsWith(Z))return null;if(e.includes(".universal")){let s=e.split("?")[0],m=s;if(s.endsWith(".universal"))m=s;else if(s.endsWith(".universal.ts"))m=s.slice(0,-3);else if(s.endsWith(".universal.mts"))m=s.slice(0,-4);else if(s.endsWith(".universal.js"))m=s.slice(0,-3);else return null;let f=[".mts",".ts"];for(let T of f){let w=m.slice(0,-10)+T,y=await this.resolve(w,n,{skipSelf:!0});if(y){let A=r?.ssr?"?mode=ssr":"?mode=client";return Z+y.id+A}try{await je(w);let A=r?.ssr?"?mode=ssr":"?mode=client";return Z+w+A}catch{}}}return null},async load(e,n){if(e.startsWith(Z)){let r=e.slice(Z.length).split("?")[0],s=l.get(r);return s||(await R(r),s=l.get(r)),s?n?.ssr===!0?s.server:s.client:null}if(n?.ssr!==!0){let r=P.resolve(e);if(d.has(r))return`throw new Error("\u{1F6A8} [B-SSR FIREWALL] BLOCKED: Backend File imported in Client: ${P.basename(e)}");`}return null},transform:x}}export{Ae as generateRpcTypes,rt as rpcGeneratorPlugin};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bobtail.software/b-ssr",
3
- "version": "1.0.84",
3
+ "version": "1.1.0",
4
4
  "description": "Fastify + Vite SSR Plugin wrapper with RPC",
5
5
  "author": "Victor Moreno <info@bobtail.software> (https://bobtail.software)",
6
6
  "license": "GPL-3.0",