@bagelink/blox 1.18.3 → 1.18.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/{PreviewApp-BKrLRDBC.js → PreviewApp-9H9-jLVN.js} +1 -1
  2. package/dist/{PreviewApp-Kb3uTwtH.cjs → PreviewApp-D8ZBTG0j.cjs} +1 -1
  3. package/dist/{PreviewApp.vue_vue_type_style_index_0_lang-AC3W0NSJ.cjs → PreviewApp.vue_vue_type_style_index_0_lang-BYCayJs0.cjs} +1 -1
  4. package/dist/{PreviewApp.vue_vue_type_style_index_0_lang-BMGv1eSR.js → PreviewApp.vue_vue_type_style_index_0_lang-BwiLyRBw.js} +1 -1
  5. package/dist/{appRuntime-CWlPH_5r.js → appRuntime-DZSCSsnS.js} +39 -156
  6. package/dist/{appRuntime-BU2Ls-Y7.cjs → appRuntime-Z0AxTPxf.cjs} +17 -134
  7. package/dist/composables/useLocale.d.ts +3 -0
  8. package/dist/composables/useLocale.d.ts.map +1 -1
  9. package/dist/composables/useLocaleNav.d.ts.map +1 -1
  10. package/dist/createBloxApp.d.ts.map +1 -1
  11. package/dist/hydration.d.ts +2 -0
  12. package/dist/hydration.d.ts.map +1 -1
  13. package/dist/index.cjs +16 -9
  14. package/dist/index.d.ts +2 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.mjs +44 -36
  17. package/dist/localeStrategy-OwRIn35C.cjs +207 -0
  18. package/dist/localeStrategy-hXlNof1E.js +208 -0
  19. package/dist/localeStrategy.d.ts +21 -0
  20. package/dist/localeStrategy.d.ts.map +1 -1
  21. package/dist/{shard-runner-zmTY7v3n.cjs → shard-runner-Bz46UqN8.cjs} +16 -7
  22. package/dist/{shard-runner-yZNy6pQy.js → shard-runner-CoFcUVGe.js} +17 -8
  23. package/dist/ssg/cli.cjs +10 -2
  24. package/dist/ssg/cli.mjs +10 -2
  25. package/dist/ssg/cms-routes.d.ts +7 -0
  26. package/dist/ssg/cms-routes.d.ts.map +1 -1
  27. package/dist/ssg/index.cjs +4 -2
  28. package/dist/ssg/index.mjs +19 -17
  29. package/dist/ssg/prerender.d.ts +5 -1
  30. package/dist/ssg/prerender.d.ts.map +1 -1
  31. package/dist/ssg/render-resolved-page.d.ts +2 -0
  32. package/dist/ssg/render-resolved-page.d.ts.map +1 -1
  33. package/dist/ssg/shard-runner.d.ts +3 -0
  34. package/dist/ssg/shard-runner.d.ts.map +1 -1
  35. package/dist/ssg/validate-output.d.ts +9 -0
  36. package/dist/ssg/validate-output.d.ts.map +1 -1
  37. package/dist/{validate-output-3fNPagvj.js → validate-output-B8pmE7hf.js} +115 -28
  38. package/dist/{validate-output-CrhXrC1l.cjs → validate-output-CbIQrCwa.cjs} +99 -12
  39. package/package.json +125 -124
  40. package/LICENSE +0 -21
  41. package/dist/pageTitle-B1mtDJKn.js +0 -59
  42. package/dist/pageTitle-wobGhtiZ.cjs +0 -58
@@ -26,7 +26,7 @@ const node_child_process = require("node:child_process");
26
26
  const os = require("node:os");
27
27
  const path = require("node:path");
28
28
  const process = require("node:process");
29
- const llmArtifacts = require("./validate-output-CrhXrC1l.cjs");
29
+ const llmArtifacts = require("./validate-output-CbIQrCwa.cjs");
30
30
  const AUTO_SHARD_CAP = Number(process.env.BLOX_SSG_SHARD_CAP) || 6;
31
31
  const PREFETCH_BUDGET = Number(process.env.BLOX_SSG_PREFETCH_BUDGET) || 24;
32
32
  const SEQUENTIAL_SHARDS = process.env.BLOX_SSG_SEQUENTIAL === "1";
@@ -39,6 +39,9 @@ function matchesCmsPath(pathname, cmsPaths) {
39
39
  }
40
40
  return false;
41
41
  }
42
+ function sitemapRoutesForWebsite(routes, siteNoindex) {
43
+ return siteNoindex ? routes : routes.filter((route) => !route.noindex);
44
+ }
42
45
  function resolveShardCount(shards) {
43
46
  if (shards === "auto") {
44
47
  const cores = os.cpus().length || 4;
@@ -92,7 +95,7 @@ function runShard(index, total, paths, opts, llmPartsDir, routePartsDir, siteDat
92
95
  });
93
96
  }
