blume 2.1.1 → 2.1.3

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 (171) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/cli/{chunk-ncj7w596.js → chunk-0pmb4tr4.js} +22 -18
  3. package/dist/cli/{chunk-ncj7w596.js.map → chunk-0pmb4tr4.js.map} +3 -3
  4. package/dist/cli/{chunk-nq1d20w2.js → chunk-0w6hs479.js} +15 -15
  5. package/dist/cli/{chunk-ehweg4fr.js → chunk-124fvmzq.js} +1031 -903
  6. package/dist/cli/{chunk-ehweg4fr.js.map → chunk-124fvmzq.js.map} +20 -18
  7. package/dist/cli/{chunk-kma9f6sf.js → chunk-1f882900.js} +2 -2
  8. package/dist/cli/{chunk-e8xw9qkh.js → chunk-297ajdcv.js} +4 -4
  9. package/dist/cli/{chunk-e6atmn4h.js → chunk-32khwcb6.js} +7 -7
  10. package/dist/cli/{chunk-073rdvgb.js → chunk-36bxs9c7.js} +16 -16
  11. package/dist/cli/{chunk-mrcccgnh.js → chunk-53jqw8z0.js} +3 -3
  12. package/dist/cli/{chunk-ft9vfys6.js → chunk-58bt3hag.js} +4 -4
  13. package/dist/cli/{chunk-sds923fa.js → chunk-5cmts6dv.js} +3 -3
  14. package/dist/cli/{chunk-cfyg47zg.js → chunk-60hz265r.js} +4 -4
  15. package/dist/cli/{chunk-j134vrp2.js → chunk-74wfhv79.js} +1 -1
  16. package/dist/cli/{chunk-nrns10mj.js → chunk-9qzgg6mj.js} +3 -3
  17. package/dist/cli/{chunk-tphac74f.js → chunk-a57yh0h9.js} +5 -5
  18. package/dist/cli/{chunk-hebn0tpx.js → chunk-ave1wcbr.js} +1 -1
  19. package/dist/cli/{chunk-htrwgabr.js → chunk-bqxaqn5p.js} +6 -6
  20. package/dist/cli/{chunk-5vjtgs6e.js → chunk-bxwhtvw8.js} +5 -5
  21. package/dist/cli/{chunk-66w9j7p6.js → chunk-ckrcm08h.js} +5 -3
  22. package/dist/cli/{chunk-66w9j7p6.js.map → chunk-ckrcm08h.js.map} +3 -3
  23. package/dist/cli/{chunk-n0v7m8ry.js → chunk-desvm72z.js} +3 -3
  24. package/dist/cli/{chunk-3v3ffbrj.js → chunk-dhwtqnnd.js} +2 -2
  25. package/dist/cli/{chunk-gb420vvz.js → chunk-dpy8qdjf.js} +7 -4
  26. package/dist/cli/chunk-dpy8qdjf.js.map +17 -0
  27. package/dist/cli/{chunk-c1y538kd.js → chunk-dqhg54mr.js} +1 -1
  28. package/dist/cli/{chunk-42t4jxdx.js → chunk-dv2z0rzf.js} +1 -1
  29. package/dist/cli/{chunk-cm89scdv.js → chunk-es8h0v3j.js} +9 -11
  30. package/dist/cli/{chunk-cm89scdv.js.map → chunk-es8h0v3j.js.map} +3 -3
  31. package/dist/cli/{chunk-hx3xqnk9.js → chunk-gfc5fqvf.js} +14 -14
  32. package/dist/cli/{chunk-7ppf1rva.js → chunk-gxtg6ed2.js} +16 -16
  33. package/dist/cli/{chunk-8y2kmjv8.js → chunk-hvcxng5f.js} +6 -6
  34. package/dist/cli/{chunk-54ztw1nj.js → chunk-j1x92mx9.js} +1 -1
  35. package/dist/cli/{chunk-313vnn40.js → chunk-k3gr1nm9.js} +11 -9
  36. package/dist/cli/chunk-k3gr1nm9.js.map +10 -0
  37. package/dist/cli/{chunk-c887fj0s.js → chunk-kdpzw38a.js} +2 -2
  38. package/dist/cli/{chunk-t2m5j4pr.js → chunk-ms9z66nz.js} +2 -2
  39. package/dist/cli/{chunk-t2m5j4pr.js.map → chunk-ms9z66nz.js.map} +2 -2
  40. package/dist/cli/{chunk-ep6nd0rn.js → chunk-nbyvgnnm.js} +26 -14
  41. package/dist/cli/{chunk-ep6nd0rn.js.map → chunk-nbyvgnnm.js.map} +7 -7
  42. package/dist/cli/{chunk-w1r4vase.js → chunk-s0bdnc7v.js} +2 -2
  43. package/dist/cli/{chunk-fdrkhpjy.js → chunk-sc93apfs.js} +14 -14
  44. package/dist/cli/{chunk-dzwehpy7.js → chunk-tfycddbt.js} +2 -2
  45. package/dist/cli/{chunk-3x6x3pph.js → chunk-twy7psdz.js} +7 -7
  46. package/dist/cli/{chunk-e9q7a2ak.js → chunk-y4msrwm9.js} +15 -15
  47. package/dist/cli/{chunk-tdqhyxfz.js → chunk-ydp3065p.js} +5 -5
  48. package/dist/cli/index.js +18 -18
  49. package/dist/types/ai/ask.d.ts +24 -5
  50. package/dist/types/analytics/clics.d.ts +37 -0
  51. package/dist/types/analytics/index.d.ts +2 -0
  52. package/dist/types/analytics/schema.d.ts +18 -0
  53. package/dist/types/astro/integration.d.ts +6 -0
  54. package/dist/types/core/config-input.d.ts +7 -3
  55. package/dist/types/core/powered-by.d.ts +12 -0
  56. package/dist/types/core/schema.d.ts +109 -3
  57. package/dist/types/core/sources/lower.d.ts +10 -2
  58. package/dist/types/core/sources/notion.d.ts +8 -0
  59. package/dist/types/deploy/cloudflare-negotiation.d.ts +5 -2
  60. package/dist/types/deploy/node-headers.d.ts +12 -4
  61. package/dist/types/deploy/platforms/vercel.d.ts +2 -2
  62. package/dist/types/deploy/vercel-negotiation.d.ts +4 -2
  63. package/dist/types/narration/build.d.ts +34 -12
  64. package/dist/types/narration/provider.d.ts +96 -8
  65. package/dist/types/openapi/sentence.d.ts +11 -1
  66. package/dist/types/seo/jsonld.d.ts +11 -6
  67. package/dist/types/sources/notion.d.ts +8 -0
  68. package/dist/types/sources/registry.d.ts +9 -0
  69. package/docs/02-deployment.mdx +29 -1
  70. package/docs/03-upgrading.mdx +2 -1
  71. package/docs/04-migrating.mdx +9 -9
  72. package/docs/08-faq.mdx +12 -12
  73. package/docs/advanced/changelog.mdx +19 -2
  74. package/docs/advanced/custom-pages.mdx +1 -1
  75. package/docs/cli/doctor.mdx +1 -1
  76. package/docs/configuration/analytics.mdx +19 -1
  77. package/docs/configuration/index.mdx +1 -0
  78. package/docs/configuration/narration.mdx +43 -6
  79. package/docs/content/navigation.mdx +4 -2
  80. package/docs/content/sources/contentful.mdx +2 -0
  81. package/docs/content/sources/github-releases.mdx +2 -0
  82. package/docs/content/sources/notion.mdx +16 -1
  83. package/docs/content/sources/obsidian.mdx +2 -0
  84. package/docs/content/sources/payload.mdx +2 -0
  85. package/docs/content/sources/remote-mdx.mdx +2 -0
  86. package/docs/content/sources/sanity.mdx +2 -0
  87. package/docs/content/sources/strapi.mdx +2 -0
  88. package/docs/discoverability/mcp.mdx +2 -0
  89. package/docs/discoverability/structured-data.mdx +8 -6
  90. package/docs/references/asyncapi.mdx +2 -0
  91. package/docs/references/graphql.mdx +2 -0
  92. package/docs/references/openapi.mdx +14 -0
  93. package/package.json +7 -6
  94. package/skills/blume/SKILL.md +1 -1
  95. package/skills/blume-migrate/SKILL.md +1 -1
  96. package/skills/blume-migrate/assets/{oxfmt@0.67.0.patch → oxfmt@0.71.0.patch} +7 -7
  97. package/skills/blume-migrate/references/monorepo.md +5 -5
  98. package/src/ai/ask.ts +24 -6
  99. package/src/analytics/clics.ts +58 -0
  100. package/src/analytics/head.ts +5 -0
  101. package/src/analytics/index.ts +2 -0
  102. package/src/analytics/schema.ts +2 -0
  103. package/src/astro/generate.ts +13 -8
  104. package/src/astro/integration.ts +56 -9
  105. package/src/astro/render-deps.ts +10 -5
  106. package/src/astro/runtime-deps.ts +23 -2
  107. package/src/astro/templates.ts +4 -1
  108. package/src/cli/init/scaffold.ts +6 -3
  109. package/src/cli/required-secrets.ts +2 -1
  110. package/src/components/content/view-switcher.ts +7 -4
  111. package/src/components/layout/NavTree.astro +49 -5
  112. package/src/components/layout/NavTreeScript.astro +18 -0
  113. package/src/components/layout/PageLayout.astro +13 -3
  114. package/src/components/layout/RootLayout.astro +17 -12
  115. package/src/components/layout/analytics-client.ts +8 -8
  116. package/src/components/openapi/playground-client.ts +53 -53
  117. package/src/components/powered-by-middleware.ts +33 -0
  118. package/src/core/config-input.ts +11 -3
  119. package/src/core/powered-by.ts +12 -0
  120. package/src/core/schema.ts +5 -4
  121. package/src/core/sources/lower.ts +19 -3
  122. package/src/core/sources/notion.ts +27 -9
  123. package/src/deploy/cloudflare-negotiation.ts +36 -7
  124. package/src/deploy/headers.ts +15 -1
  125. package/src/deploy/node-headers.ts +32 -20
  126. package/src/deploy/platforms/cloudflare.ts +1 -0
  127. package/src/deploy/platforms/vercel.ts +4 -3
  128. package/src/deploy/vercel-negotiation.ts +38 -4
  129. package/src/markdown/base-links.ts +15 -14
  130. package/src/markdown/package-commands.ts +9 -8
  131. package/src/narration/build.ts +218 -40
  132. package/src/narration/provider.ts +89 -9
  133. package/src/openapi/render-mdx.ts +68 -8
  134. package/src/openapi/sentence.ts +29 -2
  135. package/src/registry/eject.ts +5 -1
  136. package/src/seo/jsonld.ts +38 -20
  137. package/src/sources/notion.ts +7 -0
  138. package/src/theme/color.ts +9 -10
  139. package/src/theme/entry.ts +14 -3
  140. package/dist/cli/chunk-313vnn40.js.map +0 -10
  141. package/dist/cli/chunk-gb420vvz.js.map +0 -17
  142. /package/dist/cli/{chunk-nq1d20w2.js.map → chunk-0w6hs479.js.map} +0 -0
  143. /package/dist/cli/{chunk-kma9f6sf.js.map → chunk-1f882900.js.map} +0 -0
  144. /package/dist/cli/{chunk-e8xw9qkh.js.map → chunk-297ajdcv.js.map} +0 -0
  145. /package/dist/cli/{chunk-e6atmn4h.js.map → chunk-32khwcb6.js.map} +0 -0
  146. /package/dist/cli/{chunk-073rdvgb.js.map → chunk-36bxs9c7.js.map} +0 -0
  147. /package/dist/cli/{chunk-mrcccgnh.js.map → chunk-53jqw8z0.js.map} +0 -0
  148. /package/dist/cli/{chunk-ft9vfys6.js.map → chunk-58bt3hag.js.map} +0 -0
  149. /package/dist/cli/{chunk-sds923fa.js.map → chunk-5cmts6dv.js.map} +0 -0
  150. /package/dist/cli/{chunk-cfyg47zg.js.map → chunk-60hz265r.js.map} +0 -0
  151. /package/dist/cli/{chunk-j134vrp2.js.map → chunk-74wfhv79.js.map} +0 -0
  152. /package/dist/cli/{chunk-nrns10mj.js.map → chunk-9qzgg6mj.js.map} +0 -0
  153. /package/dist/cli/{chunk-tphac74f.js.map → chunk-a57yh0h9.js.map} +0 -0
  154. /package/dist/cli/{chunk-hebn0tpx.js.map → chunk-ave1wcbr.js.map} +0 -0
  155. /package/dist/cli/{chunk-htrwgabr.js.map → chunk-bqxaqn5p.js.map} +0 -0
  156. /package/dist/cli/{chunk-5vjtgs6e.js.map → chunk-bxwhtvw8.js.map} +0 -0
  157. /package/dist/cli/{chunk-n0v7m8ry.js.map → chunk-desvm72z.js.map} +0 -0
  158. /package/dist/cli/{chunk-3v3ffbrj.js.map → chunk-dhwtqnnd.js.map} +0 -0
  159. /package/dist/cli/{chunk-c1y538kd.js.map → chunk-dqhg54mr.js.map} +0 -0
  160. /package/dist/cli/{chunk-42t4jxdx.js.map → chunk-dv2z0rzf.js.map} +0 -0
  161. /package/dist/cli/{chunk-hx3xqnk9.js.map → chunk-gfc5fqvf.js.map} +0 -0
  162. /package/dist/cli/{chunk-7ppf1rva.js.map → chunk-gxtg6ed2.js.map} +0 -0
  163. /package/dist/cli/{chunk-8y2kmjv8.js.map → chunk-hvcxng5f.js.map} +0 -0
  164. /package/dist/cli/{chunk-54ztw1nj.js.map → chunk-j1x92mx9.js.map} +0 -0
  165. /package/dist/cli/{chunk-c887fj0s.js.map → chunk-kdpzw38a.js.map} +0 -0
  166. /package/dist/cli/{chunk-w1r4vase.js.map → chunk-s0bdnc7v.js.map} +0 -0
  167. /package/dist/cli/{chunk-fdrkhpjy.js.map → chunk-sc93apfs.js.map} +0 -0
  168. /package/dist/cli/{chunk-dzwehpy7.js.map → chunk-tfycddbt.js.map} +0 -0
  169. /package/dist/cli/{chunk-3x6x3pph.js.map → chunk-twy7psdz.js.map} +0 -0
  170. /package/dist/cli/{chunk-e9q7a2ak.js.map → chunk-y4msrwm9.js.map} +0 -0
  171. /package/dist/cli/{chunk-tdqhyxfz.js.map → chunk-ydp3065p.js.map} +0 -0
@@ -6958,7 +6958,7 @@ var relatedPageLinks = (entries) => (entries || []).flatMap((entry) => {
6958
6958
  });
6959
6959
 
6960
6960
  // src/core/schema.ts
6961
- import { z as z67 } from "zod";
6961
+ import { z as z68 } from "zod";
6962
6962
 
6963
6963
  // src/ai/ask.ts
6964
6964
  import { z as z4 } from "zod";
