medusa-storefront-data 2.5.7 → 2.5.8

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 (294) hide show
  1. package/HOMEPAGE_CONFIG.md +23 -1
  2. package/package.json +3 -2
  3. package/src/server/dynamic-config.ts +5 -4
  4. package/src/server/page-input.ts +94 -5
  5. package/dist/segment-data/default-page-input.json +0 -191
  6. package/dist/src/config.d.ts +0 -3
  7. package/dist/src/config.d.ts.map +0 -1
  8. package/dist/src/config.js +0 -31
  9. package/dist/src/cookies.d.ts +0 -23
  10. package/dist/src/cookies.d.ts.map +0 -1
  11. package/dist/src/cookies.js +0 -140
  12. package/dist/src/dynamic-config-schema/index.d.ts +0 -103
  13. package/dist/src/dynamic-config-schema/index.d.ts.map +0 -1
  14. package/dist/src/dynamic-config-schema/index.js +0 -172
  15. package/dist/src/dynamic-config-schema/sections/about-brand.d.ts +0 -5
  16. package/dist/src/dynamic-config-schema/sections/about-brand.d.ts.map +0 -1
  17. package/dist/src/dynamic-config-schema/sections/about-brand.js +0 -30
  18. package/dist/src/dynamic-config-schema/sections/baptism-picks.d.ts +0 -5
  19. package/dist/src/dynamic-config-schema/sections/baptism-picks.d.ts.map +0 -1
  20. package/dist/src/dynamic-config-schema/sections/baptism-picks.js +0 -17
  21. package/dist/src/dynamic-config-schema/sections/baptism.d.ts +0 -5
  22. package/dist/src/dynamic-config-schema/sections/baptism.d.ts.map +0 -1
  23. package/dist/src/dynamic-config-schema/sections/baptism.js +0 -4
  24. package/dist/src/dynamic-config-schema/sections/blog-posts.d.ts +0 -5
  25. package/dist/src/dynamic-config-schema/sections/blog-posts.d.ts.map +0 -1
  26. package/dist/src/dynamic-config-schema/sections/blog-posts.js +0 -31
  27. package/dist/src/dynamic-config-schema/sections/brand-marquee.d.ts +0 -5
  28. package/dist/src/dynamic-config-schema/sections/brand-marquee.d.ts.map +0 -1
  29. package/dist/src/dynamic-config-schema/sections/brand-marquee.js +0 -9
  30. package/dist/src/dynamic-config-schema/sections/brand-pillars.d.ts +0 -5
  31. package/dist/src/dynamic-config-schema/sections/brand-pillars.d.ts.map +0 -1
  32. package/dist/src/dynamic-config-schema/sections/brand-pillars.js +0 -29
  33. package/dist/src/dynamic-config-schema/sections/category-pills.d.ts +0 -5
  34. package/dist/src/dynamic-config-schema/sections/category-pills.d.ts.map +0 -1
  35. package/dist/src/dynamic-config-schema/sections/category-pills.js +0 -4
  36. package/dist/src/dynamic-config-schema/sections/celebrity-trust.d.ts +0 -5
  37. package/dist/src/dynamic-config-schema/sections/celebrity-trust.d.ts.map +0 -1
  38. package/dist/src/dynamic-config-schema/sections/celebrity-trust.js +0 -4
  39. package/dist/src/dynamic-config-schema/sections/features.d.ts +0 -5
  40. package/dist/src/dynamic-config-schema/sections/features.d.ts.map +0 -1
  41. package/dist/src/dynamic-config-schema/sections/features.js +0 -12
  42. package/dist/src/dynamic-config-schema/sections/hero.d.ts +0 -6
  43. package/dist/src/dynamic-config-schema/sections/hero.d.ts.map +0 -1
  44. package/dist/src/dynamic-config-schema/sections/hero.js +0 -9
  45. package/dist/src/dynamic-config-schema/sections/index.d.ts +0 -24
  46. package/dist/src/dynamic-config-schema/sections/index.d.ts.map +0 -1
  47. package/dist/src/dynamic-config-schema/sections/index.js +0 -23
  48. package/dist/src/dynamic-config-schema/sections/instagram-posts.d.ts +0 -5
  49. package/dist/src/dynamic-config-schema/sections/instagram-posts.d.ts.map +0 -1
  50. package/dist/src/dynamic-config-schema/sections/instagram-posts.js +0 -30
  51. package/dist/src/dynamic-config-schema/sections/loved-by-moms.d.ts +0 -5
  52. package/dist/src/dynamic-config-schema/sections/loved-by-moms.d.ts.map +0 -1
  53. package/dist/src/dynamic-config-schema/sections/loved-by-moms.js +0 -4
  54. package/dist/src/dynamic-config-schema/sections/luxe-favourites.d.ts +0 -5
  55. package/dist/src/dynamic-config-schema/sections/luxe-favourites.d.ts.map +0 -1
  56. package/dist/src/dynamic-config-schema/sections/luxe-favourites.js +0 -4
  57. package/dist/src/dynamic-config-schema/sections/new-arrivals-classic.d.ts +0 -5
  58. package/dist/src/dynamic-config-schema/sections/new-arrivals-classic.d.ts.map +0 -1
  59. package/dist/src/dynamic-config-schema/sections/new-arrivals-classic.js +0 -12
  60. package/dist/src/dynamic-config-schema/sections/new-arrivals.d.ts +0 -5
  61. package/dist/src/dynamic-config-schema/sections/new-arrivals.d.ts.map +0 -1
  62. package/dist/src/dynamic-config-schema/sections/new-arrivals.js +0 -12
  63. package/dist/src/dynamic-config-schema/sections/promo-announcements.d.ts +0 -5
  64. package/dist/src/dynamic-config-schema/sections/promo-announcements.d.ts.map +0 -1
  65. package/dist/src/dynamic-config-schema/sections/promo-announcements.js +0 -16
  66. package/dist/src/dynamic-config-schema/sections/promo-countdown.d.ts +0 -5
  67. package/dist/src/dynamic-config-schema/sections/promo-countdown.d.ts.map +0 -1
  68. package/dist/src/dynamic-config-schema/sections/promo-countdown.js +0 -16
  69. package/dist/src/dynamic-config-schema/sections/shop-by-age.d.ts +0 -5
  70. package/dist/src/dynamic-config-schema/sections/shop-by-age.d.ts.map +0 -1
  71. package/dist/src/dynamic-config-schema/sections/shop-by-age.js +0 -4
  72. package/dist/src/dynamic-config-schema/sections/shop-by-category.d.ts +0 -5
  73. package/dist/src/dynamic-config-schema/sections/shop-by-category.d.ts.map +0 -1
  74. package/dist/src/dynamic-config-schema/sections/shop-by-category.js +0 -4
  75. package/dist/src/dynamic-config-schema/sections/testimonials.d.ts +0 -5
  76. package/dist/src/dynamic-config-schema/sections/testimonials.d.ts.map +0 -1
  77. package/dist/src/dynamic-config-schema/sections/testimonials.js +0 -9
  78. package/dist/src/dynamic-config-schema/sections/theme-dresses.d.ts +0 -5
  79. package/dist/src/dynamic-config-schema/sections/theme-dresses.d.ts.map +0 -1
  80. package/dist/src/dynamic-config-schema/sections/theme-dresses.js +0 -4
  81. package/dist/src/dynamic-config-schema/sections/video-stories.d.ts +0 -5
  82. package/dist/src/dynamic-config-schema/sections/video-stories.d.ts.map +0 -1
  83. package/dist/src/dynamic-config-schema/sections/video-stories.js +0 -24
  84. package/dist/src/dynamic-config-schema/sections/why-choose-us.d.ts +0 -5
  85. package/dist/src/dynamic-config-schema/sections/why-choose-us.d.ts.map +0 -1
  86. package/dist/src/dynamic-config-schema/sections/why-choose-us.js +0 -9
  87. package/dist/src/dynamic-config-schema/shared.d.ts +0 -35
  88. package/dist/src/dynamic-config-schema/shared.d.ts.map +0 -1
  89. package/dist/src/dynamic-config-schema/shared.js +0 -99
  90. package/dist/src/dynamic-config-schema/site-configs.d.ts +0 -11
  91. package/dist/src/dynamic-config-schema/site-configs.d.ts.map +0 -1
  92. package/dist/src/dynamic-config-schema/site-configs.js +0 -70
  93. package/dist/src/edge.d.ts +0 -3
  94. package/dist/src/edge.d.ts.map +0 -1
  95. package/dist/src/edge.js +0 -1
  96. package/dist/src/middleware.d.ts +0 -3
  97. package/dist/src/middleware.d.ts.map +0 -1
  98. package/dist/src/middleware.js +0 -1
  99. package/dist/src/server/brand-pillars-from-categories.d.ts +0 -8
  100. package/dist/src/server/brand-pillars-from-categories.d.ts.map +0 -1
  101. package/dist/src/server/brand-pillars-from-categories.js +0 -92
  102. package/dist/src/server/cart.d.ts +0 -96
  103. package/dist/src/server/cart.d.ts.map +0 -1
  104. package/dist/src/server/cart.js +0 -797
  105. package/dist/src/server/categories.d.ts +0 -4
  106. package/dist/src/server/categories.d.ts.map +0 -1
  107. package/dist/src/server/categories.js +0 -34
  108. package/dist/src/server/collections.d.ts +0 -8
  109. package/dist/src/server/collections.d.ts.map +0 -1
  110. package/dist/src/server/collections.js +0 -39
  111. package/dist/src/server/config-merge.d.ts +0 -3
  112. package/dist/src/server/config-merge.d.ts.map +0 -1
  113. package/dist/src/server/config-merge.js +0 -31
  114. package/dist/src/server/contact.d.ts +0 -34
  115. package/dist/src/server/contact.d.ts.map +0 -1
  116. package/dist/src/server/contact.js +0 -57
  117. package/dist/src/server/customer-registration.d.ts +0 -142
  118. package/dist/src/server/customer-registration.d.ts.map +0 -1
  119. package/dist/src/server/customer-registration.js +0 -295
  120. package/dist/src/server/customer.d.ts +0 -48
  121. package/dist/src/server/customer.d.ts.map +0 -1
  122. package/dist/src/server/customer.js +0 -413
  123. package/dist/src/server/dynamic-config-api.d.ts +0 -11
  124. package/dist/src/server/dynamic-config-api.d.ts.map +0 -1
  125. package/dist/src/server/dynamic-config-api.js +0 -46
  126. package/dist/src/server/dynamic-config.d.ts +0 -186
  127. package/dist/src/server/dynamic-config.d.ts.map +0 -1
  128. package/dist/src/server/dynamic-config.js +0 -694
  129. package/dist/src/server/fulfillment.d.ts +0 -5
  130. package/dist/src/server/fulfillment.d.ts.map +0 -1
  131. package/dist/src/server/fulfillment.js +0 -47
  132. package/dist/src/server/guest.d.ts +0 -81
  133. package/dist/src/server/guest.d.ts.map +0 -1
  134. package/dist/src/server/guest.js +0 -183
  135. package/dist/src/server/help-faq-section-defaults.json +0 -92
  136. package/dist/src/server/help-sections/help-faq.d.ts +0 -11
  137. package/dist/src/server/help-sections/help-faq.d.ts.map +0 -1
  138. package/dist/src/server/help-sections/help-faq.js +0 -6
  139. package/dist/src/server/help-sections/index.d.ts +0 -2
  140. package/dist/src/server/help-sections/index.d.ts.map +0 -1
  141. package/dist/src/server/help-sections/index.js +0 -1
  142. package/dist/src/server/home-sections/about-brand.d.ts +0 -9
  143. package/dist/src/server/home-sections/about-brand.d.ts.map +0 -1
  144. package/dist/src/server/home-sections/about-brand.js +0 -9
  145. package/dist/src/server/home-sections/baptism-picks.d.ts +0 -10
  146. package/dist/src/server/home-sections/baptism-picks.d.ts.map +0 -1
  147. package/dist/src/server/home-sections/baptism-picks.js +0 -27
  148. package/dist/src/server/home-sections/baptism.d.ts +0 -13
  149. package/dist/src/server/home-sections/baptism.d.ts.map +0 -1
  150. package/dist/src/server/home-sections/baptism.js +0 -43
  151. package/dist/src/server/home-sections/blog-posts.d.ts +0 -9
  152. package/dist/src/server/home-sections/blog-posts.d.ts.map +0 -1
  153. package/dist/src/server/home-sections/blog-posts.js +0 -9
  154. package/dist/src/server/home-sections/brand-marquee.d.ts +0 -8
  155. package/dist/src/server/home-sections/brand-marquee.d.ts.map +0 -1
  156. package/dist/src/server/home-sections/brand-marquee.js +0 -7
  157. package/dist/src/server/home-sections/brand-pillars.d.ts +0 -9
  158. package/dist/src/server/home-sections/brand-pillars.d.ts.map +0 -1
  159. package/dist/src/server/home-sections/brand-pillars.js +0 -9
  160. package/dist/src/server/home-sections/category-pills.d.ts +0 -9
  161. package/dist/src/server/home-sections/category-pills.d.ts.map +0 -1
  162. package/dist/src/server/home-sections/category-pills.js +0 -19
  163. package/dist/src/server/home-sections/celebrity-trust.d.ts +0 -12
  164. package/dist/src/server/home-sections/celebrity-trust.d.ts.map +0 -1
  165. package/dist/src/server/home-sections/celebrity-trust.js +0 -27
  166. package/dist/src/server/home-sections/features.d.ts +0 -9
  167. package/dist/src/server/home-sections/features.d.ts.map +0 -1
  168. package/dist/src/server/home-sections/features.js +0 -9
  169. package/dist/src/server/home-sections/hero.d.ts +0 -9
  170. package/dist/src/server/home-sections/hero.d.ts.map +0 -1
  171. package/dist/src/server/home-sections/hero.js +0 -9
  172. package/dist/src/server/home-sections/instagram-posts.d.ts +0 -9
  173. package/dist/src/server/home-sections/instagram-posts.d.ts.map +0 -1
  174. package/dist/src/server/home-sections/instagram-posts.js +0 -9
  175. package/dist/src/server/home-sections/loved-by-moms.d.ts +0 -12
  176. package/dist/src/server/home-sections/loved-by-moms.d.ts.map +0 -1
  177. package/dist/src/server/home-sections/loved-by-moms.js +0 -20
  178. package/dist/src/server/home-sections/luxe-favourites.d.ts +0 -11
  179. package/dist/src/server/home-sections/luxe-favourites.d.ts.map +0 -1
  180. package/dist/src/server/home-sections/luxe-favourites.js +0 -19
  181. package/dist/src/server/home-sections/new-arrivals-classic.d.ts +0 -8
  182. package/dist/src/server/home-sections/new-arrivals-classic.d.ts.map +0 -1
  183. package/dist/src/server/home-sections/new-arrivals-classic.js +0 -10
  184. package/dist/src/server/home-sections/new-arrivals.d.ts +0 -12
  185. package/dist/src/server/home-sections/new-arrivals.d.ts.map +0 -1
  186. package/dist/src/server/home-sections/new-arrivals.js +0 -28
  187. package/dist/src/server/home-sections/promo-announcements.d.ts +0 -11
  188. package/dist/src/server/home-sections/promo-announcements.d.ts.map +0 -1
  189. package/dist/src/server/home-sections/promo-announcements.js +0 -5
  190. package/dist/src/server/home-sections/promo-countdown.d.ts +0 -6
  191. package/dist/src/server/home-sections/promo-countdown.d.ts.map +0 -1
  192. package/dist/src/server/home-sections/promo-countdown.js +0 -5
  193. package/dist/src/server/home-sections/shared.d.ts +0 -10
  194. package/dist/src/server/home-sections/shared.d.ts.map +0 -1
  195. package/dist/src/server/home-sections/shared.js +0 -29
  196. package/dist/src/server/home-sections/shop-by-age.d.ts +0 -9
  197. package/dist/src/server/home-sections/shop-by-age.d.ts.map +0 -1
  198. package/dist/src/server/home-sections/shop-by-age.js +0 -17
  199. package/dist/src/server/home-sections/shop-by-category.d.ts +0 -10
  200. package/dist/src/server/home-sections/shop-by-category.d.ts.map +0 -1
  201. package/dist/src/server/home-sections/shop-by-category.js +0 -17
  202. package/dist/src/server/home-sections/testimonials.d.ts +0 -9
  203. package/dist/src/server/home-sections/testimonials.d.ts.map +0 -1
  204. package/dist/src/server/home-sections/testimonials.js +0 -9
  205. package/dist/src/server/home-sections/theme-dresses.d.ts +0 -12
  206. package/dist/src/server/home-sections/theme-dresses.d.ts.map +0 -1
  207. package/dist/src/server/home-sections/theme-dresses.js +0 -27
  208. package/dist/src/server/home-sections/video-stories.d.ts +0 -9
  209. package/dist/src/server/home-sections/video-stories.d.ts.map +0 -1
  210. package/dist/src/server/home-sections/video-stories.js +0 -9
  211. package/dist/src/server/home-sections/why-choose-us.d.ts +0 -9
  212. package/dist/src/server/home-sections/why-choose-us.d.ts.map +0 -1
  213. package/dist/src/server/home-sections/why-choose-us.js +0 -9
  214. package/dist/src/server/home.d.ts +0 -54
  215. package/dist/src/server/home.d.ts.map +0 -1
  216. package/dist/src/server/home.js +0 -1
  217. package/dist/src/server/homepage-config.types.d.ts +0 -390
  218. package/dist/src/server/homepage-config.types.d.ts.map +0 -1
  219. package/dist/src/server/homepage-config.types.js +0 -34
  220. package/dist/src/server/homepage-section-defaults.d.ts +0 -189
  221. package/dist/src/server/homepage-section-defaults.d.ts.map +0 -1
  222. package/dist/src/server/homepage-section-defaults.js +0 -190
  223. package/dist/src/server/index.d.ts +0 -25
  224. package/dist/src/server/index.d.ts.map +0 -1
  225. package/dist/src/server/index.js +0 -24
  226. package/dist/src/server/locale-actions.d.ts +0 -14
  227. package/dist/src/server/locale-actions.d.ts.map +0 -1
  228. package/dist/src/server/locale-actions.js +0 -58
  229. package/dist/src/server/locales.d.ts +0 -8
  230. package/dist/src/server/locales.d.ts.map +0 -1
  231. package/dist/src/server/locales.js +0 -12
  232. package/dist/src/server/normalize-homepage-config.d.ts +0 -7
  233. package/dist/src/server/normalize-homepage-config.d.ts.map +0 -1
  234. package/dist/src/server/normalize-homepage-config.js +0 -281
  235. package/dist/src/server/notifications.d.ts +0 -2
  236. package/dist/src/server/notifications.d.ts.map +0 -1
  237. package/dist/src/server/notifications.js +0 -20
  238. package/dist/src/server/onboarding.d.ts +0 -2
  239. package/dist/src/server/onboarding.d.ts.map +0 -1
  240. package/dist/src/server/onboarding.js +0 -8
  241. package/dist/src/server/orders.d.ts +0 -63
  242. package/dist/src/server/orders.d.ts.map +0 -1
  243. package/dist/src/server/orders.js +0 -230
  244. package/dist/src/server/page-input.d.ts +0 -23
  245. package/dist/src/server/page-input.d.ts.map +0 -1
  246. package/dist/src/server/page-input.js +0 -89
  247. package/dist/src/server/payment-details.d.ts +0 -5
  248. package/dist/src/server/payment-details.d.ts.map +0 -1
  249. package/dist/src/server/payment-details.js +0 -28
  250. package/dist/src/server/payment.d.ts +0 -3
  251. package/dist/src/server/payment.d.ts.map +0 -1
  252. package/dist/src/server/payment.js +0 -13
  253. package/dist/src/server/pincode.d.ts +0 -7
  254. package/dist/src/server/pincode.d.ts.map +0 -1
  255. package/dist/src/server/pincode.js +0 -30
  256. package/dist/src/server/products.d.ts +0 -54
  257. package/dist/src/server/products.d.ts.map +0 -1
  258. package/dist/src/server/products.js +0 -154
  259. package/dist/src/server/regions.d.ts +0 -5
  260. package/dist/src/server/regions.d.ts.map +0 -1
  261. package/dist/src/server/regions.js +0 -57
  262. package/dist/src/server/resolve-home-segment-data.d.ts +0 -25
  263. package/dist/src/server/resolve-home-segment-data.d.ts.map +0 -1
  264. package/dist/src/server/resolve-home-segment-data.js +0 -20
  265. package/dist/src/server/returns.d.ts +0 -29
  266. package/dist/src/server/returns.d.ts.map +0 -1
  267. package/dist/src/server/returns.js +0 -132
  268. package/dist/src/server/shoppable-looks.d.ts +0 -17
  269. package/dist/src/server/shoppable-looks.d.ts.map +0 -1
  270. package/dist/src/server/shoppable-looks.js +0 -136
  271. package/dist/src/server/swaps.d.ts +0 -15
  272. package/dist/src/server/swaps.d.ts.map +0 -1
  273. package/dist/src/server/swaps.js +0 -89
  274. package/dist/src/server/variants.d.ts +0 -3
  275. package/dist/src/server/variants.d.ts.map +0 -1
  276. package/dist/src/server/variants.js +0 -15
  277. package/dist/src/server/wishlist.d.ts +0 -11
  278. package/dist/src/server/wishlist.d.ts.map +0 -1
  279. package/dist/src/server/wishlist.js +0 -49
  280. package/dist/src/util/get-locale-header.d.ts +0 -4
  281. package/dist/src/util/get-locale-header.d.ts.map +0 -1
  282. package/dist/src/util/get-locale-header.js +0 -7
  283. package/dist/src/util/medusa-error.d.ts +0 -2
  284. package/dist/src/util/medusa-error.d.ts.map +0 -1
  285. package/dist/src/util/medusa-error.js +0 -18
  286. package/dist/src/util/revalidate-cart.d.ts +0 -2
  287. package/dist/src/util/revalidate-cart.d.ts.map +0 -1
  288. package/dist/src/util/revalidate-cart.js +0 -8
  289. package/dist/src/util/sort-products.d.ts +0 -3
  290. package/dist/src/util/sort-products.d.ts.map +0 -1
  291. package/dist/src/util/sort-products.js +0 -1
  292. package/dist/src/util/store-client.d.ts +0 -11
  293. package/dist/src/util/store-client.d.ts.map +0 -1
  294. package/dist/src/util/store-client.js +0 -75
