@faststore/core 3.0.45 → 3.0.47

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 (247) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +25 -0
  3. package/.next/app-path-routes-manifest.json +1 -0
  4. package/.next/build-manifest.json +95 -90
  5. package/.next/cache/.tsbuildinfo +1 -1
  6. package/.next/cache/config.json +3 -3
  7. package/.next/cache/eslint/.cache_1gneedd +1 -1
  8. package/.next/cache/webpack/client-production/0.pack +0 -0
  9. package/.next/cache/webpack/client-production/index.pack +0 -0
  10. package/.next/cache/webpack/server-production/0.pack +0 -0
  11. package/.next/cache/webpack/server-production/index.pack +0 -0
  12. package/.next/next-minimal-server.js.nft.json +1 -1
  13. package/.next/next-server.js.nft.json +1 -1
  14. package/.next/prerender-manifest.js +1 -1
  15. package/.next/prerender-manifest.json +1 -1
  16. package/.next/react-loadable-manifest.json +17 -17
  17. package/.next/required-server-files.json +1 -1
  18. package/.next/routes-manifest.json +1 -1
  19. package/.next/server/app/_not-found.html +1 -0
  20. package/.next/server/app/_not-found.js +1 -0
  21. package/.next/server/app/_not-found.js.nft.json +1 -0
  22. package/.next/server/app/_not-found.meta +1 -0
  23. package/.next/server/app/_not-found.rsc +6 -0
  24. package/.next/server/app/_not-found_client-reference-manifest.js +1 -0
  25. package/.next/server/app/fs-next-update/page.js +1 -0
  26. package/.next/server/app/fs-next-update/page.js.nft.json +1 -0
  27. package/.next/server/app/fs-next-update/page_client-reference-manifest.js +1 -0
  28. package/.next/server/app/fs-next-update.html +1 -0
  29. package/.next/server/app/fs-next-update.meta +1 -0
  30. package/.next/server/app/fs-next-update.rsc +6 -0
  31. package/.next/server/app-paths-manifest.json +4 -0
  32. package/.next/server/chunks/1408.js +1 -0
  33. package/.next/server/chunks/1488.js +9 -0
  34. package/.next/server/chunks/2053.js +8 -0
  35. package/.next/server/chunks/3057.js +1 -0
  36. package/.next/server/chunks/3068.js +1 -0
  37. package/.next/server/chunks/3131.js +1 -0
  38. package/.next/server/chunks/3404.js +1 -0
  39. package/.next/server/chunks/3607.js +1 -0
  40. package/.next/server/chunks/368.js +1 -0
  41. package/.next/server/chunks/3779.js +1 -0
  42. package/.next/server/chunks/3992.js +1 -0
  43. package/.next/server/chunks/4222.js +1 -0
  44. package/.next/server/chunks/466.js +1 -0
  45. package/.next/server/chunks/513.js +1 -0
  46. package/.next/server/chunks/522.js +1 -0
  47. package/.next/server/chunks/5640.js +6 -0
  48. package/.next/server/chunks/5686.js +1 -0
  49. package/.next/server/chunks/6090.js +1 -0
  50. package/.next/server/chunks/6414.js +1 -0
  51. package/.next/server/chunks/647.js +296 -0
  52. package/.next/server/chunks/6535.js +1 -0
  53. package/.next/server/chunks/6693.js +1 -0
  54. package/.next/server/chunks/{859.js → 6859.js} +2 -2
  55. package/.next/server/chunks/692.js +1 -0
  56. package/.next/server/chunks/7143.js +1 -0
  57. package/.next/server/chunks/7982.js +1 -0
  58. package/.next/server/chunks/8352.js +1 -0
  59. package/.next/server/chunks/8609.js +1 -0
  60. package/.next/server/chunks/8653.js +1 -0
  61. package/.next/server/chunks/8811.js +1 -0
  62. package/.next/server/chunks/9134.js +1 -0
  63. package/.next/server/chunks/9239.js +1 -0
  64. package/.next/server/chunks/9740.js +1 -0
  65. package/.next/server/middleware-build-manifest.js +1 -1
  66. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  67. package/.next/server/pages/404.html +1 -0
  68. package/.next/server/pages/404.js +1 -1
  69. package/.next/server/pages/404.js.nft.json +1 -1
  70. package/.next/server/pages/500.js +1 -1
  71. package/.next/server/pages/500.js.nft.json +1 -1
  72. package/.next/server/pages/[...slug].js +1 -1
  73. package/.next/server/pages/[...slug].js.nft.json +1 -1
  74. package/.next/server/pages/[slug]/p.js +1 -1
  75. package/.next/server/pages/[slug]/p.js.nft.json +1 -1
  76. package/.next/server/pages/_app.js +1 -1
  77. package/.next/server/pages/_app.js.nft.json +1 -1
  78. package/.next/server/pages/_document.js +1 -1
  79. package/.next/server/pages/_document.js.nft.json +1 -1
  80. package/.next/server/pages/_error.js +1 -1
  81. package/.next/server/pages/_error.js.nft.json +1 -1
  82. package/.next/server/pages/account.js +1 -1
  83. package/.next/server/pages/account.js.nft.json +1 -1
  84. package/.next/server/pages/api/graphql.js +1 -1
  85. package/.next/server/pages/api/graphql.js.nft.json +1 -1
  86. package/.next/server/pages/api/health/live.js +1 -1
  87. package/.next/server/pages/api/health/live.js.nft.json +1 -1
  88. package/.next/server/pages/api/health/ready.js +1 -1
  89. package/.next/server/pages/api/health/ready.js.nft.json +1 -1
  90. package/.next/server/pages/api/preview.js +1 -1
  91. package/.next/server/pages/api/preview.js.nft.json +1 -1
  92. package/.next/server/pages/checkout.js +1 -1
  93. package/.next/server/pages/checkout.js.nft.json +1 -1
  94. package/.next/server/pages/en-US/404.html +2 -2
  95. package/.next/server/pages/en-US/404.json +1 -1
  96. package/.next/server/pages/en-US/500.html +2 -2
  97. package/.next/server/pages/en-US/500.json +1 -1
  98. package/.next/server/pages/en-US/account.html +2 -2
  99. package/.next/server/pages/en-US/account.json +1 -1
  100. package/.next/server/pages/en-US/checkout.html +2 -2
  101. package/.next/server/pages/en-US/checkout.json +1 -1
  102. package/.next/server/pages/en-US/login.html +2 -2
  103. package/.next/server/pages/en-US/login.json +1 -1
  104. package/.next/server/pages/en-US/s.html +2 -2
  105. package/.next/server/pages/en-US/s.json +1 -1
  106. package/.next/server/pages/en-US.html +2 -2
  107. package/.next/server/pages/en-US.json +1 -1
  108. package/.next/server/pages/index.js +1 -1
  109. package/.next/server/pages/index.js.nft.json +1 -1
  110. package/.next/server/pages/login.js +1 -1
  111. package/.next/server/pages/login.js.nft.json +1 -1
  112. package/.next/server/pages/s.js +1 -1
  113. package/.next/server/pages/s.js.nft.json +1 -1
  114. package/.next/server/pages-manifest.json +1 -1
  115. package/.next/server/server-reference-manifest.js +1 -0
  116. package/.next/server/server-reference-manifest.json +1 -0
  117. package/.next/server/webpack-api-runtime.js +1 -1
  118. package/.next/server/webpack-runtime.js +1 -1
  119. package/.next/static/chunks/{484.b82b73b1d8c37e02.js → 119.e218828b0132b8b2.js} +1 -1
  120. package/.next/static/chunks/{857.d2299cfe995af21d.js → 319.8d30e9ffafb22a7b.js} +1 -1
  121. package/.next/static/chunks/346-94f30a4bb6dafd89.js +1 -0
  122. package/.next/static/chunks/439.db1fe827fd6839bb.js +1 -0
  123. package/.next/static/chunks/461.74f76bc649cb0446.js +1 -0
  124. package/.next/static/chunks/503-e6db8cab6eb3bf60.js +25 -0
  125. package/.next/static/chunks/{540.6c62d2536d42a1e0.js → 515.e66ca5426460f9b5.js} +1 -1
  126. package/.next/static/chunks/551-448d32b3b6393825.js +1 -0
  127. package/.next/static/chunks/{575-853fb8b1ba4ce8c4.js → 575-cdcaf62ab25bbfca.js} +1 -1
  128. package/.next/static/chunks/{202.c7d8a71173edecfb.js → 576.bd044c1cd3af7bbc.js} +1 -1
  129. package/.next/static/chunks/{217.01bc0ad07edd6f1b.js → 641.e663ec37da787600.js} +1 -1
  130. package/.next/static/chunks/{758.3ca049c36b5ddd7d.js → 661.df439acd66dbae34.js} +1 -1
  131. package/.next/static/chunks/680.355e4fc032bd559f.js +1 -0
  132. package/.next/static/chunks/913-4af007b10d50c50f.js +1 -0
  133. package/.next/static/chunks/app/_not-found-3649108cdca52b21.js +1 -0
  134. package/.next/static/chunks/app/fs-next-update/page-9a2debb5dd829908.js +1 -0
  135. package/.next/static/chunks/app/layout-a5723c7cfcca3bdf.js +1 -0
  136. package/.next/static/chunks/fd9d1056-e4950b334bc218cf.js +9 -0
  137. package/.next/static/chunks/main-5e45f8a409e3ce1c.js +1 -0
  138. package/.next/static/chunks/main-app-7b31a9960d0fa675.js +1 -0
  139. package/.next/static/chunks/pages/{404-1334d11ab8467b3d.js → 404-2e174f10fe6712cd.js} +1 -1
  140. package/.next/static/chunks/pages/{500-449c5bd51f98423f.js → 500-52c42b827ed9693b.js} +1 -1
  141. package/.next/static/chunks/pages/[...slug]-91cd643a14638b90.js +1 -0
  142. package/.next/static/chunks/pages/[slug]/p-436d394ddc268573.js +1 -0
  143. package/.next/static/chunks/pages/{_app-ec0d2e833bd9cea0.js → _app-88eac41033b6a613.js} +2 -2
  144. package/.next/static/chunks/pages/{_error-fbf331a03642b495.js → _error-5a3e12f364a20272.js} +1 -1
  145. package/.next/static/chunks/pages/{account-dbc5c028225cd1ac.js → account-9e4bcc3ab5b88353.js} +1 -1
  146. package/.next/static/chunks/pages/{checkout-29ae2c37eaf172e1.js → checkout-7c95e252d2cbfd75.js} +1 -1
  147. package/.next/static/chunks/pages/index-d3008f576cb2fc9d.js +1 -0
  148. package/.next/static/chunks/pages/{login-c4d2c856008df5ac.js → login-7a53f93622c6fded.js} +1 -1
  149. package/.next/static/chunks/pages/s-4d4c0bb22d489fa2.js +1 -0
  150. package/.next/static/chunks/webpack-31f87692f808967d.js +1 -0
  151. package/.next/static/css/173705e880fb4eaf.css +1 -0
  152. package/.next/static/css/17e37eb991935d47.css +1 -0
  153. package/.next/static/css/185f3332f3d0db64.css +1 -0
  154. package/.next/static/css/25261a033e496803.css +1 -0
  155. package/.next/static/css/36f9392d58a1a958.css +1 -0
  156. package/.next/static/css/4ababb851a0d481b.css +1 -0
  157. package/.next/static/css/6ce7302d311d7d68.css +1 -0
  158. package/.next/static/css/d6562b2ce182bbef.css +1 -0
  159. package/.next/static/css/ec44b650be144ada.css +1 -0
  160. package/.next/static/css/ec840ce35f0cf5e0.css +1 -0
  161. package/.next/static/ieYDvu46hXTqDayv0izz5/_buildManifest.js +1 -0
  162. package/.next/trace +113 -91
  163. package/.next/types/app/fs-next-update/page.ts +71 -0
  164. package/.next/types/package.json +1 -0
  165. package/.turbo/turbo-build.log +38 -28
  166. package/.turbo/turbo-test.log +11 -11
  167. package/@generated/gql.ts +4 -4
  168. package/@generated/graphql.ts +15 -3
  169. package/@generated/persisted-documents.json +3 -3
  170. package/@generated/schema.graphql +2 -0
  171. package/api/index.ts +2 -0
  172. package/app/fs-next-update/page.tsx +3 -0
  173. package/app/layout.tsx +11 -0
  174. package/cms/faststore/sections.json +22 -0
  175. package/index.ts +1 -9
  176. package/next-env.d.ts +1 -0
  177. package/next.config.js +11 -0
  178. package/package.json +9 -9
  179. package/src/components/cart/CartItem/CartItem.tsx +4 -1
  180. package/src/components/cart/CartSidebar/CartSidebar.tsx +10 -1
  181. package/src/components/sections/ProductDetails/ProductDetails.tsx +7 -2
  182. package/src/components/templates/LandingPage/LandingPage.tsx +10 -1
  183. package/src/components/ui/ProductDetails/ProductDetailsSettings.tsx +7 -0
  184. package/src/customizations/src/dynamicContent/index.ts +16 -0
  185. package/src/experimental/index.ts +4 -0
  186. package/src/pages/[...slug].tsx +5 -0
  187. package/src/pages/index.tsx +18 -4
  188. package/src/sdk/cart/index.ts +1 -0
  189. package/src/sdk/graphql/request.ts +3 -3
  190. package/src/sdk/overrides/PageProvider.tsx +19 -8
  191. package/src/utils/dynamicContent.ts +29 -0
  192. package/tsconfig.json +17 -2
  193. package/.next/server/chunks/119.js +0 -1
  194. package/.next/server/chunks/12.js +0 -1
  195. package/.next/server/chunks/187.js +0 -1
  196. package/.next/server/chunks/202.js +0 -1
  197. package/.next/server/chunks/24.js +0 -1
  198. package/.next/server/chunks/242.js +0 -1
  199. package/.next/server/chunks/247.js +0 -1
  200. package/.next/server/chunks/344.js +0 -1
  201. package/.next/server/chunks/404.js +0 -1
  202. package/.next/server/chunks/414.js +0 -1
  203. package/.next/server/chunks/484.js +0 -1
  204. package/.next/server/chunks/493.js +0 -1
  205. package/.next/server/chunks/498.js +0 -1
  206. package/.next/server/chunks/540.js +0 -1
  207. package/.next/server/chunks/57.js +0 -1
  208. package/.next/server/chunks/624.js +0 -1
  209. package/.next/server/chunks/640.js +0 -6
  210. package/.next/server/chunks/646.js +0 -292
  211. package/.next/server/chunks/659.js +0 -9
  212. package/.next/server/chunks/679.js +0 -1
  213. package/.next/server/chunks/693.js +0 -1
  214. package/.next/server/chunks/694.js +0 -1
  215. package/.next/server/chunks/779.js +0 -1
  216. package/.next/server/chunks/82.js +0 -8
  217. package/.next/server/chunks/857.js +0 -1
  218. package/.next/server/chunks/881.js +0 -1
  219. package/.next/server/chunks/917.js +0 -1
  220. package/.next/server/chunks/936.js +0 -1
  221. package/.next/server/chunks/96.js +0 -1
  222. package/.next/server/chunks/997.js +0 -1
  223. package/.next/static/4d-dhs4ERxMUlufFbhp1E/_buildManifest.js +0 -1
  224. package/.next/static/chunks/104-549e3a03338dbf15.js +0 -1
  225. package/.next/static/chunks/161-b39fe2f79ff7bc85.js +0 -1
  226. package/.next/static/chunks/247.6f1391104a867395.js +0 -1
  227. package/.next/static/chunks/624.455cdc0925956ae5.js +0 -1
  228. package/.next/static/chunks/629-751d31ac7c84f87d.js +0 -1
  229. package/.next/static/chunks/65.da22595d53beae76.js +0 -1
  230. package/.next/static/chunks/main-6f63f6746cc029db.js +0 -1
  231. package/.next/static/chunks/pages/[...slug]-bcaf61b01157d8cb.js +0 -1
  232. package/.next/static/chunks/pages/[slug]/p-7ac0f128969c3df8.js +0 -1
  233. package/.next/static/chunks/pages/index-cd109119d65df8e3.js +0 -1
  234. package/.next/static/chunks/pages/s-26e475975386c51a.js +0 -1
  235. package/.next/static/chunks/webpack-cb411fb5cc9a0449.js +0 -1
  236. package/.next/static/css/0d45c82d8887a269.css +0 -1
  237. package/.next/static/css/211c7542af66d8b4.css +0 -1
  238. package/.next/static/css/2980acad3f8e1028.css +0 -1
  239. package/.next/static/css/4c4d90eb8cb1d2b7.css +0 -1
  240. package/.next/static/css/96e3fddf695d6aa9.css +0 -1
  241. package/.next/static/css/b9d9ba1b04f3160d.css +0 -1
  242. package/.next/static/css/cff9aafa16fccc9c.css +0 -1
  243. package/.next/static/css/d586715f4f707df4.css +0 -1
  244. package/.next/static/css/d8b918e01478a2ed.css +0 -1
  245. package/.next/static/css/e32410b31c666cb2.css +0 -1
  246. /package/.next/static/chunks/{framework-8e279965036b6169.js → framework-21e9365486ba23a6.js} +0 -0
  247. /package/.next/static/{4d-dhs4ERxMUlufFbhp1E → ieYDvu46hXTqDayv0izz5}/_ssgManifest.js +0 -0
