@bagelink/blox 1.15.385 → 1.15.401

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.
@@ -611,11 +611,15 @@ async function mergeLlmParts(options) {
611
611
  const path2 = await import("node:path");
612
612
  const byUrl = /* @__PURE__ */ new Map();
613
613
  for (const file of options.partFiles) {
614
- try {
615
- const raw = await fs2.readFile(file, "utf8");
616
- const arr = JSON.parse(raw);
617
- for (const e of arr) if (e == null ? void 0 : e.url) byUrl.set(e.url, e);
618
- } catch {
614
+ const raw = await fs2.readFile(file, "utf8");
615
+ const arr = JSON.parse(raw);
616
+ if (!Array.isArray(arr)) throw new TypeError(`Invalid LLM shard part: ${file}`);
617
+ for (const entry of arr) {
618
+ const page = entry;
619
+ if (typeof page.url !== "string" || typeof page.title !== "string") {
620
+ throw new TypeError(`Invalid LLM page entry in shard part: ${file}`);
621
+ }
622
+ byUrl.set(page.url, page);
619
623
  }
620
624
  }
621
625
  const pages = [...byUrl.values()];
@@ -666,6 +670,8 @@ async function prerender({
666
670
  */
667
671
  resolvePrefetchConcurrency = 8,
668
672
  appPaths = [],
673
+ includeRoot = true,
674
+ routePartsFile,
669
675
  mode = "dir",
670
676
  website = null,
671
677
  websiteId = "",
@@ -700,7 +706,7 @@ async function prerender({
700
706
  const isExcluded = makeExcludeChecker(excludePaths);
701
707
  const queue = [];
702
708
  const seen = /* @__PURE__ */ new Set();
703
- enqueue("/", queue, seen, isExcluded);
709
+ if (includeRoot) enqueue("/", queue, seen, isExcluded);
704
710
  for (const p of paths) enqueue(p, queue, seen, isExcluded);
705
711
  const fontPreloads = await discoverFontPreloads(absClient);
706
712
  const rendered = [];
@@ -720,7 +726,13 @@ async function prerender({
720
726
  while (idx < targets.length) {
721
727
  const url = targets[idx++];
722
728
  if (resolveCache.has(url)) continue;
723
- resolveCache.set(url, await prefetch(url));
729
+ const resolved = await prefetch(url);
730
+ if (resolved == null) {
731
+ throw new Error(
732
+ `CMS route "${url}" returned no resolved page data during prerender`
733
+ );
734
+ }
735
+ resolveCache.set(url, resolved);
724
736
  }
725
737
  }
726
738
  await Promise.all(
@@ -826,13 +838,23 @@ async function prerender({
826
838
  }
827
839
  }
828
840
  }
829
- if (llmEnabled && llm.partsFile && llmPages.length > 0) {
841
+ if (llmEnabled && llm.partsFile) {
830
842
  const indexable = llmPages.filter((p) => !noindexPaths.has(p.url));
831
843
  const partPath = path.resolve(absRoot, llm.partsFile);
832
844
  await fs.mkdir(path.dirname(partPath), { recursive: true });
833
845
  await fs.writeFile(partPath, JSON.stringify(indexable), "utf8");
834
846
  console.log(` Wrote ${indexable.length} llm page extract(s) → ${llm.partsFile}`);
835
847
  }
848
+ if (routePartsFile) {
849
+ const partPath = path.resolve(absRoot, routePartsFile);
850
+ const routes = rendered.map((url) => ({
851
+ url,
852
+ lastmod: lastmod[url],
853
+ noindex: noindexPaths.has(url)
854
+ }));
855
+ await fs.mkdir(path.dirname(partPath), { recursive: true });
856
+ await fs.writeFile(partPath, JSON.stringify(routes), "utf8");
857
+ }
836
858
  return {
837
859
  rendered,
838
860
  failures,
@@ -588,11 +588,15 @@ async function mergeLlmParts(options) {
588
588
  const path2 = await import("node:path");
589
589
  const byUrl = /* @__PURE__ */ new Map();
590
590
  for (const file of options.partFiles) {
591
- try {
592
- const raw = await fs2.readFile(file, "utf8");
593
- const arr = JSON.parse(raw);
594
- for (const e of arr) if (e == null ? void 0 : e.url) byUrl.set(e.url, e);
595
- } catch {
591
+ const raw = await fs2.readFile(file, "utf8");
592
+ const arr = JSON.parse(raw);
593
+ if (!Array.isArray(arr)) throw new TypeError(`Invalid LLM shard part: ${file}`);
594
+ for (const entry of arr) {
595
+ const page = entry;
596
+ if (typeof page.url !== "string" || typeof page.title !== "string") {
597
+ throw new TypeError(`Invalid LLM page entry in shard part: ${file}`);
598
+ }
599
+ byUrl.set(page.url, page);
596
600
  }
597
601
  }
598
602
  const pages = [...byUrl.values()];
@@ -643,6 +647,8 @@ async function prerender({
643
647
  */
644
648
  resolvePrefetchConcurrency = 8,
645
649
  appPaths = [],
650
+ includeRoot = true,
651
+ routePartsFile,
646
652
  mode = "dir",
647
653
  website = null,
648
654
  websiteId = "",
@@ -677,7 +683,7 @@ async function prerender({
677
683
  const isExcluded = makeExcludeChecker(excludePaths);
678
684
  const queue = [];
679
685
  const seen = /* @__PURE__ */ new Set();
680
- enqueue("/", queue, seen, isExcluded);
686
+ if (includeRoot) enqueue("/", queue, seen, isExcluded);
681
687
  for (const p of paths) enqueue(p, queue, seen, isExcluded);
682
688
  const fontPreloads = await discoverFontPreloads(absClient);
683
689
  const rendered = [];
@@ -697,7 +703,13 @@ async function prerender({
697
703
  while (idx < targets.length) {
698
704
  const url = targets[idx++];
699
705
  if (resolveCache.has(url)) continue;
700
- resolveCache.set(url, await prefetch(url));
706
+ const resolved = await prefetch(url);
707
+ if (resolved == null) {
708
+ throw new Error(
709
+ `CMS route "${url}" returned no resolved page data during prerender`
710
+ );
711
+ }
712
+ resolveCache.set(url, resolved);
701
713
  }
702
714
  }
703
715
  await Promise.all(
@@ -803,13 +815,23 @@ async function prerender({
803
815
  }
804
816
  }
805
817
  }
806
- if (llmEnabled && llm.partsFile && llmPages.length > 0) {
818
+ if (llmEnabled && llm.partsFile) {
807
819
  const indexable = llmPages.filter((p) => !noindexPaths.has(p.url));
808
820
  const partPath = path.resolve(absRoot, llm.partsFile);
809
821
  await fs.mkdir(path.dirname(partPath), { recursive: true });
810
822
  await fs.writeFile(partPath, JSON.stringify(indexable), "utf8");
811
823
  console.log(` Wrote ${indexable.length} llm page extract(s) → ${llm.partsFile}`);
812
824
  }
825
+ if (routePartsFile) {
826
+ const partPath = path.resolve(absRoot, routePartsFile);
827
+ const routes = rendered.map((url) => ({
828
+ url,
829
+ lastmod: lastmod[url],
830
+ noindex: noindexPaths.has(url)
831
+ }));
832
+ await fs.mkdir(path.dirname(partPath), { recursive: true });
833
+ await fs.writeFile(partPath, JSON.stringify(routes), "utf8");
834
+ }
813
835
  return {
814
836
  rendered,
815
837
  failures,
@@ -954,15 +976,15 @@ export {
954
976
  buildJsonLd as d,
955
977
  extractPageText as e,
956
978
  fetchCmsSiteData as f,
957
- bloxBuildJson as g,
958
- bloxBuildRequest as h,
959
- buildSiteHead as i,
960
- fetchCmsPrerenderPaths as j,
961
- generateLlmsFullTxt as k,
962
- generateLlmsTxt as l,
963
- generateNetlifyRedirects as m,
964
- generateRobotsTxt as n,
965
- generateSitemapXml as o,
979
+ generateSitemapXml as g,
980
+ bloxBuildJson as h,
981
+ bloxBuildRequest as i,
982
+ buildSiteHead as j,
983
+ fetchCmsPrerenderPaths as k,
984
+ generateLlmsFullTxt as l,
985
+ generateLlmsTxt as m,
986
+ generateNetlifyRedirects as n,
987
+ generateRobotsTxt as o,
966
988
  polyfillBloxSsgGlobals as p,
967
989
  getBloxBuildRequestOptions as q,
968
990
  getSiteIconFlags as r,
@@ -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 } from "./prerender-DfIkpbr8.js";
5
+ import { f as fetchCmsSiteData, g as generateSitemapXml } from "./prerender-C3er5vVQ.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
  function resolveShardCount(shards) {
@@ -26,7 +26,7 @@ async function enumerateRoutes(cmd) {
26
26
  );
27
27
  });
28
28
  }
29
- function runShard(index, total, paths, opts, llmPartsDir, siteDataFile) {
29
+ function runShard(index, total, paths, opts, llmPartsDir, routePartsDir, siteDataFile) {
30
30
  return new Promise((resolve) => {
31
31
  const cliEntry = process.argv[1];
32
32
  const shardArgs = [
@@ -34,6 +34,7 @@ function runShard(index, total, paths, opts, llmPartsDir, siteDataFile) {
34
34
  `--shard=${index}/${total}`,
35
35
  "--no-crawl",
36
36
  `--llm-parts=${path.join(llmPartsDir, `part.${index}.json`)}`,
37
+ `--route-parts=${path.join(routePartsDir, `part.${index}.json`)}`,
37
38
  `--site-data=${siteDataFile}`,
38
39
  ...opts.passthroughArgs,
39
40
  ...paths
@@ -55,27 +56,48 @@ function runShard(index, total, paths, opts, llmPartsDir, siteDataFile) {
55
56
  });
56
57
  }
57
58
  async function runSharded(opts) {
59
+ var _a;
58
60
  const total = resolveShardCount(opts.shards);
59
61
  const fs = await import("node:fs/promises");
60
62
  const paths = [...opts.extraPaths];
63
+ const appPaths = [...opts.extraPaths];
61
64
  if (opts.routesCmd) {
62
65
  const enumerated = await enumerateRoutes(opts.routesCmd);
63
- for (const p of enumerated) if (!paths.includes(p)) paths.push(p);
66
+ for (const p of enumerated) {
67
+ if (!paths.includes(p)) paths.push(p);
68
+ if (!appPaths.includes(p)) appPaths.push(p);
69
+ }
64
70
  console.log(`[blox-ssg] routes-cmd enumerated ${enumerated.length} route(s)`);
65
71
  }
66
72
  const siteData = await fetchCmsSiteData(opts.apiBase, opts.websiteName);
67
73
  for (const p of siteData.paths) if (!paths.includes(p)) paths.push(p);
74
+ const cmsPathSet = new Set(siteData.paths);
75
+ const routerPaths = appPaths.filter((path2) => !cmsPathSet.has(path2));
76
+ if (!paths.includes("/")) {
77
+ paths.unshift("/");
78
+ routerPaths.unshift("/");
79
+ }
80
+ const website = process.env.BLOX_SSG_SITE_NOINDEX === "0" ? { ...siteData.website, seo: { ...siteData.website.seo, noindex: false } } : siteData.website;
68
81
  console.log(`[blox-ssg] sharded run · ${total} shard(s) · ${paths.length} extra path(s)`);
69
82
  const llmPartsDir = path.resolve("dist", ".llm-parts");
70
- await fs.mkdir(llmPartsDir, { recursive: true }).catch(() => {
71
- });
83
+ const routePartsDir = path.resolve("dist", ".route-parts");
84
+ await Promise.all([
85
+ fs.rm(llmPartsDir, { recursive: true, force: true }),
86
+ fs.rm(routePartsDir, { recursive: true, force: true })
87
+ ]);
88
+ await Promise.all([
89
+ fs.mkdir(llmPartsDir, { recursive: true }),
90
+ fs.mkdir(routePartsDir, { recursive: true })
91
+ ]);
72
92
  const siteDataFile = path.resolve("dist", ".ssg-site-data.json");
73
93
  await fs.writeFile(siteDataFile, JSON.stringify({
74
94
  ...siteData,
75
- paths
95
+ website,
96
+ paths,
97
+ appPaths: routerPaths
76
98
  }), "utf8");
77
99
  const start = Date.now();
78
- const codes = total === 1 ? [await runShard(0, 1, [], opts, llmPartsDir, siteDataFile)] : await Promise.all(Array.from({ length: total }, (_, i) => runShard(i, total, [], opts, llmPartsDir, siteDataFile)));
100
+ const codes = total === 1 ? [await runShard(0, 1, [], opts, llmPartsDir, routePartsDir, siteDataFile)] : await Promise.all(Array.from({ length: total }, (_, i) => runShard(i, total, [], opts, llmPartsDir, routePartsDir, siteDataFile)));
79
101
  const failed = codes.findIndex((c) => c !== 0);
80
102
  if (failed !== -1) {
81
103
  console.error(`[blox-ssg] shard ${failed} exited with code ${codes[failed]}`);
@@ -83,13 +105,13 @@ async function runSharded(opts) {
83
105
  }
84
106
  if (process.env.BLOX_SSG_LLM !== "0") {
85
107
  try {
86
- const { mergeLlmParts } = await import("./prerender-DfIkpbr8.js").then((n) => n.t);
87
- const website = siteData.website;
108
+ const { mergeLlmParts } = await import("./prerender-C3er5vVQ.js").then((n) => n.t);
109
+ const mergeWebsite = website;
88
110
  const partFiles = Array.from({ length: total }, (_, i) => path.join(llmPartsDir, `part.${i}.json`));
89
111
  const { pages } = await mergeLlmParts({
90
112
  partFiles,
91
113
  outDir: path.resolve("dist"),
92
- website,
114
+ website: mergeWebsite,
93
115
  config: { fullText: process.env.BLOX_SSG_LLM_FULL !== "0" }
94
116
  });
95
117
  console.log(`[blox-ssg] merged llms.txt (${pages} pages)`);
@@ -97,6 +119,23 @@ async function runSharded(opts) {
97
119
  console.warn(`[blox-ssg] llms merge skipped: ${e.message}`);
98
120
  }
99
121
  }
122
+ const routeParts = await Promise.all(Array.from({ length: total }, async (_, i) => {
123
+ const file = path.join(routePartsDir, `part.${i}.json`);
124
+ return JSON.parse(await fs.readFile(file, "utf8"));
125
+ }));
126
+ const byUrl = new Map(routeParts.flat().map((route) => [route.url, route]));
127
+ const canonicalBase = (((_a = website.seo) == null ? void 0 : _a.canonical_base_url) || website.domain || "").replace(/\/$/, "");
128
+ const indexableRoutes = [...byUrl.values()].filter((route) => !route.noindex);
129
+ if (canonicalBase && indexableRoutes.length > 0) {
130
+ await fs.writeFile(path.resolve("dist", "sitemap.xml"), generateSitemapXml({
131
+ renderedPaths: indexableRoutes.map((route) => route.url),
132
+ canonicalBase,
133
+ lastmod: Object.fromEntries(
134
+ indexableRoutes.flatMap((route) => route.lastmod ? [[route.url, route.lastmod]] : [])
135
+ )
136
+ }), "utf8");
137
+ }
138
+ await fs.rm(routePartsDir, { recursive: true, force: true });
100
139
  await fs.rm(siteDataFile, { force: true }).catch(() => {
101
140
  });
102
141
  console.log(`[blox-ssg] sharded run done in ${((Date.now() - start) / 1e3).toFixed(1)}s`);
@@ -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("./prerender-CI54eV74.cjs");
29
+ const llmArtifacts = require("./prerender-B6kU3SoG.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
  function resolveShardCount(shards) {
@@ -50,7 +50,7 @@ async function enumerateRoutes(cmd) {
50
50
  );
51
51
  });
52
52
  }
53
- function runShard(index, total, paths, opts, llmPartsDir, siteDataFile) {
53
+ function runShard(index, total, paths, opts, llmPartsDir, routePartsDir, siteDataFile) {
54
54
  return new Promise((resolve) => {
55
55
  const cliEntry = process.argv[1];
56
56
  const shardArgs = [
@@ -58,6 +58,7 @@ function runShard(index, total, paths, opts, llmPartsDir, siteDataFile) {
58
58
  `--shard=${index}/${total}`,
59
59
  "--no-crawl",
60
60
  `--llm-parts=${path.join(llmPartsDir, `part.${index}.json`)}`,
61
+ `--route-parts=${path.join(routePartsDir, `part.${index}.json`)}`,
61
62
  `--site-data=${siteDataFile}`,
62
63
  ...opts.passthroughArgs,
63
64
  ...paths
@@ -79,27 +80,48 @@ function runShard(index, total, paths, opts, llmPartsDir, siteDataFile) {
79
80
  });
80
81
  }
81
82
  async function runSharded(opts) {
83
+ var _a;
82
84
  const total = resolveShardCount(opts.shards);
83
85
  const fs = await import("node:fs/promises");
84
86
  const paths = [...opts.extraPaths];
87
+ const appPaths = [...opts.extraPaths];
85
88
  if (opts.routesCmd) {
86
89
  const enumerated = await enumerateRoutes(opts.routesCmd);
87
- for (const p of enumerated) if (!paths.includes(p)) paths.push(p);
90
+ for (const p of enumerated) {
91
+ if (!paths.includes(p)) paths.push(p);
92
+ if (!appPaths.includes(p)) appPaths.push(p);
93
+ }
88
94
  console.log(`[blox-ssg] routes-cmd enumerated ${enumerated.length} route(s)`);
89
95
  }
90
96
  const siteData = await llmArtifacts.fetchCmsSiteData(opts.apiBase, opts.websiteName);
91
97
  for (const p of siteData.paths) if (!paths.includes(p)) paths.push(p);
98
+ const cmsPathSet = new Set(siteData.paths);
99
+ const routerPaths = appPaths.filter((path2) => !cmsPathSet.has(path2));
100
+ if (!paths.includes("/")) {
101
+ paths.unshift("/");
102
+ routerPaths.unshift("/");
103
+ }
104
+ const website = process.env.BLOX_SSG_SITE_NOINDEX === "0" ? { ...siteData.website, seo: { ...siteData.website.seo, noindex: false } } : siteData.website;
92
105
  console.log(`[blox-ssg] sharded run · ${total} shard(s) · ${paths.length} extra path(s)`);
93
106
  const llmPartsDir = path.resolve("dist", ".llm-parts");
94
- await fs.mkdir(llmPartsDir, { recursive: true }).catch(() => {
95
- });
107
+ const routePartsDir = path.resolve("dist", ".route-parts");
108
+ await Promise.all([
109
+ fs.rm(llmPartsDir, { recursive: true, force: true }),
110
+ fs.rm(routePartsDir, { recursive: true, force: true })
111
+ ]);
112
+ await Promise.all([
113
+ fs.mkdir(llmPartsDir, { recursive: true }),
114
+ fs.mkdir(routePartsDir, { recursive: true })
115
+ ]);
96
116
  const siteDataFile = path.resolve("dist", ".ssg-site-data.json");
97
117
  await fs.writeFile(siteDataFile, JSON.stringify({
98
118
  ...siteData,
99
- paths
119
+ website,
120
+ paths,
121
+ appPaths: routerPaths
100
122
  }), "utf8");
101
123
  const start = Date.now();
102
- const codes = total === 1 ? [await runShard(0, 1, [], opts, llmPartsDir, siteDataFile)] : await Promise.all(Array.from({ length: total }, (_, i) => runShard(i, total, [], opts, llmPartsDir, siteDataFile)));
124
+ const codes = total === 1 ? [await runShard(0, 1, [], opts, llmPartsDir, routePartsDir, siteDataFile)] : await Promise.all(Array.from({ length: total }, (_, i) => runShard(i, total, [], opts, llmPartsDir, routePartsDir, siteDataFile)));
103
125
  const failed = codes.findIndex((c) => c !== 0);
104
126
  if (failed !== -1) {
105
127
  console.error(`[blox-ssg] shard ${failed} exited with code ${codes[failed]}`);
@@ -107,13 +129,13 @@ async function runSharded(opts) {
107
129
  }
108
130
  if (process.env.BLOX_SSG_LLM !== "0") {
109
131
  try {
110
- const { mergeLlmParts } = await Promise.resolve().then(() => require("./prerender-CI54eV74.cjs")).then((n) => n.llmArtifacts);
111
- const website = siteData.website;
132
+ const { mergeLlmParts } = await Promise.resolve().then(() => require("./prerender-B6kU3SoG.cjs")).then((n) => n.llmArtifacts);
133
+ const mergeWebsite = website;
112
134
  const partFiles = Array.from({ length: total }, (_, i) => path.join(llmPartsDir, `part.${i}.json`));
113
135
  const { pages } = await mergeLlmParts({
114
136
  partFiles,
115
137
  outDir: path.resolve("dist"),
116
- website,
138
+ website: mergeWebsite,
117
139
  config: { fullText: process.env.BLOX_SSG_LLM_FULL !== "0" }
118
140
  });
119
141
  console.log(`[blox-ssg] merged llms.txt (${pages} pages)`);
@@ -121,6 +143,23 @@ async function runSharded(opts) {
121
143
  console.warn(`[blox-ssg] llms merge skipped: ${e.message}`);
122
144
  }
123
145
  }
146
+ const routeParts = await Promise.all(Array.from({ length: total }, async (_, i) => {
147
+ const file = path.join(routePartsDir, `part.${i}.json`);
148
+ return JSON.parse(await fs.readFile(file, "utf8"));
149
+ }));
150
+ const byUrl = new Map(routeParts.flat().map((route) => [route.url, route]));
151
+ const canonicalBase = (((_a = website.seo) == null ? void 0 : _a.canonical_base_url) || website.domain || "").replace(/\/$/, "");
152
+ const indexableRoutes = [...byUrl.values()].filter((route) => !route.noindex);
153
+ if (canonicalBase && indexableRoutes.length > 0) {
154
+ await fs.writeFile(path.resolve("dist", "sitemap.xml"), llmArtifacts.generateSitemapXml({
155
+ renderedPaths: indexableRoutes.map((route) => route.url),
156
+ canonicalBase,
157
+ lastmod: Object.fromEntries(
158
+ indexableRoutes.flatMap((route) => route.lastmod ? [[route.url, route.lastmod]] : [])
159
+ )
160
+ }), "utf8");
161
+ }
162
+ await fs.rm(routePartsDir, { recursive: true, force: true });
124
163
  await fs.rm(siteDataFile, { force: true }).catch(() => {
125
164
  });
126
165
  console.log(`[blox-ssg] sharded run done in ${((Date.now() - start) / 1e3).toFixed(1)}s`);
package/dist/ssg/cli.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  const process = require("node:process");
4
4
  const fs = require("node:fs/promises");
5
- const llmArtifacts = require("../prerender-CI54eV74.cjs");
5
+ const llmArtifacts = require("../prerender-B6kU3SoG.cjs");
6
6
  function installFetchTimeout() {
7
7
  const ms = Number(process.env.BLOX_SSG_FETCH_TIMEOUT_MS) || 2e4;
8
8
  const original = globalThis.fetch;
@@ -48,6 +48,7 @@ async function main() {
48
48
  let shardIndex = 0;
49
49
  let shardTotal = 1;
50
50
  let llmPartsFile = "";
51
+ let routePartsFile = "";
51
52
  let shardsOpt = null;
52
53
  let routesCmd = "";
53
54
  let siteDataFile = "";
@@ -106,6 +107,8 @@ Environment:
106
107
  passthroughArgs.push(a);
107
108
  } else if (a.startsWith("--llm-parts=")) {
108
109
  llmPartsFile = a.slice("--llm-parts=".length);
110
+ } else if (a.startsWith("--route-parts=")) {
111
+ routePartsFile = a.slice("--route-parts=".length);
109
112
  } else {
110
113
  extraPaths.push(a);
111
114
  }
@@ -113,7 +116,7 @@ Environment:
113
116
  if (shardsOpt !== null || routesCmd) {
114
117
  const { apiBase: apiBase2, websiteName: configWebsiteName2 } = await resolveApiBase(mode);
115
118
  const websiteName2 = process.env.WEBSITE_NAME ?? configWebsiteName2 ?? "default";
116
- const { runSharded } = await Promise.resolve().then(() => require("../shard-runner-DB37MOsu.cjs"));
119
+ const { runSharded } = await Promise.resolve().then(() => require("../shard-runner-CVUbCaxW.cjs"));
117
120
  const code = await runSharded({
118
121
  shards: shardsOpt ?? "auto",
119
122
  mode,
@@ -136,11 +139,13 @@ Environment:
136
139
  let redirects = [];
137
140
  const collections = {};
138
141
  let cmsPathSet = /* @__PURE__ */ new Set();
142
+ let cachedAppPaths = [];
139
143
  const productionBuild = process.env.NODE_ENV === "production" || mode === "production";
140
144
  try {
141
145
  const siteData = siteDataFile ? JSON.parse(await fs.readFile(siteDataFile, "utf8")) : await llmArtifacts.fetchCmsSiteData(apiBase, websiteName);
142
146
  paths = siteData.paths;
143
- cmsPathSet = new Set(siteData.paths);
147
+ cachedAppPaths = "appPaths" in siteData && Array.isArray(siteData.appPaths) ? siteData.appPaths : [];
148
+ cmsPathSet = new Set(siteData.paths.filter((path) => !cachedAppPaths.includes(path)));
144
149
  website = siteData.website;
145
150
  websiteId = siteData.websiteId;
146
151
  redirects = siteData.redirects;
@@ -156,7 +161,10 @@ Environment:
156
161
  for (const p of extraPaths) {
157
162
  if (!paths.includes(p)) paths.push(p);
158
163
  }
159
- let appPaths = paths.filter((path) => !cmsPathSet.has(path));
164
+ let appPaths = [.../* @__PURE__ */ new Set([
165
+ ...cachedAppPaths,
166
+ ...paths.filter((path) => !cmsPathSet.has(path))
167
+ ])];
160
168
  if (shardTotal > 1) {
161
169
  paths = [...paths].sort();
162
170
  paths = paths.filter((_, idx) => idx % shardTotal === shardIndex);
@@ -183,6 +191,8 @@ Environment:
183
191
  // hammer a small API. 0 disables prefetch (inline resolve).
184
192
  resolvePrefetchConcurrency: process.env.BLOX_SSG_PREFETCH !== void 0 ? Number(process.env.BLOX_SSG_PREFETCH) : 8,
185
193
  appPaths,
194
+ includeRoot: shardTotal === 1,
195
+ routePartsFile: routePartsFile || void 0,
186
196
  mode: "file",
187
197
  // Only shard 0 writes shared, whole-site assets (sitemap/robots/_redirects)
188
198
  // so parallel shards don't race/clobber them.
package/dist/ssg/cli.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bun
2
2
  import process from "node:process";
3
3
  import fs from "node:fs/promises";
4
- import { p as polyfillBloxSsgGlobals, f as fetchCmsSiteData, a as prerender } from "../prerender-DfIkpbr8.js";
4
+ import { p as polyfillBloxSsgGlobals, f as fetchCmsSiteData, a as prerender } from "../prerender-C3er5vVQ.js";
5
5
  function installFetchTimeout() {
6
6
  const ms = Number(process.env.BLOX_SSG_FETCH_TIMEOUT_MS) || 2e4;
7
7
  const original = globalThis.fetch;
@@ -47,6 +47,7 @@ async function main() {
47
47
  let shardIndex = 0;
48
48
  let shardTotal = 1;
49
49
  let llmPartsFile = "";
50
+ let routePartsFile = "";
50
51
  let shardsOpt = null;
51
52
  let routesCmd = "";
52
53
  let siteDataFile = "";
@@ -105,6 +106,8 @@ Environment:
105
106
  passthroughArgs.push(a);
106
107
  } else if (a.startsWith("--llm-parts=")) {
107
108
  llmPartsFile = a.slice("--llm-parts=".length);
109
+ } else if (a.startsWith("--route-parts=")) {
110
+ routePartsFile = a.slice("--route-parts=".length);
108
111
  } else {
109
112
  extraPaths.push(a);
110
113
  }
@@ -112,7 +115,7 @@ Environment:
112
115
  if (shardsOpt !== null || routesCmd) {
113
116
  const { apiBase: apiBase2, websiteName: configWebsiteName2 } = await resolveApiBase(mode);
114
117
  const websiteName2 = process.env.WEBSITE_NAME ?? configWebsiteName2 ?? "default";
115
- const { runSharded } = await import("../shard-runner-D4TGQ2FM.js");
118
+ const { runSharded } = await import("../shard-runner-B0N99n_D.js");
116
119
  const code = await runSharded({
117
120
  shards: shardsOpt ?? "auto",
118
121
  mode,
@@ -135,11 +138,13 @@ Environment:
135
138
  let redirects = [];
136
139
  const collections = {};
137
140
  let cmsPathSet = /* @__PURE__ */ new Set();
141
+ let cachedAppPaths = [];
138
142
  const productionBuild = process.env.NODE_ENV === "production" || mode === "production";
139
143
  try {
140
144
  const siteData = siteDataFile ? JSON.parse(await fs.readFile(siteDataFile, "utf8")) : await fetchCmsSiteData(apiBase, websiteName);
141
145
  paths = siteData.paths;
142
- cmsPathSet = new Set(siteData.paths);
146
+ cachedAppPaths = "appPaths" in siteData && Array.isArray(siteData.appPaths) ? siteData.appPaths : [];
147
+ cmsPathSet = new Set(siteData.paths.filter((path) => !cachedAppPaths.includes(path)));
143
148
  website = siteData.website;
144
149
  websiteId = siteData.websiteId;
145
150
  redirects = siteData.redirects;
@@ -155,7 +160,10 @@ Environment:
155
160
  for (const p of extraPaths) {
156
161
  if (!paths.includes(p)) paths.push(p);
157
162
  }
158
- let appPaths = paths.filter((path) => !cmsPathSet.has(path));
163
+ let appPaths = [.../* @__PURE__ */ new Set([
164
+ ...cachedAppPaths,
165
+ ...paths.filter((path) => !cmsPathSet.has(path))
166
+ ])];
159
167
  if (shardTotal > 1) {
160
168
  paths = [...paths].sort();
161
169
  paths = paths.filter((_, idx) => idx % shardTotal === shardIndex);
@@ -182,6 +190,8 @@ Environment:
182
190
  // hammer a small API. 0 disables prefetch (inline resolve).
183
191
  resolvePrefetchConcurrency: process.env.BLOX_SSG_PREFETCH !== void 0 ? Number(process.env.BLOX_SSG_PREFETCH) : 8,
184
192
  appPaths,
193
+ includeRoot: shardTotal === 1,
194
+ routePartsFile: routePartsFile || void 0,
185
195
  mode: "file",
186
196
  // Only shard 0 writes shared, whole-site assets (sitemap/robots/_redirects)
187
197
  // so parallel shards don't race/clobber them.
@@ -22,7 +22,7 @@ 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("../prerender-CI54eV74.cjs");
25
+ const llmArtifacts = require("../prerender-B6kU3SoG.cjs");
26
26
  const ssg_client = require("./client.cjs");
27
27
  const pinia = require("pinia");
28
28
  const vue = require("vue");
@@ -1,9 +1,9 @@
1
- import { b as buildPageHead, c as primaryContextEntry, d as buildJsonLd, e as extractPageText, B as BloxBuildResponseError, g as bloxBuildJson } from "../prerender-DfIkpbr8.js";
2
- import { h, i, j, f, k, l, m, n, o, q, r, s, p, a } from "../prerender-DfIkpbr8.js";
1
+ import { b as buildPageHead, c as primaryContextEntry, d as buildJsonLd, e as extractPageText, B as BloxBuildResponseError, h as bloxBuildJson } from "../prerender-C3er5vVQ.js";
2
+ import { i, j, k, f, l, m, n, o, g, q, r, s, p, a } from "../prerender-C3er5vVQ.js";
3
3
  import { BLOX_STATE_WINDOW_KEY, BLOX_WEBSITE_ID_WINDOW_KEY } from "./client.mjs";
4
4
  import { BLOX_COLLECTIONS_WINDOW_KEY, BLOX_DATA_WINDOW_KEY, BLOX_PAGE_SEO_WINDOW_KEY, getCollectionCache, getEmbeddedWebsiteId, installBloxStateCache, installCollectionCache } from "./client.mjs";
5
5
  import { createPinia } from "pinia";
6
- import { createSSRApp, h as h2, Suspense, markRaw } from "vue";
6
+ import { createSSRApp, h, Suspense, markRaw } from "vue";
7
7
  import { B as BLOX_DATA_WINDOW_KEY2, s as setApiOrigin, a as setActiveLocale, c as collectBloxData, b as collectBloxSeo, p as provideBloxData, d as createBlox, g as generateContentRoutes, i as installLocaleAwareResolve } from "../routes-bNk2CPnS.js";
8
8
  async function renderBloxSsgPage(options) {
9
9
  var _a, _b, _c;
@@ -24,10 +24,10 @@ async function renderBloxSsgPage(options) {
24
24
  if (resolvedData != null && !websiteId) {
25
25
  throw new Error(`CMS page "${url}" requires a websiteId for hydration`);
26
26
  }
27
- const g = globalThis;
28
- const prevState = g[stateWindowKey];
27
+ const g2 = globalThis;
28
+ const prevState = g2[stateWindowKey];
29
29
  if (resolvedData != null) {
30
- g[stateWindowKey] = { [stateKey]: resolvedData };
30
+ g2[stateWindowKey] = { [stateKey]: resolvedData };
31
31
  }
32
32
  try {
33
33
  const { app, router, dataRegistry } = createAppForUrl(url);
@@ -80,9 +80,9 @@ ${jsonLd}`;
80
80
  return { html, head, htmlAttrs, llm: llmEntry };
81
81
  } finally {
82
82
  if (prevState !== void 0) {
83
- g[stateWindowKey] = prevState;
83
+ g2[stateWindowKey] = prevState;
84
84
  } else {
85
- delete g[stateWindowKey];
85
+ delete g2[stateWindowKey];
86
86
  }
87
87
  }
88
88
  }
@@ -141,7 +141,7 @@ function createBloxSSREntry(options) {
141
141
  const router = createRouter("memory", url);
142
142
  const app = createSSRApp({
143
143
  name: "BloxSsgRoot",
144
- render: () => h2(Suspense, null, { default: () => h2(rootComponent) })
144
+ render: () => h(Suspense, null, { default: () => h(rootComponent) })
145
145
  });
146
146
  const dataRegistry = provideBloxData(app, { server: true });
147
147
  const pinia = createPinia();
@@ -219,19 +219,19 @@ export {
219
219
  BLOX_WEBSITE_ID_WINDOW_KEY,
220
220
  BloxBuildResponseError,
221
221
  bloxBuildJson,
222
- h as bloxBuildRequest,
222
+ i as bloxBuildRequest,
223
223
  buildJsonLd,
224
224
  buildPageHead,
225
- i as buildSiteHead,
225
+ j as buildSiteHead,
226
226
  createBloxSSREntry,
227
227
  extractPageText,
228
- j as fetchCmsPrerenderPaths,
228
+ k as fetchCmsPrerenderPaths,
229
229
  f as fetchCmsSiteData,
230
- k as generateLlmsFullTxt,
231
- l as generateLlmsTxt,
232
- m as generateNetlifyRedirects,
233
- n as generateRobotsTxt,
234
- o as generateSitemapXml,
230
+ l as generateLlmsFullTxt,
231
+ m as generateLlmsTxt,
232
+ n as generateNetlifyRedirects,
233
+ o as generateRobotsTxt,
234
+ g as generateSitemapXml,
235
235
  q as getBloxBuildRequestOptions,
236
236
  getCollectionCache,
237
237
  getEmbeddedWebsiteId,
@@ -1 +1 @@
1
- {"version":3,"file":"llm-artifacts.d.ts","sourceRoot":"","sources":["../../src/ssg/llm-artifacts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAMzD,sEAAsE;AACtE,MAAM,WAAW,kBAAkB;IAClC,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACnD;AAED,gEAAgE;AAChE,MAAM,WAAW,YAAY;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAA;CACb;AA0CD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE;IACpC,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC1B,OAAO,EAAE,WAAW,GAAG,IAAI,CAAA;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,kBAAkB,CAAA;CAC3B,GAAG,MAAM,CAiET;AAMD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACxC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAA;IAC3B,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,MAAM,CAAC,EAAE,kBAAkB,CAAA;CAC3B,GAAG,MAAM,CAwCT;AAMD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC5C,OAAO,EAAE,WAAW,GAAG,IAAI,CAAA;IAC3B,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,MAAM,CAAC,EAAE,kBAAkB,CAAA;CAC3B,GAAG,MAAM,CAmBT;AAMD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAqBpD;AAMD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,OAAO,CAMpF;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAC5C,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,WAAW,GAAG,IAAI,CAAA;IAC3B,MAAM,CAAC,EAAE,kBAAkB,CAAA;CAC3B,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA0B7B"}
1
+ {"version":3,"file":"llm-artifacts.d.ts","sourceRoot":"","sources":["../../src/ssg/llm-artifacts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAMzD,sEAAsE;AACtE,MAAM,WAAW,kBAAkB;IAClC,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACnD;AAED,gEAAgE;AAChE,MAAM,WAAW,YAAY;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAA;CACb;AA0CD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE;IACpC,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC1B,OAAO,EAAE,WAAW,GAAG,IAAI,CAAA;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,kBAAkB,CAAA;CAC3B,GAAG,MAAM,CAiET;AAMD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACxC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAA;IAC3B,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,MAAM,CAAC,EAAE,kBAAkB,CAAA;CAC3B,GAAG,MAAM,CAwCT;AAMD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC5C,OAAO,EAAE,WAAW,GAAG,IAAI,CAAA;IAC3B,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,MAAM,CAAC,EAAE,kBAAkB,CAAA;CAC3B,GAAG,MAAM,CAmBT;AAMD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAqBpD;AAMD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,OAAO,CAMpF;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAC5C,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,WAAW,GAAG,IAAI,CAAA;IAC3B,MAAM,CAAC,EAAE,kBAAkB,CAAA;CAC3B,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA6B7B"}
@@ -23,6 +23,10 @@ export interface PrerenderOptions {
23
23
  resolvePrefetchConcurrency?: number;
24
24
  /** Paths known to be app/router-owned; skip CMS resolve probes for these. */
25
25
  appPaths?: string[];
26
+ /** Whether to add `/` when it is absent from `paths` (default true). */
27
+ includeRoot?: boolean;
28
+ /** Sharded builds write rendered route metadata here for coordinator merging. */
29
+ routePartsFile?: string;
26
30
  mode?: 'dir' | 'file';
27
31
  /** Website settings for SEO injection. */
28
32
  website?: WebsiteRead | null;
@@ -96,7 +100,7 @@ export declare function prerender({ root, clientOutDir, serverEntry, paths, craw
96
100
  * sharded runner divides a global budget by the shard count. 0 disables
97
101
  * prefetch (render resolves inline). Default 8.
98
102
  */
99
- resolvePrefetchConcurrency, appPaths, mode, website, websiteId, redirects, collections, llm, }?: PrerenderOptions): Promise<PrerenderResult>;
103
+ resolvePrefetchConcurrency, appPaths, includeRoot, routePartsFile, mode, website, websiteId, redirects, collections, llm, }?: PrerenderOptions): Promise<PrerenderResult>;
100
104
  export declare function injectIntoTemplate(template: string, head: string, appHtml: string, fontPreloads: string, htmlAttrs?: string): string;
101
105
  export {};
102
106
  //# 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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"shard-runner.d.ts","sourceRoot":"","sources":["../../src/ssg/shard-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAUH,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,iFAAiF;IACjF,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,8FAA8F;IAC9F,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAwED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgE1E"}
1
+ {"version":3,"file":"shard-runner.d.ts","sourceRoot":"","sources":["../../src/ssg/shard-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAWH,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,iFAAiF;IACjF,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,8FAA8F;IAC9F,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AA0ED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkH1E"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bagelink/blox",
3
3
  "type": "module",
4
- "version": "1.15.385",
4
+ "version": "1.15.401",
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",