gemi 0.109.0 → 0.110.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 (263) 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 +2 -2
  4. package/dist/app/index.js.map +1 -1
  5. package/dist/bin/gemi.js +485 -63
  6. package/dist/bin/gemi.js.map +12 -8
  7. package/dist/bun/plugin.js +2 -2
  8. package/dist/bun/plugin.js.map +1 -1
  9. package/dist/bun/preload.js +2 -2
  10. package/dist/bun/preload.js.map +1 -1
  11. package/dist/{chunk-hgz8sx40.js → chunk-09ypnhjv.js} +3 -3
  12. package/dist/{chunk-hgz8sx40.js.map → chunk-09ypnhjv.js.map} +1 -1
  13. package/dist/{chunk-qnq110tw.js → chunk-0d9qsmx2.js} +3 -3
  14. package/dist/{chunk-qnq110tw.js.map → chunk-0d9qsmx2.js.map} +1 -1
  15. package/dist/{chunk-m9609t1y.js → chunk-0sjh5v1n.js} +1 -1
  16. package/dist/{chunk-g5a3ptsa.js → chunk-11fsn5mr.js} +3 -3
  17. package/dist/{chunk-g5a3ptsa.js.map → chunk-11fsn5mr.js.map} +1 -1
  18. package/dist/{chunk-whe0x70j.js → chunk-1c1d0e60.js} +3 -3
  19. package/dist/{chunk-whe0x70j.js.map → chunk-1c1d0e60.js.map} +1 -1
  20. package/dist/{chunk-rgfzqwpg.js → chunk-1kr25rcg.js} +3 -3
  21. package/dist/{chunk-rgfzqwpg.js.map → chunk-1kr25rcg.js.map} +1 -1
  22. package/dist/{chunk-vee4j6ft.js → chunk-1pem26zc.js} +3 -3
  23. package/dist/{chunk-vee4j6ft.js.map → chunk-1pem26zc.js.map} +1 -1
  24. package/dist/{chunk-nxxx0m1a.js → chunk-1va15sfq.js} +2 -2
  25. package/dist/{chunk-nxxx0m1a.js.map → chunk-1va15sfq.js.map} +2 -2
  26. package/dist/{chunk-wvwee7dn.js → chunk-1yx2e0bh.js} +2 -2
  27. package/dist/{chunk-wvwee7dn.js.map → chunk-1yx2e0bh.js.map} +1 -1
  28. package/dist/{chunk-9r3znmqq.js → chunk-303mprnv.js} +2 -2
  29. package/dist/{chunk-9r3znmqq.js.map → chunk-303mprnv.js.map} +1 -1
  30. package/dist/{chunk-grs8dnkd.js → chunk-30xjcyzh.js} +2 -2
  31. package/dist/{chunk-grs8dnkd.js.map → chunk-30xjcyzh.js.map} +1 -1
  32. package/dist/{chunk-h15eae7g.js → chunk-358sdcx9.js} +3 -3
  33. package/dist/{chunk-h15eae7g.js.map → chunk-358sdcx9.js.map} +1 -1
  34. package/dist/{chunk-367kyrdx.js → chunk-3cg7y62b.js} +2 -2
  35. package/dist/{chunk-367kyrdx.js.map → chunk-3cg7y62b.js.map} +1 -1
  36. package/dist/{chunk-t26n9vzw.js → chunk-3y8q8x11.js} +2 -2
  37. package/dist/{chunk-t26n9vzw.js.map → chunk-3y8q8x11.js.map} +1 -1
  38. package/dist/chunk-4mfrgd5m.js +34 -0
  39. package/dist/chunk-4mfrgd5m.js.map +10 -0
  40. package/dist/chunk-5cygrbxv.js +4 -0
  41. package/dist/{chunk-9qw9fa6z.js.map → chunk-5cygrbxv.js.map} +2 -2
  42. package/dist/{chunk-tvy2fqza.js → chunk-5stgtwqw.js} +2 -2
  43. package/dist/{chunk-tvy2fqza.js.map → chunk-5stgtwqw.js.map} +1 -1
  44. package/dist/chunk-61f4m5px.js +6 -0
  45. package/dist/{chunk-fe1pcnw6.js.map → chunk-61f4m5px.js.map} +5 -4
  46. package/dist/chunk-6chz1ktz.js +9 -0
  47. package/dist/chunk-6chz1ktz.js.map +13 -0
  48. package/dist/{chunk-wqsdjweb.js → chunk-6vr7f5fq.js} +4 -4
  49. package/dist/{chunk-wqsdjweb.js.map → chunk-6vr7f5fq.js.map} +1 -1
  50. package/dist/{chunk-g74qwhvf.js → chunk-7tx5y712.js} +2 -2
  51. package/dist/{chunk-g74qwhvf.js.map → chunk-7tx5y712.js.map} +1 -1
  52. package/dist/{chunk-g7fr2cy2.js → chunk-8afxrmdc.js} +3 -3
  53. package/dist/{chunk-g7fr2cy2.js.map → chunk-8afxrmdc.js.map} +1 -1
  54. package/dist/{chunk-vwkdfngg.js → chunk-8b2tw2yp.js} +1 -1
  55. package/dist/{chunk-t3qw9syt.js → chunk-9rchedr4.js} +2 -2
  56. package/dist/{chunk-t3qw9syt.js.map → chunk-9rchedr4.js.map} +1 -1
  57. package/dist/{chunk-jm4jn28j.js → chunk-9s851qz8.js} +2 -2
  58. package/dist/{chunk-jm4jn28j.js.map → chunk-9s851qz8.js.map} +1 -1
  59. package/dist/{chunk-jc4j61xb.js → chunk-a6453d9s.js} +3 -3
  60. package/dist/{chunk-jc4j61xb.js.map → chunk-a6453d9s.js.map} +1 -1
  61. package/dist/{chunk-9m18pknp.js → chunk-bn5yn731.js} +2 -2
  62. package/dist/{chunk-9m18pknp.js.map → chunk-bn5yn731.js.map} +1 -1
  63. package/dist/{chunk-t85rca2p.js → chunk-c098fzvk.js} +2 -2
  64. package/dist/{chunk-t85rca2p.js.map → chunk-c098fzvk.js.map} +1 -1
  65. package/dist/{chunk-mp5krm14.js → chunk-cttmy1jp.js} +4 -4
  66. package/dist/{chunk-mp5krm14.js.map → chunk-cttmy1jp.js.map} +2 -2
  67. package/dist/{chunk-eyg88bgv.js → chunk-cy5qp6mz.js} +3 -3
  68. package/dist/{chunk-eyg88bgv.js.map → chunk-cy5qp6mz.js.map} +1 -1
  69. package/dist/{chunk-zys7kecf.js → chunk-ddr4qvvt.js} +3 -3
  70. package/dist/{chunk-zys7kecf.js.map → chunk-ddr4qvvt.js.map} +1 -1
  71. package/dist/chunk-e1n8zs3h.js +58 -0
  72. package/dist/chunk-e1n8zs3h.js.map +14 -0
  73. package/dist/{chunk-r9gzbjc5.js → chunk-et4pv1b1.js} +1 -1
  74. package/dist/{chunk-a1g0bahx.js → chunk-frerzsxq.js} +2 -2
  75. package/dist/{chunk-a1g0bahx.js.map → chunk-frerzsxq.js.map} +1 -1
  76. package/dist/{chunk-qz9aaw5x.js → chunk-gb37722w.js} +3 -3
  77. package/dist/{chunk-qz9aaw5x.js.map → chunk-gb37722w.js.map} +1 -1
  78. package/dist/chunk-h3864a8z.js +17 -0
  79. package/dist/{chunk-s5aa4hty.js.map → chunk-h3864a8z.js.map} +13 -12
  80. package/dist/{chunk-zhm3qvrc.js → chunk-h4sw6nt3.js} +3 -3
  81. package/dist/{chunk-zhm3qvrc.js.map → chunk-h4sw6nt3.js.map} +1 -1
  82. package/dist/{chunk-5d6eaxab.js → chunk-he7z7y9j.js} +2 -2
  83. package/dist/{chunk-5d6eaxab.js.map → chunk-he7z7y9j.js.map} +1 -1
  84. package/dist/{chunk-d2tngs73.js → chunk-hf7a51s3.js} +2 -2
  85. package/dist/{chunk-d2tngs73.js.map → chunk-hf7a51s3.js.map} +1 -1
  86. package/dist/chunk-hn67spz6.js +5 -0
  87. package/dist/{chunk-z9x8x3wq.js.map → chunk-hn67spz6.js.map} +1 -1
  88. package/dist/{chunk-f7jhkg8x.js → chunk-jbrwt3cs.js} +4 -4
  89. package/dist/{chunk-f7jhkg8x.js.map → chunk-jbrwt3cs.js.map} +1 -1
  90. package/dist/{chunk-k1ezptt8.js → chunk-k1vw22t2.js} +2 -2
  91. package/dist/{chunk-k1ezptt8.js.map → chunk-k1vw22t2.js.map} +1 -1
  92. package/dist/chunk-k1xt2tw7.js +4 -0
  93. package/dist/{chunk-rjcsdazt.js.map → chunk-k1xt2tw7.js.map} +2 -2
  94. package/dist/chunk-k9wgtrc5.js +24 -0
  95. package/dist/{chunk-w3j53r0a.js.map → chunk-k9wgtrc5.js.map} +4 -4
  96. package/dist/{chunk-7mc5e61r.js → chunk-kf71mjxa.js} +3 -3
  97. package/dist/{chunk-7mc5e61r.js.map → chunk-kf71mjxa.js.map} +1 -1
  98. package/dist/{chunk-vna85rdq.js → chunk-m6ystvtk.js} +2 -2
  99. package/dist/{chunk-vna85rdq.js.map → chunk-m6ystvtk.js.map} +1 -1
  100. package/dist/{chunk-qyyxzy04.js → chunk-mb7q7s0a.js} +3 -3
  101. package/dist/{chunk-qyyxzy04.js.map → chunk-mb7q7s0a.js.map} +1 -1
  102. package/dist/{chunk-sp2v357a.js → chunk-mn5xw79b.js} +3 -3
  103. package/dist/{chunk-sp2v357a.js.map → chunk-mn5xw79b.js.map} +1 -1
  104. package/dist/{chunk-q8k7f11z.js → chunk-mwqg079k.js} +2 -2
  105. package/dist/{chunk-q8k7f11z.js.map → chunk-mwqg079k.js.map} +1 -1
  106. package/dist/{chunk-ga533cpz.js → chunk-nncz308h.js} +3 -3
  107. package/dist/{chunk-ga533cpz.js.map → chunk-nncz308h.js.map} +1 -1
  108. package/dist/{chunk-hf32yq23.js → chunk-nsvktvp4.js} +2 -2
  109. package/dist/{chunk-hf32yq23.js.map → chunk-nsvktvp4.js.map} +1 -1
  110. package/dist/{chunk-3x86bhfn.js → chunk-nvv9wej6.js} +3 -3
  111. package/dist/{chunk-3x86bhfn.js.map → chunk-nvv9wej6.js.map} +1 -1
  112. package/dist/chunk-p1aqq0ga.js +16 -0
  113. package/dist/{chunk-d5sbnzng.js.map → chunk-p1aqq0ga.js.map} +5 -9
  114. package/dist/chunk-p7r2w4qw.js +5 -0
  115. package/dist/{chunk-ehasw3qm.js.map → chunk-p7r2w4qw.js.map} +2 -2
  116. package/dist/{chunk-zz7h6tdr.js → chunk-pwmgqq7z.js} +2 -2
  117. package/dist/{chunk-zz7h6tdr.js.map → chunk-pwmgqq7z.js.map} +1 -1
  118. package/dist/chunk-pyj7cd9t.js +4 -0
  119. package/dist/{chunk-gdsby5jh.js.map → chunk-pyj7cd9t.js.map} +2 -2
  120. package/dist/{chunk-h6g9g8qc.js → chunk-q9s7kwgt.js} +3 -3
  121. package/dist/{chunk-h6g9g8qc.js.map → chunk-q9s7kwgt.js.map} +1 -1
  122. package/dist/{chunk-9hbwvcxn.js → chunk-qd2v93y4.js} +2 -2
  123. package/dist/{chunk-9hbwvcxn.js.map → chunk-qd2v93y4.js.map} +1 -1
  124. package/dist/{chunk-tr9mxdth.js → chunk-rfcygmf5.js} +3 -3
  125. package/dist/{chunk-tr9mxdth.js.map → chunk-rfcygmf5.js.map} +1 -1
  126. package/dist/{chunk-vsnmdtrs.js → chunk-s6jjy4y9.js} +2 -2
  127. package/dist/{chunk-vsnmdtrs.js.map → chunk-s6jjy4y9.js.map} +1 -1
  128. package/dist/{chunk-6zekebzt.js → chunk-sq2wkynk.js} +2 -2
  129. package/dist/{chunk-6zekebzt.js.map → chunk-sq2wkynk.js.map} +1 -1
  130. package/dist/{chunk-52vsdnny.js → chunk-td8tha3j.js} +3 -3
  131. package/dist/{chunk-52vsdnny.js.map → chunk-td8tha3j.js.map} +1 -1
  132. package/dist/{chunk-t0bp8nrc.js → chunk-tk5q8hkv.js} +4 -4
  133. package/dist/{chunk-t0bp8nrc.js.map → chunk-tk5q8hkv.js.map} +2 -2
  134. package/dist/{chunk-dpy08xw4.js → chunk-tq85n8zh.js} +2 -2
  135. package/dist/{chunk-dpy08xw4.js.map → chunk-tq85n8zh.js.map} +1 -1
  136. package/dist/{chunk-wdpdqjr1.js → chunk-twnn7r66.js} +2 -2
  137. package/dist/{chunk-wdpdqjr1.js.map → chunk-twnn7r66.js.map} +1 -1
  138. package/dist/chunk-w7jsh3xd.js +5 -0
  139. package/dist/{chunk-1es50p4k.js.map → chunk-w7jsh3xd.js.map} +2 -2
  140. package/dist/{chunk-zh1t33nq.js → chunk-wsttx9rg.js} +2 -2
  141. package/dist/{chunk-zh1t33nq.js.map → chunk-wsttx9rg.js.map} +1 -1
  142. package/dist/{chunk-7ssjzp87.js → chunk-wvsv1jgg.js} +2 -2
  143. package/dist/{chunk-7ssjzp87.js.map → chunk-wvsv1jgg.js.map} +1 -1
  144. package/dist/chunk-x78jrs4y.js +4 -0
  145. package/dist/{chunk-y66ntxbg.js.map → chunk-x78jrs4y.js.map} +2 -2
  146. package/dist/chunk-xk930yaw.js +5 -0
  147. package/dist/{chunk-pa3khk46.js.map → chunk-xk930yaw.js.map} +2 -2
  148. package/dist/chunk-xkc7ftnq.js +9 -0
  149. package/dist/chunk-xkc7ftnq.js.map +10 -0
  150. package/dist/{chunk-564zfdd1.js → chunk-yer1r3t3.js} +2 -2
  151. package/dist/{chunk-564zfdd1.js.map → chunk-yer1r3t3.js.map} +1 -1
  152. package/dist/{chunk-c8dhvdrs.js → chunk-yqavgpwd.js} +3 -3
  153. package/dist/{chunk-c8dhvdrs.js.map → chunk-yqavgpwd.js.map} +1 -1
  154. package/dist/{chunk-hyfzw1fk.js → chunk-z10cas5r.js} +2 -2
  155. package/dist/{chunk-hyfzw1fk.js.map → chunk-z10cas5r.js.map} +1 -1
  156. package/dist/{chunk-jgtean4t.js → chunk-zhs1r1z0.js} +3 -3
  157. package/dist/{chunk-jgtean4t.js.map → chunk-zhs1r1z0.js.map} +1 -1
  158. package/dist/client/index.d.ts +1 -1
  159. package/dist/client/index.d.ts.map +1 -1
  160. package/dist/client/index.js +106 -52
  161. package/dist/client/index.js.map +1 -1
  162. package/dist/client/islands.d.ts +99 -56
  163. package/dist/client/islands.d.ts.map +1 -1
  164. package/dist/config/index.d.ts +8 -1
  165. package/dist/config/index.d.ts.map +1 -1
  166. package/dist/config/index.js +1 -1
  167. package/dist/config/index.js.map +2 -2
  168. package/dist/console/run.js +2 -2
  169. package/dist/console/run.js.map +1 -1
  170. package/dist/container/index.js +2 -2
  171. package/dist/container/index.js.map +1 -1
  172. package/dist/database/index.js +2 -2
  173. package/dist/database/index.js.map +1 -1
  174. package/dist/email/index.js +2 -2
  175. package/dist/email/index.js.map +1 -1
  176. package/dist/facades/Lang.d.ts +7 -1
  177. package/dist/facades/Lang.d.ts.map +1 -1
  178. package/dist/facades/index.js +2 -2
  179. package/dist/facades/index.js.map +1 -1
  180. package/dist/foundation/index.js +2 -2
  181. package/dist/foundation/index.js.map +1 -1
  182. package/dist/http/CorsMiddleware.d.ts +13 -0
  183. package/dist/http/CorsMiddleware.d.ts.map +1 -1
  184. package/dist/http/Middleware.d.ts +11 -0
  185. package/dist/http/Middleware.d.ts.map +1 -1
  186. package/dist/http/ViewRouter.d.ts +29 -0
  187. package/dist/http/ViewRouter.d.ts.map +1 -1
  188. package/dist/http/index.js +2 -2
  189. package/dist/http/index.js.map +1 -1
  190. package/dist/i18n/dictionaryRuntime.js +2 -2
  191. package/dist/i18n/dictionaryRuntime.js.map +1 -1
  192. package/dist/i18n/index.js +2 -2
  193. package/dist/i18n/index.js.map +1 -1
  194. package/dist/internal/islandRuntime.d.ts +45 -0
  195. package/dist/internal/islandRuntime.d.ts.map +1 -0
  196. package/dist/kernel/index.js +2 -2
  197. package/dist/kernel/index.js.map +1 -1
  198. package/dist/orm/context.d.ts +24 -0
  199. package/dist/orm/context.d.ts.map +1 -1
  200. package/dist/orm/index.d.ts +1 -1
  201. package/dist/orm/index.d.ts.map +1 -1
  202. package/dist/orm/index.js +3 -3
  203. package/dist/orm/index.js.map +2 -2
  204. package/dist/server/devFetch.d.ts.map +1 -1
  205. package/dist/server/httpDev.d.ts.map +1 -1
  206. package/dist/server/httpProd.d.ts.map +1 -1
  207. package/dist/server/idleTimeout.d.ts +24 -0
  208. package/dist/server/idleTimeout.d.ts.map +1 -0
  209. package/dist/server/index.js +2 -2
  210. package/dist/server/index.js.map +1 -1
  211. package/dist/server/modulePreloads.d.ts +7 -6
  212. package/dist/server/modulePreloads.d.ts.map +1 -1
  213. package/dist/services/index.js +2 -2
  214. package/dist/services/index.js.map +1 -1
  215. package/dist/services/middleware/MiddlewareRegistry.d.ts +13 -2
  216. package/dist/services/middleware/MiddlewareRegistry.d.ts.map +1 -1
  217. package/dist/services/queue/work.js +2 -2
  218. package/dist/services/queue/work.js.map +1 -1
  219. package/dist/services/router/DomainRouter.d.ts +10 -0
  220. package/dist/services/router/DomainRouter.d.ts.map +1 -1
  221. package/dist/services/router/ViewRouteDispatcher.d.ts +3 -1
  222. package/dist/services/router/ViewRouteDispatcher.d.ts.map +1 -1
  223. package/dist/services/router/staticCache.d.ts +23 -0
  224. package/dist/services/router/staticCache.d.ts.map +1 -0
  225. package/dist/services/router/staticDocument.d.ts +39 -17
  226. package/dist/services/router/staticDocument.d.ts.map +1 -1
  227. package/dist/stats/bundleStats.d.ts +104 -0
  228. package/dist/stats/bundleStats.d.ts.map +1 -0
  229. package/dist/stats/route-table.d.ts +2 -0
  230. package/dist/stats/route-table.d.ts.map +1 -0
  231. package/dist/stats/route-table.js +4 -0
  232. package/dist/stats/route-table.js.map +11 -0
  233. package/dist/stats/routeTable.d.ts +25 -0
  234. package/dist/stats/routeTable.d.ts.map +1 -0
  235. package/dist/stats/run.d.ts +43 -0
  236. package/dist/stats/run.d.ts.map +1 -0
  237. package/dist/support/index.js +2 -2
  238. package/dist/support/index.js.map +1 -1
  239. package/dist/vite/index.mjs +125 -23
  240. package/dist/vitest/index.d.ts +18 -0
  241. package/dist/vitest/index.d.ts.map +1 -1
  242. package/dist/vitest/index.js +2 -2
  243. package/dist/vitest/index.js.map +3 -3
  244. package/package.json +2 -1
  245. package/dist/chunk-1es50p4k.js +0 -5
  246. package/dist/chunk-9qw9fa6z.js +0 -4
  247. package/dist/chunk-d5sbnzng.js +0 -18
  248. package/dist/chunk-ehasw3qm.js +0 -5
  249. package/dist/chunk-fe1pcnw6.js +0 -6
  250. package/dist/chunk-fj6yftm7.js +0 -58
  251. package/dist/chunk-fj6yftm7.js.map +0 -14
  252. package/dist/chunk-gdsby5jh.js +0 -4
  253. package/dist/chunk-ngw4xzrt.js +0 -9
  254. package/dist/chunk-ngw4xzrt.js.map +0 -10
  255. package/dist/chunk-pa3khk46.js +0 -5
  256. package/dist/chunk-rjcsdazt.js +0 -4
  257. package/dist/chunk-s5aa4hty.js +0 -17
  258. package/dist/chunk-w3j53r0a.js +0 -24
  259. package/dist/chunk-y66ntxbg.js +0 -4
  260. package/dist/chunk-z9x8x3wq.js +0 -5
  261. /package/dist/{chunk-m9609t1y.js.map → chunk-0sjh5v1n.js.map} +0 -0
  262. /package/dist/{chunk-vwkdfngg.js.map → chunk-8b2tw2yp.js.map} +0 -0
  263. /package/dist/{chunk-r9gzbjc5.js.map → chunk-et4pv1b1.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import { A as useLocation, B as QueryManagerProvider, C as useRoute, D as I18nProvider, E as I18nContext, G as retryDelayFor, H as pickDefined, I as toVariantKey, J as Subject, K as shouldRetryQuery, L as applyParams$1, M as isAbsoluteUrl, O as ServerDataContext, P as Action, R as QueryConfigContext, S as routeDataUrl, T as useNavigate, U as DEFAULT_STALE_TIME, V as USER_QUERY_CONFIG_KEYS, W as isRetryableQueryError, _ as loadDictionary, a as useRouteTransition, b as setActiveLocale, c as ComponentsContext, d as loadViewModule, f as subscribeViewModules, g as recoverFromChunkLoadError, h as isChunkLoadError, i as RouteTransitionProvider, j as domainUrl, k as ServerDataProvider, l as ComponentsProvider, m as configureChunkLoadRecovery, n as useTheme, o as ClientRouterContext, p as CHUNK_RELOAD_MARKER, q as QueryError, r as m, s as ClientRouterProvider, t as ThemeProvider, u as initialViewModulesReady, v as loadDictionaryForRender, w as useSearchParams, x as readRoutePayload, y as registerDictionary, z as QueryManagerContext } from "../chunks/ThemeProvider-BgLyzzOL.js";
2
2
  import { n as RouteStateContext, r as RouteStateProvider, t as useParams } from "../chunks/useParams-BN3XXfmG.js";
3
- import { Fragment, StrictMode, Suspense, createContext, createElement, isValidElement, memo, use, useCallback, useContext, useDeferredValue, useEffect, useMemo, useRef, useState, useSyncExternalStore, useTransition } from "react";
3
+ import { Fragment, StrictMode, Suspense, createContext, createElement, isValidElement, lazy, memo, use, useCallback, useContext, useDeferredValue, useEffect, useMemo, useRef, useState, useSyncExternalStore, useTransition } from "react";
4
4
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
5
5
  import { createRoot as createRoot$1, hydrateRoot } from "react-dom/client";
6
6
  //#region client/ServerQueryContext.tsx
@@ -2645,71 +2645,125 @@ function useAppIdMissmatch() {
2645
2645
  }
2646
2646
  //#endregion
2647
2647
  //#region client/islands.tsx
2648
+ /** @internal The element an island's static children land in. */
2649
+ var ISLAND_SLOT_TAG = "gemi-slot";
2650
+ /** @internal On the empty slot an island's own render leaves for its children. */
2651
+ var ISLAND_SLOT_ATTRIBUTE = "data-slot";
2652
+ /** @internal On the template holding the children the page tree rendered. */
2653
+ var ISLAND_SLOT_TEMPLATE_ATTRIBUTE = "data-gemi-slot";
2648
2654
  /** The property gemi's Vite plugin attaches to an island's loader. */
2649
2655
  var ISLAND_MODULE_KEY = "gemiIsland";
2650
2656
  var CONTEXT_KEY = Symbol.for("gemi.staticRender");
2651
2657
  /**
2652
- * @internal Provided by the view router around a static view's render; `null`
2653
- * everywhere else, which is how `island()` knows to render a plain component.
2654
- *
2655
- * On `globalThis` rather than a module-level `createContext`: the published
2656
- * package bundles `gemi/client` and the server side separately, so a plain
2657
- * module singleton would give the provider and the islands two different
2658
+ * @internal On `globalThis` rather than a module-level `createContext`: the
2659
+ * published package bundles `gemi/client` and the server side separately, so a
2660
+ * plain module singleton would give the provider and the islands two different
2658
2661
  * context objects.
2659
2662
  */
2660
2663
  var StaticRenderContext = globalThis[CONTEXT_KEY] ??= createContext(null);
2661
- function serialiseProps(props, option) {
2662
- if (!option) return;
2663
- let value;
2664
- if (option === true) {
2665
- const { children: _children, ...rest } = props ?? {};
2666
- value = rest;
2667
- } else value = option(props);
2668
- return JSON.stringify(value);
2669
- }
2664
+ var isProduction = () => typeof process !== "undefined" && process.env.NODE_ENV === "production";
2670
2665
  /**
2671
- * Declares an interactive part of a page.
2672
- *
2673
- * ```tsx
2674
- * export const NavMenu = island("nav-menu", NavMenuView, () => import("./navMenu.island"));
2675
- * ```
2676
- *
2677
- * - In a **static** view (`this.view(...).static()`), it server-renders
2678
- * `Component` inside a `<gemi-island name="nav-menu">` marker and records
2679
- * that the page uses it. The document then carries a tiny loader plus the
2680
- * island's own module — and only for islands that rendered. The module's
2681
- * default export (`IslandMount`) is called once per marker.
2682
- * - In a **hydrated** view, it renders `Component` as an ordinary component and
2683
- * loads nothing: the same component works in both kinds of page.
2684
- *
2685
- * The client module must be a file named `*.island.ts` (or `.tsx`/`.js`)
2686
- * under `app/`, imported exactly as `() => import("./path.island")`: gemi's
2687
- * Vite plugin finds that call, builds the file as its own entry, and tells the
2688
- * server which built file it is.
2689
- *
2690
- * `name` identifies the island in the markup and must be unique per module.
2666
+ * Throws when `value` would not survive `JSON.stringify` and `JSON.parse`
2667
+ * unchanged, naming the prop. An island's props cross from the server to the
2668
+ * browser as JSON: a function would vanish and a `Date` would arrive as a
2669
+ * string, so the island would hydrate with other props than it rendered with.
2691
2670
  */
2692
- function island(name, Component, loader, options = {}) {
2693
- if (typeof name !== "string" || name.length === 0) throw new Error("island(): the name must be a non-empty string.");
2671
+ function assertSerialisableProps(value, island) {
2672
+ const seen = /* @__PURE__ */ new Set();
2673
+ const fail = (path, what) => {
2674
+ throw new Error(`${island}: the prop \`${path}\` is ${what}. An island's props are sent to the browser as JSON, so they must be plain data: strings, finite numbers, booleans, null, arrays and plain objects. Pass static markup as children instead.`);
2675
+ };
2676
+ const walk = (v, path, inArray) => {
2677
+ switch (typeof v) {
2678
+ case "string":
2679
+ case "boolean": return;
2680
+ case "number":
2681
+ if (!Number.isFinite(v)) fail(path, String(v));
2682
+ return;
2683
+ case "undefined":
2684
+ if (inArray) fail(path, "undefined (it would arrive as null)");
2685
+ return;
2686
+ case "function":
2687
+ fail(path, "a function");
2688
+ return;
2689
+ case "symbol":
2690
+ case "bigint":
2691
+ fail(path, `a ${typeof v}`);
2692
+ return;
2693
+ }
2694
+ if (v === null) return;
2695
+ const object = v;
2696
+ if (seen.has(object)) fail(path, "a circular reference");
2697
+ if ("$$typeof" in object) fail(path, "a React element");
2698
+ seen.add(object);
2699
+ if (Array.isArray(object)) object.forEach((item, i) => walk(item, `${path}[${i}]`, true));
2700
+ else {
2701
+ const proto = Object.getPrototypeOf(object);
2702
+ if (proto !== Object.prototype && proto !== null) fail(path, `an instance of ${proto?.constructor?.name || "a class"}`);
2703
+ for (const [key, item] of Object.entries(object)) walk(item, path ? `${path}.${key}` : key, false);
2704
+ }
2705
+ seen.delete(object);
2706
+ };
2707
+ walk(value, "", false);
2708
+ }
2709
+ var hasChildren = (children) => children !== void 0 && children !== null && typeof children !== "boolean";
2710
+ function island(loader, options = {}) {
2711
+ if (typeof loader !== "function") throw new Error("island() takes `() => import(\"./Component\")` and options since gemi 0.110. The island(\"name\", Component, () => import(\"./x.island\")) form was removed: see UPGRADE.md.");
2712
+ const exportName = options.export ?? "default";
2694
2713
  const load = options.load ?? "eager";
2714
+ const key = loader[ISLAND_MODULE_KEY];
2715
+ const label = `island(${key ?? "() => import(…)"}${exportName === "default" ? "" : `#${exportName}`})`;
2716
+ const pick = (mod) => {
2717
+ const component = mod?.[exportName];
2718
+ if (typeof component !== "function" && (typeof component !== "object" || component === null)) throw new Error(`${label}: the module has no component export \`${exportName}\`.`);
2719
+ return component;
2720
+ };
2721
+ let inline;
2722
+ const inlineComponent = () => inline ??= loader.gemiModule ? pick(loader.gemiModule) : lazy(() => loader().then((mod) => ({ default: pick(mod) })));
2723
+ const register = (collector) => {
2724
+ const known = collector.islands.findIndex((entry) => key !== void 0 && entry.module === key && entry.export === exportName && entry.load === load);
2725
+ return known !== -1 ? known : collector.islands.push({
2726
+ module: key,
2727
+ export: exportName,
2728
+ load
2729
+ }) - 1;
2730
+ };
2731
+ const start = (collector, props) => {
2732
+ const { children, ...rest } = props;
2733
+ if (!isProduction()) assertSerialisableProps(rest, label);
2734
+ const uid = `i${collector.count++}-`;
2735
+ const html = (loader.gemiModule ? Promise.resolve(pick(loader.gemiModule)) : loader().then(pick)).then((Component) => collector.render(createElement(StaticRenderContext.Provider, { value: null }, hasChildren(children) ? createElement(Component, rest, createElement(ISLAND_SLOT_TAG, {
2736
+ [ISLAND_SLOT_ATTRIBUTE]: uid,
2737
+ style: { display: "contents" }
2738
+ })) : createElement(Component, rest)), uid));
2739
+ html.catch(() => {});
2740
+ const json = JSON.stringify(rest);
2741
+ return {
2742
+ html,
2743
+ index: register(collector),
2744
+ uid,
2745
+ props: json === "{}" ? void 0 : json
2746
+ };
2747
+ };
2695
2748
  function Island(props) {
2696
2749
  const collector = useContext(StaticRenderContext);
2697
- if (!collector) return createElement(Component, props);
2698
- const module = loader[ISLAND_MODULE_KEY];
2699
- if (typeof module !== "string") throw new Error(`island("${name}"): the client module could not be identified. Pass the loader as \`() => import("./name.island")\` — a file named *.island.ts(x) under app/ — so gemi's Vite plugin can map it to its built file.`);
2700
- const known = collector.islands.get(name);
2701
- if (known && known.module !== module) throw new Error(`island("${name}") is declared for two modules (${known.module} and ${module}). Island names must be unique.`);
2702
- collector.islands.set(name, {
2703
- module,
2704
- load
2750
+ if (!collector) return createElement(inlineComponent(), props);
2751
+ let instance = collector.instances.get(props);
2752
+ if (!instance) {
2753
+ instance = start(collector, props);
2754
+ collector.instances.set(props, instance);
2755
+ }
2756
+ const marker = createElement("gemi-island", {
2757
+ "data-island": instance.index,
2758
+ "data-uid": instance.uid,
2759
+ "data-props": instance.props,
2760
+ style: { display: "contents" },
2761
+ dangerouslySetInnerHTML: { __html: use(instance.html) }
2705
2762
  });
2706
- return createElement("gemi-island", {
2707
- name,
2708
- "data-props": serialiseProps(props, options.props),
2709
- style: { display: "contents" }
2710
- }, createElement(Component, props));
2763
+ if (!hasChildren(props.children)) return marker;
2764
+ return createElement(Fragment, null, marker, createElement("template", { [ISLAND_SLOT_TEMPLATE_ATTRIBUTE]: instance.uid }, props.children));
2711
2765
  }
2712
- Island.displayName = `Island(${name})`;
2766
+ Island.displayName = label;
2713
2767
  return Island;
2714
2768
  }
2715
2769
  //#endregion