@gem-sdk/pages 2.0.0-staging.709 → 2.0.0-staging.764

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 (145) 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 -33
  4. package/dist/cjs/components/FooterForPostPurchase.js +1 -34
  5. package/dist/cjs/components/GoogleAnalytic.js +5 -65
  6. package/dist/cjs/components/TikTokPixel.js +3 -19
  7. package/dist/cjs/components/builder/Body.js +1 -36
  8. package/dist/cjs/components/builder/Footer.js +1 -154
  9. package/dist/cjs/components/builder/Header.js +1 -186
  10. package/dist/cjs/components/builder/PopupManager.js +1 -63
  11. package/dist/cjs/components/builder/SwitchView.js +1 -184
  12. package/dist/cjs/components/builder/Toolbar.js +1 -706
  13. package/dist/cjs/components/builder/Toolbox.js +1 -508
  14. package/dist/cjs/components/builder/const.js +1 -56
  15. package/dist/cjs/components/builder/toolbar/const.js +1 -7
  16. package/dist/cjs/components/builder/toolbar/utils/findDOMClosest.js +1 -41
  17. package/dist/cjs/components/builder/toolbar/utils/findOverflowParent.js +1 -20
  18. package/dist/cjs/components/builder/toolbar/utils/getChildrenByAttrSelector.js +1 -18
  19. package/dist/cjs/components/builder/toolbar/utils/getDOMElementParents.js +1 -32
  20. package/dist/cjs/components/builder/toolbar/utils/isOverParent.js +1 -16
  21. package/dist/cjs/components/builder/toolbar/utils/isOverToolbarPosition.js +1 -12
  22. package/dist/cjs/components/builder/toolbar/utils/isSection.js +1 -8
  23. package/dist/cjs/components/builder/toolbar/utils/notVisible.js +1 -8
  24. package/dist/cjs/components/builder/toolbar/utils/waitForElementToExist.js +1 -27
  25. package/dist/cjs/components/composable/getListFontWeightTypos.js +1 -14
  26. package/dist/cjs/components/image-to-layout/AddSectionImageToLayout.js +1 -151
  27. package/dist/cjs/components/image-to-layout/DropElement.js +1 -191
  28. package/dist/cjs/components/image-to-layout/ImageToLayout.js +1 -41
  29. package/dist/cjs/constants/index.js +1 -15
  30. package/dist/cjs/index.js +1 -80
  31. package/dist/cjs/layouts/main.js +1 -30
  32. package/dist/cjs/libs/api/get-builder-props.js +1 -46
  33. package/dist/cjs/libs/api/get-collection-props.js +1 -68
  34. package/dist/cjs/libs/api/get-home-page-props-v2.js +1 -157
  35. package/dist/cjs/libs/api/get-home-page-props.js +1 -163
  36. package/dist/cjs/libs/api/get-post-purchase-props-preview.js +1 -301
  37. package/dist/cjs/libs/api/get-preview-props.js +1 -18
  38. package/dist/cjs/libs/api/get-product-props.js +1 -73
  39. package/dist/cjs/libs/api/get-static-page-props-preview.js +1 -160
  40. package/dist/cjs/libs/api/get-static-page-props-v2.js +1 -173
  41. package/dist/cjs/libs/api/get-static-page-props.js +1 -161
  42. package/dist/cjs/libs/custom-fonts.js +6 -60
  43. package/dist/cjs/libs/fetcher.js +1 -100
  44. package/dist/cjs/libs/get-layout.js +1 -13
  45. package/dist/cjs/libs/get-storefront-api.js +1 -12
  46. package/dist/cjs/libs/getStaticPaths.js +1 -10
  47. package/dist/cjs/libs/google-fonts.js +1 -138
  48. package/dist/cjs/libs/helpers/check-option-font.js +1 -65
  49. package/dist/cjs/libs/helpers/common.js +1 -27
  50. package/dist/cjs/libs/helpers/gen-css.js +1 -135
  51. package/dist/cjs/libs/helpers/gen-fonts.js +1 -96
  52. package/dist/cjs/libs/helpers/generate-manifres.js +1 -5
  53. package/dist/cjs/libs/helpers/get-fallback.js +1 -34
  54. package/dist/cjs/libs/helpers/get-metafield.js +1 -7
  55. package/dist/cjs/libs/helpers/normalize.js +1 -112
  56. package/dist/cjs/libs/helpers/parse-json.js +1 -16
  57. package/dist/cjs/libs/helpers/sentry.js +1 -17
  58. package/dist/cjs/libs/helpers/user-agent.js +1 -7
  59. package/dist/cjs/libs/hooks/use-tracking-view.js +1 -42
  60. package/dist/cjs/libs/hooks/usePagePreview.js +1 -92
  61. package/dist/cjs/libs/parse-html.js +1 -34
  62. package/dist/cjs/libs/shopify-cdn-with-google-fonts.js +1 -1845
  63. package/dist/cjs/pages/404.js +1 -43
  64. package/dist/cjs/pages/500.js +1 -74
  65. package/dist/cjs/pages/CollectionGlobalProvider.js +1 -59
  66. package/dist/cjs/pages/builder.js +1 -119
  67. package/dist/cjs/pages/collection-detail.js +1 -64
  68. package/dist/cjs/pages/preview.js +1 -26
  69. package/dist/cjs/pages/product-detail.js +1 -69
  70. package/dist/cjs/pages/static-v2.js +3 -142
  71. package/dist/cjs/pages/static.js +1 -75
  72. package/dist/cjs/store/libs-store.js +1 -14
  73. package/dist/esm/components/ErrorBoundary.js +1 -38
  74. package/dist/esm/components/ErrorFallback.js +1 -24
  75. package/dist/esm/components/FacebookPixel.js +3 -31
  76. package/dist/esm/components/FooterForPostPurchase.js +1 -30
  77. package/dist/esm/components/GoogleAnalytic.js +5 -63
  78. package/dist/esm/components/TikTokPixel.js +3 -17
  79. package/dist/esm/components/builder/Body.js +1 -32
  80. package/dist/esm/components/builder/Footer.js +1 -150
  81. package/dist/esm/components/builder/Header.js +1 -182
  82. package/dist/esm/components/builder/PopupManager.js +1 -59
  83. package/dist/esm/components/builder/SwitchView.js +1 -180
  84. package/dist/esm/components/builder/Toolbar.js +1 -702
  85. package/dist/esm/components/builder/Toolbox.js +1 -504
  86. package/dist/esm/components/builder/const.js +1 -54
  87. package/dist/esm/components/builder/toolbar/const.js +1 -4
  88. package/dist/esm/components/builder/toolbar/utils/findDOMClosest.js +1 -39
  89. package/dist/esm/components/builder/toolbar/utils/findOverflowParent.js +1 -18
  90. package/dist/esm/components/builder/toolbar/utils/getChildrenByAttrSelector.js +1 -16
  91. package/dist/esm/components/builder/toolbar/utils/getDOMElementParents.js +1 -30
  92. package/dist/esm/components/builder/toolbar/utils/isOverParent.js +1 -14
  93. package/dist/esm/components/builder/toolbar/utils/isOverToolbarPosition.js +1 -10
  94. package/dist/esm/components/builder/toolbar/utils/isSection.js +1 -6
  95. package/dist/esm/components/builder/toolbar/utils/notVisible.js +1 -6
  96. package/dist/esm/components/builder/toolbar/utils/waitForElementToExist.js +1 -25
  97. package/dist/esm/components/composable/getListFontWeightTypos.js +1 -12
  98. package/dist/esm/components/image-to-layout/AddSectionImageToLayout.js +1 -147
  99. package/dist/esm/components/image-to-layout/DropElement.js +1 -189
  100. package/dist/esm/components/image-to-layout/ImageToLayout.js +1 -37
  101. package/dist/esm/constants/index.js +1 -15
  102. package/dist/esm/index.js +1 -35
  103. package/dist/esm/layouts/main.js +1 -26
  104. package/dist/esm/libs/api/get-builder-props.js +1 -44
  105. package/dist/esm/libs/api/get-collection-props.js +1 -66
  106. package/dist/esm/libs/api/get-home-page-props-v2.js +1 -155
  107. package/dist/esm/libs/api/get-home-page-props.js +1 -161
  108. package/dist/esm/libs/api/get-post-purchase-props-preview.js +1 -293
  109. package/dist/esm/libs/api/get-preview-props.js +1 -16
  110. package/dist/esm/libs/api/get-product-props.js +1 -71
  111. package/dist/esm/libs/api/get-static-page-props-preview.js +1 -158
  112. package/dist/esm/libs/api/get-static-page-props-v2.js +1 -171
  113. package/dist/esm/libs/api/get-static-page-props.js +1 -159
  114. package/dist/esm/libs/custom-fonts.js +6 -55
  115. package/dist/esm/libs/fetcher.js +1 -96
  116. package/dist/esm/libs/get-layout.js +1 -11
  117. package/dist/esm/libs/get-storefront-api.js +1 -10
  118. package/dist/esm/libs/getStaticPaths.js +1 -8
  119. package/dist/esm/libs/google-fonts.js +1 -132
  120. package/dist/esm/libs/helpers/check-option-font.js +1 -63
  121. package/dist/esm/libs/helpers/common.js +1 -24
  122. package/dist/esm/libs/helpers/gen-css.js +1 -133
  123. package/dist/esm/libs/helpers/gen-fonts.js +1 -93
  124. package/dist/esm/libs/helpers/generate-manifres.js +1 -3
  125. package/dist/esm/libs/helpers/get-fallback.js +1 -32
  126. package/dist/esm/libs/helpers/get-metafield.js +1 -5
  127. package/dist/esm/libs/helpers/normalize.js +1 -104
  128. package/dist/esm/libs/helpers/parse-json.js +1 -13
  129. package/dist/esm/libs/helpers/sentry.js +1 -15
  130. package/dist/esm/libs/helpers/user-agent.js +1 -5
  131. package/dist/esm/libs/hooks/use-tracking-view.js +1 -40
  132. package/dist/esm/libs/hooks/usePagePreview.js +1 -90
  133. package/dist/esm/libs/parse-html.js +1 -32
  134. package/dist/esm/libs/shopify-cdn-with-google-fonts.js +1 -1843
  135. package/dist/esm/pages/404.js +1 -41
  136. package/dist/esm/pages/500.js +1 -72
  137. package/dist/esm/pages/CollectionGlobalProvider.js +1 -55
  138. package/dist/esm/pages/builder.js +1 -117
  139. package/dist/esm/pages/collection-detail.js +1 -60
  140. package/dist/esm/pages/preview.js +1 -24
  141. package/dist/esm/pages/product-detail.js +1 -65
  142. package/dist/esm/pages/static-v2.js +3 -140
  143. package/dist/esm/pages/static.js +1 -71
  144. package/dist/esm/store/libs-store.js +1 -12
  145. package/package.json +5 -5
