@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,300 +1 @@
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
- dynamicDiscountOffer: undefined,
37
- productOffers: []
38
- };
39
- };
40
- const fetchPostPurchasePageDataByID = async (data, fetcher)=>{
41
- const variables = {
42
- themePageId: data.themePageId,
43
- first: 1,
44
- where: {
45
- default: true
46
- }
47
- };
48
- const [theme, storeProperty, saleFunnelDiscounts, saleFunnelOffer] = await Promise.allSettled([
49
- fetcher([
50
- core.ThemePageDocument,
51
- variables
52
- ]),
53
- fetcher([
54
- core.StorePropertyDocument
55
- ]),
56
- fetcher([
57
- core.SaleFunnelDiscountsDocument,
58
- {
59
- where: {
60
- saleFunnelOfferID: data.currentOfferID
61
- }
62
- }
63
- ]),
64
- fetcher([
65
- core.SaleFunnelOfferDocument,
66
- {
67
- saleFunnelOfferId: data.currentOfferID
68
- }
69
- ])
70
- ]);
71
- if (theme.status === 'rejected') {
72
- throw new Error(theme.reason?.[0]);
73
- }
74
- if (saleFunnelDiscounts.status === 'rejected') {
75
- throw new Error(saleFunnelDiscounts.reason?.[0]);
76
- }
77
- if (saleFunnelOffer.status === 'rejected') {
78
- throw new Error(saleFunnelOffer.reason?.[0]);
79
- }
80
- return {
81
- dataBuilder: theme.value.themePage,
82
- pageStyle: theme.value.themePage?.theme?.themeStyles?.edges?.[0]?.node?.data,
83
- storeProperty,
84
- dynamicDiscountOffer: saleFunnelOffer.value.saleFunnelOffer?.dynamicDiscounts?.[0],
85
- productOffers: saleFunnelDiscounts.value.saleFunnelDiscounts?.edges?.filter((item)=>item?.node?.objectType === 'PRODUCT' && item?.node?.type === 'ORDER_VALUE') || []
86
- };
87
- };
88
- const fetchThemePageDataByTemplateID = async (data, fetcher)=>{
89
- const variables = {
90
- libraryTemplateId: data.libraryTemplateId
91
- };
92
- let productOffers = [];
93
- const [theme, storeProperty] = await Promise.allSettled([
94
- fetcher([
95
- core.LibraryTemplateDocument,
96
- variables
97
- ]),
98
- fetcher([
99
- core.StorePropertyDocument
100
- ])
101
- ]);
102
- if (data.currentOfferID) {
103
- const [librarySaleFunnel] = await Promise.allSettled([
104
- fetcher([
105
- core.LibrarySaleFunnelDocument,
106
- {
107
- librarySaleFunnelId: data.librarySaleFunnelID
108
- }
109
- ])
110
- ]);
111
- if (librarySaleFunnel.status === 'rejected') {
112
- throw new Error(librarySaleFunnel.reason?.[0]);
113
- }
114
- const offer = librarySaleFunnel.value.librarySaleFunnel?.offers?.find((offer)=>offer?.id === data.currentOfferID);
115
- if (offer) {
116
- productOffers = offer.discounts?.filter((item)=>item?.objectType === 'PRODUCT' && item.type === 'ORDER_VALUE').map((item)=>({
117
- node: {
118
- ...item
119
- }
120
- })) || [];
121
- }
122
- }
123
- if (theme.status === 'rejected') {
124
- throw new Error(theme.reason?.[0]);
125
- }
126
- return {
127
- dataBuilder: theme.value.libraryTemplate,
128
- pageStyle: undefined,
129
- storeProperty,
130
- dynamicDiscountOffer: undefined,
131
- productOffers: productOffers
132
- };
133
- };
134
- const fetchShopLibraryPageDataByID = async (data, fetcher)=>{
135
- const variables = {
136
- shopLibraryPageId: data.shopLibraryPageId
137
- };
138
- const [theme, storeProperty, saleFunnelDiscounts, saleFunnelOffer] = await Promise.allSettled([
139
- fetcher([
140
- core.ShopLibraryPageDocument,
141
- variables
142
- ]),
143
- fetcher([
144
- core.StorePropertyDocument
145
- ]),
146
- fetcher([
147
- core.SaleFunnelDiscountsDocument,
148
- {
149
- where: {
150
- saleFunnelOfferID: data.currentOfferID
151
- }
152
- }
153
- ]),
154
- fetcher([
155
- core.SaleFunnelOfferDocument,
156
- {
157
- saleFunnelOfferId: data.currentOfferID
158
- }
159
- ])
160
- ]);
161
- if (theme.status === 'rejected') {
162
- throw new Error(theme.reason?.[0]);
163
- }
164
- if (saleFunnelDiscounts.status === 'rejected') {
165
- throw new Error(saleFunnelDiscounts.reason?.[0]);
166
- }
167
- if (saleFunnelOffer.status === 'rejected') {
168
- throw new Error(saleFunnelOffer.reason?.[0]);
169
- }
170
- return {
171
- dataBuilder: theme.value.shopLibraryPage,
172
- pageStyle: undefined,
173
- storeProperty,
174
- dynamicDiscountOffer: saleFunnelOffer.value.saleFunnelOffer?.dynamicDiscounts?.[0],
175
- productOffers: saleFunnelDiscounts.value.saleFunnelDiscounts?.edges?.filter((item)=>item?.node?.objectType === 'PRODUCT' && item?.node?.type === 'ORDER_VALUE') || []
176
- };
177
- };
178
- const fetchLibraryTemplateDataByID = async (data, fetcher)=>{
179
- const variables = {
180
- libraryTemplateId: data.libraryTemplateId
181
- };
182
- const [theme, storeProperty, saleFunnelDiscounts, saleFunnelOffer] = await Promise.allSettled([
183
- fetcher([
184
- core.LibraryTemplateDocument,
185
- variables
186
- ]),
187
- fetcher([
188
- core.StorePropertyDocument
189
- ]),
190
- fetcher([
191
- core.SaleFunnelDiscountsDocument,
192
- {
193
- where: {
194
- saleFunnelOfferID: data.currentOfferID
195
- }
196
- }
197
- ]),
198
- fetcher([
199
- core.SaleFunnelOfferDocument,
200
- {
201
- saleFunnelOfferId: data.currentOfferID
202
- }
203
- ])
204
- ]);
205
- if (theme.status === 'rejected') {
206
- throw new Error(theme.reason?.[0]);
207
- }
208
- if (saleFunnelDiscounts.status === 'rejected') {
209
- throw new Error(saleFunnelDiscounts.reason?.[0]);
210
- }
211
- if (saleFunnelOffer.status === 'rejected') {
212
- throw new Error(saleFunnelOffer.reason?.[0]);
213
- }
214
- return {
215
- dataBuilder: theme.value.libraryTemplate,
216
- pageStyle: undefined,
217
- storeProperty,
218
- dynamicDiscountOffer: saleFunnelOffer.value.saleFunnelOffer?.dynamicDiscounts?.[0],
219
- productOffers: saleFunnelDiscounts.value.saleFunnelDiscounts?.edges?.filter((item)=>item?.node?.objectType === 'PRODUCT' && item?.node?.type === 'ORDER_VALUE') || []
220
- };
221
- };
222
- const getRelevantPageData = async (data)=>{
223
- const { id, currentOfferID, fetcher, isLibraryTemplate, librarySaleFunnelID, isShopLibraryPage } = data;
224
- if (librarySaleFunnelID) {
225
- return await fetchThemePageDataByTemplateID({
226
- libraryTemplateId: id,
227
- currentOfferID,
228
- librarySaleFunnelID
229
- }, fetcher);
230
- }
231
- if (isShopLibraryPage && currentOfferID) {
232
- return await fetchShopLibraryPageDataByID({
233
- shopLibraryPageId: id,
234
- currentOfferID
235
- }, fetcher);
236
- }
237
- if (isLibraryTemplate && currentOfferID) {
238
- return await fetchLibraryTemplateDataByID({
239
- libraryTemplateId: id,
240
- currentOfferID
241
- }, fetcher);
242
- }
243
- if (currentOfferID) {
244
- return await fetchPostPurchasePageDataByID({
245
- themePageId: id,
246
- currentOfferID
247
- }, fetcher);
248
- }
249
- return await fetchSalePageDataByID({
250
- themePageId: id
251
- }, fetcher);
252
- };
253
- const getPostPurchasePropsPreview = (fetcher, librarySaleFunnelID, storeFrontFetcher)=>async (data)=>{
254
- try {
255
- const { id, currentOfferID, isLibraryTemplate, isShopLibraryPage } = data;
256
- const { dataBuilder, storeProperty, productOffers, pageStyle, dynamicDiscountOffer } = await getRelevantPageData({
257
- id,
258
- currentOfferID,
259
- fetcher,
260
- isLibraryTemplate,
261
- isShopLibraryPage,
262
- librarySaleFunnelID
263
- });
264
- if (!dataBuilder) {
265
- throw new Error(`No data builder found for slug: /preview/${id}`);
266
- }
267
- const pageTemplate = librarySaleFunnelID || isLibraryTemplate && currentOfferID ? normalize.parseBuilderLibraryTemplate(dataBuilder) : isShopLibraryPage ? normalize.parseShopLibraryPageTemplate(dataBuilder) : normalize.parseBuilderTemplateV2(dataBuilder);
268
- const gemPagesStoreFrontFetcher = storeFrontFetcher || fetcher;
269
- const [elementFontStyle, fontStyle, fallback] = await Promise.all([
270
- googleFonts.getFontStyleFromPageTemplate(pageTemplate),
271
- googleFonts.getFontFromGlobalStyle(pageStyle),
272
- getFallback.getFallbackV2(gemPagesStoreFrontFetcher, pageTemplate, false)
273
- ]);
274
- const { seo, pageConfig } = usePagePreview.usePagePreview(dataBuilder, storeProperty);
275
- return parseJson.serializableJson({
276
- themeStyle: genCss.genCSS(pageStyle),
277
- seo,
278
- ...pageConfig,
279
- elementFontStyle,
280
- fontStyle,
281
- builderData: pageTemplate,
282
- swr: {
283
- fallback
284
- },
285
- productOffers,
286
- dynamicDiscountOffer
287
- });
288
- } catch (err) {
289
- nextjs.captureException(err);
290
- throw err;
291
- }
292
- };
293
-
294
- exports.fetchLibraryTemplateDataByID = fetchLibraryTemplateDataByID;
295
- exports.fetchPostPurchasePageDataByID = fetchPostPurchasePageDataByID;
296
- exports.fetchSalePageDataByID = fetchSalePageDataByID;
297
- exports.fetchShopLibraryPageDataByID = fetchShopLibraryPageDataByID;
298
- exports.fetchThemePageDataByTemplateID = fetchThemePageDataByTemplateID;
299
- exports.getPostPurchasePropsPreview = getPostPurchasePropsPreview;
300
- exports.getRelevantPageData = getRelevantPageData;
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,r)=>{let a={themePageId:e.themePageId,first:1,where:{default:!0}},[t,o]=await Promise.allSettled([r([core.ThemePageDocument,a]),r([core.StorePropertyDocument])]);if("rejected"===t.status)throw Error(t.reason?.[0]);return{dataBuilder:t.value.themePage,pageStyle:t.value.themePage?.theme?.themeStyles?.edges?.[0]?.node?.data,storeProperty:o,dynamicDiscountOffer:void 0,productOffers:[]}},fetchPostPurchasePageDataByID=async(e,r)=>{let a={themePageId:e.themePageId,first:1,where:{default:!0}},[t,o,l,s]=await Promise.allSettled([r([core.ThemePageDocument,a]),r([core.StorePropertyDocument]),r([core.SaleFunnelDiscountsDocument,{where:{saleFunnelOfferID:e.currentOfferID}}]),r([core.SaleFunnelOfferDocument,{saleFunnelOfferId:e.currentOfferID}])]);if("rejected"===t.status)throw Error(t.reason?.[0]);if("rejected"===l.status)throw Error(l.reason?.[0]);if("rejected"===s.status)throw Error(s.reason?.[0]);return{dataBuilder:t.value.themePage,pageStyle:t.value.themePage?.theme?.themeStyles?.edges?.[0]?.node?.data,storeProperty:o,dynamicDiscountOffer:s.value.saleFunnelOffer?.dynamicDiscounts?.[0],productOffers:l.value.saleFunnelDiscounts?.edges?.filter(e=>e?.node?.objectType==="PRODUCT"&&e?.node?.type==="ORDER_VALUE")||[]}},fetchThemePageDataByTemplateID=async(e,r)=>{let a={libraryTemplateId:e.libraryTemplateId},t=[],[o,l]=await Promise.allSettled([r([core.LibraryTemplateDocument,a]),r([core.StorePropertyDocument])]);if(e.currentOfferID){let[a]=await Promise.allSettled([r([core.LibrarySaleFunnelDocument,{librarySaleFunnelId:e.librarySaleFunnelID}])]);if("rejected"===a.status)throw Error(a.reason?.[0]);let o=a.value.librarySaleFunnel?.offers?.find(r=>r?.id===e.currentOfferID);o&&(t=o.discounts?.filter(e=>e?.objectType==="PRODUCT"&&"ORDER_VALUE"===e.type).map(e=>({node:{...e}}))||[])}if("rejected"===o.status)throw Error(o.reason?.[0]);return{dataBuilder:o.value.libraryTemplate,pageStyle:void 0,storeProperty:l,dynamicDiscountOffer:void 0,productOffers:t}},fetchShopLibraryPageDataByID=async(e,r)=>{let a={shopLibraryPageId:e.shopLibraryPageId},[t,o,l,s]=await Promise.allSettled([r([core.ShopLibraryPageDocument,a]),r([core.StorePropertyDocument]),r([core.SaleFunnelDiscountsDocument,{where:{saleFunnelOfferID:e.currentOfferID}}]),r([core.SaleFunnelOfferDocument,{saleFunnelOfferId:e.currentOfferID}])]);if("rejected"===t.status)throw Error(t.reason?.[0]);if("rejected"===l.status)throw Error(l.reason?.[0]);if("rejected"===s.status)throw Error(s.reason?.[0]);return{dataBuilder:t.value.shopLibraryPage,pageStyle:void 0,storeProperty:o,dynamicDiscountOffer:s.value.saleFunnelOffer?.dynamicDiscounts?.[0],productOffers:l.value.saleFunnelDiscounts?.edges?.filter(e=>e?.node?.objectType==="PRODUCT"&&e?.node?.type==="ORDER_VALUE")||[]}},fetchLibraryTemplateDataByID=async(e,r)=>{let a={libraryTemplateId:e.libraryTemplateId},[t,o,l,s]=await Promise.allSettled([r([core.LibraryTemplateDocument,a]),r([core.StorePropertyDocument]),r([core.SaleFunnelDiscountsDocument,{where:{saleFunnelOfferID:e.currentOfferID}}]),r([core.SaleFunnelOfferDocument,{saleFunnelOfferId:e.currentOfferID}])]);if("rejected"===t.status)throw Error(t.reason?.[0]);if("rejected"===l.status)throw Error(l.reason?.[0]);if("rejected"===s.status)throw Error(s.reason?.[0]);return{dataBuilder:t.value.libraryTemplate,pageStyle:void 0,storeProperty:o,dynamicDiscountOffer:s.value.saleFunnelOffer?.dynamicDiscounts?.[0],productOffers:l.value.saleFunnelDiscounts?.edges?.filter(e=>e?.node?.objectType==="PRODUCT"&&e?.node?.type==="ORDER_VALUE")||[]}},getRelevantPageData=async e=>{let{id:r,currentOfferID:a,fetcher:t,isLibraryTemplate:o,librarySaleFunnelID:l,isShopLibraryPage:s}=e;return l?await fetchThemePageDataByTemplateID({libraryTemplateId:r,currentOfferID:a,librarySaleFunnelID:l},t):s&&a?await fetchShopLibraryPageDataByID({shopLibraryPageId:r,currentOfferID:a},t):o&&a?await fetchLibraryTemplateDataByID({libraryTemplateId:r,currentOfferID:a},t):a?await fetchPostPurchasePageDataByID({themePageId:r,currentOfferID:a},t):await fetchSalePageDataByID({themePageId:r},t)},getPostPurchasePropsPreview=(e,r,a)=>async t=>{try{let{id:o,currentOfferID:l,isLibraryTemplate:s,isShopLibraryPage:n}=t,{dataBuilder:c,storeProperty:u,productOffers:i,pageStyle:f,dynamicDiscountOffer:D}=await getRelevantPageData({id:o,currentOfferID:l,fetcher:e,isLibraryTemplate:s,isShopLibraryPage:n,librarySaleFunnelID:r});if(!c)throw Error(`No data builder found for slug: /preview/${o}`);let d=r||s&&l?normalize.parseBuilderLibraryTemplate(c):n?normalize.parseShopLibraryPageTemplate(c):normalize.parseBuilderTemplateV2(c),y=a||e,[m,h,P]=await Promise.all([googleFonts.getFontStyleFromPageTemplate(d),googleFonts.getFontFromGlobalStyle(f),getFallback.getFallbackV2(y,d,!1)]),{seo:g,pageConfig:p}=usePagePreview.usePagePreview(c,u);return parseJson.serializableJson({themeStyle:genCss.genCSS(f),seo:g,...p,elementFontStyle:m,fontStyle:h,builderData:d,swr:{fallback:P},productOffers:i,dynamicDiscountOffer:D})}catch(e){throw console.log("error",e),nextjs.captureException(e),e}};exports.fetchLibraryTemplateDataByID=fetchLibraryTemplateDataByID,exports.fetchPostPurchasePageDataByID=fetchPostPurchasePageDataByID,exports.fetchSalePageDataByID=fetchSalePageDataByID,exports.fetchShopLibraryPageDataByID=fetchShopLibraryPageDataByID,exports.fetchThemePageDataByTemplateID=fetchThemePageDataByTemplateID,exports.getPostPurchasePropsPreview=getPostPurchasePropsPreview,exports.getRelevantPageData=getRelevantPageData;
@@ -1,18 +1 @@
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
+ "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,73 +1 @@
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
+ "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,159 +1 @@
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
- var sentry = require('../helpers/sentry.js');
14
-
15
- const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
16
- try {
17
- const pageType = 'STATIC';
18
- const variables = {
19
- handleURL: slug,
20
- pageType
21
- };
22
- const [theme, storeProperty, shopifyMeta] = await Promise.allSettled([
23
- fetcher([
24
- core.PreviewThemePageDocument,
25
- variables
26
- ]),
27
- fetcher([
28
- core.StorePropertyDocument
29
- ]),
30
- shopifyFetcher([
31
- adapterShopify.ShopMetaDocument
32
- ])
33
- ]);
34
- if (theme.status === 'rejected') {
35
- sentry.sentryCaptureException('PreviewThemePageDocument', JSON.stringify(theme), {
36
- variables,
37
- theme
38
- });
39
- throw new Error(theme.reason?.[0]);
40
- }
41
- const dataBuilder = theme.value.previewThemePage;
42
- if (!dataBuilder) {
43
- throw new Error(`No data builder found for slug: /preview/${slug}`);
44
- }
45
- const themePageCustomFonts = dataBuilder.customFonts;
46
- const pageTemplate = normalize.parseBuilderTemplateV2(dataBuilder);
47
- const [elementFontStyle, fontStyle, fallback, customFonts$1] = await Promise.all([
48
- googleFonts.getFontStyleFromPageTemplate(pageTemplate),
49
- googleFonts.getFontFromGlobalStyle(dataBuilder?.themeStyle?.data),
50
- getFallback.getFallbackV2(fetcher, pageTemplate),
51
- customFonts.getCustomFonts(themePageCustomFonts)
52
- ]);
53
- const mobileOnly = dataBuilder.isMobile ?? false;
54
- const description = dataBuilder?.dataSEO?.find((item)=>item?.key === 'global-meta-description')?.value;
55
- const thumbnail = parseJson.parseJson(dataBuilder?.dataSEO?.find((item)=>item?.key === 'global-meta-thumbnail')?.value);
56
- const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
57
- const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
58
- const favicon = shopData?.storeProperty?.favicon ?? '/favicon/favicon-32x32.png';
59
- const seo = {
60
- defaultTitle: shopMeta?.shop.name,
61
- title: dataBuilder?.name,
62
- description: description ?? shopMeta?.shop.description,
63
- openGraph: {
64
- site_name: shopMeta?.shop.name,
65
- locale: shopMeta?.localization.country.isoCode,
66
- title: dataBuilder?.name ?? shopMeta?.shop.name,
67
- description: description ?? shopMeta?.shop.description,
68
- images: thumbnail ? [
69
- thumbnail
70
- ] : []
71
- },
72
- nofollow: true,
73
- noindex: true,
74
- canonical: `/preview/${slug}`,
75
- additionalMetaTags: [
76
- {
77
- name: 'theme-color',
78
- content: '#000000'
79
- }
80
- ],
81
- additionalLinkTags: [
82
- {
83
- rel: 'icon',
84
- sizes: '32x32',
85
- href: `${favicon}-/crop/1:1/center/-/smart_resize/32x32/`
86
- },
87
- {
88
- rel: 'icon',
89
- sizes: '16x16',
90
- href: `${favicon}-/crop/1:1/center/-/smart_resize/16x16/`
91
- },
92
- {
93
- rel: 'apple-touch-icon',
94
- sizes: '180x180',
95
- href: `${favicon}-/crop/1:1/center/-/smart_resize/180x180/`
96
- },
97
- {
98
- rel: 'manifest',
99
- href: generateManifres.generateManifest({
100
- theme_color: '#000000',
101
- background_color: '#ffffff',
102
- display: 'standalone',
103
- scope: '/',
104
- start_url: '/',
105
- name: shopMeta?.shop.name,
106
- short_name: shopMeta?.shop.name,
107
- description: shopMeta?.shop.description,
108
- icons: [
109
- {
110
- src: `${favicon}-/crop/1:1/center/-/smart_resize/192x192/`,
111
- sizes: '192x192',
112
- type: 'image/png',
113
- purpose: 'any maskable'
114
- },
115
- {
116
- src: `${favicon}-/crop/1:1/center/-/smart_resize/512x512/`,
117
- sizes: '512x512',
118
- type: 'image/png'
119
- }
120
- ]
121
- })
122
- }
123
- ]
124
- };
125
- const languageIsoCode = shopMeta?.localization.language.isoCode ?? null;
126
- const countryIsoCode = shopMeta?.localization.country.isoCode ?? null;
127
- const locale = !languageIsoCode || !countryIsoCode ? null : `${languageIsoCode}-${countryIsoCode}`;
128
- return parseJson.serializableJson({
129
- themeStyle: genCss.genCSS(dataBuilder?.themeStyle?.data, mobileOnly),
130
- fontStyle,
131
- elementFontStyle,
132
- builderData: pageTemplate,
133
- pageType,
134
- moneyFormat: shopMeta?.shop.moneyFormat ?? null,
135
- currency: shopMeta?.localization.country.currency.isoCode ?? null,
136
- languageIsoCode,
137
- countryIsoCode,
138
- locale,
139
- swr: {
140
- fallback
141
- },
142
- swatches: parseJson.parseJson(shopData?.storeProperty?.swatchesConfig),
143
- seo,
144
- mobileOnly,
145
- gaTrackingId: dataBuilder.analytic?.gaTrackingID ?? null,
146
- facebookPixelId: dataBuilder.analytic?.fbPixelID ?? null,
147
- tiktokPixelId: dataBuilder.analytic?.tiktokPixelID ?? null,
148
- customCodeHeader: dataBuilder.customCode?.header ?? null,
149
- customCodeBody: dataBuilder.customCode?.body ?? null,
150
- customFonts: customFonts$1,
151
- interaction: dataBuilder?.interaction
152
- });
153
- } catch (err) {
154
- nextjs.captureException(err);
155
- throw err;
156
- }
157
- };
158
-
159
- exports.getStaticPagePropsPreview = getStaticPagePropsPreview;
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"),customFonts=require("../custom-fonts.js"),sentry=require("../helpers/sentry.js");const getStaticPagePropsPreview=(e,o)=>async t=>{try{let r="STATIC",a={handleURL:t,pageType:r},[s,n,i]=await Promise.allSettled([e([core.PreviewThemePageDocument,a]),e([core.StorePropertyDocument]),o([adapterShopify.ShopMetaDocument])]);if("rejected"===s.status)throw sentry.sentryCaptureException("PreviewThemePageDocument",s.reason,{variables:a,theme:s}),Error(s.reason?.[0]);let l=s.value.previewThemePage;if(!l)throw Error(`No data builder found for slug: /preview/${t}`);let c=l.customFonts,p=normalize.parseBuilderTemplateV2(l),[u,m,g,d]=await Promise.all([googleFonts.getFontStyleFromPageTemplate(p),googleFonts.getFontFromGlobalStyle(l?.themeStyle?.data),getFallback.getFallbackV2(e,p),customFonts.getCustomFonts(c)]),h=!!l.isMobile,f=l?.dataSEO?.find(e=>e?.key==="global-meta-description")?.value,y=parseJson.parseJson(l?.dataSEO?.find(e=>e?.key==="global-meta-thumbnail")?.value),P="fulfilled"===i.status?i.value:void 0,x="fulfilled"===n.status?n.value:void 0,k=x?.storeProperty?.favicon??"/favicon/favicon-32x32.png",v={defaultTitle:P?.shop.name,title:l?.name,description:f??P?.shop.description,openGraph:{site_name:P?.shop.name,locale:P?.localization.country.isoCode,title:l?.name??P?.shop.name,description:f??P?.shop.description,images:y?[y]:[]},nofollow:!0,noindex:!0,canonical:`/preview/${t}`,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:generateManifres.generateManifest({theme_color:"#000000",background_color:"#ffffff",display:"standalone",scope:"/",start_url:"/",name:P?.shop.name,short_name:P?.shop.name,description:P?.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"}]})}]},z=P?.localization.language.isoCode??null,S=P?.localization.country.isoCode??null,b=z&&S?`${z}-${S}`:null;return parseJson.serializableJson({themeStyle:genCss.genCSS(l?.themeStyle?.data,h),fontStyle:m,elementFontStyle:u,builderData:p,pageType:r,moneyFormat:P?.shop?.moneyFormat??null,currency:P?.localization?.country?.currency?.isoCode??null,languageIsoCode:z,countryIsoCode:S,locale:b,swr:{fallback:g},swatches:parseJson.parseJson(x?.storeProperty?.swatchesConfig),seo:v,mobileOnly:h,gaTrackingId:l.analytic?.gaTrackingID??null,facebookPixelId:l.analytic?.fbPixelID??null,tiktokPixelId:l.analytic?.tiktokPixelID??null,customCodeHeader:l.customCode?.header??null,customCodeBody:l.customCode?.body??null,customFonts:d,pageBackground:normalize.extractPageBackground(l),interaction:l?.interaction})}catch(e){throw nextjs.captureException(e),e}};exports.getStaticPagePropsPreview=getStaticPagePropsPreview;