@weaverse/hydrogen 2.3.0 → 2.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 +12 -8
- package/dist/index.d.ts +12 -8
- package/dist/index.js +116 -55
- package/dist/index.mjs +97 -30
- package/package.json +5 -5
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ElementData, ElementSchema, BasicInput, WeaverseElement, WeaverseCoreParams, WeaverseProjectDataType, WeaverseResourcePickerData, Weaverse, PlatformTypeEnum, WeaverseItemStore } from '@weaverse/react';
|
|
2
|
-
export { WeaverseImage } from '@weaverse/react';
|
|
2
|
+
export { WeaverseImage, useItemInstance, useWeaverse } from '@weaverse/react';
|
|
3
3
|
import { NavigateFunction } from '@remix-run/react';
|
|
4
4
|
import { createWithCache, Storefront } from '@shopify/hydrogen';
|
|
5
5
|
import { LanguageCode, CountryCode, CurrencyCode } from '@shopify/hydrogen/storefront-api-types';
|
|
@@ -31,6 +31,11 @@ declare let STORE_PAGES: {
|
|
|
31
31
|
PAGE: string;
|
|
32
32
|
BLOG: string;
|
|
33
33
|
ARTICLE: string;
|
|
34
|
+
CART: string;
|
|
35
|
+
CUSTOMER: string;
|
|
36
|
+
SEARCH: string;
|
|
37
|
+
NOT_FOUND: string;
|
|
38
|
+
PASSWORD: string;
|
|
34
39
|
CUSTOM: string;
|
|
35
40
|
};
|
|
36
41
|
|
|
@@ -51,6 +56,8 @@ declare class WeaverseClient {
|
|
|
51
56
|
countries?: WeaverseClientArgs['countries'];
|
|
52
57
|
constructor(args: WeaverseClientArgs);
|
|
53
58
|
fetchWithCache: <T>(url: string, options: FetchWithCacheOptions) => Promise<T>;
|
|
59
|
+
incrementCacheHits: () => Promise<string>;
|
|
60
|
+
resetCacheHits: () => Promise<void>;
|
|
54
61
|
loadThemeSettings: (strategy?: AllCacheOptions) => Promise<any>;
|
|
55
62
|
loadPage: (params?: LoadPageParams) => Promise<WeaverseLoaderData | null>;
|
|
56
63
|
execComponentLoader: (item: HydrogenComponentData) => Promise<HydrogenComponentData>;
|
|
@@ -72,9 +79,7 @@ interface AllCacheOptions {
|
|
|
72
79
|
sMaxAge?: number;
|
|
73
80
|
staleIfError?: number;
|
|
74
81
|
}
|
|
75
|
-
type ComponentLoaderArgs<T = {
|
|
76
|
-
[key: string]: any;
|
|
77
|
-
}> = {
|
|
82
|
+
type ComponentLoaderArgs<T = any> = {
|
|
78
83
|
data: T;
|
|
79
84
|
weaverse: WeaverseClient;
|
|
80
85
|
};
|
|
@@ -314,11 +319,10 @@ declare class WeaverseHydrogen extends Weaverse {
|
|
|
314
319
|
requestInfo: WeaverseLoaderRequestInfo;
|
|
315
320
|
ItemConstructor: typeof WeaverseHydrogenItem;
|
|
316
321
|
data: HydrogenPageData;
|
|
317
|
-
itemInstances: Map<string
|
|
318
|
-
elementRegistry: Map<string, HydrogenElement>;
|
|
322
|
+
static itemInstances: Map<string, WeaverseHydrogenItem>;
|
|
323
|
+
static elementRegistry: Map<string, HydrogenElement>;
|
|
319
324
|
constructor(params: WeaverseHydrogenParams, components: HydrogenComponent[]);
|
|
320
|
-
|
|
321
|
-
registerComponents(components: HydrogenComponent[]): void;
|
|
325
|
+
registerComponents: (components: HydrogenComponent[]) => void;
|
|
322
326
|
}
|
|
323
327
|
declare class WeaverseHydrogenItem extends WeaverseItemStore {
|
|
324
328
|
weaverse: WeaverseHydrogen;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ElementData, ElementSchema, BasicInput, WeaverseElement, WeaverseCoreParams, WeaverseProjectDataType, WeaverseResourcePickerData, Weaverse, PlatformTypeEnum, WeaverseItemStore } from '@weaverse/react';
|
|
2
|
-
export { WeaverseImage } from '@weaverse/react';
|
|
2
|
+
export { WeaverseImage, useItemInstance, useWeaverse } from '@weaverse/react';
|
|
3
3
|
import { NavigateFunction } from '@remix-run/react';
|
|
4
4
|
import { createWithCache, Storefront } from '@shopify/hydrogen';
|
|
5
5
|
import { LanguageCode, CountryCode, CurrencyCode } from '@shopify/hydrogen/storefront-api-types';
|
|
@@ -31,6 +31,11 @@ declare let STORE_PAGES: {
|
|
|
31
31
|
PAGE: string;
|
|
32
32
|
BLOG: string;
|
|
33
33
|
ARTICLE: string;
|
|
34
|
+
CART: string;
|
|
35
|
+
CUSTOMER: string;
|
|
36
|
+
SEARCH: string;
|
|
37
|
+
NOT_FOUND: string;
|
|
38
|
+
PASSWORD: string;
|
|
34
39
|
CUSTOM: string;
|
|
35
40
|
};
|
|
36
41
|
|
|
@@ -51,6 +56,8 @@ declare class WeaverseClient {
|
|
|
51
56
|
countries?: WeaverseClientArgs['countries'];
|
|
52
57
|
constructor(args: WeaverseClientArgs);
|
|
53
58
|
fetchWithCache: <T>(url: string, options: FetchWithCacheOptions) => Promise<T>;
|
|
59
|
+
incrementCacheHits: () => Promise<string>;
|
|
60
|
+
resetCacheHits: () => Promise<void>;
|
|
54
61
|
loadThemeSettings: (strategy?: AllCacheOptions) => Promise<any>;
|
|
55
62
|
loadPage: (params?: LoadPageParams) => Promise<WeaverseLoaderData | null>;
|
|
56
63
|
execComponentLoader: (item: HydrogenComponentData) => Promise<HydrogenComponentData>;
|
|
@@ -72,9 +79,7 @@ interface AllCacheOptions {
|
|
|
72
79
|
sMaxAge?: number;
|
|
73
80
|
staleIfError?: number;
|
|
74
81
|
}
|
|
75
|
-
type ComponentLoaderArgs<T = {
|
|
76
|
-
[key: string]: any;
|
|
77
|
-
}> = {
|
|
82
|
+
type ComponentLoaderArgs<T = any> = {
|
|
78
83
|
data: T;
|
|
79
84
|
weaverse: WeaverseClient;
|
|
80
85
|
};
|
|
@@ -314,11 +319,10 @@ declare class WeaverseHydrogen extends Weaverse {
|
|
|
314
319
|
requestInfo: WeaverseLoaderRequestInfo;
|
|
315
320
|
ItemConstructor: typeof WeaverseHydrogenItem;
|
|
316
321
|
data: HydrogenPageData;
|
|
317
|
-
itemInstances: Map<string
|
|
318
|
-
elementRegistry: Map<string, HydrogenElement>;
|
|
322
|
+
static itemInstances: Map<string, WeaverseHydrogenItem>;
|
|
323
|
+
static elementRegistry: Map<string, HydrogenElement>;
|
|
319
324
|
constructor(params: WeaverseHydrogenParams, components: HydrogenComponent[]);
|
|
320
|
-
|
|
321
|
-
registerComponents(components: HydrogenComponent[]): void;
|
|
325
|
+
registerComponents: (components: HydrogenComponent[]) => void;
|
|
322
326
|
}
|
|
323
327
|
declare class WeaverseHydrogenItem extends WeaverseItemStore {
|
|
324
328
|
weaverse: WeaverseHydrogen;
|
package/dist/index.js
CHANGED
|
@@ -38,23 +38,45 @@ __export(src_exports, {
|
|
|
38
38
|
getRequestQueries: () => getRequestQueries,
|
|
39
39
|
getSelectedProductOptions: () => getSelectedProductOptions,
|
|
40
40
|
getWeaverseConfigs: () => getWeaverseConfigs,
|
|
41
|
+
useItemInstance: () => import_react13.useItemInstance,
|
|
41
42
|
useThemeSettings: () => useThemeSettings,
|
|
43
|
+
useWeaverse: () => import_react13.useWeaverse,
|
|
42
44
|
withWeaverse: () => withWeaverse
|
|
43
45
|
});
|
|
44
46
|
module.exports = __toCommonJS(src_exports);
|
|
45
|
-
var
|
|
47
|
+
var import_react13 = require("@weaverse/react");
|
|
48
|
+
|
|
49
|
+
// src/components/main.tsx
|
|
50
|
+
var main_exports = {};
|
|
51
|
+
__export(main_exports, {
|
|
52
|
+
default: () => main_default,
|
|
53
|
+
schema: () => schema
|
|
54
|
+
});
|
|
55
|
+
var import_react = __toESM(require("react"));
|
|
56
|
+
var Main = (0, import_react.forwardRef)((props, ref) => {
|
|
57
|
+
return /* @__PURE__ */ import_react.default.createElement("div", { ref, ...props });
|
|
58
|
+
});
|
|
59
|
+
var main_default = Main;
|
|
60
|
+
var schema = {
|
|
61
|
+
type: "main",
|
|
62
|
+
title: "Main",
|
|
63
|
+
inspector: []
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
// src/components/index.ts
|
|
67
|
+
var defaultComponents = [main_exports];
|
|
46
68
|
|
|
47
69
|
// src/WeaverseHydrogenRoot.tsx
|
|
48
|
-
var
|
|
49
|
-
var
|
|
50
|
-
var
|
|
70
|
+
var import_react10 = require("@remix-run/react");
|
|
71
|
+
var import_react11 = require("@weaverse/react");
|
|
72
|
+
var import_react12 = __toESM(require("react"));
|
|
51
73
|
var import_react_error_boundary = require("react-error-boundary");
|
|
52
74
|
|
|
53
75
|
// src/context.ts
|
|
54
|
-
var
|
|
55
|
-
var
|
|
76
|
+
var import_react2 = require("@weaverse/react");
|
|
77
|
+
var import_react3 = require("react");
|
|
56
78
|
function createCachedWeaverseInstance(params, components) {
|
|
57
|
-
if (
|
|
79
|
+
if (import_react2.isBrowser) {
|
|
58
80
|
window.__weaverses = window.__weaverses || [];
|
|
59
81
|
let weaverse = window.__weaverses.find((w) => {
|
|
60
82
|
let { pathname, search } = w.requestInfo;
|
|
@@ -83,18 +105,18 @@ function createWeaverseInstance(weaverseData, components) {
|
|
|
83
105
|
components
|
|
84
106
|
);
|
|
85
107
|
}
|
|
86
|
-
var ThemeProvider = (0,
|
|
108
|
+
var ThemeProvider = (0, import_react3.createContext)(null);
|
|
87
109
|
ThemeProvider.displayName = "WeaverseThemeProvider";
|
|
88
110
|
|
|
89
111
|
// src/hooks/use-studio.ts
|
|
90
|
-
var
|
|
91
|
-
var
|
|
92
|
-
var
|
|
112
|
+
var import_react5 = require("@remix-run/react");
|
|
113
|
+
var import_react6 = require("@weaverse/react");
|
|
114
|
+
var import_react7 = require("react");
|
|
93
115
|
|
|
94
116
|
// src/hooks/use-theme-context.ts
|
|
95
|
-
var
|
|
117
|
+
var import_react4 = require("react");
|
|
96
118
|
function useThemeContext() {
|
|
97
|
-
let themeContext = (0,
|
|
119
|
+
let themeContext = (0, import_react4.useContext)(ThemeProvider);
|
|
98
120
|
if (!themeContext) {
|
|
99
121
|
throw new Error(
|
|
100
122
|
`useThemeContext must be used within a ThemeProvider. Make sure to wrap your app in the withWeaverse HoC.`
|
|
@@ -105,12 +127,12 @@ function useThemeContext() {
|
|
|
105
127
|
|
|
106
128
|
// src/hooks/use-studio.ts
|
|
107
129
|
function useStudio(weaverse) {
|
|
108
|
-
let { revalidate } = (0,
|
|
109
|
-
let navigate = (0,
|
|
130
|
+
let { revalidate } = (0, import_react5.useRevalidator)();
|
|
131
|
+
let navigate = (0, import_react5.useNavigate)();
|
|
110
132
|
let themeSettingsStore = useThemeContext();
|
|
111
133
|
let { isDesignMode, weaverseHost, weaverseVersion } = weaverse;
|
|
112
|
-
let isStudio =
|
|
113
|
-
(0,
|
|
134
|
+
let isStudio = import_react6.isIframe && isDesignMode && weaverseHost && weaverseVersion;
|
|
135
|
+
(0, import_react7.useEffect)(() => {
|
|
114
136
|
if (isStudio) {
|
|
115
137
|
weaverse.internal = {
|
|
116
138
|
...weaverse.internal,
|
|
@@ -123,15 +145,15 @@ function useStudio(weaverse) {
|
|
|
123
145
|
window.weaverseStudio.init(weaverse);
|
|
124
146
|
} else {
|
|
125
147
|
let studioSrc = `${weaverseHost}/assets/studio/hydrogen/index.js?v=${weaverseVersion}`;
|
|
126
|
-
(0,
|
|
148
|
+
(0, import_react6.loadScript)(studioSrc);
|
|
127
149
|
}
|
|
128
150
|
}
|
|
129
151
|
}, [weaverse.requestInfo]);
|
|
130
152
|
}
|
|
131
153
|
|
|
132
154
|
// src/hooks/use-theme-settings.ts
|
|
133
|
-
var
|
|
134
|
-
var
|
|
155
|
+
var import_react8 = require("react");
|
|
156
|
+
var import_react9 = require("@weaverse/react");
|
|
135
157
|
var ThemeSettingsStore = class _ThemeSettingsStore {
|
|
136
158
|
static settings = null;
|
|
137
159
|
listeners = [];
|
|
@@ -139,8 +161,8 @@ var ThemeSettingsStore = class _ThemeSettingsStore {
|
|
|
139
161
|
schema;
|
|
140
162
|
publicEnv;
|
|
141
163
|
constructor(data) {
|
|
142
|
-
let { theme, countries, schema, publicEnv } = data || {};
|
|
143
|
-
if (
|
|
164
|
+
let { theme, countries, schema: schema2, publicEnv } = data || {};
|
|
165
|
+
if (import_react9.isBrowser && _ThemeSettingsStore.settings) {
|
|
144
166
|
_ThemeSettingsStore.settings = {
|
|
145
167
|
...theme,
|
|
146
168
|
..._ThemeSettingsStore.settings
|
|
@@ -149,7 +171,7 @@ var ThemeSettingsStore = class _ThemeSettingsStore {
|
|
|
149
171
|
_ThemeSettingsStore.settings = theme || {};
|
|
150
172
|
}
|
|
151
173
|
this.countries = countries;
|
|
152
|
-
this.schema =
|
|
174
|
+
this.schema = schema2;
|
|
153
175
|
this.publicEnv = publicEnv;
|
|
154
176
|
}
|
|
155
177
|
updateThemeSettings = (newSettings) => {
|
|
@@ -179,7 +201,7 @@ var ThemeSettingsStore = class _ThemeSettingsStore {
|
|
|
179
201
|
};
|
|
180
202
|
function useThemeSettings() {
|
|
181
203
|
let themeSettingsStore = useThemeContext();
|
|
182
|
-
let settings = (0,
|
|
204
|
+
let settings = (0, import_react8.useSyncExternalStore)(
|
|
183
205
|
themeSettingsStore.subscribe,
|
|
184
206
|
themeSettingsStore.getSnapshot,
|
|
185
207
|
themeSettingsStore.getServerSnapshot
|
|
@@ -188,22 +210,22 @@ function useThemeSettings() {
|
|
|
188
210
|
}
|
|
189
211
|
|
|
190
212
|
// src/WeaverseHydrogenRoot.tsx
|
|
191
|
-
var WeaverseHydrogenRoot = (0,
|
|
213
|
+
var WeaverseHydrogenRoot = (0, import_react12.memo)(
|
|
192
214
|
({
|
|
193
215
|
errorComponent: ErrorComponent = FallbackError,
|
|
194
216
|
components
|
|
195
217
|
}) => {
|
|
196
|
-
let loaderData = (0,
|
|
218
|
+
let loaderData = (0, import_react10.useLoaderData)();
|
|
197
219
|
let data = loaderData?.weaverseData;
|
|
198
220
|
if (data) {
|
|
199
221
|
if (data instanceof Promise) {
|
|
200
|
-
return /* @__PURE__ */
|
|
201
|
-
return /* @__PURE__ */
|
|
222
|
+
return /* @__PURE__ */ import_react12.default.createElement(import_react_error_boundary.ErrorBoundary, { fallbackRender: ErrorComponent }, /* @__PURE__ */ import_react12.default.createElement(import_react12.Suspense, null, /* @__PURE__ */ import_react12.default.createElement(import_react10.Await, { resolve: data }, (resolvedData) => {
|
|
223
|
+
return /* @__PURE__ */ import_react12.default.createElement(RenderRoot, { data: resolvedData, components });
|
|
202
224
|
})));
|
|
203
225
|
}
|
|
204
|
-
return /* @__PURE__ */
|
|
226
|
+
return /* @__PURE__ */ import_react12.default.createElement(RenderRoot, { data, components });
|
|
205
227
|
}
|
|
206
|
-
return /* @__PURE__ */
|
|
228
|
+
return /* @__PURE__ */ import_react12.default.createElement(
|
|
207
229
|
ErrorComponent,
|
|
208
230
|
{
|
|
209
231
|
error: { message: "No Weaverse data return from route loader!" }
|
|
@@ -215,17 +237,17 @@ function RenderRoot(props) {
|
|
|
215
237
|
let { data, components } = props;
|
|
216
238
|
let weaverse = createWeaverseInstance(data, components);
|
|
217
239
|
useStudio(weaverse);
|
|
218
|
-
return /* @__PURE__ */
|
|
240
|
+
return /* @__PURE__ */ import_react12.default.createElement(import_react11.WeaverseRoot, { context: weaverse });
|
|
219
241
|
}
|
|
220
242
|
function withWeaverse(Component) {
|
|
221
243
|
return (props) => {
|
|
222
|
-
let loaderData = (0,
|
|
244
|
+
let loaderData = (0, import_react10.useRouteLoaderData)("root");
|
|
223
245
|
let themeSettingsStore = new ThemeSettingsStore(loaderData?.weaverseTheme);
|
|
224
|
-
return /* @__PURE__ */
|
|
246
|
+
return /* @__PURE__ */ import_react12.default.createElement(ThemeProvider.Provider, { value: themeSettingsStore }, /* @__PURE__ */ import_react12.default.createElement(Component, { ...props }));
|
|
225
247
|
};
|
|
226
248
|
}
|
|
227
249
|
function FallbackError({ error }) {
|
|
228
|
-
return /* @__PURE__ */
|
|
250
|
+
return /* @__PURE__ */ import_react12.default.createElement("div", null, error?.message || "An unexpected error occurred");
|
|
229
251
|
}
|
|
230
252
|
|
|
231
253
|
// src/weaverse-client.ts
|
|
@@ -233,7 +255,7 @@ var import_hydrogen = require("@shopify/hydrogen");
|
|
|
233
255
|
|
|
234
256
|
// package.json
|
|
235
257
|
var package_default = {
|
|
236
|
-
version: "2.
|
|
258
|
+
version: "2.4.1",
|
|
237
259
|
license: "MIT",
|
|
238
260
|
main: "dist/index.js",
|
|
239
261
|
typings: "dist/index.d.ts",
|
|
@@ -266,13 +288,13 @@ var package_default = {
|
|
|
266
288
|
name: "@weaverse/hydrogen",
|
|
267
289
|
author: "Weaverse Team",
|
|
268
290
|
dependencies: {
|
|
269
|
-
"@remix-run/react": "1.19.1",
|
|
270
|
-
"@shopify/hydrogen": "2023.7.
|
|
271
|
-
"@weaverse/react": "2.
|
|
291
|
+
"@remix-run/react": "^1.19.1",
|
|
292
|
+
"@shopify/hydrogen": "^2023.7.13",
|
|
293
|
+
"@weaverse/react": "2.4.1",
|
|
272
294
|
"react-error-boundary": "^4.0.11"
|
|
273
295
|
},
|
|
274
296
|
devDependencies: {
|
|
275
|
-
"@shopify/remix-oxygen": "^1.1.
|
|
297
|
+
"@shopify/remix-oxygen": "^1.1.8"
|
|
276
298
|
}
|
|
277
299
|
};
|
|
278
300
|
|
|
@@ -296,6 +318,7 @@ function getWeaverseConfigs(request, env) {
|
|
|
296
318
|
PUBLIC_STOREFRONT_API_TOKEN
|
|
297
319
|
} = env || {};
|
|
298
320
|
let { weaverseProjectId, weaverseHost, isDesignMode, weaverseVersion } = queries;
|
|
321
|
+
console.log("\u{1F527} Weaverse configs", queries);
|
|
299
322
|
return {
|
|
300
323
|
projectId: weaverseProjectId || WEAVERSE_PROJECT_ID || "",
|
|
301
324
|
weaverseHost: weaverseHost || WEAVERSE_HOST || "https://weaverse.io",
|
|
@@ -309,6 +332,7 @@ function getWeaverseConfigs(request, env) {
|
|
|
309
332
|
}
|
|
310
333
|
|
|
311
334
|
// src/weaverse-client.ts
|
|
335
|
+
var CACHE_HITS_KEY = "https://weaverse.io/__CACHE_HITS_COUNT__";
|
|
312
336
|
var WeaverseClient = class {
|
|
313
337
|
API = "api/public/project";
|
|
314
338
|
clientVersion = package_default.version;
|
|
@@ -359,18 +383,44 @@ var WeaverseClient = class {
|
|
|
359
383
|
}
|
|
360
384
|
fetchWithCache = (url, options) => {
|
|
361
385
|
let cacheKey = [url, options.body];
|
|
362
|
-
let {
|
|
386
|
+
let {
|
|
387
|
+
strategy = this.storefront.CacheCustom({
|
|
388
|
+
maxAge: 5,
|
|
389
|
+
staleWhileRevalidate: 82800
|
|
390
|
+
}),
|
|
391
|
+
...reqInit
|
|
392
|
+
} = options;
|
|
363
393
|
let res = this.withCache(cacheKey, strategy, async () => {
|
|
364
394
|
let response = await fetch(url, reqInit);
|
|
365
395
|
if (!response.ok) {
|
|
366
396
|
let error = await response.text();
|
|
367
397
|
let { status, statusText } = response;
|
|
368
398
|
throw new Error(`${status} ${statusText} ${error}`);
|
|
399
|
+
} else {
|
|
400
|
+
if (!url.includes("/configs")) {
|
|
401
|
+
await this.resetCacheHits().catch(console.error);
|
|
402
|
+
}
|
|
369
403
|
}
|
|
370
404
|
return await response.json();
|
|
371
405
|
});
|
|
372
406
|
return res;
|
|
373
407
|
};
|
|
408
|
+
incrementCacheHits = async () => {
|
|
409
|
+
const currentHitsResponse = await this.cache.match(CACHE_HITS_KEY);
|
|
410
|
+
const currentHits = currentHitsResponse ? parseInt(await currentHitsResponse.text()) : 0;
|
|
411
|
+
const newHitsCount = currentHits + 1;
|
|
412
|
+
const newHitsResponse = new Response(newHitsCount.toString(), {
|
|
413
|
+
headers: {
|
|
414
|
+
"Cache-Control": "max-age=3600"
|
|
415
|
+
}
|
|
416
|
+
});
|
|
417
|
+
await this.cache.put(CACHE_HITS_KEY, newHitsResponse);
|
|
418
|
+
return newHitsCount.toString();
|
|
419
|
+
};
|
|
420
|
+
resetCacheHits = async () => {
|
|
421
|
+
const resetHitsResponse = new Response("0");
|
|
422
|
+
await this.cache.put(CACHE_HITS_KEY, resetHitsResponse);
|
|
423
|
+
};
|
|
374
424
|
loadThemeSettings = async (strategy) => {
|
|
375
425
|
try {
|
|
376
426
|
let { API, configs } = this;
|
|
@@ -380,9 +430,12 @@ var WeaverseClient = class {
|
|
|
380
430
|
}
|
|
381
431
|
let res;
|
|
382
432
|
if (isDesignMode) {
|
|
383
|
-
res = await fetch(
|
|
384
|
-
|
|
385
|
-
|
|
433
|
+
res = await fetch(
|
|
434
|
+
`${weaverseHost}/${API}/${projectId}/configs?isDesignMode=true`,
|
|
435
|
+
{
|
|
436
|
+
method: "POST"
|
|
437
|
+
}
|
|
438
|
+
).then((res2) => res2.json());
|
|
386
439
|
} else {
|
|
387
440
|
res = await this.fetchWithCache(
|
|
388
441
|
`${weaverseHost}/${API}/${projectId}/configs`,
|
|
@@ -394,7 +447,7 @@ var WeaverseClient = class {
|
|
|
394
447
|
let defaultThemeSettings = {};
|
|
395
448
|
this.themeSchema.inspector.forEach(({ inputs }) => {
|
|
396
449
|
inputs.forEach(({ name, defaultValue }) => {
|
|
397
|
-
if (
|
|
450
|
+
if (name && defaultValue) {
|
|
398
451
|
defaultThemeSettings[name] = defaultValue;
|
|
399
452
|
}
|
|
400
453
|
});
|
|
@@ -441,8 +494,16 @@ var WeaverseClient = class {
|
|
|
441
494
|
if (isDesignMode) {
|
|
442
495
|
payload = await fetch(url, reqInit).then((res) => res.json());
|
|
443
496
|
} else {
|
|
497
|
+
let cacheHitsToSend = await this.incrementCacheHits().catch(
|
|
498
|
+
console.error
|
|
499
|
+
);
|
|
500
|
+
let headers = {
|
|
501
|
+
"X-Cache-Hits": cacheHitsToSend || "0"
|
|
502
|
+
// Send cache hits as a custom header
|
|
503
|
+
};
|
|
444
504
|
payload = await this.fetchWithCache(url, {
|
|
445
505
|
...reqInit,
|
|
506
|
+
headers,
|
|
446
507
|
strategy
|
|
447
508
|
});
|
|
448
509
|
}
|
|
@@ -482,8 +543,8 @@ var WeaverseClient = class {
|
|
|
482
543
|
};
|
|
483
544
|
execComponentLoader = async (item) => {
|
|
484
545
|
let { data = {}, type, id } = item;
|
|
485
|
-
let
|
|
486
|
-
let { loader } =
|
|
546
|
+
let schema2 = this.components.find(({ schema: schema3 }) => schema3?.type === type);
|
|
547
|
+
let { loader } = schema2 || {};
|
|
487
548
|
if (loader && typeof loader === "function") {
|
|
488
549
|
try {
|
|
489
550
|
return {
|
|
@@ -512,7 +573,7 @@ function getSelectedProductOptions(request) {
|
|
|
512
573
|
}
|
|
513
574
|
|
|
514
575
|
// src/index.ts
|
|
515
|
-
var WeaverseHydrogen = class extends
|
|
576
|
+
var WeaverseHydrogen = class extends import_react13.Weaverse {
|
|
516
577
|
platformType = "shopify-hydrogen";
|
|
517
578
|
pageId;
|
|
518
579
|
internal;
|
|
@@ -524,22 +585,20 @@ var WeaverseHydrogen = class extends import_react12.Weaverse {
|
|
|
524
585
|
this.pageId = pageId;
|
|
525
586
|
this.requestInfo = requestInfo;
|
|
526
587
|
this.registerComponents(components);
|
|
588
|
+
this.registerComponents(defaultComponents);
|
|
527
589
|
}
|
|
528
|
-
|
|
529
|
-
super.registerElement(element);
|
|
530
|
-
}
|
|
531
|
-
registerComponents(components) {
|
|
590
|
+
registerComponents = (components) => {
|
|
532
591
|
components.forEach((comp) => {
|
|
533
|
-
|
|
592
|
+
import_react13.Weaverse.registerElement({
|
|
534
593
|
type: comp?.schema?.type,
|
|
535
594
|
Component: comp?.default,
|
|
536
595
|
schema: comp?.schema,
|
|
537
596
|
loader: comp?.loader
|
|
538
597
|
});
|
|
539
598
|
});
|
|
540
|
-
}
|
|
599
|
+
};
|
|
541
600
|
};
|
|
542
|
-
var WeaverseHydrogenItem = class extends
|
|
601
|
+
var WeaverseHydrogenItem = class extends import_react13.WeaverseItemStore {
|
|
543
602
|
constructor(initialData, weaverse) {
|
|
544
603
|
super(initialData, weaverse);
|
|
545
604
|
let { data, ...rest } = initialData;
|
|
@@ -549,7 +608,7 @@ var WeaverseHydrogenItem = class extends import_react12.WeaverseItemStore {
|
|
|
549
608
|
return super.Element;
|
|
550
609
|
}
|
|
551
610
|
get data() {
|
|
552
|
-
let defaultData = this.Element?.schema?.inspector?.flatMap((group) => group.inputs)
|
|
611
|
+
let defaultData = this.Element?.schema?.inspector?.flatMap((group) => group.inputs).reduce((a, { defaultValue, name }) => {
|
|
553
612
|
if (name && defaultValue !== null && defaultValue !== void 0) {
|
|
554
613
|
a[name] = defaultValue;
|
|
555
614
|
}
|
|
@@ -571,6 +630,8 @@ var WeaverseHydrogenItem = class extends import_react12.WeaverseItemStore {
|
|
|
571
630
|
getRequestQueries,
|
|
572
631
|
getSelectedProductOptions,
|
|
573
632
|
getWeaverseConfigs,
|
|
633
|
+
useItemInstance,
|
|
574
634
|
useThemeSettings,
|
|
635
|
+
useWeaverse,
|
|
575
636
|
withWeaverse
|
|
576
637
|
});
|
package/dist/index.mjs
CHANGED
|
@@ -1,13 +1,41 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __export = (target, all) => {
|
|
3
|
+
for (var name in all)
|
|
4
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
5
|
+
};
|
|
6
|
+
|
|
1
7
|
// src/index.ts
|
|
2
8
|
import {
|
|
3
9
|
Weaverse,
|
|
4
|
-
WeaverseItemStore
|
|
10
|
+
WeaverseItemStore,
|
|
11
|
+
useItemInstance,
|
|
12
|
+
useWeaverse
|
|
5
13
|
} from "@weaverse/react";
|
|
6
14
|
|
|
15
|
+
// src/components/main.tsx
|
|
16
|
+
var main_exports = {};
|
|
17
|
+
__export(main_exports, {
|
|
18
|
+
default: () => main_default,
|
|
19
|
+
schema: () => schema
|
|
20
|
+
});
|
|
21
|
+
import React, { forwardRef } from "react";
|
|
22
|
+
var Main = forwardRef((props, ref) => {
|
|
23
|
+
return /* @__PURE__ */ React.createElement("div", { ref, ...props });
|
|
24
|
+
});
|
|
25
|
+
var main_default = Main;
|
|
26
|
+
var schema = {
|
|
27
|
+
type: "main",
|
|
28
|
+
title: "Main",
|
|
29
|
+
inspector: []
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
// src/components/index.ts
|
|
33
|
+
var defaultComponents = [main_exports];
|
|
34
|
+
|
|
7
35
|
// src/WeaverseHydrogenRoot.tsx
|
|
8
36
|
import { Await, useLoaderData, useRouteLoaderData } from "@remix-run/react";
|
|
9
37
|
import { WeaverseRoot } from "@weaverse/react";
|
|
10
|
-
import
|
|
38
|
+
import React2, { memo, Suspense } from "react";
|
|
11
39
|
import { ErrorBoundary } from "react-error-boundary";
|
|
12
40
|
|
|
13
41
|
// src/context.ts
|
|
@@ -99,7 +127,7 @@ var ThemeSettingsStore = class _ThemeSettingsStore {
|
|
|
99
127
|
schema;
|
|
100
128
|
publicEnv;
|
|
101
129
|
constructor(data) {
|
|
102
|
-
let { theme, countries, schema, publicEnv } = data || {};
|
|
130
|
+
let { theme, countries, schema: schema2, publicEnv } = data || {};
|
|
103
131
|
if (isBrowser2 && _ThemeSettingsStore.settings) {
|
|
104
132
|
_ThemeSettingsStore.settings = {
|
|
105
133
|
...theme,
|
|
@@ -109,7 +137,7 @@ var ThemeSettingsStore = class _ThemeSettingsStore {
|
|
|
109
137
|
_ThemeSettingsStore.settings = theme || {};
|
|
110
138
|
}
|
|
111
139
|
this.countries = countries;
|
|
112
|
-
this.schema =
|
|
140
|
+
this.schema = schema2;
|
|
113
141
|
this.publicEnv = publicEnv;
|
|
114
142
|
}
|
|
115
143
|
updateThemeSettings = (newSettings) => {
|
|
@@ -157,13 +185,13 @@ var WeaverseHydrogenRoot = memo(
|
|
|
157
185
|
let data = loaderData?.weaverseData;
|
|
158
186
|
if (data) {
|
|
159
187
|
if (data instanceof Promise) {
|
|
160
|
-
return /* @__PURE__ */
|
|
161
|
-
return /* @__PURE__ */
|
|
188
|
+
return /* @__PURE__ */ React2.createElement(ErrorBoundary, { fallbackRender: ErrorComponent }, /* @__PURE__ */ React2.createElement(Suspense, null, /* @__PURE__ */ React2.createElement(Await, { resolve: data }, (resolvedData) => {
|
|
189
|
+
return /* @__PURE__ */ React2.createElement(RenderRoot, { data: resolvedData, components });
|
|
162
190
|
})));
|
|
163
191
|
}
|
|
164
|
-
return /* @__PURE__ */
|
|
192
|
+
return /* @__PURE__ */ React2.createElement(RenderRoot, { data, components });
|
|
165
193
|
}
|
|
166
|
-
return /* @__PURE__ */
|
|
194
|
+
return /* @__PURE__ */ React2.createElement(
|
|
167
195
|
ErrorComponent,
|
|
168
196
|
{
|
|
169
197
|
error: { message: "No Weaverse data return from route loader!" }
|
|
@@ -175,17 +203,17 @@ function RenderRoot(props) {
|
|
|
175
203
|
let { data, components } = props;
|
|
176
204
|
let weaverse = createWeaverseInstance(data, components);
|
|
177
205
|
useStudio(weaverse);
|
|
178
|
-
return /* @__PURE__ */
|
|
206
|
+
return /* @__PURE__ */ React2.createElement(WeaverseRoot, { context: weaverse });
|
|
179
207
|
}
|
|
180
208
|
function withWeaverse(Component) {
|
|
181
209
|
return (props) => {
|
|
182
210
|
let loaderData = useRouteLoaderData("root");
|
|
183
211
|
let themeSettingsStore = new ThemeSettingsStore(loaderData?.weaverseTheme);
|
|
184
|
-
return /* @__PURE__ */
|
|
212
|
+
return /* @__PURE__ */ React2.createElement(ThemeProvider.Provider, { value: themeSettingsStore }, /* @__PURE__ */ React2.createElement(Component, { ...props }));
|
|
185
213
|
};
|
|
186
214
|
}
|
|
187
215
|
function FallbackError({ error }) {
|
|
188
|
-
return /* @__PURE__ */
|
|
216
|
+
return /* @__PURE__ */ React2.createElement("div", null, error?.message || "An unexpected error occurred");
|
|
189
217
|
}
|
|
190
218
|
|
|
191
219
|
// src/weaverse-client.ts
|
|
@@ -193,7 +221,7 @@ import { createWithCache } from "@shopify/hydrogen";
|
|
|
193
221
|
|
|
194
222
|
// package.json
|
|
195
223
|
var package_default = {
|
|
196
|
-
version: "2.
|
|
224
|
+
version: "2.4.1",
|
|
197
225
|
license: "MIT",
|
|
198
226
|
main: "dist/index.js",
|
|
199
227
|
typings: "dist/index.d.ts",
|
|
@@ -226,13 +254,13 @@ var package_default = {
|
|
|
226
254
|
name: "@weaverse/hydrogen",
|
|
227
255
|
author: "Weaverse Team",
|
|
228
256
|
dependencies: {
|
|
229
|
-
"@remix-run/react": "1.19.1",
|
|
230
|
-
"@shopify/hydrogen": "2023.7.
|
|
231
|
-
"@weaverse/react": "2.
|
|
257
|
+
"@remix-run/react": "^1.19.1",
|
|
258
|
+
"@shopify/hydrogen": "^2023.7.13",
|
|
259
|
+
"@weaverse/react": "2.4.1",
|
|
232
260
|
"react-error-boundary": "^4.0.11"
|
|
233
261
|
},
|
|
234
262
|
devDependencies: {
|
|
235
|
-
"@shopify/remix-oxygen": "^1.1.
|
|
263
|
+
"@shopify/remix-oxygen": "^1.1.8"
|
|
236
264
|
}
|
|
237
265
|
};
|
|
238
266
|
|
|
@@ -256,6 +284,7 @@ function getWeaverseConfigs(request, env) {
|
|
|
256
284
|
PUBLIC_STOREFRONT_API_TOKEN
|
|
257
285
|
} = env || {};
|
|
258
286
|
let { weaverseProjectId, weaverseHost, isDesignMode, weaverseVersion } = queries;
|
|
287
|
+
console.log("\u{1F527} Weaverse configs", queries);
|
|
259
288
|
return {
|
|
260
289
|
projectId: weaverseProjectId || WEAVERSE_PROJECT_ID || "",
|
|
261
290
|
weaverseHost: weaverseHost || WEAVERSE_HOST || "https://weaverse.io",
|
|
@@ -269,6 +298,7 @@ function getWeaverseConfigs(request, env) {
|
|
|
269
298
|
}
|
|
270
299
|
|
|
271
300
|
// src/weaverse-client.ts
|
|
301
|
+
var CACHE_HITS_KEY = "https://weaverse.io/__CACHE_HITS_COUNT__";
|
|
272
302
|
var WeaverseClient = class {
|
|
273
303
|
API = "api/public/project";
|
|
274
304
|
clientVersion = package_default.version;
|
|
@@ -319,18 +349,44 @@ var WeaverseClient = class {
|
|
|
319
349
|
}
|
|
320
350
|
fetchWithCache = (url, options) => {
|
|
321
351
|
let cacheKey = [url, options.body];
|
|
322
|
-
let {
|
|
352
|
+
let {
|
|
353
|
+
strategy = this.storefront.CacheCustom({
|
|
354
|
+
maxAge: 5,
|
|
355
|
+
staleWhileRevalidate: 82800
|
|
356
|
+
}),
|
|
357
|
+
...reqInit
|
|
358
|
+
} = options;
|
|
323
359
|
let res = this.withCache(cacheKey, strategy, async () => {
|
|
324
360
|
let response = await fetch(url, reqInit);
|
|
325
361
|
if (!response.ok) {
|
|
326
362
|
let error = await response.text();
|
|
327
363
|
let { status, statusText } = response;
|
|
328
364
|
throw new Error(`${status} ${statusText} ${error}`);
|
|
365
|
+
} else {
|
|
366
|
+
if (!url.includes("/configs")) {
|
|
367
|
+
await this.resetCacheHits().catch(console.error);
|
|
368
|
+
}
|
|
329
369
|
}
|
|
330
370
|
return await response.json();
|
|
331
371
|
});
|
|
332
372
|
return res;
|
|
333
373
|
};
|
|
374
|
+
incrementCacheHits = async () => {
|
|
375
|
+
const currentHitsResponse = await this.cache.match(CACHE_HITS_KEY);
|
|
376
|
+
const currentHits = currentHitsResponse ? parseInt(await currentHitsResponse.text()) : 0;
|
|
377
|
+
const newHitsCount = currentHits + 1;
|
|
378
|
+
const newHitsResponse = new Response(newHitsCount.toString(), {
|
|
379
|
+
headers: {
|
|
380
|
+
"Cache-Control": "max-age=3600"
|
|
381
|
+
}
|
|
382
|
+
});
|
|
383
|
+
await this.cache.put(CACHE_HITS_KEY, newHitsResponse);
|
|
384
|
+
return newHitsCount.toString();
|
|
385
|
+
};
|
|
386
|
+
resetCacheHits = async () => {
|
|
387
|
+
const resetHitsResponse = new Response("0");
|
|
388
|
+
await this.cache.put(CACHE_HITS_KEY, resetHitsResponse);
|
|
389
|
+
};
|
|
334
390
|
loadThemeSettings = async (strategy) => {
|
|
335
391
|
try {
|
|
336
392
|
let { API, configs } = this;
|
|
@@ -340,9 +396,12 @@ var WeaverseClient = class {
|
|
|
340
396
|
}
|
|
341
397
|
let res;
|
|
342
398
|
if (isDesignMode) {
|
|
343
|
-
res = await fetch(
|
|
344
|
-
|
|
345
|
-
|
|
399
|
+
res = await fetch(
|
|
400
|
+
`${weaverseHost}/${API}/${projectId}/configs?isDesignMode=true`,
|
|
401
|
+
{
|
|
402
|
+
method: "POST"
|
|
403
|
+
}
|
|
404
|
+
).then((res2) => res2.json());
|
|
346
405
|
} else {
|
|
347
406
|
res = await this.fetchWithCache(
|
|
348
407
|
`${weaverseHost}/${API}/${projectId}/configs`,
|
|
@@ -354,7 +413,7 @@ var WeaverseClient = class {
|
|
|
354
413
|
let defaultThemeSettings = {};
|
|
355
414
|
this.themeSchema.inspector.forEach(({ inputs }) => {
|
|
356
415
|
inputs.forEach(({ name, defaultValue }) => {
|
|
357
|
-
if (
|
|
416
|
+
if (name && defaultValue) {
|
|
358
417
|
defaultThemeSettings[name] = defaultValue;
|
|
359
418
|
}
|
|
360
419
|
});
|
|
@@ -401,8 +460,16 @@ var WeaverseClient = class {
|
|
|
401
460
|
if (isDesignMode) {
|
|
402
461
|
payload = await fetch(url, reqInit).then((res) => res.json());
|
|
403
462
|
} else {
|
|
463
|
+
let cacheHitsToSend = await this.incrementCacheHits().catch(
|
|
464
|
+
console.error
|
|
465
|
+
);
|
|
466
|
+
let headers = {
|
|
467
|
+
"X-Cache-Hits": cacheHitsToSend || "0"
|
|
468
|
+
// Send cache hits as a custom header
|
|
469
|
+
};
|
|
404
470
|
payload = await this.fetchWithCache(url, {
|
|
405
471
|
...reqInit,
|
|
472
|
+
headers,
|
|
406
473
|
strategy
|
|
407
474
|
});
|
|
408
475
|
}
|
|
@@ -442,8 +509,8 @@ var WeaverseClient = class {
|
|
|
442
509
|
};
|
|
443
510
|
execComponentLoader = async (item) => {
|
|
444
511
|
let { data = {}, type, id } = item;
|
|
445
|
-
let
|
|
446
|
-
let { loader } =
|
|
512
|
+
let schema2 = this.components.find(({ schema: schema3 }) => schema3?.type === type);
|
|
513
|
+
let { loader } = schema2 || {};
|
|
447
514
|
if (loader && typeof loader === "function") {
|
|
448
515
|
try {
|
|
449
516
|
return {
|
|
@@ -484,20 +551,18 @@ var WeaverseHydrogen = class extends Weaverse {
|
|
|
484
551
|
this.pageId = pageId;
|
|
485
552
|
this.requestInfo = requestInfo;
|
|
486
553
|
this.registerComponents(components);
|
|
554
|
+
this.registerComponents(defaultComponents);
|
|
487
555
|
}
|
|
488
|
-
|
|
489
|
-
super.registerElement(element);
|
|
490
|
-
}
|
|
491
|
-
registerComponents(components) {
|
|
556
|
+
registerComponents = (components) => {
|
|
492
557
|
components.forEach((comp) => {
|
|
493
|
-
|
|
558
|
+
Weaverse.registerElement({
|
|
494
559
|
type: comp?.schema?.type,
|
|
495
560
|
Component: comp?.default,
|
|
496
561
|
schema: comp?.schema,
|
|
497
562
|
loader: comp?.loader
|
|
498
563
|
});
|
|
499
564
|
});
|
|
500
|
-
}
|
|
565
|
+
};
|
|
501
566
|
};
|
|
502
567
|
var WeaverseHydrogenItem = class extends WeaverseItemStore {
|
|
503
568
|
constructor(initialData, weaverse) {
|
|
@@ -509,7 +574,7 @@ var WeaverseHydrogenItem = class extends WeaverseItemStore {
|
|
|
509
574
|
return super.Element;
|
|
510
575
|
}
|
|
511
576
|
get data() {
|
|
512
|
-
let defaultData = this.Element?.schema?.inspector?.flatMap((group) => group.inputs)
|
|
577
|
+
let defaultData = this.Element?.schema?.inspector?.flatMap((group) => group.inputs).reduce((a, { defaultValue, name }) => {
|
|
513
578
|
if (name && defaultValue !== null && defaultValue !== void 0) {
|
|
514
579
|
a[name] = defaultValue;
|
|
515
580
|
}
|
|
@@ -530,6 +595,8 @@ export {
|
|
|
530
595
|
getRequestQueries,
|
|
531
596
|
getSelectedProductOptions,
|
|
532
597
|
getWeaverseConfigs,
|
|
598
|
+
useItemInstance,
|
|
533
599
|
useThemeSettings,
|
|
600
|
+
useWeaverse,
|
|
534
601
|
withWeaverse
|
|
535
602
|
};
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2.
|
|
2
|
+
"version": "2.4.1",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"typings": "dist/index.d.ts",
|
|
@@ -32,12 +32,12 @@
|
|
|
32
32
|
"name": "@weaverse/hydrogen",
|
|
33
33
|
"author": "Weaverse Team",
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@remix-run/react": "1.19.1",
|
|
36
|
-
"@shopify/hydrogen": "2023.7.
|
|
37
|
-
"@weaverse/react": "2.
|
|
35
|
+
"@remix-run/react": "^1.19.1",
|
|
36
|
+
"@shopify/hydrogen": "^2023.7.13",
|
|
37
|
+
"@weaverse/react": "2.4.1",
|
|
38
38
|
"react-error-boundary": "^4.0.11"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@shopify/remix-oxygen": "^1.1.
|
|
41
|
+
"@shopify/remix-oxygen": "^1.1.8"
|
|
42
42
|
}
|
|
43
43
|
}
|