gemi 0.108.0 → 0.109.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 (211) hide show
  1. package/dist/ai/index.js +2 -2
  2. package/dist/ai/index.js.map +1 -1
  3. package/dist/app/index.js +1 -1
  4. package/dist/bin/gemi.js +74 -16
  5. package/dist/bin/gemi.js.map +6 -5
  6. package/dist/bun/plugin.js +1 -1
  7. package/dist/bun/preload.js +1 -1
  8. package/dist/{chunk-9jz4rggd.js → chunk-1es50p4k.js} +2 -2
  9. package/dist/{chunk-9jz4rggd.js.map → chunk-1es50p4k.js.map} +1 -1
  10. package/dist/{chunk-2gmgd05c.js → chunk-367kyrdx.js} +2 -2
  11. package/dist/{chunk-2gmgd05c.js.map → chunk-367kyrdx.js.map} +1 -1
  12. package/dist/{chunk-h7pafjej.js → chunk-3x86bhfn.js} +3 -3
  13. package/dist/{chunk-h7pafjej.js.map → chunk-3x86bhfn.js.map} +1 -1
  14. package/dist/{chunk-kda25fn4.js → chunk-52vsdnny.js} +1 -1
  15. package/dist/{chunk-m31pfz1s.js → chunk-5d6eaxab.js} +2 -2
  16. package/dist/{chunk-m31pfz1s.js.map → chunk-5d6eaxab.js.map} +1 -1
  17. package/dist/{chunk-njkk498k.js → chunk-6zekebzt.js} +2 -2
  18. package/dist/{chunk-njkk498k.js.map → chunk-6zekebzt.js.map} +1 -1
  19. package/dist/{chunk-00y49jcf.js → chunk-7mc5e61r.js} +2 -2
  20. package/dist/{chunk-00y49jcf.js.map → chunk-7mc5e61r.js.map} +1 -1
  21. package/dist/{chunk-47rgq59q.js → chunk-7ssjzp87.js} +2 -2
  22. package/dist/{chunk-47rgq59q.js.map → chunk-7ssjzp87.js.map} +1 -1
  23. package/dist/{chunk-5wt25tyd.js → chunk-9m18pknp.js} +2 -2
  24. package/dist/{chunk-5wt25tyd.js.map → chunk-9m18pknp.js.map} +1 -1
  25. package/dist/{chunk-vj2t77x1.js → chunk-9qw9fa6z.js} +2 -2
  26. package/dist/{chunk-vj2t77x1.js.map → chunk-9qw9fa6z.js.map} +1 -1
  27. package/dist/{chunk-v52dyw0q.js → chunk-c8dhvdrs.js} +2 -2
  28. package/dist/{chunk-v52dyw0q.js.map → chunk-c8dhvdrs.js.map} +1 -1
  29. package/dist/{chunk-kstvyvr0.js → chunk-d2tngs73.js} +2 -2
  30. package/dist/{chunk-kstvyvr0.js.map → chunk-d2tngs73.js.map} +1 -1
  31. package/dist/{chunk-q7y9v2v5.js → chunk-d5sbnzng.js} +13 -13
  32. package/dist/{chunk-q7y9v2v5.js.map → chunk-d5sbnzng.js.map} +5 -4
  33. package/dist/{chunk-1npdp1w2.js → chunk-dpy08xw4.js} +2 -2
  34. package/dist/{chunk-1npdp1w2.js.map → chunk-dpy08xw4.js.map} +1 -1
  35. package/dist/{chunk-h3t4n0bn.js → chunk-ehasw3qm.js} +2 -2
  36. package/dist/{chunk-h3t4n0bn.js.map → chunk-ehasw3qm.js.map} +1 -1
  37. package/dist/{chunk-331s9wqr.js → chunk-eyg88bgv.js} +2 -2
  38. package/dist/{chunk-331s9wqr.js.map → chunk-eyg88bgv.js.map} +1 -1
  39. package/dist/{chunk-fq3sb3xt.js → chunk-f7jhkg8x.js} +3 -3
  40. package/dist/{chunk-fq3sb3xt.js.map → chunk-f7jhkg8x.js.map} +1 -1
  41. package/dist/chunk-fe1pcnw6.js +6 -0
  42. package/dist/chunk-fe1pcnw6.js.map +11 -0
  43. package/dist/chunk-fj6yftm7.js +58 -0
  44. package/dist/{chunk-b9av1sgb.js.map → chunk-fj6yftm7.js.map} +3 -3
  45. package/dist/{chunk-2mhx4e4g.js → chunk-g5a3ptsa.js} +2 -2
  46. package/dist/{chunk-2mhx4e4g.js.map → chunk-g5a3ptsa.js.map} +1 -1
  47. package/dist/{chunk-2q7m8a16.js → chunk-g74qwhvf.js} +2 -2
  48. package/dist/{chunk-2q7m8a16.js.map → chunk-g74qwhvf.js.map} +1 -1
  49. package/dist/{chunk-eytdyahy.js → chunk-g7fr2cy2.js} +2 -2
  50. package/dist/{chunk-eytdyahy.js.map → chunk-g7fr2cy2.js.map} +1 -1
  51. package/dist/{chunk-yebaheh7.js → chunk-ga533cpz.js} +2 -2
  52. package/dist/{chunk-yebaheh7.js.map → chunk-ga533cpz.js.map} +1 -1
  53. package/dist/{chunk-q2fyp44f.js → chunk-gdsby5jh.js} +2 -2
  54. package/dist/{chunk-q2fyp44f.js.map → chunk-gdsby5jh.js.map} +1 -1
  55. package/dist/{chunk-sbyqs03h.js → chunk-grs8dnkd.js} +2 -2
  56. package/dist/{chunk-sbyqs03h.js.map → chunk-grs8dnkd.js.map} +1 -1
  57. package/dist/{chunk-k17prwhx.js → chunk-h15eae7g.js} +2 -2
  58. package/dist/{chunk-k17prwhx.js.map → chunk-h15eae7g.js.map} +1 -1
  59. package/dist/{chunk-9mqqr05d.js → chunk-h6g9g8qc.js} +3 -3
  60. package/dist/{chunk-9mqqr05d.js.map → chunk-h6g9g8qc.js.map} +1 -1
  61. package/dist/{chunk-82hpq0bq.js → chunk-hf32yq23.js} +2 -2
  62. package/dist/{chunk-82hpq0bq.js.map → chunk-hf32yq23.js.map} +1 -1
  63. package/dist/{chunk-xpyhmg45.js → chunk-hgz8sx40.js} +2 -2
  64. package/dist/{chunk-3s3awh38.js.map → chunk-hgz8sx40.js.map} +1 -1
  65. package/dist/{chunk-8pynv9rw.js → chunk-jc4j61xb.js} +2 -2
  66. package/dist/{chunk-8pynv9rw.js.map → chunk-jc4j61xb.js.map} +1 -1
  67. package/dist/{chunk-h4x7cba0.js → chunk-jgtean4t.js} +2 -2
  68. package/dist/{chunk-h4x7cba0.js.map → chunk-jgtean4t.js.map} +1 -1
  69. package/dist/{chunk-6rz8kyqb.js → chunk-jm4jn28j.js} +2 -2
  70. package/dist/{chunk-6rz8kyqb.js.map → chunk-jm4jn28j.js.map} +1 -1
  71. package/dist/{chunk-jnw73s8c.js → chunk-k1ezptt8.js} +2 -2
  72. package/dist/{chunk-jnw73s8c.js.map → chunk-k1ezptt8.js.map} +1 -1
  73. package/dist/{chunk-xg9vye7c.js → chunk-m9609t1y.js} +1 -1
  74. package/dist/{chunk-mhq2bd9c.js → chunk-mp5krm14.js} +3 -3
  75. package/dist/{chunk-mhq2bd9c.js.map → chunk-mp5krm14.js.map} +1 -1
  76. package/dist/{chunk-k9qmr2wa.js → chunk-ngw4xzrt.js} +3 -3
  77. package/dist/{chunk-k9qmr2wa.js.map → chunk-ngw4xzrt.js.map} +1 -1
  78. package/dist/{chunk-ydkjf626.js → chunk-nxxx0m1a.js} +2 -2
  79. package/dist/{chunk-ydkjf626.js.map → chunk-nxxx0m1a.js.map} +1 -1
  80. package/dist/{chunk-rn2kgbg4.js → chunk-pa3khk46.js} +2 -2
  81. package/dist/{chunk-rn2kgbg4.js.map → chunk-pa3khk46.js.map} +1 -1
  82. package/dist/{chunk-wsftnxzs.js → chunk-q8k7f11z.js} +2 -2
  83. package/dist/{chunk-wsftnxzs.js.map → chunk-q8k7f11z.js.map} +1 -1
  84. package/dist/{chunk-rjernda5.js → chunk-qnq110tw.js} +2 -2
  85. package/dist/{chunk-rjernda5.js.map → chunk-qnq110tw.js.map} +1 -1
  86. package/dist/{chunk-ftgd68se.js → chunk-qyyxzy04.js} +2 -2
  87. package/dist/{chunk-ftgd68se.js.map → chunk-qyyxzy04.js.map} +1 -1
  88. package/dist/{chunk-pj2e1p07.js → chunk-qz9aaw5x.js} +2 -2
  89. package/dist/{chunk-pj2e1p07.js.map → chunk-qz9aaw5x.js.map} +1 -1
  90. package/dist/{chunk-2xqrh6d0.js → chunk-r9gzbjc5.js} +1 -1
  91. package/dist/{chunk-wedwkqe7.js → chunk-rgfzqwpg.js} +3 -3
  92. package/dist/{chunk-wedwkqe7.js.map → chunk-rgfzqwpg.js.map} +1 -1
  93. package/dist/{chunk-hdhahvd4.js → chunk-rjcsdazt.js} +2 -2
  94. package/dist/{chunk-hdhahvd4.js.map → chunk-rjcsdazt.js.map} +1 -1
  95. package/dist/chunk-s5aa4hty.js +17 -0
  96. package/dist/{chunk-ncfxmtd5.js.map → chunk-s5aa4hty.js.map} +8 -6
  97. package/dist/{chunk-rh9j8cwv.js → chunk-sp2v357a.js} +3 -3
  98. package/dist/{chunk-rh9j8cwv.js.map → chunk-sp2v357a.js.map} +1 -1
  99. package/dist/{chunk-cfsscms3.js → chunk-t0bp8nrc.js} +4 -4
  100. package/dist/{chunk-cfsscms3.js.map → chunk-t0bp8nrc.js.map} +1 -1
  101. package/dist/{chunk-kqff894s.js → chunk-t3qw9syt.js} +2 -2
  102. package/dist/{chunk-kqff894s.js.map → chunk-t3qw9syt.js.map} +1 -1
  103. package/dist/{chunk-zrdbytx4.js → chunk-t85rca2p.js} +2 -2
  104. package/dist/{chunk-zrdbytx4.js.map → chunk-t85rca2p.js.map} +1 -1
  105. package/dist/{chunk-tyhrrnp5.js → chunk-tr9mxdth.js} +3 -3
  106. package/dist/{chunk-tyhrrnp5.js.map → chunk-tr9mxdth.js.map} +1 -1
  107. package/dist/{chunk-6wrhc9bq.js → chunk-vee4j6ft.js} +2 -2
  108. package/dist/{chunk-6wrhc9bq.js.map → chunk-vee4j6ft.js.map} +1 -1
  109. package/dist/{chunk-kqz8jp6v.js → chunk-vna85rdq.js} +2 -2
  110. package/dist/{chunk-kqz8jp6v.js.map → chunk-vna85rdq.js.map} +1 -1
  111. package/dist/{chunk-4rr9wmh8.js → chunk-vsnmdtrs.js} +2 -2
  112. package/dist/{chunk-4rr9wmh8.js.map → chunk-vsnmdtrs.js.map} +1 -1
  113. package/dist/{chunk-anp4kv3w.js → chunk-vwkdfngg.js} +1 -1
  114. package/dist/chunk-w3j53r0a.js +24 -0
  115. package/dist/{chunk-h2hdpm70.js.map → chunk-w3j53r0a.js.map} +4 -4
  116. package/dist/{chunk-gqpge54c.js → chunk-wdpdqjr1.js} +2 -2
  117. package/dist/{chunk-gqpge54c.js.map → chunk-wdpdqjr1.js.map} +1 -1
  118. package/dist/{chunk-wzqkdmjd.js → chunk-whe0x70j.js} +2 -2
  119. package/dist/{chunk-wzqkdmjd.js.map → chunk-whe0x70j.js.map} +1 -1
  120. package/dist/{chunk-1rs13253.js → chunk-wqsdjweb.js} +3 -3
  121. package/dist/{chunk-1rs13253.js.map → chunk-wqsdjweb.js.map} +1 -1
  122. package/dist/{chunk-3s3awh38.js → chunk-wvwee7dn.js} +2 -2
  123. package/dist/{chunk-xpyhmg45.js.map → chunk-wvwee7dn.js.map} +1 -1
  124. package/dist/{chunk-ffagkj3x.js → chunk-y66ntxbg.js} +2 -2
  125. package/dist/{chunk-ffagkj3x.js.map → chunk-y66ntxbg.js.map} +1 -1
  126. package/dist/chunk-z9x8x3wq.js +5 -0
  127. package/dist/{chunk-mrvcaakf.js.map → chunk-z9x8x3wq.js.map} +1 -1
  128. package/dist/{chunk-we2sj339.js → chunk-zh1t33nq.js} +2 -2
  129. package/dist/{chunk-we2sj339.js.map → chunk-zh1t33nq.js.map} +1 -1
  130. package/dist/{chunk-661wezaf.js → chunk-zhm3qvrc.js} +2 -2
  131. package/dist/{chunk-661wezaf.js.map → chunk-zhm3qvrc.js.map} +1 -1
  132. package/dist/{chunk-kh273hj0.js → chunk-zys7kecf.js} +2 -2
  133. package/dist/{chunk-kh273hj0.js.map → chunk-zys7kecf.js.map} +1 -1
  134. package/dist/{chunk-fwympxqk.js → chunk-zz7h6tdr.js} +2 -2
  135. package/dist/{chunk-fwympxqk.js.map → chunk-zz7h6tdr.js.map} +1 -1
  136. package/dist/chunks/{ThemeProvider-Cqfwr6dk.js → ThemeProvider-BgLyzzOL.js} +8 -2
  137. package/dist/chunks/ThemeProvider-BgLyzzOL.js.map +1 -0
  138. package/dist/client/ClientRouterContext.d.ts.map +1 -1
  139. package/dist/client/ServerDataProvider.d.ts +2 -0
  140. package/dist/client/ServerDataProvider.d.ts.map +1 -1
  141. package/dist/client/createRoot.d.ts.map +1 -1
  142. package/dist/client/index.d.ts +2 -0
  143. package/dist/client/index.d.ts.map +1 -1
  144. package/dist/client/index.js +72 -3
  145. package/dist/client/index.js.map +1 -1
  146. package/dist/client/islands.d.ts +84 -0
  147. package/dist/client/islands.d.ts.map +1 -0
  148. package/dist/config/index.js +1 -1
  149. package/dist/console/run.js +2 -2
  150. package/dist/console/run.js.map +1 -1
  151. package/dist/container/index.js +2 -2
  152. package/dist/container/index.js.map +1 -1
  153. package/dist/database/index.js +2 -2
  154. package/dist/database/index.js.map +1 -1
  155. package/dist/email/index.js +2 -2
  156. package/dist/email/index.js.map +1 -1
  157. package/dist/facades/index.js +2 -2
  158. package/dist/facades/index.js.map +1 -1
  159. package/dist/foundation/index.js +2 -2
  160. package/dist/foundation/index.js.map +1 -1
  161. package/dist/http/ViewRouter.d.ts +38 -0
  162. package/dist/http/ViewRouter.d.ts.map +1 -1
  163. package/dist/http/index.d.ts +1 -1
  164. package/dist/http/index.d.ts.map +1 -1
  165. package/dist/http/index.js +2 -2
  166. package/dist/http/index.js.map +1 -1
  167. package/dist/i18n/dictionaryRuntime.js +2 -2
  168. package/dist/i18n/dictionaryRuntime.js.map +1 -1
  169. package/dist/i18n/index.js +2 -2
  170. package/dist/i18n/index.js.map +1 -1
  171. package/dist/kernel/index.js +2 -2
  172. package/dist/kernel/index.js.map +1 -1
  173. package/dist/orm/index.js +2 -2
  174. package/dist/orm/index.js.map +1 -1
  175. package/dist/server/devFetch.d.ts.map +1 -1
  176. package/dist/server/httpProd.d.ts.map +1 -1
  177. package/dist/server/index.js +2 -2
  178. package/dist/server/index.js.map +1 -1
  179. package/dist/server/modulePreloads.d.ts +17 -0
  180. package/dist/server/modulePreloads.d.ts.map +1 -1
  181. package/dist/server/styles.d.ts +3 -1
  182. package/dist/server/styles.d.ts.map +1 -1
  183. package/dist/services/index.d.ts +1 -0
  184. package/dist/services/index.d.ts.map +1 -1
  185. package/dist/services/index.js +3 -3
  186. package/dist/services/index.js.map +2 -2
  187. package/dist/services/queue/work.js +2 -2
  188. package/dist/services/queue/work.js.map +1 -1
  189. package/dist/services/router/ViewRouteDispatcher.d.ts +27 -1
  190. package/dist/services/router/ViewRouteDispatcher.d.ts.map +1 -1
  191. package/dist/services/router/createFlatViewRoutes.d.ts +13 -1
  192. package/dist/services/router/createFlatViewRoutes.d.ts.map +1 -1
  193. package/dist/services/router/staticDocument.d.ts +44 -0
  194. package/dist/services/router/staticDocument.d.ts.map +1 -0
  195. package/dist/support/index.js +2 -2
  196. package/dist/support/index.js.map +1 -1
  197. package/dist/testing/index.js +1 -1
  198. package/dist/vite/index.mjs +72 -3
  199. package/dist/vitest/index.js +1 -1
  200. package/package.json +1 -1
  201. package/dist/chunk-b9av1sgb.js +0 -58
  202. package/dist/chunk-cewyag0d.js +0 -6
  203. package/dist/chunk-cewyag0d.js.map +0 -11
  204. package/dist/chunk-h2hdpm70.js +0 -24
  205. package/dist/chunk-mrvcaakf.js +0 -5
  206. package/dist/chunk-ncfxmtd5.js +0 -17
  207. package/dist/chunks/ThemeProvider-Cqfwr6dk.js.map +0 -1
  208. /package/dist/{chunk-kda25fn4.js.map → chunk-52vsdnny.js.map} +0 -0
  209. /package/dist/{chunk-xg9vye7c.js.map → chunk-m9609t1y.js.map} +0 -0
  210. /package/dist/{chunk-2xqrh6d0.js.map → chunk-r9gzbjc5.js.map} +0 -0
  211. /package/dist/{chunk-anp4kv3w.js.map → chunk-vwkdfngg.js.map} +0 -0
