@faststore/core 4.10.1-dev.2 → 4.10.1-dev.3

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.
@@ -1,9 +1,9 @@
1
1
 
2
- > @faststore/core@4.10.1-dev.1 generate /home/runner/work/faststore/faststore/packages/core
2
+ > @faststore/core@4.10.1-dev.2 generate /home/runner/work/faststore/faststore/packages/core
3
3
  > pnpm run gen-types && pnpm run cache-graphql
4
4
 
5
5
 
6
- > @faststore/core@4.10.1-dev.1 gen-types /home/runner/work/faststore/faststore/packages/core
6
+ > @faststore/core@4.10.1-dev.2 gen-types /home/runner/work/faststore/faststore/packages/core
7
7
  > node ../cli/bin/run generate-types .
8
8
 
9
9
  [STARTED] Parse Configuration
@@ -19,7 +19,7 @@
19
19
  [COMPLETED] Generate to @generated/
20
20
  [COMPLETED] Generate outputs
21
21
 
22
- > @faststore/core@4.10.1-dev.1 cache-graphql /home/runner/work/faststore/faststore/packages/core
22
+ > @faststore/core@4.10.1-dev.2 cache-graphql /home/runner/work/faststore/faststore/packages/core
23
23
  > node ../cli/bin/run cache-graphql --config=./discovery.config.default.js --queries=./@generated/persisted-documents.json
24
24
 
25
25
  [Info] - Config file location: /home/runner/work/faststore/faststore/packages/core/discovery.config.default.js
@@ -1,5 +1,5 @@
1
1
 
2
- > @faststore/core@4.10.1-dev.1 test /home/runner/work/faststore/faststore/packages/core
2
+ > @faststore/core@4.10.1-dev.2 test /home/runner/work/faststore/faststore/packages/core
3
3
  > vitest run
4
4
 
5
5
 
@@ -7,24 +7,24 @@
7
7
 
8
8
  Not implemented: navigation to another Document
9
9
  Not implemented: navigation to another Document
10
+ ✓  browser  test/sdk/ui/useScrollRestoration.browser.test.ts (43 tests) 990ms
10
11
  Browserslist: browsers data (caniuse-lite) is 8 months old. Please run:
11
12
  npx update-browserslist-db@latest
12
13
  Why you should do it regularly: https://github.com/browserslist/update-db#readme
13
- ✓  browser  test/sdk/ui/useScrollRestoration.browser.test.ts (43 tests) 1047ms
14
- ✓  browser  test/components/account/ContractSwitcher.browser.test.tsx (22 tests) 2181ms
15
- ✓ shows an error state when the list fails to load  468ms
16
- ✓  browser  test/components/account/cards/MyAccountListCards.browser.test.tsx (16 tests) 1688ms
17
- ✓ shows the tab bar and renders Personal cards by default  704ms
18
- ✓  browser  test/components/account/orders/BuyingPolicyAlert.browser.test.tsx (13 tests) 1744ms
19
- ✓ opens the reject confirmation modal with the default English copy  762ms
20
- ✓  browser  test/components/ui/RichText/RichText.browser.test.tsx (8 tests) 254ms
21
- ✓  browser  test/components/account/OrganizationDrawer.browser.test.tsx (10 tests) 1201ms
22
- ✓ renders the menu view with contract details and manage footer  597ms
23
- ✓  browser  test/sdk/localization/useBindingSelector.browser.test.tsx (9 tests) 60ms
24
- ✓  browser  test/sdk/session/reconcileSessionLocale.browser.test.ts (6 tests) 11ms
25
- ✓  browser  test/components/CartRecommendationShelf/CartRecommendationShelf.browser.test.tsx (13 tests) 143ms
26
- ✓  browser  test/components/ui/ProductGallery/GalleryPageHeightLock.browser.test.tsx (8 tests) 49ms
27
- ✓  browser  test/sdk/recommendations/useRecommendationShelf.browser.test.tsx (12 tests) 45ms
14
+ ✓  browser  test/components/account/ContractSwitcher.browser.test.tsx (22 tests) 2577ms
15
+ ✓ shows an error state when the list fails to load  376ms
16
+ ✓ requires selecting a contract before Confirm is enabled, then switches (REQ-03)  413ms
17
+ ✓  browser  test/components/account/cards/MyAccountListCards.browser.test.tsx (16 tests) 1681ms
18
+ ✓ shows the tab bar and renders Personal cards by default  558ms
19
+ ✓  browser  test/components/account/orders/BuyingPolicyAlert.browser.test.tsx (13 tests) 1074ms
20
+ ✓ opens the reject confirmation modal with the default English copy  365ms
21
+ ✓  browser  test/components/ui/RichText/RichText.browser.test.tsx (8 tests) 246ms
22
+ ✓  browser  test/sdk/localization/useBindingSelector.browser.test.tsx (9 tests) 65ms
23
+ ✓  browser  test/components/account/OrganizationDrawer.browser.test.tsx (10 tests) 906ms
24
+ ✓ renders the menu view with contract details and manage footer  505ms
25
+ ✓  browser  test/components/CartRecommendationShelf/CartRecommendationShelf.browser.test.tsx (13 tests) 112ms
26
+ ✓  browser  test/sdk/session/reconcileSessionLocale.browser.test.ts (6 tests) 9ms
27
+ ✓  browser  test/components/ui/ProductGallery/GalleryPageHeightLock.browser.test.tsx (8 tests) 82ms
28
28
  stderr | test/components/RecommendationShelf/RecommendationShelf.browser.test.tsx