@@ -0,0 +1,71 @@
1
+ // File: /home/runner/work/faststore/faststore/packages/core/app/fs-next-update/page.tsx
2
+ import * as entry from '../../../../app/fs-next-update/page.js'
3
+ import type { ResolvingMetadata } from 'next/dist/lib/metadata/types/metadata-interface.js'
4
+
5
+ type TEntry = typeof import('../../../../app/fs-next-update/page.js')
6
+
7
+ // Check that the entry is a valid entry
8
+ checkFields<Diff<{
9
+ default: Function
10
+ config?: {}
11
+ generateStaticParams?: Function
12
+ revalidate?: RevalidateRange<TEntry> | false
13
+ dynamic?: 'auto' | 'force-dynamic' | 'error' | 'force-static'
14
+ dynamicParams?: boolean
15
+ fetchCache?: 'auto' | 'force-no-store' | 'only-no-store' | 'default-no-store' | 'default-cache' | 'only-cache' | 'force-cache'
16
+ preferredRegion?: 'auto' | 'global' | 'home' | string | string[]
17
+ runtime?: 'nodejs' | 'experimental-edge' | 'edge'
18
+ maxDuration?: number
19
+
20
+ metadata?: any
21
+ generateMetadata?: Function
22
+
23
+ }, TEntry, ''>>()
24
+
25
+ // Check the prop type of the entry function
26
+ checkFields<Diff<PageProps, FirstArg<TEntry['default']>, 'default'>>()
27
+
28
+ // Check the arguments and return type of the generateMetadata function
29
+ if ('generateMetadata' in entry) {
30
+ checkFields<Diff<PageProps, FirstArg<MaybeField<TEntry, 'generateMetadata'>>, 'generateMetadata'>>()
31
+ checkFields<Diff<ResolvingMetadata, SecondArg<MaybeField<TEntry, 'generateMetadata'>>, 'generateMetadata'>>()
32
+ }
33
+
34
+ // Check the arguments and return type of the generateStaticParams function
35
+ if ('generateStaticParams' in entry) {
36
+ checkFields<Diff<{ params: PageParams }, FirstArg<MaybeField<TEntry, 'generateStaticParams'>>, 'generateStaticParams'>>()
37
+ checkFields<Diff<{ __tag__: 'generateStaticParams', __return_type__: any[] | Promise<any[]> }, { __tag__: 'generateStaticParams', __return_type__: ReturnType<MaybeField<TEntry, 'generateStaticParams'>> }>>()
38
+ }
39
+
40
+ type PageParams = any
41
+ export interface PageProps {
42
+ params?: any
43
+ searchParams?: any
44
+ }
45
+ export interface LayoutProps {
46
+ children?: React.ReactNode
47
+
48
+ params?: any
49
+ }
50
+
51
+ // =============
52
+ // Utility types
53
+ type RevalidateRange<T> = T extends { revalidate: any } ? NonNegative<T['revalidate']> : never
54
+
55
+ // If T is unknown or any, it will be an empty {} type. Otherwise, it will be the same as Omit<T, keyof Base>.
56
+ type OmitWithTag<T, K extends keyof any, _M> = Omit<T, K>
57
+ type Diff<Base, T extends Base, Message extends string = ''> = 0 extends (1 & T) ? {} : OmitWithTag<T, keyof Base, Message>
58
+
59
+ type FirstArg<T extends Function> = T extends (...args: [infer T, any]) => any ? unknown extends T ? any : T : never
60
+ type SecondArg<T extends Function> = T extends (...args: [any, infer T]) => any ? unknown extends T ? any : T : never
61
+ type MaybeField<T, K extends string> = T extends { [k in K]: infer G } ? G extends Function ? G : never : never
62
+
63
+
64
+
65
+ function checkFields<_ extends { [k in keyof any]: never }>() {}
66
+
67
+ // https://github.com/sindresorhus/type-fest
68
+ type Numeric = number | bigint
69
+ type Zero = 0 | 0n
70
+ type Negative<T extends Numeric> = T extends Zero ? never : `${T}` extends `-${string}` ? T : never
71
+ type NonNegative<T extends Numeric> = T extends Zero ? T : Negative<T> extends never ? T : '__invalid_negative_number__'
@@ -0,0 +1 @@
1
+ {"type": "module"}
@@ -1,6 +1,6 @@
1
1
  $ yarn partytown & yarn generate && next build