94
97
  async function runSharded(opts) {
95
- var _a, _b;
98
+ var _a, _b, _c, _d;
96
99
  const total = resolveShardCount(opts.shards);
97
100
  const fs = await import("node:fs/promises");
98
101
  const paths = [...opts.extraPaths];
@@ -164,9 +167,9 @@ async function runSharded(opts) {
164
167
  );
165
168
  return failed[0].code;
166
169
  }
167
- if (process.env.BLOX_SSG_LLM !== "0") {
170
+ if (process.env.BLOX_SSG_LLM !== "0" && !((_a = website == null ? void 0 : website.seo) == null ? void 0 : _a.noindex)) {
168
171
  try {
169
- const { mergeLlmParts } = await Promise.resolve().then(() => require("./validate-output-CrhXrC1l.cjs")).then((n) => n.llmArtifacts);
172
+ const { mergeLlmParts } = await Promise.resolve().then(() => require("./validate-output-CbIQrCwa.cjs")).then((n) => n.llmArtifacts);
170
173
  const mergeWebsite = website;
171
174
  const partFiles = Array.from({ length: total }, (_, i) => path.join(llmPartsDir, `part.${i}.json`));
172
175
  const { pages } = await mergeLlmParts({
@@ -185,8 +188,11 @@ async function runSharded(opts) {
185
188
  return JSON.parse(await fs.readFile(file, "utf8"));
186
189
  }));
187
190
  const byUrl = new Map(routeParts.flat().map((route) => [route.url, route]));
188
- const canonicalBase = (((_a = website.seo) == null ? void 0 : _a.canonical_base_url) || website.domain || "").replace(/\/$/, "");
189
- const indexableRoutes = [...byUrl.values()].filter((route) => !route.noindex);
191
+ const canonicalBase = (((_b = website.seo) == null ? void 0 : _b.canonical_base_url) || website.domain || "").replace(/\/$/, "");
192
+ const indexableRoutes = sitemapRoutesForWebsite(
193
+ [...byUrl.values()],
194
+ (_c = website.seo) == null ? void 0 : _c.noindex
195
+ );
190
196
  if (canonicalBase && indexableRoutes.length > 0) {
191
197
  const artifacts = llmArtifacts.generateSitemapArtifacts({
192
198
  routes: indexableRoutes.map((route) => ({
@@ -196,7 +202,7 @@ async function runSharded(opts) {
196
202
  canonicalBase,
197
203
  defaultLocale: website.default_locale,
198
204
  supportedLocales: website.supported_locales,
199
- splitByLocale: (_b = website.seo) == null ? void 0 : _b.sitemap_split_by_locale
205
+ splitByLocale: (_d = website.seo) == null ? void 0 : _d.sitemap_split_by_locale
200
206
  });
201
207
  for (const artifact of artifacts) {
202
208
  await fs.writeFile(
@@ -209,8 +215,11 @@ async function runSharded(opts) {
209
215
  await fs.rm(routePartsDir, { recursive: true, force: true });
210
216
  await fs.rm(siteDataFile, { force: true }).catch(() => {
211
217
  });
218
+ await llmArtifacts.validateNoRedirectingLinks(path.resolve("dist"));
219
+ console.log("[blox-ssg] validated internal links (no redirecting URLs)");
212
220
  console.log(`[blox-ssg] sharded run done in ${((Date.now() - start) / 1e3).toFixed(1)}s`);
213
221
  return 0;
214
222
  }
215
223
  exports.matchesCmsPath = matchesCmsPath;
216
224
  exports.runSharded = runSharded;
225
+ exports.sitemapRoutesForWebsite = sitemapRoutesForWebsite;
@@ -2,7 +2,7 @@ import { spawn } from "node:child_process";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
4
  import process from "node:process";
5
- import { f as fetchCmsSiteData, g as generateSitemapArtifacts } from "./validate-output-3fNPagvj.js";
5
+ import { f as fetchCmsSiteData, g as generateSitemapArtifacts, d as validateNoRedirectingLinks } from "./validate-output-B8pmE7hf.js";
6
6
  const AUTO_SHARD_CAP = Number(process.env.BLOX_SSG_SHARD_CAP) || 6;
7
7
  const PREFETCH_BUDGET = Number(process.env.BLOX_SSG_PREFETCH_BUDGET) || 24;
8
8
  const SEQUENTIAL_SHARDS = process.env.BLOX_SSG_SEQUENTIAL === "1";
@@ -15,6 +15,9 @@ function matchesCmsPath(pathname, cmsPaths) {
15
15
  }
16
16
  return false;
17
17
  }
18
+ function sitemapRoutesForWebsite(routes, siteNoindex) {
19
+ return siteNoindex ? routes : routes.filter((route) => !route.noindex);
20
+ }
18
21
  function resolveShardCount(shards) {
19
22
  if (shards === "auto") {
20
23
  const cores = os.cpus().length || 4;
@@ -68,7 +71,7 @@ function runShard(index, total, paths, opts, llmPartsDir, routePartsDir, siteDat
68
71
  });
69
72
  }
70
73
  async function runSharded(opts) {
71
- var _a, _b;
74
+ var _a, _b, _c, _d;
72
75
  const total = resolveShardCount(opts.shards);
73
76
  const fs = await import("node:fs/promises");
74
77
  const paths = [...opts.extraPaths];
@@ -140,9 +143,9 @@ async function runSharded(opts) {
140
143
  );
141
144
  return failed[0].code;
142
145
  }
143
- if (process.env.BLOX_SSG_LLM !== "0") {
146
+ if (process.env.BLOX_SSG_LLM !== "0" && !((_a = website == null ? void 0 : website.seo) == null ? void 0 : _a.noindex)) {
144
147
  try {
145
- const { mergeLlmParts } = await import("./validate-output-3fNPagvj.js").then((n) => n.C);
148
+ const { mergeLlmParts } = await import("./validate-output-B8pmE7hf.js").then((n) => n.D);
146
149
  const mergeWebsite = website;
147
150
  const partFiles = Array.from({ length: total }, (_, i) => path.join(llmPartsDir, `part.${i}.json`));
148
151
  const { pages } = await mergeLlmParts({
@@ -161,8 +164,11 @@ async function runSharded(opts) {
161
164
  return JSON.parse(await fs.readFile(file, "utf8"));
162
165
  }));
163
166
  const byUrl = new Map(routeParts.flat().map((route) => [route.url, route]));
164
- const canonicalBase = (((_a = website.seo) == null ? void 0 : _a.canonical_base_url) || website.domain || "").replace(/\/$/, "");
165
- const indexableRoutes = [...byUrl.values()].filter((route) => !route.noindex);
167
+ const canonicalBase = (((_b = website.seo) == null ? void 0 : _b.canonical_base_url) || website.domain || "").replace(/\/$/, "");
168
+ const indexableRoutes = sitemapRoutesForWebsite(
169
+ [...byUrl.values()],
170
+ (_c = website.seo) == null ? void 0 : _c.noindex
171
+ );
166
172
  if (canonicalBase && indexableRoutes.length > 0) {
167
173
  const artifacts = generateSitemapArtifacts({
168
174
  routes: indexableRoutes.map((route) => ({
@@ -172,7 +178,7 @@ async function runSharded(opts) {
172
178
  canonicalBase,
173
179
  defaultLocale: website.default_locale,
174
180
  supportedLocales: website.supported_locales,
175
- splitByLocale: (_b = website.seo) == null ? void 0 : _b.sitemap_split_by_locale
181
+ splitByLocale: (_d = website.seo) == null ? void 0 : _d.sitemap_split_by_locale
176
182
  });
177
183
  for (const artifact of artifacts) {
178
184
  await fs.writeFile(
@@ -185,10 +191,13 @@ async function runSharded(opts) {
185
191
  await fs.rm(routePartsDir, { recursive: true, force: true });
186
192
  await fs.rm(siteDataFile, { force: true }).catch(() => {
187
193
  });
194
+ await validateNoRedirectingLinks(path.resolve("dist"));
195
+ console.log("[blox-ssg] validated internal links (no redirecting URLs)");
188
196
  console.log(`[blox-ssg] sharded run done in ${((Date.now() - start) / 1e3).toFixed(1)}s`);
189
197
  return 0;
190
198
  }
191
199
  export {
192
200
  matchesCmsPath,
193
- runSharded
201
+ runSharded,
202
+ sitemapRoutesForWebsite
194
203
  };
package/dist/ssg/cli.cjs CHANGED
@@ -3,7 +3,8 @@
3
3
  const process = require("node:process");
4
4
  const fs = require("node:fs/promises");
5
5
  const ssg_buildGrant = require("./build-grant.cjs");
6
- const llmArtifacts = require("../validate-output-CrhXrC1l.cjs");
6
+ const llmArtifacts = require("../validate-output-CbIQrCwa.cjs");
7
+ const localeStrategy = require("../localeStrategy-OwRIn35C.cjs");
7
8
  function installFetchTimeout() {
8
9
  const ms = Number(process.env.BLOX_SSG_FETCH_TIMEOUT_MS) || 2e4;
9
10
  const original = globalThis.fetch;
@@ -147,7 +148,7 @@ Environment:
147
148
  if (shardsOpt !== null || routesCmd) {
148
149
  const { apiBase: apiBase2, websiteName: configWebsiteName2 } = await resolveApiBase(mode);
149
150
  const websiteName2 = process.env.WEBSITE_NAME ?? configWebsiteName2 ?? "default";
150
- const { runSharded } = await Promise.resolve().then(() => require("../shard-runner-zmTY7v3n.cjs"));
151
+ const { runSharded } = await Promise.resolve().then(() => require("../shard-runner-Bz46UqN8.cjs"));
151
152
  const code = await runSharded({
152
153
  shards: shardsOpt ?? "auto",
153
154
  mode,
@@ -183,6 +184,7 @@ Environment:
183
184
  let cmsPathSet = /* @__PURE__ */ new Set();
184
185
  let cachedAppPaths = [];
185
186
  let collectionItems;
187
+ let pageSlugMap = {};
186
188
  const productionBuild = process.env.NODE_ENV === "production" || mode === "production";
187
189
  try {
188
190
  const siteData = siteDataFile ? JSON.parse(await fs.readFile(siteDataFile, "utf8")) : await llmArtifacts.fetchCmsSiteData(apiBase, websiteName, buildRequest);
@@ -193,6 +195,8 @@ Environment:
193
195
  websiteId = siteData.websiteId;
194
196
  redirects = siteData.redirects;
195
197
  collectionItems = siteData.collectionItems;
198
+ localeStrategy.setPageSlugMap(siteData.pageSlugMap);
199
+ pageSlugMap = siteData.pageSlugMap ?? {};
196
200
  if (!siteDataFile) {
197
201
  console.log(` Found ${paths.length} CMS routes`);
198
202
  if (redirects.length > 0) console.log(` Found ${redirects.length} redirects`);
@@ -247,6 +251,9 @@ Environment:
247
251
  website,
248
252
  websiteId,
249
253
  redirects,
254
+ // Canonical localized page paths, injected into each document's
255
+ // hydration payload so client-side links resolve without a redirect.
256
+ pageSlugMap,
250
257
  // LLM artifacts (llms.txt, llms-full.txt, per-page JSON-LD). On by
251
258
  // default; opt out with BLOX_SSG_LLM=0. Skip the *file* artifacts when
252
259
  // sharding (>1 shard) because the writing shard only has its own slice of
@@ -288,6 +295,7 @@ ${"=".repeat(60)}`);
288
295
  }
289
296
  if (validateOutput && shardTotal === 1) {
290
297
  await llmArtifacts.validateInternalLinks("dist");
298
+ await llmArtifacts.validateNoRedirectingLinks("dist");
291
299
  console.log("[blox-ssg] validated internal links");
292
300
  }
293
301
  if (productionBuild && shardTotal === 1) {
package/dist/ssg/cli.mjs CHANGED
@@ -2,7 +2,8 @@
2
2
  import process from "node:process";
3
3
  import fs from "node:fs/promises";
4
4
  import { resolveBloxBuildGrant } from "./build-grant.mjs";
5
- import { v as validateSsgOutput, u as uploadBloxManifest, p as polyfillBloxSsgGlobals, f as fetchCmsSiteData, b as buildCollectionResolver, a as prerender, c as validateInternalLinks } from "../validate-output-3fNPagvj.js";
5
+ import { v as validateSsgOutput, u as uploadBloxManifest, p as polyfillBloxSsgGlobals, f as fetchCmsSiteData, b as buildCollectionResolver, a as prerender, c as validateInternalLinks, d as validateNoRedirectingLinks } from "../validate-output-B8pmE7hf.js";
6
+ import { s as setPageSlugMap } from "../localeStrategy-hXlNof1E.js";
6
7
  function installFetchTimeout() {
7
8
  const ms = Number(process.env.BLOX_SSG_FETCH_TIMEOUT_MS) || 2e4;
8
9
  const original = globalThis.fetch;
@@ -146,7 +147,7 @@ Environment:
146
147
  if (shardsOpt !== null || routesCmd) {
147
148
  const { apiBase: apiBase2, websiteName: configWebsiteName2 } = await resolveApiBase(mode);
148
149
  const websiteName2 = process.env.WEBSITE_NAME ?? configWebsiteName2 ?? "default";
149
- const { runSharded } = await import("../shard-runner-yZNy6pQy.js");
150
+ const { runSharded } = await import("../shard-runner-CoFcUVGe.js");
150
151
  const code = await runSharded({
151
152
  shards: shardsOpt ?? "auto",
152
153
  mode,
@@ -182,6 +183,7 @@ Environment:
182
183
  let cmsPathSet = /* @__PURE__ */ new Set();
183
184
  let cachedAppPaths = [];
184
185
  let collectionItems;
186
+ let pageSlugMap = {};
185
187
  const productionBuild = process.env.NODE_ENV === "production" || mode === "production";
186
188
  try {
187
189
  const siteData = siteDataFile ? JSON.parse(await fs.readFile(siteDataFile, "utf8")) : await fetchCmsSiteData(apiBase, websiteName, buildRequest);
@@ -192,6 +194,8 @@ Environment:
192
194
  websiteId = siteData.websiteId;
193
195
  redirects = siteData.redirects;
194
196
  collectionItems = siteData.collectionItems;
197
+ setPageSlugMap(siteData.pageSlugMap);
198
+ pageSlugMap = siteData.pageSlugMap ?? {};
195
199
  if (!siteDataFile) {
196
200
  console.log(` Found ${paths.length} CMS routes`);
197
201
  if (redirects.length > 0) console.log(` Found ${redirects.length} redirects`);
@@ -246,6 +250,9 @@ Environment:
246
250
  website,
247
251
  websiteId,
248
252
  redirects,
253
+ // Canonical localized page paths, injected into each document's
254
+ // hydration payload so client-side links resolve without a redirect.
255
+ pageSlugMap,
249
256
  // LLM artifacts (llms.txt, llms-full.txt, per-page JSON-LD). On by
250
257
  // default; opt out with BLOX_SSG_LLM=0. Skip the *file* artifacts when
251
258
  // sharding (>1 shard) because the writing shard only has its own slice of
@@ -287,6 +294,7 @@ ${"=".repeat(60)}`);
287
294
  }
288
295
  if (validateOutput && shardTotal === 1) {
289
296
  await validateInternalLinks("dist");
297
+ await validateNoRedirectingLinks("dist");
290
298
  console.log("[blox-ssg] validated internal links");
291
299
  }
292
300
  if (productionBuild && shardTotal === 1) {
@@ -12,6 +12,13 @@ export interface CmsSiteData {
12
12
  paths: string[];
13
13
  /** Locale-qualified published CMS page slugs, including dynamic templates. */
14
14
  pageSlugs: string[];
15
+ /**
16
+ * Canonical localized path per locale for every static CMS page, keyed by its
17
+ * default-locale path (`{ "/about-us": { en, es, fr, it, nl } }`).
18
+ * `LocaleStrategy.toPath()` uses it to emit canonical links instead of
19
+ * default-locale slugs behind a redirect.
20
+ */
21
+ pageSlugMap: Record<string, Record<string, string>>;
15
22
  redirects: RedirectEntry[];
16
23
  /** Datastore collections referenced by any page's data_bindings. */
17
24
  collections: CollectionRef[];
@@ -1 +1 @@
1
- {"version":3,"file":"cms-routes.d.ts","sourceRoot":"","sources":["../../src/ssg/cms-routes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAoB9D,2EAA2E;AAC3E,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,WAAW;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,WAAW,CAAA;IACpB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,8EAA8E;IAC9E,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,SAAS,EAAE,aAAa,EAAE,CAAA;IAC1B,oEAAoE;IACpE,WAAW,EAAE,aAAa,EAAE,CAAA;IAC5B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;CAC3D;AAYD;;;GAGG;AACH,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,MAAM,EAAE,EACf,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,MAAM,EAAE,GACxB,MAAM,EAAE,CASV;AAMD;;;GAGG;AACH,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,cAAc,GAAE,uBAA4B,GAC1C,OAAO,CAAC,WAAW,CAAC,CA2KtB;AAkID,MAAM,MAAM,kBAAkB,GAAG,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,KACrE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;AAE9C;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACtC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,GACxD,kBAAkB,CAapB"}
1
+ {"version":3,"file":"cms-routes.d.ts","sourceRoot":"","sources":["../../src/ssg/cms-routes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAoB9D,2EAA2E;AAC3E,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,WAAW;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,WAAW,CAAA;IACpB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,8EAA8E;IAC9E,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB;;;;;OAKG;IACH,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACnD,SAAS,EAAE,aAAa,EAAE,CAAA;IAC1B,oEAAoE;IACpE,WAAW,EAAE,aAAa,EAAE,CAAA;IAC5B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;CAC3D;AAwCD;;;GAGG;AACH,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,MAAM,EAAE,EACf,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,MAAM,EAAE,GACxB,MAAM,EAAE,CASV;AAMD;;;GAGG;AACH,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,cAAc,GAAE,uBAA4B,GAC1C,OAAO,CAAC,WAAW,CAAC,CAuLtB;AAkID,MAAM,MAAM,kBAAkB,GAAG,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,KACrE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;AAE9C;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACtC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,GACxD,kBAAkB,CAapB"}
@@ -22,11 +22,11 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
22
22
  mod
23
23
  ));
24
24
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
25
- const llmArtifacts = require("../validate-output-CrhXrC1l.cjs");
25
+ const llmArtifacts = require("../validate-output-CbIQrCwa.cjs");
26
26
  const ssg_buildGrant = require("./build-grant.cjs");
27
27
  const ssg_client = require("../client-AoDTJJXJ.cjs");
28
28
  const vue = require("vue");
29
- const appRuntime = require("../appRuntime-BU2Ls-Y7.cjs");
29
+ const appRuntime = require("../appRuntime-Z0AxTPxf.cjs");
30
30
  const index = require("../index-DUjEj7ts.cjs");
31
31
  async function renderBloxSsgPage(options) {
32
32
  var _a, _b, _c, _d;
@@ -41,6 +41,7 @@ async function renderBloxSsgPage(options) {
41
41
  locale,
42
42
  website = null,
43
43
  websiteId = "",
44
+ pageSlugMap = {},
44
45
  llm
45
46
  } = options;
46
47
  if (resolvedData != null && !websiteId) {
@@ -72,6 +73,7 @@ async function renderBloxSsgPage(options) {
72
73
  version: 2,
73
74
  ...resolvedData != null ? { route: { path: stateKey, resolved: resolvedData } } : {},
74
75
  ...websiteId ? { websiteId } : {},
76
+ ...Object.keys(pageSlugMap).length ? { pageSlugMap } : {},
75
77
  data: bloxData
76
78
  })};${"<"}/script>`;
77
79
  let head = llmArtifacts.buildPageHead({
@@ -1,9 +1,9 @@
1
- import { d as buildPageHead, e as primaryContextEntry, h as buildJsonLd, i as extractPageText, B as BloxBuildResponseError, j as bloxBuildJson } from "../validate-output-3fNPagvj.js";
2
- import { k, l, f, m, n, o, q, g, r, s, t, w, x, y, p, a, z, A, u, c, v } from "../validate-output-3fNPagvj.js";
1
+ import { e as buildPageHead, h as primaryContextEntry, i as buildJsonLd, j as extractPageText, B as BloxBuildResponseError, k as bloxBuildJson } from "../validate-output-B8pmE7hf.js";
2
+ import { l, m, f, n, o, q, r, g, s, t, w, x, y, z, p, a, A, C, u, c, v } from "../validate-output-B8pmE7hf.js";
3
3
  import { parseBloxBuildGrantBody, resolveBloxBuildGrant } from "./build-grant.mjs";
4
4
  import { a as BLOX_HYDRATION_WINDOW_KEY } from "../client-Ce9fRCGH.js";
5
5
  import { createSSRApp, h, Suspense } from "vue";
6
- import { c as collectBloxData, a as collectBloxSeo, p as provideBloxData, b as provideBloxLocale, B as BLOX_SSR_ROUTE_STATE_KEY, i as installBloxRuntime, s as setActiveLocale } from "../appRuntime-CWlPH_5r.js";
6
+ import { c as collectBloxData, a as collectBloxSeo, p as provideBloxData, b as provideBloxLocale, B as BLOX_SSR_ROUTE_STATE_KEY, i as installBloxRuntime, s as setActiveLocale } from "../appRuntime-DZSCSsnS.js";
7
7
  import { provideBloxApi, getCollectionResolver } from "../index-I81QTzv-.js";
8
8
  async function renderBloxSsgPage(options) {
9
9
  var _a, _b, _c, _d;
@@ -18,6 +18,7 @@ async function renderBloxSsgPage(options) {
18
18
  locale,
19
19
  website = null,
20
20
  websiteId = "",
21
+ pageSlugMap = {},
21
22
  llm
22
23
  } = options;
23
24
  if (resolvedData != null && !websiteId) {
@@ -49,6 +50,7 @@ async function renderBloxSsgPage(options) {
49
50
  version: 2,
50
51
  ...resolvedData != null ? { route: { path: stateKey, resolved: resolvedData } } : {},
51
52
  ...websiteId ? { websiteId } : {},
53
+ ...Object.keys(pageSlugMap).length ? { pageSlugMap } : {},
52
54
  data: bloxData
53
55
  })};${"<"}/script>`;
54
56
  let head = buildPageHead({
@@ -414,34 +416,34 @@ export {
414
416
  BLOX_HYDRATION_WINDOW_KEY,
415
417
  BloxBuildResponseError,
416
418
  bloxBuildJson,
417
- k as bloxBuildRequest,
419
+ l as bloxBuildRequest,
418
420
  buildJsonLd,
419
421
  buildPageHead,
420
- l as buildSiteHead,
422
+ m as buildSiteHead,
421
423
  createBloxSSREntry,
422
424
  extractPageText,
423
425
  f as fetchCmsSiteData,
424
426
  fetchDatastoreSnapshot,
425
- m as generateLlmsFullTxt,
426
- n as generateLlmsTxt,
427
- o as generateNetlifyRedirects,
428
- q as generateRobotsTxt,
427
+ n as generateLlmsFullTxt,
428
+ o as generateLlmsTxt,
429
+ q as generateNetlifyRedirects,
430
+ r as generateRobotsTxt,
429
431
  g as generateSitemapArtifacts,
430
- r as generateSitemapIndexXml,
431
- s as generateSitemapXml,
432
- t as getBloxBuildRequestOptions,
433
- w as getSiteIconFlags,
434
- x as localeSitemapPath,
435
- y as mergeLlmParts,
432
+ s as generateSitemapIndexXml,
433
+ t as generateSitemapXml,
434
+ w as getBloxBuildRequestOptions,
435
+ x as getSiteIconFlags,
436
+ y as localeSitemapPath,
437
+ z as mergeLlmParts,
436
438
  parseBloxBuildGrantBody,
437
439
  p as polyfillBloxSsgGlobals,
438
440
  a as prerender,
439
441
  querySnapshotRows,
440
442
  renderBloxSsgPage,
441
443
  resolveBloxBuildGrant,
442
- z as resolveManifestProvenance,
444
+ A as resolveManifestProvenance,
443
445
  snapshotRows,
444
- A as splitSitemapPathsByLocale,
446
+ C as splitSitemapPathsByLocale,
445
447
  u as uploadBloxManifest,
446
448
  c as validateInternalLinks,
447
449
  v as validateSsgOutput
@@ -34,6 +34,8 @@ export interface PrerenderOptions {
34
34
  websiteId?: string;
35
35
  /** Redirects to write as _redirects (Netlify). */
36
36
  redirects?: RedirectEntry[];
37
+ /** Canonical localized page paths, embedded in each document's hydration payload. */
38
+ pageSlugMap?: Record<string, Record<string, string>>;
37
39
  /** LLM artifacts config (llms.txt, llms-full.txt, per-page JSON-LD). */
38
40
  llm?: LlmArtifactsConfig;
39
41
  }
@@ -44,6 +46,8 @@ export interface RenderContext {
44
46
  website?: WebsiteRead | null;
45
47
  /** Resolved website ID for client embedding. */
46
48
  websiteId?: string;
49
+ /** Canonical localized page paths, embedded in the hydration payload. */
50
+ pageSlugMap?: Record<string, Record<string, string>>;
47
51
  /**
48
52
  * Pre-resolved page data keyed by render URL. When the prerender producer has
49
53
  * already fetched a URL's `/resolve-path` result, the SSR entry reads it from
@@ -98,7 +102,7 @@ export declare function prerender({ root, clientOutDir, serverEntry, paths, craw
98
102
  * sharded runner divides a global budget by the shard count. 0 disables
99
103
  * prefetch (render resolves inline). Default 8.
100
104
  */
101
- resolvePrefetchConcurrency, appPaths, includeRoot, routePartsFile, mode, website, websiteId, redirects, llm, }?: PrerenderOptions): Promise<PrerenderResult>;
105
+ resolvePrefetchConcurrency, appPaths, includeRoot, routePartsFile, mode, website, websiteId, redirects, pageSlugMap, llm, }?: PrerenderOptions): Promise<PrerenderResult>;
102
106
  /**
103
107
  * Collect `<link rel="preload">` tags for the web fonts a page is likely to use.
104
108
  *
@@ -1 +1 @@
1
- {"version":3,"file":"prerender.d.ts","sourceRoot":"","sources":["../../src/ssg/prerender.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prerender.d.ts","sourceRoot":"","sources":["../../src/ssg/prerender.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,8 @@ export declare function renderBloxSsgPage<TApp>(options: {
39
39
  website?: WebsiteRead | null;
40
40
  /** Resolved website ID — embedded so client skips GET /blox/websites. */
41
41
  websiteId?: string;
42
+ /** Canonical localized page paths, embedded for client-side link resolution. */
43
+ pageSlugMap?: Record<string, Record<string, string>>;
42
44
  /** LLM artifacts config — gates JSON-LD injection + llms.txt text capture. */
43
45
  llm?: LlmArtifactsConfig;
44
46
  }): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"render-resolved-page.d.ts","sourceRoot":"","sources":["../../src/ssg/render-resolved-page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAGpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAGvE,UAAU,cAAc;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5B;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE;IACtD,GAAG,EAAE,MAAM,CAAA;IACX,YAAY,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5B,cAAc,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IACxE,eAAe,EAAE,CAChB,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,OAAO,GAAG,IAAI,EAC5B,QAAQ,EAAE,MAAM,KACZ;QAAE,GAAG,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,iBAAiB,CAAC;QAAC,YAAY,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAA;IAC9E,8EAA8E;IAC9E,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrE,sEAAsE;IACtE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,WAAW,CAAA;IACxD;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,+EAA+E;IAC/E,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IAC5B,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8EAA8E;IAC9E,GAAG,CAAC,EAAE,kBAAkB,CAAA;CACxB,GAAG,OAAO,CAAC;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,GAAG,CAAC,EAAE,YAAY,CAAA;CAClB,CAAC,CA8GD;AAED,yFAAyF;AACzF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE/C"}
1
+ {"version":3,"file":"render-resolved-page.d.ts","sourceRoot":"","sources":["../../src/ssg/render-resolved-page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAGpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAGvE,UAAU,cAAc;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5B;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE;IACtD,GAAG,EAAE,MAAM,CAAA;IACX,YAAY,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5B,cAAc,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IACxE,eAAe,EAAE,CAChB,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,OAAO,GAAG,IAAI,EAC5B,QAAQ,EAAE,MAAM,KACZ;QAAE,GAAG,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,iBAAiB,CAAC;QAAC,YAAY,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAA;IAC9E,8EAA8E;IAC9E,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrE,sEAAsE;IACtE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,WAAW,CAAA;IACxD;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,+EAA+E;IAC/E,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IAC5B,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACpD,8EAA8E;IAC9E,GAAG,CAAC,EAAE,kBAAkB,CAAA;CACxB,GAAG,OAAO,CAAC;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,GAAG,CAAC,EAAE,YAAY,CAAA;CAClB,CAAC,CAgHD;AAED,yFAAyF;AACzF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE/C"}
@@ -23,6 +23,9 @@ export interface ShardRunnerOptions {
23
23
  routesCmd?: string;
24
24
  }
25
25
  export declare function matchesCmsPath(pathname: string, cmsPaths: Set<string>): boolean;
26
+ export declare function sitemapRoutesForWebsite<T extends {
27
+ noindex: boolean;
28
+ }>(routes: T[], siteNoindex: boolean | undefined): T[];
26
29
  /**
27
30
  * Coordinate a sharded prerender. Returns the process exit code.
28
31
  */
@@ -1 +1 @@
1
- {"version":3,"file":"shard-runner.d.ts","sourceRoot":"","sources":["../../src/ssg/shard-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAI9D,MAAM,WAAW,kBAAkB;IAClC,qDAAqD;IACrD,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAA;IACZ,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAA;IACf,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAA;IACnB,yEAAyE;IACzE,YAAY,CAAC,EAAE,uBAAuB,CAAA;IACtC,iFAAiF;IACjF,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,8FAA8F;IAC9F,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAWD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAQ/E;AAsED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqJ1E"}
1
+ {"version":3,"file":"shard-runner.d.ts","sourceRoot":"","sources":["../../src/ssg/shard-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAK9D,MAAM,WAAW,kBAAkB;IAClC,qDAAqD;IACrD,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAA;IACZ,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAA;IACf,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAA;IACnB,yEAAyE;IACzE,YAAY,CAAC,EAAE,uBAAuB,CAAA;IACtC,iFAAiF;IACjF,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,8FAA8F;IAC9F,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAWD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAQ/E;AAED,wBAAgB,uBAAuB,CAAC,CAAC,SAAS;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,EACrE,MAAM,EAAE,CAAC,EAAE,EACX,WAAW,EAAE,OAAO,GAAG,SAAS,GAC9B,CAAC,EAAE,CAIL;AAsED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgK1E"}
@@ -26,5 +26,14 @@ export interface ValidateSsgOutputOptions {
26
26
  */
27
27
  checkInternalLinks?: boolean;
28
28
  }
29
+ /**
30
+ * Fail when a prerendered page links to a URL that Netlify will redirect.
31
+ *
32
+ * Links must point at canonical URLs: a link to a redirect source (e.g.
33
+ * `/es/get-the-best-offer` → `/es/consigue-la-mejor-oferta`) costs a hop on
34
+ * every click and shows up as an internal redirect chain in crawlers. Redirects
35
+ * remain for external/legacy URLs only.
36
+ */
37
+ export declare function validateNoRedirectingLinks(outDir: string): Promise<void>;
29
38
  export declare function validateSsgOutput(options: ValidateSsgOutputOptions): Promise<void>;
30
39
  //# sourceMappingURL=validate-output.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate-output.d.ts","sourceRoot":"","sources":["../../src/ssg/validate-output.ts"],"names":[],"mappings":"AAWA;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBzE;AAED,MAAM,WAAW,wBAAwB;IACxC,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;;;;;;OAOG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC5B;AAgCD,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ExF"}
1
+ {"version":3,"file":"validate-output.d.ts","sourceRoot":"","sources":["../../src/ssg/validate-output.ts"],"names":[],"mappings":"AAWA;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBzE;AAED,MAAM,WAAW,wBAAwB;IACxC,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;;;;;;OAOG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC5B;AAED;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB9E;AAqED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ExF"}