@gem-sdk/pages 2.0.0-dev.890 → 2.0.0-staging.120

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 (144) hide show
  1. package/dist/cjs/components/ErrorBoundary.js +41 -1
  2. package/dist/cjs/components/ErrorFallback.js +27 -1
  3. package/dist/cjs/components/FacebookPixel.js +34 -3
  4. package/dist/cjs/components/FooterForPostPurchase.js +35 -1
  5. package/dist/cjs/components/GoogleAnalytic.js +66 -5
  6. package/dist/cjs/components/TikTokPixel.js +20 -3
  7. package/dist/cjs/components/builder/Body.js +37 -0
  8. package/dist/cjs/components/builder/Footer.js +155 -0
  9. package/dist/cjs/components/builder/Header.js +188 -0
  10. package/dist/cjs/components/builder/PopupManager.js +64 -1
  11. package/dist/cjs/components/builder/SwitchView.js +185 -0
  12. package/dist/cjs/components/builder/Toolbar.js +701 -1
  13. package/dist/cjs/components/builder/Toolbox.js +485 -1
  14. package/dist/cjs/components/builder/const.js +56 -0
  15. package/dist/cjs/components/builder/toolbar/const.js +7 -0
  16. package/dist/cjs/components/builder/toolbar/utils/findDOMClosest.js +41 -0
  17. package/dist/cjs/components/builder/toolbar/utils/findOverflowParent.js +20 -0
  18. package/dist/cjs/components/builder/toolbar/utils/getChildrenByAttrSelector.js +18 -0
  19. package/dist/cjs/components/builder/toolbar/utils/getDOMElementParents.js +32 -0
  20. package/dist/cjs/components/builder/toolbar/utils/isOverParent.js +16 -0
  21. package/dist/cjs/components/builder/toolbar/utils/isOverToolbarPosition.js +12 -0
  22. package/dist/cjs/components/builder/toolbar/utils/isSection.js +8 -0
  23. package/dist/cjs/components/builder/toolbar/utils/notVisible.js +8 -0
  24. package/dist/cjs/components/builder/toolbar/utils/waitForElementToExist.js +27 -0
  25. package/dist/cjs/components/image-to-layout/AddSectionImageToLayout.js +151 -1
  26. package/dist/cjs/components/image-to-layout/DropElement.js +167 -1
  27. package/dist/cjs/components/image-to-layout/ImageToLayout.js +42 -1
  28. package/dist/cjs/index.js +80 -1
  29. package/dist/cjs/layouts/main.js +31 -1
  30. package/dist/cjs/libs/api/get-builder-props.js +46 -1
  31. package/dist/cjs/libs/api/get-collection-props.js +68 -1
  32. package/dist/cjs/libs/api/get-home-page-props-v2.js +145 -1
  33. package/dist/cjs/libs/api/get-home-page-props.js +151 -1
  34. package/dist/cjs/libs/api/get-post-purchase-props-preview.js +268 -1
  35. package/dist/cjs/libs/api/get-preview-props.js +18 -1
  36. package/dist/cjs/libs/api/get-product-props.js +73 -1
  37. package/dist/cjs/libs/api/get-static-page-props-preview.js +155 -1
  38. package/dist/cjs/libs/api/get-static-page-props-v2.js +164 -1
  39. package/dist/cjs/libs/api/get-static-page-props.js +148 -1
  40. package/dist/cjs/libs/custom-fonts.js +60 -6
  41. package/dist/cjs/libs/fetcher.js +100 -1
  42. package/dist/cjs/libs/get-layout.js +13 -1
  43. package/dist/cjs/libs/get-storefront-api.js +12 -1
  44. package/dist/cjs/libs/getStaticPaths.js +10 -1
  45. package/dist/cjs/libs/google-fonts.js +118 -1
  46. package/dist/cjs/libs/helpers/check-option-font.js +65 -0
  47. package/dist/cjs/libs/helpers/common.js +27 -1
  48. package/dist/cjs/libs/helpers/gen-css.js +135 -1
  49. package/dist/cjs/libs/helpers/gen-fonts.js +90 -1
  50. package/dist/cjs/libs/helpers/generate-manifres.js +5 -1
  51. package/dist/cjs/libs/helpers/get-fallback.js +34 -1
  52. package/dist/cjs/libs/helpers/normalize.js +111 -1
  53. package/dist/cjs/libs/helpers/parse-json.js +16 -1
  54. package/dist/cjs/libs/helpers/user-agent.js +7 -1
  55. package/dist/cjs/libs/hooks/use-tracking-view.js +43 -1
  56. package/dist/cjs/libs/hooks/usePagePreview.js +92 -1
  57. package/dist/cjs/libs/parse-html.js +34 -1
  58. package/dist/cjs/libs/shopify-cdn-with-google-fonts.js +1845 -1
  59. package/dist/cjs/pages/404.js +43 -1
  60. package/dist/cjs/pages/500.js +74 -1
  61. package/dist/cjs/pages/CollectionGlobalProvider.js +59 -1
  62. package/dist/cjs/pages/builder.js +115 -1
  63. package/dist/cjs/pages/collection-detail.js +64 -1
  64. package/dist/cjs/pages/preview.js +26 -1
  65. package/dist/cjs/pages/product-detail.js +69 -1
  66. package/dist/cjs/pages/static-v2.js +139 -1
  67. package/dist/cjs/pages/static.js +75 -1
  68. package/dist/cjs/store/libs-store.js +14 -0
  69. package/dist/esm/components/ErrorBoundary.js +39 -1
  70. package/dist/esm/components/ErrorFallback.js +25 -1
  71. package/dist/esm/components/FacebookPixel.js +32 -3
  72. package/dist/esm/components/FooterForPostPurchase.js +31 -1
  73. package/dist/esm/components/GoogleAnalytic.js +64 -5
  74. package/dist/esm/components/TikTokPixel.js +18 -3
  75. package/dist/esm/components/builder/Body.js +33 -0
  76. package/dist/esm/components/builder/Footer.js +151 -0
  77. package/dist/esm/components/builder/Header.js +184 -0
  78. package/dist/esm/components/builder/PopupManager.js +60 -1
  79. package/dist/esm/components/builder/SwitchView.js +181 -0
  80. package/dist/esm/components/builder/Toolbar.js +697 -1
  81. package/dist/esm/components/builder/Toolbox.js +481 -1
  82. package/dist/esm/components/builder/const.js +54 -0
  83. package/dist/esm/components/builder/toolbar/const.js +4 -0
  84. package/dist/esm/components/builder/toolbar/utils/findDOMClosest.js +39 -0
  85. package/dist/esm/components/builder/toolbar/utils/findOverflowParent.js +18 -0
  86. package/dist/esm/components/builder/toolbar/utils/getChildrenByAttrSelector.js +16 -0
  87. package/dist/esm/components/builder/toolbar/utils/getDOMElementParents.js +30 -0
  88. package/dist/esm/components/builder/toolbar/utils/isOverParent.js +14 -0
  89. package/dist/esm/components/builder/toolbar/utils/isOverToolbarPosition.js +10 -0
  90. package/dist/esm/components/builder/toolbar/utils/isSection.js +6 -0
  91. package/dist/esm/components/builder/toolbar/utils/notVisible.js +6 -0
  92. package/dist/esm/components/builder/toolbar/utils/waitForElementToExist.js +25 -0
  93. package/dist/esm/components/image-to-layout/AddSectionImageToLayout.js +147 -1
  94. package/dist/esm/components/image-to-layout/DropElement.js +165 -1
  95. package/dist/esm/components/image-to-layout/ImageToLayout.js +38 -1
  96. package/dist/esm/index.js +35 -1
  97. package/dist/esm/layouts/main.js +27 -1
  98. package/dist/esm/libs/api/get-builder-props.js +44 -1
  99. package/dist/esm/libs/api/get-collection-props.js +66 -1
  100. package/dist/esm/libs/api/get-home-page-props-v2.js +143 -1
  101. package/dist/esm/libs/api/get-home-page-props.js +149 -1
  102. package/dist/esm/libs/api/get-post-purchase-props-preview.js +260 -1
  103. package/dist/esm/libs/api/get-preview-props.js +16 -1
  104. package/dist/esm/libs/api/get-product-props.js +71 -1
  105. package/dist/esm/libs/api/get-static-page-props-preview.js +153 -1
  106. package/dist/esm/libs/api/get-static-page-props-v2.js +162 -1
  107. package/dist/esm/libs/api/get-static-page-props.js +146 -1
  108. package/dist/esm/libs/custom-fonts.js +55 -6
  109. package/dist/esm/libs/fetcher.js +96 -1
  110. package/dist/esm/libs/get-layout.js +11 -1
  111. package/dist/esm/libs/get-storefront-api.js +10 -1
  112. package/dist/esm/libs/getStaticPaths.js +8 -1
  113. package/dist/esm/libs/google-fonts.js +112 -1
  114. package/dist/esm/libs/helpers/check-option-font.js +63 -0
  115. package/dist/esm/libs/helpers/common.js +24 -1
  116. package/dist/esm/libs/helpers/gen-css.js +133 -1
  117. package/dist/esm/libs/helpers/gen-fonts.js +87 -1
  118. package/dist/esm/libs/helpers/generate-manifres.js +3 -1
  119. package/dist/esm/libs/helpers/get-fallback.js +32 -1
  120. package/dist/esm/libs/helpers/normalize.js +103 -1
  121. package/dist/esm/libs/helpers/parse-json.js +13 -1
  122. package/dist/esm/libs/helpers/user-agent.js +5 -1
  123. package/dist/esm/libs/hooks/use-tracking-view.js +41 -1
  124. package/dist/esm/libs/hooks/usePagePreview.js +90 -1
  125. package/dist/esm/libs/parse-html.js +32 -1
  126. package/dist/esm/libs/shopify-cdn-with-google-fonts.js +1843 -1
  127. package/dist/esm/pages/404.js +41 -1
  128. package/dist/esm/pages/500.js +72 -1
  129. package/dist/esm/pages/CollectionGlobalProvider.js +55 -1
  130. package/dist/esm/pages/builder.js +113 -1
  131. package/dist/esm/pages/collection-detail.js +60 -1
  132. package/dist/esm/pages/preview.js +24 -1
  133. package/dist/esm/pages/product-detail.js +65 -1
  134. package/dist/esm/pages/static-v2.js +137 -1
  135. package/dist/esm/pages/static.js +71 -1
  136. package/dist/esm/store/libs-store.js +12 -0
  137. package/dist/types/index.d.ts +50 -34
  138. package/package.json +8 -5
  139. package/dist/cjs/components/Footer.js +0 -1
  140. package/dist/cjs/components/Header.js +0 -1
  141. package/dist/cjs/components/builder/toolbar/Onboarding.js +0 -1
  142. package/dist/esm/components/Footer.js +0 -1
  143. package/dist/esm/components/Header.js +0 -1
  144. package/dist/esm/components/builder/toolbar/Onboarding.js +0 -1