2
- $ faststore generate-graphql -c
3
2
  $ partytown copylib ./public/~partytown
3
+ $ faststore generate-graphql -c
4
4
  Partytown lib copied to: /home/runner/work/faststore/faststore/packages/core/public/~partytown
5
5
  success - GraphQL schema, types, and optimizations successfully generated 🎉
6
6
  ⚠ No build cache found. Please configure build caching for faster rebuilds. Read more: https://nextjs.org/docs/messages/no-cache
@@ -9,10 +9,6 @@ This information is used to shape Next.js' roadmap and prioritize features.
9
9
  You can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL:
10
10
  https://nextjs.org/telemetry
11
11
 
12
- Browserslist: caniuse-lite is outdated. Please run:
13
- npx browserslist@latest --update-db
14
- Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating
15
- Linting and checking validity of types ...
16
12
  Browserslist: caniuse-lite is outdated. Please run:
17
13
  npx browserslist@latest --update-db
18
14
  Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating
@@ -23,38 +19,52 @@ Browserslist: caniuse-lite is outdated. Please run:
23
19
  npx update-browserslist-db@latest
24
20
  Why you should do it regularly: https://github.com/browserslist/update-db#readme
25
21
  ✓ Compiled successfully
22
+ Linting and checking validity of types ...
23
+ Browserslist: caniuse-lite is outdated. Please run:
24
+ npx browserslist@latest --update-db
25
+ Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating
26
26
  Collecting page data ...
