gemi 0.193.0 → 0.194.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 (223) 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/auth/AuthController.d.ts.map +1 -1
  5. package/dist/auth/AuthServiceProvider.d.ts +4 -1
  6. package/dist/auth/AuthServiceProvider.d.ts.map +1 -1
  7. package/dist/auth/config.d.ts +10 -0
  8. package/dist/auth/config.d.ts.map +1 -1
  9. package/dist/auth/fixedCode.d.ts +16 -0
  10. package/dist/auth/fixedCode.d.ts.map +1 -0
  11. package/dist/auth/isFixedSignInCode.d.ts +21 -0
  12. package/dist/auth/isFixedSignInCode.d.ts.map +1 -0
  13. package/dist/bun/plugin.js +1 -1
  14. package/dist/bun/preload.js +1 -1
  15. package/dist/{chunk-9hmm8acy.js → chunk-03q4j7wa.js} +1 -1
  16. package/dist/{chunk-tvsjq0my.js → chunk-07zfrfbg.js} +2 -2
  17. package/dist/{chunk-tvsjq0my.js.map → chunk-07zfrfbg.js.map} +1 -1
  18. package/dist/{chunk-m37vvh99.js → chunk-08m9egzx.js} +2 -2
  19. package/dist/{chunk-m37vvh99.js.map → chunk-08m9egzx.js.map} +1 -1
  20. package/dist/{chunk-0mb77yd2.js → chunk-0xssrbar.js} +2 -2
  21. package/dist/{chunk-0mb77yd2.js.map → chunk-0xssrbar.js.map} +1 -1
  22. package/dist/{chunk-vr48swd0.js → chunk-1705yamg.js} +2 -2
  23. package/dist/{chunk-vr48swd0.js.map → chunk-1705yamg.js.map} +1 -1
  24. package/dist/{chunk-tngf3h1g.js → chunk-1ghbn9jg.js} +2 -2
  25. package/dist/{chunk-tngf3h1g.js.map → chunk-1ghbn9jg.js.map} +1 -1
  26. package/dist/chunk-1m7kqf2t.js +117 -0
  27. package/dist/{chunk-8zeky0fj.js.map → chunk-1m7kqf2t.js.map} +6 -5
  28. package/dist/{chunk-ejc0mbe3.js → chunk-1x23scpn.js} +2 -2
  29. package/dist/{chunk-ejc0mbe3.js.map → chunk-1x23scpn.js.map} +1 -1
  30. package/dist/{chunk-7bbtre2j.js → chunk-1yhvqthv.js} +2 -2
  31. package/dist/{chunk-7bbtre2j.js.map → chunk-1yhvqthv.js.map} +1 -1
  32. package/dist/{chunk-xsx69765.js → chunk-228w21t6.js} +2 -2
  33. package/dist/{chunk-xsx69765.js.map → chunk-228w21t6.js.map} +1 -1
  34. package/dist/{chunk-thq8tc9x.js → chunk-2485bwzs.js} +3 -3
  35. package/dist/{chunk-thq8tc9x.js.map → chunk-2485bwzs.js.map} +1 -1
  36. package/dist/{chunk-7ynahcy6.js → chunk-28fz99pn.js} +2 -2
  37. package/dist/{chunk-7ynahcy6.js.map → chunk-28fz99pn.js.map} +1 -1
  38. package/dist/{chunk-zcrhagx5.js → chunk-28macaes.js} +2 -2
  39. package/dist/{chunk-zcrhagx5.js.map → chunk-28macaes.js.map} +1 -1
  40. package/dist/{chunk-y67rmd3y.js → chunk-2g2fsr71.js} +2 -2
  41. package/dist/{chunk-y67rmd3y.js.map → chunk-2g2fsr71.js.map} +1 -1
  42. package/dist/{chunk-p00rd4ja.js → chunk-2yzv5v3m.js} +2 -2
  43. package/dist/{chunk-p00rd4ja.js.map → chunk-2yzv5v3m.js.map} +1 -1
  44. package/dist/{chunk-t86nc1jd.js → chunk-3fcd8a47.js} +2 -2
  45. package/dist/{chunk-t86nc1jd.js.map → chunk-3fcd8a47.js.map} +1 -1
  46. package/dist/{chunk-24jgzc8y.js → chunk-3svm89z4.js} +2 -2
  47. package/dist/{chunk-24jgzc8y.js.map → chunk-3svm89z4.js.map} +1 -1
  48. package/dist/{chunk-f02anz24.js → chunk-5bfrr8x5.js} +2 -2
  49. package/dist/{chunk-f02anz24.js.map → chunk-5bfrr8x5.js.map} +1 -1
  50. package/dist/{chunk-bd14zwmj.js → chunk-5nkg3rmw.js} +2 -2
  51. package/dist/{chunk-bd14zwmj.js.map → chunk-5nkg3rmw.js.map} +1 -1
  52. package/dist/{chunk-m3180wkp.js → chunk-63dh2zt4.js} +2 -2
  53. package/dist/{chunk-m3180wkp.js.map → chunk-63dh2zt4.js.map} +1 -1
  54. package/dist/{chunk-17mdszc3.js → chunk-6m9qrs6d.js} +2 -2
  55. package/dist/{chunk-17mdszc3.js.map → chunk-6m9qrs6d.js.map} +1 -1
  56. package/dist/{chunk-hwq0kk1d.js → chunk-7t60d5qy.js} +1 -1
  57. package/dist/{chunk-ccx7rt7y.js → chunk-8e17k7ht.js} +2 -2
  58. package/dist/{chunk-ccx7rt7y.js.map → chunk-8e17k7ht.js.map} +1 -1
  59. package/dist/{chunk-z1aeh05w.js → chunk-8fdk8bfd.js} +3 -3
  60. package/dist/{chunk-z1aeh05w.js.map → chunk-8fdk8bfd.js.map} +1 -1
  61. package/dist/{chunk-9m04tdzh.js → chunk-9hjxpdjt.js} +1 -1
  62. package/dist/{chunk-tt5qk0xt.js → chunk-a02bmp0q.js} +2 -2
  63. package/dist/{chunk-tt5qk0xt.js.map → chunk-a02bmp0q.js.map} +1 -1
  64. package/dist/{chunk-fryj3asn.js → chunk-aycfrzh1.js} +2 -2
  65. package/dist/{chunk-fryj3asn.js.map → chunk-aycfrzh1.js.map} +1 -1
  66. package/dist/{chunk-m4r8btey.js → chunk-b6zqjyn1.js} +2 -2
  67. package/dist/{chunk-m4r8btey.js.map → chunk-b6zqjyn1.js.map} +1 -1
  68. package/dist/{chunk-qfb6r3cq.js → chunk-bc7hr358.js} +3 -3
  69. package/dist/{chunk-qfb6r3cq.js.map → chunk-bc7hr358.js.map} +1 -1
  70. package/dist/{chunk-ce73s4kh.js → chunk-beckfwe9.js} +2 -2
  71. package/dist/{chunk-ce73s4kh.js.map → chunk-beckfwe9.js.map} +1 -1
  72. package/dist/chunk-c6khfprk.js +10 -0
  73. package/dist/{chunk-7k43y71n.js.map → chunk-c6khfprk.js.map} +3 -3
  74. package/dist/{chunk-rf9c6e49.js → chunk-dfmxvp8p.js} +2 -2
  75. package/dist/{chunk-rf9c6e49.js.map → chunk-dfmxvp8p.js.map} +1 -1
  76. package/dist/{chunk-z9pq557m.js → chunk-dn20caf2.js} +2 -2
  77. package/dist/{chunk-z9pq557m.js.map → chunk-dn20caf2.js.map} +1 -1
  78. package/dist/{chunk-freerpzc.js → chunk-ejktrxp2.js} +1 -1
  79. package/dist/{chunk-8pfy75y6.js → chunk-ermvtpy9.js} +3 -3
  80. package/dist/{chunk-8pfy75y6.js.map → chunk-ermvtpy9.js.map} +1 -1
  81. package/dist/{chunk-bm7z4vj9.js → chunk-f6css3z6.js} +2 -2
  82. package/dist/{chunk-bm7z4vj9.js.map → chunk-f6css3z6.js.map} +1 -1
  83. package/dist/{chunk-0m1a636t.js → chunk-fhfkcmkc.js} +2 -2
  84. package/dist/{chunk-0m1a636t.js.map → chunk-fhfkcmkc.js.map} +1 -1
  85. package/dist/{chunk-8em2ebj1.js → chunk-ftvc1a0k.js} +2 -2
  86. package/dist/{chunk-8em2ebj1.js.map → chunk-ftvc1a0k.js.map} +1 -1
  87. package/dist/{chunk-5zx4e2wa.js → chunk-g02gqhq0.js} +3 -3
  88. package/dist/{chunk-5zx4e2wa.js.map → chunk-g02gqhq0.js.map} +1 -1
  89. package/dist/{chunk-j34ektzj.js → chunk-g7h28xcr.js} +2 -2
  90. package/dist/{chunk-j34ektzj.js.map → chunk-g7h28xcr.js.map} +1 -1
  91. package/dist/{chunk-xwz5fmwy.js → chunk-geqdq8hp.js} +3 -3
  92. package/dist/{chunk-xwz5fmwy.js.map → chunk-geqdq8hp.js.map} +1 -1
  93. package/dist/{chunk-9dfrsj4m.js → chunk-gmcttf0f.js} +2 -2
  94. package/dist/{chunk-9dfrsj4m.js.map → chunk-gmcttf0f.js.map} +1 -1
  95. package/dist/chunk-gn90agsv.js +5 -0
  96. package/dist/{chunk-waq4kj7n.js.map → chunk-gn90agsv.js.map} +1 -1
  97. package/dist/{chunk-67zz58cw.js → chunk-h9taahxv.js} +2 -2
  98. package/dist/{chunk-67zz58cw.js.map → chunk-h9taahxv.js.map} +1 -1
  99. package/dist/{chunk-wa1xmvgr.js → chunk-hmn6pa78.js} +2 -2
  100. package/dist/{chunk-wa1xmvgr.js.map → chunk-hmn6pa78.js.map} +1 -1
  101. package/dist/{chunk-jbee3n3p.js → chunk-hswnqn33.js} +2 -2
  102. package/dist/{chunk-jbee3n3p.js.map → chunk-hswnqn33.js.map} +1 -1
  103. package/dist/{chunk-6n44t4hn.js → chunk-j49vh5bs.js} +2 -2
  104. package/dist/{chunk-6n44t4hn.js.map → chunk-j49vh5bs.js.map} +1 -1
  105. package/dist/{chunk-m0aq07nj.js → chunk-jq1vwj5g.js} +2 -2
  106. package/dist/{chunk-m0aq07nj.js.map → chunk-jq1vwj5g.js.map} +1 -1
  107. package/dist/{chunk-h688s2ba.js → chunk-m08p5mre.js} +2 -2
  108. package/dist/{chunk-h688s2ba.js.map → chunk-m08p5mre.js.map} +1 -1
  109. package/dist/{chunk-fbxnxze2.js → chunk-m0dfgmbj.js} +1 -1
  110. package/dist/{chunk-6rmz0mkm.js → chunk-mc8fdh65.js} +2 -2
  111. package/dist/{chunk-6rmz0mkm.js.map → chunk-mc8fdh65.js.map} +1 -1
  112. package/dist/{chunk-efgemgbe.js → chunk-mgdrf89p.js} +2 -2
  113. package/dist/{chunk-efgemgbe.js.map → chunk-mgdrf89p.js.map} +1 -1
  114. package/dist/{chunk-7zpjdwfq.js → chunk-n914rs58.js} +3 -3
  115. package/dist/{chunk-7zpjdwfq.js.map → chunk-n914rs58.js.map} +1 -1
  116. package/dist/{chunk-6frbegay.js → chunk-nk7nmtng.js} +2 -2
  117. package/dist/{chunk-6frbegay.js.map → chunk-nk7nmtng.js.map} +1 -1
  118. package/dist/{chunk-c36sbvnz.js → chunk-p2vasd1z.js} +2 -2
  119. package/dist/{chunk-c36sbvnz.js.map → chunk-p2vasd1z.js.map} +1 -1
  120. package/dist/{chunk-6wsmdf51.js → chunk-paawtkza.js} +2 -2
  121. package/dist/{chunk-6wsmdf51.js.map → chunk-paawtkza.js.map} +1 -1
  122. package/dist/{chunk-0p76bhy2.js → chunk-pg5hm00s.js} +2 -2
  123. package/dist/{chunk-0p76bhy2.js.map → chunk-pg5hm00s.js.map} +1 -1
  124. package/dist/{chunk-bhfwp3gz.js → chunk-pmt2jt9b.js} +2 -2
  125. package/dist/{chunk-bhfwp3gz.js.map → chunk-pmt2jt9b.js.map} +1 -1
  126. package/dist/{chunk-etzd00a8.js → chunk-pqr01waj.js} +2 -2
  127. package/dist/{chunk-etzd00a8.js.map → chunk-pqr01waj.js.map} +1 -1
  128. package/dist/{chunk-z8dxdqzm.js → chunk-q1aaqhnw.js} +2 -2
  129. package/dist/{chunk-k1c0xd8r.js.map → chunk-q1aaqhnw.js.map} +1 -1
  130. package/dist/{chunk-mdrsec0r.js → chunk-qg9pyxg7.js} +2 -2
  131. package/dist/{chunk-mdrsec0r.js.map → chunk-qg9pyxg7.js.map} +1 -1
  132. package/dist/{chunk-xzz6ps4z.js → chunk-qjwv9xfq.js} +2 -2
  133. package/dist/{chunk-xzz6ps4z.js.map → chunk-qjwv9xfq.js.map} +1 -1
  134. package/dist/{chunk-d0khszc9.js → chunk-qrn6ch3t.js} +2 -2
  135. package/dist/{chunk-d0khszc9.js.map → chunk-qrn6ch3t.js.map} +1 -1
  136. package/dist/{chunk-67ex6nem.js → chunk-reaty2mv.js} +3 -3
  137. package/dist/{chunk-67ex6nem.js.map → chunk-reaty2mv.js.map} +1 -1
  138. package/dist/{chunk-cx3n8qyr.js → chunk-rp6ss7v3.js} +2 -2
  139. package/dist/{chunk-cx3n8qyr.js.map → chunk-rp6ss7v3.js.map} +1 -1
  140. package/dist/{chunk-199nvtrj.js → chunk-scmjmsps.js} +3 -3
  141. package/dist/{chunk-199nvtrj.js.map → chunk-scmjmsps.js.map} +1 -1
  142. package/dist/{chunk-k8gn0q91.js → chunk-sqqby94y.js} +1 -1
  143. package/dist/chunk-svtjfmkc.js +24 -0
  144. package/dist/{chunk-8ysrmyer.js.map → chunk-svtjfmkc.js.map} +3 -3
  145. package/dist/{chunk-r7vnxqck.js → chunk-tj7z65ba.js} +2 -2
  146. package/dist/{chunk-r7vnxqck.js.map → chunk-tj7z65ba.js.map} +1 -1
  147. package/dist/{chunk-z7mbhc68.js → chunk-trqt1kkd.js} +2 -2
  148. package/dist/{chunk-z7mbhc68.js.map → chunk-trqt1kkd.js.map} +1 -1
  149. package/dist/{chunk-ryfty6mj.js → chunk-v20fe53s.js} +3 -3
  150. package/dist/{chunk-ryfty6mj.js.map → chunk-v20fe53s.js.map} +1 -1
  151. package/dist/{chunk-k1c0xd8r.js → chunk-vgxkt9vd.js} +2 -2
  152. package/dist/{chunk-z8dxdqzm.js.map → chunk-vgxkt9vd.js.map} +1 -1
  153. package/dist/{chunk-1mpwzjxa.js → chunk-wgqppqcn.js} +3 -3
  154. package/dist/{chunk-1mpwzjxa.js.map → chunk-wgqppqcn.js.map} +1 -1
  155. package/dist/{chunk-4s7st9y4.js → chunk-wvq3c25z.js} +3 -3
  156. package/dist/{chunk-4s7st9y4.js.map → chunk-wvq3c25z.js.map} +1 -1
  157. package/dist/{chunk-sqev442x.js → chunk-zzdvdr5a.js} +4 -4
  158. package/dist/{chunk-sqev442x.js.map → chunk-zzdvdr5a.js.map} +1 -1
  159. package/dist/chunks/{RealtimeClient-bPI28SVg.js → RealtimeClient-BVQeh_yg.js} +2 -2
  160. package/dist/chunks/{RealtimeClient-bPI28SVg.js.map → RealtimeClient-BVQeh_yg.js.map} +1 -1
  161. package/dist/chunks/{ThemeProvider-BstCYMfV.js → ThemeProvider-G2g5Z1ZS.js} +45 -5
  162. package/dist/chunks/{ThemeProvider-BstCYMfV.js.map → ThemeProvider-G2g5Z1ZS.js.map} +1 -1
  163. package/dist/chunks/{fetchFileRequest-BD9pg9RL.js → fetchFileRequest-Bzva9J59.js} +2 -2
  164. package/dist/chunks/{fetchFileRequest-BD9pg9RL.js.map → fetchFileRequest-Bzva9J59.js.map} +1 -1
  165. package/dist/chunks/{live-DYLCi077.js → live-C2Sck5PO.js} +3 -3
  166. package/dist/chunks/{live-DYLCi077.js.map → live-C2Sck5PO.js.map} +1 -1
  167. package/dist/chunks/{mutationExtras-Bo8pvlEx.js → mutationExtras-HC7AC6zn.js} +2 -2
  168. package/dist/chunks/{mutationExtras-Bo8pvlEx.js.map → mutationExtras-HC7AC6zn.js.map} +1 -1
  169. package/dist/chunks/{subscriptionStream-CtwEcda9.js → subscriptionStream-CaTWWJwt.js} +2 -2
  170. package/dist/chunks/{subscriptionStream-CtwEcda9.js.map → subscriptionStream-CaTWWJwt.js.map} +1 -1
  171. package/dist/client/chunkLoadRecovery.d.ts +5 -2
  172. package/dist/client/chunkLoadRecovery.d.ts.map +1 -1
  173. package/dist/client/index.js +4 -4
  174. package/dist/config/index.js +1 -1
  175. package/dist/console/run.js +2 -2
  176. package/dist/console/run.js.map +1 -1
  177. package/dist/container/index.js +2 -2
  178. package/dist/container/index.js.map +1 -1
  179. package/dist/database/index.js +2 -2
  180. package/dist/database/index.js.map +1 -1
  181. package/dist/email/Email.d.ts.map +1 -1
  182. package/dist/email/index.js +3 -3
  183. package/dist/email/index.js.map +3 -3
  184. package/dist/facades/index.js +2 -2
  185. package/dist/facades/index.js.map +1 -1
  186. package/dist/foundation/index.js +2 -2
  187. package/dist/foundation/index.js.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/kernel/index.js +2 -2
  195. package/dist/kernel/index.js.map +1 -1
  196. package/dist/orm/index.js +2 -2
  197. package/dist/orm/index.js.map +1 -1
  198. package/dist/probe/index.js +2 -2
  199. package/dist/probe/index.js.map +1 -1
  200. package/dist/server/index.js +2 -2
  201. package/dist/server/index.js.map +1 -1
  202. package/dist/services/index.d.ts +1 -0
  203. package/dist/services/index.d.ts.map +1 -1
  204. package/dist/services/index.js +9 -9
  205. package/dist/services/index.js.map +4 -3
  206. package/dist/services/queue/work.js +2 -2
  207. package/dist/services/queue/work.js.map +1 -1
  208. package/dist/stats/route-table.js +1 -1
  209. package/dist/support/index.js +2 -2
  210. package/dist/support/index.js.map +1 -1
  211. package/dist/testing/index.js +2 -2
  212. package/dist/vitest/index.js +1 -1
  213. package/package.json +1 -1
  214. package/dist/chunk-7k43y71n.js +0 -10
  215. package/dist/chunk-8ysrmyer.js +0 -24
  216. package/dist/chunk-8zeky0fj.js +0 -117
  217. package/dist/chunk-waq4kj7n.js +0 -5
  218. /package/dist/{chunk-9hmm8acy.js.map → chunk-03q4j7wa.js.map} +0 -0
  219. /package/dist/{chunk-hwq0kk1d.js.map → chunk-7t60d5qy.js.map} +0 -0
  220. /package/dist/{chunk-9m04tdzh.js.map → chunk-9hjxpdjt.js.map} +0 -0
  221. /package/dist/{chunk-freerpzc.js.map → chunk-ejktrxp2.js.map} +0 -0
  222. /package/dist/{chunk-fbxnxze2.js.map → chunk-m0dfgmbj.js.map} +0 -0
  223. /package/dist/{chunk-k8gn0q91.js.map → chunk-sqqby94y.js.map} +0 -0
