@weaverse/hydrogen 1.3.2 → 1.4.1
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 +59 -71
- package/dist/index.d.ts +59 -71
- package/dist/index.js +356 -331
- package/dist/index.mjs +354 -324
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -17,7 +17,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
17
|
}
|
|
18
18
|
return to;
|
|
19
19
|
};
|
|
20
|
-
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
21
20
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
21
|
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
22
|
// file that has been converted to a CommonJS file using a Babel-
|
|
@@ -33,24 +32,192 @@ var src_exports = {};
|
|
|
33
32
|
__export(src_exports, {
|
|
34
33
|
ThemeSettingsStore: () => ThemeSettingsStore,
|
|
35
34
|
WeaverseClient: () => WeaverseClient,
|
|
35
|
+
WeaverseHydrogen: () => WeaverseHydrogen,
|
|
36
|
+
WeaverseHydrogenItem: () => WeaverseHydrogenItem,
|
|
36
37
|
WeaverseHydrogenRoot: () => WeaverseHydrogenRoot,
|
|
37
|
-
createContentSecurityPolicy: () => createContentSecurityPolicy,
|
|
38
38
|
getRequestQueries: () => getRequestQueries,
|
|
39
39
|
getSelectedProductOptions: () => getSelectedProductOptions,
|
|
40
40
|
getWeaverseConfigs: () => getWeaverseConfigs,
|
|
41
|
-
getWeaverseCsp: () => getWeaverseCsp,
|
|
42
41
|
useThemeSettings: () => useThemeSettings,
|
|
43
42
|
withWeaverse: () => withWeaverse
|
|
44
43
|
});
|
|
45
44
|
module.exports = __toCommonJS(src_exports);
|
|
46
|
-
|
|
45
|
+
var import_react11 = require("@weaverse/react");
|
|
47
46
|
|
|
48
|
-
// src/
|
|
49
|
-
var
|
|
47
|
+
// src/WeaverseHydrogenRoot.tsx
|
|
48
|
+
var import_react8 = require("@remix-run/react");
|
|
49
|
+
var import_react9 = require("@weaverse/react");
|
|
50
|
+
var import_react10 = __toESM(require("react"));
|
|
51
|
+
var import_react_error_boundary = require("react-error-boundary");
|
|
52
|
+
|
|
53
|
+
// src/context.ts
|
|
54
|
+
var import_react = require("@weaverse/react");
|
|
55
|
+
var import_react2 = require("react");
|
|
56
|
+
function createCachedWeaverseInstance(params, components) {
|
|
57
|
+
if (import_react.isBrowser) {
|
|
58
|
+
window.__weaverses = window.__weaverses || [];
|
|
59
|
+
let weaverse = window.__weaverses.find((w) => {
|
|
60
|
+
let { pathname, search } = w.requestInfo;
|
|
61
|
+
let { __cachedId } = w.data;
|
|
62
|
+
return pathname === params.requestInfo.pathname && search === params.requestInfo.search && __cachedId === params.data.__cachedId;
|
|
63
|
+
});
|
|
64
|
+
if (!weaverse) {
|
|
65
|
+
weaverse = new WeaverseHydrogen(params, components);
|
|
66
|
+
window.__weaverses.push(weaverse);
|
|
67
|
+
console.log("\u{1F4BF} Weaverse", weaverse);
|
|
68
|
+
}
|
|
69
|
+
return weaverse;
|
|
70
|
+
}
|
|
71
|
+
return new WeaverseHydrogen(params, components);
|
|
72
|
+
}
|
|
73
|
+
function createWeaverseInstance(weaverseData, components) {
|
|
74
|
+
let { page, configs, project, pageAssignment } = weaverseData || {};
|
|
75
|
+
let weaverse = createCachedWeaverseInstance(
|
|
76
|
+
{
|
|
77
|
+
...configs,
|
|
78
|
+
data: page || {},
|
|
79
|
+
pageId: page?.id,
|
|
80
|
+
internal: { project, pageAssignment }
|
|
81
|
+
},
|
|
82
|
+
components
|
|
83
|
+
);
|
|
84
|
+
return weaverse;
|
|
85
|
+
}
|
|
86
|
+
var ThemeProvider = (0, import_react2.createContext)(null);
|
|
87
|
+
ThemeProvider.displayName = "WeaverseThemeProvider";
|
|
88
|
+
|
|
89
|
+
// src/hooks/use-studio.ts
|
|
90
|
+
var import_react4 = require("@remix-run/react");
|
|
91
|
+
var import_react5 = require("@weaverse/react");
|
|
92
|
+
var import_react6 = require("react");
|
|
93
|
+
|
|
94
|
+
// src/hooks/use-theme-context.ts
|
|
95
|
+
var import_react3 = require("react");
|
|
96
|
+
function useThemeContext() {
|
|
97
|
+
let themeContext = (0, import_react3.useContext)(ThemeProvider);
|
|
98
|
+
if (!themeContext) {
|
|
99
|
+
throw new Error(
|
|
100
|
+
`useThemeContext must be used within a ThemeProvider. Make sure to wrap your app in the withWeaverse HoC.`
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
return themeContext;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// src/hooks/use-studio.ts
|
|
107
|
+
function useStudio(weaverse) {
|
|
108
|
+
let { revalidate } = (0, import_react4.useRevalidator)();
|
|
109
|
+
let navigate = (0, import_react4.useNavigate)();
|
|
110
|
+
let themeSettingsStore = useThemeContext();
|
|
111
|
+
let { isDesignMode, weaverseHost, weaverseVersion } = weaverse;
|
|
112
|
+
let isStudio = import_react5.isIframe && isDesignMode && weaverseHost && weaverseVersion;
|
|
113
|
+
(0, import_react6.useEffect)(() => {
|
|
114
|
+
if (isStudio) {
|
|
115
|
+
weaverse.internal = {
|
|
116
|
+
...weaverse.internal,
|
|
117
|
+
navigate,
|
|
118
|
+
revalidate,
|
|
119
|
+
themeSettingsStore
|
|
120
|
+
};
|
|
121
|
+
window.__weaverse = weaverse;
|
|
122
|
+
if (window.weaverseStudio) {
|
|
123
|
+
window.weaverseStudio.init(weaverse);
|
|
124
|
+
} else {
|
|
125
|
+
let studioSrc = `${weaverseHost}/assets/studio/hydrogen/index.js?v=${weaverseVersion}`;
|
|
126
|
+
(0, import_react5.loadScript)(studioSrc);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}, [weaverse]);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// src/hooks/use-theme-settings.ts
|
|
133
|
+
var import_react7 = require("react");
|
|
134
|
+
var ThemeSettingsStore = class {
|
|
135
|
+
settings = null;
|
|
136
|
+
listeners = [];
|
|
137
|
+
countries;
|
|
138
|
+
schema;
|
|
139
|
+
publicEnv;
|
|
140
|
+
constructor(data) {
|
|
141
|
+
let { theme, countries, schema, publicEnv } = data || {};
|
|
142
|
+
this.settings = theme || null;
|
|
143
|
+
this.countries = countries;
|
|
144
|
+
this.schema = schema;
|
|
145
|
+
this.publicEnv = publicEnv;
|
|
146
|
+
}
|
|
147
|
+
updateThemeSettings = (newSettings) => {
|
|
148
|
+
this.settings = { ...this.settings, ...newSettings };
|
|
149
|
+
this.emitChange();
|
|
150
|
+
};
|
|
151
|
+
subscribe = (listener) => {
|
|
152
|
+
this.listeners = [...this.listeners, listener];
|
|
153
|
+
return () => {
|
|
154
|
+
this.listeners = this.listeners.filter((l) => l !== listener);
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
getSnapshot = () => {
|
|
158
|
+
return this.settings;
|
|
159
|
+
};
|
|
160
|
+
getServerSnapshot = () => {
|
|
161
|
+
return this.settings;
|
|
162
|
+
};
|
|
163
|
+
emitChange = () => {
|
|
164
|
+
for (let listener of this.listeners) {
|
|
165
|
+
listener();
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
};
|
|
169
|
+
function useThemeSettings() {
|
|
170
|
+
let themeSettingsStore = useThemeContext();
|
|
171
|
+
let settings = (0, import_react7.useSyncExternalStore)(
|
|
172
|
+
themeSettingsStore.subscribe,
|
|
173
|
+
themeSettingsStore.getSnapshot,
|
|
174
|
+
themeSettingsStore.getServerSnapshot
|
|
175
|
+
);
|
|
176
|
+
return settings;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// src/WeaverseHydrogenRoot.tsx
|
|
180
|
+
function WeaverseHydrogenRoot({
|
|
181
|
+
errorComponent: ErrorComponent = FallbackError,
|
|
182
|
+
components
|
|
183
|
+
}) {
|
|
184
|
+
let loaderData = (0, import_react8.useLoaderData)();
|
|
185
|
+
let data = loaderData?.weaverseData;
|
|
186
|
+
if (data) {
|
|
187
|
+
if (data instanceof Promise) {
|
|
188
|
+
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) => {
|
|
189
|
+
return /* @__PURE__ */ import_react10.default.createElement(RenderRoot, { data: resolvedData, components });
|
|
190
|
+
})));
|
|
191
|
+
}
|
|
192
|
+
return /* @__PURE__ */ import_react10.default.createElement(RenderRoot, { data, components });
|
|
193
|
+
}
|
|
194
|
+
return /* @__PURE__ */ import_react10.default.createElement(
|
|
195
|
+
ErrorComponent,
|
|
196
|
+
{
|
|
197
|
+
error: { message: "No Weaverse data return from route loader!" }
|
|
198
|
+
}
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
function RenderRoot(props) {
|
|
202
|
+
let { data, components } = props;
|
|
203
|
+
let weaverse = createWeaverseInstance(data, components);
|
|
204
|
+
useStudio(weaverse);
|
|
205
|
+
return /* @__PURE__ */ import_react10.default.createElement(import_react9.WeaverseRoot, { context: weaverse });
|
|
206
|
+
}
|
|
207
|
+
function withWeaverse(Component) {
|
|
208
|
+
return (props) => {
|
|
209
|
+
let { weaverseTheme } = (0, import_react8.useLoaderData)();
|
|
210
|
+
let themeSettingsStore = new ThemeSettingsStore(weaverseTheme);
|
|
211
|
+
return /* @__PURE__ */ import_react10.default.createElement(ThemeProvider.Provider, { value: themeSettingsStore }, /* @__PURE__ */ import_react10.default.createElement(Component, { ...props }));
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
function FallbackError({ error }) {
|
|
215
|
+
return /* @__PURE__ */ import_react10.default.createElement("div", null, error?.message || "An unexpected error occurred");
|
|
216
|
+
}
|
|
50
217
|
|
|
51
218
|
// package.json
|
|
52
219
|
var package_default = {
|
|
53
|
-
version: "1.
|
|
220
|
+
version: "1.4.1",
|
|
54
221
|
license: "MIT",
|
|
55
222
|
main: "dist/index.js",
|
|
56
223
|
typings: "dist/index.d.ts",
|
|
@@ -62,7 +229,7 @@ var package_default = {
|
|
|
62
229
|
"dist/*"
|
|
63
230
|
],
|
|
64
231
|
engines: {
|
|
65
|
-
node: ">=
|
|
232
|
+
node: ">=16"
|
|
66
233
|
},
|
|
67
234
|
scripts: {
|
|
68
235
|
start: "npm run dev",
|
|
@@ -85,7 +252,7 @@ var package_default = {
|
|
|
85
252
|
dependencies: {
|
|
86
253
|
"@remix-run/react": "1.19.1",
|
|
87
254
|
"@shopify/hydrogen": "2023.7.8",
|
|
88
|
-
"@weaverse/react": "1.
|
|
255
|
+
"@weaverse/react": "1.4.1",
|
|
89
256
|
"react-error-boundary": "^4.0.11"
|
|
90
257
|
},
|
|
91
258
|
devDependencies: {
|
|
@@ -124,51 +291,61 @@ function getWeaverseConfigs(request, env) {
|
|
|
124
291
|
}
|
|
125
292
|
};
|
|
126
293
|
}
|
|
127
|
-
function getWeaverseCsp(request) {
|
|
128
|
-
let url = new URL(request.url);
|
|
129
|
-
let weaverseHost = url.searchParams.get("weaverseHost");
|
|
130
|
-
let weaverseHosts = ["https://*.weaverse.io"];
|
|
131
|
-
if (weaverseHost) {
|
|
132
|
-
weaverseHosts.push(weaverseHost);
|
|
133
|
-
}
|
|
134
|
-
return {
|
|
135
|
-
frameAncestors: weaverseHosts,
|
|
136
|
-
defaultSrc: [
|
|
137
|
-
"'self'",
|
|
138
|
-
"https://cdn.shopify.com",
|
|
139
|
-
"https://shopify.com",
|
|
140
|
-
"https://*.youtube.com",
|
|
141
|
-
...weaverseHosts
|
|
142
|
-
],
|
|
143
|
-
styleSrc: [
|
|
144
|
-
"'self'",
|
|
145
|
-
"'unsafe-inline'",
|
|
146
|
-
"https://cdn.shopify.com",
|
|
147
|
-
...weaverseHosts
|
|
148
|
-
]
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
294
|
|
|
152
|
-
// src/client.ts
|
|
295
|
+
// src/weaverse-client.ts
|
|
153
296
|
var WeaverseClient = class {
|
|
297
|
+
API = "api/public/project";
|
|
298
|
+
clientVersion = package_default.version;
|
|
299
|
+
basePageConfigs;
|
|
300
|
+
basePageRequestBody;
|
|
301
|
+
storefront;
|
|
302
|
+
// storefront: Storefront<I18nLocale>
|
|
303
|
+
components;
|
|
304
|
+
countries;
|
|
305
|
+
themeSchema;
|
|
306
|
+
configs;
|
|
307
|
+
withCache;
|
|
308
|
+
// withCache: ReturnType<typeof createWithCache>
|
|
154
309
|
constructor(args) {
|
|
155
|
-
|
|
156
|
-
this.
|
|
157
|
-
this.
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
return res;
|
|
310
|
+
let { configs, storefront, components, countries, withCache, themeSchema } = args;
|
|
311
|
+
this.storefront = storefront;
|
|
312
|
+
this.components = components;
|
|
313
|
+
this.countries = countries;
|
|
314
|
+
this.themeSchema = themeSchema;
|
|
315
|
+
this.configs = configs;
|
|
316
|
+
this.withCache = withCache;
|
|
317
|
+
this.basePageConfigs = {
|
|
318
|
+
projectId: configs.projectId,
|
|
319
|
+
weaverseHost: configs.weaverseHost,
|
|
320
|
+
weaverseVersion: configs.weaverseVersion,
|
|
321
|
+
isDesignMode: configs.isDesignMode
|
|
168
322
|
};
|
|
169
|
-
this.
|
|
323
|
+
this.basePageRequestBody = {
|
|
324
|
+
countries,
|
|
325
|
+
isDesignMode: this.configs.isDesignMode,
|
|
326
|
+
i18n: storefront.i18n,
|
|
327
|
+
projectId: this.configs.projectId
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
fetchWithCache = (url, options) => {
|
|
331
|
+
let cacheKey = [url, options.body];
|
|
332
|
+
let { strategy = this.storefront.CacheShort(), ...reqInit } = options;
|
|
333
|
+
let res = this.withCache(cacheKey, strategy, async () => {
|
|
334
|
+
let response = await fetch(url, reqInit);
|
|
335
|
+
if (!response.ok) {
|
|
336
|
+
throw new Error("Something went wrong. Skipping cache.");
|
|
337
|
+
}
|
|
338
|
+
return await response.json();
|
|
339
|
+
});
|
|
340
|
+
return res;
|
|
341
|
+
};
|
|
342
|
+
loadThemeSettings = async (strategy) => {
|
|
343
|
+
try {
|
|
170
344
|
let { API, configs } = this;
|
|
171
345
|
let { weaverseHost, projectId } = configs;
|
|
346
|
+
if (!projectId) {
|
|
347
|
+
throw new Error("Missing Weaverse projectId!");
|
|
348
|
+
}
|
|
172
349
|
let res = await this.fetchWithCache(
|
|
173
350
|
`${weaverseHost}/${API}/${projectId}/configs`,
|
|
174
351
|
{ strategy }
|
|
@@ -186,314 +363,162 @@ var WeaverseClient = class {
|
|
|
186
363
|
}
|
|
187
364
|
}
|
|
188
365
|
return data;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
return
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
};
|
|
200
|
-
let reqInit = {
|
|
201
|
-
method: "POST",
|
|
202
|
-
body: JSON.stringify(body)
|
|
203
|
-
};
|
|
204
|
-
let url = `${this.configs.weaverseHost}/${this.API}`;
|
|
205
|
-
let payload;
|
|
206
|
-
if (this.configs.isDesignMode) {
|
|
207
|
-
payload = await fetch(url, reqInit).then((res) => res.json());
|
|
208
|
-
} else {
|
|
209
|
-
payload = await this.fetchWithCache(url, {
|
|
210
|
-
...reqInit,
|
|
211
|
-
strategy
|
|
212
|
-
});
|
|
213
|
-
}
|
|
214
|
-
let { page, project, pageAssignment } = payload;
|
|
215
|
-
if (!page || !project || !pageAssignment) {
|
|
216
|
-
return reject(
|
|
217
|
-
new Error(
|
|
218
|
-
// @ts-ignore
|
|
219
|
-
payload?.error || "Invalid Weaverse project payload!"
|
|
220
|
-
)
|
|
221
|
-
);
|
|
222
|
-
}
|
|
223
|
-
if (page?.items) {
|
|
224
|
-
let items = page.items;
|
|
225
|
-
page.items = await Promise.all(
|
|
226
|
-
items.map((item) => this.execComponentLoader(item, args))
|
|
227
|
-
);
|
|
228
|
-
}
|
|
229
|
-
let data = {
|
|
230
|
-
page,
|
|
231
|
-
project,
|
|
232
|
-
pageAssignment,
|
|
233
|
-
configs: {
|
|
234
|
-
...this.basePageConfigs,
|
|
235
|
-
requestInfo: {
|
|
236
|
-
params,
|
|
237
|
-
i18n: this.storefront.i18n,
|
|
238
|
-
queries: getRequestQueries(request),
|
|
239
|
-
pathname: new URL(request.url).pathname,
|
|
240
|
-
search: new URL(request.url).search
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
};
|
|
244
|
-
return resolve(data);
|
|
245
|
-
} catch (err) {
|
|
246
|
-
console.log(`\u274C [Weaverse page]`, err);
|
|
247
|
-
reject(err);
|
|
366
|
+
} catch (err) {
|
|
367
|
+
console.log(`\u274C [Weaverse theme settings]`, err);
|
|
368
|
+
return null;
|
|
369
|
+
}
|
|
370
|
+
};
|
|
371
|
+
loadPage = async (args, configs = {}) => {
|
|
372
|
+
return new Promise(async (resolve, reject) => {
|
|
373
|
+
try {
|
|
374
|
+
if (!this.configs.projectId) {
|
|
375
|
+
throw new Error("Missing Weaverse projectId!");
|
|
248
376
|
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
377
|
+
let { request, params } = args;
|
|
378
|
+
let { strategy, ...pageLoadParams } = configs;
|
|
379
|
+
let body = {
|
|
380
|
+
...this.basePageRequestBody,
|
|
381
|
+
params: pageLoadParams,
|
|
382
|
+
url: request.url
|
|
383
|
+
};
|
|
384
|
+
let reqInit = {
|
|
385
|
+
method: "POST",
|
|
386
|
+
body: JSON.stringify(body)
|
|
387
|
+
};
|
|
388
|
+
let url = `${this.configs.weaverseHost}/${this.API}`;
|
|
389
|
+
let payload;
|
|
390
|
+
if (this.configs.isDesignMode) {
|
|
391
|
+
payload = await fetch(url, reqInit).then((res) => res.json());
|
|
392
|
+
} else {
|
|
393
|
+
payload = await this.fetchWithCache(url, {
|
|
394
|
+
...reqInit,
|
|
395
|
+
strategy
|
|
396
|
+
});
|
|
268
397
|
}
|
|
398
|
+
let { page, project, pageAssignment } = payload;
|
|
399
|
+
if (!page || !project || !pageAssignment) {
|
|
400
|
+
throw new Error(
|
|
401
|
+
// @ts-ignore
|
|
402
|
+
payload?.error || "Invalid Weaverse project payload!"
|
|
403
|
+
);
|
|
404
|
+
}
|
|
405
|
+
if (page?.items) {
|
|
406
|
+
let items = page.items;
|
|
407
|
+
page.items = await Promise.all(
|
|
408
|
+
items.map((item) => this.execComponentLoader(item, args))
|
|
409
|
+
);
|
|
410
|
+
}
|
|
411
|
+
let data = {
|
|
412
|
+
page,
|
|
413
|
+
project,
|
|
414
|
+
pageAssignment,
|
|
415
|
+
configs: {
|
|
416
|
+
...this.basePageConfigs,
|
|
417
|
+
requestInfo: {
|
|
418
|
+
params,
|
|
419
|
+
i18n: this.storefront.i18n,
|
|
420
|
+
queries: getRequestQueries(request),
|
|
421
|
+
pathname: new URL(request.url).pathname,
|
|
422
|
+
search: new URL(request.url).search
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
};
|
|
426
|
+
return resolve(data);
|
|
427
|
+
} catch (err) {
|
|
428
|
+
console.log(`\u274C [Weaverse page]`, err);
|
|
429
|
+
reject(err);
|
|
269
430
|
}
|
|
270
|
-
return item;
|
|
271
|
-
};
|
|
272
|
-
let { configs, storefront, components, countries, withCache, themeSchema } = args;
|
|
273
|
-
this.storefront = storefront;
|
|
274
|
-
this.components = components;
|
|
275
|
-
this.countries = countries;
|
|
276
|
-
this.themeSchema = themeSchema;
|
|
277
|
-
this.configs = configs;
|
|
278
|
-
this.withCache = withCache;
|
|
279
|
-
this.basePageConfigs = {
|
|
280
|
-
projectId: configs.projectId,
|
|
281
|
-
weaverseHost: configs.weaverseHost,
|
|
282
|
-
weaverseVersion: configs.weaverseVersion,
|
|
283
|
-
isDesignMode: configs.isDesignMode
|
|
284
|
-
};
|
|
285
|
-
this.basePageRequestBody = {
|
|
286
|
-
countries,
|
|
287
|
-
isDesignMode: this.configs.isDesignMode,
|
|
288
|
-
i18n: storefront.i18n,
|
|
289
|
-
projectId: this.configs.projectId
|
|
290
|
-
};
|
|
291
|
-
}
|
|
292
|
-
};
|
|
293
|
-
|
|
294
|
-
// src/hooks/use-theme-settings.ts
|
|
295
|
-
var import_react4 = require("react");
|
|
296
|
-
|
|
297
|
-
// src/hooks/use-theme-context.ts
|
|
298
|
-
var import_react3 = require("react");
|
|
299
|
-
|
|
300
|
-
// src/context.ts
|
|
301
|
-
var import_react = require("@weaverse/react");
|
|
302
|
-
var import_react2 = require("react");
|
|
303
|
-
function createCachedWeaverseInstance(init) {
|
|
304
|
-
if (import_react.isBrowser) {
|
|
305
|
-
window.__weaverses = window.__weaverses || [];
|
|
306
|
-
let weaverse = window.__weaverses.find((w) => {
|
|
307
|
-
let { pathname, search } = w.requestInfo;
|
|
308
|
-
let { __cachedId } = w.data;
|
|
309
|
-
return pathname === init.requestInfo.pathname && search === init.requestInfo.search && __cachedId === init.data.__cachedId;
|
|
310
431
|
});
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
}
|
|
316
|
-
return weaverse;
|
|
317
|
-
}
|
|
318
|
-
return new import_react.Weaverse(init);
|
|
319
|
-
}
|
|
320
|
-
function createWeaverseInstance(weaverseData, components) {
|
|
321
|
-
let { page, configs, project, pageAssignment } = weaverseData || {};
|
|
322
|
-
let weaverse = createCachedWeaverseInstance({
|
|
323
|
-
...configs,
|
|
324
|
-
data: page || {},
|
|
325
|
-
pageId: page?.id,
|
|
326
|
-
platformType: "shopify-hydrogen",
|
|
327
|
-
internal: { project, pageAssignment }
|
|
328
|
-
});
|
|
329
|
-
components.forEach((comp) => {
|
|
330
|
-
weaverse.registerElement({
|
|
331
|
-
type: comp?.schema?.type,
|
|
332
|
-
Component: comp?.default,
|
|
333
|
-
schema: comp?.schema,
|
|
334
|
-
loader: comp?.loader
|
|
335
|
-
});
|
|
336
|
-
});
|
|
337
|
-
return weaverse;
|
|
338
|
-
}
|
|
339
|
-
var ThemeProvider = (0, import_react2.createContext)(null);
|
|
340
|
-
ThemeProvider.displayName = "WeaverseThemeProvider";
|
|
341
|
-
|
|
342
|
-
// src/hooks/use-theme-context.ts
|
|
343
|
-
function useThemeContext() {
|
|
344
|
-
let themeContext = (0, import_react3.useContext)(ThemeProvider);
|
|
345
|
-
if (!themeContext) {
|
|
346
|
-
throw new Error(
|
|
347
|
-
`useThemeContext must be used within a ThemeProvider. Make sure to wrap your app in the withWeaverse HoC.`
|
|
432
|
+
};
|
|
433
|
+
execComponentLoader = async (item, args) => {
|
|
434
|
+
let schema = this.components.find(
|
|
435
|
+
({ schema: schema2 }) => schema2?.type === item.type
|
|
348
436
|
);
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
this.subscribe = (listener) => {
|
|
363
|
-
this.listeners = [...this.listeners, listener];
|
|
364
|
-
return () => {
|
|
365
|
-
this.listeners = this.listeners.filter((l) => l !== listener);
|
|
366
|
-
};
|
|
367
|
-
};
|
|
368
|
-
this.getSnapshot = () => {
|
|
369
|
-
return this.settings;
|
|
370
|
-
};
|
|
371
|
-
this.getServerSnapshot = () => {
|
|
372
|
-
return this.settings;
|
|
373
|
-
};
|
|
374
|
-
this.emitChange = () => {
|
|
375
|
-
for (let listener of this.listeners) {
|
|
376
|
-
listener();
|
|
437
|
+
let { loader } = schema || {};
|
|
438
|
+
if (loader && typeof loader === "function") {
|
|
439
|
+
try {
|
|
440
|
+
return {
|
|
441
|
+
...item,
|
|
442
|
+
loaderData: await loader({
|
|
443
|
+
itemData: item,
|
|
444
|
+
...args
|
|
445
|
+
})
|
|
446
|
+
};
|
|
447
|
+
} catch (err) {
|
|
448
|
+
console.log(`\u274C [Weaverse item loader]`, item.id, err);
|
|
449
|
+
return item;
|
|
377
450
|
}
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
this.countries = countries;
|
|
382
|
-
this.schema = schema;
|
|
383
|
-
this.publicEnv = publicEnv;
|
|
384
|
-
}
|
|
451
|
+
}
|
|
452
|
+
return item;
|
|
453
|
+
};
|
|
385
454
|
};
|
|
386
|
-
function useThemeSettings() {
|
|
387
|
-
let themeSettingsStore = useThemeContext();
|
|
388
|
-
let settings = (0, import_react4.useSyncExternalStore)(
|
|
389
|
-
themeSettingsStore.subscribe,
|
|
390
|
-
themeSettingsStore.getSnapshot,
|
|
391
|
-
themeSettingsStore.getServerSnapshot
|
|
392
|
-
);
|
|
393
|
-
return settings;
|
|
394
|
-
}
|
|
395
455
|
|
|
396
456
|
// src/wrappers.ts
|
|
397
|
-
var
|
|
398
|
-
var import_hydrogen3 = require("@shopify/hydrogen");
|
|
457
|
+
var import_hydrogen = require("@shopify/hydrogen");
|
|
399
458
|
function getSelectedProductOptions(request) {
|
|
400
|
-
let options = (0,
|
|
459
|
+
let options = (0, import_hydrogen.getSelectedProductOptions)(request);
|
|
401
460
|
return options.filter(
|
|
402
461
|
({ name }) => name !== "isDesignMode" && !name.startsWith("weaverse")
|
|
403
462
|
);
|
|
404
463
|
}
|
|
405
|
-
function createContentSecurityPolicy(request, directives) {
|
|
406
|
-
let weaverseDirectives = getWeaverseCsp(request);
|
|
407
|
-
return (0, import_hydrogen3.createContentSecurityPolicy)({
|
|
408
|
-
...directives,
|
|
409
|
-
...weaverseDirectives
|
|
410
|
-
});
|
|
411
|
-
}
|
|
412
464
|
|
|
413
|
-
// src/
|
|
414
|
-
var
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
465
|
+
// src/index.ts
|
|
466
|
+
var WeaverseHydrogen = class extends import_react11.Weaverse {
|
|
467
|
+
platformType = "shopify-hydrogen";
|
|
468
|
+
pageId;
|
|
469
|
+
internal;
|
|
470
|
+
requestInfo;
|
|
471
|
+
constructor(params, components) {
|
|
472
|
+
let { internal, pageId, requestInfo, ...coreParams } = params;
|
|
473
|
+
super({ ...coreParams, ItemConstructor: WeaverseHydrogenItem });
|
|
474
|
+
this.internal = internal;
|
|
475
|
+
this.pageId = pageId;
|
|
476
|
+
this.requestInfo = requestInfo;
|
|
477
|
+
this.registerComponents(components);
|
|
478
|
+
}
|
|
479
|
+
registerElement(element) {
|
|
480
|
+
super.registerElement(element);
|
|
481
|
+
}
|
|
482
|
+
registerComponents(components) {
|
|
483
|
+
components.forEach((comp) => {
|
|
484
|
+
this.registerElement({
|
|
485
|
+
type: comp?.schema?.type,
|
|
486
|
+
Component: comp?.default,
|
|
487
|
+
schema: comp?.schema,
|
|
488
|
+
loader: comp?.loader
|
|
489
|
+
});
|
|
490
|
+
});
|
|
491
|
+
}
|
|
492
|
+
};
|
|
493
|
+
var WeaverseHydrogenItem = class extends import_react11.WeaverseItemStore {
|
|
494
|
+
constructor(intialData, weaverse) {
|
|
495
|
+
super(intialData, weaverse);
|
|
496
|
+
let { data, ...rest } = intialData;
|
|
497
|
+
this._store = { ...data, ...rest };
|
|
498
|
+
}
|
|
499
|
+
get Element() {
|
|
500
|
+
return super.Element;
|
|
501
|
+
}
|
|
502
|
+
get data() {
|
|
503
|
+
let defaultData = this.Element?.schema?.inspector?.flatMap((group) => group.inputs)?.reduce((a, { defaultValue, name }) => {
|
|
504
|
+
if (name && defaultValue !== null && defaultValue !== void 0) {
|
|
505
|
+
a[name] = defaultValue;
|
|
443
506
|
}
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
// src/WeaverseHydrogenRoot.tsx
|
|
449
|
-
function WeaverseHydrogenRoot({
|
|
450
|
-
errorComponent: ErrorComponent = FallbackError,
|
|
451
|
-
components
|
|
452
|
-
}) {
|
|
453
|
-
let loaderData = (0, import_react8.useLoaderData)();
|
|
454
|
-
let data = loaderData?.weaverseData;
|
|
455
|
-
if (data) {
|
|
456
|
-
if (data instanceof Promise) {
|
|
457
|
-
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) => {
|
|
458
|
-
return /* @__PURE__ */ import_react10.default.createElement(RenderRoot, { data: resolvedData, components });
|
|
459
|
-
})));
|
|
460
|
-
}
|
|
461
|
-
return /* @__PURE__ */ import_react10.default.createElement(RenderRoot, { data, components });
|
|
507
|
+
return a;
|
|
508
|
+
}, {});
|
|
509
|
+
return { ...defaultData, ...super.data };
|
|
462
510
|
}
|
|
463
|
-
return /* @__PURE__ */ import_react10.default.createElement(
|
|
464
|
-
ErrorComponent,
|
|
465
|
-
{
|
|
466
|
-
error: { message: "No Weaverse data return from route loader!" }
|
|
467
|
-
}
|
|
468
|
-
);
|
|
469
|
-
}
|
|
470
|
-
function RenderRoot(props) {
|
|
471
|
-
let { data, components } = props;
|
|
472
|
-
let weaverse = createWeaverseInstance(data, components);
|
|
473
|
-
useStudio(weaverse);
|
|
474
|
-
return /* @__PURE__ */ import_react10.default.createElement(import_react9.WeaverseRoot, { context: weaverse });
|
|
475
|
-
}
|
|
476
|
-
var withWeaverse = (Component) => {
|
|
477
|
-
return (props) => {
|
|
478
|
-
let { weaverseTheme } = (0, import_react8.useLoaderData)();
|
|
479
|
-
let themeSettingsStore = new ThemeSettingsStore(weaverseTheme);
|
|
480
|
-
return /* @__PURE__ */ import_react10.default.createElement(ThemeProvider.Provider, { value: themeSettingsStore }, /* @__PURE__ */ import_react10.default.createElement(Component, { ...props }));
|
|
481
|
-
};
|
|
482
511
|
};
|
|
483
|
-
function FallbackError({ error }) {
|
|
484
|
-
return /* @__PURE__ */ import_react10.default.createElement("div", null, error?.message || "An unexpected error occurred");
|
|
485
|
-
}
|
|
486
512
|
// Annotate the CommonJS export names for ESM import in node:
|
|
487
513
|
0 && (module.exports = {
|
|
488
514
|
ThemeSettingsStore,
|
|
489
515
|
WeaverseClient,
|
|
516
|
+
WeaverseHydrogen,
|
|
517
|
+
WeaverseHydrogenItem,
|
|
490
518
|
WeaverseHydrogenRoot,
|
|
491
|
-
createContentSecurityPolicy,
|
|
492
519
|
getRequestQueries,
|
|
493
520
|
getSelectedProductOptions,
|
|
494
521
|
getWeaverseConfigs,
|
|
495
|
-
getWeaverseCsp,
|
|
496
522
|
useThemeSettings,
|
|
497
|
-
withWeaverse
|
|
498
|
-
...require("@weaverse/react")
|
|
523
|
+
withWeaverse
|
|
499
524
|
});
|