27
- Generating static pages (0/7) ...
28
-
29
27
  Generating static pages (1/7)
30
-
31
28
  Generating static pages (3/7)
32
-
33
29
  Generating static pages (5/7)
34
-
35
30
  ✓ Generating static pages (7/7)
31
+ Generating static pages (0/9) ...
32
+
36
33
  Generating static pages (2/9)
34
+
37
35
  Generating static pages (4/9)
36
+ Warning: Dynamic Content not found for the page: home. Refer to the Dynamic Content documentation at https://developers.vtex.com/docs/guides/faststore/dynamic-content-overview for mapping the page and the corresponding data-fetching function.
37
+
38
38
  Generating static pages (6/9)
39
+
39
40
  ✓ Generating static pages (9/9)
40
41
  Finalizing page optimization ...
41
42
  Collecting build traces ...
42
43
 
44
+ Route (app) Size First Load JS
45
+ ┌ ○ /_not-found 875 B 83 kB
46
+ └ ○ /fs-next-update 142 B 82.3 kB
47
+ + First Load JS shared by all 82.1 kB
48
+ ├ chunks/503-e6db8cab6eb3bf60.js 28.4 kB
49
+ ├ chunks/fd9d1056-e4950b334bc218cf.js 51.1 kB
50
+ ├ chunks/main-app-7b31a9960d0fa675.js 232 B
51
+ └ chunks/webpack-31f87692f808967d.js 2.45 kB
52
+
43
53
  Route (pages) Size First Load JS
44
- ┌ ● / 3.36 kB 143 kB
45
- ├ └ css/d586715f4f707df4.css 6.56 kB
46
- ├ /_app 0 B 93.4 kB
47
- ├ ● /[...slug] 4.47 kB 156 kB
48
- ├ └ css/4c4d90eb8cb1d2b7.css 7 kB
49
- ├ ● /[slug]/p 11.2 kB 151 kB
50
- ├ └ css/96e3fddf695d6aa9.css 11.3 kB
54
+ ┌ ● / 3.39 kB 144 kB
55
+ ├ └ css/6ce7302d311d7d68.css 6.57 kB
56
+ ├ /_app 0 B 93.5 kB
57
+ ├ ● /[...slug] 4.5 kB 156 kB
58
+ ├ └ css/ec840ce35f0cf5e0.css 7.02 kB
59
+ ├ ● /[slug]/p 11.1 kB 151 kB
60
+ ├ └ css/36f9392d58a1a958.css 11.4 kB
51
61
  ├ ○ /404 1.47 kB 127 kB
52
62
  ├ ● /500 1.47 kB 127 kB
53
- ├ ● /account 676 B 126 kB
54
- ├ λ /api/graphql 0 B 93.4 kB
55
- ├ λ /api/health/live 0 B 93.4 kB
56
- ├ λ /api/health/ready 0 B 93.4 kB
57
- ├ λ /api/preview 0 B 93.4 kB
58
- ├ ● /checkout 662 B 126 kB
63
+ ├ ● /account 675 B 126 kB
64
+ ├ λ /api/graphql 0 B 93.5 kB
65
+ ├ λ /api/health/live 0 B 93.5 kB
66
+ ├ λ /api/health/ready 0 B 93.5 kB
67
+ ├ λ /api/preview 0 B 93.5 kB
68
+ ├ ● /checkout 660 B 126 kB
59
69
  ├ ● /login 1.58 kB 127 kB
60
- └ ● /s 4.66 kB 141 kB
70
+ └ ● /s 4.97 kB 141 kB
61
71
  + First Load JS shared by all 96.5 kB
62
- ├ chunks/framework-8e279965036b6169.js 45.4 kB
63
- ├ chunks/main-6f63f6746cc029db.js 33.1 kB
64
- ├ chunks/pages/_app-ec0d2e833bd9cea0.js 12.6 kB
65
- ├ chunks/webpack-cb411fb5cc9a0449.js 2.45 kB
72
+ ├ chunks/framework-21e9365486ba23a6.js 45.4 kB
73
+ ├ chunks/main-5e45f8a409e3ce1c.js 33.1 kB
74
+ ├ chunks/pages/_app-88eac41033b6a613.js 12.6 kB
75
+ ├ chunks/webpack-31f87692f808967d.js 2.45 kB
66
76
  └ css/5d1f64b61ea581f4.css 3.05 kB
67
77
 
68
78
  λ (Server) server-side renders at runtime (uses getInitialProps or getServerSideProps)
@@ -1,23 +1,23 @@
1
1
  $ jest
2
- PASS test/server/index.test.ts (27.363 s)
2
+ PASS test/server/index.test.ts (27.469 s)
3
3
  FastStore GraphQL Layer
4
4
  @faststore/api
5
- ✓ should return a valid GraphQL schema (9 ms)
6
- ✓ should return a valid GraphQL schema contain all expected types (6 ms)
7
- ✓ should return a valid GraphQL schema contain all expected queries (1 ms)
8
- ✓ should return a valid GraphQL schema contain all expected mutations (6 ms)
5
+ ✓ should return a valid GraphQL schema (13 ms)
6
+ ✓ should return a valid GraphQL schema contain all expected types (19 ms)
7
+ ✓ should return a valid GraphQL schema contain all expected queries (2 ms)
8
+ ✓ should return a valid GraphQL schema contain all expected mutations (1 ms)
9
9
  VTEX API Extension
10
- ✓ getTypeDefsFromFolder function should return an Array (10 ms)
10
+ ✓ getTypeDefsFromFolder function should return an Array (11 ms)
11
11
  Third Party API Extension
12
- ✓ getTypeDefsFromFolder function should return an Array (8 ms)
12
+ ✓ getTypeDefsFromFolder function should return an Array (9 ms)
13
13
  Final Schema after merging
14
- ✓ should return a valid merged GraphQL schema (34 ms)
14
+ ✓ should return a valid merged GraphQL schema (47 ms)
15
15
  Envelop
16
- ✓ should exist with its plugins (38 ms)
17
- ✓ should handle options and execute (490 ms)
16
+ ✓ should exist with its plugins (54 ms)
17
+ ✓ should handle options and execute (706 ms)
18
18
 
19
19
  Test Suites: 1 passed, 1 total
20
20
  Tests: 9 passed, 9 total
21
21
  Snapshots: 0 total
22
- Time: 27.481 s
22
+ Time: 27.645 s
23
23
  Ran all test suites.
