@bagelink/blox 1.18.7 → 1.18.9

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 (30) hide show
  1. package/dist/{PreviewApp-D8ZBTG0j.cjs → PreviewApp-DJ-zFK64.cjs} +1 -1
  2. package/dist/{PreviewApp-9H9-jLVN.js → PreviewApp-Eu1N9XYe.js} +1 -1
  3. package/dist/{PreviewApp.vue_vue_type_style_index_0_lang-BYCayJs0.cjs → PreviewApp.vue_vue_type_style_index_0_lang-BF52PPjt.cjs} +1 -1
  4. package/dist/{PreviewApp.vue_vue_type_style_index_0_lang-BwiLyRBw.js → PreviewApp.vue_vue_type_style_index_0_lang-zkP_L9cF.js} +1 -1
  5. package/dist/{appRuntime-DZSCSsnS.js → appRuntime-Cmns1A7C.js} +60 -38
  6. package/dist/{appRuntime-Z0AxTPxf.cjs → appRuntime-DQRKuyja.cjs} +24 -2
  7. package/dist/composables/useLocale.d.ts +2 -0
  8. package/dist/composables/useLocale.d.ts.map +1 -1
  9. package/dist/content/routes.d.ts.map +1 -1
  10. package/dist/index.cjs +4 -2
  11. package/dist/index.d.ts +1 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.mjs +30 -28
  14. package/dist/{shard-runner-Bz46UqN8.cjs → shard-runner-BJ9PEpxo.cjs} +3 -3
  15. package/dist/{shard-runner-CoFcUVGe.js → shard-runner-D1dDFt2v.js} +3 -3
  16. package/dist/ssg/cli.cjs +2 -2
  17. package/dist/ssg/cli.mjs +2 -2
  18. package/dist/ssg/createSSREntry.d.ts.map +1 -1
  19. package/dist/ssg/index.cjs +10 -4
  20. package/dist/ssg/index.mjs +25 -19
  21. package/dist/ssg/prerender.d.ts +7 -0
  22. package/dist/ssg/prerender.d.ts.map +1 -1
  23. package/dist/ssg/render-resolved-page.d.ts +2 -0
  24. package/dist/ssg/render-resolved-page.d.ts.map +1 -1
  25. package/dist/ssg/shard-runner.d.ts +1 -0
  26. package/dist/ssg/shard-runner.d.ts.map +1 -1
  27. package/dist/ssg/validate-output.d.ts.map +1 -1
  28. package/dist/{validate-output-B8pmE7hf.js → validate-output-B0ZK_S-l.js} +38 -28
  29. package/dist/{validate-output-CbIQrCwa.cjs → validate-output-C48vY_9-.cjs} +20 -10
  30. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const PreviewApp_vue_vue_type_style_index_0_lang = require("./PreviewApp.vue_vue_type_style_index_0_lang-BYCayJs0.cjs");
3
+ const PreviewApp_vue_vue_type_style_index_0_lang = require("./PreviewApp.vue_vue_type_style_index_0_lang-BF52PPjt.cjs");
4
4
  exports.default = PreviewApp_vue_vue_type_style_index_0_lang._sfc_main;
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "./PreviewApp.vue_vue_type_style_index_0_lang-BwiLyRBw.js";
1
+ import { _ as _sfc_main } from "./PreviewApp.vue_vue_type_style_index_0_lang-zkP_L9cF.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  const vue = require("vue");
3
- const appRuntime = require("./appRuntime-Z0AxTPxf.cjs");
3
+ const appRuntime = require("./appRuntime-DQRKuyja.cjs");
4
4
  function sendToEditor(msg) {
5
5
  window.parent.postMessage(cloneForPostMessage(msg), "*");
6
6
  }
@@ -1,5 +1,5 @@
1
1
  import { defineComponent, inject, ref, h, provide, onMounted, onUnmounted, openBlock, createElementBlock, createVNode, unref, nextTick } from "vue";
2
- import { d as BLOX_REGISTRY_KEY, r as resolveBlockProps, u as useLocale, e as BLOX_RUNTIME_KEY } from "./appRuntime-DZSCSsnS.js";
2
+ import { e as BLOX_REGISTRY_KEY, r as resolveBlockProps, u as useLocale, f as BLOX_RUNTIME_KEY } from "./appRuntime-Cmns1A7C.js";
3
3
  function sendToEditor(msg) {
4
4
  window.parent.postMessage(cloneForPostMessage(msg), "*");
5
5
  }
@@ -128,8 +128,16 @@ function localeState() {
128
128
  }
129
129
  return { locale, currentAlternates, currentLocaleFallbacks };
130
130
  }
