gemi 0.133.0 → 0.135.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 (47) hide show
  1. package/dist/ai/index.d.ts +2 -2
  2. package/dist/ai/index.d.ts.map +1 -1
  3. package/dist/ai/index.js +9 -9
  4. package/dist/ai/index.js.map +4 -4
  5. package/dist/ai/providers/realtime.d.ts +75 -4
  6. package/dist/ai/providers/realtime.d.ts.map +1 -1
  7. package/dist/ai/providers/sideband.d.ts +7 -2
  8. package/dist/ai/providers/sideband.d.ts.map +1 -1
  9. package/dist/ai/voice/energyVad.d.ts +42 -0
  10. package/dist/ai/voice/energyVad.d.ts.map +1 -0
  11. package/dist/ai/voice/index.d.ts +7 -0
  12. package/dist/ai/voice/index.d.ts.map +1 -1
  13. package/dist/ai/voice/index.js +601 -1
  14. package/dist/ai/voice/index.js.map +1 -1
  15. package/dist/ai/voice/liveTranscription.d.ts +99 -0
  16. package/dist/ai/voice/liveTranscription.d.ts.map +1 -0
  17. package/dist/ai/voice/transcriptionState.d.ts +52 -0
  18. package/dist/ai/voice/transcriptionState.d.ts.map +1 -0
  19. package/dist/ai/voice/useLiveTranscription.d.ts +86 -0
  20. package/dist/ai/voice/useLiveTranscription.d.ts.map +1 -0
  21. package/dist/bin/gemi.js.map +1 -1
  22. package/dist/chunk-6hstj70n.js +24 -0
  23. package/dist/{chunk-s21kn0x8.js.map → chunk-6hstj70n.js.map} +3 -3
  24. package/dist/{chunk-wevj4981.js → chunk-e2tjw0qx.js} +7 -7
  25. package/dist/{chunk-wevj4981.js.map → chunk-e2tjw0qx.js.map} +4 -4
  26. package/dist/{chunk-s55t7rxw.js → chunk-n68a4r72.js} +1 -1
  27. package/dist/{chunk-b6yb3svm.js → chunk-rhjh79np.js} +2 -2
  28. package/dist/{chunk-b6yb3svm.js.map → chunk-rhjh79np.js.map} +1 -1
  29. package/dist/{chunk-4pvv8qs0.js → chunk-sxcxmwbt.js} +1 -1
  30. package/dist/client/index.js +8 -2
  31. package/dist/client/index.js.map +1 -1
  32. package/dist/client/islands.d.ts +10 -0
  33. package/dist/client/islands.d.ts.map +1 -1
  34. package/dist/facades/index.js +1 -1
  35. package/dist/http/index.js +1 -1
  36. package/dist/i18n/index.js +1 -1
  37. package/dist/kernel/index.js +1 -1
  38. package/dist/server/index.js +1 -1
  39. package/dist/server/modulePreloads.d.ts +14 -2
  40. package/dist/server/modulePreloads.d.ts.map +1 -1
  41. package/dist/services/index.js +1 -1
  42. package/dist/services/router/staticDocument.d.ts +6 -3
  43. package/dist/services/router/staticDocument.d.ts.map +1 -1
  44. package/package.json +1 -1
  45. package/dist/chunk-s21kn0x8.js +0 -24
  46. /package/dist/{chunk-s55t7rxw.js.map → chunk-n68a4r72.js.map} +0 -0
  47. /package/dist/{chunk-4pvv8qs0.js.map → chunk-sxcxmwbt.js.map} +0 -0
@@ -15,6 +15,14 @@ export interface IslandOptions {
15
15
  load?: IslandLoad;
16
16
  /** Which export of the module is the component. Defaults to `"default"`. */
17
17
  export?: string;
18
+ /**
19
+ * Also `modulepreload` the chunks the island's code loads with `import()`,
20
+ * on static pages that render it, so a lazy piece it needs right after
21
+ * hydrating (an animation runtime, say) arrives with it instead of one
22
+ * round trip later. Applies to `"eager"` islands only; hydrated views are
23
+ * unaffected. Defaults to `false`.
24
+ */
25
+ preloadDynamic?: boolean;
18
26
  }
19
27
  /**
20
28
  * `() => import("./Counter")`, the argument `island()` takes. gemi's Vite
@@ -34,6 +42,8 @@ export interface IslandEntry {
34
42
  module: string | undefined;
35
43
  export: string;
36
44
  load: IslandLoad;
45
+ /** Preload the entry's dynamic imports too: set when any island() call sharing this entry asks. */
46
+ preloadDynamic?: boolean;
37
47
  }