@@ -3,6 +3,7 @@ import { type CarriedContext } from "../../http/requestContext";
3
3
  import { type FlatViewRoutes } from "./createFlatViewRoutes";
4
4
  import { type ViewRouteConfig } from "./config";
5
5
  import type { ComponentTree } from "../../client/types";
6
+ import { type IslandResolver } from "./staticDocument";
6
7
  /**
7
8
  * `/assets` is where the client build output is served from, ahead of the
8
9
  * router — a route mounted there could never be reached in production, and in
@@ -30,6 +31,12 @@ export declare class ViewRouteDispatcher {
30
31
  clientRouteManifest: Record<string, string[]>;
31
32
  componentTree: ComponentTree;
32
33
  flatComponentTree: string[];
34
+ /**
35
+ * Route patterns declared `.static()`. Shipped to the browser so a
36
+ * client-side navigation to one becomes a full page load: the page has no
37
+ * client router to render it into.
38
+ */
39
+ staticRoutes: string[];
33
40
  root: any;
34
41
  /**
35
42
  * The shell-content hint (#294): React defers any boundary over
@@ -78,9 +85,26 @@ export declare class ViewRouteDispatcher {
78
85
  private completeStream;
79
86
  /** See `preloadCache`. */
80
87
  private modulePreloadLinks;
