@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.
@@ -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, s as splitSitemapPathsByLocale, l as localeSitemapPath, g as generateSitemapXml, b as generateSitemapIndexXml } from "./validate-output-C-RpYkvf.js";
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(opts.apiBase, opts.websiteName);
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-C-RpYkvf.js").then((n) => n.z);
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 lastmod = Object.fromEntries(
135
- indexableRoutes.flatMap((route) => route.lastmod ? [[route.url, route.lastmod]] : [])
136
- );
137
- const renderedPaths = indexableRoutes.map((route) => route.url);
138
- if (((_b = website.seo) == null ? void 0 : _b.sitemap_split_by_locale) !== false) {
139
- const pathsByLocale = splitSitemapPathsByLocale({
140
- renderedPaths,
141
- defaultLocale: website.default_locale,
142
- supportedLocales: website.supported_locales
143
- });
144
- const sitemapPaths = [];
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", "sitemap.xml"),
156
- generateSitemapIndexXml({ canonicalBase, sitemapPaths }),
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-C3NhyFsU.cjs");
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(opts.apiBase, opts.websiteName);
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-C3NhyFsU.cjs")).then((n) => n.llmArtifacts);
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 lastmod = Object.fromEntries(
159
- indexableRoutes.flatMap((route) => route.lastmod ? [[route.url, route.lastmod]] : [])
160
- );
161
- const renderedPaths = indexableRoutes.map((route) => route.url);
162
- if (((_b = website.seo) == null ? void 0 : _b.sitemap_split_by_locale) !== false) {
163
- const pathsByLocale = llmArtifacts.splitSitemapPathsByLocale({
164
- renderedPaths,
165
- defaultLocale: website.default_locale,
166
- supportedLocales: website.supported_locales
167
- });
168
- const sitemapPaths = [];
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", "sitemap.xml"),
180
- llmArtifacts.generateSitemapIndexXml({ canonicalBase, sitemapPaths }),
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,CAWzB;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"}
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-C3NhyFsU.cjs");
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-DTkniXr1.cjs"));
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-C-RpYkvf.js";
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-DFZAHrwJ.js");
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,CAwGtB;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
+ {"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,CAoNnF"}
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"}
@@ -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-C3NhyFsU.cjs");
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" ? (_b = (_a2 = process.env) == null ? void 0 : _a2.BLOX_WEBSITE_ID) == null ? void 0 : _b.trim() : void 0;
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" ? (_b = (_a2 = process.env) == null ? void 0 : _a2.BLOX_WEBSITE_ID) == null ? void 0 : _b.trim() : void 0;
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 bundle = await llmArtifacts.bloxBuildJson(
164
- `${apiBase}/blox-build/websites/${websiteId}/published?locale=${encodeURIComponent(pageLocale)}`,
165
- {},
166
- options.buildRequest
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;
@@ -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';
@@ -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;AAC9M,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AACvD,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"}
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"}