@@ -1,4 +1,4 @@
1
- import { X as applyParams, gt as QueryError, pt as parseRetryAfter } from "./ThemeProvider-BstCYMfV.js";
1
+ import { X as applyParams, gt as QueryError, pt as parseRetryAfter } from "./ThemeProvider-G2g5Z1ZS.js";
2
2
  //#region client/fetchFileRequest.ts
3
3
  /**
4
4
  * `fetchBlob` / `fetchText` once loaded: the `GET`, a `QueryError` for a
@@ -54,4 +54,4 @@ function filenameOf(response) {
54
54
  //#endregion
55
55
  export { fetchFile, filenameOf };
56
56
 
57
- //# sourceMappingURL=fetchFileRequest-BD9pg9RL.js.map
57
+ //# sourceMappingURL=fetchFileRequest-Bzva9J59.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetchFileRequest-BD9pg9RL.js","names":[],"sources":["../../client/fetchFileRequest.ts"],"sourcesContent":["import { applyParams } from \"../utils/applyParams\";\nimport type { FetchedBlob, FetchedText, FetchFileOptions } from \"./fetchFile\";\nimport { QueryError } from \"./QueryError\";\nimport { parseRetryAfter } from \"./retryPolicy\";\n\n// What `fetchBlob` and `fetchText` in `./fetchFile` load on their first call\n// (#915).\n\ntype RequestOptions = Omit<FetchFileOptions<string>, \"params\"> & {\n params?: Record<string, string | number | undefined>;\n};\n\n/**\n * `fetchBlob` / `fetchText` once loaded: the `GET`, a `QueryError` for a\n * non-2xx, and the body read `as` a blob or text.\n */\nexport async function fetchFile(\n path: string,\n // The caller's `FetchFileOptions<P>`, checked against its path there.\n options: object | undefined,\n as: \"blob\" | \"text\",\n): Promise<FetchedBlob | FetchedText> {\n const response = await request(path, options as RequestOptions);\n const body = as === \"blob\" ? { blob: await response.blob() } : { text: await response.text() };\n return { ...body, filename: filenameOf(response), response } as FetchedBlob | FetchedText;\n}\n\nasync function request(path: string, options: RequestOptions = {}) {\n const { params = {}, search, signal, init } = options;\n const url = applyParams(path, params);\n const query = searchString(search);\n const response = await fetch(`/api${url}${query ? `?${query}` : \"\"}`, {\n ...init,\n method: \"GET\",\n signal,\n });\n if (!response.ok) {\n // An error body that is not JSON (a proxy's HTML 502) is still that status.\n const body = await response.json().catch(() => null);\n throw new QueryError(\n url,\n query,\n response.status,\n body,\n parseRetryAfter(response.headers.get(\"retry-after\")),\n );\n }\n return response;\n}\n\nfunction searchString(search: FetchFileOptions<string>[\"search\"]) {\n if (!search) return \"\";\n if (search instanceof URLSearchParams) return search.toString();\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(search)) {\n if (value !== null && value !== undefined) params.append(key, String(value));\n }\n return params.toString();\n}\n\n/**\n * The file name in a `Content-Disposition` header: the RFC 5987\n * `filename*=UTF-8''...` form when present and decodable, else `filename`.\n *\n * @internal Exported for tests.\n */\nexport function filenameOf(response: Response): string | null {\n const header = response.headers.get(\"content-disposition\");\n if (!header) return null;\n const extended = /filename\\*\\s*=\\s*([^']*)'[^']*'([^;]+)/i.exec(header);\n if (extended) {\n try {\n return decodeURIComponent(extended[2].trim());\n } catch {\n // A malformed escape: fall back to the plain form.\n }\n }\n const plain = /filename\\s*=\\s*(?:\"((?:[^\"\\\\]|\\\\.)*)\"|([^;]+))/i.exec(header);\n if (!plain) return null;\n const name = plain[1] !== undefined ? plain[1].replace(/\\\\(.)/g, \"$1\") : plain[2].trim();\n return name || null;\n}\n"],"mappings":";;;;;;AAgBA,eAAsB,UACpB,MAEA,SACA,IACoC;CACpC,MAAM,WAAW,MAAM,QAAQ,MAAM,OAAyB;CAE9D,OAAO;EAAE,GADI,OAAO,SAAS,EAAE,MAAM,MAAM,SAAS,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,SAAS,KAAK,EAAE;EAC3E,UAAU,WAAW,QAAQ;EAAG;CAAS;AAC7D;AAEA,eAAe,QAAQ,MAAc,UAA0B,CAAC,GAAG;CACjE,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,QAAQ,SAAS;CAC9C,MAAM,MAAM,YAAY,MAAM,MAAM;CACpC,MAAM,QAAQ,aAAa,MAAM;CACjC,MAAM,WAAW,MAAM,MAAM,OAAO,MAAM,QAAQ,IAAI,UAAU,MAAM;EACpE,GAAG;EACH,QAAQ;EACR;CACF,CAAC;CACD,IAAI,CAAC,SAAS,IAAI;EAEhB,MAAM,OAAO,MAAM,SAAS,KAAK,CAAC,CAAC,YAAY,IAAI;EACnD,MAAM,IAAI,WACR,KACA,OACA,SAAS,QACT,MACA,gBAAgB,SAAS,QAAQ,IAAI,aAAa,CAAC,CACrD;CACF;CACA,OAAO;AACT;AAEA,SAAS,aAAa,QAA4C;CAChE,IAAI,CAAC,QAAQ,OAAO;CACpB,IAAI,kBAAkB,iBAAiB,OAAO,OAAO,SAAS;CAC9D,MAAM,SAAS,IAAI,gBAAgB;CACnC,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,GAC9C,IAAI,UAAU,QAAQ,UAAU,KAAA,GAAW,OAAO,OAAO,KAAK,OAAO,KAAK,CAAC;CAE7E,OAAO,OAAO,SAAS;AACzB;;;;;;;AAQA,SAAgB,WAAW,UAAmC;CAC5D,MAAM,SAAS,SAAS,QAAQ,IAAI,qBAAqB;CACzD,IAAI,CAAC,QAAQ,OAAO;CACpB,MAAM,WAAW,0CAA0C,KAAK,MAAM;CACtE,IAAI,UACF,IAAI;EACF,OAAO,mBAAmB,SAAS,EAAE,CAAC,KAAK,CAAC;CAC9C,QAAQ,CAER;CAEF,MAAM,QAAQ,kDAAkD,KAAK,MAAM;CAC3E,IAAI,CAAC,OAAO,OAAO;CAEnB,QADa,MAAM,OAAO,KAAA,IAAY,MAAM,EAAE,CAAC,QAAQ,UAAU,IAAI,IAAI,MAAM,EAAE,CAAC,KAAK,MACxE;AACjB"}
1
+ {"version":3,"file":"fetchFileRequest-Bzva9J59.js","names":[],"sources":["../../client/fetchFileRequest.ts"],"sourcesContent":["import { applyParams } from \"../utils/applyParams\";\nimport type { FetchedBlob, FetchedText, FetchFileOptions } from \"./fetchFile\";\nimport { QueryError } from \"./QueryError\";\nimport { parseRetryAfter } from \"./retryPolicy\";\n\n// What `fetchBlob` and `fetchText` in `./fetchFile` load on their first call\n// (#915).\n\ntype RequestOptions = Omit<FetchFileOptions<string>, \"params\"> & {\n params?: Record<string, string | number | undefined>;\n};\n\n/**\n * `fetchBlob` / `fetchText` once loaded: the `GET`, a `QueryError` for a\n * non-2xx, and the body read `as` a blob or text.\n */\nexport async function fetchFile(\n path: string,\n // The caller's `FetchFileOptions<P>`, checked against its path there.\n options: object | undefined,\n as: \"blob\" | \"text\",\n): Promise<FetchedBlob | FetchedText> {\n const response = await request(path, options as RequestOptions);\n const body = as === \"blob\" ? { blob: await response.blob() } : { text: await response.text() };\n return { ...body, filename: filenameOf(response), response } as FetchedBlob | FetchedText;\n}\n\nasync function request(path: string, options: RequestOptions = {}) {\n const { params = {}, search, signal, init } = options;\n const url = applyParams(path, params);\n const query = searchString(search);\n const response = await fetch(`/api${url}${query ? `?${query}` : \"\"}`, {\n ...init,\n method: \"GET\",\n signal,\n });\n if (!response.ok) {\n // An error body that is not JSON (a proxy's HTML 502) is still that status.\n const body = await response.json().catch(() => null);\n throw new QueryError(\n url,\n query,\n response.status,\n body,\n parseRetryAfter(response.headers.get(\"retry-after\")),\n );\n }\n return response;\n}\n\nfunction searchString(search: FetchFileOptions<string>[\"search\"]) {\n if (!search) return \"\";\n if (search instanceof URLSearchParams) return search.toString();\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(search)) {\n if (value !== null && value !== undefined) params.append(key, String(value));\n }\n return params.toString();\n}\n\n/**\n * The file name in a `Content-Disposition` header: the RFC 5987\n * `filename*=UTF-8''...` form when present and decodable, else `filename`.\n *\n * @internal Exported for tests.\n */\nexport function filenameOf(response: Response): string | null {\n const header = response.headers.get(\"content-disposition\");\n if (!header) return null;\n const extended = /filename\\*\\s*=\\s*([^']*)'[^']*'([^;]+)/i.exec(header);\n if (extended) {\n try {\n return decodeURIComponent(extended[2].trim());\n } catch {\n // A malformed escape: fall back to the plain form.\n }\n }\n const plain = /filename\\s*=\\s*(?:\"((?:[^\"\\\\]|\\\\.)*)\"|([^;]+))/i.exec(header);\n if (!plain) return null;\n const name = plain[1] !== undefined ? plain[1].replace(/\\\\(.)/g, \"$1\") : plain[2].trim();\n return name || null;\n}\n"],"mappings":";;;;;;AAgBA,eAAsB,UACpB,MAEA,SACA,IACoC;CACpC,MAAM,WAAW,MAAM,QAAQ,MAAM,OAAyB;CAE9D,OAAO;EAAE,GADI,OAAO,SAAS,EAAE,MAAM,MAAM,SAAS,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,SAAS,KAAK,EAAE;EAC3E,UAAU,WAAW,QAAQ;EAAG;CAAS;AAC7D;AAEA,eAAe,QAAQ,MAAc,UAA0B,CAAC,GAAG;CACjE,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,QAAQ,SAAS;CAC9C,MAAM,MAAM,YAAY,MAAM,MAAM;CACpC,MAAM,QAAQ,aAAa,MAAM;CACjC,MAAM,WAAW,MAAM,MAAM,OAAO,MAAM,QAAQ,IAAI,UAAU,MAAM;EACpE,GAAG;EACH,QAAQ;EACR;CACF,CAAC;CACD,IAAI,CAAC,SAAS,IAAI;EAEhB,MAAM,OAAO,MAAM,SAAS,KAAK,CAAC,CAAC,YAAY,IAAI;EACnD,MAAM,IAAI,WACR,KACA,OACA,SAAS,QACT,MACA,gBAAgB,SAAS,QAAQ,IAAI,aAAa,CAAC,CACrD;CACF;CACA,OAAO;AACT;AAEA,SAAS,aAAa,QAA4C;CAChE,IAAI,CAAC,QAAQ,OAAO;CACpB,IAAI,kBAAkB,iBAAiB,OAAO,OAAO,SAAS;CAC9D,MAAM,SAAS,IAAI,gBAAgB;CACnC,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,GAC9C,IAAI,UAAU,QAAQ,UAAU,KAAA,GAAW,OAAO,OAAO,KAAK,OAAO,KAAK,CAAC;CAE7E,OAAO,OAAO,SAAS;AACzB;;;;;;;AAQA,SAAgB,WAAW,UAAmC;CAC5D,MAAM,SAAS,SAAS,QAAQ,IAAI,qBAAqB;CACzD,IAAI,CAAC,QAAQ,OAAO;CACpB,MAAM,WAAW,0CAA0C,KAAK,MAAM;CACtE,IAAI,UACF,IAAI;EACF,OAAO,mBAAmB,SAAS,EAAE,CAAC,KAAK,CAAC;CAC9C,QAAQ,CAER;CAEF,MAAM,QAAQ,kDAAkD,KAAK,MAAM;CAC3E,IAAI,CAAC,OAAO,OAAO;CAEnB,QADa,MAAM,OAAO,KAAA,IAAY,MAAM,EAAE,CAAC,QAAQ,UAAU,IAAI,IAAI,MAAM,EAAE,CAAC,KAAK,MACxE;AACjB"}
@@ -1,4 +1,4 @@
1
- import { G as realtime, J as loadedModule } from "./ThemeProvider-BstCYMfV.js";
1
+ import { G as realtime, J as loadedModule } from "./ThemeProvider-G2g5Z1ZS.js";
2
2
  //#region \0rolldown/runtime.js
3
3
  var __defProp = Object.defineProperty;
4
4
  var __exportAll = (all, no_symbols) => {
@@ -76,7 +76,7 @@ function followLive(provided, live, resource, setOpen) {
76
76
  };
77
77
  const socket = provided ?? realtime.client;
78
78
  if (socket) start(socket);
79
- else import("./RealtimeClient-bPI28SVg.js").then((module) => start(loadedModule(module).tabClient())).catch(() => {});
79
+ else import("./RealtimeClient-BVQeh_yg.js").then((module) => start(loadedModule(module).tabClient())).catch(() => {});
80
80
  return () => {
81
81
  stop?.();
82
82
  stop = null;
@@ -85,4 +85,4 @@ function followLive(provided, live, resource, setOpen) {
85
85
  //#endregion
86
86
  export { live_exports as n, followLive as t };
87
87
 
88
- //# sourceMappingURL=live-DYLCi077.js.map
88
+ //# sourceMappingURL=live-C2Sck5PO.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"live-DYLCi077.js","names":[],"sources":["../../client/realtime/live.ts"],"sourcesContent":["import type { QueryResource } from \"../QueryResource\";\nimport type { ChannelPattern } from \"../useChannel\";\nimport { EVENT_COALESCE_MS } from \"./useChannelSubscription\";\nimport type { ChannelParamValues, RealtimeSocket } from \"./RealtimeClient\";\nimport { loadedModule } from \"../lazyModule\";\nimport { realtime } from \"./loader\";\n\n/**\n * `useQuery`'s `live` option: the channel whose events and resyncs refetch\n * the query. A pattern without params (`\"user\"`), `[pattern, params]`, or\n * `{ channel, params }`.\n */\nexport type LiveChannel =\n | ChannelPattern\n | readonly [ChannelPattern, ChannelParamValues]\n | { channel: ChannelPattern; params?: ChannelParamValues };\n\nexport function resolveLiveChannel(\n live: LiveChannel | null | undefined | false,\n): { pattern: string; params: ChannelParamValues } | null {\n if (!live) return null;\n if (typeof live === \"string\") return { pattern: live, params: {} };\n if (Array.isArray(live)) return { pattern: live[0], params: live[1] ?? {} };\n const object = live as { channel: string; params?: ChannelParamValues };\n return { pattern: object.channel, params: object.params ?? {} };\n}\n\n/**\n * `useQuery`'s `live` subscription, loaded on first use by `followLive` in\n * `./loader` (#891). The channel's events refetch every cached variant of the\n * query (the rendered ones now), a burst of them once per\n * `EVENT_COALESCE_MS`; a resync refetches at once. `setOpen` follows whether\n * the channel is open, which pauses the query's polling.\n */\nexport function subscribeLive(\n socket: RealtimeSocket,\n live: LiveChannel,\n resource: () => QueryResource,\n setOpen: (open: boolean) => void,\n): () => void {\n const channel = resolveLiveChannel(live);\n if (!channel) return () => {};\n const refresh = () => {\n const target = resource();\n for (const key of target.variantKeys()) target.invalidate(key);\n };\n let timer: ReturnType<typeof setTimeout> | null = null;\n const release = socket.subscribe(channel.pattern, channel.params, {\n onEvent: () => {\n if (timer) return;\n timer = setTimeout(() => {\n timer = null;\n refresh();\n }, EVENT_COALESCE_MS);\n },\n onResync: refresh,\n onStatus: (status) => setOpen(status === \"open\"),\n });\n return () => {\n if (timer) clearTimeout(timer);\n release();\n };\n}\n\n/**\n * What `followLive` in `./loader` hands over to once this module is loaded:\n * subscribes on the provided socket, or the tab's client, loading that first\n * when it is not there yet. Returns the function that stops it.\n */\nexport function followLive(\n provided: RealtimeSocket | null,\n live: LiveChannel,\n resource: () => QueryResource,\n setOpen: (open: boolean) => void,\n): () => void {\n // `undefined` until it subscribes, `null` once stopped.\n let stop: (() => void) | null | undefined;\n const start = (socket: RealtimeSocket) => {\n if (stop === undefined) stop = subscribeLive(socket, live, resource, setOpen);\n };\n const socket = provided ?? realtime.client;\n if (socket) start(socket);\n // Its own `import()` of the client rather than `loadRealtimeClient`, which\n // would keep that in the entry chunk of every app with a `useQuery`. A\n // failed load leaves the channel closed, so the query keeps polling.\n else\n import(\"./RealtimeClient.js\")\n .then((module) => start(loadedModule(module).tabClient()))\n .catch(() => {});\n return () => {\n stop?.();\n stop = null;\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAiBA,SAAgB,mBACd,MACwD;CACxD,IAAI,CAAC,MAAM,OAAO;CAClB,IAAI,OAAO,SAAS,UAAU,OAAO;EAAE,SAAS;EAAM,QAAQ,CAAC;CAAE;CACjE,IAAI,MAAM,QAAQ,IAAI,GAAG,OAAO;EAAE,SAAS,KAAK;EAAI,QAAQ,KAAK,MAAM,CAAC;CAAE;CAC1E,MAAM,SAAS;CACf,OAAO;EAAE,SAAS,OAAO;EAAS,QAAQ,OAAO,UAAU,CAAC;CAAE;AAChE;;;;;;;;AASA,SAAgB,cACd,QACA,MACA,UACA,SACY;CACZ,MAAM,UAAU,mBAAmB,IAAI;CACvC,IAAI,CAAC,SAAS,aAAa,CAAC;CAC5B,MAAM,gBAAgB;EACpB,MAAM,SAAS,SAAS;EACxB,KAAK,MAAM,OAAO,OAAO,YAAY,GAAG,OAAO,WAAW,GAAG;CAC/D;CACA,IAAI,QAA8C;CAClD,MAAM,UAAU,OAAO,UAAU,QAAQ,SAAS,QAAQ,QAAQ;EAChE,eAAe;GACb,IAAI,OAAO;GACX,QAAQ,iBAAiB;IACvB,QAAQ;IACR,QAAQ;GACV,GAAA,GAAoB;EACtB;EACA,UAAU;EACV,WAAW,WAAW,QAAQ,WAAW,MAAM;CACjD,CAAC;CACD,aAAa;EACX,IAAI,OAAO,aAAa,KAAK;EAC7B,QAAQ;CACV;AACF;;;;;;AAOA,SAAgB,WACd,UACA,MACA,UACA,SACY;CAEZ,IAAI;CACJ,MAAM,SAAS,WAA2B;EACxC,IAAI,SAAS,KAAA,GAAW,OAAO,cAAc,QAAQ,MAAM,UAAU,OAAO;CAC9E;CACA,MAAM,SAAS,YAAY,SAAS;CACpC,IAAI,QAAQ,MAAM,MAAM;MAKtB,OAAO,+BAAsB,CAC1B,MAAM,WAAW,MAAM,aAAa,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CACzD,YAAY,CAAC,CAAC;CACnB,aAAa;EACX,OAAO;EACP,OAAO;CACT;AACF"}
1
+ {"version":3,"file":"live-C2Sck5PO.js","names":[],"sources":["../../client/realtime/live.ts"],"sourcesContent":["import type { QueryResource } from \"../QueryResource\";\nimport type { ChannelPattern } from \"../useChannel\";\nimport { EVENT_COALESCE_MS } from \"./useChannelSubscription\";\nimport type { ChannelParamValues, RealtimeSocket } from \"./RealtimeClient\";\nimport { loadedModule } from \"../lazyModule\";\nimport { realtime } from \"./loader\";\n\n/**\n * `useQuery`'s `live` option: the channel whose events and resyncs refetch\n * the query. A pattern without params (`\"user\"`), `[pattern, params]`, or\n * `{ channel, params }`.\n */\nexport type LiveChannel =\n | ChannelPattern\n | readonly [ChannelPattern, ChannelParamValues]\n | { channel: ChannelPattern; params?: ChannelParamValues };\n\nexport function resolveLiveChannel(\n live: LiveChannel | null | undefined | false,\n): { pattern: string; params: ChannelParamValues } | null {\n if (!live) return null;\n if (typeof live === \"string\") return { pattern: live, params: {} };\n if (Array.isArray(live)) return { pattern: live[0], params: live[1] ?? {} };\n const object = live as { channel: string; params?: ChannelParamValues };\n return { pattern: object.channel, params: object.params ?? {} };\n}\n\n/**\n * `useQuery`'s `live` subscription, loaded on first use by `followLive` in\n * `./loader` (#891). The channel's events refetch every cached variant of the\n * query (the rendered ones now), a burst of them once per\n * `EVENT_COALESCE_MS`; a resync refetches at once. `setOpen` follows whether\n * the channel is open, which pauses the query's polling.\n */\nexport function subscribeLive(\n socket: RealtimeSocket,\n live: LiveChannel,\n resource: () => QueryResource,\n setOpen: (open: boolean) => void,\n): () => void {\n const channel = resolveLiveChannel(live);\n if (!channel) return () => {};\n const refresh = () => {\n const target = resource();\n for (const key of target.variantKeys()) target.invalidate(key);\n };\n let timer: ReturnType<typeof setTimeout> | null = null;\n const release = socket.subscribe(channel.pattern, channel.params, {\n onEvent: () => {\n if (timer) return;\n timer = setTimeout(() => {\n timer = null;\n refresh();\n }, EVENT_COALESCE_MS);\n },\n onResync: refresh,\n onStatus: (status) => setOpen(status === \"open\"),\n });\n return () => {\n if (timer) clearTimeout(timer);\n release();\n };\n}\n\n/**\n * What `followLive` in `./loader` hands over to once this module is loaded:\n * subscribes on the provided socket, or the tab's client, loading that first\n * when it is not there yet. Returns the function that stops it.\n */\nexport function followLive(\n provided: RealtimeSocket | null,\n live: LiveChannel,\n resource: () => QueryResource,\n setOpen: (open: boolean) => void,\n): () => void {\n // `undefined` until it subscribes, `null` once stopped.\n let stop: (() => void) | null | undefined;\n const start = (socket: RealtimeSocket) => {\n if (stop === undefined) stop = subscribeLive(socket, live, resource, setOpen);\n };\n const socket = provided ?? realtime.client;\n if (socket) start(socket);\n // Its own `import()` of the client rather than `loadRealtimeClient`, which\n // would keep that in the entry chunk of every app with a `useQuery`. A\n // failed load leaves the channel closed, so the query keeps polling.\n else\n import(\"./RealtimeClient.js\")\n .then((module) => start(loadedModule(module).tabClient()))\n .catch(() => {});\n return () => {\n stop?.();\n stop = null;\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAiBA,SAAgB,mBACd,MACwD;CACxD,IAAI,CAAC,MAAM,OAAO;CAClB,IAAI,OAAO,SAAS,UAAU,OAAO;EAAE,SAAS;EAAM,QAAQ,CAAC;CAAE;CACjE,IAAI,MAAM,QAAQ,IAAI,GAAG,OAAO;EAAE,SAAS,KAAK;EAAI,QAAQ,KAAK,MAAM,CAAC;CAAE;CAC1E,MAAM,SAAS;CACf,OAAO;EAAE,SAAS,OAAO;EAAS,QAAQ,OAAO,UAAU,CAAC;CAAE;AAChE;;;;;;;;AASA,SAAgB,cACd,QACA,MACA,UACA,SACY;CACZ,MAAM,UAAU,mBAAmB,IAAI;CACvC,IAAI,CAAC,SAAS,aAAa,CAAC;CAC5B,MAAM,gBAAgB;EACpB,MAAM,SAAS,SAAS;EACxB,KAAK,MAAM,OAAO,OAAO,YAAY,GAAG,OAAO,WAAW,GAAG;CAC/D;CACA,IAAI,QAA8C;CAClD,MAAM,UAAU,OAAO,UAAU,QAAQ,SAAS,QAAQ,QAAQ;EAChE,eAAe;GACb,IAAI,OAAO;GACX,QAAQ,iBAAiB;IACvB,QAAQ;IACR,QAAQ;GACV,GAAA,GAAoB;EACtB;EACA,UAAU;EACV,WAAW,WAAW,QAAQ,WAAW,MAAM;CACjD,CAAC;CACD,aAAa;EACX,IAAI,OAAO,aAAa,KAAK;EAC7B,QAAQ;CACV;AACF;;;;;;AAOA,SAAgB,WACd,UACA,MACA,UACA,SACY;CAEZ,IAAI;CACJ,MAAM,SAAS,WAA2B;EACxC,IAAI,SAAS,KAAA,GAAW,OAAO,cAAc,QAAQ,MAAM,UAAU,OAAO;CAC9E;CACA,MAAM,SAAS,YAAY,SAAS;CACpC,IAAI,QAAQ,MAAM,MAAM;MAKtB,OAAO,+BAAsB,CAC1B,MAAM,WAAW,MAAM,aAAa,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CACzD,YAAY,CAAC,CAAC;CACnB,aAAa;EACX,OAAO;EACP,OAAO;CACT;AACF"}
@@ -1,4 +1,4 @@
1
- import { X as applyParams, Y as toVariantKey } from "./ThemeProvider-BstCYMfV.js";
1
+ import { X as applyParams, Y as toVariantKey } from "./ThemeProvider-G2g5Z1ZS.js";
2
2
  import { p as mutationErrorFromBody, s as isObject } from "./MutationError-DuKqBW8o.js";
3
3
  //#region client/mutationErrorHelpers.ts
4
4
  var FALLBACK_MESSAGE = "Something went wrong. Try again.";
@@ -112,4 +112,4 @@ function applyQueryUpdates(getResource, routeParams, updates, answer) {
112
112
  //#endregion
113
113
  export { applyQueryUpdates, withMutationErrorHelpers, writeQueryData };
114
114
 
115
- //# sourceMappingURL=mutationExtras-Bo8pvlEx.js.map
115
+ //# sourceMappingURL=mutationExtras-HC7AC6zn.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mutationExtras-Bo8pvlEx.js","names":[],"sources":["../../client/mutationErrorHelpers.ts","../../client/queryUpdates.ts"],"sourcesContent":["import {\n isObject,\n mutationErrorFromBody,\n type MutationErrorHelpers,\n type MutationValidationError,\n type WithMutationErrorHelpers,\n} from \"./MutationError\";\n\n// `error.list()` and `error.field(name)` on what the mutation hooks hand over.\n// Loaded with the hooks' other extras when one mounts (see\n// `./mutationModules`), so no route's entry chunk carries it (#915).\n//\n// `list` and `field` repeat `mutationErrorList` and `mutationErrorField` from\n// `./MutationError` on purpose. Those are public and synchronous, so they sit\n// in whatever chunk calls them; importing them here would put them, and so\n// this code, back in every entry chunk. `MutationError.helpers.test` runs the\n// same cases through both.\n\nconst FALLBACK_MESSAGE = \"Something went wrong. Try again.\";\n\n// `isValidationError`, which an import would keep in the entry chunk.\nfunction isValidationError(error: unknown): error is MutationValidationError {\n return isObject(error) && error.kind === \"validation_error\";\n}\n\n// A `QueryError`'s refusal, read as the mutation hooks read a body. Read by\n// shape, not `instanceof`, so a copy of the class from another bundle works.\nfunction unwrapQueryError(error: unknown): unknown {\n if (error instanceof Error && error.name === \"QueryError\" && \"body\" in error) {\n const { body, status } = error as Error & { body: unknown; status: number };\n return body == null ? error : mutationErrorFromBody(body, status);\n }\n return error;\n}\n\n// `error.list(fallback)`: see `mutationErrorList`.\nfunction list(\n error: unknown,\n fallback: string = FALLBACK_MESSAGE,\n): string[] {\n const value = unwrapQueryError(error);\n if (isValidationError(value)) {\n const messages = Object.values(value.messages ?? {})\n .flat()\n .filter((message) => typeof message === \"string\" && message !== \"\");\n return messages.length > 0 ? messages : [fallback];\n }\n if (\n isObject(value) &&\n !(value instanceof Error) &&\n value.kind !== \"server_error\" &&\n typeof value.message === \"string\" &&\n value.message !== \"\"\n ) {\n return [value.message];\n }\n return [fallback];\n}\n\n// `error.field(name)`: see `mutationErrorField`.\nfunction field(error: unknown, name: string): string[] {\n const value = unwrapQueryError(error);\n if (!isValidationError(value)) return [];\n const messages = value.messages?.[name];\n return Array.isArray(messages) ? [...messages] : [];\n}\n\n/**\n * Puts `list` and `field` on an error the hooks hand over, as non-enumerable\n * properties, so `toEqual`, a spread and `JSON.stringify` see the same object\n * as before. A key the error already has is left alone; a primitive or a\n * frozen value is returned as it is.\n *\n * @internal\n */\nexport function withMutationErrorHelpers<T>(error: T): WithMutationErrorHelpers<T> {\n if (!isObject(error) || !Object.isExtensible(error)) {\n return error as WithMutationErrorHelpers<T>;\n }\n const helpers: MutationErrorHelpers = {\n list: (fallback) => list(error, fallback),\n field: (name) => field(error, name),\n };\n for (const key of [\"list\", \"field\"] as const) {\n if (key in error) continue;\n Object.defineProperty(error, key, {\n value: helpers[key],\n configurable: true,\n writable: true,\n enumerable: false,\n });\n }\n return error as WithMutationErrorHelpers<T>;\n}\n","import type { QueryResource } from \"./QueryResource\";\nimport type { QueryTarget, QueryUpdate } from \"./useSetQueryData\";\nimport { applyParams } from \"../utils/applyParams\";\nimport { toVariantKey } from \"../utils/variantKey\";\n\n// The cache writes behind a mutation's `updates` and `useSetQueryData()`\n// (#897). Loaded with the hooks' other extras when one mounts (see\n// `./mutationModules`), so no route's entry chunk carries it (#915).\n\ntype Resolve = (key: string) => QueryResource;\n\n/**\n * Write data the server just produced (a mutation's answer) into a variant,\n * with no refetch: unlike `mutate`, the value is not a guess to reconcile.\n * The variant counts as freshly fetched, so its `staleTime` starts again, and\n * a GET already on the wire for it is dropped when it lands, since it may\n * carry the data from before the write. A reader suspended on the variant\n * wakes up with it (#897). Here rather than on `QueryResource`, which every\n * entry chunk carries (#915).\n */\nfunction setVariant(resource: QueryResource, variantKey: string, data: unknown) {\n resource.dropHttpCache(variantKey);\n resource.markApplied(variantKey);\n const store = resource.store.getValue();\n resource.fill(store, variantKey, data, Date.now());\n resource.store.next(store);\n}\n\n/** The value to write, or a function of the cached one. */\nexport type WriteQueryNext = { value: unknown } | { update: (current: any) => unknown };\n\n/**\n * Write into every variant `target` names. `next` is the value to write, or\n * a function of the cached value; a function skips a variant with nothing\n * cached. A value seeds a single variant that is not cached yet; a predicate\n * only ever reaches variants that are.\n */\nexport function writeQueryData(\n getResource: Resolve,\n routeParams: Record<string, any>,\n target: QueryTarget<any>,\n next: WriteQueryNext,\n) {\n const { path, params = {}, search = {} } = target;\n const resource = getResource(applyParams(String(path), { ...routeParams, ...params }));\n const write = (variantKey: string) => {\n if (\"value\" in next) {\n setVariant(resource, variantKey, next.value);\n return;\n }\n const state = resource.peek(variantKey);\n if (!state?.hasData) return;\n setVariant(resource, variantKey, next.update(state.data));\n };\n\n if (typeof search === \"function\") {\n for (const variantKey of resource.variantKeys()) {\n if (!resource.peek(variantKey)?.hasData) continue;\n if (search(new URLSearchParams(variantKey))) write(variantKey);\n }\n return;\n }\n write(toVariantKey(search));\n}\n\n/**\n * Write a mutation's `updates` with its answer.\n */\nexport function applyQueryUpdates(\n getResource: Resolve,\n routeParams: Record<string, any>,\n updates: ReadonlyArray<QueryUpdate<any>> | undefined,\n answer: unknown,\n) {\n for (const update of updates ?? []) {\n const { data } = update as { data?: (answer: any, current: any) => any };\n writeQueryData(\n getResource,\n routeParams,\n update,\n data ? { update: (current) => data(answer, current) } : { value: answer },\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"mutationExtras-HC7AC6zn.js","names":[],"sources":["../../client/mutationErrorHelpers.ts","../../client/queryUpdates.ts"],"sourcesContent":["import {\n isObject,\n mutationErrorFromBody,\n type MutationErrorHelpers,\n type MutationValidationError,\n type WithMutationErrorHelpers,\n} from \"./MutationError\";\n\n// `error.list()` and `error.field(name)` on what the mutation hooks hand over.\n// Loaded with the hooks' other extras when one mounts (see\n// `./mutationModules`), so no route's entry chunk carries it (#915).\n//\n// `list` and `field` repeat `mutationErrorList` and `mutationErrorField` from\n// `./MutationError` on purpose. Those are public and synchronous, so they sit\n// in whatever chunk calls them; importing them here would put them, and so\n// this code, back in every entry chunk. `MutationError.helpers.test` runs the\n// same cases through both.\n\nconst FALLBACK_MESSAGE = \"Something went wrong. Try again.\";\n\n// `isValidationError`, which an import would keep in the entry chunk.\nfunction isValidationError(error: unknown): error is MutationValidationError {\n return isObject(error) && error.kind === \"validation_error\";\n}\n\n// A `QueryError`'s refusal, read as the mutation hooks read a body. Read by\n// shape, not `instanceof`, so a copy of the class from another bundle works.\nfunction unwrapQueryError(error: unknown): unknown {\n if (error instanceof Error && error.name === \"QueryError\" && \"body\" in error) {\n const { body, status } = error as Error & { body: unknown; status: number };\n return body == null ? error : mutationErrorFromBody(body, status);\n }\n return error;\n}\n\n// `error.list(fallback)`: see `mutationErrorList`.\nfunction list(\n error: unknown,\n fallback: string = FALLBACK_MESSAGE,\n): string[] {\n const value = unwrapQueryError(error);\n if (isValidationError(value)) {\n const messages = Object.values(value.messages ?? {})\n .flat()\n .filter((message) => typeof message === \"string\" && message !== \"\");\n return messages.length > 0 ? messages : [fallback];\n }\n if (\n isObject(value) &&\n !(value instanceof Error) &&\n value.kind !== \"server_error\" &&\n typeof value.message === \"string\" &&\n value.message !== \"\"\n ) {\n return [value.message];\n }\n return [fallback];\n}\n\n// `error.field(name)`: see `mutationErrorField`.\nfunction field(error: unknown, name: string): string[] {\n const value = unwrapQueryError(error);\n if (!isValidationError(value)) return [];\n const messages = value.messages?.[name];\n return Array.isArray(messages) ? [...messages] : [];\n}\n\n/**\n * Puts `list` and `field` on an error the hooks hand over, as non-enumerable\n * properties, so `toEqual`, a spread and `JSON.stringify` see the same object\n * as before. A key the error already has is left alone; a primitive or a\n * frozen value is returned as it is.\n *\n * @internal\n */\nexport function withMutationErrorHelpers<T>(error: T): WithMutationErrorHelpers<T> {\n if (!isObject(error) || !Object.isExtensible(error)) {\n return error as WithMutationErrorHelpers<T>;\n }\n const helpers: MutationErrorHelpers = {\n list: (fallback) => list(error, fallback),\n field: (name) => field(error, name),\n };\n for (const key of [\"list\", \"field\"] as const) {\n if (key in error) continue;\n Object.defineProperty(error, key, {\n value: helpers[key],\n configurable: true,\n writable: true,\n enumerable: false,\n });\n }\n return error as WithMutationErrorHelpers<T>;\n}\n","import type { QueryResource } from \"./QueryResource\";\nimport type { QueryTarget, QueryUpdate } from \"./useSetQueryData\";\nimport { applyParams } from \"../utils/applyParams\";\nimport { toVariantKey } from \"../utils/variantKey\";\n\n// The cache writes behind a mutation's `updates` and `useSetQueryData()`\n// (#897). Loaded with the hooks' other extras when one mounts (see\n// `./mutationModules`), so no route's entry chunk carries it (#915).\n\ntype Resolve = (key: string) => QueryResource;\n\n/**\n * Write data the server just produced (a mutation's answer) into a variant,\n * with no refetch: unlike `mutate`, the value is not a guess to reconcile.\n * The variant counts as freshly fetched, so its `staleTime` starts again, and\n * a GET already on the wire for it is dropped when it lands, since it may\n * carry the data from before the write. A reader suspended on the variant\n * wakes up with it (#897). Here rather than on `QueryResource`, which every\n * entry chunk carries (#915).\n */\nfunction setVariant(resource: QueryResource, variantKey: string, data: unknown) {\n resource.dropHttpCache(variantKey);\n resource.markApplied(variantKey);\n const store = resource.store.getValue();\n resource.fill(store, variantKey, data, Date.now());\n resource.store.next(store);\n}\n\n/** The value to write, or a function of the cached one. */\nexport type WriteQueryNext = { value: unknown } | { update: (current: any) => unknown };\n\n/**\n * Write into every variant `target` names. `next` is the value to write, or\n * a function of the cached value; a function skips a variant with nothing\n * cached. A value seeds a single variant that is not cached yet; a predicate\n * only ever reaches variants that are.\n */\nexport function writeQueryData(\n getResource: Resolve,\n routeParams: Record<string, any>,\n target: QueryTarget<any>,\n next: WriteQueryNext,\n) {\n const { path, params = {}, search = {} } = target;\n const resource = getResource(applyParams(String(path), { ...routeParams, ...params }));\n const write = (variantKey: string) => {\n if (\"value\" in next) {\n setVariant(resource, variantKey, next.value);\n return;\n }\n const state = resource.peek(variantKey);\n if (!state?.hasData) return;\n setVariant(resource, variantKey, next.update(state.data));\n };\n\n if (typeof search === \"function\") {\n for (const variantKey of resource.variantKeys()) {\n if (!resource.peek(variantKey)?.hasData) continue;\n if (search(new URLSearchParams(variantKey))) write(variantKey);\n }\n return;\n }\n write(toVariantKey(search));\n}\n\n/**\n * Write a mutation's `updates` with its answer.\n */\nexport function applyQueryUpdates(\n getResource: Resolve,\n routeParams: Record<string, any>,\n updates: ReadonlyArray<QueryUpdate<any>> | undefined,\n answer: unknown,\n) {\n for (const update of updates ?? []) {\n const { data } = update as { data?: (answer: any, current: any) => any };\n writeQueryData(\n getResource,\n routeParams,\n update,\n data ? { update: (current) => data(answer, current) } : { value: answer },\n );\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { dt as equalJitter } from "./ThemeProvider-BstCYMfV.js";
1
+ import { dt as equalJitter } from "./ThemeProvider-G2g5Z1ZS.js";
2
2
  //#region client/subscriptionStream.ts
3
3
  var MIN_RETRY_MS = 1e3;
4
4
  var MAX_RETRY_MS = 3e4;
@@ -175,4 +175,4 @@ async function* readEvents(body) {
175
175
  //#endregion
176
176
  export { follow, readEvents };
177
177
 
178
- //# sourceMappingURL=subscriptionStream-CtwEcda9.js.map
178
+ //# sourceMappingURL=subscriptionStream-CaTWWJwt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"subscriptionStream-CtwEcda9.js","names":[],"sources":["../../client/subscriptionStream.ts"],"sourcesContent":["import type { Dispatch, SetStateAction } from \"react\";\n\nimport type { ChangeFeedMessage } from \"../services/change-feed/wire\";\nimport { equalJitter } from \"./retryPolicy\";\nimport type { SubscriptionConfig, SubscriptionStatus } from \"./useSubscription\";\n\n// `useSubscription`'s connection: the SSE request, its reader and the\n// reconnect loop. Loaded by the hook with a dynamic `import()` when it first\n// connects, so it lands in a chunk of its own rather than in the entry chunk\n// every route loads (#891). Import it as a type only from anywhere else.\n\nconst MIN_RETRY_MS = 1_000;\nconst MAX_RETRY_MS = 30_000;\n\n/** The server answered in a way retrying will not change (401, 403, 404). */\nclass FatalStatus extends Error {\n constructor(readonly status: number) {\n super(`The subscription was refused with ${status}.`);\n }\n}\n\nexport interface SubscriptionState {\n status: SubscriptionStatus;\n cursor: string | null;\n error: Error | null;\n}\n\nexport interface FollowOptions {\n endpoint: string;\n pauseWhenHidden: boolean;\n /** Where to resume; advanced as events arrive. */\n cursor: { current: string | null };\n callbacks: { current: SubscriptionConfig<unknown> };\n setState: Dispatch<SetStateAction<SubscriptionState>>;\n /** The jitter's random source; `Math.random` unless a test passes its own. */\n random?: () => number;\n}\n\n/**\n * Follows `endpoint` until the returned function is called: connects,\n * reconnects with backoff, pauses while the tab is hidden, and reports\n * through `setState` and `callbacks`.\n *\n * The backoff step is 1s, doubling per failed attempt up to 30s, and back to\n * 1s once a stream reaches `ready`. Each wait is jittered (\"equal jitter\", a\n * random point between half the step and all of it): a server restart ends\n * every open tab's stream in the same instant, and an exact schedule would\n * bring them all back in the same instant too. A `Retry-After` the server\n * sent is waited out exactly.\n */\nexport function follow({\n endpoint,\n pauseWhenHidden,\n cursor,\n callbacks,\n setState,\n random = Math.random,\n}: FollowOptions): () => void {\n let stopped = false;\n let request: AbortController | null = null;\n let resume: (() => void) | null = null;\n let retryMs = MIN_RETRY_MS;\n const hidden = () =>\n pauseWhenHidden && typeof document !== \"undefined\" && document.visibilityState === \"hidden\";\n const onVisibilityChange = () => {\n if (hidden()) request?.abort();\n else resume?.();\n };\n if (typeof document !== \"undefined\") {\n document.addEventListener(\"visibilitychange\", onVisibilityChange);\n }\n const wait = (ms: number) =>\n new Promise<void>((resolve) => {\n const timer = setTimeout(done, ms);\n function done() {\n clearTimeout(timer);\n resume = null;\n resolve();\n }\n // Shown again, or unmounted: stop waiting.\n resume = done;\n });\n\n void (async () => {\n while (!stopped) {\n if (hidden()) {\n setState((s) => ({ ...s, status: \"paused\" }));\n await new Promise<void>((resolve) => (resume = resolve));\n resume = null;\n continue;\n }\n setState((s) => ({ ...s, status: \"connecting\" }));\n const controller = (request = new AbortController());\n let delay = retryMs;\n let exact = false;\n try {\n const headers: Record<string, string> = { Accept: \"text/event-stream\" };\n if (cursor.current) headers[\"Last-Event-ID\"] = cursor.current;\n const response = await fetch(endpoint, { headers, signal: controller.signal });\n if (!response.ok || !response.body) {\n const status = response.status;\n if (status >= 400 && status < 500 && status !== 408 && status !== 429) {\n throw new FatalStatus(status);\n }\n const retryAfter = Number(response.headers.get(\"Retry-After\"));\n if (Number.isFinite(retryAfter) && retryAfter > 0) {\n delay = retryAfter * 1000;\n exact = true;\n }\n throw new Error(`The subscription answered ${status}.`);\n }\n for await (const { id, message } of readEvents(response.body)) {\n if (stopped) return;\n if (id !== undefined) cursor.current = id;\n if (message.type === \"ready\") {\n retryMs = MIN_RETRY_MS;\n delay = MIN_RETRY_MS;\n setState({ status: \"open\", cursor: cursor.current, error: null });\n } else {\n setState((s) => ({ ...s, cursor: cursor.current }));\n if (message.type === \"change\") callbacks.current.onChange?.(message as never);\n else if (message.type === \"reset\") callbacks.current.onReset?.(message as never);\n }\n }\n } catch (error) {\n if (stopped) return;\n if (error instanceof FatalStatus) {\n setState((s) => ({ ...s, status: \"closed\", error }));\n return;\n }\n // Aborted because the tab was hidden: the loop pauses instead.\n if (controller.signal.aborted) continue;\n setState((s) => ({ ...s, error: error as Error }));\n }\n if (stopped || controller.signal.aborted) continue;\n // The stream ended or failed: try again, a little later each time.\n setState((s) => ({ ...s, status: \"connecting\" }));\n await wait(exact ? delay : equalJitter(delay, random));\n retryMs = Math.min(retryMs * 2, MAX_RETRY_MS);\n }\n })();\n\n return () => {\n stopped = true;\n request?.abort();\n resume?.();\n if (typeof document !== \"undefined\") {\n document.removeEventListener(\"visibilitychange\", onVisibilityChange);\n }\n };\n}\n\n/**\n * The events of an SSE body: `id` and the JSON `data`. Comments (keepalives)\n * and events without data are skipped; an event whose data is not JSON is\n * dropped rather than ending the stream.\n */\nexport async function* readEvents(\n body: ReadableStream<Uint8Array>,\n): AsyncGenerator<{ id?: string; message: ChangeFeedMessage }> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) return;\n // `ChangeFeed.stream` writes `\\n` only; a proxy's `\\r\\n` is folded here.\n buffer = (buffer + decoder.decode(value, { stream: true })).replace(/\\r\\n?/g, \"\\n\");\n let boundary = buffer.indexOf(\"\\n\\n\");\n while (boundary !== -1) {\n const block = buffer.slice(0, boundary);\n buffer = buffer.slice(boundary + 2);\n boundary = buffer.indexOf(\"\\n\\n\");\n let id: string | undefined;\n const data: string[] = [];\n for (const line of block.split(\"\\n\")) {\n if (line === \"\" || line.startsWith(\":\")) continue;\n const colon = line.indexOf(\":\");\n const field = colon === -1 ? line : line.slice(0, colon);\n let text = colon === -1 ? \"\" : line.slice(colon + 1);\n if (text.startsWith(\" \")) text = text.slice(1);\n if (field === \"id\") id = text;\n else if (field === \"data\") data.push(text);\n }\n if (data.length === 0) continue;\n try {\n yield { id, message: JSON.parse(data.join(\"\\n\")) };\n } catch {\n // Not JSON: not ours to apply.\n }\n }\n }\n } finally {\n await reader.cancel().catch(() => {});\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"subscriptionStream-CaTWWJwt.js","names":[],"sources":["../../client/subscriptionStream.ts"],"sourcesContent":["import type { Dispatch, SetStateAction } from \"react\";\n\nimport type { ChangeFeedMessage } from \"../services/change-feed/wire\";\nimport { equalJitter } from \"./retryPolicy\";\nimport type { SubscriptionConfig, SubscriptionStatus } from \"./useSubscription\";\n\n// `useSubscription`'s connection: the SSE request, its reader and the\n// reconnect loop. Loaded by the hook with a dynamic `import()` when it first\n// connects, so it lands in a chunk of its own rather than in the entry chunk\n// every route loads (#891). Import it as a type only from anywhere else.\n\nconst MIN_RETRY_MS = 1_000;\nconst MAX_RETRY_MS = 30_000;\n\n/** The server answered in a way retrying will not change (401, 403, 404). */\nclass FatalStatus extends Error {\n constructor(readonly status: number) {\n super(`The subscription was refused with ${status}.`);\n }\n}\n\nexport interface SubscriptionState {\n status: SubscriptionStatus;\n cursor: string | null;\n error: Error | null;\n}\n\nexport interface FollowOptions {\n endpoint: string;\n pauseWhenHidden: boolean;\n /** Where to resume; advanced as events arrive. */\n cursor: { current: string | null };\n callbacks: { current: SubscriptionConfig<unknown> };\n setState: Dispatch<SetStateAction<SubscriptionState>>;\n /** The jitter's random source; `Math.random` unless a test passes its own. */\n random?: () => number;\n}\n\n/**\n * Follows `endpoint` until the returned function is called: connects,\n * reconnects with backoff, pauses while the tab is hidden, and reports\n * through `setState` and `callbacks`.\n *\n * The backoff step is 1s, doubling per failed attempt up to 30s, and back to\n * 1s once a stream reaches `ready`. Each wait is jittered (\"equal jitter\", a\n * random point between half the step and all of it): a server restart ends\n * every open tab's stream in the same instant, and an exact schedule would\n * bring them all back in the same instant too. A `Retry-After` the server\n * sent is waited out exactly.\n */\nexport function follow({\n endpoint,\n pauseWhenHidden,\n cursor,\n callbacks,\n setState,\n random = Math.random,\n}: FollowOptions): () => void {\n let stopped = false;\n let request: AbortController | null = null;\n let resume: (() => void) | null = null;\n let retryMs = MIN_RETRY_MS;\n const hidden = () =>\n pauseWhenHidden && typeof document !== \"undefined\" && document.visibilityState === \"hidden\";\n const onVisibilityChange = () => {\n if (hidden()) request?.abort();\n else resume?.();\n };\n if (typeof document !== \"undefined\") {\n document.addEventListener(\"visibilitychange\", onVisibilityChange);\n }\n const wait = (ms: number) =>\n new Promise<void>((resolve) => {\n const timer = setTimeout(done, ms);\n function done() {\n clearTimeout(timer);\n resume = null;\n resolve();\n }\n // Shown again, or unmounted: stop waiting.\n resume = done;\n });\n\n void (async () => {\n while (!stopped) {\n if (hidden()) {\n setState((s) => ({ ...s, status: \"paused\" }));\n await new Promise<void>((resolve) => (resume = resolve));\n resume = null;\n continue;\n }\n setState((s) => ({ ...s, status: \"connecting\" }));\n const controller = (request = new AbortController());\n let delay = retryMs;\n let exact = false;\n try {\n const headers: Record<string, string> = { Accept: \"text/event-stream\" };\n if (cursor.current) headers[\"Last-Event-ID\"] = cursor.current;\n const response = await fetch(endpoint, { headers, signal: controller.signal });\n if (!response.ok || !response.body) {\n const status = response.status;\n if (status >= 400 && status < 500 && status !== 408 && status !== 429) {\n throw new FatalStatus(status);\n }\n const retryAfter = Number(response.headers.get(\"Retry-After\"));\n if (Number.isFinite(retryAfter) && retryAfter > 0) {\n delay = retryAfter * 1000;\n exact = true;\n }\n throw new Error(`The subscription answered ${status}.`);\n }\n for await (const { id, message } of readEvents(response.body)) {\n if (stopped) return;\n if (id !== undefined) cursor.current = id;\n if (message.type === \"ready\") {\n retryMs = MIN_RETRY_MS;\n delay = MIN_RETRY_MS;\n setState({ status: \"open\", cursor: cursor.current, error: null });\n } else {\n setState((s) => ({ ...s, cursor: cursor.current }));\n if (message.type === \"change\") callbacks.current.onChange?.(message as never);\n else if (message.type === \"reset\") callbacks.current.onReset?.(message as never);\n }\n }\n } catch (error) {\n if (stopped) return;\n if (error instanceof FatalStatus) {\n setState((s) => ({ ...s, status: \"closed\", error }));\n return;\n }\n // Aborted because the tab was hidden: the loop pauses instead.\n if (controller.signal.aborted) continue;\n setState((s) => ({ ...s, error: error as Error }));\n }\n if (stopped || controller.signal.aborted) continue;\n // The stream ended or failed: try again, a little later each time.\n setState((s) => ({ ...s, status: \"connecting\" }));\n await wait(exact ? delay : equalJitter(delay, random));\n retryMs = Math.min(retryMs * 2, MAX_RETRY_MS);\n }\n })();\n\n return () => {\n stopped = true;\n request?.abort();\n resume?.();\n if (typeof document !== \"undefined\") {\n document.removeEventListener(\"visibilitychange\", onVisibilityChange);\n }\n };\n}\n\n/**\n * The events of an SSE body: `id` and the JSON `data`. Comments (keepalives)\n * and events without data are skipped; an event whose data is not JSON is\n * dropped rather than ending the stream.\n */\nexport async function* readEvents(\n body: ReadableStream<Uint8Array>,\n): AsyncGenerator<{ id?: string; message: ChangeFeedMessage }> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) return;\n // `ChangeFeed.stream` writes `\\n` only; a proxy's `\\r\\n` is folded here.\n buffer = (buffer + decoder.decode(value, { stream: true })).replace(/\\r\\n?/g, \"\\n\");\n let boundary = buffer.indexOf(\"\\n\\n\");\n while (boundary !== -1) {\n const block = buffer.slice(0, boundary);\n buffer = buffer.slice(boundary + 2);\n boundary = buffer.indexOf(\"\\n\\n\");\n let id: string | undefined;\n const data: string[] = [];\n for (const line of block.split(\"\\n\")) {\n if (line === \"\" || line.startsWith(\":\")) continue;\n const colon = line.indexOf(\":\");\n const field = colon === -1 ? line : line.slice(0, colon);\n let text = colon === -1 ? \"\" : line.slice(colon + 1);\n if (text.startsWith(\" \")) text = text.slice(1);\n if (field === \"id\") id = text;\n else if (field === \"data\") data.push(text);\n }\n if (data.length === 0) continue;\n try {\n yield { id, message: JSON.parse(data.join(\"\\n\")) };\n } catch {\n // Not JSON: not ours to apply.\n }\n }\n }\n } finally {\n await reader.cancel().catch(() => {});\n }\n}\n"],"mappings":"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"}
@@ -149,7 +149,10 @@ export declare function otherBuild(response: Response, clientBuild: string | und
149
149
  * onto `url` was recorded inside `cooldownMs`, `"storage"` when no marker can
150
150
  * be read at all, otherwise `"ok"`. With `claim` true it also records the
151
151
  * reload, and answers `"ok"` only once the record was written and read back
152
- * unchanged; a caller navigates on nothing less.
152
+ * unchanged; a caller navigates on nothing less. With `"tidy"` it only looks
153
+ * at `window.name`: a gemi marker with no live entry for this origin (expired,
154
+ * from the future, another origin's, or one that does not parse) is cleared
155
+ * to `""` and `"ok"` answered; `"cooldown"` while an entry is still live.
153
156
  *
154
157
  * Two places can hold the marker:
155
158
  *
@@ -170,7 +173,7 @@ export declare function otherBuild(response: Response, clientBuild: string | und
170
173
  * from the future, after the clock was set back — are dropped as a new one is
171
174
  * written, so the marker holds only the reloads it still guards.
172
175
  */
173
- export declare function chunkReloadGuard(key: string, url: string, cooldownMs: number, claim: boolean): "ok" | "cooldown" | "storage";
176
+ export declare function chunkReloadGuard(key: string, url: string, cooldownMs: number, claim: boolean | "tidy"): "ok" | "cooldown" | "storage";
174
177
  /**
175
178
  * The same guard as a classic script body, for the module the server sends in
176
179
  * place of a chunk it does not have. It reloads once per URL per cooldown;
@@ -1 +1 @@
1
- {"version":3,"file":"chunkLoadRecovery.d.ts","sourceRoot":"","sources":["../../client/chunkLoadRecovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,mFAAmF;AACnF,eAAO,MAAM,mBAAmB,sBAAsB,CAAC;AAEvD;;;;GAIG;AACH,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C,kFAAkF;AAClF,eAAO,MAAM,gCAAgC,QAAS,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,GAAG,KAAK,CAAC;AAElF;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC;AAEzE,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,oBAAoB,CAAC;IAC7B,+DAA+D;IAC/D,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,uEAAuE;IACvE,GAAG,EAAE,MAAM,CAAC;IACZ,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACvC,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,OAAO,GAAG,IAAI,CAAC;IACtE;;;;;OAKG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,GAAG,IAAI,CAAC;CACrE;AAmBD;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,wBAAwB,GAAG,KAAK,GAAG,SAAS,QAG5F;AAED,iEAAiE;AACjE,wBAAgB,wBAAwB,SAIvC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,SAEhC;AAWD;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAYxD;AAWD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,EACd,EAAE,MAAc,EAAE,GAAG,EAAE,GAAE;IAAE,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5E,OAAO,CAeT;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,GAAG,EACH,WAAW,EACX,WAAW,GACZ,EAAE;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAYV;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAG7F;AAsCD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,OAAO,GACb,IAAI,GAAG,UAAU,GAAG,SAAS,CAqF/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,MAAyC,GACpD,MAAM,CAQR"}
1
+ {"version":3,"file":"chunkLoadRecovery.d.ts","sourceRoot":"","sources":["../../client/chunkLoadRecovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,mFAAmF;AACnF,eAAO,MAAM,mBAAmB,sBAAsB,CAAC;AAEvD;;;;GAIG;AACH,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C,kFAAkF;AAClF,eAAO,MAAM,gCAAgC,QAAS,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,GAAG,KAAK,CAAC;AAElF;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC;AAEzE,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,oBAAoB,CAAC;IAC7B,+DAA+D;IAC/D,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,uEAAuE;IACvE,GAAG,EAAE,MAAM,CAAC;IACZ,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACvC,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,OAAO,GAAG,IAAI,CAAC;IACtE;;;;;OAKG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,GAAG,IAAI,CAAC;CACrE;AAmBD;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,wBAAwB,GAAG,KAAK,GAAG,SAAS,QAI5F;AAED,iEAAiE;AACjE,wBAAgB,wBAAwB,SAMvC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,SAEhC;AAWD;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAYxD;AAWD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,EACd,EAAE,MAAc,EAAE,GAAG,EAAE,GAAE;IAAE,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5E,OAAO,CAeT;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,GAAG,EACH,WAAW,EACX,WAAW,GACZ,EAAE;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAYV;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAG7F;AA2ED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,OAAO,GAAG,MAAM,GACtB,IAAI,GAAG,UAAU,GAAG,SAAS,CA8F/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,MAAyC,GACpD,MAAM,CAQR"}
@@ -1,4 +1,4 @@
1
- import { $ as QueryManagerProvider, A as useNavigate, C as loadDictionaryForRender, D as routeDataUrl, E as readRoutePayload, F as useLocation, G as realtime, H as configureRealtime, I as domainUrl, J as loadedModule, K as reconnectRealtime, L as isAbsoluteUrl, M as I18nProvider, N as ServerDataContext, O as useRoute, P as ServerDataProvider, Q as QueryManagerContext, S as loadDictionary, T as setActiveLocale, U as followLive, V as RealtimeContext, X as applyParams$1, Y as toVariantKey, Z as QueryConfigContext, _ as isChunkLoadError, _t as Subject, a as useRouteTransition, at as resetAuthenticationIncident, b as recoverFromBuildMismatch, c as ClientRouterContext, ct as isExternalRedirect, d as ComponentsProvider, et as USER_QUERY_CONFIG_KEYS, f as initialViewModulesReady, ft as isRetryableQueryError, g as configureChunkLoadRecovery, gt as QueryError, h as CHUNK_RELOAD_MARKER, ht as shouldRetryQuery, i as RouteTransitionProvider, it as reportAuthenticationRefusal, j as I18nContext, k as useSearchParams, l as ClientRouterProvider, lt as safeRedirectPath, m as subscribeViewModules, mt as retryDelayFor, n as useTheme, nt as DEFAULT_STALE_TIME, o as useChannelSubscription, ot as setAuthenticationNavigator, p as loadViewModule, q as loadLazy, r as m, rt as configureAuthenticationErrors, s as useCoalesced, st as INTENDED_URL_PARAM, t as ThemeProvider, tt as pickDefined, u as ComponentsContext, ut as readResponseBody, v as navigationStarted, w as registerDictionary, x as recoverFromChunkLoadError, y as otherBuild, z as Action } from "../chunks/ThemeProvider-BstCYMfV.js";
1
+ import { $ as QueryManagerProvider, A as useNavigate, C as loadDictionaryForRender, D as routeDataUrl, E as readRoutePayload, F as useLocation, G as realtime, H as configureRealtime, I as domainUrl, J as loadedModule, K as reconnectRealtime, L as isAbsoluteUrl, M as I18nProvider, N as ServerDataContext, O as useRoute, P as ServerDataProvider, Q as QueryManagerContext, S as loadDictionary, T as setActiveLocale, U as followLive, V as RealtimeContext, X as applyParams$1, Y as toVariantKey, Z as QueryConfigContext, _ as isChunkLoadError, _t as Subject, a as useRouteTransition, at as resetAuthenticationIncident, b as recoverFromBuildMismatch, c as ClientRouterContext, ct as isExternalRedirect, d as ComponentsProvider, et as USER_QUERY_CONFIG_KEYS, f as initialViewModulesReady, ft as isRetryableQueryError, g as configureChunkLoadRecovery, gt as QueryError, h as CHUNK_RELOAD_MARKER, ht as shouldRetryQuery, i as RouteTransitionProvider, it as reportAuthenticationRefusal, j as I18nContext, k as useSearchParams, l as ClientRouterProvider, lt as safeRedirectPath, m as subscribeViewModules, mt as retryDelayFor, n as useTheme, nt as DEFAULT_STALE_TIME, o as useChannelSubscription, ot as setAuthenticationNavigator, p as loadViewModule, q as loadLazy, r as m, rt as configureAuthenticationErrors, s as useCoalesced, st as INTENDED_URL_PARAM, t as ThemeProvider, tt as pickDefined, u as ComponentsContext, ut as readResponseBody, v as navigationStarted, w as registerDictionary, x as recoverFromChunkLoadError, y as otherBuild, z as Action } from "../chunks/ThemeProvider-G2g5Z1ZS.js";
2
2
  import { n as RouteStateContext, r as RouteStateProvider, t as useParams } from "../chunks/useParams-BN3XXfmG.js";
3
3
  import { a as isNetworkError, c as isPermissionError, d as isValidationError, f as mutationErrorField, h as mutationErrorList, i as isHttpError, l as isRateLimitError, m as mutationErrorKind, n as isCsrfError, o as isNotFoundError, p as mutationErrorFromBody, r as isFormError, s as isObject, t as isAuthenticationError, u as isServerError } from "../chunks/MutationError-DuKqBW8o.js";
4
4
  import { Fragment, StrictMode, Suspense, createContext, createElement, isValidElement, lazy, memo, use, useCallback, useContext, useDeferredValue, useEffect, useInsertionEffect, useMemo, useRef, useState, useSyncExternalStore, useTransition } from "react";
@@ -562,7 +562,7 @@ var SOCKET_ID_HEADER = "x-gemi-socket";
562
562
  */
563
563
  var mutationExtras = {
564
564
  current: null,
565
- load: () => import("../chunks/mutationExtras-Bo8pvlEx.js")
565
+ load: () => import("../chunks/mutationExtras-HC7AC6zn.js")
566
566
  };
567
567
  /** Starts loading `./mutationExtras`: the hooks' mount effect. */
568
568
  function preloadMutationExtras() {
@@ -920,7 +920,7 @@ function useMutate() {
920
920
  //#region client/fetchFile.ts
921
921
  var request = {
922
922
  current: null,
923
- load: () => import("../chunks/fetchFileRequest-BD9pg9RL.js")
923
+ load: () => import("../chunks/fetchFileRequest-Bzva9J59.js")
924
924
  };
925
925
  /**
926
926
  * Downloads a file route's body as a `Blob`.
@@ -986,7 +986,7 @@ function useSetQueryData() {
986
986
  //#endregion
987
987
  //#region client/useSubscription.ts
988
988
  /** `./subscriptionStream`, loaded on first use. Replaceable in tests. */
989
- var streamModule = { load: () => import("../chunks/subscriptionStream-CtwEcda9.js") };
989
+ var streamModule = { load: () => import("../chunks/subscriptionStream-CaTWWJwt.js") };
990
990
  /**
991
991
  * Follows a route that answers with `ChangeFeed.stream`, as long as the
992
992
  * component is mounted: each change reaches `onChange`, in order, exactly
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import"../chunk-k1c0xd8r.js";function k(b){return b}function q(b){if((process.env.GEMI_REACT_COMPILER??"auto").toLowerCase()==="off")return!1;return b??!0}export{q as reactCompiler,k as defineConfig};
2
+ import"../chunk-vgxkt9vd.js";function k(b){return b}function q(b){if((process.env.GEMI_REACT_COMPILER??"auto").toLowerCase()==="off")return!1;return b??!0}export{q as reactCompiler,k as defineConfig};
3
3
 
4
4
  //# debugId=2F7F86887FCF6F1A64756E2164756E21
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{ca as c}from"../chunk-z9pq557m.js";import{cb as f,db as o}from"../chunk-8m9kgynj.js";import{Bd as A,Ed as n,Fd as u,Pd as r}from"../chunk-67zz58cw.js";import"../chunk-495k9h6p.js";import"../chunk-6rmz0mkm.js";import{nj as g,rj as v}from"../chunk-7zpjdwfq.js";import{Cj as h}from"../chunk-5zx4e2wa.js";import"../chunk-vr48swd0.js";import"../chunk-9dfrsj4m.js";import{mk as t}from"../chunk-ce73s4kh.js";import"../chunk-4s7st9y4.js";import"../chunk-8em2ebj1.js";import{ql as k}from"../chunk-8pfy75y6.js";import"../chunk-ejc0mbe3.js";import"../chunk-f02anz24.js";import{Hl as a}from"../chunk-fryj3asn.js";import"../chunk-k1c0xd8r.js";function E(){let z=Promise.resolve(),J=Promise.resolve(),Y=(Q,G)=>new Promise(($)=>{Q.write(G,()=>$())});return{stdout:(Q)=>{z=Y(process.stdout,Q)},stderr:(Q)=>{J=Y(process.stderr,Q)},flush:async()=>{await Promise.all([z,J])}}}function x(z){let J=z.writers??E();return{args:z.args,options:z.options,argv:z.argv,line:(Y="")=>J.stdout(`${Y}
2
+ import{ca as c}from"../chunk-dn20caf2.js";import{cb as f,db as o}from"../chunk-8m9kgynj.js";import{Bd as A,Ed as n,Fd as u,Pd as r}from"../chunk-h9taahxv.js";import"../chunk-495k9h6p.js";import"../chunk-mc8fdh65.js";import{qj as g,uj as v}from"../chunk-n914rs58.js";import{Fj as h}from"../chunk-g02gqhq0.js";import"../chunk-1705yamg.js";import"../chunk-gmcttf0f.js";import{pk as t}from"../chunk-beckfwe9.js";import"../chunk-wvq3c25z.js";import"../chunk-ftvc1a0k.js";import{tl as k}from"../chunk-ermvtpy9.js";import"../chunk-1x23scpn.js";import"../chunk-5bfrr8x5.js";import{Kl as a}from"../chunk-aycfrzh1.js";import"../chunk-vgxkt9vd.js";function E(){let z=Promise.resolve(),J=Promise.resolve(),Y=(Q,G)=>new Promise(($)=>{Q.write(G,()=>$())});return{stdout:(Q)=>{z=Y(process.stdout,Q)},stderr:(Q)=>{J=Y(process.stderr,Q)},flush:async()=>{await Promise.all([z,J])}}}function x(z){let J=z.writers??E();return{args:z.args,options:z.options,argv:z.argv,line:(Y="")=>J.stdout(`${Y}
3
3
  `),error:(Y)=>J.stderr(`${Y}
4
4
  `),fail:(Y,Q=1)=>{throw new A(Y,Q)}}}import b from"path";var Gz=u("encryption:rotate").describe("Re-encrypt encrypted columns that are still under an older key").arg("model",{description:"The model to rotate. Omit to rotate every model with encrypted columns"}).option("batchSize",{type:"number",default:500,description:"Rows read and rewritten per batch"}).option("dryRun",{type:"boolean",description:"Count what would be re-encrypted, and write nothing"}).option("encryptPlaintext",{type:"boolean",description:"Also encrypt values that are not encrypted yet (a column just marked @gemi.encrypted)"}).handle(async({args:z,options:J,line:Y,fail:Q})=>{let G=z.model?[z.model]:[...new Set(h().map((B)=>B.split(".")[0]))],$=z.model?null:Jz();if(G.length===0&&!$){Y("No model has encrypted columns.");return}if($){let B=await $.rotateEncryption({dryRun:J.dryRun});Y(`OAuth connections: ${B.scanned} rows, ${B.rotated} ${J.dryRun?"to re-encrypt":"re-encrypted"}`)}let _=0;for(let B of G){let V=await c(B,{batchSize:J.batchSize,dryRun:J.dryRun,encryptPlaintext:J.encryptPlaintext});_+=V.plaintext,Y(`${V.model} (${V.fields.join(", ")}): ${V.scanned} rows, ${V.rotated} ${J.dryRun?"to re-encrypt":"re-encrypted"}`+(V.skipped>0?`, ${V.skipped} changed meanwhile (already current)`:"")+(V.plaintext>0?`, ${V.plaintext} not encrypted yet`:""))}if(_>0)Q(`${_} value${_===1?" is":"s are"} not encrypted. If the column was just marked @gemi.encrypted, run again with --encrypt-plaintext.`)});function Jz(){let z=k();if(!z.bound(v))return null;let J=z.make(v);if(Object.keys(J.providers).length===0)return null;let Y=J.store;return Y instanceof g?Y:null}var m=[Gz];function R(z){return z.replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/([A-Z])([A-Z][a-z])/g,"$1-$2").toLowerCase()}function Qz(z){let J=new Map,Y=new Map;for(let Q of z){J.set(R(Q.name),Q),J.set(Q.name,Q);let G="alias"in Q?Q.alias:void 0;if(G)Y.set(G,Q)}return{byName:J,byAlias:Y}}function l(z){if(z==="--")return!0;if(!z.startsWith("-"))return!1;if(z==="-")return!1;if(/^-(\d|\.\d)/.test(z))return!1;return!0}function p(z,J){let{byName:Y,byAlias:Q}=Qz(z.options),G=[],$=[],_=new Map,B=!Y.has("help"),V=!Q.has("h"),F=!1,N=!1,W=(X)=>G.push(`Unknown option ${X} for command "${z.commandName}".`),T=(X,Z)=>{if(Z==="--help"||Z==="-h")N=!0;G.push(Z===void 0?`Option ${X} needs a value.`:`Option ${X} needs a value, but the next token is ${JSON.stringify(Z)}, which is another option. If that really is the value, write ${X}=${Z}.`)},j=0;while(j<J.length){let X=J[j];if(X==="--"){$.push(...J.slice(j+1));break}if(X.startsWith("--")){let Z=X.slice(2),K=Z.indexOf("="),M=K===-1?Z:Z.slice(0,K),O=K===-1?void 0:Z.slice(K+1),P=Y.get(M),D=!1;if(!P&&M.startsWith("no-")){let S=Y.get(M.slice(3));if(S&&S.type==="boolean")P=S,D=!0}if(!P&&M==="help"&&B){F=!0,j+=1;continue}if(!P){W(`--${M}`),j+=1;continue}if(P.type==="boolean"){if(O!==void 0&&O!=="true"&&O!=="false")G.push(`Option --${R(P.name)} is a flag and takes no value, but got ${JSON.stringify(O)}.`);else{let S=O===void 0?!0:O==="true";_.set(P.name,D?!S:S)}j+=1;continue}if(O!==void 0){_.set(P.name,O),j+=1;continue}let L=J[j+1];if(L===void 0||l(L)){T(`--${R(P.name)}`,L),j+=1;continue}_.set(P.name,L),j+=2;continue}if(X.startsWith("-")&&X.length>1){let Z=X.slice(1),K=!1;for(let M=0;M<Z.length;M+=1){let O=Q.get(Z[M]);if(!O){if(Z[M]==="h"&&V){F=!0;continue}W(`-${Z[M]}`);break}if(O.type==="boolean"){_.set(O.name,!0);continue}let P=Z.slice(M+1),D=P.startsWith("=")?P.slice(1):P;if(D!==""){_.set(O.name,D);break}let L=J[j+1];if(L===void 0||l(L)){T(`-${O.alias}`,L);break}_.set(O.name,L),K=!0;break}j+=K?2:1;continue}$.push(X),j+=1}let H={},I=0;for(let X of z.args){if(X.variadic){let K=$.slice(I);if(I=$.length,H[X.name]=K,X.required&&K.length===0)G.push(`Missing required argument <${X.name}...>. Command "${z.commandName}" needs at least one.`);continue}let Z=$[I];if(I+=1,Z!==void 0){H[X.name]=Z;continue}if(X.default!==void 0){H[X.name]=X.default;continue}if(X.required)G.push(`Missing required argument <${X.name}>.`);H[X.name]=void 0}if(I<$.length){let X=$.slice(I);G.push(`Unexpected argument${X.length===1?"":"s"} ${X.map((Z)=>JSON.stringify(Z)).join(", ")}. Command "${z.commandName}" takes ${z.args.length} argument${z.args.length===1?"":"s"}.`)}let U={};for(let X of z.options){let Z=_.get(X.name);if(X.type==="boolean"){U[X.name]=Z===void 0?X.default??!1:Boolean(Z);continue}if(Z===void 0){if(X.default!==void 0)U[X.name]=X.default;else if(X.required)G.push(`Missing required option --${R(X.name)}.`),U[X.name]=void 0;else U[X.name]=void 0;continue}let K=String(Z);if(X.type==="number"){let M=Number(K);if(K.trim()===""||!Number.isFinite(M))G.push(`Option --${R(X.name)} expects a number, but got ${JSON.stringify(K)}.`),U[X.name]=void 0;else U[X.name]=M;continue}U[X.name]=K}let q=F&&!N;if(G.length>0)return{ok:!1,help:q,errors:G};return{ok:!0,help:q,args:H,options:U}}function C(z,J=" "){let Y=z.reduce((Q,[G])=>Math.max(Q,G.length),0);return z.map(([Q,G])=>G===""?`${J}${Q}`:`${J}${Q.padEnd(Y)} ${G}`)}function d(z){let J=z.variadic?`${z.name}...`:z.name;return z.required?`<${J}>`:`[${J}]`}function Xz(z){let J=(G)=>z.options.some(G),Y=J((G)=>G.name==="help"||R(G.name)==="help"),Q=J((G)=>("alias"in G)&&G.alias==="h");if(Y&&Q)return[];if(Y)return[["-h","Show this message"]];return[[`${Q?"":"-h, "}--help`,"Show this message"]]}function w(z){let J=[],Y=z.args.map(d).join(" "),Q=["gemi run",z.commandName,z.options.length>0?"[options]":"",Y].filter(Boolean).join(" ");if(J.push(`Usage: ${Q}`),z.description)J.push("",z.description);if(z.args.length>0)J.push("","Arguments:"),J.push(...C(z.args.map((G)=>{let $=[G.description??"",G.default!==void 0?`(default: ${JSON.stringify(G.default)})`:""].filter(Boolean).join(" ");return[d(G),$]})));return J.push("","Options:"),J.push(...C([...z.options.map((G)=>{let $="alias"in G&&G.alias?`-${G.alias}, `:"",_=G.type==="boolean"?"":` <${G.type}>`,B=[G.description??"",G.default!==void 0?`(default: ${JSON.stringify(G.default)})`:"","required"in G&&G.required?"(required)":""].filter(Boolean).join(" ");return[`${$}--${R(G.name)}${_}`,B]}),...Xz(z)])),J.join(`
5
5
  `)}function i(z){return["Provided by gemi:","",...C(z.map((J)=>[J.commandName,J.description]))].join(`
@@ -15,4 +15,4 @@ ${i(j)}`);return 0}let H=W.get(z.name)??j.find((Z)=>Z.commandName===z.name);if($
15
15
  ${Q.message}
16
16
  \`gemi run\` boots your application the way the server does, so it needs the Kernel. Run it from the root of a gemi project.`,{cause:Q})}if(typeof Y.default!=="function")throw new f(`${J} has no default export. gemi expects the Kernel subclass to be the default export of that file.`);return new Y.default}function s(z,J,Y,Q="returned"){if(z===void 0||z===null)return 0;if(typeof z==="number"&&Number.isInteger(z)&&z>=0&&z<=255)return z;let G=J?`Command "${J.commandName}"`:"The command";return Y(`${G} ${Q} ${JSON.stringify(z)}, which is not an exit `+"code \u2014 an exit code is an integer from 0 to 255. Treating this as a "+"failure."),1}var[Zz,..._z]=process.argv.slice(2),zz=E();e({rootDir:process.cwd(),name:Zz,argv:_z,writers:zz}).then(async(z)=>{await zz.flush(),process.exit(z)});
17
17
 
18
- //# debugId=D879D610E5F5A3F964756E2164756E21
18
+ //# debugId=27AAB0DEE3BEFC9964756E2164756E21
@@ -10,6 +10,6 @@
10
10
  "/**\n * The entry point `gemi run` spawns.\n *\n * Exposed through the exports map as `gemi/console/run` and resolved by the CLI\n * out of the *application's* `node_modules`, the same way `dev` and `start`\n * resolve `gemi/bun/preload`. That indirection is the point: the runner has to\n * be the application's copy of gemi, not the one bundled into `dist/bin/gemi.js`\n * — see the note at the top of `runner.ts`.\n *\n * Nothing but argv handling lives here, so that everything worth testing lives\n * in `runConsole`, which returns an exit code instead of taking one.\n */\nimport { processWriters } from \"./context\";\nimport { runConsole } from \"./runner\";\n\n// The tail is forwarded exactly as commander handed it over, `--` and all.\n// commander passes a `--` through as a literal operand (verified: `gemi run x --\n// --weird` arrives as `[\"--\", \"--weird\"]`), and `parse.ts` already treats a `--`\n// as \"everything after this is positional\". Stripping it here — which an earlier\n// draft did — consumed the escape hatch before the only thing that reads it,\n// leaving `-- --weird` reported as an unknown option and `-- --` the only way to\n// pass a flag-shaped value.\nconst [name, ...argv] = process.argv.slice(2);\n\nconst writers = processWriters();\n\n// `.then` rather than a top-level `await`, so this file typechecks under the\n// package's inherited `module: NodeNext` — the same TS1309 that keeps `bun/` out\n// of tsconfig.json's `include`. Bun runs it as ESM either way; this just avoids\n// buying a nested tsconfig for two lines.\nrunConsole({ rootDir: process.cwd(), name, argv, writers }).then(\n async (code) => {\n // Everything written has to reach the OS before the exit below discards it —\n // see `processWriters` for what that costs when it is skipped.\n await writers.flush();\n\n // Explicit, and not belt-and-braces. `kernel.destroy()` stops the scheduler,\n // but an open database pool, a Redis client or an unref'd timer will happily\n // hold the loop open after the work is done — a command that finishes and then\n // sits there, which is the failure `kernel/exit.test.ts` exists for and the\n // one `orm/context.test.ts` names by example.\n process.exit(code);\n },\n);\n"
11
11
  ],
12
12
  "mappings": "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",
13
- "debugId": "D879D610E5F5A3F964756E2164756E21",
13
+ "debugId": "27AAB0DEE3BEFC9964756E2164756E21",
14
14
  "names": []
15
15
  }
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{rl as e,sl as o}from"../chunk-ejc0mbe3.js";import"../chunk-k1c0xd8r.js";export{o as Container,e as BindingResolutionError};
2
+ import{ul as e,vl as o}from"../chunk-1x23scpn.js";import"../chunk-vgxkt9vd.js";export{o as Container,e as BindingResolutionError};
3
3
 
4
- //# debugId=E198028758872B7A64756E2164756E21
4
+ //# debugId=54A25BC90B1EEBB764756E2164756E21
@@ -4,6 +4,6 @@
4
4
  "sourcesContent": [
5
5
  ],
6
6
  "mappings": "",
7
- "debugId": "E198028758872B7A64756E2164756E21",
7
+ "debugId": "54A25BC90B1EEBB764756E2164756E21",
8
8
  "names": []
9
9
  }
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{Fa as N}from"../chunk-m3180wkp.js";import"../chunk-xpkpz4g6.js";import"../chunk-xwz5fmwy.js";import"../chunk-vr48swd0.js";import"../chunk-ce73s4kh.js";import{Ek as j,Fk as k,Hk as w,Ik as x,Jk as z,Kk as A,Lk as E,Mk as F,Nk as G,Ok as H,Pk as I,Qk as J,Rk as K,Sk as L}from"../chunk-8em2ebj1.js";import"../chunk-k1c0xd8r.js";export{A as isSqlite,E as isMysqlFamily,z as inferDialect,j as defineDatabaseConfig,k as databaseConfigDefaults,w as UnknownDatabaseUrlError,H as UnknownConnectionError,I as ReservedConnectionNameError,x as MissingDatabaseUrlError,N as DatabaseServiceProvider,L as DatabaseManager,G as DEFAULT_CONNECTION,J as CrossConnectionTransactionError,K as Connection,F as AmbiguousSqlitePathError};
2
+ import{Fa as N}from"../chunk-63dh2zt4.js";import"../chunk-xpkpz4g6.js";import"../chunk-geqdq8hp.js";import"../chunk-1705yamg.js";import"../chunk-beckfwe9.js";import{Hk as j,Ik as k,Kk as w,Lk as x,Mk as z,Nk as A,Ok as E,Pk as F,Qk as G,Rk as H,Sk as I,Tk as J,Uk as K,Vk as L}from"../chunk-ftvc1a0k.js";import"../chunk-vgxkt9vd.js";export{A as isSqlite,E as isMysqlFamily,z as inferDialect,j as defineDatabaseConfig,k as databaseConfigDefaults,w as UnknownDatabaseUrlError,H as UnknownConnectionError,I as ReservedConnectionNameError,x as MissingDatabaseUrlError,N as DatabaseServiceProvider,L as DatabaseManager,G as DEFAULT_CONNECTION,J as CrossConnectionTransactionError,K as Connection,F as AmbiguousSqlitePathError};
3
3
 
4
- //# debugId=30CB9A295A57BC0964756E2164756E21
4
+ //# debugId=2151154B31BBBA2B64756E2164756E21
@@ -4,6 +4,6 @@
4
4
  "sourcesContent": [
5
5
  ],
6
6
  "mappings": "",
7
- "debugId": "30CB9A295A57BC0964756E2164756E21",
7
+ "debugId": "2151154B31BBBA2B64756E2164756E21",
8
8
  "names": []
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Email.d.ts","sourceRoot":"","sources":["../../email/Email.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAM3C,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EAChB,MAAM,iCAAiC,CAAC;AAIzC,UAAU,aAAa,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IACvE,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,KAAK;IAChB,IAAI,SAAM;IACV,EAAE,QAAM;IACR,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAgB;IACxD,EAAE,QAAM;IACR,GAAG,QAAM;IACT,WAAW,QAAM;IACjB,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;WAExB,IAAI,CAAC,CAAC,SAAS,KAAK,EAC/B,IAAI,EAAE,UAAU,CAAC,EACjB,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,GACzE,OAAO,CAAC,eAAe,CAAC;WAkFd,OAAO,CAAC,CAAC,SAAS,KAAK,EAClC,IAAI,EAAE,UAAU,CAAC,EACjB,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;cAWrF,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;cAK9C,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;CAInE"}
1
+ {"version":3,"file":"Email.d.ts","sourceRoot":"","sources":["../../email/Email.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAM3C,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EAChB,MAAM,iCAAiC,CAAC;AAIzC,UAAU,aAAa,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IACvE,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,KAAK;IAChB,IAAI,SAAM;IACV,EAAE,QAAM;IACR,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAgB;IACxD,EAAE,QAAM;IACR,GAAG,QAAM;IACT,WAAW,QAAM;IACjB,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;WAExB,IAAI,CAAC,CAAC,SAAS,KAAK,EAC/B,IAAI,EAAE,UAAU,CAAC,EACjB,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,GACzE,OAAO,CAAC,eAAe,CAAC;WAoFd,OAAO,CAAC,CAAC,SAAS,KAAK,EAClC,IAAI,EAAE,UAAU,CAAC,EACjB,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;cAWrF,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;cAK9C,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;CAInE"}
@@ -1,6 +1,6 @@
1
1
  // @bun
2
- import{fl as qS,gl as JS}from"../chunk-67ex6nem.js";import{ml as $S}from"../chunk-ccx7rt7y.js";import{ql as P}from"../chunk-8pfy75y6.js";import"../chunk-ejc0mbe3.js";import"../chunk-k1c0xd8r.js";import{render as s}from"jsx-email";import B from"process";import{Buffer as n}from"buffer";import r from"path";import{fileURLToPath as PS}from"url";import{promisify as yS}from"util";import o from"child_process";import wS,{constants as fS}from"fs/promises";import h from"process";import l,{constants as zS}from"fs/promises";import g from"process";import NS from"os";import W from"fs";import RS from"fs";import b from"fs";var F;function HS(){try{return b.statSync("/.dockerenv"),!0}catch{return!1}}function XS(){try{return b.readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch{return!1}}function L(){if(F===void 0)F=HS()||XS();return F}var O,US=()=>{try{return RS.statSync("/run/.containerenv"),!0}catch{return!1}};function R(){if(O===void 0)O=US()||L();return O}var u=()=>{if(g.platform!=="linux")return!1;if(NS.release().toLowerCase().includes("microsoft")){if(R())return!1;return!0}try{if(W.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft"))return!R()}catch{}if(W.existsSync("/proc/sys/fs/binfmt_misc/WSLInterop")||W.existsSync("/run/WSL"))return!R();return!1},H=g.env.__IS_WSL_TEST__?u:u();var ES=(()=>{let S;return async function(){if(S)return S;let q="/etc/wsl.conf",J=!1;try{await l.access(q,zS.F_OK),J=!0}catch{}if(!J)return"/mnt/";let K=await l.readFile(q,{encoding:"utf8"}),Q=/(?<!#.*)root\s*=\s*(?<mountPoint>.*)/g.exec(K);if(!Q)return"/mnt/";return S=Q.groups.mountPoint.trim(),S=S.endsWith("/")?S:`${S}/`,S}})(),MS=async()=>{return`${await ES()}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`},v=async()=>{if(H)return MS();return`${h.env.SYSTEMROOT||h.env.windir||String.raw`C:\Windows`}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`};function X($,S,q){let J=(K)=>Object.defineProperty($,S,{value:K,enumerable:!0,writable:!0});return Object.defineProperty($,S,{configurable:!0,enumerable:!0,get(){let K=q();return J(K),K},set(K){J(K)}}),$}import{promisify as jS}from"util";import j from"process";import{execFile as xS}from"child_process";import{promisify as _S}from"util";import kS from"process";import{execFile as DS}from"child_process";var FS=_S(DS);async function T(){if(kS.platform!=="darwin")throw Error("macOS only");let{stdout:$}=await FS("defaults",["read","com.apple.LaunchServices/com.apple.launchservices.secure","LSHandlers"]),q=/LSHandlerRoleAll = "(?!-)(?<id>[^"]+?)";\s+?LSHandlerURLScheme = (?:http|https);/.exec($)?.groups.id??"com.apple.Safari";if(q==="com.apple.safari")return"com.apple.Safari";return q}import LS from"process";import{promisify as OS}from"util";import{execFile as WS,execFileSync as H0}from"child_process";var vS=OS(WS);async function m($,{humanReadableOutput:S=!0,signal:q}={}){if(LS.platform!=="darwin")throw Error("macOS only");let J=S?[]:["-ss"],K={};if(q)K.signal=q;let{stdout:Q}=await vS("osascript",["-e",$,J],K);return Q.trim()}async function C($){return m(`tell application "Finder" to set app_path to application file id "${$}" as string
2
+ import{il as qS,jl as JS}from"../chunk-reaty2mv.js";import{pl as $S}from"../chunk-8e17k7ht.js";import{tl as P}from"../chunk-ermvtpy9.js";import"../chunk-1x23scpn.js";import"../chunk-vgxkt9vd.js";import{render as s}from"jsx-email";import B from"process";import{Buffer as n}from"buffer";import r from"path";import{fileURLToPath as PS}from"url";import{promisify as yS}from"util";import o from"child_process";import wS,{constants as fS}from"fs/promises";import h from"process";import l,{constants as zS}from"fs/promises";import g from"process";import NS from"os";import W from"fs";import RS from"fs";import b from"fs";var F;function HS(){try{return b.statSync("/.dockerenv"),!0}catch{return!1}}function XS(){try{return b.readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch{return!1}}function L(){if(F===void 0)F=HS()||XS();return F}var O,US=()=>{try{return RS.statSync("/run/.containerenv"),!0}catch{return!1}};function R(){if(O===void 0)O=US()||L();return O}var u=()=>{if(g.platform!=="linux")return!1;if(NS.release().toLowerCase().includes("microsoft")){if(R())return!1;return!0}try{if(W.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft"))return!R()}catch{}if(W.existsSync("/proc/sys/fs/binfmt_misc/WSLInterop")||W.existsSync("/run/WSL"))return!R();return!1},H=g.env.__IS_WSL_TEST__?u:u();var ES=(()=>{let S;return async function(){if(S)return S;let q="/etc/wsl.conf",J=!1;try{await l.access(q,zS.F_OK),J=!0}catch{}if(!J)return"/mnt/";let K=await l.readFile(q,{encoding:"utf8"}),Q=/(?<!#.*)root\s*=\s*(?<mountPoint>.*)/g.exec(K);if(!Q)return"/mnt/";return S=Q.groups.mountPoint.trim(),S=S.endsWith("/")?S:`${S}/`,S}})(),MS=async()=>{return`${await ES()}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`},v=async()=>{if(H)return MS();return`${h.env.SYSTEMROOT||h.env.windir||String.raw`C:\Windows`}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`};function X($,S,q){let J=(K)=>Object.defineProperty($,S,{value:K,enumerable:!0,writable:!0});return Object.defineProperty($,S,{configurable:!0,enumerable:!0,get(){let K=q();return J(K),K},set(K){J(K)}}),$}import{promisify as jS}from"util";import j from"process";import{execFile as xS}from"child_process";import{promisify as _S}from"util";import kS from"process";import{execFile as DS}from"child_process";var FS=_S(DS);async function T(){if(kS.platform!=="darwin")throw Error("macOS only");let{stdout:$}=await FS("defaults",["read","com.apple.LaunchServices/com.apple.launchservices.secure","LSHandlers"]),q=/LSHandlerRoleAll = "(?!-)(?<id>[^"]+?)";\s+?LSHandlerURLScheme = (?:http|https);/.exec($)?.groups.id??"com.apple.Safari";if(q==="com.apple.safari")return"com.apple.Safari";return q}import LS from"process";import{promisify as OS}from"util";import{execFile as WS,execFileSync as H0}from"child_process";var vS=OS(WS);async function m($,{humanReadableOutput:S=!0,signal:q}={}){if(LS.platform!=="darwin")throw Error("macOS only");let J=S?[]:["-ss"],K={};if(q)K.signal=q;let{stdout:Q}=await vS("osascript",["-e",$,J],K);return Q.trim()}async function C($){return m(`tell application "Finder" to set app_path to application file id "${$}" as string
3
3
  tell application "System Events" to get value of property list item "CFBundleName" of property list file (app_path & ":Contents:Info.plist")`)}import{promisify as TS}from"util";import{execFile as CS}from"child_process";var IS=TS(CS),_={MSEdgeHTM:{name:"Edge",id:"com.microsoft.edge"},MSEdgeBHTML:{name:"Edge Beta",id:"com.microsoft.edge.beta"},MSEdgeDHTML:{name:"Edge Dev",id:"com.microsoft.edge.dev"},AppXq0fevzme2pys62n3e0fbqa7peapykr8v:{name:"Edge",id:"com.microsoft.edge.old"},ChromeHTML:{name:"Chrome",id:"com.google.chrome"},ChromeBHTML:{name:"Chrome Beta",id:"com.google.chrome.beta"},ChromeDHTML:{name:"Chrome Dev",id:"com.google.chrome.dev"},ChromiumHTM:{name:"Chromium",id:"org.chromium.Chromium"},BraveHTML:{name:"Brave",id:"com.brave.Browser"},BraveBHTML:{name:"Brave Beta",id:"com.brave.Browser.beta"},BraveDHTML:{name:"Brave Dev",id:"com.brave.Browser.dev"},BraveSSHTM:{name:"Brave Nightly",id:"com.brave.Browser.nightly"},FirefoxURL:{name:"Firefox",id:"org.mozilla.firefox"},OperaStable:{name:"Opera",id:"com.operasoftware.Opera"},VivaldiHTM:{name:"Vivaldi",id:"com.vivaldi.Vivaldi"},"IE.HTTP":{name:"Internet Explorer",id:"com.microsoft.ie"}},E0=new Map(Object.entries(_));class c extends Error{}async function I($=IS){let{stdout:S}=await $("reg",["QUERY"," HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice","/v","ProgId"]),q=/ProgId\s*REG_SZ\s*(?<id>\S+)/.exec(S);if(!q)throw new c(`Cannot find Windows browser in stdout: ${JSON.stringify(S)}`);let{id:J}=q.groups,K=J.lastIndexOf("."),Q=J.lastIndexOf("-"),Z=K===-1?void 0:J.slice(0,K),V=Q===-1?void 0:J.slice(0,Q);return _[J]??_[Z]??_[V]??{name:J,id:J}}var BS=jS(xS),AS=($)=>$.toLowerCase().replaceAll(/(?:^|\s|-)\S/g,(S)=>S.toUpperCase());async function x(){if(j.platform==="darwin"){let $=await T();return{name:await C($),id:$}}if(j.platform==="linux"){let{stdout:$}=await BS("xdg-mime",["query","default","x-scheme-handler/http"]),S=$.trim();return{name:AS(S.replace(/.desktop$/,"").replace("-"," ")),id:S}}if(j.platform==="win32")return I();throw Error("Only macOS, Linux, and Windows are supported")}var bS=yS(o.execFile),A=r.dirname(PS(import.meta.url)),d=r.join(A,"xdg-open"),{platform:N,arch:p}=B;async function uS(){let $=await v(),S=String.raw`(Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice").ProgId`,q=n.from(S,"utf16le").toString("base64"),{stdout:J}=await bS($,["-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand",q],{encoding:"utf8"}),K=J.trim(),Q={ChromeHTML:"com.google.chrome",BraveHTML:"com.brave.Browser",MSEdgeHTM:"com.microsoft.edge",FirefoxURL:"org.mozilla.firefox"};return Q[K]?{id:Q[K]}:{}}var t=async($,S)=>{let q;for(let J of $)try{return await S(J)}catch(K){q=K}throw q},k=async($)=>{if($={wait:!1,background:!1,newInstance:!1,allowNonzeroExitCode:!1,...$},Array.isArray($.app))return t($.app,(V)=>k({...$,app:V}));let{name:S,arguments:q=[]}=$.app??{};if(q=[...q],Array.isArray(S))return t(S,(V)=>k({...$,app:{name:V,arguments:q}}));if(S==="browser"||S==="browserPrivate"){let V={"com.google.chrome":"chrome","google-chrome.desktop":"chrome","com.brave.Browser":"brave","org.mozilla.firefox":"firefox","firefox.desktop":"firefox","com.microsoft.msedge":"edge","com.microsoft.edge":"edge","com.microsoft.edgemac":"edge","microsoft-edge.desktop":"edge"},Y={chrome:"--incognito",brave:"--incognito",firefox:"--private-window",edge:"--inPrivate"},G=H?await uS():await x();if(G.id in V){let z=V[G.id];if(S==="browserPrivate")q.push(Y[z]);return k({...$,app:{name:U[z],arguments:q}})}throw Error(`${G.name} is not supported as a default browser`)}let J,K=[],Q={};if(N==="darwin"){if(J="open",$.wait)K.push("--wait-apps");if($.background)K.push("--background");if($.newInstance)K.push("--new");if(S)K.push("-a",S)}else if(N==="win32"||H&&!R()&&!S){if(J=await v(),K.push("-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand"),!H)Q.windowsVerbatimArguments=!0;let V=["Start"];if($.wait)V.push("-Wait");if(S){if(V.push(`"\`"${S}\`""`),$.target)q.push($.target)}else if($.target)V.push(`"${$.target}"`);if(q.length>0)q=q.map((Y)=>`"\`"${Y}\`""`),V.push("-ArgumentList",q.join(","));$.target=n.from(V.join(" "),"utf16le").toString("base64")}else{if(S)J=S;else{let V=!A||A==="/",Y=!1;try{await wS.access(d,fS.X_OK),Y=!0}catch{}J=B.versions.electron??(N==="android"||V||!Y)?"xdg-open":d}if(q.length>0)K.push(...q);if(!$.wait)Q.stdio="ignore",Q.detached=!0}if(N==="darwin"&&q.length>0)K.push("--args",...q);if($.target)K.push($.target);let Z=o.spawn(J,K,Q);if($.wait)return new Promise((V,Y)=>{Z.once("error",Y),Z.once("close",(G)=>{if(!$.allowNonzeroExitCode&&G>0){Y(Error(`Exited with code ${G}`));return}V(Z)})});return Z.unref(),Z},gS=($,S)=>{if(typeof $!=="string")throw TypeError("Expected a `target`");return k({...S,target:$})};function i($){if(typeof $==="string"||Array.isArray($))return $;let{[p]:S}=$;if(!S)throw Error(`${p} is not supported`);return S}function D({[N]:$},{wsl:S}){if(S&&H)return i(S);if(!$)throw Error(`${N} is not supported`);return i($)}var U={};X(U,"chrome",()=>D({darwin:"google chrome",win32:"chrome",linux:["google-chrome","google-chrome-stable","chromium"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe",x64:["/mnt/c/Program Files/Google/Chrome/Application/chrome.exe","/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"]}}));X(U,"brave",()=>D({darwin:"brave browser",win32:"brave",linux:["brave-browser","brave"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe",x64:["/mnt/c/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe","/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe"]}}));X(U,"firefox",()=>D({darwin:"firefox",win32:String.raw`C:\Program Files\Mozilla Firefox\firefox.exe`,linux:"firefox"},{wsl:"/mnt/c/Program Files/Mozilla Firefox/firefox.exe"}));X(U,"edge",()=>D({darwin:"microsoft edge",win32:"msedge",linux:["microsoft-edge","microsoft-edge-dev"]},{wsl:"/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}));X(U,"browser",()=>"browser");X(U,"browserPrivate",()=>"browserPrivate");var a=gS;function hS($){return Array.from($,(S)=>{let q=S.charCodeAt(0);return S==="/"||S==="\\"||q<32||q===127?"_":S}).join("")}async function e($,S,q={}){let J=`${$}/${new Date().toISOString()}${hS(S.subject)}`,K={to:S.to,cc:S.cc,bcc:S.bcc,from:S.from,subject:S.subject,headers:S.headers??{},attachments:S.attachments.map((Q)=>({filename:Q.filename,bytes:Buffer.byteLength(Q.content)})),scheduledAt:S.scheduledAt??null,idempotencyKey:S.idempotencyKey??null,locale:q.locale??null,text:S.text??null};return await Bun.write(`${J}.json`,`${JSON.stringify(K,null,2)}
4
- `),await Bun.write(`${J}.html`,S.html),`${J}.html`}import{jsx as SS}from"react/jsx-runtime";class KS{from="";to=[];subject="No Subject";cc=[];bcc=[];attachments=[];template;headers={};static async send($){let S=new this,q=P($S).defaultLocale,J=P(JS),{to:K=S.to,from:Q=S.from,subject:Z=typeof S.subject==="string"?S.subject:S.subject[$.locale||q],cc:V=S.cc,bcc:Y=S.bcc,attachments:G=S.attachments,data:z,headers:QS={}}=$,VS={...J.headers??{},...S.headers??{},...QS??{}},y=process.env.EMAIL_DEBUG==="true",E=y?"debug":J.driver?.provider??"custom",w=await J.filterRecipients(K);if(!w.length)return{id:null,provider:E,status:"skipped"};let[YS,ZS]=await Promise.all([S.render({...z,locale:$.locale}),S.renderText({...z,locale:$.locale})]),f={bcc:Y,cc:V,from:Q,subject:Z,to:w,attachments:G,html:YS,headers:VS,text:ZS,scheduledAt:$.scheduledAt,idempotencyKey:$.idempotencyKey};if(y){let GS=await e(`${process.env.ROOT_DIR}/.debug/emails`,f,{locale:$.locale});if(process.env.CI!=="true")await a(GS);return{id:`debug_${crypto.randomUUID()}`,provider:E,status:"debug"}}let M=await qS(J,f);return M.ok?{id:M.id,provider:E,status:"sent"}:{id:M.id,provider:E,status:"failed",error:M.error}}static async preview($){return await new this().render({...$.data,locale:$.locale})}async render($){let S=this.template;return await s(SS(S,{...$}))}async renderText($){let S=this.template;return await s(SS(S,{...$}),{plainText:!0})}}export{KS as Email};
4
+ `),await Bun.write(`${J}.html`,S.html),`${J}.html`}import{jsx as SS}from"react/jsx-runtime";class KS{from="";to=[];subject="No Subject";cc=[];bcc=[];attachments=[];template;headers={};static async send($){let S=new this,q=P($S).defaultLocale,J=P(JS),{to:K=S.to,from:Q=S.from,subject:Z=typeof S.subject==="string"?S.subject:S.subject[$.locale||q],cc:V=S.cc,bcc:Y=S.bcc,attachments:G=S.attachments,data:z,headers:QS={}}=$,VS={...J.headers??{},...S.headers??{},...QS??{}},y=process.env.EMAIL_DEBUG==="true",E=y?"debug":J.driver?.provider??"custom",w=await J.filterRecipients(K);if(!w.length)return{id:null,provider:E,status:"skipped"};let[YS,ZS]=await Promise.all([S.render({...z,locale:$.locale}),S.renderText({...z,locale:$.locale})]),f={bcc:Y,cc:V,from:Q,subject:Z,to:w,attachments:G,html:YS,headers:VS,text:ZS,scheduledAt:$.scheduledAt,idempotencyKey:$.idempotencyKey};if(y){let GS=await e(`${process.env.ROOT_DIR}/.debug/emails`,f,{locale:$.locale});if(process.env.CI!=="true"&&process.env.EMAIL_DEBUG_OPEN!=="false")await a(GS);return{id:`debug_${crypto.randomUUID()}`,provider:E,status:"debug"}}let M=await qS(J,f);return M.ok?{id:M.id,provider:E,status:"sent"}:{id:M.id,provider:E,status:"failed",error:M.error}}static async preview($){return await new this().render({...$.data,locale:$.locale})}async render($){let S=this.template;return await s(SS(S,{...$}))}async renderText($){let S=this.template;return await s(SS(S,{...$}),{plainText:!0})}}export{KS as Email};
5
5
 
6
- //# debugId=B88DE3A25371F95764756E2164756E21
6
+ //# debugId=F29501681CDEDD6D64756E2164756E21