gemi 0.57.0 → 0.58.1

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 (228) hide show
  1. package/dist/app/index.js +1 -1
  2. package/dist/broadcasting/index.js +1 -1
  3. package/dist/bun/plugin.js +1 -1
  4. package/dist/bun/preload.js +1 -1
  5. package/dist/{chunk-swe2b6rv.js → chunk-01e3gk86.js} +1 -1
  6. package/dist/{chunk-msyqr4y7.js → chunk-0a2xgcj3.js} +2 -2
  7. package/dist/{chunk-msyqr4y7.js.map → chunk-0a2xgcj3.js.map} +1 -1
  8. package/dist/{chunk-64bq12j3.js → chunk-3337e5g0.js} +2 -2
  9. package/dist/{chunk-64bq12j3.js.map → chunk-3337e5g0.js.map} +1 -1
  10. package/dist/{chunk-f233yzxf.js → chunk-3g5bjvdf.js} +2 -2
  11. package/dist/{chunk-f233yzxf.js.map → chunk-3g5bjvdf.js.map} +1 -1
  12. package/dist/{chunk-rc2asvyf.js → chunk-3xadx444.js} +2 -2
  13. package/dist/{chunk-rc2asvyf.js.map → chunk-3xadx444.js.map} +1 -1
  14. package/dist/{chunk-7pn0bnsc.js → chunk-3zxwscmf.js} +2 -2
  15. package/dist/{chunk-4f69ygc8.js.map → chunk-3zxwscmf.js.map} +1 -1
  16. package/dist/{chunk-jzatvtjd.js → chunk-437085pe.js} +2 -2
  17. package/dist/{chunk-jzatvtjd.js.map → chunk-437085pe.js.map} +1 -1
  18. package/dist/{chunk-5fmbsy4q.js → chunk-4sz6pwtn.js} +2 -2
  19. package/dist/{chunk-5fmbsy4q.js.map → chunk-4sz6pwtn.js.map} +1 -1
  20. package/dist/{chunk-17m5wxv0.js → chunk-4yt5x8s2.js} +2 -2
  21. package/dist/{chunk-17m5wxv0.js.map → chunk-4yt5x8s2.js.map} +1 -1
  22. package/dist/{chunk-dxxak51x.js → chunk-5athahgr.js} +2 -2
  23. package/dist/{chunk-dxxak51x.js.map → chunk-5athahgr.js.map} +1 -1
  24. package/dist/{chunk-dcwjwfjc.js → chunk-5n2rvfh3.js} +2 -2
  25. package/dist/{chunk-dcwjwfjc.js.map → chunk-5n2rvfh3.js.map} +1 -1
  26. package/dist/{chunk-r8637cqv.js → chunk-6235kb30.js} +3 -3
  27. package/dist/{chunk-r8637cqv.js.map → chunk-6235kb30.js.map} +1 -1
  28. package/dist/{chunk-67zyjx0c.js → chunk-7b0x860b.js} +2 -2
  29. package/dist/{chunk-67zyjx0c.js.map → chunk-7b0x860b.js.map} +1 -1
  30. package/dist/{chunk-q8k3gh8k.js → chunk-7ef5n8k2.js} +2 -2
  31. package/dist/{chunk-q8k3gh8k.js.map → chunk-7ef5n8k2.js.map} +1 -1
  32. package/dist/{chunk-n2zmg475.js → chunk-7j6wbv12.js} +2 -2
  33. package/dist/{chunk-n2zmg475.js.map → chunk-7j6wbv12.js.map} +1 -1
  34. package/dist/{chunk-g5pj95dz.js → chunk-86jebsm4.js} +3 -3
  35. package/dist/{chunk-g5pj95dz.js.map → chunk-86jebsm4.js.map} +1 -1
  36. package/dist/chunk-87qab82w.js +5 -0
  37. package/dist/{chunk-9j9wqrb2.js.map → chunk-87qab82w.js.map} +7 -3
  38. package/dist/{chunk-74aj8ms2.js → chunk-9m2tbf3n.js} +2 -2
  39. package/dist/{chunk-74aj8ms2.js.map → chunk-9m2tbf3n.js.map} +1 -1
  40. package/dist/{chunk-bw8kt7ps.js → chunk-a2sgjpvq.js} +2 -2
  41. package/dist/{chunk-bw8kt7ps.js.map → chunk-a2sgjpvq.js.map} +1 -1
  42. package/dist/chunk-b35e128b.js +5 -0
  43. package/dist/{chunk-r9as9htn.js.map → chunk-b35e128b.js.map} +1 -1
  44. package/dist/{chunk-1esnvq2z.js → chunk-cyaz97p5.js} +2 -2
  45. package/dist/{chunk-1esnvq2z.js.map → chunk-cyaz97p5.js.map} +1 -1
  46. package/dist/{chunk-mqwrmbh4.js → chunk-d125j8t0.js} +3 -3
  47. package/dist/{chunk-mqwrmbh4.js.map → chunk-d125j8t0.js.map} +1 -1
  48. package/dist/{chunk-yhzb9qpk.js → chunk-dgsgjg53.js} +2 -2
  49. package/dist/{chunk-yhzb9qpk.js.map → chunk-dgsgjg53.js.map} +1 -1
  50. package/dist/{chunk-6c14bexh.js → chunk-eejmhtnc.js} +2 -2
  51. package/dist/{chunk-6c14bexh.js.map → chunk-eejmhtnc.js.map} +1 -1
  52. package/dist/{chunk-vdzb29p5.js → chunk-fjm4y8bn.js} +2 -2
  53. package/dist/{chunk-vdzb29p5.js.map → chunk-fjm4y8bn.js.map} +1 -1
  54. package/dist/{chunk-ma5rj4st.js → chunk-grdahng8.js} +2 -2
  55. package/dist/{chunk-ma5rj4st.js.map → chunk-grdahng8.js.map} +1 -1
  56. package/dist/{chunk-5txddtaa.js → chunk-gw6agevz.js} +3 -3
  57. package/dist/{chunk-5txddtaa.js.map → chunk-gw6agevz.js.map} +1 -1
  58. package/dist/{chunk-ba0rkpk5.js → chunk-hppagzz4.js} +4 -4
  59. package/dist/{chunk-ba0rkpk5.js.map → chunk-hppagzz4.js.map} +1 -1
  60. package/dist/chunk-hwa5sqw5.js +19 -0
  61. package/dist/{chunk-r9h6aj7g.js.map → chunk-hwa5sqw5.js.map} +12 -6
  62. package/dist/chunk-hxf1re93.js +4 -0
  63. package/dist/{chunk-6fc909z5.js.map → chunk-hxf1re93.js.map} +6 -5
  64. package/dist/{chunk-d6kgxmp7.js → chunk-j0c6ytkj.js} +3 -3
  65. package/dist/{chunk-d6kgxmp7.js.map → chunk-j0c6ytkj.js.map} +1 -1
  66. package/dist/{chunk-4f69ygc8.js → chunk-jhkjz9jr.js} +2 -2
  67. package/dist/{chunk-7pn0bnsc.js.map → chunk-jhkjz9jr.js.map} +1 -1
  68. package/dist/{chunk-e9zz0zfv.js → chunk-k0fvsyeh.js} +1 -1
  69. package/dist/{chunk-j21tm6jf.js → chunk-keehyx51.js} +2 -2
  70. package/dist/{chunk-j21tm6jf.js.map → chunk-keehyx51.js.map} +1 -1
  71. package/dist/{chunk-a70s8pz4.js → chunk-m3xy5xyf.js} +2 -2
  72. package/dist/{chunk-a70s8pz4.js.map → chunk-m3xy5xyf.js.map} +1 -1
  73. package/dist/{chunk-qkrba9c2.js → chunk-mwpdp09e.js} +2 -2
  74. package/dist/{chunk-qkrba9c2.js.map → chunk-mwpdp09e.js.map} +1 -1
  75. package/dist/{chunk-tzsnadg1.js → chunk-pmhd6zfc.js} +3 -3
  76. package/dist/{chunk-tzsnadg1.js.map → chunk-pmhd6zfc.js.map} +1 -1
  77. package/dist/chunk-qb5mv6pj.js +5 -0
  78. package/dist/chunk-qb5mv6pj.js.map +12 -0
  79. package/dist/{chunk-nqk3cx97.js → chunk-qgxr0g36.js} +2 -2
  80. package/dist/{chunk-nqk3cx97.js.map → chunk-qgxr0g36.js.map} +1 -1
  81. package/dist/{chunk-btr9kyqh.js → chunk-sy7jbdeb.js} +2 -2
  82. package/dist/{chunk-btr9kyqh.js.map → chunk-sy7jbdeb.js.map} +1 -1
  83. package/dist/{chunk-5z5xskg1.js → chunk-szss069z.js} +2 -2
  84. package/dist/{chunk-5z5xskg1.js.map → chunk-szss069z.js.map} +1 -1
  85. package/dist/{chunk-rxsmwbxv.js → chunk-tss5svjr.js} +2 -2
  86. package/dist/{chunk-rxsmwbxv.js.map → chunk-tss5svjr.js.map} +1 -1
  87. package/dist/{chunk-dwz0wbhj.js → chunk-vj6f2bmb.js} +2 -2
  88. package/dist/{chunk-dwz0wbhj.js.map → chunk-vj6f2bmb.js.map} +1 -1
  89. package/dist/{chunk-32d510cd.js → chunk-vr90r27j.js} +2 -2
  90. package/dist/{chunk-32d510cd.js.map → chunk-vr90r27j.js.map} +1 -1
  91. package/dist/{chunk-jny4f23c.js → chunk-w62m5f0n.js} +3 -3
  92. package/dist/{chunk-jny4f23c.js.map → chunk-w62m5f0n.js.map} +1 -1
  93. package/dist/{chunk-k5bjfhz8.js → chunk-w7rf99w6.js} +2 -2
  94. package/dist/{chunk-k5bjfhz8.js.map → chunk-w7rf99w6.js.map} +1 -1
  95. package/dist/{chunk-fck5yw2s.js → chunk-wbrj0gya.js} +2 -2
  96. package/dist/{chunk-fck5yw2s.js.map → chunk-wbrj0gya.js.map} +1 -1
  97. package/dist/{chunk-11dkjm1r.js → chunk-xdv1b8mr.js} +2 -2
  98. package/dist/{chunk-11dkjm1r.js.map → chunk-xdv1b8mr.js.map} +1 -1
  99. package/dist/{chunk-katt90qz.js → chunk-xey9cbap.js} +2 -2
  100. package/dist/{chunk-katt90qz.js.map → chunk-xey9cbap.js.map} +1 -1
  101. package/dist/{chunk-ae6xz52s.js → chunk-xzk827r3.js} +2 -2
  102. package/dist/{chunk-ae6xz52s.js.map → chunk-xzk827r3.js.map} +1 -1
  103. package/dist/{chunk-8v81dvje.js → chunk-y6a8r2bn.js} +3 -3
  104. package/dist/{chunk-8v81dvje.js.map → chunk-y6a8r2bn.js.map} +1 -1
  105. package/dist/{chunk-nkbreczg.js → chunk-yed5whgs.js} +3 -3
  106. package/dist/{chunk-nkbreczg.js.map → chunk-yed5whgs.js.map} +1 -1
  107. package/dist/{chunk-cecq6q1b.js → chunk-yf7vz71n.js} +1 -1
  108. package/dist/{chunk-knvxwrwh.js → chunk-yjzs247s.js} +2 -2
  109. package/dist/{chunk-knvxwrwh.js.map → chunk-yjzs247s.js.map} +1 -1
  110. package/dist/{chunk-ka4tdhm8.js → chunk-yy0eb9wn.js} +2 -2
  111. package/dist/{chunk-ka4tdhm8.js.map → chunk-yy0eb9wn.js.map} +1 -1
  112. package/dist/{chunk-1nqdzmvm.js → chunk-zbxgbr12.js} +2 -2
  113. package/dist/{chunk-1nqdzmvm.js.map → chunk-zbxgbr12.js.map} +1 -1
  114. package/dist/{chunk-wrypq618.js → chunk-zh2egcyb.js} +2 -2
  115. package/dist/{chunk-wrypq618.js.map → chunk-zh2egcyb.js.map} +1 -1
  116. package/dist/chunks/{ThemeProvider-li1J_igh.js → ThemeProvider-ByU4BQdL.js} +68 -2
  117. package/dist/chunks/ThemeProvider-ByU4BQdL.js.map +1 -0
  118. package/dist/client/ClientRouter.d.ts.map +1 -1
  119. package/dist/client/ComponentContext.d.ts +46 -0
  120. package/dist/client/ComponentContext.d.ts.map +1 -1
  121. package/dist/client/ProgressManager.d.ts +1 -1
  122. package/dist/client/RouteStateContext.d.ts +9 -0
  123. package/dist/client/RouteStateContext.d.ts.map +1 -1
  124. package/dist/client/ServerDataProvider.d.ts +7 -0
  125. package/dist/client/ServerDataProvider.d.ts.map +1 -1
  126. package/dist/client/index.d.ts +2 -1
  127. package/dist/client/index.d.ts.map +1 -1
  128. package/dist/client/index.js +77 -12
  129. package/dist/client/index.js.map +1 -1
  130. package/dist/client/init.d.ts.map +1 -1
  131. package/dist/client/rpc.d.ts +42 -0
  132. package/dist/client/rpc.d.ts.map +1 -1
  133. package/dist/client/useFeature.d.ts +40 -0
  134. package/dist/client/useFeature.d.ts.map +1 -0
  135. package/dist/config/index.js +1 -1
  136. package/dist/console/run.js +2 -2
  137. package/dist/console/run.js.map +1 -1
  138. package/dist/container/index.js +2 -2
  139. package/dist/container/index.js.map +1 -1
  140. package/dist/database/index.js +2 -2
  141. package/dist/database/index.js.map +1 -1
  142. package/dist/email/index.js +2 -2
  143. package/dist/email/index.js.map +1 -1
  144. package/dist/facades/Features.d.ts +57 -0
  145. package/dist/facades/Features.d.ts.map +1 -0
  146. package/dist/facades/index.d.ts +1 -0
  147. package/dist/facades/index.d.ts.map +1 -1
  148. package/dist/facades/index.js +2 -2
  149. package/dist/facades/index.js.map +1 -1
  150. package/dist/foundation/index.js +2 -2
  151. package/dist/foundation/index.js.map +1 -1
  152. package/dist/gemi.d.ts +13 -5
  153. package/dist/http/ApiRouter.d.ts +3 -2
  154. package/dist/http/ApiRouter.d.ts.map +1 -1
  155. package/dist/http/HttpRequest.d.ts +4 -0
  156. package/dist/http/HttpRequest.d.ts.map +1 -1
  157. package/dist/http/ViewRouter.d.ts +127 -4
  158. package/dist/http/ViewRouter.d.ts.map +1 -1
  159. package/dist/http/index.d.ts +1 -0
  160. package/dist/http/index.d.ts.map +1 -1
  161. package/dist/http/index.js +2 -2
  162. package/dist/http/index.js.map +1 -1
  163. package/dist/http/middlewareList.d.ts +25 -0
  164. package/dist/http/middlewareList.d.ts.map +1 -0
  165. package/dist/http/requestContext.d.ts +57 -0
  166. package/dist/http/requestContext.d.ts.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 +3 -3
  172. package/dist/kernel/index.js.map +3 -3
  173. package/dist/kernel/providers.d.ts +2 -2
  174. package/dist/kernel/providers.d.ts.map +1 -1
  175. package/dist/orm/index.js +2 -2
  176. package/dist/orm/index.js.map +1 -1
  177. package/dist/server/index.js +2 -2
  178. package/dist/server/index.js.map +1 -1
  179. package/dist/services/features/FeatureFlagStore.d.ts +60 -0
  180. package/dist/services/features/FeatureFlagStore.d.ts.map +1 -0
  181. package/dist/services/features/FeatureManager.d.ts +82 -0
  182. package/dist/services/features/FeatureManager.d.ts.map +1 -0
  183. package/dist/services/features/FeaturesServiceProvider.d.ts +6 -0
  184. package/dist/services/features/FeaturesServiceProvider.d.ts.map +1 -0
  185. package/dist/services/features/bucket.d.ts +57 -0
  186. package/dist/services/features/bucket.d.ts.map +1 -0
  187. package/dist/services/features/config.d.ts +57 -0
  188. package/dist/services/features/config.d.ts.map +1 -0
  189. package/dist/services/features/context.d.ts +31 -0
  190. package/dist/services/features/context.d.ts.map +1 -0
  191. package/dist/services/features/defineFeature.d.ts +145 -0
  192. package/dist/services/features/defineFeature.d.ts.map +1 -0
  193. package/dist/services/features/evaluate.d.ts +74 -0
  194. package/dist/services/features/evaluate.d.ts.map +1 -0
  195. package/dist/services/features/sources/DatabaseFeatureFlagSource.d.ts +19 -0
  196. package/dist/services/features/sources/DatabaseFeatureFlagSource.d.ts.map +1 -0
  197. package/dist/services/features/sources/FeatureFlagSource.d.ts +30 -0
  198. package/dist/services/features/sources/FeatureFlagSource.d.ts.map +1 -0
  199. package/dist/services/features/sources/StaticFeatureFlagSource.d.ts +24 -0
  200. package/dist/services/features/sources/StaticFeatureFlagSource.d.ts.map +1 -0
  201. package/dist/services/features/types.d.ts +63 -0
  202. package/dist/services/features/types.d.ts.map +1 -0
  203. package/dist/services/index.d.ts +12 -0
  204. package/dist/services/index.d.ts.map +1 -1
  205. package/dist/services/index.js +8 -8
  206. package/dist/services/index.js.map +6 -4
  207. package/dist/services/router/ViewRouteDispatcher.d.ts +8 -0
  208. package/dist/services/router/ViewRouteDispatcher.d.ts.map +1 -1
  209. package/dist/services/router/createFlatViewRoutes.d.ts +14 -0
  210. package/dist/services/router/createFlatViewRoutes.d.ts.map +1 -1
  211. package/dist/services/router/streamQueryInjection.d.ts.map +1 -1
  212. package/dist/support/index.js +2 -2
  213. package/dist/support/index.js.map +1 -1
  214. package/dist/testing/Page.d.ts +12 -0
  215. package/dist/testing/Page.d.ts.map +1 -1
  216. package/dist/testing/index.js +8 -4
  217. package/dist/testing/index.js.map +1 -1
  218. package/package.json +1 -1
  219. package/dist/chunk-6fc909z5.js +0 -4
  220. package/dist/chunk-9j9wqrb2.js +0 -5
  221. package/dist/chunk-qfzyym5h.js +0 -5
  222. package/dist/chunk-qfzyym5h.js.map +0 -12
  223. package/dist/chunk-r9as9htn.js +0 -5
  224. package/dist/chunk-r9h6aj7g.js +0 -19
  225. package/dist/chunks/ThemeProvider-li1J_igh.js.map +0 -1
  226. /package/dist/{chunk-swe2b6rv.js.map → chunk-01e3gk86.js.map} +0 -0
  227. /package/dist/{chunk-e9zz0zfv.js.map → chunk-k0fvsyeh.js.map} +0 -0
  228. /package/dist/{chunk-cecq6q1b.js.map → chunk-yf7vz71n.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"RouteStateContext.d.ts","sourceRoot":"","sources":["../../client/RouteStateContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAE9D,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,EAAE;QACJ,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QACpD,gBAAgB,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAC;IACF,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,WAAW,EAAE,GAAG,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,iBAAiB,gDAA6C,CAAC;AAE5E,eAAO,MAAM,kBAAkB,GAC7B,OAAO,iBAAiB,CAAC;IACvB,KAAK,EAAE,UAAU,GAAG,QAAQ,CAAC;CAC9B,CAAC,4CAOH,CAAC"}
1
+ {"version":3,"file":"RouteStateContext.d.ts","sourceRoot":"","sources":["../../client/RouteStateContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAE9D,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,EAAE;QACJ,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QACpD,gBAAgB,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAC;IACF,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,WAAW,EAAE,GAAG,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;OAOG;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAAC;AAEF,eAAO,MAAM,iBAAiB,gDAA6C,CAAC;AAE5E,eAAO,MAAM,kBAAkB,GAC7B,OAAO,iBAAiB,CAAC;IACvB,KAAK,EAAE,UAAU,GAAG,QAAQ,CAAC;CAC9B,CAAC,4CAOH,CAAC"}
@@ -29,6 +29,13 @@ export interface ServerDataContextValue {
29
29
  auth: {
30
30
  user: User;
31
31
  };
32
+ /**
33
+ * Evaluated features for this request: `key -> boolean`, nothing else.
34
+ *
35
+ * Never the targeting or the reason a feature resolved the way it did — those
36
+ * stay on the server. Read through `useFeature` rather than directly.
37
+ */
38
+ features: Record<string, boolean>;
32
39
  __csrf: string;
33
40
  cssManifest: Record<string, string[]>;
34
41
  /** Built chunk URLs per view name, for warming a navigation's imports. */
@@ -1 +1 @@
1
- {"version":3,"file":"ServerDataProvider.d.ts","sourceRoot":"","sources":["../../client/ServerDataProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEhC,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrC,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,OAAO,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;KACjC,CAAC;IACF,IAAI,EAAE;QACJ,UAAU,EAAE,YAAY,CAAC;QACzB,aAAa,EAAE,MAAM,CAAC;QACtB,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,aAAa,EAAE,aAAa,CAAC;IAC7B,IAAI,EAAE;QACJ,IAAI,EAAE,IAAI,CAAC;KACZ,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,0EAA0E;IAC1E,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAChD,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,iBAAiB,iDAA8C,CAAC;AAE7E,UAAU,uBAAuB;IAC/B,KAAK,CAAC,EAAE,sBAAsB,CAAC;CAChC;AAED,eAAO,MAAM,kBAAkB,GAC7B,OAAO,iBAAiB,CAAC,uBAAuB,CAAC,4CAgBlD,CAAC"}
1
+ {"version":3,"file":"ServerDataProvider.d.ts","sourceRoot":"","sources":["../../client/ServerDataProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEhC,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrC,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,OAAO,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;KACjC,CAAC;IACF,IAAI,EAAE;QACJ,UAAU,EAAE,YAAY,CAAC;QACzB,aAAa,EAAE,MAAM,CAAC;QACtB,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,aAAa,EAAE,aAAa,CAAC;IAC7B,IAAI,EAAE;QACJ,IAAI,EAAE,IAAI,CAAC;KACZ,CAAC;IACF;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,0EAA0E;IAC1E,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAChD,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,iBAAiB,iDAA8C,CAAC;AAE7E,UAAU,uBAAuB;IAC/B,KAAK,CAAC,EAAE,sBAAsB,CAAC;CAChC;AAED,eAAO,MAAM,kBAAkB,GAC7B,OAAO,iBAAiB,CAAC,uBAAuB,CAAC,4CAgBlD,CAAC"}
@@ -22,7 +22,7 @@ export type { PrefetchStrategy } from "./Link";
22
22
  export { Redirect } from "./Redirect";
23
23
  export { init, create } from "./init";
24
24
  export { createRoot } from "./createRoot";
25
- export type { RPC, ViewRPC, I18nDictionary } from "./rpc";
25
+ export type { RPC, ViewRPC, I18nDictionary, Features, FeatureKey, ClientFeatureKey, } from "./rpc";
26
26
  export type { ViewProps, LayoutProps } from "./types";
27
27
  export type { CreateI18nDictionary } from "./I18nContext";
28
28
  export { Image } from "./Image";
@@ -33,6 +33,7 @@ export { useSignUp } from "./auth/useSignUp";
33
33
  export { useSignOut } from "./auth/useSignOut";
34
34
  export { useResetPassword } from "./auth/useResetPassword";
35
35
  export { useUser } from "./auth/useUser";
36
+ export { useFeature, useFeatures } from "./useFeature";
36
37
  export { useTranslator } from "./useTranslator";
37
38
  export { useDictionary } from "./useDictionary";
38
39
  export { defineDictionary, type DictionaryHandle } from "../i18n/defineDictionary";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../client/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../client/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { B as QueryError, C as I18nContext, D as useLocation, E as ServerDataProvider, F as applyParams$1, I as QueryConfigContext, L as QueryManagerContext, M as RouteStateContext, N as RouteStateProvider, P as toVariantKey, R as QueryManagerProvider, S as useNavigate, T as ServerDataContext, V as Subject, _ as setActiveLocale, a as m, b as useRoute, c as ClientRouterContext, d as ComponentsProvider, f as loadViewModule, g as registerDictionary, h as loadDictionaryForRender, i as WebSocketContextProvider, j as useParams, k as Action, l as ClientRouterProvider, m as loadDictionary, n as useTheme, o as RouteTransitionProvider, p as subscribeViewModules, r as WebSocketContext, s as useRouteTransition, t as ThemeProvider, u as ComponentsContext, v as readRoutePayload, w as I18nProvider, x as useSearchParams, y as routeDataUrl, z as DEFAULT_STALE_TIME } from "../chunks/ThemeProvider-li1J_igh.js";
1
+ import { A as Action, B as DEFAULT_STALE_TIME, C as useNavigate, D as ServerDataProvider, E as ServerDataContext, F as toVariantKey, H as Subject, I as applyParams$1, L as QueryConfigContext, M as useParams, N as RouteStateContext, O as useLocation, P as RouteStateProvider, R as QueryManagerContext, S as useSearchParams, T as I18nProvider, V as QueryError, _ as registerDictionary, a as m, b as routeDataUrl, c as ClientRouterContext, d as ComponentsProvider, f as initialViewModulesReady, g as loadDictionaryForRender, h as loadDictionary, i as WebSocketContextProvider, l as ClientRouterProvider, m as subscribeViewModules, n as useTheme, o as RouteTransitionProvider, p as loadViewModule, r as WebSocketContext, s as useRouteTransition, t as ThemeProvider, u as ComponentsContext, v as setActiveLocale, w as I18nContext, x as useRoute, y as readRoutePayload, z as QueryManagerProvider } from "../chunks/ThemeProvider-ByU4BQdL.js";
2
2
  import { Fragment, StrictMode, Suspense, createContext, createElement, isValidElement, memo, use, useCallback, useContext, useDeferredValue, useEffect, useMemo, useRef, useState, useSyncExternalStore, useTransition } from "react";
3
3
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
4
4
  import { createRoot as createRoot$1, hydrateRoot } from "react-dom/client";
@@ -1173,7 +1173,7 @@ var Routes = (props) => {
1173
1173
  const { routerSubject, fetchRouteCSS, preloadRouteModules, takePrefetched } = useContext(ClientRouterContext);
1174
1174
  const { hydrate } = useContext(QueryManagerContext);
1175
1175
  const [transitionPath, setTransitionPath] = useState([null, routerSubject?.getValue().pathname]);
1176
- const { breadcrumbs, pageData, i18n, prefetchedData, appId: currentAppId } = useContext(ServerDataContext);
1176
+ const { breadcrumbs, pageData, i18n, prefetchedData, features, appId: currentAppId } = useContext(ServerDataContext);
1177
1177
  const [routeState, setRouteState] = useState({
1178
1178
  params: routerSubject?.getValue().params,
1179
1179
  search: routerSubject?.getValue().search,
@@ -1188,6 +1188,7 @@ var Routes = (props) => {
1188
1188
  data: pageData,
1189
1189
  i18n,
1190
1190
  prefetchedData,
1191
+ features: features ?? {},
1191
1192
  appId: currentAppId
1192
1193
  });
1193
1194
  const { replace } = useNavigate();
@@ -1203,6 +1204,7 @@ var Routes = (props) => {
1203
1204
  return [prevTarget, pathname];
1204
1205
  });
1205
1206
  if (routerState.views.length === 0) {
1207
+ renderedRouteRef.current = "";
1206
1208
  setRouteState((routerState) => ({
1207
1209
  ...routerState,
1208
1210
  views: ["404"]
@@ -1236,19 +1238,27 @@ var Routes = (props) => {
1236
1238
  }
1237
1239
  });
1238
1240
  if (payload) {
1239
- const { data, i18n, prefetchedData, breadcrumbs, meta, directive = {}, is404 = false, appId } = payload;
1241
+ const { data, i18n, prefetchedData, breadcrumbs, meta, directive = {}, is404 = false, appId, features } = payload;
1240
1242
  updateMeta(meta);
1241
1243
  if (directive?.kind === "Redirect") {
1242
1244
  if (directive?.path) replace(directive.path, { params: {} });
1243
1245
  return;
1244
1246
  }
1245
- if (is404) startTransition(() => {
1246
- setRouteState((state) => ({
1247
- ...state,
1248
- appId,
1249
- views: ["404"]
1250
- }));
1251
- });
1247
+ if (is404) {
1248
+ renderedRouteRef.current = "";
1249
+ startTransition(() => {
1250
+ setRouteState((state) => ({
1251
+ ...state,
1252
+ ...routerState,
1253
+ appId,
1254
+ i18n,
1255
+ features: features ?? state.features,
1256
+ views: ["404"]
1257
+ }));
1258
+ });
1259
+ setIsFetching(false);
1260
+ return;
1261
+ }
1252
1262
  const carriedViews = payload.partial?.carriedViews ?? [];
1253
1263
  renderedRouteRef.current = `${pathname}${search}`;
1254
1264
  hydrate(prefetchedData);
@@ -1257,6 +1267,7 @@ var Routes = (props) => {
1257
1267
  ...routerState,
1258
1268
  appId,
1259
1269
  i18n,
1270
+ features: features ?? state.features,
1260
1271
  prefetchedData,
1261
1272
  ...mergeCarriedSegments(state, {
1262
1273
  pathname,
@@ -1341,7 +1352,14 @@ var StackTrace = () => {
1341
1352
  };
1342
1353
  function init(RootLayout, options = {}) {
1343
1354
  if (typeof window !== "undefined" && window.render_error) createRoot$1(document.body).render(/* @__PURE__ */ jsx(StackTrace, {}));
1344
- else hydrateRoot(document, /* @__PURE__ */ jsxs(Fragment$1, { children: [
1355
+ else initialViewModulesReady.then(() => hydrate(RootLayout, options)).catch((e) => {
1356
+ setTimeout(() => {
1357
+ throw e;
1358
+ });
1359
+ });
1360
+ }
1361
+ function hydrate(RootLayout, options) {
1362
+ hydrateRoot(document, /* @__PURE__ */ jsxs(Fragment$1, { children: [
1345
1363
  /* @__PURE__ */ jsx(Fragment$1, {}),
1346
1364
  /* @__PURE__ */ jsx(Fragment$1, {}),
1347
1365
  /* @__PURE__ */ jsx(m, {
@@ -1499,6 +1517,53 @@ function useUser() {
1499
1517
  };
1500
1518
  }
1501
1519
  //#endregion
1520
+ //#region client/useFeature.ts
1521
+ /**
1522
+ * Reads a feature evaluated by the server for this request.
1523
+ *
1524
+ * ```tsx
1525
+ * if (useFeature("new-checkout")) {
1526
+ * return <NewCheckout />;
1527
+ * }
1528
+ * ```
1529
+ *
1530
+ * Keys are typed against `app/features`, so a typo is a compile error rather
1531
+ * than a feature that silently reads as off. Features declared
1532
+ * `serverOnly: true` are excluded from that set: they are withheld from the
1533
+ * payload on purpose, so reading one here could only ever answer `false`. Use
1534
+ * the `Features` facade for those.
1535
+ *
1536
+ * ## It never fetches
1537
+ *
1538
+ * The value comes from the payload the server already sent — embedded in the
1539
+ * document on first load, and replaced by each navigation's envelope after
1540
+ * that. So this is a context read: no request, no suspense, no loading state,
1541
+ * and no flash of the wrong branch, which is the failure mode that makes
1542
+ * client-evaluated features unusable for anything above the fold.
1543
+ *
1544
+ * The corollary is that switching a feature on reaches an open page on its next
1545
+ * navigation, not instantly.
1546
+ *
1547
+ * ## Reads route state, not server data
1548
+ *
1549
+ * `RouteStateContext` is what each navigation replaces — the same reason
1550
+ * `useLocale` reads it. Reading `ServerDataContext` instead would pin every
1551
+ * feature to the values from the initial document for the life of the session.
1552
+ */
1553
+ function useFeature(key) {
1554
+ const { features = {} } = useContext(RouteStateContext);
1555
+ if (process.env.NODE_ENV !== "production" && !(key in features)) console.warn(`[gemi] Feature "${String(key)}" is not in the payload the server sent. Either it is not declared in app/features, or it is declared \`serverOnly: true\` and never reaches the browser.`);
1556
+ return features[key] === true;
1557
+ }
1558
+ /**
1559
+ * Every feature the server sent, for a component that needs to branch on
1560
+ * several at once or forward them somewhere.
1561
+ */
1562
+ function useFeatures() {
1563
+ const { features = {} } = useContext(RouteStateContext);
1564
+ return features;
1565
+ }
1566
+ //#endregion
1502
1567
  //#region utils/parseTranslation.tsx
1503
1568
  function parseTranslation(template, params) {
1504
1569
  const hasJSX = Object.values(params).some((value) => typeof value === "function" && isValidElement(value("")));
@@ -1838,6 +1903,6 @@ function useAppIdMissmatch() {
1838
1903
  return current !== next;
1839
1904
  }
1840
1905
  //#endregion
1841
- export { Form, FormError, FormFieldContainer, Head, Image, Link, OpenGraphImage, QueryError, QueryManagerProvider, Redirect, ValidationErrors, create, createRoot, defineDictionary, init, useAppIdMissmatch, useBreadcrumbs, useBroadcast, useDelete, useDictionary, useForgotPassword, useFormData, useFormStatus, useIsNavigationPending, useLocale, useLocation, useMutate, useMutation, useMutationStatus, useNavigate, useNavigationProgress, useParams, usePatch, usePost, usePrefetch, usePut, useQuery, useResetPassword, useRoute, useRouteTransition, useSearchParams, useSignIn, useSignOut, useSignUp, useSubscription, useTheme, useTranslator, useUpload, useUser };
1906
+ export { Form, FormError, FormFieldContainer, Head, Image, Link, OpenGraphImage, QueryError, QueryManagerProvider, Redirect, ValidationErrors, create, createRoot, defineDictionary, init, useAppIdMissmatch, useBreadcrumbs, useBroadcast, useDelete, useDictionary, useFeature, useFeatures, useForgotPassword, useFormData, useFormStatus, useIsNavigationPending, useLocale, useLocation, useMutate, useMutation, useMutationStatus, useNavigate, useNavigationProgress, useParams, usePatch, usePost, usePrefetch, usePut, useQuery, useResetPassword, useRoute, useRouteTransition, useSearchParams, useSignIn, useSignOut, useSignUp, useSubscription, useTheme, useTranslator, useUpload, useUser };
1842
1907
 
1843
1908
  //# sourceMappingURL=index.js.map