@hot-updater/console 1.0.0-rc.20 → 1.0.0-rc.21

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 (180) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{ConsoleFeatureUnavailable-B9VYGA3N.js → ConsoleFeatureUnavailable-D0LPL1Gy.js} +1 -1
  3. package/.output/public/assets/{HashValueDisplay-D880zntR.js → HashValueDisplay-BmuB4FW-.js} +1 -1
  4. package/.output/public/assets/InsightsInfo--v4SC07c.js +1 -0
  5. package/.output/public/assets/InsightsPageHeader-dU83CAQY.js +1 -0
  6. package/.output/public/assets/{NotFoundPage-Dys8C0cW.js → NotFoundPage-B5mhGG2a.js} +1 -1
  7. package/.output/public/assets/api-D-vOVlQ4.js +1 -0
  8. package/.output/public/assets/api-keys-Csh8ARKU.js +1 -0
  9. package/.output/public/assets/api-keys-OMPUoA_A.js +1 -0
  10. package/.output/public/assets/arrow-left-Bwq9X1eS.js +1 -0
  11. package/.output/public/assets/arrow-up-right-BkOVn4if.js +1 -0
  12. package/.output/public/assets/{card-DzCPSRsh.js → card-C_7d6O9a.js} +1 -1
  13. package/.output/public/assets/console-features-api-C1jRZTGw.js +1 -0
  14. package/.output/public/assets/dialog-DE8wFN_P.js +1 -0
  15. package/.output/public/assets/{dist-Clb6cQ9l.js → dist-C7ENGzpS.js} +1 -1
  16. package/.output/public/assets/empty-CVd5NlQD.js +1 -0
  17. package/.output/public/assets/{field-Bou7shoO.js → field-C06q1iC9.js} +1 -1
  18. package/.output/public/assets/index-BeWlQtO6.js +11 -0
  19. package/.output/public/assets/{input-group-DVtWFUUF.js → input-group-Bi61biIA.js} +1 -1
  20. package/.output/public/assets/insights-BjnAtC0f.js +2 -0
  21. package/.output/public/assets/insights-D86m11yH.js +42 -0
  22. package/.output/public/assets/insights-DpYstMoY.js +1 -0
  23. package/.output/public/assets/{insights-recovery-rpc-wvdyM4LD.js → insights-recovery-rpc-BIm5_ALc.js} +1 -1
  24. package/.output/public/assets/{insights-usage-rpc-qUkNtrWr.js → insights-usage-rpc-VHj8vyBt.js} +1 -1
  25. package/.output/public/assets/insights_.distribution-ADcrX48c.js +2 -0
  26. package/.output/public/assets/insights_.distribution-CuuJUN6Y.js +1 -0
  27. package/.output/public/assets/{insights_.distribution-CItZw3-8.js → insights_.distribution-DJRjuXsO.js} +1 -1
  28. package/.output/public/assets/installations-BSBBzqWs.js +2 -0
  29. package/.output/public/assets/installations-DqIE6WcO.js +1 -0
  30. package/.output/public/assets/installations-UsELbDvw.js +1 -0
  31. package/.output/public/assets/{loader-circle-Ca7C9YY1.js → loader-circle-CnCBxzHp.js} +1 -1
  32. package/.output/public/assets/mutation-Csp7xUNh.js +1 -0
  33. package/.output/public/assets/preload-helper-B-cOmpLH.js +1 -0
  34. package/.output/public/assets/{refresh-cw-CVGqvy8Z.js → refresh-cw-FF1NtzlQ.js} +1 -1
  35. package/.output/public/assets/{routes-veKtDW39.js → routes-CoN9XHP_.js} +2 -2
  36. package/.output/public/assets/routes-DT1jB0Zi.js +1 -0
  37. package/.output/public/assets/sidebar-D8mJRF15.js +3 -0
  38. package/.output/public/assets/styles-Bwt7v6U5.css +2 -0
  39. package/.output/public/assets/table-WBgfvgXg.js +1 -0
  40. package/.output/public/assets/{useCompositeListItem-CF7vsfcA.js → useCompositeListItem-CloBmDwn.js} +1 -1
  41. package/.output/public/assets/useMutation-DO8cvsTx.js +1 -0
  42. package/.output/public/assets/{useOpenInteractionType-AnAMWYIY.js → useOpenInteractionType-ReGr9GzJ.js} +1 -1
  43. package/.output/public/assets/valueToPercent-BvPAi4bP.js +1 -0
  44. package/.output/server/{__23tanstack-start-server-fn-resolver-CUQLz7hs.mjs → __23tanstack-start-server-fn-resolver-DMRD4e4f.mjs} +34 -42
  45. package/.output/server/_libs/@tanstack/react-router+[...].mjs +3756 -4022
  46. package/.output/server/_libs/@tanstack/react-router-ssr-query+[...].mjs +138 -95
  47. package/.output/server/_libs/tanstack__history.mjs +68 -41
  48. package/.output/server/_libs/tanstack__query-core.mjs +1618 -309
  49. package/.output/server/_libs/tanstack__react-query.mjs +255 -20
  50. package/.output/server/_ssr/{ConsoleFeatureUnavailable-DoxET2AT.mjs → ConsoleFeatureUnavailable-Du7jNPNS.mjs} +7 -7
  51. package/.output/server/_ssr/{HashValueDisplay-BplboHEb.mjs → HashValueDisplay-GQvFkXoi.mjs} +2 -2
  52. package/.output/server/_ssr/{InsightsInfo-o2YPd5Qc.mjs → InsightsInfo-Do7QSaFR.mjs} +2 -2
  53. package/.output/server/_ssr/{InsightsPageHeader-NExCJL1I.mjs → InsightsPageHeader-DSUWUWRc.mjs} +6 -6
  54. package/.output/server/_ssr/{NotFoundPage-Cd-A8ock.mjs → NotFoundPage-DsF4Vrhg.mjs} +2 -2
  55. package/.output/server/_ssr/{api-B1Ro0uys.mjs → api-BEiVs0H7.mjs} +9 -8
  56. package/.output/server/_ssr/{api-keys-Dvvy1sem.mjs → api-keys-BrvBWGRf.mjs} +2 -2
  57. package/.output/server/_ssr/{api-keys-CT3HG7KT.mjs → api-keys-K5v32nf7.mjs} +8 -8
  58. package/.output/server/_ssr/{api-keys-rpc-b1qTTFfG.mjs → api-keys-rpc-B96bBllm.mjs} +5 -5
  59. package/.output/server/_ssr/{api-rpc-Cbns2MGx.mjs → api-rpc-DcUe280B.mjs} +13 -55
  60. package/.output/server/_ssr/{auth-rpc-DChS7m9y.mjs → auth-rpc-C68W56DP.mjs} +6 -6
  61. package/.output/server/_ssr/{api-C0G9MTMI.mjs → auth.server-DM1J6NwR.mjs} +2815 -1308
  62. package/.output/server/_ssr/{bundleActivity-D17Pb_h5.mjs → bundleActivity-CpuY9CTP.mjs} +1 -1
  63. package/.output/server/_ssr/{card-DMbcvlPz.mjs → card-CPAEKx0w.mjs} +1 -1
  64. package/.output/server/_ssr/config-nsIcsHh8.mjs +15 -0
  65. package/.output/server/_ssr/config.server-DDCZk3Sq.mjs +36 -0
  66. package/.output/server/_ssr/{console-access-KpPv5lin.mjs → console-access-Da-2Qd7q.mjs} +3 -3
  67. package/.output/server/_ssr/{console-features-CsbyHYfK.mjs → console-features-Dzu2iUGD.mjs} +6 -6
  68. package/.output/server/_ssr/{console-features-api-B-KVuo4p.mjs → console-features-api-xAsSgFa_.mjs} +6 -6
  69. package/.output/server/_ssr/{console-features-rpc-Djyo5740.mjs → console-features-rpc-qARGpB24.mjs} +5 -5
  70. package/.output/server/_ssr/{createMiddleware-B_I3Ll4M.mjs → createMiddleware-BdBf_ezN.mjs} +41 -56
  71. package/.output/server/_ssr/{createServerRpc-DuNm5mmo.mjs → createServerRpc-B_y2lrwA.mjs} +2 -2
  72. package/.output/server/_ssr/databaseJsonValue-Bhxciy7Z.mjs +68 -0
  73. package/.output/server/_ssr/databaseRows-DwMAjaF8.mjs +74 -0
  74. package/.output/server/_ssr/{dialog-cOmLTUV2.mjs → dialog-q__BJ7mQ.mjs} +1 -1
  75. package/.output/server/_ssr/{dist-B-r4u3Lg.mjs → dist-Cxo9ghYv.mjs} +114 -3
  76. package/.output/server/_ssr/{downloadBundle-CexOFoZ4.mjs → downloadBundle-BW9I-pMQ.mjs} +6 -5
  77. package/.output/server/_ssr/{empty-BHoY_5jt.mjs → empty-DcBTAooP.mjs} +2 -2
  78. package/.output/server/_ssr/{empty-plugin-adapters-B5QvGpEl.mjs → empty-plugin-adapters-CYdinE-i.mjs} +1 -1
  79. package/.output/server/_ssr/{field-mjhcNEXD.mjs → field-QCDBVpXA.mjs} +2 -2
  80. package/.output/server/_ssr/{getBundleChildren-DbDXe9wB.mjs → getBundleChildren-DIAGCF4a.mjs} +2 -2
  81. package/.output/server/_ssr/{input-group-96H30HWC.mjs → input-group-hCk2nUoU.mjs} +1 -1
  82. package/.output/server/_ssr/{insights-DgFv1NsO.mjs → insights-BfBO0RFr.mjs} +18 -18
  83. package/.output/server/_ssr/{insights-D359GJFL.mjs → insights-DsAU3-TB.mjs} +5 -5
  84. package/.output/server/_ssr/{insights-D25VDVaz.mjs → insights-RIfg447W.mjs} +2 -2
  85. package/.output/server/_ssr/{insights-api-ChAKrbhG.mjs → insights-api-CDn-QQHU.mjs} +5 -5
  86. package/.output/server/_ssr/{insights-failures-WQ-ttjOx.mjs → insights-failures-BBGMhuUr.mjs} +2 -2
  87. package/.output/server/_ssr/{insights-failures-rpc-BFsqlltN.mjs → insights-failures-rpc-rA2dctK2.mjs} +8 -8
  88. package/.output/server/_ssr/{insights-recovery-DkL6bxMW.mjs → insights-recovery-Dpk6Mfb9.mjs} +1 -1
  89. package/.output/server/_ssr/{insights-recovery-rpc-2P5m8F62.mjs → insights-recovery-rpc-BCaF-xSd.mjs} +11 -11
  90. package/.output/server/_ssr/{insights-recovery-rpc-Tj8vNC19.mjs → insights-recovery-rpc-CcgYyUHk.mjs} +5 -5
  91. package/.output/server/_ssr/{insights-rpc-DrkVmV9o.mjs → insights-rpc-keycmwzw.mjs} +5 -5
  92. package/.output/server/_ssr/{insights-search-BsalnNw-.mjs → insights-search-BRg5VsNe.mjs} +1 -1
  93. package/.output/server/_ssr/{insights-usage-1nVTQrLy.mjs → insights-usage-cbw9n2Fq.mjs} +1 -1
  94. package/.output/server/_ssr/{insights-usage-rpc-Ct_4xHhZ.mjs → insights-usage-rpc-BKgV1QDf.mjs} +8 -8
  95. package/.output/server/_ssr/{insights-usage-rpc-DaYIRtFK.mjs → insights-usage-rpc-D-JYachy.mjs} +5 -5
  96. package/.output/server/_ssr/{insightsRecovery-CpGucWN1.mjs → insightsRecovery-B7oMc8d8.mjs} +2 -2
  97. package/.output/server/_ssr/{insightsUsage-JYpKZAF7.mjs → insightsUsage-Oa7kk5ek.mjs} +3 -3
  98. package/.output/server/_ssr/{insights_.distribution-jQZEF07J.mjs → insights_.distribution-BIqOqRW0.mjs} +13 -13
  99. package/.output/server/_ssr/{insights_.distribution-Bcu6uYs_.mjs → insights_.distribution-CuUrDa7P.mjs} +2 -2
  100. package/.output/server/_ssr/{insights_.distribution-D3Csuyjw.mjs → insights_.distribution-RT_6x_ud.mjs} +5 -5
  101. package/.output/server/_ssr/{installations-Cxikllmx.mjs → installations-BO5CjX2z.mjs} +11 -11
  102. package/.output/server/_ssr/{installations-BI5kelHv.mjs → installations-BjaHiIfh.mjs} +2 -2
  103. package/.output/server/_ssr/{installations-B8Vh54lH.mjs → installations-Dt5luA-N.mjs} +4 -4
  104. package/.output/server/_ssr/{listReleases-DqU9t1l3.mjs → listReleases-BitHzOYB.mjs} +1 -1
  105. package/.output/server/_ssr/{router-CRkm-wHD.mjs → router-DfVAixxe.mjs} +42 -39
  106. package/.output/server/_ssr/{routes-CNAi0Mmv.mjs → routes-C6LstNp8.mjs} +14 -14
  107. package/.output/server/_ssr/{routes-B3IJo_jL.mjs → routes-Q3Uhmwwz.mjs} +11 -11
  108. package/.output/server/_ssr/{runtime.server-NucbYjc7.mjs → runtime.server-fL0o6I2b.mjs} +500 -413
  109. package/.output/server/_ssr/schema-BKY9SqaY.mjs +25 -0
  110. package/.output/server/_ssr/{select-BkPAJFL7.mjs → select-CUlInmjk.mjs} +1 -1
  111. package/.output/server/_ssr/server-C43wq9ft.mjs +8330 -0
  112. package/.output/server/_ssr/{sidebar-Cw1VuC7d.mjs → sidebar-DKbx2ach.mjs} +3 -3
  113. package/.output/server/_ssr/ssr.mjs +1 -1
  114. package/.output/server/_ssr/start-BXUOv_n8.mjs +4 -0
  115. package/.output/server/_ssr/{table-q0P9wz7x.mjs → table-NGWV8B-S.mjs} +1 -1
  116. package/.output/server/_ssr/{updateFailures-DMU9f0pK.mjs → updateFailures-Jwe2Baab.mjs} +3 -3
  117. package/.output/server/_ssr/{uuidv7-BzSO-fr-.mjs → uuidv7-C8bwiZr8.mjs} +2 -2
  118. package/.output/server/_tanstack-start-manifest_v-WQ5qGn8n.mjs +124 -0
  119. package/.output/server/index.mjs +218 -218
  120. package/LICENSE +13 -14
  121. package/README.md +16 -12
  122. package/lib/index.d.mts +18 -8
  123. package/lib/vite-internal.mjs +15 -8
  124. package/lib/vite.d.mts +2 -0
  125. package/package.json +14 -14
  126. package/src/components/AppSidebar.tsx +9 -0
  127. package/src/components/ConsoleFeatureUnavailable.tsx +1 -3
  128. package/src/components/features/bundles/BundleMetadata.tsx +1 -1
  129. package/src/components/features/bundles/RolloutCohortsDialog.tsx +1 -1
  130. package/src/components/features/releases/ReleaseEditorSheet.tsx +6 -6
  131. package/src/index.ts +27 -15
  132. package/src/lib/api-rpc.ts +1 -54
  133. package/src/lib/api.ts +8 -89
  134. package/src/lib/console-features.ts +5 -5
  135. package/src/lib/scroll-restoration.ts +1 -1
  136. package/src/lib/server/config.server.ts +15 -52
  137. package/src/lib/server/console-runtime.server.ts +84 -6
  138. package/src/lib/server/downloadBundle.ts +10 -6
  139. package/src/lib/server/releaseReachability.ts +4 -4
  140. package/src/lib/server/runtime.server.ts +34 -46
  141. package/src/routeTree.gen.ts +31 -31
  142. package/src/routes/api/bundles/$bundleId/download.ts +2 -2
  143. package/src/vite-internal.ts +17 -8
  144. package/src/vite.ts +2 -0
  145. package/.output/public/assets/InsightsInfo-By_sPjTE.js +0 -1
  146. package/.output/public/assets/InsightsPageHeader-9_kx_LL7.js +0 -1
  147. package/.output/public/assets/api-CtarlV0l.js +0 -1
  148. package/.output/public/assets/api-keys-DFF_QqtN.js +0 -1
  149. package/.output/public/assets/api-keys-evfsQ4sN.js +0 -1
  150. package/.output/public/assets/arrow-left-BP9D-ta_.js +0 -1
  151. package/.output/public/assets/arrow-up-right-CDP9Tevw.js +0 -1
  152. package/.output/public/assets/console-features-api-yv7rm3DX.js +0 -1
  153. package/.output/public/assets/dialog-BDvCy_QO.js +0 -1
  154. package/.output/public/assets/empty-C5x9mn_s.js +0 -1
  155. package/.output/public/assets/index-0eg3l8aC.js +0 -10
  156. package/.output/public/assets/insights-2MbdiSNv.js +0 -1
  157. package/.output/public/assets/insights-C6tmCZHk.js +0 -2
  158. package/.output/public/assets/insights-CadS_aIA.js +0 -42
  159. package/.output/public/assets/insights_.distribution-BhBs6PNA.js +0 -1
  160. package/.output/public/assets/insights_.distribution-CJUH_wAS.js +0 -2
  161. package/.output/public/assets/installations-CH2H7JQt.js +0 -2
  162. package/.output/public/assets/installations-DMeMuwsW.js +0 -1
  163. package/.output/public/assets/installations-DnvxI9Dt.js +0 -1
  164. package/.output/public/assets/mutation-x9L28_CD.js +0 -1
  165. package/.output/public/assets/preload-helper-BN-UkjOE.js +0 -1
  166. package/.output/public/assets/routes-BhK8DuZA.js +0 -1
  167. package/.output/public/assets/sidebar-B45aMqRm.js +0 -3
  168. package/.output/public/assets/styles-Dn0pK1EX.css +0 -2
  169. package/.output/public/assets/table-CwLnN6KX.js +0 -1
  170. package/.output/public/assets/useMutation-CN1ygYEr.js +0 -1
  171. package/.output/public/assets/valueToPercent-C-t8FT0y.js +0 -1
  172. package/.output/server/_ssr/auth.server-Ccqz2iVv.mjs +0 -37
  173. package/.output/server/_ssr/config-DMEJdhoW.mjs +0 -13
  174. package/.output/server/_ssr/config.server-DyypN6cQ.mjs +0 -60
  175. package/.output/server/_ssr/databaseRows-CXxf_VIB.mjs +0 -132
  176. package/.output/server/_ssr/deleteBundle-Dcc21Lbd.mjs +0 -56
  177. package/.output/server/_ssr/server-DKJYsaCP.mjs +0 -7442
  178. package/.output/server/_ssr/start-DpViQGnt.mjs +0 -4
  179. package/.output/server/_tanstack-start-manifest_v-Bb0gKDbb.mjs +0 -124
  180. package/src/lib/server/deleteBundle.ts +0 -136
