blume 2.2.0 → 2.2.2

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 (125) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/cli/{chunk-xgq4eytj.js → chunk-080mfch6.js} +15 -15
  3. package/dist/cli/{chunk-br0n8n3e.js → chunk-1ch3ct3r.js} +14 -14
  4. package/dist/cli/{chunk-49r370mb.js → chunk-2ssh60qh.js} +6 -6
  5. package/dist/cli/{chunk-1cm0h819.js → chunk-34wap3ed.js} +3 -3
  6. package/dist/cli/{chunk-fqy4n3q2.js → chunk-40vk8kgf.js} +7 -7
  7. package/dist/cli/{chunk-96snx8yy.js → chunk-487b95qy.js} +3 -3
  8. package/dist/cli/{chunk-kkrteb15.js → chunk-4zxh25hc.js} +2 -2
  9. package/dist/cli/{chunk-cn3dy3hz.js → chunk-69rjf786.js} +5 -5
  10. package/dist/cli/{chunk-dmx6cezx.js → chunk-9h8mh2tk.js} +3 -3
  11. package/dist/cli/{chunk-dmx6cezx.js.map → chunk-9h8mh2tk.js.map} +2 -2
  12. package/dist/cli/{chunk-t5xx74rd.js → chunk-9jqmq5hv.js} +6 -6
  13. package/dist/cli/{chunk-8b489v1b.js → chunk-aafhwx74.js} +1 -1
  14. package/dist/cli/{chunk-2nr29y95.js → chunk-b680sv30.js} +3 -3
  15. package/dist/cli/{chunk-rkqae7kh.js → chunk-beb0z983.js} +16 -16
  16. package/dist/cli/{chunk-th0pgaj5.js → chunk-c5bjxq8v.js} +2 -2
  17. package/dist/cli/{chunk-wehv26ry.js → chunk-e1n41w9m.js} +3 -3
  18. package/dist/cli/{chunk-frk2wdq1.js → chunk-etckvbrh.js} +14 -14
  19. package/dist/cli/{chunk-ahc5gc9h.js → chunk-f260jdrn.js} +5 -5
  20. package/dist/cli/{chunk-05f21r8h.js → chunk-fnxgtjeq.js} +1 -1
  21. package/dist/cli/{chunk-4rftmttv.js → chunk-gwy55cx3.js} +2 -2
  22. package/dist/cli/{chunk-4rftmttv.js.map → chunk-gwy55cx3.js.map} +2 -2
  23. package/dist/cli/{chunk-vnbvhgmd.js → chunk-gxhcf2hs.js} +2 -2
  24. package/dist/cli/{chunk-bjk964fp.js → chunk-h0qwdbem.js} +2 -2
  25. package/dist/cli/{chunk-1rkxzg3n.js → chunk-hktq4j5r.js} +15 -12
  26. package/dist/cli/{chunk-1rkxzg3n.js.map → chunk-hktq4j5r.js.map} +3 -3
  27. package/dist/cli/{chunk-enk76qd5.js → chunk-hn3g2b89.js} +9 -9
  28. package/dist/cli/{chunk-w6e455pz.js → chunk-j4nfgn2j.js} +1 -1
  29. package/dist/cli/{chunk-as09pafp.js → chunk-k45sq16q.js} +4 -4
  30. package/dist/cli/{chunk-as09pafp.js.map → chunk-k45sq16q.js.map} +3 -3
  31. package/dist/cli/{chunk-p8zg3a2h.js → chunk-kmswjxj9.js} +3 -3
  32. package/dist/cli/{chunk-xt0qvz1t.js → chunk-nqna8dzp.js} +17 -17
  33. package/dist/cli/{chunk-dyk3r7jw.js → chunk-p834rkcn.js} +5 -5
  34. package/dist/cli/{chunk-dpcahcrb.js → chunk-ppa6mg4d.js} +6 -6
  35. package/dist/cli/{chunk-79bzzkx4.js → chunk-q1wwrxzw.js} +2 -2
  36. package/dist/cli/{chunk-m9bp2hc1.js → chunk-qcyxkj44.js} +1 -1
  37. package/dist/cli/{chunk-dm4mg9bj.js → chunk-r5nm9w0c.js} +740 -685
  38. package/dist/cli/{chunk-dm4mg9bj.js.map → chunk-r5nm9w0c.js.map} +8 -6
  39. package/dist/cli/{chunk-a3ydrqny.js → chunk-rtvgmg2j.js} +2 -2
  40. package/dist/cli/{chunk-c69tw29j.js → chunk-t2h8pwy1.js} +4 -4
  41. package/dist/cli/{chunk-vzy9rh6y.js → chunk-x60e15st.js} +17 -17
  42. package/dist/cli/{chunk-mrvh4c88.js → chunk-x7bh6d9j.js} +4 -4
  43. package/dist/cli/{chunk-7tekknev.js → chunk-ydqzkhjn.js} +6 -6
  44. package/dist/cli/{chunk-gprwej7h.js → chunk-yg8ckc3g.js} +2 -2
  45. package/dist/cli/{chunk-8f8xw4x2.js → chunk-zxd5jrgx.js} +14 -4
  46. package/dist/cli/{chunk-8f8xw4x2.js.map → chunk-zxd5jrgx.js.map} +3 -3
  47. package/dist/cli/index.js +18 -18
  48. package/dist/types/core/config-input.d.ts +37 -5
  49. package/dist/types/core/data.d.ts +6 -2
  50. package/dist/types/core/mcp-clients.d.ts +47 -0
  51. package/dist/types/core/nav-diagnostics.d.ts +7 -0
  52. package/dist/types/core/schema.d.ts +55 -4
  53. package/dist/types/ratelimit/index.d.ts +2 -0
  54. package/dist/types/ratelimit/memory.d.ts +1 -1
  55. package/dist/types/ratelimit/schema.d.ts +40 -0
  56. package/dist/types/ratelimit/unkey.d.ts +48 -0
  57. package/docs/02-deployment.mdx +1 -0
  58. package/docs/configuration/index.mdx +5 -4
  59. package/docs/configuration/rate-limiting.mdx +20 -1
  60. package/docs/content/i18n.mdx +1 -1
  61. package/docs/discoverability/mcp.mdx +40 -8
  62. package/package.json +1 -1
  63. package/skills/blume-migrate/SKILL.md +2 -2
  64. package/skills/blume-migrate/references/docusaurus.md +2 -2
  65. package/skills/blume-migrate/references/gitbook.md +2 -2
  66. package/skills/blume-migrate/references/github-wiki.md +2 -2
  67. package/skills/blume-migrate/references/jekyll.md +2 -2
  68. package/skills/blume-migrate/references/mkdocs.md +2 -2
  69. package/skills/blume-migrate/references/nextra.md +3 -3
  70. package/skills/blume-migrate/references/readme.md +1 -1
  71. package/skills/blume-migrate/references/redocly.md +2 -2
  72. package/skills/blume-migrate/references/vitepress.md +2 -2
  73. package/skills/blume-migrate/references/vuepress.md +1 -1
  74. package/skills/blume-migrate/scripts/github-wiki-codemod.mjs +1 -1
  75. package/src/astro/generate.ts +15 -5
  76. package/src/astro/templates.ts +4 -4
  77. package/src/cli/required-secrets.ts +0 -1
  78. package/src/components/layout/PageActions.astro +119 -34
  79. package/src/components/layout/RootLayout.astro +18 -2
  80. package/src/components/layout/SiteFooter.astro +31 -8
  81. package/src/core/config-input.ts +38 -4
  82. package/src/core/data.ts +10 -3
  83. package/src/core/mcp-clients.ts +87 -0
  84. package/src/core/nav-diagnostics.ts +25 -0
  85. package/src/core/schema.ts +93 -3
  86. package/src/openapi/proxy.ts +5 -1
  87. package/src/ratelimit/index.ts +2 -0
  88. package/src/ratelimit/memory.ts +1 -1
  89. package/src/ratelimit/runtime.ts +81 -0
  90. package/src/ratelimit/schema.ts +2 -0
  91. package/src/ratelimit/unkey.ts +61 -0
  92. package/src/registry/registry.ts +1 -1
  93. /package/dist/cli/{chunk-xgq4eytj.js.map → chunk-080mfch6.js.map} +0 -0
  94. /package/dist/cli/{chunk-br0n8n3e.js.map → chunk-1ch3ct3r.js.map} +0 -0
  95. /package/dist/cli/{chunk-49r370mb.js.map → chunk-2ssh60qh.js.map} +0 -0
  96. /package/dist/cli/{chunk-1cm0h819.js.map → chunk-34wap3ed.js.map} +0 -0
  97. /package/dist/cli/{chunk-fqy4n3q2.js.map → chunk-40vk8kgf.js.map} +0 -0
  98. /package/dist/cli/{chunk-96snx8yy.js.map → chunk-487b95qy.js.map} +0 -0
  99. /package/dist/cli/{chunk-kkrteb15.js.map → chunk-4zxh25hc.js.map} +0 -0
  100. /package/dist/cli/{chunk-cn3dy3hz.js.map → chunk-69rjf786.js.map} +0 -0
  101. /package/dist/cli/{chunk-t5xx74rd.js.map → chunk-9jqmq5hv.js.map} +0 -0
  102. /package/dist/cli/{chunk-8b489v1b.js.map → chunk-aafhwx74.js.map} +0 -0
  103. /package/dist/cli/{chunk-2nr29y95.js.map → chunk-b680sv30.js.map} +0 -0
  104. /package/dist/cli/{chunk-rkqae7kh.js.map → chunk-beb0z983.js.map} +0 -0
  105. /package/dist/cli/{chunk-th0pgaj5.js.map → chunk-c5bjxq8v.js.map} +0 -0
  106. /package/dist/cli/{chunk-wehv26ry.js.map → chunk-e1n41w9m.js.map} +0 -0
  107. /package/dist/cli/{chunk-frk2wdq1.js.map → chunk-etckvbrh.js.map} +0 -0
  108. /package/dist/cli/{chunk-ahc5gc9h.js.map → chunk-f260jdrn.js.map} +0 -0
  109. /package/dist/cli/{chunk-05f21r8h.js.map → chunk-fnxgtjeq.js.map} +0 -0
  110. /package/dist/cli/{chunk-vnbvhgmd.js.map → chunk-gxhcf2hs.js.map} +0 -0
  111. /package/dist/cli/{chunk-bjk964fp.js.map → chunk-h0qwdbem.js.map} +0 -0
  112. /package/dist/cli/{chunk-enk76qd5.js.map → chunk-hn3g2b89.js.map} +0 -0
  113. /package/dist/cli/{chunk-w6e455pz.js.map → chunk-j4nfgn2j.js.map} +0 -0
  114. /package/dist/cli/{chunk-p8zg3a2h.js.map → chunk-kmswjxj9.js.map} +0 -0
  115. /package/dist/cli/{chunk-xt0qvz1t.js.map → chunk-nqna8dzp.js.map} +0 -0
  116. /package/dist/cli/{chunk-dyk3r7jw.js.map → chunk-p834rkcn.js.map} +0 -0
  117. /package/dist/cli/{chunk-dpcahcrb.js.map → chunk-ppa6mg4d.js.map} +0 -0
  118. /package/dist/cli/{chunk-79bzzkx4.js.map → chunk-q1wwrxzw.js.map} +0 -0
  119. /package/dist/cli/{chunk-m9bp2hc1.js.map → chunk-qcyxkj44.js.map} +0 -0
  120. /package/dist/cli/{chunk-a3ydrqny.js.map → chunk-rtvgmg2j.js.map} +0 -0
  121. /package/dist/cli/{chunk-c69tw29j.js.map → chunk-t2h8pwy1.js.map} +0 -0
  122. /package/dist/cli/{chunk-vzy9rh6y.js.map → chunk-x60e15st.js.map} +0 -0
  123. /package/dist/cli/{chunk-mrvh4c88.js.map → chunk-x7bh6d9j.js.map} +0 -0
  124. /package/dist/cli/{chunk-7tekknev.js.map → chunk-ydqzkhjn.js.map} +0 -0
  125. /package/dist/cli/{chunk-gprwej7h.js.map → chunk-yg8ckc3g.js.map} +0 -0
@@ -9659,7 +9659,7 @@ var relatedPageLinks = (entries) => (entries || []).flatMap((entry) => {
9659
9659
  });
9660
9660
 
9661
9661
  // src/core/schema.ts
9662
- import { z as z69 } from "zod";
9662
+ import { z as z70 } from "zod";
9663
9663
 
9664
9664
  // src/ai/ask.ts
9665
9665
  import { z as z13 } from "zod";
@@ -10651,7 +10651,7 @@ var narrationProviderSchema = z47.discriminatedUnion("kind", [gatewayNarrationSc
10651
10651
  });
10652
10652
 
10653
10653
  // src/ratelimit/schema.ts
10654
- import { z as z51 } from "zod";
10654
+ import { z as z52 } from "zod";
10655
10655
 
10656
10656
  // src/ratelimit/cloudflare.ts
10657
10657
  import { z as z48 } from "zod";
@@ -10677,36 +10677,47 @@ var memory = (options = {}) => ({
10677
10677
  runtimeDeps: []
10678
10678
  });
10679
10679
 
10680
- // src/ratelimit/upstash.ts
10680
+ // src/ratelimit/unkey.ts
10681
10681
  import { z as z50 } from "zod";
10682
+ var UNKEY_MAX_WINDOW = 2592000;
10683
+ var unkeyOptionsSchema = rateLimitOptionsSchema.extend({
10684
+ namespace: z50.string().min(1).max(512).optional(),
10685
+ rootKeyEnv: z50.string().min(1).optional(),
10686
+ window: z50.number().int().positive().max(UNKEY_MAX_WINDOW).optional()
10687
+ });
10688
+ var unkeyAdapterSchema = adapterDescriptorSchema("unkey", unkeyOptionsSchema);
10689
+
10690
+ // src/ratelimit/upstash.ts
10691
+ import { z as z51 } from "zod";
10682
10692
  var upstashOptionsSchema = rateLimitOptionsSchema.extend({
10683
- tokenEnv: z50.string().min(1).optional(),
10684
- urlEnv: z50.string().min(1).optional()
10693
+ tokenEnv: z51.string().min(1).optional(),
10694
+ urlEnv: z51.string().min(1).optional()
10685
10695
  });
10686
10696
  var upstashAdapterSchema = adapterDescriptorSchema("upstash", upstashOptionsSchema);
10687
10697
 
10688
10698
  // src/ratelimit/schema.ts
10689
10699
  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.';