@@ -166,7 +166,7 @@ Compose `options.configs` from `homepageSectionFields` or individual `*HomepageS
166
166
 
167
167
  Help page FAQs use **`helpFaqHomepageSectionField`** from `medusa-ui-home-config/sections/helpFaq` (also included in `homepageSectionFields`).
168
168
 
169
- **Split dynamic-config keys** (Medusa plugin): store FAQs under `faqs.helpFaq`; homepage sections under `homepage-sections.sections`. `homepageConfigFromDynamicResponse` assembles these automatically:
169
+ **Split dynamic-config keys** (Medusa plugin): store FAQs under `faqs.helpFaq`; homepage sections under `homepage-sections.sections`; hero slides under `hero-banners` (`homeBanners` / `appBanners` with `slide` rows). `homepageConfigFromDynamicResponse` assembles these automatically:
170
170
 
171
171
  ```json
172
172
  {
@@ -196,6 +196,28 @@ Help page FAQs use **`helpFaqHomepageSectionField`** from `medusa-ui-home-config
196
196
  }
197
197
  ```
198
198
 
199
+ **Hero banners** (`hero-banners`): each slide uses `image`, `title`, `subtitle`, `description`, `buttonText`, `buttonLink`. These map to `homepage-banner-array` / `app-banner-array` via `normalizeHomepageConfig` (same fields as `DynamicBanner`: title → eyebrow, subtitle → headline).
200
+
201
+ ```json
202
+ {
203
+ "hero-banners": {
204
+ "homeBanners": [
205
+ {
206
+ "slide": {
207
+ "image": "https://…",
208
+ "title": "BEST QUALITY",
209
+ "subtitle": "Electronics & Essentials",
210
+ "description": "…",
211
+ "buttonText": "Shop now",
212
+ "buttonLink": "/store"
213
+ }
214
+ }
215
+ ],
216
+ "appBanners": []
217
+ }
218
+ }
219
+ ```
220
+
199
221
  Legacy single `homepage-config` with `sections.helpFaq` (flat `items` or nested `category` / `faq` wrappers) still works. Legacy flat `faq-array` entries are grouped by `faq-category`.
200
222
 
201
223
  Storefront UI still imports from `medusa-ui-home/sections/<id>`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "medusa-storefront-data",
3
- "version": "2.5.7",
3
+ "version": "2.5.8",
4
4
  "type": "module",
5
5
  "description": "Medusa storefront server data layer extracted from Next.js storefront",
6
6
  "license": "MIT",
@@ -17,7 +17,8 @@
17
17
  ],
