@gem-sdk/pages 1.13.42 → 1.14.0-dev.284

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