88
+ /**
89
+ * A `.static()` view's document: the same tree a hydrated view renders, but
90
+ * settled before the first byte and sent with no client runtime — no entry
91
+ * module, `modulepreload`s, `__GEMI_DATA__`, theme script, query or
92
+ * dictionary payloads, or React's streaming scripts. Islands that rendered
93
+ * add their loader (`injectIslands`).
94
+ */
95
+ private renderStatic;
81
96
  private render;
82
97
  handleViewRequest(req: Request, carried?: CarriedContext | null): Promise<Response | ((params: {
83
- getStyles: (p: string[]) => Promise<any[]>;
98
+ /**
99
+ * `static` is set for a static view, which has no client to load CSS
100
+ * later: the styles must cover the views' whole import graph. `layout`
101
+ * is its own document layout, whose CSS then replaces the app's
102
+ * stylesheet.
103
+ */
104
+ getStyles: (p: string[], options?: {
105
+ static?: boolean;
106
+ layout?: string;
107
+ }) => Promise<any[]>;
84
108
  viewImportMap: any;
85
109
  bootstrapModules?: string[];
86
110
  loaders: string;
@@ -119,6 +143,8 @@ export declare class ViewRouteDispatcher {
119
143
  * each one is inlined into — so the client needs the base to fetch one.
120
144
  */
121
145
  assetBase?: string;
146
+ /** Where island client modules are served from; see `injectIslands`. */
147
+ resolveIsland?: IslandResolver;
122
148
  }) => Promise<Response>)>;
123
149
  }
124
150
  //# sourceMappingURL=ViewRouteDispatcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ViewRouteDispatcher.d.ts","sourceRoot":"","sources":["../../../services/router/ViewRouteDispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,KAAK,cAAc,EAAmC,MAAM,2BAA2B,CAAC;AAEjG,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAA2B,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAUzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AA+HxD;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,EAAE,QAY9D;AAaD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,YAM1D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,YAM7D;AAED,qBAAa,mBAAmB;IAC9B,MAAM,CAAC,KAAK,SAAiB;IAE7B,cAAc,EAAE,cAAc,CAAM;IACpC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAM;IAC7C,0FAA0F;IAC1F,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAM;IACnD,aAAa,EAAE,aAAa,CAAM;IAClC,iBAAiB,EAAE,MAAM,EAAE,CAAM;IACjC,IAAI,EAAE,GAAG,CAAQ;IACjB;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa,CAAgC;IAErD;;;;;;;;;OASG;IACH,OAAO,CAAC,YAAY,CAGhB;IAEJ,OAAO,CAAC,QAAQ,CAAC,KAAK,CAKpB;IAEF,8CAA8C;IAC9C,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;gBAEvB,MAAM,EAAE,eAAe;IA2BnC;;;;;;OAMG;YACW,kBAAkB;IAQ1B,YAAY,CAAC,GAAG,EAAE,WAAW;IAUnC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,cAAc;IAatB,0BAA0B;IAC1B,OAAO,CAAC,kBAAkB;YA0CZ,MAAM;IAiad,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI,gCArU7C;QACpB,SAAS,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3C,aAAa,EAAE,GAAG,CAAC;QACnB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC5B,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACtC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC3B;;;;WAIG;QACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClC;;;;;;;;;;;WAWG;QACH,WAAW,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC;QACpD;;;WAGG;QACH,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD;;;;WAIG;QACH,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB;CA6yBJ"}
