medusa-storefront-data 2.3.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/HOMEPAGE_CONFIG.md +99 -0
  2. package/dist/segment-data/default-page-input.json +191 -0
  3. package/dist/src/config.d.ts.map +1 -0
  4. package/dist/src/cookies.d.ts.map +1 -0
  5. package/dist/src/edge.d.ts.map +1 -0
  6. package/dist/src/middleware.d.ts.map +1 -0
  7. package/dist/src/server/cart.d.ts.map +1 -0
  8. package/dist/src/server/categories.d.ts.map +1 -0
  9. package/dist/src/server/collections.d.ts.map +1 -0
  10. package/dist/src/server/config-merge.d.ts +3 -0
  11. package/dist/src/server/config-merge.d.ts.map +1 -0
  12. package/dist/src/server/config-merge.js +31 -0
  13. package/dist/src/server/contact.d.ts.map +1 -0
  14. package/dist/src/server/customer-registration.d.ts.map +1 -0
  15. package/dist/src/server/customer.d.ts.map +1 -0
  16. package/dist/src/server/dynamic-config.d.ts +240 -0
  17. package/dist/src/server/dynamic-config.d.ts.map +1 -0
  18. package/dist/src/server/dynamic-config.js +703 -0
  19. package/dist/src/server/fulfillment.d.ts.map +1 -0
  20. package/dist/src/server/guest.d.ts.map +1 -0
  21. package/dist/src/server/home-sections/about-brand.d.ts +9 -0
  22. package/dist/src/server/home-sections/about-brand.d.ts.map +1 -0
  23. package/dist/src/server/home-sections/about-brand.js +9 -0
  24. package/dist/src/server/home-sections/baptism-picks.d.ts +10 -0
  25. package/dist/src/server/home-sections/baptism-picks.d.ts.map +1 -0
  26. package/dist/src/server/home-sections/baptism-picks.js +27 -0
  27. package/dist/src/server/home-sections/baptism.d.ts +13 -0
  28. package/dist/src/server/home-sections/baptism.d.ts.map +1 -0
  29. package/dist/src/server/home-sections/baptism.js +43 -0
  30. package/dist/src/server/home-sections/blog-posts.d.ts +9 -0
  31. package/dist/src/server/home-sections/blog-posts.d.ts.map +1 -0
  32. package/dist/src/server/home-sections/blog-posts.js +9 -0
  33. package/dist/src/server/home-sections/brand-marquee.d.ts +8 -0
  34. package/dist/src/server/home-sections/brand-marquee.d.ts.map +1 -0
  35. package/dist/src/server/home-sections/brand-marquee.js +7 -0
  36. package/dist/src/server/home-sections/brand-pillars.d.ts +9 -0
  37. package/dist/src/server/home-sections/brand-pillars.d.ts.map +1 -0
  38. package/dist/src/server/home-sections/brand-pillars.js +9 -0
  39. package/dist/src/server/home-sections/category-pills.d.ts +9 -0
  40. package/dist/src/server/home-sections/category-pills.d.ts.map +1 -0
  41. package/dist/src/server/home-sections/category-pills.js +19 -0
  42. package/dist/src/server/home-sections/celebrity-trust.d.ts +12 -0
  43. package/dist/src/server/home-sections/celebrity-trust.d.ts.map +1 -0
  44. package/dist/src/server/home-sections/celebrity-trust.js +27 -0
  45. package/dist/src/server/home-sections/features.d.ts +9 -0
  46. package/dist/src/server/home-sections/features.d.ts.map +1 -0
  47. package/dist/src/server/home-sections/features.js +9 -0
  48. package/dist/src/server/home-sections/hero.d.ts +9 -0
  49. package/dist/src/server/home-sections/hero.d.ts.map +1 -0
  50. package/dist/src/server/home-sections/hero.js +9 -0
  51. package/dist/src/server/home-sections/instagram-posts.d.ts +9 -0
  52. package/dist/src/server/home-sections/instagram-posts.d.ts.map +1 -0
  53. package/dist/src/server/home-sections/instagram-posts.js +9 -0
  54. package/dist/src/server/home-sections/loved-by-moms.d.ts +12 -0
  55. package/dist/src/server/home-sections/loved-by-moms.d.ts.map +1 -0
  56. package/dist/src/server/home-sections/loved-by-moms.js +20 -0
  57. package/dist/src/server/home-sections/luxe-favourites.d.ts +11 -0
  58. package/dist/src/server/home-sections/luxe-favourites.d.ts.map +1 -0
  59. package/dist/src/server/home-sections/luxe-favourites.js +19 -0
  60. package/dist/src/server/home-sections/new-arrivals-classic.d.ts +8 -0
  61. package/dist/src/server/home-sections/new-arrivals-classic.d.ts.map +1 -0
  62. package/dist/src/server/home-sections/new-arrivals-classic.js +10 -0
  63. package/dist/src/server/home-sections/new-arrivals.d.ts +12 -0
  64. package/dist/src/server/home-sections/new-arrivals.d.ts.map +1 -0
  65. package/dist/src/server/home-sections/new-arrivals.js +28 -0
  66. package/dist/src/server/home-sections/promo-announcements.d.ts +7 -0
  67. package/dist/src/server/home-sections/promo-announcements.d.ts.map +1 -0
  68. package/dist/src/server/home-sections/promo-announcements.js +7 -0
  69. package/dist/src/server/home-sections/promo-countdown.d.ts +6 -0
  70. package/dist/src/server/home-sections/promo-countdown.d.ts.map +1 -0
  71. package/dist/src/server/home-sections/promo-countdown.js +5 -0
  72. package/dist/src/server/home-sections/shared.d.ts +10 -0
  73. package/dist/src/server/home-sections/shared.d.ts.map +1 -0
  74. package/dist/src/server/home-sections/shared.js +29 -0
  75. package/dist/src/server/home-sections/shop-by-age.d.ts +9 -0
  76. package/dist/src/server/home-sections/shop-by-age.d.ts.map +1 -0
  77. package/dist/src/server/home-sections/shop-by-age.js +17 -0
  78. package/dist/src/server/home-sections/shop-by-category.d.ts +10 -0
  79. package/dist/src/server/home-sections/shop-by-category.d.ts.map +1 -0
  80. package/dist/src/server/home-sections/shop-by-category.js +17 -0
  81. package/dist/src/server/home-sections/testimonials.d.ts +9 -0
  82. package/dist/src/server/home-sections/testimonials.d.ts.map +1 -0
  83. package/dist/src/server/home-sections/testimonials.js +9 -0
  84. package/dist/src/server/home-sections/theme-dresses.d.ts +12 -0
  85. package/dist/src/server/home-sections/theme-dresses.d.ts.map +1 -0
  86. package/dist/src/server/home-sections/theme-dresses.js +27 -0
  87. package/dist/src/server/home-sections/video-stories.d.ts +9 -0
  88. package/dist/src/server/home-sections/video-stories.d.ts.map +1 -0
  89. package/dist/src/server/home-sections/video-stories.js +9 -0
  90. package/dist/src/server/home-sections/why-choose-us.d.ts +9 -0
  91. package/dist/src/server/home-sections/why-choose-us.d.ts.map +1 -0
  92. package/dist/src/server/home-sections/why-choose-us.js +9 -0
  93. package/dist/src/server/home.d.ts +62 -0
  94. package/dist/src/server/home.d.ts.map +1 -0
  95. package/dist/{server → src/server}/home.js +29 -31
  96. package/dist/src/server/homepage-config.types.d.ts +274 -0
  97. package/dist/src/server/homepage-config.types.d.ts.map +1 -0
  98. package/dist/src/server/homepage-config.types.js +33 -0
  99. package/dist/{server → src/server}/homepage-section-defaults.d.ts +35 -2
  100. package/dist/src/server/homepage-section-defaults.d.ts.map +1 -0
  101. package/dist/{server → src/server}/homepage-section-defaults.js +41 -2
  102. package/dist/{server → src/server}/index.d.ts +2 -0
  103. package/dist/src/server/index.d.ts.map +1 -0
  104. package/dist/{server → src/server}/index.js +2 -0
  105. package/dist/src/server/locale-actions.d.ts.map +1 -0
  106. package/dist/src/server/locales.d.ts.map +1 -0
  107. package/dist/src/server/notifications.d.ts.map +1 -0
  108. package/dist/src/server/onboarding.d.ts.map +1 -0
  109. package/dist/src/server/orders.d.ts.map +1 -0
  110. package/dist/src/server/page-input.d.ts +19 -0
  111. package/dist/src/server/page-input.d.ts.map +1 -0
  112. package/dist/src/server/page-input.js +40 -0
  113. package/dist/src/server/payment-details.d.ts.map +1 -0
  114. package/dist/src/server/payment.d.ts.map +1 -0
  115. package/dist/src/server/pincode.d.ts.map +1 -0
  116. package/dist/src/server/products.d.ts.map +1 -0
  117. package/dist/src/server/regions.d.ts.map +1 -0
  118. package/dist/src/server/resolve-home-segment-data.d.ts +25 -0
  119. package/dist/src/server/resolve-home-segment-data.d.ts.map +1 -0
  120. package/dist/src/server/resolve-home-segment-data.js +20 -0
  121. package/dist/src/server/returns.d.ts.map +1 -0
  122. package/dist/src/server/shoppable-looks.d.ts +17 -0
  123. package/dist/src/server/shoppable-looks.d.ts.map +1 -0
  124. package/dist/src/server/shoppable-looks.js +136 -0
  125. package/dist/src/server/swaps.d.ts.map +1 -0
  126. package/dist/src/server/variants.d.ts.map +1 -0
  127. package/dist/src/server/wishlist.d.ts.map +1 -0
  128. package/dist/src/util/get-locale-header.d.ts.map +1 -0
  129. package/dist/src/util/medusa-error.d.ts.map +1 -0
  130. package/dist/src/util/revalidate-cart.d.ts.map +1 -0
  131. package/dist/src/util/sort-products.d.ts.map +1 -0
  132. package/dist/src/util/store-client.d.ts.map +1 -0
  133. package/homepage-config.example.json +209 -0
  134. package/homepage-sections.example.json +55 -0
  135. package/package.json +121 -2
  136. package/segment-data/default-page-input.json +191 -0
  137. package/src/server/config-merge.ts +31 -0
  138. package/src/server/dynamic-config.ts +620 -508
  139. package/src/server/home-sections/about-brand.ts +24 -0
  140. package/src/server/home-sections/baptism-picks.ts +46 -0
  141. package/src/server/home-sections/baptism.ts +64 -0
  142. package/src/server/home-sections/blog-posts.ts +23 -0
  143. package/src/server/home-sections/brand-marquee.ts +17 -0
  144. package/src/server/home-sections/brand-pillars.ts +23 -0
  145. package/src/server/home-sections/category-pills.ts +32 -0
  146. package/src/server/home-sections/celebrity-trust.ts +42 -0
  147. package/src/server/home-sections/features.ts +23 -0
  148. package/src/server/home-sections/hero.ts +24 -0
  149. package/src/server/home-sections/instagram-posts.ts +23 -0
  150. package/src/server/home-sections/loved-by-moms.ts +34 -0
  151. package/src/server/home-sections/luxe-favourites.ts +30 -0
  152. package/src/server/home-sections/new-arrivals-classic.ts +21 -0
  153. package/src/server/home-sections/new-arrivals.ts +47 -0
  154. package/src/server/home-sections/promo-announcements.ts +17 -0
  155. package/src/server/home-sections/promo-countdown.ts +15 -0
  156. package/src/server/home-sections/shared.ts +44 -0
  157. package/src/server/home-sections/shop-by-age.ts +26 -0
  158. package/src/server/home-sections/shop-by-category.ts +28 -0
  159. package/src/server/home-sections/testimonials.ts +23 -0
  160. package/src/server/home-sections/theme-dresses.ts +49 -0
  161. package/src/server/home-sections/video-stories.ts +23 -0
  162. package/src/server/home-sections/why-choose-us.ts +23 -0
  163. package/src/server/home.ts +68 -54
  164. package/src/server/homepage-config.types.ts +335 -0
  165. package/src/server/homepage-section-defaults.ts +41 -2
  166. package/src/server/index.ts +2 -0
  167. package/src/server/page-input.ts +64 -0
  168. package/src/server/resolve-home-segment-data.ts +63 -0
  169. package/src/server/shoppable-looks.ts +178 -0
  170. package/dist/config.d.ts.map +0 -1
  171. package/dist/cookies.d.ts.map +0 -1
  172. package/dist/edge.d.ts.map +0 -1
  173. package/dist/middleware.d.ts.map +0 -1
  174. package/dist/server/cart.d.ts.map +0 -1
  175. package/dist/server/categories.d.ts.map +0 -1
  176. package/dist/server/collections.d.ts.map +0 -1
  177. package/dist/server/contact.d.ts.map +0 -1
  178. package/dist/server/customer-registration.d.ts.map +0 -1
  179. package/dist/server/customer.d.ts.map +0 -1
  180. package/dist/server/dynamic-config.d.ts +0 -202
  181. package/dist/server/dynamic-config.d.ts.map +0 -1
  182. package/dist/server/dynamic-config.js +0 -675
  183. package/dist/server/fulfillment.d.ts.map +0 -1
  184. package/dist/server/guest.d.ts.map +0 -1
  185. package/dist/server/home.d.ts +0 -42
  186. package/dist/server/home.d.ts.map +0 -1
  187. package/dist/server/homepage-section-defaults.d.ts.map +0 -1
  188. package/dist/server/index.d.ts.map +0 -1
  189. package/dist/server/locale-actions.d.ts.map +0 -1
  190. package/dist/server/locales.d.ts.map +0 -1
  191. package/dist/server/notifications.d.ts.map +0 -1
  192. package/dist/server/onboarding.d.ts.map +0 -1
  193. package/dist/server/orders.d.ts.map +0 -1
  194. package/dist/server/payment-details.d.ts.map +0 -1
  195. package/dist/server/payment.d.ts.map +0 -1
  196. package/dist/server/pincode.d.ts.map +0 -1
  197. package/dist/server/products.d.ts.map +0 -1
  198. package/dist/server/regions.d.ts.map +0 -1
  199. package/dist/server/returns.d.ts.map +0 -1
  200. package/dist/server/swaps.d.ts.map +0 -1
  201. package/dist/server/variants.d.ts.map +0 -1
  202. package/dist/server/wishlist.d.ts.map +0 -1
  203. package/dist/util/get-locale-header.d.ts.map +0 -1
  204. package/dist/util/medusa-error.d.ts.map +0 -1
  205. package/dist/util/revalidate-cart.d.ts.map +0 -1
  206. package/dist/util/sort-products.d.ts.map +0 -1
  207. package/dist/util/store-client.d.ts.map +0 -1
  208. /package/dist/{config.d.ts → src/config.d.ts} +0 -0
  209. /package/dist/{config.js → src/config.js} +0 -0
  210. /package/dist/{cookies.d.ts → src/cookies.d.ts} +0 -0
  211. /package/dist/{cookies.js → src/cookies.js} +0 -0
  212. /package/dist/{edge.d.ts → src/edge.d.ts} +0 -0
  213. /package/dist/{edge.js → src/edge.js} +0 -0
  214. /package/dist/{middleware.d.ts → src/middleware.d.ts} +0 -0
  215. /package/dist/{middleware.js → src/middleware.js} +0 -0
  216. /package/dist/{server → src/server}/cart.d.ts +0 -0
  217. /package/dist/{server → src/server}/cart.js +0 -0
  218. /package/dist/{server → src/server}/categories.d.ts +0 -0
  219. /package/dist/{server → src/server}/categories.js +0 -0
  220. /package/dist/{server → src/server}/collections.d.ts +0 -0
  221. /package/dist/{server → src/server}/collections.js +0 -0
  222. /package/dist/{server → src/server}/contact.d.ts +0 -0
  223. /package/dist/{server → src/server}/contact.js +0 -0
  224. /package/dist/{server → src/server}/customer-registration.d.ts +0 -0
  225. /package/dist/{server → src/server}/customer-registration.js +0 -0
  226. /package/dist/{server → src/server}/customer.d.ts +0 -0
  227. /package/dist/{server → src/server}/customer.js +0 -0
  228. /package/dist/{server → src/server}/fulfillment.d.ts +0 -0
  229. /package/dist/{server → src/server}/fulfillment.js +0 -0
  230. /package/dist/{server → src/server}/guest.d.ts +0 -0
  231. /package/dist/{server → src/server}/guest.js +0 -0
  232. /package/dist/{server → src/server}/locale-actions.d.ts +0 -0
  233. /package/dist/{server → src/server}/locale-actions.js +0 -0
  234. /package/dist/{server → src/server}/locales.d.ts +0 -0
  235. /package/dist/{server → src/server}/locales.js +0 -0
  236. /package/dist/{server → src/server}/notifications.d.ts +0 -0
  237. /package/dist/{server → src/server}/notifications.js +0 -0
  238. /package/dist/{server → src/server}/onboarding.d.ts +0 -0
  239. /package/dist/{server → src/server}/onboarding.js +0 -0
  240. /package/dist/{server → src/server}/orders.d.ts +0 -0
  241. /package/dist/{server → src/server}/orders.js +0 -0
  242. /package/dist/{server → src/server}/payment-details.d.ts +0 -0
  243. /package/dist/{server → src/server}/payment-details.js +0 -0
  244. /package/dist/{server → src/server}/payment.d.ts +0 -0
  245. /package/dist/{server → src/server}/payment.js +0 -0
  246. /package/dist/{server → src/server}/pincode.d.ts +0 -0
  247. /package/dist/{server → src/server}/pincode.js +0 -0
  248. /package/dist/{server → src/server}/products.d.ts +0 -0
  249. /package/dist/{server → src/server}/products.js +0 -0
  250. /package/dist/{server → src/server}/regions.d.ts +0 -0
  251. /package/dist/{server → src/server}/regions.js +0 -0
  252. /package/dist/{server → src/server}/returns.d.ts +0 -0
  253. /package/dist/{server → src/server}/returns.js +0 -0
  254. /package/dist/{server → src/server}/swaps.d.ts +0 -0
  255. /package/dist/{server → src/server}/swaps.js +0 -0
  256. /package/dist/{server → src/server}/variants.d.ts +0 -0
  257. /package/dist/{server → src/server}/variants.js +0 -0
  258. /package/dist/{server → src/server}/wishlist.d.ts +0 -0
  259. /package/dist/{server → src/server}/wishlist.js +0 -0
  260. /package/dist/{util → src/util}/get-locale-header.d.ts +0 -0
  261. /package/dist/{util → src/util}/get-locale-header.js +0 -0
  262. /package/dist/{util → src/util}/medusa-error.d.ts +0 -0
  263. /package/dist/{util → src/util}/medusa-error.js +0 -0
  264. /package/dist/{util → src/util}/revalidate-cart.d.ts +0 -0
  265. /package/dist/{util → src/util}/revalidate-cart.js +0 -0
  266. /package/dist/{util → src/util}/sort-products.d.ts +0 -0
  267. /package/dist/{util → src/util}/sort-products.js +0 -0
  268. /package/dist/{util → src/util}/store-client.d.ts +0 -0
  269. /package/dist/{util → src/util}/store-client.js +0 -0