29
29
  Error in optimistic validation: TypeError: Failed to parse URL from /api/graphql?operationName=ValidateCartMutation&operationHash=3c71b0d3fc2bade14df68abfa271858beb361b12
30
30
   at node:internal/deps/undici/undici:16416:13
@@ -54,10 +54,11 @@ Browserslist: browsers data (caniuse-lite) is 8 months old. Please run:
54
54
  stderr | test/components/RecommendationShelf/RecommendationShelf.browser.test.tsx > RecommendationShelf > renders nothing when there is an error
55
55
  Error fetching recommendations undefined boom for campaign vrn:recommendations:acc:rec-top-items-v2:campaign-1
56
56
 
57
- ✓  browser  test/components/RecommendationShelf/RecommendationShelf.browser.test.tsx (8 tests) 71ms
58
- ✓  browser  test/components/CartSidebar/CartSidebar.browser.test.tsx (5 tests) 71ms
57
+ ✓  browser  test/components/RecommendationShelf/RecommendationShelf.browser.test.tsx (8 tests) 76ms
58
+ ✓  browser  test/sdk/recommendations/useRecommendationShelf.browser.test.tsx (12 tests) 88ms
59
+ ✓  browser  test/components/CartSidebar/CartSidebar.browser.test.tsx (5 tests) 107ms
59
60
  ✓  browser  test/sdk/session/getInitialSession.browser.test.ts (7 tests) 11ms
60
- ✓  browser  test/components/sections/Account/AccountOrderDetails.browser.test.tsx (4 tests) 75ms
61
+ ✓  browser  test/components/sections/Account/AccountOrderDetails.browser.test.tsx (4 tests) 81ms
61
62
  stderr | test/pages/password-protection.browser.test.tsx > PasswordProtectionLogin > posts the password and redirects to the requested return path
62
63
  Warning: An update to PasswordProtectionLogin inside a test was not wrapped in act(...).
63
64
 
