medusa-storefront-data 2.1.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.
- package/HOMEPAGE_CONFIG.md +99 -0
- package/dist/segment-data/default-page-input.json +191 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/cookies.d.ts.map +1 -0
- package/dist/src/edge.d.ts.map +1 -0
- package/dist/src/middleware.d.ts.map +1 -0
- package/dist/src/server/cart.d.ts.map +1 -0
- package/dist/src/server/categories.d.ts.map +1 -0
- package/dist/src/server/collections.d.ts.map +1 -0
- package/dist/src/server/config-merge.d.ts +3 -0
- package/dist/src/server/config-merge.d.ts.map +1 -0
- package/dist/src/server/config-merge.js +31 -0
- package/dist/src/server/contact.d.ts.map +1 -0
- package/dist/src/server/customer-registration.d.ts.map +1 -0
- package/dist/src/server/customer.d.ts.map +1 -0
- package/dist/src/server/dynamic-config.d.ts +240 -0
- package/dist/src/server/dynamic-config.d.ts.map +1 -0
- package/dist/src/server/dynamic-config.js +703 -0
- package/dist/src/server/fulfillment.d.ts.map +1 -0
- package/dist/src/server/guest.d.ts.map +1 -0
- package/dist/src/server/home-sections/about-brand.d.ts +9 -0
- package/dist/src/server/home-sections/about-brand.d.ts.map +1 -0
- package/dist/src/server/home-sections/about-brand.js +9 -0
- package/dist/src/server/home-sections/baptism-picks.d.ts +10 -0
- package/dist/src/server/home-sections/baptism-picks.d.ts.map +1 -0
- package/dist/src/server/home-sections/baptism-picks.js +27 -0
- package/dist/src/server/home-sections/baptism.d.ts +13 -0
- package/dist/src/server/home-sections/baptism.d.ts.map +1 -0
- package/dist/src/server/home-sections/baptism.js +43 -0
- package/dist/src/server/home-sections/blog-posts.d.ts +9 -0
- package/dist/src/server/home-sections/blog-posts.d.ts.map +1 -0
- package/dist/src/server/home-sections/blog-posts.js +9 -0
- package/dist/src/server/home-sections/brand-marquee.d.ts +8 -0
- package/dist/src/server/home-sections/brand-marquee.d.ts.map +1 -0
- package/dist/src/server/home-sections/brand-marquee.js +7 -0
- package/dist/src/server/home-sections/brand-pillars.d.ts +9 -0
- package/dist/src/server/home-sections/brand-pillars.d.ts.map +1 -0
- package/dist/src/server/home-sections/brand-pillars.js +9 -0
- package/dist/src/server/home-sections/category-pills.d.ts +9 -0
- package/dist/src/server/home-sections/category-pills.d.ts.map +1 -0
- package/dist/src/server/home-sections/category-pills.js +19 -0
- package/dist/src/server/home-sections/celebrity-trust.d.ts +12 -0
- package/dist/src/server/home-sections/celebrity-trust.d.ts.map +1 -0
- package/dist/src/server/home-sections/celebrity-trust.js +27 -0
- package/dist/src/server/home-sections/features.d.ts +9 -0
- package/dist/src/server/home-sections/features.d.ts.map +1 -0
- package/dist/src/server/home-sections/features.js +9 -0
- package/dist/src/server/home-sections/hero.d.ts +9 -0
- package/dist/src/server/home-sections/hero.d.ts.map +1 -0
- package/dist/src/server/home-sections/hero.js +9 -0
- package/dist/src/server/home-sections/instagram-posts.d.ts +9 -0
- package/dist/src/server/home-sections/instagram-posts.d.ts.map +1 -0
- package/dist/src/server/home-sections/instagram-posts.js +9 -0
- package/dist/src/server/home-sections/loved-by-moms.d.ts +12 -0
- package/dist/src/server/home-sections/loved-by-moms.d.ts.map +1 -0
- package/dist/src/server/home-sections/loved-by-moms.js +20 -0
- package/dist/src/server/home-sections/luxe-favourites.d.ts +11 -0
- package/dist/src/server/home-sections/luxe-favourites.d.ts.map +1 -0
- package/dist/src/server/home-sections/luxe-favourites.js +19 -0
- package/dist/src/server/home-sections/new-arrivals-classic.d.ts +8 -0
- package/dist/src/server/home-sections/new-arrivals-classic.d.ts.map +1 -0
- package/dist/src/server/home-sections/new-arrivals-classic.js +10 -0
- package/dist/src/server/home-sections/new-arrivals.d.ts +12 -0
- package/dist/src/server/home-sections/new-arrivals.d.ts.map +1 -0
- package/dist/src/server/home-sections/new-arrivals.js +28 -0
- package/dist/src/server/home-sections/promo-announcements.d.ts +7 -0
- package/dist/src/server/home-sections/promo-announcements.d.ts.map +1 -0
- package/dist/src/server/home-sections/promo-announcements.js +7 -0
- package/dist/src/server/home-sections/promo-countdown.d.ts +6 -0
- package/dist/src/server/home-sections/promo-countdown.d.ts.map +1 -0
- package/dist/src/server/home-sections/promo-countdown.js +5 -0
- package/dist/src/server/home-sections/shared.d.ts +10 -0
- package/dist/src/server/home-sections/shared.d.ts.map +1 -0
- package/dist/src/server/home-sections/shared.js +29 -0
- package/dist/src/server/home-sections/shop-by-age.d.ts +9 -0
- package/dist/src/server/home-sections/shop-by-age.d.ts.map +1 -0
- package/dist/src/server/home-sections/shop-by-age.js +17 -0
- package/dist/src/server/home-sections/shop-by-category.d.ts +10 -0
- package/dist/src/server/home-sections/shop-by-category.d.ts.map +1 -0
- package/dist/src/server/home-sections/shop-by-category.js +17 -0
- package/dist/src/server/home-sections/testimonials.d.ts +9 -0
- package/dist/src/server/home-sections/testimonials.d.ts.map +1 -0
- package/dist/src/server/home-sections/testimonials.js +9 -0
- package/dist/src/server/home-sections/theme-dresses.d.ts +12 -0
- package/dist/src/server/home-sections/theme-dresses.d.ts.map +1 -0
- package/dist/src/server/home-sections/theme-dresses.js +27 -0
- package/dist/src/server/home-sections/video-stories.d.ts +9 -0
- package/dist/src/server/home-sections/video-stories.d.ts.map +1 -0
- package/dist/src/server/home-sections/video-stories.js +9 -0
- package/dist/src/server/home-sections/why-choose-us.d.ts +9 -0
- package/dist/src/server/home-sections/why-choose-us.d.ts.map +1 -0
- package/dist/src/server/home-sections/why-choose-us.js +9 -0
- package/dist/src/server/home.d.ts +62 -0
- package/dist/src/server/home.d.ts.map +1 -0
- package/dist/src/server/home.js +122 -0
- package/dist/src/server/homepage-config.types.d.ts +274 -0
- package/dist/src/server/homepage-config.types.d.ts.map +1 -0
- package/dist/src/server/homepage-config.types.js +33 -0
- package/dist/src/server/homepage-section-defaults.d.ts +188 -0
- package/dist/src/server/homepage-section-defaults.d.ts.map +1 -0
- package/dist/src/server/homepage-section-defaults.js +188 -0
- package/dist/{server → src/server}/index.d.ts +2 -0
- package/dist/src/server/index.d.ts.map +1 -0
- package/dist/{server → src/server}/index.js +2 -0
- package/dist/src/server/locale-actions.d.ts.map +1 -0
- package/dist/src/server/locales.d.ts.map +1 -0
- package/dist/src/server/notifications.d.ts.map +1 -0
- package/dist/src/server/onboarding.d.ts.map +1 -0
- package/dist/src/server/orders.d.ts.map +1 -0
- package/dist/src/server/page-input.d.ts +19 -0
- package/dist/src/server/page-input.d.ts.map +1 -0
- package/dist/src/server/page-input.js +40 -0
- package/dist/src/server/payment-details.d.ts.map +1 -0
- package/dist/src/server/payment.d.ts.map +1 -0
- package/dist/src/server/pincode.d.ts.map +1 -0
- package/dist/src/server/products.d.ts.map +1 -0
- package/dist/src/server/regions.d.ts.map +1 -0
- package/dist/src/server/resolve-home-segment-data.d.ts +25 -0
- package/dist/src/server/resolve-home-segment-data.d.ts.map +1 -0
- package/dist/src/server/resolve-home-segment-data.js +20 -0
- package/dist/src/server/returns.d.ts.map +1 -0
- package/dist/src/server/shoppable-looks.d.ts +17 -0
- package/dist/src/server/shoppable-looks.d.ts.map +1 -0
- package/dist/src/server/shoppable-looks.js +136 -0
- package/dist/src/server/swaps.d.ts.map +1 -0
- package/dist/src/server/variants.d.ts.map +1 -0
- package/dist/src/server/wishlist.d.ts.map +1 -0
- package/dist/src/util/get-locale-header.d.ts.map +1 -0
- package/dist/src/util/medusa-error.d.ts.map +1 -0
- package/dist/src/util/revalidate-cart.d.ts.map +1 -0
- package/dist/src/util/sort-products.d.ts.map +1 -0
- package/dist/src/util/store-client.d.ts.map +1 -0
- package/homepage-config.example.json +209 -0
- package/homepage-sections.example.json +55 -0
- package/package.json +121 -2
- package/segment-data/default-page-input.json +191 -0
- package/src/server/config-merge.ts +31 -0
- package/src/server/dynamic-config.ts +838 -248
- package/src/server/home-sections/about-brand.ts +24 -0
- package/src/server/home-sections/baptism-picks.ts +46 -0
- package/src/server/home-sections/baptism.ts +64 -0
- package/src/server/home-sections/blog-posts.ts +23 -0
- package/src/server/home-sections/brand-marquee.ts +17 -0
- package/src/server/home-sections/brand-pillars.ts +23 -0
- package/src/server/home-sections/category-pills.ts +32 -0
- package/src/server/home-sections/celebrity-trust.ts +42 -0
- package/src/server/home-sections/features.ts +23 -0
- package/src/server/home-sections/hero.ts +24 -0
- package/src/server/home-sections/instagram-posts.ts +23 -0
- package/src/server/home-sections/loved-by-moms.ts +34 -0
- package/src/server/home-sections/luxe-favourites.ts +30 -0
- package/src/server/home-sections/new-arrivals-classic.ts +21 -0
- package/src/server/home-sections/new-arrivals.ts +47 -0
- package/src/server/home-sections/promo-announcements.ts +17 -0
- package/src/server/home-sections/promo-countdown.ts +15 -0
- package/src/server/home-sections/shared.ts +44 -0
- package/src/server/home-sections/shop-by-age.ts +26 -0
- package/src/server/home-sections/shop-by-category.ts +28 -0
- package/src/server/home-sections/testimonials.ts +23 -0
- package/src/server/home-sections/theme-dresses.ts +49 -0
- package/src/server/home-sections/video-stories.ts +23 -0
- package/src/server/home-sections/why-choose-us.ts +23 -0
- package/src/server/home.ts +173 -16
- package/src/server/homepage-config.types.ts +335 -0
- package/src/server/homepage-section-defaults.ts +199 -0
- package/src/server/index.ts +2 -0
- package/src/server/page-input.ts +64 -0
- package/src/server/resolve-home-segment-data.ts +63 -0
- package/src/server/shoppable-looks.ts +178 -0
- package/dist/config.d.ts.map +0 -1
- package/dist/cookies.d.ts.map +0 -1
- package/dist/edge.d.ts.map +0 -1
- package/dist/middleware.d.ts.map +0 -1
- package/dist/server/cart.d.ts.map +0 -1
- package/dist/server/categories.d.ts.map +0 -1
- package/dist/server/collections.d.ts.map +0 -1
- package/dist/server/contact.d.ts.map +0 -1
- package/dist/server/customer-registration.d.ts.map +0 -1
- package/dist/server/customer.d.ts.map +0 -1
- package/dist/server/dynamic-config.d.ts +0 -125
- package/dist/server/dynamic-config.d.ts.map +0 -1
- package/dist/server/dynamic-config.js +0 -289
- package/dist/server/fulfillment.d.ts.map +0 -1
- package/dist/server/guest.d.ts.map +0 -1
- package/dist/server/home.d.ts +0 -15
- package/dist/server/home.d.ts.map +0 -1
- package/dist/server/home.js +0 -45
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/locale-actions.d.ts.map +0 -1
- package/dist/server/locales.d.ts.map +0 -1
- package/dist/server/notifications.d.ts.map +0 -1
- package/dist/server/onboarding.d.ts.map +0 -1
- package/dist/server/orders.d.ts.map +0 -1
- package/dist/server/payment-details.d.ts.map +0 -1
- package/dist/server/payment.d.ts.map +0 -1
- package/dist/server/pincode.d.ts.map +0 -1
- package/dist/server/products.d.ts.map +0 -1
- package/dist/server/regions.d.ts.map +0 -1
- package/dist/server/returns.d.ts.map +0 -1
- package/dist/server/swaps.d.ts.map +0 -1
- package/dist/server/variants.d.ts.map +0 -1
- package/dist/server/wishlist.d.ts.map +0 -1
- package/dist/util/get-locale-header.d.ts.map +0 -1
- package/dist/util/medusa-error.d.ts.map +0 -1
- package/dist/util/revalidate-cart.d.ts.map +0 -1
- package/dist/util/sort-products.d.ts.map +0 -1
- package/dist/util/store-client.d.ts.map +0 -1
- /package/dist/{config.d.ts → src/config.d.ts} +0 -0
- /package/dist/{config.js → src/config.js} +0 -0
- /package/dist/{cookies.d.ts → src/cookies.d.ts} +0 -0
- /package/dist/{cookies.js → src/cookies.js} +0 -0
- /package/dist/{edge.d.ts → src/edge.d.ts} +0 -0
- /package/dist/{edge.js → src/edge.js} +0 -0
- /package/dist/{middleware.d.ts → src/middleware.d.ts} +0 -0
- /package/dist/{middleware.js → src/middleware.js} +0 -0
- /package/dist/{server → src/server}/cart.d.ts +0 -0
- /package/dist/{server → src/server}/cart.js +0 -0
- /package/dist/{server → src/server}/categories.d.ts +0 -0
- /package/dist/{server → src/server}/categories.js +0 -0
- /package/dist/{server → src/server}/collections.d.ts +0 -0
- /package/dist/{server → src/server}/collections.js +0 -0
- /package/dist/{server → src/server}/contact.d.ts +0 -0
- /package/dist/{server → src/server}/contact.js +0 -0
- /package/dist/{server → src/server}/customer-registration.d.ts +0 -0
- /package/dist/{server → src/server}/customer-registration.js +0 -0
- /package/dist/{server → src/server}/customer.d.ts +0 -0
- /package/dist/{server → src/server}/customer.js +0 -0
- /package/dist/{server → src/server}/fulfillment.d.ts +0 -0
- /package/dist/{server → src/server}/fulfillment.js +0 -0
- /package/dist/{server → src/server}/guest.d.ts +0 -0
- /package/dist/{server → src/server}/guest.js +0 -0
- /package/dist/{server → src/server}/locale-actions.d.ts +0 -0
- /package/dist/{server → src/server}/locale-actions.js +0 -0
- /package/dist/{server → src/server}/locales.d.ts +0 -0
- /package/dist/{server → src/server}/locales.js +0 -0
- /package/dist/{server → src/server}/notifications.d.ts +0 -0
- /package/dist/{server → src/server}/notifications.js +0 -0
- /package/dist/{server → src/server}/onboarding.d.ts +0 -0
- /package/dist/{server → src/server}/onboarding.js +0 -0
- /package/dist/{server → src/server}/orders.d.ts +0 -0
- /package/dist/{server → src/server}/orders.js +0 -0
- /package/dist/{server → src/server}/payment-details.d.ts +0 -0
- /package/dist/{server → src/server}/payment-details.js +0 -0
- /package/dist/{server → src/server}/payment.d.ts +0 -0
- /package/dist/{server → src/server}/payment.js +0 -0
- /package/dist/{server → src/server}/pincode.d.ts +0 -0
- /package/dist/{server → src/server}/pincode.js +0 -0
- /package/dist/{server → src/server}/products.d.ts +0 -0
- /package/dist/{server → src/server}/products.js +0 -0
- /package/dist/{server → src/server}/regions.d.ts +0 -0
- /package/dist/{server → src/server}/regions.js +0 -0
- /package/dist/{server → src/server}/returns.d.ts +0 -0
- /package/dist/{server → src/server}/returns.js +0 -0
- /package/dist/{server → src/server}/swaps.d.ts +0 -0
- /package/dist/{server → src/server}/swaps.js +0 -0
- /package/dist/{server → src/server}/variants.d.ts +0 -0
- /package/dist/{server → src/server}/variants.js +0 -0
- /package/dist/{server → src/server}/wishlist.d.ts +0 -0
- /package/dist/{server → src/server}/wishlist.js +0 -0
- /package/dist/{util → src/util}/get-locale-header.d.ts +0 -0
- /package/dist/{util → src/util}/get-locale-header.js +0 -0
- /package/dist/{util → src/util}/medusa-error.d.ts +0 -0
- /package/dist/{util → src/util}/medusa-error.js +0 -0
- /package/dist/{util → src/util}/revalidate-cart.d.ts +0 -0
- /package/dist/{util → src/util}/revalidate-cart.js +0 -0
- /package/dist/{util → src/util}/sort-products.d.ts +0 -0
- /package/dist/{util → src/util}/sort-products.js +0 -0
- /package/dist/{util → src/util}/store-client.d.ts +0 -0
- /package/dist/{util → src/util}/store-client.js +0 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Paste under dynamic-config value as homepage-config. Omitted fields use medusa-storefront-data package defaults.",
|
|
3
|
+
"homepage-config": {
|
|
4
|
+
"logo": "/Logo.png",
|
|
5
|
+
"website-description": "Premium kids fashion for everyday wear and special occasions.",
|
|
6
|
+
|
|
7
|
+
"homepage-banner-array": [
|
|
8
|
+
{
|
|
9
|
+
"homepage-banner": {
|
|
10
|
+
"homepage-banner-image": "/banners/hero-1.jpg",
|
|
11
|
+
"homepage-banner-title": "New Collection",
|
|
12
|
+
"homepage-banner-subtitle": "Shop the latest styles",
|
|
13
|
+
"homepage-banner-description": "Discover outfits for every celebration.",
|
|
14
|
+
"homepage-banner-button-name": "Shop Now",
|
|
15
|
+
"homepage-banner-button-link": "/store"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
|
|
20
|
+
"promo-bar": {
|
|
21
|
+
"promo-text": "Free shipping on orders over $99",
|
|
22
|
+
"promo-code": "FREESHIP",
|
|
23
|
+
"promo-active": false
|
|
24
|
+
},
|
|
25
|
+
|
|
26
|
+
"contact-us": {
|
|
27
|
+
"contact-phone": "+1 000 000 0000",
|
|
28
|
+
"contact-email": "hello@yourstore.com",
|
|
29
|
+
"contact-address": "Your store address"
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
"social-links": [
|
|
33
|
+
{
|
|
34
|
+
"social-link": {
|
|
35
|
+
"social-platform-name": "Instagram",
|
|
36
|
+
"social-platform-icon": "/icons/instagram.svg",
|
|
37
|
+
"social-platform-url": "https://www.instagram.com/yourbrand/"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
|
|
42
|
+
"ratings": [
|
|
43
|
+
{
|
|
44
|
+
"text": "Beautiful quality and fast delivery.",
|
|
45
|
+
"name": "Happy Customer",
|
|
46
|
+
"rating": 5
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
|
|
50
|
+
"sections": {
|
|
51
|
+
"promoAnnouncements": {
|
|
52
|
+
"messages": [
|
|
53
|
+
"Free shipping on orders over a threshold",
|
|
54
|
+
"Worldwide shipping available"
|
|
55
|
+
]
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
"newArrivals": {
|
|
59
|
+
"title": "New Arrivals",
|
|
60
|
+
"subtitle": "Fresh styles just landed",
|
|
61
|
+
"variant": "grid"
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
"newArrivalsClassic": {
|
|
65
|
+
"title": "New Arrivals",
|
|
66
|
+
"subtitle": "Classic product preview layout",
|
|
67
|
+
"variant": "classic"
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
"promoCountdown": {
|
|
71
|
+
"code": "SAVE50",
|
|
72
|
+
"text": "Up to 50% off — shop your favourites before they're gone!",
|
|
73
|
+
"end-at": "2026-12-31T23:59:59.000Z",
|
|
74
|
+
"active": true,
|
|
75
|
+
"cta-label": "Shop Offers",
|
|
76
|
+
"cta-href": "/store"
|
|
77
|
+
},
|
|
78
|
+
|
|
79
|
+
"celebrityTrust": {
|
|
80
|
+
"title": "Trusted by Celebrities",
|
|
81
|
+
"text": "When the stars dress their little ones in our collections."
|
|
82
|
+
},
|
|
83
|
+
|
|
84
|
+
"luxeFavourites": {
|
|
85
|
+
"title": "Luxe Favourites"
|
|
86
|
+
},
|
|
87
|
+
|
|
88
|
+
"shopByCategory": {
|
|
89
|
+
"title": "Shop By Categories",
|
|
90
|
+
"description": "Browse by style and occasion"
|
|
91
|
+
},
|
|
92
|
+
|
|
93
|
+
"baptism": {
|
|
94
|
+
"title": "Baptism"
|
|
95
|
+
},
|
|
96
|
+
|
|
97
|
+
"baptismPicks": {
|
|
98
|
+
"title": "Baptism Picks",
|
|
99
|
+
"looks": [
|
|
100
|
+
{
|
|
101
|
+
"image": "https://your-cdn.com/looks/baptism-1.jpg",
|
|
102
|
+
"product-ids": ["prod_REPLACE_ME_1", "prod_REPLACE_ME_2"]
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"image": "https://your-cdn.com/looks/baptism-2.jpg",
|
|
106
|
+
"product-handles": ["off-white-baptism-gown"]
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
"themeDresses": {
|
|
112
|
+
"title": "Theme",
|
|
113
|
+
"description": "Dress her in a dreamy theme outfit for her birthday celebration"
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
"brandMarquee": {
|
|
117
|
+
"text": "est. 2012"
|
|
118
|
+
},
|
|
119
|
+
|
|
120
|
+
"aboutBrand": {
|
|
121
|
+
"eyebrow": "Who We Are",
|
|
122
|
+
"title": "Discover what makes us different",
|
|
123
|
+
"description": "We offer stylish, comfortable, and high-quality clothing for children.",
|
|
124
|
+
"readMoreHref": "/about",
|
|
125
|
+
"stats": [
|
|
126
|
+
{ "label": "Visit us in store", "value": "Find a location" },
|
|
127
|
+
{ "label": "Happy customers", "value": "150k+" },
|
|
128
|
+
{ "label": "Products", "value": "3000+" }
|
|
129
|
+
]
|
|
130
|
+
},
|
|
131
|
+
|
|
132
|
+
"testimonials": {
|
|
133
|
+
"title": "What Clients Talk About Us",
|
|
134
|
+
"description": "The Trust We've Earned",
|
|
135
|
+
"items": [
|
|
136
|
+
{
|
|
137
|
+
"text": "Your review text here.",
|
|
138
|
+
"name": "Customer Name",
|
|
139
|
+
"rating": 5
|
|
140
|
+
}
|
|
141
|
+
]
|
|
142
|
+
},
|
|
143
|
+
|
|
144
|
+
"brandPillars": {
|
|
145
|
+
"title": "Why families choose us",
|
|
146
|
+
"pillars": [
|
|
147
|
+
{
|
|
148
|
+
"title": "Your favorite kids destination",
|
|
149
|
+
"description": "Trendy, high-quality outfits for little ones.",
|
|
150
|
+
"image": "/features/store.jpg"
|
|
151
|
+
}
|
|
152
|
+
]
|
|
153
|
+
},
|
|
154
|
+
|
|
155
|
+
"instagramPosts": {
|
|
156
|
+
"title": "Follow Us on Instagram",
|
|
157
|
+
"handle": "yourbrand",
|
|
158
|
+
"profile-url": "https://www.instagram.com/yourbrand/",
|
|
159
|
+
"profile-image": "/Logo.png",
|
|
160
|
+
"posts": [
|
|
161
|
+
{
|
|
162
|
+
"image": "https://your-cdn.com/instagram/post-1.jpg",
|
|
163
|
+
"url": "https://www.instagram.com/p/EXAMPLE/"
|
|
164
|
+
}
|
|
165
|
+
]
|
|
166
|
+
},
|
|
167
|
+
|
|
168
|
+
"features": {
|
|
169
|
+
"title": "Why shop with us",
|
|
170
|
+
"description": "Secure checkout, fast delivery, and easy exchanges",
|
|
171
|
+
"features": [
|
|
172
|
+
{ "name": "100% Secure", "icon": "/secure.svg" },
|
|
173
|
+
{ "name": "Easy Exchanges", "icon": "/exchnage.svg" }
|
|
174
|
+
]
|
|
175
|
+
},
|
|
176
|
+
|
|
177
|
+
"whyChooseUs": {
|
|
178
|
+
"title": "Why Choose Us?",
|
|
179
|
+
"features": [
|
|
180
|
+
{ "feature-name": "Premium Quality", "feature-icon": "/icons/quality.svg" }
|
|
181
|
+
]
|
|
182
|
+
},
|
|
183
|
+
|
|
184
|
+
"videoStories": {
|
|
185
|
+
"title": "Watch Stories & Reviews",
|
|
186
|
+
"video-urls": [
|
|
187
|
+
"https://your-cdn.com/videos/story-1.mp4",
|
|
188
|
+
{
|
|
189
|
+
"video-story": {
|
|
190
|
+
"video-url": "https://your-cdn.com/videos/story-2.mp4"
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
]
|
|
194
|
+
},
|
|
195
|
+
|
|
196
|
+
"blogPosts": {
|
|
197
|
+
"title": "Blog posts",
|
|
198
|
+
"posts": [
|
|
199
|
+
{
|
|
200
|
+
"title": "Which Theme Dress Matches Her Vibe?",
|
|
201
|
+
"href": "/blog/theme-dress-vibe",
|
|
202
|
+
"category": "Theme Dress",
|
|
203
|
+
"date": "May 24, 2026"
|
|
204
|
+
}
|
|
205
|
+
]
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Minimal sections override. Full backend template: homepage-config.example.json. Docs: HOMEPAGE_CONFIG.md",
|
|
3
|
+
"homepage-config": {
|
|
4
|
+
"sections": {
|
|
5
|
+
"newArrivals": {
|
|
6
|
+
"title": "New Arrivals",
|
|
7
|
+
"subtitle": "Your custom subtitle from CMS",
|
|
8
|
+
"variant": "grid"
|
|
9
|
+
},
|
|
10
|
+
"newArrivalsClassic": {
|
|
11
|
+
"title": "New Arrivals",
|
|
12
|
+
"subtitle": "Classic ProductPreview layout",
|
|
13
|
+
"variant": "classic"
|
|
14
|
+
},
|
|
15
|
+
"promoCountdown": {
|
|
16
|
+
"code": "SAVE50",
|
|
17
|
+
"text": "Up to 50% off — shop your favourites before they're gone!",
|
|
18
|
+
"end-at": "2026-12-31T23:59:59.000Z",
|
|
19
|
+
"active": true,
|
|
20
|
+
"cta-label": "Shop Offers",
|
|
21
|
+
"cta-href": "/store"
|
|
22
|
+
},
|
|
23
|
+
"promoAnnouncements": {
|
|
24
|
+
"messages": [
|
|
25
|
+
"Custom announcement line 1",
|
|
26
|
+
"Custom announcement line 2"
|
|
27
|
+
]
|
|
28
|
+
},
|
|
29
|
+
"testimonials": {
|
|
30
|
+
"title": "What Clients Talk About Us",
|
|
31
|
+
"description": "The Trust We've Earned",
|
|
32
|
+
"items": [
|
|
33
|
+
{
|
|
34
|
+
"text": "Your review text here.",
|
|
35
|
+
"name": "Customer Name"
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
"baptismPicks": {
|
|
40
|
+
"title": "Baptism Picks",
|
|
41
|
+
"looks": [
|
|
42
|
+
{
|
|
43
|
+
"image": "https://your-cdn.com/looks/baptism-1.jpg",
|
|
44
|
+
"product-ids": ["prod_REPLACE_ME_1", "prod_REPLACE_ME_2"]
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"image": "https://your-cdn.com/looks/baptism-2.jpg",
|
|
48
|
+
"product-handles": ["off-white-baptism-gown"]
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"ratings": []
|
|
54
|
+
}
|
|
55
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "medusa-storefront-data",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Medusa storefront server data layer extracted from Next.js storefront",
|
|
6
6
|
"license": "MIT",
|
|
@@ -9,7 +9,11 @@
|
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"src",
|
|
12
|
-
"dist"
|
|
12
|
+
"dist",
|
|
13
|
+
"homepage-config.example.json",
|
|
14
|
+
"homepage-sections.example.json",
|
|
15
|
+
"segment-data",
|
|
16
|
+
"HOMEPAGE_CONFIG.md"
|
|
13
17
|
],
|
|
14
18
|
"scripts": {
|
|
15
19
|
"build": "tsc",
|
|
@@ -203,6 +207,121 @@
|
|
|
203
207
|
"types": "./dist/server/wishlist.d.ts",
|
|
204
208
|
"import": "./src/server/wishlist.ts",
|
|
205
209
|
"default": "./src/server/wishlist.ts"
|
|
210
|
+
},
|
|
211
|
+
"./home/sections/promoAnnouncements": {
|
|
212
|
+
"types": "./dist/server/home-sections/promo-announcements.d.ts",
|
|
213
|
+
"import": "./src/server/home-sections/promo-announcements.ts",
|
|
214
|
+
"default": "./src/server/home-sections/promo-announcements.ts"
|
|
215
|
+
},
|
|
216
|
+
"./home/sections/hero": {
|
|
217
|
+
"types": "./dist/server/home-sections/hero.d.ts",
|
|
218
|
+
"import": "./src/server/home-sections/hero.ts",
|
|
219
|
+
"default": "./src/server/home-sections/hero.ts"
|
|
220
|
+
},
|
|
221
|
+
"./home/sections/categoryPills": {
|
|
222
|
+
"types": "./dist/server/home-sections/category-pills.d.ts",
|
|
223
|
+
"import": "./src/server/home-sections/category-pills.ts",
|
|
224
|
+
"default": "./src/server/home-sections/category-pills.ts"
|
|
225
|
+
},
|
|
226
|
+
"./home/sections/newArrivals": {
|
|
227
|
+
"types": "./dist/server/home-sections/new-arrivals.d.ts",
|
|
228
|
+
"import": "./src/server/home-sections/new-arrivals.ts",
|
|
229
|
+
"default": "./src/server/home-sections/new-arrivals.ts"
|
|
230
|
+
},
|
|
231
|
+
"./home/sections/newArrivalsClassic": {
|
|
232
|
+
"types": "./dist/server/home-sections/new-arrivals-classic.d.ts",
|
|
233
|
+
"import": "./src/server/home-sections/new-arrivals-classic.ts",
|
|
234
|
+
"default": "./src/server/home-sections/new-arrivals-classic.ts"
|
|
235
|
+
},
|
|
236
|
+
"./home/sections/promoCountdown": {
|
|
237
|
+
"types": "./dist/server/home-sections/promo-countdown.d.ts",
|
|
238
|
+
"import": "./src/server/home-sections/promo-countdown.ts",
|
|
239
|
+
"default": "./src/server/home-sections/promo-countdown.ts"
|
|
240
|
+
},
|
|
241
|
+
"./home/sections/celebrityTrust": {
|
|
242
|
+
"types": "./dist/server/home-sections/celebrity-trust.d.ts",
|
|
243
|
+
"import": "./src/server/home-sections/celebrity-trust.ts",
|
|
244
|
+
"default": "./src/server/home-sections/celebrity-trust.ts"
|
|
245
|
+
},
|
|
246
|
+
"./home/sections/luxeFavourites": {
|
|
247
|
+
"types": "./dist/server/home-sections/luxe-favourites.d.ts",
|
|
248
|
+
"import": "./src/server/home-sections/luxe-favourites.ts",
|
|
249
|
+
"default": "./src/server/home-sections/luxe-favourites.ts"
|
|
250
|
+
},
|
|
251
|
+
"./home/sections/shopByCategory": {
|
|
252
|
+
"types": "./dist/server/home-sections/shop-by-category.d.ts",
|
|
253
|
+
"import": "./src/server/home-sections/shop-by-category.ts",
|
|
254
|
+
"default": "./src/server/home-sections/shop-by-category.ts"
|
|
255
|
+
},
|
|
256
|
+
"./home/sections/baptism": {
|
|
257
|
+
"types": "./dist/server/home-sections/baptism.d.ts",
|
|
258
|
+
"import": "./src/server/home-sections/baptism.ts",
|
|
259
|
+
"default": "./src/server/home-sections/baptism.ts"
|
|
260
|
+
},
|
|
261
|
+
"./home/sections/baptismPicks": {
|
|
262
|
+
"types": "./dist/server/home-sections/baptism-picks.d.ts",
|
|
263
|
+
"import": "./src/server/home-sections/baptism-picks.ts",
|
|
264
|
+
"default": "./src/server/home-sections/baptism-picks.ts"
|
|
265
|
+
},
|
|
266
|
+
"./home/sections/themeDresses": {
|
|
267
|
+
"types": "./dist/server/home-sections/theme-dresses.d.ts",
|
|
268
|
+
"import": "./src/server/home-sections/theme-dresses.ts",
|
|
269
|
+
"default": "./src/server/home-sections/theme-dresses.ts"
|
|
270
|
+
},
|
|
271
|
+
"./home/sections/brandMarquee": {
|
|
272
|
+
"types": "./dist/server/home-sections/brand-marquee.d.ts",
|
|
273
|
+
"import": "./src/server/home-sections/brand-marquee.ts",
|
|
274
|
+
"default": "./src/server/home-sections/brand-marquee.ts"
|
|
275
|
+
},
|
|
276
|
+
"./home/sections/aboutBrand": {
|
|
277
|
+
"types": "./dist/server/home-sections/about-brand.d.ts",
|
|
278
|
+
"import": "./src/server/home-sections/about-brand.ts",
|
|
279
|
+
"default": "./src/server/home-sections/about-brand.ts"
|
|
280
|
+
},
|
|
281
|
+
"./home/sections/testimonials": {
|
|
282
|
+
"types": "./dist/server/home-sections/testimonials.d.ts",
|
|
283
|
+
"import": "./src/server/home-sections/testimonials.ts",
|
|
284
|
+
"default": "./src/server/home-sections/testimonials.ts"
|
|
285
|
+
},
|
|
286
|
+
"./home/sections/brandPillars": {
|
|
287
|
+
"types": "./dist/server/home-sections/brand-pillars.d.ts",
|
|
288
|
+
"import": "./src/server/home-sections/brand-pillars.ts",
|
|
289
|
+
"default": "./src/server/home-sections/brand-pillars.ts"
|
|
290
|
+
},
|
|
291
|
+
"./home/sections/instagramPosts": {
|
|
292
|
+
"types": "./dist/server/home-sections/instagram-posts.d.ts",
|
|
293
|
+
"import": "./src/server/home-sections/instagram-posts.ts",
|
|
294
|
+
"default": "./src/server/home-sections/instagram-posts.ts"
|
|
295
|
+
},
|
|
296
|
+
"./home/sections/features": {
|
|
297
|
+
"types": "./dist/server/home-sections/features.d.ts",
|
|
298
|
+
"import": "./src/server/home-sections/features.ts",
|
|
299
|
+
"default": "./src/server/home-sections/features.ts"
|
|
300
|
+
},
|
|
301
|
+
"./home/sections/shopByAge": {
|
|
302
|
+
"types": "./dist/server/home-sections/shop-by-age.d.ts",
|
|
303
|
+
"import": "./src/server/home-sections/shop-by-age.ts",
|
|
304
|
+
"default": "./src/server/home-sections/shop-by-age.ts"
|
|
305
|
+
},
|
|
306
|
+
"./home/sections/whyChooseUs": {
|
|
307
|
+
"types": "./dist/server/home-sections/why-choose-us.d.ts",
|
|
308
|
+
"import": "./src/server/home-sections/why-choose-us.ts",
|
|
309
|
+
"default": "./src/server/home-sections/why-choose-us.ts"
|
|
310
|
+
},
|
|
311
|
+
"./home/sections/lovedByMoms": {
|
|
312
|
+
"types": "./dist/server/home-sections/loved-by-moms.d.ts",
|
|
313
|
+
"import": "./src/server/home-sections/loved-by-moms.ts",
|
|
314
|
+
"default": "./src/server/home-sections/loved-by-moms.ts"
|
|
315
|
+
},
|
|
316
|
+
"./home/sections/videoStories": {
|
|
317
|
+
"types": "./dist/server/home-sections/video-stories.d.ts",
|
|
318
|
+
"import": "./src/server/home-sections/video-stories.ts",
|
|
319
|
+
"default": "./src/server/home-sections/video-stories.ts"
|
|
320
|
+
},
|
|
321
|
+
"./home/sections/blogPosts": {
|
|
322
|
+
"types": "./dist/server/home-sections/blog-posts.d.ts",
|
|
323
|
+
"import": "./src/server/home-sections/blog-posts.ts",
|
|
324
|
+
"default": "./src/server/home-sections/blog-posts.ts"
|
|
206
325
|
}
|
|
207
326
|
},
|
|
208
327
|
"main": "./dist/server/index.js",
|
|
@@ -0,0 +1,191 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/** Merge CMS section block onto package defaults (override wins when set). */
|
|
2
|
+
export function mergeSectionBlock(
|
|
3
|
+
defaults: Record<string, unknown>,
|
|
4
|
+
override: Record<string, unknown> | null
|
|
5
|
+
): Record<string, unknown> {
|
|
6
|
+
if (!override) return { ...defaults }
|
|
7
|
+
const merged = { ...defaults }
|
|
8
|
+
for (const [key, value] of Object.entries(override)) {
|
|
9
|
+
if (value === undefined || value === null) continue
|
|
10
|
+
if (Array.isArray(value)) {
|
|
11
|
+
if (value.length > 0) merged[key] = value
|
|
12
|
+
continue
|
|
13
|
+
}
|
|
14
|
+
if (typeof value === "string") {
|
|
15
|
+
if (value.trim()) merged[key] = value.trim()
|
|
16
|
+
continue
|
|
17
|
+
}
|
|
18
|
+
if (typeof value === "boolean" || typeof value === "number") {
|
|
19
|
+
merged[key] = value
|
|
20
|
+
continue
|
|
21
|
+
}
|
|
22
|
+
if (typeof value === "object") {
|
|
23
|
+
const base =
|
|
24
|
+
merged[key] && typeof merged[key] === "object" && !Array.isArray(merged[key])
|
|
25
|
+
? (merged[key] as Record<string, unknown>)
|
|
26
|
+
: {}
|
|
27
|
+
merged[key] = mergeSectionBlock(base, value as Record<string, unknown>)
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return merged
|
|
31
|
+
}
|