@bobtail.software/b-ssr 1.0.68 → 1.0.69

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 g=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var P=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty;var A=(e,t)=>{for(var o in t)g(e,o,{get:t[o],enumerable:!0})},E=(e,t,o,d)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of G(t))!k.call(e,a)&&a!==o&&g(e,a,{get:()=>t[a],enumerable:!(d=I(t,a))||d.enumerable});return e};var y=(e,t,o)=>(o=e!=null?D(P(e)):{},E(t||!e||!e.__esModule?g(o,"default",{value:e,enumerable:!0}):o,e)),C=e=>E(g({},"__esModule",{value:!0}),e);var H={};A(H,{default:()=>q});module.exports=C(H);var M=require("@fastify/multipart"),x=y(require("fastify-plugin"),1),v=y(require("path"),1),R=require("zod");async function O(e=24678){let t=await import("net");return new Promise((o,d)=>{let a=t.createServer();a.listen(e,"127.0.0.1",()=>{let r=a.address(),n=typeof r=="object"&&r!==null?r.port:e;a.close(()=>o(n))}),a.on("error",r=>{r.code==="EADDRINUSE"?a.close(()=>o(O(e+1))):d(r)})})}function w(e){if(!e)return;console.log("[B-SSR] Converting schema:",JSON.stringify(e,null,2));let t={},o=d=>!d||typeof d!="object"?!1:!!(d._def||d.def);return e.body&&o(e.body)&&(t.body=R.z.toJSONSchema(e.body,{target:"draft-7",unrepresentable:"any",io:"input"})),e.params&&o(e.params)&&(t.params=R.z.toJSONSchema(e.params,{target:"draft-7",unrepresentable:"any",io:"input"})),e.querystring&&o(e.querystring)&&(t.querystring=R.z.toJSONSchema(e.querystring,{target:"draft-7",unrepresentable:"any",io:"input"})),e.headers&&o(e.headers)&&(t.headers=R.z.toJSONSchema(e.headers,{target:"draft-7",unrepresentable:"any",io:"input"})),e.consumes&&(t.consumes=e.consumes),e.produces&&(t.produces=e.produces),e.response&&(t.response=e.response),e.tags&&(t.tags=e.tags),e.description&&(t.description=e.description),e.summary&&(t.summary=e.summary),e.deprecated&&(t.deprecated=e.deprecated),t}var T=async(e,t)=>{if(!e.isMultipart())return t.status(415).send({statusCode:415,error:"Unsupported Media Type",message:"Multipart/form-data expected"});let o=e.parts(),d={};for await(let a of o)if(a.type==="field")d[a.fieldname]=a.value;else{let r=Symbol.for("file-stream");e[r]=a}e.body=d},_=async(e,t)=>{let o=r=>{if(t.errorHandler){let n=t.errorHandler(r);if(n)return n}return{message:r instanceof Error?r.message:"Internal Server Error",statusCode:500}};if(e.hasDecorator("viteInitDone")&&e.viteInitDone)return;if(!e.hasDecorator("multipartErrors"))try{let r=await import("@fastify/multipart");await e.register(r.default)}catch(r){if(r.code!=="FST_ERR_DEC_ALREADY_PRESENT")throw r}let d=process.env.NODE_ENV==="production";if(d){if(t.clientDistDir)try{let r=await import("@fastify/static"),n=v.default.resolve(t.root,t.clientDistDir);await e.register(r.default,{root:n,wildcard:!1}),console.log(`\u{1F4C2} [Fastify-SSR] Serving static assets from: ${n}`)}catch(r){console.error("\u274C [Fastify-SSR] Error registering @fastify/static. Did you install it?",r)}}else{if(!e.hasDecorator("use"))try{let l=await import("@fastify/middie");await e.register(l.default,{hook:"onRequest"})}catch(l){if(l.code!=="FST_ERR_DEC_ALREADY_PRESENT")throw l}let r=await import("vite"),n=t.viteConfig||{},p;n.server?.hmr&&typeof n.server.hmr=="object"&&"port"in n.server.hmr?p=n.server.hmr.port:p=t.hmrPort??await O();let u=await r.createServer({root:t.root,appType:"custom",...n,server:{hmr:{port:p},...n.server,middlewareMode:!0}});e.use(u.middlewares),e.hasDecorator("viteServer")||e.decorate("viteServer",u),console.log("\u{1F680} [Fastify-SSR] Vite Dev Server Ready")}e.decorate("viteInitDone",!0);let a=async(r,n,p)=>{try{let u=r.raw.url,l=t.getGlobalSettings?await t.getGlobalSettings(r):void 0;if(v.default.extname(u)!==""){n.status(404).send(`File not found: ${u}`);return}let s="";!d&&e.viteServer&&(s=await e.viteServer.transformIndexHtml(u,"<html><head></head><body></body></html>"),s=s.substring(s.indexOf("<head>")+6,s.indexOf("</head>"))),s=(l?`<script>window.__GLOBAL_SETTINGS__ = ${JSON.stringify(l)}</script>`:"")+s;let f=d?await import(v.default.resolve(t.root,t.prodEntryFile)):await e.viteServer.ssrLoadModule(t.devEntryFile),i=f.render||f.default;if(typeof i!="function")throw new Error(`Entry file ${t.devEntryFile} must export a 'render' function.`);await i({req:r,reply:n,head:s,data:p,globalSettings:l})}catch(u){e.viteServer?.ssrFixStacktrace(u),console.error("[SSR Error]:",u),n.sent||n.status(500).send("Internal Server Error")}};e.decorate("addRpcRoute",function(r,n){let{handler:p,schema:u,...l}=n,s=`/rpc${r}`,h=w(u),f={...l,schema:h};if(u?.consumes?.includes("multipart/form-data")){let c=f.preValidation;f.preValidation=c?Array.isArray(c)?[T,...c]:[T,c]:T}this.route({method:"POST",url:s,...f,handler:async(c,m)=>{try{let S=await p.call(this,c,m);return m.sent?void 0:S}catch(S){if(console.error(`[RPC Error] ${s}:`,S),!m.sent){let{statusCode:F,message:b}=o(S);m.status(F).send({error:{message:b}})}}}})}),e.decorate("addRenderRoute",function(r,n){let{handler:p,schema:u,...l}=n||{},s=w(u),h=async(f,i,c)=>{try{let m=await p?.call(this,f,i);return c?m:a(f,i,m)}catch(m){if(console.error(`[Render Error] ${r}:`,m),!i.sent){let{statusCode:S,message:F}=o(m);if(c)i.status(S).send({error:{message:F}});else return a(f,i,{ssrError:{statusCode:500,message:"Internal Error"}})}}};if(this.route({method:"GET",url:r,schema:s,...l,handler:(f,i)=>h(f,i,!1)}),r!=="*"&&r!=="/*"){this.route({method:"GET",url:`/loader${r}`,schema:s,...l,handler:(c,m)=>h(c,m,!0)});let f=r.endsWith("/")?"*":"/*",i=`${r}${f}`;this.route({method:"GET",url:i,schema:s,...l,handler:(c,m)=>h(c,m,!1)})}}),e.decorate("addLoaderRoute",function(r,n){let{handler:p,schema:u,...l}=n,s=`/api${r}`,h=w(u);this.route({method:"GET",url:s,schema:h,...l,handler:async(f,i)=>{try{let c=await p.call(this,f,i);return i.sent?void 0:c}catch(c){if(console.error(`[Loader API Error] ${s}:`,c),!i.sent){let{statusCode:m,message:S}=o(c);i.status(m).send({error:{message:S}})}}}})})},q=(0,x.default)(_,{name:"fastify-b-ssr"});
1
+ "use strict";var D=Object.create;var g=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var P=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty;var A=(e,t)=>{for(var o in t)g(e,o,{get:t[o],enumerable:!0})},E=(e,t,o,d)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of G(t))!k.call(e,a)&&a!==o&&g(e,a,{get:()=>t[a],enumerable:!(d=I(t,a))||d.enumerable});return e};var y=(e,t,o)=>(o=e!=null?D(P(e)):{},E(t||!e||!e.__esModule?g(o,"default",{value:e,enumerable:!0}):o,e)),C=e=>E(g({},"__esModule",{value:!0}),e);var H={};A(H,{default:()=>q});module.exports=C(H);var M=require("@fastify/multipart"),x=y(require("fastify-plugin"),1),v=y(require("path"),1),R=require("zod");async function b(e=24678){let t=await import("net");return new Promise((o,d)=>{let a=t.createServer();a.listen(e,"127.0.0.1",()=>{let r=a.address(),n=typeof r=="object"&&r!==null?r.port:e;a.close(()=>o(n))}),a.on("error",r=>{r.code==="EADDRINUSE"?a.close(()=>o(b(e+1))):d(r)})})}function w(e){if(!e)return;let t={},o=d=>!d||typeof d!="object"?!1:!!(d._def||d.def);return e.body&&o(e.body)&&(t.body=R.z.toJSONSchema(e.body,{target:"draft-7",unrepresentable:"any",io:"input"})),e.params&&o(e.params)&&(t.params=R.z.toJSONSchema(e.params,{target:"draft-7",unrepresentable:"any",io:"input"})),e.querystring&&o(e.querystring)&&(t.querystring=R.z.toJSONSchema(e.querystring,{target:"draft-7",unrepresentable:"any",io:"input"})),e.headers&&o(e.headers)&&(t.headers=R.z.toJSONSchema(e.headers,{target:"draft-7",unrepresentable:"any",io:"input"})),e.consumes&&(t.consumes=e.consumes),e.produces&&(t.produces=e.produces),e.response&&(t.response=e.response),e.tags&&(t.tags=e.tags),e.description&&(t.description=e.description),e.summary&&(t.summary=e.summary),e.deprecated&&(t.deprecated=e.deprecated),t}var T=async(e,t)=>{if(!e.isMultipart())return t.status(415).send({statusCode:415,error:"Unsupported Media Type",message:"Multipart/form-data expected"});let o=e.parts(),d={};for await(let a of o)if(a.type==="field")d[a.fieldname]=a.value;else{let r=Symbol.for("file-stream");e[r]=a}e.body=d},_=async(e,t)=>{let o=r=>{if(t.errorHandler){let n=t.errorHandler(r);if(n)return n}return{message:r instanceof Error?r.message:"Internal Server Error",statusCode:500}};if(e.hasDecorator("viteInitDone")&&e.viteInitDone)return;if(!e.hasDecorator("multipartErrors"))try{let r=await import("@fastify/multipart");await e.register(r.default)}catch(r){if(r.code!=="FST_ERR_DEC_ALREADY_PRESENT")throw r}let d=process.env.NODE_ENV==="production";if(d){if(t.clientDistDir)try{let r=await import("@fastify/static"),n=v.default.resolve(t.root,t.clientDistDir);await e.register(r.default,{root:n,wildcard:!1}),console.log(`\u{1F4C2} [Fastify-SSR] Serving static assets from: ${n}`)}catch(r){console.error("\u274C [Fastify-SSR] Error registering @fastify/static. Did you install it?",r)}}else{if(!e.hasDecorator("use"))try{let f=await import("@fastify/middie");await e.register(f.default,{hook:"onRequest"})}catch(f){if(f.code!=="FST_ERR_DEC_ALREADY_PRESENT")throw f}let r=await import("vite"),n=t.viteConfig||{},p;n.server?.hmr&&typeof n.server.hmr=="object"&&"port"in n.server.hmr?p=n.server.hmr.port:p=t.hmrPort??await b();let u=await r.createServer({root:t.root,appType:"custom",...n,server:{hmr:{port:p},...n.server,middlewareMode:!0}});e.use(u.middlewares),e.hasDecorator("viteServer")||e.decorate("viteServer",u),console.log("\u{1F680} [Fastify-SSR] Vite Dev Server Ready")}e.decorate("viteInitDone",!0);let a=async(r,n,p)=>{try{let u=r.raw.url,f=t.getGlobalSettings?await t.getGlobalSettings(r):void 0;if(v.default.extname(u)!==""){n.status(404).send(`File not found: ${u}`);return}let s="";!d&&e.viteServer&&(s=await e.viteServer.transformIndexHtml(u,"<html><head></head><body></body></html>"),s=s.substring(s.indexOf("<head>")+6,s.indexOf("</head>"))),s=(f?`<script>window.__GLOBAL_SETTINGS__ = ${JSON.stringify(f)}</script>`:"")+s;let l=d?await import(v.default.resolve(t.root,t.prodEntryFile)):await e.viteServer.ssrLoadModule(t.devEntryFile),i=l.render||l.default;if(typeof i!="function")throw new Error(`Entry file ${t.devEntryFile} must export a 'render' function.`);await i({req:r,reply:n,head:s,data:p,globalSettings:f})}catch(u){e.viteServer?.ssrFixStacktrace(u),console.error("[SSR Error]:",u),n.sent||n.status(500).send("Internal Server Error")}};e.decorate("addRpcRoute",function(r,n){let{handler:p,schema:u,...f}=n,s=`/rpc${r}`,h=w(u),l={...f,schema:h};if(u?.consumes?.includes("multipart/form-data")){let c=l.preValidation;l.preValidation=c?Array.isArray(c)?[T,...c]:[T,c]:T}this.route({method:"POST",url:s,...l,handler:async(c,m)=>{try{let S=await p.call(this,c,m);return m.sent?void 0:S}catch(S){if(console.error(`[RPC Error] ${s}:`,S),!m.sent){let{statusCode:F,message:O}=o(S);m.status(F).send({error:{message:O}})}}}})}),e.decorate("addRenderRoute",function(r,n){let{handler:p,schema:u,...f}=n||{},s=w(u),h=async(l,i,c)=>{try{let m=await p?.call(this,l,i);return c?m:a(l,i,m)}catch(m){if(console.error(`[Render Error] ${r}:`,m),!i.sent){let{statusCode:S,message:F}=o(m);if(c)i.status(S).send({error:{message:F}});else return a(l,i,{ssrError:{statusCode:500,message:"Internal Error"}})}}};if(this.route({method:"GET",url:r,schema:s,...f,handler:(l,i)=>h(l,i,!1)}),r!=="*"&&r!=="/*"){this.route({method:"GET",url:`/loader${r}`,schema:s,...f,handler:(c,m)=>h(c,m,!0)});let l=r.endsWith("/")?"*":"/*",i=`${r}${l}`;this.route({method:"GET",url:i,schema:s,...f,handler:(c,m)=>h(c,m,!1)})}}),e.decorate("addLoaderRoute",function(r,n){let{handler:p,schema:u,...f}=n,s=`/api${r}`,h=w(u);this.route({method:"GET",url:s,schema:h,...f,handler:async(l,i)=>{try{let c=await p.call(this,l,i);return i.sent?void 0:c}catch(c){if(console.error(`[Loader API Error] ${s}:`,c),!i.sent){let{statusCode:m,message:S}=o(c);i.status(m).send({error:{message:S}})}}}})})},q=(0,x.default)(_,{name:"fastify-b-ssr"});
@@ -1 +1 @@
1
- import"@fastify/multipart";import E from"fastify-plugin";import g from"path";import{z as y}from"zod";async function w(e=24678){let r=await import("net");return new Promise((l,f)=>{let m=r.createServer();m.listen(e,"127.0.0.1",()=>{let t=m.address(),n=typeof t=="object"&&t!==null?t.port:e;m.close(()=>l(n))}),m.on("error",t=>{t.code==="EADDRINUSE"?m.close(()=>l(w(e+1))):f(t)})})}function v(e){if(!e)return;console.log("[B-SSR] Converting schema:",JSON.stringify(e,null,2));let r={},l=f=>!f||typeof f!="object"?!1:!!(f._def||f.def);return e.body&&l(e.body)&&(r.body=y.toJSONSchema(e.body,{target:"draft-7",unrepresentable:"any",io:"input"})),e.params&&l(e.params)&&(r.params=y.toJSONSchema(e.params,{target:"draft-7",unrepresentable:"any",io:"input"})),e.querystring&&l(e.querystring)&&(r.querystring=y.toJSONSchema(e.querystring,{target:"draft-7",unrepresentable:"any",io:"input"})),e.headers&&l(e.headers)&&(r.headers=y.toJSONSchema(e.headers,{target:"draft-7",unrepresentable:"any",io:"input"})),e.consumes&&(r.consumes=e.consumes),e.produces&&(r.produces=e.produces),e.response&&(r.response=e.response),e.tags&&(r.tags=e.tags),e.description&&(r.description=e.description),e.summary&&(r.summary=e.summary),e.deprecated&&(r.deprecated=e.deprecated),r}var F=async(e,r)=>{if(!e.isMultipart())return r.status(415).send({statusCode:415,error:"Unsupported Media Type",message:"Multipart/form-data expected"});let l=e.parts(),f={};for await(let m of l)if(m.type==="field")f[m.fieldname]=m.value;else{let t=Symbol.for("file-stream");e[t]=m}e.body=f},x=async(e,r)=>{let l=t=>{if(r.errorHandler){let n=r.errorHandler(t);if(n)return n}return{message:t instanceof Error?t.message:"Internal Server Error",statusCode:500}};if(e.hasDecorator("viteInitDone")&&e.viteInitDone)return;if(!e.hasDecorator("multipartErrors"))try{let t=await import("@fastify/multipart");await e.register(t.default)}catch(t){if(t.code!=="FST_ERR_DEC_ALREADY_PRESENT")throw t}let f=process.env.NODE_ENV==="production";if(f){if(r.clientDistDir)try{let t=await import("@fastify/static"),n=g.resolve(r.root,r.clientDistDir);await e.register(t.default,{root:n,wildcard:!1}),console.log(`\u{1F4C2} [Fastify-SSR] Serving static assets from: ${n}`)}catch(t){console.error("\u274C [Fastify-SSR] Error registering @fastify/static. Did you install it?",t)}}else{if(!e.hasDecorator("use"))try{let c=await import("@fastify/middie");await e.register(c.default,{hook:"onRequest"})}catch(c){if(c.code!=="FST_ERR_DEC_ALREADY_PRESENT")throw c}let t=await import("vite"),n=r.viteConfig||{},p;n.server?.hmr&&typeof n.server.hmr=="object"&&"port"in n.server.hmr?p=n.server.hmr.port:p=r.hmrPort??await w();let i=await t.createServer({root:r.root,appType:"custom",...n,server:{hmr:{port:p},...n.server,middlewareMode:!0}});e.use(i.middlewares),e.hasDecorator("viteServer")||e.decorate("viteServer",i),console.log("\u{1F680} [Fastify-SSR] Vite Dev Server Ready")}e.decorate("viteInitDone",!0);let m=async(t,n,p)=>{try{let i=t.raw.url,c=r.getGlobalSettings?await r.getGlobalSettings(t):void 0;if(g.extname(i)!==""){n.status(404).send(`File not found: ${i}`);return}let o="";!f&&e.viteServer&&(o=await e.viteServer.transformIndexHtml(i,"<html><head></head><body></body></html>"),o=o.substring(o.indexOf("<head>")+6,o.indexOf("</head>"))),o=(c?`<script>window.__GLOBAL_SETTINGS__ = ${JSON.stringify(c)}</script>`:"")+o;let d=f?await import(g.resolve(r.root,r.prodEntryFile)):await e.viteServer.ssrLoadModule(r.devEntryFile),a=d.render||d.default;if(typeof a!="function")throw new Error(`Entry file ${r.devEntryFile} must export a 'render' function.`);await a({req:t,reply:n,head:o,data:p,globalSettings:c})}catch(i){e.viteServer?.ssrFixStacktrace(i),console.error("[SSR Error]:",i),n.sent||n.status(500).send("Internal Server Error")}};e.decorate("addRpcRoute",function(t,n){let{handler:p,schema:i,...c}=n,o=`/rpc${t}`,h=v(i),d={...c,schema:h};if(i?.consumes?.includes("multipart/form-data")){let s=d.preValidation;d.preValidation=s?Array.isArray(s)?[F,...s]:[F,s]:F}this.route({method:"POST",url:o,...d,handler:async(s,u)=>{try{let S=await p.call(this,s,u);return u.sent?void 0:S}catch(S){if(console.error(`[RPC Error] ${o}:`,S),!u.sent){let{statusCode:R,message:T}=l(S);u.status(R).send({error:{message:T}})}}}})}),e.decorate("addRenderRoute",function(t,n){let{handler:p,schema:i,...c}=n||{},o=v(i),h=async(d,a,s)=>{try{let u=await p?.call(this,d,a);return s?u:m(d,a,u)}catch(u){if(console.error(`[Render Error] ${t}:`,u),!a.sent){let{statusCode:S,message:R}=l(u);if(s)a.status(S).send({error:{message:R}});else return m(d,a,{ssrError:{statusCode:500,message:"Internal Error"}})}}};if(this.route({method:"GET",url:t,schema:o,...c,handler:(d,a)=>h(d,a,!1)}),t!=="*"&&t!=="/*"){this.route({method:"GET",url:`/loader${t}`,schema:o,...c,handler:(s,u)=>h(s,u,!0)});let d=t.endsWith("/")?"*":"/*",a=`${t}${d}`;this.route({method:"GET",url:a,schema:o,...c,handler:(s,u)=>h(s,u,!1)})}}),e.decorate("addLoaderRoute",function(t,n){let{handler:p,schema:i,...c}=n,o=`/api${t}`,h=v(i);this.route({method:"GET",url:o,schema:h,...c,handler:async(d,a)=>{try{let s=await p.call(this,d,a);return a.sent?void 0:s}catch(s){if(console.error(`[Loader API Error] ${o}:`,s),!a.sent){let{statusCode:u,message:S}=l(s);a.status(u).send({error:{message:S}})}}}})})},P=E(x,{name:"fastify-b-ssr"});export{P as default};
1
+ import"@fastify/multipart";import E from"fastify-plugin";import g from"path";import{z as y}from"zod";async function w(e=24678){let r=await import("net");return new Promise((f,l)=>{let m=r.createServer();m.listen(e,"127.0.0.1",()=>{let t=m.address(),n=typeof t=="object"&&t!==null?t.port:e;m.close(()=>f(n))}),m.on("error",t=>{t.code==="EADDRINUSE"?m.close(()=>f(w(e+1))):l(t)})})}function v(e){if(!e)return;let r={},f=l=>!l||typeof l!="object"?!1:!!(l._def||l.def);return e.body&&f(e.body)&&(r.body=y.toJSONSchema(e.body,{target:"draft-7",unrepresentable:"any",io:"input"})),e.params&&f(e.params)&&(r.params=y.toJSONSchema(e.params,{target:"draft-7",unrepresentable:"any",io:"input"})),e.querystring&&f(e.querystring)&&(r.querystring=y.toJSONSchema(e.querystring,{target:"draft-7",unrepresentable:"any",io:"input"})),e.headers&&f(e.headers)&&(r.headers=y.toJSONSchema(e.headers,{target:"draft-7",unrepresentable:"any",io:"input"})),e.consumes&&(r.consumes=e.consumes),e.produces&&(r.produces=e.produces),e.response&&(r.response=e.response),e.tags&&(r.tags=e.tags),e.description&&(r.description=e.description),e.summary&&(r.summary=e.summary),e.deprecated&&(r.deprecated=e.deprecated),r}var F=async(e,r)=>{if(!e.isMultipart())return r.status(415).send({statusCode:415,error:"Unsupported Media Type",message:"Multipart/form-data expected"});let f=e.parts(),l={};for await(let m of f)if(m.type==="field")l[m.fieldname]=m.value;else{let t=Symbol.for("file-stream");e[t]=m}e.body=l},x=async(e,r)=>{let f=t=>{if(r.errorHandler){let n=r.errorHandler(t);if(n)return n}return{message:t instanceof Error?t.message:"Internal Server Error",statusCode:500}};if(e.hasDecorator("viteInitDone")&&e.viteInitDone)return;if(!e.hasDecorator("multipartErrors"))try{let t=await import("@fastify/multipart");await e.register(t.default)}catch(t){if(t.code!=="FST_ERR_DEC_ALREADY_PRESENT")throw t}let l=process.env.NODE_ENV==="production";if(l){if(r.clientDistDir)try{let t=await import("@fastify/static"),n=g.resolve(r.root,r.clientDistDir);await e.register(t.default,{root:n,wildcard:!1}),console.log(`\u{1F4C2} [Fastify-SSR] Serving static assets from: ${n}`)}catch(t){console.error("\u274C [Fastify-SSR] Error registering @fastify/static. Did you install it?",t)}}else{if(!e.hasDecorator("use"))try{let c=await import("@fastify/middie");await e.register(c.default,{hook:"onRequest"})}catch(c){if(c.code!=="FST_ERR_DEC_ALREADY_PRESENT")throw c}let t=await import("vite"),n=r.viteConfig||{},p;n.server?.hmr&&typeof n.server.hmr=="object"&&"port"in n.server.hmr?p=n.server.hmr.port:p=r.hmrPort??await w();let i=await t.createServer({root:r.root,appType:"custom",...n,server:{hmr:{port:p},...n.server,middlewareMode:!0}});e.use(i.middlewares),e.hasDecorator("viteServer")||e.decorate("viteServer",i),console.log("\u{1F680} [Fastify-SSR] Vite Dev Server Ready")}e.decorate("viteInitDone",!0);let m=async(t,n,p)=>{try{let i=t.raw.url,c=r.getGlobalSettings?await r.getGlobalSettings(t):void 0;if(g.extname(i)!==""){n.status(404).send(`File not found: ${i}`);return}let o="";!l&&e.viteServer&&(o=await e.viteServer.transformIndexHtml(i,"<html><head></head><body></body></html>"),o=o.substring(o.indexOf("<head>")+6,o.indexOf("</head>"))),o=(c?`<script>window.__GLOBAL_SETTINGS__ = ${JSON.stringify(c)}</script>`:"")+o;let d=l?await import(g.resolve(r.root,r.prodEntryFile)):await e.viteServer.ssrLoadModule(r.devEntryFile),a=d.render||d.default;if(typeof a!="function")throw new Error(`Entry file ${r.devEntryFile} must export a 'render' function.`);await a({req:t,reply:n,head:o,data:p,globalSettings:c})}catch(i){e.viteServer?.ssrFixStacktrace(i),console.error("[SSR Error]:",i),n.sent||n.status(500).send("Internal Server Error")}};e.decorate("addRpcRoute",function(t,n){let{handler:p,schema:i,...c}=n,o=`/rpc${t}`,h=v(i),d={...c,schema:h};if(i?.consumes?.includes("multipart/form-data")){let s=d.preValidation;d.preValidation=s?Array.isArray(s)?[F,...s]:[F,s]:F}this.route({method:"POST",url:o,...d,handler:async(s,u)=>{try{let S=await p.call(this,s,u);return u.sent?void 0:S}catch(S){if(console.error(`[RPC Error] ${o}:`,S),!u.sent){let{statusCode:R,message:T}=f(S);u.status(R).send({error:{message:T}})}}}})}),e.decorate("addRenderRoute",function(t,n){let{handler:p,schema:i,...c}=n||{},o=v(i),h=async(d,a,s)=>{try{let u=await p?.call(this,d,a);return s?u:m(d,a,u)}catch(u){if(console.error(`[Render Error] ${t}:`,u),!a.sent){let{statusCode:S,message:R}=f(u);if(s)a.status(S).send({error:{message:R}});else return m(d,a,{ssrError:{statusCode:500,message:"Internal Error"}})}}};if(this.route({method:"GET",url:t,schema:o,...c,handler:(d,a)=>h(d,a,!1)}),t!=="*"&&t!=="/*"){this.route({method:"GET",url:`/loader${t}`,schema:o,...c,handler:(s,u)=>h(s,u,!0)});let d=t.endsWith("/")?"*":"/*",a=`${t}${d}`;this.route({method:"GET",url:a,schema:o,...c,handler:(s,u)=>h(s,u,!1)})}}),e.decorate("addLoaderRoute",function(t,n){let{handler:p,schema:i,...c}=n,o=`/api${t}`,h=v(i);this.route({method:"GET",url:o,schema:h,...c,handler:async(d,a)=>{try{let s=await p.call(this,d,a);return a.sent?void 0:s}catch(s){if(console.error(`[Loader API Error] ${o}:`,s),!a.sent){let{statusCode:u,message:S}=f(s);a.status(u).send({error:{message:S}})}}}})})},P=E(x,{name:"fastify-b-ssr"});export{P as default};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bobtail.software/b-ssr",
3
- "version": "1.0.68",
3
+ "version": "1.0.69",
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",