@@ -4,6 +4,8 @@ export * from "./collections"
4
4
  export * from "./customer-registration"
5
5
  export * from "./customer"
6
6
  export * from "./dynamic-config"
7
+ export * from "./page-input"
8
+ export * from "./resolve-home-segment-data"
7
9
  export * from "./fulfillment"
8
10
  export * from "./guest"
9
11
  export * from "./locale-actions"
@@ -0,0 +1,64 @@
1
+ import "server-only"
2
+
3
+ import defaultPageInputJson from "../../segment-data/default-page-input.json"
4
+ import type { HomepageConfig } from "./homepage-config.types"
5
+ import { mergeSectionBlock } from "./config-merge"
6
+
7
+ /** Full `homepage-config` blob passed from the main project into pages and layout. */
8
+ export type StorefrontPageInput = HomepageConfig
9
+
10
+ export const DEFAULT_PAGE_INPUT =
11
+ defaultPageInputJson as unknown as StorefrontPageInput
12
+
13
+ /**
14
+ * Merge CMS / main-project overrides onto package JSON defaults.
15
+ * Empty strings and empty arrays are ignored (same rules as section merge).
16
+ */
17
+ export function mergePageInputWithDefaults(
18
+ override?: HomepageConfig | null
19
+ ): StorefrontPageInput {
20
+ if (!override) return { ...DEFAULT_PAGE_INPUT }
21
+
22
+ const merged = mergeSectionBlock(
23
+ { ...DEFAULT_PAGE_INPUT } as Record<string, unknown>,
24
+ override as Record<string, unknown>
25
+ ) as StorefrontPageInput
26
+
27
+ const defaultSections = DEFAULT_PAGE_INPUT.sections ?? {}
28
+ const overrideSections = override.sections ?? {}
29
+ const mergedSections: Record<string, unknown> = { ...defaultSections }
30
+
31
+ for (const [key, value] of Object.entries(overrideSections)) {
32
+ const base = (defaultSections as Record<string, unknown>)[key]
33
+ const baseObj =
34
+ base && typeof base === "object" && !Array.isArray(base)
35
+ ? (base as Record<string, unknown>)
36
+ : {}
37
+ const overrideObj =
38
+ value && typeof value === "object" && !Array.isArray(value)
39
+ ? (value as Record<string, unknown>)
40
+ : typeof value === "string"
41
+ ? { text: value }
42
+ : {}
43
+ mergedSections[key] = mergeSectionBlock(baseObj, overrideObj)
44
+ }
45
+
46
+ merged.sections = mergedSections as StorefrontPageInput["sections"]
47
+ return merged
48
+ }
49
+
50
+ /** Resolve page input: explicit override, or package defaults. */
51
+ export function resolvePageInput(
52
+ pageInput?: HomepageConfig | null
53
+ ): StorefrontPageInput {
54
+ return mergePageInputWithDefaults(pageInput ?? null)
55
+ }
56
+
57
+ /**
58
+ * Build `homepage-config` from Medusa `GET /store/dynamic-config` (main project only).
59
+ */
60
+ export function homepageConfigFromDynamicResponse(
61
+ response: { "homepage-config"?: HomepageConfig | null } | null | undefined
62
+ ): StorefrontPageInput {
63
+ return mergePageInputWithDefaults(response?.["homepage-config"] ?? null)
64
+ }
@@ -0,0 +1,63 @@
1
+ import "server-only"
2
+
3
+ import type { HomepageConfig } from "./homepage-config.types"
4
+ import {
5
+ getAboutBrandFromPageInput,
6
+ getAnnouncementMessagesFromPageInput,
7
+ getAppBannersFromPageInput,
8
+ getBlogPostsFromPageInput,
9
+ getBrandPillarsFromPageInput,
10
+ getFeaturesFromPageInput,
11
+ getHomeBannersFromPageInput,
12
+ getHomeSectionsCopyFromPageInput,
13
+ getInstagramPostsFromPageInput,
14
+ getPromoCountdownFromPageInput,
15
+ getTestimonialsFromPageInput,
16
+ getTrustFeaturesFromPageInput,
17
+ getVideoStoriesFromPageInput,
18
+ type AboutBrandConfig,
19
+ type BlogPostConfig,
20
+ type BrandPillarConfig,
21
+ type HomepageBanner,
22
+ type HomeSectionsCopy,
23
+ type InstagramPostsData,
24
+ type TrustFeaturesConfig,
25
+ } from "./dynamic-config"
26
+
27
+ /** Config-driven homepage fields (no Medusa catalog APIs). */
28
+ export type HomeSegmentConfigData = {
29
+ homeBanners: HomepageBanner[] | null
30
+ appBanners: HomepageBanner[] | null
31
+ whyChooseUsFeatures: ReturnType<typeof getFeaturesFromPageInput>
32
+ testimonials: ReturnType<typeof getTestimonialsFromPageInput>
33
+ videoStories: ReturnType<typeof getVideoStoriesFromPageInput>
34
+ announcementMessages: string[]
35
+ promoCountdown: ReturnType<typeof getPromoCountdownFromPageInput>
36
+ aboutBrand: AboutBrandConfig
37
+ brandPillars: { sectionTitle: string; pillars: BrandPillarConfig[] }
38
+ blogPosts: BlogPostConfig[]
39
+ instagramPosts: InstagramPostsData
40
+ sectionsCopy: HomeSectionsCopy
41
+ trustFeatures: TrustFeaturesConfig
42
+ }
43
+
44
+ /** Resolve all segment JSON from `pageInput` (package defaults when omitted). */
45
+ export function resolveHomeSegmentConfigData(
46
+ pageInput?: HomepageConfig | null
47
+ ): HomeSegmentConfigData {
48
+ return {
49
+ homeBanners: getHomeBannersFromPageInput(pageInput),
50
+ appBanners: getAppBannersFromPageInput(pageInput),
51
+ whyChooseUsFeatures: getFeaturesFromPageInput(pageInput),
52
+ testimonials: getTestimonialsFromPageInput(pageInput),
53
+ videoStories: getVideoStoriesFromPageInput(pageInput),
54
+ announcementMessages: getAnnouncementMessagesFromPageInput(pageInput),
55
+ promoCountdown: getPromoCountdownFromPageInput(pageInput),
56
+ aboutBrand: getAboutBrandFromPageInput(pageInput),
57
+ brandPillars: getBrandPillarsFromPageInput(pageInput),
58
+ blogPosts: getBlogPostsFromPageInput(pageInput),
59
+ instagramPosts: getInstagramPostsFromPageInput(pageInput),
60
+ sectionsCopy: getHomeSectionsCopyFromPageInput(pageInput),
61
+ trustFeatures: getTrustFeaturesFromPageInput(pageInput),
62
+ }
63
+ }
@@ -0,0 +1,178 @@
1
+ import "server-only"
2
+
3
+ import { HttpTypes } from "@medusajs/types"
4
+ import { sdk } from "../config"
5
+ import { getRegion } from "./regions"
6
+ import type { HomepageConfig } from "./homepage-config.types"
7
+ import { DEFAULT_HOMEPAGE_SECTIONS } from "./homepage-section-defaults"
8
+ import { getMergedSectionBlock } from "./dynamic-config"
9
+
10
+ export type ShoppableLookConfig = {
11
+ image: string
12
+ productIds: string[]
13
+ productHandles: string[]
14
+ }
15
+
16
+ export type ShoppableLook = {
17
+ id: string
18
+ image: string
19
+ products: HttpTypes.StoreProduct[]
20
+ }
21
+
22
+ function parseLookRow(row: Record<string, unknown>): ShoppableLookConfig | null {
23
+ const nested = (row.look ?? row["shop-look"] ?? row) as Record<string, unknown>
24
+ const image = String(nested.image ?? nested["look-image"] ?? nested.thumbnail ?? "").trim()
25
+ if (!image) return null
26
+
27
+ const idsRaw = nested["product-ids"] ?? nested.productIds ?? nested.products
28
+ const handlesRaw = nested["product-handles"] ?? nested.productHandles ?? nested.handles
29
+
30
+ const productIds: string[] = []
31
+ const productHandles: string[] = []
32
+
33
+ if (Array.isArray(idsRaw)) {
34
+ idsRaw.forEach((entry) => {
35
+ if (typeof entry === "string" && entry.trim()) productIds.push(entry.trim())
36
+ if (entry && typeof entry === "object") {
37
+ const id = (entry as Record<string, unknown>).id ?? (entry as Record<string, unknown>)["product-id"]
38
+ if (typeof id === "string" && id.trim()) productIds.push(id.trim())
39
+ }
40
+ })
41
+ }
42
+
43
+ if (Array.isArray(handlesRaw)) {
44
+ handlesRaw.forEach((entry) => {
45
+ if (typeof entry === "string" && entry.trim()) productHandles.push(entry.trim())
46
+ if (entry && typeof entry === "object") {
47
+ const handle = (entry as Record<string, unknown>).handle
48
+ if (typeof handle === "string" && handle.trim()) productHandles.push(handle.trim())
49
+ }
50
+ })
51
+ }
52
+
53
+ return { image, productIds, productHandles }
54
+ }
55
+
56
+ export function readShoppableLooksBlock(block: unknown): ShoppableLookConfig[] {
57
+ if (!block || typeof block !== "object") return []
58
+ const row = block as Record<string, unknown>
59
+ const raw =
60
+ row.looks ??
61
+ row["shop-looks"] ??
62
+ row["looks-array"] ??
63
+ row["baptism-picks"] ??
64
+ []
65
+
66
+ if (!Array.isArray(raw)) return []
67
+
68
+ return raw
69
+ .map((item) => {
70
+ if (!item || typeof item !== "object") return null
71
+ return parseLookRow(item as Record<string, unknown>)
72
+ })
73
+ .filter((x): x is ShoppableLookConfig => x !== null)
74
+ }
75
+
76
+ async function fetchProductsForLook(
77
+ countryCode: string,
78
+ productIds: string[],
79
+ productHandles: string[]
80
+ ): Promise<HttpTypes.StoreProduct[]> {
81
+ const region = await getRegion(countryCode)
82
+ if (!region?.id) return []
83
+
84
+ const fields =
85
+ "*thumbnail,*images,*variants,*variants.calculated_price,*options,*options.values"
86
+
87
+ const byId = new Map<string, HttpTypes.StoreProduct>()
88
+
89
+ if (productIds.length > 0) {
90
+ const { products } = await sdk.store.product.list(
91
+ { id: productIds, region_id: region.id, fields, limit: productIds.length },
92
+ {}
93
+ )
94
+ ;(products as HttpTypes.StoreProduct[]).forEach((p) => {
95
+ if (p.id) byId.set(p.id, p)
96
+ })
97
+ }
98
+
99
+ for (const handle of productHandles) {
100
+ if (byId.has(handle)) continue
101
+ try {
102
+ const { products } = await sdk.store.product.list(
103
+ { handle, region_id: region.id, fields, limit: 1 },
104
+ {}
105
+ )
106
+ const product = (products as HttpTypes.StoreProduct[])?.[0]
107
+ if (product?.id) byId.set(product.id, product)
108
+ } catch {
109
+ /* skip */
110
+ }
111
+ }
112
+
113
+ const ordered: HttpTypes.StoreProduct[] = []
114
+ for (const id of productIds) {
115
+ const p = byId.get(id)
116
+ if (p) ordered.push(p)
117
+ }
118
+ for (const handle of productHandles) {
119
+ const p = [...byId.values()].find((x) => x.handle === handle)
120
+ if (p && !ordered.some((o) => o.id === p.id)) ordered.push(p)
121
+ }
122
+
123
+ return ordered
124
+ }
125
+
126
+ export function looksFromProducts(
127
+ products: HttpTypes.StoreProduct[]
128
+ ): ShoppableLook[] {
129
+ return products
130
+ .map((product, index) => {
131
+ const image =
132
+ (product.metadata as { look_image?: string } | undefined)?.look_image ??
133
+ product.thumbnail ??
134
+ product.images?.[0]?.url ??
135
+ ""
136
+ if (!image) return null
137
+ return {
138
+ id: product.id ?? `look-${index}`,
139
+ image,
140
+ products: [product],
141
+ }
142
+ })
143
+ .filter((x): x is ShoppableLook => x !== null)
144
+ }
145
+
146
+ export async function getBaptismPicksLooks(
147
+ countryCode: string,
148
+ fallbackProducts: HttpTypes.StoreProduct[],
149
+ pageInput?: HomepageConfig | null
150
+ ): Promise<ShoppableLook[]> {
151
+ const block = getMergedSectionBlock("baptismPicks", pageInput)
152
+ let configs = readShoppableLooksBlock(block)
153
+ if (configs.length === 0) {
154
+ configs = readShoppableLooksBlock(DEFAULT_HOMEPAGE_SECTIONS.baptismPicks)
155
+ }
156
+
157
+ if (configs.length === 0) {
158
+ return looksFromProducts(fallbackProducts)
159
+ }
160
+
161
+ const looks: ShoppableLook[] = []
162
+ for (let i = 0; i < configs.length; i++) {
163
+ const config = configs[i]
164
+ const products = await fetchProductsForLook(
165
+ countryCode,
166
+ config.productIds,
167
+ config.productHandles
168
+ )
169
+ if (products.length === 0) continue
170
+ looks.push({
171
+ id: `look-${i}`,
172
+ image: config.image,
173
+ products,
174
+ })
175
+ }
176
+
177
+ return looks.length > 0 ? looks : looksFromProducts(fallbackProducts)
178
+ }
@@ -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 +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 +0,0 @@
1
- {"version":3,"file":"edge.d.ts","sourceRoot":"","sources":["../src/edge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACjF,YAAY,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACjF,YAAY,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cart.d.ts","sourceRoot":"","sources":["../../src/server/cart.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"categories.d.ts","sourceRoot":"","sources":["../../src/server/categories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAI3C,eAAO,MAAM,cAAc,GAAU,QAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,8CAW/D,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAU,gBAAgB,MAAM,EAAE,mDAuBjE,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../src/server/collections.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAQ3C,eAAO,MAAM,kBAAkB,GAAU,IAAI,MAAM,uCAIlD,CAAA;AAED,eAAO,MAAM,eAAe,GAC1B,cAAa,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,KACvC,OAAO,CAAC;IAAE,WAAW,EAAE,SAAS,CAAC,eAAe,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAWrE,CAAA;AAED,eAAO,MAAM,qBAAqB,GAChC,QAAQ,MAAM,KACb,OAAO,CAAC,SAAS,CAAC,eAAe,GAAG,IAAI,CAsB1C,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"contact.d.ts","sourceRoot":"","sources":["../../src/server/contact.ts"],"names":[],"mappings":"AAgBA,wBAAsB,oBAAoB,CAAC,EACzC,KAAK,EACL,OAAO,EACP,QAAQ,EACR,MAAqB,GACtB,EAAE;IACD,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE;QACP,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;;;;;;;;GAsBA;AAED,wBAAsB,qBAAqB,CAAC,EAC1C,KAAK,EACL,MAAqB,EACrB,MAAiB,GAClB,EAAE;IACD,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,CAAA;IACtC,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;;;;;;;;GA2BA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"customer-registration.d.ts","sourceRoot":"","sources":["../../src/server/customer-registration.ts"],"names":[],"mappings":"AAqBA;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IACzC,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;CACnB;;;;;;;;;;GAoDA;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,GAAE,MAA6B;;;;;;;;;;GAuB5F;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;;;;;;;;;GAwBlE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;;;GAoBxE;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM;;;;;;;;GAyBvD;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAC9C,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CAChB;;;;;;;;GA8BA;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM;;GAwBvD;AACD;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,MAAM;;;;;;;;GAkBzD;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;;;GAcvE;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAAC,KAAK,EAAE,MAAM;;;;;;;;GAe/D;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;;;GAc7E"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"customer.d.ts","sourceRoot":"","sources":["../../src/server/customer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AA4C3C,eAAO,MAAM,gBAAgB,QACjB,OAAO,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI,CAkBjD,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,MAAM,SAAS,CAAC,mBAAmB,qCAYvE,CAAA;AAED,wBAAsB,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,gBAqCtE;AAED,wBAAsB,KAAK,CACzB,aAAa,EAAE,MAAM,GAAG,IAAI,EAC5B,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsExB;AAED,wBAAsB,OAAO,CAAC,WAAW,EAAE,MAAM,iBAqBhD;AAED,wBAAsB,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,iBAwChD;AAED,eAAO,MAAM,kBAAkB,GAC7B,cAAc,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,UAAU,QAAQ,KACjB,OAAO,CAAC,GAAG,CAgCb,CAAA;AAED,eAAO,MAAM,qBAAqB,GAChC,WAAW,MAAM,KAChB,OAAO,CAAC,IAAI,CAWd,CAAA;AAED,eAAO,MAAM,qBAAqB,GAChC,cAAc,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,UAAU,QAAQ,KACjB,OAAO,CAAC,GAAG,CAuCb,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAU,WAAW,MAAM;;;;;;EAWxD,CAAA;AAED,wBAAsB,kBAAkB;;;;;;GA8CvC;AAED,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;;;;;GAsC5E;AAED,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;;;;;;GAmChH;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ;;;;;;;;GAyC1D"}
@@ -1,202 +0,0 @@
1
- import { type DefaultHomeSectionId } from "./homepage-section-defaults";
2
- export interface DynamicConfig {
3
- "homepage-config"?: {
4
- logo?: string;
5
- "homepage-banner-array"?: Array<{
6
- "homepage-banner"?: {
7
- "homepage-banner-image"?: string;
8
- "homepage-banner-title"?: string;
9
- "homepage-banner-subtitle"?: string;
10
- "homepage-banner-description"?: string;
11
- "homepage-banner-button-name"?: string;
12
- "homepage-banner-button-link"?: string;
13
- };
14
- }>;
15
- "app-banner-array"?: Array<{
16
- "app-banner"?: {
17
- "app-banner-image"?: string;
18
- "app-banner-title"?: string;
19
- "app-banner-subtitle"?: string;
20
- "app-banner-description"?: string;
21
- "app-banner-button-name"?: string;
22
- "app-banner-button-link"?: string;
23
- "app-banner-link"?: string;
24
- };
25
- }>;
26
- "website-description"?: string;
27
- "website_description"?: string;
28
- "why-choose-us-title"?: string;
29
- "why-choose-us-features"?: Array<{
30
- feature?: {
31
- "feature-name"?: string;
32
- "feature-icon"?: string;
33
- };
34
- "feature-name"?: string;
35
- "feature-icon"?: string;
36
- }>;
37
- "contact-us"?: {
38
- "contact-phone"?: string;
39
- "contact-email"?: string;
40
- "contact-address"?: string;
41
- };
42
- "social-links"?: Array<{
43
- "social-link"?: {
44
- "social-platform-name"?: string;
45
- "social-platform-icon"?: string;
46
- "social-platform-url"?: string;
47
- };
48
- "social-platform-name"?: string;
49
- "social-platform-icon"?: string;
50
- "social-platform-url"?: string;
51
- }>;
52
- "promo-bar"?: {
53
- "promo-text"?: string;
54
- "promo-code"?: string;
55
- "promo-value"?: string;
56
- "promo-active"?: boolean;
57
- };
58
- /** Central homepage section copy (Option 1). Keys: camelCase or kebab-case section ids. */
59
- sections?: Record<string, unknown>;
60
- [key: string]: any;
61
- };
62
- }
63
- export declare const getDynamicConfig: () => Promise<DynamicConfig | null>;
64
- export declare const getLogoFromConfig: () => Promise<string | null>;
65
- export declare const getBannerImageFromConfig: () => Promise<string | null>;
66
- export declare const getMobileBannerFromConfig: () => Promise<{
67
- image: string | null;
68
- link: string | null;
69
- }>;
70
- export declare const getHomeBannersFromConfig: () => Promise<Array<{
71
- image?: string;
72
- title?: string;
73
- subtitle?: string;
74
- description?: string;
75
- buttonName?: string;
76
- buttonLink?: string;
77
- }> | null>;
78
- export declare const getAppBannersFromConfig: () => Promise<Array<{
79
- image?: string;
80
- title?: string;
81
- subtitle?: string;
82
- description?: string;
83
- buttonName?: string;
84
- buttonLink?: string;
85
- }> | null>;
86
- export declare const getMobileBannerImageFromConfig: () => Promise<string | null>;
87
- export declare const getWebsiteDescriptionFromConfig: () => Promise<string | null>;
88
- /** Why choose us — defaults + `sections.whyChooseUs` override. */
89
- export declare const getFeaturesFromConfig: () => Promise<{
90
- title: string;
91
- features: Array<{
92
- name: string;
93
- icon: string;
94
- }>;
95
- }>;
96
- /** CMS copy for a homepage section (title, name, text, description, etc.). */
97
- export type SectionCopy = {
98
- title: string | null;
99
- name: string | null;
100
- text: string | null;
101
- description: string | null;
102
- subtitle: string | null;
103
- eyebrow: string | null;
104
- };
105
- export declare function parseSectionCopy(block: unknown): SectionCopy;
106
- export type HomeSectionCopyId = DefaultHomeSectionId;
107
- export type HomeSectionsCopy = Record<HomeSectionCopyId, SectionCopy>;
108
- /** Merge CMS section block onto package defaults (override wins when set). */
109
- export declare function mergeSectionBlock(defaults: Record<string, unknown>, override: Record<string, unknown> | null): Record<string, unknown>;
110
- /**
111
- * Merged section copy: package defaults + `homepage-config.sections` overrides.
112
- */
113
- export declare const getHomeSectionsCopyFromConfig: () => Promise<HomeSectionsCopy>;
114
- export type TrustFeaturesConfig = {
115
- title: string | null;
116
- description: string | null;
117
- features: Array<{
118
- name: string;
119
- icon: string;
120
- }>;
121
- };
122
- /** Trust badge row — defaults + `sections.features` override. */
123
- export declare const getTrustFeaturesFromConfig: () => Promise<TrustFeaturesConfig>;
124
- export declare const getContactInfoFromConfig: () => Promise<{
125
- phone?: string;
126
- email?: string;
127
- address?: string;
128
- } | null>;
129
- /**
130
- * Homepage video stories/reviews carousel (`homepage-config.video-stories`).
131
- */
132
- export declare const getVideoStoriesFromConfig: () => Promise<{
133
- title: string;
134
- videoUrls: string[];
135
- } | null>;
136
- export declare const getTestimonialsFromConfig: () => Promise<{
137
- title: string;
138
- testimonials: Array<{
139
- id: string;
140
- text: string;
141
- name: string;
142
- rating: number;
143
- avatar?: string;
144
- }>;
145
- } | null>;
146
- export declare const getSocialLinksFromConfig: () => Promise<Array<{
147
- name: string;
148
- url: string;
149
- icon?: string;
150
- }> | null>;
151
- export declare const getFaqsFromConfig: () => Promise<Array<{
152
- category: string;
153
- items: Array<{
154
- q: string;
155
- a: string;
156
- }>;
157
- }> | null>;
158
- export declare const getAnnouncementMessagesFromConfig: () => Promise<string[]>;
159
- export type AboutBrandConfig = {
160
- eyebrow: string;
161
- title: string;
162
- description: string;
163
- readMoreHref: string;
164
- stats: Array<{
165
- label: string;
166
- value: string;
167
- }>;
168
- };
169
- export declare const getAboutBrandFromConfig: () => Promise<AboutBrandConfig>;
170
- export type BrandPillarConfig = {
171
- title: string;
172
- description: string;
173
- image?: string;
174
- };
175
- export declare const getBrandPillarsFromConfig: () => Promise<{
176
- sectionTitle: string;
177
- pillars: BrandPillarConfig[];
178
- }>;
179
- export type BlogPostConfig = {
180
- title: string;
181
- excerpt?: string;
182
- category?: string;
183
- date?: string;
184
- href: string;
185
- image?: string;
186
- };
187
- export declare const getBlogPostsFromConfig: () => Promise<BlogPostConfig[]>;
188
- /** Promo countdown — defaults + `sections.promoCountdown` override. */
189
- export declare const getPromoCountdownFromConfig: () => Promise<{
190
- code: string | null;
191
- message: string | null;
192
- endAt: string | null;
193
- active: boolean;
194
- }>;
195
- export { DEFAULT_HOMEPAGE_SECTIONS } from "./homepage-section-defaults";
196
- export declare const getPromoBarConfig: () => Promise<{
197
- text: string | null;
198
- code: string | null;
199
- value: string | null;
200
- active: boolean;
201
- }>;
202
- //# sourceMappingURL=dynamic-config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dynamic-config.d.ts","sourceRoot":"","sources":["../../src/server/dynamic-config.ts"],"names":[],"mappings":"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"}