18
18
  "scripts": {
19
19
  "build": "tsc",
20
- "clean": "rm -rf dist"
20
+ "clean": "rm -rf dist",
21
+ "test": "npm run build"
21
22
  },
22
23
  "peerDependencies": {
23
24
  "next": ">=14",
@@ -9,7 +9,10 @@ import {
9
9
  } from "./homepage-section-defaults"
10
10
  import type { DynamicConfigResponse, HomepageConfig } from "./homepage-config.types"
11
11
  import { mergeSectionBlock } from "./config-merge"
12
- import { mergePageInputWithDefaults, resolvePageInput } from "./page-input"
12
+ import {
13
+ mergePageInputWithDefaults,
14
+ resolvePageInput,
15
+ } from "./page-input"
13
16
 
14
17
  export {
15
18
  DEFAULT_PAGE_INPUT,
@@ -20,7 +23,6 @@ export {
20
23
  type StorefrontPageInput,
21
24
  } from "./page-input"
22
25
 
23
-
24
26
  export const getDynamicConfig = cache(async (): Promise<DynamicConfigResponse | null> => {
25
27
  try {
26
28
  const publishableKey = process.env.NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY
@@ -80,6 +82,7 @@ export function getLogoFromPageInput(
80
82
 
81
83
 
82
84
 
85
+ /** Normalized hero slide used by storefront UI (`getHomeBannersFromPageInput`). */
83
86
  export type HomepageBanner = {
84
87
  image?: string
85
88
  title?: string
@@ -131,8 +134,6 @@ export function getAppBannersFromPageInput(
131
134
  return null
132
135
  }
133
136
 
134
-
135
-
136
137
  // Legacy function for backward compatibility
137
138
 
138
139
  export function getWebsiteDescriptionFromPageInput(
@@ -14,6 +14,87 @@ function asObject(v: unknown): Loose | null {
14
14
  return v && typeof v === "object" && !Array.isArray(v) ? (v as Loose) : null
15
15
  }
16
16
 
17
+ function asArray(v: unknown): unknown[] {
18
+ return Array.isArray(v) ? v : []
19
+ }
20
+
21
+ /** `hero-banners.homeBanners[].slide` from medusa-plugin-dynamic-config. */
22
+ function heroSlideRow(row: unknown): Loose | null {
23
+ const rowObj = asObject(row)
24
+ if (!rowObj) return null
25
+ const slide = asObject(rowObj.slide) ?? rowObj
26
+ const image = slide.image
27
+ if (image == null || image === "") return null
28
+ return {
29
+ image,
30
+ title: slide.title,
31
+ subtitle: slide.subtitle,
32
+ description: slide.description,
33
+ buttonText: slide.buttonText ?? slide.buttonName,
34
+ buttonLink: slide.buttonLink,
35
+ }
36
+ }
37
+
38
+ function simplifiedConfigFromHeroBanners(
39
+ response: DynamicConfigResponse | null | undefined
40
+ ): HomepageConfig | null {
41
+ if (!response || typeof response !== "object") return null
42
+ const root = asObject((response as Loose)["hero-banners"])
43
+ if (!root) return null
44
+
45
+ const desktop = asArray(root.homeBanners)
46
+ .map(heroSlideRow)
47
+ .filter((row): row is Loose => row !== null)
48
+ const mobile = asArray(root.appBanners)
49
+ .map(heroSlideRow)
50
+ .filter((row): row is Loose => row !== null)
51
+
52
+ if (!desktop.length && !mobile.length) return null
53
+
54
+ const banners: Loose = {}
55
+ if (desktop.length) banners.desktop = desktop
56
+ if (mobile.length) banners.mobile = mobile
57
+
58
+ return { site: { banners } } as HomepageConfig
59
+ }
60
+
61
+ function mergeHomepageConfigLayers(
62
+ ...layers: Array<HomepageConfig | null | undefined>
63
+ ): HomepageConfig | null {
64
+ const defined = layers.filter(Boolean) as HomepageConfig[]
65
+ if (!defined.length) return null
66
+ if (defined.length === 1) return defined[0]
67
+
68
+ const merged: Loose = {}
69
+ for (const layer of defined) {
70
+ const site = asObject((layer as Loose).site) ?? {}
71
+ const mergedSite = asObject(merged.site) ?? {}
72
+ const layerBanners = asObject(site.banners)
73
+ if (layerBanners) {
74
+ mergedSite.banners = {
75
+ ...(asObject(mergedSite.banners) ?? {}),
76
+ ...layerBanners,
77
+ }
78
+ }
79
+ for (const [key, value] of Object.entries(site)) {
80
+ if (key !== "banners" && value !== undefined) mergedSite[key] = value
81
+ }
82
+ if (Object.keys(mergedSite).length) merged.site = mergedSite
83
+
84
+ const sections = asObject((layer as Loose).sections)
85
+ if (sections) {
86
+ merged.sections = { ...(asObject(merged.sections) ?? {}), ...sections }
87
+ }
88
+
89
+ for (const [key, value] of Object.entries(layer as Loose)) {
90
+ if (key === "site" || key === "sections") continue
91
+ if (value !== undefined) merged[key] = value
92
+ }
93
+ }
94
+
95
+ return merged as HomepageConfig
96
+ }
97
+
17
98
  /** Full `homepage-config` blob passed from the main project into pages and layout. */
18
99
  export type StorefrontPageInput = HomepageConfig
19
100
 
@@ -106,16 +187,24 @@ export function simplifiedHomepageConfigFromDynamicResponse(
106
187
  : null
107
188
  }
108
189
 
190
+ /** CMS-only homepage config (no package JSON defaults). */
191
+ export function homepageConfigFromDynamicResponseNormalized(
192
+ response: DynamicConfigResponse | null | undefined
193
+ ): HomepageConfig {
194
+ const legacy = response?.["homepage-config"] ?? null
195
+ const fromSplit = simplifiedHomepageConfigFromDynamicResponse(response)
196
+ const fromHeroBanners = simplifiedConfigFromHeroBanners(response)
197
+ const raw = mergeHomepageConfigLayers(fromSplit, legacy, fromHeroBanners)
198
+ return normalizeHomepageConfig(raw)
199
+ }
200
+
109
201
  /**
110
202
  * Build `homepage-config` from Medusa `GET /store/dynamic-config` (main project only).
111
- * Supports legacy `homepage-config` or split plugin keys.
203
+ * Supports legacy `homepage-config`, split plugin keys, and `hero-banners`.
112
204
  */
113
205
  export function homepageConfigFromDynamicResponse(
114
206
  response: DynamicConfigResponse | null | undefined
115
207
  ): StorefrontPageInput {
116
- const legacy = response?.["homepage-config"] ?? null
117
- const fromSplit = simplifiedHomepageConfigFromDynamicResponse(response)
118
- const raw = fromSplit ?? legacy
119
- const normalized = normalizeHomepageConfig(raw)
208
+ const normalized = homepageConfigFromDynamicResponseNormalized(response)
120
209
  return mergePageInputWithDefaults(normalized)
121
210
  }
@@ -1,191 +0,0 @@
1
- {
2
- "logo": "/Logo.png",
3
- "website-description": "Premium kids fashion for everyday wear and special occasions.",
4
- "homepage-banner-array": [
5
- {
6
- "homepage-banner": {
7
- "homepage-banner-image": "/newbanner.png",
8
- "homepage-banner-title": "Premium Kids Shop",
9
- "homepage-banner-subtitle": "Little Trends, Quality Kids Wear",
10
- "homepage-banner-description": "Shop stylish kids wear for little ones and children of all years—from newborn up to 15 years.",
11
- "homepage-banner-button-name": "Shop Kids Wear",
12
- "homepage-banner-button-link": "/store"
13
- }
14
- }
15
- ],
16
- "app-banner-array": [
17
- {
18
- "app-banner": {
19
- "app-banner-image": "/appbanner.png",
20
- "app-banner-title": "Premium Kids Shop",
21
- "app-banner-subtitle": "Little Trends, Quality Kids Wear",
22
- "app-banner-description": "Shop stylish kids wear for little ones and children of all years—from newborn up to 15 years.",
23
- "app-banner-button-name": "Shop Kids Wear",
24
- "app-banner-button-link": "/store"
25
- }
26
- }
27
- ],
28
- "promo-bar": {
29
- "promo-text": null,
30
- "promo-code": null,
31
- "promo-active": false
32
- },
33
- "contact-us": {
34
- "contact-phone": "+1 000 000 0000",
35
- "contact-email": "hello@yourstore.com",
36
- "contact-address": "Your store address"
37
- },
38
- "social-links": [],
39
- "faq-array": [],
40
- "sections": {
41
- "promoAnnouncements": {
42
- "messages": [
43
- "Free shipping on orders over a threshold",
44
- "Worldwide shipping available",
45
- "Selected products available with customisation",
46
- "Need help choosing? Book a video call consultation"
47
- ]
48
- },
49
- "hero": {},
50
- "categoryPills": {},
51
- "newArrivals": {
52
- "title": "New Arrivals",
53
- "subtitle": "Fresh styles just landed",
54
- "variant": "grid"
55
- },
56
- "newArrivalsClassic": {
57
- "title": "New Arrivals",
58
- "subtitle": "Fresh styles just landed",
59
- "variant": "classic"
60
- },
61
- "promoCountdown": {
62
- "code": "SAVE50",
63
- "text": "Up to 50% off — shop your favourites before they're gone!",
64
- "end-at": "2026-12-31T23:59:59.000Z",
65
- "active": false,
66
- "cta-label": "Shop Offers",
67
- "cta-href": "/store"
68
- },
69
- "celebrityTrust": {
70
- "title": "Trusted by Celebrities",
71
- "text": "When the stars dress their little ones in our collections."
72
- },
73
- "luxeFavourites": {
74
- "title": "Luxe Favourites"
75
- },
76
- "shopByCategory": {
77
- "title": "Shop By Categories",
78
- "description": "Browse by style and occasion"
79
- },
80
- "baptism": {
81
- "title": "Baptism"
82
- },
83
- "baptismPicks": {
84
- "title": "Baptism Picks",
85
- "looks": []
86
- },
87
- "themeDresses": {
88
- "title": "Theme",
89
- "description": "Dress her in a dreamy theme outfit for her birthday celebration"
90
- },
91
- "brandMarquee": {
92
- "text": "est. 2012"
93
- },
94
- "aboutBrand": {
95
- "eyebrow": "Who We Are",
96
- "title": "Discover what makes us different",
97
- "description": "We offer stylish, comfortable, and high-quality clothing for children, crafted for everyday wear and special occasions.",
98
- "readMoreHref": "/about",
99
- "stats": [
100
- {
101
- "label": "Visit us in store",
102
- "value": "Find a location"
103
- },
104
- {
105
- "label": "Happy customers",
106
- "value": "150k+"
107
- },
108
- {
109
- "label": "Products",
110
- "value": "3000+"
111
- }
112
- ]
113
- },
114
- "testimonials": {
115
- "title": "What Clients Talk About Us",
116
- "description": "The Trust We've Earned",
117
- "items": [
118
- {
119
- "text": "Amazing place if you are looking for a dress for ur little girl's special day.",
120
- "name": "Greeshma thottippal shanmughan"
121
- },
122
- {
123
- "text": "I frequently buy dresses for my baby from this store and I am extremely satisfied with the purchase.",
124
- "name": "Priyanka Rajesh"
125
- }
126
- ]
127
- },
128
- "instagramPosts": {
129
- "title": "Follow Us on Instagram",
130
- "handle": "yourbrand",
131
- "profile-url": "https://www.instagram.com/yourbrand/",
132
- "profile-image": "/Logo.png",
133
- "posts": []
134
- },
135
- "brandPillars": {
136
- "title": "This approach resulted in the beautiful structure",
137
- "pillars": [
138
- {
139
- "title": "Your favorite kids destination",
140
- "description": "Trendy, high-quality outfits for little ones.",
141
- "image": "/features/store.jpg"
142
- }
143
- ]
144
- },
145
- "features": {
146
- "title": "Why shop with us",
147
- "description": "Secure checkout, fast delivery, and easy exchanges",
148
- "features": [
149
- {
150
- "name": "100% Secure",
151
- "icon": "/secure.svg"
152
- },
153
- {
154
- "name": "Easy Exchanges",
155
- "icon": "/exchnage.svg"
156
- }
157
- ]
158
- },
159
- "whyChooseUs": {
160
- "title": "Why Choose Us?",
161
- "features": [
162
- {
163
- "feature-name": "Premium Quality",
164
- "feature-icon": "/icons/quality.svg"
165
- }
166
- ]
167
- },
168
- "lovedByMoms": {
169
- "title": "Loved by Moms",
170
- "description": "Top-rated styles loved by parents and kids alike."
171
- },
172
- "shopByAge": {
173
- "title": "Shop By Age"
174
- },
175
- "videoStories": {
176
- "title": "Watch Stories & Reviews",
177
- "video-urls": []
178
- },
179
- "blogPosts": {
180
- "title": "Blog posts",
181
- "posts": [
182
- {
183
- "title": "Which Theme Dress Matches Her Vibe?",
184
- "href": "/blog/theme-dress-vibe",
185
- "category": "Theme Dress",
186
- "date": "May 24, 2026"
187
- }
188
- ]
189
- }
190
- }
191
- }
@@ -1,3 +0,0 @@
1
- import Medusa from "@medusajs/js-sdk";
2
- export declare const sdk: Medusa;
3
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AACA,OAAO,MAAiC,MAAM,kBAAkB,CAAA;AAShE,eAAO,MAAM,GAAG,QAId,CAAA"}
@@ -1,31 +0,0 @@
1
- import { getLocaleHeader } from "./util/get-locale-header";
2
- import Medusa from "@medusajs/js-sdk";
3
- // Defaults to standard port for Medusa server
4
- let MEDUSA_BACKEND_URL = "http://localhost:9000";
5
- if (process.env.MEDUSA_BACKEND_URL) {
6
- MEDUSA_BACKEND_URL = process.env.MEDUSA_BACKEND_URL;
7
- }
8
- export const sdk = new Medusa({
9
- baseUrl: MEDUSA_BACKEND_URL,
10
- debug: process.env.NODE_ENV === "development",
11
- publishableKey: process.env.NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY,
12
- });
13
- const originalFetch = sdk.client.fetch.bind(sdk.client);
14
- sdk.client.fetch = async (input, init) => {
15
- const headers = init?.headers ?? {};
16
- let localeHeader;
17
- try {
18
- localeHeader = await getLocaleHeader();
19
- headers["x-medusa-locale"] ??= localeHeader["x-medusa-locale"];
20
- }
21
- catch { }
22
- const newHeaders = {
23
- ...localeHeader,
24
- ...headers,
25
- };
26
- init = {
27
- ...init,
28
- headers: newHeaders,
29
- };
30
- return originalFetch(input, init);
31
- };
@@ -1,23 +0,0 @@
1
- import "server-only";
2
- export declare const getAuthHeaders: () => Promise<{
3
- authorization: string;
4
- } | {}>;
5
- export declare const getGuestAuthHeaders: () => Promise<{
6
- authorization: string;
7
- } | {}>;
8
- export declare const getCacheTag: (tag: string) => Promise<string>;
9
- export declare const getCacheOptions: (tag: string) => Promise<{
10
- tags: string[];
11
- } | {}>;
12
- export declare const setAuthToken: (token: string) => Promise<void>;
13
- export declare const removeAuthToken: () => Promise<void>;
14
- export declare const getCartId: () => Promise<string | undefined>;
15
- export declare const setCartId: (cartId: string) => Promise<void>;
16
- export declare const removeCartId: () => Promise<void>;
17
- export declare const removeSyncLock: () => Promise<void>;
18
- export declare const setHoldCartId: (cartId: string) => Promise<void>;
19
- export declare const getHoldCartId: () => Promise<string | undefined>;
20
- export declare const removeHoldCartId: () => Promise<void>;
21
- export declare const setBuyNowCartId: (cartId: string) => Promise<void>;
22
- export declare const removeBuyNowCartId: () => Promise<void>;
23
- //# sourceMappingURL=cookies.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../src/cookies.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AAGpB,eAAO,MAAM,cAAc,QAAa,OAAO,CAC7C;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,GAAG,EAAE,CAc/B,CAAA;AAED,eAAO,MAAM,mBAAmB,QAAa,OAAO,CAClD;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,GAAG,EAAE,CAc/B,CAAA;AAED,eAAO,MAAM,WAAW,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,CAa7D,CAAA;AAED,eAAO,MAAM,eAAe,GAC1B,KAAK,MAAM,KACV,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,EAAE,CAYjC,CAAA;AAED,eAAO,MAAM,YAAY,GAAU,OAAO,MAAM,kBAQ/C,CAAA;AAED,eAAO,MAAM,eAAe,qBAK3B,CAAA;AAED,eAAO,MAAM,SAAS,mCAsBrB,CAAA;AAED,eAAO,MAAM,SAAS,GAAU,QAAQ,MAAM,kBAQ7C,CAAA;AAED,eAAO,MAAM,YAAY,qBAKxB,CAAA;AAED,eAAO,MAAM,cAAc,qBAK1B,CAAA;AAED,eAAO,MAAM,aAAa,GAAU,QAAQ,MAAM,kBAQjD,CAAA;AAED,eAAO,MAAM,aAAa,mCAGzB,CAAA;AAED,eAAO,MAAM,gBAAgB,qBAK5B,CAAA;AAED,eAAO,MAAM,eAAe,GAAU,QAAQ,MAAM,kBAQnD,CAAA;AAED,eAAO,MAAM,kBAAkB,qBAK9B,CAAA"}
@@ -1,140 +0,0 @@
1
- import "server-only";
2
- import { cookies as nextCookies, headers } from "next/headers";
3
- export const getAuthHeaders = async () => {
4
- try {
5
- const cookies = await nextCookies();
6
- const token = cookies.get("_medusa_jwt")?.value;
7
- if (!token) {
8
- return {};
9
- }
10
- return { authorization: `Bearer ${token}` };
11
- }
12
- catch {
13
- return {};
14
- }
15
- };
16
- export const getGuestAuthHeaders = async () => {
17
- try {
18
- const cookies = await nextCookies();
19
- const token = cookies.get("_medusa_guest_jwt")?.value;
20
- if (!token) {
21
- return {};
22
- }
23
- return { authorization: `Bearer ${token}` };
24
- }
25
- catch {
26
- return {};
27
- }
28
- };
29
- export const getCacheTag = async (tag) => {
30
- try {
31
- const cookies = await nextCookies();
32
- const cacheId = cookies.get("_medusa_cache_id")?.value;
33
- if (!cacheId) {
34
- return "";
35
- }
36
- return `${tag}-${cacheId}`;
37
- }
38
- catch (error) {
39
- return "";
40
- }
41
- };
42
- export const getCacheOptions = async (tag) => {
43
- if (typeof window !== "undefined") {
44
- return {};
45
- }
46
- const cacheTag = await getCacheTag(tag);
47
- if (!cacheTag) {
48
- return {};
49
- }
50
- return { tags: [`${cacheTag}`] };
51
- };
52
- export const setAuthToken = async (token) => {
53
- const cookies = await nextCookies();
54
- cookies.set("_medusa_jwt", token, {
55
- maxAge: 60 * 60 * 24 * 7,
56
- httpOnly: true,
57
- sameSite: "strict",
58
- secure: process.env.NODE_ENV === "production",
59
- });
60
- };
61
- export const removeAuthToken = async () => {
62
- const cookies = await nextCookies();
63
- cookies.set("_medusa_jwt", "", {
64
- maxAge: -1,
65
- });
66
- };
67
- export const getCartId = async () => {
68
- const cookies = await nextCookies();
69
- const headerList = await headers();
70
- // Check for x-cart-id header FIRST (as it's the most up-to-date from middleware)
71
- const headerId = headerList.get("x-cart-id");
72
- if (headerId) {
73
- return headerId;
74
- }
75
- // Prioritize buy_now_cart_id if it exists
76
- const buyNowId = cookies.get("buy_now_cart_id")?.value;
77
- if (buyNowId) {
78
- return buyNowId;
79
- }
80
- // Fallback to regular cart cookies
81
- const id = cookies.get("_medusa_cart_id")?.value ||
82
- cookies.get("cart_id")?.value ||
83
- cookies.get("medusa_cart_id")?.value;
84
- return id;
85
- };
86
- export const setCartId = async (cartId) => {
87
- const cookies = await nextCookies();
88
- cookies.set("_medusa_cart_id", cartId, {
89
- maxAge: 60 * 60 * 24 * 7,
90
- httpOnly: true,
91
- sameSite: "strict",
92
- secure: process.env.NODE_ENV === "production",
93
- });
94
- };
95
- export const removeCartId = async () => {
96
- const cookies = await nextCookies();
97
- cookies.set("_medusa_cart_id", "", {
98
- maxAge: -1,
99
- });
100
- };
101
- export const removeSyncLock = async () => {
102
- const cookies = await nextCookies();
103
- cookies.set("_medusa_cart_synced", "", {
104
- maxAge: -1,
105
- });
106
- };
107
- export const setHoldCartId = async (cartId) => {
108
- const cookies = await nextCookies();
109
- cookies.set("_medusa_hold_cart_id", cartId, {
110
- maxAge: 60 * 60 * 24,
111
- httpOnly: true,
112
- sameSite: "strict",
113
- secure: process.env.NODE_ENV === "production",
114
- });
115
- };
116
- export const getHoldCartId = async () => {
117
- const cookies = await nextCookies();
118
- return cookies.get("_medusa_hold_cart_id")?.value;
119
- };
120
- export const removeHoldCartId = async () => {
121
- const cookies = await nextCookies();
122
- cookies.set("_medusa_hold_cart_id", "", {
123
- maxAge: -1,
124
- });
125
- };
126
- export const setBuyNowCartId = async (cartId) => {
127
- const cookies = await nextCookies();
128
- cookies.set("buy_now_cart_id", cartId, {
129
- maxAge: 60 * 60 * 24 * 7,
130
- httpOnly: true,
131
- sameSite: "strict",
132
- secure: process.env.NODE_ENV === "production",
133
- });
134
- };
135
- export const removeBuyNowCartId = async () => {
136
- const cookies = await nextCookies();
137
- cookies.set("buy_now_cart_id", "", {
138
- maxAge: -1,
139
- });
140
- };