@gem-sdk/pages 1.36.20 → 2.0.0-dev.832

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 (110) hide show
  1. package/dist/cjs/components/ErrorBoundary.js +1 -40
  2. package/dist/cjs/components/ErrorFallback.js +1 -26
  3. package/dist/cjs/components/FacebookPixel.js +3 -36
  4. package/dist/cjs/components/Footer.js +1 -125
  5. package/dist/cjs/components/FooterForPostPurchase.js +1 -0
  6. package/dist/cjs/components/GoogleAnalytic.js +5 -67
  7. package/dist/cjs/components/Header.js +1 -96
  8. package/dist/cjs/components/TikTokPixel.js +3 -19
  9. package/dist/cjs/components/builder/PopupManager.js +1 -62
  10. package/dist/cjs/components/builder/Toolbar.js +1 -883
  11. package/dist/cjs/components/builder/Toolbox.js +1 -384
  12. package/dist/cjs/components/builder/toolbar/Onboarding.js +1 -110
  13. package/dist/cjs/components/image-to-layout/AddSectionImageToLayout.js +1 -263
  14. package/dist/cjs/components/image-to-layout/DropElement.js +1 -164
  15. package/dist/cjs/components/image-to-layout/ImageToLayout.js +1 -41
  16. package/dist/cjs/index.js +1 -75
  17. package/dist/cjs/layouts/main.js +1 -30
  18. package/dist/cjs/libs/api/get-builder-props.js +1 -41
  19. package/dist/cjs/libs/api/get-collection-props.js +1 -68
  20. package/dist/cjs/libs/api/get-home-page-props-v2.js +1 -145
  21. package/dist/cjs/libs/api/get-home-page-props.js +1 -151
  22. package/dist/cjs/libs/api/get-post-purchase-props-preview.js +1 -0
  23. package/dist/cjs/libs/api/get-preview-props.js +1 -18
  24. package/dist/cjs/libs/api/get-product-props.js +1 -73
  25. package/dist/cjs/libs/api/get-static-page-props-preview.js +1 -150
  26. package/dist/cjs/libs/api/get-static-page-props-v2.js +1 -152
  27. package/dist/cjs/libs/api/get-static-page-props.js +1 -148
  28. package/dist/cjs/libs/custom-fonts.js +6 -60
  29. package/dist/cjs/libs/fetcher.js +1 -67
  30. package/dist/cjs/libs/get-layout.js +1 -13
  31. package/dist/cjs/libs/get-storefront-api.js +1 -12
  32. package/dist/cjs/libs/getStaticPaths.js +1 -10
  33. package/dist/cjs/libs/google-fonts.js +1 -81
  34. package/dist/cjs/libs/helpers/common.js +1 -27
  35. package/dist/cjs/libs/helpers/gen-css.js +1 -117
  36. package/dist/cjs/libs/helpers/gen-fonts.js +1 -68
  37. package/dist/cjs/libs/helpers/generate-manifres.js +1 -5
  38. package/dist/cjs/libs/helpers/get-fallback.js +1 -35
  39. package/dist/cjs/libs/helpers/normalize.js +1 -90
  40. package/dist/cjs/libs/helpers/parse-json.js +1 -16
  41. package/dist/cjs/libs/helpers/user-agent.js +1 -7
  42. package/dist/cjs/libs/hooks/use-tracking-view.js +1 -45
  43. package/dist/cjs/libs/hooks/usePagePreview.js +1 -0
  44. package/dist/cjs/libs/parse-html.js +1 -42
  45. package/dist/cjs/libs/shopify-cdn-with-google-fonts.js +1 -1845
  46. package/dist/cjs/pages/404.js +1 -43
  47. package/dist/cjs/pages/500.js +1 -74
  48. package/dist/cjs/pages/CollectionGlobalProvider.js +1 -59
  49. package/dist/cjs/pages/builder.js +1 -103
  50. package/dist/cjs/pages/collection-detail.js +1 -64
  51. package/dist/cjs/pages/preview.js +1 -26
  52. package/dist/cjs/pages/product-detail.js +1 -69
  53. package/dist/cjs/pages/static-v2.js +1 -91
  54. package/dist/cjs/pages/static.js +1 -75
  55. package/dist/esm/components/ErrorBoundary.js +1 -38
  56. package/dist/esm/components/ErrorFallback.js +1 -24
  57. package/dist/esm/components/FacebookPixel.js +3 -34
  58. package/dist/esm/components/Footer.js +1 -121
  59. package/dist/esm/components/FooterForPostPurchase.js +1 -0
  60. package/dist/esm/components/GoogleAnalytic.js +5 -65
  61. package/dist/esm/components/Header.js +1 -92
  62. package/dist/esm/components/TikTokPixel.js +3 -17
  63. package/dist/esm/components/builder/PopupManager.js +1 -58
  64. package/dist/esm/components/builder/Toolbar.js +1 -879
  65. package/dist/esm/components/builder/Toolbox.js +1 -380
  66. package/dist/esm/components/builder/toolbar/Onboarding.js +1 -106
  67. package/dist/esm/components/image-to-layout/AddSectionImageToLayout.js +1 -259
  68. package/dist/esm/components/image-to-layout/DropElement.js +1 -162
  69. package/dist/esm/components/image-to-layout/ImageToLayout.js +1 -37
  70. package/dist/esm/index.js +1 -33
  71. package/dist/esm/layouts/main.js +1 -26
  72. package/dist/esm/libs/api/get-builder-props.js +1 -39
  73. package/dist/esm/libs/api/get-collection-props.js +1 -66
  74. package/dist/esm/libs/api/get-home-page-props-v2.js +1 -143
  75. package/dist/esm/libs/api/get-home-page-props.js +1 -149
  76. package/dist/esm/libs/api/get-post-purchase-props-preview.js +1 -0
  77. package/dist/esm/libs/api/get-preview-props.js +1 -16
  78. package/dist/esm/libs/api/get-product-props.js +1 -71
  79. package/dist/esm/libs/api/get-static-page-props-preview.js +1 -148
  80. package/dist/esm/libs/api/get-static-page-props-v2.js +1 -150
  81. package/dist/esm/libs/api/get-static-page-props.js +1 -146
  82. package/dist/esm/libs/custom-fonts.js +6 -55
  83. package/dist/esm/libs/fetcher.js +1 -64
  84. package/dist/esm/libs/get-layout.js +1 -11
  85. package/dist/esm/libs/get-storefront-api.js +1 -10
  86. package/dist/esm/libs/getStaticPaths.js +1 -8
  87. package/dist/esm/libs/google-fonts.js +1 -75
  88. package/dist/esm/libs/helpers/common.js +1 -24
  89. package/dist/esm/libs/helpers/gen-css.js +1 -115
  90. package/dist/esm/libs/helpers/gen-fonts.js +1 -65
  91. package/dist/esm/libs/helpers/generate-manifres.js +1 -3
  92. package/dist/esm/libs/helpers/get-fallback.js +1 -33
  93. package/dist/esm/libs/helpers/normalize.js +1 -85
  94. package/dist/esm/libs/helpers/parse-json.js +1 -13
  95. package/dist/esm/libs/helpers/user-agent.js +1 -5
  96. package/dist/esm/libs/hooks/use-tracking-view.js +1 -43
  97. package/dist/esm/libs/hooks/usePagePreview.js +1 -0
  98. package/dist/esm/libs/parse-html.js +1 -40
  99. package/dist/esm/libs/shopify-cdn-with-google-fonts.js +1 -1843
  100. package/dist/esm/pages/404.js +1 -41
  101. package/dist/esm/pages/500.js +1 -72
  102. package/dist/esm/pages/CollectionGlobalProvider.js +1 -55
  103. package/dist/esm/pages/builder.js +1 -101
  104. package/dist/esm/pages/collection-detail.js +1 -60
  105. package/dist/esm/pages/preview.js +1 -24
  106. package/dist/esm/pages/product-detail.js +1 -65
  107. package/dist/esm/pages/static-v2.js +1 -89
  108. package/dist/esm/pages/static.js +1 -71
  109. package/dist/types/index.d.ts +28 -6
  110. package/package.json +5 -5
