@weaverse/hydrogen 1.1.3 → 1.1.5
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 +30 -25
- package/dist/index.d.ts +30 -25
- package/dist/index.js +115 -176
- package/dist/index.mjs +113 -174
- package/package.json +2 -2
package/dist/index.d.mts
CHANGED
|
@@ -2,6 +2,7 @@ import React, { ForwardRefExoticComponent } from 'react';
|
|
|
2
2
|
import { LoaderArgs, AppLoadContext } from '@shopify/remix-oxygen';
|
|
3
3
|
import { ElementData, ElementSchema, BasicInput, WeaverseElement, Weaverse, WeaverseItemStore } from '@weaverse/react';
|
|
4
4
|
export * from '@weaverse/react';
|
|
5
|
+
import { LanguageCode, CountryCode, CurrencyCode } from '@shopify/hydrogen/storefront-api-types';
|
|
5
6
|
import * as _shopify_hydrogen_react_storefront_api_types from '@shopify/hydrogen-react/storefront-api-types';
|
|
6
7
|
|
|
7
8
|
declare let STORE_PAGES: {
|
|
@@ -21,6 +22,13 @@ declare let STORE_PAGES: {
|
|
|
21
22
|
CUSTOM: string;
|
|
22
23
|
};
|
|
23
24
|
|
|
25
|
+
type Locale = {
|
|
26
|
+
language: LanguageCode;
|
|
27
|
+
country: CountryCode;
|
|
28
|
+
label: string;
|
|
29
|
+
currency: CurrencyCode;
|
|
30
|
+
};
|
|
31
|
+
type Localizations = Record<string, Locale>;
|
|
24
32
|
type TODO = any;
|
|
25
33
|
declare module '@shopify/remix-oxygen' {
|
|
26
34
|
interface AppLoadContext {
|
|
@@ -29,6 +37,7 @@ declare module '@shopify/remix-oxygen' {
|
|
|
29
37
|
storefront: TODO;
|
|
30
38
|
env: TODO;
|
|
31
39
|
cart: TODO;
|
|
40
|
+
withCache?: TODO;
|
|
32
41
|
}
|
|
33
42
|
}
|
|
34
43
|
type WeaverseLoaderArgs = LoaderArgs & {
|
|
@@ -70,11 +79,7 @@ interface HydrogenComponentProps<L = any> extends WeaverseElement {
|
|
|
70
79
|
loaderData?: L;
|
|
71
80
|
children?: React.JSX.Element[];
|
|
72
81
|
}
|
|
73
|
-
type I18nLocale = {
|
|
74
|
-
country: string;
|
|
75
|
-
currency: string;
|
|
76
|
-
language: string;
|
|
77
|
-
label: string;
|
|
82
|
+
type I18nLocale = Locale & {
|
|
78
83
|
pathPrefix: string;
|
|
79
84
|
};
|
|
80
85
|
type WeaverseLoaderRequestInfo = {
|
|
@@ -108,8 +113,12 @@ type HydrogenProjectType = {
|
|
|
108
113
|
config: HydrogenProjectConfig;
|
|
109
114
|
[key: string]: any;
|
|
110
115
|
};
|
|
116
|
+
type WeaverseThemeConfigs = {
|
|
117
|
+
schema: HydrogenThemeSchema;
|
|
118
|
+
countries: Localizations;
|
|
119
|
+
};
|
|
111
120
|
type WeaverseInternal = {
|
|
112
|
-
|
|
121
|
+
themeConfigs: WeaverseThemeConfigs;
|
|
113
122
|
pageAssignment: HydrogenPageAssignment;
|
|
114
123
|
project: HydrogenProjectType;
|
|
115
124
|
navigate: NavigateFunction;
|
|
@@ -166,17 +175,8 @@ type HydrogenPageData = {
|
|
|
166
175
|
type RelativeRoutingType = 'route' | 'path';
|
|
167
176
|
type To = string | Partial<Path>;
|
|
168
177
|
type Path = {
|
|
169
|
-
/**
|
|
170
|
-
* A URL pathname, beginning with a /.
|
|
171
|
-
*/
|
|
172
178
|
pathname: string;
|
|
173
|
-
/**
|
|
174
|
-
* A URL search string, beginning with a ?.
|
|
175
|
-
*/
|
|
176
179
|
search: string;
|
|
177
|
-
/**
|
|
178
|
-
* A URL fragment identifier, beginning with a #.
|
|
179
|
-
*/
|
|
180
180
|
hash: string;
|
|
181
181
|
};
|
|
182
182
|
type NavigateOptions = {
|
|
@@ -188,6 +188,8 @@ type NavigateOptions = {
|
|
|
188
188
|
type NavigateFunction = (to: To, options?: NavigateOptions) => void;
|
|
189
189
|
interface WeaverseHydrogenRootProps {
|
|
190
190
|
components: HydrogenComponent[];
|
|
191
|
+
countries: Localizations;
|
|
192
|
+
themeSchema: HydrogenThemeSchema;
|
|
191
193
|
errorComponent: React.FC<{
|
|
192
194
|
error: {
|
|
193
195
|
message: string;
|
|
@@ -213,11 +215,17 @@ type WeaverseLoaderConfigs = {
|
|
|
213
215
|
locale?: string;
|
|
214
216
|
handle?: string;
|
|
215
217
|
};
|
|
218
|
+
type FetchProjectRequestBody = {
|
|
219
|
+
projectId: string;
|
|
220
|
+
url: string;
|
|
221
|
+
countries: Localizations;
|
|
222
|
+
i18n?: I18nLocale;
|
|
223
|
+
loaderConfigs?: WeaverseLoaderConfigs;
|
|
224
|
+
};
|
|
216
225
|
declare global {
|
|
217
226
|
interface Window {
|
|
218
227
|
__weaverse: WeaverseHydrogen;
|
|
219
228
|
__weaverses: WeaverseHydrogen[];
|
|
220
|
-
__weaverseHydrogenThemeSchema: HydrogenThemeSchema;
|
|
221
229
|
}
|
|
222
230
|
}
|
|
223
231
|
|
|
@@ -231,17 +239,14 @@ type FetchWithServerCacheParams = {
|
|
|
231
239
|
*/
|
|
232
240
|
declare function fetchWithServerCache(params: FetchWithServerCacheParams): Promise<any>;
|
|
233
241
|
|
|
234
|
-
declare function
|
|
242
|
+
declare function weaverseLoader(args: LoaderArgs, components: HydrogenComponent[], countries: Localizations, loaderConfigs?: WeaverseLoaderConfigs): Promise<WeaverseLoaderData | null>;
|
|
235
243
|
|
|
236
|
-
declare function
|
|
244
|
+
declare function getRequestQueries<T = Record<string, string | boolean>>(request: Request): T;
|
|
237
245
|
|
|
238
|
-
declare function
|
|
246
|
+
declare function getSelectedProductOptions(request: Request): _shopify_hydrogen_react_storefront_api_types.SelectedOptionInput[];
|
|
239
247
|
|
|
240
|
-
|
|
241
|
-
themeSchema: HydrogenThemeSchema;
|
|
242
|
-
};
|
|
243
|
-
declare function HydrogenStudio({ themeSchema }: StudioProps): React.JSX.Element | null;
|
|
248
|
+
declare function useThemeSettings(): (Record<string, any> | ((newSettings: any) => void))[];
|
|
244
249
|
|
|
245
|
-
declare function WeaverseHydrogenRoot({
|
|
250
|
+
declare function WeaverseHydrogenRoot({ errorComponent: ErrorComponent, ...themeConfigs }: WeaverseHydrogenRootProps): React.JSX.Element;
|
|
246
251
|
|
|
247
|
-
export { HydrogenComponent, HydrogenComponentData, HydrogenComponentInstance, HydrogenComponentPresets, HydrogenComponentProps, HydrogenComponentSchema, HydrogenElement, HydrogenPageAssignment, HydrogenPageConfigs, HydrogenPageData, HydrogenProjectConfig, HydrogenProjectType,
|
|
252
|
+
export { FetchProjectRequestBody, HydrogenComponent, HydrogenComponentData, HydrogenComponentInstance, HydrogenComponentPresets, HydrogenComponentProps, HydrogenComponentSchema, HydrogenElement, HydrogenPageAssignment, HydrogenPageConfigs, HydrogenPageData, HydrogenProjectConfig, HydrogenProjectType, HydrogenThemeInfo, HydrogenThemeSchema, HydrogenToolbarAction, I18nLocale, InspectorGroup, Locale, Localizations, NavigateFunction, PageType, TODO, WeaverseHydrogen, WeaverseHydrogenRoot, WeaverseHydrogenRootProps, WeaverseInternal, WeaverseLoaderArgs, WeaverseLoaderConfigs, WeaverseLoaderData, WeaverseLoaderRequestInfo, WeaverseStorefrontData, WeaverseThemeConfigs, fetchWithServerCache, getRequestQueries, getSelectedProductOptions, useThemeSettings, weaverseLoader };
|
package/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import React, { ForwardRefExoticComponent } from 'react';
|
|
|
2
2
|
import { LoaderArgs, AppLoadContext } from '@shopify/remix-oxygen';
|
|
3
3
|
import { ElementData, ElementSchema, BasicInput, WeaverseElement, Weaverse, WeaverseItemStore } from '@weaverse/react';
|
|
4
4
|
export * from '@weaverse/react';
|
|
5
|
+
import { LanguageCode, CountryCode, CurrencyCode } from '@shopify/hydrogen/storefront-api-types';
|
|
5
6
|
import * as _shopify_hydrogen_react_storefront_api_types from '@shopify/hydrogen-react/storefront-api-types';
|
|
6
7
|
|
|
7
8
|
declare let STORE_PAGES: {
|
|
@@ -21,6 +22,13 @@ declare let STORE_PAGES: {
|
|
|
21
22
|
CUSTOM: string;
|
|
22
23
|
};
|
|
23
24
|
|
|
25
|
+
type Locale = {
|
|
26
|
+
language: LanguageCode;
|
|
27
|
+
country: CountryCode;
|
|
28
|
+
label: string;
|
|
29
|
+
currency: CurrencyCode;
|
|
30
|
+
};
|
|
31
|
+
type Localizations = Record<string, Locale>;
|
|
24
32
|
type TODO = any;
|
|
25
33
|
declare module '@shopify/remix-oxygen' {
|
|
26
34
|
interface AppLoadContext {
|
|
@@ -29,6 +37,7 @@ declare module '@shopify/remix-oxygen' {
|
|
|
29
37
|
storefront: TODO;
|
|
30
38
|
env: TODO;
|
|
31
39
|
cart: TODO;
|
|
40
|
+
withCache?: TODO;
|
|
32
41
|
}
|
|
33
42
|
}
|
|
34
43
|
type WeaverseLoaderArgs = LoaderArgs & {
|
|
@@ -70,11 +79,7 @@ interface HydrogenComponentProps<L = any> extends WeaverseElement {
|
|
|
70
79
|
loaderData?: L;
|
|
71
80
|
children?: React.JSX.Element[];
|
|
72
81
|
}
|
|
73
|
-
type I18nLocale = {
|
|
74
|
-
country: string;
|
|
75
|
-
currency: string;
|
|
76
|
-
language: string;
|
|
77
|
-
label: string;
|
|
82
|
+
type I18nLocale = Locale & {
|
|
78
83
|
pathPrefix: string;
|
|
79
84
|
};
|
|
80
85
|
type WeaverseLoaderRequestInfo = {
|
|
@@ -108,8 +113,12 @@ type HydrogenProjectType = {
|
|
|
108
113
|
config: HydrogenProjectConfig;
|
|
109
114
|
[key: string]: any;
|
|
110
115
|
};
|
|
116
|
+
type WeaverseThemeConfigs = {
|
|
117
|
+
schema: HydrogenThemeSchema;
|
|
118
|
+
countries: Localizations;
|
|
119
|
+
};
|
|
111
120
|
type WeaverseInternal = {
|
|
112
|
-
|
|
121
|
+
themeConfigs: WeaverseThemeConfigs;
|
|
113
122
|
pageAssignment: HydrogenPageAssignment;
|
|
114
123
|
project: HydrogenProjectType;
|
|
115
124
|
navigate: NavigateFunction;
|
|
@@ -166,17 +175,8 @@ type HydrogenPageData = {
|
|
|
166
175
|
type RelativeRoutingType = 'route' | 'path';
|
|
167
176
|
type To = string | Partial<Path>;
|
|
168
177
|
type Path = {
|
|
169
|
-
/**
|
|
170
|
-
* A URL pathname, beginning with a /.
|
|
171
|
-
*/
|
|
172
178
|
pathname: string;
|
|
173
|
-
/**
|
|
174
|
-
* A URL search string, beginning with a ?.
|
|
175
|
-
*/
|
|
176
179
|
search: string;
|
|
177
|
-
/**
|
|
178
|
-
* A URL fragment identifier, beginning with a #.
|
|
179
|
-
*/
|
|
180
180
|
hash: string;
|
|
181
181
|
};
|
|
182
182
|
type NavigateOptions = {
|
|
@@ -188,6 +188,8 @@ type NavigateOptions = {
|
|
|
188
188
|
type NavigateFunction = (to: To, options?: NavigateOptions) => void;
|
|
189
189
|
interface WeaverseHydrogenRootProps {
|
|
190
190
|
components: HydrogenComponent[];
|
|
191
|
+
countries: Localizations;
|
|
192
|
+
themeSchema: HydrogenThemeSchema;
|
|
191
193
|
errorComponent: React.FC<{
|
|
192
194
|
error: {
|
|
193
195
|
message: string;
|
|
@@ -213,11 +215,17 @@ type WeaverseLoaderConfigs = {
|
|
|
213
215
|
locale?: string;
|
|
214
216
|
handle?: string;
|
|
215
217
|
};
|
|
218
|
+
type FetchProjectRequestBody = {
|
|
219
|
+
projectId: string;
|
|
220
|
+
url: string;
|
|
221
|
+
countries: Localizations;
|
|
222
|
+
i18n?: I18nLocale;
|
|
223
|
+
loaderConfigs?: WeaverseLoaderConfigs;
|
|
224
|
+
};
|
|
216
225
|
declare global {
|
|
217
226
|
interface Window {
|
|
218
227
|
__weaverse: WeaverseHydrogen;
|
|
219
228
|
__weaverses: WeaverseHydrogen[];
|
|
220
|
-
__weaverseHydrogenThemeSchema: HydrogenThemeSchema;
|
|
221
229
|
}
|
|
222
230
|
}
|
|
223
231
|
|
|
@@ -231,17 +239,14 @@ type FetchWithServerCacheParams = {
|
|
|
231
239
|
*/
|
|
232
240
|
declare function fetchWithServerCache(params: FetchWithServerCacheParams): Promise<any>;
|
|
233
241
|
|
|
234
|
-
declare function
|
|
242
|
+
declare function weaverseLoader(args: LoaderArgs, components: HydrogenComponent[], countries: Localizations, loaderConfigs?: WeaverseLoaderConfigs): Promise<WeaverseLoaderData | null>;
|
|
235
243
|
|
|
236
|
-
declare function
|
|
244
|
+
declare function getRequestQueries<T = Record<string, string | boolean>>(request: Request): T;
|
|
237
245
|
|
|
238
|
-
declare function
|
|
246
|
+
declare function getSelectedProductOptions(request: Request): _shopify_hydrogen_react_storefront_api_types.SelectedOptionInput[];
|
|
239
247
|
|
|
240
|
-
|
|
241
|
-
themeSchema: HydrogenThemeSchema;
|
|
242
|
-
};
|
|
243
|
-
declare function HydrogenStudio({ themeSchema }: StudioProps): React.JSX.Element | null;
|
|
248
|
+
declare function useThemeSettings(): (Record<string, any> | ((newSettings: any) => void))[];
|
|
244
249
|
|
|
245
|
-
declare function WeaverseHydrogenRoot({
|
|
250
|
+
declare function WeaverseHydrogenRoot({ errorComponent: ErrorComponent, ...themeConfigs }: WeaverseHydrogenRootProps): React.JSX.Element;
|
|
246
251
|
|
|
247
|
-
export { HydrogenComponent, HydrogenComponentData, HydrogenComponentInstance, HydrogenComponentPresets, HydrogenComponentProps, HydrogenComponentSchema, HydrogenElement, HydrogenPageAssignment, HydrogenPageConfigs, HydrogenPageData, HydrogenProjectConfig, HydrogenProjectType,
|
|
252
|
+
export { FetchProjectRequestBody, HydrogenComponent, HydrogenComponentData, HydrogenComponentInstance, HydrogenComponentPresets, HydrogenComponentProps, HydrogenComponentSchema, HydrogenElement, HydrogenPageAssignment, HydrogenPageConfigs, HydrogenPageData, HydrogenProjectConfig, HydrogenProjectType, HydrogenThemeInfo, HydrogenThemeSchema, HydrogenToolbarAction, I18nLocale, InspectorGroup, Locale, Localizations, NavigateFunction, PageType, TODO, WeaverseHydrogen, WeaverseHydrogenRoot, WeaverseHydrogenRootProps, WeaverseInternal, WeaverseLoaderArgs, WeaverseLoaderConfigs, WeaverseLoaderData, WeaverseLoaderRequestInfo, WeaverseStorefrontData, WeaverseThemeConfigs, fetchWithServerCache, getRequestQueries, getSelectedProductOptions, useThemeSettings, weaverseLoader };
|
package/dist/index.js
CHANGED
|
@@ -31,17 +31,17 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
31
31
|
// src/index.tsx
|
|
32
32
|
var src_exports = {};
|
|
33
33
|
__export(src_exports, {
|
|
34
|
-
HydrogenStudio: () => HydrogenStudio,
|
|
35
34
|
WeaverseHydrogenRoot: () => WeaverseHydrogenRoot,
|
|
36
35
|
fetchWithServerCache: () => fetchWithServerCache,
|
|
36
|
+
getRequestQueries: () => getRequestQueries,
|
|
37
37
|
getSelectedProductOptions: () => getSelectedProductOptions,
|
|
38
38
|
useThemeSettings: () => useThemeSettings,
|
|
39
39
|
weaverseLoader: () => weaverseLoader
|
|
40
40
|
});
|
|
41
41
|
module.exports = __toCommonJS(src_exports);
|
|
42
|
-
var
|
|
43
|
-
var
|
|
44
|
-
var
|
|
42
|
+
var import_react6 = require("@remix-run/react");
|
|
43
|
+
var import_react7 = require("@weaverse/react");
|
|
44
|
+
var import_react8 = __toESM(require("react"));
|
|
45
45
|
var import_react_error_boundary = require("react-error-boundary");
|
|
46
46
|
|
|
47
47
|
// src/context.ts
|
|
@@ -70,10 +70,9 @@ function createWeaverseInstance(weaverseData, components) {
|
|
|
70
70
|
...configs,
|
|
71
71
|
data: page || {},
|
|
72
72
|
pageId: page?.id,
|
|
73
|
-
platformType: "shopify-hydrogen"
|
|
73
|
+
platformType: "shopify-hydrogen",
|
|
74
|
+
internal: { project, pageAssignment }
|
|
74
75
|
});
|
|
75
|
-
weaverse.internal.project = project;
|
|
76
|
-
weaverse.internal.pageAssignment = pageAssignment;
|
|
77
76
|
components.forEach((comp) => {
|
|
78
77
|
weaverse.registerElement({
|
|
79
78
|
type: comp?.schema?.type,
|
|
@@ -88,19 +87,26 @@ function createWeaverseInstance(weaverseData, components) {
|
|
|
88
87
|
var import_react2 = require("@remix-run/react");
|
|
89
88
|
var import_react3 = require("@weaverse/react");
|
|
90
89
|
var import_react4 = require("react");
|
|
91
|
-
function useStudio(weaverse) {
|
|
90
|
+
function useStudio(weaverse, countries, schema) {
|
|
92
91
|
let navigate = (0, import_react2.useNavigate)();
|
|
93
92
|
let revalidator = (0, import_react2.useRevalidator)();
|
|
93
|
+
let { isDesignMode, weaverseHost, weaverseVersion } = weaverse;
|
|
94
|
+
let isStudio = import_react3.isIframe && isDesignMode && weaverseHost && weaverseVersion;
|
|
94
95
|
(0, import_react4.useEffect)(() => {
|
|
95
|
-
if (
|
|
96
|
+
if (isStudio) {
|
|
96
97
|
weaverse.internal = {
|
|
97
98
|
...weaverse.internal,
|
|
98
99
|
navigate,
|
|
99
|
-
revalidator
|
|
100
|
+
revalidator,
|
|
101
|
+
themeConfigs: { schema, countries }
|
|
100
102
|
};
|
|
101
103
|
window.__weaverse = weaverse;
|
|
102
104
|
if (window.weaverseStudio) {
|
|
103
105
|
window.weaverseStudio.init(weaverse);
|
|
106
|
+
} else {
|
|
107
|
+
(0, import_react3.loadScript)(
|
|
108
|
+
`${weaverseHost}/assets/studio/hydrogen/index.js?v=${weaverseVersion}`
|
|
109
|
+
);
|
|
104
110
|
}
|
|
105
111
|
}
|
|
106
112
|
}, [weaverse]);
|
|
@@ -111,26 +117,21 @@ __reExport(src_exports, require("@weaverse/react"), module.exports);
|
|
|
111
117
|
|
|
112
118
|
// src/fetch.ts
|
|
113
119
|
var import_hydrogen = require("@shopify/hydrogen");
|
|
120
|
+
async function fetchWithServerCache(params) {
|
|
121
|
+
let { url, options = {}, context } = params;
|
|
122
|
+
let { storefront } = context;
|
|
123
|
+
let withCache = (0, import_hydrogen.createWithCache)(storefront);
|
|
124
|
+
let cacheKey = [url, options.body];
|
|
125
|
+
let data = await withCache(cacheKey, storefront.CacheShort(), async () => {
|
|
126
|
+
let response = await fetch(url, options);
|
|
127
|
+
if (!response.ok)
|
|
128
|
+
throw new Error("Something went wrong. Skipping cache.");
|
|
129
|
+
return await response.json();
|
|
130
|
+
});
|
|
131
|
+
return data;
|
|
132
|
+
}
|
|
114
133
|
|
|
115
134
|
// src/utils.ts
|
|
116
|
-
function hashKey(queryKey) {
|
|
117
|
-
const rawKeys = Array.isArray(queryKey) ? queryKey : [queryKey];
|
|
118
|
-
let hash = "";
|
|
119
|
-
for (const key of rawKeys) {
|
|
120
|
-
if (key != null) {
|
|
121
|
-
if (typeof key === "object") {
|
|
122
|
-
if (!!key.body && typeof key.body === "string") {
|
|
123
|
-
hash += key.body;
|
|
124
|
-
} else {
|
|
125
|
-
hash += JSON.stringify(key);
|
|
126
|
-
}
|
|
127
|
-
} else {
|
|
128
|
-
hash += key;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
return hash;
|
|
133
|
-
}
|
|
134
135
|
function getRequestQueries(request) {
|
|
135
136
|
let url = new URL(request.url);
|
|
136
137
|
return Array.from(url.searchParams.entries()).reduce(
|
|
@@ -142,65 +143,14 @@ function getRequestQueries(request) {
|
|
|
142
143
|
);
|
|
143
144
|
}
|
|
144
145
|
|
|
145
|
-
// src/fetch.ts
|
|
146
|
-
var cacheControl = (0, import_hydrogen.generateCacheControlHeader)((0, import_hydrogen.CacheShort)());
|
|
147
|
-
async function fetchWithServerCache(params) {
|
|
148
|
-
let { url, options = {}, context } = params;
|
|
149
|
-
let { storefront, waitUntil } = context;
|
|
150
|
-
if (!storefront?.cache || !waitUntil) {
|
|
151
|
-
return fetch(url, options);
|
|
152
|
-
}
|
|
153
|
-
let cacheUrl = new URL(url);
|
|
154
|
-
cacheUrl.pathname = "/cache" + cacheUrl.pathname + hashKey([options.body]);
|
|
155
|
-
let cacheKey = new Request(cacheUrl.toString());
|
|
156
|
-
let response = await storefront.cache.match(cacheKey);
|
|
157
|
-
if (!response) {
|
|
158
|
-
response = await fetch(url, {
|
|
159
|
-
...options,
|
|
160
|
-
headers: {
|
|
161
|
-
"cache-control": cacheControl,
|
|
162
|
-
...options.headers
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
|
-
waitUntil?.(storefront.cache.put(cacheKey, response.clone()));
|
|
166
|
-
}
|
|
167
|
-
return response;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
// src/hooks/use-theme-settings.ts
|
|
171
|
-
var import_react5 = require("@weaverse/react");
|
|
172
|
-
function useThemeSettings() {
|
|
173
|
-
let weaverse = (0, import_react5.useWeaverse)();
|
|
174
|
-
let settings = weaverse?.internal?.project?.config?.theme;
|
|
175
|
-
let updateSettings = (newSettings) => {
|
|
176
|
-
weaverse.internal.project.config.theme = Object.assign(
|
|
177
|
-
{},
|
|
178
|
-
settings,
|
|
179
|
-
newSettings
|
|
180
|
-
);
|
|
181
|
-
weaverse.triggerUpdate();
|
|
182
|
-
};
|
|
183
|
-
return [settings, updateSettings];
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
// src/hydrogen-wrappers.ts
|
|
187
|
-
var import_hydrogen2 = require("@shopify/hydrogen");
|
|
188
|
-
function getSelectedProductOptions(request) {
|
|
189
|
-
let options = (0, import_hydrogen2.getSelectedProductOptions)(request);
|
|
190
|
-
return options.filter(
|
|
191
|
-
({ name }) => name !== "isDesignMode" && !name.startsWith("weaverse")
|
|
192
|
-
);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
146
|
// src/loader.ts
|
|
196
|
-
async function weaverseLoader(args, components, loaderConfigs) {
|
|
147
|
+
async function weaverseLoader(args, components, countries, loaderConfigs) {
|
|
197
148
|
return new Promise(async (resolve, reject) => {
|
|
198
149
|
try {
|
|
199
150
|
let { request, context, params } = args;
|
|
200
|
-
let i18n = context?.storefront?.i18n;
|
|
201
151
|
let queries = getRequestQueries(request);
|
|
202
152
|
let { WEAVERSE_PROJECT_ID, WEAVERSE_HOST } = context?.env || {};
|
|
203
|
-
let { weaverseProjectId, weaverseHost
|
|
153
|
+
let { weaverseProjectId, weaverseHost } = queries;
|
|
204
154
|
let projectId = weaverseProjectId || WEAVERSE_PROJECT_ID;
|
|
205
155
|
weaverseHost = weaverseHost || WEAVERSE_HOST || "https://weaverse.io";
|
|
206
156
|
if (!projectId) {
|
|
@@ -208,33 +158,19 @@ async function weaverseLoader(args, components, loaderConfigs) {
|
|
|
208
158
|
`Missing Weaverse project's id. Try adding WEAVERSE_PROJECT_ID to your .env file then restart the server.`
|
|
209
159
|
);
|
|
210
160
|
}
|
|
211
|
-
let
|
|
161
|
+
let i18n = context?.storefront?.i18n;
|
|
162
|
+
let reqBody = {
|
|
163
|
+
i18n,
|
|
164
|
+
countries,
|
|
212
165
|
projectId,
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
isDesignMode,
|
|
216
|
-
requestInfo: {
|
|
217
|
-
i18n,
|
|
218
|
-
params,
|
|
219
|
-
queries,
|
|
220
|
-
pathname: new URL(request.url).pathname,
|
|
221
|
-
search: new URL(request.url).search
|
|
222
|
-
}
|
|
166
|
+
loaderConfigs,
|
|
167
|
+
url: request.url
|
|
223
168
|
};
|
|
224
|
-
let
|
|
169
|
+
let payload = await fetchWithServerCache({
|
|
225
170
|
url: `${weaverseHost}/api/public/project`,
|
|
226
|
-
options: {
|
|
227
|
-
method: "POST",
|
|
228
|
-
body: JSON.stringify({
|
|
229
|
-
i18n,
|
|
230
|
-
projectId,
|
|
231
|
-
loaderConfigs,
|
|
232
|
-
url: request.url
|
|
233
|
-
})
|
|
234
|
-
},
|
|
171
|
+
options: { method: "POST", body: JSON.stringify(reqBody) },
|
|
235
172
|
context
|
|
236
173
|
});
|
|
237
|
-
let payload = await res.json();
|
|
238
174
|
let { page, project, pageAssignment } = payload;
|
|
239
175
|
if (!page || !project || !pageAssignment) {
|
|
240
176
|
throw new Error(
|
|
@@ -242,30 +178,22 @@ async function weaverseLoader(args, components, loaderConfigs) {
|
|
|
242
178
|
payload?.error || "Invalid Weaverse project payload!"
|
|
243
179
|
);
|
|
244
180
|
}
|
|
181
|
+
let configs = {
|
|
182
|
+
projectId,
|
|
183
|
+
weaverseHost,
|
|
184
|
+
weaverseVersion: queries.weaverseVersion,
|
|
185
|
+
isDesignMode: queries.isDesignMode,
|
|
186
|
+
requestInfo: {
|
|
187
|
+
i18n,
|
|
188
|
+
params,
|
|
189
|
+
queries,
|
|
190
|
+
pathname: new URL(request.url).pathname,
|
|
191
|
+
search: new URL(request.url).search
|
|
192
|
+
}
|
|
193
|
+
};
|
|
245
194
|
if (page?.items) {
|
|
246
195
|
let items = page.items;
|
|
247
|
-
page.items = await
|
|
248
|
-
items.map(async (itemData) => {
|
|
249
|
-
let type = itemData.type;
|
|
250
|
-
let { loader } = components.find(({ schema }) => schema?.type === type) || {};
|
|
251
|
-
if (loader && typeof loader === "function") {
|
|
252
|
-
try {
|
|
253
|
-
return {
|
|
254
|
-
...itemData,
|
|
255
|
-
loaderData: await loader({
|
|
256
|
-
itemData,
|
|
257
|
-
configs,
|
|
258
|
-
...args
|
|
259
|
-
})
|
|
260
|
-
};
|
|
261
|
-
} catch (err) {
|
|
262
|
-
console.log(`\u274C Loader run failed! Item: ${itemData}: ${err}`);
|
|
263
|
-
return itemData;
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
return itemData;
|
|
267
|
-
})
|
|
268
|
-
);
|
|
196
|
+
page.items = await withLoaderData(items, components, configs, args);
|
|
269
197
|
}
|
|
270
198
|
resolve({ page, configs, project, pageAssignment });
|
|
271
199
|
} catch (err) {
|
|
@@ -274,67 +202,78 @@ async function weaverseLoader(args, components, loaderConfigs) {
|
|
|
274
202
|
}
|
|
275
203
|
});
|
|
276
204
|
}
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
205
|
+
async function withLoaderData(items, components, configs, args) {
|
|
206
|
+
return await Promise.all(
|
|
207
|
+
items.map(async (itemData) => {
|
|
208
|
+
let type = itemData.type;
|
|
209
|
+
let { loader } = components.find(({ schema }) => schema?.type === type) || {};
|
|
210
|
+
if (loader && typeof loader === "function") {
|
|
211
|
+
try {
|
|
212
|
+
return {
|
|
213
|
+
...itemData,
|
|
214
|
+
loaderData: await loader({
|
|
215
|
+
itemData,
|
|
216
|
+
configs,
|
|
217
|
+
...args
|
|
218
|
+
})
|
|
219
|
+
};
|
|
220
|
+
} catch (err) {
|
|
221
|
+
console.log(`\u274C Loader run failed! Item: ${itemData}: ${err}`);
|
|
222
|
+
return itemData;
|
|
294
223
|
}
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
224
|
+
}
|
|
225
|
+
return itemData;
|
|
226
|
+
})
|
|
227
|
+
);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// src/hydrogen-wrappers.ts
|
|
231
|
+
var import_hydrogen2 = require("@shopify/hydrogen");
|
|
232
|
+
function getSelectedProductOptions(request) {
|
|
233
|
+
let options = (0, import_hydrogen2.getSelectedProductOptions)(request);
|
|
234
|
+
return options.filter(
|
|
235
|
+
({ name }) => name !== "isDesignMode" && !name.startsWith("weaverse")
|
|
236
|
+
);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// src/hooks/use-theme-settings.ts
|
|
240
|
+
var import_react5 = require("@weaverse/react");
|
|
241
|
+
function useThemeSettings() {
|
|
242
|
+
let weaverse = (0, import_react5.useWeaverse)();
|
|
243
|
+
let settings = weaverse?.internal?.project?.config?.theme;
|
|
244
|
+
let updateSettings = (newSettings) => {
|
|
245
|
+
weaverse.internal.project.config.theme = Object.assign(
|
|
246
|
+
{},
|
|
247
|
+
settings,
|
|
248
|
+
newSettings
|
|
249
|
+
);
|
|
250
|
+
weaverse.triggerUpdate();
|
|
251
|
+
};
|
|
252
|
+
return [settings, updateSettings];
|
|
308
253
|
}
|
|
309
254
|
|
|
310
255
|
// src/index.tsx
|
|
311
256
|
function WeaverseHydrogenRoot({
|
|
312
|
-
|
|
313
|
-
|
|
257
|
+
errorComponent: ErrorComponent,
|
|
258
|
+
...themeConfigs
|
|
314
259
|
}) {
|
|
315
|
-
let data = (0,
|
|
316
|
-
let
|
|
317
|
-
if (
|
|
318
|
-
if (
|
|
319
|
-
return /* @__PURE__ */
|
|
320
|
-
return /* @__PURE__ */
|
|
260
|
+
let data = (0, import_react6.useLoaderData)();
|
|
261
|
+
let weaverseData = data?.weaverseData;
|
|
262
|
+
if (weaverseData) {
|
|
263
|
+
if (weaverseData instanceof Promise) {
|
|
264
|
+
return /* @__PURE__ */ import_react8.default.createElement(import_react_error_boundary.ErrorBoundary, { fallbackRender: ErrorComponent }, /* @__PURE__ */ import_react8.default.createElement(import_react8.Suspense, null, /* @__PURE__ */ import_react8.default.createElement(import_react6.Await, { resolve: weaverseData }, (resolvedData) => {
|
|
265
|
+
return /* @__PURE__ */ import_react8.default.createElement(
|
|
321
266
|
RenderWeaverseRoot,
|
|
322
267
|
{
|
|
323
268
|
weaverseData: resolvedData,
|
|
324
|
-
|
|
269
|
+
...themeConfigs
|
|
325
270
|
}
|
|
326
271
|
);
|
|
327
272
|
})));
|
|
328
273
|
}
|
|
329
|
-
return /* @__PURE__ */
|
|
330
|
-
RenderWeaverseRoot,
|
|
331
|
-
{
|
|
332
|
-
weaverseData: weaverseDataFromLoader,
|
|
333
|
-
components
|
|
334
|
-
}
|
|
335
|
-
);
|
|
274
|
+
return /* @__PURE__ */ import_react8.default.createElement(RenderWeaverseRoot, { weaverseData, ...themeConfigs });
|
|
336
275
|
}
|
|
337
|
-
return /* @__PURE__ */
|
|
276
|
+
return /* @__PURE__ */ import_react8.default.createElement(
|
|
338
277
|
ErrorComponent,
|
|
339
278
|
{
|
|
340
279
|
error: { message: "No Weaverse data return from route loader!" }
|
|
@@ -342,16 +281,16 @@ function WeaverseHydrogenRoot({
|
|
|
342
281
|
);
|
|
343
282
|
}
|
|
344
283
|
function RenderWeaverseRoot(props) {
|
|
345
|
-
let { components,
|
|
284
|
+
let { weaverseData, components, countries, themeSchema } = props;
|
|
346
285
|
let weaverse = createWeaverseInstance(weaverseData, components);
|
|
347
|
-
useStudio(weaverse);
|
|
348
|
-
return /* @__PURE__ */
|
|
286
|
+
useStudio(weaverse, countries, themeSchema);
|
|
287
|
+
return /* @__PURE__ */ import_react8.default.createElement(import_react7.WeaverseRoot, { context: weaverse });
|
|
349
288
|
}
|
|
350
289
|
// Annotate the CommonJS export names for ESM import in node:
|
|
351
290
|
0 && (module.exports = {
|
|
352
|
-
HydrogenStudio,
|
|
353
291
|
WeaverseHydrogenRoot,
|
|
354
292
|
fetchWithServerCache,
|
|
293
|
+
getRequestQueries,
|
|
355
294
|
getSelectedProductOptions,
|
|
356
295
|
useThemeSettings,
|
|
357
296
|
weaverseLoader,
|
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// src/index.tsx
|
|
2
2
|
import { Await, useLoaderData } from "@remix-run/react";
|
|
3
3
|
import { WeaverseRoot } from "@weaverse/react";
|
|
4
|
-
import
|
|
4
|
+
import React, { Suspense } from "react";
|
|
5
5
|
import { ErrorBoundary } from "react-error-boundary";
|
|
6
6
|
|
|
7
7
|
// src/context.ts
|
|
@@ -30,10 +30,9 @@ function createWeaverseInstance(weaverseData, components) {
|
|
|
30
30
|
...configs,
|
|
31
31
|
data: page || {},
|
|
32
32
|
pageId: page?.id,
|
|
33
|
-
platformType: "shopify-hydrogen"
|
|
33
|
+
platformType: "shopify-hydrogen",
|
|
34
|
+
internal: { project, pageAssignment }
|
|
34
35
|
});
|
|
35
|
-
weaverse.internal.project = project;
|
|
36
|
-
weaverse.internal.pageAssignment = pageAssignment;
|
|
37
36
|
components.forEach((comp) => {
|
|
38
37
|
weaverse.registerElement({
|
|
39
38
|
type: comp?.schema?.type,
|
|
@@ -46,21 +45,28 @@ function createWeaverseInstance(weaverseData, components) {
|
|
|
46
45
|
|
|
47
46
|
// src/hooks/use-studio.ts
|
|
48
47
|
import { useNavigate, useRevalidator } from "@remix-run/react";
|
|
49
|
-
import { isIframe } from "@weaverse/react";
|
|
48
|
+
import { isIframe, loadScript } from "@weaverse/react";
|
|
50
49
|
import { useEffect } from "react";
|
|
51
|
-
function useStudio(weaverse) {
|
|
50
|
+
function useStudio(weaverse, countries, schema) {
|
|
52
51
|
let navigate = useNavigate();
|
|
53
52
|
let revalidator = useRevalidator();
|
|
53
|
+
let { isDesignMode, weaverseHost, weaverseVersion } = weaverse;
|
|
54
|
+
let isStudio = isIframe && isDesignMode && weaverseHost && weaverseVersion;
|
|
54
55
|
useEffect(() => {
|
|
55
|
-
if (
|
|
56
|
+
if (isStudio) {
|
|
56
57
|
weaverse.internal = {
|
|
57
58
|
...weaverse.internal,
|
|
58
59
|
navigate,
|
|
59
|
-
revalidator
|
|
60
|
+
revalidator,
|
|
61
|
+
themeConfigs: { schema, countries }
|
|
60
62
|
};
|
|
61
63
|
window.__weaverse = weaverse;
|
|
62
64
|
if (window.weaverseStudio) {
|
|
63
65
|
window.weaverseStudio.init(weaverse);
|
|
66
|
+
} else {
|
|
67
|
+
loadScript(
|
|
68
|
+
`${weaverseHost}/assets/studio/hydrogen/index.js?v=${weaverseVersion}`
|
|
69
|
+
);
|
|
64
70
|
}
|
|
65
71
|
}
|
|
66
72
|
}, [weaverse]);
|
|
@@ -70,27 +76,22 @@ function useStudio(weaverse) {
|
|
|
70
76
|
export * from "@weaverse/react";
|
|
71
77
|
|
|
72
78
|
// src/fetch.ts
|
|
73
|
-
import {
|
|
79
|
+
import { createWithCache } from "@shopify/hydrogen";
|
|
80
|
+
async function fetchWithServerCache(params) {
|
|
81
|
+
let { url, options = {}, context } = params;
|
|
82
|
+
let { storefront } = context;
|
|
83
|
+
let withCache = createWithCache(storefront);
|
|
84
|
+
let cacheKey = [url, options.body];
|
|
85
|
+
let data = await withCache(cacheKey, storefront.CacheShort(), async () => {
|
|
86
|
+
let response = await fetch(url, options);
|
|
87
|
+
if (!response.ok)
|
|
88
|
+
throw new Error("Something went wrong. Skipping cache.");
|
|
89
|
+
return await response.json();
|
|
90
|
+
});
|
|
91
|
+
return data;
|
|
92
|
+
}
|
|
74
93
|
|
|
75
94
|
// src/utils.ts
|
|
76
|
-
function hashKey(queryKey) {
|
|
77
|
-
const rawKeys = Array.isArray(queryKey) ? queryKey : [queryKey];
|
|
78
|
-
let hash = "";
|
|
79
|
-
for (const key of rawKeys) {
|
|
80
|
-
if (key != null) {
|
|
81
|
-
if (typeof key === "object") {
|
|
82
|
-
if (!!key.body && typeof key.body === "string") {
|
|
83
|
-
hash += key.body;
|
|
84
|
-
} else {
|
|
85
|
-
hash += JSON.stringify(key);
|
|
86
|
-
}
|
|
87
|
-
} else {
|
|
88
|
-
hash += key;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return hash;
|
|
93
|
-
}
|
|
94
95
|
function getRequestQueries(request) {
|
|
95
96
|
let url = new URL(request.url);
|
|
96
97
|
return Array.from(url.searchParams.entries()).reduce(
|
|
@@ -102,65 +103,14 @@ function getRequestQueries(request) {
|
|
|
102
103
|
);
|
|
103
104
|
}
|
|
104
105
|
|
|
105
|
-
// src/fetch.ts
|
|
106
|
-
var cacheControl = generateCacheControlHeader(CacheShort());
|
|
107
|
-
async function fetchWithServerCache(params) {
|
|
108
|
-
let { url, options = {}, context } = params;
|
|
109
|
-
let { storefront, waitUntil } = context;
|
|
110
|
-
if (!storefront?.cache || !waitUntil) {
|
|
111
|
-
return fetch(url, options);
|
|
112
|
-
}
|
|
113
|
-
let cacheUrl = new URL(url);
|
|
114
|
-
cacheUrl.pathname = "/cache" + cacheUrl.pathname + hashKey([options.body]);
|
|
115
|
-
let cacheKey = new Request(cacheUrl.toString());
|
|
116
|
-
let response = await storefront.cache.match(cacheKey);
|
|
117
|
-
if (!response) {
|
|
118
|
-
response = await fetch(url, {
|
|
119
|
-
...options,
|
|
120
|
-
headers: {
|
|
121
|
-
"cache-control": cacheControl,
|
|
122
|
-
...options.headers
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
waitUntil?.(storefront.cache.put(cacheKey, response.clone()));
|
|
126
|
-
}
|
|
127
|
-
return response;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
// src/hooks/use-theme-settings.ts
|
|
131
|
-
import { useWeaverse } from "@weaverse/react";
|
|
132
|
-
function useThemeSettings() {
|
|
133
|
-
let weaverse = useWeaverse();
|
|
134
|
-
let settings = weaverse?.internal?.project?.config?.theme;
|
|
135
|
-
let updateSettings = (newSettings) => {
|
|
136
|
-
weaverse.internal.project.config.theme = Object.assign(
|
|
137
|
-
{},
|
|
138
|
-
settings,
|
|
139
|
-
newSettings
|
|
140
|
-
);
|
|
141
|
-
weaverse.triggerUpdate();
|
|
142
|
-
};
|
|
143
|
-
return [settings, updateSettings];
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
// src/hydrogen-wrappers.ts
|
|
147
|
-
import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from "@shopify/hydrogen";
|
|
148
|
-
function getSelectedProductOptions(request) {
|
|
149
|
-
let options = hydrogen_getSelectedProductOptions(request);
|
|
150
|
-
return options.filter(
|
|
151
|
-
({ name }) => name !== "isDesignMode" && !name.startsWith("weaverse")
|
|
152
|
-
);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
106
|
// src/loader.ts
|
|
156
|
-
async function weaverseLoader(args, components, loaderConfigs) {
|
|
107
|
+
async function weaverseLoader(args, components, countries, loaderConfigs) {
|
|
157
108
|
return new Promise(async (resolve, reject) => {
|
|
158
109
|
try {
|
|
159
110
|
let { request, context, params } = args;
|
|
160
|
-
let i18n = context?.storefront?.i18n;
|
|
161
111
|
let queries = getRequestQueries(request);
|
|
162
112
|
let { WEAVERSE_PROJECT_ID, WEAVERSE_HOST } = context?.env || {};
|
|
163
|
-
let { weaverseProjectId, weaverseHost
|
|
113
|
+
let { weaverseProjectId, weaverseHost } = queries;
|
|
164
114
|
let projectId = weaverseProjectId || WEAVERSE_PROJECT_ID;
|
|
165
115
|
weaverseHost = weaverseHost || WEAVERSE_HOST || "https://weaverse.io";
|
|
166
116
|
if (!projectId) {
|
|
@@ -168,33 +118,19 @@ async function weaverseLoader(args, components, loaderConfigs) {
|
|
|
168
118
|
`Missing Weaverse project's id. Try adding WEAVERSE_PROJECT_ID to your .env file then restart the server.`
|
|
169
119
|
);
|
|
170
120
|
}
|
|
171
|
-
let
|
|
121
|
+
let i18n = context?.storefront?.i18n;
|
|
122
|
+
let reqBody = {
|
|
123
|
+
i18n,
|
|
124
|
+
countries,
|
|
172
125
|
projectId,
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
isDesignMode,
|
|
176
|
-
requestInfo: {
|
|
177
|
-
i18n,
|
|
178
|
-
params,
|
|
179
|
-
queries,
|
|
180
|
-
pathname: new URL(request.url).pathname,
|
|
181
|
-
search: new URL(request.url).search
|
|
182
|
-
}
|
|
126
|
+
loaderConfigs,
|
|
127
|
+
url: request.url
|
|
183
128
|
};
|
|
184
|
-
let
|
|
129
|
+
let payload = await fetchWithServerCache({
|
|
185
130
|
url: `${weaverseHost}/api/public/project`,
|
|
186
|
-
options: {
|
|
187
|
-
method: "POST",
|
|
188
|
-
body: JSON.stringify({
|
|
189
|
-
i18n,
|
|
190
|
-
projectId,
|
|
191
|
-
loaderConfigs,
|
|
192
|
-
url: request.url
|
|
193
|
-
})
|
|
194
|
-
},
|
|
131
|
+
options: { method: "POST", body: JSON.stringify(reqBody) },
|
|
195
132
|
context
|
|
196
133
|
});
|
|
197
|
-
let payload = await res.json();
|
|
198
134
|
let { page, project, pageAssignment } = payload;
|
|
199
135
|
if (!page || !project || !pageAssignment) {
|
|
200
136
|
throw new Error(
|
|
@@ -202,30 +138,22 @@ async function weaverseLoader(args, components, loaderConfigs) {
|
|
|
202
138
|
payload?.error || "Invalid Weaverse project payload!"
|
|
203
139
|
);
|
|
204
140
|
}
|
|
141
|
+
let configs = {
|
|
142
|
+
projectId,
|
|
143
|
+
weaverseHost,
|
|
144
|
+
weaverseVersion: queries.weaverseVersion,
|
|
145
|
+
isDesignMode: queries.isDesignMode,
|
|
146
|
+
requestInfo: {
|
|
147
|
+
i18n,
|
|
148
|
+
params,
|
|
149
|
+
queries,
|
|
150
|
+
pathname: new URL(request.url).pathname,
|
|
151
|
+
search: new URL(request.url).search
|
|
152
|
+
}
|
|
153
|
+
};
|
|
205
154
|
if (page?.items) {
|
|
206
155
|
let items = page.items;
|
|
207
|
-
page.items = await
|
|
208
|
-
items.map(async (itemData) => {
|
|
209
|
-
let type = itemData.type;
|
|
210
|
-
let { loader } = components.find(({ schema }) => schema?.type === type) || {};
|
|
211
|
-
if (loader && typeof loader === "function") {
|
|
212
|
-
try {
|
|
213
|
-
return {
|
|
214
|
-
...itemData,
|
|
215
|
-
loaderData: await loader({
|
|
216
|
-
itemData,
|
|
217
|
-
configs,
|
|
218
|
-
...args
|
|
219
|
-
})
|
|
220
|
-
};
|
|
221
|
-
} catch (err) {
|
|
222
|
-
console.log(`\u274C Loader run failed! Item: ${itemData}: ${err}`);
|
|
223
|
-
return itemData;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
return itemData;
|
|
227
|
-
})
|
|
228
|
-
);
|
|
156
|
+
page.items = await withLoaderData(items, components, configs, args);
|
|
229
157
|
}
|
|
230
158
|
resolve({ page, configs, project, pageAssignment });
|
|
231
159
|
} catch (err) {
|
|
@@ -234,67 +162,78 @@ async function weaverseLoader(args, components, loaderConfigs) {
|
|
|
234
162
|
}
|
|
235
163
|
});
|
|
236
164
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
), /* @__PURE__ */ React.createElement(
|
|
256
|
-
"script",
|
|
257
|
-
{
|
|
258
|
-
dangerouslySetInnerHTML: {
|
|
259
|
-
__html: `window.__weaverseHydrogenThemeSchema = ${JSON.stringify(
|
|
260
|
-
themeSchema
|
|
261
|
-
)}`
|
|
262
|
-
}
|
|
165
|
+
async function withLoaderData(items, components, configs, args) {
|
|
166
|
+
return await Promise.all(
|
|
167
|
+
items.map(async (itemData) => {
|
|
168
|
+
let type = itemData.type;
|
|
169
|
+
let { loader } = components.find(({ schema }) => schema?.type === type) || {};
|
|
170
|
+
if (loader && typeof loader === "function") {
|
|
171
|
+
try {
|
|
172
|
+
return {
|
|
173
|
+
...itemData,
|
|
174
|
+
loaderData: await loader({
|
|
175
|
+
itemData,
|
|
176
|
+
configs,
|
|
177
|
+
...args
|
|
178
|
+
})
|
|
179
|
+
};
|
|
180
|
+
} catch (err) {
|
|
181
|
+
console.log(`\u274C Loader run failed! Item: ${itemData}: ${err}`);
|
|
182
|
+
return itemData;
|
|
263
183
|
}
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
184
|
+
}
|
|
185
|
+
return itemData;
|
|
186
|
+
})
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// src/hydrogen-wrappers.ts
|
|
191
|
+
import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from "@shopify/hydrogen";
|
|
192
|
+
function getSelectedProductOptions(request) {
|
|
193
|
+
let options = hydrogen_getSelectedProductOptions(request);
|
|
194
|
+
return options.filter(
|
|
195
|
+
({ name }) => name !== "isDesignMode" && !name.startsWith("weaverse")
|
|
196
|
+
);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// src/hooks/use-theme-settings.ts
|
|
200
|
+
import { useWeaverse } from "@weaverse/react";
|
|
201
|
+
function useThemeSettings() {
|
|
202
|
+
let weaverse = useWeaverse();
|
|
203
|
+
let settings = weaverse?.internal?.project?.config?.theme;
|
|
204
|
+
let updateSettings = (newSettings) => {
|
|
205
|
+
weaverse.internal.project.config.theme = Object.assign(
|
|
206
|
+
{},
|
|
207
|
+
settings,
|
|
208
|
+
newSettings
|
|
209
|
+
);
|
|
210
|
+
weaverse.triggerUpdate();
|
|
211
|
+
};
|
|
212
|
+
return [settings, updateSettings];
|
|
268
213
|
}
|
|
269
214
|
|
|
270
215
|
// src/index.tsx
|
|
271
216
|
function WeaverseHydrogenRoot({
|
|
272
|
-
|
|
273
|
-
|
|
217
|
+
errorComponent: ErrorComponent,
|
|
218
|
+
...themeConfigs
|
|
274
219
|
}) {
|
|
275
220
|
let data = useLoaderData();
|
|
276
|
-
let
|
|
277
|
-
if (
|
|
278
|
-
if (
|
|
279
|
-
return /* @__PURE__ */
|
|
280
|
-
return /* @__PURE__ */
|
|
221
|
+
let weaverseData = data?.weaverseData;
|
|
222
|
+
if (weaverseData) {
|
|
223
|
+
if (weaverseData instanceof Promise) {
|
|
224
|
+
return /* @__PURE__ */ React.createElement(ErrorBoundary, { fallbackRender: ErrorComponent }, /* @__PURE__ */ React.createElement(Suspense, null, /* @__PURE__ */ React.createElement(Await, { resolve: weaverseData }, (resolvedData) => {
|
|
225
|
+
return /* @__PURE__ */ React.createElement(
|
|
281
226
|
RenderWeaverseRoot,
|
|
282
227
|
{
|
|
283
228
|
weaverseData: resolvedData,
|
|
284
|
-
|
|
229
|
+
...themeConfigs
|
|
285
230
|
}
|
|
286
231
|
);
|
|
287
232
|
})));
|
|
288
233
|
}
|
|
289
|
-
return /* @__PURE__ */
|
|
290
|
-
RenderWeaverseRoot,
|
|
291
|
-
{
|
|
292
|
-
weaverseData: weaverseDataFromLoader,
|
|
293
|
-
components
|
|
294
|
-
}
|
|
295
|
-
);
|
|
234
|
+
return /* @__PURE__ */ React.createElement(RenderWeaverseRoot, { weaverseData, ...themeConfigs });
|
|
296
235
|
}
|
|
297
|
-
return /* @__PURE__ */
|
|
236
|
+
return /* @__PURE__ */ React.createElement(
|
|
298
237
|
ErrorComponent,
|
|
299
238
|
{
|
|
300
239
|
error: { message: "No Weaverse data return from route loader!" }
|
|
@@ -302,15 +241,15 @@ function WeaverseHydrogenRoot({
|
|
|
302
241
|
);
|
|
303
242
|
}
|
|
304
243
|
function RenderWeaverseRoot(props) {
|
|
305
|
-
let { components,
|
|
244
|
+
let { weaverseData, components, countries, themeSchema } = props;
|
|
306
245
|
let weaverse = createWeaverseInstance(weaverseData, components);
|
|
307
|
-
useStudio(weaverse);
|
|
308
|
-
return /* @__PURE__ */
|
|
246
|
+
useStudio(weaverse, countries, themeSchema);
|
|
247
|
+
return /* @__PURE__ */ React.createElement(WeaverseRoot, { context: weaverse });
|
|
309
248
|
}
|
|
310
249
|
export {
|
|
311
|
-
HydrogenStudio,
|
|
312
250
|
WeaverseHydrogenRoot,
|
|
313
251
|
fetchWithServerCache,
|
|
252
|
+
getRequestQueries,
|
|
314
253
|
getSelectedProductOptions,
|
|
315
254
|
useThemeSettings,
|
|
316
255
|
weaverseLoader
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.1.
|
|
2
|
+
"version": "1.1.5",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"typings": "dist/index.d.ts",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@remix-run/react": "1.19.1",
|
|
36
36
|
"@shopify/hydrogen": "2023.7.1",
|
|
37
|
-
"@weaverse/react": "1.1.
|
|
37
|
+
"@weaverse/react": "1.1.5",
|
|
38
38
|
"react-error-boundary": "^4.0.10"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|