@@ -7269,7 +7269,7 @@ var resolveAskBackend = (provider = assistantAdapterSchema.parse(DEFAULT_ASSISTA
7269
7269
  };
7270
7270
 
7271
7271
  // src/analytics/schema.ts
7272
- import { z as z26 } from "zod";
7272
+ import { z as z27 } from "zod";
7273
7273
 
7274
7274
  // src/analytics/adobe.ts
7275
7275
  import { z as z5 } from "zod";
@@ -7304,149 +7304,159 @@ var clearbitOptionsSchema = z8.strictObject({
7304
7304
  });
7305
7305
  var clearbitAdapterSchema = adapterDescriptorSchema("clearbit", clearbitOptionsSchema);
7306
7306
 
7307
- // src/analytics/cloudflare.ts
7307
+ // src/analytics/clics.ts
7308
7308
  import { z as z9 } from "zod";
7309
- var cloudflareOptionsSchema = z9.object({
7310
- token: z9.string().min(1)
7311
- }).catchall(z9.json());
7309
+ var clicsOptionsSchema = z9.strictObject({
7310
+ allowLocalhost: z9.boolean().optional(),
7311
+ disableOutboundLinks: z9.boolean().optional(),
7312
+ projectId: z9.string().min(1)
7313
+ });
7314
+ var clicsAdapterSchema = adapterDescriptorSchema("clics", clicsOptionsSchema);
7315
+
7316
+ // src/analytics/cloudflare.ts
7317
+ import { z as z10 } from "zod";
7318
+ var cloudflareOptionsSchema = z10.object({
7319
+ token: z10.string().min(1)
7320
+ }).catchall(z10.json());
7312
7321
  var cloudflareAdapterSchema = adapterDescriptorSchema("cloudflare", cloudflareOptionsSchema);
7313
7322
 
7314
7323
  // src/analytics/databuddy.ts
7315
- import { z as z10 } from "zod";
7316
- var databuddyOptionsSchema = z10.object({
7317
- clientId: z10.string().min(1)
7318
- }).catchall(z10.string());
7324
+ import { z as z11 } from "zod";
7325
+ var databuddyOptionsSchema = z11.object({
7326
+ clientId: z11.string().min(1)
7327
+ }).catchall(z11.string());
7319
7328
  var databuddyAdapterSchema = adapterDescriptorSchema("databuddy", databuddyOptionsSchema);
7320
7329
 
7321
7330
  // src/analytics/fathom.ts
7322
- import { z as z11 } from "zod";
7323
- var fathomOptionsSchema = z11.object({
7324
- site: z11.string().min(1)
7325
- }).catchall(z11.string());
7331
+ import { z as z12 } from "zod";
7332
+ var fathomOptionsSchema = z12.object({
7333
+ site: z12.string().min(1)
7334
+ }).catchall(z12.string());
7326
7335
  var fathomAdapterSchema = adapterDescriptorSchema("fathom", fathomOptionsSchema);
7327
7336
 
7328
7337
  // src/analytics/google-analytics.ts
7329
- import { z as z12 } from "zod";
7330
- var googleAnalyticsOptionsSchema = z12.object({
7331
- id: z12.string().min(1)
7332
- }).catchall(z12.json());
7338
+ import { z as z13 } from "zod";
7339
+ var googleAnalyticsOptionsSchema = z13.object({
7340
+ id: z13.string().min(1)
7341
+ }).catchall(z13.json());
7333
7342
  var googleAnalyticsAdapterSchema = adapterDescriptorSchema("google-analytics", googleAnalyticsOptionsSchema);
7334
7343
 
7335
7344
  // src/analytics/google-tag-manager.ts
7336
- import { z as z13 } from "zod";
7337
- var googleTagManagerOptionsSchema = z13.strictObject({
7338
- dataLayer: z13.string().min(1).optional(),
7339
- id: z13.string().min(1)
7345
+ import { z as z14 } from "zod";
7346
+ var googleTagManagerOptionsSchema = z14.strictObject({
7347
+ dataLayer: z14.string().min(1).optional(),
7348
+ id: z14.string().min(1)
7340
7349
  });
7341
7350
  var googleTagManagerAdapterSchema = adapterDescriptorSchema("google-tag-manager", googleTagManagerOptionsSchema);
7342
7351
 
7343
7352
  // src/analytics/heap.ts
7344
- import { z as z14 } from "zod";
7345
- var heapOptionsSchema = z14.object({
7346
- id: z14.string().min(1)
7347
- }).catchall(z14.json());
7353
+ import { z as z15 } from "zod";
7354
+ var heapOptionsSchema = z15.object({
7355
+ id: z15.string().min(1)
7356
+ }).catchall(z15.json());
7348
7357
  var heapAdapterSchema = adapterDescriptorSchema("heap", heapOptionsSchema);
7349
7358
 
7350
7359
  // src/analytics/hightouch.ts
7351
- import { z as z15 } from "zod";
7352
- var hightouchOptionsSchema = z15.object({
7353
- host: z15.string().min(1).optional(),
7354
- key: z15.string().min(1)
7355
- }).catchall(z15.json());
7360
+ import { z as z16 } from "zod";
7361
+ var hightouchOptionsSchema = z16.object({
7362
+ host: z16.string().min(1).optional(),
7363
+ key: z16.string().min(1)
7364
+ }).catchall(z16.json());
7356
7365
  var hightouchAdapterSchema = adapterDescriptorSchema("hightouch", hightouchOptionsSchema);
7357
7366
  var HIGHTOUCH_SPA_PAGEVIEWS = spaPageviews("__blumeHightouchPath", "htevents.page();");
7358
7367
 
7359
7368
  // src/analytics/hotjar.ts
7360
- import { z as z16 } from "zod";
7361
- var hotjarOptionsSchema = z16.strictObject({
7362
- id: z16.number().int().positive(),
7363
- version: z16.number().int().positive().optional()
7369
+ import { z as z17 } from "zod";
7370
+ var hotjarOptionsSchema = z17.strictObject({
7371
+ id: z17.number().int().positive(),
7372
+ version: z17.number().int().positive().optional()
7364
7373
  });
7365
7374
  var hotjarAdapterSchema = adapterDescriptorSchema("hotjar", hotjarOptionsSchema);
7366
7375
 
7367
7376
  // src/analytics/logrocket.ts
7368
- import { z as z17 } from "zod";
7369
- var logrocketOptionsSchema = z17.object({
7370
- id: z17.string().min(1)
7371
- }).catchall(z17.json());
7377
+ import { z as z18 } from "zod";
7378
+ var logrocketOptionsSchema = z18.object({
7379
+ id: z18.string().min(1)
7380
+ }).catchall(z18.json());
7372
7381
  var logrocketAdapterSchema = adapterDescriptorSchema("logrocket", logrocketOptionsSchema);
7373
7382
 
7374
7383
  // src/analytics/mixpanel.ts
7375
- import { z as z18 } from "zod";
7376
- var mixpanelOptionsSchema = z18.object({
7377
- region: z18.enum(["us", "eu", "in"]).optional(),
7378
- token: z18.string().min(1)
7379
- }).catchall(z18.json());
7384
+ import { z as z19 } from "zod";
7385
+ var mixpanelOptionsSchema = z19.object({
7386
+ region: z19.enum(["us", "eu", "in"]).optional(),
7387
+ token: z19.string().min(1)
7388
+ }).catchall(z19.json());
7380
7389
  var mixpanelAdapterSchema = adapterDescriptorSchema("mixpanel", mixpanelOptionsSchema);
7381
7390
 
7382
7391
  // src/analytics/one-dollar-stats.ts
7383
- import { z as z19 } from "zod";
7384
- var oneDollarStatsOptionsSchema = z19.object({
7385
- hostname: z19.string().regex(/^[\p{L}\p{N}-]+(?:\.[\p{L}\p{N}-]+)*(?::\d+)?$/u, {
7392
+ import { z as z20 } from "zod";
7393
+ var oneDollarStatsOptionsSchema = z20.object({
7394
+ hostname: z20.string().regex(/^[\p{L}\p{N}-]+(?:\.[\p{L}\p{N}-]+)*(?::\d+)?$/u, {
7386
7395
  message: "`hostname` must be a bare host name like `docs.example.com`, without `https://`, a path, a query, or a fragment."
7387
7396
  }).optional()
7388
- }).catchall(z19.string());
7397
+ }).catchall(z20.string());
7389
7398
  var oneDollarStatsAdapterSchema = adapterDescriptorSchema("one-dollar-stats", oneDollarStatsOptionsSchema);
7390
7399
 
7391
7400
  // src/analytics/pirsch.ts
7392
- import { z as z20 } from "zod";
7393
- var pirschOptionsSchema = z20.object({
7394
- code: z20.string().min(1)
7395
- }).catchall(z20.string());
7401
+ import { z as z21 } from "zod";
7402
+ var pirschOptionsSchema = z21.object({
7403
+ code: z21.string().min(1)
7404
+ }).catchall(z21.string());
7396
7405
  var pirschAdapterSchema = adapterDescriptorSchema("pirsch", pirschOptionsSchema);
7397
7406
 
7398
7407
  // src/analytics/plausible.ts
7399
- import { z as z21 } from "zod";
7400
- var plausibleOptionsSchema = z21.object({
7401
- domain: z21.string().min(1),
7402
- host: z21.string().min(1).optional()
7403
- }).catchall(z21.string());
7408
+ import { z as z22 } from "zod";
7409
+ var plausibleOptionsSchema = z22.object({
7410
+ domain: z22.string().min(1),
7411
+ host: z22.string().min(1).optional()
7412
+ }).catchall(z22.string());
7404
7413
  var plausibleAdapterSchema = adapterDescriptorSchema("plausible", plausibleOptionsSchema);
7405
7414
 
7406
7415
  // src/analytics/posthog.ts
7407
- import { z as z22 } from "zod";
7408
- var posthogOptionsSchema = z22.object({
7409
- host: z22.string().optional(),
7410
- key: z22.string().min(1)
7411
- }).catchall(z22.json());
7416
+ import { z as z23 } from "zod";
7417
+ var posthogOptionsSchema = z23.object({
7418
+ host: z23.string().optional(),
7419
+ key: z23.string().min(1)
7420
+ }).catchall(z23.json());
7412
7421
  var posthogAdapterSchema = adapterDescriptorSchema("posthog", posthogOptionsSchema);
7413
7422
  var POSTHOG_SPA_PAGEVIEWS = spaPageviews("__blumePosthogPath", 'posthog.capture("$pageview");');
7414
7423
 
7415
7424
  // src/analytics/script.ts
7416
- import { z as z23 } from "zod";
7417
- var scriptOptionsSchema = z23.strictObject({
7418
- attributes: z23.record(z23.string(), z23.string()).optional(),
7419
- content: z23.string().optional(),
7420
- src: z23.string().optional(),
7421
- strategy: z23.enum(["async", "defer"]).optional()
7425
+ import { z as z24 } from "zod";
7426
+ var scriptOptionsSchema = z24.strictObject({
7427
+ attributes: z24.record(z24.string(), z24.string()).optional(),
7428
+ content: z24.string().optional(),
7429
+ src: z24.string().optional(),
7430
+ strategy: z24.enum(["async", "defer"]).optional()
7422
7431
  }).refine((value) => Boolean(value.src) !== Boolean(value.content), {
7423
7432
  message: "An analytics script must set exactly one of `src` or `content`."
7424
7433
  });
7425
7434
  var scriptAdapterSchema = adapterDescriptorSchema("script", scriptOptionsSchema);
7426
7435
 
7427
7436
  // src/analytics/segment.ts
7428
- import { z as z24 } from "zod";
7429
- var segmentOptionsSchema = z24.object({
7430
- cdn: z24.string().min(1).optional(),
7431
- key: z24.string().min(1)
7432
- }).catchall(z24.json());
7437
+ import { z as z25 } from "zod";
7438
+ var segmentOptionsSchema = z25.object({
7439
+ cdn: z25.string().min(1).optional(),
7440
+ key: z25.string().min(1)
7441
+ }).catchall(z25.json());
7433
7442
  var segmentAdapterSchema = adapterDescriptorSchema("segment", segmentOptionsSchema);
7434
7443
  var SEGMENT_SPA_PAGEVIEWS = spaPageviews("__blumeSegmentPath", "analytics.page();");
7435
7444
 
7436
7445
  // src/analytics/vercel.ts
7437
- import { z as z25 } from "zod";
7438
- var vercelOptionsSchema = z25.object({
7439
- debug: z25.boolean().optional(),
7440
- mode: z25.enum(["auto", "development", "production"]).optional()
7441
- }).catchall(z25.json());
7446
+ import { z as z26 } from "zod";
7447
+ var vercelOptionsSchema = z26.object({
7448
+ debug: z26.boolean().optional(),
7449
+ mode: z26.enum(["auto", "development", "production"]).optional()
7450
+ }).catchall(z26.json());
7442
7451
  var vercelAdapterSchema = adapterDescriptorSchema("vercel", vercelOptionsSchema);
7443
7452
 
7444
7453
  // src/analytics/schema.ts
7445
- var analyticsAdapterSchema = z26.discriminatedUnion("kind", [
7454
+ var analyticsAdapterSchema = z27.discriminatedUnion("kind", [
7446
7455
  adobeAdapterSchema,
7447
7456
  amplitudeAdapterSchema,
7448
7457
  clarityAdapterSchema,
7449
7458
  clearbitAdapterSchema,
7459
+ clicsAdapterSchema,
7450
7460
  cloudflareAdapterSchema,
7451
7461
  databuddyAdapterSchema,
7452
7462
  fathomAdapterSchema,
@@ -7466,29 +7476,29 @@ var analyticsAdapterSchema = z26.discriminatedUnion("kind", [
7466
7476
  vercelAdapterSchema
7467
7477
  ]);
7468
7478
  var ARRAY_HINT = 'analytics is a list of adapters — e.g. `analytics: [posthog({ key }), vercel(), plausible({ domain }), script({ src })]`, imported from "blume/analytics".';
7469
- var analyticsConfigSchema = z26.array(analyticsAdapterSchema, {
7479
+ var analyticsConfigSchema = z27.array(analyticsAdapterSchema, {
7470
7480
  error: (issue) => issue.code === "invalid_type" ? ARRAY_HINT : undefined
7471
7481
  }).default([]);
7472
7482
 
7473
7483
  // src/captcha/schema.ts
7474
- import { z as z29 } from "zod";
7484
+ import { z as z30 } from "zod";
7475
7485
 
7476
7486
  // src/captcha/hcaptcha.ts
7477
- import { z as z27 } from "zod";
7478
- var hcaptchaOptionsSchema = z27.strictObject({
7479
- siteKey: z27.string().min(1)
7487
+ import { z as z28 } from "zod";
7488
+ var hcaptchaOptionsSchema = z28.strictObject({
7489
+ siteKey: z28.string().min(1)
7480
7490
  });
7481
7491
  var hcaptchaAdapterSchema = adapterDescriptorSchema("hcaptcha", hcaptchaOptionsSchema);
7482
7492
 
7483
7493
  // src/captcha/turnstile.ts
7484
- import { z as z28 } from "zod";
7485
- var turnstileOptionsSchema = z28.strictObject({
7486
- siteKey: z28.string().min(1)
7494
+ import { z as z29 } from "zod";
7495
+ var turnstileOptionsSchema = z29.strictObject({
7496
+ siteKey: z29.string().min(1)
7487
7497
  });
7488
7498
  var turnstileAdapterSchema = adapterDescriptorSchema("turnstile", turnstileOptionsSchema);
7489
7499
 
7490
7500
  // src/captcha/schema.ts
7491
- var captchaAdapterSchema = z29.discriminatedUnion("kind", [hcaptchaAdapterSchema, turnstileAdapterSchema], {
7501
+ var captchaAdapterSchema = z30.discriminatedUnion("kind", [hcaptchaAdapterSchema, turnstileAdapterSchema], {
7492
7502
  error: 'captcha takes one adapter — e.g. `captcha: turnstile({ siteKey })` or `captcha: hcaptcha({ siteKey })`, imported from "blume/captcha".'
7493
7503
  });
7494
7504
  var captchaSettings = (adapter) => ({
@@ -7533,51 +7543,51 @@ var PRIMITIVES = new Set([
7533
7543
  ]);
7534
7544
 
7535
7545
  // src/consent/schema.ts
7536
- import { z as z33 } from "zod";
7546
+ import { z as z34 } from "zod";
7537
7547
 
7538
7548
  // src/consent/ethyca.ts
7539
- import { z as z30 } from "zod";
7540
- var ethycaOptionsSchema = z30.strictObject({
7541
- notice: z30.string().min(1).optional(),
7542
- privacyCenter: z30.url({ protocol: /^https?$/u }),
7543
- propertyId: z30.string().min(1).optional()
7549
+ import { z as z31 } from "zod";
7550
+ var ethycaOptionsSchema = z31.strictObject({
7551
+ notice: z31.string().min(1).optional(),
7552
+ privacyCenter: z31.url({ protocol: /^https?$/u }),
7553
+ propertyId: z31.string().min(1).optional()
7544
7554
  });
7545
7555
  var ethycaAdapterSchema = adapterDescriptorSchema("ethyca", ethycaOptionsSchema);
7546
7556
 
7547
7557
  // src/consent/native.ts
7548
- import { z as z31 } from "zod";
7549
- var nativeOptionsSchema = z31.strictObject({
7550
- policy: z31.string().min(1).optional()
7558
+ import { z as z32 } from "zod";
7559
+ var nativeOptionsSchema = z32.strictObject({
7560
+ policy: z32.string().min(1).optional()
7551
7561
  });
7552
7562
  var nativeAdapterSchema = adapterDescriptorSchema("native", nativeOptionsSchema);
7553
7563
 
7554
7564
  // src/consent/osano.ts
7555
- import { z as z32 } from "zod";
7556
- var osanoOptionsSchema = z32.strictObject({
7557
- configId: z32.string().min(1),
7558
- customerId: z32.string().min(1)
7565
+ import { z as z33 } from "zod";
7566
+ var osanoOptionsSchema = z33.strictObject({
7567
+ configId: z33.string().min(1),
7568
+ customerId: z33.string().min(1)
7559
7569
  });
7560
7570
  var osanoAdapterSchema = adapterDescriptorSchema("osano", osanoOptionsSchema);
7561
7571
 
7562
7572
  // src/consent/schema.ts
7563
7573
  var ADAPTER_HINT = 'consent takes one adapter — e.g. `consent: native()` or `consent: osano({ customerId, configId })`, imported from "blume/consent".';
7564
- var consentAdapterSchema = z33.discriminatedUnion("kind", [ethycaAdapterSchema, nativeAdapterSchema, osanoAdapterSchema], { error: ADAPTER_HINT });
7574
+ var consentAdapterSchema = z34.discriminatedUnion("kind", [ethycaAdapterSchema, nativeAdapterSchema, osanoAdapterSchema], { error: ADAPTER_HINT });
7565
7575
  var consentConfigSchema = consentAdapterSchema.optional().transform((adapter) => adapter ?? null);
7566
7576
 
7567
7577
  // src/deploy/adapters/registry.ts
7568
- import { z as z36 } from "zod";
7578
+ import { z as z37 } from "zod";
7569
7579
 
7570
7580
  // src/deploy/adapters/types.ts
7571
- import { z as z34 } from "zod";
7572
- var siteUrlSchema = z34.url({
7581
+ import { z as z35 } from "zod";
7582
+ var siteUrlSchema = z35.url({
7573
7583
  error: 'Use an absolute http(s) URL with a host, like "https://docs.example.com" or "http://localhost:4321".',
7574
7584
  protocol: /^https?$/u
7575
7585
  });
7576
- var deployOptionsSchema = z34.object({
7577
- base: z34.string().optional(),
7578
- output: z34.enum(["static", "server"]).optional(),
7586
+ var deployOptionsSchema = z35.object({
7587
+ base: z35.string().optional(),
7588
+ output: z35.enum(["static", "server"]).optional(),
7579
7589
  site: siteUrlSchema.optional()
7580
- }).catchall(z34.json());
7590
+ }).catchall(z35.json());
7581
7591
  var NAMED_OPTIONS = new Set(["base", "output", "site"]);
7582
7592
  var deployPassthrough = (options, configOptions = []) => Object.fromEntries(Object.entries(options).filter(([key]) => !(NAMED_OPTIONS.has(key) || configOptions.includes(key))));
7583
7593
  var serverRuntimeDeps = (options, adapterPackage) => options.output === "static" ? [] : [adapterPackage];
@@ -7605,13 +7615,13 @@ var netlify = (options = {}) => ({
7605
7615
  });
7606
7616
 
7607
7617
  // src/deploy/adapters/node.ts
7608
- import { z as z35 } from "zod";
7618
+ import { z as z36 } from "zod";
7609
7619
  var NODE_ADAPTER_PACKAGE = "@astrojs/node";
7610
7620
  var nodeOptionsSchema = deployOptionsSchema.extend({
7611
- allowedDomains: z35.array(z35.strictObject({
7612
- hostname: z35.string().min(1).optional(),
7613
- port: z35.string().min(1).optional(),
7614
- protocol: z35.string().min(1).optional()
7621
+ allowedDomains: z36.array(z36.strictObject({
7622
+ hostname: z36.string().min(1).optional(),
7623
+ port: z36.string().min(1).optional(),
7624
+ protocol: z36.string().min(1).optional()
7615
7625
  })).optional()
7616
7626
  });
7617
7627
  var nodeAdapterSchema = adapterDescriptorSchema("node", nodeOptionsSchema);
@@ -7635,14 +7645,14 @@ var vercel = (options = {}) => ({
7635
7645
 
7636
7646
  // src/deploy/adapters/registry.ts
7637
7647
  var HINT = 'deployment takes a host adapter from "blume/deploy" — e.g. `deployment: vercel()`, `netlify({ output: "static" })`, `node({ site })` — or `{ site, base }` for a static build on any host. The 1.x `adapter`/`output` fields were removed.';
7638
- var staticDeploymentSchema = z36.strictObject({
7639
- base: z36.string().optional(),
7640
- kind: z36.literal("static").optional(),
7648
+ var staticDeploymentSchema = z37.strictObject({
7649
+ base: z37.string().optional(),
7650
+ kind: z37.literal("static").optional(),
7641
7651
  site: siteUrlSchema.optional()
7642
7652
  }, {
7643
7653
  error: (issue) => issue.code === "unrecognized_keys" ? HINT : undefined
7644
7654
  });
7645
- var deploymentInputSchema = z36.discriminatedUnion("kind", [
7655
+ var deploymentInputSchema = z37.discriminatedUnion("kind", [
7646
7656
  cloudflareAdapterSchema2,
7647
7657
  netlifyAdapterSchema,
7648
7658
  nodeAdapterSchema,
@@ -7684,34 +7694,64 @@ var resolvedDeploymentSchema = deploymentInputSchema.transform((value) => {
7684
7694
  });
7685
7695
 
7686
7696
  // src/narration/provider.ts
7687
- import { z as z37 } from "zod";
7697
+ import { z as z38 } from "zod";
7688
7698
  var DEFAULT_NARRATION_MODEL = "openai/tts-1-hd";
7689
7699
  var DEFAULT_NARRATION_VOICE = "alloy";
7690
- var narrationProviderSchema = adapterDescriptorSchema("gateway", z37.strictObject({
7700
+ var OPENAI_SPEECH_DEP = "@ai-sdk/openai";
7701
+ var hasCredentials = (url) => {
7702
+ const parsed = URL.parse(url);
7703
+ return Boolean(parsed?.username || parsed?.password);
7704
+ };
7705
+ var speechOptions = {
7706
+ instructions: z38.string().min(1).optional(),
7707
+ voice: z38.string().min(1).default(DEFAULT_NARRATION_VOICE)
7708
+ };
7709
+ var gatewayNarrationSchema = adapterDescriptorSchema("gateway", z38.strictObject({
7691
7710
  ...sharedOptions(GATEWAY_API_KEY_ENV),
7692
- instructions: z37.string().min(1).optional(),
7693
- model: z37.string().min(1).default(DEFAULT_NARRATION_MODEL),
7694
- voice: z37.string().min(1).default(DEFAULT_NARRATION_VOICE)
7711
+ ...speechOptions,
7712
+ model: z38.string().min(1).default(DEFAULT_NARRATION_MODEL)
7695
7713
  }));
7714
+ var openaiNarrationSchema = adapterDescriptorSchema("openai", z38.strictObject({
7715
+ ...sharedOptions(OPENAI_API_KEY_ENV),
7716
+ ...speechOptions,
7717
+ apiKeyEnv: z38.string().min(1).optional(),
7718
+ baseUrl: z38.url().refine((url) => !hasCredentials(url), {
7719
+ message: "Credentials don't go in the baseUrl: name the env var holding the key in apiKeyEnv."
7720
+ }).optional(),
7721
+ model: z38.string().min(1)
7722
+ }));
7723
+ var narrationProviderSchema = z38.discriminatedUnion("kind", [gatewayNarrationSchema, openaiNarrationSchema]).transform((provider) => {
7724
+ if (provider.kind !== "openai") {
7725
+ return provider;
7726
+ }
7727
+ const { options } = provider;
7728
+ const apiKeyEnv = options.apiKeyEnv ?? (options.baseUrl ? undefined : OPENAI_API_KEY_ENV);
7729
+ return {
7730
+ ...provider,
7731
+ options: apiKeyEnv ? { ...options, apiKeyEnv } : options,
7732
+ requiredSecrets: apiKeyEnv ? [apiKeyEnv] : [],
7733
+ runtimeDeps: [OPENAI_SPEECH_DEP]
7734
+ };
7735
+ });
7696
7736
 
7697
7737
  // src/ratelimit/schema.ts
7698
- import { z as z41 } from "zod";
7738
+ import { z as z42 } from "zod";
7699
7739
 
7700
7740
  // src/ratelimit/cloudflare.ts
7701
- import { z as z38 } from "zod";
7741
+ import { z as z39 } from "zod";
7702
7742
  var RATE_LIMIT_BINDING = "BLUME_RATE_LIMIT";
7703
- var cloudflareRateLimitOptionsSchema = z38.strictObject({
7704
- namespaceId: z38.string().regex(/^[1-9]\d*$/u, "namespaceId is a positive integer, as a string.").optional(),
7705
- requests: z38.number().int().positive().optional(),
7706
- window: z38.union([z38.literal(10), z38.literal(60)]).optional()
7743
+ var cloudflareRateLimitOptionsSchema = z39.strictObject({
7744
+ namespaceId: z39.string().regex(/^[1-9]\d*$/u, "namespaceId is a positive integer, as a string.").optional(),
7745
+ requests: z39.number().int().positive().optional(),
7746
+ window: z39.union([z39.literal(10), z39.literal(60)]).optional()
7707
7747
  });
7708
7748
  var cloudflareRateLimitAdapterSchema = adapterDescriptorSchema("cloudflare", cloudflareRateLimitOptionsSchema);
7709
7749
 
7710
7750
  // src/ratelimit/memory.ts
7711
- import { z as z39 } from "zod";
7712
- var rateLimitOptionsSchema = z39.strictObject({
7713
- requests: z39.number().int().positive().optional(),
7714
- window: z39.number().int().positive().optional()
7751
+ import { z as z40 } from "zod";
7752
+ var rateLimitOptionsSchema = z40.strictObject({
7753
+ requests: z40.number().int().positive().optional(),
7754
+ window: z40.number().int().positive().optional()
7715
7755
  });
7716
7756
  var memoryAdapterSchema = adapterDescriptorSchema("memory", rateLimitOptionsSchema);
7717
7757
  var memory = (options = {}) => ({
@@ -7722,35 +7762,35 @@ var memory = (options = {}) => ({
7722
7762
  });
7723
7763
 
7724
7764
  // src/ratelimit/upstash.ts
7725
- import { z as z40 } from "zod";
7765
+ import { z as z41 } from "zod";
7726
7766
  var upstashOptionsSchema = rateLimitOptionsSchema.extend({
7727
- tokenEnv: z40.string().min(1).optional(),
7728
- urlEnv: z40.string().min(1).optional()
7767
+ tokenEnv: z41.string().min(1).optional(),
7768
+ urlEnv: z41.string().min(1).optional()
7729
7769
  });
7730
7770
  var upstashAdapterSchema = adapterDescriptorSchema("upstash", upstashOptionsSchema);
7731
7771
 
7732
7772
  // src/ratelimit/schema.ts
7733
7773
  var ADAPTER_HINT2 = 'rateLimit takes one adapter — e.g. `rateLimit: upstash()` or `rateLimit: memory({ requests: 60 })`, imported from "blume/ratelimit" — or `false` to turn it off.';
7734
- var rateLimitAdapterSchema = z41.discriminatedUnion("kind", [
7774
+ var rateLimitAdapterSchema = z42.discriminatedUnion("kind", [
7735
7775
  cloudflareRateLimitAdapterSchema,
7736
7776
  memoryAdapterSchema,
7737
7777
  upstashAdapterSchema
7738
7778
  ]);
7739
- var rateLimitConfigSchema = z41.union([z41.literal(false), rateLimitAdapterSchema], { error: ADAPTER_HINT2 }).optional().transform((adapter) => adapter === false ? null : adapter ?? memory());
7779
+ var rateLimitConfigSchema = z42.union([z42.literal(false), rateLimitAdapterSchema], { error: ADAPTER_HINT2 }).optional().transform((adapter) => adapter === false ? null : adapter ?? memory());
7740
7780
 
7741
7781
  // src/reference/options.ts
7742
- import { z as z42 } from "zod";
7782
+ import { z as z43 } from "zod";
7743
7783
  var isBoolean = (value) => typeof value === "boolean";
7744
- var referenceSourceSchema = z42.strictObject({
7745
- includeInLlms: z42.boolean().default(true),
7746
- includeInSearch: z42.boolean().default(true),
7747
- label: z42.string().optional(),
7748
- noindex: z42.boolean().default(false),
7749
- route: z42.string().optional(),
7750
- seoDescriptionSuffix: z42.boolean().default(true),
7751
- spec: z42.string()
7784
+ var referenceSourceSchema = z43.strictObject({
7785
+ includeInLlms: z43.boolean().default(true),
7786
+ includeInSearch: z43.boolean().default(true),
7787
+ label: z43.string().optional(),
7788
+ noindex: z43.boolean().default(false),
7789
+ route: z43.string().optional(),
7790
+ seoDescriptionSuffix: z43.boolean().default(true),
7791
+ spec: z43.string()
7752
7792
  });
7753
- var overlaysSchema = z42.array(z42.string()).default([]);
7793
+ var overlaysSchema = z43.array(z43.string()).default([]);
7754
7794
  var overlaysHaveSpec = (options) => !options.overlays || options.spec !== undefined;
7755
7795
  var overlaysNeedSpecIssue = {
7756
7796
  message: "`overlays` belongs to the `spec` shorthand; with `sources`, give each source its own `overlays`.",
@@ -7759,19 +7799,19 @@ var overlaysNeedSpecIssue = {
7759
7799
  var openapiSourceSchema = referenceSourceSchema.extend({
7760
7800
  overlays: overlaysSchema
7761
7801
  });
7762
- var graphqlAuthSchema = z42.strictObject({
7763
- method: z42.enum(AUTH_METHODS),
7764
- name: z42.string().optional()
7802
+ var graphqlAuthSchema = z43.strictObject({
7803
+ method: z43.enum(AUTH_METHODS),
7804
+ name: z43.string().optional()
7765
7805
  });
7766
7806
  var graphqlSourceSchema = referenceSourceSchema.extend({
7767
7807
  auth: graphqlAuthSchema.optional(),
7768
- endpoint: z42.string().optional()
7808
+ endpoint: z43.string().optional()
7769
7809
  });
7770
- var playgroundSchema = z42.union([
7771
- z42.boolean(),
7772
- z42.strictObject({
7773
- enabled: z42.boolean().default(true),
7774
- proxy: z42.union([z42.boolean(), z42.string()]).default(false)
7810
+ var playgroundSchema = z43.union([
7811
+ z43.boolean(),
7812
+ z43.strictObject({
7813
+ enabled: z43.boolean().default(true),
7814
+ proxy: z43.union([z43.boolean(), z43.string()]).default(false)
7775
7815
  })
7776
7816
  ]).default(true).transform((value) => isBoolean(value) ? { enabled: value, proxy: false } : value);
7777
7817
  var RENDERER_REMOVED_HINT = '`renderer` was removed: the Scalar embed is its own adapter. Replace `openapi({ spec, renderer: "scalar", theme })` with a separate `scalar({ spec, theme })` entry in `reference`, imported from "blume/reference" — `route`, `sources`, `label`, and `noindex` carry over, and the native display options (`codeSamples`, `expandSchemas`, `playground`) don\'t apply to the embed.';
@@ -7785,10 +7825,10 @@ var rendererRemovedHint = {
7785
7825
  }
7786
7826
  };
7787
7827
  var sharedOptions2 = (defaults) => ({
7788
- codeSamples: z42.union([z42.literal(false), z42.array(z42.string())]).default(defaults.codeSamples),
7828
+ codeSamples: z43.union([z43.literal(false), z43.array(z43.string())]).default(defaults.codeSamples),
7789
7829
  playground: playgroundSchema,
7790
- route: z42.string().default(defaults.route),
7791
- spec: z42.string().optional()
7830
+ route: z43.string().default(defaults.route),
7831
+ spec: z43.string().optional()
7792
7832
  });
7793
7833
  var liftSpec = (sourceSchema) => ({
7794
7834
  overlays,
@@ -7808,60 +7848,60 @@ var missingSourcesIssue = (factory) => ({
7808
7848
  });
7809
7849
 
7810
7850
  // src/reference/schema.ts
7811
- import { z as z47 } from "zod";
7851
+ import { z as z48 } from "zod";
7812
7852
 
7813
7853
  // src/reference/asyncapi.ts
7814
- import { z as z43 } from "zod";
7815
- var asyncapiOptionsSchema = z43.strictObject({
7854
+ import { z as z44 } from "zod";
7855
+ var asyncapiOptionsSchema = z44.strictObject({
7816
7856
  ...sharedOptions2({ codeSamples: [], route: "/events" }),
7817
- expandSchemas: z43.boolean().default(false),
7818
- sources: z43.array(referenceSourceSchema).default([])
7857
+ expandSchemas: z44.boolean().default(false),
7858
+ sources: z44.array(referenceSourceSchema).default([])
7819
7859
  }, rendererRemovedHint).transform(liftSpec(referenceSourceSchema)).refine(hasSources, missingSourcesIssue("asyncapi"));
7820
7860
  var asyncapiAdapterSchema = adapterDescriptorSchema("asyncapi", asyncapiOptionsSchema);
7821
7861
 
7822
7862
  // src/reference/graphql.ts
7823
- import { z as z44 } from "zod";
7824
- var graphqlOptionsSchema = z44.strictObject({
7863
+ import { z as z45 } from "zod";
7864
+ var graphqlOptionsSchema = z45.strictObject({
7825
7865
  ...sharedOptions2({
7826
7866
  codeSamples: ["curl", "js", "python"],
7827
7867
  route: "/graphql"
7828
7868
  }),
7829
7869
  auth: graphqlAuthSchema.optional(),
7830
- endpoint: z44.string().optional(),
7831
- sources: z44.array(graphqlSourceSchema).default([])
7870
+ endpoint: z45.string().optional(),
7871
+ sources: z45.array(graphqlSourceSchema).default([])
7832
7872
  }).transform(liftSpec(graphqlSourceSchema)).refine(hasSources, missingSourcesIssue("graphql"));
7833
7873
  var graphqlAdapterSchema = adapterDescriptorSchema("graphql", graphqlOptionsSchema);
7834
7874
 
7835
7875
  // src/reference/openapi.ts
7836
- import { z as z45 } from "zod";
7837
- var openapiOptionsSchema = z45.strictObject({
7876
+ import { z as z46 } from "zod";
7877
+ var openapiOptionsSchema = z46.strictObject({
7838
7878
  ...sharedOptions2({
7839
7879
  codeSamples: ["curl", "js", "python"],
7840
7880
  route: "/reference"
7841
7881
  }),
7842
- expandSchemas: z45.boolean().default(false),
7843
- overlays: z45.array(z45.string()).optional(),
7844
- sources: z45.array(openapiSourceSchema).default([])
7882
+ expandSchemas: z46.boolean().default(false),
7883
+ overlays: z46.array(z46.string()).optional(),
7884
+ sources: z46.array(openapiSourceSchema).default([])
7845
7885
  }, rendererRemovedHint).refine(overlaysHaveSpec, overlaysNeedSpecIssue).transform(liftSpec(openapiSourceSchema)).refine(hasSources, missingSourcesIssue("openapi"));
7846
7886
  var openapiAdapterSchema = adapterDescriptorSchema("openapi", openapiOptionsSchema);
7847
7887
 
7848
7888
  // src/reference/scalar.ts
7849
- import { z as z46 } from "zod";
7889
+ import { z as z47 } from "zod";
7850
7890
  var SCALAR_RUNTIME_DEPS = ["@scalar/astro"];
7851
- var scalarSourceSchema = z46.strictObject({
7852
- label: z46.string().optional(),
7853
- noindex: z46.boolean().default(false),
7891
+ var scalarSourceSchema = z47.strictObject({
7892
+ label: z47.string().optional(),
7893
+ noindex: z47.boolean().default(false),
7854
7894
  overlays: overlaysSchema,
7855
- route: z46.string().optional(),
7856
- spec: z46.string()
7895
+ route: z47.string().optional(),
7896
+ spec: z47.string()
7857
7897
  });
7858
- var scalarOptionsSchema = z46.object({
7859
- overlays: z46.array(z46.string()).optional(),
7860
- route: z46.string().default("/reference"),
7861
- sources: z46.array(scalarSourceSchema).default([]),
7862
- spec: z46.string().optional(),
7863
- theme: z46.string().optional()
7864
- }).catchall(z46.json()).refine(overlaysHaveSpec, overlaysNeedSpecIssue).transform(({ overlays, spec, sources, ...options }) => ({
7898
+ var scalarOptionsSchema = z47.object({
7899
+ overlays: z47.array(z47.string()).optional(),
7900
+ route: z47.string().default("/reference"),
7901
+ sources: z47.array(scalarSourceSchema).default([]),
7902
+ spec: z47.string().optional(),
7903
+ theme: z47.string().optional()
7904
+ }).catchall(z47.json()).refine(overlaysHaveSpec, overlaysNeedSpecIssue).transform(({ overlays, spec, sources, ...options }) => ({
7865
7905
  ...options,
7866
7906
  sources: spec === undefined ? sources : [
7867
7907
  scalarSourceSchema.parse(overlays ? { overlays, spec } : { spec }),
@@ -7871,7 +7911,7 @@ var scalarOptionsSchema = z46.object({
7871
7911
  var scalarAdapterSchema = adapterDescriptorSchema("scalar", scalarOptionsSchema);
7872
7912
 
7873
7913
  // src/reference/schema.ts
7874
- var referenceAdapterSchema = z47.discriminatedUnion("kind", [
7914
+ var referenceAdapterSchema = z48.discriminatedUnion("kind", [
7875
7915
  asyncapiAdapterSchema,
7876
7916
  graphqlAdapterSchema,
7877
7917
  openapiAdapterSchema,
@@ -7882,7 +7922,7 @@ var referenceAdapterSchema = z47.discriminatedUnion("kind", [
7882
7922
  runtimeDeps: value.kind === "scalar" ? [...SCALAR_RUNTIME_DEPS] : []
7883
7923
  }));
7884
7924
  var LIST_HINT = 'reference is a list of adapters — e.g. `reference: [openapi({ spec }), asyncapi({ spec }), graphql({ spec, endpoint }), scalar({ spec })]`, imported from "blume/reference".';
7885
- var referenceConfigSchema = z47.array(referenceAdapterSchema, {
7925
+ var referenceConfigSchema = z48.array(referenceAdapterSchema, {
7886
7926
  error: (issue) => issue.code === "invalid_type" ? LIST_HINT : undefined
7887
7927
  }).default([]);
7888
7928
  var REMOVED_KEYS = ["asyncapi", "graphql", "openapi"];
@@ -7899,8 +7939,8 @@ var removedReferenceKeysHint = (keys) => {
7899
7939
  };
7900
7940
 
7901
7941
  // src/search/adapters/orama.ts
7902
- import { z as z48 } from "zod";
7903
- var oramaOptionsSchema = z48.strictObject({});
7942
+ import { z as z49 } from "zod";
7943
+ var oramaOptionsSchema = z49.strictObject({});
7904
7944
  var orama = (options = {}) => ({
7905
7945
  kind: "orama",
7906
7946
  mode: "static",
@@ -7910,15 +7950,15 @@ var orama = (options = {}) => ({
7910
7950
  });
7911
7951
 
7912
7952
  // src/search/adapters/registry.ts
7913
- import { z as z55 } from "zod";
7953
+ import { z as z56 } from "zod";
7914
7954
 
7915
7955
  // src/search/adapters/algolia.ts
7916
- import { z as z49 } from "zod";
7917
- var algoliaOptionsSchema = z49.object({
7918
- apiKey: z49.string(),
7919
- appId: z49.string(),
7920
- indexName: z49.string()
7921
- }).catchall(z49.json());
7956
+ import { z as z50 } from "zod";
7957
+ var algoliaOptionsSchema = z50.object({
7958
+ apiKey: z50.string(),
7959
+ appId: z50.string(),
7960
+ indexName: z50.string()
7961
+ }).catchall(z50.json());
7922
7962
  var algolia = (options) => ({
7923
7963
  kind: "algolia",
7924
7964
  mode: "hosted",
@@ -7928,8 +7968,8 @@ var algolia = (options) => ({
7928
7968
  });
7929
7969
 
7930
7970
  // src/search/adapters/flexsearch.ts
7931
- import { z as z50 } from "zod";
7932
- var flexsearchOptionsSchema = z50.strictObject({});
7971
+ import { z as z51 } from "zod";
7972
+ var flexsearchOptionsSchema = z51.strictObject({});
7933
7973
  var flexsearch = (options = {}) => ({
7934
7974
  kind: "flexsearch",
7935
7975
  mode: "static",
@@ -7939,10 +7979,10 @@ var flexsearch = (options = {}) => ({
7939
7979
  });
7940
7980
 
7941
7981
  // src/search/adapters/mixedbread.ts
7942
- import { z as z51 } from "zod";
7943
- var mixedbreadOptionsSchema = z51.object({
7944
- storeId: z51.string()
7945
- }).catchall(z51.json());
7982
+ import { z as z52 } from "zod";
7983
+ var mixedbreadOptionsSchema = z52.object({
7984
+ storeId: z52.string()
7985
+ }).catchall(z52.json());
7946
7986
  var mixedbread = (options) => ({
7947
7987
  kind: "mixedbread",
7948
7988
  mode: "server",
@@ -7952,12 +7992,12 @@ var mixedbread = (options) => ({
7952
7992
  });
7953
7993
 
7954
7994
  // src/search/adapters/orama-cloud.ts
7955
- import { z as z52 } from "zod";
7956
- var oramaCloudOptionsSchema = z52.object({
7957
- apiKey: z52.string(),
7958
- endpoint: z52.string(),
7959
- indexId: z52.string().optional()
7960
- }).catchall(z52.json());
7995
+ import { z as z53 } from "zod";
7996
+ var oramaCloudOptionsSchema = z53.object({
7997
+ apiKey: z53.string(),
7998
+ endpoint: z53.string(),
7999
+ indexId: z53.string().optional()
8000
+ }).catchall(z53.json());
7961
8001
  var oramaCloud = (options) => ({
7962
8002
  kind: "orama-cloud",
7963
8003
  mode: "hosted",
@@ -7967,8 +8007,8 @@ var oramaCloud = (options) => ({
7967
8007
  });
7968
8008
 
7969
8009
  // src/search/adapters/pagefind.ts
7970
- import { z as z53 } from "zod";
7971
- var pagefindOptionsSchema = z53.strictObject({});
8010
+ import { z as z54 } from "zod";
8011
+ var pagefindOptionsSchema = z54.strictObject({});
7972
8012
  var pagefind = (options = {}) => ({
7973
8013
  kind: "pagefind",
7974
8014
  mode: "pagefind",
@@ -7978,15 +8018,15 @@ var pagefind = (options = {}) => ({
7978
8018
  });
7979
8019
 
7980
8020
  // src/search/adapters/typesense.ts
7981
- import { z as z54 } from "zod";
7982
- var typesenseOptionsSchema = z54.object({
7983
- apiKey: z54.string(),
7984
- collection: z54.string(),
7985
- host: z54.string(),
7986
- locale: z54.string().optional(),
7987
- port: z54.number().int().positive().optional(),
7988
- protocol: z54.enum(["http", "https"]).optional()
7989
- }).catchall(z54.json());
8021
+ import { z as z55 } from "zod";
8022
+ var typesenseOptionsSchema = z55.object({
8023
+ apiKey: z55.string(),
8024
+ collection: z55.string(),
8025
+ host: z55.string(),
8026
+ locale: z55.string().optional(),
8027
+ port: z55.number().int().positive().optional(),
8028
+ protocol: z55.enum(["http", "https"]).optional()
8029
+ }).catchall(z55.json());
7990
8030
  var typesense = (options) => ({
7991
8031
  kind: "typesense",
7992
8032
  mode: "hosted",
@@ -8003,7 +8043,7 @@ var NONE_SEARCH_ADAPTER = {
8003
8043
  requiredSecrets: [],
8004
8044
  runtimeDeps: []
8005
8045
  };
8006
- var descriptor = (kind, mode, options) => adapterDescriptorSchema(kind, options).extend({ mode: z55.literal(mode) });
8046
+ var descriptor = (kind, mode, options) => adapterDescriptorSchema(kind, options).extend({ mode: z56.literal(mode) });
8007
8047
  var adapterVariants = [
8008
8048
  descriptor("algolia", "hosted", algoliaOptionsSchema),
8009
8049
  descriptor("flexsearch", "static", flexsearchOptionsSchema),
@@ -8013,9 +8053,9 @@ var adapterVariants = [
8013
8053
  descriptor("pagefind", "pagefind", pagefindOptionsSchema),
8014
8054
  descriptor("typesense", "hosted", typesenseOptionsSchema)
8015
8055
  ];
8016
- var resolvedSearchAdapterSchema = z55.discriminatedUnion("kind", [
8056
+ var resolvedSearchAdapterSchema = z56.discriminatedUnion("kind", [
8017
8057
  ...adapterVariants,
8018
- descriptor("none", "none", z55.strictObject({}))
8058
+ descriptor("none", "none", z56.strictObject({}))
8019
8059
  ]).transform((value) => {
8020
8060
  switch (value.kind) {
8021
8061
  case "algolia": {
@@ -8085,19 +8125,19 @@ var normalizeXHandle = (value) => {
8085
8125
  };
8086
8126
 
8087
8127
  // src/sources/registry.ts
8088
- import { z as z65 } from "zod";
8128
+ import { z as z66 } from "zod";
8089
8129
 
8090
8130
  // src/sources/contentful.ts
8091
- import { z as z56 } from "zod";
8131
+ import { z as z57 } from "zod";
8092
8132
  var contentfulOptionsSchema = sharedSourceOptionsSchema.extend({
8093
- contentType: z56.string(),
8094
- environment: z56.string().optional(),
8133
+ contentType: z57.string(),
8134
+ environment: z57.string().optional(),
8095
8135
  fields: sourceFieldMapSchema.optional(),
8096
- host: z56.string().optional(),
8097
- locale: z56.string().optional(),
8136
+ host: z57.string().optional(),
8137
+ locale: z57.string().optional(),
8098
8138
  params: queryParamsSchema.optional(),
8099
- previewHost: z56.string().optional(),
8100
- space: z56.string()
8139
+ previewHost: z57.string().optional(),
8140
+ space: z57.string()
8101
8141
  });
8102
8142
  var contentfulAdapterSchema = adapterDescriptorSchema("contentful", contentfulOptionsSchema);
8103
8143
  var contentful = (options) => ({
@@ -8108,8 +8148,8 @@ var contentful = (options) => ({
8108
8148
  });
8109
8149
 
8110
8150
  // src/sources/custom.ts
8111
- import { z as z57 } from "zod";
8112
- var customOptionsSchema = z57.custom((value) => typeof value === "object" && value !== null && ("load" in value) && typeof value.load === "function" && ("name" in value) && typeof value.name === "string", { message: "custom() takes a ContentSource (an object with name + load)" });
8151
+ import { z as z58 } from "zod";
8152
+ var customOptionsSchema = z58.custom((value) => typeof value === "object" && value !== null && ("load" in value) && typeof value.load === "function" && ("name" in value) && typeof value.name === "string", { message: "custom() takes a ContentSource (an object with name + load)" });
8113
8153
  var customAdapterSchema = adapterDescriptorSchema("custom", customOptionsSchema);
8114
8154
  var custom = (source) => ({
8115
8155
  kind: "custom",
@@ -8119,14 +8159,14 @@ var custom = (source) => ({
8119
8159
  });
8120
8160
 
8121
8161
  // src/sources/github-releases.ts
8122
- import { z as z58 } from "zod";
8162
+ import { z as z59 } from "zod";
8123
8163
  var githubReleasesOptionsSchema = sharedSourceOptionsSchema.extend({
8124
- baseUrl: z58.string().optional(),
8125
- drafts: z58.boolean().optional(),
8126
- limit: z58.number().positive().optional(),
8127
- owner: z58.string(),
8128
- prereleases: z58.boolean().optional(),
8129
- repo: z58.string()
8164
+ baseUrl: z59.string().optional(),
8165
+ drafts: z59.boolean().optional(),
8166
+ limit: z59.number().positive().optional(),
8167
+ owner: z59.string(),
8168
+ prereleases: z59.boolean().optional(),
8169
+ repo: z59.string()
8130
8170
  });
8131
8171
  var githubReleasesAdapterSchema = adapterDescriptorSchema("github-releases", githubReleasesOptionsSchema);
8132
8172
  var githubReleases = (options) => ({
@@ -8137,17 +8177,17 @@ var githubReleases = (options) => ({
8137
8177
  });
8138
8178
 
8139
8179
  // src/sources/mdx-remote.ts
8140
- import { z as z59 } from "zod";
8180
+ import { z as z60 } from "zod";
8141
8181
  var mdxRemoteOptionsSchema = sharedSourceOptionsSchema.extend({
8142
- files: z59.array(z59.string()).optional(),
8143
- github: z59.strictObject({
8144
- owner: z59.string(),
8145
- path: z59.string().default(""),
8146
- ref: z59.string().default("main"),
8147
- repo: z59.string()
8182
+ files: z60.array(z60.string()).optional(),
8183
+ github: z60.strictObject({
8184
+ owner: z60.string(),
8185
+ path: z60.string().default(""),
8186
+ ref: z60.string().default("main"),
8187
+ repo: z60.string()
8148
8188
  }).optional(),
8149
- include: z59.array(z59.string()).default([DEFAULT_CONTENT_GLOB]),
8150
- url: z59.string().optional()
8189
+ include: z60.array(z60.string()).default([DEFAULT_CONTENT_GLOB]),
8190
+ url: z60.string().optional()
8151
8191
  });
8152
8192
  var mdxRemoteAdapterSchema = adapterDescriptorSchema("mdx-remote", mdxRemoteOptionsSchema);
8153
8193
  var GITHUB_HOSTS = new Set(["api.github.com", "raw.githubusercontent.com"]);
@@ -8160,18 +8200,19 @@ var mdxRemote = (options) => ({
8160
8200
  });
8161
8201
 
8162
8202
  // src/sources/notion.ts
8163
- import { z as z60 } from "zod";
8203
+ import { z as z61 } from "zod";
8164
8204
  var notionOptionsSchema = sharedSourceOptionsSchema.extend({
8165
- concurrency: z60.number().positive().optional(),
8166
- database: z60.string(),
8167
- properties: z60.strictObject({
8168
- description: z60.string().optional(),
8169
- order: z60.string().optional(),
8170
- slug: z60.string().optional(),
8171
- status: z60.string().optional(),
8172
- title: z60.string().optional()
8205
+ concurrency: z61.number().positive().optional(),
8206
+ database: z61.string(),
8207
+ mdx: z61.boolean().optional(),
8208
+ properties: z61.strictObject({
8209
+ description: z61.string().optional(),
8210
+ order: z61.string().optional(),
8211
+ slug: z61.string().optional(),
8212
+ status: z61.string().optional(),
8213
+ title: z61.string().optional()
8173
8214
  }).optional(),
8174
- publishedValue: z60.string().optional()
8215
+ publishedValue: z61.string().optional()
8175
8216
  });
8176
8217
  var notionAdapterSchema = adapterDescriptorSchema("notion", notionOptionsSchema);
8177
8218
  var notion = (options) => ({
@@ -8182,10 +8223,10 @@ var notion = (options) => ({
8182
8223
  });
8183
8224
 
8184
8225
  // src/sources/obsidian.ts
8185
- import { z as z61 } from "zod";
8226
+ import { z as z62 } from "zod";
8186
8227
  var obsidianOptionsSchema = sharedSourceOptionsSchema.extend({
8187
- exclude: z61.array(z61.string()).optional(),
8188
- vault: z61.string().min(1)
8228
+ exclude: z62.array(z62.string()).optional(),
8229
+ vault: z62.string().min(1)
8189
8230
  });
8190
8231
  var obsidianAdapterSchema = adapterDescriptorSchema("obsidian", obsidianOptionsSchema);
8191
8232
  var obsidian = (options) => ({
@@ -8196,14 +8237,14 @@ var obsidian = (options) => ({
8196
8237
  });
8197
8238
 
8198
8239
  // src/sources/payload.ts
8199
- import { z as z62 } from "zod";
8240
+ import { z as z63 } from "zod";
8200
8241
  var payloadOptionsSchema = sharedSourceOptionsSchema.extend({
8201
- authCollection: z62.string().optional(),
8202
- collection: z62.string(),
8203
- depth: z62.number().int().nonnegative().optional(),
8242
+ authCollection: z63.string().optional(),
8243
+ collection: z63.string(),
8244
+ depth: z63.number().int().nonnegative().optional(),
8204
8245
  fields: sourceFieldMapSchema.optional(),
8205
8246
  params: queryParamsSchema.optional(),
8206
- url: z62.string()
8247
+ url: z63.string()
8207
8248
  });
8208
8249
  var payloadAdapterSchema = adapterDescriptorSchema("payload", payloadOptionsSchema);
8209
8250
  var payload = (options) => ({
@@ -8214,19 +8255,19 @@ var payload = (options) => ({
8214
8255
  });
8215
8256
 
8216
8257
  // src/sources/sanity.ts
8217
- import { z as z63 } from "zod";
8258
+ import { z as z64 } from "zod";
8218
8259
  var sanityOptionsSchema = sharedSourceOptionsSchema.extend({
8219
- apiVersion: z63.string().optional(),
8220
- dataset: z63.string(),
8221
- fields: z63.strictObject({
8222
- body: z63.string().optional(),
8223
- description: z63.string().optional(),
8224
- lastModified: z63.string().optional(),
8225
- slug: z63.string().optional(),
8226
- title: z63.string().optional()
8260
+ apiVersion: z64.string().optional(),
8261
+ dataset: z64.string(),
8262
+ fields: z64.strictObject({
8263
+ body: z64.string().optional(),
8264
+ description: z64.string().optional(),
8265
+ lastModified: z64.string().optional(),
8266
+ slug: z64.string().optional(),
8267
+ title: z64.string().optional()
8227
8268
  }).optional(),
8228
- projectId: z63.string(),
8229
- query: z63.string()
8269
+ projectId: z64.string(),
8270
+ query: z64.string()
8230
8271
  });
8231
8272
  var sanityAdapterSchema = adapterDescriptorSchema("sanity", sanityOptionsSchema);
8232
8273
  var sanity = (options) => ({
@@ -8237,14 +8278,14 @@ var sanity = (options) => ({
8237
8278
  });
8238
8279
 
8239
8280
  // src/sources/strapi.ts
8240
- import { z as z64 } from "zod";
8281
+ import { z as z65 } from "zod";
8241
8282
  var strapiOptionsSchema = sharedSourceOptionsSchema.extend({
8242
- contentType: z64.string(),
8283
+ contentType: z65.string(),
8243
8284
  fields: sourceFieldMapSchema.optional(),
8244
- locale: z64.string().optional(),
8285
+ locale: z65.string().optional(),
8245
8286
  params: queryParamsSchema.optional(),
8246
- populate: z64.string().optional(),
8247
- url: z64.string()
8287
+ populate: z65.string().optional(),
8288
+ url: z65.string()
8248
8289
  });
8249
8290
  var strapiAdapterSchema = adapterDescriptorSchema("strapi", strapiOptionsSchema);
8250
8291
  var strapi = (options) => ({
@@ -8267,7 +8308,7 @@ var adapterVariants2 = [
8267
8308
  obsidianAdapterSchema,
8268
8309
  customAdapterSchema
8269
8310
  ];
8270
- var sourceAdapterUnion = z65.discriminatedUnion("kind", adapterVariants2);
8311
+ var sourceAdapterUnion = z66.discriminatedUnion("kind", adapterVariants2);
8271
8312
  var FACTORY_FOR_TYPE = new Map([
8272
8313
  ["custom", "custom"],
8273
8314
  ["filesystem", "filesystem"],
@@ -8280,7 +8321,7 @@ var FACTORY_FOR_TYPE = new Map([
8280
8321
  var FACTORIES_HINT = 'content.sources takes adapters imported from "blume/sources" — filesystem({ root }), mdxRemote({ github }), githubReleases({ owner, repo }), sanity({ projectId, dataset, query }), notion({ database }), contentful({ space, contentType }), payload({ url, collection }), strapi({ url, contentType }), obsidian({ vault }), or custom(source).';
8281
8322
  var ARRAY_HINT2 = `content.sources is a list of adapters — e.g. \`sources: [filesystem({ root: "docs" }), githubReleases({ owner, repo, prefix: "changelog" })]\`, imported from "blume/sources".`;
8282
8323
  var isObjectLike = (value) => typeof value === "object" && value !== null;
8283
- var legacyEntrySchema = z65.looseObject({ type: z65.string() });
8324
+ var legacyEntrySchema = z66.looseObject({ type: z66.string() });
8284
8325
  var entryHint = (type) => {
8285
8326
  if (type === undefined) {
8286
8327
  return FACTORIES_HINT;
@@ -8327,14 +8368,14 @@ var resolvedSourceAdapterSchema = sourceAdapterUnion.transform((value) => {
8327
8368
  }
8328
8369
  return custom(value.options);
8329
8370
  });
8330
- var sourceEntrySchema = z65.custom((value) => isObjectLike(value) && ("kind" in value), {
8371
+ var sourceEntrySchema = z66.custom((value) => isObjectLike(value) && ("kind" in value), {
8331
8372
  abort: false,
8332
8373
  error: (issue) => {
8333
8374
  const legacy = legacyEntrySchema.safeParse(issue.input);
8334
8375
  return entryHint(legacy.success ? legacy.data.type : undefined);
8335
8376
  }
8336
8377
  }).pipe(resolvedSourceAdapterSchema);
8337
- var contentSourcesSchema = z65.array(sourceEntrySchema, {
8378
+ var contentSourcesSchema = z66.array(sourceEntrySchema, {
8338
8379
  error: (issue) => issue.code === "invalid_type" ? ARRAY_HINT2 : undefined
8339
8380
  });
8340
8381
 
@@ -8732,188 +8773,188 @@ var apiUrl = (github) => {
8732
8773
  };
8733
8774
 
8734
8775
  // src/core/i18n-ui.ts
8735
- import { z as z66 } from "zod";
8736
- var uiStringsObject = z66.object({
8737
- actions: z66.object({
8738
- addToCursor: z66.string().default("Add to Cursor"),
8739
- addToVscode: z66.string().default("Add to VS Code"),
8740
- askAboutCode: z66.string().default("Ask about this code"),
8741
- connectMcp: z66.string().default("Connect to MCP"),
8742
- copied: z66.string().default("Copied!"),
8743
- copyClaudeCode: z66.string().default("Copy Claude Code command"),
8744
- copyCode: z66.string().default("Copy code"),
8745
- copyCodex: z66.string().default("Copy Codex command"),
8746
- copyFailed: z66.string().default("Copy failed"),
8747
- copyMarkdown: z66.string().default("Copy as Markdown"),
8748
- copyServerUrl: z66.string().default("Copy server URL"),
8749
- edit: z66.string().default("Edit on GitHub"),
8750
- export: z66.string().default("Export"),
8751
- exportEpub: z66.string().default("Export to EPUB"),
8752
- exportPdf: z66.string().default("Export to PDF"),
8753
- generating: z66.string().default("Generating…"),
8754
- openIn: z66.string().default("Open in {name}"),
8755
- openInChat: z66.string().default("Open in chat"),
8756
- openInChatPrompt: z66.string().default("Read {url} so I can ask you questions about this page."),
8757
- scrollToTop: z66.string().default("Scroll to top")
8776
+ import { z as z67 } from "zod";
8777
+ var uiStringsObject = z67.object({
8778
+ actions: z67.object({
8779
+ addToCursor: z67.string().default("Add to Cursor"),
8780
+ addToVscode: z67.string().default("Add to VS Code"),
8781
+ askAboutCode: z67.string().default("Ask about this code"),
8782
+ connectMcp: z67.string().default("Connect to MCP"),
8783
+ copied: z67.string().default("Copied!"),
8784
+ copyClaudeCode: z67.string().default("Copy Claude Code command"),
8785
+ copyCode: z67.string().default("Copy code"),
8786
+ copyCodex: z67.string().default("Copy Codex command"),
8787
+ copyFailed: z67.string().default("Copy failed"),
8788
+ copyMarkdown: z67.string().default("Copy as Markdown"),
8789
+ copyServerUrl: z67.string().default("Copy server URL"),
8790
+ edit: z67.string().default("Edit on GitHub"),
8791
+ export: z67.string().default("Export"),
8792
+ exportEpub: z67.string().default("Export to EPUB"),
8793
+ exportPdf: z67.string().default("Export to PDF"),
8794
+ generating: z67.string().default("Generating…"),
8795
+ openIn: z67.string().default("Open in {name}"),
8796
+ openInChat: z67.string().default("Open in chat"),
8797
+ openInChatPrompt: z67.string().default("Read {url} so I can ask you questions about this page."),
8798
+ scrollToTop: z67.string().default("Scroll to top")
8758
8799
  }).prefault({}),
8759
- assistant: z66.object({
8760
- ai: z66.string().default("AI"),
8761
- clear: z66.string().default("Clear conversation"),
8762
- close: z66.string().default("Close"),
8763
- copy: z66.string().default("Copy conversation"),
8764
- empty: z66.string().default("Ask a question about the docs."),
8765
- error: z66.string().default("Sorry, something went wrong."),
8766
- explainCode: z66.string().default("Explain this code."),
8767
- label: z66.string().default("Ask a question"),
8768
- open: z66.string().default("Open assistant"),
8769
- placeholder: z66.string().default("Ask a question…"),
8770
- rateLimited: z66.string().default("You've asked a lot of questions. Try again in a few minutes."),
8771
- removeCode: z66.string().default("Remove code"),
8772
- send: z66.string().default("Send"),
8773
- support: z66.string().default("Contact support"),
8774
- supportSubject: z66.string().default("Question from the docs"),
8775
- tip: z66.string().default("Tip: You can open and close chat with"),
8776
- title: z66.string().default("Assistant"),
8777
- verifyFailed: z66.string().default("We couldn't check that you're human. Try again."),
8778
- you: z66.string().default("You")
8800
+ assistant: z67.object({
8801
+ ai: z67.string().default("AI"),
8802
+ clear: z67.string().default("Clear conversation"),
8803
+ close: z67.string().default("Close"),
8804
+ copy: z67.string().default("Copy conversation"),
8805
+ empty: z67.string().default("Ask a question about the docs."),
8806
+ error: z67.string().default("Sorry, something went wrong."),
8807
+ explainCode: z67.string().default("Explain this code."),
8808
+ label: z67.string().default("Ask a question"),
8809
+ open: z67.string().default("Open assistant"),
8810
+ placeholder: z67.string().default("Ask a question…"),
8811
+ rateLimited: z67.string().default("You've asked a lot of questions. Try again in a few minutes."),
8812
+ removeCode: z67.string().default("Remove code"),
8813
+ send: z67.string().default("Send"),
8814
+ support: z67.string().default("Contact support"),
8815
+ supportSubject: z67.string().default("Question from the docs"),
8816
+ tip: z67.string().default("Tip: You can open and close chat with"),
8817
+ title: z67.string().default("Assistant"),
8818
+ verifyFailed: z67.string().default("We couldn't check that you're human. Try again."),
8819
+ you: z67.string().default("You")
8779
8820
  }).prefault({}),
8780
- banner: z66.object({
8781
- dismiss: z66.string().default("Dismiss announcement")
8821
+ banner: z67.object({
8822
+ dismiss: z67.string().default("Dismiss announcement")
8782
8823
  }).prefault({}),
8783
- changelog: z66.object({
8784
- description: z66.string().default("Product updates, new features, and fixes from every release."),
8785
- empty: z66.string().default("No changelog entries yet."),
8786
- title: z66.string().default("Changelog")
8824
+ changelog: z67.object({
8825
+ description: z67.string().default("Product updates, new features, and fixes from every release."),
8826
+ empty: z67.string().default("No changelog entries yet."),
8827
+ title: z67.string().default("Changelog")
8787
8828
  }).prefault({}),
8788
- consent: z66.object({
8789
- accept: z66.string().default("Accept"),
8790
- decline: z66.string().default("Decline"),
8791
- label: z66.string().default("Cookie consent"),
8792
- message: z66.string().default("We'd like to use cookies to understand how these docs are used."),
8793
- policy: z66.string().default("Privacy policy"),
8794
- settings: z66.string().default("Cookie settings")
8829
+ consent: z67.object({
8830
+ accept: z67.string().default("Accept"),
8831
+ decline: z67.string().default("Decline"),
8832
+ label: z67.string().default("Cookie consent"),
8833
+ message: z67.string().default("We'd like to use cookies to understand how these docs are used."),
8834
+ policy: z67.string().default("Privacy policy"),
8835
+ settings: z67.string().default("Cookie settings")
8795
8836
  }).prefault({}),
8796
- content: z66.object({
8797
- code: z66.string().default("Code"),
8798
- copyColor: z66.string().default("Copy {name} color {value}"),
8799
- copyPrompt: z66.string().default("Copy prompt"),
8800
- default: z66.string().default("Default"),
8801
- diagramError: z66.string().default("Could not render this diagram."),
8802
- forks: z66.string().default("Forks"),
8803
- preview: z66.string().default("Preview"),
8804
- prop: z66.string().default("Prop"),
8805
- selectTab: z66.string().default("Select tab"),
8806
- selectView: z66.string().default("Select view"),
8807
- showLess: z66.string().default("Show less"),
8808
- showMore: z66.string().default("Show more"),
8809
- stars: z66.string().default("Stars"),
8810
- tab: z66.string().default("Tab {n}"),
8811
- type: z66.string().default("Type"),
8812
- update: z66.string().default("Update")
8837
+ content: z67.object({
8838
+ code: z67.string().default("Code"),
8839
+ copyColor: z67.string().default("Copy {name} color {value}"),
8840
+ copyPrompt: z67.string().default("Copy prompt"),
8841
+ default: z67.string().default("Default"),
8842
+ diagramError: z67.string().default("Could not render this diagram."),
8843
+ forks: z67.string().default("Forks"),
8844
+ preview: z67.string().default("Preview"),
8845
+ prop: z67.string().default("Prop"),
8846
+ selectTab: z67.string().default("Select tab"),
8847
+ selectView: z67.string().default("Select view"),
8848
+ showLess: z67.string().default("Show less"),
8849
+ showMore: z67.string().default("Show more"),
8850
+ stars: z67.string().default("Stars"),
8851
+ tab: z67.string().default("Tab {n}"),
8852
+ type: z67.string().default("Type"),
8853
+ update: z67.string().default("Update")
8813
8854
  }).prefault({}),
8814
- feedback: z66.object({
8815
- comment: z66.string().default("Tell us more (optional)"),
8816
- no: z66.string().default("No"),
8817
- question: z66.string().default("Was this page helpful?"),
8818
- send: z66.string().default("Send"),
8819
- thanks: z66.string().default("Thanks for your feedback!"),
8820
- yes: z66.string().default("Yes")
8855
+ feedback: z67.object({
8856
+ comment: z67.string().default("Tell us more (optional)"),
8857
+ no: z67.string().default("No"),
8858
+ question: z67.string().default("Was this page helpful?"),
8859
+ send: z67.string().default("Send"),
8860
+ thanks: z67.string().default("Thanks for your feedback!"),
8861
+ yes: z67.string().default("Yes")
8821
8862
  }).prefault({}),
8822
- languageSwitcher: z66.object({
8823
- label: z66.string().default("Language"),
8824
- untranslated: z66.string().default("Not translated")
8863
+ languageSwitcher: z67.object({
8864
+ label: z67.string().default("Language"),
8865
+ untranslated: z67.string().default("Not translated")
8825
8866
  }).prefault({}),
8826
- narration: z66.object({
8827
- cueDanger: z66.string().default("Danger."),
8828
- cueInfo: z66.string().default("Info."),
8829
- cueNote: z66.string().default("Note."),
8830
- cueSection: z66.string().default("Expandable section."),
8831
- cueStep: z66.string().default("Step {n}."),
8832
- cueSuccess: z66.string().default("Success."),
8833
- cueTab: z66.string().default("{title} tab."),
8834
- cueTip: z66.string().default("Tip."),
8835
- cueWarning: z66.string().default("Warning."),
8836
- error: z66.string().default("The narration couldn't load."),
8837
- follow: z66.string().default("Follow along"),
8838
- label: z66.string().default("Listen to this page"),
8839
- minutes: z66.string().default("{n} min"),
8840
- next: z66.string().default("Next sentence"),
8841
- pause: z66.string().default("Pause"),
8842
- play: z66.string().default("Play"),
8843
- previous: z66.string().default("Previous sentence"),
8844
- progress: z66.string().default("Narration progress"),
8845
- speed: z66.string().default("Playback speed"),
8846
- stop: z66.string().default("Stop listening")
8867
+ narration: z67.object({
8868
+ cueDanger: z67.string().default("Danger."),
8869
+ cueInfo: z67.string().default("Info."),
8870
+ cueNote: z67.string().default("Note."),
8871
+ cueSection: z67.string().default("Expandable section."),
8872
+ cueStep: z67.string().default("Step {n}."),
8873
+ cueSuccess: z67.string().default("Success."),
8874
+ cueTab: z67.string().default("{title} tab."),
8875
+ cueTip: z67.string().default("Tip."),
8876
+ cueWarning: z67.string().default("Warning."),
8877
+ error: z67.string().default("The narration couldn't load."),
8878
+ follow: z67.string().default("Follow along"),
8879
+ label: z67.string().default("Listen to this page"),
8880
+ minutes: z67.string().default("{n} min"),
8881
+ next: z67.string().default("Next sentence"),
8882
+ pause: z67.string().default("Pause"),
8883
+ play: z67.string().default("Play"),
8884
+ previous: z67.string().default("Previous sentence"),
8885
+ progress: z67.string().default("Narration progress"),
8886
+ speed: z67.string().default("Playback speed"),
8887
+ stop: z67.string().default("Stop listening")
8847
8888
  }).prefault({}),
8848
- nav: z66.object({
8849
- back: z66.string().default("Back"),
8850
- breadcrumb: z66.string().default("Breadcrumb"),
8851
- closeNavigation: z66.string().default("Close navigation"),
8852
- deprecated: z66.string().default("deprecated"),
8853
- featured: z66.string().default("Featured"),
8854
- githubRepository: z66.string().default("GitHub repository"),
8855
- navigation: z66.string().default("Navigation"),
8856
- opensInNewTab: z66.string().default("Opens in a new tab"),
8857
- primary: z66.string().default("Primary"),
8858
- sections: z66.string().default("Sections"),
8859
- toggleNavigation: z66.string().default("Toggle navigation"),
8860
- toggleTheme: z66.string().default("Toggle theme")
8889
+ nav: z67.object({
8890
+ back: z67.string().default("Back"),
8891
+ breadcrumb: z67.string().default("Breadcrumb"),
8892
+ closeNavigation: z67.string().default("Close navigation"),
8893
+ deprecated: z67.string().default("deprecated"),
8894
+ featured: z67.string().default("Featured"),
8895
+ githubRepository: z67.string().default("GitHub repository"),
8896
+ navigation: z67.string().default("Navigation"),
8897
+ opensInNewTab: z67.string().default("Opens in a new tab"),
8898
+ primary: z67.string().default("Primary"),
8899
+ sections: z67.string().default("Sections"),
8900
+ toggleNavigation: z67.string().default("Toggle navigation"),
8901
+ toggleTheme: z67.string().default("Toggle theme")
8861
8902
  }).prefault({}),
8862
- notFound: z66.object({
8863
- api: z66.string().default("JSON API description (openapi.json)"),
8864
- description: z66.string().default("We couldn't find the page you're looking for."),
8865
- home: z66.string().default("Back to home"),
8866
- llms: z66.string().default("Docs index for AI agents (llms.txt)"),
8867
- sitemap: z66.string().default("Sitemap"),
8868
- suggestions: z66.string().default("Where to look next"),
8869
- title: z66.string().default("Page not found")
8903
+ notFound: z67.object({
8904
+ api: z67.string().default("JSON API description (openapi.json)"),
8905
+ description: z67.string().default("We couldn't find the page you're looking for."),
8906
+ home: z67.string().default("Back to home"),
8907
+ llms: z67.string().default("Docs index for AI agents (llms.txt)"),
8908
+ sitemap: z67.string().default("Sitemap"),
8909
+ suggestions: z67.string().default("Where to look next"),
8910
+ title: z67.string().default("Page not found")
8870
8911
  }).prefault({}),
8871
- page: z66.object({
8872
- lastUpdated: z66.string().default("Last updated on"),
8873
- next: z66.string().default("Next"),
8874
- pagination: z66.string().default("Pagination"),
8875
- previous: z66.string().default("Previous"),
8876
- related: z66.string().default("Related pages"),
8877
- skipToContent: z66.string().default("Skip to content")
8912
+ page: z67.object({
8913
+ lastUpdated: z67.string().default("Last updated on"),
8914
+ next: z67.string().default("Next"),
8915
+ pagination: z67.string().default("Pagination"),
8916
+ previous: z67.string().default("Previous"),
8917
+ related: z67.string().default("Related pages"),
8918
+ skipToContent: z67.string().default("Skip to content")
8878
8919
  }).prefault({}),
8879
- search: z66.object({
8880
- all: z66.string().default("All"),
8881
- allLanguages: z66.string().default("All languages"),
8882
- allVersions: z66.string().default("All versions"),
8883
- assistant: z66.string().default("Assistant"),
8884
- assistantHint: z66.string().default("Get an instant answer from AI"),
8885
- button: z66.string().default("Search"),
8886
- devOnly: z66.string().default("Search is available in the production build."),
8887
- docs: z66.string().default("Docs"),
8888
- error: z66.string().default("Something went wrong. Please try again."),
8889
- label: z66.string().default("Search docs"),
8890
- latest: z66.string().default("latest"),
8891
- navigate: z66.string().default("navigate"),
8892
- noResults: z66.string().default("No results found."),
8893
- open: z66.string().default("open"),
8894
- placeholder: z66.string().default("Search documentation…"),
8895
- popular: z66.string().default("Popular"),
8896
- preview: z66.string().default("preview"),
8897
- results: z66.string().default("Results")
8920
+ search: z67.object({
8921
+ all: z67.string().default("All"),
8922
+ allLanguages: z67.string().default("All languages"),
8923
+ allVersions: z67.string().default("All versions"),
8924
+ assistant: z67.string().default("Assistant"),
8925
+ assistantHint: z67.string().default("Get an instant answer from AI"),
8926
+ button: z67.string().default("Search"),
8927
+ devOnly: z67.string().default("Search is available in the production build."),
8928
+ docs: z67.string().default("Docs"),
8929
+ error: z67.string().default("Something went wrong. Please try again."),
8930
+ label: z67.string().default("Search docs"),
8931
+ latest: z67.string().default("latest"),
8932
+ navigate: z67.string().default("navigate"),
8933
+ noResults: z67.string().default("No results found."),
8934
+ open: z67.string().default("open"),
8935
+ placeholder: z67.string().default("Search documentation…"),
8936
+ popular: z67.string().default("Popular"),
8937
+ preview: z67.string().default("preview"),
8938
+ results: z67.string().default("Results")
8898
8939
  }).prefault({}),
8899
- toc: z66.object({
8900
- title: z66.string().default("On this page")
8940
+ toc: z67.object({
8941
+ title: z67.string().default("On this page")
8901
8942
  }).prefault({}),
8902
- versions: z66.object({
8903
- latest: z66.string().default("Go to latest"),
8904
- notice: z66.string().default("You're viewing documentation for {version}. It may be out of date."),
8905
- switcher: z66.string().default("Version")
8943
+ versions: z67.object({
8944
+ latest: z67.string().default("Go to latest"),
8945
+ notice: z67.string().default("You're viewing documentation for {version}. It may be out of date."),
8946
+ switcher: z67.string().default("Version")
8906
8947
  }).prefault({})
8907
8948
  });
8908
8949
  var uiStringsSchema = uiStringsObject.prefault({});
8909
8950
  var EN_UI = uiStringsObject.parse({});
8910
- var uiStringsOverrideSchema = z66.record(z66.string(), z66.record(z66.string(), z66.string()));
8951
+ var uiStringsOverrideSchema = z67.record(z67.string(), z67.record(z67.string(), z67.string()));
8911
8952
  var RENAMED_UI_KEYS = new Map([
8912
8953
  ["ask", "assistant"],
8913
8954
  ["search.askAi", "search.assistant"],
8914
8955
  ["search.askAiHint", "search.assistantHint"]
8915
8956
  ]);
8916
- var uiLocaleOverridesSchema = z66.record(z66.string(), uiStringsOverrideSchema).superRefine((value, ctx) => {
8957
+ var uiLocaleOverridesSchema = z67.record(z67.string(), uiStringsOverrideSchema).superRefine((value, ctx) => {
8917
8958
  for (const [locale, override] of Object.entries(value)) {
8918
8959
  const keys = Object.entries(override).flatMap(([group, strings]) => [
8919
8960
  group,
@@ -8923,7 +8964,7 @@ var uiLocaleOverridesSchema = z66.record(z66.string(), uiStringsOverrideSchema).
8923
8964
  const renamed = RENAMED_UI_KEYS.get(key);
8924
8965
  if (renamed) {
8925
8966
  ctx.addIssue({
8926
- code: z66.ZodIssueCode.custom,
8967
+ code: z67.ZodIssueCode.custom,
8927
8968
  message: `i18n.ui.${locale}.${key} was renamed to i18n.ui.${locale}.${renamed}.`,
8928
8969
  path: [locale, ...key.split(".")]
8929
8970
  });
@@ -9272,11 +9313,11 @@ var undefinedVariables = (text, variables) => {
9272
9313
  };
9273
9314
 
9274
9315
  // src/core/schema.ts
9275
- var httpUrlSchema = z67.url({ protocol: /^https?$/u });
9316
+ var httpUrlSchema = z68.url({ protocol: /^https?$/u });
9276
9317
  var isString2 = (value) => typeof value === "string";
9277
9318
  var isBoolean2 = (value) => typeof value === "boolean";
9278
9319
  var isObjectLike2 = (value) => typeof value === "object" && value !== null;
9279
- var iconName = z67.string().min(1);
9320
+ var iconName = z68.string().min(1);
9280
9321
  var removedKeysHint = (hints) => ({
9281
9322
  error: (issue) => {
9282
9323
  if (issue.code !== "unrecognized_keys") {
@@ -9293,78 +9334,78 @@ var removedKeysHint = (hints) => ({
9293
9334
  return messages.join(" ");
9294
9335
  }
9295
9336
  });
9296
- var hydrationMode = z67.enum(["load", "idle", "visible", "media", "only"]);
9297
- var dateSchema = z67.union([z67.string(), z67.date()]).transform((value) => value instanceof Date ? value.toISOString() : value);
9298
- var sidebarDisplaySchema = z67.enum(["flat", "group", "page"]);
9299
- var directoryModeSchema = z67.enum(["accordion", "card", "none"]);
9300
- var sidebarMetaSchema = z67.strictObject({
9301
- badge: z67.string().optional(),
9337
+ var hydrationMode = z68.enum(["load", "idle", "visible", "media", "only"]);
9338
+ var dateSchema = z68.union([z68.string(), z68.date()]).transform((value) => value instanceof Date ? value.toISOString() : value);
9339
+ var sidebarDisplaySchema = z68.enum(["flat", "group", "page"]);
9340
+ var directoryModeSchema = z68.enum(["accordion", "card", "none"]);
9341
+ var sidebarMetaSchema = z68.strictObject({
9342
+ badge: z68.string().optional(),
9302
9343
  display: sidebarDisplaySchema.optional(),
9303
- hidden: z67.boolean().default(false),
9344
+ hidden: z68.boolean().default(false),
9304
9345
  icon: iconName.optional(),
9305
- label: z67.string().optional(),
9306
- order: z67.number().optional()
9346
+ label: z68.string().optional(),
9347
+ order: z68.number().optional()
9307
9348
  });
9308
- var xHandleSchema = z67.string().transform(normalizeXHandle).optional();
9309
- var seoMetaSchema = z67.strictObject({
9310
- canonical: z67.url().optional(),
9311
- description: z67.string().optional(),
9312
- image: z67.string().optional(),
9313
- noindex: z67.boolean().default(false),
9314
- title: z67.string().optional(),
9315
- x: z67.strictObject({ creator: xHandleSchema }).optional()
9349
+ var xHandleSchema = z68.string().transform(normalizeXHandle).optional();
9350
+ var seoMetaSchema = z68.strictObject({
9351
+ canonical: z68.url().optional(),
9352
+ description: z68.string().optional(),
9353
+ image: z68.string().optional(),
9354
+ noindex: z68.boolean().default(false),
9355
+ title: z68.string().optional(),
9356
+ x: z68.strictObject({ creator: xHandleSchema }).optional()
9316
9357
  });
9317
- var searchMetaSchema = z67.strictObject({
9318
- boost: z67.number().positive().optional(),
9319
- exclude: z67.boolean().default(false),
9320
- keywords: z67.array(z67.string()).optional(),
9321
- tags: z67.array(z67.string()).optional()
9358
+ var searchMetaSchema = z68.strictObject({
9359
+ boost: z68.number().positive().optional(),
9360
+ exclude: z68.boolean().default(false),
9361
+ keywords: z68.array(z68.string()).optional(),
9362
+ tags: z68.array(z68.string()).optional()
9322
9363
  });
9323
- var aiMetaSchema = z67.strictObject({
9324
- exclude: z67.boolean().default(false)
9364
+ var aiMetaSchema = z68.strictObject({
9365
+ exclude: z68.boolean().default(false)
9325
9366
  });
9326
- var changelogMetaSchema = z67.strictObject({
9327
- category: z67.string().optional(),
9367
+ var changelogMetaSchema = z68.strictObject({
9368
+ category: z68.string().optional(),
9328
9369
  date: dateSchema.optional(),
9329
- version: z67.string().optional()
9370
+ version: z68.string().optional()
9330
9371
  });
9331
- var authorSchema = z67.union([
9332
- z67.string(),
9333
- z67.object({
9334
- avatar: z67.string().optional(),
9335
- image: z67.string().optional(),
9336
- name: z67.string(),
9337
- url: z67.string().optional()
9338
- }).catchall(z67.unknown())
9372
+ var authorSchema = z68.union([
9373
+ z68.string(),
9374
+ z68.object({
9375
+ avatar: z68.string().optional(),
9376
+ image: z68.string().optional(),
9377
+ name: z68.string(),
9378
+ url: z68.string().optional()
9379
+ }).catchall(z68.unknown())
9339
9380
  ]);
9340
- var relatedLinkSchema = z67.string().refine((link) => link.startsWith("/") || isExternalUrl(link), {
9381
+ var relatedLinkSchema = z68.string().refine((link) => link.startsWith("/") || isExternalUrl(link), {
9341
9382
  message: 'A related link is a root-relative path ("/guides/setup") or an absolute URL.'
9342
9383
  });
9343
- var pageMetaBaseSchema = z67.strictObject({
9384
+ var pageMetaBaseSchema = z68.strictObject({
9344
9385
  ai: aiMetaSchema.prefault({}),
9345
- api: z67.string().refine((value) => API_ENDPOINT.test(value.trim()), {
9386
+ api: z68.string().refine((value) => API_ENDPOINT.test(value.trim()), {
9346
9387
  message: 'api takes an HTTP method and a path or URL, like "POST /v1/users" or "GET https://api.acme.com/v1/users/{id}".'
9347
9388
  }).optional(),
9348
- authMethod: z67.enum(AUTH_METHODS).optional(),
9349
- authors: z67.union([authorSchema, z67.array(authorSchema)]).optional(),
9389
+ authMethod: z68.enum(AUTH_METHODS).optional(),
9390
+ authors: z68.union([authorSchema, z68.array(authorSchema)]).optional(),
9350
9391
  changelog: changelogMetaSchema.optional(),
9351
9392
  date: dateSchema.optional(),
9352
- deprecated: z67.boolean().default(false),
9353
- description: z67.string().optional(),
9354
- draft: z67.boolean().default(false),
9355
- hidden: z67.boolean().default(false),
9393
+ deprecated: z68.boolean().default(false),
9394
+ description: z68.string().optional(),
9395
+ draft: z68.boolean().default(false),
9396
+ hidden: z68.boolean().default(false),
9356
9397
  icon: iconName.optional(),
9357
9398
  lastModified: dateSchema.optional(),
9358
- mode: z67.enum(PAGE_MODES).optional(),
9359
- narration: z67.boolean().default(true),
9360
- noindex: z67.boolean().default(false),
9361
- pagination: z67.boolean().default(true),
9362
- playground: z67.enum(PLAYGROUND_MODES).optional(),
9363
- related: z67.union([
9364
- z67.literal(false),
9365
- z67.array(z67.union([
9399
+ mode: z68.enum(PAGE_MODES).optional(),
9400
+ narration: z68.boolean().default(true),
9401
+ noindex: z68.boolean().default(false),
9402
+ pagination: z68.boolean().default(true),
9403
+ playground: z68.enum(PLAYGROUND_MODES).optional(),
9404
+ related: z68.union([
9405
+ z68.literal(false),
9406
+ z68.array(z68.union([
9366
9407
  relatedLinkSchema,
9367
- z67.record(z67.string().min(1), relatedLinkSchema).refine((entry) => Object.keys(entry).length === 1, {
9408
+ z68.record(z68.string().min(1), relatedLinkSchema).refine((entry) => Object.keys(entry).length === 1, {
9368
9409
  message: 'A titled related entry has one title and one link: { "Title": "/path" }.'
9369
9410
  })
9370
9411
  ])).max(MAX_RELATED)
@@ -9372,96 +9413,96 @@ var pageMetaBaseSchema = z67.strictObject({
9372
9413
  search: searchMetaSchema.prefault({}),
9373
9414
  seo: seoMetaSchema.prefault({}),
9374
9415
  sidebar: sidebarMetaSchema.prefault({}),
9375
- slug: z67.string().optional(),
9376
- title: z67.string().optional(),
9377
- type: z67.string().optional()
9416
+ slug: z68.string().optional(),
9417
+ title: z68.string().optional(),
9418
+ type: z68.string().optional()
9378
9419
  });
9379
9420
  var pageMetaSchema = pageMetaBaseSchema;
9380
9421
  var EMPTY_PAGE_META = pageMetaBaseSchema.parse({});
9381
9422
  var pageCollectionSchema = pageMetaBaseSchema.loose().catch(() => EMPTY_PAGE_META);
9382
9423
  var BUILT_IN_PAGE_META_KEYS = new Set(pageMetaBaseSchema.keyof().options);
9383
- var customKeySchemaRecord = (where) => z67.record(z67.string(), z67.custom(isStandardSchema, {
9424
+ var customKeySchemaRecord = (where) => z68.record(z68.string(), z68.custom(isStandardSchema, {
9384
9425
  message: "Expected a Standard Schema (e.g. a Zod schema — any Zod version works)."
9385
9426
  })).default({}).superRefine((value, ctx) => {
9386
9427
  for (const key of Object.keys(value)) {
9387
9428
  if (BUILT_IN_PAGE_META_KEYS.has(key)) {
9388
9429
  ctx.addIssue({
9389
- code: z67.ZodIssueCode.custom,
9430
+ code: z68.ZodIssueCode.custom,
9390
9431
  message: `"${key}" is a built-in frontmatter field and cannot be redeclared via ${where}.`,
9391
9432
  path: [key]
9392
9433
  });
9393
9434
  }
9394
9435
  }
9395
9436
  });
9396
- var folderMetaSchema = z67.strictObject({
9397
- collapsed: z67.boolean().optional(),
9437
+ var folderMetaSchema = z68.strictObject({
9438
+ collapsed: z68.boolean().optional(),
9398
9439
  directory: directoryModeSchema.optional(),
9399
9440
  display: sidebarDisplaySchema.optional(),
9400
9441
  icon: iconName.optional(),
9401
- order: z67.number().optional(),
9402
- pages: z67.array(z67.string()).optional(),
9403
- title: z67.string().optional()
9442
+ order: z68.number().optional(),
9443
+ pages: z68.array(z68.string()).optional(),
9444
+ title: z68.string().optional()
9404
9445
  });
9405
- var logoImageSchema = z67.union([
9406
- z67.string(),
9407
- z67.strictObject({
9408
- alt: z67.string().optional(),
9409
- dark: z67.string().optional(),
9410
- light: z67.string().optional()
9446
+ var logoImageSchema = z68.union([
9447
+ z68.string(),
9448
+ z68.strictObject({
9449
+ alt: z68.string().optional(),
9450
+ dark: z68.string().optional(),
9451
+ light: z68.string().optional()
9411
9452
  })
9412
9453
  ]);
9413
- var logoConfigSchema = z67.union([
9414
- z67.string(),
9415
- z67.strictObject({
9416
- href: z67.string().optional(),
9454
+ var logoConfigSchema = z68.union([
9455
+ z68.string(),
9456
+ z68.strictObject({
9457
+ href: z68.string().optional(),
9417
9458
  image: logoImageSchema.optional(),
9418
- text: z67.string().optional()
9459
+ text: z68.string().optional()
9419
9460
  })
9420
9461
  ]);
9421
- var localizableLabelSchema = z67.union([
9422
- z67.string(),
9423
- z67.record(z67.string(), z67.string()).refine((value) => Object.keys(value).length > 0, {
9462
+ var localizableLabelSchema = z68.union([
9463
+ z68.string(),
9464
+ z68.record(z68.string(), z68.string()).refine((value) => Object.keys(value).length > 0, {
9424
9465
  message: "Provide at least one locale's label."
9425
9466
  })
9426
9467
  ]);
9427
- var bannerConfigSchema = z67.union([
9428
- z67.string(),
9429
- z67.strictObject({
9468
+ var bannerConfigSchema = z68.union([
9469
+ z68.string(),
9470
+ z68.strictObject({
9430
9471
  content: localizableLabelSchema,
9431
- dismissible: z67.boolean().default(false),
9432
- id: z67.string().optional(),
9433
- link: z67.strictObject({ href: z67.string(), text: localizableLabelSchema }).optional()
9472
+ dismissible: z68.boolean().default(false),
9473
+ id: z68.string().optional(),
9474
+ link: z68.strictObject({ href: z68.string(), text: localizableLabelSchema }).optional()
9434
9475
  })
9435
9476
  ]);
9436
- var apiConfigSchema = z67.strictObject({
9437
- auth: z67.strictObject({
9438
- method: z67.enum(AUTH_METHODS),
9439
- name: z67.string().optional()
9477
+ var apiConfigSchema = z68.strictObject({
9478
+ auth: z68.strictObject({
9479
+ method: z68.enum(AUTH_METHODS),
9480
+ name: z68.string().optional()
9440
9481
  }).optional(),
9441
9482
  playground: playgroundSchema,
9442
- server: z67.string().optional()
9483
+ server: z68.string().optional()
9443
9484
  });
9444
- var footerConfigSchema = z67.strictObject({
9445
- links: z67.array(z67.strictObject({ href: z67.string(), label: localizableLabelSchema })).default([]),
9446
- socials: z67.partialRecord(z67.enum(FOOTER_SOCIALS), z67.string()).default({})
9485
+ var footerConfigSchema = z68.strictObject({
9486
+ links: z68.array(z68.strictObject({ href: z68.string(), label: localizableLabelSchema })).default([]),
9487
+ socials: z68.partialRecord(z68.enum(FOOTER_SOCIALS), z68.string()).default({})
9447
9488
  });
9448
- var changelogConfigSchema = z67.strictObject({
9489
+ var changelogConfigSchema = z68.strictObject({
9449
9490
  description: localizableLabelSchema.optional(),
9450
9491
  title: localizableLabelSchema.optional()
9451
9492
  });
9452
- var contentTypeConfigSchema = z67.strictObject({
9453
- facets: z67.array(z67.string()).default([]),
9493
+ var contentTypeConfigSchema = z68.strictObject({
9494
+ facets: z68.array(z68.string()).default([]),
9454
9495
  frontmatter: customKeySchemaRecord("content.types")
9455
9496
  });
9456
9497
  var FILESYSTEM_SHORTHAND_KEYS = ["exclude", "include", "root"];
9457
- var contentConfigSchema = z67.strictObject({
9458
- defaultType: z67.string().default("doc"),
9459
- exclude: z67.array(z67.string()).optional(),
9460
- include: z67.array(z67.string()).optional(),
9461
- pages: z67.string().default("pages"),
9462
- root: z67.string().optional(),
9498
+ var contentConfigSchema = z68.strictObject({
9499
+ defaultType: z68.string().default("doc"),
9500
+ exclude: z68.array(z68.string()).optional(),
9501
+ include: z68.array(z68.string()).optional(),
9502
+ pages: z68.string().default("pages"),
9503
+ root: z68.string().optional(),
9463
9504
  sources: contentSourcesSchema.optional(),
9464
- types: z67.record(z67.string(), contentTypeConfigSchema).default({})
9505
+ types: z68.record(z68.string(), contentTypeConfigSchema).default({})
9465
9506
  }).superRefine((value, ctx) => {
9466
9507
  if (!value.sources) {
9467
9508
  return;
@@ -9469,7 +9510,7 @@ var contentConfigSchema = z67.strictObject({
9469
9510
  for (const key of FILESYSTEM_SHORTHAND_KEYS) {
9470
9511
  if (value[key] !== undefined) {
9471
9512
  ctx.addIssue({
9472
- code: z67.ZodIssueCode.custom,
9513
+ code: z68.ZodIssueCode.custom,
9473
9514
  message: `content.${key} is shorthand for a single filesystem() source and can't be combined with content.sources — move it into a filesystem({ ${key} }) entry in content.sources.`,
9474
9515
  path: [key]
9475
9516
  });
@@ -9481,119 +9522,119 @@ var contentConfigSchema = z67.strictObject({
9481
9522
  resolvedSourceAdapterSchema.parse(filesystem({ exclude, include, root }))
9482
9523
  ]
9483
9524
  }));
9484
- var navTabSchema = z67.strictObject({
9485
- href: z67.string().min(1).optional(),
9525
+ var navTabSchema = z68.strictObject({
9526
+ href: z68.string().min(1).optional(),
9486
9527
  icon: iconName.optional(),
9487
- items: z67.array(z67.strictObject({
9488
- description: z67.string().optional(),
9528
+ items: z68.array(z68.strictObject({
9529
+ description: z68.string().optional(),
9489
9530
  icon: iconName.optional(),
9490
9531
  label: localizableLabelSchema,
9491
- path: z67.string(),
9492
- tag: z67.string().optional()
9532
+ path: z68.string(),
9533
+ tag: z68.string().optional()
9493
9534
  })).optional(),
9494
9535
  label: localizableLabelSchema,
9495
- path: z67.string().transform(normalizeRoute)
9536
+ path: z68.string().transform(normalizeRoute)
9496
9537
  });
9497
- var navSelectorItemSchema = z67.strictObject({
9498
- description: z67.string().optional(),
9538
+ var navSelectorItemSchema = z68.strictObject({
9539
+ description: z68.string().optional(),
9499
9540
  icon: iconName.optional(),
9500
- label: z67.string(),
9501
- path: z67.string(),
9502
- tag: z67.string().optional()
9541
+ label: z68.string(),
9542
+ path: z68.string(),
9543
+ tag: z68.string().optional()
9503
9544
  });
9504
- var navSelectorSchema = z67.strictObject({
9505
- items: z67.array(navSelectorItemSchema).default([]),
9506
- kind: z67.enum(["dropdown", "language", "product", "version"]),
9507
- label: z67.string()
9545
+ var navSelectorSchema = z68.strictObject({
9546
+ items: z68.array(navSelectorItemSchema).default([]),
9547
+ kind: z68.enum(["dropdown", "language", "product", "version"]),
9548
+ label: z68.string()
9508
9549
  });
9509
- var sidebarItemSchema = z67.lazy(() => z67.union([
9510
- z67.string(),
9511
- z67.strictObject({
9512
- badge: z67.string().optional(),
9513
- collapsed: z67.boolean().optional(),
9550
+ var sidebarItemSchema = z68.lazy(() => z68.union([
9551
+ z68.string(),
9552
+ z68.strictObject({
9553
+ badge: z68.string().optional(),
9554
+ collapsed: z68.boolean().optional(),
9514
9555
  directory: directoryModeSchema.optional(),
9515
9556
  display: sidebarDisplaySchema.optional(),
9516
- href: z67.string().optional(),
9557
+ href: z68.string().optional(),
9517
9558
  icon: iconName.optional(),
9518
- items: z67.array(sidebarItemSchema).optional(),
9519
- label: z67.string(),
9520
- root: z67.string().optional()
9559
+ items: z68.array(sidebarItemSchema).optional(),
9560
+ label: z68.string(),
9561
+ root: z68.string().optional()
9521
9562
  })
9522
9563
  ]));
9523
- var fontFallbackSchema = z67.enum(["sans", "serif", "mono"]);
9524
- var remoteFontSchema = z67.strictObject({
9564
+ var fontFallbackSchema = z68.enum(["sans", "serif", "mono"]);
9565
+ var remoteFontSchema = z68.strictObject({
9525
9566
  fallback: fontFallbackSchema.optional(),
9526
- name: z67.string().min(1),
9527
- provider: z67.enum(["google", "fontsource", "bunny", "fontshare"]).default("google"),
9528
- subsets: z67.array(z67.string().min(1)).nonempty().optional(),
9529
- weights: z67.array(z67.union([z67.number().int().positive(), z67.string().regex(/^\d+\.\.\d+$/u)])).nonempty().optional()
9567
+ name: z68.string().min(1),
9568
+ provider: z68.enum(["google", "fontsource", "bunny", "fontshare"]).default("google"),
9569
+ subsets: z68.array(z68.string().min(1)).nonempty().optional(),
9570
+ weights: z68.array(z68.union([z68.number().int().positive(), z68.string().regex(/^\d+\.\.\d+$/u)])).nonempty().optional()
9530
9571
  });
9531
- var localFontVariantSchema = z67.strictObject({
9532
- src: z67.string().min(1),
9533
- style: z67.enum(["normal", "italic", "oblique"]).optional(),
9534
- weight: z67.union([
9535
- z67.number().int().positive(),
9536
- z67.string().regex(/^\d+(?:\.\.\d+)?$/u)
9572
+ var localFontVariantSchema = z68.strictObject({
9573
+ src: z68.string().min(1),
9574
+ style: z68.enum(["normal", "italic", "oblique"]).optional(),
9575
+ weight: z68.union([
9576
+ z68.number().int().positive(),
9577
+ z68.string().regex(/^\d+(?:\.\.\d+)?$/u)
9537
9578
  ]).optional()
9538
9579
  });
9539
- var localFontSchema = z67.strictObject({
9580
+ var localFontSchema = z68.strictObject({
9540
9581
  fallback: fontFallbackSchema.optional(),
9541
- name: z67.string().min(1),
9542
- variants: z67.array(localFontVariantSchema).nonempty()
9582
+ name: z68.string().min(1),
9583
+ variants: z68.array(localFontVariantSchema).nonempty()
9543
9584
  });
9544
- var fontValueSchema = z67.union([z67.string(), remoteFontSchema, localFontSchema]).superRefine((value, ctx) => {
9585
+ var fontValueSchema = z68.union([z68.string(), remoteFontSchema, localFontSchema]).superRefine((value, ctx) => {
9545
9586
  if (isString2(value) && !isFontSlug(value)) {
9546
9587
  ctx.addIssue({
9547
- code: z67.ZodIssueCode.custom,
9588
+ code: z68.ZodIssueCode.custom,
9548
9589
  message: `Unknown font "${value}". Supported fonts: ${FONT_SLUGS.join(", ")}. For any other family, use the object form: { name: "..." } (remote provider) or { name: "...", variants: [...] } (local files).`
9549
9590
  });
9550
9591
  }
9551
9592
  });
9552
- var perModeValueSchema = z67.union([
9553
- z67.string(),
9554
- z67.strictObject({
9555
- dark: z67.string().optional(),
9556
- light: z67.string().optional()
9593
+ var perModeValueSchema = z68.union([
9594
+ z68.string(),
9595
+ z68.strictObject({
9596
+ dark: z68.string().optional(),
9597
+ light: z68.string().optional()
9557
9598
  })
9558
9599
  ]).optional().transform((value) => isString2(value) ? { dark: value, light: value } : value);
9559
9600
  var themeConfigFields = {
9560
- accent: z67.union([
9561
- z67.string(),
9562
- z67.strictObject({ dark: z67.string(), light: z67.string() })
9601
+ accent: z68.union([
9602
+ z68.string(),
9603
+ z68.strictObject({ dark: z68.string(), light: z68.string() })
9563
9604
  ]).default("blue").transform((value) => isString2(value) ? { dark: value, light: value } : value),
9564
- action: z67.string().optional(),
9605
+ action: z68.string().optional(),
9565
9606
  background: perModeValueSchema,
9566
9607
  backgroundImage: perModeValueSchema,
9567
- fonts: z67.strictObject({
9608
+ fonts: z68.strictObject({
9568
9609
  body: fontValueSchema.default("inter"),
9569
9610
  display: fontValueSchema.default("inter"),
9570
9611
  mono: fontValueSchema.default("ibm-plex-mono")
9571
9612
  }).prefault({}),
9572
- mode: z67.enum(["system", "light", "dark"]).default("system"),
9573
- radius: z67.enum(["none", "sm", "md", "lg"]).default("md")
9613
+ mode: z68.enum(["system", "light", "dark"]).default("system"),
9614
+ radius: z68.enum(["none", "sm", "md", "lg"]).default("md")
9574
9615
  };
9575
- var themeConfigSchema = z67.strictObject(themeConfigFields, removedKeysHint({
9616
+ var themeConfigSchema = z68.strictObject(themeConfigFields, removedKeysHint({
9576
9617
  layout: "theme.layout was removed: the sidebar layout is the only one, so delete the field."
9577
9618
  }));
9578
- var searchPopularLinkSchema = z67.strictObject({
9579
- href: z67.string(),
9619
+ var searchPopularLinkSchema = z68.strictObject({
9620
+ href: z68.string(),
9580
9621
  icon: iconName.optional(),
9581
- label: z67.string()
9622
+ label: z68.string()
9582
9623
  });
9583
- var searchProviderSchema = z67.custom((value) => value === false || isObjectLike2(value), {
9624
+ var searchProviderSchema = z68.custom((value) => value === false || isObjectLike2(value), {
9584
9625
  message: 'search.provider takes an adapter from "blume/search" — algolia({…}), pagefind(), … — not a provider name. The 1.x provider string was removed, and "none" is now `search: false`.'
9585
9626
  }).transform((value) => value === false ? NONE_SEARCH_ADAPTER : value).pipe(resolvedSearchAdapterSchema);
9586
- var searchIndexingSchema = z67.strictObject({
9587
- includeCodeBlocks: z67.boolean().default(false),
9588
- includeHiddenPages: z67.boolean().default(false)
9627
+ var searchIndexingSchema = z68.strictObject({
9628
+ includeCodeBlocks: z68.boolean().default(false),
9629
+ includeHiddenPages: z68.boolean().default(false)
9589
9630
  }).prefault({});
9590
- var searchAnalyticsSchema = z67.strictObject({
9591
- queries: z67.boolean().default(true)
9631
+ var searchAnalyticsSchema = z68.strictObject({
9632
+ queries: z68.boolean().default(true)
9592
9633
  }).prefault({});
9593
- var searchOptionsSchema = z67.strictObject({
9634
+ var searchOptionsSchema = z68.strictObject({
9594
9635
  analytics: searchAnalyticsSchema,
9595
9636
  indexing: searchIndexingSchema,
9596
- popular: z67.array(searchPopularLinkSchema).default([]),
9637
+ popular: z68.array(searchPopularLinkSchema).default([]),
9597
9638
  provider: searchProviderSchema.default(() => orama())
9598
9639
  }, removedKeysHint({
9599
9640
  algolia: 'search.algolia moved into its adapter: `search: algolia({ appId, indexName, apiKey })` from "blume/search", where the 1.x `searchApiKey` is now `apiKey`.',
@@ -9601,32 +9642,32 @@ var searchOptionsSchema = z67.strictObject({
9601
9642
  oramaCloud: 'search.oramaCloud moved into its adapter: `search: oramaCloud({ endpoint, apiKey, indexId })` from "blume/search".',
9602
9643
  typesense: 'search.typesense moved into its adapter: `search: typesense({ host, collection, apiKey })` from "blume/search", where the 1.x `searchApiKey` is now `apiKey`.'
9603
9644
  }));
9604
- var searchConfigSchema = z67.custom((value) => value === false || isObjectLike2(value), {
9645
+ var searchConfigSchema = z68.custom((value) => value === false || isObjectLike2(value), {
9605
9646
  message: 'search must be an adapter from "blume/search" (orama(), algolia({…}), …), false, or { provider, popular, indexing }. The 1.x provider string was removed.'
9606
9647
  }).transform((value) => value === false || ("kind" in value) ? { provider: value } : value).pipe(searchOptionsSchema);
9607
9648
  var PRIVATE_JWK_PARAMS = ["d", "p", "q", "dp", "dq", "qi", "oth", "k"];
9608
- var publicJwkSchema = z67.record(z67.string(), z67.unknown()).superRefine((jwk, ctx) => {
9649
+ var publicJwkSchema = z68.record(z68.string(), z68.unknown()).superRefine((jwk, ctx) => {
9609
9650
  if (!isString2(jwk.kty) || jwk.kty.length === 0) {
9610
9651
  ctx.addIssue({
9611
- code: z67.ZodIssueCode.custom,
9652
+ code: z68.ZodIssueCode.custom,
9612
9653
  message: 'A JWK must declare its key type ("kty").'
9613
9654
  });
9614
9655
  }
9615
9656
  const leaked = PRIVATE_JWK_PARAMS.filter((param) => (param in jwk));
9616
9657
  if (leaked.length > 0) {
9617
9658
  ctx.addIssue({
9618
- code: z67.ZodIssueCode.custom,
9659
+ code: z68.ZodIssueCode.custom,
9619
9660
  message: `The JWK contains private key material ("${leaked.join('", "')}") — the signatures directory is public, so list only public keys and keep the private key where the signing agent runs.`
9620
9661
  });
9621
9662
  }
9622
9663
  });
9623
- var mcpConfigSchema = z67.strictObject({
9624
- enabled: z67.boolean().default(false),
9625
- instructions: z67.string().optional(),
9626
- name: z67.string().optional(),
9627
- route: z67.string().default("/mcp").transform(normalizeRoute)
9664
+ var mcpConfigSchema = z68.strictObject({
9665
+ enabled: z68.boolean().default(false),
9666
+ instructions: z68.string().optional(),
9667
+ name: z68.string().optional(),
9668
+ route: z68.string().default("/mcp").transform(normalizeRoute)
9628
9669
  });
9629
- var assistantEndpointSchema = z67.string().trim().min(1).refine((value) => {
9670
+ var assistantEndpointSchema = z68.string().trim().min(1).refine((value) => {
9630
9671
  if (value.startsWith("/") && !value.startsWith("//")) {
9631
9672
  return true;
9632
9673
  }
@@ -9639,14 +9680,14 @@ var assistantEndpointSchema = z67.string().trim().min(1).refine((value) => {
9639
9680
  }, {
9640
9681
  message: "ai.assistant.endpoint must be an HTTP(S) URL or a root-relative path."
9641
9682
  });
9642
- var llmsTxtObjectSchema = z67.strictObject({
9643
- details: z67.string().trim().min(1).optional(),
9644
- enabled: z67.boolean().default(true),
9645
- openapi: z67.boolean().default(true)
9683
+ var llmsTxtObjectSchema = z68.strictObject({
9684
+ details: z68.string().trim().min(1).optional(),
9685
+ enabled: z68.boolean().default(true),
9686
+ openapi: z68.boolean().default(true)
9646
9687
  });
9647
- var aiCatalogObjectSchema = z67.strictObject({
9648
- enabled: z67.boolean().default(true),
9649
- queries: z67.record(z67.string().min(1), z67.array(z67.string().trim().min(1)).min(1)).default({})
9688
+ var aiCatalogObjectSchema = z68.strictObject({
9689
+ enabled: z68.boolean().default(true),
9690
+ queries: z68.record(z68.string().min(1), z68.array(z68.string().trim().min(1)).min(1)).default({})
9650
9691
  });
9651
9692
  var MOVED_TO_AGENTS = [
9652
9693
  "api",
@@ -9663,41 +9704,41 @@ var movedToAgentsHints = (from) => Object.fromEntries(MOVED_TO_AGENTS.map((key)
9663
9704
  `${from}.${key} moved to agents.${key}.`
9664
9705
  ]));
9665
9706
  var aiConfigFields = {
9666
- assistant: z67.strictObject({
9707
+ assistant: z68.strictObject({
9667
9708
  captcha: captchaAdapterSchema.optional(),
9668
- cors: z67.array(z67.union([
9669
- z67.literal("*"),
9670
- z67.url({ protocol: /^https?$/u }).transform((value) => new URL(value).origin)
9709
+ cors: z68.array(z68.union([
9710
+ z68.literal("*"),
9711
+ z68.url({ protocol: /^https?$/u }).transform((value) => new URL(value).origin)
9671
9712
  ])).optional(),
9672
- enabled: z67.boolean().default(false),
9713
+ enabled: z68.boolean().default(false),
9673
9714
  endpoint: assistantEndpointSchema.optional(),
9674
- instructions: z67.string().trim().min(1).optional(),
9715
+ instructions: z68.string().trim().min(1).optional(),
9675
9716
  provider: assistantAdapterSchema.prefault(DEFAULT_ASSISTANT_PROVIDER),
9676
- retrieval: z67.strictObject({
9677
- contextBudget: z67.number().int().positive().optional(),
9678
- excerptChars: z67.number().int().positive().optional(),
9679
- maxResults: z67.number().int().positive().optional()
9717
+ retrieval: z68.strictObject({
9718
+ contextBudget: z68.number().int().positive().optional(),
9719
+ excerptChars: z68.number().int().positive().optional(),
9720
+ maxResults: z68.number().int().positive().optional()
9680
9721
  }).optional(),
9681
- suggestions: z67.array(z67.strictObject({
9722
+ suggestions: z68.array(z68.strictObject({
9682
9723
  icon: iconName.optional(),
9683
- label: z67.string().min(1)
9724
+ label: z68.string().min(1)
9684
9725
  })).default([]),
9685
- support: z67.string().refine((link) => link.startsWith("mailto:") || link.startsWith("/") || isExternalUrl(link), {
9726
+ support: z68.string().refine((link) => link.startsWith("mailto:") || link.startsWith("/") || isExternalUrl(link), {
9686
9727
  message: 'ai.assistant.support is a mailto: address, a URL, or a root-relative path, like "mailto:help@example.com".'
9687
9728
  }).optional(),
9688
- tools: z67.boolean().optional()
9729
+ tools: z68.boolean().optional()
9689
9730
  }, assistantMovedFieldsHint).superRefine((value, ctx) => {
9690
9731
  if (value.cors && value.endpoint) {
9691
9732
  ctx.addIssue({
9692
- code: z67.ZodIssueCode.custom,
9733
+ code: z68.ZodIssueCode.custom,
9693
9734
  message: "ai.assistant.cors only applies to the generated route; with ai.assistant.endpoint, CORS is that backend's job.",
9694
9735
  path: ["cors"]
9695
9736
  });
9696
9737
  }
9697
9738
  }).optional(),
9698
- openInChat: z67.union([
9699
- z67.boolean(),
9700
- z67.array(z67.enum(openInChatProviders)).refine((value) => new Set(value).size === value.length, {
9739
+ openInChat: z68.union([
9740
+ z68.boolean(),
9741
+ z68.array(z68.enum(openInChatProviders)).refine((value) => new Set(value).size === value.length, {
9701
9742
  message: "ai.openInChat must not repeat a provider."
9702
9743
  })
9703
9744
  ]).default(true).transform((value) => {
@@ -9707,109 +9748,109 @@ var aiConfigFields = {
9707
9748
  return value;
9708
9749
  })
9709
9750
  };
9710
- var aiConfigSchema = z67.strictObject(aiConfigFields, removedKeysHint({
9751
+ var aiConfigSchema = z68.strictObject(aiConfigFields, removedKeysHint({
9711
9752
  ...movedToAgentsHints("ai"),
9712
9753
  ask: "ai.ask was renamed to ai.assistant."
9713
9754
  }));
9714
- var featuredLinkSchema = z67.strictObject({
9715
- href: z67.string(),
9755
+ var featuredLinkSchema = z68.strictObject({
9756
+ href: z68.string(),
9716
9757
  icon: iconName.optional(),
9717
9758
  label: localizableLabelSchema
9718
9759
  });
9719
- var headerActionSchema = z67.strictObject({
9720
- href: z67.string(),
9760
+ var headerActionSchema = z68.strictObject({
9761
+ href: z68.string(),
9721
9762
  label: localizableLabelSchema
9722
9763
  });
9723
- var navigationConfigSchema = z67.strictObject({
9724
- actions: z67.array(headerActionSchema).default([]),
9764
+ var navigationConfigSchema = z68.strictObject({
9765
+ actions: z68.array(headerActionSchema).default([]),
9725
9766
  cta: headerActionSchema.optional(),
9726
- featured: z67.array(featuredLinkSchema).default([]),
9727
- repo: z67.union([z67.boolean(), httpUrlSchema]).default(true),
9728
- selectors: z67.array(navSelectorSchema).default([]),
9729
- sidebar: z67.union([
9730
- z67.array(sidebarItemSchema),
9731
- z67.strictObject({
9767
+ featured: z68.array(featuredLinkSchema).default([]),
9768
+ repo: z68.union([z68.boolean(), httpUrlSchema]).default(true),
9769
+ selectors: z68.array(navSelectorSchema).default([]),
9770
+ sidebar: z68.union([
9771
+ z68.array(sidebarItemSchema),
9772
+ z68.strictObject({
9732
9773
  display: sidebarDisplaySchema.default("flat"),
9733
- items: z67.array(sidebarItemSchema).optional()
9774
+ items: z68.array(sidebarItemSchema).optional()
9734
9775
  })
9735
9776
  ]).prefault({}).transform((value) => Array.isArray(value) ? { display: "flat", items: value } : value),
9736
- tabs: z67.array(navTabSchema).default([])
9777
+ tabs: z68.array(navTabSchema).default([])
9737
9778
  });
9738
- var exportConfigSchema = z67.union([
9739
- z67.boolean(),
9740
- z67.strictObject({
9741
- epub: z67.boolean().default(false),
9742
- pdf: z67.boolean().default(false)
9779
+ var exportConfigSchema = z68.union([
9780
+ z68.boolean(),
9781
+ z68.strictObject({
9782
+ epub: z68.boolean().default(false),
9783
+ pdf: z68.boolean().default(false)
9743
9784
  })
9744
9785
  ]).transform((value) => isBoolean2(value) ? { epub: value, pdf: value } : value);
9745
- var feedbackConfigSchema = z67.union([
9746
- z67.boolean(),
9747
- z67.strictObject({
9748
- comments: z67.boolean().default(false),
9749
- enabled: z67.boolean().default(true)
9786
+ var feedbackConfigSchema = z68.union([
9787
+ z68.boolean(),
9788
+ z68.strictObject({
9789
+ comments: z68.boolean().default(false),
9790
+ enabled: z68.boolean().default(true)
9750
9791
  })
9751
9792
  ]).transform((value) => isBoolean2(value) ? { comments: false, enabled: value } : { comments: value.enabled && value.comments, enabled: value.enabled });
9752
- var narrationConfigSchema = z67.union([
9753
- z67.boolean(),
9754
- z67.strictObject({
9755
- enabled: z67.boolean().default(true),
9793
+ var narrationConfigSchema = z68.union([
9794
+ z68.boolean(),
9795
+ z68.strictObject({
9796
+ enabled: z68.boolean().default(true),
9756
9797
  provider: narrationProviderSchema.optional()
9757
9798
  })
9758
9799
  ]).transform((value) => isBoolean2(value) ? { enabled: value, provider: null } : { enabled: value.enabled, provider: value.provider ?? null });
9759
- var localeSchema = z67.strictObject({
9760
- code: z67.string().min(1),
9761
- dir: z67.enum(["ltr", "rtl"]).default("ltr"),
9762
- label: z67.string(),
9763
- style: z67.string().optional()
9800
+ var localeSchema = z68.strictObject({
9801
+ code: z68.string().min(1),
9802
+ dir: z68.enum(["ltr", "rtl"]).default("ltr"),
9803
+ label: z68.string(),
9804
+ style: z68.string().optional()
9764
9805
  });
9765
- var i18nConfigSchema = z67.strictObject({
9766
- defaultLocale: z67.string().default("en"),
9767
- fallbackLocale: z67.string().nullable().optional(),
9768
- hideDefaultLocalePrefix: z67.boolean().default(true),
9769
- locales: z67.array(localeSchema).min(1),
9770
- parser: z67.enum(["dir", "dot"]).default("dir"),
9771
- routeByBrowserLanguage: z67.boolean().default(false),
9806
+ var i18nConfigSchema = z68.strictObject({
9807
+ defaultLocale: z68.string().default("en"),
9808
+ fallbackLocale: z68.string().nullable().optional(),
9809
+ hideDefaultLocalePrefix: z68.boolean().default(true),
9810
+ locales: z68.array(localeSchema).min(1),
9811
+ parser: z68.enum(["dir", "dot"]).default("dir"),
9812
+ routeByBrowserLanguage: z68.boolean().default(false),
9772
9813
  ui: uiLocaleOverridesSchema.optional()
9773
9814
  }).superRefine((value, ctx) => {
9774
9815
  const codes = new Set(value.locales.map((locale) => locale.code));
9775
9816
  if (!codes.has(value.defaultLocale)) {
9776
9817
  ctx.addIssue({
9777
- code: z67.ZodIssueCode.custom,
9818
+ code: z68.ZodIssueCode.custom,
9778
9819
  message: `i18n.defaultLocale "${value.defaultLocale}" must match one of i18n.locales.`,
9779
9820
  path: ["defaultLocale"]
9780
9821
  });
9781
9822
  }
9782
9823
  if (value.fallbackLocale !== null && value.fallbackLocale !== undefined && !codes.has(value.fallbackLocale)) {
9783
9824
  ctx.addIssue({
9784
- code: z67.ZodIssueCode.custom,
9825
+ code: z68.ZodIssueCode.custom,
9785
9826
  message: `i18n.fallbackLocale "${value.fallbackLocale}" must match one of i18n.locales.`,
9786
9827
  path: ["fallbackLocale"]
9787
9828
  });
9788
9829
  }
9789
9830
  });
9790
9831
  var VERSION_ID = /^[A-Za-z][\w.-]*$/u;
9791
- var archivedVersionSchema = z67.strictObject({
9792
- banner: z67.union([z67.boolean(), z67.string()]).default(true),
9793
- canonical: z67.enum(["latest", "self"]).default("latest"),
9794
- id: z67.string().regex(VERSION_ID, 'Version ids must start with a letter (e.g. "v1.0") and contain only letters, digits, dots, hyphens, and underscores.'),
9795
- label: z67.string().optional(),
9796
- noindex: z67.boolean().default(false)
9832
+ var archivedVersionSchema = z68.strictObject({
9833
+ banner: z68.union([z68.boolean(), z68.string()]).default(true),
9834
+ canonical: z68.enum(["latest", "self"]).default("latest"),
9835
+ id: z68.string().regex(VERSION_ID, 'Version ids must start with a letter (e.g. "v1.0") and contain only letters, digits, dots, hyphens, and underscores.'),
9836
+ label: z68.string().optional(),
9837
+ noindex: z68.boolean().default(false)
9797
9838
  });
9798
- var versionsConfigSchema = z67.strictObject({
9799
- archived: z67.array(archivedVersionSchema).default([]),
9800
- current: z67.strictObject({
9801
- badge: z67.string().optional(),
9802
- label: z67.string()
9839
+ var versionsConfigSchema = z68.strictObject({
9840
+ archived: z68.array(archivedVersionSchema).default([]),
9841
+ current: z68.strictObject({
9842
+ badge: z68.string().optional(),
9843
+ label: z68.string()
9803
9844
  }),
9804
- switcher: z67.strictObject({
9805
- redirect: z67.enum(["same-page", "root"]).default("same-page")
9845
+ switcher: z68.strictObject({
9846
+ redirect: z68.enum(["same-page", "root"]).default("same-page")
9806
9847
  }).prefault({})
9807
9848
  }).superRefine((value, ctx) => {
9808
9849
  const seen = new Set;
9809
9850
  for (const [position, version] of value.archived.entries()) {
9810
9851
  if (seen.has(version.id)) {
9811
9852
  ctx.addIssue({
9812
- code: z67.ZodIssueCode.custom,
9853
+ code: z68.ZodIssueCode.custom,
9813
9854
  message: `versions.archived declares "${version.id}" more than once.`,
9814
9855
  path: ["archived", position, "id"]
9815
9856
  });
@@ -9828,85 +9869,85 @@ var REDIRECT_START = {
9828
9869
  message: "redirects take root-relative paths or full URLs: `to` must start with `/` (`/new-page`, not `new-page`) or be an absolute URL (`https://…`)."
9829
9870
  }
9830
9871
  };
9831
- var redirectPath = (end) => z67.string().refine(REDIRECT_START[end].allows, {
9872
+ var redirectPath = (end) => z68.string().refine(REDIRECT_START[end].allows, {
9832
9873
  message: REDIRECT_START[end].message
9833
9874
  });
9834
- var redirectSchema = z67.strictObject({
9875
+ var redirectSchema = z68.strictObject({
9835
9876
  from: redirectPath("from"),
9836
- status: z67.union([z67.literal(301), z67.literal(302), z67.literal(307), z67.literal(308)]).default(301),
9877
+ status: z68.union([z68.literal(301), z68.literal(302), z68.literal(307), z68.literal(308)]).default(301),
9837
9878
  to: redirectPath("to")
9838
9879
  }).superRefine((redirect, ctx) => {
9839
9880
  const error = redirectPatternError(redirect.from, redirect.to);
9840
9881
  if (error) {
9841
9882
  ctx.addIssue({
9842
- code: z67.ZodIssueCode.custom,
9883
+ code: z68.ZodIssueCode.custom,
9843
9884
  message: error.message,
9844
9885
  path: [error.end]
9845
9886
  });
9846
9887
  }
9847
9888
  });
9848
- var imageRemotePatternSchema = z67.strictObject({
9849
- hostname: z67.string().optional(),
9850
- pathname: z67.string().optional(),
9851
- port: z67.string().optional(),
9852
- protocol: z67.string().optional()
9889
+ var imageRemotePatternSchema = z68.strictObject({
9890
+ hostname: z68.string().optional(),
9891
+ pathname: z68.string().optional(),
9892
+ port: z68.string().optional(),
9893
+ protocol: z68.string().optional()
9853
9894
  });
9854
- var imageConfigSchema = z67.strictObject({
9855
- domains: z67.array(z67.string()).default([]),
9856
- remotePatterns: z67.array(imageRemotePatternSchema).default([])
9895
+ var imageConfigSchema = z68.strictObject({
9896
+ domains: z68.array(z68.string()).default([]),
9897
+ remotePatterns: z68.array(imageRemotePatternSchema).default([])
9857
9898
  });
9858
- var xConfigSchema = z67.strictObject({
9899
+ var xConfigSchema = z68.strictObject({
9859
9900
  creator: xHandleSchema,
9860
9901
  handle: xHandleSchema
9861
9902
  });
9862
- var ogColorSchema = z67.string();
9863
- var ogPaletteSchema = z67.strictObject({
9903
+ var ogColorSchema = z68.string();
9904
+ var ogPaletteSchema = z68.strictObject({
9864
9905
  accent: ogColorSchema.optional(),
9865
9906
  background: ogColorSchema.optional(),
9866
9907
  border: ogColorSchema.optional(),
9867
9908
  foreground: ogColorSchema.optional(),
9868
9909
  muted: ogColorSchema.optional()
9869
9910
  });
9870
- var ogFontWeightSchema = z67.union([
9871
- z67.number().int().positive(),
9872
- z67.array(z67.number().int().positive()),
9873
- z67.string().regex(/^\d+\.\.\d+$/u)
9911
+ var ogFontWeightSchema = z68.union([
9912
+ z68.number().int().positive(),
9913
+ z68.array(z68.number().int().positive()),
9914
+ z68.string().regex(/^\d+\.\.\d+$/u)
9874
9915
  ]);
9875
- var ogFontStyleSchema = z67.enum(["normal", "italic"]);
9876
- var ogFontSchema = z67.union([
9877
- z67.string(),
9878
- z67.strictObject({
9879
- name: z67.string(),
9880
- style: z67.union([ogFontStyleSchema, z67.array(ogFontStyleSchema)]).optional(),
9916
+ var ogFontStyleSchema = z68.enum(["normal", "italic"]);
9917
+ var ogFontSchema = z68.union([
9918
+ z68.string(),
9919
+ z68.strictObject({
9920
+ name: z68.string(),
9921
+ style: z68.union([ogFontStyleSchema, z68.array(ogFontStyleSchema)]).optional(),
9881
9922
  weight: ogFontWeightSchema.optional()
9882
9923
  }),
9883
- z67.strictObject({
9884
- name: z67.string(),
9885
- src: z67.string().min(1),
9924
+ z68.strictObject({
9925
+ name: z68.string(),
9926
+ src: z68.string().min(1),
9886
9927
  style: ogFontStyleSchema.optional(),
9887
- weight: z67.number().int().positive().optional()
9928
+ weight: z68.number().int().positive().optional()
9888
9929
  })
9889
9930
  ]);
9890
- var ogConfigSchema = z67.strictObject({
9891
- description: z67.union([z67.string(), z67.literal(false)]).optional(),
9892
- enabled: z67.boolean().optional(),
9893
- fonts: z67.array(ogFontSchema).optional(),
9894
- logo: z67.union([z67.string(), z67.literal(false)]).optional(),
9931
+ var ogConfigSchema = z68.strictObject({
9932
+ description: z68.union([z68.string(), z68.literal(false)]).optional(),
9933
+ enabled: z68.boolean().optional(),
9934
+ fonts: z68.array(ogFontSchema).optional(),
9935
+ logo: z68.union([z68.string(), z68.literal(false)]).optional(),
9895
9936
  palette: ogPaletteSchema.optional(),
9896
- site: z67.union([z67.string(), z67.literal(false)]).optional(),
9897
- titles: z67.record(z67.string(), z67.string()).optional()
9937
+ site: z68.union([z68.string(), z68.literal(false)]).optional(),
9938
+ titles: z68.record(z68.string(), z68.string()).optional()
9898
9939
  });
9899
- var rssConfigSchema = z67.strictObject({
9900
- enabled: z67.boolean().default(true),
9901
- limit: z67.number().int().positive().default(50),
9902
- types: z67.array(z67.string()).default(["blog", "changelog"])
9940
+ var rssConfigSchema = z68.strictObject({
9941
+ enabled: z68.boolean().default(true),
9942
+ limit: z68.number().int().positive().default(50),
9943
+ types: z68.array(z68.string()).default(["blog", "changelog"])
9903
9944
  });
9904
- var contentSignalsObjectSchema = z67.strictObject({
9905
- aiInput: z67.boolean().default(true),
9906
- aiTrain: z67.boolean().default(true),
9907
- search: z67.boolean().default(true)
9945
+ var contentSignalsObjectSchema = z68.strictObject({
9946
+ aiInput: z68.boolean().default(true),
9947
+ aiTrain: z68.boolean().default(true),
9948
+ search: z68.boolean().default(true)
9908
9949
  });
9909
- var contentSignalsSchema = z67.union([z67.boolean(), contentSignalsObjectSchema]).transform((value) => {
9950
+ var contentSignalsSchema = z68.union([z68.boolean(), contentSignalsObjectSchema]).transform((value) => {
9910
9951
  if (value === true) {
9911
9952
  return contentSignalsObjectSchema.parse({});
9912
9953
  }
@@ -9915,35 +9956,35 @@ var contentSignalsSchema = z67.union([z67.boolean(), contentSignalsObjectSchema]
9915
9956
  }
9916
9957
  return value;
9917
9958
  });
9918
- var postalAddressSchema = z67.strictObject({
9919
- addressCountry: z67.string().optional(),
9920
- addressLocality: z67.string().optional(),
9921
- addressRegion: z67.string().optional(),
9922
- postalCode: z67.string().optional(),
9923
- streetAddress: z67.string().optional()
9959
+ var postalAddressSchema = z68.strictObject({
9960
+ addressCountry: z68.string().optional(),
9961
+ addressLocality: z68.string().optional(),
9962
+ addressRegion: z68.string().optional(),
9963
+ postalCode: z68.string().optional(),
9964
+ streetAddress: z68.string().optional()
9924
9965
  });
9925
- var organizationConfigSchema = z67.strictObject({
9966
+ var organizationConfigSchema = z68.strictObject({
9926
9967
  address: postalAddressSchema.optional(),
9927
- contactType: z67.string().default("customer support"),
9928
- email: z67.email().optional(),
9929
- logo: z67.string().optional(),
9930
- name: z67.string().optional(),
9931
- sameAs: z67.array(z67.url()).default([]),
9932
- telephone: z67.string().optional(),
9933
- url: z67.url().optional()
9968
+ contactType: z68.string().default("customer support"),
9969
+ email: z68.email().optional(),
9970
+ logo: z68.string().optional(),
9971
+ name: z68.string().optional(),
9972
+ sameAs: z68.array(z68.url()).default([]),
9973
+ telephone: z68.string().optional(),
9974
+ url: z68.url().optional()
9934
9975
  });
9935
- var softwareConfigSchema = z67.strictObject({
9936
- applicationCategory: z67.string().default("DeveloperApplication"),
9937
- description: z67.string().optional(),
9938
- license: z67.string().optional(),
9939
- name: z67.string().optional(),
9940
- operatingSystem: z67.string().optional(),
9941
- price: z67.union([z67.number().nonnegative(), z67.string()]).optional(),
9942
- priceCurrency: z67.string().default("USD"),
9943
- sameAs: z67.array(z67.url()).default([])
9976
+ var softwareConfigSchema = z68.strictObject({
9977
+ applicationCategory: z68.string().default("DeveloperApplication"),
9978
+ description: z68.string().optional(),
9979
+ license: z68.string().optional(),
9980
+ name: z68.string().optional(),
9981
+ operatingSystem: z68.string().optional(),
9982
+ price: z68.union([z68.number().nonnegative(), z68.string()]).optional(),
9983
+ priceCurrency: z68.string().default("USD"),
9984
+ sameAs: z68.array(z68.url()).default([])
9944
9985
  });
9945
9986
  var seoConfigFields = {
9946
- metatags: z67.record(z67.string().min(1), z67.string()).optional().superRefine((tags, ctx) => {
9987
+ metatags: z68.record(z68.string().min(1), z68.string()).optional().superRefine((tags, ctx) => {
9947
9988
  for (const name of Object.keys(tags ?? {})) {
9948
9989
  const owner = ownedMetatag(name);
9949
9990
  if (owner) {
@@ -9957,54 +9998,54 @@ var seoConfigFields = {
9957
9998
  }),
9958
9999
  og: ogConfigSchema.default({}),
9959
10000
  organization: organizationConfigSchema.optional(),
9960
- robots: z67.boolean().default(true),
10001
+ robots: z68.boolean().default(true),
9961
10002
  rss: rssConfigSchema.prefault({}),
9962
- sitemap: z67.boolean().default(true),
9963
- software: z67.union([z67.boolean(), softwareConfigSchema]).optional().transform((value) => {
10003
+ sitemap: z68.boolean().default(true),
10004
+ software: z68.union([z68.boolean(), softwareConfigSchema]).optional().transform((value) => {
9964
10005
  if (value === true) {
9965
10006
  return softwareConfigSchema.parse({});
9966
10007
  }
9967
10008
  return value === false ? undefined : value;
9968
10009
  }),
9969
- structuredData: z67.boolean().default(true),
10010
+ structuredData: z68.boolean().default(true),
9970
10011
  x: xConfigSchema.default({})
9971
10012
  };
9972
- var seoConfigSchema = z67.strictObject(seoConfigFields, removedKeysHint({
10013
+ var seoConfigSchema = z68.strictObject(seoConfigFields, removedKeysHint({
9973
10014
  agentReadability: "seo.agentReadability moved to agents.agentReadability.",
9974
10015
  contentSignals: "seo.contentSignals moved to agents.contentSignals."
9975
10016
  }));
9976
- var agentsConfigSchema = z67.strictObject({
9977
- agentReadability: z67.boolean().default(true),
9978
- api: z67.boolean().default(true),
9979
- catalog: z67.union([z67.boolean(), aiCatalogObjectSchema]).default(true).transform((value) => isBoolean2(value) ? { enabled: value, queries: {} } : value),
10017
+ var agentsConfigSchema = z68.strictObject({
10018
+ agentReadability: z68.boolean().default(true),
10019
+ api: z68.boolean().default(true),
10020
+ catalog: z68.union([z68.boolean(), aiCatalogObjectSchema]).default(true).transform((value) => isBoolean2(value) ? { enabled: value, queries: {} } : value),
9980
10021
  contentSignals: contentSignalsSchema.prefault(true),
9981
- llmsTxt: z67.union([z67.boolean(), llmsTxtObjectSchema]).default(true).transform((value) => isBoolean2(value) ? { enabled: value, openapi: true } : value),
9982
- markdownComponents: z67.record(z67.string(), z67.custom((value) => typeof value === "function", {
10022
+ llmsTxt: z68.union([z68.boolean(), llmsTxtObjectSchema]).default(true).transform((value) => isBoolean2(value) ? { enabled: value, openapi: true } : value),
10023
+ markdownComponents: z68.record(z68.string(), z68.custom((value) => typeof value === "function", {
9983
10024
  message: "Expected a serializer function."
9984
10025
  })).default({}),
9985
10026
  mcp: mcpConfigSchema.prefault({}),
9986
- skillMd: z67.boolean().default(true),
9987
- skills: z67.string().min(1).optional(),
9988
- webBotAuth: z67.strictObject({
9989
- keys: z67.array(publicJwkSchema).default([])
10027
+ skillMd: z68.boolean().default(true),
10028
+ skills: z68.string().min(1).optional(),
10029
+ webBotAuth: z68.strictObject({
10030
+ keys: z68.array(publicJwkSchema).default([])
9990
10031
  }).prefault({}),
9991
- webmcp: z67.boolean().default(true)
10032
+ webmcp: z68.boolean().default(true)
9992
10033
  });
9993
10034
  var githubOriginSchema = httpUrlSchema.transform((value) => new URL(value).origin);
9994
10035
  var githubApiSchema = httpUrlSchema.transform((value) => {
9995
10036
  const { origin, pathname } = new URL(value);
9996
10037
  return trimEnd(`${origin}${pathname}`, "/");
9997
10038
  });
9998
- var githubConfigSchema = z67.strictObject({
10039
+ var githubConfigSchema = z68.strictObject({
9999
10040
  api: githubApiSchema.optional(),
10000
- branch: z67.string().default("main"),
10001
- dir: z67.string().optional(),
10041
+ branch: z68.string().default("main"),
10042
+ dir: z68.string().optional(),
10002
10043
  host: githubOriginSchema.default(PUBLIC_HOST_URL),
10003
- owner: z67.string(),
10004
- repo: z67.string()
10044
+ owner: z68.string(),
10045
+ repo: z68.string()
10005
10046
  });
10006
10047
  var isThemeObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
10007
- var codeThemeSchema = z67.custom((value) => {
10048
+ var codeThemeSchema = z68.custom((value) => {
10008
10049
  if (isString2(value)) {
10009
10050
  return true;
10010
10051
  }
@@ -10017,18 +10058,18 @@ var codeThemeSchema = z67.custom((value) => {
10017
10058
  const hasContent = value.settings !== undefined || value.tokenColors !== undefined || value.colors !== undefined;
10018
10059
  return settingsValid && tokenColorsValid && colorsValid && hasContent;
10019
10060
  }, "Expected a Shiki theme name or custom theme object");
10020
- var codeBlockThemeSchema = z67.strictObject({
10061
+ var codeBlockThemeSchema = z68.strictObject({
10021
10062
  dark: codeThemeSchema.default("github-dark"),
10022
10063
  light: codeThemeSchema.default("github-light")
10023
10064
  });
10024
- var examplesConfigSchema = z67.union([
10025
- z67.string(),
10026
- z67.strictObject({
10027
- css: z67.string().optional(),
10028
- source: z67.string().default("examples")
10065
+ var examplesConfigSchema = z68.union([
10066
+ z68.string(),
10067
+ z68.strictObject({
10068
+ css: z68.string().optional(),
10069
+ source: z68.string().default("examples")
10029
10070
  })
10030
10071
  ]).transform((value) => isString2(value) ? { source: value } : value);
10031
- var lastModifiedConfigSchema = z67.union([z67.literal(false), z67.enum(["git", "frontmatter"])], {
10072
+ var lastModifiedConfigSchema = z68.union([z68.literal(false), z68.enum(["git", "frontmatter"])], {
10032
10073
  error: (issue) => issue.code === "invalid_union" ? 'lastModified takes false, "git", or "frontmatter": `true` became "git" and `{ type: "…" }` became the bare string.' : undefined
10033
10074
  });
10034
10075
  var DATE_FORM_FIELDS = [
@@ -10047,46 +10088,46 @@ var isKnownTimeZone = (timeZone) => {
10047
10088
  return false;
10048
10089
  }
10049
10090
  };
10050
- var dateFormatConfigSchema = z67.strictObject({
10051
- calendar: z67.string().optional(),
10052
- dateStyle: z67.enum(["full", "long", "medium", "short"]).optional(),
10053
- day: z67.enum(["numeric", "2-digit"]).optional(),
10054
- era: z67.enum(["long", "short", "narrow"]).optional(),
10055
- month: z67.enum(["numeric", "2-digit", "long", "short", "narrow"]).optional(),
10056
- numberingSystem: z67.string().optional(),
10057
- timeZone: z67.string().refine(isKnownTimeZone, {
10091
+ var dateFormatConfigSchema = z68.strictObject({
10092
+ calendar: z68.string().optional(),
10093
+ dateStyle: z68.enum(["full", "long", "medium", "short"]).optional(),
10094
+ day: z68.enum(["numeric", "2-digit"]).optional(),
10095
+ era: z68.enum(["long", "short", "narrow"]).optional(),
10096
+ month: z68.enum(["numeric", "2-digit", "long", "short", "narrow"]).optional(),
10097
+ numberingSystem: z68.string().optional(),
10098
+ timeZone: z68.string().refine(isKnownTimeZone, {
10058
10099
  message: 'Unknown time zone; use an IANA name like "Asia/Tokyo" or "UTC".'
10059
10100
  }).optional(),
10060
- weekday: z67.enum(["long", "short", "narrow"]).optional(),
10061
- year: z67.enum(["numeric", "2-digit"]).optional()
10101
+ weekday: z68.enum(["long", "short", "narrow"]).optional(),
10102
+ year: z68.enum(["numeric", "2-digit"]).optional()
10062
10103
  }).refine((value) => value.dateStyle === undefined || value.weekday === undefined && value.era === undefined && value.year === undefined && value.month === undefined && value.day === undefined, {
10063
10104
  message: "dateFormat.dateStyle can't be combined with weekday/era/year/month/day; use one or the other."
10064
10105
  }).transform((value) => DATE_FORM_FIELDS.some((field) => value[field] !== undefined) ? value : { ...value, dateStyle: "long" });
10065
- var codeConfigSchema = z67.strictObject({
10066
- icons: z67.boolean().default(true),
10106
+ var codeConfigSchema = z68.strictObject({
10107
+ icons: z68.boolean().default(true),
10067
10108
  theme: codeBlockThemeSchema.prefault({}),
10068
- wrap: z67.boolean().default(false)
10109
+ wrap: z68.boolean().default(false)
10069
10110
  });
10070
10111
  var markdownConfigFields = {
10071
10112
  code: codeConfigSchema.prefault({}),
10072
- externalLinks: z67.boolean().default(false),
10073
- headingAnchors: z67.boolean().default(true),
10074
- imageZoom: z67.boolean().default(true)
10113
+ externalLinks: z68.boolean().default(false),
10114
+ headingAnchors: z68.boolean().default(true),
10115
+ imageZoom: z68.boolean().default(true)
10075
10116
  };
10076
- var markdownConfigSchema = z67.strictObject(markdownConfigFields, removedKeysHint({
10117
+ var markdownConfigSchema = z68.strictObject(markdownConfigFields, removedKeysHint({
10077
10118
  codeBlocks: "markdown.codeBlocks was merged into markdown.code: move theme: { light, dark } under markdown.code."
10078
10119
  }));
10079
- var reactConfigSchema = z67.strictObject({
10080
- compiler: z67.boolean().default(true)
10120
+ var reactConfigSchema = z68.strictObject({
10121
+ compiler: z68.boolean().default(true)
10081
10122
  });
10082
- var frontmatterConfigSchema = z67.strictObject({
10123
+ var frontmatterConfigSchema = z68.strictObject({
10083
10124
  extend: customKeySchemaRecord("frontmatter.extend")
10084
10125
  });
10085
- var tocConfigSchema = z67.union([
10086
- z67.boolean(),
10087
- z67.strictObject({
10088
- maxHeadingLevel: z67.number().int().min(1).max(6).optional(),
10089
- minHeadingLevel: z67.number().int().min(1).max(6).optional()
10126
+ var tocConfigSchema = z68.union([
10127
+ z68.boolean(),
10128
+ z68.strictObject({
10129
+ maxHeadingLevel: z68.number().int().min(1).max(6).optional(),
10130
+ minHeadingLevel: z68.number().int().min(1).max(6).optional()
10090
10131
  })
10091
10132
  ]).default(true).transform((value) => {
10092
10133
  if (isBoolean2(value)) {
@@ -10100,13 +10141,13 @@ var tocConfigSchema = z67.union([
10100
10141
  }).refine((value) => value.minLevel <= value.maxLevel, {
10101
10142
  message: "toc.minHeadingLevel must be less than or equal to toc.maxHeadingLevel."
10102
10143
  });
10103
- var blumeConfigSchema = z67.strictObject({
10144
+ var blumeConfigSchema = z68.strictObject({
10104
10145
  agents: agentsConfigSchema.prefault({}),
10105
10146
  ai: aiConfigSchema.prefault({}),
10106
10147
  analytics: analyticsConfigSchema,
10107
10148
  api: apiConfigSchema.prefault({}),
10108
10149
  banner: bannerConfigSchema.optional(),
10109
- basePath: z67.string().refine((value) => !URL_ORIGIN.test(value) && !/[#?]/u.test(value), {
10150
+ basePath: z68.string().refine((value) => !URL_ORIGIN.test(value) && !/[#?]/u.test(value), {
10110
10151
  message: `basePath takes a path like "/docs", not a URL: no scheme, host, query, or fragment. The site's origin goes in deployment.site.`
10111
10152
  }).optional().transform((value) => normalizeBasePath(value)),
10112
10153
  changelog: changelogConfigSchema.optional(),
@@ -10114,7 +10155,7 @@ var blumeConfigSchema = z67.strictObject({
10114
10155
  content: contentConfigSchema.prefault({}),
10115
10156
  dateFormat: dateFormatConfigSchema.default({ dateStyle: "long" }),
10116
10157
  deployment: resolvedDeploymentSchema.prefault({}),
10117
- description: z67.string().optional(),
10158
+ description: z68.string().optional(),
10118
10159
  examples: examplesConfigSchema.prefault("examples"),
10119
10160
  export: exportConfigSchema.prefault(false),
10120
10161
  feedback: feedbackConfigSchema.prefault(true),
@@ -10123,24 +10164,25 @@ var blumeConfigSchema = z67.strictObject({
10123
10164
  github: githubConfigSchema.optional(),
10124
10165
  i18n: i18nConfigSchema.optional(),
10125
10166
  image: imageConfigSchema.prefault({}),
10126
- integrations: z67.array(z67.custom()).default([]),
10167
+ integrations: z68.array(z68.custom()).default([]),
10127
10168
  lastModified: lastModifiedConfigSchema.default(false),
10128
10169
  logo: logoConfigSchema.optional(),
10129
10170
  markdown: markdownConfigSchema.prefault({}),
10130
10171
  narration: narrationConfigSchema.prefault(false),
10131
10172
  navigation: navigationConfigSchema.prefault({}),
10173
+ poweredBy: z68.boolean().default(true),
10132
10174
  rateLimit: rateLimitConfigSchema,
10133
10175
  react: reactConfigSchema.prefault({}),
10134
- redirects: z67.array(redirectSchema).default([]),
10176
+ redirects: z68.array(redirectSchema).default([]),
10135
10177
  reference: referenceConfigSchema,
10136
10178
  search: searchConfigSchema.prefault({}),
10137
10179
  seo: seoConfigSchema.prefault({}),
10138
10180
  theme: themeConfigSchema.prefault({}),
10139
- title: z67.string().default("Documentation"),
10181
+ title: z68.string().default("Documentation"),
10140
10182
  toc: tocConfigSchema,
10141
- variables: z67.record(z67.string().regex(VARIABLE_NAME, {
10183
+ variables: z68.record(z68.string().regex(VARIABLE_NAME, {
10142
10184
  message: "Variable names take letters, digits, `_`, and `-`, like `version` or `api-url`."
10143
- }), z67.string().refine((value) => !/[\r\n]/u.test(value), {
10185
+ }), z68.string().refine((value) => !/[\r\n]/u.test(value), {
10144
10186
  message: "A variable's value must fit on one line."
10145
10187
  })).default({}),
10146
10188
  versions: versionsConfigSchema.optional()
@@ -10152,7 +10194,7 @@ var blumeConfigSchema = z67.strictObject({
10152
10194
  for (const [position, version] of config.versions.archived.entries()) {
10153
10195
  if (localeCodes.has(version.id.toLowerCase())) {
10154
10196
  ctx.addIssue({
10155
- code: z67.ZodIssueCode.custom,
10197
+ code: z68.ZodIssueCode.custom,
10156
10198
  message: `Version id "${version.id}" is also a configured locale code — rename the version (e.g. "v${version.id}").`,
10157
10199
  path: ["versions", "archived", position, "id"]
10158
10200
  });
@@ -10163,7 +10205,7 @@ var blumeConfigSchema = z67.strictObject({
10163
10205
  for (const key of Object.keys(typeConfig.frontmatter)) {
10164
10206
  if (Object.hasOwn(config.frontmatter.extend, key)) {
10165
10207
  ctx.addIssue({
10166
- code: z67.ZodIssueCode.custom,
10208
+ code: z68.ZodIssueCode.custom,
10167
10209
  message: `"${key}" is already declared in frontmatter.extend and cannot be redeclared for type "${typeName}".`,
10168
10210
  path: ["content", "types", typeName, "frontmatter", key]
10169
10211
  });
@@ -10172,7 +10214,7 @@ var blumeConfigSchema = z67.strictObject({
10172
10214
  for (const [position, facet] of typeConfig.facets.entries()) {
10173
10215
  if (!(Object.hasOwn(typeConfig.frontmatter, facet) || Object.hasOwn(config.frontmatter.extend, facet))) {
10174
10216
  ctx.addIssue({
10175
- code: z67.ZodIssueCode.custom,
10217
+ code: z68.ZodIssueCode.custom,
10176
10218
  message: `Facet "${facet}" for type "${typeName}" is not a declared custom frontmatter key — add it to the type's frontmatter map or frontmatter.extend.`,
10177
10219
  path: ["content", "types", typeName, "facets", position]
10178
10220
  });
@@ -10181,7 +10223,7 @@ var blumeConfigSchema = z67.strictObject({
10181
10223
  }
10182
10224
  if (config.rateLimit?.kind === "cloudflare" && config.deployment.kind !== "cloudflare") {
10183
10225
  ctx.addIssue({
10184
- code: z67.ZodIssueCode.custom,
10226
+ code: z68.ZodIssueCode.custom,
10185
10227
  message: 'rateLimit: cloudflare() counts with a Workers binding, so it needs `deployment: cloudflare()` from "blume/deploy". On another host, use upstash() or memory() from "blume/ratelimit".',
10186
10228
  path: ["rateLimit"]
10187
10229
  });
@@ -11901,7 +11943,7 @@ import { loadAll } from "js-yaml";
11901
11943
  import { detect } from "package-manager-detector/detect";
11902
11944
  import { basename as basename3, dirname as dirname4, isAbsolute as isAbsolute3, join as join6, relative as relative5 } from "pathe";
11903
11945
  import picomatch from "picomatch";
11904
- import { z as z68 } from "zod";
11946
+ import { z as z69 } from "zod";
11905
11947
 
11906
11948
  // src/core/package-json.ts
11907
11949
  var toPackageName = (raw) => raw.toLowerCase().replaceAll(/[^a-z0-9._-]+/gu, "-").replaceAll(/^[-_.]+|[-_.]+$/gu, "") || "docs";
@@ -12461,10 +12503,11 @@ var readText = (path) => {
12461
12503
  }
12462
12504
  };
12463
12505
  var pnpmWorkspaceRoot = (root) => nearestAncestor(root, (dir) => existsSync3(join6(dir, "pnpm-workspace.yaml")));
12464
- var pnpmWorkspaceSchema = z68.looseObject({
12465
- packages: z68.array(z68.string()).default([])
12506
+ var pnpmWorkspaceSchema = z69.looseObject({
12507
+ packages: z69.array(z69.string()).default([])
12466
12508
  });
12467
12509
  var GLOB_EDGES = /^\.\/|\/+$/gu;
12510
+ var globPattern = (glob) => glob.replaceAll(GLOB_EDGES, "");
12468
12511
  var matchesAny = (globs, at) => globs.length > 0 && picomatch(globs)(at);
12469
12512
  var listsPackage = (workspace, root) => {
12470
12513
  const at = relative5(workspace, root);
@@ -12482,9 +12525,8 @@ var listsPackage = (workspace, root) => {
12482
12525
  return true;
12483
12526
  }
12484
12527
  const globs = parsed.data.packages;
12485
- const pattern = (glob) => glob.replaceAll(GLOB_EDGES, "");
12486
- const included = globs.filter((glob) => !glob.startsWith("!")).map(pattern);
12487
- const excluded = globs.filter((glob) => glob.startsWith("!")).map((glob) => pattern(glob.slice(1)));
12528
+ const included = globs.filter((glob) => !glob.startsWith("!")).map(globPattern);
12529
+ const excluded = globs.filter((glob) => glob.startsWith("!")).map((glob) => globPattern(glob.slice(1)));
12488
12530
  return matchesAny(included, at) && !matchesAny(excluded, at);
12489
12531
  };
12490
12532
  var outsidePnpmWorkspace = (root, answers) => {
@@ -14649,7 +14691,7 @@ var buildGraphqlDocument = (text) => {
14649
14691
 
14650
14692
  // src/openapi/overlay.ts
14651
14693
  import { exec, query } from "jsonpath-rfc9535";
14652
- import { z as z69 } from "zod";
14694
+ import { z as z70 } from "zod";
14653
14695
 
14654
14696
  class OverlayError extends Error {
14655
14697
  constructor(message) {
@@ -14672,18 +14714,18 @@ var MERGE_KIND_PHRASE = {
14672
14714
  object: "an object",
14673
14715
  primitive: "a primitive value"
14674
14716
  };
14675
- var actionSchema = z69.looseObject({
14676
- copy: z69.string().optional(),
14677
- description: z69.string().optional(),
14678
- remove: z69.boolean().default(false),
14679
- target: z69.string().min(1),
14680
- update: z69.json().optional()
14717
+ var actionSchema = z70.looseObject({
14718
+ copy: z70.string().optional(),
14719
+ description: z70.string().optional(),
14720
+ remove: z70.boolean().default(false),
14721
+ target: z70.string().min(1),
14722
+ update: z70.json().optional()
14681
14723
  });
14682
- var overlaySchema = z69.looseObject({
14683
- actions: z69.array(actionSchema).min(1),
14684
- extends: z69.string().optional(),
14685
- info: z69.looseObject({ title: z69.string(), version: z69.string() }),
14686
- overlay: z69.string().regex(/^1\.[01]\.\d+$/u, {
14724
+ var overlaySchema = z70.looseObject({
14725
+ actions: z70.array(actionSchema).min(1),
14726
+ extends: z70.string().optional(),
14727
+ info: z70.looseObject({ title: z70.string(), version: z70.string() }),
14728
+ overlay: z70.string().regex(/^1\.[01]\.\d+$/u, {
14687
14729
  message: "must be an Overlay Specification version, 1.0.x or 1.1.x"
14688
14730
  })
14689
14731
  });
@@ -15224,6 +15266,8 @@ var renderParts = (parts, escape) => {
15224
15266
  return out + renderRuns(runs, escape);
15225
15267
  };
15226
15268
  var renderInline = (parts) => renderParts(parts, escapeProse);
15269
+ var asTyped = (text) => text;
15270
+ var renderInlineMdx = (parts) => renderParts(parts, asTyped);
15227
15271
  var UNSAFE_DESTINATION = /[\s()\u0000-\u001F\u007F]/u;
15228
15272
  var DESTINATION_SPECIALS = /[\\<>]|&(?=#?[a-z0-9]+;)/giu;
15229
15273
  var DESTINATION_IGNORED = /[\t\n\r]/gu;
@@ -15231,9 +15275,9 @@ var destination = (url) => {
15231
15275
  const escaped = url.replaceAll(DESTINATION_IGNORED, "").replaceAll(DESTINATION_SPECIALS, String.raw`\$&`);
15232
15276
  return UNSAFE_DESTINATION.test(escaped) ? `<${escaped}>` : escaped;
15233
15277
  };
15234
- var linkParts = (parts, href) => href && isSafeHref(href) ? [
15278
+ var linkParts = (parts, href, mdx = false) => href && isSafeHref(href) ? [
15235
15279
  {
15236
- markdown: `[${renderParts(parts, escapeMarkdownText)}](${destination(href)})`
15280
+ markdown: `[${renderParts(parts, mdx ? asTyped : escapeMarkdownText)}](${destination(href)})`
15237
15281
  }
15238
15282
  ] : parts;
15239
15283
  var headingPrefix = (level) => `${"#".repeat(Math.min(Math.max(Math.trunc(level), 1), 6))} `;
@@ -15343,7 +15387,11 @@ var columnsPrefix = (text, max) => {
15343
15387
 
15344
15388
  // src/openapi/sentence.ts
15345
15389
  var TERMINAL_PUNCTUATION = /[.!?…。!?]["'”’)\]]*$/u;
15346
- var asSentence = (text) => text === "" || TERMINAL_PUNCTUATION.test(text) ? text : `${text}.`;
15390
+ var LEAD_IN_COLON = /\s*[::]\s*$/u;
15391
+ var LITERAL_COLON = /(?:[::]{2}|:[\w+-]+:)\s*$/u;
15392
+ var endsInLeadIn = (text) => LEAD_IN_COLON.test(text) && !LITERAL_COLON.test(text);
15393
+ var closeSentence = (text) => text === "" || TERMINAL_PUNCTUATION.test(text) ? text : `${text}.`;
15394
+ var asSentence = (text) => closeSentence(endsInLeadIn(text) ? text.replace(LEAD_IN_COLON, "") : text);
15347
15395
 
15348
15396
  // src/openapi/signature.ts
15349
15397
  var operationSignature = (spec, operation) => spec.kind === "graphql" ? graphqlSignature(operation) : `${operation.method.toUpperCase()} ${operation.path}`;
@@ -15418,10 +15466,41 @@ var descriptionMdx = (text) => mdxSafe(closeOpenFence(text.trim()));
15418
15466
  var META_DESCRIPTION_MAX = 160;
15419
15467
  var WHITESPACE = /\s+/gu;
15420
15468
  var TRAILING_WORD = /\s+\S*$/u;
15469
+ var ITEM_END = /[.;。;]$/u;
15470
+ var flatten = (node) => mdastToString(node).replace(WHITESPACE, " ").trim();
15471
+ var lastLeaf = (node) => {
15472
+ const last = "children" in node ? node.children.at(-1) : undefined;
15473
+ return last ? lastLeaf(last) : node;
15474
+ };
15475
+ var leadsIn = (paragraph) => {
15476
+ const leaf = lastLeaf(paragraph);
15477
+ return leaf.type === "text" && endsInLeadIn(leaf.value);
15478
+ };
15479
+ var listProse = (list) => list.children.map((item) => {
15480
+ const paragraph = item.children.find((child) => child.type === "paragraph");
15481
+ if (!paragraph) {
15482
+ return "";
15483
+ }
15484
+ const text = flatten(paragraph);
15485
+ if (lastLeaf(paragraph).type !== "text") {
15486
+ return text;
15487
+ }
15488
+ return (leadsIn(paragraph) ? asSentence(text) : text).replace(ITEM_END, "");
15489
+ }).filter(Boolean).join("; ");
15421
15490
  var plainProse = (markdown) => {
15422
- const tree = fromMarkdown2(markdown);
15423
- const first = tree.children.find((node) => node.type === "paragraph") ?? tree.children[0];
15424
- return first ? mdastToString(first).replace(WHITESPACE, " ").trim() : "";
15491
+ const { children } = fromMarkdown2(markdown);
15492
+ const index = children.findIndex((node) => node.type === "paragraph");
15493
+ const paragraph = children[index];
15494
+ if (paragraph?.type !== "paragraph") {
15495
+ return children[0] ? flatten(children[0]) : "";
15496
+ }
15497
+ const text = flatten(paragraph);
15498
+ if (!leadsIn(paragraph)) {
15499
+ return text;
15500
+ }
15501
+ const next = children[index + 1];
15502
+ const items = next?.type === "list" ? listProse(next) : "";
15503
+ return items ? `${text} ${items}` : asSentence(text);
15425
15504
  };
15426
15505
  var clip = (text, max) => {
15427
15506
  if (max <= 0) {
@@ -15461,7 +15540,7 @@ var operationDescription = (spec, operation, options) => {
15461
15540
  }
15462
15541
  const suffix = `Reference for the ${subject} in the ${apiPhrase(spec)}.`;
15463
15542
  const prose = clip(plainProse(operation.description || operation.summary), META_DESCRIPTION_MAX - stringWidth2(suffix) - 2);
15464
- return clip([asSentence(prose), suffix].filter(Boolean).join(" "), META_DESCRIPTION_MAX);
15543
+ return clip([closeSentence(prose), suffix].filter(Boolean).join(" "), META_DESCRIPTION_MAX);
15465
15544
  };
15466
15545
  var withDescription = (description, component) => description.trim() ? `${descriptionMdx(description)}
15467
15546
 
@@ -16904,6 +16983,11 @@ var withRateLimitBinding = (wranglerText, adapter) => {
16904
16983
  return JSON.stringify(config);
16905
16984
  };
16906
16985
 
16986
+ // src/core/powered-by.ts
16987
+ var POWERED_BY_HEADERS = {
16988
+ "X-Powered-By": "Blume"
16989
+ };
16990
+
16907
16991
  // src/ai/web-bot-auth.ts
16908
16992
  var SIGNATURES_DIRECTORY_PATH = "/.well-known/http-message-signatures-directory";
16909
16993
  var SIGNATURES_DIRECTORY_TYPE = "application/http-message-signatures-directory+json";
@@ -16928,6 +17012,11 @@ var headerRules = (config, homeLinkHeader) => {
16928
17012
  path: `${deployBase}/*.${rule.ext}`,
16929
17013
  value: rule.contentType
16930
17014
  }));
17015
+ if (config.poweredBy) {
17016
+ for (const [name, value] of Object.entries(POWERED_BY_HEADERS)) {
17017
+ rules.push({ name, path: `${deployBase}/*`, value });
17018
+ }
17019
+ }
16931
17020
  if (homeLinkHeader) {
16932
17021
  rules.push({ name: "Link", path: `${deployBase}/`, value: homeLinkHeader });
16933
17022
  }
@@ -17023,6 +17112,7 @@ var buildNegotiationWorker = (options) => {
17023
17112
  const binding = JSON.stringify(options.assetsBinding);
17024
17113
  const prefix = JSON.stringify(encodeURI(normalizeBasePath(options.base)));
17025
17114
  const homeLinkHeader = JSON.stringify(options.homeLinkHeader ?? null);
17115
+ const poweredBy = JSON.stringify(options.poweredBy === false ? {} : POWERED_BY_HEADERS);
17026
17116
  const homeTokens = JSON.stringify(options.homeTokens === undefined ? null : String(options.homeTokens));
17027
17117
  const notFound = JSON.stringify({
17028
17118
  json: options.notFound?.json === true,
@@ -17062,6 +17152,7 @@ const PATTERN_REDIRECTS = ${patternRedirects}.map(
17062
17152
  );
17063
17153
  const NOT_FOUND = ${notFound};
17064
17154
  const SVG_ASSET_HEADERS = ${JSON.stringify(SVG_ASSET_HEADERS)};
17155
+ const POWERED_BY = ${poweredBy};
17065
17156
 
17066
17157
  // An SVG a content source downloaded: a document that could run script as the
17067
17158
  // docs site if opened directly, so it goes out sandboxed. Matched on the
@@ -17273,12 +17364,30 @@ const isHomePath = (pathname) => {
17273
17364
  return rest === "" || rest === "/";
17274
17365
  };
17275
17366
 
17367
+ // Blume's X-Powered-By, on every answer the wrapper gives unless the
17368
+ // response already names its own (the project's middleware, say).
17369
+ const identify = (headers) => {
17370
+ for (const [name, value] of Object.entries(POWERED_BY)) {
17371
+ if (!headers.has(name)) {
17372
+ headers.set(name, value);
17373
+ }
17374
+ }
17375
+ };
17376
+
17276
17377
  const withHeaders = (response, apply) => {
17277
17378
  const patched = new Response(response.body, response);
17278
17379
  apply(patched.headers);
17380
+ identify(patched.headers);
17279
17381
  return patched;
17280
17382
  };
17281
17383
 
17384
+ // A response that already carries the header (Blume's runtime middleware sets
17385
+ // it on every page Astro renders) goes out as it is.
17386
+ const withPoweredBy = (response) =>
17387
+ Object.keys(POWERED_BY).every((name) => response.headers.has(name))
17388
+ ? response
17389
+ : withHeaders(response, () => {});
17390
+
17282
17391
  export default {
17283
17392
  async fetch(request, env, context) {
17284
17393
  const url = new URL(request.url);
@@ -17287,7 +17396,10 @@ export default {
17287
17396
  const redirect = redirectFor(url.pathname);
17288
17397
  if (redirect !== null) {
17289
17398
  return new Response(null, {
17290
- headers: { location: redirectLocation(redirect[0], url.search) },
17399
+ headers: {
17400
+ ...POWERED_BY,
17401
+ location: redirectLocation(redirect[0], url.search),
17402
+ },
17291
17403
  status: redirect[1],
17292
17404
  });
17293
17405
  }
@@ -17299,7 +17411,7 @@ export default {
17299
17411
  });
17300
17412
  }
17301
17413
  if (request.method !== "GET" && request.method !== "HEAD") {
17302
- return server.fetch(request, env, context);
17414
+ return withPoweredBy(await server.fetch(request, env, context));
17303
17415
  }
17304
17416
  const assets = env[ASSETS_BINDING];
17305
17417
  // The request goes through untouched, so a conditional revalidation
@@ -17308,7 +17420,7 @@ export default {
17308
17420
  if (assets !== undefined && isPageJson(url.pathname)) {
17309
17421
  const asset = await assets.fetch(request);
17310
17422
  if (asset.status !== 404) {
17311
- return asset;
17423
+ return withPoweredBy(asset);
17312
17424
  }
17313
17425
  }
17314
17426
  const variant = markdownVariantUrl(url.pathname + url.search);
@@ -17339,10 +17451,10 @@ export default {
17339
17451
  const response = await server.fetch(request, env, context);
17340
17452
  const twin = await notFoundTwin(request, url, response, assets);
17341
17453
  if (twin !== null) {
17342
- return twin;
17454
+ return withPoweredBy(twin);
17343
17455
  }
17344
17456
  if (variant === null && !(home && HOME_LINK_HEADER !== null)) {
17345
- return response;
17457
+ return withPoweredBy(response);
17346
17458
  }
17347
17459
  return withHeaders(response, (headers) => {
17348
17460
  if (variant !== null) {
@@ -17607,6 +17719,7 @@ var emitCloudflareNegotiation = async (project, log) => {
17607
17719
  markdown: existsSync5(join11(staticDir, "404.md"))
17608
17720
  },
17609
17721
  pageJsonPaths: config.agents.api ? project.manifest.routes.filter((route) => !route.hidden && rawMarkdown[route.path] !== undefined).map((route) => pageJsonPath(route.path)) : [],
17722
+ poweredBy: config.poweredBy,
17610
17723
  redirects: platformRedirects(project),
17611
17724
  routePaths
17612
17725
  });
@@ -17774,10 +17887,11 @@ var nodeEntryWrapper = (rules, options = {}) => `${WRAPPER_MARKER}
17774
17887
  // This wrapper answers the configured redirects with their exact status and
17775
17888
  // sets the headers the standalone server's static handler can't (the media
17776
17889
  // types and CORS headers of the .well-known discovery files, the sandbox on
17777
- // downloaded SVGs), then hands every other request to Astro.
17890
+ // downloaded SVGs, X-Powered-By), then hands every other request to Astro.
17778
17891
  import { posix } from "node:path";
17779
17892
 
17780
17893
  const BASE = ${JSON.stringify(options.base ?? "")};
17894
+ const POWERED_BY = ${JSON.stringify(options.poweredBy === false ? {} : POWERED_BY_HEADERS)};
17781
17895
  const RULES = new Map(${JSON.stringify(exactRules(rules))});
17782
17896
  const PATTERNS = ${JSON.stringify(patternRules(rules))};
17783
17897
  const REDIRECTS = ${JSON.stringify(options.redirects ?? {})};
@@ -17801,20 +17915,20 @@ const servedPath = (req) => {
17801
17915
  : path;
17802
17916
  return BASE + (rest || "/");
17803
17917
  };
17804
- const applyHeaders = (req, res) => {
17918
+ const applyHeaders = (req, res, identify) => {
17805
17919
  const path = servedPath(req);
17806
17920
  const lower = path.toLowerCase();
17807
- const headers =
17808
- RULES.get(path) ??
17809
- PATTERNS.find(
17810
- ([prefix, suffix]) =>
17811
- lower.startsWith(prefix.toLowerCase()) &&
17812
- lower.endsWith(suffix.toLowerCase())
17813
- )?.[2];
17814
- if (headers) {
17815
- for (const [name, value] of Object.entries(headers)) {
17816
- res.setHeader(name, value);
17817
- }
17921
+ const headers = {
17922
+ ...(identify ? POWERED_BY : {}),
17923
+ ...(RULES.get(path) ??
17924
+ PATTERNS.find(
17925
+ ([prefix, suffix]) =>
17926
+ lower.startsWith(prefix.toLowerCase()) &&
17927
+ lower.endsWith(suffix.toLowerCase())
17928
+ )?.[2]),
17929
+ };
17930
+ for (const [name, value] of Object.entries(headers)) {
17931
+ res.setHeader(name, value);
17818
17932
  }
17819
17933
  };
17820
17934
  // A pattern redirect's Location: its template, each $n filled with that
@@ -17848,7 +17962,7 @@ const answerRedirect = (req, res) => {
17848
17962
  return false;
17849
17963
  }
17850
17964
  const [location, status] = redirect;
17851
- res.writeHead(status, { location });
17965
+ res.writeHead(status, { ...POWERED_BY, location });
17852
17966
  res.end();
17853
17967
  return true;
17854
17968
  };
@@ -17865,7 +17979,7 @@ export const handler = (req, res, ...rest) => {
17865
17979
  if (answerRedirect(req, res)) {
17866
17980
  return;
17867
17981
  }
17868
- applyHeaders(req, res);
17982
+ applyHeaders(req, res, options.mode !== "middleware");
17869
17983
  return astro.handler(req, res, ...rest);
17870
17984
  };
17871
17985
  export const startServer = () => {
@@ -17881,7 +17995,7 @@ export const startServer = () => {
17881
17995
  if (answerRedirect(req, res)) {
17882
17996
  return;
17883
17997
  }
17884
- applyHeaders(req, res);
17998
+ applyHeaders(req, res, true);
17885
17999
  for (const listener of astroListeners) {
17886
18000
  listener.call(httpServer, req, res);
17887
18001
  }
@@ -17906,7 +18020,7 @@ var wrapNodeEntry = async (project, log) => {
17906
18020
  ];
17907
18021
  const redirects = nodeRedirects(project);
17908
18022
  const patternRedirects = nodePatternRedirects(project);
17909
- if (rules.length === 0 && Object.keys(redirects).length === 0 && patternRedirects.length === 0) {
18023
+ if (!project.config.poweredBy && rules.length === 0 && Object.keys(redirects).length === 0 && patternRedirects.length === 0) {
17910
18024
  return;
17911
18025
  }
17912
18026
  const serverDir = join12(distDir(project.context), "server");
@@ -17923,6 +18037,7 @@ var wrapNodeEntry = async (project, log) => {
17923
18037
  await writeFile6(entry, nodeEntryWrapper(rules, {
17924
18038
  base: normalizeBasePath(project.config.deployment.options.base),
17925
18039
  patternRedirects,
18040
+ poweredBy: project.config.poweredBy,
17926
18041
  redirects
17927
18042
  }), "utf-8");
17928
18043
  log.success("Wired headers and redirects into the Node server entry");
@@ -17975,7 +18090,7 @@ import { readdir, readFile as readFile11 } from "node:fs/promises";
17975
18090
  import { builtinModules } from "node:module";
17976
18091
  import { init, parse as parse2 } from "es-module-lexer";
17977
18092
  import { dirname as dirname8, join as join13, relative as relative7 } from "pathe";
17978
- import { z as z70 } from "zod";
18093
+ import { z as z71 } from "zod";
17979
18094
  var BUILTINS = new Set(builtinModules);
17980
18095
  var NON_PACKAGE_PREFIXES = ["node:", "astro:", "virtual:", "data:", "\x00"];
17981
18096
  var packageName = (specifier) => {
@@ -18047,7 +18162,7 @@ var resolvable = (name, from, root) => {
18047
18162
  }
18048
18163
  };
18049
18164
  var MODULE_FILE = /\.(?:m?js|cjs)$/u;
18050
- var vcConfigSchema = z70.looseObject({ handler: z70.string().optional() });
18165
+ var vcConfigSchema = z71.looseObject({ handler: z71.string().optional() });
18051
18166
  var listModules = async (dir) => {
18052
18167
  const files = [];
18053
18168
  const entries = await readdir(dir, { withFileTypes: true });
@@ -18236,9 +18351,19 @@ var svgAssetRoute = (base) => ({
18236
18351
  ])),
18237
18352
  src: svgAssetSource(base)
18238
18353
  });
18354
+ var poweredBySource = (base) => `^${routePattern(base)}(?:/.*)?$`;
18355
+ var poweredByRoute = (base) => ({
18356
+ continue: true,
18357
+ headers: Object.fromEntries(Object.entries(POWERED_BY_HEADERS).map(([name, value]) => [
18358
+ name.toLowerCase(),
18359
+ value
18360
+ ])),
18361
+ src: poweredBySource(base)
18362
+ });
18363
+ var isPoweredByRoute = (route, base) => route.continue === true && route.src === poweredBySource(base);
18239
18364
  var isCorsRoute = (route) => route.continue === true && route.headers?.["access-control-allow-origin"] === ALLOW_ANY_ORIGIN && isString5(route.src) && Object.keys(route).length === 3;
18240
- var isNegotiationRoute = (route, base) => route.has?.some((condition) => MARKDOWN_VALUES.has(condition.value)) === true || route.dest === mountBasePath(base, NOT_FOUND_MARKDOWN_DEST) && route.status === 404 || route.dest === mountBasePath(base, NOT_FOUND_JSON_DEST) && route.status === 404 || route.continue === true && route.headers?.vary === "Accept" && isString5(route.src) && Object.keys(route).length === 3 || route.continue === true && isString5(route.headers?.link) && route.src === homeSource(base) && Object.keys(route).length === 3 || isCorsRoute(route) || route.continue === true && route.src === svgAssetSource(base);
18241
- var injectNegotiationRoutes = (configText, routePaths, homeLinkHeader, contentTypeOverrides, homeTokens, notFound = {}, corsPaths = [], svgAssets = false, base = "") => {
18365
+ var isNegotiationRoute = (route, base) => route.has?.some((condition) => MARKDOWN_VALUES.has(condition.value)) === true || route.dest === mountBasePath(base, NOT_FOUND_MARKDOWN_DEST) && route.status === 404 || route.dest === mountBasePath(base, NOT_FOUND_JSON_DEST) && route.status === 404 || route.continue === true && route.headers?.vary === "Accept" && isString5(route.src) && Object.keys(route).length === 3 || route.continue === true && isString5(route.headers?.link) && route.src === homeSource(base) && Object.keys(route).length === 3 || isCorsRoute(route) || route.continue === true && route.src === svgAssetSource(base) || isPoweredByRoute(route, base);
18366
+ var injectNegotiationRoutes = (configText, routePaths, homeLinkHeader, contentTypeOverrides, homeTokens, notFound = {}, corsPaths = [], svgAssets = false, base = "", poweredBy = false) => {
18242
18367
  const overrideEntries = Object.entries(contentTypeOverrides ?? {});
18243
18368
  let config;
18244
18369
  try {
@@ -18270,6 +18395,9 @@ var injectNegotiationRoutes = (configText, routePaths, homeLinkHeader, contentTy
18270
18395
  headerRoutes.push(svgAssetRoute(base));
18271
18396
  }
18272
18397
  routes.splice(filesystemIndex, 0, ...headerRoutes, ...rewriteRoutes);
18398
+ if (poweredBy) {
18399
+ routes.unshift(poweredByRoute(base));
18400
+ }
18273
18401
  const notFoundRoutes = [
18274
18402
  ...notFound.markdown ? notFoundMarkdownRoutes(base) : [],
18275
18403
  ...notFound.json ? notFoundJsonRoutes(base) : []
@@ -18391,7 +18519,7 @@ var emitVercelNegotiation = async (project, log) => {
18391
18519
  const injected = injectNegotiationRoutes(await readFile12(configPath, "utf-8"), routePaths, buildHomeLinkHeader(config, routePaths), overrides, home ? markdownTokenCount(agentMarkdown(home)) : undefined, {
18392
18520
  json: existsSync8(join14(builtDir, "404.json")),
18393
18521
  markdown: existsSync8(join14(builtDir, "404.md"))
18394
- }, crossOriginDiscoveryPaths(config), existsSync8(join14(builtDir, "blume-assets")), base);
18522
+ }, crossOriginDiscoveryPaths(config), existsSync8(join14(builtDir, "blume-assets")), base, config.poweredBy);
18395
18523
  if (injected === null) {
18396
18524
  log.warn("Could not wire Accept: text/markdown negotiation into .vercel/output/config.json — raw Markdown stays available at the .md URLs.");
18397
18525
  return;
@@ -18572,7 +18700,7 @@ var resolveProjectContext = (root, config, options) => {
18572
18700
  // src/core/config.ts
18573
18701
  import { existsSync as existsSync10, readFileSync as readFileSync4 } from "node:fs";
18574
18702
  import { basename as basename6 } from "pathe";
18575
- import { z as z71 } from "zod";
18703
+ import { z as z72 } from "zod";
18576
18704
 
18577
18705
  // src/core/deployment-env.ts
18578
18706
  var applyDeploymentEnv = (config, env = process.env) => {
@@ -18623,8 +18751,8 @@ class ConfigValidationError extends BlumeError {
18623
18751
  }
18624
18752
  }
18625
18753
  var importConfigModule = createDefaultExportLoader();
18626
- var themeFontsProbeSchema = z71.looseObject({
18627
- theme: z71.looseObject({ fonts: z71.unknown().optional() }).optional()
18754
+ var themeFontsProbeSchema = z72.looseObject({
18755
+ theme: z72.looseObject({ fonts: z72.unknown().optional() }).optional()
18628
18756
  });
18629
18757
  var isPathSegment = (segment) => typeof segment !== "symbol";
18630
18758
  var locationPath = (issue) => [
@@ -18712,7 +18840,7 @@ ${moreIssues}`
18712
18840
  };
18713
18841
  };
18714
18842
 
18715
- export { i18nEnabled, localeCodes, resolveFallbackLocale, localizeRoute, localizeInternalPath, localeTargetPath, i18nDiagnostics, routeSetFor, OPENAPI_PATH, API_PAGES_PATH, API_PAGE_PATH, API_NAVIGATION_PATH, API_SEARCH_PATH, apiNamePhrase, resolveReferences, blumeReferences, referenceSpecFiles, hasScalarReferences, builtinProxyReferences, apiPagesUseBuiltinProxy, needsPlaygroundProxy, buildMcpDiscovery, asciiSlugify, buildMcpServerCard, YAML_SCHEMA, frontmatter_default, hasAiCatalog, buildHomeLinkHeader, resolveLocalizable, sourcesOfKind, resolveDocsCollection, CHANGELOG_INDEX_ROUTE, hasChangelogIndex, withChangelogIndexText, discoverPages, customStaticRoutes, routeIsTaken, hasGeneratedChangelog, navTargetRoutes, customOgRoutes, nextFenceState, hashText, pollingWatch, snapshotCache, loadWithCache, MARKDOWN_BODY_FEATURES, MDX_BODY_FEATURES, TOC_HIDDEN_KEY, parseHeadingMarkers, normalizeRef, isPageRef, pagesByRef, buildNavigation, resolveAskBackend, captchaSettings, parseApiEndpoint, deployPassthrough, RATE_LIMIT_BINDING, GOOGLE_FONTS, isFontSlug, fontLocaleCodes, localeFontSubsets, buildFontEntries, buildFontsCss, configuredFonts, PUBLIC_API_URL, repoUrl, editBaseUrl, apiUrl, EN_UI, resolveUIStrings, isPatternPath, compileEveryRedirect, patternDestination, pathsUnderPattern, hasVariables, substituteVariables, undefinedVariables, pageMetaSchema, folderMetaSchema, VERSION_ID, VERSION_LIKE, versionizeRoute, versionsDiagnostics, slugify, slugifyPath, unloadablePathDiagnostic, frontmatterYamlDiagnostic, HTML_COMMENT, scanBody, extractHeadings, strippedLineOffset, isStringValue, placeEntryRef, resolveEntryRoute, localizedRoute, normalizeEntry, hasIncludeStatements, expandIncludes, buildIncludeGraph, readExpandedEntryText, rewriteRelativeImages, collectContentAssets, parseYouTubeId, componentRegistry, downlevelComponentNode, downlevelComponents, buildRssFeeds, renderRssFeed, gradeExternal, probeAll, validateLinks, HTTP_METHODS, withServerDefaults, TEMPLATES, PACKAGE_MANAGERS, commandsFor, cdCommand, detectPackageManager, detectProjectPackageManager, validateContentDir, titleize, outsidePnpmWorkspace, workspaceNote, buildPlan, applyPlan, readExistingPackage, nextSteps, nodeRequire, readOverlaidSpec, escapeMarkdownText, guardBlockStart, renderInline, destination, linkParts, headingPrefix, blockquote, listItem, indent, codeFence, image, writesMdx, unsupported, joinBlocks, markdownDocument, absoluteUrl, neutralizeUnsafeLinks, columnsPrefix, isOpenApiSource, openApiSource, projectComponentSerializers, applyAudienceVisibility, agentMarkdown, buildRawMarkdown, markdownRoutePaths, isJsonObject, getPath, isStringValue2, asString, asObject, asNumber, objectsIn, SVG_ASSET_HEADERS, applyBaseToAstroRedirects, withMirrorRedirects, distDir, adapterRoot, deployPlatform, createModuleLoader, findConfigFile, findComponentsFile, resolveRuntimeDir, resolveProjectContext, ConfigValidationError, loadConfig };
18843
+ export { i18nEnabled, localeCodes, resolveFallbackLocale, localizeRoute, localizeInternalPath, localeTargetPath, i18nDiagnostics, routeSetFor, OPENAPI_PATH, API_PAGES_PATH, API_PAGE_PATH, API_NAVIGATION_PATH, API_SEARCH_PATH, apiNamePhrase, resolveReferences, blumeReferences, referenceSpecFiles, hasScalarReferences, builtinProxyReferences, apiPagesUseBuiltinProxy, needsPlaygroundProxy, buildMcpDiscovery, asciiSlugify, buildMcpServerCard, YAML_SCHEMA, frontmatter_default, hasAiCatalog, buildHomeLinkHeader, resolveLocalizable, sourcesOfKind, resolveDocsCollection, CHANGELOG_INDEX_ROUTE, hasChangelogIndex, withChangelogIndexText, discoverPages, customStaticRoutes, routeIsTaken, hasGeneratedChangelog, navTargetRoutes, customOgRoutes, nextFenceState, hashText, pollingWatch, snapshotCache, loadWithCache, MARKDOWN_BODY_FEATURES, MDX_BODY_FEATURES, TOC_HIDDEN_KEY, parseHeadingMarkers, normalizeRef, isPageRef, pagesByRef, buildNavigation, resolveAskBackend, captchaSettings, parseApiEndpoint, deployPassthrough, RATE_LIMIT_BINDING, GOOGLE_FONTS, isFontSlug, fontLocaleCodes, localeFontSubsets, buildFontEntries, buildFontsCss, configuredFonts, PUBLIC_API_URL, repoUrl, editBaseUrl, apiUrl, EN_UI, resolveUIStrings, isPatternPath, compileEveryRedirect, patternDestination, pathsUnderPattern, hasVariables, substituteVariables, undefinedVariables, pageMetaSchema, folderMetaSchema, VERSION_ID, VERSION_LIKE, versionizeRoute, versionsDiagnostics, slugify, slugifyPath, unloadablePathDiagnostic, frontmatterYamlDiagnostic, HTML_COMMENT, scanBody, extractHeadings, strippedLineOffset, isStringValue, placeEntryRef, resolveEntryRoute, localizedRoute, normalizeEntry, hasIncludeStatements, expandIncludes, buildIncludeGraph, readExpandedEntryText, rewriteRelativeImages, collectContentAssets, parseYouTubeId, componentRegistry, downlevelComponentNode, downlevelComponents, buildRssFeeds, renderRssFeed, gradeExternal, probeAll, validateLinks, HTTP_METHODS, withServerDefaults, TEMPLATES, PACKAGE_MANAGERS, commandsFor, cdCommand, detectPackageManager, detectProjectPackageManager, validateContentDir, titleize, outsidePnpmWorkspace, workspaceNote, buildPlan, applyPlan, readExistingPackage, nextSteps, nodeRequire, readOverlaidSpec, escapeMarkdownText, guardBlockStart, renderInline, renderInlineMdx, destination, linkParts, headingPrefix, blockquote, listItem, indent, codeFence, image, writesMdx, unsupported, joinBlocks, markdownDocument, absoluteUrl, neutralizeUnsafeLinks, columnsPrefix, isOpenApiSource, openApiSource, projectComponentSerializers, applyAudienceVisibility, agentMarkdown, buildRawMarkdown, markdownRoutePaths, isJsonObject, getPath, isStringValue2, asString, asObject, asNumber, objectsIn, SVG_ASSET_HEADERS, applyBaseToAstroRedirects, withMirrorRedirects, distDir, adapterRoot, deployPlatform, createModuleLoader, findConfigFile, findComponentsFile, resolveRuntimeDir, resolveProjectContext, ConfigValidationError, loadConfig };
18716
18844
 
18717
- //# debugId=868F391FE86A3B3764756E2164756E21
18718
- //# sourceMappingURL=chunk-ehweg4fr.js.map
18845
+ //# debugId=9459B0EE70BDAF3C64756E2164756E21
18846
+ //# sourceMappingURL=chunk-124fvmzq.js.map