@@ -1,30 +1 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var jsxRuntime = require('react/jsx-runtime');
6
- var core = require('@gem-sdk/core');
7
- var parseHtml = require('../libs/parse-html.js');
8
-
9
- const MainLayout = ({ children, ...props })=>{
10
- const mobileOnly = core.useShopStore((s)=>s.mobileOnly);
11
- return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
12
- children: [
13
- parseHtml.parseHtml(props?.customCodeBody),
14
- /*#__PURE__*/ jsxRuntime.jsx("div", {
15
- className: core.cls({
16
- 'gp-max-w-mobile gp-mx-auto gp-w-full': mobileOnly
17
- }),
18
- children: children
19
- }),
20
- /*#__PURE__*/ jsxRuntime.jsx(core.AddOn, {
21
- name: "cookie-bar"
22
- }),
23
- /*#__PURE__*/ jsxRuntime.jsx(core.AddOn, {
24
- name: "cart-drawer"
25
- })
26
- ]
27
- });
28
- };
29
-
30
- exports.default = MainLayout;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var jsxRuntime=require("react/jsx-runtime"),core=require("@gem-sdk/core"),parseHtml=require("../libs/parse-html.js");const MainLayout=({children:e,...r})=>{let s=core.useShopStore(e=>e.mobileOnly);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[parseHtml.parseHtml(r?.customCodeBody),jsxRuntime.jsx("div",{className:core.cls({"gp-max-w-mobile gp-mx-auto gp-w-full":s}),children:e}),jsxRuntime.jsx(core.AddOn,{name:"cookie-bar"}),jsxRuntime.jsx(core.AddOn,{name:"cart-drawer"})]})};exports.default=MainLayout;
@@ -1,41 +1 @@
1
- 'use strict';
2
-
3
- var core = require('@gem-sdk/core');
4
- var adapterShopify = require('@gem-sdk/adapter-shopify');
5
- var parseJson = require('../helpers/parse-json.js');
6
-
7
- const getBuilderProps = async (fetcher, shopifyFetcher)=>{
8
- const [storeProperty, shopifyMeta] = await Promise.allSettled([
9
- fetcher([
10
- core.StorePropertyDocument
11
- ]),
12
- shopifyFetcher([
13
- adapterShopify.ShopMetaDocument
14
- ])
15
- ]);
16
- const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
17
- const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
18
- const seo = shopMeta ? {
19
- titleTemplate: `%s | ${shopMeta.shop.name}`,
20
- defaultTitle: shopMeta?.shop.name,
21
- title: 'Preview',
22
- description: shopMeta?.shop.description
23
- } : {};
24
- const languageIsoCode = shopMeta?.localization.language.isoCode ?? null;
25
- const countryIsoCode = shopMeta?.localization.country.isoCode ?? null;
26
- const locale = !languageIsoCode || !countryIsoCode ? null : `${languageIsoCode}-${countryIsoCode}`;
27
- return parseJson.serializableJson({
28
- moneyFormat: shopMeta?.shop.moneyFormat ?? null,
29
- currency: shopMeta?.localization.country.currency.isoCode ?? null,
30
- languageIsoCode,
31
- countryIsoCode,
32
- locale,
33
- swatches: parseJson.parseJson(shopData?.storeProperty?.swatchesConfig),
34
- swr: {
35
- revalidateOnMount: true
36
- },
37
- seo
38
- });
39
- };
40
-
41
- exports.getBuilderProps = getBuilderProps;
1
+ "use strict";var core=require("@gem-sdk/core"),adapterShopify=require("@gem-sdk/adapter-shopify"),parseJson=require("../helpers/parse-json.js");const getBuilderProps=async(e,o)=>{let[r,s]=await Promise.allSettled([e([core.StorePropertyDocument]),o([adapterShopify.ShopMetaDocument])]),t="fulfilled"===s.status?s.value:void 0,a="fulfilled"===r.status?r.value:void 0,l=t?{titleTemplate:`%s | ${t.shop.name}`,defaultTitle:t?.shop.name,title:"Preview",description:t?.shop.description}:{},i=t?.localization.language.isoCode??null,n=t?.localization.country.isoCode??null,u=i&&n?`${i}-${n}`:null;return parseJson.serializableJson({moneyFormat:t?.shop.moneyFormat??null,currency:t?.localization.country.currency.isoCode??null,languageIsoCode:i,countryIsoCode:n,locale:u,swatches:parseJson.parseJson(a?.storeProperty?.swatchesConfig),swr:{revalidateOnMount:!0},seo:l})};exports.getBuilderProps=getBuilderProps;
@@ -1,68 +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 getCollectionProps = (fetcher)=>async (handle)=>{
9
- const pageType = 'COLLECTION';
10
- const variables = {
11
- slug: handle,
12
- slugType: pageType
13
- };
14
- const [collectionData, theme] = await Promise.all([
15
- fetcher([
16
- core.CollectionDocument,
17
- {
18
- handle
19
- }
20
- ]),
21
- fetcher([
22
- core.PublishedThemePagesDocument,
23
- variables
24
- ])
25
- ]);
26
- const dataBuilder = theme.publishedThemePages?.[0];
27
- const collectionTemplate = normalize.parseBuilderTemplate(dataBuilder);
28
- if (!collectionData || !collectionData?.collection || !dataBuilder) {
29
- throw new Error('Collection not found');
30
- }
31
- const { collection } = collectionData;
32
- const queries = core.prefetchQueries(collectionTemplate);
33
- const datas = await Promise.allSettled(queries.map(({ query, variables, func })=>{
34
- if (func) {
35
- return func(fetcher, variables);
36
- }
37
- if (query) return fetcher([
38
- query,
39
- variables
40
- ]);
41
- return {};
42
- }));
43
- const fallback = queries.reduce((acc, { key }, index)=>{
44
- const res = datas[index];
45
- if (res?.status === 'fulfilled') {
46
- return {
47
- ...acc,
48
- [key]: res.value
49
- };
50
- }
51
- return acc;
52
- }, {});
53
- return parseJson.serializableJson({
54
- builderData: collectionTemplate,
55
- collection,
56
- pageType,
57
- themeStyle: genCss.genCSS(dataBuilder.pageStyle?.data),
58
- swr: {
59
- fallback
60
- },
61
- seo: {
62
- title: collection.title,
63
- description: collection.description
64
- }
65
- });
66
- };
67
-
68
- exports.getCollectionProps = getCollectionProps;
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 getCollectionProps=e=>async r=>{let s="COLLECTION",l={slug:r,slugType:s},[t,o]=await Promise.all([e([core.CollectionDocument,{handle:r}]),e([core.PublishedThemePagesDocument,l])]),i=o.publishedThemePages?.[0],a=normalize.parseBuilderTemplate(i);if(!t||!t?.collection||!i)throw Error("Collection not found");let{collection:n}=t,c=core.prefetchQueries(a),u=await Promise.allSettled(c.map(({query:r,variables:s,func:l})=>l?l(e,s):r?e([r,s]):{})),p=c.reduce((e,{key:r},s)=>{let l=u[s];return l?.status==="fulfilled"?{...e,[r]:l.value}:e},{});return parseJson.serializableJson({builderData:a,collection:n,pageType:s,themeStyle:genCss.genCSS(i.pageStyle?.data),swr:{fallback:p},seo:{title:n.title,description:n.description}})};exports.getCollectionProps=getCollectionProps;
@@ -1,145 +1 @@
1
- 'use strict';
2
-
3
- var core = require('@gem-sdk/core');
4
- var adapterShopify = require('@gem-sdk/adapter-shopify');
5
- var googleFonts = require('../google-fonts.js');
6
- var genCss = require('../helpers/gen-css.js');
7
- var generateManifres = require('../helpers/generate-manifres.js');
8
- var getFallback = require('../helpers/get-fallback.js');
9
- var normalize = require('../helpers/normalize.js');
10
- var parseJson = require('../helpers/parse-json.js');
11
- var nextjs = require('@sentry/nextjs');
12
-
13
- const getHomePagePropsV2 = (fetcher, shopifyFetcher)=>async ()=>{
14
- try {
15
- const variables = {
16
- slugType: 'STATIC'
17
- };
18
- const [theme, storeProperty, shopifyMeta] = await Promise.allSettled([
19
- fetcher([
20
- core.PublishedThemePagesDocument,
21
- variables
22
- ]),
23
- fetcher([
24
- core.StorePropertyDocument
25
- ]),
26
- shopifyFetcher([
27
- adapterShopify.ShopMetaDocument
28
- ])
29
- ]);
30
- if (theme.status === 'rejected') {
31
- throw new Error(theme.reason?.[0]);
32
- }
33
- const dataBuilder = theme.value?.publishedThemePages?.[0];
34
- if (!dataBuilder) {
35
- throw new Error(`No data builder found for Home page`);
36
- }
37
- const homeTemplate = normalize.parseBuilderTemplateV2(dataBuilder);
38
- const [elementFontStyle, fontStyle, fallback] = await Promise.all([
39
- googleFonts.getFontStyleFromPageTemplate(homeTemplate),
40
- googleFonts.getFontFromGlobalStyle(dataBuilder?.pageStyle?.data),
41
- getFallback.getFallbackV2(fetcher, homeTemplate)
42
- ]);
43
- const mobileOnly = dataBuilder.isMobile ?? false;
44
- const description = dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-description')?.value;
45
- const thumbnail = parseJson.parseJson(dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-thumbnail')?.value);
46
- const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
47
- const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
48
- const favicon = shopData?.storeProperty?.favicon ?? '/favicon/favicon-32x32.png';
49
- const seo = {
50
- defaultTitle: shopMeta?.shop.name,
51
- title: dataBuilder?.name ?? 'Home',
52
- description: description ?? shopMeta?.shop.description,
53
- openGraph: {
54
- site_name: shopMeta?.shop.name,
55
- locale: shopMeta?.localization.country.isoCode,
56
- title: dataBuilder?.name ?? shopMeta?.shop.name,
57
- description: description ?? shopMeta?.shop.description,
58
- images: thumbnail ? [
59
- thumbnail
60
- ] : []
61
- },
62
- additionalMetaTags: [
63
- {
64
- name: 'theme-color',
65
- content: '#000000'
66
- }
67
- ],
68
- canonical: `https://${shopData?.storeProperty?.primaryDomain}/`,
69
- additionalLinkTags: [
70
- {
71
- rel: 'icon',
72
- sizes: '32x32',
73
- href: `${favicon}-/crop/1:1/center/-/smart_resize/32x32/`
74
- },
75
- {
76
- rel: 'icon',
77
- sizes: '16x16',
78
- href: `${favicon}-/crop/1:1/center/-/smart_resize/16x16/`
79
- },
80
- {
81
- rel: 'apple-touch-icon',
82
- sizes: '180x180',
83
- href: `${favicon}-/crop/1:1/center/-/smart_resize/180x180/`
84
- },
85
- {
86
- rel: 'manifest',
87
- href: generateManifres.generateManifest({
88
- theme_color: '#000000',
89
- background_color: '#ffffff',
90
- display: 'standalone',
91
- scope: '/',
92
- start_url: '/',
93
- name: shopMeta?.shop.name,
94
- short_name: shopMeta?.shop.name,
95
- description: shopMeta?.shop.description,
96
- icons: [
97
- {
98
- src: `${favicon}-/crop/1:1/center/-/smart_resize/192x192/`,
99
- sizes: '192x192',
100
- type: 'image/png',
101
- purpose: 'any maskable'
102
- },
103
- {
104
- src: `${favicon}-/crop/1:1/center/-/smart_resize/512x512/`,
105
- sizes: '512x512',
106
- type: 'image/png'
107
- }
108
- ]
109
- })
110
- }
111
- ]
112
- };
113
- const languageIsoCode = shopMeta?.localization.language.isoCode ?? null;
114
- const countryIsoCode = shopMeta?.localization.country.isoCode ?? null;
115
- const locale = !languageIsoCode || !countryIsoCode ? null : `${languageIsoCode}-${countryIsoCode}`;
116
- return parseJson.serializableJson({
117
- themeStyle: genCss.genCSS(dataBuilder?.pageStyle?.data, mobileOnly),
118
- fontStyle,
119
- elementFontStyle,
120
- builderData: homeTemplate,
121
- swr: {
122
- fallback
123
- },
124
- moneyFormat: shopMeta?.shop.moneyFormat ?? null,
125
- currency: shopMeta?.localization.country.currency.isoCode ?? null,
126
- languageIsoCode,
127
- countryIsoCode,
128
- locale,
129
- swatches: parseJson.parseJson(shopData?.storeProperty?.swatchesConfig),
130
- seo,
131
- mobileOnly,
132
- gaTrackingId: dataBuilder.themePageAnalytic?.gaTrackingID ?? null,
133
- facebookPixelId: dataBuilder.themePageAnalytic?.fbPixelID ?? null,
134
- tiktokPixelId: dataBuilder.themePageAnalytic?.tiktokPixelID ?? null,
135
- customCodeHeader: dataBuilder.themePageCustomCode?.header ?? null,
136
- customCodeBody: dataBuilder.themePageCustomCode?.body ?? null,
137
- pageHandle: dataBuilder.handle ?? null
138
- });
139
- } catch (err) {
140
- nextjs.captureException(err);
141
- throw err;
142
- }
143
- };
144
-
145
- exports.getHomePagePropsV2 = getHomePagePropsV2;
1
+ "use strict";var core=require("@gem-sdk/core"),adapterShopify=require("@gem-sdk/adapter-shopify"),googleFonts=require("../google-fonts.js"),genCss=require("../helpers/gen-css.js"),generateManifres=require("../helpers/generate-manifres.js"),getFallback=require("../helpers/get-fallback.js"),normalize=require("../helpers/normalize.js"),parseJson=require("../helpers/parse-json.js"),nextjs=require("@sentry/nextjs");const getHomePagePropsV2=(e,a)=>async()=>{try{let o={slugType:"STATIC"},[r,t,s]=await Promise.allSettled([e([core.PublishedThemePagesDocument,o]),e([core.StorePropertyDocument]),a([adapterShopify.ShopMetaDocument])]);if("rejected"===r.status)throw Error(r.reason?.[0]);let l=r.value?.publishedThemePages?.[0];if(!l)throw Error("No data builder found for Home page");let n=normalize.parseBuilderTemplateV2(l),[i,c,p]=await Promise.all([googleFonts.getFontStyleFromPageTemplate(n),googleFonts.getFontFromGlobalStyle(l?.pageStyle?.data),getFallback.getFallbackV2(e,n)]),m=l.isMobile??!1,g=l?.themePageDataSEO?.find(e=>e?.key==="global-meta-description")?.value,u=parseJson.parseJson(l?.themePageDataSEO?.find(e=>e?.key==="global-meta-thumbnail")?.value),d="fulfilled"===s.status?s.value:void 0,h="fulfilled"===t.status?t.value:void 0,f=h?.storeProperty?.favicon??"/favicon/favicon-32x32.png",y={defaultTitle:d?.shop.name,title:l?.name??"Home",description:g??d?.shop.description,openGraph:{site_name:d?.shop.name,locale:d?.localization.country.isoCode,title:l?.name??d?.shop.name,description:g??d?.shop.description,images:u?[u]:[]},additionalMetaTags:[{name:"theme-color",content:"#000000"}],canonical:`https://${h?.storeProperty?.primaryDomain}/`,additionalLinkTags:[{rel:"icon",sizes:"32x32",href:`${f}-/crop/1:1/center/-/smart_resize/32x32/`},{rel:"icon",sizes:"16x16",href:`${f}-/crop/1:1/center/-/smart_resize/16x16/`},{rel:"apple-touch-icon",sizes:"180x180",href:`${f}-/crop/1:1/center/-/smart_resize/180x180/`},{rel:"manifest",href:generateManifres.generateManifest({theme_color:"#000000",background_color:"#ffffff",display:"standalone",scope:"/",start_url:"/",name:d?.shop.name,short_name:d?.shop.name,description:d?.shop.description,icons:[{src:`${f}-/crop/1:1/center/-/smart_resize/192x192/`,sizes:"192x192",type:"image/png",purpose:"any maskable"},{src:`${f}-/crop/1:1/center/-/smart_resize/512x512/`,sizes:"512x512",type:"image/png"}]})}]},P=d?.localization.language.isoCode??null,x=d?.localization.country.isoCode??null,b=P&&x?`${P}-${x}`:null;return parseJson.serializableJson({themeStyle:genCss.genCSS(l?.pageStyle?.data,m),fontStyle:c,elementFontStyle:i,builderData:n,swr:{fallback:p},moneyFormat:d?.shop.moneyFormat??null,currency:d?.localization.country.currency.isoCode??null,languageIsoCode:P,countryIsoCode:x,locale:b,swatches:parseJson.parseJson(h?.storeProperty?.swatchesConfig),seo:y,mobileOnly:m,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,pageHandle:l.handle??null})}catch(e){throw nextjs.captureException(e),e}};exports.getHomePagePropsV2=getHomePagePropsV2;
@@ -1,151 +1 @@
1
- 'use strict';
2
-
3
- var core = require('@gem-sdk/core');
4
- var adapterShopify = require('@gem-sdk/adapter-shopify');
5
- var googleFonts = require('../google-fonts.js');
6
- var genCss = require('../helpers/gen-css.js');
7
- var generateManifres = require('../helpers/generate-manifres.js');
8
- var normalize = require('../helpers/normalize.js');
9
- var parseJson = require('../helpers/parse-json.js');
10
-
11
- const getHomePageProps = (fetcher, shopifyFetcher)=>async ()=>{
12
- const pageType = 'STATIC';
13
- const variables = {
14
- slugType: pageType
15
- };
16
- // const theme = await fetcher<PublishedThemePagesQueryResponse, PublishedThemePagesQueryVariables>([
17
- // PublishedThemePagesDocument,
18
- // variables,
19
- // ]);
20
- const [theme, storeProperty, shopifyMeta] = await Promise.allSettled([
21
- fetcher([
22
- core.PublishedThemePagesDocument,
23
- variables
24
- ]),
25
- fetcher([
26
- core.StorePropertyDocument
27
- ]),
28
- shopifyFetcher([
29
- adapterShopify.ShopMetaDocument
30
- ])
31
- ]);
32
- if (theme.status === 'rejected') {
33
- return {
34
- pageType
35
- };
36
- }
37
- const dataBuilder = theme.value.publishedThemePages?.[0];
38
- const homeTemplate = normalize.parseBuilderTemplate(dataBuilder);
39
- const fontStyle = await googleFonts.getFontFromGlobalStyle(dataBuilder?.pageStyle?.data);
40
- const queries = core.prefetchQueries(homeTemplate);
41
- const datas = await Promise.allSettled(queries.map(({ query, variables, func })=>{
42
- if (func) {
43
- return func(fetcher, variables);
44
- }
45
- if (query) return fetcher([
46
- query,
47
- variables
48
- ]);
49
- return {};
50
- }));
51
- const fallback = queries.reduce((acc, { key }, index)=>{
52
- const res = datas[index];
53
- if (res?.status === 'fulfilled') {
54
- return {
55
- ...acc,
56
- [key]: res.value
57
- };
58
- }
59
- return acc;
60
- }, {});
61
- const description = dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-description')?.value;
62
- const thumbnail = parseJson.parseJson(dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-thumbnail')?.value);
63
- const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
64
- const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
65
- const favicon = shopData?.storeProperty?.favicon ?? '/favicon/favicon-32x32.png';
66
- const seo = {
67
- defaultTitle: shopMeta?.shop.name,
68
- title: dataBuilder?.name ?? 'Home',
69
- description: description ?? shopMeta?.shop.description,
70
- openGraph: {
71
- site_name: shopMeta?.shop.name,
72
- locale: shopMeta?.localization.country.isoCode,
73
- title: dataBuilder?.name ?? shopMeta?.shop.name,
74
- description: description ?? shopMeta?.shop.description,
75
- images: thumbnail ? [
76
- thumbnail
77
- ] : []
78
- },
79
- additionalMetaTags: [
80
- {
81
- name: 'theme-color',
82
- content: '#000000'
83
- }
84
- ],
85
- canonical: '/',
86
- additionalLinkTags: [
87
- {
88
- rel: 'icon',
89
- sizes: '32x32',
90
- href: `${favicon}-/crop/1:1/center/-/smart_resize/32x32/`
91
- },
92
- {
93
- rel: 'icon',
94
- sizes: '16x16',
95
- href: `${favicon}-/crop/1:1/center/-/smart_resize/16x16/`
96
- },
97
- {
98
- rel: 'apple-touch-icon',
99
- sizes: '180x180',
100
- href: `${favicon}-/crop/1:1/center/-/smart_resize/180x180/`
101
- },
102
- {
103
- rel: 'manifest',
104
- href: generateManifres.generateManifest({
105
- theme_color: '#000000',
106
- background_color: '#ffffff',
107
- display: 'standalone',
108
- scope: '/',
109
- start_url: '/',
110
- name: shopMeta?.shop.name,
111
- short_name: shopMeta?.shop.name,
112
- description: shopMeta?.shop.description,
113
- icons: [
114
- {
115
- src: `${favicon}-/crop/1:1/center/-/smart_resize/192x192/`,
116
- sizes: '192x192',
117
- type: 'image/png',
118
- purpose: 'any maskable'
119
- },
120
- {
121
- src: `${favicon}-/crop/1:1/center/-/smart_resize/512x512/`,
122
- sizes: '512x512',
123
- type: 'image/png'
124
- }
125
- ]
126
- })
127
- }
128
- ]
129
- };
130
- const languageIsoCode = shopMeta?.localization.language.isoCode ?? null;
131
- const countryIsoCode = shopMeta?.localization.country.isoCode ?? null;
132
- const locale = !languageIsoCode || !countryIsoCode ? null : `${languageIsoCode}-${countryIsoCode}`;
133
- return parseJson.serializableJson({
134
- themeStyle: genCss.genCSS(dataBuilder?.pageStyle?.data),
135
- fontStyle,
136
- builderData: homeTemplate,
137
- pageType,
138
- swr: {
139
- fallback
140
- },
141
- moneyFormat: shopMeta?.shop.moneyFormat ?? null,
142
- currency: shopMeta?.localization.country.currency.isoCode ?? null,
143
- locale,
144
- languageIsoCode,
145
- countryIsoCode,
146
- swatches: parseJson.parseJson(shopData?.storeProperty?.swatchesConfig),
147
- seo
148
- });
149
- };
150
-
151
- exports.getHomePageProps = getHomePageProps;
1
+ "use strict";var core=require("@gem-sdk/core"),adapterShopify=require("@gem-sdk/adapter-shopify"),googleFonts=require("../google-fonts.js"),genCss=require("../helpers/gen-css.js"),generateManifres=require("../helpers/generate-manifres.js"),normalize=require("../helpers/normalize.js"),parseJson=require("../helpers/parse-json.js");const getHomePageProps=(e,a)=>async()=>{let r="STATIC",s={slugType:r},[o,t,n]=await Promise.allSettled([e([core.PublishedThemePagesDocument,s]),e([core.StorePropertyDocument]),a([adapterShopify.ShopMetaDocument])]);if("rejected"===o.status)return{pageType:r};let i=o.value.publishedThemePages?.[0],l=normalize.parseBuilderTemplate(i),p=await googleFonts.getFontFromGlobalStyle(i?.pageStyle?.data),c=core.prefetchQueries(l),m=await Promise.allSettled(c.map(({query:a,variables:r,func:s})=>s?s(e,r):a?e([a,r]):{})),u=c.reduce((e,{key:a},r)=>{let s=m[r];return s?.status==="fulfilled"?{...e,[a]:s.value}:e},{}),g=i?.themePageDataSEO?.find(e=>e?.key==="global-meta-description")?.value,d=parseJson.parseJson(i?.themePageDataSEO?.find(e=>e?.key==="global-meta-thumbnail")?.value),h="fulfilled"===n.status?n.value:void 0,f="fulfilled"===t.status?t.value:void 0,y=f?.storeProperty?.favicon??"/favicon/favicon-32x32.png",z={defaultTitle:h?.shop.name,title:i?.name??"Home",description:g??h?.shop.description,openGraph:{site_name:h?.shop.name,locale:h?.localization.country.isoCode,title:i?.name??h?.shop.name,description:g??h?.shop.description,images:d?[d]:[]},additionalMetaTags:[{name:"theme-color",content:"#000000"}],canonical:"/",additionalLinkTags:[{rel:"icon",sizes:"32x32",href:`${y}-/crop/1:1/center/-/smart_resize/32x32/`},{rel:"icon",sizes:"16x16",href:`${y}-/crop/1:1/center/-/smart_resize/16x16/`},{rel:"apple-touch-icon",sizes:"180x180",href:`${y}-/crop/1:1/center/-/smart_resize/180x180/`},{rel:"manifest",href:generateManifres.generateManifest({theme_color:"#000000",background_color:"#ffffff",display:"standalone",scope:"/",start_url:"/",name:h?.shop.name,short_name:h?.shop.name,description:h?.shop.description,icons:[{src:`${y}-/crop/1:1/center/-/smart_resize/192x192/`,sizes:"192x192",type:"image/png",purpose:"any maskable"},{src:`${y}-/crop/1:1/center/-/smart_resize/512x512/`,sizes:"512x512",type:"image/png"}]})}]},P=h?.localization.language.isoCode??null,S=h?.localization.country.isoCode??null,v=P&&S?`${P}-${S}`:null;return parseJson.serializableJson({themeStyle:genCss.genCSS(i?.pageStyle?.data),fontStyle:p,builderData:l,pageType:r,swr:{fallback:u},moneyFormat:h?.shop.moneyFormat??null,currency:h?.localization.country.currency.isoCode??null,locale:v,languageIsoCode:P,countryIsoCode:S,swatches:parseJson.parseJson(f?.storeProperty?.swatchesConfig),seo:z})};exports.getHomePageProps=getHomePageProps;
@@ -0,0 +1 @@
1
+ "use strict";var core=require("@gem-sdk/core"),adapterShopify=require("@gem-sdk/adapter-shopify"),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");const fetchSalePageDataByID=async(e,t,a)=>{let r={themePageId:e.themePageId},[o,s,l]=await Promise.allSettled([t([core.ThemePageDocument,r]),t([core.StorePropertyDocument]),a([adapterShopify.ShopMetaDocument])]);if("rejected"===o.status)throw Error(o.reason?.[0]);return{dataBuilder:o.value.themePage,storeProperty:s,shopifyMeta:l,productOffers:[]}},fetchPostPurchasePageDataByID=async(e,t,a)=>{let r={themePageId:e.themePageId},[o,s,l,c]=await Promise.allSettled([t([core.ThemePageDocument,r]),t([core.StorePropertyDocument]),a([adapterShopify.ShopMetaDocument]),t([core.SaleFunnelDiscountsDocument,{where:{saleFunnelOfferID:e.currentOfferID}}])]);if("rejected"===o.status)throw Error(o.reason?.[0]);if("rejected"===c.status)throw Error(c.reason?.[0]);return{dataBuilder:o.value.themePage,storeProperty:s,shopifyMeta:l,productOffers:c.value.saleFunnelDiscounts?.edges?.filter(e=>e?.node?.objectType==="PRODUCT"&&e?.node?.type==="ORDER_VALUE")||[]}},fetchThemePageDataByTemplateID=async(e,t,a)=>{let r={libraryTemplateId:e.libraryTemplateId},[o,s,l,c]=await Promise.allSettled([t([core.LibraryTemplateDocument,r]),t([core.StorePropertyDocument]),a([adapterShopify.ShopMetaDocument]),t([core.SaleFunnelDiscountsDocument,{where:{saleFunnelOfferID:e.currentOfferID}}])]);if("rejected"===o.status)throw Error(o.reason?.[0]);if("rejected"===c.status)throw Error(c.reason?.[0]);return{dataBuilder:o.value.libraryTemplate,storeProperty:s,shopifyMeta:l,productOffers:c.value.saleFunnelDiscounts?.edges?.filter(e=>e?.node?.objectType==="PRODUCT"&&e?.node?.type==="ORDER_VALUE")||[]}},getPostPurchasePropsPreview=(e,t,a)=>async(r,o)=>{try{let{dataBuilder:s,storeProperty:l,shopifyMeta:c,productOffers:u}=a?await fetchThemePageDataByTemplateID({libraryTemplateId:r,currentOfferID:o},e,t):o?await fetchPostPurchasePageDataByID({themePageId:r,currentOfferID:o},e,t):await fetchSalePageDataByID({themePageId:r},e,t);if(!s)throw Error(`No data builder found for slug: /preview/${r}`);let n=normalize.parseBuilderTemplateV2(s),[i,P]=await Promise.all([googleFonts.getFontStyleFromPageTemplate(n),getFallback.getFallbackV2(e,n)]),{seo:h,pageConfig:p}=usePagePreview.usePagePreview(s,l,c);return parseJson.serializableJson({seo:h,...p,elementFontStyle:i,builderData:n,swr:{fallback:P},productOffers:u})}catch(e){throw nextjs.captureException(e),e}};exports.fetchPostPurchasePageDataByID=fetchPostPurchasePageDataByID,exports.fetchSalePageDataByID=fetchSalePageDataByID,exports.fetchThemePageDataByTemplateID=fetchThemePageDataByTemplateID,exports.getPostPurchasePropsPreview=getPostPurchasePropsPreview;
@@ -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;