@jucie.io/engine-server 1.0.22 → 1.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.js +3 -7
- package/dist/main.js.map +4 -4
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
var bt=Object.defineProperty;var Z=(t,e)=>()=>(t&&(e=t(t=0)),e);var xt=(t,e)=>{for(var r in e)bt(t,r,{get:e[r],enumerable:!0})};async function $e(t){return new Promise(e=>{if(t.method==="GET"||t.method==="HEAD"){e(null);return}let r=t.headers["content-type"]||"",n="";t.on("data",i=>{n+=i.toString()}),t.on("end",()=>{try{r.includes("application/json")?e(n?JSON.parse(n):{}):r.includes("application/x-www-form-urlencoded")?e(vt(n)):r.includes("multipart/form-data")?e({raw:n}):e(n||null)}catch{e(null)}}),t.on("error",()=>{e(null)})})}function vt(t){let e={},r=t.split("&");for(let n of r){let[i,a]=n.split("=");if(i){let o=decodeURIComponent(i),s=a?decodeURIComponent(a):"";if(o.endsWith("[]")){let l=o.slice(0,-2);e[l]||(e[l]=[]),e[l].push(s)}else e[o]=s}}return e}function Ae(t){let e={};for(let[r,n]of t.entries())if(r.endsWith("[]")||/\[\d*\]$/.test(r)){let i=r.replace(/\[\d*\]$/,"").replace("[]","");e[i]||(e[i]=[]),e[i].push(n)}else e[r]=n;return e}var ee=Z(()=>{});var I,ke,Oe,Pe,V,te=Z(()=>{ee();I=class{static create(e){return new this(e)}constructor(e){this.name=e,this.server=null,this.kernel=null,this.log=null,this.hooks=null}async initialize(e,r={},n=null){if(this.kernel=e,this.opts=r,this.log=n,r.middleware&&!Array.isArray(r.middleware))throw new Error("opts.middleware must be an array")}async start(e){throw new Error(`start() must be implemented by ${this.name} adapter`)}async stop(){throw new Error(`stop() must be implemented by ${this.name} adapter`)}getHttpServer(){return this.server}isRunning(){return this.server!==null}async handleRequest(e,r){throw new Error(`handleRequest() must be implemented by ${this.name} adapter`)}createContext(e,r){let n=new URL(e.url||e.originalUrl,`http://${e.headers.host}`);return{req:{method:e.method,url:n.toString(),path:n.pathname,headers:Object.fromEntries(Object.entries(e.headers).map(([i,a])=>[i.toLowerCase(),a])),query:e.query||Ae(n.searchParams),body:e.body||null,raw:{req:e,res:r},params:{}},res:r,respond:new V}}async sendResponse(e,r,n=!1){let i=r??{type:"text",status:204,headers:{},body:""};if(i.type!=="handled"&&!e.headersSent){if(e.statusCode=i.status??200,i.headers)for(let[a,o]of Object.entries(i.headers))e.setHeader(a.toLowerCase(),o);if(n)return e.end();switch(i.type){case"json":return e.getHeader("content-type")||e.setHeader("content-type","application/json; charset=utf-8"),e.end(JSON.stringify(i.body));case"text":return e.getHeader("content-type")||e.setHeader("content-type","text/plain; charset=utf-8"),e.end(i.body??"");case"html":return e.getHeader("content-type")||e.setHeader("content-type","text/html; charset=utf-8"),e.end(i.body??"");case"file":return await this.serveFile(e,i.path);case"stream":{let a=i.body;if(!a)return e.end();if(typeof a.pipe=="function")return a.pipe(e);if(Symbol.asyncIterator in Object(a)){for await(let o of a)e.write(o)||await new Promise(s=>e.once("drain",s));return e.end()}return e.end(a)}default:return e.end("")}}}async serveFile(e,r){let n=await import("node:fs"),i=await import("node:fs/promises"),a=await import("node:path"),{pipeline:o}=await import("node:stream"),{promisify:s}=await import("node:util"),l=s(o),h={".html":"text/html; charset=utf-8",".css":"text/css; charset=utf-8",".js":"application/javascript; charset=utf-8",".mjs":"application/javascript; charset=utf-8",".json":"application/json; charset=utf-8",".svg":"image/svg+xml",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".ico":"image/x-icon",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".eot":"application/vnd.ms-fontobject"};try{let u=await i.stat(r);if(!u.isFile())return e.statusCode=404,e.setHeader("content-type","text/plain; charset=utf-8"),e.end("Not Found");let d=a.extname(r).toLowerCase();e.getHeader("content-type")||e.setHeader("content-type",h[d]??"application/octet-stream"),e.setHeader("content-length",String(u.size));let y=n.createReadStream(r);y.on("error",()=>{e.headersSent||(e.statusCode=404),e.end("Not Found")}),await l(y,e)}catch{e.headersSent||(e.statusCode=404,e.setHeader("content-type","text/plain; charset=utf-8")),e.end("Not Found")}}async handleError(e,r){this.log?.error?.("Request handling error:",r),e.headersSent||(e.statusCode=500,e.setHeader("content-type","text/plain; charset=utf-8"),e.end("Internal Server Error"))}},ke=class{constructor(e,r,n,i={}){this.method=e.toUpperCase(),this.path=r,this.handler=n,this.options=i,this.params=i.params||[]}},Oe=class{constructor(){this.onRequest=null,this.preHandler=null,this.onSend=null,this.onError=null}},Pe=class{constructor(e,r,n,i){this.req=e,this.res=r,this.state=n,this.cache=i,this.respond=new V}},V=class{handled(){return{type:"handled"}}json(e,r=200,n={}){return{type:"json",status:r,headers:n,body:e}}text(e,r=200,n={}){return{type:"text",status:r,headers:n,body:e}}html(e,r=200,n={}){return{type:"html",status:r,headers:n,body:e}}file(e,r=200,n={}){return{type:"file",status:r,headers:n,path:e}}stream(e,r=200,n={}){return{type:"stream",status:r,headers:n,body:e}}redirect(e,r=302,n={}){return{type:"text",status:r,headers:{...n,location:e},body:""}}}});var je={};xt(je,{ExpressAdapter:()=>re});var re,Ie=Z(()=>{te();re=class extends I{#n=new Set;constructor(e=null){super("express"),this.express=e,this.app=null}async initialize(e,r={},n=null){if(await super.initialize(e,r,n),!this.express)try{this.express=await import("express"),this.express=this.express.default}catch{throw new Error("Express not installed. Run: npm install express")}if(this.app=this.express(),(!r.middleware||!this.#t(r.middleware))&&(this.app.use(this.express.json()),this.app.use(this.express.urlencoded({extended:!0}))),r.middleware&&Array.isArray(r.middleware)){this.log?.info(`Applying ${r.middleware.length} middleware functions`);for(let[i,a]of r.middleware.entries())try{this.app.use(a),this.log?.debug(`Applied middleware ${i+1}/${r.middleware.length}`)}catch(o){throw new Error(`Failed to apply middleware[${i}]: ${o.message}`)}}}registerKernelHandler(){this.app&&this.app.use(async(e,r,n)=>{r.headersSent||await this.handleRequest(e,r)})}getExpressApp(){return this.app}async start({port:e=3e3,host:r="0.0.0.0"}={}){return new Promise((n,i)=>{this.server=this.app.listen(e,r,a=>{a?i(a):(this.server.on("connection",o=>{this.#n.add(o),o.on("close",()=>{this.#n.delete(o)})}),this.log?.info(`Express Server with middleware listening on http://${r}:${e}`),n(this.server))})})}async stop(){if(this.server?.close){for(let e of this.#n)e.destroy();return this.#n.clear(),new Promise(e=>{this.server.close(()=>{this.log?.info("Express Server stopped"),e()})})}}async handleRequest(e,r){if(!r.headersSent)try{let n=this.createContext(e,r),i=await this.kernel.handle(n);await this.sendResponse(r,i,e.method==="HEAD")}catch(n){await this.handleError(r,n)}}#t(e){return e.some(r=>{let n=r.name?.toLowerCase()||r.toString().toLowerCase();return n.includes("json")||n.includes("urlencoded")||n.includes("bodyparser")})}}});var Rt=Object.defineProperty,c=(t,e)=>Rt(t,"name",{value:e,configurable:!0}),N=class{type=3;name="";prefix="";value="";suffix="";modifier=3;constructor(t,e,r,n,i,a){this.type=t,this.name=e,this.prefix=r,this.value=n,this.suffix=i,this.modifier=a}hasCustomName(){return this.name!==""&&typeof this.name!="number"}};c(N,"Part");var Et=/[$_\p{ID_Start}]/u,Ct=/[$_\u200C\u200D\p{ID_Continue}]/u,ne=".*";function Ne(t,e){return(e?/^[\x00-\xFF]*$/:/^[\x00-\x7F]*$/).test(t)}c(Ne,"isASCII");function se(t,e=!1){let r=[],n=0;for(;n<t.length;){let i=t[n],a=c(function(o){if(!e)throw new TypeError(o);r.push({type:"INVALID_CHAR",index:n,value:t[n++]})},"ErrorOrInvalid");if(i==="*"){r.push({type:"ASTERISK",index:n,value:t[n++]});continue}if(i==="+"||i==="?"){r.push({type:"OTHER_MODIFIER",index:n,value:t[n++]});continue}if(i==="\\"){r.push({type:"ESCAPED_CHAR",index:n++,value:t[n++]});continue}if(i==="{"){r.push({type:"OPEN",index:n,value:t[n++]});continue}if(i==="}"){r.push({type:"CLOSE",index:n,value:t[n++]});continue}if(i===":"){let o="",s=n+1;for(;s<t.length;){let l=t.substr(s,1);if(s===n+1&&Et.test(l)||s!==n+1&&Ct.test(l)){o+=t[s++];continue}break}if(!o){a(`Missing parameter name at ${n}`);continue}r.push({type:"NAME",index:n,value:o}),n=s;continue}if(i==="("){let o=1,s="",l=n+1,h=!1;if(t[l]==="?"){a(`Pattern cannot start with "?" at ${l}`);continue}for(;l<t.length;){if(!Ne(t[l],!1)){a(`Invalid character '${t[l]}' at ${l}.`),h=!0;break}if(t[l]==="\\"){s+=t[l++]+t[l++];continue}if(t[l]===")"){if(o--,o===0){l++;break}}else if(t[l]==="("&&(o++,t[l+1]!=="?")){a(`Capturing groups are not allowed at ${l}`),h=!0;break}s+=t[l++]}if(h)continue;if(o){a(`Unbalanced pattern at ${n}`);continue}if(!s){a(`Missing pattern at ${n}`);continue}r.push({type:"REGEX",index:n,value:s}),n=l;continue}r.push({type:"CHAR",index:n,value:t[n++]})}return r.push({type:"END",index:n,value:""}),r}c(se,"lexer");function ie(t,e={}){let r=se(t);e.delimiter??="/#?",e.prefixes??="./";let n=`[^${x(e.delimiter)}]+?`,i=[],a=0,o=0,s="",l=new Set,h=c(m=>{if(o<r.length&&r[o].type===m)return r[o++].value},"tryConsume"),u=c(()=>h("OTHER_MODIFIER")??h("ASTERISK"),"tryConsumeModifier"),d=c(m=>{let w=h(m);if(w!==void 0)return w;let{type:b,index:j}=r[o];throw new TypeError(`Unexpected ${b} at ${j}, expected ${m}`)},"mustConsume"),y=c(()=>{let m="",w;for(;w=h("CHAR")??h("ESCAPED_CHAR");)m+=w;return m},"consumeText"),G=c(m=>m,"DefaultEncodePart"),P=e.encodePart||G,z="",J=c(m=>{z+=m},"appendToPendingFixedValue"),Q=c(()=>{z.length&&(i.push(new N(3,"","",P(z),"",3)),z="")},"maybeAddPartFromPendingFixedValue"),Se=c((m,w,b,j,S)=>{let E=3;switch(S){case"?":E=1;break;case"*":E=0;break;case"+":E=2;break}if(!w&&!b&&E===3){J(m);return}if(Q(),!w&&!b){if(!m)return;i.push(new N(3,"","",P(m),"",E));return}let v;b?b==="*"?v=ne:v=b:v=n;let U=2;v===n?(U=1,v=""):v===ne&&(U=0,v="");let $;if(w?$=w:b&&($=a++),l.has($))throw new TypeError(`Duplicate name '${$}'.`);l.add($),i.push(new N(U,$,P(m),v,P(j),E))},"addPart");for(;o<r.length;){let m=h("CHAR"),w=h("NAME"),b=h("REGEX");if(!w&&!b&&(b=h("ASTERISK")),w||b){let S=m??"";e.prefixes.indexOf(S)===-1&&(J(S),S=""),Q();let E=u();Se(S,w,b,"",E);continue}let j=m??h("ESCAPED_CHAR");if(j){J(j);continue}if(h("OPEN")){let S=y(),E=h("NAME"),v=h("REGEX");!E&&!v&&(v=h("ASTERISK"));let U=y();d("CLOSE");let $=u();Se(S,E,v,U,$);continue}Q(),d("END")}return i}c(ie,"parse");function x(t){return t.replace(/([.+*?^${}()[\]|/\\])/g,"\\$1")}c(x,"escapeString");function oe(t){return t&&t.ignoreCase?"ui":"u"}c(oe,"flags");function Le(t,e,r){return ae(ie(t,r),e,r)}c(Le,"stringToRegexp");function O(t){switch(t){case 0:return"*";case 1:return"?";case 2:return"+";case 3:return""}}c(O,"modifierToString");function ae(t,e,r={}){r.delimiter??="/#?",r.prefixes??="./",r.sensitive??=!1,r.strict??=!1,r.end??=!0,r.start??=!0,r.endsWith="";let n=r.start?"^":"";for(let s of t){if(s.type===3){s.modifier===3?n+=x(s.value):n+=`(?:${x(s.value)})${O(s.modifier)}`;continue}e&&e.push(s.name);let l=`[^${x(r.delimiter)}]+?`,h=s.value;if(s.type===1?h=l:s.type===0&&(h=ne),!s.prefix.length&&!s.suffix.length){s.modifier===3||s.modifier===1?n+=`(${h})${O(s.modifier)}`:n+=`((?:${h})${O(s.modifier)})`;continue}if(s.modifier===3||s.modifier===1){n+=`(?:${x(s.prefix)}(${h})${x(s.suffix)})`,n+=O(s.modifier);continue}n+=`(?:${x(s.prefix)}`,n+=`((?:${h})(?:`,n+=x(s.suffix),n+=x(s.prefix),n+=`(?:${h}))*)${x(s.suffix)})`,s.modifier===0&&(n+="?")}let i=`[${x(r.endsWith)}]|$`,a=`[${x(r.delimiter)}]`;if(r.end)return r.strict||(n+=`${a}?`),r.endsWith.length?n+=`(?=${i})`:n+="$",new RegExp(n,oe(r));r.strict||(n+=`(?:${a}(?=${i}))?`);let o=!1;if(t.length){let s=t[t.length-1];s.type===3&&s.modifier===3&&(o=r.delimiter.indexOf(s)>-1)}return o||(n+=`(?=${a}|${i})`),new RegExp(n,oe(r))}c(ae,"partsToRegexp");var A={delimiter:"",prefixes:"",sensitive:!0,strict:!0},Tt={delimiter:".",prefixes:"",sensitive:!0,strict:!0},St={delimiter:"/",prefixes:"/",sensitive:!0,strict:!0};function Fe(t,e){return t.length?t[0]==="/"?!0:!e||t.length<2?!1:(t[0]=="\\"||t[0]=="{")&&t[1]=="/":!1}c(Fe,"isAbsolutePathname");function le(t,e){return t.startsWith(e)?t.substring(e.length,t.length):t}c(le,"maybeStripPrefix");function Me(t,e){return t.endsWith(e)?t.substr(0,t.length-e.length):t}c(Me,"maybeStripSuffix");function he(t){return!t||t.length<2?!1:t[0]==="["||(t[0]==="\\"||t[0]==="{")&&t[1]==="["}c(he,"treatAsIPv6Hostname");var He=["ftp","file","http","https","ws","wss"];function ce(t){if(!t)return!0;for(let e of He)if(t.test(e))return!0;return!1}c(ce,"isSpecialScheme");function Ue(t,e){if(t=le(t,"#"),e||t==="")return t;let r=new URL("https://example.com");return r.hash=t,r.hash?r.hash.substring(1,r.hash.length):""}c(Ue,"canonicalizeHash");function Be(t,e){if(t=le(t,"?"),e||t==="")return t;let r=new URL("https://example.com");return r.search=t,r.search?r.search.substring(1,r.search.length):""}c(Be,"canonicalizeSearch");function _e(t,e){return e||t===""?t:he(t)?fe(t):pe(t)}c(_e,"canonicalizeHostname");function De(t,e){if(e||t==="")return t;let r=new URL("https://example.com");return r.password=t,r.password}c(De,"canonicalizePassword");function Ge(t,e){if(e||t==="")return t;let r=new URL("https://example.com");return r.username=t,r.username}c(Ge,"canonicalizeUsername");function ze(t,e,r){if(r||t==="")return t;if(e&&!He.includes(e))return new URL(`${e}:${t}`).pathname;let n=t[0]=="/";return t=new URL(n?t:"/-"+t,"https://example.com").pathname,n||(t=t.substring(2,t.length)),t}c(ze,"canonicalizePathname");function Ve(t,e,r){return ue(e)===t&&(t=""),r||t===""?t:de(t)}c(Ve,"canonicalizePort");function Ke(t,e){return t=Me(t,":"),e||t===""?t:K(t)}c(Ke,"canonicalizeProtocol");function ue(t){switch(t){case"ws":case"http":return"80";case"wws":case"https":return"443";case"ftp":return"21";default:return""}}c(ue,"defaultPortForProtocol");function K(t){if(t==="")return t;if(/^[-+.A-Za-z0-9]*$/.test(t))return t.toLowerCase();throw new TypeError(`Invalid protocol '${t}'.`)}c(K,"protocolEncodeCallback");function We(t){if(t==="")return t;let e=new URL("https://example.com");return e.username=t,e.username}c(We,"usernameEncodeCallback");function Ye(t){if(t==="")return t;let e=new URL("https://example.com");return e.password=t,e.password}c(Ye,"passwordEncodeCallback");function pe(t){if(t==="")return t;if(/[\t\n\r #%/:<>?@[\]^\\|]/g.test(t))throw new TypeError(`Invalid hostname '${t}'`);let e=new URL("https://example.com");return e.hostname=t,e.hostname}c(pe,"hostnameEncodeCallback");function fe(t){if(t==="")return t;if(/[^0-9a-fA-F[\]:]/g.test(t))throw new TypeError(`Invalid IPv6 hostname '${t}'`);return t.toLowerCase()}c(fe,"ipv6HostnameEncodeCallback");function de(t){if(t===""||/^[0-9]*$/.test(t)&&parseInt(t)<=65535)return t;throw new TypeError(`Invalid port '${t}'.`)}c(de,"portEncodeCallback");function qe(t){if(t==="")return t;let e=new URL("https://example.com");return e.pathname=t[0]!=="/"?"/-"+t:t,t[0]!=="/"?e.pathname.substring(2,e.pathname.length):e.pathname}c(qe,"standardURLPathnameEncodeCallback");function Xe(t){return t===""?t:new URL(`data:${t}`).pathname}c(Xe,"pathURLPathnameEncodeCallback");function Je(t){if(t==="")return t;let e=new URL("https://example.com");return e.search=t,e.search.substring(1,e.search.length)}c(Je,"searchEncodeCallback");function Qe(t){if(t==="")return t;let e=new URL("https://example.com");return e.hash=t,e.hash.substring(1,e.hash.length)}c(Qe,"hashEncodeCallback");var Ze=class{#n;#t=[];#r={};#e=0;#s=1;#a=0;#o=0;#p=0;#c=0;#f=!1;constructor(t){this.#n=t}get result(){return this.#r}parse(){for(this.#t=se(this.#n,!0);this.#e<this.#t.length;this.#e+=this.#s){if(this.#s=1,this.#t[this.#e].type==="END"){if(this.#o===0){this.#b(),this.#u()?this.#i(9,1):this.#d()?this.#i(8,1):this.#i(7,0);continue}else if(this.#o===2){this.#m(5);continue}this.#i(10,0);break}if(this.#p>0)if(this.#S())this.#p-=1;else continue;if(this.#T()){this.#p+=1;continue}switch(this.#o){case 0:this.#x()&&this.#m(1);break;case 1:if(this.#x()){this.#k();let t=7,e=1;this.#R()?(t=2,e=3):this.#f&&(t=2),this.#i(t,e)}break;case 2:this.#y()?this.#m(3):(this.#w()||this.#d()||this.#u())&&this.#m(5);break;case 3:this.#E()?this.#i(4,1):this.#y()&&this.#i(5,1);break;case 4:this.#y()&&this.#i(5,1);break;case 5:this.#$()?this.#c+=1:this.#A()&&(this.#c-=1),this.#C()&&!this.#c?this.#i(6,1):this.#w()?this.#i(7,0):this.#d()?this.#i(8,1):this.#u()&&this.#i(9,1);break;case 6:this.#w()?this.#i(7,0):this.#d()?this.#i(8,1):this.#u()&&this.#i(9,1);break;case 7:this.#d()?this.#i(8,1):this.#u()&&this.#i(9,1);break;case 8:this.#u()&&this.#i(9,1);break;case 9:break;case 10:break}}this.#r.hostname!==void 0&&this.#r.port===void 0&&(this.#r.port="")}#i(t,e){switch(this.#o){case 0:break;case 1:this.#r.protocol=this.#h();break;case 2:break;case 3:this.#r.username=this.#h();break;case 4:this.#r.password=this.#h();break;case 5:this.#r.hostname=this.#h();break;case 6:this.#r.port=this.#h();break;case 7:this.#r.pathname=this.#h();break;case 8:this.#r.search=this.#h();break;case 9:this.#r.hash=this.#h();break;case 10:break}this.#o!==0&&t!==10&&([1,2,3,4].includes(this.#o)&&[6,7,8,9].includes(t)&&(this.#r.hostname??=""),[1,2,3,4,5,6].includes(this.#o)&&[8,9].includes(t)&&(this.#r.pathname??=this.#f?"/":""),[1,2,3,4,5,6,7].includes(this.#o)&&t===9&&(this.#r.search??="")),this.#v(t,e)}#v(t,e){this.#o=t,this.#a=this.#e+e,this.#e+=e,this.#s=0}#b(){this.#e=this.#a,this.#s=0}#m(t){this.#b(),this.#o=t}#g(t){return t<0&&(t=this.#t.length-t),t<this.#t.length?this.#t[t]:this.#t[this.#t.length-1]}#l(t,e){let r=this.#g(t);return r.value===e&&(r.type==="CHAR"||r.type==="ESCAPED_CHAR"||r.type==="INVALID_CHAR")}#x(){return this.#l(this.#e,":")}#R(){return this.#l(this.#e+1,"/")&&this.#l(this.#e+2,"/")}#y(){return this.#l(this.#e,"@")}#E(){return this.#l(this.#e,":")}#C(){return this.#l(this.#e,":")}#w(){return this.#l(this.#e,"/")}#d(){if(this.#l(this.#e,"?"))return!0;if(this.#t[this.#e].value!=="?")return!1;let t=this.#g(this.#e-1);return t.type!=="NAME"&&t.type!=="REGEX"&&t.type!=="CLOSE"&&t.type!=="ASTERISK"}#u(){return this.#l(this.#e,"#")}#T(){return this.#t[this.#e].type=="OPEN"}#S(){return this.#t[this.#e].type=="CLOSE"}#$(){return this.#l(this.#e,"[")}#A(){return this.#l(this.#e,"]")}#h(){let t=this.#t[this.#e],e=this.#g(this.#a).index;return this.#n.substring(e,t.index)}#k(){let t={};Object.assign(t,A),t.encodePart=K;let e=Le(this.#h(),void 0,t);this.#f=ce(e)}};c(Ze,"Parser");var me=["protocol","username","password","hostname","port","pathname","search","hash"],k="*";function ge(t,e){if(typeof t!="string")throw new TypeError("parameter 1 is not of type 'string'.");let r=new URL(t,e);return{protocol:r.protocol.substring(0,r.protocol.length-1),username:r.username,password:r.password,hostname:r.hostname,port:r.port,pathname:r.pathname,search:r.search!==""?r.search.substring(1,r.search.length):void 0,hash:r.hash!==""?r.hash.substring(1,r.hash.length):void 0}}c(ge,"extractValues");function T(t,e){return e?F(t):t}c(T,"processBaseURLString");function L(t,e,r){let n;if(typeof e.baseURL=="string")try{n=new URL(e.baseURL),e.protocol===void 0&&(t.protocol=T(n.protocol.substring(0,n.protocol.length-1),r)),!r&&e.protocol===void 0&&e.hostname===void 0&&e.port===void 0&&e.username===void 0&&(t.username=T(n.username,r)),!r&&e.protocol===void 0&&e.hostname===void 0&&e.port===void 0&&e.username===void 0&&e.password===void 0&&(t.password=T(n.password,r)),e.protocol===void 0&&e.hostname===void 0&&(t.hostname=T(n.hostname,r)),e.protocol===void 0&&e.hostname===void 0&&e.port===void 0&&(t.port=T(n.port,r)),e.protocol===void 0&&e.hostname===void 0&&e.port===void 0&&e.pathname===void 0&&(t.pathname=T(n.pathname,r)),e.protocol===void 0&&e.hostname===void 0&&e.port===void 0&&e.pathname===void 0&&e.search===void 0&&(t.search=T(n.search.substring(1,n.search.length),r)),e.protocol===void 0&&e.hostname===void 0&&e.port===void 0&&e.pathname===void 0&&e.search===void 0&&e.hash===void 0&&(t.hash=T(n.hash.substring(1,n.hash.length),r))}catch{throw new TypeError(`invalid baseURL '${e.baseURL}'.`)}if(typeof e.protocol=="string"&&(t.protocol=Ke(e.protocol,r)),typeof e.username=="string"&&(t.username=Ge(e.username,r)),typeof e.password=="string"&&(t.password=De(e.password,r)),typeof e.hostname=="string"&&(t.hostname=_e(e.hostname,r)),typeof e.port=="string"&&(t.port=Ve(e.port,t.protocol,r)),typeof e.pathname=="string"){if(t.pathname=e.pathname,n&&!Fe(t.pathname,r)){let i=n.pathname.lastIndexOf("/");i>=0&&(t.pathname=T(n.pathname.substring(0,i+1),r)+t.pathname)}t.pathname=ze(t.pathname,t.protocol,r)}return typeof e.search=="string"&&(t.search=Be(e.search,r)),typeof e.hash=="string"&&(t.hash=Ue(e.hash,r)),t}c(L,"applyInit");function F(t){return t.replace(/([+*?:{}()\\])/g,"\\$1")}c(F,"escapePatternString");function et(t){return t.replace(/([.+*?^${}()[\]|/\\])/g,"\\$1")}c(et,"escapeRegexpString");function tt(t,e){e.delimiter??="/#?",e.prefixes??="./",e.sensitive??=!1,e.strict??=!1,e.end??=!0,e.start??=!0,e.endsWith="";let r=".*",n=`[^${et(e.delimiter)}]+?`,i=/[$_\u200C\u200D\p{ID_Continue}]/u,a="";for(let o=0;o<t.length;++o){let s=t[o];if(s.type===3){if(s.modifier===3){a+=F(s.value);continue}a+=`{${F(s.value)}}${O(s.modifier)}`;continue}let l=s.hasCustomName(),h=!!s.suffix.length||!!s.prefix.length&&(s.prefix.length!==1||!e.prefixes.includes(s.prefix)),u=o>0?t[o-1]:null,d=o<t.length-1?t[o+1]:null;if(!h&&l&&s.type===1&&s.modifier===3&&d&&!d.prefix.length&&!d.suffix.length)if(d.type===3){let y=d.value.length>0?d.value[0]:"";h=i.test(y)}else h=!d.hasCustomName();if(!h&&!s.prefix.length&&u&&u.type===3){let y=u.value[u.value.length-1];h=e.prefixes.includes(y)}h&&(a+="{"),a+=F(s.prefix),l&&(a+=`:${s.name}`),s.type===2?a+=`(${s.value})`:s.type===1?l||(a+=`(${n})`):s.type===0&&(!l&&(!u||u.type===3||u.modifier!==3||h||s.prefix!=="")?a+="*":a+=`(${r})`),s.type===1&&l&&s.suffix.length&&i.test(s.suffix[0])&&(a+="\\"),a+=F(s.suffix),h&&(a+="}"),s.modifier!==3&&(a+=O(s.modifier))}return a}c(tt,"partsToPattern");var B=class{#n;#t={};#r={};#e={};#s={};#a=!1;constructor(t={},e,r){try{let n;if(typeof e=="string"?n=e:r=e,typeof t=="string"){let s=new Ze(t);if(s.parse(),t=s.result,n===void 0&&typeof t.protocol!="string")throw new TypeError("A base URL must be provided for a relative constructor string.");t.baseURL=n}else{if(!t||typeof t!="object")throw new TypeError("parameter 1 is not of type 'string' and cannot convert to dictionary.");if(n)throw new TypeError("parameter 1 is not of type 'string'.")}typeof r>"u"&&(r={ignoreCase:!1});let i={ignoreCase:r.ignoreCase===!0},a={pathname:k,protocol:k,username:k,password:k,hostname:k,port:k,search:k,hash:k};this.#n=L(a,t,!0),ue(this.#n.protocol)===this.#n.port&&(this.#n.port="");let o;for(o of me){if(!(o in this.#n))continue;let s={},l=this.#n[o];switch(this.#r[o]=[],o){case"protocol":Object.assign(s,A),s.encodePart=K;break;case"username":Object.assign(s,A),s.encodePart=We;break;case"password":Object.assign(s,A),s.encodePart=Ye;break;case"hostname":Object.assign(s,Tt),he(l)?s.encodePart=fe:s.encodePart=pe;break;case"port":Object.assign(s,A),s.encodePart=de;break;case"pathname":ce(this.#t.protocol)?(Object.assign(s,St,i),s.encodePart=qe):(Object.assign(s,A,i),s.encodePart=Xe);break;case"search":Object.assign(s,A,i),s.encodePart=Je;break;case"hash":Object.assign(s,A,i),s.encodePart=Qe;break}try{this.#s[o]=ie(l,s),this.#t[o]=ae(this.#s[o],this.#r[o],s),this.#e[o]=tt(this.#s[o],s),this.#a=this.#a||this.#s[o].some(h=>h.type===2)}catch{throw new TypeError(`invalid ${o} pattern '${this.#n[o]}'.`)}}}catch(n){throw new TypeError(`Failed to construct 'URLPattern': ${n.message}`)}}get[Symbol.toStringTag](){return"URLPattern"}test(t={},e){let r={pathname:"",protocol:"",username:"",password:"",hostname:"",port:"",search:"",hash:""};if(typeof t!="string"&&e)throw new TypeError("parameter 1 is not of type 'string'.");if(typeof t>"u")return!1;try{typeof t=="object"?r=L(r,t,!1):r=L(r,ge(t,e),!1)}catch{return!1}let n;for(n of me)if(!this.#t[n].exec(r[n]))return!1;return!0}exec(t={},e){let r={pathname:"",protocol:"",username:"",password:"",hostname:"",port:"",search:"",hash:""};if(typeof t!="string"&&e)throw new TypeError("parameter 1 is not of type 'string'.");if(typeof t>"u")return;try{typeof t=="object"?r=L(r,t,!1):r=L(r,ge(t,e),!1)}catch{return null}let n={};e?n.inputs=[t,e]:n.inputs=[t];let i;for(i of me){let a=this.#t[i].exec(r[i]);if(!a)return null;let o={};for(let[s,l]of this.#r[i].entries())if(typeof l=="string"||typeof l=="number"){let h=a[s+1];o[l]=h}n[i]={input:r[i]??"",groups:o}}return n}static compareComponent(t,e,r){let n=c((s,l)=>{for(let h of["type","modifier","prefix","value","suffix"]){if(s[h]<l[h])return-1;if(s[h]!==l[h])return 1}return 0},"comparePart"),i=new N(3,"","","","",3),a=new N(0,"","","","",3),o=c((s,l)=>{let h=0;for(;h<Math.min(s.length,l.length);++h){let u=n(s[h],l[h]);if(u)return u}return s.length===l.length?0:n(s[h]??i,l[h]??i)},"comparePartList");return!e.#e[t]&&!r.#e[t]?0:e.#e[t]&&!r.#e[t]?o(e.#s[t],[a]):!e.#e[t]&&r.#e[t]?o([a],r.#s[t]):o(e.#s[t],r.#s[t])}get protocol(){return this.#e.protocol}get username(){return this.#e.username}get password(){return this.#e.password}get hostname(){return this.#e.hostname}get port(){return this.#e.port}get pathname(){return this.#e.pathname}get search(){return this.#e.search}get hash(){return this.#e.hash}get hasRegExpGroups(){return this.#a}};c(B,"URLPattern");globalThis.URLPattern||(globalThis.URLPattern=B);function rt(t){let e=new URLPattern({pathname:t});return r=>e.exec({pathname:r})?.pathname.groups??null}function $t(t){let e=/:([a-zA-Z_][a-zA-Z0-9_]*)(\?)?(\*)?/g,r=[],n;for(;(n=e.exec(t))!==null;){let[,i,a,o]=n;r.push({name:i,optional:!!a,splat:!!o,fullMatch:n[0]})}return t.includes("*")&&!t.includes(":*")&&r.push({name:"wild",optional:!1,splat:!0,fullMatch:"*"}),r}function hr(t,e={},r={}){let{strict:n=!0,encode:i=!0,defaultValue:a=""}=r,o=t,s=$t(t);for(let l of s){let{name:h,optional:u,fullMatch:d}=l,y=e[h];if(y==null)if(u){o=o.replace(`/${d}`,"").replace(d,"");continue}else{if(n)throw new Error(`Missing required route parameter: ${h}`);y=a}let G=String(y),P=i?encodeURIComponent(G):G;o=o.replace(d,P)}return o=o.replace(/\/+/g,"/"),o}var W=class{#n=[];#t=[];#r={onRequest:null,preHandler:null,onSend:null,onError:null};#e=null;constructor(){}registerRoutes(e){for(let r of e)this.registerRoute(r)}registerRoute(e){let r={...e,match:rt(e.path)};this.#n.push(r)}setAppHandlers(e=[]){this.#t=Array.isArray(e)?e:[]}async cleanupAppHandlers(){for(let e of this.#t)e?.cleanup&&await e.cleanup();this.#t=[]}hooks(e){Object.assign(this.#r,e)}setStaticFallback(e,r){this.#e={outputDir:e,handler:r}}async handle(e){let r;try{let n=await this.#r.onRequest?.(e);if(n)return r=n,r;for(let s of this.#t)try{if(!s?.match||!s?.handle)continue;if(await s.match(e.req)){let l=await s.handle(e);if(l)return r=l,r}}catch(l){return r=await this.#r.onError?.(e,l)??e.respond.text("Internal Server Error",500),r}let i=null,a=this.#n.find(s=>{if(s.method!==e.req.method)return!1;let l=s.match(e.req.path);return l?(i=l,!0):!1});if(!a){if(this.#e){let s=await this.#e.handler(e,this.#e.outputDir);r=s&&s.status!==404?s:e.respond.text("Not Found",404)}else r=e.respond.text("Not Found",404);return r}e.req.params=i||{};let o=await this.#r.preHandler?.(e,a);if(o)return r=o,r;r=await a.handler(e)}catch(n){r=await this.#r.onError?.(e,n)??e.respond.text("Internal Server Error",500)}finally{await this.#r.onSend?.(e,r)}return r??e.respond.text("",204)}getRoutes(){return this.#n.map(e=>({method:e.method,path:e.path,params:e.params||[],compiled:!0}))}};te();ee();import At from"node:http";var Y=class extends I{#n=new Set;constructor(){super("http")}async initialize(e,r={},n=null){await super.initialize(e,r,n),r.middleware?.length>0&&(n?.warn('Middleware configured but HTTP adapter selected. Consider using adapter: "express" for full middleware support.'),n?.info("HTTP adapter will simulate middleware using hooks for basic compatibility."))}async start({port:e=3e3,host:r="0.0.0.0"}={}){return this.server=At.createServer(async(n,i)=>{try{if(this.opts.middleware?.length>0&&!await this.#t(n,i,this.opts.middleware))return;n.body||(n.body=await $e(n));let a=this.createContext(n,i),o=await this.kernel.handle(a);await this.sendResponse(i,o,n.method==="HEAD")}catch(a){await this.handleError(i,a)}}),this.server.on("connection",n=>{this.#n.add(n),n.on("close",()=>{this.#n.delete(n)})}),await new Promise((n,i)=>this.server.listen(e,r,a=>a?i(a):n())),this.log?.info?.(`HTTP Server listening on http://${r}:${e}`),this.server}async stop(){if(this.server){for(let e of this.#n)e.destroy();this.#n.clear(),await new Promise(e=>this.server.close(()=>e())),this.server=null}}async#t(e,r,n){for(let i of n)try{let a=!1,o=s=>{if(s)throw s;a=!0};if(r.json||(r.json=s=>(r.setHeader("Content-Type","application/json"),r.end(JSON.stringify(s)),!1)),await i(e,r,o),!a&&r.headersSent)return!1}catch(a){return this.log?.error(`Middleware simulation error: ${a.message}`),r.statusCode=500,r.end("Internal Server Error"),!1}return!0}};var yr=10,nt=(t=0)=>e=>`\x1B[${e+t}m`,st=(t=0)=>e=>`\x1B[${38+t};5;${e}m`,it=(t=0)=>(e,r,n)=>`\x1B[${38+t};2;${e};${r};${n}m`,p={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},ot=Object.keys(p.modifier),ye=Object.keys(p.color),we=Object.keys(p.bgColor),at=[...ye,...we];function kt(){let t=new Map;for(let[e,r]of Object.entries(p)){for(let[n,i]of Object.entries(r))p[n]={open:`\x1B[${i[0]}m`,close:`\x1B[${i[1]}m`},r[n]=p[n],t.set(i[0],i[1]);Object.defineProperty(p,e,{value:r,enumerable:!1})}return Object.defineProperty(p,"codes",{value:t,enumerable:!1}),p.color.close="\x1B[39m",p.bgColor.close="\x1B[49m",p.color.ansi=nt(),p.color.ansi256=st(),p.color.ansi16m=it(),p.bgColor.ansi=nt(10),p.bgColor.ansi256=st(10),p.bgColor.ansi16m=it(10),Object.defineProperties(p,{rgbToAnsi256:{value(e,r,n){return e===r&&r===n?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(r/255*5)+Math.round(n/255*5)},enumerable:!1},hexToRgb:{value(e){let r=/[a-f\d]{6}|[a-f\d]{3}/i.exec(e.toString(16));if(!r)return[0,0,0];let[n]=r;n.length===3&&(n=[...n].map(a=>a+a).join(""));let i=Number.parseInt(n,16);return[i>>16&255,i>>8&255,i&255]},enumerable:!1},hexToAnsi256:{value:e=>p.rgbToAnsi256(...p.hexToRgb(e)),enumerable:!1},ansi256ToAnsi:{value(e){if(e<8)return 30+e;if(e<16)return 90+(e-8);let r,n,i;if(e>=232)r=((e-232)*10+8)/255,n=r,i=r;else{e-=16;let s=e%36;r=Math.floor(e/36)/5,n=Math.floor(s/6)/5,i=s%6/5}let a=Math.max(r,n,i)*2;if(a===0)return 30;let o=30+(Math.round(i)<<2|Math.round(n)<<1|Math.round(r));return a===2&&(o+=60),o},enumerable:!1},rgbToAnsi:{value:(e,r,n)=>p.ansi256ToAnsi(p.rgbToAnsi256(e,r,n)),enumerable:!1},hexToAnsi:{value:e=>p.ansi256ToAnsi(p.hexToAnsi256(e)),enumerable:!1}}),p}var Ot=kt(),C=Ot;import be from"node:process";import Pt from"node:os";import lt from"node:tty";function R(t,e=globalThis.Deno?globalThis.Deno.args:be.argv){let r=t.startsWith("-")?"":t.length===1?"-":"--",n=e.indexOf(r+t),i=e.indexOf("--");return n!==-1&&(i===-1||n<i)}var{env:f}=be,q;R("no-color")||R("no-colors")||R("color=false")||R("color=never")?q=0:(R("color")||R("colors")||R("color=true")||R("color=always"))&&(q=1);function jt(){if("FORCE_COLOR"in f)return f.FORCE_COLOR==="true"?1:f.FORCE_COLOR==="false"?0:f.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(f.FORCE_COLOR,10),3)}function It(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function Nt(t,{streamIsTTY:e,sniffFlags:r=!0}={}){let n=jt();n!==void 0&&(q=n);let i=r?q:n;if(i===0)return 0;if(r){if(R("color=16m")||R("color=full")||R("color=truecolor"))return 3;if(R("color=256"))return 2}if("TF_BUILD"in f&&"AGENT_NAME"in f)return 1;if(t&&!e&&i===void 0)return 0;let a=i||0;if(f.TERM==="dumb")return a;if(be.platform==="win32"){let o=Pt.release().split(".");return Number(o[0])>=10&&Number(o[2])>=10586?Number(o[2])>=14931?3:2:1}if("CI"in f)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(o=>o in f)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(o=>o in f)||f.CI_NAME==="codeship"?1:a;if("TEAMCITY_VERSION"in f)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(f.TEAMCITY_VERSION)?1:0;if(f.COLORTERM==="truecolor"||f.TERM==="xterm-kitty"||f.TERM==="xterm-ghostty"||f.TERM==="wezterm")return 3;if("TERM_PROGRAM"in f){let o=Number.parseInt((f.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(f.TERM_PROGRAM){case"iTerm.app":return o>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(f.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(f.TERM)||"COLORTERM"in f?1:a}function ht(t,e={}){let r=Nt(t,{streamIsTTY:t&&t.isTTY,...e});return It(r)}var Lt={stdout:ht({isTTY:lt.isatty(1)}),stderr:ht({isTTY:lt.isatty(2)})},ct=Lt;function ut(t,e,r){let n=t.indexOf(e);if(n===-1)return t;let i=e.length,a=0,o="";do o+=t.slice(a,n)+e+r,a=n+i,n=t.indexOf(e,a);while(n!==-1);return o+=t.slice(a),o}function pt(t,e,r,n){let i=0,a="";do{let o=t[n-1]==="\r";a+=t.slice(i,o?n-1:n)+e+(o?`\r
|
|
2
|
-
|
|
3
|
-
`)
|
|
4
|
-
`,i)}while(n!==-1);return a+=t.slice(i),a}var{stdout:xe,stderr:ve}=ct,Re=Symbol("GENERATOR"),M=Symbol("STYLER"),_=Symbol("IS_EMPTY"),ft=["ansi","ansi","ansi256","ansi16m"],H=Object.create(null),Ft=(t,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let r=xe?xe.level:0;t.level=e.level===void 0?r:e.level},dt=class{constructor(e){return mt(e)}},mt=t=>{let e=(...r)=>r.join(" ");return Ft(e,t),Object.setPrototypeOf(e,D.prototype),e};function D(t){return mt(t)}Object.setPrototypeOf(D.prototype,Function.prototype);for(let[t,e]of Object.entries(C))H[t]={get(){let r=X(this,Ce(e.open,e.close,this[M]),this[_]);return Object.defineProperty(this,t,{value:r}),r}};H.visible={get(){let t=X(this,this[M],!0);return Object.defineProperty(this,"visible",{value:t}),t}};var Ee=(t,e,r,...n)=>t==="rgb"?e==="ansi16m"?C[r].ansi16m(...n):e==="ansi256"?C[r].ansi256(C.rgbToAnsi256(...n)):C[r].ansi(C.rgbToAnsi(...n)):t==="hex"?Ee("rgb",e,r,...C.hexToRgb(...n)):C[r][t](...n),Mt=["rgb","hex","ansi256"];for(let t of Mt){H[t]={get(){let{level:r}=this;return function(...n){let i=Ce(Ee(t,ft[r],"color",...n),C.color.close,this[M]);return X(this,i,this[_])}}};let e="bg"+t[0].toUpperCase()+t.slice(1);H[e]={get(){let{level:r}=this;return function(...n){let i=Ce(Ee(t,ft[r],"bgColor",...n),C.bgColor.close,this[M]);return X(this,i,this[_])}}}}var Ht=Object.defineProperties(()=>{},{...H,level:{enumerable:!0,get(){return this[Re].level},set(t){this[Re].level=t}}}),Ce=(t,e,r)=>{let n,i;return r===void 0?(n=t,i=e):(n=r.openAll+t,i=e+r.closeAll),{open:t,close:e,openAll:n,closeAll:i,parent:r}},X=(t,e,r)=>{let n=(...i)=>Ut(n,i.length===1?""+i[0]:i.join(" "));return Object.setPrototypeOf(n,Ht),n[Re]=t,n[M]=e,n[_]=r,n},Ut=(t,e)=>{if(t.level<=0||!e)return t[_]?"":e;let r=t[M];if(r===void 0)return e;let{openAll:n,closeAll:i}=r;if(e.includes("\x1B"))for(;r!==void 0;)e=ut(e,r.close,r.open),r=r.parent;let a=e.indexOf(`
|
|
5
|
-
`);return a!==-1&&(e=pt(e,i,n,a)),n+e+i};Object.defineProperties(D.prototype,H);var Bt=D(),$r=D({level:ve?ve.level:0}),g=Bt;import{exec as _t}from"child_process";import{promisify as Dt}from"util";var Gt=Dt(_t);async function gt({port:t,host:e,mode:r,open:n},i){let o=`${r==="production"?"https":"http"}://${e==="0.0.0.0"?"localhost":e}:${t}`;["",g.bold.green("\u{1F680} Server Ready! \u{1F680}"),"",` ${g.gray("Mode")} ${g.white(r.toUpperCase())}`,` ${g.gray("URL")} ${g.cyan.underline(o)}`,` ${g.gray("Host")} ${g.white(e)}:${g.white(t)}`,""].forEach(u=>i.info(u));let l=n!==void 0?n:r==="development";if(l!==!1){let u=typeof l=="string"?l:o;try{await zt(u),i.info(g.green("\u{1F310} Browser opened automatically"))}catch(d){i.debug("Could not open browser automatically:",d.message)}}["",g.gray("\u{1F4A1} Quick Commands:"),g.gray(` \u2022 Press ${g.yellow("Ctrl+C")} to stop the server`),g.gray(` \u2022 Visit ${g.cyan(o)} to view your site`),g.gray(" \u2022 Check the console for live reload updates"),""].forEach(u=>i.info(u))}async function zt(t){let e=process.platform,r;switch(e){case"darwin":r=`open "${t}"`;break;case"win32":r=`start "${t}"`;break;default:r=`xdg-open "${t}"`;break}try{await Gt(r)}catch(n){throw new Error(`Failed to open browser: ${n.message}`)}}import{ServiceProvider as Vt,definitionType as Kt}from"@jucie.io/engine";var Te=class extends Vt{static manifest={name:"Server",namespace:"server",version:"1.0.0"};#n=[];#t=null;#r={onRequest:null,preHandler:null,onSend:null,onError:null};#e=!1;#s={};#a=[];actions(e){return{use:(...r)=>(this.#a.push(...r),this),add:(r,n,i,a={})=>{this.#o(null,r,n,i,a)},useAdapter:r=>(this.#t=r,this),hooks:r=>(this.#r={...this.#r,...r},this),listen:async(r={})=>{this.#s={...this.config,...r},this.#e=!0,this.#p();let n=e("relay"),i=this.#s.port||3e3,a=this.#s.host||"0.0.0.0",o=e("log"),s=new W;if(s.hooks(this.#r),s.registerRoutes(this.#n),s.registerRoutes([{method:"GET",path:"/health",handler:u=>u.respond.json({status:"ok",timestamp:new Date().toISOString(),mode:this.#s.mode||"production"})},{method:"GET",path:"/api/info",handler:u=>u.respond.json({name:"Info",version:"1.0.0",mode:this.#s.mode||"production",routes:this.#n.length})}]),this.#s.outputDir&&s.setStaticFallback(this.#s.outputDir,(u,d)=>this.#f(u,d)),!this.#t)if(this.#s.adapter==="express"||this.#s.middleware?.length>0){let{ExpressAdapter:u}=await Promise.resolve().then(()=>(Ie(),je));this.#t=u.create(),o.debug("Using Express adapter for middleware support")}else this.#t=Y.create(),o.debug("Using HTTP adapter");await this.#t.initialize(s,this.#s,o),typeof this.#t.registerKernelHandler=="function"&&this.#t.registerKernelHandler(this.#s);let l=await this.#t.start({port:i,host:a}),h=l.address()?.port||i;return await gt({port:h,host:a,mode:this.#s.mode||"production",open:this.#s.open},o),n.broadcast("server:ready",l),l},getRoutes:()=>this.#n,clearRoutes:()=>{this.#n=[]},stop:async()=>{this.#t&&await this.#t.stop()},isRunning:()=>this.#t&&this.#t.isRunning(),getHttpServer:()=>this.#t?this.#t.getHttpServer():null}}#o(e="",r,n,i,a={},o=[]){if(e&&(n=e+n),Array.isArray(o))for(let s of o)typeof s=="function"?this.#e?this.#c(s):this.#a.push(s):this.#o(n,s.method,s.path,s.handler,s.meta,s.children);else typeof o=="function"&&(this.#e?this.#c(o):this.#a.push(o));this.#n.push({method:r.toUpperCase(),path:n,handler:i,meta:a})}#p(){this.#e&&this.#a.length!==0&&(this.#c(...this.#a),this.#a=[])}#c(...e){try{for(let r of e){let n=Kt(r);switch(n){case"routes":let i=r(this.useContext,this.#s);if(Array.isArray(i))for(let l of i)this.#o(null,l.method,l.path,l.handler,l.meta,l.children);else throw new Error("Routes must be an array");break;case"route":let a=r(this.useContext,this.#s);if(typeof a=="object"&&a!==null)this.#o(null,a.method,a.path,a.handler,a.meta,a.children);else throw new Error("Route must be an object");break;case"hooks":let o=r(this.useContext,this.#s);if(typeof o=="object"&&o!==null)this.#r={...this.#r,...o};else throw new Error("Hooks must be an object");break;case"hook":let s=r(this.useContext,this.#s);if(typeof s=="function")this.#r={...this.#r,...s};else throw new Error("Hook must be a function");break;default:throw new Error(`Invalid factory type: ${n}`)}}}catch(r){throw console.error(`
|
|
6
|
-
\u274C Error using factories: ${r.message}
|
|
7
|
-
`),r}}async#f(e,r){let n=await import("fs/promises"),i=await import("path");try{let a=e.req.path==="/"?"/index.html":e.req.path,o=i.join(r,a),s;try{s=await n.stat(o)}catch{if(i.extname(a))return e.respond.text("Not Found",404);{let u=i.join(r,`${a}.html`);try{s=await n.stat(u),o=u}catch{return e.respond.text("Not Found",404)}}}if(s.isFile()){let l=i.extname(o),h=this.#i(l),u=await n.readFile(o);return h==="text/html"?e.respond.html(u.toString(),200):h==="text/css"?e.respond.text(u.toString(),200,{"Content-Type":"text/css"}):h==="application/javascript"?e.respond.text(u.toString(),200,{"Content-Type":"application/javascript"}):h.startsWith("text/")?e.respond.text(u.toString(),200,{"Content-Type":h}):e.respond.file(o,200,{"Content-Type":h})}else return e.respond.text("Not Found",404)}catch{return e.respond.text("Not Found",404)}}#i(e){return{".html":"text/html",".css":"text/css",".js":"application/javascript",".json":"application/json",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".ico":"image/x-icon",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".eot":"application/vnd.ms-fontobject"}[e.toLowerCase()]||"application/octet-stream"}};import{createDefinition as yt}from"@jucie.io/engine";var Wt=yt("routes",[Array]),Yt=yt("route",[Object]);import{createDefinition as wt}from"@jucie.io/engine";var qt=wt("hooks",[Object]),Xt=wt("hook",[Function]);export{Te as Server,Xt as defineHook,qt as defineHooks,Yt as defineRoute,Wt as defineRoutes};
|
|
1
|
+
var I=Object.defineProperty;var g=(a,e)=>()=>(a&&(e=a(a=0)),e);var U=(a,e)=>{for(var t in e)I(a,t,{get:e[t],enumerable:!0})};async function E(a){return new Promise(e=>{if(a.method==="GET"||a.method==="HEAD"){e(null);return}let t=a.headers["content-type"]||"",r="";a.on("data",s=>{r+=s.toString()}),a.on("end",()=>{try{t.includes("application/json")?e(r?JSON.parse(r):{}):t.includes("application/x-www-form-urlencoded")?e(N(r)):t.includes("multipart/form-data")?e({raw:r}):e(r||null)}catch{e(null)}}),a.on("error",()=>{e(null)})})}function N(a){let e={},t=a.split("&");for(let r of t){let[s,n]=r.split("=");if(s){let i=decodeURIComponent(s),o=n?decodeURIComponent(n):"";if(i.endsWith("[]")){let l=i.slice(0,-2);e[l]||(e[l]=[]),e[l].push(o)}else e[i]=o}}return e}function S(a){let e={};for(let[t,r]of a.entries())if(t.endsWith("[]")||/\[\d*\]$/.test(t)){let s=t.replace(/\[\d*\]$/,"").replace("[]","");e[s]||(e[s]=[]),e[s].push(r)}else e[t]=r;return e}var x=g(()=>{});var f,k,$,H,m,b=g(()=>{x();f=class{static create(e){return new this(e)}constructor(e){this.name=e,this.server=null,this.kernel=null,this.log=null,this.hooks=null}async initialize(e,t={},r=null){if(this.kernel=e,this.opts=t,this.log=r,t.middleware&&!Array.isArray(t.middleware))throw new Error("opts.middleware must be an array")}async start(e){throw new Error(`start() must be implemented by ${this.name} adapter`)}async stop(){throw new Error(`stop() must be implemented by ${this.name} adapter`)}getHttpServer(){return this.server}isRunning(){return this.server!==null}async handleRequest(e,t){throw new Error(`handleRequest() must be implemented by ${this.name} adapter`)}createContext(e,t){let r=new URL(e.url||e.originalUrl,`http://${e.headers.host}`);return{req:{method:e.method,url:r.toString(),path:r.pathname,headers:Object.fromEntries(Object.entries(e.headers).map(([s,n])=>[s.toLowerCase(),n])),query:e.query||S(r.searchParams),body:e.body||null,raw:{req:e,res:t},params:{}},res:t,respond:new m}}async sendResponse(e,t,r=!1){let s=t??{type:"text",status:204,headers:{},body:""};if(s.type!=="handled"&&!e.headersSent){if(e.statusCode=s.status??200,s.headers)for(let[n,i]of Object.entries(s.headers))e.setHeader(n.toLowerCase(),i);if(r)return e.end();switch(s.type){case"json":return e.getHeader("content-type")||e.setHeader("content-type","application/json; charset=utf-8"),e.end(JSON.stringify(s.body));case"text":return e.getHeader("content-type")||e.setHeader("content-type","text/plain; charset=utf-8"),e.end(s.body??"");case"html":return e.getHeader("content-type")||e.setHeader("content-type","text/html; charset=utf-8"),e.end(s.body??"");case"file":return await this.serveFile(e,s.path);case"stream":{let n=s.body;if(!n)return e.end();if(typeof n.pipe=="function")return n.pipe(e);if(Symbol.asyncIterator in Object(n)){for await(let i of n)e.write(i)||await new Promise(o=>e.once("drain",o));return e.end()}return e.end(n)}default:return e.end("")}}}async serveFile(e,t){let r=await import("node:fs"),s=await import("node:fs/promises"),n=await import("node:path"),{pipeline:i}=await import("node:stream"),{promisify:o}=await import("node:util"),l=o(i),p={".html":"text/html; charset=utf-8",".css":"text/css; charset=utf-8",".js":"application/javascript; charset=utf-8",".mjs":"application/javascript; charset=utf-8",".json":"application/json; charset=utf-8",".svg":"image/svg+xml",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".ico":"image/x-icon",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".eot":"application/vnd.ms-fontobject"};try{let c=await s.stat(t);if(!c.isFile())return e.statusCode=404,e.setHeader("content-type","text/plain; charset=utf-8"),e.end("Not Found");let h=n.extname(t).toLowerCase();e.getHeader("content-type")||e.setHeader("content-type",p[h]??"application/octet-stream"),e.setHeader("content-length",String(c.size));let u=r.createReadStream(t);u.on("error",()=>{e.headersSent||(e.statusCode=404),e.end("Not Found")}),await l(u,e)}catch{e.headersSent||(e.statusCode=404,e.setHeader("content-type","text/plain; charset=utf-8")),e.end("Not Found")}}async handleError(e,t){this.log?.error?.("Request handling error:",t),e.headersSent||(e.statusCode=500,e.setHeader("content-type","text/plain; charset=utf-8"),e.end("Internal Server Error"))}},k=class{constructor(e,t,r,s={}){this.method=e.toUpperCase(),this.path=t,this.handler=r,this.options=s,this.params=s.params||[]}},$=class{constructor(){this.onRequest=null,this.preHandler=null,this.onSend=null,this.onError=null}},H=class{constructor(e,t,r,s){this.req=e,this.res=t,this.state=r,this.cache=s,this.respond=new m}},m=class{handled(){return{type:"handled"}}json(e,t=200,r={}){return{type:"json",status:t,headers:r,body:e}}text(e,t=200,r={}){return{type:"text",status:t,headers:r,body:e}}html(e,t=200,r={}){return{type:"html",status:t,headers:r,body:e}}file(e,t=200,r={}){return{type:"file",status:t,headers:r,path:e}}stream(e,t=200,r={}){return{type:"stream",status:t,headers:r,body:e}}redirect(e,t=302,r={}){return{type:"text",status:t,headers:{...r,location:e},body:""}}}});var C={};U(C,{ExpressAdapter:()=>v});var v,A=g(()=>{b();v=class extends f{#r=new Set;constructor(e=null){super("express"),this.express=e,this.app=null}async initialize(e,t={},r=null){if(await super.initialize(e,t,r),!this.express)try{this.express=await import("express"),this.express=this.express.default}catch{throw new Error("Express not installed. Run: npm install express")}this.app=this.express();let s=t.middleware||[];if((!s.length||!this.#n(s))&&(this.app.use(this.express.json()),this.app.use(this.express.urlencoded({extended:!0}))),s.length>0){this.log?.info(`Applying ${s.length} middleware functions`);for(let[n,i]of s.entries())try{this.app.use(i),this.log?.debug(`Applied middleware ${n+1}/${s.length}`)}catch(o){throw new Error(`Failed to apply middleware[${n}]: ${o.message}`)}}}registerKernelHandler(){this.app&&this.app.use(async(e,t,r)=>{t.headersSent||await this.handleRequest(e,t)})}getExpressApp(){return this.app}async start({port:e=3e3,host:t="0.0.0.0"}={}){return new Promise((r,s)=>{this.server=this.app.listen(e,t,n=>{n?s(n):(this.server.on("connection",i=>{this.#r.add(i),i.on("close",()=>{this.#r.delete(i)})}),this.log?.info(`Express Server with middleware listening on http://${t}:${e}`),r(this.server))})})}async stop(){if(this.server?.close){for(let e of this.#r)e.destroy();return this.#r.clear(),new Promise(e=>{this.server.close(()=>{this.log?.info("Express Server stopped"),e()})})}}async handleRequest(e,t){if(!t.headersSent)try{let r=this.createContext(e,t),s=await this.kernel.handle(r);await this.sendResponse(t,s,e.method==="HEAD")}catch(r){await this.handleError(t,r)}}#n(e){return e.some(t=>{let r=t.name?.toLowerCase()||t.toString().toLowerCase();return r.includes("json")||r.includes("urlencoded")||r.includes("bodyparser")})}}});import"urlpattern-polyfill";function F(a){let e=new URLPattern({pathname:a});return t=>e.exec({pathname:t})?.pathname.groups??null}function z(a){let e=/:([a-zA-Z_][a-zA-Z0-9_]*)(\?)?(\*)?/g,t=[],r;for(;(r=e.exec(a))!==null;){let[,s,n,i]=r;t.push({name:s,optional:!!n,splat:!!i,fullMatch:r[0]})}return a.includes("*")&&!a.includes(":*")&&t.push({name:"wild",optional:!1,splat:!0,fullMatch:"*"}),t}function oe(a,e={},t={}){let{strict:r=!0,encode:s=!0,defaultValue:n=""}=t,i=a,o=z(a);for(let l of o){let{name:p,optional:c,fullMatch:h}=l,u=e[p];if(u==null)if(c){i=i.replace(`/${h}`,"").replace(h,"");continue}else{if(r)throw new Error(`Missing required route parameter: ${p}`);u=n}let j=String(u),O=s?encodeURIComponent(j):j;i=i.replace(h,O)}return i=i.replace(/\/+/g,"/"),i}var y=class{#r=[];#n=[];#t={onRequest:null,preHandler:null,onSend:null,onError:null};#s=null;constructor(){}registerRoutes(e){for(let t of e)this.registerRoute(t)}registerRoute(e){let t={...e,match:F(e.path)};this.#r.push(t)}setAppHandlers(e=[]){this.#n=Array.isArray(e)?e:[]}async cleanupAppHandlers(){for(let e of this.#n)e?.cleanup&&await e.cleanup();this.#n=[]}hooks(e){Object.assign(this.#t,e)}setStaticFallback(e,t){this.#s={outputDir:e,handler:t}}async handle(e){let t;try{let r=await this.#t.onRequest?.(e);if(r)return t=r,t;for(let o of this.#n)try{if(!o?.match||!o?.handle)continue;if(await o.match(e.req)){let l=await o.handle(e);if(l)return t=l,t}}catch(l){return t=await this.#t.onError?.(e,l)??e.respond.text("Internal Server Error",500),t}let s=null,n=this.#r.find(o=>{if(o.method!==e.req.method)return!1;let l=o.match(e.req.path);return l?(s=l,!0):!1});if(!n){if(this.#s){let o=await this.#s.handler(e,this.#s.outputDir);t=o&&o.status!==404?o:e.respond.text("Not Found",404)}else t=e.respond.text("Not Found",404);return t}e.req.params=s||{};let i=await this.#t.preHandler?.(e,n);if(i)return t=i,t;t=await n.handler(e)}catch(r){t=await this.#t.onError?.(e,r)??e.respond.text("Internal Server Error",500)}finally{await this.#t.onSend?.(e,t)}return t??e.respond.text("",204)}getRoutes(){return this.#r.map(e=>({method:e.method,path:e.path,params:e.params||[],compiled:!0}))}};b();x();import D from"node:http";var w=class extends f{#r=new Set;constructor(){super("http")}async initialize(e,t={},r=null){await super.initialize(e,t,r),t.middleware?.length>0&&(r?.warn('Middleware configured but HTTP adapter selected. Consider using adapter: "express" for full middleware support.'),r?.info("HTTP adapter will simulate middleware using hooks for basic compatibility."))}async start({port:e=3e3,host:t="0.0.0.0"}={}){return this.server=D.createServer(async(r,s)=>{try{if(this.opts.middleware?.length>0&&!await this.#n(r,s,this.opts.middleware))return;r.body||(r.body=await E(r));let n=this.createContext(r,s),i=await this.kernel.handle(n);await this.sendResponse(s,i,r.method==="HEAD")}catch(n){await this.handleError(s,n)}}),this.server.on("connection",r=>{this.#r.add(r),r.on("close",()=>{this.#r.delete(r)})}),await new Promise((r,s)=>this.server.listen(e,t,n=>n?s(n):r())),this.log?.info?.(`HTTP Server listening on http://${t}:${e}`),this.server}async stop(){if(this.server){for(let e of this.#r)e.destroy();this.#r.clear(),await new Promise(e=>this.server.close(()=>e())),this.server=null}}async#n(e,t,r){for(let s of r)try{let n=!1,i=o=>{if(o)throw o;n=!0};if(t.json||(t.json=o=>(t.setHeader("Content-Type","application/json"),t.end(JSON.stringify(o)),!1)),await s(e,t,i),!n&&t.headersSent)return!1}catch(n){return this.log?.error(`Middleware simulation error: ${n.message}`),t.statusCode=500,t.end("Internal Server Error"),!1}return!0}};import d from"chalk";import{exec as L}from"child_process";import{promisify as B}from"util";var K=B(L);async function P({port:a,host:e,mode:t,open:r},s){let i=`${t==="production"?"https":"http"}://${e==="0.0.0.0"?"localhost":e}:${a}`;["",d.bold.green("\u{1F680} Server Ready! \u{1F680}"),"",` ${d.gray("Mode")} ${d.white(t.toUpperCase())}`,` ${d.gray("URL")} ${d.cyan.underline(i)}`,` ${d.gray("Host")} ${d.white(e)}:${d.white(a)}`,""].forEach(c=>s.info(c));let l=r!==void 0?r:t==="development";if(l!==!1){let c=typeof l=="string"?l:i;try{await _(c),s.info(d.green("\u{1F310} Browser opened automatically"))}catch(h){s.debug("Could not open browser automatically:",h.message)}}["",d.gray("\u{1F4A1} Quick Commands:"),d.gray(` \u2022 Press ${d.yellow("Ctrl+C")} to stop the server`),d.gray(` \u2022 Visit ${d.cyan(i)} to view your site`),d.gray(" \u2022 Check the console for live reload updates"),""].forEach(c=>s.info(c))}async function _(a){let e=process.platform,t;switch(e){case"darwin":t=`open "${a}"`;break;case"win32":t=`start "${a}"`;break;default:t=`xdg-open "${a}"`;break}try{await K(t)}catch(r){throw new Error(`Failed to open browser: ${r.message}`)}}import{ServiceProvider as q,definitionType as V}from"@jucie.io/engine";var R=class extends q{static manifest={name:"Server",namespace:"server",version:"1.0.0"};#r=[];#n=[];#t=null;#s={onRequest:null,preHandler:null,onSend:null,onError:null};#i=!1;#e={};#o=[];actions(e){return{use:(...t)=>(this.#o.push(...t),this),add:(t,r,s,n={})=>{this.#a(null,t,r,s,n)},useAdapter:t=>(this.#t=t,this),hooks:t=>(this.#s={...this.#s,...t},this),listen:async(t={})=>{if(this.#e={...this.config,...t},this.#i=!0,this.#h(),this.#e.middleware&&!Array.isArray(this.#e.middleware))throw new Error("opts.middleware must be an array");let r=[...this.#e.middleware||[],...this.#n];this.#e.middleware=r.length>0?r:void 0;let s=e("relay"),n=this.#e.port||3e3,i=this.#e.host||"0.0.0.0",o=e("log"),l=new y;if(l.hooks(this.#s),l.registerRoutes(this.#r),l.registerRoutes([{method:"GET",path:"/health",handler:h=>h.respond.json({status:"ok",timestamp:new Date().toISOString(),mode:this.#e.mode||"production"})},{method:"GET",path:"/api/info",handler:h=>h.respond.json({name:"Info",version:"1.0.0",mode:this.#e.mode||"production",routes:this.#r.length})}]),this.#e.outputDir&&l.setStaticFallback(this.#e.outputDir,(h,u)=>this.#p(h,u)),!this.#t)if(this.#e.adapter==="express"||this.#e.middleware?.length>0){let{ExpressAdapter:h}=await Promise.resolve().then(()=>(A(),C));this.#t=h.create(),o.debug("Using Express adapter for middleware support")}else this.#t=w.create(),o.debug("Using HTTP adapter");await this.#t.initialize(l,this.#e,o),typeof this.#t.registerKernelHandler=="function"&&this.#t.registerKernelHandler(this.#e);let p=await this.#t.start({port:n,host:i}),c=p.address()?.port||n;return await P({port:c,host:i,mode:this.#e.mode||"production",open:this.#e.open},o),s.broadcast("server:ready",p),p},getRoutes:()=>this.#r,clearRoutes:()=>{this.#r=[]},stop:async()=>{this.#t&&await this.#t.stop()},isRunning:()=>this.#t&&this.#t.isRunning(),getHttpServer:()=>this.#t?this.#t.getHttpServer():null}}#c(e){return("/"+e).replace(/\/\/+/g,"/").replace(/\/+$/,"")||"/"}#a(e="",t,r,s,n={},i=[]){if(e&&(r=this.#c(e+"/"+r)),Array.isArray(i))for(let o of i)typeof o=="function"?this.#i?this.#l(o):this.#o.push(o):this.#a(r,o.method,o.path,o.handler,o.meta,o.children);else typeof i=="function"&&(this.#i?this.#l(i):this.#o.push(i));this.#r.push({method:t.toUpperCase(),path:r,handler:s,meta:n})}#h(){this.#i&&this.#o.length!==0&&(this.#l(...this.#o),this.#o=[])}#l(...e){try{for(let t of e){let r=V(t);switch(r){case"routes":let s=t._name?`/${t._name}`:null,n=t(this.useContext,this.#e);if(Array.isArray(n))for(let h of n)this.#a(s,h.method,h.path,h.handler,h.meta,h.children);else throw new Error("Routes must be an array");break;case"route":let i=t._name?`/${t._name}`:null,o=t(this.useContext,this.#e);if(typeof o=="object"&&o!==null)this.#a(i,o.method,o.path,o.handler,o.meta,o.children);else throw new Error("Route must be an object");break;case"hooks":let l=t(this.useContext,this.#e);if(typeof l=="object"&&l!==null)this.#s={...this.#s,...l};else throw new Error("Hooks must be an object");break;case"hook":let p=t(this.useContext,this.#e);if(typeof p=="function")this.#s={...this.#s,...p};else throw new Error("Hook must be a function");break;case"middleware":let c=t(this.useContext,this.#e);if(Array.isArray(c))this.#n.push(...c);else throw new Error("Middleware must be an array");break;default:throw new Error(`Invalid factory type: ${r}`)}}}catch(t){throw console.error(`
|
|
2
|
+
\u274C Error using factories: ${t.message}
|
|
3
|
+
`),t}}async#p(e,t){let r=await import("fs/promises"),s=await import("path");try{let n=e.req.path==="/"?"/index.html":e.req.path,i=s.join(t,n),o;try{o=await r.stat(i)}catch{if(s.extname(n))return e.respond.text("Not Found",404);{let c=s.join(t,`${n}.html`);try{o=await r.stat(c),i=c}catch{return e.respond.text("Not Found",404)}}}if(o.isFile()){let l=s.extname(i),p=this.#d(l),c=await r.readFile(i);return p==="text/html"?e.respond.html(c.toString(),200):p==="text/css"?e.respond.text(c.toString(),200,{"Content-Type":"text/css"}):p==="application/javascript"?e.respond.text(c.toString(),200,{"Content-Type":"application/javascript"}):p.startsWith("text/")?e.respond.text(c.toString(),200,{"Content-Type":p}):e.respond.file(i,200,{"Content-Type":p})}else return e.respond.text("Not Found",404)}catch{return e.respond.text("Not Found",404)}}#d(e){return{".html":"text/html",".css":"text/css",".js":"application/javascript",".json":"application/json",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".ico":"image/x-icon",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".eot":"application/vnd.ms-fontobject"}[e.toLowerCase()]||"application/octet-stream"}};import{createDefinition as T}from"@jucie.io/engine";var G=T("routes",[Array]),J=T("route",[Object]);import{createDefinition as M}from"@jucie.io/engine";var Q=M("hooks",[Object]),W=M("hook",[Function]);import{createDefinition as Z}from"@jucie.io/engine";var X=Z("middleware",[Array]);export{R as Server,W as defineHook,Q as defineHooks,X as defineMiddleware,J as defineRoute,G as defineRoutes};
|
|
8
4
|
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/utils/httpParsing.js", "../src/adapters/AdapterInterface.js", "../src/adapters/ExpressAdapter.js", "
|
|
4
|
-
"sourcesContent": ["/**\n * HTTP parsing utilities for request body and query parameters\n */\n\n/**\n * Parse request body based on content type\n * @param {Object} req - Node.js request object\n * @returns {Object|null} Parsed body object or null\n */\nexport async function parseBody(req) {\n return new Promise((resolve) => {\n if (req.method === 'GET' || req.method === 'HEAD') {\n resolve(null);\n return;\n }\n\n const contentType = req.headers['content-type'] || '';\n let body = '';\n\n req.on('data', chunk => {\n body += chunk.toString();\n });\n\n req.on('end', () => {\n try {\n if (contentType.includes('application/json')) {\n resolve(body ? JSON.parse(body) : {});\n } else if (contentType.includes('application/x-www-form-urlencoded')) {\n resolve(parseUrlEncoded(body));\n } else if (contentType.includes('multipart/form-data')) {\n // For now, just return the raw body for multipart\n // Could be enhanced with proper multipart parsing\n resolve({ raw: body });\n } else {\n resolve(body || null);\n }\n } catch (error) {\n resolve(null);\n }\n });\n\n req.on('error', () => {\n resolve(null);\n });\n });\n}\n\n/**\n * Parse URL-encoded form data\n * @param {string} data - URL-encoded string\n * @returns {Object} Parsed object\n */\nfunction parseUrlEncoded(data) {\n const result = {};\n const pairs = data.split('&');\n \n for (const pair of pairs) {\n const [key, value] = pair.split('=');\n if (key) {\n const decodedKey = decodeURIComponent(key);\n const decodedValue = value ? decodeURIComponent(value) : '';\n \n // Handle arrays (key[] or key[0])\n if (decodedKey.endsWith('[]')) {\n const arrayKey = decodedKey.slice(0, -2);\n if (!result[arrayKey]) result[arrayKey] = [];\n result[arrayKey].push(decodedValue);\n } else {\n result[decodedKey] = decodedValue;\n }\n }\n }\n \n return result;\n}\n\n/**\n * Parse query parameters from URLSearchParams\n * @param {URLSearchParams} searchParams - URL search parameters\n * @returns {Object} Parsed query object with support for arrays\n */\nexport function parseQuery(searchParams) {\n const result = {};\n \n for (const [key, value] of searchParams.entries()) {\n // Handle array parameters (key[] or key[0])\n if (key.endsWith('[]') || /\\[\\d*\\]$/.test(key)) {\n const arrayKey = key.replace(/\\[\\d*\\]$/, '').replace('[]', '');\n if (!result[arrayKey]) result[arrayKey] = [];\n result[arrayKey].push(value);\n } else {\n result[key] = value;\n }\n }\n \n return result;\n}\n", "/**\n * Server Adapter Interface\n * \n * This defines the contract that all HTTP server adapters must implement.\n * The Server kernel uses this interface to delegate HTTP handling to\n * any compatible adapter (Express, Fastify, Node HTTP, etc.)\n */\nimport { parseQuery } from '../utils/httpParsing.js';\n\n/**\n * Adapter Interface - All adapters must implement this\n */\nexport class AdapterInterface {\n static create(name) {\n return new this(name);\n }\n\n constructor(name) {\n this.name = name;\n this.server = null;\n this.kernel = null;\n this.log = null;\n this.hooks = null;\n }\n\n /**\n * Initialize the adapter with kernel and context\n * @param {Object} kernel - Server kernel instance\n * @param {Object} opts - Configuration options (including middleware)\n * @param {Object} log - Server logger\n */\n async initialize(kernel, opts = {}, log = null) {\n this.kernel = kernel;\n this.opts = opts;\n this.log = log;\n \n // Validate options\n if (opts.middleware && !Array.isArray(opts.middleware)) {\n throw new Error('opts.middleware must be an array');\n }\n }\n\n /**\n * Start the HTTP server\n * @param {Object} options - Server options (port, host, etc.)\n * @returns {Promise<Object>} - Server instance\n */\n async start(options) {\n throw new Error(`start() must be implemented by ${this.name} adapter`);\n }\n\n /**\n * Stop the HTTP server\n * @returns {Promise<void>}\n */\n async stop() {\n throw new Error(`stop() must be implemented by ${this.name} adapter`);\n }\n\n /**\n * Get the underlying HTTP server instance\n * Used by services like LiveReload for Socket.IO integration\n * @returns {Object|null} - HTTP server instance\n */\n getHttpServer() {\n return this.server;\n }\n\n /**\n * Check if the server is currently running\n * @returns {boolean}\n */\n isRunning() {\n return this.server !== null;\n }\n\n /**\n * Handle a request through the adapter\n * @param {Object} req - HTTP request\n * @param {Object} res - HTTP response\n * @returns {Promise<void>}\n */\n async handleRequest(req, res) {\n throw new Error(`handleRequest() must be implemented by ${this.name} adapter`);\n }\n\n /**\n * Create standardized context object from request\n * @param {Object} req - HTTP request\n * @param {Object} res - HTTP response\n * @returns {Object} - Standardized context object\n */\n createContext(req, res) {\n const url = new URL(req.url || req.originalUrl, `http://${req.headers.host}`);\n\n return {\n req: {\n method: req.method,\n url: url.toString(),\n path: url.pathname,\n headers: Object.fromEntries(\n Object.entries(req.headers).map(([k, v]) => [k.toLowerCase(), v])\n ),\n query: req.query || parseQuery(url.searchParams),\n body: req.body || null,\n raw: { req, res },\n params: {}\n },\n res,\n respond: new RespondHelpers(),\n };\n }\n\n /**\n * Send response using standardized response format\n * @param {Object} res - HTTP response\n * @param {Object} response - Response object from route handler\n * @param {boolean} isHead - Whether this is a HEAD request\n * @returns {Promise<void>}\n */\n async sendResponse(res, response, isHead = false) {\n // Default to 204 if no response object was returned\n const resp = response ?? { type: 'text', status: 204, headers: {}, body: '' };\n\n if (resp.type === 'handled') {\n return;\n }\n\n if (res.headersSent) return; // defensive guard\n\n // Set status and headers (normalize keys)\n res.statusCode = resp.status ?? 200;\n if (resp.headers) {\n for (const [k, v] of Object.entries(resp.headers)) {\n res.setHeader(k.toLowerCase(), v);\n }\n }\n\n // Respect HEAD requests: send headers only\n if (isHead) {\n return res.end();\n }\n\n switch (resp.type) {\n case 'json': {\n if (!res.getHeader('content-type')) {\n res.setHeader('content-type', 'application/json; charset=utf-8');\n }\n return res.end(JSON.stringify(resp.body));\n }\n\n case 'text': {\n if (!res.getHeader('content-type')) {\n res.setHeader('content-type', 'text/plain; charset=utf-8');\n }\n return res.end(resp.body ?? '');\n }\n\n case 'html': {\n if (!res.getHeader('content-type')) {\n res.setHeader('content-type', 'text/html; charset=utf-8');\n }\n return res.end(resp.body ?? '');\n }\n\n case 'file': {\n return await this.serveFile(res, resp.path);\n }\n\n case 'stream': {\n const b = resp.body;\n if (!b) return res.end();\n // Node stream\n if (typeof b.pipe === 'function') return b.pipe(res);\n // AsyncIterable\n if (Symbol.asyncIterator in Object(b)) {\n for await (const chunk of b) {\n if (!res.write(chunk)) {\n await new Promise(r => res.once('drain', r));\n }\n }\n return res.end();\n }\n // Fallback\n return res.end(b);\n }\n\n default:\n return res.end('');\n }\n }\n\n /**\n * Serve static files with proper MIME types and streaming\n * @param {Object} res - HTTP response\n * @param {string} filePath - Path to file to serve\n * @returns {Promise<void>}\n */\n async serveFile(res, filePath) {\n const fs = await import('node:fs');\n const fsp = await import('node:fs/promises');\n const path = await import('node:path');\n const { pipeline } = await import('node:stream');\n const { promisify } = await import('node:util');\n \n const pipelineAsync = promisify(pipeline);\n\n const MIME = {\n '.html': 'text/html; charset=utf-8',\n '.css': 'text/css; charset=utf-8',\n '.js': 'application/javascript; charset=utf-8',\n '.mjs': 'application/javascript; charset=utf-8',\n '.json': 'application/json; charset=utf-8',\n '.svg': 'image/svg+xml',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.gif': 'image/gif',\n '.ico': 'image/x-icon',\n '.woff': 'font/woff',\n '.woff2': 'font/woff2',\n '.ttf': 'font/ttf',\n '.eot': 'application/vnd.ms-fontobject'\n };\n\n try {\n const st = await fsp.stat(filePath);\n if (!st.isFile()) {\n res.statusCode = 404;\n res.setHeader('content-type', 'text/plain; charset=utf-8');\n return res.end('Not Found');\n }\n\n const ext = path.extname(filePath).toLowerCase();\n if (!res.getHeader('content-type')) {\n res.setHeader('content-type', MIME[ext] ?? 'application/octet-stream');\n }\n res.setHeader('content-length', String(st.size));\n\n const rs = fs.createReadStream(filePath);\n rs.on('error', () => {\n if (!res.headersSent) res.statusCode = 404;\n res.end('Not Found');\n });\n await pipelineAsync(rs, res); // backpressure-aware piping\n } catch {\n if (!res.headersSent) {\n res.statusCode = 404;\n res.setHeader('content-type', 'text/plain; charset=utf-8');\n }\n res.end('Not Found');\n }\n }\n\n /**\n * Handle request errors consistently\n * @param {Object} res - HTTP response\n * @param {Error} error - Error that occurred\n * @returns {Promise<void>}\n */\n async handleError(res, error) {\n this.log?.error?.('Request handling error:', error);\n if (!res.headersSent) {\n res.statusCode = 500;\n res.setHeader('content-type', 'text/plain; charset=utf-8');\n res.end('Internal Server Error');\n }\n }\n}\n\n/**\n * Route object structure that adapters receive from Server kernel\n */\nexport class ServerRoute {\n constructor(method, path, handler, options = {}) {\n this.method = method.toUpperCase();\n this.path = path;\n this.handler = handler;\n this.options = options;\n this.params = options.params || [];\n }\n}\n\n/**\n * Hook object structure for lifecycle management\n */\nexport class ServerHooks {\n constructor() {\n this.onRequest = null;\n this.preHandler = null;\n this.onSend = null;\n this.onError = null;\n }\n}\n\n/**\n * Context object passed to route handlers\n */\nexport class ServerContext {\n constructor(req, res, state, cache) {\n this.req = req;\n this.res = res;\n this.state = state;\n this.cache = cache;\n this.respond = new RespondHelpers();\n }\n}\n\n/**\n * Response helpers for route handlers\n */\nexport class RespondHelpers {\n handled() {\n return { type: 'handled' };\n }\n\n json(data, status = 200, headers = {}) {\n return { type: 'json', status, headers, body: data };\n }\n\n text(data, status = 200, headers = {}) {\n return { type: 'text', status, headers, body: data };\n }\n\n html(data, status = 200, headers = {}) {\n return { type: 'html', status, headers, body: data };\n }\n\n file(path, status = 200, headers = {}) {\n return { type: 'file', status, headers, path };\n }\n\n stream(body, status = 200, headers = {}) {\n return { type: 'stream', status, headers, body };\n }\n\n redirect(location, status = 302, headers = {}) {\n return { type:'text', status, headers: { ...headers, location }, body: '' };\n }\n}\n", "/**\n * Express adapter for Server with full middleware support\n */\nimport { AdapterInterface } from './AdapterInterface.js';\n\nexport class ExpressAdapter extends AdapterInterface {\n #connections = new Set();\n\n constructor(express = null) {\n super('express');\n this.express = express;\n this.app = null;\n }\n\n async initialize(kernel, opts = {}, log = null) {\n await super.initialize(kernel, opts, log);\n \n // Import Express\n if (!this.express) {\n try {\n this.express = await import('express');\n this.express = this.express.default;\n } catch (error) {\n throw new Error('Express not installed. Run: npm install express');\n }\n }\n\n // Create Express app\n this.app = this.express();\n\n // Apply default middleware (can be overridden by user middleware)\n if (!opts.middleware || !this.#hasBodyParser(opts.middleware)) {\n this.app.use(this.express.json());\n this.app.use(this.express.urlencoded({ extended: true }));\n }\n\n // Apply user-defined middleware\n if (opts.middleware && Array.isArray(opts.middleware)) {\n this.log?.info(`Applying ${opts.middleware.length} middleware functions`);\n \n for (const [index, middleware] of opts.middleware.entries()) {\n try {\n this.app.use(middleware);\n this.log?.debug(`Applied middleware ${index + 1}/${opts.middleware.length}`);\n } catch (error) {\n throw new Error(`Failed to apply middleware[${index}]: ${error.message}`);\n }\n }\n }\n\n // Additional middleware will be mounted by the server before kernel handler registration\n }\n\n registerKernelHandler() {\n if (!this.app) return;\n\n this.app.use(async (req, res, next) => {\n if (res.headersSent) return;\n await this.handleRequest(req, res);\n });\n }\n\n getExpressApp() {\n return this.app;\n }\n\n async start({ port = 3000, host = '0.0.0.0' } = {}) {\n return new Promise((resolve, reject) => {\n this.server = this.app.listen(port, host, (err) => {\n if (err) {\n reject(err);\n } else {\n // Track connections for clean shutdown\n this.server.on('connection', (conn) => {\n this.#connections.add(conn);\n conn.on('close', () => {\n this.#connections.delete(conn);\n });\n });\n\n this.log?.info(`Express Server with middleware listening on http://${host}:${port}`);\n resolve(this.server);\n }\n });\n });\n }\n\n async stop() {\n if (this.server?.close) {\n // Destroy all active connections\n for (const conn of this.#connections) {\n conn.destroy();\n }\n this.#connections.clear();\n\n return new Promise((resolve) => {\n this.server.close(() => {\n this.log?.info('Express Server stopped');\n resolve();\n });\n });\n }\n }\n\n async handleRequest(req, res) {\n if (res.headersSent) return;\n try {\n // Create context from Express request\n const ctx = this.createContext(req, res);\n \n // Delegate to kernel for route matching and handling\n const response = await this.kernel.handle(ctx);\n \n // Send response using shared method\n await this.sendResponse(res, response, req.method === 'HEAD');\n\n } catch (error) {\n await this.handleError(res, error);\n }\n }\n\n /**\n * Check if middleware array contains body parser\n * @private\n */\n #hasBodyParser(middlewareArray) {\n return middlewareArray.some(mw => {\n // Check for common body parser middleware names\n const name = mw.name?.toLowerCase() || mw.toString().toLowerCase();\n return name.includes('json') || name.includes('urlencoded') || name.includes('bodyparser');\n });\n }\n}\n", "var Pe=Object.defineProperty;var a=(e,t)=>Pe(e,\"name\",{value:t,configurable:!0});var P=class{type=3;name=\"\";prefix=\"\";value=\"\";suffix=\"\";modifier=3;constructor(t,r,n,c,l,f){this.type=t,this.name=r,this.prefix=n,this.value=c,this.suffix=l,this.modifier=f}hasCustomName(){return this.name!==\"\"&&typeof this.name!=\"number\"}};a(P,\"Part\");var Re=/[$_\\p{ID_Start}]/u,Ee=/[$_\\u200C\\u200D\\p{ID_Continue}]/u,v=\".*\";function Oe(e,t){return(t?/^[\\x00-\\xFF]*$/:/^[\\x00-\\x7F]*$/).test(e)}a(Oe,\"isASCII\");function D(e,t=!1){let r=[],n=0;for(;n<e.length;){let c=e[n],l=a(function(f){if(!t)throw new TypeError(f);r.push({type:\"INVALID_CHAR\",index:n,value:e[n++]})},\"ErrorOrInvalid\");if(c===\"*\"){r.push({type:\"ASTERISK\",index:n,value:e[n++]});continue}if(c===\"+\"||c===\"?\"){r.push({type:\"OTHER_MODIFIER\",index:n,value:e[n++]});continue}if(c===\"\\\\\"){r.push({type:\"ESCAPED_CHAR\",index:n++,value:e[n++]});continue}if(c===\"{\"){r.push({type:\"OPEN\",index:n,value:e[n++]});continue}if(c===\"}\"){r.push({type:\"CLOSE\",index:n,value:e[n++]});continue}if(c===\":\"){let f=\"\",s=n+1;for(;s<e.length;){let i=e.substr(s,1);if(s===n+1&&Re.test(i)||s!==n+1&&Ee.test(i)){f+=e[s++];continue}break}if(!f){l(`Missing parameter name at ${n}`);continue}r.push({type:\"NAME\",index:n,value:f}),n=s;continue}if(c===\"(\"){let f=1,s=\"\",i=n+1,o=!1;if(e[i]===\"?\"){l(`Pattern cannot start with \"?\" at ${i}`);continue}for(;i<e.length;){if(!Oe(e[i],!1)){l(`Invalid character '${e[i]}' at ${i}.`),o=!0;break}if(e[i]===\"\\\\\"){s+=e[i++]+e[i++];continue}if(e[i]===\")\"){if(f--,f===0){i++;break}}else if(e[i]===\"(\"&&(f++,e[i+1]!==\"?\")){l(`Capturing groups are not allowed at ${i}`),o=!0;break}s+=e[i++]}if(o)continue;if(f){l(`Unbalanced pattern at ${n}`);continue}if(!s){l(`Missing pattern at ${n}`);continue}r.push({type:\"REGEX\",index:n,value:s}),n=i;continue}r.push({type:\"CHAR\",index:n,value:e[n++]})}return r.push({type:\"END\",index:n,value:\"\"}),r}a(D,\"lexer\");function F(e,t={}){let r=D(e);t.delimiter??=\"/#?\",t.prefixes??=\"./\";let n=`[^${x(t.delimiter)}]+?`,c=[],l=0,f=0,s=\"\",i=new Set,o=a(u=>{if(f<r.length&&r[f].type===u)return r[f++].value},\"tryConsume\"),h=a(()=>o(\"OTHER_MODIFIER\")??o(\"ASTERISK\"),\"tryConsumeModifier\"),p=a(u=>{let d=o(u);if(d!==void 0)return d;let{type:g,index:y}=r[f];throw new TypeError(`Unexpected ${g} at ${y}, expected ${u}`)},\"mustConsume\"),A=a(()=>{let u=\"\",d;for(;d=o(\"CHAR\")??o(\"ESCAPED_CHAR\");)u+=d;return u},\"consumeText\"),xe=a(u=>u,\"DefaultEncodePart\"),N=t.encodePart||xe,H=\"\",$=a(u=>{H+=u},\"appendToPendingFixedValue\"),M=a(()=>{H.length&&(c.push(new P(3,\"\",\"\",N(H),\"\",3)),H=\"\")},\"maybeAddPartFromPendingFixedValue\"),X=a((u,d,g,y,Z)=>{let m=3;switch(Z){case\"?\":m=1;break;case\"*\":m=0;break;case\"+\":m=2;break}if(!d&&!g&&m===3){$(u);return}if(M(),!d&&!g){if(!u)return;c.push(new P(3,\"\",\"\",N(u),\"\",m));return}let S;g?g===\"*\"?S=v:S=g:S=n;let k=2;S===n?(k=1,S=\"\"):S===v&&(k=0,S=\"\");let E;if(d?E=d:g&&(E=l++),i.has(E))throw new TypeError(`Duplicate name '${E}'.`);i.add(E),c.push(new P(k,E,N(u),S,N(y),m))},\"addPart\");for(;f<r.length;){let u=o(\"CHAR\"),d=o(\"NAME\"),g=o(\"REGEX\");if(!d&&!g&&(g=o(\"ASTERISK\")),d||g){let m=u??\"\";t.prefixes.indexOf(m)===-1&&($(m),m=\"\"),M();let S=h();X(m,d,g,\"\",S);continue}let y=u??o(\"ESCAPED_CHAR\");if(y){$(y);continue}if(o(\"OPEN\")){let m=A(),S=o(\"NAME\"),k=o(\"REGEX\");!S&&!k&&(k=o(\"ASTERISK\"));let E=A();p(\"CLOSE\");let be=h();X(m,S,k,E,be);continue}M(),p(\"END\")}return c}a(F,\"parse\");function x(e){return e.replace(/([.+*?^${}()[\\]|/\\\\])/g,\"\\\\$1\")}a(x,\"escapeString\");function B(e){return e&&e.ignoreCase?\"ui\":\"u\"}a(B,\"flags\");function q(e,t,r){return W(F(e,r),t,r)}a(q,\"stringToRegexp\");function T(e){switch(e){case 0:return\"*\";case 1:return\"?\";case 2:return\"+\";case 3:return\"\"}}a(T,\"modifierToString\");function W(e,t,r={}){r.delimiter??=\"/#?\",r.prefixes??=\"./\",r.sensitive??=!1,r.strict??=!1,r.end??=!0,r.start??=!0,r.endsWith=\"\";let n=r.start?\"^\":\"\";for(let s of e){if(s.type===3){s.modifier===3?n+=x(s.value):n+=`(?:${x(s.value)})${T(s.modifier)}`;continue}t&&t.push(s.name);let i=`[^${x(r.delimiter)}]+?`,o=s.value;if(s.type===1?o=i:s.type===0&&(o=v),!s.prefix.length&&!s.suffix.length){s.modifier===3||s.modifier===1?n+=`(${o})${T(s.modifier)}`:n+=`((?:${o})${T(s.modifier)})`;continue}if(s.modifier===3||s.modifier===1){n+=`(?:${x(s.prefix)}(${o})${x(s.suffix)})`,n+=T(s.modifier);continue}n+=`(?:${x(s.prefix)}`,n+=`((?:${o})(?:`,n+=x(s.suffix),n+=x(s.prefix),n+=`(?:${o}))*)${x(s.suffix)})`,s.modifier===0&&(n+=\"?\")}let c=`[${x(r.endsWith)}]|$`,l=`[${x(r.delimiter)}]`;if(r.end)return r.strict||(n+=`${l}?`),r.endsWith.length?n+=`(?=${c})`:n+=\"$\",new RegExp(n,B(r));r.strict||(n+=`(?:${l}(?=${c}))?`);let f=!1;if(e.length){let s=e[e.length-1];s.type===3&&s.modifier===3&&(f=r.delimiter.indexOf(s)>-1)}return f||(n+=`(?=${l}|${c})`),new RegExp(n,B(r))}a(W,\"partsToRegexp\");var b={delimiter:\"\",prefixes:\"\",sensitive:!0,strict:!0},J={delimiter:\".\",prefixes:\"\",sensitive:!0,strict:!0},Q={delimiter:\"/\",prefixes:\"/\",sensitive:!0,strict:!0};function ee(e,t){return e.length?e[0]===\"/\"?!0:!t||e.length<2?!1:(e[0]==\"\\\\\"||e[0]==\"{\")&&e[1]==\"/\":!1}a(ee,\"isAbsolutePathname\");function te(e,t){return e.startsWith(t)?e.substring(t.length,e.length):e}a(te,\"maybeStripPrefix\");function ke(e,t){return e.endsWith(t)?e.substr(0,e.length-t.length):e}a(ke,\"maybeStripSuffix\");function _(e){return!e||e.length<2?!1:e[0]===\"[\"||(e[0]===\"\\\\\"||e[0]===\"{\")&&e[1]===\"[\"}a(_,\"treatAsIPv6Hostname\");var re=[\"ftp\",\"file\",\"http\",\"https\",\"ws\",\"wss\"];function U(e){if(!e)return!0;for(let t of re)if(e.test(t))return!0;return!1}a(U,\"isSpecialScheme\");function ne(e,t){if(e=te(e,\"#\"),t||e===\"\")return e;let r=new URL(\"https://example.com\");return r.hash=e,r.hash?r.hash.substring(1,r.hash.length):\"\"}a(ne,\"canonicalizeHash\");function se(e,t){if(e=te(e,\"?\"),t||e===\"\")return e;let r=new URL(\"https://example.com\");return r.search=e,r.search?r.search.substring(1,r.search.length):\"\"}a(se,\"canonicalizeSearch\");function ie(e,t){return t||e===\"\"?e:_(e)?K(e):j(e)}a(ie,\"canonicalizeHostname\");function ae(e,t){if(t||e===\"\")return e;let r=new URL(\"https://example.com\");return r.password=e,r.password}a(ae,\"canonicalizePassword\");function oe(e,t){if(t||e===\"\")return e;let r=new URL(\"https://example.com\");return r.username=e,r.username}a(oe,\"canonicalizeUsername\");function ce(e,t,r){if(r||e===\"\")return e;if(t&&!re.includes(t))return new URL(`${t}:${e}`).pathname;let n=e[0]==\"/\";return e=new URL(n?e:\"/-\"+e,\"https://example.com\").pathname,n||(e=e.substring(2,e.length)),e}a(ce,\"canonicalizePathname\");function le(e,t,r){return z(t)===e&&(e=\"\"),r||e===\"\"?e:G(e)}a(le,\"canonicalizePort\");function fe(e,t){return e=ke(e,\":\"),t||e===\"\"?e:w(e)}a(fe,\"canonicalizeProtocol\");function z(e){switch(e){case\"ws\":case\"http\":return\"80\";case\"wws\":case\"https\":return\"443\";case\"ftp\":return\"21\";default:return\"\"}}a(z,\"defaultPortForProtocol\");function w(e){if(e===\"\")return e;if(/^[-+.A-Za-z0-9]*$/.test(e))return e.toLowerCase();throw new TypeError(`Invalid protocol '${e}'.`)}a(w,\"protocolEncodeCallback\");function he(e){if(e===\"\")return e;let t=new URL(\"https://example.com\");return t.username=e,t.username}a(he,\"usernameEncodeCallback\");function ue(e){if(e===\"\")return e;let t=new URL(\"https://example.com\");return t.password=e,t.password}a(ue,\"passwordEncodeCallback\");function j(e){if(e===\"\")return e;if(/[\\t\\n\\r #%/:<>?@[\\]^\\\\|]/g.test(e))throw new TypeError(`Invalid hostname '${e}'`);let t=new URL(\"https://example.com\");return t.hostname=e,t.hostname}a(j,\"hostnameEncodeCallback\");function K(e){if(e===\"\")return e;if(/[^0-9a-fA-F[\\]:]/g.test(e))throw new TypeError(`Invalid IPv6 hostname '${e}'`);return e.toLowerCase()}a(K,\"ipv6HostnameEncodeCallback\");function G(e){if(e===\"\"||/^[0-9]*$/.test(e)&&parseInt(e)<=65535)return e;throw new TypeError(`Invalid port '${e}'.`)}a(G,\"portEncodeCallback\");function de(e){if(e===\"\")return e;let t=new URL(\"https://example.com\");return t.pathname=e[0]!==\"/\"?\"/-\"+e:e,e[0]!==\"/\"?t.pathname.substring(2,t.pathname.length):t.pathname}a(de,\"standardURLPathnameEncodeCallback\");function pe(e){return e===\"\"?e:new URL(`data:${e}`).pathname}a(pe,\"pathURLPathnameEncodeCallback\");function ge(e){if(e===\"\")return e;let t=new URL(\"https://example.com\");return t.search=e,t.search.substring(1,t.search.length)}a(ge,\"searchEncodeCallback\");function me(e){if(e===\"\")return e;let t=new URL(\"https://example.com\");return t.hash=e,t.hash.substring(1,t.hash.length)}a(me,\"hashEncodeCallback\");var C=class{#i;#n=[];#t={};#e=0;#s=1;#l=0;#o=0;#d=0;#p=0;#g=!1;constructor(t){this.#i=t}get result(){return this.#t}parse(){for(this.#n=D(this.#i,!0);this.#e<this.#n.length;this.#e+=this.#s){if(this.#s=1,this.#n[this.#e].type===\"END\"){if(this.#o===0){this.#b(),this.#f()?this.#r(9,1):this.#h()?this.#r(8,1):this.#r(7,0);continue}else if(this.#o===2){this.#u(5);continue}this.#r(10,0);break}if(this.#d>0)if(this.#A())this.#d-=1;else continue;if(this.#T()){this.#d+=1;continue}switch(this.#o){case 0:this.#P()&&this.#u(1);break;case 1:if(this.#P()){this.#C();let t=7,r=1;this.#E()?(t=2,r=3):this.#g&&(t=2),this.#r(t,r)}break;case 2:this.#S()?this.#u(3):(this.#x()||this.#h()||this.#f())&&this.#u(5);break;case 3:this.#O()?this.#r(4,1):this.#S()&&this.#r(5,1);break;case 4:this.#S()&&this.#r(5,1);break;case 5:this.#y()?this.#p+=1:this.#w()&&(this.#p-=1),this.#k()&&!this.#p?this.#r(6,1):this.#x()?this.#r(7,0):this.#h()?this.#r(8,1):this.#f()&&this.#r(9,1);break;case 6:this.#x()?this.#r(7,0):this.#h()?this.#r(8,1):this.#f()&&this.#r(9,1);break;case 7:this.#h()?this.#r(8,1):this.#f()&&this.#r(9,1);break;case 8:this.#f()&&this.#r(9,1);break;case 9:break;case 10:break}}this.#t.hostname!==void 0&&this.#t.port===void 0&&(this.#t.port=\"\")}#r(t,r){switch(this.#o){case 0:break;case 1:this.#t.protocol=this.#c();break;case 2:break;case 3:this.#t.username=this.#c();break;case 4:this.#t.password=this.#c();break;case 5:this.#t.hostname=this.#c();break;case 6:this.#t.port=this.#c();break;case 7:this.#t.pathname=this.#c();break;case 8:this.#t.search=this.#c();break;case 9:this.#t.hash=this.#c();break;case 10:break}this.#o!==0&&t!==10&&([1,2,3,4].includes(this.#o)&&[6,7,8,9].includes(t)&&(this.#t.hostname??=\"\"),[1,2,3,4,5,6].includes(this.#o)&&[8,9].includes(t)&&(this.#t.pathname??=this.#g?\"/\":\"\"),[1,2,3,4,5,6,7].includes(this.#o)&&t===9&&(this.#t.search??=\"\")),this.#R(t,r)}#R(t,r){this.#o=t,this.#l=this.#e+r,this.#e+=r,this.#s=0}#b(){this.#e=this.#l,this.#s=0}#u(t){this.#b(),this.#o=t}#m(t){return t<0&&(t=this.#n.length-t),t<this.#n.length?this.#n[t]:this.#n[this.#n.length-1]}#a(t,r){let n=this.#m(t);return n.value===r&&(n.type===\"CHAR\"||n.type===\"ESCAPED_CHAR\"||n.type===\"INVALID_CHAR\")}#P(){return this.#a(this.#e,\":\")}#E(){return this.#a(this.#e+1,\"/\")&&this.#a(this.#e+2,\"/\")}#S(){return this.#a(this.#e,\"@\")}#O(){return this.#a(this.#e,\":\")}#k(){return this.#a(this.#e,\":\")}#x(){return this.#a(this.#e,\"/\")}#h(){if(this.#a(this.#e,\"?\"))return!0;if(this.#n[this.#e].value!==\"?\")return!1;let t=this.#m(this.#e-1);return t.type!==\"NAME\"&&t.type!==\"REGEX\"&&t.type!==\"CLOSE\"&&t.type!==\"ASTERISK\"}#f(){return this.#a(this.#e,\"#\")}#T(){return this.#n[this.#e].type==\"OPEN\"}#A(){return this.#n[this.#e].type==\"CLOSE\"}#y(){return this.#a(this.#e,\"[\")}#w(){return this.#a(this.#e,\"]\")}#c(){let t=this.#n[this.#e],r=this.#m(this.#l).index;return this.#i.substring(r,t.index)}#C(){let t={};Object.assign(t,b),t.encodePart=w;let r=q(this.#c(),void 0,t);this.#g=U(r)}};a(C,\"Parser\");var V=[\"protocol\",\"username\",\"password\",\"hostname\",\"port\",\"pathname\",\"search\",\"hash\"],O=\"*\";function Se(e,t){if(typeof e!=\"string\")throw new TypeError(\"parameter 1 is not of type 'string'.\");let r=new URL(e,t);return{protocol:r.protocol.substring(0,r.protocol.length-1),username:r.username,password:r.password,hostname:r.hostname,port:r.port,pathname:r.pathname,search:r.search!==\"\"?r.search.substring(1,r.search.length):void 0,hash:r.hash!==\"\"?r.hash.substring(1,r.hash.length):void 0}}a(Se,\"extractValues\");function R(e,t){return t?I(e):e}a(R,\"processBaseURLString\");function L(e,t,r){let n;if(typeof t.baseURL==\"string\")try{n=new URL(t.baseURL),t.protocol===void 0&&(e.protocol=R(n.protocol.substring(0,n.protocol.length-1),r)),!r&&t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&t.username===void 0&&(e.username=R(n.username,r)),!r&&t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&t.username===void 0&&t.password===void 0&&(e.password=R(n.password,r)),t.protocol===void 0&&t.hostname===void 0&&(e.hostname=R(n.hostname,r)),t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&(e.port=R(n.port,r)),t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&t.pathname===void 0&&(e.pathname=R(n.pathname,r)),t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&t.pathname===void 0&&t.search===void 0&&(e.search=R(n.search.substring(1,n.search.length),r)),t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&t.pathname===void 0&&t.search===void 0&&t.hash===void 0&&(e.hash=R(n.hash.substring(1,n.hash.length),r))}catch{throw new TypeError(`invalid baseURL '${t.baseURL}'.`)}if(typeof t.protocol==\"string\"&&(e.protocol=fe(t.protocol,r)),typeof t.username==\"string\"&&(e.username=oe(t.username,r)),typeof t.password==\"string\"&&(e.password=ae(t.password,r)),typeof t.hostname==\"string\"&&(e.hostname=ie(t.hostname,r)),typeof t.port==\"string\"&&(e.port=le(t.port,e.protocol,r)),typeof t.pathname==\"string\"){if(e.pathname=t.pathname,n&&!ee(e.pathname,r)){let c=n.pathname.lastIndexOf(\"/\");c>=0&&(e.pathname=R(n.pathname.substring(0,c+1),r)+e.pathname)}e.pathname=ce(e.pathname,e.protocol,r)}return typeof t.search==\"string\"&&(e.search=se(t.search,r)),typeof t.hash==\"string\"&&(e.hash=ne(t.hash,r)),e}a(L,\"applyInit\");function I(e){return e.replace(/([+*?:{}()\\\\])/g,\"\\\\$1\")}a(I,\"escapePatternString\");function Te(e){return e.replace(/([.+*?^${}()[\\]|/\\\\])/g,\"\\\\$1\")}a(Te,\"escapeRegexpString\");function Ae(e,t){t.delimiter??=\"/#?\",t.prefixes??=\"./\",t.sensitive??=!1,t.strict??=!1,t.end??=!0,t.start??=!0,t.endsWith=\"\";let r=\".*\",n=`[^${Te(t.delimiter)}]+?`,c=/[$_\\u200C\\u200D\\p{ID_Continue}]/u,l=\"\";for(let f=0;f<e.length;++f){let s=e[f];if(s.type===3){if(s.modifier===3){l+=I(s.value);continue}l+=`{${I(s.value)}}${T(s.modifier)}`;continue}let i=s.hasCustomName(),o=!!s.suffix.length||!!s.prefix.length&&(s.prefix.length!==1||!t.prefixes.includes(s.prefix)),h=f>0?e[f-1]:null,p=f<e.length-1?e[f+1]:null;if(!o&&i&&s.type===1&&s.modifier===3&&p&&!p.prefix.length&&!p.suffix.length)if(p.type===3){let A=p.value.length>0?p.value[0]:\"\";o=c.test(A)}else o=!p.hasCustomName();if(!o&&!s.prefix.length&&h&&h.type===3){let A=h.value[h.value.length-1];o=t.prefixes.includes(A)}o&&(l+=\"{\"),l+=I(s.prefix),i&&(l+=`:${s.name}`),s.type===2?l+=`(${s.value})`:s.type===1?i||(l+=`(${n})`):s.type===0&&(!i&&(!h||h.type===3||h.modifier!==3||o||s.prefix!==\"\")?l+=\"*\":l+=`(${r})`),s.type===1&&i&&s.suffix.length&&c.test(s.suffix[0])&&(l+=\"\\\\\"),l+=I(s.suffix),o&&(l+=\"}\"),s.modifier!==3&&(l+=T(s.modifier))}return l}a(Ae,\"partsToPattern\");var Y=class{#i;#n={};#t={};#e={};#s={};#l=!1;constructor(t={},r,n){try{let c;if(typeof r==\"string\"?c=r:n=r,typeof t==\"string\"){let i=new C(t);if(i.parse(),t=i.result,c===void 0&&typeof t.protocol!=\"string\")throw new TypeError(\"A base URL must be provided for a relative constructor string.\");t.baseURL=c}else{if(!t||typeof t!=\"object\")throw new TypeError(\"parameter 1 is not of type 'string' and cannot convert to dictionary.\");if(c)throw new TypeError(\"parameter 1 is not of type 'string'.\")}typeof n>\"u\"&&(n={ignoreCase:!1});let l={ignoreCase:n.ignoreCase===!0},f={pathname:O,protocol:O,username:O,password:O,hostname:O,port:O,search:O,hash:O};this.#i=L(f,t,!0),z(this.#i.protocol)===this.#i.port&&(this.#i.port=\"\");let s;for(s of V){if(!(s in this.#i))continue;let i={},o=this.#i[s];switch(this.#t[s]=[],s){case\"protocol\":Object.assign(i,b),i.encodePart=w;break;case\"username\":Object.assign(i,b),i.encodePart=he;break;case\"password\":Object.assign(i,b),i.encodePart=ue;break;case\"hostname\":Object.assign(i,J),_(o)?i.encodePart=K:i.encodePart=j;break;case\"port\":Object.assign(i,b),i.encodePart=G;break;case\"pathname\":U(this.#n.protocol)?(Object.assign(i,Q,l),i.encodePart=de):(Object.assign(i,b,l),i.encodePart=pe);break;case\"search\":Object.assign(i,b,l),i.encodePart=ge;break;case\"hash\":Object.assign(i,b,l),i.encodePart=me;break}try{this.#s[s]=F(o,i),this.#n[s]=W(this.#s[s],this.#t[s],i),this.#e[s]=Ae(this.#s[s],i),this.#l=this.#l||this.#s[s].some(h=>h.type===2)}catch{throw new TypeError(`invalid ${s} pattern '${this.#i[s]}'.`)}}}catch(c){throw new TypeError(`Failed to construct 'URLPattern': ${c.message}`)}}get[Symbol.toStringTag](){return\"URLPattern\"}test(t={},r){let n={pathname:\"\",protocol:\"\",username:\"\",password:\"\",hostname:\"\",port:\"\",search:\"\",hash:\"\"};if(typeof t!=\"string\"&&r)throw new TypeError(\"parameter 1 is not of type 'string'.\");if(typeof t>\"u\")return!1;try{typeof t==\"object\"?n=L(n,t,!1):n=L(n,Se(t,r),!1)}catch{return!1}let c;for(c of V)if(!this.#n[c].exec(n[c]))return!1;return!0}exec(t={},r){let n={pathname:\"\",protocol:\"\",username:\"\",password:\"\",hostname:\"\",port:\"\",search:\"\",hash:\"\"};if(typeof t!=\"string\"&&r)throw new TypeError(\"parameter 1 is not of type 'string'.\");if(typeof t>\"u\")return;try{typeof t==\"object\"?n=L(n,t,!1):n=L(n,Se(t,r),!1)}catch{return null}let c={};r?c.inputs=[t,r]:c.inputs=[t];let l;for(l of V){let f=this.#n[l].exec(n[l]);if(!f)return null;let s={};for(let[i,o]of this.#t[l].entries())if(typeof o==\"string\"||typeof o==\"number\"){let h=f[i+1];s[o]=h}c[l]={input:n[l]??\"\",groups:s}}return c}static compareComponent(t,r,n){let c=a((i,o)=>{for(let h of[\"type\",\"modifier\",\"prefix\",\"value\",\"suffix\"]){if(i[h]<o[h])return-1;if(i[h]===o[h])continue;return 1}return 0},\"comparePart\"),l=new P(3,\"\",\"\",\"\",\"\",3),f=new P(0,\"\",\"\",\"\",\"\",3),s=a((i,o)=>{let h=0;for(;h<Math.min(i.length,o.length);++h){let p=c(i[h],o[h]);if(p)return p}return i.length===o.length?0:c(i[h]??l,o[h]??l)},\"comparePartList\");return!r.#e[t]&&!n.#e[t]?0:r.#e[t]&&!n.#e[t]?s(r.#s[t],[f]):!r.#e[t]&&n.#e[t]?s([f],n.#s[t]):s(r.#s[t],n.#s[t])}get protocol(){return this.#e.protocol}get username(){return this.#e.username}get password(){return this.#e.password}get hostname(){return this.#e.hostname}get port(){return this.#e.port}get pathname(){return this.#e.pathname}get search(){return this.#e.search}get hash(){return this.#e.hash}get hasRegExpGroups(){return this.#l}};a(Y,\"URLPattern\");export{Y as URLPattern};\n", "import { URLPattern } from \"./dist/urlpattern.js\";\n\nexport { URLPattern };\n\nif (!globalThis.URLPattern) {\n globalThis.URLPattern = URLPattern;\n}\n", "// Import URLPattern polyfill synchronously - no-op on modern Node.js\nimport 'urlpattern-polyfill';\n\n/**\n * Compile a route pattern into a matcher function using URLPattern\n * @param {string} pattern - Route pattern (e.g., '/users/:id', '/api/*')\n * @returns {Function} - Function that returns params object or null\n */\nexport function compileRoute(pattern) {\n // URLPattern supports :param syntax directly, no conversion needed\n const pat = new URLPattern({ pathname: pattern });\n \n return (pathname) => {\n const match = pat.exec({ pathname });\n return match?.pathname.groups ?? null;\n };\n}\n\n/**\n * Parse route parameters from a route path for documentation\n * @param {string} routePath - The route path (e.g., '/users/:id/posts/:postId')\n * @returns {Array} Array of parameter objects with name and type info\n */\nexport function parseRouteParams(routePath) {\n const paramRegex = /:([a-zA-Z_][a-zA-Z0-9_]*)(\\?)?(\\*)?/g;\n const params = [];\n let match;\n \n while ((match = paramRegex.exec(routePath)) !== null) {\n const [, name, optional, splat] = match;\n params.push({\n name,\n optional: !!optional,\n splat: !!splat,\n fullMatch: match[0]\n });\n }\n \n // Also handle standalone wildcard routes (*)\n if (routePath.includes('*') && !routePath.includes(':*')) {\n params.push({\n name: 'wild',\n optional: false,\n splat: true,\n fullMatch: '*'\n });\n }\n \n return params;\n}\n\n/**\n * Replace route parameters with actual values\n * @param {string} routePath - The route path template\n * @param {Object} params - Object with parameter values\n * @param {Object} options - Replacement options\n * @returns {string} - The resolved path\n */\nexport function replaceRouteParams(routePath, params = {}, options = {}) {\n const {\n strict = true, // Throw error if required param is missing\n encode = true, // URL encode parameter values\n defaultValue = '' // Default value for missing params\n } = options;\n \n let resolvedPath = routePath;\n const routeParams = parseRouteParams(routePath);\n \n for (const param of routeParams) {\n const { name, optional, fullMatch } = param;\n let value = params[name];\n \n // Handle missing parameters\n if (value === undefined || value === null) {\n if (optional) {\n // Remove optional parameter and its leading slash if present\n resolvedPath = resolvedPath.replace(`/${fullMatch}`, '').replace(fullMatch, '');\n continue;\n } else if (strict) {\n throw new Error(`Missing required route parameter: ${name}`);\n } else {\n value = defaultValue;\n }\n }\n \n // Convert value to string and optionally encode\n const stringValue = String(value);\n const encodedValue = encode ? encodeURIComponent(stringValue) : stringValue;\n \n // Replace the parameter in the path\n resolvedPath = resolvedPath.replace(fullMatch, encodedValue);\n }\n \n // Clean up any double slashes that might have been created\n resolvedPath = resolvedPath.replace(/\\/+/g, '/');\n \n return resolvedPath;\n}\n", "import { compileRoute } from './utils/routeMatch.js';\n\n/**\n * Kernel handles route registration and matching\n * Separates routing logic from HTTP protocol handling\n */\nexport class Kernel {\n #routes = []; // { method, path, match, handler, mode, revalidate, ... }\n #appHandlers = []; // [{ match, handle, cleanup? }]\n #hooks = { \n onRequest: null, \n preHandler: null, \n onSend: null, \n onError: null \n };\n\n #staticFallback = null;\n\n constructor() {}\n\n /**\n * Register multiple routes at once\n * @param {Array} rawRoutes - Array of route objects\n */\n registerRoutes(rawRoutes) {\n for (const r of rawRoutes) {\n this.registerRoute(r);\n }\n }\n\n /**\n * Register a single route\n * @param {Object} route - Route object with method, path, handler, etc.\n */\n registerRoute(route) {\n const compiledRoute = {\n ...route,\n match: compileRoute(route.path)\n };\n this.#routes.push(compiledRoute);\n }\n\n setAppHandlers(handlers = []) {\n this.#appHandlers = Array.isArray(handlers) ? handlers : [];\n }\n\n async cleanupAppHandlers() {\n for (const handler of this.#appHandlers) {\n if (handler?.cleanup) {\n await handler.cleanup();\n }\n }\n this.#appHandlers = [];\n }\n\n /**\n * Configure hooks\n * @param {Object} hooks - Hook functions\n */\n hooks(h) { \n Object.assign(this.#hooks, h); \n }\n\n /**\n * Set static file fallback handler\n * @param {string} outputDir - Directory to serve static files from\n * @param {Function} handler - Static file handler function\n */\n setStaticFallback(outputDir, handler) {\n this.#staticFallback = { outputDir, handler };\n }\n\n /**\n * Handle a request through the routing system\n * @param {Object} ctx - Request context\n * @returns {Object} Response object\n */\n async handle(ctx) {\n let response;\n try {\n // onRequest can short-circuit\n const onReqOut = await this.#hooks.onRequest?.(ctx);\n if (onReqOut) { response = onReqOut; return response; }\n\n // app handlers first\n for (const handler of this.#appHandlers) {\n try {\n if (!handler?.match || !handler?.handle) continue;\n if (await handler.match(ctx.req)) {\n const handlerResponse = await handler.handle(ctx);\n if (handlerResponse) {\n response = handlerResponse;\n return response;\n }\n }\n } catch (handlerError) {\n response = (await this.#hooks.onError?.(ctx, handlerError))\n ?? ctx.respond.text('Internal Server Error', 500);\n return response;\n }\n }\n\n // route match \u2026\n let matchParams = null;\n const route = this.#routes.find(r => {\n if (r.method !== ctx.req.method) return false;\n const m = r.match(ctx.req.path);\n if (m) { matchParams = m; return true; }\n return false;\n });\n\n if (!route) {\n if (this.#staticFallback) {\n const staticResponse = await this.#staticFallback.handler(ctx, this.#staticFallback.outputDir);\n response = (staticResponse && staticResponse.status !== 404)\n ? staticResponse\n : ctx.respond.text('Not Found', 404);\n } else {\n response = ctx.respond.text('Not Found', 404);\n }\n return response;\n }\n\n ctx.req.params = matchParams || {};\n\n // preHandler can short-circuit\n const preOut = await this.#hooks.preHandler?.(ctx, route);\n if (preOut) { response = preOut; return response; }\n\n // route handler\n response = await route.handler(ctx);\n\n } catch (err) {\n response = (await this.#hooks.onError?.(ctx, err))\n ?? ctx.respond.text('Internal Server Error', 500);\n } finally {\n await this.#hooks.onSend?.(ctx, response);\n }\n return response ?? ctx.respond.text('', 204);\n }\n\n\n /**\n * Get all registered routes\n * @returns {Array} Array of registered routes\n */\n getRoutes() {\n return this.#routes.map(route => ({\n method: route.method,\n path: route.path,\n params: route.params || [],\n compiled: true\n }));\n }\n}\n", "/**\n * HTTP Adapter for Node.js native HTTP server\n * Thin I/O shim: normalize req/res, call kernel, send response\n */\nimport http from 'node:http';\nimport { AdapterInterface } from './AdapterInterface.js';\nimport { parseBody } from '../utils/httpParsing.js';\n\nexport class HttpAdapter extends AdapterInterface {\n #connections = new Set();\n\n constructor() {\n super('http');\n }\n\n async initialize(kernel, opts = {}, log = null) {\n await super.initialize(kernel, opts, log);\n \n // Warn if middleware is configured for HTTP adapter\n if (opts.middleware?.length > 0) {\n log?.warn('Middleware configured but HTTP adapter selected. Consider using adapter: \"express\" for full middleware support.');\n log?.info('HTTP adapter will simulate middleware using hooks for basic compatibility.');\n }\n }\n\n async start({ port = 3000, host = '0.0.0.0' } = {}) {\n this.server = http.createServer(async (req, res) => {\n try {\n // Simulate middleware execution for HTTP adapter\n if (this.opts.middleware?.length > 0) {\n const success = await this.#simulateMiddleware(req, res, this.opts.middleware);\n if (!success) return; // Response was sent by middleware\n }\n\n // Parse body for HTTP adapter\n if (!req.body) {\n req.body = await parseBody(req);\n }\n\n const ctx = this.createContext(req, res);\n const out = await this.kernel.handle(ctx);\n await this.sendResponse(res, out, req.method === 'HEAD');\n } catch (error) {\n await this.handleError(res, error);\n }\n });\n\n // Track connections for clean shutdown\n this.server.on('connection', (conn) => {\n this.#connections.add(conn);\n conn.on('close', () => {\n this.#connections.delete(conn);\n });\n });\n\n await new Promise((resolve, reject) =>\n this.server.listen(port, host, err => (err ? reject(err) : resolve()))\n );\n\n this.log?.info?.(`HTTP Server listening on http://${host}:${port}`);\n return this.server;\n }\n\n async stop() {\n if (this.server) {\n // Destroy all active connections\n for (const conn of this.#connections) {\n conn.destroy();\n }\n this.#connections.clear();\n\n // Close the server\n await new Promise(resolve => this.server.close(() => resolve()));\n this.server = null;\n }\n }\n\n /**\n * Simulate Express middleware for HTTP adapter\n * Limited compatibility - not all Express middleware will work\n * @private\n */\n async #simulateMiddleware(req, res, middlewareArray) {\n for (const middleware of middlewareArray) {\n try {\n let nextCalled = false;\n const next = (err) => {\n if (err) throw err;\n nextCalled = true;\n };\n\n // Add Express-like methods to response\n if (!res.json) {\n res.json = (data) => {\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify(data));\n return false; // Indicates response was sent\n };\n }\n\n await middleware(req, res, next);\n \n // If next wasn't called and response was sent, stop processing\n if (!nextCalled && res.headersSent) {\n return false;\n }\n } catch (error) {\n this.log?.error(`Middleware simulation error: ${error.message}`);\n res.statusCode = 500;\n res.end('Internal Server Error');\n return false;\n }\n }\n return true; // Continue to kernel\n }\n\n}\n", "const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n", "import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-ghostty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'wezterm') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n", "// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n", "import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` \u2192 `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n", "import chalk from 'chalk';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\n\nconst execAsync = promisify(exec);\n\n/**\n * Display a pretty server ready message with clickable URL\n * @param {object} options - Server options\n * @param {number} options.port - Server port\n * @param {string} options.host - Server host\n * @param {string} options.mode - Server mode (development/production)\n * @param {boolean|string} [options.open] - Browser launch control:\n * true = open the default server URL,\n * false = don't open anything,\n * string = open that specific URL.\n * Defaults to true in development mode, false otherwise.\n * @param {object} logger - Logger instance\n */\nexport async function displayServerReady({ port, host, mode, open }, logger) {\n const protocol = mode === 'production' ? 'https' : 'http';\n const url = `${protocol}://${host === '0.0.0.0' ? 'localhost' : host}:${port}`;\n \n const banner = [\n '',\n chalk.bold.green('\uD83D\uDE80 Server Ready! \uD83D\uDE80'),\n '',\n ` ${chalk.gray('Mode')} ${chalk.white(mode.toUpperCase())}`,\n ` ${chalk.gray('URL')} ${chalk.cyan.underline(url)}`,\n ` ${chalk.gray('Host')} ${chalk.white(host)}:${chalk.white(port)}`,\n ''\n ];\n\n banner.forEach(line => logger.info(line));\n\n const shouldOpen = open !== undefined ? open : (mode === 'development');\n\n if (shouldOpen !== false) {\n const target = typeof shouldOpen === 'string' ? shouldOpen : url;\n try {\n await openBrowser(target);\n logger.info(chalk.green('\uD83C\uDF10 Browser opened automatically'));\n } catch (error) {\n logger.debug('Could not open browser automatically:', error.message);\n }\n }\n\n const commands = [\n '',\n chalk.gray('\uD83D\uDCA1 Quick Commands:'),\n chalk.gray(` \u2022 Press ${chalk.yellow('Ctrl+C')} to stop the server`),\n chalk.gray(` \u2022 Visit ${chalk.cyan(url)} to view your site`),\n chalk.gray(` \u2022 Check the console for live reload updates`),\n ''\n ];\n\n commands.forEach(line => logger.info(line));\n}\n\n/**\n * Open browser with the given URL\n * @param {string} url - URL to open\n */\nasync function openBrowser(url) {\n const platform = process.platform;\n let command;\n\n switch (platform) {\n case 'darwin': // macOS\n command = `open \"${url}\"`;\n break;\n case 'win32': // Windows\n command = `start \"${url}\"`;\n break;\n default: // Linux and others\n command = `xdg-open \"${url}\"`;\n break;\n }\n\n try {\n await execAsync(command);\n } catch (error) {\n throw new Error(`Failed to open browser: ${error.message}`);\n }\n}", "import { ServiceProvider, definitionType } from '@jucie.io/engine';\nimport { Kernel } from './Kernel.js';\nimport { HttpAdapter } from './adapters/HttpAdapter.js';\nimport { displayServerReady } from './utils/serverReady.js';\n\nexport class Server extends ServiceProvider {\n static manifest = {\n name: 'Server',\n namespace: 'server',\n version: '1.0.0'\n };\n\n #routes = [];\n #adapter = null;\n #hooks = {\n onRequest: null,\n preHandler: null,\n onSend: null,\n onError: null\n };\n #live = false;\n #liveConfig = {};\n #factories = [];\n\n actions(useContext) { \n return {\n use: (...factories) => {\n this.#factories.push(...factories);\n return this;\n },\n // Add a route\n\n add: (method, path, handler, meta = {}) => {\n this.#addRoute(null, method, path, handler, meta);\n },\n\n // Set server adapter\n useAdapter: (adapter) => {\n this.#adapter = adapter;\n return this;\n },\n\n // Configure hooks\n hooks: (hooks) => {\n this.#hooks = { ...this.#hooks, ...hooks };\n return this;\n },\n\n // Start listening server\n listen: async (opts = {}) => {\n this.#liveConfig = { ...this.config, ...opts };\n this.#live = true;\n this.#initializeFactories();\n const relay = useContext('relay');\n const port = this.#liveConfig.port || 3000;\n const host = this.#liveConfig.host || '0.0.0.0';\n const log = useContext('log');\n \n // Create kernel with services\n const kernel = new Kernel();\n\n // Configure kernel hooks\n kernel.hooks(this.#hooks);\n\n // 1) Register app routes first\n kernel.registerRoutes(this.#routes);\n\n // 2) Add system routes (won't shadow user routes)\n kernel.registerRoutes([\n {\n method: 'GET',\n path: '/health',\n handler: (ctx) => ctx.respond.json({\n status: 'ok',\n timestamp: new Date().toISOString(),\n mode: this.#liveConfig.mode || 'production'\n })\n },\n {\n method: 'GET',\n path: '/api/info',\n handler: (ctx) => ctx.respond.json({\n name: 'Info',\n version: '1.0.0',\n mode: this.#liveConfig.mode || 'production',\n routes: this.#routes.length\n })\n }\n ]);\n\n // 3) Configure static file serving as 404 fallback\n if (this.#liveConfig.outputDir) {\n kernel.setStaticFallback(this.#liveConfig.outputDir, (ctx, outputDir) => {\n return this.#serveStaticFile(ctx, outputDir);\n });\n }\n\n // 4) Boot adapter with middleware support\n if (!this.#adapter) {\n // Choose adapter based on config\n if (this.#liveConfig.adapter === 'express' || this.#liveConfig.middleware?.length > 0) {\n const { ExpressAdapter } = await import('./adapters/ExpressAdapter.js');\n this.#adapter = ExpressAdapter.create();\n log.debug('Using Express adapter for middleware support');\n } else {\n this.#adapter = HttpAdapter.create();\n log.debug('Using HTTP adapter');\n }\n }\n\n // Pass configuration to adapter\n await this.#adapter.initialize(kernel, this.#liveConfig, log);\n\n if (typeof this.#adapter.registerKernelHandler === 'function') {\n this.#adapter.registerKernelHandler(this.#liveConfig);\n }\n \n // Start the server and return the instance\n const server = await this.#adapter.start({ port, host });\n \n // Display pretty server ready message\n const actualPort = server.address()?.port || port;\n await displayServerReady({ \n port: actualPort, \n host, \n mode: this.#liveConfig.mode || 'production',\n open: this.#liveConfig.open,\n }, log);\n \n // Broadcast server ready event\n relay.broadcast('server:ready', server);\n return server;\n },\n\n // Get all routes\n getRoutes: () => this.#routes,\n\n // Clear all routes (useful for testing)\n clearRoutes: () => {\n this.#routes = [];\n },\n\n // Stop the server\n stop: async () => {\n if (this.#adapter) {\n await this.#adapter.stop();\n }\n },\n\n // Check if server is running\n isRunning: () => this.#adapter && this.#adapter.isRunning(),\n\n // Get the underlying HTTP server (for Socket.IO integration)\n getHttpServer: () => {\n if (this.#adapter) {\n return this.#adapter.getHttpServer();\n }\n return null;\n }\n };\n }\n /**\n * Serve static files from the output directory\n * @private\n */\n\n #addRoute(basePath = '', method, path, handler, meta = {}, children = []) {\n if (basePath) {\n path = basePath + path;\n }\n if (Array.isArray(children)) {\n for (const child of children) {\n if (typeof child === 'function') {\n if (!this.#live) {\n this.#factories.push(child);\n } else {\n this.#use(child);\n }\n } else {\n this.#addRoute(path, child.method, child.path, child.handler, child.meta, child.children);\n }\n }\n } else if (typeof children === 'function') {\n if (!this.#live) {\n this.#factories.push(children);\n } else {\n this.#use(children);\n }\n }\n\n this.#routes.push({\n method: method.toUpperCase(),\n path,\n handler,\n meta\n });\n }\n\n #initializeFactories() {\n if (!this.#live) {\n return;\n }\n\n if (this.#factories.length === 0) {\n return;\n }\n\n this.#use(...this.#factories);\n this.#factories = [];\n }\n\n #use(...factories) {\n try {\n for (const factory of factories) {\n const type = definitionType(factory);\n switch (type) {\n case 'routes':\n const routes = factory(this.useContext, this.#liveConfig);\n if (Array.isArray(routes)) {\n for (const route of routes) {\n this.#addRoute(null, route.method, route.path, route.handler, route.meta, route.children);\n }\n } else {\n throw new Error('Routes must be an array');\n }\n break;\n\n case 'route':\n const route = factory(this.useContext, this.#liveConfig);\n if (typeof route === 'object' && route !== null) {\n this.#addRoute(null, route.method, route.path, route.handler, route.meta, route.children);\n } else {\n throw new Error('Route must be an object');\n }\n break;\n\n case 'hooks':\n const hooks = factory(this.useContext, this.#liveConfig);\n if (typeof hooks === 'object' && hooks !== null) {\n this.#hooks = { ...this.#hooks, ...hooks };\n } else {\n throw new Error('Hooks must be an object');\n }\n break;\n \n case 'hook':\n const hook = factory(this.useContext, this.#liveConfig);\n if (typeof hook === 'function') {\n this.#hooks = { ...this.#hooks, ...hook };\n } else {\n throw new Error('Hook must be a function');\n }\n break;\n\n default:\n throw new Error(`Invalid factory type: ${type}`);\n }\n }\n } catch (error) {\n console.error(`\\n\u274C Error using factories: ${error.message}\\n`);\n throw error;\n }\n }\n\n async #serveStaticFile(context, outputDir) {\n const fs = await import('fs/promises');\n const path = await import('path');\n \n try {\n // Get the requested file path\n const requestPath = context.req.path === '/' ? '/index.html' : context.req.path;\n let filePath = path.join(outputDir, requestPath);\n let stats;\n \n try {\n // Try the path as-is first\n stats = await fs.stat(filePath);\n } catch (error) {\n // If it fails and has no extension, try adding .html\n const ext = path.extname(requestPath);\n if (!ext) {\n const htmlPath = path.join(outputDir, `${requestPath}.html`);\n try {\n stats = await fs.stat(htmlPath);\n filePath = htmlPath; // Use the .html version\n } catch (htmlError) {\n // Neither worked, return 404\n return context.respond.text('Not Found', 404);\n }\n } else {\n // Had an extension but file not found\n return context.respond.text('Not Found', 404);\n }\n }\n \n if (stats.isFile()) {\n // Determine content type\n const ext = path.extname(filePath);\n const contentType = this.#getContentType(ext);\n \n // Read and serve the file\n const content = await fs.readFile(filePath);\n \n // Serve with correct content type\n if (contentType === 'text/html') {\n return context.respond.html(content.toString(), 200);\n } else if (contentType === 'text/css') {\n return context.respond.text(content.toString(), 200, { 'Content-Type': 'text/css' });\n } else if (contentType === 'application/javascript') {\n return context.respond.text(content.toString(), 200, { 'Content-Type': 'application/javascript' });\n } else if (contentType.startsWith('text/')) {\n return context.respond.text(content.toString(), 200, { 'Content-Type': contentType });\n } else {\n // For binary files, send as file response\n return context.respond.file(filePath, 200, { 'Content-Type': contentType });\n }\n } else {\n return context.respond.text('Not Found', 404);\n }\n } catch (error) {\n return context.respond.text('Not Found', 404);\n }\n }\n\n /**\n * Get content type based on file extension\n * @private\n */\n #getContentType(ext) {\n const types = {\n '.html': 'text/html',\n '.css': 'text/css',\n '.js': 'application/javascript',\n '.json': 'application/json',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.gif': 'image/gif',\n '.svg': 'image/svg+xml',\n '.ico': 'image/x-icon',\n '.woff': 'font/woff',\n '.woff2': 'font/woff2',\n '.ttf': 'font/ttf',\n '.eot': 'application/vnd.ms-fontobject'\n };\n \n return types[ext.toLowerCase()] || 'application/octet-stream';\n }\n}", "import { createDefinition } from '@jucie.io/engine';\n\nexport const defineRoutes = createDefinition('routes', [Array]);\nexport const defineRoute = createDefinition('route', [Object]);", "import { createDefinition } from '@jucie.io/engine';\n\nexport const defineHooks = createDefinition('hooks', [Object]);\nexport const defineHook = createDefinition('hook', [Function]);"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["parseBody", "req", "resolve", "contentType", "body", "chunk", "parseUrlEncoded", "data", "result", "pairs", "pair", "key", "value", "decodedKey", "decodedValue", "arrayKey", "parseQuery", "searchParams", "init_httpParsing", "__esmMin", "AdapterInterface", "ServerRoute", "ServerHooks", "ServerContext", "RespondHelpers", "init_AdapterInterface", "__esmMin", "init_httpParsing", "name", "kernel", "opts", "log", "options", "req", "res", "url", "k", "v", "parseQuery", "response", "isHead", "resp", "b", "chunk", "r", "filePath", "fs", "fsp", "path", "pipeline", "promisify", "pipelineAsync", "MIME", "st", "ext", "rs", "error", "method", "handler", "state", "cache", "data", "status", "headers", "body", "location", "ExpressAdapter_exports", "__export", "ExpressAdapter", "init_ExpressAdapter", "__esmMin", "init_AdapterInterface", "AdapterInterface", "#connections", "express", "kernel", "opts", "log", "#hasBodyParser", "index", "
|
|
3
|
+
"sources": ["../src/utils/httpParsing.js", "../src/adapters/AdapterInterface.js", "../src/adapters/ExpressAdapter.js", "../src/utils/routeMatch.js", "../src/Kernel.js", "../src/adapters/HttpAdapter.js", "../src/utils/serverReady.js", "../src/Server.js", "../src/factories/defineRoutes.js", "../src/factories/defineHooks.js", "../src/factories/defineMiddleware.js"],
|
|
4
|
+
"sourcesContent": ["/**\n * HTTP parsing utilities for request body and query parameters\n */\n\n/**\n * Parse request body based on content type\n * @param {Object} req - Node.js request object\n * @returns {Object|null} Parsed body object or null\n */\nexport async function parseBody(req) {\n return new Promise((resolve) => {\n if (req.method === 'GET' || req.method === 'HEAD') {\n resolve(null);\n return;\n }\n\n const contentType = req.headers['content-type'] || '';\n let body = '';\n\n req.on('data', chunk => {\n body += chunk.toString();\n });\n\n req.on('end', () => {\n try {\n if (contentType.includes('application/json')) {\n resolve(body ? JSON.parse(body) : {});\n } else if (contentType.includes('application/x-www-form-urlencoded')) {\n resolve(parseUrlEncoded(body));\n } else if (contentType.includes('multipart/form-data')) {\n // For now, just return the raw body for multipart\n // Could be enhanced with proper multipart parsing\n resolve({ raw: body });\n } else {\n resolve(body || null);\n }\n } catch (error) {\n resolve(null);\n }\n });\n\n req.on('error', () => {\n resolve(null);\n });\n });\n}\n\n/**\n * Parse URL-encoded form data\n * @param {string} data - URL-encoded string\n * @returns {Object} Parsed object\n */\nfunction parseUrlEncoded(data) {\n const result = {};\n const pairs = data.split('&');\n \n for (const pair of pairs) {\n const [key, value] = pair.split('=');\n if (key) {\n const decodedKey = decodeURIComponent(key);\n const decodedValue = value ? decodeURIComponent(value) : '';\n \n // Handle arrays (key[] or key[0])\n if (decodedKey.endsWith('[]')) {\n const arrayKey = decodedKey.slice(0, -2);\n if (!result[arrayKey]) result[arrayKey] = [];\n result[arrayKey].push(decodedValue);\n } else {\n result[decodedKey] = decodedValue;\n }\n }\n }\n \n return result;\n}\n\n/**\n * Parse query parameters from URLSearchParams\n * @param {URLSearchParams} searchParams - URL search parameters\n * @returns {Object} Parsed query object with support for arrays\n */\nexport function parseQuery(searchParams) {\n const result = {};\n \n for (const [key, value] of searchParams.entries()) {\n // Handle array parameters (key[] or key[0])\n if (key.endsWith('[]') || /\\[\\d*\\]$/.test(key)) {\n const arrayKey = key.replace(/\\[\\d*\\]$/, '').replace('[]', '');\n if (!result[arrayKey]) result[arrayKey] = [];\n result[arrayKey].push(value);\n } else {\n result[key] = value;\n }\n }\n \n return result;\n}\n", "/**\n * Server Adapter Interface\n * \n * This defines the contract that all HTTP server adapters must implement.\n * The Server kernel uses this interface to delegate HTTP handling to\n * any compatible adapter (Express, Fastify, Node HTTP, etc.)\n */\nimport { parseQuery } from '../utils/httpParsing.js';\n\n/**\n * Adapter Interface - All adapters must implement this\n */\nexport class AdapterInterface {\n static create(name) {\n return new this(name);\n }\n\n constructor(name) {\n this.name = name;\n this.server = null;\n this.kernel = null;\n this.log = null;\n this.hooks = null;\n }\n\n /**\n * Initialize the adapter with kernel and context\n * @param {Object} kernel - Server kernel instance\n * @param {Object} opts - Configuration options (including middleware)\n * @param {Object} log - Server logger\n */\n async initialize(kernel, opts = {}, log = null) {\n this.kernel = kernel;\n this.opts = opts;\n this.log = log;\n \n // Validate options\n if (opts.middleware && !Array.isArray(opts.middleware)) {\n throw new Error('opts.middleware must be an array');\n }\n }\n\n /**\n * Start the HTTP server\n * @param {Object} options - Server options (port, host, etc.)\n * @returns {Promise<Object>} - Server instance\n */\n async start(options) {\n throw new Error(`start() must be implemented by ${this.name} adapter`);\n }\n\n /**\n * Stop the HTTP server\n * @returns {Promise<void>}\n */\n async stop() {\n throw new Error(`stop() must be implemented by ${this.name} adapter`);\n }\n\n /**\n * Get the underlying HTTP server instance\n * Used by services like LiveReload for Socket.IO integration\n * @returns {Object|null} - HTTP server instance\n */\n getHttpServer() {\n return this.server;\n }\n\n /**\n * Check if the server is currently running\n * @returns {boolean}\n */\n isRunning() {\n return this.server !== null;\n }\n\n /**\n * Handle a request through the adapter\n * @param {Object} req - HTTP request\n * @param {Object} res - HTTP response\n * @returns {Promise<void>}\n */\n async handleRequest(req, res) {\n throw new Error(`handleRequest() must be implemented by ${this.name} adapter`);\n }\n\n /**\n * Create standardized context object from request\n * @param {Object} req - HTTP request\n * @param {Object} res - HTTP response\n * @returns {Object} - Standardized context object\n */\n createContext(req, res) {\n const url = new URL(req.url || req.originalUrl, `http://${req.headers.host}`);\n\n return {\n req: {\n method: req.method,\n url: url.toString(),\n path: url.pathname,\n headers: Object.fromEntries(\n Object.entries(req.headers).map(([k, v]) => [k.toLowerCase(), v])\n ),\n query: req.query || parseQuery(url.searchParams),\n body: req.body || null,\n raw: { req, res },\n params: {}\n },\n res,\n respond: new RespondHelpers(),\n };\n }\n\n /**\n * Send response using standardized response format\n * @param {Object} res - HTTP response\n * @param {Object} response - Response object from route handler\n * @param {boolean} isHead - Whether this is a HEAD request\n * @returns {Promise<void>}\n */\n async sendResponse(res, response, isHead = false) {\n // Default to 204 if no response object was returned\n const resp = response ?? { type: 'text', status: 204, headers: {}, body: '' };\n\n if (resp.type === 'handled') {\n return;\n }\n\n if (res.headersSent) return; // defensive guard\n\n // Set status and headers (normalize keys)\n res.statusCode = resp.status ?? 200;\n if (resp.headers) {\n for (const [k, v] of Object.entries(resp.headers)) {\n res.setHeader(k.toLowerCase(), v);\n }\n }\n\n // Respect HEAD requests: send headers only\n if (isHead) {\n return res.end();\n }\n\n switch (resp.type) {\n case 'json': {\n if (!res.getHeader('content-type')) {\n res.setHeader('content-type', 'application/json; charset=utf-8');\n }\n return res.end(JSON.stringify(resp.body));\n }\n\n case 'text': {\n if (!res.getHeader('content-type')) {\n res.setHeader('content-type', 'text/plain; charset=utf-8');\n }\n return res.end(resp.body ?? '');\n }\n\n case 'html': {\n if (!res.getHeader('content-type')) {\n res.setHeader('content-type', 'text/html; charset=utf-8');\n }\n return res.end(resp.body ?? '');\n }\n\n case 'file': {\n return await this.serveFile(res, resp.path);\n }\n\n case 'stream': {\n const b = resp.body;\n if (!b) return res.end();\n // Node stream\n if (typeof b.pipe === 'function') return b.pipe(res);\n // AsyncIterable\n if (Symbol.asyncIterator in Object(b)) {\n for await (const chunk of b) {\n if (!res.write(chunk)) {\n await new Promise(r => res.once('drain', r));\n }\n }\n return res.end();\n }\n // Fallback\n return res.end(b);\n }\n\n default:\n return res.end('');\n }\n }\n\n /**\n * Serve static files with proper MIME types and streaming\n * @param {Object} res - HTTP response\n * @param {string} filePath - Path to file to serve\n * @returns {Promise<void>}\n */\n async serveFile(res, filePath) {\n const fs = await import('node:fs');\n const fsp = await import('node:fs/promises');\n const path = await import('node:path');\n const { pipeline } = await import('node:stream');\n const { promisify } = await import('node:util');\n \n const pipelineAsync = promisify(pipeline);\n\n const MIME = {\n '.html': 'text/html; charset=utf-8',\n '.css': 'text/css; charset=utf-8',\n '.js': 'application/javascript; charset=utf-8',\n '.mjs': 'application/javascript; charset=utf-8',\n '.json': 'application/json; charset=utf-8',\n '.svg': 'image/svg+xml',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.gif': 'image/gif',\n '.ico': 'image/x-icon',\n '.woff': 'font/woff',\n '.woff2': 'font/woff2',\n '.ttf': 'font/ttf',\n '.eot': 'application/vnd.ms-fontobject'\n };\n\n try {\n const st = await fsp.stat(filePath);\n if (!st.isFile()) {\n res.statusCode = 404;\n res.setHeader('content-type', 'text/plain; charset=utf-8');\n return res.end('Not Found');\n }\n\n const ext = path.extname(filePath).toLowerCase();\n if (!res.getHeader('content-type')) {\n res.setHeader('content-type', MIME[ext] ?? 'application/octet-stream');\n }\n res.setHeader('content-length', String(st.size));\n\n const rs = fs.createReadStream(filePath);\n rs.on('error', () => {\n if (!res.headersSent) res.statusCode = 404;\n res.end('Not Found');\n });\n await pipelineAsync(rs, res); // backpressure-aware piping\n } catch {\n if (!res.headersSent) {\n res.statusCode = 404;\n res.setHeader('content-type', 'text/plain; charset=utf-8');\n }\n res.end('Not Found');\n }\n }\n\n /**\n * Handle request errors consistently\n * @param {Object} res - HTTP response\n * @param {Error} error - Error that occurred\n * @returns {Promise<void>}\n */\n async handleError(res, error) {\n this.log?.error?.('Request handling error:', error);\n if (!res.headersSent) {\n res.statusCode = 500;\n res.setHeader('content-type', 'text/plain; charset=utf-8');\n res.end('Internal Server Error');\n }\n }\n}\n\n/**\n * Route object structure that adapters receive from Server kernel\n */\nexport class ServerRoute {\n constructor(method, path, handler, options = {}) {\n this.method = method.toUpperCase();\n this.path = path;\n this.handler = handler;\n this.options = options;\n this.params = options.params || [];\n }\n}\n\n/**\n * Hook object structure for lifecycle management\n */\nexport class ServerHooks {\n constructor() {\n this.onRequest = null;\n this.preHandler = null;\n this.onSend = null;\n this.onError = null;\n }\n}\n\n/**\n * Context object passed to route handlers\n */\nexport class ServerContext {\n constructor(req, res, state, cache) {\n this.req = req;\n this.res = res;\n this.state = state;\n this.cache = cache;\n this.respond = new RespondHelpers();\n }\n}\n\n/**\n * Response helpers for route handlers\n */\nexport class RespondHelpers {\n handled() {\n return { type: 'handled' };\n }\n\n json(data, status = 200, headers = {}) {\n return { type: 'json', status, headers, body: data };\n }\n\n text(data, status = 200, headers = {}) {\n return { type: 'text', status, headers, body: data };\n }\n\n html(data, status = 200, headers = {}) {\n return { type: 'html', status, headers, body: data };\n }\n\n file(path, status = 200, headers = {}) {\n return { type: 'file', status, headers, path };\n }\n\n stream(body, status = 200, headers = {}) {\n return { type: 'stream', status, headers, body };\n }\n\n redirect(location, status = 302, headers = {}) {\n return { type:'text', status, headers: { ...headers, location }, body: '' };\n }\n}\n", "/**\n * Express adapter for Server with full middleware support\n */\nimport { AdapterInterface } from './AdapterInterface.js';\n\nexport class ExpressAdapter extends AdapterInterface {\n #connections = new Set();\n\n constructor(express = null) {\n super('express');\n this.express = express;\n this.app = null;\n }\n\n async initialize(kernel, opts = {}, log = null) {\n await super.initialize(kernel, opts, log);\n \n // Import Express\n if (!this.express) {\n try {\n this.express = await import('express');\n this.express = this.express.default;\n } catch (error) {\n throw new Error('Express not installed. Run: npm install express');\n }\n }\n\n // Create Express app\n this.app = this.express();\n\n // Apply default middleware (can be overridden by user middleware)\n const middleware = opts.middleware || [];\n if (!middleware.length || !this.#hasBodyParser(middleware)) {\n this.app.use(this.express.json());\n this.app.use(this.express.urlencoded({ extended: true }));\n }\n\n // Apply user-defined middleware\n if (middleware.length > 0) {\n this.log?.info(`Applying ${middleware.length} middleware functions`);\n \n for (const [index, mw] of middleware.entries()) {\n try {\n this.app.use(mw);\n this.log?.debug(`Applied middleware ${index + 1}/${middleware.length}`);\n } catch (error) {\n throw new Error(`Failed to apply middleware[${index}]: ${error.message}`);\n }\n }\n }\n\n // Additional middleware will be mounted by the server before kernel handler registration\n }\n\n registerKernelHandler() {\n if (!this.app) return;\n\n this.app.use(async (req, res, next) => {\n if (res.headersSent) return;\n await this.handleRequest(req, res);\n });\n }\n\n getExpressApp() {\n return this.app;\n }\n\n async start({ port = 3000, host = '0.0.0.0' } = {}) {\n return new Promise((resolve, reject) => {\n this.server = this.app.listen(port, host, (err) => {\n if (err) {\n reject(err);\n } else {\n // Track connections for clean shutdown\n this.server.on('connection', (conn) => {\n this.#connections.add(conn);\n conn.on('close', () => {\n this.#connections.delete(conn);\n });\n });\n\n this.log?.info(`Express Server with middleware listening on http://${host}:${port}`);\n resolve(this.server);\n }\n });\n });\n }\n\n async stop() {\n if (this.server?.close) {\n // Destroy all active connections\n for (const conn of this.#connections) {\n conn.destroy();\n }\n this.#connections.clear();\n\n return new Promise((resolve) => {\n this.server.close(() => {\n this.log?.info('Express Server stopped');\n resolve();\n });\n });\n }\n }\n\n async handleRequest(req, res) {\n if (res.headersSent) return;\n try {\n // Create context from Express request\n const ctx = this.createContext(req, res);\n \n // Delegate to kernel for route matching and handling\n const response = await this.kernel.handle(ctx);\n \n // Send response using shared method\n await this.sendResponse(res, response, req.method === 'HEAD');\n\n } catch (error) {\n await this.handleError(res, error);\n }\n }\n\n /**\n * Check if middleware array contains body parser\n * @private\n */\n #hasBodyParser(middlewareArray) {\n return middlewareArray.some(mw => {\n // Check for common body parser middleware names\n const name = mw.name?.toLowerCase() || mw.toString().toLowerCase();\n return name.includes('json') || name.includes('urlencoded') || name.includes('bodyparser');\n });\n }\n}\n", "// Import URLPattern polyfill synchronously - no-op on modern Node.js\nimport 'urlpattern-polyfill';\n\n/**\n * Compile a route pattern into a matcher function using URLPattern\n * @param {string} pattern - Route pattern (e.g., '/users/:id', '/api/*')\n * @returns {Function} - Function that returns params object or null\n */\nexport function compileRoute(pattern) {\n // URLPattern supports :param syntax directly, no conversion needed\n const pat = new URLPattern({ pathname: pattern });\n \n return (pathname) => {\n const match = pat.exec({ pathname });\n return match?.pathname.groups ?? null;\n };\n}\n\n/**\n * Parse route parameters from a route path for documentation\n * @param {string} routePath - The route path (e.g., '/users/:id/posts/:postId')\n * @returns {Array} Array of parameter objects with name and type info\n */\nexport function parseRouteParams(routePath) {\n const paramRegex = /:([a-zA-Z_][a-zA-Z0-9_]*)(\\?)?(\\*)?/g;\n const params = [];\n let match;\n \n while ((match = paramRegex.exec(routePath)) !== null) {\n const [, name, optional, splat] = match;\n params.push({\n name,\n optional: !!optional,\n splat: !!splat,\n fullMatch: match[0]\n });\n }\n \n // Also handle standalone wildcard routes (*)\n if (routePath.includes('*') && !routePath.includes(':*')) {\n params.push({\n name: 'wild',\n optional: false,\n splat: true,\n fullMatch: '*'\n });\n }\n \n return params;\n}\n\n/**\n * Replace route parameters with actual values\n * @param {string} routePath - The route path template\n * @param {Object} params - Object with parameter values\n * @param {Object} options - Replacement options\n * @returns {string} - The resolved path\n */\nexport function replaceRouteParams(routePath, params = {}, options = {}) {\n const {\n strict = true, // Throw error if required param is missing\n encode = true, // URL encode parameter values\n defaultValue = '' // Default value for missing params\n } = options;\n \n let resolvedPath = routePath;\n const routeParams = parseRouteParams(routePath);\n \n for (const param of routeParams) {\n const { name, optional, fullMatch } = param;\n let value = params[name];\n \n // Handle missing parameters\n if (value === undefined || value === null) {\n if (optional) {\n // Remove optional parameter and its leading slash if present\n resolvedPath = resolvedPath.replace(`/${fullMatch}`, '').replace(fullMatch, '');\n continue;\n } else if (strict) {\n throw new Error(`Missing required route parameter: ${name}`);\n } else {\n value = defaultValue;\n }\n }\n \n // Convert value to string and optionally encode\n const stringValue = String(value);\n const encodedValue = encode ? encodeURIComponent(stringValue) : stringValue;\n \n // Replace the parameter in the path\n resolvedPath = resolvedPath.replace(fullMatch, encodedValue);\n }\n \n // Clean up any double slashes that might have been created\n resolvedPath = resolvedPath.replace(/\\/+/g, '/');\n \n return resolvedPath;\n}\n", "import { compileRoute } from './utils/routeMatch.js';\n\n/**\n * Kernel handles route registration and matching\n * Separates routing logic from HTTP protocol handling\n */\nexport class Kernel {\n #routes = []; // { method, path, match, handler, mode, revalidate, ... }\n #appHandlers = []; // [{ match, handle, cleanup? }]\n #hooks = { \n onRequest: null, \n preHandler: null, \n onSend: null, \n onError: null \n };\n\n #staticFallback = null;\n\n constructor() {}\n\n /**\n * Register multiple routes at once\n * @param {Array} rawRoutes - Array of route objects\n */\n registerRoutes(rawRoutes) {\n for (const r of rawRoutes) {\n this.registerRoute(r);\n }\n }\n\n /**\n * Register a single route\n * @param {Object} route - Route object with method, path, handler, etc.\n */\n registerRoute(route) {\n const compiledRoute = {\n ...route,\n match: compileRoute(route.path)\n };\n this.#routes.push(compiledRoute);\n }\n\n setAppHandlers(handlers = []) {\n this.#appHandlers = Array.isArray(handlers) ? handlers : [];\n }\n\n async cleanupAppHandlers() {\n for (const handler of this.#appHandlers) {\n if (handler?.cleanup) {\n await handler.cleanup();\n }\n }\n this.#appHandlers = [];\n }\n\n /**\n * Configure hooks\n * @param {Object} hooks - Hook functions\n */\n hooks(h) { \n Object.assign(this.#hooks, h); \n }\n\n /**\n * Set static file fallback handler\n * @param {string} outputDir - Directory to serve static files from\n * @param {Function} handler - Static file handler function\n */\n setStaticFallback(outputDir, handler) {\n this.#staticFallback = { outputDir, handler };\n }\n\n /**\n * Handle a request through the routing system\n * @param {Object} ctx - Request context\n * @returns {Object} Response object\n */\n async handle(ctx) {\n let response;\n try {\n // onRequest can short-circuit\n const onReqOut = await this.#hooks.onRequest?.(ctx);\n if (onReqOut) { response = onReqOut; return response; }\n\n // app handlers first\n for (const handler of this.#appHandlers) {\n try {\n if (!handler?.match || !handler?.handle) continue;\n if (await handler.match(ctx.req)) {\n const handlerResponse = await handler.handle(ctx);\n if (handlerResponse) {\n response = handlerResponse;\n return response;\n }\n }\n } catch (handlerError) {\n response = (await this.#hooks.onError?.(ctx, handlerError))\n ?? ctx.respond.text('Internal Server Error', 500);\n return response;\n }\n }\n\n // route match \u2026\n let matchParams = null;\n const route = this.#routes.find(r => {\n if (r.method !== ctx.req.method) return false;\n const m = r.match(ctx.req.path);\n if (m) { matchParams = m; return true; }\n return false;\n });\n\n if (!route) {\n if (this.#staticFallback) {\n const staticResponse = await this.#staticFallback.handler(ctx, this.#staticFallback.outputDir);\n response = (staticResponse && staticResponse.status !== 404)\n ? staticResponse\n : ctx.respond.text('Not Found', 404);\n } else {\n response = ctx.respond.text('Not Found', 404);\n }\n return response;\n }\n\n ctx.req.params = matchParams || {};\n\n // preHandler can short-circuit\n const preOut = await this.#hooks.preHandler?.(ctx, route);\n if (preOut) { response = preOut; return response; }\n\n // route handler\n response = await route.handler(ctx);\n\n } catch (err) {\n response = (await this.#hooks.onError?.(ctx, err))\n ?? ctx.respond.text('Internal Server Error', 500);\n } finally {\n await this.#hooks.onSend?.(ctx, response);\n }\n return response ?? ctx.respond.text('', 204);\n }\n\n\n /**\n * Get all registered routes\n * @returns {Array} Array of registered routes\n */\n getRoutes() {\n return this.#routes.map(route => ({\n method: route.method,\n path: route.path,\n params: route.params || [],\n compiled: true\n }));\n }\n}\n", "/**\n * HTTP Adapter for Node.js native HTTP server\n * Thin I/O shim: normalize req/res, call kernel, send response\n */\nimport http from 'node:http';\nimport { AdapterInterface } from './AdapterInterface.js';\nimport { parseBody } from '../utils/httpParsing.js';\n\nexport class HttpAdapter extends AdapterInterface {\n #connections = new Set();\n\n constructor() {\n super('http');\n }\n\n async initialize(kernel, opts = {}, log = null) {\n await super.initialize(kernel, opts, log);\n \n // Warn if middleware is configured for HTTP adapter\n if (opts.middleware?.length > 0) {\n log?.warn('Middleware configured but HTTP adapter selected. Consider using adapter: \"express\" for full middleware support.');\n log?.info('HTTP adapter will simulate middleware using hooks for basic compatibility.');\n }\n }\n\n async start({ port = 3000, host = '0.0.0.0' } = {}) {\n this.server = http.createServer(async (req, res) => {\n try {\n // Simulate middleware execution for HTTP adapter\n if (this.opts.middleware?.length > 0) {\n const success = await this.#simulateMiddleware(req, res, this.opts.middleware);\n if (!success) return; // Response was sent by middleware\n }\n\n // Parse body for HTTP adapter\n if (!req.body) {\n req.body = await parseBody(req);\n }\n\n const ctx = this.createContext(req, res);\n const out = await this.kernel.handle(ctx);\n await this.sendResponse(res, out, req.method === 'HEAD');\n } catch (error) {\n await this.handleError(res, error);\n }\n });\n\n // Track connections for clean shutdown\n this.server.on('connection', (conn) => {\n this.#connections.add(conn);\n conn.on('close', () => {\n this.#connections.delete(conn);\n });\n });\n\n await new Promise((resolve, reject) =>\n this.server.listen(port, host, err => (err ? reject(err) : resolve()))\n );\n\n this.log?.info?.(`HTTP Server listening on http://${host}:${port}`);\n return this.server;\n }\n\n async stop() {\n if (this.server) {\n // Destroy all active connections\n for (const conn of this.#connections) {\n conn.destroy();\n }\n this.#connections.clear();\n\n // Close the server\n await new Promise(resolve => this.server.close(() => resolve()));\n this.server = null;\n }\n }\n\n /**\n * Simulate Express middleware for HTTP adapter\n * Limited compatibility - not all Express middleware will work\n * @private\n */\n async #simulateMiddleware(req, res, middlewareArray) {\n for (const middleware of middlewareArray) {\n try {\n let nextCalled = false;\n const next = (err) => {\n if (err) throw err;\n nextCalled = true;\n };\n\n // Add Express-like methods to response\n if (!res.json) {\n res.json = (data) => {\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify(data));\n return false; // Indicates response was sent\n };\n }\n\n await middleware(req, res, next);\n \n // If next wasn't called and response was sent, stop processing\n if (!nextCalled && res.headersSent) {\n return false;\n }\n } catch (error) {\n this.log?.error(`Middleware simulation error: ${error.message}`);\n res.statusCode = 500;\n res.end('Internal Server Error');\n return false;\n }\n }\n return true; // Continue to kernel\n }\n\n}\n", "import chalk from 'chalk';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\n\nconst execAsync = promisify(exec);\n\n/**\n * Display a pretty server ready message with clickable URL\n * @param {object} options - Server options\n * @param {number} options.port - Server port\n * @param {string} options.host - Server host\n * @param {string} options.mode - Server mode (development/production)\n * @param {boolean|string} [options.open] - Browser launch control:\n * true = open the default server URL,\n * false = don't open anything,\n * string = open that specific URL.\n * Defaults to true in development mode, false otherwise.\n * @param {object} logger - Logger instance\n */\nexport async function displayServerReady({ port, host, mode, open }, logger) {\n const protocol = mode === 'production' ? 'https' : 'http';\n const url = `${protocol}://${host === '0.0.0.0' ? 'localhost' : host}:${port}`;\n \n const banner = [\n '',\n chalk.bold.green('\uD83D\uDE80 Server Ready! \uD83D\uDE80'),\n '',\n ` ${chalk.gray('Mode')} ${chalk.white(mode.toUpperCase())}`,\n ` ${chalk.gray('URL')} ${chalk.cyan.underline(url)}`,\n ` ${chalk.gray('Host')} ${chalk.white(host)}:${chalk.white(port)}`,\n ''\n ];\n\n banner.forEach(line => logger.info(line));\n\n const shouldOpen = open !== undefined ? open : (mode === 'development');\n\n if (shouldOpen !== false) {\n const target = typeof shouldOpen === 'string' ? shouldOpen : url;\n try {\n await openBrowser(target);\n logger.info(chalk.green('\uD83C\uDF10 Browser opened automatically'));\n } catch (error) {\n logger.debug('Could not open browser automatically:', error.message);\n }\n }\n\n const commands = [\n '',\n chalk.gray('\uD83D\uDCA1 Quick Commands:'),\n chalk.gray(` \u2022 Press ${chalk.yellow('Ctrl+C')} to stop the server`),\n chalk.gray(` \u2022 Visit ${chalk.cyan(url)} to view your site`),\n chalk.gray(` \u2022 Check the console for live reload updates`),\n ''\n ];\n\n commands.forEach(line => logger.info(line));\n}\n\n/**\n * Open browser with the given URL\n * @param {string} url - URL to open\n */\nasync function openBrowser(url) {\n const platform = process.platform;\n let command;\n\n switch (platform) {\n case 'darwin': // macOS\n command = `open \"${url}\"`;\n break;\n case 'win32': // Windows\n command = `start \"${url}\"`;\n break;\n default: // Linux and others\n command = `xdg-open \"${url}\"`;\n break;\n }\n\n try {\n await execAsync(command);\n } catch (error) {\n throw new Error(`Failed to open browser: ${error.message}`);\n }\n}", "import { ServiceProvider, definitionType } from '@jucie.io/engine';\nimport { Kernel } from './Kernel.js';\nimport { HttpAdapter } from './adapters/HttpAdapter.js';\nimport { displayServerReady } from './utils/serverReady.js';\n\nexport class Server extends ServiceProvider {\n static manifest = {\n name: 'Server',\n namespace: 'server',\n version: '1.0.0'\n };\n\n #routes = [];\n #middleware = [];\n #adapter = null;\n #hooks = {\n onRequest: null,\n preHandler: null,\n onSend: null,\n onError: null\n };\n #live = false;\n #liveConfig = {};\n #factories = [];\n\n actions(useContext) { \n return {\n use: (...factories) => {\n this.#factories.push(...factories);\n return this;\n },\n // Add a route\n\n add: (method, path, handler, meta = {}) => {\n this.#addRoute(null, method, path, handler, meta);\n },\n\n // Set server adapter\n useAdapter: (adapter) => {\n this.#adapter = adapter;\n return this;\n },\n\n // Configure hooks\n hooks: (hooks) => {\n this.#hooks = { ...this.#hooks, ...hooks };\n return this;\n },\n\n // Start listening server\n listen: async (opts = {}) => {\n this.#liveConfig = { ...this.config, ...opts };\n this.#live = true;\n this.#initializeFactories();\n\n if (this.#liveConfig.middleware && !Array.isArray(this.#liveConfig.middleware)) {\n throw new Error('opts.middleware must be an array');\n }\n\n const allMiddleware = [\n ...(this.#liveConfig.middleware || []),\n ...this.#middleware\n ];\n this.#liveConfig.middleware = allMiddleware.length > 0 ? allMiddleware : undefined;\n\n const relay = useContext('relay');\n const port = this.#liveConfig.port || 3000;\n const host = this.#liveConfig.host || '0.0.0.0';\n const log = useContext('log');\n \n // Create kernel with services\n const kernel = new Kernel();\n\n // Configure kernel hooks\n kernel.hooks(this.#hooks);\n\n // 1) Register app routes first\n kernel.registerRoutes(this.#routes);\n\n // 2) Add system routes (won't shadow user routes)\n kernel.registerRoutes([\n {\n method: 'GET',\n path: '/health',\n handler: (ctx) => ctx.respond.json({\n status: 'ok',\n timestamp: new Date().toISOString(),\n mode: this.#liveConfig.mode || 'production'\n })\n },\n {\n method: 'GET',\n path: '/api/info',\n handler: (ctx) => ctx.respond.json({\n name: 'Info',\n version: '1.0.0',\n mode: this.#liveConfig.mode || 'production',\n routes: this.#routes.length\n })\n }\n ]);\n\n // 3) Configure static file serving as 404 fallback\n if (this.#liveConfig.outputDir) {\n kernel.setStaticFallback(this.#liveConfig.outputDir, (ctx, outputDir) => {\n return this.#serveStaticFile(ctx, outputDir);\n });\n }\n\n // 4) Boot adapter with middleware support\n if (!this.#adapter) {\n // Choose adapter based on config\n if (this.#liveConfig.adapter === 'express' || this.#liveConfig.middleware?.length > 0) {\n const { ExpressAdapter } = await import('./adapters/ExpressAdapter.js');\n this.#adapter = ExpressAdapter.create();\n log.debug('Using Express adapter for middleware support');\n } else {\n this.#adapter = HttpAdapter.create();\n log.debug('Using HTTP adapter');\n }\n }\n\n // Pass configuration to adapter\n await this.#adapter.initialize(kernel, this.#liveConfig, log);\n\n if (typeof this.#adapter.registerKernelHandler === 'function') {\n this.#adapter.registerKernelHandler(this.#liveConfig);\n }\n \n // Start the server and return the instance\n const server = await this.#adapter.start({ port, host });\n \n // Display pretty server ready message\n const actualPort = server.address()?.port || port;\n await displayServerReady({ \n port: actualPort, \n host, \n mode: this.#liveConfig.mode || 'production',\n open: this.#liveConfig.open,\n }, log);\n \n // Broadcast server ready event\n relay.broadcast('server:ready', server);\n return server;\n },\n\n // Get all routes\n getRoutes: () => this.#routes,\n\n // Clear all routes (useful for testing)\n clearRoutes: () => {\n this.#routes = [];\n },\n\n // Stop the server\n stop: async () => {\n if (this.#adapter) {\n await this.#adapter.stop();\n }\n },\n\n // Check if server is running\n isRunning: () => this.#adapter && this.#adapter.isRunning(),\n\n // Get the underlying HTTP server (for Socket.IO integration)\n getHttpServer: () => {\n if (this.#adapter) {\n return this.#adapter.getHttpServer();\n }\n return null;\n }\n };\n }\n /**\n * Serve static files from the output directory\n * @private\n */\n\n #normalizePath(urlPath) {\n return ('/' + urlPath).replace(/\\/\\/+/g, '/').replace(/\\/+$/, '') || '/';\n }\n\n #addRoute(basePath = '', method, path, handler, meta = {}, children = []) {\n if (basePath) {\n path = this.#normalizePath(basePath + '/' + path);\n }\n if (Array.isArray(children)) {\n for (const child of children) {\n if (typeof child === 'function') {\n if (!this.#live) {\n this.#factories.push(child);\n } else {\n this.#use(child);\n }\n } else {\n this.#addRoute(path, child.method, child.path, child.handler, child.meta, child.children);\n }\n }\n } else if (typeof children === 'function') {\n if (!this.#live) {\n this.#factories.push(children);\n } else {\n this.#use(children);\n }\n }\n\n this.#routes.push({\n method: method.toUpperCase(),\n path,\n handler,\n meta\n });\n }\n\n #initializeFactories() {\n if (!this.#live) {\n return;\n }\n\n if (this.#factories.length === 0) {\n return;\n }\n\n this.#use(...this.#factories);\n this.#factories = [];\n }\n\n #use(...factories) {\n try {\n for (const factory of factories) {\n const type = definitionType(factory);\n switch (type) {\n case 'routes':\n const routePrefix = factory._name ? `/${factory._name}` : null;\n const routes = factory(this.useContext, this.#liveConfig);\n if (Array.isArray(routes)) {\n for (const route of routes) {\n this.#addRoute(routePrefix, route.method, route.path, route.handler, route.meta, route.children);\n }\n } else {\n throw new Error('Routes must be an array');\n }\n break;\n\n case 'route':\n const routeBase = factory._name ? `/${factory._name}` : null;\n const route = factory(this.useContext, this.#liveConfig);\n if (typeof route === 'object' && route !== null) {\n this.#addRoute(routeBase, route.method, route.path, route.handler, route.meta, route.children);\n } else {\n throw new Error('Route must be an object');\n }\n break;\n\n case 'hooks':\n const hooks = factory(this.useContext, this.#liveConfig);\n if (typeof hooks === 'object' && hooks !== null) {\n this.#hooks = { ...this.#hooks, ...hooks };\n } else {\n throw new Error('Hooks must be an object');\n }\n break;\n \n case 'hook':\n const hook = factory(this.useContext, this.#liveConfig);\n if (typeof hook === 'function') {\n this.#hooks = { ...this.#hooks, ...hook };\n } else {\n throw new Error('Hook must be a function');\n }\n break;\n\n case 'middleware':\n const middleware = factory(this.useContext, this.#liveConfig);\n if (Array.isArray(middleware)) {\n this.#middleware.push(...middleware);\n } else {\n throw new Error('Middleware must be an array');\n }\n break;\n\n default:\n throw new Error(`Invalid factory type: ${type}`);\n }\n }\n } catch (error) {\n console.error(`\\n\u274C Error using factories: ${error.message}\\n`);\n throw error;\n }\n }\n\n async #serveStaticFile(context, outputDir) {\n const fs = await import('fs/promises');\n const path = await import('path');\n \n try {\n // Get the requested file path\n const requestPath = context.req.path === '/' ? '/index.html' : context.req.path;\n let filePath = path.join(outputDir, requestPath);\n let stats;\n \n try {\n // Try the path as-is first\n stats = await fs.stat(filePath);\n } catch (error) {\n // If it fails and has no extension, try adding .html\n const ext = path.extname(requestPath);\n if (!ext) {\n const htmlPath = path.join(outputDir, `${requestPath}.html`);\n try {\n stats = await fs.stat(htmlPath);\n filePath = htmlPath; // Use the .html version\n } catch (htmlError) {\n // Neither worked, return 404\n return context.respond.text('Not Found', 404);\n }\n } else {\n // Had an extension but file not found\n return context.respond.text('Not Found', 404);\n }\n }\n \n if (stats.isFile()) {\n // Determine content type\n const ext = path.extname(filePath);\n const contentType = this.#getContentType(ext);\n \n // Read and serve the file\n const content = await fs.readFile(filePath);\n \n // Serve with correct content type\n if (contentType === 'text/html') {\n return context.respond.html(content.toString(), 200);\n } else if (contentType === 'text/css') {\n return context.respond.text(content.toString(), 200, { 'Content-Type': 'text/css' });\n } else if (contentType === 'application/javascript') {\n return context.respond.text(content.toString(), 200, { 'Content-Type': 'application/javascript' });\n } else if (contentType.startsWith('text/')) {\n return context.respond.text(content.toString(), 200, { 'Content-Type': contentType });\n } else {\n // For binary files, send as file response\n return context.respond.file(filePath, 200, { 'Content-Type': contentType });\n }\n } else {\n return context.respond.text('Not Found', 404);\n }\n } catch (error) {\n return context.respond.text('Not Found', 404);\n }\n }\n\n /**\n * Get content type based on file extension\n * @private\n */\n #getContentType(ext) {\n const types = {\n '.html': 'text/html',\n '.css': 'text/css',\n '.js': 'application/javascript',\n '.json': 'application/json',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.gif': 'image/gif',\n '.svg': 'image/svg+xml',\n '.ico': 'image/x-icon',\n '.woff': 'font/woff',\n '.woff2': 'font/woff2',\n '.ttf': 'font/ttf',\n '.eot': 'application/vnd.ms-fontobject'\n };\n \n return types[ext.toLowerCase()] || 'application/octet-stream';\n }\n}", "import { createDefinition } from '@jucie.io/engine';\n\nexport const defineRoutes = createDefinition('routes', [Array]);\nexport const defineRoute = createDefinition('route', [Object]);", "import { createDefinition } from '@jucie.io/engine';\n\nexport const defineHooks = createDefinition('hooks', [Object]);\nexport const defineHook = createDefinition('hook', [Function]);", "import { createDefinition } from '@jucie.io/engine';\n\nexport const defineMiddleware = createDefinition('middleware', [Array]);"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["parseBody", "req", "resolve", "contentType", "body", "chunk", "parseUrlEncoded", "data", "result", "pairs", "pair", "key", "value", "decodedKey", "decodedValue", "arrayKey", "parseQuery", "searchParams", "init_httpParsing", "__esmMin", "AdapterInterface", "ServerRoute", "ServerHooks", "ServerContext", "RespondHelpers", "init_AdapterInterface", "__esmMin", "init_httpParsing", "name", "kernel", "opts", "log", "options", "req", "res", "url", "k", "v", "parseQuery", "response", "isHead", "resp", "b", "chunk", "r", "filePath", "fs", "fsp", "path", "pipeline", "promisify", "pipelineAsync", "MIME", "st", "ext", "rs", "error", "method", "handler", "state", "cache", "data", "status", "headers", "body", "location", "ExpressAdapter_exports", "__export", "ExpressAdapter", "init_ExpressAdapter", "__esmMin", "init_AdapterInterface", "AdapterInterface", "#connections", "express", "kernel", "opts", "log", "middleware", "#hasBodyParser", "index", "mw", "error", "req", "res", "next", "port", "host", "resolve", "reject", "err", "conn", "ctx", "response", "middlewareArray", "name", "compileRoute", "pattern", "pat", "pathname", "parseRouteParams", "routePath", "paramRegex", "params", "match", "name", "optional", "splat", "replaceRouteParams", "options", "strict", "encode", "defaultValue", "resolvedPath", "routeParams", "param", "fullMatch", "value", "stringValue", "encodedValue", "Kernel", "#routes", "#appHandlers", "#hooks", "#staticFallback", "rawRoutes", "r", "route", "compiledRoute", "compileRoute", "handlers", "handler", "h", "outputDir", "ctx", "response", "onReqOut", "handlerResponse", "handlerError", "matchParams", "m", "staticResponse", "preOut", "err", "init_AdapterInterface", "init_httpParsing", "http", "HttpAdapter", "AdapterInterface", "#connections", "kernel", "opts", "log", "port", "host", "req", "res", "#simulateMiddleware", "parseBody", "ctx", "out", "error", "conn", "resolve", "reject", "err", "middlewareArray", "middleware", "nextCalled", "next", "data", "chalk", "exec", "promisify", "execAsync", "displayServerReady", "port", "host", "mode", "open", "logger", "url", "line", "shouldOpen", "target", "openBrowser", "error", "platform", "command", "ServiceProvider", "definitionType", "Server", "#routes", "#middleware", "#adapter", "#hooks", "#live", "#liveConfig", "#factories", "useContext", "factories", "method", "path", "handler", "meta", "#addRoute", "adapter", "hooks", "opts", "#initializeFactories", "allMiddleware", "relay", "port", "host", "log", "kernel", "Kernel", "ctx", "outputDir", "#serveStaticFile", "ExpressAdapter", "HttpAdapter", "server", "actualPort", "displayServerReady", "#normalizePath", "urlPath", "basePath", "children", "child", "#use", "factory", "type", "routePrefix", "routes", "route", "routeBase", "hook", "middleware", "error", "context", "fs", "requestPath", "filePath", "stats", "htmlPath", "ext", "contentType", "#getContentType", "content", "createDefinition", "defineRoutes", "defineRoute", "createDefinition", "defineHooks", "defineHook", "createDefinition", "defineMiddleware"]
|
|
7
7
|
}
|
package/package.json
CHANGED