@gem-sdk/pages 1.36.20 → 2.0.0-dev.834
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/cjs/components/ErrorBoundary.js +1 -40
- package/dist/cjs/components/ErrorFallback.js +1 -26
- package/dist/cjs/components/FacebookPixel.js +3 -36
- package/dist/cjs/components/Footer.js +1 -125
- package/dist/cjs/components/FooterForPostPurchase.js +1 -0
- package/dist/cjs/components/GoogleAnalytic.js +5 -67
- package/dist/cjs/components/Header.js +1 -96
- package/dist/cjs/components/TikTokPixel.js +3 -19
- package/dist/cjs/components/builder/PopupManager.js +1 -62
- package/dist/cjs/components/builder/Toolbar.js +1 -883
- package/dist/cjs/components/builder/Toolbox.js +1 -384
- package/dist/cjs/components/builder/toolbar/Onboarding.js +1 -110
- package/dist/cjs/components/image-to-layout/AddSectionImageToLayout.js +1 -263
- package/dist/cjs/components/image-to-layout/DropElement.js +1 -164
- package/dist/cjs/components/image-to-layout/ImageToLayout.js +1 -41
- package/dist/cjs/index.js +1 -75
- package/dist/cjs/layouts/main.js +1 -30
- package/dist/cjs/libs/api/get-builder-props.js +1 -41
- package/dist/cjs/libs/api/get-collection-props.js +1 -68
- package/dist/cjs/libs/api/get-home-page-props-v2.js +1 -145
- package/dist/cjs/libs/api/get-home-page-props.js +1 -151
- package/dist/cjs/libs/api/get-post-purchase-props-preview.js +1 -0
- package/dist/cjs/libs/api/get-preview-props.js +1 -18
- package/dist/cjs/libs/api/get-product-props.js +1 -73
- package/dist/cjs/libs/api/get-static-page-props-preview.js +1 -150
- package/dist/cjs/libs/api/get-static-page-props-v2.js +1 -152
- package/dist/cjs/libs/api/get-static-page-props.js +1 -148
- package/dist/cjs/libs/custom-fonts.js +6 -60
- package/dist/cjs/libs/fetcher.js +1 -67
- package/dist/cjs/libs/get-layout.js +1 -13
- package/dist/cjs/libs/get-storefront-api.js +1 -12
- package/dist/cjs/libs/getStaticPaths.js +1 -10
- package/dist/cjs/libs/google-fonts.js +1 -81
- package/dist/cjs/libs/helpers/common.js +1 -27
- package/dist/cjs/libs/helpers/gen-css.js +1 -117
- package/dist/cjs/libs/helpers/gen-fonts.js +1 -68
- package/dist/cjs/libs/helpers/generate-manifres.js +1 -5
- package/dist/cjs/libs/helpers/get-fallback.js +1 -35
- package/dist/cjs/libs/helpers/normalize.js +1 -90
- package/dist/cjs/libs/helpers/parse-json.js +1 -16
- package/dist/cjs/libs/helpers/user-agent.js +1 -7
- package/dist/cjs/libs/hooks/use-tracking-view.js +1 -45
- package/dist/cjs/libs/hooks/usePagePreview.js +1 -0
- package/dist/cjs/libs/parse-html.js +1 -42
- package/dist/cjs/libs/shopify-cdn-with-google-fonts.js +1 -1845
- package/dist/cjs/pages/404.js +1 -43
- package/dist/cjs/pages/500.js +1 -74
- package/dist/cjs/pages/CollectionGlobalProvider.js +1 -59
- package/dist/cjs/pages/builder.js +1 -103
- package/dist/cjs/pages/collection-detail.js +1 -64
- package/dist/cjs/pages/preview.js +1 -26
- package/dist/cjs/pages/product-detail.js +1 -69
- package/dist/cjs/pages/static-v2.js +1 -91
- package/dist/cjs/pages/static.js +1 -75
- package/dist/esm/components/ErrorBoundary.js +1 -38
- package/dist/esm/components/ErrorFallback.js +1 -24
- package/dist/esm/components/FacebookPixel.js +3 -34
- package/dist/esm/components/Footer.js +1 -121
- package/dist/esm/components/FooterForPostPurchase.js +1 -0
- package/dist/esm/components/GoogleAnalytic.js +5 -65
- package/dist/esm/components/Header.js +1 -92
- package/dist/esm/components/TikTokPixel.js +3 -17
- package/dist/esm/components/builder/PopupManager.js +1 -58
- package/dist/esm/components/builder/Toolbar.js +1 -879
- package/dist/esm/components/builder/Toolbox.js +1 -380
- package/dist/esm/components/builder/toolbar/Onboarding.js +1 -106
- package/dist/esm/components/image-to-layout/AddSectionImageToLayout.js +1 -259
- package/dist/esm/components/image-to-layout/DropElement.js +1 -162
- package/dist/esm/components/image-to-layout/ImageToLayout.js +1 -37
- package/dist/esm/index.js +1 -33
- package/dist/esm/layouts/main.js +1 -26
- package/dist/esm/libs/api/get-builder-props.js +1 -39
- package/dist/esm/libs/api/get-collection-props.js +1 -66
- package/dist/esm/libs/api/get-home-page-props-v2.js +1 -143
- package/dist/esm/libs/api/get-home-page-props.js +1 -149
- package/dist/esm/libs/api/get-post-purchase-props-preview.js +1 -0
- package/dist/esm/libs/api/get-preview-props.js +1 -16
- package/dist/esm/libs/api/get-product-props.js +1 -71
- package/dist/esm/libs/api/get-static-page-props-preview.js +1 -148
- package/dist/esm/libs/api/get-static-page-props-v2.js +1 -150
- package/dist/esm/libs/api/get-static-page-props.js +1 -146
- package/dist/esm/libs/custom-fonts.js +6 -55
- package/dist/esm/libs/fetcher.js +1 -64
- package/dist/esm/libs/get-layout.js +1 -11
- package/dist/esm/libs/get-storefront-api.js +1 -10
- package/dist/esm/libs/getStaticPaths.js +1 -8
- package/dist/esm/libs/google-fonts.js +1 -75
- package/dist/esm/libs/helpers/common.js +1 -24
- package/dist/esm/libs/helpers/gen-css.js +1 -115
- package/dist/esm/libs/helpers/gen-fonts.js +1 -65
- package/dist/esm/libs/helpers/generate-manifres.js +1 -3
- package/dist/esm/libs/helpers/get-fallback.js +1 -33
- package/dist/esm/libs/helpers/normalize.js +1 -85
- package/dist/esm/libs/helpers/parse-json.js +1 -13
- package/dist/esm/libs/helpers/user-agent.js +1 -5
- package/dist/esm/libs/hooks/use-tracking-view.js +1 -43
- package/dist/esm/libs/hooks/usePagePreview.js +1 -0
- package/dist/esm/libs/parse-html.js +1 -40
- package/dist/esm/libs/shopify-cdn-with-google-fonts.js +1 -1843
- package/dist/esm/pages/404.js +1 -41
- package/dist/esm/pages/500.js +1 -72
- package/dist/esm/pages/CollectionGlobalProvider.js +1 -55
- package/dist/esm/pages/builder.js +1 -101
- package/dist/esm/pages/collection-detail.js +1 -60
- package/dist/esm/pages/preview.js +1 -24
- package/dist/esm/pages/product-detail.js +1 -65
- package/dist/esm/pages/static-v2.js +1 -89
- package/dist/esm/pages/static.js +1 -71
- package/dist/types/index.d.ts +29 -6
- package/package.json +5 -5
|
@@ -1,66 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { genCSS } from '../helpers/gen-css.js';
|
|
3
|
-
import { parseBuilderTemplate } from '../helpers/normalize.js';
|
|
4
|
-
import { serializableJson } from '../helpers/parse-json.js';
|
|
5
|
-
|
|
6
|
-
const getCollectionProps = (fetcher)=>async (handle)=>{
|
|
7
|
-
const pageType = 'COLLECTION';
|
|
8
|
-
const variables = {
|
|
9
|
-
slug: handle,
|
|
10
|
-
slugType: pageType
|
|
11
|
-
};
|
|
12
|
-
const [collectionData, theme] = await Promise.all([
|
|
13
|
-
fetcher([
|
|
14
|
-
CollectionDocument,
|
|
15
|
-
{
|
|
16
|
-
handle
|
|
17
|
-
}
|
|
18
|
-
]),
|
|
19
|
-
fetcher([
|
|
20
|
-
PublishedThemePagesDocument,
|
|
21
|
-
variables
|
|
22
|
-
])
|
|
23
|
-
]);
|
|
24
|
-
const dataBuilder = theme.publishedThemePages?.[0];
|
|
25
|
-
const collectionTemplate = parseBuilderTemplate(dataBuilder);
|
|
26
|
-
if (!collectionData || !collectionData?.collection || !dataBuilder) {
|
|
27
|
-
throw new Error('Collection not found');
|
|
28
|
-
}
|
|
29
|
-
const { collection } = collectionData;
|
|
30
|
-
const queries = prefetchQueries(collectionTemplate);
|
|
31
|
-
const datas = await Promise.allSettled(queries.map(({ query, variables, func })=>{
|
|
32
|
-
if (func) {
|
|
33
|
-
return func(fetcher, variables);
|
|
34
|
-
}
|
|
35
|
-
if (query) return fetcher([
|
|
36
|
-
query,
|
|
37
|
-
variables
|
|
38
|
-
]);
|
|
39
|
-
return {};
|
|
40
|
-
}));
|
|
41
|
-
const fallback = queries.reduce((acc, { key }, index)=>{
|
|
42
|
-
const res = datas[index];
|
|
43
|
-
if (res?.status === 'fulfilled') {
|
|
44
|
-
return {
|
|
45
|
-
...acc,
|
|
46
|
-
[key]: res.value
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
return acc;
|
|
50
|
-
}, {});
|
|
51
|
-
return serializableJson({
|
|
52
|
-
builderData: collectionTemplate,
|
|
53
|
-
collection,
|
|
54
|
-
pageType,
|
|
55
|
-
themeStyle: genCSS(dataBuilder.pageStyle?.data),
|
|
56
|
-
swr: {
|
|
57
|
-
fallback
|
|
58
|
-
},
|
|
59
|
-
seo: {
|
|
60
|
-
title: collection.title,
|
|
61
|
-
description: collection.description
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
export { getCollectionProps };
|
|
1
|
+
import{CollectionDocument as e,PublishedThemePagesDocument as t,prefetchQueries as l}from"@gem-sdk/core";import{genCSS as r}from"../helpers/gen-css.js";import{parseBuilderTemplate as o}from"../helpers/normalize.js";import{serializableJson as s}from"../helpers/parse-json.js";let getCollectionProps=i=>async a=>{let p="COLLECTION",m={slug:a,slugType:p},[n,c]=await Promise.all([i([e,{handle:a}]),i([t,m])]),u=c.publishedThemePages?.[0],d=o(u);if(!n||!n?.collection||!u)throw Error("Collection not found");let{collection:f}=n,g=l(d),h=await Promise.allSettled(g.map(({query:e,variables:t,func:l})=>l?l(i,t):e?i([e,t]):{})),C=g.reduce((e,{key:t},l)=>{let r=h[l];return r?.status==="fulfilled"?{...e,[t]:r.value}:e},{});return s({builderData:d,collection:f,pageType:p,themeStyle:r(u.pageStyle?.data),swr:{fallback:C},seo:{title:f.title,description:f.description}})};export{getCollectionProps};
|
|
@@ -1,143 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { ShopMetaDocument } from '@gem-sdk/adapter-shopify';
|
|
3
|
-
import { getFontStyleFromPageTemplate, getFontFromGlobalStyle } from '../google-fonts.js';
|
|
4
|
-
import { genCSS } from '../helpers/gen-css.js';
|
|
5
|
-
import { generateManifest } from '../helpers/generate-manifres.js';
|
|
6
|
-
import { getFallbackV2 } from '../helpers/get-fallback.js';
|
|
7
|
-
import { parseBuilderTemplateV2 } from '../helpers/normalize.js';
|
|
8
|
-
import { parseJson, serializableJson } from '../helpers/parse-json.js';
|
|
9
|
-
import { captureException } from '@sentry/nextjs';
|
|
10
|
-
|
|
11
|
-
const getHomePagePropsV2 = (fetcher, shopifyFetcher)=>async ()=>{
|
|
12
|
-
try {
|
|
13
|
-
const variables = {
|
|
14
|
-
slugType: 'STATIC'
|
|
15
|
-
};
|
|
16
|
-
const [theme, storeProperty, shopifyMeta] = await Promise.allSettled([
|
|
17
|
-
fetcher([
|
|
18
|
-
PublishedThemePagesDocument,
|
|
19
|
-
variables
|
|
20
|
-
]),
|
|
21
|
-
fetcher([
|
|
22
|
-
StorePropertyDocument
|
|
23
|
-
]),
|
|
24
|
-
shopifyFetcher([
|
|
25
|
-
ShopMetaDocument
|
|
26
|
-
])
|
|
27
|
-
]);
|
|
28
|
-
if (theme.status === 'rejected') {
|
|
29
|
-
throw new Error(theme.reason?.[0]);
|
|
30
|
-
}
|
|
31
|
-
const dataBuilder = theme.value?.publishedThemePages?.[0];
|
|
32
|
-
if (!dataBuilder) {
|
|
33
|
-
throw new Error(`No data builder found for Home page`);
|
|
34
|
-
}
|
|
35
|
-
const homeTemplate = parseBuilderTemplateV2(dataBuilder);
|
|
36
|
-
const [elementFontStyle, fontStyle, fallback] = await Promise.all([
|
|
37
|
-
getFontStyleFromPageTemplate(homeTemplate),
|
|
38
|
-
getFontFromGlobalStyle(dataBuilder?.pageStyle?.data),
|
|
39
|
-
getFallbackV2(fetcher, homeTemplate)
|
|
40
|
-
]);
|
|
41
|
-
const mobileOnly = dataBuilder.isMobile ?? false;
|
|
42
|
-
const description = dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-description')?.value;
|
|
43
|
-
const thumbnail = parseJson(dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-thumbnail')?.value);
|
|
44
|
-
const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
|
|
45
|
-
const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
|
|
46
|
-
const favicon = shopData?.storeProperty?.favicon ?? '/favicon/favicon-32x32.png';
|
|
47
|
-
const seo = {
|
|
48
|
-
defaultTitle: shopMeta?.shop.name,
|
|
49
|
-
title: dataBuilder?.name ?? 'Home',
|
|
50
|
-
description: description ?? shopMeta?.shop.description,
|
|
51
|
-
openGraph: {
|
|
52
|
-
site_name: shopMeta?.shop.name,
|
|
53
|
-
locale: shopMeta?.localization.country.isoCode,
|
|
54
|
-
title: dataBuilder?.name ?? shopMeta?.shop.name,
|
|
55
|
-
description: description ?? shopMeta?.shop.description,
|
|
56
|
-
images: thumbnail ? [
|
|
57
|
-
thumbnail
|
|
58
|
-
] : []
|
|
59
|
-
},
|
|
60
|
-
additionalMetaTags: [
|
|
61
|
-
{
|
|
62
|
-
name: 'theme-color',
|
|
63
|
-
content: '#000000'
|
|
64
|
-
}
|
|
65
|
-
],
|
|
66
|
-
canonical: `https://${shopData?.storeProperty?.primaryDomain}/`,
|
|
67
|
-
additionalLinkTags: [
|
|
68
|
-
{
|
|
69
|
-
rel: 'icon',
|
|
70
|
-
sizes: '32x32',
|
|
71
|
-
href: `${favicon}-/crop/1:1/center/-/smart_resize/32x32/`
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
rel: 'icon',
|
|
75
|
-
sizes: '16x16',
|
|
76
|
-
href: `${favicon}-/crop/1:1/center/-/smart_resize/16x16/`
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
rel: 'apple-touch-icon',
|
|
80
|
-
sizes: '180x180',
|
|
81
|
-
href: `${favicon}-/crop/1:1/center/-/smart_resize/180x180/`
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
rel: 'manifest',
|
|
85
|
-
href: generateManifest({
|
|
86
|
-
theme_color: '#000000',
|
|
87
|
-
background_color: '#ffffff',
|
|
88
|
-
display: 'standalone',
|
|
89
|
-
scope: '/',
|
|
90
|
-
start_url: '/',
|
|
91
|
-
name: shopMeta?.shop.name,
|
|
92
|
-
short_name: shopMeta?.shop.name,
|
|
93
|
-
description: shopMeta?.shop.description,
|
|
94
|
-
icons: [
|
|
95
|
-
{
|
|
96
|
-
src: `${favicon}-/crop/1:1/center/-/smart_resize/192x192/`,
|
|
97
|
-
sizes: '192x192',
|
|
98
|
-
type: 'image/png',
|
|
99
|
-
purpose: 'any maskable'
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
src: `${favicon}-/crop/1:1/center/-/smart_resize/512x512/`,
|
|
103
|
-
sizes: '512x512',
|
|
104
|
-
type: 'image/png'
|
|
105
|
-
}
|
|
106
|
-
]
|
|
107
|
-
})
|
|
108
|
-
}
|
|
109
|
-
]
|
|
110
|
-
};
|
|
111
|
-
const languageIsoCode = shopMeta?.localization.language.isoCode ?? null;
|
|
112
|
-
const countryIsoCode = shopMeta?.localization.country.isoCode ?? null;
|
|
113
|
-
const locale = !languageIsoCode || !countryIsoCode ? null : `${languageIsoCode}-${countryIsoCode}`;
|
|
114
|
-
return serializableJson({
|
|
115
|
-
themeStyle: genCSS(dataBuilder?.pageStyle?.data, mobileOnly),
|
|
116
|
-
fontStyle,
|
|
117
|
-
elementFontStyle,
|
|
118
|
-
builderData: homeTemplate,
|
|
119
|
-
swr: {
|
|
120
|
-
fallback
|
|
121
|
-
},
|
|
122
|
-
moneyFormat: shopMeta?.shop.moneyFormat ?? null,
|
|
123
|
-
currency: shopMeta?.localization.country.currency.isoCode ?? null,
|
|
124
|
-
languageIsoCode,
|
|
125
|
-
countryIsoCode,
|
|
126
|
-
locale,
|
|
127
|
-
swatches: parseJson(shopData?.storeProperty?.swatchesConfig),
|
|
128
|
-
seo,
|
|
129
|
-
mobileOnly,
|
|
130
|
-
gaTrackingId: dataBuilder.themePageAnalytic?.gaTrackingID ?? null,
|
|
131
|
-
facebookPixelId: dataBuilder.themePageAnalytic?.fbPixelID ?? null,
|
|
132
|
-
tiktokPixelId: dataBuilder.themePageAnalytic?.tiktokPixelID ?? null,
|
|
133
|
-
customCodeHeader: dataBuilder.themePageCustomCode?.header ?? null,
|
|
134
|
-
customCodeBody: dataBuilder.themePageCustomCode?.body ?? null,
|
|
135
|
-
pageHandle: dataBuilder.handle ?? null
|
|
136
|
-
});
|
|
137
|
-
} catch (err) {
|
|
138
|
-
captureException(err);
|
|
139
|
-
throw err;
|
|
140
|
-
}
|
|
141
|
-
};
|
|
142
|
-
|
|
143
|
-
export { getHomePagePropsV2 };
|
|
1
|
+
import{PublishedThemePagesDocument as e,StorePropertyDocument as o}from"@gem-sdk/core";import{ShopMetaDocument as a}from"@gem-sdk/adapter-shopify";import{getFontStyleFromPageTemplate as t,getFontFromGlobalStyle as r}from"../google-fonts.js";import{genCSS as s}from"../helpers/gen-css.js";import{generateManifest as l}from"../helpers/generate-manifres.js";import{getFallbackV2 as i}from"../helpers/get-fallback.js";import{parseBuilderTemplateV2 as n}from"../helpers/normalize.js";import{parseJson as m,serializableJson as p}from"../helpers/parse-json.js";import{captureException as c}from"@sentry/nextjs";let getHomePagePropsV2=(d,h)=>async()=>{try{let c={slugType:"STATIC"},[u,g,f]=await Promise.allSettled([d([e,c]),d([o]),h([a])]);if("rejected"===u.status)throw Error(u.reason?.[0]);let y=u.value?.publishedThemePages?.[0];if(!y)throw Error("No data builder found for Home page");let P=n(y),[x,k,z]=await Promise.all([t(P),r(y?.pageStyle?.data),i(d,P)]),b=y.isMobile??!1,C=y?.themePageDataSEO?.find(e=>e?.key==="global-meta-description")?.value,v=m(y?.themePageDataSEO?.find(e=>e?.key==="global-meta-thumbnail")?.value),_="fulfilled"===f.status?f.value:void 0,j="fulfilled"===g.status?g.value:void 0,T=j?.storeProperty?.favicon??"/favicon/favicon-32x32.png",w={defaultTitle:_?.shop.name,title:y?.name??"Home",description:C??_?.shop.description,openGraph:{site_name:_?.shop.name,locale:_?.localization.country.isoCode,title:y?.name??_?.shop.name,description:C??_?.shop.description,images:v?[v]:[]},additionalMetaTags:[{name:"theme-color",content:"#000000"}],canonical:`https://${j?.storeProperty?.primaryDomain}/`,additionalLinkTags:[{rel:"icon",sizes:"32x32",href:`${T}-/crop/1:1/center/-/smart_resize/32x32/`},{rel:"icon",sizes:"16x16",href:`${T}-/crop/1:1/center/-/smart_resize/16x16/`},{rel:"apple-touch-icon",sizes:"180x180",href:`${T}-/crop/1:1/center/-/smart_resize/180x180/`},{rel:"manifest",href:l({theme_color:"#000000",background_color:"#ffffff",display:"standalone",scope:"/",start_url:"/",name:_?.shop.name,short_name:_?.shop.name,description:_?.shop.description,icons:[{src:`${T}-/crop/1:1/center/-/smart_resize/192x192/`,sizes:"192x192",type:"image/png",purpose:"any maskable"},{src:`${T}-/crop/1:1/center/-/smart_resize/512x512/`,sizes:"512x512",type:"image/png"}]})}]},$=_?.localization.language.isoCode??null,D=_?.localization.country.isoCode??null,I=$&&D?`${$}-${D}`:null;return p({themeStyle:s(y?.pageStyle?.data,b),fontStyle:k,elementFontStyle:x,builderData:P,swr:{fallback:z},moneyFormat:_?.shop.moneyFormat??null,currency:_?.localization.country.currency.isoCode??null,languageIsoCode:$,countryIsoCode:D,locale:I,swatches:m(j?.storeProperty?.swatchesConfig),seo:w,mobileOnly:b,gaTrackingId:y.themePageAnalytic?.gaTrackingID??null,facebookPixelId:y.themePageAnalytic?.fbPixelID??null,tiktokPixelId:y.themePageAnalytic?.tiktokPixelID??null,customCodeHeader:y.themePageCustomCode?.header??null,customCodeBody:y.themePageCustomCode?.body??null,pageHandle:y.handle??null})}catch(e){throw c(e),e}};export{getHomePagePropsV2};
|
|
@@ -1,149 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { ShopMetaDocument } from '@gem-sdk/adapter-shopify';
|
|
3
|
-
import { getFontFromGlobalStyle } from '../google-fonts.js';
|
|
4
|
-
import { genCSS } from '../helpers/gen-css.js';
|
|
5
|
-
import { generateManifest } from '../helpers/generate-manifres.js';
|
|
6
|
-
import { parseBuilderTemplate } from '../helpers/normalize.js';
|
|
7
|
-
import { parseJson, serializableJson } from '../helpers/parse-json.js';
|
|
8
|
-
|
|
9
|
-
const getHomePageProps = (fetcher, shopifyFetcher)=>async ()=>{
|
|
10
|
-
const pageType = 'STATIC';
|
|
11
|
-
const variables = {
|
|
12
|
-
slugType: pageType
|
|
13
|
-
};
|
|
14
|
-
// const theme = await fetcher<PublishedThemePagesQueryResponse, PublishedThemePagesQueryVariables>([
|
|
15
|
-
// PublishedThemePagesDocument,
|
|
16
|
-
// variables,
|
|
17
|
-
// ]);
|
|
18
|
-
const [theme, storeProperty, shopifyMeta] = await Promise.allSettled([
|
|
19
|
-
fetcher([
|
|
20
|
-
PublishedThemePagesDocument,
|
|
21
|
-
variables
|
|
22
|
-
]),
|
|
23
|
-
fetcher([
|
|
24
|
-
StorePropertyDocument
|
|
25
|
-
]),
|
|
26
|
-
shopifyFetcher([
|
|
27
|
-
ShopMetaDocument
|
|
28
|
-
])
|
|
29
|
-
]);
|
|
30
|
-
if (theme.status === 'rejected') {
|
|
31
|
-
return {
|
|
32
|
-
pageType
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
const dataBuilder = theme.value.publishedThemePages?.[0];
|
|
36
|
-
const homeTemplate = parseBuilderTemplate(dataBuilder);
|
|
37
|
-
const fontStyle = await getFontFromGlobalStyle(dataBuilder?.pageStyle?.data);
|
|
38
|
-
const queries = prefetchQueries(homeTemplate);
|
|
39
|
-
const datas = await Promise.allSettled(queries.map(({ query, variables, func })=>{
|
|
40
|
-
if (func) {
|
|
41
|
-
return func(fetcher, variables);
|
|
42
|
-
}
|
|
43
|
-
if (query) return fetcher([
|
|
44
|
-
query,
|
|
45
|
-
variables
|
|
46
|
-
]);
|
|
47
|
-
return {};
|
|
48
|
-
}));
|
|
49
|
-
const fallback = queries.reduce((acc, { key }, index)=>{
|
|
50
|
-
const res = datas[index];
|
|
51
|
-
if (res?.status === 'fulfilled') {
|
|
52
|
-
return {
|
|
53
|
-
...acc,
|
|
54
|
-
[key]: res.value
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
return acc;
|
|
58
|
-
}, {});
|
|
59
|
-
const description = dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-description')?.value;
|
|
60
|
-
const thumbnail = parseJson(dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-thumbnail')?.value);
|
|
61
|
-
const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
|
|
62
|
-
const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
|
|
63
|
-
const favicon = shopData?.storeProperty?.favicon ?? '/favicon/favicon-32x32.png';
|
|
64
|
-
const seo = {
|
|
65
|
-
defaultTitle: shopMeta?.shop.name,
|
|
66
|
-
title: dataBuilder?.name ?? 'Home',
|
|
67
|
-
description: description ?? shopMeta?.shop.description,
|
|
68
|
-
openGraph: {
|
|
69
|
-
site_name: shopMeta?.shop.name,
|
|
70
|
-
locale: shopMeta?.localization.country.isoCode,
|
|
71
|
-
title: dataBuilder?.name ?? shopMeta?.shop.name,
|
|
72
|
-
description: description ?? shopMeta?.shop.description,
|
|
73
|
-
images: thumbnail ? [
|
|
74
|
-
thumbnail
|
|
75
|
-
] : []
|
|
76
|
-
},
|
|
77
|
-
additionalMetaTags: [
|
|
78
|
-
{
|
|
79
|
-
name: 'theme-color',
|
|
80
|
-
content: '#000000'
|
|
81
|
-
}
|
|
82
|
-
],
|
|
83
|
-
canonical: '/',
|
|
84
|
-
additionalLinkTags: [
|
|
85
|
-
{
|
|
86
|
-
rel: 'icon',
|
|
87
|
-
sizes: '32x32',
|
|
88
|
-
href: `${favicon}-/crop/1:1/center/-/smart_resize/32x32/`
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
rel: 'icon',
|
|
92
|
-
sizes: '16x16',
|
|
93
|
-
href: `${favicon}-/crop/1:1/center/-/smart_resize/16x16/`
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
rel: 'apple-touch-icon',
|
|
97
|
-
sizes: '180x180',
|
|
98
|
-
href: `${favicon}-/crop/1:1/center/-/smart_resize/180x180/`
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
rel: 'manifest',
|
|
102
|
-
href: generateManifest({
|
|
103
|
-
theme_color: '#000000',
|
|
104
|
-
background_color: '#ffffff',
|
|
105
|
-
display: 'standalone',
|
|
106
|
-
scope: '/',
|
|
107
|
-
start_url: '/',
|
|
108
|
-
name: shopMeta?.shop.name,
|
|
109
|
-
short_name: shopMeta?.shop.name,
|
|
110
|
-
description: shopMeta?.shop.description,
|
|
111
|
-
icons: [
|
|
112
|
-
{
|
|
113
|
-
src: `${favicon}-/crop/1:1/center/-/smart_resize/192x192/`,
|
|
114
|
-
sizes: '192x192',
|
|
115
|
-
type: 'image/png',
|
|
116
|
-
purpose: 'any maskable'
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
src: `${favicon}-/crop/1:1/center/-/smart_resize/512x512/`,
|
|
120
|
-
sizes: '512x512',
|
|
121
|
-
type: 'image/png'
|
|
122
|
-
}
|
|
123
|
-
]
|
|
124
|
-
})
|
|
125
|
-
}
|
|
126
|
-
]
|
|
127
|
-
};
|
|
128
|
-
const languageIsoCode = shopMeta?.localization.language.isoCode ?? null;
|
|
129
|
-
const countryIsoCode = shopMeta?.localization.country.isoCode ?? null;
|
|
130
|
-
const locale = !languageIsoCode || !countryIsoCode ? null : `${languageIsoCode}-${countryIsoCode}`;
|
|
131
|
-
return serializableJson({
|
|
132
|
-
themeStyle: genCSS(dataBuilder?.pageStyle?.data),
|
|
133
|
-
fontStyle,
|
|
134
|
-
builderData: homeTemplate,
|
|
135
|
-
pageType,
|
|
136
|
-
swr: {
|
|
137
|
-
fallback
|
|
138
|
-
},
|
|
139
|
-
moneyFormat: shopMeta?.shop.moneyFormat ?? null,
|
|
140
|
-
currency: shopMeta?.localization.country.currency.isoCode ?? null,
|
|
141
|
-
locale,
|
|
142
|
-
languageIsoCode,
|
|
143
|
-
countryIsoCode,
|
|
144
|
-
swatches: parseJson(shopData?.storeProperty?.swatchesConfig),
|
|
145
|
-
seo
|
|
146
|
-
});
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
export { getHomePageProps };
|
|
1
|
+
import{PublishedThemePagesDocument as e,StorePropertyDocument as o,prefetchQueries as a}from"@gem-sdk/core";import{ShopMetaDocument as t}from"@gem-sdk/adapter-shopify";import{getFontFromGlobalStyle as r}from"../google-fonts.js";import{genCSS as s}from"../helpers/gen-css.js";import{generateManifest as i}from"../helpers/generate-manifres.js";import{parseBuilderTemplate as l}from"../helpers/normalize.js";import{parseJson as n,serializableJson as m}from"../helpers/parse-json.js";let getHomePageProps=(p,c)=>async()=>{let d="STATIC",u={slugType:d},[f,h,g]=await Promise.allSettled([p([e,u]),p([o]),c([t])]);if("rejected"===f.status)return{pageType:d};let y=f.value.publishedThemePages?.[0],z=l(y),x=await r(y?.pageStyle?.data),v=a(z),P=await Promise.allSettled(v.map(({query:e,variables:o,func:a})=>a?a(p,o):e?p([e,o]):{})),_=v.reduce((e,{key:o},a)=>{let t=P[a];return t?.status==="fulfilled"?{...e,[o]:t.value}:e},{}),S=y?.themePageDataSEO?.find(e=>e?.key==="global-meta-description")?.value,b=n(y?.themePageDataSEO?.find(e=>e?.key==="global-meta-thumbnail")?.value),j="fulfilled"===g.status?g.value:void 0,k="fulfilled"===h.status?h.value:void 0,T=k?.storeProperty?.favicon??"/favicon/favicon-32x32.png",$={defaultTitle:j?.shop.name,title:y?.name??"Home",description:S??j?.shop.description,openGraph:{site_name:j?.shop.name,locale:j?.localization.country.isoCode,title:y?.name??j?.shop.name,description:S??j?.shop.description,images:b?[b]:[]},additionalMetaTags:[{name:"theme-color",content:"#000000"}],canonical:"/",additionalLinkTags:[{rel:"icon",sizes:"32x32",href:`${T}-/crop/1:1/center/-/smart_resize/32x32/`},{rel:"icon",sizes:"16x16",href:`${T}-/crop/1:1/center/-/smart_resize/16x16/`},{rel:"apple-touch-icon",sizes:"180x180",href:`${T}-/crop/1:1/center/-/smart_resize/180x180/`},{rel:"manifest",href:i({theme_color:"#000000",background_color:"#ffffff",display:"standalone",scope:"/",start_url:"/",name:j?.shop.name,short_name:j?.shop.name,description:j?.shop.description,icons:[{src:`${T}-/crop/1:1/center/-/smart_resize/192x192/`,sizes:"192x192",type:"image/png",purpose:"any maskable"},{src:`${T}-/crop/1:1/center/-/smart_resize/512x512/`,sizes:"512x512",type:"image/png"}]})}]},w=j?.localization.language.isoCode??null,C=j?.localization.country.isoCode??null,D=w&&C?`${w}-${C}`:null;return m({themeStyle:s(y?.pageStyle?.data),fontStyle:x,builderData:z,pageType:d,swr:{fallback:_},moneyFormat:j?.shop.moneyFormat??null,currency:j?.localization.country.currency.isoCode??null,locale:D,languageIsoCode:w,countryIsoCode:C,swatches:n(k?.storeProperty?.swatchesConfig),seo:$})};export{getHomePageProps};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ThemePageDocument as e,StorePropertyDocument as r,SaleFunnelDiscountsDocument as t,LibraryTemplateDocument as a,LibrarySaleFunnelDocument as o}from"@gem-sdk/core";import{ShopMetaDocument as l}from"@gem-sdk/adapter-shopify";import{captureException as s}from"@sentry/nextjs";import{getFontStyleFromPageTemplate as i}from"../google-fonts.js";import{getFallbackV2 as f}from"../helpers/get-fallback.js";import{parseBuilderLibraryTemplate as m,parseBuilderTemplateV2 as d}from"../helpers/normalize.js";import{usePagePreview as u}from"../hooks/usePagePreview.js";import{serializableJson as P}from"../helpers/parse-json.js";let fetchSalePageDataByID=async(t,a,o)=>{let s={themePageId:t.themePageId},[i,f,m]=await Promise.allSettled([a([e,s]),a([r]),o([l])]);if("rejected"===i.status)throw Error(i.reason?.[0]);return{dataBuilder:i.value.themePage,storeProperty:f,shopifyMeta:m,productOffers:[]}},fetchPostPurchasePageDataByID=async(a,o,s)=>{let i={themePageId:a.themePageId},[f,m,d,u]=await Promise.allSettled([o([e,i]),o([r]),s([l]),o([t,{where:{saleFunnelOfferID:a.currentOfferID}}])]);if("rejected"===f.status)throw Error(f.reason?.[0]);if("rejected"===u.status)throw Error(u.reason?.[0]);return{dataBuilder:f.value.themePage,storeProperty:m,shopifyMeta:d,productOffers:u.value.saleFunnelDiscounts?.edges?.filter(e=>e?.node?.objectType==="PRODUCT"&&e?.node?.type==="ORDER_VALUE")||[]}},fetchThemePageDataByTemplateID=async(e,t,s)=>{let i={libraryTemplateId:e.libraryTemplateId},f=[],[m,d,u]=await Promise.allSettled([t([a,i]),t([r]),s([l])]);if(e.currentOfferID){let[r]=await Promise.allSettled([t([o,{librarySaleFunnelId:e.librarySaleFunnelID}])]);if("rejected"===r.status)throw Error(r.reason?.[0]);let a=r.value.librarySaleFunnel?.offers?.find(r=>r?.id===e.currentOfferID);a&&(f=a.discounts?.filter(e=>e?.objectType==="PRODUCT"&&"ORDER_VALUE"===e.type).map(e=>({node:{...e}}))||[])}if("rejected"===m.status)throw Error(m.reason?.[0]);return{dataBuilder:m.value.libraryTemplate,storeProperty:d,shopifyMeta:u,productOffers:f}},getPostPurchasePropsPreview=(e,r,t)=>async(a,o)=>{try{let{dataBuilder:l,storeProperty:s,shopifyMeta:h,productOffers:n}=t?await fetchThemePageDataByTemplateID({libraryTemplateId:a,currentOfferID:o,librarySaleFunnelID:t},e,r):o?await fetchPostPurchasePageDataByID({themePageId:a,currentOfferID:o},e,r):await fetchSalePageDataByID({themePageId:a},e,r);if(!l)throw Error(`No data builder found for slug: /preview/${a}`);let c=t?m(l):d(l),[p,D]=await Promise.all([i(c),f(e,c)]),{seo:g,pageConfig:y}=u(l,s,h);return P({seo:g,...y,elementFontStyle:p,builderData:c,swr:{fallback:D},productOffers:n})}catch(e){throw s(e),e}};export{fetchPostPurchasePageDataByID,fetchSalePageDataByID,fetchThemePageDataByTemplateID,getPostPurchasePropsPreview};
|
|
@@ -1,16 +1 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { getProductProps } from './get-product-props.js';
|
|
3
|
-
import { getStaticPageProps } from './get-static-page-props.js';
|
|
4
|
-
|
|
5
|
-
const getPreviewProps = (fetcher, shopifyFetcher)=>async (pageType, slug)=>{
|
|
6
|
-
switch(pageType){
|
|
7
|
-
case 'COLLECTION':
|
|
8
|
-
return getCollectionProps(fetcher)(slug);
|
|
9
|
-
case 'PRODUCT':
|
|
10
|
-
return getProductProps(fetcher)(slug);
|
|
11
|
-
default:
|
|
12
|
-
return getStaticPageProps(fetcher, shopifyFetcher)(slug);
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
export { getPreviewProps };
|
|
1
|
+
import{getCollectionProps as r}from"./get-collection-props.js";import{getProductProps as e}from"./get-product-props.js";import{getStaticPageProps as t}from"./get-static-page-props.js";let getPreviewProps=(o,p)=>async(s,c)=>{switch(s){case"COLLECTION":return r(o)(c);case"PRODUCT":return e(o)(c);default:return t(o,p)(c)}};export{getPreviewProps};
|
|
@@ -1,71 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { genCSS } from '../helpers/gen-css.js';
|
|
3
|
-
import { parseBuilderTemplate } from '../helpers/normalize.js';
|
|
4
|
-
import { serializableJson } from '../helpers/parse-json.js';
|
|
5
|
-
|
|
6
|
-
const getProductProps = (fetcher)=>async (handle)=>{
|
|
7
|
-
const pageType = 'PRODUCT';
|
|
8
|
-
const variables = {
|
|
9
|
-
slug: handle,
|
|
10
|
-
slugType: pageType
|
|
11
|
-
};
|
|
12
|
-
const [product, theme] = await Promise.all([
|
|
13
|
-
getProductBySlug(fetcher, handle),
|
|
14
|
-
fetcher([
|
|
15
|
-
PublishedThemePagesDocument,
|
|
16
|
-
variables
|
|
17
|
-
])
|
|
18
|
-
]);
|
|
19
|
-
const dataBuilder = theme.publishedThemePages?.[0];
|
|
20
|
-
if (!product || !dataBuilder) {
|
|
21
|
-
throw new Error('Product not found');
|
|
22
|
-
}
|
|
23
|
-
const productTemplate = parseBuilderTemplate(dataBuilder);
|
|
24
|
-
const queries = prefetchQueries(productTemplate);
|
|
25
|
-
const datas = await Promise.allSettled(queries.map(({ query, variables, func })=>{
|
|
26
|
-
if (func) {
|
|
27
|
-
return func(fetcher, variables);
|
|
28
|
-
}
|
|
29
|
-
if (query) return fetcher([
|
|
30
|
-
query,
|
|
31
|
-
variables
|
|
32
|
-
]);
|
|
33
|
-
return {};
|
|
34
|
-
}));
|
|
35
|
-
const fallback = queries.reduce((acc, { key }, index)=>{
|
|
36
|
-
const res = datas[index];
|
|
37
|
-
if (res?.status === 'fulfilled') {
|
|
38
|
-
return {
|
|
39
|
-
...acc,
|
|
40
|
-
[key]: res.value
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
return acc;
|
|
44
|
-
}, {});
|
|
45
|
-
return serializableJson({
|
|
46
|
-
builderData: productTemplate,
|
|
47
|
-
themeStyle: genCSS(dataBuilder.pageStyle?.data),
|
|
48
|
-
pageType,
|
|
49
|
-
swr: {
|
|
50
|
-
fallback
|
|
51
|
-
},
|
|
52
|
-
seo: {
|
|
53
|
-
title: product.title,
|
|
54
|
-
description: product.description,
|
|
55
|
-
openGraph: {
|
|
56
|
-
images: product.featuredImage?.src ? [
|
|
57
|
-
{
|
|
58
|
-
url: product.featuredImage.src,
|
|
59
|
-
alt: product.featuredImage?.alt,
|
|
60
|
-
height: product.featuredImage?.height,
|
|
61
|
-
width: product.featuredImage?.width,
|
|
62
|
-
type: product.featuredImage?.contentType
|
|
63
|
-
}
|
|
64
|
-
] : []
|
|
65
|
-
}
|
|
66
|
-
},
|
|
67
|
-
product
|
|
68
|
-
});
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
export { getProductProps };
|
|
1
|
+
import{getProductBySlug as e,PublishedThemePagesDocument as t,prefetchQueries as r}from"@gem-sdk/core";import{genCSS as a}from"../helpers/gen-css.js";import{parseBuilderTemplate as s}from"../helpers/normalize.js";import{serializableJson as l}from"../helpers/parse-json.js";let getProductProps=o=>async i=>{let m="PRODUCT",d={slug:i,slugType:m},[p,u]=await Promise.all([e(o,i),o([t,d])]),g=u.publishedThemePages?.[0];if(!p||!g)throw Error("Product not found");let f=s(g),h=r(f),n=await Promise.allSettled(h.map(({query:e,variables:t,func:r})=>r?r(o,t):e?o([e,t]):{})),c=h.reduce((e,{key:t},r)=>{let a=n[r];return a?.status==="fulfilled"?{...e,[t]:a.value}:e},{});return l({builderData:f,themeStyle:a(g.pageStyle?.data),pageType:m,swr:{fallback:c},seo:{title:p.title,description:p.description,openGraph:{images:p.featuredImage?.src?[{url:p.featuredImage.src,alt:p.featuredImage?.alt,height:p.featuredImage?.height,width:p.featuredImage?.width,type:p.featuredImage?.contentType}]:[]}},product:p})};export{getProductProps};
|
|
@@ -1,148 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { ShopMetaDocument } from '@gem-sdk/adapter-shopify';
|
|
3
|
-
import { captureException } from '@sentry/nextjs';
|
|
4
|
-
import { getFontStyleFromPageTemplate, getFontFromGlobalStyle } from '../google-fonts.js';
|
|
5
|
-
import { genCSS } from '../helpers/gen-css.js';
|
|
6
|
-
import { generateManifest } from '../helpers/generate-manifres.js';
|
|
7
|
-
import { getFallbackV2 } from '../helpers/get-fallback.js';
|
|
8
|
-
import { parseBuilderTemplateV2 } from '../helpers/normalize.js';
|
|
9
|
-
import { parseJson, serializableJson } from '../helpers/parse-json.js';
|
|
10
|
-
|
|
11
|
-
const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
|
|
12
|
-
try {
|
|
13
|
-
const pageType = 'STATIC';
|
|
14
|
-
const variables = {
|
|
15
|
-
handleURL: slug,
|
|
16
|
-
pageType
|
|
17
|
-
};
|
|
18
|
-
const [theme, storeProperty, shopifyMeta] = await Promise.allSettled([
|
|
19
|
-
fetcher([
|
|
20
|
-
PreviewPageDocument,
|
|
21
|
-
variables,
|
|
22
|
-
'previewPage'
|
|
23
|
-
]),
|
|
24
|
-
fetcher([
|
|
25
|
-
StorePropertyDocument
|
|
26
|
-
]),
|
|
27
|
-
shopifyFetcher([
|
|
28
|
-
ShopMetaDocument
|
|
29
|
-
])
|
|
30
|
-
]);
|
|
31
|
-
if (theme.status === 'rejected') {
|
|
32
|
-
throw new Error(theme.reason?.[0]);
|
|
33
|
-
}
|
|
34
|
-
const dataBuilder = theme.value.previewPage;
|
|
35
|
-
if (!dataBuilder) {
|
|
36
|
-
throw new Error(`No data builder found for slug: /preview/${slug}`);
|
|
37
|
-
}
|
|
38
|
-
const pageTemplate = parseBuilderTemplateV2(dataBuilder);
|
|
39
|
-
const [elementFontStyle, fontStyle, fallback] = await Promise.all([
|
|
40
|
-
getFontStyleFromPageTemplate(pageTemplate),
|
|
41
|
-
getFontFromGlobalStyle(dataBuilder?.pageStyle?.data),
|
|
42
|
-
getFallbackV2(fetcher, pageTemplate)
|
|
43
|
-
]);
|
|
44
|
-
const mobileOnly = dataBuilder.isMobile ?? false;
|
|
45
|
-
const description = dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-description')?.value;
|
|
46
|
-
const thumbnail = parseJson(dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-thumbnail')?.value);
|
|
47
|
-
const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
|
|
48
|
-
const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
|
|
49
|
-
const favicon = shopData?.storeProperty?.favicon ?? '/favicon/favicon-32x32.png';
|
|
50
|
-
const seo = {
|
|
51
|
-
defaultTitle: shopMeta?.shop.name,
|
|
52
|
-
title: dataBuilder?.name,
|
|
53
|
-
description: description ?? shopMeta?.shop.description,
|
|
54
|
-
openGraph: {
|
|
55
|
-
site_name: shopMeta?.shop.name,
|
|
56
|
-
locale: shopMeta?.localization.country.isoCode,
|
|
57
|
-
title: dataBuilder?.name ?? shopMeta?.shop.name,
|
|
58
|
-
description: description ?? shopMeta?.shop.description,
|
|
59
|
-
images: thumbnail ? [
|
|
60
|
-
thumbnail
|
|
61
|
-
] : []
|
|
62
|
-
},
|
|
63
|
-
nofollow: true,
|
|
64
|
-
noindex: true,
|
|
65
|
-
canonical: `/preview/${slug}`,
|
|
66
|
-
additionalMetaTags: [
|
|
67
|
-
{
|
|
68
|
-
name: 'theme-color',
|
|
69
|
-
content: '#000000'
|
|
70
|
-
}
|
|
71
|
-
],
|
|
72
|
-
additionalLinkTags: [
|
|
73
|
-
{
|
|
74
|
-
rel: 'icon',
|
|
75
|
-
sizes: '32x32',
|
|
76
|
-
href: `${favicon}-/crop/1:1/center/-/smart_resize/32x32/`
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
rel: 'icon',
|
|
80
|
-
sizes: '16x16',
|
|
81
|
-
href: `${favicon}-/crop/1:1/center/-/smart_resize/16x16/`
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
rel: 'apple-touch-icon',
|
|
85
|
-
sizes: '180x180',
|
|
86
|
-
href: `${favicon}-/crop/1:1/center/-/smart_resize/180x180/`
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
rel: 'manifest',
|
|
90
|
-
href: generateManifest({
|
|
91
|
-
theme_color: '#000000',
|
|
92
|
-
background_color: '#ffffff',
|
|
93
|
-
display: 'standalone',
|
|
94
|
-
scope: '/',
|
|
95
|
-
start_url: '/',
|
|
96
|
-
name: shopMeta?.shop.name,
|
|
97
|
-
short_name: shopMeta?.shop.name,
|
|
98
|
-
description: shopMeta?.shop.description,
|
|
99
|
-
icons: [
|
|
100
|
-
{
|
|
101
|
-
src: `${favicon}-/crop/1:1/center/-/smart_resize/192x192/`,
|
|
102
|
-
sizes: '192x192',
|
|
103
|
-
type: 'image/png',
|
|
104
|
-
purpose: 'any maskable'
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
src: `${favicon}-/crop/1:1/center/-/smart_resize/512x512/`,
|
|
108
|
-
sizes: '512x512',
|
|
109
|
-
type: 'image/png'
|
|
110
|
-
}
|
|
111
|
-
]
|
|
112
|
-
})
|
|
113
|
-
}
|
|
114
|
-
]
|
|
115
|
-
};
|
|
116
|
-
const languageIsoCode = shopMeta?.localization.language.isoCode ?? null;
|
|
117
|
-
const countryIsoCode = shopMeta?.localization.country.isoCode ?? null;
|
|
118
|
-
const locale = !languageIsoCode || !countryIsoCode ? null : `${languageIsoCode}-${countryIsoCode}`;
|
|
119
|
-
return serializableJson({
|
|
120
|
-
themeStyle: genCSS(dataBuilder?.pageStyle?.data, mobileOnly),
|
|
121
|
-
fontStyle,
|
|
122
|
-
elementFontStyle,
|
|
123
|
-
builderData: pageTemplate,
|
|
124
|
-
pageType,
|
|
125
|
-
moneyFormat: shopMeta?.shop.moneyFormat ?? null,
|
|
126
|
-
currency: shopMeta?.localization.country.currency.isoCode ?? null,
|
|
127
|
-
languageIsoCode,
|
|
128
|
-
countryIsoCode,
|
|
129
|
-
locale,
|
|
130
|
-
swr: {
|
|
131
|
-
fallback
|
|
132
|
-
},
|
|
133
|
-
swatches: parseJson(shopData?.storeProperty?.swatchesConfig),
|
|
134
|
-
seo,
|
|
135
|
-
mobileOnly,
|
|
136
|
-
gaTrackingId: dataBuilder.themePageAnalytic?.gaTrackingID ?? null,
|
|
137
|
-
facebookPixelId: dataBuilder.themePageAnalytic?.fbPixelID ?? null,
|
|
138
|
-
tiktokPixelId: dataBuilder.themePageAnalytic?.tiktokPixelID ?? null,
|
|
139
|
-
customCodeHeader: dataBuilder.themePageCustomCode?.header ?? null,
|
|
140
|
-
customCodeBody: dataBuilder.themePageCustomCode?.body ?? null
|
|
141
|
-
});
|
|
142
|
-
} catch (err) {
|
|
143
|
-
captureException(err);
|
|
144
|
-
throw err;
|
|
145
|
-
}
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
export { getStaticPagePropsPreview };
|
|
1
|
+
import{PreviewPageDocument as e,StorePropertyDocument as o}from"@gem-sdk/core";import{ShopMetaDocument as t}from"@gem-sdk/adapter-shopify";import{captureException as a}from"@sentry/nextjs";import{getFontStyleFromPageTemplate as r,getFontFromGlobalStyle as i}from"../google-fonts.js";import{genCSS as s}from"../helpers/gen-css.js";import{generateManifest as l}from"../helpers/generate-manifres.js";import{getFallbackV2 as n}from"../helpers/get-fallback.js";import{parseBuilderTemplateV2 as c}from"../helpers/normalize.js";import{parseJson as m,serializableJson as p}from"../helpers/parse-json.js";let getStaticPagePropsPreview=(d,f)=>async g=>{try{let a="STATIC",h={handleURL:g,pageType:a},[u,y,P]=await Promise.allSettled([d([e,h,"previewPage"]),d([o]),f([t])]);if("rejected"===u.status)throw Error(u.reason?.[0]);let x=u.value.previewPage;if(!x)throw Error(`No data builder found for slug: /preview/${g}`);let v=c(x),[k,w,z]=await Promise.all([r(v),i(x?.pageStyle?.data),n(d,v)]),b=x.isMobile??!1,C=x?.themePageDataSEO?.find(e=>e?.key==="global-meta-description")?.value,_=m(x?.themePageDataSEO?.find(e=>e?.key==="global-meta-thumbnail")?.value),j="fulfilled"===P.status?P.value:void 0,S="fulfilled"===y.status?y.value:void 0,$=S?.storeProperty?.favicon??"/favicon/favicon-32x32.png",I={defaultTitle:j?.shop.name,title:x?.name,description:C??j?.shop.description,openGraph:{site_name:j?.shop.name,locale:j?.localization.country.isoCode,title:x?.name??j?.shop.name,description:C??j?.shop.description,images:_?[_]:[]},nofollow:!0,noindex:!0,canonical:`/preview/${g}`,additionalMetaTags:[{name:"theme-color",content:"#000000"}],additionalLinkTags:[{rel:"icon",sizes:"32x32",href:`${$}-/crop/1:1/center/-/smart_resize/32x32/`},{rel:"icon",sizes:"16x16",href:`${$}-/crop/1:1/center/-/smart_resize/16x16/`},{rel:"apple-touch-icon",sizes:"180x180",href:`${$}-/crop/1:1/center/-/smart_resize/180x180/`},{rel:"manifest",href:l({theme_color:"#000000",background_color:"#ffffff",display:"standalone",scope:"/",start_url:"/",name:j?.shop.name,short_name:j?.shop.name,description:j?.shop.description,icons:[{src:`${$}-/crop/1:1/center/-/smart_resize/192x192/`,sizes:"192x192",type:"image/png",purpose:"any maskable"},{src:`${$}-/crop/1:1/center/-/smart_resize/512x512/`,sizes:"512x512",type:"image/png"}]})}]},T=j?.localization.language.isoCode??null,D=j?.localization.country.isoCode??null,A=T&&D?`${T}-${D}`:null;return p({themeStyle:s(x?.pageStyle?.data,b),fontStyle:w,elementFontStyle:k,builderData:v,pageType:a,moneyFormat:j?.shop.moneyFormat??null,currency:j?.localization.country.currency.isoCode??null,languageIsoCode:T,countryIsoCode:D,locale:A,swr:{fallback:z},swatches:m(S?.storeProperty?.swatchesConfig),seo:I,mobileOnly:b,gaTrackingId:x.themePageAnalytic?.gaTrackingID??null,facebookPixelId:x.themePageAnalytic?.fbPixelID??null,tiktokPixelId:x.themePageAnalytic?.tiktokPixelID??null,customCodeHeader:x.themePageCustomCode?.header??null,customCodeBody:x.themePageCustomCode?.body??null})}catch(e){throw a(e),e}};export{getStaticPagePropsPreview};
|