@bagelink/blox 1.15.533 → 1.15.539
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/{shard-runner-DFZAHrwJ.js → shard-runner-BWwEIABX.js} +20 -31
- package/dist/{shard-runner-DTkniXr1.cjs → shard-runner-D778xfd2.cjs} +20 -31
- package/dist/ssg/build-grant.d.ts +18 -0
- package/dist/ssg/build-grant.d.ts.map +1 -0
- package/dist/ssg/build-request.d.ts +2 -0
- package/dist/ssg/build-request.d.ts.map +1 -1
- package/dist/ssg/cli.cjs +12 -5
- package/dist/ssg/cli.mjs +12 -5
- package/dist/ssg/cms-routes.d.ts.map +1 -1
- package/dist/ssg/createSSREntry.d.ts.map +1 -1
- package/dist/ssg/datastore-snapshot.d.ts +28 -0
- package/dist/ssg/datastore-snapshot.d.ts.map +1 -0
- package/dist/ssg/index.cjs +93 -10
- package/dist/ssg/index.d.ts +6 -2
- package/dist/ssg/index.d.ts.map +1 -1
- package/dist/ssg/index.mjs +107 -24
- package/dist/ssg/manifest-upload.d.ts +2 -1
- package/dist/ssg/manifest-upload.d.ts.map +1 -1
- package/dist/ssg/prerender.d.ts.map +1 -1
- package/dist/ssg/seo.d.ts +17 -0
- package/dist/ssg/seo.d.ts.map +1 -1
- package/dist/ssg/shard-runner.d.ts +3 -19
- package/dist/ssg/shard-runner.d.ts.map +1 -1
- package/dist/{validate-output-C-RpYkvf.js → validate-output-CV4nlrHm.js} +161 -57
- package/dist/{validate-output-C3NhyFsU.cjs → validate-output-DqDUmsyO.cjs} +142 -38
- package/dist/vite-plugin.cjs +3 -0
- package/dist/vite-plugin.d.ts.map +1 -1
- package/dist/vite-plugin.mjs +3 -0
- package/package.json +2 -2
|
@@ -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,
|
|
5
|
+
import { f as fetchCmsSiteData, g as generateSitemapArtifacts } from "./validate-output-CV4nlrHm.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) {
|
|
@@ -71,7 +71,11 @@ async function runSharded(opts) {
|
|
|
71
71
|
}
|
|
72
72
|
console.log(`[blox-ssg] routes-cmd enumerated ${enumerated.length} route(s)`);
|
|
73
73
|
}
|
|
74
|
-
const siteData = await fetchCmsSiteData(
|
|
74
|
+
const siteData = await fetchCmsSiteData(
|
|
75
|
+
opts.apiBase,
|
|
76
|
+
opts.websiteName,
|
|
77
|
+
opts.buildRequest
|
|
78
|
+
);
|
|
75
79
|
for (const p of siteData.paths) if (!paths.includes(p)) paths.push(p);
|
|
76
80
|
const cmsPathSet = new Set(siteData.paths);
|
|
77
81
|
const routerPaths = appPaths.filter((path2) => !cmsPathSet.has(path2));
|
|
@@ -109,7 +113,7 @@ async function runSharded(opts) {
|
|
|
109
113
|
}
|
|
110
114
|
if (process.env.BLOX_SSG_LLM !== "0") {
|
|
111
115
|
try {
|
|
112
|
-
const { mergeLlmParts } = await import("./validate-output-
|
|
116
|
+
const { mergeLlmParts } = await import("./validate-output-CV4nlrHm.js").then((n) => n.D);
|
|
113
117
|
const mergeWebsite = website;
|
|
114
118
|
const partFiles = Array.from({ length: total }, (_, i) => path.join(llmPartsDir, `part.${i}.json`));
|
|
115
119
|
const { pages } = await mergeLlmParts({
|
|
@@ -131,37 +135,22 @@ async function runSharded(opts) {
|
|
|
131
135
|
const canonicalBase = (((_a = website.seo) == null ? void 0 : _a.canonical_base_url) || website.domain || "").replace(/\/$/, "");
|
|
132
136
|
const indexableRoutes = [...byUrl.values()].filter((route) => !route.noindex);
|
|
133
137
|
if (canonicalBase && indexableRoutes.length > 0) {
|
|
134
|
-
const
|
|
135
|
-
indexableRoutes.
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
for (const [locale, localePaths] of pathsByLocale) {
|
|
146
|
-
const sitemapPath = localeSitemapPath(locale);
|
|
147
|
-
await fs.writeFile(path.resolve("dist", sitemapPath.slice(1)), generateSitemapXml({
|
|
148
|
-
renderedPaths: localePaths,
|
|
149
|
-
canonicalBase,
|
|
150
|
-
lastmod
|
|
151
|
-
}), "utf8");
|
|
152
|
-
sitemapPaths.push(sitemapPath);
|
|
153
|
-
}
|
|
138
|
+
const artifacts = generateSitemapArtifacts({
|
|
139
|
+
routes: indexableRoutes.map((route) => ({
|
|
140
|
+
path: route.url,
|
|
141
|
+
lastmod: route.lastmod
|
|
142
|
+
})),
|
|
143
|
+
canonicalBase,
|
|
144
|
+
defaultLocale: website.default_locale,
|
|
145
|
+
supportedLocales: website.supported_locales,
|
|
146
|
+
splitByLocale: (_b = website.seo) == null ? void 0 : _b.sitemap_split_by_locale
|
|
147
|
+
});
|
|
148
|
+
for (const artifact of artifacts) {
|
|
154
149
|
await fs.writeFile(
|
|
155
|
-
path.resolve("dist",
|
|
156
|
-
|
|
150
|
+
path.resolve("dist", artifact.path.slice(1)),
|
|
151
|
+
artifact.content,
|
|
157
152
|
"utf8"
|
|
158
153
|
);
|
|
159
|
-
} else {
|
|
160
|
-
await fs.writeFile(path.resolve("dist", "sitemap.xml"), generateSitemapXml({
|
|
161
|
-
renderedPaths,
|
|
162
|
-
canonicalBase,
|
|
163
|
-
lastmod
|
|
164
|
-
}), "utf8");
|
|
165
154
|
}
|
|
166
155
|
}
|
|
167
156
|
await fs.rm(routePartsDir, { recursive: true, force: true });
|
|
@@ -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-
|
|
29
|
+
const llmArtifacts = require("./validate-output-DqDUmsyO.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) {
|
|
@@ -95,7 +95,11 @@ async function runSharded(opts) {
|
|
|
95
95
|
}
|
|
96
96
|
console.log(`[blox-ssg] routes-cmd enumerated ${enumerated.length} route(s)`);
|
|
97
97
|
}
|
|
98
|
-
const siteData = await llmArtifacts.fetchCmsSiteData(
|
|
98
|
+
const siteData = await llmArtifacts.fetchCmsSiteData(
|
|
99
|
+
opts.apiBase,
|
|
100
|
+
opts.websiteName,
|
|
101
|
+
opts.buildRequest
|
|
102
|
+
);
|
|
99
103
|
for (const p of siteData.paths) if (!paths.includes(p)) paths.push(p);
|
|
100
104
|
const cmsPathSet = new Set(siteData.paths);
|
|
101
105
|
const routerPaths = appPaths.filter((path2) => !cmsPathSet.has(path2));
|
|
@@ -133,7 +137,7 @@ async function runSharded(opts) {
|
|
|
133
137
|
}
|
|
134
138
|
if (process.env.BLOX_SSG_LLM !== "0") {
|
|
135
139
|
try {
|
|
136
|
-
const { mergeLlmParts } = await Promise.resolve().then(() => require("./validate-output-
|
|
140
|
+
const { mergeLlmParts } = await Promise.resolve().then(() => require("./validate-output-DqDUmsyO.cjs")).then((n) => n.llmArtifacts);
|
|
137
141
|
const mergeWebsite = website;
|
|
138
142
|
const partFiles = Array.from({ length: total }, (_, i) => path.join(llmPartsDir, `part.${i}.json`));
|
|
139
143
|
const { pages } = await mergeLlmParts({
|
|
@@ -155,37 +159,22 @@ async function runSharded(opts) {
|
|
|
155
159
|
const canonicalBase = (((_a = website.seo) == null ? void 0 : _a.canonical_base_url) || website.domain || "").replace(/\/$/, "");
|
|
156
160
|
const indexableRoutes = [...byUrl.values()].filter((route) => !route.noindex);
|
|
157
161
|
if (canonicalBase && indexableRoutes.length > 0) {
|
|
158
|
-
const
|
|
159
|
-
indexableRoutes.
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
for (const [locale, localePaths] of pathsByLocale) {
|
|
170
|
-
const sitemapPath = llmArtifacts.localeSitemapPath(locale);
|
|
171
|
-
await fs.writeFile(path.resolve("dist", sitemapPath.slice(1)), llmArtifacts.generateSitemapXml({
|
|
172
|
-
renderedPaths: localePaths,
|
|
173
|
-
canonicalBase,
|
|
174
|
-
lastmod
|
|
175
|
-
}), "utf8");
|
|
176
|
-
sitemapPaths.push(sitemapPath);
|
|
177
|
-
}
|
|
162
|
+
const artifacts = llmArtifacts.generateSitemapArtifacts({
|
|
163
|
+
routes: indexableRoutes.map((route) => ({
|
|
164
|
+
path: route.url,
|
|
165
|
+
lastmod: route.lastmod
|
|
166
|
+
})),
|
|
167
|
+
canonicalBase,
|
|
168
|
+
defaultLocale: website.default_locale,
|
|
169
|
+
supportedLocales: website.supported_locales,
|
|
170
|
+
splitByLocale: (_b = website.seo) == null ? void 0 : _b.sitemap_split_by_locale
|
|
171
|
+
});
|
|
172
|
+
for (const artifact of artifacts) {
|
|
178
173
|
await fs.writeFile(
|
|
179
|
-
path.resolve("dist",
|
|
180
|
-
|
|
174
|
+
path.resolve("dist", artifact.path.slice(1)),
|
|
175
|
+
artifact.content,
|
|
181
176
|
"utf8"
|
|
182
177
|
);
|
|
183
|
-
} else {
|
|
184
|
-
await fs.writeFile(path.resolve("dist", "sitemap.xml"), llmArtifacts.generateSitemapXml({
|
|
185
|
-
renderedPaths,
|
|
186
|
-
canonicalBase,
|
|
187
|
-
lastmod
|
|
188
|
-
}), "utf8");
|
|
189
178
|
}
|
|
190
179
|
}
|
|
191
180
|
await fs.rm(routePartsDir, { recursive: true, force: true });
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface BloxBuildGrant {
|
|
2
|
+
version: 1;
|
|
3
|
+
source: 'blox';
|
|
4
|
+
websiteId: string;
|
|
5
|
+
grant: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ResolveBloxBuildGrantOptions {
|
|
8
|
+
mode?: string;
|
|
9
|
+
env?: NodeJS.ProcessEnv;
|
|
10
|
+
}
|
|
11
|
+
/** Parse a Netlify hook body as direct JSON or exactly one URL-decoded JSON value. */
|
|
12
|
+
export declare function parseBloxBuildGrantBody(body: string): BloxBuildGrant;
|
|
13
|
+
/**
|
|
14
|
+
* Resolve ephemeral build authority. Non-local builds only trust Netlify hook
|
|
15
|
+
* metadata and never fall back to long-lived environment credentials.
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveBloxBuildGrant(options?: ResolveBloxBuildGrantOptions): BloxBuildGrant | undefined;
|
|
18
|
+
//# sourceMappingURL=build-grant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-grant.d.ts","sourceRoot":"","sources":["../../src/ssg/build-grant.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,CAAC,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,4BAA4B;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CACvB;AAkBD,sFAAsF;AACtF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAqCpE;AAUD;;;GAGG;AACH,wBAAgB,qBAAqB,CACpC,OAAO,GAAE,4BAAiC,GACxC,cAAc,GAAG,SAAS,CAuB5B"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export interface BloxBuildRequestOptions {
|
|
2
|
+
/** Website authorized by the ephemeral build grant. */
|
|
3
|
+
websiteId?: string;
|
|
2
4
|
/** Server-only build token. Never use a VITE_-prefixed environment variable. */
|
|
3
5
|
token?: string;
|
|
4
6
|
/** Header accepted by the build API/gateway. @default "Authorization" */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-request.d.ts","sourceRoot":"","sources":["../../src/ssg/build-request.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,uBAAuB;IACvC,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qCAAqC;IACrC,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,qBAAa,sBAAuB,SAAQ,KAAK;aAE/B,MAAM,EAAE,MAAM;aACd,GAAG,EAAE,MAAM;gBADX,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EAC3B,UAAU,EAAE,MAAM;CAKnB;AAMD,uFAAuF;AACvF,wBAAgB,0BAA0B,CACzC,SAAS,GAAE,uBAA4B,GACrC,uBAAuB,
|
|
1
|
+
{"version":3,"file":"build-request.d.ts","sourceRoot":"","sources":["../../src/ssg/build-request.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,uBAAuB;IACvC,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qCAAqC;IACrC,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,qBAAa,sBAAuB,SAAQ,KAAK;aAE/B,MAAM,EAAE,MAAM;aACd,GAAG,EAAE,MAAM;gBADX,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EAC3B,UAAU,EAAE,MAAM;CAKnB;AAMD,uFAAuF;AACvF,wBAAgB,0BAA0B,CACzC,SAAS,GAAE,uBAA4B,GACrC,uBAAuB,CAYzB;AAMD,gFAAgF;AAChF,wBAAsB,gBAAgB,CACrC,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,GAAE,WAAgB,EACtB,OAAO,GAAE,uBAA4B,GACnC,OAAO,CAAC,QAAQ,CAAC,CAiCnB;AAED,sEAAsE;AACtE,wBAAsB,aAAa,CAAC,CAAC,EACpC,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,GAAE,WAAgB,EACtB,OAAO,GAAE,uBAA4B,GACnC,OAAO,CAAC,CAAC,CAAC,CAQZ"}
|
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("../validate-output-
|
|
5
|
+
const llmArtifacts = require("../validate-output-DqDUmsyO.cjs");
|
|
6
6
|
function installFetchTimeout() {
|
|
7
7
|
const ms = Number(process.env.BLOX_SSG_FETCH_TIMEOUT_MS) || 2e4;
|
|
8
8
|
const original = globalThis.fetch;
|
|
@@ -131,15 +131,22 @@ Environment:
|
|
|
131
131
|
console.log(`[blox-ssg] validated output in ${validateOutDir}`);
|
|
132
132
|
return;
|
|
133
133
|
}
|
|
134
|
+
const buildGrant = llmArtifacts.resolveBloxBuildGrant({ mode });
|
|
135
|
+
if (buildGrant) {
|
|
136
|
+
process.env.BLOX_WEBSITE_ID = buildGrant.websiteId;
|
|
137
|
+
process.env.BLOX_BUILD_TOKEN = buildGrant.grant;
|
|
138
|
+
}
|
|
139
|
+
const buildRequest = buildGrant ? { websiteId: buildGrant.websiteId, token: buildGrant.grant } : {};
|
|
134
140
|
if (shardsOpt !== null || routesCmd) {
|
|
135
141
|
const { apiBase: apiBase2, websiteName: configWebsiteName2 } = await resolveApiBase(mode);
|
|
136
142
|
const websiteName2 = process.env.WEBSITE_NAME ?? configWebsiteName2 ?? "default";
|
|
137
|
-
const { runSharded } = await Promise.resolve().then(() => require("../shard-runner-
|
|
143
|
+
const { runSharded } = await Promise.resolve().then(() => require("../shard-runner-D778xfd2.cjs"));
|
|
138
144
|
const code = await runSharded({
|
|
139
145
|
shards: shardsOpt ?? "auto",
|
|
140
146
|
mode,
|
|
141
147
|
apiBase: apiBase2,
|
|
142
148
|
websiteName: websiteName2,
|
|
149
|
+
buildRequest,
|
|
143
150
|
extraPaths,
|
|
144
151
|
passthroughArgs,
|
|
145
152
|
routesCmd: routesCmd || void 0
|
|
@@ -147,7 +154,7 @@ Environment:
|
|
|
147
154
|
if (code === 0 && (process.env.NODE_ENV === "production" || mode === "production")) {
|
|
148
155
|
const uploadWebsiteId = (_a = process.env.BLOX_WEBSITE_ID) == null ? void 0 : _a.trim();
|
|
149
156
|
if (uploadWebsiteId) {
|
|
150
|
-
await llmArtifacts.uploadBloxManifest(apiBase2, uploadWebsiteId);
|
|
157
|
+
await llmArtifacts.uploadBloxManifest(apiBase2, uploadWebsiteId, buildRequest);
|
|
151
158
|
console.log("Uploaded .blox-manifest.json with Git provenance");
|
|
152
159
|
} else {
|
|
153
160
|
console.log("Skipped Blox manifest upload (BLOX_WEBSITE_ID is not configured)");
|
|
@@ -169,7 +176,7 @@ Environment:
|
|
|
169
176
|
let cachedAppPaths = [];
|
|
170
177
|
const productionBuild = process.env.NODE_ENV === "production" || mode === "production";
|
|
171
178
|
try {
|
|
172
|
-
const siteData = siteDataFile ? JSON.parse(await fs.readFile(siteDataFile, "utf8")) : await llmArtifacts.fetchCmsSiteData(apiBase, websiteName);
|
|
179
|
+
const siteData = siteDataFile ? JSON.parse(await fs.readFile(siteDataFile, "utf8")) : await llmArtifacts.fetchCmsSiteData(apiBase, websiteName, buildRequest);
|
|
173
180
|
paths = siteData.paths;
|
|
174
181
|
cachedAppPaths = "appPaths" in siteData && Array.isArray(siteData.appPaths) ? siteData.appPaths : [];
|
|
175
182
|
cmsPathSet = new Set(siteData.paths.filter((path) => !cachedAppPaths.includes(path)));
|
|
@@ -270,7 +277,7 @@ ${"=".repeat(60)}`);
|
|
|
270
277
|
if (productionBuild && shardTotal === 1) {
|
|
271
278
|
const uploadWebsiteId = ((_b = process.env.BLOX_WEBSITE_ID) == null ? void 0 : _b.trim()) || websiteId;
|
|
272
279
|
if (!uploadWebsiteId) throw new Error("BLOX_WEBSITE_ID is required to upload the Blox manifest");
|
|
273
|
-
await llmArtifacts.uploadBloxManifest(apiBase, uploadWebsiteId);
|
|
280
|
+
await llmArtifacts.uploadBloxManifest(apiBase, uploadWebsiteId, buildRequest);
|
|
274
281
|
console.log("Uploaded .blox-manifest.json with Git provenance");
|
|
275
282
|
}
|
|
276
283
|
} catch (err) {
|
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 { v as validateSsgOutput, u as uploadBloxManifest, p as polyfillBloxSsgGlobals, f as fetchCmsSiteData, a as prerender } from "../validate-output-
|
|
4
|
+
import { v as validateSsgOutput, r as resolveBloxBuildGrant, u as uploadBloxManifest, p as polyfillBloxSsgGlobals, f as fetchCmsSiteData, a as prerender } from "../validate-output-CV4nlrHm.js";
|
|
5
5
|
function installFetchTimeout() {
|
|
6
6
|
const ms = Number(process.env.BLOX_SSG_FETCH_TIMEOUT_MS) || 2e4;
|
|
7
7
|
const original = globalThis.fetch;
|
|
@@ -130,15 +130,22 @@ Environment:
|
|
|
130
130
|
console.log(`[blox-ssg] validated output in ${validateOutDir}`);
|
|
131
131
|
return;
|
|
132
132
|
}
|
|
133
|
+
const buildGrant = resolveBloxBuildGrant({ mode });
|
|
134
|
+
if (buildGrant) {
|
|
135
|
+
process.env.BLOX_WEBSITE_ID = buildGrant.websiteId;
|
|
136
|
+
process.env.BLOX_BUILD_TOKEN = buildGrant.grant;
|
|
137
|
+
}
|
|
138
|
+
const buildRequest = buildGrant ? { websiteId: buildGrant.websiteId, token: buildGrant.grant } : {};
|
|
133
139
|
if (shardsOpt !== null || routesCmd) {
|
|
134
140
|
const { apiBase: apiBase2, websiteName: configWebsiteName2 } = await resolveApiBase(mode);
|
|
135
141
|
const websiteName2 = process.env.WEBSITE_NAME ?? configWebsiteName2 ?? "default";
|
|
136
|
-
const { runSharded } = await import("../shard-runner-
|
|
142
|
+
const { runSharded } = await import("../shard-runner-BWwEIABX.js");
|
|
137
143
|
const code = await runSharded({
|
|
138
144
|
shards: shardsOpt ?? "auto",
|
|
139
145
|
mode,
|
|
140
146
|
apiBase: apiBase2,
|
|
141
147
|
websiteName: websiteName2,
|
|
148
|
+
buildRequest,
|
|
142
149
|
extraPaths,
|
|
143
150
|
passthroughArgs,
|
|
144
151
|
routesCmd: routesCmd || void 0
|
|
@@ -146,7 +153,7 @@ Environment:
|
|
|
146
153
|
if (code === 0 && (process.env.NODE_ENV === "production" || mode === "production")) {
|
|
147
154
|
const uploadWebsiteId = (_a = process.env.BLOX_WEBSITE_ID) == null ? void 0 : _a.trim();
|
|
148
155
|
if (uploadWebsiteId) {
|
|
149
|
-
await uploadBloxManifest(apiBase2, uploadWebsiteId);
|
|
156
|
+
await uploadBloxManifest(apiBase2, uploadWebsiteId, buildRequest);
|
|
150
157
|
console.log("Uploaded .blox-manifest.json with Git provenance");
|
|
151
158
|
} else {
|
|
152
159
|
console.log("Skipped Blox manifest upload (BLOX_WEBSITE_ID is not configured)");
|
|
@@ -168,7 +175,7 @@ Environment:
|
|
|
168
175
|
let cachedAppPaths = [];
|
|
169
176
|
const productionBuild = process.env.NODE_ENV === "production" || mode === "production";
|
|
170
177
|
try {
|
|
171
|
-
const siteData = siteDataFile ? JSON.parse(await fs.readFile(siteDataFile, "utf8")) : await fetchCmsSiteData(apiBase, websiteName);
|
|
178
|
+
const siteData = siteDataFile ? JSON.parse(await fs.readFile(siteDataFile, "utf8")) : await fetchCmsSiteData(apiBase, websiteName, buildRequest);
|
|
172
179
|
paths = siteData.paths;
|
|
173
180
|
cachedAppPaths = "appPaths" in siteData && Array.isArray(siteData.appPaths) ? siteData.appPaths : [];
|
|
174
181
|
cmsPathSet = new Set(siteData.paths.filter((path) => !cachedAppPaths.includes(path)));
|
|
@@ -269,7 +276,7 @@ ${"=".repeat(60)}`);
|
|
|
269
276
|
if (productionBuild && shardTotal === 1) {
|
|
270
277
|
const uploadWebsiteId = ((_b = process.env.BLOX_WEBSITE_ID) == null ? void 0 : _b.trim()) || websiteId;
|
|
271
278
|
if (!uploadWebsiteId) throw new Error("BLOX_WEBSITE_ID is required to upload the Blox manifest");
|
|
272
|
-
await uploadBloxManifest(apiBase, uploadWebsiteId);
|
|
279
|
+
await uploadBloxManifest(apiBase, uploadWebsiteId, buildRequest);
|
|
273
280
|
console.log("Uploaded .blox-manifest.json with Git provenance");
|
|
274
281
|
}
|
|
275
282
|
} catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cms-routes.d.ts","sourceRoot":"","sources":["../../src/ssg/cms-routes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAoB9D,2EAA2E;AAC3E,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,WAAW;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,WAAW,CAAA;IACpB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,SAAS,EAAE,aAAa,EAAE,CAAA;IAC1B,oEAAoE;IACpE,WAAW,EAAE,aAAa,EAAE,CAAA;CAC5B;AAYD;;;GAGG;AACH,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,MAAM,EAAE,EACf,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,MAAM,EAAE,GACxB,MAAM,EAAE,CASV;AAMD;;;GAGG;AACH,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,cAAc,GAAE,uBAA4B,GAC1C,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"cms-routes.d.ts","sourceRoot":"","sources":["../../src/ssg/cms-routes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAoB9D,2EAA2E;AAC3E,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,WAAW;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,WAAW,CAAA;IACpB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,SAAS,EAAE,aAAa,EAAE,CAAA;IAC1B,oEAAoE;IACpE,WAAW,EAAE,aAAa,EAAE,CAAA;CAC5B;AAYD;;;GAGG;AACH,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,MAAM,EAAE,EACf,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,MAAM,EAAE,GACxB,MAAM,EAAE,CASV;AAMD;;;GAGG;AACH,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,cAAc,GAAE,uBAA4B,GAC1C,OAAO,CAAC,WAAW,CAAC,CA4GtB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC3C,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,cAAc,GAAE,uBAA4B,GAC1C,OAAO,CAAC,MAAM,EAAE,CAAC,CAGnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSSREntry.d.ts","sourceRoot":"","sources":["../../src/ssg/createSSREntry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG9D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAO9D,OAAO,EAAuC,KAAK,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAInF,MAAM,WAAW,yBAAyB;IACzC,oCAAoC;IACpC,aAAa,EAAE,SAAS,CAAA;IACxB;;;;OAIG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,KAAK,GAAG,QAAQ,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;IAC9D;;;OAGG;IACH,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACpD,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,oGAAoG;IACpG,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,uBAAuB,CAAA;IACtC,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,CACpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,gBAAgB,KACrB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IAC5C,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B;;;OAGG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC,OAAO,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAA;IAC5E;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAC5C,kDAAkD;IAClD,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAA;CAC1B;AAED,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;IAClE,0EAA0E;IAC1E,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CACnD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"createSSREntry.d.ts","sourceRoot":"","sources":["../../src/ssg/createSSREntry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG9D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAO9D,OAAO,EAAuC,KAAK,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAInF,MAAM,WAAW,yBAAyB;IACzC,oCAAoC;IACpC,aAAa,EAAE,SAAS,CAAA;IACxB;;;;OAIG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,KAAK,GAAG,QAAQ,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;IAC9D;;;OAGG;IACH,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACpD,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,oGAAoG;IACpG,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,uBAAuB,CAAA;IACtC,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,CACpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,gBAAgB,KACrB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IAC5C,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B;;;OAGG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC,OAAO,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAA;IAC5E;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAC5C,kDAAkD;IAClD,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAA;CAC1B;AAED,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;IAClE,0EAA0E;IAC1E,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CACnD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,YAAY,CAuNnF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { BloxBuildRequestOptions } from './build-request';
|
|
2
|
+
export interface DatastoreSnapshot {
|
|
3
|
+
version: 1;
|
|
4
|
+
generatedAt: string;
|
|
5
|
+
apiBase: string;
|
|
6
|
+
store: string;
|
|
7
|
+
collections: Record<string, Record<string, Array<Record<string, unknown>>>>;
|
|
8
|
+
}
|
|
9
|
+
export declare function fetchDatastoreSnapshot(options: {
|
|
10
|
+
apiBase: string;
|
|
11
|
+
store: string;
|
|
12
|
+
collections: readonly string[];
|
|
13
|
+
locales: readonly string[];
|
|
14
|
+
endpointPrefix?: string;
|
|
15
|
+
limit?: number;
|
|
16
|
+
requestOptions?: BloxBuildRequestOptions;
|
|
17
|
+
onCollection?: (collection: string, counts: Record<string, number>) => void;
|
|
18
|
+
}): Promise<DatastoreSnapshot>;
|
|
19
|
+
export declare function snapshotRows(snapshot: DatastoreSnapshot, collection: string, locale: string): Array<Record<string, unknown>>;
|
|
20
|
+
export declare function querySnapshotRows(snapshot: DatastoreSnapshot, options: {
|
|
21
|
+
collection: string;
|
|
22
|
+
locale: string;
|
|
23
|
+
q?: string;
|
|
24
|
+
select?: string[];
|
|
25
|
+
offset?: number;
|
|
26
|
+
limit?: number;
|
|
27
|
+
}): Array<Record<string, unknown>>;
|
|
28
|
+
//# sourceMappingURL=datastore-snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datastore-snapshot.d.ts","sourceRoot":"","sources":["../../src/ssg/datastore-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAG9D,MAAM,WAAW,iBAAiB;IACjC,OAAO,EAAE,CAAC,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;CAC3E;AAED,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACrD,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;IAC9B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,uBAAuB,CAAA;IACxC,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAA;CAC3E,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA4C7B;AAED,wBAAgB,YAAY,CAC3B,QAAQ,EAAE,iBAAiB,EAC3B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACZ,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAIhC;AAED,wBAAgB,iBAAiB,CAChC,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE;IACR,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACd,GACC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAiBhC"}
|
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("../validate-output-
|
|
25
|
+
const llmArtifacts = require("../validate-output-DqDUmsyO.cjs");
|
|
26
26
|
const ssg_client = require("./client.cjs");
|
|
27
27
|
const pinia = require("pinia");
|
|
28
28
|
const vue = require("vue");
|
|
@@ -127,12 +127,13 @@ function createBloxSSREntry(options) {
|
|
|
127
127
|
} = options;
|
|
128
128
|
const apiBase = options.apiBase ?? (typeof process !== "undefined" ? (_a = process.env) == null ? void 0 : _a.BAGELINK_API_URL : void 0) ?? "https://api.bagel.to";
|
|
129
129
|
let websiteIdCache = null;
|
|
130
|
+
const publishedBundleCache = /* @__PURE__ */ new Map();
|
|
130
131
|
routes.setApiOrigin(apiBase);
|
|
131
132
|
routes.setCollectionResolver(options.collectionResolver ?? null);
|
|
132
133
|
async function getWebsiteId() {
|
|
133
|
-
var _a2, _b;
|
|
134
|
+
var _a2, _b, _c;
|
|
134
135
|
if (websiteIdCache) return websiteIdCache;
|
|
135
|
-
const configuredWebsiteId = typeof process !== "undefined" ? (
|
|
136
|
+
const configuredWebsiteId = ((_a2 = options.buildRequest) == null ? void 0 : _a2.websiteId) ?? (typeof process !== "undefined" ? (_c = (_b = process.env) == null ? void 0 : _b.BLOX_WEBSITE_ID) == null ? void 0 : _c.trim() : void 0);
|
|
136
137
|
if (configuredWebsiteId) {
|
|
137
138
|
websiteIdCache = configuredWebsiteId;
|
|
138
139
|
return websiteIdCache;
|
|
@@ -156,15 +157,21 @@ function createBloxSSREntry(options) {
|
|
|
156
157
|
return { locale, slug: urlPath || "/" };
|
|
157
158
|
}
|
|
158
159
|
async function fetchResolvedPage(slug, pageLocale) {
|
|
159
|
-
var _a2, _b;
|
|
160
|
+
var _a2, _b, _c;
|
|
160
161
|
const websiteId = await getWebsiteId();
|
|
161
|
-
const configuredWebsiteId = typeof process !== "undefined" ? (
|
|
162
|
+
const configuredWebsiteId = ((_a2 = options.buildRequest) == null ? void 0 : _a2.websiteId) ?? (typeof process !== "undefined" ? (_c = (_b = process.env) == null ? void 0 : _b.BLOX_WEBSITE_ID) == null ? void 0 : _c.trim() : void 0);
|
|
162
163
|
if (configuredWebsiteId) {
|
|
163
|
-
const
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
164
|
+
const cacheKey = pageLocale;
|
|
165
|
+
let pending = publishedBundleCache.get(cacheKey);
|
|
166
|
+
if (!pending) {
|
|
167
|
+
pending = llmArtifacts.bloxBuildJson(
|
|
168
|
+
`${apiBase}/blox-build/websites/${websiteId}/published?locale=${encodeURIComponent(pageLocale)}`,
|
|
169
|
+
{},
|
|
170
|
+
options.buildRequest
|
|
171
|
+
);
|
|
172
|
+
publishedBundleCache.set(cacheKey, pending);
|
|
173
|
+
}
|
|
174
|
+
const bundle = await pending;
|
|
168
175
|
const page = bundle.pages.find((candidate) => candidate.slug === slug);
|
|
169
176
|
if (!page) return null;
|
|
170
177
|
return { page, contexts: {}, warnings: [] };
|
|
@@ -255,6 +262,76 @@ function createBloxSSREntry(options) {
|
|
|
255
262
|
}
|
|
256
263
|
return { render, prefetchResolve };
|
|
257
264
|
}
|
|
265
|
+
async function fetchDatastoreSnapshot(options) {
|
|
266
|
+
var _a;
|
|
267
|
+
const endpointPrefix = options.endpointPrefix ?? "/datastore";
|
|
268
|
+
const limit = options.limit ?? 2e3;
|
|
269
|
+
const collections = {};
|
|
270
|
+
for (const collection of options.collections) {
|
|
271
|
+
collections[collection] = {};
|
|
272
|
+
const localized = await Promise.all(options.locales.map(async (locale) => {
|
|
273
|
+
const rows = [];
|
|
274
|
+
for (let offset = 0; ; offset += limit) {
|
|
275
|
+
const url = new URL(
|
|
276
|
+
`${endpointPrefix}/${encodeURIComponent(options.store)}/collections/${encodeURIComponent(collection)}`,
|
|
277
|
+
options.apiBase
|
|
278
|
+
);
|
|
279
|
+
url.searchParams.set("locale", locale);
|
|
280
|
+
url.searchParams.set("limit", String(limit));
|
|
281
|
+
url.searchParams.set("offset", String(offset));
|
|
282
|
+
const page = await llmArtifacts.bloxBuildJson(
|
|
283
|
+
url,
|
|
284
|
+
{},
|
|
285
|
+
options.requestOptions
|
|
286
|
+
);
|
|
287
|
+
if (!Array.isArray(page)) {
|
|
288
|
+
throw new TypeError(`Datastore snapshot response is not an array: ${collection}/${locale}`);
|
|
289
|
+
}
|
|
290
|
+
rows.push(...page);
|
|
291
|
+
if (page.length < limit) break;
|
|
292
|
+
}
|
|
293
|
+
return [locale, rows];
|
|
294
|
+
}));
|
|
295
|
+
for (const [locale, rows] of localized) collections[collection][locale] = rows;
|
|
296
|
+
(_a = options.onCollection) == null ? void 0 : _a.call(
|
|
297
|
+
options,
|
|
298
|
+
collection,
|
|
299
|
+
Object.fromEntries(localized.map(([locale, rows]) => [locale, rows.length]))
|
|
300
|
+
);
|
|
301
|
+
}
|
|
302
|
+
return {
|
|
303
|
+
version: 1,
|
|
304
|
+
generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
305
|
+
apiBase: options.apiBase,
|
|
306
|
+
store: options.store,
|
|
307
|
+
collections
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
function snapshotRows(snapshot, collection, locale) {
|
|
311
|
+
var _a;
|
|
312
|
+
const rows = (_a = snapshot.collections[collection]) == null ? void 0 : _a[locale];
|
|
313
|
+
if (!rows) throw new Error(`Datastore snapshot miss: ${collection}/${locale}`);
|
|
314
|
+
return rows;
|
|
315
|
+
}
|
|
316
|
+
function querySnapshotRows(snapshot, options) {
|
|
317
|
+
var _a;
|
|
318
|
+
let rows = snapshotRows(snapshot, options.collection, options.locale);
|
|
319
|
+
if (options.q) {
|
|
320
|
+
const match = options.q.match(/^\s*([A-Za-z0-9_.-]+)\s+eq\s+"((?:\\.|[^"])*)"\s*$/);
|
|
321
|
+
if (!match) throw new Error(`Unsupported snapshot SCIM query: ${options.q}`);
|
|
322
|
+
const [, field, raw] = match;
|
|
323
|
+
const expected = raw.replace(/\\"/g, '"').replace(/\\\\/g, "\\");
|
|
324
|
+
rows = rows.filter((row) => String(row[field]) === expected);
|
|
325
|
+
}
|
|
326
|
+
const offset = options.offset ?? 0;
|
|
327
|
+
rows = rows.slice(offset, offset + (options.limit ?? 100));
|
|
328
|
+
if ((_a = options.select) == null ? void 0 : _a.length) {
|
|
329
|
+
return rows.map((row) => Object.fromEntries(
|
|
330
|
+
options.select.filter((key) => key in row).map((key) => [key, row[key]])
|
|
331
|
+
));
|
|
332
|
+
}
|
|
333
|
+
return rows;
|
|
334
|
+
}
|
|
258
335
|
exports.BloxBuildResponseError = llmArtifacts.BloxBuildResponseError;
|
|
259
336
|
exports.bloxBuildJson = llmArtifacts.bloxBuildJson;
|
|
260
337
|
exports.bloxBuildRequest = llmArtifacts.bloxBuildRequest;
|
|
@@ -268,14 +345,17 @@ exports.generateLlmsFullTxt = llmArtifacts.generateLlmsFullTxt;
|
|
|
268
345
|
exports.generateLlmsTxt = llmArtifacts.generateLlmsTxt;
|
|
269
346
|
exports.generateNetlifyRedirects = llmArtifacts.generateNetlifyRedirects;
|
|
270
347
|
exports.generateRobotsTxt = llmArtifacts.generateRobotsTxt;
|
|
348
|
+
exports.generateSitemapArtifacts = llmArtifacts.generateSitemapArtifacts;
|
|
271
349
|
exports.generateSitemapIndexXml = llmArtifacts.generateSitemapIndexXml;
|
|
272
350
|
exports.generateSitemapXml = llmArtifacts.generateSitemapXml;
|
|
273
351
|
exports.getBloxBuildRequestOptions = llmArtifacts.getBloxBuildRequestOptions;
|
|
274
352
|
exports.getSiteIconFlags = llmArtifacts.getSiteIconFlags;
|
|
275
353
|
exports.localeSitemapPath = llmArtifacts.localeSitemapPath;
|
|
276
354
|
exports.mergeLlmParts = llmArtifacts.mergeLlmParts;
|
|
355
|
+
exports.parseBloxBuildGrantBody = llmArtifacts.parseBloxBuildGrantBody;
|
|
277
356
|
exports.polyfillBloxSsgGlobals = llmArtifacts.polyfillBloxSsgGlobals;
|
|
278
357
|
exports.prerender = llmArtifacts.prerender;
|
|
358
|
+
exports.resolveBloxBuildGrant = llmArtifacts.resolveBloxBuildGrant;
|
|
279
359
|
exports.resolveManifestProvenance = llmArtifacts.resolveManifestProvenance;
|
|
280
360
|
exports.splitSitemapPathsByLocale = llmArtifacts.splitSitemapPathsByLocale;
|
|
281
361
|
exports.uploadBloxManifest = llmArtifacts.uploadBloxManifest;
|
|
@@ -290,4 +370,7 @@ exports.getEmbeddedWebsiteId = ssg_client.getEmbeddedWebsiteId;
|
|
|
290
370
|
exports.installBloxStateCache = ssg_client.installBloxStateCache;
|
|
291
371
|
exports.installCollectionCache = ssg_client.installCollectionCache;
|
|
292
372
|
exports.createBloxSSREntry = createBloxSSREntry;
|
|
373
|
+
exports.fetchDatastoreSnapshot = fetchDatastoreSnapshot;
|
|
374
|
+
exports.querySnapshotRows = querySnapshotRows;
|
|
293
375
|
exports.renderBloxSsgPage = renderBloxSsgPage;
|
|
376
|
+
exports.snapshotRows = snapshotRows;
|
package/dist/ssg/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export { fetchCmsPrerenderPaths, fetchCmsSiteData } from './cms-routes';
|
|
2
2
|
export type { CmsSiteData, CollectionRef } from './cms-routes';
|
|
3
3
|
export { BloxBuildResponseError, bloxBuildJson, bloxBuildRequest, getBloxBuildRequestOptions } from './build-request';
|
|
4
|
+
export { parseBloxBuildGrantBody, resolveBloxBuildGrant } from './build-grant';
|
|
5
|
+
export type { BloxBuildGrant, ResolveBloxBuildGrantOptions } from './build-grant';
|
|
4
6
|
export type { BloxBuildRequestOptions } from './build-request';
|
|
5
7
|
export { getCollectionCache, getEmbeddedWebsiteId, installCollectionCache } from './collection-cache';
|
|
6
8
|
/**
|
|
@@ -17,13 +19,15 @@ export { getCollectionCache, getEmbeddedWebsiteId, installCollectionCache } from
|
|
|
17
19
|
export { BLOX_COLLECTIONS_WINDOW_KEY, BLOX_DATA_WINDOW_KEY, BLOX_PAGE_SEO_WINDOW_KEY, BLOX_STATE_WINDOW_KEY, BLOX_WEBSITE_ID_WINDOW_KEY } from './constants';
|
|
18
20
|
export { createBloxSSREntry } from './createSSREntry';
|
|
19
21
|
export type { BloxSSREntry, CreateBloxSSREntryOptions } from './createSSREntry';
|
|
22
|
+
export { fetchDatastoreSnapshot, querySnapshotRows, snapshotRows } from './datastore-snapshot';
|
|
23
|
+
export type { DatastoreSnapshot } from './datastore-snapshot';
|
|
20
24
|
export { polyfillBloxSsgGlobals } from './polyfill-node';
|
|
21
25
|
export { prerender } from './prerender';
|
|
22
26
|
export type { PrerenderOptions, PrerenderResult, RenderContext, RenderResult } from './prerender';
|
|
23
27
|
export { renderBloxSsgPage } from './render-resolved-page';
|
|
24
28
|
export type { BloxSsgRouterLike } from './render-resolved-page';
|
|
25
|
-
export { buildPageHead, buildSiteHead, generateNetlifyRedirects, generateRobotsTxt, generateSitemapIndexXml, generateSitemapXml, getSiteIconFlags, localeSitemapPath, splitSitemapPathsByLocale } from './seo';
|
|
26
|
-
export type { RedirectEntry, SeoPageData } from './seo';
|
|
29
|
+
export { buildPageHead, buildSiteHead, generateNetlifyRedirects, generateRobotsTxt, generateSitemapArtifacts, generateSitemapIndexXml, generateSitemapXml, getSiteIconFlags, localeSitemapPath, splitSitemapPathsByLocale } from './seo';
|
|
30
|
+
export type { RedirectEntry, SeoPageData, SitemapArtifact, SitemapRoute } from './seo';
|
|
27
31
|
export { buildJsonLd, extractPageText, generateLlmsFullTxt, generateLlmsTxt, mergeLlmParts } from './llm-artifacts';
|
|
28
32
|
export type { LlmArtifactsConfig, LlmPageEntry } from './llm-artifacts';
|
|
29
33
|
export { installBloxStateCache } from './state-cache';
|
package/dist/ssg/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ssg/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACvE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAA;AACrH,YAAY,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AACrG;;;;;;;;;;GAUG;AACH,OAAO,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAC5J,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,YAAY,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAA;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ssg/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACvE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAA;AACrH,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC9E,YAAY,EAAE,cAAc,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAA;AACjF,YAAY,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AACrG;;;;;;;;;;GAUG;AACH,OAAO,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAC5J,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,YAAY,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAA;AAC/E,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAC9F,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,OAAO,CAAA;AACxO,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AACtF,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,mBAAmB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACnH,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACjF,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA"}
|