@@ -1,4 +1,4 @@
1
- //#region node_modules/.nitro/vite/services/ssr/assets/bundleActivity-D17Pb_h5.js
1
+ //#region node_modules/.nitro/vite/services/ssr/assets/bundleActivity-CpuY9CTP.js
2
2
  async function getBundleActivity(model, inputs) {
3
3
  if (inputs.length === 0) return {};
4
4
  const releases = inputs.map((input) => ({
@@ -1,6 +1,6 @@
1
1
  import "../_runtime.mjs";
2
2
  import { mt as require_react, pt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
3
- import { O as cn } from "./sidebar-Cw1VuC7d.mjs";
3
+ import { O as cn } from "./sidebar-DKbx2ach.mjs";
4
4
  require_react();
5
5
  var import_jsx_runtime = require_jsx_runtime();
6
6
  function Card({ className, ...props }) {
@@ -0,0 +1,15 @@
1
+ import { loadConfig } from "@hot-updater/cli-tools";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/config-nsIcsHh8.js
3
+ var config_default = async () => {
4
+ const config = await loadConfig(null);
5
+ if (config.database === void 0) throw new Error("Set database in hot-updater.config.ts: the database your server runs on, such as d1Database(...), or standaloneRepository({ baseUrl }) to reach a self-hosted server through its admin API.");
6
+ if (config.storage === void 0) throw new Error("Set storage in hot-updater.config.ts: where your server stores bundles, which the console reads, such as r2Storage(...).");
7
+ return {
8
+ database: config.database,
9
+ storage: config.storage,
10
+ plugins: config.plugins,
11
+ console: { gitUrl: config.console.gitUrl }
12
+ };
13
+ };
14
+ //#endregion
15
+ export { config_default as default };
@@ -0,0 +1,36 @@
1
+ import { r as getRequest } from "./server-C43wq9ft.mjs";
2
+ import { requireConsoleAccess, t as resolveConsoleConfig } from "./auth.server-DM1J6NwR.mjs";
3
+ //#region node_modules/.nitro/vite/services/ssr/assets/config.server-DDCZk3Sq.js
4
+ var configPromise = null;
5
+ var core = null;
6
+ var runtime = null;
7
+ var loadCachedConfig = async (request) => {
8
+ if (!configPromise) configPromise = resolveConsoleConfig(request).catch((error) => {
9
+ configPromise = null;
10
+ throw error;
11
+ });
12
+ return configPromise;
13
+ };
14
+ var prepareConfig = async (request = getRequest()) => {
15
+ try {
16
+ await requireConsoleAccess(request);
17
+ const config = await loadCachedConfig(request);
18
+ core ??= config.core;
19
+ if (!runtime) {
20
+ const { createConsoleRuntime } = await import("./runtime.server-fL0o6I2b.mjs");
21
+ runtime = createConsoleRuntime(config);
22
+ }
23
+ return {
24
+ config,
25
+ core,
26
+ runtime,
27
+ storage: config.storage
28
+ };
29
+ } catch (error) {
30
+ if (!(error instanceof Response && (error.status === 401 || error.status === 403))) console.error("Error during configuration initialization:", error);
31
+ throw error;
32
+ }
33
+ };
34
+ var isConfigLoaded = () => Boolean(configPromise);
35
+ //#endregion
36
+ export { isConfigLoaded, prepareConfig };
@@ -1,5 +1,5 @@
1
- import { s as createMiddleware } from "./createMiddleware-B_I3Ll4M.mjs";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/console-access-KpPv5lin.js
1
+ import { c as createMiddleware } from "./createMiddleware-BdBf_ezN.mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/console-access-Da-2Qd7q.js
3
3
  /**
4
4
  * Refuses a caller the console does not authorize before a server function
5
5
  * reads its input. TanStack Start runs a function's middleware before the
@@ -9,7 +9,7 @@ import { s as createMiddleware } from "./createMiddleware-B_I3Ll4M.mjs";
9
9
  * `console-access.spec.ts` checks that.
10
10
  */
11
11
  var consoleAccess = createMiddleware({ type: "function" }).server(async ({ next }) => {
12
- const [{ getRequest }, { requireConsoleAccess }] = await Promise.all([import("./server-DKJYsaCP.mjs").then((n) => n.t), import("./auth.server-Ccqz2iVv.mjs")]);
12
+ const [{ getRequest }, { requireConsoleAccess }] = await Promise.all([import("./server-C43wq9ft.mjs").then((n) => n.t), import("./auth.server-DM1J6NwR.mjs")]);
13
13
  await requireConsoleAccess(getRequest());
14
14
  return next();
15
15
  });
@@ -1,9 +1,9 @@
1
- //#region node_modules/.nitro/vite/services/ssr/assets/console-features-CsbyHYfK.js
1
+ //#region node_modules/.nitro/vite/services/ssr/assets/console-features-Dzu2iUGD.js
2
2
  /**
3
- * The console's features and the server plugin each one needs. The server is
4
- * the source of truth: the console serves a feature only when the server runs
5
- * its plugin, and against a self-hosted server (`standaloneRepository`) only
6
- * the features its admin API serves (`remote`); the rest read the database.
3
+ * The console's features and the server plugin each one needs. The console
4
+ * serves a feature only when its config lists the plugin, as the server runs
5
+ * it, and against a self-hosted server (`standaloneRepository`) only the
6
+ * features its admin API serves (`remote`); the rest read the database.
7
7
  * Navigation, route guards, and server functions all read this registry. Its
8
8
  * other halves, keyed by the same features, hold what serves each feature on
9
9
  * the server (`server/console-feature-apis.ts`) and what each adds to pages
@@ -27,7 +27,7 @@ var consoleFeatures = {
27
27
  }
28
28
  };
29
29
  var featureIds = Object.keys(consoleFeatures);
30
- /** The features on for the plugins a server runs, from where the console reads them. */
30
+ /** The features on for the plugins the console's config lists, from where the console reads them. */
31
31
  var resolveConsoleFeatures = (plugins, { remote }) => {
32
32
  const installed = new Set(plugins);
33
33
  return Object.fromEntries(featureIds.map((feature) => {
@@ -1,10 +1,10 @@
1
- import { l as createServerFn } from "./createMiddleware-B_I3Ll4M.mjs";
2
- import { t as consoleAccess } from "./console-access-KpPv5lin.mjs";
3
- import { k as createSsrRpc } from "./sidebar-Cw1VuC7d.mjs";
4
- import { n as queryOptions, r as useQuery } from "../_libs/tanstack__react-query.mjs";
5
- import { n as consoleFeatures } from "./console-features-CsbyHYfK.mjs";
1
+ import { n as consoleFeatures } from "./console-features-Dzu2iUGD.mjs";
2
+ import { u as createServerFn } from "./createMiddleware-BdBf_ezN.mjs";
3
+ import { k as createSsrRpc } from "./sidebar-DKbx2ach.mjs";
4
+ import { t as consoleAccess } from "./console-access-Da-2Qd7q.mjs";
6
5
  import { _ as notFound } from "../_libs/@tanstack/react-router+[...].mjs";
7
- //#region node_modules/.nitro/vite/services/ssr/assets/console-features-api-B-KVuo4p.js
6
+ import { n as queryOptions, r as useQuery } from "../_libs/tanstack__react-query.mjs";
7
+ //#region node_modules/.nitro/vite/services/ssr/assets/console-features-api-xAsSgFa_.js
8
8
  /** The features this console serves, for navigation and route guards. */
9
9
  var getConsoleFeaturesRpc = createServerFn({ method: "GET" }).middleware([consoleAccess]).handler(createSsrRpc("82ec3500e57f9e81dac6d3f3a7bd9e34915da3121429beec87b7ad153dc6eafe"));
10
10
  var consoleFeaturesQueryKey = ["console", "features"];
@@ -1,14 +1,14 @@
1
- import { l as createServerFn } from "./createMiddleware-B_I3Ll4M.mjs";
2
- import { t as consoleAccess } from "./console-access-KpPv5lin.mjs";
3
- import { t as createServerRpc } from "./createServerRpc-DuNm5mmo.mjs";
4
- //#region node_modules/.nitro/vite/services/ssr/assets/console-features-rpc-Djyo5740.js
1
+ import { u as createServerFn } from "./createMiddleware-BdBf_ezN.mjs";
2
+ import { t as consoleAccess } from "./console-access-Da-2Qd7q.mjs";
3
+ import { t as createServerRpc } from "./createServerRpc-B_y2lrwA.mjs";
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/console-features-rpc-qARGpB24.js
5
5
  var getConsoleFeaturesRpc_createServerFn_handler = createServerRpc({
6
6
  id: "82ec3500e57f9e81dac6d3f3a7bd9e34915da3121429beec87b7ad153dc6eafe",
7
7
  name: "getConsoleFeaturesRpc",
8
8
  filename: "src/lib/console-features-rpc.ts"
9
9
  }, (opts) => getConsoleFeaturesRpc.__executeServer(opts));
10
10
  var getConsoleFeaturesRpc = createServerFn({ method: "GET" }).middleware([consoleAccess]).handler(getConsoleFeaturesRpc_createServerFn_handler, async () => {
11
- const { prepareConfig } = await import("./config.server-DyypN6cQ.mjs");
11
+ const { prepareConfig } = await import("./config.server-DDCZk3Sq.mjs");
12
12
  const { runtime } = await prepareConfig();
13
13
  return {
14
14
  features: await runtime.features(),
@@ -1,15 +1,15 @@
1
1
  import { AsyncLocalStorage } from "node:async_hooks";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/createMiddleware-B_I3Ll4M.js
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/createMiddleware-BdBf_ezN.js
3
3
  /**
4
4
  * Create a redirect Response understood by TanStack Router.
5
5
  *
6
6
  * Use from route `loader`/`beforeLoad` or server functions to trigger a
7
7
  * navigation. If `throw: true` is set, the redirect is thrown instead of
8
- * returned. When an absolute `href` is supplied and `reloadDocument` is not
9
- * set, a full-document navigation is inferred.
8
+ * returned. External `href` values are classified as full-document
9
+ * navigations when the router resolves the redirect.
10
10
  *
11
11
  * @param opts Options for the redirect. Common fields:
12
- * - `href`: absolute URL for external redirects; infers `reloadDocument`.
12
+ * - `href`: absolute URL for external redirects.
13
13
  * - `statusCode`: HTTP status code to use (defaults to 307).
14
14
  * - `headers`: additional headers to include on the Response.
15
15
  * - Standard navigation options like `to`, `params`, `search`, `replace`,
@@ -19,10 +19,6 @@ import { AsyncLocalStorage } from "node:async_hooks";
19
19
  */
20
20
  function redirect(opts) {
21
21
  opts.statusCode = opts.statusCode || opts.code || 307;
22
- if (!opts._builtLocation && !opts.reloadDocument && typeof opts.href === "string") try {
23
- new URL(opts.href);
24
- opts.reloadDocument = true;
25
- } catch {}
26
22
  const headers = new Headers(opts.headers);
27
23
  if (opts.href && headers.get("Location") === null) headers.set("Location", opts.href);
28
24
  const response = new Response(null, {
@@ -34,16 +30,9 @@ function redirect(opts) {
34
30
  return response;
35
31
  }
36
32
  /** Check whether a value is a TanStack Router redirect Response. */
37
- /** Check whether a value is a TanStack Router redirect Response. */
38
33
  function isRedirect(obj) {
39
34
  return obj instanceof Response && !!obj.options;
40
35
  }
41
- /** True if value is a redirect with a resolved `href` location. */
42
- /** True if value is a redirect with a resolved `href` location. */
43
- function isResolvedRedirect(obj) {
44
- return isRedirect(obj) && !!obj.options.href;
45
- }
46
- /** Parse a serialized redirect object back into a redirect Response. */
47
36
  /** Parse a serialized redirect object back into a redirect Response. */
48
37
  function parseRedirect(obj) {
49
38
  if (obj !== null && typeof obj === "object" && obj.isSerializedRedirect) return redirect(obj);
@@ -55,42 +44,12 @@ var X_TSS_SERIALIZED = "x-tss-serialized";
55
44
  var X_TSS_RAW_RESPONSE = "x-tss-raw";
56
45
  /** Content-Type for multiplexed framed responses (RawStream support) */
57
46
  var TSS_CONTENT_TYPE_FRAMED = "application/x-tss-framed";
58
- /**
59
- * Frame types for binary multiplexing protocol.
60
- */
61
- var FrameType = {
62
- JSON: 0,
63
- CHUNK: 1,
64
- END: 2,
65
- ERROR: 3
66
- };
47
+ /** Largest payload accepted by one framed-protocol record. */
48
+ var MAX_FRAME_PAYLOAD_SIZE = 16 * 1024 * 1024;
49
+ /** Largest number of raw streams accepted in one framed response. */
50
+ var MAX_FRAMED_STREAMS = 1024;
67
51
  /** Full Content-Type header value with version parameter */
68
52
  var TSS_CONTENT_TYPE_FRAMED_VERSIONED = `${TSS_CONTENT_TYPE_FRAMED}; v=1`;
69
- function isSafeKey(key) {
70
- return key !== "__proto__" && key !== "constructor" && key !== "prototype";
71
- }
72
- /**
73
- * Merge target and source into a new null-proto object, filtering dangerous keys.
74
- */
75
- function safeObjectMerge(target, source) {
76
- const result = Object.create(null);
77
- if (target) {
78
- for (const key of Object.keys(target)) if (isSafeKey(key)) result[key] = target[key];
79
- }
80
- if (source && typeof source === "object") {
81
- for (const key of Object.keys(source)) if (isSafeKey(key)) result[key] = source[key];
82
- }
83
- return result;
84
- }
85
- /**
86
- * Create a null-prototype object, optionally copying from source.
87
- */
88
- function createNullProtoObject(source) {
89
- if (!source) return Object.create(null);
90
- const obj = Object.create(null);
91
- for (const key of Object.keys(source)) if (isSafeKey(key)) obj[key] = source[key];
92
- return obj;
93
- }
94
53
  var GLOBAL_STORAGE_KEY = Symbol.for("tanstack-start:start-storage-context");
95
54
  var globalObj = globalThis;
96
55
  if (!globalObj[GLOBAL_STORAGE_KEY]) globalObj[GLOBAL_STORAGE_KEY] = new AsyncLocalStorage();
@@ -104,7 +63,6 @@ function getStartContext(opts) {
104
63
  return context;
105
64
  }
106
65
  var getStartOptions = () => getStartContext().startOptions;
107
- var getStartContextServerOnly = getStartContext;
108
66
  function splitSetCookieString(cookiesString) {
109
67
  if (Array.isArray(cookiesString)) return cookiesString.flatMap((c) => splitSetCookieString(c));
110
68
  if (typeof cookiesString !== "string") return [];
@@ -161,6 +119,32 @@ function mergeHeaders(...headers) {
161
119
  return acc;
162
120
  }, new Headers());
163
121
  }
122
+ function isSafeKey(key) {
123
+ return key !== "__proto__" && key !== "constructor" && key !== "prototype";
124
+ }
125
+ /**
126
+ * Merge target and source into a new null-proto object, filtering dangerous keys.
127
+ */
128
+ function safeObjectMerge(target, source) {
129
+ const result = Object.create(null);
130
+ if (target) {
131
+ for (const key of Object.keys(target)) if (isSafeKey(key)) result[key] = target[key];
132
+ }
133
+ if (source && typeof source === "object") {
134
+ for (const key of Object.keys(source)) if (isSafeKey(key)) result[key] = source[key];
135
+ }
136
+ return result;
137
+ }
138
+ /**
139
+ * Create a null-prototype object, optionally copying from source.
140
+ */
141
+ function createNullProtoObject(source) {
142
+ if (!source) return Object.create(null);
143
+ const obj = Object.create(null);
144
+ for (const key of Object.keys(source)) if (isSafeKey(key)) obj[key] = source[key];
145
+ return obj;
146
+ }
147
+ var getStartContextServerOnly = getStartContext;
164
148
  var createServerFn = (options, __opts) => {
165
149
  const resolvedOptions = __opts || options || {};
166
150
  if (typeof resolvedOptions.method === "undefined") resolvedOptions.method = "GET";
@@ -175,10 +159,10 @@ var createServerFn = (options, __opts) => {
175
159
  options: resolvedOptions,
176
160
  middleware: (middleware) => {
177
161
  const newMiddleware = [...resolvedOptions.middleware || []];
178
- middleware.map((m) => {
179
- if (TSS_SERVER_FUNCTION_FACTORY in m) {
180
- if (m.options.middleware) newMiddleware.push(...m.options.middleware);
181
- } else newMiddleware.push(m);
162
+ middleware.forEach((item) => {
163
+ if (TSS_SERVER_FUNCTION_FACTORY in item) {
164
+ if (item.options.middleware) newMiddleware.push(...item.options.middleware);
165
+ } else newMiddleware.push(item);
182
166
  });
183
167
  const res = createServerFn(void 0, {
184
168
  ...resolvedOptions,
@@ -220,7 +204,8 @@ var createServerFn = (options, __opts) => {
220
204
  const serverContextAfterGlobalMiddlewares = startContext.contextAfterGlobalMiddlewares;
221
205
  return await executeMiddleware(resolvedMiddleware, "server", {
222
206
  ...extractedFn,
223
- ...opts,
207
+ data: opts.data,
208
+ method: opts.method ?? resolvedOptions.method,
224
209
  serverFnMeta: extractedFn.serverFnMeta,
225
210
  context: safeObjectMerge(opts.context, serverContextAfterGlobalMiddlewares),
226
211
  request: startContext.request
@@ -382,4 +367,4 @@ var createMiddleware = (options, __opts) => {
382
367
  };
383
368
  };
384
369
  //#endregion
385
- export { safeObjectMerge as _, X_TSS_RAW_RESPONSE as a, createNullProtoObject as c, getStartContext as d, getStartOptions as f, runWithStartContext as g, mergeHeaders as h, TSS_SERVER_FUNCTION as i, createServerFn as l, isResolvedRedirect as m, TSS_CONTENT_TYPE_FRAMED_VERSIONED as n, X_TSS_SERIALIZED as o, isRedirect as p, TSS_FORMDATA_CONTEXT as r, createMiddleware as s, FrameType as t, flattenMiddlewares as u };
370
+ export { safeObjectMerge as _, TSS_SERVER_FUNCTION as a, createMiddleware as c, flattenMiddlewares as d, getStartContext as f, runWithStartContext as g, mergeHeaders as h, TSS_FORMDATA_CONTEXT as i, createNullProtoObject as l, isRedirect as m, MAX_FRAME_PAYLOAD_SIZE as n, X_TSS_RAW_RESPONSE as o, getStartOptions as p, TSS_CONTENT_TYPE_FRAMED_VERSIONED as r, X_TSS_SERIALIZED as s, MAX_FRAMED_STREAMS as t, createServerFn as u };
@@ -1,5 +1,5 @@
1
- import { i as TSS_SERVER_FUNCTION } from "./createMiddleware-B_I3Ll4M.mjs";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/createServerRpc-DuNm5mmo.js
1
+ import { a as TSS_SERVER_FUNCTION } from "./createMiddleware-BdBf_ezN.mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/createServerRpc-B_y2lrwA.js
3
3
  var createServerRpc = (serverFnMeta, splitImportFn) => {
4
4
  const url = "/_serverFn/" + serverFnMeta.id;
5
5
  return Object.assign(splitImportFn, {
@@ -0,0 +1,68 @@
1
+ //#region node_modules/.nitro/vite/services/ssr/assets/databaseJsonValue-Bhxciy7Z.js
2
+ /** A bundle an operation names is not stored. */
3
+ var DatabaseBundleNotFoundError = class extends Error {
4
+ bundleId;
5
+ name = "DatabaseBundleNotFoundError";
6
+ constructor(bundleId) {
7
+ super(`Bundle "${bundleId}" was not found.`);
8
+ this.bundleId = bundleId;
9
+ }
10
+ };
11
+ /** A row a delete names is still referenced, such as a bundle a release uses. */
12
+ var DatabaseRowReferencedError = class extends Error {
13
+ name = "DatabaseRowReferencedError";
14
+ constructor() {
15
+ super("The database row is still referenced.");
16
+ }
17
+ };
18
+ /** Input a database operation refuses before touching storage. */
19
+ var DatabaseAdapterInputError = class extends Error {
20
+ code;
21
+ name = "DatabaseAdapterInputError";
22
+ constructor(code) {
23
+ super(`Invalid database adapter input: ${code}`);
24
+ this.code = code;
25
+ }
26
+ };
27
+ var isDatabaseJsonValue = (value) => {
28
+ const ancestors = /* @__PURE__ */ new WeakSet();
29
+ const validate = (input) => {
30
+ if (input === null || typeof input === "string" || typeof input === "boolean") return true;
31
+ if (typeof input === "number") return Number.isFinite(input);
32
+ if (typeof input !== "object") return false;
33
+ if (ancestors.has(input)) return false;
34
+ ancestors.add(input);
35
+ try {
36
+ if (Array.isArray(input)) {
37
+ if (Object.getPrototypeOf(input) !== Array.prototype) return false;
38
+ if (Reflect.ownKeys(input).length !== input.length + 1) return false;
39
+ for (let index = 0; index < input.length; index += 1) {
40
+ const descriptor = Object.getOwnPropertyDescriptor(input, String(index));
41
+ if (descriptor === void 0 || !descriptor.enumerable || !("value" in descriptor) || !validate(descriptor.value)) return false;
42
+ }
43
+ return true;
44
+ }
45
+ const prototype = Object.getPrototypeOf(input);
46
+ if (prototype !== Object.prototype && prototype !== null) return false;
47
+ for (const key of Reflect.ownKeys(input)) {
48
+ if (typeof key !== "string" || key === "__proto__") return false;
49
+ const descriptor = Object.getOwnPropertyDescriptor(input, key);
50
+ if (descriptor === void 0 || !descriptor.enumerable || !("value" in descriptor) || !validate(descriptor.value)) return false;
51
+ }
52
+ return true;
53
+ } finally {
54
+ ancestors.delete(input);
55
+ }
56
+ };
57
+ return validate(value);
58
+ };
59
+ /**
60
+ * Whether `value` is a plain object of JSON values a store keeps as they
61
+ * are: no cycles, accessors, non-finite numbers, or class instances. A
62
+ * plugin checks a `json` field's value with it before it writes, as
63
+ * Insights does for an event's metadata.
64
+ */
65
+ var isDatabaseJsonObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value) && isDatabaseJsonValue(value);
66
+ var isDatabaseMetadataObject = (value) => isDatabaseJsonObject(value) && (!Object.hasOwn(value, "app_version") || typeof value["app_version"] === "string");
67
+ //#endregion
68
+ export { isDatabaseMetadataObject as a, isDatabaseJsonObject as i, DatabaseBundleNotFoundError as n, DatabaseRowReferencedError as r, DatabaseAdapterInputError as t };
@@ -0,0 +1,74 @@
1
+ import { O as stripBundleArtifactMetadata, f as getBundlePatches, m as getManifestStorageUri, p as getManifestFileHash, u as getAssetBaseStorageUri } from "./dist-Cxo9ghYv.mjs";
2
+ import { a as isDatabaseMetadataObject, t as DatabaseAdapterInputError } from "./databaseJsonValue-Bhxciy7Z.mjs";
3
+ //#region node_modules/.nitro/vite/services/ssr/assets/databaseRows-DwMAjaF8.js
4
+ var bundleMetadataToRow = (metadata) => {
5
+ const value = stripBundleArtifactMetadata(metadata);
6
+ if (value === void 0) return {};
7
+ if (!isDatabaseMetadataObject(value)) throw new DatabaseAdapterInputError("invalid-data");
8
+ return value;
9
+ };
10
+ var releaseRowToRelease = (row) => ({
11
+ id: row.id,
12
+ revision: row.revision,
13
+ channelId: row.channel_id,
14
+ platform: row.platform,
15
+ kind: row.kind,
16
+ bundleId: row.bundle_id,
17
+ strategy: row.strategy,
18
+ targetAppVersion: row.target_app_version,
19
+ fingerprintHash: row.fingerprint_hash,
20
+ enabled: row.enabled,
21
+ shouldForceUpdate: row.should_force_update,
22
+ message: row.message,
23
+ rolloutCohortCount: row.rollout_cohort_count,
24
+ targetCohorts: row.target_cohorts,
25
+ operation: row.operation,
26
+ sourceReleaseId: row.source_release_id,
27
+ createdAtMs: row.created_at_ms,
28
+ updatedAtMs: row.updated_at_ms
29
+ });
30
+ var bundleToRow = (bundle) => {
31
+ const metadata = bundleMetadataToRow(bundle.metadata);
32
+ return {
33
+ id: bundle.id,
34
+ platform: bundle.platform,
35
+ git_commit_hash: bundle.gitCommitHash,
36
+ metadata,
37
+ manifest_storage_uri: getManifestStorageUri(bundle),
38
+ manifest_file_hash: getManifestFileHash(bundle),
39
+ asset_base_storage_uri: getAssetBaseStorageUri(bundle)
40
+ };
41
+ };
42
+ var bundleToPatchRows = (bundle) => getBundlePatches(bundle).map((patch, orderIndex) => ({
43
+ id: `${bundle.id}:${patch.baseBundleId}`,
44
+ bundle_id: bundle.id,
45
+ base_bundle_id: patch.baseBundleId,
46
+ base_file_hash: patch.baseFileHash,
47
+ patch_file_hash: patch.patchFileHash,
48
+ patch_storage_uri: patch.patchStorageUri,
49
+ byte_size: patch.byteSize,
50
+ order_index: orderIndex
51
+ }));
52
+ var comparePatchRows = (left, right) => left.order_index - right.order_index || left.id.localeCompare(right.id);
53
+ var patchRowToArtifact = (row) => ({
54
+ baseBundleId: row.base_bundle_id,
55
+ baseFileHash: row.base_file_hash,
56
+ byteSize: row.byte_size,
57
+ patchFileHash: row.patch_file_hash,
58
+ patchStorageUri: row.patch_storage_uri
59
+ });
60
+ var rowToBundle = (row, patchRows = []) => {
61
+ const patches = patchRows.slice().sort(comparePatchRows).map(patchRowToArtifact);
62
+ return {
63
+ id: row.id,
64
+ platform: row.platform,
65
+ gitCommitHash: row.git_commit_hash,
66
+ metadata: stripBundleArtifactMetadata(row.metadata),
67
+ manifestStorageUri: row.manifest_storage_uri,
68
+ manifestFileHash: row.manifest_file_hash,
69
+ assetBaseStorageUri: row.asset_base_storage_uri,
70
+ patches
71
+ };
72
+ };
73
+ //#endregion
74
+ export { rowToBundle as i, bundleToRow as n, releaseRowToRelease as r, bundleToPatchRows as t };
@@ -1,7 +1,7 @@
1
1
  import "../_runtime.mjs";
2
2
  import { $ as DialogBackdrop, G as AlertDialogRoot, J as DialogRoot, K as DialogTrigger$1, Q as DialogClose, W as AlertDialogTrigger$1, X as DialogPopup, Y as DialogPortal$1, Z as DialogDescription$1, mt as require_react, pt as require_jsx_runtime, q as DialogTitle$1 } from "../_libs/@base-ui/react+[...].mjs";
3
3
  import { t as X } from "../_libs/lucide-react.mjs";
4
- import { O as cn, t as Button$1 } from "./sidebar-Cw1VuC7d.mjs";
4
+ import { O as cn, t as Button$1 } from "./sidebar-DKbx2ach.mjs";
5
5
  require_react();
6
6
  var import_jsx_runtime = require_jsx_runtime();
7
7
  function AlertDialog$1({ ...props }) {
@@ -1,4 +1,116 @@
1
- //#region node_modules/.nitro/vite/services/ssr/assets/dist-B-r4u3Lg.js
1
+ //#region node_modules/.nitro/vite/services/ssr/assets/dist-Cxo9ghYv.js
2
+ var LETTER_DASH_NUMBER = "[a-zA-Z0-9-]";
3
+ var NUMERIC_IDENTIFIER = String.raw`0|[1-9]\d*`;
4
+ var NUMERIC_IDENTIFIER_LOOSE = String.raw`\d+`;
5
+ var NON_NUMERIC_IDENTIFIER = String.raw`\d*[a-zA-Z-]${LETTER_DASH_NUMBER}*`;
6
+ var MAIN_VERSION = String.raw`(${NUMERIC_IDENTIFIER})\.(${NUMERIC_IDENTIFIER})\.(${NUMERIC_IDENTIFIER})`;
7
+ var MAIN_VERSION_LOOSE = String.raw`(${NUMERIC_IDENTIFIER_LOOSE})\.(${NUMERIC_IDENTIFIER_LOOSE})\.(${NUMERIC_IDENTIFIER_LOOSE})`;
8
+ var PRERELEASE_IDENTIFIER = `(?:${NON_NUMERIC_IDENTIFIER}|${NUMERIC_IDENTIFIER})`;
9
+ var PRERELEASE_IDENTIFIER_LOOSE = `(?:${NON_NUMERIC_IDENTIFIER}|${NUMERIC_IDENTIFIER_LOOSE})`;
10
+ var PRERELEASE = String.raw`(?:-(${PRERELEASE_IDENTIFIER}(?:\.${PRERELEASE_IDENTIFIER})*))`;
11
+ var PRERELEASE_LOOSE = String.raw`(?:-?(${PRERELEASE_IDENTIFIER_LOOSE}(?:\.${PRERELEASE_IDENTIFIER_LOOSE})*))`;
12
+ var BUILD_IDENTIFIER = `${LETTER_DASH_NUMBER}+`;
13
+ var BUILD = String.raw`(?:\+(${BUILD_IDENTIFIER}(?:\.${BUILD_IDENTIFIER})*))`;
14
+ var FULL_PLAIN = `v?${MAIN_VERSION}${PRERELEASE}?${BUILD}?`;
15
+ var LOOSE_PLAIN = String.raw`[v=\s]*${MAIN_VERSION_LOOSE}${PRERELEASE_LOOSE}?${BUILD}?`;
16
+ var XRANGE_IDENTIFIER = String.raw`${NUMERIC_IDENTIFIER}|x|X|\*`;
17
+ var XRANGE_IDENTIFIER_LOOSE = String.raw`${NUMERIC_IDENTIFIER_LOOSE}|x|X|\*`;
18
+ String.raw`[v=\s]*(${XRANGE_IDENTIFIER})(?:\.(${XRANGE_IDENTIFIER})(?:\.(${XRANGE_IDENTIFIER})(?:${PRERELEASE})?${BUILD}?)?)?`;
19
+ String.raw`[v=\s]*(${XRANGE_IDENTIFIER_LOOSE})(?:\.(${XRANGE_IDENTIFIER_LOOSE})(?:\.(${XRANGE_IDENTIFIER_LOOSE})(?:${PRERELEASE_LOOSE})?${BUILD}?)?)?`;
20
+ String.raw`(?:\^)`;
21
+ var COERCE_PLAIN = String.raw`(^|[^\d])(\d{1,${16}})(?:\.(\d{1,${16}}))?(?:\.(\d{1,${16}}))?`;
22
+ var COERCE = String.raw`${COERCE_PLAIN}(?:$|[^\d])`;
23
+ var COERCE_FULL = String.raw`${COERCE_PLAIN}(?:${PRERELEASE})?(?:${BUILD})?(?:$|[^\d])`;
24
+ function makeSafeRegexSource(source) {
25
+ const replacements = [
26
+ [String.raw`\s`, 1],
27
+ [String.raw`\d`, 256],
28
+ [LETTER_DASH_NUMBER, 250]
29
+ ];
30
+ for (const [token, maximum] of replacements) source = source.split(`${token}*`).join(`${token}{0,${maximum}}`).split(`${token}+`).join(`${token}{1,${maximum}}`);
31
+ return source;
32
+ }
33
+ function safeRegex(source, flags) {
34
+ return new RegExp(makeSafeRegexSource(source), flags);
35
+ }
36
+ var FULL = safeRegex(`^${FULL_PLAIN}$`);
37
+ var LOOSE = safeRegex(`^${LOOSE_PLAIN}$`);
38
+ var NUMERIC$1 = /^\d+$/;
39
+ function formatComparableVersion(version) {
40
+ const base = `${version.major}.${version.minor}.${version.patch}`;
41
+ return version.prerelease?.length ? `${base}-${version.prerelease.join(".")}` : base;
42
+ }
43
+ function formatFullVersion(version) {
44
+ const comparable = formatComparableVersion(version);
45
+ return version.build?.length ? `${comparable}+${version.build.join(".")}` : comparable;
46
+ }
47
+ function parse(version, options = {}) {
48
+ if (typeof version !== "string") return version;
49
+ if (version.length > 256) throw new TypeError(`Version exceeds the maximum length of 256 characters`);
50
+ const match = version.trim().match(options.loose ? LOOSE : FULL);
51
+ if (!match) throw new TypeError(`Invalid version syntax: ${version}`);
52
+ const major = Number(match[1]);
53
+ const minor = Number(match[2]);
54
+ const patch = Number(match[3]);
55
+ if (major > Number.MAX_SAFE_INTEGER || major < 0) throw new TypeError(`Invalid major version: ${match[1]}`);
56
+ if (minor > Number.MAX_SAFE_INTEGER || minor < 0) throw new TypeError(`Invalid minor version: ${match[2]}`);
57
+ if (patch > Number.MAX_SAFE_INTEGER || patch < 0) throw new TypeError(`Invalid patch version: ${match[3]}`);
58
+ const prerelease = match[4] ? match[4].split(".").map((identifier) => {
59
+ if (NUMERIC$1.test(identifier)) {
60
+ const numeric = Number(identifier);
61
+ if (numeric >= 0 && numeric < Number.MAX_SAFE_INTEGER) return numeric;
62
+ }
63
+ return identifier;
64
+ }) : void 0;
65
+ return {
66
+ build: match[5]?.split("."),
67
+ major,
68
+ minor,
69
+ patch,
70
+ prerelease
71
+ };
72
+ }
73
+ function tryParse(version, options = {}) {
74
+ try {
75
+ return parse(version, options);
76
+ } catch {
77
+ return null;
78
+ }
79
+ }
80
+ var COERCE_EXACT = safeRegex(COERCE);
81
+ var COERCE_FULL_EXACT = safeRegex(COERCE_FULL);
82
+ safeRegex(`^${PRERELEASE}$`);
83
+ safeRegex(`^${PRERELEASE_LOOSE}$`);
84
+ function normalizeFull(version, options = {}) {
85
+ const parsed = tryParse(version, options);
86
+ return parsed ? formatFullVersion(parsed) : null;
87
+ }
88
+ function coerce(value, options = {}) {
89
+ if (typeof value === "object") return value;
90
+ const input = typeof value === "number" ? String(value) : value;
91
+ let match = null;
92
+ if (options.rtl) {
93
+ const expression = safeRegex(options.includePrerelease ? COERCE_FULL : COERCE, "g");
94
+ let next;
95
+ while ((next = expression.exec(input)) && (!match || match.index + match[0].length !== input.length)) {
96
+ if (!match || next.index + next[0].length !== match.index + match[0].length) match = next;
97
+ expression.lastIndex = next.index + next[1].length + next[2].length;
98
+ }
99
+ } else match = (options.includePrerelease ? COERCE_FULL_EXACT : COERCE_EXACT).exec(input);
100
+ if (!match) return null;
101
+ const major = match[2];
102
+ return tryParse(`${major}.${match[3] || "0"}.${match[4] || "0"}${options.includePrerelease && match[5] ? `-${match[5]}` : ""}${options.includePrerelease && match[6] ? `+${match[6]}` : ""}`, options);
103
+ }
104
+ /**
105
+ * The form of an app version that the device and the server compare:
106
+ * `major.minor.patch` of the first version in `appVersion`, such as `1.4.0`
107
+ * for `v1.4`, or null when it holds none. Prerelease and build parts are
108
+ * dropped.
109
+ */
110
+ function canonicalizeAppVersion(appVersion) {
111
+ const version = coerce(appVersion);
112
+ return version ? normalizeFull(version) : null;
113
+ }
2
114
  var stripBundleArtifactMetadata = (metadata) => metadata;
3
115
  var getManifestStorageUri = (bundle) => bundle.manifestStorageUri;
4
116
  var getManifestFileHash = (bundle) => bundle.manifestFileHash;
@@ -30,7 +142,6 @@ var getPrimaryPatch = (bundle) => {
30
142
  var getPatchBaseBundleId = (bundle) => getPrimaryPatch(bundle)?.baseBundleId ?? null;
31
143
  var getPatchBaseFileHash = (bundle) => getPrimaryPatch(bundle)?.baseFileHash ?? null;
32
144
  var getPatchFileHash = (bundle) => getPrimaryPatch(bundle)?.patchFileHash ?? null;
33
- var getPatchStorageUri = (bundle) => getPrimaryPatch(bundle)?.patchStorageUri ?? null;
34
145
  var NUMERIC_COHORT_SIZE = 1e3;
35
146
  var DEFAULT_ROLLOUT_COHORT_COUNT = NUMERIC_COHORT_SIZE;
36
147
  var INVALID_COHORT_ERROR_MESSAGE = `Invalid cohort. Use 1-1000 or a lowercase slug without spaces, up to 64 characters.`;
@@ -270,4 +381,4 @@ var NIL_UUID = "00000000-0000-0000-0000-000000000000";
270
381
  var UUID_V7_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;
271
382
  var isUUIDv7 = (value) => typeof value === "string" && UUID_V7_PATTERN.test(value);
272
383
  //#endregion
273
- export { isUUIDv7 as C, parseReleaseCatalogScopeKey as D, normalizeRolloutCohortCount as E, stripBundleArtifactMetadata as O, isReleaseEligibleForCohort as S, normalizeCohortValue as T, getPatchBaseFileHash as _, RELEASE_CATALOG_FALLBACK_POLICY as a, getRolledOutNumericCohorts as b, encodeChannelKey as c, getBundlePatches as d, getManifestFileHash as f, getPatchBaseBundleId as g, getNumericCohortValue as h, NUMERIC_COHORT_SIZE as i, getAssetBaseStorageUri as l, getNumericCohortRolloutPosition as m, MAX_COMPILED_CATALOG_BYTES as n, createReleaseCatalogScopeKey as o, getManifestStorageUri as p, NIL_UUID as r, decodeChannelKey as s, INVALID_COHORT_ERROR_MESSAGE as t, getBundlePatch as u, getPatchFileHash as v, isValidCohort as w, isCustomCohort as x, getPatchStorageUri as y };
384
+ export { isUUIDv7 as C, parseReleaseCatalogScopeKey as D, normalizeRolloutCohortCount as E, stripBundleArtifactMetadata as O, isReleaseEligibleForCohort as S, normalizeCohortValue as T, getPatchBaseBundleId as _, RELEASE_CATALOG_FALLBACK_POLICY as a, getRolledOutNumericCohorts as b, decodeChannelKey as c, getBundlePatch as d, getBundlePatches as f, getNumericCohortValue as g, getNumericCohortRolloutPosition as h, NUMERIC_COHORT_SIZE as i, encodeChannelKey as l, getManifestStorageUri as m, MAX_COMPILED_CATALOG_BYTES as n, canonicalizeAppVersion as o, getManifestFileHash as p, NIL_UUID as r, createReleaseCatalogScopeKey as s, INVALID_COHORT_ERROR_MESSAGE as t, getAssetBaseStorageUri as u, getPatchBaseFileHash as v, isValidCohort as w, isCustomCohort as x, getPatchFileHash as y };
@@ -1,11 +1,12 @@
1
- //#region node_modules/.nitro/vite/services/ssr/assets/downloadBundle-CexOFoZ4.js
2
- var downloadBundle = async (bundleId, { core, storagePlugin }) => {
1
+ //#region node_modules/.nitro/vite/services/ssr/assets/downloadBundle-BW9I-pMQ.js
2
+ var downloadBundle = async (bundleId, { core, storage }) => {
3
3
  const detail = await core.getBundle(bundleId);
4
4
  if (!detail) return new Response("Bundle not found", { status: 404 });
5
5
  const storageUri = detail.bundle.manifest_storage_uri;
6
6
  const protocol = new URL(storageUri).protocol.replace(":", "");
7
- if (storagePlugin?.protocol === protocol) {
8
- const { response } = await storagePlugin.get({ storageUri });
7
+ const storageAdapter = storage.find((adapter) => adapter.protocol === protocol);
8
+ if (storageAdapter?.get !== void 0) {
9
+ const { response } = await storageAdapter.get({ storageUri });
9
10
  if (!response) return new Response("Storage object not found", { status: 404 });
10
11
  const headers = new Headers(response.headers);
11
12
  headers.set("cache-control", "private, no-store");
@@ -16,7 +17,7 @@ var downloadBundle = async (bundleId, { core, storagePlugin }) => {
16
17
  statusText: response.statusText
17
18
  });
18
19
  }
19
- if (protocol !== "http" && protocol !== "https") return new Response(`No storage plugin for protocol: ${protocol}`, { status: 503 });
20
+ if (protocol !== "http" && protocol !== "https") return new Response(`No storage adapter for protocol: ${protocol}`, { status: 503 });
20
21
  return Response.redirect(storageUri, 302);
21
22
  };
22
23
  //#endregion