@gem-sdk/pages 1.36.6 → 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 -148
  27. package/dist/cjs/libs/api/get-static-page-props.js +1 -148
  28. package/dist/cjs/libs/custom-fonts.js +8 -0
  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 -111
  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 -84
  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 -146
  81. package/dist/esm/libs/api/get-static-page-props.js +1 -146
  82. package/dist/esm/libs/custom-fonts.js +8 -0
  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 -109
  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 -82
  108. package/dist/esm/pages/static.js +1 -71
  109. package/dist/types/index.d.ts +29 -6
  110. package/package.json +5 -5
@@ -1,150 +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
-
13
- const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
14
- try {
15
- const pageType = 'STATIC';
16
- const variables = {
17
- handleURL: slug,
18
- pageType
19
- };
20
- const [theme, storeProperty, shopifyMeta] = await Promise.allSettled([
21
- fetcher([
22
- core.PreviewPageDocument,
23
- variables,
24
- 'previewPage'
25
- ]),
26
- fetcher([
27
- core.StorePropertyDocument
28
- ]),
29
- shopifyFetcher([
30
- adapterShopify.ShopMetaDocument
31
- ])
32
- ]);
33
- if (theme.status === 'rejected') {
34
- throw new Error(theme.reason?.[0]);
35
- }
36
- const dataBuilder = theme.value.previewPage;
37
- if (!dataBuilder) {
38
- throw new Error(`No data builder found for slug: /preview/${slug}`);
39
- }
40
- const pageTemplate = normalize.parseBuilderTemplateV2(dataBuilder);
41
- const [elementFontStyle, fontStyle, fallback] = await Promise.all([
42
- googleFonts.getFontStyleFromPageTemplate(pageTemplate),
43
- googleFonts.getFontFromGlobalStyle(dataBuilder?.pageStyle?.data),
44
- getFallback.getFallbackV2(fetcher, pageTemplate)
45
- ]);
46
- const mobileOnly = dataBuilder.isMobile ?? false;
47
- const description = dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-description')?.value;
48
- const thumbnail = parseJson.parseJson(dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-thumbnail')?.value);
49
- const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
50
- const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
51
- const favicon = shopData?.storeProperty?.favicon ?? '/favicon/favicon-32x32.png';
52
- const seo = {
53
- defaultTitle: shopMeta?.shop.name,
54
- title: dataBuilder?.name,
55
- description: description ?? shopMeta?.shop.description,
56
- openGraph: {
57
- site_name: shopMeta?.shop.name,
58
- locale: shopMeta?.localization.country.isoCode,
59
- title: dataBuilder?.name ?? shopMeta?.shop.name,
60
- description: description ?? shopMeta?.shop.description,
61
- images: thumbnail ? [
62
- thumbnail
63
- ] : []
64
- },
65
- nofollow: true,
66
- noindex: true,
67
- canonical: `/preview/${slug}`,
68
- additionalMetaTags: [
69
- {
70
- name: 'theme-color',
71
- content: '#000000'
72
- }
73
- ],
74
- additionalLinkTags: [
75
- {
76
- rel: 'icon',
77
- sizes: '32x32',
78
- href: `${favicon}-/crop/1:1/center/-/smart_resize/32x32/`
79
- },
80
- {
81
- rel: 'icon',
82
- sizes: '16x16',
83
- href: `${favicon}-/crop/1:1/center/-/smart_resize/16x16/`
84
- },
85
- {
86
- rel: 'apple-touch-icon',
87
- sizes: '180x180',
88
- href: `${favicon}-/crop/1:1/center/-/smart_resize/180x180/`
89
- },
90
- {
91
- rel: 'manifest',
92
- href: generateManifres.generateManifest({
93
- theme_color: '#000000',
94
- background_color: '#ffffff',
95
- display: 'standalone',
96
- scope: '/',
97
- start_url: '/',
98
- name: shopMeta?.shop.name,
99
- short_name: shopMeta?.shop.name,
100
- description: shopMeta?.shop.description,
101
- icons: [
102
- {
103
- src: `${favicon}-/crop/1:1/center/-/smart_resize/192x192/`,
104
- sizes: '192x192',
105
- type: 'image/png',
106
- purpose: 'any maskable'
107
- },
108
- {
109
- src: `${favicon}-/crop/1:1/center/-/smart_resize/512x512/`,
110
- sizes: '512x512',
111
- type: 'image/png'
112
- }
113
- ]
114
- })
115
- }
116
- ]
117
- };
118
- const languageIsoCode = shopMeta?.localization.language.isoCode ?? null;
119
- const countryIsoCode = shopMeta?.localization.country.isoCode ?? null;
120
- const locale = !languageIsoCode || !countryIsoCode ? null : `${languageIsoCode}-${countryIsoCode}`;
121
- return parseJson.serializableJson({
122
- themeStyle: genCss.genCSS(dataBuilder?.pageStyle?.data, mobileOnly),
123
- fontStyle,
124
- elementFontStyle,
125
- builderData: pageTemplate,
126
- pageType,
127
- moneyFormat: shopMeta?.shop.moneyFormat ?? null,
128
- currency: shopMeta?.localization.country.currency.isoCode ?? null,
129
- languageIsoCode,
130
- countryIsoCode,
131
- locale,
132
- swr: {
133
- fallback
134
- },
135
- swatches: parseJson.parseJson(shopData?.storeProperty?.swatchesConfig),
136
- seo,
137
- mobileOnly,
138
- gaTrackingId: dataBuilder.themePageAnalytic?.gaTrackingID ?? null,
139
- facebookPixelId: dataBuilder.themePageAnalytic?.fbPixelID ?? null,
140
- tiktokPixelId: dataBuilder.themePageAnalytic?.tiktokPixelID ?? null,
141
- customCodeHeader: dataBuilder.themePageCustomCode?.header ?? null,
142
- customCodeBody: dataBuilder.themePageCustomCode?.body ?? null
143
- });
144
- } catch (err) {
145
- nextjs.captureException(err);
146
- throw err;
147
- }
148
- };
149
-
150
- 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");const getStaticPagePropsPreview=(e,a)=>async r=>{try{let o="STATIC",t={handleURL:r,pageType:o},[s,i,n]=await Promise.allSettled([e([core.PreviewPageDocument,t,"previewPage"]),e([core.StorePropertyDocument]),a([adapterShopify.ShopMetaDocument])]);if("rejected"===s.status)throw Error(s.reason?.[0]);let l=s.value.previewPage;if(!l)throw Error(`No data builder found for slug: /preview/${r}`);let c=normalize.parseBuilderTemplateV2(l),[p,g,m]=await Promise.all([googleFonts.getFontStyleFromPageTemplate(c),googleFonts.getFontFromGlobalStyle(l?.pageStyle?.data),getFallback.getFallbackV2(e,c)]),u=l.isMobile??!1,d=l?.themePageDataSEO?.find(e=>e?.key==="global-meta-description")?.value,h=parseJson.parseJson(l?.themePageDataSEO?.find(e=>e?.key==="global-meta-thumbnail")?.value),f="fulfilled"===n.status?n.value:void 0,y="fulfilled"===i.status?i.value:void 0,P=y?.storeProperty?.favicon??"/favicon/favicon-32x32.png",x={defaultTitle:f?.shop.name,title:l?.name,description:d??f?.shop.description,openGraph:{site_name:f?.shop.name,locale:f?.localization.country.isoCode,title:l?.name??f?.shop.name,description:d??f?.shop.description,images:h?[h]:[]},nofollow:!0,noindex:!0,canonical:`/preview/${r}`,additionalMetaTags:[{name:"theme-color",content:"#000000"}],additionalLinkTags:[{rel:"icon",sizes:"32x32",href:`${P}-/crop/1:1/center/-/smart_resize/32x32/`},{rel:"icon",sizes:"16x16",href:`${P}-/crop/1:1/center/-/smart_resize/16x16/`},{rel:"apple-touch-icon",sizes:"180x180",href:`${P}-/crop/1:1/center/-/smart_resize/180x180/`},{rel:"manifest",href:generateManifres.generateManifest({theme_color:"#000000",background_color:"#ffffff",display:"standalone",scope:"/",start_url:"/",name:f?.shop.name,short_name:f?.shop.name,description:f?.shop.description,icons:[{src:`${P}-/crop/1:1/center/-/smart_resize/192x192/`,sizes:"192x192",type:"image/png",purpose:"any maskable"},{src:`${P}-/crop/1:1/center/-/smart_resize/512x512/`,sizes:"512x512",type:"image/png"}]})}]},v=f?.localization.language.isoCode??null,k=f?.localization.country.isoCode??null,z=v&&k?`${v}-${k}`:null;return parseJson.serializableJson({themeStyle:genCss.genCSS(l?.pageStyle?.data,u),fontStyle:g,elementFontStyle:p,builderData:c,pageType:o,moneyFormat:f?.shop.moneyFormat??null,currency:f?.localization.country.currency.isoCode??null,languageIsoCode:v,countryIsoCode:k,locale:z,swr:{fallback:m},swatches:parseJson.parseJson(y?.storeProperty?.swatchesConfig),seo:x,mobileOnly:u,gaTrackingId:l.themePageAnalytic?.gaTrackingID??null,facebookPixelId:l.themePageAnalytic?.fbPixelID??null,tiktokPixelId:l.themePageAnalytic?.tiktokPixelID??null,customCodeHeader:l.themePageCustomCode?.header??null,customCodeBody:l.themePageCustomCode?.body??null})}catch(e){throw nextjs.captureException(e),e}};exports.getStaticPagePropsPreview=getStaticPagePropsPreview;
@@ -1,148 +1 @@
1
- 'use strict';
2
-
3
- var core = require('@gem-sdk/core');
4
- var adapterShopify = require('@gem-sdk/adapter-shopify');
5
- var googleFonts = require('../google-fonts.js');
6
- var genCss = require('../helpers/gen-css.js');
7
- var generateManifres = require('../helpers/generate-manifres.js');
8
- var 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 getStaticPagePropsV2 = (fetcher, shopifyFetcher)=>async (slug)=>{
14
- try {
15
- const pageType = 'STATIC';
16
- const variables = {
17
- slug,
18
- slugType: pageType
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
- throw new Error(theme.reason?.[0]);
34
- }
35
- const dataBuilder = theme.value.publishedThemePages?.[0];
36
- if (!dataBuilder) {
37
- throw new Error(`No data builder found for slug: /${slug}`);
38
- }
39
- const pageTemplate = normalize.parseBuilderTemplateV2(dataBuilder);
40
- const [elementFontStyle, fontStyle, fallback] = await Promise.all([
41
- googleFonts.getFontStyleFromPageTemplate(pageTemplate),
42
- googleFonts.getFontFromGlobalStyle(dataBuilder?.pageStyle?.data),
43
- getFallback.getFallbackV2(fetcher, pageTemplate)
44
- ]);
45
- const mobileOnly = dataBuilder.isMobile ?? false;
46
- const description = dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-description')?.value;
47
- const thumbnail = parseJson.parseJson(dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-thumbnail')?.value);
48
- const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
49
- const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
50
- const favicon = shopData?.storeProperty?.favicon ?? '/favicon/favicon-32x32.png';
51
- const seo = {
52
- defaultTitle: shopMeta?.shop.name,
53
- title: dataBuilder?.name,
54
- description: description ?? shopMeta?.shop.description,
55
- openGraph: {
56
- site_name: shopMeta?.shop.name,
57
- locale: shopMeta?.localization.country.isoCode,
58
- title: dataBuilder?.name ?? shopMeta?.shop.name,
59
- description: description ?? shopMeta?.shop.description,
60
- images: thumbnail ? [
61
- thumbnail
62
- ] : []
63
- },
64
- canonical: `https://${shopData?.storeProperty?.primaryDomain}/${slug}`,
65
- additionalMetaTags: [
66
- {
67
- name: 'theme-color',
68
- content: '#000000'
69
- }
70
- ],
71
- additionalLinkTags: [
72
- {
73
- rel: 'icon',
74
- sizes: '32x32',
75
- href: `${favicon}-/crop/1:1/center/-/smart_resize/32x32/`
76
- },
77
- {
78
- rel: 'icon',
79
- sizes: '16x16',
80
- href: `${favicon}-/crop/1:1/center/-/smart_resize/16x16/`
81
- },
82
- {
83
- rel: 'apple-touch-icon',
84
- sizes: '180x180',
85
- href: `${favicon}-/crop/1:1/center/-/smart_resize/180x180/`
86
- },
87
- {
88
- rel: 'manifest',
89
- href: generateManifres.generateManifest({
90
- theme_color: '#000000',
91
- background_color: '#ffffff',
92
- display: 'standalone',
93
- scope: '/',
94
- start_url: '/',
95
- name: shopMeta?.shop.name,
96
- short_name: shopMeta?.shop.name,
97
- description: shopMeta?.shop.description,
98
- icons: [
99
- {
100
- src: `${favicon}-/crop/1:1/center/-/smart_resize/192x192/`,
101
- sizes: '192x192',
102
- type: 'image/png',
103
- purpose: 'any maskable'
104
- },
105
- {
106
- src: `${favicon}-/crop/1:1/center/-/smart_resize/512x512/`,
107
- sizes: '512x512',
108
- type: 'image/png'
109
- }
110
- ]
111
- })
112
- }
113
- ]
114
- };
115
- const languageIsoCode = shopMeta?.localization.language.isoCode ?? null;
116
- const countryIsoCode = shopMeta?.localization.country.isoCode ?? null;
117
- const locale = !languageIsoCode || !countryIsoCode ? null : `${languageIsoCode}-${countryIsoCode}`;
118
- return parseJson.serializableJson({
119
- themeStyle: genCss.genCSS(dataBuilder?.pageStyle?.data, mobileOnly),
120
- fontStyle,
121
- elementFontStyle,
122
- builderData: pageTemplate,
123
- pageType,
124
- moneyFormat: shopMeta?.shop.moneyFormat ?? null,
125
- currency: shopMeta?.localization.country.currency.isoCode ?? null,
126
- languageIsoCode,
127
- countryIsoCode,
128
- locale,
129
- swr: {
130
- fallback
131
- },
132
- swatches: parseJson.parseJson(shopData?.storeProperty?.swatchesConfig),
133
- seo,
134
- mobileOnly,
135
- gaTrackingId: dataBuilder.themePageAnalytic?.gaTrackingID ?? null,
136
- facebookPixelId: dataBuilder.themePageAnalytic?.fbPixelID ?? null,
137
- tiktokPixelId: dataBuilder.themePageAnalytic?.tiktokPixelID ?? null,
138
- customCodeHeader: dataBuilder.themePageCustomCode?.header ?? null,
139
- customCodeBody: dataBuilder.themePageCustomCode?.body ?? null,
140
- pageHandle: dataBuilder.handle ?? null
141
- });
142
- } catch (err) {
143
- nextjs.captureException(err);
144
- throw err;
145
- }
146
- };
147
-
148
- exports.getStaticPagePropsV2 = getStaticPagePropsV2;
1
+ "use strict";var core=require("@gem-sdk/core"),adapterShopify=require("@gem-sdk/adapter-shopify"),googleFonts=require("../google-fonts.js"),genCss=require("../helpers/gen-css.js"),generateManifres=require("../helpers/generate-manifres.js"),getFallback=require("../helpers/get-fallback.js"),normalize=require("../helpers/normalize.js"),parseJson=require("../helpers/parse-json.js"),nextjs=require("@sentry/nextjs"),customFonts=require("../custom-fonts.js");const getStaticPagePropsV2=(e,t)=>async a=>{try{let o="STATIC",s={slug:a,slugType:o},[r,n,l]=await Promise.allSettled([e([core.PublishedThemePagesDocument,s]),e([core.StorePropertyDocument]),t([adapterShopify.ShopMetaDocument])]);if("rejected"===r.status)throw Error(r.reason?.[0]);let i=r.value.publishedThemePages?.[0],c=r.value?.publishedThemePages?.[0]?.themePageCustomFonts;if(!i)throw Error(`No data builder found for slug: /${a}`);let p=normalize.parseBuilderTemplateV2(i),[m,u,g,d]=await Promise.all([googleFonts.getFontStyleFromPageTemplate(p),googleFonts.getFontFromGlobalStyle(i?.pageStyle?.data),getFallback.getFallbackV2(e,p),customFonts.getCustomFonts(c)]),h=i.isMobile??!1,f=i?.themePageDataSEO?.find(e=>e?.key==="global-meta-description")?.value,y=parseJson.parseJson(i?.themePageDataSEO?.find(e=>e?.key==="global-meta-thumbnail")?.value),P="fulfilled"===l.status?l.value:void 0,b="fulfilled"===n.status?n.value:void 0,x=b?.storeProperty?.favicon??"/favicon/favicon-32x32.png",k={defaultTitle:P?.shop.name,title:i?.name,description:f??P?.shop.description,openGraph:{site_name:P?.shop.name,locale:P?.localization.country.isoCode,title:i?.name??P?.shop.name,description:f??P?.shop.description,images:y?[y]:[]},canonical:`https://${b?.storeProperty?.primaryDomain}/${a}`,additionalMetaTags:[{name:"theme-color",content:"#000000"}],additionalLinkTags:[{rel:"icon",sizes:"32x32",href:`${x}-/crop/1:1/center/-/smart_resize/32x32/`},{rel:"icon",sizes:"16x16",href:`${x}-/crop/1:1/center/-/smart_resize/16x16/`},{rel:"apple-touch-icon",sizes:"180x180",href:`${x}-/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:`${x}-/crop/1:1/center/-/smart_resize/192x192/`,sizes:"192x192",type:"image/png",purpose:"any maskable"},{src:`${x}-/crop/1:1/center/-/smart_resize/512x512/`,sizes:"512x512",type:"image/png"}]})}]},z=P?.localization.language.isoCode??null,S=P?.localization.country.isoCode??null,C=z&&S?`${z}-${S}`:null;return parseJson.serializableJson({themeStyle:genCss.genCSS(i?.pageStyle?.data,h),fontStyle:u,elementFontStyle:m,builderData:p,pageType:o,moneyFormat:P?.shop.moneyFormat??null,currency:P?.localization.country.currency.isoCode??null,languageIsoCode:z,countryIsoCode:S,locale:C,swr:{fallback:g},swatches:parseJson.parseJson(b?.storeProperty?.swatchesConfig),seo:k,mobileOnly:h,gaTrackingId:i.themePageAnalytic?.gaTrackingID??null,facebookPixelId:i.themePageAnalytic?.fbPixelID??null,tiktokPixelId:i.themePageAnalytic?.tiktokPixelID??null,customCodeHeader:i.themePageCustomCode?.header??null,customCodeBody:i.themePageCustomCode?.body??null,pageHandle:i.handle??null,customFonts:d})}catch(e){throw nextjs.captureException(e),e}};exports.getStaticPagePropsV2=getStaticPagePropsV2;
@@ -1,148 +1 @@
1
- 'use strict';
2
-
3
- var core = require('@gem-sdk/core');
4
- var adapterShopify = require('@gem-sdk/adapter-shopify');
5
- var googleFonts = require('../google-fonts.js');
6
- var genCss = require('../helpers/gen-css.js');
7
- var generateManifres = require('../helpers/generate-manifres.js');
8
- var normalize = require('../helpers/normalize.js');
9
- var parseJson = require('../helpers/parse-json.js');
10
-
11
- const getStaticPageProps = (fetcher, shopifyFetcher)=>async (slug)=>{
12
- const pageType = 'STATIC';
13
- const variables = {
14
- slug,
15
- slugType: pageType
16
- };
17
- const [theme, storeProperty, shopifyMeta] = await Promise.allSettled([
18
- fetcher([
19
- core.PublishedThemePagesDocument,
20
- variables
21
- ]),
22
- fetcher([
23
- core.StorePropertyDocument
24
- ]),
25
- shopifyFetcher([
26
- adapterShopify.ShopMetaDocument
27
- ])
28
- ]);
29
- if (theme.status === 'rejected') {
30
- return {
31
- pageType
32
- };
33
- }
34
- const dataBuilder = theme.value.publishedThemePages?.[0];
35
- const pageTemplate = normalize.parseBuilderTemplate(dataBuilder);
36
- const fontStyle = await googleFonts.getFontFromGlobalStyle(dataBuilder?.pageStyle?.data);
37
- const queries = core.prefetchQueries(pageTemplate);
38
- const datas = await Promise.allSettled(queries.map(({ query, variables, func })=>{
39
- if (func) {
40
- return func(fetcher, variables);
41
- }
42
- if (query) return fetcher([
43
- query,
44
- variables
45
- ]);
46
- return {};
47
- }));
48
- const fallback = queries.reduce((acc, { key }, index)=>{
49
- const res = datas[index];
50
- if (res?.status === 'fulfilled') {
51
- return {
52
- ...acc,
53
- [key]: res.value
54
- };
55
- }
56
- return acc;
57
- }, {});
58
- const description = dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-description')?.value;
59
- const thumbnail = parseJson.parseJson(dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-thumbnail')?.value);
60
- const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
61
- const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
62
- const favicon = shopData?.storeProperty?.favicon ?? '/favicon/favicon-32x32.png';
63
- const seo = {
64
- defaultTitle: shopMeta?.shop.name ?? '',
65
- title: dataBuilder?.name ?? '',
66
- description: description ?? shopMeta?.shop.description ?? '',
67
- openGraph: {
68
- site_name: shopMeta?.shop.name ?? '',
69
- locale: shopMeta?.localization.country.isoCode ?? '',
70
- title: dataBuilder?.name ?? shopMeta?.shop.name ?? '',
71
- description: description ?? shopMeta?.shop.description ?? '',
72
- images: thumbnail ? [
73
- thumbnail
74
- ] : []
75
- },
76
- additionalMetaTags: [
77
- {
78
- name: 'theme-color',
79
- content: '#000000'
80
- }
81
- ],
82
- canonical: `/${slug}`,
83
- additionalLinkTags: [
84
- {
85
- rel: 'icon',
86
- sizes: '32x32',
87
- href: `${favicon}-/crop/1:1/center/-/smart_resize/32x32/`
88
- },
89
- {
90
- rel: 'icon',
91
- sizes: '16x16',
92
- href: `${favicon}-/crop/1:1/center/-/smart_resize/16x16/`
93
- },
94
- {
95
- rel: 'apple-touch-icon',
96
- sizes: '180x180',
97
- href: `${favicon}-/crop/1:1/center/-/smart_resize/180x180/`
98
- },
99
- {
100
- rel: 'manifest',
101
- href: generateManifres.generateManifest({
102
- theme_color: '#000000',
103
- background_color: '#ffffff',
104
- display: 'standalone',
105
- scope: '/',
106
- start_url: '/',
107
- name: shopMeta?.shop.name,
108
- short_name: shopMeta?.shop.name,
109
- description: shopMeta?.shop.description,
110
- icons: [
111
- {
112
- src: `${favicon}-/crop/1:1/center/-/smart_resize/192x192/`,
113
- sizes: '192x192',
114
- type: 'image/png',
115
- purpose: 'any maskable'
116
- },
117
- {
118
- src: `${favicon}-/crop/1:1/center/-/smart_resize/512x512/`,
119
- sizes: '512x512',
120
- type: 'image/png'
121
- }
122
- ]
123
- })
124
- }
125
- ]
126
- };
127
- const languageIsoCode = shopMeta?.localization.language.isoCode ?? null;
128
- const countryIsoCode = shopMeta?.localization.country.isoCode ?? null;
129
- const locale = !languageIsoCode || !countryIsoCode ? null : `${languageIsoCode}-${countryIsoCode}`;
130
- return parseJson.serializableJson({
131
- themeStyle: genCss.genCSS(dataBuilder?.pageStyle?.data),
132
- fontStyle,
133
- builderData: pageTemplate,
134
- pageType,
135
- moneyFormat: shopMeta?.shop.moneyFormat ?? null,
136
- currency: shopMeta?.localization.country.currency.isoCode ?? null,
137
- languageIsoCode,
138
- countryIsoCode,
139
- locale,
140
- swr: {
141
- fallback
142
- },
143
- swatches: parseJson.parseJson(shopData?.storeProperty?.swatchesConfig),
144
- seo
145
- });
146
- };
147
-
148
- exports.getStaticPageProps = getStaticPageProps;
1
+ "use strict";var core=require("@gem-sdk/core"),adapterShopify=require("@gem-sdk/adapter-shopify"),googleFonts=require("../google-fonts.js"),genCss=require("../helpers/gen-css.js"),generateManifres=require("../helpers/generate-manifres.js"),normalize=require("../helpers/normalize.js"),parseJson=require("../helpers/parse-json.js");const getStaticPageProps=(e,a)=>async r=>{let s="STATIC",t={slug:r,slugType:s},[o,n,i]=await Promise.allSettled([e([core.PublishedThemePagesDocument,t]),e([core.StorePropertyDocument]),a([adapterShopify.ShopMetaDocument])]);if("rejected"===o.status)return{pageType:s};let l=o.value.publishedThemePages?.[0],c=normalize.parseBuilderTemplate(l),p=await googleFonts.getFontFromGlobalStyle(l?.pageStyle?.data),u=core.prefetchQueries(c),m=await Promise.allSettled(u.map(({query:a,variables:r,func:s})=>s?s(e,r):a?e([a,r]):{})),g=u.reduce((e,{key:a},r)=>{let s=m[r];return s?.status==="fulfilled"?{...e,[a]:s.value}:e},{}),d=l?.themePageDataSEO?.find(e=>e?.key==="global-meta-description")?.value,h=parseJson.parseJson(l?.themePageDataSEO?.find(e=>e?.key==="global-meta-thumbnail")?.value),f="fulfilled"===i.status?i.value:void 0,y="fulfilled"===n.status?n.value:void 0,z=y?.storeProperty?.favicon??"/favicon/favicon-32x32.png",S={defaultTitle:f?.shop.name??"",title:l?.name??"",description:d??f?.shop.description??"",openGraph:{site_name:f?.shop.name??"",locale:f?.localization.country.isoCode??"",title:l?.name??f?.shop.name??"",description:d??f?.shop.description??"",images:h?[h]:[]},additionalMetaTags:[{name:"theme-color",content:"#000000"}],canonical:`/${r}`,additionalLinkTags:[{rel:"icon",sizes:"32x32",href:`${z}-/crop/1:1/center/-/smart_resize/32x32/`},{rel:"icon",sizes:"16x16",href:`${z}-/crop/1:1/center/-/smart_resize/16x16/`},{rel:"apple-touch-icon",sizes:"180x180",href:`${z}-/crop/1:1/center/-/smart_resize/180x180/`},{rel:"manifest",href:generateManifres.generateManifest({theme_color:"#000000",background_color:"#ffffff",display:"standalone",scope:"/",start_url:"/",name:f?.shop.name,short_name:f?.shop.name,description:f?.shop.description,icons:[{src:`${z}-/crop/1:1/center/-/smart_resize/192x192/`,sizes:"192x192",type:"image/png",purpose:"any maskable"},{src:`${z}-/crop/1:1/center/-/smart_resize/512x512/`,sizes:"512x512",type:"image/png"}]})}]},P=f?.localization.language.isoCode??null,v=f?.localization.country.isoCode??null,x=P&&v?`${P}-${v}`:null;return parseJson.serializableJson({themeStyle:genCss.genCSS(l?.pageStyle?.data),fontStyle:p,builderData:c,pageType:s,moneyFormat:f?.shop.moneyFormat??null,currency:f?.localization.country.currency.isoCode??null,languageIsoCode:P,countryIsoCode:v,locale:x,swr:{fallback:g},swatches:parseJson.parseJson(y?.storeProperty?.swatchesConfig),seo:S})};exports.getStaticPageProps=getStaticPageProps;
@@ -0,0 +1,8 @@
1
+ "use strict";const composeFontMimeType=t=>{let o={};return t?.forEach(t=>{if(!t)return;let e=`${t.fontFamily}_${t.fontStyle}_${t.fontWeight}`,n={font:{fontFamily:t.fontFamily,fontStyle:t.fontStyle,fontWeight:t.fontWeight},urls:[{url:t.backupFilePath||t.filePath,mimeType:t.mimeType}]};o[e]?o[e]?.urls.push(n?.urls?.[0]):o[e]=n}),o},formatName=t=>({"font/ttf":"truetype","application/x-font-opentype":"opentype","application/font-woff":"woff","application/font-woff2":"woff2"})[t],composeFontFaces=t=>{let o=[];for(let[,e]of Object.entries(t))o.push(`
2
+ @font-face {
3
+ font-family: '${e.font.fontFamily}';
4
+ src: ${e.urls.map(t=>`url('${t.url}') format('${formatName(t.mimeType)}')`).join("\n")};
5
+ font-style: ${e?.font?.fontStyle??"normal"};
6
+ font-weight: ${e?.font?.fontWeight??"normal"};
7
+ }
8
+ `);return o.map(t=>t).join("\n")},getCustomFonts=t=>{if(!t)return null;let o=composeFontMimeType(t);return composeFontFaces(o)};exports.composeFontFaces=composeFontFaces,exports.composeFontMimeType=composeFontMimeType,exports.formatName=formatName,exports.getCustomFonts=getCustomFonts;
@@ -1,67 +1 @@
1
- 'use strict';
2
-
3
- var getStorefrontApi = require('./get-storefront-api.js');
4
-
5
- const createFetcher = (token)=>{
6
- const shopToken = token || process.env.NEXT_PUBLIC_SHOP_TOKEN;
7
- return async (args)=>{
8
- const [query, variables, operationName] = args;
9
- if (!shopToken) {
10
- throw new Error('shopToken is not defined');
11
- }
12
- if (!process.env.NEXT_PUBLIC_API_URL) {
13
- throw new Error('NEXT_PUBLIC_API_URL is not defined');
14
- }
15
- const headers = {
16
- 'Content-Type': 'application/json',
17
- 'X-GemX-Shop-Token': shopToken
18
- };
19
- return fetch(process.env.NEXT_PUBLIC_API_URL, {
20
- method: 'POST',
21
- headers,
22
- body: JSON.stringify({
23
- query,
24
- variables,
25
- operationName
26
- })
27
- }).then((res)=>res.json()).then((res)=>{
28
- if (res.errors) {
29
- return Promise.reject(res.errors);
30
- }
31
- return res.data;
32
- });
33
- };
34
- };
35
- const createShopifyFetcher = (storefrontToken, handle)=>{
36
- const token = storefrontToken ?? process.env.NEXT_PUBLIC_STOREFRONT_TOKEN;
37
- const storefrontHandle = handle ?? process.env.NEXT_PUBLIC_STOREFRONT_HANDLE;
38
- return async (args)=>{
39
- if (!token) {
40
- throw new Error('NEXT_PUBLIC_STOREFRONT_TOKEN is not defined');
41
- }
42
- if (!storefrontHandle) {
43
- throw new Error('NEXT_PUBLIC_STOREFRONT_HANDLE is not defined');
44
- }
45
- const headers = {
46
- 'Content-Type': 'application/json',
47
- 'X-Shopify-Storefront-Access-Token': token
48
- };
49
- const [query, variables] = args;
50
- return fetch(getStorefrontApi.getStorefrontApi(storefrontHandle), {
51
- method: 'POST',
52
- headers,
53
- body: JSON.stringify({
54
- query,
55
- variables
56
- })
57
- }).then((res)=>res.json()).then((res)=>{
58
- if (res.errors) {
59
- return Promise.reject(res.errors);
60
- }
61
- return res.data;
62
- });
63
- };
64
- };
65
-
66
- exports.createFetcher = createFetcher;
67
- exports.createShopifyFetcher = createShopifyFetcher;
1
+ "use strict";var getStorefrontApi=require("./get-storefront-api.js");const createFetcher=e=>{let r=e||process.env.NEXT_PUBLIC_SHOP_TOKEN;return async e=>{let[t,o,n]=e;if(!r)throw Error("shopToken is not defined");if(!process.env.NEXT_PUBLIC_API_URL)throw Error("NEXT_PUBLIC_API_URL is not defined");let s={"Content-Type":"application/json","X-GemX-Shop-Token":r};return fetch(process.env.NEXT_PUBLIC_API_URL,{method:"POST",headers:s,body:JSON.stringify({query:t,variables:o,operationName:n})}).then(e=>e.json()).then(e=>e.errors?Promise.reject(e.errors):e.data)}},createAppAPIFetcher=(e,r)=>{let t=process.env.NEXT_APP_API_URL;return async o=>{let[n,s,i]=o;if(!e)throw Error("shopToken is not defined");if(!t)throw Error("NEXT_APP_API_URL is not defined");let c={"Content-Type":"application/json",Authorization:`Token ${e}`,"X-GemX-Shop-ID":r||""};return fetch(t,{method:"POST",headers:c,body:JSON.stringify({query:n,variables:s,operationName:i})}).then(e=>e.json()).then(e=>e.errors?Promise.reject(e.errors):e.data)}},createShopifyFetcher=(e,r)=>{let t=e??process.env.NEXT_PUBLIC_STOREFRONT_TOKEN,o=r??process.env.NEXT_PUBLIC_STOREFRONT_HANDLE;return async e=>{if(!t)throw Error("NEXT_PUBLIC_STOREFRONT_TOKEN is not defined");if(!o)throw Error("NEXT_PUBLIC_STOREFRONT_HANDLE is not defined");let r={"Content-Type":"application/json","X-Shopify-Storefront-Access-Token":t},[n,s]=e;return fetch(getStorefrontApi.getStorefrontApi(o),{method:"POST",headers:r,body:JSON.stringify({query:n,variables:s})}).then(e=>e.json()).then(e=>e.errors?Promise.reject(e.errors):e.data)}};exports.createAppAPIFetcher=createAppAPIFetcher,exports.createFetcher=createFetcher,exports.createShopifyFetcher=createShopifyFetcher;
@@ -1,13 +1 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var main = require('../layouts/main.js');
5
-
6
- const getLayout = (page, pageProps)=>{
7
- return /*#__PURE__*/ jsxRuntime.jsx(main.default, {
8
- ...pageProps,
9
- children: page
10
- });
11
- };
12
-
13
- exports.getLayout = getLayout;
1
+ "use strict";var jsxRuntime=require("react/jsx-runtime"),main=require("../layouts/main.js");const getLayout=(t,e)=>jsxRuntime.jsx(main.default,{...e,children:t});exports.getLayout=getLayout;
@@ -1,12 +1 @@
1
- 'use strict';
2
-
3
- const getStorefrontApi = (handle, provider)=>{
4
- switch(provider){
5
- case 'BIGCOMMERCE':
6
- return `https://${handle}.bigcommerce.com`;
7
- default:
8
- return `https://${handle}.myshopify.com/api/2022-07/graphql.json`;
9
- }
10
- };
11
-
12
- exports.getStorefrontApi = getStorefrontApi;
1
+ "use strict";const getStorefrontApi=(t,o)=>"BIGCOMMERCE"===o?`https://${t}.bigcommerce.com`:`https://${t}.myshopify.com/api/2022-07/graphql.json`;exports.getStorefrontApi=getStorefrontApi;
@@ -1,10 +1 @@
1
- 'use strict';
2
-
3
- const getStaticPaths = async ()=>{
4
- return {
5
- paths: [],
6
- fallback: true
7
- };
8
- };
9
-
10
- exports.getStaticPaths = getStaticPaths;
1
+ "use strict";const getStaticPaths=async()=>({paths:[],fallback:!0});exports.getStaticPaths=getStaticPaths;