@weaverse/hydrogen 1.1.17 → 1.1.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +90 -44
- package/dist/index.d.ts +90 -44
- package/dist/index.js +369 -203
- package/dist/index.mjs +358 -191
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -28,26 +28,352 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
28
|
));
|
|
29
29
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
30
|
|
|
31
|
-
// src/index.
|
|
31
|
+
// src/index.ts
|
|
32
32
|
var src_exports = {};
|
|
33
33
|
__export(src_exports, {
|
|
34
|
+
WeaverseClient: () => WeaverseClient,
|
|
34
35
|
WeaverseHydrogenRoot: () => WeaverseHydrogenRoot,
|
|
35
|
-
|
|
36
|
+
createContentSecurityPolicy: () => createContentSecurityPolicy,
|
|
37
|
+
createWeaverseClient: () => createWeaverseClient,
|
|
36
38
|
getRequestQueries: () => getRequestQueries,
|
|
37
39
|
getSelectedProductOptions: () => getSelectedProductOptions,
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
getWeaverseConfigs: () => getWeaverseConfigs,
|
|
41
|
+
getWeaverseCsp: () => getWeaverseCsp,
|
|
42
|
+
useThemeSettings: () => useThemeSettings
|
|
40
43
|
});
|
|
41
44
|
module.exports = __toCommonJS(src_exports);
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
+
__reExport(src_exports, require("@weaverse/react"), module.exports);
|
|
46
|
+
|
|
47
|
+
// src/client.ts
|
|
48
|
+
var import_hydrogen = require("@shopify/hydrogen");
|
|
49
|
+
|
|
50
|
+
// package.json
|
|
51
|
+
var package_default = {
|
|
52
|
+
version: "1.1.19",
|
|
53
|
+
license: "MIT",
|
|
54
|
+
main: "dist/index.js",
|
|
55
|
+
typings: "dist/index.d.ts",
|
|
56
|
+
module: "dist/index.mjs",
|
|
57
|
+
publishConfig: {
|
|
58
|
+
access: "public"
|
|
59
|
+
},
|
|
60
|
+
files: [
|
|
61
|
+
"dist/*"
|
|
62
|
+
],
|
|
63
|
+
engines: {
|
|
64
|
+
node: ">=10"
|
|
65
|
+
},
|
|
66
|
+
scripts: {
|
|
67
|
+
start: "npm run dev",
|
|
68
|
+
dev: "tsup src/index.ts --format esm,cjs --dts --outDir dist --watch --external @remix-run/react,@shopify/hydrogen",
|
|
69
|
+
build: "tsup src/index.ts --format esm,cjs --dts --outDir dist --external @remix-run/react,@shopify/hydrogen",
|
|
70
|
+
clean: "rimraf dist",
|
|
71
|
+
prepublish: "npm run build"
|
|
72
|
+
},
|
|
73
|
+
peerDependencies: {
|
|
74
|
+
react: ">=18",
|
|
75
|
+
"react-dom": ">=18"
|
|
76
|
+
},
|
|
77
|
+
prettier: {
|
|
78
|
+
printWidth: 80,
|
|
79
|
+
semi: false,
|
|
80
|
+
singleQuote: true
|
|
81
|
+
},
|
|
82
|
+
name: "@weaverse/hydrogen",
|
|
83
|
+
author: "Weaverse Team",
|
|
84
|
+
dependencies: {
|
|
85
|
+
"@remix-run/react": "1.19.1",
|
|
86
|
+
"@shopify/hydrogen": "2023.7.7",
|
|
87
|
+
"@weaverse/react": "1.1.19",
|
|
88
|
+
"react-error-boundary": "^4.0.11"
|
|
89
|
+
},
|
|
90
|
+
devDependencies: {
|
|
91
|
+
"@shopify/remix-oxygen": "^1.1.4"
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
// src/utils.ts
|
|
96
|
+
function getRequestQueries(request) {
|
|
97
|
+
let url = new URL(request.url);
|
|
98
|
+
return Array.from(url.searchParams.entries()).reduce(
|
|
99
|
+
(q, [k, v]) => {
|
|
100
|
+
q[k] = v === "true" ? true : v === "false" ? false : v;
|
|
101
|
+
return q;
|
|
102
|
+
},
|
|
103
|
+
{}
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
function getWeaverseConfigs(request, env) {
|
|
107
|
+
let queries = getRequestQueries(request);
|
|
108
|
+
let {
|
|
109
|
+
WEAVERSE_PROJECT_ID,
|
|
110
|
+
WEAVERSE_HOST,
|
|
111
|
+
PUBLIC_STORE_DOMAIN,
|
|
112
|
+
PUBLIC_STOREFRONT_API_TOKEN
|
|
113
|
+
} = env || {};
|
|
114
|
+
let { weaverseProjectId, weaverseHost, isDesignMode, weaverseVersion } = queries;
|
|
115
|
+
return {
|
|
116
|
+
projectId: weaverseProjectId || WEAVERSE_PROJECT_ID || "",
|
|
117
|
+
weaverseHost: weaverseHost || WEAVERSE_HOST || "https://weaverse.io",
|
|
118
|
+
weaverseVersion: weaverseVersion || "",
|
|
119
|
+
isDesignMode: isDesignMode || false,
|
|
120
|
+
publicEnv: {
|
|
121
|
+
PUBLIC_STORE_DOMAIN,
|
|
122
|
+
PUBLIC_STOREFRONT_API_TOKEN
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
function getWeaverseCsp(request) {
|
|
127
|
+
let url = new URL(request.url);
|
|
128
|
+
let weaverseHost = url.searchParams.get("weaverseHost");
|
|
129
|
+
let weaverseHosts = ["https://*.weaverse.io"];
|
|
130
|
+
if (weaverseHost) {
|
|
131
|
+
weaverseHosts.push(weaverseHost);
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
frameAncestors: weaverseHosts,
|
|
135
|
+
defaultSrc: [
|
|
136
|
+
"'self'",
|
|
137
|
+
"https://cdn.shopify.com",
|
|
138
|
+
"https://shopify.com",
|
|
139
|
+
"https://*.youtube.com",
|
|
140
|
+
...weaverseHosts
|
|
141
|
+
],
|
|
142
|
+
styleSrc: [
|
|
143
|
+
"'self'",
|
|
144
|
+
"'unsafe-inline'",
|
|
145
|
+
"https://cdn.shopify.com",
|
|
146
|
+
...weaverseHosts
|
|
147
|
+
]
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// src/client.ts
|
|
152
|
+
var WeaverseClient = class {
|
|
153
|
+
constructor(args) {
|
|
154
|
+
this.API = "api/public/project";
|
|
155
|
+
this.clientVersion = package_default.version;
|
|
156
|
+
this.fetchWithCache = (url, options) => {
|
|
157
|
+
let cacheKey = [url, options.body];
|
|
158
|
+
let { strategy = this.storefront.CacheShort(), ...reqInit } = options;
|
|
159
|
+
let res = this.withCache(cacheKey, strategy, async () => {
|
|
160
|
+
let response = await fetch(url, reqInit);
|
|
161
|
+
if (!response.ok) {
|
|
162
|
+
throw new Error("Something went wrong. Skipping cache.");
|
|
163
|
+
}
|
|
164
|
+
return await response.json();
|
|
165
|
+
});
|
|
166
|
+
return res;
|
|
167
|
+
};
|
|
168
|
+
this.loadThemeSettings = async (strategy) => {
|
|
169
|
+
let { API, configs } = this;
|
|
170
|
+
let { weaverseHost, projectId } = configs;
|
|
171
|
+
let res = await this.fetchWithCache(
|
|
172
|
+
`${weaverseHost}/${API}/${projectId}/configs`,
|
|
173
|
+
{ strategy }
|
|
174
|
+
);
|
|
175
|
+
let data = null;
|
|
176
|
+
if (res.ok) {
|
|
177
|
+
data = res.payload;
|
|
178
|
+
if (this.configs.isDesignMode) {
|
|
179
|
+
data = {
|
|
180
|
+
...data,
|
|
181
|
+
schema: this.themeSchema,
|
|
182
|
+
countries: this.countries,
|
|
183
|
+
publicEnv: this.configs.publicEnv
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return data;
|
|
188
|
+
};
|
|
189
|
+
this.loadPage = async (args, configs = {}) => {
|
|
190
|
+
return new Promise(async (resolve, reject) => {
|
|
191
|
+
try {
|
|
192
|
+
let { request, params } = args;
|
|
193
|
+
let { strategy, ...pageLoadParams } = configs;
|
|
194
|
+
let body = {
|
|
195
|
+
...this.basePageRequestBody,
|
|
196
|
+
params: pageLoadParams,
|
|
197
|
+
url: request.url
|
|
198
|
+
};
|
|
199
|
+
let reqInit = {
|
|
200
|
+
method: "POST",
|
|
201
|
+
body: JSON.stringify(body)
|
|
202
|
+
};
|
|
203
|
+
let url = `${this.configs.weaverseHost}/api/public/project`;
|
|
204
|
+
let payload;
|
|
205
|
+
if (this.configs.isDesignMode) {
|
|
206
|
+
payload = await fetch(url, reqInit).then((res) => res.json());
|
|
207
|
+
} else {
|
|
208
|
+
payload = await this.fetchWithCache(url, {
|
|
209
|
+
...reqInit,
|
|
210
|
+
strategy
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
let { page, project, pageAssignment } = payload;
|
|
214
|
+
if (!page || !project || !pageAssignment) {
|
|
215
|
+
return reject(
|
|
216
|
+
new Error(
|
|
217
|
+
// @ts-ignore
|
|
218
|
+
payload?.error || "Invalid Weaverse project payload!"
|
|
219
|
+
)
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
if (page?.items) {
|
|
223
|
+
let items = page.items;
|
|
224
|
+
page.items = await Promise.all(
|
|
225
|
+
items.map((item) => this.execComponentLoader(item, args))
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
let data = {
|
|
229
|
+
page,
|
|
230
|
+
project,
|
|
231
|
+
pageAssignment,
|
|
232
|
+
configs: {
|
|
233
|
+
...this.basePageConfigs,
|
|
234
|
+
requestInfo: {
|
|
235
|
+
params,
|
|
236
|
+
i18n: this.storefront.i18n,
|
|
237
|
+
queries: getRequestQueries(request),
|
|
238
|
+
pathname: new URL(request.url).pathname,
|
|
239
|
+
search: new URL(request.url).search
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
};
|
|
243
|
+
return resolve(data);
|
|
244
|
+
} catch (err) {
|
|
245
|
+
console.log(`\u274C [Weaverse page]`, err);
|
|
246
|
+
reject(err);
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
};
|
|
250
|
+
this.execComponentLoader = async (item, args) => {
|
|
251
|
+
let schema = this.components.find(
|
|
252
|
+
({ schema: schema2 }) => schema2?.type === item.type
|
|
253
|
+
);
|
|
254
|
+
let { loader } = schema || {};
|
|
255
|
+
if (loader && typeof loader === "function") {
|
|
256
|
+
try {
|
|
257
|
+
return {
|
|
258
|
+
...item,
|
|
259
|
+
loaderData: await loader({
|
|
260
|
+
itemData: item,
|
|
261
|
+
...args
|
|
262
|
+
})
|
|
263
|
+
};
|
|
264
|
+
} catch (err) {
|
|
265
|
+
console.log(`\u274C [Weaverse item loader]`, item.id, err);
|
|
266
|
+
return item;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return item;
|
|
270
|
+
};
|
|
271
|
+
let { configs, storefront, components, countries, withCache, themeSchema } = args;
|
|
272
|
+
this.storefront = storefront;
|
|
273
|
+
this.components = components;
|
|
274
|
+
this.countries = countries;
|
|
275
|
+
this.themeSchema = themeSchema;
|
|
276
|
+
this.configs = configs;
|
|
277
|
+
this.withCache = withCache;
|
|
278
|
+
this.basePageConfigs = {
|
|
279
|
+
projectId: configs.projectId,
|
|
280
|
+
weaverseHost: configs.weaverseHost,
|
|
281
|
+
weaverseVersion: configs.weaverseVersion,
|
|
282
|
+
isDesignMode: configs.isDesignMode
|
|
283
|
+
};
|
|
284
|
+
this.basePageRequestBody = {
|
|
285
|
+
countries,
|
|
286
|
+
isDesignMode: this.configs.isDesignMode,
|
|
287
|
+
i18n: storefront.i18n,
|
|
288
|
+
projectId: this.configs.projectId
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
function createWeaverseClient(args) {
|
|
293
|
+
return new WeaverseClient(args);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
// src/hooks/use-theme-settings.ts
|
|
297
|
+
var import_react = require("@remix-run/react");
|
|
298
|
+
var import_react2 = require("@weaverse/react");
|
|
299
|
+
var import_react3 = require("react");
|
|
300
|
+
var settings = null;
|
|
301
|
+
var listeners = [];
|
|
302
|
+
var themeSettingsStore = {
|
|
303
|
+
updateThemeSettings(newSettings) {
|
|
304
|
+
settings = { ...settings, ...newSettings };
|
|
305
|
+
emitChange();
|
|
306
|
+
},
|
|
307
|
+
subscribe(listener) {
|
|
308
|
+
listeners = [...listeners, listener];
|
|
309
|
+
return () => {
|
|
310
|
+
listeners = listeners.filter((l) => l !== listener);
|
|
311
|
+
};
|
|
312
|
+
},
|
|
313
|
+
getSnapshot() {
|
|
314
|
+
return settings;
|
|
315
|
+
},
|
|
316
|
+
getServerSnapshot() {
|
|
317
|
+
return settings;
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
function emitChange() {
|
|
321
|
+
for (let listener of listeners) {
|
|
322
|
+
listener();
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
if (import_react2.isBrowser) {
|
|
326
|
+
window.__weaverseThemeSettingsStore = themeSettingsStore;
|
|
327
|
+
}
|
|
328
|
+
function useThemeSettings() {
|
|
329
|
+
let settings2 = (0, import_react3.useSyncExternalStore)(
|
|
330
|
+
themeSettingsStore.subscribe,
|
|
331
|
+
themeSettingsStore.getSnapshot,
|
|
332
|
+
themeSettingsStore.getServerSnapshot
|
|
333
|
+
);
|
|
334
|
+
let { weaverseTheme } = (0, import_react.useLoaderData)();
|
|
335
|
+
(0, import_react3.useEffect)(() => {
|
|
336
|
+
if (weaverseTheme) {
|
|
337
|
+
let settings3 = weaverseTheme.theme;
|
|
338
|
+
if (settings3) {
|
|
339
|
+
themeSettingsStore.updateThemeSettings(settings3);
|
|
340
|
+
}
|
|
341
|
+
} else {
|
|
342
|
+
console.warn(
|
|
343
|
+
`'weaverseTheme' should be returned from root loader in order to get global settings from 'useThemeSettings'.`
|
|
344
|
+
);
|
|
345
|
+
}
|
|
346
|
+
}, [weaverseTheme]);
|
|
347
|
+
return settings2;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// src/wrappers.ts
|
|
351
|
+
var import_hydrogen2 = require("@shopify/hydrogen");
|
|
352
|
+
var import_hydrogen3 = require("@shopify/hydrogen");
|
|
353
|
+
function getSelectedProductOptions(request) {
|
|
354
|
+
let options = (0, import_hydrogen2.getSelectedProductOptions)(request);
|
|
355
|
+
return options.filter(
|
|
356
|
+
({ name }) => name !== "isDesignMode" && !name.startsWith("weaverse")
|
|
357
|
+
);
|
|
358
|
+
}
|
|
359
|
+
function createContentSecurityPolicy(request, directives) {
|
|
360
|
+
let weaverseDirectives = getWeaverseCsp(request);
|
|
361
|
+
return (0, import_hydrogen3.createContentSecurityPolicy)({
|
|
362
|
+
...directives,
|
|
363
|
+
...weaverseDirectives
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
// src/WeaverseHydrogenRoot.tsx
|
|
368
|
+
var import_react8 = require("@remix-run/react");
|
|
369
|
+
var import_react9 = require("@weaverse/react");
|
|
370
|
+
var import_react10 = __toESM(require("react"));
|
|
45
371
|
var import_react_error_boundary = require("react-error-boundary");
|
|
46
372
|
|
|
47
373
|
// src/context.ts
|
|
48
|
-
var
|
|
374
|
+
var import_react4 = require("@weaverse/react");
|
|
49
375
|
function createCachedWeaverseInstance(init) {
|
|
50
|
-
if (
|
|
376
|
+
if (import_react4.isBrowser) {
|
|
51
377
|
window.__weaverses = window.__weaverses || [];
|
|
52
378
|
let weaverse = window.__weaverses.find((w) => {
|
|
53
379
|
let { pathname, search } = w.requestInfo;
|
|
@@ -55,13 +381,13 @@ function createCachedWeaverseInstance(init) {
|
|
|
55
381
|
return pathname === init.requestInfo.pathname && search === init.requestInfo.search && __cachedId === init.data.__cachedId;
|
|
56
382
|
});
|
|
57
383
|
if (!weaverse) {
|
|
58
|
-
weaverse = new
|
|
384
|
+
weaverse = new import_react4.Weaverse(init);
|
|
59
385
|
window.__weaverses.push(weaverse);
|
|
60
386
|
console.log("\u{1F4BF} Weaverse", weaverse);
|
|
61
387
|
}
|
|
62
388
|
return weaverse;
|
|
63
389
|
}
|
|
64
|
-
return new
|
|
390
|
+
return new import_react4.Weaverse(init);
|
|
65
391
|
}
|
|
66
392
|
function createWeaverseInstance(weaverseData, components) {
|
|
67
393
|
let { page, configs, project, pageAssignment } = weaverseData || {};
|
|
@@ -84,15 +410,17 @@ function createWeaverseInstance(weaverseData, components) {
|
|
|
84
410
|
}
|
|
85
411
|
|
|
86
412
|
// src/hooks/use-studio.ts
|
|
87
|
-
var
|
|
88
|
-
var
|
|
89
|
-
var
|
|
90
|
-
function useStudio(weaverse
|
|
91
|
-
let
|
|
92
|
-
let
|
|
413
|
+
var import_react5 = require("@remix-run/react");
|
|
414
|
+
var import_react6 = require("@weaverse/react");
|
|
415
|
+
var import_react7 = require("react");
|
|
416
|
+
function useStudio(weaverse) {
|
|
417
|
+
let { weaverseTheme } = (0, import_react5.useRouteLoaderData)("root");
|
|
418
|
+
let navigate = (0, import_react5.useNavigate)();
|
|
419
|
+
let { revalidate } = (0, import_react5.useRevalidator)();
|
|
420
|
+
let { countries, schema, publicEnv } = weaverseTheme || {};
|
|
93
421
|
let { isDesignMode, weaverseHost, weaverseVersion } = weaverse;
|
|
94
|
-
let isStudio =
|
|
95
|
-
(0,
|
|
422
|
+
let isStudio = import_react6.isIframe && isDesignMode && weaverseHost && weaverseVersion;
|
|
423
|
+
(0, import_react7.useEffect)(() => {
|
|
96
424
|
if (isStudio) {
|
|
97
425
|
weaverse.internal = {
|
|
98
426
|
...weaverse.internal,
|
|
@@ -105,213 +433,51 @@ function useStudio(weaverse, countries, schema, publicEnv) {
|
|
|
105
433
|
if (window.weaverseStudio) {
|
|
106
434
|
window.weaverseStudio.init(weaverse);
|
|
107
435
|
} else {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
);
|
|
436
|
+
let studioSrc = `${weaverseHost}/assets/studio/hydrogen/index.js?v=${weaverseVersion}`;
|
|
437
|
+
(0, import_react6.loadScript)(studioSrc);
|
|
111
438
|
}
|
|
112
439
|
}
|
|
113
440
|
}, [weaverse]);
|
|
114
441
|
}
|
|
115
442
|
|
|
116
|
-
// src/
|
|
117
|
-
__reExport(src_exports, require("@weaverse/react"), module.exports);
|
|
118
|
-
|
|
119
|
-
// src/fetch.ts
|
|
120
|
-
var import_hydrogen = require("@shopify/hydrogen");
|
|
121
|
-
async function fetchWithServerCache(params) {
|
|
122
|
-
let { url, options = {}, context } = params;
|
|
123
|
-
let { storefront } = context;
|
|
124
|
-
let withCache = (0, import_hydrogen.createWithCache)(storefront);
|
|
125
|
-
let cacheKey = [url, options.body];
|
|
126
|
-
let data = await withCache(cacheKey, storefront.CacheShort(), async () => {
|
|
127
|
-
let response = await fetch(url, options);
|
|
128
|
-
if (!response.ok)
|
|
129
|
-
throw new Error("Something went wrong. Skipping cache.");
|
|
130
|
-
return await response.json();
|
|
131
|
-
});
|
|
132
|
-
return data;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// src/utils.ts
|
|
136
|
-
function getRequestQueries(request) {
|
|
137
|
-
let url = new URL(request.url);
|
|
138
|
-
return Array.from(url.searchParams.entries()).reduce(
|
|
139
|
-
(q, [k, v]) => {
|
|
140
|
-
q[k] = v === "true" ? true : v === "false" ? false : v;
|
|
141
|
-
return q;
|
|
142
|
-
},
|
|
143
|
-
{}
|
|
144
|
-
);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// src/loader.ts
|
|
148
|
-
async function weaverseLoader(args, components, countries, loaderConfigs) {
|
|
149
|
-
return new Promise(async (resolve, reject) => {
|
|
150
|
-
try {
|
|
151
|
-
let { request, context, params } = args;
|
|
152
|
-
let queries = getRequestQueries(request);
|
|
153
|
-
let {
|
|
154
|
-
WEAVERSE_PROJECT_ID,
|
|
155
|
-
WEAVERSE_HOST,
|
|
156
|
-
PUBLIC_STORE_DOMAIN,
|
|
157
|
-
PUBLIC_STOREFRONT_API_TOKEN
|
|
158
|
-
} = context?.env || {};
|
|
159
|
-
let { weaverseProjectId, weaverseHost, isDesignMode, weaverseVersion } = queries;
|
|
160
|
-
let projectId = weaverseProjectId || WEAVERSE_PROJECT_ID;
|
|
161
|
-
weaverseHost = weaverseHost || WEAVERSE_HOST || "https://weaverse.io";
|
|
162
|
-
if (!projectId) {
|
|
163
|
-
return reject(
|
|
164
|
-
new Error(
|
|
165
|
-
`Missing Weaverse project's id. Try adding WEAVERSE_PROJECT_ID to your .env file then restart the server.`
|
|
166
|
-
)
|
|
167
|
-
);
|
|
168
|
-
}
|
|
169
|
-
let i18n = context?.storefront?.i18n;
|
|
170
|
-
let reqBody = {
|
|
171
|
-
isDesignMode,
|
|
172
|
-
i18n,
|
|
173
|
-
countries,
|
|
174
|
-
projectId,
|
|
175
|
-
loaderConfigs,
|
|
176
|
-
url: request.url
|
|
177
|
-
};
|
|
178
|
-
let url = `${weaverseHost}/api/public/project`;
|
|
179
|
-
let payload;
|
|
180
|
-
if (isDesignMode) {
|
|
181
|
-
payload = await fetch(url, {
|
|
182
|
-
method: "POST",
|
|
183
|
-
body: JSON.stringify(reqBody)
|
|
184
|
-
}).then((res) => res.json());
|
|
185
|
-
} else {
|
|
186
|
-
payload = await fetchWithServerCache({
|
|
187
|
-
url,
|
|
188
|
-
options: { method: "POST", body: JSON.stringify(reqBody) },
|
|
189
|
-
context
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
let { page, project, pageAssignment } = payload;
|
|
193
|
-
if (!page || !project || !pageAssignment) {
|
|
194
|
-
return reject(
|
|
195
|
-
new Error(
|
|
196
|
-
// @ts-ignore
|
|
197
|
-
payload?.error || "Invalid Weaverse project payload!"
|
|
198
|
-
)
|
|
199
|
-
);
|
|
200
|
-
}
|
|
201
|
-
let configs = {
|
|
202
|
-
projectId,
|
|
203
|
-
weaverseHost,
|
|
204
|
-
weaverseVersion,
|
|
205
|
-
isDesignMode,
|
|
206
|
-
requestInfo: {
|
|
207
|
-
i18n,
|
|
208
|
-
params,
|
|
209
|
-
queries,
|
|
210
|
-
pathname: new URL(request.url).pathname,
|
|
211
|
-
search: new URL(request.url).search
|
|
212
|
-
}
|
|
213
|
-
};
|
|
214
|
-
if (page?.items) {
|
|
215
|
-
let items = page.items;
|
|
216
|
-
page.items = await withLoaderData(items, components, configs, args);
|
|
217
|
-
}
|
|
218
|
-
if (isDesignMode) {
|
|
219
|
-
configs.publicEnv = {
|
|
220
|
-
PUBLIC_STORE_DOMAIN,
|
|
221
|
-
PUBLIC_STOREFRONT_API_TOKEN
|
|
222
|
-
};
|
|
223
|
-
}
|
|
224
|
-
return resolve({ page, configs, project, pageAssignment });
|
|
225
|
-
} catch (err) {
|
|
226
|
-
console.log(`\u274C Error fetching project data: ${err?.toString()}`);
|
|
227
|
-
reject(err);
|
|
228
|
-
}
|
|
229
|
-
});
|
|
230
|
-
}
|
|
231
|
-
async function withLoaderData(items, components, configs, args) {
|
|
232
|
-
return await Promise.all(
|
|
233
|
-
items.map(async (itemData) => {
|
|
234
|
-
let type = itemData.type;
|
|
235
|
-
let { loader } = components.find(({ schema }) => schema?.type === type) || {};
|
|
236
|
-
if (loader && typeof loader === "function") {
|
|
237
|
-
try {
|
|
238
|
-
return {
|
|
239
|
-
...itemData,
|
|
240
|
-
loaderData: await loader({
|
|
241
|
-
itemData,
|
|
242
|
-
configs,
|
|
243
|
-
...args
|
|
244
|
-
})
|
|
245
|
-
};
|
|
246
|
-
} catch (err) {
|
|
247
|
-
console.log(`\u274C Loader run failed! Item: ${itemData}: ${err}`);
|
|
248
|
-
return itemData;
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
return itemData;
|
|
252
|
-
})
|
|
253
|
-
);
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
// src/hydrogen-wrappers.ts
|
|
257
|
-
var import_hydrogen2 = require("@shopify/hydrogen");
|
|
258
|
-
function getSelectedProductOptions(request) {
|
|
259
|
-
let options = (0, import_hydrogen2.getSelectedProductOptions)(request);
|
|
260
|
-
return options.filter(
|
|
261
|
-
({ name }) => name !== "isDesignMode" && !name.startsWith("weaverse")
|
|
262
|
-
);
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
// src/hooks/use-theme-settings.ts
|
|
266
|
-
var import_react5 = require("@weaverse/react");
|
|
267
|
-
function useThemeSettings() {
|
|
268
|
-
let weaverse = (0, import_react5.useWeaverse)();
|
|
269
|
-
let settings = weaverse?.internal?.project?.config?.theme;
|
|
270
|
-
return settings;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
// src/index.tsx
|
|
443
|
+
// src/WeaverseHydrogenRoot.tsx
|
|
274
444
|
function WeaverseHydrogenRoot({
|
|
275
445
|
errorComponent: ErrorComponent,
|
|
276
|
-
|
|
446
|
+
components
|
|
277
447
|
}) {
|
|
278
|
-
let
|
|
279
|
-
let
|
|
280
|
-
if (
|
|
281
|
-
if (
|
|
282
|
-
return /* @__PURE__ */
|
|
283
|
-
return /* @__PURE__ */
|
|
284
|
-
RenderWeaverseRoot,
|
|
285
|
-
{
|
|
286
|
-
weaverseData: resolvedData,
|
|
287
|
-
...themeConfigs
|
|
288
|
-
}
|
|
289
|
-
);
|
|
448
|
+
let loaderData = (0, import_react8.useLoaderData)();
|
|
449
|
+
let data = loaderData?.weaverseData;
|
|
450
|
+
if (data) {
|
|
451
|
+
if (data instanceof Promise) {
|
|
452
|
+
return /* @__PURE__ */ import_react10.default.createElement(import_react_error_boundary.ErrorBoundary, { fallbackRender: ErrorComponent }, /* @__PURE__ */ import_react10.default.createElement(import_react10.Suspense, null, /* @__PURE__ */ import_react10.default.createElement(import_react8.Await, { resolve: data }, (resolvedData) => {
|
|
453
|
+
return /* @__PURE__ */ import_react10.default.createElement(RenderRoot, { data: resolvedData, components });
|
|
290
454
|
})));
|
|
291
455
|
}
|
|
292
|
-
return /* @__PURE__ */
|
|
456
|
+
return /* @__PURE__ */ import_react10.default.createElement(RenderRoot, { data, components });
|
|
293
457
|
}
|
|
294
|
-
return /* @__PURE__ */
|
|
458
|
+
return /* @__PURE__ */ import_react10.default.createElement(
|
|
295
459
|
ErrorComponent,
|
|
296
460
|
{
|
|
297
461
|
error: { message: "No Weaverse data return from route loader!" }
|
|
298
462
|
}
|
|
299
463
|
);
|
|
300
464
|
}
|
|
301
|
-
function
|
|
302
|
-
let {
|
|
303
|
-
let weaverse = createWeaverseInstance(
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
return /* @__PURE__ */ import_react8.default.createElement(import_react7.WeaverseRoot, { context: weaverse });
|
|
465
|
+
function RenderRoot(props) {
|
|
466
|
+
let { data, components } = props;
|
|
467
|
+
let weaverse = createWeaverseInstance(data, components);
|
|
468
|
+
useStudio(weaverse);
|
|
469
|
+
return /* @__PURE__ */ import_react10.default.createElement(import_react9.WeaverseRoot, { context: weaverse });
|
|
307
470
|
}
|
|
308
471
|
// Annotate the CommonJS export names for ESM import in node:
|
|
309
472
|
0 && (module.exports = {
|
|
473
|
+
WeaverseClient,
|
|
310
474
|
WeaverseHydrogenRoot,
|
|
311
|
-
|
|
475
|
+
createContentSecurityPolicy,
|
|
476
|
+
createWeaverseClient,
|
|
312
477
|
getRequestQueries,
|
|
313
478
|
getSelectedProductOptions,
|
|
479
|
+
getWeaverseConfigs,
|
|
480
|
+
getWeaverseCsp,
|
|
314
481
|
useThemeSettings,
|
|
315
|
-
weaverseLoader,
|
|
316
482
|
...require("@weaverse/react")
|
|
317
483
|
});
|