gemi 0.90.0 → 0.91.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/ai/Schema.d.ts +5 -0
  2. package/dist/ai/Schema.d.ts.map +1 -1
  3. package/dist/ai/index.js +2 -2
  4. package/dist/ai/index.js.map +1 -1
  5. package/dist/{chunk-ecq15njr.js → chunk-087r45fw.js} +3 -3
  6. package/dist/{chunk-ecq15njr.js.map → chunk-087r45fw.js.map} +1 -1
  7. package/dist/{chunk-e6ngf60r.js → chunk-2dfar4d1.js} +2 -2
  8. package/dist/{chunk-e6ngf60r.js.map → chunk-2dfar4d1.js.map} +1 -1
  9. package/dist/{chunk-r1sj312m.js → chunk-4czqjqs7.js} +2 -2
  10. package/dist/{chunk-r1sj312m.js.map → chunk-4czqjqs7.js.map} +1 -1
  11. package/dist/{chunk-jbzxb75e.js → chunk-66g9yytx.js} +3 -3
  12. package/dist/{chunk-jbzxb75e.js.map → chunk-66g9yytx.js.map} +1 -1
  13. package/dist/{chunk-f64vhjgh.js → chunk-6mdw41s5.js} +3 -3
  14. package/dist/{chunk-f64vhjgh.js.map → chunk-6mdw41s5.js.map} +1 -1
  15. package/dist/{chunk-q6ydpt33.js → chunk-7bmctvep.js} +2 -2
  16. package/dist/{chunk-q6ydpt33.js.map → chunk-7bmctvep.js.map} +1 -1
  17. package/dist/chunk-7ct4y1zh.js +9 -0
  18. package/dist/chunk-7ct4y1zh.js.map +31 -0
  19. package/dist/chunk-ddbbxg9m.js +5 -0
  20. package/dist/{chunk-dk7818hj.js.map → chunk-ddbbxg9m.js.map} +1 -1
  21. package/dist/{chunk-ngq4n2b3.js → chunk-k5j65f2c.js} +2 -2
  22. package/dist/{chunk-ngq4n2b3.js.map → chunk-k5j65f2c.js.map} +1 -1
  23. package/dist/{chunk-bsbn7qtd.js → chunk-p0px3ym0.js} +2 -2
  24. package/dist/{chunk-bsbn7qtd.js.map → chunk-p0px3ym0.js.map} +1 -1
  25. package/dist/{chunk-2e9552jm.js → chunk-q18fb0cr.js} +2 -2
  26. package/dist/{chunk-2e9552jm.js.map → chunk-q18fb0cr.js.map} +1 -1
  27. package/dist/{chunk-3jf1rsbg.js → chunk-vqhcztw0.js} +2 -2
  28. package/dist/{chunk-3jf1rsbg.js.map → chunk-vqhcztw0.js.map} +1 -1
  29. package/dist/{chunk-hdm74jbr.js → chunk-wbdxvmxk.js} +1 -1
  30. package/dist/chunk-wc46df4w.js +5 -0
  31. package/dist/chunk-wc46df4w.js.map +10 -0
  32. package/dist/{chunk-qht6qsvg.js → chunk-wm0sfvwr.js} +2 -2
  33. package/dist/{chunk-qht6qsvg.js.map → chunk-wm0sfvwr.js.map} +1 -1
  34. package/dist/{chunk-6a0grh04.js → chunk-x86hhqy7.js} +2 -2
  35. package/dist/{chunk-6a0grh04.js.map → chunk-x86hhqy7.js.map} +1 -1
  36. package/dist/console/run.js +2 -2
  37. package/dist/console/run.js.map +1 -1
  38. package/dist/database/index.js +1 -1
  39. package/dist/facades/index.js +2 -2
  40. package/dist/facades/index.js.map +1 -1
  41. package/dist/http/HttpRequest.d.ts +27 -2
  42. package/dist/http/HttpRequest.d.ts.map +1 -1
  43. package/dist/http/index.js +2 -2
  44. package/dist/http/index.js.map +1 -1
  45. package/dist/http/validate.d.ts +1 -1
  46. package/dist/http/validate.d.ts.map +1 -1
  47. package/dist/i18n/index.js +2 -2
  48. package/dist/i18n/index.js.map +1 -1
  49. package/dist/kernel/index.js +2 -2
  50. package/dist/kernel/index.js.map +1 -1
  51. package/dist/orm/index.js +2 -2
  52. package/dist/orm/index.js.map +1 -1
  53. package/dist/server/index.js +1 -1
  54. package/dist/services/index.js +2 -2
  55. package/dist/services/index.js.map +1 -1
  56. package/dist/services/queue/work.js +2 -2
  57. package/dist/services/queue/work.js.map +1 -1
  58. package/dist/support/index.js +2 -2
  59. package/dist/support/index.js.map +1 -1
  60. package/package.json +1 -1
  61. package/dist/chunk-126mmhjj.js +0 -7
  62. package/dist/chunk-126mmhjj.js.map +0 -30
  63. package/dist/chunk-4v4v5wkh.js +0 -7
  64. package/dist/chunk-4v4v5wkh.js.map +0 -11
  65. package/dist/chunk-dk7818hj.js +0 -5
  66. /package/dist/{chunk-hdm74jbr.js.map → chunk-wbdxvmxk.js.map} +0 -0
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{i as B,j as e}from"./chunk-qht6qsvg.js";import{ka as D,oa as I,pa as r}from"./chunk-zq5m4scz.js";import"./chunk-8z37k28d.js";import{ic as c,td as o,ud as P}from"./chunk-ecq15njr.js";import"./chunk-jbzxb75e.js";import"./chunk-ngq4n2b3.js";import{Re as f,Se as u,Ve as m}from"./chunk-126mmhjj.js";import{xf as n}from"./chunk-xqyx8kzr.js";import"./chunk-17nh5gfm.js";import"./chunk-6y62ccam.js";import"./chunk-gzfat1x1.js";import"./chunk-49v5xq8q.js";import"./chunk-ttckhvew.js";import"./chunk-cv2sargd.js";import"./chunk-sh1cfx9j.js";import"./chunk-dyq9gcwa.js";import"./chunk-ed346kf4.js";import{Kg as a}from"./chunk-kmebynhc.js";import{Lg as _}from"./chunk-q7gkfkbz.js";import"./chunk-fc28h7g2.js";import{join as M,resolve as yJ,sep as vJ}from"path";import{Duplex as KJ}from"stream";import{constants as L,createBrotliCompress as OJ,createGzip as YJ}from"zlib";var UJ=["br","gzip"],xJ=1024,VJ=5,IJ=19,CJ=6;function LJ(J){if(J===void 0)return 1;if(!/^\d+(\.\d{0,3})?$/.test(J.trim()))return 1;let $=Number(J.trim());return Number.isFinite($)?Math.min($,1):1}function AJ(J){if(J===null||J===void 0)return null;let $=new Map;for(let X of J.split(",")){let[Z,...Q]=X.split(";"),W=Z.trim().toLowerCase();if(W==="")continue;let j=1;for(let G of Q){let Y=G.indexOf("=");if(Y===-1)continue;if(G.slice(0,Y).trim().toLowerCase()==="q"){j=LJ(G.slice(Y+1));break}}$.set(W,j)}return $}function PJ(J,$=UJ){let X=AJ(J);if(!X)return null;let Z=X.get("*"),Q=null,W=0;for(let j of $){let G=X.get(j)??Z??0;if(G>W)Q=j,W=G}return Q}function _J(J,$){if(!J)return!1;return J.split(",").some((X)=>X.trim().toLowerCase().split("=")[0].trim()===$)}function SJ(J,$){if(J==="HEAD")return!1;if($.status<200||$.status===204||$.status===206||$.status===304)return!1;if($.headers.has("Content-Range"))return!1;let X=$.headers.get("Content-Type");if(!X||!/^\s*text\/html\s*(;|$)/i.test(X))return!1;if(!$.body)return!1;let Z=$.headers.get("Content-Encoding");if(Z&&Z.trim().toLowerCase()!=="identity")return!1;if(_J($.headers.get("Cache-Control"),"no-transform"))return!1;let Q=$.headers.get("Content-Length");if(Q!==null&&Number(Q)<xJ)return!1;return!0}function TJ(J){let $=J==="br"?OJ({params:{[L.BROTLI_PARAM_QUALITY]:VJ,[L.BROTLI_PARAM_LGWIN]:IJ},flush:L.BROTLI_OPERATION_FLUSH}):YJ({level:CJ,flush:L.Z_SYNC_FLUSH});return KJ.toWeb($)}function DJ(J){let $=J.get("Vary");if(!$){J.set("Vary","Accept-Encoding");return}let X=$.split(",").map((Z)=>Z.trim().toLowerCase());if(X.includes("*")||X.includes("accept-encoding"))return;J.append("Vary","Accept-Encoding")}function g(J,$){if(!SJ(J.method,$))return $;let X=new Headers($.headers);DJ(X);let Z=PJ(J.headers.get("Accept-Encoding"));if(!Z)return new Response($.body,{status:$.status,statusText:$.statusText,headers:X});let Q;try{Q=TJ(Z)}catch{return new Response($.body,{status:$.status,statusText:$.statusText,headers:X})}return X.set("Content-Encoding",Z),X.delete("Content-Length"),new Response($.body.pipeThrough(Q),{status:$.status,statusText:$.statusText,headers:X})}import{readdir as FJ,stat as NJ}from"fs/promises";import{join as BJ}from"path";function w(J){let $=J.toString(),X=new Bun.CryptoHasher("sha1");return X.update($),X.digest("hex")}async function h(J){let $=new Set;async function X(Z,Q){let W;try{W=await FJ(Z,{withFileTypes:!0})}catch{return}for(let j of W){if(j.name.startsWith("."))continue;if(Q&&j.name==="assets")continue;let G=BJ(Z,j.name),Y=j.isDirectory(),V=j.isFile();if(j.isSymbolicLink())try{let C=await NJ(G);Y=C.isDirectory(),V=C.isFile()}catch{continue}if(V)$.add(G);else if(Y&&!j.isSymbolicLink())await X(G,!1)}}return await X(J,!0),$}var bJ="public, max-age=31536000, must-revalidate";function p(J,$){let X=Bun.file($),Z=X.size,Q=w(X.lastModified),W={"Content-Type":X.type||"application/octet-stream","Cache-Control":bJ,"Accept-Ranges":"bytes",ETag:Q},j=f(J.headers.get("Range"));if(j){let G=u(j,Z);if(!G)return c(Z);return new Response(X.slice(G.start,G.end+1).stream(),{status:206,headers:{...W,"Content-Range":m(G.start,G.end,Z),"Content-Length":String(G.length)}})}return new Response(X.stream(),{headers:{...W,"Content-Length":String(Z)}})}import{stat as EJ}from"fs/promises";var A="app/client.tsx";function d(J,$=D){let X=J[A]?.file;if(!X)return;return{module:I(X,$),preload:F(J,A,$)}}function F(J,$,X=D){let Z=[],Q=new Set,W=(j)=>{if(Q.has(j))return;Q.add(j);let G=J[j];if(!G?.file)return;Z.push(I(G.file,X));for(let Y of G.imports??[])W(Y)};return W($),Z}function l(J,$=30000){let X=JSON.stringify("gemi:chunk-reload"),Z=JSON.stringify(`Failed to fetch dynamically imported module: ${J}`);return`var r=!1;try{var s=window.sessionStorage,m=JSON.parse(s.getItem(${X})||"null");var d=m?Date.now()-m.at:NaN;if(navigator.onLine!==!1&&!(d>=0&&d<${$})){s.setItem(${X},JSON.stringify({url:window.location.href,at:Date.now()}));r=!0}}catch(e){}if(r)window.location.reload();else throw new Error(${Z});export {}`}var MJ=new RegExp(`^${o}/.+\\.m?js$`);function qJ(J){return MJ.test(J)}function i(J){if(qJ(J))return new Response(l(J),{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store"}});if(P(J))return new Response("Not found",{status:404});return}var RJ=`<!DOCTYPE html>
2
+ import{i as B,j as e}from"./chunk-wm0sfvwr.js";import{ka as D,oa as I,pa as r}from"./chunk-zq5m4scz.js";import"./chunk-8z37k28d.js";import{fc as c,qd as o,rd as P}from"./chunk-087r45fw.js";import"./chunk-66g9yytx.js";import"./chunk-k5j65f2c.js";import{Oe as f,Pe as u,Se as m}from"./chunk-7ct4y1zh.js";import{xf as n}from"./chunk-xqyx8kzr.js";import"./chunk-17nh5gfm.js";import"./chunk-6y62ccam.js";import"./chunk-gzfat1x1.js";import"./chunk-49v5xq8q.js";import"./chunk-ttckhvew.js";import"./chunk-cv2sargd.js";import"./chunk-sh1cfx9j.js";import"./chunk-dyq9gcwa.js";import"./chunk-ed346kf4.js";import{Kg as a}from"./chunk-kmebynhc.js";import{Lg as _}from"./chunk-q7gkfkbz.js";import"./chunk-fc28h7g2.js";import{join as M,resolve as yJ,sep as vJ}from"path";import{Duplex as KJ}from"stream";import{constants as L,createBrotliCompress as OJ,createGzip as YJ}from"zlib";var UJ=["br","gzip"],xJ=1024,VJ=5,IJ=19,CJ=6;function LJ(J){if(J===void 0)return 1;if(!/^\d+(\.\d{0,3})?$/.test(J.trim()))return 1;let $=Number(J.trim());return Number.isFinite($)?Math.min($,1):1}function AJ(J){if(J===null||J===void 0)return null;let $=new Map;for(let X of J.split(",")){let[Z,...Q]=X.split(";"),W=Z.trim().toLowerCase();if(W==="")continue;let j=1;for(let G of Q){let Y=G.indexOf("=");if(Y===-1)continue;if(G.slice(0,Y).trim().toLowerCase()==="q"){j=LJ(G.slice(Y+1));break}}$.set(W,j)}return $}function PJ(J,$=UJ){let X=AJ(J);if(!X)return null;let Z=X.get("*"),Q=null,W=0;for(let j of $){let G=X.get(j)??Z??0;if(G>W)Q=j,W=G}return Q}function _J(J,$){if(!J)return!1;return J.split(",").some((X)=>X.trim().toLowerCase().split("=")[0].trim()===$)}function SJ(J,$){if(J==="HEAD")return!1;if($.status<200||$.status===204||$.status===206||$.status===304)return!1;if($.headers.has("Content-Range"))return!1;let X=$.headers.get("Content-Type");if(!X||!/^\s*text\/html\s*(;|$)/i.test(X))return!1;if(!$.body)return!1;let Z=$.headers.get("Content-Encoding");if(Z&&Z.trim().toLowerCase()!=="identity")return!1;if(_J($.headers.get("Cache-Control"),"no-transform"))return!1;let Q=$.headers.get("Content-Length");if(Q!==null&&Number(Q)<xJ)return!1;return!0}function TJ(J){let $=J==="br"?OJ({params:{[L.BROTLI_PARAM_QUALITY]:VJ,[L.BROTLI_PARAM_LGWIN]:IJ},flush:L.BROTLI_OPERATION_FLUSH}):YJ({level:CJ,flush:L.Z_SYNC_FLUSH});return KJ.toWeb($)}function DJ(J){let $=J.get("Vary");if(!$){J.set("Vary","Accept-Encoding");return}let X=$.split(",").map((Z)=>Z.trim().toLowerCase());if(X.includes("*")||X.includes("accept-encoding"))return;J.append("Vary","Accept-Encoding")}function g(J,$){if(!SJ(J.method,$))return $;let X=new Headers($.headers);DJ(X);let Z=PJ(J.headers.get("Accept-Encoding"));if(!Z)return new Response($.body,{status:$.status,statusText:$.statusText,headers:X});let Q;try{Q=TJ(Z)}catch{return new Response($.body,{status:$.status,statusText:$.statusText,headers:X})}return X.set("Content-Encoding",Z),X.delete("Content-Length"),new Response($.body.pipeThrough(Q),{status:$.status,statusText:$.statusText,headers:X})}import{readdir as FJ,stat as NJ}from"fs/promises";import{join as BJ}from"path";function w(J){let $=J.toString(),X=new Bun.CryptoHasher("sha1");return X.update($),X.digest("hex")}async function h(J){let $=new Set;async function X(Z,Q){let W;try{W=await FJ(Z,{withFileTypes:!0})}catch{return}for(let j of W){if(j.name.startsWith("."))continue;if(Q&&j.name==="assets")continue;let G=BJ(Z,j.name),Y=j.isDirectory(),V=j.isFile();if(j.isSymbolicLink())try{let C=await NJ(G);Y=C.isDirectory(),V=C.isFile()}catch{continue}if(V)$.add(G);else if(Y&&!j.isSymbolicLink())await X(G,!1)}}return await X(J,!0),$}var bJ="public, max-age=31536000, must-revalidate";function p(J,$){let X=Bun.file($),Z=X.size,Q=w(X.lastModified),W={"Content-Type":X.type||"application/octet-stream","Cache-Control":bJ,"Accept-Ranges":"bytes",ETag:Q},j=f(J.headers.get("Range"));if(j){let G=u(j,Z);if(!G)return c(Z);return new Response(X.slice(G.start,G.end+1).stream(),{status:206,headers:{...W,"Content-Range":m(G.start,G.end,Z),"Content-Length":String(G.length)}})}return new Response(X.stream(),{headers:{...W,"Content-Length":String(Z)}})}import{stat as EJ}from"fs/promises";var A="app/client.tsx";function d(J,$=D){let X=J[A]?.file;if(!X)return;return{module:I(X,$),preload:F(J,A,$)}}function F(J,$,X=D){let Z=[],Q=new Set,W=(j)=>{if(Q.has(j))return;Q.add(j);let G=J[j];if(!G?.file)return;Z.push(I(G.file,X));for(let Y of G.imports??[])W(Y)};return W($),Z}function l(J,$=30000){let X=JSON.stringify("gemi:chunk-reload"),Z=JSON.stringify(`Failed to fetch dynamically imported module: ${J}`);return`var r=!1;try{var s=window.sessionStorage,m=JSON.parse(s.getItem(${X})||"null");var d=m?Date.now()-m.at:NaN;if(navigator.onLine!==!1&&!(d>=0&&d<${$})){s.setItem(${X},JSON.stringify({url:window.location.href,at:Date.now()}));r=!0}}catch(e){}if(r)window.location.reload();else throw new Error(${Z});export {}`}var MJ=new RegExp(`^${o}/.+\\.m?js$`);function qJ(J){return MJ.test(J)}function i(J){if(qJ(J))return new Response(l(J),{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store"}});if(P(J))return new Response("Not found",{status:404});return}var RJ=`<!DOCTYPE html>
3
3
  <html lang="en">
4
4
  <head>
5
5
  <meta charset="UTF-8" />
@@ -21,4 +21,4 @@ import{i as B,j as e}from"./chunk-qht6qsvg.js";import{ka as D,oa as I,pa as r}fr
21
21
  </html>`;function N(J,$,X){if(!X)console.error(J);else try{X(J instanceof Error?J:Error(String(J),{cause:J}))}catch(Z){console.error(J),console.error(Z)}if(_($))return new Response(JSON.stringify({error:n("server_error","Internal Server Error",500)}),{status:500,headers:{"Content-Type":"application/json"}});return new Response(RJ,{status:500,headers:{"Content-Type":"text/html; charset=utf-8"}})}var kJ={kind:"none"};function s(J){let $=(J??"").trim().toLowerCase();if($===""||$==="false"||$==="off"||$==="0")return kJ;if($==="true")return{kind:"all"};if(/^[1-9]\d*$/.test($))return{kind:"hops",hops:Number($)};throw Error(`GEMI_TRUST_PROXY must be "false", "true" or the number of proxies in front of the app (e.g. 1). Got ${JSON.stringify(J)}.`)}function t(J,$,X){if(X.kind==="all"){if(!J.get("x-forwarded-for")&&$)J.set("x-forwarded-for",$);return}J.delete("x-real-ip");let Z=$;if(X.kind==="hops"){let Q=(J.get("x-forwarded-for")??"").split(",").map((j)=>j.trim()).filter(Boolean),W=Q.length-X.hops;Z=W>=0?Q[W]:Q[0]??$}if(Z)J.set("x-forwarded-for",Z);else J.delete("x-forwarded-for")}var S=a(),gJ=M(S,"app"),x=M(S,"dist"),b=M(x,"client");function wJ(J){let $;try{$=decodeURIComponent(J)}catch{return null}let X=yJ(b,"."+$.replace("/assets/assets","/assets"));return X.startsWith(b+vJ)?X:null}async function fJ(J){try{return(await EJ(J)).isFile()}catch{return!1}}async function L3(J,$){let X=await import(`${x}/client/.vite/manifest.json`),Z=await import(`${x}/server/.vite/manifest.json`),Q=await r(`${x}/client`);process.env.ROOT_DIR=S,process.env.APP_DIR=gJ,process.env.DIST_DIR=x;let W={},j={},G={},Y={},V={},C=(z,H)=>`"${z}": () => import("${H}")`,q=[];for(let z of["404",...J.getFlatComponentTree.call(J)]){let H=Z[`app/views/${z}.tsx`];if(!H?.file){console.log(`Server file not found for ${z}`),console.log(H);let U=Object.keys(Z),y=`app/views/${z}.tsx`;console.log(`${y} not found in server manifest`),console.log(U)}let O=await import(`${process.env.DIST_DIR}/server/${H?.file}`);W[z]=O.default,j[z]=O.OpenGraph,G[z]=O;let K=X[`app/views/${z}.tsx`];if(K?.css&&K?.css.length>0)Y[z]=K?.css;if(K)q.push(C(z,I(K?.file,Q))),V[z]=F(X,`app/views/${z}.tsx`,Q)}let JJ=`{${q.join(",")}}`,R=d(X,Q);if(!R)console.error(`Client manifest has no "${A}" entry \u2014 dist/client is incomplete, so documents will render but never hydrate.`);let $J=X["app/client.tsx"]?.css??[],XJ=(await Promise.all($J.map((z)=>Bun.file(`${x}/client/${z}`).text()))).join(`
22
22
  `),ZJ=await h(b);async function zJ(z){let{pathname:H}=new URL(z.url);if(_(H))return await T(z,H);let O=wJ(H);if(P(H)||H.startsWith("/.well-known")||O!==null&&ZJ.has(O)){if(!O||!await fJ(O))return i(H)??await T(z,H);try{return p(z,O)}catch(U){return J.onException?.(U),new Response("Not found",{status:404})}}return await T(z,H)}async function T(z,H){let O=J.fetch.bind(J);try{let K=await O(z);if(K instanceof Response)return K;else{let U=[];return U.push({content:XJ}),await K({getStyles:async(v)=>{if(!v)return B([]);for(let GJ of v){let WJ=X[`app/views/${GJ}.tsx`];for(let E of WJ?.css??[]){let HJ=Bun.file(`${process.env.DIST_DIR}/client/${E}`);U.push({id:E,content:await HJ.text()})}}return B(U)},clientEntry:R,modulePreloadManifest:V,loaders:JJ,viewImportMap:W,viewModules:G,ogMap:j,cssManifest:Y,assetBase:Q})}}catch(K){return N(K,H,J.onException)}}let QJ=(process.env.GEMI_COMPRESSION??"auto").toLowerCase()!=="off",jJ=s(process.env.GEMI_TRUST_PROXY),k=Bun.serve({maxRequestBodySize:10737418240,fetch:async(z,H)=>{t(z.headers,H.requestIP(z)?.address??null,jJ);let O=await $(z,(K)=>J.withGlobalMiddleware(K,zJ,(U)=>N(U,new URL(K.url).pathname,J.onException)));return QJ?g(z,O):O},idleTimeout:Number(process.env.SERVER_IDLE_TIMEOUT??10),port:process.env.PORT||5173});return e({port:k.port,rootDir:S}),k}export{L3 as httpProd};
23
23
 
24
- //# debugId=3A83EEF5C22A479664756E2164756E21
24
+ //# debugId=A9B174F1EABAE09F64756E2164756E21
@@ -13,6 +13,6 @@
13
13
  "/**\n * Which `X-Forwarded-For` entries the production server believes (#8).\n *\n * `X-Forwarded-For` is written by whoever sends the request. A client talking\n * to the app directly — or through a proxy that appends to the header rather\n * than replacing it — picks any address it likes, and `clientIp` (the rate\n * limiter's default key) used to read the left-most entry, which is exactly\n * the one the client wrote. So the server decides here, once, at the edge,\n * and hands the app a single address it can rely on:\n *\n * - `none` (the default): no proxy is trusted. The header is replaced with the\n * socket's peer address, and `X-Real-IP` is dropped.\n * - `hops` (`GEMI_TRUST_PROXY=<n>`): the `n` proxies nearest the app are\n * trusted. Each appends the address it was reached from, so the client is\n * the `n`-th entry from the right of `X-Forwarded-For`. Anything\n * further left was written by someone the app does not trust and is dropped.\n * - `all` (`GEMI_TRUST_PROXY=true`): the inbound header is passed through\n * unchanged, as before 0.88. Only sound behind a proxy that overwrites\n * `X-Forwarded-For` (and `X-Real-IP`) rather than appending to it.\n */\nexport type ForwardedTrust =\n | { kind: \"none\" }\n | { kind: \"all\" }\n | { kind: \"hops\"; hops: number };\n\nconst NONE: ForwardedTrust = { kind: \"none\" };\n\n/**\n * `GEMI_TRUST_PROXY` as a policy. Unset, empty, `false`, `off` and `0` trust\n * nothing; `true` trusts everything; a positive integer is a hop count.\n * Anything else throws, so a typo fails the boot instead of silently trusting\n * nothing (every client sharing the proxy's address) or everything.\n */\nexport function parseTrustProxy(value: string | undefined): ForwardedTrust {\n const raw = (value ?? \"\").trim().toLowerCase();\n if (raw === \"\" || raw === \"false\" || raw === \"off\" || raw === \"0\") {\n return NONE;\n }\n if (raw === \"true\") {\n return { kind: \"all\" };\n }\n if (/^[1-9]\\d*$/.test(raw)) {\n return { kind: \"hops\", hops: Number(raw) };\n }\n throw new Error(\n `GEMI_TRUST_PROXY must be \"false\", \"true\" or the number of proxies in front of the app (e.g. 1). Got ${JSON.stringify(value)}.`,\n );\n}\n\n/**\n * Rewrites `headers` so `X-Forwarded-For` holds what `trust` says the client\n * address is. `peer` is the socket's remote address — `null` for a unix\n * socket, where the immediate hop is still counted as one proxy.\n */\nexport function applyForwardedTrust(\n headers: Headers,\n peer: string | null,\n trust: ForwardedTrust,\n): void {\n if (trust.kind === \"all\") {\n if (!headers.get(\"x-forwarded-for\") && peer) {\n headers.set(\"x-forwarded-for\", peer);\n }\n return;\n }\n\n // Under any other policy `X-Real-IP` is as client-written as the rest; the\n // address the app should use is the one left in `X-Forwarded-For`.\n headers.delete(\"x-real-ip\");\n\n let client: string | null = peer;\n if (trust.kind === \"hops\") {\n const entries = (headers.get(\"x-forwarded-for\") ?? \"\")\n .split(\",\")\n .map((entry) => entry.trim())\n .filter(Boolean);\n // The chain is `entries` + `peer`; the client sits `hops` places left of\n // its end, i.e. `entries[entries.length - hops]`. A shorter chain than\n // expected means the request skipped a proxy, so its left-most hop is the\n // furthest thing seen — never anything further left than that.\n const index = entries.length - trust.hops;\n client = index >= 0 ? entries[index]! : (entries[0] ?? peer);\n }\n\n if (client) {\n headers.set(\"x-forwarded-for\", client);\n } else {\n headers.delete(\"x-forwarded-for\");\n }\n}\n"
14
14
  ],
15
15
  "mappings": "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",
16
- "debugId": "3A83EEF5C22A479664756E2164756E21",
16
+ "debugId": "A9B174F1EABAE09F64756E2164756E21",
17
17
  "names": []
18
18
  }
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{Xa as A,Ya as l}from"../chunk-zytmxty5.js";import{Hb as q,Kb as m,Vb as p}from"../chunk-f64vhjgh.js";import"../chunk-e6ngf60r.js";import"../chunk-6y62ccam.js";import"../chunk-gzfat1x1.js";import{mg as u}from"../chunk-ttckhvew.js";import"../chunk-sh1cfx9j.js";import"../chunk-dyq9gcwa.js";import"../chunk-ed346kf4.js";import"../chunk-kk5x6grc.js";import{Ig as c}from"../chunk-kmebynhc.js";import"../chunk-fc28h7g2.js";function F(){let z=Promise.resolve(),M=Promise.resolve(),X=(Q,G)=>new Promise(($)=>{Q.write(G,()=>$())});return{stdout:(Q)=>{z=X(process.stdout,Q)},stderr:(Q)=>{M=X(process.stderr,Q)},flush:async()=>{await Promise.all([z,M])}}}function b(z){let M=z.writers??F();return{args:z.args,options:z.options,argv:z.argv,line:(X="")=>M.stdout(`${X}
2
+ import{Xa as A,Ya as l}from"../chunk-zytmxty5.js";import{Eb as q,Hb as m,Sb as p}from"../chunk-6mdw41s5.js";import"../chunk-2dfar4d1.js";import"../chunk-6y62ccam.js";import"../chunk-gzfat1x1.js";import{mg as u}from"../chunk-ttckhvew.js";import"../chunk-sh1cfx9j.js";import"../chunk-dyq9gcwa.js";import"../chunk-ed346kf4.js";import"../chunk-kk5x6grc.js";import{Ig as c}from"../chunk-kmebynhc.js";import"../chunk-fc28h7g2.js";function F(){let z=Promise.resolve(),M=Promise.resolve(),X=(Q,G)=>new Promise(($)=>{Q.write(G,()=>$())});return{stdout:(Q)=>{z=X(process.stdout,Q)},stderr:(Q)=>{M=X(process.stderr,Q)},flush:async()=>{await Promise.all([z,M])}}}function b(z){let M=z.writers??F();return{args:z.args,options:z.options,argv:z.argv,line:(X="")=>M.stdout(`${X}
3
3
  `),error:(X)=>M.stderr(`${X}
4
4
  `),fail:(X,Q=1)=>{throw new q(X,Q)}}}import w from"path";function V(z){return z.replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/([A-Z])([A-Z][a-z])/g,"$1-$2").toLowerCase()}function t(z){let M=new Map,X=new Map;for(let Q of z){M.set(V(Q.name),Q),M.set(Q.name,Q);let G="alias"in Q?Q.alias:void 0;if(G)X.set(G,Q)}return{byName:M,byAlias:X}}function x(z){if(z==="--")return!0;if(!z.startsWith("-"))return!1;if(z==="-")return!1;if(/^-(\d|\.\d)/.test(z))return!1;return!0}function k(z,M){let{byName:X,byAlias:Q}=t(z.options),G=[],$=[],Z=new Map,S=!X.has("help"),C=!Q.has("h"),P=!1,D=!1,I=(J)=>G.push(`Unknown option ${J} for command "${z.commandName}".`),T=(J,Y)=>{if(Y==="--help"||Y==="-h")D=!0;G.push(Y===void 0?`Option ${J} needs a value.`:`Option ${J} needs a value, but the next token is ${JSON.stringify(Y)}, which is another option. If that really is the value, write ${J}=${Y}.`)},_=0;while(_<M.length){let J=M[_];if(J==="--"){$.push(...M.slice(_+1));break}if(J.startsWith("--")){let Y=J.slice(2),j=Y.indexOf("="),B=j===-1?Y:Y.slice(0,j),K=j===-1?void 0:Y.slice(j+1),H=X.get(B),E=!1;if(!H&&B.startsWith("no-")){let W=X.get(B.slice(3));if(W&&W.type==="boolean")H=W,E=!0}if(!H&&B==="help"&&S){P=!0,_+=1;continue}if(!H){I(`--${B}`),_+=1;continue}if(H.type==="boolean"){if(K!==void 0&&K!=="true"&&K!=="false")G.push(`Option --${V(H.name)} is a flag and takes no value, but got ${JSON.stringify(K)}.`);else{let W=K===void 0?!0:K==="true";Z.set(H.name,E?!W:W)}_+=1;continue}if(K!==void 0){Z.set(H.name,K),_+=1;continue}let U=M[_+1];if(U===void 0||x(U)){T(`--${V(H.name)}`,U),_+=1;continue}Z.set(H.name,U),_+=2;continue}if(J.startsWith("-")&&J.length>1){let Y=J.slice(1),j=!1;for(let B=0;B<Y.length;B+=1){let K=Q.get(Y[B]);if(!K){if(Y[B]==="h"&&C){P=!0;continue}I(`-${Y[B]}`);break}if(K.type==="boolean"){Z.set(K.name,!0);continue}let H=Y.slice(B+1),E=H.startsWith("=")?H.slice(1):H;if(E!==""){Z.set(K.name,E);break}let U=M[_+1];if(U===void 0||x(U)){T(`-${K.alias}`,U);break}Z.set(K.name,U),j=!0;break}_+=j?2:1;continue}$.push(J),_+=1}let L={},O=0;for(let J of z.args){if(J.variadic){let j=$.slice(O);if(O=$.length,L[J.name]=j,J.required&&j.length===0)G.push(`Missing required argument <${J.name}...>. Command "${z.commandName}" needs at least one.`);continue}let Y=$[O];if(O+=1,Y!==void 0){L[J.name]=Y;continue}if(J.default!==void 0){L[J.name]=J.default;continue}if(J.required)G.push(`Missing required argument <${J.name}>.`);L[J.name]=void 0}if(O<$.length){let J=$.slice(O);G.push(`Unexpected argument${J.length===1?"":"s"} ${J.map((Y)=>JSON.stringify(Y)).join(", ")}. Command "${z.commandName}" takes ${z.args.length} argument${z.args.length===1?"":"s"}.`)}let R={};for(let J of z.options){let Y=Z.get(J.name);if(J.type==="boolean"){R[J.name]=Y===void 0?J.default??!1:Boolean(Y);continue}if(Y===void 0){if(J.default!==void 0)R[J.name]=J.default;else if(J.required)G.push(`Missing required option --${V(J.name)}.`),R[J.name]=void 0;else R[J.name]=void 0;continue}let j=String(Y);if(J.type==="number"){let B=Number(j);if(j.trim()===""||!Number.isFinite(B))G.push(`Option --${V(J.name)} expects a number, but got ${JSON.stringify(j)}.`),R[J.name]=void 0;else R[J.name]=B;continue}R[J.name]=j}let N=P&&!D;if(G.length>0)return{ok:!1,help:N,errors:G};return{ok:!0,help:N,args:L,options:R}}function f(z,M=" "){let X=z.reduce((Q,[G])=>Math.max(Q,G.length),0);return z.map(([Q,G])=>G===""?`${M}${Q}`:`${M}${Q.padEnd(X)} ${G}`)}function g(z){let M=z.variadic?`${z.name}...`:z.name;return z.required?`<${M}>`:`[${M}]`}function s(z){let M=(G)=>z.options.some(G),X=M((G)=>G.name==="help"||V(G.name)==="help"),Q=M((G)=>("alias"in G)&&G.alias==="h");if(X&&Q)return[];if(X)return[["-h","Show this message"]];return[[`${Q?"":"-h, "}--help`,"Show this message"]]}function v(z){let M=[],X=z.args.map(g).join(" "),Q=["gemi run",z.commandName,z.options.length>0?"[options]":"",X].filter(Boolean).join(" ");if(M.push(`Usage: ${Q}`),z.description)M.push("",z.description);if(z.args.length>0)M.push("","Arguments:"),M.push(...f(z.args.map((G)=>{let $=[G.description??"",G.default!==void 0?`(default: ${JSON.stringify(G.default)})`:""].filter(Boolean).join(" ");return[g(G),$]})));return M.push("","Options:"),M.push(...f([...z.options.map((G)=>{let $="alias"in G&&G.alias?`-${G.alias}, `:"",Z=G.type==="boolean"?"":` <${G.type}>`,S=[G.description??"",G.default!==void 0?`(default: ${JSON.stringify(G.default)})`:"","required"in G&&G.required?"(required)":""].filter(Boolean).join(" ");return[`${$}--${V(G.name)}${Z}`,S]}),...s(z)])),M.join(`
5
5
  `)}function y(z,M){let X=M.declared?`${z.length} command${z.length===1?"":"s"} declared in app/config/command.ts:`:`Commands in ${M.dir}:`;if(z.length===0)return M.declared?`app/config/command.ts declares no commands.
@@ -13,4 +13,4 @@ A command is registered by existing: write a file there that exports a \`defineC
13
13
  ${Q.message}
14
14
  \`gemi run\` boots your application the way the server does, so it needs the Kernel. Run it from the root of a gemi project.`,{cause:Q})}if(typeof X.default!=="function")throw new A(`${M} has no default export. gemi expects the Kernel subclass to be the default export of that file.`);return new X.default}function h(z,M,X,Q="returned"){if(z===void 0||z===null)return 0;if(typeof z==="number"&&Number.isInteger(z)&&z>=0&&z<=255)return z;let G=M?`Command "${M.commandName}"`:"The command";return X(`${G} ${Q} ${JSON.stringify(z)}, which is not an exit `+"code \u2014 an exit code is an integer from 0 to 255. Treating this as a "+"failure."),1}var[a,...o]=process.argv.slice(2),i=F();d({rootDir:process.cwd(),name:a,argv:o,writers:i}).then(async(z)=>{await i.flush(),process.exit(z)});
15
15
 
16
- //# debugId=9F7548AA146342B564756E2164756E21
16
+ //# debugId=D15A42EC07CACE6064756E2164756E21
@@ -9,6 +9,6 @@
9
9
  "/**\n * The entry point `gemi run` spawns.\n *\n * Exposed through the exports map as `gemi/console/run` and resolved by the CLI\n * out of the *application's* `node_modules`, the same way `dev` and `start`\n * resolve `gemi/bun/preload`. That indirection is the point: the runner has to\n * be the application's copy of gemi, not the one bundled into `dist/bin/gemi.js`\n * — see the note at the top of `runner.ts`.\n *\n * Nothing but argv handling lives here, so that everything worth testing lives\n * in `runConsole`, which returns an exit code instead of taking one.\n */\nimport { processWriters } from \"./context\";\nimport { runConsole } from \"./runner\";\n\n// The tail is forwarded exactly as commander handed it over, `--` and all.\n// commander passes a `--` through as a literal operand (verified: `gemi run x --\n// --weird` arrives as `[\"--\", \"--weird\"]`), and `parse.ts` already treats a `--`\n// as \"everything after this is positional\". Stripping it here — which an earlier\n// draft did — consumed the escape hatch before the only thing that reads it,\n// leaving `-- --weird` reported as an unknown option and `-- --` the only way to\n// pass a flag-shaped value.\nconst [name, ...argv] = process.argv.slice(2);\n\nconst writers = processWriters();\n\n// `.then` rather than a top-level `await`, so this file typechecks under the\n// package's inherited `module: NodeNext` — the same TS1309 that keeps `bun/` out\n// of tsconfig.json's `include`. Bun runs it as ESM either way; this just avoids\n// buying a nested tsconfig for two lines.\nrunConsole({ rootDir: process.cwd(), name, argv, writers }).then(\n async (code) => {\n // Everything written has to reach the OS before the exit below discards it —\n // see `processWriters` for what that costs when it is skipped.\n await writers.flush();\n\n // Explicit, and not belt-and-braces. `kernel.destroy()` stops the scheduler,\n // but an open database pool, a Redis client or an unref'd timer will happily\n // hold the loop open after the work is done — a command that finishes and then\n // sits there, which is the failure `kernel/exit.test.ts` exists for and the\n // one `orm/context.test.ts` names by example.\n process.exit(code);\n },\n);\n"
10
10
  ],
11
11
  "mappings": "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",
12
- "debugId": "9F7548AA146342B564756E2164756E21",
12
+ "debugId": "D15A42EC07CACE6064756E2164756E21",
13
13
  "names": []
14
14
  }
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{ya as N}from"../chunk-r1sj312m.js";import"../chunk-bsbn7qtd.js";import"../chunk-ngq4n2b3.js";import{$f as J,Pf as j,Qf as k,Sf as w,Tf as x,Uf as z,Vf as A,Wf as E,Xf as F,Yf as G,Zf as H,_f as I,ag as K,bg as L}from"../chunk-gzfat1x1.js";import"../chunk-ttckhvew.js";import"../chunk-fc28h7g2.js";export{A as isSqlite,E as isMysqlFamily,z as inferDialect,j as defineDatabaseConfig,k as databaseConfigDefaults,w as UnknownDatabaseUrlError,H as UnknownConnectionError,I as ReservedConnectionNameError,x as MissingDatabaseUrlError,N as DatabaseServiceProvider,L as DatabaseManager,G as DEFAULT_CONNECTION,J as CrossConnectionTransactionError,K as Connection,F as AmbiguousSqlitePathError};
2
+ import{ya as N}from"../chunk-4czqjqs7.js";import"../chunk-p0px3ym0.js";import"../chunk-k5j65f2c.js";import{$f as J,Pf as j,Qf as k,Sf as w,Tf as x,Uf as z,Vf as A,Wf as E,Xf as F,Yf as G,Zf as H,_f as I,ag as K,bg as L}from"../chunk-gzfat1x1.js";import"../chunk-ttckhvew.js";import"../chunk-fc28h7g2.js";export{A as isSqlite,E as isMysqlFamily,z as inferDialect,j as defineDatabaseConfig,k as databaseConfigDefaults,w as UnknownDatabaseUrlError,H as UnknownConnectionError,I as ReservedConnectionNameError,x as MissingDatabaseUrlError,N as DatabaseServiceProvider,L as DatabaseManager,G as DEFAULT_CONNECTION,J as CrossConnectionTransactionError,K as Connection,F as AmbiguousSqlitePathError};
3
3
 
4
4
  //# debugId=7D86003C6CEF478164756E2164756E21
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{Lc as c,Mc as d,Nc as f,Oc as g,Pc as i,Qc as j,Rc as k,Sc as l,ed as m,fd as n,gd as o,nc as a}from"../chunk-ecq15njr.js";import"../chunk-jbzxb75e.js";import"../chunk-ngq4n2b3.js";import{hf as b,pf as e,rf as h}from"../chunk-126mmhjj.js";import"../chunk-xqyx8kzr.js";import"../chunk-17nh5gfm.js";import"../chunk-6y62ccam.js";import"../chunk-gzfat1x1.js";import"../chunk-49v5xq8q.js";import"../chunk-ttckhvew.js";import"../chunk-cv2sargd.js";import"../chunk-sh1cfx9j.js";import"../chunk-dyq9gcwa.js";import"../chunk-ed346kf4.js";import"../chunk-kmebynhc.js";import"../chunk-q7gkfkbz.js";import"../chunk-fc28h7g2.js";export{g as Url,e as Storage,k as Redis,a as Redirect,l as RateLimiter,f as Query,i as Meta,h as Log,d as Lang,m as Features,b as Facade,o as DB,j as Cookie,n as ConnectionQueries,c as Auth};
2
+ import{Ic as c,Jc as d,Kc as f,Lc as g,Mc as i,Nc as j,Oc as k,Pc as l,bd as m,cd as n,dd as o,kc as a}from"../chunk-087r45fw.js";import"../chunk-66g9yytx.js";import"../chunk-k5j65f2c.js";import{hf as b,pf as e,rf as h}from"../chunk-7ct4y1zh.js";import"../chunk-xqyx8kzr.js";import"../chunk-17nh5gfm.js";import"../chunk-6y62ccam.js";import"../chunk-gzfat1x1.js";import"../chunk-49v5xq8q.js";import"../chunk-ttckhvew.js";import"../chunk-cv2sargd.js";import"../chunk-sh1cfx9j.js";import"../chunk-dyq9gcwa.js";import"../chunk-ed346kf4.js";import"../chunk-kmebynhc.js";import"../chunk-q7gkfkbz.js";import"../chunk-fc28h7g2.js";export{g as Url,e as Storage,k as Redis,a as Redirect,l as RateLimiter,f as Query,i as Meta,h as Log,d as Lang,m as Features,b as Facade,o as DB,j as Cookie,n as ConnectionQueries,c as Auth};
3
3
 
4
- //# debugId=171C98A5E8C767DE64756E2164756E21
4
+ //# debugId=CABEC147F07BFB6864756E2164756E21
@@ -4,6 +4,6 @@
4
4
  "sourcesContent": [
5
5
  ],
6
6
  "mappings": "",
7
- "debugId": "171C98A5E8C767DE64756E2164756E21",
7
+ "debugId": "CABEC147F07BFB6864756E2164756E21",
8
8
  "names": []
9
9
  }
@@ -21,10 +21,20 @@ type FileTypeType = `fileType:${string}`;
21
21
  type FileSizeType = `fileSize:${string}`;
22
22
  type EmailType = "email";
23
23
  type PasswordType = "password";
24
+ type ArrayType = "array";
25
+ type ObjectType = "object";
26
+ type InType = `in:${string}`;
24
27
  /** One entry per rule in `validate`'s `RULES`; `validate.test-d.ts` holds them
25
28
  * to each other, so an offered rule cannot go unimplemented again (#609). */
26
- export type SchemaKey = StringType | NumberType | BooleanType | MinLengthType | MaxLengthType | GreaterOrEqualType | LessOrEqualType | RequiredType | FileType | FileTypeType | FileSizeType | EmailType | PasswordType;
27
- export type Schema<T extends Body> = Record<keyof T, Partial<Record<SchemaKey, string>>>;
29
+ export type SchemaKey = StringType | NumberType | BooleanType | MinLengthType | MaxLengthType | GreaterOrEqualType | LessOrEqualType | RequiredType | FileType | FileTypeType | FileSizeType | EmailType | PasswordType | ArrayType | ObjectType | InType;
30
+ type FieldRules = Partial<Record<SchemaKey, string>>;
31
+ /**
32
+ * A field's rules by its key, plus nested ones by dotted path: `"address.city"`
33
+ * for a nested object, `"rounds.*.prompt"` for every item of an array (#711).
34
+ */
35
+ export type Schema<T extends Body> = Record<keyof T, FieldRules> & {
36
+ [path: `${string}.${string}`]: FieldRules;
37
+ };
28
38
  export type Body = Record<string, any>;
29
39
  export type HttpRequestKind = "view" | "api";
30
40
  export declare class HttpRequest<T extends Body = Record<string, never>, Params = Record<string, never>> {
@@ -33,6 +43,11 @@ export declare class HttpRequest<T extends Body = Record<string, never>, Params
33
43
  headers: Omit<Headers, "set" | "delete">;
34
44
  cookies: Omit<Map<string, string>, "set" | "delete">;
35
45
  search: Input<any>;
46
+ /**
47
+ * What `input()` validates the body against: a map of field (or dotted
48
+ * path, `"rounds.*.prompt"`) to `{ rule: message }`, or an `s` schema from
49
+ * `gemi/ai` (#711). See `docs/controllers.md`.
50
+ */
36
51
  schema: any;
37
52
  routePath: string;
38
53
  params: Params;
@@ -122,6 +137,16 @@ export declare class HttpRequest<T extends Body = Record<string, never>, Params
122
137
  private parseBody;
123
138
  private parseJsonBody;
124
139
  private validateInput;
140
+ private checkField;
141
+ /**
142
+ * An `s` schema as the body's validator (#711). Each `SchemaIssue` is
143
+ * reported under its path joined with dots, the same key a dotted rule uses,
144
+ * and its `message`. A valid body is replaced by the parsed value, so what
145
+ * the handler reads is what the schema's type says: unknown keys dropped, an
146
+ * optional field sent as `null` left out.
147
+ */
148
+ private validateWithSchema;
149
+ private addRefinements;
125
150
  private ruleFor;
126
151
  input(): Promise<Input<T>>;
127
152
  safeInput(): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"HttpRequest.d.ts","sourceRoot":"","sources":["../../http/HttpRequest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HttpRequest.d.ts","sourceRoot":"","sources":["../../http/HttpRequest.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{Ac as G,Ed as H,Fd as I,Gd as J,Hd as K,Id as L,Jd as M,hc as n,ic as o,jc as p,kc as v,lc as w,mc as x,oc as y,pc as z,qc as A,rc as B,sc as C,tc as D,yc as E,zc as F}from"../chunk-ecq15njr.js";import"../chunk-jbzxb75e.js";import"../chunk-ngq4n2b3.js";import{$e as k,Le as a,Me as b,Ne as d,Re as e,Se as f,Te as g,Ue as h,Ve as i,We as j,af as l,bf as m,cf as q,df as r,ef as s,ff as t,gf as u}from"../chunk-126mmhjj.js";import{vf as c}from"../chunk-xqyx8kzr.js";import"../chunk-17nh5gfm.js";import"../chunk-6y62ccam.js";import"../chunk-gzfat1x1.js";import"../chunk-49v5xq8q.js";import"../chunk-ttckhvew.js";import"../chunk-cv2sargd.js";import"../chunk-sh1cfx9j.js";import"../chunk-dyq9gcwa.js";import"../chunk-ed346kf4.js";import"../chunk-kmebynhc.js";import"../chunk-q7gkfkbz.js";import"../chunk-fc28h7g2.js";export{g as toRangeHeaderValue,n as toMiddlewareList,f as resolveRange,e as parseRangeHeader,h as parseContentRange,D as middlewareConfigDefaults,d as getCookies,j as formatUnsatisfiedContentRange,i as formatContentRange,C as defineMiddlewareConfig,o as createUnsatisfiableResponse,p as createStreamResponse,z as createFileResponse,G as clientIp,A as ViewRouter,k as ValidationError,b as ResourceController,c as RequestBreakerError,F as RateLimitMiddleware,E as RateLimitExceededError,s as RangeNotSatisfiableError,L as PoliciesServiceProvider,M as Policies,B as Middleware,x as McpRouter,w as McpRouteDeclaration,l as InvalidValidationRuleError,r as InsufficientPermissionsError,y as HttpResponse,m as HttpRequest,t as FileNotFoundError,J as CorsMiddleware,a as Controller,I as CacheMiddleware,K as CSRFMiddleware,q as AuthorizationError,H as AuthenticationMiddleware,u as AuthenticationError,v as ApiRouter};
2
+ import{Bd as H,Cd as I,Dd as J,Ed as K,Fd as L,Gd as M,ec as n,fc as o,gc as p,hc as v,ic as w,jc as x,lc as y,mc as z,nc as A,oc as B,pc as C,qc as D,vc as E,wc as F,xc as G}from"../chunk-087r45fw.js";import"../chunk-66g9yytx.js";import"../chunk-k5j65f2c.js";import{Ie as a,Je as b,Ke as d,Oe as e,Pe as f,Qe as g,Re as h,Se as i,Te as j,Ye as k,Ze as l,bf as m,cf as q,df as r,ef as s,ff as t,gf as u}from"../chunk-7ct4y1zh.js";import{vf as c}from"../chunk-xqyx8kzr.js";import"../chunk-17nh5gfm.js";import"../chunk-6y62ccam.js";import"../chunk-gzfat1x1.js";import"../chunk-49v5xq8q.js";import"../chunk-ttckhvew.js";import"../chunk-cv2sargd.js";import"../chunk-sh1cfx9j.js";import"../chunk-dyq9gcwa.js";import"../chunk-ed346kf4.js";import"../chunk-kmebynhc.js";import"../chunk-q7gkfkbz.js";import"../chunk-fc28h7g2.js";export{g as toRangeHeaderValue,n as toMiddlewareList,f as resolveRange,e as parseRangeHeader,h as parseContentRange,D as middlewareConfigDefaults,d as getCookies,j as formatUnsatisfiedContentRange,i as formatContentRange,C as defineMiddlewareConfig,o as createUnsatisfiableResponse,p as createStreamResponse,z as createFileResponse,G as clientIp,A as ViewRouter,k as ValidationError,b as ResourceController,c as RequestBreakerError,F as RateLimitMiddleware,E as RateLimitExceededError,s as RangeNotSatisfiableError,L as PoliciesServiceProvider,M as Policies,B as Middleware,x as McpRouter,w as McpRouteDeclaration,l as InvalidValidationRuleError,r as InsufficientPermissionsError,y as HttpResponse,m as HttpRequest,t as FileNotFoundError,J as CorsMiddleware,a as Controller,I as CacheMiddleware,K as CSRFMiddleware,q as AuthorizationError,H as AuthenticationMiddleware,u as AuthenticationError,v as ApiRouter};
3
3
 
4
- //# debugId=570373B8D6B7C75B64756E2164756E21
4
+ //# debugId=F435297EC08BD69664756E2164756E21
@@ -4,6 +4,6 @@
4
4
  "sourcesContent": [
5
5
  ],
6
6
  "mappings": "",
7
- "debugId": "570373B8D6B7C75B64756E2164756E21",
7
+ "debugId": "F435297EC08BD69664756E2164756E21",
8
8
  "names": []
9
9
  }
@@ -22,7 +22,7 @@
22
22
  /** Every rule `validate` implements. `SchemaKey` in `HttpRequest.ts` offers
23
23
  * these and only these: `validate.test-d.ts` checks the two lists agree, and
24
24
  * `validate.test.ts` that each one has a case. */
25
- export declare const RULES: readonly ["required", "string", "boolean", "number", "email", "password", "min", "max", "gte", "lte", "file", "fileType", "fileSize"];
25
+ export declare const RULES: readonly ["required", "string", "boolean", "number", "email", "password", "min", "max", "gte", "lte", "file", "fileType", "fileSize", "array", "object", "in"];
26
26
  /**
27
27
  * A schema names a rule `validate` does not have, or gives one a parameter it
28
28
  * cannot use. Thrown when the request is validated, not when the body is bad:
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../http/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAkEH;;mDAEmD;AACnD,eAAO,MAAM,KAAK,uIAcR,CAAC;AAEX;;;;GAIG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,IAAI,SAAgC;CACrC;AAcD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,WAuBpB,GAAG,aAoHvB"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../http/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAkEH;;mDAEmD;AACnD,eAAO,MAAM,KAAK,gKAiBR,CAAC;AAEX;;;;GAIG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,IAAI,SAAgC;CACrC;AAcD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,WA0BpB,GAAG,aA8IvB"}
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{aa as R}from"../chunk-6tt3ynm7.js";import"../chunk-9a8qz3s7.js";import{Wa as L}from"../chunk-dk7818hj.js";import{ec as E,fc as V}from"../chunk-q6ydpt33.js";import"../chunk-bsbn7qtd.js";import{Mc as j}from"../chunk-ecq15njr.js";import"../chunk-jbzxb75e.js";import"../chunk-ngq4n2b3.js";import"../chunk-126mmhjj.js";import"../chunk-xqyx8kzr.js";import"../chunk-17nh5gfm.js";import"../chunk-6y62ccam.js";import"../chunk-gzfat1x1.js";import"../chunk-49v5xq8q.js";import"../chunk-ttckhvew.js";import{ug as X}from"../chunk-cv2sargd.js";import"../chunk-sh1cfx9j.js";import"../chunk-dyq9gcwa.js";import"../chunk-ed346kf4.js";import"../chunk-kmebynhc.js";import"../chunk-q7gkfkbz.js";import"../chunk-fc28h7g2.js";import{createElement as J,Fragment as M,isValidElement as U}from"react";function $(q,B){let G=Object.values(B).some((z)=>typeof z==="function"&&U(z(""))),Q=/{{([^{}]+?)(?::([^{}\[\]]+?))?(?:\[(.*?)\])?}}/g;if(!G)return q.replace(Q,(W,O,_,Z)=>{let C=O.includes(":")?O.split(":")[0]:O,H=B[C];if(H===void 0)return W;if(typeof H==="function"){let K=H(Z!==void 0?Z:"");if(U(K))throw Error("JSX returned in string context");return String(K)}if(_)switch(_.toLowerCase()){case"number":return Number(H).toString();case"string":return String(H);case"boolean":return Boolean(H).toString();default:return String(H)}return String(H)});else{let z=[],W=0,O=null;while((O=Q.exec(q))!==null){let[_,Z,C,H]=O,F=O.index,K=Z.includes(":")?Z.split(":")[0]:Z;if(F>W)z.push(q.substring(W,F));let Y=B[K];if(Y===void 0)z.push(_);else if(typeof Y==="function"){let A=Y(H!==void 0?H:"");z.push(A)}else if(C)switch(C.toLowerCase()){case"number":z.push(Number(Y).toString());break;case"string":z.push(String(Y));break;case"boolean":z.push(Boolean(Y).toString());break;default:z.push(String(Y))}else z.push(String(Y));W=F+_.length}if(W<q.length)z.push(q.substring(W));return J(M,{},...z)}}class P{name;dictionary;constructor(q,B){this.name=q;this.dictionary=B}reference(q){if(typeof window<"u")throw Error("Cannot use reference in the browser");if(!this.dictionary?.[q])throw Error(`Translation not found for ${String(q)}`);return this.dictionary[q]}render(q,...B){let{locale:G=j.locale(),params:Q}={params:{},...B[0]};if(typeof window<"u")throw Error("Cannot use render in the browser");if(!this.dictionary?.[q]?.[G])throw Error(`Translation not found for ${String(q)} in ${String(G)}`);return $(this.dictionary[q][G],Q??{})}static create(q,B){return new P(q,B)}static text(q,...B){let{locale:G=j.locale(),params:Q}={params:{},...B?.[0]};if(!q?.[G])throw Error(`Translation not found for ${String(G)}`);return $(q[G],Q??{})}}async function N(q,B,...G){let{locale:Q=j.locale(),params:z}={params:{},...G[0]},O=(await q.load(String(Q)))[B];if(typeof O!=="string")throw Error(`Translation not found for "${B}" in "${String(Q)}" (dictionary ${q.id})`);return $(O,z??{})}export{V as translationConfigDefaults,N as translate,E as defineTranslationConfig,R as defineDictionary,X as Translator,L as TranslationServiceProvider,P as Dictionary};
2
+ import{aa as R}from"../chunk-6tt3ynm7.js";import"../chunk-9a8qz3s7.js";import{Wa as L}from"../chunk-ddbbxg9m.js";import{bc as E,cc as V}from"../chunk-7bmctvep.js";import"../chunk-p0px3ym0.js";import{Jc as j}from"../chunk-087r45fw.js";import"../chunk-66g9yytx.js";import"../chunk-k5j65f2c.js";import"../chunk-7ct4y1zh.js";import"../chunk-xqyx8kzr.js";import"../chunk-17nh5gfm.js";import"../chunk-6y62ccam.js";import"../chunk-gzfat1x1.js";import"../chunk-49v5xq8q.js";import"../chunk-ttckhvew.js";import{ug as X}from"../chunk-cv2sargd.js";import"../chunk-sh1cfx9j.js";import"../chunk-dyq9gcwa.js";import"../chunk-ed346kf4.js";import"../chunk-kmebynhc.js";import"../chunk-q7gkfkbz.js";import"../chunk-fc28h7g2.js";import{createElement as J,Fragment as M,isValidElement as U}from"react";function $(q,B){let G=Object.values(B).some((z)=>typeof z==="function"&&U(z(""))),Q=/{{([^{}]+?)(?::([^{}\[\]]+?))?(?:\[(.*?)\])?}}/g;if(!G)return q.replace(Q,(W,O,_,Z)=>{let C=O.includes(":")?O.split(":")[0]:O,H=B[C];if(H===void 0)return W;if(typeof H==="function"){let K=H(Z!==void 0?Z:"");if(U(K))throw Error("JSX returned in string context");return String(K)}if(_)switch(_.toLowerCase()){case"number":return Number(H).toString();case"string":return String(H);case"boolean":return Boolean(H).toString();default:return String(H)}return String(H)});else{let z=[],W=0,O=null;while((O=Q.exec(q))!==null){let[_,Z,C,H]=O,F=O.index,K=Z.includes(":")?Z.split(":")[0]:Z;if(F>W)z.push(q.substring(W,F));let Y=B[K];if(Y===void 0)z.push(_);else if(typeof Y==="function"){let A=Y(H!==void 0?H:"");z.push(A)}else if(C)switch(C.toLowerCase()){case"number":z.push(Number(Y).toString());break;case"string":z.push(String(Y));break;case"boolean":z.push(Boolean(Y).toString());break;default:z.push(String(Y))}else z.push(String(Y));W=F+_.length}if(W<q.length)z.push(q.substring(W));return J(M,{},...z)}}class P{name;dictionary;constructor(q,B){this.name=q;this.dictionary=B}reference(q){if(typeof window<"u")throw Error("Cannot use reference in the browser");if(!this.dictionary?.[q])throw Error(`Translation not found for ${String(q)}`);return this.dictionary[q]}render(q,...B){let{locale:G=j.locale(),params:Q}={params:{},...B[0]};if(typeof window<"u")throw Error("Cannot use render in the browser");if(!this.dictionary?.[q]?.[G])throw Error(`Translation not found for ${String(q)} in ${String(G)}`);return $(this.dictionary[q][G],Q??{})}static create(q,B){return new P(q,B)}static text(q,...B){let{locale:G=j.locale(),params:Q}={params:{},...B?.[0]};if(!q?.[G])throw Error(`Translation not found for ${String(G)}`);return $(q[G],Q??{})}}async function N(q,B,...G){let{locale:Q=j.locale(),params:z}={params:{},...G[0]},O=(await q.load(String(Q)))[B];if(typeof O!=="string")throw Error(`Translation not found for "${B}" in "${String(Q)}" (dictionary ${q.id})`);return $(O,z??{})}export{V as translationConfigDefaults,N as translate,E as defineTranslationConfig,R as defineDictionary,X as Translator,L as TranslationServiceProvider,P as Dictionary};
3
3
 
4
- //# debugId=28A4CE12B3E88F1864756E2164756E21
4
+ //# debugId=E850D743959B93B864756E2164756E21
@@ -7,6 +7,6 @@
7
7
  "import { Lang } from \"../facades\";\nimport { parseTranslation } from \"../utils/parseTranslation\";\nimport type { ParseTranslationParamsServer, Prettify } from \"../utils/type\";\nimport type { DictionaryHandle } from \"./defineDictionary\";\nimport type { DictionaryTranslations } from \"./dictionaryShape\";\n\n/**\n * Read one string from a `defineDictionary` dictionary outside React — a\n * controller, a job, an email template.\n *\n * Async because a bundled dictionary loads its locale on demand. Server code\n * does not go through the bundler, so in practice this resolves without ever\n * yielding; the `await` is what makes the same call work either way.\n *\n * Kept out of `defineDictionary.ts` on purpose: that module is imported by\n * components and has to stay free of the server facades this one needs.\n */\nexport async function translate<\n T extends DictionaryTranslations,\n K extends keyof T & string,\n U extends keyof T[K],\n R = Prettify<ParseTranslationParamsServer<T[K][U] & string>>,\n>(\n dictionary: DictionaryHandle<T>,\n key: K,\n ...args: R extends Record<string, never>\n ? [args?: { locale?: U | (string & {}) }]\n : [args: { locale?: U | (string & {}); params: R }]\n): Promise<string> {\n const { locale = Lang.locale(), params } = { params: {}, ...args[0] };\n const strings = await dictionary.load(String(locale));\n const template = strings[key];\n\n if (typeof template !== \"string\") {\n throw new Error(\n `Translation not found for \"${key}\" in \"${String(locale)}\" (dictionary ${dictionary.id})`,\n );\n }\n\n return parseTranslation(template, (params ?? {}) as any) as string;\n}\n"
8
8
  ],
9
9
  "mappings": "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",
10
- "debugId": "28A4CE12B3E88F1864756E2164756E21",
10
+ "debugId": "E850D743959B93B864756E2164756E21",
11
11
  "names": []
12
12
  }
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{ya as y}from"../chunk-r1sj312m.js";import{Va as i}from"../chunk-2e9552jm.js";import{Wa as g}from"../chunk-dk7818hj.js";import{$a as e,Za as T,_a as D,ab as A,bb as w,fb as P,gb as S,ib as h,jb as R,kb as u,lb as l,ob as v,pb as d,sb as c,vb as p,yb as n}from"../chunk-3jf1rsbg.js";import"../chunk-4v4v5wkh.js";import"../chunk-f64vhjgh.js";import{$b as r}from"../chunk-e6ngf60r.js";import"../chunk-q6ydpt33.js";import"../chunk-bsbn7qtd.js";import{Ad as Q,Bd as t,Cd as o,Fc as Zj,Gc as $j,Jc as Gj,Kc as Hj,md as x,rd as I,sd as E,vd as K,wd as M,xd as s,yd as C,zd as m}from"../chunk-ecq15njr.js";import{Nd as a}from"../chunk-jbzxb75e.js";import{_d as V,de as f}from"../chunk-ngq4n2b3.js";import{bf as F}from"../chunk-126mmhjj.js";import{uf as B}from"../chunk-xqyx8kzr.js";import{Af as L}from"../chunk-17nh5gfm.js";import"../chunk-6y62ccam.js";import"../chunk-gzfat1x1.js";import"../chunk-49v5xq8q.js";import"../chunk-ttckhvew.js";import"../chunk-t6hma13w.js";import"../chunk-cv2sargd.js";import{wg as N,xg as b}from"../chunk-sh1cfx9j.js";import{yg as _}from"../chunk-dyq9gcwa.js";import"../chunk-ed346kf4.js";import"../chunk-kk5x6grc.js";import"../chunk-kmebynhc.js";import{Lg as q}from"../chunk-q7gkfkbz.js";import"../chunk-fc28h7g2.js";function Jj(j){let X=j.headers.get("Cache-Control")?.toLowerCase()??"";return/(^|[\s,])(public|s-maxage)\b/.test(X)}var Wj=new Set,Xj={refusal:null,apply:(j)=>j,carried:null};async function k(j){let X=b(x);if(X.config.global.length===0)return Xj;let{pathname:Z}=new URL(j.url),W=q(Z),z=new F(j,{},W?"api":"view","");return await L.run(z,async()=>{let $=L.getStore(),{headers:H,cookies:zj}=$,Y=(J)=>{if(!Jj(J))return Q(J,H,zj);let G=new Headers(H);return G.delete("Set-Cookie"),Q(J,G,Wj)};try{return await X.runGlobalMiddleware(),{refusal:null,apply:Y,carried:{user:$.user}}}catch(J){let G=!W&&Z.endsWith(".json");if(J?.kind===B){let O=W?m(J.payload.api):G?M(J.payload.viewData??J.payload.api):K(J.payload.view);return{refusal:Y(O),apply:Y,carried:null}}if(V(J)&&(W||G))return{refusal:Y(C()),apply:Y,carried:null};if(f(J)){console.error(J);let O=W||G?I():K(E());return{refusal:Y(O),apply:Y,carried:null}}throw J}finally{$.destroy()}})}var U=[l,d,y,P,n,A,S,v,R,D,h,p,u,g,c,w];class jj{config={};providers=[];services=[];serviceInstances=[];serviceTokens=new Set;servicesBooted=!1;models=[];app=new N;boot(){if(this.models.length>0)i(...this.models);else Yj();this.app.config.merge(this.config),N.setInstance(this.app),this.app.registerMany([...U,...this.providers]),this.registerServices()}registerServices(){let j=this.serviceTokens;this.serviceInstances=[],this.serviceTokens=new Set,this.servicesBooted=!1;let X=new Map;for(let Z of this.services){let W=typeof Z==="function"?new Z:Z,z=W.constructor;if(!z.token)throw Error(`Service [${z.name}] is listed in \`services\` but does not declare a \`static token\`.`);let $=X.get(z.token);if($)throw Error(`Services [${$}] and [${z.name}] both declare the token "${z.token}". Tokens are the container's keys, so they must be unique.`);X.set(z.token,z.name);let H=z;if(!j.has(z.token)&&this.app.bound(H))throw Error(`Service [${z.name}] declares the token "${z.token}", which is already bound in the container by the framework or a provider. Binding it would replace that service everywhere, so pick a token nothing else owns.`);this.app.instance(H,W),this.serviceInstances.push(W),this.serviceTokens.add(z.token)}}async waitForBoot(){await this.app.boot(),await this.bootServices(),e(this.app)}async bootServices(){if(this.servicesBooted)return;for(let j of this.serviceInstances)await j.boot();this.servicesBooted=!0}shutdown(j){return this.run(()=>this.app.shutdown(j))}run(j){return _.run(this.app,j)}resolve(j){return this.app.make(j)}apiRoutes(){return this.app.make(t)}viewRoutes(){return this.app.make(s)}domains(){return this.app.make(o)}queue(){return this.app.make(r)}globalMiddleware(j){return k(j)}destroy(){if(this.app.resolved(T))this.app.make(T).stop();if(this.app.flush(),N.getInstance()===this.app)N.setInstance(void 0);_.disable()}}function Yj(){if(Bun.env.NODE_ENV==="production")return;let j=a();if(j.length===0)return;console.warn(`[gemi] ${j.length} model${j.length===1?" is":"s are"} registered, but Kernel.models is empty.
2
+ import{ya as y}from"../chunk-4czqjqs7.js";import{Va as i}from"../chunk-q18fb0cr.js";import{Wa as g}from"../chunk-ddbbxg9m.js";import{$a as e,Za as T,_a as D,ab as A,bb as w,fb as P,gb as S,ib as h,jb as R,kb as u,lb as l,ob as v,pb as d,sb as c,vb as p,yb as n}from"../chunk-vqhcztw0.js";import"../chunk-wc46df4w.js";import"../chunk-6mdw41s5.js";import{Yb as r}from"../chunk-2dfar4d1.js";import"../chunk-7bmctvep.js";import"../chunk-p0px3ym0.js";import{Cc as Zj,Dc as $j,Gc as Gj,Hc as Hj,jd as x,od as I,pd as E,sd as K,td as M,ud as s,vd as C,wd as m,xd as Q,yd as t,zd as o}from"../chunk-087r45fw.js";import{Kd as a}from"../chunk-66g9yytx.js";import{Xd as V,ae as f}from"../chunk-k5j65f2c.js";import{bf as F}from"../chunk-7ct4y1zh.js";import{uf as B}from"../chunk-xqyx8kzr.js";import{Af as L}from"../chunk-17nh5gfm.js";import"../chunk-6y62ccam.js";import"../chunk-gzfat1x1.js";import"../chunk-49v5xq8q.js";import"../chunk-ttckhvew.js";import"../chunk-t6hma13w.js";import"../chunk-cv2sargd.js";import{wg as N,xg as b}from"../chunk-sh1cfx9j.js";import{yg as _}from"../chunk-dyq9gcwa.js";import"../chunk-ed346kf4.js";import"../chunk-kk5x6grc.js";import"../chunk-kmebynhc.js";import{Lg as q}from"../chunk-q7gkfkbz.js";import"../chunk-fc28h7g2.js";function Jj(j){let X=j.headers.get("Cache-Control")?.toLowerCase()??"";return/(^|[\s,])(public|s-maxage)\b/.test(X)}var Wj=new Set,Xj={refusal:null,apply:(j)=>j,carried:null};async function k(j){let X=b(x);if(X.config.global.length===0)return Xj;let{pathname:Z}=new URL(j.url),W=q(Z),z=new F(j,{},W?"api":"view","");return await L.run(z,async()=>{let $=L.getStore(),{headers:H,cookies:zj}=$,Y=(J)=>{if(!Jj(J))return Q(J,H,zj);let G=new Headers(H);return G.delete("Set-Cookie"),Q(J,G,Wj)};try{return await X.runGlobalMiddleware(),{refusal:null,apply:Y,carried:{user:$.user}}}catch(J){let G=!W&&Z.endsWith(".json");if(J?.kind===B){let O=W?m(J.payload.api):G?M(J.payload.viewData??J.payload.api):K(J.payload.view);return{refusal:Y(O),apply:Y,carried:null}}if(V(J)&&(W||G))return{refusal:Y(C()),apply:Y,carried:null};if(f(J)){console.error(J);let O=W||G?I():K(E());return{refusal:Y(O),apply:Y,carried:null}}throw J}finally{$.destroy()}})}var U=[l,d,y,P,n,A,S,v,R,D,h,p,u,g,c,w];class jj{config={};providers=[];services=[];serviceInstances=[];serviceTokens=new Set;servicesBooted=!1;models=[];app=new N;boot(){if(this.models.length>0)i(...this.models);else Yj();this.app.config.merge(this.config),N.setInstance(this.app),this.app.registerMany([...U,...this.providers]),this.registerServices()}registerServices(){let j=this.serviceTokens;this.serviceInstances=[],this.serviceTokens=new Set,this.servicesBooted=!1;let X=new Map;for(let Z of this.services){let W=typeof Z==="function"?new Z:Z,z=W.constructor;if(!z.token)throw Error(`Service [${z.name}] is listed in \`services\` but does not declare a \`static token\`.`);let $=X.get(z.token);if($)throw Error(`Services [${$}] and [${z.name}] both declare the token "${z.token}". Tokens are the container's keys, so they must be unique.`);X.set(z.token,z.name);let H=z;if(!j.has(z.token)&&this.app.bound(H))throw Error(`Service [${z.name}] declares the token "${z.token}", which is already bound in the container by the framework or a provider. Binding it would replace that service everywhere, so pick a token nothing else owns.`);this.app.instance(H,W),this.serviceInstances.push(W),this.serviceTokens.add(z.token)}}async waitForBoot(){await this.app.boot(),await this.bootServices(),e(this.app)}async bootServices(){if(this.servicesBooted)return;for(let j of this.serviceInstances)await j.boot();this.servicesBooted=!0}shutdown(j){return this.run(()=>this.app.shutdown(j))}run(j){return _.run(this.app,j)}resolve(j){return this.app.make(j)}apiRoutes(){return this.app.make(t)}viewRoutes(){return this.app.make(s)}domains(){return this.app.make(o)}queue(){return this.app.make(r)}globalMiddleware(j){return k(j)}destroy(){if(this.app.resolved(T))this.app.make(T).stop();if(this.app.flush(),N.getInstance()===this.app)N.setInstance(void 0);_.disable()}}function Yj(){if(Bun.env.NODE_ENV==="production")return;let j=a();if(j.length===0)return;console.warn(`[gemi] ${j.length} model${j.length===1?" is":"s are"} registered, but Kernel.models is empty.
3
3
  Nested relation reads resolve a model by name, so a policy on a subclass that does not own its
4
4
  `+" name is skipped inside every include \u2014 scoped at the root, "+`unscoped in an include, with nothing
5
5
  to notice it. Declaring the modules registers each class under its own name and audits the set:
@@ -13,4 +13,4 @@ import{ya as y}from"../chunk-r1sj312m.js";import{Va as i}from"../chunk-2e9552jm.
13
13
 
14
14
  See docs/orm.md#your-model-class. Development only; this never prints in production.`)}export{$j as oneTimeSecretMatches,Zj as hashOneTimeSecret,U as frameworkProviders,Hj as UserProvider,Gj as SESSION_SELECT,jj as Kernel};
15
15
 
16
- //# debugId=E4F690E6A3680D4064756E2164756E21
16
+ //# debugId=BDFBA0F783C6D69C64756E2164756E21
@@ -7,6 +7,6 @@
7
7
  "import { Application } from \"../foundation/Application\";\nimport type { ServiceProviderConstructor, ShutdownReport } from \"../foundation/Application\";\nimport type { ServiceToken } from \"../container/Container\";\nimport type { ConfigItems } from \"../support/Repository\";\nimport type { Service, ServiceConstructor } from \"../support/Service\";\nimport { registerModels } from \"../orm/registration\";\nimport { registeredNames } from \"../orm/registry\";\nimport { Scheduler } from \"../services/cron/Scheduler\";\nimport { QueueManager } from \"../services/queue/QueueManager\";\nimport { startClaimingIfServing } from \"../services/queue/QueueServiceProvider\";\nimport { ApiRouteDispatcher } from \"../services/router/ApiRouteDispatcher\";\nimport { ViewRouteDispatcher } from \"../services/router/ViewRouteDispatcher\";\nimport { DomainRouter } from \"../services/router/DomainRouter\";\nimport { runGlobalMiddleware } from \"../services/router/globalMiddleware\";\nimport { kernelContext } from \"./context\";\nimport { frameworkProviders } from \"./providers\";\n\n/**\n * The app's entry point into the framework. A Kernel subclass declares what the\n * app adds — its `config` slices and any extra `providers` — and everything\n * else lives in the Application container it owns.\n */\nexport class Kernel {\n /**\n * App-level config, merged over the framework defaults. Each key is a config\n * slice: `{ mail: { ... }, route: { ... } }`, normally the modules under\n * `app/config`.\n */\n protected config: ConfigItems = {};\n\n /**\n * App-level providers, registered after the framework's own so they can\n * rebind anything the framework bound.\n */\n protected providers: ServiceProviderConstructor[] = [];\n\n /**\n * The app's own singleton services. Each is constructed during the\n * synchronous boot phase and its `boot()` awaited during the asynchronous\n * one, in the order listed — so a service whose `boot()` depends on another\n * goes after it.\n *\n * An entry is either the class itself or a configured instance from\n * `Service.with({ ... })`. Listing is explicit rather than discovered because\n * the order is load-bearing here, and because a service is always imported by\n * whatever injects it — there is no file the import graph would miss.\n */\n protected services: Array<ServiceConstructor | Service> = [];\n\n private serviceInstances: Service[] = [];\n private serviceTokens = new Set<string>();\n private servicesBooted = false;\n\n /**\n * The modules holding the app's model classes — normally\n * `[generated, models]`, the generated namespace and the barrel of subclasses\n * written over it. Every model class they export is registered under the name\n * its schema carries, later modules winning, and the whole set is audited\n * before anything else boots.\n *\n * ### Why this is a Kernel field and not a line in a file somewhere\n *\n * Registration used to be `register(\"User\", User)` next to each subclass, and\n * the failure mode of forgetting it is an authorization hole that nothing\n * reports: a relation read resolves its target by name, so an unregistered\n * policied subclass leaves the generated base owning the name and every\n * nested `include` of that model comes back unscoped. No error at the root\n * either, because `$exec`'s divergence guard begins `registered !== this` and\n * the base it is running on *is* the registered one. A model only ever read\n * through an include — a membership, a pivot, the kind that carries a tenant\n * scope — never trips anything.\n *\n * Listing the modules here says it once, in the same place the app already\n * declares its config slices and providers, and turns the mistake into a\n * failure to boot rather than a quiet cross-tenant read.\n *\n * It sees the modules it is given, so a model class in a file that no barrel\n * re-exports is still invisible. That is the residual, and it is a smaller\n * one: a barrel is a place to notice an omission, and thirteen `register`\n * lines scattered across thirteen files is not.\n */\n protected models: Array<Record<string, unknown>> = [];\n\n readonly app = new Application();\n\n /**\n * Phase one, synchronous: every provider is constructed and its `register()`\n * runs. Only bindings are recorded here — no service is instantiated, so this\n * is safe to call from a synchronous constructor (`new App({ kernel })`).\n * Phase two is `waitForBoot()`.\n */\n boot() {\n // Before the container, deliberately. This throws on a model whose policies\n // would be skipped, and the useful moment for that is the one where nothing\n // has been constructed and no request can be in flight.\n if (this.models.length > 0) registerModels(...this.models);\n else warnIfModelsAreRegisteredButUndeclared();\n\n this.app.config.merge(this.config);\n Application.setInstance(this.app);\n this.app.registerMany([...frameworkProviders, ...this.providers]);\n this.registerServices();\n }\n\n /**\n * Constructs every listed service and binds it into the container. Runs after\n * the providers have registered, so a provider's `boot()` can `inject()` one;\n * a `Service` constructor does no I/O, so doing this synchronously costs\n * nothing beyond the field initializers.\n */\n private registerServices() {\n // What a previous pass bound, so re-running this on the same kernel is not\n // mistaken for a collision with something else.\n const ours = this.serviceTokens;\n\n this.serviceInstances = [];\n this.serviceTokens = new Set();\n this.servicesBooted = false;\n\n const owners = new Map<string, string>();\n\n for (const declaration of this.services) {\n const instance =\n typeof declaration === \"function\" ? new declaration() : declaration;\n const ctor = instance.constructor as ServiceConstructor;\n\n if (!ctor.token) {\n throw new Error(\n `Service [${ctor.name}] is listed in \\`services\\` but does not declare a \\`static token\\`.`,\n );\n }\n\n // Two services under one token is the failure this refuses to have\n // silently: the second would replace the first in the container, and\n // every `inject()` written against either would hand back whichever was\n // listed last.\n const owner = owners.get(ctor.token);\n if (owner) {\n throw new Error(\n `Services [${owner}] and [${ctor.name}] both declare the token \"${ctor.token}\". Tokens are the container's keys, so they must be unique.`,\n );\n }\n owners.set(ctor.token, ctor.name);\n\n // The same failure one level out. `Container.instance()` writes into\n // `instances`, which `make()` consults before `bindings`, so a token that\n // is already spoken for is not shared with its owner — it replaces it, for\n // every `app()` and `inject()` in the process. An app service that named\n // itself \"mail\" would leave `Mail.send()` resolving to an object with no\n // `send`, and the boot that caused it would report nothing. Providers have\n // all registered by now, so anything bound here belongs to somebody else.\n const token = ctor as unknown as ServiceToken<Service>;\n if (!ours.has(ctor.token) && this.app.bound(token)) {\n throw new Error(\n `Service [${ctor.name}] declares the token \"${ctor.token}\", which is already bound in the container by the framework or a provider. Binding it would replace that service everywhere, so pick a token nothing else owns.`,\n );\n }\n\n this.app.instance(token, instance);\n this.serviceInstances.push(instance);\n this.serviceTokens.add(ctor.token);\n }\n }\n\n /**\n * Phase two, asynchronous: every provider's `boot()` runs, in registration\n * order, after all of them have registered. Idempotent.\n */\n async waitForBoot() {\n await this.app.boot();\n await this.bootServices();\n // Last, once every job — queued listeners included — is registered.\n startClaimingIfServing(this.app);\n }\n\n /**\n * Phase two for services, after every provider's `boot()` — so a service may\n * use the facades and anything else a provider owns. Idempotent, like the\n * provider phase it follows.\n */\n private async bootServices() {\n if (this.servicesBooted) {\n return;\n }\n for (const service of this.serviceInstances) {\n await service.boot();\n }\n this.servicesBooted = true;\n }\n\n /**\n * Every provider's `shutdown()`, in reverse registration order, inside the\n * application context — so a hook may use the facades, as a cron tick or a\n * request would. See `Application.shutdown` for the deadline and the\n * report. Idempotent.\n */\n shutdown(options?: { timeoutMs?: number }): Promise<ShutdownReport> {\n return this.run(() => this.app.shutdown(options));\n }\n\n run<T>(cb: () => T) {\n return kernelContext.run(this.app, cb);\n }\n\n /**\n * Resolve a service by token. Callers outside this module should prefer the\n * named accessors below or `app()`; this exists for tooling that holds a\n * Kernel but no ambient context.\n */\n resolve<T>(token: ServiceToken<T>): T {\n return this.app.make(token);\n }\n\n // Named accessors. `app/App.ts` goes through these rather than importing the\n // service classes itself — see the note in that file about the two copies of\n // gemi that coexist at build time.\n apiRoutes(): ApiRouteDispatcher {\n return this.app.make(ApiRouteDispatcher);\n }\n\n viewRoutes(): ViewRouteDispatcher {\n return this.app.make(ViewRouteDispatcher);\n }\n\n domains(): DomainRouter {\n return this.app.make(DomainRouter);\n }\n\n queue(): QueueManager {\n return this.app.make(QueueManager);\n }\n\n /** The `global` middleware list for one request. Call it inside `run`. */\n globalMiddleware(req: Request) {\n return runGlobalMiddleware(req);\n }\n\n destroy() {\n // Only touch services that were actually resolved — resolving one here\n // would construct it purely to tear it down.\n if (this.app.resolved(Scheduler)) {\n this.app.make(Scheduler).stop();\n }\n\n this.app.flush();\n\n if (Application.getInstance() === this.app) {\n Application.setInstance(undefined);\n }\n\n kernelContext.disable();\n }\n}\n\n/**\n * Says something to an application that has models and has not declared them.\n *\n * Without this the fix for #316 defaults to off. `models` is `[]`, `boot()`\n * no-ops, and an app upgrading from 0.48 is in exactly the state the issue\n * describes until somebody edits their Kernel by hand — while the only place\n * that says to is the **Setup** section of `docs/orm.md`, which an existing app\n * read once and will not read again. #316 was filed by an app mid-migration\n * with a 79-model schema, which is precisely the reader who never sees it.\n *\n * The condition is what makes this worth printing. A populated registry with an\n * empty `models` means the generated `index.ts` was imported and its bases are\n * what every nested read resolves to — so if any policy lives on a subclass, it\n * is being skipped inside includes right now. A Kernel with no ORM at all has\n * an empty registry and hears nothing.\n *\n * Development only, and a warning rather than a throw: an app in this state is\n * running today, and turning a working deploy into a failure to start over an\n * arrangement that *might* be fine is not a patch-level thing to do. The\n * failure it points at is silent, so the fix for it has to be noisy somewhere,\n * and the terminal an author is already looking at is the cheapest somewhere\n * there is.\n */\nfunction warnIfModelsAreRegisteredButUndeclared(): void {\n if (process.env.NODE_ENV === \"production\") return;\n\n const registered = registeredNames();\n if (registered.length === 0) return;\n\n console.warn(\n `[gemi] ${registered.length} model${registered.length === 1 ? \" is\" : \"s are\"} ` +\n `registered, but Kernel.models is empty.\\n` +\n ` Nested relation reads resolve a model by name, so a policy on a ` +\n `subclass that does not own its\\n` +\n ` name is skipped inside every include — scoped at the root, ` +\n `unscoped in an include, with nothing\\n` +\n ` to notice it. Declaring the modules registers each class under ` +\n `its own name and audits the set:\\n\\n` +\n ` import * as generated from \"../models/generated\"\\n` +\n ` import * as models from \"../models\"\\n\\n` +\n ` export default class extends Kernel {\\n` +\n ` models = [generated, models]\\n` +\n ` }\\n\\n` +\n ` See docs/orm.md#your-model-class. Development only; this never ` +\n `prints in production.`,\n );\n}\n"
8
8
  ],
9
9
  "mappings": "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",
10
- "debugId": "E4F690E6A3680D4064756E2164756E21",
10
+ "debugId": "BDFBA0F783C6D69C64756E2164756E21",
11
11
  "names": []
12
12
  }