@@ -1 +1,268 @@
1
- "use strict";var core=require("@gem-sdk/core"),nextjs=require("@sentry/nextjs"),googleFonts=require("../google-fonts.js"),getFallback=require("../helpers/get-fallback.js"),normalize=require("../helpers/normalize.js"),usePagePreview=require("../hooks/usePagePreview.js"),parseJson=require("../helpers/parse-json.js"),genCss=require("../helpers/gen-css.js");const fetchSalePageDataByID=async(e,t)=>{let r={themePageId:e.themePageId,first:1,where:{default:!0}},[a,l]=await Promise.allSettled([t([core.ThemePageDocument,r]),t([core.StorePropertyDocument])]);if("rejected"===a.status)throw Error(a.reason?.[0]);return{dataBuilder:a.value.themePage,pageStyle:a.value.themePage?.theme?.themeStyles?.edges?.[0]?.node?.data,storeProperty:l,productOffers:[]}},fetchPostPurchasePageDataByID=async(e,t)=>{let r={themePageId:e.themePageId,first:1,where:{default:!0}},[a,l,s]=await Promise.allSettled([t([core.ThemePageDocument,r]),t([core.StorePropertyDocument]),t([core.SaleFunnelDiscountsDocument,{where:{saleFunnelOfferID:e.currentOfferID}}])]);if("rejected"===a.status)throw Error(a.reason?.[0]);if("rejected"===s.status)throw Error(s.reason?.[0]);return{dataBuilder:a.value.themePage,pageStyle:a.value.themePage?.theme?.themeStyles?.edges?.[0]?.node?.data,storeProperty:l,productOffers:s.value.saleFunnelDiscounts?.edges?.filter(e=>e?.node?.objectType==="PRODUCT"&&e?.node?.type==="ORDER_VALUE")||[]}},fetchThemePageDataByTemplateID=async(e,t)=>{let r={libraryTemplateId:e.libraryTemplateId},a=[],[l,s]=await Promise.allSettled([t([core.LibraryTemplateDocument,r]),t([core.StorePropertyDocument])]);if(e.currentOfferID){let[r]=await Promise.allSettled([t([core.LibrarySaleFunnelDocument,{librarySaleFunnelId:e.librarySaleFunnelID}])]);if("rejected"===r.status)throw Error(r.reason?.[0]);let l=r.value.librarySaleFunnel?.offers?.find(t=>t?.id===e.currentOfferID);l&&(a=l.discounts?.filter(e=>e?.objectType==="PRODUCT"&&"ORDER_VALUE"===e.type).map(e=>({node:{...e}}))||[])}if("rejected"===l.status)throw Error(l.reason?.[0]);return{dataBuilder:l.value.libraryTemplate,pageStyle:void 0,storeProperty:s,productOffers:a}},getPostPurchasePropsPreview=(e,t,r)=>async(a,l)=>{try{let{dataBuilder:s,storeProperty:o,productOffers:n,pageStyle:u}=t?await fetchThemePageDataByTemplateID({libraryTemplateId:a,currentOfferID:l,librarySaleFunnelID:t},e):l?await fetchPostPurchasePageDataByID({themePageId:a,currentOfferID:l},e):await fetchSalePageDataByID({themePageId:a},e);if(!s)throw Error(`No data builder found for slug: /preview/${a}`);let i=t?normalize.parseBuilderLibraryTemplate(s):normalize.parseBuilderTemplateV2(s),c=r||e,[P,g,h]=await Promise.all([googleFonts.getFontStyleFromPageTemplate(i),googleFonts.getFontFromGlobalStyle(u),getFallback.getFallbackV2(c,i,!1)]),{seo:m,pageConfig:d}=usePagePreview.usePagePreview(s,o);return parseJson.serializableJson({themeStyle:genCss.genCSS(u),seo:m,...d,elementFontStyle:P,fontStyle:g,builderData:i,swr:{fallback:h},productOffers:n})}catch(e){throw nextjs.captureException(e),e}};exports.fetchPostPurchasePageDataByID=fetchPostPurchasePageDataByID,exports.fetchSalePageDataByID=fetchSalePageDataByID,exports.fetchThemePageDataByTemplateID=fetchThemePageDataByTemplateID,exports.getPostPurchasePropsPreview=getPostPurchasePropsPreview;
1
+ 'use strict';
2
+
3
+ var core = require('@gem-sdk/core');
4
+ var nextjs = require('@sentry/nextjs');
5
+ var googleFonts = require('../google-fonts.js');
6
+ var getFallback = require('../helpers/get-fallback.js');
7
+ var normalize = require('../helpers/normalize.js');
8
+ var usePagePreview = require('../hooks/usePagePreview.js');
9
+ var parseJson = require('../helpers/parse-json.js');
10
+ var genCss = require('../helpers/gen-css.js');
11
+
12
+ const fetchSalePageDataByID = async (data, fetcher)=>{
13
+ const variables = {
14
+ themePageId: data.themePageId,
15
+ first: 1,
16
+ where: {
17
+ default: true
18
+ }
19
+ };
20
+ const [theme, storeProperty] = await Promise.allSettled([
21
+ fetcher([
22
+ core.ThemePageDocument,
23
+ variables
24
+ ]),
25
+ fetcher([
26
+ core.StorePropertyDocument
27
+ ])
28
+ ]);
29
+ if (theme.status === 'rejected') {
30
+ throw new Error(theme.reason?.[0]);
31
+ }
32
+ return {
33
+ dataBuilder: theme.value.themePage,
34
+ pageStyle: theme.value.themePage?.theme?.themeStyles?.edges?.[0]?.node?.data,
35
+ storeProperty,
36
+ productOffers: []
37
+ };
38
+ };
39
+ const fetchPostPurchasePageDataByID = async (data, fetcher)=>{
40
+ const variables = {
41
+ themePageId: data.themePageId,
42
+ first: 1,
43
+ where: {
44
+ default: true
45
+ }
46
+ };
47
+ const [theme, storeProperty, saleFunnelDiscounts] = await Promise.allSettled([
48
+ fetcher([
49
+ core.ThemePageDocument,
50
+ variables
51
+ ]),
52
+ fetcher([
53
+ core.StorePropertyDocument
54
+ ]),
55
+ fetcher([
56
+ core.SaleFunnelDiscountsDocument,
57
+ {
58
+ where: {
59
+ saleFunnelOfferID: data.currentOfferID
60
+ }
61
+ }
62
+ ])
63
+ ]);
64
+ if (theme.status === 'rejected') {
65
+ throw new Error(theme.reason?.[0]);
66
+ }
67
+ if (saleFunnelDiscounts.status === 'rejected') {
68
+ throw new Error(saleFunnelDiscounts.reason?.[0]);
69
+ }
70
+ return {
71
+ dataBuilder: theme.value.themePage,
72
+ pageStyle: theme.value.themePage?.theme?.themeStyles?.edges?.[0]?.node?.data,
73
+ storeProperty,
74
+ productOffers: saleFunnelDiscounts.value.saleFunnelDiscounts?.edges?.filter((item)=>item?.node?.objectType === 'PRODUCT' && item?.node?.type === 'ORDER_VALUE') || []
75
+ };
76
+ };
77
+ const fetchThemePageDataByTemplateID = async (data, fetcher)=>{
78
+ const variables = {
79
+ libraryTemplateId: data.libraryTemplateId
80
+ };
81
+ let productOffers = [];
82
+ const [theme, storeProperty] = await Promise.allSettled([
83
+ fetcher([
84
+ core.LibraryTemplateDocument,
85
+ variables
86
+ ]),
87
+ fetcher([
88
+ core.StorePropertyDocument
89
+ ])
90
+ ]);
91
+ if (data.currentOfferID) {
92
+ const [librarySaleFunnel] = await Promise.allSettled([
93
+ fetcher([
94
+ core.LibrarySaleFunnelDocument,
95
+ {
96
+ librarySaleFunnelId: data.librarySaleFunnelID
97
+ }
98
+ ])
99
+ ]);
100
+ if (librarySaleFunnel.status === 'rejected') {
101
+ throw new Error(librarySaleFunnel.reason?.[0]);
102
+ }
103
+ const offer = librarySaleFunnel.value.librarySaleFunnel?.offers?.find((offer)=>offer?.id === data.currentOfferID);
104
+ if (offer) {
105
+ productOffers = offer.discounts?.filter((item)=>item?.objectType === 'PRODUCT' && item.type === 'ORDER_VALUE').map((item)=>({
106
+ node: {
107
+ ...item
108
+ }
109
+ })) || [];
110
+ }
111
+ }
112
+ if (theme.status === 'rejected') {
113
+ throw new Error(theme.reason?.[0]);
114
+ }
115
+ return {
116
+ dataBuilder: theme.value.libraryTemplate,
117
+ pageStyle: undefined,
118
+ storeProperty,
119
+ productOffers: productOffers
120
+ };
121
+ };
122
+ const fetchShopLibraryPageDataByID = async (data, fetcher)=>{
123
+ const variables = {
124
+ shopLibraryPageId: data.shopLibraryPageId
125
+ };
126
+ const [theme, storeProperty, saleFunnelDiscounts] = await Promise.allSettled([
127
+ fetcher([
128
+ core.ShopLibraryPageDocument,
129
+ variables
130
+ ]),
131
+ fetcher([
132
+ core.StorePropertyDocument
133
+ ]),
134
+ fetcher([
135
+ core.SaleFunnelDiscountsDocument,
136
+ {
137
+ where: {
138
+ saleFunnelOfferID: data.currentOfferID
139
+ }
140
+ }
141
+ ])
142
+ ]);
143
+ if (theme.status === 'rejected') {
144
+ throw new Error(theme.reason?.[0]);
145
+ }
146
+ if (saleFunnelDiscounts.status === 'rejected') {
147
+ throw new Error(saleFunnelDiscounts.reason?.[0]);
148
+ }
149
+ return {
150
+ dataBuilder: theme.value.shopLibraryPage,
151
+ pageStyle: undefined,
152
+ storeProperty,
153
+ productOffers: saleFunnelDiscounts.value.saleFunnelDiscounts?.edges?.filter((item)=>item?.node?.objectType === 'PRODUCT' && item?.node?.type === 'ORDER_VALUE') || []
154
+ };
155
+ };
156
+ const fetchLibraryTemplateDataByID = async (data, fetcher)=>{
157
+ const variables = {
158
+ libraryTemplateId: data.libraryTemplateId
159
+ };
160
+ const [theme, storeProperty, saleFunnelDiscounts] = await Promise.allSettled([
161
+ fetcher([
162
+ core.LibraryTemplateDocument,
163
+ variables
164
+ ]),
165
+ fetcher([
166
+ core.StorePropertyDocument
167
+ ]),
168
+ fetcher([
169
+ core.SaleFunnelDiscountsDocument,
170
+ {
171
+ where: {
172
+ saleFunnelOfferID: data.currentOfferID
173
+ }
174
+ }
175
+ ])
176
+ ]);
177
+ if (theme.status === 'rejected') {
178
+ throw new Error(theme.reason?.[0]);
179
+ }
180
+ if (saleFunnelDiscounts.status === 'rejected') {
181
+ throw new Error(saleFunnelDiscounts.reason?.[0]);
182
+ }
183
+ return {
184
+ dataBuilder: theme.value.libraryTemplate,
185
+ pageStyle: undefined,
186
+ storeProperty,
187
+ productOffers: saleFunnelDiscounts.value.saleFunnelDiscounts?.edges?.filter((item)=>item?.node?.objectType === 'PRODUCT' && item?.node?.type === 'ORDER_VALUE') || []
188
+ };
189
+ };
190
+ const getRelevantPageData = async (data)=>{
191
+ const { id, currentOfferID, fetcher, isLibraryTemplate, librarySaleFunnelID, isShopLibraryPage } = data;
192
+ if (librarySaleFunnelID) {
193
+ return await fetchThemePageDataByTemplateID({
194
+ libraryTemplateId: id,
195
+ currentOfferID,
196
+ librarySaleFunnelID
197
+ }, fetcher);
198
+ }
199
+ if (isShopLibraryPage && currentOfferID) {
200
+ return await fetchShopLibraryPageDataByID({
201
+ shopLibraryPageId: id,
202
+ currentOfferID
203
+ }, fetcher);
204
+ }
205
+ if (isLibraryTemplate && currentOfferID) {
206
+ return await fetchLibraryTemplateDataByID({
207
+ libraryTemplateId: id,
208
+ currentOfferID
209
+ }, fetcher);
210
+ }
211
+ if (currentOfferID) {
212
+ return await fetchPostPurchasePageDataByID({
213
+ themePageId: id,
214
+ currentOfferID
215
+ }, fetcher);
216
+ }
217
+ return await fetchSalePageDataByID({
218
+ themePageId: id
219
+ }, fetcher);
220
+ };
221
+ const getPostPurchasePropsPreview = (fetcher, librarySaleFunnelID, storeFrontFetcher)=>async (data)=>{
222
+ try {
223
+ const { id, currentOfferID, isLibraryTemplate, isShopLibraryPage } = data;
224
+ const { dataBuilder, storeProperty, productOffers, pageStyle } = await getRelevantPageData({
225
+ id,
226
+ currentOfferID,
227
+ fetcher,
228
+ isLibraryTemplate,
229
+ isShopLibraryPage,
230
+ librarySaleFunnelID
231
+ });
232
+ if (!dataBuilder) {
233
+ throw new Error(`No data builder found for slug: /preview/${id}`);
234
+ }
235
+ const pageTemplate = librarySaleFunnelID || isLibraryTemplate && currentOfferID ? normalize.parseBuilderLibraryTemplate(dataBuilder) : isShopLibraryPage ? normalize.parseShopLibraryPageTemplate(dataBuilder) : normalize.parseBuilderTemplateV2(dataBuilder);
236
+ const gemPagesStoreFrontFetcher = storeFrontFetcher || fetcher;
237
+ const [elementFontStyle, fontStyle, fallback] = await Promise.all([
238
+ googleFonts.getFontStyleFromPageTemplate(pageTemplate),
239
+ googleFonts.getFontFromGlobalStyle(pageStyle),
240
+ getFallback.getFallbackV2(gemPagesStoreFrontFetcher, pageTemplate, false)
241
+ ]);
242
+ const { seo, pageConfig } = usePagePreview.usePagePreview(dataBuilder, storeProperty);
243
+ return parseJson.serializableJson({
244
+ themeStyle: genCss.genCSS(pageStyle),
245
+ seo,
246
+ ...pageConfig,
247
+ elementFontStyle,
248
+ fontStyle,
249
+ builderData: pageTemplate,
250
+ swr: {
251
+ fallback
252
+ },
253
+ productOffers
254
+ });
255
+ } catch (err) {
256
+ console.log('error', err);
257
+ nextjs.captureException(err);
258
+ throw err;
259
+ }
260
+ };
261
+
262
+ exports.fetchLibraryTemplateDataByID = fetchLibraryTemplateDataByID;
263
+ exports.fetchPostPurchasePageDataByID = fetchPostPurchasePageDataByID;
264
+ exports.fetchSalePageDataByID = fetchSalePageDataByID;
265
+ exports.fetchShopLibraryPageDataByID = fetchShopLibraryPageDataByID;
266
+ exports.fetchThemePageDataByTemplateID = fetchThemePageDataByTemplateID;
267
+ exports.getPostPurchasePropsPreview = getPostPurchasePropsPreview;
268
+ exports.getRelevantPageData = getRelevantPageData;
@@ -1 +1,18 @@
1
- "use strict";var getCollectionProps=require("./get-collection-props.js"),getProductProps=require("./get-product-props.js"),getStaticPageProps=require("./get-static-page-props.js");const getPreviewProps=(e,t)=>async(r,o)=>{switch(r){case"COLLECTION":return getCollectionProps.getCollectionProps(e)(o);case"PRODUCT":return getProductProps.getProductProps(e)(o);default:return getStaticPageProps.getStaticPageProps(e,t)(o)}};exports.getPreviewProps=getPreviewProps;
1
+ 'use strict';
2
+
3
+ var getCollectionProps = require('./get-collection-props.js');
4
+ var getProductProps = require('./get-product-props.js');
5
+ var getStaticPageProps = require('./get-static-page-props.js');
6
+
7
+ const getPreviewProps = (fetcher, shopifyFetcher)=>async (pageType, slug)=>{
8
+ switch(pageType){
9
+ case 'COLLECTION':
10
+ return getCollectionProps.getCollectionProps(fetcher)(slug);
11
+ case 'PRODUCT':
12
+ return getProductProps.getProductProps(fetcher)(slug);
13
+ default:
14
+ return getStaticPageProps.getStaticPageProps(fetcher, shopifyFetcher)(slug);
15
+ }
16
+ };
17
+
18
+ exports.getPreviewProps = getPreviewProps;
@@ -1 +1,73 @@
1
- "use strict";var core=require("@gem-sdk/core"),genCss=require("../helpers/gen-css.js"),normalize=require("../helpers/normalize.js"),parseJson=require("../helpers/parse-json.js");const getProductProps=e=>async r=>{let t="PRODUCT",s={slug:r,slugType:t},[a,l]=await Promise.all([core.getProductBySlug(e,r),e([core.PublishedThemePagesDocument,s])]),o=l.publishedThemePages?.[0];if(!a||!o)throw Error("Product not found");let u=normalize.parseBuilderTemplate(o),i=core.prefetchQueries(u),d=await Promise.allSettled(i.map(({query:r,variables:t,func:s})=>s?s(e,t):r?e([r,t]):{})),g=i.reduce((e,{key:r},t)=>{let s=d[t];return s?.status==="fulfilled"?{...e,[r]:s.value}:e},{});return parseJson.serializableJson({builderData:u,themeStyle:genCss.genCSS(o.pageStyle?.data),pageType:t,swr:{fallback:g},seo:{title:a.title,description:a.description,openGraph:{images:a.featuredImage?.src?[{url:a.featuredImage.src,alt:a.featuredImage?.alt,height:a.featuredImage?.height,width:a.featuredImage?.width,type:a.featuredImage?.contentType}]:[]}},product:a})};exports.getProductProps=getProductProps;
1
+ 'use strict';
2
+
3
+ var core = require('@gem-sdk/core');
4
+ var genCss = require('../helpers/gen-css.js');
5
+ var normalize = require('../helpers/normalize.js');
6
+ var parseJson = require('../helpers/parse-json.js');
7
+
8
+ const getProductProps = (fetcher)=>async (handle)=>{
9
+ const pageType = 'PRODUCT';
10
+ const variables = {
11
+ slug: handle,
12
+ slugType: pageType
13
+ };
14
+ const [product, theme] = await Promise.all([
15
+ core.getProductBySlug(fetcher, handle),
16
+ fetcher([
17
+ core.PublishedThemePagesDocument,
18
+ variables
19
+ ])
20
+ ]);
21
+ const dataBuilder = theme.publishedThemePages?.[0];
22
+ if (!product || !dataBuilder) {
23
+ throw new Error('Product not found');
24
+ }
25
+ const productTemplate = normalize.parseBuilderTemplate(dataBuilder);
26
+ const queries = core.prefetchQueries(productTemplate);
27
+ const datas = await Promise.allSettled(queries.map(({ query, variables, func })=>{
28
+ if (func) {
29
+ return func(fetcher, variables);
30
+ }
31
+ if (query) return fetcher([
32
+ query,
33
+ variables
34
+ ]);
35
+ return {};
36
+ }));
37
+ const fallback = queries.reduce((acc, { key }, index)=>{
38
+ const res = datas[index];
39
+ if (res?.status === 'fulfilled') {
40
+ return {
41
+ ...acc,
42
+ [key]: res.value
43
+ };
44
+ }
45
+ return acc;
46
+ }, {});
47
+ return parseJson.serializableJson({
48
+ builderData: productTemplate,
49
+ themeStyle: genCss.genCSS(dataBuilder.pageStyle?.data),
50
+ pageType,
51
+ swr: {
52
+ fallback
53
+ },
54
+ seo: {
55
+ title: product.title,
56
+ description: product.description,
57
+ openGraph: {
58
+ images: product.featuredImage?.src ? [
59
+ {
60
+ url: product.featuredImage.src,
61
+ alt: product.featuredImage?.alt,
62
+ height: product.featuredImage?.height,
63
+ width: product.featuredImage?.width,
64
+ type: product.featuredImage?.contentType
65
+ }
66
+ ] : []
67
+ }
68
+ },
69
+ product
70
+ });
71
+ };
72
+
73
+ exports.getProductProps = getProductProps;
@@ -1 +1,155 @@
1
- "use strict";var core=require("@gem-sdk/core"),adapterShopify=require("@gem-sdk/adapter-shopify"),nextjs=require("@sentry/nextjs"),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");const getStaticPagePropsPreview=(e,a)=>async r=>{try{let o="STATIC",t={handleURL:r,pageType:o},[s,i,n]=await Promise.allSettled([e([core.PreviewPageDocument,t,"previewPage"]),e([core.StorePropertyDocument]),a([adapterShopify.ShopMetaDocument])]);if("rejected"===s.status)throw Error(s.reason?.[0]);let l=s.value.previewPage;if(!l)throw Error(`No data builder found for slug: /preview/${r}`);let c=normalize.parseBuilderTemplateV2(l),[p,g,m]=await Promise.all([googleFonts.getFontStyleFromPageTemplate(c),googleFonts.getFontFromGlobalStyle(l?.pageStyle?.data),getFallback.getFallbackV2(e,c)]),u=l.isMobile??!1,d=l?.themePageDataSEO?.find(e=>e?.key==="global-meta-description")?.value,h=parseJson.parseJson(l?.themePageDataSEO?.find(e=>e?.key==="global-meta-thumbnail")?.value),f="fulfilled"===n.status?n.value:void 0,y="fulfilled"===i.status?i.value:void 0,P=y?.storeProperty?.favicon??"/favicon/favicon-32x32.png",x={defaultTitle:f?.shop.name,title:l?.name,description:d??f?.shop.description,openGraph:{site_name:f?.shop.name,locale:f?.localization.country.isoCode,title:l?.name??f?.shop.name,description:d??f?.shop.description,images:h?[h]:[]},nofollow:!0,noindex:!0,canonical:`/preview/${r}`,additionalMetaTags:[{name:"theme-color",content:"#000000"}],additionalLinkTags:[{rel:"icon",sizes:"32x32",href:`${P}-/crop/1:1/center/-/smart_resize/32x32/`},{rel:"icon",sizes:"16x16",href:`${P}-/crop/1:1/center/-/smart_resize/16x16/`},{rel:"apple-touch-icon",sizes:"180x180",href:`${P}-/crop/1:1/center/-/smart_resize/180x180/`},{rel:"manifest",href:generateManifres.generateManifest({theme_color:"#000000",background_color:"#ffffff",display:"standalone",scope:"/",start_url:"/",name:f?.shop.name,short_name:f?.shop.name,description:f?.shop.description,icons:[{src:`${P}-/crop/1:1/center/-/smart_resize/192x192/`,sizes:"192x192",type:"image/png",purpose:"any maskable"},{src:`${P}-/crop/1:1/center/-/smart_resize/512x512/`,sizes:"512x512",type:"image/png"}]})}]},v=f?.localization.language.isoCode??null,k=f?.localization.country.isoCode??null,z=v&&k?`${v}-${k}`:null;return parseJson.serializableJson({themeStyle:genCss.genCSS(l?.pageStyle?.data,u),fontStyle:g,elementFontStyle:p,builderData:c,pageType:o,moneyFormat:f?.shop.moneyFormat??null,currency:f?.localization.country.currency.isoCode??null,languageIsoCode:v,countryIsoCode:k,locale:z,swr:{fallback:m},swatches:parseJson.parseJson(y?.storeProperty?.swatchesConfig),seo:x,mobileOnly:u,gaTrackingId:l.themePageAnalytic?.gaTrackingID??null,facebookPixelId:l.themePageAnalytic?.fbPixelID??null,tiktokPixelId:l.themePageAnalytic?.tiktokPixelID??null,customCodeHeader:l.themePageCustomCode?.header??null,customCodeBody:l.themePageCustomCode?.body??null})}catch(e){throw nextjs.captureException(e),e}};exports.getStaticPagePropsPreview=getStaticPagePropsPreview;
1
+ 'use strict';
2
+
3
+ var core = require('@gem-sdk/core');
4
+ var adapterShopify = require('@gem-sdk/adapter-shopify');
5
+ var nextjs = require('@sentry/nextjs');
6
+ var googleFonts = require('../google-fonts.js');
7
+ var genCss = require('../helpers/gen-css.js');
8
+ var generateManifres = require('../helpers/generate-manifres.js');
9
+ var getFallback = require('../helpers/get-fallback.js');
10
+ var normalize = require('../helpers/normalize.js');
11
+ var parseJson = require('../helpers/parse-json.js');
12
+ var customFonts = require('../custom-fonts.js');
13
+
14
+ const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
15
+ try {
16
+ const pageType = 'STATIC';
17
+ const variables = {
18
+ handleURL: slug,
19
+ pageType
20
+ };
21
+ const [theme, storeProperty, shopifyMeta] = await Promise.allSettled([
22
+ fetcher([
23
+ core.PreviewThemePageDocument,
24
+ variables
25
+ ]),
26
+ fetcher([
27
+ core.StorePropertyDocument
28
+ ]),
29
+ shopifyFetcher([
30
+ adapterShopify.ShopMetaDocument
31
+ ])
32
+ ]);
33
+ if (theme.status === 'rejected') {
34
+ throw new Error(theme.reason?.[0]);
35
+ }
36
+ const dataBuilder = theme.value.previewThemePage;
37
+ if (!dataBuilder) {
38
+ throw new Error(`No data builder found for slug: /preview/${slug}`);
39
+ }
40
+ const themePageCustomFonts = dataBuilder.customFonts;
41
+ const pageTemplate = normalize.parseBuilderTemplateV2(dataBuilder);
42
+ const [elementFontStyle, fontStyle, fallback, customFonts$1] = await Promise.all([
43
+ googleFonts.getFontStyleFromPageTemplate(pageTemplate),
44
+ googleFonts.getFontFromGlobalStyle(dataBuilder?.themeStyle?.data),
45
+ getFallback.getFallbackV2(fetcher, pageTemplate),
46
+ customFonts.getCustomFonts(themePageCustomFonts)
47
+ ]);
48
+ const mobileOnly = !!dataBuilder.isMobile;
49
+ const description = dataBuilder?.dataSEO?.find((item)=>item?.key === 'global-meta-description')?.value;
50
+ const thumbnail = parseJson.parseJson(dataBuilder?.dataSEO?.find((item)=>item?.key === 'global-meta-thumbnail')?.value);
51
+ const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
52
+ const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
53
+ const favicon = shopData?.storeProperty?.favicon ?? '/favicon/favicon-32x32.png';
54
+ const seo = {
55
+ defaultTitle: shopMeta?.shop.name,
56
+ title: dataBuilder?.name,
57
+ description: description ?? shopMeta?.shop.description,
58
+ openGraph: {
59
+ site_name: shopMeta?.shop.name,
60
+ locale: shopMeta?.localization.country.isoCode,
61
+ title: dataBuilder?.name ?? shopMeta?.shop.name,
62
+ description: description ?? shopMeta?.shop.description,
63
+ images: thumbnail ? [
64
+ thumbnail
65
+ ] : []
66
+ },
67
+ nofollow: true,
68
+ noindex: true,
69
+ canonical: `/preview/${slug}`,
70
+ additionalMetaTags: [
71
+ {
72
+ name: 'theme-color',
73
+ content: '#000000'
74
+ }
75
+ ],
76
+ additionalLinkTags: [
77
+ {
78
+ rel: 'icon',
79
+ sizes: '32x32',
80
+ href: `${favicon}-/crop/1:1/center/-/smart_resize/32x32/`
81
+ },
82
+ {
83
+ rel: 'icon',
84
+ sizes: '16x16',
85
+ href: `${favicon}-/crop/1:1/center/-/smart_resize/16x16/`
86
+ },
87
+ {
88
+ rel: 'apple-touch-icon',
89
+ sizes: '180x180',
90
+ href: `${favicon}-/crop/1:1/center/-/smart_resize/180x180/`
91
+ },
92
+ {
93
+ rel: 'manifest',
94
+ href: generateManifres.generateManifest({
95
+ theme_color: '#000000',
96
+ background_color: '#ffffff',
97
+ display: 'standalone',
98
+ scope: '/',
99
+ start_url: '/',
100
+ name: shopMeta?.shop.name,
101
+ short_name: shopMeta?.shop.name,
102
+ description: shopMeta?.shop.description,
103
+ icons: [
104
+ {
105
+ src: `${favicon}-/crop/1:1/center/-/smart_resize/192x192/`,
106
+ sizes: '192x192',
107
+ type: 'image/png',
108
+ purpose: 'any maskable'
109
+ },
110
+ {
111
+ src: `${favicon}-/crop/1:1/center/-/smart_resize/512x512/`,
112
+ sizes: '512x512',
113
+ type: 'image/png'
114
+ }
115
+ ]
116
+ })
117
+ }
118
+ ]
119
+ };
120
+ const languageIsoCode = shopMeta?.localization.language.isoCode ?? null;
121
+ const countryIsoCode = shopMeta?.localization.country.isoCode ?? null;
122
+ const locale = languageIsoCode && countryIsoCode ? `${languageIsoCode}-${countryIsoCode}` : null;
123
+ return parseJson.serializableJson({
124
+ themeStyle: genCss.genCSS(dataBuilder?.themeStyle?.data, mobileOnly),
125
+ fontStyle,
126
+ elementFontStyle,
127
+ builderData: pageTemplate,
128
+ pageType,
129
+ moneyFormat: shopMeta?.shop?.moneyFormat ?? null,
130
+ currency: shopMeta?.localization?.country?.currency?.isoCode ?? null,
131
+ languageIsoCode,
132
+ countryIsoCode,
133
+ locale,
134
+ swr: {
135
+ fallback
136
+ },
137
+ swatches: parseJson.parseJson(shopData?.storeProperty?.swatchesConfig),
138
+ seo,
139
+ mobileOnly,
140
+ gaTrackingId: dataBuilder.analytic?.gaTrackingID ?? null,
141
+ facebookPixelId: dataBuilder.analytic?.fbPixelID ?? null,
142
+ tiktokPixelId: dataBuilder.analytic?.tiktokPixelID ?? null,
143
+ customCodeHeader: dataBuilder.customCode?.header ?? null,
144
+ customCodeBody: dataBuilder.customCode?.body ?? null,
145
+ customFonts: customFonts$1,
146
+ pageBackground: normalize.extractPageBackground(dataBuilder),
147
+ interaction: dataBuilder?.interaction
148
+ });
149
+ } catch (err) {
150
+ nextjs.captureException(err);
151
+ throw err;
152
+ }
153
+ };
154
+
155
+ exports.getStaticPagePropsPreview = getStaticPagePropsPreview;