gemi 0.171.0 → 0.172.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 (58) hide show
  1. package/dist/ai/index.js +1 -1
  2. package/dist/app/App.d.ts +10 -0
  3. package/dist/app/App.d.ts.map +1 -1
  4. package/dist/app/index.js +1 -1
  5. package/dist/bin/gemi.js +4 -1
  6. package/dist/bin/gemi.js.map +3 -3
  7. package/dist/chunk-5rzb2c9n.js +24 -0
  8. package/dist/{chunk-376s9rbe.js.map → chunk-5rzb2c9n.js.map} +3 -3
  9. package/dist/{chunk-ys8nk9ga.js → chunk-d54afkwy.js} +1 -1
  10. package/dist/chunk-f82m70ek.js +58 -0
  11. package/dist/{chunk-eq3xexqp.js.map → chunk-f82m70ek.js.map} +3 -3
  12. package/dist/chunk-ktfc7jmg.js +4 -0
  13. package/dist/chunk-ktfc7jmg.js.map +10 -0
  14. package/dist/{chunk-3qtn3zjt.js → chunk-mm5p3tvh.js} +26 -26
  15. package/dist/{chunk-3qtn3zjt.js.map → chunk-mm5p3tvh.js.map} +6 -6
  16. package/dist/{chunk-mm45shzv.js → chunk-njem61cd.js} +1 -1
  17. package/dist/{chunk-212m5z3p.js → chunk-qv2zapxa.js} +1 -1
  18. package/dist/{chunk-2xtkh8bh.js → chunk-yem48znp.js} +1 -1
  19. package/dist/chunk-z0bzca7f.js +5 -0
  20. package/dist/{chunk-1h6g1hkg.js.map → chunk-z0bzca7f.js.map} +3 -3
  21. package/dist/{chunk-ztfkmpk5.js → chunk-zppfpg1m.js} +2 -2
  22. package/dist/{chunk-ztfkmpk5.js.map → chunk-zppfpg1m.js.map} +1 -1
  23. package/dist/client/Head.d.ts.map +1 -1
  24. package/dist/client/index.js +20 -2
  25. package/dist/client/index.js.map +1 -1
  26. package/dist/facades/Meta.d.ts +10 -0
  27. package/dist/facades/Meta.d.ts.map +1 -1
  28. package/dist/facades/index.js +1 -1
  29. package/dist/http/HttpRequest.d.ts +1 -0
  30. package/dist/http/HttpRequest.d.ts.map +1 -1
  31. package/dist/http/Metadata.d.ts +15 -0
  32. package/dist/http/Metadata.d.ts.map +1 -1
  33. package/dist/http/index.js +1 -1
  34. package/dist/http/requestContext.d.ts +1 -0
  35. package/dist/http/requestContext.d.ts.map +1 -1
  36. package/dist/i18n/index.js +1 -1
  37. package/dist/kernel/index.js +1 -1
  38. package/dist/orm/index.js +1 -1
  39. package/dist/server/devFetch.d.ts.map +1 -1
  40. package/dist/server/httpProd.d.ts.map +1 -1
  41. package/dist/server/index.js +1 -1
  42. package/dist/services/index.js +1 -1
  43. package/dist/services/router/DomainRouter.d.ts +21 -0
  44. package/dist/services/router/DomainRouter.d.ts.map +1 -1
  45. package/dist/services/router/ViewRouteDispatcher.d.ts +6 -0
  46. package/dist/services/router/ViewRouteDispatcher.d.ts.map +1 -1
  47. package/dist/services/router/config.d.ts +31 -1
  48. package/dist/services/router/config.d.ts.map +1 -1
  49. package/package.json +1 -1
  50. package/dist/chunk-1h6g1hkg.js +0 -5
  51. package/dist/chunk-376s9rbe.js +0 -24
  52. package/dist/chunk-743ympvp.js +0 -4
  53. package/dist/chunk-743ympvp.js.map +0 -10
  54. package/dist/chunk-eq3xexqp.js +0 -58
  55. /package/dist/{chunk-ys8nk9ga.js.map → chunk-d54afkwy.js.map} +0 -0
  56. /package/dist/{chunk-mm45shzv.js.map → chunk-njem61cd.js.map} +0 -0
  57. /package/dist/{chunk-212m5z3p.js.map → chunk-qv2zapxa.js.map} +0 -0
  58. /package/dist/{chunk-2xtkh8bh.js.map → chunk-yem48znp.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ViewRouteDispatcher.d.ts","sourceRoot":"","sources":["../../../services/router/ViewRouteDispatcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ViewRouteDispatcher.d.ts","sourceRoot":"","sources":["../../../services/router/ViewRouteDispatcher.ts"],"names":[],"mappings":"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"}
@@ -124,6 +124,36 @@ export interface ViewRouteConfig {
124
124
  * group's `view` inherits it or sets its own.
125
125
  */
126
126
  meta?: DefaultViewMeta | ((req: HttpRequest) => DefaultViewMeta | Promise<DefaultViewMeta>);
127
+ /**
128
+ * Whether the files the build copied out of `public/` (`/robots.txt`,
129
+ * `/favicon.ico`, ...) are served on these views' hosts (#1015). `false`
130
+ * hands those paths to these views' routes instead, e.g. a `route.domains`
131
+ * group whose `/robots.txt` is a route of its own while the root keeps the
132
+ * static file. `/.well-known/*` and the build's `/assets/*` are served
133
+ * either way. A group inherits the root's value or sets its own.
134
+ * Default: `true`.
135
+ */
136
+ publicFiles?: boolean;
137
+ /**
138
+ * Whether these views' routes may answer under `/assets` (#1015). The build
139
+ * output is still served first, so the pages' own chunks, islands and
140
+ * fonts load; a path under `/assets` the build has no file for reaches the
141
+ * routes instead of gemi's `404`. A missing `/assets/*.js` (or `.mjs`)
142
+ * chunk keeps gemi's reload stub, so a route there is never reached. With
143
+ * it the boot no longer refuses routes under `/assets`. Meant for a
144
+ * `route.domains` group with a URL space of its own there (e.g. legacy
145
+ * media URLs). A group inherits the root's value or sets its own.
146
+ * Default: `false`.
147
+ */
148
+ assetRoutes?: boolean;
149
+ /**
150
+ * Whether browsers and Google Search may translate these views (#1087).
151
+ * `<Head />` renders `<meta name="google" content="notranslate">` unless
152
+ * this is `true`. Meant for a `route.domains` group of public content (a
153
+ * storefront, published sites), which inherits the root's value or sets its
154
+ * own. A handler's `Meta.translate(allow)` wins over it. Default: `false`.
155
+ */
156
+ translate?: boolean;
127
157
  onRequestStart?: (req: HttpRequest) => void | Promise<void>;
128
158
  onRequestEnd?: (req: HttpRequest) => void | Promise<void>;
129
159
  onRequestFail?: (req: HttpRequest, error: any) => void | Promise<void>;
@@ -347,5 +377,5 @@ export interface RouteConfig {
347
377
  }
348
378
  export declare function defineRouteConfig(config: RouteConfig): RouteConfig;
349
379
  export declare function apiRouteConfigDefaults(): Omit<Required<ApiRouteConfig>, "rootRouter">;
350
- export declare function viewRouteConfigDefaults(): Omit<Required<ViewRouteConfig>, "root" | "rootRouter" | "meta" | "notFound">;
380
+ export declare function viewRouteConfigDefaults(): Omit<Required<ViewRouteConfig>, "root" | "rootRouter" | "meta" | "notFound" | "translate">;
351
381
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../services/router/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../services/router/config.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gemi",
3
- "version": "0.171.0",
3
+ "version": "0.172.0",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "author": "Enes Tufekci <enes@gemijs.dev>",
@@ -1,5 +0,0 @@
1
- // @bun
2
- function v(j){return Object.freeze({name:j})}class N extends Error{key;constructor(j){super(`Request state "${j.name}" is not set. Check that whatever sets it (a middleware, \`context()\`) ran for this request.`);this.key=j;this.name="MissingRequestStateError"}}class P{#j=new Map;get(j){return this.#j.get(j)}require(j){if(!this.#j.has(j))throw new N(j);return this.#j.get(j)}set(j,J){return this.#j.set(j,J),J}has(j){return this.#j.has(j)}delete(j){return this.#j.delete(j)}static carry(j,J){for(let[Q,V]of j.#j)if(!J.#j.has(Q))J.#j.set(Q,V)}}function G(){for(let j of["HOST_NAME","APP_URL"]){let J=process.env[j]?.trim().replace(/\/+$/,"");if(J)return J}return}function h(j){let J=G(),Q=J===void 0?"fallback":J===process.env.HOST_NAME?.trim().replace(/\/+$/,"")?"HOST_NAME":"APP_URL",V=J??j?.trim().replace(/\/+$/,"");if(!V)throw Error("The app's public origin is not configured: set HOST_NAME (or APP_URL), e.g. HOST_NAME=https://example.com.");let Z=URL.canParse(V)?new URL(V).protocol:null;if(Z!=="http:"&&Z!=="https:")throw Error(`The app's public origin from ${Q} (${JSON.stringify(V)}) is not an absolute http(s) URL, e.g. https://example.com.`);return V}import{AsyncLocalStorage as y}from"async_hooks";var O=new Set(["woff2","woff","truetype","opentype","collection","embedded-opentype","svg"]),S={woff2:"woff2",woff:"woff",ttf:"truetype",otf:"opentype",ttc:"collection",eot:"embedded-opentype",svg:"svg"};var I=new Set(["auto","block","swap","fallback","optional"]),R=/^[a-zA-Z0-9.%+\- ]+$/,q=/^[uU]\+[0-9a-fA-F?]{1,6}(-[0-9a-fA-F]{1,6})?(\s*,\s*[uU]\+[0-9a-fA-F?]{1,6}(-[0-9a-fA-F]{1,6})?)*$/;function X(j){throw TypeError(`Meta.fonts: ${j}`)}function w(j){let J=(j.split(/[?#]/)[0]??"").split("/").pop()??"",Q=J.lastIndexOf(".");return Q===-1?null:S[J.slice(Q+1).toLowerCase()]??null}function U(j,J){if(J===void 0||J===null)return null;let Q=String(J).trim();if(!Q||!R.test(Q))X(`${j} ${JSON.stringify(J)} is not a valid font-${j} value`);return Q}function T(j){if(!Array.isArray(j))X("expected an array of fonts");return j.map((J)=>{if(typeof J?.family!=="string"||!J.family.trim())X("every font needs a family");let Q=typeof J.src==="string"?[{url:J.src}]:J.src;if(!Array.isArray(Q)||Q.length===0)X(`font "${J.family}" needs a src`);let V=Q.map(($)=>{if(typeof $?.url!=="string"||!$.url.trim())X(`font "${J.family}" has a source without a url`);if($.format!==void 0&&!O.has($.format))X(`font "${J.family}" has an unknown format ${JSON.stringify($.format)}`);return{url:$.url.trim(),format:$.format??w($.url)}}),Z=J.display??"swap";if(!I.has(Z))X(`display ${JSON.stringify(Z)} is not a valid font-display value`);let z=J.unicodeRange?.trim()||null;if(z&&!q.test(z))X(`unicodeRange ${JSON.stringify(J.unicodeRange)} is not a valid unicode-range`);return{family:J.family.trim(),src:V,weight:U("weight",J.weight),style:U("style",J.style),stretch:U("stretch",J.stretch),display:Z,unicodeRange:z,preload:J.preload===!0}})}class Y{content={title:"Gemi App",description:null,openGraph:null,htmlAttributes:null,canonical:null,alternates:null,fonts:null,robots:null};touched=!1;setFields=new Set;render(){return{title:this.content.title,description:this.content.description,openGraph:this.content.openGraph,htmlAttributes:this.content.htmlAttributes,canonical:this.content.canonical,alternates:this.content.alternates,fonts:this.content.fonts,robots:this.content.robots}}htmlAttributes(j){this.touched=!0;let J=Object.fromEntries(Object.entries(j).filter(([,Q])=>Q!==void 0));this.content.htmlAttributes={...this.content.htmlAttributes,...J}}canonical(j){this.touched=!0,this.content.canonical=j}robots(j){this.touched=!0,this.content.robots=j}alternates(j){this.touched=!0,this.content.alternates=j}fonts(j){let J=T(j);this.touched=!0,this.content.fonts=[...this.content.fonts??[],...J]}title(j){this.touched=!0,this.setFields.add("title"),this.content.title=j}description(j){this.touched=!0,this.setFields.add("description"),this.content.description=j}get hasAllDefaultFields(){return this.setFields.size===3}applyDefaults(j){if(!this.setFields.has("title")&&j.title!==void 0)this.content.title=j.title;if(!this.setFields.has("description")&&j.description!==void 0)this.content.description=j.description;if(!this.setFields.has("openGraph")&&j.openGraph){let{title:J,description:Q,type:V,...Z}=j.openGraph;this.content.openGraph=this.normalizeOpenGraph({...Z,title:J??this.content.title,description:Q??this.content.description??void 0,type:V??"website"})}}openGraph(j){this.touched=!0,this.setFields.add("openGraph"),this.content.openGraph=this.normalizeOpenGraph(j)}normalizeOpenGraph({title:j,description:J,type:Q,url:V,image:Z,imageAlt:z,imageWidth:$,imageHeight:D,twitterImage:H=Z,twitterImageAlt:E=z,twitterImageWidth:b=$,twitterImageHeight:x=D,twitterCard:A=H?"summary_large_image":"summary"}){let W=(B)=>B&&!B.startsWith("http")?`${G()}${B}`:B;return Object.fromEntries(Object.entries({title:j,description:J,type:Q,url:V,image:W(Z),imageAlt:z,imageWidth:$,imageHeight:D,twitterImage:W(H),twitterImageAlt:E,twitterImageWidth:b,twitterImageHeight:x,twitterCard:A}).filter(([B,C])=>C!==void 0))}}function F(j,J,Q={}){return[`${j}=${J}`,Q.maxAge?`Max-Age=${Q.maxAge}`:"",Q.httpOnly?"HttpOnly":"",Q.secure?"Secure":"",Q.sameSite?`SameSite=${Q.sameSite}`:"SameSite=Strict",Q.path?`Path=${Q.path}`:"Path=/",Q.domain?`Domain=${Q.domain}`:"",Q.expires?`Expires=${Q.expires.toUTCString()}`:"",Q.partitioned?"Partitioned":""].filter((V)=>V!=="").join("; ")}var K=new y;class M{req;cookies=new Set;headers=new Headers;serverQueries=null;user=null;csrfHmac=null;locale=null;metadata=new Y;rangeRequest=null;sessionId=null;featureEvaluations=null;featureContext=null;featureBuckets=null;pendingWork=new Set;ended=!1;constructor(j){this.req=j}waitUntil(j){if(this.ended)return;let J=Promise.resolve(j).then(()=>{},()=>{});this.pendingWork.add(J),J.then(()=>this.pendingWork.delete(J))}hasPendingWork(){return this.pendingWork.size>0}async whenIdle(){while(this.pendingWork.size>0)await Promise.all(Array.from(this.pendingWork))}setLocale(j){this.locale=j}renderMeta(){return this.metadata.render()}setCSRFHmac(j){this.csrfHmac=j}setCookie(j,J,Q={}){this.cookies.add(F(j,J,Q))}deleteCookie(j,J={}){this.cookies.add(F(j,"",{...J,maxAge:-1}))}setHeaders(j,J){this.headers.set(j,J)}setUser(j){this.user=j}setRequest(j){this.req=j}destroy(){this.ended=!0,delete this.cookies,delete this.headers,this.serverQueries=null,this.sessionId=null,this.featureEvaluations=null,this.featureContext=null,this.featureBuckets=null,delete this.user}}var _="session_id";function k(){let j=L.getStore();if(!j)return null;if(j.sessionId)return j.sessionId;let J=j.req?.cookies?.get(_);if(J)j.sessionId=J;return j.sessionId}function i(){let j=L.getStore();if(!j)return null;let J=k();if(J)return J;let Q=Bun.randomUUIDv7();return j.sessionId=Q,j.setCookie(_,Q,{httpOnly:!0,secure:Bun.env.NODE_ENV==="production",sameSite:"Lax",expires:new Date(Date.now()+31536000000)}),Q}class L{static getStore(){return K.getStore()}static setRequest(j){K.getStore().req=j}static run(j,J,Q){let V=new M(j);if(Q){if(V.user=Q.user,Q.state&&j.state)P.carry(Q.state,j.state)}return K.run(V,J)}static runWith(j,J){return K.run(j,J)}static exit(j){return K.exit(j)}}
3
- export{G as Ui,h as Vi,v as Wi,N as Xi,P as Yi,k as Zi,i as _i,L as $i};
4
-
5
- //# debugId=19E97FD84E91C06064756E2164756E21
@@ -1,24 +0,0 @@
1
- // @bun
2
- import{X as k,Y as FJ,Z as LJ,_ as _J}from"./chunk-ztfkmpk5.js";import{pa as N,ta as _,ua as CJ}from"./chunk-bwg7genv.js";import"./chunk-s0z61m9j.js";import{Gg as zJ,Hg as xJ,Ig as KJ,le as e,xg as YJ,yg as R}from"./chunk-3qtn3zjt.js";import"./chunk-vnk4vaer.js";import"./chunk-xkas0yp8.js";import{Nh as t,Oh as r,Rh as s}from"./chunk-ys8nk9ga.js";import{Ti as VJ}from"./chunk-5n21z4n8.js";import"./chunk-1h6g1hkg.js";import"./chunk-s71e6k9m.js";import"./chunk-fb77hwk0.js";import"./chunk-jxx9mctk.js";import"./chunk-s4fb4njt.js";import"./chunk-6t1t7h05.js";import"./chunk-a9frf7ym.js";import"./chunk-gwphn604.js";import"./chunk-m950vw4c.js";import"./chunk-978pc27j.js";import"./chunk-vfvjfw5k.js";import"./chunk-8b9ks729.js";import"./chunk-0q65jzhv.js";import{jl as XJ}from"./chunk-sp77zwpn.js";import"./chunk-9akefv1y.js";import{xl as UJ}from"./chunk-rpdekb8t.js";import{zl as T}from"./chunk-jd079awh.js";import"./chunk-9wcv7e1a.js";import{createHash as O2}from"crypto";import{join as v,resolve as MJ,sep as IJ}from"path";import{Duplex as EJ}from"stream";import{constants as P,createBrotliCompress as yJ,createGzip as gJ}from"zlib";var fJ=["br","gzip"],mJ=1024,uJ=5,hJ=19,cJ=6;function pJ(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 dJ(J){if(J===null||J===void 0)return null;let $=new Map;for(let Z of J.split(",")){let[X,...W]=Z.split(";"),j=X.trim().toLowerCase();if(j==="")continue;let G=1;for(let Y of W){let O=Y.indexOf("=");if(O===-1)continue;if(Y.slice(0,O).trim().toLowerCase()==="q"){G=pJ(Y.slice(O+1));break}}$.set(j,G)}return $}function S(J,$=fJ){let Z=dJ(J);if(!Z)return null;let X=Z.get("*"),W=null,j=0;for(let G of $){let Y=Z.get(G)??X??0;if(Y>j)W=G,j=Y}return W}function lJ(J,$){if(!J)return!1;return J.split(",").some((Z)=>Z.trim().toLowerCase().split("=")[0].trim()===$)}function oJ(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 Z=$.headers.get("Content-Type");if(!Z||!/^\s*text\/html\s*(;|$)/i.test(Z))return!1;if(!$.body)return!1;let X=$.headers.get("Content-Encoding");if(X&&X.trim().toLowerCase()!=="identity")return!1;if(lJ($.headers.get("Cache-Control"),"no-transform"))return!1;let W=$.headers.get("Content-Length");if(W!==null&&Number(W)<mJ)return!1;return!0}function nJ(J){let $=J==="br"?yJ({params:{[P.BROTLI_PARAM_QUALITY]:uJ,[P.BROTLI_PARAM_LGWIN]:hJ},flush:P.BROTLI_OPERATION_FLUSH}):gJ({level:cJ,flush:P.Z_SYNC_FLUSH});return EJ.toWeb($)}function iJ(J){let $=J.get("Vary");if(!$){J.set("Vary","Accept-Encoding");return}let Z=$.split(",").map((X)=>X.trim().toLowerCase());if(Z.includes("*")||Z.includes("accept-encoding"))return;J.append("Vary","Accept-Encoding")}function o(J,$){if(!oJ(J.method,$))return $;let Z=new Headers($.headers);iJ(Z);let X=S(J.headers.get("Accept-Encoding"));if(!X)return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z});let W;try{W=nJ(X)}catch{return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}return Z.set("Content-Encoding",X),Z.delete("Content-Length"),new Response($.body.pipeThrough(W),{status:$.status,statusText:$.statusText,headers:Z})}import{readdir as $2,stat as JJ}from"fs/promises";import{join as Z2}from"path";import{mkdir as _2,readFile as aJ,stat as M2,writeFile as I2}from"fs/promises";import{dirname as P2,join as tJ}from"path";import{promisify as n}from"util";import{brotliCompress as rJ,constants as T2,gzip as sJ}from"zlib";var eJ=".vite/static-assets.json";var i={br:".br",gzip:".gz"},J2=["br","gzip"],D2=n(rJ),q2=n(sJ);async function a(J){let $;try{$=await aJ(tJ(J,eJ),"utf8")}catch{return null}let Z;try{Z=JSON.parse($)?.files}catch{return null}if(!Z||typeof Z!=="object")return null;let X={files:{}};for(let[W,j]of Object.entries(Z)){if(!Array.isArray(j))continue;X.files[W]=J2.filter((G)=>j.includes(G))}return X}function b(J){let $=J.toString(),Z=new Bun.CryptoHasher("sha1");return Z.update($),Z.digest("hex")}async function $J(J){let $=new Set;async function Z(X,W){let j;try{j=await $2(X,{withFileTypes:!0})}catch{return}for(let G of j){if(G.name.startsWith("."))continue;if(W&&G.name==="assets")continue;let Y=Z2(X,G.name),O=G.isDirectory(),V=G.isFile();if(G.isSymbolicLink())try{let K=await JJ(Y);O=K.isDirectory(),V=K.isFile()}catch{continue}if(V)$.add(Y);else if(O&&!G.isSymbolicLink())await Z(Y,!1)}}return await Z(J,!0),$}var X2="public, max-age=31536000, must-revalidate",Q2="public, max-age=31536000, immutable";async function W2(J,$,Z){if(Z.length===0||J.headers.has("Range"))return null;let X=S(J.headers.get("Accept-Encoding"),Z);if(!X)return null;let W=$+i[X];try{let j=await JJ(W);return j.isFile()?{encoding:X,path:W,size:j.size}:null}catch{return null}}async function ZJ(J,$,Z={}){let X=Bun.file($),W=Z.encodings??[],j={"Content-Type":X.type||"application/octet-stream","Cache-Control":Z.immutable?Q2:X2,"Accept-Ranges":"bytes"};if(W.length>0)j.Vary="Accept-Encoding";let G=await W2(J,$,W);if(G){let V=Bun.file(G.path);return new Response(V.stream(),{headers:{...j,"Content-Encoding":G.encoding,"Content-Length":String(G.size),ETag:`${b(V.lastModified)}-${G.encoding}`}})}let Y=X.size;j.ETag=b(X.lastModified);let O=t(J.headers.get("Range"));if(O){let V=r(O,Y);if(!V)return e(Y);return new Response(X.slice(V.start,V.end+1).stream(),{status:206,headers:{...j,"Content-Range":s(V.start,V.end,Y),"Content-Length":String(V.length)}})}return new Response(X.stream(),{headers:{...j,"Content-Length":String(Y)}})}import{stat as V2}from"fs/promises";var A="app/client.tsx";function QJ(J,$=N){let Z=J[A]?.file;if(!Z)return;return{module:_(Z,$),preload:L(J,A,$)}}function L(J,$,Z=N){let X=[],W=new Set,j=(G)=>{if(W.has(G))return;W.add(G);let Y=J[G];if(!Y?.file)return;X.push(_(Y.file,Z));for(let O of Y.imports??[])j(O)};return j($),X}function j2(J,$,Z=N){let X=new Set(L(J,$,Z)),W=[],j=new Set,G=(O)=>{if(j.has(O))return;j.add(O);let V=J[O];if(!V)return;for(let K of V.dynamicImports??[])if(!/(^|\/)node_modules\//.test(K)&&!W.includes(K))W.push(K);for(let K of V.imports??[])G(K)};G($);let Y=[];for(let O of W)for(let V of L(J,O,Z))if(!X.has(V))X.add(V),Y.push(V);return Y}function WJ(J,$){let Z=[],X=new Set,W=new Set,j=(G)=>{if(W.has(G))return;W.add(G);let Y=J[G];if(!Y)return;for(let O of Y.imports??[])j(O);for(let O of Y.css??[])if(!X.has(O))X.add(O),Z.push(O)};return j($),Z}function jJ(J,$=N){let Z=new Map;return(X)=>{if(!Z.has(X)){let W=`${X}${XJ}`,j=J[W]?.file;Z.set(X,j?{src:_(j,$),preload:L(J,W,$),dynamicPreload:j2(J,W,$)}:void 0)}return Z.get(X)}}var GJ="x-gemi-build";function HJ(J,$=30000){let Z=JSON.stringify("gemi:chunk-reload"),X=JSON.stringify(`Failed to fetch dynamically imported module: ${J}`);return`var r=!1;try{var s=window.sessionStorage,u=window.location.href,m=JSON.parse(s.getItem(${Z})||"{}");if(!m||typeof m!=="object")m={};var d=Date.now()-m[u];if(navigator.onLine!==!1&&!(d>=0&&d<${$})){m[u]=Date.now();s.setItem(${Z},JSON.stringify(m));r=!0}}catch(e){}if(r)window.location.reload();else throw new Error(${X});export {}`}var G2=new RegExp(`^${YJ}/.+\\.m?js$`);function H2(J){return G2.test(J)}function OJ(J){if(H2(J))return new Response(HJ(J),{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store"}});if(R(J))return new Response("Not found",{status:404});return}var Y2=`<!DOCTYPE html>
3
- <html lang="en">
4
- <head>
5
- <meta charset="UTF-8" />
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>Internal Server Error</title>
8
- <style>
9
- body { font-family: system-ui, sans-serif; margin: 0; min-height: 100vh; display: grid; place-items: center; }
10
- main { text-align: center; padding: 16px; }
11
- h1 { font-size: 1.5rem; margin: 0 0 0.5rem; }
12
- p { margin: 0; opacity: 0.7; }
13
- </style>
14
- </head>
15
- <body>
16
- <main>
17
- <h1>Something went wrong</h1>
18
- <p>Please try again later.</p>
19
- </main>
20
- </body>
21
- </html>`;function w(J,$,Z){if(!Z)console.error(J);else try{Z(J instanceof Error?J:Error(String(J),{cause:J}))}catch(X){console.error(J),console.error(X)}if(T($))return new Response(JSON.stringify({error:VJ("server_error","Internal Server Error",500)}),{status:500,headers:{"Content-Type":"application/json"}});return new Response(Y2,{status:500,headers:{"Content-Type":"text/html; charset=utf-8"}})}var D=UJ(),U2=v(D,"app"),C=v(D,"dist"),M=v(C,"client");function z2(J){let $;try{$=decodeURIComponent(J)}catch{return null}let Z=MJ(M,"."+$.replace("/assets/assets","/assets"));return Z.startsWith(M+IJ)?Z:null}async function x2(J){try{return(await V2(J)).isFile()}catch{return!1}}async function z3(J,$){let Z=await import(`${C}/client/.vite/manifest.json`),X=await import(`${C}/server/.vite/manifest.json`),W=await CJ(`${C}/client`);process.env.ROOT_DIR=D,process.env.APP_DIR=U2,process.env.DIST_DIR=C;let j={},G={},Y={},O={},V={},K=(Q,H)=>`"${Q}": () => import("${H}")`,E=[],y=J.getRequiredViews.call(J);for(let Q of["404",...J.getFlatComponentTree.call(J)]){let H=X[`app/views/${Q}.tsx`];if(!H?.file&&y[Q])throw LJ(Q,y[Q]);if(!H?.file){console.log(`Server file not found for ${Q}`),console.log(H);let x=Object.keys(X),F=`app/views/${Q}.tsx`;console.log(`${F} not found in server manifest`),console.log(x)}let U=await import(`${process.env.DIST_DIR}/server/${H?.file}`);j[Q]=U.default,G[Q]=U.OpenGraph,Y[Q]=U;let z=Z[`app/views/${Q}.tsx`];if(z?.css&&z?.css.length>0)O[Q]=z?.css;if(z)E.push(K(Q,_(z?.file,W))),V[Q]=L(Z,`app/views/${Q}.tsx`,W)}let NJ=`{${E.join(",")}}`,g=QJ(Z,W);if(!g)console.error(`Client manifest has no "${A}" entry \u2014 dist/client is incomplete, so documents will render but never hydrate.`);let PJ=Z["app/client.tsx"]?.css??[],f=(await Promise.all(PJ.map((Q)=>Bun.file(`${C}/client/${Q}`).text()))).join(`
22
- `),AJ=jJ(Z,W),m=O2("sha256").update(await Bun.file(`${C}/client/.vite/manifest.json`).text()).digest("base64url").slice(0,12),u=new Map,RJ=(Q)=>{let H=u.get(Q);if(!H)H=Bun.file(`${C}/client/${Q}`).text(),u.set(Q,H);return H},TJ=async(Q,H)=>{let U=new Set;for(let x of H?[H,...Q]:Q)for(let F of WJ(Z,`app/views/${x}.tsx`))U.add(F);let z=await Promise.all([...U].map(async(x)=>({id:x,content:await RJ(x)})));return k(H?z:[{content:f},...z])},DJ=await $J(M),h=new Map;for(let[Q,H]of Object.entries((await a(M))?.files??{})){let U=MJ(M,Q);if(U.startsWith(M+IJ))h.set(U,{immutable:!0,encodings:H})}async function qJ(Q){let{pathname:H}=new URL(Q.url);if(T(H))return await q(Q,H);let U=z2(H);if(R(H)||H.startsWith("/.well-known")||U!==null&&DJ.has(U)){if(!U||!await x2(U))return OJ(H)??await q(Q,H);try{return await ZJ(Q,U,h.get(U))}catch(F){return J.onException?.(F),new Response("Not found",{status:404})}}let x=await q(Q,H);if(H.endsWith(".json"))try{x.headers.set(GJ,m)}catch{}return x}async function q(Q,H){let U=J.fetch.bind(J);try{let z=await U(Q);if(z instanceof Response)return z;else{let x=[];return x.push({content:f}),await z({getStyles:async(bJ,p)=>{let d=bJ??["404"];if(p?.static)return TJ(d,p.layout);for(let wJ of d){let kJ=Z[`app/views/${wJ}.tsx`];for(let l of kJ?.css??[]){let vJ=Bun.file(`${process.env.DIST_DIR}/client/${l}`);x.push({id:l,content:await vJ.text()})}}return k(x)},clientEntry:g,modulePreloadManifest:V,loaders:NJ,viewImportMap:j,viewModules:Y,ogMap:G,cssManifest:O,assetBase:W,resolveIsland:AJ,buildId:m})}}catch(z){return w(z,H,J.onException)}}let BJ=(process.env.GEMI_COMPRESSION??"auto").toLowerCase()!=="off",c=zJ(process.env.GEMI_TRUST_PROXY),SJ=KJ(process.env),I=J.sockets();if(I&&c.kind==="none"&&!SJ)console.warn("[gemi] Broadcast sockets: GEMI_TRUST_PROXY is not set, so a socket's address is its TCP peer. Behind a proxy or load balancer every client shares the proxy's address, and broadcast.maxConnectionsPerIp caps the whole app per process. Set GEMI_TRUST_PROXY (see forwardedFor) or raise that limit.");let B=Bun.serve({maxRequestBodySize:10737418240,fetch:async(Q,H)=>{if(xJ(Q.headers,H.requestIP(Q)?.address??null,c),J.applyTrustedClientIp(Q),I?.matches(Q))return I.upgrade(Q,H);let U=await $(Q,(z)=>J.withGlobalMiddleware(z,qJ,(x)=>w(x,new URL(z.url).pathname,J.onException)));return BJ?o(Q,U):U},idleTimeout:_J(),port:process.env.PORT||5173,websocket:I?.websocket});return await I?.start(B),FJ({port:B.port,rootDir:D}),B}export{z3 as httpProd};
23
-
24
- //# debugId=BE2043B42E2A5DFC64756E2164756E21
@@ -1,4 +0,0 @@
1
- // @bun
2
- import{zl as J}from"./chunk-jd079awh.js";class L{kernel;onException;constructor(f){this.kernel=new f.kernel,this.kernel.boot.call(this.kernel),this.onException=f.onException??((A)=>{console.error("Unhandled exception in App:",A)})}async waitForBoot(){await this.kernel.waitForBoot()}getComponentTree(){return this.kernel.viewRoutes().componentTree}getFlatComponentTree(){let f=new Set;for(let A of this.kernel.domains().viewDispatchers())for(let C of A.flatComponentTree)f.add(C);return Array.from(f)}getRequiredViews(){let f={};for(let A of this.kernel.domains().viewDispatchers())Object.assign(f,A.requiredViews);return f}devAllowedHosts(){let{resolver:f}=this.kernel.domains();if(!f)return[];if(f.devHosts===!0)return!0;return[`.${f.root}`,...f.devHosts]}sockets(){return this.kernel.sockets.call(this.kernel)}applyTrustedClientIp(f){this.kernel.domains().applyClientIp(f)}getRouteManifest(){return this.kernel.viewRoutes().routeManifest}globallyGated=new WeakMap;async withGlobalMiddleware(f,A,C){let z;try{z=await this.kernel.run.call(this.kernel,()=>this.kernel.globalMiddleware(f))}catch(F){return await C(F)}if(z.refusal)return z.refusal;return this.globallyGated.set(f,z.carried),z.apply(await A(f))}async fetch(f){let A=new URL(f.url);return this.kernel.run.call(this.kernel,async()=>{this.applyTrustedClientIp(f);let C=this.globallyGated.has(f),z=C?null:await this.kernel.globalMiddleware(f),F=C?this.globallyGated.get(f):z.carried;if(z?.refusal)return z.refusal;let H=this.kernel.mcpHttp();if(H){let B=await H.handle(f);if(B)return z?z.apply(B):B}let I=this.kernel.domains(),D=await I.ask(f)??await I.route(f);if(D instanceof Response)return z?z.apply(D):D;if(!D){let B=new Response("Unknown host",{status:404});return z?z.apply(B):B}let G=J(A.pathname)?await D.api.handleApiRequest(f,F):await D.view.handleViewRequest(f,F);if(!z)return G;if(typeof G==="function"){let B=G;return async(...M)=>z.apply(await B(...M))}return z.apply(G)})}dispatchJob(f,A){return this.kernel.run.bind(this.kernel)(()=>{return this.kernel.queue().dispatchJob(f,A)})}shutdown(f){return this.kernel.shutdown(f)}destroy(){this.kernel.destroy()}clone(){return Object.assign(Object.create(Object.getPrototypeOf(this)),this)}}export{L as Ea};
3
-
4
- //# debugId=0E176D95ABD32EDC64756E2164756E21
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../app/App.ts"],
4
- "sourcesContent": [
5
- "import type { Kernel } from \"../kernel\";\nimport type { CarriedContext } from \"../http/requestContext\";\nimport { isApiPath } from \"../services/router/apiPath\";\nimport type { SocketHub } from \"../services/broadcast/SocketHub\";\n\n/** What the servers use of the broadcast `SocketHub`. */\nexport type SocketTransport = Pick<\n SocketHub,\n \"matches\" | \"upgrade\" | \"websocket\" | \"socketOptions\" | \"start\" | \"shutdown\"\n>;\n\ninterface AppParams {\n kernel: new () => Kernel;\n onException?: (error: Error) => void;\n}\n\nexport class App {\n private kernel: Kernel;\n public onException?: (error: Error) => void;\n\n constructor(params: AppParams) {\n this.kernel = new params.kernel();\n this.kernel.boot.call(this.kernel);\n this.onException =\n params.onException ??\n ((error: Error) => {\n console.error(\"Unhandled exception in App:\", error);\n });\n }\n\n // Every service this class touches is resolved through a `this.kernel.*`\n // accessor rather than by importing the service class and calling `app()`\n // here. That is deliberate: the built bin (`dist/bin/gemi.js`) bundles its own\n // copy of gemi, while the app's Kernel is loaded from source and resolves\n // `gemi/*` to the source modules — so the two copies have *different*\n // `kernelContext` AsyncLocalStorage instances and different `Application`\n // class objects. A method call on the Kernel executes in the app's copy and\n // reads the app's container; a resolution attempted here would not. Service\n // *tokens* still cross the boundary safely (they are plain strings), which is\n // why `kernel.resolve()` works from either side.\n public async waitForBoot() {\n await this.kernel.waitForBoot();\n }\n\n public getComponentTree() {\n return this.kernel.viewRoutes().componentTree;\n }\n\n // Every host group's views, not just the root's: the servers load these\n // modules up front, and a view only an `admin.` group routes to still has\n // to be among them.\n public getFlatComponentTree() {\n const views = new Set<string>();\n for (const dispatcher of this.kernel.domains().viewDispatchers()) {\n for (const view of dispatcher.flatComponentTree) {\n views.add(view);\n }\n }\n return Array.from(views);\n }\n\n /**\n * The views gemi's own routes need from `app/views`, by name, with the\n * config that requires each (#1040), for the servers' existence check.\n */\n public getRequiredViews(): Record<string, string> {\n const views: Record<string, string> = {};\n for (const dispatcher of this.kernel.domains().viewDispatchers()) {\n Object.assign(views, dispatcher.requiredViews);\n }\n return views;\n }\n\n /**\n * The hosts the dev server's Vite may answer, besides the ones it always\n * admits (`localhost`, `*.localhost`, IP addresses): the `route.domains`\n * root, its subdomains and `route.domains.devHosts`. `true`, any host, only\n * when the app sets `devHosts: true` itself. Custom domains are not let\n * through on their own: the dev server cannot tell a real one from a host\n * name pointed at it by DNS rebinding, even less so with `custom.fallback`.\n */\n public devAllowedHosts(): true | string[] {\n const { resolver } = this.kernel.domains();\n if (!resolver) {\n return [];\n }\n if (resolver.devHosts === true) {\n return true;\n }\n return [`.${resolver.root}`, ...resolver.devHosts];\n }\n\n /**\n * The broadcast WebSocket endpoint the servers wire into `Bun.serve`, or\n * `null` when the app has no `route.channels`. Typed structurally: the hub\n * belongs to the app's copy of gemi (see the note above).\n */\n public sockets(): SocketTransport | null {\n return this.kernel.sockets.call(this.kernel);\n }\n\n /**\n * Applies `route.domains.trustProxy`'s `clientIpHeader` and, failing that,\n * `GEMI_CLIENT_IP_HEADER` (with or without `route.domains`): on a request\n * that carries a proxy's secret, the address its header names becomes\n * the one in `X-Forwarded-For`. The servers call it right after settling\n * `X-Forwarded-For` (`GEMI_TRUST_PROXY`) and before anything reads it —\n * the socket upgrade and the global middleware included. `fetch` calls it\n * too, for a caller that is not one of the servers. Idempotent.\n */\n public applyTrustedClientIp(req: Request) {\n this.kernel.domains().applyClientIp(req);\n }\n\n public getRouteManifest() {\n return this.kernel.viewRoutes().routeManifest;\n }\n\n // Requests `withGlobalMiddleware` already ran the global middleware for, so\n // `fetch` inside it does not run the list a second time, and can still hand\n // the route what the list carried. Keyed by the Request object: the servers\n // hand `fetch` the same one they gated.\n private globallyGated = new WeakMap<Request, CarriedContext | null>();\n\n /**\n * Runs the `global` middleware list, then `next` — what the servers put in\n * front of everything they serve, so the list covers static files, which\n * never reach `fetch`, as well as routes. A refusal is answered without\n * calling `next`. A global middleware that throws something other than a\n * break is answered by `onError` rather than by `next`, since a gate that\n * failed must not let a static file through.\n */\n public async withGlobalMiddleware(\n req: Request,\n next: (req: Request) => Promise<Response>,\n onError: (err: unknown) => Response | Promise<Response>,\n ): Promise<Response> {\n let outcome: Awaited<ReturnType<Kernel[\"globalMiddleware\"]>>;\n try {\n outcome = await this.kernel.run.call(this.kernel, () => this.kernel.globalMiddleware(req));\n } catch (err) {\n return await onError(err);\n }\n if (outcome.refusal) {\n return outcome.refusal;\n }\n this.globallyGated.set(req, outcome.carried);\n return outcome.apply(await next(req));\n }\n\n public async fetch(req: Request): Promise<Response> {\n const url = new URL(req.url);\n return this.kernel.run.call(this.kernel, async () => {\n // Repeated from the servers, for a caller that is not one of them.\n this.applyTrustedClientIp(req);\n // Run here too for a caller that is not one of the servers, a test or an\n // app's own `Bun.serve`, so the list is not skipped by calling `fetch`.\n const gated = this.globallyGated.has(req);\n const outcome = gated ? null : await this.kernel.globalMiddleware(req);\n const carried = gated ? this.globallyGated.get(req) : outcome.carried;\n if (outcome?.refusal) {\n return outcome.refusal;\n }\n // The MCP endpoint, and its OAuth endpoints, on the host it is\n // configured for. Ahead of routing, so no route can shadow it, and after\n // the global middleware, which covers it as it covers everything.\n const mcp = this.kernel.mcpHttp();\n if (mcp) {\n const answered = await mcp.handle(req);\n if (answered) {\n return outcome ? outcome.apply(answered) : answered;\n }\n }\n const domains = this.kernel.domains();\n const dispatchers = (await domains.ask(req)) ?? (await domains.route(req));\n if (dispatchers instanceof Response) {\n return outcome ? outcome.apply(dispatchers) : dispatchers;\n }\n if (!dispatchers) {\n const unknown = new Response(\"Unknown host\", { status: 404 });\n return outcome ? outcome.apply(unknown) : unknown;\n }\n const result = isApiPath(url.pathname)\n ? await dispatchers.api.handleApiRequest(req, carried)\n : await dispatchers.view.handleViewRequest(req, carried);\n if (!outcome) {\n return result;\n }\n // A document comes back as a render function the server calls with its\n // manifests, and the Response only exists once it has.\n if (typeof result === \"function\") {\n const render = result as (...args: any[]) => Promise<Response>;\n return (async (...args: any[]) => outcome.apply(await render(...args))) as any;\n }\n return outcome.apply(result);\n });\n }\n\n public dispatchJob(jobName: string, args: string) {\n const kernelRun = this.kernel.run.bind(this.kernel);\n return kernelRun(() => {\n return this.kernel.queue().dispatchJob(jobName, args);\n });\n }\n\n /** Every provider's `shutdown()`; see `Kernel.shutdown`. */\n public shutdown(options?: { timeoutMs?: number }) {\n return this.kernel.shutdown(options);\n }\n\n public destroy() {\n this.kernel.destroy();\n }\n\n public clone() {\n return Object.assign(Object.create(Object.getPrototypeOf(this)), this);\n }\n}\n\nexport type FetchHandler = InstanceType<typeof App>[\"fetch\"];\n"
6
- ],
7
- "mappings": "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",
8
- "debugId": "0E176D95ABD32EDC64756E2164756E21",
9
- "names": []
10
- }
@@ -1,58 +0,0 @@
1
- // @bun
2
- import{W as T,Y as m,Z as P,_ as u}from"./chunk-ztfkmpk5.js";import{na as h,oa as v}from"./chunk-wt1yzzbw.js";import"./chunk-bwg7genv.js";import"./chunk-mvd4mc8p.js";import"./chunk-7txst143.js";import"./chunk-9ft0ayhf.js";import"./chunk-s0z61m9j.js";import"./chunk-743ympvp.js";import{Ti as N}from"./chunk-5n21z4n8.js";import{jl as y}from"./chunk-sp77zwpn.js";import{zl as S}from"./chunk-jd079awh.js";import"./chunk-9wcv7e1a.js";import{join as XJ}from"path";import{createServer as KJ}from"vite";import{join as n}from"path";import{existsSync as i}from"fs";import{IncomingMessage as o,ServerResponse as a}from"http";import{Socket as t}from"net";function p(J){return J.replace(/\x1b\[[0-9;]*m/g,"").replace(/\[[0-9;]*m/g,"").replace(/\n\s*\n/g,`
3
- `).split(`
4
- `).map((W)=>W.trim()).filter((W)=>W.length>0).join(`
5
- `).trim()}function C(J){return`
6
- <!DOCTYPE html>
7
- <html lang="en">
8
- <head>
9
- <meta charset="UTF-8" />
10
- <meta
11
- name="viewport"
12
- content="width=device-width, initial-scale=1.0"
13
- />
14
-
15
- <title>Error</title>
16
- <style>
17
- body {
18
- font-family: Arial, sans-serif;
19
- padding: 20px;
20
- }
21
- h1 {
22
- color: red;
23
- }
24
- </style>
25
- </head>
26
- <body>
27
- <div id="overlay"></div>
28
- <script type="module" src="/refresh.js"></script>
29
- <script type="module" src="/@vite/client"></script>
30
- <script>
31
- ${p.toString()}
32
- const err = ${JSON.stringify(J,Object.getOwnPropertyNames(J),2)}
33
-
34
- window.addEventListener('load', () => {
35
- const container = document.getElementById('overlay')
36
- const ErrorOverlay = customElements.get('vite-error-overlay')
37
- if (ErrorOverlay) {
38
- const overlay = new ErrorOverlay({ ...err, message: cleanupTerminalText(err.message) });
39
- container.appendChild(overlay)
40
- }
41
- })
42
- </script>
43
- </body>
44
- </html>
45
- `}function s(J,W){let Z=new URL(W.url),$=new o(new t);$.url=Z.pathname+Z.search,$.method=W.method,$.headers=Object.fromEntries(W.headers);let z=new a($),X=[];return new Promise((L)=>{z.write=(K)=>{if(K)X.push(Buffer.from(K));return!0},z.end=(K)=>{if(K&&typeof K!=="function")X.push(Buffer.from(K));let G=new Headers;for(let[j,Y]of Object.entries(z.getHeaders())){if(Y==null)continue;for(let Q of Array.isArray(Y)?Y:[Y])G.append(j,String(Q))}return L(new Response(X.length?Buffer.concat(X):null,{status:z.statusCode,headers:G})),z},J.middlewares($,z,()=>L(null))})}function r(J,W,Z){let $=String(W),z=" ".repeat($.length),X=" ".repeat(Math.max(0,Z-1))+"^";return`${$} | ${J}
46
- ${z} | ${X}
47
- `}function I(J){if(J&&typeof J==="object"){let W=J.position;if(W&&typeof W==="object"&&typeof W.file==="string")return{message:typeof J.message==="string"?J.message:String(J),stack:"",frame:typeof W.lineText==="string"?r(W.lineText,W.line,W.column):void 0,loc:{file:W.file,line:W.line,column:W.column}};return{message:typeof J.message==="string"?J.message:String(J),stack:typeof J.stack==="string"?J.stack:""}}return{message:String(J),stack:""}}function x(J){let W=globalThis.__gemiVite;if(!W)return;W.ws.send({type:"error",err:I(J)}),globalThis.__gemiErrorActive=!0}function M(J){let W=J.environments.ssr;if(typeof W?.runner?.import!=="function")throw Error("gemi dev requires a runnable Vite SSR environment.");return W.runner}var f="/@gemi/dev-entry.js",e=`const report = (error) => console.error(error);
48
- await import("/refresh.js").catch(report);
49
- await import("/@vite/client").catch(report);
50
- await import("/app/client.tsx");
51
- `,JJ=`import RefreshRuntime from "/@react-refresh";
52
- RefreshRuntime.injectIntoGlobalHook(window);
53
- window.$RefreshReg$ = () => {};
54
- window.$RefreshSig$ = () => (type) => type;
55
- window.__vite_plugin_react_preamble_installed__ = true;
56
- `;function WJ(J){let{pathname:W}=new URL(J.url),Z=($)=>new Response($,{headers:{"Content-Type":"application/javascript"}});if(W===f)return Z(e);if(W.startsWith("/render-error.js"))return Z("window.render_error = true");if(W.startsWith("/refresh.js"))return Z(JJ);return null}function R(J,W,Z){let $=n(process.cwd(),"app");return async(z)=>{let{pathname:X}=new URL(z.url),L=(G)=>{if(console.error(G),Z.ssrFixStacktrace?.(G),x(G),S(X))return new Response(JSON.stringify({error:N("server_error",G?.message??String(G),500)}),{status:500,headers:{"Content-Type":"application/json"}});return globalThis.__gemiErrorPageServed=!0,new Response(C(I(G)),{status:500,headers:{"Content-Type":"text/html"}})},K=async(G)=>{let j=WJ(G);if(j)return j;try{let Y=J.fetch.bind(J),Q=await s(Z,G)??await Y(G);if(Q instanceof Response)return Q;let A={},V={},b={},c=(U,O)=>`"${U}": () => import("${O}")`,D=[],l=J.getRequiredViews.call(J);for(let U of["404",...J.getFlatComponentTree.call(J)]){if(Bun.env.NODE_ENV==="test")break;let O=`${process.env.APP_DIR}`,_=l[U];if(_&&!i(`${O}/views/${U}.tsx`))throw P(U,_);let B=await M(Z).import(`${O}/views/${U}.tsx`);A[U]=B.default,V[U]=B?.OpenGraph,b[U]=B,D.push(c(U,`/app/views/${U}.tsx`))}let d=`{${D.join(",")}}`;return await Q({getStyles:async(U,O)=>await T($,Z,U,O?.layout),resolveIsland:(U)=>({src:`/${U}${y}`,preload:[]}),buildId:"dev",bootstrapModules:[f],viewImportMap:A,viewModules:b,ogMap:V,loaders:d,cssManifest:{}})}catch(Y){return L(Y)}};return await W(z,(G)=>J.withGlobalMiddleware(G,K,L))}}function ZJ(J){try{return Bun.listen({hostname:"0.0.0.0",port:J,socket:{data(){}}}).stop(!0),!0}catch(W){return W?.code!=="EADDRINUSE"}}function k(J,W=ZJ){let Z=24678+(J-5173);if(Z>65471)Z=24678;for(let $=Z;$<Z+64;$++)if(W($))return $;throw Error(`Could not find a free port for Vite's HMR websocket: tried ${Z}-${Z+64-1}. Set one explicitly in gemi.config.ts as \`vite: { server: { ws: { port } } }\`.`)}import{createServer as $J}from"http";var zJ=new Set(["vite-hmr","vite-ping"]);async function E(J){let W=$J((Z,$)=>{$.writeHead(426,{"Content-Type":"text/plain"}),$.end("Upgrade Required")});return await new Promise((Z,$)=>{W.once("error",$),W.listen(J,"127.0.0.1",()=>{W.off("error",$),Z()})}),W}function g(J){if(!J||typeof J!=="object")return null;let Z=J.server?.address?.();if(Z&&typeof Z==="object"&&"port"in Z)return Number(Z.port)||null;return null}function q(J){if(J.headers.get("upgrade")?.toLowerCase()!=="websocket")return!1;return zJ.has(J.headers.get("sec-websocket-protocol")??"")}var GJ=(J)=>typeof J==="string"?J:new Uint8Array(J);async function w(J,W,Z){let $=new URL(J.url),z=J.headers.get("sec-websocket-protocol")??"vite-hmr",X={host:J.headers.get("host")??$.host},L=J.headers.get("origin");if(L)X.origin=L;let K=new WebSocket(`ws://127.0.0.1:${Z}${$.pathname}${$.search}`,{protocols:[z],headers:X});K.binaryType="arraybuffer";let G={upstream:K,early:[]};if(K.onmessage=(Q)=>{let A=GJ(Q.data);if(G.browser)G.browser.send(A);else G.early.push(A)},K.onclose=(Q)=>{G.browser?.close(QJ(Q.code),Q.reason)},K.onerror=()=>{},!await new Promise((Q)=>{K.addEventListener("open",()=>Q(!0),{once:!0}),K.addEventListener("close",()=>Q(!1),{once:!0})}))return new Response("Vite refused the HMR websocket",{status:403});if(!W.upgrade(J,{headers:{"Sec-WebSocket-Protocol":z},data:G}))return K.close(),new Response("WebSocket upgrade failed",{status:400});return}function QJ(J){if(J===1000||J>=1001&&J<=1003||J>=1007&&J<=1014)return J;if(J>=3000&&J<=4999)return J;return 1000}var F={open(J){let W=J.data;for(let Z of W.early)J.send(Z);if(W.early=[],W.browser=J,W.upstream.readyState!==WebSocket.OPEN)J.close(1000)},message(J,W){if(J.data.upstream.readyState===WebSocket.OPEN)J.data.upstream.send(W)},close(J){let{upstream:W}=J.data;if(W.readyState<=WebSocket.OPEN)W.close()}};function LJ(J,W){let Z=W.websocket,$=(z)=>z.data?.gemiSocket===!0;return{...W.socketOptions(),maxPayloadLength:16777216,closeOnBackpressureLimit:!1,open:(z)=>$(z)?Z.open?.(z):J.open?.(z),message:(z,X)=>$(z)?Z.message(z,X):J.message(z,X),close:(z,X,L)=>$(z)?Z.close?.(z,X,L):J.close?.(z,X,L)}}var H=process.cwd(),UJ=XJ(H,"app");if(!globalThis.__gemiErrorHooked)globalThis.__gemiErrorHooked=!0,process.on("unhandledRejection",(J)=>{console.error(J),x(J)}),process.on("uncaughtException",(J)=>{console.error(J),x(J)});async function gJ(J,W){let Z=Number(process.env.PORT)||5173,$=u(),z=Boolean(globalThis.__gemiVite),X=J.devAllowedHosts.call(J);if(X===!0&&!z)console.warn("gemi dev: `route.domains.devHosts` is `true`, so the dev server answers any Host. A web page you visit can then read the app's source through DNS rebinding. List the hosts you need instead.");let L=globalThis.__gemiVite??=await KJ({configFile:!1,plugins:[v()],server:{middlewareMode:!0,port:Z,ws:{server:await E(k(Z))},allowedHosts:X,watch:{ignored:(Q)=>{let A=Q.split(/[/\\]/).pop()??"";return A===".env"||A.startsWith(".env.")}}},appType:"custom",resolve:{dedupe:["react","react-dom"]},optimizeDeps:{include:["react","react-dom","react-dom/client"]},ssr:{external:[...h]}});process.env.ROOT_DIR=H,process.env.APP_DIR=UJ;let K=R(J,W,L),G=g(L.config?.server?.ws),j=J.sockets(),Y=Bun.serve({port:Z,idleTimeout:$,fetch:(Q,A)=>{if(G!==null&&q(Q))return w(Q,A,G);if(J.applyTrustedClientIp(Q),j?.matches(Q))return j.upgrade(Q,A);return K(Q)},websocket:j?LJ(F,j):F});if(await j?.start(Y),z)M(L).clearCache();if(z)if(globalThis.__gemiErrorActive&&globalThis.__gemiErrorPageServed)globalThis.__gemiErrorActive=!1,globalThis.__gemiErrorPageServed=!1,L.ws.send({type:"full-reload"});else globalThis.__gemiErrorActive=!1,L.ws.send({type:"custom",event:"http-reload"});else m({port:Y.port,rootDir:H});return Y}export{I as viteErrorPayload,gJ as httpDev};
57
-
58
- //# debugId=86BDEF37FD9602BC64756E2164756E21