@bagelink/blox 1.13.5 → 1.14.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/LICENSE +21 -0
  2. package/dist/CmsPageView.vue.d.ts.map +1 -1
  3. package/dist/PreviewApp-BDMfuAiu.cjs +4 -0
  4. package/dist/PreviewApp-MdZQEVkN.js +4 -0
  5. package/dist/PreviewApp.vue.d.ts.map +1 -1
  6. package/dist/PreviewApp.vue_vue_type_style_index_0_lang-BG9Fvfdw.cjs +187 -0
  7. package/dist/PreviewApp.vue_vue_type_style_index_0_lang-Bc4Ac4WN.js +188 -0
  8. package/dist/PreviewRenderer.d.ts.map +1 -1
  9. package/dist/bridge.d.ts +5 -0
  10. package/dist/bridge.d.ts.map +1 -1
  11. package/dist/core-CgtYpQbn.js +466 -0
  12. package/dist/core-DhrL5TMI.cjs +465 -0
  13. package/dist/core.d.ts.map +1 -1
  14. package/dist/createBloxApp.d.ts +107 -0
  15. package/dist/createBloxApp.d.ts.map +1 -0
  16. package/dist/defineBlock.d.ts +23 -4
  17. package/dist/defineBlock.d.ts.map +1 -1
  18. package/dist/index.cjs +87 -604
  19. package/dist/index.d.ts +2 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.mjs +86 -602
  22. package/dist/{prerender-oMLxrKGs.js → prerender-CJ22vZ1T.js} +12 -10
  23. package/dist/{prerender-CjJwDXkC.cjs → prerender-LqPEzho3.cjs} +8 -6
  24. package/dist/schema.d.ts +6 -0
  25. package/dist/schema.d.ts.map +1 -1
  26. package/dist/ssg/cli.cjs +2 -2
  27. package/dist/ssg/cli.mjs +2 -2
  28. package/dist/ssg/client.cjs +9 -7
  29. package/dist/ssg/client.d.ts +1 -1
  30. package/dist/ssg/client.d.ts.map +1 -1
  31. package/dist/ssg/client.mjs +3 -1
  32. package/dist/ssg/collection-cache.d.ts +1 -1
  33. package/dist/ssg/constants.d.ts +1 -1
  34. package/dist/ssg/constants.d.ts.map +1 -1
  35. package/dist/ssg/createSSREntry.d.ts +73 -0
  36. package/dist/ssg/createSSREntry.d.ts.map +1 -0
  37. package/dist/ssg/index.cjs +116 -8
  38. package/dist/ssg/index.d.ts +2 -0
  39. package/dist/ssg/index.d.ts.map +1 -1
  40. package/dist/ssg/index.mjs +94 -7
  41. package/dist/ssg/prerender.d.ts.map +1 -1
  42. package/dist/ssg/render-resolved-page.d.ts +1 -1
  43. package/dist/ssg/render-resolved-page.d.ts.map +1 -1
  44. package/dist/style.css +5 -46
  45. package/dist/vite-plugin.cjs +143 -3
  46. package/dist/vite-plugin.d.ts +22 -21
  47. package/dist/vite-plugin.d.ts.map +1 -1
  48. package/dist/vite-plugin.mjs +143 -3
  49. package/package.json +128 -126
  50. package/dist/PreviewApp-BZNzZkit.js +0 -4
  51. package/dist/PreviewApp-C1WvJWI4.cjs +0 -4
  52. package/dist/constants-BjitNk-W.js +0 -8
  53. package/dist/constants-CFB_pMvT.cjs +0 -7
@@ -3,24 +3,24 @@ import path from "node:path";
3
3
  import process from "node:process";
4
4
  import { pathToFileURL } from "node:url";
