@bagelink/blox 1.15.587 → 1.15.595
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/README.md +48 -22
- package/dist/CmsPageView.vue.d.ts.map +1 -1
- package/dist/{PreviewApp-D208UMZs.js → PreviewApp-BagepqPk.js} +1 -1
- package/dist/{PreviewApp-DNMYw1AS.cjs → PreviewApp-HVipxMQ3.cjs} +1 -1
- package/dist/{PreviewApp.vue_vue_type_style_index_0_lang-Dm0SmjEr.cjs → PreviewApp.vue_vue_type_style_index_0_lang-C6e-tDzD.cjs} +6 -6
- package/dist/{PreviewApp.vue_vue_type_style_index_0_lang-l6QisbG-.js → PreviewApp.vue_vue_type_style_index_0_lang-Dl3bKQTA.js} +1 -1
- package/dist/api/index.d.ts +24 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/{routes-DDiQDksF.js → appRuntime-B6yWkH3M.js} +280 -82
- package/dist/{routes-DOcek9fP.cjs → appRuntime-D1Z3fX-G.cjs} +237 -39
- package/dist/appRuntime.d.ts +26 -0
- package/dist/appRuntime.d.ts.map +1 -0
- package/dist/composables/useLocale.d.ts +10 -3
- package/dist/composables/useLocale.d.ts.map +1 -1
- package/dist/content/routes.d.ts +4 -2
- package/dist/content/routes.d.ts.map +1 -1
- package/dist/content/useContentSeo.d.ts.map +1 -1
- package/dist/core.d.ts +2 -0
- package/dist/core.d.ts.map +1 -1
- package/dist/createBloxApp.d.ts +9 -19
- package/dist/createBloxApp.d.ts.map +1 -1
- package/dist/data/useData.d.ts.map +1 -1
- package/dist/index.cjs +91 -111
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +64 -84
- package/dist/{shard-runner-ZAwqteYY.cjs → shard-runner-BzcFJpLT.cjs} +2 -2
- package/dist/{shard-runner-Bc4gTl71.js → shard-runner-DHVf6Vgk.js} +2 -2
- package/dist/ssg/cli.cjs +2 -4
- package/dist/ssg/cli.mjs +2 -4
- package/dist/ssg/client.cjs +0 -73
- package/dist/ssg/client.d.ts +1 -3
- package/dist/ssg/client.d.ts.map +1 -1
- package/dist/ssg/client.mjs +1 -74
- package/dist/ssg/constants.d.ts +0 -4
- package/dist/ssg/constants.d.ts.map +1 -1
- package/dist/ssg/createSSREntry.d.ts.map +1 -1
- package/dist/ssg/index.cjs +26 -47
- package/dist/ssg/index.d.ts +1 -3
- package/dist/ssg/index.d.ts.map +1 -1
- package/dist/ssg/index.mjs +24 -45
- package/dist/ssg/prerender.d.ts +1 -5
- package/dist/ssg/prerender.d.ts.map +1 -1
- package/dist/ssg/render-resolved-page.d.ts +0 -2
- package/dist/ssg/render-resolved-page.d.ts.map +1 -1
- package/dist/{validate-output-DRCseorw.js → validate-output-C4uRifzC.js} +4 -3
- package/dist/{validate-output-DlHgDBoV.cjs → validate-output-DGFLLFbj.cjs} +4 -3
- package/dist/vite-plugin.cjs +3 -64
- package/dist/vite-plugin.d.ts +0 -8
- package/dist/vite-plugin.d.ts.map +1 -1
- package/dist/vite-plugin.mjs +3 -64
- package/package.json +1 -1
- package/dist/ssg/collection-cache.d.ts +0 -53
- package/dist/ssg/collection-cache.d.ts.map +0 -1
- package/dist/ssg/state-cache.d.ts +0 -21
- package/dist/ssg/state-cache.d.ts.map +0 -1
package/dist/ssg/prerender.d.ts
CHANGED
|
@@ -34,8 +34,6 @@ export interface PrerenderOptions {
|
|
|
34
34
|
websiteId?: string;
|
|
35
35
|
/** Redirects to write as _redirects (Netlify). */
|
|
36
36
|
redirects?: RedirectEntry[];
|
|
37
|
-
/** Pre-fetched datastore collections keyed by "store/collection". */
|
|
38
|
-
collections?: Record<string, unknown[]>;
|
|
39
37
|
/** LLM artifacts config (llms.txt, llms-full.txt, per-page JSON-LD). */
|
|
40
38
|
llm?: LlmArtifactsConfig;
|
|
41
39
|
}
|
|
@@ -46,8 +44,6 @@ export interface RenderContext {
|
|
|
46
44
|
website?: WebsiteRead | null;
|
|
47
45
|
/** Resolved website ID for client embedding. */
|
|
48
46
|
websiteId?: string;
|
|
49
|
-
/** Pre-fetched datastore collections keyed by "store/collection". */
|
|
50
|
-
collections?: Record<string, unknown[]>;
|
|
51
47
|
/**
|
|
52
48
|
* Pre-resolved page data keyed by render URL. When the prerender producer has
|
|
53
49
|
* already fetched a URL's `/resolve-path` result, the SSR entry reads it from
|
|
@@ -102,7 +98,7 @@ export declare function prerender({ root, clientOutDir, serverEntry, paths, craw
|
|
|
102
98
|
* sharded runner divides a global budget by the shard count. 0 disables
|
|
103
99
|
* prefetch (render resolves inline). Default 8.
|
|
104
100
|
*/
|
|
105
|
-
resolvePrefetchConcurrency, appPaths, includeRoot, routePartsFile, mode, website, websiteId, redirects,
|
|
101
|
+
resolvePrefetchConcurrency, appPaths, includeRoot, routePartsFile, mode, website, websiteId, redirects, llm, }?: PrerenderOptions): Promise<PrerenderResult>;
|
|
106
102
|
export declare function injectIntoTemplate(template: string, head: string, appHtml: string, fontPreloads: string, htmlAttrs?: string, teleports?: Record<string, string>): string;
|
|
107
103
|
export declare function injectTeleports(html: string, teleports: Record<string, string>): string;
|
|
108
104
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prerender.d.ts","sourceRoot":"","sources":["../../src/ssg/prerender.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"prerender.d.ts","sourceRoot":"","sources":["../../src/ssg/prerender.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,8 +46,6 @@ export declare function renderBloxSsgPage<TApp>(options: {
|
|
|
46
46
|
website?: WebsiteRead | null;
|
|
47
47
|
/** Resolved website ID — embedded so client skips GET /blox/websites. */
|
|
48
48
|
websiteId?: string;
|
|
49
|
-
/** Pre-fetched datastore collections — embedded for zero-fetch hydration. */
|
|
50
|
-
collections?: Record<string, unknown[]>;
|
|
51
49
|
/** LLM artifacts config — gates JSON-LD injection + llms.txt text capture. */
|
|
52
50
|
llm?: LlmArtifactsConfig;
|
|
53
51
|
}): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-resolved-page.d.ts","sourceRoot":"","sources":["../../src/ssg/render-resolved-page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAIpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAGvE,UAAU,cAAc;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE;IACtD,GAAG,EAAE,MAAM,CAAA;IACX,YAAY,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5B,cAAc,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IACxE,eAAe,EAAE,CAChB,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,OAAO,GAAG,IAAI,EAC5B,QAAQ,EAAE,MAAM,KACZ;QAAE,GAAG,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,iBAAiB,CAAC;QAAC,YAAY,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAA;IAC9E,8EAA8E;IAC9E,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrE,sEAAsE;IACtE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,WAAW,CAAA;IACxD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,+EAA+E;IAC/E,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IAC5B,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,
|
|
1
|
+
{"version":3,"file":"render-resolved-page.d.ts","sourceRoot":"","sources":["../../src/ssg/render-resolved-page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAIpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAGvE,UAAU,cAAc;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE;IACtD,GAAG,EAAE,MAAM,CAAA;IACX,YAAY,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5B,cAAc,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IACxE,eAAe,EAAE,CAChB,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,OAAO,GAAG,IAAI,EAC5B,QAAQ,EAAE,MAAM,KACZ;QAAE,GAAG,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,iBAAiB,CAAC;QAAC,YAAY,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAA;IAC9E,8EAA8E;IAC9E,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrE,sEAAsE;IACtE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,WAAW,CAAA;IACxD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,+EAA+E;IAC/E,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IAC5B,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8EAA8E;IAC9E,GAAG,CAAC,EAAE,kBAAkB,CAAA;CACxB,GAAG,OAAO,CAAC;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,GAAG,CAAC,EAAE,YAAY,CAAA;CAClB,CAAC,CAmHD;AAED,yFAAyF;AACzF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE/C"}
|
|
@@ -853,7 +853,6 @@ async function prerender({
|
|
|
853
853
|
website = null,
|
|
854
854
|
websiteId = "",
|
|
855
855
|
redirects = [],
|
|
856
|
-
collections = {},
|
|
857
856
|
llm = {}
|
|
858
857
|
} = {}) {
|
|
859
858
|
var _a, _b, _c;
|
|
@@ -899,9 +898,12 @@ async function prerender({
|
|
|
899
898
|
const prefetchAttempts = Math.max(1, Number(process$1.env.BLOX_SSG_PREFETCH_ATTEMPTS) || 3);
|
|
900
899
|
const prefetchRetryMs = Math.max(0, Number(process$1.env.BLOX_SSG_PREFETCH_RETRY_MS) || 500);
|
|
901
900
|
function isTransientPrefetchError(error) {
|
|
901
|
+
if (error instanceof BloxBuildResponseError) {
|
|
902
|
+
return error.status === 429 || error.status >= 500;
|
|
903
|
+
}
|
|
902
904
|
if (!(error instanceof Error)) return false;
|
|
903
905
|
if (error.name === "TimeoutError" || error.name === "AbortError") return true;
|
|
904
|
-
return /(?:timed out|timeout|network|fetch failed|ECONNRESET|ECONNREFUSED|EAI_AGAIN|429|5\d\d)/i.test(error.message);
|
|
906
|
+
return /(?:timed out|timeout|network|fetch failed|ECONNRESET|ECONNREFUSED|EAI_AGAIN|HTTP (?:429|5\d\d)\b)/i.test(error.message);
|
|
905
907
|
}
|
|
906
908
|
async function prefetchWithRetry(url) {
|
|
907
909
|
for (let attempt = 1; attempt <= prefetchAttempts; attempt++) {
|
|
@@ -958,7 +960,6 @@ async function prerender({
|
|
|
958
960
|
template,
|
|
959
961
|
website,
|
|
960
962
|
websiteId,
|
|
961
|
-
collections,
|
|
962
963
|
resolveCache,
|
|
963
964
|
llm
|
|
964
965
|
});
|
|
@@ -876,7 +876,6 @@ async function prerender({
|
|
|
876
876
|
website = null,
|
|
877
877
|
websiteId = "",
|
|
878
878
|
redirects = [],
|
|
879
|
-
collections = {},
|
|
880
879
|
llm = {}
|
|
881
880
|
} = {}) {
|
|
882
881
|
var _a, _b, _c;
|
|
@@ -922,9 +921,12 @@ async function prerender({
|
|
|
922
921
|
const prefetchAttempts = Math.max(1, Number(process$1.env.BLOX_SSG_PREFETCH_ATTEMPTS) || 3);
|
|
923
922
|
const prefetchRetryMs = Math.max(0, Number(process$1.env.BLOX_SSG_PREFETCH_RETRY_MS) || 500);
|
|
924
923
|
function isTransientPrefetchError(error) {
|
|
924
|
+
if (error instanceof BloxBuildResponseError) {
|
|
925
|
+
return error.status === 429 || error.status >= 500;
|
|
926
|
+
}
|
|
925
927
|
if (!(error instanceof Error)) return false;
|
|
926
928
|
if (error.name === "TimeoutError" || error.name === "AbortError") return true;
|
|
927
|
-
return /(?:timed out|timeout|network|fetch failed|ECONNRESET|ECONNREFUSED|EAI_AGAIN|429|5\d\d)/i.test(error.message);
|
|
929
|
+
return /(?:timed out|timeout|network|fetch failed|ECONNRESET|ECONNREFUSED|EAI_AGAIN|HTTP (?:429|5\d\d)\b)/i.test(error.message);
|
|
928
930
|
}
|
|
929
931
|
async function prefetchWithRetry(url) {
|
|
930
932
|
for (let attempt = 1; attempt <= prefetchAttempts; attempt++) {
|
|
@@ -981,7 +983,6 @@ async function prerender({
|
|
|
981
983
|
template,
|
|
982
984
|
website,
|
|
983
985
|
websiteId,
|
|
984
|
-
collections,
|
|
985
986
|
resolveCache,
|
|
986
987
|
llm
|
|
987
988
|
});
|
package/dist/vite-plugin.cjs
CHANGED
|
@@ -44,9 +44,10 @@ function bloxPlugin(options = {}) {
|
|
|
44
44
|
const vuePkgJson = req.resolve("vue/package.json");
|
|
45
45
|
const vueDir = path.dirname(vuePkgJson);
|
|
46
46
|
const vueEntry = path.join(vueDir, "dist", "vue.runtime.esm-bundler.js");
|
|
47
|
+
const rendererDir = path.dirname(req.resolve("@vue/server-renderer/package.json"));
|
|
47
48
|
return [
|
|
48
|
-
{ find: "vue/server-renderer", replacement: path.join(
|
|
49
|
-
{ find: "@vue/server-renderer", replacement:
|
|
49
|
+
{ find: "vue/server-renderer", replacement: path.join(rendererDir, "dist", "server-renderer.esm-bundler.js") },
|
|
50
|
+
{ find: "@vue/server-renderer", replacement: path.join(rendererDir, "dist", "server-renderer.esm-bundler.js") },
|
|
50
51
|
{ find: "vue", replacement: vueEntry }
|
|
51
52
|
];
|
|
52
53
|
} catch {
|
|
@@ -118,68 +119,6 @@ function bloxPlugin(options = {}) {
|
|
|
118
119
|
}
|
|
119
120
|
});
|
|
120
121
|
}
|
|
121
|
-
if (options.autoCollections ?? false) {
|
|
122
|
-
const discoveredCollections = /* @__PURE__ */ new Map();
|
|
123
|
-
const VIRTUAL_ID = "virtual:blox-collections";
|
|
124
|
-
const RESOLVED_VIRTUAL_ID = `\0${VIRTUAL_ID}`;
|
|
125
|
-
plugins.push({
|
|
126
|
-
name: "vite-plugin-blox-collections",
|
|
127
|
-
enforce: "pre",
|
|
128
|
-
resolveId(id) {
|
|
129
|
-
if (id === VIRTUAL_ID) return RESOLVED_VIRTUAL_ID;
|
|
130
|
-
},
|
|
131
|
-
load(id) {
|
|
132
|
-
if (id === RESOLVED_VIRTUAL_ID) {
|
|
133
|
-
const entries = [...discoveredCollections.values()];
|
|
134
|
-
return `export default ${JSON.stringify(entries)}`;
|
|
135
|
-
}
|
|
136
|
-
},
|
|
137
|
-
transform(code, id) {
|
|
138
|
-
if (!id.endsWith(".vue")) return;
|
|
139
|
-
const namePatterns = [
|
|
140
|
-
/collectionName\s*:\s*['"]([^'"]+)['"]/g,
|
|
141
|
-
/collection_name\s*:\s*['"]([^'"]+)['"]/g,
|
|
142
|
-
/collection\s*:\s*['"]([^'"]+)['"]/g
|
|
143
|
-
];
|
|
144
|
-
const storeRe = /store\s*:\s*['"]([^'"]+)['"]/g;
|
|
145
|
-
const stores = [];
|
|
146
|
-
let storeMatch;
|
|
147
|
-
while ((storeMatch = storeRe.exec(code)) !== null) {
|
|
148
|
-
stores.push(storeMatch[1]);
|
|
149
|
-
}
|
|
150
|
-
const listItemsRe = /listItems\s*\(\s*['"]([^'"]+)['"]/g;
|
|
151
|
-
let listMatch;
|
|
152
|
-
while ((listMatch = listItemsRe.exec(code)) !== null) {
|
|
153
|
-
const collectionName = listMatch[1];
|
|
154
|
-
const key = `*/${collectionName}`;
|
|
155
|
-
if (!discoveredCollections.has(key)) {
|
|
156
|
-
discoveredCollections.set(key, { store: "*", collection: collectionName });
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
for (const pattern of namePatterns) {
|
|
160
|
-
let match;
|
|
161
|
-
while ((match = pattern.exec(code)) !== null) {
|
|
162
|
-
const collection = match[1];
|
|
163
|
-
if (["name", "label", "icon", "description", "type"].includes(collection)) continue;
|
|
164
|
-
const store = stores[0] ?? "*";
|
|
165
|
-
const key = `${store}/${collection}`;
|
|
166
|
-
if (!discoveredCollections.has(key)) {
|
|
167
|
-
discoveredCollections.set(key, { store, collection });
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
},
|
|
172
|
-
generateBundle() {
|
|
173
|
-
if (discoveredCollections.size === 0) return;
|
|
174
|
-
const entries = [...discoveredCollections.values()];
|
|
175
|
-
this.emitFile({
|
|
176
|
-
type: "asset",
|
|
177
|
-
fileName: ".blox-collections.json",
|
|
178
|
-
source: JSON.stringify(entries, null, 2)
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
122
|
if (options.emitManifest ?? false) {
|
|
184
123
|
const glob = options.manifestGlob ?? "./src/components/blocks/*.vue";
|
|
185
124
|
const manifestGlob = glob.startsWith("/") ? glob : `/${glob.replace(/^\.\//, "")}`;
|
package/dist/vite-plugin.d.ts
CHANGED
|
@@ -7,14 +7,6 @@ export interface BloxPluginOptions {
|
|
|
7
7
|
* @default false
|
|
8
8
|
*/
|
|
9
9
|
ssr?: boolean;
|
|
10
|
-
/**
|
|
11
|
-
* Enable collection auto-discovery from block source files.
|
|
12
|
-
* When true, scans `.vue` files for datastore collection references
|
|
13
|
-
* and emits a `virtual:blox-collections` module and a
|
|
14
|
-
* `.blox-collections.json` manifest in the output directory.
|
|
15
|
-
* @default false
|
|
16
|
-
*/
|
|
17
|
-
autoCollections?: boolean;
|
|
18
10
|
/**
|
|
19
11
|
* Emit a `.blox-manifest.json` describing every registered block
|
|
20
12
|
* (type, label, icon, description, props JSON Schema, defaults).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-plugin.d.ts","sourceRoot":"","sources":["../src/vite-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,MAAM,CAAA;AAM9C,MAAM,WAAW,iBAAiB;IACjC;;;;;OAKG;IACH,GAAG,CAAC,EAAE,OAAO,CAAA;IACb
|
|
1
|
+
{"version":3,"file":"vite-plugin.d.ts","sourceRoot":"","sources":["../src/vite-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,MAAM,CAAA;AAM9C,MAAM,WAAW,iBAAiB;IACjC;;;;;OAKG;IACH,GAAG,CAAC,EAAE,OAAO,CAAA;IACb;;;;;;;;;;;;;OAaG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,MAAM,EAAE,CAgdpE"}
|
package/dist/vite-plugin.mjs
CHANGED
|
@@ -20,9 +20,10 @@ function bloxPlugin(options = {}) {
|
|
|
20
20
|
const vuePkgJson = req.resolve("vue/package.json");
|
|
21
21
|
const vueDir = dirname(vuePkgJson);
|
|
22
22
|
const vueEntry = join(vueDir, "dist", "vue.runtime.esm-bundler.js");
|
|
23
|
+
const rendererDir = dirname(req.resolve("@vue/server-renderer/package.json"));
|
|
23
24
|
return [
|
|
24
|
-
{ find: "vue/server-renderer", replacement: join(
|
|
25
|
-
{ find: "@vue/server-renderer", replacement:
|
|
25
|
+
{ find: "vue/server-renderer", replacement: join(rendererDir, "dist", "server-renderer.esm-bundler.js") },
|
|
26
|
+
{ find: "@vue/server-renderer", replacement: join(rendererDir, "dist", "server-renderer.esm-bundler.js") },
|
|
26
27
|
{ find: "vue", replacement: vueEntry }
|
|
27
28
|
];
|
|
28
29
|
} catch {
|
|
@@ -94,68 +95,6 @@ function bloxPlugin(options = {}) {
|
|
|
94
95
|
}
|
|
95
96
|
});
|
|
96
97
|
}
|
|
97
|
-
if (options.autoCollections ?? false) {
|
|
98
|
-
const discoveredCollections = /* @__PURE__ */ new Map();
|
|
99
|
-
const VIRTUAL_ID = "virtual:blox-collections";
|
|
100
|
-
const RESOLVED_VIRTUAL_ID = `\0${VIRTUAL_ID}`;
|
|
101
|
-
plugins.push({
|
|
102
|
-
name: "vite-plugin-blox-collections",
|
|
103
|
-
enforce: "pre",
|
|
104
|
-
resolveId(id) {
|
|
105
|
-
if (id === VIRTUAL_ID) return RESOLVED_VIRTUAL_ID;
|
|
106
|
-
},
|
|
107
|
-
load(id) {
|
|
108
|
-
if (id === RESOLVED_VIRTUAL_ID) {
|
|
109
|
-
const entries = [...discoveredCollections.values()];
|
|
110
|
-
return `export default ${JSON.stringify(entries)}`;
|
|
111
|
-
}
|
|
112
|
-
},
|
|
113
|
-
transform(code, id) {
|
|
114
|
-
if (!id.endsWith(".vue")) return;
|
|
115
|
-
const namePatterns = [
|
|
116
|
-
/collectionName\s*:\s*['"]([^'"]+)['"]/g,
|
|
117
|
-
/collection_name\s*:\s*['"]([^'"]+)['"]/g,
|
|
118
|
-
/collection\s*:\s*['"]([^'"]+)['"]/g
|
|
119
|
-
];
|
|
120
|
-
const storeRe = /store\s*:\s*['"]([^'"]+)['"]/g;
|
|
121
|
-
const stores = [];
|
|
122
|
-
let storeMatch;
|
|
123
|
-
while ((storeMatch = storeRe.exec(code)) !== null) {
|
|
124
|
-
stores.push(storeMatch[1]);
|
|
125
|
-
}
|
|
126
|
-
const listItemsRe = /listItems\s*\(\s*['"]([^'"]+)['"]/g;
|
|
127
|
-
let listMatch;
|
|
128
|
-
while ((listMatch = listItemsRe.exec(code)) !== null) {
|
|
129
|
-
const collectionName = listMatch[1];
|
|
130
|
-
const key = `*/${collectionName}`;
|
|
131
|
-
if (!discoveredCollections.has(key)) {
|
|
132
|
-
discoveredCollections.set(key, { store: "*", collection: collectionName });
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
for (const pattern of namePatterns) {
|
|
136
|
-
let match;
|
|
137
|
-
while ((match = pattern.exec(code)) !== null) {
|
|
138
|
-
const collection = match[1];
|
|
139
|
-
if (["name", "label", "icon", "description", "type"].includes(collection)) continue;
|
|
140
|
-
const store = stores[0] ?? "*";
|
|
141
|
-
const key = `${store}/${collection}`;
|
|
142
|
-
if (!discoveredCollections.has(key)) {
|
|
143
|
-
discoveredCollections.set(key, { store, collection });
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
},
|
|
148
|
-
generateBundle() {
|
|
149
|
-
if (discoveredCollections.size === 0) return;
|
|
150
|
-
const entries = [...discoveredCollections.values()];
|
|
151
|
-
this.emitFile({
|
|
152
|
-
type: "asset",
|
|
153
|
-
fileName: ".blox-collections.json",
|
|
154
|
-
source: JSON.stringify(entries, null, 2)
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
98
|
if (options.emitManifest ?? false) {
|
|
160
99
|
const glob = options.manifestGlob ?? "./src/components/blocks/*.vue";
|
|
161
100
|
const manifestGlob = glob.startsWith("/") ? glob : `/${glob.replace(/^\.\//, "")}`;
|
package/package.json
CHANGED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pre-fetched collection cache for zero-fetch client hydration.
|
|
3
|
-
*
|
|
4
|
-
* During SSG, `blox-ssg` embeds pre-fetched datastore collections as
|
|
5
|
-
* `window.__BLOX_COLLECTIONS__ = { "store/collection": [...items] }`.
|
|
6
|
-
*
|
|
7
|
-
* This module provides:
|
|
8
|
-
* 1. `installCollectionCache()` — returns an axios request interceptor
|
|
9
|
-
* that short-circuits matching datastore GET requests with cached data.
|
|
10
|
-
* 2. `getCollectionCache()` — direct access to the cache for manual use.
|
|
11
|
-
*
|
|
12
|
-
* Usage in client entry (main.ts):
|
|
13
|
-
*
|
|
14
|
-
* ```ts
|
|
15
|
-
* import { installCollectionCache } from '@bagelink/blox/ssg/client'
|
|
16
|
-
* import { axios } from '@shared/api'
|
|
17
|
-
*
|
|
18
|
-
* const interceptor = installCollectionCache()
|
|
19
|
-
* if (interceptor) axios.interceptors.request.use(interceptor)
|
|
20
|
-
* ```
|
|
21
|
-
*/
|
|
22
|
-
type CollectionCacheMap = Record<string, unknown[]>;
|
|
23
|
-
/**
|
|
24
|
-
* Get direct access to the pre-fetched collections cache.
|
|
25
|
-
* Returns null if not available (e.g. page wasn't pre-rendered).
|
|
26
|
-
*/
|
|
27
|
-
export declare function getCollectionCache(): CollectionCacheMap | null;
|
|
28
|
-
/**
|
|
29
|
-
* Get the pre-embedded website ID (avoids GET /blox/websites on client).
|
|
30
|
-
* Returns empty string if not available.
|
|
31
|
-
*/
|
|
32
|
-
export declare function getEmbeddedWebsiteId(): string;
|
|
33
|
-
/**
|
|
34
|
-
* Install collection cache and return an axios request interceptor.
|
|
35
|
-
*
|
|
36
|
-
* The interceptor matches `GET /datastore/{store}/collections/{name}` requests
|
|
37
|
-
* and returns the cached data as a fulfilled promise (zero network).
|
|
38
|
-
*
|
|
39
|
-
* Returns `null` if no cache is available (page wasn't pre-rendered).
|
|
40
|
-
*/
|
|
41
|
-
export declare function installCollectionCache(): ((config: AxiosLikeConfig) => AxiosLikeConfig) | null;
|
|
42
|
-
/**
|
|
43
|
-
* Minimal axios config shape — avoids importing axios as a dependency.
|
|
44
|
-
* Only the fields we need for interception.
|
|
45
|
-
*/
|
|
46
|
-
interface AxiosLikeConfig {
|
|
47
|
-
url?: string;
|
|
48
|
-
method?: string;
|
|
49
|
-
adapter?: (config: AxiosLikeConfig) => Promise<unknown>;
|
|
50
|
-
[key: string]: unknown;
|
|
51
|
-
}
|
|
52
|
-
export {};
|
|
53
|
-
//# sourceMappingURL=collection-cache.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"collection-cache.d.ts","sourceRoot":"","sources":["../../src/ssg/collection-cache.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,KAAK,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;AAenD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,kBAAkB,GAAG,IAAI,CAE9D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAI7C;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,IAAI,CAAC,CAAC,MAAM,EAAE,eAAe,KAAK,eAAe,CAAC,GAAG,IAAI,CA+B9F;AAED;;;GAGG;AACH,UAAU,eAAe;IACxB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACvD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACtB"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Client-side fetch interceptor for zero-cost hydration.
|
|
3
|
-
*
|
|
4
|
-
* During SSG, `entry-server` embeds resolved CMS data as
|
|
5
|
-
* `window.__BLOX_STATE__ = { [path]: resolvedData }`.
|
|
6
|
-
*
|
|
7
|
-
* This function patches `window.fetch` so the very first
|
|
8
|
-
* `GET …/resolve-path?path=…` call (made by CmsPageView on mount)
|
|
9
|
-
* returns the pre-fetched data instead of hitting the network.
|
|
10
|
-
*
|
|
11
|
-
* Subsequent navigations (SPA) go through normally.
|
|
12
|
-
*
|
|
13
|
-
* Call once, before app mount, in your client entry:
|
|
14
|
-
*
|
|
15
|
-
* ```ts
|
|
16
|
-
* import { installBloxStateCache } from '@bagelink/blox/ssg'
|
|
17
|
-
* installBloxStateCache()
|
|
18
|
-
* ```
|
|
19
|
-
*/
|
|
20
|
-
export declare function installBloxStateCache(globalKey?: string): void;
|
|
21
|
-
//# sourceMappingURL=state-cache.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state-cache.d.ts","sourceRoot":"","sources":["../../src/ssg/state-cache.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,GAAE,MAA8B,QAoC9E"}
|