1
+ {"version":3,"file":"ViewRouteDispatcher.d.ts","sourceRoot":"","sources":["../../../services/router/ViewRouteDispatcher.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { HttpRequest } from "../../http";
2
- import type { ViewRoutes } from "../../http/ViewRouter";
2
+ import type { StaticViewOptions, ViewRoutes } from "../../http/ViewRouter";
3
3
  export type ViewRouteExec = (req: HttpRequest<any, any>) => any;
4
4
  /**
5
5
  * One entry per segment of a route, parallel to `exec` — `segments[i]` is what
@@ -27,6 +27,12 @@ export type FlatViewRoutes = Record<string, {
27
27
  * itself is built once at boot and cannot vary by user.
28
28
  */
29
29
  features: string[];
30
+ /**
31
+ * Set when the route's view was declared `.static()`: the document is sent
32
+ * settled and without the client runtime. Only a leaf view can be static;
33
+ * the layouts above it render into the same static document.
34
+ */
35
+ static?: StaticViewOptions;
30
36
  }>;
31
37
  export declare function createFlatViewRoutes(routes: ViewRoutes): {
32
38
  [k: string]: {
@@ -41,6 +47,12 @@ export declare function createFlatViewRoutes(routes: ViewRoutes): {
41
47
  * itself is built once at boot and cannot vary by user.
42
48
  */
43
49
  features: string[];
50
+ /**
51
+ * Set when the route's view was declared `.static()`: the document is sent
52
+ * settled and without the client runtime. Only a leaf view can be static;
53
+ * the layouts above it render into the same static document.
54
+ */
55
+ static?: StaticViewOptions;
44
56
  };
45
57
  };
46
58
  //# sourceMappingURL=createFlatViewRoutes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createFlatViewRoutes.d.ts","sourceRoot":"","sources":["../../../services/router/createFlatViewRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC;AAEhE;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,MAAM,CACjC,MAAM,EACN;IACE,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,UAAU,EAAE,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CACF,CAAC;AAmCF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU;;cA/C7C,aAAa,EAAE;oBACT,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE;kBAClB,MAAM;kBACN,gBAAgB,EAAE;QAC5B;;;;;WAKG;kBACO,MAAM,EAAE;;EA2GrB"}
1
+ {"version":3,"file":"createFlatViewRoutes.d.ts","sourceRoot":"","sources":["../../../services/router/createFlatViewRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAE3E,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC;AAEhE;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,MAAM,CACjC,MAAM,EACN;IACE,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,UAAU,EAAE,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B,CACF,CAAC;AAmCF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU;;cArD7C,aAAa,EAAE;oBACT,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE;kBAClB,MAAM;kBACN,gBAAgB,EAAE;QAC5B;;;;;WAKG;kBACO,MAAM,EAAE;QAClB;;;;WAIG;iBACM,iBAAiB;;EAiH7B"}
@@ -0,0 +1,44 @@
1
+ import type { StaticRenderCollector } from "../../client/islands";
2
+ /**
3
+ * Where an island's client module is served from: `src` is imported by the
4
+ * loader, `preload` is every chunk that import pulls in (itself first).
5
+ */
6
+ export type IslandAsset = {
7
+ src: string;
8
+ preload: string[];
9
+ };
10
+ /** Maps an island module's build key (`app/views/site/menu.island.ts`) to its asset. */
11
+ export type IslandResolver = (moduleKey: string) => IslandAsset | undefined;
12
+ /** The id of the JSON block the loader reads its island table from. */
13
+ export declare const ISLAND_DATA_ID = "gemi-islands";
14
+ /**
15
+ * The island loader, inlined into a static document that uses islands.
16
+ *
17
+ * Kept byte-for-byte constant — the per-page island table travels in a
18
+ * separate `<script type="application/json">`, which a Content Security Policy
19
+ * does not treat as script — so a strict policy can allow it by hash:
20
+ * `script-src 'sha256-…'` with `ISLAND_LOADER_CSP_HASH`. Island modules are
21
+ * then plain `import()`s of same-origin (or asset-base) files.
22
+ *
23
+ * Per marker: parse `data-props`, import the module on the island's schedule,
24
+ * call its default export once. A failure is logged and leaves the
25
+ * server-rendered markup in place.
26
+ */
27
+ export declare const ISLAND_LOADER_SOURCE: string;
28
+ /**
29
+ * `'sha256-…'` for the production island loader, ready to put in a
30
+ * `script-src` directive. The dev loader also installs the React Refresh
31
+ * preamble first, so it does not match; a dev policy needs `'unsafe-inline'`
32
+ * as Vite itself does.
33
+ */
34
+ export declare const ISLAND_LOADER_CSP_HASH: string;
35
+ /**
36
+ * Adds the island loader to a settled static document — only when the render
37
+ * recorded an island, so a page without one keeps no script at all.
38
+ *
39
+ * Eager islands get `modulepreload`s in the head for their whole static import
40
+ * closure; lazy ones are fetched when their schedule fires, so nothing about
41
+ * them is announced up front.
42
+ */
43
+ export declare function injectIslands(html: string, collector: StaticRenderCollector, resolveIsland: IslandResolver | undefined, dev: boolean): string;
44
+ //# sourceMappingURL=staticDocument.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staticDocument.d.ts","sourceRoot":"","sources":["../../../services/router/staticDocument.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAGlE;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAE7D,wFAAwF;AACxF,MAAM,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;AAE5E,uEAAuE;AACvE,eAAO,MAAM,cAAc,iBAAiB,CAAC;AAE7C;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,oBAAoB,QAMkH,CAAC;AAEpJ;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,QAEb,CAAC;AAwBvB;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,qBAAqB,EAChC,aAAa,EAAE,cAAc,GAAG,SAAS,EACzC,GAAG,EAAE,OAAO,GACX,MAAM,CAiCR"}
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{hc as Y}from"../chunk-9hbwvcxn.js";import{$f as M}from"../chunk-5wt25tyd.js";import{$g as P,bh as R}from"../chunk-9mqqr05d.js";import"../chunk-2gmgd05c.js";import{kh as Q,lh as U,mh as V,nh as W}from"../chunk-kqz8jp6v.js";import"../chunk-3s3awh38.js";class S{static token;async boot(){}static inject(){if(!this.token)throw Error(`Service [${this.name}] does not declare a \`static token\`, so the container has no key to resolve it by.`);try{return R(this)}catch(x){throw Error(`Could not inject [${this.name}]. Services are constructed when the kernel boots, so `+"inject() only works from code that runs after that \u2014 a constructor default or a method "+`body, never module top level. Check that [${this.name}] is listed in \`services\` on your Kernel.`,{cause:x})}}static with(x){let f=new this;for(let[C,g]of Object.entries(x))if(g!==void 0)f[C]=g;return f}}import{readdir as z}from"fs/promises";import{join as B,parse as j}from"path";var H=[".ts",".tsx",".js",".mjs",".jsx"];function J(x={}){let f={};for(let[C,g]of Object.entries(x))f[C]=q(g);return new P(f)}async function L(x,f=new P){let C=[];try{C=await z(x)}catch(D){return f}let g=C.filter((D)=>{let{ext:v,name:F}=j(D);return H.includes(v)&&!F.startsWith(".")}).sort();for(let D of g){let{name:v}=j(D),F=await import(B(x,D));f.set(v,q(F))}return f}function q(x){if(x&&typeof x==="object"&&"default"in x)return x.default;return x}export{M as withDefaults,Q as sourceFiles,W as projectRoot,L as loadConfigFrom,V as discoverClasses,J as createConfigRepository,Y as ServiceProvider,S as Service,P as Repository,U as DiscoveryError};
2
+ import{hc as Y}from"../chunk-9hbwvcxn.js";import{ag as M}from"../chunk-9m18pknp.js";import{ah as P,ch as R}from"../chunk-h6g9g8qc.js";import"../chunk-367kyrdx.js";import{lh as Q,mh as U,nh as V,oh as W}from"../chunk-vna85rdq.js";import"../chunk-wvwee7dn.js";class S{static token;async boot(){}static inject(){if(!this.token)throw Error(`Service [${this.name}] does not declare a \`static token\`, so the container has no key to resolve it by.`);try{return R(this)}catch(x){throw Error(`Could not inject [${this.name}]. Services are constructed when the kernel boots, so `+"inject() only works from code that runs after that \u2014 a constructor default or a method "+`body, never module top level. Check that [${this.name}] is listed in \`services\` on your Kernel.`,{cause:x})}}static with(x){let f=new this;for(let[C,g]of Object.entries(x))if(g!==void 0)f[C]=g;return f}}import{readdir as z}from"fs/promises";import{join as B,parse as j}from"path";var H=[".ts",".tsx",".js",".mjs",".jsx"];function J(x={}){let f={};for(let[C,g]of Object.entries(x))f[C]=q(g);return new P(f)}async function L(x,f=new P){let C=[];try{C=await z(x)}catch(D){return f}let g=C.filter((D)=>{let{ext:v,name:F}=j(D);return H.includes(v)&&!F.startsWith(".")}).sort();for(let D of g){let{name:v}=j(D),F=await import(B(x,D));f.set(v,q(F))}return f}function q(x){if(x&&typeof x==="object"&&"default"in x)return x.default;return x}export{M as withDefaults,Q as sourceFiles,W as projectRoot,L as loadConfigFrom,V as discoverClasses,J as createConfigRepository,Y as ServiceProvider,S as Service,P as Repository,U as DiscoveryError};
3
3
 
4
- //# debugId=3E389AC0A1C738F164756E2164756E21
4
+ //# debugId=654759EB0C4D295264756E2164756E21
@@ -6,6 +6,6 @@
6
6
  "import { readdir } from \"node:fs/promises\";\nimport { join, parse } from \"node:path\";\n\nimport { Repository } from \"./Repository\";\n\nconst CONFIG_EXTENSIONS = [\".ts\", \".tsx\", \".js\", \".mjs\", \".jsx\"];\n\n// Builds a Repository from an already-imported map of config modules. The map\n// key becomes the top-level config key, so `{ mail: mailModule }` is readable\n// as `config.get(\"mail.driver\")`. Each entry may be either the module namespace\n// (its `default` export is unwrapped) or the config object itself.\nexport function createConfigRepository(\n modules: Record<string, any> = {},\n): Repository {\n const items: Record<string, any> = {};\n\n for (const [key, mod] of Object.entries(modules)) {\n items[key] = unwrap(mod);\n }\n\n return new Repository(items);\n}\n\n// Reads every config module in an app's `app/config` directory into a\n// Repository. The file's basename is the top-level key: `app/config/mail.ts`\n// populates `mail.*`. A missing directory yields an empty Repository so apps\n// that declare no config still boot.\nexport async function loadConfigFrom(\n directory: string,\n repository = new Repository(),\n): Promise<Repository> {\n let entries: string[] = [];\n\n try {\n entries = await readdir(directory);\n } catch (err) {\n return repository;\n }\n\n const files = entries\n .filter((entry) => {\n const { ext, name } = parse(entry);\n return CONFIG_EXTENSIONS.includes(ext) && !name.startsWith(\".\");\n })\n .sort();\n\n for (const file of files) {\n const { name } = parse(file);\n const mod = await import(join(directory, file));\n repository.set(name, unwrap(mod));\n }\n\n return repository;\n}\n\nfunction unwrap(mod: any) {\n if (mod && typeof mod === \"object\" && \"default\" in mod) {\n return mod.default;\n }\n return mod;\n}\n"
7
7
  ],
8
8
  "mappings": ";2RAgCO,CAAe,JAAQ,EAOrB,OAMD,AAAI,EAAkB,QAmBrB,OAAS,EAKX,CACH,GAAI,CAAC,KAAK,MACR,MAAU,MACR,YAAY,KAAK,0FACnB,EAGF,GAAI,CACF,OAAO,EAAI,IAAuB,EAClC,MAAO,EAAO,CACd,MAAU,MACR,qBAAqB,KAAK,6DACxB,+FACA,6CAA6C,KAAK,kDAEpD,CAAE,OAAM,CACV,SAoBG,KAAuB,CAAoB,EAA0B,CAC1E,IAAM,EAAW,IAAI,KACrB,QAAY,EAAK,KAAU,OAAO,QAAQ,CAAS,EACjD,GAAI,IAAU,OAAW,EAAS,GAAO,EAE3C,OAAO,EAEX,CChHA,kBAAS,oBACT,eAAS,WAAM,aAIf,IAAM,EAAoB,CAAC,MAAO,OAAQ,MAAO,OAAQ,MAAM,EAMxD,SAAS,CAAsB,CACpC,EAA+B,CAAC,EACpB,CACZ,IAAM,EAA6B,CAAC,EAEpC,QAAY,EAAK,KAAQ,OAAO,QAAQ,CAAO,EAC7C,EAAM,GAAO,EAAO,CAAG,EAGzB,OAAO,IAAI,EAAW,CAAK,EAO7B,eAAsB,CAAc,CAClC,EACA,EAAa,IAAI,EACI,CACrB,IAAI,EAAoB,CAAC,EAEzB,GAAI,CACF,EAAU,MAAM,EAAQ,CAAS,EACjC,MAAO,EAAK,CACZ,OAAO,EAGT,IAAM,EAAQ,EACX,OAAO,CAAC,IAAU,CACjB,IAAQ,MAAK,QAAS,EAAM,CAAK,EACjC,OAAO,EAAkB,SAAS,CAAG,GAAK,CAAC,EAAK,WAAW,GAAG,EAC/D,EACA,KAAK,EAER,QAAW,KAAQ,EAAO,CACxB,IAAQ,QAAS,EAAM,CAAI,EACrB,EAAM,MAAa,SAAK,EAAW,CAAI,GAC7C,EAAW,IAAI,EAAM,EAAO,CAAG,CAAC,EAGlC,OAAO,EAGT,SAAS,CAAM,CAAC,EAAU,CACxB,GAAI,GAAO,OAAO,IAAQ,UAAY,YAAa,EACjD,OAAO,EAAI,QAEb,OAAO",
9
- "debugId": "3E389AC0A1C738F164756E2164756E21",
9
+ "debugId": "654759EB0C4D295264756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -1,4 +1,4 @@
1
- import { B as QueryManagerProvider, D as I18nProvider, F as createMemoryHistory, I as toVariantKey, J as Subject, L as applyParams, N as ProgressManager, O as ServerDataContext, P as Action, i as RouteTransitionProvider, o as ClientRouterContext, r as m, t as ThemeProvider, z as QueryManagerContext } from "../chunks/ThemeProvider-Cqfwr6dk.js";
1
+ import { B as QueryManagerProvider, D as I18nProvider, F as createMemoryHistory, I as toVariantKey, J as Subject, L as applyParams, N as ProgressManager, O as ServerDataContext, P as Action, i as RouteTransitionProvider, o as ClientRouterContext, r as m, t as ThemeProvider, z as QueryManagerContext } from "../chunks/ThemeProvider-BgLyzzOL.js";
2
2
  import { r as RouteStateProvider } from "../chunks/useParams-BN3XXfmG.js";
3
3
  import { Suspense, useContext, useMemo, useRef, useState } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -1,6 +1,6 @@
1
1
  import { r as parseAstAsync$1 } from "./node-BgyIm-M7.mjs";
2
- import { existsSync } from "node:fs";
3
- import { dirname, join } from "node:path";
2
+ import { existsSync, realpathSync } from "node:fs";
3
+ import { dirname, join, relative, sep } from "node:path";
4
4
  import { mkdir, writeFile } from "node:fs/promises";
5
5
  //#region config/load.ts
6
6
  var CONFIG_FILES = [
@@ -1448,6 +1448,74 @@ function documentBase(base) {
1448
1448
  return base.startsWith("/") || /^[a-z][a-z\d+.-]*:\/\//i.test(base) ? normalizeAssetBase(base) : "/";
1449
1449
  }
1450
1450
  //#endregion
1451
+ //#region vite/islandPlugin.ts
1452
+ /**
1453
+ * `() => import("./x.island")` — the loader `island()` takes. The specifier
1454
+ * must name a `*.island` module; the extension is optional, as in any import.
1455
+ */
1456
+ var ISLAND_LOADER = /\(\s*\)\s*=>\s*import\(\s*(["'])([^"'\n]+?\.island(?:\.[cm]?[jt]sx?)?)\1\s*\)/g;
1457
+ /**
1458
+ * Symlinks resolved, so the key is the same path the manifest is keyed on
1459
+ * however the project directory was reached (`/var` vs `/private/var` on
1460
+ * macOS, a linked workspace).
1461
+ */
1462
+ function realPath(path) {
1463
+ try {
1464
+ return realpathSync(path);
1465
+ } catch {
1466
+ return path;
1467
+ }
1468
+ }
1469
+ /**
1470
+ * Tells the server which built file an island's loader imports.
1471
+ *
1472
+ * `island("nav-menu", NavMenuView, () => import("./navMenu.island"))` is
1473
+ * rewritten so the loader carries the module's build key — its path from the
1474
+ * project root, the key the client manifest uses:
1475
+ *
1476
+ * ```js
1477
+ * Object.assign(() => import("./navMenu.island"), { gemiIsland: "app/views/site/navMenu.island.ts" })
1478
+ * ```
1479
+ *
1480
+ * The server renders, never calls the loader, and maps the key to a URL. In
1481
+ * the SSR graph the import itself is replaced too, so an island's browser code
1482
+ * is not bundled into the server build.
1483
+ */
1484
+ function gemiIslandPlugin() {
1485
+ let root = process.cwd();
1486
+ return {
1487
+ name: "gemi-plugin-islands",
1488
+ enforce: "pre",
1489
+ configResolved(config) {
1490
+ root = realPath(config.root);
1491
+ },
1492
+ async transform(code, id, options) {
1493
+ if (id.includes("/node_modules/") || id.startsWith("\0")) return null;
1494
+ if (!/\.[cm]?[jt]sx?$/.test(id.split("?")[0])) return null;
1495
+ if (!code.includes(".island")) return null;
1496
+ const ssr = Boolean(options?.ssr) || this.environment?.config?.consumer === "server";
1497
+ const s = new MagicString(code);
1498
+ let changed = false;
1499
+ for (const match of code.matchAll(ISLAND_LOADER)) {
1500
+ const [whole, quote, specifier] = match;
1501
+ const resolved = await this.resolve(specifier, id);
1502
+ if (!resolved || resolved.external) continue;
1503
+ const file = realPath(resolved.id.split("?")[0]);
1504
+ const key = relative(root, file).split(sep).join("/");
1505
+ if (key.startsWith("..")) continue;
1506
+ const loader = ssr ? `() => Promise.reject(new Error("Island modules load in the browser."))` : `() => import(${quote}${specifier}${quote})`;
1507
+ s.overwrite(match.index, match.index + whole.length, `Object.assign(${loader}, { gemiIsland: ${JSON.stringify(key)} })`);
1508
+ changed = true;
1509
+ }
1510
+ if (!changed) return null;
1511
+ return {
1512
+ code: s.toString(),
1513
+ map: s.generateMap({ hires: true })
1514
+ };
1515
+ }
1516
+ };
1517
+ }
1518
+ //#endregion
1451
1519
  //#region vite/index.ts
1452
1520
  var gemi = async () => {
1453
1521
  const userConfig = await loadGemiConfig(process.cwd());
@@ -1465,7 +1533,7 @@ var gemi = async () => {
1465
1533
  ssrEmitAssets: true,
1466
1534
  sourcemap: true,
1467
1535
  rollupOptions: {
1468
- input: Array.from(JSON.parse(process.env.GEMI_INPUT ?? "[]")),
1536
+ input: Array.from(JSON.parse(process.env.GEMI_INPUT ?? "[]")).filter((entry) => !(env.isSsrBuild && /\.island\.[cm]?[jt]sx?$/.test(entry))),
1469
1537
  preserveEntrySignatures: "strict",
1470
1538
  ...env.isSsrBuild ? { external: isGemiExternal } : {}
1471
1539
  }
@@ -1479,6 +1547,7 @@ var gemi = async () => {
1479
1547
  config: () => userViteConfig
1480
1548
  },
1481
1549
  gemiAssetBasePlugin(resolveAssetBase(userConfig.assetBase)),
1550
+ gemiIslandPlugin(),
1482
1551
  {
1483
1552
  name: "gemi-plugin-hot-reload",
1484
1553
  handleHotUpdate({ server, modules }) {
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{da as k,ea as z}from"../chunk-1rs13253.js";import"../chunk-331s9wqr.js";import"../chunk-v52dyw0q.js";import"../chunk-3s3awh38.js";function K(){return{name:"gemi-custom-request",enforce:"pre",async transform(D,G){let j=G.split("?",1)[0];if(j.includes("/node_modules/")||!k.test(j))return null;return{code:await z(D),map:null}}}}export{K as gemiRequestPlugin};
2
+ import{da as k,ea as z}from"../chunk-wqsdjweb.js";import"../chunk-eyg88bgv.js";import"../chunk-c8dhvdrs.js";import"../chunk-wvwee7dn.js";function K(){return{name:"gemi-custom-request",enforce:"pre",async transform(D,G){let j=G.split("?",1)[0];if(j.includes("/node_modules/")||!k.test(j))return null;return{code:await z(D),map:null}}}}export{K as gemiRequestPlugin};
3
3
 
4
4
  //# debugId=1C43D425FE3D486E64756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gemi",
3
- "version": "0.108.0",
3
+ "version": "0.109.0",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "author": "Enes Tufekci <enes@gemijs.dev>",
@@ -1,58 +0,0 @@
1
- // @bun
2
- import{h as N,j as q}from"./chunk-cewyag0d.js";import{ka as E,la as w}from"./chunk-q7y9v2v5.js";import"./chunk-a1g0bahx.js";import"./chunk-564zfdd1.js";import"./chunk-9r3znmqq.js";import"./chunk-tvy2fqza.js";import"./chunk-wsftnxzs.js";import{Uf as _}from"./chunk-fwympxqk.js";import{oh as y}from"./chunk-82hpq0bq.js";import"./chunk-3s3awh38.js";import{join as KJ}from"path";import{createServer as QJ}from"vite";import{join as u}from"path";import{IncomingMessage as v,ServerResponse as l}from"http";import{Socket as d}from"net";function c(J){return J.replace(/\x1b\[[0-9;]*m/g,"").replace(/\[[0-9;]*m/g,"").replace(/\n\s*\n/g,`
3
- `).split(`
4
- `).map((K)=>K.trim()).filter((K)=>K.length>0).join(`
5
- `).trim()}function F(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
- ${c.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 i(J,K){let Q=new URL(K.url),W=new v(new d);W.url=Q.pathname+Q.search,W.method=K.method,W.headers=Object.fromEntries(K.headers);let $=new l(W),G=[];return new Promise((B)=>{$.write=(z)=>{if(z)G.push(Buffer.from(z));return!0},$.end=(z)=>{if(z&&typeof z!=="function")G.push(Buffer.from(z));let Z=new Headers;for(let[L,Y]of Object.entries($.getHeaders())){if(Y==null)continue;for(let X of Array.isArray(Y)?Y:[Y])Z.append(L,String(X))}return B(new Response(G.length?Buffer.concat(G):null,{status:$.statusCode,headers:Z})),$},J.middlewares(W,$,()=>B(null))})}function p(J,K,Q){let W=String(K),$=" ".repeat(W.length),G=" ".repeat(Math.max(0,Q-1))+"^";return`${W} | ${J}
46
- ${$} | ${G}
47
- `}function I(J){if(J&&typeof J==="object"){let K=J.position;if(K&&typeof K==="object"&&typeof K.file==="string")return{message:typeof J.message==="string"?J.message:String(J),stack:"",frame:typeof K.lineText==="string"?p(K.lineText,K.line,K.column):void 0,loc:{file:K.file,line:K.line,column:K.column}};return{message:typeof J.message==="string"?J.message:String(J),stack:typeof J.stack==="string"?J.stack:""}}return{message:String(J),stack:""}}function j(J){let K=globalThis.__gemiVite;if(!K)return;K.ws.send({type:"error",err:I(J)}),globalThis.__gemiErrorActive=!0}function H(J){let K=J.environments.ssr;if(typeof K?.runner?.import!=="function")throw Error("gemi dev requires a runnable Vite SSR environment.");return K.runner}var S="/@gemi/dev-entry.js",n=`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
- `,o=`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 s(J){let{pathname:K}=new URL(J.url),Q=(W)=>new Response(W,{headers:{"Content-Type":"application/javascript"}});if(K===S)return Q(n);if(K.startsWith("/render-error.js"))return Q("window.render_error = true");if(K.startsWith("/refresh.js"))return Q(o);return null}function C(J,K,Q){let W=u(process.cwd(),"app");return async($)=>{let{pathname:G}=new URL($.url),B=(Z)=>{if(console.error(Z),Q.ssrFixStacktrace?.(Z),j(Z),y(G))return new Response(JSON.stringify({error:_("server_error",Z?.message??String(Z),500)}),{status:500,headers:{"Content-Type":"application/json"}});return globalThis.__gemiErrorPageServed=!0,new Response(F(I(Z)),{status:500,headers:{"Content-Type":"text/html"}})},z=async(Z)=>{let L=s(Z);if(L)return L;try{let Y=J.fetch.bind(J),X=await i(Q,Z)??await Y(Z);if(X instanceof Response)return X;let A={},b={},M={},h=(U,O)=>`"${U}": () => import("${O}")`,D=[];for(let U of["404",...J.getFlatComponentTree.call(J)]){if(Bun.env.NODE_ENV==="test")break;let O=`${process.env.APP_DIR}`,x=await H(Q).import(`${O}/views/${U}.tsx`);A[U]=x.default,b[U]=x?.OpenGraph,M[U]=x,D.push(h(U,`/app/views/${U}.tsx`))}let m=`{${D.join(",")}}`;return await X({getStyles:async(U)=>await N(W,Q,U),bootstrapModules:[S],viewImportMap:A,viewModules:M,ogMap:b,loaders:m,cssManifest:{}})}catch(Y){return B(Y)}};return await K($,(Z)=>J.withGlobalMiddleware(Z,z,B))}}function a(J){try{return Bun.listen({hostname:"0.0.0.0",port:J,socket:{data(){}}}).stop(!0),!0}catch(K){return K?.code!=="EADDRINUSE"}}function T(J,K=a){let Q=24678+(J-5173);if(Q>65471)Q=24678;for(let W=Q;W<Q+64;W++)if(K(W))return W;throw Error(`Could not find a free port for Vite's HMR websocket: tried ${Q}-${Q+64-1}. Set one explicitly in gemi.config.ts as \`vite: { server: { ws: { port } } }\`.`)}import{createServer as t}from"http";var r=new Set(["vite-hmr","vite-ping"]);async function k(J){let K=t((Q,W)=>{W.writeHead(426,{"Content-Type":"text/plain"}),W.end("Upgrade Required")});return await new Promise((Q,W)=>{K.once("error",W),K.listen(J,"127.0.0.1",()=>{K.off("error",W),Q()})}),K}function P(J){if(!J||typeof J!=="object")return null;let Q=J.server?.address?.();if(Q&&typeof Q==="object"&&"port"in Q)return Number(Q.port)||null;return null}function f(J){if(J.headers.get("upgrade")?.toLowerCase()!=="websocket")return!1;return r.has(J.headers.get("sec-websocket-protocol")??"")}var e=(J)=>typeof J==="string"?J:new Uint8Array(J);async function R(J,K,Q){let W=new URL(J.url),$=J.headers.get("sec-websocket-protocol")??"vite-hmr",G={host:J.headers.get("host")??W.host},B=J.headers.get("origin");if(B)G.origin=B;let z=new WebSocket(`ws://127.0.0.1:${Q}${W.pathname}${W.search}`,{protocols:[$],headers:G});z.binaryType="arraybuffer";let Z={upstream:z,early:[]};if(z.onmessage=(X)=>{let A=e(X.data);if(Z.browser)Z.browser.send(A);else Z.early.push(A)},z.onclose=(X)=>{Z.browser?.close(JJ(X.code),X.reason)},z.onerror=()=>{},!await new Promise((X)=>{z.addEventListener("open",()=>X(!0),{once:!0}),z.addEventListener("close",()=>X(!1),{once:!0})}))return new Response("Vite refused the HMR websocket",{status:403});if(!K.upgrade(J,{headers:{"Sec-WebSocket-Protocol":$},data:Z}))return z.close(),new Response("WebSocket upgrade failed",{status:400});return}function JJ(J){if(J===1000||J>=1001&&J<=1003||J>=1007&&J<=1014)return J;if(J>=3000&&J<=4999)return J;return 1000}var g={open(J){let K=J.data;for(let Q of K.early)J.send(Q);if(K.early=[],K.browser=J,K.upstream.readyState!==WebSocket.OPEN)J.close(1000)},message(J,K){if(J.data.upstream.readyState===WebSocket.OPEN)J.data.upstream.send(K)},close(J){let{upstream:K}=J.data;if(K.readyState<=WebSocket.OPEN)K.close()}};var V=process.cwd(),WJ=KJ(V,"app");if(!globalThis.__gemiErrorHooked)globalThis.__gemiErrorHooked=!0,process.on("unhandledRejection",(J)=>{console.error(J),j(J)}),process.on("uncaughtException",(J)=>{console.error(J),j(J)});async function _J(J,K){let Q=Number(process.env.PORT)||5173,W=Boolean(globalThis.__gemiVite),$=globalThis.__gemiVite??=await QJ({configFile:!1,plugins:[w()],server:{middlewareMode:!0,port:Q,ws:{server:await k(T(Q))},allowedHosts:J.devAllowedHosts.call(J),watch:{ignored:(Z)=>{let L=Z.split(/[/\\]/).pop()??"";return L===".env"||L.startsWith(".env.")}}},appType:"custom",resolve:{dedupe:["react","react-dom"]},optimizeDeps:{include:["react","react-dom","react-dom/client"]},ssr:{external:[...E]}});process.env.ROOT_DIR=V,process.env.APP_DIR=WJ;let G=C(J,K,$),B=P($.config?.server?.ws),z=Bun.serve({port:Q,fetch:(Z,L)=>{if(B!==null&&f(Z))return R(Z,L,B);return G(Z)},websocket:g});if(W)H($).clearCache();if(W)if(globalThis.__gemiErrorActive&&globalThis.__gemiErrorPageServed)globalThis.__gemiErrorActive=!1,globalThis.__gemiErrorPageServed=!1,$.ws.send({type:"full-reload"});else globalThis.__gemiErrorActive=!1,$.ws.send({type:"custom",event:"http-reload"});else q({port:z.port,rootDir:V});return z}export{I as viteErrorPayload,_J as httpDev};
57
-
58
- //# debugId=D737F08ECD671A5264756E2164756E21
@@ -1,6 +0,0 @@
1
- // @bun
2
- import{xa as j}from"./chunk-tvy2fqza.js";import{createElement as x}from"react";function v(i,t){let s=Object.keys(t).sort((u,r)=>r.length-u.length).map((u)=>u.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")),b=new RegExp(s.join("|"),"g");return i.replace(b,(u)=>t[u])}async function J(i,t,s=[]){let b=[...s.map((n)=>`${i}/views/${n}.tsx`),`${i}/views/RootLayout.tsx`],u=new Set;for(let n of b){let e=t.moduleGraph.getModulesByFile(n);if(e)for(let g of e)u.add(g)}let r=[],p=[],l={};for(let n of u)if(n)for(let e of n.importedModules){if(e.file.includes("module.css"))l[e.file]=e.ssrTransformResult.map.sourcesContent.join("");if(e.file.includes(".css"))p.push(e.file)}for(let n of p){let e=await t.transformRequest(n+"?direct"),g=n.includes("module.css"),a="";if(g)a=v(l[n],e.default);r.push({isDev:!0,id:n,content:g?a:e.code})}return r.map((n,e)=>{return x("style",{key:e,type:"text/css","data-vite-dev-id":n.id,dangerouslySetInnerHTML:{__html:n.content}})})}async function L(i=[]){return i.map((t,s)=>{return x("style",{key:s,id:t?.id,type:"text/css",dangerouslySetInnerHTML:{__html:t.content}})})}import{existsSync as m}from"fs";import{basename as f}from"path";import{networkInterfaces as k}from"os";var y={name:"gemi",version:"0.108.0",private:!1,license:"MIT",author:"Enes Tufekci <enes@gemijs.dev>",repository:{type:"git",url:"git+https://github.com/nstfkc/gemi.git",directory:"packages/gemi"},bin:{gemi:"./dist/bin/gemi.js","gemi-orm-generator":"./dist/bin/orm-generator.js"},files:["dist/**/*","ide/typescript-plugin/package.json","skills/**/*"],module:!0,exports:{"./http":"./http/index.ts","./client":"./client/index.ts","./ai":"./ai/index.ts","./ai/client":"./ai/client/index.ts","./testing":"./testing/index.ts","./app":"./app/index.ts","./facades":"./facades/index.ts","./email":"./email/index.ts","./vite":"./dist/vite/index.mjs","./kernel":"./kernel/index.ts","./services":"./services/index.ts","./i18n":"./i18n/index.ts","./dictionary":"./i18n/dictionaryRuntime.ts","./server":"./server/index.ts","./config":"./config/index.ts","./container":"./container/index.ts","./foundation":"./foundation/index.ts","./database":"./database/index.ts","./orm":"./orm/index.ts","./support":"./support/index.ts","./console/run":"./console/run.ts","./queue/work":"./services/queue/work.ts","./ide/typescript-plugin":"./ide/typescript-plugin/index.ts","./bun/preload":"./bun/preload.ts","./bun/plugin":"./bun/plugin.ts","./vitest":"./vitest/index.ts"},scripts:{lint:"oxlint",typecheck:"tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.browser.json && tsc --noEmit -p ide/typescript-plugin/tsconfig.json",build:"NODE_ENV=production bun run build:core && bun run build:bin && bun run build:types && bun run build:client && bun run build:plugin && bun run build:ts-plugin && bun run build:client-types && bun run build:augmentation","build:core":"bun ./scripts/build.ts","build:bin":"bun build --outdir=./dist/bin --target=bun --external=vite --external=react-dom --external=react/jsx-runtime --external=bun --external=sharp --external=@azure/storage-blob --external=typescript --sourcemap ./bin/gemi.ts ./bin/orm-generator.ts && bun ./scripts/prepare-bin.ts","build:client":"rm -rf dist/client dist/testing dist/ai/client dist/chunks && vite build -c vite.client.config.mts","build:plugin":"vite build -c vite.plugin.config.mts","build:ts-plugin":"bun ./scripts/build-ts-plugin.ts","build:types":"tsc -p tsconfig.build.json","build:client-types":"tsc -p tsconfig.browser.json",test:"bun --bun vitest","test:types":"vitest run --typecheck.only","test:live":"bun --bun vitest run ai/live","test:packaging":"bun --bun vitest run --config vitest.packaging.config.ts","build:publish":"bun scripts/build-publish.ts",prepublishOnly:"echo 'Do not publish from this directory \u2014 its exports point at TS source. Run: bun run build:publish, then publish from .publish/' && exit 1","build:augmentation":"bun ./scripts/wire-augmentation.ts"},dependencies:{"@aws-sdk/client-s3":"^3.629.0","@aws-sdk/s3-request-presigner":"^3.629.0","ast-types":"^0.14.2",commander:"^12.1.0",history:"^5.3.0","jsx-email":"2.0.0-rc2.1","magic-string":"^0.30.17",open:"^10.1.0","react-error-boundary":"^6.0.0",recast:"^0.23.9",resend:"^6.12.3",satori:"^0.12.2","temporal-polyfill":"^0.2.5","twitter-api-v2":"^1.20.2","urlpattern-polyfill":"^10.0.0",uuid:"^9.0.1"},devDependencies:{"@babel/parser":"^7.25.4","@prisma/generator-helper":"^6.5.0","@repo/typescript-config":"*","@testing-library/react":"^16.3.2","@types/bun":"^1.3.14","@types/eslint":"^8.56.5","@types/node":"^20.11.24","@types/react":"^19.0.2","@types/react-dom":"^19.0.2",eslint:"^8.57.0",jsdom:"^30.0.1",oxlint:"^1.39.0",react:"19.2.3","react-dom":"19.2.3",typescript:"^5.7.3",vitest:"^4.0.0"},peerDependencies:{"@azure/storage-blob":"^12.28.0",react:">=19","react-dom":">=19",sharp:"^0.34.2",typescript:">=5",vite:"^8.0.0"},peerDependenciesMeta:{"@azure/storage-blob":{optional:!0},typescript:{optional:!0}}};var q=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557\u2588\u2588\u2557","\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2551","\u2588\u2588\u2551 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2554\u2588\u2588\u2588\u2588\u2554\u2588\u2588\u2551\u2588\u2588\u2551","\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2551\u255A\u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2551","\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u255A\u2550\u255D \u2588\u2588\u2551\u2588\u2588\u2551"," \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D"],z=Boolean(process.stdout.isTTY)&&!process.env.NO_COLOR,c=(i,t)=>z?`\x1B[${i}m${t}\x1B[0m`:t,E=(i)=>c("1",i),d=(i)=>c("2",i),o=(i)=>c("36",i),O=(i)=>c("32",i),T=(i)=>c("35",i);function R(){return y.version??"?"}function _(i){for(let t of Object.values(k()))for(let s of t??[])if((s.family==="IPv4"||s.family===4)&&!s.internal)return`http://${s.address}:${i}`;return null}function G(i){return j(i).filter((t)=>m(t)).map((t)=>f(t))}function A(i){let{port:t,rootDir:s}=i,b=`http://localhost:${t}`,u=_(t),r=G(s),p=(n,e)=>` ${O("\u279C")} ${E(n.padEnd(9))}${e}`,l=["",...q.map((n)=>T(n)),"",` ${d("gemi")} ${o(`v${R()}`)}`,"",p("Local:",o(b)),p("Network:",u?o(u):d("unavailable")),p("Env:",r.length?r.join(", "):d("none")),""];console.log(l.join(`
3
- `))}
4
- export{J as h,L as i,A as j};
5
-
6
- //# debugId=2B9725F4FA3F320564756E2164756E21
@@ -1,11 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../server/styles.ts", "../server/banner.ts"],
4
- "sourcesContent": [
5
- "import { createElement } from \"react\";\nimport { type ModuleNode, type ViteDevServer } from \"vite\";\n\nfunction replaceStrings(text: string, record: Record<string, string>): string {\n const escapedKeys = Object.keys(record)\n .sort((a, b) => b.length - a.length)\n .map((key) => key.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"));\n\n // Create a single regex with all keys\n const regex = new RegExp(escapedKeys.join(\"|\"), \"g\");\n\n return text.replace(regex, (match) => record[match]);\n}\n\nexport async function createDevStyles(\n appDir: string,\n vite: ViteDevServer,\n currentViews: string[] = [],\n) {\n const views = [\n ...currentViews.map((view) => `${appDir}/views/${view}.tsx`),\n `${appDir}/views/RootLayout.tsx`,\n ];\n\n const modules = new Set<ModuleNode>();\n for (const view of views) {\n const mod = vite.moduleGraph.getModulesByFile(view);\n if (mod) {\n for (const m of mod) modules.add(m);\n }\n }\n\n const styles = [];\n const cssModules = [];\n const cssModuleContent: Record<string, string> = {};\n for (const mod of modules as any) {\n if (mod) {\n for (const imported of mod.importedModules) {\n if (imported.file.includes(\"module.css\")) {\n cssModuleContent[imported.file] = imported.ssrTransformResult.map.sourcesContent.join(\"\");\n }\n if (imported.file.includes(\".css\")) {\n cssModules.push(imported.file);\n }\n }\n }\n }\n\n for (const cssModulePath of cssModules) {\n const transform = await vite.transformRequest(cssModulePath + \"?direct\");\n\n const isCssModule = cssModulePath.includes(\"module.css\");\n\n let transformedCssModule = \"\";\n\n if (isCssModule) {\n transformedCssModule = replaceStrings(\n cssModuleContent[cssModulePath],\n // Vite's `TransformResult` type has no `default`, but the CSS-module\n // transform attaches the class-name mapping there at runtime.\n (transform as unknown as { default: Record<string, string> }).default,\n );\n }\n\n styles.push({\n isDev: true,\n id: cssModulePath,\n content: isCssModule ? transformedCssModule : transform.code,\n });\n }\n\n return styles.map((style, i) => {\n return createElement(\"style\", {\n key: i,\n type: \"text/css\",\n \"data-vite-dev-id\": style.id,\n dangerouslySetInnerHTML: { __html: style.content },\n });\n });\n}\n\nexport async function createStyles(styles = []) {\n return styles.map((style, i) => {\n return createElement(\"style\", {\n key: i,\n id: style?.id,\n type: \"text/css\",\n dangerouslySetInnerHTML: { __html: style.content },\n });\n });\n}\n",
6
- "import { existsSync } from \"node:fs\";\nimport { basename } from \"node:path\";\nimport { networkInterfaces } from \"node:os\";\nimport { envFiles } from \"./watchEnv\";\nimport pkg from \"../package.json\";\n\n// \"GEMI\" — ANSI Shadow figlet font.\nconst ART = [\n \" ██████╗ ███████╗███╗ ███╗██╗\",\n \"██╔════╝ ██╔════╝████╗ ████║██║\",\n \"██║ ███╗█████╗ ██╔████╔██║██║\",\n \"██║ ██║██╔══╝ ██║╚██╔╝██║██║\",\n \"╚██████╔╝███████╗██║ ╚═╝ ██║██║\",\n \" ╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝\",\n];\n\nconst useColor = Boolean(process.stdout.isTTY) && !process.env.NO_COLOR;\nconst paint = (code: string, text: string) =>\n useColor ? `\\x1b[${code}m${text}\\x1b[0m` : text;\nconst bold = (t: string) => paint(\"1\", t);\nconst dim = (t: string) => paint(\"2\", t);\nconst cyan = (t: string) => paint(\"36\", t);\nconst green = (t: string) => paint(\"32\", t);\nconst magenta = (t: string) => paint(\"35\", t);\n\nfunction gemiVersion(): string {\n return (pkg as { version?: string }).version ?? \"?\";\n}\n\nfunction networkUrl(port: number | string): string | null {\n for (const ifaces of Object.values(networkInterfaces())) {\n for (const iface of ifaces ?? []) {\n // Node <18 reported `family` as the number 4; newer Bun/Node use \"IPv4\".\n const isV4 = iface.family === \"IPv4\" || (iface.family as unknown) === 4;\n if (isV4 && !iface.internal) return `http://${iface.address}:${port}`;\n }\n }\n return null;\n}\n\nfunction loadedEnvFiles(rootDir: string): string[] {\n return envFiles(rootDir)\n .filter((file) => existsSync(file))\n .map((file) => basename(file));\n}\n\nexport function printStartupBanner(params: {\n port: number | string;\n rootDir: string;\n}) {\n const { port, rootDir } = params;\n const local = `http://localhost:${port}`;\n const network = networkUrl(port);\n const env = loadedEnvFiles(rootDir);\n\n const row = (label: string, value: string) =>\n ` ${green(\"➜\")} ${bold(label.padEnd(9))}${value}`;\n\n const out = [\n \"\",\n ...ART.map((line) => magenta(line)),\n \"\",\n ` ${dim(\"gemi\")} ${cyan(`v${gemiVersion()}`)}`,\n \"\",\n row(\"Local:\", cyan(local)),\n row(\"Network:\", network ? cyan(network) : dim(\"unavailable\")),\n row(\"Env:\", env.length ? env.join(\", \") : dim(\"none\")),\n \"\",\n ];\n\n console.log(out.join(\"\\n\"));\n}\n"
7
- ],
8
- "mappings": "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",
9
- "debugId": "2B9725F4FA3F320564756E2164756E21",
10
- "names": []
11
- }
@@ -1,24 +0,0 @@
1
- // @bun
2
- import{i as q,j as WJ}from"./chunk-cewyag0d.js";import{ma as T,qa as C,ra as XJ}from"./chunk-a1g0bahx.js";import"./chunk-tvy2fqza.js";import{Ad as r,Bd as _,jc as o}from"./chunk-ncfxmtd5.js";import"./chunk-h7pafjej.js";import"./chunk-1npdp1w2.js";import{jf as p,kf as d,nf as l}from"./chunk-rh9j8cwv.js";import{Uf as JJ}from"./chunk-fwympxqk.js";import"./chunk-njkk498k.js";import"./chunk-gqpge54c.js";import"./chunk-5wt25tyd.js";import"./chunk-k9qmr2wa.js";import"./chunk-4rr9wmh8.js";import"./chunk-47rgq59q.js";import"./chunk-2q7m8a16.js";import"./chunk-9mqqr05d.js";import"./chunk-2gmgd05c.js";import{nh as QJ}from"./chunk-kqz8jp6v.js";import{oh as P}from"./chunk-82hpq0bq.js";import"./chunk-3s3awh38.js";import{join as S,resolve as HJ,sep as KJ}from"path";import{Duplex as IJ}from"stream";import{constants as B,createBrotliCompress as BJ,createGzip as FJ}from"zlib";var _J=["br","gzip"],PJ=1024,MJ=5,AJ=19,kJ=6;function NJ(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 TJ(J){if(J===null||J===void 0)return null;let $=new Map;for(let Z of J.split(",")){let[Q,...X]=Z.split(";"),K=Q.trim().toLowerCase();if(K==="")continue;let W=1;for(let j of X){let O=j.indexOf("=");if(O===-1)continue;if(j.slice(0,O).trim().toLowerCase()==="q"){W=NJ(j.slice(O+1));break}}$.set(K,W)}return $}function k(J,$=_J){let Z=TJ(J);if(!Z)return null;let Q=Z.get("*"),X=null,K=0;for(let W of $){let j=Z.get(W)??Q??0;if(j>K)X=W,K=j}return X}function DJ(J,$){if(!J)return!1;return J.split(",").some((Z)=>Z.trim().toLowerCase().split("=")[0].trim()===$)}function RJ(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 Q=$.headers.get("Content-Encoding");if(Q&&Q.trim().toLowerCase()!=="identity")return!1;if(DJ($.headers.get("Cache-Control"),"no-transform"))return!1;let X=$.headers.get("Content-Length");if(X!==null&&Number(X)<PJ)return!1;return!0}function qJ(J){let $=J==="br"?BJ({params:{[B.BROTLI_PARAM_QUALITY]:MJ,[B.BROTLI_PARAM_LGWIN]:AJ},flush:B.BROTLI_OPERATION_FLUSH}):FJ({level:kJ,flush:B.Z_SYNC_FLUSH});return IJ.toWeb($)}function SJ(J){let $=J.get("Vary");if(!$){J.set("Vary","Accept-Encoding");return}let Z=$.split(",").map((Q)=>Q.trim().toLowerCase());if(Z.includes("*")||Z.includes("accept-encoding"))return;J.append("Vary","Accept-Encoding")}function m(J,$){if(!RJ(J.method,$))return $;let Z=new Headers($.headers);SJ(Z);let Q=k(J.headers.get("Accept-Encoding"));if(!Q)return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z});let X;try{X=qJ(Q)}catch{return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}return Z.set("Content-Encoding",Q),Z.delete("Content-Length"),new Response($.body.pipeThrough(X),{status:$.status,statusText:$.statusText,headers:Z})}import{readdir as fJ,stat as n}from"fs/promises";import{join as mJ}from"path";import{mkdir as $2,readFile as bJ,stat as Z2,writeFile as Q2}from"fs/promises";import{dirname as W2,join as yJ}from"path";import{promisify as u}from"util";import{brotliCompress as wJ,constants as j2,gzip as vJ}from"zlib";var EJ=".vite/static-assets.json";var h={br:".br",gzip:".gz"},gJ=["br","gzip"],G2=u(wJ),Y2=u(vJ);async function c(J){let $;try{$=await bJ(yJ(J,EJ),"utf8")}catch{return null}let Z;try{Z=JSON.parse($)?.files}catch{return null}if(!Z||typeof Z!=="object")return null;let Q={files:{}};for(let[X,K]of Object.entries(Z)){if(!Array.isArray(K))continue;Q.files[X]=gJ.filter((W)=>K.includes(W))}return Q}function N(J){let $=J.toString(),Z=new Bun.CryptoHasher("sha1");return Z.update($),Z.digest("hex")}async function i(J){let $=new Set;async function Z(Q,X){let K;try{K=await fJ(Q,{withFileTypes:!0})}catch{return}for(let W of K){if(W.name.startsWith("."))continue;if(X&&W.name==="assets")continue;let j=mJ(Q,W.name),O=W.isDirectory(),U=W.isFile();if(W.isSymbolicLink())try{let I=await n(j);O=I.isDirectory(),U=I.isFile()}catch{continue}if(U)$.add(j);else if(O&&!W.isSymbolicLink())await Z(j,!1)}}return await Z(J,!0),$}var uJ="public, max-age=31536000, must-revalidate",hJ="public, max-age=31536000, immutable";async function cJ(J,$,Z){if(Z.length===0||J.headers.has("Range"))return null;let Q=k(J.headers.get("Accept-Encoding"),Z);if(!Q)return null;let X=$+h[Q];try{let K=await n(X);return K.isFile()?{encoding:Q,path:X,size:K.size}:null}catch{return null}}async function a(J,$,Z={}){let Q=Bun.file($),X=Z.encodings??[],K={"Content-Type":Q.type||"application/octet-stream","Cache-Control":Z.immutable?hJ:uJ,"Accept-Ranges":"bytes"};if(X.length>0)K.Vary="Accept-Encoding";let W=await cJ(J,$,X);if(W){let U=Bun.file(W.path);return new Response(U.stream(),{headers:{...K,"Content-Encoding":W.encoding,"Content-Length":String(W.size),ETag:`${N(U.lastModified)}-${W.encoding}`}})}let j=Q.size;K.ETag=N(Q.lastModified);let O=p(J.headers.get("Range"));if(O){let U=d(O,j);if(!U)return o(j);return new Response(Q.slice(U.start,U.end+1).stream(),{status:206,headers:{...K,"Content-Range":l(U.start,U.end,j),"Content-Length":String(U.length)}})}return new Response(Q.stream(),{headers:{...K,"Content-Length":String(j)}})}import{stat as nJ}from"fs/promises";var F="app/client.tsx";function t(J,$=T){let Z=J[F]?.file;if(!Z)return;return{module:C(Z,$),preload:D(J,F,$)}}function D(J,$,Z=T){let Q=[],X=new Set,K=(W)=>{if(X.has(W))return;X.add(W);let j=J[W];if(!j?.file)return;Q.push(C(j.file,Z));for(let O of j.imports??[])K(O)};return K($),Q}function s(J,$=30000){let Z=JSON.stringify("gemi:chunk-reload"),Q=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(${Q});export {}`}var pJ=new RegExp(`^${r}/.+\\.m?js$`);function dJ(J){return pJ.test(J)}function e(J){if(dJ(J))return new Response(s(J),{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store"}});if(_(J))return new Response("Not found",{status:404});return}var lJ=`<!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 R(J,$,Z){if(!Z)console.error(J);else try{Z(J instanceof Error?J:Error(String(J),{cause:J}))}catch(Q){console.error(J),console.error(Q)}if(P($))return new Response(JSON.stringify({error:JJ("server_error","Internal Server Error",500)}),{status:500,headers:{"Content-Type":"application/json"}});return new Response(lJ,{status:500,headers:{"Content-Type":"text/html; charset=utf-8"}})}var oJ={kind:"none"};function $J(J){let $=(J??"").trim().toLowerCase();if($===""||$==="false"||$==="off"||$==="0")return oJ;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 ZJ(J,$,Z){if(Z.kind==="all"){if(!J.get("x-forwarded-for")&&$)J.set("x-forwarded-for",$);return}J.delete("x-real-ip");let Q=$;if(Z.kind==="hops"){let X=(J.get("x-forwarded-for")??"").split(",").map((W)=>W.trim()).filter(Boolean),K=X.length-Z.hops;Q=K>=0?X[K]:X[0]??$}if(Q)J.set("x-forwarded-for",Q);else J.delete("x-forwarded-for")}var M=QJ(),iJ=S(M,"app"),z=S(M,"dist"),L=S(z,"client");function aJ(J){let $;try{$=decodeURIComponent(J)}catch{return null}let Z=HJ(L,"."+$.replace("/assets/assets","/assets"));return Z.startsWith(L+KJ)?Z:null}async function tJ(J){try{return(await nJ(J)).isFile()}catch{return!1}}async function l2(J,$){let Z=await import(`${z}/client/.vite/manifest.json`),Q=await import(`${z}/server/.vite/manifest.json`),X=await XJ(`${z}/client`);process.env.ROOT_DIR=M,process.env.APP_DIR=iJ,process.env.DIST_DIR=z;let K={},W={},j={},O={},U={},I=(H,G)=>`"${H}": () => import("${G}")`,b=[];for(let H of["404",...J.getFlatComponentTree.call(J)]){let G=Q[`app/views/${H}.tsx`];if(!G?.file){console.log(`Server file not found for ${H}`),console.log(G);let x=Object.keys(Q),E=`app/views/${H}.tsx`;console.log(`${E} not found in server manifest`),console.log(x)}let Y=await import(`${process.env.DIST_DIR}/server/${G?.file}`);K[H]=Y.default,W[H]=Y.OpenGraph,j[H]=Y;let V=Z[`app/views/${H}.tsx`];if(V?.css&&V?.css.length>0)O[H]=V?.css;if(V)b.push(I(H,C(V?.file,X))),U[H]=D(Z,`app/views/${H}.tsx`,X)}let jJ=`{${b.join(",")}}`,y=t(Z,X);if(!y)console.error(`Client manifest has no "${F}" entry \u2014 dist/client is incomplete, so documents will render but never hydrate.`);let GJ=Z["app/client.tsx"]?.css??[],YJ=(await Promise.all(GJ.map((H)=>Bun.file(`${z}/client/${H}`).text()))).join(`
22
- `),UJ=await i(L),w=new Map;for(let[H,G]of Object.entries((await c(L))?.files??{})){let Y=HJ(L,H);if(Y.startsWith(L+KJ))w.set(Y,{immutable:!0,encodings:G})}async function VJ(H){let{pathname:G}=new URL(H.url);if(P(G))return await A(H,G);let Y=aJ(G);if(_(G)||G.startsWith("/.well-known")||Y!==null&&UJ.has(Y)){if(!Y||!await tJ(Y))return e(G)??await A(H,G);try{return await a(H,Y,w.get(Y))}catch(x){return J.onException?.(x),new Response("Not found",{status:404})}}return await A(H,G)}async function A(H,G){let Y=J.fetch.bind(J);try{let V=await Y(H);if(V instanceof Response)return V;else{let x=[];return x.push({content:YJ}),await V({getStyles:async(g)=>{if(!g)return q([]);for(let zJ of g){let LJ=Z[`app/views/${zJ}.tsx`];for(let f of LJ?.css??[]){let CJ=Bun.file(`${process.env.DIST_DIR}/client/${f}`);x.push({id:f,content:await CJ.text()})}}return q(x)},clientEntry:y,modulePreloadManifest:U,loaders:jJ,viewImportMap:K,viewModules:j,ogMap:W,cssManifest:O,assetBase:X})}}catch(V){return R(V,G,J.onException)}}let OJ=(process.env.GEMI_COMPRESSION??"auto").toLowerCase()!=="off",xJ=$J(process.env.GEMI_TRUST_PROXY),v=Bun.serve({maxRequestBodySize:10737418240,fetch:async(H,G)=>{ZJ(H.headers,G.requestIP(H)?.address??null,xJ);let Y=await $(H,(V)=>J.withGlobalMiddleware(V,VJ,(x)=>R(x,new URL(V.url).pathname,J.onException)));return OJ?m(H,Y):Y},idleTimeout:Number(process.env.SERVER_IDLE_TIMEOUT??10),port:process.env.PORT||5173});return WJ({port:v.port,rootDir:M}),v}export{l2 as httpProd};
23
-
24
- //# debugId=AD25CA6C252B7AF164756E2164756E21
@@ -1,5 +0,0 @@
1
- // @bun
2
- import{gc as o}from"./chunk-h4x7cba0.js";import{hc as i}from"./chunk-9hbwvcxn.js";import{$f as t}from"./chunk-5wt25tyd.js";import{Zg as r}from"./chunk-2q7m8a16.js";class n extends i{register(){this.app.singleton(r,()=>new r(t(o(),this.app.config.get("translation",{}))))}}
3
- export{n as Ya};
4
-
5
- //# debugId=D2573F37E02A472864756E2164756E21