@@ -95,6 +96,7 @@ act(() => {
95
96
  This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
96
97
  at PasswordProtectionLogin (/home/runner/work/faststore/faststore/packages/core/src/pages/password-protection/index.tsx:19:69)
97
98
 
99
+ ✓  browser  test/components/navigation/Navbar.browser.test.tsx (3 tests) 32ms
98
100
  stderr | test/pages/password-protection.browser.test.tsx > PasswordProtectionLogin > defaults returnTo to root and shows API validation errors
99
101
  Warning: An update to PasswordProtectionLogin inside a test was not wrapped in act(...).
100
102
 
@@ -239,7 +241,6 @@ act(() => {
239
241
  This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
240
242
  at PasswordProtectionLogin (/home/runner/work/faststore/faststore/packages/core/src/pages/password-protection/index.tsx:19:69)
241
243
 
242
- ✓  browser  test/components/navigation/Navbar.browser.test.tsx (3 tests) 28ms
243
244
  stderr | test/pages/password-protection.browser.test.tsx > PasswordProtectionLogin > shows service unavailable when the login request fails
244
245
  Warning: An update to PasswordProtectionLogin inside a test was not wrapped in act(...).
245
246
 
@@ -288,9 +289,8 @@ act(() => {
288
289
  This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
289
290
  at PasswordProtectionLogin (/home/runner/work/faststore/faststore/packages/core/src/pages/password-protection/index.tsx:19:69)
290
291
 
291
- ✓  browser  test/pages/password-protection.browser.test.tsx (6 tests) 451ms
292
- ✓  browser  test/components/account/OrganizationDrawerFooter.browser.test.tsx (8 tests) 347ms
293
- ✓  browser  test/sdk/account/useSwitchContract.browser.test.ts (5 tests) 27ms
292
+ ✓  browser  test/pages/password-protection.browser.test.tsx (6 tests) 552ms
293
+ ✓  browser  test/components/account/OrganizationDrawerFooter.browser.test.tsx (8 tests) 301ms
294
294
  stderr | test/components/cms/RenderSections.browser.test.tsx
295
295
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
296
296
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
@@ -299,8 +299,9 @@ This ensures that you're testing the behavior the user would see in the browser.
299
299
  at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:357:23)
300
300
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
301
301
 
302
- ✓  browser  test/components/navigation/NavbarSlider.browser.test.tsx (2 tests) 24ms
303
- ✓  browser  test/components/cms/RenderSections.browser.test.tsx (5 tests) 52ms
302
+ ✓  browser  test/sdk/account/useSwitchContract.browser.test.ts (5 tests) 36ms
303
+ ✓  browser  test/components/navigation/NavbarSlider.browser.test.tsx (2 tests) 22ms
304
+ ✓  browser  test/components/cms/RenderSections.browser.test.tsx (5 tests) 46ms
304
305
  stderr | test/sdk/localization/store-url.browser.test.ts
305
306
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
306
307
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
@@ -310,14 +311,14 @@ This ensures that you're testing the behavior the user would see in the browser.
310
311
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
311
312
 
312
313
  ✓  browser  test/sdk/localization/store-url.browser.test.ts (3 tests) 3ms
313
- ✓  browser  test/components/account/Menu.browser.test.tsx (6 tests) 207ms
314
- ✓  browser  test/sdk/account/useAvailableContracts.browser.test.ts (6 tests) 31ms
315
- ✓  browser  test/components/templates/SearchPage/SearchWrapper.browser.test.tsx (3 tests) 17ms
316
- ✓  browser  test/sdk/recommendations/useRecommendationShelf.sessionFallback.browser.test.tsx (2 tests) 120ms
317
- ✓  browser  test/components/sections/Account/AccountListQuotes.browser.test.tsx (4 tests) 85ms
318
- ✓  browser  test/components/navigation/NavbarAccountArea.browser.test.tsx (4 tests) 31ms
314
+ ✓  browser  test/components/account/Menu.browser.test.tsx (6 tests) 206ms
315
+ ✓  browser  test/sdk/account/useAvailableContracts.browser.test.ts (6 tests) 23ms
316
+ ✓  browser  test/components/templates/SearchPage/SearchWrapper.browser.test.tsx (3 tests) 24ms
317
+ ✓  browser  test/sdk/recommendations/useRecommendationShelf.sessionFallback.browser.test.tsx (2 tests) 122ms
318
+ ✓  browser  test/components/sections/Account/AccountListQuotes.browser.test.tsx (4 tests) 73ms
319
+ ✓  browser  test/components/navigation/NavbarAccountArea.browser.test.tsx (4 tests) 48ms
319
320
  ✓  browser  test/components/CartRecommendationShelf/CartRecommendationProductCard.browser.test.tsx (3 tests) 30ms
320
- ✓  browser  test/sdk/account/changeContractToken.browser.test.ts (9 tests) 12ms
321
+ ✓  browser  test/sdk/account/changeContractToken.browser.test.ts (9 tests) 13ms
321
322
  stderr | test/components/account/doLogout.browser.test.ts
322
323
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
323
324
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
@@ -326,9 +327,9 @@ This ensures that you're testing the behavior the user would see in the browser.
326
327
  at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:357:23)
327
328
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
328
329
 
329
- ✓  browser  test/components/account/doLogout.browser.test.ts (1 test) 14ms
330
- ✓  browser  test/components/account/OrganizationDrawerHeader.browser.test.tsx (5 tests) 177ms
331
- ✓  browser  test/components/ui/LocalizationButton.browser.test.tsx (3 tests) 26ms
330
+ ✓  browser  test/components/account/doLogout.browser.test.ts (1 test) 20ms
331
+ ✓  browser  test/components/ui/LocalizationButton.browser.test.tsx (3 tests) 33ms
332
+ ✓  browser  test/components/account/OrganizationDrawerHeader.browser.test.tsx (5 tests) 234ms
332
333
  stderr | test/sdk/account/clearPersistedSessionState.browser.test.ts
333
334
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
334
335
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
@@ -338,13 +339,13 @@ This ensures that you're testing the behavior the user would see in the browser.
338
339
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
339
340
 
340
341
  ✓  browser  test/sdk/account/clearPersistedSessionState.browser.test.ts (4 tests) 11ms
341
- ✓  browser  test/components/sections/Account/AccountOrderDelivery.browser.test.tsx (2 tests) 48ms
342
- ✓  browser  test/components/account/orders/DeliveryOptionAccordion.browser.test.tsx (2 tests) 57ms
343
- ✓  browser  test/components/sections/Account/AccountOrderStatus.browser.test.tsx (3 tests) 68ms
342
+ ✓  browser  test/components/sections/Account/AccountOrderDelivery.browser.test.tsx (2 tests) 54ms
343
+ ✓  browser  test/components/account/orders/DeliveryOptionAccordion.browser.test.tsx (2 tests) 58ms
344
+ ✓  browser  test/components/sections/Account/AccountOrderStatus.browser.test.tsx (3 tests) 56ms
344
345
  ✓  browser  test/components/region/useRegion.browser.test.ts (1 test) 14ms
345
- ✓  browser  test/components/sections/Account/AccountListCards.browser.test.tsx (3 tests) 53ms
346
- ✓  browser  test/components/sections/Account/AccountOrdersList.browser.test.tsx (2 tests) 23ms
347
- ✓  browser  test/components/account/orders/SummaryCard.browser.test.tsx (2 tests) 50ms
346
+ ✓  browser  test/components/sections/Account/AccountListCards.browser.test.tsx (3 tests) 47ms
347
+ ✓  browser  test/components/sections/Account/AccountOrdersList.browser.test.tsx (2 tests) 11ms
348
+ ✓  browser  test/components/account/orders/SummaryCard.browser.test.tsx (2 tests) 38ms
348
349
  stderr | test/sdk/session/sessionStore.browser.test.ts
349
350
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
350
351
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
@@ -353,9 +354,9 @@ This ensures that you're testing the behavior the user would see in the browser.
353
354
  at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:357:23)
354
355
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
355
356
 
356
- ✓  browser  test/sdk/session/sessionStore.browser.test.ts (2 tests) 4ms
357
- ✓  browser  test/components/account/OrganizationSignInButton.browser.test.tsx (2 tests) 147ms
358
- ✓  browser  test/components/account/orders/DeliveryOptionAccordionDeliveryInfo.browser.test.tsx (1 test) 22ms
357
+ ✓  browser  test/sdk/session/sessionStore.browser.test.ts (2 tests) 3ms
358
+ ✓  browser  test/components/account/OrganizationSignInButton.browser.test.tsx (2 tests) 180ms
359
+ ✓  browser  test/components/account/orders/DeliveryOptionAccordionDeliveryInfo.browser.test.tsx (1 test) 23ms
359
360
  stderr | test/sdk/session/validateSession.browser.test.ts
360
361
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
361
362
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
@@ -364,14 +365,13 @@ This ensures that you're testing the behavior the user would see in the browser.
364
365
  at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:357:23)
365
366
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
366
367
 
367
- ✓  browser  test/sdk/session/validateSession.browser.test.ts (1 test) 3ms
368
- ✓  browser  test/components/account/orders/StatusCard.browser.test.tsx (2 tests) 69ms
368
+ ✓  browser  test/sdk/session/validateSession.browser.test.ts (1 test) 4ms
369
+ ✓  browser  test/components/account/orders/StatusCard.browser.test.tsx (2 tests) 73ms
369
370
  ✓  browser  test/utils/isLocalHost.browser.test.ts (3 tests) 3ms
370
371
  ✓  browser  test/sdk/session/reconcileSessionLocale.disabled.browser.test.ts (1 test) 2ms
371
- ✓  browser  test/components/account/orders/DeliveryCard.browser.test.tsx (1 test) 32ms
372
- ✓  browser  test/components/account/orders/DeliveryOptionAccordionProducts.browser.test.tsx (1 test) 19ms
373
- ✓  browser  test/components/skeletons/ProductGridSkeleton.browser.test.tsx (2 tests) 17ms
374
- ✓  node  test/utils/localization/bindingPaths.test.ts (71 tests) 11ms
372
+ ✓  browser  test/components/account/orders/DeliveryCard.browser.test.tsx (1 test) 28ms
373
+ ✓  browser  test/components/account/orders/DeliveryOptionAccordionProducts.browser.test.tsx (1 test) 20ms
374
+ ✓  browser  test/components/skeletons/ProductGridSkeleton.browser.test.tsx (2 tests) 16ms
375
375
  stderr | test/sdk/account/refreshToken.browser.test.ts
376
376
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
377
377
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
@@ -380,13 +380,14 @@ This ensures that you're testing the behavior the user would see in the browser.
380
380
  at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:357:23)
381
381
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
382
382
 
383
+ ✓  node  test/utils/localization/bindingPaths.test.ts (71 tests) 13ms
383
384
  ✓  browser  test/sdk/account/refreshToken.browser.test.ts (1 test) 3ms
384
- ✓  node  test/server/password-protection-service.test.ts (22 tests) 19ms
385
- ✓  browser  test/components/account/orders/FilterFacetPendingApproval.browser.test.tsx (1 test) 143ms
386
- ✓  node  test/pages/api/switch-contract.test.ts (25 tests) 66ms
387
- ✓  node  test/server/content/service.test.ts (16 tests) 15ms
385
+ ✓  browser  test/components/account/orders/FilterFacetPendingApproval.browser.test.tsx (1 test) 123ms
386
+ ✓  node  test/server/password-protection-service.test.ts (22 tests) 16ms
387
+ ✓  node  test/pages/api/switch-contract.test.ts (25 tests) 110ms
388
+ ✓  node  test/server/content/service.test.ts (27 tests) 19ms
389
+ ✓  node  test/sdk/localization/useBindingSelector.test.tsx (22 tests) 7ms
388
390
  ✓  node  test/utils/match-url.test.ts (10 tests) 5ms
389
- ✓  node  test/sdk/localization/useBindingSelector.test.tsx (22 tests) 9ms
390
391
  stderr | test/sdk/deliveryPromise/provider.effect.test.tsx > DeliveryPromiseProvider pickup fetch > clears the loading flag after a failed request and retries on the next update
391
392
  Failed to fetch pickup points: Error: network
392
393
  at /home/runner/work/faststore/faststore/packages/core/test/sdk/deliveryPromise/provider.effect.test.tsx:250:30
@@ -413,13 +414,13 @@ This ensures that you're testing the behavior the user would see in the browser.
413
414
  at trace (file:///home/runner/work/faststore/faststore/node_modules/.pnpm/vitest@4.0.18_@opentelemetry+api@1.9.0_@types+node@20.19.13_jiti@2.6.1_jsdom@27.4.0_sas_13be941c57d55f08f06eeaf1c180ddfe/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21)
414
415
  at runTest (file:///home/runner/work/faststore/faststore/node_modules/.pnpm/@vitest+runner@4.0.18/node_modules/@vitest/runner/dist/index.js:1653:12)
415
416
 
416
- ✓  node  test/sdk/deliveryPromise/provider.effect.test.tsx (9 tests) 57ms
417
- ✓  node  test/pages/api/unlock.test.ts (15 tests) 92ms
418
- ✓  node  test/sdk/session/syncSalesChannelFromOrderForm.test.ts (14 tests) 5ms
419
- ✓  node  test/sdk/localization/bindingSelector.test.ts (18 tests) 4ms
417
+ ✓  node  test/sdk/deliveryPromise/provider.effect.test.tsx (9 tests) 74ms
418
+ ✓  node  test/pages/api/unlock.test.ts (15 tests) 94ms
419
+ ✓  node  test/sdk/session/syncSalesChannelFromOrderForm.test.ts (14 tests) 7ms
420
420
  stderr | test/components/search/SearchInputComponent.test.tsx
421
421
  Warning: forwardRef render functions accept exactly two parameters: props and ref. Did you forget to use the ref parameter?
422
422
 
423
+ ✓  node  test/sdk/localization/bindingSelector.test.ts (18 tests) 4ms
423
424
  stderr | test/components/search/SearchInputComponent.test.tsx > SearchInput (OES integration) > renders without crashing
424
425
  Warning: React does not recognize the `visibleDropdown` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `visibledropdown` instead. If you accidentally passed it from a parent component, remove it from the DOM element.
425
426
  at div
@@ -480,9 +481,9 @@ Warning: React does not recognize the `providerProps` prop on a DOM element. If
480
481
  at Suspense
481
482
  at Wrapper (/home/runner/work/faststore/faststore/packages/core/test/components/search/SearchInputComponent.test.tsx:106:20)
482
483
 
483
- ✓  node  test/components/search/SearchInputComponent.test.tsx (6 tests) 42ms
484
- ✓  node  test/components/quotes/MyAccountListQuotesTable.test.tsx (15 tests) 281ms
485
- ✓  node  test/sdk/search/useSearchHistory.test.ts (13 tests) 28ms
484
+ ✓  node  test/components/search/SearchInputComponent.test.tsx (6 tests) 51ms
485
+ ✓  node  test/components/quotes/MyAccountListQuotesTable.test.tsx (15 tests) 280ms
486
+ ✓  node  test/sdk/search/useSearchHistory.test.ts (13 tests) 26ms
486
487
  stderr | test/pages/pvt/account/cards/index.test.ts > Cards page getServerSideProps > redirects to /pvt/account/403 when the query fails with 401/403
487
488
  { extensions: { status: 401 } }
488
489
 
@@ -490,13 +491,12 @@ Warning: React does not recognize the `providerProps` prop on a DOM element. If
490
491
  { extensions: { status: 502 } }
491
492
 
492
493
  ✓  node  test/pages/pvt/account/cards/index.test.ts (8 tests) 5ms
493
- ✓  node  test/utils/cookieCacheBusting.test.ts (10 tests) 8ms
494
- ✓  node  test/components/quotes/MyAccountListQuotes.test.tsx (11 tests) 783ms
495
- ✓ navigates with the search term on blur  357ms
496
- ✓ navigates without a label param when the search is cleared  358ms
497
- ✓  node  test/components/quotes/quoteFilters.test.ts (26 tests) 20ms
498
- ✓  node  test/utils/productJsonLd.test.ts (36 tests) 7ms
499
- ✓  node  test/experimental/myAccountCmsServerSideProps.test.ts (5 tests) 6ms
494
+ ✓  node  test/utils/cookieCacheBusting.test.ts (10 tests) 5ms
495
+ ✓  node  test/components/quotes/MyAccountListQuotes.test.tsx (11 tests) 766ms
496
+ ✓ navigates with the search term on blur  355ms
497
+ ✓ navigates without a label param when the search is cleared  357ms
498
+ ✓  node  test/components/quotes/quoteFilters.test.ts (26 tests) 17ms
499
+ ✓  node  test/utils/productJsonLd.test.ts (36 tests) 8ms
500
500
  stderr | test/pages/api/graphql.test.ts > /api/graphql error status propagation > propagates the upstream 400 from a wrapped BadRequestError instead of 500
501
501
  Graphql execution returned with error: [
502
502
  {
@@ -606,76 +606,78 @@ Warning: React does not recognize the `providerProps` prop on a DOM element. If
606
606
  at trace (file:///home/runner/work/faststore/faststore/node_modules/.pnpm/vitest@4.0.18_@opentelemetry+api@1.9.0_@types+node@20.19.13_jiti@2.6.1_jsdom@27.4.0_sas_13be941c57d55f08f06eeaf1c180ddfe/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21)
607
607
  at runTest (file:///home/runner/work/faststore/faststore/node_modules/.pnpm/@vitest+runner@4.0.18/node_modules/@vitest/runner/dist/index.js:1653:12)
608
608
 
609
- ✓  node  test/pages/api/graphql.test.ts (19 tests) 20ms
610
- ✓  node  test/utils/clearCookies.test.ts (20 tests) 16ms
609
+ ✓  node  test/pages/api/graphql.test.ts (19 tests) 28ms
610
+ ✓  node  test/experimental/myAccountCmsServerSideProps.test.ts (5 tests) 6ms
611
+ ✓  node  test/utils/clearCookies.test.ts (20 tests) 17ms
611
612
  ✓  node  test/utils/multipleTemplates.test.ts (8 tests) 4ms
612
613
  stderr | test/sdk/account/useSetPassword.test.ts > useSetPassword > maps wrongcredentials error responses to the existing message
613
614
  Set password request failed: Bad Request
614
615
 
615
- ✓  node  test/sdk/account/useSetPassword.test.ts (6 tests) 36ms
616
- ✓  node  test/sdk/orderEntry/useOrderEntryOperation.test.ts (8 tests) 26ms
616
+ ✓  node  test/sdk/account/useSetPassword.test.ts (6 tests) 21ms
617
+ ✓  node  test/sdk/orderEntry/useOrderEntryOperation.test.ts (8 tests) 22ms
617
618
  ✓  node  test/utils/localization/localizeRedirectDestination.test.ts (11 tests) 3ms
618
- ✓  node  test/components/quotes/MyAccountQuotesFilterSlider.test.tsx (8 tests) 91ms
619
- ✓  node  test/components/quotes/MyAccountQuotesStatusSelector.test.tsx (14 tests) 111ms
620
- ✓  node  test/utils/localization/hreflang.test.ts (8 tests) 4ms
621
- ✓  node  test/sdk/account/getMyAccountRoutes.test.ts (13 tests) 5ms
622
- ✓  node  test/components/quotes/MyAccountQuotesSelectedTags.test.tsx (10 tests) 66ms
623
- ✓  node  test/sdk/redirects/index.test.ts (7 tests) 43ms
624
- ✓  node  test/sdk/orderEntry/useOrderEntryUpload.test.ts (8 tests) 28ms
625
- ✓  node  test/proxy.localization.test.ts (5 tests) 32ms
626
- ✓  node  test/sdk/orderEntry/useOrderEntry.test.ts (8 tests) 23ms
627
- ✓  node  test/components/account/orders/getDeliveryOptionLabel.test.ts (21 tests) 8ms
619
+ ✓  node  test/components/quotes/MyAccountQuotesFilterSlider.test.tsx (8 tests) 101ms
620
+ ✓  node  test/components/quotes/MyAccountQuotesStatusSelector.test.tsx (14 tests) 106ms
621
+ ✓  node  test/utils/localization/hreflang.test.ts (8 tests) 3ms
622
+ ✓  node  test/components/quotes/MyAccountQuotesSelectedTags.test.tsx (10 tests) 70ms
623
+ ✓  node  test/sdk/account/getMyAccountRoutes.test.ts (13 tests) 6ms
624
+ ✓  node  test/server/cms/index.test.ts (7 tests) 5ms
625
+ ✓  node  test/server/content/promiseCache.test.ts (10 tests) 8ms
626
+ ✓  node  test/sdk/redirects/index.test.ts (7 tests) 23ms
627
+ ✓  node  test/sdk/orderEntry/useOrderEntryUpload.test.ts (8 tests) 32ms
628
+ ✓  node  test/sdk/orderEntry/useOrderEntry.test.ts (8 tests) 42ms
629
+ ✓  node  test/proxy.localization.test.ts (5 tests) 36ms
630
+ ✓  node  test/components/account/orders/getDeliveryOptionLabel.test.ts (21 tests) 4ms
628
631
  ✓  node  test/sdk/graphql/retryPolicy.test.ts (18 tests) 13ms
629
- ✓  node  test/server/cms/myAccountDefaultSections.test.ts (9 tests) 4ms
630
- ✓  node  test/utils/productJsonLdRendering.test.tsx (5 tests) 9ms
631
- ✓  node  test/utils/trustedForwardedHost.test.ts (27 tests) 3ms
632
- ✓  node  test/sdk/analytics/useStartRecommendationSession.test.ts (6 tests) 23ms
633
- ✓  node  test/proxy.test.ts (4 tests) 11ms
634
- ✓  node  test/server/webops-api.test.ts (9 tests) 7ms
635
- ✓  node  test/sdk/orderEntry/useOrderFormItems.test.ts (7 tests) 18ms
636
- ✓  node  test/components/account/orders/StatusCard.test.ts (3 tests) 12ms
637
- ✓  node  test/server/index.test.ts (7 tests) 1131ms
638
- ✓ should handle options and execute  791ms
639
- ✓  node  test/sdk/localization/store-url.test.ts (4 tests) 3ms
632
+ ✓  node  test/server/cms/myAccountDefaultSections.test.ts (9 tests) 3ms
633
+ ✓  node  test/utils/productJsonLdRendering.test.tsx (5 tests) 8ms
634
+ ✓  node  test/utils/trustedForwardedHost.test.ts (27 tests) 5ms
635
+ ✓  node  test/sdk/analytics/useStartRecommendationSession.test.ts (6 tests) 26ms
636
+ ✓  node  test/proxy.test.ts (4 tests) 12ms
637
+ ✓  node  test/sdk/orderEntry/useOrderFormItems.test.ts (7 tests) 15ms
638
+ ✓  node  test/server/index.test.ts (7 tests) 844ms
639
+ ✓ should handle options and execute  490ms
640
+ ✓  node  test/server/webops-api.test.ts (9 tests) 13ms
641
+ ✓  node  test/components/account/orders/StatusCard.test.ts (3 tests) 17ms
640
642
  ✓  node  test/sdk/deliveryPromise/queries.test.ts (4 tests) 6ms
641
- ✓  node  test/sdk/cart/waitForSessionValidated.test.ts (5 tests) 6ms
642
- ✓  node  test/sdk/account/refreshToken.test.ts (5 tests) 5ms
643
- ✓  node  test/server/cms/global.test.ts (3 tests) 7ms
644
- ✓  node  test/sdk/deliveryPromise/provider.test.ts (11 tests) 4ms
645
- ✓  node  test/sdk/auth/useAuth.test.ts (5 tests) 12ms
646
- ✓  node  test/utils/getRequestHostname.test.ts (12 tests) 3ms
647
- ✓  node  test/components/account/Layout.test.tsx (6 tests) 44ms
648
- ✓  node  test/pages/api/preview.test.ts (2 tests) 6ms
643
+ ✓  node  test/sdk/localization/store-url.test.ts (4 tests) 2ms
644
+ ✓  node  test/sdk/cart/waitForSessionValidated.test.ts (5 tests) 7ms
645
+ ✓  node  test/sdk/account/refreshToken.test.ts (5 tests) 4ms
646
+ ✓  node  test/server/cms/global.test.ts (3 tests) 3ms
647
+ ✓  node  test/sdk/deliveryPromise/provider.test.ts (11 tests) 3ms
648
+ ✓  node  test/sdk/auth/useAuth.test.ts (5 tests) 20ms
649
+ ✓  node  test/utils/getRequestHostname.test.ts (12 tests) 4ms
650
+ ✓  node  test/components/account/Layout.test.tsx (6 tests) 38ms
649
651
  ✓  node  test/server/rootSpan.test.ts (4 tests) 24ms
650
- ✓  node  test/components/search/SearchInput.test.ts (6 tests) 5ms
652
+ ✓  node  test/pages/api/preview.test.ts (2 tests) 5ms
653
+ ✓  node  test/components/search/SearchInput.test.ts (6 tests) 4ms
651
654
  ✓  node  test/utils/validateSessionRefreshToken.test.ts (6 tests) 3ms
652
- ✓  node  test/sdk/recommendations/vrn.test.ts (5 tests) 2ms
653
- ✓  node  test/server/cms/index.test.ts (2 tests) 3ms
654
- ✓  node  test/components/region/useRegion.test.ts (1 test) 13ms
655
- ✓  node  test/utils/retry.test.ts (5 tests) 10ms
656
- ✓  node  test/sdk/account/getB2BSessionClaims.test.ts (4 tests) 2ms
655
+ ✓  node  test/sdk/recommendations/vrn.test.ts (5 tests) 3ms
656
+ ✓  node  test/utils/retry.test.ts (5 tests) 11ms
657
+ ✓  node  test/components/region/useRegion.test.ts (1 test) 14ms
658
+ ✓  node  test/sdk/account/getB2BSessionClaims.test.ts (4 tests) 3ms
657
659
  ✓  node  test/utils/userOrderStatus.test.ts (4 tests) 2ms
658
- ✓  node  test/sdk/recommendations/useRecommendationUserId.test.ts (4 tests) 178ms
659
- ✓  node  test/utils/unlockResponse.test.ts (11 tests) 4ms
660
+ ✓  node  test/sdk/recommendations/useRecommendationUserId.test.ts (4 tests) 174ms
661
+ ✓  node  test/utils/unlockResponse.test.ts (11 tests) 3ms
662
+ ✓  node  test/components/account/OrganizationDrawerBody.test.tsx (3 tests) 32ms
660
663
  ✓  node  test/sdk/recommendations/useRecommendations.test.ts (2 tests) 3ms
661
- ✓  node  test/components/account/OrganizationDrawerBody.test.tsx (3 tests) 31ms
662
664
  ✓  node  test/sdk/deliveryPromise/reducer.test.ts (2 tests) 2ms
665
+ ✓  node  test/components/quotes/MyAccountQuoteStatusBadge.test.tsx (4 tests) 23ms
663
666
  ✓  node  test/utils/isLocalHost.test.ts (7 tests) 3ms
664
- ✓  node  test/components/quotes/MyAccountQuoteStatusBadge.test.tsx (4 tests) 19ms
665
- ✓  node  test/sdk/session/toSessionInput.test.ts (3 tests) 3ms
667
+ ✓  node  test/sdk/session/toSessionInput.test.ts (3 tests) 2ms
666
668
  ✓  node  test/components/account/orders/getOrderTotalLabel.test.ts (6 tests) 2ms
667
669
  ✓  node  test/components/account/orders/listOrdersLabels.test.ts (2 tests) 2ms
668
670
  ✓  node  test/utils/getCookie.test.ts (4 tests) 3ms
669
- ✓  node  test/components/auth/ProfileChallenge.test.tsx (3 tests) 19ms
671
+ ✓  node  test/components/auth/ProfileChallenge.test.tsx (3 tests) 20ms
670
672
  ✓  node  test/sdk/session/isSignInAreaResolved.test.ts (3 tests) 2ms
671
673
  ✓  node  test/utils/filterChannel.test.ts (2 tests) 2ms
672
- ✓  node  test/sdk/analytics/utils.test.ts (2 tests) 2ms
674
+ ✓  node  test/sdk/analytics/utils.test.ts (2 tests) 3ms
673
675
  ✓  node  test/instrumentation.test.ts (3 tests) 3ms
674
676
  ✓  node  test/components/account/orders/orderDetailsLabels.test.ts (1 test) 2ms
675
677
  ✓  node  test/sdk/account/clearPersistedSessionState.test.ts (1 test) 6ms
676
678
 
677
-  Test Files  135 passed (135)
678
-  Tests  1077 passed (1077)
679
-  Start at  19:24:01
680
-  Duration  37.79s (transform 8.93s, setup 0ms, import 32.76s, tests 14.78s, environment 45.53s)
679
+  Test Files  136 passed (136)
680
+  Tests  1103 passed (1103)
681
+  Start at  20:07:11
682
+  Duration  37.55s (transform 10.06s, setup 0ms, import 32.77s, tests 14.13s, environment 44.95s)
681
683
 
package/CHANGELOG.md CHANGED
@@ -3,6 +3,14 @@
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
+ ## [4.10.1-dev.3](https://github.com/vtex/faststore/compare/v4.10.1-dev.2...v4.10.1-dev.3) (2026-10-27)
7
+
8
+ ### Bug Fixes
9
+
10
+ - **core:** address review feedback on CMS cache ([8cec85f](https://github.com/vtex/faststore/commit/8cec85f730643dc72914c8477e9021c7437d8921))
11
+ - **core:** cache global and single CMS content across page generations ([6f20530](https://github.com/vtex/faststore/commit/6f205308216be07cb567595ff5ed59f6a229d876))
12
+ - **core:** do not cache empty required CMS content ([21a2dd3](https://github.com/vtex/faststore/commit/21a2dd3a1379c5b60ea96003e0addd6173f2923e))
13
+
6
14
  ## [4.10.1-dev.2](https://github.com/vtex/faststore/compare/v4.10.1-dev.1...v4.10.1-dev.2) (2026-10-27)
7
15
 
8
16
  ### Bug Fixes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@faststore/core",
3
- "version": "4.10.1-dev.2",
3
+ "version": "4.10.1-dev.3",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -71,11 +71,11 @@
71
71
  "style-loader": "^3.3.1",
72
72
  "swr": "^2.2.5",
73
73
  "use-sync-external-store": "^1.6.0",
74
- "@faststore/api": "4.10.1-dev.2",
75
- "@faststore/diagnostics": "4.10.1-dev.2",
76
- "@faststore/ui": "4.10.1-dev.2",
77
- "@faststore/lighthouse": "4.10.1-dev.2",
78
- "@faststore/sdk": "4.10.1-dev.2"
74
+ "@faststore/diagnostics": "4.10.1-dev.3",
75
+ "@faststore/lighthouse": "4.10.1-dev.3",
76
+ "@faststore/sdk": "4.10.1-dev.3",
77
+ "@faststore/ui": "4.10.1-dev.3",
78
+ "@faststore/api": "4.10.1-dev.3"
79
79
  },
80
80
  "devDependencies": {
81
81
  "@cypress/code-coverage": "^3.12.1",
@@ -3,6 +3,7 @@ import ClientCMS from '@vtex/client-cms'
3
3
 
4
4
  import MultipleContentError from 'src/sdk/error/MultipleContentError'
5
5
  import { getStoreURL } from 'src/sdk/localization/useLocalizationConfig'
6
+ import { createPromiseCache } from 'src/server/content/promiseCache'
6
7
  import { sanitizeHost } from 'src/utils/utilities'
7
8
  import config from '../../../discovery.config'
8
9
 
@@ -79,16 +80,64 @@ export const clientCMS = new ClientCMS({
79
80
  host: sanitizeHost(new URL(getStoreURL()).origin),
80
81
  })
81
82
 
83
+ type CMSPageResult = { data: ContentData[] }
84
+
85
+ export const cmsPageCache = createPromiseCache<CMSPageResult>()
86
+
87
+ type GetCMSPageOptions = {
88
+ /**
89
+ * Reuse a document fetched by locator. Only safe when the locator does not
90
+ * come from a preview, since preview versions change between requests.
91
+ */
92
+ cache?: boolean
93
+ }
94
+
95
+ /**
96
+ * Listings by content type never carry preview data (previews always resolve
97
+ * to a locator), so they are shared across pages. Filtered listings depend on
98
+ * the page (e.g. landing page slug) and stay uncached.
99
+ */
82
100
  export const getCMSPage = async (
83
101
  options: Options,
84
- cmsClient: ClientCMS = clientCMS
85
- ) => {
102
+ cmsClient: ClientCMS = clientCMS,
103
+ { cache = false }: GetCMSPageOptions = {}
104
+ ): Promise<CMSPageResult> => {
105
+ const shareable = cmsClient === clientCMS
106
+
86
107
  if (isLocator(options)) {
87
- return await cmsClient
88
- .getCMSPage(options)
89
- .then((page) => ({ data: [page] }))
108
+ const fetchByLocator = () =>
109
+ cmsClient.getCMSPage(options).then((page) => ({ data: [page] }))
110
+
111
+ if (!cache || !shareable) {
112
+ return fetchByLocator()
113
+ }
114
+
115
+ const { contentType, documentId, versionId, releaseId } = options
116
+ return cmsPageCache.get(
117
+ JSON.stringify([
118
+ 'locator',
119
+ contentType,
120
+ documentId,
121
+ versionId,
122
+ releaseId,
123
+ ]),
124
+ fetchByLocator
125
+ )
126
+ }
127
+
128
+ if (options.filters || !shareable) {
129
+ return listCMSPages(options, cmsClient)
90
130
  }
91
131
 
132
+ return cmsPageCache.get(JSON.stringify(['list', options.contentType]), () =>
133
+ listCMSPages(options, cmsClient)
134
+ )
135
+ }
136
+
137
+ const listCMSPages = async (
138
+ options: Exclude<Options, Locator>,
139
+ cmsClient: ClientCMS
140
+ ): Promise<CMSPageResult> => {
92
141
  const pages = []
93
142
  const page = 1
94
143
  const perPage = 10
@@ -124,8 +173,11 @@ export const getCMSPage = async (
124
173
  return { data: pages }
125
174
  }
126
175
 
127
- export const getPage = async <T extends ContentData>(options: Options) => {
128
- const result = await getCMSPage(options)
176
+ export const getPage = async <T extends ContentData>(
177
+ options: Options,
178
+ getOptions?: GetCMSPageOptions
179
+ ) => {
180
+ const result = await getCMSPage(options, clientCMS, getOptions)
129
181
 
130
182
  const pages = result.data
131
183