package/@generated/gql.ts CHANGED
@@ -16,7 +16,7 @@ const documents = {
16
16
  types.ProductSummary_ProductFragmentDoc,
17
17
  '\n fragment Filter_facets on StoreFacet {\n ... on StoreFacetRange {\n key\n label\n\n min {\n selected\n absolute\n }\n\n max {\n selected\n absolute\n }\n\n __typename\n }\n ... on StoreFacetBoolean {\n key\n label\n values {\n label\n value\n selected\n quantity\n }\n\n __typename\n }\n }\n':
18
18
  types.Filter_FacetsFragmentDoc,
19
- '\n fragment ProductDetailsFragment_product on StoreProduct {\n id: productID\n sku\n name\n gtin\n description\n\n isVariantOf {\n name\n productGroupID\n skuVariants {\n activeVariations\n slugsMap\n availableVariations\n }\n }\n\n image {\n url\n alternateName\n }\n\n brand {\n name\n }\n\n offers {\n lowPrice\n offers {\n availability\n price\n listPrice\n seller {\n identifier\n }\n }\n }\n\n additionalProperty {\n propertyID\n name\n value\n valueReference\n }\n\n # Contains necessary info to add this item to cart\n ...CartProductItem\n }\n':
19
+ '\n fragment ProductDetailsFragment_product on StoreProduct {\n id: productID\n sku\n name\n gtin\n description\n unitMultiplier\n isVariantOf {\n name\n productGroupID\n skuVariants {\n activeVariations\n slugsMap\n availableVariations\n }\n }\n\n image {\n url\n alternateName\n }\n\n brand {\n name\n }\n\n offers {\n lowPrice\n offers {\n availability\n price\n listPrice\n seller {\n identifier\n }\n }\n }\n\n additionalProperty {\n propertyID\n name\n value\n valueReference\n }\n\n # Contains necessary info to add this item to cart\n ...CartProductItem\n }\n':
20
20
  types.ProductDetailsFragment_ProductFragmentDoc,
21
21
  '\n fragment ClientManyProducts on Query {\n search(\n first: $first\n after: $after\n sort: $sort\n term: $term\n selectedFacets: $selectedFacets\n ) {\n products {\n pageInfo {\n totalCount\n }\n }\n }\n }\n':
22
22
  types.ClientManyProductsFragmentDoc,
@@ -38,7 +38,7 @@ const documents = {
38
38
  types.ServerCollectionPageQueryDocument,
39
39
  '\n query ServerProductQuery($locator: [IStoreSelectedFacet!]!) {\n ...ServerProduct\n product(locator: $locator) {\n id: productID\n\n seo {\n title\n description\n canonical\n }\n\n brand {\n name\n }\n\n sku\n gtin\n name\n description\n releaseDate\n\n breadcrumbList {\n itemListElement {\n item\n name\n position\n }\n }\n\n image {\n url\n alternateName\n }\n\n offers {\n lowPrice\n highPrice\n priceCurrency\n offers {\n availability\n price\n priceValidUntil\n priceCurrency\n itemCondition\n seller {\n identifier\n }\n }\n }\n\n isVariantOf {\n productGroupID\n }\n\n ...ProductDetailsFragment_product\n }\n }\n':
40
40
  types.ServerProductQueryDocument,
41
- '\n mutation ValidateCartMutation($cart: IStoreCart!, $session: IStoreSession!) {\n validateCart(cart: $cart, session: $session) {\n order {\n orderNumber\n acceptedOffer {\n ...CartItem\n }\n }\n messages {\n ...CartMessage\n }\n }\n }\n\n fragment CartMessage on StoreCartMessage {\n text\n status\n }\n\n fragment CartItem on StoreOffer {\n seller {\n identifier\n }\n quantity\n price\n listPrice\n itemOffered {\n ...CartProductItem\n }\n }\n\n fragment CartProductItem on StoreProduct {\n sku\n name\n image {\n url\n alternateName\n }\n brand {\n name\n }\n isVariantOf {\n productGroupID\n name\n skuVariants {\n activeVariations\n slugsMap\n availableVariations\n }\n }\n gtin\n additionalProperty {\n propertyID\n name\n value\n valueReference\n }\n }\n':
41
+ '\n mutation ValidateCartMutation($cart: IStoreCart!, $session: IStoreSession!) {\n validateCart(cart: $cart, session: $session) {\n order {\n orderNumber\n acceptedOffer {\n ...CartItem\n }\n }\n messages {\n ...CartMessage\n }\n }\n }\n\n fragment CartMessage on StoreCartMessage {\n text\n status\n }\n\n fragment CartItem on StoreOffer {\n seller {\n identifier\n }\n quantity\n price\n listPrice\n itemOffered {\n ...CartProductItem\n }\n }\n\n fragment CartProductItem on StoreProduct {\n sku\n name\n unitMultiplier\n image {\n url\n alternateName\n }\n brand {\n name\n }\n isVariantOf {\n productGroupID\n name\n skuVariants {\n activeVariations\n slugsMap\n availableVariations\n }\n }\n gtin\n additionalProperty {\n propertyID\n name\n value\n valueReference\n }\n }\n':
42
42
  types.ValidateCartMutationDocument,
43
43
  '\n mutation SubscribeToNewsletter($data: IPersonNewsletter!) {\n subscribeToNewsletter(data: $data) {\n id\n }\n }\n':
44
44
  types.SubscribeToNewsletterDocument,
@@ -76,7 +76,7 @@ export function gql(
76
76
  * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
77
77
  */
78
78
  export function gql(
79
- source: '\n fragment ProductDetailsFragment_product on StoreProduct {\n id: productID\n sku\n name\n gtin\n description\n\n isVariantOf {\n name\n productGroupID\n skuVariants {\n activeVariations\n slugsMap\n availableVariations\n }\n }\n\n image {\n url\n alternateName\n }\n\n brand {\n name\n }\n\n offers {\n lowPrice\n offers {\n availability\n price\n listPrice\n seller {\n identifier\n }\n }\n }\n\n additionalProperty {\n propertyID\n name\n value\n valueReference\n }\n\n # Contains necessary info to add this item to cart\n ...CartProductItem\n }\n'
79
+ source: '\n fragment ProductDetailsFragment_product on StoreProduct {\n id: productID\n sku\n name\n gtin\n description\n unitMultiplier\n isVariantOf {\n name\n productGroupID\n skuVariants {\n activeVariations\n slugsMap\n availableVariations\n }\n }\n\n image {\n url\n alternateName\n }\n\n brand {\n name\n }\n\n offers {\n lowPrice\n offers {\n availability\n price\n listPrice\n seller {\n identifier\n }\n }\n }\n\n additionalProperty {\n propertyID\n name\n value\n valueReference\n }\n\n # Contains necessary info to add this item to cart\n ...CartProductItem\n }\n'
80
80
  ): typeof import('./graphql').ProductDetailsFragment_ProductFragmentDoc
81
81
  /**
82
82
  * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
@@ -142,7 +142,7 @@ export function gql(
142
142
  * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
143
143
  */
144
144
  export function gql(
145
- source: '\n mutation ValidateCartMutation($cart: IStoreCart!, $session: IStoreSession!) {\n validateCart(cart: $cart, session: $session) {\n order {\n orderNumber\n acceptedOffer {\n ...CartItem\n }\n }\n messages {\n ...CartMessage\n }\n }\n }\n\n fragment CartMessage on StoreCartMessage {\n text\n status\n }\n\n fragment CartItem on StoreOffer {\n seller {\n identifier\n }\n quantity\n price\n listPrice\n itemOffered {\n ...CartProductItem\n }\n }\n\n fragment CartProductItem on StoreProduct {\n sku\n name\n image {\n url\n alternateName\n }\n brand {\n name\n }\n isVariantOf {\n productGroupID\n name\n skuVariants {\n activeVariations\n slugsMap\n availableVariations\n }\n }\n gtin\n additionalProperty {\n propertyID\n name\n value\n valueReference\n }\n }\n'
145
+ source: '\n mutation ValidateCartMutation($cart: IStoreCart!, $session: IStoreSession!) {\n validateCart(cart: $cart, session: $session) {\n order {\n orderNumber\n acceptedOffer {\n ...CartItem\n }\n }\n messages {\n ...CartMessage\n }\n }\n }\n\n fragment CartMessage on StoreCartMessage {\n text\n status\n }\n\n fragment CartItem on StoreOffer {\n seller {\n identifier\n }\n quantity\n price\n listPrice\n itemOffered {\n ...CartProductItem\n }\n }\n\n fragment CartProductItem on StoreProduct {\n sku\n name\n unitMultiplier\n image {\n url\n alternateName\n }\n brand {\n name\n }\n isVariantOf {\n productGroupID\n name\n skuVariants {\n activeVariations\n slugsMap\n availableVariations\n }\n }\n gtin\n additionalProperty {\n propertyID\n name\n value\n valueReference\n }\n }\n'
146
146
  ): typeof import('./graphql').ValidateCartMutationDocument
147
147
  /**
148
148
  * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
@@ -927,6 +927,8 @@ export type StoreProduct = {
927
927
  sku: Scalars['String']['output']
928
928
  /** Corresponding collection URL slug, with which to retrieve this entity. */
929
929
  slug: Scalars['String']['output']
930
+ /** Sku Unit Multiplier */
931
+ unitMultiplier: Maybe<Scalars['Float']['output']>
930
932
  }
931
933
 
932
934
  /** Product information. Products are variants within product groups, equivalent to VTEX [SKUs](https://help.vtex.com/en/tutorial/what-is-an-sku--1K75s4RXAQyOuGUYKMM68u#). For example, you may have a **Shirt** product group with associated products such as **Blue shirt size L**, **Green shirt size XL** and so on. */
@@ -1146,6 +1148,7 @@ export type ProductDetailsFragment_ProductFragment = {
1146
1148
  name: string
1147
1149
  gtin: string
1148
1150
  description: string
1151
+ unitMultiplier: number | null
1149
1152
  id: string
1150
1153
  isVariantOf: {
1151
1154
  name: string
@@ -1227,6 +1230,7 @@ export type ServerProductQueryQuery = {
1227
1230
  name: string
1228
1231
  description: string
1229
1232
  releaseDate: string
1233
+ unitMultiplier: number | null
1230
1234
  id: string
1231
1235
  seo: { title: string; description: string; canonical: string }
1232
1236
  brand: { name: string }
@@ -1283,6 +1287,7 @@ export type ValidateCartMutationMutation = {
1283
1287
  itemOffered: {
1284
1288
  sku: string
1285
1289
  name: string
1290
+ unitMultiplier: number | null
1286
1291
  gtin: string
1287
1292
  image: Array<{ url: string; alternateName: string }>
1288
1293
  brand: { name: string }
@@ -1318,6 +1323,7 @@ export type CartItemFragment = {
1318
1323
  itemOffered: {
1319
1324
  sku: string
1320
1325
  name: string
1326
+ unitMultiplier: number | null
1321
1327
  gtin: string
1322
1328
  image: Array<{ url: string; alternateName: string }>
1323
1329
  brand: { name: string }
@@ -1342,6 +1348,7 @@ export type CartItemFragment = {
1342
1348
  export type CartProductItemFragment = {
1343
1349
  sku: string
1344
1350
  name: string
1351
+ unitMultiplier: number | null
1345
1352
  gtin: string
1346
1353
  image: Array<{ url: string; alternateName: string }>
1347
1354
  brand: { name: string }
@@ -1469,6 +1476,7 @@ export type ClientProductQueryQuery = {
1469
1476
  name: string
1470
1477
  gtin: string
1471
1478
  description: string
1479
+ unitMultiplier: number | null
1472
1480
  id: string
1473
1481
  isVariantOf: {
1474
1482
  name: string
@@ -1705,6 +1713,7 @@ export const CartProductItemFragmentDoc = new TypedDocumentString(
1705
1713
  fragment CartProductItem on StoreProduct {
1706
1714
  sku
1707
1715
  name
1716
+ unitMultiplier
1708
1717
  image {
1709
1718
  url
1710
1719
  alternateName
@@ -1741,6 +1750,7 @@ export const ProductDetailsFragment_ProductFragmentDoc =
1741
1750
  name
1742
1751
  gtin
1743
1752
  description
1753
+ unitMultiplier
1744
1754
  isVariantOf {
1745
1755
  name
1746
1756
  productGroupID
@@ -1779,6 +1789,7 @@ export const ProductDetailsFragment_ProductFragmentDoc =
1779
1789
  fragment CartProductItem on StoreProduct {
1780
1790
  sku
1781
1791
  name
1792
+ unitMultiplier
1782
1793
  image {
1783
1794
  url
1784
1795
  alternateName
@@ -1943,6 +1954,7 @@ export const CartItemFragmentDoc = new TypedDocumentString(
1943
1954
  fragment CartProductItem on StoreProduct {
1944
1955
  sku
1945
1956
  name
1957
+ unitMultiplier
1946
1958
  image {
1947
1959
  url
1948
1960
  alternateName
@@ -1991,7 +2003,7 @@ export const ServerCollectionPageQueryDocument = {
1991
2003
  export const ServerProductQueryDocument = {
1992
2004
  __meta__: {
1993
2005
  operationName: 'ServerProductQuery',
1994
- operationHash: '50155d908ff90781e8c56134ded29b70d7494aa7',
2006
+ operationHash: '3ce56e42296689b601347fedc380c89519355ab7',
1995
2007
  },
1996
2008
  } as unknown as TypedDocumentString<
1997
2009
  ServerProductQueryQuery,
@@ -2000,7 +2012,7 @@ export const ServerProductQueryDocument = {
2000
2012
  export const ValidateCartMutationDocument = {
2001
2013
  __meta__: {
2002
2014
  operationName: 'ValidateCartMutation',
2003
- operationHash: '87e1ba227013cb087bcbb35584c1b0b7cdf612ef',
2015
+ operationHash: '534fae829675533052d75fd4aa509b9cf85b4d40',
2004
2016
  },
2005
2017
  } as unknown as TypedDocumentString<
2006
2018
  ValidateCartMutationMutation,
@@ -2036,7 +2048,7 @@ export const ClientProductGalleryQueryDocument = {
2036
2048
  export const ClientProductQueryDocument = {
2037
2049
  __meta__: {
2038
2050
  operationName: 'ClientProductQuery',
2039
- operationHash: 'a35530c2f55c1c85bd2b4fe4964356ab27e32622',
2051
+ operationHash: 'cedeb0c3e7ec1678400fe2ae930f5a79382fba1e',
2040
2052
  },
2041
2053
  } as unknown as TypedDocumentString<
2042
2054
  ClientProductQueryQuery,
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "4b33c5c07f440dc7489e55619dc2211a13786e72": "fragment ServerCollectionPage on Query { collection(slug: $slug) { id } } query ServerCollectionPageQuery($slug: String!) { collection(slug: $slug) { breadcrumbList { itemListElement { item name position } } meta { selectedFacets { key value } } seo { description title } } ...ServerCollectionPage }",
3
- "50155d908ff90781e8c56134ded29b70d7494aa7": "fragment CartProductItem on StoreProduct { additionalProperty { name propertyID value valueReference } brand { name } gtin image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations availableVariations slugsMap } } name sku } fragment ProductDetailsFragment_product on StoreProduct { additionalProperty { name propertyID value valueReference } brand { name } description gtin image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations availableVariations slugsMap } } name offers { lowPrice offers { availability listPrice price seller { identifier } } } id: productID sku ...CartProductItem } fragment ServerProduct on Query { product(locator: $locator) { id: productID } } query ServerProductQuery($locator: [IStoreSelectedFacet!]!) { product(locator: $locator) { brand { name } breadcrumbList { itemListElement { item name position } } description gtin image { alternateName url } isVariantOf { productGroupID } name offers { highPrice lowPrice offers { availability itemCondition price priceCurrency priceValidUntil seller { identifier } } priceCurrency } id: productID releaseDate seo { canonical description title } sku ...ProductDetailsFragment_product } ...ServerProduct }",
4
- "87e1ba227013cb087bcbb35584c1b0b7cdf612ef": "fragment CartItem on StoreOffer { itemOffered { ...CartProductItem } listPrice price quantity seller { identifier } } fragment CartMessage on StoreCartMessage { status text } fragment CartProductItem on StoreProduct { additionalProperty { name propertyID value valueReference } brand { name } gtin image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations availableVariations slugsMap } } name sku } mutation ValidateCartMutation($cart: IStoreCart!, $session: IStoreSession!) { validateCart(cart: $cart, session: $session) { messages { ...CartMessage } order { acceptedOffer { ...CartItem } orderNumber } } }",
3
+ "3ce56e42296689b601347fedc380c89519355ab7": "fragment CartProductItem on StoreProduct { additionalProperty { name propertyID value valueReference } brand { name } gtin image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations availableVariations slugsMap } } name sku unitMultiplier } fragment ProductDetailsFragment_product on StoreProduct { additionalProperty { name propertyID value valueReference } brand { name } description gtin image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations availableVariations slugsMap } } name offers { lowPrice offers { availability listPrice price seller { identifier } } } id: productID sku unitMultiplier ...CartProductItem } fragment ServerProduct on Query { product(locator: $locator) { id: productID } } query ServerProductQuery($locator: [IStoreSelectedFacet!]!) { product(locator: $locator) { brand { name } breadcrumbList { itemListElement { item name position } } description gtin image { alternateName url } isVariantOf { productGroupID } name offers { highPrice lowPrice offers { availability itemCondition price priceCurrency priceValidUntil seller { identifier } } priceCurrency } id: productID releaseDate seo { canonical description title } sku ...ProductDetailsFragment_product } ...ServerProduct }",
4
+ "534fae829675533052d75fd4aa509b9cf85b4d40": "fragment CartItem on StoreOffer { itemOffered { ...CartProductItem } listPrice price quantity seller { identifier } } fragment CartMessage on StoreCartMessage { status text } fragment CartProductItem on StoreProduct { additionalProperty { name propertyID value valueReference } brand { name } gtin image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations availableVariations slugsMap } } name sku unitMultiplier } mutation ValidateCartMutation($cart: IStoreCart!, $session: IStoreSession!) { validateCart(cart: $cart, session: $session) { messages { ...CartMessage } order { acceptedOffer { ...CartItem } orderNumber } } }",
5
5
  "feb7005103a859e2bc8cf2360d568806fd88deba": "mutation SubscribeToNewsletter($data: IPersonNewsletter!) { subscribeToNewsletter(data: $data) { id } }",
6
6
  "c0d7d2ae1d5aaae5d50eea683b389377c36fb57d": "fragment ClientManyProducts on Query { search( first: $first after: $after sort: $sort term: $term selectedFacets: $selectedFacets ) { products { pageInfo { totalCount } } } } fragment ProductSummary_product on StoreProduct { additionalProperty { name propertyID value valueReference } brand { brandName: name } brand { name } gtin image { alternateName url } isVariantOf { name productGroupID } name offers { lowPrice offers { availability listPrice price quantity seller { identifier } } } id: productID sku slug } query ClientManyProductsQuery($after: String, $first: Int!, $selectedFacets: [IStoreSelectedFacet!]!, $sort: StoreSort!, $term: String!) { search( first: $first after: $after sort: $sort term: $term selectedFacets: $selectedFacets ) { products { edges { node { ...ProductSummary_product } } pageInfo { totalCount } } } ...ClientManyProducts }",
7
7
  "054742a6e1a39f1e09237dcec956879d964f3f20": "fragment ClientProductGallery on Query { search( first: $first after: $after sort: $sort term: $term selectedFacets: $selectedFacets ) { products { pageInfo { totalCount } } } } fragment Filter_facets on StoreFacet { ... on StoreFacetBoolean { __typename key label values { label quantity selected value } } ... on StoreFacetRange { __typename key label max { absolute selected } min { absolute selected } } } fragment SearchEvent_metadata on SearchMetadata { fuzzy isTermMisspelled logicalOperator } query ClientProductGalleryQuery($after: String!, $first: Int!, $selectedFacets: [IStoreSelectedFacet!]!, $sort: StoreSort!, $term: String!) { search( first: $first after: $after sort: $sort term: $term selectedFacets: $selectedFacets ) { facets { ...Filter_facets } metadata { ...SearchEvent_metadata } products { pageInfo { totalCount } } } ...ClientProductGallery }",
8
- "a35530c2f55c1c85bd2b4fe4964356ab27e32622": "fragment CartProductItem on StoreProduct { additionalProperty { name propertyID value valueReference } brand { name } gtin image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations availableVariations slugsMap } } name sku } fragment ClientProduct on Query { product(locator: $locator) { id: productID } } fragment ProductDetailsFragment_product on StoreProduct { additionalProperty { name propertyID value valueReference } brand { name } description gtin image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations availableVariations slugsMap } } name offers { lowPrice offers { availability listPrice price seller { identifier } } } id: productID sku ...CartProductItem } query ClientProductQuery($locator: [IStoreSelectedFacet!]!) { product(locator: $locator) { ...ProductDetailsFragment_product } ...ClientProduct }",
8
+ "cedeb0c3e7ec1678400fe2ae930f5a79382fba1e": "fragment CartProductItem on StoreProduct { additionalProperty { name propertyID value valueReference } brand { name } gtin image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations availableVariations slugsMap } } name sku unitMultiplier } fragment ClientProduct on Query { product(locator: $locator) { id: productID } } fragment ProductDetailsFragment_product on StoreProduct { additionalProperty { name propertyID value valueReference } brand { name } description gtin image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations availableVariations slugsMap } } name offers { lowPrice offers { availability listPrice price seller { identifier } } } id: productID sku unitMultiplier ...CartProductItem } query ClientProductQuery($locator: [IStoreSelectedFacet!]!) { product(locator: $locator) { ...ProductDetailsFragment_product } ...ClientProduct }",
9
9
  "a8a27661f6a032e086c047339e0d0f180f0e0161": "fragment ClientSearchSuggestions on Query { search(first: 5, term: $term, selectedFacets: $selectedFacets) { suggestions { terms { value } } } } fragment ProductSummary_product on StoreProduct { additionalProperty { name propertyID value valueReference } brand { brandName: name } brand { name } gtin image { alternateName url } isVariantOf { name productGroupID } name offers { lowPrice offers { availability listPrice price quantity seller { identifier } } } id: productID sku slug } fragment SearchEvent_metadata on SearchMetadata { fuzzy isTermMisspelled logicalOperator } query ClientSearchSuggestionsQuery($selectedFacets: [IStoreSelectedFacet!], $term: String!) { search(first: 5, term: $term, selectedFacets: $selectedFacets) { metadata { ...SearchEvent_metadata } products { pageInfo { totalCount } } suggestions { products { ...ProductSummary_product } terms { value } } } ...ClientSearchSuggestions }",
10
10
  "e2385b0f11726d0068f96548f57a8dd441c064e3": "fragment ClientTopSearchSuggestions on Query { search(first: 5, term: $term, selectedFacets: $selectedFacets) { suggestions { terms { value } } } } query ClientTopSearchSuggestionsQuery($selectedFacets: [IStoreSelectedFacet!], $term: String!) { search(first: 5, term: $term, selectedFacets: $selectedFacets) { suggestions { terms { value } } } ...ClientTopSearchSuggestions }",
11
11
  "5696202828f9275216a445e316ebf516f168c506": "mutation ValidateSession($search: String!, $session: IStoreSession!) { validateSession(session: $session, search: $search) { addressType channel country currency { code symbol } deliveryMode { deliveryChannel deliveryMethod deliveryWindow { endDate startDate } } geoCoordinates { latitude longitude } locale person { email familyName givenName id } postalCode } }",
@@ -374,6 +374,8 @@ type StoreProduct {
374
374
  additionalProperty: [StorePropertyValue!]!
375
375
  """The product's release date. Formatted using https://en.wikipedia.org/wiki/ISO_8601"""
376
376
  releaseDate: String!
377
+ """Sku Unit Multiplier"""
378
+ unitMultiplier: Float
377
379
  }
378
380
 
379
381
  """Product input. Products are variants within product groups, equivalent to VTEX [SKUs](https://help.vtex.com/en/tutorial/what-is-an-sku--1K75s4RXAQyOuGUYKMM68u#). For example, you may have a **Shirt** product group with associated products such as **Blue shirt size L**, **Green shirt size XL** and so on."""
package/api/index.ts CHANGED
@@ -13,3 +13,5 @@ export type {
13
13
  StoreProductRoot,
14
14
  StoreOrganizationRoot,
15
15
  } from '@faststore/api'
16
+
17
+ export * from '../@generated/graphql'
@@ -0,0 +1,3 @@
1
+ export default function Page() {
2
+ return <div>placeholder</div>
3
+ }
package/app/layout.tsx ADDED
@@ -0,0 +1,11 @@
1
+ export default function RootLayout({
2
+ children,
3
+ }: {
4
+ children: React.ReactNode
5
+ }) {
6
+ return (
7
+ <html lang="en">
8
+ <body>{children}</body>
9
+ </html>
10
+ )
11
+ }
@@ -1538,6 +1538,17 @@
1538
1538
  "default": "Description"
1539
1539
  }
1540
1540
  }
1541
+ },
1542
+ "quantitySelector": {
1543
+ "title": "Quantity Selector",
1544
+ "type": "object",
1545
+ "properties": {
1546
+ "useUnitMultiplier": {
1547
+ "title": "Should use unit multiplier?",
1548
+ "type": "boolean",
1549
+ "default": false
1550
+ }
1551
+ }
1541
1552
  }
1542
1553
  }
1543
1554
  }
@@ -1831,6 +1842,17 @@
1831
1842
  }
1832
1843
  }
1833
1844
  }
1845
+ },
1846
+ "quantitySelector": {
1847
+ "title": "Quantity Selector",
1848
+ "type": "object",
1849
+ "properties": {
1850
+ "useUnitMultiplier": {
1851
+ "title": "Should use unit multiplier?",
1852
+ "type": "boolean",
1853
+ "default": false
1854
+ }
1855
+ }
1834
1856
  }
1835
1857
  }
1836
1858
  }
package/index.ts CHANGED
@@ -1,12 +1,4 @@
1
- export {
2
- usePage,
3
- usePDP,
4
- usePLP,
5
- useSearchPage,
6
- isPDP,
7
- isPLP,
8
- isSearchPage,
9
- } from './src/sdk/overrides/PageProvider'
1
+ export * from './src/sdk/overrides/PageProvider'
10
2
 
11
3
  export type {
12
4
  PDPContext,
package/next-env.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  /// <reference types="next" />
2
2
  /// <reference types="next/image-types/global" />
3
+ /// <reference types="next/navigation-types/compat/navigation" />
3
4
 
4
5
  // NOTE: This file should not be edited
5
6
  // see https://nextjs.org/docs/basic-features/typescript for more information.
package/next.config.js CHANGED
@@ -1,6 +1,7 @@
1
1
  // @ts-check
2
2
  const path = require('path')
3
3
  const storeConfig = require('./faststore.config')
4
+ const webpack = require('webpack')
4
5
 
5
6
  /**
6
7
  * @type {import('next').NextConfig}
@@ -40,6 +41,16 @@ const nextConfig = {
40
41
  }
41
42
  })
42
43
 
44
+ // Make css order works as expected in Next 13. See https://github.com/vercel/next.js/issues/51030#issuecomment-2005254907
45
+ config.plugins.push(
46
+ new webpack.BannerPlugin({
47
+ banner: '@layer base, components, theme;',
48
+ test: /\.css$/,
49
+ raw: true,
50
+ entryOnly: false,
51
+ })
52
+ )
53
+
43
54
  // Reduce the number of chunks so we ship a smaller first bundle.
44
55
  // This should help reducing TBT
45
56
  if (!isServer && !dev && config.optimization?.splitChunks) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@faststore/core",
3
- "version": "3.0.45",
3
+ "version": "3.0.47",
4
4
  "license": "MIT",
5
5
  "repository": "vtex/faststore",
6
6
  "browserslist": "supports es6-module and not dead",
@@ -39,11 +39,11 @@
39
39
  "@envelop/graphql-jit": "^1.1.1",
40
40
  "@envelop/parser-cache": "^2.2.0",
41
41
  "@envelop/validation-cache": "^2.2.0",
42
- "@faststore/api": "^3.0.44",
43
- "@faststore/components": "^3.0.44",
44
- "@faststore/graphql-utils": "^3.0.43",
45
- "@faststore/sdk": "^3.0.43",
46
- "@faststore/ui": "^3.0.45",
42
+ "@faststore/api": "^3.0.47",
43
+ "@faststore/components": "^3.0.47",
44
+ "@faststore/graphql-utils": "^3.0.47",
45
+ "@faststore/sdk": "^3.0.47",
46
+ "@faststore/ui": "^3.0.47",
47
47
  "@graphql-codegen/cli": "^3.3.1",
48
48
  "@graphql-codegen/client-preset": "^4.1.0",
49
49
  "@graphql-codegen/typescript": "^3.0.4",
@@ -82,8 +82,8 @@
82
82
  "devDependencies": {
83
83
  "@cypress/code-coverage": "^3.12.1",
84
84
  "@envelop/testing": "^6.0.0",
85
- "@faststore/cli": "^3.0.43",
86
- "@faststore/eslint-config": "^3.0.43",
85
+ "@faststore/cli": "^3.0.47",
86
+ "@faststore/eslint-config": "^3.0.47",
87
87
  "@faststore/lighthouse": "^1.12.32",
88
88
  "@lhci/cli": "^0.9.0",
89
89
  "@testing-library/cypress": "^10.0.1",
@@ -124,5 +124,5 @@
124
124
  "node": "18.19.0",
125
125
  "yarn": "1.19.1"
126
126
  },
127
- "gitHead": "1e25e0e810fa378c888e3f16508b94c6e9c0805a"
127
+ "gitHead": "bdb7b6cc92d39717ab8f583586859f5d34b85f16"
128
128
  }
@@ -62,9 +62,10 @@ function useCartItemEvent() {
62
62
 
63
63
  interface Props {
64
64
  item: ICartItem
65
+ useUnitMultiplier: boolean
65
66
  }
66
67
 
67
- function CartItem({ item }: Props) {
68
+ function CartItem({ item, useUnitMultiplier = false }: Props) {
68
69
  const btnProps = useRemoveButton(item)
69
70
 
70
71
  const { sendCartItemEvent } = useCartItemEvent()
@@ -97,6 +98,8 @@ function CartItem({ item }: Props) {
97
98
  removeBtnProps={btnProps}
98
99
  data-sku={item.itemOffered.sku}
99
100
  data-seller={item.seller.identifier}
101
+ unitMultiplier={item.itemOffered.unitMultiplier}
102
+ useUnitMultiplier={useUnitMultiplier}
100
103
  >
101
104
  <UICartItemImage>
102
105
  <Image
@@ -69,6 +69,9 @@ export interface CartSidebarProps {
69
69
  alt: string
70
70
  }
71
71
  }
72
+ quantitySelector: {
73
+ useUnitMultiplier?: boolean
74
+ }
72
75
  }
73
76
 
74
77
  function CartSidebar({
@@ -82,6 +85,7 @@ function CartSidebar({
82
85
  loadingLabel: checkoutLoadingLabel,
83
86
  icon: { icon: checkoutButtonIcon, alt: checkoutButtonIconAlt },
84
87
  },
88
+ quantitySelector,
85
89
  }: CartSidebarProps) {
86
90
  const btnProps = useCheckoutButton()
87
91
  const { items, gifts, totalItems, isValidating, subTotal, total } = useCart()
@@ -120,7 +124,12 @@ function CartSidebar({
120
124
  <UICartSidebarList>
121
125
  {items.map((item) => (
122
126
  <li key={item.id}>
123
- <CartItem item={item} />
127
+ <CartItem
128
+ item={item}
129
+ useUnitMultiplier={
130
+ quantitySelector?.useUnitMultiplier ?? false
131
+ }
132
+ />
124
133
  </li>
125
134
  ))}
126
135
  {gifts.length > 0 && (