38
48
  interface IslandInstance {
39
49
  html: Promise<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"islands.d.ts","sourceRoot":"","sources":["../../client/islands.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,KAAK,YAAY,EAQlB,MAAM,OAAO,CAAC;AAEf;;;;;;;;;GASG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,aAAa;IAC5B,wEAAwE;IACxE,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG;IACvD,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,CAAC,CAAC;CAChB,CAAC;AAEF,2FAA2F;AAC3F,MAAM,WAAW,WAAW;IAC1B,0EAA0E;IAC1E,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,yEAAyE;IACzE,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB;;;OAGG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7E,qEAAqE;IACrE,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC3C,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,gBAAgB;AAChB,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,qBAAqB,CAAC,QAAQ,CAAC,GACtC,qBAAqB,CAEvB;AAED,iEAAiE;AACjE,eAAO,MAAM,eAAe,cAAc,CAAC;AAC3C,kFAAkF;AAClF,eAAO,MAAM,qBAAqB,cAAc,CAAC;AACjD,6EAA6E;AAC7E,eAAO,MAAM,8BAA8B,mBAAmB,CAAC;AAE/D,sEAAsE;AACtE,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAI9C;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAIrE,CAAC;AAKF;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAgD5E;AAKD,KAAK,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS;IAAE,OAAO,EAAE,YAAY,CAAA;CAAE,EACxD,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACxB,OAAO,CAAC,EAAE,aAAa,GAAG;IAAE,MAAM,CAAC,EAAE,SAAS,CAAA;CAAE,GAC/C,CAAC,CAAC,SAAS,CAAC,CAAC;AAChB,wBAAgB,MAAM,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAClD,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACxB,OAAO,EAAE,aAAa,GAAG;IAAE,MAAM,EAAE,CAAC,CAAA;CAAE,GACrC,CAAC,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"islands.d.ts","sourceRoot":"","sources":["../../client/islands.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,KAAK,YAAY,EAQlB,MAAM,OAAO,CAAC;AAEf;;;;;;;;;GASG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,aAAa;IAC5B,wEAAwE;IACxE,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG;IACvD,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,CAAC,CAAC;CAChB,CAAC;AAEF,2FAA2F;AAC3F,MAAM,WAAW,WAAW;IAC1B,0EAA0E;IAC1E,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,UAAU,CAAC;IACjB,mGAAmG;IACnG,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,yEAAyE;IACzE,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB;;;OAGG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7E,qEAAqE;IACrE,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC3C,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,gBAAgB;AAChB,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,qBAAqB,CAAC,QAAQ,CAAC,GACtC,qBAAqB,CAEvB;AAED,iEAAiE;AACjE,eAAO,MAAM,eAAe,cAAc,CAAC;AAC3C,kFAAkF;AAClF,eAAO,MAAM,qBAAqB,cAAc,CAAC;AACjD,6EAA6E;AAC7E,eAAO,MAAM,8BAA8B,mBAAmB,CAAC;AAE/D,sEAAsE;AACtE,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAI9C;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAIrE,CAAC;AAKF;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAgD5E;AAKD,KAAK,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS;IAAE,OAAO,EAAE,YAAY,CAAA;CAAE,EACxD,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACxB,OAAO,CAAC,EAAE,aAAa,GAAG;IAAE,MAAM,CAAC,EAAE,SAAS,CAAA;CAAE,GAC/C,CAAC,CAAC,SAAS,CAAC,CAAC;AAChB,wBAAgB,MAAM,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAClD,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACxB,OAAO,EAAE,aAAa,GAAG;IAAE,MAAM,EAAE,CAAC,CAAA;CAAE,GACrC,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{Ce as a,Gf as r,He as c,Hf as s,Ie as e,If as t,Je as f,Jf as u,Ke as h,Le as i,Me as j,Te as k,Ue as l,Ve as m,We as n,Xe as o,ff as p,lg as v,vf as q}from"../chunk-wevj4981.js";import"../chunk-ff60bzvf.js";import"../chunk-feajsgns.js";import{Kh as b,hi as d,ji as g}from"../chunk-0rhf4g12.js";import"../chunk-zv5qyrqg.js";import"../chunk-4t41m5f1.js";import"../chunk-hj88dcss.js";import"../chunk-z61dj480.js";import"../chunk-vnw91fe1.js";import"../chunk-jy9dkgt0.js";import"../chunk-ysc7ykss.js";import"../chunk-jx5zx48j.js";import"../chunk-z9xxthp1.js";import"../chunk-65j32dtn.js";import"../chunk-beb265c9.js";import"../chunk-zypmy8yq.js";import"../chunk-jx2mgvvt.js";import"../chunk-ha15x5ns.js";import"../chunk-x9bk5s21.js";import"../chunk-gqgpwb88.js";import"../chunk-cxsvzqd4.js";import"../chunk-99a4e6zf.js";import"../chunk-rnp5k8m3.js";export{f as Url,d as Storage,r as Runs,j as Redis,a as Redirect,l as RateLimiter,e as Query,h as Meta,g as Log,m as Lock,c as Lang,s as Features,b as Facade,u as DB,n as Crypt,i as Cookie,o as Connections,t as ConnectionQueries,p as ChangeFeed,k as Cache,q as Broadcast,v as Auth};
2
+ import{Ce as a,Gf as r,He as c,Hf as s,Ie as e,If as t,Je as f,Jf as u,Ke as h,Le as i,Me as j,Te as k,Ue as l,Ve as m,We as n,Xe as o,ff as p,lg as v,vf as q}from"../chunk-e2tjw0qx.js";import"../chunk-ff60bzvf.js";import"../chunk-feajsgns.js";import{Kh as b,hi as d,ji as g}from"../chunk-0rhf4g12.js";import"../chunk-zv5qyrqg.js";import"../chunk-4t41m5f1.js";import"../chunk-hj88dcss.js";import"../chunk-z61dj480.js";import"../chunk-vnw91fe1.js";import"../chunk-jy9dkgt0.js";import"../chunk-ysc7ykss.js";import"../chunk-jx5zx48j.js";import"../chunk-z9xxthp1.js";import"../chunk-65j32dtn.js";import"../chunk-beb265c9.js";import"../chunk-zypmy8yq.js";import"../chunk-jx2mgvvt.js";import"../chunk-ha15x5ns.js";import"../chunk-x9bk5s21.js";import"../chunk-gqgpwb88.js";import"../chunk-cxsvzqd4.js";import"../chunk-99a4e6zf.js";import"../chunk-rnp5k8m3.js";export{f as Url,d as Storage,r as Runs,j as Redis,a as Redirect,l as RateLimiter,e as Query,h as Meta,g as Log,m as Lock,c as Lang,s as Features,b as Facade,u as DB,n as Crypt,i as Cookie,o as Connections,t as ConnectionQueries,p as ChangeFeed,k as Cache,q as Broadcast,v as Auth};
3
3
 
4
4
  //# debugId=89940D681786338764756E2164756E21
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{$d as E,Ae as G,Ag as la,Be as H,Bg as ma,Cg as na,De as I,Dg as oa,Ee as J,Eg as pa,Fe as K,Fg as qa,Ge as L,Gg as ra,Hg as sa,Ig as ta,Od as q,Pd as r,Qd as s,Rd as t,Rf as _,Sd as u,Td as B,Yd as C,_d as D,ae as F,mg as $,ng as aa,og as ba,rg as ca,sg as da,tg as ea,ug as fa,vg as ga,wg as ha,xg as ia,yg as ja,zg as ka}from"../chunk-wevj4981.js";import"../chunk-ff60bzvf.js";import"../chunk-feajsgns.js";import{$h as U,Dh as p,Eh as v,Fh as w,Gh as x,Hh as y,Ih as z,Jh as A,Th as M,Uh as N,Vh as O,Wh as P,Xh as Q,Yh as R,Zh as S,_h as T,ai as V,bi as W,ci as X,di as Y,ei as Z,gh as a,hh as b,ih as d,nh as e,oh as f,ph as g,qh as h,rh as i,sh as j,xh as n,yh as o}from"../chunk-0rhf4g12.js";import{ri as c}from"../chunk-zv5qyrqg.js";import{wi as k,xi as l,yi as m}from"../chunk-4t41m5f1.js";import"../chunk-hj88dcss.js";import"../chunk-z61dj480.js";import"../chunk-vnw91fe1.js";import"../chunk-jy9dkgt0.js";import"../chunk-ysc7ykss.js";import"../chunk-jx5zx48j.js";import"../chunk-z9xxthp1.js";import"../chunk-65j32dtn.js";import"../chunk-beb265c9.js";import"../chunk-zypmy8yq.js";import"../chunk-jx2mgvvt.js";import"../chunk-ha15x5ns.js";import"../chunk-x9bk5s21.js";import"../chunk-gqgpwb88.js";import"../chunk-cxsvzqd4.js";import"../chunk-99a4e6zf.js";import"../chunk-rnp5k8m3.js";export{g as toRangeHeaderValue,q as toMiddlewareList,k as stateKey,Z as safeFetch,f as resolveRange,e as parseRangeHeader,h as parseContentRange,u as parseByteSize,ha as middlewareConfigDefaults,J as httpError,d as getCookies,j as formatUnsatisfiedContentRange,i as formatContentRange,pa as defineResourcePolicy,ga as defineMiddlewareConfig,r as createUnsatisfiableResponse,s as createStreamResponse,K as createFileResponse,F as clientIp,X as classifyAddress,ba as authorizeChannel,L as ViewRouter,n as ValidationError,U as TooManyRedirectsError,S as TooLargeError,R as TimeoutError,qa as SitemapError,ra as Sitemap,H as SameSiteBounceMiddleware,Y as SafeResponse,M as SafeFetchError,G as SAME_SITE_BOUNCE_PARAM,sa as RobotsTxt,ta as Robots,oa as ResourcePolicy,b as ResourceController,m as RequestState,c as RequestBreakerError,E as RateLimitMiddleware,C as RateLimitExceededError,x as RangeNotSatisfiableError,ma as PoliciesServiceProvider,na as Policies,t as PayloadTooLargeError,y as NotFoundError,V as NetworkError,l as MissingRequestStateError,D as Middleware,ea as McpToolDeclaration,fa as McpRouter,da as McpRouteDeclaration,ca as McpModelParam,o as InvalidValidationRuleError,N as InvalidUrlError,w as InsufficientPermissionsError,W as HttpStatusError,I as HttpResponse,p as HttpRequest,z as FileNotFoundError,Q as DnsError,ka as CorsMiddleware,a as Controller,T as ContentTypeError,aa as ChannelRouter,$ as ChannelDeclaration,ja as CacheMiddleware,la as CSRFMiddleware,_ as BodyLimitMiddleware,O as BlockedHostError,P as BlockedAddressError,v as AuthorizationError,ia as AuthenticationMiddleware,A as AuthenticationError,B as ApiRouter};
2
+ import{$d as E,Ae as G,Ag as la,Be as H,Bg as ma,Cg as na,De as I,Dg as oa,Ee as J,Eg as pa,Fe as K,Fg as qa,Ge as L,Gg as ra,Hg as sa,Ig as ta,Od as q,Pd as r,Qd as s,Rd as t,Rf as _,Sd as u,Td as B,Yd as C,_d as D,ae as F,mg as $,ng as aa,og as ba,rg as ca,sg as da,tg as ea,ug as fa,vg as ga,wg as ha,xg as ia,yg as ja,zg as ka}from"../chunk-e2tjw0qx.js";import"../chunk-ff60bzvf.js";import"../chunk-feajsgns.js";import{$h as U,Dh as p,Eh as v,Fh as w,Gh as x,Hh as y,Ih as z,Jh as A,Th as M,Uh as N,Vh as O,Wh as P,Xh as Q,Yh as R,Zh as S,_h as T,ai as V,bi as W,ci as X,di as Y,ei as Z,gh as a,hh as b,ih as d,nh as e,oh as f,ph as g,qh as h,rh as i,sh as j,xh as n,yh as o}from"../chunk-0rhf4g12.js";import{ri as c}from"../chunk-zv5qyrqg.js";import{wi as k,xi as l,yi as m}from"../chunk-4t41m5f1.js";import"../chunk-hj88dcss.js";import"../chunk-z61dj480.js";import"../chunk-vnw91fe1.js";import"../chunk-jy9dkgt0.js";import"../chunk-ysc7ykss.js";import"../chunk-jx5zx48j.js";import"../chunk-z9xxthp1.js";import"../chunk-65j32dtn.js";import"../chunk-beb265c9.js";import"../chunk-zypmy8yq.js";import"../chunk-jx2mgvvt.js";import"../chunk-ha15x5ns.js";import"../chunk-x9bk5s21.js";import"../chunk-gqgpwb88.js";import"../chunk-cxsvzqd4.js";import"../chunk-99a4e6zf.js";import"../chunk-rnp5k8m3.js";export{g as toRangeHeaderValue,q as toMiddlewareList,k as stateKey,Z as safeFetch,f as resolveRange,e as parseRangeHeader,h as parseContentRange,u as parseByteSize,ha as middlewareConfigDefaults,J as httpError,d as getCookies,j as formatUnsatisfiedContentRange,i as formatContentRange,pa as defineResourcePolicy,ga as defineMiddlewareConfig,r as createUnsatisfiableResponse,s as createStreamResponse,K as createFileResponse,F as clientIp,X as classifyAddress,ba as authorizeChannel,L as ViewRouter,n as ValidationError,U as TooManyRedirectsError,S as TooLargeError,R as TimeoutError,qa as SitemapError,ra as Sitemap,H as SameSiteBounceMiddleware,Y as SafeResponse,M as SafeFetchError,G as SAME_SITE_BOUNCE_PARAM,sa as RobotsTxt,ta as Robots,oa as ResourcePolicy,b as ResourceController,m as RequestState,c as RequestBreakerError,E as RateLimitMiddleware,C as RateLimitExceededError,x as RangeNotSatisfiableError,ma as PoliciesServiceProvider,na as Policies,t as PayloadTooLargeError,y as NotFoundError,V as NetworkError,l as MissingRequestStateError,D as Middleware,ea as McpToolDeclaration,fa as McpRouter,da as McpRouteDeclaration,ca as McpModelParam,o as InvalidValidationRuleError,N as InvalidUrlError,w as InsufficientPermissionsError,W as HttpStatusError,I as HttpResponse,p as HttpRequest,z as FileNotFoundError,Q as DnsError,ka as CorsMiddleware,a as Controller,T as ContentTypeError,aa as ChannelRouter,$ as ChannelDeclaration,ja as CacheMiddleware,la as CSRFMiddleware,_ as BodyLimitMiddleware,O as BlockedHostError,P as BlockedAddressError,v as AuthorizationError,ia as AuthenticationMiddleware,A as AuthenticationError,B as ApiRouter};
3
3
 
4
4
  //# debugId=D7228A1ABDA7805564756E2164756E21
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{ca as T}from"../chunk-7nxnyw7x.js";import"../chunk-epvpmakp.js";import{ab as D}from"../chunk-47e7fbsp.js";import{Ld as b,Md as w}from"../chunk-q15f5g86.js";import"../chunk-py1twqh8.js";import{He as j}from"../chunk-wevj4981.js";import"../chunk-ff60bzvf.js";import"../chunk-feajsgns.js";import"../chunk-0rhf4g12.js";import"../chunk-zv5qyrqg.js";import"../chunk-4t41m5f1.js";import"../chunk-hj88dcss.js";import"../chunk-z61dj480.js";import"../chunk-vnw91fe1.js";import"../chunk-jy9dkgt0.js";import"../chunk-ysc7ykss.js";import"../chunk-jx5zx48j.js";import"../chunk-z9xxthp1.js";import"../chunk-65j32dtn.js";import"../chunk-beb265c9.js";import{Ak as L,Bk as R,Ck as S,xk as V,yk as X,zk as E}from"../chunk-zypmy8yq.js";import"../chunk-jx2mgvvt.js";import"../chunk-ha15x5ns.js";import"../chunk-x9bk5s21.js";import"../chunk-gqgpwb88.js";import"../chunk-cxsvzqd4.js";import"../chunk-99a4e6zf.js";import"../chunk-rnp5k8m3.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{w as translationConfigDefaults,N as translate,V as resolveLocale,X as negotiateLocale,L as isValidTimeZone,b as defineTranslationConfig,T as defineDictionary,R as createFormatter,S as Translator,D as TranslationServiceProvider,P as Dictionary,E as DEFAULT_TIME_ZONE};
2
+ import{ca as T}from"../chunk-7nxnyw7x.js";import"../chunk-epvpmakp.js";import{ab as D}from"../chunk-47e7fbsp.js";import{Ld as b,Md as w}from"../chunk-q15f5g86.js";import"../chunk-py1twqh8.js";import{He as j}from"../chunk-e2tjw0qx.js";import"../chunk-ff60bzvf.js";import"../chunk-feajsgns.js";import"../chunk-0rhf4g12.js";import"../chunk-zv5qyrqg.js";import"../chunk-4t41m5f1.js";import"../chunk-hj88dcss.js";import"../chunk-z61dj480.js";import"../chunk-vnw91fe1.js";import"../chunk-jy9dkgt0.js";import"../chunk-ysc7ykss.js";import"../chunk-jx5zx48j.js";import"../chunk-z9xxthp1.js";import"../chunk-65j32dtn.js";import"../chunk-beb265c9.js";import{Ak as L,Bk as R,Ck as S,xk as V,yk as X,zk as E}from"../chunk-zypmy8yq.js";import"../chunk-jx2mgvvt.js";import"../chunk-ha15x5ns.js";import"../chunk-x9bk5s21.js";import"../chunk-gqgpwb88.js";import"../chunk-cxsvzqd4.js";import"../chunk-99a4e6zf.js";import"../chunk-rnp5k8m3.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{w as translationConfigDefaults,N as translate,V as resolveLocale,X as negotiateLocale,L as isValidTimeZone,b as defineTranslationConfig,T as defineDictionary,R as createFormatter,S as Translator,D as TranslationServiceProvider,P as Dictionary,E as DEFAULT_TIME_ZONE};
3
3
 
4
4
  //# debugId=8CA687E85CEF787A64756E2164756E21
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{Ea as E}from"../chunk-t33yh84d.js";import{$a as p}from"../chunk-x51tegk3.js";import{ab as H}from"../chunk-47e7fbsp.js";import{Bb as L,Cb as Q,Db as T,Hb as U,Ib as y,Jb as F,Kb as C,Nb as D,Ob as I,Rb as b,Ub as f,Vb as k,Wb as m,nb as g,ob as W,pb as _,qb as l,rb as P,sb as u,tb as $,ub as V,vb as q,wb as B,xb as K}from"../chunk-4pvv8qs0.js";import"../chunk-2cnawkke.js";import"../chunk-x5hj0mqp.js";import"../chunk-qpwb3gnh.js";import{Fd as h}from"../chunk-xymr3asa.js";import"../chunk-q15f5g86.js";import"../chunk-py1twqh8.js";import{eg as w,fe as a,ge as d,ig as A,jg as R,ye as n,ze as v}from"../chunk-wevj4981.js";import"../chunk-ff60bzvf.js";import"../chunk-feajsgns.js";import"../chunk-0rhf4g12.js";import"../chunk-zv5qyrqg.js";import"../chunk-4t41m5f1.js";import"../chunk-hj88dcss.js";import{Mi as M}from"../chunk-z61dj480.js";import"../chunk-vnw91fe1.js";import"../chunk-jy9dkgt0.js";import"../chunk-ysc7ykss.js";import"../chunk-jx5zx48j.js";import"../chunk-z9xxthp1.js";import"../chunk-65j32dtn.js";import"../chunk-beb265c9.js";import"../chunk-zyhmn3hy.js";import"../chunk-zypmy8yq.js";import{Dk as O,Fk as z}from"../chunk-jx2mgvvt.js";import"../chunk-ha15x5ns.js";import"../chunk-x9bk5s21.js";import"../chunk-gqgpwb88.js";import"../chunk-cxsvzqd4.js";import"../chunk-99a4e6zf.js";import"../chunk-rnp5k8m3.js";var N=[C,I,E,T,L,k,B,Q,D,y,_,U,f,V,F,H,b,K,q,m,$];class S{config={};providers=[];services=[];serviceInstances=[];serviceTokens=new Set;servicesBooted=!1;models=[];app=new z;boot(){if(this.models.length>0)p(...this.models);else s();this.app.config.merge(this.config),z.setInstance(this.app),this.app.registerMany([...N,...this.providers]),this.registerServices()}registerServices(){let j=this.serviceTokens;this.serviceInstances=[],this.serviceTokens=new Set,this.servicesBooted=!1;let X=new Map;for(let G of this.services){let J=typeof G==="function"?new G:G,x=J.constructor;if(!x.token)throw Error(`Service [${x.name}] is listed in \`services\` but does not declare a \`static token\`.`);let Y=X.get(x.token);if(Y)throw Error(`Services [${Y}] and [${x.name}] both declare the token "${x.token}". Tokens are the container's keys, so they must be unique.`);X.set(x.token,x.name);let Z=x;if(!j.has(x.token)&&this.app.bound(Z))throw Error(`Service [${x.name}] declares the token "${x.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(Z,J),this.serviceInstances.push(J),this.serviceTokens.add(x.token)}}async waitForBoot(){await this.app.boot(),await this.bootServices(),l(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 O.run(this.app,j)}resolve(j){return this.app.make(j)}apiRoutes(){return this.app.make(A)}viewRoutes(){return this.app.make(w)}domains(){return this.app.make(R)}queue(){return this.app.make(h)}mcpHttp(){return this.app.config.get("route.mcp.remote.enabled")===!0?this.app.make(g):null}sockets(){return this.app.config.get("route.channels")?this.app.make(u):null}globalMiddleware(j){return P(j)}destroy(){if(this.app.resolved(W))this.app.make(W).stop();if(this.app.flush(),z.getInstance()===this.app)z.setInstance(void 0);O.disable()}}function s(){if(Bun.env.NODE_ENV==="production")return;let j=M();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{Ea as E}from"../chunk-t33yh84d.js";import{$a as p}from"../chunk-x51tegk3.js";import{ab as H}from"../chunk-47e7fbsp.js";import{Bb as L,Cb as Q,Db as T,Hb as U,Ib as y,Jb as F,Kb as C,Nb as D,Ob as I,Rb as b,Ub as f,Vb as k,Wb as m,nb as g,ob as W,pb as _,qb as l,rb as P,sb as u,tb as $,ub as V,vb as q,wb as B,xb as K}from"../chunk-sxcxmwbt.js";import"../chunk-2cnawkke.js";import"../chunk-x5hj0mqp.js";import"../chunk-qpwb3gnh.js";import{Fd as h}from"../chunk-xymr3asa.js";import"../chunk-q15f5g86.js";import"../chunk-py1twqh8.js";import{eg as w,fe as a,ge as d,ig as A,jg as R,ye as n,ze as v}from"../chunk-e2tjw0qx.js";import"../chunk-ff60bzvf.js";import"../chunk-feajsgns.js";import"../chunk-0rhf4g12.js";import"../chunk-zv5qyrqg.js";import"../chunk-4t41m5f1.js";import"../chunk-hj88dcss.js";import{Mi as M}from"../chunk-z61dj480.js";import"../chunk-vnw91fe1.js";import"../chunk-jy9dkgt0.js";import"../chunk-ysc7ykss.js";import"../chunk-jx5zx48j.js";import"../chunk-z9xxthp1.js";import"../chunk-65j32dtn.js";import"../chunk-beb265c9.js";import"../chunk-zyhmn3hy.js";import"../chunk-zypmy8yq.js";import{Dk as O,Fk as z}from"../chunk-jx2mgvvt.js";import"../chunk-ha15x5ns.js";import"../chunk-x9bk5s21.js";import"../chunk-gqgpwb88.js";import"../chunk-cxsvzqd4.js";import"../chunk-99a4e6zf.js";import"../chunk-rnp5k8m3.js";var N=[C,I,E,T,L,k,B,Q,D,y,_,U,f,V,F,H,b,K,q,m,$];class S{config={};providers=[];services=[];serviceInstances=[];serviceTokens=new Set;servicesBooted=!1;models=[];app=new z;boot(){if(this.models.length>0)p(...this.models);else s();this.app.config.merge(this.config),z.setInstance(this.app),this.app.registerMany([...N,...this.providers]),this.registerServices()}registerServices(){let j=this.serviceTokens;this.serviceInstances=[],this.serviceTokens=new Set,this.servicesBooted=!1;let X=new Map;for(let G of this.services){let J=typeof G==="function"?new G:G,x=J.constructor;if(!x.token)throw Error(`Service [${x.name}] is listed in \`services\` but does not declare a \`static token\`.`);let Y=X.get(x.token);if(Y)throw Error(`Services [${Y}] and [${x.name}] both declare the token "${x.token}". Tokens are the container's keys, so they must be unique.`);X.set(x.token,x.name);let Z=x;if(!j.has(x.token)&&this.app.bound(Z))throw Error(`Service [${x.name}] declares the token "${x.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(Z,J),this.serviceInstances.push(J),this.serviceTokens.add(x.token)}}async waitForBoot(){await this.app.boot(),await this.bootServices(),l(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 O.run(this.app,j)}resolve(j){return this.app.make(j)}apiRoutes(){return this.app.make(A)}viewRoutes(){return this.app.make(w)}domains(){return this.app.make(R)}queue(){return this.app.make(h)}mcpHttp(){return this.app.config.get("route.mcp.remote.enabled")===!0?this.app.make(g):null}sockets(){return this.app.config.get("route.channels")?this.app.make(u):null}globalMiddleware(j){return P(j)}destroy(){if(this.app.resolved(W))this.app.make(W).stop();if(this.app.flush(),z.getInstance()===this.app)z.setInstance(void 0);O.disable()}}function s(){if(Bun.env.NODE_ENV==="production")return;let j=M();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:
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{Ca as f}from"../chunk-kk18xqgc.js";import{Da as S}from"../chunk-sa6cxt3g.js";import{Pk as Q,Rk as Z,Sk as P,Tk as y,Uk as U,Vk as A}from"../chunk-gqgpwb88.js";import{Zk as H}from"../chunk-cxsvzqd4.js";import"../chunk-99a4e6zf.js";import{el as F}from"../chunk-rnp5k8m3.js";var x="/__gemi__/health",$=Symbol.for("gemi.server.health");function V(){let z=globalThis;return z[$]??={lagMs:0,consecutiveBreaches:0,degraded:!1,timer:void 0},z[$]}function W(){let z=V(),B=Q();return{healthy:!B&&!z.degraded,shuttingDown:B,lagMs:z.lagMs,consecutiveBreaches:z.consecutiveBreaches}}function E(z,B){let I=V();I.lagMs=z,I.consecutiveBreaches=z>B.maxLagMs?I.consecutiveBreaches+1:0;let J=I.consecutiveBreaches>=B.breaches;if(J&&!I.degraded)console.warn(`[gemi] Health: degraded (event-loop lag ${Math.round(z)}ms, ${I.consecutiveBreaches} samples in a row over ${B.maxLagMs}ms).`);else if(!J&&I.degraded)console.log(`[gemi] Health: recovered (event-loop lag ${Math.round(z)}ms).`);I.degraded=J}function G(z){let B=V();if(B.timer)return;let I=performance.now()+z.intervalMs;B.timer=setInterval(()=>{let J=performance.now();E(Math.max(0,J-I),z),I=J+z.intervalMs},z.intervalMs),B.timer.unref?.()}function _(z=process.env){return{paths:D(z.GEMI_HEALTH_PATH),intervalMs:O("GEMI_HEALTH_INTERVAL_MS",z.GEMI_HEALTH_INTERVAL_MS,500),maxLagMs:O("GEMI_HEALTH_MAX_LAG_MS",z.GEMI_HEALTH_MAX_LAG_MS,1000),breaches:Math.ceil(O("GEMI_HEALTH_BREACHES",z.GEMI_HEALTH_BREACHES,3))}}function D(z){if(z===void 0||z.trim()==="")return[x];if(z.trim().toLowerCase()==="off")return[];let B=z.split(",").map((J)=>J.trim()).filter(Boolean);if(B.filter((J)=>!J.startsWith("/")).length>0)throw Error(`GEMI_HEALTH_PATH: expected comma-separated paths starting with "/", or "off"; got ${JSON.stringify(z)}.`);return B}function O(z,B,I){if(B===void 0||B.trim()==="")return I;let J=Number(B);if(Number.isFinite(J)&&J>0)return J;return console.warn(`[gemi] Ignoring ${z}="${B}": expected a positive number.`),I}function j(z,B){if(B.length===0)return z;let I=new Set(B);return async(J,K)=>{if(!B.some((b)=>J.url.includes(b))||!I.has(new URL(J.url).pathname))return z(J,K);return y(R(J.method))}}function R(z){let B={"Cache-Control":"no-store","Content-Type":"text/plain; charset=utf-8"};if(z!=="GET"&&z!=="HEAD")return new Response("Method Not Allowed",{status:405,headers:{...B,Allow:"GET, HEAD"}});let{healthy:I,shuttingDown:J}=W();return new Response(z==="HEAD"?null:I?"ok":J?"shutting down":"degraded",{status:I?200:503,headers:B})}var L=Symbol.for("gemi.server.devGeneration"),X={graceMs:1e4,providerTimeoutMs:5000};class Y{app;inFlight=0;waiters=new Set;constructor(z){this.app=z}track(z){return async(B,I)=>{this.inFlight++;try{return await z(B,I)}finally{if(this.inFlight--,this.inFlight===0)this.wake()}}}get pending(){return this.inFlight}async retire({graceMs:z,providerTimeoutMs:B}){try{await this.idle(z),await Promise.resolve().then(()=>this.app.shutdown({timeoutMs:B}))}catch(I){C(I)}}idle(z){if(this.inFlight===0)return Promise.resolve();return new Promise((B)=>{let I=()=>{clearTimeout(J),this.waiters.delete(I),B()},J=setTimeout(I,z);this.waiters.add(I)})}wake(){for(let z of this.waiters)z()}}function N(z,B=X){let I=globalThis,J=I[L];if(I[L]=z,!J||J===z||typeof J.retire!=="function")return Promise.resolve();let K=J.retire.bind(J);return Promise.resolve().then(()=>K(B)).catch(C)}function C(z){console.error("[gemi] Shutting down the application a reload replaced failed:",z)}class k{app;instrumentation;handleSignals;server;stopping;settings;constructor(z){this.app=new S({kernel:z.kernel}),this.handleSignals=z.handleSignals??!0,this.instrumentation=U(z.instrumentation??((B,I)=>I(B)))}async start(){process.env.ROOT_DIR=H();let z=Bun.env.NODE_ENV==="production",B=_();if(z)G(B);let I=j(this.instrumentation,B.paths);if(z){if(this.handleSignals)A(()=>this.stop());this.settings=Z()}try{await this.app.waitForBoot()}catch(J){if(!z)this.app.shutdown({timeoutMs:X.providerTimeoutMs});throw J}if(z){let{httpProd:J}=await import("../chunk-s21kn0x8.js");this.server=await J(this.app,I)}else{f();let{httpDev:J}=await import("../chunk-s55t7rxw.js"),K=new Y(this.app);this.server=await J(this.app,K.track(I)),N(K)}return this.server}stop(z={}){let B=this.app.sockets();return this.stopping??=P({server:this.server,closeSockets:B?()=>B.shutdown():void 0,shutdownProviders:(I)=>this.app.shutdown(I),settings:{...this.settings??Z(),...z}}),this.stopping}}export{W as liveness,Q as isShuttingDown,k as Server};
2
+ import{Ca as f}from"../chunk-kk18xqgc.js";import{Da as S}from"../chunk-sa6cxt3g.js";import{Pk as Q,Rk as Z,Sk as P,Tk as y,Uk as U,Vk as A}from"../chunk-gqgpwb88.js";import{Zk as H}from"../chunk-cxsvzqd4.js";import"../chunk-99a4e6zf.js";import{el as F}from"../chunk-rnp5k8m3.js";var x="/__gemi__/health",$=Symbol.for("gemi.server.health");function V(){let z=globalThis;return z[$]??={lagMs:0,consecutiveBreaches:0,degraded:!1,timer:void 0},z[$]}function W(){let z=V(),B=Q();return{healthy:!B&&!z.degraded,shuttingDown:B,lagMs:z.lagMs,consecutiveBreaches:z.consecutiveBreaches}}function E(z,B){let I=V();I.lagMs=z,I.consecutiveBreaches=z>B.maxLagMs?I.consecutiveBreaches+1:0;let J=I.consecutiveBreaches>=B.breaches;if(J&&!I.degraded)console.warn(`[gemi] Health: degraded (event-loop lag ${Math.round(z)}ms, ${I.consecutiveBreaches} samples in a row over ${B.maxLagMs}ms).`);else if(!J&&I.degraded)console.log(`[gemi] Health: recovered (event-loop lag ${Math.round(z)}ms).`);I.degraded=J}function G(z){let B=V();if(B.timer)return;let I=performance.now()+z.intervalMs;B.timer=setInterval(()=>{let J=performance.now();E(Math.max(0,J-I),z),I=J+z.intervalMs},z.intervalMs),B.timer.unref?.()}function _(z=process.env){return{paths:D(z.GEMI_HEALTH_PATH),intervalMs:O("GEMI_HEALTH_INTERVAL_MS",z.GEMI_HEALTH_INTERVAL_MS,500),maxLagMs:O("GEMI_HEALTH_MAX_LAG_MS",z.GEMI_HEALTH_MAX_LAG_MS,1000),breaches:Math.ceil(O("GEMI_HEALTH_BREACHES",z.GEMI_HEALTH_BREACHES,3))}}function D(z){if(z===void 0||z.trim()==="")return[x];if(z.trim().toLowerCase()==="off")return[];let B=z.split(",").map((J)=>J.trim()).filter(Boolean);if(B.filter((J)=>!J.startsWith("/")).length>0)throw Error(`GEMI_HEALTH_PATH: expected comma-separated paths starting with "/", or "off"; got ${JSON.stringify(z)}.`);return B}function O(z,B,I){if(B===void 0||B.trim()==="")return I;let J=Number(B);if(Number.isFinite(J)&&J>0)return J;return console.warn(`[gemi] Ignoring ${z}="${B}": expected a positive number.`),I}function j(z,B){if(B.length===0)return z;let I=new Set(B);return async(J,K)=>{if(!B.some((b)=>J.url.includes(b))||!I.has(new URL(J.url).pathname))return z(J,K);return y(R(J.method))}}function R(z){let B={"Cache-Control":"no-store","Content-Type":"text/plain; charset=utf-8"};if(z!=="GET"&&z!=="HEAD")return new Response("Method Not Allowed",{status:405,headers:{...B,Allow:"GET, HEAD"}});let{healthy:I,shuttingDown:J}=W();return new Response(z==="HEAD"?null:I?"ok":J?"shutting down":"degraded",{status:I?200:503,headers:B})}var L=Symbol.for("gemi.server.devGeneration"),X={graceMs:1e4,providerTimeoutMs:5000};class Y{app;inFlight=0;waiters=new Set;constructor(z){this.app=z}track(z){return async(B,I)=>{this.inFlight++;try{return await z(B,I)}finally{if(this.inFlight--,this.inFlight===0)this.wake()}}}get pending(){return this.inFlight}async retire({graceMs:z,providerTimeoutMs:B}){try{await this.idle(z),await Promise.resolve().then(()=>this.app.shutdown({timeoutMs:B}))}catch(I){C(I)}}idle(z){if(this.inFlight===0)return Promise.resolve();return new Promise((B)=>{let I=()=>{clearTimeout(J),this.waiters.delete(I),B()},J=setTimeout(I,z);this.waiters.add(I)})}wake(){for(let z of this.waiters)z()}}function N(z,B=X){let I=globalThis,J=I[L];if(I[L]=z,!J||J===z||typeof J.retire!=="function")return Promise.resolve();let K=J.retire.bind(J);return Promise.resolve().then(()=>K(B)).catch(C)}function C(z){console.error("[gemi] Shutting down the application a reload replaced failed:",z)}class k{app;instrumentation;handleSignals;server;stopping;settings;constructor(z){this.app=new S({kernel:z.kernel}),this.handleSignals=z.handleSignals??!0,this.instrumentation=U(z.instrumentation??((B,I)=>I(B)))}async start(){process.env.ROOT_DIR=H();let z=Bun.env.NODE_ENV==="production",B=_();if(z)G(B);let I=j(this.instrumentation,B.paths);if(z){if(this.handleSignals)A(()=>this.stop());this.settings=Z()}try{await this.app.waitForBoot()}catch(J){if(!z)this.app.shutdown({timeoutMs:X.providerTimeoutMs});throw J}if(z){let{httpProd:J}=await import("../chunk-6hstj70n.js");this.server=await J(this.app,I)}else{f();let{httpDev:J}=await import("../chunk-n68a4r72.js"),K=new Y(this.app);this.server=await J(this.app,K.track(I)),N(K)}return this.server}stop(z={}){let B=this.app.sockets();return this.stopping??=P({server:this.server,closeSockets:B?()=>B.shutdown():void 0,shutdownProviders:(I)=>this.app.shutdown(I),settings:{...this.settings??Z(),...z}}),this.stopping}}export{W as liveness,Q as isShuttingDown,k as Server};
3
3
 
4
4
  //# debugId=77C45FA7BF275F0C64756E2164756E21
@@ -39,6 +39,16 @@ export declare function createClientEntry(manifest: ViteManifest, assetBase?: st
39
39
  * route may never render.
40
40
  */
41
41
  export declare function collectModulePreloads(manifest: ViteManifest, entryKey: string, assetBase?: string): string[];
42
+ /**
43
+ * The chunks the static import closure of `entryKey` loads lazily, each with
44
+ * its own static closure, minus what that closure already has: every
45
+ * `import()` in the entry's code (and its static dependencies'), one level
46
+ * deep. An island with `preloadDynamic` gets these preloaded too (#932).
47
+ *
48
+ * Dynamic imports into `node_modules` are left out: those are a library's own
49
+ * lazy pieces (gemi's client loads a few on first use), not the app's.
50
+ */
51
+ export declare function collectDynamicPreloads(manifest: ViteManifest, entryKey: string, assetBase?: string): string[];
42
52
  /**
43
53
  * Every CSS file the static import closure of `entryKey` carries, in import
44
54
  * order and without repeats. Vite lists a chunk's CSS on that chunk only, not
@@ -50,11 +60,13 @@ export declare function collectCss(manifest: ViteManifest, entryKey: string): st
50
60
  * Where a static page's islands load from: each island module's entry
51
61
  * (`<key>?gemi-island`, the module plus the hydrate function), with the
52
62
  * chunks importing it pulls in, itself first. React and `react-dom/client`
53
- * are among those. `undefined` for a module the client build has no island
54
- * entry for.
63
+ * are among those. `dynamicPreload` is what the entry loads lazily (see
64
+ * `collectDynamicPreloads`), for an island with `preloadDynamic`.
65
+ * `undefined` for a module the client build has no island entry for.
55
66
  */
56
67
  export declare function createIslandResolver(manifest: ViteManifest, assetBase?: string): (moduleKey: string) => {
57
68
  src: string;
58
69
  preload: string[];
70
+ dynamicPreload: string[];
59
71
  } | undefined;
60
72
  //# sourceMappingURL=modulePreloads.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"modulePreloads.d.ts","sourceRoot":"","sources":["../../server/modulePreloads.ts"],"names":[],"mappings":"AAGA,6DAA6D;AAC7D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAE7D,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,mBAAmB,CAAC;AAEjD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,YAAY,EACtB,SAAS,GAAE,MAA2B,GACrC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,CASnD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAA2B,GACrC,MAAM,EAAE,CAoBV;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAuB7E;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,YAAY,EACtB,SAAS,GAAE,MAA2B,GACrC,CAAC,SAAS,EAAE,MAAM,KAAK;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,CAevE"}
1
+ {"version":3,"file":"modulePreloads.d.ts","sourceRoot":"","sources":["../../server/modulePreloads.ts"],"names":[],"mappings":"AAGA,6DAA6D;AAC7D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAE7D,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,mBAAmB,CAAC;AAEjD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,YAAY,EACtB,SAAS,GAAE,MAA2B,GACrC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,CASnD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAA2B,GACrC,MAAM,EAAE,CAoBV;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAA2B,GACrC,MAAM,EAAE,CA+BV;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAuB7E;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,YAAY,EACtB,SAAS,GAAE,MAA2B,GACrC,CAAC,SAAS,EAAE,MAAM,KAAK;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,cAAc,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,CAsBjG"}
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{cb as w8}from"../chunk-fcqx2t0p.js";import{Ab as j8,Bb as M8,Cb as L8,Db as N8,Eb as S4,Fb as Z6,Gb as k,Hb as x8,Ib as D8,Jb as F8,Kb as H8,Lb as U8,Mb as O8,Nb as S8,Ob as R8,Pb as _8,Qb as f8,Rb as k8,Sb as C8,Tb as b8,Ub as T8,Vb as I8,Wb as P8,db as PZ,eb as wZ,fb as VZ,gb as vZ,hb as qZ,ib as H4,jb as yZ,kb as N4,lb as x4,mb as V1,nb as AZ,ob as hZ,pb as Z8,tb as $8,ub as J8,vb as Q8,wb as Y8,xb as z8,yb as X8,zb as B8}from"../chunk-4pvv8qs0.js";import"../chunk-2cnawkke.js";import{$c as gZ,ad as EZ,bd as mZ,cd as cZ,dd as uZ,ed as dZ,fd as lZ,gd as nZ,hd as iZ,id as oZ,jd as sZ,kd as aZ,ld as tZ,md as rZ,nd as eZ,od as W8}from"../chunk-x5hj0mqp.js";import{pd as pZ}from"../chunk-qpwb3gnh.js";import{Ad as _Z,Bd as fZ,Cd as kZ,Dd as CZ,Ed as bZ,Fd as TZ,Kd as IZ,qd as LZ,rd as NZ,sd as xZ,td as DZ,ud as FZ,vd as HZ,wd as UZ,xd as OZ,yd as SZ,zd as RZ}from"../chunk-xymr3asa.js";import{Ld as K8,Md as G8}from"../chunk-q15f5g86.js";import"../chunk-py1twqh8.js";import{$e as U5,$f as JZ,Af as E5,Bf as m5,Cf as c5,Df as u5,Ef as p5,Ff as d5,Kf as C,Lf as i,Mf as l5,Ne as eW,Nf as n5,Oe as W5,Of as i5,Pe as Z5,Pf as o5,Qe as $5,Qf as s5,Re as J5,Se as Q5,Sf as a5,Tf as t5,Ud as o0,Uf as r5,Vd as bW,Vf as e5,Wd as TW,Wf as WZ,Xd as IW,Ye as D5,Zd as PW,Ze as F5,Zf as ZZ,_e as H5,_f as $Z,ae as s0,af as O5,be as v0,bf as S5,ce as q0,cf as R5,de as G4,df as _5,ee as wW,ef as f5,eg as QZ,gf as k5,hf as W6,ie as VW,if as C5,ig as YZ,je as vW,ke as qW,kg as v1,le as yW,me as AW,mf as b5,ne as hW,nf as T5,oe as gW,of as P5,pe as EW,qe as mW,re as b0,rf as w5,se as cW,sf as V5,te as uW,tf as v5,ue as pW,uf as q5,ve as dW,vg as KZ,we as lW,wf as y5,wg as GZ,xf as A5,yf as h5,zf as g5}from"../chunk-wevj4981.js";import"../chunk-ff60bzvf.js";import"../chunk-feajsgns.js";import{Dh as L4,Gh as t,Ih as d,Mh as Q4,Nh as L1,Oh as T1,Ph as nW,Qh as iW,Rh as oW,Sh as sW,fi as aW,gi as tW,ii as rW,ki as I1,oh as K4,ph as J4,qh as M1}from"../chunk-0rhf4g12.js";import"../chunk-zv5qyrqg.js";import{ui as r}from"../chunk-4t41m5f1.js";import{Ci as j5,Di as M5,Ei as b1,Fi as L5,Gi as k0,Hi as N5,Ii as x5}from"../chunk-hj88dcss.js";import{Oi as z5,Pi as X5,Qi as B5}from"../chunk-z61dj480.js";import"../chunk-vnw91fe1.js";import{xj as I5}from"../chunk-jy9dkgt0.js";import{Aj as K5,Bj as G5,zj as Y5}from"../chunk-ysc7ykss.js";import"../chunk-jx5zx48j.js";import"../chunk-z9xxthp1.js";import"../chunk-65j32dtn.js";import"../chunk-beb265c9.js";import{rk as zZ,sk as XZ,tk as BZ,uk as jZ,wk as MZ}from"../chunk-zyhmn3hy.js";import"../chunk-zypmy8yq.js";import{Gk as q}from"../chunk-jx2mgvvt.js";import"../chunk-ha15x5ns.js";import"../chunk-x9bk5s21.js";import"../chunk-gqgpwb88.js";import"../chunk-cxsvzqd4.js";import"../chunk-99a4e6zf.js";import{el as I0}from"../chunk-rnp5k8m3.js";import{Buffer as T0}from"buffer";class P0 extends L1{client;config;constructor(...W){super();this.config=W}async connect(){let W=await import("../chunk-6hz63ts4.js");return this.client??=new W.S3Client(...this.config),{sdk:W,client:this.client}}async put(W,{signal:Z}={}){Z?.throwIfAborted();let $,J,Q,Y=process.env.BUCKET_NAME;if(W instanceof Blob)$=W,Q=`${Bun.randomUUIDv7()}.${W.type.split("/")[1].split(";")[0]}`,J=W.type;else $=W.body,Q=W.name,Y=W.bucket??Y,J=W.contentType||($ instanceof Blob||$ instanceof File?$.type:void 0);J=J||void 0;let K=$ instanceof T0?$:$ instanceof Blob||$ instanceof File?T0.from(await $.arrayBuffer()):"",{sdk:G,client:z}=await this.connect();return Z?.throwIfAborted(),await z.send(new G.PutObjectCommand({Bucket:Y,Key:Q,Body:K,ContentType:J}),{abortSignal:Z}),Q}async delete(W){let Z=typeof W==="string"?W:W.name,$=(typeof W==="string"?void 0:W.bucket)??process.env.BUCKET_NAME;if(!Z)throw Error("Object name has to be specified");let{sdk:J,client:Q}=await this.connect();try{await Q.send(new J.DeleteObjectCommand({Bucket:$,Key:Z}))}catch(Y){if(Y?.name==="NoSuchKey"||Y?.$metadata?.httpStatusCode===404)return;throw Y}}async*pages(W,{bucket:Z,signal:$}){let{sdk:J,client:Q}=await this.connect(),Y;do{$?.throwIfAborted();let K=await Q.send(new J.ListObjectsV2Command({Bucket:Z??process.env.BUCKET_NAME,Prefix:W,ContinuationToken:Y}),{abortSignal:$});yield(K.Contents??[]).map((G)=>({name:G.Key,size:G.Size??0,lastModified:G.LastModified??new Date(0)})),Y=K.IsTruncated?K.NextContinuationToken:void 0}while(Y)}async*objects(W,Z={}){for await(let $ of this.pages(W,Z))yield*$}async deletePrefix(W,Z={}){Q4(W);let $=Z.bucket??process.env.BUCKET_NAME,{sdk:J,client:Q}=await this.connect(),Y=0;for await(let K of this.pages(W,{...Z,bucket:$})){if(K.length===0)continue;Z.signal?.throwIfAborted();let z=(await Q.send(new J.DeleteObjectsCommand({Bucket:$,Delete:{Objects:K.map((X)=>({Key:X.name})),Quiet:!0}}),{abortSignal:Z.signal}))?.Errors??[];if(z.length>0){let X=z[0];throw Error(`S3 could not delete ${z.length} object(s) under "${W}", e.g. "${X.Key}": ${X.Code??"unknown"} ${X.Message??""}`.trim())}Y+=K.length}return Y}async list(W){let{sdk:Z,client:$}=await this.connect();return await $.send(new Z.ListObjectsV2Command({Bucket:process.env.BUCKET_NAME,Prefix:W}))}async fetch(W,{signal:Z}={}){Z?.throwIfAborted();let $=process.env.BUCKET_NAME,J;if(typeof W==="string")J=W;else $=W.bucket??$,J=W.name;if(!J)throw Error("Object name has to be specified");let{sdk:Q,client:Y}=await this.connect();Z?.throwIfAborted();let K=await Y.send(new Q.GetObjectCommand({Bucket:$,Key:J}),{abortSignal:Z}),G=T1(K.Body.transformToWebStream(),Z);return Z?.throwIfAborted(),new Response(G,{headers:{"Content-Type":K.ContentType,"Content-Length":K.ContentLength.toString(),"Cache-Control":"private, max-age=12000, must-revalidate","Last-Modified":K.LastModified?.toUTCString()||"",ETag:K.ETag||""}})}async read(W){let Z=typeof W==="string"?{name:W}:W,$=Z.bucket??process.env.BUCKET_NAME,{name:J,range:Q=null}=Z;if(!J)throw Error("Object name has to be specified");let{sdk:Y,client:K}=await this.connect(),G;try{G=await K.send(new Y.GetObjectCommand({Bucket:$,Key:J,Range:Q?J4(Q):void 0}))}catch(j){if(j?.name==="InvalidRange"||j?.$metadata?.httpStatusCode===416)throw new t(await this.size({name:J,bucket:$}));if(j?.name==="NoSuchKey"||j?.$metadata?.httpStatusCode===404)throw new d(J);throw j}let z=M1(G.ContentRange),X=Boolean(z)&&G.$metadata?.httpStatusCode===206,B=z?.total??G.ContentLength??0;return{body:G.Body.transformToWebStream(),start:z?.start??0,end:z?.end??B-1,total:B,partial:X,type:G.ContentType??"application/octet-stream",etag:G.ETag||void 0,lastModified:G.LastModified,name:J}}async size(W){let Z=typeof W==="string"?W:W.name,$=(typeof W==="string"?void 0:W.bucket)??process.env.BUCKET_NAME,{sdk:J,client:Q}=await this.connect();try{return(await Q.send(new J.HeadObjectCommand({Bucket:$,Key:Z}))).ContentLength??0}catch(Y){if(Y?.name==="NotFound"||Y?.$metadata?.httpStatusCode===404)throw new d(Z);throw Y}}}import{Buffer as w0}from"buffer";import{Readable as m6}from"stream";function Y4(W){return W?.statusCode===404||W?.details?.errorCode==="BlobNotFound"||W?.code==="BlobNotFound"}function c6(W){return W?.statusCode===416||W?.details?.errorCode==="InvalidRange"||W?.code==="InvalidRange"}class V0 extends L1{config;serviceClientPromise=null;constructor(W={}){super();this.config=W}async serviceClient(){if(this.config.serviceClient)return this.config.serviceClient;return this.serviceClientPromise??=(async()=>{let W;try{W=await import("@azure/storage-blob")}catch{throw Error("AzureBlobDriver requires the '@azure/storage-blob' package. Install it with `bun add @azure/storage-blob`, or pass a pre-built `serviceClient`.")}let Z=this.config.connectionString??process.env.AZURE_STORAGE_CONNECTION_STRING;if(this.config.url)return new W.BlobServiceClient(this.config.url,this.config.credential);if(Z)return W.BlobServiceClient.fromConnectionString(Z);throw Error("AzureBlobDriver needs a connection string (AZURE_STORAGE_CONNECTION_STRING), a `url`, or a `serviceClient`.")})(),this.serviceClientPromise}async blob(W,Z){if(!W)throw Error("Object name has to be specified");let $=Z??this.config.container??process.env.BUCKET_NAME;if(!$)throw Error("AzureBlobDriver needs a container name, from `bucket`, the `container` config, or BUCKET_NAME.");return(await this.serviceClient()).getContainerClient($).getBlockBlobClient(W)}async put(W,{signal:Z}={}){Z?.throwIfAborted();let $,J,Q,Y;if(W instanceof Blob)$=W,Q=`${Bun.randomUUIDv7()}.${W.type.split("/")[1].split(";")[0]}`,J=W.type;else $=W.body,Q=W.name,Y=W.bucket,J=W.contentType??($ instanceof Blob||$ instanceof File?$.type:void 0);let K=$ instanceof w0?$:w0.from(await $.arrayBuffer()),G=await this.blob(Q,Y);return Z?.throwIfAborted(),await G.uploadData(K,{blobHTTPHeaders:J?{blobContentType:J}:void 0,abortSignal:Z}),Q}async*objects(W,{bucket:Z,signal:$}={}){$?.throwIfAborted();let J=Z??this.config.container??process.env.BUCKET_NAME;if(!J)throw Error("AzureBlobDriver needs a container name, from `bucket`, the `container` config, or BUCKET_NAME.");let Y=(await this.serviceClient()).getContainerClient(J);for await(let K of Y.listBlobsFlat({prefix:W}))$?.throwIfAborted(),yield{name:K.name,size:K.properties?.contentLength??0,lastModified:K.properties?.lastModified??new Date(0)}}async list(W){let Z=this.config.container??process.env.BUCKET_NAME,J=(await this.serviceClient()).getContainerClient(Z),Q=[];for await(let Y of J.listBlobsFlat({prefix:W}))Q.push(Y.name);return Q}async fetch(W,{signal:Z}={}){Z?.throwIfAborted();let $=await this.download(typeof W==="string"?{name:W}:{name:W.name,bucket:W.bucket},Z);return new Response($.body,{headers:{"Content-Type":$.type,"Content-Length":String($.total),"Cache-Control":"private, max-age=12000, must-revalidate","Last-Modified":$.lastModified?.toUTCString()??"",ETag:$.etag??""}})}async read(W){return this.download(typeof W==="string"?{name:W}:W)}async download(W,Z){let{name:$,bucket:J,range:Q=null}=W,Y=await this.blob($,J);Z?.throwIfAborted();let K,G,z=Q?.kind==="suffix"||Q?.kind==="offset"&&Q.end===null&&Q.start===0;if(Q&&z){let H=await this.size({name:$,bucket:J}),p=K4(Q,H);if(!p)throw new t(H);K=p.start,G=p.length}else if(Q?.kind==="offset")K=Q.start,G=Q.end===null?void 0:Q.end-Q.start+1;let X;try{X=await Y.download(K,G,Z?{abortSignal:Z}:void 0)}catch(H){if(c6(H))throw new t(await this.size({name:$,bucket:J}));if(Y4(H))throw new d($);throw H}let B=M1(X.contentRange),j=Boolean(B),x=B?.total??X.contentLength??0,O=await u6(X);if(O instanceof ReadableStream)O=T1(O,Z);return Z?.throwIfAborted(),{body:O,start:B?.start??0,end:B?.end??x-1,total:x,partial:j,type:X.contentType??"application/octet-stream",etag:X.etag||void 0,lastModified:X.lastModified,name:$}}async size(W){let Z=typeof W==="string"?W:W.name,$=typeof W==="string"?void 0:W.bucket,J=await this.blob(Z,$);try{return(await J.getProperties()).contentLength??0}catch(Q){if(Y4(Q))throw new d(Z);throw Q}}async delete(W){let Z=typeof W==="string"?W:W.name,$=typeof W==="string"?void 0:W.bucket,J=await this.blob(Z,$);try{await J.delete()}catch(Q){if(Y4(Q))return;throw Q}}}async function u6(W){if(W.blobBody)return await W.blobBody;if(W.readableStreamBody)return m6.toWeb(W.readableStreamBody);return null}function p6(W){return W}var d6=`
2
+ import{cb as w8}from"../chunk-fcqx2t0p.js";import{Ab as j8,Bb as M8,Cb as L8,Db as N8,Eb as S4,Fb as Z6,Gb as k,Hb as x8,Ib as D8,Jb as F8,Kb as H8,Lb as U8,Mb as O8,Nb as S8,Ob as R8,Pb as _8,Qb as f8,Rb as k8,Sb as C8,Tb as b8,Ub as T8,Vb as I8,Wb as P8,db as PZ,eb as wZ,fb as VZ,gb as vZ,hb as qZ,ib as H4,jb as yZ,kb as N4,lb as x4,mb as V1,nb as AZ,ob as hZ,pb as Z8,tb as $8,ub as J8,vb as Q8,wb as Y8,xb as z8,yb as X8,zb as B8}from"../chunk-sxcxmwbt.js";import"../chunk-2cnawkke.js";import{$c as gZ,ad as EZ,bd as mZ,cd as cZ,dd as uZ,ed as dZ,fd as lZ,gd as nZ,hd as iZ,id as oZ,jd as sZ,kd as aZ,ld as tZ,md as rZ,nd as eZ,od as W8}from"../chunk-x5hj0mqp.js";import{pd as pZ}from"../chunk-qpwb3gnh.js";import{Ad as _Z,Bd as fZ,Cd as kZ,Dd as CZ,Ed as bZ,Fd as TZ,Kd as IZ,qd as LZ,rd as NZ,sd as xZ,td as DZ,ud as FZ,vd as HZ,wd as UZ,xd as OZ,yd as SZ,zd as RZ}from"../chunk-xymr3asa.js";import{Ld as K8,Md as G8}from"../chunk-q15f5g86.js";import"../chunk-py1twqh8.js";import{$e as U5,$f as JZ,Af as E5,Bf as m5,Cf as c5,Df as u5,Ef as p5,Ff as d5,Kf as C,Lf as i,Mf as l5,Ne as eW,Nf as n5,Oe as W5,Of as i5,Pe as Z5,Pf as o5,Qe as $5,Qf as s5,Re as J5,Se as Q5,Sf as a5,Tf as t5,Ud as o0,Uf as r5,Vd as bW,Vf as e5,Wd as TW,Wf as WZ,Xd as IW,Ye as D5,Zd as PW,Ze as F5,Zf as ZZ,_e as H5,_f as $Z,ae as s0,af as O5,be as v0,bf as S5,ce as q0,cf as R5,de as G4,df as _5,ee as wW,ef as f5,eg as QZ,gf as k5,hf as W6,ie as VW,if as C5,ig as YZ,je as vW,ke as qW,kg as v1,le as yW,me as AW,mf as b5,ne as hW,nf as T5,oe as gW,of as P5,pe as EW,qe as mW,re as b0,rf as w5,se as cW,sf as V5,te as uW,tf as v5,ue as pW,uf as q5,ve as dW,vg as KZ,we as lW,wf as y5,wg as GZ,xf as A5,yf as h5,zf as g5}from"../chunk-e2tjw0qx.js";import"../chunk-ff60bzvf.js";import"../chunk-feajsgns.js";import{Dh as L4,Gh as t,Ih as d,Mh as Q4,Nh as L1,Oh as T1,Ph as nW,Qh as iW,Rh as oW,Sh as sW,fi as aW,gi as tW,ii as rW,ki as I1,oh as K4,ph as J4,qh as M1}from"../chunk-0rhf4g12.js";import"../chunk-zv5qyrqg.js";import{ui as r}from"../chunk-4t41m5f1.js";import{Ci as j5,Di as M5,Ei as b1,Fi as L5,Gi as k0,Hi as N5,Ii as x5}from"../chunk-hj88dcss.js";import{Oi as z5,Pi as X5,Qi as B5}from"../chunk-z61dj480.js";import"../chunk-vnw91fe1.js";import{xj as I5}from"../chunk-jy9dkgt0.js";import{Aj as K5,Bj as G5,zj as Y5}from"../chunk-ysc7ykss.js";import"../chunk-jx5zx48j.js";import"../chunk-z9xxthp1.js";import"../chunk-65j32dtn.js";import"../chunk-beb265c9.js";import{rk as zZ,sk as XZ,tk as BZ,uk as jZ,wk as MZ}from"../chunk-zyhmn3hy.js";import"../chunk-zypmy8yq.js";import{Gk as q}from"../chunk-jx2mgvvt.js";import"../chunk-ha15x5ns.js";import"../chunk-x9bk5s21.js";import"../chunk-gqgpwb88.js";import"../chunk-cxsvzqd4.js";import"../chunk-99a4e6zf.js";import{el as I0}from"../chunk-rnp5k8m3.js";import{Buffer as T0}from"buffer";class P0 extends L1{client;config;constructor(...W){super();this.config=W}async connect(){let W=await import("../chunk-6hz63ts4.js");return this.client??=new W.S3Client(...this.config),{sdk:W,client:this.client}}async put(W,{signal:Z}={}){Z?.throwIfAborted();let $,J,Q,Y=process.env.BUCKET_NAME;if(W instanceof Blob)$=W,Q=`${Bun.randomUUIDv7()}.${W.type.split("/")[1].split(";")[0]}`,J=W.type;else $=W.body,Q=W.name,Y=W.bucket??Y,J=W.contentType||($ instanceof Blob||$ instanceof File?$.type:void 0);J=J||void 0;let K=$ instanceof T0?$:$ instanceof Blob||$ instanceof File?T0.from(await $.arrayBuffer()):"",{sdk:G,client:z}=await this.connect();return Z?.throwIfAborted(),await z.send(new G.PutObjectCommand({Bucket:Y,Key:Q,Body:K,ContentType:J}),{abortSignal:Z}),Q}async delete(W){let Z=typeof W==="string"?W:W.name,$=(typeof W==="string"?void 0:W.bucket)??process.env.BUCKET_NAME;if(!Z)throw Error("Object name has to be specified");let{sdk:J,client:Q}=await this.connect();try{await Q.send(new J.DeleteObjectCommand({Bucket:$,Key:Z}))}catch(Y){if(Y?.name==="NoSuchKey"||Y?.$metadata?.httpStatusCode===404)return;throw Y}}async*pages(W,{bucket:Z,signal:$}){let{sdk:J,client:Q}=await this.connect(),Y;do{$?.throwIfAborted();let K=await Q.send(new J.ListObjectsV2Command({Bucket:Z??process.env.BUCKET_NAME,Prefix:W,ContinuationToken:Y}),{abortSignal:$});yield(K.Contents??[]).map((G)=>({name:G.Key,size:G.Size??0,lastModified:G.LastModified??new Date(0)})),Y=K.IsTruncated?K.NextContinuationToken:void 0}while(Y)}async*objects(W,Z={}){for await(let $ of this.pages(W,Z))yield*$}async deletePrefix(W,Z={}){Q4(W);let $=Z.bucket??process.env.BUCKET_NAME,{sdk:J,client:Q}=await this.connect(),Y=0;for await(let K of this.pages(W,{...Z,bucket:$})){if(K.length===0)continue;Z.signal?.throwIfAborted();let z=(await Q.send(new J.DeleteObjectsCommand({Bucket:$,Delete:{Objects:K.map((X)=>({Key:X.name})),Quiet:!0}}),{abortSignal:Z.signal}))?.Errors??[];if(z.length>0){let X=z[0];throw Error(`S3 could not delete ${z.length} object(s) under "${W}", e.g. "${X.Key}": ${X.Code??"unknown"} ${X.Message??""}`.trim())}Y+=K.length}return Y}async list(W){let{sdk:Z,client:$}=await this.connect();return await $.send(new Z.ListObjectsV2Command({Bucket:process.env.BUCKET_NAME,Prefix:W}))}async fetch(W,{signal:Z}={}){Z?.throwIfAborted();let $=process.env.BUCKET_NAME,J;if(typeof W==="string")J=W;else $=W.bucket??$,J=W.name;if(!J)throw Error("Object name has to be specified");let{sdk:Q,client:Y}=await this.connect();Z?.throwIfAborted();let K=await Y.send(new Q.GetObjectCommand({Bucket:$,Key:J}),{abortSignal:Z}),G=T1(K.Body.transformToWebStream(),Z);return Z?.throwIfAborted(),new Response(G,{headers:{"Content-Type":K.ContentType,"Content-Length":K.ContentLength.toString(),"Cache-Control":"private, max-age=12000, must-revalidate","Last-Modified":K.LastModified?.toUTCString()||"",ETag:K.ETag||""}})}async read(W){let Z=typeof W==="string"?{name:W}:W,$=Z.bucket??process.env.BUCKET_NAME,{name:J,range:Q=null}=Z;if(!J)throw Error("Object name has to be specified");let{sdk:Y,client:K}=await this.connect(),G;try{G=await K.send(new Y.GetObjectCommand({Bucket:$,Key:J,Range:Q?J4(Q):void 0}))}catch(j){if(j?.name==="InvalidRange"||j?.$metadata?.httpStatusCode===416)throw new t(await this.size({name:J,bucket:$}));if(j?.name==="NoSuchKey"||j?.$metadata?.httpStatusCode===404)throw new d(J);throw j}let z=M1(G.ContentRange),X=Boolean(z)&&G.$metadata?.httpStatusCode===206,B=z?.total??G.ContentLength??0;return{body:G.Body.transformToWebStream(),start:z?.start??0,end:z?.end??B-1,total:B,partial:X,type:G.ContentType??"application/octet-stream",etag:G.ETag||void 0,lastModified:G.LastModified,name:J}}async size(W){let Z=typeof W==="string"?W:W.name,$=(typeof W==="string"?void 0:W.bucket)??process.env.BUCKET_NAME,{sdk:J,client:Q}=await this.connect();try{return(await Q.send(new J.HeadObjectCommand({Bucket:$,Key:Z}))).ContentLength??0}catch(Y){if(Y?.name==="NotFound"||Y?.$metadata?.httpStatusCode===404)throw new d(Z);throw Y}}}import{Buffer as w0}from"buffer";import{Readable as m6}from"stream";function Y4(W){return W?.statusCode===404||W?.details?.errorCode==="BlobNotFound"||W?.code==="BlobNotFound"}function c6(W){return W?.statusCode===416||W?.details?.errorCode==="InvalidRange"||W?.code==="InvalidRange"}class V0 extends L1{config;serviceClientPromise=null;constructor(W={}){super();this.config=W}async serviceClient(){if(this.config.serviceClient)return this.config.serviceClient;return this.serviceClientPromise??=(async()=>{let W;try{W=await import("@azure/storage-blob")}catch{throw Error("AzureBlobDriver requires the '@azure/storage-blob' package. Install it with `bun add @azure/storage-blob`, or pass a pre-built `serviceClient`.")}let Z=this.config.connectionString??process.env.AZURE_STORAGE_CONNECTION_STRING;if(this.config.url)return new W.BlobServiceClient(this.config.url,this.config.credential);if(Z)return W.BlobServiceClient.fromConnectionString(Z);throw Error("AzureBlobDriver needs a connection string (AZURE_STORAGE_CONNECTION_STRING), a `url`, or a `serviceClient`.")})(),this.serviceClientPromise}async blob(W,Z){if(!W)throw Error("Object name has to be specified");let $=Z??this.config.container??process.env.BUCKET_NAME;if(!$)throw Error("AzureBlobDriver needs a container name, from `bucket`, the `container` config, or BUCKET_NAME.");return(await this.serviceClient()).getContainerClient($).getBlockBlobClient(W)}async put(W,{signal:Z}={}){Z?.throwIfAborted();let $,J,Q,Y;if(W instanceof Blob)$=W,Q=`${Bun.randomUUIDv7()}.${W.type.split("/")[1].split(";")[0]}`,J=W.type;else $=W.body,Q=W.name,Y=W.bucket,J=W.contentType??($ instanceof Blob||$ instanceof File?$.type:void 0);let K=$ instanceof w0?$:w0.from(await $.arrayBuffer()),G=await this.blob(Q,Y);return Z?.throwIfAborted(),await G.uploadData(K,{blobHTTPHeaders:J?{blobContentType:J}:void 0,abortSignal:Z}),Q}async*objects(W,{bucket:Z,signal:$}={}){$?.throwIfAborted();let J=Z??this.config.container??process.env.BUCKET_NAME;if(!J)throw Error("AzureBlobDriver needs a container name, from `bucket`, the `container` config, or BUCKET_NAME.");let Y=(await this.serviceClient()).getContainerClient(J);for await(let K of Y.listBlobsFlat({prefix:W}))$?.throwIfAborted(),yield{name:K.name,size:K.properties?.contentLength??0,lastModified:K.properties?.lastModified??new Date(0)}}async list(W){let Z=this.config.container??process.env.BUCKET_NAME,J=(await this.serviceClient()).getContainerClient(Z),Q=[];for await(let Y of J.listBlobsFlat({prefix:W}))Q.push(Y.name);return Q}async fetch(W,{signal:Z}={}){Z?.throwIfAborted();let $=await this.download(typeof W==="string"?{name:W}:{name:W.name,bucket:W.bucket},Z);return new Response($.body,{headers:{"Content-Type":$.type,"Content-Length":String($.total),"Cache-Control":"private, max-age=12000, must-revalidate","Last-Modified":$.lastModified?.toUTCString()??"",ETag:$.etag??""}})}async read(W){return this.download(typeof W==="string"?{name:W}:W)}async download(W,Z){let{name:$,bucket:J,range:Q=null}=W,Y=await this.blob($,J);Z?.throwIfAborted();let K,G,z=Q?.kind==="suffix"||Q?.kind==="offset"&&Q.end===null&&Q.start===0;if(Q&&z){let H=await this.size({name:$,bucket:J}),p=K4(Q,H);if(!p)throw new t(H);K=p.start,G=p.length}else if(Q?.kind==="offset")K=Q.start,G=Q.end===null?void 0:Q.end-Q.start+1;let X;try{X=await Y.download(K,G,Z?{abortSignal:Z}:void 0)}catch(H){if(c6(H))throw new t(await this.size({name:$,bucket:J}));if(Y4(H))throw new d($);throw H}let B=M1(X.contentRange),j=Boolean(B),x=B?.total??X.contentLength??0,O=await u6(X);if(O instanceof ReadableStream)O=T1(O,Z);return Z?.throwIfAborted(),{body:O,start:B?.start??0,end:B?.end??x-1,total:x,partial:j,type:X.contentType??"application/octet-stream",etag:X.etag||void 0,lastModified:X.lastModified,name:$}}async size(W){let Z=typeof W==="string"?W:W.name,$=typeof W==="string"?void 0:W.bucket,J=await this.blob(Z,$);try{return(await J.getProperties()).contentLength??0}catch(Q){if(Y4(Q))throw new d(Z);throw Q}}async delete(W){let Z=typeof W==="string"?W:W.name,$=typeof W==="string"?void 0:W.bucket,J=await this.blob(Z,$);try{await J.delete()}catch(Q){if(Y4(Q))return;throw Q}}}async function u6(W){if(W.blobBody)return await W.blobBody;if(W.readableStreamBody)return m6.toWeb(W.readableStreamBody);return null}function p6(W){return W}var d6=`
3
3
  local currentKey = KEYS[1]
4
4
  local previousKey = KEYS[2]
5
5
  local limit = tonumber(ARGV[1])
@@ -5,11 +5,13 @@ export { ISLAND_LOADER_SOURCE, STATIC_NAVIGATION_SOURCE };
5
5
  /**
6
6
  * Where an island's entry is served from: `src` is imported by the loader,
7
7
  * `preload` is every chunk that import pulls in (itself first), React
8
- * included.
8
+ * included. `dynamicPreload` is what the entry's code loads lazily, preloaded
9
+ * for an eager island with `preloadDynamic`.
9
10
  */
10
11
  export type IslandAsset = {
11
12
  src: string;
12
13
  preload: string[];
14
+ dynamicPreload?: string[];
13
15
  };
14
16
  /** Maps an island module's build key (`app/views/site/Counter.tsx`) to its entry. */
15
17
  export type IslandResolver = (moduleKey: string) => IslandAsset | undefined;
@@ -54,8 +56,9 @@ export interface DocumentScript {
54
56
  * the `<meta name="gemi-static">` that identifies it.
55
57
  *
56
58
  * Eager islands get `modulepreload`s in the head for their entry's whole
57
- * static import closure (React included); lazy ones are fetched when their
58
- * schedule fires, so nothing about them is announced up front.
59
+ * static import closure (React included), plus its dynamic imports with
60
+ * `preloadDynamic`; lazy ones are fetched when their schedule fires, so
61
+ * nothing about them is announced up front.
59
62
  *
60
63
  * Without a resolver (a test rendering through `app.fetch`), no island table
61
64
  * is injected and nothing is logged.
@@ -1 +1 @@
1
- {"version":3,"file":"staticDocument.d.ts","sourceRoot":"","sources":["../../../services/router/staticDocument.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAGlF,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,CAAC;AAE1D;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAE7D,qFAAqF;AACrF,MAAM,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;AAE5E,uEAAuE;AACvE,eAAO,MAAM,cAAc,iBAAiB,CAAC;AAE7C;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,QAEb,CAAC;AAgBvB;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,QAEjB,CAAC;AAWvB,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,gBAAgB,CAAC;AAElD;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC7B;AAED,uEAAuE;AACvE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,qBAAqB,EAChC,aAAa,EAAE,cAAc,GAAG,SAAS,EACzC,GAAG,EAAE,OAAO,EACZ,UAAU,CAAC,EAAE,sBAAsB,EACnC,MAAM,CAAC,EAAE,cAAc,GACtB,MAAM,CA+CR;AAcD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBtD"}
1
+ {"version":3,"file":"staticDocument.d.ts","sourceRoot":"","sources":["../../../services/router/staticDocument.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAGlF,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAExF,qFAAqF;AACrF,MAAM,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;AAE5E,uEAAuE;AACvE,eAAO,MAAM,cAAc,iBAAiB,CAAC;AAE7C;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,QAEb,CAAC;AAgBvB;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,QAEjB,CAAC;AAWvB,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,gBAAgB,CAAC;AAElD;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC7B;AAED,uEAAuE;AACvE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,qBAAqB,EAChC,aAAa,EAAE,cAAc,GAAG,SAAS,EACzC,GAAG,EAAE,OAAO,EACZ,UAAU,CAAC,EAAE,sBAAsB,EACnC,MAAM,CAAC,EAAE,cAAc,GACtB,MAAM,CAkDR;AAcD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBtD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gemi",
3
- "version": "0.133.0",
3
+ "version": "0.135.0",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "author": "Enes Tufekci <enes@gemijs.dev>",
@@ -1,24 +0,0 @@
1
- // @bun
2
- import{S as R,T as VJ,U as zJ}from"./chunk-b6yb3svm.js";import{oa as M,sa as L,ta as OJ}from"./chunk-a22h5cby.js";import"./chunk-kk18xqgc.js";import{Pd as r,ag as HJ,bg as N}from"./chunk-wevj4981.js";import"./chunk-ff60bzvf.js";import"./chunk-feajsgns.js";import{nh as i,oh as a,rh as t}from"./chunk-0rhf4g12.js";import{ti as GJ}from"./chunk-zv5qyrqg.js";import"./chunk-4t41m5f1.js";import"./chunk-hj88dcss.js";import"./chunk-z61dj480.js";import"./chunk-vnw91fe1.js";import"./chunk-jy9dkgt0.js";import"./chunk-ysc7ykss.js";import"./chunk-jx5zx48j.js";import"./chunk-z9xxthp1.js";import"./chunk-65j32dtn.js";import"./chunk-beb265c9.js";import"./chunk-zypmy8yq.js";import"./chunk-jx2mgvvt.js";import"./chunk-ha15x5ns.js";import{Lk as $J}from"./chunk-x9bk5s21.js";import"./chunk-gqgpwb88.js";import{Zk as KJ}from"./chunk-cxsvzqd4.js";import{_k as D}from"./chunk-99a4e6zf.js";import"./chunk-rnp5k8m3.js";import{createHash as Q2}from"crypto";import{join as E,resolve as xJ,sep as LJ}from"path";import{Duplex as qJ}from"stream";import{constants as _,createBrotliCompress as bJ,createGzip as SJ}from"zlib";var kJ=["br","gzip"],wJ=1024,vJ=5,EJ=19,yJ=6;function gJ(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 fJ(J){if(J===null||J===void 0)return null;let $=new Map;for(let Z of J.split(",")){let[X,...W]=Z.split(";"),H=X.trim().toLowerCase();if(H==="")continue;let j=1;for(let Y of W){let K=Y.indexOf("=");if(K===-1)continue;if(Y.slice(0,K).trim().toLowerCase()==="q"){j=gJ(Y.slice(K+1));break}}$.set(H,j)}return $}function k(J,$=kJ){let Z=fJ(J);if(!Z)return null;let X=Z.get("*"),W=null,H=0;for(let j of $){let Y=Z.get(j)??X??0;if(Y>H)W=j,H=Y}return W}function mJ(J,$){if(!J)return!1;return J.split(",").some((Z)=>Z.trim().toLowerCase().split("=")[0].trim()===$)}function uJ(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(mJ($.headers.get("Cache-Control"),"no-transform"))return!1;let W=$.headers.get("Content-Length");if(W!==null&&Number(W)<wJ)return!1;return!0}function hJ(J){let $=J==="br"?bJ({params:{[_.BROTLI_PARAM_QUALITY]:vJ,[_.BROTLI_PARAM_LGWIN]:EJ},flush:_.BROTLI_OPERATION_FLUSH}):SJ({level:yJ,flush:_.Z_SYNC_FLUSH});return qJ.toWeb($)}function cJ(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 d(J,$){if(!uJ(J.method,$))return $;let Z=new Headers($.headers);cJ(Z);let X=k(J.headers.get("Accept-Encoding"));if(!X)return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z});let W;try{W=hJ(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 aJ,stat as s}from"fs/promises";import{join as tJ}from"path";import{mkdir as V2,readFile as pJ,stat as z2,writeFile as x2}from"fs/promises";import{dirname as C2,join as dJ}from"path";import{promisify as l}from"util";import{brotliCompress as lJ,constants as P2,gzip as oJ}from"zlib";var nJ=".vite/static-assets.json";var o={br:".br",gzip:".gz"},iJ=["br","gzip"],_2=l(lJ),B2=l(oJ);async function n(J){let $;try{$=await pJ(dJ(J,nJ),"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,H]of Object.entries(Z)){if(!Array.isArray(H))continue;X.files[W]=iJ.filter((j)=>H.includes(j))}return X}function w(J){let $=J.toString(),Z=new Bun.CryptoHasher("sha1");return Z.update($),Z.digest("hex")}async function e(J){let $=new Set;async function Z(X,W){let H;try{H=await aJ(X,{withFileTypes:!0})}catch{return}for(let j of H){if(j.name.startsWith("."))continue;if(W&&j.name==="assets")continue;let Y=tJ(X,j.name),K=j.isDirectory(),V=j.isFile();if(j.isSymbolicLink())try{let I=await s(Y);K=I.isDirectory(),V=I.isFile()}catch{continue}if(V)$.add(Y);else if(K&&!j.isSymbolicLink())await Z(Y,!1)}}return await Z(J,!0),$}var rJ="public, max-age=31536000, must-revalidate",sJ="public, max-age=31536000, immutable";async function eJ(J,$,Z){if(Z.length===0||J.headers.has("Range"))return null;let X=k(J.headers.get("Accept-Encoding"),Z);if(!X)return null;let W=$+o[X];try{let H=await s(W);return H.isFile()?{encoding:X,path:W,size:H.size}:null}catch{return null}}async function JJ(J,$,Z={}){let X=Bun.file($),W=Z.encodings??[],H={"Content-Type":X.type||"application/octet-stream","Cache-Control":Z.immutable?sJ:rJ,"Accept-Ranges":"bytes"};if(W.length>0)H.Vary="Accept-Encoding";let j=await eJ(J,$,W);if(j){let V=Bun.file(j.path);return new Response(V.stream(),{headers:{...H,"Content-Encoding":j.encoding,"Content-Length":String(j.size),ETag:`${w(V.lastModified)}-${j.encoding}`}})}let Y=X.size;H.ETag=w(X.lastModified);let K=i(J.headers.get("Range"));if(K){let V=a(K,Y);if(!V)return r(Y);return new Response(X.slice(V.start,V.end+1).stream(),{status:206,headers:{...H,"Content-Range":t(V.start,V.end,Y),"Content-Length":String(V.length)}})}return new Response(X.stream(),{headers:{...H,"Content-Length":String(Y)}})}import{stat as W2}from"fs/promises";var B="app/client.tsx";function ZJ(J,$=M){let Z=J[B]?.file;if(!Z)return;return{module:L(Z,$),preload:A(J,B,$)}}function A(J,$,Z=M){let X=[],W=new Set,H=(j)=>{if(W.has(j))return;W.add(j);let Y=J[j];if(!Y?.file)return;X.push(L(Y.file,Z));for(let K of Y.imports??[])H(K)};return H($),X}function XJ(J,$){let Z=[],X=new Set,W=new Set,H=(j)=>{if(W.has(j))return;W.add(j);let Y=J[j];if(!Y)return;for(let K of Y.imports??[])H(K);for(let K of Y.css??[])if(!X.has(K))X.add(K),Z.push(K)};return H($),Z}function QJ(J,$=M){let Z=new Map;return(X)=>{if(!Z.has(X)){let W=`${X}${$J}`,H=J[W]?.file;Z.set(X,H?{src:L(H,$),preload:A(J,W,$)}:void 0)}return Z.get(X)}}function WJ(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,m=JSON.parse(s.getItem(${Z})||"null");var d=m?Date.now()-m.at:NaN;if(navigator.onLine!==!1&&!(d>=0&&d<${$})){s.setItem(${Z},JSON.stringify({url:window.location.href,at:Date.now()}));r=!0}}catch(e){}if(r)window.location.reload();else throw new Error(${X});export {}`}var J2=new RegExp(`^${HJ}/.+\\.m?js$`);function $2(J){return J2.test(J)}function jJ(J){if($2(J))return new Response(WJ(J),{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store"}});if(N(J))return new Response("Not found",{status:404});return}var Z2=`<!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 v(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(D($))return new Response(JSON.stringify({error:GJ("server_error","Internal Server Error",500)}),{status:500,headers:{"Content-Type":"application/json"}});return new Response(Z2,{status:500,headers:{"Content-Type":"text/html; charset=utf-8"}})}var X2={kind:"none"};function YJ(J){let $=(J??"").trim().toLowerCase();if($===""||$==="false"||$==="off"||$==="0")return X2;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 UJ(J,$,Z){if(Z.kind==="all"){if(!J.get("x-forwarded-for")&&$)J.set("x-forwarded-for",$);return}J.delete("x-real-ip");let X=$;if(Z.kind==="hops"){let W=(J.get("x-forwarded-for")??"").split(",").map((j)=>j.trim()).filter(Boolean),H=W.length-Z.hops;X=H>=0?W[H]:W[0]??$}if(X)J.set("x-forwarded-for",X);else J.delete("x-forwarded-for")}var T=KJ(),H2=E(T,"app"),x=E(T,"dist"),C=E(x,"client");function j2(J){let $;try{$=decodeURIComponent(J)}catch{return null}let Z=xJ(C,"."+$.replace("/assets/assets","/assets"));return Z.startsWith(C+LJ)?Z:null}async function G2(J){try{return(await W2(J)).isFile()}catch{return!1}}async function H3(J,$){let Z=await import(`${x}/client/.vite/manifest.json`),X=await import(`${x}/server/.vite/manifest.json`),W=await OJ(`${x}/client`);process.env.ROOT_DIR=T,process.env.APP_DIR=H2,process.env.DIST_DIR=x;let H={},j={},Y={},K={},V={},I=(Q,G)=>`"${Q}": () => import("${G}")`,y=[];for(let Q of["404",...J.getFlatComponentTree.call(J)]){let G=X[`app/views/${Q}.tsx`];if(!G?.file){console.log(`Server file not found for ${Q}`),console.log(G);let z=Object.keys(X),P=`app/views/${Q}.tsx`;console.log(`${P} not found in server manifest`),console.log(z)}let U=await import(`${process.env.DIST_DIR}/server/${G?.file}`);H[Q]=U.default,j[Q]=U.OpenGraph,Y[Q]=U;let O=Z[`app/views/${Q}.tsx`];if(O?.css&&O?.css.length>0)K[Q]=O?.css;if(O)y.push(I(Q,L(O?.file,W))),V[Q]=A(Z,`app/views/${Q}.tsx`,W)}let CJ=`{${y.join(",")}}`,g=ZJ(Z,W);if(!g)console.error(`Client manifest has no "${B}" entry \u2014 dist/client is incomplete, so documents will render but never hydrate.`);let FJ=Z["app/client.tsx"]?.css??[],f=(await Promise.all(FJ.map((Q)=>Bun.file(`${x}/client/${Q}`).text()))).join(`
22
- `),IJ=QJ(Z,W),PJ=Q2("sha256").update(await Bun.file(`${x}/client/.vite/manifest.json`).text()).digest("base64url").slice(0,12),m=new Map,_J=(Q)=>{let G=m.get(Q);if(!G)G=Bun.file(`${x}/client/${Q}`).text(),m.set(Q,G);return G},BJ=async(Q,G)=>{let U=new Set;for(let z of G?[G,...Q]:Q)for(let P of XJ(Z,`app/views/${z}.tsx`))U.add(P);let O=await Promise.all([...U].map(async(z)=>({id:z,content:await _J(z)})));return R(G?O:[{content:f},...O])},MJ=await e(C),u=new Map;for(let[Q,G]of Object.entries((await n(C))?.files??{})){let U=xJ(C,Q);if(U.startsWith(C+LJ))u.set(U,{immutable:!0,encodings:G})}async function AJ(Q){let{pathname:G}=new URL(Q.url);if(D(G))return await q(Q,G);let U=j2(G);if(N(G)||G.startsWith("/.well-known")||U!==null&&MJ.has(U)){if(!U||!await G2(U))return jJ(G)??await q(Q,G);try{return await JJ(Q,U,u.get(U))}catch(z){return J.onException?.(z),new Response("Not found",{status:404})}}return await q(Q,G)}async function q(Q,G){let U=J.fetch.bind(J);try{let O=await U(Q);if(O instanceof Response)return O;else{let z=[];return z.push({content:f}),await O({getStyles:async(S,c)=>{if(!S)return R([]);if(c?.static)return BJ(S,c.layout);for(let DJ of S){let RJ=Z[`app/views/${DJ}.tsx`];for(let p of RJ?.css??[]){let TJ=Bun.file(`${process.env.DIST_DIR}/client/${p}`);z.push({id:p,content:await TJ.text()})}}return R(z)},clientEntry:g,modulePreloadManifest:V,loaders:CJ,viewImportMap:H,viewModules:Y,ogMap:j,cssManifest:K,assetBase:W,resolveIsland:IJ,buildId:PJ})}}catch(O){return v(O,G,J.onException)}}let NJ=(process.env.GEMI_COMPRESSION??"auto").toLowerCase()!=="off",h=YJ(process.env.GEMI_TRUST_PROXY),F=J.sockets();if(F&&h.kind==="none")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,G)=>{if(UJ(Q.headers,G.requestIP(Q)?.address??null,h),J.applyTrustedClientIp(Q),F?.matches(Q))return F.upgrade(Q,G);let U=await $(Q,(O)=>J.withGlobalMiddleware(O,AJ,(z)=>v(z,new URL(O.url).pathname,J.onException)));return NJ?d(Q,U):U},idleTimeout:zJ(),port:process.env.PORT||5173,websocket:F?.websocket});return await F?.start(b),VJ({port:b.port,rootDir:T}),b}export{H3 as httpProd};
23
-
24
- //# debugId=F74C100B78F93E4C64756E2164756E21