@@ -1,27 +1,2 @@
1
1
  'use client';
2
- import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
3
- import { useShopStore, cls, AddOn } from '@gem-sdk/core';
4
- import { parseHtml } from '../libs/parse-html.js';
5
-
6
- const MainLayout = ({ children, ...props })=>{
7
- const mobileOnly = useShopStore((s)=>s.mobileOnly);
8
- return /*#__PURE__*/ jsxs(Fragment, {
9
- children: [
10
- parseHtml('custom-code-body', props?.customCodeBody),
11
- /*#__PURE__*/ jsx("div", {
12
- className: cls({
13
- 'gp-max-w-mobile gp-mx-auto gp-w-full': mobileOnly
14
- }),
15
- children: children
16
- }),
17
- /*#__PURE__*/ jsx(AddOn, {
18
- name: "cookie-bar"
19
- }),
20
- /*#__PURE__*/ jsx(AddOn, {
21
- name: "cart-drawer"
22
- })
23
- ]
24
- });
25
- };
26
-
27
- export { MainLayout as default };
2
+ import{jsxs as e,Fragment as o,jsx as r}from"react/jsx-runtime";import{useShopStore as m,cls as a,AddOn as t}from"@gem-sdk/core";import{parseHtml as i}from"../libs/parse-html.js";let MainLayout=({children:l,...c})=>{let d=m(e=>e.mobileOnly);return e(o,{children:[i("custom-code-body",c?.customCodeBody),r("div",{className:a({"gp-max-w-mobile gp-mx-auto gp-w-full":d}),children:l}),r(t,{name:"cookie-bar"}),r(t,{name:"cart-drawer"})]})};export{MainLayout as default};
@@ -1,44 +1 @@
1
- import { StorePropertyDocument, ShopShopifyDocument } from '@gem-sdk/core';
2
- import { ShopMetaDocument } from '@gem-sdk/adapter-shopify';
3
- import { serializableJson, parseJson } from '../helpers/parse-json.js';
4
-
5
- const getBuilderProps = async (fetcher, shopifyFetcher)=>{
6
- const [storeProperty, shopifyMeta, shopifyInfo] = await Promise.allSettled([
7
- fetcher([
8
- StorePropertyDocument
9
- ]),
10
- shopifyFetcher([
11
- ShopMetaDocument
12
- ]),
13
- fetcher([
14
- ShopShopifyDocument
15
- ])
16
- ]);
17
- const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
18
- const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
19
- const shopInfo = shopifyInfo.status === 'fulfilled' ? shopifyInfo.value : undefined;
20
- const seo = shopMeta ? {
21
- titleTemplate: `%s | ${shopMeta.shop.name}`,
22
- defaultTitle: shopMeta?.shop.name,
23
- title: 'Preview',
24
- description: shopMeta?.shop.description
25
- } : {};
26
- const languageIsoCode = shopMeta?.localization.language.isoCode ?? null;
27
- const countryIsoCode = shopMeta?.localization.country.isoCode ?? null;
28
- const locale = !languageIsoCode || !countryIsoCode ? null : `${languageIsoCode}-${countryIsoCode}`;
29
- return serializableJson({
30
- moneyFormat: shopMeta?.shop.moneyFormat ?? null,
31
- currency: shopMeta?.localization.country.currency.isoCode ?? null,
32
- languageIsoCode,
33
- countryIsoCode,
34
- locale,
35
- swatches: parseJson(shopData?.storeProperty?.swatchesConfig),
36
- swr: {
37
- revalidateOnMount: true
38
- },
39
- seo,
40
- timezone: shopInfo?.shopShopify?.timezone
41
- });
42
- };
43
-
44
- export { getBuilderProps };
1
+ import{StorePropertyDocument as e,ShopShopifyDocument as o}from"@gem-sdk/core";import{ShopMetaDocument as l}from"@gem-sdk/adapter-shopify";import{serializableJson as t,parseJson as i}from"../helpers/parse-json.js";let getBuilderProps=async(r,s)=>{let[a,n,u]=await Promise.allSettled([r([e]),s([l]),r([o])]),p="fulfilled"===n.status?n.value:void 0,d="fulfilled"===a.status?a.value:void 0,m="fulfilled"===u.status?u.value:void 0,c=p?{titleTemplate:`%s | ${p.shop.name}`,defaultTitle:p?.shop.name,title:"Preview",description:p?.shop.description}:{},f=p?.localization.language.isoCode??null,h=p?.localization.country.isoCode??null,y=f&&h?`${f}-${h}`:null;return t({moneyFormat:p?.shop.moneyFormat??null,currency:p?.localization.country.currency.isoCode??null,languageIsoCode:f,countryIsoCode:h,locale:y,swatches:i(d?.storeProperty?.swatchesConfig),swr:{revalidateOnMount:!0},seo:c,timezone:m?.shopShopify?.timezone})};export{getBuilderProps};
@@ -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,155 +1 @@
1
- import { PublishedThemePagesDocument, StorePropertyDocument, PublishedShopMetasDocument } from '@gem-sdk/core';
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
- import { PublishedThemePageMetafields } from '../../constants/index.js';
11
- import { getPublishedThemePageMetafieldByKey } from '../helpers/get-metafield.js';
12
-
13
- const getHomePagePropsV2 = (fetcher, shopifyFetcher)=>async ()=>{
14
- try {
15
- const variables = {
16
- slugType: 'STATIC'
17
- };
18
- const [theme, storeProperty, shopifyMeta, publishedShopMetas] = await Promise.allSettled([
19
- fetcher([
20
- PublishedThemePagesDocument,
21
- variables
22
- ]),
23
- fetcher([
24
- StorePropertyDocument
25
- ]),
26
- shopifyFetcher([
27
- ShopMetaDocument
28
- ]),
29
- fetcher([
30
- PublishedShopMetasDocument,
31
- {
32
- keys: [
33
- PublishedThemePageMetafields.GLOBAL_META_DESCRIPTION,
34
- PublishedThemePageMetafields.GLOBAL_META_THUMBNAIL
35
- ]
36
- }
37
- ])
38
- ]);
39
- if (theme.status === 'rejected') {
40
- throw new Error(theme.reason?.[0]);
41
- }
42
- const publishedShopMetaValue = publishedShopMetas.status === 'fulfilled' ? publishedShopMetas.value : undefined;
43
- const dataBuilder = theme.value?.publishedThemePages?.[0];
44
- if (!dataBuilder) {
45
- throw new Error(`No data builder found for Home page`);
46
- }
47
- const homeTemplate = parseBuilderTemplateV2(dataBuilder);
48
- const [elementFontStyle, fontStyle, fallback] = await Promise.all([
49
- getFontStyleFromPageTemplate(homeTemplate),
50
- getFontFromGlobalStyle(dataBuilder?.pageStyle?.data),
51
- getFallbackV2(fetcher, homeTemplate)
52
- ]);
53
- const mobileOnly = dataBuilder.isMobile ?? false;
54
- const description = getPublishedThemePageMetafieldByKey(PublishedThemePageMetafields.GLOBAL_META_DESCRIPTION, dataBuilder?.metafields) || publishedShopMetaValue?.publishedShopMetas?.find((item)=>item?.key === PublishedThemePageMetafields.GLOBAL_META_DESCRIPTION)?.value;
55
- const thumbnail = parseJson(getPublishedThemePageMetafieldByKey(PublishedThemePageMetafields.GLOBAL_META_THUMBNAIL, dataBuilder?.metafields) || publishedShopMetaValue?.publishedShopMetas?.find((item)=>item?.key === PublishedThemePageMetafields.GLOBAL_META_THUMBNAIL)?.value);
56
- const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
57
- const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
58
- const favicon = shopData?.storeProperty?.favicon ?? '/favicon/favicon-32x32.png';
59
- const seo = {
60
- defaultTitle: shopMeta?.shop.name,
61
- title: dataBuilder?.name ?? 'Home',
62
- description: description ?? shopMeta?.shop.description,
63
- openGraph: {
64
- site_name: shopMeta?.shop.name,
65
- locale: shopMeta?.localization.country.isoCode,
66
- title: dataBuilder?.name ?? shopMeta?.shop.name,
67
- description: description ?? shopMeta?.shop.description,
68
- images: thumbnail ? [
69
- thumbnail
70
- ] : []
71
- },
72
- additionalMetaTags: [
73
- {
74
- name: 'theme-color',
75
- content: '#000000'
76
- }
77
- ],
78
- canonical: `https://${shopData?.storeProperty?.primaryDomain}/`,
79
- additionalLinkTags: [
80
- {
81
- rel: 'icon',
82
- sizes: '32x32',
83
- href: `${favicon}-/crop/1:1/center/-/smart_resize/32x32/`
84
- },
85
- {
86
- rel: 'icon',
87
- sizes: '16x16',
88
- href: `${favicon}-/crop/1:1/center/-/smart_resize/16x16/`
89
- },
90
- {
91
- rel: 'apple-touch-icon',
92
- sizes: '180x180',
93
- href: `${favicon}-/crop/1:1/center/-/smart_resize/180x180/`
94
- },
95
- {
96
- rel: 'manifest',
97
- href: generateManifest({
98
- theme_color: '#000000',
99
- background_color: '#ffffff',
100
- display: 'standalone',
101
- scope: '/',
102
- start_url: '/',
103
- name: shopMeta?.shop.name,
104
- short_name: shopMeta?.shop.name,
105
- description: shopMeta?.shop.description,
106
- icons: [
107
- {
108
- src: `${favicon}-/crop/1:1/center/-/smart_resize/192x192/`,
109
- sizes: '192x192',
110
- type: 'image/png',
111
- purpose: 'any maskable'
112
- },
113
- {
114
- src: `${favicon}-/crop/1:1/center/-/smart_resize/512x512/`,
115
- sizes: '512x512',
116
- type: 'image/png'
117
- }
118
- ]
119
- })
120
- }
121
- ]
122
- };
123
- const languageIsoCode = shopMeta?.localization.language.isoCode ?? null;
124
- const countryIsoCode = shopMeta?.localization.country.isoCode ?? null;
125
- const locale = !languageIsoCode || !countryIsoCode ? null : `${languageIsoCode}-${countryIsoCode}`;
126
- return serializableJson({
127
- themeStyle: genCSS(dataBuilder?.pageStyle?.data, mobileOnly),
128
- fontStyle,
129
- elementFontStyle,
130
- builderData: homeTemplate,
131
- swr: {
132
- fallback
133
- },
134
- moneyFormat: shopMeta?.shop.moneyFormat ?? null,
135
- currency: shopMeta?.localization.country.currency.isoCode ?? null,
136
- languageIsoCode,
137
- countryIsoCode,
138
- locale,
139
- swatches: parseJson(shopData?.storeProperty?.swatchesConfig),
140
- seo,
141
- mobileOnly,
142
- gaTrackingId: getPublishedThemePageMetafieldByKey(PublishedThemePageMetafields.ANALYTICS_GA_TRACKING_ID, dataBuilder?.metafields) ?? null,
143
- facebookPixelId: getPublishedThemePageMetafieldByKey(PublishedThemePageMetafields.ANALYTICS_FB_PIXEL_ID, dataBuilder?.metafields) ?? null,
144
- tiktokPixelId: getPublishedThemePageMetafieldByKey(PublishedThemePageMetafields.ANALYTICS_TIKTOK_PIXEL_ID, dataBuilder?.metafields) ?? null,
145
- customCodeHeader: getPublishedThemePageMetafieldByKey(PublishedThemePageMetafields.CUSTOM_CODE_HEADER, dataBuilder?.metafields) ?? null,
146
- customCodeBody: getPublishedThemePageMetafieldByKey(PublishedThemePageMetafields.CUSTOM_CODE_BODY, dataBuilder?.metafields) ?? null,
147
- pageHandle: dataBuilder.handle ?? null
148
- });
149
- } catch (err) {
150
- captureException(err);
151
- throw err;
152
- }
153
- };
154
-
155
- export { getHomePagePropsV2 };
1
+ import{PublishedThemePagesDocument as e,StorePropertyDocument as o,PublishedShopMetasDocument as r}from"@gem-sdk/core";import{ShopMetaDocument as t}from"@gem-sdk/adapter-shopify";import{getFontStyleFromPageTemplate as s,getFontFromGlobalStyle as a}from"../google-fonts.js";import{genCSS as l}from"../helpers/gen-css.js";import{generateManifest as i}from"../helpers/generate-manifres.js";import{getFallbackV2 as n}from"../helpers/get-fallback.js";import{parseBuilderTemplateV2 as m}from"../helpers/normalize.js";import{parseJson as p,serializableJson as c}from"../helpers/parse-json.js";import{captureException as d}from"@sentry/nextjs";import{PublishedThemePageMetafields as f}from"../../constants/index.js";import{getPublishedThemePageMetafieldByKey as u}from"../helpers/get-metafield.js";let getHomePagePropsV2=(h,_)=>async()=>{try{let d={slugType:"STATIC"},[g,T,y,A]=await Promise.allSettled([h([e,d]),h([o]),_([t]),h([r,{keys:[f.GLOBAL_META_DESCRIPTION,f.GLOBAL_META_THUMBNAIL]}])]);if("rejected"===g.status)throw Error(g.reason?.[0]);let I="fulfilled"===A.status?A.value:void 0,L=g.value?.publishedThemePages?.[0];if(!L)throw Error("No data builder found for Home page");let C=m(L),[E,P,x]=await Promise.all([s(C),a(L?.pageStyle?.data),n(h,C)]),z=L.isMobile??!1,M=u(f.GLOBAL_META_DESCRIPTION,L?.metafields)||I?.publishedShopMetas?.find(e=>e?.key===f.GLOBAL_META_DESCRIPTION)?.value,O=p(u(f.GLOBAL_META_THUMBNAIL,L?.metafields)||I?.publishedShopMetas?.find(e=>e?.key===f.GLOBAL_META_THUMBNAIL)?.value),S="fulfilled"===y.status?y.value:void 0,k="fulfilled"===T.status?T.value:void 0,v=k?.storeProperty?.favicon??"/favicon/favicon-32x32.png",B={defaultTitle:S?.shop.name,title:L?.name??"Home",description:M??S?.shop.description,openGraph:{site_name:S?.shop.name,locale:S?.localization.country.isoCode,title:L?.name??S?.shop.name,description:M??S?.shop.description,images:O?[O]:[]},additionalMetaTags:[{name:"theme-color",content:"#000000"}],canonical:`https://${k?.storeProperty?.primaryDomain}/`,additionalLinkTags:[{rel:"icon",sizes:"32x32",href:`${v}-/crop/1:1/center/-/smart_resize/32x32/`},{rel:"icon",sizes:"16x16",href:`${v}-/crop/1:1/center/-/smart_resize/16x16/`},{rel:"apple-touch-icon",sizes:"180x180",href:`${v}-/crop/1:1/center/-/smart_resize/180x180/`},{rel:"manifest",href:i({theme_color:"#000000",background_color:"#ffffff",display:"standalone",scope:"/",start_url:"/",name:S?.shop.name,short_name:S?.shop.name,description:S?.shop.description,icons:[{src:`${v}-/crop/1:1/center/-/smart_resize/192x192/`,sizes:"192x192",type:"image/png",purpose:"any maskable"},{src:`${v}-/crop/1:1/center/-/smart_resize/512x512/`,sizes:"512x512",type:"image/png"}]})}]},D=S?.localization.language.isoCode??null,j=S?.localization.country.isoCode??null,N=D&&j?`${D}-${j}`:null;return c({themeStyle:l(L?.pageStyle?.data,z),fontStyle:P,elementFontStyle:E,builderData:C,swr:{fallback:x},moneyFormat:S?.shop.moneyFormat??null,currency:S?.localization.country.currency.isoCode??null,languageIsoCode:D,countryIsoCode:j,locale:N,swatches:p(k?.storeProperty?.swatchesConfig),seo:B,mobileOnly:z,gaTrackingId:u(f.ANALYTICS_GA_TRACKING_ID,L?.metafields)??null,facebookPixelId:u(f.ANALYTICS_FB_PIXEL_ID,L?.metafields)??null,tiktokPixelId:u(f.ANALYTICS_TIKTOK_PIXEL_ID,L?.metafields)??null,customCodeHeader:u(f.CUSTOM_CODE_HEADER,L?.metafields)??null,customCodeBody:u(f.CUSTOM_CODE_BODY,L?.metafields)??null,pageHandle:L.handle??null})}catch(e){throw d(e),e}};export{getHomePagePropsV2};
@@ -1,161 +1 @@
1
- import { PublishedThemePagesDocument, StorePropertyDocument, PublishedShopMetasDocument, 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
- import { PublishedThemePageMetafields } from '../../constants/index.js';
9
- import { getPublishedThemePageMetafieldByKey } from '../helpers/get-metafield.js';
10
-
11
- const getHomePageProps = (fetcher, shopifyFetcher)=>async ()=>{
12
- const pageType = 'STATIC';
13
- const variables = {
14
- slugType: pageType
15
- };
16
- // const theme = await fetcher<PublishedThemePagesQueryResponse, PublishedThemePagesQueryVariables>([
17
- // PublishedThemePagesDocument,
18
- // variables,
19
- // ]);
20
- const [theme, storeProperty, shopifyMeta, publishedShopMetas] = await Promise.allSettled([
21
- fetcher([
22
- PublishedThemePagesDocument,
23
- variables
24
- ]),
25
- fetcher([
26
- StorePropertyDocument
27
- ]),
28
- shopifyFetcher([
29
- ShopMetaDocument
30
- ]),
31
- fetcher([
32
- PublishedShopMetasDocument,
33
- {
34
- keys: [
35
- PublishedThemePageMetafields.GLOBAL_META_DESCRIPTION,
36
- PublishedThemePageMetafields.GLOBAL_META_THUMBNAIL
37
- ]
38
- }
39
- ])
40
- ]);
41
- if (theme.status === 'rejected') {
42
- return {
43
- pageType
44
- };
45
- }
46
- const publishedShopMetaValue = publishedShopMetas.status === 'fulfilled' ? publishedShopMetas.value : undefined;
47
- const dataBuilder = theme.value.publishedThemePages?.[0];
48
- const homeTemplate = parseBuilderTemplate(dataBuilder);
49
- const fontStyle = await getFontFromGlobalStyle(dataBuilder?.pageStyle?.data);
50
- const queries = prefetchQueries(homeTemplate);
51
- const datas = await Promise.allSettled(queries.map(({ query, variables, func })=>{
52
- if (func) {
53
- return func(fetcher, variables);
54
- }
55
- if (query) return fetcher([
56
- query,
57
- variables
58
- ]);
59
- return {};
60
- }));
61
- const fallback = queries.reduce((acc, { key }, index)=>{
62
- const res = datas[index];
63
- if (res?.status === 'fulfilled') {
64
- return {
65
- ...acc,
66
- [key]: res.value
67
- };
68
- }
69
- return acc;
70
- }, {});
71
- const description = getPublishedThemePageMetafieldByKey(PublishedThemePageMetafields.GLOBAL_META_DESCRIPTION, dataBuilder?.metafields) || publishedShopMetaValue?.publishedShopMetas?.find((item)=>item?.key === PublishedThemePageMetafields.GLOBAL_META_DESCRIPTION)?.value;
72
- const thumbnail = parseJson(getPublishedThemePageMetafieldByKey(PublishedThemePageMetafields.GLOBAL_META_THUMBNAIL, dataBuilder?.metafields) || publishedShopMetaValue?.publishedShopMetas?.find((item)=>item?.key === PublishedThemePageMetafields.GLOBAL_META_THUMBNAIL)?.value);
73
- const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
74
- const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
75
- const favicon = shopData?.storeProperty?.favicon ?? '/favicon/favicon-32x32.png';
76
- const seo = {
77
- defaultTitle: shopMeta?.shop.name,
78
- title: dataBuilder?.name ?? 'Home',
79
- description: description ?? shopMeta?.shop.description,
80
- openGraph: {
81
- site_name: shopMeta?.shop.name,
82
- locale: shopMeta?.localization.country.isoCode,
83
- title: dataBuilder?.name ?? shopMeta?.shop.name,
84
- description: description ?? shopMeta?.shop.description,
85
- images: thumbnail ? [
86
- thumbnail
87
- ] : []
88
- },
89
- additionalMetaTags: [
90
- {
91
- name: 'theme-color',
92
- content: '#000000'
93
- }
94
- ],
95
- canonical: '/',
96
- additionalLinkTags: [
97
- {
98
- rel: 'icon',
99
- sizes: '32x32',
100
- href: `${favicon}-/crop/1:1/center/-/smart_resize/32x32/`
101
- },
102
- {
103
- rel: 'icon',
104
- sizes: '16x16',
105
- href: `${favicon}-/crop/1:1/center/-/smart_resize/16x16/`
106
- },
107
- {
108
- rel: 'apple-touch-icon',
109
- sizes: '180x180',
110
- href: `${favicon}-/crop/1:1/center/-/smart_resize/180x180/`
111
- },
112
- {
113
- rel: 'manifest',
114
- href: generateManifest({
115
- theme_color: '#000000',
116
- background_color: '#ffffff',
117
- display: 'standalone',
118
- scope: '/',
119
- start_url: '/',
120
- name: shopMeta?.shop.name,
121
- short_name: shopMeta?.shop.name,
122
- description: shopMeta?.shop.description,
123
- icons: [
124
- {
125
- src: `${favicon}-/crop/1:1/center/-/smart_resize/192x192/`,
126
- sizes: '192x192',
127
- type: 'image/png',
128
- purpose: 'any maskable'
129
- },
130
- {
131
- src: `${favicon}-/crop/1:1/center/-/smart_resize/512x512/`,
132
- sizes: '512x512',
133
- type: 'image/png'
134
- }
135
- ]
136
- })
137
- }
138
- ]
139
- };
140
- const languageIsoCode = shopMeta?.localization.language.isoCode ?? null;
141
- const countryIsoCode = shopMeta?.localization.country.isoCode ?? null;
142
- const locale = !languageIsoCode || !countryIsoCode ? null : `${languageIsoCode}-${countryIsoCode}`;
143
- return serializableJson({
144
- themeStyle: genCSS(dataBuilder?.pageStyle?.data),
145
- fontStyle,
146
- builderData: homeTemplate,
147
- pageType,
148
- swr: {
149
- fallback
150
- },
151
- moneyFormat: shopMeta?.shop.moneyFormat ?? null,
152
- currency: shopMeta?.localization.country.currency.isoCode ?? null,
153
- locale,
154
- languageIsoCode,
155
- countryIsoCode,
156
- swatches: parseJson(shopData?.storeProperty?.swatchesConfig),
157
- seo
158
- });
159
- };
160
-
161
- export { getHomePageProps };
1
+ import{PublishedThemePagesDocument as e,StorePropertyDocument as o,PublishedShopMetasDocument as s,prefetchQueries as t}from"@gem-sdk/core";import{ShopMetaDocument as r}from"@gem-sdk/adapter-shopify";import{getFontFromGlobalStyle as a}from"../google-fonts.js";import{genCSS as i}from"../helpers/gen-css.js";import{generateManifest as l}from"../helpers/generate-manifres.js";import{parseBuilderTemplate as n}from"../helpers/normalize.js";import{parseJson as p,serializableJson as m}from"../helpers/parse-json.js";import{PublishedThemePageMetafields as c}from"../../constants/index.js";import{getPublishedThemePageMetafieldByKey as d}from"../helpers/get-metafield.js";let getHomePageProps=(f,u)=>async()=>{let h="STATIC",g={slugType:h},[y,_,T,A]=await Promise.allSettled([f([e,g]),f([o]),u([r]),f([s,{keys:[c.GLOBAL_META_DESCRIPTION,c.GLOBAL_META_THUMBNAIL]}])]);if("rejected"===y.status)return{pageType:h};let L="fulfilled"===A.status?A.value:void 0,z=y.value.publishedThemePages?.[0],v=n(z),x=await a(z?.pageStyle?.data),M=t(v),P=await Promise.allSettled(M.map(({query:e,variables:o,func:s})=>s?s(f,o):e?f([e,o]):{})),S=M.reduce((e,{key:o},s)=>{let t=P[s];return t?.status==="fulfilled"?{...e,[o]:t.value}:e},{}),I=d(c.GLOBAL_META_DESCRIPTION,z?.metafields)||L?.publishedShopMetas?.find(e=>e?.key===c.GLOBAL_META_DESCRIPTION)?.value,j=p(d(c.GLOBAL_META_THUMBNAIL,z?.metafields)||L?.publishedShopMetas?.find(e=>e?.key===c.GLOBAL_META_THUMBNAIL)?.value),B="fulfilled"===T.status?T.value:void 0,C="fulfilled"===_.status?_.value:void 0,E=C?.storeProperty?.favicon??"/favicon/favicon-32x32.png",O={defaultTitle:B?.shop.name,title:z?.name??"Home",description:I??B?.shop.description,openGraph:{site_name:B?.shop.name,locale:B?.localization.country.isoCode,title:z?.name??B?.shop.name,description:I??B?.shop.description,images:j?[j]:[]},additionalMetaTags:[{name:"theme-color",content:"#000000"}],canonical:"/",additionalLinkTags:[{rel:"icon",sizes:"32x32",href:`${E}-/crop/1:1/center/-/smart_resize/32x32/`},{rel:"icon",sizes:"16x16",href:`${E}-/crop/1:1/center/-/smart_resize/16x16/`},{rel:"apple-touch-icon",sizes:"180x180",href:`${E}-/crop/1:1/center/-/smart_resize/180x180/`},{rel:"manifest",href:l({theme_color:"#000000",background_color:"#ffffff",display:"standalone",scope:"/",start_url:"/",name:B?.shop.name,short_name:B?.shop.name,description:B?.shop.description,icons:[{src:`${E}-/crop/1:1/center/-/smart_resize/192x192/`,sizes:"192x192",type:"image/png",purpose:"any maskable"},{src:`${E}-/crop/1:1/center/-/smart_resize/512x512/`,sizes:"512x512",type:"image/png"}]})}]},k=B?.localization.language.isoCode??null,G=B?.localization.country.isoCode??null,$=k&&G?`${k}-${G}`:null;return m({themeStyle:i(z?.pageStyle?.data),fontStyle:x,builderData:v,pageType:h,swr:{fallback:S},moneyFormat:B?.shop.moneyFormat??null,currency:B?.localization.country.currency.isoCode??null,locale:$,languageIsoCode:k,countryIsoCode:G,swatches:p(C?.storeProperty?.swatchesConfig),seo:O})};export{getHomePageProps};