@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,171 +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, extractPageBackground } from '../helpers/normalize.js';
8
- import { parseJson, serializableJson } from '../helpers/parse-json.js';
9
- import { captureException } from '@sentry/nextjs';
10
- import { getCustomFonts } from '../custom-fonts.js';
11
- import { getPublishedThemePageMetafieldByKey } from '../helpers/get-metafield.js';
12
- import { PublishedThemePageMetafields } from '../../constants/index.js';
13
-
14
- const getStaticPagePropsV2 = (fetcher, shopifyFetcher)=>async (slug)=>{
15
- try {
16
- const pageType = 'STATIC';
17
- const variables = {
18
- slug,
19
- slugType: pageType
20
- };
21
- const [theme, storeProperty, shopifyMeta, publishedShopMetas] = await Promise.allSettled([
22
- fetcher([
23
- PublishedThemePagesDocument,
24
- variables
25
- ]),
26
- fetcher([
27
- StorePropertyDocument
28
- ]),
29
- shopifyFetcher([
30
- ShopMetaDocument
31
- ]),
32
- fetcher([
33
- PublishedShopMetasDocument,
34
- {
35
- keys: [
36
- 'source_font',
37
- PublishedThemePageMetafields.GLOBAL_META_DESCRIPTION,
38
- PublishedThemePageMetafields.GLOBAL_META_THUMBNAIL
39
- ]
40
- }
41
- ])
42
- ]);
43
- if (theme.status === 'rejected') {
44
- throw new Error(theme.reason?.[0]);
45
- }
46
- const publishedShopMetaValue = publishedShopMetas.status === 'fulfilled' ? publishedShopMetas.value : undefined;
47
- const sourceFont = publishedShopMetaValue?.publishedShopMetas?.find((item)=>item?.key === 'source_font');
48
- const dataBuilder = theme.value.publishedThemePages?.[0];
49
- const themePageCustomFonts = theme.value?.publishedThemePages?.[0]?.themePageCustomFonts;
50
- if (!dataBuilder) {
51
- throw new Error(`No data builder found for slug: /${slug}`);
52
- }
53
- const pageTemplate = parseBuilderTemplateV2(dataBuilder);
54
- const [elementFontStyle, fontStyle, fallback, customFonts] = await Promise.all([
55
- getFontStyleFromPageTemplate(pageTemplate, sourceFont?.value),
56
- getFontFromGlobalStyle(dataBuilder?.pageStyle?.data, sourceFont?.value),
57
- getFallbackV2(fetcher, pageTemplate),
58
- getCustomFonts(themePageCustomFonts)
59
- ]);
60
- const mobileOnly = dataBuilder.isMobile ?? false;
61
- const description = getPublishedThemePageMetafieldByKey(PublishedThemePageMetafields.GLOBAL_META_DESCRIPTION, dataBuilder?.metafields) || publishedShopMetaValue?.publishedShopMetas?.find((item)=>item?.key === PublishedThemePageMetafields.GLOBAL_META_DESCRIPTION)?.value;
62
- const title = getPublishedThemePageMetafieldByKey(PublishedThemePageMetafields.GLOBAL_META_TITLE, dataBuilder?.metafields) || publishedShopMetaValue?.publishedShopMetas?.find((item)=>item?.key === PublishedThemePageMetafields.GLOBAL_META_TITLE)?.value;
63
- const thumbnail = parseJson(getPublishedThemePageMetafieldByKey(PublishedThemePageMetafields.GLOBAL_META_THUMBNAIL, dataBuilder?.metafields) || publishedShopMetaValue?.publishedShopMetas?.find((item)=>item?.key === PublishedThemePageMetafields.GLOBAL_META_THUMBNAIL)?.value);
64
- const noindex = getPublishedThemePageMetafieldByKey(PublishedThemePageMetafields.NOINDEX_KEY, dataBuilder?.metafields) || publishedShopMetaValue?.publishedShopMetas?.find((item)=>item?.key === PublishedThemePageMetafields.NOINDEX_KEY)?.value;
65
- const nofollow = getPublishedThemePageMetafieldByKey(PublishedThemePageMetafields.NOFOLLOW_KEY, dataBuilder?.metafields) || publishedShopMetaValue?.publishedShopMetas?.find((item)=>item?.key === PublishedThemePageMetafields.NOFOLLOW_KEY)?.value;
66
- const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
67
- const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
68
- const favicon = shopData?.storeProperty?.favicon ?? '/favicon/favicon-32x32.png';
69
- const seo = {
70
- defaultTitle: shopMeta?.shop.name,
71
- title: title || dataBuilder?.name,
72
- description: description ?? shopMeta?.shop.description,
73
- openGraph: {
74
- site_name: shopMeta?.shop.name,
75
- locale: shopMeta?.localization.country.isoCode,
76
- title: (title || dataBuilder?.name) ?? shopMeta?.shop.name,
77
- description: description ?? shopMeta?.shop.description,
78
- images: thumbnail ? [
79
- thumbnail
80
- ] : []
81
- },
82
- noindex: noindex === 'true',
83
- nofollow: nofollow === 'true',
84
- canonical: `https://${shopData?.storeProperty?.primaryDomain}/${slug}`,
85
- additionalMetaTags: [
86
- {
87
- name: 'theme-color',
88
- content: '#000000'
89
- }
90
- ],
91
- additionalLinkTags: [
92
- {
93
- rel: 'icon',
94
- sizes: '32x32',
95
- href: `${favicon}-/crop/1:1/center/-/smart_resize/32x32/`
96
- },
97
- {
98
- rel: 'icon',
99
- sizes: '16x16',
100
- href: `${favicon}-/crop/1:1/center/-/smart_resize/16x16/`
101
- },
102
- {
103
- rel: 'apple-touch-icon',
104
- sizes: '180x180',
105
- href: `${favicon}-/crop/1:1/center/-/smart_resize/180x180/`
106
- },
107
- {
108
- rel: 'manifest',
109
- href: generateManifest({
110
- theme_color: '#000000',
111
- background_color: '#ffffff',
112
- display: 'standalone',
113
- scope: '/',
114
- start_url: '/',
115
- name: shopMeta?.shop.name,
116
- short_name: shopMeta?.shop.name,
117
- description: shopMeta?.shop.description,
118
- icons: [
119
- {
120
- src: `${favicon}-/crop/1:1/center/-/smart_resize/192x192/`,
121
- sizes: '192x192',
122
- type: 'image/png',
123
- purpose: 'any maskable'
124
- },
125
- {
126
- src: `${favicon}-/crop/1:1/center/-/smart_resize/512x512/`,
127
- sizes: '512x512',
128
- type: 'image/png'
129
- }
130
- ]
131
- })
132
- }
133
- ]
134
- };
135
- const languageIsoCode = shopMeta?.localization.language.isoCode ?? null;
136
- const countryIsoCode = shopMeta?.localization.country.isoCode ?? null;
137
- const locale = !languageIsoCode || !countryIsoCode ? null : `${languageIsoCode}-${countryIsoCode}`;
138
- return serializableJson({
139
- themeStyle: genCSS(dataBuilder?.pageStyle?.data, mobileOnly),
140
- fontStyle,
141
- elementFontStyle,
142
- builderData: pageTemplate,
143
- pageType,
144
- moneyFormat: shopMeta?.shop.moneyFormat ?? null,
145
- currency: shopMeta?.localization.country.currency.isoCode ?? null,
146
- languageIsoCode,
147
- countryIsoCode,
148
- locale,
149
- swr: {
150
- fallback
151
- },
152
- swatches: parseJson(shopData?.storeProperty?.swatchesConfig),
153
- seo,
154
- mobileOnly,
155
- gaTrackingId: getPublishedThemePageMetafieldByKey(PublishedThemePageMetafields.ANALYTICS_GA_TRACKING_ID, dataBuilder?.metafields) ?? null,
156
- facebookPixelId: getPublishedThemePageMetafieldByKey(PublishedThemePageMetafields.ANALYTICS_FB_PIXEL_ID, dataBuilder?.metafields) ?? null,
157
- tiktokPixelId: getPublishedThemePageMetafieldByKey(PublishedThemePageMetafields.ANALYTICS_TIKTOK_PIXEL_ID, dataBuilder?.metafields) ?? null,
158
- customCodeHeader: getPublishedThemePageMetafieldByKey(PublishedThemePageMetafields.CUSTOM_CODE_HEADER, dataBuilder?.metafields) ?? null,
159
- customCodeBody: getPublishedThemePageMetafieldByKey(PublishedThemePageMetafields.CUSTOM_CODE_BODY, dataBuilder?.metafields) ?? null,
160
- pageHandle: dataBuilder.handle ?? null,
161
- customFonts,
162
- interaction: dataBuilder?.interaction,
163
- pageBackground: extractPageBackground(dataBuilder)
164
- });
165
- } catch (err) {
166
- captureException(err);
167
- throw err;
168
- }
169
- };
170
-
171
- export { getStaticPagePropsV2 };
1
+ import{PublishedThemePagesDocument as e,StorePropertyDocument as o,PublishedShopMetasDocument as t}from"@gem-sdk/core";import{ShopMetaDocument as s}from"@gem-sdk/adapter-shopify";import{getFontStyleFromPageTemplate as a,getFontFromGlobalStyle as r}from"../google-fonts.js";import{genCSS as i}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 p,extractPageBackground as m}from"../helpers/normalize.js";import{parseJson as d,serializableJson as c}from"../helpers/parse-json.js";import{captureException as f}from"@sentry/nextjs";import{getCustomFonts as u}from"../custom-fonts.js";import{getPublishedThemePageMetafieldByKey as h}from"../helpers/get-metafield.js";import{PublishedThemePageMetafields as _}from"../../constants/index.js";let getStaticPagePropsV2=(g,T)=>async y=>{try{let f="STATIC",L={slug:y,slugType:f},[A,E,I,O]=await Promise.allSettled([g([e,L]),g([o]),T([s]),g([t,{keys:["source_font",_.GLOBAL_META_DESCRIPTION,_.GLOBAL_META_THUMBNAIL]}])]);if("rejected"===A.status)throw Error(A.reason?.[0]);let M="fulfilled"===O.status?O.value:void 0,S=M?.publishedShopMetas?.find(e=>e?.key==="source_font"),C=A.value.publishedThemePages?.[0],P=A.value?.publishedThemePages?.[0]?.themePageCustomFonts;if(!C)throw Error(`No data builder found for slug: /${y}`);let k=p(C),[v,x,N,b]=await Promise.all([a(k,S?.value),r(C?.pageStyle?.data,S?.value),n(g,k),u(P)]),z=C.isMobile??!1,B=h(_.GLOBAL_META_DESCRIPTION,C?.metafields)||M?.publishedShopMetas?.find(e=>e?.key===_.GLOBAL_META_DESCRIPTION)?.value,D=h(_.GLOBAL_META_TITLE,C?.metafields)||M?.publishedShopMetas?.find(e=>e?.key===_.GLOBAL_META_TITLE)?.value,j=d(h(_.GLOBAL_META_THUMBNAIL,C?.metafields)||M?.publishedShopMetas?.find(e=>e?.key===_.GLOBAL_META_THUMBNAIL)?.value),G=h(_.NOINDEX_KEY,C?.metafields)||M?.publishedShopMetas?.find(e=>e?.key===_.NOINDEX_KEY)?.value,$=h(_.NOFOLLOW_KEY,C?.metafields)||M?.publishedShopMetas?.find(e=>e?.key===_.NOFOLLOW_KEY)?.value,w="fulfilled"===I.status?I.value:void 0,Y="fulfilled"===E.status?E.value:void 0,K=Y?.storeProperty?.favicon??"/favicon/favicon-32x32.png",F={defaultTitle:w?.shop.name,title:D||C?.name,description:B??w?.shop.description,openGraph:{site_name:w?.shop.name,locale:w?.localization.country.isoCode,title:(D||C?.name)??w?.shop.name,description:B??w?.shop.description,images:j?[j]:[]},noindex:"true"===G,nofollow:"true"===$,canonical:`https://${Y?.storeProperty?.primaryDomain}/${y}`,additionalMetaTags:[{name:"theme-color",content:"#000000"}],additionalLinkTags:[{rel:"icon",sizes:"32x32",href:`${K}-/crop/1:1/center/-/smart_resize/32x32/`},{rel:"icon",sizes:"16x16",href:`${K}-/crop/1:1/center/-/smart_resize/16x16/`},{rel:"apple-touch-icon",sizes:"180x180",href:`${K}-/crop/1:1/center/-/smart_resize/180x180/`},{rel:"manifest",href:l({theme_color:"#000000",background_color:"#ffffff",display:"standalone",scope:"/",start_url:"/",name:w?.shop.name,short_name:w?.shop.name,description:w?.shop.description,icons:[{src:`${K}-/crop/1:1/center/-/smart_resize/192x192/`,sizes:"192x192",type:"image/png",purpose:"any maskable"},{src:`${K}-/crop/1:1/center/-/smart_resize/512x512/`,sizes:"512x512",type:"image/png"}]})}]},H=w?.localization.language.isoCode??null,R=w?.localization.country.isoCode??null,U=H&&R?`${H}-${R}`:null;return c({themeStyle:i(C?.pageStyle?.data,z),fontStyle:x,elementFontStyle:v,builderData:k,pageType:f,moneyFormat:w?.shop.moneyFormat??null,currency:w?.localization.country.currency.isoCode??null,languageIsoCode:H,countryIsoCode:R,locale:U,swr:{fallback:N},swatches:d(Y?.storeProperty?.swatchesConfig),seo:F,mobileOnly:z,gaTrackingId:h(_.ANALYTICS_GA_TRACKING_ID,C?.metafields)??null,facebookPixelId:h(_.ANALYTICS_FB_PIXEL_ID,C?.metafields)??null,tiktokPixelId:h(_.ANALYTICS_TIKTOK_PIXEL_ID,C?.metafields)??null,customCodeHeader:h(_.CUSTOM_CODE_HEADER,C?.metafields)??null,customCodeBody:h(_.CUSTOM_CODE_BODY,C?.metafields)??null,pageHandle:C.handle??null,customFonts:b,interaction:C?.interaction,pageBackground:m(C)})}catch(e){throw f(e),e}};export{getStaticPagePropsV2};
@@ -1,159 +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 getStaticPageProps = (fetcher, shopifyFetcher)=>async (slug)=>{
12
- const pageType = 'STATIC';
13
- const variables = {
14
- slug,
15
- slugType: pageType
16
- };
17
- const [theme, storeProperty, shopifyMeta, publishedShopMetas] = await Promise.allSettled([
18
- fetcher([
19
- PublishedThemePagesDocument,
20
- variables
21
- ]),
22
- fetcher([
23
- StorePropertyDocument
24
- ]),
25
- shopifyFetcher([
26
- ShopMetaDocument
27
- ]),
28
- fetcher([
29
- PublishedShopMetasDocument,
30
- {
31
- keys: [
32
- 'source_font',
33
- PublishedThemePageMetafields.GLOBAL_META_DESCRIPTION,
34
- PublishedThemePageMetafields.GLOBAL_META_THUMBNAIL
35
- ]
36
- }
37
- ])
38
- ]);
39
- if (theme.status === 'rejected') {
40
- return {
41
- pageType
42
- };
43
- }
44
- const publishedShopMetaValue = publishedShopMetas.status === 'fulfilled' ? publishedShopMetas.value : undefined;
45
- const dataBuilder = theme.value.publishedThemePages?.[0];
46
- const pageTemplate = parseBuilderTemplate(dataBuilder);
47
- const fontStyle = await getFontFromGlobalStyle(dataBuilder?.pageStyle?.data);
48
- const queries = prefetchQueries(pageTemplate);
49
- const datas = await Promise.allSettled(queries.map(({ query, variables, func })=>{
50
- if (func) {
51
- return func(fetcher, variables);
52
- }
53
- if (query) return fetcher([
54
- query,
55
- variables
56
- ]);
57
- return {};
58
- }));
59
- const fallback = queries.reduce((acc, { key }, index)=>{
60
- const res = datas[index];
61
- if (res?.status === 'fulfilled') {
62
- return {
63
- ...acc,
64
- [key]: res.value
65
- };
66
- }
67
- return acc;
68
- }, {});
69
- const description = getPublishedThemePageMetafieldByKey(PublishedThemePageMetafields.GLOBAL_META_DESCRIPTION, dataBuilder?.metafields) || publishedShopMetaValue?.publishedShopMetas?.find((item)=>item?.key === PublishedThemePageMetafields.GLOBAL_META_DESCRIPTION)?.value;
70
- const thumbnail = parseJson(getPublishedThemePageMetafieldByKey(PublishedThemePageMetafields.GLOBAL_META_THUMBNAIL, dataBuilder?.metafields) || publishedShopMetaValue?.publishedShopMetas?.find((item)=>item?.key === PublishedThemePageMetafields.GLOBAL_META_THUMBNAIL)?.value);
71
- const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
72
- const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
73
- const favicon = shopData?.storeProperty?.favicon ?? '/favicon/favicon-32x32.png';
74
- const seo = {
75
- defaultTitle: shopMeta?.shop.name ?? '',
76
- title: dataBuilder?.name ?? '',
77
- description: description ?? shopMeta?.shop.description ?? '',
78
- openGraph: {
79
- site_name: shopMeta?.shop.name ?? '',
80
- locale: shopMeta?.localization.country.isoCode ?? '',
81
- title: dataBuilder?.name ?? shopMeta?.shop.name ?? '',
82
- description: description ?? shopMeta?.shop.description ?? '',
83
- images: thumbnail ? [
84
- thumbnail
85
- ] : []
86
- },
87
- additionalMetaTags: [
88
- {
89
- name: 'theme-color',
90
- content: '#000000'
91
- }
92
- ],
93
- canonical: `/${slug}`,
94
- additionalLinkTags: [
95
- {
96
- rel: 'icon',
97
- sizes: '32x32',
98
- href: `${favicon}-/crop/1:1/center/-/smart_resize/32x32/`
99
- },
100
- {
101
- rel: 'icon',
102
- sizes: '16x16',
103
- href: `${favicon}-/crop/1:1/center/-/smart_resize/16x16/`
104
- },
105
- {
106
- rel: 'apple-touch-icon',
107
- sizes: '180x180',
108
- href: `${favicon}-/crop/1:1/center/-/smart_resize/180x180/`
109
- },
110
- {
111
- rel: 'manifest',
112
- href: generateManifest({
113
- theme_color: '#000000',
114
- background_color: '#ffffff',
115
- display: 'standalone',
116
- scope: '/',
117
- start_url: '/',
118
- name: shopMeta?.shop.name,
119
- short_name: shopMeta?.shop.name,
120
- description: shopMeta?.shop.description,
121
- icons: [
122
- {
123
- src: `${favicon}-/crop/1:1/center/-/smart_resize/192x192/`,
124
- sizes: '192x192',
125
- type: 'image/png',
126
- purpose: 'any maskable'
127
- },
128
- {
129
- src: `${favicon}-/crop/1:1/center/-/smart_resize/512x512/`,
130
- sizes: '512x512',
131
- type: 'image/png'
132
- }
133
- ]
134
- })
135
- }
136
- ]
137
- };
138
- const languageIsoCode = shopMeta?.localization.language.isoCode ?? null;
139
- const countryIsoCode = shopMeta?.localization.country.isoCode ?? null;
140
- const locale = !languageIsoCode || !countryIsoCode ? null : `${languageIsoCode}-${countryIsoCode}`;
141
- return serializableJson({
142
- themeStyle: genCSS(dataBuilder?.pageStyle?.data),
143
- fontStyle,
144
- builderData: pageTemplate,
145
- pageType,
146
- moneyFormat: shopMeta?.shop.moneyFormat ?? null,
147
- currency: shopMeta?.localization.country.currency.isoCode ?? null,
148
- languageIsoCode,
149
- countryIsoCode,
150
- locale,
151
- swr: {
152
- fallback
153
- },
154
- swatches: parseJson(shopData?.storeProperty?.swatchesConfig),
155
- seo
156
- });
157
- };
158
-
159
- export { getStaticPageProps };
1
+ import{PublishedThemePagesDocument as e,StorePropertyDocument as t,PublishedShopMetasDocument as o,prefetchQueries as s}from"@gem-sdk/core";import{ShopMetaDocument as a}from"@gem-sdk/adapter-shopify";import{getFontFromGlobalStyle as r}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 c}from"../helpers/parse-json.js";import{PublishedThemePageMetafields as m}from"../../constants/index.js";import{getPublishedThemePageMetafieldByKey as d}from"../helpers/get-metafield.js";let getStaticPageProps=(f,u)=>async h=>{let g="STATIC",_={slug:h,slugType:g},[y,T,A,L]=await Promise.allSettled([f([e,_]),f([t]),u([a]),f([o,{keys:["source_font",m.GLOBAL_META_DESCRIPTION,m.GLOBAL_META_THUMBNAIL]}])]);if("rejected"===y.status)return{pageType:g};let z="fulfilled"===L.status?L.value:void 0,v=y.value.publishedThemePages?.[0],x=n(v),S=await r(v?.pageStyle?.data),M=s(x),P=await Promise.allSettled(M.map(({query:e,variables:t,func:o})=>o?o(f,t):e?f([e,t]):{})),I=M.reduce((e,{key:t},o)=>{let s=P[o];return s?.status==="fulfilled"?{...e,[t]:s.value}:e},{}),j=d(m.GLOBAL_META_DESCRIPTION,v?.metafields)||z?.publishedShopMetas?.find(e=>e?.key===m.GLOBAL_META_DESCRIPTION)?.value,B=p(d(m.GLOBAL_META_THUMBNAIL,v?.metafields)||z?.publishedShopMetas?.find(e=>e?.key===m.GLOBAL_META_THUMBNAIL)?.value),C="fulfilled"===A.status?A.value:void 0,E="fulfilled"===T.status?T.value:void 0,O=E?.storeProperty?.favicon??"/favicon/favicon-32x32.png",k={defaultTitle:C?.shop.name??"",title:v?.name??"",description:j??C?.shop.description??"",openGraph:{site_name:C?.shop.name??"",locale:C?.localization.country.isoCode??"",title:v?.name??C?.shop.name??"",description:j??C?.shop.description??"",images:B?[B]:[]},additionalMetaTags:[{name:"theme-color",content:"#000000"}],canonical:`/${h}`,additionalLinkTags:[{rel:"icon",sizes:"32x32",href:`${O}-/crop/1:1/center/-/smart_resize/32x32/`},{rel:"icon",sizes:"16x16",href:`${O}-/crop/1:1/center/-/smart_resize/16x16/`},{rel:"apple-touch-icon",sizes:"180x180",href:`${O}-/crop/1:1/center/-/smart_resize/180x180/`},{rel:"manifest",href:l({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:`${O}-/crop/1:1/center/-/smart_resize/192x192/`,sizes:"192x192",type:"image/png",purpose:"any maskable"},{src:`${O}-/crop/1:1/center/-/smart_resize/512x512/`,sizes:"512x512",type:"image/png"}]})}]},$=C?.localization.language.isoCode??null,G=C?.localization.country.isoCode??null,b=$&&G?`${$}-${G}`:null;return c({themeStyle:i(v?.pageStyle?.data),fontStyle:S,builderData:x,pageType:g,moneyFormat:C?.shop.moneyFormat??null,currency:C?.localization.country.currency.isoCode??null,languageIsoCode:$,countryIsoCode:G,locale:b,swr:{fallback:I},swatches:p(E?.storeProperty?.swatchesConfig),seo:k})};export{getStaticPageProps};
@@ -1,57 +1,8 @@
1
- const composeFontMimeType = (fonts)=>{
2
- const result = {};
3
- fonts?.forEach((font)=>{
4
- if (!font) return;
5
- const fontKey = `${font.fontFamily}_${font.fontStyle}_${font.fontWeight}`;
6
- const fontData = {
7
- font: {
8
- fontFamily: font.fontFamily,
9
- fontStyle: font.fontStyle,
10
- fontWeight: font.fontWeight
11
- },
12
- urls: [
13
- {
14
- url: font.backupFilePath || font.filePath,
15
- mimeType: font.mimeType
16
- }
17
- ]
18
- };
19
- if (!result[fontKey]) {
20
- result[fontKey] = fontData;
21
- } else {
22
- result[fontKey]?.urls.push(fontData?.urls?.[0]);
23
- }
24
- });
25
- return result;
26
- };
27
- // Currently support only ttf, otf, woff, woff2
28
- const formatName = (mimeType)=>{
29
- const fontMimeTypes = {
30
- 'font/ttf': 'truetype',
31
- 'application/x-font-opentype': 'opentype',
32
- 'application/font-woff': 'woff',
33
- 'application/font-woff2': 'woff2'
34
- };
35
- return fontMimeTypes[mimeType];
36
- };
37
- const composeFontFaces = (fontsMimeType)=>{
38
- const fontFaces = [];
39
- for (const [, value] of Object.entries(fontsMimeType)){
40
- fontFaces.push(`
1
+ let composeFontMimeType=t=>{let o={};return t?.forEach(t=>{if(!t)return;let e=`${t.fontFamily}_${t.fontStyle}_${t.fontWeight}`,n={font:{fontFamily:t.fontFamily,fontStyle:t.fontStyle,fontWeight:t.fontWeight},urls:[{url:t.backupFilePath||t.filePath,mimeType:t.mimeType}]};o[e]?o[e]?.urls.push(n?.urls?.[0]):o[e]=n}),o},formatName=t=>({"font/ttf":"truetype","application/x-font-opentype":"opentype","application/font-woff":"woff","application/font-woff2":"woff2"})[t],composeFontFaces=t=>{let o=[];for(let[,e]of Object.entries(t))o.push(`
41
2
  @font-face {
42
- font-family: '${value.font.fontFamily}';
43
- src: ${value.urls.map((item)=>`url('${item.url}') format('${formatName(item.mimeType)}')`).join('\n')};
44
- font-style: ${value?.font?.fontStyle ?? 'normal'};
45
- font-weight: ${value?.font?.fontWeight ?? 'normal'};
3
+ font-family: '${e.font.fontFamily}';
4
+ src: ${e.urls.map(t=>`url('${t.url}') format('${formatName(t.mimeType)}')`).join("\n")};
5
+ font-style: ${e?.font?.fontStyle??"normal"};
6
+ font-weight: ${e?.font?.fontWeight??"normal"};
46
7
  }
47
- `);
48
- }
49
- return fontFaces.map((fontFace)=>fontFace).join('\n');
50
- };
51
- const getCustomFonts = (fonts)=>{
52
- if (!fonts) return null;
53
- const fontsMimeType = composeFontMimeType(fonts);
54
- return composeFontFaces(fontsMimeType);
55
- };
56
-
57
- export { composeFontFaces, composeFontMimeType, formatName, getCustomFonts };
8
+ `);return o.map(t=>t).join("\n")},getCustomFonts=t=>{if(!t)return null;let o=composeFontMimeType(t);return composeFontFaces(o)};export{composeFontFaces,composeFontMimeType,formatName,getCustomFonts};
@@ -1,96 +1 @@
1
- import { getStorefrontApi } from './get-storefront-api.js';
2
-
3
- const createFetcher = (token)=>{
4
- const shopToken = token || process.env.NEXT_PUBLIC_SHOP_TOKEN;
5
- return async (args)=>{
6
- const [query, variables, operationName] = args;
7
- if (!shopToken) {
8
- throw new Error('shopToken is not defined');
9
- }
10
- if (!process.env.NEXT_PUBLIC_API_URL) {
11
- throw new Error('NEXT_PUBLIC_API_URL is not defined');
12
- }
13
- const headers = {
14
- 'Content-Type': 'application/json',
15
- 'X-GemX-Shop-Token': shopToken
16
- };
17
- return fetch(process.env.NEXT_PUBLIC_API_URL, {
18
- method: 'POST',
19
- headers,
20
- body: JSON.stringify({
21
- query,
22
- variables,
23
- operationName
24
- })
25
- }).then((res)=>res.json()).then((res)=>{
26
- if (res.errors) {
27
- return Promise.reject(res.errors);
28
- }
29
- return res.data;
30
- });
31
- };
32
- };
33
- const createAppAPIFetcher = (token, shopID)=>{
34
- const shopToken = token;
35
- const endPoint = process.env.NEXT_APP_API_URL;
36
- return async (args)=>{
37
- const [query, variables, operationName] = args;
38
- if (!shopToken) {
39
- throw new Error('shopToken is not defined');
40
- }
41
- if (!endPoint) {
42
- throw new Error('NEXT_APP_API_URL is not defined');
43
- }
44
- const headers = {
45
- 'Content-Type': 'application/json',
46
- Authorization: `Token ${shopToken}`,
47
- 'X-GemX-Shop-ID': shopID || ''
48
- };
49
- return fetch(endPoint, {
50
- method: 'POST',
51
- headers,
52
- body: JSON.stringify({
53
- query,
54
- variables,
55
- operationName
56
- })
57
- }).then((res)=>res.json()).then((res)=>{
58
- if (res.errors) {
59
- return Promise.reject(res.errors);
60
- }
61
- return res.data;
62
- });
63
- };
64
- };
65
- const createShopifyFetcher = (storefrontToken, handle)=>{
66
- const token = storefrontToken ?? process.env.NEXT_PUBLIC_STOREFRONT_TOKEN;
67
- const storefrontHandle = handle ?? process.env.NEXT_PUBLIC_STOREFRONT_HANDLE;
68
- return async (args)=>{
69
- if (!token) {
70
- throw new Error('NEXT_PUBLIC_STOREFRONT_TOKEN is not defined');
71
- }
72
- if (!storefrontHandle) {
73
- throw new Error('NEXT_PUBLIC_STOREFRONT_HANDLE is not defined');
74
- }
75
- const headers = {
76
- 'Content-Type': 'application/json',
77
- 'X-Shopify-Storefront-Access-Token': token
78
- };
79
- const [query, variables] = args;
80
- return fetch(getStorefrontApi(storefrontHandle), {
81
- method: 'POST',
82
- headers,
83
- body: JSON.stringify({
84
- query,
85
- variables
86
- })
87
- }).then((res)=>res.json()).then((res)=>{
88
- if (res.errors) {
89
- return Promise.reject(res.errors);
90
- }
91
- return res.data;
92
- });
93
- };
94
- };
95
-
96
- export { createAppAPIFetcher, createFetcher, createShopifyFetcher };
1
+ import{getStorefrontApi as e}from"./get-storefront-api.js";let createFetcher=e=>{let r=e||process.env.NEXT_PUBLIC_SHOP_TOKEN;return async e=>{let[t,o,n]=e;if(!r)throw Error("shopToken is not defined");if(!process.env.NEXT_PUBLIC_API_URL)throw Error("NEXT_PUBLIC_API_URL is not defined");let s={"Content-Type":"application/json","X-GemX-Shop-Token":r};return fetch(process.env.NEXT_PUBLIC_API_URL,{method:"POST",headers:s,body:JSON.stringify({query:t,variables:o,operationName:n})}).then(e=>e.json()).then(e=>e.errors?Promise.reject(e.errors):e.data)}},createAppAPIFetcher=(e,r)=>{let t=process.env.NEXT_APP_API_URL;return async o=>{let[n,s,i]=o;if(!e)throw Error("shopToken is not defined");if(!t)throw Error("NEXT_APP_API_URL is not defined");let c={"Content-Type":"application/json",Authorization:`Token ${e}`,"X-GemX-Shop-ID":r||""};return fetch(t,{method:"POST",headers:c,body:JSON.stringify({query:n,variables:s,operationName:i})}).then(e=>e.json()).then(e=>e.errors?Promise.reject(e.errors):e.data)}},createShopifyFetcher=(r,t)=>{let o=r??process.env.NEXT_PUBLIC_STOREFRONT_TOKEN,n=t??process.env.NEXT_PUBLIC_STOREFRONT_HANDLE;return async r=>{if(!o)throw Error("NEXT_PUBLIC_STOREFRONT_TOKEN is not defined");if(!n)throw Error("NEXT_PUBLIC_STOREFRONT_HANDLE is not defined");let t={"Content-Type":"application/json","X-Shopify-Storefront-Access-Token":o},[s,i]=r;return fetch(e(n),{method:"POST",headers:t,body:JSON.stringify({query:s,variables:i})}).then(e=>e.json()).then(e=>e.errors?Promise.reject(e.errors):e.data)}};export{createAppAPIFetcher,createFetcher,createShopifyFetcher};
@@ -1,11 +1 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import MainLayout from '../layouts/main.js';
3
-
4
- const getLayout = (page, pageProps)=>{
5
- return /*#__PURE__*/ jsx(MainLayout, {
6
- ...pageProps,
7
- children: page
8
- });
9
- };
10
-
11
- export { getLayout };
1
+ import{jsx as t}from"react/jsx-runtime";import o from"../layouts/main.js";let getLayout=(r,e)=>t(o,{...e,children:r});export{getLayout};
@@ -1,10 +1 @@
1
- const getStorefrontApi = (handle, provider)=>{
2
- switch(provider){
3
- case 'BIGCOMMERCE':
4
- return `https://${handle}.bigcommerce.com`;
5
- default:
6
- return `https://${handle}.myshopify.com/api/2022-07/graphql.json`;
7
- }
8
- };
9
-
10
- export { getStorefrontApi };
1
+ let getStorefrontApi=(t,o)=>"BIGCOMMERCE"===o?`https://${t}.bigcommerce.com`:`https://${t}.myshopify.com/api/2022-07/graphql.json`;export{getStorefrontApi};
@@ -1,8 +1 @@
1
- const getStaticPaths = async ()=>{
2
- return {
3
- paths: [],
4
- fallback: true
5
- };
6
- };
7
-
8
- export { getStaticPaths };
1
+ let getStaticPaths=async()=>({paths:[],fallback:!0});export{getStaticPaths};