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