@bagelink/blox 1.15.387 → 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.
- package/dist/{prerender-CI54eV74.cjs → prerender-B6kU3SoG.cjs} +30 -8
- package/dist/{prerender-DfIkpbr8.js → prerender-C3er5vVQ.js} +39 -17
- package/dist/{shard-runner-D4TGQ2FM.js → shard-runner-B0N99n_D.js} +49 -10
- package/dist/{shard-runner-DB37MOsu.cjs → shard-runner-CVUbCaxW.cjs} +49 -10
- package/dist/ssg/cli.cjs +14 -4
- package/dist/ssg/cli.mjs +14 -4
- package/dist/ssg/index.cjs +1 -1
- package/dist/ssg/index.mjs +17 -17
- package/dist/ssg/llm-artifacts.d.ts.map +1 -1
- package/dist/ssg/prerender.d.ts +5 -1
- package/dist/ssg/prerender.d.ts.map +1 -1
- package/dist/ssg/shard-runner.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -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
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
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-
|
|
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)
|
|
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
|
-
|
|
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
|
-
|
|
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-
|
|
87
|
-
const
|
|
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-
|
|
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)
|
|
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
|
-
|
|
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
|
-
|
|
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-
|
|
111
|
-
const
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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 =
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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 =
|
|
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.
|
package/dist/ssg/index.cjs
CHANGED
|
@@ -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-
|
|
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");
|
package/dist/ssg/index.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { b as buildPageHead, c as primaryContextEntry, d as buildJsonLd, e as extractPageText, B as BloxBuildResponseError,
|
|
2
|
-
import {
|
|
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
|
|
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
|
|
28
|
-
const prevState =
|
|
27
|
+
const g2 = globalThis;
|
|
28
|
+
const prevState = g2[stateWindowKey];
|
|
29
29
|
if (resolvedData != null) {
|
|
30
|
-
|
|
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
|
-
|
|
83
|
+
g2[stateWindowKey] = prevState;
|
|
84
84
|
} else {
|
|
85
|
-
delete
|
|
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: () =>
|
|
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
|
-
|
|
222
|
+
i as bloxBuildRequest,
|
|
223
223
|
buildJsonLd,
|
|
224
224
|
buildPageHead,
|
|
225
|
-
|
|
225
|
+
j as buildSiteHead,
|
|
226
226
|
createBloxSSREntry,
|
|
227
227
|
extractPageText,
|
|
228
|
-
|
|
228
|
+
k as fetchCmsPrerenderPaths,
|
|
229
229
|
f as fetchCmsSiteData,
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
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,
|
|
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"}
|
package/dist/ssg/prerender.d.ts
CHANGED
|
@@ -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;
|
|
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