5
5
  async function fetchCmsSiteData(apiBase, websiteName) {
6
- const sitesRes = await fetch(`${apiBase}/cms/websites`);
6
+ const sitesRes = await fetch(`${apiBase}/blox/websites`);
7
7
  const sitesData = await sitesRes.json();
8
8
  const sites = Array.isArray(sitesData) ? sitesData : sitesData.data ?? [];
9
9
  const site = sites.find((s) => s.name === websiteName);
10
10
  if ((site == null ? void 0 : site.id) == null || site.id === "") throw new Error(`Website "${websiteName}" not found at ${apiBase}`);
11
11
  let website = site;
12
12
  try {
13
- const wRes = await fetch(`${apiBase}/cms/websites/${site.id}`);
13
+ const wRes = await fetch(`${apiBase}/blox/websites/${site.id}`);
14
14
  if (wRes.ok) website = await wRes.json();
15
15
  } catch {
16
16
  }
17
- const pagesRes = await fetch(`${apiBase}/cms/websites/${site.id}/pages?locale=${website.default_locale || "en"}`);
17
+ const pagesRes = await fetch(`${apiBase}/blox/websites/${site.id}/pages?locale=${website.default_locale || "en"}`);
18
18
  const pagesData = await pagesRes.json();
19
19
  const pages = Array.isArray(pagesData) ? pagesData : pagesData.data ?? [];
20
20
  const paths = await expandRoutes(apiBase, pages);
21
21
  let redirects = [];
22
22
  try {
23
- const rRes = await fetch(`${apiBase}/cms/websites/${site.id}/redirects`);
23
+ const rRes = await fetch(`${apiBase}/blox/websites/${site.id}/redirects`);
24
24
  if (rRes.ok) {
25
25
  const rData = await rRes.json();
26
26
  const items = Array.isArray(rData) ? rData : rData.data ?? [];
@@ -244,7 +244,8 @@ Sitemap: ${base}/sitemap.xml
244
244
  ` : "";
245
245
  if (robotsTxt) {
246
246
  if (sitemapLine && !robotsTxt.toLowerCase().includes("sitemap:")) {
247
- return robotsTxt.trimEnd() + "\n" + sitemapLine;
247
+ return `${robotsTxt.trimEnd()}
248
+ ${sitemapLine}`;
248
249
  }
249
250
  return robotsTxt;
250
251
  }
@@ -254,7 +255,8 @@ ${sitemapLine}`;
254
255
  }
255
256
  function generateNetlifyRedirects(redirects) {
256
257
  if (redirects.length === 0) return "";
257
- return redirects.map((r) => `${r.from_path} ${r.to_path} ${r.status_code}`).join("\n") + "\n";
258
+ return `${redirects.map((r) => `${r.from_path} ${r.to_path} ${r.status_code}`).join("\n")}
259
+ `;
258
260
  }
259
261
  function stripTemplateSeoTags(template) {
260
262
  return template.replace(/<title>[^<]*<\/title>/gi, "<!--ssg:title-->").replace(/<meta\s[^>]*name\s*=\s*["']description["'][^>]*>/gi, "").replace(/<meta\s[^>]*property\s*=\s*["']og:[^"']*["'][^>]*>/gi, "").replace(/<meta\s[^>]*(?:property|name)\s*=\s*["']twitter:[^"']*["'][^>]*>/gi, "").replace(/<link\s[^>]*rel\s*=\s*["']apple-touch-icon["'][^>]*>/gi, "").replace(/<link\s[^>]*rel\s*=\s*["']icon["'][^>]*>/gi, "").replace(/\n\s*\n\s*\n/g, "\n\n");
@@ -508,12 +510,12 @@ function discoverInternalLinks(html) {
508
510
  return [...out];
509
511
  }
510
512
  export {
511
- fetchCmsSiteData as a,
513
+ prerender as a,
512
514
  buildPageHead as b,
513
- prerender as c,
514
- buildSiteHead as d,
515
+ buildSiteHead as c,
516
+ fetchCmsPrerenderPaths as d,
515
517
  generateRobotsTxt as e,
516
- fetchCmsPrerenderPaths as f,
518
+ fetchCmsSiteData as f,
517
519
  generateNetlifyRedirects as g,
518
520
  generateSitemapXml as h,
519
521
  polyfillBloxSsgGlobals as p
@@ -26,24 +26,24 @@ const path = require("node:path");
26
26
  const process = require("node:process");
27
27
  const node_url = require("node:url");
28
28
  async function fetchCmsSiteData(apiBase, websiteName) {
29
- const sitesRes = await fetch(`${apiBase}/cms/websites`);
29
+ const sitesRes = await fetch(`${apiBase}/blox/websites`);
30
30
  const sitesData = await sitesRes.json();
31
31
  const sites = Array.isArray(sitesData) ? sitesData : sitesData.data ?? [];
32
32
  const site = sites.find((s) => s.name === websiteName);
33
33
  if ((site == null ? void 0 : site.id) == null || site.id === "") throw new Error(`Website "${websiteName}" not found at ${apiBase}`);
34
34
  let website = site;
35
35
  try {
36
- const wRes = await fetch(`${apiBase}/cms/websites/${site.id}`);
36
+ const wRes = await fetch(`${apiBase}/blox/websites/${site.id}`);
37
37
  if (wRes.ok) website = await wRes.json();
38
38
  } catch {
39
39
  }
40
- const pagesRes = await fetch(`${apiBase}/cms/websites/${site.id}/pages?locale=${website.default_locale || "en"}`);
40
+ const pagesRes = await fetch(`${apiBase}/blox/websites/${site.id}/pages?locale=${website.default_locale || "en"}`);
41
41
  const pagesData = await pagesRes.json();
42
42
  const pages = Array.isArray(pagesData) ? pagesData : pagesData.data ?? [];
43
43
  const paths = await expandRoutes(apiBase, pages);
44
44
  let redirects = [];
45
45
  try {
46
- const rRes = await fetch(`${apiBase}/cms/websites/${site.id}/redirects`);
46
+ const rRes = await fetch(`${apiBase}/blox/websites/${site.id}/redirects`);
47
47
  if (rRes.ok) {
48
48
  const rData = await rRes.json();
49
49
  const items = Array.isArray(rData) ? rData : rData.data ?? [];
@@ -267,7 +267,8 @@ Sitemap: ${base}/sitemap.xml
267
267
  ` : "";
268
268
  if (robotsTxt) {
269
269
  if (sitemapLine && !robotsTxt.toLowerCase().includes("sitemap:")) {
270
- return robotsTxt.trimEnd() + "\n" + sitemapLine;
270
+ return `${robotsTxt.trimEnd()}
271
+ ${sitemapLine}`;
271
272
  }
272
273
  return robotsTxt;
273
274
  }
@@ -277,7 +278,8 @@ ${sitemapLine}`;
277
278
  }
278
279
  function generateNetlifyRedirects(redirects) {
279
280
  if (redirects.length === 0) return "";
280
- return redirects.map((r) => `${r.from_path} ${r.to_path} ${r.status_code}`).join("\n") + "\n";
281
+ return `${redirects.map((r) => `${r.from_path} ${r.to_path} ${r.status_code}`).join("\n")}
282
+ `;
281
283
  }
282
284
  function stripTemplateSeoTags(template) {
283
285
  return template.replace(/<title>[^<]*<\/title>/gi, "<!--ssg:title-->").replace(/<meta\s[^>]*name\s*=\s*["']description["'][^>]*>/gi, "").replace(/<meta\s[^>]*property\s*=\s*["']og:[^"']*["'][^>]*>/gi, "").replace(/<meta\s[^>]*(?:property|name)\s*=\s*["']twitter:[^"']*["'][^>]*>/gi, "").replace(/<link\s[^>]*rel\s*=\s*["']apple-touch-icon["'][^>]*>/gi, "").replace(/<link\s[^>]*rel\s*=\s*["']icon["'][^>]*>/gi, "").replace(/\n\s*\n\s*\n/g, "\n\n");
package/dist/schema.d.ts CHANGED
@@ -14,6 +14,12 @@ export interface BlockSchema {
14
14
  fields?: SchemaDefinition;
15
15
  /** Default prop values. Merged with block props at render time. */
16
16
  defaults?: Record<string, unknown>;
17
+ /** True when this block fetches its own data from a datastore collection. */
18
+ dataSource?: boolean;
19
+ /** Static thumbnail image URL for the editor block picker. Overrides the default icon. */
20
+ thumbnail?: string;
21
+ /** Sort order in the editor block picker. Lower values appear first. Defaults to 100. */
22
+ order?: number;
17
23
  }
18
24
  export interface BlockDefinition {
19
25
  component: Component;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9C,MAAM,WAAW,WAAW;IAC3B,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAA;IACzB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC;AAED,MAAM,WAAW,eAAe;IAC/B,SAAS,EAAE,SAAS,CAAA;IACpB,MAAM,EAAE,WAAW,CAAA;CACnB;AAED,+EAA+E;AAC/E,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,CAAA"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9C,MAAM,WAAW,WAAW;IAC3B,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAA;IACzB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,6EAA6E;IAC7E,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yFAAyF;IACzF,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC/B,SAAS,EAAE,SAAS,CAAA;IACpB,MAAM,EAAE,WAAW,CAAA;CACnB;AAED,+EAA+E;AAC/E,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,CAAA"}
package/dist/ssg/cli.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bun
2
2
  "use strict";
3
3
  const process = require("node:process");
4
- const prerender = require("../prerender-CjJwDXkC.cjs");
4
+ const prerender = require("../prerender-LqPEzho3.cjs");
5
5
  async function resolveApiBase(mode) {
6
6
  if (process.env.BAGELINK_API_URL != null && process.env.BAGELINK_API_URL !== "") {
7
7
  return { apiBase: process.env.BAGELINK_API_URL };
@@ -76,7 +76,7 @@ Environment:
76
76
  let website = null;
77
77
  let websiteId = "";
78
78
  let redirects = [];
79
- let collections = {};
79
+ const collections = {};
80
80
  try {
81
81
  const siteData = await prerender.fetchCmsSiteData(apiBase, websiteName);
82
82
  paths = siteData.paths;
package/dist/ssg/cli.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bun
2
2
  import process from "node:process";
3
- import { p as polyfillBloxSsgGlobals, a as fetchCmsSiteData, c as prerender } from "../prerender-oMLxrKGs.js";
3
+ import { p as polyfillBloxSsgGlobals, f as fetchCmsSiteData, a as prerender } from "../prerender-CJ22vZ1T.js";
4
4
  async function resolveApiBase(mode) {
5
5
  if (process.env.BAGELINK_API_URL != null && process.env.BAGELINK_API_URL !== "") {
6
6
  return { apiBase: process.env.BAGELINK_API_URL };
@@ -75,7 +75,7 @@ Environment:
75
75
  let website = null;
76
76
  let websiteId = "";
77
77
  let redirects = [];
78
- let collections = {};
78
+ const collections = {};
79
79
  try {
80
80
  const siteData = await fetchCmsSiteData(apiBase, websiteName);
81
81
  paths = siteData.paths;
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const constants = require("../constants-CFB_pMvT.cjs");
3
+ const BLOX_STATE_WINDOW_KEY = "__BLOX_STATE__";
4
+ const BLOX_COLLECTIONS_WINDOW_KEY = "__BLOX_COLLECTIONS__";
5
+ const BLOX_WEBSITE_ID_WINDOW_KEY = "__BLOX_WEBSITE_ID__";
4
6
  let _cache = null;
5
7
  function readCache() {
6
8
  if (_cache != null) return _cache;
7
9
  if (typeof window === "undefined") return null;
8
- const raw = window[constants.BLOX_COLLECTIONS_WINDOW_KEY];
10
+ const raw = window[BLOX_COLLECTIONS_WINDOW_KEY];
9
11
  if (raw && typeof raw === "object" && !Array.isArray(raw)) {
10
12
  _cache = raw;
11
13
  return _cache;
@@ -17,7 +19,7 @@ function getCollectionCache() {
17
19
  }
18
20
  function getEmbeddedWebsiteId() {
19
21
  if (typeof window === "undefined") return "";
20
- const id = window[constants.BLOX_WEBSITE_ID_WINDOW_KEY];
22
+ const id = window[BLOX_WEBSITE_ID_WINDOW_KEY];
21
23
  return typeof id === "string" ? id : "";
22
24
  }
23
25
  function installCollectionCache() {
@@ -41,7 +43,7 @@ function installCollectionCache() {
41
43
  return config;
42
44
  };
43
45
  }
44
- function installBloxStateCache(globalKey = constants.BLOX_STATE_WINDOW_KEY) {
46
+ function installBloxStateCache(globalKey = BLOX_STATE_WINDOW_KEY) {
45
47
  if (typeof window === "undefined") return;
46
48
  const state = window[globalKey];
47
49
  if (!state || typeof state !== "object" || Object.keys(state).length === 0) return;
@@ -66,9 +68,9 @@ function installBloxStateCache(globalKey = constants.BLOX_STATE_WINDOW_KEY) {
66
68
  return originalFetch(input, init);
67
69
  };
68
70
  }
69
- exports.BLOX_COLLECTIONS_WINDOW_KEY = constants.BLOX_COLLECTIONS_WINDOW_KEY;
70
- exports.BLOX_STATE_WINDOW_KEY = constants.BLOX_STATE_WINDOW_KEY;
71
- exports.BLOX_WEBSITE_ID_WINDOW_KEY = constants.BLOX_WEBSITE_ID_WINDOW_KEY;
71
+ exports.BLOX_COLLECTIONS_WINDOW_KEY = BLOX_COLLECTIONS_WINDOW_KEY;
72
+ exports.BLOX_STATE_WINDOW_KEY = BLOX_STATE_WINDOW_KEY;
73
+ exports.BLOX_WEBSITE_ID_WINDOW_KEY = BLOX_WEBSITE_ID_WINDOW_KEY;
72
74
  exports.getCollectionCache = getCollectionCache;
73
75
  exports.getEmbeddedWebsiteId = getEmbeddedWebsiteId;
74
76
  exports.installBloxStateCache = installBloxStateCache;
@@ -1,3 +1,4 @@
1
+ export { getCollectionCache, getEmbeddedWebsiteId, installCollectionCache } from './collection-cache';
1
2
  /**
2
3
  * @bagelink/blox/ssg/client — browser-safe SSG utilities.
3
4
  *
@@ -5,6 +6,5 @@
5
6
  * It does NOT pull in Node.js modules (fs, path, url, happy-dom).
6
7
  */
7
8
  export { BLOX_COLLECTIONS_WINDOW_KEY, BLOX_STATE_WINDOW_KEY, BLOX_WEBSITE_ID_WINDOW_KEY } from './constants';
8
- export { getCollectionCache, getEmbeddedWebsiteId, installCollectionCache } from './collection-cache';
9
9
  export { installBloxStateCache } from './state-cache';
10
10
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/ssg/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAC5G,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AACrG,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/ssg/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AACrG;;;;;GAKG;AACH,OAAO,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAC5G,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA"}
@@ -1,4 +1,6 @@
1
- import { b as BLOX_WEBSITE_ID_WINDOW_KEY, a as BLOX_COLLECTIONS_WINDOW_KEY, B as BLOX_STATE_WINDOW_KEY } from "../constants-BjitNk-W.js";
1
+ const BLOX_STATE_WINDOW_KEY = "__BLOX_STATE__";
2
+ const BLOX_COLLECTIONS_WINDOW_KEY = "__BLOX_COLLECTIONS__";
3
+ const BLOX_WEBSITE_ID_WINDOW_KEY = "__BLOX_WEBSITE_ID__";
2
4
  let _cache = null;
3
5
  function readCache() {
4
6
  if (_cache != null) return _cache;
@@ -26,7 +26,7 @@ type CollectionCacheMap = Record<string, unknown[]>;
26
26
  */
27
27
  export declare function getCollectionCache(): CollectionCacheMap | null;
28
28
  /**
29
- * Get the pre-embedded website ID (avoids GET /cms/websites on client).
29
+ * Get the pre-embedded website ID (avoids GET /blox/websites on client).
30
30
  * Returns empty string if not available.
31
31
  */
32
32
  export declare function getEmbeddedWebsiteId(): string;
@@ -2,6 +2,6 @@
2
2
  export declare const BLOX_STATE_WINDOW_KEY: "__BLOX_STATE__";
3
3
  /** Global key for pre-fetched datastore collections (keyed by "store/collection"). */
4
4
  export declare const BLOX_COLLECTIONS_WINDOW_KEY: "__BLOX_COLLECTIONS__";
5
- /** Global key for the pre-resolved website ID (avoids GET /cms/websites on client). */
5
+ /** Global key for the pre-resolved website ID (avoids GET /blox/websites on client). */
6
6
  export declare const BLOX_WEBSITE_ID_WINDOW_KEY: "__BLOX_WEBSITE_ID__";
7
7
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/ssg/constants.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,eAAO,MAAM,qBAAqB,EAAG,gBAAyB,CAAA;AAE9D,sFAAsF;AACtF,eAAO,MAAM,2BAA2B,EAAG,sBAA+B,CAAA;AAE1E,uFAAuF;AACvF,eAAO,MAAM,0BAA0B,EAAG,qBAA8B,CAAA"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/ssg/constants.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,eAAO,MAAM,qBAAqB,EAAG,gBAAyB,CAAA;AAE9D,sFAAsF;AACtF,eAAO,MAAM,2BAA2B,EAAG,sBAA+B,CAAA;AAE1E,wFAAwF;AACxF,eAAO,MAAM,0BAA0B,EAAG,qBAA8B,CAAA"}
@@ -0,0 +1,73 @@
1
+ import { Component } from 'vue';
2
+ import { Router } from 'vue-router';
3
+ import { BlockModule } from '../defineBlock';
4
+ import { RenderContext, RenderResult } from './prerender';
5
+ export interface CreateBloxSSREntryOptions {
6
+ /** Root Vue component (App.vue). */
7
+ rootComponent: Component;
8
+ /**
9
+ * Router factory. Must return a fresh router for each render call.
10
+ * @param mode - 'web' for client, 'memory' for SSR
11
+ * @param url - initial URL (only for 'memory' mode)
12
+ */
13
+ createRouter: (mode: 'web' | 'memory', url?: string) => Router;
14
+ /**
15
+ * Block SFC modules — same format as `createBloxApp`.
16
+ * Use `import.meta.glob('./components/blocks/*.vue', { eager: true })`.
17
+ */
18
+ modules: BlockModule[] | Record<string, BlockModule>;
19
+ /** CMS website name. */
20
+ websiteName: string;
21
+ /** Datastore store identifier. */
22
+ store: string;
23
+ /** API base URL for SSR fetches. @default process.env.BAGELINK_API_URL ?? 'https://api.bagel.to' */
24
+ apiBase?: string;
25
+ /** Default locale. @default 'en' */
26
+ locale?: string;
27
+ /** Supported locales. @default [locale] */
28
+ supportedLocales?: string[];
29
+ /**
30
+ * Extra Vue plugins to install on the SSR app.
31
+ * Typically `[BagelVue]` from `@bagelink/vue`.
32
+ */
33
+ plugins?: Array<import('vue').Plugin | [import('vue').Plugin, ...unknown[]]>;
34
+ /**
35
+ * Global components to register.
36
+ * Typically `{ RouterWrapper }` from `@bagelink/vue`.
37
+ */
38
+ globalComponents?: Record<string, Component>;
39
+ }
40
+ export interface BloxSSREntry {
41
+ render: (url: string, ctx: RenderContext) => Promise<RenderResult>;
42
+ }
43
+ /**
44
+ * Factory that produces the `{ render }` export for `main.server.ts`.
45
+ *
46
+ * Encapsulates all SSR boilerplate:
47
+ * - Website ID resolution
48
+ * - CMS page data fetching
49
+ * - Vue SSR app creation with Blox + Pinia
50
+ * - `renderBloxSsgPage()` call with full context passthrough
51
+ *
52
+ * @example
53
+ * ```ts
54
+ * import { createBloxSSREntry } from '@bagelink/blox/ssg'
55
+ * import { BagelVue, RouterWrapper } from '@bagelink/vue'
56
+ * import App from './App.vue'
57
+ * import { createRouter } from './router'
58
+ *
59
+ * const blocks = import.meta.glob('./components/blocks/*.vue', { eager: true })
60
+ *
61
+ * export const { render } = createBloxSSREntry({
62
+ * rootComponent: App,
63
+ * createRouter,
64
+ * modules: Object.values(blocks),
65
+ * websiteName: 'cylogic',
66
+ * store: 'cylogic',
67
+ * plugins: [BagelVue],
68
+ * globalComponents: { RouterWrapper },
69
+ * })
70
+ * ```
71
+ */
72
+ export declare function createBloxSSREntry(options: CreateBloxSSREntryOptions): BloxSSREntry;
73
+ //# sourceMappingURL=createSSREntry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createSSREntry.d.ts","sourceRoot":"","sources":["../../src/ssg/createSSREntry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAO,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;AAO9D,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,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;CAC5C;AAED,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;CAClE;AAKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,YAAY,CAoGnF"}
@@ -1,15 +1,39 @@
1
1
  "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (let key of __getOwnPropNames(from))
11
+ if (!__hasOwnProp.call(to, key) && key !== except)
12
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
2
24
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const prerender = require("../prerender-CjJwDXkC.cjs");
25
+ const prerender = require("../prerender-LqPEzho3.cjs");
4
26
  const ssg_client = require("./client.cjs");
5
- const constants = require("../constants-CFB_pMvT.cjs");
27
+ const pinia = require("pinia");
28
+ const vue = require("vue");
29
+ const core = require("../core-DhrL5TMI.cjs");
6
30
  async function renderBloxSsgPage(options) {
7
31
  const {
8
32
  url,
9
33
  resolvedData,
10
34
  renderToString,
11
35
  createAppForUrl,
12
- stateWindowKey = constants.BLOX_STATE_WINDOW_KEY,
36
+ stateWindowKey = ssg_client.BLOX_STATE_WINDOW_KEY,
13
37
  website = null,
14
38
  websiteId = "",
15
39
  collections
@@ -25,8 +49,8 @@ async function renderBloxSsgPage(options) {
25
49
  await router.isReady();
26
50
  const html = await renderToString(app);
27
51
  const stateScript = resolvedData != null ? `<script>window[${JSON.stringify(stateWindowKey)}]=${JSON.stringify({ [url]: resolvedData })};${"<"}/script>` : "";
28
- const collectionsScript = collections && Object.keys(collections).length > 0 ? `<script>window[${JSON.stringify(constants.BLOX_COLLECTIONS_WINDOW_KEY)}]=${JSON.stringify(collections)};${"<"}/script>` : "";
29
- const websiteIdScript = websiteId ? `<script>window[${JSON.stringify(constants.BLOX_WEBSITE_ID_WINDOW_KEY)}]=${JSON.stringify(websiteId)};${"<"}/script>` : "";
52
+ const collectionsScript = collections && Object.keys(collections).length > 0 ? `<script>window[${JSON.stringify(ssg_client.BLOX_COLLECTIONS_WINDOW_KEY)}]=${JSON.stringify(collections)};${"<"}/script>` : "";
53
+ const websiteIdScript = websiteId ? `<script>window[${JSON.stringify(ssg_client.BLOX_WEBSITE_ID_WINDOW_KEY)}]=${JSON.stringify(websiteId)};${"<"}/script>` : "";
30
54
  const head = prerender.buildPageHead({
31
55
  url,
32
56
  resolvedData,
@@ -44,6 +68,89 @@ async function renderBloxSsgPage(options) {
44
68
  }
45
69
  }
46
70
  }
71
+ let _websiteId = null;
72
+ function createBloxSSREntry(options) {
73
+ var _a;
74
+ const {
75
+ rootComponent,
76
+ createRouter,
77
+ modules,
78
+ websiteName,
79
+ store,
80
+ locale = "en",
81
+ supportedLocales = [locale],
82
+ plugins = [],
83
+ globalComponents = {}
84
+ } = options;
85
+ const apiBase = options.apiBase ?? (typeof process !== "undefined" ? (_a = process.env) == null ? void 0 : _a.BAGELINK_API_URL : void 0) ?? "https://api.bagel.to";
86
+ async function getWebsiteId() {
87
+ if (_websiteId) return _websiteId;
88
+ const res = await fetch(`${apiBase}/blox/websites`);
89
+ const data = await res.json();
90
+ const sites = Array.isArray(data) ? data : (data == null ? void 0 : data.data) ?? [];
91
+ const site = sites.find((s) => s.name === websiteName);
92
+ if (!(site == null ? void 0 : site.id)) throw new Error(`Website "${websiteName}" not found`);
93
+ _websiteId = site.id;
94
+ return _websiteId;
95
+ }
96
+ async function fetchResolvedPage(urlPath) {
97
+ const websiteId = await getWebsiteId();
98
+ const url = `${apiBase}/blox/websites/${websiteId}/resolve-path?path=${encodeURIComponent(urlPath)}&locale=${locale}`;
99
+ const res = await fetch(url);
100
+ if (!res.ok) throw new Error(`resolve-path ${res.status}: ${urlPath}`);
101
+ return res.json();
102
+ }
103
+ function buildApp(url) {
104
+ const router = createRouter("memory", url);
105
+ const app = vue.createSSRApp(rootComponent);
106
+ const pinia$1 = pinia.createPinia();
107
+ pinia$1.use(({ store: s }) => {
108
+ s.router = vue.markRaw(router);
109
+ });
110
+ const blox = core.createBlox({
111
+ modules,
112
+ websiteName,
113
+ store,
114
+ defaultLocale: locale,
115
+ supportedLocales,
116
+ router
117
+ });
118
+ for (const plugin of plugins) {
119
+ if (Array.isArray(plugin)) {
120
+ const [p, ...args] = plugin;
121
+ app.use(p, ...args);
122
+ } else {
123
+ app.use(plugin);
124
+ }
125
+ }
126
+ blox.install(app, {});
127
+ app.use(pinia$1);
128
+ app.use(router);
129
+ for (const [name, comp] of Object.entries(globalComponents)) {
130
+ app.component(name, comp);
131
+ }
132
+ return { app, router };
133
+ }
134
+ async function render(url, ctx) {
135
+ let resolvedData = null;
136
+ try {
137
+ resolvedData = await fetchResolvedPage(url);
138
+ } catch (e) {
139
+ console.warn(`[prerender] Could not resolve: ${url} — ${e.message}`);
140
+ }
141
+ const { renderToString } = await import("vue/server-renderer");
142
+ return renderBloxSsgPage({
143
+ url,
144
+ resolvedData,
145
+ renderToString,
146
+ createAppForUrl: buildApp,
147
+ website: ctx.website,
148
+ websiteId: ctx.websiteId,
149
+ collections: ctx.collections
150
+ });
151
+ }
152
+ return { render };
153
+ }
47
154
  exports.buildPageHead = prerender.buildPageHead;
48
155
  exports.buildSiteHead = prerender.buildSiteHead;
49
156
  exports.fetchCmsPrerenderPaths = prerender.fetchCmsPrerenderPaths;
@@ -53,11 +160,12 @@ exports.generateRobotsTxt = prerender.generateRobotsTxt;
53
160
  exports.generateSitemapXml = prerender.generateSitemapXml;
54
161
  exports.polyfillBloxSsgGlobals = prerender.polyfillBloxSsgGlobals;
55
162
  exports.prerender = prerender.prerender;
163
+ exports.BLOX_COLLECTIONS_WINDOW_KEY = ssg_client.BLOX_COLLECTIONS_WINDOW_KEY;
164
+ exports.BLOX_STATE_WINDOW_KEY = ssg_client.BLOX_STATE_WINDOW_KEY;
165
+ exports.BLOX_WEBSITE_ID_WINDOW_KEY = ssg_client.BLOX_WEBSITE_ID_WINDOW_KEY;
56
166
  exports.getCollectionCache = ssg_client.getCollectionCache;
57
167
  exports.getEmbeddedWebsiteId = ssg_client.getEmbeddedWebsiteId;
58
168
  exports.installBloxStateCache = ssg_client.installBloxStateCache;
59
169
  exports.installCollectionCache = ssg_client.installCollectionCache;
60
- exports.BLOX_COLLECTIONS_WINDOW_KEY = constants.BLOX_COLLECTIONS_WINDOW_KEY;
61
- exports.BLOX_STATE_WINDOW_KEY = constants.BLOX_STATE_WINDOW_KEY;
62
- exports.BLOX_WEBSITE_ID_WINDOW_KEY = constants.BLOX_WEBSITE_ID_WINDOW_KEY;
170
+ exports.createBloxSSREntry = createBloxSSREntry;
63
171
  exports.renderBloxSsgPage = renderBloxSsgPage;
@@ -13,6 +13,8 @@ export { getCollectionCache, getEmbeddedWebsiteId, installCollectionCache } from
13
13
  * - SEO asset generation (sitemap.xml, robots.txt, _redirects)
14
14
  */
15
15
  export { BLOX_COLLECTIONS_WINDOW_KEY, BLOX_STATE_WINDOW_KEY, BLOX_WEBSITE_ID_WINDOW_KEY } from './constants';
16
+ export { createBloxSSREntry } from './createSSREntry';
17
+ export type { BloxSSREntry, CreateBloxSSREntryOptions } from './createSSREntry';
16
18
  export { polyfillBloxSsgGlobals } from './polyfill-node';
17
19
  export { prerender } from './prerender';
18
20
  export type { PrerenderOptions, PrerenderResult, RenderContext, RenderResult } from './prerender';
@@ -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,kBAAkB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AACrG;;;;;;;;;;GAUG;AACH,OAAO,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAC5G,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,kBAAkB,EAAE,MAAM,OAAO,CAAA;AACrH,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,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,kBAAkB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AACrG;;;;;;;;;;GAUG;AACH,OAAO,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAC5G,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,kBAAkB,EAAE,MAAM,OAAO,CAAA;AACrH,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA"}
@@ -1,7 +1,10 @@
1
- import { b as buildPageHead } from "../prerender-oMLxrKGs.js";
2
- import { d, f, a, g, e, h, p, c } from "../prerender-oMLxrKGs.js";
1
+ import { b as buildPageHead } from "../prerender-CJ22vZ1T.js";
2
+ import { c, d, f, g, e, h, p, a } from "../prerender-CJ22vZ1T.js";
3
+ import { BLOX_STATE_WINDOW_KEY, BLOX_COLLECTIONS_WINDOW_KEY, BLOX_WEBSITE_ID_WINDOW_KEY } from "./client.mjs";
3
4
  import { getCollectionCache, getEmbeddedWebsiteId, installBloxStateCache, installCollectionCache } from "./client.mjs";
4
- import { B as BLOX_STATE_WINDOW_KEY, a as BLOX_COLLECTIONS_WINDOW_KEY, b as BLOX_WEBSITE_ID_WINDOW_KEY } from "../constants-BjitNk-W.js";
5
+ import { createPinia } from "pinia";
6
+ import { createSSRApp, markRaw } from "vue";
7
+ import { c as createBlox } from "../core-CgtYpQbn.js";
5
8
  async function renderBloxSsgPage(options) {
6
9
  const {
7
10
  url,
@@ -43,14 +46,98 @@ async function renderBloxSsgPage(options) {
43
46
  }
44
47
  }
45
48
  }
49
+ let _websiteId = null;
50
+ function createBloxSSREntry(options) {
51
+ var _a;
52
+ const {
53
+ rootComponent,
54
+ createRouter,
55
+ modules,
56
+ websiteName,
57
+ store,
58
+ locale = "en",
59
+ supportedLocales = [locale],
60
+ plugins = [],
61
+ globalComponents = {}
62
+ } = options;
63
+ const apiBase = options.apiBase ?? (typeof process !== "undefined" ? (_a = process.env) == null ? void 0 : _a.BAGELINK_API_URL : void 0) ?? "https://api.bagel.to";
64
+ async function getWebsiteId() {
65
+ if (_websiteId) return _websiteId;
66
+ const res = await fetch(`${apiBase}/blox/websites`);
67
+ const data = await res.json();
68
+ const sites = Array.isArray(data) ? data : (data == null ? void 0 : data.data) ?? [];
69
+ const site = sites.find((s) => s.name === websiteName);
70
+ if (!(site == null ? void 0 : site.id)) throw new Error(`Website "${websiteName}" not found`);
71
+ _websiteId = site.id;
72
+ return _websiteId;
73
+ }
74
+ async function fetchResolvedPage(urlPath) {
75
+ const websiteId = await getWebsiteId();
76
+ const url = `${apiBase}/blox/websites/${websiteId}/resolve-path?path=${encodeURIComponent(urlPath)}&locale=${locale}`;
77
+ const res = await fetch(url);
78
+ if (!res.ok) throw new Error(`resolve-path ${res.status}: ${urlPath}`);
79
+ return res.json();
80
+ }
81
+ function buildApp(url) {
82
+ const router = createRouter("memory", url);
83
+ const app = createSSRApp(rootComponent);
84
+ const pinia = createPinia();
85
+ pinia.use(({ store: s }) => {
86
+ s.router = markRaw(router);
87
+ });
88
+ const blox = createBlox({
89
+ modules,
90
+ websiteName,
91
+ store,
92
+ defaultLocale: locale,
93
+ supportedLocales,
94
+ router
95
+ });
96
+ for (const plugin of plugins) {
97
+ if (Array.isArray(plugin)) {
98
+ const [p2, ...args] = plugin;
99
+ app.use(p2, ...args);
100
+ } else {
101
+ app.use(plugin);
102
+ }
103
+ }
104
+ blox.install(app, {});
105
+ app.use(pinia);
106
+ app.use(router);
107
+ for (const [name, comp] of Object.entries(globalComponents)) {
108
+ app.component(name, comp);
109
+ }
110
+ return { app, router };
111
+ }
112
+ async function render(url, ctx) {
113
+ let resolvedData = null;
114
+ try {
115
+ resolvedData = await fetchResolvedPage(url);
116
+ } catch (e2) {
117
+ console.warn(`[prerender] Could not resolve: ${url} — ${e2.message}`);
118
+ }
119
+ const { renderToString } = await import("vue/server-renderer");
120
+ return renderBloxSsgPage({
121
+ url,
122
+ resolvedData,
123
+ renderToString,
124
+ createAppForUrl: buildApp,
125
+ website: ctx.website,
126
+ websiteId: ctx.websiteId,
127
+ collections: ctx.collections
128
+ });
129
+ }
130
+ return { render };
131
+ }
46
132
  export {
47
133
  BLOX_COLLECTIONS_WINDOW_KEY,
48
134
  BLOX_STATE_WINDOW_KEY,
49
135
  BLOX_WEBSITE_ID_WINDOW_KEY,
50
136
  buildPageHead,
51
- d as buildSiteHead,
52
- f as fetchCmsPrerenderPaths,
53
- a as fetchCmsSiteData,
137
+ c as buildSiteHead,
138
+ createBloxSSREntry,
139
+ d as fetchCmsPrerenderPaths,
140
+ f as fetchCmsSiteData,
54
141
  g as generateNetlifyRedirects,
55
142
  e as generateRobotsTxt,
56
143
  h as generateSitemapXml,
@@ -59,6 +146,6 @@ export {
59
146
  installBloxStateCache,
60
147
  installCollectionCache,
61
148
  p as polyfillBloxSsgGlobals,
62
- c as prerender,
149
+ a as prerender,
63
150
  renderBloxSsgPage
64
151
  };