@faststore/core 3.9.2 → 3.10.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.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +24 -24
- package/.next/cache/.tsbuildinfo +1 -1
- package/.next/cache/config.json +3 -3
- package/.next/cache/eslint/.cache_1gneedd +1 -1
- package/.next/cache/webpack/client-production/0.pack +0 -0
- package/.next/cache/webpack/client-production/index.pack +0 -0
- package/.next/cache/webpack/server-production/0.pack +0 -0
- package/.next/cache/webpack/server-production/index.pack +0 -0
- package/.next/next-minimal-server.js.nft.json +1 -1
- package/.next/next-server.js.nft.json +1 -1
- package/.next/prerender-manifest.js +1 -1
- package/.next/prerender-manifest.json +1 -1
- package/.next/react-loadable-manifest.json +1 -1
- package/.next/routes-manifest.json +1 -1
- package/.next/server/chunks/371.js +1 -1
- package/.next/server/chunks/5430.js +1 -1
- package/.next/server/chunks/5754.js +1 -1
- package/.next/server/chunks/9572.js +1 -1
- package/.next/server/functions-config-manifest.json +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/[...slug].js +1 -1
- package/.next/server/pages/api/graphql.js +1 -1
- package/.next/server/pages/en-US/404.html +1 -1
- package/.next/server/pages/en-US/500.html +1 -1
- package/.next/server/pages/en-US/account.html +1 -1
- package/.next/server/pages/en-US/checkout.html +1 -1
- package/.next/server/pages/en-US/login.html +1 -1
- package/.next/server/pages/en-US/s.html +1 -1
- package/.next/server/pages/en-US.html +1 -1
- package/.next/server/pages-manifest.json +1 -1
- package/.next/static/{toqtT9H4Llz3Q4rHVVWVi → KLRpc4egH7cH2aYyX8E9h}/_buildManifest.js +1 -1
- package/.next/static/chunks/{1153.7f616071da309cf5.js → 1153.d7522522b6c917ed.js} +1 -1
- package/.next/static/chunks/{7563-92cb0cc92e3f616d.js → 7563-53ce4ad626d93f7e.js} +1 -1
- package/.next/static/chunks/pages/[...slug]-ea558b39fbfcc27f.js +1 -0
- package/.next/static/chunks/pages/{_app-9d35d5919aef5334.js → _app-e8bd1b2503bf0aa9.js} +1 -1
- package/.next/static/chunks/{webpack-97751f512707b560.js → webpack-bf502499da135235.js} +1 -1
- package/.next/trace +101 -101
- package/.turbo/turbo-build.log +6 -6
- package/.turbo/turbo-test.log +5 -5
- package/CHANGELOG.md +12 -0
- package/discovery.config.default.js +4 -0
- package/package.json +2 -2
- package/src/components/templates/ProductListingPage/ProductListingPage.tsx +12 -4
- package/src/sdk/performance/useTTI.ts +15 -2
- package/.next/static/chunks/pages/[...slug]-535243edd040fc0c.js +0 -1
- /package/.next/static/{toqtT9H4Llz3Q4rHVVWVi → KLRpc4egH7cH2aYyX8E9h}/_ssgManifest.js +0 -0
package/.turbo/turbo-build.log
CHANGED
|
@@ -49,13 +49,13 @@ Route (pages) Size First Load JS
|
|
|
49
49
|
┌ ● / 3.23 kB 122 kB
|
|
50
50
|
├ └ css/b1806cbafd0c1f81.css 3.06 kB
|
|
51
51
|
├ /_app 0 B 91.9 kB
|
|
52
|
-
├ ● /[...slug] 2.
|
|
52
|
+
├ ● /[...slug] 2.09 kB 131 kB
|
|
53
53
|
├ ● /[slug]/p 34.1 kB 153 kB
|
|
54
54
|
├ ├ css/bf1560439df2c1a1.css 5.66 kB
|
|
55
55
|
├ ├ css/e3ff5d95518a5c79.css 6.01 kB
|
|
56
56
|
├ └ css/d92839440872e246.css 15.6 kB
|
|
57
|
-
├ ○ /404 1.48 kB
|
|
58
|
-
├ ● /500 1.48 kB
|
|
57
|
+
├ ○ /404 1.48 kB 121 kB
|
|
58
|
+
├ ● /500 1.48 kB 121 kB
|
|
59
59
|
├ ● /account 714 B 120 kB
|
|
60
60
|
├ λ /api/graphql 0 B 91.9 kB
|
|
61
61
|
├ λ /api/health/live 0 B 91.9 kB
|
|
@@ -67,12 +67,12 @@ Route (pages) Size First Load JS
|
|
|
67
67
|
+ First Load JS shared by all 95 kB
|
|
68
68
|
├ chunks/framework-12a146e94cfcf7c4.js 45.4 kB
|
|
69
69
|
├ chunks/main-209ac4974b020af1.js 33.1 kB
|
|
70
|
-
├ chunks/pages/_app-
|
|
71
|
-
├ chunks/webpack-
|
|
70
|
+
├ chunks/pages/_app-e8bd1b2503bf0aa9.js 9.94 kB
|
|
71
|
+
├ chunks/webpack-bf502499da135235.js 3.57 kB
|
|
72
72
|
└ css/ee0556daedda6306.css 3.07 kB
|
|
73
73
|
|
|
74
74
|
λ (Server) server-side renders at runtime (uses getInitialProps or getServerSideProps)
|
|
75
75
|
○ (Static) automatically rendered as static HTML (uses no initial props)
|
|
76
76
|
● (SSG) automatically generated as static HTML + JSON (uses getStaticProps)
|
|
77
77
|
|
|
78
|
-
Done in 69.
|
|
78
|
+
Done in 69.67s.
|
package/.turbo/turbo-test.log
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
yarn run v1.22.22
|
|
2
2
|
$ jest
|
|
3
|
-
PASS test/
|
|
4
|
-
PASS test/
|
|
5
|
-
PASS test/server/index.test.ts (39.
|
|
3
|
+
PASS test/server/cms/index.test.ts (35.287 s)
|
|
4
|
+
PASS test/utils/multipleTemplates.test.ts (36.448 s)
|
|
5
|
+
PASS test/server/index.test.ts (39.699 s)
|
|
6
6
|
|
|
7
7
|
Test Suites: 3 passed, 3 total
|
|
8
8
|
Tests: 19 passed, 19 total
|
|
9
9
|
Snapshots: 0 total
|
|
10
|
-
Time: 40.
|
|
10
|
+
Time: 40.791 s
|
|
11
11
|
Ran all test suites.
|
|
12
|
-
Done in 42.
|
|
12
|
+
Done in 42.30s.
|
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,18 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [3.10.0](https://github.com/vtex/faststore/compare/v3.9.3...v3.10.0) (2025-01-29)
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
- add `title` and `description` templates for product listing pages ([#2643](https://github.com/vtex/faststore/issues/2643)) ([00221d9](https://github.com/vtex/faststore/commit/00221d98439b693af3c2c0082ec7ef600637e19e))
|
|
11
|
+
|
|
12
|
+
## [3.9.3](https://github.com/vtex/faststore/compare/v3.9.2...v3.9.3) (2025-01-28)
|
|
13
|
+
|
|
14
|
+
### Bug Fixes
|
|
15
|
+
|
|
16
|
+
- **sdk:** safari rendering ([#2642](https://github.com/vtex/faststore/issues/2642)) ([39746cd](https://github.com/vtex/faststore/commit/39746cd6094ca1f3f08918b88c20c47d87dadd19))
|
|
17
|
+
|
|
6
18
|
## [3.9.2](https://github.com/vtex/faststore/compare/v3.9.1...v3.9.2) (2025-01-27)
|
|
7
19
|
|
|
8
20
|
**Note:** Version bump only for package @faststore/core
|
|
@@ -4,6 +4,10 @@ module.exports = {
|
|
|
4
4
|
description: 'Fast Demo Store',
|
|
5
5
|
titleTemplate: '%s | FastStore',
|
|
6
6
|
author: 'Store Framework',
|
|
7
|
+
plp: {
|
|
8
|
+
titleTemplate: '%s | FastStore PLP',
|
|
9
|
+
descriptionTemplate: '%s products on FastStore Product Listing Page',
|
|
10
|
+
},
|
|
7
11
|
},
|
|
8
12
|
|
|
9
13
|
// Theming
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@faststore/core",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.10.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": "vtex/faststore",
|
|
6
6
|
"browserslist": "supports es6-module and not dead",
|
|
@@ -128,5 +128,5 @@
|
|
|
128
128
|
"node": "18.19.0",
|
|
129
129
|
"yarn": "1.19.1"
|
|
130
130
|
},
|
|
131
|
-
"gitHead": "
|
|
131
|
+
"gitHead": "03506c3d584afd18033e383c806a078a3f9862dc"
|
|
132
132
|
}
|
|
@@ -12,7 +12,7 @@ import type { ServerCollectionPageQueryQuery } from '@generated/graphql'
|
|
|
12
12
|
import { ITEMS_PER_PAGE } from 'src/constants'
|
|
13
13
|
import { useApplySearchState } from 'src/sdk/search/state'
|
|
14
14
|
|
|
15
|
-
import { PLPContentType } from 'src/server/cms/plp'
|
|
15
|
+
import type { PLPContentType } from 'src/server/cms/plp'
|
|
16
16
|
|
|
17
17
|
import storeConfig from '../../../../discovery.config'
|
|
18
18
|
import ProductListing from './ProductListing'
|
|
@@ -68,8 +68,16 @@ export default function ProductListingPage({
|
|
|
68
68
|
sort: settings?.productGallery?.sortBySelection as SearchState['sort'],
|
|
69
69
|
})
|
|
70
70
|
|
|
71
|
-
const
|
|
72
|
-
|
|
71
|
+
const {
|
|
72
|
+
seo: { plp: plpSeo, ...storeSeo },
|
|
73
|
+
} = storeConfig
|
|
74
|
+
const title = collection?.seo.title ?? storeSeo.title
|
|
75
|
+
const titleTemplate = plpSeo?.titleTemplate ?? storeSeo.titleTemplate
|
|
76
|
+
const description =
|
|
77
|
+
collection?.seo.description || // Use description that comes from the Checkout API
|
|
78
|
+
plpSeo?.descriptionTemplate?.replace(/%s/g, () => title) || // Use description template from the SEO config for PLP
|
|
79
|
+
storeSeo.description // Use default description from the store SEO config
|
|
80
|
+
|
|
73
81
|
const [pathname] = router.asPath.split('?')
|
|
74
82
|
const canonical = `${storeConfig.storeUrl}${pathname}`
|
|
75
83
|
const itemsPerPage = settings?.productGallery?.itemsPerPage ?? ITEMS_PER_PAGE
|
|
@@ -84,7 +92,7 @@ export default function ProductListingPage({
|
|
|
84
92
|
<NextSeo
|
|
85
93
|
title={title}
|
|
86
94
|
description={description}
|
|
87
|
-
titleTemplate={
|
|
95
|
+
titleTemplate={titleTemplate}
|
|
88
96
|
canonical={canonical}
|
|
89
97
|
openGraph={{
|
|
90
98
|
type: 'website',
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react'
|
|
2
2
|
|
|
3
3
|
const TTI_TIMEOUT = 5000 // 5 seconds without long tasks as a criterion for Time To Interactive - https://web.dev/articles/tti
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Polyfill for requestIdleCallback, which is not available for every browser
|
|
7
|
+
* https://caniuse.com/requestidlecallback
|
|
8
|
+
*/
|
|
9
|
+
function ric(callback: () => void) {
|
|
10
|
+
if (window.requestIdleCallback) {
|
|
11
|
+
window.requestIdleCallback(callback)
|
|
12
|
+
} else {
|
|
13
|
+
window.setTimeout(callback, 1)
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
4
17
|
export default function useTTI() {
|
|
5
18
|
const [isInteractive, setIsInteractive] = useState(false)
|
|
6
19
|
|
|
@@ -23,11 +36,11 @@ export default function useTTI() {
|
|
|
23
36
|
observer.disconnect()
|
|
24
37
|
setIsInteractive(true) // Sets the state to true when TTI is estimated
|
|
25
38
|
} else {
|
|
26
|
-
|
|
39
|
+
ric(checkTTI) // Keeps checking while the browser is idle
|
|
27
40
|
}
|
|
28
41
|
}
|
|
29
42
|
|
|
30
|
-
|
|
43
|
+
ric(checkTTI)
|
|
31
44
|
}
|
|
32
45
|
}, [])
|
|
33
46
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[330],{3054:function(e,t,r){"use strict";r.r(t),r.d(t,{__N_SSG:function(){return M},default:function(){return _slug_}});var n=r(9499),o=r(4730),c=r(5152),i=r.n(c),s=r(6142),a=r(2339),l=r(1197),u=r(5351),d=r(1163),p=r(2784),b=r(1023),g=r(5403),P=r(5430),j=r.n(P),O=r(9029),f=r(9996),y=r.n(f),w=r(3472),v=r(3638),_=r(4485),h=r(4439),m=r(7641),S=r(1271);function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function _objectSpread(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ownKeys(Object(r),!0).forEach(function(t){(0,n.Z)(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ownKeys(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var L=i()(()=>Promise.all([r.e(9161),r.e(84)]).then(r.bind(r,3620)).then(e=>e.OverriddenDefaultBannerText),{ssr:!1,loadableGenerated:{webpack:()=>[3620]}}),D=i()(()=>Promise.all([r.e(1770),r.e(218),r.e(9704)]).then(r.bind(r,1482)).then(e=>e.OverriddenDefaultNewsletter),{ssr:!1,loadableGenerated:{webpack:()=>[1482]}}),x=i()(()=>Promise.all([r.e(3472),r.e(3506)]).then(r.bind(r,1171)).then(e=>e.OverriddenDefaultProductShelf),{ssr:!1,loadableGenerated:{webpack:()=>[1171]}}),E=i()(()=>r.e(7181).then(r.bind(r,9755)),{ssr:!1,loadableGenerated:{webpack:()=>[9755]}}),k=_objectSpread(_objectSpread(_objectSpread({},S.Z),{},{Breadcrumb:w.j,Hero:v.V,ProductGallery:_.f,BannerText:L,Newsletter:D,ProductShelf:x,ProductTiles:E},m.Z),h.Z),G=r(7563),K=r(4960),Z=r(7171),N=r(7921),T=r(2322);function ProductListing_ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function ProductListing_objectSpread(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ProductListing_ownKeys(Object(r),!0).forEach(function(t){(0,n.Z)(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ProductListing_ownKeys(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var B=i()(()=>r.e(6636).then(r.bind(r,7917)),{loadableGenerated:{webpack:()=>[7917]}}),overwriteMerge=(e,t)=>t;function ProductListing(e){var t,r,{page:{sections:n,settings:o},data:c,globalSections:i}=e,{state:{sort:s,term:a,selectedFacets:l}}=(0,O.R)(),u=null!==(t=null==o?void 0:null===(r=o.productGallery)||void 0===r?void 0:r.itemsPerPage)&&void 0!==t?t:b.g,{data:d}=(0,N.UO)({term:a,sort:s,selectedFacets:l,itemsPerPage:u}),{pages:p,useGalleryPage:g}=(0,Z.Y_)(),P={data:ProductListing_objectSpread(ProductListing_objectSpread({},y()(ProductListing_objectSpread({},c),ProductListing_objectSpread({},d),{arrayMerge:overwriteMerge})),{},{pages:p})};return(0,T.jsx)(T.Fragment,{children:(0,T.jsx)(K.ZP,{context:P,children:(0,T.jsx)(Z.Bj.Provider,{value:g,children:(0,T.jsx)(G.Z,{sections:n,globalSections:i,components:k,children:(0,T.jsx)(G.w,{sectionName:"ScrollToTopButton",children:(0,T.jsx)(B,{})})})})})})}function ProductListingPage_ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function ProductListingPage_objectSpread(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ProductListingPage_ownKeys(Object(r),!0).forEach(function(t){(0,n.Z)(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ProductListingPage_ownKeys(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var useSearchParams=e=>{var{collection:t,sort:r}=e,n=null==t?void 0:t.meta.selectedFacets,{asPath:o}=(0,d.useRouter)(),c=(0,p.useMemo)(()=>{var e=new URL(o,"http://localhost");r&&!e.searchParams.has("sort")&&e.searchParams.set("sort",r);var t=(0,s.Q)(e);return 0===t.selectedFacets.length&&(t.selectedFacets=n),(0,a.Z)(t).href},[o,n,r]);return(0,p.useMemo)(()=>(0,s.Q)(new URL(c)),[c])};function ProductListingPage(e){var t,r,n,o,c,i,{page:s,data:a,globalSections:p}=e,{settings:P}=s,O=a.collection,f=(0,d.useRouter)(),y=(0,g.j)(),w=useSearchParams({collection:O,sort:null==P?void 0:null===(t=P.productGallery)||void 0===t?void 0:t.sortBySelection}),v=null!==(r=null==O?void 0:O.seo.title)&&void 0!==r?r:j().seo.title,_=null!==(n=null==O?void 0:O.seo.description)&&void 0!==n?n:j().seo.title,[h]=f.asPath.split("?"),m="".concat(j().storeUrl).concat(h),S=null!==(o=null==P?void 0:null===(c=P.productGallery)||void 0===c?void 0:c.itemsPerPage)&&void 0!==o?o:b.g;return(0,T.jsxs)(l.z,ProductListingPage_objectSpread(ProductListingPage_objectSpread({onChange:y,itemsPerPage:S},w),{},{children:[(0,T.jsx)(u.PB,{title:v,description:_,titleTemplate:j().seo.titleTemplate,canonical:m,openGraph:{type:"website",title:v,description:_}}),(0,T.jsx)(u.gR,{itemListElements:null!==(i=null==O?void 0:O.breadcrumbList.itemListElement)&&void 0!==i?i:[]}),(0,T.jsx)(ProductListing,{globalSections:p,page:s,data:a})]}))}var R=["globalSections","type"];function _slug_ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function _slug_objectSpread(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?_slug_ownKeys(Object(r),!0).forEach(function(t){(0,n.Z)(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):_slug_ownKeys(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var F=i()(()=>Promise.all([r.e(1770),r.e(5997),r.e(3472),r.e(218),r.e(9161),r.e(6379),r.e(1978)]).then(r.bind(r,8205)),{loadableGenerated:{webpack:()=>[8205]}}),M=!0,_slug_=function(e){var{globalSections:t,type:r}=e,n=(0,o.Z)(e,R);return(0,T.jsxs)(T.Fragment,{children:["plp"===r&&(0,T.jsx)(ProductListingPage,_slug_objectSpread({globalSections:t.sections},n)),"page"===r&&(0,T.jsx)(F,_slug_objectSpread({globalSections:t.sections},n))]})}},881:function(e,t,r){(window.__NEXT_P=window.__NEXT_P||[]).push(["/[...slug]",function(){return r(3054)}])}},function(e){e.O(0,[6941,7563,4501,9774,2888,179],function(){return e(e.s=881)}),_N_E=e.O()}]);
|
|
File without changes
|