131
+ let _ssrPageLocale = null;
132
+ function setSsrPageLocale(locale2) {
133
+ _ssrPageLocale = locale2 ? String(locale2).slice(0, 2).toLowerCase() : null;
134
+ }
135
+ function getSsrPageLocale() {
136
+ return _ssrPageLocale;
137
+ }
131
138
  function setActiveLocale(l, state = localeState()) {
132
139
  state.locale.value = l;
140
+ locale.value = l;
133
141
  try {
134
142
  const i18n = getI18n();
135
143
  if (i18n == null ? void 0 : i18n.global) i18n.global.locale.value = l;
@@ -801,7 +809,7 @@ class BloxInstance {
801
809
  router.addRoute({
802
810
  path: "/_blox_preview",
803
811
  name: BLOX_PREVIEW_ROUTE_NAME,
804
- component: () => import("./PreviewApp-9H9-jLVN.js"),
812
+ component: () => import("./PreviewApp-Eu1N9XYe.js"),
805
813
  beforeEnter: () => typeof window === "undefined" || window.parent !== window ? true : "/"
806
814
  });
807
815
  }
@@ -1036,12 +1044,24 @@ function installLocaleAwareResolve(router, strategy, activeLocaleRef) {
1036
1044
  const supported = strategy.locales;
1037
1045
  const defaultLocale = strategy.defaultLocale;
1038
1046
  const activeLocale = () => String(locale2.value || "").slice(0, 2).toLowerCase() || defaultLocale;
1047
+ const routeLocale = () => {
1048
+ var _a, _b, _c;
1049
+ const ssr = getSsrPageLocale();
1050
+ if (ssr) return ssr;
1051
+ const path = String(((_b = (_a = router.currentRoute) == null ? void 0 : _a.value) == null ? void 0 : _b.path) || "");
1052
+ const first = (_c = path.replace(/^\/+/, "").split("/")[0]) == null ? void 0 : _c.toLowerCase();
1053
+ return first && supported.includes(first) ? first : activeLocale();
1054
+ };
1039
1055
  const originalResolve = router.resolve.bind(router);
1040
1056
  router.resolve = (to, currentLocation) => {
1057
+ var _a;
1041
1058
  if (typeof to === "string") {
1042
1059
  const href = normalizeLink(to) ?? to;
1043
1060
  if (classifyLink(href) === "internal") {
1044
- to = strategy.toPath(href, activeLocale());
1061
+ const firstSegment = (_a = href.replace(/^\/+/, "").split("/")[0]) == null ? void 0 : _a.toLowerCase();
1062
+ if (!(firstSegment && supported.includes(firstSegment))) {
1063
+ to = strategy.toPath(href, routeLocale());
1064
+ }
1045
1065
  }
1046
1066
  } else if (to && typeof to === "object" && typeof to.path === "string" && typeof to.locale === "string") {
1047
1067
  const href = normalizeLink(to.path) ?? to.path;
@@ -1191,51 +1211,53 @@ function installBloxRuntime(options) {
1191
1211
  return blox;
1192
1212
  }
1193
1213
  export {
1194
- _sfc_main as A,
1214
+ _sfc_main$1 as A,
1195
1215
  BLOX_SSR_ROUTE_STATE_KEY as B,
1196
- applyLayoutChrome as C,
1197
- classifyLink as D,
1198
- contentRoutes as E,
1199
- createBlox as F,
1200
- defineContent as G,
1201
- generateContentRoutes as H,
1202
- getContentRouteByCollection as I,
1203
- installContentFallback as J,
1204
- isAbsoluteExternal as K,
1205
- isSoloContentPage as L,
1206
- isSpecialScheme as M,
1207
- normalizeTo as N,
1208
- provideContentItem as O,
1216
+ _sfc_main as C,
1217
+ applyLayoutChrome as D,
1218
+ classifyLink as E,
1219
+ contentRoutes as F,
1220
+ createBlox as G,
1221
+ defineContent as H,
1222
+ generateContentRoutes as I,
1223
+ getContentRouteByCollection as J,
1224
+ getSsrPageLocale as K,
1225
+ installContentFallback as L,
1226
+ isAbsoluteExternal as M,
1227
+ isSoloContentPage as N,
1228
+ isSpecialScheme as O,
1209
1229
  PageRenderer as P,
1210
- toInternalPath as Q,
1211
- useBloxEdit as R,
1212
- useContentItem as S,
1213
- useData as T,
1230
+ normalizeTo as Q,
1231
+ provideContentItem as R,
1232
+ toInternalPath as S,
1233
+ useBloxEdit as T,
1234
+ useContentItem as U,
1235
+ useData as V,
1214
1236
  _sfc_main$3 as _,
1215
1237
  collectBloxSeo as a,
1216
1238
  provideBloxLocale as b,
1217
1239
  collectBloxData as c,
1218
- BLOX_REGISTRY_KEY as d,
1219
- BLOX_RUNTIME_KEY as e,
1220
- BLOX_LOCALE_STRATEGY_KEY as f,
1221
- useSeo as g,
1222
- getRegistryData as h,
1240
+ setActiveLocale as d,
1241
+ BLOX_REGISTRY_KEY as e,
1242
+ BLOX_RUNTIME_KEY as f,
1243
+ BLOX_LOCALE_STRATEGY_KEY as g,
1244
+ useSeo as h,
1223
1245
  installBloxRuntime as i,
1224
- getContentRoute as j,
1225
- isMissingPageDocument as k,
1226
- installSmartLinks as l,
1227
- BLOX_CMS_ROUTE_NAME as m,
1246
+ getRegistryData as j,
1247
+ getContentRoute as k,
1248
+ isMissingPageDocument as l,
1249
+ installSmartLinks as m,
1228
1250
  normalizeLink as n,
1229
- BLOX_PREVIEW_ROUTE_NAME as o,
1251
+ BLOX_CMS_ROUTE_NAME as o,
1230
1252
  provideBloxData as p,
1231
- BLOX_ADMIN_CONFIG_KEY as q,
1253
+ BLOX_PREVIEW_ROUTE_NAME as q,
1232
1254
  resolveBlockProps as r,
1233
- setActiveLocale as s,
1234
- BLOX_CONFIG_KEY as t,
1255
+ setSsrPageLocale as s,
1256
+ BLOX_ADMIN_CONFIG_KEY as t,
1235
1257
  useLocale as u,
1236
- BLOX_DATA_KEY as v,
1237
- BLOX_LAYOUT_KEY as w,
1238
- BloxInstance as x,
1239
- _sfc_main$2 as y,
1240
- _sfc_main$1 as z
1258
+ BLOX_CONFIG_KEY as v,
1259
+ BLOX_DATA_KEY as w,
1260
+ BLOX_LAYOUT_KEY as x,
1261
+ BloxInstance as y,
1262
+ _sfc_main$2 as z
1241
1263
  };
@@ -129,8 +129,16 @@ function localeState() {
129
129
  }
130
130
  return { locale, currentAlternates, currentLocaleFallbacks };
131
131
  }
132
+ let _ssrPageLocale = null;
133
+ function setSsrPageLocale(locale2) {
134
+ _ssrPageLocale = locale2 ? String(locale2).slice(0, 2).toLowerCase() : null;
135
+ }
136
+ function getSsrPageLocale() {
137
+ return _ssrPageLocale;
138
+ }
132
139
  function setActiveLocale(l, state = localeState()) {
133
140
  state.locale.value = l;
141
+ locale.value = l;
134
142
  try {
135
143
  const i18n = vue$1.getI18n();
136
144
  if (i18n == null ? void 0 : i18n.global) i18n.global.locale.value = l;
@@ -802,7 +810,7 @@ class BloxInstance {
802
810
  router.addRoute({
803
811
  path: "/_blox_preview",
804
812
  name: BLOX_PREVIEW_ROUTE_NAME,
805
- component: () => Promise.resolve().then(() => require("./PreviewApp-D8ZBTG0j.cjs")),
813
+ component: () => Promise.resolve().then(() => require("./PreviewApp-DJ-zFK64.cjs")),
806
814
  beforeEnter: () => typeof window === "undefined" || window.parent !== window ? true : "/"
807
815
  });
808
816
  }
@@ -1037,12 +1045,24 @@ function installLocaleAwareResolve(router, strategy, activeLocaleRef) {
1037
1045
  const supported = strategy.locales;
1038
1046
  const defaultLocale = strategy.defaultLocale;
1039
1047
  const activeLocale = () => String(locale2.value || "").slice(0, 2).toLowerCase() || defaultLocale;
1048
+ const routeLocale = () => {
1049
+ var _a, _b, _c;
1050
+ const ssr = getSsrPageLocale();
1051
+ if (ssr) return ssr;
1052
+ const path = String(((_b = (_a = router.currentRoute) == null ? void 0 : _a.value) == null ? void 0 : _b.path) || "");
1053
+ const first = (_c = path.replace(/^\/+/, "").split("/")[0]) == null ? void 0 : _c.toLowerCase();
1054
+ return first && supported.includes(first) ? first : activeLocale();
1055
+ };
1040
1056
  const originalResolve = router.resolve.bind(router);
1041
1057
  router.resolve = (to, currentLocation) => {
1058
+ var _a;
1042
1059
  if (typeof to === "string") {
1043
1060
  const href = normalizeLink(to) ?? to;
1044
1061
  if (classifyLink(href) === "internal") {
1045
- to = strategy.toPath(href, activeLocale());
1062
+ const firstSegment = (_a = href.replace(/^\/+/, "").split("/")[0]) == null ? void 0 : _a.toLowerCase();
1063
+ if (!(firstSegment && supported.includes(firstSegment))) {
1064
+ to = strategy.toPath(href, routeLocale());
1065
+ }
1046
1066
  }
1047
1067
  } else if (to && typeof to === "object" && typeof to.path === "string" && typeof to.locale === "string") {
1048
1068
  const href = normalizeLink(to.path) ?? to.path;
@@ -1218,6 +1238,7 @@ exports.generateContentRoutes = generateContentRoutes;
1218
1238
  exports.getContentRoute = getContentRoute;
1219
1239
  exports.getContentRouteByCollection = getContentRouteByCollection;
1220
1240
  exports.getRegistryData = getRegistryData;
1241
+ exports.getSsrPageLocale = getSsrPageLocale;
1221
1242
  exports.installBloxRuntime = installBloxRuntime;
1222
1243
  exports.installContentFallback = installContentFallback;
1223
1244
  exports.installSmartLinks = installSmartLinks;
@@ -1232,6 +1253,7 @@ exports.provideBloxLocale = provideBloxLocale;
1232
1253
  exports.provideContentItem = provideContentItem;
1233
1254
  exports.resolveBlockProps = resolveBlockProps;
1234
1255
  exports.setActiveLocale = setActiveLocale;
1256
+ exports.setSsrPageLocale = setSsrPageLocale;
1235
1257
  exports.toInternalPath = toInternalPath;
1236
1258
  exports.useBloxEdit = useBloxEdit;
1237
1259
  exports.useContentItem = useContentItem;
@@ -7,6 +7,8 @@ export interface BloxLocaleState {
7
7
  }
8
8
  export declare const BLOX_LOCALE_KEY: InjectionKey<BloxLocaleState>;
9
9
  export declare function provideBloxLocale(app: App, initialLocale: Locale): BloxLocaleState;
10
+ export declare function setSsrPageLocale(locale: string | null): void;
11
+ export declare function getSsrPageLocale(): string | null;
10
12
  /**
11
13
  * Set the active locale ref directly, without touching `localStorage`/`document`.
12
14
  * Used by the SSG entry to align `useLocale()` with the URL-detected render
@@ -1 +1 @@
1
- {"version":3,"file":"useLocale.d.ts","sourceRoot":"","sources":["../../src/composables/useLocale.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAGjD,MAAM,MAAM,MAAM,GAAG,MAAM,CAAA;AAa3B,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACnB,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC9C,sBAAsB,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;CACrD;AAED,eAAO,MAAM,eAAe,EAAE,YAAY,CAAC,eAAe,CAAyB,CAAA;AAEnF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,GAAG,eAAe,CAQlF;AAUD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,eAA+B,GAAG,IAAI,CAQvF;AAED,wBAAgB,SAAS;;;mBAIF,MAAM;;gCAgBO,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;oCAIlB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;EAa/D"}
1
+ {"version":3,"file":"useLocale.d.ts","sourceRoot":"","sources":["../../src/composables/useLocale.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAGjD,MAAM,MAAM,MAAM,GAAG,MAAM,CAAA;AAa3B,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACnB,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC9C,sBAAsB,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;CACrD;AAED,eAAO,MAAM,eAAe,EAAE,YAAY,CAAC,eAAe,CAAyB,CAAA;AAEnF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,GAAG,eAAe,CAQlF;AAoBD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAE5D;AAED,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAEhD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,eAA+B,GAAG,IAAI,CAcvF;AAED,wBAAgB,SAAS;;;mBAIF,MAAM;;gCAgBO,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;oCAIlB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;EAa/D"}
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/content/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAQ3C;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACpC,gBAAgB,EAAE,MAAM,EAAE,EAC1B,aAAa,EAAE,MAAM,GACnB,cAAc,EAAE,CA4BlB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,yBAAyB,CACxC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,cAAc,EACxB,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC3B,IAAI,CAoCN;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACrC,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,EAAE,EAC1B,aAAa,EAAE,MAAM,EACrB,GAAG,CAAC,EAAE,aAAa,GACjB,IAAI,CAmFN"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/content/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAQ3C;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACpC,gBAAgB,EAAE,MAAM,EAAE,EAC1B,aAAa,EAAE,MAAM,GACnB,cAAc,EAAE,CA4BlB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,yBAAyB,CACxC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,cAAc,EACxB,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC3B,IAAI,CA4DN;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACrC,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,EAAE,EAC1B,aAAa,EAAE,MAAM,EACrB,GAAG,CAAC,EAAE,aAAa,GACjB,IAAI,CAmFN"}
package/dist/index.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const index = require("./index-DUjEj7ts.cjs");
4
- const PreviewApp_vue_vue_type_style_index_0_lang = require("./PreviewApp.vue_vue_type_style_index_0_lang-BYCayJs0.cjs");
5
- const appRuntime = require("./appRuntime-Z0AxTPxf.cjs");
4
+ const PreviewApp_vue_vue_type_style_index_0_lang = require("./PreviewApp.vue_vue_type_style_index_0_lang-BF52PPjt.cjs");
5
+ const appRuntime = require("./appRuntime-DQRKuyja.cjs");
6
6
  const vue = require("vue");
7
7
  const ssg_client = require("./client-AoDTJJXJ.cjs");
8
8
  const vueRouter = require("vue-router");
@@ -535,6 +535,7 @@ exports.defineContent = appRuntime.defineContent;
535
535
  exports.generateContentRoutes = appRuntime.generateContentRoutes;
536
536
  exports.getContentRoute = appRuntime.getContentRoute;
537
537
  exports.getContentRouteByCollection = appRuntime.getContentRouteByCollection;
538
+ exports.getSsrPageLocale = appRuntime.getSsrPageLocale;
538
539
  exports.installContentFallback = appRuntime.installContentFallback;
539
540
  exports.installSmartLinks = appRuntime.installSmartLinks;
540
541
  exports.isAbsoluteExternal = appRuntime.isAbsoluteExternal;
@@ -545,6 +546,7 @@ exports.normalizeTo = appRuntime.normalizeTo;
545
546
  exports.provideBloxData = appRuntime.provideBloxData;
546
547
  exports.provideContentItem = appRuntime.provideContentItem;
547
548
  exports.resolveBlockProps = appRuntime.resolveBlockProps;
549
+ exports.setSsrPageLocale = appRuntime.setSsrPageLocale;
548
550
  exports.toInternalPath = appRuntime.toInternalPath;
549
551
  exports.useBloxEdit = appRuntime.useBloxEdit;
550
552
  exports.useContentItem = appRuntime.useContentItem;
package/dist/index.d.ts CHANGED
@@ -32,6 +32,7 @@ export type { BloxSiteConfig } from './siteConfig';
32
32
  export { defineBlock } from './defineBlock';
33
33
  export type { BlockMeta, BlockModule, BlockDataSource, BlockDataSourceConfig } from './defineBlock';
34
34
  export type { LocaleStrategy, PageSlugMap } from './localeStrategy';
35
+ export { getSsrPageLocale, setSsrPageLocale } from './composables/useLocale';
35
36
  export { getPageSlugMap, localizePageSlug, setPageSlugMap } from './localeStrategy';
36
37
  export { withLocaleRoutes } from './localeRoutes';
37
38
  export { defineContent, contentRoutes, getContentRoute, getContentRouteByCollection, generateContentRoutes, installContentFallback, provideContentItem, useContentItem, useContentSeo, getItemBySlug, getItemById, ContentHost, ContentDetailView, } from './content';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  import { useBloxApi, getItemBySlug, getItemById, provideBloxApi } from "./index-I81QTzv-.js";
2
2
  import { configureApi, createBloxApi, getCollectionResolver, getWebsiteId, getWebsiteIdSync, listItems, resolvePath, setApiOrigin, setCollectionResolver } from "./index-I81QTzv-.js";
3
- import { _, P, s, a } from "./PreviewApp.vue_vue_type_style_index_0_lang-BwiLyRBw.js";
4
- import { f as BLOX_LOCALE_STRATEGY_KEY, u as useLocale, n as normalizeLink, e as BLOX_RUNTIME_KEY, g as useSeo, h as getRegistryData, j as getContentRoute, p as provideBloxData, b as provideBloxLocale, i as installBloxRuntime, s as setActiveLocale, k as isMissingPageDocument, l as installSmartLinks, m as BLOX_CMS_ROUTE_NAME, o as BLOX_PREVIEW_ROUTE_NAME } from "./appRuntime-DZSCSsnS.js";
5
- import { _ as _2, q, t, v, w, x, y, z, A, P as P2, C, D, c, a as a2, E, F, G, H, I, J, K, L, M, N, O, r, Q, R, S, T } from "./appRuntime-DZSCSsnS.js";
3
+ import { _, P, s, a } from "./PreviewApp.vue_vue_type_style_index_0_lang-zkP_L9cF.js";
4
+ import { g as BLOX_LOCALE_STRATEGY_KEY, u as useLocale, n as normalizeLink, f as BLOX_RUNTIME_KEY, h as useSeo, j as getRegistryData, k as getContentRoute, p as provideBloxData, b as provideBloxLocale, i as installBloxRuntime, d as setActiveLocale, l as isMissingPageDocument, m as installSmartLinks, o as BLOX_CMS_ROUTE_NAME, q as BLOX_PREVIEW_ROUTE_NAME } from "./appRuntime-Cmns1A7C.js";
5
+ import { _ as _2, t, v, w, x, y, z, A, C, P as P2, D, E, c, a as a2, F, G, H, I, J, K, L, M, N, O, Q, R, r, s as s2, S, T, U, V } from "./appRuntime-Cmns1A7C.js";
6
6
  import { defineComponent, resolveComponent, openBlock, createBlock, withCtx, Transition, resolveDynamicComponent, inject, ref, watch, onMounted, onUnmounted, computed, onServerPrefetch, toValue, h, Suspense, createSSRApp, createApp } from "vue";
7
7
  import { r as readBloxHydration } from "./client-Ce9fRCGH.js";
8
8
  import { useRouter, useRoute } from "vue-router";
@@ -500,58 +500,59 @@ function buildBloxManifest(blox) {
500
500
  }
501
501
  export {
502
502
  _2 as AdminEditBar,
503
- q as BLOX_ADMIN_CONFIG_KEY,
504
- t as BLOX_CONFIG_KEY,
505
- v as BLOX_DATA_KEY,
506
- w as BLOX_LAYOUT_KEY,
503
+ t as BLOX_ADMIN_CONFIG_KEY,
504
+ v as BLOX_CONFIG_KEY,
505
+ w as BLOX_DATA_KEY,
506
+ x as BLOX_LAYOUT_KEY,
507
507
  BLOX_LOCALE_STRATEGY_KEY,
508
508
  BLOX_RUNTIME_KEY,
509
- x as BloxInstance,
509
+ y as BloxInstance,
510
510
  _sfc_main as BloxRouterView,
511
- y as CmsPageView,
512
- z as ContentDetailView,
513
- A as ContentHost,
511
+ z as CmsPageView,
512
+ A as ContentDetailView,
513
+ C as ContentHost,
514
514
  P2 as PageRenderer,
515
515
  _ as PreviewApp,
516
516
  P as PreviewRenderer,
517
- C as applyLayoutChrome,
517
+ D as applyLayoutChrome,
518
518
  buildBloxManifest,
519
- D as classifyLink,
519
+ E as classifyLink,
520
520
  c as collectBloxData,
521
521
  a2 as collectBloxSeo,
522
522
  configureApi,
523
- E as contentRoutes,
524
- F as createBlox,
523
+ F as contentRoutes,
524
+ G as createBlox,
525
525
  createBloxApi,
526
526
  createBloxApp,
527
527
  defineBlock,
528
528
  defineBloxSite,
529
- G as defineContent,
530
- H as generateContentRoutes,
529
+ H as defineContent,
530
+ I as generateContentRoutes,
531
531
  getCollectionResolver,
532
532
  getContentRoute,
533
- I as getContentRouteByCollection,
533
+ J as getContentRouteByCollection,
534
534
  getItemById,
535
535
  getItemBySlug,
536
536
  g as getPageSlugMap,
537
+ K as getSsrPageLocale,
537
538
  getWebsiteId,
538
539
  getWebsiteIdSync,
539
540
  injectGtm,
540
541
  injectPlausible,
541
- J as installContentFallback,
542
+ L as installContentFallback,
542
543
  installDocumentNavigation,
543
544
  installGtm,
544
545
  installSmartLinks,
545
- K as isAbsoluteExternal,
546
+ M as isAbsoluteExternal,
546
547
  isGtmInstalled,
547
- L as isSoloContentPage,
548
- M as isSpecialScheme,
548
+ N as isSoloContentPage,
549
+ O as isSpecialScheme,
549
550
  listItems,
550
551
  l as localizePageSlug,
551
552
  normalizeLink,
552
- N as normalizeTo,
553
+ Q as normalizeTo,
553
554
  provideBloxData,
554
- O as provideContentItem,
555
+ R as provideContentItem,
555
556
  readBloxHydration,
556
557
  r as resolveBlockProps,
557
558
  resolvePath,
@@ -561,13 +562,14 @@ export {
561
562
  setApiOrigin,
562
563
  setCollectionResolver,
563
564
  setPageSlugMap,
564
- Q as toInternalPath,
565
+ s2 as setSsrPageLocale,
566
+ S as toInternalPath,
565
567
  useBloxApi,
566
- R as useBloxEdit,
568
+ T as useBloxEdit,
567
569
  useBloxRuntime,
568
- S as useContentItem,
570
+ U as useContentItem,
569
571
  useContentSeo,
570
- T as useData,
572
+ V as useData,
571
573
  useGlobalBlock,
572
574
  useLocale,
573
575
  useLocaleNav,
@@ -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-CbIQrCwa.cjs");
29
+ const llmArtifacts = require("./validate-output-C48vY_9-.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";
@@ -40,7 +40,7 @@ function matchesCmsPath(pathname, cmsPaths) {
40
40
  return false;
41
41
  }
42
42
  function sitemapRoutesForWebsite(routes, siteNoindex) {
43
- return siteNoindex ? routes : routes.filter((route) => !route.noindex);
43
+ return routes.filter((route) => !route.noindex && !llmArtifacts.isErrorPagePath(route.url));
44
44
  }
45
45
  function resolveShardCount(shards) {
46
46
  if (shards === "auto") {
@@ -169,7 +169,7 @@ async function runSharded(opts) {
169
169
  }
170
170
  if (process.env.BLOX_SSG_LLM !== "0" && !((_a = website == null ? void 0 : website.seo) == null ? void 0 : _a.noindex)) {
171
171
  try {
172
- const { mergeLlmParts } = await Promise.resolve().then(() => require("./validate-output-CbIQrCwa.cjs")).then((n) => n.llmArtifacts);
172
+ const { mergeLlmParts } = await Promise.resolve().then(() => require("./validate-output-C48vY_9-.cjs")).then((n) => n.llmArtifacts);
173
173
  const mergeWebsite = website;
174
174
  const partFiles = Array.from({ length: total }, (_, i) => path.join(llmPartsDir, `part.${i}.json`));
175
175
  const { pages } = await mergeLlmParts({
@@ -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, d as validateNoRedirectingLinks } from "./validate-output-B8pmE7hf.js";
5
+ import { f as fetchCmsSiteData, g as generateSitemapArtifacts, d as validateNoRedirectingLinks, i as isErrorPagePath } from "./validate-output-B0ZK_S-l.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";
@@ -16,7 +16,7 @@ function matchesCmsPath(pathname, cmsPaths) {
16
16
  return false;
17
17
  }
18
18
  function sitemapRoutesForWebsite(routes, siteNoindex) {
19
- return siteNoindex ? routes : routes.filter((route) => !route.noindex);
19
+ return routes.filter((route) => !route.noindex && !isErrorPagePath(route.url));
20
20
  }
21
21
  function resolveShardCount(shards) {
22
22
  if (shards === "auto") {
@@ -145,7 +145,7 @@ async function runSharded(opts) {
145
145
  }
146
146
  if (process.env.BLOX_SSG_LLM !== "0" && !((_a = website == null ? void 0 : website.seo) == null ? void 0 : _a.noindex)) {
147
147
  try {
148
- const { mergeLlmParts } = await import("./validate-output-B8pmE7hf.js").then((n) => n.D);
148
+ const { mergeLlmParts } = await import("./validate-output-B0ZK_S-l.js").then((n) => n.E);
149
149
  const mergeWebsite = website;
150
150
  const partFiles = Array.from({ length: total }, (_, i) => path.join(llmPartsDir, `part.${i}.json`));
151
151
  const { pages } = await mergeLlmParts({
package/dist/ssg/cli.cjs CHANGED
@@ -3,7 +3,7 @@
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-CbIQrCwa.cjs");
6
+ const llmArtifacts = require("../validate-output-C48vY_9-.cjs");
7
7
  const localeStrategy = require("../localeStrategy-OwRIn35C.cjs");
8
8
  function installFetchTimeout() {
9
9
  const ms = Number(process.env.BLOX_SSG_FETCH_TIMEOUT_MS) || 2e4;
@@ -148,7 +148,7 @@ Environment:
148
148
  if (shardsOpt !== null || routesCmd) {
149
149
  const { apiBase: apiBase2, websiteName: configWebsiteName2 } = await resolveApiBase(mode);
150
150
  const websiteName2 = process.env.WEBSITE_NAME ?? configWebsiteName2 ?? "default";
151
- const { runSharded } = await Promise.resolve().then(() => require("../shard-runner-Bz46UqN8.cjs"));
151
+ const { runSharded } = await Promise.resolve().then(() => require("../shard-runner-BJ9PEpxo.cjs"));
152
152
  const code = await runSharded({
153
153
  shards: shardsOpt ?? "auto",
154
154
  mode,
package/dist/ssg/cli.mjs CHANGED
@@ -2,7 +2,7 @@
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, d as validateNoRedirectingLinks } from "../validate-output-B8pmE7hf.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-B0ZK_S-l.js";
6
6
  import { s as setPageSlugMap } from "../localeStrategy-hXlNof1E.js";
7
7
  function installFetchTimeout() {
8
8
  const ms = Number(process.env.BLOX_SSG_FETCH_TIMEOUT_MS) || 2e4;
@@ -147,7 +147,7 @@ Environment:
147
147
  if (shardsOpt !== null || routesCmd) {
148
148
  const { apiBase: apiBase2, websiteName: configWebsiteName2 } = await resolveApiBase(mode);
149
149
  const websiteName2 = process.env.WEBSITE_NAME ?? configWebsiteName2 ?? "default";
150
- const { runSharded } = await import("../shard-runner-CoFcUVGe.js");
150
+ const { runSharded } = await import("../shard-runner-D1dDFt2v.js");
151
151
  const code = await runSharded({
152
152
  shards: shardsOpt ?? "auto",
153
153
  mode,
@@ -1 +1 @@
1
- {"version":3,"file":"createSSREntry.d.ts","sourceRoot":"","sources":["../../src/ssg/createSSREntry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createSSREntry.d.ts","sourceRoot":"","sources":["../../src/ssg/createSSREntry.ts"],"names":[],"mappings":"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"}
@@ -22,14 +22,15 @@ 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-CbIQrCwa.cjs");
25
+ const llmArtifacts = require("../validate-output-C48vY_9-.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-Z0AxTPxf.cjs");
29
+ const appRuntime = require("../appRuntime-DQRKuyja.cjs");
30
+ const localeStrategy = require("../localeStrategy-OwRIn35C.cjs");
30
31
  const index = require("../index-DUjEj7ts.cjs");
31
32
  async function renderBloxSsgPage(options) {
32
- var _a, _b, _c, _d;
33
+ var _a, _b, _c, _d, _e;
33
34
  const {
34
35
  url,
35
36
  resolvedData,
@@ -112,7 +113,10 @@ ${jsonLd}`;
112
113
  }
113
114
  const lang = locale || (website == null ? void 0 : website.default_locale) || "en";
114
115
  const htmlAttrs = `lang="${lang}"`;
115
- return { html, head, htmlAttrs, teleports: ssrContext.teleports, llm: llmEntry };
116
+ const pageNoindex = Boolean(
117
+ ((_e = seoData == null ? void 0 : seoData.page) == null ? void 0 : _e.noindex) || (seoOverride == null ? void 0 : seoOverride.noindex)
118
+ );
119
+ return { html, head, htmlAttrs, teleports: ssrContext.teleports, llm: llmEntry, noindex: pageNoindex };
116
120
  }
117
121
  function safeJson(value) {
118
122
  return JSON.stringify(value).replace(/</g, "\\u003c");
@@ -298,6 +302,7 @@ function createBloxSSREntry(options) {
298
302
  }
299
303
  function buildApp(url, resolvedData, stateKey) {
300
304
  const pageLocale = detectLocale(url).locale;
305
+ appRuntime.setSsrPageLocale(pageLocale);
301
306
  const router = createRouter("memory", url);
302
307
  const app = vue.createSSRApp({
303
308
  name: "BloxSsgRoot",
@@ -336,6 +341,7 @@ function createBloxSSREntry(options) {
336
341
  async function render(url, ctx) {
337
342
  var _a2;
338
343
  const { locale: pageLocale, slug } = detectLocale(url);
344
+ if (ctx.pageSlugMap) localeStrategy.setPageSlugMap(ctx.pageSlugMap);
339
345
  let resolvedData = null;
340
346
  if ((_a2 = ctx.resolveCache) == null ? void 0 : _a2.has(url)) {
341
347
  resolvedData = ctx.resolveCache.get(url) ?? null;
@@ -1,12 +1,13 @@
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";
1
+ import { e as buildPageHead, h as primaryContextEntry, j as buildJsonLd, k as extractPageText, B as BloxBuildResponseError, l as bloxBuildJson } from "../validate-output-B0ZK_S-l.js";
2
+ import { m, n, f, o, q, r, s, g, t, w, x, y, z, A, p, a, C, D, u, c, v } from "../validate-output-B0ZK_S-l.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-DZSCSsnS.js";
6
+ import { c as collectBloxData, a as collectBloxSeo, s as setSsrPageLocale, p as provideBloxData, b as provideBloxLocale, B as BLOX_SSR_ROUTE_STATE_KEY, i as installBloxRuntime, d as setActiveLocale } from "../appRuntime-Cmns1A7C.js";
7
+ import { s as setPageSlugMap } from "../localeStrategy-hXlNof1E.js";
7
8
  import { provideBloxApi, getCollectionResolver } from "../index-I81QTzv-.js";
8
9
  async function renderBloxSsgPage(options) {
9
- var _a, _b, _c, _d;
10
+ var _a, _b, _c, _d, _e;
10
11
  const {
11
12
  url,
12
13
  resolvedData,
@@ -89,7 +90,10 @@ ${jsonLd}`;
89
90
  }
90
91
  const lang = locale || (website == null ? void 0 : website.default_locale) || "en";
91
92
  const htmlAttrs = `lang="${lang}"`;
92
- return { html, head, htmlAttrs, teleports: ssrContext.teleports, llm: llmEntry };
93
+ const pageNoindex = Boolean(
94
+ ((_e = seoData == null ? void 0 : seoData.page) == null ? void 0 : _e.noindex) || (seoOverride == null ? void 0 : seoOverride.noindex)
95
+ );
96
+ return { html, head, htmlAttrs, teleports: ssrContext.teleports, llm: llmEntry, noindex: pageNoindex };
93
97
  }
94
98
  function safeJson(value) {
95
99
  return JSON.stringify(value).replace(/</g, "\\u003c");
@@ -275,6 +279,7 @@ function createBloxSSREntry(options) {
275
279
  }
276
280
  function buildApp(url, resolvedData, stateKey) {
277
281
  const pageLocale = detectLocale(url).locale;
282
+ setSsrPageLocale(pageLocale);
278
283
  const router = createRouter("memory", url);
279
284
  const app = createSSRApp({
280
285
  name: "BloxSsgRoot",
@@ -313,6 +318,7 @@ function createBloxSSREntry(options) {
313
318
  async function render(url, ctx) {
314
319
  var _a2;
315
320
  const { locale: pageLocale, slug } = detectLocale(url);
321
+ if (ctx.pageSlugMap) setPageSlugMap(ctx.pageSlugMap);
316
322
  let resolvedData = null;
317
323
  if ((_a2 = ctx.resolveCache) == null ? void 0 : _a2.has(url)) {
318
324
  resolvedData = ctx.resolveCache.get(url) ?? null;
@@ -416,34 +422,34 @@ export {
416
422
  BLOX_HYDRATION_WINDOW_KEY,
417
423
  BloxBuildResponseError,
418
424
  bloxBuildJson,
419
- l as bloxBuildRequest,
425
+ m as bloxBuildRequest,
420
426
  buildJsonLd,
421
427
  buildPageHead,
422
- m as buildSiteHead,
428
+ n as buildSiteHead,
423
429
  createBloxSSREntry,
424
430
  extractPageText,
425
431
  f as fetchCmsSiteData,
426
432
  fetchDatastoreSnapshot,
427
- n as generateLlmsFullTxt,
428
- o as generateLlmsTxt,
429
- q as generateNetlifyRedirects,
430
- r as generateRobotsTxt,
433
+ o as generateLlmsFullTxt,
434
+ q as generateLlmsTxt,
435
+ r as generateNetlifyRedirects,
436
+ s as generateRobotsTxt,
431
437
  g as generateSitemapArtifacts,
432
- s as generateSitemapIndexXml,
433
- t as generateSitemapXml,
434
- w as getBloxBuildRequestOptions,
435
- x as getSiteIconFlags,
436
- y as localeSitemapPath,
437
- z as mergeLlmParts,
438
+ t as generateSitemapIndexXml,
439
+ w as generateSitemapXml,
440
+ x as getBloxBuildRequestOptions,
441
+ y as getSiteIconFlags,
442
+ z as localeSitemapPath,
443
+ A as mergeLlmParts,
438
444
  parseBloxBuildGrantBody,
439
445
  p as polyfillBloxSsgGlobals,
440
446
  a as prerender,
441
447
  querySnapshotRows,
442
448
  renderBloxSsgPage,
443
449
  resolveBloxBuildGrant,
444
- A as resolveManifestProvenance,
450
+ C as resolveManifestProvenance,
445
451
  snapshotRows,
446
- C as splitSitemapPathsByLocale,
452
+ D as splitSitemapPathsByLocale,
447
453
  u as uploadBloxManifest,
448
454
  c as validateInternalLinks,
449
455
  v as validateSsgOutput
@@ -67,6 +67,8 @@ export interface RenderResult {
67
67
  state?: unknown;
68
68
  /** Optional ISO last-modified for this page → sitemap <lastmod>. */
69
69
  lastmod?: string;
70
+ /** Page-level noindex (excluded from the sitemap); site-wide noindex is separate. */
71
+ noindex?: boolean;
70
72
  /** Per-page LLM extract (title/description/text) for llms.txt artifacts. */
71
73
  llm?: LlmPageEntry;
72
74
  }
@@ -116,5 +118,10 @@ resolvePrefetchConcurrency, appPaths, includeRoot, routePartsFile, mode, website
116
118
  export declare function discoverFontPreloads(clientOutDir: string): Promise<string>;
117
119
  export declare function injectIntoTemplate(template: string, head: string, appHtml: string, fontPreloads: string, htmlAttrs?: string, teleports?: Record<string, string>): string;
118
120
  export declare function injectTeleports(html: string, teleports: Record<string, string>): string;
121
+ /**
122
+ * True for error-page routes (`/404`, `/es/404`, …). These are served with a 404
123
+ * status and must never be advertised in a sitemap.
124
+ */
125
+ export declare function isErrorPagePath(urlPath: string): boolean;
119
126
  export {};
120
127
  //# sourceMappingURL=prerender.d.ts.map
@@ -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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"}
@@ -49,6 +49,8 @@ export declare function renderBloxSsgPage<TApp>(options: {
49
49
  htmlAttrs?: string;
50
50
  teleports?: Record<string, string>;
51
51
  llm?: LlmPageEntry;
52
+ /** Page-level noindex (CMS page flag or `useSeo({ noindex })`), not site-wide. */
53
+ noindex?: boolean;
52
54
  }>;
53
55
  /** JSON for embedding in a <script> tag — escapes `<` so `</script>` can't break out. */
54
56
  export declare function safeJson(value: unknown): string;
@@ -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,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"}
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;IAClB,kFAAkF;IAClF,OAAO,CAAC,EAAE,OAAO,CAAA;CACjB,CAAC,CAyHD;AAED,yFAAyF;AACzF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE/C"}
@@ -25,6 +25,7 @@ export interface ShardRunnerOptions {
25
25
  export declare function matchesCmsPath(pathname: string, cmsPaths: Set<string>): boolean;
26
26
  export declare function sitemapRoutesForWebsite<T extends {
27
27
  noindex: boolean;
28
+ url: string;
28
29
  }>(routes: T[], siteNoindex: boolean | undefined): T[];
29
30
  /**
30
31
  * Coordinate a sharded prerender. Returns the process exit code.
@@ -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;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"}
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;AAM9D,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,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAClF,MAAM,EAAE,CAAC,EAAE,EACX,WAAW,EAAE,OAAO,GAAG,SAAS,GAC9B,CAAC,EAAE,CAOL;AAsED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgK1E"}
@@ -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;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"}
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,CA4B9E;AAqED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ExF"}
@@ -1025,7 +1025,7 @@ async function prerender({
1025
1025
  pageSlugMap = {},
1026
1026
  llm = {}
1027
1027
  } = {}) {
1028
- var _a, _b, _c, _d, _e, _f;
1028
+ var _a, _b, _c, _d, _e;
1029
1029
  const absRoot = path.resolve(root);
1030
1030
  const absClient = path.resolve(absRoot, clientOutDir);
1031
1031
  const absServerEntry = path.resolve(absRoot, serverEntry);
@@ -1118,13 +1118,15 @@ async function prerender({
1118
1118
  );
1119
1119
  }
1120
1120
  async function renderOne(urlPath) {
1121
+ var _a2;
1121
1122
  const {
1122
1123
  html,
1123
1124
  head = "",
1124
1125
  htmlAttrs = "",
1125
1126
  teleports = {},
1126
1127
  lastmod: pageLastmod,
1127
- llm: pageLlm
1128
+ llm: pageLlm,
1129
+ noindex: pageNoindex
1128
1130
  } = await serverMod.render(urlPath, {
1129
1131
  manifest,
1130
1132
  template,
@@ -1141,9 +1143,8 @@ async function prerender({
1141
1143
  rendered.push(urlPath);
1142
1144
  if (pageLastmod) lastmod[urlPath] = pageLastmod;
1143
1145
  if (llmEnabled && pageLlm) llmPages.push(pageLlm);
1144
- if (/<meta[^>]+name=["']robots["'][^>]*noindex/i.test(head)) {
1145
- noindexPaths.add(urlPath);
1146
- }
1146
+ const noindexForPage = pageNoindex ?? (!((_a2 = website == null ? void 0 : website.seo) == null ? void 0 : _a2.noindex) && /<meta[^>]+name=["']robots["'][^>]*noindex/i.test(head));
1147
+ if (noindexForPage) noindexPaths.add(urlPath);
1147
1148
  if (crawl) {
1148
1149
  for (const p of discoverInternalLinks(outHtml)) {
1149
1150
  enqueue(p, queue, seen, isExcluded);
@@ -1180,7 +1181,7 @@ async function prerender({
1180
1181
  }
1181
1182
  const canonicalBase = (((_a = website == null ? void 0 : website.seo) == null ? void 0 : _a.canonical_base_url) || (website == null ? void 0 : website.domain) || "").replace(/\/$/, "");
1182
1183
  if (writeSharedAssets) {
1183
- const sitemapPaths = ((_b = website == null ? void 0 : website.seo) == null ? void 0 : _b.noindex) ? rendered : rendered.filter((p) => !noindexPaths.has(p));
1184
+ const sitemapPaths = rendered.filter((p) => !noindexPaths.has(p) && !isErrorPagePath(p));
1184
1185
  if (canonicalBase && sitemapPaths.length > 0) {
1185
1186
  const artifacts = generateSitemapArtifacts({
1186
1187
  routes: sitemapPaths.map((routePath) => ({
@@ -1190,7 +1191,7 @@ async function prerender({
1190
1191
  canonicalBase,
1191
1192
  defaultLocale: (website == null ? void 0 : website.default_locale) ?? "en",
1192
1193
  supportedLocales: (website == null ? void 0 : website.supported_locales) ?? [(website == null ? void 0 : website.default_locale) ?? "en"],
1193
- splitByLocale: (_c = website == null ? void 0 : website.seo) == null ? void 0 : _c.sitemap_split_by_locale
1194
+ splitByLocale: (_b = website == null ? void 0 : website.seo) == null ? void 0 : _b.sitemap_split_by_locale
1194
1195
  });
1195
1196
  for (const artifact of artifacts) {
1196
1197
  await fs.writeFile(
@@ -1205,11 +1206,11 @@ async function prerender({
1205
1206
  const robotsTxt = generateRobotsTxt({
1206
1207
  robotsTxt: website == null ? void 0 : website.robots_txt,
1207
1208
  canonicalBase,
1208
- noindex: (_d = website == null ? void 0 : website.seo) == null ? void 0 : _d.noindex
1209
+ noindex: (_c = website == null ? void 0 : website.seo) == null ? void 0 : _c.noindex
1209
1210
  });
1210
1211
  await fs.writeFile(path.join(absClient, "robots.txt"), robotsTxt, "utf8");
1211
1212
  console.log(" Generated robots.txt");
1212
- if ((_e = website == null ? void 0 : website.seo) == null ? void 0 : _e.noindex) {
1213
+ if ((_d = website == null ? void 0 : website.seo) == null ? void 0 : _d.noindex) {
1213
1214
  const headersPath = path.join(absClient, "_headers");
1214
1215
  let existing = "";
1215
1216
  try {
@@ -1238,7 +1239,7 @@ ${existing}`,
1238
1239
  await fs.writeFile(redirectsPath, redirectsContent + existing, "utf8");
1239
1240
  console.log(` Generated _redirects (${redirects.length} rules)`);
1240
1241
  }
1241
- if (!((_f = website == null ? void 0 : website.seo) == null ? void 0 : _f.noindex) && llmEnabled && llm.writeIndex !== false && llmPages.length > 0) {
1242
+ if (!((_e = website == null ? void 0 : website.seo) == null ? void 0 : _e.noindex) && llmEnabled && llm.writeIndex !== false && llmPages.length > 0) {
1242
1243
  const indexable = llmPages.filter((p) => !noindexPaths.has(p.url));
1243
1244
  const llmsTxt = generateLlmsTxt({ website, pages: indexable, config: llm });
1244
1245
  await fs.writeFile(path.join(absClient, "llms.txt"), llmsTxt, "utf8");
@@ -1494,6 +1495,10 @@ function injectTeleports(html, teleports) {
1494
1495
  }
1495
1496
  return out;
1496
1497
  }
1498
+ function isErrorPagePath(urlPath) {
1499
+ const segments = urlPath.split(/[?#]/)[0].split("/").filter(Boolean);
1500
+ return segments.length > 0 && segments[segments.length - 1] === "404";
1501
+ }
1497
1502
  function outFilePath(absClientDir, urlPath, mode) {
1498
1503
  const [pathname] = urlPath.split("?");
1499
1504
  const safe = pathname === "/" ? "/" : pathname;
@@ -1547,6 +1552,10 @@ ${failures.map((item) => ` - ${item}`).join("\n")}`);
1547
1552
  }
1548
1553
  }
1549
1554
  async function validateNoRedirectingLinks(outDir) {
1555
+ if (process.env.BLOX_SSG_ASSERT_LINKS === "0") {
1556
+ console.warn("[blox-ssg] BLOX_SSG_ASSERT_LINKS=0 — skipping redirect-link validation");
1557
+ return;
1558
+ }
1550
1559
  const root = path.resolve(outDir);
1551
1560
  const redirectSources = await readRedirectSources(root, "301", "302", "307", "308");
1552
1561
  if (!redirectSources.size) return;
@@ -1740,10 +1749,11 @@ async function validateSitemap(outDir, content) {
1740
1749
  return failures;
1741
1750
  }
1742
1751
  export {
1743
- resolveManifestProvenance as A,
1752
+ mergeLlmParts as A,
1744
1753
  BloxBuildResponseError as B,
1745
- splitSitemapPathsByLocale as C,
1746
- llmArtifacts as D,
1754
+ resolveManifestProvenance as C,
1755
+ splitSitemapPathsByLocale as D,
1756
+ llmArtifacts as E,
1747
1757
  prerender as a,
1748
1758
  buildCollectionResolver as b,
1749
1759
  validateInternalLinks as c,
@@ -1752,22 +1762,22 @@ export {
1752
1762
  fetchCmsSiteData as f,
1753
1763
  generateSitemapArtifacts as g,
1754
1764
  primaryContextEntry as h,
1755
- buildJsonLd as i,
1756
- extractPageText as j,
1757
- bloxBuildJson as k,
1758
- bloxBuildRequest as l,
1759
- buildSiteHead as m,
1760
- generateLlmsFullTxt as n,
1761
- generateLlmsTxt as o,
1765
+ isErrorPagePath as i,
1766
+ buildJsonLd as j,
1767
+ extractPageText as k,
1768
+ bloxBuildJson as l,
1769
+ bloxBuildRequest as m,
1770
+ buildSiteHead as n,
1771
+ generateLlmsFullTxt as o,
1762
1772
  polyfillBloxSsgGlobals as p,
1763
- generateNetlifyRedirects as q,
1764
- generateRobotsTxt as r,
1765
- generateSitemapIndexXml as s,
1766
- generateSitemapXml as t,
1773
+ generateLlmsTxt as q,
1774
+ generateNetlifyRedirects as r,
1775
+ generateRobotsTxt as s,
1776
+ generateSitemapIndexXml as t,
1767
1777
  uploadBloxManifest as u,
1768
1778
  validateSsgOutput as v,
1769
- getBloxBuildRequestOptions as w,
1770
- getSiteIconFlags as x,
1771
- localeSitemapPath as y,
1772
- mergeLlmParts as z
1779
+ generateSitemapXml as w,
1780
+ getBloxBuildRequestOptions as x,
1781
+ getSiteIconFlags as y,
1782
+ localeSitemapPath as z
1773
1783
  };
@@ -1048,7 +1048,7 @@ async function prerender({
1048
1048
  pageSlugMap = {},
1049
1049
  llm = {}
1050
1050
  } = {}) {
1051
- var _a, _b, _c, _d, _e, _f;
1051
+ var _a, _b, _c, _d, _e;
1052
1052
  const absRoot = path.resolve(root);
1053
1053
  const absClient = path.resolve(absRoot, clientOutDir);
1054
1054
  const absServerEntry = path.resolve(absRoot, serverEntry);
@@ -1141,13 +1141,15 @@ async function prerender({
1141
1141
  );
1142
1142
  }
1143
1143
  async function renderOne(urlPath) {
1144
+ var _a2;
1144
1145
  const {
1145
1146
  html,
1146
1147
  head = "",
1147
1148
  htmlAttrs = "",
1148
1149
  teleports = {},
1149
1150
  lastmod: pageLastmod,
1150
- llm: pageLlm
1151
+ llm: pageLlm,
1152
+ noindex: pageNoindex
1151
1153
  } = await serverMod.render(urlPath, {
1152
1154
  manifest,
1153
1155
  template,
@@ -1164,9 +1166,8 @@ async function prerender({
1164
1166
  rendered.push(urlPath);
1165
1167
  if (pageLastmod) lastmod[urlPath] = pageLastmod;
1166
1168
  if (llmEnabled && pageLlm) llmPages.push(pageLlm);
1167
- if (/<meta[^>]+name=["']robots["'][^>]*noindex/i.test(head)) {
1168
- noindexPaths.add(urlPath);
1169
- }
1169
+ const noindexForPage = pageNoindex ?? (!((_a2 = website == null ? void 0 : website.seo) == null ? void 0 : _a2.noindex) && /<meta[^>]+name=["']robots["'][^>]*noindex/i.test(head));
1170
+ if (noindexForPage) noindexPaths.add(urlPath);
1170
1171
  if (crawl) {
1171
1172
  for (const p of discoverInternalLinks(outHtml)) {
1172
1173
  enqueue(p, queue, seen, isExcluded);
@@ -1203,7 +1204,7 @@ async function prerender({
1203
1204
  }
1204
1205
  const canonicalBase = (((_a = website == null ? void 0 : website.seo) == null ? void 0 : _a.canonical_base_url) || (website == null ? void 0 : website.domain) || "").replace(/\/$/, "");
1205
1206
  if (writeSharedAssets) {
1206
- const sitemapPaths = ((_b = website == null ? void 0 : website.seo) == null ? void 0 : _b.noindex) ? rendered : rendered.filter((p) => !noindexPaths.has(p));
1207
+ const sitemapPaths = rendered.filter((p) => !noindexPaths.has(p) && !isErrorPagePath(p));
1207
1208
  if (canonicalBase && sitemapPaths.length > 0) {
1208
1209
  const artifacts = generateSitemapArtifacts({
1209
1210
  routes: sitemapPaths.map((routePath) => ({
@@ -1213,7 +1214,7 @@ async function prerender({
1213
1214
  canonicalBase,
1214
1215
  defaultLocale: (website == null ? void 0 : website.default_locale) ?? "en",
1215
1216
  supportedLocales: (website == null ? void 0 : website.supported_locales) ?? [(website == null ? void 0 : website.default_locale) ?? "en"],
1216
- splitByLocale: (_c = website == null ? void 0 : website.seo) == null ? void 0 : _c.sitemap_split_by_locale
1217
+ splitByLocale: (_b = website == null ? void 0 : website.seo) == null ? void 0 : _b.sitemap_split_by_locale
1217
1218
  });
1218
1219
  for (const artifact of artifacts) {
1219
1220
  await fs.writeFile(
@@ -1228,11 +1229,11 @@ async function prerender({
1228
1229
  const robotsTxt = generateRobotsTxt({
1229
1230
  robotsTxt: website == null ? void 0 : website.robots_txt,
1230
1231
  canonicalBase,
1231
- noindex: (_d = website == null ? void 0 : website.seo) == null ? void 0 : _d.noindex
1232
+ noindex: (_c = website == null ? void 0 : website.seo) == null ? void 0 : _c.noindex
1232
1233
  });
1233
1234
  await fs.writeFile(path.join(absClient, "robots.txt"), robotsTxt, "utf8");
1234
1235
  console.log(" Generated robots.txt");
1235
- if ((_e = website == null ? void 0 : website.seo) == null ? void 0 : _e.noindex) {
1236
+ if ((_d = website == null ? void 0 : website.seo) == null ? void 0 : _d.noindex) {
1236
1237
  const headersPath = path.join(absClient, "_headers");
1237
1238
  let existing = "";
1238
1239
  try {
@@ -1261,7 +1262,7 @@ ${existing}`,
1261
1262
  await fs.writeFile(redirectsPath, redirectsContent + existing, "utf8");
1262
1263
  console.log(` Generated _redirects (${redirects.length} rules)`);
1263
1264
  }
1264
- if (!((_f = website == null ? void 0 : website.seo) == null ? void 0 : _f.noindex) && llmEnabled && llm.writeIndex !== false && llmPages.length > 0) {
1265
+ if (!((_e = website == null ? void 0 : website.seo) == null ? void 0 : _e.noindex) && llmEnabled && llm.writeIndex !== false && llmPages.length > 0) {
1265
1266
  const indexable = llmPages.filter((p) => !noindexPaths.has(p.url));
1266
1267
  const llmsTxt = generateLlmsTxt({ website, pages: indexable, config: llm });
1267
1268
  await fs.writeFile(path.join(absClient, "llms.txt"), llmsTxt, "utf8");
@@ -1517,6 +1518,10 @@ function injectTeleports(html, teleports) {
1517
1518
  }
1518
1519
  return out;
1519
1520
  }
1521
+ function isErrorPagePath(urlPath) {
1522
+ const segments = urlPath.split(/[?#]/)[0].split("/").filter(Boolean);
1523
+ return segments.length > 0 && segments[segments.length - 1] === "404";
1524
+ }
1520
1525
  function outFilePath(absClientDir, urlPath, mode) {
1521
1526
  const [pathname] = urlPath.split("?");
1522
1527
  const safe = pathname === "/" ? "/" : pathname;
@@ -1570,6 +1575,10 @@ ${failures.map((item) => ` - ${item}`).join("\n")}`);
1570
1575
  }
1571
1576
  }
1572
1577
  async function validateNoRedirectingLinks(outDir) {
1578
+ if (process.env.BLOX_SSG_ASSERT_LINKS === "0") {
1579
+ console.warn("[blox-ssg] BLOX_SSG_ASSERT_LINKS=0 — skipping redirect-link validation");
1580
+ return;
1581
+ }
1573
1582
  const root = path.resolve(outDir);
1574
1583
  const redirectSources = await readRedirectSources(root, "301", "302", "307", "308");
1575
1584
  if (!redirectSources.size) return;
@@ -1780,6 +1789,7 @@ exports.generateSitemapIndexXml = generateSitemapIndexXml;
1780
1789
  exports.generateSitemapXml = generateSitemapXml;
1781
1790
  exports.getBloxBuildRequestOptions = getBloxBuildRequestOptions;
1782
1791
  exports.getSiteIconFlags = getSiteIconFlags;
1792
+ exports.isErrorPagePath = isErrorPagePath;
1783
1793
  exports.llmArtifacts = llmArtifacts;
1784
1794
  exports.localeSitemapPath = localeSitemapPath;
1785
1795
  exports.mergeLlmParts = mergeLlmParts;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bagelink/blox",
3
3
  "type": "module",
4
- "version": "1.18.7",
4
+ "version": "1.18.9",
5
5
  "description": "Blox page builder library for drag-and-drop page building and static data management",
6
6
  "author": {
7
7
  "name": "Bagel Studio",