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