@pradip1995/framework-runtime 0.2.5 → 0.2.7
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/package.json +4 -4
- package/src/index.ts +1 -0
- package/src/render-configured-page.tsx +5 -0
- package/src/segment-props.ts +86 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pradip1995/framework-runtime",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.7",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
"./render-page": "./src/render-page.tsx"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@pradip1995/framework-core": "0.2.1",
|
|
18
|
-
"@pradip1995/plugin-sdk": "0.2.
|
|
19
|
-
"@pradip1995/medusa-connector": "0.2.
|
|
17
|
+
"@pradip1995/framework-core": "^0.2.1",
|
|
18
|
+
"@pradip1995/plugin-sdk": "^0.2.2",
|
|
19
|
+
"@pradip1995/medusa-connector": "^0.2.3"
|
|
20
20
|
},
|
|
21
21
|
"peerDependencies": {
|
|
22
22
|
"next": ">=15",
|
package/src/index.ts
CHANGED
|
@@ -8,4 +8,5 @@ export {
|
|
|
8
8
|
export { mergeBuilderSegmentData } from "./builder-data"
|
|
9
9
|
export type { RenderPageInput } from "./render-page"
|
|
10
10
|
export type { ConfiguredPage, RenderConfiguredPageInput, SegmentEntry } from "./render-configured-page"
|
|
11
|
+
export type { SiteConfig } from "./segment-props"
|
|
11
12
|
export type { BuilderSegmentDataFile } from "./builder-data"
|
|
@@ -3,8 +3,10 @@ import { resolveServices } from "./register-services"
|
|
|
3
3
|
import {
|
|
4
4
|
applyChromeSegmentData,
|
|
5
5
|
applyBuilderDataToWorkflow,
|
|
6
|
+
applySiteConfig,
|
|
6
7
|
resolveSegmentProps,
|
|
7
8
|
type ChromeSegmentRef,
|
|
9
|
+
type SiteConfig,
|
|
8
10
|
} from "./segment-props"
|
|
9
11
|
import type { BuilderSegmentDataFile } from "./builder-data"
|
|
10
12
|
import type { ComponentType, ReactNode } from "react"
|
|
@@ -34,6 +36,8 @@ export type RenderConfiguredPageInput = {
|
|
|
34
36
|
searchParams: Record<string, string | string[] | undefined>
|
|
35
37
|
/** Global layout chrome from pages.config.json chrome[] */
|
|
36
38
|
chrome?: ChromeSegmentRef[] | null
|
|
39
|
+
/** Store branding defaults from pages.config.json site */
|
|
40
|
+
site?: SiteConfig | null
|
|
37
41
|
/** @deprecated legacy global overlay */
|
|
38
42
|
pageSegmentData?: BuilderSegmentDataFile | null
|
|
39
43
|
/** @deprecated use chrome + inline segment data */
|
|
@@ -63,6 +67,7 @@ export async function renderConfiguredPage(input: RenderConfiguredPageInput): Pr
|
|
|
63
67
|
? applyBuilderDataToWorkflow(workflowData, legacyOverlay)
|
|
64
68
|
: workflowData
|
|
65
69
|
data = applyChromeSegmentData(data, input.chrome)
|
|
70
|
+
data = applySiteConfig(data, input.site)
|
|
66
71
|
|
|
67
72
|
const Layout = input.page.layout
|
|
68
73
|
|
package/src/segment-props.ts
CHANGED
|
@@ -17,7 +17,8 @@ export const SEGMENT_DATA_KEYS: Record<string, string> = {
|
|
|
17
17
|
"@pradip1995/segment-nav": "nav",
|
|
18
18
|
"@pradip1995/segment-footer": "footer",
|
|
19
19
|
"@pradip1995/segment-promo-bar": "promoBar",
|
|
20
|
-
|
|
20
|
+
"@pradip1995/segment-product-grid": "store",
|
|
21
|
+
"@pradip1995/segment-beauty-shop-grid": "store",
|
|
21
22
|
"@pradip1995/segment-refinement-list": "store",
|
|
22
23
|
"@pradip1995/segment-mobile-filters": "store",
|
|
23
24
|
"@pradip1995/segment-product-gallery": "product",
|
|
@@ -36,6 +37,14 @@ export const SEGMENT_DATA_KEYS: Record<string, string> = {
|
|
|
36
37
|
"@pradip1995/segment-order-details": "orderPage",
|
|
37
38
|
"@pradip1995/segment-wishlist": "wishlistPage",
|
|
38
39
|
"@pradip1995/segment-help": "helpPage",
|
|
40
|
+
"@pradip1995/segment-shop-by-nav": "shopByNav",
|
|
41
|
+
"@pradip1995/segment-shop-banner": "shopBanner",
|
|
42
|
+
"@pradip1995/segment-newsletter": "newsletter",
|
|
43
|
+
"@pradip1995/segment-store-faqs": "storeFaqs",
|
|
44
|
+
"@pradip1995/segment-beauty-category-tiles": "beautyCategories",
|
|
45
|
+
"@pradip1995/segment-beauty-promise": "beautyPromise",
|
|
46
|
+
"@pradip1995/segment-beauty-reviews": "beautyReviews",
|
|
47
|
+
"@pradip1995/segment-beauty-values": "beautyValues",
|
|
39
48
|
}
|
|
40
49
|
|
|
41
50
|
export function getSegmentDataKey(segmentPkg: string): string | undefined {
|
|
@@ -47,7 +56,7 @@ export function getSegmentProps(
|
|
|
47
56
|
data: Record<string, unknown>
|
|
48
57
|
): Record<string, unknown> {
|
|
49
58
|
const key = SEGMENT_DATA_KEYS[segmentPkg]
|
|
50
|
-
if (!key) return
|
|
59
|
+
if (!key) return {}
|
|
51
60
|
const value = data[key]
|
|
52
61
|
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
53
62
|
return value as Record<string, unknown>
|
|
@@ -99,12 +108,85 @@ export function resolveSegmentProps(
|
|
|
99
108
|
base.cart = layoutCart
|
|
100
109
|
}
|
|
101
110
|
|
|
102
|
-
if (!inlineData || Object.keys(inlineData).length === 0)
|
|
103
|
-
|
|
111
|
+
if (!inlineData || Object.keys(inlineData).length === 0) {
|
|
112
|
+
return applyStorefrontDefaults(base, workflowData)
|
|
113
|
+
}
|
|
114
|
+
return applyStorefrontDefaults(mergeSegmentRecords(base, inlineData), workflowData)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function applyStorefrontDefaults(
|
|
118
|
+
props: Record<string, unknown>,
|
|
119
|
+
workflowData: Record<string, unknown>
|
|
120
|
+
): Record<string, unknown> {
|
|
121
|
+
const next = { ...props }
|
|
122
|
+
const variant = workflowData.productCardVariant
|
|
123
|
+
if (
|
|
124
|
+
(variant === "beauty" || variant === "default") &&
|
|
125
|
+
next.variant === undefined
|
|
126
|
+
) {
|
|
127
|
+
next.variant = variant
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (next.shopName === undefined) {
|
|
131
|
+
const nav = workflowData.nav
|
|
132
|
+
const footer = workflowData.footer
|
|
133
|
+
const checkout = workflowData.checkout
|
|
134
|
+
const siteName =
|
|
135
|
+
(nav && typeof nav === "object" && (nav as Record<string, unknown>).shopName) ||
|
|
136
|
+
(footer && typeof footer === "object" && (footer as Record<string, unknown>).shopName) ||
|
|
137
|
+
(checkout && typeof checkout === "object" && (checkout as Record<string, unknown>).shopName)
|
|
138
|
+
if (typeof siteName === "string" && siteName.trim()) {
|
|
139
|
+
next.shopName = siteName
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return next
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/** Apply pages.config site defaults when chrome/workflow did not set layout fields. */
|
|
147
|
+
export function applySiteConfig(
|
|
148
|
+
workflowData: Record<string, unknown>,
|
|
149
|
+
site: SiteConfig | null | undefined
|
|
150
|
+
): Record<string, unknown> {
|
|
151
|
+
if (!site) return workflowData
|
|
152
|
+
const merged = { ...workflowData }
|
|
153
|
+
|
|
154
|
+
if (site.productCardVariant) {
|
|
155
|
+
merged.productCardVariant = site.productCardVariant
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (site.name) {
|
|
159
|
+
if (merged.nav && typeof merged.nav === "object" && !Array.isArray(merged.nav)) {
|
|
160
|
+
const nav = merged.nav as Record<string, unknown>
|
|
161
|
+
if (!nav.shopName) merged.nav = { ...nav, shopName: site.name }
|
|
162
|
+
}
|
|
163
|
+
if (merged.footer && typeof merged.footer === "object" && !Array.isArray(merged.footer)) {
|
|
164
|
+
const footer = merged.footer as Record<string, unknown>
|
|
165
|
+
if (!footer.shopName) merged.footer = { ...footer, shopName: site.name }
|
|
166
|
+
}
|
|
167
|
+
if (site.name && merged.checkout && typeof merged.checkout === "object" && !Array.isArray(merged.checkout)) {
|
|
168
|
+
const checkout = merged.checkout as Record<string, unknown>
|
|
169
|
+
if (!checkout.shopName) merged.checkout = { ...checkout, shopName: site.name }
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (site.description && merged.footer && typeof merged.footer === "object" && !Array.isArray(merged.footer)) {
|
|
174
|
+
const footer = merged.footer as Record<string, unknown>
|
|
175
|
+
if (!footer.description) merged.footer = { ...footer, description: site.description }
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return merged
|
|
104
179
|
}
|
|
105
180
|
|
|
106
181
|
export type ChromeSegmentRef = string | { package: string; data?: Record<string, unknown> }
|
|
107
182
|
|
|
183
|
+
export type SiteConfig = {
|
|
184
|
+
name?: string
|
|
185
|
+
description?: string
|
|
186
|
+
locale?: string
|
|
187
|
+
productCardVariant?: "default" | "beauty"
|
|
188
|
+
}
|
|
189
|
+
|
|
108
190
|
function chromePackageName(ref: ChromeSegmentRef): string {
|
|
109
191
|
return typeof ref === "string" ? ref : ref.package
|
|
110
192
|
}
|