@gem-sdk/pages 3.0.0-pre-production.0 → 3.0.0

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