10690
- var rateLimitAdapterSchema = z51.discriminatedUnion("kind", [
10700
+ var rateLimitAdapterSchema = z52.discriminatedUnion("kind", [
10691
10701
  cloudflareRateLimitAdapterSchema,
10692
10702
  memoryAdapterSchema,
10693
- upstashAdapterSchema
10703
+ upstashAdapterSchema,
10704
+ unkeyAdapterSchema
10694
10705
  ]);
10695
- var rateLimitConfigSchema = z51.union([z51.literal(false), rateLimitAdapterSchema], { error: ADAPTER_HINT2 }).optional().transform((adapter) => adapter === false ? null : adapter ?? memory());
10706
+ var rateLimitConfigSchema = z52.union([z52.literal(false), rateLimitAdapterSchema], { error: ADAPTER_HINT2 }).optional().transform((adapter) => adapter === false ? null : adapter ?? memory());
10696
10707
 
10697
10708
  // src/reference/options.ts
10698
- import { z as z52 } from "zod";
10709
+ import { z as z53 } from "zod";
10699
10710
  var isBoolean = (value) => typeof value === "boolean";
10700
- var referenceSourceSchema = z52.strictObject({
10701
- includeInLlms: z52.boolean().default(true),
10702
- includeInSearch: z52.boolean().default(true),
10703
- label: z52.string().optional(),
10704
- noindex: z52.boolean().default(false),
10705
- route: z52.string().optional(),
10706
- seoDescriptionSuffix: z52.boolean().default(true),
10707
- spec: z52.string()
10711
+ var referenceSourceSchema = z53.strictObject({
10712
+ includeInLlms: z53.boolean().default(true),
10713
+ includeInSearch: z53.boolean().default(true),
10714
+ label: z53.string().optional(),
10715
+ noindex: z53.boolean().default(false),
10716
+ route: z53.string().optional(),
10717
+ seoDescriptionSuffix: z53.boolean().default(true),
10718
+ spec: z53.string()
10708
10719
  });
10709
- var overlaysSchema = z52.array(z52.string()).default([]);
10720
+ var overlaysSchema = z53.array(z53.string()).default([]);
10710
10721
  var overlaysHaveSpec = (options) => !options.overlays || options.spec !== undefined;
10711
10722
  var overlaysNeedSpecIssue = {
10712
10723
  message: "`overlays` belongs to the `spec` shorthand; with `sources`, give each source its own `overlays`.",
@@ -10715,19 +10726,19 @@ var overlaysNeedSpecIssue = {
10715
10726
  var openapiSourceSchema = referenceSourceSchema.extend({
10716
10727
  overlays: overlaysSchema
10717
10728
  });
10718
- var graphqlAuthSchema = z52.strictObject({
10719
- method: z52.enum(AUTH_METHODS),
10720
- name: z52.string().optional()
10729
+ var graphqlAuthSchema = z53.strictObject({
10730
+ method: z53.enum(AUTH_METHODS),
10731
+ name: z53.string().optional()
10721
10732
  });
10722
10733
  var graphqlSourceSchema = referenceSourceSchema.extend({
10723
10734
  auth: graphqlAuthSchema.optional(),
10724
- endpoint: z52.string().optional()
10735
+ endpoint: z53.string().optional()
10725
10736
  });
10726
- var playgroundSchema = z52.union([
10727
- z52.boolean(),
10728
- z52.strictObject({
10729
- enabled: z52.boolean().default(true),
10730
- proxy: z52.union([z52.boolean(), z52.string()]).default(false)
10737
+ var playgroundSchema = z53.union([
10738
+ z53.boolean(),
10739
+ z53.strictObject({
10740
+ enabled: z53.boolean().default(true),
10741
+ proxy: z53.union([z53.boolean(), z53.string()]).default(false)
10731
10742
  })
10732
10743
  ]).default(true).transform((value) => isBoolean(value) ? { enabled: value, proxy: false } : value);
10733
10744
  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.';
@@ -10741,10 +10752,10 @@ var rendererRemovedHint = {
10741
10752
  }
10742
10753
  };
10743
10754
  var sharedOptions2 = (defaults) => ({
10744
- codeSamples: z52.union([z52.literal(false), z52.array(z52.string())]).default(defaults.codeSamples),
10755
+ codeSamples: z53.union([z53.literal(false), z53.array(z53.string())]).default(defaults.codeSamples),
10745
10756
  playground: playgroundSchema,
10746
- route: z52.string().default(defaults.route),
10747
- spec: z52.string().optional()
10757
+ route: z53.string().default(defaults.route),
10758
+ spec: z53.string().optional()
10748
10759
  });
10749
10760
  var liftSpec = (sourceSchema) => ({
10750
10761
  overlays,
@@ -10764,60 +10775,60 @@ var missingSourcesIssue = (factory) => ({
10764
10775
  });
10765
10776
 
10766
10777
  // src/reference/schema.ts
10767
- import { z as z57 } from "zod";
10778
+ import { z as z58 } from "zod";
10768
10779
 
10769
10780
  // src/reference/asyncapi.ts
10770
- import { z as z53 } from "zod";
10771
- var asyncapiOptionsSchema = z53.strictObject({
10781
+ import { z as z54 } from "zod";
10782
+ var asyncapiOptionsSchema = z54.strictObject({
10772
10783
  ...sharedOptions2({ codeSamples: [], route: "/events" }),
10773
- expandSchemas: z53.boolean().default(false),
10774
- sources: z53.array(referenceSourceSchema).default([])
10784
+ expandSchemas: z54.boolean().default(false),
10785
+ sources: z54.array(referenceSourceSchema).default([])
10775
10786
  }, rendererRemovedHint).transform(liftSpec(referenceSourceSchema)).refine(hasSources, missingSourcesIssue("asyncapi"));
10776
10787
  var asyncapiAdapterSchema = adapterDescriptorSchema("asyncapi", asyncapiOptionsSchema);
10777
10788
 
10778
10789
  // src/reference/graphql.ts
10779
- import { z as z54 } from "zod";
10780
- var graphqlOptionsSchema = z54.strictObject({
10790
+ import { z as z55 } from "zod";
10791
+ var graphqlOptionsSchema = z55.strictObject({
10781
10792
  ...sharedOptions2({
10782
10793
  codeSamples: ["curl", "js", "python"],
10783
10794
  route: "/graphql"
10784
10795
  }),
10785
10796
  auth: graphqlAuthSchema.optional(),
10786
- endpoint: z54.string().optional(),
10787
- sources: z54.array(graphqlSourceSchema).default([])
10797
+ endpoint: z55.string().optional(),
10798
+ sources: z55.array(graphqlSourceSchema).default([])
10788
10799
  }).transform(liftSpec(graphqlSourceSchema)).refine(hasSources, missingSourcesIssue("graphql"));
10789
10800
  var graphqlAdapterSchema = adapterDescriptorSchema("graphql", graphqlOptionsSchema);
10790
10801
 
10791
10802
  // src/reference/openapi.ts
10792
- import { z as z55 } from "zod";
10793
- var openapiOptionsSchema = z55.strictObject({
10803
+ import { z as z56 } from "zod";
10804
+ var openapiOptionsSchema = z56.strictObject({
10794
10805
  ...sharedOptions2({
10795
10806
  codeSamples: ["curl", "js", "python"],
10796
10807
  route: "/reference"
10797
10808
  }),
10798
- expandSchemas: z55.boolean().default(false),
10799
- overlays: z55.array(z55.string()).optional(),
10800
- sources: z55.array(openapiSourceSchema).default([])
10809
+ expandSchemas: z56.boolean().default(false),
10810
+ overlays: z56.array(z56.string()).optional(),
10811
+ sources: z56.array(openapiSourceSchema).default([])
10801
10812
  }, rendererRemovedHint).refine(overlaysHaveSpec, overlaysNeedSpecIssue).transform(liftSpec(openapiSourceSchema)).refine(hasSources, missingSourcesIssue("openapi"));
10802
10813
  var openapiAdapterSchema = adapterDescriptorSchema("openapi", openapiOptionsSchema);
10803
10814
 
10804
10815
  // src/reference/scalar.ts
10805
- import { z as z56 } from "zod";
10816
+ import { z as z57 } from "zod";
10806
10817
  var SCALAR_RUNTIME_DEPS = ["@scalar/astro"];
10807
- var scalarSourceSchema = z56.strictObject({
10808
- label: z56.string().optional(),
10809
- noindex: z56.boolean().default(false),
10818
+ var scalarSourceSchema = z57.strictObject({
10819
+ label: z57.string().optional(),
10820
+ noindex: z57.boolean().default(false),
10810
10821
  overlays: overlaysSchema,
10811
- route: z56.string().optional(),
10812
- spec: z56.string()
10822
+ route: z57.string().optional(),
10823
+ spec: z57.string()
10813
10824
  });
10814
- var scalarOptionsSchema = z56.object({
10815
- overlays: z56.array(z56.string()).optional(),
10816
- route: z56.string().default("/reference"),
10817
- sources: z56.array(scalarSourceSchema).default([]),
10818
- spec: z56.string().optional(),
10819
- theme: z56.string().optional()
10820
- }).catchall(z56.json()).refine(overlaysHaveSpec, overlaysNeedSpecIssue).transform(({ overlays, spec, sources, ...options }) => ({
10825
+ var scalarOptionsSchema = z57.object({
10826
+ overlays: z57.array(z57.string()).optional(),
10827
+ route: z57.string().default("/reference"),
10828
+ sources: z57.array(scalarSourceSchema).default([]),
10829
+ spec: z57.string().optional(),
10830
+ theme: z57.string().optional()
10831
+ }).catchall(z57.json()).refine(overlaysHaveSpec, overlaysNeedSpecIssue).transform(({ overlays, spec, sources, ...options }) => ({
10821
10832
  ...options,
10822
10833
  sources: spec === undefined ? sources : [
10823
10834
  scalarSourceSchema.parse(overlays ? { overlays, spec } : { spec }),
@@ -10827,7 +10838,7 @@ var scalarOptionsSchema = z56.object({
10827
10838
  var scalarAdapterSchema = adapterDescriptorSchema("scalar", scalarOptionsSchema);
10828
10839
 
10829
10840
  // src/reference/schema.ts
10830
- var referenceAdapterSchema = z57.discriminatedUnion("kind", [
10841
+ var referenceAdapterSchema = z58.discriminatedUnion("kind", [
10831
10842
  asyncapiAdapterSchema,
10832
10843
  graphqlAdapterSchema,
10833
10844
  openapiAdapterSchema,
@@ -10838,7 +10849,7 @@ var referenceAdapterSchema = z57.discriminatedUnion("kind", [
10838
10849
  runtimeDeps: value.kind === "scalar" ? [...SCALAR_RUNTIME_DEPS] : []
10839
10850
  }));
10840
10851
  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".';
10841
- var referenceConfigSchema = z57.array(referenceAdapterSchema, {
10852
+ var referenceConfigSchema = z58.array(referenceAdapterSchema, {
10842
10853
  error: (issue) => issue.code === "invalid_type" ? LIST_HINT : undefined
10843
10854
  }).default([]);
10844
10855
  var REMOVED_KEYS = ["asyncapi", "graphql", "openapi"];
@@ -10855,8 +10866,8 @@ var removedReferenceKeysHint = (keys) => {
10855
10866
  };
10856
10867
 
10857
10868
  // src/search/adapters/orama.ts
10858
- import { z as z58 } from "zod";
10859
- var oramaOptionsSchema = z58.strictObject({});
10869
+ import { z as z59 } from "zod";
10870
+ var oramaOptionsSchema = z59.strictObject({});
10860
10871
  var orama = (options = {}) => ({
10861
10872
  kind: "orama",
10862
10873
  mode: "static",
@@ -10866,15 +10877,15 @@ var orama = (options = {}) => ({
10866
10877
  });
10867
10878
 
10868
10879
  // src/search/adapters/registry.ts
10869
- import { z as z65 } from "zod";
10880
+ import { z as z66 } from "zod";
10870
10881
 
10871
10882
  // src/search/adapters/algolia.ts
10872
- import { z as z59 } from "zod";
10873
- var algoliaOptionsSchema = z59.object({
10874
- apiKey: z59.string(),
10875
- appId: z59.string(),
10876
- indexName: z59.string()
10877
- }).catchall(z59.json());
10883
+ import { z as z60 } from "zod";
10884
+ var algoliaOptionsSchema = z60.object({
10885
+ apiKey: z60.string(),
10886
+ appId: z60.string(),
10887
+ indexName: z60.string()
10888
+ }).catchall(z60.json());
10878
10889
  var algolia = (options) => ({
10879
10890
  kind: "algolia",
10880
10891
  mode: "hosted",
@@ -10884,8 +10895,8 @@ var algolia = (options) => ({
10884
10895
  });
10885
10896
 
10886
10897
  // src/search/adapters/flexsearch.ts
10887
- import { z as z60 } from "zod";
10888
- var flexsearchOptionsSchema = z60.strictObject({});
10898
+ import { z as z61 } from "zod";
10899
+ var flexsearchOptionsSchema = z61.strictObject({});
10889
10900
  var flexsearch = (options = {}) => ({
10890
10901
  kind: "flexsearch",
10891
10902
  mode: "static",
@@ -10895,10 +10906,10 @@ var flexsearch = (options = {}) => ({
10895
10906
  });
10896
10907
 
10897
10908
  // src/search/adapters/mixedbread.ts
10898
- import { z as z61 } from "zod";
10899
- var mixedbreadOptionsSchema = z61.object({
10900
- storeId: z61.string()
10901
- }).catchall(z61.json());
10909
+ import { z as z62 } from "zod";
10910
+ var mixedbreadOptionsSchema = z62.object({
10911
+ storeId: z62.string()
10912
+ }).catchall(z62.json());
10902
10913
  var mixedbread = (options) => ({
10903
10914
  kind: "mixedbread",
10904
10915
  mode: "server",
@@ -10908,12 +10919,12 @@ var mixedbread = (options) => ({
10908
10919
  });
10909
10920
 
10910
10921
  // src/search/adapters/orama-cloud.ts
10911
- import { z as z62 } from "zod";
10912
- var oramaCloudOptionsSchema = z62.object({
10913
- apiKey: z62.string(),
10914
- endpoint: z62.string(),
10915
- indexId: z62.string().optional()
10916
- }).catchall(z62.json());
10922
+ import { z as z63 } from "zod";
10923
+ var oramaCloudOptionsSchema = z63.object({
10924
+ apiKey: z63.string(),
10925
+ endpoint: z63.string(),
10926
+ indexId: z63.string().optional()
10927
+ }).catchall(z63.json());
10917
10928
  var oramaCloud = (options) => ({
10918
10929
  kind: "orama-cloud",
10919
10930
  mode: "hosted",
@@ -10923,8 +10934,8 @@ var oramaCloud = (options) => ({
10923
10934
  });
10924
10935
 
10925
10936
  // src/search/adapters/pagefind.ts
10926
- import { z as z63 } from "zod";
10927
- var pagefindOptionsSchema = z63.strictObject({});
10937
+ import { z as z64 } from "zod";
10938
+ var pagefindOptionsSchema = z64.strictObject({});
10928
10939
  var pagefind = (options = {}) => ({
10929
10940
  kind: "pagefind",
10930
10941
  mode: "pagefind",
@@ -10934,15 +10945,15 @@ var pagefind = (options = {}) => ({
10934
10945
  });
10935
10946
 
10936
10947
  // src/search/adapters/typesense.ts
10937
- import { z as z64 } from "zod";
10938
- var typesenseOptionsSchema = z64.object({
10939
- apiKey: z64.string(),
10940
- collection: z64.string(),
10941
- host: z64.string(),
10942
- locale: z64.string().optional(),
10943
- port: z64.number().int().positive().optional(),
10944
- protocol: z64.enum(["http", "https"]).optional()
10945
- }).catchall(z64.json());
10948
+ import { z as z65 } from "zod";
10949
+ var typesenseOptionsSchema = z65.object({
10950
+ apiKey: z65.string(),
10951
+ collection: z65.string(),
10952
+ host: z65.string(),
10953
+ locale: z65.string().optional(),
10954
+ port: z65.number().int().positive().optional(),
10955
+ protocol: z65.enum(["http", "https"]).optional()
10956
+ }).catchall(z65.json());
10946
10957
  var typesense = (options) => ({
10947
10958
  kind: "typesense",
10948
10959
  mode: "hosted",
@@ -10959,7 +10970,7 @@ var NONE_SEARCH_ADAPTER = {
10959
10970
  requiredSecrets: [],
10960
10971
  runtimeDeps: []
10961
10972
  };
10962
- var descriptor = (kind, mode, options) => adapterDescriptorSchema(kind, options).extend({ mode: z65.literal(mode) });
10973
+ var descriptor = (kind, mode, options) => adapterDescriptorSchema(kind, options).extend({ mode: z66.literal(mode) });
10963
10974
  var adapterVariants = [
10964
10975
  descriptor("algolia", "hosted", algoliaOptionsSchema),
10965
10976
  descriptor("flexsearch", "static", flexsearchOptionsSchema),
@@ -10969,9 +10980,9 @@ var adapterVariants = [
10969
10980
  descriptor("pagefind", "pagefind", pagefindOptionsSchema),
10970
10981
  descriptor("typesense", "hosted", typesenseOptionsSchema)
10971
10982
  ];
10972
- var resolvedSearchAdapterSchema = z65.discriminatedUnion("kind", [
10983
+ var resolvedSearchAdapterSchema = z66.discriminatedUnion("kind", [
10973
10984
  ...adapterVariants,
10974
- descriptor("none", "none", z65.strictObject({}))
10985
+ descriptor("none", "none", z66.strictObject({}))
10975
10986
  ]).transform((value) => {
10976
10987
  switch (value.kind) {
10977
10988
  case "algolia": {
@@ -11041,11 +11052,11 @@ var normalizeXHandle = (value) => {
11041
11052
  };
11042
11053
 
11043
11054
  // src/sources/registry.ts
11044
- import { z as z67 } from "zod";
11055
+ import { z as z68 } from "zod";
11045
11056
 
11046
11057
  // src/sources/custom.ts
11047
- import { z as z66 } from "zod";
11048
- var customOptionsSchema = z66.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)" });
11058
+ import { z as z67 } from "zod";
11059
+ var customOptionsSchema = z67.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)" });
11049
11060
  var customAdapterSchema = adapterDescriptorSchema("custom", customOptionsSchema);
11050
11061
  var custom = (source) => ({
11051
11062
  kind: "custom",
@@ -11067,7 +11078,7 @@ var adapterVariants2 = [
11067
11078
  obsidianAdapterSchema,
11068
11079
  customAdapterSchema
11069
11080
  ];
11070
- var sourceAdapterUnion = z67.discriminatedUnion("kind", adapterVariants2);
11081
+ var sourceAdapterUnion = z68.discriminatedUnion("kind", adapterVariants2);
11071
11082
  var FACTORY_FOR_TYPE = new Map([
11072
11083
  ["custom", "custom"],
11073
11084
  ["filesystem", "filesystem"],
@@ -11080,7 +11091,7 @@ var FACTORY_FOR_TYPE = new Map([
11080
11091
  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).';
11081
11092
  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".`;
11082
11093
  var isObjectLike = (value) => typeof value === "object" && value !== null;
11083
- var legacyEntrySchema = z67.looseObject({ type: z67.string() });
11094
+ var legacyEntrySchema = z68.looseObject({ type: z68.string() });
11084
11095
  var entryHint = (type) => {
11085
11096
  if (type === undefined) {
11086
11097
  return FACTORIES_HINT;
@@ -11127,14 +11138,14 @@ var resolvedSourceAdapterSchema = sourceAdapterUnion.transform((value) => {
11127
11138
  }
11128
11139
  return custom(value.options);
11129
11140
  });
11130
- var sourceEntrySchema = z67.custom((value) => isObjectLike(value) && ("kind" in value), {
11141
+ var sourceEntrySchema = z68.custom((value) => isObjectLike(value) && ("kind" in value), {
11131
11142
  abort: false,
11132
11143
  error: (issue) => {
11133
11144
  const legacy = legacyEntrySchema.safeParse(issue.input);
11134
11145
  return entryHint(legacy.success ? legacy.data.type : undefined);
11135
11146
  }
11136
11147
  }).pipe(resolvedSourceAdapterSchema);
11137
- var contentSourcesSchema = z67.array(sourceEntrySchema, {
11148
+ var contentSourcesSchema = z68.array(sourceEntrySchema, {
11138
11149
  error: (issue) => issue.code === "invalid_type" ? ARRAY_HINT2 : undefined
11139
11150
  });
11140
11151
 
@@ -11532,188 +11543,188 @@ var apiUrl = (github) => {
11532
11543
  };
11533
11544
 
11534
11545
  // src/core/i18n-ui.ts
11535
- import { z as z68 } from "zod";
11536
- var uiStringsObject = z68.object({
11537
- actions: z68.object({
11538
- addToCursor: z68.string().default("Add to Cursor"),
11539
- addToVscode: z68.string().default("Add to VS Code"),
11540
- askAboutCode: z68.string().default("Ask about this code"),
11541
- connectMcp: z68.string().default("Connect to MCP"),
11542
- copied: z68.string().default("Copied!"),
11543
- copyClaudeCode: z68.string().default("Copy Claude Code command"),
11544
- copyCode: z68.string().default("Copy code"),
11545
- copyCodex: z68.string().default("Copy Codex command"),
11546
- copyFailed: z68.string().default("Copy failed"),
11547
- copyMarkdown: z68.string().default("Copy as Markdown"),
11548
- copyServerUrl: z68.string().default("Copy server URL"),
11549
- edit: z68.string().default("Edit on GitHub"),
11550
- export: z68.string().default("Export"),
11551
- exportEpub: z68.string().default("Export to EPUB"),
11552
- exportPdf: z68.string().default("Export to PDF"),
11553
- generating: z68.string().default("Generating…"),
11554
- openIn: z68.string().default("Open in {name}"),
11555
- openInChat: z68.string().default("Open in chat"),
11556
- openInChatPrompt: z68.string().default("Read {url} so I can ask you questions about this page."),
11557
- scrollToTop: z68.string().default("Scroll to top")
11546
+ import { z as z69 } from "zod";
11547
+ var uiStringsObject = z69.object({
11548
+ actions: z69.object({
11549
+ addToCursor: z69.string().default("Add to Cursor"),
11550
+ addToVscode: z69.string().default("Add to VS Code"),
11551
+ askAboutCode: z69.string().default("Ask about this code"),
11552
+ connectMcp: z69.string().default("Connect to MCP"),
11553
+ copied: z69.string().default("Copied!"),
11554
+ copyClaudeCode: z69.string().default("Copy Claude Code command"),
11555
+ copyCode: z69.string().default("Copy code"),
11556
+ copyCodex: z69.string().default("Copy Codex command"),
11557
+ copyFailed: z69.string().default("Copy failed"),
11558
+ copyMarkdown: z69.string().default("Copy as Markdown"),
11559
+ copyServerUrl: z69.string().default("Copy server URL"),
11560
+ edit: z69.string().default("Edit on GitHub"),
11561
+ export: z69.string().default("Export"),
11562
+ exportEpub: z69.string().default("Export to EPUB"),
11563
+ exportPdf: z69.string().default("Export to PDF"),
11564
+ generating: z69.string().default("Generating…"),
11565
+ openIn: z69.string().default("Open in {name}"),
11566
+ openInChat: z69.string().default("Open in chat"),
11567
+ openInChatPrompt: z69.string().default("Read {url} so I can ask you questions about this page."),
11568
+ scrollToTop: z69.string().default("Scroll to top")
11558
11569
  }).prefault({}),
11559
- assistant: z68.object({
11560
- ai: z68.string().default("AI"),
11561
- clear: z68.string().default("Clear conversation"),
11562
- close: z68.string().default("Close"),
11563
- copy: z68.string().default("Copy conversation"),
11564
- empty: z68.string().default("Ask a question about the docs."),
11565
- error: z68.string().default("Sorry, something went wrong."),
11566
- explainCode: z68.string().default("Explain this code."),
11567
- label: z68.string().default("Ask a question"),
11568
- open: z68.string().default("Open assistant"),
11569
- placeholder: z68.string().default("Ask a question…"),
11570
- rateLimited: z68.string().default("You've asked a lot of questions. Try again in a few minutes."),
11571
- removeCode: z68.string().default("Remove code"),
11572
- send: z68.string().default("Send"),
11573
- support: z68.string().default("Contact support"),
11574
- supportSubject: z68.string().default("Question from the docs"),
11575
- tip: z68.string().default("Tip: You can open and close chat with"),
11576
- title: z68.string().default("Assistant"),
11577
- verifyFailed: z68.string().default("We couldn't check that you're human. Try again."),
11578
- you: z68.string().default("You")
11570
+ assistant: z69.object({
11571
+ ai: z69.string().default("AI"),
11572
+ clear: z69.string().default("Clear conversation"),
11573
+ close: z69.string().default("Close"),
11574
+ copy: z69.string().default("Copy conversation"),
11575
+ empty: z69.string().default("Ask a question about the docs."),
11576
+ error: z69.string().default("Sorry, something went wrong."),
11577
+ explainCode: z69.string().default("Explain this code."),
11578
+ label: z69.string().default("Ask a question"),
11579
+ open: z69.string().default("Open assistant"),
11580
+ placeholder: z69.string().default("Ask a question…"),
11581
+ rateLimited: z69.string().default("You've asked a lot of questions. Try again in a few minutes."),
11582
+ removeCode: z69.string().default("Remove code"),
11583
+ send: z69.string().default("Send"),
11584
+ support: z69.string().default("Contact support"),
11585
+ supportSubject: z69.string().default("Question from the docs"),
11586
+ tip: z69.string().default("Tip: You can open and close chat with"),
11587
+ title: z69.string().default("Assistant"),
11588
+ verifyFailed: z69.string().default("We couldn't check that you're human. Try again."),
11589
+ you: z69.string().default("You")
11579
11590
  }).prefault({}),
11580
- banner: z68.object({
11581
- dismiss: z68.string().default("Dismiss announcement")
11591
+ banner: z69.object({
11592
+ dismiss: z69.string().default("Dismiss announcement")
11582
11593
  }).prefault({}),
11583
- changelog: z68.object({
11584
- description: z68.string().default("Product updates, new features, and fixes from every release."),
11585
- empty: z68.string().default("No changelog entries yet."),
11586
- title: z68.string().default("Changelog")
11594
+ changelog: z69.object({
11595
+ description: z69.string().default("Product updates, new features, and fixes from every release."),
11596
+ empty: z69.string().default("No changelog entries yet."),
11597
+ title: z69.string().default("Changelog")
11587
11598
  }).prefault({}),
11588
- consent: z68.object({
11589
- accept: z68.string().default("Accept"),
11590
- decline: z68.string().default("Decline"),
11591
- label: z68.string().default("Cookie consent"),
11592
- message: z68.string().default("We'd like to use cookies to understand how these docs are used."),
11593
- policy: z68.string().default("Privacy policy"),
11594
- settings: z68.string().default("Cookie settings")
11599
+ consent: z69.object({
11600
+ accept: z69.string().default("Accept"),
11601
+ decline: z69.string().default("Decline"),
11602
+ label: z69.string().default("Cookie consent"),
11603
+ message: z69.string().default("We'd like to use cookies to understand how these docs are used."),
11604
+ policy: z69.string().default("Privacy policy"),
11605
+ settings: z69.string().default("Cookie settings")
11595
11606
  }).prefault({}),
11596
- content: z68.object({
11597
- code: z68.string().default("Code"),
11598
- copyColor: z68.string().default("Copy {name} color {value}"),
11599
- copyPrompt: z68.string().default("Copy prompt"),
11600
- default: z68.string().default("Default"),
11601
- diagramError: z68.string().default("Could not render this diagram."),
11602
- forks: z68.string().default("Forks"),
11603
- preview: z68.string().default("Preview"),
11604
- prop: z68.string().default("Prop"),
11605
- selectTab: z68.string().default("Select tab"),
11606
- selectView: z68.string().default("Select view"),
11607
- showLess: z68.string().default("Show less"),
11608
- showMore: z68.string().default("Show more"),
11609
- stars: z68.string().default("Stars"),
11610
- tab: z68.string().default("Tab {n}"),
11611
- type: z68.string().default("Type"),
11612
- update: z68.string().default("Update")
11607
+ content: z69.object({
11608
+ code: z69.string().default("Code"),
11609
+ copyColor: z69.string().default("Copy {name} color {value}"),
11610
+ copyPrompt: z69.string().default("Copy prompt"),
11611
+ default: z69.string().default("Default"),
11612
+ diagramError: z69.string().default("Could not render this diagram."),
11613
+ forks: z69.string().default("Forks"),
11614
+ preview: z69.string().default("Preview"),
11615
+ prop: z69.string().default("Prop"),
11616
+ selectTab: z69.string().default("Select tab"),
11617
+ selectView: z69.string().default("Select view"),
11618
+ showLess: z69.string().default("Show less"),
11619
+ showMore: z69.string().default("Show more"),
11620
+ stars: z69.string().default("Stars"),
11621
+ tab: z69.string().default("Tab {n}"),
11622
+ type: z69.string().default("Type"),
11623
+ update: z69.string().default("Update")
11613
11624
  }).prefault({}),
11614
- feedback: z68.object({
11615
- comment: z68.string().default("Tell us more (optional)"),
11616
- no: z68.string().default("No"),
11617
- question: z68.string().default("Was this page helpful?"),
11618
- send: z68.string().default("Send"),
11619
- thanks: z68.string().default("Thanks for your feedback!"),
11620
- yes: z68.string().default("Yes")
11625
+ feedback: z69.object({
11626
+ comment: z69.string().default("Tell us more (optional)"),
11627
+ no: z69.string().default("No"),
11628
+ question: z69.string().default("Was this page helpful?"),
11629
+ send: z69.string().default("Send"),
11630
+ thanks: z69.string().default("Thanks for your feedback!"),
11631
+ yes: z69.string().default("Yes")
11621
11632
  }).prefault({}),
11622
- languageSwitcher: z68.object({
11623
- label: z68.string().default("Language"),
11624
- untranslated: z68.string().default("Not translated")
11633
+ languageSwitcher: z69.object({
11634
+ label: z69.string().default("Language"),
11635
+ untranslated: z69.string().default("Not translated")
11625
11636
  }).prefault({}),
11626
- narration: z68.object({
11627
- cueDanger: z68.string().default("Danger."),
11628
- cueInfo: z68.string().default("Info."),
11629
- cueNote: z68.string().default("Note."),
11630
- cueSection: z68.string().default("Expandable section."),
11631
- cueStep: z68.string().default("Step {n}."),
11632
- cueSuccess: z68.string().default("Success."),
11633
- cueTab: z68.string().default("{title} tab."),
11634
- cueTip: z68.string().default("Tip."),
11635
- cueWarning: z68.string().default("Warning."),
11636
- error: z68.string().default("The narration couldn't load."),
11637
- follow: z68.string().default("Follow along"),
11638
- label: z68.string().default("Listen to this page"),
11639
- minutes: z68.string().default("{n} min"),
11640
- next: z68.string().default("Next sentence"),
11641
- pause: z68.string().default("Pause"),
11642
- play: z68.string().default("Play"),
11643
- previous: z68.string().default("Previous sentence"),
11644
- progress: z68.string().default("Narration progress"),
11645
- speed: z68.string().default("Playback speed"),
11646
- stop: z68.string().default("Stop listening")
11637
+ narration: z69.object({
11638
+ cueDanger: z69.string().default("Danger."),
11639
+ cueInfo: z69.string().default("Info."),
11640
+ cueNote: z69.string().default("Note."),
11641
+ cueSection: z69.string().default("Expandable section."),
11642
+ cueStep: z69.string().default("Step {n}."),
11643
+ cueSuccess: z69.string().default("Success."),
11644
+ cueTab: z69.string().default("{title} tab."),
11645
+ cueTip: z69.string().default("Tip."),
11646
+ cueWarning: z69.string().default("Warning."),
11647
+ error: z69.string().default("The narration couldn't load."),
11648
+ follow: z69.string().default("Follow along"),
11649
+ label: z69.string().default("Listen to this page"),
11650
+ minutes: z69.string().default("{n} min"),
11651
+ next: z69.string().default("Next sentence"),
11652
+ pause: z69.string().default("Pause"),
11653
+ play: z69.string().default("Play"),
11654
+ previous: z69.string().default("Previous sentence"),
11655
+ progress: z69.string().default("Narration progress"),
11656
+ speed: z69.string().default("Playback speed"),
11657
+ stop: z69.string().default("Stop listening")
11647
11658
  }).prefault({}),
11648
- nav: z68.object({
11649
- back: z68.string().default("Back"),
11650
- breadcrumb: z68.string().default("Breadcrumb"),
11651
- closeNavigation: z68.string().default("Close navigation"),
11652
- deprecated: z68.string().default("deprecated"),
11653
- featured: z68.string().default("Featured"),
11654
- githubRepository: z68.string().default("GitHub repository"),
11655
- navigation: z68.string().default("Navigation"),
11656
- opensInNewTab: z68.string().default("Opens in a new tab"),
11657
- primary: z68.string().default("Primary"),
11658
- sections: z68.string().default("Sections"),
11659
- toggleNavigation: z68.string().default("Toggle navigation"),
11660
- toggleTheme: z68.string().default("Toggle theme")
11659
+ nav: z69.object({
11660
+ back: z69.string().default("Back"),
11661
+ breadcrumb: z69.string().default("Breadcrumb"),
11662
+ closeNavigation: z69.string().default("Close navigation"),
11663
+ deprecated: z69.string().default("deprecated"),
11664
+ featured: z69.string().default("Featured"),
11665
+ githubRepository: z69.string().default("GitHub repository"),
11666
+ navigation: z69.string().default("Navigation"),
11667
+ opensInNewTab: z69.string().default("Opens in a new tab"),
11668
+ primary: z69.string().default("Primary"),
11669
+ sections: z69.string().default("Sections"),
11670
+ toggleNavigation: z69.string().default("Toggle navigation"),
11671
+ toggleTheme: z69.string().default("Toggle theme")
11661
11672
  }).prefault({}),
11662
- notFound: z68.object({
11663
- api: z68.string().default("JSON API description (openapi.json)"),
11664
- description: z68.string().default("We couldn't find the page you're looking for."),
11665
- home: z68.string().default("Back to home"),
11666
- llms: z68.string().default("Docs index for AI agents (llms.txt)"),
11667
- sitemap: z68.string().default("Sitemap"),
11668
- suggestions: z68.string().default("Where to look next"),
11669
- title: z68.string().default("Page not found")
11673
+ notFound: z69.object({
11674
+ api: z69.string().default("JSON API description (openapi.json)"),
11675
+ description: z69.string().default("We couldn't find the page you're looking for."),
11676
+ home: z69.string().default("Back to home"),
11677
+ llms: z69.string().default("Docs index for AI agents (llms.txt)"),
11678
+ sitemap: z69.string().default("Sitemap"),
11679
+ suggestions: z69.string().default("Where to look next"),
11680
+ title: z69.string().default("Page not found")
11670
11681
  }).prefault({}),
11671
- page: z68.object({
11672
- lastUpdated: z68.string().default("Last updated on"),
11673
- next: z68.string().default("Next"),
11674
- pagination: z68.string().default("Pagination"),
11675
- previous: z68.string().default("Previous"),
11676
- related: z68.string().default("Related pages"),
11677
- skipToContent: z68.string().default("Skip to content")
11682
+ page: z69.object({
11683
+ lastUpdated: z69.string().default("Last updated on"),
11684
+ next: z69.string().default("Next"),
11685
+ pagination: z69.string().default("Pagination"),
11686
+ previous: z69.string().default("Previous"),
11687
+ related: z69.string().default("Related pages"),
11688
+ skipToContent: z69.string().default("Skip to content")
11678
11689
  }).prefault({}),
11679
- search: z68.object({
11680
- all: z68.string().default("All"),
11681
- allLanguages: z68.string().default("All languages"),
11682
- allVersions: z68.string().default("All versions"),
11683
- assistant: z68.string().default("Assistant"),
11684
- assistantHint: z68.string().default("Get an instant answer from AI"),
11685
- button: z68.string().default("Search"),
11686
- devOnly: z68.string().default("Search is available in the production build."),
11687
- docs: z68.string().default("Docs"),
11688
- error: z68.string().default("Something went wrong. Please try again."),
11689
- label: z68.string().default("Search docs"),
11690
- latest: z68.string().default("latest"),
11691
- navigate: z68.string().default("navigate"),
11692
- noResults: z68.string().default("No results found."),
11693
- open: z68.string().default("open"),
11694
- placeholder: z68.string().default("Search documentation…"),
11695
- popular: z68.string().default("Popular"),
11696
- preview: z68.string().default("preview"),
11697
- results: z68.string().default("Results")
11690
+ search: z69.object({
11691
+ all: z69.string().default("All"),
11692
+ allLanguages: z69.string().default("All languages"),
11693
+ allVersions: z69.string().default("All versions"),
11694
+ assistant: z69.string().default("Assistant"),
11695
+ assistantHint: z69.string().default("Get an instant answer from AI"),
11696
+ button: z69.string().default("Search"),
11697
+ devOnly: z69.string().default("Search is available in the production build."),
11698
+ docs: z69.string().default("Docs"),
11699
+ error: z69.string().default("Something went wrong. Please try again."),
11700
+ label: z69.string().default("Search docs"),
11701
+ latest: z69.string().default("latest"),
11702
+ navigate: z69.string().default("navigate"),
11703
+ noResults: z69.string().default("No results found."),
11704
+ open: z69.string().default("open"),
11705
+ placeholder: z69.string().default("Search documentation…"),
11706
+ popular: z69.string().default("Popular"),
11707
+ preview: z69.string().default("preview"),
11708
+ results: z69.string().default("Results")
11698
11709
  }).prefault({}),
11699
- toc: z68.object({
11700
- title: z68.string().default("On this page")
11710
+ toc: z69.object({
11711
+ title: z69.string().default("On this page")
11701
11712
  }).prefault({}),
11702
- versions: z68.object({
11703
- latest: z68.string().default("Go to latest"),
11704
- notice: z68.string().default("You're viewing documentation for {version}. It may be out of date."),
11705
- switcher: z68.string().default("Version")
11713
+ versions: z69.object({
11714
+ latest: z69.string().default("Go to latest"),
11715
+ notice: z69.string().default("You're viewing documentation for {version}. It may be out of date."),
11716
+ switcher: z69.string().default("Version")
11706
11717
  }).prefault({})
11707
11718
  });
11708
11719
  var uiStringsSchema = uiStringsObject.prefault({});
11709
11720
  var EN_UI = uiStringsObject.parse({});
11710
- var uiStringsOverrideSchema = z68.record(z68.string(), z68.record(z68.string(), z68.string()));
11721
+ var uiStringsOverrideSchema = z69.record(z69.string(), z69.record(z69.string(), z69.string()));
11711
11722
  var RENAMED_UI_KEYS = new Map([
11712
11723
  ["ask", "assistant"],
11713
11724
  ["search.askAi", "search.assistant"],
11714
11725
  ["search.askAiHint", "search.assistantHint"]
11715
11726
  ]);
11716
- var uiLocaleOverridesSchema = z68.record(z68.string(), uiStringsOverrideSchema).superRefine((value, ctx) => {
11727
+ var uiLocaleOverridesSchema = z69.record(z69.string(), uiStringsOverrideSchema).superRefine((value, ctx) => {
11717
11728
  for (const [locale, override] of Object.entries(value)) {
11718
11729
  const keys = Object.entries(override).flatMap(([group, strings]) => [
11719
11730
  group,
@@ -11723,7 +11734,7 @@ var uiLocaleOverridesSchema = z68.record(z68.string(), uiStringsOverrideSchema).
11723
11734
  const renamed = RENAMED_UI_KEYS.get(key);
11724
11735
  if (renamed) {
11725
11736
  ctx.addIssue({
11726
- code: z68.ZodIssueCode.custom,
11737
+ code: z69.ZodIssueCode.custom,
11727
11738
  message: `i18n.ui.${locale}.${key} was renamed to i18n.ui.${locale}.${renamed}.`,
11728
11739
  path: [locale, ...key.split(".")]
11729
11740
  });
@@ -11764,6 +11775,10 @@ var resolveUIStrings = (locale, options) => {
11764
11775
  return dict;
11765
11776
  };
11766
11777
 
11778
+ // src/core/mcp-clients.ts
11779
+ var mcpClients = ["claude-code", "codex", "cursor", "vscode"];
11780
+ var isBuiltInMcpClient = (client) => typeof client === "string";
11781
+
11767
11782
  // src/core/open-in-chat.ts
11768
11783
  var openInChatProviders = [
11769
11784
  "v0",
@@ -11826,11 +11841,11 @@ var undefinedVariables = (text, variables) => {
11826
11841
  };
11827
11842
 
11828
11843
  // src/core/schema.ts
11829
- var httpUrlSchema = z69.url({ protocol: /^https?$/u });
11844
+ var httpUrlSchema = z70.url({ protocol: /^https?$/u });
11830
11845
  var isString3 = (value) => typeof value === "string";
11831
11846
  var isBoolean2 = (value) => typeof value === "boolean";
11832
11847
  var isObjectLike2 = (value) => typeof value === "object" && value !== null;
11833
- var iconName = z69.string().min(1);
11848
+ var iconName = z70.string().min(1);
11834
11849
  var removedKeysHint = (hints) => ({
11835
11850
  error: (issue) => {
11836
11851
  if (issue.code !== "unrecognized_keys") {
@@ -11847,78 +11862,78 @@ var removedKeysHint = (hints) => ({
11847
11862
  return messages.join(" ");
11848
11863
  }
11849
11864
  });
11850
- var hydrationMode = z69.enum(["load", "idle", "visible", "media", "only"]);
11851
- var dateSchema = z69.union([z69.string(), z69.date()]).transform((value) => value instanceof Date ? value.toISOString() : value);
11852
- var sidebarDisplaySchema = z69.enum(["flat", "group", "page"]);
11853
- var directoryModeSchema = z69.enum(["accordion", "card", "none"]);
11854
- var sidebarMetaSchema = z69.strictObject({
11855
- badge: z69.string().optional(),
11865
+ var hydrationMode = z70.enum(["load", "idle", "visible", "media", "only"]);
11866
+ var dateSchema = z70.union([z70.string(), z70.date()]).transform((value) => value instanceof Date ? value.toISOString() : value);
11867
+ var sidebarDisplaySchema = z70.enum(["flat", "group", "page"]);
11868
+ var directoryModeSchema = z70.enum(["accordion", "card", "none"]);
11869
+ var sidebarMetaSchema = z70.strictObject({
11870
+ badge: z70.string().optional(),
11856
11871
  display: sidebarDisplaySchema.optional(),
11857
- hidden: z69.boolean().default(false),
11872
+ hidden: z70.boolean().default(false),
11858
11873
  icon: iconName.optional(),
11859
- label: z69.string().optional(),
11860
- order: z69.number().optional()
11874
+ label: z70.string().optional(),
11875
+ order: z70.number().optional()
11861
11876
  });
11862
- var xHandleSchema = z69.string().transform(normalizeXHandle).optional();
11863
- var seoMetaSchema = z69.strictObject({
11864
- canonical: z69.url().optional(),
11865
- description: z69.string().optional(),
11866
- image: z69.string().optional(),
11867
- noindex: z69.boolean().default(false),
11868
- title: z69.string().optional(),
11869
- x: z69.strictObject({ creator: xHandleSchema }).optional()
11877
+ var xHandleSchema = z70.string().transform(normalizeXHandle).optional();
11878
+ var seoMetaSchema = z70.strictObject({
11879
+ canonical: z70.url().optional(),
11880
+ description: z70.string().optional(),
11881
+ image: z70.string().optional(),
11882
+ noindex: z70.boolean().default(false),
11883
+ title: z70.string().optional(),
11884
+ x: z70.strictObject({ creator: xHandleSchema }).optional()
11870
11885
  });
11871
- var searchMetaSchema = z69.strictObject({
11872
- boost: z69.number().positive().optional(),
11873
- exclude: z69.boolean().default(false),
11874
- keywords: z69.array(z69.string()).optional(),
11875
- tags: z69.array(z69.string()).optional()
11886
+ var searchMetaSchema = z70.strictObject({
11887
+ boost: z70.number().positive().optional(),
11888
+ exclude: z70.boolean().default(false),
11889
+ keywords: z70.array(z70.string()).optional(),
11890
+ tags: z70.array(z70.string()).optional()
11876
11891
  });
11877
- var aiMetaSchema = z69.strictObject({
11878
- exclude: z69.boolean().default(false)
11892
+ var aiMetaSchema = z70.strictObject({
11893
+ exclude: z70.boolean().default(false)
11879
11894
  });
11880
- var changelogMetaSchema = z69.strictObject({
11881
- category: z69.string().optional(),
11895
+ var changelogMetaSchema = z70.strictObject({
11896
+ category: z70.string().optional(),
11882
11897
  date: dateSchema.optional(),
11883
- version: z69.string().optional()
11898
+ version: z70.string().optional()
11884
11899
  });
11885
- var authorSchema = z69.union([
11886
- z69.string(),
11887
- z69.object({
11888
- avatar: z69.string().optional(),
11889
- image: z69.string().optional(),
11890
- name: z69.string(),
11891
- url: z69.string().optional()
11892
- }).catchall(z69.unknown())
11900
+ var authorSchema = z70.union([
11901
+ z70.string(),
11902
+ z70.object({
11903
+ avatar: z70.string().optional(),
11904
+ image: z70.string().optional(),
11905
+ name: z70.string(),
11906
+ url: z70.string().optional()
11907
+ }).catchall(z70.unknown())
11893
11908
  ]);
11894
- var relatedLinkSchema = z69.string().refine((link) => link.startsWith("/") || isExternalUrl(link), {
11909
+ var relatedLinkSchema = z70.string().refine((link) => link.startsWith("/") || isExternalUrl(link), {
11895
11910
  message: 'A related link is a root-relative path ("/guides/setup") or an absolute URL.'
11896
11911
  });
11897
- var pageMetaBaseSchema = z69.strictObject({
11912
+ var pageMetaBaseSchema = z70.strictObject({
11898
11913
  ai: aiMetaSchema.prefault({}),
11899
- api: z69.string().refine((value) => API_ENDPOINT.test(value.trim()), {
11914
+ api: z70.string().refine((value) => API_ENDPOINT.test(value.trim()), {
11900
11915
  message: 'api takes an HTTP method and a path or URL, like "POST /v1/users" or "GET https://api.acme.com/v1/users/{id}".'
11901
11916
  }).optional(),
11902
- authMethod: z69.enum(AUTH_METHODS).optional(),
11903
- authors: z69.union([authorSchema, z69.array(authorSchema)]).optional(),
11917
+ authMethod: z70.enum(AUTH_METHODS).optional(),
11918
+ authors: z70.union([authorSchema, z70.array(authorSchema)]).optional(),
11904
11919
  changelog: changelogMetaSchema.optional(),
11905
11920
  date: dateSchema.optional(),
11906
- deprecated: z69.boolean().default(false),
11907
- description: z69.string().optional(),
11908
- draft: z69.boolean().default(false),
11909
- hidden: z69.boolean().default(false),
11921
+ deprecated: z70.boolean().default(false),
11922
+ description: z70.string().optional(),
11923
+ draft: z70.boolean().default(false),
11924
+ hidden: z70.boolean().default(false),
11910
11925
  icon: iconName.optional(),
11911
11926
  lastModified: dateSchema.optional(),
11912
- mode: z69.enum(PAGE_MODES).optional(),
11913
- narration: z69.boolean().default(true),
11914
- noindex: z69.boolean().default(false),
11915
- pagination: z69.boolean().default(true),
11916
- playground: z69.enum(PLAYGROUND_MODES).optional(),
11917
- related: z69.union([
11918
- z69.literal(false),
11919
- z69.array(z69.union([
11927
+ mode: z70.enum(PAGE_MODES).optional(),
11928
+ narration: z70.boolean().default(true),
11929
+ noindex: z70.boolean().default(false),
11930
+ pagination: z70.boolean().default(true),
11931
+ playground: z70.enum(PLAYGROUND_MODES).optional(),
11932
+ related: z70.union([
11933
+ z70.literal(false),
11934
+ z70.array(z70.union([
11920
11935
  relatedLinkSchema,
11921
- z69.record(z69.string().min(1), relatedLinkSchema).refine((entry) => Object.keys(entry).length === 1, {
11936
+ z70.record(z70.string().min(1), relatedLinkSchema).refine((entry) => Object.keys(entry).length === 1, {
11922
11937
  message: 'A titled related entry has one title and one link: { "Title": "/path" }.'
11923
11938
  })
11924
11939
  ])).max(MAX_RELATED)
@@ -11926,9 +11941,9 @@ var pageMetaBaseSchema = z69.strictObject({
11926
11941
  search: searchMetaSchema.prefault({}),
11927
11942
  seo: seoMetaSchema.prefault({}),
11928
11943
  sidebar: sidebarMetaSchema.prefault({}),
11929
- slug: z69.string().optional(),
11930
- title: z69.string().optional(),
11931
- type: z69.string().optional()
11944
+ slug: z70.string().optional(),
11945
+ title: z70.string().optional(),
11946
+ type: z70.string().optional()
11932
11947
  });
11933
11948
  var foldShorthands = (meta) => ({
11934
11949
  ...meta,
@@ -11939,88 +11954,89 @@ var pageMetaSchema = pageMetaBaseSchema.transform(foldShorthands);
11939
11954
  var EMPTY_PAGE_META = pageMetaBaseSchema.parse({});
11940
11955
  var pageCollectionSchema = pageMetaBaseSchema.loose().transform(foldShorthands).catch(() => EMPTY_PAGE_META);
11941
11956
  var BUILT_IN_PAGE_META_KEYS = new Set(pageMetaBaseSchema.keyof().options);
11942
- var customKeySchemaRecord = (where) => z69.record(z69.string(), z69.custom(isStandardSchema, {
11957
+ var customKeySchemaRecord = (where) => z70.record(z70.string(), z70.custom(isStandardSchema, {
11943
11958
  message: "Expected a Standard Schema (e.g. a Zod schema — any Zod version works)."
11944
11959
  })).default({}).superRefine((value, ctx) => {
11945
11960
  for (const key of Object.keys(value)) {
11946
11961
  if (BUILT_IN_PAGE_META_KEYS.has(key)) {
11947
11962
  ctx.addIssue({
11948
- code: z69.ZodIssueCode.custom,
11963
+ code: z70.ZodIssueCode.custom,
11949
11964
  message: `"${key}" is a built-in frontmatter field and cannot be redeclared via ${where}.`,
11950
11965
  path: [key]
11951
11966
  });
11952
11967
  }
11953
11968
  }
11954
11969
  });
11955
- var folderMetaSchema = z69.strictObject({
11956
- collapsed: z69.boolean().optional(),
11970
+ var folderMetaSchema = z70.strictObject({
11971
+ collapsed: z70.boolean().optional(),
11957
11972
  directory: directoryModeSchema.optional(),
11958
11973
  display: sidebarDisplaySchema.optional(),
11959
11974
  icon: iconName.optional(),
11960
- order: z69.number().optional(),
11961
- pages: z69.array(z69.string()).optional(),
11962
- title: z69.string().optional()
11975
+ order: z70.number().optional(),
11976
+ pages: z70.array(z70.string()).optional(),
11977
+ title: z70.string().optional()
11963
11978
  });
11964
- var logoImageSchema = z69.union([
11965
- z69.string(),
11966
- z69.strictObject({
11967
- alt: z69.string().optional(),
11968
- dark: z69.string().optional(),
11969
- light: z69.string().optional()
11979
+ var logoImageSchema = z70.union([
11980
+ z70.string(),
11981
+ z70.strictObject({
11982
+ alt: z70.string().optional(),
11983
+ dark: z70.string().optional(),
11984
+ light: z70.string().optional()
11970
11985
  })
11971
11986
  ]);
11972
- var logoConfigSchema = z69.union([
11973
- z69.string(),
11974
- z69.strictObject({
11975
- href: z69.string().optional(),
11987
+ var logoConfigSchema = z70.union([
11988
+ z70.string(),
11989
+ z70.strictObject({
11990
+ href: z70.string().optional(),
11976
11991
  image: logoImageSchema.optional(),
11977
- text: z69.string().optional()
11992
+ text: z70.string().optional()
11978
11993
  })
11979
11994
  ]);
11980
- var localizableLabelSchema = z69.union([
11981
- z69.string(),
11982
- z69.record(z69.string(), z69.string()).refine((value) => Object.keys(value).length > 0, {
11995
+ var localizableLabelSchema = z70.union([
11996
+ z70.string(),
11997
+ z70.record(z70.string(), z70.string()).refine((value) => Object.keys(value).length > 0, {
11983
11998
  message: "Provide at least one locale's label."
11984
11999
  })
11985
12000
  ]);
11986
- var bannerConfigSchema = z69.union([
11987
- z69.string(),
11988
- z69.strictObject({
12001
+ var bannerConfigSchema = z70.union([
12002
+ z70.string(),
12003
+ z70.strictObject({
11989
12004
  content: localizableLabelSchema,
11990
- dismissible: z69.boolean().default(false),
11991
- id: z69.string().optional(),
11992
- link: z69.strictObject({ href: z69.string(), text: localizableLabelSchema }).optional()
12005
+ dismissible: z70.boolean().default(false),
12006
+ id: z70.string().optional(),
12007
+ link: z70.strictObject({ href: z70.string(), text: localizableLabelSchema }).optional()
11993
12008
  })
11994
12009
  ]);
11995
- var apiConfigSchema = z69.strictObject({
11996
- auth: z69.strictObject({
11997
- method: z69.enum(AUTH_METHODS),
11998
- name: z69.string().optional()
12010
+ var apiConfigSchema = z70.strictObject({
12011
+ auth: z70.strictObject({
12012
+ method: z70.enum(AUTH_METHODS),
12013
+ name: z70.string().optional()
11999
12014
  }).optional(),
12000
12015
  playground: playgroundSchema,
12001
- server: z69.string().optional()
12016
+ server: z70.string().optional()
12002
12017
  });
12003
- var footerConfigSchema = z69.strictObject({
12004
- links: z69.array(z69.strictObject({ href: z69.string(), label: localizableLabelSchema })).default([]),
12005
- socials: z69.partialRecord(z69.enum(FOOTER_SOCIALS), z69.string()).default({})
12018
+ var footerConfigSchema = z70.strictObject({
12019
+ copyright: localizableLabelSchema.optional(),
12020
+ links: z70.array(z70.strictObject({ href: z70.string(), label: localizableLabelSchema })).default([]),
12021
+ socials: z70.partialRecord(z70.enum(FOOTER_SOCIALS), z70.string()).default({})
12006
12022
  });
12007
- var changelogConfigSchema = z69.strictObject({
12023
+ var changelogConfigSchema = z70.strictObject({
12008
12024
  description: localizableLabelSchema.optional(),
12009
12025
  title: localizableLabelSchema.optional()
12010
12026
  });
12011
- var contentTypeConfigSchema = z69.strictObject({
12012
- facets: z69.array(z69.string()).default([]),
12027
+ var contentTypeConfigSchema = z70.strictObject({
12028
+ facets: z70.array(z70.string()).default([]),
12013
12029
  frontmatter: customKeySchemaRecord("content.types")
12014
12030
  });
12015
12031
  var FILESYSTEM_SHORTHAND_KEYS = ["exclude", "include", "root"];
12016
- var contentConfigSchema = z69.strictObject({
12017
- defaultType: z69.string().default("doc"),
12018
- exclude: z69.array(z69.string()).optional(),
12019
- include: z69.array(z69.string()).optional(),
12020
- pages: z69.string().default("pages"),
12021
- root: z69.string().optional(),
12032
+ var contentConfigSchema = z70.strictObject({
12033
+ defaultType: z70.string().default("doc"),
12034
+ exclude: z70.array(z70.string()).optional(),
12035
+ include: z70.array(z70.string()).optional(),
12036
+ pages: z70.string().default("pages"),
12037
+ root: z70.string().optional(),
12022
12038
  sources: contentSourcesSchema.optional(),
12023
- types: z69.record(z69.string(), contentTypeConfigSchema).default({})
12039
+ types: z70.record(z70.string(), contentTypeConfigSchema).default({})
12024
12040
  }).superRefine((value, ctx) => {
12025
12041
  if (!value.sources) {
12026
12042
  return;
@@ -12028,7 +12044,7 @@ var contentConfigSchema = z69.strictObject({
12028
12044
  for (const key of FILESYSTEM_SHORTHAND_KEYS) {
12029
12045
  if (value[key] !== undefined) {
12030
12046
  ctx.addIssue({
12031
- code: z69.ZodIssueCode.custom,
12047
+ code: z70.ZodIssueCode.custom,
12032
12048
  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.`,
12033
12049
  path: [key]
12034
12050
  });
@@ -12040,119 +12056,119 @@ var contentConfigSchema = z69.strictObject({
12040
12056
  resolvedSourceAdapterSchema.parse(filesystem({ exclude, include, root }))
12041
12057
  ]
12042
12058
  }));
12043
- var navTabSchema = z69.strictObject({
12044
- href: z69.string().min(1).optional(),
12059
+ var navTabSchema = z70.strictObject({
12060
+ href: z70.string().min(1).optional(),
12045
12061
  icon: iconName.optional(),
12046
- items: z69.array(z69.strictObject({
12047
- description: z69.string().optional(),
12062
+ items: z70.array(z70.strictObject({
12063
+ description: z70.string().optional(),
12048
12064
  icon: iconName.optional(),
12049
12065
  label: localizableLabelSchema,
12050
- path: z69.string(),
12051
- tag: z69.string().optional()
12066
+ path: z70.string(),
12067
+ tag: z70.string().optional()
12052
12068
  })).optional(),
12053
12069
  label: localizableLabelSchema,
12054
- path: z69.string().transform(normalizeRoute)
12070
+ path: z70.string().transform(normalizeRoute)
12055
12071
  });
12056
- var navSelectorItemSchema = z69.strictObject({
12057
- description: z69.string().optional(),
12072
+ var navSelectorItemSchema = z70.strictObject({
12073
+ description: z70.string().optional(),
12058
12074
  icon: iconName.optional(),
12059
- label: z69.string(),
12060
- path: z69.string(),
12061
- tag: z69.string().optional()
12075
+ label: z70.string(),
12076
+ path: z70.string(),
12077
+ tag: z70.string().optional()
12062
12078
  });
12063
- var navSelectorSchema = z69.strictObject({
12064
- items: z69.array(navSelectorItemSchema).default([]),
12065
- kind: z69.enum(["dropdown", "language", "product", "version"]),
12066
- label: z69.string()
12079
+ var navSelectorSchema = z70.strictObject({
12080
+ items: z70.array(navSelectorItemSchema).default([]),
12081
+ kind: z70.enum(["dropdown", "language", "product", "version"]),
12082
+ label: z70.string()
12067
12083
  });
12068
- var sidebarItemSchema = z69.lazy(() => z69.union([
12069
- z69.string(),
12070
- z69.strictObject({
12071
- badge: z69.string().optional(),
12072
- collapsed: z69.boolean().optional(),
12084
+ var sidebarItemSchema = z70.lazy(() => z70.union([
12085
+ z70.string(),
12086
+ z70.strictObject({
12087
+ badge: z70.string().optional(),
12088
+ collapsed: z70.boolean().optional(),
12073
12089
  directory: directoryModeSchema.optional(),
12074
12090
  display: sidebarDisplaySchema.optional(),
12075
- href: z69.string().optional(),
12091
+ href: z70.string().optional(),
12076
12092
  icon: iconName.optional(),
12077
- items: z69.array(sidebarItemSchema).optional(),
12078
- label: z69.string(),
12079
- root: z69.string().optional()
12093
+ items: z70.array(sidebarItemSchema).optional(),
12094
+ label: z70.string(),
12095
+ root: z70.string().optional()
12080
12096
  })
12081
12097
  ]));
12082
- var fontFallbackSchema = z69.enum(["sans", "serif", "mono"]);
12083
- var remoteFontSchema = z69.strictObject({
12098
+ var fontFallbackSchema = z70.enum(["sans", "serif", "mono"]);
12099
+ var remoteFontSchema = z70.strictObject({
12084
12100
  fallback: fontFallbackSchema.optional(),
12085
- name: z69.string().min(1),
12086
- provider: z69.enum(["google", "fontsource", "bunny", "fontshare"]).default("google"),
12087
- subsets: z69.array(z69.string().min(1)).nonempty().optional(),
12088
- weights: z69.array(z69.union([z69.number().int().positive(), z69.string().regex(/^\d+\.\.\d+$/u)])).nonempty().optional()
12101
+ name: z70.string().min(1),
12102
+ provider: z70.enum(["google", "fontsource", "bunny", "fontshare"]).default("google"),
12103
+ subsets: z70.array(z70.string().min(1)).nonempty().optional(),
12104
+ weights: z70.array(z70.union([z70.number().int().positive(), z70.string().regex(/^\d+\.\.\d+$/u)])).nonempty().optional()
12089
12105
  });
12090
- var localFontVariantSchema = z69.strictObject({
12091
- src: z69.string().min(1),
12092
- style: z69.enum(["normal", "italic", "oblique"]).optional(),
12093
- weight: z69.union([
12094
- z69.number().int().positive(),
12095
- z69.string().regex(/^\d+(?:\.\.\d+)?$/u)
12106
+ var localFontVariantSchema = z70.strictObject({
12107
+ src: z70.string().min(1),
12108
+ style: z70.enum(["normal", "italic", "oblique"]).optional(),
12109
+ weight: z70.union([
12110
+ z70.number().int().positive(),
12111
+ z70.string().regex(/^\d+(?:\.\.\d+)?$/u)
12096
12112
  ]).optional()
12097
12113
  });
12098
- var localFontSchema = z69.strictObject({
12114
+ var localFontSchema = z70.strictObject({
12099
12115
  fallback: fontFallbackSchema.optional(),
12100
- name: z69.string().min(1),
12101
- variants: z69.array(localFontVariantSchema).nonempty()
12116
+ name: z70.string().min(1),
12117
+ variants: z70.array(localFontVariantSchema).nonempty()
12102
12118
  });
12103
- var fontValueSchema = z69.union([z69.string(), remoteFontSchema, localFontSchema]).superRefine((value, ctx) => {
12119
+ var fontValueSchema = z70.union([z70.string(), remoteFontSchema, localFontSchema]).superRefine((value, ctx) => {
12104
12120
  if (isString3(value) && !isFontSlug(value)) {
12105
12121
  ctx.addIssue({
12106
- code: z69.ZodIssueCode.custom,
12122
+ code: z70.ZodIssueCode.custom,
12107
12123
  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).`
12108
12124
  });
12109
12125
  }
12110
12126
  });
12111
- var perModeValueSchema = z69.union([
12112
- z69.string(),
12113
- z69.strictObject({
12114
- dark: z69.string().optional(),
12115
- light: z69.string().optional()
12127
+ var perModeValueSchema = z70.union([
12128
+ z70.string(),
12129
+ z70.strictObject({
12130
+ dark: z70.string().optional(),
12131
+ light: z70.string().optional()
12116
12132
  })
12117
12133
  ]).optional().transform((value) => isString3(value) ? { dark: value, light: value } : value);
12118
12134
  var themeConfigFields = {
12119
- accent: z69.union([
12120
- z69.string(),
12121
- z69.strictObject({ dark: z69.string(), light: z69.string() })
12135
+ accent: z70.union([
12136
+ z70.string(),
12137
+ z70.strictObject({ dark: z70.string(), light: z70.string() })
12122
12138
  ]).default("blue").transform((value) => isString3(value) ? { dark: value, light: value } : value),
12123
- action: z69.string().optional(),
12139
+ action: z70.string().optional(),
12124
12140
  background: perModeValueSchema,
12125
12141
  backgroundImage: perModeValueSchema,
12126
- fonts: z69.strictObject({
12142
+ fonts: z70.strictObject({
12127
12143
  body: fontValueSchema.default("inter"),
12128
12144
  display: fontValueSchema.default("inter"),
12129
12145
  mono: fontValueSchema.default("ibm-plex-mono")
12130
12146
  }).prefault({}),
12131
- mode: z69.enum(["system", "light", "dark"]).default("system"),
12132
- radius: z69.enum(["none", "sm", "md", "lg"]).default("md")
12147
+ mode: z70.enum(["system", "light", "dark"]).default("system"),
12148
+ radius: z70.enum(["none", "sm", "md", "lg"]).default("md")
12133
12149
  };
12134
- var themeConfigSchema = z69.strictObject(themeConfigFields, removedKeysHint({
12150
+ var themeConfigSchema = z70.strictObject(themeConfigFields, removedKeysHint({
12135
12151
  layout: "theme.layout was removed: the sidebar layout is the only one, so delete the field."
12136
12152
  }));
12137
- var searchPopularLinkSchema = z69.strictObject({
12138
- href: z69.string(),
12153
+ var searchPopularLinkSchema = z70.strictObject({
12154
+ href: z70.string(),
12139
12155
  icon: iconName.optional(),
12140
- label: z69.string()
12156
+ label: z70.string()
12141
12157
  });
12142
- var searchProviderSchema = z69.custom((value) => value === false || isObjectLike2(value), {
12158
+ var searchProviderSchema = z70.custom((value) => value === false || isObjectLike2(value), {
12143
12159
  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`.'
12144
12160
  }).transform((value) => value === false ? NONE_SEARCH_ADAPTER : value).pipe(resolvedSearchAdapterSchema);
12145
- var searchIndexingSchema = z69.strictObject({
12146
- includeCodeBlocks: z69.boolean().default(false),
12147
- includeHiddenPages: z69.boolean().default(false)
12161
+ var searchIndexingSchema = z70.strictObject({
12162
+ includeCodeBlocks: z70.boolean().default(false),
12163
+ includeHiddenPages: z70.boolean().default(false)
12148
12164
  }).prefault({});
12149
- var searchAnalyticsSchema = z69.strictObject({
12150
- queries: z69.boolean().default(true)
12165
+ var searchAnalyticsSchema = z70.strictObject({
12166
+ queries: z70.boolean().default(true)
12151
12167
  }).prefault({});
12152
- var searchOptionsSchema = z69.strictObject({
12168
+ var searchOptionsSchema = z70.strictObject({
12153
12169
  analytics: searchAnalyticsSchema,
12154
12170
  indexing: searchIndexingSchema,
12155
- popular: z69.array(searchPopularLinkSchema).default([]),
12171
+ popular: z70.array(searchPopularLinkSchema).default([]),
12156
12172
  provider: searchProviderSchema.default(() => orama())
12157
12173
  }, removedKeysHint({
12158
12174
  algolia: 'search.algolia moved into its adapter: `search: algolia({ appId, indexName, apiKey })` from "blume/search", where the 1.x `searchApiKey` is now `apiKey`.',
@@ -12160,32 +12176,71 @@ var searchOptionsSchema = z69.strictObject({
12160
12176
  oramaCloud: 'search.oramaCloud moved into its adapter: `search: oramaCloud({ endpoint, apiKey, indexId })` from "blume/search".',
12161
12177
  typesense: 'search.typesense moved into its adapter: `search: typesense({ host, collection, apiKey })` from "blume/search", where the 1.x `searchApiKey` is now `apiKey`.'
12162
12178
  }));
12163
- var searchConfigSchema = z69.custom((value) => value === false || isObjectLike2(value), {
12179
+ var searchConfigSchema = z70.custom((value) => value === false || isObjectLike2(value), {
12164
12180
  message: 'search must be an adapter from "blume/search" (orama(), algolia({…}), …), false, or { provider, popular, indexing }. The 1.x provider string was removed.'
12165
12181
  }).transform((value) => value === false || ("kind" in value) ? { provider: value } : value).pipe(searchOptionsSchema);
12166
12182
  var PRIVATE_JWK_PARAMS = ["d", "p", "q", "dp", "dq", "qi", "oth", "k"];
12167
- var publicJwkSchema = z69.record(z69.string(), z69.unknown()).superRefine((jwk, ctx) => {
12183
+ var publicJwkSchema = z70.record(z70.string(), z70.unknown()).superRefine((jwk, ctx) => {
12168
12184
  if (!isString3(jwk.kty) || jwk.kty.length === 0) {
12169
12185
  ctx.addIssue({
12170
- code: z69.ZodIssueCode.custom,
12186
+ code: z70.ZodIssueCode.custom,
12171
12187
  message: 'A JWK must declare its key type ("kty").'
12172
12188
  });
12173
12189
  }
12174
12190
  const leaked = PRIVATE_JWK_PARAMS.filter((param) => (param in jwk));
12175
12191
  if (leaked.length > 0) {
12176
12192
  ctx.addIssue({
12177
- code: z69.ZodIssueCode.custom,
12193
+ code: z70.ZodIssueCode.custom,
12178
12194
  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.`
12179
12195
  });
12180
12196
  }
12181
12197
  });
12182
- var mcpConfigSchema = z69.strictObject({
12183
- enabled: z69.boolean().default(false),
12184
- instructions: z69.string().optional(),
12185
- name: z69.string().optional(),
12186
- route: z69.string().default("/mcp").transform(normalizeRoute)
12198
+ var mcpClientLabelSchema = z70.union([
12199
+ z70.string().trim().min(1),
12200
+ z70.record(z70.string(), z70.string().trim().min(1)).refine((value) => Object.keys(value).length > 0, {
12201
+ message: "Provide at least one locale's label."
12202
+ })
12203
+ ], { error: "Expected a label, or a map of locale code to label" });
12204
+ var mcpCustomClientSchema = z70.strictObject({
12205
+ command: z70.string().trim().min(1),
12206
+ icon: iconName.optional(),
12207
+ label: mcpClientLabelSchema
12208
+ });
12209
+ var ACCEPTED_MCP_CLIENTS = `${mcpClients.map((key) => `"${key}"`).join(", ")}, or a custom client { label, command, icon? }`;
12210
+ var isUnionIssue = (issue) => issue.code === "invalid_union";
12211
+ var mcpClientsError = (issue) => {
12212
+ const entryIssue = (issue.code === "invalid_union" ? issue.errors : []).flat().filter(isUnionIssue).find((nested) => Number.isInteger(nested.path[0]));
12213
+ if (!entryIssue) {
12214
+ return `agents.mcp.clients takes true, false, or a list whose entries are each ${ACCEPTED_MCP_CLIENTS}.`;
12215
+ }
12216
+ const index = Number(entryIssue.path[0]);
12217
+ const at = `agents.mcp.clients.${String(index)}`;
12218
+ const entry = Array.isArray(issue.input) ? issue.input[index] : null;
12219
+ if (isString3(entry)) {
12220
+ return `${at} is "${entry}", which isn't a built-in client. Use ${ACCEPTED_MCP_CLIENTS}.`;
12221
+ }
12222
+ const fieldIssue = entryIssue.errors.flat().find((nested) => nested.path.length > 0);
12223
+ return fieldIssue ? `${at}.${fieldIssue.path.map(String).join(".")}: ${fieldIssue.message}. A custom client is { label, command, icon? }.` : `${at} isn't ${ACCEPTED_MCP_CLIENTS}.`;
12224
+ };
12225
+ var mcpConfigSchema = z70.strictObject({
12226
+ clients: z70.union([
12227
+ z70.boolean(),
12228
+ z70.array(z70.union([z70.enum(mcpClients), mcpCustomClientSchema])).refine((value) => {
12229
+ const keys = value.filter(isBuiltInMcpClient);
12230
+ return new Set(keys).size === keys.length;
12231
+ }, { message: "agents.mcp.clients must not repeat a built-in client." })
12232
+ ], { error: mcpClientsError }).default(true).transform((value) => {
12233
+ if (isBoolean2(value)) {
12234
+ return value ? [...mcpClients] : [];
12235
+ }
12236
+ return value;
12237
+ }),
12238
+ enabled: z70.boolean().default(false),
12239
+ instructions: z70.string().optional(),
12240
+ name: z70.string().optional(),
12241
+ route: z70.string().default("/mcp").transform(normalizeRoute)
12187
12242
  });
12188
- var assistantEndpointSchema = z69.string().trim().min(1).refine((value) => {
12243
+ var assistantEndpointSchema = z70.string().trim().min(1).refine((value) => {
12189
12244
  if (value.startsWith("/") && !value.startsWith("//")) {
12190
12245
  return true;
12191
12246
  }
@@ -12198,14 +12253,14 @@ var assistantEndpointSchema = z69.string().trim().min(1).refine((value) => {
12198
12253
  }, {
12199
12254
  message: "ai.assistant.endpoint must be an HTTP(S) URL or a root-relative path."
12200
12255
  });
12201
- var llmsTxtObjectSchema = z69.strictObject({
12202
- details: z69.string().trim().min(1).optional(),
12203
- enabled: z69.boolean().default(true),
12204
- openapi: z69.boolean().default(true)
12256
+ var llmsTxtObjectSchema = z70.strictObject({
12257
+ details: z70.string().trim().min(1).optional(),
12258
+ enabled: z70.boolean().default(true),
12259
+ openapi: z70.boolean().default(true)
12205
12260
  });
12206
- var aiCatalogObjectSchema = z69.strictObject({
12207
- enabled: z69.boolean().default(true),
12208
- queries: z69.record(z69.string().min(1), z69.array(z69.string().trim().min(1)).min(1)).default({})
12261
+ var aiCatalogObjectSchema = z70.strictObject({
12262
+ enabled: z70.boolean().default(true),
12263
+ queries: z70.record(z70.string().min(1), z70.array(z70.string().trim().min(1)).min(1)).default({})
12209
12264
  });
12210
12265
  var MOVED_TO_AGENTS = [
12211
12266
  "api",
@@ -12222,41 +12277,41 @@ var movedToAgentsHints = (from) => Object.fromEntries(MOVED_TO_AGENTS.map((key)
12222
12277
  `${from}.${key} moved to agents.${key}.`
12223
12278
  ]));
12224
12279
  var aiConfigFields = {
12225
- assistant: z69.strictObject({
12280
+ assistant: z70.strictObject({
12226
12281
  captcha: captchaAdapterSchema.optional(),
12227
- cors: z69.array(z69.union([
12228
- z69.literal("*"),
12229
- z69.url({ protocol: /^https?$/u }).transform((value) => new URL(value).origin)
12282
+ cors: z70.array(z70.union([
12283
+ z70.literal("*"),
12284
+ z70.url({ protocol: /^https?$/u }).transform((value) => new URL(value).origin)
12230
12285
  ])).optional(),
12231
- enabled: z69.boolean().default(false),
12286
+ enabled: z70.boolean().default(false),
12232
12287
  endpoint: assistantEndpointSchema.optional(),
12233
- instructions: z69.string().trim().min(1).optional(),
12288
+ instructions: z70.string().trim().min(1).optional(),
12234
12289
  provider: assistantAdapterSchema.prefault(DEFAULT_ASSISTANT_PROVIDER),
12235
- retrieval: z69.strictObject({
12236
- contextBudget: z69.number().int().positive().optional(),
12237
- excerptChars: z69.number().int().positive().optional(),
12238
- maxResults: z69.number().int().positive().optional()
12290
+ retrieval: z70.strictObject({
12291
+ contextBudget: z70.number().int().positive().optional(),
12292
+ excerptChars: z70.number().int().positive().optional(),
12293
+ maxResults: z70.number().int().positive().optional()
12239
12294
  }).optional(),
12240
- suggestions: z69.array(z69.strictObject({
12295
+ suggestions: z70.array(z70.strictObject({
12241
12296
  icon: iconName.optional(),
12242
- label: z69.string().min(1)
12297
+ label: z70.string().min(1)
12243
12298
  })).default([]),
12244
- support: z69.string().refine((link) => link.startsWith("mailto:") || link.startsWith("/") || isExternalUrl(link), {
12299
+ support: z70.string().refine((link) => link.startsWith("mailto:") || link.startsWith("/") || isExternalUrl(link), {
12245
12300
  message: 'ai.assistant.support is a mailto: address, a URL, or a root-relative path, like "mailto:help@example.com".'
12246
12301
  }).optional(),
12247
- tools: z69.boolean().optional()
12302
+ tools: z70.boolean().optional()
12248
12303
  }, assistantMovedFieldsHint).superRefine((value, ctx) => {
12249
12304
  if (value.cors && value.endpoint) {
12250
12305
  ctx.addIssue({
12251
- code: z69.ZodIssueCode.custom,
12306
+ code: z70.ZodIssueCode.custom,
12252
12307
  message: "ai.assistant.cors only applies to the generated route; with ai.assistant.endpoint, CORS is that backend's job.",
12253
12308
  path: ["cors"]
12254
12309
  });
12255
12310
  }
12256
12311
  }).optional(),
12257
- openInChat: z69.union([
12258
- z69.boolean(),
12259
- z69.array(z69.enum(openInChatProviders)).refine((value) => new Set(value).size === value.length, {
12312
+ openInChat: z70.union([
12313
+ z70.boolean(),
12314
+ z70.array(z70.enum(openInChatProviders)).refine((value) => new Set(value).size === value.length, {
12260
12315
  message: "ai.openInChat must not repeat a provider."
12261
12316
  })
12262
12317
  ]).default(true).transform((value) => {
@@ -12266,109 +12321,109 @@ var aiConfigFields = {
12266
12321
  return value;
12267
12322
  })
12268
12323
  };
12269
- var aiConfigSchema = z69.strictObject(aiConfigFields, removedKeysHint({
12324
+ var aiConfigSchema = z70.strictObject(aiConfigFields, removedKeysHint({
12270
12325
  ...movedToAgentsHints("ai"),
12271
12326
  ask: "ai.ask was renamed to ai.assistant."
12272
12327
  }));
12273
- var featuredLinkSchema = z69.strictObject({
12274
- href: z69.string(),
12328
+ var featuredLinkSchema = z70.strictObject({
12329
+ href: z70.string(),
12275
12330
  icon: iconName.optional(),
12276
12331
  label: localizableLabelSchema
12277
12332
  });
12278
- var headerActionSchema = z69.strictObject({
12279
- href: z69.string(),
12333
+ var headerActionSchema = z70.strictObject({
12334
+ href: z70.string(),
12280
12335
  label: localizableLabelSchema
12281
12336
  });
12282
- var navigationConfigSchema = z69.strictObject({
12283
- actions: z69.array(headerActionSchema).default([]),
12337
+ var navigationConfigSchema = z70.strictObject({
12338
+ actions: z70.array(headerActionSchema).default([]),
12284
12339
  cta: headerActionSchema.optional(),
12285
- featured: z69.array(featuredLinkSchema).default([]),
12286
- repo: z69.union([z69.boolean(), httpUrlSchema]).default(true),
12287
- selectors: z69.array(navSelectorSchema).default([]),
12288
- sidebar: z69.union([
12289
- z69.array(sidebarItemSchema),
12290
- z69.strictObject({
12340
+ featured: z70.array(featuredLinkSchema).default([]),
12341
+ repo: z70.union([z70.boolean(), httpUrlSchema]).default(true),
12342
+ selectors: z70.array(navSelectorSchema).default([]),
12343
+ sidebar: z70.union([
12344
+ z70.array(sidebarItemSchema),
12345
+ z70.strictObject({
12291
12346
  display: sidebarDisplaySchema.default("flat"),
12292
- items: z69.array(sidebarItemSchema).optional()
12347
+ items: z70.array(sidebarItemSchema).optional()
12293
12348
  })
12294
12349
  ]).prefault({}).transform((value) => Array.isArray(value) ? { display: "flat", items: value } : value),
12295
- tabs: z69.array(navTabSchema).default([])
12350
+ tabs: z70.array(navTabSchema).default([])
12296
12351
  });
12297
- var exportConfigSchema = z69.union([
12298
- z69.boolean(),
12299
- z69.strictObject({
12300
- epub: z69.boolean().default(false),
12301
- pdf: z69.boolean().default(false)
12352
+ var exportConfigSchema = z70.union([
12353
+ z70.boolean(),
12354
+ z70.strictObject({
12355
+ epub: z70.boolean().default(false),
12356
+ pdf: z70.boolean().default(false)
12302
12357
  })
12303
12358
  ]).transform((value) => isBoolean2(value) ? { epub: value, pdf: value } : value);
12304
- var feedbackConfigSchema = z69.union([
12305
- z69.boolean(),
12306
- z69.strictObject({
12307
- comments: z69.boolean().default(false),
12308
- enabled: z69.boolean().default(true)
12359
+ var feedbackConfigSchema = z70.union([
12360
+ z70.boolean(),
12361
+ z70.strictObject({
12362
+ comments: z70.boolean().default(false),
12363
+ enabled: z70.boolean().default(true)
12309
12364
  })
12310
12365
  ]).transform((value) => isBoolean2(value) ? { comments: false, enabled: value } : { comments: value.enabled && value.comments, enabled: value.enabled });
12311
- var narrationConfigSchema = z69.union([
12312
- z69.boolean(),
12313
- z69.strictObject({
12314
- enabled: z69.boolean().default(true),
12366
+ var narrationConfigSchema = z70.union([
12367
+ z70.boolean(),
12368
+ z70.strictObject({
12369
+ enabled: z70.boolean().default(true),
12315
12370
  provider: narrationProviderSchema.optional()
12316
12371
  })
12317
12372
  ]).transform((value) => isBoolean2(value) ? { enabled: value, provider: null } : { enabled: value.enabled, provider: value.provider ?? null });
12318
- var localeSchema = z69.strictObject({
12319
- code: z69.string().min(1),
12320
- dir: z69.enum(["ltr", "rtl"]).default("ltr"),
12321
- label: z69.string(),
12322
- style: z69.string().optional()
12373
+ var localeSchema = z70.strictObject({
12374
+ code: z70.string().min(1),
12375
+ dir: z70.enum(["ltr", "rtl"]).default("ltr"),
12376
+ label: z70.string(),
12377
+ style: z70.string().optional()
12323
12378
  });
12324
- var i18nConfigSchema = z69.strictObject({
12325
- defaultLocale: z69.string().default("en"),
12326
- fallbackLocale: z69.string().nullable().optional(),
12327
- hideDefaultLocalePrefix: z69.boolean().default(true),
12328
- locales: z69.array(localeSchema).min(1),
12329
- parser: z69.enum(["dir", "dot"]).default("dir"),
12330
- routeByBrowserLanguage: z69.boolean().default(false),
12379
+ var i18nConfigSchema = z70.strictObject({
12380
+ defaultLocale: z70.string().default("en"),
12381
+ fallbackLocale: z70.string().nullable().optional(),
12382
+ hideDefaultLocalePrefix: z70.boolean().default(true),
12383
+ locales: z70.array(localeSchema).min(1),
12384
+ parser: z70.enum(["dir", "dot"]).default("dir"),
12385
+ routeByBrowserLanguage: z70.boolean().default(false),
12331
12386
  ui: uiLocaleOverridesSchema.optional()
12332
12387
  }).superRefine((value, ctx) => {
12333
12388
  const codes = new Set(value.locales.map((locale) => locale.code));
12334
12389
  if (!codes.has(value.defaultLocale)) {
12335
12390
  ctx.addIssue({
12336
- code: z69.ZodIssueCode.custom,
12391
+ code: z70.ZodIssueCode.custom,
12337
12392
  message: `i18n.defaultLocale "${value.defaultLocale}" must match one of i18n.locales.`,
12338
12393
  path: ["defaultLocale"]
12339
12394
  });
12340
12395
  }
12341
12396
  if (value.fallbackLocale !== null && value.fallbackLocale !== undefined && !codes.has(value.fallbackLocale)) {
12342
12397
  ctx.addIssue({
12343
- code: z69.ZodIssueCode.custom,
12398
+ code: z70.ZodIssueCode.custom,
12344
12399
  message: `i18n.fallbackLocale "${value.fallbackLocale}" must match one of i18n.locales.`,
12345
12400
  path: ["fallbackLocale"]
12346
12401
  });
12347
12402
  }
12348
12403
  });
12349
12404
  var VERSION_ID = /^[A-Za-z][\w.-]*$/u;
12350
- var archivedVersionSchema = z69.strictObject({
12351
- banner: z69.union([z69.boolean(), z69.string()]).default(true),
12352
- canonical: z69.enum(["latest", "self"]).default("latest"),
12353
- id: z69.string().regex(VERSION_ID, 'Version ids must start with a letter (e.g. "v1.0") and contain only letters, digits, dots, hyphens, and underscores.'),
12354
- label: z69.string().optional(),
12355
- noindex: z69.boolean().default(false)
12405
+ var archivedVersionSchema = z70.strictObject({
12406
+ banner: z70.union([z70.boolean(), z70.string()]).default(true),
12407
+ canonical: z70.enum(["latest", "self"]).default("latest"),
12408
+ id: z70.string().regex(VERSION_ID, 'Version ids must start with a letter (e.g. "v1.0") and contain only letters, digits, dots, hyphens, and underscores.'),
12409
+ label: z70.string().optional(),
12410
+ noindex: z70.boolean().default(false)
12356
12411
  });
12357
- var versionsConfigSchema = z69.strictObject({
12358
- archived: z69.array(archivedVersionSchema).default([]),
12359
- current: z69.strictObject({
12360
- badge: z69.string().optional(),
12361
- label: z69.string()
12412
+ var versionsConfigSchema = z70.strictObject({
12413
+ archived: z70.array(archivedVersionSchema).default([]),
12414
+ current: z70.strictObject({
12415
+ badge: z70.string().optional(),
12416
+ label: z70.string()
12362
12417
  }),
12363
- switcher: z69.strictObject({
12364
- redirect: z69.enum(["same-page", "root"]).default("same-page")
12418
+ switcher: z70.strictObject({
12419
+ redirect: z70.enum(["same-page", "root"]).default("same-page")
12365
12420
  }).prefault({})
12366
12421
  }).superRefine((value, ctx) => {
12367
12422
  const seen = new Set;
12368
12423
  for (const [position, version] of value.archived.entries()) {
12369
12424
  if (seen.has(version.id)) {
12370
12425
  ctx.addIssue({
12371
- code: z69.ZodIssueCode.custom,
12426
+ code: z70.ZodIssueCode.custom,
12372
12427
  message: `versions.archived declares "${version.id}" more than once.`,
12373
12428
  path: ["archived", position, "id"]
12374
12429
  });
@@ -12387,85 +12442,85 @@ var REDIRECT_START = {
12387
12442
  message: "redirects take root-relative paths or full URLs: `to` must start with `/` (`/new-page`, not `new-page`) or be an absolute URL (`https://…`)."
12388
12443
  }
12389
12444
  };
12390
- var redirectPath = (end) => z69.string().refine(REDIRECT_START[end].allows, {
12445
+ var redirectPath = (end) => z70.string().refine(REDIRECT_START[end].allows, {
12391
12446
  message: REDIRECT_START[end].message
12392
12447
  });
12393
- var redirectSchema = z69.strictObject({
12448
+ var redirectSchema = z70.strictObject({
12394
12449
  from: redirectPath("from"),
12395
- status: z69.union([z69.literal(301), z69.literal(302), z69.literal(307), z69.literal(308)]).default(301),
12450
+ status: z70.union([z70.literal(301), z70.literal(302), z70.literal(307), z70.literal(308)]).default(301),
12396
12451
  to: redirectPath("to")
12397
12452
  }).superRefine((redirect, ctx) => {
12398
12453
  const error = redirectPatternError(redirect.from, redirect.to);
12399
12454
  if (error) {
12400
12455
  ctx.addIssue({
12401
- code: z69.ZodIssueCode.custom,
12456
+ code: z70.ZodIssueCode.custom,
12402
12457
  message: error.message,
12403
12458
  path: [error.end]
12404
12459
  });
12405
12460
  }
12406
12461
  });
12407
- var imageRemotePatternSchema = z69.strictObject({
12408
- hostname: z69.string().optional(),
12409
- pathname: z69.string().optional(),
12410
- port: z69.string().optional(),
12411
- protocol: z69.string().optional()
12462
+ var imageRemotePatternSchema = z70.strictObject({
12463
+ hostname: z70.string().optional(),
12464
+ pathname: z70.string().optional(),
12465
+ port: z70.string().optional(),
12466
+ protocol: z70.string().optional()
12412
12467
  });
12413
- var imageConfigSchema = z69.strictObject({
12414
- domains: z69.array(z69.string()).default([]),
12415
- remotePatterns: z69.array(imageRemotePatternSchema).default([])
12468
+ var imageConfigSchema = z70.strictObject({
12469
+ domains: z70.array(z70.string()).default([]),
12470
+ remotePatterns: z70.array(imageRemotePatternSchema).default([])
12416
12471
  });
12417
- var xConfigSchema = z69.strictObject({
12472
+ var xConfigSchema = z70.strictObject({
12418
12473
  creator: xHandleSchema,
12419
12474
  handle: xHandleSchema
12420
12475
  });
12421
- var ogColorSchema = z69.string();
12422
- var ogPaletteSchema = z69.strictObject({
12476
+ var ogColorSchema = z70.string();
12477
+ var ogPaletteSchema = z70.strictObject({
12423
12478
  accent: ogColorSchema.optional(),
12424
12479
  background: ogColorSchema.optional(),
12425
12480
  border: ogColorSchema.optional(),
12426
12481
  foreground: ogColorSchema.optional(),
12427
12482
  muted: ogColorSchema.optional()
12428
12483
  });
12429
- var ogFontWeightSchema = z69.union([
12430
- z69.number().int().positive(),
12431
- z69.array(z69.number().int().positive()),
12432
- z69.string().regex(/^\d+\.\.\d+$/u)
12484
+ var ogFontWeightSchema = z70.union([
12485
+ z70.number().int().positive(),
12486
+ z70.array(z70.number().int().positive()),
12487
+ z70.string().regex(/^\d+\.\.\d+$/u)
12433
12488
  ]);
12434
- var ogFontStyleSchema = z69.enum(["normal", "italic"]);
12435
- var ogFontSchema = z69.union([
12436
- z69.string(),
12437
- z69.strictObject({
12438
- name: z69.string(),
12439
- style: z69.union([ogFontStyleSchema, z69.array(ogFontStyleSchema)]).optional(),
12489
+ var ogFontStyleSchema = z70.enum(["normal", "italic"]);
12490
+ var ogFontSchema = z70.union([
12491
+ z70.string(),
12492
+ z70.strictObject({
12493
+ name: z70.string(),
12494
+ style: z70.union([ogFontStyleSchema, z70.array(ogFontStyleSchema)]).optional(),
12440
12495
  weight: ogFontWeightSchema.optional()
12441
12496
  }),
12442
- z69.strictObject({
12443
- name: z69.string(),
12444
- src: z69.string().min(1),
12497
+ z70.strictObject({
12498
+ name: z70.string(),
12499
+ src: z70.string().min(1),
12445
12500
  style: ogFontStyleSchema.optional(),
12446
- weight: z69.number().int().positive().optional()
12501
+ weight: z70.number().int().positive().optional()
12447
12502
  })
12448
12503
  ]);
12449
- var ogConfigSchema = z69.strictObject({
12450
- description: z69.union([z69.string(), z69.literal(false)]).optional(),
12451
- enabled: z69.boolean().optional(),
12452
- fonts: z69.array(ogFontSchema).optional(),
12453
- logo: z69.union([z69.string(), z69.literal(false)]).optional(),
12504
+ var ogConfigSchema = z70.strictObject({
12505
+ description: z70.union([z70.string(), z70.literal(false)]).optional(),
12506
+ enabled: z70.boolean().optional(),
12507
+ fonts: z70.array(ogFontSchema).optional(),
12508
+ logo: z70.union([z70.string(), z70.literal(false)]).optional(),
12454
12509
  palette: ogPaletteSchema.optional(),
12455
- site: z69.union([z69.string(), z69.literal(false)]).optional(),
12456
- titles: z69.record(z69.string(), z69.string()).optional()
12510
+ site: z70.union([z70.string(), z70.literal(false)]).optional(),
12511
+ titles: z70.record(z70.string(), z70.string()).optional()
12457
12512
  });
12458
- var rssConfigSchema = z69.strictObject({
12459
- enabled: z69.boolean().default(true),
12460
- limit: z69.number().int().positive().default(50),
12461
- types: z69.array(z69.string()).default(["blog", "changelog"])
12513
+ var rssConfigSchema = z70.strictObject({
12514
+ enabled: z70.boolean().default(true),
12515
+ limit: z70.number().int().positive().default(50),
12516
+ types: z70.array(z70.string()).default(["blog", "changelog"])
12462
12517
  });
12463
- var contentSignalsObjectSchema = z69.strictObject({
12464
- aiInput: z69.boolean().default(true),
12465
- aiTrain: z69.boolean().default(true),
12466
- search: z69.boolean().default(true)
12518
+ var contentSignalsObjectSchema = z70.strictObject({
12519
+ aiInput: z70.boolean().default(true),
12520
+ aiTrain: z70.boolean().default(true),
12521
+ search: z70.boolean().default(true)
12467
12522
  });
12468
- var contentSignalsSchema = z69.union([z69.boolean(), contentSignalsObjectSchema]).transform((value) => {
12523
+ var contentSignalsSchema = z70.union([z70.boolean(), contentSignalsObjectSchema]).transform((value) => {
12469
12524
  if (value === true) {
12470
12525
  return contentSignalsObjectSchema.parse({});
12471
12526
  }
@@ -12474,35 +12529,35 @@ var contentSignalsSchema = z69.union([z69.boolean(), contentSignalsObjectSchema]
12474
12529
  }
12475
12530
  return value;
12476
12531
  });
12477
- var postalAddressSchema = z69.strictObject({
12478
- addressCountry: z69.string().optional(),
12479
- addressLocality: z69.string().optional(),
12480
- addressRegion: z69.string().optional(),
12481
- postalCode: z69.string().optional(),
12482
- streetAddress: z69.string().optional()
12532
+ var postalAddressSchema = z70.strictObject({
12533
+ addressCountry: z70.string().optional(),
12534
+ addressLocality: z70.string().optional(),
12535
+ addressRegion: z70.string().optional(),
12536
+ postalCode: z70.string().optional(),
12537
+ streetAddress: z70.string().optional()
12483
12538
  });
12484
- var organizationConfigSchema = z69.strictObject({
12539
+ var organizationConfigSchema = z70.strictObject({
12485
12540
  address: postalAddressSchema.optional(),
12486
- contactType: z69.string().default("customer support"),
12487
- email: z69.email().optional(),
12488
- logo: z69.string().optional(),
12489
- name: z69.string().optional(),
12490
- sameAs: z69.array(z69.url()).default([]),
12491
- telephone: z69.string().optional(),
12492
- url: z69.url().optional()
12541
+ contactType: z70.string().default("customer support"),
12542
+ email: z70.email().optional(),
12543
+ logo: z70.string().optional(),
12544
+ name: z70.string().optional(),
12545
+ sameAs: z70.array(z70.url()).default([]),
12546
+ telephone: z70.string().optional(),
12547
+ url: z70.url().optional()
12493
12548
  });
12494
- var softwareConfigSchema = z69.strictObject({
12495
- applicationCategory: z69.string().default("DeveloperApplication"),
12496
- description: z69.string().optional(),
12497
- license: z69.string().optional(),
12498
- name: z69.string().optional(),
12499
- operatingSystem: z69.string().optional(),
12500
- price: z69.union([z69.number().nonnegative(), z69.string()]).optional(),
12501
- priceCurrency: z69.string().default("USD"),
12502
- sameAs: z69.array(z69.url()).default([])
12549
+ var softwareConfigSchema = z70.strictObject({
12550
+ applicationCategory: z70.string().default("DeveloperApplication"),
12551
+ description: z70.string().optional(),
12552
+ license: z70.string().optional(),
12553
+ name: z70.string().optional(),
12554
+ operatingSystem: z70.string().optional(),
12555
+ price: z70.union([z70.number().nonnegative(), z70.string()]).optional(),
12556
+ priceCurrency: z70.string().default("USD"),
12557
+ sameAs: z70.array(z70.url()).default([])
12503
12558
  });
12504
12559
  var seoConfigFields = {
12505
- metatags: z69.record(z69.string().min(1), z69.string()).optional().superRefine((tags, ctx) => {
12560
+ metatags: z70.record(z70.string().min(1), z70.string()).optional().superRefine((tags, ctx) => {
12506
12561
  for (const name of Object.keys(tags ?? {})) {
12507
12562
  const owner = ownedMetatag(name);
12508
12563
  if (owner) {
@@ -12516,54 +12571,54 @@ var seoConfigFields = {
12516
12571
  }),
12517
12572
  og: ogConfigSchema.default({}),
12518
12573
  organization: organizationConfigSchema.optional(),
12519
- robots: z69.boolean().default(true),
12574
+ robots: z70.boolean().default(true),
12520
12575
  rss: rssConfigSchema.prefault({}),
12521
- sitemap: z69.boolean().default(true),
12522
- software: z69.union([z69.boolean(), softwareConfigSchema]).optional().transform((value) => {
12576
+ sitemap: z70.boolean().default(true),
12577
+ software: z70.union([z70.boolean(), softwareConfigSchema]).optional().transform((value) => {
12523
12578
  if (value === true) {
12524
12579
  return softwareConfigSchema.parse({});
12525
12580
  }
12526
12581
  return value === false ? undefined : value;
12527
12582
  }),
12528
- structuredData: z69.boolean().default(true),
12583
+ structuredData: z70.boolean().default(true),
12529
12584
  x: xConfigSchema.default({})
12530
12585
  };
12531
- var seoConfigSchema = z69.strictObject(seoConfigFields, removedKeysHint({
12586
+ var seoConfigSchema = z70.strictObject(seoConfigFields, removedKeysHint({
12532
12587
  agentReadability: "seo.agentReadability moved to agents.agentReadability.",
12533
12588
  contentSignals: "seo.contentSignals moved to agents.contentSignals."
12534
12589
  }));
12535
- var agentsConfigSchema = z69.strictObject({
12536
- agentReadability: z69.boolean().default(true),
12537
- api: z69.boolean().default(true),
12538
- catalog: z69.union([z69.boolean(), aiCatalogObjectSchema]).default(true).transform((value) => isBoolean2(value) ? { enabled: value, queries: {} } : value),
12590
+ var agentsConfigSchema = z70.strictObject({
12591
+ agentReadability: z70.boolean().default(true),
12592
+ api: z70.boolean().default(true),
12593
+ catalog: z70.union([z70.boolean(), aiCatalogObjectSchema]).default(true).transform((value) => isBoolean2(value) ? { enabled: value, queries: {} } : value),
12539
12594
  contentSignals: contentSignalsSchema.prefault(true),
12540
- llmsTxt: z69.union([z69.boolean(), llmsTxtObjectSchema]).default(true).transform((value) => isBoolean2(value) ? { enabled: value, openapi: true } : value),
12541
- markdownComponents: z69.record(z69.string(), z69.custom((value) => typeof value === "function", {
12595
+ llmsTxt: z70.union([z70.boolean(), llmsTxtObjectSchema]).default(true).transform((value) => isBoolean2(value) ? { enabled: value, openapi: true } : value),
12596
+ markdownComponents: z70.record(z70.string(), z70.custom((value) => typeof value === "function", {
12542
12597
  message: "Expected a serializer function."
12543
12598
  })).default({}),
12544
12599
  mcp: mcpConfigSchema.prefault({}),
12545
- skillMd: z69.boolean().default(true),
12546
- skills: z69.string().min(1).optional(),
12547
- webBotAuth: z69.strictObject({
12548
- keys: z69.array(publicJwkSchema).default([])
12600
+ skillMd: z70.boolean().default(true),
12601
+ skills: z70.string().min(1).optional(),
12602
+ webBotAuth: z70.strictObject({
12603
+ keys: z70.array(publicJwkSchema).default([])
12549
12604
  }).prefault({}),
12550
- webmcp: z69.boolean().default(true)
12605
+ webmcp: z70.boolean().default(true)
12551
12606
  });
12552
12607
  var githubOriginSchema = httpUrlSchema.transform((value) => new URL(value).origin);
12553
12608
  var githubApiSchema = httpUrlSchema.transform((value) => {
12554
12609
  const { origin, pathname } = new URL(value);
12555
12610
  return trimEnd(`${origin}${pathname}`, "/");
12556
12611
  });
12557
- var githubConfigSchema = z69.strictObject({
12612
+ var githubConfigSchema = z70.strictObject({
12558
12613
  api: githubApiSchema.optional(),
12559
- branch: z69.string().default("main"),
12560
- dir: z69.string().optional(),
12614
+ branch: z70.string().default("main"),
12615
+ dir: z70.string().optional(),
12561
12616
  host: githubOriginSchema.default(PUBLIC_HOST_URL),
12562
- owner: z69.string(),
12563
- repo: z69.string()
12617
+ owner: z70.string(),
12618
+ repo: z70.string()
12564
12619
  });
12565
12620
  var isThemeObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
12566
- var codeThemeSchema = z69.custom((value) => {
12621
+ var codeThemeSchema = z70.custom((value) => {
12567
12622
  if (isString3(value)) {
12568
12623
  return true;
12569
12624
  }
@@ -12576,18 +12631,18 @@ var codeThemeSchema = z69.custom((value) => {
12576
12631
  const hasContent = value.settings !== undefined || value.tokenColors !== undefined || value.colors !== undefined;
12577
12632
  return settingsValid && tokenColorsValid && colorsValid && hasContent;
12578
12633
  }, "Expected a Shiki theme name or custom theme object");
12579
- var codeBlockThemeSchema = z69.strictObject({
12634
+ var codeBlockThemeSchema = z70.strictObject({
12580
12635
  dark: codeThemeSchema.default("github-dark"),
12581
12636
  light: codeThemeSchema.default("github-light")
12582
12637
  });
12583
- var examplesConfigSchema = z69.union([
12584
- z69.string(),
12585
- z69.strictObject({
12586
- css: z69.string().optional(),
12587
- source: z69.string().default("examples")
12638
+ var examplesConfigSchema = z70.union([
12639
+ z70.string(),
12640
+ z70.strictObject({
12641
+ css: z70.string().optional(),
12642
+ source: z70.string().default("examples")
12588
12643
  })
12589
12644
  ]).transform((value) => isString3(value) ? { source: value } : value);
12590
- var lastModifiedConfigSchema = z69.union([z69.literal(false), z69.enum(["git", "frontmatter"])], {
12645
+ var lastModifiedConfigSchema = z70.union([z70.literal(false), z70.enum(["git", "frontmatter"])], {
12591
12646
  error: (issue) => issue.code === "invalid_union" ? 'lastModified takes false, "git", or "frontmatter": `true` became "git" and `{ type: "…" }` became the bare string.' : undefined
12592
12647
  });
12593
12648
  var DATE_FORM_FIELDS = [
@@ -12606,46 +12661,46 @@ var isKnownTimeZone = (timeZone) => {
12606
12661
  return false;
12607
12662
  }
12608
12663
  };
12609
- var dateFormatConfigSchema = z69.strictObject({
12610
- calendar: z69.string().optional(),
12611
- dateStyle: z69.enum(["full", "long", "medium", "short"]).optional(),
12612
- day: z69.enum(["numeric", "2-digit"]).optional(),
12613
- era: z69.enum(["long", "short", "narrow"]).optional(),
12614
- month: z69.enum(["numeric", "2-digit", "long", "short", "narrow"]).optional(),
12615
- numberingSystem: z69.string().optional(),
12616
- timeZone: z69.string().refine(isKnownTimeZone, {
12664
+ var dateFormatConfigSchema = z70.strictObject({
12665
+ calendar: z70.string().optional(),
12666
+ dateStyle: z70.enum(["full", "long", "medium", "short"]).optional(),
12667
+ day: z70.enum(["numeric", "2-digit"]).optional(),
12668
+ era: z70.enum(["long", "short", "narrow"]).optional(),
12669
+ month: z70.enum(["numeric", "2-digit", "long", "short", "narrow"]).optional(),
12670
+ numberingSystem: z70.string().optional(),
12671
+ timeZone: z70.string().refine(isKnownTimeZone, {
12617
12672
  message: 'Unknown time zone; use an IANA name like "Asia/Tokyo" or "UTC".'
12618
12673
  }).optional(),
12619
- weekday: z69.enum(["long", "short", "narrow"]).optional(),
12620
- year: z69.enum(["numeric", "2-digit"]).optional()
12674
+ weekday: z70.enum(["long", "short", "narrow"]).optional(),
12675
+ year: z70.enum(["numeric", "2-digit"]).optional()
12621
12676
  }).refine((value) => value.dateStyle === undefined || value.weekday === undefined && value.era === undefined && value.year === undefined && value.month === undefined && value.day === undefined, {
12622
12677
  message: "dateFormat.dateStyle can't be combined with weekday/era/year/month/day; use one or the other."
12623
12678
  }).transform((value) => DATE_FORM_FIELDS.some((field) => value[field] !== undefined) ? value : { ...value, dateStyle: "long" });
12624
- var codeConfigSchema = z69.strictObject({
12625
- icons: z69.boolean().default(true),
12679
+ var codeConfigSchema = z70.strictObject({
12680
+ icons: z70.boolean().default(true),
12626
12681
  theme: codeBlockThemeSchema.prefault({}),
12627
- wrap: z69.boolean().default(false)
12682
+ wrap: z70.boolean().default(false)
12628
12683
  });
12629
12684
  var markdownConfigFields = {
12630
12685
  code: codeConfigSchema.prefault({}),
12631
- externalLinks: z69.boolean().default(false),
12632
- headingAnchors: z69.boolean().default(true),
12633
- imageZoom: z69.boolean().default(true)
12686
+ externalLinks: z70.boolean().default(false),
12687
+ headingAnchors: z70.boolean().default(true),
12688
+ imageZoom: z70.boolean().default(true)
12634
12689
  };
12635
- var markdownConfigSchema = z69.strictObject(markdownConfigFields, removedKeysHint({
12690
+ var markdownConfigSchema = z70.strictObject(markdownConfigFields, removedKeysHint({
12636
12691
  codeBlocks: "markdown.codeBlocks was merged into markdown.code: move theme: { light, dark } under markdown.code."
12637
12692
  }));
12638
- var reactConfigSchema = z69.strictObject({
12639
- compiler: z69.boolean().default(true)
12693
+ var reactConfigSchema = z70.strictObject({
12694
+ compiler: z70.boolean().default(true)
12640
12695
  });
12641
- var frontmatterConfigSchema = z69.strictObject({
12696
+ var frontmatterConfigSchema = z70.strictObject({
12642
12697
  extend: customKeySchemaRecord("frontmatter.extend")
12643
12698
  });
12644
- var tocConfigSchema = z69.union([
12645
- z69.boolean(),
12646
- z69.strictObject({
12647
- maxHeadingLevel: z69.number().int().min(1).max(6).optional(),
12648
- minHeadingLevel: z69.number().int().min(1).max(6).optional()
12699
+ var tocConfigSchema = z70.union([
12700
+ z70.boolean(),
12701
+ z70.strictObject({
12702
+ maxHeadingLevel: z70.number().int().min(1).max(6).optional(),
12703
+ minHeadingLevel: z70.number().int().min(1).max(6).optional()
12649
12704
  })
12650
12705
  ]).default(true).transform((value) => {
12651
12706
  if (isBoolean2(value)) {
@@ -12659,13 +12714,13 @@ var tocConfigSchema = z69.union([
12659
12714
  }).refine((value) => value.minLevel <= value.maxLevel, {
12660
12715
  message: "toc.minHeadingLevel must be less than or equal to toc.maxHeadingLevel."
12661
12716
  });
12662
- var blumeConfigSchema = z69.strictObject({
12717
+ var blumeConfigSchema = z70.strictObject({
12663
12718
  agents: agentsConfigSchema.prefault({}),
12664
12719
  ai: aiConfigSchema.prefault({}),
12665
12720
  analytics: analyticsConfigSchema,
12666
12721
  api: apiConfigSchema.prefault({}),
12667
12722
  banner: bannerConfigSchema.optional(),
12668
- basePath: z69.string().refine((value) => !URL_ORIGIN.test(value) && !/[#?]/u.test(value), {
12723
+ basePath: z70.string().refine((value) => !URL_ORIGIN.test(value) && !/[#?]/u.test(value), {
12669
12724
  message: `basePath takes a path like "/docs", not a URL: no scheme, host, query, or fragment. The site's origin goes in deployment.site.`
12670
12725
  }).optional().transform((value) => normalizeBasePath(value)),
12671
12726
  changelog: changelogConfigSchema.optional(),
@@ -12673,7 +12728,7 @@ var blumeConfigSchema = z69.strictObject({
12673
12728
  content: contentConfigSchema.prefault({}),
12674
12729
  dateFormat: dateFormatConfigSchema.default({ dateStyle: "long" }),
12675
12730
  deployment: resolvedDeploymentSchema.prefault({}),
12676
- description: z69.string().optional(),
12731
+ description: z70.string().optional(),
12677
12732
  examples: examplesConfigSchema.prefault("examples"),
12678
12733
  export: exportConfigSchema.prefault(false),
12679
12734
  feedback: feedbackConfigSchema.prefault(true),
@@ -12682,25 +12737,25 @@ var blumeConfigSchema = z69.strictObject({
12682
12737
  github: githubConfigSchema.optional(),
12683
12738
  i18n: i18nConfigSchema.optional(),
12684
12739
  image: imageConfigSchema.prefault({}),
12685
- integrations: z69.array(z69.custom()).default([]),
12740
+ integrations: z70.array(z70.custom()).default([]),
12686
12741
  lastModified: lastModifiedConfigSchema.default(false),
12687
12742
  logo: logoConfigSchema.optional(),
12688
12743
  markdown: markdownConfigSchema.prefault({}),
12689
12744
  narration: narrationConfigSchema.prefault(false),
12690
12745
  navigation: navigationConfigSchema.prefault({}),
12691
- poweredBy: z69.boolean().default(true),
12746
+ poweredBy: z70.boolean().default(true),
12692
12747
  rateLimit: rateLimitConfigSchema,
12693
12748
  react: reactConfigSchema.prefault({}),
12694
- redirects: z69.array(redirectSchema).default([]),
12749
+ redirects: z70.array(redirectSchema).default([]),
12695
12750
  reference: referenceConfigSchema,
12696
12751
  search: searchConfigSchema.prefault({}),
12697
12752
  seo: seoConfigSchema.prefault({}),
12698
12753
  theme: themeConfigSchema.prefault({}),
12699
- title: z69.string().default("Documentation"),
12754
+ title: z70.string().default("Documentation"),
12700
12755
  toc: tocConfigSchema,
12701
- variables: z69.record(z69.string().regex(VARIABLE_NAME, {
12756
+ variables: z70.record(z70.string().regex(VARIABLE_NAME, {
12702
12757
  message: "Variable names take letters, digits, `_`, and `-`, like `version` or `api-url`."
12703
- }), z69.string().refine((value) => !/[\r\n]/u.test(value), {
12758
+ }), z70.string().refine((value) => !/[\r\n]/u.test(value), {
12704
12759
  message: "A variable's value must fit on one line."
12705
12760
  })).default({}),
12706
12761
  versions: versionsConfigSchema.optional()
@@ -12712,7 +12767,7 @@ var blumeConfigSchema = z69.strictObject({
12712
12767
  for (const [position, version] of config.versions.archived.entries()) {
12713
12768
  if (localeCodes.has(version.id.toLowerCase())) {
12714
12769
  ctx.addIssue({
12715
- code: z69.ZodIssueCode.custom,
12770
+ code: z70.ZodIssueCode.custom,
12716
12771
  message: `Version id "${version.id}" is also a configured locale code — rename the version (e.g. "v${version.id}").`,
12717
12772
  path: ["versions", "archived", position, "id"]
12718
12773
  });
@@ -12723,7 +12778,7 @@ var blumeConfigSchema = z69.strictObject({
12723
12778
  for (const key of Object.keys(typeConfig.frontmatter)) {
12724
12779
  if (Object.hasOwn(config.frontmatter.extend, key)) {
12725
12780
  ctx.addIssue({
12726
- code: z69.ZodIssueCode.custom,
12781
+ code: z70.ZodIssueCode.custom,
12727
12782
  message: `"${key}" is already declared in frontmatter.extend and cannot be redeclared for type "${typeName}".`,
12728
12783
  path: ["content", "types", typeName, "frontmatter", key]
12729
12784
  });
@@ -12732,7 +12787,7 @@ var blumeConfigSchema = z69.strictObject({
12732
12787
  for (const [position, facet] of typeConfig.facets.entries()) {
12733
12788
  if (!(Object.hasOwn(typeConfig.frontmatter, facet) || Object.hasOwn(config.frontmatter.extend, facet))) {
12734
12789
  ctx.addIssue({
12735
- code: z69.ZodIssueCode.custom,
12790
+ code: z70.ZodIssueCode.custom,
12736
12791
  message: `Facet "${facet}" for type "${typeName}" is not a declared custom frontmatter key — add it to the type's frontmatter map or frontmatter.extend.`,
12737
12792
  path: ["content", "types", typeName, "facets", position]
12738
12793
  });
@@ -12741,8 +12796,8 @@ var blumeConfigSchema = z69.strictObject({
12741
12796
  }
12742
12797
  if (config.rateLimit?.kind === "cloudflare" && config.deployment.kind !== "cloudflare") {
12743
12798
  ctx.addIssue({
12744
- code: z69.ZodIssueCode.custom,
12745
- 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".',
12799
+ code: z70.ZodIssueCode.custom,
12800
+ message: 'rateLimit: cloudflare() counts with a Workers binding, so it needs `deployment: cloudflare()` from "blume/deploy". On another host, use upstash(), unkey(), or memory() from "blume/ratelimit".',
12746
12801
  path: ["rateLimit"]
12747
12802
  });
12748
12803
  }
@@ -16447,7 +16502,7 @@ var extractAsyncApiOperations = (document, baseRoute) => {
16447
16502
 
16448
16503
  // src/openapi/overlay.ts
16449
16504
  import { exec, query } from "jsonpath-rfc9535";
16450
- import { z as z70 } from "zod";
16505
+ import { z as z71 } from "zod";
16451
16506
 
16452
16507
  class OverlayError extends Error {
16453
16508
  constructor(message) {
@@ -16470,18 +16525,18 @@ var MERGE_KIND_PHRASE = {
16470
16525
  object: "an object",
16471
16526
  primitive: "a primitive value"
16472
16527
  };
16473
- var actionSchema = z70.looseObject({
16474
- copy: z70.string().optional(),
16475
- description: z70.string().optional(),
16476
- remove: z70.boolean().default(false),
16477
- target: z70.string().min(1),
16478
- update: z70.json().optional()
16528
+ var actionSchema = z71.looseObject({
16529
+ copy: z71.string().optional(),
16530
+ description: z71.string().optional(),
16531
+ remove: z71.boolean().default(false),
16532
+ target: z71.string().min(1),
16533
+ update: z71.json().optional()
16479
16534
  });
16480
- var overlaySchema = z70.looseObject({
16481
- actions: z70.array(actionSchema).min(1),
16482
- extends: z70.string().optional(),
16483
- info: z70.looseObject({ title: z70.string(), version: z70.string() }),
16484
- overlay: z70.string().regex(/^1\.[01]\.\d+$/u, {
16535
+ var overlaySchema = z71.looseObject({
16536
+ actions: z71.array(actionSchema).min(1),
16537
+ extends: z71.string().optional(),
16538
+ info: z71.looseObject({ title: z71.string(), version: z71.string() }),
16539
+ overlay: z71.string().regex(/^1\.[01]\.\d+$/u, {
16485
16540
  message: "must be an Overlay Specification version, 1.0.x or 1.1.x"
16486
16541
  })
16487
16542
  });
@@ -19870,7 +19925,7 @@ import { readdir, readFile as readFile11 } from "node:fs/promises";
19870
19925
  import { builtinModules } from "node:module";
19871
19926
  import { init, parse as parse3 } from "es-module-lexer";
19872
19927
  import { dirname as dirname9, join as join14, relative as relative7 } from "pathe";
19873
- import { z as z71 } from "zod";
19928
+ import { z as z72 } from "zod";
19874
19929
  var BUILTINS = new Set(builtinModules);
19875
19930
  var NON_PACKAGE_PREFIXES = ["node:", "astro:", "virtual:", "data:", "\x00"];
19876
19931
  var packageName = (specifier) => {
@@ -19942,7 +19997,7 @@ var resolvable = (name, from, root) => {
19942
19997
  }
19943
19998
  };
19944
19999
  var MODULE_FILE = /\.(?:m?js|cjs)$/u;
19945
- var vcConfigSchema = z71.looseObject({ handler: z71.string().optional() });
20000
+ var vcConfigSchema = z72.looseObject({ handler: z72.string().optional() });
19946
20001
  var listModules = async (dir) => {
19947
20002
  const files = [];
19948
20003
  const entries = await readdir(dir, { withFileTypes: true });
@@ -20490,7 +20545,7 @@ var resolveProjectContext = (root, config, options) => {
20490
20545
  // src/core/config.ts
20491
20546
  import { existsSync as existsSync10, readFileSync as readFileSync6 } from "node:fs";
20492
20547
  import { basename as basename6 } from "pathe";
20493
- import { z as z73 } from "zod";
20548
+ import { z as z74 } from "zod";
20494
20549
 
20495
20550
  // src/theme/color.ts
20496
20551
  var NAMED = new Map(Object.entries({
@@ -20989,11 +21044,11 @@ import { readFileSync as readFileSync5 } from "node:fs";
20989
21044
  import { tmpdir } from "node:os";
20990
21045
  import { createJiti } from "jiti";
20991
21046
  import { join as join17 } from "pathe";
20992
- import { z as z72 } from "zod";
20993
- var blumeExportsSchema = z72.object({
20994
- exports: z72.record(z72.string(), z72.union([
20995
- z72.string(),
20996
- z72.object({ default: z72.string() }).transform((target) => target.default)
21047
+ import { z as z73 } from "zod";
21048
+ var blumeExportsSchema = z73.object({
21049
+ exports: z73.record(z73.string(), z73.union([
21050
+ z73.string(),
21051
+ z73.object({ default: z73.string() }).transform((target) => target.default)
20997
21052
  ]))
20998
21053
  });
20999
21054
  var aliases;
@@ -21052,8 +21107,8 @@ class ConfigValidationError extends BlumeError {
21052
21107
  }
21053
21108
  }
21054
21109
  var importConfigModule = createDefaultExportLoader();
21055
- var themeFontsProbeSchema = z73.looseObject({
21056
- theme: z73.looseObject({ fonts: z73.unknown().optional() }).optional()
21110
+ var themeFontsProbeSchema = z74.looseObject({
21111
+ theme: z74.looseObject({ fonts: z74.unknown().optional() }).optional()
21057
21112
  });
21058
21113
  var isPathSegment = (segment) => typeof segment !== "symbol";
21059
21114
  var locationPath = (issue) => [
@@ -21162,7 +21217,7 @@ ${moreIssues}`
21162
21217
  };
21163
21218
  };
21164
21219
 
21165
- 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, referenceRoutes, blumeReferences, referenceSpecFiles, hasScalarReferences, builtinProxyReferences, apiPagesUseBuiltinProxy, needsPlaygroundProxy, API_CATALOG_PATH, hasApiCatalog, buildApiCatalog, buildMcpDiscovery, asciiSlugify, buildMcpServerCard, YAML_SCHEMA, frontmatter_default, AGENT_SKILLS_INDEX_PATH, servesSkillsIndex, AI_CATALOG_PATH, ARD_MANIFEST_PATH, hasAiCatalog, buildAiCatalog, buildHomeLinkHeader, resolveLocalizable, sourcesOfKind, resolveDocsCollection, CHANGELOG_INDEX_ROUTE, hasChangelogIndex, withChangelogIndexText, discoverPages, discoverPagesSync, customStaticRoutes, routeIsTaken, hasGeneratedChangelog, navTargetRoutes, customOgRoutes, nextFenceState, resolveRelativeImage, hashText, pollingWatch, snapshotCache, loadWithCache, MARKDOWN_BODY_FEATURES, MDX_BODY_FEATURES, TOC_HIDDEN_KEY, TOC_TEXT_KEY, parseHeadingMarkers, BUILTIN_MDX_TAGS, BUILTIN_CHILD_PROPS, isExpression, pageKey, folderChildKeys, 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, bareRedirect, compileEveryRedirect, matchCompiledRedirect, requestPath, patternDestination, pathsUnderPattern, hasVariables, substituteVariables, undefinedVariables, BUILT_IN_PAGE_META_KEYS, folderMetaSchema, VERSION_ID, VERSION_LIKE, versionizeRoute, versionsDiagnostics, slugify, slugifyPath, unloadablePathDiagnostic, frontmatterYamlDiagnostic, ATTRIBUTE, trailingCurlyMarker, HTML_COMMENT, INLINE_CODE, scanBody, extractHeadings, strippedLineOffset, isStringValue, placeEntryRef, resolveEntryRoute, localizedRoute, normalizeEntry, hasIncludeStatements, expandIncludes, buildIncludeGraph, readExpandedEntryText, rewriteRelativeAssets, collectContentAssets, youtubeEmbedSrc, componentRegistry, downlevelComponentNode, downlevelComponents, isHiddenPage, contentIndexable, buildManifest, buildRssFeeds, renderRssFeed, gradeExternal, probeAll, staticFileResolver, 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, SIGNATURES_DIRECTORY_PATH, buildSignaturesDirectory, SVG_ASSET_HEADERS, mirroredPage, applyBaseToAstroRedirects, isPageIndexFile, withMirrorRedirects, platformRedirects, distDir, adapterRoot, deployPlatform, parseColor, composite, contrastRatio, MIN_TEXT_CONTRAST, themeInk, labelOn, resolveAccent, resolveAction, resolveRadius, buildThemeCss, createModuleLoader, findConfigFile, findComponentsFile, resolveRuntimeDir, resolveProjectContext, ConfigValidationError, loadConfig };
21220
+ 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, referenceRoutes, blumeReferences, referenceSpecFiles, hasScalarReferences, builtinProxyReferences, apiPagesUseBuiltinProxy, needsPlaygroundProxy, API_CATALOG_PATH, hasApiCatalog, buildApiCatalog, buildMcpDiscovery, asciiSlugify, buildMcpServerCard, YAML_SCHEMA, frontmatter_default, AGENT_SKILLS_INDEX_PATH, servesSkillsIndex, AI_CATALOG_PATH, ARD_MANIFEST_PATH, hasAiCatalog, buildAiCatalog, buildHomeLinkHeader, resolveLocalizable, sourcesOfKind, resolveDocsCollection, CHANGELOG_INDEX_ROUTE, hasChangelogIndex, withChangelogIndexText, discoverPages, discoverPagesSync, customStaticRoutes, routeIsTaken, hasGeneratedChangelog, navTargetRoutes, customOgRoutes, nextFenceState, resolveRelativeImage, hashText, pollingWatch, snapshotCache, loadWithCache, MARKDOWN_BODY_FEATURES, MDX_BODY_FEATURES, TOC_HIDDEN_KEY, TOC_TEXT_KEY, parseHeadingMarkers, BUILTIN_MDX_TAGS, BUILTIN_CHILD_PROPS, isExpression, pageKey, folderChildKeys, 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, isBuiltInMcpClient, isPatternPath, bareRedirect, compileEveryRedirect, matchCompiledRedirect, requestPath, patternDestination, pathsUnderPattern, hasVariables, substituteVariables, undefinedVariables, BUILT_IN_PAGE_META_KEYS, folderMetaSchema, VERSION_ID, VERSION_LIKE, versionizeRoute, versionsDiagnostics, slugify, slugifyPath, unloadablePathDiagnostic, frontmatterYamlDiagnostic, ATTRIBUTE, trailingCurlyMarker, HTML_COMMENT, INLINE_CODE, scanBody, extractHeadings, strippedLineOffset, isStringValue, placeEntryRef, resolveEntryRoute, localizedRoute, normalizeEntry, hasIncludeStatements, expandIncludes, buildIncludeGraph, readExpandedEntryText, rewriteRelativeAssets, collectContentAssets, youtubeEmbedSrc, componentRegistry, downlevelComponentNode, downlevelComponents, isHiddenPage, contentIndexable, buildManifest, buildRssFeeds, renderRssFeed, gradeExternal, probeAll, staticFileResolver, 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, SIGNATURES_DIRECTORY_PATH, buildSignaturesDirectory, SVG_ASSET_HEADERS, mirroredPage, applyBaseToAstroRedirects, isPageIndexFile, withMirrorRedirects, platformRedirects, distDir, adapterRoot, deployPlatform, parseColor, composite, contrastRatio, MIN_TEXT_CONTRAST, themeInk, labelOn, resolveAccent, resolveAction, resolveRadius, buildThemeCss, createModuleLoader, findConfigFile, findComponentsFile, resolveRuntimeDir, resolveProjectContext, ConfigValidationError, loadConfig };
21166
21221
 
21167
- //# debugId=8027E8A68DF7C48F64756E2164756E21
21168
- //# sourceMappingURL=chunk-dm4mg9bj.js.map
21222
+ //# debugId=1BA20ABDE3123AC364756E2164756E21
21223
+ //# sourceMappingURL=chunk-r5nm9w0c.js.map